ZGlmZiAtLWdpdCBhLy5jbGFuZy1mb3JtYXQgYi8uY2xhbmctZm9ybWF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1OGUyMjIKLS0tIC9kZXYvbnVsbAorKysgYi8uY2xhbmctZm9ybWF0CkBAIC0wLDAgKzEsNzkgQEAKK0FjY2Vzc01vZGlmaWVyT2Zmc2V0OiAtNAorCitBbGlnbkFmdGVyT3BlbkJyYWNrZXQ6IEFsaWduCitBbGlnbkNvbnNlY3V0aXZlQXNzaWdubWVudHM6IGZhbHNlCitBbGlnbkNvbnNlY3V0aXZlRGVjbGFyYXRpb25zOiBmYWxzZQorQWxpZ25Fc2NhcGVkTmV3bGluZXNMZWZ0OiBmYWxzZQorQWxpZ25PcGVyYW5kczogICB0cnVlCitBbGlnblRyYWlsaW5nQ29tbWVudHM6IHRydWUKKworQWxsb3dBbGxQYXJhbWV0ZXJzT2ZEZWNsYXJhdGlvbk9uTmV4dExpbmU6IGZhbHNlCisKK0FsbG93U2hvcnRCbG9ja3NPbkFTaW5nbGVMaW5lOiBmYWxzZQorQWxsb3dTaG9ydENhc2VMYWJlbHNPbkFTaW5nbGVMaW5lOiBmYWxzZQorQWxsb3dTaG9ydEZ1bmN0aW9uc09uQVNpbmdsZUxpbmU6IElubGluZQorQWxsb3dTaG9ydElmU3RhdGVtZW50c09uQVNpbmdsZUxpbmU6IGZhbHNlCitBbGxvd1Nob3J0TG9vcHNPbkFTaW5nbGVMaW5lOiBmYWxzZQorCitBbHdheXNCcmVha0FmdGVyRGVmaW5pdGlvblJldHVyblR5cGU6IE5vbmUKK0Fsd2F5c0JyZWFrQmVmb3JlTXVsdGlsaW5lU3RyaW5nczogZmFsc2UKK0Fsd2F5c0JyZWFrVGVtcGxhdGVEZWNsYXJhdGlvbnM6IGZhbHNlCisKK0JpblBhY2tBcmd1bWVudHM6IHRydWUKK0JpblBhY2tQYXJhbWV0ZXJzOiBmYWxzZQorQnJhY2VXcmFwcGluZzoKKyAgQWZ0ZXJDb250cm9sU3RhdGVtZW50OiBmYWxzZQorICBBZnRlckVudW06ICAgICAgIGZhbHNlCisgIEFmdGVyRnVuY3Rpb246ICAgdHJ1ZQorICBBZnRlclN0cnVjdDogICAgIGZhbHNlCisgIEFmdGVyVW5pb246ICAgICAgZmFsc2UKKyAgQmVmb3JlQ2F0Y2g6ICAgICBmYWxzZQorICBCZWZvcmVFbHNlOiAgICAgIGZhbHNlCisgIEluZGVudEJyYWNlczogICAgZmFsc2UKKworQnJlYWtCZWZvcmVCaW5hcnlPcGVyYXRvcnM6IE5vbmUKK0JyZWFrQmVmb3JlQnJhY2VzOiBDdXN0b20KK0JyZWFrQmVmb3JlVGVybmFyeU9wZXJhdG9yczogdHJ1ZQorCitDb2x1bW5MaW1pdDogICAgIDgwCitDb21tZW50UHJhZ21hczogICdeIElXWVUgcHJhZ21hOicKK0NvbnRpbnVhdGlvbkluZGVudFdpZHRoOiA0CitEZXJpdmVQb2ludGVyQWxpZ25tZW50OiBmYWxzZQorRGlzYWJsZUZvcm1hdDogICBmYWxzZQorRXhwZXJpbWVudGFsQXV0b0RldGVjdEJpblBhY2tpbmc6IGZhbHNlCisKK0luZGVudENhc2VMYWJlbHM6IGZhbHNlCitJbmRlbnRXaWR0aDogICAgIDQKK0luZGVudFdyYXBwZWRGdW5jdGlvbk5hbWVzOiBmYWxzZQorCitLZWVwRW1wdHlMaW5lc0F0VGhlU3RhcnRPZkJsb2NrczogZmFsc2UKKworTWF4RW1wdHlMaW5lc1RvS2VlcDogMQorCitQZW5hbHR5QnJlYWtCZWZvcmVGaXJzdENhbGxQYXJhbWV0ZXI6IDE2CitQZW5hbHR5QnJlYWtDb21tZW50OiAzMDAKK1BlbmFsdHlCcmVha0ZpcnN0TGVzc0xlc3M6IDEyMAorUGVuYWx0eUJyZWFrU3RyaW5nOiAxMDAwCitQZW5hbHR5RXhjZXNzQ2hhcmFjdGVyOiAxMDAwCitQZW5hbHR5UmV0dXJuVHlwZU9uSXRzT3duTGluZTogOTAwMAorCitDcHAxMUJyYWNlZExpc3RTdHlsZTogZmFsc2UKKworUG9pbnRlckFsaWdubWVudDogUmlnaHQKKworUmVmbG93Q29tbWVudHM6ICB0cnVlCisKK1NvcnRJbmNsdWRlczogZmFsc2UKKworU3BhY2VBZnRlckNTdHlsZUNhc3Q6IGZhbHNlCitTcGFjZUJlZm9yZUFzc2lnbm1lbnRPcGVyYXRvcnM6IHRydWUKK1NwYWNlQmVmb3JlUGFyZW5zOiBDb250cm9sU3RhdGVtZW50cworU3BhY2VJbkVtcHR5UGFyZW50aGVzZXM6IGZhbHNlCitTcGFjZXNCZWZvcmVUcmFpbGluZ0NvbW1lbnRzOiAxCitTcGFjZXNJbkFuZ2xlczogIGZhbHNlCitTcGFjZXNJbkNvbnRhaW5lckxpdGVyYWxzOiB0cnVlCitTcGFjZXNJbkNTdHlsZUNhc3RQYXJlbnRoZXNlczogZmFsc2UKK1NwYWNlc0luUGFyZW50aGVzZXM6IGZhbHNlCitTcGFjZXNJblNxdWFyZUJyYWNrZXRzOiBmYWxzZQorVGFiV2lkdGg6ICAgICAgICA0CitVc2VUYWI6ICAgICAgICAgIE5ldmVyCmRpZmYgLS1naXQgYS8uZ2l0aWdub3JlIGIvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGIxMjM1Ci0tLSAvZGV2L251bGwKKysrIGIvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDQ5IEBACisjIE1pc2MgY3JhcAorKn4KK29sZAorb2xkPworKi5wYworCisjIE9iamVjdCBmaWxlcworKi5vCisKKyMgTGlicmFyaWVzCisqLmxpYgorKi5hCisKKyMgU2hhcmVkIG9iamVjdHMgKGluYy4gV2luZG93cyBETExzKQorKi5kbGwKKyouc28KKyouc28uKgorKi5keWxpYgorCisjIEV4ZWN1dGFibGVzCisqLmV4ZQorKi5vdXQKKyouYXBwCisKKyMgc3J0cCB0aGluZ3MKK2J1aWxkCitEZWJ1ZworTWFrZWZpbGUKK1Jvb3QKK2F1dG9tNHRlLmNhY2hlCitjb25maWcubG9nCitjb25maWcuc3RhdHVzCitjcnlwdG8vaW5jbHVkZS9jb25maWcuaAorY3J5cHRvL3Rlc3QvYWVzX2NhbGMKK2NyeXB0by90ZXN0L2NpcGhlcl9kcml2ZXIKK2NyeXB0by90ZXN0L2RhdGF0eXBlc19kcml2ZXIKK2NyeXB0by90ZXN0L2VudgorY3J5cHRvL3Rlc3Qva2VybmVsX2RyaXZlcgorY3J5cHRvL3Rlc3Qvc2hhMV9kcml2ZXIKK2NyeXB0by90ZXN0L3N0YXRfZHJpdmVyCit0YWJsZXMvYWVzX3RhYmxlcwordGVzdC9kdGxzX3NydHBfZHJpdmVyCit0ZXN0L3JkYnhfZHJpdmVyCit0ZXN0L3JlcGxheV9kcml2ZXIKK3Rlc3Qvcm9jX2RyaXZlcgordGVzdC9ydHBfZGVjb2RlcgordGVzdC9ydHB3Cit0ZXN0L3NydHBfZHJpdmVyCit0ZXN0L3Rlc3Rfc3J0cApkaWZmIC0tZ2l0IGEvLnRyYXZpcy55bWwgYi8udHJhdmlzLnltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzM4MGYxCi0tLSAvZGV2L251bGwKKysrIGIvLnRyYXZpcy55bWwKQEAgLTAsMCArMSwyMTIgQEAKK2Rpc3Q6IHhlbmlhbAorc3VkbzogZmFsc2UKK2xhbmd1YWdlOiBjCisKK2VudjoKKyAgZ2xvYmFsOgorICAgIC0gc2VjdXJlOiAiUUQwOU11VXhmdFhSWHR6N1pyQjdTME5WLzNPOXlWaGp2SWxDU2JYTjhCODdyTlNEQzh3eE1UaEtNVDdpWmV3bnFHazUzbStVcDE5UGlNdzVFUmxIb3NlNXRtMmNtWTFGTy9sK2M5b0F5V1phQUwrNFhOWHJ5cTZ6STVGNUZYNUk2MU5iZnFWM3hjbmZMVEkyUUlKRjZXcURvak54aFBqVGJOelFHeElEdXF3PSIKKworbWF0cml4OgorICBpbmNsdWRlOgorCisgICAgIyBsaW51eCBidWlsZAorICAgIC0gb3M6IGxpbnV4CisgICAgICBlbnY6CisgICAgICAgIC0gVEVTVD0ibGludXggKGdjYyAvIHZhbGdyaW5kKSIKKyAgICAgIGFkZG9uczoKKyAgICAgICAgYXB0OgorICAgICAgICAgIHNvdXJjZXM6CisgICAgICAgICAgICAtIHVidW50dS10b29sY2hhaW4tci10ZXN0CisgICAgICAgICAgcGFja2FnZXM6CisgICAgICAgICAgICAtIGdjYy02CisgICAgICAgICAgICAtIHZhbGdyaW5kCisgICAgICBzY3JpcHQ6CisgICAgICAgIC0gQ0M9Z2NjLTYgRVhUUkFfQ0ZMQUdTPS1XZXJyb3IgLi9jb25maWd1cmUKKyAgICAgICAgLSBtYWtlCisgICAgICAgIC0gbWFrZSBydW50ZXN0CisgICAgICAgIC0gbWFrZSBydW50ZXN0LXZhbGdyaW5kCisgICAgICAgIC0gbWFrZSBkaXN0Y2xlYW4KKyAgICAgICAgLSBta2RpciBidWlsZCAmJiBjZCBidWlsZAorICAgICAgICAtIGNtYWtlIC4uCisgICAgICAgIC0gbWFrZQorICAgICAgICAtIG1ha2UgdGVzdAorCisgICAgIyBsaW51eCBidWlsZCB3aXRoIG9wZW5zc2wKKyAgICAtIG9zOiBsaW51eAorICAgICAgZW52OgorICAgICAgICAtIFRFU1Q9ImxpbnV4IG9wZW5zc2wgKGdjYyAvIHZhbGdyaW5kKSIKKyAgICAgIGFkZG9uczoKKyAgICAgICAgYXB0OgorICAgICAgICAgIHNvdXJjZXM6CisgICAgICAgICAgICAtIHVidW50dS10b29sY2hhaW4tci10ZXN0CisgICAgICAgICAgcGFja2FnZXM6CisgICAgICAgICAgICAtIGdjYy02CisgICAgICAgICAgICAtIHZhbGdyaW5kCisgICAgICBzY3JpcHQ6CisgICAgICAgIC0gQ0M9Z2NjLTYgRVhUUkFfQ0ZMQUdTPS1XZXJyb3IgLi9jb25maWd1cmUgLS1lbmFibGUtb3BlbnNzbAorICAgICAgICAtIG1ha2UKKyAgICAgICAgLSBtYWtlIHJ1bnRlc3QKKyAgICAgICAgLSBtYWtlIHJ1bnRlc3QtdmFsZ3JpbmQKKyAgICAgICAgLSBtYWtlIGRpc3RjbGVhbgorICAgICAgICAtIG1rZGlyIGJ1aWxkICYmIGNkIGJ1aWxkCisgICAgICAgIC0gY21ha2UgLURFTkFCTEVfT1BFTlNTTD1PTiAuLgorICAgICAgICAtIG1ha2UKKyAgICAgICAgLSBtYWtlIHRlc3QKKyAgICAgICAgLSBjZCAuLgorICAgICAgICAtIG1rZGlyIGJ1aWxkX3NoYXJlZCAmJiBjZCBidWlsZF9zaGFyZWQKKyAgICAgICAgLSBjbWFrZSAtREVOQUJMRV9PUEVOU1NMPU9OIC1EQlVJTERfU0hBUkVEX0xJQlM9T04gLi4KKyAgICAgICAgLSBtYWtlCisgICAgICAgIC0gbWFrZSB0ZXN0CisKKyAgICAjIGxpbnV4IGJ1aWxkIHdpdGggb3BlbnNzbCBhbmQgY2xhbmcKKyAgICAtIG9zOiBsaW51eAorICAgICAgZW52OgorICAgICAgICAtIFRFU1Q9ImxpbnV4IG9wZW5zc2wgKGNsYW5nKSIKKyAgICAgIGFkZG9uczoKKyAgICAgICAgYXB0OgorICAgICAgICAgIHBhY2thZ2VzOgorICAgICAgICAgICAgLSBjbGFuZworICAgICAgc2NyaXB0OgorICAgICAgICAtIENDPWNsYW5nIEVYVFJBX0NGTEFHUz0tV2Vycm9yIC4vY29uZmlndXJlIC0tZW5hYmxlLW9wZW5zc2wKKyAgICAgICAgLSBtYWtlCisgICAgICAgIC0gbWFrZSBydW50ZXN0CisKKyAgICAjIGxpbnV4IGJ1aWxkIHdpdGggbnNzCisgICAgLSBvczogbGludXgKKyAgICAgIGVudjoKKyAgICAgICAgLSBURVNUPSJsaW51eCBuc3MgKGdjYyAvIHZhbGdyaW5kKSIKKyAgICAgIGFkZG9uczoKKyAgICAgICAgYXB0OgorICAgICAgICAgIHNvdXJjZXM6CisgICAgICAgICAgICAtIHVidW50dS10b29sY2hhaW4tci10ZXN0CisgICAgICAgICAgcGFja2FnZXM6CisgICAgICAgICAgICAtIGdjYy02CisgICAgICAgICAgICAtIHZhbGdyaW5kCisgICAgICAgICAgICAtIGxpYm5zczMtZGV2CisgICAgICBzY3JpcHQ6CisgICAgICAgIC0gQ0M9Z2NjLTYgRVhUUkFfQ0ZMQUdTPS1XZXJyb3IgLi9jb25maWd1cmUgLS1lbmFibGUtbnNzCisgICAgICAgIC0gbWFrZQorICAgICAgICAtIG1ha2UgcnVudGVzdAorICAgICAgICAtIG1ha2UgcnVudGVzdC12YWxncmluZAorCisgICAgIyBkZWZhdWx0IG9zeCBidWlsZAorICAgIC0gb3M6IG9zeAorICAgICAgZW52OgorICAgICAgICAtIFRFU1Q9Im9zeCIKKyAgICAgIHNjcmlwdDoKKyAgICAgICAgLSBFWFRSQV9DRkxBR1M9LVdlcnJvciAuL2NvbmZpZ3VyZQorICAgICAgICAtIG1ha2UKKyAgICAgICAgLSBtYWtlIHJ1bnRlc3QKKyAgICAgICAgLSBtYWtlIGRpc3RjbGVhbgorICAgICAgICAtIG1rZGlyIGJ1aWxkICYmIGNkIGJ1aWxkCisgICAgICAgIC0gY21ha2UgLi4KKyAgICAgICAgLSBtYWtlCisgICAgICAgIC0gbWFrZSB0ZXN0CisKKyAgICAjIG9zeCBidWlsZCB3aXRoIG9wZW5zc2wKKyAgICAtIG9zOiBvc3gKKyAgICAgIGVudjoKKyAgICAgICAgLSBURVNUPSJvc3ggb3BlbnNzbCIKKyAgICAgIGJlZm9yZV9pbnN0YWxsOgorICAgICAgICAgICAgLSBicmV3IGluc3RhbGwgb3BlbnNzbAorICAgICAgc2NyaXB0OgorICAgICAgICAtIFBLR19DT05GSUdfUEFUSD0vdXNyL2xvY2FsL29wdC9vcGVuc3NsL2xpYi9wa2djb25maWcgRVhUUkFfQ0ZMQUdTPS1XZXJyb3IgLi9jb25maWd1cmUgLS1lbmFibGUtb3BlbnNzbAorICAgICAgICAtIG1ha2UKKyAgICAgICAgLSBtYWtlIHJ1bnRlc3QKKyAgICAgICAgLSBtYWtlIGRpc3RjbGVhbgorICAgICAgICAtIG1rZGlyIGJ1aWxkICYmIGNkIGJ1aWxkCisgICAgICAgIC0gY21ha2UgLURPUEVOU1NMX1JPT1RfRElSPS91c3IvbG9jYWwvb3B0L29wZW5zc2wgLURFTkFCTEVfT1BFTlNTTD1PTiAuLgorICAgICAgICAtIG1ha2UKKyAgICAgICAgLSBtYWtlIHRlc3QKKworICAgICMgb3N4IGJ1aWxkIHdpdGggbnNzCisgICAgLSBvczogb3N4CisgICAgICBlbnY6CisgICAgICAgIC0gVEVTVD0ib3N4IG5zcyIKKyAgICAgIGJlZm9yZV9pbnN0YWxsOgorICAgICAgICAgICAgLSBicmV3IGluc3RhbGwgbnNzCisgICAgICBzY3JpcHQ6CisgICAgICAgIC0gUEtHX0NPTkZJR19QQVRIPS91c3IvbG9jYWwvb3B0L25zcy9saWIvcGtnY29uZmlnIEVYVFJBX0NGTEFHUz0tV2Vycm9yIC4vY29uZmlndXJlIC0tZW5hYmxlLW5zcworICAgICAgICAtIG1ha2UKKyAgICAgICAgLSBtYWtlIHJ1bnRlc3QKKworICAgICMgY29kZSBmb3JtYXQgY2hlY2sKKyAgICAtIG9zOiBsaW51eAorICAgICAgZW52OgorICAgICAgICAtIFRFU1Q9ImNsYW5nLWZvcm1hdCIKKyAgICAgIGFkZG9uczoKKyAgICAgICAgYXB0OgorICAgICAgICAgIHBhY2thZ2VzOgorICAgICAgICAgICAgLSBjbGFuZy1mb3JtYXQtMy45CisgICAgICBzY3JpcHQ6CisgICAgICAgIC0gQ0xBTkdfRk9STUFUPWNsYW5nLWZvcm1hdC0zLjkgLi9mb3JtYXQuc2ggLWQKKworICAgICMgYmlnLWVuZGlhbgorICAgIC0gb3M6IGxpbnV4CisgICAgICBzdWRvOiB0cnVlCisgICAgICBlbnY6CisgICAgICAgIC0gVEVTVD0iYmlnLWVuZGlhbiIKKyAgICAgIHNlcnZpY2VzOgorICAgICAgICAtIGRvY2tlcgorICAgICAgYWRkb25zOgorICAgICAgICBhcHQ6CisgICAgICAgICAgcGFja2FnZXM6CisgICAgICAgICAgICAtIHFlbXUtdXNlci1zdGF0aWMKKyAgICAgICAgICAgIC0gcWVtdS1zeXN0ZW0tbWlwcworICAgICAgYmVmb3JlX2luc3RhbGw6CisgICAgICAgIC0gc3VkbyBkb2NrZXIgcnVuIC0tdm9sdW1lICQocHdkKTovc3JjIC0td29ya2RpciAvc3JjIC0tbmFtZSBtaXBzWCAtLXR0eSAtLWRldGFjaCB1YnVudHU6MTYuMDQgdGFpbAorICAgICAgICAtIHN1ZG8gZG9ja2VyIGV4ZWMgLS10dHkgbWlwc1ggYXB0LWdldCB1cGRhdGUKKyAgICAgICAgLSBzdWRvIGRvY2tlciBleGVjIC0tdHR5IG1pcHNYIGFwdC1nZXQgaW5zdGFsbCBidWlsZC1lc3NlbnRpYWwgLXkKKyAgICAgICAgLSBzdWRvIGRvY2tlciBleGVjIC0tdHR5IG1pcHNYIGFwdC1nZXQgaW5zdGFsbCBnY2MtbWlwcy1saW51eC1nbnUgLXkKKyAgICAgIHNjcmlwdDoKKyAgICAgICAgLSBzdWRvIGRvY2tlciBleGVjIC0tdHR5IG1pcHNYIGJhc2ggLWMgJ0VYVFJBX0NGTEFHUz0tc3RhdGljIENDPW1pcHMtbGludXgtZ251LWdjYyAuL2NvbmZpZ3VyZSAtLWhvc3Q9bWlwcy1saW51eC1nbnUnCisgICAgICAgIC0gc3VkbyBkb2NrZXIgZXhlYyAtLXR0eSBtaXBzWCBtYWtlCisgICAgICAgIC0gc3VkbyBkb2NrZXIga2lsbCBtaXBzWAorICAgICAgICAtIGZpbGUgdGVzdC9zcnRwX2RyaXZlcgorICAgICAgICAtIG1ha2UgcnVudGVzdAorCisgICAgIyBsaW51eCBidWlsZCBvZiBmdXp6ZXIKKyAgICAtIG9zOiBsaW51eAorICAgICAgZW52OgorICAgICAgICAtIFRFU1Q9ImZ1enplciAoYnVpbGQgb25seSkiCisgICAgICBhZGRvbnM6CisgICAgICAgIGFwdDoKKyAgICAgICAgICBwYWNrYWdlczoKKyAgICAgICAgICAgIC0gY2xhbmcKKyAgICAgIHNjcmlwdDoKKyAgICAgICAgLSBDQz1jbGFuZyBDWFg9Y2xhbmcrKyBDWFhGTEFHUz0iLWZzYW5pdGl6ZT1mdXp6ZXItbm8tbGluayxhZGRyZXNzLHVuZGVmaW5lZCAtZyAtTzMiIENGTEFHUz0iLWZzYW5pdGl6ZT1mdXp6ZXItbm8tbGluayxhZGRyZXNzLHVuZGVmaW5lZCAtZyAtTzMiIExERkxBR1M9Ii1mc2FuaXRpemU9ZnV6emVyLW5vLWxpbmssYWRkcmVzcyx1bmRlZmluZWQiIC4vY29uZmlndXJlCisgICAgICAgIC0gTElCRlVaWkVSPSItZnNhbml0aXplPWZ1enplciIgbWFrZSBzcnRwLWZ1enplcgorCisgICAgIyBjb3Zlcml0eSBzY2FuCisgICAgLSBvczogbGludXgKKyAgICAgIGVudjoKKyAgICAgICAgLSBURVNUPSJDb3Zlcml0eSBTY2FuIgorICAgICAgYWRkb25zOgorICAgICAgICBjb3Zlcml0eV9zY2FuOgorICAgICAgICAgIHByb2plY3Q6CisgICAgICAgICAgICBuYW1lOiAiY2lzY28tbGliU1JUUCIKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAiQnVpbGQgc3VibWl0dGVkIHZpYSBUcmF2aXMgQ0kiCisgICAgICAgICAgICB2ZXJzaW9uOiAyCisgICAgICAgICAgbm90aWZpY2F0aW9uX2VtYWlsOiBwYWJ1aGxlckBjaXNjby5jb20KKyAgICAgICAgICBidWlsZF9jb21tYW5kX3ByZXBlbmQ6ICIuL2NvbmZpZ3VyZSIKKyAgICAgICAgICBidWlsZF9jb21tYW5kOiAibWFrZSIKKyAgICAgICAgICBicmFuY2hfcGF0dGVybjogbWFzdGVyCisgICAgICBzY3JpcHQ6CisgICAgICAgIC0gZWNobyAtbiB8IG9wZW5zc2wgc19jbGllbnQgLWNvbm5lY3Qgc2Nhbi5jb3Zlcml0eS5jb206NDQzIHwgc2VkIC1uZSAnLy1CRUdJTiBDRVJUSUZJQ0FURS0vLC8tRU5EIENFUlRJRklDQVRFLS9wJyB8IHN1ZG8gdGVlIC1hIC9ldGMvc3NsL2NlcnRzL2NhLQorCisgICAgIyB3aW5kb3dzIGJ1aWxkCisgICAgLSBvczogd2luZG93cworICAgICAgZW52OgorICAgICAgICAtIFRFU1Q9IndpbmRvd3MiCisKKyAgICAgIHNjcmlwdDoKKyAgICAgICAgLSBleHBvcnQgUEFUSD0iYzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxNaWNyb3NvZnQgVmlzdWFsIFN0dWRpb1wyMDE3XEJ1aWxkVG9vbHNcTVNCdWlsZFwxNS4wXEJpbiI6JFBBVEgKKyAgICAgICAgLSBta2RpciBidWlsZCAmJiBjZCBidWlsZAorICAgICAgICAtIGNtYWtlIC1HICJWaXN1YWwgU3R1ZGlvIDE1IDIwMTciIC4uCisgICAgICAgIC0gbXNidWlsZC5leGUgbGlic3J0cDIuc2xuIC1wOkNvbmZpZ3VyYXRpb249UmVsZWFzZQorICAgICAgICAtIG1zYnVpbGQuZXhlIFJVTl9URVNUUy52Y3hwcm9qIC1wOkNvbmZpZ3VyYXRpb249UmVsZWFzZQorICAgICAgICAtIGNkIC4uCisgICAgICAgIC0gbWtkaXIgYnVpbGRfc2hhcmVkICYmIGNkIGJ1aWxkX3NoYXJlZAorICAgICAgICAtIGNtYWtlIC1HICJWaXN1YWwgU3R1ZGlvIDE1IDIwMTciIC1EQlVJTERfU0hBUkVEX0xJQlM9T04gLi4KKyAgICAgICAgLSBtc2J1aWxkLmV4ZSBsaWJzcnRwMi5zbG4gLXA6Q29uZmlndXJhdGlvbj1SZWxlYXNlCisgICAgICAgIC0gbXNidWlsZC5leGUgUlVOX1RFU1RTLnZjeHByb2ogLXA6Q29uZmlndXJhdGlvbj1SZWxlYXNlCmRpZmYgLS1naXQgYS9BbmRyb2lkLmJwIGIvQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTRjZTEwCi0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC5icApAQCAtMCwwICsxLDM3IEBACitjY19saWJyYXJ5X3N0YXRpYyB7CisgICAgaG9zdF9zdXBwb3J0ZWQ6IHRydWUsCisgICAgbmFtZTogImxpYnNydHAyIiwKKyAgICBzcmNzOiBbCisgICAgICAgICJjcnlwdG8vY2lwaGVyL2Flcy5jIiwKKyAgICAgICAgImNyeXB0by9jaXBoZXIvYWVzX2ljbS5jIiwKKyAgICAgICAgImNyeXB0by9jaXBoZXIvY2lwaGVyLmMiLAorICAgICAgICAiY3J5cHRvL2NpcGhlci9udWxsX2NpcGhlci5jIiwKKyAgICAgICAgImNyeXB0by9oYXNoL2F1dGguYyIsCisgICAgICAgICJjcnlwdG8vaGFzaC9obWFjLmMiLAorICAgICAgICAiY3J5cHRvL2hhc2gvbnVsbF9hdXRoLmMiLAorICAgICAgICAiY3J5cHRvL2hhc2gvc2hhMS5jIiwKKyAgICAgICAgImNyeXB0by9rZXJuZWwvYWxsb2MuYyIsCisgICAgICAgICJjcnlwdG8va2VybmVsL2NyeXB0b19rZXJuZWwuYyIsCisgICAgICAgICJjcnlwdG8va2VybmVsL2Vyci5jIiwKKyAgICAgICAgImNyeXB0by9rZXJuZWwva2V5LmMiLAorICAgICAgICAiY3J5cHRvL21hdGgvZGF0YXR5cGVzLmMiLAorICAgICAgICAiY3J5cHRvL21hdGgvc3RhdC5jIiwKKyAgICAgICAgImNyeXB0by9yZXBsYXkvcmRiLmMiLAorICAgICAgICAiY3J5cHRvL3JlcGxheS9yZGJ4LmMiLAorICAgICAgICAiY3J5cHRvL3JlcGxheS91dF9zaW0uYyIsCisgICAgICAgICJzcnRwL2VrdC5jIiwKKyAgICAgICAgInNydHAvc3J0cC5jIiwKKyAgICBdLAorICAgIGxvY2FsX2luY2x1ZGVfZGlyczogWworICAgICAgICAiY3J5cHRvL2luY2x1ZGUiLAorICAgICAgICAiaW5jbHVkZSIsCisgICAgXSwKKyAgICBjZmxhZ3M6IFsKKyAgICAgICAgIi1Xbm8tdW51c2VkLXBhcmFtZXRlciIsCisgICAgICAgICItV25vLWltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uIiwKKyAgICAgICAgIi1ESEFWRV9DT05GSUdfSCIsCisgICAgXSwKKyAgICBleHBvcnRfaW5jbHVkZV9kaXJzOiBbCisgICAgICAgICJleHBvcnRlZF9pbmNsdWRlIiwKKyAgICBdLAorfQpkaWZmIC0tZ2l0IGEvQ0hBTkdFUyBiL0NIQU5HRVMKaW5kZXggOTQ5YzM4OS4uY2FhMmI2MSAxMDA2NDQKLS0tIGEvQ0hBTkdFUworKysgYi9DSEFOR0VTCkBAIC0xLDIyMyArMSwyMjcgQEAKIENoYW5nZWxvZwogCi0xLjMuMjAKKzIuMi4wLXByZSAoVGhpcyB2ZXJzaW9uKQogCi0gIExvdHMgb2YgY2hhbmdlcy4gIFRoYW5rcyB0byBKZWZmIENoYW4gZm9yIGNhdGNoaW5nIGEgbWVtb3J5IGxlYWsgYW5kCi0gIGhlbHBpbmcgdHJhY2sgZG93biB0aGUgZW5kaWFuIGlzc3VlcyB3aXRoIHRoZSBTU1JDcy4KK01ham9yIGNoYW5nZXMKIAotMS4zLjgKK0FsbCBjb2RlIGhhcyBiZWVuIHJlZm9ybWF0dGVkIHRvIGJlIGNvbnNpc3RlbnQuIEEgLmNsYW5nLWZvcm1hdCBmaWxlIGFuZCBmb3JtYXQuc2ggc2NyaXB0IGhhcyBiZWVuIGFkZGVkIHRoYXQgY2FuIGJlIHVzZSB0byB2ZXJpZnkgYW5kIGVuZm9yY2UgY29uc2lzdGVudCBmb3JtYXR0aW5nLiBBbiBhdXRvbWF0ZWQgY2hlY2sgb24gY29kZSBmb3JtYXR0aW5nIGlzIG5vdyBwYXJ0IG9mIHRyYXZpcyBidWlsZC4KIAotICBUaGlzIGlzIGFuIGludGVyaW0gcmVsZWFzZS4gIFNldmVyYWwgbGl0dGxlLWVuZGlhbiBidWdzIHdlcmUgaWRlbnRpZmllZAotICBhbmQgZml4ZWQ7IHRoaXMgbWVhbnMgdGhhdCB3ZSBjYW4gdXNlIGludGVsL2xpbnV4IGZvciBkZXZlbG9wbWVudCBhZ2Fpbi4KK090aGVyIGNoYW5nZXMKIAotICBDbGVhbmVkIHVwIHNoYTEgYW5kIGhtYWMgY29kZSBzaWduaWZpY2FudGx5LCBnb3QgcmlkIG9mIHNvbWUgZXhjZXNzCi0gIGZ1bmN0aW9ucyBhbmQgcHJvcGVybHkgZG9jdW1lbnRlZCB0aGUgZnVjdGlvbnMgaW4gdGhlIC5oIGZpbGVzLgorUFIgIzQwOSAtIENvbXBhdGliaWx0eSB3aXRoIExpYnJlU1NMCiAKLSAgRWxpbWluYXRlZCBzb21lIHZlc3RpZ2lhbCBmaWxlcy4KK1BSICM0MDYgLSBGaXggdW5wcm90ZWN0IHdoZW4gcGt0bGVuIDwgKDIqbWtpX3NpemUgKyB0YWdfbGVuKQogCi0gIFRoZXJlIGlzIGEgU0lHQlVTIGVycm9yIGluIHRoZSBBRVMgZW5jcnlwdCBmdW5jdGlvbiBvbiBzcGFyYwotICAob2JzZXJ2ZWQgb24gYm90aCBzb2xhcmlzIGFuZCBvcGVuYnNkKSB3aXRoIGdjYyAyLjk1LiAgV2FzIHVuYWJsZSB0bwotICBmaW5kIGJhZCBwb2ludGVyIGFueXdoZXJlLCBzbyBJJ20gd29uZGVyaW5nIGlmIGl0IGlzbid0IGEgY29tcGlsZXIKLSAgcHJvYmxlbSAodGhlcmUncyBhIGtub3duIHByb2JsZW0gd2hvc2UgcHJvZmlsZSBpdCBmaXRzKS4gIEl0IGRvZXNuJ3QKLSAgYXBwZWFyIG9uIGFueSBvdGhlciBwbGF0Zm9ybSwgZXZlbiBpbiB0aGUgY2lwaGVyX2RyaXZlciBzdHJlc3MKLSAgdGVzdHMuCitQUiAjNDA1IC0gUHJldmVudCBwb3RlbnRpYWwgZG91YmxlIGZyZWUKIAotICBQbGFubmVkIGNoYW5nZXMKK1BSICM0MDQgLSBBZGQgYmFjayBleHRlcm4gdG8gZ2xvYmFsIHZhcmlhYmxlcwogCi0gIENoYW5nZSBpbnRlcmZhY2UgdG8gbm9uY2VzICh4dGRfc2VxX251bV90KSBzbyB0aGF0IGl0IHVzZXMKLSAgbmV0d29yayBieXRlIG9yZGVyaW5nLCBhbmQgaXMgY29uc2lzdGVudCB3aXRoIG90aGVyIGFyZ3VtZW50cy4KK1BSICM0MDMgLSBTZXQgZ2NtIElWIGRpcmVjdGx5IHdpdGggRVZQX0NpcGhlckluaXRfZXgKIAorUFIgIzQwMSAtIEZpeCBtZW1vcnkgYWNjZXNzIGlzc3VlIGluIHNydHBfZ2V0X3Nlc3Npb25fa2V5cygpCiAKLTEuMy42IAorUFIgIzM5OCAtIEZpeCBtZW1vcnkgYWNjZXNzIGZpeGVzIHdoZW4gaW52YWxpZCBwcm9maWxlcyB3aGVyZSB1c2VkCiAKLSAgQ2hhbmdlZCAvZGV2L3JhbmRvbSAoaW4gY29uZmlndXJlLmluIGFuZCBjcnlwdG8vcm5nL3JhbmRfc291cmNlLmMpIHRvCi0gIC9kZXYvdXJhbmRvbTsgdGhlIGxhdHRlciBpcyBub24tYmxvY2tpbmcgb24gYWxsIGtub3duIHBsYXRmb3JtcyAod2hpY2ggCi0gIGNvcnJlY3RzIHNvbWUgcHJvZ3JhbXMgdGhhdCBzZWVtIHRvIGhhbmcpIGFuZCBpcyBhY3R1YWxseSBwcmVzZW50IG9uIAotICBPcGVuIEJTRCAodW5saWtlIC9kZXYvcmFuZG9tLCB3aGljaCBvbmx5IHdvcmtzIGluIHRoZSBwcmVzZW5jZSBvZiAKLSAgaGFyZHdhcmUgc3VwcG9ydGVkIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbikuCitQUiAjMzkxIC0gUmV0dXJuIE5VTEwgd2hlbiBhbGxvY2F0aW5nIG1lbW9yeSBvZiBzaXplIHplcm8KIAotICBBZGRlZCBtYWNoaW5lL3R5cGVzLmggY2FzZSBpbiBpbmNsdWRlL2ludGVnZXJzLmguCitQUiAjMzkwIC0gQml0dmVjdG9yIG9mIGxlbmd0aCB6ZXJvIGlzIG5vdCB2YWxpZAogCi0xLjMuNQorUFIgIzM4NSAtIFRyZWF0IHdhcm5pbmdzIGFzIGVycm9ycyBvbiB0cmF2aXMgYnVpbGRzCiAKLSAgUmVtb3Zpbmcgc3J0cF90Ojp0ZW1wbGF0ZSBhbmQgc3RyZWFtX2Nsb25lKCkuCitQUiAjMzg4IC0gTW92ZWQgZXh0ZXJucyBmcm9tIGNyeXB0b19rZXJuZWwgaW50byBpdHMgb3duIGhlYWRlcgogCi0gIEFkZGluZyBhIG5ldyBwb2xpY3kgc3RydWN0dXJlLCB3aGljaCB3aWxsIHJlZmxlY3QgYSBjb21wbGV0ZSBTUlRQCi0gIHBvbGljeSAoaW5jbHVkaW5nIFNSVENQKS4KK1BSICMzNzkgLSBGaXhlZCBzZXZlcmFsIGNvbXBpbGVyIHdhcm5pbmdzIGZyb20gRmlyZWZveCBidWlsZHMKIAotICBUaGlzIHZlcnNpb24gaXMgKmluY29tcGxldGUqIGFuZCB3aWxsIHVuZGVyZ28gbW9yZSBjaGFuZ2VzLiAgSXQgaXMKLSAgcHJvdmlkZWQgb25seSBhcyBhIGJhc2lzIGZvciBkaXNjdXNzaW9uLgorUFIgIzM3NyAtIFJlbW92ZWQgdmFyaWFibGUgaW5pdCBjb2RlIGluIHJkYnggd2hpY2ggbmV2ZXIgZ2V0cyB1c2VkCiAKLTEuMy40CitQUiAjMzgxIC0gQWRkZWQgZXJyb3IgaW4gY2FzZSB0aGUgcGxhdGZvcm0gaXMgbm90IGRldGVjdGVkCiAKLSAgIFJlbW92ZWQgdG1taC5jIGFuZCB0bW1oLmgsIHdoaWNoIGltcGxlbWVudGVkIHZlcnNpb24gb25lIG9mIFRNTUguCitQUiAjMzc2IC0gQWRkIGNvdmVyaXR5IHNjYW4gdG8gdHJhdmlzIGJ1aWxkcwogCi0gICBDaGFuZ2VkIHNydHBfZ2V0X3RyYWlsZXJfbGVuZ3RoKCkgdG8gYWN0IG9uIHN0cmVhbXMgcmF0aGVyIHRoYW4KLSAgIHNlc3Npb25zLCBhbmQgZG9jdW1lbnRlZCB0aGUgbWFjcm8gU1JUUF9NQVhfVFJBSUxFUl9MRU4sIHdoaWNoIHNob3VsZAotICAgdXN1YWxseSBiZSB1c2VkIHJhdGhlciB0aGFuIHRoYXQgZnVuY3Rpb24uCitQUiAjMzc0IC0gQWRkIGEgYmlnIGVuZGlhbiBidWlsZCBvbiB0cmF2aXMKIAotICAgUmVtb3ZlZCAnc2FsdCcgZnJvbSBjaXBoZXIgaW5wdXQuIAorUFIgIzM3MyAtIEZpeGVkIGJ1ZmZlciBzaXplIGlzc3VlIGluIHRlc3Qvc3J0cF9kcml2ZXIuYwogCi0gICBDaGFuZ2VkIHJkYnggdG8gdXNlIGVyci5oIGVycm9yIGNvZGVzLgorUFIgIzM3MiAtIE1ha2UgcnRwX2RlY29kZXIgY29tcGlsZSBvbiBNaW5HVwogCi0gICBDaGFuZ2VkIG1hbGxvYygpIGFuZCBmcmVlKCkgdG8geGFsbG9jKCkgYW5kIHhmcmVlOyB0aGVzZSBmdW5jdGlvbnMKLSAgIGFyZSBkZWZpbmVkIGluIGNyeXB0by9rZXJuZWwvYWxsb2MuYyBhbmQgZGVjbGFyZWQgaW4gCi0gICBpbmNsdWRlL2FsbG9jLmguCitQUiAjMzY3IC0gUmVuYW1lIGNvbmZpZ3VyZS5pbiB0byBjb25maWd1cmUuYWMKIAotICAgQWRkZWQgJ291dHB1dCcgZnVuY3Rpb25zIHRvIGNpcGhlciwgaW4gYWRkaXRpb24gdG8gJ2VuY3J5cHQnCi0gICBmdW5jdGlvbnMuICBJdCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvIHplcm9pemUgYSBidWZmZXIgYmVmb3JlCi0gICBlbmNyeXB0aW5nIGluIG9yZGVyIHRvIGdldCBrZXlzdHJlYW0uCitQUiAjMzY1IC0gUmVwbGFjZSBjYWxscyB0byBmcmVlKCkgd2l0aCBzcnRwX2NyeXB0b19mcmVlKCkKIAotICAgQ2hhbmdlZCBvY3RldF9zdHJpbmdfaGV4X3N0cmluZygpIHNvIHRoYXQgInRpbWVzIHR3byIgaXNuJ3QgbmVlZGVkCi0gICBpbiBpdHMgaW5wdXQuCitQUiAjMzY0IC0gQWRkIHZhbGdyaW5kIHRvIHRyYXZpcyBhbmQgZml4IGxlYWtzIGluIHRlc3RzCiAKLSAgIEFkZGVkIGNyeXB0b19rZXJuZWxfaW5pdCgpIHByaW9yIHRvIGNvbW1hbmQtbGluZSBwYXJzaW5nLCBzbyB0aGF0Ci0gICBrZXJuZWwgY2FuIGJlIHBhc3NlZCBjb21tYW5kLWxpbmUgYXJndW1lbnRzLCBzdWNoIGFzICItZAotICAgZGVidWdfbW9kdWxlIi4gIFRoaXMgd2FzIGRvbmUgdG8gZm9yIHRoZSBhcHBsaWNhdGlvbnMKLSAgIHRlc3Qvc3J0cC1kcml2ZXIsIHRlc3Qva2VybmVsLWRyaXZlciwgYW5kIHRlc3QvdXN0LWRyaXZlci4KK1BSICMzNjMgLSBDaGFuZ2Ugc210cF9jcnlwdG9fYWxsb2MgdG8gaW5pdGlhbGl6ZSBtZW1vcnkgdG8gemVybworCitQUiAjMzU0IC0gRml4IHBvdGVudGlhbCBsZWFrIGlmIGNsb25pbmcgb2Ygc3RyZWFtIGZhaWxzCisKK1BSICMzNDAgLSBGaXggcG90ZW50aWFsIGxlYWsgaW4gc3J0cF9hZGRfc3RyZWFtKCkKKworUFIgIzMyMyAtIEZpeCBydW5uaW5nIHRlc3QgaW4gb3V0IG9mIHNvdXJjZSBidWlsZHMKKworSXNzdWUgIzMxNiAgLSBSZW1vdmUgVkVSU0lPTiBmaWxlCisKKzIuMS4wCisKK0NvbXBhdGliaWxpdHkgY2hhbmdlcworCisgIFBSICMyNTMgLSBDaXBoZXIgdHlwZSBjbGVhbnVwIGZvciBBRVMKKyAgICBXaGVuIGxpYlNSVFAgaXMgY29tcGlsZWQgd2l0aCBPcGVuU1NMIGFuZCB0aGUgQUVTIDI1NiBJQ00gY2lwaGVyIGlzIHVzZWQKKyAgICB3aXRoIFJUQ1AgYW4gaW5jb3JyZWN0IGluaXRpYWxpemF0aW9uIHZlY3RvciBpcyBmb3JtZWQuCisgICAgVGhpcyBjaGFuZ2Ugd2lsbCBicmVhayBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zICgxLjUsCisgICAgMi4wKSBvZiBsaWJTUlRQIHdoZW4gdXNpbmcgdGhlIEFFUyAyNTYgSUNNIGNpcGhlciB3aXRoIE9wZW5TU0wgZm9yIFJUQ1AuCisKKyAgUFIgIzI1OSAtIFNlcXVlbmNlIG51bWJlciBpbmNvcnJlY3RseSBtYXNrZWQgZm9yIEFFUyBHQ00gSVYKKyAgICBUaGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yIGZvciBBRVMgR0NNIGVuY3J5cHRpb24gd2FzIGluY29ycmVjdGx5IGZvcm1lZCBvbgorICAgIGxpdHRsZSBlbmRpYW4gbWFjaGluZXMuCisgICAgVGhpcyBjaGFuZ2Ugd2lsbCBicmVhayBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zICgxLjUsCisgICAgMi4wKSBvZiBsaWJTUlRQIHdoZW4gdXNpbmcgdGhlIEFFUyBHQ00gY2lwaGVyIGZvciBSVENQLgorCisgIFBSICMyODcgLSBGaXggT09CIHJlYWQgaW4ga2V5IGdlbmVyYXRpb24gZm9yIGVuY3J5cHRlZCBoZWFkZXJzIHdpdGggR0NNIGNpcGhlcnMKKyAgICBBZGRzIHBhZGRpbmcgb2YgR0NNIHNhbHQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgSUNNIGxlbmd0aCB1c2VkIGZvciBoZWFkZXIKKyAgICBlbmNyeXB0aW9uLgorICAgIFRoaXMgY2hhbmdlIHdpbGwgYnJlYWsgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCB2ZXJzaW9uIDIuMCBvZiBsaWJTUlRQCisgICAgd2hlbiB1c2luZyB0aGUgaGVhZGVyIGVuY3J5cHRpb24gZXh0ZW5zaW9uIHdpdGggdGhlIEFFUyBHQ00gY2lwaGVyLgorCitNYWpvciBjaGFuZ2VzCisKKyAgUFIgIzIwNCAtIE9wZW5TU0wgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzCisgICAgQ2hhbmdlZCBrZXkgZXhwYW5zaW9uIHRvIG9jY3VyIG9uY2UgcGVyIGtleSBpbnN0ZWFkIG9mIG9uY2UgcGVyIHBhY2tldC4KKworICBQUiAjMjA5IC0gUmVzdG9yZSBBRVMtMTkyIHVuZGVyIEJvcmluZ1NTTAorICAgIEJvcmluZ1NTTCBzdXBwb3J0cyBBRVMtMTkyIGFuZCBpcyBub3cgZW5hYmxlZCBpbiBsaWJTUlRQLgorCisgIFBSICMyMjQgLSBNYXN0ZXIgS2V5IElkZW50aWZpZXJzIChNS0kpIFN1cHBvcnQgcGF0Y2gKKyAgICBBZGRzIE1LSSBzdXBwb3J0IHdpdGggdXAgdG8gNCBrZXlzLgorCisgIFBSICMyMzQgLSBSZXBvcnQgU1NSQyBpbnN0ZWFkIG9mIHNydHBfc3RyZWFtX3QgaW4gc3J0cF9ldmVudF9kYXRhX3QKKyAgICBzcnRwX3N0cmVhbV90IGlzIGFuIG9wYXF1ZSB0eXBlIG1ha2luZyB0aGUgZXZlbnQgZnJhbWV3b3JrIGFsbW9zdCB1c2VsZXNzLgorICAgIE5vdyB0aGUgU1NSQyBpcyByZXR1cm5lZCBpbnN0ZWFkIGZvciB1c2UgYXMgYSBrZXkgaW4gdGhlIHB1YmxpYyBBUEkuCisKKyAgUFIgIzIzOCAtIENvbmZpZ3VyZSBjaGFuZ2VzIGFuZCBpbXByb3ZlbWVudHMKKyAgICBDRkxBR1MgY2hlY2sgbW9yZSBzaGVsbCBuZXV0cmFsLCBxdW90YXRpb24gZml4ZXMsIGFsd2F5cyBnZW5lcmF0ZSBhbmQKKyAgICBpbnN0YWxsIHBrZy1jb25maWcgZmlsZSwgaW1wcm92ZWQgT3BlblNTTCBkaXNjb3ZlcnkgYW5kIGxpbmtpbmcsIHJlbW92ZQorICAgIC1mUElDIGZsYWcgb24gV2luZG93cywgZml4IHNoYXJlZCBsaWJyYXJ5IGdlbmVyYXRpb24gdW5kZXIgQ3lnd2luLCByZXBsYWNlCisgICAgaGFyZGNvZGVkIENGTEFHUyB3aXRoIGNvbXBpbGVyIGNoZWNrcywgYW5kIHJlZ2VuZXJhdGUgY29uZmlndXJlIGFmdGVyCisgICAgY29uZmlndXJlLmluIGNoYW5nZXMuCisKKyAgUFIgIzI0MSAmIFBSICMyNjEgLSBJbXByb3ZlZCBsb2dnaW5nIEFQSSB0byByZWNlaXZlIGxvZyBtZXNzYWdlcyBmcm9tIGxpYlNSVFAKKyAgICBQcm92aWRlcyBhIGxvZ2dpbmcgQVBJIGFuZCB0aGUgYWJpbGl0eSB0byBlbmFibGUgbG9nZ2luZyB0byBzdGRvdXQgYW5kIGEKKyAgICBmaWxlLCBhcyB3ZWxsIGFzIGEgc3dpdGNoIHRvIGVuYWJsZSBhbGwgaW50ZXJuYWwgZGVidWcgbW9kdWxlcy4KKworICBQUiAjMjg5IC0gQWRkZWQgc3VwcG9ydCBmb3Igc2V0IGFuZCBnZXQgdGhlIHJvbGwtb3Zlci1jb3VudGVyCisgICAgQWRkcyBhbiBBUEkgdG8gc2V0IGFuZCBnZXQgdGhlIFJPQyBpbiBhbiAoUylSVFAgc2Vzc2lvbi4KKworICBQUiAjMzA0IC0gRml4IChTKVJUUCBhbmQgKFMpUlRDUCBmb3IgYmlnIGVuZGlhbiBtYWNoaW5lcworICAgIFRoZSBzdHJ1Y3R1cmVzIHNydHBfaGRyX3QsIHNydGNwX2hkcl90IGFuZCBzcnRjcF90cmFpbGVyX3Qgd2VyZSBkZWZpbmVkCisgICAgaW5jb3JyZWN0bHkgb24gYmlnIGVuZGlhbiBzeXN0ZW1zLgorCitPdGhlciBjaGFuZ2VzCisKKyAgUFIgIzE0OSAtIERvbid0IGNyZWF0ZSBhIHN5bWxpbmsgaWYgdGhlcmUgaXMgbm8gJChTSEFSRURMSUJWRVJTSU9OKQorCisgIFBSICMxNTEgLSBNYWtlIHNydHBfZHJpdmVyIGNvbXBpbGUgZm9yIE1JUFMKKworICBQUiAjMTYwIC0gVXNlIFBLR19QUk9HX1BLR19DT05GSUcgdG8gZmluZCBjb3JyZWN0IHBrZy1jb25maWcKKworICBQUiAjMTY3IC0gQWRkaXRpb25hbCBSVENQIGFuZCBTUlRDUCB0ZXN0cworCisgIFBSICMxNjkgLSBJZGVudGlmaWVkIG1lcmdlIGNvbmZsaWN0IGNyZWF0ZWQgYnkgY29tbWl0IDZiNzFmYjkKKworICBQUiAjMTczIC0gQXZvaWQgZXJyb3IgJ3Bvc3NpYmx5IHVuZGVmaW5lZCBtYWNybzogQU1fUFJPR19BUicKIAotICAgSW1wcm92ZWQgc3J0cF9pbml0X2Flc18xMjhfcHJmIC0gd3JvdGUga2V5IGRlcml2YXRpb24gZnVuY3Rpb24KLSAgIChzcnRwX2tkZl90KS4KKyAgUFIgIzE3NCAtIEF2b2lkIHdhcm5pbmcgJ1RoZSBtYWNybyBBQ19UUllfTElOSyBpcyBvYnNvbGV0ZS4nCiAKLSAgIEFkZCB0aGUgdGFnX2xlbiBhcyBhbiBhcmd1bWVudCB0byB0aGUgYXV0aF9jb21wdXRlKCkgZnVuY3Rpb24sIGJ1dAotICAgbm90IHRoZSBjb3JyZXNwb25kaW5nIG1hY3JvLiAgVGhpcyBjaGFuZ2UgYWxsb3dzIHRoZSB0YWcgbGVuZ3RoIGZvcgotICAgYSBnaXZlbiBhdXRoIGZ1bmMgdG8gYmUgc2V0IHRvIGRpZmZlcmVudCB2YWx1ZXMgYXQgaW5pdGlhbGl6YXRpb24KLSAgIHRpbWUuICBQcmV2aW91c2x5LCB0aGUgc3RydWN0dXJlIGF1dGhfdCBjb250YWluZWQgdGhlCi0gICBvdXRwdXRfbGVuZ3RoLCBidXQgdGhhdCB2YWx1ZSB3YXMgaW5hY2Nlc3NpYmxlIGZyb20gaG1hY19jb21wdXRlKCkKLSAgIGFuZCBvdGhlciBmdW5jdGlvbnMuCisgIFBSICMxNzUgLSBSZW1vdmUgMm5kIC1mUElDCiAKLSAgIFJlLW5hbWVkIGZpbGVzIGZyb20gYS1iLmMgdG8gYV9iLmMuIGluIG9yZGVyIHRvIGhlbHAgcG9ydGFiaWxpdHkuCisgIFBSICMxODIgLSBBZGQgYSBsZW5ndGggY2hlY2sgYmVmb3JlIHJlYWRpbmcgcGFja2V0IGRhdGEKIAotICAgUmUtbmFtZWQgcmlqbmRhZWwgdG8gYWVzIChvciBhZXNfMTI4IGFzIGFwcHJvcHJpYXRlKS4KKyAgUFIgIzE5MSAtIE9uIGRlYnVnLCBvdXRwdXQgY29ycmVjdCBlbmRpYW5uZXNzIG9mIFNTUkMKIAorICBQUiAjMTkyIC0gUmVwbGFjZSBvY3RldF9zdHJpbmdfaXNfZXEgd2l0aCBhIGNvbnN0YW50LXRpbWUgaW1wbGVtZW50YXRpb24KIAotMS4yLjEgCisgIFBSICMxOTUgLSBBZGQgbWlzc2luZyBfX2NwbHVzcGx1cyBoZWFkZXIgZ3VhcmRzCiAKLSAgQ2hhbmdlcyBzbyB0aGF0IDEuMi4wIGNvbXBpbGVzIG9uIGN5Z3dpbi13aW4yay4KKyAgUFIgIzE5OCAtIFVwZGF0ZSBzaGExX2RyaXZlci5jIHRvIGF2b2lkIG1lbW9yeSBsZWFrcwogCi0gIEFkZGVkIGJldHRlciBlcnJvciByZXBvcnRpbmcgc3lzdGVtLiAgSWYgc3lzbG9nIGlzIHByZXNlbnQgb24gdGhlCi0gIE9TLCB0aGVuIGl0IGlzIHVzZWQuCisgIFBSICMyMDIgLSBBZGQgYW4gZXhwbGljaXQgY2FzdCB0byBhdm9pZCBhIHByaW50ZiBmb3JtYXQgd2FybmluZyBvbiBtYWNPUwogCisgIFBSICMyMDUgLSBVcGRhdGUgV2luZG93cyBidWlsZCBmaWxlcyB0byBWaXN1YWwgU3R1ZGlvIDIwMTUKIAotMS4yLjAgTWFueSBpbXByb3ZlbWVudHMgYW5kIGFkZGl0aW9ucywgYW5kIGEgZmV4IGZpeGVzCisgIFBSICMyMDcgLSBGaXggdG8gaW5zdGFsbC13aW4uYmF0IHN5bnRheCwgYW5kIGFkZCBpbnN0YWxsYXRpb24gb2YgeDY0IGxpYnJhcmllcwogCi0gICBGaXhlZCBlbmRpYW4gaXNzdWVzIGluIFJUUCBoZWFkZXIgY29uc3RydWN0aW9uIGluIHRoZSBmdW5jdGlvbgotICAgcnRwX3NlbmR0bygpIGluIHNydHAvcnRwLmMuCisgIFBSICMyMDggLSBNYWtlIHJlcGxhY2VfY2lwaGVyIGFuZCByZXBsYWNlX2F1dGggcHVibGljIGFnYWluCiAKLSAgIEltcGxlbWVudGVkIFJJSk5EQUVMIGRlY3J5cHRpb24gb3BlcmF0aW9uLCBhZGRpbmcgdGhlIGZ1bmN0aW9ucwotICAgcmlqbmRhZWxfZGVjcnlwdCgpIGFuZCByaWpuZGFlbF9leHBhbmRfZGVjcnlwdGlvbl9rZXkoKS4gIEFsc28KLSAgIHJlLW5hbWVkIHJpam5kYWVsX2V4cGFuZF9rZXkoKSB0byByaWpuZGFlbF9leHBhbmRfZW5jcnlwdGlvbl9rZXkoKQotICAgZm9yIGNvbnNpc3RlbmN5LgorICBQUiAjMjExIC0gQ2hhbmdlcyBmb3IgT3BlblNTTCAxLjEuMCBjb21wYXRpYmlsaXR5CiAKLSAgIEltcGxlbWVudGVkIHJhbmRvbSBudW1iZXIgc291cmNlIHVzaW5nIC9kZXYvcmFuZG9tLCBpbiB0aGUgZmlsZXMKLSAgIGNyeXB0by9ybmcvcmFuZF9zb3VyY2UuYyBhbmQgaW5jbHVkZS9yYW5kX3NvdXJjZS5oLgorICBQUiAjMjEzIC0gQWRkIGNhc3QgdG8gYHVuc2lnbmVkIGludGAgaW4gY2FsbCB0byBwcmludGYgaW4gdGVzdAogCi0gICBBZGRlZCBpbmRleCBjaGVjayB0byBTRUFMIGNpcGhlciAob25seSB2YWx1ZXMgbGVzcyB0aGFuIDJeMzIgYXJlCi0gICBhbGxvd2VkKQorICBQUiAjMjE0IC0gQXZvaWQgZW1wdHkgaW5pdGlhbGl6ZXIgYnJhY2VzCiAKLSAgIEFkZGVkIHRlc3QgY2FzZSBmb3IgbnVsbF9hdXRoIGF1dGhlbnRpY2F0aW9uIGZ1bmN0aW9uLgorICBQUiAjMjIyIC0gRml4IGlzc3VlOiBObyBjb25zaXN0ZW5jeSB3aGVuIHVzZSBzb21lIHNydHBfKiBmdW5jdGlvbnMKIAotICAgQWRkZWQgYSB0aW1pbmcgdGVzdCB3aGljaCB0ZXN0cyB0aGUgZWZmZWN0IG9mIENQVSBjYWNoZSB0aHJhc2ggb24KLSAgIGNpcGhlciB0aHJvdWdocHV0LiAgVGhlIHRlc3QgaXMgZG9uZSBieSB0aGUgZnVuY3Rpb24KLSAgIGNpcGhlcl90ZXN0X3Rocm91Z2hwdXRfYXJyYXkoKTsgdGhlIGZ1bmN0aW9uCi0gICBjaXBoZXJfYXJyYXlfYWxsb2NfaW5pdCgpIGNyZWF0ZXMgYW4gYXJyYXkgb2YgY2lwaGVycyBmb3IgdXNlIGluCi0gICB0aGlzIHRlc3QuICBUaGlzIHRlc3QgY2FuIGJlIGFjY2Vzc2VkIGJ5IHVzaW5nIHRoZSAtYSBmbGFnIHRvCi0gICB0aGUgYXBwbGljYXRpb24gY2lwaGVyLWRyaXZlciBpbiB0aGUgdGVzdCBzdWJkaXJlY3RvcnkuCi0gCi0gICBBZGRlZCBhcmd1bWVudCBwcm9jZXNzaW5nIHRvIHVzdC1kcml2ZXIuYywgYW5kIGFkZGVkIHRoYXQgYXBwIHRvCi0gICB0aGUgJ3J1bnRlc3QnIHRhcmdldCBpbiBNYWtlZmlsZS5pbi4KKyAgUFIgIzIzMSAtIEFkdmFuY2UgdmVyc2lvbiBvbiBtYXN0ZXIgaW4gcHJlcGFyYXRpb24gZm9yIDIuMSByZWxlYXNlCiAKLSAgIEEgbWlub3IgYXV0aF90IEFQSSBjaGFuZ2U6IGxhc3QgYXJndW1lbnQgb2YgYXV0aF9pbml0KCkgZWxpbWluYXRlZC4KKyAgUFIgIzIzMiAtIFVwZGF0ZSBUcmF2aXMsIGRvIG5vdCBidWlsZCB3aXRoIE9wZW5TU0wgb24gT1NYCiAKKyAgUFIgIzIzMyAtIGNyeXB0by9yZXBsYXkvcmRieC5jOiBSZXR1cm4gdHlwZSBvZiBzcnRwX2luZGV4X2d1ZXNzIGZyb20gaW50IHRvCisgICAgaW50MzJfdAogCi0xLjAuNiBBIHNtYWxsIGJ1dCBpbXBvcnRhbnQgZml4CisgIFBSICMyMzYgLSB0ZXN0L3J0cF9kZWNvZGVyLmM6IFJlbW92ZWQgc3VwZXJmbHVvdXMgY29uZGl0aW9uYWwKIAotICAgRml4ZWQgc3J0cF9pbml0X2Flc18xMjhfcHJmKCkgYnkgYWRkaW5nIG9jdGV0X3N0cmluZ19zZXRfdG9femVybygpCi0gICBhZnRlciBidWZmZXIgYWxsb2NhdGlvbi4KKyAgUFIgIzIzNyAtIHRlc3QvcnRwX2RlY29kZXIuYzogc3ByaW5nIGNsZWFuaW5nCiAKLSAgIEVsaW1pbmF0ZWQgcmVmZXJlbmNlcyB0byBuby1sb25nZXItZXhpc3RpbmcgdmFyaWFibGVzIGluIGRlYnVnZ2luZwotICAgY29kZSBpbiBzcnRwL3NydHAuYy4gIFRoaXMgZml4ZXMgdGhlIGNvbXBpbGF0aW9uIGZhaWx1cmUgdGhhdAotICAgb2NjdXJlZCB3aGVuIHVzaW5nIFBSSU5UX0RFQlVHIGluIHRoYXQgZmlsZS4KKyAgUFIgIzIzOSAtIG9jdGV0X3N0cmluZ19zZXRfdG9femVybygpIGRlbGVnYXRlcyB0byBPUEVOU1NMX2NsZWFuc2UoKSBpZgorICAgIGF2YWlsYWJsZSwgaWYgbm90IGl0IHdpbGwgdXNlIHNydHBfY2xlYW5zZSgpIHRvIHplcm8gbWVtb3J5CiAKLSAgIENvcnJlY3RlZCBzcGVsbGluZyBvZiBSaWNoYXJkIFByaWVzdGxleSdzIG5hbWUgaW4gY3JlZGl0cy4gIFNvcnJ5Ci0gICBSaWNoYXJkIQorICBQUiAjMjQzIC0gRUtUIGlzIG5vdCByZWFsbHkgc3VwcG9ydGVkIHlldCwgcmVtb3ZlIGZyb20gaW5zdGFsbAogCisgIFBSICMyNDQgLSBBZGQgc2ltcGxlIGVycm9yIGNoZWNraW5nIGluIHRpbWluZyB0ZXN0IHRvIGF2b2lkIGZhbHNlIHJlc3VsdHMKIAotMS4wLjUgTWFueSBsaXR0bGUgZml4ZXMKKyAgUFIgIzI0NSAtIEFkZCBtaXNzaW5nIHNydHBfY2lwaGVyX2RlYWxsb2MgY2FsbHMgd2hlbiB0ZXN0IGZhaWxzCiAKLSAgIEZpeGVkIG9jdGV0X3N0cmluZ19zZXRfdG9femVybygpLCB3aGljaCB3YXMgd3JpdGluZyBvbmUKLSAgIG1vcmUgemVybyBvY3RldCB0aGFuIGl0IHNob3VsZC4gIFRoaXMgYnVnIGNhdXNlZCBzcnRwX3Byb3RlY3QoKQotICAgYW5kIHNydHBfdW5wcm90ZWN0KCkgdG8gb3ZlcndyaXRlIHRoZSBieXRlIHRoYXQgZm9sbG93ZWQgdGhlCi0gICBzcnRwIHBhY2tldC4KKyAgUFIgIzI0NiAtIHRlc3QvcnRwX2RlY29kZXI6IEFkZCBtaXNzaW5nIGNvbmRpdGlvbmFsCiAKLSAgIENoYW5nZWQgc2l6ZW9mKHVpbnQzMl90KSB0byBzcnRwX2dldF90cmFpbGVyX2xlbmd0aCgpIGluCi0gICBzcnRwLWRyaXZlci5jLiAgVGhpcyBpcyBqdXN0IGRlZmVuc2l2ZSBjb2RpbmcuCisgIFBSICMyNDggLSBOZXcgUkVBRE1FLm1kIHRoYXQgaW50ZWdyYXRlcyBpbnRybywgY3JlZGl0cyBhbmQgcmVmZXJlbmNlcyBmcm9tCisgICAgL2RvYy8gYW5kIGlzIHVzZWQgdG8gZ2VuZXJhdGUgZG9jdW1lbnRhdGlvbgogCi0gICBBZGRlZCBOVUxMIGNoZWNrIHRvIG1hbGxvYyBpbiBzcnRwX2FsbG9jKCkuCisgIFBSICMyNDkgLSBSZW1vdmUgc3VwcG9ydCBmb3IgZ2VuZXJpYyBhZXNpY20gZnJvbSBjb25maWd1cmUuaW4KIAorICBQUiAjMjUwIC0gVXBkYXRlIFJFQURNRS5tZCwgaW5jb3JyZWN0IHRhZyBmb3IgbGluawogCi0xLjAuNCBNYW55IG1pbm9yIGZpeGVzIGFuZCB0d28gYmlnIG9uZXMgKHRoYW5rcyBmb3IgdGhlIGJ1ZyByZXBvcnRzISkKKyAgUFIgIzI1NSAtIENsZWFudXAgb3V0ZGF0ZWQgY29tbWVudCByZWxhdGVkIHRvIE1LSQogCi0gICBSZW1vdmVkICdzc3JjJyBmcm9tIHRoZSBzcnRwX2luaXRfYWVzXzEyOF9wcmYoKSBmdW5jdGlvbiBhcmd1bWVudAotICAgbGlzdC4gIFRoaXMgaXMgc28gdGhhdCBhcHBsaWNhdGlvbnMgd2hpY2ggZG8gbm90IGEgcHJpb3JpIGtub3cgdGhlCi0gICBzc3JjIHdoaWNoIHRoZXkgd2lsbCBiZSByZWNlaXZpbmcgY2FuIHN0aWxsIHVzZSBsaWJzcnRwLiAgTm93IHRoZQotICAgU1NSQyB2YWx1ZSBpcyBnbGVhbmVkIGZyb20gdGhlIHJ0cCBoZWFkZXIgYW5kIGV4b3JlZCBpbnRvIHRoZQotICAgY291bnRlciBtb2RlIG9mZnNldCBpbiB0aGUgc3J0cF9wcm90ZWN0KCkgYW5kIHNydHBfdW5wcm90ZWN0KCkKLSAgIGZ1bmN0aW9ucywgaWYgdGhhdCBjaXBoZXIgaXMgdXNlZC4gIFRoaXMgY2hhbmdlIGNhc2NhZWQgdGhyb3VnaAotICAgbWFueSBvdGhlciBmdW5jdGlvbnMsIGluY2x1ZGluZyBzcnRwX2luaXRfZnJvbV9oZXgoKSwKLSAgIHNydHBfc2VuZGVyX2luaXQoKSBhbmQgc3J0cF9yZWNlaXZlcl9pbml0KCkgaW4gcnRwLmMsIGFuZCBhbHNvCi0gICBjaGFuZ2luZyB0aGUgQ0xJIHRvIHRlc3QvcnRwdy4gIEluIHRoZSBmdXR1cmUsIGFub3RoZXIgZnVuY3Rpb24KLSAgIGNhbGwgd2lsbCBiZSBhZGRlZCB0byB0aGUgbGlicmFyeSB0aGF0IGVuYWJsZXMgbXVsdGlwbGUgc3NyYy9rZXkKLSAgIHBhaXJzIHRvIGJlIGluc3RhbGxlZCBpbnRvIHRoZSBzYW1lIHNydHAgc2Vzc2lvbiwgc28gdGhhdCBsaWJzcnRwCi0gICB3b3JrcyB3aXRoIG11bHRpcGxlIHNydHAgc2VuZGVycy4gIEZvciBub3csIHRoaXMgZnVuY3Rpb25hbGl0eSBpcwotICAgbGFja2luZy4KKyAgUFIgIzI1OCAtIEFkZCBBRVMtR0NNIHRvIERUTFMtU1JUUCBQcm90ZWN0aW9uIFByb2ZpbGVzCiAKLSAgIFJlbW92ZWQgdGhlIEdET0kgaW50ZXJmYWNlIHRvIHRoZSBydHB3IGRlbW8gcHJvZ3JhbS4gIFRoaXMgd2lsbCBiZQotICAgYWRkZWQgYWdhaW4gYXQgYSBsYXRlciBkYXRlLCBhZnRlciB0aGUgU1JUUCBhbmQgR0RPSSBkaXN0cmlidXRpb25zCi0gICBzdGFiaWxpemUuICBGb3Igbm93LCBJJ3ZlIGxlZnQgaW4gdGhlIEdET0kgI2RlZmluZXMgYW5kIGF1dG9jb25mCi0gICBkZWZpbml0aW9ucyBzbyB0aGF0IHRoZXknbGwgYmUgaW4gcGxhY2Ugd2hlbiBuZWVkZWQuCisgIFBSICMyNjMgLSBDbGVhbmluZyB1cCBhbmQgcmVtb3ZpbmcgZHVwbGljYXRlZCBhbmQgb3V0ZGF0ZWQgY29kZQogCi0gICBVcGRhdGVkIHRtbWh2Ml9jb21wdXRlKCkgc28gdGhhdCBpdCBkaWRuJ3QgYXNzdW1lIGFueSBwYXJ0aWN1bGFyCi0gICBhbGdpbm1lbnQgb2YgdGhlIG91dHB1dCB0YWcuCisgIFBSICMyNjUgLSBJbnRyb2R1Y3Rpb24gb2YgdW5pdCB0ZXN0IGZyYW1ld29yazogQ1VUZXN0CiAKLSAgIENoYW5nZWQgYml0IGZpZWxkIHZhcmlhYmxlcyBpbiBzcnRwLmggdG8gdW5zaWduZWQgY2hhciBmcm9tCi0gICB1bnNpZ25lZCBpbnQgaW4gb3JkZXIgdG8gYXZvaWQgYSBwb3RlbnRpYWwgZW5kaWFubmVzcyBpc3N1ZS4KKyAgUFIgIzI2NyAtIGNyeXB0by9rZXJuZWwvZXJyLmM6IEluY2x1ZGUgZGF0YXR5cGVzLmgKIAotICAgRml4ZWQgcmRieF9lc3RpbWF0ZV9pbmRleCgpIHRvIGhhbmRsZSBhbGwgaW5wdXQgY2FzZXMuICBUaGlzIHNvbHZlcwotICAgdGhlIG5vdyBub3RvcmlvdXMgImFiYWZ0IiBidWcgaW4gdGhlIHJ0cHcgZGVtbyBhcHAgb24gbGludXgvaW50ZWwsCi0gICBpbiB3aGljaCBzcHVyaW91cyByZXBsYXkgcHJvdGVjdGlvbiBmYWlsdXJlcyBoYXBwZW4gYWZ0ZXIgdGhhdCB3b3JkCi0gICBpcyByZWNlaXZlZC4KKyAgUFIgIzI3MiAtIFJlZHVjZSBsaXRlcmFsIGNvbnN0YW50cwogCi0gICBBZGRlZCBudG9ocyhoZHItPnNlcSkgdG8gc3J0cF9wcm90ZWN0IGFuZCBzcnRwX3VucHJvdGVjdCwgcmVtb3ZlZAotICAgZnJvbSByaWpuZGFlbF9pY21fc2V0X3NlZ21lbnQoKS4KKyAgUFIgIzI3MyAtIFNSVFAgQUVBRCBTUlRDUCBpbml0aWFsaXphdGlvbiB2ZWN0b3IgcmVncmVzc2lvbiB0ZXN0cwogCi0gICBBZGRlZCBlcnJvciBjaGVja2luZyBhbmQgaGFuZGxpbmcgdG8gc3J0cF9zZW5kZXJfaW5pdCgpIGFuZAotICAgc3J0cF9yZWNlaXZlcl9pbml0KCkuCisgIFBSICMyNzQgLSBVcGRhdGUgVHJhdmlzIGJ1aWxkIC0gYWRkIGNjYWNoZQogCi0gICBDaGFuZ2VkIHNydHBfYWxsb2MoKSBzbyB0aGF0IGl0IGRvZXMgd2hhdCB5b3UnZCBleHBlY3Q6IGFsbG9jYXRlIGFuCi0gICBzcnRwX2N0eF90IHN0cnVjdHVyZS4gIFRoaXMgaGlkZXMgdGhlIGxpYnJhcnkgaW50ZXJuYWxzLgorICBQUiAjMjc2IC0gUmVmZXJlbmNlIGFuZCBkb2NzIHVwZGF0ZXMKIAorICBQUiAjMjc4IC0gUmVtb3ZlZCBjcnlwdG8vdGVzdC9hdXRoX2RyaXZlci5jIGFuZCB0ZXN0L2xmc3IuYwogCi0xLjAuMSAgIE1hbnkgbWlub3IgZml4ZXMKKyAgUFIgIzI3OSAtIEJ1bXAgY29weXJpZ2h0IHllYXIKIAotICAgQWRkZWQgY2lwaGVyX2RyaXZlcl9idWZmZXJfdGVzdCguLi4pIHRvIHRlc3QvY2lwaGVyLWRyaXZlci5jLiAgVGhpcwotICAgZnVuY3Rpb24gY2hlY2tzIHRoYXQgdGhlIGJ5dGUtYnVmZmVyaW5nIGZ1bmN0aW9ucyB1c2VkIGJ5IGEgY2lwaGVyCi0gICBhcmUgY29ycmVjdC4KKyAgUFIgIzI4MyAtIEFkZCBtaXNzaW5nIGRvY3MgaW4gc3J0cC5oCiAKLSAgIEZpeGVkIFN1bk9TL1NvbGFyaXMgYnVpbGQgcHJvYmxlbXM6IGFkZGVkIEhBVkVfU1lTX0lOVF9UWVBFU19IIGFuZAotICAgY2hhbmdlZCBpbmRleF90IHRvIHh0ZF9zZXFfbnVtX3QgKHNlZSBpbmNsdWRlL3JkYnguaCkuCisgIFBSICMyODQgLSBBZGQgc3RyaWN0LXByb3RvdHlwZXMgd2FybmluZyBpZiBzdXBwb3J0ZWQKIAotICAgRml4ZWQgU0VBTDMuMCBvdXRwdXQgYnl0ZSBidWZmZXJpbmcsIGFkZGVkIGJ5dGUtYnVmZmVyaW5nIHRlc3QgdG8KLSAgIGNpcGhlci9jaXBoZXItZHJpdmVyLmMuCisgIFBSICMyOTEgLSBVc2UgY29uc3QgY2hhciAqIGZvciBzcnRwX3NldF9kZWJ1Z19tb2R1bGUoKQogCi0gICBGaXhlZCByb2MtZHJpdmVyIHNvIHRoYXQgdGhlIG5vbi1zZXF1ZW50aWFsIGluc2VydGlvbiB0ZXN0Ci0gICBhdXRvbWF0aWNhbGx5IHJlY292ZXJzIGZyb20gYmFkIGVzdGltYXRlcy4gIFRoaXMgd2FzIHJlcXVpcmVkIHRvCi0gICBwcmV2ZW50IHNwdXJpb3VzIGZhaWx1cmVzLgorICBQUiAjMjk0IC0gRml4IGluY29ycmVjdCByZXN1bHQgb2YgcmRiX2luY3JlbWVudCBvbiBvdmVyZmxvdwogCi0gICBNYWRlIHJkYnhfZXN0aW1hdGVfaW5kZXgoLi4uKSBmdW5jdGlvbiBzbWFydGVyLCBzbyB0aGF0IGluaXRpYWwgUlRQCi0gICBzZXF1ZW5jZSBudW1iZXJzIGdyZWF0ZXIgdGhhbiAzMiw3NjggZG9uJ3QgY2F1c2UgaXQgdG8gZXN0aW1hdGUgdGhlCi0gICByb2xsb3ZlciBjb3VudGVyIG9mIDB4ZmZmZmZmZmYuCisgIFBSICMzMDAgLSBTdGFuZGFsb25lIHRlc3RzCiAKKyAgUFIgIzMwMSAtIENvbmZpZ3VyZSBmaXhlcwogCi0xLjAuMCAgIEluaXRpYWwgcmVsZWFzZQorICBQUiAjMzAyIC0gRml4IHdhcm5pbmcgcmVnYXJkaW5nIHVudXNlZCB2YXJpYWJsZQogCisgIFBSICMzMDMgLSBNYWtlZmlsZS5pbjogQWRkIGdudSBhcyBtYXRjaCBmb3Igc2hhcmVkIGxpYiBzdWZmaXgKZGlmZiAtLWdpdCBhL0NNYWtlTGlzdHMudHh0IGIvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI5Mzg5MgotLS0gL2Rldi9udWxsCisrKyBiL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMjAwIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44KQorCitwcm9qZWN0KGxpYnNydHAyIExBTkdVQUdFUyBDKQorCitzZXQoUEFDS0FHRV9WRVJTSU9OIDIuMy4wKQorc2V0KFBBQ0tBR0VfU1RSSU5HICIke0NNQUtFX1BST0pFQ1RfTkFNRX0gJHtQQUNLQUdFX1ZFUlNJT059IikKKworaW5jbHVkZShUZXN0QmlnRW5kaWFuKQoraW5jbHVkZShDaGVja0luY2x1ZGVGaWxlKQoraW5jbHVkZShDaGVja0Z1bmN0aW9uRXhpc3RzKQoraW5jbHVkZShDaGVja1R5cGVTaXplKQoraW5jbHVkZShDaGVja0NTb3VyY2VDb21waWxlcykKKwordGVzdF9iaWdfZW5kaWFuKFdPUkRTX0JJR0VORElBTikKKworY2hlY2tfaW5jbHVkZV9maWxlKGFycGEvaW5ldC5oIEhBVkVfQVJQQV9JTkVUX0gpCitjaGVja19pbmNsdWRlX2ZpbGUoYnl0ZXN3YXAuaCBIQVZFX0JZVEVTV0FQX0gpCitjaGVja19pbmNsdWRlX2ZpbGUoaW50dHlwZXMuaCBIQVZFX0lOVFRZUEVTX0gpCitjaGVja19pbmNsdWRlX2ZpbGUobWFjaGluZS90eXBlcy5oIEhBVkVfTUFDSElORV9UWVBFU19IKQorY2hlY2tfaW5jbHVkZV9maWxlKG5ldGluZXQvaW4uaCBIQVZFX05FVElORVRfSU5fSCkKK2NoZWNrX2luY2x1ZGVfZmlsZShzdGRpbnQuaCBIQVZFX1NURElOVF9IKQorY2hlY2tfaW5jbHVkZV9maWxlKHN0ZGxpYi5oIEhBVkVfU1RETElCX0gpCitjaGVja19pbmNsdWRlX2ZpbGUoc3lzL2ludF90eXBlcy5oIEhBVkVfU1lTX0lOVF9UWVBFU19IKQorY2hlY2tfaW5jbHVkZV9maWxlKHN5cy9zb2NrZXQuaCBIQVZFX1NZU19TT0NLRVRfSCkKK2NoZWNrX2luY2x1ZGVfZmlsZShzeXMvdHlwZXMuaCBIQVZFX1NZU19UWVBFU19IKQorY2hlY2tfaW5jbHVkZV9maWxlKHVuaXN0ZC5oIEhBVkVfVU5JU1REX0gpCitjaGVja19pbmNsdWRlX2ZpbGUod2luZG93cy5oIEhBVkVfV0lORE9XU19IKQorY2hlY2tfaW5jbHVkZV9maWxlKHdpbnNvY2syLmggSEFWRV9XSU5TT0NLMl9IKQorCitjaGVja19mdW5jdGlvbl9leGlzdHMoc2lnYWN0aW9uIEhBVkVfU0lHQUNUSU9OKQorY2hlY2tfZnVuY3Rpb25fZXhpc3RzKGluZXRfYXRvbiBIQVZFX0lORVRfQVRPTikKK2NoZWNrX2Z1bmN0aW9uX2V4aXN0cyh1c2xlZXAgSEFWRV9VU0xFRVApCisKK2NoZWNrX3R5cGVfc2l6ZSh1aW50OF90IFVJTlQ4X1QpCitjaGVja190eXBlX3NpemUodWludDE2X3QgVUlOVDE2X1QpCitjaGVja190eXBlX3NpemUodWludDMyX3QgVUlOVDMyX1QpCitjaGVja190eXBlX3NpemUodWludDY0X3QgVUlOVDY0X1QpCitjaGVja190eXBlX3NpemUoaW50MzJfdCBJTlQzMl9UKQorY2hlY2tfdHlwZV9zaXplKCJ1bnNpZ25lZCBsb25nIiBTSVpFT0ZfVU5TSUdORURfTE9ORykKK2NoZWNrX3R5cGVfc2l6ZSgidW5zaWduZWQgbG9uZyBsb25nIiBTSVpFT0ZfVU5TSUdORURfTE9OR19MT05HKQorCitjaGVja19jX3NvdXJjZV9jb21waWxlcygiaW5saW5lIHZvaWQgZnVuYygpOyB2b2lkIGZ1bmMoKSB7IH0gaW50IG1haW4oKSB7IGZ1bmMoKTsgcmV0dXJuIDA7IH0iIEhBVkVfSU5MSU5FKQoraWYoTk9UIEhBVkVfSU5MSU5FKQorICBjaGVja19jX3NvdXJjZV9jb21waWxlcygiX19pbmxpbmUgdm9pZCBmdW5jKCk7IHZvaWQgZnVuYygpIHsgfSBpbnQgbWFpbigpIHsgZnVuYygpOyByZXR1cm4gMDsgfSIgSEFWRV9fX0lOTElORSkKK2VuZGlmKCkKKworc2V0KEVOQUJMRV9ERUJVR19MT0dHSU5HIE9GRiBDQUNIRSBCT09MICJFbmFibGUgZGVidWcgbG9nZ2luZyBpbiBhbGwgbW9kdWxlcyIpCitzZXQoRVJSX1JFUE9SVElOR19TVERPVVQgT0ZGIENBQ0hFIEJPT0wgIkVuYWJsZSBsb2dnaW5nIHRvIHN0ZG91dCIpCitzZXQoRVJSX1JFUE9SVElOR19GSUxFICIiIENBQ0hFIEZJTEVQQVRIICJVc2UgZmlsZSBmb3IgbG9nZ2luZyIpCitzZXQoRU5BQkxFX09QRU5TU0wgT0ZGIENBQ0hFIEJPT0wgIkVuYWJsZSBPcGVuU1NMIGNyeXB0byBlbmdpbmUiKQorc2V0KFRFU1RfQVBQUyBPTiBDQUNIRSBCT09MICJCdWlsZCB0ZXN0IGFwcGxpY2F0aW9ucyIpCitvcHRpb24oQlVJTERfU0hBUkVEX0xJQlMgIkJ1aWxkIHNoYXJlZCBsaWJyYXJ5IiBPRkYpCisKK2lmKEVOQUJMRV9PUEVOU1NMKQorICBmaW5kX3BhY2thZ2UoT3BlblNTTCBSRVFVSVJFRCkKKyAgaW5jbHVkZV9kaXJlY3Rvcmllcygke09QRU5TU0xfSU5DTFVERV9ESVJ9KQorZW5kaWYoKQorc2V0KE9QRU5TU0wgJHtFTkFCTEVfT1BFTlNTTH0gQ0FDSEUgQk9PTCBJTlRFUk5BTCkKK3NldChHQ00gJHtFTkFCTEVfT1BFTlNTTH0gQ0FDSEUgQk9PTCBJTlRFUk5BTCkKKworc2V0KENPTkZJR19GSUxFX0RJUiAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0pCitpbmNsdWRlX2RpcmVjdG9yaWVzKCR7Q09ORklHX0ZJTEVfRElSfSkKKworY29uZmlndXJlX2ZpbGUoY29uZmlnX2luX2NtYWtlLmggJHtDT05GSUdfRklMRV9ESVJ9L2NvbmZpZy5oKQorYWRkX2RlZmluaXRpb25zKC1ESEFWRV9DT05GSUdfSCkKKworc2V0KFNPVVJDRVNfQworICBzcnRwL2VrdC5jCisgIHNydHAvc3J0cC5jCispCisKK3NldChDSVBIRVJTX1NPVVJDRVNfQworICBjcnlwdG8vY2lwaGVyL2NpcGhlci5jCisgIGNyeXB0by9jaXBoZXIvbnVsbF9jaXBoZXIuYworKQorCitpZihFTkFCTEVfT1BFTlNTTCkKKyAgbGlzdChBUFBFTkQgQ0lQSEVSU19TT1VSQ0VTX0MKKyAgICBjcnlwdG8vY2lwaGVyL2Flc19pY21fb3NzbC5jCisgICAgY3J5cHRvL2NpcGhlci9hZXNfZ2NtX29zc2wuYworICApCitlbHNlKCkKKyAgbGlzdChBUFBFTkQgIENJUEhFUlNfU09VUkNFU19DCisgICAgY3J5cHRvL2NpcGhlci9hZXMuYworICAgIGNyeXB0by9jaXBoZXIvYWVzX2ljbS5jCisgICkKK2VuZGlmKCkKKworc2V0KEhBU0hFU19TT1VSQ0VTX0MKKyAgICBjcnlwdG8vaGFzaC9hdXRoLmMKKyAgICBjcnlwdG8vaGFzaC9udWxsX2F1dGguYworKQorCitpZihFTkFCTEVfT1BFTlNTTCkKKyAgbGlzdChBUFBFTkQgSEFTSEVTX1NPVVJDRVNfQworICAgIGNyeXB0by9oYXNoL2htYWNfb3NzbC5jCisgICkKK2Vsc2UoKQorICBsaXN0KEFQUEVORCAgSEFTSEVTX1NPVVJDRVNfQworICAgIGNyeXB0by9oYXNoL2htYWMuYworICAgIGNyeXB0by9oYXNoL3NoYTEuYworICApCitlbmRpZigpCisKK3NldChLRVJORUxfU09VUkNFU19DCisgIGNyeXB0by9rZXJuZWwvYWxsb2MuYworICBjcnlwdG8va2VybmVsL2NyeXB0b19rZXJuZWwuYworICBjcnlwdG8va2VybmVsL2Vyci5jCisgIGNyeXB0by9rZXJuZWwva2V5LmMKKykKKworc2V0KE1BVEhfU09VUkNFU19DCisgIGNyeXB0by9tYXRoL2RhdGF0eXBlcy5jCisgIGNyeXB0by9tYXRoL3N0YXQuYworKQorCitzZXQoUkVQTEFZX1NPVVJDRVNfQworICBjcnlwdG8vcmVwbGF5L3JkYi5jCisgIGNyeXB0by9yZXBsYXkvcmRieC5jCisgIGNyeXB0by9yZXBsYXkvdXRfc2ltLmMKKykKKworc2V0KFNPVVJDRVNfSAorICBjcnlwdG8vaW5jbHVkZS9hZXMuaAorICBjcnlwdG8vaW5jbHVkZS9hZXNfaWNtLmgKKyAgY3J5cHRvL2luY2x1ZGUvYWxsb2MuaAorICBjcnlwdG8vaW5jbHVkZS9hdXRoLmgKKyAgY3J5cHRvL2luY2x1ZGUvY2lwaGVyLmgKKyAgY3J5cHRvL2luY2x1ZGUvY2lwaGVyX3R5cGVzLmgKKyAgY3J5cHRvL2luY2x1ZGUvY3J5cHRvX2tlcm5lbC5oCisgIGNyeXB0by9pbmNsdWRlL2NyeXB0b190eXBlcy5oCisgIGNyeXB0by9pbmNsdWRlL2RhdGF0eXBlcy5oCisgIGNyeXB0by9pbmNsdWRlL2Vyci5oCisgIGNyeXB0by9pbmNsdWRlL2htYWMuaAorICBjcnlwdG8vaW5jbHVkZS9pbnRlZ2Vycy5oCisgIGNyeXB0by9pbmNsdWRlL2tleS5oCisgIGNyeXB0by9pbmNsdWRlL251bGxfYXV0aC5oCisgIGNyeXB0by9pbmNsdWRlL251bGxfY2lwaGVyLmgKKyAgY3J5cHRvL2luY2x1ZGUvcmRiLmgKKyAgY3J5cHRvL2luY2x1ZGUvcmRieC5oCisgIGNyeXB0by9pbmNsdWRlL3NoYTEuaAorICBjcnlwdG8vaW5jbHVkZS9zdGF0LmgKKyAgaW5jbHVkZS9zcnRwLmgKKyAgaW5jbHVkZS9zcnRwX3ByaXYuaAorICBpbmNsdWRlL3V0X3NpbS5oCisgICR7Q09ORklHX0ZJTEVfRElSfS9jb25maWcuaAorKQorCitpZihCVUlMRF9TSEFSRURfTElCUyBBTkQgV0lOMzIpCisgIGxpc3QoQVBQRU5EIFNPVVJDRVNfQworICAgIHNydHAuZGVmCisgICkKK2VuZGlmKCkKKworc291cmNlX2dyb3VwKCJzcmMiIEZJTEVTICR7U09VUkNFU19DfSkKK3NvdXJjZV9ncm91cCgic3JjXFxDaXBoZXJzIiBGSUxFUyAke0NJUEhFUlNfU09VUkNFU19DfSkKK3NvdXJjZV9ncm91cCgic3JjXFxIYXNoZXMiIEZJTEVTICR7SEFTSEVTX1NPVVJDRVNfQ30pCitzb3VyY2VfZ3JvdXAoInNyY1xcS2VybmVsIiBGSUxFUyAke0tFUk5FTF9TT1VSQ0VTX0N9KQorc291cmNlX2dyb3VwKCJzcmNcXE1hdGgiIEZJTEVTICR7TUFUSF9TT1VSQ0VTX0N9KQorc291cmNlX2dyb3VwKCJzcmNcXFJlcGxheSIgRklMRVMgJHtSRVBMQVlfU09VUkNFU19DfSkKK3NvdXJjZV9ncm91cCgiaW5jbHVkZSIgRklMRVMgJHtTT1VSQ0VTX0h9KQorCithZGRfbGlicmFyeShzcnRwMgorICAke1NPVVJDRVNfQ30KKyAgJHtDSVBIRVJTX1NPVVJDRVNfQ30KKyAgJHtIQVNIRVNfU09VUkNFU19DfQorICAke0tFUk5FTF9TT1VSQ0VTX0N9CisgICR7TUFUSF9TT1VSQ0VTX0N9CisgICR7UkVQTEFZX1NPVVJDRVNfQ30KKyAgJHtTT1VSQ0VTX0h9CispCisKK3RhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKHNydHAyIFBVQkxJQyBjcnlwdG8vaW5jbHVkZSBpbmNsdWRlKQoraWYoRU5BQkxFX09QRU5TU0wpCisgIHRhcmdldF9saW5rX2xpYnJhcmllcyhzcnRwMiBPcGVuU1NMOjpDcnlwdG8pCitlbmRpZigpCitpZihXSU4zMikKKyAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHNydHAyIHdzMl8zMikKK2VuZGlmKCkKKworaW5zdGFsbChUQVJHRVRTIHNydHAyIERFU1RJTkFUSU9OIGxpYikKK2luc3RhbGwoRklMRVMgaW5jbHVkZS9zcnRwLmggY3J5cHRvL2luY2x1ZGUvYXV0aC5oCisgIGNyeXB0by9pbmNsdWRlL2NpcGhlci5oCisgIGNyeXB0by9pbmNsdWRlL2NpcGhlcl90eXBlcy5oCisgIERFU1RJTkFUSU9OIGluY2x1ZGUvc3J0cDIpCisKK2lmKFRFU1RfQVBQUykKKyAgZW5hYmxlX3Rlc3RpbmcoKQorCitpZihOT1QgKEJVSUxEX1NIQVJFRF9MSUJTIEFORCBXSU4zMikpCisgIGFkZF9leGVjdXRhYmxlKHRlc3Rfc3J0cCB0ZXN0L3Rlc3Rfc3J0cC5jKQorICB0YXJnZXRfbGlua19saWJyYXJpZXModGVzdF9zcnRwIHNydHAyKQorICBhZGRfdGVzdCh0ZXN0X3NydHAgdGVzdF9zcnRwKQorZW5kaWYoKQorCisgIGFkZF9leGVjdXRhYmxlKHNydHBfZHJpdmVyIHRlc3Qvc3J0cF9kcml2ZXIuYworICAgIHRlc3QvdXRpbC5jIHRlc3QvZ2V0b3B0X3MuYykKKyAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHNydHBfZHJpdmVyIHNydHAyKQorICBhZGRfdGVzdChzcnRwX2RyaXZlciBzcnRwX2RyaXZlciAtdikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL0xJQ0VOU0UgYi9MSUNFTlNFCmluZGV4IDAyY2E1MDcuLmFmMGEyYWMgMTAwNjQ0Ci0tLSBhL0xJQ0VOU0UKKysrIGIvTElDRU5TRQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKgkKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDAzIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDE3IENpc2NvIFN5c3RlbXMsIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgppbmRleCBmYzA0MWUwLi42YTllYjliIDEwMDY0NAotLS0gYS9NYWtlZmlsZS5pbgorKysgYi9NYWtlZmlsZS5pbgpAQCAtMSwxMTkgKzEsMjQyIEBACi0jIE1ha2VmaWxlIGZvciBzZWN1cmUgcnRwIAorIyBNYWtlZmlsZSBmb3Igc2VjdXJlIHJ0cAogIwogIyBEYXZpZCBBLiBNY0dyZXcKICMgQ2lzY28gU3lzdGVtcywgSW5jLgogCiAjIHRhcmdldHM6CiAjCi0jIHJ1bnRlc3QgICAgICAgcnVucyB0ZXN0IGFwcGxpY2F0aW9ucyAKKyMgcnVudGVzdCAgICAgICBydW5zIHRlc3QgYXBwbGljYXRpb25zCisjIHJ1bnRlc3QtdmFsZ3JpbmQgcnVucyB0ZXN0IGFwcGxpY2F0aW9ucyB3aXRoIHZhbGdyaW5kCiAjIHRlc3QJCWJ1aWxkcyB0ZXN0IGFwcGxpY2F0aW9ucwotIyBsaWJjcnlwdC5hCXN0YXRpYyBsaWJyYXJ5IGltcGxlbWVudGluZyBjcnlwdG8gZW5naW5lCi0jIGxpYnNydHAuYQlzdGF0aWMgbGlicmFyeSBpbXBsZW1lbnRpbmcgc3J0cAorIyBsaWJzcnRwMi5hCXN0YXRpYyBsaWJyYXJ5IGltcGxlbWVudGluZyBzcnRwCisjIGxpYnNydHAyLnNvCXNoYXJlZCBsaWJyYXJ5IGltcGxlbWVudGluZyBzcnRwCiAjIGNsZWFuCQlyZW1vdmVzIG9iamVjdHMsIGxpYnMsIGFuZCBleGVjdXRhYmxlcwotIyBkaXN0cmlidXRpb24JY2xlYW5zIGFuZCBidWlsZHMgYSAudGd6Ci0jIHRhZ3MJCWJ1aWxkcyBldGFncyBmaWxlIGZyb20gYWxsIC5jIGFuZCAuaCBmaWxlcworIyBkaXN0cmlidXRpb24gIGNsZWFucyBhbmQgYnVpbGRzIGEgLnRnegorIyB0YWdzICAgICAgICAgIGJ1aWxkcyBldGFncyBmaWxlIGZyb20gYWxsIC5jIGFuZCAuaCBmaWxlcwogCi0uUEhPTlk6IHRlc3QgYWxsIHJ1bnRlc3QKK0RZTkFNSUNfUEFUSF9WQVIgPSBARFlOQU1JQ19QQVRIX1ZBUkAKK0NSWVBUT19MSUJESVIgPSBAQ1JZUFRPX0xJQkRJUkAKK1VTRV9FWFRFUk5BTF9DUllQVE8gPSBAVVNFX0VYVEVSTkFMX0NSWVBUT0AKK0hBVkVfUENBUCA9IEBIQVZFX1BDQVBACisKKyMgU3BlY2lmeSBob3cgdGVzdHMgc2hvdWxkIGZpbmQgc2hhcmVkIGxpYnJhcmllcyBvbiBtYWNPUyBhbmQgTGludXgKKyMKKyMgbWFjT1MgcHVyZ2VzIERZTERfTElCUkFSWV9QQVRIIHdoZW4gc3Bhd25pbmcgc3VicHJvY2Vzc2VzLCBzbyBpdCdzCisjIG5vdCBwb3NzaWJsZSB0byBwYXNzIHRoaXMgaW4gZnJvbSB0aGUgb3V0c2lkZTsgd2UgaGF2ZSB0byBzcGVjaWZ5CisjIGl0IGZvciBhbnkgc3VicHJvY2Vzc2VzIHdlIGNhbGwuIE5vIHN1cHBvcnQgZm9yIGR5bmFtaWMgbGlua2VkCisjIHRlc3RzIG9uIFdpbmRvd3MuCitpZm5lcSAoJChzdHJpcCAkKENSWVBUT19MSUJESVIpKSwpCisJaWZuZXEgKCQoT1MpLFdpbmRvd3NfTlQpCisJCVVOQU1FX1MgPSAkKHNoZWxsIHVuYW1lIC1zKQorCQlpZmVxICgkKFVOQU1FX1MpLExpbnV4KQorCQkJRklORF9MSUJSQVJJRVMgPSBMRF9MSUJSQVJZX1BBVEg9JChDUllQVE9fTElCRElSKQorCQllbmRpZgorCQlpZmVxICgkKFVOQU1FX1MpLERhcndpbikKKwkJCUZJTkRfTElCUkFSSUVTID0gRFlMRF9MSUJSQVJZX1BBVEg9JChDUllQVE9fTElCRElSKQorCQllbmRpZgorCQlDUllQVE9fTElCRElSX0ZPUldBUkQgPSBDUllQVE9fTElCRElSPSQoQ1JZUFRPX0xJQkRJUikKKwllbmRpZgorZW5kaWYKKworLlBIT05ZOiBhbGwgc2hhcmVkX2xpYnJhcnkgdGVzdAorCithbGw6IHRlc3QKIAogcnVudGVzdDogdGVzdAotCUBlY2hvICJydW5uaW5nIGxpYnNydHAgdGVzdCBhcHBsaWNhdGlvbnMuLi4iCi0JdGVzdC9jaXBoZXJfZHJpdmVyJChFWEUpIC12ID4vZGV2L251bGwKLQl0ZXN0L3JkYnhfZHJpdmVyJChFWEUpIC12ID4vZGV2L251bGwKLQl0ZXN0L3NydHBfZHJpdmVyJChFWEUpIC12ID4vZGV2L251bGwKLQl0ZXN0L3JvY19kcml2ZXIkKEVYRSkgLXYgPi9kZXYvbnVsbAotCXRlc3Qva2VybmVsX2RyaXZlciQoRVhFKSAtdiA+L2Rldi9udWxsCi0JQGVjaG8gImxpYnNydHAgdGVzdCBhcHBsaWNhdGlvbnMgcGFzc2VkLiIKKwlAZWNobyAicnVubmluZyBsaWJzcnRwMiB0ZXN0IGFwcGxpY2F0aW9ucy4uLiIKKwkkKEZJTkRfTElCUkFSSUVTKSBjcnlwdG8vdGVzdC9jaXBoZXJfZHJpdmVyJChFWEUpIC12ID4vZGV2L251bGwKKwkkKEZJTkRfTElCUkFSSUVTKSBjcnlwdG8vdGVzdC9rZXJuZWxfZHJpdmVyJChFWEUpIC12ID4vZGV2L251bGwKKwkkKEZJTkRfTElCUkFSSUVTKSB0ZXN0L3Rlc3Rfc3J0cCQoRVhFKSA+L2Rldi9udWxsCisJJChGSU5EX0xJQlJBUklFUykgdGVzdC9yZGJ4X2RyaXZlciQoRVhFKSAtdiA+L2Rldi9udWxsCisJJChGSU5EX0xJQlJBUklFUykgdGVzdC9zcnRwX2RyaXZlciQoRVhFKSAtdiA+L2Rldi9udWxsCisJJChGSU5EX0xJQlJBUklFUykgdGVzdC9yb2NfZHJpdmVyJChFWEUpIC12ID4vZGV2L251bGwKKwkkKEZJTkRfTElCUkFSSUVTKSB0ZXN0L3JlcGxheV9kcml2ZXIkKEVYRSkgLXYgPi9kZXYvbnVsbAorCSQoRklORF9MSUJSQVJJRVMpIHRlc3QvZHRsc19zcnRwX2RyaXZlciQoRVhFKSA+L2Rldi9udWxsCisJY2QgdGVzdDsgJChDUllQVE9fTElCRElSX0ZPUldBUkQpICQoYWJzcGF0aCAkKHNyY2RpcikpL3Rlc3QvcnRwd190ZXN0LnNoIC13ICQoYWJzcGF0aCAkKHNyY2RpcikpL3Rlc3Qvd29yZHMudHh0ID4vZGV2L251bGwKK2lmZXEgKDEsICQoVVNFX0VYVEVSTkFMX0NSWVBUTykpCisJY2QgdGVzdDsgJChDUllQVE9fTElCRElSX0ZPUldBUkQpICQoYWJzcGF0aCAkKHNyY2RpcikpL3Rlc3QvcnRwd190ZXN0X2djbS5zaCAtdyAkKGFic3BhdGggJChzcmNkaXIpKS90ZXN0L3dvcmRzLnR4dCA+L2Rldi9udWxsCitlbmRpZgorCUBlY2hvICJsaWJzcnRwMiB0ZXN0IGFwcGxpY2F0aW9ucyBwYXNzZWQuIgorCSQoTUFLRSkgLUMgY3J5cHRvIHJ1bnRlc3QKIAotYWxsOiB0ZXN0IHRhYmxlcworcnVudGVzdC12YWxncmluZDogdGVzdAorCUBlY2hvICJydW5uaW5nIGxpYnNydHAyIHRlc3QgYXBwbGljYXRpb25zLi4uICh2YWxncmluZCkiCisJdmFsZ3JpbmQgLS1lcnJvci1leGl0Y29kZT0xIC0tbGVhay1jaGVjaz1mdWxsIHRlc3QvdGVzdF9zcnRwJChFWEUpIC12ID4vZGV2L251bGwKKwl2YWxncmluZCAtLWVycm9yLWV4aXRjb2RlPTEgLS1sZWFrLWNoZWNrPWZ1bGwgdGVzdC9zcnRwX2RyaXZlciQoRVhFKSAtdiA+L2Rldi9udWxsCisJQGVjaG8gImxpYnNydHAyIHRlc3QgYXBwbGljYXRpb25zIHBhc3NlZC4gKHZhbGdyaW5kKSIKIAogIyBtYWtlZmlsZSB2YXJpYWJsZXMKIAotQ0MgICAgID0gQENDQAotQ0ZMQUdTID0gLVdhbGwgLU80IC1mZXhwZW5zaXZlLW9wdGltaXphdGlvbnMgLWZ1bnJvbGwtbG9vcHMKLUNERUZTICA9IC1ESEFWRV9DT05GSUdfSAotSU5DRElSID0gLUkuL2luY2x1ZGUvIC1JLi9jcnlwdG8vaW5jbHVkZQotTElCUyAgID0gQExJQlNAIC1sc3J0cCAKLUxJQkRJUiA9IC1MLgorQ0MJPSBAQ0NACitDWFgJPSBAQ1hYQAorSU5DRElSCT0gLUljcnlwdG8vaW5jbHVkZSAtSSQoc3JjZGlyKS9pbmNsdWRlIC1JJChzcmNkaXIpL2NyeXB0by9pbmNsdWRlCitERUZTCT0gQERFRlNACitDUFBGTEFHUz0gQENQUEZMQUdTQAorQ0ZMQUdTCT0gQENGTEFHU0AKK0NYWEZMQUdTPSBAQ1hYRkxBR1NACitzcnRwLWZ1enplcjogQ0ZMQUdTICs9IC1nCitzcnRwLWZ1enplcjogQ1hYRkxBR1MgKz0gLWcKK0xJQlMJPSBATElCU0AKK0xERkxBR1MJPSAtTC4gQExERkxBR1NACitDT01QSUxFID0gJChDQykgJChERUZTKSAkKElOQ0RJUikgJChDUFBGTEFHUykgJChDRkxBR1MpCitTUlRQTElCCT0gLWxzcnRwMgorUENBUF9MSUIgPSBAUENBUF9MSUJACiAKK0FSICAgICAgPSBAQVJACitSQU5MSUIJPSBAUkFOTElCQAorSU5TVEFMTAk9IEBJTlNUQUxMQAorCisjIEVYRSBkZWZpbmVzIHRoZSBzdWZmaXggb24gZXhlY3V0YWJsZXMgLSBpdCdzIC5leGUgZm9yIFdpbmRvd3MsIGFuZAorIyBudWxsIG9uIGxpbnV4LCBic2QsIGFuZCBPUyBYIGFuZCBvdGhlciBPU2VzLgorRVhFCT0gQEVYRUAKKworSE1BQ19PQkpTID0gQEhNQUNfT0JKU0AKK0FFU19JQ01fT0JKUyA9IEBBRVNfSUNNX09CSlNACisKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAorVlBBVEggPSBAc3JjZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAorbGliZGlyID0gQGxpYmRpckAKK2JpbmRpciA9IEBiaW5kaXJACisKK3BrZ2NvbmZpZ2RpciA9ICQobGliZGlyKS9wa2djb25maWcKK3BrZ2NvbmZpZ19EQVRBID0gbGlic3J0cDIucGMKKworU0hBUkVETElCVkVSU0lPTiA9IDEKK2lmbmVxICgsJChvciAkKGZpbmRzdHJpbmcgbGludXgsQGhvc3RAKSwgJChmaW5kc3RyaW5nIGdudSxAaG9zdEApKSkKK1NIQVJFRExJQl9ESVIgPSAkKGxpYmRpcikKK1NIQVJFRExJQl9MREZMQUdTID0gLXNoYXJlZCAtV2wsLXNvbmFtZSwkQAorU0hBUkVETElCU1VGRklYTk9WRVIgPSBzbworU0hBUkVETElCU1VGRklYID0gJChTSEFSRURMSUJTVUZGSVhOT1ZFUikuJChTSEFSRURMSUJWRVJTSU9OKQorZWxzZSBpZm5lcSAoLCQob3IgJChmaW5kc3RyaW5nIGN5Z3dpbixAaG9zdEApLCAkKGZpbmRzdHJpbmcgbWluZ3csQGhvc3RAKSkpCitTSEFSRURMSUJfRElSID0gJChiaW5kaXIpCitTSEFSRURMSUJfTERGTEFHUyA9IC1zaGFyZWQgLVdsLC0tb3V0LWltcGxpYixsaWJzcnRwMi5kbGwuYQorU0hBUkVETElCVkVSU0lPTiA9CitTSEFSRURMSUJTVUZGSVhOT1ZFUiA9IGRsbAorU0hBUkVETElCU1VGRklYID0gJChTSEFSRURMSUJTVUZGSVhOT1ZFUikKK2Vsc2UgaWZlcSAoZGFyd2luLCQoZmluZHN0cmluZyBkYXJ3aW4sQGhvc3RAKSkKK1NIQVJFRExJQl9ESVIgPSAkKGxpYmRpcikKK1NIQVJFRExJQl9MREZMQUdTID0gLWR5bmFtaWNsaWIgLXR3b2xldmVsX25hbWVzcGFjZSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwIFwKKwkJLWZuby1jb21tb24gLWhlYWRlcnBhZF9tYXhfaW5zdGFsbF9uYW1lcyAtaW5zdGFsbF9uYW1lICQobGliZGlyKS8kQAorU0hBUkVETElCU1VGRklYTk9WRVIgPSBkeWxpYgorU0hBUkVETElCU1VGRklYID0gJChTSEFSRURMSUJWRVJTSU9OKS4kKFNIQVJFRExJQlNVRkZJWE5PVkVSKQorZW5kaWYKIAogIyBpbXBsaWNpdCBydWxlcyBmb3Igb2JqZWN0IGZpbGVzIGFuZCB0ZXN0IGFwcHMKIAogJS5vOiAlLmMKLQkkKENDKSAkKENERUZTKSAtYyAkKENGTEFHUykgJChJTkNESVIpICQ8IC1vICRACisJJChDT01QSUxFKSAtYyAkPCAtbyAkQAogCi0lOiAlLmMgbGlic3J0cC5hIAotCSQoQ0MpICQoQ0RFRlMpICQoQ0ZMQUdTKSAkKElOQ0RJUikgJDwgLW8gJEAgJChMSUJESVIpICQoTElCUykKLQotCi0jIGxpYmNyeXB0LmEgKHRoZSBjcnlwdG8gZW5naW5lKSAKKyUkKEVYRSk6ICUuYworCSQoQ09NUElMRSkgJChMREZMQUdTKSAkPCAtbyAkQCAkKFNSVFBMSUIpICQoTElCUykKIAogY2lwaGVycyA9IGNyeXB0by9jaXBoZXIvY2lwaGVyLm8gY3J5cHRvL2NpcGhlci9udWxsX2NpcGhlci5vICAgICAgXAotICAgICAgICAgIGNyeXB0by9jaXBoZXIvYWVzLm8gY3J5cHRvL2NpcGhlci9hZXNfaWNtLm8gICAgICAgICAgICAgXAotICAgICAgICAgIGNyeXB0by9jaXBoZXIvYWVzX2NiYy5vCisJCSAgJChBRVNfSUNNX09CSlMpCiAKLWhhc2hlcyAgPSBjcnlwdG8vaGFzaC9udWxsX2F1dGgubyBjcnlwdG8vaGFzaC9zaGExLm8gXAotICAgICAgICAgIGNyeXB0by9oYXNoL2htYWMubyBjcnlwdG8vaGFzaC9hdXRoLm8gIyBjcnlwdG8vaGFzaC90bW1odjIubyAKK2hhc2hlcyAgPSBjcnlwdG8vaGFzaC9udWxsX2F1dGgubyAgY3J5cHRvL2hhc2gvYXV0aC5vICAgICAgICAgICAgXAorCSAgJChITUFDX09CSlMpCiAKIHJlcGxheSAgPSBjcnlwdG8vcmVwbGF5L3JkYi5vIGNyeXB0by9yZXBsYXkvcmRieC5vICAgICAgICAgICAgICAgXAotICAgICAgICAgIGNyeXB0by9yZXBsYXkvdXRfc2ltLm8gCisJCSAgY3J5cHRvL3JlcGxheS91dF9zaW0ubwogCiBtYXRoICAgID0gY3J5cHRvL21hdGgvZGF0YXR5cGVzLm8gY3J5cHRvL21hdGgvc3RhdC5vCiAKLXVzdCAgICAgPSBjcnlwdG8vdXN0L3VzdC5vIAotCi1ybmcgICAgID0gY3J5cHRvL3JuZy9yYW5kX3NvdXJjZS5vIGNyeXB0by9ybmcvcHJuZy5vIGNyeXB0by9ybmcvY3RyX3BybmcubwordXN0ICAgICA9IGNyeXB0by91c3QvdXN0Lm8KIAogZXJyICAgICA9IGNyeXB0by9rZXJuZWwvZXJyLm8KIAoga2VybmVsICA9IGNyeXB0by9rZXJuZWwvY3J5cHRvX2tlcm5lbC5vICBjcnlwdG8va2VybmVsL2FsbG9jLm8gICBcCi0gICAgICAgICAgY3J5cHRvL2tlcm5lbC9rZXkubyAkKHJuZykgJChlcnIpICMgJCh1c3QpIAorCQkgIGNyeXB0by9rZXJuZWwva2V5Lm8gJChlcnIpICMgJCh1c3QpCiAKLWNyeXB0b2JqID0gICQoY2lwaGVycykgJChoYXNoZXMpICQobWF0aCkgJChzdGF0KSAkKGtlcm5lbCkgJChyZXBsYXkpCitjcnlwdG9iaiA9ICAkKGNpcGhlcnMpICQoaGFzaGVzKSAkKG1hdGgpICQoa2VybmVsKSAkKHJlcGxheSkKIAotYWVzaWNtb2JqID0gJChhZXNpY20pICAkKHJuZykKKyMgbGlic3J0cDIuYSAoaW1wbGVtZW50cyBzcnRwIHByb2Nlc3NpbmcpCiAKLSMgZ2RvaSBpcyB0aGUgZ3JvdXAgZG9tYWluIG9mIGludGVycHJldGF0aW9uIGZvciBpc2FrbXAsIGEgZ3JvdXAga2V5Ci0jIG1hbmFnZW1lbnQgc3lzdGVtIHdoaWNoIGNhbiBwcm92aWRlIGtleXMgZm9yIHNydHAKK3NydHBvYmogPSBzcnRwL3NydHAubyBzcnRwL2VrdC5vCiAKLWdkb2kJPSBAR0RPSV9PQkpTQAorbGlic3J0cDIuYTogJChzcnRwb2JqKSAkKGNyeXB0b2JqKSAkKGdkb2kpCisJJChBUikgY3IgbGlic3J0cDIuYSAkXgorCSQoUkFOTElCKSBsaWJzcnRwMi5hCiAKLSMgbGlic3J0cC5hIChpbXBsZW1lbnRzIHNydHAgcHJvY2Vzc2luZykKK2xpYnNydHAyLiQoU0hBUkVETElCU1VGRklYKTogJChzcnRwb2JqKSAkKGNyeXB0b2JqKSAkKGdkb2kpCisJJChDQykgLXNoYXJlZCAtbyAkQCAkKFNIQVJFRExJQl9MREZMQUdTKSBcCisJCQkJJF4gJChMREZMQUdTKSAkKExJQlMpCisJaWYgWyAtbiAiJChTSEFSRURMSUJWRVJTSU9OKSIgXTsgdGhlbiBcCisJCWxuIC1zZm4gJEAgbGlic3J0cDIuJChTSEFSRURMSUJTVUZGSVhOT1ZFUik7IFwKKwlmaQogCi1zcnRwb2JqID0gc3J0cC9zcnRwLm8gCitzaGFyZWRfbGlicmFyeTogbGlic3J0cDIuJChTSEFSRURMSUJTVUZGSVgpCiAKLWxpYnNydHAuYTogJChzcnRwb2JqKSAkKGNyeXB0b2JqKSAkKGdkb2kpCi0JYXIgY3IgbGlic3J0cC5hICQoc3J0cG9iaikgJChjcnlwdG9iaikgJChnZG9pKQotCXJhbmxpYiBsaWJzcnRwLmEKK2xpYnNydHAyLnNvOiAkKHNydHBvYmopICQoY3J5cHRvYmopCisJJChDQykgLXNoYXJlZCAtV2wsLXNvbmFtZSxsaWJzcnRwMi5zbyBcCisJCS1vIGxpYnNydHAyLnNvICReICQoTERGTEFHUykKIAotIyBsaWJhZXNpY20uYSBwcm92aWRlcyBhbiBpY20gaW1wbGVtZW50YXRpb24gdXNlZCBieSBtcGVnNGlwCisjIHRlc3QgYXBwbGljYXRpb25zCitpZm5lcSAoMSwgJChVU0VfRVhURVJOQUxfQ1JZUFRPKSkKK0FFU19DQUxDID0gY3J5cHRvL3Rlc3QvYWVzX2NhbGMkKEVYRSkKK2VuZGlmCiAKLWxpYmFlc2ljbS5hOiAkKGFlc2ljbW9iaikKLQlhciBjciBsaWJhZXNpY20uYSAkKGFlc2ljbW9iaikKLQlyYW5saWIgbGliYWVzaWNtLmEKK2NyeXB0b190ZXN0YXBwID0gJChBRVNfQ0FMQykgY3J5cHRvL3Rlc3QvY2lwaGVyX2RyaXZlciQoRVhFKSBcCisJY3J5cHRvL3Rlc3QvZGF0YXR5cGVzX2RyaXZlciQoRVhFKSBjcnlwdG8vdGVzdC9rZXJuZWxfZHJpdmVyJChFWEUpIFwKKwljcnlwdG8vdGVzdC9zaGExX2RyaXZlciQoRVhFKSBjcnlwdG8vdGVzdC9zdGF0X2RyaXZlciQoRVhFKSBcCisJY3J5cHRvL3Rlc3QvZW52JChFWEUpCiAKLSMgbGliY3J5cHRvbWF0aC5hIGNvbnRhaW5zIGdlbmVyYWwtcHVycG9zZSByb3V0aW5lcyB0aGF0IGFyZSB1c2VkIHRvCi0jIGdlbmVyYXRlIHRhYmxlcyBhbmQgdmVyaWZ5IGNyeXB0b2FsZ29yaXRobSBpbXBsZW1lbnRhdGlvbnMgLSB0aGlzCi0jIGxpYnJhcnkgaXMgbm90IG1lYW50IHRvIGJlIGluY2x1ZGVkIGluIHByb2R1Y3Rpb24gY29kZQordGVzdGFwcCA9ICQoY3J5cHRvX3Rlc3RhcHApIHRlc3Qvc3J0cF9kcml2ZXIkKEVYRSkgdGVzdC9yZXBsYXlfZHJpdmVyJChFWEUpIFwKKwkgIHRlc3Qvcm9jX2RyaXZlciQoRVhFKSB0ZXN0L3JkYnhfZHJpdmVyJChFWEUpIHRlc3QvcnRwdyQoRVhFKSBcCisJICB0ZXN0L2R0bHNfc3J0cF9kcml2ZXIkKEVYRSkgdGVzdC90ZXN0X3NydHAkKEVYRSkKIAotY3J5cHRvbWF0aCA9IGNyeXB0by9tYXRoL21hdGgubyBjcnlwdG8vbWF0aC9nZjJfOC5vIGNyeXB0by9tYXRoL2dmMl8xMjgubworaWZlcSAoMSwgJChIQVZFX1BDQVApKQordGVzdGFwcCArPSB0ZXN0L3J0cF9kZWNvZGVyJChFWEUpCitlbmRpZgogCi1saWJjcnlwdG9tYXRoLmE6ICQoY3J5cHRvbWF0aCkKLQlhciBjciBsaWJjcnlwdG9tYXRoLmEgJChjcnlwdG9tYXRoKQotCXJhbmxpYiBsaWJjcnlwdG9tYXRoLmEKKyQodGVzdGFwcCk6IGxpYnNydHAyLmEKIAordGVzdC9ydHB3JChFWEUpOiB0ZXN0L3J0cHcuYyB0ZXN0L3J0cC5jIHRlc3QvdXRpbC5jIHRlc3QvZ2V0b3B0X3MuYyBcCisJCWNyeXB0by9tYXRoL2RhdGF0eXBlcy5jCisJJChDT01QSUxFKSAkKExERkxBR1MpIC1vICRAICReICQoTElCUykgJChTUlRQTElCKQogCi0jIHRlc3QgYXBwbGljYXRpb25zIAoraWZlcSAoMSwgJChIQVZFX1BDQVApKQordGVzdC9ydHBfZGVjb2RlciQoRVhFKTogdGVzdC9ydHBfZGVjb2Rlci5jIHRlc3QvcnRwLmMgdGVzdC91dGlsLmMgdGVzdC9nZXRvcHRfcy5jIFwKKwkJY3J5cHRvL21hdGgvZGF0YXR5cGVzLmMKKwkkKENPTVBJTEUpICQoTERGTEFHUykgLW8gJEAgJF4gJChQQ0FQX0xJQikgJChMSUJTKSAkKFNSVFBMSUIpCitlbmRpZgogCi10ZXN0YXBwID0gdGVzdC9jaXBoZXJfZHJpdmVyIHRlc3QvZGF0YXR5cGVzX2RyaXZlciB0ZXN0L3NydHBfZHJpdmVyIFwKLSAgICAgICAgICB0ZXN0L3JlcGxheV9kcml2ZXIgdGVzdC9yb2NfZHJpdmVyIHRlc3QvcmRieF9kcml2ZXIgICAgICAgXAotICAgICAgICAgIHRlc3Qvc3RhdF9kcml2ZXIgdGVzdC9zaGExX2RyaXZlciB0ZXN0L2tlcm5lbF9kcml2ZXIgICAgICBcCi0gICAgICAgICAgdGVzdC9hZXNfY2FsYyB0ZXN0L3JhbmRfZ2VuICMgdGVzdC91c3RfZHJpdmVyIEBHRE9JX0FQUFNACi0jICAgICAgICAgIHRlc3QvYXV0aF9kcml2ZXIgdGVzdC9ydHB3ICAgICAgICAgICAgICAgICBcCitjcnlwdG8vdGVzdC9hZXNfY2FsYyQoRVhFKTogY3J5cHRvL3Rlc3QvYWVzX2NhbGMuYyB0ZXN0L3V0aWwuYworCSQoQ09NUElMRSkgLUkkKHNyY2RpcikvdGVzdCAkKExERkxBR1MpIC1vICRAICReICQoTElCUykgJChTUlRQTElCKQogCi10ZXN0L3J0cHc6IHRlc3QvcnRwdy5jIHRlc3QvcnRwLmMKLQkkKENDKSAkKENERUZTKSAkKENGTEFHUykgJChJTkNESVIpIC1vIHRlc3QvcnRwdyB0ZXN0L3J0cHcuYyB0ZXN0L3J0cC5jICQoTElCRElSKSAkKExJQlMpCit0ZXN0L3Rlc3Rfc3J0cCQoRVhFKTogdGVzdC90ZXN0X3NydHAuYworCSQoQ09NUElMRSkgLUkkKHNyY2RpcikvdGVzdCAkKExERkxBR1MpIC1vICRAICReICQoTElCUykgJChTUlRQTElCKQorCitjcnlwdG8vdGVzdC9kYXRhdHlwZXNfZHJpdmVyJChFWEUpOiBjcnlwdG8vdGVzdC9kYXRhdHlwZXNfZHJpdmVyLmMgdGVzdC91dGlsLmMKKwkkKENPTVBJTEUpIC1JJChzcmNkaXIpL3Rlc3QgJChMREZMQUdTKSAtbyAkQCAkXiAkKExJQlMpICQoU1JUUExJQikKKworY3J5cHRvL3Rlc3Qvc2hhMV9kcml2ZXIkKEVYRSk6IGNyeXB0by90ZXN0L3NoYTFfZHJpdmVyLmMgdGVzdC91dGlsLmMKKwkkKENPTVBJTEUpIC1JJChzcmNkaXIpL3Rlc3QgJChMREZMQUdTKSAtbyAkQCAkXiAkKExJQlMpICQoU1JUUExJQikKKwordGVzdC9zcnRwX2RyaXZlciQoRVhFKTogdGVzdC9zcnRwX2RyaXZlci5jIHRlc3QvdXRpbC5jIHRlc3QvZ2V0b3B0X3MuYworCSQoQ09NUElMRSkgJChMREZMQUdTKSAtbyAkQCAkXiAkKExJQlMpICQoU1JUUExJQikKKwordGVzdC9yZGJ4X2RyaXZlciQoRVhFKTogdGVzdC9yZGJ4X2RyaXZlci5jIHRlc3QvZ2V0b3B0X3MuYworCSQoQ09NUElMRSkgJChMREZMQUdTKSAtbyAkQCAkXiAkKExJQlMpICQoU1JUUExJQikKKwordGVzdC9kdGxzX3NydHBfZHJpdmVyJChFWEUpOiB0ZXN0L2R0bHNfc3J0cF9kcml2ZXIuYyB0ZXN0L2dldG9wdF9zLmMgdGVzdC91dGlsLmMKKwkkKENPTVBJTEUpICQoTERGTEFHUykgLW8gJEAgJF4gJChMSUJTKSAkKFNSVFBMSUIpCisKK2NyeXB0by90ZXN0L2NpcGhlcl9kcml2ZXIkKEVYRSk6IGNyeXB0by90ZXN0L2NpcGhlcl9kcml2ZXIuYyB0ZXN0L2dldG9wdF9zLmMKKwkkKENPTVBJTEUpICQoTERGTEFHUykgLW8gJEAgJF4gJChMSUJTKSAkKFNSVFBMSUIpCisKK2NyeXB0by90ZXN0L2tlcm5lbF9kcml2ZXIkKEVYRSk6IGNyeXB0by90ZXN0L2tlcm5lbF9kcml2ZXIuYyB0ZXN0L2dldG9wdF9zLmMKKwkkKENPTVBJTEUpICQoTERGTEFHUykgLW8gJEAgJF4gJChMSUJTKSAkKFNSVFBMSUIpCisKK2NyeXB0by90ZXN0L2VudiQoRVhFKTogY3J5cHRvL3Rlc3QvZW52LmMgdGVzdC9nZXRvcHRfcy5jCisJJChDT01QSUxFKSAkKExERkxBR1MpIC1vICRAICReICQoTElCUykgJChTUlRQTElCKQogCiB0ZXN0OiAkKHRlc3RhcHApCisJQGVjaG8gIkJ1aWxkIGRvbmUuIFBsZWFzZSBydW4gJyQoTUFLRSkgcnVudGVzdCcgdG8gcnVuIHNlbGYgdGVzdHMuIgogCiBtZW10ZXN0OiB0ZXN0L3NydHBfZHJpdmVyCiAJQHRlc3Qvc3J0cF9kcml2ZXIgLXYgLWQgImFsbG9jIiA+IHRtcApAQCAtMTI0LDE3ICsyNDcsNiBAQAogCUBlY2hvICJwYXNzZWQgKHNhbWUgbnVtYmVyIG9mIGFsbG9jKCkgYW5kIGRlYWxsb2MoKSBjYWxscyBmb3VuZCkiCiAJQHJtIGZyZWVkIGFsbG9jYXRlZCB0bXAKIAotIyB0YWJsZXNfYXBwcyBhcmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGFibGVzIHVzZWQgaW4gdGhlIGNyeXB0bwotIyBpbXBsZW1lbnRhdGlvbnM7IHRoZXNlIG5lZWQgb25seSBiZSBnZW5lcmF0ZWQgZHVyaW5nIHBvcnRpbmcsIG5vdAotIyBmb3IgYnVpbGRpbmcgbGlic3J0cCBvciB0aGUgdGVzdCBhcHBsaWNhdGlvbnMKLQotdGFibGVfYXBwcyA9IHRhYmxlcy9hZXNfdGFibGVzIHRhYmxlcy9nZl8xMjhfdGFibGVzCi0KLSMgaW4gdGhlIHRhYmxlcy8gc3ViZGlyZWN0b3J5LCB3ZSB1c2UgbGliY3J5cHRvbWF0aCBpbnN0ZWFkIG9mIGxpYnNydHAKLQotdGFibGVzLyU6IHRhYmxlcy8lLmMgbGliY3J5cHRvbWF0aC5hIAotCSQoQ0MpICQoQ0RFRlMpICQoQ0ZMQUdTKSAkKElOQ0RJUikgJDwgLW8gJEAgJChMSUJESVIpIGxpYmNyeXB0b21hdGguYQotCiAjIHRoZSB0YXJnZXQgJ3Bsb3QnIHJ1bnMgdGhlIHRpbWluZyB0ZXN0ICh0ZXN0L3NydHBfZHJpdmVyIC10KSB0aGVuCiAjIHVzZXMgZ251cGxvdCB0byBwcm9kdWNlIHBsb3RzIG9mIHRoZSByZXN1bHRzIC0gc2VlIHRoZSBzY3JpcHQgZmlsZQogIyAndGltaW5nJwpAQCAtMTQ2LDY1ICsyNTgsNzQgQEAKICMgYm9va2tlZXBpbmc6IHRhZ3MsIGNsZWFuLCBhbmQgZGlzdHJpYnV0aW9uCiAKIHRhZ3M6Ci0JZXRhZ3MgKi8qLltjaF0gKi8qLyouW2NoXSAKKwlldGFncyAqLyouW2NoXSAqLyovKi5bY2hdCiAKIAotIyBkb2N1bWVudGF0aW9uIC0gdGhlIHRhcmdldCBsaWJzcnRwZG9jIGJ1aWxkcyBhIFBERiBmaWxlIGRvY3VtZW50aW5nCi0jIGxpYnNydHAKKyMgZG9jdW1lbnRhdGlvbiAtIHRoZSB0YXJnZXQgbGlic3J0cDJkb2MgYnVpbGRzIGh0bWwgZG9jdW1lbnRhdGlvbgogCi1saWJzcnRwZG9jOgotCWNkIGRvYzsgbWFrZQorbGlic3J0cDJkb2M6CisJJChNQUtFKSAtQyBkb2MKIAotIyBFWEUgZGVmaW5lcyB0aGUgc3VmZml4IG9uIGV4ZWN1dGFibGVzIC0gaXQncyAuZXhlIGZvciBjeWd3aW4sIGFuZAotIyBudWxsIG9uIGxpbnV4LCBic2QsIGFuZCBPUyBYIGFuZCBvdGhlciBPU2VzLiAgd2UgZGVmaW5lIHRoaXMgc28gdGhhdAotIyBgbWFrZSBjbGVhbmAgd2lsbCB3b3JrIG9uIHRoZSBjeWd3aW4gcGxhdGZvcm0KKyMgZnV6emVyCiAKLUVYRSA9IEBFWEVACitzcnRwLWZ1enplcjogbGlic3J0cDIuYQorCSQoTUFLRSkgLUMgZnV6emVyCiAKLS5QSE9OWTogY2xlYW4gc3VwZXJjbGVhbiBpbnN0YWxsCisuUEhPTlk6IGNsZWFuIHN1cGVyY2xlYW4gZGlzdGNsZWFuIGluc3RhbGwKIAogaW5zdGFsbDoKLQlpZiBbIC1kIC91c3IvbG9jYWwvaW5jbHVkZS9zcnRwIF07IHRoZW4gXAotCSAgIGVjaG8gInlvdSBzaG91bGQgcnVuICdtYWtlIHVuaW5zdGFsbCcgZmlyc3QiOyBleGl0IDE7ICBcCisJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9zcnRwMgorCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQobGliZGlyKQorCWNwICQoc3JjZGlyKS9pbmNsdWRlL3NydHAuaCAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9zcnRwMgorCWNwICQoc3JjZGlyKS9jcnlwdG8vaW5jbHVkZS9jaXBoZXIuaCAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9zcnRwMgorCWNwICQoc3JjZGlyKS9jcnlwdG8vaW5jbHVkZS9hdXRoLmggJChERVNURElSKSQoaW5jbHVkZWRpcikvc3J0cDIKKwljcCAkKHNyY2RpcikvY3J5cHRvL2luY2x1ZGUvY3J5cHRvX3R5cGVzLmggJChERVNURElSKSQoaW5jbHVkZWRpcikvc3J0cDIKKwlpZiBbIC1mIGxpYnNydHAyLmEgXTsgdGhlbiBjcCBsaWJzcnRwMi5hICQoREVTVERJUikkKGxpYmRpcikvOyBmaQorCWlmIFsgLWYgbGlic3J0cDIuZGxsLmEgXTsgdGhlbiBjcCBsaWJzcnRwMi5kbGwuYSAkKERFU1RESVIpJChsaWJkaXIpLzsgZmkKKwlpZiBbIC1mIGxpYnNydHAyLiQoU0hBUkVETElCU1VGRklYKSBdOyB0aGVuIFwKKwkJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJChTSEFSRURMSUJfRElSKTsgXAorCQljcCBsaWJzcnRwMi4kKFNIQVJFRExJQlNVRkZJWCkgJChERVNURElSKSQoU0hBUkVETElCX0RJUikvOyBcCisJCWNwIGxpYnNydHAyLiQoU0hBUkVETElCU1VGRklYTk9WRVIpICQoREVTVERJUikkKFNIQVJFRExJQl9ESVIpLzsgXAorCQlpZiBbIC1uICIkKFNIQVJFRExJQlZFUlNJT04pIiBdOyB0aGVuIFwKKwkJCWxuIC1zZm4gbGlic3J0cDIuJChTSEFSRURMSUJTVUZGSVgpICQoREVTVERJUikkKFNIQVJFRExJQl9ESVIpL2xpYnNydHAyLiQoU0hBUkVETElCU1VGRklYTk9WRVIpOyBcCisJCWZpOyBcCiAJZmkKLQlta2RpciAvdXNyL2xvY2FsL2luY2x1ZGUvc3J0cAotCWNwIGluY2x1ZGUvKi5oIC91c3IvbG9jYWwvaW5jbHVkZS9zcnRwICAKLQljcCBjcnlwdG8vaW5jbHVkZS8qLmggL3Vzci9sb2NhbC9pbmNsdWRlL3NydHAKLQljcCBsaWJzcnRwLmEgL3Vzci9sb2NhbC9saWIvCi0JaWYgWyAtZiBsaWJhZXNpY20uYSBdOyB0aGVuIGNwIGxpYmFlc2ljbS5hIC91c3IvbG9jYWwvbGliLzsgZmkgCisJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJChwa2djb25maWdkaXIpCisJY3AgJCh0b3BfYnVpbGRkaXIpLyQocGtnY29uZmlnX0RBVEEpICQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikvCiAKIHVuaW5zdGFsbDoKLQlybSAtcmYgL3Vzci9sb2NhbC9pbmNsdWRlL3NydHAKLQlybSAtcmYgL3Vzci9sb2NhbC9saWIvbGlic3J0cC5hCi0JaWYgWyAtZiBsaWJhZXNpY20uYSBdOyB0aGVuIHJtIC1yZiAvdXNyL2xvY2FsL2xpYi9saWJhZXNpY20uYTsgZmkKKwlybSAtZiAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9zcnRwMi8qLmgKKwlybSAtZiAkKERFU1RESVIpJChsaWJkaXIpL2xpYnNydHAyLioKKwktcm1kaXIgJChERVNURElSKSQoaW5jbHVkZWRpcikvc3J0cDIKKwlybSAtZiAkKERFU1RESVIpJChwa2djb25maWdkaXIpLyQocGtnY29uZmlnX0RBVEEpCiAKIGNsZWFuOgotCXJtIC1yZiAkKGNyeXB0b2JqKSAkKHNydHBvYmopICQoY3J5cHRvbWF0aCkgJCh0YWJsZV9hcHBzKSBUQUdTIFwKLSAgICAgICAgbGliY3J5cHRvbWF0aC5hIGxpYnNydHAuYSBsaWJhZXNpY20uYSBjb3JlICouY29yZSB0ZXN0L2NvcmUKKwlybSAtcmYgJChjcnlwdG9iaikgJChzcnRwb2JqKSBUQUdTIFwKKwkJbGlic3J0cDIuYSBsaWJzcnRwMi5zbyBsaWJzcnRwMi5kbGwuYSBjb3JlICouY29yZSB0ZXN0L2NvcmUKIAlmb3IgYSBpbiAqICovKiAqLyovKjsgZG8JCQlcCi0gICAgICAgICAgICAgIGlmIFsgLWYgIiQkYX4iIF0gOyB0aGVuIHJtIC1mICQkYX47IGZpOwlcCi0gICAgICAgIGRvbmU7Ci0JZm9yIGEgaW4gJCh0ZXN0YXBwKSAkKHRhYmxlX2FwcHMpOyBkbyBybSAtcmYgJCRhJChFWEUpOyBkb25lCi0Jcm0gLXJmICoucGljdCAqLmpwZyAqLmRhdCAKKwkJCSAgaWYgWyAtZiAiJCRhfiIgXSA7IHRoZW4gcm0gLWYgJCRhfjsgZmk7CVwKKwkJZG9uZTsKKwlmb3IgYSBpbiAkKHRlc3RhcHApOyBkbyBybSAtcmYgJCRhJChFWEUpOyBkb25lCisJcm0gLXJmICoucGljdCAqLmpwZyAqLmRhdAogCXJtIC1yZiBmcmVlZCBhbGxvY2F0ZWQgdG1wCi0JY2QgZG9jOyBtYWtlIGNsZWFuCi0JY2QgY3J5cHRvOyBtYWtlIGNsZWFuCi0KKwkkKE1BS0UpIC1DIGRvYyBjbGVhbgorCSQoTUFLRSkgLUMgZnV6emVyIGNsZWFuCiAKIHN1cGVyY2xlYW46IGNsZWFuCi0Jcm0gLXJmIGluY2x1ZGUvY29uZmlnLmggY29uZmlnLmxvZyBjb25maWcuY2FjaGUgY29uZmlnLnN0YXR1cyBcCi0gICAgICAgICAgICAgICBNYWtlZmlsZSAuZ2RiX2hpc3RvcnkgdGVzdC8uZ2RiX2hpc3RvcnkgLkRTX1N0b3JlCisJcm0gLXJmIGNyeXB0by9pbmNsdWRlL2NvbmZpZy5oIGNvbmZpZy5sb2cgY29uZmlnLmNhY2hlIGNvbmZpZy5zdGF0dXMgXAorCQkJICAgTWFrZWZpbGUgY3J5cHRvL01ha2VmaWxlIGRvYy9NYWtlZmlsZSBcCisJCQkgICAuZ2RiX2hpc3RvcnkgdGVzdC8uZ2RiX2hpc3RvcnkgLkRTX1N0b3JlCiAJcm0gLXJmIGF1dG9tNHRlLmNhY2hlCiAKLWRpc3RuYW1lID0gc3J0cC0kKHNoZWxsIGNhdCBWRVJTSU9OKQorZGlzdGNsZWFuOiBzdXBlcmNsZWFuCiAKLWRpc3RyaWJ1dGlvbjogc3VwZXJjbGVhbgorZGlzdG5hbWUgPSBsaWJzcnRwLSQoc2hlbGwgY2F0IFZFUlNJT04pCisKK2Rpc3RyaWJ1dGlvbjogcnVudGVzdCBzdXBlcmNsZWFuCiAJaWYgISBbIC1mIFZFUlNJT04gXTsgdGhlbiBleGl0IDE7IGZpCiAJaWYgWyAtZiAuLi8kKGRpc3RuYW1lKS50Z3ogXTsgdGhlbiAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgbXYgLi4vJChkaXN0bmFtZSkudGd6IC4uLyQoZGlzdG5hbWUpLnRnei5iYWs7IFwKLSAgICAgICAgZmkKLQljZCAuLjsgdGFyIGN2emYgJChkaXN0bmFtZSkudGd6IHNydHAKKwkJICAgbXYgLi4vJChkaXN0bmFtZSkudGd6IC4uLyQoZGlzdG5hbWUpLnRnei5iYWs7IFwKKwkJZmkKKwljZCAuLjsgdGFyIGN2emYgJChkaXN0bmFtZSkudGd6IGxpYnNydHAKIAotIyBFT0YgCi0KLQorIyBFT0YKZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjZjOGYzZi4uMDAwMDAwMAotLS0gYS9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotU2VjdXJlIFJUUCAoU1JUUCkgYW5kIFVTVCBSZWZlcmVuY2UgSW1wbGVtZW50YXRpb25zCi1EYXZpZCBBLiBNY0dyZXcKLUNpc2NvIFN5c3RlbXMsIEluYy4KLW1jZ3Jld0BjaXNjby5jb20KLQotCi1UaGlzIHBhY2thZ2UgcHJvdmlkZXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFNlY3VyZSBSZWFsLXRpbWUKLVRyYW5zcG9ydCBQcm90b2NvbCAoU1JUUCksIHRoZSBVbml2ZXJzYWwgU2VjdXJpdHkgVHJhbnNmb3JtIChVU1QpLCBhbmQKLWEgc3VwcG9ydGluZyBjcnlwdG9ncmFwaGljIGtlcm5lbC4gIFRoZXNlIG1lY2hhbmlzbXMgYXJlIGRvY3VtZW50ZWQgaW4KLXRoZSBJbnRlcm5ldCBEcmFmdHMgaW4gdGhlIGRvYy8gc3ViZGlyZWN0b3J5LiAgVGhlIFNSVFAgQVBJIGlzCi1kb2N1bWVudGVkIGluIGluY2x1ZGUvc3J0cC5oLCBhbmQgdGhlIGxpYnJhcnkgaXMgaW4gbGlic3J0cC5hIChhZnRlcgotY29tcGlsYXRpb24pLgotCi0KLUluc3RhbGxhdGlvbjoKLQotLi9jb25maWd1cmUgWyBvcHRpb25zIF0gICAgICAgIyBHTlUgYXV0b2NvbmYgc2NyaXB0IAotbWFrZSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvciBnbWFrZSBpZiBuZWVkZWQ7IHVzZSBHTlUgbWFrZQotCi1UaGUgY29uZmlndXJlIHNjcmlwdCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKLQotICAgLS1oZWxwICAgICAgICAgICAgICBwcm92aWRlcyBhIHVzYWdlIHN1bW1hcnkKLSAgIC0tZGlzYWJsZS1kZWJ1ZyAgICAgY29tcGlsZSB3aXRob3V0IHRoZSBydW50aW1lIGRlYnVnZ2luZyBzeXN0ZW0KLSAgIC0tZW5hYmxlLXN5c2xvZyAgICAgdXNlIHN5c2xvZyBmb3IgZXJyb3IgcmVwb3J0aW5nCi0gICAtLWRpc2FibGUtc3Rkb3V0ICAgIHVzZSBzdGRvdXQgZm9yIGVycm9yIHJlcG9ydGluZwotICAgLS1lbmFibGUtY29uc29sZSAgICB1c2UgL2Rldi9jb25zb2xlIGZvciBlcnJvciByZXBvcnRpbmcKLSAgIC0tZ2RvaSAgICAgICAgICAgICAgdXNlIEdET0kga2V5IG1hbmFnZW1lbnQgKGRpc2FibGVkIGF0IHByZXNlbnQpCi0KLUJ5IGRlZmF1bHQsIGRlYmJ1Z2luZyBpcyBlbmFibGVkIGFuZCBzdGRvdXQgaXMgdXNlZCBmb3IgZGVidWdnaW5nLgotWW91IGNhbiB1c2UgdGhlIGFib3ZlIGNvbmZpZ3VyZSBvcHRpb25zIHRvIGhhdmUgdGhlIGRlYnVnZ2luZyBvdXRwdXQKLXNlbnQgdG8gc3lzbG9nIG9yIHRoZSBzeXN0ZW0gY29uc29sZS4gIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gZGVmaW5lCi1FUlJfUkVQT1JUSU5HX0ZJTEUgaW4gaW5jbHVkZS9jb25mLmggdG8gYmUgYW55IG90aGVyIGZpbGUgdGhhdCBjYW4gYmUKLW9wZW5lZCBieSBsaWJTUlRQLCBhbmQgZGVidWcgbWVzc2FnZXMgd2lsbCBiZSBzZW50IHRvIGl0LiAgCi0KLVRoaXMgcGFja2FnZSBoYXMgYmVlbiB0ZXN0ZWQgb24gTWFjIE9TIFggKHBvd2VycGMtYXBwbGUtZGFyd2luMS40KSwKLUN5Z3dpbiAoaTY4Ni1wYy1jeWd3aW4pLCBhbmQgU3BhcmMgKHNwYXJjLXN1bi1zb2xhcmlzMi42KS4gIFByZXZpb3VzCi12ZXJzaW9ucyBoYXZlIGJlZW4gdGVzdGVkIG9uIExpbnV4IGFuZCBPcGVuQlNEIG9uIGJvdGggeDg2IGFuZCBzcGFyYwotcGxhdGZvcm1zLgotCi1BIHF1aWNrIHRvdXIgb2YgdGhpcyBwYWNrYWdlOgotCi1NYWtlZmlsZQkJdGFyZ2V0czogYWxsLCBjbGVhbiwgLi4uCi1SRUFETUUJCQl0aGlzIGZpbGUKLUNIQU5HRVMgICAgICAgICAgICAgICAgIGNoYW5nZSBsb2cgCi1WRVJTSU9OCQkJdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBwYWNrYWdlCi1MSUNFTlNFICAgICAgICAgICAgICAgICBsZWdhbCBkZXRhaWxzIChpdCdzIGEgQlNELWxpa2UgbGljZW5zZSkKLWNyeXB0by9jaXBoZXJzLwkJY2lwaGVycyAobnVsbCwgYWVzX2ljbSwgLi4uKQotY3J5cHRvL21hdGgvCQljcnlwdG8gbWF0aCByb3V0aW5lcwotY3J5cHRvL2hhc2gvICAgICAgICAgICAgY3J5cHRvIGhhc2hpbmcgKGhtYWMsIHRtbWh2MiwgLi4uKQotY3J5cHRvL3JlcGxheS8JCXJlcGxheSBwcm90ZWN0aW9uCi1kb2MvCQkJZG9jdW1lbnRhdGlvbjogcmZjcywgYXBpcywgYW5kIHN1Y2hsaWtlCi1pbmNsdWRlLwkJaW5jbHVkZSBmaWxlcyBmb3IgYWxsIGNvZGUgaW4gZGlzdHJpYnV0aW9uCi1zcnRwLwkJCXNlY3VyZSByZWFsLXRpbWUgdHJhbnNwb3J0IHByb3RvY29sIGltcGxlbWVudGF0aW9uCi10YWJsZXMvICAgICAgICAgICAgICAgICBhcHBzIGZvciBnZW5lcmF0aW5nIHRhYmxlcyAodXNlZnVsIGluIHBvcnRpbmcpCi10ZXN0LwkJCXRlc3QgZHJpdmVycyAKLQotCi1BcHBsaWNhdGlvbnMKLQotICBTZXZlcmFsIHRlc3QgZHJpdmVycyBhbmQgYSBzaW1wbGUgYW5kIHBvcnRhYmxlIHNydHAgYXBwbGljYXRpb24KLSAgYXJlIGluY2x1ZGVkIGluIHRoZSB0ZXN0LyBzdWJkaXJlY3RvcnkuCi0KLSAgdGVzdCBkcml2ZXIJZnVuY3Rpb24gdGVzdGVkCQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIGtlcm5lbF9kcml2ZXIgY3J5cHRvIGtlcm5lbCAoY2lwaGVycywgYXV0aCBmdW5jcywgcm5nKQotICBzcnRwX2RyaXZlcglzcnRwIGluLW1lbW9yeSB0ZXN0cyAoZG9lcyBub3QgdXNlIHRoZSBuZXR3b3JrKQotICByZGJ4X2RyaXZlcglyZGJ4IChleHRlbmRlZCByZXBsYXkgZGF0YWJhc2UpCi0gIHJvY19kcml2ZXIJZXh0ZW5kZWQgc2VxdWVuY2UgbnVtYmVyIGZ1bmN0aW9ucyAKLSAgcmVwbGF5X2RyaXZlcglyZXBsYXkgZGF0YWJhc2UgKG4uYi4gbm90IHVzZWQgaW4gbGlic3J0cCkKLSAgY2lwaGVyX2RyaXZlcgljaXBoZXJzIAotICBhdXRoX2RyaXZlcgloYXNoIGZ1bmN0aW9ucyAKLQotICBUaGUgYXBwIHJ0cHcgaXMgYSBzaW1wbGUgcnRwIGFwcGxpY2F0aW9uIHdoaWNoIHJlYWRzIHdvcmRzIGZyb20KLSAgL3Vzci9kaWN0L3dvcmRzIGFuZCB0aGVuIHNlbmRzIHRoZW0gb3V0IG9uZSBhdCBhIHRpbWUgdXNpbmcgW3NdcnRwLgotICBNYW51YWwgc3J0cCBrZXlpbmcgdXNlcyB0aGUgLWsgb3B0aW9uOyBhdXRvbWF0ZWQga2V5IG1hbmFnZW1lbnQKLSAgdXNpbmcgZ2RvaSB3aWxsIGJlIGFkZGVkIGxhdGVyLgotCi11c2FnZTogcnRwdyBbLWQgPGRlYnVnPl0qIFstayA8a2V5PiBbLWFdWy1lXV0gWy1zIHwgLXJdIGRlc3RfaXAgZGVzdF9wb3J0Ci1vciAgICAgcnRwdyAtbAotCi0gIEVpdGhlciB0aGUgLXMgKHNlbmRlcikgb3IgLXIgKHJlY2VpdmVyKSBvcHRpb24gbXVzdCBiZSBjaG9zZW4uCi0KLSAgVGhlIHZhbHVlcyBkZXN0X2lwLCBkZXN0X3BvcnQgYXJlIHRoZSBpcCBhZGRyZXNzIGFuZCB1ZHAgcG9ydCB0bwotICB3aGljaCB0aGUgZGljdGlvbmFyeSB3aWxsIGJlIHNlbnQsIHJlc3BlY3RpdmVseS4gIAotCi0gIG9wdGlvbnM6Ci0KLSAgLXMJCShzKXJ0cCBzZW5kZXIgLSBjYXVzZXMgYXBwIHRvIHNlbmQgd29yZHMKLQotICAtcgkJKHMpcnRwIHJlY2VpdmUgLSBjYXVzZXMgYXBwIHRvIHJlY2V2ZSB3b3JkcwotCi0gIC1rIDxrZXk+ICAgICAgdXNlIHNydHAgbWFzdGVyIGtleSA8a2V5Piwgd2hlcmUgdGhlCi0JCWtleSBpcyBhIGhleGFkZWNpbWFsIHZhbHVlICh3aXRob3V0IHRoZQotICAgICAgICAgICAgICAgIGxlYWRpbmcgIjB4IikKLQotICAtZSAgICAgICAgICAgIGVuY3J5cHQvZGVjcnlwdCAoZm9yIGRhdGEgY29uZmlkZW50aWFsaXR5KQotICAgICAgICAgICAgICAgIChyZXF1aXJlcyB1c2Ugb2YgLWsgb3B0aW9uIGFzIHdlbGwpCi0KLSAgLWEgICAgICAgICAgICBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIAotICAgICAgICAgICAgICAgIChyZXF1aXJlcyB1c2Ugb2YgLWsgb3B0aW9uIGFzIHdlbGwpCi0KLSAgLWwgICAgICAgICAgICBsaXN0IGRlYnVnIG1vZHVsZXMKLQotICAtZCA8ZGVidWc+ICAgIHR1cm4gb24gZGVidWdnaW5nIGZvciBtb2R1bGUgPGRlYnVnPgotCi0KLUluIG9yZGVyIHRvIGdldCByYW5kb20gMzAtYnl0ZSB2YWx1ZXMgZm9yIHVzZSBhcyBrZXkvc2FsdCBwYWlycyAsIHlvdQotY2FuIHVzZSB0aGUgZm9sbG93aW5nIGJhc2ggZnVuY3Rpb24gdG8gZm9ybWF0IHRoZSBvdXRwdXQgb2YKLS9kZXYvcmFuZG9tICh3aGVyZSB0aGF0IGRldmljZSBpcyBhdmFpbGFibGUpLgotCi1mdW5jdGlvbiByYW5kaGV4KCkgewotICAgY2F0IC9kZXYvcmFuZG9tIHwgb2QgLS1yZWFkLWJ5dGVzPTMyIC0td2lkdGg9MzIgLXggfCBhd2sgJ3sgcHJpbnQgJDIgJDMgJDQgJDUgJDYgJDcgJDggJDkgJDEwICQxMSAkMTIgJDEzICQxNCAkMTUgJDE2IH0nCi19Ci0KLQotQW4gZXhhbXBsZSBvZiBhbiBTUlRQIHNlc3Npb24gdXNpbmcgdHdvIHJ0cHcgcHJvZ3JhbXMgZm9sbG93czoKLQotc2V0IGs9YzFlZWMzNzE3ZGE3NjE5NWJiODc4NTc4NzkwYWY3MWM0ZWU5Zjg1OWUxOTdhNDE0YTc4ZDVhYmM3NDUxCi0KLVtzaDFdJCB0ZXN0L3J0cHcgLXMgLWsgJGsgLWVhIDAuMC4wLjAgOTk5OSAKLVNlY3VyaXR5IHNlcnZpY2VzOiBjb25maWRlbnRpYWxpdHkgbWVzc2FnZSBhdXRoZW50aWNhdGlvbgotc2V0IG1hc3RlciBrZXkvc2FsdCB0byBDMUVFQzM3MTdEQTc2MTk1QkI4Nzg1Nzg3OTBBRjcxQy80RUU5Rjg1OUUxOTdBNDE0QTc4RDVBQkM3NDUxCi1zZXR0aW5nIFNTUkMgdG8gMjA3ODkxNzA1Mwotc2VuZGluZyB3b3JkOiBBCi1zZW5kaW5nIHdvcmQ6IGEKLXNlbmRpbmcgd29yZDogYWEKLXNlbmRpbmcgd29yZDogYWFsCi0uLi4KLQotW3NoMl0kIHRlc3QvcnRwdyAtciAtayAkayAtZWEgMC4wLjAuMCA5OTk5IAotc2VjdXJpdHkgc2VydmljZXM6IGNvbmZpZGVudGlhbGl0eSBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uCi1zZXQgbWFzdGVyIGtleS9zYWx0IHRvIEMxRUVDMzcxN0RBNzYxOTVCQjg3ODU3ODc5MEFGNzFDLzRFRTlGODU5RTE5N0E0MTRBNzhENUFCQzc0NTEKLTE5IG9jdGV0cyByZWNlaXZlZCBmcm9tIFNTUkMgMjA3ODkxNzA1MyB3b3JkOiBBCi0xOSBvY3RldHMgcmVjZWl2ZWQgZnJvbSBTU1JDIDIwNzg5MTcwNTMgd29yZDogYQotMjAgb2N0ZXRzIHJlY2VpdmVkIGZyb20gU1NSQyAyMDc4OTE3MDUzIHdvcmQ6IGFhCi0yMSBvY3RldHMgcmVjZWl2ZWQgZnJvbSBTU1JDIDIwNzg5MTcwNTMgd29yZDogYWFsCi0uLi4KLQotSW1wbGVtZW50YXRpb24gTm90ZXMKLQotICAqIFRoZSBzcnRwX3Byb3RlY3QoKSBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGJ1ZmZlciBob2xkaW5nIHRoZQotICAgIHJ0cCBwYWNrZXQgaGFzIGVub3VnaCBzdG9yYWdlIGFsbG9jYXRlZCB0aGF0IHRoZSBhdXRoZW50aWNhdGlvbiAKLSAgICB0YWcgY2FuIGJlIHdyaXR0ZW4gdG8gdGhlIGVuZCBvZiB0aGF0IHBhY2tldC4gIElmIHRoaXMgYXNzdW1wdGlvbgotICAgIGlzIG5vdCB2YWxpZCwgbWVtb3J5IGNvcnJ1cHRpb24gd2lsbCBlbnN1ZS4gIAotCi0gICogQXV0b21hdGVkIHRlc3RzIGZvciB0aGUgY3J5cHRvIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgdGhyb3VnaAotICAgIHRoZSBjaXBoZXJfdHlwZV9zZWxmX3Rlc3QoKSBhbmQgYXV0aF90eXBlX3NlbGZfdGVzdCgpIGZ1bmN0aW9ucy4KLSAgICBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIGJlIHVzZWQgdG8gdGVzdCBlYWNoIHBvcnQgb2YgdGhpcyBjb2RlIAotICAgIHRvIGEgbmV3IHBsYXRmb3JtLgotCi0gICogUmVwbGF5IHByb3RlY3Rpb24gaXMgY29udGFpbmVkIGluIHRoZSBjcnlwdG8gZW5naW5lLCBhbmQKLSAgICB0ZXN0cyBmb3IgaXQgYXJlIHByb3ZpZGVkLgotCi0gICogVGhpcyBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBjYWxscyB0byBpbml0aWFsaXplLCBwcm90ZWN0LCBhbmQKLSAgICB1bnByb3RlY3QgUlRQIHBhY2tldHMsIGFuZCBtYWtlcyBhcyBmZXcgYXMgcG9zc2libGUgYXNzdW1wdGlvbnMKLSAgICBhYm91dCBob3cgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgY2FsbGVkLiAgRm9yIGV4YW1wbGUsIHRoZQotICAgIGNhbGxlciBpcyBub3QgZXhwZWN0ZWQgdG8gcHJvdmlkZSBwYWNrZXRzIGluIG9yZGVyICh0aG91Z2ggaWYKLSAgICB0aGV5J3JlIGNhbGxlZCBtb3JlIHRoYW4gNjVrIG91dCBvZiBzZXF1ZW5jZSwgc3luY2hyb25pemF0aW9uCi0gICAgd2lsbCBiZSBsb3N0KS4KLSAgICAKLSAgKiBUaGUgc2VxdWVuY2UgbnVtYmVyIGluIHRoZSBydHAgcGFja2V0IGlzIHVzZWQgYXMgdGhlIGxvdyAxNiBiaXRzCi0gICAgb2YgdGhlIHNlbmRlcidzIGxvY2FsIHBhY2tldCBpbmRleC4gTm90ZSB0aGF0IFJUUCB3aWxsIHN0YXJ0IGl0cwotICAgIHNlcXVlbmNlIG51bWJlciBpbiBhIHJhbmRvbSBwbGFjZSwgYW5kIHRoZSBTUlRQIGxheWVyIGp1c3QganVtcHMKLSAgICBmb3J3YXJkIHRvIHRoYXQgbnVtYmVyIGF0IGl0cyBmaXJzdCBpbnZvY2F0aW9uLiAgQW4gZWFybGllcgotICAgIHZlcnNpb24gb2YgdGhpcyBsaWJyYXJ5IHVzZWQgaW5pdGlhbCBzZXF1ZW5jZSBudW1iZXJzIHRoYXQgYXJlCi0gICAgbGVzcyB0aGFuIDMyLDc2ODsgdGhpcyB0cmljayBpcyBubyBsb25nZXIgcmVxdWlyZWQgYXMgdGhlCi0gICAgcmRieF9lc3RpbWF0ZV9pbmRleCguLi4pIGZ1bmN0aW9uIGhhcyBiZWVuIG1hZGUgc21hcnRlci4KLQotICAqIFRoZSByZXBsYXkgd2luZG93IGlzIDEyOCBiaXRzIGluIGxlbmd0aCwgYW5kIGlzIGhhcmQtY29kZWQgdG8gdGhpcwotICAgIHZhbHVlIGZvciBub3cuICAKLQpkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMWEwNjYKLS0tIC9kZXYvbnVsbAorKysgYi9SRUFETUUubWQKQEAgLTAsMCArMSw1MDggQEAKK1shW0J1aWxkIFN0YXR1c10oaHR0cHM6Ly90cmF2aXMtY2kub3JnL2Npc2NvL2xpYnNydHAuc3ZnP2JyYW5jaD1tYXN0ZXIpXShodHRwczovL3RyYXZpcy1jaS5vcmcvY2lzY28vbGlic3J0cCkKK1shW0NvdmVyaXR5IFNjYW4gQnVpbGQgU3RhdHVzXShodHRwczovL3NjYW4uY292ZXJpdHkuY29tL3Byb2plY3RzLzE0Mjc0L2JhZGdlLnN2ZyldKGh0dHBzOi8vc2Nhbi5jb3Zlcml0eS5jb20vcHJvamVjdHMvY2lzY28tbGlic3J0cCkKKworPGEgbmFtZT0iaW50cm9kdWN0aW9uLXRvLWxpYnNydHAiPjwvYT4KKyMgSW50cm9kdWN0aW9uIHRvIGxpYlNSVFAKKworVGhpcyBwYWNrYWdlIHByb3ZpZGVzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTZWN1cmUgUmVhbC10aW1lCitUcmFuc3BvcnQgUHJvdG9jb2wgKFNSVFApLCB0aGUgVW5pdmVyc2FsIFNlY3VyaXR5IFRyYW5zZm9ybSAoVVNUKSwgYW5kCithIHN1cHBvcnRpbmcgY3J5cHRvZ3JhcGhpYyBrZXJuZWwuIFRoZSBTUlRQIEFQSSBpcyBkb2N1bWVudGVkIGluIGluY2x1ZGUvc3J0cC5oLAorYW5kIHRoZSBsaWJyYXJ5IGlzIGluIGxpYnNydHAyLmEgKGFmdGVyIGNvbXBpbGF0aW9uKS4KKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgbGliU1JUUCwgdGhlIE9wZW4gU291cmNlIFNlY3VyZSBSVFAgbGlicmFyeQorZnJvbSBDaXNjbyBTeXN0ZW1zLCBJbmMuIFJUUCBpcyB0aGUgUmVhbC10aW1lIFRyYW5zcG9ydCBQcm90b2NvbCwgYW4KK0lFVEYgc3RhbmRhcmQgZm9yIHRoZSB0cmFuc3BvcnQgb2YgcmVhbC10aW1lIGRhdGEgc3VjaCBhcyB0ZWxlcGhvbnksCithdWRpbywgYW5kIHZpZGVvLCBkZWZpbmVkIGJ5IFtSRkMgMzU1MF0oaHR0cHM6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzM1NTAudHh0KS4KK1NlY3VyZSBSVFAgKFNSVFApIGlzIGFuIFJUUCBwcm9maWxlIGZvciBwcm92aWRpbmcgY29uZmlkZW50aWFsaXR5IHRvIFJUUCBkYXRhCithbmQgYXV0aGVudGljYXRpb24gdG8gdGhlIFJUUCBoZWFkZXIgYW5kIHBheWxvYWQuIFNSVFAgaXMgYW4gSUVURiBTdGFuZGFyZCwKK2RlZmluZWQgaW4gW1JGQyAzNzExXShodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzcxMS50eHQpLCBhbmQgd2FzIGRldmVsb3BlZAoraW4gdGhlIElFVEYgQXVkaW8vVmlkZW8gVHJhbnNwb3J0IChBVlQpIFdvcmtpbmcgR3JvdXAuIFRoaXMgbGlicmFyeSBzdXBwb3J0cworYWxsIG9mIHRoZSBtYW5kYXRvcnkgZmVhdHVyZXMgb2YgU1JUUCwgYnV0IG5vdCBhbGwgb2YgdGhlIG9wdGlvbmFsIGZlYXR1cmVzLiBTZWUKK3RoZSBbU3VwcG9ydGVkIEZlYXR1cmVzXSgjc3VwcG9ydGVkLWZlYXR1cmVzKSBzZWN0aW9uIGZvciBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uLgorCitUaGlzIGRvY3VtZW50IGlzIGFsc28gdXNlZCB0byBnZW5lcmF0ZSB0aGUgZG9jdW1lbnRhdGlvbiBmaWxlcyBpbiB0aGUgL2RvYy8KK2ZvbGRlciB3aGVyZSBhIG1vcmUgZGV0YWlsZWQgcmVmZXJlbmNlIHRvIHRoZSBsaWJTUlRQIEFQSSBhbmQgcmVsYXRlZCBmdW5jdGlvbnMKK2NhbiBiZSBjcmVhdGVkIChyZXF1aXJlcyBpbnN0YWxsaW5nIGRveHlnZW4uKS4gVGhlIHJlZmVyZW5jZSBtYXRlcmlhbCBpcyBjcmVhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gY29tbWVudHMgZW1iZWRkZWQgaW4gc29tZSBvZiB0aGUgQyBoZWFkZXIgZmlsZXMuIFRoZQorZG9jdW1lbnRhdGlvbiBpcyBvcmdhbml6ZWQgaW50byBtb2R1bGVzIGluIG9yZGVyIHRvIGltcHJvdmUgaXRzIGNsYXJpdHkuIFRoZXNlCittb2R1bGVzIGRvIG5vdCBkaXJlY3RseSBjb3JyZXNwb25kIHRvIGZpbGVzLiBBbiB1bmRlcmx5aW5nIGNyeXB0b2dyYXBoaWMga2VybmVsCitwcm92aWRlcyBtdWNoIG9mIHRoZSBiYXNpYyBmdW5jdGlvbmFsaXR5IG9mIGxpYlNSVFAgYnV0IGlzIG1vc3RseSB1bmRvY3VtZW50ZWQKK2JlY2F1c2UgaXQgZG9lcyBpdHMgd29yayBiZWhpbmQgdGhlIHNjZW5lcy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPGEgbmFtZT0iY29udGFjdC11cyI+PC9hPgorIyBDb250YWN0IFVzCisKKy0gW2xpYnNydHBAbGlzdHMucGFja2V0aXplci5jb21dKG1haWx0bzpsaWJzcnRwQGxpc3RzLnBhY2tldGl6ZXIuY29tKSBnZW5lcmFsIG1haWxpbmcgbGlzdCBmb3IgbmV3cyAvIGFubm91bmNlbWVudHMgLyBkaXNjdXNzaW9ucy4gVGhpcyBpcyBhbiBvcGVuIGxpc3QsIHNlZQorW2h0dHBzOi8vbGlzdHMucGFja2V0aXplci5jb20vbWFpbG1hbi9saXN0aW5mby9saWJzcnRwXShodHRwczovL2xpc3RzLnBhY2tldGl6ZXIuY29tL21haWxtYW4vbGlzdGluZm8vbGlic3J0cCkgZm9yIHNpbmdpbmcgdXAuCisKKy0gW2xpYnNydHAtc2VjdXJpdHlAbGlzdHMucGFja2V0aXplci5jb21dKG1haWx0bzpsaWJzcnRwLXNlY3VyaXR5QGxpc3RzLnBhY2tldGl6ZXIuY29tKSBmb3IgZGlzY2xvc2luZyBzZWN1cml0eSBpc3N1ZXMgdG8gdGhlIGxpYnNydHAgbWFpbnRlbmFuY2UgdGVhbS4gVGhpcyBpcyBhIGNsb3NlZCBsaXN0IGJ1dCBhbnlvbmUgY2FuIHNlbmQgdG8gaXQuCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPGEgbmFtZT0iY29udGVudHMiPjwvYT4KKyMjIENvbnRlbnRzCisKKy0gW0ludHJvZHVjdGlvbiB0byBsaWJTUlRQXSgjaW50cm9kdWN0aW9uLXRvLWxpYnNydHApCistIFtDb250YWN0IFVzXSgjY29udGFjdC11cykKKyAgLSBbQ29udGVudHNdKCNjb250ZW50cykKKy0gW0xpY2Vuc2UgYW5kIERpc2NsYWltZXJdKCNsaWNlbnNlLWFuZC1kaXNjbGFpbWVyKQorLSBbbGliU1JUUCBPdmVydmlld10oI2xpYnNydHAtb3ZlcnZpZXcpCisgIC0gW1NlY3VyZSBSVFAgQmFja2dyb3VuZF0oI3NlY3VyZS1ydHAtYmFja2dyb3VuZCkKKyAgLSBbU3VwcG9ydGVkIEZlYXR1cmVzXSgjc3VwcG9ydGVkLWZlYXR1cmVzKQorICAtIFtJbXBsZW1lbnRhdGlvbiBOb3Rlc10oI2ltcGxlbWVudGF0aW9uLW5vdGVzKQorLSBbSW5zdGFsbGluZyBhbmQgQnVpbGRpbmcgbGliU1JUUF0oI2luc3RhbGxpbmctYW5kLWJ1aWxkaW5nLWxpYnNydHApCisgIC0gW0NoYW5naW5nIEJ1aWxkIENvbmZpZ3VyYXRpb25dKCNjaGFuZ2luZy1idWlsZC1jb25maWd1cmF0aW9uKQorICAtIFtVc2luZyBWaXN1YWwgU3R1ZGlvXSgjdXNpbmctdmlzdWFsLXN0dWRpbykKKy0gW0FwcGxpY2F0aW9uc10oI2FwcGxpY2F0aW9ucykKKyAgLSBbRXhhbXBsZSBDb2RlXSgjZXhhbXBsZS1jb2RlKQorLSBbQ3JlZGl0c10oI2NyZWRpdHMpCistIFtSZWZlcmVuY2VzXSgjcmVmZXJlbmNlcykKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPGEgbmFtZT0ibGljZW5zZS1hbmQtZGlzY2xhaW1lciI+PC9hPgorIyBMaWNlbnNlIGFuZCBEaXNjbGFpbWVyCisKK2xpYlNSVFAgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIGZvbGxvd2luZyBsaWNlbnNlLCB3aGljaCBpcyBpbmNsdWRlZAoraW4gdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbi4gSXQgaXMgcmVwcm9kdWNlZCBpbiB0aGUgbWFudWFsIGluCitjYXNlIHlvdSBnb3QgdGhlIGxpYnJhcnkgZnJvbSBhbm90aGVyIHNvdXJjZS4KKworPiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxNyBDaXNjbyBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorPgorPiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKz4gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCis+IGFyZSBtZXQ6Cis+Cis+IC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKz4gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCis+IC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKz4gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKz4gICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKz4gLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCis+ICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCis+ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorPgorPiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCis+ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCis+IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCis+IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCis+IENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCis+IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworPiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKz4gU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCis+IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKz4gU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorPiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECis+IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPGEgbmFtZT0ibGlic3J0cC1vdmVydmlldyI+PC9hPgorIyBsaWJTUlRQIE92ZXJ2aWV3CisKK2xpYlNSVFAgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciBwcm90ZWN0aW5nIFJUUCBhbmQgUlRDUC4gIFJUUCBwYWNrZXRzCitjYW4gYmUgZW5jcnlwdGVkIGFuZCBhdXRoZW50aWNhdGVkICh1c2luZyB0aGUgYHNydHBfcHJvdGVjdCgpYAorZnVuY3Rpb24pLCB0dXJuaW5nIHRoZW0gaW50byBTUlRQIHBhY2tldHMuIFNpbWlsYXJseSwgU1JUUCBwYWNrZXRzCitjYW4gYmUgZGVjcnlwdGVkIGFuZCBoYXZlIHRoZWlyIGF1dGhlbnRpY2F0aW9uIHZlcmlmaWVkICh1c2luZyB0aGUKK2BzcnRwX3VucHJvdGVjdCgpYCBmdW5jdGlvbiksIHR1cm5pbmcgdGhlbSBpbnRvIFJUUCBwYWNrZXRzLiBTaW1pbGFyCitmdW5jdGlvbnMgYXBwbHkgc2VjdXJpdHkgdG8gUlRDUCBwYWNrZXRzLgorCitUaGUgdHlwZWRlZiBgc3J0cF9zdHJlYW1fdGAgcG9pbnRzIHRvIGEgc3RydWN0dXJlIGhvbGRpbmcgYWxsIG9mIHRoZQorc3RhdGUgYXNzb2NpYXRlZCB3aXRoIGFuIFNSVFAgc3RyZWFtLCBpbmNsdWRpbmcgdGhlIGtleXMgYW5kCitwYXJhbWV0ZXJzIGZvciBjaXBoZXIgYW5kIG1lc3NhZ2UgYXV0aGVudGljYXRpb24gZnVuY3Rpb25zIGFuZCB0aGUKK2FudGktcmVwbGF5IGRhdGEuIEEgcGFydGljdWxhciBgc3J0cF9zdHJlYW1fdGAgaG9sZHMgdGhlIGluZm9ybWF0aW9uCituZWVkZWQgdG8gcHJvdGVjdCBhIHBhcnRpY3VsYXIgUlRQIGFuZCBSVENQIHN0cmVhbS4gVGhpcyBkYXRhdHlwZQoraXMgaW50ZW50aW9uYWxseSBvcGFxdWUgaW4gb3JkZXIgdG8gYmV0dGVyIHNlcGVyYXRlIHRoZSBsaWJTUlRQCitBUEkgZnJvbSBpdHMgaW1wbGVtZW50YXRpb24uCisKK1dpdGhpbiBhbiBTUlRQIHNlc3Npb24sIHRoZXJlIGNhbiBiZSBtdWx0aXBsZSBzdHJlYW1zLCBlYWNoCitvcmlnaW5hdGluZyBmcm9tIGEgcGFydGljdWxhciBzZW5kZXIuIEVhY2ggc291cmNlIHVzZXMgYSBkaXN0aW5jdAorc3RyZWFtIGNvbnRleHQgdG8gcHJvdGVjdCB0aGUgUlRQIGFuZCBSVENQIHN0cmVhbSB0aGF0IGl0IGlzCitvcmlnaW5hdGluZy4gVGhlIHR5cGVkZWYgYHNydHBfdGAgcG9pbnRzIHRvIGEgc3RydWN0dXJlIGhvbGRpbmcgYWxsIG9mCit0aGUgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIGFuIFNSVFAgc2Vzc2lvbi4gVGhlcmUgY2FuIGJlIG11bHRpcGxlCitzdHJlYW0gY29udGV4dHMgYXNzb2NpYXRlZCB3aXRoIGEgc2luZ2xlIGBzcnRwX3RgLiBBIHN0cmVhbSBjb250ZXh0CitjYW5ub3QgZXhpc3QgaW5kZXBlbnQgZnJvbSBhbiBgc3J0cF90YCwgdGhvdWdoIG9mIGNvdXJzZSBhbiBgc3J0cF90YCBjYW4KK2JlIGNyZWF0ZWQgdGhhdCBjb250YWlucyBvbmx5IGEgc2luZ2xlIHN0cmVhbSBjb250ZXh0LiBBIGRldmljZQorcGFydGljaXBhdGluZyBpbiBhbiBTUlRQIHNlc3Npb24gbXVzdCBoYXZlIGEgc3RyZWFtIGNvbnRleHQgZm9yIGVhY2gKK3NvdXJjZSBpbiB0aGF0IHNlc3Npb24sIHNvIHRoYXQgaXQgY2FuIHByb2Nlc3MgdGhlIGRhdGEgdGhhdCBpdAorcmVjZWl2ZXMgZnJvbSBlYWNoIHNlbmRlci4KKworSW4gbGliU1JUUCwgYSBzZXNzaW9uIGlzIGNyZWF0ZWQgdXNpbmcgdGhlIGZ1bmN0aW9uIGBzcnRwX2NyZWF0ZSgpYC4KK1RoZSBwb2xpY3kgdG8gYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHNlc3Npb24gaXMgcGFzc2VkIGludG8gdGhpcworZnVuY3Rpb24gYXMgYW4gYHNydHBfcG9saWN5X3RgIHN0cnVjdHVyZS4gQSBzaW5nbGUgb25lIG9mIHRoZXNlCitzdHJ1Y3R1cmVzIGRlc2NyaWJlcyB0aGUgcG9saWN5IG9mIGEgc2luZ2xlIHN0cmVhbS4gVGhlc2Ugc3RydWN0dXJlcworY2FuIGFsc28gYmUgbGlua2VkIHRvZ2V0aGVyIHRvIGZvcm0gYW4gZW50aXJlIHNlc3Npb24gcG9saWN5LiBBIGxpbmtlZAorbGlzdCBvZiBgc3J0cF9wb2xpY3lfdGAgc3RydWN0dXJlcyBpcyBlcXVpdmFsZW50IHRvIGEgc2Vzc2lvbiBwb2xpY3kuCitJbiBzdWNoIGEgcG9saWN5LCB3ZSByZWZlciB0byBhIHNpbmdsZSBgc3J0cF9wb2xpY3lfdGAgYXMgYW4gKmVsZW1lbnQqLgorCitBbiBgc3J0cF9wb2xpY3lfdGAgc3RydWN0dXJlIGNvbnRhaW5zIHR3byBgc3J0cF9jcnlwdG9fcG9saWN5X3RgIHN0cnVjdHVyZXMKK3RoYXQgZGVzY3JpYmUgdGhlIGNyeXB0b2dyYWhpYyBwb2xpY2llcyBmb3IgUlRQIGFuZCBSVENQLCBhcyB3ZWxsIGFzCit0aGUgU1JUUCBtYXN0ZXIga2V5IGFuZCB0aGUgU1NSQyB2YWx1ZS4gVGhlIFNTUkMgZGVzY3JpYmVzIHdoYXQgdG8KK3Byb3RlY3QgKGUuZy4gd2hpY2ggc3RyZWFtKSwgYW5kIHRoZSBgc3J0cF9jcnlwdG9fcG9saWN5X3RgIHN0cnVjdHVyZXMKK2Rlc2NyaWJlIGhvdyB0byBwcm90ZWN0IGl0LiBUaGUga2V5IGlzIGNvbnRhaW5lZCBpbiBhIHBvbGljeSBlbGVtZW50CitiZWNhdXNlIGl0IHNpbXBsaWZpZXMgdGhlIGludGVyZmFjZSB0byB0aGUgbGlicmFyeS4gSW4gbWFueSBjYXNlcywgaXQKK2lzIGRlc2lyYWJsZSB0byB1c2UgdGhlIHNhbWUgY3J5cHRvZ3JhcGhpYyBwb2xpY2llcyBhY3Jvc3MgYWxsIG9mIHRoZQorc3RyZWFtcyBpbiBhIHNlc3Npb24sIGJ1dCB0byB1c2UgYSBkaXN0aW5jdCBrZXkgZm9yIGVhY2ggc3RyZWFtLiBBCitgc3J0cF9jcnlwdG9fcG9saWN5X3RgIHN0cnVjdHVyZSBjYW4gYmUgaW5pdGlhbGl6ZWQgYnkgdXNpbmcgZWl0aGVyIHRoZQorYHNydHBfY3J5cHRvX3BvbGljeV9zZXRfcnRwX2RlZmF1bHQoKWAgb3IgYHNydHBfY3J5cHRvX3BvbGljeV9zZXRfcnRjcF9kZWZhdWx0KClgCitmdW5jdGlvbnMsIHdoaWNoIHNldCBhIGNyeXB0byBwb2xpY3kgc3RydWN0dXJlIHRvIHRoZSBkZWZhdWx0IHBvbGljaWVzCitmb3IgUlRQIGFuZCBSVENQIHByb3RlY3Rpb24sIHJlc3BlY3RpdmVseS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPGEgbmFtZT0ic2VjdXJlLXJ0cC1iYWNrZ3JvdW5kIj48L2E+CisjIyBTZWN1cmUgUlRQIEJhY2tncm91bmQKKworSW4gdGhpcyBzZWN0aW9uIHdlIHJldmlldyBTUlRQIGFuZCBpbnRyb2R1Y2Ugc29tZSB0ZXJtcyB0aGF0IGFyZSB1c2VkCitpbiBsaWJTUlRQLiBBbiBSVFAgc2Vzc2lvbiBpcyBkZWZpbmVkIGJ5IGEgcGFpciBvZiBkZXN0aW5hdGlvbgordHJhbnNwb3J0IGFkZHJlc3NlcywgdGhhdCBpcywgYSBuZXR3b3JrIGFkZHJlc3MgcGx1cyBhIHBhaXIgb2YgVURQCitwb3J0cyBmb3IgUlRQIGFuZCBSVENQLiBSVENQLCB0aGUgUlRQIGNvbnRyb2wgcHJvdG9jb2wsIGlzIHVzZWQgdG8KK2Nvb3JkaW5hdGUgYmV0d2VlbiB0aGUgcGFydGljaXBhbnRzIGluIGFuIFJUUCBzZXNzaW9uLCBlLmcuIHRvIHByb3ZpZGUKK2ZlZWRiYWNrIGZyb20gcmVjZWl2ZXJzIHRvIHNlbmRlcnMuIEFuICpTUlRQIHNlc3Npb24qIGlzCitzaW1pbGFybHkgZGVmaW5lZDsgaXQgaXMganVzdCBhbiBSVFAgc2Vzc2lvbiBmb3Igd2hpY2ggdGhlIFNSVFAKK3Byb2ZpbGUgaXMgYmVpbmcgdXNlZC4gQW4gU1JUUCBzZXNzaW9uIGNvbnNpc3RzIG9mIHRoZSB0cmFmZmljIHNlbnQKK3RvIHRoZSBTUlRQIG9yIFNSVENQIGRlc3RpbmF0aW9uIHRyYW5zcG9ydCBhZGRyZXNzZXMuIEVhY2gKK3BhcnRpY2lwYW50IGluIGEgc2Vzc2lvbiBpcyBpZGVudGlmaWVkIGJ5IGEgc3luY2hyb25pemF0aW9uIHNvdXJjZQorKFNTUkMpIGlkZW50aWZpZXIuIFNvbWUgcGFydGljaXBhbnRzIG1heSBub3Qgc2VuZCBhbnkgU1JUUCB0cmFmZmljOwordGhleSBhcmUgY2FsbGVkIHJlY2VpdmVycywgZXZlbiB0aG91Z2ggdGhleSBzZW5kIG91dCBTUlRDUCB0cmFmZmljLAorc3VjaCBhcyByZWNlaXZlciByZXBvcnRzLgorCitSVFAgYWxsb3dzIG11bHRpcGxlIHNvdXJjZXMgdG8gc2VuZCBSVFAgYW5kIFJUQ1AgdHJhZmZpYyBkdXJpbmcgdGhlCitzYW1lIHNlc3Npb24uIFRoZSBzeW5jaHJvbml6YXRpb24gc291cmNlIGlkZW50aWZpZXIgKFNTUkMpIGlzIHVzZWQgdG8KK2Rpc3Rpbmd1aXNoIHRoZXNlIHNvdXJjZXMuIEluIGxpYlNSVFAsIHdlIGNhbGwgdGhlIFNSVFAgYW5kIFNSVENQCit0cmFmZmljIGZyb20gYSBwYXJ0aWN1bGFyIHNvdXJjZSBhICpzdHJlYW0qLiBFYWNoIHN0cmVhbSBoYXMgaXRzIG93bgorU1NSQywgc2VxdWVuY2UgbnVtYmVyLCByb2xsb3ZlciBjb3VudGVyLCBhbmQgb3RoZXIgZGF0YS4gQSBwYXJ0aWN1bGFyCitjaG9pY2Ugb2Ygb3B0aW9ucywgY3J5cHRvZ3JhcGhpYyBtZWNoYW5pc21zLCBhbmQga2V5cyBpcyBjYWxsZWQgYQorKnBvbGljeSouIEVhY2ggc3RyZWFtIHdpdGhpbiBhIHNlc3Npb24gY2FuIGhhdmUgYSBkaXN0aW5jdCBwb2xpY3kKK2FwcGxpZWQgdG8gaXQuIEEgc2Vzc2lvbiBwb2xpY3kgaXMgYSBjb2xsZWN0aW9uIG9mIHN0cmVhbSBwb2xpY2llcy4KKworQSBzaW5nbGUgcG9saWN5IGNhbiBiZSB1c2VkIGZvciBhbGwgb2YgdGhlIHN0cmVhbXMgaW4gYSBnaXZlbiBzZXNzaW9uLAordGhvdWdoIHRoZSBjYXNlIGluIHdoaWNoIGEgc2luZ2xlICprZXkqIGlzIHNoYXJlZCBhY3Jvc3MgbXVsdGlwbGUKK3N0cmVhbXMgcmVxdWlyZXMgY2FyZS4gV2hlbiBrZXkgc2hhcmluZyBpcyB1c2VkLCB0aGUgU1NSQyB2YWx1ZXMgdGhhdAoraWRlbnRpZnkgdGhlIHN0cmVhbXMgKiptdXN0KiogYmUgZGlzdGluY3QuIFRoaXMgcmVxdWlyZW1lbnQgY2FuIGJlCitlbmZvcmNlZCBieSB1c2luZyB0aGUgY29udmVudGlvbiB0aGF0IGVhY2ggU1JUUCBhbmQgU1JUQ1Aga2V5IGlzIHVzZWQKK2ZvciBlbmNyeXB0aW9uIGJ5IG9ubHkgYSBzaW5nbGUgc2VuZGVyLiBJbiBvdGhlciB3b3JkcywgdGhlIGtleSBpcworc2hhcmVkIG9ubHkgYWNyb3NzIHN0cmVhbXMgdGhhdCBvcmlnaW5hdGUgZnJvbSBhIHBhcnRpY3VsYXIgZGV2aWNlIChvZgorY291cnNlLCBvdGhlciBTUlRQIHBhcnRpY2lwYW50cyB3aWxsIG5lZWQgdG8gdXNlIHRoZSBrZXkgZm9yCitkZWNyeXB0aW9uKS4gbGliU1JUUCBzdXBwb3J0cyB0aGlzIGVuZm9yY2VtZW50IGJ5IGRldGVjdGluZyB0aGUgY2FzZQoraW4gd2hpY2ggYSBrZXkgaXMgdXNlZCBmb3IgYm90aCBpbmJvdW5kIGFuZCBvdXRib3VuZCBkYXRhLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis8YSBuYW1lPSJzdXBwb3J0ZWQtZmVhdHVyZXMiPjwvYT4KKyMjIFN1cHBvcnRlZCBGZWF0dXJlcworCitUaGlzIGxpYnJhcnkgc3VwcG9ydHMgYWxsIG9mIHRoZSBtYW5kYXRvcnktdG8taW1wbGVtZW50IGZlYXR1cmVzIG9mCitTUlRQIChhcyBkZWZpbmVkIGluIFtSRkMgMzcxMV0oaHR0cHM6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzM3MTEudHh0KSkuIFNvbWUgb2YgdGhlc2UKK2ZlYXR1cmVzIGNhbiBiZSBzZWxlY3RlZCAob3IgZGUtc2VsZWN0ZWQpIGF0IHJ1biB0aW1lIGJ5IHNldHRpbmcgYW4KK2FwcHJvcHJpYXRlIHBvbGljeTsgdGhpcyBpcyBkb25lIHVzaW5nIHRoZSBzdHJ1Y3R1cmUgYHNydHBfcG9saWN5X3RgLgorU29tZSBvdGhlciBiZWhhdmlvcnMgb2YgdGhlIHByb3RvY29sIGNhbiBiZSBhZGFwdGVkIGJ5IGRlZmluaW5nIGFuCithcHByb3JpYXRlIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBleGNlcHRpb25hbCBldmVudHM7IHNlZSB0aGUgU1JUUGV2ZW50cworc2VjdGlvbiBpbiB0aGUgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24uCisKK1NvbWUgb3B0aW9ucyB0aGF0IGFyZSBkZXNjcmliZWQgaW4gdGhlIFNSVFAgc3BlY2lmaWNhdGlvbiBhcmUgbm90CitzdXBwb3J0ZWQuIFRoaXMgaW5jbHVkZXMKKworLSBrZXkgZGVyaXZhdGlvbiByYXRlcyBvdGhlciB0aGFuIHplcm8sCistIHRoZSBjaXBoZXIgRjgsCistIHRoZSB1c2Ugb2YgdGhlIHBhY2tldCBpbmRleCB0byBzZWxlY3QgYmV0d2VlbiBtYXN0ZXIga2V5cy4KKworVGhlIHVzZXIgc2hvdWxkIGJlIGF3YXJlIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gbWlzdXNlIHRoaXMgbGliYXJ5LAorYW5kIHRoYXQgdGhlIHJlc3VsdCBtYXkgYmUgdGhhdCB0aGUgc2VjdXJpdHkgbGV2ZWwgaXQgcHJvdmlkZXMgaXMKK2luYWRlcXVhdGUuIElmIHlvdSBhcmUgaW1wbGVtZW50aW5nIGEgZmVhdHVyZSB1c2luZyB0aGlzIGxpYnJhcnksIHlvdQord2lsbCB3YW50IHRvIHJlYWQgdGhlIFNlY3VyaXR5IENvbnNpZGVyYXRpb25zIHNlY3Rpb24gb2YgW1JGQyAzNzExXShodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzcxMS50eHQpLgorSW4gYWRkaXRpb24sIGl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSByZWFkIGFuZCB1bmRlcnN0YW5kIHRoZQordGVybXMgb3V0bGluZWQgaW4gdGhlIFtMaWNlbnNlIGFuZCBEaXNjbGFpbWVyXSgjbGljZW5zZS1hbmQtZGlzY2xhaW1lcikgc2VjdGlvbi4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPGEgbmFtZT0iaW1wbGVtZW50YXRpb24tbm90ZXMiPjwvYT4KKyMjIEltcGxlbWVudGF0aW9uIE5vdGVzCisKKyAgKiBUaGUgYHNydHBfcHJvdGVjdCgpYCBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGJ1ZmZlciBob2xkaW5nIHRoZQorICAgIHJ0cCBwYWNrZXQgaGFzIGVub3VnaCBzdG9yYWdlIGFsbG9jYXRlZCB0aGF0IHRoZSBhdXRoZW50aWNhdGlvbgorICAgIHRhZyBjYW4gYmUgd3JpdHRlbiB0byB0aGUgZW5kIG9mIHRoYXQgcGFja2V0LiBJZiB0aGlzIGFzc3VtcHRpb24KKyAgICBpcyBub3QgdmFsaWQsIG1lbW9yeSBjb3JydXB0aW9uIHdpbGwgZW5zdWUuCisKKyAgKiBBdXRvbWF0ZWQgdGVzdHMgZm9yIHRoZSBjcnlwdG8gZnVuY3Rpb25zIGFyZSBwcm92aWRlZCB0aHJvdWdoCisgICAgdGhlIGBjaXBoZXJfdHlwZV9zZWxmX3Rlc3QoKWAgYW5kIGBhdXRoX3R5cGVfc2VsZl90ZXN0KClgIGZ1bmN0aW9ucy4KKyAgICBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIGJlIHVzZWQgdG8gdGVzdCBlYWNoIHBvcnQgb2YgdGhpcyBjb2RlCisgICAgdG8gYSBuZXcgcGxhdGZvcm0uCisKKyAgKiBSZXBsYXkgcHJvdGVjdGlvbiBpcyBjb250YWluZWQgaW4gdGhlIGNyeXB0byBlbmdpbmUsIGFuZAorICAgIHRlc3RzIGZvciBpdCBhcmUgcHJvdmlkZWQuCisKKyAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIGNhbGxzIHRvIGluaXRpYWxpemUsIHByb3RlY3QsIGFuZAorICAgIHVucHJvdGVjdCBSVFAgcGFja2V0cywgYW5kIG1ha2VzIGFzIGZldyBhcyBwb3NzaWJsZSBhc3N1bXB0aW9ucworICAgIGFib3V0IGhvdyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBiZSBjYWxsZWQuIEZvciBleGFtcGxlLCB0aGUKKyAgICBjYWxsZXIgaXMgbm90IGV4cGVjdGVkIHRvIHByb3ZpZGUgcGFja2V0cyBpbiBvcmRlciAodGhvdWdoIGlmCisgICAgdGhleSdyZSBjYWxsZWQgbW9yZSB0aGFuIDY1ayBvdXQgb2Ygc2VxdWVuY2UsIHN5bmNocm9uaXphdGlvbgorICAgIHdpbGwgYmUgbG9zdCkuCisKKyAgKiBUaGUgc2VxdWVuY2UgbnVtYmVyIGluIHRoZSBydHAgcGFja2V0IGlzIHVzZWQgYXMgdGhlIGxvdyAxNiBiaXRzCisgICAgb2YgdGhlIHNlbmRlcidzIGxvY2FsIHBhY2tldCBpbmRleC4gTm90ZSB0aGF0IFJUUCB3aWxsIHN0YXJ0IGl0cworICAgIHNlcXVlbmNlIG51bWJlciBpbiBhIHJhbmRvbSBwbGFjZSwgYW5kIHRoZSBTUlRQIGxheWVyIGp1c3QganVtcHMKKyAgICBmb3J3YXJkIHRvIHRoYXQgbnVtYmVyIGF0IGl0cyBmaXJzdCBpbnZvY2F0aW9uLiBBbiBlYXJsaWVyCisgICAgdmVyc2lvbiBvZiB0aGlzIGxpYnJhcnkgdXNlZCBpbml0aWFsIHNlcXVlbmNlIG51bWJlcnMgdGhhdCBhcmUKKyAgICBsZXNzIHRoYW4gMzIsNzY4OyB0aGlzIHRyaWNrIGlzIG5vIGxvbmdlciByZXF1aXJlZCBhcyB0aGUKKyAgICBgcmRieF9lc3RpbWF0ZV9pbmRleCguLi4pYCBmdW5jdGlvbiBoYXMgYmVlbiBtYWRlIHNtYXJ0ZXIuCisKKyAgKiBUaGUgcmVwbGF5IHdpbmRvdyBmb3IgKFMpUlRDUCBpcyBoYXJkY29kZWQgdG8gMTI4IGJpdHMgaW4gbGVuZ3RoLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis8YSBuYW1lPSJpbnN0YWxsaW5nLWFuZC1idWlsZGluZy1saWJzcnRwIj48L2E+CisjIEluc3RhbGxpbmcgYW5kIEJ1aWxkaW5nIGxpYlNSVFAKKworVG8gaW5zdGFsbCBsaWJTUlRQLCBkb3dubG9hZCB0aGUgbGF0ZXN0IHJlbGVhc2Ugb2YgdGhlIGRpc3RyaWJ1dGlvbgorZnJvbSBbaHR0cHM6Ly9naXRodWIuY29tL2Npc2NvL2xpYnNydHAvcmVsZWFzZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9jaXNjby9saWJzcnRwL3JlbGVhc2VzKS4KK1lvdSBwcm9iYWJseSB3YW50IHRvIGdldCB0aGUgbW9zdCByZWNlbnQgcmVsZWFzZS4gVW5wYWNrIHRoZSBkaXN0cmlidXRpb24gYW5kCitleHRyYWN0IHRoZSBzb3VyY2UgZmlsZXM7IHRoZSBkaXJlY3RvcnkgaW50byB3aGljaCB0aGUgc291cmNlIGZpbGVzCit3aWxsIGdvIGlzIG5hbWVkIGBsaWJzcnRwLUEtQi1DYCB3aGVyZSBgQWAgaXMgdGhlIHZlcnNpb24gbnVtYmVyLCBgQmAgaXMgdGhlCittYWpvciByZWxlYXNlIG51bWJlciBhbmQgYENgIGlzIHRoZSBtaW5vciByZWxlYXNlIG51bWJlci4KKworbGliU1JUUCB1c2VzIHRoZSBHTlUgYGF1dG9jb25mYCBhbmQgYG1ha2VgIHV0aWxpdGllcyAoQlNEIG1ha2Ugd2lsbCBub3Qgd29yazsgaWYKK2JvdGggdmVyc2lvbnMgb2YgbWFrZSBhcmUgb24geW91ciBwbGF0Zm9ybSwgeW91IGNhbiBpbnZva2UgR05VIG1ha2UgYXMKK2BnbWFrZWAuKS4gSW4gdGhlIGBsaWJzcnRwYCBkaXJlY3RvcnksIHJ1biB0aGUgY29uZmlndXJlIHNjcmlwdCBhbmQgdGhlbgorbWFrZToKKworfn5+LnR4dAorLi9jb25maWd1cmUgWyBvcHRpb25zIF0KK21ha2UKK35+fgorCitUaGUgY29uZmlndXJlIHNjcmlwdCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKKworT3B0aW9uICAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0KK1wtXC1oZWxwICAgICAgICAgICAgICAgICAgIFwtaCB8IERpc3BsYXkgaGVscAorXC1cLWVuYWJsZS1kZWJ1Zy1sb2dnaW5nICAgICAgIHwgRW5hYmxlIGRlYnVnIGxvZ2dpbmcgaW4gYWxsIG1vZHVsZXMKK1wtXC1lbmFibGUtbG9nLXN0ZG91dCAgICAgICAgICB8IEVuYWJsZSBsb2dnaW5nIHRvIHN0ZG91dAorXC1cLWVuYWJsZS1vcGVuc3NsICAgICAgICAgICAgIHwgRW5hYmxlIE9wZW5TU0wgY3J5cHRvIGVuZ2luZQorXC1cLWVuYWJsZS1vcGVuc3NsLWtkZiAgICAgICAgIHwgRW5hYmxlIE9wZW5TU0wgS0RGIGFsZ29yaXRobQorXC1cLXdpdGgtbG9nLWZpbGUgICAgICAgICAgICAgIHwgVXNlIGZpbGUgZm9yIGxvZ2dpbmcKK1wtXC13aXRoLW9wZW5zc2wtZGlyICAgICAgICAgICB8IExvY2F0aW9uIG9mIE9wZW5TU0wgaW5zdGFsbGF0aW9uCisKK0J5IGRlZmF1bHQgdGhlcmUgaXMgbm8gbG9nIG91dHB1dCwgbG9nZ2luZyBjYW4gYmUgZW5hYmxlZCB0byBiZSBvdXRwdXQgdG8gc3Rkb3V0CitvciBhIGdpdmVuIGZpbGUgdXNpbmcgdGhlIGNvbmZpZ3VyZSBvcHRpb25zLgorCitUaGlzIHBhY2thZ2UgaGFzIGJlZW4gdGVzdGVkIG9uIHRoZSBmb2xsb3dpbmcgcGxhdGZvcm1zOiBNYWMgT1MgWAorKHBvd2VycGMtYXBwbGUtZGFyd2luMS40KSwgQ3lnd2luIChpNjg2LXBjLWN5Z3dpbiksIFNvbGFyaXMKKyhzcGFyYy1zdW4tc29sYXJpczIuNiksIFJlZEhhdCBMaW51eCA3LjEgYW5kIDkgKGk2ODYtcGMtbGludXgpLCBhbmQKK09wZW5CU0QgKHNwYXJjLXVua25vd24tb3BlbmJzZDIuNykuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzxhIG5hbWU9ImNoYW5naW5nLWJ1aWxkLWNvbmZpZ3VyYXRpb24iPjwvYT4KKyMjIENoYW5naW5nIEJ1aWxkIENvbmZpZ3VyYXRpb24KKworVG8gYnVpbGQgdGhlIGAuL2NvbmZpZ3VyZWAgc2NyaXB0IG1lbnRpb25lZCBhYm92ZSwgbGliU1JUUCByZWxpZXMgb24gdGhlCitbYXV0b21ha2VdKGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b21ha2UvKSB0b29sY2hhaW4uICBTaW5jZQorYC4vY29uZmlndXJlYCBpcyBidWlsdCBmcm9tIGBjb25maWd1cmUuaW5gIGJ5IGF1dG9tYWtlLCBpZiB5b3UgbWFrZSBjaGFuZ2VzIGluCitob3cgYC4vY29uZmlndXJlYCB3b3JrcyAoZS5nLiwgdG8gYWRkIGEgbmV3IGxpYnJhcnkgZGVwZW5kZW5jeSksIHlvdSB3aWxsIG5lZWQKK3RvIHJlYnVpbGQgYC4vY29uZmlndXJlYCBhbmQgY29tbWl0IHRoZSB1cGRhdGVkIHZlcnNpb24uICBJbiBhZGRpdGlvbiB0bworYXV0b21ha2UgaXRzZWxmLCB5b3Ugd2lsbCBuZWVkIHRvIGhhdmUgdGhlIGBwa2djb25maWdgIHRvb2xzIGluc3RhbGxlZCBhcyB3ZWxsLgorCitGb3IgZXhhbXBsZSwgb24gbWFjT1M6CisKK2BgYAorYnJldyBpbnN0YWxsIGF1dG9tYWtlIHBrZ2NvbmZpZworIyBFZGl0IGNvbmZpZ3VyZS5pbgorYXV0b3JlbWFrZSAtaXZmCitgYGAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzxhIG5hbWU9InVzaW5nLXZpc3VhbC1zdHVkaW8iPjwvYT4KKyMjIFVzaW5nIFZpc3VhbCBTdHVkaW8KKworT24gV2luZG93cyBvbmUgY2FuIHVzZSBWaXN1YWwgU3R1ZGlvIHZpYSBDTWFrZS4gQ01ha2UgY2FuIGJlIGRvd25sb2FkZWQgaGVyZToKK2h0dHBzOi8vY21ha2Uub3JnLyAuIFRvIGNyZWF0ZSBWaXN1YWwgU3R1ZGlvIGJ1aWxkIGZpbGVzLCBmb3IgZXhhbXBsZSBydW4gdGhlCitmb2xsb3dpbmcgY29tbWFuZHM6CisKK2BgYAorIyBDcmVhdGUgYnVpbGQgc3ViZGlyZWN0b3J5Citta2RpciBidWlsZAorY2QgYnVpbGQKKworIyBNYWtlIHByb2plY3QgZmlsZXMKK2NtYWtlIC4uIC1HICJWaXN1YWwgU3R1ZGlvIDE1IDIwMTciCisKKyMgT3IgZm9yIDY0IGJpdCBwcm9qZWN0IGZpbGVzCitjbWFrZSAuLiAtRyAiVmlzdWFsIFN0dWRpbyAxNSAyMDE3IFdpbjY0IgorYGBgCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzxhIG5hbWU9ImFwcGxpY2F0aW9ucyI+PC9hPgorIyBBcHBsaWNhdGlvbnMKKworU2V2ZXJhbCB0ZXN0IGRyaXZlcnMgYW5kIGEgc2ltcGxlIGFuZCBwb3J0YWJsZSBzcnRwIGFwcGxpY2F0aW9uIGFyZQoraW5jbHVkZWQgaW4gdGhlIGB0ZXN0L2Agc3ViZGlyZWN0b3J5LgorCitUZXN0IGRyaXZlciAgICAgfCBGdW5jdGlvbiB0ZXN0ZWQKKy0tLS0tLS0tLSAgICAgICB8IC0tLS0tLS0KK2tlcm5lbF9kcml2ZXIgICB8IGNyeXB0byBrZXJuZWwgKGNpcGhlcnMsIGF1dGggZnVuY3MsIHJuZykKK3NydHBfZHJpdmVyCSAgICB8IHNydHAgaW4tbWVtb3J5IHRlc3RzIChkb2VzIG5vdCB1c2UgdGhlIG5ldHdvcmspCityZGJ4X2RyaXZlcgkgICAgfCByZGJ4IChleHRlbmRlZCByZXBsYXkgZGF0YWJhc2UpCityb2NfZHJpdmVyCSAgICB8IGV4dGVuZGVkIHNlcXVlbmNlIG51bWJlciBmdW5jdGlvbnMKK3JlcGxheV9kcml2ZXIJICB8IHJlcGxheSBkYXRhYmFzZQorY2lwaGVyX2RyaXZlcgkgIHwgY2lwaGVycworYXV0aF9kcml2ZXIJICAgIHwgaGFzaCBmdW5jdGlvbnMKKworVGhlIGFwcCBgcnRwd2AgaXMgYSBzaW1wbGUgcnRwIGFwcGxpY2F0aW9uIHdoaWNoIHJlYWRzIHdvcmRzIGZyb20KK2AvdXNyL2RpY3Qvd29yZHNgIGFuZCB0aGVuIHNlbmRzIHRoZW0gb3V0IG9uZSBhdCBhIHRpbWUgdXNpbmcgW3NdcnRwLgorTWFudWFsIHNydHAga2V5aW5nIHVzZXMgdGhlIC1rIG9wdGlvbjsgYXV0b21hdGVkIGtleSBtYW5hZ2VtZW50Cit1c2luZyBnZG9pIHdpbGwgYmUgYWRkZWQgbGF0ZXIuCisKK3VzYWdlOgorfn5+LnR4dAorcnRwdyBbWy1kIDxkZWJ1Zz5dKiBbLWt8YiA8a2V5PiBbLWFdWy1lIDxrZXkgc2l6ZT5dWy1nXV0gWy1zIHwgLXJdIGRlc3RfaXAgZGVzdF9wb3J0XSB8IFstbF0KK35+fgorCitFaXRoZXIgdGhlIC1zIChzZW5kZXIpIG9yIC1yIChyZWNlaXZlcikgb3B0aW9uIG11c3QgYmUgY2hvc2VuLiAgVGhlCit2YWx1ZXMgYGRlc3RfaXBgLCBgZGVzdF9wb3J0YCBhcmUgdGhlIElQIGFkZHJlc3MgYW5kIFVEUCBwb3J0IHRvIHdoaWNoCit0aGUgZGljdGlvbmFyeSB3aWxsIGJlIHNlbnQsIHJlc3BlY3RpdmVseS4KKworVGhlIG9wdGlvbnMgYXJlOgorCitPcHRpb24gICAgICAgICB8IERlc2NyaXB0aW9uCistLS0tLS0tLS0gICAgICB8IC0tLS0tLS0KKyAgLXMgICAgICAgICAgIHwgKFMpUlRQIHNlbmRlciAtIGNhdXNlcyBhcHAgdG8gc2VuZCB3b3JkcworICAtciAgICAgICAgICAgfCAoUylSVFAgcmVjZWl2ZSAtIGNhdXNlcyBhcHAgdG8gcmVjZWl2ZSB3b3JkcworICAtayA8a2V5PiAgICAgfCB1c2UgU1JUUCBtYXN0ZXIga2V5IDxrZXk+LCB3aGVyZSB0aGUga2V5IGlzIGEgaGV4YWRlY2ltYWwgKHdpdGhvdXQgdGhlIGxlYWRpbmcgIjB4IikKKyAgLWIgPGtleT4gICAgIHwgc2FtZSBhcyAtayBidXQgd2l0aCBiYXNlNjQgZW5jb2RlZCBrZXkKKyAgLWUgPGtleXNpemU+IHwgZW5jcnlwdC9kZWNyeXB0IChmb3IgZGF0YSBjb25maWRlbnRpYWxpdHkpIChyZXF1aXJlcyB1c2Ugb2YgLWsgb3B0aW9uIGFzIHdlbGwpICh1c2UgMTI4LCAxOTIsIG9yIDI1NiBmb3Iga2V5c2l6ZSkKKyAgLWcgICAgICAgICAgIHwgdXNlIEFFUy1HQ00gbW9kZSAobXVzdCBiZSB1c2VkIHdpdGggLWUpCisgIC1hICAgICAgICAgICB8IG1lc3NhZ2UgYXV0aGVudGljYXRpb24gKHJlcXVpcmVzIHVzZSBvZiAtayBvcHRpb24gYXMgd2VsbCkKKyAgLWwgICAgICAgICAgIHwgbGlzdCB0aGUgYXZhaWxhYmxlIGRlYnVnIG1vZHVsZXMKKyAgLWQgPGRlYnVnPiAgIHwgdHVybiBvbiBkZWJ1Z2dpbmcgZm9yIG1vZHVsZSA8ZGVidWc+CisKK0luIG9yZGVyIHRvIGdldCByYW5kb20gMzAtYnl0ZSB2YWx1ZXMgZm9yIHVzZSBhcyBrZXkvc2FsdCBwYWlycyAsIHlvdQorY2FuIHVzZSB0aGUgZm9sbG93aW5nIGJhc2ggZnVuY3Rpb24gdG8gZm9ybWF0IHRoZSBvdXRwdXQgb2YKK2AvZGV2L3JhbmRvbWAgKHdoZXJlIHRoYXQgZGV2aWNlIGlzIGF2YWlsYWJsZSkuCisKK35+fi50eHQKK2Z1bmN0aW9uIHJhbmRoZXgoKSB7CisgICBjYXQgL2Rldi9yYW5kb20gfCBvZCAtLXJlYWQtYnl0ZXM9MzIgLS13aWR0aD0zMiAteCB8IGF3ayAneyBwcmludCAkMiAkMyAkNCAkNSAkNiAkNyAkOCAkOSAkMTAgJDExICQxMiAkMTMgJDE0ICQxNSAkMTYgfScKK30KK35+fgorCitBbiBleGFtcGxlIG9mIGFuIFNSVFAgc2Vzc2lvbiB1c2luZyB0d28gcnRwdyBwcm9ncmFtcyBmb2xsb3dzOgorCit+fn4udHh0CitzZXQgaz1jMWVlYzM3MTdkYTc2MTk1YmI4Nzg1Nzg3OTBhZjcxYzRlZTlmODU5ZTE5N2E0MTRhNzhkNWFiYzc0NTEKKworW3NoMV0kIHRlc3QvcnRwdyAtcyAtayAkayAtZSAxMjggLWEgMC4wLjAuMCA5OTk5CitTZWN1cml0eSBzZXJ2aWNlczogY29uZmlkZW50aWFsaXR5IG1lc3NhZ2UgYXV0aGVudGljYXRpb24KK3NldCBtYXN0ZXIga2V5L3NhbHQgdG8gQzFFRUMzNzE3REE3NjE5NUJCODc4NTc4NzkwQUY3MUMvNEVFOUY4NTlFMTk3QTQxNEE3OEQ1QUJDNzQ1MQorc2V0dGluZyBTU1JDIHRvIDIwNzg5MTcwNTMKK3NlbmRpbmcgd29yZDogQQorc2VuZGluZyB3b3JkOiBhCitzZW5kaW5nIHdvcmQ6IGFhCitzZW5kaW5nIHdvcmQ6IGFhbAorLi4uCisKK1tzaDJdJCB0ZXN0L3J0cHcgLXIgLWsgJGsgLWUgMTI4IC1hIDAuMC4wLjAgOTk5OQorc2VjdXJpdHkgc2VydmljZXM6IGNvbmZpZGVudGlhbGl0eSBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uCitzZXQgbWFzdGVyIGtleS9zYWx0IHRvIEMxRUVDMzcxN0RBNzYxOTVCQjg3ODU3ODc5MEFGNzFDLzRFRTlGODU5RTE5N0E0MTRBNzhENUFCQzc0NTEKKzE5IG9jdGV0cyByZWNlaXZlZCBmcm9tIFNTUkMgMjA3ODkxNzA1MyB3b3JkOiBBCisxOSBvY3RldHMgcmVjZWl2ZWQgZnJvbSBTU1JDIDIwNzg5MTcwNTMgd29yZDogYQorMjAgb2N0ZXRzIHJlY2VpdmVkIGZyb20gU1NSQyAyMDc4OTE3MDUzIHdvcmQ6IGFhCisyMSBvY3RldHMgcmVjZWl2ZWQgZnJvbSBTU1JDIDIwNzg5MTcwNTMgd29yZDogYWFsCisuLi4KK35+fgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis8YSBuYW1lPSJleGFtcGxlLWNvZGUiPjwvYT4KKyMjIEV4YW1wbGUgQ29kZQorCitUaGlzIHNlY3Rpb24gcHJvdmlkZXMgYSBzaW1wbGUgZXhhbXBsZSBvZiBob3cgdG8gdXNlIGxpYlNSVFAuIFRoZQorZXhhbXBsZSBjb2RlIGxhY2tzIGVycm9yIGNoZWNraW5nLCBidXQgaXMgZnVuY3Rpb25hbC4gSGVyZSB3ZSBhc3N1bWUKK3RoYXQgdGhlIHZhbHVlIHNzcmMgaXMgYWxyZWFkeSBzZXQgdG8gZGVzY3JpYmUgdGhlIFNTUkMgb2YgdGhlIHN0cmVhbQordGhhdCB3ZSBhcmUgc2VuZGluZywgYW5kIHRoYXQgdGhlIGZ1bmN0aW9ucyBgZ2V0X3J0cF9wYWNrZXQoKWAgYW5kCitgc2VuZF9zcnRwX3BhY2tldCgpYCBhcmUgYXZhaWxhYmxlIHRvIHVzLiBUaGUgZm9ybWVyIHB1dHMgYW4gUlRQIHBhY2tldAoraW50byB0aGUgYnVmZmVyIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2Ygb2N0ZXRzIHdyaXR0ZW4gdG8gdGhhdAorYnVmZmVyLiBUaGUgbGF0dGVyIHNlbmRzIHRoZSBSVFAgcGFja2V0IGluIHRoZSBidWZmZXIsIGdpdmVuIHRoZQorbGVuZ3RoIGFzIGl0cyBzZWNvbmQgYXJndW1lbnQuCisKK35+fi5jCitzcnRwX3Qgc2Vzc2lvbjsKK3NydHBfcG9saWN5X3QgcG9saWN5OworCisvLyBTZXQga2V5IHRvIHByZWRldGVybWluZWQgdmFsdWUKK3VpbnQ4X3Qga2V5WzMwXSA9IHsweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAgICAgICAgICAgICAgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywKKyAgICAgICAgICAgICAgICAgICAweDE4LCAweDE5LCAweDFBLCAweDFCLCAweDFDLCAweDFEfTsKKworLy8gaW5pdGlhbGl6ZSBsaWJTUlRQCitzcnRwX2luaXQoKTsKKworLy8gZGVmYXVsdCBwb2xpY3kgdmFsdWVzCittZW1zZXQoJnBvbGljeSwgMHgwLCBzaXplb2Yoc3J0cF9wb2xpY3lfdCkpOworCisvLyBzZXQgcG9saWN5IHRvIGRlc2NyaWJlIGEgcG9saWN5IGZvciBhbiBTUlRQIHN0cmVhbQorc3J0cF9jcnlwdG9fcG9saWN5X3NldF9ydHBfZGVmYXVsdCgmcG9saWN5LnJ0cCk7CitzcnRwX2NyeXB0b19wb2xpY3lfc2V0X3J0Y3BfZGVmYXVsdCgmcG9saWN5LnJ0Y3ApOworcG9saWN5LnNzcmMgPSBzc3JjOworcG9saWN5LmtleSAgPSBrZXk7Citwb2xpY3kubmV4dCA9IE5VTEw7CisKKy8vIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBTUlRQIHNlc3Npb24KK3NydHBfY3JlYXRlKCZzZXNzaW9uLCAmcG9saWN5KTsKKworLy8gbWFpbiBsb29wOiBnZXQgcnRwIHBhY2tldHMsIHNlbmQgc3J0cCBwYWNrZXRzCit3aGlsZSAoMSkgeworICBjaGFyIHJ0cF9idWZmZXJbMjA0OF07CisgIHVuc2lnbmVkIGxlbjsKKworICBsZW4gPSBnZXRfcnRwX3BhY2tldChydHBfYnVmZmVyKTsKKyAgc3J0cF9wcm90ZWN0KHNlc3Npb24sIHJ0cF9idWZmZXIsICZsZW4pOworICBzZW5kX3NydHBfcGFja2V0KHJ0cF9idWZmZXIsIGxlbik7Cit9Cit+fn4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPGEgbmFtZT0iY3JlZGl0cyI+PC9hPgorIyBDcmVkaXRzCisKK1RoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBhbmQgZG9jdW1lbnRhdGlvbiBvZiBsaWJTUlRQIHdhcyB3cml0dGVuCitieSBEYXZpZCBNY0dyZXcgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBpbiBvcmRlciB0byBwcm9tb3RlIHRoZSB1c2UsCit1bmRlcnN0YW5kaW5nLCBhbmQgaW50ZXJvcGVyYWJpbGl0eSBvZiBTZWN1cmUgUlRQLiBNaWNoYWVsIEplcnJpcworY29udHJpYnV0ZWQgc3VwcG9ydCBmb3IgYnVpbGRpbmcgdW5kZXIgTVNWQy4gQW5kcmlzIFBhdmVuaXMKK2NvbnRyaWJ1dGVkIG1hbnkgaW1wb3J0YW50IGZpeGVzLiBCcmlhbiBXZXN0IGNvbnRyaWJ1dGVkIGNoYW5nZXMgdG8KK2VuYWJsZSBkeW5hbWljIGxpbmtpbmcuIFl2ZXMgU2h1bWFubiByZXBvcnRlZCBkb2N1bWVudGF0aW9uIGJ1Z3MuCitSYW5kZWxsIEplc3VwIGNvbnRyaWJ1dGVkIGEgd29ya2luZyBTUlRDUCBpbXBsZW1lbnRhdGlvbiBhbmQgb3RoZXIKK2ZpeGVzLiBTdGV2ZSBVbmRlcndvb2QgY29udHJpYnV0ZWQgeDg2XzY0IHBvcnRhYmlsaXR5IGNoYW5nZXMuIFdlIGFsc28gZ2l2ZQordGhhbmtzIHRvIEZyZWRyaWsgVGh1bGluLCBCcmlhbiBXZWlzLCBNYXJrIEJhdWdoZXIsIEplZmYgQ2hhbiwgQmlsbAorU2ltb24sIERvdWdsYXMgU21pdGgsIEJpbGwgTWF5LCBSaWNoYXJkIFByZWlzdGxleSwgSm9lIFRhcmRvIGFuZAorb3RoZXJzIGZvciBjb250cmlidXRpb25zLCBjb21tZW50cywgYW5kIGNvcnJlY3Rpb25zLgorCitUaGlzIHJlZmVyZW5jZSBtYXRlcmlhbCwgd2hlbiBhcHBsaWNhYmxlLCBpbiB0aGlzIGRvY3VtZW5hdGlvbiB3YXMgZ2VuZXJhdGVkCit1c2luZyB0aGUgZG94eWdlbiB1dGlsaXR5IGZvciBhdXRvbWF0aWMgZG9jdW1lbnRhdGlvbiBvZiBzb3VyY2UgY29kZS4KKworQ29weXJpZ2h0IDIwMDEtMjAwNSBieSBEYXZpZCBBLiBNY0dyZXcsIENpc2NvIFN5c3RlbXMsIEluYy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPGEgbmFtZT0icmVmZXJlbmNlcyI+PC9hPgorIyBSZWZlcmVuY2VzCisKK1NSVFAgYW5kIElDTSBSZWZlcmVuY2VzCitTZXB0ZW1iZXIsIDIwMDUKKworU2VjdXJlIFJUUCBpcyBkZWZpbmVkIGluIFtSRkMgMzcxMV0oaHR0cHM6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzM3MTEudHh0KS4KK1RoZSBjb3VudGVyIG1vZGUgZGVmaW5pdGlvbiBpcyBpbiBTZWN0aW9uIDQuMS4xLgorCitTSEEtMSBpcyBkZWZpbmVkIGluIFtGSVBTIFBVQiAxODAtNF0oaHR0cDovL252bHB1YnMubmlzdC5nb3YvbmlzdHB1YnMvRklQUy9OSVNULkZJUFMuMTgwLTQucGRmKS4KKworSE1BQyBpcyBkZWZpbmVkIGluIFtSRkMgMjEwNF0oaHR0cHM6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzIxMDQudHh0KQorYW5kIEhNQUMtU0hBMSB0ZXN0IHZlY3RvcnMgYXJlIGF2YWlsYWJsZQoraW4gW1JGQyAyMjAyXShodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjIwMi50eHQpLgorCitBRVMtR0NNIHVzYWdlIGluIFNSVFAgaXMgZGVmaW5lZCBpbiBbUkZDIDc3MTRdKGh0dHBzOi8vd3d3LmlldGYub3JnL2h0bWwvcmZjNzcxNCkKZGlmZiAtLWdpdCBhL1RPRE8gYi9UT0RPCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmU0NzBhLi4wMDAwMDAwCi0tLSBhL1RPRE8KKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi1UT0RPIExpc3QKLQotICAtIGFkZCB0ZXN0cyBmb3Iga2V5X2xpbWl0X3QgZGF0YXR5cGUgCi0KLSAgLSBtb3ZlIG9jdGV0X2dldF93ZWlnaHQoKSBmcm9tIGRhdGF0eXBlcy5jIHRvIG1hdGguYyAoYW55IG90aGVyCi0gICAgZnVuY3M/KQotCi1DaGFuZ2VzIGFuZCBhZGRpdGlvbnMgcGxhbm5lZAotCi0gIE1ha2UgY2lwaGVyIGFuZCBhdXRoIGRlYWxsb2MoKSBmdW5jdGlvbnMgemVyb2l6ZSB0aGUga2V5LXN0b3JhZ2UKLSAgYXJlYXMgYmVmb3JlIGNhbGxpbmcgZnJlZSgpLgotCi0gIEZpeCBVU1QKLSAgICAtIGltcGxlbWVudCBzY2F0dGVyL2dhdGhlciBBUEkKLSAgICAtIFNSVFAgdXNpbmcgVVNUCi0gICAgLSBwb3NzaWJseSBhZGQgbGVnYWN5IFNIQTEgdXNhZ2UKLQotICBFbGltaW5hdGUga2V5X2xlbiBmcm9tIGF1dGhfaW5pdCgpCi0KLSAgRG91Y3VtZW50IGludGVybmFsIEFQSXMgKGNpcGhlciwgYXV0aCwgc3J0cF9wcm90ZWN0LCAuLi4pCi0KLQotU1JUUCBvcHRpb25zIG5vdCAoeWV0KSBpbmNsdWRlZCBpbiB0aGlzIGxpYmFyYXk6Ci0KLSAtIHRoZSBhZXMtZjgtbW9kZSBjaXBoZXIKLSAtIEhNQUMtU0hBLTEKLSAtIHRoZSBNYXN0ZXIgS2V5IEluZGV4Ci0gLSByZS1rZXlpbmcgdXNpbmcgdGhlIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uIChvbmx5IHRoZSBpbml0aWFsCi0gICB1c2Ugb2YgdGhlIFBSRiBoYXMgYmVlbiBpbXBsZW1lbnRlZCwgYXMgaXQncyBzdWZmaWNpZW50Ci0gICBmb3IgbW9zdCB1c2VzKQotCi1JTkNPTVBMRVRFIEFERElUSU9OUwotCi0gICBBZGRlZCBERVMgYW5kIDNERVMgSUNNLgotCi0KLVBMQU5ORUQgQ0hBTkdFUwotCi0gICBzdHJpcCBvdXQgdGVzdC9sZnNyLmMKLQotICAgV3JpdGUgbmV3IGRvY3VtZW50YXRpb24hISEKLQotICAgRml4IHRoZSB4ODYgYXNzZW1ibHkgY29kZSBpbiBhZXMuYy4KLQotICAgRWxpbWluYXRlIC8qIERBTSAqLyAtIHRoZXJlJ3Mgb25lIGluIHNydHAuYwotCi0gICBDaGFuZ2UgZGVidWdnaW5nIHNvIHRoYXQgaXQgY2FuIHByaW50IG1vcmUgdGhhbiBvbmUgbGluZS4gIE9yIHBlcmhhcHMKLSAgIGp1c3QgY2hhbmdlIGl0IHNvIHRoYXQgYSBzaW5nbGUgY2hlY2sgb2YgdGhlIGRlYnVnLWVuYWJsZWQgZmxhZyBpcwotICAgbmVlZGVkLgotCi0gICBJbXByb3ZlIGludGVyZmFjZSBiZXR3ZWVuIGNpcGhlciBhbmQgcmRieCAtIHBlcmhhcHMgZ2VuZXJhbGl6ZSByZGJ4Ci0gICBpbnRvICdub25jZScgZGF0YXR5cGUuCi0KLSAgIE1ha2UgcmlqbmRhZWxfaWNtIGFjY2VwdCB2YXJpYWJsZSBzaXplZCBrZXlzLgotCi0gICBBZGQgcmRieCBmdW5jdGlvbnMgdGhhdCBhbGxvdyBkaWZmZXJlbnQtc2l6ZWQgZXhwbGljaXQgc2VxdWVuY2UKLSAgIG51bWJlcnMgdG8gYmUgdXNlZC4KLQotICAgV3JpdGUgdW5pZm9ybSBieXRlLWJ1ZmZlcmluZyBjb2RlIGZvciBQUkZzLCBwcmVmZXJhYmx5IGFzIG1hY3Jvcy4KLQotICAgQ29uc2lkZXIgZWxpbWluYXRpbmcgbG93LWxldmVsIGFsbG9jIGZ1bmN0aW9ucyBpbiBmYXZvciBvZiBsZW4oKQotICAgZnVuY3Rpb25zLCBzbyB0aGF0IHRoZXJlIG5lZWQgbm90IGJlIG11bHRpcGxlIGFsbG9jYXRpb25zIHdpdGhpbiBhCi0gICBwYXJ0aWN1bGFyIGFsbG9jKCkgZnVuY3Rpb24uCi0KLSAgIFVwZGF0ZSB0ZXN0L3N0YXQtZHJpdmVyLmMgc28gdGhhdCBpdCB0ZXN0cyB0aGUgcmFuZF9zb3VyY2UgQVBJLgotICAgQWRkIGEgcHNldWRvcmFuZG9tIHJhbmRfc291cmNlLgpkaWZmIC0tZ2l0IGEvVkVSU0lPTiBiL1ZFUlNJT04KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4YzVmYjguLjAwMDAwMDAKLS0tIGEvVkVSU0lPTgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTEuNC4wCmRpZmYgLS1naXQgYS9jb25maWcuZ3Vlc3MgYi9jb25maWcuZ3Vlc3MKaW5kZXggMGNlNTM4Yi4uYzRiZDgyNyAxMDA3NTUKLS0tIGEvY29uZmlnLmd1ZXNzCisrKyBiL2NvbmZpZy5ndWVzcwpAQCAtMSwxMSArMSwxMiBAQAogIyEgL2Jpbi9zaAogIyBBdHRlbXB0IHRvIGd1ZXNzIGEgY2Fub25pY2FsIHN5c3RlbSBuYW1lLgotIyAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMAotIyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIworIyAgIENvcHlyaWdodCAxOTkyLTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK3RpbWVzdGFtcD0nMjAxNi0wNS0xNScKKwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogIwogIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CkBAIC0xNCwyMDAgKzE1LDM0MiBAQAogIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAjCiAjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAjCiAjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKICMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCiAjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCi0jIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KLQotIyBXcml0dGVuIGJ5IFBlciBCb3RobmVyIDxib3RobmVyQGN5Z251cy5jb20+LgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0CisjIHByb2dyYW0uICBUaGlzIEV4Y2VwdGlvbiBpcyBhbiBhZGRpdGlvbmFsIHBlcm1pc3Npb24gdW5kZXIgc2VjdGlvbiA3CisjIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAzICgiR1BMdjMiKS4KKyMKKyMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyOyBtYWludGFpbmVkIHNpbmNlIDIwMDAgYnkgQmVuIEVsbGlzdG9uLgorIworIyBZb3UgY2FuIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBzY3JpcHQgZnJvbToKKyMgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5ndWVzcworIwogIyBQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4KLSMKLSMgVGhpcyBzY3JpcHQgYXR0ZW1wdHMgdG8gZ3Vlc3MgYSBjYW5vbmljYWwgc3lzdGVtIG5hbWUgc2ltaWxhciB0bwotIyBjb25maWcuc3ViLiAgSWYgaXQgc3VjY2VlZHMsIGl0IHByaW50cyB0aGUgc3lzdGVtIG5hbWUgb24gc3Rkb3V0LCBhbmQKLSMgZXhpdHMgd2l0aCAwLiAgT3RoZXJ3aXNlLCBpdCBleGl0cyB3aXRoIDEuCi0jCi0jIFRoZSBwbGFuIGlzIHRoYXQgdGhpcyBjYW4gYmUgY2FsbGVkIGJ5IGNvbmZpZ3VyZSBzY3JpcHRzIGlmIHlvdQotIyBkb24ndCBzcGVjaWZ5IGFuIGV4cGxpY2l0IHN5c3RlbSB0eXBlIChob3N0L3RhcmdldCBuYW1lKS4KLSMKLSMgT25seSBhIGZldyBzeXN0ZW1zIGhhdmUgYmVlbiBhZGRlZCB0byB0aGlzIGxpc3Q7IHBsZWFzZSBhZGQgb3RoZXJzCi0jIChidXQgdHJ5IHRvIGtlZXAgdGhlIHN0cnVjdHVyZSBjbGVhbikuCi0jCiAKLSMgVXNlICRIT1NUX0NDIGlmIGRlZmluZWQuICRDQyBtYXkgcG9pbnQgdG8gYSBjcm9zcy1jb21waWxlcgotaWYgdGVzdCB4IiRDQ19GT1JfQlVJTEQiID0geDsgdGhlbgotICBpZiB0ZXN0IHgiJEhPU1RfQ0MiICE9IHg7IHRoZW4KLSAgICBDQ19GT1JfQlVJTEQ9IiRIT1NUX0NDIgotICBlbHNlCi0gICAgaWYgdGVzdCB4IiRDQyIgIT0geDsgdGhlbgotICAgICAgQ0NfRk9SX0JVSUxEPSIkQ0MiCi0gICAgZWxzZQotICAgICAgQ0NfRk9SX0JVSUxEPWNjCi0gICAgZmkKLSAgZmkKKworbWU9YGVjaG8gIiQwIiB8IHNlZCAtZSAncywuKi8sLCdgCisKK3VzYWdlPSJcCitVc2FnZTogJDAgW09QVElPTl0KKworT3V0cHV0IHRoZSBjb25maWd1cmF0aW9uIG5hbWUgb2YgdGhlIHN5c3RlbSBcYCRtZScgaXMgcnVuIG9uLgorCitPcGVyYXRpb24gbW9kZXM6CisgIC1oLCAtLWhlbHAgICAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorICAtdCwgLS10aW1lLXN0YW1wICAgcHJpbnQgZGF0ZSBvZiBsYXN0IG1vZGlmaWNhdGlvbiwgdGhlbiBleGl0CisgIC12LCAtLXZlcnNpb24gICAgICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisKK1JlcG9ydCBidWdzIGFuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4iCisKK3ZlcnNpb249IlwKK0dOVSBjb25maWcuZ3Vlc3MgKCR0aW1lc3RhbXApCisKK09yaWdpbmFsbHkgd3JpdHRlbiBieSBQZXIgQm90aG5lci4KK0NvcHlyaWdodCAxOTkyLTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCisKK2hlbHA9IgorVHJ5IFxgJG1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorCisjIFBhcnNlIGNvbW1hbmQgbGluZQord2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLXRpbWUtc3RhbXAgfCAtLXRpbWUqIHwgLXQgKQorICAgICAgIGVjaG8gIiR0aW1lc3RhbXAiIDsgZXhpdCA7OworICAgIC0tdmVyc2lvbiB8IC12ICkKKyAgICAgICBlY2hvICIkdmVyc2lvbiIgOyBleGl0IDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKyAgICAgICBlY2hvICIkdXNhZ2UiOyBleGl0IDs7CisgICAgLS0gKSAgICAgIyBTdG9wIG9wdGlvbiBwcm9jZXNzaW5nCisgICAgICAgc2hpZnQ7IGJyZWFrIDs7CisgICAgLSApCSMgVXNlIHN0ZGluIGFzIGlucHV0LgorICAgICAgIGJyZWFrIDs7CisgICAgLSogKQorICAgICAgIGVjaG8gIiRtZTogaW52YWxpZCBvcHRpb24gJDEkaGVscCIgPiYyCisgICAgICAgZXhpdCAxIDs7CisgICAgKiApCisgICAgICAgYnJlYWsgOzsKKyAgZXNhYworZG9uZQorCitpZiB0ZXN0ICQjICE9IDA7IHRoZW4KKyAgZWNobyAiJG1lOiB0b28gbWFueSBhcmd1bWVudHMkaGVscCIgPiYyCisgIGV4aXQgMQogZmkKIAordHJhcCAnZXhpdCAxJyAxIDIgMTUKKworIyBDQ19GT1JfQlVJTEQgLS0gY29tcGlsZXIgdXNlZCBieSB0aGlzIHNjcmlwdC4gTm90ZSB0aGF0IHRoZSB1c2Ugb2YgYQorIyBjb21waWxlciB0byBhaWQgaW4gc3lzdGVtIGRldGVjdGlvbiBpcyBkaXNjb3VyYWdlZCBhcyBpdCByZXF1aXJlcworIyB0ZW1wb3JhcnkgZmlsZXMgdG8gYmUgY3JlYXRlZCBhbmQsIGFzIHlvdSBjYW4gc2VlIGJlbG93LCBpdCBpcyBhCisjIGhlYWRhY2hlIHRvIGRlYWwgd2l0aCBpbiBhIHBvcnRhYmxlIGZhc2hpb24uCisKKyMgSGlzdG9yaWNhbGx5LCBgQ0NfRk9SX0JVSUxEJyB1c2VkIHRvIGJlIG5hbWVkIGBIT1NUX0NDJy4gV2Ugc3RpbGwKKyMgdXNlIGBIT1NUX0NDJyBpZiBkZWZpbmVkLCBidXQgaXQgaXMgZGVwcmVjYXRlZC4KKworIyBQb3J0YWJsZSB0bXAgZGlyZWN0b3J5IGNyZWF0aW9uIGluc3BpcmVkIGJ5IHRoZSBBdXRvY29uZiB0ZWFtLgorCitzZXRfY2NfZm9yX2J1aWxkPScKK3RyYXAgImV4aXRjb2RlPVwkPzsgKHJtIC1mIFwkdG1wZmlsZXMgMj4vZGV2L251bGw7IHJtZGlyIFwkdG1wIDI+L2Rldi9udWxsKSAmJiBleGl0IFwkZXhpdGNvZGUiIDAgOwordHJhcCAicm0gLWYgXCR0bXBmaWxlcyAyPi9kZXYvbnVsbDsgcm1kaXIgXCR0bXAgMj4vZGV2L251bGw7IGV4aXQgMSIgMSAyIDEzIDE1IDsKKzogJHtUTVBESVI9L3RtcH0gOworIHsgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiJFRNUERJUi9jZ1hYWFhYWCIpIDI+L2Rldi9udWxsYCAmJiB0ZXN0IC1uICIkdG1wIiAmJiB0ZXN0IC1kICIkdG1wIiA7IH0gfHwKKyB7IHRlc3QgLW4gIiRSQU5ET00iICYmIHRtcD0kVE1QRElSL2NnJCQtJFJBTkRPTSAmJiAodW1hc2sgMDc3ICYmIG1rZGlyICR0bXApIDsgfSB8fAorIHsgdG1wPSRUTVBESVIvY2ctJCQgJiYgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKSAmJiBlY2hvICJXYXJuaW5nOiBjcmVhdGluZyBpbnNlY3VyZSB0ZW1wIGRpcmVjdG9yeSIgPiYyIDsgfSB8fAorIHsgZWNobyAiJG1lOiBjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAkVE1QRElSIiA+JjIgOyBleGl0IDEgOyB9IDsKK2R1bW15PSR0bXAvZHVtbXkgOwordG1wZmlsZXM9IiRkdW1teS5jICRkdW1teS5vICRkdW1teS5yZWwgJGR1bW15IiA7CitjYXNlICRDQ19GT1JfQlVJTEQsJEhPU1RfQ0MsJENDIGluCisgLCwpICAgIGVjaG8gImludCB4OyIgPiAkZHVtbXkuYyA7CisJZm9yIGMgaW4gY2MgZ2NjIGM4OSBjOTkgOyBkbworCSAgaWYgKCRjIC1jIC1vICRkdW1teS5vICRkdW1teS5jKSA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisJICAgICBDQ19GT1JfQlVJTEQ9IiRjIjsgYnJlYWsgOworCSAgZmkgOworCWRvbmUgOworCWlmIHRlc3QgeCIkQ0NfRk9SX0JVSUxEIiA9IHggOyB0aGVuCisJICBDQ19GT1JfQlVJTEQ9bm9fY29tcGlsZXJfZm91bmQgOworCWZpCisJOzsKKyAsLCopICAgQ0NfRk9SX0JVSUxEPSRDQyA7OworICwqLCopICBDQ19GT1JfQlVJTEQ9JEhPU1RfQ0MgOzsKK2VzYWMgOyBzZXRfY2NfZm9yX2J1aWxkPSA7JwogCiAjIFRoaXMgaXMgbmVlZGVkIHRvIGZpbmQgdW5hbWUgb24gYSBQeXJhbWlkIE9TeCB3aGVuIHJ1biBpbiB0aGUgQlNEIHVuaXZlcnNlLgotIyAoZ2hhemlAbm9jLnJ1dGdlcnMuZWR1IDgvMjQvOTQuKQorIyAoZ2hhemlAbm9jLnJ1dGdlcnMuZWR1IDE5OTQtMDgtMjQpCiBpZiAodGVzdCAtZiAvLmF0dGJpbi91bmFtZSkgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgogCVBBVEg9JFBBVEg6Ly5hdHRiaW4gOyBleHBvcnQgUEFUSAogZmkKIAogVU5BTUVfTUFDSElORT1gKHVuYW1lIC1tKSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfTUFDSElORT11bmtub3duCiBVTkFNRV9SRUxFQVNFPWAodW5hbWUgLXIpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9SRUxFQVNFPXVua25vd24KLVVOQU1FX1NZU1RFTT1gKHVuYW1lIC1zKSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfU1lTVEVNPXVua25vd24KK1VOQU1FX1NZU1RFTT1gKHVuYW1lIC1zKSAyPi9kZXYvbnVsbGAgIHx8IFVOQU1FX1NZU1RFTT11bmtub3duCiBVTkFNRV9WRVJTSU9OPWAodW5hbWUgLXYpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9WRVJTSU9OPXVua25vd24KIAotZHVtbXk9ZHVtbXktJCQKLXRyYXAgJ3JtIC1mICRkdW1teS5jICRkdW1teS5vICRkdW1teTsgZXhpdCAxJyAxIDIgMTUKK2Nhc2UgIiR7VU5BTUVfU1lTVEVNfSIgaW4KK0xpbnV4fEdOVXxHTlUvKikKKwkjIElmIHRoZSBzeXN0ZW0gbGFja3MgYSBjb21waWxlciwgdGhlbiBqdXN0IHBpY2sgZ2xpYmMuCisJIyBXZSBjb3VsZCBwcm9iYWJseSB0cnkgaGFyZGVyLgorCUxJQkM9Z251CisKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJY2F0IDw8LUVPRiA+ICRkdW1teS5jCisJI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisJI2lmIGRlZmluZWQoX19VQ0xJQkNfXykKKwlMSUJDPXVjbGliYworCSNlbGlmIGRlZmluZWQoX19kaWV0bGliY19fKQorCUxJQkM9ZGlldGxpYmMKKwkjZWxzZQorCUxJQkM9Z251CisJI2VuZGlmCisJRU9GCisJZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgJ15MSUJDJyB8IHNlZCAncywgLCxnJ2AKKwk7OworZXNhYwogCiAjIE5vdGU6IG9yZGVyIGlzIHNpZ25pZmljYW50IC0gdGhlIGNhc2UgYnJhbmNoZXMgYXJlIG5vdCBleGNsdXNpdmUuCiAKIGNhc2UgIiR7VU5BTUVfTUFDSElORX06JHtVTkFNRV9TWVNURU19OiR7VU5BTUVfUkVMRUFTRX06JHtVTkFNRV9WRVJTSU9OfSIgaW4KICAgICAqOk5ldEJTRDoqOiopCi0JIyBOZXRic2QgKG5ic2QpIHRhcmdldHMgc2hvdWxkICh3aGVyZSBhcHBsaWNhYmxlKSBtYXRjaCBvbmUgb3IKLQkjIG1vcmUgb2YgdGhlIHR1cHBsZXM6ICotKi1uZXRic2RlbGYqLCAqLSotbmV0YnNkYW91dCosCisJIyBOZXRCU0QgKG5ic2QpIHRhcmdldHMgc2hvdWxkICh3aGVyZSBhcHBsaWNhYmxlKSBtYXRjaCBvbmUgb3IKKwkjIG1vcmUgb2YgdGhlIHR1cGxlczogKi0qLW5ldGJzZGVsZiosICotKi1uZXRic2Rhb3V0KiwKIAkjICotKi1uZXRic2RlY29mZiogYW5kICotKi1uZXRic2QqLiAgRm9yIHRhcmdldHMgdGhhdCByZWNlbnRseQogCSMgc3dpdGNoZWQgdG8gRUxGLCAqLSotbmV0YnNkKiB3b3VsZCBzZWxlY3QgdGhlIG9sZAogCSMgb2JqZWN0IGZpbGUgZm9ybWF0LiAgVGhpcyBwcm92aWRlcyBib3RoIGZvcndhcmQKIAkjIGNvbXBhdGliaWxpdHkgYW5kIGEgY29uc2lzdGVudCBtZWNoYW5pc20gZm9yIHNlbGVjdGluZyB0aGUKIAkjIG9iamVjdCBmaWxlIGZvcm1hdC4KLQkjIERldGVybWluZSB0aGUgbWFjaGluZS92ZW5kb3IgKGlzIHRoZSB2ZW5kb3IgcmVsZXZhbnQpLgotCWNhc2UgIiR7VU5BTUVfTUFDSElORX0iIGluCi0JICAgIGFtaWdhKSBtYWNoaW5lPW02OGstY2JtIDs7Ci0JICAgIGFybTMyKSBtYWNoaW5lPWFybS11bmtub3duIDs7Ci0JICAgIGF0YXJpKikgbWFjaGluZT1tNjhrLWF0YXJpIDs7Ci0JICAgIHN1bjMqKSBtYWNoaW5lPW02OGstc3VuIDs7Ci0JICAgIG1hYzY4aykgbWFjaGluZT1tNjhrLWFwcGxlIDs7Ci0JICAgIG1hY3BwYykgbWFjaGluZT1wb3dlcnBjLWFwcGxlIDs7Ci0JICAgIGhwM1swLTldWzA1XSkgbWFjaGluZT1tNjhrLWhwIDs7Ci0JICAgIGlibXJ0fHJvbXAtaWJtKSBtYWNoaW5lPXJvbXAtaWJtIDs7Ci0JICAgICopIG1hY2hpbmU9JHtVTkFNRV9NQUNISU5FfS11bmtub3duIDs7CisJIworCSMgTm90ZTogTmV0QlNEIGRvZXNuJ3QgcGFydGljdWxhcmx5IGNhcmUgYWJvdXQgdGhlIHZlbmRvcgorCSMgcG9ydGlvbiBvZiB0aGUgbmFtZS4gIFdlIGFsd2F5cyBzZXQgaXQgdG8gInVua25vd24iLgorCXN5c2N0bD0ic3lzY3RsIC1uIGh3Lm1hY2hpbmVfYXJjaCIKKwlVTkFNRV9NQUNISU5FX0FSQ0g9YCh1bmFtZSAtcCAyPi9kZXYvbnVsbCB8fCBcCisJICAgIC9zYmluLyRzeXNjdGwgMj4vZGV2L251bGwgfHwgXAorCSAgICAvdXNyL3NiaW4vJHN5c2N0bCAyPi9kZXYvbnVsbCB8fCBcCisJICAgIGVjaG8gdW5rbm93bilgCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FX0FSQ0h9IiBpbgorCSAgICBhcm1lYikgbWFjaGluZT1hcm1lYi11bmtub3duIDs7CisJICAgIGFybSopIG1hY2hpbmU9YXJtLXVua25vd24gOzsKKwkgICAgc2gzZWwpIG1hY2hpbmU9c2hsLXVua25vd24gOzsKKwkgICAgc2gzZWIpIG1hY2hpbmU9c2gtdW5rbm93biA7OworCSAgICBzaDVlbCkgbWFjaGluZT1zaDVsZS11bmtub3duIDs7CisJICAgIGVhcm12KikKKwkJYXJjaD1gZWNobyAke1VOQU1FX01BQ0hJTkVfQVJDSH0gfCBzZWQgLWUgJ3MsXmVcKGFybXZbMC05XVwpLiokLFwxLCdgCisJCWVuZGlhbj1gZWNobyAke1VOQU1FX01BQ0hJTkVfQVJDSH0gfCBzZWQgLW5lICdzLF4uKlwoZWJcKSQsXDEscCdgCisJCW1hY2hpbmU9JHthcmNofSR7ZW5kaWFufS11bmtub3duCisJCTs7CisJICAgICopIG1hY2hpbmU9JHtVTkFNRV9NQUNISU5FX0FSQ0h9LXVua25vd24gOzsKIAllc2FjCi0JIyBUaGUgT3BlcmF0aW5nIFN5c3RlbSBpbmNsdWRpbmcgb2JqZWN0IGZvcm1hdC4KLQlpZiBlY2hvIF9fRUxGX18gfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAotCQl8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsCi0JdGhlbgotCSAgICAjIE9uY2UgYWxsIHV0aWxpdGllcyBjYW4gYmUgRUNPRkYgKG5ldGJzZGVjb2ZmKSBvciBhLm91dCAobmV0YnNkYW91dCkuCi0JICAgICMgUmV0dXJuIG5ldGJzZCBmb3IgZWl0aGVyLiAgRklYPwotCSAgICBvcz1uZXRic2QKLQllbHNlCi0JICAgIG9zPW5ldGJzZGVsZgotCWZpCisJIyBUaGUgT3BlcmF0aW5nIFN5c3RlbSBpbmNsdWRpbmcgb2JqZWN0IGZvcm1hdCwgaWYgaXQgaGFzIHN3aXRjaGVkCisJIyB0byBFTEYgcmVjZW50bHkgKG9yIHdpbGwgaW4gdGhlIGZ1dHVyZSkgYW5kIEFCSS4KKwljYXNlICIke1VOQU1FX01BQ0hJTkVfQVJDSH0iIGluCisJICAgIGVhcm0qKQorCQlvcz1uZXRic2RlbGYKKwkJOzsKKwkgICAgYXJtKnxpMzg2fG02OGt8bnMzMmt8c2gzKnxzcGFyY3x2YXgpCisJCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJaWYgZWNobyBfX0VMRl9fIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKKwkJCXwgZ3JlcCAtcSBfX0VMRl9fCisJCXRoZW4KKwkJICAgICMgT25jZSBhbGwgdXRpbGl0aWVzIGNhbiBiZSBFQ09GRiAobmV0YnNkZWNvZmYpIG9yIGEub3V0IChuZXRic2Rhb3V0KS4KKwkJICAgICMgUmV0dXJuIG5ldGJzZCBmb3IgZWl0aGVyLiAgRklYPworCQkgICAgb3M9bmV0YnNkCisJCWVsc2UKKwkJICAgIG9zPW5ldGJzZGVsZgorCQlmaQorCQk7OworCSAgICAqKQorCQlvcz1uZXRic2QKKwkJOzsKKwllc2FjCisJIyBEZXRlcm1pbmUgQUJJIHRhZ3MuCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FX0FSQ0h9IiBpbgorCSAgICBlYXJtKikKKwkJZXhwcj0ncy9eZWFybXZbMC05XS8tZWFiaS87cy9lYiQvLycKKwkJYWJpPWBlY2hvICR7VU5BTUVfTUFDSElORV9BUkNIfSB8IHNlZCAtZSAiJGV4cHIiYAorCQk7OworCWVzYWMKIAkjIFRoZSBPUyByZWxlYXNlCi0JcmVsZWFzZT1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLV9dLiovXC4vJ2AKKwkjIERlYmlhbiBHTlUvTmV0QlNEIG1hY2hpbmVzIGhhdmUgYSBkaWZmZXJlbnQgdXNlcmxhbmQsIGFuZAorCSMgdGh1cywgbmVlZCBhIGRpc3RpbmN0IHRyaXBsZXQuIEhvd2V2ZXIsIHRoZXkgZG8gbm90IG5lZWQKKwkjIGtlcm5lbCB2ZXJzaW9uIGluZm9ybWF0aW9uLCBzbyBpdCBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhCisJIyBzdWl0YWJsZSB0YWcsIGluIHRoZSBzdHlsZSBvZiBsaW51eC1nbnUuCisJY2FzZSAiJHtVTkFNRV9WRVJTSU9OfSIgaW4KKwkgICAgRGViaWFuKikKKwkJcmVsZWFzZT0nLWdudScKKwkJOzsKKwkgICAgKikKKwkJcmVsZWFzZT1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1stX10uKi8vJyB8IGN1dCAtZC4gLWYxLDJgCisJCTs7CisJZXNhYwogCSMgU2luY2UgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNOgogCSMgY29udGFpbnMgcmVkdW5kYW50IGluZm9ybWF0aW9uLCB0aGUgc2hvcnRlciBmb3JtOgogCSMgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0gaXMgdXNlZC4KLQllY2hvICIke21hY2hpbmV9LSR7b3N9JHtyZWxlYXNlfSIKLQlleGl0IDAgOzsKKwllY2hvICIke21hY2hpbmV9LSR7b3N9JHtyZWxlYXNlfSR7YWJpfSIKKwlleGl0IDs7CisgICAgKjpCaXRyaWc6KjoqKQorCVVOQU1FX01BQ0hJTkVfQVJDSD1gYXJjaCB8IHNlZCAncy9CaXRyaWcuLy8nYAorCWVjaG8gJHtVTkFNRV9NQUNISU5FX0FSQ0h9LXVua25vd24tYml0cmlnJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOk9wZW5CU0Q6KjoqKQorCVVOQU1FX01BQ0hJTkVfQVJDSD1gYXJjaCB8IHNlZCAncy9PcGVuQlNELi8vJ2AKKwllY2hvICR7VU5BTUVfTUFDSElORV9BUkNIfS11bmtub3duLW9wZW5ic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6TGliZXJ0eUJTRDoqOiopCisJVU5BTUVfTUFDSElORV9BUkNIPWBhcmNoIHwgc2VkICdzL14uKkJTRFwuLy8nYAorCWVjaG8gJHtVTkFNRV9NQUNISU5FX0FSQ0h9LXVua25vd24tbGliZXJ0eWJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpla2tvQlNEOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1la2tvYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlNvbGlkQlNEOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1zb2xpZGJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWFjcHBjOk1pckJTRDoqOiopCisJZWNobyBwb3dlcnBjLXVua25vd24tbWlyYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOk1pckJTRDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbWlyYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlNvcnRpeDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc29ydGl4CisJZXhpdCA7OwogICAgIGFscGhhOk9TRjE6KjoqKQotCWlmIHRlc3QgJFVOQU1FX1JFTEVBU0UgPSAiVjQuMCI7IHRoZW4KKwljYXNlICRVTkFNRV9SRUxFQVNFIGluCisJKjQuMCkKIAkJVU5BTUVfUkVMRUFTRT1gL3Vzci9zYmluL3NpemVyIC12IHwgYXdrICd7cHJpbnQgJDN9J2AKLQlmaQorCQk7OworCSo1LiopCisJCVVOQU1FX1JFTEVBU0U9YC91c3Ivc2Jpbi9zaXplciAtdiB8IGF3ayAne3ByaW50ICQ0fSdgCisJCTs7CisJZXNhYworCSMgQWNjb3JkaW5nIHRvIENvbXBhcSwgL3Vzci9zYmluL3BzcmluZm8gaGFzIGJlZW4gYXZhaWxhYmxlIG9uCisJIyBPU0YvMSBhbmQgVHJ1NjQgc3lzdGVtcyBwcm9kdWNlZCBzaW5jZSAxOTk1LiAgSSBob3BlIHRoYXQKKwkjIGNvdmVycyBtb3N0IHN5c3RlbXMgcnVubmluZyB0b2RheS4gIFRoaXMgY29kZSBwaXBlcyB0aGUgQ1BVCisJIyB0eXBlcyB0aHJvdWdoIGhlYWQgLW4gMSwgc28gd2Ugb25seSBkZXRlY3QgdGhlIHR5cGUgb2YgQ1BVIDAuCisJQUxQSEFfQ1BVX1RZUEU9YC91c3Ivc2Jpbi9wc3JpbmZvIC12IHwgc2VkIC1uIC1lICdzL14gIFRoZSBhbHBoYSBcKC4qXCkgcHJvY2Vzc29yLiokL1wxL3AnIHwgaGVhZCAtbiAxYAorCWNhc2UgIiRBTFBIQV9DUFVfVFlQRSIgaW4KKwkgICAgIkVWNCAoMjEwNjQpIikKKwkJVU5BTUVfTUFDSElORT1hbHBoYSA7OworCSAgICAiRVY0LjUgKDIxMDY0KSIpCisJCVVOQU1FX01BQ0hJTkU9YWxwaGEgOzsKKwkgICAgIkxDQTQgKDIxMDY2LzIxMDY4KSIpCisJCVVOQU1FX01BQ0hJTkU9YWxwaGEgOzsKKwkgICAgIkVWNSAoMjExNjQpIikKKwkJVU5BTUVfTUFDSElORT1hbHBoYWV2NSA7OworCSAgICAiRVY1LjYgKDIxMTY0QSkiKQorCQlVTkFNRV9NQUNISU5FPWFscGhhZXY1NiA7OworCSAgICAiRVY1LjYgKDIxMTY0UEMpIikKKwkJVU5BTUVfTUFDSElORT1hbHBoYXBjYTU2IDs7CisJICAgICJFVjUuNyAoMjExNjRQQykiKQorCQlVTkFNRV9NQUNISU5FPWFscGhhcGNhNTcgOzsKKwkgICAgIkVWNiAoMjEyNjQpIikKKwkJVU5BTUVfTUFDSElORT1hbHBoYWV2NiA7OworCSAgICAiRVY2LjcgKDIxMjY0QSkiKQorCQlVTkFNRV9NQUNISU5FPWFscGhhZXY2NyA7OworCSAgICAiRVY2LjhDQiAoMjEyNjRDKSIpCisJCVVOQU1FX01BQ0hJTkU9YWxwaGFldjY4IDs7CisJICAgICJFVjYuOEFMICgyMTI2NEIpIikKKwkJVU5BTUVfTUFDSElORT1hbHBoYWV2NjggOzsKKwkgICAgIkVWNi44Q1ggKDIxMjY0RCkiKQorCQlVTkFNRV9NQUNISU5FPWFscGhhZXY2OCA7OworCSAgICAiRVY2LjlBICgyMTI2NC9FVjY5QSkiKQorCQlVTkFNRV9NQUNISU5FPWFscGhhZXY2OSA7OworCSAgICAiRVY3ICgyMTM2NCkiKQorCQlVTkFNRV9NQUNISU5FPWFscGhhZXY3IDs7CisJICAgICJFVjcuOSAoMjEzNjRBKSIpCisJCVVOQU1FX01BQ0hJTkU9YWxwaGFldjc5IDs7CisJZXNhYworCSMgQSBQbi5uIHZlcnNpb24gaXMgYSBwYXRjaGVkIHZlcnNpb24uCiAJIyBBIFZuLm4gdmVyc2lvbiBpcyBhIHJlbGVhc2VkIHZlcnNpb24uCiAJIyBBIFRuLm4gdmVyc2lvbiBpcyBhIHJlbGVhc2VkIGZpZWxkIHRlc3QgdmVyc2lvbi4KIAkjIEEgWG4ubiB2ZXJzaW9uIGlzIGFuIHVucmVsZWFzZWQgZXhwZXJpbWVudGFsIGJhc2VsZXZlbC4KIAkjIDEuMiB1c2VzICIxLjIiIGZvciB1bmFtZSAtci4KLQljYXQgPDxFT0YgPiRkdW1teS5zCi0JLmRhdGEKLVwkTGZvcm1hdDoKLQkuYnl0ZSAzNywxMDAsNDUsMzcsMTIwLDEwLDAJIyAiJWQtJXhcbiIKLQotCS50ZXh0Ci0JLmdsb2JsIG1haW4KLQkuYWxpZ24gNAotCS5lbnQgbWFpbgotbWFpbjoKLQkuZnJhbWUgXCQzMCwxNixcJDI2LDAKLQlsZGdwIFwkMjksMChcJDI3KQotCS5wcm9sb2d1ZSAxCi0JLmxvbmcgMHg0N2UwM2Q4MCAjIGltcGx2ZXIgXCQwCi0JbGRhIFwkMiwtMQotCS5sb25nIDB4NDdlMjBjMjEgIyBhbWFzayBcJDIsXCQxCi0JbGRhIFwkMTYsXCRMZm9ybWF0Ci0JbW92IFwkMCxcJDE3Ci0Jbm90IFwkMSxcJDE4Ci0JanNyIFwkMjYscHJpbnRmCi0JbGRncCBcJDI5LDAoXCQyNikKLQltb3YgMCxcJDE2Ci0JanNyIFwkMjYsZXhpdAotCS5lbmQgbWFpbgotRU9GCi0JJENDX0ZPUl9CVUlMRCAkZHVtbXkucyAtbyAkZHVtbXkgMj4vZGV2L251bGwKLQlpZiB0ZXN0ICIkPyIgPSAwIDsgdGhlbgotCQljYXNlIGAuLyRkdW1teWAgaW4KLQkJCTAtMCkKLQkJCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIKLQkJCQk7OwotCQkJMS0wKQotCQkJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY1IgotCQkJCTs7Ci0JCQkxLTEpCi0JCQkJVU5BTUVfTUFDSElORT0iYWxwaGFldjU2IgotCQkJCTs7Ci0JCQkxLTEwMSkKLQkJCQlVTkFNRV9NQUNISU5FPSJhbHBoYXBjYTU2IgotCQkJCTs7Ci0JCQkyLTMwMykKLQkJCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NiIKLQkJCQk7OwotCQkJMi0zMDcpCi0JCQkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY3IgotCQkJCTs7Ci0JCWVzYWMKLQlmaQotCXJtIC1mICRkdW1teS5zICRkdW1teQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtb3NmYGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9eW1ZUWF0vLycgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidgCi0JZXhpdCAwIDs7CisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWRlYy1vc2ZgZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL15bUFZUWF0vLycgfCB0ciBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5emAKKwkjIFJlc2V0IEVYSVQgdHJhcCBiZWZvcmUgZXhpdGluZyB0byBhdm9pZCBzcHVyaW91cyBub24temVybyBleGl0IGNvZGUuCisJZXhpdGNvZGU9JD8KKwl0cmFwICcnIDAKKwlleGl0ICRleGl0Y29kZSA7OwogICAgIEFscGhhXCAqOldpbmRvd3NfTlQqOiopCiAJIyBIb3cgZG8gd2Uga25vdyBpdCdzIEludGVyaXggcmF0aGVyIHRoYW4gdGhlIGdlbmVyaWMgUE9TSVggc3Vic3lzdGVtPwogCSMgU2hvdWxkIHdlIGNoYW5nZSBVTkFNRV9NQUNISU5FIGJhc2VkIG9uIHRoZSBvdXRwdXQgb2YgdW5hbWUgaW5zdGVhZAogCSMgb2YgdGhlIHNwZWNpZmljIEFscGhhIG1vZGVsPwogCWVjaG8gYWxwaGEtcGMtaW50ZXJpeAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICAyMTA2NDpXaW5kb3dzX05UOjUwOjMpCiAJZWNobyBhbHBoYS1kZWMtd2lubnQzLjUKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgQW1pZ2EqOlVOSVhfU3lzdGVtX1Y6NC4wOiopCi0JZWNobyBtNjhrLWNibS1zeXN2NAotCWV4aXQgMDs7Ci0gICAgYW1pZ2E6T3BlbkJTRDoqOiopCi0JZWNobyBtNjhrLXVua25vd24tb3BlbmJzZCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDAgOzsKKwllY2hvIG02OGstdW5rbm93bi1zeXN2NAorCWV4aXQgOzsKICAgICAqOltBYV1taWdhW09vXVtTc106KjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWFtaWdhb3MKLQlleGl0IDAgOzsKLSAgICBhcmM2NDpPcGVuQlNEOio6KikKLQllY2hvIG1pcHM2NGVsLXVua25vd24tb3BlbmJzZCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDAgOzsKLSAgICBhcmM6T3BlbkJTRDoqOiopCi0JZWNobyBtaXBzZWwtdW5rbm93bi1vcGVuYnNkJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OwotICAgIGhrbWlwczpPcGVuQlNEOio6KikKLQllY2hvIG1pcHMtdW5rbm93bi1vcGVuYnNkJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OwotICAgIHBtYXg6T3BlbkJTRDoqOiopCi0JZWNobyBtaXBzZWwtdW5rbm93bi1vcGVuYnNkJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OwotICAgIHNnaTpPcGVuQlNEOio6KikKLQllY2hvIG1pcHMtdW5rbm93bi1vcGVuYnNkJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OwotICAgIHdncmlzYzpPcGVuQlNEOio6KikKLQllY2hvIG1pcHNlbC11bmtub3duLW9wZW5ic2Qke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZXhpdCA7OworICAgICo6W01tXW9ycGhbT29dW1NzXToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbW9ycGhvcworCWV4aXQgOzsKICAgICAqOk9TLzM5MDoqOiopCiAJZWNobyBpMzcwLWlibS1vcGVuZWRpdGlvbgotCWV4aXQgMCA7OworCWV4aXQgOzsKKyAgICAqOnovVk06KjoqKQorCWVjaG8gczM5MC1pYm0tenZtb2UKKwlleGl0IDs7CisgICAgKjpPUzQwMDoqOiopCisJZWNobyBwb3dlcnBjLWlibS1vczQwMAorCWV4aXQgOzsKICAgICBhcm06UklTQyo6MS5bMDEyXSo6Knxhcm06cmlzY2l4OjEuWzAxMl0qOiopCiAJZWNobyBhcm0tYWNvcm4tcmlzY2l4JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMDs7Ci0gICAgU1IyPzAxOkhJLVVYL01QUDoqOiopCisJZXhpdCA7OworICAgIGFybSo6cmlzY29zOio6Knxhcm0qOlJJU0NPUzoqOiopCisJZWNobyBhcm0tdW5rbm93bi1yaXNjb3MKKwlleGl0IDs7CisgICAgU1IyPzAxOkhJLVVYL01QUDoqOiogfCBTUjgwMDA6SEktVVgvTVBQOio6KikKIAllY2hvIGhwcGExLjEtaGl0YWNoaS1oaXV4bXBwCi0JZXhpdCAwOzsKKwlleGl0IDs7CiAgICAgUHlyYW1pZCo6T1N4KjoqOiogfCBNSVMqOk9TeCo6KjoqIHwgTUlTKjpTTVBfREMtT1N4KjoqOiopCiAJIyBha2VlQHdwZGlzMDMud3BhZmIuYWYubWlsIChFYXJsZSBGLiBBa2UpIGNvbnRyaWJ1dGVkIE1JUyBhbmQgTklMRS4KIAlpZiB0ZXN0ICJgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsYCIgPSBhdHQgOyB0aGVuCkBAIC0yMTUsMjUgKzM1OCw1MSBAQAogCWVsc2UKIAkJZWNobyBweXJhbWlkLXB5cmFtaWQtYnNkCiAJZmkKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgTklMRSo6KjoqOmRjb3N4KQogCWVjaG8gcHlyYW1pZC1weXJhbWlkLXN2cjQKLQlleGl0IDAgOzsKKwlleGl0IDs7CisgICAgRFJTPzYwMDA6dW5peDo0LjA6NiopCisJZWNobyBzcGFyYy1pY2wtbng2CisJZXhpdCA7OworICAgIERSUz82MDAwOlVOSVhfU1Y6NC4yKjo3KiB8IERSUz82MDAwOmlzaXM6NC4yKjo3KikKKwljYXNlIGAvdXNyL2Jpbi91bmFtZSAtcGAgaW4KKwkgICAgc3BhcmMpIGVjaG8gc3BhcmMtaWNsLW54NzsgZXhpdCA7OworCWVzYWMgOzsKKyAgICBzMzkweDpTdW5PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKICAgICBzdW40SDpTdW5PUzo1Lio6KikKIAllY2hvIHNwYXJjLWhhbC1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBzdW40KjpTdW5PUzo1Lio6KiB8IHRhZHBvbGUqOlN1bk9TOjUuKjoqKQogCWVjaG8gc3BhcmMtc3VuLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCi0JZXhpdCAwIDs7Ci0gICAgaTg2cGM6U3VuT1M6NS4qOiopCi0JZWNobyBpMzg2LXBjLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCi0JZXhpdCAwIDs7CisJZXhpdCA7OworICAgIGk4NnBjOkF1cm9yYVVYOjUuKjoqIHwgaTg2eGVuOkF1cm9yYVVYOjUuKjoqKQorCWVjaG8gaTM4Ni1wYy1hdXJvcmF1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgaTg2cGM6U3VuT1M6NS4qOiogfCBpODZ4ZW46U3VuT1M6NS4qOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCVNVTl9BUkNIPWkzODYKKwkjIElmIHRoZXJlIGlzIGEgY29tcGlsZXIsIHNlZSBpZiBpdCBpcyBjb25maWd1cmVkIGZvciA2NC1iaXQgb2JqZWN0cy4KKwkjIE5vdGUgdGhhdCB0aGUgU3VuIGNjIGRvZXMgbm90IHR1cm4gX19MUDY0X18gaW50byAxIGxpa2UgZ2NjIGRvZXMuCisJIyBUaGlzIHRlc3Qgd29ya3MgZm9yIGJvdGggY29tcGlsZXJzLgorCWlmIFsgIiRDQ19GT1JfQlVJTEQiICE9IG5vX2NvbXBpbGVyX2ZvdW5kIF07IHRoZW4KKwkgICAgaWYgKGVjaG8gJyNpZmRlZiBfX2FtZDY0JzsgZWNobyBJU182NEJJVF9BUkNIOyBlY2hvICcjZW5kaWYnKSB8IFwKKwkJKENDT1BUUz0iIiAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwgXAorCQlncmVwIElTXzY0QklUX0FSQ0ggPi9kZXYvbnVsbAorCSAgICB0aGVuCisJCVNVTl9BUkNIPXg4Nl82NAorCSAgICBmaQorCWZpCisJZWNobyAke1NVTl9BUkNIfS1wYy1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKICAgICBzdW40KjpTdW5PUzo2KjoqKQogCSMgQWNjb3JkaW5nIHRvIGNvbmZpZy5zdWIsIHRoaXMgaXMgdGhlIHByb3BlciB3YXkgdG8gY2Fub25pY2FsaXplCiAJIyBTdW5PUzYuICBIYXJkIHRvIGd1ZXNzIGV4YWN0bHkgd2hhdCBTdW5PUzYgd2lsbCBiZSBsaWtlLCBidXQKIAkjIGl0J3MgbGlrZWx5IHRvIGJlIG1vcmUgbGlrZSBTb2xhcmlzIHRoYW4gU3VuT1M0LgogCWVjaG8gc3BhcmMtc3VuLXNvbGFyaXMzYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIHN1bjQqOlN1bk9TOio6KikKIAljYXNlICJgL3Vzci9iaW4vYXJjaCAta2AiIGluCiAJICAgIFNlcmllcyp8UzQqKQpAQCAtMjQyLDEzICs0MTEsMTMgQEAKIAllc2FjCiAJIyBKYXBhbmVzZSBMYW5ndWFnZSB2ZXJzaW9ucyBoYXZlIGEgdmVyc2lvbiBudW1iZXIgbGlrZSBgNC4xLjMtSkwnLgogCWVjaG8gc3BhcmMtc3VuLXN1bm9zYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvLS9fLydgCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIHN1bjMqOlN1bk9TOio6KikKIAllY2hvIG02OGstc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBzdW4qOio6NC4yQlNEOiopCi0JVU5BTUVfUkVMRUFTRT1gKGhlYWQgLTEgL2V0Yy9tb3RkIHwgYXdrICd7cHJpbnQgc3Vic3RyKCQ1LDEsMyl9JykgMj4vZGV2L251bGxgCi0JdGVzdCAieCR7VU5BTUVfUkVMRUFTRX0iID0gIngiICYmIFVOQU1FX1JFTEVBU0U9MworCVVOQU1FX1JFTEVBU0U9YChzZWQgMXEgL2V0Yy9tb3RkIHwgYXdrICd7cHJpbnQgc3Vic3RyKCQ1LDEsMyl9JykgMj4vZGV2L251bGxgCisJdGVzdCAieCR7VU5BTUVfUkVMRUFTRX0iID0geCAmJiBVTkFNRV9SRUxFQVNFPTMKIAljYXNlICJgL2Jpbi9hcmNoYCIgaW4KIAkgICAgc3VuMykKIAkJZWNobyBtNjhrLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KQEAgLTI1NywxMyArNDI2LDEwIEBACiAJCWVjaG8gc3BhcmMtc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQogCQk7OwogCWVzYWMKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgYXVzaHA6U3VuT1M6KjoqKQogCWVjaG8gc3BhcmMtYXVzcGV4LXN1bm9zJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OwotICAgIGF0YXJpKjpPcGVuQlNEOio6KikKLQllY2hvIG02OGstdW5rbm93bi1vcGVuYnNkJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICAjIFRoZSBzaXR1YXRpb24gZm9yIE1pTlQgaXMgYSBsaXR0bGUgY29uZnVzaW5nLiAgVGhlIG1hY2hpbmUgbmFtZQogICAgICMgY2FuIGJlIHZpcnR1YWxseSBldmVyeXRoaW5nIChldmVyeXRoaW5nIHdoaWNoIGlzIG5vdAogICAgICMgImF0YXJpc3QiIG9yICJhdGFyaXN0ZSIgYXQgbGVhc3Qgc2hvdWxkIGhhdmUgYSBwcm9jZXNzb3IKQEAgLTI3Myw1MSArNDM5LDQzIEBACiAgICAgIyBNaU5ULiAgQnV0IE1pTlQgaXMgZG93bndhcmQgY29tcGF0aWJsZSB0byBUT1MsIHNvIHRoaXMgc2hvdWxkCiAgICAgIyBiZSBubyBwcm9ibGVtLgogICAgIGF0YXJpc3RbZV06Kk1pTlQ6KjoqIHwgYXRhcmlzdFtlXToqbWludDoqOiogfCBhdGFyaXN0W2VdOipUT1M6KjoqKQotICAgICAgICBlY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDAgOzsKKwllY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CiAgICAgYXRhcmkqOipNaU5UOio6KiB8IGF0YXJpKjoqbWludDoqOiogfCBhdGFyaXN0W2VdOipUT1M6KjoqKQogCWVjaG8gbTY4ay1hdGFyaS1taW50JHtVTkFNRV9SRUxFQVNFfQotICAgICAgICBleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgKmZhbGNvbio6Kk1pTlQ6KjoqIHwgKmZhbGNvbio6Km1pbnQ6KjoqIHwgKmZhbGNvbio6KlRPUzoqOiopCi0gICAgICAgIGVjaG8gbTY4ay1hdGFyaS1taW50JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OworCWVjaG8gbTY4ay1hdGFyaS1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKICAgICBtaWxhbio6Kk1pTlQ6KjoqIHwgbWlsYW4qOiptaW50Oio6KiB8ICptaWxhbio6KlRPUzoqOiopCi0gICAgICAgIGVjaG8gbTY4ay1taWxhbi1taW50JHtVTkFNRV9SRUxFQVNFfQotICAgICAgICBleGl0IDAgOzsKKwllY2hvIG02OGstbWlsYW4tbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CiAgICAgaGFkZXMqOipNaU5UOio6KiB8IGhhZGVzKjoqbWludDoqOiogfCAqaGFkZXMqOipUT1M6KjoqKQotICAgICAgICBlY2hvIG02OGstaGFkZXMtbWludCR7VU5BTUVfUkVMRUFTRX0KLSAgICAgICAgZXhpdCAwIDs7CisJZWNobyBtNjhrLWhhZGVzLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OwogICAgICo6Kk1pTlQ6KjoqIHwgKjoqbWludDoqOiogfCAqOipUT1M6KjoqKQotICAgICAgICBlY2hvIG02OGstdW5rbm93bi1taW50JHtVTkFNRV9SRUxFQVNFfQotICAgICAgICBleGl0IDAgOzsKLSAgICBzdW4zKjpPcGVuQlNEOio6KikKLQllY2hvIG02OGstdW5rbm93bi1vcGVuYnNkJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OwotICAgIG1hYzY4azpPcGVuQlNEOio6KikKLQllY2hvIG02OGstdW5rbm93bi1vcGVuYnNkJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OwotICAgIG12bWU2OGs6T3BlbkJTRDoqOiopCi0JZWNobyBtNjhrLXVua25vd24tb3BlbmJzZCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDAgOzsKLSAgICBtdm1lODhrOk9wZW5CU0Q6KjoqKQotCWVjaG8gbTg4ay11bmtub3duLW9wZW5ic2Qke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZWNobyBtNjhrLXVua25vd24tbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbTY4azptYWNodGVuOio6KikKKwllY2hvIG02OGstYXBwbGUtbWFjaHRlbiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CiAgICAgcG93ZXJwYzptYWNodGVuOio6KikKIAllY2hvIHBvd2VycGMtYXBwbGUtbWFjaHRlbiR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgUklTQyo6TWFjaDoqOiopCiAJZWNobyBtaXBzLWRlYy1tYWNoX2JzZDQuMwotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBSSVNDKjpVTFRSSVg6KjoqKQogCWVjaG8gbWlwcy1kZWMtdWx0cml4JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBWQVgqOlVMVFJJWCo6KjoqKQogCWVjaG8gdmF4LWRlYy11bHRyaXgke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIDIwMjA6Q0xJWDoqOiogfCAyNDMwOkNMSVg6KjoqKQogCWVjaG8gY2xpcHBlci1pbnRlcmdyYXBoLWNsaXgke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIG1pcHM6KjoqOlVNSVBTIHwgbWlwczoqOio6UklTQ29zKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKIAlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYwogI2lmZGVmIF9fY3BsdXNwbHVzCiAjaW5jbHVkZSA8c3RkaW8uaD4gIC8qIGZvciBwcmludGYoKSBwcm90b3R5cGUgKi8KQEAgLTMzOSwyNyArNDk3LDM2IEBACiAJICBleGl0ICgtMSk7CiAJfQogRU9GCi0JJENDX0ZPUl9CVUlMRCAkZHVtbXkuYyAtbyAkZHVtbXkgXAotCSAgJiYgLi8kZHVtbXkgYGVjaG8gIiR7VU5BTUVfUkVMRUFTRX0iIHwgc2VkIC1uICdzL1woWzAtOV0qXCkuKi9cMS9wJ2AgXAotCSAgJiYgcm0gJGR1bW15LmMgJGR1bW15ICYmIGV4aXQgMAotCXJtIC1mICRkdW1teS5jICRkdW1teQorCSRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jICYmCisJICBkdW1teWFyZz1gZWNobyAiJHtVTkFNRV9SRUxFQVNFfSIgfCBzZWQgLW4gJ3MvXChbMC05XSpcKS4qL1wxL3AnYCAmJgorCSAgU1lTVEVNX05BTUU9YCRkdW1teSAkZHVtbXlhcmdgICYmCisJICAgIHsgZWNobyAiJFNZU1RFTV9OQU1FIjsgZXhpdDsgfQogCWVjaG8gbWlwcy1taXBzLXJpc2NvcyR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDAgOzsKKwlleGl0IDs7CisgICAgTW90b3JvbGE6UG93ZXJNQVhfT1M6KjoqKQorCWVjaG8gcG93ZXJwYy1tb3Rvcm9sYS1wb3dlcm1heAorCWV4aXQgOzsKKyAgICBNb3Rvcm9sYToqOjQuMzpQTDgtKikKKwllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VybWF4CisJZXhpdCA7OworICAgIE5pZ2h0X0hhd2s6KjoqOlBvd2VyTUFYX09TIHwgU3luZXJneTpQb3dlck1BWF9PUzoqOiopCisJZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcm1heAorCWV4aXQgOzsKICAgICBOaWdodF9IYXdrOlBvd2VyX1VOSVg6KjoqKQogCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJ1bml4Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIG04OGs6Q1gvVVg6Nyo6KikKIAllY2hvIG04OGstaGFycmlzLWN4dXg3Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIG04OGs6Kjo0KjpSNCopCiAJZWNobyBtODhrLW1vdG9yb2xhLXN5c3Y0Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIG04OGs6KjozKjpSMyopCiAJZWNobyBtODhrLW1vdG9yb2xhLXN5c3YzCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIEFWaWlPTjpkZ3V4Oio6KikKLSAgICAgICAgIyBERy9VWCByZXR1cm5zIEFWaWlPTiBmb3IgYWxsIGFyY2hpdGVjdHVyZXMKLSAgICAgICAgVU5BTUVfUFJPQ0VTU09SPWAvdXNyL2Jpbi91bmFtZSAtcGAKKwkjIERHL1VYIHJldHVybnMgQVZpaU9OIGZvciBhbGwgYXJjaGl0ZWN0dXJlcworCVVOQU1FX1BST0NFU1NPUj1gL3Vzci9iaW4vdW5hbWUgLXBgCiAJaWYgWyAkVU5BTUVfUFJPQ0VTU09SID0gbWM4ODEwMCBdIHx8IFsgJFVOQU1FX1BST0NFU1NPUiA9IG1jODgxMTAgXQogCXRoZW4KIAkgICAgaWYgWyAke1RBUkdFVF9CSU5BUllfSU5URVJGQUNFfXggPSBtODhrZGd1eGVsZnggXSB8fCBcCkBAIC0zNzIsMzEgKzUzOSw0MCBAQAogCWVsc2UKIAkgICAgZWNobyBpNTg2LWRnLWRndXgke1VOQU1FX1JFTEVBU0V9CiAJZmkKLSAJZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIE04OCo6RG9scGhpbk9TOio6KikJIyBEb2xwaGluT1MgKFNWUjMpCiAJZWNobyBtODhrLWRvbHBoaW4tc3lzdjMKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgTTg4KjoqOlIzKjoqKQogCSMgRGVsdGEgODhrIHN5c3RlbSBydW5uaW5nIFNWUjMKIAllY2hvIG04OGstbW90b3JvbGEtc3lzdjMKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgWEQ4OCo6KjoqOiopICMgVGVrdHJvbml4IFhEODggc3lzdGVtIHJ1bm5pbmcgVVRla1YgKFNWUjMpCiAJZWNobyBtODhrLXRla3Ryb25peC1zeXN2MwotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBUZWs0M1swLTldWzAtOV06VVRlazoqOiopICMgVGVrdHJvbml4IDQzMDAgc3lzdGVtIHJ1bm5pbmcgVVRlayAoQlNEKQogCWVjaG8gbTY4ay10ZWt0cm9uaXgtYnNkCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgICo6SVJJWCo6KjoqKQogCWVjaG8gbWlwcy1zZ2ktaXJpeGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLy0vXy9nJ2AKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgPz8/Pz8/Pz86QUlYPzpbMTJdLjE6MikgICAjIEFJWCAyLjIuMSBvciBBSVggMi4xLjEgaXMgUlQvUEMgQUlYLgotCWVjaG8gcm9tcC1pYm0tYWl4ICAgICAgIyB1bmFtZSAtbSBnaXZlcyBhbiA4IGhleC1jb2RlIENQVSBpZAotCWV4aXQgMCA7OyAgICAgICAgICAgICAgIyBOb3RlIHRoYXQ6IGVjaG8gIidgdW5hbWUgLXNgJyIgZ2l2ZXMgJ0FJWCAnCi0gICAgaT84NjpBSVg6KjoqKQorCWVjaG8gcm9tcC1pYm0tYWl4ICAgICAjIHVuYW1lIC1tIGdpdmVzIGFuIDggaGV4LWNvZGUgQ1BVIGlkCisJZXhpdCA7OyAgICAgICAgICAgICAgICMgTm90ZSB0aGF0OiBlY2hvICInYHVuYW1lIC1zYCciIGdpdmVzICdBSVggJworICAgIGkqODY6QUlYOio6KikKIAllY2hvIGkzODYtaWJtLWFpeAotCWV4aXQgMCA7OworCWV4aXQgOzsKKyAgICBpYTY0OkFJWDoqOiopCisJaWYgWyAteCAvdXNyL2Jpbi9vc2xldmVsIF0gOyB0aGVuCisJCUlCTV9SRVY9YC91c3IvYmluL29zbGV2ZWxgCisJZWxzZQorCQlJQk1fUkVWPSR7VU5BTUVfVkVSU0lPTn0uJHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1haXgke0lCTV9SRVZ9CisJZXhpdCA7OwogICAgICo6QUlYOjI6MykKIAlpZiBncmVwIGJvczMyNSAvdXNyL2luY2x1ZGUvc3RkaW8uaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAogCQlzZWQgJ3MvXgkJLy8nIDw8IEVPRiA+JGR1bW15LmMKIAkJI2luY2x1ZGUgPHN5cy9zeXN0ZW1jZmcuaD4KIApAQCAtNDA4LDk1ICs1ODQsMTQyIEBACiAJCQlleGl0KDApOwogCQkJfQogRU9GCi0JCSRDQ19GT1JfQlVJTEQgJGR1bW15LmMgLW8gJGR1bW15ICYmIC4vJGR1bW15ICYmIHJtICRkdW1teS5jICRkdW1teSAmJiBleGl0IDAKLQkJcm0gLWYgJGR1bW15LmMgJGR1bW15Ci0JCWVjaG8gcnM2MDAwLWlibS1haXgzLjIuNQorCQlpZiAkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAmJiBTWVNURU1fTkFNRT1gJGR1bW15YAorCQl0aGVuCisJCQllY2hvICIkU1lTVEVNX05BTUUiCisJCWVsc2UKKwkJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIuNQorCQlmaQogCWVsaWYgZ3JlcCBib3MzMjQgL3Vzci9pbmNsdWRlL3N0ZGlvLmggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCiAJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIuNAogCWVsc2UKIAkJZWNobyByczYwMDAtaWJtLWFpeDMuMgogCWZpCi0JZXhpdCAwIDs7Ci0gICAgKjpBSVg6Kjo0KQotCUlCTV9DUFVfSUQ9YC91c3Ivc2Jpbi9sc2RldiAtQyAtYyBwcm9jZXNzb3IgLVMgYXZhaWxhYmxlIHwgaGVhZCAtMSB8IGF3ayAneyBwcmludCAkMSB9J2AKLQlpZiAvdXNyL3NiaW4vbHNhdHRyIC1FSGwgJHtJQk1fQ1BVX0lEfSB8IGdyZXAgUE9XRVIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJZXhpdCA7OworICAgICo6QUlYOio6WzQ1NjddKQorCUlCTV9DUFVfSUQ9YC91c3Ivc2Jpbi9sc2RldiAtQyAtYyBwcm9jZXNzb3IgLVMgYXZhaWxhYmxlIHwgc2VkIDFxIHwgYXdrICd7IHByaW50ICQxIH0nYAorCWlmIC91c3Ivc2Jpbi9sc2F0dHIgLUVsICR7SUJNX0NQVV9JRH0gfCBncmVwICcgUE9XRVInID4vZGV2L251bGwgMj4mMTsgdGhlbgogCQlJQk1fQVJDSD1yczYwMDAKIAllbHNlCiAJCUlCTV9BUkNIPXBvd2VycGMKIAlmaQotCWlmIFsgLXggL3Vzci9iaW4vb3NsZXZlbCBdIDsgdGhlbgotCQlJQk1fUkVWPWAvdXNyL2Jpbi9vc2xldmVsYAorCWlmIFsgLXggL3Vzci9iaW4vbHNscHAgXSA7IHRoZW4KKwkJSUJNX1JFVj1gL3Vzci9iaW4vbHNscHAgLUxxYyBib3MucnRlLmxpYmMgfAorCQkJICAgYXdrIC1GOiAneyBwcmludCAkMyB9JyB8IHNlZCBzL1swLTldKiQvMC9gCiAJZWxzZQotCQlJQk1fUkVWPTQuJHtVTkFNRV9SRUxFQVNFfQorCQlJQk1fUkVWPSR7VU5BTUVfVkVSU0lPTn0uJHtVTkFNRV9SRUxFQVNFfQogCWZpCiAJZWNobyAke0lCTV9BUkNIfS1pYm0tYWl4JHtJQk1fUkVWfQotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICAqOkFJWDoqOiopCiAJZWNobyByczYwMDAtaWJtLWFpeAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBpYm1ydDo0LjRCU0Q6Knxyb21wLWlibTpCU0Q6KikKIAllY2hvIHJvbXAtaWJtLWJzZDQuNAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBpYm1ydDoqQlNEOip8cm9tcC1pYm06QlNEOiopICAgICAgICAgICAgIyBjb3ZlcnMgUlQvUEMgQlNEIGFuZAogCWVjaG8gcm9tcC1pYm0tYnNkJHtVTkFNRV9SRUxFQVNFfSAgICMgNC4zIHdpdGggdW5hbWUgYWRkZWQgdG8KLQlleGl0IDAgOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJlcG9ydDogcm9tcC1pYm0gQlNEIDQuMworCWV4aXQgOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVwb3J0OiByb21wLWlibSBCU0QgNC4zCiAgICAgKjpCT1NYOio6KikKIAllY2hvIHJzNjAwMC1idWxsLWJvc3gKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgRFBYLzI/MDA6Qi5PLlMuOio6KikKIAllY2hvIG02OGstYnVsbC1zeXN2MwotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICA5MDAwL1szNF0/Pzo0LjNic2Q6MS4qOiopCiAJZWNobyBtNjhrLWhwLWJzZAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBocDMwMDo0LjRCU0Q6KjoqIHwgOTAwMC9bMzRdPz86NC4zYnNkOjIuKjoqKQogCWVjaG8gbTY4ay1ocC1ic2Q0LjQKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgOTAwMC9bMzQ2NzhdPz86SFAtVVg6KjoqKQorCUhQVVhfUkVWPWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLlswQl0qLy8nYAogCWNhc2UgIiR7VU5BTUVfTUFDSElORX0iIGluCiAJICAgIDkwMDAvMzE/ICkgICAgICAgICAgICBIUF9BUkNIPW02ODAwMCA7OwogCSAgICA5MDAwL1szNF0/PyApICAgICAgICAgSFBfQVJDSD1tNjhrIDs7CiAJICAgIDkwMDAvWzY3OF1bMC05XVswLTldKQotICAgICAgICAgICAgICBzZWQgJ3MvXiAgICAgICAgICAgICAgLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkJaWYgWyAteCAvdXNyL2Jpbi9nZXRjb25mIF07IHRoZW4KKwkJICAgIHNjX2NwdV92ZXJzaW9uPWAvdXNyL2Jpbi9nZXRjb25mIFNDX0NQVV9WRVJTSU9OIDI+L2Rldi9udWxsYAorCQkgICAgc2Nfa2VybmVsX2JpdHM9YC91c3IvYmluL2dldGNvbmYgU0NfS0VSTkVMX0JJVFMgMj4vZGV2L251bGxgCisJCSAgICBjYXNlICIke3NjX2NwdV92ZXJzaW9ufSIgaW4KKwkJICAgICAgNTIzKSBIUF9BUkNIPWhwcGExLjAgOzsgIyBDUFVfUEFfUklTQzFfMAorCQkgICAgICA1MjgpIEhQX0FSQ0g9aHBwYTEuMSA7OyAjIENQVV9QQV9SSVNDMV8xCisJCSAgICAgIDUzMikgICAgICAgICAgICAgICAgICAgICAgIyBDUFVfUEFfUklTQzJfMAorCQkJY2FzZSAiJHtzY19rZXJuZWxfYml0c30iIGluCisJCQkgIDMyKSBIUF9BUkNIPWhwcGEyLjBuIDs7CisJCQkgIDY0KSBIUF9BUkNIPWhwcGEyLjB3IDs7CisJCQkgICcnKSBIUF9BUkNIPWhwcGEyLjAgOzsgICAjIEhQLVVYIDEwLjIwCisJCQllc2FjIDs7CisJCSAgICBlc2FjCisJCWZpCisJCWlmIFsgIiR7SFBfQVJDSH0iID0gIiIgXTsgdGhlbgorCQkgICAgZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQkgICAgc2VkICdzL14JCS8vJyA8PCBFT0YgPiRkdW1teS5jCiAKLSAgICAgICAgICAgICAgI2RlZmluZSBfSFBVWF9TT1VSQ0UKLSAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgotICAgICAgICAgICAgICAjaW5jbHVkZSA8dW5pc3RkLmg+CisJCSNkZWZpbmUgX0hQVVhfU09VUkNFCisJCSNpbmNsdWRlIDxzdGRsaWIuaD4KKwkJI2luY2x1ZGUgPHVuaXN0ZC5oPgogCi0gICAgICAgICAgICAgIGludCBtYWluICgpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgI2lmIGRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKQotICAgICAgICAgICAgICAgICAgbG9uZyBiaXRzID0gc3lzY29uZihfU0NfS0VSTkVMX0JJVFMpOwotICAgICAgICAgICAgICAjZW5kaWYKLSAgICAgICAgICAgICAgICAgIGxvbmcgY3B1ICA9IHN5c2NvbmYgKF9TQ19DUFVfVkVSU0lPTik7CisJCWludCBtYWluICgpCisJCXsKKwkJI2lmIGRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKQorCQkgICAgbG9uZyBiaXRzID0gc3lzY29uZihfU0NfS0VSTkVMX0JJVFMpOworCQkjZW5kaWYKKwkJICAgIGxvbmcgY3B1ICA9IHN5c2NvbmYgKF9TQ19DUFVfVkVSU0lPTik7CiAKLSAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY3B1KQotICAgICAgICAgICAgICAJewotICAgICAgICAgICAgICAJY2FzZSBDUFVfUEFfUklTQzFfMDogcHV0cyAoImhwcGExLjAiKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIAljYXNlIENQVV9QQV9SSVNDMV8xOiBwdXRzICgiaHBwYTEuMSIpOyBicmVhazsKLSAgICAgICAgICAgICAgCWNhc2UgQ1BVX1BBX1JJU0MyXzA6Ci0gICAgICAgICAgICAgICNpZiBkZWZpbmVkKF9TQ19LRVJORUxfQklUUykKLSAgICAgICAgICAgICAgCSAgICBzd2l0Y2ggKGJpdHMpCi0gICAgICAgICAgICAgIAkJewotICAgICAgICAgICAgICAJCWNhc2UgNjQ6IHB1dHMgKCJocHBhMi4wdyIpOyBicmVhazsKLSAgICAgICAgICAgICAgCQljYXNlIDMyOiBwdXRzICgiaHBwYTIuMG4iKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIAkJZGVmYXVsdDogcHV0cyAoImhwcGEyLjAiKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIAkJfSBicmVhazsKLSAgICAgICAgICAgICAgI2Vsc2UgIC8qICFkZWZpbmVkKF9TQ19LRVJORUxfQklUUykgKi8KLSAgICAgICAgICAgICAgCSAgICBwdXRzICgiaHBwYTIuMCIpOyBicmVhazsKLSAgICAgICAgICAgICAgI2VuZGlmCi0gICAgICAgICAgICAgIAlkZWZhdWx0OiBwdXRzICgiaHBwYTEuMCIpOyBicmVhazsKLSAgICAgICAgICAgICAgCX0KLSAgICAgICAgICAgICAgICAgIGV4aXQgKDApOwotICAgICAgICAgICAgICB9CisJCSAgICBzd2l0Y2ggKGNwdSkKKwkJCXsKKwkJCWNhc2UgQ1BVX1BBX1JJU0MxXzA6IHB1dHMgKCJocHBhMS4wIik7IGJyZWFrOworCQkJY2FzZSBDUFVfUEFfUklTQzFfMTogcHV0cyAoImhwcGExLjEiKTsgYnJlYWs7CisJCQljYXNlIENQVV9QQV9SSVNDMl8wOgorCQkjaWYgZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpCisJCQkgICAgc3dpdGNoIChiaXRzKQorCQkJCXsKKwkJCQljYXNlIDY0OiBwdXRzICgiaHBwYTIuMHciKTsgYnJlYWs7CisJCQkJY2FzZSAzMjogcHV0cyAoImhwcGEyLjBuIik7IGJyZWFrOworCQkJCWRlZmF1bHQ6IHB1dHMgKCJocHBhMi4wIik7IGJyZWFrOworCQkJCX0gYnJlYWs7CisJCSNlbHNlICAvKiAhZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpICovCisJCQkgICAgcHV0cyAoImhwcGEyLjAiKTsgYnJlYWs7CisJCSNlbmRpZgorCQkJZGVmYXVsdDogcHV0cyAoImhwcGExLjAiKTsgYnJlYWs7CisJCQl9CisJCSAgICBleGl0ICgwKTsKKwkJfQogRU9GCi0JKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAkZHVtbXkuYyAtbyAkZHVtbXkgMj4vZGV2L251bGwgKSAmJiBIUF9BUkNIPWAuLyRkdW1teWAKLQlybSAtZiAkZHVtbXkuYyAkZHVtbXkKKwkJICAgIChDQ09QVFM9IiIgJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgMj4vZGV2L251bGwpICYmIEhQX0FSQ0g9YCRkdW1teWAKKwkJICAgIHRlc3QgLXogIiRIUF9BUkNIIiAmJiBIUF9BUkNIPWhwcGEKKwkJZmkgOzsKIAllc2FjCi0JSFBVWF9SRVY9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSouWzBCXSovLydgCisJaWYgWyAke0hQX0FSQ0h9ID0gaHBwYTIuMHcgXQorCXRoZW4KKwkgICAgZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCisJICAgICMgaHBwYTIuMHctaHAtaHB1eCogaGFzIGEgNjQtYml0IGtlcm5lbCBhbmQgYSBjb21waWxlciBnZW5lcmF0aW5nCisJICAgICMgMzItYml0IGNvZGUuICBocHBhNjQtaHAtaHB1eCogaGFzIHRoZSBzYW1lIGtlcm5lbCBhbmQgYSBjb21waWxlcgorCSAgICAjIGdlbmVyYXRpbmcgNjQtYml0IGNvZGUuICBHTlUgYW5kIEhQIHVzZSBkaWZmZXJlbnQgbm9tZW5jbGF0dXJlOgorCSAgICAjCisJICAgICMgJCBDQ19GT1JfQlVJTEQ9Y2MgLi9jb25maWcuZ3Vlc3MKKwkgICAgIyA9PiBocHBhMi4wdy1ocC1ocHV4MTEuMjMKKwkgICAgIyAkIENDX0ZPUl9CVUlMRD0iY2MgK0RBMi4wdyIgLi9jb25maWcuZ3Vlc3MKKwkgICAgIyA9PiBocHBhNjQtaHAtaHB1eDExLjIzCisKKwkgICAgaWYgZWNobyBfX0xQNjRfXyB8IChDQ09QVFM9IiIgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8CisJCWdyZXAgLXEgX19MUDY0X18KKwkgICAgdGhlbgorCQlIUF9BUkNIPWhwcGEyLjB3CisJICAgIGVsc2UKKwkJSFBfQVJDSD1ocHBhNjQKKwkgICAgZmkKKwlmaQogCWVjaG8gJHtIUF9BUkNIfS1ocC1ocHV4JHtIUFVYX1JFVn0KLQlleGl0IDAgOzsKKwlleGl0IDs7CisgICAgaWE2NDpIUC1VWDoqOiopCisJSFBVWF9SRVY9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSouWzBCXSovLydgCisJZWNobyBpYTY0LWhwLWhwdXgke0hQVVhfUkVWfQorCWV4aXQgOzsKICAgICAzMDUwKjpISS1VWDoqOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAogCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCiAJI2luY2x1ZGUgPHVuaXN0ZC5oPgogCWludApAQCAtNTIyLDQ0NyArNzQ1LDQ2NSBAQAogCSAgZXhpdCAoMCk7CiAJfQogRU9GCi0JJENDX0ZPUl9CVUlMRCAkZHVtbXkuYyAtbyAkZHVtbXkgJiYgLi8kZHVtbXkgJiYgcm0gJGR1bW15LmMgJGR1bW15ICYmIGV4aXQgMAotCXJtIC1mICRkdW1teS5jICRkdW1teQorCSRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgICYmCisJCXsgZWNobyAiJFNZU1RFTV9OQU1FIjsgZXhpdDsgfQogCWVjaG8gdW5rbm93bi1oaXRhY2hpLWhpdXh3ZTIKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgOTAwMC83Pz86NC4zYnNkOio6KiB8IDkwMDAvOD9bNzldOjQuM2JzZDoqOiogKQogCWVjaG8gaHBwYTEuMS1ocC1ic2QKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgOTAwMC84Pz86NC4zYnNkOio6KikKIAllY2hvIGhwcGExLjAtaHAtYnNkCi0JZXhpdCAwIDs7Ci0gICAgKjk/Pyo6TVBFL2lYOio6KikKKwlleGl0IDs7CisgICAgKjk/Pyo6TVBFL2lYOio6KiB8ICozMDAwKjpNUEUvaVg6KjoqKQogCWVjaG8gaHBwYTEuMC1ocC1tcGVpeAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBocDc/PzpPU0YxOio6KiB8IGhwOD9bNzldOk9TRjE6KjoqICkKIAllY2hvIGhwcGExLjEtaHAtb3NmCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIGhwOD8/Ok9TRjE6KjoqKQogCWVjaG8gaHBwYTEuMC1ocC1vc2YKLQlleGl0IDAgOzsKLSAgICBpPzg2Ok9TRjE6KjoqKQorCWV4aXQgOzsKKyAgICBpKjg2Ok9TRjE6KjoqKQogCWlmIFsgLXggL3Vzci9zYmluL3N5c3ZlcnNpb24gXSA7IHRoZW4KIAkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tb3NmMW1rCiAJZWxzZQogCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1vc2YxCiAJZmkKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgcGFyaXNjKjpMaXRlcyo6KjoqKQogCWVjaG8gaHBwYTEuMS1ocC1saXRlcwotCWV4aXQgMCA7OwotICAgIGhwcGEqOk9wZW5CU0Q6KjoqKQotCWVjaG8gaHBwYS11bmtub3duLW9wZW5ic2QKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgQzEqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMSo6KikKIAllY2hvIGMxLWNvbnZleC1ic2QKLSAgICAgICAgZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIEMyKjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzIqOiopCiAJaWYgZ2V0c3lzaW5mbyAtZiBzY2FsYXJfYWNjCiAJdGhlbiBlY2hvIGMzMi1jb252ZXgtYnNkCiAJZWxzZSBlY2hvIGMyLWNvbnZleC1ic2QKIAlmaQotICAgICAgICBleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgQzM0KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzM0KjoqKQogCWVjaG8gYzM0LWNvbnZleC1ic2QKLSAgICAgICAgZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIEMzOCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMzOCo6KikKIAllY2hvIGMzOC1jb252ZXgtYnNkCi0gICAgICAgIGV4aXQgMCA7OworCWV4aXQgOzsKICAgICBDNCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkM0KjoqKQogCWVjaG8gYzQtY29udmV4LWJzZAotICAgICAgICBleGl0IDAgOzsKLSAgICBDUkFZKlgtTVA6KjoqOiopCi0JZWNobyB4bXAtY3JheS11bmljb3MKLSAgICAgICAgZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIENSQVkqWS1NUDoqOio6KikKLQllY2hvIHltcC1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDAgOzsKKwllY2hvIHltcC1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKICAgICBDUkFZKltBLVpdOTA6KjoqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSBcCiAJfCBzZWQgLWUgJ3MvQ1JBWS4qXChbQS1aXTkwXCkvXDEvJyBcCi0JICAgICAgLWUgeS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8KLQlleGl0IDAgOzsKKwkgICAgICAtZSB5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LyBcCisJICAgICAgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKICAgICBDUkFZKlRTOio6KjoqKQogCWVjaG8gdDkwLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIENSQVkqVDNFOio6KjoqKQotCWVjaG8gYWxwaGEtY3JheS11bmljb3NtayR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJwotCWV4aXQgMCA7OworCWVjaG8gYWxwaGFldjUtY3JheS11bmljb3NtayR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKICAgICBDUkFZKlNWMToqOio6KikKIAllY2hvIHN2MS1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJwotCWV4aXQgMCA7OwotICAgIENSQVktMjoqOio6KikKLQllY2hvIGNyYXkyLWNyYXktdW5pY29zCi0gICAgICAgIGV4aXQgMCA7OwotICAgIEYzMDA6VU5JWF9TeXN0ZW1fVjoqOiopCi0gICAgICAgIEZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy9cLy8vJ2AKLSAgICAgICAgRlVKSVRTVV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy8gL18vJ2AKLSAgICAgICAgZWNobyAiZjMwMC1mdWppdHN1LSR7RlVKSVRTVV9TWVN9JHtGVUpJVFNVX1JFTH0iCi0gICAgICAgIGV4aXQgMCA7OwotICAgIEYzMDE6VU5JWF9TeXN0ZW1fVjoqOiopCi0gICAgICAgZWNobyBmMzAxLWZ1aml0c3UtdXhwdmBlY2hvICRVTkFNRV9SRUxFQVNFIHwgc2VkICdzLyAuKi8vJ2AKLSAgICAgICBleGl0IDAgOzsKLSAgICBocDMwMDpPcGVuQlNEOio6KikKLQllY2hvIG02OGstdW5rbm93bi1vcGVuYnNkJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OwotICAgIGk/ODY6QlNELzM4NjoqOiogfCBpPzg2OkJTRC9PUzoqOiogfCAqOkFzY2VuZFwgRW1iZWRkZWQvT1M6KjoqKQorCWV4aXQgOzsKKyAgICAqOlVOSUNPUy9tcDoqOiopCisJZWNobyBjcmF5bnYtY3JheS11bmljb3NtcCR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBGMzBbMDFdOlVOSVhfU3lzdGVtX1Y6KjoqIHwgRjcwMDpVTklYX1N5c3RlbV9WOio6KikKKwlGVUpJVFNVX1BST0M9YHVuYW1lIC1tIHwgdHIgQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpgCisJRlVKSVRTVV9TWVM9YHVuYW1lIC1wIHwgdHIgQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXogfCBzZWQgLWUgJ3MvXC8vLydgCisJRlVKSVRTVV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy8gL18vJ2AKKwllY2hvICIke0ZVSklUU1VfUFJPQ30tZnVqaXRzdS0ke0ZVSklUU1VfU1lTfSR7RlVKSVRTVV9SRUx9IgorCWV4aXQgOzsKKyAgICA1MDAwOlVOSVhfU3lzdGVtX1Y6NC4qOiopCisJRlVKSVRTVV9TWVM9YHVuYW1lIC1wIHwgdHIgQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXogfCBzZWQgLWUgJ3MvXC8vLydgCisJRlVKSVRTVV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHRyIEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IHwgc2VkIC1lICdzLyAvXy8nYAorCWVjaG8gInNwYXJjLWZ1aml0c3UtJHtGVUpJVFNVX1NZU30ke0ZVSklUU1VfUkVMfSIKKwlleGl0IDs7CisgICAgaSo4NjpCU0QvMzg2Oio6KiB8IGkqODY6QlNEL09TOio6KiB8ICo6QXNjZW5kXCBFbWJlZGRlZC9PUzoqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWJzZGkke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIHNwYXJjKjpCU0QvT1M6KjoqKQogCWVjaG8gc3BhcmMtdW5rbm93bi1ic2RpJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICAqOkJTRC9PUzoqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYnNkaSR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgKjpGcmVlQlNEOio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1mcmVlYnNkYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYAotCWV4aXQgMCA7OwotICAgICo6T3BlbkJTRDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tb3BlbmJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stX10uKi9cLi8nYAotCWV4aXQgMCA7OworCVVOQU1FX1BST0NFU1NPUj1gL3Vzci9iaW4vdW5hbWUgLXBgCisJY2FzZSAke1VOQU1FX1BST0NFU1NPUn0gaW4KKwkgICAgYW1kNjQpCisJCWVjaG8geDg2XzY0LXVua25vd24tZnJlZWJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AgOzsKKwkgICAgKikKKwkJZWNobyAke1VOQU1FX1BST0NFU1NPUn0tdW5rbm93bi1mcmVlYnNkYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYCA7OworCWVzYWMKKwlleGl0IDs7CiAgICAgaSo6Q1lHV0lOKjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1jeWd3aW4KLQlleGl0IDAgOzsKLSAgICBpKjpNSU5HVyo6KikKKwlleGl0IDs7CisgICAgKjpNSU5HVzY0KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1taW5ndzY0CisJZXhpdCA7OworICAgICo6TUlOR1cqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbmd3MzIKLQlleGl0IDAgOzsKKwlleGl0IDs7CisgICAgKjpNU1lTKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1tc3lzCisJZXhpdCA7OworICAgIGkqOndpbmRvd3MzMio6KikKKwkjIHVuYW1lIC1tIGluY2x1ZGVzICItcGMiIG9uIHRoaXMgc3lzdGVtLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1taW5ndzMyCisJZXhpdCA7OworICAgIGkqOlBXKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1wdzMyCisJZXhpdCA7OworICAgICo6SW50ZXJpeCo6KikKKwljYXNlICR7VU5BTUVfTUFDSElORX0gaW4KKwkgICAgeDg2KQorCQllY2hvIGk1ODYtcGMtaW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KKwkJZXhpdCA7OworCSAgICBhdXRoZW50aWNhbWQgfCBnZW51aW5laW50ZWwgfCBFTTY0VCkKKwkJZWNobyB4ODZfNjQtdW5rbm93bi1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQorCQlleGl0IDs7CisJICAgIElBNjQpCisJCWVjaG8gaWE2NC11bmtub3duLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CisJCWV4aXQgOzsKKwllc2FjIDs7CisgICAgWzM0NV04NjpXaW5kb3dzXzk1OiogfCBbMzQ1XTg2OldpbmRvd3NfOTg6KiB8IFszNDVdODY6V2luZG93c19OVDoqKQorCWVjaG8gaSR7VU5BTUVfTUFDSElORX0tcGMtbWtzCisJZXhpdCA7OworICAgIDg2NjQ6V2luZG93c19OVDoqKQorCWVjaG8geDg2XzY0LXBjLW1rcworCWV4aXQgOzsKICAgICBpKjpXaW5kb3dzX05UKjoqIHwgUGVudGl1bSo6V2luZG93c19OVCo6KikKIAkjIEhvdyBkbyB3ZSBrbm93IGl0J3MgSW50ZXJpeCByYXRoZXIgdGhhbiB0aGUgZ2VuZXJpYyBQT1NJWCBzdWJzeXN0ZW0/CiAJIyBJdCBhbHNvIGNvbmZsaWN0cyB3aXRoIHByZS0yLjAgdmVyc2lvbnMgb2YgQVQmVCBVV0lOLiBTaG91bGQgd2UKIAkjIFVOQU1FX01BQ0hJTkUgYmFzZWQgb24gdGhlIG91dHB1dCBvZiB1bmFtZSBpbnN0ZWFkIG9mIGkzODY/Ci0JZWNobyBpMzg2LXBjLWludGVyaXgKLQlleGl0IDAgOzsKKwllY2hvIGk1ODYtcGMtaW50ZXJpeAorCWV4aXQgOzsKICAgICBpKjpVV0lOKjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy11d2luCi0JZXhpdCAwIDs7CisJZXhpdCA7OworICAgIGFtZDY0OkNZR1dJTio6KjoqIHwgeDg2XzY0OkNZR1dJTio6KjoqKQorCWVjaG8geDg2XzY0LXVua25vd24tY3lnd2luCisJZXhpdCA7OwogICAgIHAqOkNZR1dJTio6KikKIAllY2hvIHBvd2VycGNsZS11bmtub3duLWN5Z3dpbgotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBwcmVwKjpTdW5PUzo1Lio6KikKIAllY2hvIHBvd2VycGNsZS11bmtub3duLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgICo6R05VOio6KikKLQllY2hvIGBlY2hvICR7VU5BTUVfTUFDSElORX18c2VkIC1lICdzLFstL10uKiQsLCdgLXVua25vd24tZ251YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MsLy4qJCwsJ2AKLQlleGl0IDAgOzsKLSAgICAqOkxpbnV4Oio6KikKLQotCSMgVGhlIEJGRCBsaW5rZXIga25vd3Mgd2hhdCB0aGUgZGVmYXVsdCBvYmplY3QgZmlsZSBmb3JtYXQgaXMsIHNvCi0JIyBmaXJzdCBzZWUgaWYgaXQgd2lsbCB0ZWxsIHVzLiBjZCB0byB0aGUgcm9vdCBkaXJlY3RvcnkgdG8gcHJldmVudAotCSMgcHJvYmxlbXMgd2l0aCBvdGhlciBwcm9ncmFtcyBvciBkaXJlY3RvcmllcyBjYWxsZWQgYGxkJyBpbiB0aGUgcGF0aC4KLQlsZF9oZWxwX3N0cmluZz1gY2QgLzsgbGQgLS1oZWxwIDI+JjFgCi0JbGRfc3VwcG9ydGVkX2VtdWxhdGlvbnM9YGVjaG8gJGxkX2hlbHBfc3RyaW5nIFwKLQkJCSB8IHNlZCAtbmUgJy9zdXBwb3J0ZWQgZW11bGF0aW9uczovIWQKLQkJCQkgICAgcy9bIAldWyAJXSovIC9nCi0JCQkJICAgIHMvLipzdXBwb3J0ZWQgZW11bGF0aW9uczogKi8vCi0JCQkJICAgIHMvIC4qLy8KLQkJCQkgICAgcCdgCi0gICAgICAgIGNhc2UgIiRsZF9zdXBwb3J0ZWRfZW11bGF0aW9ucyIgaW4KLQkgICppYTY0KQotCQllY2hvICIke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgiCi0JCWV4aXQgMAotCQk7OwotCSAgaT84NmxpbnV4KQotCQllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LWdudWFvdXQiCi0JCWV4aXQgMAotCQk7OwotCSAgZWxmX2k/ODYpCi0JCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgiCi0JCWV4aXQgMAotCQk7OwotCSAgaT84NmNvZmYpCi0JCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtZ251Y29mZiIKLQkJZXhpdCAwCi0JCTs7Ci0JICBzcGFyY2xpbnV4KQotCQllY2hvICIke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251YW91dCIKLQkJZXhpdCAwCi0JCTs7Ci0JICBhcm1saW51eCkKLQkJZWNobyAiJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudWFvdXQiCi0JCWV4aXQgMAotCQk7OwotCSAgZWxmMzJhcm0qKQotCQllY2hvICIke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251b2xkbGQiCi0JCWV4aXQgMAotCQk7OwotCSAgYXJtZWxmX2xpbnV4KikKLQkJZWNobyAiJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudSIKLQkJZXhpdCAwCi0JCTs7Ci0JICBtNjhrbGludXgpCi0JCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnVhb3V0IgotCQlleGl0IDAKLQkJOzsKLQkgIGVsZjMycHBjIHwgZWxmMzJwcGNsaW51eCkKLQkJIyBEZXRlcm1pbmUgTGliIFZlcnNpb24KLQkJY2F0ID4kZHVtbXkuYyA8PEVPRgotI2luY2x1ZGUgPGZlYXR1cmVzLmg+Ci0jaWYgZGVmaW5lZChfX0dMSUJDX18pCi1leHRlcm4gY2hhciBfX2xpYmNfdmVyc2lvbltdOwotZXh0ZXJuIGNoYXIgX19saWJjX3JlbGVhc2VbXTsKLSNlbmRpZgotbWFpbihhcmdjLCBhcmd2KQotICAgICBpbnQgYXJnYzsKLSAgICAgY2hhciAqYXJndltdOwotewotI2lmIGRlZmluZWQoX19HTElCQ19fKQotICBwcmludGYoIiVzICVzXG4iLCBfX2xpYmNfdmVyc2lvbiwgX19saWJjX3JlbGVhc2UpOwotI2Vsc2UKLSAgcHJpbnRmKCJ1bmtvd25cbiIpOwotI2VuZGlmCi0gIHJldHVybiAwOwotfQotRU9GCi0JCUxJQkM9IiIKLQkJJENDX0ZPUl9CVUlMRCAkZHVtbXkuYyAtbyAkZHVtbXkgMj4vZGV2L251bGwKLQkJaWYgdGVzdCAiJD8iID0gMCA7IHRoZW4KLQkJCS4vJGR1bW15IHwgZ3JlcCAxXC45OSA+IC9kZXYvbnVsbAotCQkJaWYgdGVzdCAiJD8iID0gMCA7IHRoZW4KLQkJCQlMSUJDPSJsaWJjMSIKLQkJCWZpCi0JCWZpCi0JCXJtIC1mICRkdW1teS5jICRkdW1teQotCQllY2hvIHBvd2VycGMtdW5rbm93bi1saW51eC1nbnUke0xJQkN9Ci0JCWV4aXQgMAotCQk7OworCSMgdGhlIEdOVSBzeXN0ZW0KKwllY2hvIGBlY2hvICR7VU5BTUVfTUFDSElORX18c2VkIC1lICdzLFstL10uKiQsLCdgLXVua25vd24tJHtMSUJDfWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLC8uKiQsLCdgCisJZXhpdCA7OworICAgICo6R05VLyo6KjoqKQorCSMgb3RoZXIgc3lzdGVtcyB3aXRoIEdOVSBsaWJjIGFuZCB1c2VybGFuZAorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWBlY2hvICR7VU5BTUVfU1lTVEVNfSB8IHNlZCAncyxeW14vXSovLCwnIHwgdHIgIls6dXBwZXI6XSIgIls6bG93ZXI6XSJgYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYC0ke0xJQkN9CisJZXhpdCA7OworICAgIGkqODY6TWluaXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1taW5peAorCWV4aXQgOzsKKyAgICBhYXJjaDY0OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGFhcmNoNjRfYmU6TGludXg6KjoqKQorCVVOQU1FX01BQ0hJTkU9YWFyY2g2NF9iZQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgYWxwaGE6TGludXg6KjoqKQorCWNhc2UgYHNlZCAtbiAnL15jcHUgbW9kZWwvcy9eLio6IFwoLipcKS9cMS9wJyA8IC9wcm9jL2NwdWluZm9gIGluCisJICBFVjUpICAgVU5BTUVfTUFDSElORT1hbHBoYWV2NSA7OworCSAgRVY1NikgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjU2IDs7CisJICBQQ0E1NikgVU5BTUVfTUFDSElORT1hbHBoYXBjYTU2IDs7CisJICBQQ0E1NykgVU5BTUVfTUFDSElORT1hbHBoYXBjYTU2IDs7CisJICBFVjYpICAgVU5BTUVfTUFDSElORT1hbHBoYWV2NiA7OworCSAgRVY2NykgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY3IDs7CisJICBFVjY4KikgVU5BTUVfTUFDSElORT1hbHBoYWV2NjggOzsKIAllc2FjCi0KLQlpZiB0ZXN0ICIke1VOQU1FX01BQ0hJTkV9IiA9ICJhbHBoYSIgOyB0aGVuCi0JCWNhdCA8PEVPRiA+JGR1bW15LnMKLQkJCS5kYXRhCi0JCVwkTGZvcm1hdDoKLQkJCS5ieXRlIDM3LDEwMCw0NSwzNywxMjAsMTAsMAkjICIlZC0leFxuIgotCi0JCQkudGV4dAotCQkJLmdsb2JsIG1haW4KLQkJCS5hbGlnbiA0Ci0JCQkuZW50IG1haW4KLQkJbWFpbjoKLQkJCS5mcmFtZSBcJDMwLDE2LFwkMjYsMAotCQkJbGRncCBcJDI5LDAoXCQyNykKLQkJCS5wcm9sb2d1ZSAxCi0JCQkubG9uZyAweDQ3ZTAzZDgwICMgaW1wbHZlciBcJDAKLQkJCWxkYSBcJDIsLTEKLQkJCS5sb25nIDB4NDdlMjBjMjEgIyBhbWFzayBcJDIsXCQxCi0JCQlsZGEgXCQxNixcJExmb3JtYXQKLQkJCW1vdiBcJDAsXCQxNwotCQkJbm90IFwkMSxcJDE4Ci0JCQlqc3IgXCQyNixwcmludGYKLQkJCWxkZ3AgXCQyOSwwKFwkMjYpCi0JCQltb3YgMCxcJDE2Ci0JCQlqc3IgXCQyNixleGl0Ci0JCQkuZW5kIG1haW4KLUVPRgotCQlMSUJDPSIiCi0JCSRDQ19GT1JfQlVJTEQgJGR1bW15LnMgLW8gJGR1bW15IDI+L2Rldi9udWxsCi0JCWlmIHRlc3QgIiQ/IiA9IDAgOyB0aGVuCi0JCQljYXNlIGAuLyRkdW1teWAgaW4KLQkJCTAtMCkKLQkJCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIKLQkJCQk7OwotCQkJMS0wKQotCQkJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY1IgotCQkJCTs7Ci0JCQkxLTEpCi0JCQkJVU5BTUVfTUFDSElORT0iYWxwaGFldjU2IgotCQkJCTs7Ci0JCQkxLTEwMSkKLQkJCQlVTkFNRV9NQUNISU5FPSJhbHBoYXBjYTU2IgotCQkJCTs7Ci0JCQkyLTMwMykKLQkJCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NiIKLQkJCQk7OwotCQkJMi0zMDcpCi0JCQkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY3IgotCQkJCTs7Ci0JCQllc2FjCi0KLQkJCW9iamR1bXAgLS1wcml2YXRlLWhlYWRlcnMgJGR1bW15IHwgXAotCQkJICBncmVwIGxkLnNvLjEgPiAvZGV2L251bGwKLQkJCWlmIHRlc3QgIiQ/IiA9IDAgOyB0aGVuCi0JCQkJTElCQz0ibGliYzEiCi0JCQlmaQotCQlmaQotCQlybSAtZiAkZHVtbXkucyAkZHVtbXkKLQkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251JHtMSUJDfSA7IGV4aXQgMAotCWVsaWYgdGVzdCAiJHtVTkFNRV9NQUNISU5FfSIgPSAibWlwcyIgOyB0aGVuCi0JICBjYXQgPiRkdW1teS5jIDw8RU9GCi0jaWZkZWYgX19jcGx1c3BsdXMKLSNpbmNsdWRlIDxzdGRpby5oPiAgLyogZm9yIHByaW50ZigpIHByb3RvdHlwZSAqLwotCWludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7Ci0jZWxzZQotCWludCBtYWluIChhcmdjLCBhcmd2KSBpbnQgYXJnYzsgY2hhciAqYXJndltdOyB7Ci0jZW5kaWYKLSNpZmRlZiBfX01JUFNFQl9fCi0gIHByaW50ZiAoIiVzLXVua25vd24tbGludXgtZ251XG4iLCBhcmd2WzFdKTsKLSNlbmRpZgotI2lmZGVmIF9fTUlQU0VMX18KLSAgcHJpbnRmICgiJXNlbC11bmtub3duLWxpbnV4LWdudVxuIiwgYXJndlsxXSk7Ci0jZW5kaWYKLSAgcmV0dXJuIDA7Ci19Ci1FT0YKLQkgICRDQ19GT1JfQlVJTEQgJGR1bW15LmMgLW8gJGR1bW15IDI+L2Rldi9udWxsICYmIC4vJGR1bW15ICIke1VOQU1FX01BQ0hJTkV9IiAmJiBybSAkZHVtbXkuYyAkZHVtbXkgJiYgZXhpdCAwCi0JICBybSAtZiAkZHVtbXkuYyAkZHVtbXkKLQllbGlmIHRlc3QgIiR7VU5BTUVfTUFDSElORX0iID0gInMzOTAiOyB0aGVuCi0JICBlY2hvIHMzOTAtaWJtLWxpbnV4ICYmIGV4aXQgMAorCW9iamR1bXAgLS1wcml2YXRlLWhlYWRlcnMgL2Jpbi9zaCB8IGdyZXAgLXEgbGQuc28uMQorCWlmIHRlc3QgIiQ/IiA9IDAgOyB0aGVuIExJQkM9Z251bGliYzEgOyBmaQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgYXJjOkxpbnV4Oio6KiB8IGFyY2ViOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGFybSo6TGludXg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlpZiBlY2hvIF9fQVJNX0VBQklfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisJICAgIHwgZ3JlcCAtcSBfX0FSTV9FQUJJX18KKwl0aGVuCisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KIAllbHNlCi0JICAjIEVpdGhlciBhIHByZS1CRkQgYS5vdXQgbGlua2VyIChsaW51eC1nbnVvbGRsZCkKLQkgICMgb3Igb25lIHRoYXQgZG9lcyBub3QgZ2l2ZSB1cyB1c2VmdWwgLS1oZWxwLgotCSAgIyBHQ0Mgd2FudHMgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBsaW51eC1nbnVvbGRsZCBhbmQgbGludXgtZ251YW91dC4KLQkgICMgSWYgbGQgZG9lcyBub3QgcHJvdmlkZSAqYW55KiAic3VwcG9ydGVkIGVtdWxhdGlvbnM6IgotCSAgIyB0aGF0IG1lYW5zIGl0IGlzIGdudW9sZGxkLgotCSAgZWNobyAiJGxkX2hlbHBfc3RyaW5nIiB8IGdyZXAgPi9kZXYvbnVsbCAyPiYxICJzdXBwb3J0ZWQgZW11bGF0aW9uczoiCi0JICB0ZXN0ICQ/ICE9IDAgJiYgZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC1nbnVvbGRsZCIgJiYgZXhpdCAwCi0KLQkgIGNhc2UgIiR7VU5BTUVfTUFDSElORX0iIGluCi0JICBpPzg2KQotCSAgICBWRU5ET1I9cGM7Ci0JICAgIDs7Ci0JICAqKQotCSAgICBWRU5ET1I9dW5rbm93bjsKLQkgICAgOzsKLQkgIGVzYWMKLQkgICMgRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGRlZmF1bHQgY29tcGlsZXIgaXMgYS5vdXQgb3IgZWxmCi0JICBjYXQgPiRkdW1teS5jIDw8RU9GCi0jaW5jbHVkZSA8ZmVhdHVyZXMuaD4KLSNpZmRlZiBfX2NwbHVzcGx1cwotI2luY2x1ZGUgPHN0ZGlvLmg+ICAvKiBmb3IgcHJpbnRmKCkgcHJvdG90eXBlICovCi0JaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKLSNlbHNlCi0JaW50IG1haW4gKGFyZ2MsIGFyZ3YpIGludCBhcmdjOyBjaGFyICphcmd2W107IHsKLSNlbmRpZgotI2lmZGVmIF9fRUxGX18KLSMgaWZkZWYgX19HTElCQ19fCi0jICBpZiBfX0dMSUJDX18gPj0gMgotICAgIHByaW50ZiAoIiVzLSR7VkVORE9SfS1saW51eC1nbnVcbiIsIGFyZ3ZbMV0pOwotIyAgZWxzZQotICAgIHByaW50ZiAoIiVzLSR7VkVORE9SfS1saW51eC1nbnVsaWJjMVxuIiwgYXJndlsxXSk7Ci0jICBlbmRpZgotIyBlbHNlCi0gICBwcmludGYgKCIlcy0ke1ZFTkRPUn0tbGludXgtZ251bGliYzFcbiIsIGFyZ3ZbMV0pOwotIyBlbmRpZgotI2Vsc2UKLSAgcHJpbnRmICgiJXMtJHtWRU5ET1J9LWxpbnV4LWdudWFvdXRcbiIsIGFyZ3ZbMV0pOwotI2VuZGlmCi0gIHJldHVybiAwOwotfQorCSAgICBpZiBlY2hvIF9fQVJNX1BDU19WRlAgfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAorCQl8IGdyZXAgLXEgX19BUk1fUENTX1ZGUAorCSAgICB0aGVuCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ31lYWJpCisJICAgIGVsc2UKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfWVhYmloZgorCSAgICBmaQorCWZpCisJZXhpdCA7OworICAgIGF2cjMyKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBjcmlzOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tYXhpcy1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGNyaXN2MzI6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1heGlzLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgZTJrOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGZydjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBoZXhhZ29uOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGkqODY6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGlhNjQ6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgazFvbTpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBtMzJyKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBtNjgqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIG1pcHM6TGludXg6KjoqIHwgbWlwczY0OkxpbnV4Oio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkjdW5kZWYgQ1BVCisJI3VuZGVmICR7VU5BTUVfTUFDSElORX0KKwkjdW5kZWYgJHtVTkFNRV9NQUNISU5FfWVsCisJI2lmIGRlZmluZWQoX19NSVBTRUxfXykgfHwgZGVmaW5lZChfX01JUFNFTCkgfHwgZGVmaW5lZChfTUlQU0VMKSB8fCBkZWZpbmVkKE1JUFNFTCkKKwlDUFU9JHtVTkFNRV9NQUNISU5FfWVsCisJI2Vsc2UKKwkjaWYgZGVmaW5lZChfX01JUFNFQl9fKSB8fCBkZWZpbmVkKF9fTUlQU0VCKSB8fCBkZWZpbmVkKF9NSVBTRUIpIHx8IGRlZmluZWQoTUlQU0VCKQorCUNQVT0ke1VOQU1FX01BQ0hJTkV9CisJI2Vsc2UKKwlDUFU9CisJI2VuZGlmCisJI2VuZGlmCiBFT0YKLQkgICRDQ19GT1JfQlVJTEQgJGR1bW15LmMgLW8gJGR1bW15IDI+L2Rldi9udWxsICYmIC4vJGR1bW15ICIke1VOQU1FX01BQ0hJTkV9IiAmJiBybSAkZHVtbXkuYyAkZHVtbXkgJiYgZXhpdCAwCi0JICBybSAtZiAkZHVtbXkuYyAkZHVtbXkKLQlmaSA7OwotIyBwdHggNC4wIGRvZXMgdW5hbWUgLXMgY29ycmVjdGx5LCB3aXRoIERZTklYL3B0eCBpbiB0aGVyZS4gIGVhcmxpZXIgdmVyc2lvbnMKLSMgYXJlIG1lc3NlZCB1cCBhbmQgcHV0IHRoZSBub2RlbmFtZSBpbiBib3RoIHN5c25hbWUgYW5kIG5vZGVuYW1lLgotICAgIGk/ODY6RFlOSVgvcHR4OjQqOiopCisJZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgJ15DUFUnYAorCXRlc3QgeCIke0NQVX0iICE9IHggJiYgeyBlY2hvICIke0NQVX0tdW5rbm93bi1saW51eC0ke0xJQkN9IjsgZXhpdDsgfQorCTs7CisgICAgb3BlbnJpc2MqOkxpbnV4Oio6KikKKwllY2hvIG9yMWstdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIG9yMzI6TGludXg6KjoqIHwgb3Ixayo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgcGFkcmU6TGludXg6KjoqKQorCWVjaG8gc3BhcmMtdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHBhcmlzYzY0OkxpbnV4Oio6KiB8IGhwcGE2NDpMaW51eDoqOiopCisJZWNobyBocHBhNjQtdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHBhcmlzYzpMaW51eDoqOiogfCBocHBhOkxpbnV4Oio6KikKKwkjIExvb2sgZm9yIENQVSBsZXZlbAorCWNhc2UgYGdyZXAgJ15jcHVbXmEtel0qOicgL3Byb2MvY3B1aW5mbyAyPi9kZXYvbnVsbCB8IGN1dCAtZCcgJyAtZjJgIGluCisJICBQQTcqKSBlY2hvIGhwcGExLjEtdW5rbm93bi1saW51eC0ke0xJQkN9IDs7CisJICBQQTgqKSBlY2hvIGhwcGEyLjAtdW5rbm93bi1saW51eC0ke0xJQkN9IDs7CisJICAqKSAgICBlY2hvIGhwcGEtdW5rbm93bi1saW51eC0ke0xJQkN9IDs7CisJZXNhYworCWV4aXQgOzsKKyAgICBwcGM2NDpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjNjQtdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHBwYzpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjLXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBwcGM2NGxlOkxpbnV4Oio6KikKKwllY2hvIHBvd2VycGM2NGxlLXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBwcGNsZTpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjbGUtdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHMzOTA6TGludXg6KjoqIHwgczM5MHg6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBzaDY0KjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBzaCo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgc3BhcmM6TGludXg6KjoqIHwgc3BhcmM2NDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICB0aWxlKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICB2YXg6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICB4ODZfNjQ6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHh0ZW5zYSo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgaSo4NjpEWU5JWC9wdHg6NCo6KikKKwkjIHB0eCA0LjAgZG9lcyB1bmFtZSAtcyBjb3JyZWN0bHksIHdpdGggRFlOSVgvcHR4IGluIHRoZXJlLgorCSMgZWFybGllciB2ZXJzaW9ucyBhcmUgbWVzc2VkIHVwIGFuZCBwdXQgdGhlIG5vZGVuYW1lIGluIGJvdGgKKwkjIHN5c25hbWUgYW5kIG5vZGVuYW1lLgogCWVjaG8gaTM4Ni1zZXF1ZW50LXN5c3Y0Ci0JZXhpdCAwIDs7Ci0gICAgaT84NjpVTklYX1NWOjQuMk1QOjIuKikKLSAgICAgICAgIyBVbml4d2FyZSBpcyBhbiBvZmZzaG9vdCBvZiBTVlI0LCBidXQgaXQgaGFzIGl0cyBvd24gdmVyc2lvbgotICAgICAgICAjIG51bWJlciBzZXJpZXMgc3RhcnRpbmcgd2l0aCAyLi4uCi0gICAgICAgICMgSSBhbSBub3QgcG9zaXRpdmUgdGhhdCBvdGhlciBTVlI0IHN5c3RlbXMgd29uJ3QgbWF0Y2ggdGhpcywKKwlleGl0IDs7CisgICAgaSo4NjpVTklYX1NWOjQuMk1QOjIuKikKKwkjIFVuaXh3YXJlIGlzIGFuIG9mZnNob290IG9mIFNWUjQsIGJ1dCBpdCBoYXMgaXRzIG93biB2ZXJzaW9uCisJIyBudW1iZXIgc2VyaWVzIHN0YXJ0aW5nIHdpdGggMi4uLgorCSMgSSBhbSBub3QgcG9zaXRpdmUgdGhhdCBvdGhlciBTVlI0IHN5c3RlbXMgd29uJ3QgbWF0Y2ggdGhpcywKIAkjIEkganVzdCBoYXZlIHRvIGhvcGUuICAtLSBybXMuCi0gICAgICAgICMgVXNlIHN5c3Y0LjJ1dy4uLiBzbyB0aGF0IHN5c3Y0KiBtYXRjaGVzIGl0LgorCSMgVXNlIHN5c3Y0LjJ1dy4uLiBzbyB0aGF0IHN5c3Y0KiBtYXRjaGVzIGl0LgogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2NC4ydXcke1VOQU1FX1ZFUlNJT059Ci0JZXhpdCAwIDs7Ci0gICAgaT84NjoqOjQuKjoqIHwgaT84NjpTWVNURU1fVjo0Lio6KikKKwlleGl0IDs7CisgICAgaSo4NjpPUy8yOio6KikKKwkjIElmIHdlIHdlcmUgYWJsZSB0byBmaW5kIGB1bmFtZScsIHRoZW4gRU1YIFVuaXggY29tcGF0aWJpbGl0eQorCSMgaXMgcHJvYmFibHkgaW5zdGFsbGVkLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1vczItZW14CisJZXhpdCA7OworICAgIGkqODY6WFRTLTMwMDoqOlNUT1ApCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc3RvcAorCWV4aXQgOzsKKyAgICBpKjg2OmF0aGVvczoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYXRoZW9zCisJZXhpdCA7OworICAgIGkqODY6c3lsbGFibGU6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeWxsYWJsZQorCWV4aXQgOzsKKyAgICBpKjg2Okx5bnhPUzoyLio6KiB8IGkqODY6THlueE9TOjMuWzAxXSo6KiB8IGkqODY6THlueE9TOjQuWzAyXSo6KikKKwllY2hvIGkzODYtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGkqODY6KkRPUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1zZG9zZGpncHAKKwlleGl0IDs7CisgICAgaSo4NjoqOjQuKjoqIHwgaSo4NjpTWVNURU1fVjo0Lio6KikKIAlVTkFNRV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAncy9cL01QJC8vJ2AKIAlpZiBncmVwIE5vdmVsbCAvdXNyL2luY2x1ZGUvbGluay5oID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KIAkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVuaXZlbC1zeXN2JHtVTkFNRV9SRUx9CiAJZWxzZQogCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdiR7VU5BTUVfUkVMfQogCWZpCi0JZXhpdCAwIDs7Ci0gICAgaT84NjoqOjU6NyopCi0gICAgICAgICMgRml4ZWQgYXQgKGFueSkgUGVudGl1bSBvciBiZXR0ZXIKLSAgICAgICAgVU5BTUVfTUFDSElORT1pNTg2Ci0gICAgICAgIGlmIFsgJHtVTkFNRV9TWVNURU19ID0gIlVuaXhXYXJlIiBdIDsgdGhlbgotCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tc2NvLXN5c3Yke1VOQU1FX1JFTEVBU0V9dXcke1VOQU1FX1ZFUlNJT059Ci0JZWxzZQotCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdiR7VU5BTUVfUkVMRUFTRX0KLQlmaQotCWV4aXQgMCA7OwotICAgIGk/ODY6KjozLjI6KikKKwlleGl0IDs7CisgICAgaSo4NjoqOjU6WzY3OF0qKQorCSMgVW5peFdhcmUgNy54LCBPcGVuVU5JWCBhbmQgT3BlblNlcnZlciA2LgorCWNhc2UgYC9iaW4vdW5hbWUgLVggfCBncmVwICJeTWFjaGluZSJgIGluCisJICAgICo0ODYqKQkgICAgIFVOQU1FX01BQ0hJTkU9aTQ4NiA7OworCSAgICAqUGVudGl1bSkJICAgICBVTkFNRV9NQUNISU5FPWk1ODYgOzsKKwkgICAgKlBlbnQqfCpDZWxlcm9uKSBVTkFNRV9NQUNISU5FPWk2ODYgOzsKKwllc2FjCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc3lzdiR7VU5BTUVfUkVMRUFTRX0ke1VOQU1FX1NZU1RFTX0ke1VOQU1FX1ZFUlNJT059CisJZXhpdCA7OworICAgIGkqODY6KjozLjI6KikKIAlpZiB0ZXN0IC1mIC91c3Ivb3B0aW9ucy9jYi5uYW1lOyB0aGVuCiAJCVVOQU1FX1JFTD1gc2VkIC1uICdzLy4qVmVyc2lvbiAvL3AnIDwvdXNyL29wdGlvbnMvY2IubmFtZWAKIAkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWlzYyRVTkFNRV9SRUwKIAllbGlmIC9iaW4vdW5hbWUgLVggMj4vZGV2L251bGwgPi9kZXYvbnVsbCA7IHRoZW4KLQkJVU5BTUVfUkVMPWAoL2Jpbi91bmFtZSAtWHxlZ3JlcCBSZWxlYXNlfHNlZCAtZSAncy8uKj0gLy8nKWAKLQkJKC9iaW4vdW5hbWUgLVh8ZWdyZXAgaTgwNDg2ID4vZGV2L251bGwpICYmIFVOQU1FX01BQ0hJTkU9aTQ4NgotCQkoL2Jpbi91bmFtZSAtWHxlZ3JlcCAnXk1hY2hpbmUuKlBlbnRpdW0nID4vZGV2L251bGwpIFwKKwkJVU5BTUVfUkVMPWAoL2Jpbi91bmFtZSAtWHxncmVwIFJlbGVhc2V8c2VkIC1lICdzLy4qPSAvLycpYAorCQkoL2Jpbi91bmFtZSAtWHxncmVwIGk4MDQ4NiA+L2Rldi9udWxsKSAmJiBVTkFNRV9NQUNISU5FPWk0ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnRpdW0nID4vZGV2L251bGwpIFwKIAkJCSYmIFVOQU1FX01BQ0hJTkU9aTU4NgotCQkoL2Jpbi91bmFtZSAtWHxlZ3JlcCAnXk1hY2hpbmUuKlBlbnQgP0lJJyA+L2Rldi9udWxsKSBcCisJCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50ICpJSScgPi9kZXYvbnVsbCkgXAogCQkJJiYgVU5BTUVfTUFDSElORT1pNjg2Ci0JCSgvYmluL3VuYW1lIC1YfGVncmVwICdeTWFjaGluZS4qUGVudGl1bSBQcm8nID4vZGV2L251bGwpIFwKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnRpdW0gUHJvJyA+L2Rldi9udWxsKSBcCiAJCQkmJiBVTkFNRV9NQUNISU5FPWk2ODYKIAkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXNjbyRVTkFNRV9SRUwKIAllbHNlCiAJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2MzIKIAlmaQotCWV4aXQgMCA7OwotICAgIGk/ODY6KkRPUzoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1zZG9zZGpncHAKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgcGM6KjoqOiopCiAJIyBMZWZ0IGhlcmUgZm9yIGNvbXBhdGliaWxpdHk6Ci0gICAgICAgICMgdW5hbWUgLW0gcHJpbnRzIGZvciBESkdQUCBhbHdheXMgJ3BjJywgYnV0IGl0IHByaW50cyBub3RoaW5nIGFib3V0Ci0gICAgICAgICMgdGhlIHByb2Nlc3Nvciwgc28gd2UgcGxheSBzYWZlIGJ5IGFzc3VtaW5nIGkzODYuCi0JZWNobyBpMzg2LXBjLW1zZG9zZGpncHAKLSAgICAgICAgZXhpdCAwIDs7CisJIyB1bmFtZSAtbSBwcmludHMgZm9yIERKR1BQIGFsd2F5cyAncGMnLCBidXQgaXQgcHJpbnRzIG5vdGhpbmcgYWJvdXQKKwkjIHRoZSBwcm9jZXNzb3IsIHNvIHdlIHBsYXkgc2FmZSBieSBhc3N1bWluZyBpNTg2LgorCSMgTm90ZTogd2hhdGV2ZXIgdGhpcyBpcywgaXQgTVVTVCBiZSB0aGUgc2FtZSBhcyB3aGF0IGNvbmZpZy5zdWIKKwkjIHByaW50cyBmb3IgdGhlICJkamdwcCIgaG9zdCwgb3IgZWxzZSBHREIgY29uZmlndXJlIHdpbGwgZGVjaWRlIHRoYXQKKwkjIHRoaXMgaXMgYSBjcm9zcy1idWlsZC4KKwllY2hvIGk1ODYtcGMtbXNkb3NkamdwcAorCWV4aXQgOzsKICAgICBJbnRlbDpNYWNoOjMqOiopCiAJZWNobyBpMzg2LXBjLW1hY2gzCi0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIHBhcmFnb246KjoqOiopCiAJZWNobyBpODYwLWludGVsLW9zZjEKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgaTg2MDoqOjQuKjoqKSAjIGk4NjAtU1ZSNAogCWlmIGdyZXAgU3RhcmRlbnQgL3Vzci9pbmNsdWRlL3N5cy91YWRtaW4uaCA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCiAJICBlY2hvIGk4NjAtc3RhcmRlbnQtc3lzdiR7VU5BTUVfUkVMRUFTRX0gIyBTdGFyZGVudCBWaXN0cmEgaTg2MC1TVlI0CiAJZWxzZSAjIEFkZCBvdGhlciBpODYwLVNWUjQgdmVuZG9ycyBiZWxvdyBhcyB0aGV5IGFyZSBkaXNjb3ZlcmVkLgogCSAgZWNobyBpODYwLXVua25vd24tc3lzdiR7VU5BTUVfUkVMRUFTRX0gICMgVW5rbm93biBpODYwLVNWUjQKIAlmaQotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBtaW5pKjpDVElYOlNZUyo1OiopCiAJIyAibWluaWZyYW1lIgogCWVjaG8gbTY4MDEwLWNvbnZlcmdlbnQtc3lzdgotCWV4aXQgMCA7OwotICAgIE02OCo6KjpSM1ZbNTY3XSo6KikKLQl0ZXN0IC1yIC9zeXNWNjggJiYgZWNobyAnbTY4ay1tb3Rvcm9sYS1zeXN2JyAmJiBleGl0IDAgOzsKLSAgICAzWzM0XT8/Oio6NC4wOjMuMCB8IDNbMzRdPz8sKjoqOjQuMDozLjAgfCA0ODUwOio6NC4wOjMuMCkKKwlleGl0IDs7CisgICAgbWM2OGs6VU5JWDpTWVNURU01OjMuNTFtKQorCWVjaG8gbTY4ay1jb252ZXJnZW50LXN5c3YKKwlleGl0IDs7CisgICAgTTY4MD8wOkQtTklYOjUuMzoqKQorCWVjaG8gbTY4ay1kaWFiLWRuaXgKKwlleGl0IDs7CisgICAgTTY4KjoqOlIzVls1Njc4XSo6KikKKwl0ZXN0IC1yIC9zeXNWNjggJiYgeyBlY2hvICdtNjhrLW1vdG9yb2xhLXN5c3YnOyBleGl0OyB9IDs7CisgICAgM1szNDVdPz86Kjo0LjA6My4wIHwgM1szNF0/P0E6Kjo0LjA6My4wIHwgM1szNF0/PywqOio6NC4wOjMuMCB8IDNbMzRdPz8vKjoqOjQuMDozLjAgfCA0NDAwOio6NC4wOjMuMCB8IDQ4NTA6Kjo0LjA6My4wIHwgU0tBNDA6Kjo0LjA6My4wIHwgU0RTMjoqOjQuMDozLjAgfCBTSEcyOio6NC4wOjMuMCB8IFM3NTAxKjoqOjQuMDozLjApCiAJT1NfUkVMPScnCiAJdGVzdCAtciAvZXRjLy5yZWxpZCBcCiAJJiYgT1NfUkVMPS5gc2VkIC1uICdzL1teIF0qIFteIF0qIFwoWzAtOV1bMC05XVwpLiovXDEvcCcgPCAvZXRjLy5yZWxpZGAKIAkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKLQkgICYmIGVjaG8gaTQ4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfSAmJiBleGl0IDAKKwkgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9CiAJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBlbnRpdW0gPi9kZXYvbnVsbCBcCi0JICAmJiBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH0gJiYgZXhpdCAwIDs7CisJICAmJiB7IGVjaG8gaTU4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfSA7OwogICAgIDNbMzRdPz86Kjo0LjA6KiB8IDNbMzRdPz8sKjoqOjQuMDoqKQotICAgICAgICAvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKLSAgICAgICAgICAmJiBlY2hvIGk0ODYtbmNyLXN5c3Y0ICYmIGV4aXQgMCA7OwotICAgIG02OCo6THlueE9TOjIuKjoqKQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAorCSAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0OyBleGl0OyB9IDs7CisgICAgTkNSKjoqOjQuMjoqIHwgTVBSQVMqOio6NC4yOiopCisJT1NfUkVMPScuMycKKwl0ZXN0IC1yIC9ldGMvLnJlbGlkIFwKKwkgICAgJiYgT1NfUkVMPS5gc2VkIC1uICdzL1teIF0qIFteIF0qIFwoWzAtOV1bMC05XVwpLiovXDEvcCcgPCAvZXRjLy5yZWxpZGAKKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKKwkgICAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0KKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIGVudGl1bSA+L2Rldi9udWxsIFwKKwkgICAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0KKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIHB0ZXJvbiA+L2Rldi9udWxsIFwKKwkgICAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0gOzsKKyAgICBtNjgqOkx5bnhPUzoyLio6KiB8IG02OCo6THlueE9TOjMuMCo6KikKIAllY2hvIG02OGstdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIG1jNjgwMzA6VU5JWF9TeXN0ZW1fVjo0Lio6KikKIAllY2hvIG02OGstYXRhcmktc3lzdjQKLQlleGl0IDAgOzsKLSAgICBpPzg2Okx5bnhPUzoyLio6KiB8IGk/ODY6THlueE9TOjMuWzAxXSo6KikKLQllY2hvIGkzODYtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIFRTVU5BTUk6THlueE9TOjIuKjoqKQogCWVjaG8gc3BhcmMtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7Ci0gICAgcnM2MDAwOkx5bnhPUzoyLio6KiB8IFBvd2VyUEM6THlueE9TOjIuKjoqKQorCWV4aXQgOzsKKyAgICByczYwMDA6THlueE9TOjIuKjoqKQogCWVjaG8gcnM2MDAwLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OworCWV4aXQgOzsKKyAgICBQb3dlclBDOkx5bnhPUzoyLio6KiB8IFBvd2VyUEM6THlueE9TOjMuWzAxXSo6KiB8IFBvd2VyUEM6THlueE9TOjQuWzAyXSo6KikKKwllY2hvIHBvd2VycGMtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OwogICAgIFNNW0JFXVM6VU5JWF9TVjoqOiopCiAJZWNobyBtaXBzLWRkZS1zeXN2JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBSTSo6UmVsaWFudFVOSVgtKjoqOiopCiAJZWNobyBtaXBzLXNuaS1zeXN2NAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBSTSo6U0lOSVgtKjoqOiopCiAJZWNobyBtaXBzLXNuaS1zeXN2NAotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICAqOlNJTklYLSo6KjoqKQogCWlmIHVuYW1lIC1wIDI+L2Rldi9udWxsID4vZGV2L251bGwgOyB0aGVuCiAJCVVOQU1FX01BQ0hJTkU9YCh1bmFtZSAtcCkgMj4vZGV2L251bGxgCkBAIC05NzAsMjE0ICsxMjExLDI0NiBAQAogCWVsc2UKIAkJZWNobyBuczMyay1zbmktc3lzdgogCWZpCi0JZXhpdCAwIDs7Ci0gICAgUEVOVElVTTpDUHVuaXg6NC4wKjoqKSAjIFVuaXN5cyBgQ2xlYXJQYXRoIEhNUCBJWCA0MDAwJyBTVlI0L01QIGVmZm9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzYXlzIDxSaWNoYXJkLk0uQmFydGVsQGNjTWFpbC5DZW5zdXMuR09WPgotICAgICAgICBlY2hvIGk1ODYtdW5pc3lzLXN5c3Y0Ci0gICAgICAgIGV4aXQgMCA7OworCWV4aXQgOzsKKyAgICBQRU5USVVNOio6NC4wKjoqKQkjIFVuaXN5cyBgQ2xlYXJQYXRoIEhNUCBJWCA0MDAwJyBTVlI0L01QIGVmZm9ydAorCQkJIyBzYXlzIDxSaWNoYXJkLk0uQmFydGVsQGNjTWFpbC5DZW5zdXMuR09WPgorCWVjaG8gaTU4Ni11bmlzeXMtc3lzdjQKKwlleGl0IDs7CiAgICAgKjpVTklYX1N5c3RlbV9WOjQqOkZUWCopCiAJIyBGcm9tIEdlcmFsZCBIZXdlcyA8aGV3ZXNAb3Blbm1hcmtldC5jb20+LgogCSMgSG93IGFib3V0IGRpZmZlcmVudGlhdGluZyBiZXR3ZWVuIHN0cmF0dXMgYXJjaGl0ZWN0dXJlcz8gLWRqbQogCWVjaG8gaHBwYTEuMS1zdHJhdHVzLXN5c3Y0Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgICo6KjoqOkZUWCopCiAJIyBGcm9tIHNlYW5mQHN3ZGMuc3RyYXR1cy5jb20uCiAJZWNobyBpODYwLXN0cmF0dXMtc3lzdjQKLQlleGl0IDAgOzsKKwlleGl0IDs7CisgICAgaSo4NjpWT1M6KjoqKQorCSMgRnJvbSBQYXVsLkdyZWVuQHN0cmF0dXMuY29tLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1zdHJhdHVzLXZvcworCWV4aXQgOzsKKyAgICAqOlZPUzoqOiopCisJIyBGcm9tIFBhdWwuR3JlZW5Ac3RyYXR1cy5jb20uCisJZWNobyBocHBhMS4xLXN0cmF0dXMtdm9zCisJZXhpdCA7OwogICAgIG1jNjgqOkEvVVg6KjoqKQogCWVjaG8gbTY4ay1hcHBsZS1hdXgke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7Ci0gICAgbmV3cyo6TkVXUy1PUzoqOjYqKQorCWV4aXQgOzsKKyAgICBuZXdzKjpORVdTLU9TOjYqOiopCiAJZWNobyBtaXBzLXNvbnktbmV3c29zNgotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBSWzM0XTAwMDoqU3lzdGVtX1YqOio6KiB8IFI0MDAwOlVOSVhfU1lTVjoqOiogfCBSKjAwMDpVTklYX1NWOio6KikKIAlpZiBbIC1kIC91c3IvbmVjIF07IHRoZW4KLQkgICAgICAgIGVjaG8gbWlwcy1uZWMtc3lzdiR7VU5BTUVfUkVMRUFTRX0KKwkJZWNobyBtaXBzLW5lYy1zeXN2JHtVTkFNRV9SRUxFQVNFfQogCWVsc2UKLQkgICAgICAgIGVjaG8gbWlwcy11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9CisJCWVjaG8gbWlwcy11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9CiAJZmkKLSAgICAgICAgZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIEJlQm94OkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBoYXJkd2FyZSBtYWRlIGJ5IEJlLCBQUEMgb25seS4KIAllY2hvIHBvd2VycGMtYmUtYmVvcwotCWV4aXQgMCA7OworCWV4aXQgOzsKICAgICBCZU1hYzpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gTWFjIG9yIE1hYyBjbG9uZSwgUFBDIG9ubHkuCiAJZWNobyBwb3dlcnBjLWFwcGxlLWJlb3MKLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgQmVQQzpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gSW50ZWwgUEMgY29tcGF0aWJsZS4KIAllY2hvIGk1ODYtcGMtYmVvcwotCWV4aXQgMCA7OworCWV4aXQgOzsKKyAgICBCZVBDOkhhaWt1Oio6KikJIyBIYWlrdSBydW5uaW5nIG9uIEludGVsIFBDIGNvbXBhdGlibGUuCisJZWNobyBpNTg2LXBjLWhhaWt1CisJZXhpdCA7OworICAgIHg4Nl82NDpIYWlrdToqOiopCisJZWNobyB4ODZfNjQtdW5rbm93bi1oYWlrdQorCWV4aXQgOzsKICAgICBTWC00OlNVUEVSLVVYOio6KikKIAllY2hvIHN4NC1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgU1gtNTpTVVBFUi1VWDoqOiopCiAJZWNobyBzeDUtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZXhpdCA7OworICAgIFNYLTY6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g2LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC03OlNVUEVSLVVYOio6KikKKwllY2hvIHN4Ny1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtODpTVVBFUi1VWDoqOiopCisJZWNobyBzeDgtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLThSOlNVUEVSLVVYOio6KikKKwllY2hvIHN4OHItbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLUFDRTpTVVBFUi1VWDoqOiopCisJZWNobyBzeGFjZS1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CiAgICAgUG93ZXIqOlJoYXBzb2R5Oio6KikKIAllY2hvIHBvd2VycGMtYXBwbGUtcmhhcHNvZHkke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgICo6UmhhcHNvZHk6KjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1hcHBsZS1yaGFwc29keSR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDAgOzsKKwlleGl0IDs7CiAgICAgKjpEYXJ3aW46KjoqKQotCWVjaG8gYHVuYW1lIC1wYC1hcHBsZS1kYXJ3aW4ke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJVU5BTUVfUFJPQ0VTU09SPWB1bmFtZSAtcGAgfHwgVU5BTUVfUFJPQ0VTU09SPXVua25vd24KKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSB1bmtub3duIDsgdGhlbgorCSAgICBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYworCWZpCisJaWYgdGVzdCBgZWNobyAiJFVOQU1FX1JFTEVBU0UiIHwgc2VkIC1lICdzL1wuLiovLydgIC1sZSAxMCA7IHRoZW4KKwkgICAgaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gbm9fY29tcGlsZXJfZm91bmQgXTsgdGhlbgorCQlpZiAoZWNobyAnI2lmZGVmIF9fTFA2NF9fJzsgZWNobyBJU182NEJJVF9BUkNIOyBlY2hvICcjZW5kaWYnKSB8IFwKKwkJICAgIChDQ09QVFM9IiIgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8IFwKKwkJICAgIGdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCisJCXRoZW4KKwkJICAgIGNhc2UgJFVOQU1FX1BST0NFU1NPUiBpbgorCQkJaTM4NikgVU5BTUVfUFJPQ0VTU09SPXg4Nl82NCA7OworCQkJcG93ZXJwYykgVU5BTUVfUFJPQ0VTU09SPXBvd2VycGM2NCA7OworCQkgICAgZXNhYworCQlmaQorCSAgICBmaQorCWVsaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSBpMzg2IDsgdGhlbgorCSAgICAjIEF2b2lkIGV4ZWN1dGluZyBjYyBvbiBPUyBYIDEwLjksIGFzIGl0IHNoaXBzIHdpdGggYSBzdHViCisJICAgICMgdGhhdCBwdXRzIHVwIGEgZ3JhcGhpY2FsIGFsZXJ0IHByb21wdGluZyB0byBpbnN0YWxsCisJICAgICMgZGV2ZWxvcGVyIHRvb2xzLiAgQW55IHN5c3RlbSBydW5uaW5nIE1hYyBPUyBYIDEwLjcgb3IKKwkgICAgIyBsYXRlciAoRGFyd2luIDExIGFuZCBsYXRlcikgaXMgcmVxdWlyZWQgdG8gaGF2ZSBhIDY0LWJpdAorCSAgICAjIHByb2Nlc3Nvci4gVGhpcyBpcyBub3QgdHJ1ZSBvZiB0aGUgQVJNIHZlcnNpb24gb2YgRGFyd2luCisJICAgICMgdGhhdCBBcHBsZSB1c2VzIGluIHBvcnRhYmxlIGRldmljZXMuCisJICAgIFVOQU1FX1BST0NFU1NPUj14ODZfNjQKKwlmaQorCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LWFwcGxlLWRhcndpbiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CiAgICAgKjpwcm9jbnRvKjoqOiogfCAqOlFOWDpbMDEyMzQ1Njc4OV0qOiopCi0JaWYgdGVzdCAiJHtVTkFNRV9NQUNISU5FfSIgPSAieDg2cGMiOyB0aGVuCisJVU5BTUVfUFJPQ0VTU09SPWB1bmFtZSAtcGAKKwlpZiB0ZXN0ICIkVU5BTUVfUFJPQ0VTU09SIiA9IHg4NjsgdGhlbgorCQlVTkFNRV9QUk9DRVNTT1I9aTM4NgogCQlVTkFNRV9NQUNISU5FPXBjCiAJZmkKLQllY2hvIGB1bmFtZSAtcGAtJHtVTkFNRV9NQUNISU5FfS1udG8tcW54Ci0JZXhpdCAwIDs7CisJZWNobyAke1VOQU1FX1BST0NFU1NPUn0tJHtVTkFNRV9NQUNISU5FfS1udG8tcW54JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKICAgICAqOlFOWDoqOjQqKQogCWVjaG8gaTM4Ni1wYy1xbngKLQlleGl0IDAgOzsKLSAgICBOU1ItVzpOT05TVE9QX0tFUk5FTDoqOiopCisJZXhpdCA7OworICAgIE5FTy0/Ok5PTlNUT1BfS0VSTkVMOio6KikKKwllY2hvIG5lby10YW5kZW0tbnNrJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBOU0UtKjpOT05TVE9QX0tFUk5FTDoqOiopCisJZWNobyBuc2UtdGFuZGVtLW5zayR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgTlNSLT86Tk9OU1RPUF9LRVJORUw6KjoqKQogCWVjaG8gbnNyLXRhbmRlbS1uc2ske1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZXhpdCA7OworICAgICo6Tm9uU3RvcC1VWDoqOiopCisJZWNobyBtaXBzLWNvbXBhcS1ub25zdG9wdXgKKwlleGl0IDs7CiAgICAgQlMyMDAwOlBPU0lYKjoqOiopCiAJZWNobyBiczIwMDAtc2llbWVucy1zeXN2Ci0JZXhpdCAwIDs7CisJZXhpdCA7OwogICAgIERTLyo6VU5JWF9TeXN0ZW1fVjoqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LSR7VU5BTUVfU1lTVEVNfS0ke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCAwIDs7CisJZXhpdCA7OworICAgICo6UGxhbjk6KjoqKQorCSMgInVuYW1lIC1tIiBpcyBub3QgY29uc2lzdGVudCwgc28gdXNlICRjcHV0eXBlIGluc3RlYWQuIDM4NgorCSMgaXMgY29udmVydGVkIHRvIGkzODYgZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgeDg2CisJIyBvcGVyYXRpbmcgc3lzdGVtcy4KKwlpZiB0ZXN0ICIkY3B1dHlwZSIgPSAzODY7IHRoZW4KKwkgICAgVU5BTUVfTUFDSElORT1pMzg2CisJZWxzZQorCSAgICBVTkFNRV9NQUNISU5FPSIkY3B1dHlwZSIKKwlmaQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXBsYW45CisJZXhpdCA7OworICAgICo6VE9QUy0xMDoqOiopCisJZWNobyBwZHAxMC11bmtub3duLXRvcHMxMAorCWV4aXQgOzsKKyAgICAqOlRFTkVYOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdGVuZXgKKwlleGl0IDs7CisgICAgS1MxMDpUT1BTLTIwOio6KiB8IEtMMTA6VE9QUy0yMDoqOiogfCBUWVBFNDpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLWRlYy10b3BzMjAKKwlleGl0IDs7CisgICAgWEtMLTE6VE9QUy0yMDoqOiogfCBUWVBFNTpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLXhrbC10b3BzMjAKKwlleGl0IDs7CisgICAgKjpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdG9wczIwCisJZXhpdCA7OworICAgICo6SVRTOio6KikKKwllY2hvIHBkcDEwLXVua25vd24taXRzCisJZXhpdCA7OworICAgIFNFSToqOio6U0VJVVgpCisJZWNobyBtaXBzLXNlaS1zZWl1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpEcmFnb25GbHk6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWRyYWdvbmZseWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AKKwlleGl0IDs7CisgICAgKjoqVk1TOio6KikKKwlVTkFNRV9NQUNISU5FPWAodW5hbWUgLXApIDI+L2Rldi9udWxsYAorCWNhc2UgIiR7VU5BTUVfTUFDSElORX0iIGluCisJICAgIEEqKSBlY2hvIGFscGhhLWRlYy12bXMgOyBleGl0IDs7CisJICAgIEkqKSBlY2hvIGlhNjQtZGVjLXZtcyA7IGV4aXQgOzsKKwkgICAgViopIGVjaG8gdmF4LWRlYy12bXMgOyBleGl0IDs7CisJZXNhYyA7OworICAgICo6WEVOSVg6KjpTeXNWKQorCWVjaG8gaTM4Ni1wYy14ZW5peAorCWV4aXQgOzsKKyAgICBpKjg2OnNreW9zOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc2t5b3NgZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzLyAuKiQvLydgCisJZXhpdCA7OworICAgIGkqODY6cmRvczoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXJkb3MKKwlleGl0IDs7CisgICAgaSo4NjpBUk9TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtYXJvcworCWV4aXQgOzsKKyAgICB4ODZfNjQ6Vk1rZXJuZWw6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWVzeAorCWV4aXQgOzsKKyAgICBhbWQ2NDpJc2lsb25cIE9uZUZTOio6KikKKwllY2hvIHg4Nl82NC11bmtub3duLW9uZWZzCisJZXhpdCA7OwogZXNhYwogCi0jZWNobyAnKE5vIHVuYW1lIGNvbW1hbmQgb3IgdW5hbWUgb3V0cHV0IG5vdCByZWNvZ25pemVkLiknIDE+JjIKLSNlY2hvICIke1VOQU1FX01BQ0hJTkV9OiR7VU5BTUVfU1lTVEVNfToke1VOQU1FX1JFTEVBU0V9OiR7VU5BTUVfVkVSU0lPTn0iIDE+JjIKK2NhdCA+JjIgPDxFT0YKKyQwOiB1bmFibGUgdG8gZ3Vlc3Mgc3lzdGVtIHR5cGUKIAotY2F0ID4kZHVtbXkuYyA8PEVPRgotI2lmZGVmIF9TRVFVRU5UXwotIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSMgaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KLSNlbmRpZgotbWFpbiAoKQotewotI2lmIGRlZmluZWQgKHNvbnkpCi0jaWYgZGVmaW5lZCAoTUlQU0VCKQotICAvKiBCRkQgd2FudHMgImJzZCIgaW5zdGVhZCBvZiAibmV3c29zIi4gIFBlcmhhcHMgQkZEIHNob3VsZCBiZSBjaGFuZ2VkLAotICAgICBJIGRvbid0IGtub3cuLi4uICAqLwotICBwcmludGYgKCJtaXBzLXNvbnktYnNkXG4iKTsgZXhpdCAoMCk7Ci0jZWxzZQotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotICBwcmludGYgKCJtNjhrLXNvbnktbmV3c29zJXNcbiIsCi0jaWZkZWYgTkVXU09TNAotICAgICAgICAgICI0IgotI2Vsc2UKLQkgICIiCi0jZW5kaWYKLSAgICAgICAgICk7IGV4aXQgKDApOwotI2VuZGlmCi0jZW5kaWYKK1RoaXMgc2NyaXB0ICh2ZXJzaW9uICR0aW1lc3RhbXApLCBoYXMgZmFpbGVkIHRvIHJlY29nbml6ZSB0aGUKK29wZXJhdGluZyBzeXN0ZW0geW91IGFyZSB1c2luZy4gSWYgeW91ciBzY3JpcHQgaXMgb2xkLCBvdmVyd3JpdGUKK2NvbmZpZy5ndWVzcyBhbmQgY29uZmlnLnN1YiB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbnMgZnJvbToKIAotI2lmIGRlZmluZWQgKF9fYXJtKSAmJiBkZWZpbmVkIChfX2Fjb3JuKSAmJiBkZWZpbmVkIChfX3VuaXgpCi0gIHByaW50ZiAoImFybS1hY29ybi1yaXNjaXgiKTsgZXhpdCAoMCk7Ci0jZW5kaWYKKyAgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5ndWVzcworYW5kCisgIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuc3ViCiAKLSNpZiBkZWZpbmVkIChocDMwMCkgJiYgIWRlZmluZWQgKGhwdXgpCi0gIHByaW50ZiAoIm02OGstaHAtYnNkXG4iKTsgZXhpdCAoMCk7Ci0jZW5kaWYKK0lmICQwIGhhcyBhbHJlYWR5IGJlZW4gdXBkYXRlZCwgc2VuZCB0aGUgZm9sbG93aW5nIGRhdGEgYW5kIGFueQoraW5mb3JtYXRpb24geW91IHRoaW5rIG1pZ2h0IGJlIHBlcnRpbmVudCB0byBjb25maWctcGF0Y2hlc0BnbnUub3JnIHRvCitwcm92aWRlIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gaGFuZGxlIHlvdXIgc3lzdGVtLgogCi0jaWYgZGVmaW5lZCAoTmVYVCkKLSNpZiAhZGVmaW5lZCAoX19BUkNISVRFQ1RVUkVfXykKLSNkZWZpbmUgX19BUkNISVRFQ1RVUkVfXyAibTY4ayIKLSNlbmRpZgotICBpbnQgdmVyc2lvbjsKLSAgdmVyc2lvbj1gKGhvc3RpbmZvIHwgc2VkIC1uICdzLy4qTmVYVCBNYWNoIFwoWzAtOV0qXCkuKi9cMS9wJykgMj4vZGV2L251bGxgOwotICBpZiAodmVyc2lvbiA8IDQpCi0gICAgcHJpbnRmICgiJXMtbmV4dC1uZXh0c3RlcCVkXG4iLCBfX0FSQ0hJVEVDVFVSRV9fLCB2ZXJzaW9uKTsKLSAgZWxzZQotICAgIHByaW50ZiAoIiVzLW5leHQtb3BlbnN0ZXAlZFxuIiwgX19BUkNISVRFQ1RVUkVfXywgdmVyc2lvbik7Ci0gIGV4aXQgKDApOwotI2VuZGlmCitjb25maWcuZ3Vlc3MgdGltZXN0YW1wID0gJHRpbWVzdGFtcAogCi0jaWYgZGVmaW5lZCAoTVVMVElNQVgpIHx8IGRlZmluZWQgKG4xNikKLSNpZiBkZWZpbmVkIChVTUFYVikKLSAgcHJpbnRmICgibnMzMmstZW5jb3JlLXN5c3ZcbiIpOyBleGl0ICgwKTsKLSNlbHNlCi0jaWYgZGVmaW5lZCAoQ01VKQotICBwcmludGYgKCJuczMyay1lbmNvcmUtbWFjaFxuIik7IGV4aXQgKDApOwotI2Vsc2UKLSAgcHJpbnRmICgibnMzMmstZW5jb3JlLWJzZFxuIik7IGV4aXQgKDApOwotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgordW5hbWUgLW0gPSBgKHVuYW1lIC1tKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtciA9IGAodW5hbWUgLXIpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1zID0gYCh1bmFtZSAtcykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXYgPSBgKHVuYW1lIC12KSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCiAKLSNpZiBkZWZpbmVkIChfXzM4NkJTRF9fKQotICBwcmludGYgKCJpMzg2LXBjLWJzZFxuIik7IGV4aXQgKDApOwotI2VuZGlmCisvdXNyL2Jpbi91bmFtZSAtcCA9IGAoL3Vzci9iaW4vdW5hbWUgLXApIDI+L2Rldi9udWxsYAorL2Jpbi91bmFtZSAtWCAgICAgPSBgKC9iaW4vdW5hbWUgLVgpIDI+L2Rldi9udWxsYAogCi0jaWYgZGVmaW5lZCAoc2VxdWVudCkKLSNpZiBkZWZpbmVkIChpMzg2KQotICBwcmludGYgKCJpMzg2LXNlcXVlbnQtZHluaXhcbiIpOyBleGl0ICgwKTsKLSNlbmRpZgotI2lmIGRlZmluZWQgKG5zMzIwMDApCi0gIHByaW50ZiAoIm5zMzJrLXNlcXVlbnQtZHluaXhcbiIpOyBleGl0ICgwKTsKLSNlbmRpZgotI2VuZGlmCitob3N0aW5mbyAgICAgICAgICAgICAgID0gYChob3N0aW5mbykgMj4vZGV2L251bGxgCisvYmluL3VuaXZlcnNlICAgICAgICAgID0gYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbGAKKy91c3IvYmluL2FyY2ggLWsgICAgICAgPSBgKC91c3IvYmluL2FyY2ggLWspIDI+L2Rldi9udWxsYAorL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbGAKKy91c3IvYmluL29zbGV2ZWwgICAgICAgPSBgKC91c3IvYmluL29zbGV2ZWwpIDI+L2Rldi9udWxsYAorL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyA9IGAoL3Vzci9jb252ZXgvZ2V0c3lzaW5mbykgMj4vZGV2L251bGxgCiAKLSNpZiBkZWZpbmVkIChfU0VRVUVOVF8pCi0gICAgc3RydWN0IHV0c25hbWUgdW47Ci0KLSAgICB1bmFtZSgmdW4pOwotCi0gICAgaWYgKHN0cm5jbXAodW4udmVyc2lvbiwgIlYyIiwgMikgPT0gMCkgewotCXByaW50ZiAoImkzODYtc2VxdWVudC1wdHgyXG4iKTsgZXhpdCAoMCk7Ci0gICAgfQotICAgIGlmIChzdHJuY21wKHVuLnZlcnNpb24sICJWMSIsIDIpID09IDApIHsgLyogWFhYIGlzIFYxIGNvcnJlY3Q/ICovCi0JcHJpbnRmICgiaTM4Ni1zZXF1ZW50LXB0eDFcbiIpOyBleGl0ICgwKTsKLSAgICB9Ci0gICAgcHJpbnRmICgiaTM4Ni1zZXF1ZW50LXB0eFxuIik7IGV4aXQgKDApOwotCi0jZW5kaWYKLQotI2lmIGRlZmluZWQgKHZheCkKLSNpZiAhZGVmaW5lZCAodWx0cml4KQotICBwcmludGYgKCJ2YXgtZGVjLWJzZFxuIik7IGV4aXQgKDApOwotI2Vsc2UKLSAgcHJpbnRmICgidmF4LWRlYy11bHRyaXhcbiIpOyBleGl0ICgwKTsKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkIChhbGxpYW50KSAmJiBkZWZpbmVkIChpODYwKQotICBwcmludGYgKCJpODYwLWFsbGlhbnQtYnNkXG4iKTsgZXhpdCAoMCk7Ci0jZW5kaWYKLQotICBleGl0ICgxKTsKLX0KK1VOQU1FX01BQ0hJTkUgPSAke1VOQU1FX01BQ0hJTkV9CitVTkFNRV9SRUxFQVNFID0gJHtVTkFNRV9SRUxFQVNFfQorVU5BTUVfU1lTVEVNICA9ICR7VU5BTUVfU1lTVEVNfQorVU5BTUVfVkVSU0lPTiA9ICR7VU5BTUVfVkVSU0lPTn0KIEVPRgogCi0kQ0NfRk9SX0JVSUxEICRkdW1teS5jIC1vICRkdW1teSAyPi9kZXYvbnVsbCAmJiAuLyRkdW1teSAmJiBybSAkZHVtbXkuYyAkZHVtbXkgJiYgZXhpdCAwCi1ybSAtZiAkZHVtbXkuYyAkZHVtbXkKLQotIyBBcG9sbG9zIHB1dCB0aGUgc3lzdGVtIHR5cGUgaW4gdGhlIGVudmlyb25tZW50LgotCi10ZXN0IC1kIC91c3IvYXBvbGxvICYmIHsgZWNobyAke0lTUH0tYXBvbGxvLSR7U1lTVFlQRX07IGV4aXQgMDsgfQotCi0jIENvbnZleCB2ZXJzaW9ucyB0aGF0IHByZWRhdGUgdW5hbWUgY2FuIHVzZSBnZXRzeXNpbmZvKDEpCi0KLWlmIFsgLXggL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyBdCi10aGVuCi0gICAgY2FzZSBgZ2V0c3lzaW5mbyAtZiBjcHVfdHlwZWAgaW4KLSAgICBjMSopCi0JZWNobyBjMS1jb252ZXgtYnNkCi0JZXhpdCAwIDs7Ci0gICAgYzIqKQotCWlmIGdldHN5c2luZm8gLWYgc2NhbGFyX2FjYwotCXRoZW4gZWNobyBjMzItY29udmV4LWJzZAotCWVsc2UgZWNobyBjMi1jb252ZXgtYnNkCi0JZmkKLQlleGl0IDAgOzsKLSAgICBjMzQqKQotCWVjaG8gYzM0LWNvbnZleC1ic2QKLQlleGl0IDAgOzsKLSAgICBjMzgqKQotCWVjaG8gYzM4LWNvbnZleC1ic2QKLQlleGl0IDAgOzsKLSAgICBjNCopCi0JZWNobyBjNC1jb252ZXgtYnNkCi0JZXhpdCAwIDs7Ci0gICAgZXNhYwotZmkKLQotI2VjaG8gJyhVbmFibGUgdG8gZ3Vlc3Mgc3lzdGVtIHR5cGUpJyAxPiYyCi0KIGV4aXQgMQorCisjIExvY2FsIHZhcmlhYmxlczoKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAidGltZXN0YW1wPSciCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZCIKKyMgdGltZS1zdGFtcC1lbmQ6ICInIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9jb25maWcuaF93aW4zMnZjNyBiL2NvbmZpZy5oX3dpbjMydmM3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMmE3OGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWcuaF93aW4zMnZjNwpAQCAtMCwwICsxLDE2MiBAQAorLyogSGFja2VkIGNvbmZpZy5oIGZvciBXaW5kb3dzIFhQIDMyLWJpdCAmIFZDNyAgKi8KKworI2lmZGVmIChfTVNDX1ZFUiA+PSAxNDAwKQorIyBkZWZpbmUgSEFWRV9SQU5EX1MJMQorI2VuZGlmCisKKy8qIERlZmluZSBpZiBidWlsZGluZyBmb3IgYSBDSVNDIG1hY2hpbmUgKGUuZy4gSW50ZWwpLiAqLworI2RlZmluZSBDUFVfQ0lTQyAxCisKKy8qIERlZmluZSBpZiBidWlsZGluZyBmb3IgYSBSSVNDIG1hY2hpbmUgKGFzc3VtZSBzbG93IGJ5dGUgYWNjZXNzKS4gKi8KKyN1bmRlZiBDUFVfUklTQworCisvKiBQYXRoIHRvIHJhbmRvbSBkZXZpY2UgKi8KKyN1bmRlZiBERVZfVVJBTkRPTQorCisvKiBEZWZpbmUgdG8gZW5hYmxlZCBkZWJ1ZyBsb2dnaW5nIGZvciBhbGwgbXVkdWxlcy4gKi8KKyN1bmRlZiBFTkFCTEVfREVCVUdfTE9HR0lORworCisvKiBMb2dnaW5nIHN0YXRtZW50cyB3aWxsIGJlIHdyaXRlbiB0byB0aGlzIGZpbGUuICovCisjdW5kZWYgRVJSX1JFUE9SVElOR19GSUxFCisKKy8qIERlZmluZSB0byByZWRpcmVjdCBsb2dnaW5nIHRvIHN0ZG91dC4gKi8KKyN1bmRlZiBFUlJfUkVQT1JUSU5HX1NURE9VVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFycGEvaW5ldC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0FSUEFfSU5FVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Ynl0ZXN3YXAuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9CWVRFU1dBUF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaW5ldF9hdG9uJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JTkVUX0FUT04gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgaW50MTZfdCcuICovCisjdW5kZWYgSEFWRV9JTlQxNl9UCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBpbnQzMl90Jy4gKi8KKyN1bmRlZiBIQVZFX0lOVDMyX1QKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYGludDhfdCcuICovCisjdW5kZWYgSEFWRV9JTlQ4X1QKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0lOVFRZUEVTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzb2NrZXQnIGxpYnJhcnkgKC1sc29ja2V0KS4gKi8KKyN1bmRlZiBIQVZFX0xJQlNPQ0tFVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1hY2hpbmUvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9NQUNISU5FX1RZUEVTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtZW1vcnkuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTUVNT1JZX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaW4uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ORVRJTkVUX0lOX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzb2NrZXQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NPQ0tFVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RESU5UX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RETElCX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZ3MuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RSSU5HU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RSSU5HX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9pbnRfdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfSU5UX1RZUEVTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc29ja2V0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfU1RBVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1RZUEVTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdWlvLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1VJT19ICisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGB1aW50MTZfdCcuICovCisjdW5kZWYgSEFWRV9VSU5UMTZfVAorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgdWludDMyX3QnLiAqLworI3VuZGVmIEhBVkVfVUlOVDMyX1QgCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGB1aW50NjRfdCcuICovCisjdW5kZWYgSEFWRV9VSU5UNjRfVAorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgdWludDhfdCcuICovCisjdW5kZWYgSEFWRV9VSU5UOF9UCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1VOSVNURF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1c2xlZXAnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1VTTEVFUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d2luZG93cy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9XSU5ET1dTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHdpbnNvY2syLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1dJTlNPQ0syX0ggMQorCisvKiBEZWZpbmUgdG8gdXNlIFg4NiBpbmxpbmVkIGFzc2VtYmx5IGNvZGUgKi8KKyN1bmRlZiBIQVZFX1g4NgorCisvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KKyN1bmRlZiBQQUNLQUdFX0JVR1JFUE9SVAorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9OQU1FCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1NUUklORworCisvKiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9UQVJOQU1FCisKKy8qIERlZmluZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9WRVJTSU9OCisKKy8qIFRoZSBzaXplIG9mIGEgYHVuc2lnbmVkIGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9VTlNJR05FRF9MT05HIDQKKworLyogVGhlIHNpemUgb2YgYSBgdW5zaWduZWQgbG9uZyBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfVU5TSUdORURfTE9OR19MT05HIDgKKworLyogRGVmaW5lIHRvIHVzZSBHRE9JLiAqLworI3VuZGVmIFNSVFBfR0RPSQorCisvKiBEZWZpbmUgdG8gY29tcGlsZSBmb3Iga2VybmVsIGNvbnRleHRzLiAqLworI3VuZGVmIFNSVFBfS0VSTkVMCisKKy8qIERlZmluZSB0byBjb21waWxlIGZvciBMaW51eCBrZXJuZWwgY29udGV4dC4gKi8KKyN1bmRlZiBTUlRQX0tFUk5FTF9MSU5VWAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRlciBmaWxlcy4gKi8KKyN1bmRlZiBTVERDX0hFQURFUlMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91ciBwcm9jZXNzb3Igc3RvcmVzIHdvcmRzIHdpdGggdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZQorICAgZmlyc3QgKGxpa2UgTW90b3JvbGEgYW5kIFNQQVJDLCB1bmxpa2UgSW50ZWwgYW5kIFZBWCkuICovCisjdW5kZWYgV09SRFNfQklHRU5ESUFOCisKKy8qIERlZmluZSB0byBlbXB0eSBpZiBgY29uc3QnIGRvZXMgbm90IGNvbmZvcm0gdG8gQU5TSSBDLiAqLworLy8jdW5kZWYgY29uc3QKKy8qIERlZmluZSB0byBgX19pbmxpbmVfXycgb3IgYF9faW5saW5lJyBpZiB0aGF0J3Mgd2hhdCB0aGUgQyBjb21waWxlcgorICAgY2FsbHMgaXQsIG9yIHRvIG5vdGhpbmcgaWYgJ2lubGluZScgaXMgbm90IHN1cHBvcnRlZCB1bmRlciBhbnkgbmFtZS4gICovCisvLyNpZm5kZWYgX19jcGx1c3BsdXMKKy8vI3VuZGVmIGlubGluZQorLy8jZW5kaWYKKyNkZWZpbmUgaW5saW5lIF9faW5saW5lCisKKy8qIERlZmluZSB0byBgdW5zaWduZWQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworLy8jdW5kZWYgc2l6ZV90CmRpZmYgLS1naXQgYS9jb25maWcuaHcgYi9jb25maWcuaHcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZjNjVkZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy5odwpAQCAtMCwwICsxLDE4MiBAQAorLyogY3J5cHRvL2luY2x1ZGUvY29uZmlnLmguICBHZW5lcmF0ZWQgYnkgY29uZmlndXJlLiAgKi8KKy8qIGNvbmZpZ19pbi5oLiAgR2VuZXJhdGVkIGZyb20gY29uZmlndXJlLmluIGJ5IGF1dG9oZWFkZXIuICAqLworCisjaWYgKF9NU0NfVkVSID49IDE0MDApCisjIGRlZmluZSBIQVZFX1JBTkRfUwkxCisjIGRlZmluZSBfQ1JUX1JBTkRfUworI2VuZGlmCisKKy8qIERlZmluZSBpZiBidWlsZGluZyBmb3IgYSBDSVNDIG1hY2hpbmUgKGUuZy4gSW50ZWwpLiAqLworI2RlZmluZSBDUFVfQ0lTQyAxCisKKy8qIERlZmluZSBpZiBidWlsZGluZyBmb3IgYSBSSVNDIG1hY2hpbmUgKGFzc3VtZSBzbG93IGJ5dGUgYWNjZXNzKS4gKi8KKy8qICN1bmRlZiBDUFVfUklTQyAqLworCisvKiBEZWZpbmUgdG8gZW5hYmxlZCBkZWJ1ZyBsb2dnaW5nIGZvciBhbGwgbXVkdWxlcy4gKi8KKyN1bmRlZiBFTkFCTEVfREVCVUdfTE9HR0lORworCisvKiBMb2dnaW5nIHN0YXRtZW50cyB3aWxsIGJlIHdyaXRlbiB0byB0aGlzIGZpbGUuICovCisvKiAjdW5kZWYgRVJSX1JFUE9SVElOR19GSUxFICovCisKKy8qIERlZmluZSB0byByZWRpcmVjdCBsb2dnaW5nIHRvIHN0ZG91dC4gKi8KKyN1bmRlZiBFUlJfUkVQT1JUSU5HX1NURE9VVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFycGEvaW5ldC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0FSUEFfSU5FVF9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Ynl0ZXN3YXAuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9CWVRFU1dBUF9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaW5ldF9hdG9uJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0lORVRfQVRPTiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgaW50MTZfdCcuICovCisjZGVmaW5lIEhBVkVfSU5UMTZfVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBpbnQzMl90Jy4gKi8KKyNkZWZpbmUgSEFWRV9JTlQzMl9UIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYGludDhfdCcuICovCisjZGVmaW5lIEhBVkVfSU5UOF9UIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0lOVFRZUEVTX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzb2NrZXQnIGxpYnJhcnkgKC1sc29ja2V0KS4gKi8KKy8qICN1bmRlZiBIQVZFX0xJQlNPQ0tFVCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1hY2hpbmUvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9NQUNISU5FX1RZUEVTX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtZW1vcnkuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTUVNT1JZX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaW4uaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9ORVRJTkVUX0lOX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzb2NrZXQnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfU09DS0VUICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfU1RESU5UX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RETElCX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZ3MuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RSSU5HU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RSSU5HX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9pbnRfdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TWVNfSU5UX1RZUEVTX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc29ja2V0Lmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfU1lTX1NPQ0tFVF9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdWlvLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfU1lTX1VJT19IICovCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGB1aW50MTZfdCcuICovCisjZGVmaW5lIEhBVkVfVUlOVDE2X1QgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgdWludDMyX3QnLiAqLworI2RlZmluZSBIQVZFX1VJTlQzMl9UIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHVpbnQ2NF90Jy4gKi8KKyNkZWZpbmUgSEFWRV9VSU5UNjRfVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGB1aW50OF90Jy4gKi8KKyNkZWZpbmUgSEFWRV9VSU5UOF9UIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9VTklTVERfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHVzbGVlcCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9VU0xFRVAgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx3aW5kb3dzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1dJTkRPV1NfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d2luc29jazIuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfV0lOU09DSzJfSCAxCisKKy8qIERlZmluZSB0byB1c2UgWDg2IGlubGluZWQgYXNzZW1ibHkgY29kZSAqLworLyogI3VuZGVmIEhBVkVfWDg2ICovCisKKy8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLworI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiIgorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIFBBQ0tBR0VfTkFNRSAiIgorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBhbmQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICIiCisKKy8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICIiCisKKy8qIERlZmluZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiIgorCisvKiBUaGUgc2l6ZSBvZiBhIGB1bnNpZ25lZCBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfVU5TSUdORURfTE9ORyA0CisKKy8qIFRoZSBzaXplIG9mIGEgYHVuc2lnbmVkIGxvbmcgbG9uZycsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX1VOU0lHTkVEX0xPTkdfTE9ORyA4CisKKy8qIERlZmluZSB0byB1c2UgR0RPSS4gKi8KKy8qICN1bmRlZiBTUlRQX0dET0kgKi8KKworLyogRGVmaW5lIHRvIGNvbXBpbGUgZm9yIGtlcm5lbCBjb250ZXh0cy4gKi8KKy8qICN1bmRlZiBTUlRQX0tFUk5FTCAqLworCisvKiBEZWZpbmUgdG8gY29tcGlsZSBmb3IgTGludXgga2VybmVsIGNvbnRleHQuICovCisvKiAjdW5kZWYgU1JUUF9LRVJORUxfTElOVVggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCisjZGVmaW5lIFNURENfSEVBREVSUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdXIgcHJvY2Vzc29yIHN0b3JlcyB3b3JkcyB3aXRoIHRoZSBtb3N0IHNpZ25pZmljYW50IGJ5dGUKKyAgIGZpcnN0IChsaWtlIE1vdG9yb2xhIGFuZCBTUEFSQywgdW5saWtlIEludGVsIGFuZCBWQVgpLiAqLworLyogI3VuZGVmIFdPUkRTX0JJR0VORElBTiAqLworCisvKiBEZWZpbmUgdG8gZW1wdHkgaWYgYGNvbnN0JyBkb2VzIG5vdCBjb25mb3JtIHRvIEFOU0kgQy4gKi8KKy8qICN1bmRlZiBjb25zdCAqLworCisvKiBEZWZpbmUgJ2lubGluZScgdG8gbm90aGluZywgc2luY2UgdGhlIE1TVkMgY29tcGlsZXIgZG9lc24ndCBzdXBwb3J0IGl0LiAgKi8KKyNkZWZpbmUgaW5saW5lIAorCisvKiBEZWZpbmUgdG8gYHVuc2lnbmVkJyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KKy8qICN1bmRlZiBzaXplX3QgKi8KKworI2lmIChfTVNDX1ZFUiA+PSAxNDAwKSAvLyBWQzgrCisjaWZuZGVmIF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURQorI2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUKKyNlbmRpZgorI2lmbmRlZiBfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFCisjZGVmaW5lIF9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUKKyNlbmRpZgorI2VuZGlmIC8vIFZDOCsKKworI2lmbmRlZiB1aW50MzJfdAordHlwZWRlZiB1bnNpZ25lZCBfX2ludDgJCXVpbnQ4X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIF9faW50MTYJdWludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIF9faW50MzIJdWludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgICAgdWludDY0X3Q7Cit0eXBlZGVmIF9faW50OAkJaW50OF90OwordHlwZWRlZiBfX2ludDE2CQlpbnQxNl90OwordHlwZWRlZiBfX2ludDMyCQlpbnQzMl90OwordHlwZWRlZiBfX2ludDY0CQlpbnQ2NF90OworI2VuZGlmCisKKyNpZmRlZiBfTVNDX1ZFUgorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDMxMSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29uZmlnLnN1YiBiL2NvbmZpZy5zdWIKaW5kZXggYzhlNzc4NS4uNmQ4NmExZSAxMDA3NTUKLS0tIGEvY29uZmlnLnN1YgorKysgYi9jb25maWcuc3ViCkBAIC0xLDMzICsxLDMwIEBACiAjISAvYmluL3NoCi0jIENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBzdWJyb3V0aW5lIHNjcmlwdCwgdmVyc2lvbiAxLjEuCi0jICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwCi0jICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyAoaW4gcHJpbmNpcGxlKSBjb21tb24gdG8gQUxMIEdOVSBzb2Z0d2FyZS4KLSMgVGhlIHByZXNlbmNlIG9mIGEgbWFjaGluZSBpbiB0aGlzIGZpbGUgc3VnZ2VzdHMgdGhhdCBTT01FIEdOVSBzb2Z0d2FyZQotIyBjYW4gaGFuZGxlIHRoYXQgbWFjaGluZS4gIEl0IGRvZXMgbm90IGltcGx5IEFMTCBHTlUgc29mdHdhcmUgY2FuLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gc3Vicm91dGluZSBzY3JpcHQuCisjICAgQ29weXJpZ2h0IDE5OTItMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwordGltZXN0YW1wPScyMDE2LTA1LTEwJworCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAjCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAjCiAjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSMgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0KKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyMKICMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQogIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKICMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKLSMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0CisjIHByb2dyYW0uICBUaGlzIEV4Y2VwdGlvbiBpcyBhbiBhZGRpdGlvbmFsIHBlcm1pc3Npb24gdW5kZXIgc2VjdGlvbiA3CisjIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAzICgiR1BMdjMiKS4KIAotIyBXcml0dGVuIGJ5IFBlciBCb3RobmVyIDxib3RobmVyQGN5Z251cy5jb20+LgorCiAjIFBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LgogIwogIyBDb25maWd1cmF0aW9uIHN1YnJvdXRpbmUgdG8gdmFsaWRhdGUgYW5kIGNhbm9uaWNhbGl6ZSBhIGNvbmZpZ3VyYXRpb24gdHlwZS4KQEAgLTM1LDYgKzMyLDkgQEAKICMgSWYgaXQgaXMgaW52YWxpZCwgd2UgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBvbiBzdGRlcnIgYW5kIGV4aXQgd2l0aCBjb2RlIDEuCiAjIE90aGVyd2lzZSwgd2UgcHJpbnQgdGhlIGNhbm9uaWNhbCBjb25maWcgdHlwZSBvbiBzdGRvdXQgYW5kIHN1Y2NlZWQuCiAKKyMgWW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0IGZyb206CisjIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuc3ViCisKICMgVGhpcyBmaWxlIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBzYW1lIGZvciBhbGwgR05VIHBhY2thZ2VzCiAjIGFuZCByZWNvZ25pemUgYWxsIHRoZSBDUFUgdHlwZXMsIHN5c3RlbSB0eXBlcyBhbmQgYWxpYXNlcwogIyB0aGF0IGFyZSBtZWFuaW5nZnVsIHdpdGggKmFueSogR05VIHNvZnR3YXJlLgpAQCAtNTAsMzMgKzUwLDgyIEBACiAjCUNQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTQogIyBJdCBpcyB3cm9uZyB0byBlY2hvIGFueSBvdGhlciB0eXBlIG9mIHNwZWNpZmljYXRpb24uCiAKLWlmIFsgeCQxID0geCBdCi10aGVuCi0JZWNobyBDb25maWd1cmF0aW9uIG5hbWUgbWlzc2luZy4gMT4mMgotCWVjaG8gIlVzYWdlOiAkMCBDUFUtTUZSLU9QU1lTIiAxPiYyCi0JZWNobyAib3IgICAgICQwIEFMSUFTIiAxPiYyCi0JZWNobyB3aGVyZSBBTElBUyBpcyBhIHJlY29nbml6ZWQgY29uZmlndXJhdGlvbiB0eXBlLiAxPiYyCi0JZXhpdCAxCi1maQorbWU9YGVjaG8gIiQwIiB8IHNlZCAtZSAncywuKi8sLCdgCiAKLSMgRmlyc3QgcGFzcyB0aHJvdWdoIGFueSBsb2NhbCBtYWNoaW5lIHR5cGVzLgotY2FzZSAkMSBpbgotCSpsb2NhbCopCi0JCWVjaG8gJDEKLQkJZXhpdCAwCi0JCTs7Ci0JKikKLQk7OwordXNhZ2U9IlwKK1VzYWdlOiAkMCBbT1BUSU9OXSBDUFUtTUZSLU9QU1lTIG9yIEFMSUFTCisKK0Nhbm9uaWNhbGl6ZSBhIGNvbmZpZ3VyYXRpb24gbmFtZS4KKworT3BlcmF0aW9uIG1vZGVzOgorICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLXQsIC0tdGltZS1zdGFtcCAgIHByaW50IGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24sIHRoZW4gZXhpdAorICAtdiwgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorCitSZXBvcnQgYnVncyBhbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uIgorCit2ZXJzaW9uPSJcCitHTlUgY29uZmlnLnN1YiAoJHRpbWVzdGFtcCkKKworQ29weXJpZ2h0IDE5OTItMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KK3dhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKKworaGVscD0iCitUcnkgXGAkbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisKKyMgUGFyc2UgY29tbWFuZCBsaW5lCit3aGlsZSB0ZXN0ICQjIC1ndCAwIDsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC0tdGltZS1zdGFtcCB8IC0tdGltZSogfCAtdCApCisgICAgICAgZWNobyAiJHRpbWVzdGFtcCIgOyBleGl0IDs7CisgICAgLS12ZXJzaW9uIHwgLXYgKQorICAgICAgIGVjaG8gIiR2ZXJzaW9uIiA7IGV4aXQgOzsKKyAgICAtLWhlbHAgfCAtLWgqIHwgLWggKQorICAgICAgIGVjaG8gIiR1c2FnZSI7IGV4aXQgOzsKKyAgICAtLSApICAgICAjIFN0b3Agb3B0aW9uIHByb2Nlc3NpbmcKKyAgICAgICBzaGlmdDsgYnJlYWsgOzsKKyAgICAtICkJIyBVc2Ugc3RkaW4gYXMgaW5wdXQuCisgICAgICAgYnJlYWsgOzsKKyAgICAtKiApCisgICAgICAgZWNobyAiJG1lOiBpbnZhbGlkIG9wdGlvbiAkMSRoZWxwIgorICAgICAgIGV4aXQgMSA7OworCisgICAgKmxvY2FsKikKKyAgICAgICAjIEZpcnN0IHBhc3MgdGhyb3VnaCBhbnkgbG9jYWwgbWFjaGluZSB0eXBlcy4KKyAgICAgICBlY2hvICQxCisgICAgICAgZXhpdCA7OworCisgICAgKiApCisgICAgICAgYnJlYWsgOzsKKyAgZXNhYworZG9uZQorCitjYXNlICQjIGluCisgMCkgZWNobyAiJG1lOiBtaXNzaW5nIGFyZ3VtZW50JGhlbHAiID4mMgorICAgIGV4aXQgMTs7CisgMSkgOzsKKyAqKSBlY2hvICIkbWU6IHRvbyBtYW55IGFyZ3VtZW50cyRoZWxwIiA+JjIKKyAgICBleGl0IDE7OwogZXNhYwogCiAjIFNlcGFyYXRlIHdoYXQgdGhlIHVzZXIgZ2F2ZSBpbnRvIENQVS1DT01QQU5ZIGFuZCBPUyBvciBLRVJORUwtT1MgKGlmIGFueSkuCiAjIEhlcmUgd2UgbXVzdCByZWNvZ25pemUgYWxsIHRoZSB2YWxpZCBLRVJORUwtT1MgY29tYmluYXRpb25zLgogbWF5YmVfb3M9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wyLydgCiBjYXNlICRtYXliZV9vcyBpbgotICBudG8tcW54KiB8IGxpbnV4LWdudSopCisgIG50by1xbngqIHwgbGludXgtZ251KiB8IGxpbnV4LWFuZHJvaWQqIHwgbGludXgtZGlldGxpYmMgfCBsaW51eC1uZXdsaWIqIHwgXAorICBsaW51eC1tdXNsKiB8IGxpbnV4LXVjbGliYyogfCB1Y2xpbnV4LXVjbGliYyogfCB1Y2xpbnV4LWdudSogfCBrZnJlZWJzZCotZ251KiB8IFwKKyAga25ldGJzZCotZ251KiB8IG5ldGJzZCotZ251KiB8IG5ldGJzZCotZWFiaSogfCBcCisgIGtvcGVuc29sYXJpcyotZ251KiB8IFwKKyAgc3Rvcm0tY2hhb3MqIHwgb3MyLWVteCogfCBydG1rLW5vdmEqKQogICAgIG9zPS0kbWF5YmVfb3MKICAgICBiYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMS8nYAogICAgIDs7CisgIGFuZHJvaWQtbGludXgpCisgICAgb3M9LWxpbnV4LWFuZHJvaWQKKyAgICBiYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMS8nYC11bmtub3duCisgICAgOzsKICAgKikKICAgICBiYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkICdzLy1bXi1dKiQvLydgCiAgICAgaWYgWyAkYmFzaWNfbWFjaGluZSAhPSAkMSBdCkBAIC05OSwxMCArMTQ4LDEzIEBACiAJLWNvbnZlcmdlbnQqIHwgLW5jciogfCAtbmV3cyB8IC0zMiogfCAtMzYwMCogfCAtMzEwMCogfCAtaGl0YWNoaSogfFwKIAktY1sxMjNdKiB8IC1jb252ZXgqIHwgLXN1biB8IC1jcmRzIHwgLW9tcm9uKiB8IC1kZyB8IC11bHRyYSB8IC10dGkqIHwgXAogCS1oYXJyaXMgfCAtZG9scGhpbiB8IC1oaWdobGV2ZWwgfCAtZ291bGQgfCAtY2JtIHwgLW5zIHwgLW1hc3Njb21wIHwgXAotCS1hcHBsZSkKKwktYXBwbGUgfCAtYXhpcyB8IC1rbnV0aCB8IC1jcmF5IHwgLW1pY3JvYmxhemUqKQogCQlvcz0KIAkJYmFzaWNfbWFjaGluZT0kMQogCQk7OworCS1ibHVlZ2VuZSopCisJCW9zPS1jbmsKKwkJOzsKIAktc2ltIHwgLWNpc2NvIHwgLW9raSB8IC13ZWMgfCAtd2luYm9uZCkKIAkJb3M9CiAJCWJhc2ljX21hY2hpbmU9JDEKQEAgLTExMyw5ICsxNjUsMjEgQEAKIAkJb3M9LXZ4d29ya3MKIAkJYmFzaWNfbWFjaGluZT0kMQogCQk7OworCS1jaG9ydXNvcyopCisJCW9zPS1jaG9ydXNvcworCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisJLWNob3J1c3JkYikKKwkJb3M9LWNob3J1c3JkYgorCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CiAJLWhpdXgqKQogCQlvcz0taGl1eHdlMgogCQk7OworCS1zY282KQorCQlvcz0tc2NvNXY2CisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKIAktc2NvNSkKIAkJb3M9LXNjbzMuMnY1CiAJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKQEAgLTEzMiw2ICsxOTYsMTAgQEAKIAkJIyBEb24ndCBmb3JnZXQgdmVyc2lvbiBpZiBpdCBpcyAzLjJ2NCBvciBuZXdlci4KIAkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAogCQk7OworCS1zY281djYqKQorCQkjIERvbid0IGZvcmdldCB2ZXJzaW9uIGlmIGl0IGlzIDMuMnY0IG9yIG5ld2VyLgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CiAJLXNjbyopCiAJCW9zPS1zY28zLjJ2MgogCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCkBAIC0xNDksNiArMjE3LDEyIEBACiAJLWlzYyopCiAJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKIAkJOzsKKwktbHlueCoxNzgpCisJCW9zPS1seW54b3MxNzgKKwkJOzsKKwktbHlueCo1KQorCQlvcz0tbHlueG9zNQorCQk7OwogCS1seW54KikKIAkJb3M9LWx5bnhvcwogCQk7OwpAQCAtMTcxLDMwICsyNDUsMTIxIEBACiBjYXNlICRiYXNpY19tYWNoaW5lIGluCiAJIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRob3V0IGNvbXBhbnkgbmFtZS4KIAkjIFNvbWUgYXJlIG9taXR0ZWQgaGVyZSBiZWNhdXNlIHRoZXkgaGF2ZSBzcGVjaWFsIG1lYW5pbmdzIGJlbG93LgotCXRhaG9lIHwgaTg2MCB8IGlhNjQgfCBtMzJyIHwgbTY4ayB8IG02ODAwMCB8IG04OGsgfCBuczMyayB8IGFyYyB8IGFybSBcCi0JCXwgYXJtZVtsYl0gfCBweXJhbWlkIHwgbW4xMDIwMCB8IG1uMTAzMDAgfCB0cm9uIHwgYTI5ayBcCi0JCXwgNTgwIHwgaTk2MCB8IGg4MzAwIFwKLQkJfCB4ODYgfCBwcGNiZSB8IG1pcHNiZSB8IG1pcHNsZSB8IHNoYmUgfCBzaGxlIHwgYXJtYmUgfCBhcm1sZSBcCi0JCXwgaHBwYSB8IGhwcGExLjAgfCBocHBhMS4xIHwgaHBwYTIuMCB8IGhwcGEyLjB3IHwgaHBwYTIuMG4gXAotCQl8IGhwcGE2NCBcCi0JCXwgYWxwaGEgfCBhbHBoYWV2WzQtOF0gfCBhbHBoYWV2NTYgfCBhbHBoYXBjYTVbNjddIFwKLQkJfCBhbHBoYWV2Nls3OF0gXAotCQl8IHdlMzJrIHwgbnMxNmsgfCBjbGlwcGVyIHwgaTM3MCB8IHNoIHwgcG93ZXJwYyB8IHBvd2VycGNsZSBcCi0JCXwgMTc1MGEgfCBkc3AxNnh4IHwgcGRwMTEgfCBtaXBzMTYgfCBtaXBzNjQgfCBtaXBzZWwgfCBtaXBzNjRlbCBcCi0JCXwgbWlwczY0b3Jpb24gfCBtaXBzNjRvcmlvbmVsIHwgbWlwc3R4MzkgfCBtaXBzdHgzOWVsIFwKLQkJfCBtaXBzNjR2cjQzMDAgfCBtaXBzNjR2cjQzMDBlbCB8IG1pcHM2NHZyNDEwMCB8IG1pcHM2NHZyNDEwMGVsIFwKLQkJfCBtaXBzNjR2cjUwMDAgfCBtaXByczY0dnI1MDAwZWwgfCBtY29yZSBcCi0JCXwgc3BhcmMgfCBzcGFyY2xldCB8IHNwYXJjbGl0ZSB8IHNwYXJjNjQgfCBzcGFyY3Y5IHwgdjg1MCB8IGM0eCBcCi0JCXwgdGh1bWIgfCBkMTB2IHwgZnIzMCB8IGF2cikKKwkxNzUwYSB8IDU4MCBcCisJfCBhMjlrIFwKKwl8IGFhcmNoNjQgfCBhYXJjaDY0X2JlIFwKKwl8IGFscGhhIHwgYWxwaGFldls0LThdIHwgYWxwaGFldjU2IHwgYWxwaGFldjZbNzhdIHwgYWxwaGFwY2E1WzY3XSBcCisJfCBhbHBoYTY0IHwgYWxwaGE2NGV2WzQtOF0gfCBhbHBoYTY0ZXY1NiB8IGFscGhhNjRldjZbNzhdIHwgYWxwaGE2NHBjYTVbNjddIFwKKwl8IGFtMzNfMi4wIFwKKwl8IGFyYyB8IGFyY2ViIFwKKwl8IGFybSB8IGFybVtibF1lIHwgYXJtZVtsYl0gfCBhcm12WzItOF0gfCBhcm12WzMtOF1bbGJdIHwgYXJtdjdbYXJtXSBcCisJfCBhdnIgfCBhdnIzMiBcCisJfCBiYSBcCisJfCBiZTMyIHwgYmU2NCBcCisJfCBiZmluIFwKKwl8IGM0eCB8IGM4MDUxIHwgY2xpcHBlciBcCisJfCBkMTB2IHwgZDMwdiB8IGRseCB8IGRzcDE2eHggXAorCXwgZTJrIHwgZXBpcGhhbnkgXAorCXwgZmlkbyB8IGZyMzAgfCBmcnYgfCBmdDMyIFwKKwl8IGg4MzAwIHwgaDg1MDAgfCBocHBhIHwgaHBwYTEuWzAxXSB8IGhwcGEyLjAgfCBocHBhMi4wW253XSB8IGhwcGE2NCBcCisJfCBoZXhhZ29uIFwKKwl8IGkzNzAgfCBpODYwIHwgaTk2MCB8IGlhNjQgXAorCXwgaXAyayB8IGlxMjAwMCBcCisJfCBrMW9tIFwKKwl8IGxlMzIgfCBsZTY0IFwKKwl8IGxtMzIgXAorCXwgbTMyYyB8IG0zMnIgfCBtMzJybGUgfCBtNjgwMDAgfCBtNjhrIHwgbTg4ayBcCisJfCBtYXhxIHwgbWIgfCBtaWNyb2JsYXplIHwgbWljcm9ibGF6ZWVsIHwgbWNvcmUgfCBtZXAgfCBtZXRhZyBcCisJfCBtaXBzIHwgbWlwc2JlIHwgbWlwc2ViIHwgbWlwc2VsIHwgbWlwc2xlIFwKKwl8IG1pcHMxNiBcCisJfCBtaXBzNjQgfCBtaXBzNjRlbCBcCisJfCBtaXBzNjRvY3Rlb24gfCBtaXBzNjRvY3Rlb25lbCBcCisJfCBtaXBzNjRvcmlvbiB8IG1pcHM2NG9yaW9uZWwgXAorCXwgbWlwczY0cjU5MDAgfCBtaXBzNjRyNTkwMGVsIFwKKwl8IG1pcHM2NHZyIHwgbWlwczY0dnJlbCBcCisJfCBtaXBzNjR2cjQxMDAgfCBtaXBzNjR2cjQxMDBlbCBcCisJfCBtaXBzNjR2cjQzMDAgfCBtaXBzNjR2cjQzMDBlbCBcCisJfCBtaXBzNjR2cjUwMDAgfCBtaXBzNjR2cjUwMDBlbCBcCisJfCBtaXBzNjR2cjU5MDAgfCBtaXBzNjR2cjU5MDBlbCBcCisJfCBtaXBzaXNhMzIgfCBtaXBzaXNhMzJlbCBcCisJfCBtaXBzaXNhMzJyMiB8IG1pcHNpc2EzMnIyZWwgXAorCXwgbWlwc2lzYTMycjYgfCBtaXBzaXNhMzJyNmVsIFwKKwl8IG1pcHNpc2E2NCB8IG1pcHNpc2E2NGVsIFwKKwl8IG1pcHNpc2E2NHIyIHwgbWlwc2lzYTY0cjJlbCBcCisJfCBtaXBzaXNhNjRyNiB8IG1pcHNpc2E2NHI2ZWwgXAorCXwgbWlwc2lzYTY0c2IxIHwgbWlwc2lzYTY0c2IxZWwgXAorCXwgbWlwc2lzYTY0c3I3MWsgfCBtaXBzaXNhNjRzcjcxa2VsIFwKKwl8IG1pcHNyNTkwMCB8IG1pcHNyNTkwMGVsIFwKKwl8IG1pcHN0eDM5IHwgbWlwc3R4MzllbCBcCisJfCBtbjEwMjAwIHwgbW4xMDMwMCBcCisJfCBtb3hpZSBcCisJfCBtdCBcCisJfCBtc3A0MzAgXAorCXwgbmRzMzIgfCBuZHMzMmxlIHwgbmRzMzJiZSBcCisJfCBuaW9zIHwgbmlvczIgfCBuaW9zMmViIHwgbmlvczJlbCBcCisJfCBuczE2ayB8IG5zMzJrIFwKKwl8IG9wZW44IHwgb3IxayB8IG9yMWtuZCB8IG9yMzIgXAorCXwgcGRwMTAgfCBwZHAxMSB8IHBqIHwgcGpsIFwKKwl8IHBvd2VycGMgfCBwb3dlcnBjNjQgfCBwb3dlcnBjNjRsZSB8IHBvd2VycGNsZSBcCisJfCBweXJhbWlkIFwKKwl8IHJpc2N2MzIgfCByaXNjdjY0IFwKKwl8IHJsNzggfCByeCBcCisJfCBzY29yZSBcCisJfCBzaCB8IHNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzI0XWFlYiB8IHNoWzIzXWUgfCBzaFsyMzRdZWIgfCBzaGViIHwgc2hiZSB8IHNobGUgfCBzaFsxMjM0XWxlIHwgc2gzZWxlIFwKKwl8IHNoNjQgfCBzaDY0bGUgXAorCXwgc3BhcmMgfCBzcGFyYzY0IHwgc3BhcmM2NGIgfCBzcGFyYzY0diB8IHNwYXJjODZ4IHwgc3BhcmNsZXQgfCBzcGFyY2xpdGUgXAorCXwgc3BhcmN2OCB8IHNwYXJjdjkgfCBzcGFyY3Y5YiB8IHNwYXJjdjl2IFwKKwl8IHNwdSBcCisJfCB0YWhvZSB8IHRpYzR4IHwgdGljNTR4IHwgdGljNTV4IHwgdGljNnggfCB0aWM4MCB8IHRyb24gXAorCXwgdWJpY29tMzIgXAorCXwgdjg1MCB8IHY4NTBlIHwgdjg1MGUxIHwgdjg1MGUyIHwgdjg1MGVzIHwgdjg1MGUydjMgXAorCXwgdmlzaXVtIFwKKwl8IHdlMzJrIFwKKwl8IHg4NiB8IHhjMTZ4IHwgeHN0b3JteTE2IHwgeHRlbnNhIFwKKwl8IHo4ayB8IHo4MCkKIAkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCiAJCTs7Ci0JbTg4MTEwIHwgbTY4MFsxMjM0Nl0wIHwgbTY4Mz8yIHwgbTY4MzYwIHwgbTUyMDAgfCB6OGsgfCB2NzAgfCBoODUwMCB8IHc2NSB8IHBqIHwgcGpsKQorCWM1NHgpCisJCWJhc2ljX21hY2hpbmU9dGljNTR4LXVua25vd24KKwkJOzsKKwljNTV4KQorCQliYXNpY19tYWNoaW5lPXRpYzU1eC11bmtub3duCisJCTs7CisJYzZ4KQorCQliYXNpY19tYWNoaW5lPXRpYzZ4LXVua25vd24KKwkJOzsKKwlsZW9ufGxlb25bMy05XSkKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy0kYmFzaWNfbWFjaGluZQorCQk7OworCW02ODExIHwgbTY4aGMxMSB8IG02ODEyIHwgbTY4aGMxMiB8IG02OGhjczEyeCB8IG52cHR4IHwgcGljb2NoaXApCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQlvcz0tbm9uZQorCQk7OworCW04ODExMCB8IG02ODBbMTIzNDZdMCB8IG02ODM/MiB8IG02ODM2MCB8IG01MjAwIHwgdjcwIHwgdzY1IHwgejhrKQorCQk7OworCW1zMSkKKwkJYmFzaWNfbWFjaGluZT1tdC11bmtub3duCisJCTs7CisKKwlzdHJvbmdhcm0gfCB0aHVtYiB8IHhzY2FsZSkKKwkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgorCQk7OworCXhnYXRlKQorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJb3M9LW5vbmUKKwkJOzsKKwl4c2NhbGVlYikKKwkJYmFzaWNfbWFjaGluZT1hcm1lYi11bmtub3duCisJCTs7CisKKwl4c2NhbGVlbCkKKwkJYmFzaWNfbWFjaGluZT1hcm1lbC11bmtub3duCiAJCTs7CiAKIAkjIFdlIHVzZSBgcGMnIHJhdGhlciB0aGFuIGB1bmtub3duJwogCSMgYmVjYXVzZSAoMSkgdGhhdCdzIHdoYXQgdGhleSBub3JtYWxseSBhcmUsIGFuZAogCSMgKDIpIHRoZSB3b3JkICJ1bmtub3duIiB0ZW5kcyB0byBjb25mdXNlIGJlZ2lubmluZyB1c2Vycy4KLQlpWzM0NTY3XTg2KQorCWkqODYgfCB4ODZfNjQpCiAJICBiYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXBjCiAJICA7OwogCSMgT2JqZWN0IGlmIG1vcmUgdGhhbiBvbmUgY29tcGFueSBuYW1lIHdvcmQuCkBAIC0yMDMsMjggKzM2OCw5MSBAQAogCQlleGl0IDEKIAkJOzsKIAkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGggY29tcGFueSBuYW1lLgotCSMgRklYTUU6IGNsZWFuIHVwIHRoZSBmb3JtYXR0aW5nIGhlcmUuCi0JdmF4LSogfCB0YWhvZS0qIHwgaVszNDU2N104Ni0qIHwgaTg2MC0qIHwgaWE2NC0qIHwgbTMyci0qIHwgbTY4ay0qIHwgbTY4MDAwLSogXAotCSAgICAgIHwgbTg4ay0qIHwgc3BhcmMtKiB8IG5zMzJrLSogfCBmeDgwLSogfCBhcmMtKiB8IGFybS0qIHwgY1sxMjNdKiBcCi0JICAgICAgfCBtaXBzLSogfCBweXJhbWlkLSogfCB0cm9uLSogfCBhMjlrLSogfCByb21wLSogfCByczYwMDAtKiBcCi0JICAgICAgfCBwb3dlci0qIHwgbm9uZS0qIHwgNTgwLSogfCBjcmF5Mi0qIHwgaDgzMDAtKiB8IGg4NTAwLSogfCBpOTYwLSogXAotCSAgICAgIHwgeG1wLSogfCB5bXAtKiBcCi0JICAgICAgfCB4ODYtKiB8IHBwY2JlLSogfCBtaXBzYmUtKiB8IG1pcHNsZS0qIHwgc2hiZS0qIHwgc2hsZS0qIHwgYXJtYmUtKiB8IGFybWxlLSogXAotCSAgICAgIHwgaHBwYS0qIHwgaHBwYTEuMC0qIHwgaHBwYTEuMS0qIHwgaHBwYTIuMC0qIHwgaHBwYTIuMHctKiBcCi0JICAgICAgfCBocHBhMi4wbi0qIHwgaHBwYTY0LSogXAotCSAgICAgIHwgYWxwaGEtKiB8IGFscGhhZXZbNC04XS0qIHwgYWxwaGFldjU2LSogfCBhbHBoYXBjYTVbNjddLSogXAotCSAgICAgIHwgYWxwaGFldjZbNzhdLSogXAotCSAgICAgIHwgd2UzMmstKiB8IGN5ZHJhLSogfCBuczE2ay0qIHwgcG4tKiB8IG5wMS0qIHwgeHBzMTAwLSogXAotCSAgICAgIHwgY2xpcHBlci0qIHwgb3Jpb24tKiBcCi0JICAgICAgfCBzcGFyY2xpdGUtKiB8IHBkcDExLSogfCBzaC0qIHwgcG93ZXJwYy0qIHwgcG93ZXJwY2xlLSogXAotCSAgICAgIHwgc3BhcmM2NC0qIHwgc3BhcmN2OS0qIHwgc3BhcmM4NngtKiB8IG1pcHMxNi0qIHwgbWlwczY0LSogfCBtaXBzZWwtKiBcCi0JICAgICAgfCBtaXBzNjRlbC0qIHwgbWlwczY0b3Jpb24tKiB8IG1pcHM2NG9yaW9uZWwtKiBcCi0JICAgICAgfCBtaXBzNjR2cjQxMDAtKiB8IG1pcHM2NHZyNDEwMGVsLSogfCBtaXBzNjR2cjQzMDAtKiB8IG1pcHM2NHZyNDMwMGVsLSogXAotCSAgICAgIHwgbWlwc3R4MzktKiB8IG1pcHN0eDM5ZWwtKiB8IG1jb3JlLSogXAotCSAgICAgIHwgZjMwMS0qIHwgYXJtdiotKiB8IHMzOTAtKiB8IHN2MS0qIHwgdDNlLSogXAotCSAgICAgIHwgbTg4MTEwLSogfCBtNjgwWzAxMjM0XTAtKiB8IG02ODM/Mi0qIHwgbTY4MzYwLSogfCB6OGstKiB8IGQxMHYtKiBcCi0JICAgICAgfCB0aHVtYi0qIHwgdjg1MC0qIHwgZDMwdi0qIHwgdGljMzAtKiB8IGMzMC0qIHwgZnIzMC0qIFwKLQkgICAgICB8IGJzMjAwMC0qKQorCTU4MC0qIFwKKwl8IGEyOWstKiBcCisJfCBhYXJjaDY0LSogfCBhYXJjaDY0X2JlLSogXAorCXwgYWxwaGEtKiB8IGFscGhhZXZbNC04XS0qIHwgYWxwaGFldjU2LSogfCBhbHBoYWV2Nls3OF0tKiBcCisJfCBhbHBoYTY0LSogfCBhbHBoYTY0ZXZbNC04XS0qIHwgYWxwaGE2NGV2NTYtKiB8IGFscGhhNjRldjZbNzhdLSogXAorCXwgYWxwaGFwY2E1WzY3XS0qIHwgYWxwaGE2NHBjYTVbNjddLSogfCBhcmMtKiB8IGFyY2ViLSogXAorCXwgYXJtLSogIHwgYXJtYmUtKiB8IGFybWxlLSogfCBhcm1lYi0qIHwgYXJtdiotKiBcCisJfCBhdnItKiB8IGF2cjMyLSogXAorCXwgYmEtKiBcCisJfCBiZTMyLSogfCBiZTY0LSogXAorCXwgYmZpbi0qIHwgYnMyMDAwLSogXAorCXwgY1sxMjNdKiB8IGMzMC0qIHwgW2NqdF05MC0qIHwgYzR4LSogXAorCXwgYzgwNTEtKiB8IGNsaXBwZXItKiB8IGNyYXludi0qIHwgY3lkcmEtKiBcCisJfCBkMTB2LSogfCBkMzB2LSogfCBkbHgtKiBcCisJfCBlMmstKiB8IGVseHNpLSogXAorCXwgZjMwWzAxXS0qIHwgZjcwMC0qIHwgZmlkby0qIHwgZnIzMC0qIHwgZnJ2LSogfCBmeDgwLSogXAorCXwgaDgzMDAtKiB8IGg4NTAwLSogXAorCXwgaHBwYS0qIHwgaHBwYTEuWzAxXS0qIHwgaHBwYTIuMC0qIHwgaHBwYTIuMFtud10tKiB8IGhwcGE2NC0qIFwKKwl8IGhleGFnb24tKiBcCisJfCBpKjg2LSogfCBpODYwLSogfCBpOTYwLSogfCBpYTY0LSogXAorCXwgaXAyay0qIHwgaXEyMDAwLSogXAorCXwgazFvbS0qIFwKKwl8IGxlMzItKiB8IGxlNjQtKiBcCisJfCBsbTMyLSogXAorCXwgbTMyYy0qIHwgbTMyci0qIHwgbTMycmxlLSogXAorCXwgbTY4MDAwLSogfCBtNjgwWzAxMjM0Nl0wLSogfCBtNjgzNjAtKiB8IG02ODM/Mi0qIHwgbTY4ay0qIFwKKwl8IG04ODExMC0qIHwgbTg4ay0qIHwgbWF4cS0qIHwgbWNvcmUtKiB8IG1ldGFnLSogXAorCXwgbWljcm9ibGF6ZS0qIHwgbWljcm9ibGF6ZWVsLSogXAorCXwgbWlwcy0qIHwgbWlwc2JlLSogfCBtaXBzZWItKiB8IG1pcHNlbC0qIHwgbWlwc2xlLSogXAorCXwgbWlwczE2LSogXAorCXwgbWlwczY0LSogfCBtaXBzNjRlbC0qIFwKKwl8IG1pcHM2NG9jdGVvbi0qIHwgbWlwczY0b2N0ZW9uZWwtKiBcCisJfCBtaXBzNjRvcmlvbi0qIHwgbWlwczY0b3Jpb25lbC0qIFwKKwl8IG1pcHM2NHI1OTAwLSogfCBtaXBzNjRyNTkwMGVsLSogXAorCXwgbWlwczY0dnItKiB8IG1pcHM2NHZyZWwtKiBcCisJfCBtaXBzNjR2cjQxMDAtKiB8IG1pcHM2NHZyNDEwMGVsLSogXAorCXwgbWlwczY0dnI0MzAwLSogfCBtaXBzNjR2cjQzMDBlbC0qIFwKKwl8IG1pcHM2NHZyNTAwMC0qIHwgbWlwczY0dnI1MDAwZWwtKiBcCisJfCBtaXBzNjR2cjU5MDAtKiB8IG1pcHM2NHZyNTkwMGVsLSogXAorCXwgbWlwc2lzYTMyLSogfCBtaXBzaXNhMzJlbC0qIFwKKwl8IG1pcHNpc2EzMnIyLSogfCBtaXBzaXNhMzJyMmVsLSogXAorCXwgbWlwc2lzYTMycjYtKiB8IG1pcHNpc2EzMnI2ZWwtKiBcCisJfCBtaXBzaXNhNjQtKiB8IG1pcHNpc2E2NGVsLSogXAorCXwgbWlwc2lzYTY0cjItKiB8IG1pcHNpc2E2NHIyZWwtKiBcCisJfCBtaXBzaXNhNjRyNi0qIHwgbWlwc2lzYTY0cjZlbC0qIFwKKwl8IG1pcHNpc2E2NHNiMS0qIHwgbWlwc2lzYTY0c2IxZWwtKiBcCisJfCBtaXBzaXNhNjRzcjcxay0qIHwgbWlwc2lzYTY0c3I3MWtlbC0qIFwKKwl8IG1pcHNyNTkwMC0qIHwgbWlwc3I1OTAwZWwtKiBcCisJfCBtaXBzdHgzOS0qIHwgbWlwc3R4MzllbC0qIFwKKwl8IG1taXgtKiBcCisJfCBtdC0qIFwKKwl8IG1zcDQzMC0qIFwKKwl8IG5kczMyLSogfCBuZHMzMmxlLSogfCBuZHMzMmJlLSogXAorCXwgbmlvcy0qIHwgbmlvczItKiB8IG5pb3MyZWItKiB8IG5pb3MyZWwtKiBcCisJfCBub25lLSogfCBucDEtKiB8IG5zMTZrLSogfCBuczMyay0qIFwKKwl8IG9wZW44LSogXAorCXwgb3IxayotKiBcCisJfCBvcmlvbi0qIFwKKwl8IHBkcDEwLSogfCBwZHAxMS0qIHwgcGotKiB8IHBqbC0qIHwgcG4tKiB8IHBvd2VyLSogXAorCXwgcG93ZXJwYy0qIHwgcG93ZXJwYzY0LSogfCBwb3dlcnBjNjRsZS0qIHwgcG93ZXJwY2xlLSogXAorCXwgcHlyYW1pZC0qIFwKKwl8IHJpc2N2MzItKiB8IHJpc2N2NjQtKiBcCisJfCBybDc4LSogfCByb21wLSogfCByczYwMDAtKiB8IHJ4LSogXAorCXwgc2gtKiB8IHNoWzEyMzRdLSogfCBzaFsyNF1hLSogfCBzaFsyNF1hZWItKiB8IHNoWzIzXWUtKiB8IHNoWzM0XWViLSogfCBzaGViLSogfCBzaGJlLSogXAorCXwgc2hsZS0qIHwgc2hbMTIzNF1sZS0qIHwgc2gzZWxlLSogfCBzaDY0LSogfCBzaDY0bGUtKiBcCisJfCBzcGFyYy0qIHwgc3BhcmM2NC0qIHwgc3BhcmM2NGItKiB8IHNwYXJjNjR2LSogfCBzcGFyYzg2eC0qIHwgc3BhcmNsZXQtKiBcCisJfCBzcGFyY2xpdGUtKiBcCisJfCBzcGFyY3Y4LSogfCBzcGFyY3Y5LSogfCBzcGFyY3Y5Yi0qIHwgc3BhcmN2OXYtKiB8IHN2MS0qIHwgc3gqLSogXAorCXwgdGFob2UtKiBcCisJfCB0aWMzMC0qIHwgdGljNHgtKiB8IHRpYzU0eC0qIHwgdGljNTV4LSogfCB0aWM2eC0qIHwgdGljODAtKiBcCisJfCB0aWxlKi0qIFwKKwl8IHRyb24tKiBcCisJfCB1Ymljb20zMi0qIFwKKwl8IHY4NTAtKiB8IHY4NTBlLSogfCB2ODUwZTEtKiB8IHY4NTBlcy0qIHwgdjg1MGUyLSogfCB2ODUwZTJ2My0qIFwKKwl8IHZheC0qIFwKKwl8IHZpc2l1bS0qIFwKKwl8IHdlMzJrLSogXAorCXwgeDg2LSogfCB4ODZfNjQtKiB8IHhjMTZ4LSogfCB4cHMxMDAtKiBcCisJfCB4c3Rvcm15MTYtKiB8IHh0ZW5zYSotKiBcCisJfCB5bXAtKiBcCisJfCB6OGstKiB8IHo4MC0qKQorCQk7OworCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aG91dCBjb21wYW55IG5hbWUsIHdpdGggZ2xvYiBtYXRjaC4KKwl4dGVuc2EqKQorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KIAkJOzsKIAkjIFJlY29nbml6ZSB0aGUgdmFyaW91cyBtYWNoaW5lIG5hbWVzIGFuZCBhbGlhc2VzIHdoaWNoIHN0YW5kCiAJIyBmb3IgYSBDUFUgdHlwZSBhbmQgYSBjb21wYW55IGFuZCBzb21ldGltZXMgZXZlbiBhbiBPUy4KQEAgLTI0Miw2ICs0NzAsOSBAQAogCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCiAJCW9zPS11ZGkKIAkJOzsKKwlhYmFjdXMpCisJCWJhc2ljX21hY2hpbmU9YWJhY3VzLXVua25vd24KKwkJOzsKIAlhZG9iZTY4aykKIAkJYmFzaWNfbWFjaGluZT1tNjgwMTAtYWRvYmUKIAkJb3M9LXNjb3V0CkBAIC0yNTYsMTkgKzQ4NywyNSBAQAogCQliYXNpY19tYWNoaW5lPWEyOWstbm9uZQogCQlvcz0tYnNkCiAJCTs7CisJYW1kNjQpCisJCWJhc2ljX21hY2hpbmU9eDg2XzY0LXBjCisJCTs7CisJYW1kNjQtKikKKwkJYmFzaWNfbWFjaGluZT14ODZfNjQtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKIAlhbWRhaGwpCiAJCWJhc2ljX21hY2hpbmU9NTgwLWFtZGFobAogCQlvcz0tc3lzdgogCQk7OwogCWFtaWdhIHwgYW1pZ2EtKikKLQkJYmFzaWNfbWFjaGluZT1tNjhrLWNibQorCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgogCQk7OwogCWFtaWdhb3MgfCBhbWlnYWRvcykKLQkJYmFzaWNfbWFjaGluZT1tNjhrLWNibQorCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgogCQlvcz0tYW1pZ2FvcwogCQk7OwogCWFtaWdhdW5peCB8IGFtaXgpCi0JCWJhc2ljX21hY2hpbmU9bTY4ay1jYm0KKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KIAkJb3M9LXN5c3Y0CiAJCTs7CiAJYXBvbGxvNjgpCkBAIC0yNzksNiArNTE2LDEzIEBACiAJCWJhc2ljX21hY2hpbmU9bTY4ay1hcG9sbG8KIAkJb3M9LWJzZAogCQk7OworCWFyb3MpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tYXJvcworCQk7OworCWFzbWpzKQorCQliYXNpY19tYWNoaW5lPWFzbWpzLXVua25vd24KKwkJOzsKIAlhdXgpCiAJCWJhc2ljX21hY2hpbmU9bTY4ay1hcHBsZQogCQlvcz0tYXV4CkBAIC0yODcsNiArNTMxLDM1IEBACiAJCWJhc2ljX21hY2hpbmU9bnMzMmstc2VxdWVudAogCQlvcz0tZHluaXgKIAkJOzsKKwlibGFja2ZpbikKKwkJYmFzaWNfbWFjaGluZT1iZmluLXVua25vd24KKwkJb3M9LWxpbnV4CisJCTs7CisJYmxhY2tmaW4tKikKKwkJYmFzaWNfbWFjaGluZT1iZmluLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCW9zPS1saW51eAorCQk7OworCWJsdWVnZW5lKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWlibQorCQlvcz0tY25rCisJCTs7CisJYzU0eC0qKQorCQliYXNpY19tYWNoaW5lPXRpYzU0eC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCWM1NXgtKikKKwkJYmFzaWNfbWFjaGluZT10aWM1NXgtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwljNngtKikKKwkJYmFzaWNfbWFjaGluZT10aWM2eC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCWM5MCkKKwkJYmFzaWNfbWFjaGluZT1jOTAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJY2VnY2MpCisJCWJhc2ljX21hY2hpbmU9YXJtLXVua25vd24KKwkJb3M9LWNlZ2NjCisJCTs7CiAJY29udmV4LWMxKQogCQliYXNpY19tYWNoaW5lPWMxLWNvbnZleAogCQlvcz0tYnNkCkBAIC0zMDcsMjcgKzU4MCw0NSBAQAogCQliYXNpY19tYWNoaW5lPWMzOC1jb252ZXgKIAkJb3M9LWJzZAogCQk7OwotCWNyYXkgfCB5bXApCi0JCWJhc2ljX21hY2hpbmU9eW1wLWNyYXkKKwljcmF5IHwgajkwKQorCQliYXNpY19tYWNoaW5lPWo5MC1jcmF5CiAJCW9zPS11bmljb3MKIAkJOzsKLQljcmF5MikKLQkJYmFzaWNfbWFjaGluZT1jcmF5Mi1jcmF5Ci0JCW9zPS11bmljb3MKKwljcmF5bnYpCisJCWJhc2ljX21hY2hpbmU9Y3JheW52LWNyYXkKKwkJb3M9LXVuaWNvc21wCiAJCTs7Ci0JW2N0al05MC1jcmF5KQotCQliYXNpY19tYWNoaW5lPWM5MC1jcmF5Ci0JCW9zPS11bmljb3MKKwljcjE2IHwgY3IxNi0qKQorCQliYXNpY19tYWNoaW5lPWNyMTYtdW5rbm93bgorCQlvcz0tZWxmCiAJCTs7CiAJY3JkcyB8IHVub3MpCiAJCWJhc2ljX21hY2hpbmU9bTY4ay1jcmRzCiAJCTs7CisJY3Jpc3YzMiB8IGNyaXN2MzItKiB8IGV0cmF4ZnMqKQorCQliYXNpY19tYWNoaW5lPWNyaXN2MzItYXhpcworCQk7OworCWNyaXMgfCBjcmlzLSogfCBldHJheCopCisJCWJhc2ljX21hY2hpbmU9Y3Jpcy1heGlzCisJCTs7CisJY3J4KQorCQliYXNpY19tYWNoaW5lPWNyeC11bmtub3duCisJCW9zPS1lbGYKKwkJOzsKIAlkYTMwIHwgZGEzMC0qKQogCQliYXNpY19tYWNoaW5lPW02OGstZGEzMAogCQk7OwogCWRlY3N0YXRpb24gfCBkZWNzdGF0aW9uLTMxMDAgfCBwbWF4IHwgcG1heC0qIHwgcG1pbiB8IGRlYzMxMDAgfCBkZWNzdGF0bikKIAkJYmFzaWNfbWFjaGluZT1taXBzLWRlYwogCQk7OworCWRlY3N5c3RlbTEwKiB8IGRlYzEwKikKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC1kZWMKKwkJb3M9LXRvcHMxMAorCQk7OworCWRlY3N5c3RlbTIwKiB8IGRlYzIwKikKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC1kZWMKKwkJb3M9LXRvcHMyMAorCQk7OwogCWRlbHRhIHwgMzMwMCB8IG1vdG9yb2xhLTMzMDAgfCBtb3Rvcm9sYS1kZWx0YSBcCiAJICAgICAgfCAzMzAwLW1vdG9yb2xhIHwgZGVsdGEtbW90b3JvbGEpCiAJCWJhc2ljX21hY2hpbmU9bTY4ay1tb3Rvcm9sYQpAQCAtMzM2LDYgKzYyNywxNCBAQAogCQliYXNpY19tYWNoaW5lPW04OGstbW90b3JvbGEKIAkJb3M9LXN5c3YzCiAJCTs7CisJZGljb3MpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQlvcz0tZGljb3MKKwkJOzsKKwlkamdwcCkKKwkJYmFzaWNfbWFjaGluZT1pNTg2LXBjCisJCW9zPS1tc2Rvc2RqZ3BwCisJCTs7CiAJZHB4MjAgfCBkcHgyMC0qKQogCQliYXNpY19tYWNoaW5lPXJzNjAwMC1idWxsCiAJCW9zPS1ib3N4CkBAIC0zNjksNiArNjY4LDEwIEBACiAJCWJhc2ljX21hY2hpbmU9dHJvbi1nbWljcm8KIAkJb3M9LXN5c3YKIAkJOzsKKwlnbzMyKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LWdvMzIKKwkJOzsKIAloMzA1MHIqIHwgaGl1eCopCiAJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1oaXRhY2hpCiAJCW9zPS1oaXV4d2UyCkBAIC00NDMsMjAgKzc0NiwxOSBAQAogCWkzNzAtaWJtKiB8IGlibSopCiAJCWJhc2ljX21hY2hpbmU9aTM3MC1pYm0KIAkJOzsKLSMgSSdtIG5vdCBzdXJlIHdoYXQgIlN5c3YzMiIgbWVhbnMuICBTaG91bGQgdGhpcyBiZSBzeXN2My4yPwotCWlbMzQ1NjddODZ2MzIpCisJaSo4NnYzMikKIAkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCiAJCW9zPS1zeXN2MzIKIAkJOzsKLQlpWzM0NTY3XTg2djQqKQorCWkqODZ2NCopCiAJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAogCQlvcz0tc3lzdjQKIAkJOzsKLQlpWzM0NTY3XTg2dikKKwlpKjg2dikKIAkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCiAJCW9zPS1zeXN2CiAJCTs7Ci0JaVszNDU2N104NnNvbDIpCisJaSo4NnNvbDIpCiAJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAogCQlvcz0tc29sYXJpczIKIAkJOzsKQEAgLTQ2OCwxNCArNzcwLDYgQEAKIAkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KIAkJb3M9LXZzdGEKIAkJOzsKLQlpMzg2LWdvMzIgfCBnbzMyKQotCQliYXNpY19tYWNoaW5lPWkzODYtdW5rbm93bgotCQlvcz0tZ28zMgotCQk7OwotCWkzODYtbWluZ3czMiB8IG1pbmd3MzIpCi0JCWJhc2ljX21hY2hpbmU9aTM4Ni11bmtub3duCi0JCW9zPS1taW5ndzMyCi0JCTs7CiAJaXJpcyB8IGlyaXM0ZCkKIAkJYmFzaWNfbWFjaGluZT1taXBzLXNnaQogCQljYXNlICRvcyBpbgpAQCAtNDkwLDYgKzc4NCwxNyBAQAogCQliYXNpY19tYWNoaW5lPW02OGstaXNpCiAJCW9zPS1zeXN2CiAJCTs7CisJbGVvbi0qfGxlb25bMy05XS0qKQorCQliYXNpY19tYWNoaW5lPXNwYXJjLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzLy0uKi8vJ2AKKwkJOzsKKwltNjhrbm9tbXUpCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCW9zPS1saW51eAorCQk7OworCW02OGtub21tdS0qKQorCQliYXNpY19tYWNoaW5lPW02OGstYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJb3M9LWxpbnV4CisJCTs7CiAJbTg4ay1vbXJvbiopCiAJCWJhc2ljX21hY2hpbmU9bTg4ay1vbXJvbgogCQk7OwpAQCAtNTAxLDYgKzgwNiwyMSBAQAogCQliYXNpY19tYWNoaW5lPW5zMzJrLXV0ZWsKIAkJb3M9LXN5c3YKIAkJOzsKKwltaWNyb2JsYXplKikKKwkJYmFzaWNfbWFjaGluZT1taWNyb2JsYXplLXhpbGlueAorCQk7OworCW1pbmd3NjQpCisJCWJhc2ljX21hY2hpbmU9eDg2XzY0LXBjCisJCW9zPS1taW5ndzY0CisJCTs7CisJbWluZ3czMikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCW9zPS1taW5ndzMyCisJCTs7CisJbWluZ3czMmNlKQorCQliYXNpY19tYWNoaW5lPWFybS11bmtub3duCisJCW9zPS1taW5ndzMyY2UKKwkJOzsKIAltaW5pZnJhbWUpCiAJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWNvbnZlcmdlbnQKIAkJOzsKQEAgLTUwOCwzNiArODI4LDQzIEBACiAJCWJhc2ljX21hY2hpbmU9bTY4ay1hdGFyaQogCQlvcz0tbWludAogCQk7OwotCW1pcHNlbCotbGludXgqKQotCQliYXNpY19tYWNoaW5lPW1pcHNlbC11bmtub3duCi0JCW9zPS1saW51eC1nbnUKLQkJOzsKLQltaXBzKi1saW51eCopCi0JCWJhc2ljX21hY2hpbmU9bWlwcy11bmtub3duCi0JCW9zPS1saW51eC1nbnUKLQkJOzsKIAltaXBzMyotKikKIAkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9taXBzMy9taXBzNjQvJ2AKIAkJOzsKIAltaXBzMyopCiAJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgLWUgJ3MvbWlwczMvbWlwczY0LydgLXVua25vd24KIAkJOzsKLQltbWl4KikKLQkJYmFzaWNfbWFjaGluZT1tbWl4LWtudXRoCi0JCW9zPS1tbWl4d2FyZQotCQk7OwogCW1vbml0b3IpCiAJCWJhc2ljX21hY2hpbmU9bTY4ay1yb202OGsKIAkJb3M9LWNvZmYKIAkJOzsKKwltb3JwaG9zKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgorCQlvcz0tbW9ycGhvcworCQk7OworCW1veGllYm94KQorCQliYXNpY19tYWNoaW5lPW1veGllLXVua25vd24KKwkJb3M9LW1veGllYm94CisJCTs7CiAJbXNkb3MpCi0JCWJhc2ljX21hY2hpbmU9aTM4Ni11bmtub3duCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYwogCQlvcz0tbXNkb3MKIAkJOzsKKwltczEtKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9tczEtL210LS8nYAorCQk7OworCW1zeXMpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQlvcz0tbXN5cworCQk7OwogCW12cykKIAkJYmFzaWNfbWFjaGluZT1pMzcwLWlibQogCQlvcz0tbXZzCiAJCTs7CisJbmFjbCkKKwkJYmFzaWNfbWFjaGluZT1sZTMyLXVua25vd24KKwkJb3M9LW5hY2wKKwkJOzsKIAluY3IzMDAwKQogCQliYXNpY19tYWNoaW5lPWk0ODYtbmNyCiAJCW9zPS1zeXN2NApAQCAtNTk1LDkgKzkyMiwxOSBAQAogCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKIAkJb3M9LW1vbjk2MAogCQk7OworCW5vbnN0b3B1eCkKKwkJYmFzaWNfbWFjaGluZT1taXBzLWNvbXBhcQorCQlvcz0tbm9uc3RvcHV4CisJCTs7CiAJbnAxKQogCQliYXNpY19tYWNoaW5lPW5wMS1nb3VsZAogCQk7OworCW5lby10YW5kZW0pCisJCWJhc2ljX21hY2hpbmU9bmVvLXRhbmRlbQorCQk7OworCW5zZS10YW5kZW0pCisJCWJhc2ljX21hY2hpbmU9bnNlLXRhbmRlbQorCQk7OwogCW5zci10YW5kZW0pCiAJCWJhc2ljX21hY2hpbmU9bnNyLXRhbmRlbQogCQk7OwpAQCAtNjA1LDYgKzk0MiwxMyBAQAogCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCiAJCW9zPS1wcm9lbGYKIAkJOzsKKwlvcGVucmlzYyB8IG9wZW5yaXNjLSopCisJCWJhc2ljX21hY2hpbmU9b3IzMi11bmtub3duCisJCTs7CisJb3M0MDApCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1pYm0KKwkJb3M9LW9zNDAwCisJCTs7CiAJT1NFNjgwMDAgfCBvc2U2ODAwMCkKIAkJYmFzaWNfbWFjaGluZT1tNjgwMDAtZXJpY3Nzb24KIAkJb3M9LW9zZQpAQCAtNjIxLDUxICs5NjUsOTQgQEAKIAkJYmFzaWNfbWFjaGluZT1pODYwLWludGVsCiAJCW9zPS1vc2YKIAkJOzsKKwlwYXJpc2MpCisJCWJhc2ljX21hY2hpbmU9aHBwYS11bmtub3duCisJCW9zPS1saW51eAorCQk7OworCXBhcmlzYy0qKQorCQliYXNpY19tYWNoaW5lPWhwcGEtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJb3M9LWxpbnV4CisJCTs7CiAJcGJkKQogCQliYXNpY19tYWNoaW5lPXNwYXJjLXR0aQogCQk7OwogCXBiYikKIAkJYmFzaWNfbWFjaGluZT1tNjhrLXR0aQogCQk7OwotICAgICAgICBwYzUzMiB8IHBjNTMyLSopCisJcGM1MzIgfCBwYzUzMi0qKQogCQliYXNpY19tYWNoaW5lPW5zMzJrLXBjNTMyCiAJCTs7Ci0JcGVudGl1bSB8IHA1IHwgazUgfCBrNiB8IG5leGVuKQorCXBjOTgpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQk7OworCXBjOTgtKikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bSB8IHA1IHwgazUgfCBrNiB8IG5leGdlbiB8IHZpYWMzKQogCQliYXNpY19tYWNoaW5lPWk1ODYtcGMKIAkJOzsKLQlwZW50aXVtcHJvIHwgcDYgfCA2eDg2KQorCXBlbnRpdW1wcm8gfCBwNiB8IDZ4ODYgfCBhdGhsb24gfCBhdGhsb25fKikKIAkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCiAJCTs7Ci0JcGVudGl1bWlpIHwgcGVudGl1bTIpCisJcGVudGl1bWlpIHwgcGVudGl1bTIgfCBwZW50aXVtaWlpIHwgcGVudGl1bTMpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQk7OworCXBlbnRpdW00KQogCQliYXNpY19tYWNoaW5lPWk3ODYtcGMKIAkJOzsKLQlwZW50aXVtLSogfCBwNS0qIHwgazUtKiB8IGs2LSogfCBuZXhlbi0qKQorCXBlbnRpdW0tKiB8IHA1LSogfCBrNS0qIHwgazYtKiB8IG5leGdlbi0qIHwgdmlhYzMtKikKIAkJYmFzaWNfbWFjaGluZT1pNTg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCiAJCTs7Ci0JcGVudGl1bXByby0qIHwgcDYtKiB8IDZ4ODYtKikKKwlwZW50aXVtcHJvLSogfCBwNi0qIHwgNng4Ni0qIHwgYXRobG9uLSopCiAJCWJhc2ljX21hY2hpbmU9aTY4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAogCQk7OwotCXBlbnRpdW1paS0qIHwgcGVudGl1bTItKikKKwlwZW50aXVtaWktKiB8IHBlbnRpdW0yLSogfCBwZW50aXVtaWlpLSogfCBwZW50aXVtMy0qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtNC0qKQogCQliYXNpY19tYWNoaW5lPWk3ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKIAkJOzsKIAlwbikKIAkJYmFzaWNfbWFjaGluZT1wbi1nb3VsZAogCQk7OwotCXBvd2VyKQliYXNpY19tYWNoaW5lPXJzNjAwMC1pYm0KKwlwb3dlcikJYmFzaWNfbWFjaGluZT1wb3dlci1pYm0KIAkJOzsKLQlwcGMpCWJhc2ljX21hY2hpbmU9cG93ZXJwYy11bmtub3duCi0JICAgICAgICA7OwotCXBwYy0qKQliYXNpY19tYWNoaW5lPXBvd2VycGMtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwlwcGMgfCBwcGNiZSkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLXVua25vd24KKwkJOzsKKwlwcGMtKiB8IHBwY2JlLSopCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAogCQk7OwogCXBwY2xlIHwgcG93ZXJwY2xpdHRsZSB8IHBwYy1sZSB8IHBvd2VycGMtbGl0dGxlKQogCQliYXNpY19tYWNoaW5lPXBvd2VycGNsZS11bmtub3duCi0JICAgICAgICA7OworCQk7OwogCXBwY2xlLSogfCBwb3dlcnBjbGl0dGxlLSopCiAJCWJhc2ljX21hY2hpbmU9cG93ZXJwY2xlLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCiAJCTs7CisJcHBjNjQpCWJhc2ljX21hY2hpbmU9cG93ZXJwYzY0LXVua25vd24KKwkJOzsKKwlwcGM2NC0qKSBiYXNpY19tYWNoaW5lPXBvd2VycGM2NC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBwYzY0bGUgfCBwb3dlcnBjNjRsaXR0bGUgfCBwcGM2NC1sZSB8IHBvd2VycGM2NC1saXR0bGUpCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYzY0bGUtdW5rbm93bgorCQk7OworCXBwYzY0bGUtKiB8IHBvd2VycGM2NGxpdHRsZS0qKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGM2NGxlLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CiAJcHMyKQogCQliYXNpY19tYWNoaW5lPWkzODYtaWJtCiAJCTs7CisJcHczMikKKwkJYmFzaWNfbWFjaGluZT1pNTg2LXVua25vd24KKwkJb3M9LXB3MzIKKwkJOzsKKwlyZG9zIHwgcmRvczY0KQorCQliYXNpY19tYWNoaW5lPXg4Nl82NC1wYworCQlvcz0tcmRvcworCQk7OworCXJkb3MzMikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1yZG9zCisJCTs7CiAJcm9tNjhrKQogCQliYXNpY19tYWNoaW5lPW02OGstcm9tNjhrCiAJCW9zPS1jb2ZmCkBAIC02NzYsMTAgKzEwNjMsMzAgQEAKIAlydHBjIHwgcnRwYy0qKQogCQliYXNpY19tYWNoaW5lPXJvbXAtaWJtCiAJCTs7CisJczM5MCB8IHMzOTAtKikKKwkJYmFzaWNfbWFjaGluZT1zMzkwLWlibQorCQk7OworCXMzOTB4IHwgczM5MHgtKikKKwkJYmFzaWNfbWFjaGluZT1zMzkweC1pYm0KKwkJOzsKIAlzYTI5MjAwKQogCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCiAJCW9zPS11ZGkKIAkJOzsKKwlzYjEpCisJCWJhc2ljX21hY2hpbmU9bWlwc2lzYTY0c2IxLXVua25vd24KKwkJOzsKKwlzYjFlbCkKKwkJYmFzaWNfbWFjaGluZT1taXBzaXNhNjRzYjFlbC11bmtub3duCisJCTs7CisJc2RlKQorCQliYXNpY19tYWNoaW5lPW1pcHNpc2EzMi1zZGUKKwkJb3M9LWVsZgorCQk7OworCXNlaSkKKwkJYmFzaWNfbWFjaGluZT1taXBzLXNlaQorCQlvcz0tc2VpdXgKKwkJOzsKIAlzZXF1ZW50KQogCQliYXNpY19tYWNoaW5lPWkzODYtc2VxdWVudAogCQk7OwpAQCAtNjg3LDcgKzEwOTQsMTMgQEAKIAkJYmFzaWNfbWFjaGluZT1zaC1oaXRhY2hpCiAJCW9zPS1obXMKIAkJOzsKLQlzcGFyY2xpdGUtd3JzKQorCXNoNWVsKQorCQliYXNpY19tYWNoaW5lPXNoNWxlLXVua25vd24KKwkJOzsKKwlzaDY0KQorCQliYXNpY19tYWNoaW5lPXNoNjQtdW5rbm93bgorCQk7OworCXNwYXJjbGl0ZS13cnMgfCBzaW1zby13cnMpCiAJCWJhc2ljX21hY2hpbmU9c3BhcmNsaXRlLXdycwogCQlvcz0tdnh3b3JrcwogCQk7OwpAQCAtNzA1LDYgKzExMTgsOSBAQAogCQliYXNpY19tYWNoaW5lPWk4NjAtc3RyYXR1cwogCQlvcz0tc3lzdjQKIAkJOzsKKwlzdHJvbmdhcm0tKiB8IHRodW1iLSopCisJCWJhc2ljX21hY2hpbmU9YXJtLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CiAJc3VuMikKIAkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCiAJCTs7CkBAIC03NTQsMTggKzExNzAsMzQgQEAKIAkJb3M9LWR5bml4CiAJCTs7CiAJdDNlKQotCQliYXNpY19tYWNoaW5lPXQzZS1jcmF5CisJCWJhc2ljX21hY2hpbmU9YWxwaGFldjUtY3JheQogCQlvcz0tdW5pY29zCiAJCTs7CisJdDkwKQorCQliYXNpY19tYWNoaW5lPXQ5MC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwl0aWxlKikKKwkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCisJCW9zPS1saW51eC1nbnUKKwkJOzsKIAl0eDM5KQogCQliYXNpY19tYWNoaW5lPW1pcHN0eDM5LXVua25vd24KIAkJOzsKIAl0eDM5ZWwpCiAJCWJhc2ljX21hY2hpbmU9bWlwc3R4MzllbC11bmtub3duCiAJCTs7CisJdG9hZDEpCisJCWJhc2ljX21hY2hpbmU9cGRwMTAteGtsCisJCW9zPS10b3BzMjAKKwkJOzsKIAl0b3dlciB8IHRvd2VyLTMyKQogCQliYXNpY19tYWNoaW5lPW02OGstbmNyCiAJCTs7CisJdHBmKQorCQliYXNpY19tYWNoaW5lPXMzOTB4LWlibQorCQlvcz0tdHBmCisJCTs7CiAJdWRpMjlrKQogCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCiAJCW9zPS11ZGkKQEAgLTc4Nyw4ICsxMjE5LDggQEAKIAkJb3M9LXZtcwogCQk7OwogCXZwcCp8dnh8dngtKikKLSAgICAgICAgICAgICAgIGJhc2ljX21hY2hpbmU9ZjMwMS1mdWppdHN1Ci0gICAgICAgICAgICAgICA7OworCQliYXNpY19tYWNoaW5lPWYzMDEtZnVqaXRzdQorCQk7OwogCXZ4d29ya3M5NjApCiAJCWJhc2ljX21hY2hpbmU9aTk2MC13cnMKIAkJb3M9LXZ4d29ya3MKQEAgLTgwOSwxNyArMTI0MSwyOCBAQAogCQliYXNpY19tYWNoaW5lPWhwcGExLjEtd2luYm9uZAogCQlvcz0tcHJvZWxmCiAJCTs7Ci0JeG1wKQotCQliYXNpY19tYWNoaW5lPXhtcC1jcmF5Ci0JCW9zPS11bmljb3MKKwl4Ym94KQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJb3M9LW1pbmd3MzIKIAkJOzsKLSAgICAgICAgeHBzIHwgeHBzMTAwKQorCXhwcyB8IHhwczEwMCkKIAkJYmFzaWNfbWFjaGluZT14cHMxMDAtaG9uZXl3ZWxsCiAJCTs7CisJeHNjYWxlLSogfCB4c2NhbGVlW2JsXS0qKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL154c2NhbGUvYXJtLydgCisJCTs7CisJeW1wKQorCQliYXNpY19tYWNoaW5lPXltcC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKIAl6OGstKi1jb2ZmKQogCQliYXNpY19tYWNoaW5lPXo4ay11bmtub3duCiAJCW9zPS1zaW0KIAkJOzsKKwl6ODAtKi1jb2ZmKQorCQliYXNpY19tYWNoaW5lPXo4MC11bmtub3duCisJCW9zPS1zaW0KKwkJOzsKIAlub25lKQogCQliYXNpY19tYWNoaW5lPW5vbmUtbm9uZQogCQlvcz0tbm9uZQpAQCAtODM2LDMyICsxMjc5LDM1IEBACiAJb3A2MGMpCiAJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1va2kKIAkJOzsKLQltaXBzKQotCQlpZiBbIHgkb3MgPSB4LWxpbnV4LWdudSBdOyB0aGVuCi0JCQliYXNpY19tYWNoaW5lPW1pcHMtdW5rbm93bgotCQllbHNlCi0JCQliYXNpY19tYWNoaW5lPW1pcHMtbWlwcwotCQlmaQotCQk7OwogCXJvbXApCiAJCWJhc2ljX21hY2hpbmU9cm9tcC1pYm0KIAkJOzsKKwltbWl4KQorCQliYXNpY19tYWNoaW5lPW1taXgta251dGgKKwkJOzsKIAlyczYwMDApCiAJCWJhc2ljX21hY2hpbmU9cnM2MDAwLWlibQogCQk7OwogCXZheCkKIAkJYmFzaWNfbWFjaGluZT12YXgtZGVjCiAJCTs7CisJcGRwMTApCisJCSMgdGhlcmUgYXJlIG1hbnkgY2xvbmVzLCBzbyBERUMgaXMgbm90IGEgc2FmZSBiZXQKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC11bmtub3duCisJCTs7CiAJcGRwMTEpCiAJCWJhc2ljX21hY2hpbmU9cGRwMTEtZGVjCiAJCTs7CiAJd2UzMmspCiAJCWJhc2ljX21hY2hpbmU9d2UzMmstYXR0CiAJCTs7Ci0Jc3BhcmMgfCBzcGFyY3Y5KQorCXNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzI0XWFlYiB8IHNoWzM0XWViIHwgc2hbMTIzNF1sZSB8IHNoWzIzXWVsZSkKKwkJYmFzaWNfbWFjaGluZT1zaC11bmtub3duCisJCTs7CisJc3BhcmMgfCBzcGFyY3Y4IHwgc3BhcmN2OSB8IHNwYXJjdjliIHwgc3BhcmN2OXYpCiAJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCiAJCTs7Ci0gICAgICAgIGN5ZHJhKQorCWN5ZHJhKQogCQliYXNpY19tYWNoaW5lPWN5ZHJhLWN5ZHJvbWUKIAkJOzsKIAlvcmlvbikKQEAgLTg3Niw5ICsxMzIyLDggQEAKIAlwbWFjIHwgcG1hYy1tcHcpCiAJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1hcHBsZQogCQk7OwotCWM0eCopCi0JCWJhc2ljX21hY2hpbmU9YzR4LW5vbmUKLQkJb3M9LWNvZmYKKwkqLXVua25vd24pCisJCSMgTWFrZSBzdXJlIHRvIG1hdGNoIGFuIGFscmVhZHktY2Fub25pY2FsaXplZCBtYWNoaW5lIG5hbWUuCiAJCTs7CiAJKikKIAkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBtYWNoaW5lIFxgJGJhc2ljX21hY2hpbmVcJyBub3QgcmVjb2duaXplZCAxPiYyCkBAIC05MDMsOSArMTM0OCwxMiBAQAogaWYgWyB4IiRvcyIgIT0geCIiIF0KIHRoZW4KIGNhc2UgJG9zIGluCi0gICAgICAgICMgRmlyc3QgbWF0Y2ggc29tZSBzeXN0ZW0gdHlwZSBhbGlhc2VzCi0gICAgICAgICMgdGhhdCBtaWdodCBnZXQgY29uZnVzZWQgd2l0aCB2YWxpZCBzeXN0ZW0gdHlwZXMuCisJIyBGaXJzdCBtYXRjaCBzb21lIHN5c3RlbSB0eXBlIGFsaWFzZXMKKwkjIHRoYXQgbWlnaHQgZ2V0IGNvbmZ1c2VkIHdpdGggdmFsaWQgc3lzdGVtIHR5cGVzLgogCSMgLXNvbGFyaXMqIGlzIGEgYmFzaWMgc3lzdGVtIHR5cGUsIHdpdGggdGhpcyBvbmUgZXhjZXB0aW9uLgorCS1hdXJvcmF1eCkKKwkJb3M9LWF1cm9yYXV4CisJCTs7CiAJLXNvbGFyaXMxIHwgLXNvbGFyaXMxLiopCiAJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzb2xhcmlzMXxzdW5vczR8J2AKIAkJOzsKQEAgLTkyNiw0MSArMTM3NCw1OCBAQAogCSMgRWFjaCBhbHRlcm5hdGl2ZSBNVVNUIEVORCBJTiBBICosIHRvIG1hdGNoIGEgdmVyc2lvbiBudW1iZXIuCiAJIyAtc3lzdiogaXMgbm90IGhlcmUgYmVjYXVzZSBpdCBjb21lcyBsYXRlciwgYWZ0ZXIgc3lzdnI0LgogCS1nbnUqIHwgLWJzZCogfCAtbWFjaCogfCAtbWluaXgqIHwgLWdlbml4KiB8IC11bHRyaXgqIHwgLWlyaXgqIFwKLQkgICAgICB8IC0qdm1zKiB8IC1zY28qIHwgLWVzaXgqIHwgLWlzYyogfCAtYWl4KiB8IC1zdW5vcyB8IC1zdW5vc1szNF0qXAotCSAgICAgIHwgLWhwdXgqIHwgLXVub3MqIHwgLW9zZiogfCAtbHVuYSogfCAtZGd1eCogfCAtc29sYXJpcyogfCAtc3ltKiBcCisJICAgICAgfCAtKnZtcyogfCAtc2NvKiB8IC1lc2l4KiB8IC1pc2MqIHwgLWFpeCogfCAtY25rKiB8IC1zdW5vcyB8IC1zdW5vc1szNF0qXAorCSAgICAgIHwgLWhwdXgqIHwgLXVub3MqIHwgLW9zZiogfCAtbHVuYSogfCAtZGd1eCogfCAtYXVyb3JhdXgqIHwgLXNvbGFyaXMqIFwKKwkgICAgICB8IC1zeW0qIHwgLWtvcGVuc29sYXJpcyogfCAtcGxhbjkqIFwKIAkgICAgICB8IC1hbWlnYW9zKiB8IC1hbWlnYWRvcyogfCAtbXNkb3MqIHwgLW5ld3NvcyogfCAtdW5pY29zKiB8IC1hb2YqIFwKLQkgICAgICB8IC1hb3MqIFwKKwkgICAgICB8IC1hb3MqIHwgLWFyb3MqIHwgLWNsb3VkYWJpKiB8IC1zb3J0aXgqIFwKIAkgICAgICB8IC1uaW5keSogfCAtdnhzaW0qIHwgLXZ4d29ya3MqIHwgLWVibW9uKiB8IC1obXMqIHwgLW12cyogXAogCSAgICAgIHwgLWNsaXgqIHwgLXJpc2NvcyogfCAtdW5pcGx1cyogfCAtaXJpcyogfCAtcnR1KiB8IC14ZW5peCogXAotCSAgICAgIHwgLWhpdXgqIHwgLTM4NmJzZCogfCAtbmV0YnNkKiB8IC1vcGVuYnNkKiB8IC1mcmVlYnNkKiB8IC1yaXNjaXgqIFwKLQkgICAgICB8IC1seW54b3MqIHwgLWJvc3gqIHwgLW5leHRzdGVwKiB8IC1jeHV4KiB8IC1hb3V0KiB8IC1lbGYqIHwgLW9hYmkqIFwKKwkgICAgICB8IC1oaXV4KiB8IC0zODZic2QqIHwgLWtuZXRic2QqIHwgLW1pcmJzZCogfCAtbmV0YnNkKiBcCisJICAgICAgfCAtYml0cmlnKiB8IC1vcGVuYnNkKiB8IC1zb2xpZGJzZCogfCAtbGliZXJ0eWJzZCogXAorCSAgICAgIHwgLWVra29ic2QqIHwgLWtmcmVlYnNkKiB8IC1mcmVlYnNkKiB8IC1yaXNjaXgqIHwgLWx5bnhvcyogXAorCSAgICAgIHwgLWJvc3gqIHwgLW5leHRzdGVwKiB8IC1jeHV4KiB8IC1hb3V0KiB8IC1lbGYqIHwgLW9hYmkqIFwKIAkgICAgICB8IC1wdHgqIHwgLWNvZmYqIHwgLWVjb2ZmKiB8IC13aW5udCogfCAtZG9tYWluKiB8IC12c3RhKiBcCiAJICAgICAgfCAtdWRpKiB8IC1lYWJpKiB8IC1saXRlcyogfCAtaWVlZSogfCAtZ28zMiogfCAtYXV4KiBcCi0JICAgICAgfCAtY3lnd2luKiB8IC1wZSogfCAtcHNvcyogfCAtbW9zcyogfCAtcHJvZWxmKiB8IC1ydGVtcyogXAotCSAgICAgIHwgLW1pbmd3MzIqIHwgLWxpbnV4LWdudSogfCAtdXhwdiogfCAtYmVvcyogfCAtbXBlaXgqIHwgLXVkayogXAotCSAgICAgIHwgLWludGVyaXgqIHwgLXV3aW4qIHwgLXJoYXBzb2R5KiB8IC1kYXJ3aW4qIHwgLW9wZW5lZCogXAotCSAgICAgIHwgLW9wZW5zdGVwKiB8IC1vc2tpdCopCisJICAgICAgfCAtY2hvcnVzb3MqIHwgLWNob3J1c3JkYiogfCAtY2VnY2MqIFwKKwkgICAgICB8IC1jeWd3aW4qIHwgLW1zeXMqIHwgLXBlKiB8IC1wc29zKiB8IC1tb3NzKiB8IC1wcm9lbGYqIHwgLXJ0ZW1zKiBcCisJICAgICAgfCAtbWluZ3czMiogfCAtbWluZ3c2NCogfCAtbGludXgtZ251KiB8IC1saW51eC1hbmRyb2lkKiBcCisJICAgICAgfCAtbGludXgtbmV3bGliKiB8IC1saW51eC1tdXNsKiB8IC1saW51eC11Y2xpYmMqIFwKKwkgICAgICB8IC11eHB2KiB8IC1iZW9zKiB8IC1tcGVpeCogfCAtdWRrKiB8IC1tb3hpZWJveCogXAorCSAgICAgIHwgLWludGVyaXgqIHwgLXV3aW4qIHwgLW1rcyogfCAtcmhhcHNvZHkqIHwgLWRhcndpbiogfCAtb3BlbmVkKiBcCisJICAgICAgfCAtb3BlbnN0ZXAqIHwgLW9za2l0KiB8IC1jb25peCogfCAtcHczMiogfCAtbm9uc3RvcHV4KiBcCisJICAgICAgfCAtc3Rvcm0tY2hhb3MqIHwgLXRvcHMxMCogfCAtdGVuZXgqIHwgLXRvcHMyMCogfCAtaXRzKiBcCisJICAgICAgfCAtb3MyKiB8IC12b3MqIHwgLXBhbG1vcyogfCAtdWNsaW51eCogfCAtbnVjbGV1cyogXAorCSAgICAgIHwgLW1vcnBob3MqIHwgLXN1cGVydXgqIHwgLXJ0bWsqIHwgLXJ0bWstbm92YSogfCAtd2luZGlzcyogXAorCSAgICAgIHwgLXBvd2VybWF4KiB8IC1kbml4KiB8IC1ueDYgfCAtbng3IHwgLXNlaSogfCAtZHJhZ29uZmx5KiBcCisJICAgICAgfCAtc2t5b3MqIHwgLWhhaWt1KiB8IC1yZG9zKiB8IC10b3BwZXJzKiB8IC1kcm9wcyogfCAtZXMqIFwKKwkgICAgICB8IC1vbmVmcyogfCAtdGlydG9zKiB8IC1waG9lbml4KikKIAkjIFJlbWVtYmVyLCBlYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOICosIHRvIG1hdGNoIGEgdmVyc2lvbiBudW1iZXIuCiAJCTs7CiAJLXFueCopCiAJCWNhc2UgJGJhc2ljX21hY2hpbmUgaW4KLQkJICAgIHg4Ni0qIHwgaVszNDU2N104Ni0qKQorCQkgICAgeDg2LSogfCBpKjg2LSopCiAJCQk7OwogCQkgICAgKikKIAkJCW9zPS1udG8kb3MKIAkJCTs7CiAJCWVzYWMKIAkJOzsKKwktbnRvLXFueCopCisJCTs7CiAJLW50byopCi0JCW9zPS1udG8tcW54CisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xudG98bnRvLXFueHwnYAogCQk7OwogCS1zaW0gfCAtZXMxODAwKiB8IC1obXMqIHwgLXhyYXkgfCAtb3M2OGsqIHwgLW5vbmUqIHwgLXY4OHIqIFwKLQkgICAgICB8IC13aW5kb3dzKiB8IC1vc3ggfCAtYWJ1ZyB8IC1uZXR3YXJlKiB8IC1vczkqIHwgLWJlb3MqIFwKKwkgICAgICB8IC13aW5kb3dzKiB8IC1vc3ggfCAtYWJ1ZyB8IC1uZXR3YXJlKiB8IC1vczkqIHwgLWJlb3MqIHwgLWhhaWt1KiBcCiAJICAgICAgfCAtbWFjb3MqIHwgLW1wdyogfCAtbWFnaWMqIHwgLW1taXh3YXJlKiB8IC1tb245NjAqIHwgLWxuZXdzKikKIAkJOzsKIAktbWFjKikKIAkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfG1hY3xtYWNvc3wnYAogCQk7OworCS1saW51eC1kaWV0bGliYykKKwkJb3M9LWxpbnV4LWRpZXRsaWJjCisJCTs7CiAJLWxpbnV4KikKIAkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfGxpbnV4fGxpbnV4LWdudXwnYAogCQk7OwpAQCAtOTczLDYgKzE0MzgsOSBAQAogCS1vcGVuZWQqKQogCQlvcz0tb3BlbmVkaXRpb24KIAkJOzsKKwktb3M0MDAqKQorCQlvcz0tb3M0MDAKKwkJOzsKIAktd2luY2UqKQogCQlvcz0td2luY2UKIAkJOzsKQEAgLTk5MSwxNiArMTQ1OSwyNSBAQAogCS1hY2lzKikKIAkJb3M9LWFvcwogCQk7OworCS1hdGhlb3MqKQorCQlvcz0tYXRoZW9zCisJCTs7CisJLXN5bGxhYmxlKikKKwkJb3M9LXN5bGxhYmxlCisJCTs7CiAJLTM4NmJzZCkKIAkJb3M9LWJzZAogCQk7OwogCS1jdGl4KiB8IC11dHMqKQogCQlvcz0tc3lzdgogCQk7OwotCS1uczIgKQotCSAgICAgICAgb3M9LW5leHRzdGVwMgorCS1ub3ZhKikKKwkJb3M9LXJ0bWstbm92YQogCQk7OwotCS1uc2spCisJLW5zMiApCisJCW9zPS1uZXh0c3RlcDIKKwkJOzsKKwktbnNrKikKIAkJb3M9LW5zawogCQk7OwogCSMgUHJlc2VydmUgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHNpbml4NS4KQEAgLTEwMTAsNiArMTQ4Nyw5IEBACiAJLXNpbml4KikKIAkJb3M9LXN5c3Y0CiAJCTs7CisJLXRwZiopCisJCW9zPS10cGYKKwkJOzsKIAktdHJpdG9uKikKIAkJb3M9LXN5c3YzCiAJCTs7CkBAIC0xMDM3LDggKzE1MTcsMjEgQEAKIAkteGVuaXgpCiAJCW9zPS14ZW5peAogCQk7OwotICAgICAgICAtKm1pbnQgfCAtKk1pTlQpCi0JICAgICAgICBvcz0tbWludAorCS0qbWludCB8IC1taW50WzAtOV0qIHwgLSpNaU5UIHwgLU1pTlRbMC05XSopCisJCW9zPS1taW50CisJCTs7CisJLWFyb3MqKQorCQlvcz0tYXJvcworCQk7OworCS16dm1vZSkKKwkJb3M9LXp2bW9lCisJCTs7CisJLWRpY29zKikKKwkJb3M9LWRpY29zCisJCTs7CisJLW5hY2wqKQorCQk7OworCS1pb3MpCiAJCTs7CiAJLW5vbmUpCiAJCTs7CkBAIC0xMDYyLDYgKzE1NTUsMTIgQEAKICMgc3lzdGVtLCBhbmQgd2UnbGwgbmV2ZXIgZ2V0IHRvIHRoaXMgcG9pbnQuCiAKIGNhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwlzY29yZS0qKQorCQlvcz0tZWxmCisJCTs7CisJc3B1LSopCisJCW9zPS1lbGYKKwkJOzsKIAkqLWFjb3JuKQogCQlvcz0tcmlzY2l4MS4yCiAJCTs7CkBAIC0xMDcxLDcgKzE1NzAsMjkgQEAKIAlhcm0qLXNlbWkpCiAJCW9zPS1hb3V0CiAJCTs7Ci0gICAgICAgIHBkcDExLSopCisJYzR4LSogfCB0aWM0eC0qKQorCQlvcz0tY29mZgorCQk7OworCWM4MDUxLSopCisJCW9zPS1lbGYKKwkJOzsKKwloZXhhZ29uLSopCisJCW9zPS1lbGYKKwkJOzsKKwl0aWM1NHgtKikKKwkJb3M9LWNvZmYKKwkJOzsKKwl0aWM1NXgtKikKKwkJb3M9LWNvZmYKKwkJOzsKKwl0aWM2eC0qKQorCQlvcz0tY29mZgorCQk7OworCSMgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIHRoZSAqLWRlYyBlbnRyeS4KKwlwZHAxMC0qKQorCQlvcz0tdG9wczIwCisJCTs7CisJcGRwMTEtKikKIAkJb3M9LW5vbmUKIAkJOzsKIAkqLWRlYyB8IHZheC0qKQpAQCAtMTA4NSwxOSArMTYwNiwyMiBAQAogCQk7OwogCW02ODAwMC1zdW4pCiAJCW9zPS1zdW5vczMKLQkJIyBUaGlzIGFsc28gZXhpc3RzIGluIHRoZSBjb25maWd1cmUgcHJvZ3JhbSwgYnV0IHdhcyBub3QgdGhlCi0JCSMgZGVmYXVsdC4KLQkJIyBvcz0tc3Vub3M0CiAJCTs7CiAJbTY4Ki1jaXNjbykKIAkJb3M9LWFvdXQKIAkJOzsKKwltZXAtKikKKwkJb3M9LWVsZgorCQk7OwogCW1pcHMqLWNpc2NvKQogCQlvcz0tZWxmCiAJCTs7CiAJbWlwcyotKikKIAkJb3M9LWVsZgogCQk7OworCW9yMzItKikKKwkJb3M9LWNvZmYKKwkJOzsKIAkqLXR0aSkJIyBtdXN0IGJlIGJlZm9yZSBzcGFyYyBlbnRyeSBvciB3ZSBnZXQgdGhlIHdyb25nIG9zLgogCQlvcz0tc3lzdjMKIAkJOzsKQEAgLTExMDcsOSArMTYzMSwxNSBAQAogCSotYmUpCiAJCW9zPS1iZW9zCiAJCTs7CisJKi1oYWlrdSkKKwkJb3M9LWhhaWt1CisJCTs7CiAJKi1pYm0pCiAJCW9zPS1haXgKIAkJOzsKKwkqLWtudXRoKQorCQlvcz0tbW1peHdhcmUKKwkJOzsKIAkqLXdlYykKIAkJb3M9LXByb2VsZgogCQk7OwpAQCAtMTE2MSwyNSArMTY5MSwyNSBAQAogCSotbmV4dCkKIAkJb3M9LW5leHRzdGVwMwogCQk7OwotICAgICAgICAqLWdvdWxkKQorCSotZ291bGQpCiAJCW9zPS1zeXN2CiAJCTs7Ci0gICAgICAgICotaGlnaGxldmVsKQorCSotaGlnaGxldmVsKQogCQlvcz0tYnNkCiAJCTs7CiAJKi1lbmNvcmUpCiAJCW9zPS1ic2QKIAkJOzsKLSAgICAgICAgKi1zZ2kpCisJKi1zZ2kpCiAJCW9zPS1pcml4CiAJCTs7Ci0gICAgICAgICotc2llbWVucykKKwkqLXNpZW1lbnMpCiAJCW9zPS1zeXN2NAogCQk7OwogCSotbWFzc2NvbXApCiAJCW9zPS1ydHUKIAkJOzsKLQlmMzAxLWZ1aml0c3UpCisJZjMwWzAxXS1mdWppdHN1IHwgZjcwMC1mdWppdHN1KQogCQlvcz0tdXhwdgogCQk7OwogCSotcm9tNjhrKQpAQCAtMTIxMiw3ICsxNzQyLDcgQEAKIAkJCS1zdW5vcyopCiAJCQkJdmVuZG9yPXN1bgogCQkJCTs7Ci0JCQktYWl4KikKKwkJCS1jbmsqfC1haXgqKQogCQkJCXZlbmRvcj1pYm0KIAkJCQk7OwogCQkJLWJlb3MqKQpAQCAtMTI0MiwxMCArMTc3MiwxNiBAQAogCQkJLW12cyogfCAtb3BlbmVkKikKIAkJCQl2ZW5kb3I9aWJtCiAJCQkJOzsKKwkJCS1vczQwMCopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CiAJCQktcHR4KikKIAkJCQl2ZW5kb3I9c2VxdWVudAogCQkJCTs7Ci0JCQktdnhzaW0qIHwgLXZ4d29ya3MqKQorCQkJLXRwZiopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktdnhzaW0qIHwgLXZ4d29ya3MqIHwgLXdpbmRpc3MqKQogCQkJCXZlbmRvcj13cnMKIAkJCQk7OwogCQkJLWF1eCopCkBAIC0xMjU3LDEyICsxNzkzLDIzIEBACiAJCQktbXB3KiB8IC1tYWNvcyopCiAJCQkJdmVuZG9yPWFwcGxlCiAJCQkJOzsKLQkJCS0qbWludCB8IC0qTWlOVCkKKwkJCS0qbWludCB8IC1taW50WzAtOV0qIHwgLSpNaU5UIHwgLU1pTlRbMC05XSopCiAJCQkJdmVuZG9yPWF0YXJpCiAJCQkJOzsKKwkJCS12b3MqKQorCQkJCXZlbmRvcj1zdHJhdHVzCisJCQkJOzsKIAkJZXNhYwogCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICJzL3Vua25vd24vJHZlbmRvci8iYAogCQk7OwogZXNhYwogCiBlY2hvICRiYXNpY19tYWNoaW5lJG9zCitleGl0CisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJ0aW1lc3RhbXA9JyIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkIgorIyB0aW1lLXN0YW1wLWVuZDogIiciCisjIEVuZDoKZGlmZiAtLWdpdCBhL2NvbmZpZ19pbi5oIGIvY29uZmlnX2luLmgKaW5kZXggNDFhZWJjNS4uMzFlNmZmZSAxMDA2NDQKLS0tIGEvY29uZmlnX2luLmgKKysrIGIvY29uZmlnX2luLmgKQEAgLTEsMTA0ICsxLDE5NiBAQAotLyoKLSAqIGNvbmZpZ19pbi5oCi0gKgotICogdGVtcGxhdGUgZm9yIGhlYWRlciBjb25maWcgZmlsZSBmb3IgU2VjdXJlIFJUUCBhbmQgVVNUIGltcGxlbWVudGF0aW9uCi0gKgotICogRGF2aWQgQS4gTWNHcmV3Ci0gKiBDaXNjbyBTeXN0ZW1zLCBJbmMuCi0gKi8KKy8qIGNvbmZpZ19pbi5oLiAgR2VuZXJhdGVkIGZyb20gY29uZmlndXJlLmFjIGJ5IGF1dG9oZWFkZXIuICAqLwogCisvKiBEZWZpbmUgaWYgYnVpbGRpbmcgdW5pdmVyc2FsIChpbnRlcm5hbCBoZWxwZXIgbWFjcm8pICovCisjdW5kZWYgQUNfQVBQTEVfVU5JVkVSU0FMX0JVSUxECiAKLSNpZm5kZWYgQ09ORklHX0gKLSNkZWZpbmUgQ09ORklHX0gKKy8qIERlZmluZSBpZiBidWlsZGluZyBmb3IgYSBDSVNDIG1hY2hpbmUgKGUuZy4gSW50ZWwpLiAqLworI3VuZGVmIENQVV9DSVNDCiAKLS8qIGlmIHdlJ3JlIG9uIGEgYmlnIGVuZGlhbiBtYWNoaW5lLCB3ZSBuZWVkIHRvIGRlZmluZSB0aGlzICovCisvKiBEZWZpbmUgaWYgYnVpbGRpbmcgZm9yIGEgUklTQyBtYWNoaW5lIChhc3N1bWUgc2xvdyBieXRlIGFjY2VzcykuICovCisjdW5kZWYgQ1BVX1JJU0MKIAotI2RlZmluZSBXT1JEU19CSUdFTkRJQU4gICAgICAwCisvKiBEZWZpbmUgdG8gZW5hYmxlZCBkZWJ1ZyBsb2dnaW5nIGZvciBhbGwgbXVkdWxlcy4gKi8KKyN1bmRlZiBFTkFCTEVfREVCVUdfTE9HR0lORwogCi0vKiBjaGVjayBmb3IgPHN0ZGludC5oPiBvciA8bWFjaGluZS90eXBlcy5oPiAgICAgICAgICAgICAgKi8KKy8qIExvZ2dpbmcgc3RhdG1lbnRzIHdpbGwgYmUgd3JpdGVuIHRvIHRoaXMgZmlsZS4gKi8KKyN1bmRlZiBFUlJfUkVQT1JUSU5HX0ZJTEUKIAotI2RlZmluZSBIQVZFX1NURElOVF9IICAgICAgICAwCi0jZGVmaW5lIEhBVkVfTUFDSElORV9UWVBFU19IIDAKLSNkZWZpbmUgSEFWRV9TWVNfSU5UX1RZUEVTX0ggMAorLyogRGVmaW5lIHRvIHJlZGlyZWN0IGxvZ2dpbmcgdG8gc3Rkb3V0LiAqLworI3VuZGVmIEVSUl9SRVBPUlRJTkdfU1RET1VUCiAKLS8qIGNoZWNrIGZvciBtaWNyb3NvZnQgaW50ZWdlciBkZWZpbml0aW9ucyAoZS5nLiwgY3lnd2luKSAqLworLyogRGVmaW5lIHRoaXMgdG8gdXNlIEFFUy1HQ00uICovCisjdW5kZWYgR0NNCiAKLSNkZWZpbmUgSEFWRV9NU19UWVBFUyAgICAgICAgMQorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxhcnBhL2luZXQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9BUlBBX0lORVRfSAogCi0vKiBpZiB3ZSBkb24ndCBoYXZlIHVpby5oLCB3ZSdsbCBuZWVkIHRvIGRlZmluZSBzdHJ1Y3QgaW92ZWMgKi8KKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Ynl0ZXN3YXAuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9CWVRFU1dBUF9ICiAKLSNkZWZpbmUgSEFWRV9TWVNfVUlPX0ggICAgICAgMAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpbmV0X2F0b24nIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfSU5FVF9BVE9OCiAKLS8qIDx1bmlzdGQuaD4gaXMgdXNlZCBieSBzb21lIHRlc3QvIGFwcHMgICAgICAgICAgICAgICAgICAqLworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYGludDE2X3QnLiAqLworI3VuZGVmIEhBVkVfSU5UMTZfVAogCi0jZGVmaW5lIEhBVkVfVU5JU1REX0ggICAgICAgIDAKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBpbnQzMl90Jy4gKi8KKyN1bmRlZiBIQVZFX0lOVDMyX1QKIAotLyogdGVzdCBhcHBzIHNob3VsZCB1c2UgaW5ldF9hdG9uKCksIGlmIGl0J3MgYXZhaWxhYmxlICovCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgaW50OF90Jy4gKi8KKyN1bmRlZiBIQVZFX0lOVDhfVAogCi0jZGVmaW5lIEhBVkVfSU5FVF9BVE9OICAgICAgIDAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9JTlRUWVBFU19ICiAKLS8qIGNoZWNrIGlmIHdlIGhhdmUgc3lzbG9nIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAqLworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBkbCcgbGlicmFyeSAoLWxkbCkuICovCisjdW5kZWYgSEFWRV9MSUJETAogCi0jZGVmaW5lIEhBVkVfU1lTTE9HX0ggICAgICAgIDAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbnNwcjQnIGxpYnJhcnkgKC1sbnNwcjQpLiAqLworI3VuZGVmIEhBVkVfTElCTlNQUjQKIAotLyogY2hlY2sgdG8gc2VlIGlmIHRoZSB1c2VyIGhhcyByZXF1ZXN0ZWQgdGhlIHVzZSBvZiBzeXNsb2cgKi8KKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbnNzMycgbGlicmFyeSAoLWxuc3MzKS4gKi8KKyN1bmRlZiBIQVZFX0xJQk5TUzMKIAotI2RlZmluZSBVU0VfU1lTTE9HICAgICAgICAgICAwCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNvY2tldCcgbGlicmFyeSAoLWxzb2NrZXQpLiAqLworI3VuZGVmIEhBVkVfTElCU09DS0VUCiAKLSNkZWZpbmUgRVJSX1JFUE9SVElOR19TVERPVVQgMAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB6JyBsaWJyYXJ5ICgtbHopLiAqLworI3VuZGVmIEhBVkVfTElCWgogCi0jZGVmaW5lIEVSUl9SRVBPUlRJTkdfU1lTTE9HIChIQVZFX1NZU0xPR19IICYgVVNFX1NZU0xPRykKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWFjaGluZS90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX01BQ0hJTkVfVFlQRVNfSAogCi0vKiBkZWZpbmUgRVJSX1JFUE9SVElOR19GSUxFIHRvIGhhdmUgbWVzc2FnZXMgc2VudCB0byBmaWxlICovCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1lbW9yeS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX01FTU9SWV9ICiAKLSNkZWZpbmUgRVJSX1JFUE9SVElOR19GSUxFIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L2luLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTkVUSU5FVF9JTl9ICiAKLS8qIAotICogc2V0IEVOQUJMRV9ERUJVR0dJTkcgdG8gMSB0byBjb21waWxlIGluIGR5bmFtaWMgZGVidWdnaW5nIHN5c3RlbSwKLSAqIHNldCBpdCB0byAwIHRvIG5vdCBjb21waWxlIGluIGR5bmFtaWMgZGVidWdnaW5nIChmb3IgYSBzbGlnaHQKLSAqIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50KQotICovCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5zcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX05TU19ICiAKLSNkZWZpbmUgRU5BQkxFX0RFQlVHR0lORyAgICAgMAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB3aW5wY2FwJyBsaWJyYXJ5ICgtbHdwY2FwKSAqLworI3VuZGVmIEhBVkVfUENBUAogCi0vKiBpZiB3ZSdyZSBnb2luZyB0byB1c2UgR0RPSSwgZGVmaW5lIFNSVFBfR0RPSSB0byAxICAgICAgKi8KKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2lnYWN0aW9uJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NJR0FDVElPTgogCi0jZGVmaW5lIFNSVFBfR0RPSSAgICAgICAgICAgIDAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc29ja2V0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NPQ0tFVAogCi0vKgotICogQ1BVX3R5cGUgaXMgZGVmaW5lZCBhcyAxIGlmIHRoZSBob3N0IHByb2Nlc3NvciBpcyBvZiB0aGF0IHR5cGUuCi0gKiBOb3RlIHRoYXQgbW9yZSB0aGFuIG9uZSB0eXBlIGNhbiBiZSBkZWZpbmVkIGF0IG9uY2U7IHRoaXMgaXMgc28KLSAqIHRoYXQgc3BlY2lhbCBpbnN0cnVjdGlvbnMgYW5kIG90aGVyIG9wdGltaXphdGlvbnMgY2FuIGJlIGhhbmRsZWQKLSAqIGluZGVwZW5kZW50bHkuCi0gKiAKLSAqIENQVV9SSVNDICAgICBSSVNDIG1hY2hpbmVzIChhc3N1bWUgc2xvdyBieXRlIGFjY2VzcykKLSAqIENQVV9DSVNDICAgICBDSVNDIG1hY2hpbmVzIChlLmcuIEludGVsKQotICogQ1BVX0FMVElWRUMgIE1vdG9yb2xhJ3MgU0lNRCBpbnN0cnVjdGlvbiBzZXQKLSAqIAotICovCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NURElOVF9ICiAKLSNkZWZpbmUgQ1BVX1JJU0MgICAgIDAKLSNkZWZpbmUgQ1BVX0NJU0MgICAgIDAKLSNkZWZpbmUgQ1BVX0FMVElWRUMgIDAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkbGliLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RETElCX0gKIAotLyoKLSAqIGlmIC9kZXYvcmFuZG9tIGlzIGF2YWlsYWJsZSwgdGhlbiBERVZfUkFORE9NID09IDEKLSAqCi0gKiAvZGV2L3JhbmRvbSBpcyBhICh0cnVlKSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB3aGljaCBpcwotICogaW1wbGVtZW50ZWQgaW4gbWFueSBtb2Rlcm4gb3BlcmF0aW5nIHN5c3RlbXMKLSAqLworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RSSU5HU19ICiAKLSNkZWZpbmUgREVWX1JBTkRPTSAwCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NUUklOR19ICiAKLS8qIGNoZWNrIGZvciBzdGRsaWIuaCAtIHdlIHVzZSBpdCBmb3IgeGFsbG9jKCkgYW5kIGZyZWUoKSAqLworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvaW50X3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX0lOVF9UWVBFU19ICiAKLSNkZWZpbmUgSEFWRV9TVERMSUJfSCAwCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zb2NrZXQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfU09DS0VUX0gKIAotLyogd2hldGhlciB0byB1c2UgaXNtYWNyeXAgY29kZSAqLwotI2RlZmluZSBHRU5FUklDX0FFU0lDTSAwCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zdGF0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1NUQVRfSAogCi0jZW5kaWYgLyogQ09ORklHX0ggKi8KKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1RZUEVTX0gKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdWlvLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1VJT19ICiAKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGB1aW50MTZfdCcuICovCisjdW5kZWYgSEFWRV9VSU5UMTZfVAogCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgdWludDMyX3QnLiAqLworI3VuZGVmIEhBVkVfVUlOVDMyX1QKIAorLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHVpbnQ2NF90Jy4gKi8KKyN1bmRlZiBIQVZFX1VJTlQ2NF9UCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGB1aW50OF90Jy4gKi8KKyN1bmRlZiBIQVZFX1VJTlQ4X1QKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9VTklTVERfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHVzbGVlcCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9VU0xFRVAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx3aW5kb3dzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfV0lORE9XU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d2luc29jazIuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9XSU5TT0NLMl9ICisKKy8qIERlZmluZSB0byB1c2UgWDg2IGlubGluZWQgYXNzZW1ibHkgY29kZSAqLworI3VuZGVmIEhBVkVfWDg2CisKKy8qIERlZmluZSB0aGlzIHRvIHVzZSBOU1MgY3J5cHRvLiAqLworI3VuZGVmIE5TUworCisvKiBEZWZpbmUgdGhpcyB0byB1c2UgT3BlblNTTCBjcnlwdG8uICovCisjdW5kZWYgT1BFTlNTTAorCisvKiBEZWZpbmUgdGhpcyBpZiBPUEVOU1NMX2NsZWFuc2UgaXMgYnJva2VuLiAqLworI3VuZGVmIE9QRU5TU0xfQ0xFQU5TRV9CUk9LRU4KKworLyogRGVmaW5lIHRoaXMgdG8gdXNlIE9wZW5TU0wgS0RGIGZvciBTUlRQLiAqLworI3VuZGVmIE9QRU5TU0xfS0RGCisKKy8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLworI3VuZGVmIFBBQ0tBR0VfQlVHUkVQT1JUCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX05BTUUKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfU1RSSU5HCisKKy8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1RBUk5BTUUKKworLyogRGVmaW5lIHRvIHRoZSBob21lIHBhZ2UgZm9yIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1VSTAorCisvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfVkVSU0lPTgorCisvKiBUaGUgc2l6ZSBvZiBgdW5zaWduZWQgbG9uZycsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyN1bmRlZiBTSVpFT0ZfVU5TSUdORURfTE9ORworCisvKiBUaGUgc2l6ZSBvZiBgdW5zaWduZWQgbG9uZyBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI3VuZGVmIFNJWkVPRl9VTlNJR05FRF9MT05HX0xPTkcKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCisjdW5kZWYgU1REQ19IRUFERVJTCisKKy8qIERlZmluZSBXT1JEU19CSUdFTkRJQU4gdG8gMSBpZiB5b3VyIHByb2Nlc3NvciBzdG9yZXMgd29yZHMgd2l0aCB0aGUgbW9zdAorICAgc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdCAobGlrZSBNb3Rvcm9sYSBhbmQgU1BBUkMsIHVubGlrZSBJbnRlbCkuICovCisjaWYgZGVmaW5lZCBBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQKKyMgaWYgZGVmaW5lZCBfX0JJR19FTkRJQU5fXworIyAgZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCisjIGVuZGlmCisjZWxzZQorIyBpZm5kZWYgV09SRFNfQklHRU5ESUFOCisjICB1bmRlZiBXT1JEU19CSUdFTkRJQU4KKyMgZW5kaWYKKyNlbmRpZgorCisvKiBEZWZpbmUgdG8gZW1wdHkgaWYgYGNvbnN0JyBkb2VzIG5vdCBjb25mb3JtIHRvIEFOU0kgQy4gKi8KKyN1bmRlZiBjb25zdAorCisvKiBEZWZpbmUgdG8gYF9faW5saW5lX18nIG9yIGBfX2lubGluZScgaWYgdGhhdCdzIHdoYXQgdGhlIEMgY29tcGlsZXIKKyAgIGNhbGxzIGl0LCBvciB0byBub3RoaW5nIGlmICdpbmxpbmUnIGlzIG5vdCBzdXBwb3J0ZWQgdW5kZXIgYW55IG5hbWUuICAqLworI2lmbmRlZiBfX2NwbHVzcGx1cworI3VuZGVmIGlubGluZQorI2VuZGlmCisKKy8qIERlZmluZSB0byBgdW5zaWduZWQgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KKyN1bmRlZiBzaXplX3QKZGlmZiAtLWdpdCBhL2NvbmZpZ19pbl9jbWFrZS5oIGIvY29uZmlnX2luX2NtYWtlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdlMDg2NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZ19pbl9jbWFrZS5oCkBAIC0wLDAgKzEsMTE1IEBACisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNjbWFrZWRlZmluZSBQQUNLQUdFX1ZFUlNJT04gIkBQQUNLQUdFX1ZFUlNJT05AIgorCisvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI2NtYWtlZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICJAUEFDS0FHRV9TVFJJTkdAIgorCisvKiBEZWZpbmUgdG8gZW5hYmxlZCBkZWJ1ZyBsb2dnaW5nIGZvciBhbGwgbXVkdWxlcy4gKi8KKyNjbWFrZWRlZmluZSBFTkFCTEVfREVCVUdfTE9HR0lORyAxCisKKy8qIExvZ2dpbmcgc3RhdG1lbnRzIHdpbGwgYmUgd3JpdGVuIHRvIHRoaXMgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBFUlJfUkVQT1JUSU5HX0ZJTEUgIkBFUlJfUkVQT1JUSU5HX0ZJTEVAIgorCisvKiBEZWZpbmUgdG8gcmVkaXJlY3QgbG9nZ2luZyB0byBzdGRvdXQuICovCisjY21ha2VkZWZpbmUgRVJSX1JFUE9SVElOR19TVERPVVQgMQorCisvKiBEZWZpbmUgdGhpcyB0byB1c2UgT3BlblNTTCBjcnlwdG8uICovCisjY21ha2VkZWZpbmUgT1BFTlNTTCAxCisKKy8qIERlZmluZSB0aGlzIHRvIHVzZSBBRVMtR0NNLiAqLworI2NtYWtlZGVmaW5lIEdDTSAxCisKKy8qIERlZmluZSBpZiBidWlsZGluZyBmb3IgYSBDSVNDIG1hY2hpbmUgKGUuZy4gSW50ZWwpLiAqLworI2RlZmluZSBDUFVfQ0lTQyAxCisKKy8qIERlZmluZSBpZiBidWlsZGluZyBmb3IgYSBSSVNDIG1hY2hpbmUgKGFzc3VtZSBzbG93IGJ5dGUgYWNjZXNzKS4gKi8KKy8qICN1bmRlZiBDUFVfUklTQyAqLworCisvKiBEZWZpbmUgdG8gdXNlIFg4NiBpbmxpbmVkIGFzc2VtYmx5IGNvZGUgKi8KKyNkZWZpbmUgSEFWRV9YODYgMQorCisvKiBEZWZpbmUgV09SRFNfQklHRU5ESUFOIHRvIDEgaWYgeW91ciBwcm9jZXNzb3Igc3RvcmVzIHdvcmRzIHdpdGggdGhlIG1vc3QKKyBzaWduaWZpY2FudCBieXRlIGZpcnN0IChsaWtlIE1vdG9yb2xhIGFuZCBTUEFSQywgdW5saWtlIEludGVsKS4gKi8KKyNjbWFrZWRlZmluZSBXT1JEU19CSUdFTkRJQU4gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFycGEvaW5ldC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0FSUEFfSU5FVF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxieXRlc3dhcC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0JZVEVTV0FQX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGludHR5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfSU5UVFlQRVNfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWFjaGluZS90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX01BQ0hJTkVfVFlQRVNfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC9pbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX05FVElORVRfSU5fSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfU1RESU5UX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1NURExJQl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvaW50X3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfU1lTX0lOVF9UWVBFU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc29ja2V0Lmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfU1lTX1NPQ0tFVF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfVU5JU1REX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHdpbmRvd3MuaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9XSU5ET1dTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHdpbnNvY2syLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfV0lOU09DSzJfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaW5ldF9hdG9uJyBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0lORVRfQVRPTiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2lnYWN0aW9uJyBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1NJR0FDVElPTiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdXNsZWVwJyBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1VTTEVFUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGB1aW50OF90Jy4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1VJTlQ4X1QgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgdWludDE2X3QnLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfVUlOVDE2X1QgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgdWludDMyX3QnLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfVUlOVDMyX1QgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgdWludDY0X3QnLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfVUlOVDY0X1QgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgaW50MzJfdCcuICovCisjY21ha2VkZWZpbmUgSEFWRV9JTlQzMl9UIDEKKworLyogVGhlIHNpemUgb2YgYHVuc2lnbmVkIGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCitAU0laRU9GX1VOU0lHTkVEX0xPTkdfQ09ERUAKKworLyogVGhlIHNpemUgb2YgYHVuc2lnbmVkIGxvbmcgbG9uZycsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KK0BTSVpFT0ZfVU5TSUdORURfTE9OR19MT05HX0NPREVACisKKy8qIERlZmluZSBpbmxpbmUgdG8gd2hhdCBpcyBzdXBwb3J0ZWQgYnkgY29tcGlsZXIgICovCisjY21ha2VkZWZpbmUgSEFWRV9JTkxJTkUgMQorI2NtYWtlZGVmaW5lIEhBVkVfX19JTkxJTkUgMQorI2lmbmRlZiBIQVZFX0lOTElORQorICAjaWZkZWYgSEFWRV9fX0lOTElORQorICAgICNkZWZpbmUgaW5saW5lIF9faW5saW5lCisgICNlbHNlCisgICAgI2RlZmluZSBpbmxpbmUKKyAgI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCBlZGQ2ODI5Li42NWNjZmYzIDEwMDc1NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0xLDgxICsxLDQ2MiBAQAogIyEgL2Jpbi9zaAogIyBHdWVzcyB2YWx1ZXMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIGFuZCBjcmVhdGUgTWFrZWZpbGVzLgotIyBHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTcuCisjIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OSBmb3IgbGlic3J0cDIgMi4zLjAtcHJlLgogIwotIyBDb3B5cmlnaHQgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMgotIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgUmVwb3J0IGJ1Z3MgdG8gPGh0dHBzOi8vZ2l0aHViLmNvbS9jaXNjby9saWJzcnRwL2lzc3Vlcz4uCisjCisjCisjIENvcHlyaWdodCAoQykgMTk5Mi0xOTk2LCAxOTk4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjCiAjIFRoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNNHNoIEluaXRpYWxpemF0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKIAotIyBCZSBCb3VybmUgY29tcGF0aWJsZQotaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CiAgIGVtdWxhdGUgc2gKICAgTlVMTENNRD06Ci0gICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCiAgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCiAgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJwotZWxpZiB0ZXN0IC1uICIke0JBU0hfVkVSU0lPTitzZXR9IiAmJiAoc2V0IC1vIHBvc2l4KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgc2V0IC1vIHBvc2l4Ci1maQotCi0jIFN1cHBvcnQgdW5zZXQgd2hlbiBwb3NzaWJsZS4KLWlmIChGT089Rk9POyB1bnNldCBGT08pID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBhc191bnNldD11bnNldAorICBzZXRvcHQgTk9fR0xPQl9TVUJTVAogZWxzZQotICBhc191bnNldD1mYWxzZQorICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4gIygKKyAgKnBvc2l4KikgOgorICAgIHNldCAtbyBwb3NpeCA7OyAjKAorICAqKSA6CisgICAgIDs7Citlc2FjCiBmaQogCiAKLSMgV29yayBhcm91bmQgYnVncyBpbiBwcmUtMy4wIFVXSU4ga3NoLgotJGFzX3Vuc2V0IEVOViBNQUlMIE1BSUxQQVRICithc19ubD0nCisnCitleHBvcnQgYXNfbmwKKyMgUHJpbnRpbmcgYSBsb25nIHN0cmluZyBjcmFzaGVzIFNvbGFyaXMgNyAvdXNyL2Jpbi9wcmludGYuCithc19lY2hvPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworIyBQcmVmZXIgYSBrc2ggc2hlbGwgYnVpbHRpbiBvdmVyIGFuIGV4dGVybmFsIHByaW50ZiBwcm9ncmFtIG9uIFNvbGFyaXMsCisjIGJ1dCB3aXRob3V0IHdhc3RpbmcgZm9ya3MgZm9yIGJhc2ggb3IgenNoLgoraWYgdGVzdCAteiAiJEJBU0hfVkVSU0lPTiRaU0hfVkVSU0lPTiIgXAorICAgICYmICh0ZXN0ICJYYHByaW50IC1yIC0tICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnQgLXIgLS0nCisgIGFzX2VjaG9fbj0ncHJpbnQgLXJuIC0tJworZWxpZiAodGVzdCAiWGBwcmludGYgJXMgJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludGYgJXNcbicKKyAgYXNfZWNob19uPSdwcmludGYgJXMnCitlbHNlCisgIGlmIHRlc3QgIlhgKC91c3IvdWNiL2VjaG8gLW4gLW4gJGFzX2VjaG8pIDI+L2Rldi9udWxsYCIgPSAiWC1uICRhc19lY2hvIjsgdGhlbgorICAgIGFzX2VjaG9fYm9keT0nZXZhbCAvdXNyL3VjYi9lY2hvIC1uICIkMSRhc19ubCInCisgICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJworICBlbHNlCisgICAgYXNfZWNob19ib2R5PSdldmFsIGV4cHIgIlgkMSIgOiAiWFxcKC4qXFwpIicKKyAgICBhc19lY2hvX25fYm9keT0nZXZhbAorICAgICAgYXJnPSQxOworICAgICAgY2FzZSAkYXJnIGluICMoCisgICAgICAqIiRhc19ubCIqKQorCWV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkkYXNfbmwiOworCWFyZz1gZXhwciAiWCRhcmciIDogIi4qJGFzX25sXFwoLipcXCkiYDs7CisgICAgICBlc2FjOworICAgICAgZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSIgfCB0ciAtZCAiJGFzX25sIgorICAgICcKKyAgICBleHBvcnQgYXNfZWNob19uX2JvZHkKKyAgICBhc19lY2hvX249J3NoIC1jICRhc19lY2hvX25fYm9keSBhc19lY2hvJworICBmaQorICBleHBvcnQgYXNfZWNob19ib2R5CisgIGFzX2VjaG89J3NoIC1jICRhc19lY2hvX2JvZHkgYXNfZWNobycKK2ZpCisKKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgUEFUSF9TRVBBUkFUT1I9OgorICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSAmJiB7CisgICAgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgfHwKKyAgICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICB9CitmaQorCisKKyMgSUZTCisjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcworIyB0aGVyZSB0byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuCisjIChJZiBfQVNfUEFUSF9XQUxLIHdlcmUgY2FsbGVkIHdpdGggSUZTIHVuc2V0LCBpdCB3b3VsZCBkaXNhYmxlIHdvcmQKKyMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKK0lGUz0iICIiCSRhc19ubCIKKworIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KK2FzX215c2VsZj0KK2Nhc2UgJDAgaW4gIygoCisgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKyAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICAgICA7OworZXNhYworIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJworIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCitpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCisgIGFzX215c2VsZj0kMAorZmkKK2lmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgZmlsZSBuYW1lIiA+JjIKKyAgZXhpdCAxCitmaQorCisjIFVuc2V0IHZhcmlhYmxlcyB0aGF0IHdlIGRvIG5vdCBuZWVkIGFuZCB3aGljaCBjYXVzZSBidWdzIChlLmcuIGluCisjIHByZS0zLjAgVVdJTiBrc2gpLiAgQnV0IGRvIG5vdCBjYXVzZSBidWdzIGluIGJhc2ggMi4wMTsgdGhlICJ8fCBleGl0IDEiCisjIHN1cHByZXNzZXMgYW55ICJTZWdtZW50YXRpb24gZmF1bHQiIG1lc3NhZ2UgdGhlcmUuICAnKCgnIGNvdWxkCisjIHRyaWdnZXIgYSBidWcgaW4gcGRrc2ggNS4yLjE0LgorZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYgTUFJTCBNQUlMUEFUSAorZG8gZXZhbCB0ZXN0IHhcJHskYXNfdmFyK3NldH0gPSB4c2V0IFwKKyAgJiYgKCAodW5zZXQgJGFzX3ZhcikgfHwgZXhpdCAxKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgJGFzX3ZhciB8fCA6Citkb25lCiBQUzE9JyQgJwogUFMyPSc+ICcKIFBTND0nKyAnCiAKICMgTkxTIG51aXNhbmNlcy4KLWZvciBhc192YXIgaW4gXAotICBMQU5HIExBTkdVQUdFIExDX0FERFJFU1MgTENfQUxMIExDX0NPTExBVEUgTENfQ1RZUEUgTENfSURFTlRJRklDQVRJT04gXAotICBMQ19NRUFTVVJFTUVOVCBMQ19NRVNTQUdFUyBMQ19NT05FVEFSWSBMQ19OQU1FIExDX05VTUVSSUMgTENfUEFQRVIgXAotICBMQ19URUxFUEhPTkUgTENfVElNRQotZG8KLSAgaWYgKHNldCAreDsgdGVzdCAtbiAiYChldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIpIDI+JjFgIik7IHRoZW4KLSAgICBldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIKLSAgZWxzZQotICAgICRhc191bnNldCAkYXNfdmFyCi0gIGZpCi1kb25lCitMQ19BTEw9QworZXhwb3J0IExDX0FMTAorTEFOR1VBR0U9QworZXhwb3J0IExBTkdVQUdFCiAKLSMgUmVxdWlyZWQgdG8gdXNlIGJhc2VuYW1lLgotaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyMgQ0RQQVRILgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCisjIFVzZSBhIHByb3BlciBpbnRlcm5hbCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBlbnN1cmUgd2UgZG9uJ3QgZmFsbAorICAjIGludG8gYW4gaW5maW5pdGUgbG9vcCwgY29udGludW91c2x5IHJlLWV4ZWN1dGluZyBvdXJzZWx2ZXMuCisgIGlmIHRlc3QgeCIke19hc19jYW5fcmVleGVjfSIgIT0geG5vICYmIHRlc3QgIngkQ09ORklHX1NIRUxMIiAhPSB4OyB0aGVuCisgICAgX2FzX2Nhbl9yZWV4ZWM9bm87IGV4cG9ydCBfYXNfY2FuX3JlZXhlYzsKKyAgICAjIFdlIGNhbm5vdCB5ZXQgYXNzdW1lIGEgZGVjZW50IHNoZWxsLCBzbyB3ZSBoYXZlIHRvIHByb3ZpZGUgYQorIyBuZXV0cmFsaXphdGlvbiB2YWx1ZSBmb3Igc2hlbGxzIHdpdGhvdXQgdW5zZXQ7IGFuZCB0aGlzIGFsc28KKyMgd29ya3MgYXJvdW5kIHNoZWxscyB0aGF0IGNhbm5vdCB1bnNldCBub25leGlzdGVudCB2YXJpYWJsZXMuCisjIFByZXNlcnZlIC12IGFuZCAteCB0byB0aGUgcmVwbGFjZW1lbnQgc2hlbGwuCitCQVNIX0VOVj0vZGV2L251bGwKK0VOVj0vZGV2L251bGwKKyh1bnNldCBCQVNIX0VOVikgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IEJBU0hfRU5WIEVOVgorY2FzZSAkLSBpbiAjICgoKCgKKyAgKnYqeCogfCAqeCp2KiApIGFzX29wdHM9LXZ4IDs7CisgICp2KiApIGFzX29wdHM9LXYgOzsKKyAgKngqICkgYXNfb3B0cz0teCA7OworICAqICkgYXNfb3B0cz0gOzsKK2VzYWMKK2V4ZWMgJENPTkZJR19TSEVMTCAkYXNfb3B0cyAiJGFzX215c2VsZiIgJHsxKyIkQCJ9CisjIEFkbWl0dGVkbHksIHRoaXMgaXMgcXVpdGUgcGFyYW5vaWQsIHNpbmNlIGFsbCB0aGUga25vd24gc2hlbGxzIGJhaWwKKyMgb3V0IGFmdGVyIGEgZmFpbGVkIGBleGVjJy4KKyRhc19lY2hvICIkMDogY291bGQgbm90IHJlLWV4ZWN1dGUgd2l0aCAkQ09ORklHX1NIRUxMIiA+JjIKK2FzX2ZuX2V4aXQgMjU1CisgIGZpCisgICMgV2UgZG9uJ3Qgd2FudCB0aGlzIHRvIHByb3BhZ2F0ZSB0byBvdGhlciBzdWJwcm9jZXNzZXMuCisgICAgICAgICAgeyBfYXNfY2FuX3JlZXhlYz07IHVuc2V0IF9hc19jYW5fcmVleGVjO30KK2lmIHRlc3QgIngkQ09ORklHX1NIRUxMIiA9IHg7IHRoZW4KKyAgYXNfYm91cm5lX2NvbXBhdGlibGU9ImlmIHRlc3QgLW4gXCJcJHtaU0hfVkVSU0lPTitzZXR9XCIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gXCR7MStcIlwkQFwifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJ1wkezErXCJcJEBcIn0nPSdcIlwkQFwiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIFxgKHNldCAtbykgMj4vZGV2L251bGxcYCBpbiAjKAorICAqcG9zaXgqKSA6CisgICAgc2V0IC1vIHBvc2l4IDs7ICMoCisgICopIDoKKyAgICAgOzsKK2VzYWMKK2ZpCisiCisgIGFzX3JlcXVpcmVkPSJhc19mbl9yZXR1cm4gKCkgeyAoZXhpdCBcJDEpOyB9Cithc19mbl9zdWNjZXNzICgpIHsgYXNfZm5fcmV0dXJuIDA7IH0KK2FzX2ZuX2ZhaWx1cmUgKCkgeyBhc19mbl9yZXR1cm4gMTsgfQorYXNfZm5fcmV0X3N1Y2Nlc3MgKCkgeyByZXR1cm4gMDsgfQorYXNfZm5fcmV0X2ZhaWx1cmUgKCkgeyByZXR1cm4gMTsgfQorCitleGl0Y29kZT0wCithc19mbl9zdWNjZXNzIHx8IHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9zdWNjZXNzIGZhaWxlZC47IH0KK2FzX2ZuX2ZhaWx1cmUgJiYgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX2ZhaWx1cmUgc3VjY2VlZGVkLjsgfQorYXNfZm5fcmV0X3N1Y2Nlc3MgfHwgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3JldF9zdWNjZXNzIGZhaWxlZC47IH0KK2FzX2ZuX3JldF9mYWlsdXJlICYmIHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9yZXRfZmFpbHVyZSBzdWNjZWVkZWQuOyB9CitpZiAoIHNldCB4OyBhc19mbl9yZXRfc3VjY2VzcyB5ICYmIHRlc3QgeCA9IFwiXCQxXCIgKTsgdGhlbiA6CisKK2Vsc2UKKyAgZXhpdGNvZGU9MTsgZWNobyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgd2VyZSBub3Qgc2F2ZWQuCitmaQordGVzdCB4XCRleGl0Y29kZSA9IHgwIHx8IGV4aXQgMQordGVzdCAteCAvIHx8IGV4aXQgMSIKKyAgYXNfc3VnZ2VzdGVkPSIgIGFzX2xpbmVub18xPSI7YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQkTElORU5PO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkIiBhc19saW5lbm9fMWE9XCRMSU5FTk8KKyAgYXNfbGluZW5vXzI9Ijthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCRMSU5FTk87YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQiIGFzX2xpbmVub18yYT1cJExJTkVOTworICBldmFsICd0ZXN0IFwieFwkYXNfbGluZW5vXzEnXCRhc19ydW4nXCIgIT0gXCJ4XCRhc19saW5lbm9fMidcJGFzX3J1bidcIiAmJgorICB0ZXN0IFwieFxgZXhwciBcJGFzX2xpbmVub18xJ1wkYXNfcnVuJyArIDFcYFwiID0gXCJ4XCRhc19saW5lbm9fMidcJGFzX3J1bidcIicgfHwgZXhpdCAxCit0ZXN0IFwkKCggMSArIDEgKSkgPSAyIHx8IGV4aXQgMSIKKyAgaWYgKGV2YWwgIiRhc19yZXF1aXJlZCIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKK2Vsc2UKKyAgYXNfaGF2ZV9yZXF1aXJlZD1ubworZmkKKyAgaWYgdGVzdCB4JGFzX2hhdmVfcmVxdWlyZWQgPSB4eWVzICYmIChldmFsICIkYXNfc3VnZ2VzdGVkIikgMj4vZGV2L251bGw7IHRoZW4gOgorCitlbHNlCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2FzX2ZvdW5kPWZhbHNlCitmb3IgYXNfZGlyIGluIC9iaW4kUEFUSF9TRVBBUkFUT1IvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGFzX2ZvdW5kPToKKyAgY2FzZSAkYXNfZGlyIGluICMoCisJIC8qKQorCSAgIGZvciBhc19iYXNlIGluIHNoIGJhc2gga3NoIHNoNTsgZG8KKwkgICAgICMgVHJ5IG9ubHkgc2hlbGxzIHRoYXQgZXhpc3QsIHRvIHNhdmUgc2V2ZXJhbCBmb3Jrcy4KKwkgICAgIGFzX3NoZWxsPSRhc19kaXIvJGFzX2Jhc2UKKwkgICAgIGlmIHsgdGVzdCAtZiAiJGFzX3NoZWxsIiB8fCB0ZXN0IC1mICIkYXNfc2hlbGwuZXhlIjsgfSAmJgorCQkgICAgeyAkYXNfZWNobyAiJGFzX2JvdXJuZV9jb21wYXRpYmxlIiIkYXNfcmVxdWlyZWQiIHwgYXNfcnVuPWEgIiRhc19zaGVsbCI7IH0gMj4vZGV2L251bGw7IHRoZW4gOgorICBDT05GSUdfU0hFTEw9JGFzX3NoZWxsIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCisJCSAgIGlmIHsgJGFzX2VjaG8gIiRhc19ib3VybmVfY29tcGF0aWJsZSIiJGFzX3N1Z2dlc3RlZCIgfCBhc19ydW49YSAiJGFzX3NoZWxsIjsgfSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGJyZWFrIDIKK2ZpCitmaQorCSAgIGRvbmU7OworICAgICAgIGVzYWMKKyAgYXNfZm91bmQ9ZmFsc2UKK2RvbmUKKyRhc19mb3VuZCB8fCB7IGlmIHsgdGVzdCAtZiAiJFNIRUxMIiB8fCB0ZXN0IC1mICIkU0hFTEwuZXhlIjsgfSAmJgorCSAgICAgIHsgJGFzX2VjaG8gIiRhc19ib3VybmVfY29tcGF0aWJsZSIiJGFzX3JlcXVpcmVkIiB8IGFzX3J1bj1hICIkU0hFTEwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgQ09ORklHX1NIRUxMPSRTSEVMTCBhc19oYXZlX3JlcXVpcmVkPXllcworZmk7IH0KK0lGUz0kYXNfc2F2ZV9JRlMKKworCisgICAgICBpZiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgIT0geDsgdGhlbiA6CisgIGV4cG9ydCBDT05GSUdfU0hFTEwKKyAgICAgICAgICAgICAjIFdlIGNhbm5vdCB5ZXQgYXNzdW1lIGEgZGVjZW50IHNoZWxsLCBzbyB3ZSBoYXZlIHRvIHByb3ZpZGUgYQorIyBuZXV0cmFsaXphdGlvbiB2YWx1ZSBmb3Igc2hlbGxzIHdpdGhvdXQgdW5zZXQ7IGFuZCB0aGlzIGFsc28KKyMgd29ya3MgYXJvdW5kIHNoZWxscyB0aGF0IGNhbm5vdCB1bnNldCBub25leGlzdGVudCB2YXJpYWJsZXMuCisjIFByZXNlcnZlIC12IGFuZCAteCB0byB0aGUgcmVwbGFjZW1lbnQgc2hlbGwuCitCQVNIX0VOVj0vZGV2L251bGwKK0VOVj0vZGV2L251bGwKKyh1bnNldCBCQVNIX0VOVikgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IEJBU0hfRU5WIEVOVgorY2FzZSAkLSBpbiAjICgoKCgKKyAgKnYqeCogfCAqeCp2KiApIGFzX29wdHM9LXZ4IDs7CisgICp2KiApIGFzX29wdHM9LXYgOzsKKyAgKngqICkgYXNfb3B0cz0teCA7OworICAqICkgYXNfb3B0cz0gOzsKK2VzYWMKK2V4ZWMgJENPTkZJR19TSEVMTCAkYXNfb3B0cyAiJGFzX215c2VsZiIgJHsxKyIkQCJ9CisjIEFkbWl0dGVkbHksIHRoaXMgaXMgcXVpdGUgcGFyYW5vaWQsIHNpbmNlIGFsbCB0aGUga25vd24gc2hlbGxzIGJhaWwKKyMgb3V0IGFmdGVyIGEgZmFpbGVkIGBleGVjJy4KKyRhc19lY2hvICIkMDogY291bGQgbm90IHJlLWV4ZWN1dGUgd2l0aCAkQ09ORklHX1NIRUxMIiA+JjIKK2V4aXQgMjU1CitmaQorCisgICAgaWYgdGVzdCB4JGFzX2hhdmVfcmVxdWlyZWQgPSB4bm87IHRoZW4gOgorICAkYXNfZWNobyAiJDA6IFRoaXMgc2NyaXB0IHJlcXVpcmVzIGEgc2hlbGwgbW9yZSBtb2Rlcm4gdGhhbiBhbGwiCisgICRhc19lY2hvICIkMDogdGhlIHNoZWxscyB0aGF0IEkgZm91bmQgb24geW91ciBzeXN0ZW0uIgorICBpZiB0ZXN0IHgke1pTSF9WRVJTSU9OK3NldH0gPSB4c2V0IDsgdGhlbgorICAgICRhc19lY2hvICIkMDogSW4gcGFydGljdWxhciwgenNoICRaU0hfVkVSU0lPTiBoYXMgYnVncyBhbmQgc2hvdWxkIgorICAgICRhc19lY2hvICIkMDogYmUgdXBncmFkZWQgdG8genNoIDQuMy40IG9yIGxhdGVyLiIKKyAgZWxzZQorICAgICRhc19lY2hvICIkMDogUGxlYXNlIHRlbGwgYnVnLWF1dG9jb25mQGdudS5vcmcgYW5kCiskMDogaHR0cHM6Ly9naXRodWIuY29tL2Npc2NvL2xpYnNydHAvaXNzdWVzIGFib3V0IHlvdXIKKyQwOiBzeXN0ZW0sIGluY2x1ZGluZyBhbnkgZXJyb3IgcG9zc2libHkgb3V0cHV0IGJlZm9yZSB0aGlzCiskMDogbWVzc2FnZS4gVGhlbiBpbnN0YWxsIGEgbW9kZXJuIHNoZWxsLCBvciBtYW51YWxseSBydW4KKyQwOiB0aGUgc2NyaXB0IHVuZGVyIHN1Y2ggYSBzaGVsbCBpZiB5b3UgZG8gaGF2ZSBvbmUuIgorICBmaQorICBleGl0IDEKK2ZpCitmaQorZmkKK1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CitleHBvcnQgU0hFTEwKKyMgVW5zZXQgbW9yZSB2YXJpYWJsZXMga25vd24gdG8gaW50ZXJmZXJlIHdpdGggYmVoYXZpb3Igb2YgY29tbW9uIHRvb2xzLgorQ0xJQ09MT1JfRk9SQ0U9IEdSRVBfT1BUSU9OUz0KK3Vuc2V0IENMSUNPTE9SX0ZPUkNFIEdSRVBfT1BUSU9OUworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggU2hlbGwgRnVuY3Rpb25zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIGFzX2ZuX3Vuc2V0IFZBUgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgUG9ydGFibHkgdW5zZXQgVkFSLgorYXNfZm5fdW5zZXQgKCkKK3sKKyAgeyBldmFsICQxPTsgdW5zZXQgJDE7fQorfQorYXNfdW5zZXQ9YXNfZm5fdW5zZXQKKworIyBhc19mbl9zZXRfc3RhdHVzIFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgJD8gdG8gU1RBVFVTLCB3aXRob3V0IGZvcmtpbmcuCithc19mbl9zZXRfc3RhdHVzICgpCit7CisgIHJldHVybiAkMQorfSAjIGFzX2ZuX3NldF9zdGF0dXMKKworIyBhc19mbl9leGl0IFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBFeGl0IHRoZSBzaGVsbCB3aXRoIFNUQVRVUywgZXZlbiBpbiBhICJ0cmFwIDAiIG9yICJzZXQgLWUiIGNvbnRleHQuCithc19mbl9leGl0ICgpCit7CisgIHNldCArZQorICBhc19mbl9zZXRfc3RhdHVzICQxCisgIGV4aXQgJDEKK30gIyBhc19mbl9leGl0CisKKyMgYXNfZm5fbWtkaXJfcAorIyAtLS0tLS0tLS0tLS0tCisjIENyZWF0ZSAiJGFzX2RpciIgYXMgYSBkaXJlY3RvcnksIGluY2x1ZGluZyBwYXJlbnRzIGlmIG5lY2Vzc2FyeS4KK2FzX2ZuX21rZGlyX3AgKCkKK3sKKworICBjYXNlICRhc19kaXIgaW4gIygKKyAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OworICBlc2FjCisgIHRlc3QgLWQgIiRhc19kaXIiIHx8IGV2YWwgJGFzX21rZGlyX3AgfHwgeworICAgIGFzX2RpcnM9CisgICAgd2hpbGUgOjsgZG8KKyAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAorICAgICAgKlwnKikgYXNfcWRpcj1gJGFzX2VjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIycoCisgICAgICAqKSBhc19xZGlyPSRhc19kaXI7OworICAgICAgZXNhYworICAgICAgYXNfZGlycz0iJyRhc19xZGlyJyAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19kaXIiIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCisgICAgZG9uZQorICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKKyAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIKKworCit9ICMgYXNfZm5fbWtkaXJfcAorCisjIGFzX2ZuX2V4ZWN1dGFibGVfcCBGSUxFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QgaWYgRklMRSBpcyBhbiBleGVjdXRhYmxlIHJlZ3VsYXIgZmlsZS4KK2FzX2ZuX2V4ZWN1dGFibGVfcCAoKQoreworICB0ZXN0IC1mICIkMSIgJiYgdGVzdCAteCAiJDEiCit9ICMgYXNfZm5fZXhlY3V0YWJsZV9wCisjIGFzX2ZuX2FwcGVuZCBWQVIgVkFMVUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBlbmQgdGhlIHRleHQgaW4gVkFMVUUgdG8gdGhlIGVuZCBvZiB0aGUgZGVmaW5pdGlvbiBjb250YWluZWQgaW4gVkFSLiBUYWtlCisjIGFkdmFudGFnZSBvZiBhbnkgc2hlbGwgb3B0aW1pemF0aW9ucyB0aGF0IGFsbG93IGFtb3J0aXplZCBsaW5lYXIgZ3Jvd3RoIG92ZXIKKyMgcmVwZWF0ZWQgYXBwZW5kcywgaW5zdGVhZCBvZiB0aGUgdHlwaWNhbCBxdWFkcmF0aWMgZ3Jvd3RoIHByZXNlbnQgaW4gbmFpdmUKKyMgaW1wbGVtZW50YXRpb25zLgoraWYgKGV2YWwgImFzX3Zhcj0xOyBhc192YXIrPTI7IHRlc3QgeFwkYXNfdmFyID0geDEyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcHBlbmQgKCkKKyAgeworICAgIGV2YWwgJDErPVwkMgorICB9JworZWxzZQorICBhc19mbl9hcHBlbmQgKCkKKyAgeworICAgIGV2YWwgJDE9XCQkMVwkMgorICB9CitmaSAjIGFzX2ZuX2FwcGVuZAorCisjIGFzX2ZuX2FyaXRoIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgUGVyZm9ybSBhcml0aG1ldGljIGV2YWx1YXRpb24gb24gdGhlIEFSR3MsIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIHRoZQorIyBnbG9iYWwgJGFzX3ZhbC4gVGFrZSBhZHZhbnRhZ2Ugb2Ygc2hlbGxzIHRoYXQgY2FuIGF2b2lkIGZvcmtzLiBUaGUgYXJndW1lbnRzCisjIG11c3QgYmUgcG9ydGFibGUgYWNyb3NzICQoKCkpIGFuZCBleHByLgoraWYgKGV2YWwgInRlc3QgXCQoKCAxICsgMSApKSA9IDIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGV2YWwgJ2FzX2ZuX2FyaXRoICgpCisgIHsKKyAgICBhc192YWw9JCgoICQqICkpCisgIH0nCitlbHNlCisgIGFzX2ZuX2FyaXRoICgpCisgIHsKKyAgICBhc192YWw9YGV4cHIgIiRAIiB8fCB0ZXN0ICQ/IC1lcSAxYAorICB9CitmaSAjIGFzX2ZuX2FyaXRoCisKKworIyBhc19mbl9lcnJvciBTVEFUVVMgRVJST1IgW0xJTkVOTyBMT0dfRkRdCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0ICJgYmFzZW5hbWUgJDBgOiBlcnJvcjogRVJST1IiIHRvIHN0ZGVyci4gSWYgTElORU5PIGFuZCBMT0dfRkQgYXJlCisjIHByb3ZpZGVkLCBhbHNvIG91dHB1dCB0aGUgZXJyb3IgdG8gTE9HX0ZELCByZWZlcmVuY2luZyBMSU5FTk8uIFRoZW4gZXhpdCB0aGUKKyMgc2NyaXB0IHdpdGggU1RBVFVTLCB1c2luZyAxIGlmIHRoYXQgd2FzIDAuCithc19mbl9lcnJvciAoKQoreworICBhc19zdGF0dXM9JDE7IHRlc3QgJGFzX3N0YXR1cyAtZXEgMCAmJiBhc19zdGF0dXM9MQorICBpZiB0ZXN0ICIkNCI7IHRoZW4KKyAgICBhc19saW5lbm89JHthc19saW5lbm8tIiQzIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6ICQyIiA+JiQ0CisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiAkMiIgPiYyCisgIGFzX2ZuX2V4aXQgJGFzX3N0YXR1cworfSAjIGFzX2ZuX2Vycm9yCisKK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCisgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgogICBhc19leHByPWV4cHIKIGVsc2UKICAgYXNfZXhwcj1mYWxzZQogZmkKIAotaWYgKGJhc2VuYW1lIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC8gMj4mMWAiID0gIlgvIjsgdGhlbgoraWYgKGJhc2VuYW1lIC0tIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC0tIC8gMj4mMWAiID0gIlgvIjsgdGhlbgogICBhc19iYXNlbmFtZT1iYXNlbmFtZQogZWxzZQogICBhc19iYXNlbmFtZT1mYWxzZQogZmkKIAoraWYgKGFzX2Rpcj1gZGlybmFtZSAtLSAvYCAmJiB0ZXN0ICJYJGFzX2RpciIgPSBYLykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX2Rpcm5hbWU9ZGlybmFtZQorZWxzZQorICBhc19kaXJuYW1lPWZhbHNlCitmaQogCi0jIE5hbWUgb2YgdGhlIGV4ZWN1dGFibGUuCi1hc19tZT1gJGFzX2Jhc2VuYW1lICIkMCIgfHwKK2FzX21lPWAkYXNfYmFzZW5hbWUgLS0gIiQwIiB8fAogJGFzX2V4cHIgWC8iJDAiIDogJy4qL1woW14vXVteL10qXCkvKiQnIFx8IFwKIAkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkMCIgOiAnWFwoL1wpJCcgXHwgXAotCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKLWVjaG8gWC8iJDAiIHwKLSAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwvXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwvXChcL1wpLioveyBzLy9cMS87IHE7IH0KLSAgCSAgcy8uKi8uLzsgcSdgCisJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWC8iJDAiIHwKKyAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCiAKLQotIyBQQVRIIG5lZWRzIENSLCBhbmQgTElORU5PIG5lZWRzIENSIGFuZCBQQVRILgogIyBBdm9pZCBkZXBlbmRpbmcgdXBvbiBDaGFyYWN0ZXIgUmFuZ2VzLgogYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCiBhc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKQEAgLTgzLDIzNyArNDY0LDI4NiBAQAogYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JwogYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCiAKLSMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgotaWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KLSAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAotICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCi0gIGNobW9kICt4IGNvbmYkJC5zaAotICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgIFBBVEhfU0VQQVJBVE9SPSc7JwotICBlbHNlCi0gICAgUEFUSF9TRVBBUkFUT1I9OgotICBmaQotICBybSAtZiBjb25mJCQuc2gKLWZpCiAKLQotICBhc19saW5lbm9fMT0kTElORU5PCi0gIGFzX2xpbmVub18yPSRMSU5FTk8KLSAgYXNfbGluZW5vXzM9YChleHByICRhc19saW5lbm9fMSArIDEpIDI+L2Rldi9udWxsYAotICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKLSAgdGVzdCAieCRhc19saW5lbm9fMyIgID0gIngkYXNfbGluZW5vXzIiICB8fCB7Ci0gICMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIHBhdGggYXQgYWxsCi0gICMgcmVsYXRpdmUgb3Igbm90LgotICBjYXNlICQwIGluCi0gICAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OwotICAgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKLWRvbmUKLQotICAgICAgIDs7Ci0gIGVzYWMKLSAgIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJwotICAjIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KLSAgaWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgotICAgIGFzX215c2VsZj0kMAotICBmaQotICBpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCi0gICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgcGF0aCIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgZmkKLSAgY2FzZSAkQ09ORklHX1NIRUxMIGluCi0gICcnKQotICAgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gL2JpbiRQQVRIX1NFUEFSQVRPUi91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbwotCSBjYXNlICRhc19kaXIgaW4KLQkgLyopCi0JICAgaWYgKCIkYXNfZGlyLyRhc19iYXNlIiAtYyAnCi0gIGFzX2xpbmVub18xPSRMSU5FTk8KLSAgYXNfbGluZW5vXzI9JExJTkVOTwotICBhc19saW5lbm9fMz1gKGV4cHIgJGFzX2xpbmVub18xICsgMSkgMj4vZGV2L251bGxgCi0gIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgotICB0ZXN0ICJ4JGFzX2xpbmVub18zIiAgPSAieCRhc19saW5lbm9fMiIgJykgMj4vZGV2L251bGw7IHRoZW4KLQkgICAgICRhc191bnNldCBCQVNIX0VOViB8fCB0ZXN0ICIke0JBU0hfRU5WK3NldH0iICE9IHNldCB8fCB7IEJBU0hfRU5WPTsgZXhwb3J0IEJBU0hfRU5WOyB9Ci0JICAgICAkYXNfdW5zZXQgRU5WIHx8IHRlc3QgIiR7RU5WK3NldH0iICE9IHNldCB8fCB7IEVOVj07IGV4cG9ydCBFTlY7IH0KLQkgICAgIENPTkZJR19TSEVMTD0kYXNfZGlyLyRhc19iYXNlCi0JICAgICBleHBvcnQgQ09ORklHX1NIRUxMCi0JICAgICBleGVjICIkQ09ORklHX1NIRUxMIiAiJDAiICR7MSsiJEAifQotCSAgIGZpOzsKLQkgZXNhYwotICAgICAgIGRvbmUKLWRvbmUKLTs7Ci0gIGVzYWMKLQotICAjIENyZWF0ZSAkYXNfbWUubGluZW5vIGFzIGEgY29weSBvZiAkYXNfbXlzZWxmLCBidXQgd2l0aCAkTElORU5PCi0gICMgdW5pZm9ybWx5IHJlcGxhY2VkIGJ5IHRoZSBsaW5lIG51bWJlci4gIFRoZSBmaXJzdCAnc2VkJyBpbnNlcnRzIGEKLSAgIyBsaW5lLW51bWJlciBsaW5lIGJlZm9yZSBlYWNoIGxpbmU7IHRoZSBzZWNvbmQgJ3NlZCcgZG9lcyB0aGUgcmVhbAotICAjIHdvcmsuICBUaGUgc2Vjb25kIHNjcmlwdCB1c2VzICdOJyB0byBwYWlyIGVhY2ggbGluZS1udW1iZXIgbGluZQotICAjIHdpdGggdGhlIG51bWJlcmVkIGxpbmUsIGFuZCBhcHBlbmRzIHRyYWlsaW5nICctJyBkdXJpbmcKLSAgIyBzdWJzdGl0dXRpb24gc28gdGhhdCAkTElORU5PIGlzIG5vdCBhIHNwZWNpYWwgY2FzZSBhdCBsaW5lIGVuZC4KLSAgIyAoUmFqYSBSIEhhcmluYXRoIHN1Z2dlc3RlZCBzZWQgJz0nLCBhbmQgUGF1bCBFZ2dlcnQgd3JvdGUgdGhlCi0gICMgc2Vjb25kICdzZWQnIHNjcmlwdC4gIEJsYW1lIExlZSBFLiBNY01haG9uIGZvciBzZWQncyBzeW50YXguICA6LSkKLSAgc2VkICc9JyA8JGFzX215c2VsZiB8CisgIGFzX2xpbmVub18xPSRMSU5FTk8gYXNfbGluZW5vXzFhPSRMSU5FTk8KKyAgYXNfbGluZW5vXzI9JExJTkVOTyBhc19saW5lbm9fMmE9JExJTkVOTworICBldmFsICd0ZXN0ICJ4JGFzX2xpbmVub18xJyRhc19ydW4nIiAhPSAieCRhc19saW5lbm9fMickYXNfcnVuJyIgJiYKKyAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSckYXNfcnVuJyArIDFgIiA9ICJ4JGFzX2xpbmVub18yJyRhc19ydW4nIicgfHwgeworICAjIEJsYW1lIExlZSBFLiBNY01haG9uICgxOTMxLTE5ODkpIGZvciBzZWQncyBzeW50YXguICA6LSkKKyAgc2VkIC1uICcKKyAgICBwCisgICAgL1skXUxJTkVOTy89CisgICcgPCRhc19teXNlbGYgfAogICAgIHNlZCAnCisgICAgICBzL1skXUxJTkVOTy4qLyYtLworICAgICAgdCBsaW5lbm8KKyAgICAgIGIKKyAgICAgIDpsaW5lbm8KICAgICAgIE4KLSAgICAgIHMsJCwtLAotICAgICAgOiBsb29wCi0gICAgICBzLF5cKFsnJGFzX2NyX2RpZ2l0cyddKlwpXCguKlwpWyRdTElORU5PXChbXickYXNfY3JfYWxudW0nX11cKSxcMVwyXDFcMywKKyAgICAgIDpsb29wCisgICAgICBzL1skXUxJTkVOT1woW14nJGFzX2NyX2FsbnVtJ19dLipcblwpXCguKlwpL1wyXDFcMi8KICAgICAgIHQgbG9vcAotICAgICAgcywtJCwsCi0gICAgICBzLF5bJyRhc19jcl9kaWdpdHMnXSpcbiwsCisgICAgICBzLy1cbi4qLy8KICAgICAnID4kYXNfbWUubGluZW5vICYmCi0gIGNobW9kICt4ICRhc19tZS5saW5lbm8gfHwKLSAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICBjaG1vZCAreCAiJGFzX21lLmxpbmVubyIgfHwKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyOyBhc19mbl9leGl0IDE7IH0KIAorICAjIElmIHdlIGhhZCB0byByZS1leGVjdXRlIHdpdGggJENPTkZJR19TSEVMTCwgd2UncmUgZW5zdXJlZCB0byBoYXZlCisgICMgYWxyZWFkeSBkb25lIHRoYXQsIHNvIGVuc3VyZSB3ZSBkb24ndCB0cnkgdG8gZG8gc28gYWdhaW4gYW5kIGZhbGwKKyAgIyBpbiBhbiBpbmZpbml0ZSBsb29wLiAgVGhpcyBoYXMgYWxyZWFkeSBoYXBwZW5lZCBpbiBwcmFjdGljZS4KKyAgX2FzX2Nhbl9yZWV4ZWM9bm87IGV4cG9ydCBfYXNfY2FuX3JlZXhlYwogICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcwogICAjICh0aGUgZGlybmFtZSBvZiAkWzBdIGlzIG5vdCB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgZmluZCB0aGUKLSAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpYmxlIHRvIHRoaXMpLgotICAuIC4vJGFzX21lLmxpbmVubworICAjIG9yaWdpbmFsIGFuZCBzbyBvbi4gIEF1dG9jb25mIGlzIGVzcGVjaWFsbHkgc2Vuc2l0aXZlIHRvIHRoaXMpLgorICAuICIuLyRhc19tZS5saW5lbm8iCiAgICMgRXhpdCBzdGF0dXMgaXMgdGhhdCBvZiB0aGUgbGFzdCBjb21tYW5kLgogICBleGl0CiB9CiAKLQotY2FzZSBgZWNobyAidGVzdGluZ1xjIjsgZWNobyAxLDIsM2AsYGVjaG8gLW4gdGVzdGluZzsgZWNobyAxLDIsM2AgaW4KLSAgKmMqLC1uKikgRUNIT19OPSBFQ0hPX0M9JwotJyBFQ0hPX1Q9JwknIDs7Ci0gICpjKiwqICApIEVDSE9fTj0tbiBFQ0hPX0M9IEVDSE9fVD0gOzsKLSAgKikgICAgICAgRUNIT19OPSBFQ0hPX0M9J1xjJyBFQ0hPX1Q9IDs7CitFQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQorY2FzZSBgZWNobyAtbiB4YCBpbiAjKCgoKCgKKy1uKikKKyAgY2FzZSBgZWNobyAneHlcYydgIGluCisgICpjKikgRUNIT19UPScJJzs7CSMgRUNIT19UIGlzIHNpbmdsZSB0YWIgY2hhcmFjdGVyLgorICB4eSkgIEVDSE9fQz0nXGMnOzsKKyAgKikgICBlY2hvIGBlY2hvIGtzaDg4IGJ1ZyBvbiBBSVggNi4xYCA+IC9kZXYvbnVsbAorICAgICAgIEVDSE9fVD0nCSc7OworICBlc2FjOzsKKyopCisgIEVDSE9fTj0nLW4nOzsKIGVzYWMKIAotaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYXNfZXhwcj1leHByCi1lbHNlCi0gIGFzX2V4cHI9ZmFsc2UKLWZpCi0KIHJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCi1lY2hvID5jb25mJCQuZmlsZQotaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCi0gICMgV2UgY291bGQganVzdCBjaGVjayBmb3IgREpHUFA7IGJ1dCB0aGlzIHRlc3QgYSkgd29ya3MgYikgaXMgbW9yZSBnZW5lcmljCi0gICMgYW5kIGMpIHdpbGwgcmVtYWluIHZhbGlkIG9uY2UgREpHUFAgc3VwcG9ydHMgc3ltbGlua3MgKERKR1BQIDIuMDQpLgotICBpZiB0ZXN0IC1mIGNvbmYkJC5leGU7IHRoZW4KLSAgICAjIERvbid0IHVzZSBsbiBhdCBhbGw7IHdlIGRvbid0IGhhdmUgYW55IGxpbmtzCi0gICAgYXNfbG5fcz0nY3AgLXAnCi0gIGVsc2UKK2lmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgorICBybSAtZiBjb25mJCQuZGlyL2NvbmYkJC5maWxlCitlbHNlCisgIHJtIC1mIGNvbmYkJC5kaXIKKyAgbWtkaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorZmkKK2lmIChlY2hvID5jb25mJCQuZmlsZSkgMj4vZGV2L251bGw7IHRoZW4KKyAgaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCiAgICAgYXNfbG5fcz0nbG4gLXMnCisgICAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKKyAgICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgorICAgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgorICAgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcFInLgorICAgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKKyAgICAgIGFzX2xuX3M9J2NwIC1wUicKKyAgZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgICBhc19sbl9zPWxuCisgIGVsc2UKKyAgICBhc19sbl9zPSdjcCAtcFInCiAgIGZpCi1lbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgotICBhc19sbl9zPWxuCiBlbHNlCi0gIGFzX2xuX3M9J2NwIC1wJworICBhc19sbl9zPSdjcCAtcFInCiBmaQotcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUgY29uZiQkLmZpbGUKK3JtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKIAogaWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgotICBhc19ta2Rpcl9wPToKKyAgYXNfbWtkaXJfcD0nbWtkaXIgLXAgIiRhc19kaXIiJwogZWxzZQorICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAogICBhc19ta2Rpcl9wPWZhbHNlCiBmaQogCi1hc19leGVjdXRhYmxlX3A9InRlc3QgLWYiCithc190ZXN0X3g9J3Rlc3QgLXgnCithc19leGVjdXRhYmxlX3A9YXNfZm5fZXhlY3V0YWJsZV9wCiAKICMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KLWFzX3RyX2NwcD0ic2VkIHklKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyIKK2FzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCiAKICMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCB2YXJpYWJsZSBuYW1lLgotYXNfdHJfc2g9InNlZCB5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnIgorYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKIAogCi0jIElGUwotIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4KLWFzX25sPScKLScKLUlGUz0iIAkkYXNfbmwiCi0KLSMgQ0RQQVRILgotJGFzX3Vuc2V0IENEUEFUSAotCit0ZXN0IC1uICIkREpESVIiIHx8IGV4ZWMgNzwmMCA8L2Rldi9udWxsCitleGVjIDY+JjEKIAogIyBOYW1lIG9mIHRoZSBob3N0LgotIyBob3N0bmFtZSBvbiBzb21lIHN5c3RlbXMgKFNWUjMuMiwgTGludXgpIHJldHVybnMgYSBib2d1cyBleGl0IHN0YXR1cywKKyMgaG9zdG5hbWUgb24gc29tZSBzeXN0ZW1zIChTVlIzLjIsIG9sZCBHTlUvTGludXgpIHJldHVybnMgYSBib2d1cyBleGl0IHN0YXR1cywKICMgc28gdW5hbWUgZ2V0cyBydW4gdG9vLgogYWNfaG9zdG5hbWU9YChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCiAKLWV4ZWMgNj4mMQotCiAjCiAjIEluaXRpYWxpemF0aW9ucy4KICMKIGFjX2RlZmF1bHRfcHJlZml4PS91c3IvbG9jYWwKK2FjX2NsZWFuX2ZpbGVzPQogYWNfY29uZmlnX2xpYm9ial9kaXI9LgorTElCT0JKUz0KIGNyb3NzX2NvbXBpbGluZz1ubwogc3ViZGlycz0KIE1GTEFHUz0KIE1BS0VGTEFHUz0KLVNIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9Ci0KLSMgTWF4aW11bSBudW1iZXIgb2YgbGluZXMgdG8gcHV0IGluIGEgc2hlbGwgaGVyZSBkb2N1bWVudC4KLSMgVGhpcyB2YXJpYWJsZSBzZWVtcyBvYnNvbGV0ZS4gIEl0IHNob3VsZCBwcm9iYWJseSBiZSByZW1vdmVkLCBhbmQKLSMgb25seSBhY19tYXhfc2VkX2xpbmVzIHNob3VsZCBiZSB1c2VkLgotOiAke2FjX21heF9oZXJlX2xpbmVzPTM4fQogCiAjIElkZW50aXR5IG9mIHRoaXMgcGFja2FnZS4KLVBBQ0tBR0VfTkFNRT0KLVBBQ0tBR0VfVEFSTkFNRT0KLVBBQ0tBR0VfVkVSU0lPTj0KLVBBQ0tBR0VfU1RSSU5HPQotUEFDS0FHRV9CVUdSRVBPUlQ9CitQQUNLQUdFX05BTUU9J2xpYnNydHAyJworUEFDS0FHRV9UQVJOQU1FPSdsaWJzcnRwMicKK1BBQ0tBR0VfVkVSU0lPTj0nMi4zLjAtcHJlJworUEFDS0FHRV9TVFJJTkc9J2xpYnNydHAyIDIuMy4wLXByZScKK1BBQ0tBR0VfQlVHUkVQT1JUPSdodHRwczovL2dpdGh1Yi5jb20vY2lzY28vbGlic3J0cC9pc3N1ZXMnCitQQUNLQUdFX1VSTD0nJwogCi1hY191bmlxdWVfZmlsZT0ic3J0cCIKICMgRmFjdG9yaW5nIGRlZmF1bHQgaGVhZGVycyBmb3IgbW9zdCB0ZXN0cy4KIGFjX2luY2x1ZGVzX2RlZmF1bHQ9IlwKICNpbmNsdWRlIDxzdGRpby5oPgotI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICiAjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgogI2VuZGlmCi0jaWYgSEFWRV9TWVNfU1RBVF9ICisjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICiAjIGluY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjZW5kaWYKLSNpZiBTVERDX0hFQURFUlMKKyNpZmRlZiBTVERDX0hFQURFUlMKICMgaW5jbHVkZSA8c3RkbGliLmg+CiAjIGluY2x1ZGUgPHN0ZGRlZi5oPgogI2Vsc2UKLSMgaWYgSEFWRV9TVERMSUJfSAorIyBpZmRlZiBIQVZFX1NURExJQl9ICiAjICBpbmNsdWRlIDxzdGRsaWIuaD4KICMgZW5kaWYKICNlbmRpZgotI2lmIEhBVkVfU1RSSU5HX0gKLSMgaWYgIVNURENfSEVBREVSUyAmJiBIQVZFX01FTU9SWV9ICisjaWZkZWYgSEFWRV9TVFJJTkdfSAorIyBpZiAhZGVmaW5lZCBTVERDX0hFQURFUlMgJiYgZGVmaW5lZCBIQVZFX01FTU9SWV9ICiAjICBpbmNsdWRlIDxtZW1vcnkuaD4KICMgZW5kaWYKICMgaW5jbHVkZSA8c3RyaW5nLmg+CiAjZW5kaWYKLSNpZiBIQVZFX1NUUklOR1NfSAorI2lmZGVmIEhBVkVfU1RSSU5HU19ICiAjIGluY2x1ZGUgPHN0cmluZ3MuaD4KICNlbmRpZgotI2lmIEhBVkVfSU5UVFlQRVNfSAorI2lmZGVmIEhBVkVfSU5UVFlQRVNfSAogIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgotI2Vsc2UKLSMgaWYgSEFWRV9TVERJTlRfSAotIyAgaW5jbHVkZSA8c3RkaW50Lmg+Ci0jIGVuZGlmCiAjZW5kaWYKLSNpZiBIQVZFX1VOSVNURF9ICisjaWZkZWYgSEFWRV9TVERJTlRfSAorIyBpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKICMgaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYiCiAKLWFjX3N1YnN0X3ZhcnM9J1NIRUxMIFBBVEhfU0VQQVJBVE9SIFBBQ0tBR0VfTkFNRSBQQUNLQUdFX1RBUk5BTUUgUEFDS0FHRV9WRVJTSU9OIFBBQ0tBR0VfU1RSSU5HIFBBQ0tBR0VfQlVHUkVQT1JUIGV4ZWNfcHJlZml4IHByZWZpeCBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIGJpbmRpciBzYmluZGlyIGxpYmV4ZWNkaXIgZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgbGliZGlyIGluY2x1ZGVkaXIgb2xkaW5jbHVkZWRpciBpbmZvZGlyIG1hbmRpciBidWlsZF9hbGlhcyBob3N0X2FsaWFzIHRhcmdldF9hbGlhcyBERUZTIEVDSE9fQyBFQ0hPX04gRUNIT19UIExJQlMgUkFOTElCIGFjX2N0X1JBTkxJQiBDQyBDRkxBR1MgTERGTEFHUyBDUFBGTEFHUyBhY19jdF9DQyBFWEVFWFQgT0JKRVhUIFJOR19PQkpTIENQUCBFR1JFUCBMSUJPQkpTIGJ1aWxkIGJ1aWxkX2NwdSBidWlsZF92ZW5kb3IgYnVpbGRfb3MgaG9zdCBob3N0X2NwdSBob3N0X3ZlbmRvciBob3N0X29zIEVYRSBHRE9JX09CSlMgTFRMSUJPQkpTJworYWNfc3Vic3RfdmFycz0nTFRMSUJPQkpTCitMSUJPQkpTCitQQ0FQX0xJQgorSEFWRV9QQ0FQCitITUFDX09CSlMKK0FFU19JQ01fT0JKUworbnNzX0xJQlMKK25zc19DRkxBR1MKK0NSWVBUT19MSUJESVIKK1VTRV9FWFRFUk5BTF9DUllQVE8KK2NyeXB0b19MSUJTCitjcnlwdG9fQ0ZMQUdTCitQS0dfQ09ORklHX0xJQkRJUgorUEtHX0NPTkZJR19QQVRICitQS0dfQ09ORklHCitFWEUKK2hvc3Rfb3MKK2hvc3RfdmVuZG9yCitob3N0X2NwdQoraG9zdAorYnVpbGRfb3MKK2J1aWxkX3ZlbmRvcgorYnVpbGRfY3B1CitidWlsZAorRUdSRVAKK0dSRVAKK1NFRAorSU5TVEFMTF9EQVRBCitJTlNUQUxMX1NDUklQVAorSU5TVEFMTF9QUk9HUkFNCitSQU5MSUIKK2FjX2N0X0FSCitBUgorRVhUUkFfQ0ZMQUdTCithY19jdF9DWFgKK0NYWEZMQUdTCitDWFgKK0NQUAorT0JKRVhUCitFWEVFWFQKK2FjX2N0X0NDCitDUFBGTEFHUworTERGTEFHUworQ0ZMQUdTCitDQwordGFyZ2V0X2FsaWFzCitob3N0X2FsaWFzCitidWlsZF9hbGlhcworTElCUworRUNIT19UCitFQ0hPX04KK0VDSE9fQworREVGUworbWFuZGlyCitsb2NhbGVkaXIKK2xpYmRpcgorcHNkaXIKK3BkZmRpcgorZHZpZGlyCitodG1sZGlyCitpbmZvZGlyCitkb2NkaXIKK29sZGluY2x1ZGVkaXIKK2luY2x1ZGVkaXIKK3J1bnN0YXRlZGlyCitsb2NhbHN0YXRlZGlyCitzaGFyZWRzdGF0ZWRpcgorc3lzY29uZmRpcgorZGF0YWRpcgorZGF0YXJvb3RkaXIKK2xpYmV4ZWNkaXIKK3NiaW5kaXIKK2JpbmRpcgorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZQorcHJlZml4CitleGVjX3ByZWZpeAorUEFDS0FHRV9VUkwKK1BBQ0tBR0VfQlVHUkVQT1JUCitQQUNLQUdFX1NUUklORworUEFDS0FHRV9WRVJTSU9OCitQQUNLQUdFX1RBUk5BTUUKK1BBQ0tBR0VfTkFNRQorUEFUSF9TRVBBUkFUT1IKK1NIRUxMJwogYWNfc3Vic3RfZmlsZXM9JycKK2FjX3VzZXJfb3B0cz0nCitlbmFibGVfb3B0aW9uX2NoZWNraW5nCitlbmFibGVfZGVidWdfbG9nZ2luZworZW5hYmxlX29wZW5zc2wKK2VuYWJsZV9uc3MKK3dpdGhfb3BlbnNzbF9kaXIKK2VuYWJsZV9vcGVuc3NsX2tkZgord2l0aF9uc3NfZGlyCitlbmFibGVfbG9nX3N0ZG91dAord2l0aF9sb2dfZmlsZQorJworICAgICAgYWNfcHJlY2lvdXNfdmFycz0nYnVpbGRfYWxpYXMKK2hvc3RfYWxpYXMKK3RhcmdldF9hbGlhcworQ0MKK0NGTEFHUworTERGTEFHUworTElCUworQ1BQRkxBR1MKK0NQUAorQ1hYCitDWFhGTEFHUworQ0NDCitFWFRSQV9DRkxBR1MKK1BLR19DT05GSUcKK1BLR19DT05GSUdfUEFUSAorUEtHX0NPTkZJR19MSUJESVIKK2NyeXB0b19DRkxBR1MKK2NyeXB0b19MSUJTCituc3NfQ0ZMQUdTCituc3NfTElCUycKKwogCiAjIEluaXRpYWxpemUgc29tZSB2YXJpYWJsZXMgc2V0IGJ5IG9wdGlvbnMuCiBhY19pbml0X2hlbHA9CiBhY19pbml0X3ZlcnNpb249ZmFsc2UKK2FjX3VucmVjb2duaXplZF9vcHRzPQorYWNfdW5yZWNvZ25pemVkX3NlcD0KICMgVGhlIHZhcmlhYmxlcyBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIHRoZSBvcHRpb25zLCB3aXRoCiAjIGRhc2hlcyBjaGFuZ2VkIHRvIHVuZGVybGluZXMuCiBjYWNoZV9maWxlPS9kZXYvbnVsbApAQCAtMzM2LDM0ICs3NjYsNTAgQEAKICMgYW5kIGFsbCB0aGUgdmFyaWFibGVzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlIGJhc2VkIG9uIGV4ZWNfcHJlZml4CiAjIGJ5IGRlZmF1bHQgd2lsbCBhY3R1YWxseSBjaGFuZ2UuCiAjIFVzZSBicmFjZXMgaW5zdGVhZCBvZiBwYXJlbnMgYmVjYXVzZSBzaCwgcGVybCwgZXRjLiBhbHNvIGFjY2VwdCB0aGVtLgorIyAoVGhlIGxpc3QgZm9sbG93cyB0aGUgc2FtZSBvcmRlciBhcyB0aGUgR05VIENvZGluZyBTdGFuZGFyZHMuKQogYmluZGlyPScke2V4ZWNfcHJlZml4fS9iaW4nCiBzYmluZGlyPScke2V4ZWNfcHJlZml4fS9zYmluJwogbGliZXhlY2Rpcj0nJHtleGVjX3ByZWZpeH0vbGliZXhlYycKLWRhdGFkaXI9JyR7cHJlZml4fS9zaGFyZScKK2RhdGFyb290ZGlyPScke3ByZWZpeH0vc2hhcmUnCitkYXRhZGlyPScke2RhdGFyb290ZGlyfScKIHN5c2NvbmZkaXI9JyR7cHJlZml4fS9ldGMnCiBzaGFyZWRzdGF0ZWRpcj0nJHtwcmVmaXh9L2NvbScKIGxvY2Fsc3RhdGVkaXI9JyR7cHJlZml4fS92YXInCi1saWJkaXI9JyR7ZXhlY19wcmVmaXh9L2xpYicKK3J1bnN0YXRlZGlyPScke2xvY2Fsc3RhdGVkaXJ9L3J1bicKIGluY2x1ZGVkaXI9JyR7cHJlZml4fS9pbmNsdWRlJwogb2xkaW5jbHVkZWRpcj0nL3Vzci9pbmNsdWRlJwotaW5mb2Rpcj0nJHtwcmVmaXh9L2luZm8nCi1tYW5kaXI9JyR7cHJlZml4fS9tYW4nCitkb2NkaXI9JyR7ZGF0YXJvb3RkaXJ9L2RvYy8ke1BBQ0tBR0VfVEFSTkFNRX0nCitpbmZvZGlyPScke2RhdGFyb290ZGlyfS9pbmZvJworaHRtbGRpcj0nJHtkb2NkaXJ9JworZHZpZGlyPScke2RvY2Rpcn0nCitwZGZkaXI9JyR7ZG9jZGlyfScKK3BzZGlyPScke2RvY2Rpcn0nCitsaWJkaXI9JyR7ZXhlY19wcmVmaXh9L2xpYicKK2xvY2FsZWRpcj0nJHtkYXRhcm9vdGRpcn0vbG9jYWxlJworbWFuZGlyPScke2RhdGFyb290ZGlyfS9tYW4nCiAKIGFjX3ByZXY9CithY19kYXNoZGFzaD0KIGZvciBhY19vcHRpb24KIGRvCiAgICMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkcyBhbiBhcmd1bWVudCwgYXNzaWduIGl0LgogICBpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KLSAgICBldmFsICIkYWNfcHJldj1cJGFjX29wdGlvbiIKKyAgICBldmFsICRhY19wcmV2PVwkYWNfb3B0aW9uCiAgICAgYWNfcHJldj0KICAgICBjb250aW51ZQogICBmaQogCi0gIGFjX29wdGFyZz1gZXhwciAieCRhY19vcHRpb24iIDogJ3hbXj1dKj1cKC4qXCknYAorICBjYXNlICRhY19vcHRpb24gaW4KKyAgKj0/KikgYWNfb3B0YXJnPWBleHByICJYJGFjX29wdGlvbiIgOiAnW149XSo9XCguKlwpJ2AgOzsKKyAgKj0pICAgYWNfb3B0YXJnPSA7OworICAqKSAgICBhY19vcHRhcmc9eWVzIDs7CisgIGVzYWMKIAogICAjIEFjY2VwdCB0aGUgaW1wb3J0YW50IEN5Z251cyBjb25maWd1cmUgb3B0aW9ucywgc28gd2UgY2FuIGRpYWdub3NlIHR5cG9zLgogCi0gIGNhc2UgJGFjX29wdGlvbiBpbgorICBjYXNlICRhY19kYXNoZGFzaCRhY19vcHRpb24gaW4KKyAgLS0pCisgICAgYWNfZGFzaGRhc2g9eWVzIDs7CiAKICAgLWJpbmRpciB8IC0tYmluZGlyIHwgLS1iaW5kaSB8IC0tYmluZCB8IC0tYmluIHwgLS1iaSkKICAgICBhY19wcmV2PWJpbmRpciA7OwpAQCAtMzg1LDMzICs4MzEsNTkgQEAKICAgLS1jb25maWctY2FjaGUgfCAtQykKICAgICBjYWNoZV9maWxlPWNvbmZpZy5jYWNoZSA7OwogCi0gIC1kYXRhZGlyIHwgLS1kYXRhZGlyIHwgLS1kYXRhZGkgfCAtLWRhdGFkIHwgLS1kYXRhIHwgLS1kYXQgfCAtLWRhKQorICAtZGF0YWRpciB8IC0tZGF0YWRpciB8IC0tZGF0YWRpIHwgLS1kYXRhZCkKICAgICBhY19wcmV2PWRhdGFkaXIgOzsKLSAgLWRhdGFkaXI9KiB8IC0tZGF0YWRpcj0qIHwgLS1kYXRhZGk9KiB8IC0tZGF0YWQ9KiB8IC0tZGF0YT0qIHwgLS1kYXQ9KiBcCi0gIHwgLS1kYT0qKQorICAtZGF0YWRpcj0qIHwgLS1kYXRhZGlyPSogfCAtLWRhdGFkaT0qIHwgLS1kYXRhZD0qKQogICAgIGRhdGFkaXI9JGFjX29wdGFyZyA7OwogCisgIC1kYXRhcm9vdGRpciB8IC0tZGF0YXJvb3RkaXIgfCAtLWRhdGFyb290ZGkgfCAtLWRhdGFyb290ZCB8IC0tZGF0YXJvb3QgXAorICB8IC0tZGF0YXJvbyB8IC0tZGF0YXJvIHwgLS1kYXRhcikKKyAgICBhY19wcmV2PWRhdGFyb290ZGlyIDs7CisgIC1kYXRhcm9vdGRpcj0qIHwgLS1kYXRhcm9vdGRpcj0qIHwgLS1kYXRhcm9vdGRpPSogfCAtLWRhdGFyb290ZD0qIFwKKyAgfCAtLWRhdGFyb290PSogfCAtLWRhdGFyb289KiB8IC0tZGF0YXJvPSogfCAtLWRhdGFyPSopCisgICAgZGF0YXJvb3RkaXI9JGFjX29wdGFyZyA7OworCiAgIC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKikKLSAgICBhY19mZWF0dXJlPWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZGlzYWJsZS1cKC4qXCknYAorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSpkaXNhYmxlLVwoLipcKSdgCiAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgotICAgIGV4cHIgIngkYWNfZmVhdHVyZSIgOiAiLipbXi1fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgotICAgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX2ZlYXR1cmUiID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gICAgYWNfZmVhdHVyZT1gZWNobyAkYWNfZmVhdHVyZSB8IHNlZCAncy8tL18vZydgCi0gICAgZXZhbCAiZW5hYmxlXyRhY19mZWF0dXJlPW5vIiA7OworICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisiZW5hYmxlXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLWRpc2FibGUtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKyAgICBlc2FjCisgICAgZXZhbCBlbmFibGVfJGFjX3VzZXJvcHQ9bm8gOzsKKworICAtZG9jZGlyIHwgLS1kb2NkaXIgfCAtLWRvY2RpIHwgLS1kb2MgfCAtLWRvKQorICAgIGFjX3ByZXY9ZG9jZGlyIDs7CisgIC1kb2NkaXI9KiB8IC0tZG9jZGlyPSogfCAtLWRvY2RpPSogfCAtLWRvYz0qIHwgLS1kbz0qKQorICAgIGRvY2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWR2aWRpciB8IC0tZHZpZGlyIHwgLS1kdmlkaSB8IC0tZHZpZCB8IC0tZHZpIHwgLS1kdikKKyAgICBhY19wcmV2PWR2aWRpciA7OworICAtZHZpZGlyPSogfCAtLWR2aWRpcj0qIHwgLS1kdmlkaT0qIHwgLS1kdmlkPSogfCAtLWR2aT0qIHwgLS1kdj0qKQorICAgIGR2aWRpcj0kYWNfb3B0YXJnIDs7CiAKICAgLWVuYWJsZS0qIHwgLS1lbmFibGUtKikKLSAgICBhY19mZWF0dXJlPWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZW5hYmxlLVwoW149XSpcKSdgCisgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmVuYWJsZS1cKFtePV0qXCknYAogICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KLSAgICBleHByICJ4JGFjX2ZlYXR1cmUiIDogIi4qW14tXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY19mZWF0dXJlIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgIGFjX2ZlYXR1cmU9YGVjaG8gJGFjX2ZlYXR1cmUgfCBzZWQgJ3MvLS9fL2cnYAotICAgIGNhc2UgJGFjX29wdGlvbiBpbgotICAgICAgKj0qKSBhY19vcHRhcmc9YGVjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsKLSAgICAgICopIGFjX29wdGFyZz15ZXMgOzsKKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfdXNlcm9wdCIKKyAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisgICAgICAqIgorImVuYWJsZV8kYWNfdXNlcm9wdCIKKyIqKSA7OworICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS1lbmFibGUtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKICAgICBlc2FjCi0gICAgZXZhbCAiZW5hYmxlXyRhY19mZWF0dXJlPSckYWNfb3B0YXJnJyIgOzsKKyAgICBldmFsIGVuYWJsZV8kYWNfdXNlcm9wdD1cJGFjX29wdGFyZyA7OwogCiAgIC1leGVjLXByZWZpeCB8IC0tZXhlY19wcmVmaXggfCAtLWV4ZWMtcHJlZml4IHwgLS1leGVjLXByZWZpIFwKICAgfCAtLWV4ZWMtcHJlZiB8IC0tZXhlYy1wcmUgfCAtLWV4ZWMtcHIgfCAtLWV4ZWMtcCB8IC0tZXhlYy0gXApAQCAtNDM4LDYgKzkxMCwxMiBAQAogICAtaG9zdD0qIHwgLS1ob3N0PSogfCAtLWhvcz0qIHwgLS1obz0qKQogICAgIGhvc3RfYWxpYXM9JGFjX29wdGFyZyA7OwogCisgIC1odG1sZGlyIHwgLS1odG1sZGlyIHwgLS1odG1sZGkgfCAtLWh0bWxkIHwgLS1odG1sIHwgLS1odG0gfCAtLWh0KQorICAgIGFjX3ByZXY9aHRtbGRpciA7OworICAtaHRtbGRpcj0qIHwgLS1odG1sZGlyPSogfCAtLWh0bWxkaT0qIHwgLS1odG1sZD0qIHwgLS1odG1sPSogfCAtLWh0bT0qIFwKKyAgfCAtLWh0PSopCisgICAgaHRtbGRpcj0kYWNfb3B0YXJnIDs7CisKICAgLWluY2x1ZGVkaXIgfCAtLWluY2x1ZGVkaXIgfCAtLWluY2x1ZGVkaSB8IC0taW5jbHVkZWQgfCAtLWluY2x1ZGUgXAogICB8IC0taW5jbHVkIHwgLS1pbmNsdSB8IC0taW5jbCB8IC0taW5jKQogICAgIGFjX3ByZXY9aW5jbHVkZWRpciA7OwpAQCAtNDYyLDEzICs5NDAsMTYgQEAKICAgfCAtLWxpYmV4ZT0qIHwgLS1saWJleD0qIHwgLS1saWJlPSopCiAgICAgbGliZXhlY2Rpcj0kYWNfb3B0YXJnIDs7CiAKKyAgLWxvY2FsZWRpciB8IC0tbG9jYWxlZGlyIHwgLS1sb2NhbGVkaSB8IC0tbG9jYWxlZCB8IC0tbG9jYWxlKQorICAgIGFjX3ByZXY9bG9jYWxlZGlyIDs7CisgIC1sb2NhbGVkaXI9KiB8IC0tbG9jYWxlZGlyPSogfCAtLWxvY2FsZWRpPSogfCAtLWxvY2FsZWQ9KiB8IC0tbG9jYWxlPSopCisgICAgbG9jYWxlZGlyPSRhY19vcHRhcmcgOzsKKwogICAtbG9jYWxzdGF0ZWRpciB8IC0tbG9jYWxzdGF0ZWRpciB8IC0tbG9jYWxzdGF0ZWRpIHwgLS1sb2NhbHN0YXRlZCBcCi0gIHwgLS1sb2NhbHN0YXRlIHwgLS1sb2NhbHN0YXQgfCAtLWxvY2Fsc3RhIHwgLS1sb2NhbHN0IFwKLSAgfCAtLWxvY2FscyB8IC0tbG9jYWwgfCAtLWxvY2EgfCAtLWxvYyB8IC0tbG8pCisgIHwgLS1sb2NhbHN0YXRlIHwgLS1sb2NhbHN0YXQgfCAtLWxvY2Fsc3RhIHwgLS1sb2NhbHN0IHwgLS1sb2NhbHMpCiAgICAgYWNfcHJldj1sb2NhbHN0YXRlZGlyIDs7CiAgIC1sb2NhbHN0YXRlZGlyPSogfCAtLWxvY2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpPSogfCAtLWxvY2Fsc3RhdGVkPSogXAotICB8IC0tbG9jYWxzdGF0ZT0qIHwgLS1sb2NhbHN0YXQ9KiB8IC0tbG9jYWxzdGE9KiB8IC0tbG9jYWxzdD0qIFwKLSAgfCAtLWxvY2Fscz0qIHwgLS1sb2NhbD0qIHwgLS1sb2NhPSogfCAtLWxvYz0qIHwgLS1sbz0qKQorICB8IC0tbG9jYWxzdGF0ZT0qIHwgLS1sb2NhbHN0YXQ9KiB8IC0tbG9jYWxzdGE9KiB8IC0tbG9jYWxzdD0qIHwgLS1sb2NhbHM9KikKICAgICBsb2NhbHN0YXRlZGlyPSRhY19vcHRhcmcgOzsKIAogICAtbWFuZGlyIHwgLS1tYW5kaXIgfCAtLW1hbmRpIHwgLS1tYW5kIHwgLS1tYW4gfCAtLW1hIHwgLS1tKQpAQCAtNTMzLDEwICsxMDE0LDI5IEBACiAgIHwgLS1wcm9nci10cmE9KiB8IC0tcHJvZ3JhbS10cj0qIHwgLS1wcm9ncmFtLXQ9KikKICAgICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSRhY19vcHRhcmcgOzsKIAorICAtcGRmZGlyIHwgLS1wZGZkaXIgfCAtLXBkZmRpIHwgLS1wZGZkIHwgLS1wZGYgfCAtLXBkKQorICAgIGFjX3ByZXY9cGRmZGlyIDs7CisgIC1wZGZkaXI9KiB8IC0tcGRmZGlyPSogfCAtLXBkZmRpPSogfCAtLXBkZmQ9KiB8IC0tcGRmPSogfCAtLXBkPSopCisgICAgcGRmZGlyPSRhY19vcHRhcmcgOzsKKworICAtcHNkaXIgfCAtLXBzZGlyIHwgLS1wc2RpIHwgLS1wc2QgfCAtLXBzKQorICAgIGFjX3ByZXY9cHNkaXIgOzsKKyAgLXBzZGlyPSogfCAtLXBzZGlyPSogfCAtLXBzZGk9KiB8IC0tcHNkPSogfCAtLXBzPSopCisgICAgcHNkaXI9JGFjX29wdGFyZyA7OworCiAgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCiAgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQogICAgIHNpbGVudD15ZXMgOzsKIAorICAtcnVuc3RhdGVkaXIgfCAtLXJ1bnN0YXRlZGlyIHwgLS1ydW5zdGF0ZWRpIHwgLS1ydW5zdGF0ZWQgXAorICB8IC0tcnVuc3RhdGUgfCAtLXJ1bnN0YXQgfCAtLXJ1bnN0YSB8IC0tcnVuc3QgfCAtLXJ1bnMgXAorICB8IC0tcnVuIHwgLS1ydSB8IC0tcikKKyAgICBhY19wcmV2PXJ1bnN0YXRlZGlyIDs7CisgIC1ydW5zdGF0ZWRpcj0qIHwgLS1ydW5zdGF0ZWRpcj0qIHwgLS1ydW5zdGF0ZWRpPSogfCAtLXJ1bnN0YXRlZD0qIFwKKyAgfCAtLXJ1bnN0YXRlPSogfCAtLXJ1bnN0YXQ9KiB8IC0tcnVuc3RhPSogfCAtLXJ1bnN0PSogfCAtLXJ1bnM9KiBcCisgIHwgLS1ydW49KiB8IC0tcnU9KiB8IC0tcj0qKQorICAgIHJ1bnN0YXRlZGlyPSRhY19vcHRhcmcgOzsKKwogICAtc2JpbmRpciB8IC0tc2JpbmRpciB8IC0tc2JpbmRpIHwgLS1zYmluZCB8IC0tc2JpbiB8IC0tc2JpIHwgLS1zYikKICAgICBhY19wcmV2PXNiaW5kaXIgOzsKICAgLXNiaW5kaXI9KiB8IC0tc2JpbmRpcj0qIHwgLS1zYmluZGk9KiB8IC0tc2JpbmQ9KiB8IC0tc2Jpbj0qIFwKQEAgLTU4MywyNiArMTA4MywzNiBAQAogICAgIGFjX2luaXRfdmVyc2lvbj06IDs7CiAKICAgLXdpdGgtKiB8IC0td2l0aC0qKQotICAgIGFjX3BhY2thZ2U9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRoLVwoW149XSpcKSdgCisgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGgtXChbXj1dKlwpJ2AKICAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCi0gICAgZXhwciAieCRhY19wYWNrYWdlIiA6ICIuKlteLV8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfcGFja2FnZSIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICBhY19wYWNrYWdlPWBlY2hvICRhY19wYWNrYWdlfCBzZWQgJ3MvLS9fL2cnYAotICAgIGNhc2UgJGFjX29wdGlvbiBpbgotICAgICAgKj0qKSBhY19vcHRhcmc9YGVjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsKLSAgICAgICopIGFjX29wdGFyZz15ZXMgOzsKKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfdXNlcm9wdCIKKyAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisgICAgICAqIgorIndpdGhfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0td2l0aC0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OwogICAgIGVzYWMKLSAgICBldmFsICJ3aXRoXyRhY19wYWNrYWdlPSckYWNfb3B0YXJnJyIgOzsKKyAgICBldmFsIHdpdGhfJGFjX3VzZXJvcHQ9XCRhY19vcHRhcmcgOzsKIAogICAtd2l0aG91dC0qIHwgLS13aXRob3V0LSopCi0gICAgYWNfcGFja2FnZT1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGhvdXQtXCguKlwpJ2AKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aG91dC1cKC4qXCknYAogICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KLSAgICBleHByICJ4JGFjX3BhY2thZ2UiIDogIi4qW14tXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY19wYWNrYWdlIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX3BhY2thZ2UgfCBzZWQgJ3MvLS9fL2cnYAotICAgIGV2YWwgIndpdGhfJGFjX3BhY2thZ2U9bm8iIDs7CisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHBhY2thZ2UgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisgICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAorICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorICAgICAgKiIKKyJ3aXRoXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLXdpdGhvdXQtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKyAgICBlc2FjCisgICAgZXZhbCB3aXRoXyRhY191c2Vyb3B0PW5vIDs7CiAKICAgLS14KQogICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGgteC4KQEAgLTYyMiwyNyArMTEzMiwyNiBAQAogICB8IC0teC1saWJyYXI9KiB8IC0teC1saWJyYT0qIHwgLS14LWxpYnI9KiB8IC0teC1saWI9KiB8IC0teC1saT0qIHwgLS14LWw9KikKICAgICB4X2xpYnJhcmllcz0kYWNfb3B0YXJnIDs7CiAKLSAgLSopIHsgZWNobyAiJGFzX21lOiBlcnJvcjogdW5yZWNvZ25pemVkIG9wdGlvbjogJGFjX29wdGlvbgotVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIC0qKSBhc19mbl9lcnJvciAkPyAidW5yZWNvZ25pemVkIG9wdGlvbjogXGAkYWNfb3B0aW9uJworVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKICAgICA7OwogCiAgICo9KikKICAgICBhY19lbnZ2YXI9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4XChbXj1dKlwpPSdgCiAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgotICAgIGV4cHIgIngkYWNfZW52dmFyIiA6ICIuKlteXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB2YXJpYWJsZSBuYW1lOiAkYWNfZW52dmFyIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgIGFjX29wdGFyZz1gZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAKLSAgICBldmFsICIkYWNfZW52dmFyPSckYWNfb3B0YXJnJyIKKyAgICBjYXNlICRhY19lbnZ2YXIgaW4gIygKKyAgICAgICcnIHwgWzAtOV0qIHwgKlshXyRhc19jcl9hbG51bV0qICkKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhcmlhYmxlIG5hbWU6IFxgJGFjX2VudnZhciciIDs7CisgICAgZXNhYworICAgIGV2YWwgJGFjX2VudnZhcj1cJGFjX29wdGFyZwogICAgIGV4cG9ydCAkYWNfZW52dmFyIDs7CiAKICAgKikKICAgICAjIEZJWE1FOiBzaG91bGQgYmUgcmVtb3ZlZCBpbiBhdXRvY29uZiAzLjAuCi0gICAgZWNobyAiJGFzX21lOiBXQVJOSU5HOiB5b3Ugc2hvdWxkIHVzZSAtLWJ1aWxkLCAtLWhvc3QsIC0tdGFyZ2V0IiA+JjIKKyAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB5b3Ugc2hvdWxkIHVzZSAtLWJ1aWxkLCAtLWhvc3QsIC0tdGFyZ2V0IiA+JjIKICAgICBleHByICJ4JGFjX29wdGlvbiIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogaW52YWxpZCBob3N0IHR5cGU6ICRhY19vcHRpb24iID4mMgotICAgIDogJHtidWlsZF9hbGlhcz0kYWNfb3B0aW9ufSAke2hvc3RfYWxpYXM9JGFjX29wdGlvbn0gJHt0YXJnZXRfYWxpYXM9JGFjX29wdGlvbn0KKyAgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGludmFsaWQgaG9zdCB0eXBlOiAkYWNfb3B0aW9uIiA+JjIKKyAgICA6ICIke2J1aWxkX2FsaWFzPSRhY19vcHRpb259ICR7aG9zdF9hbGlhcz0kYWNfb3B0aW9ufSAke3RhcmdldF9hbGlhcz0kYWNfb3B0aW9ufSIKICAgICA7OwogCiAgIGVzYWMKQEAgLTY1MCwzMSArMTE1OSwzNiBAQAogCiBpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KICAgYWNfb3B0aW9uPS0tYGVjaG8gJGFjX3ByZXYgfCBzZWQgJ3MvXy8tL2cnYAotICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IG1pc3NpbmcgYXJndW1lbnQgdG8gJGFjX29wdGlvbiIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgYXNfZm5fZXJyb3IgJD8gIm1pc3NpbmcgYXJndW1lbnQgdG8gJGFjX29wdGlvbiIKIGZpCiAKLSMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIHBhdGhzLgotZm9yIGFjX3ZhciBpbiBleGVjX3ByZWZpeCBwcmVmaXgKLWRvCi0gIGV2YWwgYWNfdmFsPSRgZWNobyAkYWNfdmFyYAotICBjYXNlICRhY192YWwgaW4KLSAgICBbXFwvJF0qIHwgPzpbXFwvXSogfCBOT05FIHwgJycgKSA7OwotICAgICopICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGV4cGVjdGVkIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIGZvciAtLSRhY192YXI6ICRhY192YWwiID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKK2lmIHRlc3QgLW4gIiRhY191bnJlY29nbml6ZWRfb3B0cyI7IHRoZW4KKyAgY2FzZSAkZW5hYmxlX29wdGlvbl9jaGVja2luZyBpbgorICAgIG5vKSA7OworICAgIGZhdGFsKSBhc19mbl9lcnJvciAkPyAidW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgOzsKKyAgICAqKSAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiYyIDs7CiAgIGVzYWMKLWRvbmUKK2ZpCiAKLSMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIHBhdGhzLgotZm9yIGFjX3ZhciBpbiBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFkaXIgc3lzY29uZmRpciBzaGFyZWRzdGF0ZWRpciBcCi0gICAgICAgICAgICAgIGxvY2Fsc3RhdGVkaXIgbGliZGlyIGluY2x1ZGVkaXIgb2xkaW5jbHVkZWRpciBpbmZvZGlyIG1hbmRpcgorIyBDaGVjayBhbGwgZGlyZWN0b3J5IGFyZ3VtZW50cyBmb3IgY29uc2lzdGVuY3kuCitmb3IgYWNfdmFyIGluCWV4ZWNfcHJlZml4IHByZWZpeCBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFyb290ZGlyIFwKKwkJZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgaW5jbHVkZWRpciBcCisJCW9sZGluY2x1ZGVkaXIgZG9jZGlyIGluZm9kaXIgaHRtbGRpciBkdmlkaXIgcGRmZGlyIHBzZGlyIFwKKwkJbGliZGlyIGxvY2FsZWRpciBtYW5kaXIgcnVuc3RhdGVkaXIKIGRvCi0gIGV2YWwgYWNfdmFsPSRgZWNobyAkYWNfdmFyYAorICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgIyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hlcy4KICAgY2FzZSAkYWNfdmFsIGluCi0gICAgW1xcLyRdKiB8ID86W1xcL10qICkgOzsKLSAgICAqKSAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBleHBlY3RlZCBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBmb3IgLS0kYWNfdmFyOiAkYWNfdmFsIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisgICAgKi8gKQorICAgICAgYWNfdmFsPWBleHByICJYJGFjX3ZhbCIgOiAnWFwoLipbXi9dXCknIFx8ICJYJGFjX3ZhbCIgOiAnWFwoLipcKSdgCisgICAgICBldmFsICRhY192YXI9XCRhY192YWw7OwogICBlc2FjCisgICMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lcy4KKyAgY2FzZSAkYWNfdmFsIGluCisgICAgW1xcLyRdKiB8ID86W1xcL10qICkgIGNvbnRpbnVlOzsKKyAgICBOT05FIHwgJycgKSBjYXNlICRhY192YXIgaW4gKnByZWZpeCApIGNvbnRpbnVlOzsgZXNhYzs7CisgIGVzYWMKKyAgYXNfZm5fZXJyb3IgJD8gImV4cGVjdGVkIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIGZvciAtLSRhY192YXI6ICRhY192YWwiCiBkb25lCiAKICMgVGhlcmUgbWlnaHQgYmUgcGVvcGxlIHdobyBkZXBlbmQgb24gdGhlIG9sZCBicm9rZW4gYmVoYXZpb3I6IGAkaG9zdCcKQEAgLTY4OCw4ICsxMjAyLDYgQEAKIGlmIHRlc3QgIngkaG9zdF9hbGlhcyIgIT0geDsgdGhlbgogICBpZiB0ZXN0ICJ4JGJ1aWxkX2FsaWFzIiA9IHg7IHRoZW4KICAgICBjcm9zc19jb21waWxpbmc9bWF5YmUKLSAgICBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IElmIHlvdSB3YW50ZWQgdG8gc2V0IHRoZSAtLWJ1aWxkIHR5cGUsIGRvbid0IHVzZSAtLWhvc3QuCi0gICAgSWYgYSBjcm9zcyBjb21waWxlciBpcyBkZXRlY3RlZCB0aGVuIGNyb3NzIGNvbXBpbGUgbW9kZSB3aWxsIGJlIHVzZWQuIiA+JjIKICAgZWxpZiB0ZXN0ICJ4JGJ1aWxkX2FsaWFzIiAhPSAieCRob3N0X2FsaWFzIjsgdGhlbgogICAgIGNyb3NzX2NvbXBpbGluZz15ZXMKICAgZmkKQEAgLTcwMSw3NCArMTIxMyw3MiBAQAogdGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYgZXhlYyA2Pi9kZXYvbnVsbAogCiAKK2FjX3B3ZD1gcHdkYCAmJiB0ZXN0IC1uICIkYWNfcHdkIiAmJgorYWNfbHNfZGk9YGxzIC1kaSAuYCAmJgorYWNfcHdkX2xzX2RpPWBjZCAiJGFjX3B3ZCIgJiYgbHMgLWRpIC5gIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJ3b3JraW5nIGRpcmVjdG9yeSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCIKK3Rlc3QgIlgkYWNfbHNfZGkiID0gIlgkYWNfcHdkX2xzX2RpIiB8fAorICBhc19mbl9lcnJvciAkPyAicHdkIGRvZXMgbm90IHJlcG9ydCBuYW1lIG9mIHdvcmtpbmcgZGlyZWN0b3J5IgorCisKICMgRmluZCB0aGUgc291cmNlIGZpbGVzLCBpZiBsb2NhdGlvbiB3YXMgbm90IHNwZWNpZmllZC4KIGlmIHRlc3QgLXogIiRzcmNkaXIiOyB0aGVuCiAgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9eWVzCi0gICMgVHJ5IHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGlzIHNjcmlwdCwgdGhlbiBpdHMgcGFyZW50LgotICBhY19jb25mZGlyPWAoZGlybmFtZSAiJDAiKSAyPi9kZXYvbnVsbCB8fAotJGFzX2V4cHIgWCIkMCIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLSAgICAgICAgIFgiJDAiIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0gICAgICAgICBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAotICAgICAgICAgWCIkMCIgOiAnWFwoL1wpJyBcfCBcCi0gICAgICAgICAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKLWVjaG8gWCIkMCIgfAotICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KLSAgCSAgcy8uKi8uLzsgcSdgCisgICMgVHJ5IHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGlzIHNjcmlwdCwgdGhlbiB0aGUgcGFyZW50IGRpcmVjdG9yeS4KKyAgYWNfY29uZmRpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19teXNlbGYiIHx8CiskYXNfZXhwciBYIiRhc19teXNlbGYiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX215c2VsZiIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfbXlzZWxmIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19teXNlbGYiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkYXNfbXlzZWxmIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKICAgc3JjZGlyPSRhY19jb25mZGlyCi0gIGlmIHRlc3QgISAtciAkc3JjZGlyLyRhY191bmlxdWVfZmlsZTsgdGhlbgorICBpZiB0ZXN0ICEgLXIgIiRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlIjsgdGhlbgogICAgIHNyY2Rpcj0uLgogICBmaQogZWxzZQogICBhY19zcmNkaXJfZGVmYXVsdGVkPW5vCiBmaQotaWYgdGVzdCAhIC1yICRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlOyB0aGVuCi0gIGlmIHRlc3QgIiRhY19zcmNkaXJfZGVmYXVsdGVkIiA9IHllczsgdGhlbgotICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgc291cmNlcyAoJGFjX3VuaXF1ZV9maWxlKSBpbiAkYWNfY29uZmRpciBvciAuLiIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgZWxzZQotICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgc291cmNlcyAoJGFjX3VuaXF1ZV9maWxlKSBpbiAkc3JjZGlyIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICBmaQoraWYgdGVzdCAhIC1yICIkc3JjZGlyLyRhY191bmlxdWVfZmlsZSI7IHRoZW4KKyAgdGVzdCAiJGFjX3NyY2Rpcl9kZWZhdWx0ZWQiID0geWVzICYmIHNyY2Rpcj0iJGFjX2NvbmZkaXIgb3IgLi4iCisgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgZmluZCBzb3VyY2VzICgkYWNfdW5pcXVlX2ZpbGUpIGluICRzcmNkaXIiCiBmaQotKGNkICRzcmNkaXIgJiYgdGVzdCAtciAuLyRhY191bmlxdWVfZmlsZSkgMj4vZGV2L251bGwgfHwKLSAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBzb3VyY2VzIGFyZSBpbiAkc3JjZGlyLCBidXQgXGBjZCAkc3JjZGlyJyBkb2VzIG5vdCB3b3JrIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotc3JjZGlyPWBlY2hvICIkc3JjZGlyIiB8IHNlZCAncyVcKFteXFwvXVwpW1xcL10qJCVcMSUnYAotYWNfZW52X2J1aWxkX2FsaWFzX3NldD0ke2J1aWxkX2FsaWFzK3NldH0KLWFjX2Vudl9idWlsZF9hbGlhc192YWx1ZT0kYnVpbGRfYWxpYXMKLWFjX2N2X2Vudl9idWlsZF9hbGlhc19zZXQ9JHtidWlsZF9hbGlhcytzZXR9Ci1hY19jdl9lbnZfYnVpbGRfYWxpYXNfdmFsdWU9JGJ1aWxkX2FsaWFzCi1hY19lbnZfaG9zdF9hbGlhc19zZXQ9JHtob3N0X2FsaWFzK3NldH0KLWFjX2Vudl9ob3N0X2FsaWFzX3ZhbHVlPSRob3N0X2FsaWFzCi1hY19jdl9lbnZfaG9zdF9hbGlhc19zZXQ9JHtob3N0X2FsaWFzK3NldH0KLWFjX2N2X2Vudl9ob3N0X2FsaWFzX3ZhbHVlPSRob3N0X2FsaWFzCi1hY19lbnZfdGFyZ2V0X2FsaWFzX3NldD0ke3RhcmdldF9hbGlhcytzZXR9Ci1hY19lbnZfdGFyZ2V0X2FsaWFzX3ZhbHVlPSR0YXJnZXRfYWxpYXMKLWFjX2N2X2Vudl90YXJnZXRfYWxpYXNfc2V0PSR7dGFyZ2V0X2FsaWFzK3NldH0KLWFjX2N2X2Vudl90YXJnZXRfYWxpYXNfdmFsdWU9JHRhcmdldF9hbGlhcwotYWNfZW52X0NDX3NldD0ke0NDK3NldH0KLWFjX2Vudl9DQ192YWx1ZT0kQ0MKLWFjX2N2X2Vudl9DQ19zZXQ9JHtDQytzZXR9Ci1hY19jdl9lbnZfQ0NfdmFsdWU9JENDCi1hY19lbnZfQ0ZMQUdTX3NldD0ke0NGTEFHUytzZXR9Ci1hY19lbnZfQ0ZMQUdTX3ZhbHVlPSRDRkxBR1MKLWFjX2N2X2Vudl9DRkxBR1Nfc2V0PSR7Q0ZMQUdTK3NldH0KLWFjX2N2X2Vudl9DRkxBR1NfdmFsdWU9JENGTEFHUwotYWNfZW52X0xERkxBR1Nfc2V0PSR7TERGTEFHUytzZXR9Ci1hY19lbnZfTERGTEFHU192YWx1ZT0kTERGTEFHUwotYWNfY3ZfZW52X0xERkxBR1Nfc2V0PSR7TERGTEFHUytzZXR9Ci1hY19jdl9lbnZfTERGTEFHU192YWx1ZT0kTERGTEFHUwotYWNfZW52X0NQUEZMQUdTX3NldD0ke0NQUEZMQUdTK3NldH0KLWFjX2Vudl9DUFBGTEFHU192YWx1ZT0kQ1BQRkxBR1MKLWFjX2N2X2Vudl9DUFBGTEFHU19zZXQ9JHtDUFBGTEFHUytzZXR9Ci1hY19jdl9lbnZfQ1BQRkxBR1NfdmFsdWU9JENQUEZMQUdTCi1hY19lbnZfQ1BQX3NldD0ke0NQUCtzZXR9Ci1hY19lbnZfQ1BQX3ZhbHVlPSRDUFAKLWFjX2N2X2Vudl9DUFBfc2V0PSR7Q1BQK3NldH0KLWFjX2N2X2Vudl9DUFBfdmFsdWU9JENQUAorYWNfbXNnPSJzb3VyY2VzIGFyZSBpbiAkc3JjZGlyLCBidXQgXGBjZCAkc3JjZGlyJyBkb2VzIG5vdCB3b3JrIgorYWNfYWJzX2NvbmZkaXI9YCgKKwljZCAiJHNyY2RpciIgJiYgdGVzdCAtciAiLi8kYWNfdW5pcXVlX2ZpbGUiIHx8IGFzX2ZuX2Vycm9yICQ/ICIkYWNfbXNnIgorCXB3ZClgCisjIFdoZW4gYnVpbGRpbmcgaW4gcGxhY2UsIHNldCBzcmNkaXI9LgoraWYgdGVzdCAiJGFjX2Fic19jb25mZGlyIiA9ICIkYWNfcHdkIjsgdGhlbgorICBzcmNkaXI9LgorZmkKKyMgUmVtb3ZlIHVubmVjZXNzYXJ5IHRyYWlsaW5nIHNsYXNoZXMgZnJvbSBzcmNkaXIuCisjIERvdWJsZSBzbGFzaGVzIGluIGZpbGUgbmFtZXMgaW4gb2JqZWN0IGZpbGUgZGVidWdnaW5nIGluZm8KKyMgbWVzcyB1cCBNLXggZ2RiIGluIEVtYWNzLgorY2FzZSAkc3JjZGlyIGluCisqLykgc3JjZGlyPWBleHByICJYJHNyY2RpciIgOiAnWFwoLipbXi9dXCknIFx8ICJYJHNyY2RpciIgOiAnWFwoLipcKSdgOzsKK2VzYWMKK2ZvciBhY192YXIgaW4gJGFjX3ByZWNpb3VzX3ZhcnM7IGRvCisgIGV2YWwgYWNfZW52XyR7YWNfdmFyfV9zZXQ9XCR7JHthY192YXJ9K3NldH0KKyAgZXZhbCBhY19lbnZfJHthY192YXJ9X3ZhbHVlPVwkJHthY192YXJ9CisgIGV2YWwgYWNfY3ZfZW52XyR7YWNfdmFyfV9zZXQ9XCR7JHthY192YXJ9K3NldH0KKyAgZXZhbCBhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlPVwkJHthY192YXJ9Citkb25lCiAKICMKICMgUmVwb3J0IHRoZSAtLWhlbHAgbWVzc2FnZS4KQEAgLTc3Nyw3ICsxMjg3LDcgQEAKICAgIyBPbWl0IHNvbWUgaW50ZXJuYWwgb3Igb2Jzb2xldGUgb3B0aW9ucyB0byBtYWtlIHRoZSBsaXN0IGxlc3MgaW1wb3NpbmcuCiAgICMgVGhpcyBtZXNzYWdlIGlzIHRvbyBsb25nIHRvIGJlIGEgc3RyaW5nIGluIHRoZSBBL1VYIDMuMSBzaC4KICAgY2F0IDw8X0FDRU9GCi1cYGNvbmZpZ3VyZScgY29uZmlndXJlcyB0aGlzIHBhY2thZ2UgdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgorXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgbGlic3J0cDIgMi4zLjAtcHJlIHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KIAogVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtWQVI9VkFMVUVdLi4uCiAKQEAgLTc5MSwxNSArMTMwMSwxMiBAQAogICAgICAgLS1oZWxwPXNob3J0ICAgICAgICBkaXNwbGF5IG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhpcyBwYWNrYWdlCiAgICAgICAtLWhlbHA9cmVjdXJzaXZlICAgIGRpc3BsYXkgdGhlIHNob3J0IGhlbHAgb2YgYWxsIHRoZSBpbmNsdWRlZCBwYWNrYWdlcwogICAtViwgLS12ZXJzaW9uICAgICAgICAgICBkaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKLSAgLXEsIC0tcXVpZXQsIC0tc2lsZW50ICAgZG8gbm90IHByaW50IFxgY2hlY2tpbmcuLi4nIG1lc3NhZ2VzCisgIC1xLCAtLXF1aWV0LCAtLXNpbGVudCAgIGRvIG5vdCBwcmludCBcYGNoZWNraW5nIC4uLicgbWVzc2FnZXMKICAgICAgIC0tY2FjaGUtZmlsZT1GSUxFICAgY2FjaGUgdGVzdCByZXN1bHRzIGluIEZJTEUgW2Rpc2FibGVkXQogICAtQywgLS1jb25maWctY2FjaGUgICAgICBhbGlhcyBmb3IgXGAtLWNhY2hlLWZpbGU9Y29uZmlnLmNhY2hlJwogICAtbiwgLS1uby1jcmVhdGUgICAgICAgICBkbyBub3QgY3JlYXRlIG91dHB1dCBmaWxlcwogICAgICAgLS1zcmNkaXI9RElSICAgICAgICBmaW5kIHRoZSBzb3VyY2VzIGluIERJUiBbY29uZmlndXJlIGRpciBvciBcYC4uJ10KIAotX0FDRU9GCi0KLSAgY2F0IDw8X0FDRU9GCiBJbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6CiAgIC0tcHJlZml4PVBSRUZJWCAgICAgICAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzIGluIFBSRUZJWAogICAgICAgICAgICAgICAgICAgICAgICAgICBbJGFjX2RlZmF1bHRfcHJlZml4XQpAQCAtODE0LDE4ICsxMzIxLDI2IEBACiBGb3IgYmV0dGVyIGNvbnRyb2wsIHVzZSB0aGUgb3B0aW9ucyBiZWxvdy4KIAogRmluZSB0dW5pbmcgb2YgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKLSAgLS1iaW5kaXI9RElSICAgICAgICAgICB1c2VyIGV4ZWN1dGFibGVzIFtFUFJFRklYL2Jpbl0KLSAgLS1zYmluZGlyPURJUiAgICAgICAgICBzeXN0ZW0gYWRtaW4gZXhlY3V0YWJsZXMgW0VQUkVGSVgvc2Jpbl0KLSAgLS1saWJleGVjZGlyPURJUiAgICAgICBwcm9ncmFtIGV4ZWN1dGFibGVzIFtFUFJFRklYL2xpYmV4ZWNdCi0gIC0tZGF0YWRpcj1ESVIgICAgICAgICAgcmVhZC1vbmx5IGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtQUkVGSVgvc2hhcmVdCi0gIC0tc3lzY29uZmRpcj1ESVIgICAgICAgcmVhZC1vbmx5IHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC9ldGNdCi0gIC0tc2hhcmVkc3RhdGVkaXI9RElSICAgbW9kaWZpYWJsZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbUFJFRklYL2NvbV0KLSAgLS1sb2NhbHN0YXRlZGlyPURJUiAgICBtb2RpZmlhYmxlIHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC92YXJdCi0gIC0tbGliZGlyPURJUiAgICAgICAgICAgb2JqZWN0IGNvZGUgbGlicmFyaWVzIFtFUFJFRklYL2xpYl0KLSAgLS1pbmNsdWRlZGlyPURJUiAgICAgICBDIGhlYWRlciBmaWxlcyBbUFJFRklYL2luY2x1ZGVdCi0gIC0tb2xkaW5jbHVkZWRpcj1ESVIgICAgQyBoZWFkZXIgZmlsZXMgZm9yIG5vbi1nY2MgWy91c3IvaW5jbHVkZV0KLSAgLS1pbmZvZGlyPURJUiAgICAgICAgICBpbmZvIGRvY3VtZW50YXRpb24gW1BSRUZJWC9pbmZvXQotICAtLW1hbmRpcj1ESVIgICAgICAgICAgIG1hbiBkb2N1bWVudGF0aW9uIFtQUkVGSVgvbWFuXQorICAtLWJpbmRpcj1ESVIgICAgICAgICAgICB1c2VyIGV4ZWN1dGFibGVzIFtFUFJFRklYL2Jpbl0KKyAgLS1zYmluZGlyPURJUiAgICAgICAgICAgc3lzdGVtIGFkbWluIGV4ZWN1dGFibGVzIFtFUFJFRklYL3NiaW5dCisgIC0tbGliZXhlY2Rpcj1ESVIgICAgICAgIHByb2dyYW0gZXhlY3V0YWJsZXMgW0VQUkVGSVgvbGliZXhlY10KKyAgLS1zeXNjb25mZGlyPURJUiAgICAgICAgcmVhZC1vbmx5IHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC9ldGNdCisgIC0tc2hhcmVkc3RhdGVkaXI9RElSICAgIG1vZGlmaWFibGUgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW1BSRUZJWC9jb21dCisgIC0tbG9jYWxzdGF0ZWRpcj1ESVIgICAgIG1vZGlmaWFibGUgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL3Zhcl0KKyAgLS1ydW5zdGF0ZWRpcj1ESVIgICAgICAgbW9kaWZpYWJsZSBwZXItcHJvY2VzcyBkYXRhIFtMT0NBTFNUQVRFRElSL3J1bl0KKyAgLS1saWJkaXI9RElSICAgICAgICAgICAgb2JqZWN0IGNvZGUgbGlicmFyaWVzIFtFUFJFRklYL2xpYl0KKyAgLS1pbmNsdWRlZGlyPURJUiAgICAgICAgQyBoZWFkZXIgZmlsZXMgW1BSRUZJWC9pbmNsdWRlXQorICAtLW9sZGluY2x1ZGVkaXI9RElSICAgICBDIGhlYWRlciBmaWxlcyBmb3Igbm9uLWdjYyBbL3Vzci9pbmNsdWRlXQorICAtLWRhdGFyb290ZGlyPURJUiAgICAgICByZWFkLW9ubHkgYXJjaC4taW5kZXBlbmRlbnQgZGF0YSByb290IFtQUkVGSVgvc2hhcmVdCisgIC0tZGF0YWRpcj1ESVIgICAgICAgICAgIHJlYWQtb25seSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVJdCisgIC0taW5mb2Rpcj1ESVIgICAgICAgICAgIGluZm8gZG9jdW1lbnRhdGlvbiBbREFUQVJPT1RESVIvaW5mb10KKyAgLS1sb2NhbGVkaXI9RElSICAgICAgICAgbG9jYWxlLWRlcGVuZGVudCBkYXRhIFtEQVRBUk9PVERJUi9sb2NhbGVdCisgIC0tbWFuZGlyPURJUiAgICAgICAgICAgIG1hbiBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9tYW5dCisgIC0tZG9jZGlyPURJUiAgICAgICAgICAgIGRvY3VtZW50YXRpb24gcm9vdCBbREFUQVJPT1RESVIvZG9jL2xpYnNydHAyXQorICAtLWh0bWxkaXI9RElSICAgICAgICAgICBodG1sIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKyAgLS1kdmlkaXI9RElSICAgICAgICAgICAgZHZpIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKyAgLS1wZGZkaXI9RElSICAgICAgICAgICAgcGRmIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKyAgLS1wc2Rpcj1ESVIgICAgICAgICAgICAgcHMgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQogX0FDRU9GCiAKICAgY2F0IDw8XF9BQ0VPRgpAQCAtODM3LDExMiArMTM1Miw2NzkgQEAKIGZpCiAKIGlmIHRlc3QgLW4gIiRhY19pbml0X2hlbHAiOyB0aGVuCi0KKyAgY2FzZSAkYWNfaW5pdF9oZWxwIGluCisgICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBsaWJzcnRwMiAyLjMuMC1wcmU6Ijs7CisgICBlc2FjCiAgIGNhdCA8PFxfQUNFT0YKIAogT3B0aW9uYWwgRmVhdHVyZXM6CisgIC0tZGlzYWJsZS1vcHRpb24tY2hlY2tpbmcgIGlnbm9yZSB1bnJlY29nbml6ZWQgLS1lbmFibGUvLS13aXRoIG9wdGlvbnMKICAgLS1kaXNhYmxlLUZFQVRVUkUgICAgICAgZG8gbm90IGluY2x1ZGUgRkVBVFVSRSAoc2FtZSBhcyAtLWVuYWJsZS1GRUFUVVJFPW5vKQogICAtLWVuYWJsZS1GRUFUVVJFWz1BUkddICBpbmNsdWRlIEZFQVRVUkUgW0FSRz15ZXNdCi1kZWJ1ZyAoY29tcGlsZSBpbiBkeW5hbWljIGRlYnVnZ2luZyBzeXN0ZW0pCi1nZW5lcmljLWFlc2ljbSAoY29tcGlsZSBpbiBjaGFuZ2VzIGZvciBpc21hY3J5cCkKLXN5c2xvZyAodXNlIHN5c2xvZyBmb3IgZXJyb3IgcmVwb3J0aW5nKQotc3Rkb3V0ICh1c2Ugc3Rkb3V0IGZvciBlcnJvciByZXBvcnRpbmcpCi1jb25zb2xlICh1c2UgL2Rldi9jb25zb2xlIGZvciBlcnJvciByZXBvcnRpbmcpCi1nZG9pIChHRE9JIGtleSBtYW5hZ2VtZW50KQorICAtLWVuYWJsZS1kZWJ1Zy1sb2dnaW5nICBFbmFibGUgZGVidWcgbG9nZ2luZyBpbiBhbGwgbW9kdWxlcworICAtLWVuYWJsZS1vcGVuc3NsICAgICAgICBjb21waWxlIGluIE9wZW5TU0wgY3J5cHRvIGVuZ2luZQorICAtLWVuYWJsZS1uc3MgICAgICAgICAgICBjb21waWxlIGluIE5TUyBjcnlwdG8gZW5naW5lCisgIC0tZW5hYmxlLW9wZW5zc2wta2RmICAgIFVzZSBPcGVuU1NMIEtERiBhbGdvcml0aG0KKyAgLS1lbmFibGUtbG9nLXN0ZG91dCAgICAgcmVkaXJlY3RpbmcgbG9nZ2luZyB0byBzdGRvdXQKKworT3B0aW9uYWwgUGFja2FnZXM6CisgIC0td2l0aC1QQUNLQUdFWz1BUkddICAgIHVzZSBQQUNLQUdFIFtBUkc9eWVzXQorICAtLXdpdGhvdXQtUEFDS0FHRSAgICAgICBkbyBub3QgdXNlIFBBQ0tBR0UgKHNhbWUgYXMgLS13aXRoLVBBQ0tBR0U9bm8pCisgIC0td2l0aC1vcGVuc3NsLWRpciAgICAgIExvY2F0aW9uIG9mIE9wZW5TU0wgaW5zdGFsbGF0aW9uCisgIC0td2l0aC1uc3MtZGlyICAgICAgICAgIExvY2F0aW9uIG9mIE5TUyBpbnN0YWxsYXRpb24KKyAgLS13aXRoLWxvZy1maWxlICAgICAgICAgVXNlIGZpbGUgZm9yIGxvZ2dpbmcKIAogU29tZSBpbmZsdWVudGlhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CiAgIENDICAgICAgICAgIEMgY29tcGlsZXIgY29tbWFuZAogICBDRkxBR1MgICAgICBDIGNvbXBpbGVyIGZsYWdzCiAgIExERkxBR1MgICAgIGxpbmtlciBmbGFncywgZS5nLiAtTDxsaWIgZGlyPiBpZiB5b3UgaGF2ZSBsaWJyYXJpZXMgaW4gYQogICAgICAgICAgICAgICBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGxpYiBkaXI+Ci0gIENQUEZMQUdTICAgIEMvQysrIHByZXByb2Nlc3NvciBmbGFncywgZS5nLiAtSTxpbmNsdWRlIGRpcj4gaWYgeW91IGhhdmUKLSAgICAgICAgICAgICAgaGVhZGVycyBpbiBhIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8aW5jbHVkZSBkaXI+CisgIExJQlMgICAgICAgIGxpYnJhcmllcyB0byBwYXNzIHRvIHRoZSBsaW5rZXIsIGUuZy4gLWw8bGlicmFyeT4KKyAgQ1BQRkxBR1MgICAgKE9iamVjdGl2ZSkgQy9DKysgcHJlcHJvY2Vzc29yIGZsYWdzLCBlLmcuIC1JPGluY2x1ZGUgZGlyPiBpZgorICAgICAgICAgICAgICB5b3UgaGF2ZSBoZWFkZXJzIGluIGEgbm9uc3RhbmRhcmQgZGlyZWN0b3J5IDxpbmNsdWRlIGRpcj4KICAgQ1BQICAgICAgICAgQyBwcmVwcm9jZXNzb3IKKyAgQ1hYICAgICAgICAgQysrIGNvbXBpbGVyIGNvbW1hbmQKKyAgQ1hYRkxBR1MgICAgQysrIGNvbXBpbGVyIGZsYWdzCisgIEVYVFJBX0NGTEFHUworICAgICAgICAgICAgICBDIGNvbXBpbGVyIGZsYWdzIGFwcGVuZGVkIHRvIHRoZSByZWd1bGFyIEMgY29tcGlsZXIgZmxhZ3MKKyAgICAgICAgICAgICAgaW5zdGVhZCBvZiBvdmVycmlkaW5nIHRoZW0KKyAgUEtHX0NPTkZJRyAgcGF0aCB0byBwa2ctY29uZmlnIHV0aWxpdHkKKyAgUEtHX0NPTkZJR19QQVRICisgICAgICAgICAgICAgIGRpcmVjdG9yaWVzIHRvIGFkZCB0byBwa2ctY29uZmlnJ3Mgc2VhcmNoIHBhdGgKKyAgUEtHX0NPTkZJR19MSUJESVIKKyAgICAgICAgICAgICAgcGF0aCBvdmVycmlkaW5nIHBrZy1jb25maWcncyBidWlsdC1pbiBzZWFyY2ggcGF0aAorICBjcnlwdG9fQ0ZMQUdTCisgICAgICAgICAgICAgIEMgY29tcGlsZXIgZmxhZ3MgZm9yIGNyeXB0bywgb3ZlcnJpZGluZyBwa2ctY29uZmlnCisgIGNyeXB0b19MSUJTIGxpbmtlciBmbGFncyBmb3IgY3J5cHRvLCBvdmVycmlkaW5nIHBrZy1jb25maWcKKyAgbnNzX0NGTEFHUyAgQyBjb21waWxlciBmbGFncyBmb3IgbnNzLCBvdmVycmlkaW5nIHBrZy1jb25maWcKKyAgbnNzX0xJQlMgICAgbGlua2VyIGZsYWdzIGZvciBuc3MsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwogCiBVc2UgdGhlc2UgdmFyaWFibGVzIHRvIG92ZXJyaWRlIHRoZSBjaG9pY2VzIG1hZGUgYnkgYGNvbmZpZ3VyZScgb3IgdG8gaGVscAogaXQgdG8gZmluZCBsaWJyYXJpZXMgYW5kIHByb2dyYW1zIHdpdGggbm9uc3RhbmRhcmQgbmFtZXMvbG9jYXRpb25zLgogCitSZXBvcnQgYnVncyB0byA8aHR0cHM6Ly9naXRodWIuY29tL2Npc2NvL2xpYnNydHAvaXNzdWVzPi4KIF9BQ0VPRgorYWNfc3RhdHVzPSQ/CiBmaQogCiBpZiB0ZXN0ICIkYWNfaW5pdF9oZWxwIiA9ICJyZWN1cnNpdmUiOyB0aGVuCiAgICMgSWYgdGhlcmUgYXJlIHN1YmRpcnMsIHJlcG9ydCB0aGVpciBzcGVjaWZpYyAtLWhlbHAuCi0gIGFjX3BvcGRpcj1gcHdkYAogICBmb3IgYWNfZGlyIGluIDogJGFjX3N1YmRpcnNfYWxsOyBkbyB0ZXN0ICJ4JGFjX2RpciIgPSB4OiAmJiBjb250aW51ZQotICAgIHRlc3QgLWQgJGFjX2RpciB8fCBjb250aW51ZQorICAgIHRlc3QgLWQgIiRhY19kaXIiIHx8CisgICAgICB7IGNkICIkc3JjZGlyIiAmJiBhY19wd2Q9YHB3ZGAgJiYgc3JjZGlyPS4gJiYgdGVzdCAtZCAiJGFjX2RpciI7IH0gfHwKKyAgICAgIGNvbnRpbnVlCiAgICAgYWNfYnVpbGRkaXI9LgogCi1pZiB0ZXN0ICIkYWNfZGlyIiAhPSAuOyB0aGVuCi0gIGFjX2Rpcl9zdWZmaXg9L2BlY2hvICIkYWNfZGlyIiB8IHNlZCAncyxeXC5bXFwvXSwsJ2AKLSAgIyBBICIuLi8iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KLSAgYWNfdG9wX2J1aWxkZGlyPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3MsL1teXFwvXSosLi4vLGcnYAotZWxzZQotICBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXI9Ci1maQorY2FzZSAiJGFjX2RpciIgaW4KKy4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworKikKKyAgYWNfZGlyX3N1ZmZpeD0vYCRhc19lY2hvICIkYWNfZGlyIiB8IHNlZCAnc3xeXC5bXFwvXXx8J2AKKyAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorICBhY190b3BfYnVpbGRkaXJfc3ViPWAkYXNfZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzfC9bXlxcL10qfC8uLnxnO3N8L3x8J2AKKyAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgorICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisgICopICBhY190b3BfYnVpbGRfcHJlZml4PSRhY190b3BfYnVpbGRkaXJfc3ViLyA7OworICBlc2FjIDs7Citlc2FjCithY19hYnNfdG9wX2J1aWxkZGlyPSRhY19wd2QKK2FjX2Fic19idWlsZGRpcj0kYWNfcHdkJGFjX2Rpcl9zdWZmaXgKKyMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6CithY190b3BfYnVpbGRkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgKIAogY2FzZSAkc3JjZGlyIGluCi0gIC4pICAjIE5vIC0tc3JjZGlyIG9wdGlvbi4gIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KKyAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgogICAgIGFjX3NyY2Rpcj0uCi0gICAgaWYgdGVzdCAteiAiJGFjX3RvcF9idWlsZGRpciI7IHRoZW4KLSAgICAgICBhY190b3Bfc3JjZGlyPS4KLSAgICBlbHNlCi0gICAgICAgYWNfdG9wX3NyY2Rpcj1gZWNobyAkYWNfdG9wX2J1aWxkZGlyIHwgc2VkICdzLC8kLCwnYAotICAgIGZpIDs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgcGF0aC4KKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZCA7OworICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIG5hbWUuCiAgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKLSAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKLSAgKikgIyBSZWxhdGl2ZSBwYXRoLgotICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciRhY19kaXJfc3VmZml4Ci0gICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciA7OworICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKyAgKikgIyBSZWxhdGl2ZSBuYW1lLgorICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIkYWNfZGlyX3N1ZmZpeAorICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZC8kc3JjZGlyIDs7CiBlc2FjCi0jIERvbid0IGJsaW5kbHkgcGVyZm9ybSBhIGBjZCAiJGFjX2RpciIvJGFjX2ZvbyAmJiBwd2RgIHNpbmNlICRhY19mb28gY2FuIGJlCi0jIGFic29sdXRlLgotYWNfYWJzX2J1aWxkZGlyPWBjZCAiJGFjX2RpciIgJiYgY2QgJGFjX2J1aWxkZGlyICYmIHB3ZGAKLWFjX2Fic190b3BfYnVpbGRkaXI9YGNkICIkYWNfZGlyIiAmJiBjZCAke2FjX3RvcF9idWlsZGRpcn0uICYmIHB3ZGAKLWFjX2Fic19zcmNkaXI9YGNkICIkYWNfZGlyIiAmJiBjZCAkYWNfc3JjZGlyICYmIHB3ZGAKLWFjX2Fic190b3Bfc3JjZGlyPWBjZCAiJGFjX2RpciIgJiYgY2QgJGFjX3RvcF9zcmNkaXIgJiYgcHdkYAorYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX3RvcF9zcmNkaXIkYWNfZGlyX3N1ZmZpeAogCi0gICAgY2QgJGFjX2RpcgotICAgICMgQ2hlY2sgZm9yIGd1ZXN0ZWQgY29uZmlndXJlOyBvdGhlcndpc2UgZ2V0IEN5Z251cyBzdHlsZSBjb25maWd1cmUuCi0gICAgaWYgdGVzdCAtZiAkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnU7IHRoZW4KLSAgICAgIGVjaG8KLSAgICAgICRTSEVMTCAkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUgIC0taGVscD1yZWN1cnNpdmUKLSAgICBlbGlmIHRlc3QgLWYgJGFjX3NyY2Rpci9jb25maWd1cmU7IHRoZW4KLSAgICAgIGVjaG8KLSAgICAgICRTSEVMTCAkYWNfc3JjZGlyL2NvbmZpZ3VyZSAgLS1oZWxwPXJlY3Vyc2l2ZQotICAgIGVsaWYgdGVzdCAtZiAkYWNfc3JjZGlyL2NvbmZpZ3VyZS5hYyB8fAotICAgICAgICAgICB0ZXN0IC1mICRhY19zcmNkaXIvY29uZmlndXJlLmluOyB0aGVuCi0gICAgICBlY2hvCi0gICAgICAkYWNfY29uZmlndXJlIC0taGVscAorICAgIGNkICIkYWNfZGlyIiB8fCB7IGFjX3N0YXR1cz0kPzsgY29udGludWU7IH0KKyAgICAjIENoZWNrIGZvciBndWVzdGVkIGNvbmZpZ3VyZS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUiOyB0aGVuCisgICAgICBlY2hvICYmCisgICAgICAkU0hFTEwgIiRhY19zcmNkaXIvY29uZmlndXJlLmdudSIgLS1oZWxwPXJlY3Vyc2l2ZQorICAgIGVsaWYgdGVzdCAtZiAiJGFjX3NyY2Rpci9jb25maWd1cmUiOyB0aGVuCisgICAgICBlY2hvICYmCisgICAgICAkU0hFTEwgIiRhY19zcmNkaXIvY29uZmlndXJlIiAtLWhlbHA9cmVjdXJzaXZlCiAgICAgZWxzZQotICAgICAgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBubyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGlzIGluICRhY19kaXIiID4mMgotICAgIGZpCi0gICAgY2QgJGFjX3BvcGRpcgorICAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogbm8gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBpbiAkYWNfZGlyIiA+JjIKKyAgICBmaSB8fCBhY19zdGF0dXM9JD8KKyAgICBjZCAiJGFjX3B3ZCIgfHwgeyBhY19zdGF0dXM9JD87IGJyZWFrOyB9CiAgIGRvbmUKIGZpCiAKLXRlc3QgLW4gIiRhY19pbml0X2hlbHAiICYmIGV4aXQgMAordGVzdCAtbiAiJGFjX2luaXRfaGVscCIgJiYgZXhpdCAkYWNfc3RhdHVzCiBpZiAkYWNfaW5pdF92ZXJzaW9uOyB0aGVuCiAgIGNhdCA8PFxfQUNFT0YKK2xpYnNydHAyIGNvbmZpZ3VyZSAyLjMuMC1wcmUKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OQogCi1Db3B5cmlnaHQgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMgotRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitDb3B5cmlnaHQgKEMpIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiBUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgogX0FDRU9GCi0gIGV4aXQgMAorICBleGl0CiBmaQotZXhlYyA1PmNvbmZpZy5sb2cKLWNhdCA+JjUgPDxfQUNFT0YKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBBdXRvY29uZiBpbml0aWFsaXphdGlvbi4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBjb21waWxlIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2NfdHJ5X2NvbXBpbGUgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgIGlmIHsgeyBhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfcmV0dmFsPTEKK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfdHJ5X2NvbXBpbGUKKworIyBhY19mbl9jX3RyeV9jcHAgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIHByZXByb2Nlc3MgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY190cnlfY3BwICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSA+IGNvbmZ0ZXN0LmkgJiYgeworCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICAgYWNfcmV0dmFsPTEKK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfdHJ5X2NwcAorCisjIGFjX2ZuX2N4eF90cnlfY29tcGlsZSBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gY29tcGlsZSBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jeHhfdHJ5X2NvbXBpbGUgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgIGlmIHsgeyBhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19yZXR2YWw9MQorZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY3h4X3RyeV9jb21waWxlCisKKyMgYWNfZm5fY190cnlfcnVuIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBsaW5rIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4gQXNzdW1lcworIyB0aGF0IGV4ZWN1dGFibGVzICpjYW4qIGJlIHJ1bi4KK2FjX2ZuX2NfdHJ5X3J1biAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIGlmIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CisgICAgICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgICAgICBhY19yZXR2YWw9JGFjX3N0YXR1cworZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0gY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbworICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9ydW4KKworIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlIExJTkVOTyBIRUFERVIgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBIRUFERVIgZXhpc3RzIGFuZCBjYW4gYmUgY29tcGlsZWQgdXNpbmcgdGhlIGluY2x1ZGUgZmlsZXMgaW4KKyMgSU5DTFVERVMsIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseS4KK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAorI2luY2x1ZGUgPCQyPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiQzPXllcyIKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworCit9ICMgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZQorCisjIGFjX2ZuX2NfY2hlY2tfdHlwZSBMSU5FTk8gVFlQRSBWQVIgSU5DTFVERVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIFRZUEUgZXhpc3RzIGFmdGVyIGhhdmluZyBpbmNsdWRlZCBJTkNMVURFUywgc2V0dGluZyBjYWNoZQorIyB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX3R5cGUgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBldmFsICIkMz1ubyIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworaWYgKHNpemVvZiAoJDIpKQorCSByZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitpZiAoc2l6ZW9mICgoJDIpKSkKKwkgICAgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICBldmFsICIkMz15ZXMiCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworCit9ICMgYWNfZm5fY19jaGVja190eXBlCisKKyMgYWNfZm5fY19jb21wdXRlX2ludCBMSU5FTk8gRVhQUiBWQVIgSU5DTFVERVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJpZXMgdG8gZmluZCB0aGUgY29tcGlsZS10aW1lIHZhbHVlIG9mIEVYUFIgaW4gYSBwcm9ncmFtIHRoYXQgaW5jbHVkZXMKKyMgSU5DTFVERVMsIHNldHRpbmcgVkFSIGFjY29yZGluZ2x5LiBSZXR1cm5zIHdoZXRoZXIgdGhlIHZhbHVlIGNvdWxkIGJlCisjIGNvbXB1dGVkCithY19mbl9jX2NvbXB1dGVfaW50ICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgICAjIERlcGVuZGluZyB1cG9uIHRoZSBzaXplLCBjb21wdXRlIHRoZSBsbyBhbmQgaGkgYm91bmRzLgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCQyKSA+PSAwKV07Cit0ZXN0X2FycmF5IFswXSA9IDA7CityZXR1cm4gdGVzdF9hcnJheSBbMF07CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19sbz0wIGFjX21pZD0wCisgIHdoaWxlIDo7IGRvCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCQyKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDA7CityZXR1cm4gdGVzdF9hcnJheSBbMF07CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oaT0kYWNfbWlkOyBicmVhaworZWxzZQorICBhc19mbl9hcml0aCAkYWNfbWlkICsgMSAmJiBhY19sbz0kYXNfdmFsCisJCQlpZiB0ZXN0ICRhY19sbyAtbGUgJGFjX21pZDsgdGhlbgorCQkJICBhY19sbz0gYWNfaGk9CisJCQkgIGJyZWFrCisJCQlmaQorCQkJYXNfZm5fYXJpdGggMiAnKicgJGFjX21pZCArIDEgJiYgYWNfbWlkPSRhc192YWwKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZG9uZQorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpIDwgMCldOwordGVzdF9hcnJheSBbMF0gPSAwOworcmV0dXJuIHRlc3RfYXJyYXkgWzBdOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfaGk9LTEgYWNfbWlkPS0xCisgIHdoaWxlIDo7IGRvCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCQyKSA+PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDA7CityZXR1cm4gdGVzdF9hcnJheSBbMF07CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19sbz0kYWNfbWlkOyBicmVhaworZWxzZQorICBhc19mbl9hcml0aCAnKCcgJGFjX21pZCAnKScgLSAxICYmIGFjX2hpPSRhc192YWwKKwkJCWlmIHRlc3QgJGFjX21pZCAtbGUgJGFjX2hpOyB0aGVuCisJCQkgIGFjX2xvPSBhY19oaT0KKwkJCSAgYnJlYWsKKwkJCWZpCisJCQlhc19mbl9hcml0aCAyICcqJyAkYWNfbWlkICYmIGFjX21pZD0kYXNfdmFsCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2Vsc2UKKyAgYWNfbG89IGFjX2hpPQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIyBCaW5hcnkgc2VhcmNoIGJldHdlZW4gbG8gYW5kIGhpIGJvdW5kcy4KK3doaWxlIHRlc3QgIngkYWNfbG8iICE9ICJ4JGFjX2hpIjsgZG8KKyAgYXNfZm5fYXJpdGggJygnICRhY19oaSAtICRhY19sbyAnKScgLyAyICsgJGFjX2xvICYmIGFjX21pZD0kYXNfdmFsCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgkMikgPD0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwOworcmV0dXJuIHRlc3RfYXJyYXkgWzBdOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfaGk9JGFjX21pZAorZWxzZQorICBhc19mbl9hcml0aCAnKCcgJGFjX21pZCAnKScgKyAxICYmIGFjX2xvPSRhc192YWwKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2RvbmUKK2Nhc2UgJGFjX2xvIGluICMoKAorPyopIGV2YWwgIiQzPVwkYWNfbG8iOyBhY19yZXR2YWw9MCA7OworJycpIGFjX3JldHZhbD0xIDs7Citlc2FjCisgIGVsc2UKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAorc3RhdGljIGxvbmcgaW50IGxvbmd2YWwgKCkgeyByZXR1cm4gJDI7IH0KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGludCB1bG9uZ3ZhbCAoKSB7IHJldHVybiAkMjsgfQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CitpbnQKK21haW4gKCkKK3sKKworICBGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC52YWwiLCAidyIpOworICBpZiAoISBmKQorICAgIHJldHVybiAxOworICBpZiAoKCQyKSA8IDApCisgICAgeworICAgICAgbG9uZyBpbnQgaSA9IGxvbmd2YWwgKCk7CisgICAgICBpZiAoaSAhPSAoJDIpKQorCXJldHVybiAxOworICAgICAgZnByaW50ZiAoZiwgIiVsZCIsIGkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgaW50IGkgPSB1bG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9ICgkMikpCisJcmV0dXJuIDE7CisgICAgICBmcHJpbnRmIChmLCAiJWx1IiwgaSk7CisgICAgfQorICAvKiBEbyBub3Qgb3V0cHV0IGEgdHJhaWxpbmcgbmV3bGluZSwgYXMgdGhpcyBjYXVzZXMgXHJcbiBjb25mdXNpb24KKyAgICAgb24gc29tZSBwbGF0Zm9ybXMuICAqLworICByZXR1cm4gZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDA7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGVjaG8gPj5jb25mdGVzdC52YWw7IHJlYWQgJDMgPGNvbmZ0ZXN0LnZhbDsgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgYWNfcmV0dmFsPTEKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb25mdGVzdC52YWwKKworICBmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX2NvbXB1dGVfaW50CisKKyMgYWNfZm5fY190cnlfbGluayBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGxpbmsgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY190cnlfbGluayAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKwkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKwkgdGVzdCAteCBjb25mdGVzdCRhY19leGVleHQKKyAgICAgICB9OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19yZXR2YWw9MQorZmkKKyAgIyBEZWxldGUgdGhlIElQQS9JUE8gKEludGVyIFByb2NlZHVyYWwgQW5hbHlzaXMvT3B0aW1pemF0aW9uKSBpbmZvcm1hdGlvbgorICAjIGNyZWF0ZWQgYnkgdGhlIFBHSSBjb21waWxlciAoY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyksIGFzIGl0IHdvdWxkCisgICMgaW50ZXJmZXJlIHdpdGggdGhlIG5leHQgbGluayBjb21tYW5kOyBhbHNvIGRlbGV0ZSBhIGRpcmVjdG9yeSB0aGF0IGlzCisgICMgbGVmdCBiZWhpbmQgYnkgQXBwbGUncyBjb21waWxlci4gIFdlIGRvIHRoaXMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgYWN0aW9ucy4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0gY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbworICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9saW5rCisKKyMgYWNfZm5fY19jaGVja19mdW5jIExJTkVOTyBGVU5DIFZBUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIHdoZXRoZXIgRlVOQyBleGlzdHMsIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseQorYWNfZm5fY19jaGVja19mdW5jICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworLyogRGVmaW5lICQyIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJDIuCisgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKyNkZWZpbmUgJDIgaW5ub2N1b3VzXyQyCisKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICQyICgpOyBiZWxvdy4KKyAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKworI3VuZGVmICQyCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgJDIgKCk7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIF9fc3R1Yl8kMiB8fCBkZWZpbmVkIF9fc3R1Yl9fXyQyCitjaG9rZSBtZQorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuICQyICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiQzPXllcyIKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2NoZWNrX2Z1bmMKK2NhdCA+Y29uZmlnLmxvZyA8PF9BQ0VPRgogVGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNlZCBieSBjb21waWxlcnMgd2hpbGUKIHJ1bm5pbmcgY29uZmlndXJlLCB0byBhaWQgZGVidWdnaW5nIGlmIGNvbmZpZ3VyZSBtYWtlcyBhIG1pc3Rha2UuCiAKLUl0IHdhcyBjcmVhdGVkIGJ5ICRhc19tZSwgd2hpY2ggd2FzCi1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTcuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKK0l0IHdhcyBjcmVhdGVkIGJ5IGxpYnNydHAyICRhc19tZSAyLjMuMC1wcmUsIHdoaWNoIHdhcworZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCiAKICAgJCAkMCAkQAogCiBfQUNFT0YKK2V4ZWMgNT4+Y29uZmlnLmxvZwogewogY2F0IDw8X0FTVU5BTUUKICMjIC0tLS0tLS0tLSAjIwpAQCAtOTYxLDcgKzIwNDMsNyBAQAogL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbCAgICAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAogL3Vzci9iaW4vYXJjaCAtayAgICAgICA9IGAoL3Vzci9iaW4vYXJjaCAtaykgMj4vZGV2L251bGwgICAgICAgfHwgZWNobyB1bmtub3duYAogL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyA9IGAoL3Vzci9jb252ZXgvZ2V0c3lzaW5mbykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAotaG9zdGluZm8gICAgICAgICAgICAgICA9IGAoaG9zdGluZm8pIDI+L2Rldi9udWxsICAgICAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vaG9zdGluZm8gICAgICA9IGAoL3Vzci9iaW4vaG9zdGluZm8pIDI+L2Rldi9udWxsICAgICAgfHwgZWNobyB1bmtub3duYAogL2Jpbi9tYWNoaW5lICAgICAgICAgICA9IGAoL2Jpbi9tYWNoaW5lKSAyPi9kZXYvbnVsbCAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAogL3Vzci9iaW4vb3NsZXZlbCAgICAgICA9IGAoL3Vzci9iaW4vb3NsZXZlbCkgMj4vZGV2L251bGwgICAgICAgfHwgZWNobyB1bmtub3duYAogL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGwgICAgICAgICAgfHwgZWNobyB1bmtub3duYApAQCAtOTczLDggKzIwNTUsOSBAQAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBlY2hvICJQQVRIOiAkYXNfZGlyIgotZG9uZQorICAgICRhc19lY2hvICJQQVRIOiAkYXNfZGlyIgorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCiAKIH0gPiY1CiAKQEAgLTk5Niw3ICsyMDc5LDYgQEAKIGFjX2NvbmZpZ3VyZV9hcmdzPQogYWNfY29uZmlndXJlX2FyZ3MwPQogYWNfY29uZmlndXJlX2FyZ3MxPQotYWNfc2VwPQogYWNfbXVzdF9rZWVwX25leHQ9ZmFsc2UKIGZvciBhY19wYXNzIGluIDEgMgogZG8KQEAgLTEwMDcsMTI2ICsyMDg5LDEzNyBAQAogICAgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCiAgICAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwpCiAgICAgICBjb250aW51ZSA7OwotICAgICoiICIqfCoiCSIqfCpbXFtcXVx+XCNcJFxeXCZcKlwoXClce1x9XFxcfFw7XDxcPlw/XCJcJ10qKQotICAgICAgYWNfYXJnPWBlY2hvICIkYWNfYXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgICpcJyopCisgICAgICBhY19hcmc9YCRhc19lY2hvICIkYWNfYXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OwogICAgIGVzYWMKICAgICBjYXNlICRhY19wYXNzIGluCi0gICAgMSkgYWNfY29uZmlndXJlX2FyZ3MwPSIkYWNfY29uZmlndXJlX2FyZ3MwICckYWNfYXJnJyIgOzsKKyAgICAxKSBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MwICIgJyRhY19hcmcnIiA7OwogICAgIDIpCi0gICAgICBhY19jb25maWd1cmVfYXJnczE9IiRhY19jb25maWd1cmVfYXJnczEgJyRhY19hcmcnIgorICAgICAgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzMSAiICckYWNfYXJnJyIKICAgICAgIGlmIHRlc3QgJGFjX211c3Rfa2VlcF9uZXh0ID0gdHJ1ZTsgdGhlbgotICAgICAgICBhY19tdXN0X2tlZXBfbmV4dD1mYWxzZSAjIEdvdCB2YWx1ZSwgYmFjayB0byBub3JtYWwuCisJYWNfbXVzdF9rZWVwX25leHQ9ZmFsc2UgIyBHb3QgdmFsdWUsIGJhY2sgdG8gbm9ybWFsLgogICAgICAgZWxzZQotICAgICAgICBjYXNlICRhY19hcmcgaW4KLSAgICAgICAgICAqPSogfCAtLWNvbmZpZy1jYWNoZSB8IC1DIHwgLWRpc2FibGUtKiB8IC0tZGlzYWJsZS0qIFwKLSAgICAgICAgICB8IC1lbmFibGUtKiB8IC0tZW5hYmxlLSogfCAtZ2FzIHwgLS1nKiB8IC1uZnAgfCAtLW5mKiBcCi0gICAgICAgICAgfCAtcSB8IC1xdWlldCB8IC0tcSogfCAtc2lsZW50IHwgLS1zaWwqIHwgLXYgfCAtdmVyYiogXAotICAgICAgICAgIHwgLXdpdGgtKiB8IC0td2l0aC0qIHwgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qIHwgLS14KQotICAgICAgICAgICAgY2FzZSAiJGFjX2NvbmZpZ3VyZV9hcmdzMCAiIGluCi0gICAgICAgICAgICAgICIkYWNfY29uZmlndXJlX2FyZ3MxIioiICckYWNfYXJnJyAiKiApIGNvbnRpbnVlIDs7Ci0gICAgICAgICAgICBlc2FjCi0gICAgICAgICAgICA7OwotICAgICAgICAgIC0qICkgYWNfbXVzdF9rZWVwX25leHQ9dHJ1ZSA7OwotICAgICAgICBlc2FjCisJY2FzZSAkYWNfYXJnIGluCisJICAqPSogfCAtLWNvbmZpZy1jYWNoZSB8IC1DIHwgLWRpc2FibGUtKiB8IC0tZGlzYWJsZS0qIFwKKwkgIHwgLWVuYWJsZS0qIHwgLS1lbmFibGUtKiB8IC1nYXMgfCAtLWcqIHwgLW5mcCB8IC0tbmYqIFwKKwkgIHwgLXEgfCAtcXVpZXQgfCAtLXEqIHwgLXNpbGVudCB8IC0tc2lsKiB8IC12IHwgLXZlcmIqIFwKKwkgIHwgLXdpdGgtKiB8IC0td2l0aC0qIHwgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qIHwgLS14KQorCSAgICBjYXNlICIkYWNfY29uZmlndXJlX2FyZ3MwICIgaW4KKwkgICAgICAiJGFjX2NvbmZpZ3VyZV9hcmdzMSIqIiAnJGFjX2FyZycgIiogKSBjb250aW51ZSA7OworCSAgICBlc2FjCisJICAgIDs7CisJICAtKiApIGFjX211c3Rfa2VlcF9uZXh0PXRydWUgOzsKKwllc2FjCiAgICAgICBmaQotICAgICAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyRhY19zZXAnJGFjX2FyZyciCi0gICAgICAjIEdldCByaWQgb2YgdGhlIGxlYWRpbmcgc3BhY2UuCi0gICAgICBhY19zZXA9IiAiCisgICAgICBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MgIiAnJGFjX2FyZyciCiAgICAgICA7OwogICAgIGVzYWMKICAgZG9uZQogZG9uZQotJGFzX3Vuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMCB8fCB0ZXN0ICIke2FjX2NvbmZpZ3VyZV9hcmdzMCtzZXR9IiAhPSBzZXQgfHwgeyBhY19jb25maWd1cmVfYXJnczA9OyBleHBvcnQgYWNfY29uZmlndXJlX2FyZ3MwOyB9Ci0kYXNfdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MxIHx8IHRlc3QgIiR7YWNfY29uZmlndXJlX2FyZ3MxK3NldH0iICE9IHNldCB8fCB7IGFjX2NvbmZpZ3VyZV9hcmdzMT07IGV4cG9ydCBhY19jb25maWd1cmVfYXJnczE7IH0KK3sgYWNfY29uZmlndXJlX2FyZ3MwPTsgdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MwO30KK3sgYWNfY29uZmlndXJlX2FyZ3MxPTsgdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MxO30KIAogIyBXaGVuIGludGVycnVwdGVkIG9yIGV4aXQnZCwgY2xlYW51cCB0ZW1wb3JhcnkgZmlsZXMsIGFuZCBjb21wbGV0ZQogIyBjb25maWcubG9nLiAgV2UgcmVtb3ZlIGNvbW1lbnRzIGJlY2F1c2UgYW55d2F5IHRoZSBxdW90ZXMgaW4gdGhlcmUKICMgd291bGQgY2F1c2UgcHJvYmxlbXMgb3IgbG9vayB1Z2x5LgotIyBXQVJOSU5HOiBCZSBzdXJlIG5vdCB0byB1c2Ugc2luZ2xlIHF1b3RlcyBpbiB0aGVyZSwgYXMgc29tZSBzaGVsbHMsCi0jIHN1Y2ggYXMgb3VyIERVIDUuMCBmcmllbmQsIHdpbGwgdGhlbiBgY2xvc2UnIHRoZSB0cmFwLgorIyBXQVJOSU5HOiBVc2UgJ1wnJyB0byByZXByZXNlbnQgYW4gYXBvc3Ryb3BoZSB3aXRoaW4gdGhlIHRyYXAuCisjIFdBUk5JTkc6IERvIG5vdCBzdGFydCB0aGUgdHJhcCBjb2RlIHdpdGggYSBuZXdsaW5lLCBkdWUgdG8gYSBGcmVlQlNEIDQuMCBidWcuCiB0cmFwICdleGl0X3N0YXR1cz0kPwogICAjIFNhdmUgaW50byBjb25maWcubG9nIHNvbWUgaW5mb3JtYXRpb24gdGhhdCBtaWdodCBoZWxwIGluIGRlYnVnZ2luZy4KICAgewogICAgIGVjaG8KIAotICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKyAgICAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0tLS0tLSAjIwogIyMgQ2FjaGUgdmFyaWFibGVzLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCisjIyAtLS0tLS0tLS0tLS0tLS0tICMjIgogICAgIGVjaG8KICAgICAjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAoteworKAorICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdcJydzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ1wnJ2A7IGRvCisgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgY2FzZSAkYWNfdmFsIGluICMoCisgICAgKiR7YXNfbmx9KikKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgKl9jdl8qKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCisgICAgICBCQVNIX0FSR1YgfCBCQVNIX1NPVVJDRSkgZXZhbCAkYWNfdmFyPSA7OyAjKAorICAgICAgKikgeyBldmFsICRhY192YXI9OyB1bnNldCAkYWNfdmFyO30gOzsKKyAgICAgIGVzYWMgOzsKKyAgICBlc2FjCisgIGRvbmUKICAgKHNldCkgMj4mMSB8Ci0gICAgY2FzZSBgKGFjX3NwYWNlPSciJyInICciJyInOyBzZXQgfCBncmVwIGFjX3NwYWNlKSAyPiYxYCBpbgotICAgICphY19zcGFjZT1cICopCisgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPSdcJycgJ1wnJzsgc2V0KSAyPiYxYCBpbiAjKAorICAgICoke2FzX25sfWFjX3NwYWNlPVwgKikKICAgICAgIHNlZCAtbiBcCi0gICAgICAgICJzLyciJyInLyciJyInXFxcXCciJyInJyInIicvZzsKLSAgICAJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSciJyInXFwyJyInIicvcCIKLSAgICAgIDs7CisJInMvJ1wnJy8nXCcnXFxcXCdcJycnXCcnL2c7CisJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcJydcXDInXCcnL3AiCisgICAgICA7OyAjKAogICAgICopCi0gICAgICBzZWQgLW4gXAotICAgICAgICAicy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT1cXDIvcCIKKyAgICAgIHNlZCAtbiAiL15bXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSo9L3AiCiAgICAgICA7OwotICAgIGVzYWM7Ci19CisgICAgZXNhYyB8CisgICAgc29ydAorKQogICAgIGVjaG8KIAotICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCiAjIyBPdXRwdXQgdmFyaWFibGVzLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAorIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMiCiAgICAgZWNobwogICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X3ZhcnMKICAgICBkbwotICAgICAgZXZhbCBhY192YWw9JGBlY2hvICRhY192YXJgCi0gICAgICBlY2hvICIkYWNfdmFyPSciJyInJGFjX3ZhbCciJyInIgorICAgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgICBjYXNlICRhY192YWwgaW4KKyAgICAgICpcJ1wnJyopIGFjX3ZhbD1gJGFzX2VjaG8gIiRhY192YWwiIHwgc2VkICJzLydcJycvJ1wnJ1xcXFxcXFxcJ1wnJydcJycvZyJgOzsKKyAgICAgIGVzYWMKKyAgICAgICRhc19lY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKICAgICBkb25lIHwgc29ydAogICAgIGVjaG8KIAogICAgIGlmIHRlc3QgLW4gIiRhY19zdWJzdF9maWxlcyI7IHRoZW4KLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0gIyMKLSMjIE91dHB1dCBmaWxlcy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAorICAgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEZpbGUgc3Vic3RpdHV0aW9ucy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMiCiAgICAgICBlY2hvCiAgICAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF9maWxlcwogICAgICAgZG8KLQlldmFsIGFjX3ZhbD0kYGVjaG8gJGFjX3ZhcmAKLSAgICAgICAgZWNobyAiJGFjX3Zhcj0nIiciJyRhY192YWwnIiciJyIKKwlldmFsIGFjX3ZhbD1cJCRhY192YXIKKwljYXNlICRhY192YWwgaW4KKwkqXCdcJycqKSBhY192YWw9YCRhc19lY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7CisJZXNhYworCSRhc19lY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKICAgICAgIGRvbmUgfCBzb3J0CiAgICAgICBlY2hvCiAgICAgZmkKIAogICAgIGlmIHRlc3QgLXMgY29uZmRlZnMuaDsgdGhlbgotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0gIyMKKyAgICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLSAjIwogIyMgY29uZmRlZnMuaC4gIyMKLSMjIC0tLS0tLS0tLS0tICMjCi1fQVNCT1gKKyMjIC0tLS0tLS0tLS0tICMjIgogICAgICAgZWNobwotICAgICAgc2VkICIvXiQvZCIgY29uZmRlZnMuaCB8IHNvcnQKKyAgICAgIGNhdCBjb25mZGVmcy5oCiAgICAgICBlY2hvCiAgICAgZmkKICAgICB0ZXN0ICIkYWNfc2lnbmFsIiAhPSAwICYmCi0gICAgICBlY2hvICIkYXNfbWU6IGNhdWdodCBzaWduYWwgJGFjX3NpZ25hbCIKLSAgICBlY2hvICIkYXNfbWU6IGV4aXQgJGV4aXRfc3RhdHVzIgorICAgICAgJGFzX2VjaG8gIiRhc19tZTogY2F1Z2h0IHNpZ25hbCAkYWNfc2lnbmFsIgorICAgICRhc19lY2hvICIkYXNfbWU6IGV4aXQgJGV4aXRfc3RhdHVzIgogICB9ID4mNQotICBybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgJiYKLSAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mZGVmcyogY29uZiQkKiAkYWNfY2xlYW5fZmlsZXMgJiYKKyAgcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qICYmCisgICAgcm0gLWYgLXIgY29uZnRlc3QqIGNvbmZkZWZzKiBjb25mJCQqICRhY19jbGVhbl9maWxlcyAmJgogICAgIGV4aXQgJGV4aXRfc3RhdHVzCi0gICAgICcgMAorJyAwCiBmb3IgYWNfc2lnbmFsIGluIDEgMiAxMyAxNTsgZG8KLSAgdHJhcCAnYWNfc2lnbmFsPSckYWNfc2lnbmFsJzsgeyAoZXhpdCAxKTsgZXhpdCAxOyB9JyAkYWNfc2lnbmFsCisgIHRyYXAgJ2FjX3NpZ25hbD0nJGFjX3NpZ25hbCc7IGFzX2ZuX2V4aXQgMScgJGFjX3NpZ25hbAogZG9uZQogYWNfc2lnbmFsPTAKIAogIyBjb25mZGVmcy5oIGF2b2lkcyBPUyBjb21tYW5kIGxpbmUgbGVuZ3RoIGxpbWl0cyB0aGF0IERFRlMgY2FuIGV4Y2VlZC4KLXJtIC1yZiBjb25mdGVzdCogY29uZmRlZnMuaAotIyBBSVggY3BwIGxvc2VzIG9uIGFuIGVtcHR5IGZpbGUsIHNvIG1ha2Ugc3VyZSBpdCBjb250YWlucyBhdCBsZWFzdCBhIG5ld2xpbmUuCi1lY2hvID5jb25mZGVmcy5oCitybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMuaAorCiskYXNfZWNobyAiLyogY29uZmRlZnMuaCAqLyIgPiBjb25mZGVmcy5oCiAKICMgUHJlZGVmaW5lZCBwcmVwcm9jZXNzb3IgdmFyaWFibGVzLgogCkBAIC0xMTM0LDExMiArMjIyNywxMzcgQEAKICNkZWZpbmUgUEFDS0FHRV9OQU1FICIkUEFDS0FHRV9OQU1FIgogX0FDRU9GCiAKLQogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgIiRQQUNLQUdFX1RBUk5BTUUiCiBfQUNFT0YKIAotCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiJFBBQ0tBR0VfVkVSU0lPTiIKIF9BQ0VPRgogCi0KIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgIiRQQUNLQUdFX1NUUklORyIKIF9BQ0VPRgogCi0KIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgIiRQQUNLQUdFX0JVR1JFUE9SVCIKIF9BQ0VPRgogCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfVVJMICIkUEFDS0FHRV9VUkwiCitfQUNFT0YKKwogCiAjIExldCB0aGUgc2l0ZSBmaWxlIHNlbGVjdCBhbiBhbHRlcm5hdGUgY2FjaGUgZmlsZSBpZiBpdCB3YW50cyB0by4KLSMgUHJlZmVyIGV4cGxpY2l0bHkgc2VsZWN0ZWQgZmlsZSB0byBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIG9uZXMuCi1pZiB0ZXN0IC16ICIkQ09ORklHX1NJVEUiOyB0aGVuCi0gIGlmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgotICAgIENPTkZJR19TSVRFPSIkcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlICRwcmVmaXgvZXRjL2NvbmZpZy5zaXRlIgotICBlbHNlCi0gICAgQ09ORklHX1NJVEU9IiRhY19kZWZhdWx0X3ByZWZpeC9zaGFyZS9jb25maWcuc2l0ZSAkYWNfZGVmYXVsdF9wcmVmaXgvZXRjL2NvbmZpZy5zaXRlIgotICBmaQorIyBQcmVmZXIgYW4gZXhwbGljaXRseSBzZWxlY3RlZCBmaWxlIHRvIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgb25lcy4KK2FjX3NpdGVfZmlsZTE9Tk9ORQorYWNfc2l0ZV9maWxlMj1OT05FCitpZiB0ZXN0IC1uICIkQ09ORklHX1NJVEUiOyB0aGVuCisgICMgV2UgZG8gbm90IHdhbnQgYSBQQVRIIHNlYXJjaCBmb3IgY29uZmlnLnNpdGUuCisgIGNhc2UgJENPTkZJR19TSVRFIGluICMoKAorICAgIC0qKSAgYWNfc2l0ZV9maWxlMT0uLyRDT05GSUdfU0lURTs7CisgICAgKi8qKSBhY19zaXRlX2ZpbGUxPSRDT05GSUdfU0lURTs7CisgICAgKikgICBhY19zaXRlX2ZpbGUxPS4vJENPTkZJR19TSVRFOzsKKyAgZXNhYworZWxpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKyAgYWNfc2l0ZV9maWxlMT0kcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlCisgIGFjX3NpdGVfZmlsZTI9JHByZWZpeC9ldGMvY29uZmlnLnNpdGUKK2Vsc2UKKyAgYWNfc2l0ZV9maWxlMT0kYWNfZGVmYXVsdF9wcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUKKyAgYWNfc2l0ZV9maWxlMj0kYWNfZGVmYXVsdF9wcmVmaXgvZXRjL2NvbmZpZy5zaXRlCiBmaQotZm9yIGFjX3NpdGVfZmlsZSBpbiAkQ09ORklHX1NJVEU7IGRvCi0gIGlmIHRlc3QgLXIgIiRhY19zaXRlX2ZpbGUiOyB0aGVuCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjUKLWVjaG8gIiRhc19tZTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjY7fQorZm9yIGFjX3NpdGVfZmlsZSBpbiAiJGFjX3NpdGVfZmlsZTEiICIkYWNfc2l0ZV9maWxlMiIKK2RvCisgIHRlc3QgIngkYWNfc2l0ZV9maWxlIiA9IHhOT05FICYmIGNvbnRpbnVlCisgIGlmIHRlc3QgL2Rldi9udWxsICE9ICIkYWNfc2l0ZV9maWxlIiAmJiB0ZXN0IC1yICIkYWNfc2l0ZV9maWxlIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY2O30KICAgICBzZWQgJ3MvXi98IC8nICIkYWNfc2l0ZV9maWxlIiA+JjUKLSAgICAuICIkYWNfc2l0ZV9maWxlIgorICAgIC4gIiRhY19zaXRlX2ZpbGUiIFwKKyAgICAgIHx8IHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gImZhaWxlZCB0byBsb2FkIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CiAgIGZpCiBkb25lCiAKIGlmIHRlc3QgLXIgIiRjYWNoZV9maWxlIjsgdGhlbgotICAjIFNvbWUgdmVyc2lvbnMgb2YgYmFzaCB3aWxsIGZhaWwgdG8gc291cmNlIC9kZXYvbnVsbCAoc3BlY2lhbAotICAjIGZpbGVzIGFjdHVhbGx5KSwgc28gd2UgYXZvaWQgZG9pbmcgdGhhdC4KLSAgaWYgdGVzdCAtZiAiJGNhY2hlX2ZpbGUiOyB0aGVuCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1Ci1lY2hvICIkYXNfbWU6IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgICMgU29tZSB2ZXJzaW9ucyBvZiBiYXNoIHdpbGwgZmFpbCB0byBzb3VyY2UgL2Rldi9udWxsIChzcGVjaWFsIGZpbGVzCisgICMgYWN0dWFsbHkpLCBzbyB3ZSBhdm9pZCBkb2luZyB0aGF0LiAgREpHUFAgZW11bGF0ZXMgaXQgYXMgYSByZWd1bGFyIGZpbGUuCisgIGlmIHRlc3QgL2Rldi9udWxsICE9ICIkY2FjaGVfZmlsZSIgJiYgdGVzdCAtZiAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CiAgICAgY2FzZSAkY2FjaGVfZmlsZSBpbgotICAgICAgW1xcL10qIHwgPzpbXFwvXSogKSAuICRjYWNoZV9maWxlOzsKLSAgICAgICopICAgICAgICAgICAgICAgICAgICAgIC4gLi8kY2FjaGVfZmlsZTs7CisgICAgICBbXFwvXSogfCA/OltcXC9dKiApIC4gIiRjYWNoZV9maWxlIjs7CisgICAgICAqKSAgICAgICAgICAgICAgICAgICAgICAuICIuLyRjYWNoZV9maWxlIjs7CiAgICAgZXNhYwogICBmaQogZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1Ci1lY2hvICIkYXNfbWU6IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQogICA+JGNhY2hlX2ZpbGUKIGZpCiAKICMgQ2hlY2sgdGhhdCB0aGUgcHJlY2lvdXMgdmFyaWFibGVzIHNhdmVkIGluIHRoZSBjYWNoZSBoYXZlIGtlcHQgdGhlIHNhbWUKICMgdmFsdWUuCiBhY19jYWNoZV9jb3JydXB0ZWQ9ZmFsc2UKLWZvciBhY192YXIgaW4gYChzZXQpIDI+JjEgfAotICAgICAgICAgICAgICAgc2VkIC1uICdzL15hY19lbnZfXChbYS16QS1aXzAtOV0qXClfc2V0PS4qL1wxL3AnYDsgZG8KK2ZvciBhY192YXIgaW4gJGFjX3ByZWNpb3VzX3ZhcnM7IGRvCiAgIGV2YWwgYWNfb2xkX3NldD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0CiAgIGV2YWwgYWNfbmV3X3NldD1cJGFjX2Vudl8ke2FjX3Zhcn1fc2V0Ci0gIGV2YWwgYWNfb2xkX3ZhbD0iXCRhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlIgotICBldmFsIGFjX25ld192YWw9IlwkYWNfZW52XyR7YWNfdmFyfV92YWx1ZSIKKyAgZXZhbCBhY19vbGRfdmFsPVwkYWNfY3ZfZW52XyR7YWNfdmFyfV92YWx1ZQorICBldmFsIGFjX25ld192YWw9XCRhY19lbnZfJHthY192YXJ9X3ZhbHVlCiAgIGNhc2UgJGFjX29sZF9zZXQsJGFjX25ld19zZXQgaW4KICAgICBzZXQsKQotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNldCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNldCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjI7fQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNldCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjI7fQogICAgICAgYWNfY2FjaGVfY29ycnVwdGVkPTogOzsKICAgICAsc2V0KQotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KICAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7CiAgICAgLCk7OwogICAgICopCiAgICAgICBpZiB0ZXN0ICJ4JGFjX29sZF92YWwiICE9ICJ4JGFjX25ld192YWwiOyB0aGVuCi0gICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9Ci0gICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86ICAgZm9ybWVyIHZhbHVlOiAgJGFjX29sZF92YWwiID4mNQotZWNobyAiJGFzX21lOiAgIGZvcm1lciB2YWx1ZTogICRhY19vbGRfdmFsIiA+JjI7fQotICAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiAgIGN1cnJlbnQgdmFsdWU6ICRhY19uZXdfdmFsIiA+JjUKLWVjaG8gIiRhc19tZTogICBjdXJyZW50IHZhbHVlOiAkYWNfbmV3X3ZhbCIgPiYyO30KLSAgICAgICAgYWNfY2FjaGVfY29ycnVwdGVkPToKKwkjIGRpZmZlcmVuY2VzIGluIHdoaXRlc3BhY2UgZG8gbm90IGxlYWQgdG8gZmFpbHVyZS4KKwlhY19vbGRfdmFsX3c9YGVjaG8geCAkYWNfb2xkX3ZhbGAKKwlhY19uZXdfdmFsX3c9YGVjaG8geCAkYWNfbmV3X3ZhbGAKKwlpZiB0ZXN0ICIkYWNfb2xkX3ZhbF93IiAhPSAiJGFjX25ld192YWxfdyI7IHRoZW4KKwkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9CisJICBhY19jYWNoZV9jb3JydXB0ZWQ9OgorCWVsc2UKKwkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogd2FybmluZzogaWdub3Jpbmcgd2hpdGVzcGFjZSBjaGFuZ2VzIGluIFxgJGFjX3Zhcicgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogd2FybmluZzogaWdub3Jpbmcgd2hpdGVzcGFjZSBjaGFuZ2VzIGluIFxgJGFjX3Zhcicgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9CisJICBldmFsICRhY192YXI9XCRhY19vbGRfdmFsCisJZmkKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICAgZm9ybWVyIHZhbHVlOiAgXGAkYWNfb2xkX3ZhbCciID4mNQorJGFzX2VjaG8gIiRhc19tZTogICBmb3JtZXIgdmFsdWU6ICBcYCRhY19vbGRfdmFsJyIgPiYyO30KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICAgY3VycmVudCB2YWx1ZTogXGAkYWNfbmV3X3ZhbCciID4mNQorJGFzX2VjaG8gIiRhc19tZTogICBjdXJyZW50IHZhbHVlOiBcYCRhY19uZXdfdmFsJyIgPiYyO30KICAgICAgIGZpOzsKICAgZXNhYwogICAjIFBhc3MgcHJlY2lvdXMgdmFyaWFibGVzIHRvIGNvbmZpZy5zdGF0dXMuCiAgIGlmIHRlc3QgIiRhY19uZXdfc2V0IiA9IHNldDsgdGhlbgogICAgIGNhc2UgJGFjX25ld192YWwgaW4KLSAgICAqIiAiKnwqIgkiKnwqW1xbXF1cflwjXCRcXlwmXCpcKFwpXHtcfVxcXHxcO1w8XD5cP1wiXCddKikKLSAgICAgIGFjX2FyZz0kYWNfdmFyPWBlY2hvICIkYWNfbmV3X3ZhbCIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICAqXCcqKSBhY19hcmc9JGFjX3Zhcj1gJGFzX2VjaG8gIiRhY19uZXdfdmFsIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OwogICAgICopIGFjX2FyZz0kYWNfdmFyPSRhY19uZXdfdmFsIDs7CiAgICAgZXNhYwogICAgIGNhc2UgIiAkYWNfY29uZmlndXJlX2FyZ3MgIiBpbgogICAgICAgKiIgJyRhY19hcmcnICIqKSA7OyAjIEF2b2lkIGR1cHMuICBVc2Ugb2YgcXVvdGVzIGVuc3VyZXMgYWNjdXJhY3kuCi0gICAgICAqKSBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICckYWNfYXJnJyIgOzsKKyAgICAgICopIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJncyAiICckYWNfYXJnJyIgOzsKICAgICBlc2FjCiAgIGZpCiBkb25lCiBpZiAkYWNfY2FjaGVfY29ycnVwdGVkOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjI7fQotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBydW4gXGBtYWtlIGRpc3RjbGVhbicgYW5kL29yIFxgcm0gJGNhY2hlX2ZpbGUnIGFuZCBzdGFydCBvdmVyIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IHJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiYyO30KKyAgYXNfZm5fZXJyb3IgJD8gInJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiICIkTElORU5PIiA1CiBmaQorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE1haW4gYm9keSBvZiBzY3JpcHQuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwogCiBhY19leHQ9YwogYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKQEAgLTEyNDksMTAxICsyMzY3LDkgQEAKIAogCiAKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi1pZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1yYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9cmFubGliOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX1JBTkxJQitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgotICBhY19jdl9wcm9nX1JBTkxJQj0iJFJBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfUkFOTElCPSIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi1maQotZmkKLVJBTkxJQj0kYWNfY3ZfcHJvZ19SQU5MSUIKLWlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRSQU5MSUIiID4mNQotZWNobyAiJHtFQ0hPX1R9JFJBTkxJQiIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19SQU5MSUIiOyB0aGVuCi0gIGFjX2N0X1JBTkxJQj0kUkFOTElCCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSByYW5saWI7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfUkFOTElCK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSIkYWNfY3RfUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9InJhbmxpYiIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi0gIHRlc3QgLXogIiRhY19jdl9wcm9nX2FjX2N0X1JBTkxJQiIgJiYgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9IjoiCi1maQotZmkKLWFjX2N0X1JBTkxJQj0kYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIKLWlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9SQU5MSUIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X1JBTkxJQiIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLSAgUkFOTElCPSRhY19jdF9SQU5MSUIKLWVsc2UKLSAgUkFOTElCPSIkYWNfY3ZfcHJvZ19SQU5MSUIiCitFTVBUWV9DRkxBR1M9Im5vIgoraWYgdGVzdCAieCRDRkxBR1MiID0gIngiOyB0aGVuCisgICAgICBFTVBUWV9DRkxBR1M9InllcyIKIGZpCiAKIGFjX2V4dD1jCkBAIC0xMzU0LDEwICsyMzgwLDEwIEBACiBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCiAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1nY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgogc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Z2NjOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KICAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KQEAgLTEzNjcsMzUgKzIzOTMsMzcgQEAKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KICAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWdjYyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQogZG9uZQotZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCiAKIGZpCiBmaQogQ0M9JGFjX2N2X3Byb2dfQ0MKIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRDQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCisKIGZpCiBpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19DQyI7IHRoZW4KICAgYWNfY3RfQ0M9JENDCiAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSBnY2M7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgogICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgpAQCAtMTQwNSwzOSArMjQzMyw1MCBAQAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgogICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9ImdjYyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQogZG9uZQotZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCiAKIGZpCiBmaQogYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9DQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCi0gIENDPSRhY19jdF9DQworICBpZiB0ZXN0ICJ4JGFjX2N0X0NDIiA9IHg7IHRoZW4KKyAgICBDQz0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIENDPSRhY19jdF9DQworICBmaQogZWxzZQogICBDQz0iJGFjX2N2X3Byb2dfQ0MiCiBmaQogCiBpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCi0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWNjOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KICAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KQEAgLTE0NDcsNzcgKzI0ODYsMzcgQEAKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KICAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWNjIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCiBkb25lCi1kb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAogZmkKIGZpCiBDQz0kYWNfY3ZfcHJvZ19DQwogaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQotZWNobyAiJHtFQ0hPX1R9JENDIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19DQyI7IHRoZW4KLSAgYWNfY3RfQ0M9JENDCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGNjOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iY2MiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKKwogICBmaQotZG9uZQotZG9uZQotCi1maQotZmkKLWFjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCi1pZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3RfQ0MiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0gIENDPSRhY19jdF9DQwotZWxzZQotICBDQz0iJGFjX2N2X3Byb2dfQ0MiCi1maQotCiBmaQogaWYgdGVzdCAteiAiJENDIjsgdGhlbgogICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSBjYzsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCiAgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCkBAIC0xNTI4LDE4ICsyNTI3LDE5IEBACiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCiAgICAgaWYgdGVzdCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPSAiL3Vzci91Y2IvY2MiOyB0aGVuCiAgICAgICAgYWNfcHJvZ19yZWplY3RlZD15ZXMKICAgICAgICBjb250aW51ZQogICAgICBmaQogICAgIGFjX2N2X3Byb2dfQ0M9ImNjIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCiBkb25lCi1kb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAogaWYgdGVzdCAkYWNfcHJvZ19yZWplY3RlZCA9IHllczsgdGhlbgogICAjIFdlIGZvdW5kIGEgYm9nb24gaW4gdGhlIHBhdGgsIHNvIG1ha2Ugc3VyZSB3ZSBuZXZlciB1c2UgaXQuCkBAIC0xNTU3LDI0ICsyNTU3LDI1IEBACiBmaQogQ0M9JGFjX2N2X3Byb2dfQ0MKIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRDQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCisKIGZpCiBpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCiAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgZm9yIGFjX3Byb2cgaW4gY2wKKyAgZm9yIGFjX3Byb2cgaW4gY2wuZXhlCiAgIGRvCiAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgogICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgpAQCAtMTU4NCwzOSArMjU4NSw0MSBAQAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgogICAgIGFjX2N2X3Byb2dfQ0M9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCiBkb25lCi1kb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAogZmkKIGZpCiBDQz0kYWNfY3ZfcHJvZ19DQwogaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQotZWNobyAiJHtFQ0hPX1R9JENDIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKKwogICAgIHRlc3QgLW4gIiRDQyIgJiYgYnJlYWsKICAgZG9uZQogZmkKIGlmIHRlc3QgLXogIiRDQyI7IHRoZW4KICAgYWNfY3RfQ0M9JENDCi0gIGZvciBhY19wcm9nIGluIGNsCisgIGZvciBhY19wcm9nIGluIGNsLmV4ZQogZG8KICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgogICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgpAQCAtMTYyNiw2NyArMjYyOSw3OCBAQAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgogICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19wcm9nIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCiBkb25lCi1kb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAogZmkKIGZpCiBhY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQwogaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0NDIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0NDIiA+JjY7IH0KIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKKwogICB0ZXN0IC1uICIkYWNfY3RfQ0MiICYmIGJyZWFrCiBkb25lCiAKLSAgQ0M9JGFjX2N0X0NDCisgIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgorICAgIENDPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQ0M9JGFjX2N0X0NDCisgIGZpCiBmaQogCiBmaQogCiAKLXRlc3QgLXogIiRDQyIgJiYgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK3Rlc3QgLXogIiRDQyIgJiYgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KIAogIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgotZWNobyAiJGFzX21lOiRMSU5FTk86IiBcCi0gICAgICJjaGVja2luZyBmb3IgQyBjb21waWxlciB2ZXJzaW9uIiA+JjUKLWFjX2NvbXBpbGVyPWBzZXQgWCAkYWNfY29tcGlsZTsgZWNobyAkMmAKLXsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA8L2Rldi9udWxsID4mNVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlciAtLXZlcnNpb24gPC9kZXYvbnVsbCA+JjUpIDI+JjUKKyRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIHZlcnNpb24iID4mNQorc2V0IFggJGFjX2NvbXBpbGUKK2FjX2NvbXBpbGVyPSQyCitmb3IgYWNfb3B0aW9uIGluIC0tdmVyc2lvbiAtdiAtViAtcXZlcnNpb247IGRvCisgIHsgeyBhY190cnk9IiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IikgMj5jb25mdGVzdC5lcnIKICAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLXsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVyIC12IDwvZGV2L251bGwgPiY1XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGVyIC12IDwvZGV2L251bGwgPiY1KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9Ci17IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlciAtViA8L2Rldi9udWxsID4mNVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlciAtViA8L2Rldi9udWxsID4mNSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIHNlZCAnMTBhXAorLi4uIHJlc3Qgb2Ygc3RkZXJyIG91dHB1dCBkZWxldGVkIC4uLgorICAgICAgICAgMTBxJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KK2RvbmUKIAotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0jbGluZSAkTElORU5PICJjb25maWd1cmUiCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIGludApAQCAtMTY5OCwxMTIgKzI3MTIsMTA4IEBACiB9CiBfQUNFT0YKIGFjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCi1hY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzIGEub3V0IGEuZXhlIGIub3V0IgorYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyBhLm91dCBhLm91dC5kU1lNIGEuZXhlIGIub3V0IgogIyBUcnkgdG8gY3JlYXRlIGFuIGV4ZWN1dGFibGUgd2l0aG91dCAtbyBmaXJzdCwgZGlzcmVnYXJkIGEub3V0LgogIyBJdCB3aWxsIGhlbHAgdXMgZGlhZ25vc2UgYnJva2VuIGNvbXBpbGVycywgYW5kIGZpbmRpbmcgb3V0IGFuIGludHVpdGlvbgogIyBvZiBleGVleHQuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dC4uLiAkRUNIT19DIiA+JjYKLWFjX2xpbmtfZGVmYXVsdD1gZWNobyAiJGFjX2xpbmsiIHwgc2VkICdzLyAtbyAqY29uZnRlc3RbXiBdKi8vJ2AKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtfZGVmYXVsdFwiIikgPiY1Ci0gIChldmFsICRhY19saW5rX2RlZmF1bHQpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KLSAgIyBGaW5kIHRoZSBvdXRwdXQsIHN0YXJ0aW5nIGZyb20gdGhlIG1vc3QgbGlrZWx5LiAgVGhpcyBzY2hlbWUgaXMKLSMgbm90IHJvYnVzdCB0byBqdW5rIGluIGAuJywgaGVuY2UgZ28gdG8gd2lsZGNhcmRzIChhLiopIG9ubHkgYXMgYSBsYXN0Ci0jIHJlc29ydC4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzLi4uICIgPiY2OyB9CithY19saW5rX2RlZmF1bHQ9YCRhc19lY2hvICIkYWNfbGluayIgfCBzZWQgJ3MvIC1vICpjb25mdGVzdFteIF0qLy8nYAogCi0jIEJlIGNhcmVmdWwgdG8gaW5pdGlhbGl6ZSB0aGlzIHZhcmlhYmxlLCBzaW5jZSBpdCB1c2VkIHRvIGJlIGNhY2hlZC4KLSMgT3RoZXJ3aXNlIGFuIG9sZCBjYWNoZSB2YWx1ZSBvZiBgbm8nIGxlZCB0byBgRVhFRVhUID0gbm8nIGluIGEgTWFrZWZpbGUuCi1hY19jdl9leGVleHQ9Ci0jIGIub3V0IGlzIGNyZWF0ZWQgYnkgaTk2MCBjb21waWxlcnMuCi1mb3IgYWNfZmlsZSBpbiBhX291dC5leGUgYS5leGUgY29uZnRlc3QuZXhlIGEub3V0IGNvbmZ0ZXN0IGEuKiBjb25mdGVzdC4qIGIub3V0CisjIFRoZSBwb3NzaWJsZSBvdXRwdXQgZmlsZXM6CithY19maWxlcz0iYS5vdXQgY29uZnRlc3QuZXhlIGNvbmZ0ZXN0IGEuZXhlIGFfb3V0LmV4ZSBiLm91dCBjb25mdGVzdC4qIgorCithY19ybWZpbGVzPQorZm9yIGFjX2ZpbGUgaW4gJGFjX2ZpbGVzCitkbworICBjYXNlICRhY19maWxlIGluCisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKSA7OworICAgICogKSBhY19ybWZpbGVzPSIkYWNfcm1maWxlcyAkYWNfZmlsZSI7OworICBlc2FjCitkb25lCitybSAtZiAkYWNfcm1maWxlcworCitpZiB7IHsgYWNfdHJ5PSIkYWNfbGlua19kZWZhdWx0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGlua19kZWZhdWx0IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4gOgorICAjIEF1dG9jb25mLTIuMTMgY291bGQgc2V0IHRoZSBhY19jdl9leGVleHQgdmFyaWFibGUgdG8gYG5vJy4KKyMgU28gaWdub3JlIGEgdmFsdWUgb2YgYG5vJywgb3RoZXJ3aXNlIHRoaXMgd291bGQgbGVhZCB0byBgRVhFRVhUID0gbm8nCisjIGluIGEgTWFrZWZpbGUuICBXZSBzaG91bGQgbm90IG92ZXJyaWRlIGFjX2N2X2V4ZWV4dCBpZiBpdCB3YXMgY2FjaGVkLAorIyBzbyB0aGF0IHRoZSB1c2VyIGNhbiBzaG9ydC1jaXJjdWl0IHRoaXMgdGVzdCBmb3IgY29tcGlsZXJzIHVua25vd24gdG8KKyMgQXV0b2NvbmYuCitmb3IgYWNfZmlsZSBpbiAkYWNfZmlsZXMgJycKIGRvCiAgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZQogICBjYXNlICRhY19maWxlIGluCi0gICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm8gfCAqLm9iaiApCi0gICAgICAgIDs7Ci0gICAgY29uZnRlc3QuJGFjX2V4dCApCi0gICAgICAgICMgVGhpcyBpcyB0aGUgc291cmNlIGZpbGUuCi0gICAgICAgIDs7CisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKQorCTs7CiAgICAgW2FiXS5vdXQgKQotICAgICAgICAjIFdlIGZvdW5kIHRoZSBkZWZhdWx0IGV4ZWN1dGFibGUsIGJ1dCBleGVleHQ9JycgaXMgbW9zdAotICAgICAgICAjIGNlcnRhaW5seSByaWdodC4KLSAgICAgICAgYnJlYWs7OworCSMgV2UgZm91bmQgdGhlIGRlZmF1bHQgZXhlY3V0YWJsZSwgYnV0IGV4ZWV4dD0nJyBpcyBtb3N0CisJIyBjZXJ0YWlubHkgcmlnaHQuCisJYnJlYWs7OwogICAgICouKiApCi0gICAgICAgIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAotICAgICAgICAjIEZJWE1FOiBJIGJlbGlldmUgd2UgZXhwb3J0IGFjX2N2X2V4ZWV4dCBmb3IgTGlidG9vbCwKLSAgICAgICAgIyBidXQgaXQgd291bGQgYmUgY29vbCB0byBmaW5kIG91dCBpZiBpdCdzIHRydWUuICBEb2VzIGFueWJvZHkKLSAgICAgICAgIyBtYWludGFpbiBMaWJ0b29sPyAtLWFraW0uCi0gICAgICAgIGV4cG9ydCBhY19jdl9leGVleHQKLSAgICAgICAgYnJlYWs7OworCWlmIHRlc3QgIiR7YWNfY3ZfZXhlZXh0K3NldH0iID0gc2V0ICYmIHRlc3QgIiRhY19jdl9leGVleHQiICE9IG5vOworCXRoZW4gOjsgZWxzZQorCSAgIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAorCWZpCisJIyBXZSBzZXQgYWNfY3ZfZXhlZXh0IGhlcmUgYmVjYXVzZSB0aGUgbGF0ZXIgdGVzdCBmb3IgaXQgaXMgbm90CisJIyBzYWZlOiBjcm9zcyBjb21waWxlcnMgbWF5IG5vdCBhZGQgdGhlIHN1ZmZpeCBpZiBnaXZlbiBhbiBgLW8nCisJIyBhcmd1bWVudCwgc28gd2UgbWF5IG5lZWQgdG8ga25vdyBpdCBhdCB0aGF0IHBvaW50IGFscmVhZHkuCisJIyBFdmVuIGlmIHRoaXMgc2VjdGlvbiBsb29rcyBjcnVmdHk6IGl0IGhhcyB0aGUgYWR2YW50YWdlIG9mCisJIyBhY3R1YWxseSB3b3JraW5nLgorCWJyZWFrOzsKICAgICAqICkKLSAgICAgICAgYnJlYWs7OworCWJyZWFrOzsKICAgZXNhYwogZG9uZQordGVzdCAiJGFjX2N2X2V4ZWV4dCIgPSBubyAmJiBhY19jdl9leGVleHQ9CisKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgYWNfZmlsZT0nJworZmkKK2lmIHRlc3QgLXogIiRhY19maWxlIjsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKLXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogQyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgNzcpOyBleGl0IDc3OyB9OyB9Cit7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yIDc3ICJDIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CiBmaQotCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUuLi4gIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFjX2ZpbGUiID4mNjsgfQogYWNfZXhlZXh0PSRhY19jdl9leGVleHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19maWxlIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19maWxlIiA+JjYKIAotIyBDaGVjayB0aGUgY29tcGlsZXIgcHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCi0jIHRoZSBjb21waWxlciBpcyBicm9rZW4sIG9yIHdlIGNyb3NzIGNvbXBpbGUuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3JrcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MuLi4gJEVDSE9fQyIgPiY2Ci0jIEZJWE1FOiBUaGVzZSBjcm9zcyBjb21waWxlciBoYWNrcyBzaG91bGQgYmUgcmVtb3ZlZCBmb3IgQXV0b2NvbmYgMy4wCi0jIElmIG5vdCBjcm9zcyBjb21waWxpbmcsIGNoZWNrIHRoYXQgd2UgY2FuIHJ1biBhIHNpbXBsZSBwcm9ncmFtLgotaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0geWVzOyB0aGVuCi0gIGlmIHsgYWNfdHJ5PScuLyRhY19maWxlJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gICAgY3Jvc3NfY29tcGlsaW5nPW5vCi0gIGVsc2UKLSAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG1heWJlOyB0aGVuCi0JY3Jvc3NfY29tcGlsaW5nPXllcwotICAgIGVsc2UKLQl7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgcnVuIEMgY29tcGlsZWQgcHJvZ3JhbXMuCi1JZiB5b3UgbWVhbnQgdG8gY3Jvc3MgY29tcGlsZSwgdXNlIFxgLS1ob3N0Jy4KLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBydW4gQyBjb21waWxlZCBwcm9ncmFtcy4KLUlmIHlvdSBtZWFudCB0byBjcm9zcyBjb21waWxlLCB1c2UgXGAtLWhvc3QnLgotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICBmaQotICBmaQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotCi1ybSAtZiBhLm91dCBhLmV4ZSBjb25mdGVzdCRhY19jdl9leGVleHQgYi5vdXQKK3JtIC1mIC1yIGEub3V0IGEub3V0LmRTWU0gYS5leGUgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGIub3V0CiBhY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQotIyBDaGVjayB0aGUgY29tcGlsZXIgcHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCi0jIHRoZSBjb21waWxlciBpcyBicm9rZW4sIG9yIHdlIGNyb3NzIGNvbXBpbGUuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nLi4uICRFQ0hPX0MiID4mNgotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGNyb3NzX2NvbXBpbGluZyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kY3Jvc3NfY29tcGlsaW5nIiA+JjYKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzLi4uICRFQ0hPX0MiID4mNgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPiY1Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBleGVjdXRhYmxlcy4uLiAiID4mNjsgfQoraWYgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6CiAgICMgSWYgYm90aCBgY29uZnRlc3QuZXhlJyBhbmQgYGNvbmZ0ZXN0JyBhcmUgYHByZXNlbnQnICh3ZWxsLCBvYnNlcnZhYmxlKQogIyBjYXRjaCBgY29uZnRlc3QuZXhlJy4gIEZvciBpbnN0YW5jZSB3aXRoIEN5Z3dpbiwgYGxzIGNvbmZ0ZXN0JyB3aWxsCiAjIHdvcmsgcHJvcGVybHkgKGkuZS4sIHJlZmVyIHRvIGBjb25mdGVzdC5leGUnKSwgd2hpbGUgaXQgd29uJ3Qgd2l0aApAQCAtMTgxMSwzOSArMjgyMSw5MCBAQAogZm9yIGFjX2ZpbGUgaW4gY29uZnRlc3QuZXhlIGNvbmZ0ZXN0IGNvbmZ0ZXN0Lio7IGRvCiAgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZQogICBjYXNlICRhY19maWxlIGluCi0gICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm8gfCAqLm9iaiApIDs7CisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKSA7OwogICAgICouKiApIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAotICAgICAgICAgIGV4cG9ydCBhY19jdl9leGVleHQKLSAgICAgICAgICBicmVhazs7CisJICBicmVhazs7CiAgICAgKiApIGJyZWFrOzsKICAgZXNhYwogZG9uZQogZWxzZQotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2YgZXhlY3V0YWJsZXM6IGNhbm5vdCBjb21waWxlIGFuZCBsaW5rCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2YgZXhlY3V0YWJsZXM6IGNhbm5vdCBjb21waWxlIGFuZCBsaW5rCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2YgZXhlY3V0YWJsZXM6IGNhbm5vdCBjb21waWxlIGFuZCBsaW5rCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQogZmkKLQotcm0gLWYgY29uZnRlc3QkYWNfY3ZfZXhlZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZXhlZXh0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9leGVleHQiID4mNgorcm0gLWYgY29uZnRlc3QgY29uZnRlc3QkYWNfY3ZfZXhlZXh0Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2V4ZWV4dCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2V4ZWV4dCIgPiY2OyB9CiAKIHJtIC1mIGNvbmZ0ZXN0LiRhY19leHQKIEVYRUVYVD0kYWNfY3ZfZXhlZXh0CiBhY19leGVleHQ9JEVYRUVYVAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXMuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X29iamV4dCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKLS8qIGNvbmZkZWZzLmguICAqLworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQKK21haW4gKCkKK3sKK0ZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0Lm91dCIsICJ3Iik7CisgcmV0dXJuIGZlcnJvciAoZikgfHwgZmNsb3NlIChmKSAhPSAwOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CiBfQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyBjb25mdGVzdC5vdXQiCisjIENoZWNrIHRoYXQgdGhlIGNvbXBpbGVyIHByb2R1Y2VzIGV4ZWN1dGFibGVzIHdlIGNhbiBydW4uICBJZiBub3QsIGVpdGhlcgorIyB0aGUgY29tcGlsZXIgaXMgYnJva2VuLCBvciB3ZSBjcm9zcyBjb21waWxlLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSB5ZXM7IHRoZW4KKyAgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKyAgaWYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfY3ZfZXhlZXh0JworICB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IH07IHRoZW4KKyAgICBjcm9zc19jb21waWxpbmc9bm8KKyAgZWxzZQorICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbWF5YmU7IHRoZW4KKwljcm9zc19jb21waWxpbmc9eWVzCisgICAgZWxzZQorCXsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBydW4gQyBjb21waWxlZCBwcm9ncmFtcy4KK0lmIHlvdSBtZWFudCB0byBjcm9zcyBjb21waWxlLCB1c2UgXGAtLWhvc3QnLgorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyAgICBmaQorICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY3Jvc3NfY29tcGlsaW5nIiA+JjUKKyRhc19lY2hvICIkY3Jvc3NfY29tcGlsaW5nIiA+JjY7IH0KKworcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdCRhY19jdl9leGVleHQgY29uZnRlc3Qub3V0CithY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9vYmpleHQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIGludApAQCAtMTg1NSw0NiArMjkxNiw0NiBAQAogfQogX0FDRU9GCiBybSAtZiBjb25mdGVzdC5vIGNvbmZ0ZXN0Lm9iagotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1CitpZiB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCi0gIGZvciBhY19maWxlIGluIGAobHMgY29uZnRlc3QubyBjb25mdGVzdC5vYmo7IGxzIGNvbmZ0ZXN0LiopIDI+L2Rldi9udWxsYDsgZG8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4gOgorICBmb3IgYWNfZmlsZSBpbiBjb25mdGVzdC5vIGNvbmZ0ZXN0Lm9iaiBjb25mdGVzdC4qOyBkbworICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWU7CiAgIGNhc2UgJGFjX2ZpbGUgaW4KLSAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyApIDs7CisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNICkgOzsKICAgICAqKSBhY19jdl9vYmpleHQ9YGV4cHIgIiRhY19maWxlIiA6ICcuKlwuXCguKlwpJ2AKICAgICAgICBicmVhazs7CiAgIGVzYWMKIGRvbmUKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKLXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXM6IGNhbm5vdCBjb21waWxlCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzOiBjYW5ub3QgY29tcGlsZQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK3sgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXM6IGNhbm5vdCBjb21waWxlCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQogZmkKLQogcm0gLWYgY29uZnRlc3QuJGFjX2N2X29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X29iamV4dCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3Zfb2JqZXh0IiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfb2JqZXh0IiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfb2JqZXh0IiA+JjY7IH0KIE9CSkVYVD0kYWNfY3Zfb2JqZXh0CiBhY19vYmpleHQ9JE9CSkVYVAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlci4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfY19jb21waWxlcl9nbnUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlci4uLiAiID4mNjsgfQoraWYgJHthY19jdl9jX2NvbXBpbGVyX2dudSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIGludApAQCAtMTkwOCw0NiArMjk2OSwzNCBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2NvbXBpbGVyX2dudT15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY29tcGlsZXJfZ251PW5vCisgIGFjX2NvbXBpbGVyX2dudT1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiBhY19jdl9jX2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251CiAKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjYKLUdDQz1gdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzICYmIGVjaG8geWVzYAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllczsgdGhlbgorICBHQ0M9eWVzCitlbHNlCisgIEdDQz0KK2ZpCiBhY190ZXN0X0NGTEFHUz0ke0NGTEFHUytzZXR9CiBhY19zYXZlX0NGTEFHUz0kQ0ZMQUdTCi1DRkxBR1M9Ii1nIgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWciID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX2crc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfY2NfZys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBhY19zYXZlX2Nfd2Vycm9yX2ZsYWc9JGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGFjX2Nfd2Vycm9yX2ZsYWc9eWVzCisgICBhY19jdl9wcm9nX2NjX2c9bm8KKyAgIENGTEFHUz0iLWciCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIGludApAQCAtMTk1OCwyOSArMzAwNyw0OSBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X3Byb2dfY2NfZz15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgQ0ZMQUdTPSIiCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLWFjX2N2X3Byb2dfY2NfZz1ubworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZworCSBDRkxBR1M9Ii1nIgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19nPXllcwogZmkKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfZyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19jY19nIiA+JjYKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2ciID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX2ciID4mNjsgfQogaWYgdGVzdCAiJGFjX3Rlc3RfQ0ZMQUdTIiA9IHNldDsgdGhlbgogICBDRkxBR1M9JGFjX3NhdmVfQ0ZMQUdTCiBlbGlmIHRlc3QgJGFjX2N2X3Byb2dfY2NfZyA9IHllczsgdGhlbgpAQCAtMTk5NiwyNCArMzA2NSwxOCBAQAogICAgIENGTEFHUz0KICAgZmkKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IEFOU0kgQyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBBTlNJIEMuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2Nfc3RkYytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2NjX2M4OSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGFjX2N2X3Byb2dfY2Nfc3RkYz1ubworICBhY19jdl9wcm9nX2NjX2M4OT1ubwogYWNfc2F2ZV9DQz0kQ0MKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KK3N0cnVjdCBzdGF0OwogLyogTW9zdCBvZiB0aGUgZm9sbG93aW5nIHRlc3RzIGFyZSBzdG9sZW4gZnJvbSBSQ1MgNS43J3Mgc3JjL2NvbmYuc2guICAqLwogc3RydWN0IGJ1ZiB7IGludCB4OyB9OwogRklMRSAqICgqcmNzb3BlbikgKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KTsKQEAgLTIwMzIsNiArMzA5NSwyMSBAQAogICB2YV9lbmQgKHYpOwogICByZXR1cm4gczsKIH0KKworLyogT1NGIDQuMCBDb21wYXEgY2MgaXMgc29tZSBzb3J0IG9mIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQuICBJdCBoYXMKKyAgIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIHN0dWZmLCBidXQgbm90ICdceEhIJyBoZXggY2hhcmFjdGVyIGNvbnN0YW50cy4KKyAgIFRoZXNlIGRvbid0IHByb3Zva2UgYW4gZXJyb3IgdW5mb3J0dW5hdGVseSwgaW5zdGVhZCBhcmUgc2lsZW50bHkgdHJlYXRlZAorICAgYXMgJ3gnLiAgVGhlIGZvbGxvd2luZyBpbmR1Y2VzIGFuIGVycm9yLCB1bnRpbCAtc3RkIGlzIGFkZGVkIHRvIGdldAorICAgcHJvcGVyIEFOU0kgbW9kZS4gIEN1cmlvdXNseSAnXHgwMCchPSd4JyBhbHdheXMgY29tZXMgb3V0IHRydWUsIGZvciBhbgorICAgYXJyYXkgc2l6ZSBhdCBsZWFzdC4gIEl0J3MgbmVjZXNzYXJ5IHRvIHdyaXRlICdceDAwJz09MCB0byBnZXQgc29tZXRoaW5nCisgICB0aGF0J3MgdHJ1ZSBvbmx5IHdpdGggLXN0ZC4gICovCitpbnQgb3NmNF9jY19hcnJheSBbJ1x4MDAnID09IDAgPyAxIDogLTFdOworCisvKiBJQk0gQyA2IGZvciBBSVggaXMgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdCwgYnV0IGl0IHJlcGxhY2VzIG1hY3JvIHBhcmFtZXRlcnMKKyAgIGluc2lkZSBzdHJpbmdzIGFuZCBjaGFyYWN0ZXIgY29uc3RhbnRzLiAgKi8KKyNkZWZpbmUgRk9PKHgpICd4JworaW50IHhsYzZfY2NfYXJyYXlbRk9PKGEpID09ICd4JyA/IDEgOiAtMV07CisKIGludCB0ZXN0IChpbnQgaSwgZG91YmxlIHgpOwogc3RydWN0IHMxIHtpbnQgKCpmKSAoaW50IGEpO307CiBzdHJ1Y3QgczIge2ludCAoKmYpIChkb3VibGUgYSk7fTsKQEAgLTIwNDYsMzUzICszMTI0LDU3IEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi0jIERvbid0IHRyeSBnY2MgLWFuc2k7IHRoYXQgdHVybnMgb2ZmIHVzZWZ1bCBleHRlbnNpb25zIGFuZAotIyBicmVha3Mgc29tZSBzeXN0ZW1zJyBoZWFkZXIgZmlsZXMuCi0jIEFJWAkJCS1xbGFuZ2x2bD1hbnNpCi0jIFVsdHJpeCBhbmQgT1NGLzEJLXN0ZDEKLSMgSFAtVVggMTAuMjAgYW5kIGxhdGVyCS1BZQotIyBIUC1VWCBvbGRlciB2ZXJzaW9ucwktQWEgLURfSFBVWF9TT1VSQ0UKLSMgU1ZSNAkJCS1YYyAtRF9fRVhURU5TSU9OU19fCi1mb3IgYWNfYXJnIGluICIiIC1xbGFuZ2x2bD1hbnNpIC1zdGQxIC1BZSAiLUFhIC1EX0hQVVhfU09VUkNFIiAiLVhjIC1EX19FWFRFTlNJT05TX18iCitmb3IgYWNfYXJnIGluICcnIC1xbGFuZ2x2bD1leHRjODkgLXFsYW5nbHZsPWFuc2kgLXN0ZCBcCisJLUFlICItQWEgLURfSFBVWF9TT1VSQ0UiICItWGMgLURfX0VYVEVOU0lPTlNfXyIKIGRvCiAgIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJnIgotICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfcHJvZ19jY19zdGRjPSRhY19hcmcKLWJyZWFrCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KKyAgaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2NjX2M4OT0kYWNfYXJnCiBmaQotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAorICB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSAieG5vIiAmJiBicmVhawogZG9uZQotcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdC4kYWNfb2JqZXh0CitybSAtZiBjb25mdGVzdC4kYWNfZXh0CiBDQz0kYWNfc2F2ZV9DQwogCiBmaQotCi1jYXNlICJ4JGFjX2N2X3Byb2dfY2Nfc3RkYyIgaW4KLSAgeHx4bm8pCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm9uZSBuZWVkZWQiID4mNQotZWNobyAiJHtFQ0hPX1R9bm9uZSBuZWVkZWQiID4mNiA7OworIyBBQ19DQUNIRV9WQUwKK2Nhc2UgIngkYWNfY3ZfcHJvZ19jY19jODkiIGluCisgIHgpCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKKyRhc19lY2hvICJub25lIG5lZWRlZCIgPiY2OyB9IDs7CisgIHhubykKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdW5zdXBwb3J0ZWQiID4mNQorJGFzX2VjaG8gInVuc3VwcG9ydGVkIiA+JjY7IH0gOzsKICAgKikKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19zdGRjIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2NjX3N0ZGMiID4mNgotICAgIENDPSIkQ0MgJGFjX2N2X3Byb2dfY2Nfc3RkYyIgOzsKKyAgICBDQz0iJENDICRhY19jdl9wcm9nX2NjX2M4OSIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19jODkiID4mNjsgfSA7OwogZXNhYwotCi0jIFNvbWUgcGVvcGxlIHVzZSBhIEMrKyBjb21waWxlciB0byBjb21waWxlIEMuICBTaW5jZSB3ZSB1c2UgYGV4aXQnLAotIyBpbiBDKysgd2UgbmVlZCB0byBkZWNsYXJlIGl0LiAgSW4gY2FzZSBzb21lb25lIHVzZXMgdGhlIHNhbWUgY29tcGlsZXIKLSMgZm9yIGJvdGggY29tcGlsaW5nIEMgYW5kIEMrKyB3ZSBuZWVkIHRvIGhhdmUgdGhlIEMrKyBjb21waWxlciBkZWNpZGUKLSMgdGhlIGRlY2xhcmF0aW9uIG9mIGV4aXQsIHNpbmNlIGl0J3MgdGhlIG1vc3QgZGVtYW5kaW5nIGVudmlyb25tZW50LgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0jaWZuZGVmIF9fY3BsdXNwbHVzCi0gIGNob2tlIG1lCi0jZW5kaWYKLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGZvciBhY19kZWNsYXJhdGlvbiBpbiBcCi0gICAnJ1wKLSAgICcjaW5jbHVkZSA8c3RkbGliLmg+JyBcCi0gICAnZXh0ZXJuICJDIiB2b2lkIHN0ZDo6ZXhpdCAoaW50KSB0aHJvdyAoKTsgdXNpbmcgc3RkOjpleGl0OycgXAotICAgJ2V4dGVybiAiQyIgdm9pZCBzdGQ6OmV4aXQgKGludCk7IHVzaW5nIHN0ZDo6ZXhpdDsnIFwKLSAgICdleHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KSB0aHJvdyAoKTsnIFwKLSAgICdleHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KTsnIFwKLSAgICd2b2lkIGV4aXQgKGludCk7JwotZG8KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0jbGluZSAkTElORU5PICJjb25maWd1cmUiCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0kYWNfZGVjbGFyYXRpb24KLWludAotbWFpbiAoKQotewotZXhpdCAoNDIpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgOgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1jb250aW51ZQotZmkKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19kZWNsYXJhdGlvbgotaW50Ci1tYWluICgpCi17Ci1leGl0ICg0Mik7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBicmVhawotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQoraWYgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0geG5vOyB0aGVuIDoKIAogZmkKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZG9uZQotcm0gLWYgY29uZnRlc3QqCi1pZiB0ZXN0IC1uICIkYWNfZGVjbGFyYXRpb24iOyB0aGVuCi0gIGVjaG8gJyNpZmRlZiBfX2NwbHVzcGx1cycgPj5jb25mZGVmcy5oCi0gIGVjaG8gJGFjX2RlY2xhcmF0aW9uICAgICAgPj5jb25mZGVmcy5oCi0gIGVjaG8gJyNlbmRpZicgICAgICAgICAgICAgPj5jb25mZGVmcy5oCi1maQogCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWZpCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGFjX2V4dD1jCiBhY19jcHA9JyRDUFAgJENQUEZMQUdTJwogYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwogYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKIGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKIAotCi0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzb2NrZXQgaW4gLWxzb2NrZXQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc29ja2V0IGluIC1sc29ja2V0Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfc29ja2V0X3NvY2tldCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbHNvY2tldCAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBzb2NrZXQgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXNvY2tldCAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9zb2NrZXRfc29ja2V0PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfc29ja2V0X3NvY2tldD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3NvY2tldF9zb2NrZXQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9zb2NrZXRfc29ja2V0IiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9zb2NrZXRfc29ja2V0ID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9MSUJTT0NLRVQgMQotX0FDRU9GCi0KLSAgTElCUz0iLWxzb2NrZXQgJExJQlMiCi0KLWZpCi0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzcnRwX2luaXQgaW4gLWxzcnRwIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNydHBfaW5pdCBpbiAtbHNydHAuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9zcnRwX3NydHBfaW5pdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbHNydHAgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0jbGluZSAkTElORU5PICJjb25maWd1cmUiCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgc3J0cF9pbml0ICgpOwotaW50Ci1tYWluICgpCi17Ci1zcnRwX2luaXQgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfc3J0cF9zcnRwX2luaXQ9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9zcnRwX3NydHBfaW5pdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3NydHBfc3J0cF9pbml0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfc3J0cF9zcnRwX2luaXQiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX3NydHBfc3J0cF9pbml0ID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9MSUJTUlRQIDEKLV9BQ0VPRgotCi0gIExJQlM9Ii1sc3J0cCAkTElCUyIKLQotZmkKLQotCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgL2Rldi91cmFuZG9tIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIC9kZXYvdXJhbmRvbS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfZmlsZV9fZGV2X3VyYW5kb20rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgJiYKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNoZWNrIGZvciBmaWxlIGV4aXN0ZW5jZSB3aGVuIGNyb3NzIGNvbXBpbGluZyIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY2hlY2sgZm9yIGZpbGUgZXhpc3RlbmNlIHdoZW4gY3Jvc3MgY29tcGlsaW5nIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1pZiB0ZXN0IC1yICIvZGV2L3VyYW5kb20iOyB0aGVuCi0gIGFjX2N2X2ZpbGVfX2Rldl91cmFuZG9tPXllcwotZWxzZQotICBhY19jdl9maWxlX19kZXZfdXJhbmRvbT1ubwotZmkKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZmlsZV9fZGV2X3VyYW5kb20iID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2ZpbGVfX2Rldl91cmFuZG9tIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2ZpbGVfX2Rldl91cmFuZG9tID0geWVzOyB0aGVuCi0gIERFVl9VUkFORE9NPTEKLWVsc2UKLSAgREVWX1VSQU5ET009MAotZmkKLQotaWYgdGVzdCAkREVWX1VSQU5ET00gPSAxOyB0aGVuCi0gICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBERVZfVVJBTkRPTSAxCi1fQUNFT0YKLQotICAgUk5HX09CSlM9Y3J5cHRvL3JuZy9yYW5kX3NvdXJjZS5jCi0KLWZpCi0KLQogYWNfZXh0PWMKIGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCiBhY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCiBhY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwogYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IuLi4gJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yLi4uICIgPiY2OyB9CiAjIE9uIFN1bnMsIHNvbWV0aW1lcyAkQ1BQIG5hbWVzIGEgZGlyZWN0b3J5LgogaWYgdGVzdCAtbiAiJENQUCIgJiYgdGVzdCAtZCAiJENQUCI7IHRoZW4KICAgQ1BQPQogZmkKIGlmIHRlc3QgLXogIiRDUFAiOyB0aGVuCi0gIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DUFArc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgaWYgJHthY19jdl9wcm9nX0NQUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgICAgICAjIERvdWJsZSBxdW90ZXMgYmVjYXVzZSBDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKICAgICBmb3IgQ1BQIGluICIkQ0MgLUUiICIkQ0MgLUUgLXRyYWRpdGlvbmFsLWNwcCIgIi9saWIvY3BwIgpAQCAtMjQwNiw5MSArMzE4OCw0MyBAQAogICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KICAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKICAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaWZkZWYgX19TVERDX18KICMgaW5jbHVkZSA8bGltaXRzLmg+CiAjZWxzZQogIyBpbmNsdWRlIDxhc3NlcnQuaD4KICNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgU3ludGF4IGVycm9yCisJCSAgICAgU3ludGF4IGVycm9yCiBfQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIDoKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgogCitlbHNlCiAgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KIGNvbnRpbnVlCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKIAotICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uLWV4aXN0ZW50IGhlYWRlcnMKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKICAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0jbGluZSAkTElORU5PICJjb25maWd1cmUiCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgogX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CiAgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCiBjb250aW51ZQogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCiAgICMgUGFzc2VzIGJvdGggdGVzdHMuCiBhY19wcmVwcm9jX29rPToKIGJyZWFrCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKIAogZG9uZQogIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotaWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4KK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKICAgYnJlYWsKIGZpCiAKQEAgLTI1MDIsOCArMzIzNiw4IEBACiBlbHNlCiAgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ1BQIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRDUFAiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDUFAiID4mNQorJGFzX2VjaG8gIiRDUFAiID4mNjsgfQogYWNfcHJlcHJvY19vaz1mYWxzZQogZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCiBkbwpAQCAtMjUxMyw5OCArMzI0Nyw0OSBAQAogICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KICAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKICAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaWZkZWYgX19TVERDX18KICMgaW5jbHVkZSA8bGltaXRzLmg+CiAjZWxzZQogIyBpbmNsdWRlIDxhc3NlcnQuaD4KICNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgU3ludGF4IGVycm9yCisJCSAgICAgU3ludGF4IGVycm9yCiBfQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIDoKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgogCitlbHNlCiAgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KIGNvbnRpbnVlCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKIAotICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uLWV4aXN0ZW50IGhlYWRlcnMKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKICAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0jbGluZSAkTElORU5PICJjb25maWd1cmUiCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgogX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CiAgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCiBjb250aW51ZQogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCiAgICMgUGFzc2VzIGJvdGggdGVzdHMuCiBhY19wcmVwcm9jX29rPToKIGJyZWFrCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKIAogZG9uZQogIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotaWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4KLSAgOgorcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgorCiBlbHNlCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEMgcHJlcHJvY2Vzc29yIFwiJENQUFwiIGZhaWxzIHNhbml0eSBjaGVjawotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJDIHByZXByb2Nlc3NvciBcIiRDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CiBmaQogCiBhY19leHQ9YwpAQCAtMjYxMywzMyArMzI5OCw4NjAgQEAKIGFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCiBhY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CiAKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBlZ3JlcCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19lZ3JlcCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorYWNfZXh0PWNwcAorYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKK2lmIHRlc3QgLXogIiRDWFgiOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRDQ0MiOyB0aGVuCisgICAgQ1hYPSRDQ0MKKyAgZWxzZQorICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgZm9yIGFjX3Byb2cgaW4gZysrIGMrKyBncHAgYUNDIENDIGN4eCBjYysrIGNsLmV4ZSBGQ0MgS0NDIFJDQyB4bENfciB4bEMKKyAgZG8KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgaWYgZWNobyBhIHwgKGdyZXAgLUUgJyhhfGIpJykgPi9kZXYvbnVsbCAyPiYxCi0gICAgdGhlbiBhY19jdl9wcm9nX2VncmVwPSdncmVwIC1FJwotICAgIGVsc2UgYWNfY3ZfcHJvZ19lZ3JlcD0nZWdyZXAnCi0gICAgZmkKKyAgaWYgdGVzdCAtbiAiJENYWCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DWFg9IiRDWFgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19DWFg9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfZWdyZXAiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfZWdyZXAiID4mNgotIEVHUkVQPSRhY19jdl9wcm9nX2VncmVwCi0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zdGRjK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitmaQorQ1hYPSRhY19jdl9wcm9nX0NYWAoraWYgdGVzdCAtbiAiJENYWCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDWFgiID4mNQorJGFzX2VjaG8gIiRDWFgiID4mNjsgfQogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKLS8qIGNvbmZkZWZzLmguICAqLworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgIHRlc3QgLW4gIiRDWFgiICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkQ1hYIjsgdGhlbgorICBhY19jdF9DWFg9JENYWAorICBmb3IgYWNfcHJvZyBpbiBnKysgYysrIGdwcCBhQ0MgQ0MgY3h4IGNjKysgY2wuZXhlIEZDQyBLQ0MgUkNDIHhsQ19yIHhsQworZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9DWFgiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQ1hYPSIkYWNfY3RfQ1hYIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQ1hYPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9DWFg9JGFjX2N2X3Byb2dfYWNfY3RfQ1hYCitpZiB0ZXN0IC1uICIkYWNfY3RfQ1hYIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NYWCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0NYWCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRhY19jdF9DWFgiICYmIGJyZWFrCitkb25lCisKKyAgaWYgdGVzdCAieCRhY19jdF9DWFgiID0geDsgdGhlbgorICAgIENYWD0iZysrIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIENYWD0kYWNfY3RfQ1hYCisgIGZpCitmaQorCisgIGZpCitmaQorIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgorJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEMrKyBjb21waWxlciB2ZXJzaW9uIiA+JjUKK3NldCBYICRhY19jb21waWxlCithY19jb21waWxlcj0kMgorZm9yIGFjX29wdGlvbiBpbiAtLXZlcnNpb24gLXYgLVYgLXF2ZXJzaW9uOyBkbworICB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIHNlZCAnMTBhXAorLi4uIHJlc3Qgb2Ygc3RkZXJyIG91dHB1dCBkZWxldGVkIC4uLgorICAgICAgICAgMTBxJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KK2RvbmUKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMrKyBjb21waWxlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMrKyBjb21waWxlci4uLiAiID4mNjsgfQoraWYgJHthY19jdl9jeHhfY29tcGlsZXJfZ251Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKyNpZm5kZWYgX19HTlVDX18KKyAgICAgICBjaG9rZSBtZQorI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KIF9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY29tcGlsZXJfZ251PXllcworZWxzZQorICBhY19jb21waWxlcl9nbnU9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2FjX2N2X2N4eF9jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jeHhfY29tcGlsZXJfZ251IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfY3h4X2NvbXBpbGVyX2dudSIgPiY2OyB9CitpZiB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXM7IHRoZW4KKyAgR1hYPXllcworZWxzZQorICBHWFg9CitmaQorYWNfdGVzdF9DWFhGTEFHUz0ke0NYWEZMQUdTK3NldH0KK2FjX3NhdmVfQ1hYRkxBR1M9JENYWEZMQUdTCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENYWCBhY2NlcHRzIC1nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENYWCBhY2NlcHRzIC1nLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfY3h4X2crOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19zYXZlX2N4eF93ZXJyb3JfZmxhZz0kYWNfY3h4X3dlcnJvcl9mbGFnCisgICBhY19jeHhfd2Vycm9yX2ZsYWc9eWVzCisgICBhY19jdl9wcm9nX2N4eF9nPW5vCisgICBDWFhGTEFHUz0iLWciCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2N4eF9nPXllcworZWxzZQorICBDWFhGTEFHUz0iIgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICBhY19jeHhfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY3h4X3dlcnJvcl9mbGFnCisJIENYWEZMQUdTPSItZyIKKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jeHhfZz15ZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGFjX2N4eF93ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jeHhfd2Vycm9yX2ZsYWcKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY3h4X2ciID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2N4eF9nIiA+JjY7IH0KK2lmIHRlc3QgIiRhY190ZXN0X0NYWEZMQUdTIiA9IHNldDsgdGhlbgorICBDWFhGTEFHUz0kYWNfc2F2ZV9DWFhGTEFHUworZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2N4eF9nID0geWVzOyB0aGVuCisgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgQ1hYRkxBR1M9Ii1nIC1PMiIKKyAgZWxzZQorICAgIENYWEZMQUdTPSItZyIKKyAgZmkKK2Vsc2UKKyAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICBDWFhGTEFHUz0iLU8yIgorICBlbHNlCisgICAgQ1hYRkxBR1M9CisgIGZpCitmaQorYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisKK2FjX2F1eF9kaXI9Citmb3IgYWNfZGlyIGluICIkc3JjZGlyIiAiJHNyY2Rpci8uLiIgIiRzcmNkaXIvLi4vLi4iOyBkbworICBpZiB0ZXN0IC1mICIkYWNfZGlyL2luc3RhbGwtc2giOyB0aGVuCisgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC1zaCAtYyIKKyAgICBicmVhaworICBlbGlmIHRlc3QgLWYgIiRhY19kaXIvaW5zdGFsbC5zaCI7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9pbnN0YWxsLnNoIC1jIgorICAgIGJyZWFrCisgIGVsaWYgdGVzdCAtZiAiJGFjX2Rpci9zaHRvb2wiOyB0aGVuCisgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvc2h0b29sIGluc3RhbGwgLWMiCisgICAgYnJlYWsKKyAgZmkKK2RvbmUKK2lmIHRlc3QgLXogIiRhY19hdXhfZGlyIjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGZpbmQgaW5zdGFsbC1zaCwgaW5zdGFsbC5zaCwgb3Igc2h0b29sIGluIFwiJHNyY2RpclwiIFwiJHNyY2Rpci8uLlwiIFwiJHNyY2Rpci8uLi8uLlwiIiAiJExJTkVOTyIgNQorZmkKKworIyBUaGVzZSB0aHJlZSB2YXJpYWJsZXMgYXJlIHVuZG9jdW1lbnRlZCBhbmQgdW5zdXBwb3J0ZWQsCisjIGFuZCBhcmUgaW50ZW5kZWQgdG8gYmUgd2l0aGRyYXduIGluIGEgZnV0dXJlIEF1dG9jb25mIHJlbGVhc2UuCisjIFRoZXkgY2FuIGNhdXNlIHNlcmlvdXMgcHJvYmxlbXMgaWYgYSBidWlsZGVyJ3Mgc291cmNlIHRyZWUgaXMgaW4gYSBkaXJlY3RvcnkKKyMgd2hvc2UgZnVsbCBuYW1lIGNvbnRhaW5zIHVudXN1YWwgY2hhcmFjdGVycy4KK2FjX2NvbmZpZ19ndWVzcz0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5ndWVzcyIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KK2FjX2NvbmZpZ19zdWI9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorYWNfY29uZmlndXJlPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlndXJlIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorCisKKyMgRXhwYW5kICRhY19hdXhfZGlyIHRvIGFuIGFic29sdXRlIHBhdGguCithbV9hdXhfZGlyPWBjZCAiJGFjX2F1eF9kaXIiICYmIHB3ZGAKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluIGFyIGxpYiAibGluayAtbGliIgorICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19BUis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19BUj0iJEFSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfQVI9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0FSPSRhY19jdl9wcm9nX0FSCitpZiB0ZXN0IC1uICIkQVIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQVIiID4mNQorJGFzX2VjaG8gIiRBUiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgdGVzdCAtbiAiJEFSIiAmJiBicmVhaworICBkb25lCitmaQoraWYgdGVzdCAteiAiJEFSIjsgdGhlbgorICBhY19jdF9BUj0kQVIKKyAgZm9yIGFjX3Byb2cgaW4gYXIgbGliICJsaW5rIC1saWIiCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfQVIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19jdF9BUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9BUj0kYWNfY3ZfcHJvZ19hY19jdF9BUgoraWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0FSIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQVIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkYWNfY3RfQVIiICYmIGJyZWFrCitkb25lCisKKyAgaWYgdGVzdCAieCRhY19jdF9BUiIgPSB4OyB0aGVuCisgICAgQVI9ImZhbHNlIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIEFSPSRhY19jdF9BUgorICBmaQorZmkKKworOiAke0FSPWFyfQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRoZSBhcmNoaXZlciAoJEFSKSBpbnRlcmZhY2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdGhlIGFyY2hpdmVyICgkQVIpIGludGVyZmFjZS4uLiAiID4mNjsgfQoraWYgJHthbV9jdl9hcl9pbnRlcmZhY2UrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKyAgIGFtX2N2X2FyX2ludGVyZmFjZT1hcgorICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworaW50IHNvbWVfdmFyaWFibGUgPSAwOworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFtX2FyX3RyeT0nJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiY1JworICAgICAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFtX2FyX3RyeVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFtX2FyX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKyAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCisgICAgICAgIGFtX2N2X2FyX2ludGVyZmFjZT1hcgorICAgICAgZWxzZQorICAgICAgICBhbV9hcl90cnk9JyRBUiAtTk9MT0dPIC1PVVQ6Y29uZnRlc3QubGliIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiY1JworICAgICAgICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYW1fYXJfdHJ5XCIiOyB9ID4mNQorICAoZXZhbCAkYW1fYXJfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorICAgICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgorICAgICAgICAgIGFtX2N2X2FyX2ludGVyZmFjZT1saWIKKyAgICAgICAgZWxzZQorICAgICAgICAgIGFtX2N2X2FyX2ludGVyZmFjZT11bmtub3duCisgICAgICAgIGZpCisgICAgICBmaQorICAgICAgcm0gLWYgY29uZnRlc3QubGliIGxpYmNvbmZ0ZXN0LmEKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9hcl9pbnRlcmZhY2UiID4mNQorJGFzX2VjaG8gIiRhbV9jdl9hcl9pbnRlcmZhY2UiID4mNjsgfQorCitjYXNlICRhbV9jdl9hcl9pbnRlcmZhY2UgaW4KK2FyKQorICA7OworbGliKQorICAjIE1pY3Jvc29mdCBsaWIsIHNvIG92ZXJyaWRlIHdpdGggdGhlIGFyLWxpYiB3cmFwcGVyIHNjcmlwdC4KKyAgIyBGSVhNRTogSXQgaXMgd3JvbmcgdG8gcmV3cml0ZSBBUi4KKyAgIyBCdXQgaWYgd2UgZG9uJ3QgdGhlbiB3ZSBnZXQgaW50byB0cm91YmxlIG9mIG9uZSBzb3J0IG9yIGFub3RoZXIuCisgICMgQSBsb25nZXItdGVybSBmaXggd291bGQgYmUgdG8gaGF2ZSBhdXRvbWFrZSB1c2UgYW1fX0FSIGluIHRoaXMgY2FzZSwKKyAgIyBhbmQgdGhlbiB3ZSBjb3VsZCBzZXQgYW1fX0FSPSIkYW1fYXV4X2Rpci9hci1saWIgXCQoQVIpIiBvciBzb21ldGhpbmcKKyAgIyBzaW1pbGFyLgorICBBUj0iJGFtX2F1eF9kaXIvYXItbGliICRBUiIKKyAgOzsKK3Vua25vd24pCisgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgZGV0ZXJtaW5lICRBUiBpbnRlcmZhY2UiICIkTElORU5PIiA1CisgIDs7Citlc2FjCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1yYW5saWI7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX1JBTkxJQis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfUkFOTElCPSIkUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfUkFOTElCPSIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitSQU5MSUI9JGFjX2N2X3Byb2dfUkFOTElCCitpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFJBTkxJQiIgPiY1CiskYXNfZWNobyAiJFJBTkxJQiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfUkFOTElCIjsgdGhlbgorICBhY19jdF9SQU5MSUI9JFJBTkxJQgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcmFubGliOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0iJGFjX2N0X1JBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0icmFubGliIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X1JBTkxJQj0kYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIKK2lmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfUkFOTElCIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfUkFOTElCIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfUkFOTElCIiA9IHg7IHRoZW4KKyAgICBSQU5MSUI9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgUkFOTElCPSRhY19jdF9SQU5MSUIKKyAgZmkKK2Vsc2UKKyAgUkFOTElCPSIkYWNfY3ZfcHJvZ19SQU5MSUIiCitmaQorCisjIEZpbmQgYSBnb29kIGluc3RhbGwgcHJvZ3JhbS4gIFdlIHByZWZlciBhIEMgcHJvZ3JhbSAoZmFzdGVyKSwKKyMgc28gb25lIHNjcmlwdCBpcyBhcyBnb29kIGFzIGFub3RoZXIuICBCdXQgYXZvaWQgdGhlIGJyb2tlbiBvcgorIyBpbmNvbXBhdGlibGUgdmVyc2lvbnM6CisjIFN5c1YgL2V0Yy9pbnN0YWxsLCAvdXNyL3NiaW4vaW5zdGFsbAorIyBTdW5PUyAvdXNyL2V0Yy9pbnN0YWxsCisjIElSSVggL3NiaW4vaW5zdGFsbAorIyBBSVggL2Jpbi9pbnN0YWxsCisjIEFtaWdhT1MgL0MvaW5zdGFsbCwgd2hpY2ggaW5zdGFsbHMgYm9vdGJsb2NrcyBvbiBmbG9wcHkgZGlzY3MKKyMgQUlYIDQgL3Vzci9iaW4vaW5zdGFsbGJzZCwgd2hpY2ggZG9lc24ndCB3b3JrIHdpdGhvdXQgYSAtZyBmbGFnCisjIEFGUyAvdXNyL2Fmc3dzL2Jpbi9pbnN0YWxsLCB3aGljaCBtaXNoYW5kbGVzIG5vbmV4aXN0ZW50IGFyZ3MKKyMgU1ZSNCAvdXNyL3VjYi9pbnN0YWxsLCB3aGljaCB0cmllcyB0byB1c2UgdGhlIG5vbmV4aXN0ZW50IGdyb3VwICJzdGFmZiIKKyMgT1MvMidzIHN5c3RlbSBpbnN0YWxsLCB3aGljaCBoYXMgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBzZW1hbnRpYworIyAuL2luc3RhbGwsIHdoaWNoIGNhbiBiZSBlcnJvbmVvdXNseSBjcmVhdGVkIGJ5IG1ha2UgZnJvbSAuL2luc3RhbGwuc2guCisjIFJlamVjdCBpbnN0YWxsIHByb2dyYW1zIHRoYXQgY2Fubm90IGluc3RhbGwgbXVsdGlwbGUgZmlsZXMuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbC4uLiAiID4mNjsgfQoraWYgdGVzdCAteiAiJElOU1RBTEwiOyB0aGVuCitpZiAke2FjX2N2X3BhdGhfaW5zdGFsbCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAjIEFjY291bnQgZm9yIHBlb3BsZSB3aG8gcHV0IHRyYWlsaW5nIHNsYXNoZXMgaW4gUEFUSCBlbGVtZW50cy4KK2Nhc2UgJGFzX2Rpci8gaW4gIygoCisgIC4vIHwgLi8vIHwgL1tjQ10vKiB8IFwKKyAgL2V0Yy8qIHwgL3Vzci9zYmluLyogfCAvdXNyL2V0Yy8qIHwgL3NiaW4vKiB8IC91c3IvYWZzd3MvYmluLyogfCBcCisgID86W1xcL11vczJbXFwvXWluc3RhbGxbXFwvXSogfCA/OltcXC9dT1MyW1xcL11JTlNUQUxMW1xcL10qIHwgXAorICAvdXNyL3VjYi8qICkgOzsKKyAgKikKKyAgICAjIE9TRjEgYW5kIFNDTyBPRFQgMy4wIGhhdmUgdGhlaXIgb3duIG5hbWVzIGZvciBpbnN0YWxsLgorICAgICMgRG9uJ3QgdXNlIGluc3RhbGxic2QgZnJvbSBPU0Ygc2luY2UgaXQgaW5zdGFsbHMgc3R1ZmYgYXMgcm9vdAorICAgICMgYnkgZGVmYXVsdC4KKyAgICBmb3IgYWNfcHJvZyBpbiBnaW5zdGFsbCBzY29pbnN0IGluc3RhbGw7IGRvCisgICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKwlpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB0aGVuCisJICBpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgorCSAgICBncmVwIGRzcG1zZyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICAgICMgQUlYIGluc3RhbGwuICBJdCBoYXMgYW4gaW5jb21wYXRpYmxlIGNhbGxpbmcgY29udmVudGlvbi4KKwkgICAgOgorCSAgZWxpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgorCSAgICBncmVwIHB3cGx1cyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICAgICMgcHJvZ3JhbS1zcGVjaWZpYyBpbnN0YWxsIHNjcmlwdCB1c2VkIGJ5IEhQIHB3cGx1cy0tZG9uJ3QgdXNlLgorCSAgICA6CisJICBlbHNlCisJICAgIHJtIC1yZiBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvIGNvbmZ0ZXN0LmRpcgorCSAgICBlY2hvIG9uZSA+IGNvbmZ0ZXN0Lm9uZQorCSAgICBlY2hvIHR3byA+IGNvbmZ0ZXN0LnR3bworCSAgICBta2RpciBjb25mdGVzdC5kaXIKKwkgICAgaWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiIC1jIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gImBwd2RgL2NvbmZ0ZXN0LmRpciIgJiYKKwkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0Lm9uZSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LnR3byAmJgorCSAgICAgIHRlc3QgLXMgY29uZnRlc3QuZGlyL2NvbmZ0ZXN0Lm9uZSAmJgorCSAgICAgIHRlc3QgLXMgY29uZnRlc3QuZGlyL2NvbmZ0ZXN0LnR3bworCSAgICB0aGVuCisJICAgICAgYWNfY3ZfcGF0aF9pbnN0YWxsPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IC1jIgorCSAgICAgIGJyZWFrIDMKKwkgICAgZmkKKwkgIGZpCisJZmkKKyAgICAgIGRvbmUKKyAgICBkb25lCisgICAgOzsKK2VzYWMKKworICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK3JtIC1yZiBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvIGNvbmZ0ZXN0LmRpcgorCitmaQorICBpZiB0ZXN0ICIke2FjX2N2X3BhdGhfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbgorICAgIElOU1RBTEw9JGFjX2N2X3BhdGhfaW5zdGFsbAorICBlbHNlCisgICAgIyBBcyBhIGxhc3QgcmVzb3J0LCB1c2UgdGhlIHNsb3cgc2hlbGwgc2NyaXB0LiAgRG9uJ3QgY2FjaGUgYQorICAgICMgdmFsdWUgZm9yIElOU1RBTEwgd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKKyAgICAjIGJyZWFrIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBjYWNoZSBpZiB0aGF0IGRpcmVjdG9yeSBpcworICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVsYXRpdmUgbmFtZS4KKyAgICBJTlNUQUxMPSRhY19pbnN0YWxsX3NoCisgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRJTlNUQUxMIiA+JjUKKyRhc19lY2hvICIkSU5TVEFMTCIgPiY2OyB9CisKKyMgVXNlIHRlc3QgLXogYmVjYXVzZSBTdW5PUzQgc2ggbWlzaGFuZGxlcyBicmFjZXMgaW4gJHt2YXItdmFsfS4KKyMgSXQgdGhpbmtzIHRoZSBmaXJzdCBjbG9zZSBicmFjZSBlbmRzIHRoZSB2YXJpYWJsZSBzdWJzdGl0dXRpb24uCit0ZXN0IC16ICIkSU5TVEFMTF9QUk9HUkFNIiAmJiBJTlNUQUxMX1BST0dSQU09JyR7SU5TVEFMTH0nCisKK3Rlc3QgLXogIiRJTlNUQUxMX1NDUklQVCIgJiYgSU5TVEFMTF9TQ1JJUFQ9JyR7SU5TVEFMTH0nCisKK3Rlc3QgLXogIiRJTlNUQUxMX0RBVEEiICYmIElOU1RBTExfREFUQT0nJHtJTlNUQUxMfSAtbSA2NDQnCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX1NFRCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICAgICAgICAgICBhY19zY3JpcHQ9cy9hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYS9iYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIvCisgICAgIGZvciBhY19pIGluIDEgMiAzIDQgNSA2IDc7IGRvCisgICAgICAgYWNfc2NyaXB0PSIkYWNfc2NyaXB0JGFzX25sJGFjX3NjcmlwdCIKKyAgICAgZG9uZQorICAgICBlY2hvICIkYWNfc2NyaXB0IiAyPi9kZXYvbnVsbCB8IHNlZCA5OXEgPmNvbmZ0ZXN0LnNlZAorICAgICB7IGFjX3NjcmlwdD07IHVuc2V0IGFjX3NjcmlwdDt9CisgICAgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgIGFjX3BhdGhfU0VEX2ZvdW5kPWZhbHNlCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBzZWQgZ3NlZDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGFjX3BhdGhfU0VEPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgYXNfZm5fZXhlY3V0YWJsZV9wICIkYWNfcGF0aF9TRUQiIHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9TRUQgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX1NFRAorY2FzZSBgIiRhY19wYXRoX1NFRCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9TRUQ9IiRhY19wYXRoX1NFRCIgYWNfcGF0aF9TRURfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJycgPj4gImNvbmZ0ZXN0Lm5sIgorICAgICIkYWNfcGF0aF9TRUQiIC1mIGNvbmZ0ZXN0LnNlZCA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAorICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfU0VEX21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBhY19jdl9wYXRoX1NFRD0iJGFjX3BhdGhfU0VEIgorICAgICAgYWNfcGF0aF9TRURfbWF4PSRhY19jb3VudAorICAgIGZpCisgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25lCisgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworZXNhYworCisgICAgICAkYWNfcGF0aF9TRURfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKKyAgZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX1NFRCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBzZWQgY291bGQgYmUgZm91bmQgaW4gXCRQQVRIIiAiJExJTkVOTyIgNQorICBmaQorZWxzZQorICBhY19jdl9wYXRoX1NFRD0kU0VECitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX1NFRCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfU0VEIiA+JjY7IH0KKyBTRUQ9IiRhY19jdl9wYXRoX1NFRCIKKyAgcm0gLWYgY29uZnRlc3Quc2VkCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9HUkVQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgIGFjX3BhdGhfR1JFUF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIGdyZXAgZ2dyZXA7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX0dSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICBhc19mbl9leGVjdXRhYmxlX3AgIiRhY19wYXRoX0dSRVAiIHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9HUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9HUkVQCitjYXNlIGAiJGFjX3BhdGhfR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIiBhY19wYXRoX0dSRVBfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJ0dSRVAnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfR1JFUCIgLWUgJ0dSRVAkJyAtZSAnLShjYW5ub3QgbWF0Y2gpLScgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0dSRVBfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIKKyAgICAgIGFjX3BhdGhfR1JFUF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX0dSRVBfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKKyAgZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX0dSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfR1JFUD0kR1JFUAorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9HUkVQIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9HUkVQIiA+JjY7IH0KKyBHUkVQPSIkYWNfY3ZfcGF0aF9HUkVQIgorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGVncmVwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0VHUkVQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgZWNobyBhIHwgJEdSRVAgLUUgJyhhfGIpJyA+L2Rldi9udWxsIDI+JjEKKyAgIHRoZW4gYWNfY3ZfcGF0aF9FR1JFUD0iJEdSRVAgLUUiCisgICBlbHNlCisgICAgIGlmIHRlc3QgLXogIiRFR1JFUCI7IHRoZW4KKyAgYWNfcGF0aF9FR1JFUF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIGVncmVwOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9FR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFjX3BhdGhfRUdSRVAiIHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9FR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfRUdSRVAKK2Nhc2UgYCIkYWNfcGF0aF9FR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9FR1JFUD0iJGFjX3BhdGhfRUdSRVAiIGFjX3BhdGhfRUdSRVBfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJ0VHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX0VHUkVQIiAnRUdSRVAkJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAorICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfRUdSRVBfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIgorICAgICAgYWNfcGF0aF9FR1JFUF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX0VHUkVQX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9FR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBlZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfRUdSRVA9JEVHUkVQCitmaQorCisgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9FR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfRUdSRVAiID4mNjsgfQorIEVHUkVQPSIkYWNfY3ZfcGF0aF9FR1JFUCIKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2hlYWRlcl9zdGRjKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgpAQCAtMjY1NCw0MiArNDE2NiwyMyBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2hlYWRlcl9zdGRjPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9oZWFkZXJfc3RkYz1ubworICBhY19jdl9oZWFkZXJfc3RkYz1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiAKIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCiAgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0jbGluZSAkTElORU5PICJjb25maWd1cmUiCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAogX0FDRU9GCiBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgOgorICAkRUdSRVAgIm1lbWNociIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKwogZWxzZQogICBhY19jdl9oZWFkZXJfc3RkYz1ubwogZmkKQEAgLTI2OTksMTkgKzQxOTIsMTQgQEAKIAogaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KICAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCiBfQUNFT0YKIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgOgorICAkRUdSRVAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKIGVsc2UKICAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KIGZpCkBAIC0yNzIxLDI1ICs0MjA5LDIxIEBACiAKIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCiAgICMgL2Jpbi9jYyBpbiBJcml4LTQuMC41IGdldHMgbm9uLUFOU0kgY3R5cGUgbWFjcm9zIHVubGVzcyB1c2luZyAtYW5zaS4KLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgogICA6CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KICNpZiAoKCcgJyAmIDB4MEZGKSA9PSAweDAyMCkKICMgZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8PSAoYykgJiYgKGMpIDw9ICd6JykKICMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKICNlbHNlCiAjIGRlZmluZSBJU0xPV0VSKGMpIFwKLSAgICAgICAgICAgICAgICAgICAoKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdpJykgXAotICAgICAgICAgICAgICAgICAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAotICAgICAgICAgICAgICAgICAgICAgfHwgKCdzJyA8PSAoYykgJiYgKGMpIDw9ICd6JykpCisJCSAgICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCisJCSAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAorCQkgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQogIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICgoYykgfCAweDQwKSA6IChjKSkKICNlbmRpZgogCkBAIC0yNzUwLDEwMSArNDIzNCw0MCBAQAogICBpbnQgaTsKICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQogICAgIGlmIChYT1IgKGlzbG93ZXIgKGkpLCBJU0xPV0VSIChpKSkKLSAgICAgICAgfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCi0gICAgICBleGl0KDIpOwotICBleGl0ICgwKTsKKwl8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKKyAgICAgIHJldHVybiAyOworICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIDoKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKLWVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKIAotKCBleGl0ICRhY19zdGF0dXMgKQotYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KIGZpCi1ybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKIGZpCiBmaQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjY7IH0KIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIFNURENfSEVBREVSUyAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIFNURENfSEVBREVSUyAxIiA+PmNvbmZkZWZzLmgKIAogZmkKIAogIyBPbiBJUklYIDUuMywgc3lzL3R5cGVzIGFuZCBpbnR0eXBlcy5oIGFyZSBjb25mbGljdGluZy4KLQotCi0KLQotCi0KLQotCi0KIGZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3N0YXQuaCBzdGRsaWIuaCBzdHJpbmcuaCBtZW1vcnkuaCBzdHJpbmdzLmggXAotICAgICAgICAgICAgICAgICAgaW50dHlwZXMuaCBzdGRpbnQuaCB1bmlzdGQuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCisJCSAgaW50dHlwZXMuaCBzdGRpbnQuaCB1bmlzdGQuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdAorIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCiBfQUNFT0YKIAogZmkKQEAgLTI4NTIsMTA3NSArNDI3NSw4MzEgQEAKIGRvbmUKIAogCi0KLWZvciBhY19oZWFkZXIgaW4gc3RkbGliLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGJ5dGUgb3JkZXJpbmcgaXMgYmlnZW5kaWFuLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2NfYmlnZW5kaWFuKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBhY19jdl9jX2JpZ2VuZGlhbj11bmtub3duCisgICAgIyBTZWUgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgdW5pdmVyc2FsIGNvbXBpbGVyLgorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyNpZm5kZWYgX19BUFBMRV9DQ19fCisJICAgICAgIG5vdCBhIHVuaXZlcnNhbCBjYXBhYmxlIGNvbXBpbGVyCisJICAgICAjZW5kaWYKKwkgICAgIHR5cGVkZWYgaW50IGR1bW15OwogCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisJIyBDaGVjayBmb3IgcG90ZW50aWFsIC1hcmNoIGZsYWdzLiAgSXQgaXMgbm90IHVuaXZlcnNhbCB1bmxlc3MKKwkjIHRoZXJlIGFyZSBhdCBsZWFzdCB0d28gLWFyY2ggZmxhZ3Mgd2l0aCBkaWZmZXJlbnQgdmFsdWVzLgorCWFjX2FyY2g9CisJYWNfcHJldj0KKwlmb3IgYWNfd29yZCBpbiAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1M7IGRvCisJIGlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorCSAgIGNhc2UgJGFjX3dvcmQgaW4KKwkgICAgIGk/ODYgfCB4ODZfNjQgfCBwcGMgfCBwcGM2NCkKKwkgICAgICAgaWYgdGVzdCAteiAiJGFjX2FyY2giIHx8IHRlc3QgIiRhY19hcmNoIiA9ICIkYWNfd29yZCI7IHRoZW4KKwkJIGFjX2FyY2g9JGFjX3dvcmQKKwkgICAgICAgZWxzZQorCQkgYWNfY3ZfY19iaWdlbmRpYW49dW5pdmVyc2FsCisJCSBicmVhaworCSAgICAgICBmaQorCSAgICAgICA7OworCSAgIGVzYWMKKwkgICBhY19wcmV2PQorCSBlbGlmIHRlc3QgIngkYWNfd29yZCIgPSAieC1hcmNoIjsgdGhlbgorCSAgIGFjX3ByZXY9YXJjaAorCSBmaQorICAgICAgIGRvbmUKIGZpCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2Ci0KLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0jbGluZSAkTElORU5PICJjb25maWd1cmUiCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247IHRoZW4KKyAgICAgICMgU2VlIGlmIHN5cy9wYXJhbS5oIGRlZmluZXMgdGhlIEJZVEVfT1JERVIgbWFjcm8uCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisJICAgICAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAKLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2Ci0KLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPwotY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgotICB5ZXM6bm8gKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotICBubzp5ZXMgKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICAoCi0gICAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKLSAgICApIHwKLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgotICAgIDs7Ci1lc2FjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotCi1mb3IgYWNfaGVhZGVyIGluIHVuaXN0ZC5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2Ci0KLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0jbGluZSAkTElORU5PICJjb25maWd1cmUiCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2Ci0KLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPwotY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgotICB5ZXM6bm8gKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotICBubzp5ZXMgKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICAoCi0gICAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKLSAgICApIHwKLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgotICAgIDs7Ci1lc2FjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotCi1mb3IgYWNfaGVhZGVyIGluIHN0ZGludC5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2Ci0KLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0jbGluZSAkTElORU5PICJjb25maWd1cmUiCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2Ci0KLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPwotY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgotICB5ZXM6bm8gKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotICBubzp5ZXMgKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICAoCi0gICAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKLSAgICApIHwKLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgotICAgIDs7Ci1lc2FjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotCi1mb3IgYWNfaGVhZGVyIGluIHN5cy91aW8uaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci1lbHNlCi0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfaGVhZGVyX2NvbXBpbGVyPW5vCi1maQotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KLSAgeWVzOm5vICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLSAgbm86eWVzICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLQotZmkKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLQotZm9yIGFjX2hlYWRlciBpbiBtYWNoaW5lL3R5cGVzLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0jbGluZSAkTElORU5PICJjb25maWd1cmUiCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2hlYWRlcl9jb21waWxlcj1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKLQotIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICBhY19oZWFkZXJfcHJlcHJvYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKLQotIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/Ci1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCi0gIHllczpubyApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICAoCi0gICAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKLSAgICApIHwKLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgotICAgIDs7Ci0gIG5vOnllcyApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0KLWZvciBhY19oZWFkZXIgaW4gc3lzL2ludF90eXBlcy5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2Ci0KLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0jbGluZSAkTElORU5PICJjb25maWd1cmUiCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2Ci0KLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPwotY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgotICB5ZXM6bm8gKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotICBubzp5ZXMgKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICAoCi0gICAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKLSAgICApIHwKLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgotICAgIDs7Ci1lc2FjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotCi0KLWZvciBhY19oZWFkZXIgaW4gc3lzbG9nLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0jbGluZSAkTElORU5PICJjb25maWd1cmUiCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2hlYWRlcl9jb21waWxlcj1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKLQotIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICBhY19oZWFkZXJfcHJlcHJvYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKLQotIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/Ci1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCi0gIHllczpubyApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICAoCi0gICAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKLSAgICApIHwKLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgotICAgIDs7Ci0gIG5vOnllcyApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdWludDE2X3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdWludDE2X3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfdWludDE2X3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0jbGluZSAkTElORU5PICJjb25maWd1cmUiCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAogaW50CiBtYWluICgpCiB7Ci1pZiAoKHVpbnQxNl90ICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAodWludDE2X3QpKQotICByZXR1cm4gMDsKKyNpZiAhIChkZWZpbmVkIEJZVEVfT1JERVIgJiYgZGVmaW5lZCBCSUdfRU5ESUFOIFwKKwkJICAgICAmJiBkZWZpbmVkIExJVFRMRV9FTkRJQU4gJiYgQllURV9PUkRFUiAmJiBCSUdfRU5ESUFOIFwKKwkJICAgICAmJiBMSVRUTEVfRU5ESUFOKQorCSAgICAgIGJvZ3VzIGVuZGlhbiBtYWNyb3MKKwkgICAgICNlbmRpZgorCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX3VpbnQxNl90PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICAjIEl0IGRvZXM7IG5vdyBzZWUgd2hldGhlciBpdCBkZWZpbmVkIHRvIEJJR19FTkRJQU4gb3Igbm90LgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisJCSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KIAotYWNfY3ZfdHlwZV91aW50MTZfdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3VpbnQxNl90IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3VpbnQxNl90IiA+JjYKK2ludAorbWFpbiAoKQoreworI2lmIEJZVEVfT1JERVIgIT0gQklHX0VORElBTgorCQkgbm90IGJpZyBlbmRpYW4KKwkJI2VuZGlmCiAKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhbiBBTlNJIEMtY29uZm9ybWluZyBjb25zdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhbiBBTlNJIEMtY29uZm9ybWluZyBjb25zdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfY19jb25zdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKLS8qIGNvbmZkZWZzLmguICAqLworICA7CisgIHJldHVybiAwOworfQogX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCitlbHNlCisgIGFjX2N2X2NfYmlnZW5kaWFuPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgZmkKKyAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247IHRoZW4KKyAgICAgICMgU2VlIGlmIDxsaW1pdHMuaD4gZGVmaW5lcyBfTElUVExFX0VORElBTiBvciBfQklHX0VORElBTiAoZS5nLiwgU29sYXJpcykuCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bGltaXRzLmg+CisKK2ludAorbWFpbiAoKQoreworI2lmICEgKGRlZmluZWQgX0xJVFRMRV9FTkRJQU4gfHwgZGVmaW5lZCBfQklHX0VORElBTikKKwkgICAgICBib2d1cyBlbmRpYW4gbWFjcm9zCisJICAgICAjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgICMgSXQgZG9lczsgbm93IHNlZSB3aGV0aGVyIGl0IGRlZmluZWQgdG8gX0JJR19FTkRJQU4gb3Igbm90LgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bGltaXRzLmg+CisKK2ludAorbWFpbiAoKQoreworI2lmbmRlZiBfQklHX0VORElBTgorCQkgbm90IGJpZyBlbmRpYW4KKwkJI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKK2Vsc2UKKyAgYWNfY3ZfY19iaWdlbmRpYW49bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBmaQorICAgIGlmIHRlc3QgJGFjX2N2X2NfYmlnZW5kaWFuID0gdW5rbm93bjsgdGhlbgorICAgICAgIyBDb21waWxlIGEgdGVzdCBwcm9ncmFtLgorICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICAjIFRyeSB0byBndWVzcyBieSBncmVwcGluZyB2YWx1ZXMgZnJvbSBhbiBvYmplY3QgZmlsZS4KKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworc2hvcnQgaW50IGFzY2lpX21tW10gPQorCQkgIHsgMHg0MjQ5LCAweDQ3NjUsIDB4NkU0NCwgMHg2OTYxLCAweDZFNTMsIDB4Nzk1MywgMCB9OworCQlzaG9ydCBpbnQgYXNjaWlfaWlbXSA9CisJCSAgeyAweDY5NEMsIDB4NTQ1NCwgMHg2NTZDLCAweDZFNDUsIDB4Njk0NCwgMHg2RTYxLCAwIH07CisJCWludCB1c2VfYXNjaWkgKGludCBpKSB7CisJCSAgcmV0dXJuIGFzY2lpX21tW2ldICsgYXNjaWlfaWlbaV07CisJCX0KKwkJc2hvcnQgaW50IGViY2RpY19paVtdID0KKwkJICB7IDB4ODlEMywgMHhFM0UzLCAweDg1OTMsIDB4OTVDNSwgMHg4OUM0LCAweDk1ODEsIDAgfTsKKwkJc2hvcnQgaW50IGViY2RpY19tbVtdID0KKwkJICB7IDB4QzJDOSwgMHhDNzg1LCAweDk1QzQsIDB4ODk4MSwgMHg5NUUyLCAweEE4RTIsIDAgfTsKKwkJaW50IHVzZV9lYmNkaWMgKGludCBpKSB7CisJCSAgcmV0dXJuIGViY2RpY19tbVtpXSArIGViY2RpY19paVtpXTsKKwkJfQorCQlleHRlcm4gaW50IGZvbzsKKworaW50CittYWluICgpCit7CityZXR1cm4gdXNlX2FzY2lpIChmb28pID09IHVzZV9lYmNkaWMgKGZvbyk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgaWYgZ3JlcCBCSUdlbkRpYW5TeVMgY29uZnRlc3QuJGFjX29iamV4dCA+L2Rldi9udWxsOyB0aGVuCisJICAgICAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCisJICAgIGZpCisJICAgIGlmIGdyZXAgTGlUVGxlRW5EaWFuIGNvbmZ0ZXN0LiRhY19vYmpleHQgPi9kZXYvbnVsbCA7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICIkYWNfY3ZfY19iaWdlbmRpYW4iID0gdW5rbm93bjsgdGhlbgorCQlhY19jdl9jX2JpZ2VuZGlhbj1ubworCSAgICAgIGVsc2UKKwkJIyBmaW5kaW5nIGJvdGggc3RyaW5ncyBpcyB1bmxpa2VseSB0byBoYXBwZW4sIGJ1dCB3aG8ga25vd3M/CisJCWFjX2N2X2NfYmlnZW5kaWFuPXVua25vd24KKwkgICAgICBmaQorCSAgICBmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CisKKwkgICAgIC8qIEFyZSB3ZSBsaXR0bGUgb3IgYmlnIGVuZGlhbj8gIEZyb20gSGFyYmlzb24mU3RlZWxlLiAgKi8KKwkgICAgIHVuaW9uCisJICAgICB7CisJICAgICAgIGxvbmcgaW50IGw7CisJICAgICAgIGNoYXIgY1tzaXplb2YgKGxvbmcgaW50KV07CisJICAgICB9IHU7CisJICAgICB1LmwgPSAxOworCSAgICAgcmV0dXJuIHUuY1tzaXplb2YgKGxvbmcgaW50KSAtIDFdID09IDE7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2NfYmlnZW5kaWFuPW5vCitlbHNlCisgIGFjX2N2X2NfYmlnZW5kaWFuPXllcworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19iaWdlbmRpYW4iID4mNQorJGFzX2VjaG8gIiRhY19jdl9jX2JpZ2VuZGlhbiIgPiY2OyB9CisgY2FzZSAkYWNfY3ZfY19iaWdlbmRpYW4gaW4gIygKKyAgIHllcykKKyAgICAgJGFzX2VjaG8gIiNkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEiID4+Y29uZmRlZnMuaAorOzsgIygKKyAgIG5vKQorICAgICAgOzsgIygKKyAgIHVuaXZlcnNhbCkKKworJGFzX2VjaG8gIiNkZWZpbmUgQUNfQVBQTEVfVU5JVkVSU0FMX0JVSUxEIDEiID4+Y29uZmRlZnMuaAorCisgICAgIDs7ICMoCisgICAqKQorICAgICBhc19mbl9lcnJvciAkPyAidW5rbm93biBlbmRpYW5uZXNzCisgcHJlc2V0dGluZyBhY19jdl9jX2JpZ2VuZGlhbj1ubyAob3IgeWVzKSB3aWxsIGhlbHAiICIkTElORU5PIiA1IDs7CisgZXNhYworCisKKyMgTWFrZSBzdXJlIHdlIGNhbiBydW4gY29uZmlnLnN1Yi4KKyRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgc3VuNCA+L2Rldi9udWxsIDI+JjEgfHwKKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBydW4gJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICIkTElORU5PIiA1CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfYnVpbGQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKK3Rlc3QgIngkYWNfYnVpbGRfYWxpYXMiID0geCAmJgorICBhY19idWlsZF9hbGlhcz1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiYAordGVzdCAieCRhY19idWlsZF9hbGlhcyIgPSB4ICYmCisgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgZ3Vlc3MgYnVpbGQgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiICIkTElORU5PIiA1CithY19jdl9idWlsZD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkYWNfYnVpbGRfYWxpYXNgIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkYWNfYnVpbGRfYWxpYXMgZmFpbGVkIiAiJExJTkVOTyIgNQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9idWlsZCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2J1aWxkIiA+JjY7IH0KK2Nhc2UgJGFjX2N2X2J1aWxkIGluCisqLSotKikgOzsKKyopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBidWlsZCIgIiRMSU5FTk8iIDU7OworZXNhYworYnVpbGQ9JGFjX2N2X2J1aWxkCithY19zYXZlX0lGUz0kSUZTOyBJRlM9Jy0nCitzZXQgeCAkYWNfY3ZfYnVpbGQKK3NoaWZ0CitidWlsZF9jcHU9JDEKK2J1aWxkX3ZlbmRvcj0kMgorc2hpZnQ7IHNoaWZ0CisjIFJlbWVtYmVyLCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIElGUyBpcyB1c2VkIHRvIGNyZWF0ZSAkKiwKKyMgZXhjZXB0IHdpdGggb2xkIHNoZWxsczoKK2J1aWxkX29zPSQqCitJRlM9JGFjX3NhdmVfSUZTCitjYXNlICRidWlsZF9vcyBpbiAqXCAqKSBidWlsZF9vcz1gZWNobyAiJGJ1aWxkX29zIiB8IHNlZCAncy8gLy0vZydgOzsgZXNhYworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2hvc3QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0ICJ4JGhvc3RfYWxpYXMiID0geDsgdGhlbgorICBhY19jdl9ob3N0PSRhY19jdl9idWlsZAorZWxzZQorICBhY19jdl9ob3N0PWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICRob3N0X2FsaWFzYCB8fAorICAgIGFzX2ZuX2Vycm9yICQ/ICIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkaG9zdF9hbGlhcyBmYWlsZWQiICIkTElORU5PIiA1CitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9ob3N0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaG9zdCIgPiY2OyB9CitjYXNlICRhY19jdl9ob3N0IGluCisqLSotKikgOzsKKyopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBob3N0IiAiJExJTkVOTyIgNTs7Citlc2FjCitob3N0PSRhY19jdl9ob3N0CithY19zYXZlX0lGUz0kSUZTOyBJRlM9Jy0nCitzZXQgeCAkYWNfY3ZfaG9zdAorc2hpZnQKK2hvc3RfY3B1PSQxCitob3N0X3ZlbmRvcj0kMgorc2hpZnQ7IHNoaWZ0CisjIFJlbWVtYmVyLCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIElGUyBpcyB1c2VkIHRvIGNyZWF0ZSAkKiwKKyMgZXhjZXB0IHdpdGggb2xkIHNoZWxsczoKK2hvc3Rfb3M9JCoKK0lGUz0kYWNfc2F2ZV9JRlMKK2Nhc2UgJGhvc3Rfb3MgaW4gKlwgKikgaG9zdF9vcz1gZWNobyAiJGhvc3Rfb3MiIHwgc2VkICdzLyAvLS9nJ2A7OyBlc2FjCisKKworCitjYXNlICRob3N0X2NwdSBpbgorICBpKjg2IHwgeDg2XzY0ICkKKworJGFzX2VjaG8gIiNkZWZpbmUgQ1BVX0NJU0MgMSIgPj5jb25mZGVmcy5oCisKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9YODYgMSIgPj5jb25mZGVmcy5oCisKKyAgICA7OworICAqICkKKworJGFzX2VjaG8gIiNkZWZpbmUgQ1BVX1JJU0MgMSIgPj5jb25mZGVmcy5oCisKKyAgICA7OworZXNhYworCitjYXNlICRob3N0X29zIGluCisgICpjeWd3aW4qfCptaW5ndyogKQorICAgIEVYRT0uZXhlCisgICAgOzsKKyAgKiApCisgICAgRVhFPSIiCisgICAgOzsKK2VzYWMKKyAgICMgZGVmaW5lIGV4ZWN1dGFibGUgc3VmZml4OyB0aGlzIGlzIG5lZWRlZCBmb3IgYG1ha2UgY2xlYW4nCisKK3N1cHBvcnRlZF9jZmxhZ3M9IiIKK2lmIHRlc3QgIiRFTVBUWV9DRkxBR1MiID0gIm5vIjsgdGhlbgorICBzdXBwb3J0ZWRfY2ZsYWdzPSIkQ0ZMQUdTIgorZmkKKworV0VSUk9SPSIiCitmb3IgdyBpbiAtV2Vycm9yIC1lcnJ3YXJuOyBkbworICBpZiB0ZXN0ICJ4JFdFUlJPUiIgPSAieCI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJHtDQy1jfSBhY2NlcHRzICR3IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJHtDQy1jfSBhY2NlcHRzICR3Li4uICIgPiY2OyB9CisgICAgc2F2ZV9jZmxhZ3M9IiRDRkxBR1MiCisgICAgaWYgdGVzdCAieCRDRkxBR1MiID0gIngiOyB0aGVuIDoKKyAgQ0ZMQUdTPSIkdyIKK2Vsc2UKKyAgQ0ZMQUdTPSIkQ0ZMQUdTICR3IgorZmkKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCitpbnQgbWFpbih2b2lkKSB7IHJldHVybiAwOyB9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgV0VSUk9SPSIkdyIKKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZWxzZQorICBDRkxBR1M9IiRzYXZlX2NmbGFncyIKKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKK2RvbmUKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICR7Q0MtY30gYWNjZXB0cyAtZlBJQyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICR7Q0MtY30gYWNjZXB0cyAtZlBJQy4uLiAiID4mNjsgfQorc2F2ZV9jZmxhZ3M9IiRDRkxBR1MiCitpZiB0ZXN0ICJ4JENGTEFHUyIgPSAieCI7IHRoZW4gOgorICBDRkxBR1M9Ii1mUElDIgorZWxzZQorICBDRkxBR1M9IiRDRkxBR1MgLWZQSUMiCitmaQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworaW50IG1haW4odm9pZCkgeyByZXR1cm4gMDsgfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGlmIHRlc3QgIngkc3VwcG9ydGVkX2NmbGFncyIgPSAieCI7IHRoZW4gOgorICBzdXBwb3J0ZWRfY2ZsYWdzPSItZlBJQyIKK2Vsc2UKKyAgc3VwcG9ydGVkX2NmbGFncz0iJHN1cHBvcnRlZF9jZmxhZ3MgLWZQSUMiCitmaQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KK2Vsc2UKKyAgQ0ZMQUdTPSIkc2F2ZV9jZmxhZ3MiCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworaWYgdGVzdCAiJEVNUFRZX0NGTEFHUyIgPSAieWVzIjsgdGhlbgorICBmb3IgZiBpbiAtV2FsbCAtcGVkYW50aWMgLVdzdHJpY3QtcHJvdG90eXBlczsgZG8KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJHtDQy1jfSBhY2NlcHRzICRmIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJHtDQy1jfSBhY2NlcHRzICRmLi4uICIgPiY2OyB9CisgICAgc2F2ZV9jZmxhZ3M9IiRDRkxBR1MiCisgICAgaWYgdGVzdCAieCRDRkxBR1MiID0gIngiOyB0aGVuIDoKKyAgQ0ZMQUdTPSIkZiIKK2Vsc2UKKyAgQ0ZMQUdTPSIkQ0ZMQUdTICRmIgorZmkKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCitpbnQgbWFpbih2b2lkKSB7IHJldHVybiAwOyB9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgaWYgdGVzdCAieCRzdXBwb3J0ZWRfY2ZsYWdzIiA9ICJ4IjsgdGhlbiA6CisgIHN1cHBvcnRlZF9jZmxhZ3M9IiRmIgorZWxzZQorICBzdXBwb3J0ZWRfY2ZsYWdzPSIkc3VwcG9ydGVkX2NmbGFncyAkZiIKK2ZpCisgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KK2Vsc2UKKyAgQ0ZMQUdTPSIkc2F2ZV9jZmxhZ3MiCisgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKKworICBPT1BUPSIiCisgIGZvciBmIGluIC1PNCAtTzM7IGRvCisgICAgaWYgdGVzdCAieCRPT1BUIiA9ICJ4IjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICR7Q0MtY30gYWNjZXB0cyAkZiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICR7Q0MtY30gYWNjZXB0cyAkZi4uLiAiID4mNjsgfQorICAgICAgc2F2ZV9jZmxhZ3M9IiRDRkxBR1MiCisgICAgICBpZiB0ZXN0ICJ4JENGTEFHUyIgPSAieCI7IHRoZW4gOgorICBDRkxBR1M9IiRmIgorZWxzZQorICBDRkxBR1M9IiRDRkxBR1MgJGYiCitmaQorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworaW50IG1haW4odm9pZCkgeyByZXR1cm4gMDsgfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGlmIHRlc3QgIngkc3VwcG9ydGVkX2NmbGFncyIgPSAieCI7IHRoZW4gOgorICBzdXBwb3J0ZWRfY2ZsYWdzPSIkZiIKK2Vsc2UKKyAgc3VwcG9ydGVkX2NmbGFncz0iJHN1cHBvcnRlZF9jZmxhZ3MgJGYiCitmaQorICAgICAgICAgT09QVD0iJGYiCisgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZWxzZQorICBDRkxBR1M9IiRzYXZlX2NmbGFncyIKKyAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGZpCisgIGRvbmUKKworICBmb3IgZiBpbiAtZmV4cGVuc2l2ZS1vcHRpbWl6YXRpb25zIC1mdW5yb2xsLWxvb3BzOyBkbworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAke0NDLWN9IGFjY2VwdHMgJGYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAke0NDLWN9IGFjY2VwdHMgJGYuLi4gIiA+JjY7IH0KKyAgICBzYXZlX2NmbGFncz0iJENGTEFHUyIKKyAgICBpZiB0ZXN0ICJ4JENGTEFHUyIgPSAieCI7IHRoZW4gOgorICBDRkxBR1M9IiRmIgorZWxzZQorICBDRkxBR1M9IiRDRkxBR1MgJGYiCitmaQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KK2ludCBtYWluKHZvaWQpIHsgcmV0dXJuIDA7IH0KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBpZiB0ZXN0ICJ4JHN1cHBvcnRlZF9jZmxhZ3MiID0gIngiOyB0aGVuIDoKKyAgc3VwcG9ydGVkX2NmbGFncz0iJGYiCitlbHNlCisgIHN1cHBvcnRlZF9jZmxhZ3M9IiRzdXBwb3J0ZWRfY2ZsYWdzICRmIgorZmkKKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZWxzZQorICBDRkxBR1M9IiRzYXZlX2NmbGFncyIKKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZG9uZQorZmkKKworZm9yIGYgaW4gLVduby1sYW5ndWFnZS1leHRlbnNpb24tdG9rZW47IGRvCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAke0NDLWN9IGFjY2VwdHMgJGYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAke0NDLWN9IGFjY2VwdHMgJGYuLi4gIiA+JjY7IH0KKyAgc2F2ZV9jZmxhZ3M9IiRDRkxBR1MiCisgIHRlc3RmPSQoZWNobyAiJGYiIHwgJFNFRCAnc3wtV25vLVwoLipcKXwtV1wxfGcnKQorICBpZiB0ZXN0ICJ4JENGTEFHUyIgPSAieCI7IHRoZW4gOgorICBDRkxBR1M9IiR0ZXN0ZiIKK2Vsc2UKKyAgQ0ZMQUdTPSIkQ0ZMQUdTICR0ZXN0ZiIKK2ZpCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KK2ludCBtYWluKHZvaWQpIHsgcmV0dXJuIDA7IH0KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBpZiB0ZXN0ICJ4JHN1cHBvcnRlZF9jZmxhZ3MiID0gIngiOyB0aGVuIDoKKyAgc3VwcG9ydGVkX2NmbGFncz0iJGYiCitlbHNlCisgIHN1cHBvcnRlZF9jZmxhZ3M9IiRzdXBwb3J0ZWRfY2ZsYWdzICRmIgorZmkKKyAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KK2Vsc2UKKyAgQ0ZMQUdTPSIkc2F2ZV9jZmxhZ3MiCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZG9uZQorCitDRkxBR1M9IiRzdXBwb3J0ZWRfY2ZsYWdzIgorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2hlYWRlcl9zdGRjKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+CisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9eWVzCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJtZW1jaHIiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyAvYmluL2NjIGluIElyaXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIDoKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWYgKCgnICcgJiAweDBGRikgPT0gMHgwMjApCisjIGRlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCisjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpCisjZWxzZQorIyBkZWZpbmUgSVNMT1dFUihjKSBcCisJCSAgICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCisJCSAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAorCQkgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICgoYykgfCAweDQwKSA6IChjKSkKKyNlbmRpZgorCisjZGVmaW5lIFhPUihlLCBmKSAoKChlKSAmJiAhKGYpKSB8fCAoIShlKSAmJiAoZikpKQoraW50CittYWluICgpCit7CisgIGludCBpOworICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisgICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQorCXx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKQorICAgICAgcmV0dXJuIDI7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK2ZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFNURENfSEVBREVSUyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworZm9yIGFjX2hlYWRlciBpbiB1bmlzdGQuaCBieXRlc3dhcC5oIHN0ZGludC5oIHN5cy91aW8uaCBpbnR0eXBlcy5oIHN5cy90eXBlcy5oIG1hY2hpbmUvdHlwZXMuaCBzeXMvaW50X3R5cGVzLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKK2ZvciBhY19oZWFkZXIgaW4gc3lzL3NvY2tldC5oIG5ldGluZXQvaW4uaCBhcnBhL2luZXQuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdAorIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKK2ZvciBhY19oZWFkZXIgaW4gd2luZG93cy5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJ3aW5kb3dzLmgiICJhY19jdl9oZWFkZXJfd2luZG93c19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3dpbmRvd3NfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1dJTkRPV1NfSCAxCitfQUNFT0YKKyBmb3IgYWNfaGVhZGVyIGluIHdpbnNvY2syLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIndpbnNvY2syLmgiICJhY19jdl9oZWFkZXJfd2luc29jazJfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0CisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl93aW5zb2NrMl9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfV0lOU09DSzJfSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCitmaQorCitkb25lCisKKworYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAiaW50OF90IiAiYWNfY3ZfdHlwZV9pbnQ4X3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9pbnQ4X3QiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9JTlQ4X1QgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInVpbnQ4X3QiICJhY19jdl90eXBlX3VpbnQ4X3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV91aW50OF90IiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfVUlOVDhfVCAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAiaW50MTZfdCIgImFjX2N2X3R5cGVfaW50MTZfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl90eXBlX2ludDE2X3QiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9JTlQxNl9UIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJ1aW50MTZfdCIgImFjX2N2X3R5cGVfdWludDE2X3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV91aW50MTZfdCIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1VJTlQxNl9UIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJpbnQzMl90IiAiYWNfY3ZfdHlwZV9pbnQzMl90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfaW50MzJfdCIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0lOVDMyX1QgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInVpbnQzMl90IiAiYWNfY3ZfdHlwZV91aW50MzJfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl90eXBlX3VpbnQzMl90IiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfVUlOVDMyX1QgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInVpbnQ2NF90IiAiYWNfY3ZfdHlwZV91aW50NjRfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl90eXBlX3VpbnQ2NF90IiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfVUlOVDY0X1QgMQorX0FDRU9GCisKKworZmkKKworIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKKyMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgorIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiB1bnNpZ25lZCBsb25nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2YgdW5zaWduZWQgbG9uZy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGxvbmcpKSIgImFjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nIiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CisKK2Vsc2UKKyAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZyIgPSB5ZXM7IHRoZW4KKyAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mICh1bnNpZ25lZCBsb25nKQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmc9MAorICAgZmkKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmciID4mNjsgfQorCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTSVpFT0ZfVU5TSUdORURfTE9ORyAkYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmcKK19BQ0VPRgorCisKKyMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgdW5zaWduZWQgbG9uZyBsb25nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2YgdW5zaWduZWQgbG9uZyBsb25nLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBsb25nIGxvbmcpKSIgImFjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmciICAgICAgICAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiOyB0aGVuIDoKKworZWxzZQorICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmciID0geWVzOyB0aGVuCisgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAodW5zaWduZWQgbG9uZyBsb25nKQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZz0wCisgICBmaQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmciID4mNjsgfQorCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTSVpFT0ZfVU5TSUdORURfTE9OR19MT05HICRhY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19sb25nCitfQUNFT0YKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFuIEFOU0kgQy1jb25mb3JtaW5nIGNvbnN0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhbiBBTlNJIEMtY29uZm9ybWluZyBjb25zdC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9jX2NvbnN0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiBpbnQKIG1haW4gKCkKIHsKLS8qIEZJWE1FOiBJbmNsdWRlIHRoZSBjb21tZW50cyBzdWdnZXN0ZWQgYnkgUGF1bC4gKi8KKwogI2lmbmRlZiBfX2NwbHVzcGx1cwotICAvKiBVbHRyaXggbWlwcyBjYyByZWplY3RzIHRoaXMuICAqLworICAvKiBVbHRyaXggbWlwcyBjYyByZWplY3RzIHRoaXMgc29ydCBvZiB0aGluZy4gICovCiAgIHR5cGVkZWYgaW50IGNoYXJzZXRbMl07Ci0gIGNvbnN0IGNoYXJzZXQgeDsKKyAgY29uc3QgY2hhcnNldCBjcyA9IHsgMCwgMCB9OwogICAvKiBTdW5PUyA0LjEuMSBjYyByZWplY3RzIHRoaXMuICAqLwotICBjaGFyIGNvbnN0ICpjb25zdCAqY2NwOwotICBjaGFyICoqcDsKKyAgY2hhciBjb25zdCAqY29uc3QgKnBjcGNjOworICBjaGFyICoqcHBjOwogICAvKiBORUMgU1ZSNC4wLjIgbWlwcyBjYyByZWplY3RzIHRoaXMuICAqLwogICBzdHJ1Y3QgcG9pbnQge2ludCB4LCB5O307CiAgIHN0YXRpYyBzdHJ1Y3QgcG9pbnQgY29uc3QgemVybyA9IHswLDB9OwpAQCAtMzkyOSwxNiArNTEwOCwxOCBAQAogICAgICBhbiBhcm0gb2YgYW4gaWYtZXhwcmVzc2lvbiB3aG9zZSBpZi1wYXJ0IGlzIG5vdCBhIGNvbnN0YW50CiAgICAgIGV4cHJlc3Npb24gKi8KICAgY29uc3QgY2hhciAqZyA9ICJzdHJpbmciOwotICBjY3AgPSAmZyArIChnID8gZy1nIDogMCk7CisgIHBjcGNjID0gJmcgKyAoZyA/IGctZyA6IDApOwogICAvKiBIUFVYIDcuMCBjYyByZWplY3RzIHRoZXNlLiAqLwotICArK2NjcDsKLSAgcCA9IChjaGFyKiopIGNjcDsKLSAgY2NwID0gKGNoYXIgY29uc3QgKmNvbnN0ICopIHA7Ci0gIHsgLyogU0NPIDMuMnY0IGNjIHJlamVjdHMgdGhpcy4gICovCi0gICAgY2hhciAqdDsKKyAgKytwY3BjYzsKKyAgcHBjID0gKGNoYXIqKikgcGNwY2M7CisgIHBjcGNjID0gKGNoYXIgY29uc3QgKmNvbnN0ICopIHBwYzsKKyAgeyAvKiBTQ08gMy4ydjQgY2MgcmVqZWN0cyB0aGlzIHNvcnQgb2YgdGhpbmcuICAqLworICAgIGNoYXIgdHg7CisgICAgY2hhciAqdCA9ICZ0eDsKICAgICBjaGFyIGNvbnN0ICpzID0gMCA/IChjaGFyICopIDAgOiAoY2hhciBjb25zdCAqKSAwOwogCiAgICAgKnQrKyA9IDA7CisgICAgaWYgKHMpIHJldHVybiAwOwogICB9CiAgIHsgLyogU29tZW9uZSB0aGlua3MgdGhlIFN1biBzdXBwb3NlZGx5LUFOU0kgY29tcGlsZXIgd2lsbCByZWplY3QgdGhpcy4gICovCiAgICAgaW50IHhbXSA9IHsyNSwgMTd9OwpAQCAtMzk1MCw2NCArNTEzMSw0NSBAQAogICAgIGlwdHIgcCA9IDA7CiAgICAgKytwOwogICB9Ci0gIHsgLyogQUlYIFhMIEMgMS4wMi4wLjAgcmVqZWN0cyB0aGlzIHNheWluZworICB7IC8qIEFJWCBYTCBDIDEuMDIuMC4wIHJlamVjdHMgdGhpcyBzb3J0IG9mIHRoaW5nLCBzYXlpbmcKICAgICAgICAiay5jIiwgbGluZSAyLjI3OiAxNTA2LTAyNSAoUykgT3BlcmFuZCBtdXN0IGJlIGEgbW9kaWZpYWJsZSBsdmFsdWUuICovCi0gICAgc3RydWN0IHMgeyBpbnQgajsgY29uc3QgaW50ICphcFszXTsgfTsKLSAgICBzdHJ1Y3QgcyAqYjsgYi0+aiA9IDU7CisgICAgc3RydWN0IHMgeyBpbnQgajsgY29uc3QgaW50ICphcFszXTsgfSBieDsKKyAgICBzdHJ1Y3QgcyAqYiA9ICZieDsgYi0+aiA9IDU7CiAgIH0KICAgeyAvKiBVTFRSSVgtMzIgVjMuMSAoUmV2IDkpIHZjYyByZWplY3RzIHRoaXMgKi8KICAgICBjb25zdCBpbnQgZm9vID0gMTA7CisgICAgaWYgKCFmb28pIHJldHVybiAwOwogICB9CisgIHJldHVybiAhY3NbMF0gJiYgIXplcm8ueDsKICNlbmRpZgogCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9jX2NvbnN0PXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9jX2NvbnN0PW5vCisgIGFjX2N2X2NfY29uc3Q9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9jX2NvbnN0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9jX2NvbnN0IiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19jb25zdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2NfY29uc3QiID4mNjsgfQogaWYgdGVzdCAkYWNfY3ZfY19jb25zdCA9IG5vOyB0aGVuCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIGNvbnN0Ci1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIGNvbnN0IC8qKi8iID4+Y29uZmRlZnMuaAogCiBmaQogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlubGluZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpbmxpbmUuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2NfaW5saW5lK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBpbmxpbmUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGlubGluZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9jX2lubGluZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2N2X2NfaW5saW5lPW5vCiBmb3IgYWNfa3cgaW4gaW5saW5lIF9faW5saW5lX18gX19pbmxpbmU7IGRvCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaWZuZGVmIF9fY3BsdXNwbHVzCiB0eXBlZGVmIGludCBmb29fdDsKQEAgLTQwMTYsNjc3ICs1MTc4LDEzMDMgQEAKICNlbmRpZgogCiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9jX2lubGluZT0kYWNfa3c7IGJyZWFrCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfY19pbmxpbmU9JGFjX2t3CiBmaQotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgdGVzdCAiJGFjX2N2X2NfaW5saW5lIiAhPSBubyAmJiBicmVhawogZG9uZQogCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfaW5saW5lIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9jX2lubGluZSIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfaW5saW5lIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfY19pbmxpbmUiID4mNjsgfQorCiBjYXNlICRhY19jdl9jX2lubGluZSBpbgogICBpbmxpbmUgfCB5ZXMpIDs7Ci0gIG5vKQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgaW5saW5lCisgICopCisgICAgY2FzZSAkYWNfY3ZfY19pbmxpbmUgaW4KKyAgICAgIG5vKSBhY192YWw9OzsKKyAgICAgICopIGFjX3ZhbD0kYWNfY3ZfY19pbmxpbmU7OworICAgIGVzYWMKKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjaWZuZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIGlubGluZSAkYWNfdmFsCisjZW5kaWYKIF9BQ0VPRgotIDs7Ci0gICopICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGlubGluZSAkYWNfY3ZfY19pbmxpbmUKLV9BQ0VPRgotIDs7CisgICAgOzsKIGVzYWMKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzaXplX3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc2l6ZV90Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX3NpemVfdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLWlmICgoc2l6ZV90ICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAoc2l6ZV90KSkKLSAgcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX3NpemVfdD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2FjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInNpemVfdCIgImFjX2N2X3R5cGVfc2l6ZV90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfc2l6ZV90IiA9IHh5ZXM7IHRoZW4gOgogCi1hY19jdl90eXBlX3NpemVfdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3NpemVfdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9zaXplX3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfdHlwZV9zaXplX3QgPSB5ZXM7IHRoZW4KLSAgOgogZWxzZQogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIHNpemVfdCB1bnNpZ25lZAorI2RlZmluZSBzaXplX3QgdW5zaWduZWQgaW50CiBfQUNFT0YKIAogZmkKIAogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHdvcmtpbmcgbWVtY21wIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgbWVtY21wLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9mdW5jX21lbWNtcF93b3JraW5nK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCi0gIGFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9bm8KLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0jbGluZSAkTElORU5PICJjb25maWd1cmUiCi0vKiBjb25mZGVmcy5oLiAgKi8KK2ZvciBhY19mdW5jIGluIHNvY2tldCBpbmV0X2F0b24gdXNsZWVwIHNpZ2FjdGlvbgorZG8gOgorICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQogX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKworZmkKK2RvbmUKKworCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc29ja2V0IiA9ICJ4bm8iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNvY2tldCBpbiAtbHNvY2tldCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc29ja2V0IGluIC1sc29ja2V0Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9zb2NrZXRfc29ja2V0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxzb2NrZXQgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi1pbnQKLW1haW4gKCkKLXsKLQotICAvKiBTb21lIHZlcnNpb25zIG9mIG1lbWNtcCBhcmUgbm90IDgtYml0IGNsZWFuLiAgKi8KLSAgY2hhciBjMCA9IDB4NDAsIGMxID0gMHg4MCwgYzIgPSAweDgxOwotICBpZiAobWVtY21wKCZjMCwgJmMyLCAxKSA+PSAwIHx8IG1lbWNtcCgmYzEsICZjMiwgMSkgPj0gMCkKLSAgICBleGl0ICgxKTsKLQotICAvKiBUaGUgTmV4dCB4ODYgT3BlblN0ZXAgYnVnIHNob3dzIHVwIG9ubHkgd2hlbiBjb21wYXJpbmcgMTYgYnl0ZXMKLSAgICAgb3IgbW9yZSBhbmQgd2l0aCBhdCBsZWFzdCBvbmUgYnVmZmVyIG5vdCBzdGFydGluZyBvbiBhIDQtYnl0ZSBib3VuZGFyeS4KLSAgICAgV2lsbGlhbSBMZXdpcyBwcm92aWRlZCB0aGlzIHRlc3QgcHJvZ3JhbS4gICAqLwotICB7Ci0gICAgY2hhciBmb29bMjFdOwotICAgIGNoYXIgYmFyWzIxXTsKLSAgICBpbnQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQotICAgICAgewotICAgICAgICBjaGFyICphID0gZm9vICsgaTsKLSAgICAgICAgY2hhciAqYiA9IGJhciArIGk7Ci0gICAgICAgIHN0cmNweSAoYSwgIi0tLS0tLS0tMDExMTExMTEiKTsKLSAgICAgICAgc3RyY3B5IChiLCAiLS0tLS0tLS0xMDAwMDAwMCIpOwotICAgICAgICBpZiAobWVtY21wIChhLCBiLCAxNikgPj0gMCkKLSAgICAgICAgICBleGl0ICgxKTsKLSAgICAgIH0KLSAgICBleGl0ICgwKTsKLSAgfQotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9mdW5jX21lbWNtcF93b3JraW5nPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQotZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotKCBleGl0ICRhY19zdGF0dXMgKQotYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz1ubwotZmkKLXJtIC1mIGNvcmUgY29yZS4qICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZyIgPiY2Ci10ZXN0ICRhY19jdl9mdW5jX21lbWNtcF93b3JraW5nID0gbm8gJiYgTElCT0JKUz0iJExJQk9CSlMgbWVtY21wLiRhY19vYmpleHQiCi0KLQotCi0KLWZvciBhY19mdW5jIGluIHNvY2tldCBzdHJlcnJvciBpbmV0X2F0b24KLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0jbGluZSAkTElORU5PICJjb25maWd1cmUiCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiCi17CiAjZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KK2NoYXIgc29ja2V0ICgpOwogaW50CiBtYWluICgpCiB7Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKK3JldHVybiBzb2NrZXQgKCk7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX3NvY2tldF9zb2NrZXQ9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCisgIGFjX2N2X2xpYl9zb2NrZXRfc29ja2V0PW5vCiBmaQotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9zb2NrZXRfc29ja2V0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3NvY2tldF9zb2NrZXQiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfc29ja2V0X3NvY2tldCIgPSB4eWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCisjZGVmaW5lIEhBVkVfTElCU09DS0VUIDEKIF9BQ0VPRgogCisgIExJQlM9Ii1sc29ja2V0ICRMSUJTIgorCiBmaQotZG9uZQogCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGJ5dGUgb3JkZXJpbmcgaXMgYmlnZW5kaWFuIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbi4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfY19iaWdlbmRpYW4rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgIyBTZWUgaWYgc3lzL3BhcmFtLmggZGVmaW5lcyB0aGUgQllURV9PUkRFUiBtYWNyby4KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzb2NrZXQgaW4gLWx3c29jazMyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzb2NrZXQgaW4gLWx3c29jazMyLi4uICIgPiY2OyB9CisgIFNBVkVMSUJTPSIkTElCUyIKKyAgTElCUz0iJExJQlMgLWx3c29jazMyIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAKLWludAotbWFpbiAoKQorI2luY2x1ZGUgPHdpbnNvY2syLmg+CitpbnQgbWFpbih2b2lkKQogewotI2lmICFCWVRFX09SREVSIHx8ICFCSUdfRU5ESUFOIHx8ICFMSVRUTEVfRU5ESUFOCi0gYm9ndXMgZW5kaWFuIG1hY3JvcwotI2VuZGlmCi0KLSAgOwotICByZXR1cm4gMDsKKyAgICBpbnQgZmQgPSBzb2NrZXQoMCwgMCwgMCk7CisgICAgaWYgKGZkIDwgMCkKKyAgICAgIHJldHVybiAtMTsKKyAgICBlbHNlCisgICAgICByZXR1cm4gMDsKIH0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gICMgSXQgZG9lczsgbm93IHNlZSB3aGV0aGVyIGl0IGRlZmluZWQgdG8gQklHX0VORElBTiBvciBub3QuCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KIAotaW50Ci1tYWluICgpCi17Ci0jaWYgQllURV9PUkRFUiAhPSBCSUdfRU5ESUFOCi0gbm90IGJpZyBlbmRpYW4KLSNlbmRpZgotCi0gIDsKLSAgcmV0dXJuIDA7Ci19CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfZnVuY19zb2NrZXQ9eWVzCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2NfYmlnZW5kaWFuPW5vCisgIExJQlM9IiRTQVZFTElCUyIKKyAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBkZWJ1ZyBsb2dnaW5nIGluIGFsbCBtb2R1bGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIGRlYnVnIGxvZ2dpbmcgaW4gYWxsIG1vZHVsZXMuLi4gIiA+JjY7IH0KKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kZWJ1Zy1sb2dnaW5nIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RlYnVnX2xvZ2dpbmcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9kZWJ1Z19sb2dnaW5nOwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBlbmFibGVfZGVidWdfbG9nZ2luZz1ubworZmkKIAotIyBJdCBkb2VzIG5vdDsgY29tcGlsZSBhIHRlc3QgcHJvZ3JhbS4KLWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCi0gICMgdHJ5IHRvIGd1ZXNzIHRoZSBlbmRpYW5uZXNzIGJ5IGdyZXBwaW5nIHZhbHVlcyBpbnRvIGFuIG9iamVjdCBmaWxlCi0gIGFjX2N2X2NfYmlnZW5kaWFuPXVua25vd24KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0jbGluZSAkTElORU5PICJjb25maWd1cmUiCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi1zaG9ydCBhc2NpaV9tbVtdID0geyAweDQyNDksIDB4NDc2NSwgMHg2RTQ0LCAweDY5NjEsIDB4NkU1MywgMHg3OTUzLCAwIH07Ci1zaG9ydCBhc2NpaV9paVtdID0geyAweDY5NEMsIDB4NTQ1NCwgMHg2NTZDLCAweDZFNDUsIDB4Njk0NCwgMHg2RTYxLCAwIH07Ci12b2lkIF9hc2NpaSAoKSB7IGNoYXIgKnMgPSAoY2hhciAqKSBhc2NpaV9tbTsgcyA9IChjaGFyICopIGFzY2lpX2lpOyB9Ci1zaG9ydCBlYmNkaWNfaWlbXSA9IHsgMHg4OUQzLCAweEUzRTMsIDB4ODU5MywgMHg5NUM1LCAweDg5QzQsIDB4OTU4MSwgMCB9Owotc2hvcnQgZWJjZGljX21tW10gPSB7IDB4QzJDOSwgMHhDNzg1LCAweDk1QzQsIDB4ODk4MSwgMHg5NUUyLCAweEE4RTIsIDAgfTsKLXZvaWQgX2ViY2RpYyAoKSB7IGNoYXIgKnMgPSAoY2hhciAqKSBlYmNkaWNfbW07IHMgPSAoY2hhciAqKSBlYmNkaWNfaWk7IH0KLWludAotbWFpbiAoKQotewotIF9hc2NpaSAoKTsgX2ViY2RpYyAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGlmIGdyZXAgQklHZW5EaWFuU3lTIGNvbmZ0ZXN0LiRhY19vYmpleHQgPi9kZXYvbnVsbCA7IHRoZW4KLSAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCitpZiB0ZXN0ICIkZW5hYmxlX2RlYnVnX2xvZ2dpbmciID0gInllcyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgRU5BQkxFX0RFQlVHX0xPR0dJTkcgMSIgPj5jb25mZGVmcy5oCisKIGZpCi1pZiBncmVwIExpVFRsZUVuRGlhbiBjb25mdGVzdC4kYWNfb2JqZXh0ID4vZGV2L251bGwgOyB0aGVuCi0gIGlmIHRlc3QgIiRhY19jdl9jX2JpZ2VuZGlhbiIgPSB1bmtub3duOyB0aGVuCi0gICAgYWNfY3ZfY19iaWdlbmRpYW49bm8KLSAgZWxzZQotICAgICMgZmluZGluZyBib3RoIHN0cmluZ3MgaXMgdW5saWtlbHkgdG8gaGFwcGVuLCBidXQgd2hvIGtub3dzPwotICAgIGFjX2N2X2NfYmlnZW5kaWFuPXVua25vd24KLSAgZmkKLWZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGVuYWJsZV9kZWJ1Z19sb2dnaW5nIiA+JjUKKyRhc19lY2hvICIkZW5hYmxlX2RlYnVnX2xvZ2dpbmciID4mNjsgfQorCisKKworCisKKworCisKK2lmIHRlc3QgIngkYWNfY3ZfZW52X1BLR19DT05GSUdfc2V0IiAhPSAieHNldCI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1wa2ctY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXBrZy1jb25maWc7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX1BLR19DT05GSUcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1maQotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotaW50Ci1tYWluICgpCi17Ci0gIC8qIEFyZSB3ZSBsaXR0bGUgb3IgYmlnIGVuZGlhbj8gIEZyb20gSGFyYmlzb24mU3RlZWxlLiAgKi8KLSAgdW5pb24KLSAgewotICAgIGxvbmcgbDsKLSAgICBjaGFyIGNbc2l6ZW9mIChsb25nKV07Ci0gIH0gdTsKLSAgdS5sID0gMTsKLSAgZXhpdCAodS5jW3NpemVvZiAobG9uZykgLSAxXSA9PSAxKTsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2NfYmlnZW5kaWFuPW5vCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1Ci1lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0oIGV4aXQgJGFjX3N0YXR1cyApCi1hY19jdl9jX2JpZ2VuZGlhbj15ZXMKLWZpCi1ybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1maQotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfYmlnZW5kaWFuIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9jX2JpZ2VuZGlhbiIgPiY2Ci1jYXNlICRhY19jdl9jX2JpZ2VuZGlhbiBpbgotICB5ZXMpCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCi1fQUNFT0YKLSA7OwotICBubykKLSAgICAgOzsKKyAgY2FzZSAkUEtHX0NPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9QS0dfQ09ORklHPSIkUEtHX0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CiAgICopCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogdW5rbm93biBlbmRpYW5uZXNzCi1wcmVzZXR0aW5nIGFjX2N2X2NfYmlnZW5kaWFuPW5vIChvciB5ZXMpIHdpbGwgaGVscCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiB1bmtub3duIGVuZGlhbm5lc3MKLXByZXNldHRpbmcgYWNfY3ZfY19iaWdlbmRpYW49bm8gKG9yIHllcykgd2lsbCBoZWxwIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7Ci1lc2FjCi0KLQotYWNfYXV4X2Rpcj0KLWZvciBhY19kaXIgaW4gJHNyY2RpciAkc3JjZGlyLy4uICRzcmNkaXIvLi4vLi47IGRvCi0gIGlmIHRlc3QgLWYgJGFjX2Rpci9pbnN0YWxsLXNoOyB0aGVuCi0gICAgYWNfYXV4X2Rpcj0kYWNfZGlyCi0gICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC1zaCAtYyIKLSAgICBicmVhawotICBlbGlmIHRlc3QgLWYgJGFjX2Rpci9pbnN0YWxsLnNoOyB0aGVuCi0gICAgYWNfYXV4X2Rpcj0kYWNfZGlyCi0gICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC5zaCAtYyIKLSAgICBicmVhawotICBlbGlmIHRlc3QgLWYgJGFjX2Rpci9zaHRvb2w7IHRoZW4KLSAgICBhY19hdXhfZGlyPSRhY19kaXIKLSAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9zaHRvb2wgaW5zdGFsbCAtYyIKLSAgICBicmVhaworICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wYXRoX1BLR19DT05GSUc9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgogICBmaQogZG9uZQotaWYgdGVzdCAteiAiJGFjX2F1eF9kaXIiOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGluc3RhbGwtc2ggb3IgaW5zdGFsbC5zaCBpbiAkc3JjZGlyICRzcmNkaXIvLi4gJHNyY2Rpci8uLi8uLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnN0YWxsLXNoIG9yIGluc3RhbGwuc2ggaW4gJHNyY2RpciAkc3JjZGlyLy4uICRzcmNkaXIvLi4vLi4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1hY19jb25maWdfZ3Vlc3M9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiCi1hY19jb25maWdfc3ViPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIKLWFjX2NvbmZpZ3VyZT0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZ3VyZSIgIyBUaGlzIHNob3VsZCBiZSBDeWdudXMgY29uZmlndXJlLgorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCiAKLSMgTWFrZSBzdXJlIHdlIGNhbiBydW4gY29uZmlnLnN1Yi4KLSRhY19jb25maWdfc3ViIHN1bjQgPi9kZXYvbnVsbCAyPiYxIHx8Ci0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBydW4gJGFjX2NvbmZpZ19zdWIiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IHJ1biAkYWNfY29uZmlnX3N1YiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfYnVpbGQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY3ZfYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCi10ZXN0IC16ICIkYWNfY3ZfYnVpbGRfYWxpYXMiICYmCi0gIGFjX2N2X2J1aWxkX2FsaWFzPWAkYWNfY29uZmlnX2d1ZXNzYAotdGVzdCAteiAiJGFjX2N2X2J1aWxkX2FsaWFzIiAmJgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZ3Vlc3MgYnVpbGQgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGd1ZXNzIGJ1aWxkIHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1hY19jdl9idWlsZD1gJGFjX2NvbmZpZ19zdWIgJGFjX2N2X2J1aWxkX2FsaWFzYCB8fAotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfYnVpbGRfYWxpYXMgZmFpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICRhY19jb25maWdfc3ViICRhY19jdl9idWlsZF9hbGlhcyBmYWlsZWQiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9idWlsZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfYnVpbGQiID4mNgotYnVpbGQ9JGFjX2N2X2J1aWxkCi1idWlsZF9jcHU9YGVjaG8gJGFjX2N2X2J1aWxkIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDEvJ2AKLWJ1aWxkX3ZlbmRvcj1gZWNobyAkYWNfY3ZfYnVpbGQgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMi8nYAotYnVpbGRfb3M9YGVjaG8gJGFjX2N2X2J1aWxkIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKLQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hvc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY3ZfaG9zdF9hbGlhcz0kaG9zdF9hbGlhcwotdGVzdCAteiAiJGFjX2N2X2hvc3RfYWxpYXMiICYmCi0gIGFjX2N2X2hvc3RfYWxpYXM9JGFjX2N2X2J1aWxkX2FsaWFzCi1hY19jdl9ob3N0PWAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfaG9zdF9hbGlhc2AgfHwKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogJGFjX2NvbmZpZ19zdWIgJGFjX2N2X2hvc3RfYWxpYXMgZmFpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICRhY19jb25maWdfc3ViICRhY19jdl9ob3N0X2FsaWFzIGZhaWxlZCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hvc3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hvc3QiID4mNgotaG9zdD0kYWNfY3ZfaG9zdAotaG9zdF9jcHU9YGVjaG8gJGFjX2N2X2hvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMS8nYAotaG9zdF92ZW5kb3I9YGVjaG8gJGFjX2N2X2hvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMi8nYAotaG9zdF9vcz1gZWNobyAkYWNfY3ZfaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCi0KLQotCi1pZiB0ZXN0ICRob3N0X2NwdSA9IHg4NjsgdGhlbgotICAgZWNobyAieDg2IGNwdSBmb3VuZCIgIyBzaG91bGQgdXNlIGlubGluZSBhc3NlbWJseQotZmkKLQotY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgaSo4NiApCi0JY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgQ1BVX0NJU0MgMQotX0FDRU9GCi07OwotCSogKQotCWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIENQVV9SSVNDIDEKLV9BQ0VPRgotOzsKKyAgOzsKIGVzYWMKK2ZpCitQS0dfQ09ORklHPSRhY19jdl9wYXRoX1BLR19DT05GSUcKK2lmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFBLR19DT05GSUciID4mNQorJGFzX2VjaG8gIiRQS0dfQ09ORklHIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQogCiAKLWNhc2UgJGhvc3Rfb3MgaW4KLSAgKmN5Z3dpbiogKQotCSAgICAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfTVNfVFlQRVMgMQotX0FDRU9GCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfUEtHX0NPTkZJRyI7IHRoZW4KKyAgYWNfcHRfUEtHX0NPTkZJRz0kUEtHX0NPTkZJRworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInBrZy1jb25maWciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHBrZy1jb25maWc7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRhY19wdF9QS0dfQ09ORklHIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUc9IiRhY19wdF9QS0dfQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUwogCi0JICAgICAgRVhFPS5leGU7OwotICAgICAgICAgKiApICBFWEU9IiI7OworICA7OwogZXNhYwotCi0gICAjIGRlZmluZSBleGVjdXRhYmxlIHN1ZmZpeDsgdGhpcyBpcyBuZWVkZWQgZm9yIGBtYWtlIGNsZWFuJwotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGVidWcgb3IgLS1kaXNhYmxlLWRlYnVnIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2RlYnVnK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9kZWJ1ZyIKLSAgVVNFX0RFQlVHPTAKK2ZpCithY19wdF9QS0dfQ09ORklHPSRhY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUcKK2lmIHRlc3QgLW4gIiRhY19wdF9QS0dfQ09ORklHIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3B0X1BLR19DT05GSUciID4mNQorJGFzX2VjaG8gIiRhY19wdF9QS0dfQ09ORklHIiA+JjY7IH0KIGVsc2UKLSAgVVNFX0RFQlVHPTEKLWZpOworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCiAKLWlmIHRlc3QgJFVTRV9ERUJVRyA9IDE7IHRoZW4KLSAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEVOQUJMRV9ERUJVR0dJTkcgMQorICBpZiB0ZXN0ICJ4JGFjX3B0X1BLR19DT05GSUciID0geDsgdGhlbgorICAgIFBLR19DT05GSUc9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBQS0dfQ09ORklHPSRhY19wdF9QS0dfQ09ORklHCisgIGZpCitlbHNlCisgIFBLR19DT05GSUc9IiRhY19jdl9wYXRoX1BLR19DT05GSUciCitmaQorCitmaQoraWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisJX3BrZ19taW5fdmVyc2lvbj0wLjkuMAorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgcGtnLWNvbmZpZyBpcyBhdCBsZWFzdCB2ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHBrZy1jb25maWcgaXMgYXQgbGVhc3QgdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbi4uLiAiID4mNjsgfQorCWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbjsgdGhlbgorCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCWVsc2UKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisJCVBLR19DT05GSUc9IiIKKwlmaQorZmkKK2lmIHRlc3QgIngkUEtHX0NPTkZJRyIgIT0gIngiOyB0aGVuIDoKKyAgUEtHX0NPTkZJRz0iJFBLR19DT05GSUcgLS1zdGF0aWMiCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gbGV2ZXJhZ2UgT3BlblNTTCBjcnlwdG8iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBsZXZlcmFnZSBPcGVuU1NMIGNyeXB0by4uLiAiID4mNjsgfQorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW9wZW5zc2wgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfb3BlbnNzbCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX29wZW5zc2w7CitlbHNlCisgIGVuYWJsZV9vcGVuc3NsPW5vCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGVuYWJsZV9vcGVuc3NsIiA+JjUKKyRhc19lY2hvICIkZW5hYmxlX29wZW5zc2wiID4mNjsgfQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gbGV2ZXJhZ2UgTlNTIGNyeXB0byIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGxldmVyYWdlIE5TUyBjcnlwdG8uLi4gIiA+JjY7IH0KKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1uc3Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbnNzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbnNzOworZWxzZQorICBlbmFibGVfbnNzPW5vCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGVuYWJsZV9uc3MiID4mNQorJGFzX2VjaG8gIiRlbmFibGVfbnNzIiA+JjY7IH0KKworaWYgdGVzdCAiJGVuYWJsZV9vcGVuc3NsIiA9ICJ5ZXMiOyB0aGVuCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB1c2VyIHNwZWNpZmllZCBPcGVuU1NMIGRpcmVjdG9yeSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgdXNlciBzcGVjaWZpZWQgT3BlblNTTCBkaXJlY3RvcnkuLi4gIiA+JjY7IH0KKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1vcGVuc3NsLWRpciB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfb3BlbnNzbF9kaXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX29wZW5zc2xfZGlyOyBpZiB0ZXN0ICJ4JFBLR19DT05GSUciICE9ICJ4IiAmJiB0ZXN0IC1mICR3aXRoX29wZW5zc2xfZGlyL2xpYi9wa2djb25maWcvbGliY3J5cHRvLnBjOyB0aGVuCisgICAgICAgICBpZiB0ZXN0ICJ4JFBLR19DT05GSUdfUEFUSCIgPSAieCI7IHRoZW4KKyAgICAgICAgICAgZXhwb3J0IFBLR19DT05GSUdfUEFUSD0iJHdpdGhfb3BlbnNzbF9kaXIvbGliL3BrZ2NvbmZpZyIKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgZXhwb3J0IFBLR19DT05GSUdfUEFUSD0iJHdpdGhfb3BlbnNzbF9kaXIvbGliL3BrZ2NvbmZpZzokUEtHX0NPTkZJR19QQVRIIgorICAgICAgICAgZmkKKyAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkd2l0aF9vcGVuc3NsX2RpciIgPiY1CiskYXNfZWNobyAiJHdpdGhfb3BlbnNzbF9kaXIiID4mNjsgfQorICAgICAgIGVsaWYgdGVzdCAtZCAkd2l0aF9vcGVuc3NsX2Rpci9saWI7IHRoZW4KKyAgICAgICAgIENGTEFHUz0iJENGTEFHUyAtSSR3aXRoX29wZW5zc2xfZGlyL2luY2x1ZGUiCisgICAgICAgICBpZiB0ZXN0ICJ4JExERkxBR1MiID0gIngiOyB0aGVuCisgICAgICAgICAgIExERkxBR1M9Ii1MJHdpdGhfb3BlbnNzbF9kaXIvbGliIgorICAgICAgICAgZWxzZQorICAgICAgICAgICBMREZMQUdTPSIkTERGTEFHUyAtTCR3aXRoX29wZW5zc2xfZGlyL2xpYiIKKyAgICAgICAgIGZpCisgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdpdGhfb3BlbnNzbF9kaXIiID4mNQorJGFzX2VjaG8gIiR3aXRoX29wZW5zc2xfZGlyIiA+JjY7IH0KKyAgICAgICBlbHNlCisgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogaW52YWxpZCIgPiY1CiskYXNfZWNobyAiaW52YWxpZCIgPiY2OyB9CisgICAgICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIE9wZW5TU0wgbG9jYXRpb246ICR3aXRoX29wZW5zc2xfZGlyCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorICAgICAgIGZpCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICBpZiB0ZXN0ICJ4JFBLR19DT05GSUciICE9ICJ4IjsgdGhlbgorCitwa2dfZmFpbGVkPW5vCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBjcnlwdG8iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGNyeXB0by4uLiAiID4mNjsgfQorCitpZiB0ZXN0IC1uICIkY3J5cHRvX0NGTEFHUyI7IHRoZW4KKyAgICBwa2dfY3ZfY3J5cHRvX0NGTEFHUz0iJGNyeXB0b19DRkxBR1MiCisgZWxpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAorICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJsaWJjcnlwdG8gPj0gMS4wLjFcIiI7IH0gPiY1CisgICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAibGliY3J5cHRvID49IDEuMC4xIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgcGtnX2N2X2NyeXB0b19DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICJsaWJjcnlwdG8gPj0gMS4wLjEiIDI+L2Rldi9udWxsYAorCQkgICAgICB0ZXN0ICJ4JD8iICE9ICJ4MCIgJiYgcGtnX2ZhaWxlZD15ZXMKK2Vsc2UKKyAgcGtnX2ZhaWxlZD15ZXMKK2ZpCisgZWxzZQorICAgIHBrZ19mYWlsZWQ9dW50cmllZAorZmkKK2lmIHRlc3QgLW4gIiRjcnlwdG9fTElCUyI7IHRoZW4KKyAgICBwa2dfY3ZfY3J5cHRvX0xJQlM9IiRjcnlwdG9fTElCUyIKKyBlbGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcImxpYmNyeXB0byA+PSAxLjAuMVwiIjsgfSA+JjUKKyAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICJsaWJjcnlwdG8gPj0gMS4wLjEiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICBwa2dfY3ZfY3J5cHRvX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAibGliY3J5cHRvID49IDEuMC4xIiAyPi9kZXYvbnVsbGAKKwkJICAgICAgdGVzdCAieCQ/IiAhPSAieDAiICYmIHBrZ19mYWlsZWQ9eWVzCitlbHNlCisgIHBrZ19mYWlsZWQ9eWVzCitmaQorIGVsc2UKKyAgICBwa2dfZmFpbGVkPXVudHJpZWQKK2ZpCisKKworCitpZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCisgICAJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKK2lmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCisgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKK2Vsc2UKKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCitmaQorICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KKwkgICAgICAgIGNyeXB0b19QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLXByaW50LWVycm9ycyAtLWNmbGFncyAtLWxpYnMgImxpYmNyeXB0byA+PSAxLjAuMSIgMj4mMWAKKyAgICAgICAgZWxzZQorCSAgICAgICAgY3J5cHRvX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tcHJpbnQtZXJyb3JzIC0tY2ZsYWdzIC0tbGlicyAibGliY3J5cHRvID49IDEuMC4xIiAyPiYxYAorICAgICAgICBmaQorCSMgUHV0IHRoZSBuYXN0eSBlcnJvciBtZXNzYWdlIGluIGNvbmZpZy5sb2cgd2hlcmUgaXQgYmVsb25ncworCWVjaG8gIiRjcnlwdG9fUEtHX0VSUk9SUyIgPiY1CisKKwlhc19mbl9lcnJvciAkPyAiUGFja2FnZSByZXF1aXJlbWVudHMgKGxpYmNyeXB0byA+PSAxLjAuMSkgd2VyZSBub3QgbWV0OgorCiskY3J5cHRvX1BLR19FUlJPUlMKKworQ29uc2lkZXIgYWRqdXN0aW5nIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgeW91CitpbnN0YWxsZWQgc29mdHdhcmUgaW4gYSBub24tc3RhbmRhcmQgcHJlZml4LgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGNyeXB0b19DRkxBR1MKK2FuZCBjcnlwdG9fTElCUyB0byBhdm9pZCB0aGUgbmVlZCB0byBjYWxsIHBrZy1jb25maWcuCitTZWUgdGhlIHBrZy1jb25maWcgbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1CitlbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCisgICAgIAl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKwl7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJUaGUgcGtnLWNvbmZpZyBzY3JpcHQgY291bGQgbm90IGJlIGZvdW5kIG9yIGlzIHRvbyBvbGQuICBNYWtlIHN1cmUgaXQKK2lzIGluIHlvdXIgUEFUSCBvciBzZXQgdGhlIFBLR19DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGZ1bGwKK3BhdGggdG8gcGtnLWNvbmZpZy4KKworQWx0ZXJuYXRpdmVseSwgeW91IG1heSBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBjcnlwdG9fQ0ZMQUdTCithbmQgY3J5cHRvX0xJQlMgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2FsbCBwa2ctY29uZmlnLgorU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuCisKK1RvIGdldCBwa2ctY29uZmlnLCBzZWUgPGh0dHA6Ly9wa2ctY29uZmlnLmZyZWVkZXNrdG9wLm9yZy8+LgorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KK2Vsc2UKKwljcnlwdG9fQ0ZMQUdTPSRwa2dfY3ZfY3J5cHRvX0NGTEFHUworCWNyeXB0b19MSUJTPSRwa2dfY3ZfY3J5cHRvX0xJQlMKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKwlDRkxBR1M9IiRDRkxBR1MgJGNyeXB0b19DRkxBR1MiCisgICAgICAgIExJQlM9IiRjcnlwdG9fTElCUyAkTElCUyIKK2ZpCisgICBlbHNlCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfZGxfZGxvcGVuKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxkbCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZGxvcGVuICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZGxvcGVuICgpOworICA7CisgIHJldHVybiAwOworfQogX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9kbF9kbG9wZW49eWVzCitlbHNlCisgIGFjX2N2X2xpYl9kbF9kbG9wZW49bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTElCREwgMQorX0FDRU9GCisKKyAgTElCUz0iLWxkbCAkTElCUyIKKworZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhbid0IGZpbmQgbGliZGwiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY2FuJ3QgZmluZCBsaWJkbCIgPiYyO30KK2ZpCisKKyAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgaW5mbGF0ZSBpbiAtbHoiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGluZmxhdGUgaW4gLWx6Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl96X2luZmxhdGUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHogICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGluZmxhdGUgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBpbmZsYXRlICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl96X2luZmxhdGU9eWVzCitlbHNlCisgIGFjX2N2X2xpYl96X2luZmxhdGU9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3pfaW5mbGF0ZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl96X2luZmxhdGUiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfel9pbmZsYXRlIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTElCWiAxCitfQUNFT0YKKworICBMSUJTPSItbHogJExJQlMiCisKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjYW4ndCBmaW5kIGxpYnoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY2FuJ3QgZmluZCBsaWJ6IiA+JjI7fQorZmkKKworICAgZmkKKworICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIEVWUF9FbmNyeXB0SW5pdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIEVWUF9FbmNyeXB0SW5pdC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zZWFyY2hfRVZQX0VuY3J5cHRJbml0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgRVZQX0VuY3J5cHRJbml0ICgpOworaW50CittYWluICgpCit7CityZXR1cm4gRVZQX0VuY3J5cHRJbml0ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitmb3IgYWNfbGliIGluICcnIGNyeXB0bzsgZG8KKyAgaWYgdGVzdCAteiAiJGFjX2xpYiI7IHRoZW4KKyAgICBhY19yZXM9Im5vbmUgcmVxdWlyZWQiCisgIGVsc2UKKyAgICBhY19yZXM9LWwkYWNfbGliCisgICAgTElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorICBmaQorICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3NlYXJjaF9FVlBfRW5jcnlwdEluaXQ9JGFjX3JlcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICBpZiAke2FjX2N2X3NlYXJjaF9FVlBfRW5jcnlwdEluaXQrOn0gZmFsc2U7IHRoZW4gOgorICBicmVhaworZmkKK2RvbmUKK2lmICR7YWNfY3Zfc2VhcmNoX0VWUF9FbmNyeXB0SW5pdCs6fSBmYWxzZTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3Zfc2VhcmNoX0VWUF9FbmNyeXB0SW5pdD1ubworZmkKK3JtIGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX0VWUF9FbmNyeXB0SW5pdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NlYXJjaF9FVlBfRW5jcnlwdEluaXQiID4mNjsgfQorYWNfcmVzPSRhY19jdl9zZWFyY2hfRVZQX0VuY3J5cHRJbml0CitpZiB0ZXN0ICIkYWNfcmVzIiAhPSBubzsgdGhlbiA6CisgIHRlc3QgIiRhY19yZXMiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19yZXMgJExJQlMiCisKK2Vsc2UKKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiY2FuJ3QgZmluZCBvcGVuc3NsID49IDEuMC4xIGNyeXB0byBsaWIKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CitmaQorCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgRVZQX2Flc18xMjhfY3RyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgRVZQX2Flc18xMjhfY3RyLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NlYXJjaF9FVlBfYWVzXzEyOF9jdHIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBFVlBfYWVzXzEyOF9jdHIgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBFVlBfYWVzXzEyOF9jdHIgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2ZvciBhY19saWIgaW4gJycgY3J5cHRvOyBkbworICBpZiB0ZXN0IC16ICIkYWNfbGliIjsgdGhlbgorICAgIGFjX3Jlcz0ibm9uZSByZXF1aXJlZCIKKyAgZWxzZQorICAgIGFjX3Jlcz0tbCRhY19saWIKKyAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisgIGZpCisgIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfc2VhcmNoX0VWUF9hZXNfMTI4X2N0cj0kYWNfcmVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmICR7YWNfY3Zfc2VhcmNoX0VWUF9hZXNfMTI4X2N0cis6fSBmYWxzZTsgdGhlbiA6CisgIGJyZWFrCitmaQorZG9uZQoraWYgJHthY19jdl9zZWFyY2hfRVZQX2Flc18xMjhfY3RyKzp9IGZhbHNlOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9zZWFyY2hfRVZQX2Flc18xMjhfY3RyPW5vCitmaQorcm0gY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfRVZQX2Flc18xMjhfY3RyIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2VhcmNoX0VWUF9hZXNfMTI4X2N0ciIgPiY2OyB9CithY19yZXM9JGFjX2N2X3NlYXJjaF9FVlBfYWVzXzEyOF9jdHIKK2lmIHRlc3QgIiRhY19yZXMiICE9IG5vOyB0aGVuIDoKKyAgdGVzdCAiJGFjX3JlcyIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX3JlcyAkTElCUyIKKworZWxzZQorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJjYW4ndCBmaW5kIG9wZW5zc2wgPj0gMS4wLjEgY3J5cHRvIGxpYgorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KK2ZpCisKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBFVlBfYWVzXzEyOF9nY20iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBFVlBfYWVzXzEyOF9nY20uLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2VhcmNoX0VWUF9hZXNfMTI4X2djbSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIEVWUF9hZXNfMTI4X2djbSAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIEVWUF9hZXNfMTI4X2djbSAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorZm9yIGFjX2xpYiBpbiAnJyBjcnlwdG87IGRvCisgIGlmIHRlc3QgLXogIiRhY19saWIiOyB0aGVuCisgICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIgorICBlbHNlCisgICAgYWNfcmVzPS1sJGFjX2xpYgorICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKKyAgZmkKKyAgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9zZWFyY2hfRVZQX2Flc18xMjhfZ2NtPSRhY19yZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQKKyAgaWYgJHthY19jdl9zZWFyY2hfRVZQX2Flc18xMjhfZ2NtKzp9IGZhbHNlOyB0aGVuIDoKKyAgYnJlYWsKK2ZpCitkb25lCitpZiAke2FjX2N2X3NlYXJjaF9FVlBfYWVzXzEyOF9nY20rOn0gZmFsc2U7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X3NlYXJjaF9FVlBfYWVzXzEyOF9nY209bm8KK2ZpCitybSBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NlYXJjaF9FVlBfYWVzXzEyOF9nY20iID4mNQorJGFzX2VjaG8gIiRhY19jdl9zZWFyY2hfRVZQX2Flc18xMjhfZ2NtIiA+JjY7IH0KK2FjX3Jlcz0kYWNfY3Zfc2VhcmNoX0VWUF9hZXNfMTI4X2djbQoraWYgdGVzdCAiJGFjX3JlcyIgIT0gbm87IHRoZW4gOgorICB0ZXN0ICIkYWNfcmVzIiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfcmVzICRMSUJTIgorCitlbHNlCisgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gImNhbid0IGZpbmQgb3BlbnNzbCA+PSAxLjAuMSBjcnlwdG8gbGliCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorZmkKKworCisKKyRhc19lY2hvICIjZGVmaW5lIEdDTSAxIiA+PmNvbmZkZWZzLmgKKworCiskYXNfZWNobyAiI2RlZmluZSBPUEVOU1NMIDEiID4+Y29uZmRlZnMuaAorCisgICBBRVNfSUNNX09CSlM9ImNyeXB0by9jaXBoZXIvYWVzX2ljbV9vc3NsLm8gY3J5cHRvL2NpcGhlci9hZXNfZ2NtX29zc2wubyIKKyAgIEhNQUNfT0JKUz1jcnlwdG8vaGFzaC9obWFjX29zc2wubworICAgVVNFX0VYVEVSTkFMX0NSWVBUTz0xCisKKworICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBPUEVOU1NMX2NsZWFuc2UgaXMgYnJva2VuIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIE9QRU5TU0xfY2xlYW5zZSBpcyBicm9rZW4uLi4gIiA+JjY7IH0KKyAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICAgICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorCitpbnQKK21haW4gKCkKK3sKKworICAgICAjZGVmaW5lIEJVRkZFUl9TSVpFICgxNikKKyAgICAgY2hhciBidWZmZXJbQlVGRkVSX1NJWkVdOworICAgICBpbnQgaTsKKyAgICAgZm9yIChpID0gMDsgaSA8IEJVRkZFUl9TSVpFOyBpKyspIHsKKyAgICAgICBidWZmZXJbaV0gPSBpICYgMHhmZjsKKyAgICAgfQorICAgICBPUEVOU1NMX2NsZWFuc2UoYnVmZmVyLCBCVUZGRVJfU0laRSk7CisgICAgIGZvciAoaSA9IDA7IGkgPCBCVUZGRVJfU0laRTsgaSsrKSB7CisgICAgICAgaWYgKGJ1ZmZlcltpXSkgeworICAgICAgICAgcHJpbnRmKCJCdWZmZXIgY29udGVudHMgbm90IHplcm8gYXQgcG9zaXRpb24gJWQgKGlzICVkKVxuIiwgaSwKKyAgICAgICAgICAgICBidWZmZXJbaV0pOworICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgfQorICAgICB9CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIG9wZW5zc2xfY2xlYW5zZV9icm9rZW49bm8KK2Vsc2UKKworICAgICBvcGVuc3NsX2NsZWFuc2VfYnJva2VuPXllcworCiskYXNfZWNobyAiI2RlZmluZSBPUEVOU1NMX0NMRUFOU0VfQlJPS0VOIDEiID4+Y29uZmRlZnMuaAorCisKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG9wZW5zc2xfY2xlYW5zZV9icm9rZW4iID4mNQorJGFzX2VjaG8gIiRvcGVuc3NsX2NsZWFuc2VfYnJva2VuIiA+JjY7IH0KKworICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGxldmVyYWdlIE9wZW5TU0wgS0RGIGFsZ29yaXRobSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGxldmVyYWdlIE9wZW5TU0wgS0RGIGFsZ29yaXRobS4uLiAiID4mNjsgfQorICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW9wZW5zc2wta2RmIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX29wZW5zc2xfa2RmK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfb3BlbnNzbF9rZGY7CitlbHNlCisgIGVuYWJsZV9vcGVuc3NsX2tkZj1ubworZmkKKworICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlbmFibGVfb3BlbnNzbF9rZGYiID4mNQorJGFzX2VjaG8gIiRlbmFibGVfb3BlbnNzbF9rZGYiID4mNjsgfQorICAgaWYgdGVzdCAiJGVuYWJsZV9vcGVuc3NsX2tkZiIgPSAieWVzIjsgdGhlbgorICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcga2RmX3NydHAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBrZGZfc3J0cC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zZWFyY2hfa2RmX3NydHArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBrZGZfc3J0cCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGtkZl9zcnRwICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitmb3IgYWNfbGliIGluICcnIGNyeXB0bzsgZG8KKyAgaWYgdGVzdCAteiAiJGFjX2xpYiI7IHRoZW4KKyAgICBhY19yZXM9Im5vbmUgcmVxdWlyZWQiCisgIGVsc2UKKyAgICBhY19yZXM9LWwkYWNfbGliCisgICAgTElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorICBmaQorICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3NlYXJjaF9rZGZfc3J0cD0kYWNfcmVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmICR7YWNfY3Zfc2VhcmNoX2tkZl9zcnRwKzp9IGZhbHNlOyB0aGVuIDoKKyAgYnJlYWsKK2ZpCitkb25lCitpZiAke2FjX2N2X3NlYXJjaF9rZGZfc3J0cCs6fSBmYWxzZTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3Zfc2VhcmNoX2tkZl9zcnRwPW5vCitmaQorcm0gY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfa2RmX3NydHAiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zZWFyY2hfa2RmX3NydHAiID4mNjsgfQorYWNfcmVzPSRhY19jdl9zZWFyY2hfa2RmX3NydHAKK2lmIHRlc3QgIiRhY19yZXMiICE9IG5vOyB0aGVuIDoKKyAgdGVzdCAiJGFjX3JlcyIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX3JlcyAkTElCUyIKKworZWxzZQorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJjYW4ndCBmaW5kIG9wZW5zc2wgS0RGIGxpYgorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KK2ZpCisKKworJGFzX2VjaG8gIiNkZWZpbmUgT1BFTlNTTF9LREYgMSIgPj5jb25mZGVmcy5oCisKKyAgIGZpCitlbGlmIHRlc3QgIiRlbmFibGVfbnNzIiA9ICJ5ZXMiOyB0aGVuCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB1c2VyIHNwZWNpZmllZCBOU1MgZGlyZWN0b3J5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB1c2VyIHNwZWNpZmllZCBOU1MgZGlyZWN0b3J5Li4uICIgPiY2OyB9CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbnNzLWRpciB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbnNzX2RpcitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbnNzX2RpcjsgaWYgdGVzdCAieCRQS0dfQ09ORklHIiAhPSAieCIgJiYgdGVzdCAtZiAkd2l0aF9uc3NfZGlyL2xpYi9wa2djb25maWcvbnNzLnBjOyB0aGVuCisgICAgICAgICBpZiB0ZXN0ICJ4JFBLR19DT05GSUdfUEFUSCIgPSAieCI7IHRoZW4KKyAgICAgICAgICAgZXhwb3J0IFBLR19DT05GSUdfUEFUSD0iJHdpdGhfbnNzX2Rpci9saWIvcGtnY29uZmlnIgorICAgICAgICAgZWxzZQorICAgICAgICAgICBleHBvcnQgUEtHX0NPTkZJR19QQVRIPSIkd2l0aF9uc3NfZGlyL2xpYi9wa2djb25maWc6JFBLR19DT05GSUdfUEFUSCIKKyAgICAgICAgIGZpCisgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdpdGhfbnNzX2RpciIgPiY1CiskYXNfZWNobyAiJHdpdGhfbnNzX2RpciIgPiY2OyB9CisgICAgICAgZWxpZiB0ZXN0IC1kICR3aXRoX25zc19kaXIvbGliOyB0aGVuCisgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLUkkd2l0aF9uc3NfZGlyL2luY2x1ZGUiCisgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLUkkd2l0aF9uc3NfZGlyLy4uL3B1YmxpYy9uc3MiCisgICAgICAgICBpZiB0ZXN0ICJ4JExERkxBR1MiID0gIngiOyB0aGVuCisgICAgICAgICAgIExERkxBR1M9Ii1MJHdpdGhfbnNzX2Rpci9saWIiCisgICAgICAgICBlbHNlCisgICAgICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1MJHdpdGhfbnNzX2Rpci9saWIiCisgICAgICAgICBmaQorICAgICAgICAgbnNzX3NraXBfcGtnX2NvbmZpZz15ZXMKKyAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkd2l0aF9uc3NfZGlyIiA+JjUKKyRhc19lY2hvICIkd2l0aF9uc3NfZGlyIiA+JjY7IH0KKyAgICAgICBlbHNlCisgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogaW52YWxpZCIgPiY1CiskYXNfZWNobyAiaW52YWxpZCIgPiY2OyB9CisgICAgICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIE5TUyBsb2NhdGlvbjogJHdpdGhfbnNzX2RpcgorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyAgICAgICBmaQorICAgICAgIENSWVBUT19MSUJESVI9JHdpdGhfbnNzX2Rpci9saWIKKworZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgaWYgdGVzdCAieCRQS0dfQ09ORklHIiAhPSAieCIgJiYgdGVzdCAiJG5zc19za2lwX3BrZ19jb25maWciICE9ICJ5ZXMiOyB0aGVuCisKK3BrZ19mYWlsZWQ9bm8KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG5zcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbnNzLi4uICIgPiY2OyB9CisKK2lmIHRlc3QgLW4gIiRuc3NfQ0ZMQUdTIjsgdGhlbgorICAgIHBrZ19jdl9uc3NfQ0ZMQUdTPSIkbnNzX0NGTEFHUyIKKyBlbGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIm5zc1wiIjsgfSA+JjUKKyAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICJuc3MiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICBwa2dfY3ZfbnNzX0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgIm5zcyIgMj4vZGV2L251bGxgCisJCSAgICAgIHRlc3QgIngkPyIgIT0gIngwIiAmJiBwa2dfZmFpbGVkPXllcworZWxzZQorICBwa2dfZmFpbGVkPXllcworZmkKKyBlbHNlCisgICAgcGtnX2ZhaWxlZD11bnRyaWVkCitmaQoraWYgdGVzdCAtbiAiJG5zc19MSUJTIjsgdGhlbgorICAgIHBrZ19jdl9uc3NfTElCUz0iJG5zc19MSUJTIgorIGVsaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwibnNzXCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIm5zcyIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgIHBrZ19jdl9uc3NfTElCUz1gJFBLR19DT05GSUcgLS1saWJzICJuc3MiIDI+L2Rldi9udWxsYAorCQkgICAgICB0ZXN0ICJ4JD8iICE9ICJ4MCIgJiYgcGtnX2ZhaWxlZD15ZXMKK2Vsc2UKKyAgcGtnX2ZhaWxlZD15ZXMKK2ZpCisgZWxzZQorICAgIHBrZ19mYWlsZWQ9dW50cmllZAorZmkKKworCisKK2lmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7IHRoZW4KKyAgIAl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcworZWxzZQorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KK2ZpCisgICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgorCSAgICAgICAgbnNzX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tcHJpbnQtZXJyb3JzIC0tY2ZsYWdzIC0tbGlicyAibnNzIiAyPiYxYAorICAgICAgICBlbHNlCisJICAgICAgICBuc3NfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1wcmludC1lcnJvcnMgLS1jZmxhZ3MgLS1saWJzICJuc3MiIDI+JjFgCisgICAgICAgIGZpCisJIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCisJZWNobyAiJG5zc19QS0dfRVJST1JTIiA+JjUKKworCWFzX2ZuX2Vycm9yICQ/ICJQYWNrYWdlIHJlcXVpcmVtZW50cyAobnNzKSB3ZXJlIG5vdCBtZXQ6CisKKyRuc3NfUEtHX0VSUk9SUworCitDb25zaWRlciBhZGp1c3RpbmcgdGhlIFBLR19DT05GSUdfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiB5b3UKK2luc3RhbGxlZCBzb2Z0d2FyZSBpbiBhIG5vbi1zdGFuZGFyZCBwcmVmaXguCisKK0FsdGVybmF0aXZlbHksIHlvdSBtYXkgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgbnNzX0NGTEFHUworYW5kIG5zc19MSUJTIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGNhbGwgcGtnLWNvbmZpZy4KK1NlZSB0aGUgcGtnLWNvbmZpZyBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDUKK2VsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KKyAgICAgCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCXsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gIlRoZSBwa2ctY29uZmlnIHNjcmlwdCBjb3VsZCBub3QgYmUgZm91bmQgb3IgaXMgdG9vIG9sZC4gIE1ha2Ugc3VyZSBpdAoraXMgaW4geW91ciBQQVRIIG9yIHNldCB0aGUgUEtHX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgZnVsbAorcGF0aCB0byBwa2ctY29uZmlnLgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIG5zc19DRkxBR1MKK2FuZCBuc3NfTElCUyB0byBhdm9pZCB0aGUgbmVlZCB0byBjYWxsIHBrZy1jb25maWcuCitTZWUgdGhlIHBrZy1jb25maWcgbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy4KKworVG8gZ2V0IHBrZy1jb25maWcsIHNlZSA8aHR0cDovL3BrZy1jb25maWcuZnJlZWRlc2t0b3Aub3JnLz4uCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorZWxzZQorCW5zc19DRkxBR1M9JHBrZ19jdl9uc3NfQ0ZMQUdTCisJbnNzX0xJQlM9JHBrZ19jdl9uc3NfTElCUworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCUNGTEFHUz0iJENGTEFHUyAkbnNzX0NGTEFHUyIKKyAgICAgICAgIExJQlM9IiRuc3NfTElCUyAkTElCUyIKK2ZpCisgICBlbHNlCisgICAgIGZvciBhY19oZWFkZXIgaW4gbnNzLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIm5zcy5oIiAiYWNfY3ZfaGVhZGVyX25zc19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX25zc19oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTlNTX0ggMQorX0FDRU9GCisKK2Vsc2UKKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiY2FuJ3QgZmluZCB1c2VhYmxlIE5TUyBoZWFkZXJzCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorZmkKKworZG9uZQorCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFBSX0dldEVycm9yIGluIC1sbnNwcjQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFBSX0dldEVycm9yIGluIC1sbnNwcjQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX25zcHI0X1BSX0dldEVycm9yKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxuc3ByNCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgUFJfR2V0RXJyb3IgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBQUl9HZXRFcnJvciAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfbnNwcjRfUFJfR2V0RXJyb3I9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9uc3ByNF9QUl9HZXRFcnJvcj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfbnNwcjRfUFJfR2V0RXJyb3IiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfbnNwcjRfUFJfR2V0RXJyb3IiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfbnNwcjRfUFJfR2V0RXJyb3IiID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9MSUJOU1BSNCAxCitfQUNFT0YKKworICBMSUJTPSItbG5zcHI0ICRMSUJTIgorCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogY2FuJ3QgZmluZCBsaWJuc3ByNCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYW4ndCBmaW5kIGxpYm5zcHI0IiA+JjI7fQorZmkKKworICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBOU1NfTm9EQl9Jbml0IGluIC1sbnNzMyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgTlNTX05vREJfSW5pdCBpbiAtbG5zczMuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX25zczNfTlNTX05vREJfSW5pdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sbnNzMyAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgTlNTX05vREJfSW5pdCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIE5TU19Ob0RCX0luaXQgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX25zczNfTlNTX05vREJfSW5pdD15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX25zczNfTlNTX05vREJfSW5pdD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfbnNzM19OU1NfTm9EQl9Jbml0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX25zczNfTlNTX05vREJfSW5pdCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9uc3MzX05TU19Ob0RCX0luaXQiID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9MSUJOU1MzIDEKK19BQ0VPRgorCisgIExJQlM9Ii1sbnNzMyAkTElCUyIKKworZWxzZQorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJjYW4ndCBmaW5kIHVzZWFibGUgbGlibnNzMworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KK2ZpCisKKyAgIGZpCisKKworJGFzX2VjaG8gIiNkZWZpbmUgR0NNIDEiID4+Y29uZmRlZnMuaAorCisKKyRhc19lY2hvICIjZGVmaW5lIE5TUyAxIiA+PmNvbmZkZWZzLmgKKworICAgQUVTX0lDTV9PQkpTPSJjcnlwdG8vY2lwaGVyL2Flc19pY21fbnNzLm8gY3J5cHRvL2NpcGhlci9hZXNfZ2NtX25zcy5vIgorCisgICAjIFRPRE8oUkxCKTogVXNlIE5TUyBmb3IgSE1BQworICAgSE1BQ19PQkpTPSJjcnlwdG8vaGFzaC9obWFjLm8gY3J5cHRvL2hhc2gvc2hhMS5vIgorCisgICAjIFRPRE8oUkxCKTogVXNlIE5TUyBmb3IgS0RGCisKKyAgIFVTRV9FWFRFUk5BTF9DUllQVE89MQorCitlbHNlCisgICBBRVNfSUNNX09CSlM9ImNyeXB0by9jaXBoZXIvYWVzX2ljbS5vIGNyeXB0by9jaXBoZXIvYWVzLm8iCisgICBITUFDX09CSlM9ImNyeXB0by9oYXNoL2htYWMubyBjcnlwdG8vaGFzaC9zaGExLm8iCitmaQorCisKKworCitQQ0FQX0xJQj0iIgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcGNhcF9jcmVhdGUgaW4gLWxwY2FwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBwY2FwX2NyZWF0ZSBpbiAtbHBjYXAuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3BjYXBfcGNhcF9jcmVhdGUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHBjYXAgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHBjYXBfY3JlYXRlICgpOworaW50CittYWluICgpCit7CityZXR1cm4gcGNhcF9jcmVhdGUgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX3BjYXBfcGNhcF9jcmVhdGU9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9wY2FwX3BjYXBfY3JlYXRlPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9wY2FwX3BjYXBfY3JlYXRlIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3BjYXBfcGNhcF9jcmVhdGUiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfcGNhcF9wY2FwX2NyZWF0ZSIgPSB4eWVzOyB0aGVuIDoKKyAgUENBUF9MSUI9Ii1scGNhcCIKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9QQ0FQIDEiID4+Y29uZmRlZnMuaAorCisgICBIQVZFX1BDQVA9MQogCiBmaQogCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZ2VuZXJpYy1hZXNpY20gb3IgLS1kaXNhYmxlLWdlbmVyaWMtYWVzaWNtIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2dlbmVyaWNfYWVzaWNtK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9nZW5lcmljX2Flc2ljbSIKLSAgR0VORVJJQ19BRVNJQ009MAotZWxzZQotICBHRU5FUklDX0FFU0lDTT0xCi1maTsKIAotaWYgdGVzdCAkR0VORVJJQ19BRVNJQ00gPSAxOyB0aGVuCi0gICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBHRU5FUklDX0FFU0lDTSAxCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBwY2FwX2NyZWF0ZSBpbiAtbHdwY2FwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBwY2FwX2NyZWF0ZSBpbiAtbHdwY2FwLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl93cGNhcF9wY2FwX2NyZWF0ZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sd3BjYXAgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHBjYXBfY3JlYXRlICgpOworaW50CittYWluICgpCit7CityZXR1cm4gcGNhcF9jcmVhdGUgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CiBfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX3dwY2FwX3BjYXBfY3JlYXRlPXllcworZWxzZQorICBhY19jdl9saWJfd3BjYXBfcGNhcF9jcmVhdGU9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3dwY2FwX3BjYXBfY3JlYXRlIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3dwY2FwX3BjYXBfY3JlYXRlIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3dwY2FwX3BjYXBfY3JlYXRlIiA9IHh5ZXM7IHRoZW4gOgorICBQQ0FQX0xJQj0iLWx3cGNhcCIKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9QQ0FQIDEiID4+Y29uZmRlZnMuaAorCisgICBIQVZFX1BDQVA9MQogCiBmaQogCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3lzbG9nIG9yIC0tZGlzYWJsZS1zeXNsb2cgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfc3lzbG9nK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9zeXNsb2ciCi0gIFVTRV9TWVNMT0c9MQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byByZWRpcmVjdCBsb2dnaW5nIHRvIHN0ZG91dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIHJlZGlyZWN0IGxvZ2dpbmcgdG8gc3Rkb3V0Li4uICIgPiY2OyB9CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbG9nLXN0ZG91dCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9sb2dfc3Rkb3V0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbG9nX3N0ZG91dDsKIGVsc2UKLSAgVVNFX1NZU0xPRz0wCi1maTsKLQotaWYgdGVzdCAkVVNFX1NZU0xPRyA9IDE7IHRoZW4KLSAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIFVTRV9TWVNMT0cgMQotX0FDRU9GCi0KKyAgZW5hYmxlX2xvZ19zdGRvdXQ9bm8KIGZpCiAKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zdGRvdXQgb3IgLS1kaXNhYmxlLXN0ZG91dCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9zdGRvdXQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3N0ZG91dCIKLSAgRVJSX1NURE9VVD0wCi1lbHNlCi0gIEVSUl9TVERPVVQ9MQotZmk7CitpZiB0ZXN0ICIkZW5hYmxlX2xvZ19zdGRvdXQiID0gInllcyI7IHRoZW4KIAotaWYgdGVzdCAkRVJSX1NURE9VVCA9IDE7IHRoZW4KLSAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEVSUl9SRVBPUlRJTkdfU1RET1VUIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgRVJSX1JFUE9SVElOR19TVERPVVQgMSIgPj5jb25mZGVmcy5oCiAKIGZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGVuYWJsZV9sb2dfc3Rkb3V0IiA+JjUKKyRhc19lY2hvICIkZW5hYmxlX2xvZ19zdGRvdXQiID4mNjsgfQogCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtY29uc29sZSBvciAtLWRpc2FibGUtY29uc29sZSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9jb25zb2xlK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9jb25zb2xlIgotICBFUlJfRklMRT0xCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZWF0aGVyIHRvIHVzZSBhIGZpbGUgZm9yIGxvZ2dpbmciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hlYXRoZXIgdG8gdXNlIGEgZmlsZSBmb3IgbG9nZ2luZy4uLiAiID4mNjsgfQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxvZy1maWxlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9sb2dfZmlsZStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbG9nX2ZpbGU7IGNhc2UgeCR3aXRoX2xvZ19maWxlIGluICMoCisgIHgpIDoKKyAgICB2YWxpZF93aXRoX2xvZ19maWxlPSJubyIgOzsgIygKKyAgeHllcykgOgorICAgIHZhbGlkX3dpdGhfbG9nX2ZpbGU9Im5vIiA7OyAjKAorICAqKSA6CisgICAgdmFsaWRfd2l0aF9lcnJvcl9maWxlPSJ5ZXMiIDs7Citlc2FjCisgICBpZiB0ZXN0ICIkdmFsaWRfd2l0aF9sb2dfZmlsZSIgPSAibm8iOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGludmFsaWQiID4mNQorJGFzX2VjaG8gImludmFsaWQiID4mNjsgfQorICAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiSW52YWxpZCB2YWx1ZSBmb3IgLS13aXRoLWxvZy1maWxlOiBcIiR3aXRoX2xvZ19maWxlXCIKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CiBlbHNlCi0gIEVSUl9GSUxFPTAKLWZpOwogCi1pZiB0ZXN0ICRFUlJfRklMRSA9IDE7IHRoZW4KLSAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEVSUl9SRVBPUlRJTkdfRklMRSAiL2Rldi9jb25zb2xlIgorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBFUlJfUkVQT1JUSU5HX0ZJTEUgIiR3aXRoX2xvZ19maWxlIgogX0FDRU9GCiAKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1c2luZyBsb2cgZmlsZTogXCIkd2l0aF9sb2dfZmlsZVwiIiA+JjUKKyRhc19lY2hvICJ1c2luZyBsb2cgZmlsZTogXCIkd2l0aF9sb2dfZmlsZVwiIiA+JjY7IH0KIGZpCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZ2RvaSBvciAtLWRpc2FibGUtZ2RvaSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9nZG9pK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9nZG9pIgotICBHRE9JPTEKIGVsc2UKLSAgR0RPST0wCi1maTsKLQotaWYgdGVzdCAkR0RPSSA9IDE7IHRoZW4KLSAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgR0RPSSBrZXkgbWFuYWdlbWVudCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBHRE9JIGtleSBtYW5hZ2VtZW50Li4uICRFQ0hPX0MiID4mNgotICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogPyIgPiY1Ci1lY2hvICIke0VDSE9fVH0/IiA+JjYKLSAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIFNSVFBfR0RPSSAxCi1fQUNFT0YKLQotICAgR0RPSV9PQkpTPWdkb2kvc3J0cCtnZG9pLm8KLQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKLSAgICAgICAgICBhY19jb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIGluY2x1ZGUvY29uZmlnLmg6Y29uZmlnX2luLmgiCisKK2lmIHRlc3QgIiRlbmFibGVfbG9nX3N0ZG91dCIgPSAieWVzIiAmJiB0ZXN0ICJ4JHdpdGhfbG9nX2ZpbGUiICE9ICJ4IjsgdGhlbiA6CisgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gIkNhbiBvbmx5IHVzZSBvbmUgb2YgLS1lbmFibGUtbG9nLXN0ZG91dCBhbmQgLS13aXRoLWxvZy1maWxlOyB0aGV5IGFyZSBtdXR1YWxseSBleGNsdXNpdmUKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBleHRyYSBDIGNvbXBpbGVyIGZsYWdzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBleHRyYSBDIGNvbXBpbGVyIGZsYWdzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICJ4JEVYVFJBX0NGTEFHUyIgIT0gIngiOyB0aGVuIDoKKyAgaWYgdGVzdCAieCRDRkxBR1MiID0gIngiOyB0aGVuIDoKKyAgQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTIgorZWxzZQorICBDRkxBR1M9IiRDRkxBR1MgJEVYVFJBX0NGTEFHUyIKK2ZpCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRFWFRSQV9DRkxBR1MiID4mNQorJGFzX2VjaG8gIiRFWFRSQV9DRkxBR1MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKK2FjX2NvbmZpZ19oZWFkZXJzPSIkYWNfY29uZmlnX2hlYWRlcnMgY3J5cHRvL2luY2x1ZGUvY29uZmlnLmg6Y29uZmlnX2luLmgiCiAKIAotICAgICAgICAgIGFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBNYWtlZmlsZSIKK2FjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBNYWtlZmlsZSBjcnlwdG8vTWFrZWZpbGUgZG9jL01ha2VmaWxlIGZ1enplci9NYWtlZmlsZSBsaWJzcnRwMi5wYyIKKwogY2F0ID5jb25mY2FjaGUgPDxcX0FDRU9GCiAjIFRoaXMgZmlsZSBpcyBhIHNoZWxsIHNjcmlwdCB0aGF0IGNhY2hlcyB0aGUgcmVzdWx0cyBvZiBjb25maWd1cmUKICMgdGVzdHMgcnVuIG9uIHRoaXMgc3lzdGVtIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGNvbmZpZ3VyZQpAQCAtNDcwNSwzOSArNjQ5Myw3MCBAQAogCiAjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAogIyBidXQgd2Uga25vdyBvZiBubyB3b3JrYXJvdW5kIHRoYXQgaXMgc2ltcGxlLCBwb3J0YWJsZSwgYW5kIGVmZmljaWVudC4KLSMgU28sIGRvbid0IHB1dCBuZXdsaW5lcyBpbiBjYWNoZSB2YXJpYWJsZXMnIHZhbHVlcy4KKyMgU28sIHdlIGtpbGwgdmFyaWFibGVzIGNvbnRhaW5pbmcgbmV3bGluZXMuCiAjIFVsdHJpeCBzaCBzZXQgd3JpdGVzIHRvIHN0ZGVyciBhbmQgY2FuJ3QgYmUgcmVkaXJlY3RlZCBkaXJlY3RseSwKICMgYW5kIHNldHMgdGhlIGhpZ2ggYml0IGluIHRoZSBjYWNoZSBmaWxlIHVubGVzcyB3ZSBhc3NpZ24gdG8gdGhlIHZhcnMuCi17CisoCisgIGZvciBhY192YXIgaW4gYChzZXQpIDI+JjEgfCBzZWQgLW4gJ3MvXlwoW2EtekEtWl9dW2EtekEtWjAtOV9dKlwpPS4qL1wxL3AnYDsgZG8KKyAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgICBjYXNlICRhY192YWwgaW4gIygKKyAgICAqJHthc19ubH0qKQorICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICAqX2N2XyopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mMjt9IDs7CisgICAgICBlc2FjCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgIF8gfCBJRlMgfCBhc19ubCkgOzsgIygKKyAgICAgIEJBU0hfQVJHViB8IEJBU0hfU09VUkNFKSBldmFsICRhY192YXI9IDs7ICMoCisgICAgICAqKSB7IGV2YWwgJGFjX3Zhcj07IHVuc2V0ICRhY192YXI7fSA7OworICAgICAgZXNhYyA7OworICAgIGVzYWMKKyAgZG9uZQorCiAgIChzZXQpIDI+JjEgfAotICAgIGNhc2UgYChhY19zcGFjZT0nICc7IHNldCB8IGdyZXAgYWNfc3BhY2UpIDI+JjFgIGluCi0gICAgKmFjX3NwYWNlPVwgKikKLSAgICAgICMgYHNldCcgZG9lcyBub3QgcXVvdGUgY29ycmVjdGx5LCBzbyBhZGQgcXVvdGVzIChkb3VibGUtcXVvdGUKLSAgICAgICMgc3Vic3RpdHV0aW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwpLgorICAgIGNhc2UgJGFzX25sYChhY19zcGFjZT0nICc7IHNldCkgMj4mMWAgaW4gIygKKyAgICAqJHthc19ubH1hY19zcGFjZT1cICopCisgICAgICAjIGBzZXQnIGRvZXMgbm90IHF1b3RlIGNvcnJlY3RseSwgc28gYWRkIHF1b3RlczogZG91YmxlLXF1b3RlCisgICAgICAjIHN1YnN0aXR1dGlvbiB0dXJucyBcXFxcIGludG8gXFwsIGFuZCBzZWQgdHVybnMgXFwgaW50byBcLgogICAgICAgc2VkIC1uIFwKLSAgICAgICAgInMvJy8nXFxcXCcnL2c7Ci0gICAgCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXFwyJy9wIgotICAgICAgOzsKKwkicy8nLydcXFxcJycvZzsKKwkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1xcMicvcCIKKyAgICAgIDs7ICMoCiAgICAgKikKICAgICAgICMgYHNldCcgcXVvdGVzIGNvcnJlY3RseSBhcyByZXF1aXJlZCBieSBQT1NJWCwgc28gZG8gbm90IGFkZCBxdW90ZXMuCi0gICAgICBzZWQgLW4gXAotICAgICAgICAicy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT1cXDIvcCIKKyAgICAgIHNlZCAtbiAiL15bXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSo9L3AiCiAgICAgICA7OwotICAgIGVzYWM7Ci19IHwKKyAgICBlc2FjIHwKKyAgICBzb3J0CispIHwKICAgc2VkICcKKyAgICAgL15hY19jdl9lbnZfL2IgZW5kCiAgICAgIHQgY2xlYXIKLSAgICAgOiBjbGVhcgorICAgICA6Y2xlYXIKICAgICAgcy9eXChbXj1dKlwpPVwoLipbe31dLipcKSQvdGVzdCAiJHtcMStzZXR9IiA9IHNldCB8fCAmLwogICAgICB0IGVuZAotICAgICAvXmFjX2N2X2Vudi8hcy9eXChbXj1dKlwpPVwoLipcKSQvXDE9JHtcMT1cMn0vCi0gICAgIDogZW5kJyA+PmNvbmZjYWNoZQotaWYgZGlmZiAkY2FjaGVfZmlsZSBjb25mY2FjaGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKLSAgaWYgdGVzdCAtdyAkY2FjaGVfZmlsZTsgdGhlbgotICAgIHRlc3QgIngkY2FjaGVfZmlsZSIgIT0gIngvZGV2L251bGwiICYmIGVjaG8gInVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIgotICAgIGNhdCBjb25mY2FjaGUgPiRjYWNoZV9maWxlCisgICAgIHMvXlwoW149XSpcKT1cKC4qXCkkL1wxPSR7XDE9XDJ9LworICAgICA6ZW5kJyA+PmNvbmZjYWNoZQoraWYgZGlmZiAiJGNhY2hlX2ZpbGUiIGNvbmZjYWNoZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICBpZiB0ZXN0IC13ICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgICBpZiB0ZXN0ICJ4JGNhY2hlX2ZpbGUiICE9ICJ4L2Rldi9udWxsIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgICAgIGlmIHRlc3QgISAtZiAiJGNhY2hlX2ZpbGUiIHx8IHRlc3QgLWggIiRjYWNoZV9maWxlIjsgdGhlbgorCWNhdCBjb25mY2FjaGUgPiIkY2FjaGVfZmlsZSIKKyAgICAgIGVsc2UKKyAgICAgICAgY2FzZSAkY2FjaGVfZmlsZSBpbiAjKAorICAgICAgICAqLyogfCA/OiopCisJICBtdiAtZiBjb25mY2FjaGUgIiRjYWNoZV9maWxlIiQkICYmCisJICBtdiAtZiAiJGNhY2hlX2ZpbGUiJCQgIiRjYWNoZV9maWxlIiA7OyAjKAorICAgICAgICAqKQorCSAgbXYgLWYgY29uZmNhY2hlICIkY2FjaGVfZmlsZSIgOzsKKwllc2FjCisgICAgICBmaQorICAgIGZpCiAgIGVsc2UKLSAgICBlY2hvICJub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQogICBmaQogZmkKIHJtIC1mIGNvbmZjYWNoZQpAQCAtNDc0NiwzMiArNjU2NSwxOSBAQAogIyBMZXQgbWFrZSBleHBhbmQgZXhlY19wcmVmaXguCiB0ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9IHhOT05FICYmIGV4ZWNfcHJlZml4PScke3ByZWZpeH0nCiAKLSMgVlBBVEggbWF5IGNhdXNlIHRyb3VibGUgd2l0aCBzb21lIG1ha2VzLCBzbyB3ZSByZW1vdmUgJChzcmNkaXIpLAotIyAke3NyY2Rpcn0gYW5kIEBzcmNkaXJAIGZyb20gVlBBVEggaWYgc3JjZGlyIGlzICIuIiwgc3RyaXAgbGVhZGluZyBhbmQKLSMgdHJhaWxpbmcgY29sb25zIGFuZCB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgbGluZSBpZiBWUEFUSCBiZWNvbWVzIGVtcHR5Ci0jIChhY3R1YWxseSB3ZSBsZWF2ZSBhbiBlbXB0eSBsaW5lIHRvIHByZXNlcnZlIGxpbmUgbnVtYmVycykuCi1pZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgotICBhY192cHN1Yj0nL15bIAldKlZQQVRIWyAJXSo9L3sKLXMvOipcJChzcmNkaXIpOiovOi87Ci1zLzoqXCR7c3JjZGlyfToqLzovOwotcy86KkBzcmNkaXJAOiovOi87Ci1zL15cKFtePV0qPVsgCV0qXCk6Ki9cMS87Ci1zLzoqJC8vOwotcy9eW149XSo9WyAJXSokLy87Ci19JwotZmkKLQogREVGUz0tREhBVkVfQ09ORklHX0gKIAogYWNfbGlib2Jqcz0KIGFjX2x0bGlib2Jqcz0KK1U9CiBmb3IgYWNfaSBpbiA6ICRMSUJPQkpTOyBkbyB0ZXN0ICJ4JGFjX2kiID0geDogJiYgY29udGludWUKICAgIyAxLiBSZW1vdmUgdGhlIGV4dGVuc2lvbiwgYW5kICRVIGlmIGFscmVhZHkgaW5zdGFsbGVkLgotICBhY19pPWBlY2hvICIkYWNfaSIgfAotICAgICAgICAgc2VkICdzL1wkVVwuLy4vO3MvXC5vJC8vO3MvXC5vYmokLy8nYAotICAjIDIuIEFkZCB0aGVtLgotICBhY19saWJvYmpzPSIkYWNfbGlib2JqcyAkYWNfaVwkVS4kYWNfb2JqZXh0IgotICBhY19sdGxpYm9ianM9IiRhY19sdGxpYm9ianMgJGFjX2kiJyRVLmxvJworICBhY19zY3JpcHQ9J3MvXCRVXC4vLi87cy9cLm8kLy87cy9cLm9iaiQvLycKKyAgYWNfaT1gJGFzX2VjaG8gIiRhY19pIiB8IHNlZCAiJGFjX3NjcmlwdCJgCisgICMgMi4gUHJlcGVuZCBMSUJPQkpESVIuICBXaGVuIHVzZWQgd2l0aCBhdXRvbWFrZT49MS4xMCBMSUJPQkpESVIKKyAgIyAgICB3aWxsIGJlIHNldCB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIExJQk9CSlMgb2JqZWN0cyBhcmUgYnVpbHQuCisgIGFzX2ZuX2FwcGVuZCBhY19saWJvYmpzICIgXCR7TElCT0JKRElSfSRhY19pXCRVLiRhY19vYmpleHQiCisgIGFzX2ZuX2FwcGVuZCBhY19sdGxpYm9ianMgIiBcJHtMSUJPQkpESVJ9JGFjX2kiJyRVLmxvJwogZG9uZQogTElCT0JKUz0kYWNfbGlib2JqcwogCkBAIC00Nzc5LDEyICs2NTg1LDE1IEBACiAKIAogCi06ICR7Q09ORklHX1NUQVRVUz0uL2NvbmZpZy5zdGF0dXN9CisKKzogIiR7Q09ORklHX1NUQVRVUz0uL2NvbmZpZy5zdGF0dXN9IgorYWNfd3JpdGVfZmFpbD0wCiBhY19jbGVhbl9maWxlc19zYXZlPSRhY19jbGVhbl9maWxlcwogYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyAkQ09ORklHX1NUQVRVUyIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjUKLWVjaG8gIiRhc19tZTogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNjt9Ci1jYXQgPiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjY7fQorYXNfd3JpdGVfZmFpbD0wCitjYXQgPiRDT05GSUdfU1RBVFVTIDw8X0FTRU9GIHx8IGFzX3dyaXRlX2ZhaWw9MQogIyEgJFNIRUxMCiAjIEdlbmVyYXRlZCBieSAkYXNfbWUuCiAjIFJ1biB0aGlzIGZpbGUgdG8gcmVjcmVhdGUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KQEAgLTQ3OTQsODAgKzY2MDMsMjUzIEBACiBkZWJ1Zz1mYWxzZQogYWNfY3NfcmVjaGVjaz1mYWxzZQogYWNfY3Nfc2lsZW50PWZhbHNlCisKIFNIRUxMPVwke0NPTkZJR19TSEVMTC0kU0hFTEx9Ci1fQUNFT0YKK2V4cG9ydCBTSEVMTAorX0FTRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQVNFT0YgfHwgYXNfd3JpdGVfZmFpbD0xCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBNNHNoIEluaXRpYWxpemF0aW9uLiAgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotCi0jIEJlIEJvdXJuZSBjb21wYXRpYmxlCi1pZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyMgQmUgbW9yZSBCb3VybmUgY29tcGF0aWJsZQorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKICAgZW11bGF0ZSBzaAogICBOVUxMQ01EPToKLSAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKICAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KICAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCi1lbGlmIHRlc3QgLW4gIiR7QkFTSF9WRVJTSU9OK3NldH0iICYmIChzZXQgLW8gcG9zaXgpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBzZXQgLW8gcG9zaXgKLWZpCi0KLSMgU3VwcG9ydCB1bnNldCB3aGVuIHBvc3NpYmxlLgotaWYgKEZPTz1GT087IHVuc2V0IEZPTykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGFzX3Vuc2V0PXVuc2V0CisgIHNldG9wdCBOT19HTE9CX1NVQlNUCiBlbHNlCi0gIGFzX3Vuc2V0PWZhbHNlCisgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAjKAorICAqcG9zaXgqKSA6CisgICAgc2V0IC1vIHBvc2l4IDs7ICMoCisgICopIDoKKyAgICAgOzsKK2VzYWMKIGZpCiAKIAotIyBXb3JrIGFyb3VuZCBidWdzIGluIHByZS0zLjAgVVdJTiBrc2guCi0kYXNfdW5zZXQgRU5WIE1BSUwgTUFJTFBBVEgKK2FzX25sPScKKycKK2V4cG9ydCBhc19ubAorIyBQcmludGluZyBhIGxvbmcgc3RyaW5nIGNyYXNoZXMgU29sYXJpcyA3IC91c3IvYmluL3ByaW50Zi4KK2FzX2VjaG89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCisjIFByZWZlciBhIGtzaCBzaGVsbCBidWlsdGluIG92ZXIgYW4gZXh0ZXJuYWwgcHJpbnRmIHByb2dyYW0gb24gU29sYXJpcywKKyMgYnV0IHdpdGhvdXQgd2FzdGluZyBmb3JrcyBmb3IgYmFzaCBvciB6c2guCitpZiB0ZXN0IC16ICIkQkFTSF9WRVJTSU9OJFpTSF9WRVJTSU9OIiBcCisgICAgJiYgKHRlc3QgIlhgcHJpbnQgLXIgLS0gJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludCAtciAtLScKKyAgYXNfZWNob19uPSdwcmludCAtcm4gLS0nCitlbGlmICh0ZXN0ICJYYHByaW50ZiAlcyAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2VjaG89J3ByaW50ZiAlc1xuJworICBhc19lY2hvX249J3ByaW50ZiAlcycKK2Vsc2UKKyAgaWYgdGVzdCAiWGAoL3Vzci91Y2IvZWNobyAtbiAtbiAkYXNfZWNobykgMj4vZGV2L251bGxgIiA9ICJYLW4gJGFzX2VjaG8iOyB0aGVuCisgICAgYXNfZWNob19ib2R5PSdldmFsIC91c3IvdWNiL2VjaG8gLW4gIiQxJGFzX25sIicKKyAgICBhc19lY2hvX249Jy91c3IvdWNiL2VjaG8gLW4nCisgIGVsc2UKKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgZXhwciAiWCQxIiA6ICJYXFwoLipcXCkiJworICAgIGFzX2VjaG9fbl9ib2R5PSdldmFsCisgICAgICBhcmc9JDE7CisgICAgICBjYXNlICRhcmcgaW4gIygKKyAgICAgICoiJGFzX25sIiopCisJZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSRhc19ubCI7CisJYXJnPWBleHByICJYJGFyZyIgOiAiLiokYXNfbmxcXCguKlxcKSJgOzsKKyAgICAgIGVzYWM7CisgICAgICBleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpIiB8IHRyIC1kICIkYXNfbmwiCisgICAgJworICAgIGV4cG9ydCBhc19lY2hvX25fYm9keQorICAgIGFzX2VjaG9fbj0nc2ggLWMgJGFzX2VjaG9fbl9ib2R5IGFzX2VjaG8nCisgIGZpCisgIGV4cG9ydCBhc19lY2hvX2JvZHkKKyAgYXNfZWNobz0nc2ggLWMgJGFzX2VjaG9fYm9keSBhc19lY2hvJworZmkKKworIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCitpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorICBQQVRIX1NFUEFSQVRPUj06CisgIChQQVRIPScvYmluOy9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxICYmIHsKKyAgICAoUEFUSD0nL2JpbjovYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSB8fAorICAgICAgUEFUSF9TRVBBUkFUT1I9JzsnCisgIH0KK2ZpCisKKworIyBJRlMKKyMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuICBRdW90aW5nIGlzCisjIHRoZXJlIHRvIHByZXZlbnQgZWRpdG9ycyBmcm9tIGNvbXBsYWluaW5nIGFib3V0IHNwYWNlLXRhYi4KKyMgKElmIF9BU19QQVRIX1dBTEsgd2VyZSBjYWxsZWQgd2l0aCBJRlMgdW5zZXQsIGl0IHdvdWxkIGRpc2FibGUgd29yZAorIyBzcGxpdHRpbmcgYnkgc2V0dGluZyBJRlMgdG8gZW1wdHkgdmFsdWUuKQorSUZTPSIgIiIJJGFzX25sIgorCisjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBkaXJlY3Rvcnkgc2VwYXJhdG9yLgorYXNfbXlzZWxmPQorY2FzZSAkMCBpbiAjKCgKKyAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OworICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgICAgIDs7Citlc2FjCisjIFdlIGRpZCBub3QgZmluZCBvdXJzZWx2ZXMsIG1vc3QgcHJvYmFibHkgd2Ugd2VyZSBydW4gYXMgYHNoIENPTU1BTkQnCisjIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KK2lmIHRlc3QgIngkYXNfbXlzZWxmIiA9IHg7IHRoZW4KKyAgYXNfbXlzZWxmPSQwCitmaQoraWYgdGVzdCAhIC1mICIkYXNfbXlzZWxmIjsgdGhlbgorICAkYXNfZWNobyAiJGFzX215c2VsZjogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUiID4mMgorICBleGl0IDEKK2ZpCisKKyMgVW5zZXQgdmFyaWFibGVzIHRoYXQgd2UgZG8gbm90IG5lZWQgYW5kIHdoaWNoIGNhdXNlIGJ1Z3MgKGUuZy4gaW4KKyMgcHJlLTMuMCBVV0lOIGtzaCkuICBCdXQgZG8gbm90IGNhdXNlIGJ1Z3MgaW4gYmFzaCAyLjAxOyB0aGUgInx8IGV4aXQgMSIKKyMgc3VwcHJlc3NlcyBhbnkgIlNlZ21lbnRhdGlvbiBmYXVsdCIgbWVzc2FnZSB0aGVyZS4gICcoKCcgY291bGQKKyMgdHJpZ2dlciBhIGJ1ZyBpbiBwZGtzaCA1LjIuMTQuCitmb3IgYXNfdmFyIGluIEJBU0hfRU5WIEVOViBNQUlMIE1BSUxQQVRICitkbyBldmFsIHRlc3QgeFwkeyRhc192YXIrc2V0fSA9IHhzZXQgXAorICAmJiAoICh1bnNldCAkYXNfdmFyKSB8fCBleGl0IDEpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCAkYXNfdmFyIHx8IDoKK2RvbmUKIFBTMT0nJCAnCiBQUzI9Jz4gJwogUFM0PScrICcKIAogIyBOTFMgbnVpc2FuY2VzLgotZm9yIGFzX3ZhciBpbiBcCi0gIExBTkcgTEFOR1VBR0UgTENfQUREUkVTUyBMQ19BTEwgTENfQ09MTEFURSBMQ19DVFlQRSBMQ19JREVOVElGSUNBVElPTiBcCi0gIExDX01FQVNVUkVNRU5UIExDX01FU1NBR0VTIExDX01PTkVUQVJZIExDX05BTUUgTENfTlVNRVJJQyBMQ19QQVBFUiBcCi0gIExDX1RFTEVQSE9ORSBMQ19USU1FCi1kbwotICBpZiAoc2V0ICt4OyB0ZXN0IC1uICJgKGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcikgMj4mMWAiKTsgdGhlbgotICAgIGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcgotICBlbHNlCi0gICAgJGFzX3Vuc2V0ICRhc192YXIKLSAgZmkKLWRvbmUKK0xDX0FMTD1DCitleHBvcnQgTENfQUxMCitMQU5HVUFHRT1DCitleHBvcnQgTEFOR1VBR0UKIAotIyBSZXF1aXJlZCB0byB1c2UgYmFzZW5hbWUuCi1pZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMTsgdGhlbgorIyBDRFBBVEguCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKKworIyBhc19mbl9lcnJvciBTVEFUVVMgRVJST1IgW0xJTkVOTyBMT0dfRkRdCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0ICJgYmFzZW5hbWUgJDBgOiBlcnJvcjogRVJST1IiIHRvIHN0ZGVyci4gSWYgTElORU5PIGFuZCBMT0dfRkQgYXJlCisjIHByb3ZpZGVkLCBhbHNvIG91dHB1dCB0aGUgZXJyb3IgdG8gTE9HX0ZELCByZWZlcmVuY2luZyBMSU5FTk8uIFRoZW4gZXhpdCB0aGUKKyMgc2NyaXB0IHdpdGggU1RBVFVTLCB1c2luZyAxIGlmIHRoYXQgd2FzIDAuCithc19mbl9lcnJvciAoKQoreworICBhc19zdGF0dXM9JDE7IHRlc3QgJGFzX3N0YXR1cyAtZXEgMCAmJiBhc19zdGF0dXM9MQorICBpZiB0ZXN0ICIkNCI7IHRoZW4KKyAgICBhc19saW5lbm89JHthc19saW5lbm8tIiQzIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6ICQyIiA+JiQ0CisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiAkMiIgPiYyCisgIGFzX2ZuX2V4aXQgJGFzX3N0YXR1cworfSAjIGFzX2ZuX2Vycm9yCisKKworIyBhc19mbl9zZXRfc3RhdHVzIFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgJD8gdG8gU1RBVFVTLCB3aXRob3V0IGZvcmtpbmcuCithc19mbl9zZXRfc3RhdHVzICgpCit7CisgIHJldHVybiAkMQorfSAjIGFzX2ZuX3NldF9zdGF0dXMKKworIyBhc19mbl9leGl0IFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBFeGl0IHRoZSBzaGVsbCB3aXRoIFNUQVRVUywgZXZlbiBpbiBhICJ0cmFwIDAiIG9yICJzZXQgLWUiIGNvbnRleHQuCithc19mbl9leGl0ICgpCit7CisgIHNldCArZQorICBhc19mbl9zZXRfc3RhdHVzICQxCisgIGV4aXQgJDEKK30gIyBhc19mbl9leGl0CisKKyMgYXNfZm5fdW5zZXQgVkFSCisjIC0tLS0tLS0tLS0tLS0tLQorIyBQb3J0YWJseSB1bnNldCBWQVIuCithc19mbl91bnNldCAoKQoreworICB7IGV2YWwgJDE9OyB1bnNldCAkMTt9Cit9Cithc191bnNldD1hc19mbl91bnNldAorIyBhc19mbl9hcHBlbmQgVkFSIFZBTFVFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXBwZW5kIHRoZSB0ZXh0IGluIFZBTFVFIHRvIHRoZSBlbmQgb2YgdGhlIGRlZmluaXRpb24gY29udGFpbmVkIGluIFZBUi4gVGFrZQorIyBhZHZhbnRhZ2Ugb2YgYW55IHNoZWxsIG9wdGltaXphdGlvbnMgdGhhdCBhbGxvdyBhbW9ydGl6ZWQgbGluZWFyIGdyb3d0aCBvdmVyCisjIHJlcGVhdGVkIGFwcGVuZHMsIGluc3RlYWQgb2YgdGhlIHR5cGljYWwgcXVhZHJhdGljIGdyb3d0aCBwcmVzZW50IGluIG5haXZlCisjIGltcGxlbWVudGF0aW9ucy4KK2lmIChldmFsICJhc192YXI9MTsgYXNfdmFyKz0yOyB0ZXN0IHhcJGFzX3ZhciA9IHgxMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxKz1cJDIKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxPVwkJDFcJDIKKyAgfQorZmkgIyBhc19mbl9hcHBlbmQKKworIyBhc19mbl9hcml0aCBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gYXJpdGhtZXRpYyBldmFsdWF0aW9uIG9uIHRoZSBBUkdzLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUKKyMgZ2xvYmFsICRhc192YWwuIFRha2UgYWR2YW50YWdlIG9mIHNoZWxscyB0aGF0IGNhbiBhdm9pZCBmb3Jrcy4gVGhlIGFyZ3VtZW50cworIyBtdXN0IGJlIHBvcnRhYmxlIGFjcm9zcyAkKCgpKSBhbmQgZXhwci4KK2lmIChldmFsICJ0ZXN0IFwkKCggMSArIDEgKSkgPSAyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPSQoKCAkKiApKQorICB9JworZWxzZQorICBhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPWBleHByICIkQCIgfHwgdGVzdCAkPyAtZXEgMWAKKyAgfQorZmkgIyBhc19mbl9hcml0aAorCisKK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCisgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgogICBhc19leHByPWV4cHIKIGVsc2UKICAgYXNfZXhwcj1mYWxzZQogZmkKIAotaWYgKGJhc2VuYW1lIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC8gMj4mMWAiID0gIlgvIjsgdGhlbgoraWYgKGJhc2VuYW1lIC0tIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC0tIC8gMj4mMWAiID0gIlgvIjsgdGhlbgogICBhc19iYXNlbmFtZT1iYXNlbmFtZQogZWxzZQogICBhc19iYXNlbmFtZT1mYWxzZQogZmkKIAoraWYgKGFzX2Rpcj1gZGlybmFtZSAtLSAvYCAmJiB0ZXN0ICJYJGFzX2RpciIgPSBYLykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX2Rpcm5hbWU9ZGlybmFtZQorZWxzZQorICBhc19kaXJuYW1lPWZhbHNlCitmaQogCi0jIE5hbWUgb2YgdGhlIGV4ZWN1dGFibGUuCi1hc19tZT1gJGFzX2Jhc2VuYW1lICIkMCIgfHwKK2FzX21lPWAkYXNfYmFzZW5hbWUgLS0gIiQwIiB8fAogJGFzX2V4cHIgWC8iJDAiIDogJy4qL1woW14vXVteL10qXCkvKiQnIFx8IFwKIAkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkMCIgOiAnWFwoL1wpJCcgXHwgXAotCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKLWVjaG8gWC8iJDAiIHwKLSAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwvXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwvXChcL1wpLioveyBzLy9cMS87IHE7IH0KLSAgCSAgcy8uKi8uLzsgcSdgCisJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWC8iJDAiIHwKKyAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCiAKLQotIyBQQVRIIG5lZWRzIENSLCBhbmQgTElORU5PIG5lZWRzIENSIGFuZCBQQVRILgogIyBBdm9pZCBkZXBlbmRpbmcgdXBvbiBDaGFyYWN0ZXIgUmFuZ2VzLgogYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCiBhc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKQEAgLTQ4NzUsMTgwICs2ODU3LDEzMyBAQAogYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JwogYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCiAKLSMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgotaWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KLSAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAotICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCi0gIGNobW9kICt4IGNvbmYkJC5zaAotICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgIFBBVEhfU0VQQVJBVE9SPSc7JwotICBlbHNlCi0gICAgUEFUSF9TRVBBUkFUT1I9OgotICBmaQotICBybSAtZiBjb25mJCQuc2gKLWZpCi0KLQotICBhc19saW5lbm9fMT0kTElORU5PCi0gIGFzX2xpbmVub18yPSRMSU5FTk8KLSAgYXNfbGluZW5vXzM9YChleHByICRhc19saW5lbm9fMSArIDEpIDI+L2Rldi9udWxsYAotICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKLSAgdGVzdCAieCRhc19saW5lbm9fMyIgID0gIngkYXNfbGluZW5vXzIiICB8fCB7Ci0gICMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIHBhdGggYXQgYWxsCi0gICMgcmVsYXRpdmUgb3Igbm90LgotICBjYXNlICQwIGluCi0gICAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OwotICAgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKLWRvbmUKLQotICAgICAgIDs7Ci0gIGVzYWMKLSAgIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJwotICAjIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KLSAgaWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgotICAgIGFzX215c2VsZj0kMAotICBmaQotICBpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIHBhdGgiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIHBhdGgiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgZmkKLSAgY2FzZSAkQ09ORklHX1NIRUxMIGluCi0gICcnKQotICAgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gL2JpbiRQQVRIX1NFUEFSQVRPUi91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbwotCSBjYXNlICRhc19kaXIgaW4KLQkgLyopCi0JICAgaWYgKCIkYXNfZGlyLyRhc19iYXNlIiAtYyAnCi0gIGFzX2xpbmVub18xPSRMSU5FTk8KLSAgYXNfbGluZW5vXzI9JExJTkVOTwotICBhc19saW5lbm9fMz1gKGV4cHIgJGFzX2xpbmVub18xICsgMSkgMj4vZGV2L251bGxgCi0gIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgotICB0ZXN0ICJ4JGFzX2xpbmVub18zIiAgPSAieCRhc19saW5lbm9fMiIgJykgMj4vZGV2L251bGw7IHRoZW4KLQkgICAgICRhc191bnNldCBCQVNIX0VOViB8fCB0ZXN0ICIke0JBU0hfRU5WK3NldH0iICE9IHNldCB8fCB7IEJBU0hfRU5WPTsgZXhwb3J0IEJBU0hfRU5WOyB9Ci0JICAgICAkYXNfdW5zZXQgRU5WIHx8IHRlc3QgIiR7RU5WK3NldH0iICE9IHNldCB8fCB7IEVOVj07IGV4cG9ydCBFTlY7IH0KLQkgICAgIENPTkZJR19TSEVMTD0kYXNfZGlyLyRhc19iYXNlCi0JICAgICBleHBvcnQgQ09ORklHX1NIRUxMCi0JICAgICBleGVjICIkQ09ORklHX1NIRUxMIiAiJDAiICR7MSsiJEAifQotCSAgIGZpOzsKLQkgZXNhYwotICAgICAgIGRvbmUKLWRvbmUKLTs7Ci0gIGVzYWMKLQotICAjIENyZWF0ZSAkYXNfbWUubGluZW5vIGFzIGEgY29weSBvZiAkYXNfbXlzZWxmLCBidXQgd2l0aCAkTElORU5PCi0gICMgdW5pZm9ybWx5IHJlcGxhY2VkIGJ5IHRoZSBsaW5lIG51bWJlci4gIFRoZSBmaXJzdCAnc2VkJyBpbnNlcnRzIGEKLSAgIyBsaW5lLW51bWJlciBsaW5lIGJlZm9yZSBlYWNoIGxpbmU7IHRoZSBzZWNvbmQgJ3NlZCcgZG9lcyB0aGUgcmVhbAotICAjIHdvcmsuICBUaGUgc2Vjb25kIHNjcmlwdCB1c2VzICdOJyB0byBwYWlyIGVhY2ggbGluZS1udW1iZXIgbGluZQotICAjIHdpdGggdGhlIG51bWJlcmVkIGxpbmUsIGFuZCBhcHBlbmRzIHRyYWlsaW5nICctJyBkdXJpbmcKLSAgIyBzdWJzdGl0dXRpb24gc28gdGhhdCAkTElORU5PIGlzIG5vdCBhIHNwZWNpYWwgY2FzZSBhdCBsaW5lIGVuZC4KLSAgIyAoUmFqYSBSIEhhcmluYXRoIHN1Z2dlc3RlZCBzZWQgJz0nLCBhbmQgUGF1bCBFZ2dlcnQgd3JvdGUgdGhlCi0gICMgc2Vjb25kICdzZWQnIHNjcmlwdC4gIEJsYW1lIExlZSBFLiBNY01haG9uIGZvciBzZWQncyBzeW50YXguICA6LSkKLSAgc2VkICc9JyA8JGFzX215c2VsZiB8Ci0gICAgc2VkICcKLSAgICAgIE4KLSAgICAgIHMsJCwtLAotICAgICAgOiBsb29wCi0gICAgICBzLF5cKFsnJGFzX2NyX2RpZ2l0cyddKlwpXCguKlwpWyRdTElORU5PXChbXickYXNfY3JfYWxudW0nX11cKSxcMVwyXDFcMywKLSAgICAgIHQgbG9vcAotICAgICAgcywtJCwsCi0gICAgICBzLF5bJyRhc19jcl9kaWdpdHMnXSpcbiwsCi0gICAgJyA+JGFzX21lLmxpbmVubyAmJgotICBjaG1vZCAreCAkYXNfbWUubGluZW5vIHx8Ci0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSAkYXNfbWUubGluZW5vOyByZXJ1biB3aXRoIGEgUE9TSVggc2hlbGwiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSAkYXNfbWUubGluZW5vOyByZXJ1biB3aXRoIGEgUE9TSVggc2hlbGwiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLQotICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcwotICAjICh0aGUgZGlybmFtZSBvZiAkWzBdIGlzIG5vdCB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgZmluZCB0aGUKLSAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpYmxlIHRvIHRoaXMpLgotICAuIC4vJGFzX21lLmxpbmVubwotICAjIEV4aXQgc3RhdHVzIGlzIHRoYXQgb2YgdGhlIGxhc3QgY29tbWFuZC4KLSAgZXhpdAotfQotCi0KLWNhc2UgYGVjaG8gInRlc3RpbmdcYyI7IGVjaG8gMSwyLDNgLGBlY2hvIC1uIHRlc3Rpbmc7IGVjaG8gMSwyLDNgIGluCi0gICpjKiwtbiopIEVDSE9fTj0gRUNIT19DPScKLScgRUNIT19UPScJJyA7OwotICAqYyosKiAgKSBFQ0hPX049LW4gRUNIT19DPSBFQ0hPX1Q9IDs7Ci0gICopICAgICAgIEVDSE9fTj0gRUNIT19DPSdcYycgRUNIT19UPSA7OworRUNIT19DPSBFQ0hPX049IEVDSE9fVD0KK2Nhc2UgYGVjaG8gLW4geGAgaW4gIygoKCgoCistbiopCisgIGNhc2UgYGVjaG8gJ3h5XGMnYCBpbgorICAqYyopIEVDSE9fVD0nCSc7OwkjIEVDSE9fVCBpcyBzaW5nbGUgdGFiIGNoYXJhY3Rlci4KKyAgeHkpICBFQ0hPX0M9J1xjJzs7CisgICopICAgZWNobyBgZWNobyBrc2g4OCBidWcgb24gQUlYIDYuMWAgPiAvZGV2L251bGwKKyAgICAgICBFQ0hPX1Q9JwknOzsKKyAgZXNhYzs7CisqKQorICBFQ0hPX049Jy1uJzs7CiBlc2FjCiAKLWlmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGFzX2V4cHI9ZXhwcgotZWxzZQotICBhc19leHByPWZhbHNlCi1maQotCiBybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQotZWNobyA+Y29uZiQkLmZpbGUKLWlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgotICAjIFdlIGNvdWxkIGp1c3QgY2hlY2sgZm9yIERKR1BQOyBidXQgdGhpcyB0ZXN0IGEpIHdvcmtzIGIpIGlzIG1vcmUgZ2VuZXJpYwotICAjIGFuZCBjKSB3aWxsIHJlbWFpbiB2YWxpZCBvbmNlIERKR1BQIHN1cHBvcnRzIHN5bWxpbmtzIChESkdQUCAyLjA0KS4KLSAgaWYgdGVzdCAtZiBjb25mJCQuZXhlOyB0aGVuCi0gICAgIyBEb24ndCB1c2UgbG4gYXQgYWxsOyB3ZSBkb24ndCBoYXZlIGFueSBsaW5rcwotICAgIGFzX2xuX3M9J2NwIC1wJwotICBlbHNlCitpZiB0ZXN0IC1kIGNvbmYkJC5kaXI7IHRoZW4KKyAgcm0gLWYgY29uZiQkLmRpci9jb25mJCQuZmlsZQorZWxzZQorICBybSAtZiBjb25mJCQuZGlyCisgIG1rZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKK2ZpCitpZiAoZWNobyA+Y29uZiQkLmZpbGUpIDI+L2Rldi9udWxsOyB0aGVuCisgIGlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgogICAgIGFzX2xuX3M9J2xuIC1zJworICAgICMgLi4uIGJ1dCB0aGVyZSBhcmUgdHdvIGdvdGNoYXM6CisgICAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KKyAgICAjIDIpIERKR1BQIDwgMi4wNCBoYXMgbm8gc3ltbGlua3M7IGBsbiAtcycgY3JlYXRlcyBhIHdyYXBwZXIgZXhlY3V0YWJsZS4KKyAgICAjIEluIGJvdGggY2FzZXMsIHdlIGhhdmUgdG8gZGVmYXVsdCB0byBgY3AgLXBSJy4KKyAgICBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQuZGlyIDI+L2Rldi9udWxsICYmIHRlc3QgISAtZiBjb25mJCQuZXhlIHx8CisgICAgICBhc19sbl9zPSdjcCAtcFInCisgIGVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICAgYXNfbG5fcz1sbgorICBlbHNlCisgICAgYXNfbG5fcz0nY3AgLXBSJwogICBmaQotZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KLSAgYXNfbG5fcz1sbgogZWxzZQotICBhc19sbl9zPSdjcCAtcCcKKyAgYXNfbG5fcz0nY3AgLXBSJwogZmkKLXJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZGlyL2NvbmYkJC5maWxlIGNvbmYkJC5maWxlCitybWRpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCiAKKworIyBhc19mbl9ta2Rpcl9wCisjIC0tLS0tLS0tLS0tLS0KKyMgQ3JlYXRlICIkYXNfZGlyIiBhcyBhIGRpcmVjdG9yeSwgaW5jbHVkaW5nIHBhcmVudHMgaWYgbmVjZXNzYXJ5LgorYXNfZm5fbWtkaXJfcCAoKQoreworCisgIGNhc2UgJGFzX2RpciBpbiAjKAorICAtKikgYXNfZGlyPS4vJGFzX2Rpcjs7CisgIGVzYWMKKyAgdGVzdCAtZCAiJGFzX2RpciIgfHwgZXZhbCAkYXNfbWtkaXJfcCB8fCB7CisgICAgYXNfZGlycz0KKyAgICB3aGlsZSA6OyBkbworICAgICAgY2FzZSAkYXNfZGlyIGluICMoCisgICAgICAqXCcqKSBhc19xZGlyPWAkYXNfZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjJygKKyAgICAgICopIGFzX3FkaXI9JGFzX2Rpcjs7CisgICAgICBlc2FjCisgICAgICBhc19kaXJzPSInJGFzX3FkaXInICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX2RpciIgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICAgICAgdGVzdCAtZCAiJGFzX2RpciIgJiYgYnJlYWsKKyAgICBkb25lCisgICAgdGVzdCAteiAiJGFzX2RpcnMiIHx8IGV2YWwgIm1rZGlyICRhc19kaXJzIgorICB9IHx8IHRlc3QgLWQgIiRhc19kaXIiIHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIgorCisKK30gIyBhc19mbl9ta2Rpcl9wCiBpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCi0gIGFzX21rZGlyX3A9OgorICBhc19ta2Rpcl9wPSdta2RpciAtcCAiJGFzX2RpciInCiBlbHNlCisgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCiAgIGFzX21rZGlyX3A9ZmFsc2UKIGZpCiAKLWFzX2V4ZWN1dGFibGVfcD0idGVzdCAtZiIKKworIyBhc19mbl9leGVjdXRhYmxlX3AgRklMRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0IGlmIEZJTEUgaXMgYW4gZXhlY3V0YWJsZSByZWd1bGFyIGZpbGUuCithc19mbl9leGVjdXRhYmxlX3AgKCkKK3sKKyAgdGVzdCAtZiAiJDEiICYmIHRlc3QgLXggIiQxIgorfSAjIGFzX2ZuX2V4ZWN1dGFibGVfcAorYXNfdGVzdF94PSd0ZXN0IC14JworYXNfZXhlY3V0YWJsZV9wPWFzX2ZuX2V4ZWN1dGFibGVfcAogCiAjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCi1hc190cl9jcHA9InNlZCB5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWciCithc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgogCiAjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KLWFzX3RyX3NoPSJzZWQgeSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyIKK2FzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCiAKIAotIyBJRlMKLSMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuCi1hc19ubD0nCi0nCi1JRlM9IiAJJGFzX25sIgotCi0jIENEUEFUSC4KLSRhc191bnNldCBDRFBBVEgKLQogZXhlYyA2PiYxCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTWFpbiBib2R5IG9mICRDT05GSUdfU1RBVFVTIHNjcmlwdC4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCitfQVNFT0YKK3Rlc3QgJGFzX3dyaXRlX2ZhaWwgPSAwICYmIGNobW9kICt4ICRDT05GSUdfU1RBVFVTIHx8IGFjX3dyaXRlX2ZhaWw9MQogCi0jIE9wZW4gdGhlIGxvZyByZWFsIHNvb24sIHRvIGtlZXAgXCRbMF0gYW5kIHNvIG9uIG1lYW5pbmdmdWwsIGFuZCB0bworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorIyBTYXZlIHRoZSBsb2cgbWVzc2FnZSwgdG8ga2VlcCAkMCBhbmQgc28gb24gbWVhbmluZ2Z1bCwgYW5kIHRvCiAjIHJlcG9ydCBhY3R1YWwgaW5wdXQgdmFsdWVzIG9mIENPTkZJR19GSUxFUyBldGMuIGluc3RlYWQgb2YgdGhlaXIKLSMgdmFsdWVzIGFmdGVyIG9wdGlvbnMgaGFuZGxpbmcuICBMb2dnaW5nIC0tdmVyc2lvbiBldGMuIGlzIE9LLgotZXhlYyA1Pj5jb25maWcubG9nCi17Ci0gIGVjaG8KLSAgc2VkICdoO3MvLi8tL2c7cy9eLi4uLyMjIC87cy8uLi4kLyAjIy87cDt4O3A7eCcgPDxfQVNCT1gKLSMjIFJ1bm5pbmcgJGFzX21lLiAjIwotX0FTQk9YCi19ID4mNQotY2F0ID4mNSA8PF9DU0VPRgotCi1UaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5ICRhc19tZSwgd2hpY2ggd2FzCi1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTcuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKyMgdmFsdWVzIGFmdGVyIG9wdGlvbnMgaGFuZGxpbmcuCithY19sb2c9IgorVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSBsaWJzcnRwMiAkYXNfbWUgMi4zLjAtcHJlLCB3aGljaCB3YXMKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcwogCiAgIENPTkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKICAgQ09ORklHX0hFQURFUlMgID0gJENPTkZJR19IRUFERVJTCkBAIC01MDU2LDQ0ICs2OTkxLDQ1IEBACiAgIENPTkZJR19DT01NQU5EUyA9ICRDT05GSUdfQ09NTUFORFMKICAgJCAkMCAkQAogCi1fQ1NFT0YKLWVjaG8gIm9uIGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYCIgPiY1Ci1lY2hvID4mNQorb24gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCisiCisKIF9BQ0VPRgogCitjYXNlICRhY19jb25maWdfZmlsZXMgaW4gKiIKKyIqKSBzZXQgeCAkYWNfY29uZmlnX2ZpbGVzOyBzaGlmdDsgYWNfY29uZmlnX2ZpbGVzPSQqOzsKK2VzYWMKKworY2FzZSAkYWNfY29uZmlnX2hlYWRlcnMgaW4gKiIKKyIqKSBzZXQgeCAkYWNfY29uZmlnX2hlYWRlcnM7IHNoaWZ0OyBhY19jb25maWdfaGVhZGVycz0kKjs7Citlc2FjCisKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCiAjIEZpbGVzIHRoYXQgY29uZmlnLnN0YXR1cyB3YXMgbWFkZSBmb3IuCi1pZiB0ZXN0IC1uICIkYWNfY29uZmlnX2ZpbGVzIjsgdGhlbgotICBlY2hvICJjb25maWdfZmlsZXM9XCIkYWNfY29uZmlnX2ZpbGVzXCIiID4+JENPTkZJR19TVEFUVVMKLWZpCitjb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMiCitjb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIgogCi1pZiB0ZXN0IC1uICIkYWNfY29uZmlnX2hlYWRlcnMiOyB0aGVuCi0gIGVjaG8gImNvbmZpZ19oZWFkZXJzPVwiJGFjX2NvbmZpZ19oZWFkZXJzXCIiID4+JENPTkZJR19TVEFUVVMKLWZpCitfQUNFT0YKIAotaWYgdGVzdCAtbiAiJGFjX2NvbmZpZ19saW5rcyI7IHRoZW4KLSAgZWNobyAiY29uZmlnX2xpbmtzPVwiJGFjX2NvbmZpZ19saW5rc1wiIiA+PiRDT05GSUdfU1RBVFVTCi1maQotCi1pZiB0ZXN0IC1uICIkYWNfY29uZmlnX2NvbW1hbmRzIjsgdGhlbgotICBlY2hvICJjb25maWdfY29tbWFuZHM9XCIkYWNfY29uZmlnX2NvbW1hbmRzXCIiID4+JENPTkZJR19TVEFUVVMKLWZpCi0KLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgotCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCiBhY19jc191c2FnZT0iXAotXGAkYXNfbWUnIGluc3RhbnRpYXRlcyBmaWxlcyBmcm9tIHRlbXBsYXRlcyBhY2NvcmRpbmcgdG8gdGhlCi1jdXJyZW50IGNvbmZpZ3VyYXRpb24uCitcYCRhc19tZScgaW5zdGFudGlhdGVzIGZpbGVzIGFuZCBvdGhlciBjb25maWd1cmF0aW9uIGFjdGlvbnMKK2Zyb20gdGVtcGxhdGVzIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiAgVW5sZXNzIHRoZSBmaWxlcworYW5kIGFjdGlvbnMgYXJlIHNwZWNpZmllZCBhcyBUQUdzLCBhbGwgYXJlIGluc3RhbnRpYXRlZCBieSBkZWZhdWx0LgogCi1Vc2FnZTogJDAgW09QVElPTlNdIFtGSUxFXS4uLgorVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtUQUddLi4uCiAKICAgLWgsIC0taGVscCAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAotICAtViwgLS12ZXJzaW9uICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKLSAgLXEsIC0tcXVpZXQgICAgICBkbyBub3QgcHJpbnQgcHJvZ3Jlc3MgbWVzc2FnZXMKKyAgLVYsIC0tdmVyc2lvbiAgICBwcmludCB2ZXJzaW9uIG51bWJlciBhbmQgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgdGhlbiBleGl0CisgICAgICAtLWNvbmZpZyAgICAgcHJpbnQgY29uZmlndXJhdGlvbiwgdGhlbiBleGl0CisgIC1xLCAtLXF1aWV0LCAtLXNpbGVudAorICAgICAgICAgICAgICAgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcwogICAtZCwgLS1kZWJ1ZyAgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKICAgICAgIC0tcmVjaGVjayAgICB1cGRhdGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucwotICAtLWZpbGU9RklMRVs6VEVNUExBVEVdCisgICAgICAtLWZpbGU9RklMRVs6VEVNUExBVEVdCiAgICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBGSUxFCi0gIC0taGVhZGVyPUZJTEVbOlRFTVBMQVRFXQorICAgICAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCiAgICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIEZJTEUKIAogQ29uZmlndXJhdGlvbiBmaWxlczoKQEAgLTUxMDIsODQgKzcwMzgsOTAgQEAKIENvbmZpZ3VyYXRpb24gaGVhZGVyczoKICRjb25maWdfaGVhZGVycwogCi1SZXBvcnQgYnVncyB0byA8YnVnLWF1dG9jb25mQGdudS5vcmc+LiIKK1JlcG9ydCBidWdzIHRvIDxodHRwczovL2dpdGh1Yi5jb20vY2lzY28vbGlic3J0cC9pc3N1ZXM+LiIKKwogX0FDRU9GCi0KLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2FjX2NzX2NvbmZpZz0iYCRhc19lY2hvICIkYWNfY29uZmlndXJlX2FyZ3MiIHwgc2VkICdzL14gLy87IHMvW1xcIiJcYFwkXS9cXFxcJi9nJ2AiCiBhY19jc192ZXJzaW9uPSJcXAotY29uZmlnLnN0YXR1cwotY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU3LAotICB3aXRoIG9wdGlvbnMgXFwiYGVjaG8gIiRhY19jb25maWd1cmVfYXJncyIgfCBzZWQgJ3MvW1xcIiJcYFwkXS9cXFxcJi9nJ2BcXCIKK2xpYnNydHAyIGNvbmZpZy5zdGF0dXMgMi4zLjAtcHJlCitjb25maWd1cmVkIGJ5ICQwLCBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjksCisgIHdpdGggb3B0aW9ucyBcXCJcJGFjX2NzX2NvbmZpZ1xcIgogCi1Db3B5cmlnaHQgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMQotRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitDb3B5cmlnaHQgKEMpIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiBUaGlzIGNvbmZpZy5zdGF0dXMgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCi1zcmNkaXI9JHNyY2RpcgorCithY19wd2Q9JyRhY19wd2QnCitzcmNkaXI9JyRzcmNkaXInCitJTlNUQUxMPSckSU5TVEFMTCcKK3Rlc3QgLW4gIlwkQVdLIiB8fCBBV0s9YXdrCiBfQUNFT0YKIAotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCi0jIElmIG5vIGZpbGUgYXJlIHNwZWNpZmllZCBieSB0aGUgdXNlciwgdGhlbiB3ZSBuZWVkIHRvIHByb3ZpZGUgZGVmYXVsdAotIyB2YWx1ZS4gIEJ5IHdlIG5lZWQgdG8ga25vdyBpZiBmaWxlcyB3ZXJlIHNwZWNpZmllZCBieSB0aGUgdXNlci4KK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyMgVGhlIGRlZmF1bHQgbGlzdHMgYXBwbHkgaWYgdGhlIHVzZXIgZG9lcyBub3Qgc3BlY2lmeSBhbnkgZmlsZS4KIGFjX25lZWRfZGVmYXVsdHM9Ogogd2hpbGUgdGVzdCAkIyAhPSAwCiBkbwogICBjYXNlICQxIGluCi0gIC0tKj0qKQotICAgIGFjX29wdGlvbj1gZXhwciAieCQxIiA6ICd4XChbXj1dKlwpPSdgCi0gICAgYWNfb3B0YXJnPWBleHByICJ4JDEiIDogJ3hbXj1dKj1cKC4qXCknYAorICAtLSo9PyopCisgICAgYWNfb3B0aW9uPWBleHByICJYJDEiIDogJ1hcKFtePV0qXCk9J2AKKyAgICBhY19vcHRhcmc9YGV4cHIgIlgkMSIgOiAnWFtePV0qPVwoLipcKSdgCiAgICAgYWNfc2hpZnQ9OgogICAgIDs7Ci0gIC0qKQorICAtLSo9KQorICAgIGFjX29wdGlvbj1gZXhwciAiWCQxIiA6ICdYXChbXj1dKlwpPSdgCisgICAgYWNfb3B0YXJnPQorICAgIGFjX3NoaWZ0PToKKyAgICA7OworICAqKQogICAgIGFjX29wdGlvbj0kMQogICAgIGFjX29wdGFyZz0kMgogICAgIGFjX3NoaWZ0PXNoaWZ0CiAgICAgOzsKLSAgKikgIyBUaGlzIGlzIG5vdCBhbiBvcHRpb24sIHNvIHRoZSB1c2VyIGhhcyBwcm9iYWJseSBnaXZlbiBleHBsaWNpdAotICAgICAjIGFyZ3VtZW50cy4KLSAgICAgYWNfb3B0aW9uPSQxCi0gICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OwogICBlc2FjCiAKICAgY2FzZSAkYWNfb3B0aW9uIGluCiAgICMgSGFuZGxpbmcgb2YgdGhlIG9wdGlvbnMuCi1fQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgogICAtcmVjaGVjayB8IC0tcmVjaGVjayB8IC0tcmVjaGVjIHwgLS1yZWNoZSB8IC0tcmVjaCB8IC0tcmVjIHwgLS1yZSB8IC0tcikKICAgICBhY19jc19yZWNoZWNrPTogOzsKLSAgLS12ZXJzaW9uIHwgLS12ZXJzKiB8IC1WICkKLSAgICBlY2hvICIkYWNfY3NfdmVyc2lvbiI7IGV4aXQgMCA7OwotICAtLWhlIHwgLS1oKQotICAgICMgQ29uZmxpY3QgYmV0d2VlbiAtLWhlbHAgYW5kIC0taGVhZGVyCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogYW1iaWd1b3VzIG9wdGlvbjogJDEKLVRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGFtYmlndW91cyBvcHRpb246ICQxCi1UcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7Ci0gIC0taGVscCB8IC0taGVsIHwgLWggKQotICAgIGVjaG8gIiRhY19jc191c2FnZSI7IGV4aXQgMCA7OwotICAtLWRlYnVnIHwgLS1kKiB8IC1kICkKKyAgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLS12ZXIgfCAtLXZlIHwgLS12IHwgLVYgKQorICAgICRhc19lY2hvICIkYWNfY3NfdmVyc2lvbiI7IGV4aXQgOzsKKyAgLS1jb25maWcgfCAtLWNvbmZpIHwgLS1jb25mIHwgLS1jb24gfCAtLWNvIHwgLS1jICkKKyAgICAkYXNfZWNobyAiJGFjX2NzX2NvbmZpZyI7IGV4aXQgOzsKKyAgLS1kZWJ1ZyB8IC0tZGVidSB8IC0tZGViIHwgLS1kZSB8IC0tZCB8IC1kICkKICAgICBkZWJ1Zz06IDs7CiAgIC0tZmlsZSB8IC0tZmlsIHwgLS1maSB8IC0tZiApCiAgICAgJGFjX3NoaWZ0Ci0gICAgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTICRhY19vcHRhcmciCisgICAgY2FzZSAkYWNfb3B0YXJnIGluCisgICAgKlwnKikgYWNfb3B0YXJnPWAkYXNfZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICAnJykgYXNfZm5fZXJyb3IgJD8gIm1pc3NpbmcgZmlsZSBhcmd1bWVudCIgOzsKKyAgICBlc2FjCisgICAgYXNfZm5fYXBwZW5kIENPTkZJR19GSUxFUyAiICckYWNfb3B0YXJnJyIKICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKICAgLS1oZWFkZXIgfCAtLWhlYWRlIHwgLS1oZWFkIHwgLS1oZWEgKQogICAgICRhY19zaGlmdAotICAgIENPTkZJR19IRUFERVJTPSIkQ09ORklHX0hFQURFUlMgJGFjX29wdGFyZyIKKyAgICBjYXNlICRhY19vcHRhcmcgaW4KKyAgICAqXCcqKSBhY19vcHRhcmc9YCRhc19lY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgIGVzYWMKKyAgICBhc19mbl9hcHBlbmQgQ09ORklHX0hFQURFUlMgIiAnJGFjX29wdGFyZyciCiAgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7CisgIC0taGUgfCAtLWgpCisgICAgIyBDb25mbGljdCBiZXR3ZWVuIC0taGVscCBhbmQgLS1oZWFkZXIKKyAgICBhc19mbl9lcnJvciAkPyAiYW1iaWd1b3VzIG9wdGlvbjogXGAkMScKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIjs7CisgIC0taGVscCB8IC0taGVsIHwgLWggKQorICAgICRhc19lY2hvICIkYWNfY3NfdXNhZ2UiOyBleGl0IDs7CiAgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCiAgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsIHwgLS1zaSB8IC0tcykKICAgICBhY19jc19zaWxlbnQ9OiA7OwogCiAgICMgVGhpcyBpcyBhbiBlcnJvci4KLSAgLSopIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb246ICQxCi1UcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiB1bnJlY29nbml6ZWQgb3B0aW9uOiAkMQotVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKyAgLSopIGFzX2ZuX2Vycm9yICQ/ICJ1bnJlY29nbml6ZWQgb3B0aW9uOiBcYCQxJworVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDs7CiAKLSAgKikgYWNfY29uZmlnX3RhcmdldHM9IiRhY19jb25maWdfdGFyZ2V0cyAkMSIgOzsKKyAgKikgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ190YXJnZXRzICIgJDEiCisgICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2UgOzsKIAogICBlc2FjCiAgIHNoaWZ0CkBAIC01MTkzLDMxICs3MTM1LDQ5IEBACiBmaQogCiBfQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKIGlmIFwkYWNfY3NfcmVjaGVjazsgdGhlbgotICBlY2hvICJydW5uaW5nICRTSEVMTCAkMCAiICRhY19jb25maWd1cmVfYXJncyBcJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzICIgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24iID4mNgotICBleGVjICRTSEVMTCAkMCAkYWNfY29uZmlndXJlX2FyZ3MgXCRhY19jb25maWd1cmVfZXh0cmFfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbgorICBzZXQgWCAkU0hFTEwgJyQwJyAkYWNfY29uZmlndXJlX2FyZ3MgXCRhY19jb25maWd1cmVfZXh0cmFfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbgorICBzaGlmdAorICBcJGFzX2VjaG8gInJ1bm5pbmcgQ09ORklHX1NIRUxMPSRTSEVMTCBcJCoiID4mNgorICBDT05GSUdfU0hFTEw9JyRTSEVMTCcKKyAgZXhwb3J0IENPTkZJR19TSEVMTAorICBleGVjICJcJEAiCiBmaQogCiBfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2V4ZWMgNT4+Y29uZmlnLmxvZworeworICBlY2hvCisgIHNlZCAnaDtzLy4vLS9nO3MvXi4uLi8jIyAvO3MvLi4uJC8gIyMvO3A7eDtwO3gnIDw8X0FTQk9YCisjIyBSdW5uaW5nICRhc19tZS4gIyMKK19BU0JPWAorICAkYXNfZWNobyAiJGFjX2xvZyIKK30gPiY1CiAKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitfQUNFT0YKIAorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogCi0KLQotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisjIEhhbmRsaW5nIG9mIGFyZ3VtZW50cy4KIGZvciBhY19jb25maWdfdGFyZ2V0IGluICRhY19jb25maWdfdGFyZ2V0cwogZG8KLSAgY2FzZSAiJGFjX2NvbmZpZ190YXJnZXQiIGluCi0gICMgSGFuZGxpbmcgb2YgYXJndW1lbnRzLgotICAiTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1ha2VmaWxlIiA7OwotICAiaW5jbHVkZS9jb25maWcuaCIgKSBDT05GSUdfSEVBREVSUz0iJENPTkZJR19IRUFERVJTIGluY2x1ZGUvY29uZmlnLmg6Y29uZmlnX2luLmgiIDs7Ci0gICopIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludmFsaWQgYXJndW1lbnQ6ICRhY19jb25maWdfdGFyZ2V0IiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgYXJndW1lbnQ6ICRhY19jb25maWdfdGFyZ2V0IiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKyAgY2FzZSAkYWNfY29uZmlnX3RhcmdldCBpbgorICAgICJjcnlwdG8vaW5jbHVkZS9jb25maWcuaCIpIENPTkZJR19IRUFERVJTPSIkQ09ORklHX0hFQURFUlMgY3J5cHRvL2luY2x1ZGUvY29uZmlnLmg6Y29uZmlnX2luLmgiIDs7CisgICAgIk1ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1ha2VmaWxlIiA7OworICAgICJjcnlwdG8vTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgY3J5cHRvL01ha2VmaWxlIiA7OworICAgICJkb2MvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZG9jL01ha2VmaWxlIiA7OworICAgICJmdXp6ZXIvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZnV6emVyL01ha2VmaWxlIiA7OworICAgICJsaWJzcnRwMi5wYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJzcnRwMi5wYyIgOzsKKworICAqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBhcmd1bWVudDogXGAkYWNfY29uZmlnX3RhcmdldCciICIkTElORU5PIiA1OzsKICAgZXNhYwogZG9uZQogCisKICMgSWYgdGhlIHVzZXIgZGlkIG5vdCB1c2UgdGhlIGFyZ3VtZW50cyB0byBzcGVjaWZ5IHRoZSBpdGVtcyB0byBpbnN0YW50aWF0ZSwKICMgdGhlbiB0aGUgZW52dmFyIGludGVyZmFjZSBpcyB1c2VkLiAgU2V0IG9ubHkgdGhvc2UgdGhhdCBhcmUgbm90LgogIyBXZSB1c2UgdGhlIGxvbmcgZm9ybSBmb3IgdGhlIGRlZmF1bHQgYXNzaWdubWVudCBiZWNhdXNlIG9mIGFuIGV4dHJlbWVseQpAQCAtNTIyOCw1MjggKzcxODgsNTUwIEBACiBmaQogCiAjIEhhdmUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBjb252ZW5pZW5jZS4gIE1ha2UgaXQgaW4gdGhlIGJ1aWxkIHRyZWUKLSMgc2ltcGx5IGJlY2F1c2UgdGhlcmUgaXMgbm8gcmVhc29uIHRvIHB1dCBpdCBoZXJlLCBhbmQgaW4gYWRkaXRpb24sCisjIHNpbXBseSBiZWNhdXNlIHRoZXJlIGlzIG5vIHJlYXNvbiBhZ2FpbnN0IGhhdmluZyBpdCBoZXJlLCBhbmQgaW4gYWRkaXRpb24sCiAjIGNyZWF0aW5nIGFuZCBtb3ZpbmcgZmlsZXMgZnJvbSAvdG1wIGNhbiBzb21ldGltZXMgY2F1c2UgcHJvYmxlbXMuCi0jIENyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnksIGFuZCBob29rIGZvciBpdHMgcmVtb3ZhbCB1bmxlc3MgZGVidWdnaW5nLgorIyBIb29rIGZvciBpdHMgcmVtb3ZhbCB1bmxlc3MgZGVidWdnaW5nLgorIyBOb3RlIHRoYXQgdGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgaW4gd2hpY2ggdGhlIGRpcmVjdG9yeSB3aWxsIG5vdCBiZSBjbGVhbmVkOgorIyBhZnRlciBpdHMgY3JlYXRpb24gYnV0IGJlZm9yZSBpdHMgbmFtZSBoYXMgYmVlbiBhc3NpZ25lZCB0byBgJHRtcCcuCiAkZGVidWcgfHwKIHsKLSAgdHJhcCAnZXhpdF9zdGF0dXM9JD87IHJtIC1yZiAkdG1wICYmIGV4aXQgJGV4aXRfc3RhdHVzJyAwCi0gIHRyYXAgJ3sgKGV4aXQgMSk7IGV4aXQgMTsgfScgMSAyIDEzIDE1CisgIHRtcD0gYWNfdG1wPQorICB0cmFwICdleGl0X3N0YXR1cz0kPworICA6ICIke2FjX3RtcDo9JHRtcH0iCisgIHsgdGVzdCAhIC1kICIkYWNfdG1wIiB8fCBybSAtZnIgIiRhY190bXAiOyB9ICYmIGV4aXQgJGV4aXRfc3RhdHVzCisnIDAKKyAgdHJhcCAnYXNfZm5fZXhpdCAxJyAxIDIgMTMgMTUKIH0KLQogIyBDcmVhdGUgYSAoc2VjdXJlKSB0bXAgZGlyZWN0b3J5IGZvciB0bXAgZmlsZXMuCiAKIHsKLSAgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAtcSAiLi9jb25mc3RhdFhYWFhYWCIpIDI+L2Rldi9udWxsYCAmJgotICB0ZXN0IC1uICIkdG1wIiAmJiB0ZXN0IC1kICIkdG1wIgorICB0bXA9YCh1bWFzayAwNzcgJiYgbWt0ZW1wIC1kICIuL2NvbmZYWFhYWFgiKSAyPi9kZXYvbnVsbGAgJiYKKyAgdGVzdCAtZCAiJHRtcCIKIH0gIHx8CiB7Ci0gIHRtcD0uL2NvbmZzdGF0JCQtJFJBTkRPTQotICAodW1hc2sgMDc3ICYmIG1rZGlyICR0bXApCi19IHx8Ci17Ci0gICBlY2hvICIkbWU6IGNhbm5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluIC4iID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9Ci19CisgIHRtcD0uL2NvbmYkJC0kUkFORE9NCisgICh1bWFzayAwNzcgJiYgbWtkaXIgIiR0bXAiKQorfSB8fCBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gLiIgIiRMSU5FTk8iIDUKK2FjX3RtcD0kdG1wCiAKLV9BQ0VPRgorIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19GSUxFUyBzZWN0aW9uLgorIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZW0gaWYgdGhlcmUgYXJlIG5vIENPTkZJR19GSUxFUy4KKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgnLgoraWYgdGVzdCAtbiAiJENPTkZJR19GSUxFUyI7IHRoZW4KIAotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKIAotIwotIyBDT05GSUdfRklMRVMgc2VjdGlvbi4KLSMKLQotIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZSBzY3JpcHRzIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfRklMRVMuCi0jIFRoaXMgaGFwcGVucyBmb3IgaW5zdGFuY2Ugd2hlbiAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgKLWlmIHRlc3QgLW4gIlwkQ09ORklHX0ZJTEVTIjsgdGhlbgotICAjIFByb3RlY3QgYWdhaW5zdCBiZWluZyBvbiB0aGUgcmlnaHQgc2lkZSBvZiBhIHNlZCBzdWJzdCBpbiBjb25maWcuc3RhdHVzLgotICBzZWQgJ3MvLEAvQEAvOyBzL0AsL0BALzsgcy8sO3QgdFwkL0A7dCB0LzsgL0A7dCB0XCQvcy9bXFxcXCYsXS9cXFxcJi9nOwotICAgcy9AQC8sQC87IHMvQEAvQCwvOyBzL0A7dCB0XCQvLDt0IHQvJyA+XCR0bXAvc3Vicy5zZWQgPDxcXENFT0YKLXMsQFNIRUxMQCwkU0hFTEwsO3QgdAotcyxAUEFUSF9TRVBBUkFUT1JALCRQQVRIX1NFUEFSQVRPUiw7dCB0Ci1zLEBQQUNLQUdFX05BTUVALCRQQUNLQUdFX05BTUUsO3QgdAotcyxAUEFDS0FHRV9UQVJOQU1FQCwkUEFDS0FHRV9UQVJOQU1FLDt0IHQKLXMsQFBBQ0tBR0VfVkVSU0lPTkAsJFBBQ0tBR0VfVkVSU0lPTiw7dCB0Ci1zLEBQQUNLQUdFX1NUUklOR0AsJFBBQ0tBR0VfU1RSSU5HLDt0IHQKLXMsQFBBQ0tBR0VfQlVHUkVQT1JUQCwkUEFDS0FHRV9CVUdSRVBPUlQsO3QgdAotcyxAZXhlY19wcmVmaXhALCRleGVjX3ByZWZpeCw7dCB0Ci1zLEBwcmVmaXhALCRwcmVmaXgsO3QgdAotcyxAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAsJHByb2dyYW1fdHJhbnNmb3JtX25hbWUsO3QgdAotcyxAYmluZGlyQCwkYmluZGlyLDt0IHQKLXMsQHNiaW5kaXJALCRzYmluZGlyLDt0IHQKLXMsQGxpYmV4ZWNkaXJALCRsaWJleGVjZGlyLDt0IHQKLXMsQGRhdGFkaXJALCRkYXRhZGlyLDt0IHQKLXMsQHN5c2NvbmZkaXJALCRzeXNjb25mZGlyLDt0IHQKLXMsQHNoYXJlZHN0YXRlZGlyQCwkc2hhcmVkc3RhdGVkaXIsO3QgdAotcyxAbG9jYWxzdGF0ZWRpckAsJGxvY2Fsc3RhdGVkaXIsO3QgdAotcyxAbGliZGlyQCwkbGliZGlyLDt0IHQKLXMsQGluY2x1ZGVkaXJALCRpbmNsdWRlZGlyLDt0IHQKLXMsQG9sZGluY2x1ZGVkaXJALCRvbGRpbmNsdWRlZGlyLDt0IHQKLXMsQGluZm9kaXJALCRpbmZvZGlyLDt0IHQKLXMsQG1hbmRpckAsJG1hbmRpciw7dCB0Ci1zLEBidWlsZF9hbGlhc0AsJGJ1aWxkX2FsaWFzLDt0IHQKLXMsQGhvc3RfYWxpYXNALCRob3N0X2FsaWFzLDt0IHQKLXMsQHRhcmdldF9hbGlhc0AsJHRhcmdldF9hbGlhcyw7dCB0Ci1zLEBERUZTQCwkREVGUyw7dCB0Ci1zLEBFQ0hPX0NALCRFQ0hPX0MsO3QgdAotcyxARUNIT19OQCwkRUNIT19OLDt0IHQKLXMsQEVDSE9fVEAsJEVDSE9fVCw7dCB0Ci1zLEBMSUJTQCwkTElCUyw7dCB0Ci1zLEBSQU5MSUJALCRSQU5MSUIsO3QgdAotcyxAYWNfY3RfUkFOTElCQCwkYWNfY3RfUkFOTElCLDt0IHQKLXMsQENDQCwkQ0MsO3QgdAotcyxAQ0ZMQUdTQCwkQ0ZMQUdTLDt0IHQKLXMsQExERkxBR1NALCRMREZMQUdTLDt0IHQKLXMsQENQUEZMQUdTQCwkQ1BQRkxBR1MsO3QgdAotcyxAYWNfY3RfQ0NALCRhY19jdF9DQyw7dCB0Ci1zLEBFWEVFWFRALCRFWEVFWFQsO3QgdAotcyxAT0JKRVhUQCwkT0JKRVhULDt0IHQKLXMsQFJOR19PQkpTQCwkUk5HX09CSlMsO3QgdAotcyxAQ1BQQCwkQ1BQLDt0IHQKLXMsQEVHUkVQQCwkRUdSRVAsO3QgdAotcyxATElCT0JKU0AsJExJQk9CSlMsO3QgdAotcyxAYnVpbGRALCRidWlsZCw7dCB0Ci1zLEBidWlsZF9jcHVALCRidWlsZF9jcHUsO3QgdAotcyxAYnVpbGRfdmVuZG9yQCwkYnVpbGRfdmVuZG9yLDt0IHQKLXMsQGJ1aWxkX29zQCwkYnVpbGRfb3MsO3QgdAotcyxAaG9zdEAsJGhvc3QsO3QgdAotcyxAaG9zdF9jcHVALCRob3N0X2NwdSw7dCB0Ci1zLEBob3N0X3ZlbmRvckAsJGhvc3RfdmVuZG9yLDt0IHQKLXMsQGhvc3Rfb3NALCRob3N0X29zLDt0IHQKLXMsQEVYRUAsJEVYRSw7dCB0Ci1zLEBHRE9JX09CSlNALCRHRE9JX09CSlMsO3QgdAotcyxATFRMSUJPQkpTQCwkTFRMSUJPQkpTLDt0IHQKLUNFT0YKLQotX0FDRU9GCi0KLSAgY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCi0gICMgU3BsaXQgdGhlIHN1YnN0aXR1dGlvbnMgaW50byBiaXRlLXNpemVkIHBpZWNlcyBmb3Igc2VkcyB3aXRoCi0gICMgc21hbGwgY29tbWFuZCBudW1iZXIgbGltaXRzLCBsaWtlIG9uIERpZ2l0YWwgT1NGLzEgYW5kIEhQLVVYLgotICBhY19tYXhfc2VkX2xpbmVzPTQ4Ci0gIGFjX3NlZF9mcmFnPTEgIyBOdW1iZXIgb2YgY3VycmVudCBmaWxlLgotICBhY19iZWc9MSAjIEZpcnN0IGxpbmUgZm9yIGN1cnJlbnQgZmlsZS4KLSAgYWNfZW5kPSRhY19tYXhfc2VkX2xpbmVzICMgTGluZSBhZnRlciBsYXN0IGxpbmUgZm9yIGN1cnJlbnQgZmlsZS4KLSAgYWNfbW9yZV9saW5lcz06Ci0gIGFjX3NlZF9jbWRzPQotICB3aGlsZSAkYWNfbW9yZV9saW5lczsgZG8KLSAgICBpZiB0ZXN0ICRhY19iZWcgLWd0IDE7IHRoZW4KLSAgICAgIHNlZCAiMSwke2FjX2JlZ31kOyAke2FjX2VuZH1xIiAkdG1wL3N1YnMuc2VkID4kdG1wL3N1YnMuZnJhZwotICAgIGVsc2UKLSAgICAgIHNlZCAiJHthY19lbmR9cSIgJHRtcC9zdWJzLnNlZCA+JHRtcC9zdWJzLmZyYWcKLSAgICBmaQotICAgIGlmIHRlc3QgISAtcyAkdG1wL3N1YnMuZnJhZzsgdGhlbgotICAgICAgYWNfbW9yZV9saW5lcz1mYWxzZQotICAgIGVsc2UKLSAgICAgICMgVGhlIHB1cnBvc2Ugb2YgdGhlIGxhYmVsIGFuZCBvZiB0aGUgYnJhbmNoaW5nIGNvbmRpdGlvbiBpcyB0bwotICAgICAgIyBzcGVlZCB1cCB0aGUgc2VkIHByb2Nlc3NpbmcgKGlmIHRoZXJlIGFyZSBubyBgQCcgYXQgYWxsLCB0aGVyZQotICAgICAgIyBpcyBubyBuZWVkIHRvIGJyb3dzZSBhbnkgb2YgdGhlIHN1YnN0aXR1dGlvbnMpLgotICAgICAgIyBUaGVzZSBhcmUgdGhlIHR3byBleHRyYSBzZWQgY29tbWFuZHMgbWVudGlvbmVkIGFib3ZlLgotICAgICAgKGVjaG8gJzp0Ci0gIC9AW2EtekEtWl9dW2EtekEtWl8wLTldKkAvIWInICYmIGNhdCAkdG1wL3N1YnMuZnJhZykgPiR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkCi0gICAgICBpZiB0ZXN0IC16ICIkYWNfc2VkX2NtZHMiOyB0aGVuCi0gIAlhY19zZWRfY21kcz0ic2VkIC1mICR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkIgotICAgICAgZWxzZQotICAJYWNfc2VkX2NtZHM9IiRhY19zZWRfY21kcyB8IHNlZCAtZiAkdG1wL3N1YnMtJGFjX3NlZF9mcmFnLnNlZCIKLSAgICAgIGZpCi0gICAgICBhY19zZWRfZnJhZz1gZXhwciAkYWNfc2VkX2ZyYWcgKyAxYAotICAgICAgYWNfYmVnPSRhY19lbmQKLSAgICAgIGFjX2VuZD1gZXhwciAkYWNfZW5kICsgJGFjX21heF9zZWRfbGluZXNgCi0gICAgZmkKLSAgZG9uZQotICBpZiB0ZXN0IC16ICIkYWNfc2VkX2NtZHMiOyB0aGVuCi0gICAgYWNfc2VkX2NtZHM9Y2F0Ci0gIGZpCi1maSAjIHRlc3QgLW4gIiRDT05GSUdfRklMRVMiCi0KLV9BQ0VPRgotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCi1mb3IgYWNfZmlsZSBpbiA6ICRDT05GSUdfRklMRVM7IGRvIHRlc3QgIngkYWNfZmlsZSIgPSB4OiAmJiBjb250aW51ZQotICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iLCBkZWZhdWx0aW5nIGluZmlsZT0ib3V0ZmlsZS5pbiIuCi0gIGNhc2UgJGFjX2ZpbGUgaW4KLSAgLSB8ICo6LSB8ICo6LToqICkgIyBpbnB1dCBmcm9tIHN0ZGluCi0gICAgICAgIGNhdCA+JHRtcC9zdGRpbgotICAgICAgICBhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAotICAgICAgICBhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OwotICAqOiogKSBhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAotICAgICAgICBhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OwotICAqICkgICBhY19maWxlX2luPSRhY19maWxlLmluIDs7Ci0gIGVzYWMKLQotICAjIENvbXB1dGUgQHNyY2RpckAsIEB0b3Bfc3JjZGlyQCwgYW5kIEBJTlNUQUxMQCBmb3Igc3ViZGlyZWN0b3JpZXMuCi0gIGFjX2Rpcj1gKGRpcm5hbWUgIiRhY19maWxlIikgMj4vZGV2L251bGwgfHwKLSRhc19leHByIFgiJGFjX2ZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0gICAgICAgICBYIiRhY19maWxlIiA6ICdYXCgvL1wpW14vXScgXHwgXAotICAgICAgICAgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKLSAgICAgICAgIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgXAotICAgICAgICAgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgiJGFjX2ZpbGUiIHwKLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIHMvLiovLi87IHEnYAotICB7IGlmICRhc19ta2Rpcl9wOyB0aGVuCi0gICAgbWtkaXIgLXAgIiRhY19kaXIiCi0gIGVsc2UKLSAgICBhc19kaXI9IiRhY19kaXIiCi0gICAgYXNfZGlycz0KLSAgICB3aGlsZSB0ZXN0ICEgLWQgIiRhc19kaXIiOyBkbwotICAgICAgYXNfZGlycz0iJGFzX2RpciAkYXNfZGlycyIKLSAgICAgIGFzX2Rpcj1gKGRpcm5hbWUgIiRhc19kaXIiKSAyPi9kZXYvbnVsbCB8fAotJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAotICAgICAgICAgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAotICAgICAgICAgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAotICAgICAgICAgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKLSAgICAgICAgIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAotZWNobyBYIiRhc19kaXIiIHwKLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIHMvLiovLi87IHEnYAotICAgIGRvbmUKLSAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycwotICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiRhY19kaXJcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiRhY19kaXJcIiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQotCi0gIGFjX2J1aWxkZGlyPS4KLQotaWYgdGVzdCAiJGFjX2RpciIgIT0gLjsgdGhlbgotICBhY19kaXJfc3VmZml4PS9gZWNobyAiJGFjX2RpciIgfCBzZWQgJ3MsXlwuW1xcL10sLCdgCi0gICMgQSAiLi4vIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCi0gIGFjX3RvcF9idWlsZGRpcj1gZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzLC9bXlxcL10qLC4uLyxnJ2AKK2FjX2NyPWBlY2hvIFggfCB0ciBYICdcMDE1J2AKKyMgT24gY3lnd2luLCBiYXNoIGNhbiBlYXQgXHIgaW5zaWRlIGBgIGlmIHRoZSB1c2VyIHJlcXVlc3RlZCBpZ25jci4KKyMgQnV0IHdlIGtub3cgb2Ygbm8gb3RoZXIgc2hlbGwgd2hlcmUgYWNfY3Igd291bGQgYmUgZW1wdHkgYXQgdGhpcworIyBwb2ludCwgc28gd2UgY2FuIHVzZSBhIGJhc2hpc20gYXMgYSBmYWxsYmFjay4KK2lmIHRlc3QgIngkYWNfY3IiID0geDsgdGhlbgorICBldmFsIGFjX2NyPVwkXCdcXHJcJworZmkKK2FjX2NzX2F3a19jcj1gJEFXSyAnQkVHSU4geyBwcmludCAiYVxyYiIgfScgPC9kZXYvbnVsbCAyPi9kZXYvbnVsbGAKK2lmIHRlc3QgIiRhY19jc19hd2tfY3IiID0gImEke2FjX2NyfWIiOyB0aGVuCisgIGFjX2NzX2F3a19jcj0nXFxyJwogZWxzZQotICBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXI9CisgIGFjX2NzX2F3a19jcj0kYWNfY3IKIGZpCiAKLWNhc2UgJHNyY2RpciBpbgotICAuKSAgIyBObyAtLXNyY2RpciBvcHRpb24uICBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCi0gICAgYWNfc3JjZGlyPS4KLSAgICBpZiB0ZXN0IC16ICIkYWNfdG9wX2J1aWxkZGlyIjsgdGhlbgotICAgICAgIGFjX3RvcF9zcmNkaXI9LgotICAgIGVsc2UKLSAgICAgICBhY190b3Bfc3JjZGlyPWBlY2hvICRhY190b3BfYnVpbGRkaXIgfCBzZWQgJ3MsLyQsLCdgCi0gICAgZmkgOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBwYXRoLgotICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7Ci0gICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7Ci0gICopICMgUmVsYXRpdmUgcGF0aC4KLSAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIkYWNfZGlyX3N1ZmZpeAotICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIgOzsKLWVzYWMKLSMgRG9uJ3QgYmxpbmRseSBwZXJmb3JtIGEgYGNkICIkYWNfZGlyIi8kYWNfZm9vICYmIHB3ZGAgc2luY2UgJGFjX2ZvbyBjYW4gYmUKLSMgYWJzb2x1dGUuCi1hY19hYnNfYnVpbGRkaXI9YGNkICIkYWNfZGlyIiAmJiBjZCAkYWNfYnVpbGRkaXIgJiYgcHdkYAotYWNfYWJzX3RvcF9idWlsZGRpcj1gY2QgIiRhY19kaXIiICYmIGNkICR7YWNfdG9wX2J1aWxkZGlyfS4gJiYgcHdkYAotYWNfYWJzX3NyY2Rpcj1gY2QgIiRhY19kaXIiICYmIGNkICRhY19zcmNkaXIgJiYgcHdkYAotYWNfYWJzX3RvcF9zcmNkaXI9YGNkICIkYWNfZGlyIiAmJiBjZCAkYWNfdG9wX3NyY2RpciAmJiBwd2RgCi0KLQotCi0gIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyAkYWNfZmlsZSIgPiY1Ci1lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQotICAgIHJtIC1mICIkYWNfZmlsZSIKLSAgZmkKLSAgIyBMZXQncyBzdGlsbCBwcmV0ZW5kIGl0IGlzIGBjb25maWd1cmUnIHdoaWNoIGluc3RhbnRpYXRlcyAoaS5lLiwgZG9uJ3QKLSAgIyB1c2UgJGFzX21lKSwgcGVvcGxlIHdvdWxkIGJlIHN1cnByaXNlZCB0byByZWFkOgotICAjICAgIC8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZy5zdGF0dXMuICAqLwotICBpZiB0ZXN0IHgiJGFjX2ZpbGUiID0geC07IHRoZW4KLSAgICBjb25maWd1cmVfaW5wdXQ9Ci0gIGVsc2UKLSAgICBjb25maWd1cmVfaW5wdXQ9IiRhY19maWxlLiAgIgotICBmaQotICBjb25maWd1cmVfaW5wdXQ9JGNvbmZpZ3VyZV9pbnB1dCJHZW5lcmF0ZWQgZnJvbSBgZWNobyAkYWNfZmlsZV9pbiB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VkICdzLC4qLywsJ2AgYnkgY29uZmlndXJlLiIKLQotICAjIEZpcnN0IGxvb2sgZm9yIHRoZSBpbnB1dCBmaWxlcyBpbiB0aGUgYnVpbGQgdHJlZSwgb3RoZXJ3aXNlIGluIHRoZQotICAjIHNyYyB0cmVlLgotICBhY19maWxlX2lucHV0cz1gSUZTPToKLSAgICBmb3IgZiBpbiAkYWNfZmlsZV9pbjsgZG8KLSAgICAgIGNhc2UgJGYgaW4KLSAgICAgIC0pIGVjaG8gJHRtcC9zdGRpbiA7OwotICAgICAgW1xcLyRdKikKLSAgICAgICAgICMgQWJzb2x1dGUgKGNhbid0IGJlIERPUy1zdHlsZSwgYXMgSUZTPTopCi0gICAgICAgICB0ZXN0IC1mICIkZiIgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICAgICAgIGVjaG8gJGY7OwotICAgICAgKikgIyBSZWxhdGl2ZQotICAgICAgICAgaWYgdGVzdCAtZiAiJGYiOyB0aGVuCi0gICAgICAgICAgICMgQnVpbGQgdHJlZQotICAgICAgICAgICBlY2hvICRmCi0gICAgICAgICBlbGlmIHRlc3QgLWYgIiRzcmNkaXIvJGYiOyB0aGVuCi0gICAgICAgICAgICMgU291cmNlIHRyZWUKLSAgICAgICAgICAgZWNobyAkc3JjZGlyLyRmCi0gICAgICAgICBlbHNlCi0gICAgICAgICAgICMgL2Rldi9udWxsIHRyZWUKLSAgICAgICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICAgICAgIGZpOzsKLSAgICAgIGVzYWMKLSAgICBkb25lYCB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KK2VjaG8gJ0JFR0lOIHsnID4iJGFjX3RtcC9zdWJzMS5hd2siICYmCiBfQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCi0gIHNlZCAiJGFjX3Zwc3ViCi0kZXh0cmFzdWIKLV9BQ0VPRgotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCi06dAotL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYgotcyxAY29uZmlndXJlX2lucHV0QCwkY29uZmlndXJlX2lucHV0LDt0IHQKLXMsQHNyY2RpckAsJGFjX3NyY2Rpciw7dCB0Ci1zLEBhYnNfc3JjZGlyQCwkYWNfYWJzX3NyY2Rpciw7dCB0Ci1zLEB0b3Bfc3JjZGlyQCwkYWNfdG9wX3NyY2Rpciw7dCB0Ci1zLEBhYnNfdG9wX3NyY2RpckAsJGFjX2Fic190b3Bfc3JjZGlyLDt0IHQKLXMsQGJ1aWxkZGlyQCwkYWNfYnVpbGRkaXIsO3QgdAotcyxAYWJzX2J1aWxkZGlyQCwkYWNfYWJzX2J1aWxkZGlyLDt0IHQKLXMsQHRvcF9idWlsZGRpckAsJGFjX3RvcF9idWlsZGRpciw7dCB0Ci1zLEBhYnNfdG9wX2J1aWxkZGlyQCwkYWNfYWJzX3RvcF9idWlsZGRpciw7dCB0Ci0iICRhY19maWxlX2lucHV0cyB8IChldmFsICIkYWNfc2VkX2NtZHMiKSA+JHRtcC9vdXQKLSAgcm0gLWYgJHRtcC9zdGRpbgotICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCi0gICAgbXYgJHRtcC9vdXQgJGFjX2ZpbGUKLSAgZWxzZQotICAgIGNhdCAkdG1wL291dAotICAgIHJtIC1mICR0bXAvb3V0Ci0gIGZpCiAKKworeworICBlY2hvICJjYXQgPmNvbmYkJHN1YnMuYXdrIDw8X0FDRU9GIiAmJgorICBlY2hvICIkYWNfc3Vic3RfdmFycyIgfCBzZWQgJ3MvLiovJiEkJiRhY19kZWxpbS8nICYmCisgIGVjaG8gIl9BQ0VPRiIKK30gPmNvbmYkJHN1YnMuc2ggfHwKKyAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorYWNfZGVsaW1fbnVtPWBlY2hvICIkYWNfc3Vic3RfdmFycyIgfCBncmVwIC1jICdeJ2AKK2FjX2RlbGltPSclIV8hIyAnCitmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgOjsgZG8KKyAgLiAuL2NvbmYkJHN1YnMuc2ggfHwKKyAgICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CisKKyAgYWNfZGVsaW1fbj1gc2VkIC1uICJzLy4qJGFjX2RlbGltXCQvWC9wIiBjb25mJCRzdWJzLmF3ayB8IGdyZXAgLWMgWGAKKyAgaWYgdGVzdCAkYWNfZGVsaW1fbiA9ICRhY19kZWxpbV9udW07IHRoZW4KKyAgICBicmVhaworICBlbGlmICRhY19sYXN0X3RyeTsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKKyAgZWxzZQorICAgIGFjX2RlbGltPSIkYWNfZGVsaW0hJGFjX2RlbGltIF8kYWNfZGVsaW0hISAiCisgIGZpCiBkb25lCitybSAtZiBjb25mJCRzdWJzLnNoCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorY2F0ID4+IlwkYWNfdG1wL3N1YnMxLmF3ayIgPDxcXF9BQ0FXSyAmJgogX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKK3NlZCAtbiAnCitoCitzL14vU1siLzsgcy8hLiovIl09LworcAorZworcy9eW14hXSohLy8KKzpyZXBsCit0IHJlcGwKK3MvJyIkYWNfZGVsaW0iJyQvLwordCBkZWxpbQorOm5sCitoCitzL1woLlx7MTQ4XH1cKS4uKi9cMS8KK3QgbW9yZTEKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kL1xcbiJcXC8KK3AKK24KK2IgcmVwbAorOm1vcmUxCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iXFwvCitwCitnCitzLy5cezE0OFx9Ly8KK3QgbmwKKzpkZWxpbQoraAorcy9cKC5cezE0OFx9XCkuLiovXDEvCit0IG1vcmUyCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iLworcAorYgorOm1vcmUyCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iXFwvCitwCitnCitzLy5cezE0OFx9Ly8KK3QgZGVsaW0KKycgPGNvbmYkJHN1YnMuYXdrIHwgc2VkICcKKy9eW14iIl0veworICBOCisgIHMvXG4vLworfQorJyA+PiRDT05GSUdfU1RBVFVTIHx8IGFjX3dyaXRlX2ZhaWw9MQorcm0gLWYgY29uZiQkc3Vicy5hd2sKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorX0FDQVdLCitjYXQgPj4iXCRhY190bXAvc3ViczEuYXdrIiA8PF9BQ0FXSyAmJgorICBmb3IgKGtleSBpbiBTKSBTX2lzX3NldFtrZXldID0gMQorICBGUyA9ICIHIgogCi0jCi0jIENPTkZJR19IRUFERVIgc2VjdGlvbi4KLSMKK30KK3sKKyAgbGluZSA9ICQgMAorICBuZmllbGRzID0gc3BsaXQobGluZSwgZmllbGQsICJAIikKKyAgc3Vic3RlZCA9IDAKKyAgbGVuID0gbGVuZ3RoKGZpZWxkWzFdKQorICBmb3IgKGkgPSAyOyBpIDwgbmZpZWxkczsgaSsrKSB7CisgICAga2V5ID0gZmllbGRbaV0KKyAgICBrZXlsZW4gPSBsZW5ndGgoa2V5KQorICAgIGlmIChTX2lzX3NldFtrZXldKSB7CisgICAgICB2YWx1ZSA9IFNba2V5XQorICAgICAgbGluZSA9IHN1YnN0cihsaW5lLCAxLCBsZW4pICIiIHZhbHVlICIiIHN1YnN0cihsaW5lLCBsZW4gKyBrZXlsZW4gKyAzKQorICAgICAgbGVuICs9IGxlbmd0aCh2YWx1ZSkgKyBsZW5ndGgoZmllbGRbKytpXSkKKyAgICAgIHN1YnN0ZWQgPSAxCisgICAgfSBlbHNlCisgICAgICBsZW4gKz0gMSArIGtleWxlbgorICB9CiAKLSMgVGhlc2Ugc2VkIGNvbW1hbmRzIGFyZSBwYXNzZWQgdG8gc2VkIGFzICJBIE5BTUUgQiBOQU1FIEMgVkFMVUUgRCIsIHdoZXJlCi0jIE5BTUUgaXMgdGhlIGNwcCBtYWNybyBiZWluZyBkZWZpbmVkIGFuZCBWQUxVRSBpcyB0aGUgdmFsdWUgaXQgaXMgYmVpbmcgZ2l2ZW4uCi0jCi0jIGFjX2Qgc2V0cyB0aGUgdmFsdWUgaW4gIiNkZWZpbmUgTkFNRSBWQUxVRSIgbGluZXMuCi1hY19kQT0ncyxeXChbIAldKlwpI1woWyAJXSpkZWZpbmVbIAldWyAJXSpcKScKLWFjX2RCPSdbIAldLiokLFwxI1wyJwotYWNfZEM9JyAnCi1hY19kRD0nLDt0JwotIyBhY191IHR1cm5zICIjdW5kZWYgTkFNRSIgd2l0aG91dCB0cmFpbGluZyBibGFua3MgaW50byAiI2RlZmluZSBOQU1FIFZBTFVFIi4KLWFjX3VBPSdzLF5cKFsgCV0qXCkjXChbIAldKlwpdW5kZWZcKFsgCV1bIAldKlwpJwotYWNfdUI9JyQsXDEjXDJkZWZpbmVcMycKLWFjX3VDPScgJwotYWNfdUQ9Jyw7dCcKKyAgcHJpbnQgbGluZQorfQogCi1mb3IgYWNfZmlsZSBpbiA6ICRDT05GSUdfSEVBREVSUzsgZG8gdGVzdCAieCRhY19maWxlIiA9IHg6ICYmIGNvbnRpbnVlCi0gICMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlWzppbmZpbGUuLi5dXSIsIGRlZmF1bHRpbmcgaW5maWxlPSJvdXRmaWxlLmluIi4KLSAgY2FzZSAkYWNfZmlsZSBpbgotICAtIHwgKjotIHwgKjotOiogKSAjIGlucHV0IGZyb20gc3RkaW4KLSAgICAgICAgY2F0ID4kdG1wL3N0ZGluCi0gICAgICAgIGFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCi0gICAgICAgIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7Ci0gICo6KiApIGFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCi0gICAgICAgIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7Ci0gICogKSAgIGFjX2ZpbGVfaW49JGFjX2ZpbGUuaW4gOzsKK19BQ0FXSworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitpZiBzZWQgInMvJGFjX2NyLy8iIDwgL2Rldi9udWxsID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgc2VkICJzLyRhY19jclwkLy87IHMvJGFjX2NyLyRhY19jc19hd2tfY3IvZyIKK2Vsc2UKKyAgY2F0CitmaSA8ICIkYWNfdG1wL3N1YnMxLmF3ayIgPiAiJGFjX3RtcC9zdWJzLmF3ayIgXAorICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IHNldHVwIGNvbmZpZyBmaWxlcyBtYWNoaW5lcnkiICIkTElORU5PIiA1CitfQUNFT0YKKworIyBWUEFUSCBtYXkgY2F1c2UgdHJvdWJsZSB3aXRoIHNvbWUgbWFrZXMsIHNvIHdlIHJlbW92ZSBzb2xlICQoc3JjZGlyKSwKKyMgJHtzcmNkaXJ9IGFuZCBAc3JjZGlyQCBlbnRyaWVzIGZyb20gVlBBVEggaWYgc3JjZGlyIGlzICIuIiwgc3RyaXAgbGVhZGluZyBhbmQKKyMgdHJhaWxpbmcgY29sb25zIGFuZCB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgbGluZSBpZiBWUEFUSCBiZWNvbWVzIGVtcHR5CisjIChhY3R1YWxseSB3ZSBsZWF2ZSBhbiBlbXB0eSBsaW5lIHRvIHByZXNlcnZlIGxpbmUgbnVtYmVycykuCitpZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgorICBhY192cHN1Yj0nL15bCSBdKlZQQVRIWwkgXSo9WwkgXSoveworaAorcy8vLworcy9eLzovCitzL1sJIF0qJC86Lworcy86XCQoc3JjZGlyKTovOi9nCitzLzpcJHtzcmNkaXJ9Oi86L2cKK3MvOkBzcmNkaXJAOi86L2cKK3MvXjoqLy8KK3MvOiokLy8KK3gKK3MvXCg9WwkgXSpcKS4qL1wxLworRworcy9cbi8vCitzL15bXj1dKj1bCSBdKiQvLworfScKK2ZpCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2ZpICMgdGVzdCAtbiAiJENPTkZJR19GSUxFUyIKKworIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19IRUFERVJTIHNlY3Rpb24uCisjIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0hFQURFUlMuCisjIFRoaXMgaGFwcGVucyBmb3IgaW5zdGFuY2Ugd2l0aCBgLi9jb25maWcuc3RhdHVzIE1ha2VmaWxlJy4KK2lmIHRlc3QgLW4gIiRDT05GSUdfSEVBREVSUyI7IHRoZW4KK2NhdCA+IiRhY190bXAvZGVmaW5lcy5hd2siIDw8XF9BQ0FXSyB8fAorQkVHSU4geworX0FDRU9GCisKKyMgVHJhbnNmb3JtIGNvbmZkZWZzLmggaW50byBhbiBhd2sgc2NyaXB0IGBkZWZpbmVzLmF3aycsIGVtYmVkZGVkIGFzCisjIGhlcmUtZG9jdW1lbnQgaW4gY29uZmlnLnN0YXR1cywgdGhhdCBzdWJzdGl0dXRlcyB0aGUgcHJvcGVyIHZhbHVlcyBpbnRvCisjIGNvbmZpZy5oLmluIHRvIHByb2R1Y2UgY29uZmlnLmguCisKKyMgQ3JlYXRlIGEgZGVsaW1pdGVyIHN0cmluZyB0aGF0IGRvZXMgbm90IGV4aXN0IGluIGNvbmZkZWZzLmgsIHRvIGVhc2UKKyMgaGFuZGxpbmcgb2YgbG9uZyBsaW5lcy4KK2FjX2RlbGltPSclIV8hIyAnCitmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgOjsgZG8KKyAgYWNfdHQ9YHNlZCAtbiAiLyRhY19kZWxpbS9wIiBjb25mZGVmcy5oYAorICBpZiB0ZXN0IC16ICIkYWNfdHQiOyB0aGVuCisgICAgYnJlYWsKKyAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19IRUFERVJTIiAiJExJTkVOTyIgNQorICBlbHNlCisgICAgYWNfZGVsaW09IiRhY19kZWxpbSEkYWNfZGVsaW0gXyRhY19kZWxpbSEhICIKKyAgZmkKK2RvbmUKKworIyBGb3IgdGhlIGF3ayBzY3JpcHQsIEQgaXMgYW4gYXJyYXkgb2YgbWFjcm8gdmFsdWVzIGtleWVkIGJ5IG5hbWUsCisjIGxpa2V3aXNlIFAgY29udGFpbnMgbWFjcm8gcGFyYW1ldGVycyBpZiBhbnkuICBQcmVzZXJ2ZSBiYWNrc2xhc2gKKyMgbmV3bGluZSBzZXF1ZW5jZXMuCisKK2FjX3dvcmRfcmU9W18kYXNfY3JfTGV0dGVyc11bXyRhc19jcl9hbG51bV0qCitzZWQgLW4gJworcy8uXHsxNDhcfS8mJyIkYWNfZGVsaW0iJy9nCit0IHJzZXQKKzpyc2V0CitzL15bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKi8gLwordCBkZWYKK2QKKzpkZWYKK3MvXFwkLy8KK3QgYnNubAorcy9bIlxcXS9cXCYvZworcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCitEWyJcMSJdPSIgXDMiL3AKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpWwkgXSpcKC4qXCkvRFsiXDEiXT0iIFwyIi9wCitkCis6YnNubAorcy9bIlxcXS9cXCYvZworcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCitEWyJcMSJdPSIgXDNcXFxcXFxuIlxcL3AKK3QgY29udAorcy9eIFwoJyIkYWNfd29yZF9yZSInXClbCSBdKlwoLipcKS9EWyJcMSJdPSIgXDJcXFxcXFxuIlxcL3AKK3QgY29udAorZAorOmNvbnQKK24KK3MvLlx7MTQ4XH0vJiciJGFjX2RlbGltIicvZwordCBjbGVhcgorOmNsZWFyCitzL1xcJC8vCit0IGJzbmxjCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iL3AKK2QKKzpic25sYworcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvXFxcXFxcbiJcXC9wCitiIGNvbnQKKycgPGNvbmZkZWZzLmggfCBzZWQgJworcy8nIiRhY19kZWxpbSInLyJcXFwKKyIvZycgPj4kQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTEKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGZvciAoa2V5IGluIEQpIERfaXNfc2V0W2tleV0gPSAxCisgIEZTID0gIgciCit9CisvXltcdCBdKiNbXHQgXSooZGVmaW5lfHVuZGVmKVtcdCBdKyRhY193b3JkX3JlKFtcdCAoXXxcJCkvIHsKKyAgbGluZSA9IFwkIDAKKyAgc3BsaXQobGluZSwgYXJnLCAiICIpCisgIGlmIChhcmdbMV0gPT0gIiMiKSB7CisgICAgZGVmdW5kZWYgPSBhcmdbMl0KKyAgICBtYWMxID0gYXJnWzNdCisgIH0gZWxzZSB7CisgICAgZGVmdW5kZWYgPSBzdWJzdHIoYXJnWzFdLCAyKQorICAgIG1hYzEgPSBhcmdbMl0KKyAgfQorICBzcGxpdChtYWMxLCBtYWMyLCAiKCIpICMpCisgIG1hY3JvID0gbWFjMlsxXQorICBwcmVmaXggPSBzdWJzdHIobGluZSwgMSwgaW5kZXgobGluZSwgZGVmdW5kZWYpIC0gMSkKKyAgaWYgKERfaXNfc2V0W21hY3JvXSkgeworICAgICMgUHJlc2VydmUgdGhlIHdoaXRlIHNwYWNlIHN1cnJvdW5kaW5nIHRoZSAiIyIuCisgICAgcHJpbnQgcHJlZml4ICJkZWZpbmUiLCBtYWNybyBQW21hY3JvXSBEW21hY3JvXQorICAgIG5leHQKKyAgfSBlbHNlIHsKKyAgICAjIFJlcGxhY2UgI3VuZGVmIHdpdGggY29tbWVudHMuICBUaGlzIGlzIG5lY2Vzc2FyeSwgZm9yIGV4YW1wbGUsCisgICAgIyBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZpbmVkIGFuZCByZXF1aXJlZAorICAgICMgb24gc29tZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0LgorICAgIGlmIChkZWZ1bmRlZiA9PSAidW5kZWYiKSB7CisgICAgICBwcmludCAiLyoiLCBwcmVmaXggZGVmdW5kZWYsIG1hY3JvLCAiKi8iCisgICAgICBuZXh0CisgICAgfQorICB9Cit9Cit7IHByaW50IH0KK19BQ0FXSworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3Qgc2V0dXAgY29uZmlnIGhlYWRlcnMgbWFjaGluZXJ5IiAiJExJTkVOTyIgNQorZmkgIyB0ZXN0IC1uICIkQ09ORklHX0hFQURFUlMiCisKKworZXZhbCBzZXQgWCAiICA6RiAkQ09ORklHX0ZJTEVTICA6SCAkQ09ORklHX0hFQURFUlMgICAgIgorc2hpZnQKK2ZvciBhY190YWcKK2RvCisgIGNhc2UgJGFjX3RhZyBpbgorICA6W0ZITENdKSBhY19tb2RlPSRhY190YWc7IGNvbnRpbnVlOzsKKyAgZXNhYworICBjYXNlICRhY19tb2RlJGFjX3RhZyBpbgorICA6W0ZITF0qOiopOzsKKyAgOkwqIHwgOkMqOiopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHRhZyBcYCRhY190YWcnIiAiJExJTkVOTyIgNTs7CisgIDpbRkhdLSkgYWNfdGFnPS06LTs7CisgIDpbRkhdKikgYWNfdGFnPSRhY190YWc6JGFjX3RhZy5pbjs7CisgIGVzYWMKKyAgYWNfc2F2ZV9JRlM9JElGUworICBJRlM9OgorICBzZXQgeCAkYWNfdGFnCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgc2hpZnQKKyAgYWNfZmlsZT0kMQorICBzaGlmdAorCisgIGNhc2UgJGFjX21vZGUgaW4KKyAgOkwpIGFjX3NvdXJjZT0kMTs7CisgIDpbRkhdKQorICAgIGFjX2ZpbGVfaW5wdXRzPQorICAgIGZvciBhY19mCisgICAgZG8KKyAgICAgIGNhc2UgJGFjX2YgaW4KKyAgICAgIC0pIGFjX2Y9IiRhY190bXAvc3RkaW4iOzsKKyAgICAgICopICMgTG9vayBmb3IgdGhlIGZpbGUgZmlyc3QgaW4gdGhlIGJ1aWxkIHRyZWUsIHRoZW4gaW4gdGhlIHNvdXJjZSB0cmVlCisJICMgKGlmIHRoZSBwYXRoIGlzIG5vdCBhYnNvbHV0ZSkuICBUaGUgYWJzb2x1dGUgcGF0aCBjYW5ub3QgYmUgRE9TLXN0eWxlLAorCSAjIGJlY2F1c2UgJGFjX2YgY2Fubm90IGNvbnRhaW4gYDonLgorCSB0ZXN0IC1mICIkYWNfZiIgfHwKKwkgICBjYXNlICRhY19mIGluCisJICAgW1xcLyRdKikgZmFsc2U7OworCSAgICopIHRlc3QgLWYgIiRzcmNkaXIvJGFjX2YiICYmIGFjX2Y9IiRzcmNkaXIvJGFjX2YiOzsKKwkgICBlc2FjIHx8CisJICAgYXNfZm5fZXJyb3IgMSAiY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogXGAkYWNfZiciICIkTElORU5PIiA1OzsKKyAgICAgIGVzYWMKKyAgICAgIGNhc2UgJGFjX2YgaW4gKlwnKikgYWNfZj1gJGFzX2VjaG8gIiRhY19mIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7IGVzYWMKKyAgICAgIGFzX2ZuX2FwcGVuZCBhY19maWxlX2lucHV0cyAiICckYWNfZiciCisgICAgZG9uZQorCisgICAgIyBMZXQncyBzdGlsbCBwcmV0ZW5kIGl0IGlzIGBjb25maWd1cmUnIHdoaWNoIGluc3RhbnRpYXRlcyAoaS5lLiwgZG9uJ3QKKyAgICAjIHVzZSAkYXNfbWUpLCBwZW9wbGUgd291bGQgYmUgc3VycHJpc2VkIHRvIHJlYWQ6CisgICAgIyAgICAvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBieSBjb25maWcuc3RhdHVzLiAgKi8KKyAgICBjb25maWd1cmVfaW5wdXQ9J0dlbmVyYXRlZCBmcm9tICdgCisJICAkYXNfZWNobyAiJCoiIHwgc2VkICdzfF5bXjpdKi98fDtzfDpbXjpdKi98LCB8ZycKKwlgJyBieSBjb25maWd1cmUuJworICAgIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KKyAgICAgIGNvbmZpZ3VyZV9pbnB1dD0iJGFjX2ZpbGUuICAkY29uZmlndXJlX2lucHV0IgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjcmVhdGluZyAkYWNfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZmlsZSIgPiY2O30KKyAgICBmaQorICAgICMgTmV1dHJhbGl6ZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW50ZXJwcmV0ZWQgYnkgc2VkIGluIHJlcGxhY2VtZW50IHN0cmluZ3MuCisgICAgY2FzZSAkY29uZmlndXJlX2lucHV0IGluICMoCisgICAgKlwmKiB8ICpcfCogfCAqXFwqICkKKyAgICAgICBhY19zZWRfY29uZl9pbnB1dD1gJGFzX2VjaG8gIiRjb25maWd1cmVfaW5wdXQiIHwKKyAgICAgICBzZWQgJ3MvW1xcXFwmfF0vXFxcXCYvZydgOzsgIygKKyAgICAqKSBhY19zZWRfY29uZl9pbnB1dD0kY29uZmlndXJlX2lucHV0OzsKKyAgICBlc2FjCisKKyAgICBjYXNlICRhY190YWcgaW4KKyAgICAqOi06KiB8ICo6LSkgY2F0ID4iJGFjX3RtcC9zdGRpbiIgXAorICAgICAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1IDs7CisgICAgZXNhYworICAgIDs7CiAgIGVzYWMKIAotICB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtICYmIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRhY19maWxlIiA+JjUKLWVjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9Ci0KLSAgIyBGaXJzdCBsb29rIGZvciB0aGUgaW5wdXQgZmlsZXMgaW4gdGhlIGJ1aWxkIHRyZWUsIG90aGVyd2lzZSBpbiB0aGUKLSAgIyBzcmMgdHJlZS4KLSAgYWNfZmlsZV9pbnB1dHM9YElGUz06Ci0gICAgZm9yIGYgaW4gJGFjX2ZpbGVfaW47IGRvCi0gICAgICBjYXNlICRmIGluCi0gICAgICAtKSBlY2hvICR0bXAvc3RkaW4gOzsKLSAgICAgIFtcXC8kXSopCi0gICAgICAgICAjIEFic29sdXRlIChjYW4ndCBiZSBET1Mtc3R5bGUsIGFzIElGUz06KQotICAgICAgICAgdGVzdCAtZiAiJGYiIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gICAgICAgICBlY2hvICRmOzsKLSAgICAgICopICMgUmVsYXRpdmUKLSAgICAgICAgIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgotICAgICAgICAgICAjIEJ1aWxkIHRyZWUKLSAgICAgICAgICAgZWNobyAkZgotICAgICAgICAgZWxpZiB0ZXN0IC1mICIkc3JjZGlyLyRmIjsgdGhlbgotICAgICAgICAgICAjIFNvdXJjZSB0cmVlCi0gICAgICAgICAgIGVjaG8gJHNyY2Rpci8kZgotICAgICAgICAgZWxzZQotICAgICAgICAgICAjIC9kZXYvbnVsbCB0cmVlCi0gICAgICAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gICAgICAgICBmaTs7Ci0gICAgICBlc2FjCi0gICAgZG9uZWAgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9Ci0gICMgUmVtb3ZlIHRoZSB0cmFpbGluZyBzcGFjZXMuCi0gIHNlZCAncy9bIAldKiQvLycgJGFjX2ZpbGVfaW5wdXRzID4kdG1wL2luCi0KLV9BQ0VPRgotCi0jIFRyYW5zZm9ybSBjb25mZGVmcy5oIGludG8gdHdvIHNlZCBzY3JpcHRzLCBgY29uZnRlc3QuZGVmaW5lcycgYW5kCi0jIGBjb25mdGVzdC51bmRlZnMnLCB0aGF0IHN1YnN0aXR1dGVzIHRoZSBwcm9wZXIgdmFsdWVzIGludG8KLSMgY29uZmlnLmguaW4gdG8gcHJvZHVjZSBjb25maWcuaC4gIFRoZSBmaXJzdCBoYW5kbGVzIGAjZGVmaW5lJwotIyB0ZW1wbGF0ZXMsIGFuZCB0aGUgc2Vjb25kIGAjdW5kZWYnIHRlbXBsYXRlcy4KLSMgQW5kIGZpcnN0OiBQcm90ZWN0IGFnYWluc3QgYmVpbmcgb24gdGhlIHJpZ2h0IHNpZGUgb2YgYSBzZWQgc3Vic3QgaW4KLSMgY29uZmlnLnN0YXR1cy4gIFByb3RlY3QgYWdhaW5zdCBiZWluZyBpbiBhbiB1bnF1b3RlZCBoZXJlIGRvY3VtZW50Ci0jIGluIGNvbmZpZy5zdGF0dXMuCi1ybSAtZiBjb25mdGVzdC5kZWZpbmVzIGNvbmZ0ZXN0LnVuZGVmcwotIyBVc2luZyBhIGhlcmUgZG9jdW1lbnQgaW5zdGVhZCBvZiBhIHN0cmluZyByZWR1Y2VzIHRoZSBxdW90aW5nIG5pZ2h0bWFyZS4KLSMgUHV0dGluZyBjb21tZW50cyBpbiBzZWQgc2NyaXB0cyBpcyBub3QgcG9ydGFibGUuCi0jCi0jIGBlbmQnIGlzIHVzZWQgdG8gYXZvaWQgdGhhdCB0aGUgc2Vjb25kIG1haW4gc2VkIGNvbW1hbmQgKG1lYW50IGZvcgotIyAwLWFyeSBDUFAgbWFjcm9zKSBhcHBsaWVzIHRvIG4tYXJ5IG1hY3JvIGRlZmluaXRpb25zLgotIyBTZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24gZm9yIGBjbGVhcicuCi1jYXQgPmNvbmZkZWYyc2VkLnNlZCA8PFxfQUNFT0YKLXMvW1xcJixdL1xcJi9nCi1zLFtcXCRgXSxcXCYsZwotdCBjbGVhcgotOiBjbGVhcgotcyxeWyAJXSojWyAJXSpkZWZpbmVbIAldWyAJXSpcKFteIAkoXVteIAkoXSpcKVwoKFteKV0qKVwpWyAJXSpcKC4qXCkkLCR7YWNfZEF9XDEke2FjX2RCfVwxXDIke2FjX2RDfVwzJHthY19kRH0sZ3AKLXQgZW5kCi1zLF5bIAldKiNbIAldKmRlZmluZVsgCV1bIAldKlwoW14gCV1bXiAJXSpcKVsgCV0qXCguKlwpJCwke2FjX2RBfVwxJHthY19kQn1cMSR7YWNfZEN9XDIke2FjX2REfSxncAotOiBlbmQKLV9BQ0VPRgotIyBJZiBzb21lIG1hY3JvcyB3ZXJlIGNhbGxlZCBzZXZlcmFsIHRpbWVzIHRoZXJlIG1pZ2h0IGJlIHNldmVyYWwgdGltZXMKLSMgdGhlIHNhbWUgI2RlZmluZXMsIHdoaWNoIGlzIHVzZWxlc3MuICBOZXZlcnRoZWxlc3MsIHdlIG1heSBub3Qgd2FudCB0bwotIyBzb3J0IHRoZW0sIHNpbmNlIHdlIHdhbnQgdGhlICpsYXN0KiBBQy1ERUZJTkUgdG8gYmUgaG9ub3JlZC4KLXVuaXEgY29uZmRlZnMuaCB8IHNlZCAtbiAtZiBjb25mZGVmMnNlZC5zZWQgPmNvbmZ0ZXN0LmRlZmluZXMKLXNlZCAncy9hY19kL2FjX3UvZycgY29uZnRlc3QuZGVmaW5lcyA+Y29uZnRlc3QudW5kZWZzCi1ybSAtZiBjb25mZGVmMnNlZC5zZWQKLQotIyBUaGlzIHNlZCBjb21tYW5kIHJlcGxhY2VzICN1bmRlZiB3aXRoIGNvbW1lbnRzLiAgVGhpcyBpcyBuZWNlc3NhcnksIGZvcgotIyBleGFtcGxlLCBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZpbmVkIGFuZCByZXF1aXJlZAotIyBvbiBzb21lIHN5c3RlbXMgd2hlcmUgY29uZmlndXJlIHdpbGwgbm90IGRlY2lkZSB0byBkZWZpbmUgaXQuCi1jYXQgPj5jb25mdGVzdC51bmRlZnMgPDxcX0FDRU9GCi1zLF5bIAldKiNbIAldKnVuZGVmWyAJXVsgCV0qW2EtekEtWl9dW2EtekEtWl8wLTldKiwvKiAmICovLAotX0FDRU9GCi0KLSMgQnJlYWsgdXAgY29uZnRlc3QuZGVmaW5lcyBiZWNhdXNlIHNvbWUgc2hlbGxzIGhhdmUgYSBsaW1pdCBvbiB0aGUgc2l6ZQotIyBvZiBoZXJlIGRvY3VtZW50cywgYW5kIG9sZCBzZWRzIGhhdmUgc21hbGwgbGltaXRzIHRvbyAoMTAwIGNtZHMpLgotZWNobyAnICAjIEhhbmRsZSBhbGwgdGhlICNkZWZpbmUgdGVtcGxhdGVzIG9ubHkgaWYgbmVjZXNzYXJ5LicgPj4kQ09ORklHX1NUQVRVUwotZWNobyAnICBpZiBncmVwICJeWyAJXSojWyAJXSpkZWZpbmUiICR0bXAvaW4gPi9kZXYvbnVsbDsgdGhlbicgPj4kQ09ORklHX1NUQVRVUwotZWNobyAnICAjIElmIHRoZXJlIGFyZSBubyBkZWZpbmVzLCB3ZSBtYXkgaGF2ZSBhbiBlbXB0eSBpZi9maScgPj4kQ09ORklHX1NUQVRVUwotZWNobyAnICA6JyA+PiRDT05GSUdfU1RBVFVTCi1ybSAtZiBjb25mdGVzdC50YWlsCi13aGlsZSBncmVwIC4gY29uZnRlc3QuZGVmaW5lcyA+L2Rldi9udWxsCi1kbwotICAjIFdyaXRlIGEgbGltaXRlZC1zaXplIGhlcmUgZG9jdW1lbnQgdG8gJHRtcC9kZWZpbmVzLnNlZC4KLSAgZWNobyAnICBjYXQgPiR0bXAvZGVmaW5lcy5zZWQgPDxDRU9GJyA+PiRDT05GSUdfU1RBVFVTCi0gICMgU3BlZWQgdXA6IGRvbid0IGNvbnNpZGVyIHRoZSBub24gYCNkZWZpbmUnIGxpbmVzLgotICBlY2hvICcvXlsgCV0qI1sgCV0qZGVmaW5lLyFiJyA+PiRDT05GSUdfU1RBVFVTCi0gICMgV29yayBhcm91bmQgdGhlIGZvcmdldC10by1yZXNldC10aGUtZmxhZyBidWcuCi0gIGVjaG8gJ3QgY2xyJyA+PiRDT05GSUdfU1RBVFVTCi0gIGVjaG8gJzogY2xyJyA+PiRDT05GSUdfU1RBVFVTCi0gIHNlZCAke2FjX21heF9oZXJlX2xpbmVzfXEgY29uZnRlc3QuZGVmaW5lcyA+PiRDT05GSUdfU1RBVFVTCi0gIGVjaG8gJ0NFT0YKLSAgc2VkIC1mICR0bXAvZGVmaW5lcy5zZWQgJHRtcC9pbiA+JHRtcC9vdXQKLSAgcm0gLWYgJHRtcC9pbgotICBtdiAkdG1wL291dCAkdG1wL2luCi0nID4+JENPTkZJR19TVEFUVVMKLSAgc2VkIDEsJHthY19tYXhfaGVyZV9saW5lc31kIGNvbmZ0ZXN0LmRlZmluZXMgPmNvbmZ0ZXN0LnRhaWwKLSAgcm0gLWYgY29uZnRlc3QuZGVmaW5lcwotICBtdiBjb25mdGVzdC50YWlsIGNvbmZ0ZXN0LmRlZmluZXMKLWRvbmUKLXJtIC1mIGNvbmZ0ZXN0LmRlZmluZXMKLWVjaG8gJyAgZmkgIyBncmVwJyA+PiRDT05GSUdfU1RBVFVTCi1lY2hvID4+JENPTkZJR19TVEFUVVMKLQotIyBCcmVhayB1cCBjb25mdGVzdC51bmRlZnMgYmVjYXVzZSBzb21lIHNoZWxscyBoYXZlIGEgbGltaXQgb24gdGhlIHNpemUKLSMgb2YgaGVyZSBkb2N1bWVudHMsIGFuZCBvbGQgc2VkcyBoYXZlIHNtYWxsIGxpbWl0cyB0b28gKDEwMCBjbWRzKS4KLWVjaG8gJyAgIyBIYW5kbGUgYWxsIHRoZSAjdW5kZWYgdGVtcGxhdGVzJyA+PiRDT05GSUdfU1RBVFVTCi1ybSAtZiBjb25mdGVzdC50YWlsCi13aGlsZSBncmVwIC4gY29uZnRlc3QudW5kZWZzID4vZGV2L251bGwKLWRvCi0gICMgV3JpdGUgYSBsaW1pdGVkLXNpemUgaGVyZSBkb2N1bWVudCB0byAkdG1wL3VuZGVmcy5zZWQuCi0gIGVjaG8gJyAgY2F0ID4kdG1wL3VuZGVmcy5zZWQgPDxDRU9GJyA+PiRDT05GSUdfU1RBVFVTCi0gICMgU3BlZWQgdXA6IGRvbid0IGNvbnNpZGVyIHRoZSBub24gYCN1bmRlZicKLSAgZWNobyAnL15bIAldKiNbIAldKnVuZGVmLyFiJyA+PiRDT05GSUdfU1RBVFVTCi0gICMgV29yayBhcm91bmQgdGhlIGZvcmdldC10by1yZXNldC10aGUtZmxhZyBidWcuCi0gIGVjaG8gJ3QgY2xyJyA+PiRDT05GSUdfU1RBVFVTCi0gIGVjaG8gJzogY2xyJyA+PiRDT05GSUdfU1RBVFVTCi0gIHNlZCAke2FjX21heF9oZXJlX2xpbmVzfXEgY29uZnRlc3QudW5kZWZzID4+JENPTkZJR19TVEFUVVMKLSAgZWNobyAnQ0VPRgotICBzZWQgLWYgJHRtcC91bmRlZnMuc2VkICR0bXAvaW4gPiR0bXAvb3V0Ci0gIHJtIC1mICR0bXAvaW4KLSAgbXYgJHRtcC9vdXQgJHRtcC9pbgotJyA+PiRDT05GSUdfU1RBVFVTCi0gIHNlZCAxLCR7YWNfbWF4X2hlcmVfbGluZXN9ZCBjb25mdGVzdC51bmRlZnMgPmNvbmZ0ZXN0LnRhaWwKLSAgcm0gLWYgY29uZnRlc3QudW5kZWZzCi0gIG12IGNvbmZ0ZXN0LnRhaWwgY29uZnRlc3QudW5kZWZzCi1kb25lCi1ybSAtZiBjb25mdGVzdC51bmRlZnMKLQotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCi0gICMgTGV0J3Mgc3RpbGwgcHJldGVuZCBpdCBpcyBgY29uZmlndXJlJyB3aGljaCBpbnN0YW50aWF0ZXMgKGkuZS4sIGRvbid0Ci0gICMgdXNlICRhc19tZSksIHBlb3BsZSB3b3VsZCBiZSBzdXJwcmlzZWQgdG8gcmVhZDoKLSAgIyAgICAvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBieSBjb25maWcuc3RhdHVzLiAgKi8KLSAgaWYgdGVzdCB4IiRhY19maWxlIiA9IHgtOyB0aGVuCi0gICAgZWNobyAiLyogR2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gICovIiA+JHRtcC9jb25maWcuaAotICBlbHNlCi0gICAgZWNobyAiLyogJGFjX2ZpbGUuICBHZW5lcmF0ZWQgYnkgY29uZmlndXJlLiAgKi8iID4kdG1wL2NvbmZpZy5oCi0gIGZpCi0gIGNhdCAkdG1wL2luID4+JHRtcC9jb25maWcuaAotICBybSAtZiAkdG1wL2luCi0gIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KLSAgICBpZiBkaWZmICRhY19maWxlICR0bXAvY29uZmlnLmggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNQotZWNobyAiJGFzX21lOiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNjt9Ci0gICAgZWxzZQotICAgICAgYWNfZGlyPWAoZGlybmFtZSAiJGFjX2ZpbGUiKSAyPi9kZXYvbnVsbCB8fAorICBhY19kaXI9YCRhc19kaXJuYW1lIC0tICIkYWNfZmlsZSIgfHwKICRhc19leHByIFgiJGFjX2ZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0gICAgICAgICBYIiRhY19maWxlIiA6ICdYXCgvL1wpW14vXScgXHwgXAotICAgICAgICAgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKLSAgICAgICAgIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgXAotICAgICAgICAgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgiJGFjX2ZpbGUiIHwKLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIHMvLiovLi87IHEnYAotICAgICAgeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgotICAgIG1rZGlyIC1wICIkYWNfZGlyIgotICBlbHNlCi0gICAgYXNfZGlyPSIkYWNfZGlyIgotICAgIGFzX2RpcnM9Ci0gICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KLSAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCi0gICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKLSRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLSAgICAgICAgIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKLSAgICAgICAgIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKLSAgICAgICAgIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCi0gICAgICAgICAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKLWVjaG8gWCIkYXNfZGlyIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKLSAgICBkb25lCi0gICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKLSAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIkYWNfZGlyXCIiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIkYWNfZGlyXCIiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhY19maWxlIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgYXNfZGlyPSIkYWNfZGlyIjsgYXNfZm5fbWtkaXJfcAorICBhY19idWlsZGRpcj0uCiAKLSAgICAgIHJtIC1mICRhY19maWxlCi0gICAgICBtdiAkdG1wL2NvbmZpZy5oICRhY19maWxlCitjYXNlICIkYWNfZGlyIiBpbgorLikgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisqKQorICBhY19kaXJfc3VmZml4PS9gJGFzX2VjaG8gIiRhY19kaXIiIHwgc2VkICdzfF5cLltcXC9dfHwnYAorICAjIEEgIi4uIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCisgIGFjX3RvcF9idWlsZGRpcl9zdWI9YCRhc19lY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3N8L1teXFwvXSp8Ly4ufGc7c3wvfHwnYAorICBjYXNlICRhY190b3BfYnVpbGRkaXJfc3ViIGluCisgICIiKSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyAgKikgIGFjX3RvcF9idWlsZF9wcmVmaXg9JGFjX3RvcF9idWlsZGRpcl9zdWIvIDs7CisgIGVzYWMgOzsKK2VzYWMKK2FjX2Fic190b3BfYnVpbGRkaXI9JGFjX3B3ZAorYWNfYWJzX2J1aWxkZGlyPSRhY19wd2QkYWNfZGlyX3N1ZmZpeAorIyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eToKK2FjX3RvcF9idWlsZGRpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeAorCitjYXNlICRzcmNkaXIgaW4KKyAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgorICAgIGFjX3NyY2Rpcj0uCisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyX3N1YgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKKyAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBuYW1lLgorICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7CisgICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JHNyY2RpciA7OworICAqKSAjIFJlbGF0aXZlIG5hbWUuCisgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpciRhY19kaXJfc3VmZml4CisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkLyRzcmNkaXIgOzsKK2VzYWMKK2FjX2Fic19zcmNkaXI9JGFjX2Fic190b3Bfc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKworCisgIGNhc2UgJGFjX21vZGUgaW4KKyAgOkYpCisgICMKKyAgIyBDT05GSUdfRklMRQorICAjCisKKyAgY2FzZSAkSU5TVEFMTCBpbgorICBbXFwvJF0qIHwgPzpbXFwvXSogKSBhY19JTlNUQUxMPSRJTlNUQUxMIDs7CisgICopIGFjX0lOU1RBTEw9JGFjX3RvcF9idWlsZF9wcmVmaXgkSU5TVEFMTCA7OworICBlc2FjCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorIyBJZiB0aGUgdGVtcGxhdGUgZG9lcyBub3Qga25vdyBhYm91dCBkYXRhcm9vdGRpciwgZXhwYW5kIGl0LgorIyBGSVhNRTogVGhpcyBoYWNrIHNob3VsZCBiZSByZW1vdmVkIGEgZmV3IHllYXJzIGFmdGVyIDIuNjAuCithY19kYXRhcm9vdGRpcl9oYWNrPTsgYWNfZGF0YXJvb3RkaXJfc2Vlbj0KK2FjX3NlZF9kYXRhcm9vdD0nCisvZGF0YXJvb3RkaXIvIHsKKyAgcAorICBxCit9CisvQGRhdGFkaXJAL3AKKy9AZG9jZGlyQC9wCisvQGluZm9kaXJAL3AKKy9AbG9jYWxlZGlyQC9wCisvQG1hbmRpckAvcCcKK2Nhc2UgYGV2YWwgInNlZCAtbiBcIlwkYWNfc2VkX2RhdGFyb290XCIgJGFjX2ZpbGVfaW5wdXRzImAgaW4KKypkYXRhcm9vdGRpciopIGFjX2RhdGFyb290ZGlyX3NlZW49eWVzOzsKKypAZGF0YWRpckAqfCpAZG9jZGlyQCp8KkBpbmZvZGlyQCp8KkBsb2NhbGVkaXJAKnwqQG1hbmRpckAqKQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICRhY19maWxlX2lucHV0cyBzZWVtcyB0byBpZ25vcmUgdGhlIC0tZGF0YXJvb3RkaXIgc2V0dGluZyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfZmlsZV9pbnB1dHMgc2VlbXMgdG8gaWdub3JlIHRoZSAtLWRhdGFyb290ZGlyIHNldHRpbmciID4mMjt9CitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorICBhY19kYXRhcm9vdGRpcl9oYWNrPScKKyAgcyZAZGF0YWRpckAmJGRhdGFkaXImZworICBzJkBkb2NkaXJAJiRkb2NkaXImZworICBzJkBpbmZvZGlyQCYkaW5mb2RpciZnCisgIHMmQGxvY2FsZWRpckAmJGxvY2FsZWRpciZnCisgIHMmQG1hbmRpckAmJG1hbmRpciZnCisgIHMmXFxcJHtkYXRhcm9vdGRpcn0mJGRhdGFyb290ZGlyJmcnIDs7Citlc2FjCitfQUNFT0YKKworIyBOZXV0cmFsaXplIFZQQVRIIHdoZW4gYCRzcmNkaXInID0gYC4nLgorIyBTaGVsbCBjb2RlIGluIGNvbmZpZ3VyZS5hYyBtaWdodCBzZXQgZXh0cmFzdWIuCisjIEZJWE1FOiBkbyB3ZSByZWFsbHkgd2FudCB0byBtYWludGFpbiB0aGlzIGZlYXR1cmU/CitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2FjX3NlZF9leHRyYT0iJGFjX3Zwc3ViCiskZXh0cmFzdWIKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorOnQKKy9AW2EtekEtWl9dW2EtekEtWl8wLTldKkAvIWIKK3N8QGNvbmZpZ3VyZV9pbnB1dEB8JGFjX3NlZF9jb25mX2lucHV0fDt0IHQKK3MmQHRvcF9idWlsZGRpckAmJGFjX3RvcF9idWlsZGRpcl9zdWImO3QgdAorcyZAdG9wX2J1aWxkX3ByZWZpeEAmJGFjX3RvcF9idWlsZF9wcmVmaXgmO3QgdAorcyZAc3JjZGlyQCYkYWNfc3JjZGlyJjt0IHQKK3MmQGFic19zcmNkaXJAJiRhY19hYnNfc3JjZGlyJjt0IHQKK3MmQHRvcF9zcmNkaXJAJiRhY190b3Bfc3JjZGlyJjt0IHQKK3MmQGFic190b3Bfc3JjZGlyQCYkYWNfYWJzX3RvcF9zcmNkaXImO3QgdAorcyZAYnVpbGRkaXJAJiRhY19idWlsZGRpciY7dCB0CitzJkBhYnNfYnVpbGRkaXJAJiRhY19hYnNfYnVpbGRkaXImO3QgdAorcyZAYWJzX3RvcF9idWlsZGRpckAmJGFjX2Fic190b3BfYnVpbGRkaXImO3QgdAorcyZASU5TVEFMTEAmJGFjX0lOU1RBTEwmO3QgdAorJGFjX2RhdGFyb290ZGlyX2hhY2sKKyIKK2V2YWwgc2VkIFwiXCRhY19zZWRfZXh0cmFcIiAiJGFjX2ZpbGVfaW5wdXRzIiB8ICRBV0sgLWYgIiRhY190bXAvc3Vicy5hd2siIFwKKyAgPiRhY190bXAvb3V0IHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQorCit0ZXN0IC16ICIkYWNfZGF0YXJvb3RkaXJfaGFjayRhY19kYXRhcm9vdGRpcl9zZWVuIiAmJgorICB7IGFjX291dD1gc2VkIC1uICcvXCR7ZGF0YXJvb3RkaXJ9L3AnICIkYWNfdG1wL291dCJgOyB0ZXN0IC1uICIkYWNfb3V0IjsgfSAmJgorICB7IGFjX291dD1gc2VkIC1uICcvXlsJIF0qZGF0YXJvb3RkaXJbCSBdKjoqPS9wJyBcCisgICAgICAiJGFjX3RtcC9vdXQiYDsgdGVzdCAteiAiJGFjX291dCI7IH0gJiYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkYWNfZmlsZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgXGBkYXRhcm9vdGRpcicKK3doaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfZmlsZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgXGBkYXRhcm9vdGRpcicKK3doaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZCIgPiYyO30KKworICBybSAtZiAiJGFjX3RtcC9zdGRpbiIKKyAgY2FzZSAkYWNfZmlsZSBpbgorICAtKSBjYXQgIiRhY190bXAvb3V0IiAmJiBybSAtZiAiJGFjX3RtcC9vdXQiOzsKKyAgKikgcm0gLWYgIiRhY19maWxlIiAmJiBtdiAiJGFjX3RtcC9vdXQiICIkYWNfZmlsZSI7OworICBlc2FjIFwKKyAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisgOzsKKyAgOkgpCisgICMKKyAgIyBDT05GSUdfSEVBREVSCisgICMKKyAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorICAgIHsKKyAgICAgICRhc19lY2hvICIvKiAkY29uZmlndXJlX2lucHV0ICAqLyIgXAorICAgICAgJiYgZXZhbCAnJEFXSyAtZiAiJGFjX3RtcC9kZWZpbmVzLmF3ayInICIkYWNfZmlsZV9pbnB1dHMiCisgICAgfSA+IiRhY190bXAvY29uZmlnLmgiIFwKKyAgICAgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQorICAgIGlmIGRpZmYgIiRhY19maWxlIiAiJGFjX3RtcC9jb25maWcuaCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNjt9CisgICAgZWxzZQorICAgICAgcm0gLWYgIiRhY19maWxlIgorICAgICAgbXYgIiRhY190bXAvY29uZmlnLmgiICIkYWNfZmlsZSIgXAorCXx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQogICAgIGZpCiAgIGVsc2UKLSAgICBjYXQgJHRtcC9jb25maWcuaAotICAgIHJtIC1mICR0bXAvY29uZmlnLmgKKyAgICAkYXNfZWNobyAiLyogJGNvbmZpZ3VyZV9pbnB1dCAgKi8iIFwKKyAgICAgICYmIGV2YWwgJyRBV0sgLWYgIiRhY190bXAvZGVmaW5lcy5hd2siJyAiJGFjX2ZpbGVfaW5wdXRzIiBcCisgICAgICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAtIiAiJExJTkVOTyIgNQogICBmaQotZG9uZQotX0FDRU9GCisgOzsKIAotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCiAKLXsgKGV4aXQgMCk7IGV4aXQgMDsgfQorICBlc2FjCisKK2RvbmUgIyBmb3IgYWNfdGFnCisKKworYXNfZm5fZXhpdCAwCiBfQUNFT0YKLWNobW9kICt4ICRDT05GSUdfU1RBVFVTCiBhY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQogCit0ZXN0ICRhY193cml0ZV9mYWlsID0gMCB8fAorICBhc19mbl9lcnJvciAkPyAid3JpdGUgZmFpbHVyZSBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKKwogCiAjIGNvbmZpZ3VyZSBpcyB3cml0aW5nIHRvIGNvbmZpZy5sb2csIGFuZCB0aGVuIGNhbGxzIGNvbmZpZy5zdGF0dXMuCiAjIGNvbmZpZy5zdGF0dXMgZG9lcyBpdHMgb3duIHJlZGlyZWN0aW9uLCBhcHBlbmRpbmcgdG8gY29uZmlnLmxvZy4KQEAgLTU3NjksOCArNzc1MSwyMSBAQAogICBleGVjIDU+PmNvbmZpZy5sb2cKICAgIyBVc2UgfHwsIG5vdCAmJiwgdG8gYXZvaWQgZXhpdGluZyBmcm9tIHRoZSBpZiB3aXRoICQ/ID0gMSwgd2hpY2gKICAgIyB3b3VsZCBtYWtlIGNvbmZpZ3VyZSBmYWlsIGlmIHRoaXMgaXMgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24uCi0gICRhY19jc19zdWNjZXNzIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorICAkYWNfY3Nfc3VjY2VzcyB8fCBhc19mbl9leGl0IDEKK2ZpCitpZiB0ZXN0IC1uICIkYWNfdW5yZWNvZ25pemVkX29wdHMiICYmIHRlc3QgIiRlbmFibGVfb3B0aW9uX2NoZWNraW5nIiAhPSBubzsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiYyO30KIGZpCiAKIAotCisjIFRoaXMgaXMgbmVlZGVkIHdoZW4gYnVpbGRpbmcgb3V0c2lkZSB0aGUgc291cmNlIGRpci4KK2FzX2Rpcj1jcnlwdG8vY2lwaGVyOyBhc19mbl9ta2Rpcl9wCithc19kaXI9Y3J5cHRvL2hhc2g7IGFzX2ZuX21rZGlyX3AKK2FzX2Rpcj1jcnlwdG8va2VybmVsOyBhc19mbl9ta2Rpcl9wCithc19kaXI9Y3J5cHRvL21hdGg7IGFzX2ZuX21rZGlyX3AKK2FzX2Rpcj1jcnlwdG8vcmVwbGF5OyBhc19mbl9ta2Rpcl9wCithc19kaXI9Y3J5cHRvL3Rlc3Q7IGFzX2ZuX21rZGlyX3AKK2FzX2Rpcj1kb2M7IGFzX2ZuX21rZGlyX3AKK2FzX2Rpcj1zcnRwOyBhc19mbl9ta2Rpcl9wCithc19kaXI9dGVzdDsgYXNfZm5fbWtkaXJfcApkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MTQ0OWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWd1cmUuYWMKQEAgLTAsMCArMSw0MjYgQEAKK2RubCBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgorQUNfSU5JVChbbGlic3J0cDJdLCBbMi4zLjAtcHJlXSwgW2h0dHBzOi8vZ2l0aHViLmNvbS9jaXNjby9saWJzcnRwL2lzc3Vlc10pCisKK2RubCBNdXN0IGNvbWUgYmVmb3JlIEFDX1BST0dfQ0MKK0VNUFRZX0NGTEFHUz0ibm8iCitpZiB0ZXN0ICJ4JENGTEFHUyIgPSAieCI7IHRoZW4KKyAgIGRubCBEZWZhdWx0IHZhbHVlIGZvciBDRkxBR1MgaWYgbm90IHNwZWNpZmllZC4KKyAgIEVNUFRZX0NGTEFHUz0ieWVzIgorZmkKKworZG5sIENoZWNrcyBmb3IgcHJvZ3JhbXMuCitBQ19QUk9HX0NDCitBQ19QUk9HX0NQUAorQUNfUFJPR19DWFgKK0FDX0FSR19WQVIoCisgIFtFWFRSQV9DRkxBR1NdLAorICBbQyBjb21waWxlciBmbGFncyBhcHBlbmRlZCB0byB0aGUgcmVndWxhciBDIGNvbXBpbGVyIGZsYWdzIGluc3RlYWQgb2Ygb3ZlcnJpZGluZyB0aGVtXSkKK0FNX1BST0dfQVIKK0FDX1BST0dfUkFOTElCCitBQ19QUk9HX0lOU1RBTEwKK0FDX1BST0dfU0VECisKK2RubCBDaGVjayB0aGUgYnl0ZSBvcmRlcgorQUNfQ19CSUdFTkRJQU4KKworQUNfQ0FOT05JQ0FMX0hPU1QKKworZG5sIGNoZWNrIGhvc3RfY3B1IHR5cGUsIHNldCBkZWZpbmVzIGFwcHJvcHJpYXRlbHkKK2Nhc2UgJGhvc3RfY3B1IGluCisgIGkqODYgfCB4ODZfNjQgKQorICAgIEFDX0RFRklORShbQ1BVX0NJU0NdLCBbMV0sIFtEZWZpbmUgaWYgYnVpbGRpbmcgZm9yIGEgQ0lTQyBtYWNoaW5lIChlLmcuIEludGVsKS5dKQorICAgIEFDX0RFRklORShbSEFWRV9YODZdLCBbMV0sIFtEZWZpbmUgdG8gdXNlIFg4NiBpbmxpbmVkIGFzc2VtYmx5IGNvZGVdKQorICAgIDs7CisgICogKQorICAgIEFDX0RFRklORShbQ1BVX1JJU0NdLCBbMV0sIFtEZWZpbmUgaWYgYnVpbGRpbmcgZm9yIGEgUklTQyBtYWNoaW5lIChhc3N1bWUgc2xvdyBieXRlIGFjY2VzcykuXSkKKyAgICA7OworZXNhYworCitkbmwgQ2hlY2sgaWYgd2UgYXJlIG9uIGEgV2luZG93cyBwbGF0Zm9ybS4KK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgKmN5Z3dpbip8Km1pbmd3KiApCisgICAgRVhFPS5leGUKKyAgICA7OworICAqICkKKyAgICBFWEU9IiIKKyAgICA7OworZXNhYworQUNfU1VCU1QoW0VYRV0pICAgIyBkZWZpbmUgZXhlY3V0YWJsZSBzdWZmaXg7IHRoaXMgaXMgbmVlZGVkIGZvciBgbWFrZSBjbGVhbicKKworZG5sIENoZWNrcyBmb3Igc3VwcG9ydGVkIGNvbXBpbGVyIGZsYWdzLgorc3VwcG9ydGVkX2NmbGFncz0iIgoraWYgdGVzdCAiJEVNUFRZX0NGTEFHUyIgPSAibm8iOyB0aGVuCisgIHN1cHBvcnRlZF9jZmxhZ3M9IiRDRkxBR1MiCitmaQorCitkbmwgRm9yIGFjY3VyYXRlIGRldGVjdGlvbiwgd2UgbmVlZCB3YXJuaW5ncyBhcyBlcnJvcnMuCitkbmwgSS5lLiBDbGFuZyB3aWxsIGlzc3VlIGEgd2FybmluZyBhYm91dCB1bnN1cHBvcnRlZCBmbGFncy4KK2RubCBGb3IgdGhlIGNvbXBpbGF0aW9uIHRvIGZhaWwsIHRob3NlIHdhcm5pbmdzIG5lZWRzIHRvIGJlIHVwZ3JhZGVkIHRvIGVycm9ycy4KK2RubCBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBhZ2FpbiBvbmNlIHRoZSB0ZXN0cyBhcmUgY29tcGxldGUgKHNlZSBiZWxvdykuCitXRVJST1I9IiIKK2ZvciB3IGluIC1XZXJyb3IgLWVycndhcm47IGRvCisgIGlmIHRlc3QgIngkV0VSUk9SIiA9ICJ4IjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciAke0NDLWN9IGFjY2VwdHMgJHddKQorICAgIHNhdmVfY2ZsYWdzPSIkQ0ZMQUdTIgorICAgIEFTX0lGKFt0ZXN0ICJ4JENGTEFHUyIgPSAieCJdLCBbQ0ZMQUdTPSIkdyJdLCBbQ0ZMQUdTPSIkQ0ZMQUdTICR3Il0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtpbnQgbWFpbih2b2lkKSB7IHJldHVybiAwOyB9XSldLAorICAgICAgW1dFUlJPUj0iJHciCisgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSldLAorICAgICAgW0NGTEFHUz0iJHNhdmVfY2ZsYWdzIgorICAgICAgIEFDX01TR19SRVNVTFQoW25vXSldKQorICBmaQorZG9uZQorCitkbmwgTm90ZSB0aGF0IC1mUElDIGlzIG5vdCBleHBsaWNpdGx5IGFkZGVkIHRvIExERkxBR1MuCitkbmwgU2luY2UgdGhlIGNvbXBpbGVyIGlzIHVzZWQgYXMgdGhlIGxpbmsgZHJpdmVyLCBDRkxBR1Mgd2lsbCBiZSBwYXJ0IG9mIHRoZQorZG5sIGxpbmsgbGluZSBhcyB3ZWxsIGFuZCB0aGUgbGlua2VyIHdpbGwgZ2V0IHRoZSBmbGFnIGZyb20gdGhlcmUuCitkbmwgQWRkaW5nIGl0IHRvIExERkxBR1MgZXhwbGljaXRseSB3b3VsZCBkdXBsaWNhdGUgdGhlIGZsYWcgb24gdGhlIGxpbmsgbGluZSwKK2RubCBidXQgb3RoZXJ3aXNlIGRvIG5vIGhhcm0uCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgJHtDQy1jfSBhY2NlcHRzIC1mUElDXSkKK3NhdmVfY2ZsYWdzPSIkQ0ZMQUdTIgorQVNfSUYoW3Rlc3QgIngkQ0ZMQUdTIiA9ICJ4Il0sIFtDRkxBR1M9Ii1mUElDIl0sIFtDRkxBR1M9IiRDRkxBR1MgLWZQSUMiXSkKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbaW50IG1haW4odm9pZCkgeyByZXR1cm4gMDsgfV0pXSwKKyAgW0FTX0lGKFt0ZXN0ICJ4JHN1cHBvcnRlZF9jZmxhZ3MiID0gIngiXSwgW3N1cHBvcnRlZF9jZmxhZ3M9Ii1mUElDIl0sIFtzdXBwb3J0ZWRfY2ZsYWdzPSIkc3VwcG9ydGVkX2NmbGFncyAtZlBJQyJdKQorICAgQUNfTVNHX1JFU1VMVChbeWVzXSldLAorICBbQ0ZMQUdTPSIkc2F2ZV9jZmxhZ3MiCisgICBBQ19NU0dfUkVTVUxUKFtub10pXSkKKworaWYgdGVzdCAiJEVNUFRZX0NGTEFHUyIgPSAieWVzIjsgdGhlbgorICBmb3IgZiBpbiAtV2FsbCAtcGVkYW50aWMgLVdzdHJpY3QtcHJvdG90eXBlczsgZG8KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgJHtDQy1jfSBhY2NlcHRzICRmXSkKKyAgICBzYXZlX2NmbGFncz0iJENGTEFHUyIKKyAgICBBU19JRihbdGVzdCAieCRDRkxBR1MiID0gIngiXSwgW0NGTEFHUz0iJGYiXSwgW0NGTEFHUz0iJENGTEFHUyAkZiJdKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbaW50IG1haW4odm9pZCkgeyByZXR1cm4gMDsgfV0pXSwKKyAgICAgIFtBU19JRihbdGVzdCAieCRzdXBwb3J0ZWRfY2ZsYWdzIiA9ICJ4Il0sIFtzdXBwb3J0ZWRfY2ZsYWdzPSIkZiJdLCBbc3VwcG9ydGVkX2NmbGFncz0iJHN1cHBvcnRlZF9jZmxhZ3MgJGYiXSkKKyAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKV0sCisgICAgICBbQ0ZMQUdTPSIkc2F2ZV9jZmxhZ3MiCisgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKV0pCisgIGRvbmUKKworICBPT1BUPSIiCisgIGZvciBmIGluIC1PNCAtTzM7IGRvCisgICAgaWYgdGVzdCAieCRPT1BUIiA9ICJ4IjsgdGhlbgorICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyICR7Q0MtY30gYWNjZXB0cyAkZl0pCisgICAgICBzYXZlX2NmbGFncz0iJENGTEFHUyIKKyAgICAgIEFTX0lGKFt0ZXN0ICJ4JENGTEFHUyIgPSAieCJdLCBbQ0ZMQUdTPSIkZiJdLCBbQ0ZMQUdTPSIkQ0ZMQUdTICRmIl0pCisgICAgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW2ludCBtYWluKHZvaWQpIHsgcmV0dXJuIDA7IH1dKV0sCisgICAgICAgIFtBU19JRihbdGVzdCAieCRzdXBwb3J0ZWRfY2ZsYWdzIiA9ICJ4Il0sIFtzdXBwb3J0ZWRfY2ZsYWdzPSIkZiJdLCBbc3VwcG9ydGVkX2NmbGFncz0iJHN1cHBvcnRlZF9jZmxhZ3MgJGYiXSkKKyAgICAgICAgIE9PUFQ9IiRmIgorICAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSldLAorICAgICAgICBbQ0ZMQUdTPSIkc2F2ZV9jZmxhZ3MiCisgICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pXSkKKyAgICBmaQorICBkb25lCisKKyAgZm9yIGYgaW4gLWZleHBlbnNpdmUtb3B0aW1pemF0aW9ucyAtZnVucm9sbC1sb29wczsgZG8KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgJHtDQy1jfSBhY2NlcHRzICRmXSkKKyAgICBzYXZlX2NmbGFncz0iJENGTEFHUyIKKyAgICBBU19JRihbdGVzdCAieCRDRkxBR1MiID0gIngiXSwgW0NGTEFHUz0iJGYiXSwgW0NGTEFHUz0iJENGTEFHUyAkZiJdKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbaW50IG1haW4odm9pZCkgeyByZXR1cm4gMDsgfV0pXSwKKyAgICAgIFtBU19JRihbdGVzdCAieCRzdXBwb3J0ZWRfY2ZsYWdzIiA9ICJ4Il0sIFtzdXBwb3J0ZWRfY2ZsYWdzPSIkZiJdLCBbc3VwcG9ydGVkX2NmbGFncz0iJHN1cHBvcnRlZF9jZmxhZ3MgJGYiXSkKKyAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKV0sCisgICAgICBbQ0ZMQUdTPSIkc2F2ZV9jZmxhZ3MiCisgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKV0pCisgIGRvbmUKK2ZpCisKK2RubCBXaGVuIHR1cm5pbmcgb2ZmIHdhcm5pZ25zLCB3ZSdyZSBleHBlY3RpbmcgdW5yZWNvZ25pemVkIGNvbW1hbmQgbGluZSBvcHRpb24gZXJyb3JzIGlmIHRoZXkncmUgbm90Citkbmwgc3VwcG9ydGVkLiBIb3dldmVyLCB0aGUgLVduby08d2FybmluZz4gZm9ybSBpc24ndCBjb25zdWx0ZWQgdW5sZXNzIGEgd2FybmluZyBpcyB0cmlnZ2VyZWQuCitkbmwgQXQgbGVhc3QgdGhhdCdzIHRoZSBjYXNlIGZvciBHQ0MuIFNvIHRvIGNoZWNrIHdoaWNoIHdhcm5pbmdzIHdlIGNhbiB0dXJuIG9mZiwgd2UgbmVlZCB0byBjaGVjaworZG5sIGlmIHRoZXkgY2FuIGJlIHR1cm5lZCBvbiwgdGhlcmVieSBmb3JjaW5nIEdDQyB0byB0YWtlIHRoZSBhcmd1bWVudCBpbnRvIGFjY291bnQgcmlnaHQgYXdheS4KK2ZvciBmIGluIC1Xbm8tbGFuZ3VhZ2UtZXh0ZW5zaW9uLXRva2VuOyBkbworICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgJHtDQy1jfSBhY2NlcHRzICRmXSkKKyAgc2F2ZV9jZmxhZ3M9IiRDRkxBR1MiCisgIHRlc3RmPSQoZWNobyAiJGYiIHwgJFNFRCAnc3wtV25vLVwoLipcKXwtV1wxfGcnKQorICBBU19JRihbdGVzdCAieCRDRkxBR1MiID0gIngiXSwgW0NGTEFHUz0iJHRlc3RmIl0sIFtDRkxBR1M9IiRDRkxBR1MgJHRlc3RmIl0pCisgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbaW50IG1haW4odm9pZCkgeyByZXR1cm4gMDsgfV0pXSwKKyAgICBbQVNfSUYoW3Rlc3QgIngkc3VwcG9ydGVkX2NmbGFncyIgPSAieCJdLCBbc3VwcG9ydGVkX2NmbGFncz0iJGYiXSwgW3N1cHBvcnRlZF9jZmxhZ3M9IiRzdXBwb3J0ZWRfY2ZsYWdzICRmIl0pCisgICAgIEFDX01TR19SRVNVTFQoW3llc10pXSwKKyAgICBbQ0ZMQUdTPSIkc2F2ZV9jZmxhZ3MiCisgICAgIEFDX01TR19SRVNVTFQoW25vXSldKQorZG9uZQorCitkbmwgUmVtb3dpbmcgLVdlcnJvciBhZ2FpbgorQ0ZMQUdTPSIkc3VwcG9ydGVkX2NmbGFncyIKKworZG5sIENoZWNrcyBmb3IgaGVhZGVyIGZpbGVzLgorQUNfSEVBREVSX1NUREMKK0FDX0NIRUNLX0hFQURFUlMoCisgICAgW3VuaXN0ZC5oIGJ5dGVzd2FwLmggc3RkaW50Lmggc3lzL3Vpby5oIGludHR5cGVzLmggc3lzL3R5cGVzLmggbWFjaGluZS90eXBlcy5oIHN5cy9pbnRfdHlwZXMuaF0sCisgICAgW10sIFtdLCBbQUNfSU5DTFVERVNfREVGQVVMVF0pCisKK2RubCBzb2NrZXQoKSBhbmQgZnJpZW5kcworQUNfQ0hFQ0tfSEVBREVSUyhbc3lzL3NvY2tldC5oIG5ldGluZXQvaW4uaCBhcnBhL2luZXQuaF0sIFtdLCBbXSwgW0FDX0lOQ0xVREVTX0RFRkFVTFRdKQorQUNfQ0hFQ0tfSEVBREVSUygKKyAgICBbd2luZG93cy5oXSwKKyAgICBbQUNfQ0hFQ0tfSEVBREVSUyhbd2luc29jazIuaF0sIFtdLCBbXSwgW0FDX0lOQ0xVREVTX0RFRkFVTFRdKV0sCisgICAgW10sIFtBQ19JTkNMVURFU19ERUZBVUxUXSkKKworQUNfQ0hFQ0tfVFlQRVMoW2ludDhfdCwgdWludDhfdCwgaW50MTZfdCwgdWludDE2X3QsIGludDMyX3QsIHVpbnQzMl90LCB1aW50NjRfdF0pCitBQ19DSEVDS19TSVpFT0YoW3Vuc2lnbmVkIGxvbmddKQorQUNfQ0hFQ0tfU0laRU9GKFt1bnNpZ25lZCBsb25nIGxvbmddKQorCitkbmwgQ2hlY2tzIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcy4KK0FDX0NfQ09OU1QKK0FDX0NfSU5MSU5FCitBQ19UWVBFX1NJWkVfVAorCitkbmwgQ2hlY2tzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucy4KK0FDX0NIRUNLX0ZVTkNTKFtzb2NrZXQgaW5ldF9hdG9uIHVzbGVlcCBzaWdhY3Rpb25dKQorCitkbmwgRmluZCBzb2NrZXQgZnVuY3Rpb24gaWYgbm90IGZvdW5kIHlldC4KK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19zb2NrZXQiID0gInhubyI7IHRoZW4KKyAgQUNfQ0hFQ0tfTElCKFtzb2NrZXRdLCBbc29ja2V0XSkKKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igc29ja2V0IGluIC1sd3NvY2szMl0pCisgIFNBVkVMSUJTPSIkTElCUyIKKyAgTElCUz0iJExJQlMgLWx3c29jazMyIgorICBBQ19MSU5LX0lGRUxTRSgKKyAgICBbQUNfTEFOR19TT1VSQ0UoWworI2luY2x1ZGUgPHdpbnNvY2syLmg+CitpbnQgbWFpbih2b2lkKQoreworICAgIGludCBmZCA9IHNvY2tldCgwLCAwLCAwKTsKKyAgICBpZiAoZmQgPCAwKQorICAgICAgcmV0dXJuIC0xOworICAgIGVsc2UKKyAgICAgIHJldHVybiAwOworfQorICAgIF0pXSwKKyAgICBbYWNfY3ZfZnVuY19zb2NrZXQ9eWVzCisgICAgIEFDX01TR19SRVNVTFQoW3llc10pXSwKKyAgICBbTElCUz0iJFNBVkVMSUJTIgorICAgICBBQ19NU0dfUkVTVUxUKFtub10pXSkKK2ZpCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgZGVidWcgbG9nZ2luZyBpbiBhbGwgbW9kdWxlc10pCitBQ19BUkdfRU5BQkxFKFtkZWJ1Zy1sb2dnaW5nXSwKKyAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1kZWJ1Zy1sb2dnaW5nXSwgW0VuYWJsZSBkZWJ1ZyBsb2dnaW5nIGluIGFsbCBtb2R1bGVzXSldLAorICBbXSwgZW5hYmxlX2RlYnVnX2xvZ2dpbmc9bm8pCitpZiB0ZXN0ICIkZW5hYmxlX2RlYnVnX2xvZ2dpbmciID0gInllcyI7IHRoZW4KKyAgIEFDX0RFRklORShbRU5BQkxFX0RFQlVHX0xPR0dJTkddLCBbMV0sIFtEZWZpbmUgdG8gZW5hYmxlZCBkZWJ1ZyBsb2dnaW5nIGZvciBhbGwgbXVkdWxlcy5dKQorZmkKK0FDX01TR19SRVNVTFQoWyRlbmFibGVfZGVidWdfbG9nZ2luZ10pCisKK1BLR19QUk9HX1BLR19DT05GSUcKK0FTX0lGKFt0ZXN0ICJ4JFBLR19DT05GSUciICE9ICJ4Il0sIFtQS0dfQ09ORklHPSIkUEtHX0NPTkZJRyAtLXN0YXRpYyJdKQorCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gbGV2ZXJhZ2UgT3BlblNTTCBjcnlwdG9dKQorQUNfQVJHX0VOQUJMRShbb3BlbnNzbF0sCisgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtb3BlbnNzbF0sIFtjb21waWxlIGluIE9wZW5TU0wgY3J5cHRvIGVuZ2luZV0pXSwKKyAgW10sIFtlbmFibGVfb3BlbnNzbD1ub10pCitBQ19NU0dfUkVTVUxUKFskZW5hYmxlX29wZW5zc2xdKQorCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gbGV2ZXJhZ2UgTlNTIGNyeXB0b10pCitBQ19BUkdfRU5BQkxFKFtuc3NdLAorICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLW5zc10sIFtjb21waWxlIGluIE5TUyBjcnlwdG8gZW5naW5lXSldLAorICBbXSwgW2VuYWJsZV9uc3M9bm9dKQorQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9uc3NdKQorCitpZiB0ZXN0ICIkZW5hYmxlX29wZW5zc2wiID0gInllcyI7IHRoZW4KKyAgIEFDX01TR19DSEVDS0lORyhbZm9yIHVzZXIgc3BlY2lmaWVkIE9wZW5TU0wgZGlyZWN0b3J5XSkKKyAgIEFDX0FSR19XSVRIKFtvcGVuc3NsLWRpcl0sCisgICAgICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1vcGVuc3NsLWRpcl0sIFtMb2NhdGlvbiBvZiBPcGVuU1NMIGluc3RhbGxhdGlvbl0pXSwKKyAgICAgIFtpZiB0ZXN0ICJ4JFBLR19DT05GSUciICE9ICJ4IiAmJiB0ZXN0IC1mICR3aXRoX29wZW5zc2xfZGlyL2xpYi9wa2djb25maWcvbGliY3J5cHRvLnBjOyB0aGVuCisgICAgICAgICBpZiB0ZXN0ICJ4JFBLR19DT05GSUdfUEFUSCIgPSAieCI7IHRoZW4KKyAgICAgICAgICAgZXhwb3J0IFBLR19DT05GSUdfUEFUSD0iJHdpdGhfb3BlbnNzbF9kaXIvbGliL3BrZ2NvbmZpZyIKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgZXhwb3J0IFBLR19DT05GSUdfUEFUSD0iJHdpdGhfb3BlbnNzbF9kaXIvbGliL3BrZ2NvbmZpZzokUEtHX0NPTkZJR19QQVRIIgorICAgICAgICAgZmkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoWyR3aXRoX29wZW5zc2xfZGlyXSkKKyAgICAgICBlbGlmIHRlc3QgLWQgJHdpdGhfb3BlbnNzbF9kaXIvbGliOyB0aGVuCisgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLUkkd2l0aF9vcGVuc3NsX2Rpci9pbmNsdWRlIgorICAgICAgICAgaWYgdGVzdCAieCRMREZMQUdTIiA9ICJ4IjsgdGhlbgorICAgICAgICAgICBMREZMQUdTPSItTCR3aXRoX29wZW5zc2xfZGlyL2xpYiIKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgTERGTEFHUz0iJExERkxBR1MgLUwkd2l0aF9vcGVuc3NsX2Rpci9saWIiCisgICAgICAgICBmaQorICAgICAgICAgQUNfTVNHX1JFU1VMVChbJHdpdGhfb3BlbnNzbF9kaXJdKQorICAgICAgIGVsc2UKKyAgICAgICAgIEFDX01TR19SRVNVTFQoW2ludmFsaWRdKQorICAgICAgICAgQUNfTVNHX0ZBSUxVUkUoW0ludmFsaWQgT3BlblNTTCBsb2NhdGlvbjogJHdpdGhfb3BlbnNzbF9kaXJdKQorICAgICAgIGZpXSwKKyAgICAgIFtBQ19NU0dfUkVTVUxUKFtub10pXSkKKworICAgaWYgdGVzdCAieCRQS0dfQ09ORklHIiAhPSAieCI7IHRoZW4KKyAgICAgUEtHX0NIRUNLX01PRFVMRVMoW2NyeXB0b10sIFtsaWJjcnlwdG8gPj0gMS4wLjFdLAorICAgICAgIFtDRkxBR1M9IiRDRkxBR1MgJGNyeXB0b19DRkxBR1MiCisgICAgICAgIExJQlM9IiRjcnlwdG9fTElCUyAkTElCUyJdKQorICAgZWxzZQorICAgICBBQ19DSEVDS19MSUIoW2RsXSwgW2Rsb3Blbl0sIFtdLCBbQUNfTVNHX1dBUk4oW2Nhbid0IGZpbmQgbGliZGxdKV0pCisgICAgIEFDX0NIRUNLX0xJQihbel0sIFtpbmZsYXRlXSwgW10sIFtBQ19NU0dfV0FSTihbY2FuJ3QgZmluZCBsaWJ6XSldKQorICAgZmkKKworICAgQUNfU0VBUkNIX0xJQlMoW0VWUF9FbmNyeXB0SW5pdF0sIFtjcnlwdG9dLAorICAgICBbXSwgW0FDX01TR19GQUlMVVJFKFtjYW4ndCBmaW5kIG9wZW5zc2wgPj0gMS4wLjEgY3J5cHRvIGxpYl0pXSkKKyAgIEFDX1NFQVJDSF9MSUJTKFtFVlBfYWVzXzEyOF9jdHJdLCBbY3J5cHRvXSwKKyAgICAgW10sIFtBQ19NU0dfRkFJTFVSRShbY2FuJ3QgZmluZCBvcGVuc3NsID49IDEuMC4xIGNyeXB0byBsaWJdKV0pCisgICBBQ19TRUFSQ0hfTElCUyhbRVZQX2Flc18xMjhfZ2NtXSwgW2NyeXB0b10sCisgICAgIFtdLCBbQUNfTVNHX0ZBSUxVUkUoW2Nhbid0IGZpbmQgb3BlbnNzbCA+PSAxLjAuMSBjcnlwdG8gbGliXSldKQorCisgICBBQ19ERUZJTkUoW0dDTV0sIFsxXSwgW0RlZmluZSB0aGlzIHRvIHVzZSBBRVMtR0NNLl0pCisgICBBQ19ERUZJTkUoW09QRU5TU0xdLCBbMV0sIFtEZWZpbmUgdGhpcyB0byB1c2UgT3BlblNTTCBjcnlwdG8uXSkKKyAgIEFFU19JQ01fT0JKUz0iY3J5cHRvL2NpcGhlci9hZXNfaWNtX29zc2wubyBjcnlwdG8vY2lwaGVyL2Flc19nY21fb3NzbC5vIgorICAgSE1BQ19PQkpTPWNyeXB0by9oYXNoL2htYWNfb3NzbC5vCisgICBBQ19TVUJTVChbVVNFX0VYVEVSTkFMX0NSWVBUT10sIFsxXSkKKworICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBPUEVOU1NMX2NsZWFuc2UgaXMgYnJva2VuXSkKKyAgIEFDX1JVTl9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbCisgICAgICNpbmNsdWRlIDxzdGRpby5oPgorICAgICAjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKyAgIF0sIFsKKyAgICAgI2RlZmluZSBCVUZGRVJfU0laRSAoMTYpCisgICAgIGNoYXIgYnVmZmVyW1tCVUZGRVJfU0laRV1dOworICAgICBpbnQgaTsKKyAgICAgZm9yIChpID0gMDsgaSA8IEJVRkZFUl9TSVpFOyBpKyspIHsKKyAgICAgICBidWZmZXJbW2ldXSA9IGkgJiAweGZmOworICAgICB9CisgICAgIE9QRU5TU0xfY2xlYW5zZShidWZmZXIsIEJVRkZFUl9TSVpFKTsKKyAgICAgZm9yIChpID0gMDsgaSA8IEJVRkZFUl9TSVpFOyBpKyspIHsKKyAgICAgICBpZiAoYnVmZmVyW1tpXV0pIHsKKyAgICAgICAgIHByaW50ZigiQnVmZmVyIGNvbnRlbnRzIG5vdCB6ZXJvIGF0IHBvc2l0aW9uICVkIChpcyAlZClcbiIsIGksCisgICAgICAgICAgICAgYnVmZmVyW1tpXV0pOworICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgfQorICAgICB9CisgICBdKV0sIFtvcGVuc3NsX2NsZWFuc2VfYnJva2VuPW5vXSwgWworICAgICBvcGVuc3NsX2NsZWFuc2VfYnJva2VuPXllcworICAgICBBQ19ERUZJTkUoW09QRU5TU0xfQ0xFQU5TRV9CUk9LRU5dLCBbMV0sIFtEZWZpbmUgdGhpcyBpZiBPUEVOU1NMX2NsZWFuc2UgaXMgYnJva2VuLl0pCisgICBdKQorICAgQUNfTVNHX1JFU1VMVChbJG9wZW5zc2xfY2xlYW5zZV9icm9rZW5dKQorCisgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gbGV2ZXJhZ2UgT3BlblNTTCBLREYgYWxnb3JpdGhtXSkKKyAgIEFDX0FSR19FTkFCTEUoW29wZW5zc2wta2RmXSwKKyAgICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtb3BlbnNzbC1rZGZdLCBbVXNlIE9wZW5TU0wgS0RGIGFsZ29yaXRobV0pXSwKKyAgICAgIFtdLCBbZW5hYmxlX29wZW5zc2xfa2RmPW5vXSkKKyAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfb3BlbnNzbF9rZGZdKQorICAgaWYgdGVzdCAiJGVuYWJsZV9vcGVuc3NsX2tkZiIgPSAieWVzIjsgdGhlbgorICAgICBBQ19TRUFSQ0hfTElCUyhba2RmX3NydHBdLCBbY3J5cHRvXSwKKyAgICAgICBbXSwgW0FDX01TR19GQUlMVVJFKFtjYW4ndCBmaW5kIG9wZW5zc2wgS0RGIGxpYl0pXSkKKyAgICAgQUNfREVGSU5FKFtPUEVOU1NMX0tERl0sIFsxXSwgW0RlZmluZSB0aGlzIHRvIHVzZSBPcGVuU1NMIEtERiBmb3IgU1JUUC5dKQorICAgZmkKK2VsaWYgdGVzdCAiJGVuYWJsZV9uc3MiID0gInllcyI7IHRoZW4KKyAgIEFDX01TR19DSEVDS0lORyhbZm9yIHVzZXIgc3BlY2lmaWVkIE5TUyBkaXJlY3RvcnldKQorICAgQUNfQVJHX1dJVEgoW25zcy1kaXJdLAorICAgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtbnNzLWRpcl0sIFtMb2NhdGlvbiBvZiBOU1MgaW5zdGFsbGF0aW9uXSldLAorICAgICAgW2lmIHRlc3QgIngkUEtHX0NPTkZJRyIgIT0gIngiICYmIHRlc3QgLWYgJHdpdGhfbnNzX2Rpci9saWIvcGtnY29uZmlnL25zcy5wYzsgdGhlbgorICAgICAgICAgaWYgdGVzdCAieCRQS0dfQ09ORklHX1BBVEgiID0gIngiOyB0aGVuCisgICAgICAgICAgIGV4cG9ydCBQS0dfQ09ORklHX1BBVEg9IiR3aXRoX25zc19kaXIvbGliL3BrZ2NvbmZpZyIKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgZXhwb3J0IFBLR19DT05GSUdfUEFUSD0iJHdpdGhfbnNzX2Rpci9saWIvcGtnY29uZmlnOiRQS0dfQ09ORklHX1BBVEgiCisgICAgICAgICBmaQorICAgICAgICAgQUNfTVNHX1JFU1VMVChbJHdpdGhfbnNzX2Rpcl0pCisgICAgICAgZWxpZiB0ZXN0IC1kICR3aXRoX25zc19kaXIvbGliOyB0aGVuCisgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLUkkd2l0aF9uc3NfZGlyL2luY2x1ZGUiCisgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLUkkd2l0aF9uc3NfZGlyLy4uL3B1YmxpYy9uc3MiCisgICAgICAgICBpZiB0ZXN0ICJ4JExERkxBR1MiID0gIngiOyB0aGVuCisgICAgICAgICAgIExERkxBR1M9Ii1MJHdpdGhfbnNzX2Rpci9saWIiCisgICAgICAgICBlbHNlCisgICAgICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1MJHdpdGhfbnNzX2Rpci9saWIiCisgICAgICAgICBmaQorICAgICAgICAgbnNzX3NraXBfcGtnX2NvbmZpZz15ZXMKKyAgICAgICAgIEFDX01TR19SRVNVTFQoWyR3aXRoX25zc19kaXJdKQorICAgICAgIGVsc2UKKyAgICAgICAgIEFDX01TR19SRVNVTFQoW2ludmFsaWRdKQorICAgICAgICAgQUNfTVNHX0ZBSUxVUkUoW0ludmFsaWQgTlNTIGxvY2F0aW9uOiAkd2l0aF9uc3NfZGlyXSkKKyAgICAgICBmaQorICAgICAgIEFDX1NVQlNUKFtDUllQVE9fTElCRElSXSwgWyR3aXRoX25zc19kaXIvbGliXSldLAorICAgICAgW0FDX01TR19SRVNVTFQoW25vXSldKQorCisgICBpZiB0ZXN0ICJ4JFBLR19DT05GSUciICE9ICJ4IiAmJiB0ZXN0ICIkbnNzX3NraXBfcGtnX2NvbmZpZyIgIT0gInllcyI7IHRoZW4KKyAgICAgUEtHX0NIRUNLX01PRFVMRVMoW25zc10sIFtuc3NdLAorICAgICAgIFtDRkxBR1M9IiRDRkxBR1MgJG5zc19DRkxBR1MiCisgICAgICAgICBMSUJTPSIkbnNzX0xJQlMgJExJQlMiXSkKKyAgIGVsc2UKKyAgICAgQUNfQ0hFQ0tfSEVBREVSUygKKyAgICAgICBbbnNzLmhdLAorICAgICAgIFtdLCBbQUNfTVNHX0ZBSUxVUkUoW2Nhbid0IGZpbmQgdXNlYWJsZSBOU1MgaGVhZGVyc10pXSwKKyAgICAgICBbQUNfSU5DTFVERVNfREVGQVVMVF0pCisgICAgIEFDX0NIRUNLX0xJQigKKyAgICAgICBbbnNwcjRdLCBbUFJfR2V0RXJyb3JdLAorICAgICAgIFtdLCBbQUNfTVNHX1dBUk4oW2Nhbid0IGZpbmQgbGlibnNwcjRdKV0pCisgICAgIEFDX0NIRUNLX0xJQigKKyAgICAgICBbbnNzM10sIFtOU1NfTm9EQl9Jbml0XSwKKyAgICAgICBbXSwgW0FDX01TR19GQUlMVVJFKFtjYW4ndCBmaW5kIHVzZWFibGUgbGlibnNzM10pXSkKKyAgIGZpCisKKyAgIEFDX0RFRklORShbR0NNXSwgWzFdLCBbRGVmaW5lIHRoaXMgdG8gdXNlIEFFUy1HQ00uXSkKKyAgIEFDX0RFRklORShbTlNTXSwgWzFdLCBbRGVmaW5lIHRoaXMgdG8gdXNlIE5TUyBjcnlwdG8uXSkKKyAgIEFFU19JQ01fT0JKUz0iY3J5cHRvL2NpcGhlci9hZXNfaWNtX25zcy5vIGNyeXB0by9jaXBoZXIvYWVzX2djbV9uc3MubyIKKworICAgIyBUT0RPKFJMQik6IFVzZSBOU1MgZm9yIEhNQUMKKyAgIEhNQUNfT0JKUz0iY3J5cHRvL2hhc2gvaG1hYy5vIGNyeXB0by9oYXNoL3NoYTEubyIKKworICAgIyBUT0RPKFJMQik6IFVzZSBOU1MgZm9yIEtERgorCisgICBBQ19TVUJTVChbVVNFX0VYVEVSTkFMX0NSWVBUT10sIFsxXSkKK2Vsc2UKKyAgIEFFU19JQ01fT0JKUz0iY3J5cHRvL2NpcGhlci9hZXNfaWNtLm8gY3J5cHRvL2NpcGhlci9hZXMubyIKKyAgIEhNQUNfT0JKUz0iY3J5cHRvL2hhc2gvaG1hYy5vIGNyeXB0by9oYXNoL3NoYTEubyIKK2ZpCitBQ19TVUJTVChbQUVTX0lDTV9PQkpTXSkKK0FDX1NVQlNUKFtITUFDX09CSlNdKQorCitkbmwgQ2hlY2tpbmcgZm9yIFBDQVAKKworUENBUF9MSUI9IiIKK0FDX0NIRUNLX0xJQihbcGNhcF0sIFtwY2FwX2NyZWF0ZV0sCisgIFtQQ0FQX0xJQj0iLWxwY2FwIgorICAgQUNfREVGSU5FKFtIQVZFX1BDQVBdLCBbMV0sIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBjYXAnIGxpYnJhcnkgKC1scGNhcCldKQorICAgQUNfU1VCU1QoW0hBVkVfUENBUF0sIFsxXSldKQorICAgCitBQ19DSEVDS19MSUIoW3dwY2FwXSwgW3BjYXBfY3JlYXRlXSwKKyAgW1BDQVBfTElCPSItbHdwY2FwIgorICAgQUNfREVGSU5FKFtIQVZFX1BDQVBdLCBbMV0sIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHdpbnBjYXAnIGxpYnJhcnkgKC1sd3BjYXApXSkKKyAgIEFDX1NVQlNUKFtIQVZFX1BDQVBdLCBbMV0pXSkKK0FDX1NVQlNUKFtQQ0FQX0xJQl0pCisgICAKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byByZWRpcmVjdCBsb2dnaW5nIHRvIHN0ZG91dF0pCitBQ19BUkdfRU5BQkxFKFtsb2ctc3Rkb3V0XSwKKyAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1sb2ctc3Rkb3V0XSwgW3JlZGlyZWN0aW5nIGxvZ2dpbmcgdG8gc3Rkb3V0XSldLAorICBbXSwgW2VuYWJsZV9sb2dfc3Rkb3V0PW5vXSkKK2lmIHRlc3QgIiRlbmFibGVfbG9nX3N0ZG91dCIgPSAieWVzIjsgdGhlbgorICAgQUNfREVGSU5FKFtFUlJfUkVQT1JUSU5HX1NURE9VVF0sIFsxXSwgW0RlZmluZSB0byByZWRpcmVjdCBsb2dnaW5nIHRvIHN0ZG91dC5dKQorZmkKK0FDX01TR19SRVNVTFQoWyRlbmFibGVfbG9nX3N0ZG91dF0pCisKK0FDX01TR19DSEVDS0lORyhbd2hlYXRoZXIgdG8gdXNlIGEgZmlsZSBmb3IgbG9nZ2luZ10pCitBQ19BUkdfV0lUSChbbG9nLWZpbGVdLAorICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1sb2ctZmlsZV0sIFtVc2UgZmlsZSBmb3IgbG9nZ2luZ10pXSwKKyAgW0FTX0NBU0UoW3gkd2l0aF9sb2dfZmlsZV0sCisgICAgIFt4XSwgW3ZhbGlkX3dpdGhfbG9nX2ZpbGU9Im5vIl0sCisgICAgIFt4eWVzXSwgW3ZhbGlkX3dpdGhfbG9nX2ZpbGU9Im5vIl0sCisgICAgIFt2YWxpZF93aXRoX2Vycm9yX2ZpbGU9InllcyJdKQorICAgQVNfSUYoW3Rlc3QgIiR2YWxpZF93aXRoX2xvZ19maWxlIiA9ICJubyJdLAorICAgICBbQUNfTVNHX1JFU1VMVChbaW52YWxpZF0pCisgICAgICBBQ19NU0dfRkFJTFVSRShbSW52YWxpZCB2YWx1ZSBmb3IgLS13aXRoLWxvZy1maWxlOiAiJHdpdGhfbG9nX2ZpbGUiXSldLAorICAgICBbQUNfREVGSU5FX1VOUVVPVEVEKFtFUlJfUkVQT1JUSU5HX0ZJTEVdLCBbIiR3aXRoX2xvZ19maWxlIl0sIFtMb2dnaW5nIHN0YXRtZW50cyB3aWxsIGJlIHdyaXRlbiB0byB0aGlzIGZpbGUuXSkKKyAgICAgIEFDX01TR19SRVNVTFQoW3VzaW5nIGxvZyBmaWxlOiAiJHdpdGhfbG9nX2ZpbGUiXSldKV0sCisgIFtBQ19NU0dfUkVTVUxUKFtub10pXSkKKworQVNfSUYoCisgIFt0ZXN0ICIkZW5hYmxlX2xvZ19zdGRvdXQiID0gInllcyIgJiYgdGVzdCAieCR3aXRoX2xvZ19maWxlIiAhPSAieCJdLAorICBbQUNfTVNHX0ZBSUxVUkUoW0NhbiBvbmx5IHVzZSBvbmUgb2YgLS1lbmFibGUtbG9nLXN0ZG91dCBhbmQgLS13aXRoLWxvZy1maWxlOyB0aGV5IGFyZSBtdXR1YWxseSBleGNsdXNpdmVdKV0pCisKK2RubCBBcHBlbmRpbmcgRVhUUkFfQ0ZMQUdTLCBpZiBnaXZlbgorQUNfTVNHX0NIRUNLSU5HKFtmb3IgZXh0cmEgQyBjb21waWxlciBmbGFnc10pCitBU19JRihbdGVzdCAieCRFWFRSQV9DRkxBR1MiICE9ICJ4Il0sCisgICBbQVNfSUYoW3Rlc3QgIngkQ0ZMQUdTIiA9ICJ4Il0sCisgICAgICBbQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTIl0sIFtDRkxBR1M9IiRDRkxBR1MgJEVYVFJBX0NGTEFHUyJdKQorICAgIEFDX01TR19SRVNVTFQoWyRFWFRSQV9DRkxBR1NdKV0sCisgICBbQUNfTVNHX1JFU1VMVChubyldKQorCitBQ19DT05GSUdfSEVBREVSKFtjcnlwdG8vaW5jbHVkZS9jb25maWcuaDpjb25maWdfaW4uaF0pCisKK0FDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGUgY3J5cHRvL01ha2VmaWxlIGRvYy9NYWtlZmlsZSBmdXp6ZXIvTWFrZWZpbGUgbGlic3J0cDIucGNdKQorQUNfT1VUUFVUCisKKyMgVGhpcyBpcyBuZWVkZWQgd2hlbiBidWlsZGluZyBvdXRzaWRlIHRoZSBzb3VyY2UgZGlyLgorQVNfTUtESVJfUChbY3J5cHRvL2NpcGhlcl0pCitBU19NS0RJUl9QKFtjcnlwdG8vaGFzaF0pCitBU19NS0RJUl9QKFtjcnlwdG8va2VybmVsXSkKK0FTX01LRElSX1AoW2NyeXB0by9tYXRoXSkKK0FTX01LRElSX1AoW2NyeXB0by9yZXBsYXldKQorQVNfTUtESVJfUChbY3J5cHRvL3Rlc3RdKQorQVNfTUtESVJfUChbZG9jXSkKK0FTX01LRElSX1AoW3NydHBdKQorQVNfTUtESVJfUChbdGVzdF0pCmRpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczMGJjMjMuLjAwMDAwMDAKLS0tIGEvY29uZmlndXJlLmluCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLWRubCBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgotQUNfSU5JVChzcnRwKQotCi1kbmwgQ2hlY2tzIGZvciBwcm9ncmFtcy4KLUFDX1BST0dfUkFOTElCCi1BQ19QUk9HX0NDCi0KLWRubCBDaGVja3MgZm9yIGxpYnJhcmllcy4KLUFDX0NIRUNLX0xJQihzb2NrZXQsIHNvY2tldCkKLUFDX0NIRUNLX0xJQihzcnRwLCBzcnRwX2luaXQpCi0KLQotZG5sIENoZWNrIGZvciAvZGV2L3VyYW5kb20KLUFDX0NIRUNLX0ZJTEUoL2Rldi91cmFuZG9tLCBERVZfVVJBTkRPTT0xLCBERVZfVVJBTkRPTT0wKSAKLWlmIHRlc3QgJERFVl9VUkFORE9NID0gMTsgdGhlbiAKLSAgIEFDX0RFRklORShERVZfVVJBTkRPTSkKLSAgIFJOR19PQkpTPWNyeXB0by9ybmcvcmFuZF9zb3VyY2UuYwotICAgQUNfU1VCU1QoUk5HX09CSlMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi1maQotCi0KLWRubCBDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4KLUFDX0hFQURFUl9TVERDCi1BQ19DSEVDS19IRUFERVJTKHN0ZGxpYi5oKQotQUNfQ0hFQ0tfSEVBREVSUyh1bmlzdGQuaCkKLUFDX0NIRUNLX0hFQURFUlMoc3RkaW50LmgpCi1BQ19DSEVDS19IRUFERVJTKHN5cy91aW8uaCkKLUFDX0NIRUNLX0hFQURFUlMobWFjaGluZS90eXBlcy5oKQotQUNfQ0hFQ0tfSEVBREVSUyhzeXMvaW50X3R5cGVzLmgpCi0KLUFDX0NIRUNLX0hFQURFUlMoc3lzbG9nLmgpCi0KLUFDX0NIRUNLX1RZUEUodWludDE2X3QpCi0KLWRubCBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgotQUNfQ19DT05TVAotQUNfQ19JTkxJTkUKLUFDX1RZUEVfU0laRV9UCi0KLWRubCBDaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zLgotQUNfRlVOQ19NRU1DTVAKLUFDX0NIRUNLX0ZVTkNTKHNvY2tldCBzdHJlcnJvciBpbmV0X2F0b24pCi0KLWRubCBDaGVjayB0aGUgYnl0ZSBvcmRlcgotQUNfQ19CSUdFTkRJQU4KLQotQUNfQ0FOT05JQ0FMX0hPU1QKLQotaWYgdGVzdCAkaG9zdF9jcHUgPSB4ODY7IHRoZW4JCi0gICBlY2hvICJ4ODYgY3B1IGZvdW5kIiAjIHNob3VsZCB1c2UgaW5saW5lIGFzc2VtYmx5Ci1maQotCi1kbmwgY2hlY2sgaG9zdF9jcHUgdHlwZSwgc2V0IGRlZmluZXMgYXBwcm9wcmlhdGVseQotY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgaSo4NiApCi0JQUNfREVGSU5FKENQVV9DSVNDKTs7Ci0JKiApCi0JQUNfREVGSU5FKENQVV9SSVNDKTs7Ci1lc2FjCQotCi1kbmwgQ2hlY2sgaWYgd2UncmUgb24gYSBjeWd3aW4gKEdOVSBvbiBNU1dpbikgcGxhdGZvcm0sIHNldCBIQVZFX01TX1RZUEVTCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLSAgKmN5Z3dpbiogKSAKLQkgICAgICBBQ19ERUZJTkUoSEFWRV9NU19UWVBFUywgMSkKLQkgICAgICBFWEU9LmV4ZTs7Ci0gICAgICAgICAqICkgIEVYRT0iIjs7Ci1lc2FjCi0KLUFDX1NVQlNUKEVYRSkgICAjIGRlZmluZSBleGVjdXRhYmxlIHN1ZmZpeDsgdGhpcyBpcyBuZWVkZWQgZm9yIGBtYWtlIGNsZWFuJwotCi1BQ19BUkdfRU5BQkxFKGRlYnVnLCBkZWJ1ZyAoY29tcGlsZSBpbiBkeW5hbWljIGRlYnVnZ2luZyBzeXN0ZW0pLCBVU0VfREVCVUc9MCwgVVNFX0RFQlVHPTEpCi0KLWlmIHRlc3QgJFVTRV9ERUJVRyA9IDE7IHRoZW4KLSAgIEFDX0RFRklORShFTkFCTEVfREVCVUdHSU5HKQotZmkKLQotQUNfQVJHX0VOQUJMRShnZW5lcmljLWFlc2ljbSwgZ2VuZXJpYy1hZXNpY20gKGNvbXBpbGUgaW4gY2hhbmdlcyBmb3IgaXNtYWNyeXApLCBHRU5FUklDX0FFU0lDTT0wLCBHRU5FUklDX0FFU0lDTT0xKQotCi1pZiB0ZXN0ICRHRU5FUklDX0FFU0lDTSA9IDE7IHRoZW4KLSAgIEFDX0RFRklORShHRU5FUklDX0FFU0lDTSkKLWZpCi0KLUFDX0FSR19FTkFCTEUoc3lzbG9nLCBzeXNsb2cgKHVzZSBzeXNsb2cgZm9yIGVycm9yIHJlcG9ydGluZyksIFVTRV9TWVNMT0c9MSwgVVNFX1NZU0xPRz0wKQotCi1pZiB0ZXN0ICRVU0VfU1lTTE9HID0gMTsgdGhlbgotICAgQUNfREVGSU5FKFVTRV9TWVNMT0cpCi1maQotCi1BQ19BUkdfRU5BQkxFKHN0ZG91dCwgc3Rkb3V0ICh1c2Ugc3Rkb3V0IGZvciBlcnJvciByZXBvcnRpbmcpLCBFUlJfU1RET1VUPTAsIEVSUl9TVERPVVQ9MSkKLQotaWYgdGVzdCAkRVJSX1NURE9VVCA9IDE7IHRoZW4KLSAgIEFDX0RFRklORShFUlJfUkVQT1JUSU5HX1NURE9VVCwgMSkKLWZpCi0KLUFDX0FSR19FTkFCTEUoY29uc29sZSwgY29uc29sZSAodXNlIC9kZXYvY29uc29sZSBmb3IgZXJyb3IgcmVwb3J0aW5nKSwgRVJSX0ZJTEU9MSwgRVJSX0ZJTEU9MCkKLQotaWYgdGVzdCAkRVJSX0ZJTEUgPSAxOyB0aGVuCi0gICBBQ19ERUZJTkUoRVJSX1JFUE9SVElOR19GSUxFLCAiL2Rldi9jb25zb2xlIikKLWZpCi1BQ19BUkdfRU5BQkxFKGdkb2ksIGdkb2kgKEdET0kga2V5IG1hbmFnZW1lbnQpLCBHRE9JPTEsIEdET0k9MCkKLQotaWYgdGVzdCAkR0RPSSA9IDE7IHRoZW4gCi0gICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIEdET0kga2V5IG1hbmFnZW1lbnQpCi0gICBBQ19NU0dfUkVTVUxUKD8pCi0gICBBQ19ERUZJTkUoU1JUUF9HRE9JKQotICAgR0RPSV9PQkpTPWdkb2kvc3J0cCtnZG9pLm8KLSAgIEFDX1NVQlNUKEdET0lfT0JKUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLWZpCi0KLUFDX0NPTkZJR19IRUFERVIoaW5jbHVkZS9jb25maWcuaDpjb25maWdfaW4uaCkKLQotQUNfT1VUUFVUKE1ha2VmaWxlKQotCi0KZGlmZiAtLWdpdCBhL2NyeXB0by9NYWtlZmlsZSBiL2NyeXB0by9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU0MGUzYi4uMDAwMDAwMAotLS0gYS9jcnlwdG8vTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotIyBNYWtlZmlsZSBmb3IgbGliY3J5cHRva2VybmVsLmEKLSMKLSMgRGF2aWQgQS4gTWNHcmV3Ci0jIENpc2NvIFN5c3RlbXMsIEluYy4KLQotQ0ZMQUdTID0gLVdhbGwgLWcKLUlOQ0RJUiA9IC1JLiAtSS4vaW5jbHVkZSAgCi1MSUJTICAgPSAtbGNyeXB0b21vZHVsZQotTElCRElSID0gLUwuIAotCi1pZmRlZiBBUkNICi0gIENERUZTICs9IC1EJChBUkNIKT0xCi1lbmRpZgotCi1pZmRlZiBzeXNuYW1lCi0gIENERUZTICs9IC1EJChzeXNuYW1lKT0xCi1lbmRpZgotCi0uUEhPTlk6IGR1bW15IGFsbCBydW50ZXN0IGNsZWFuIHN1cGVyY2xlYW4KLQotZHVtbXkgOiBhbGwgcnVudGVzdCAKLQotIyBkYXRhIHZhbHVlcyB1c2VkIHRvIHRlc3QgdGhlIGFlc19jYWxjIGFwcGxpY2F0aW9uCi0KLWs9MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYKLXA9MDAxMTIyMzM0NDU1NjY3Nzg4OTlhYWJiY2NkZGVlZmYKLWM9NjljNGUwZDg2YTdiMDQzMGQ4Y2RiNzgwNzBiNGM1NWEKLQotcnVudGVzdDogJCh0ZXN0YXBwKQotCUBlY2hvICJydW5uaW5nIGxpYmNyeXB0b21vZHVsZSB0ZXN0IGFwcGxpY2F0aW9ucy4uLiIKLQl0ZXN0IGB0ZXN0L2Flc19jYWxjICRrICRwYCA9ICRjCi0JdGVzdC9jaXBoZXJfZHJpdmVyIC12ID4vZGV2L251bGwKLQl0ZXN0L2RhdGF0eXBlc19kcml2ZXIgLXYgPi9kZXYvbnVsbAotCXRlc3Qvc3RhdF9kcml2ZXIgPi9kZXYvbnVsbAotCXRlc3Qvc2hhMV9kcml2ZXIgLXYgPi9kZXYvbnVsbAotCXRlc3Qva2VybmVsX2RyaXZlciAtdiA+L2Rldi9udWxsCi0JdGVzdC9yYW5kX2dlbiAtbiAyNTYgPi9kZXYvbnVsbAotCUBlY2hvICJsaWJjcnlwdG9tb2R1bGUgdGVzdCBhcHBsaWNhdGlvbnMgcGFzc2VkLiIKLQotIyBsaWJjcnlwdG9tb2R1bGUuYSAodGhlIGNyeXB0byBlbmdpbmUpIAotCi1jaXBoZXJzID0gY2lwaGVyL2NpcGhlci5vIGNpcGhlci9udWxsX2NpcGhlci5vICAgICAgXAotICAgICAgICAgIGNpcGhlci9hZXMubyBjaXBoZXIvYWVzX2ljbS5vICAgICAgICAgICAgIFwKLSAgICAgICAgICBjaXBoZXIvYWVzX2NiYy5vCi0KLWhhc2hlcyAgPSBoYXNoL251bGxfYXV0aC5vIGhhc2gvc2hhMS5vIFwKLSAgICAgICAgICBoYXNoL2htYWMubyBoYXNoL2F1dGgubwotCi1tYXRoICAgID0gbWF0aC9kYXRhdHlwZXMubyBtYXRoL3N0YXQubwotCi1ybmcgICAgID0gcm5nL3JhbmRfc291cmNlLm8gcm5nL3BybmcubyBybmcvY3RyX3BybmcubwotCi1lcnIgICAgID0ga2VybmVsL2Vyci5vCi0KLWtlcm5lbCAgPSBrZXJuZWwvY3J5cHRvX2tlcm5lbC5vICBrZXJuZWwvYWxsb2MubyAgIFwKLSAgICAgICAgICBrZXJuZWwva2V5Lm8gJChybmcpICQoZXJyKQotCi14Zm0gICAgID0gYWVfeGZtL3hmbS5vCi0KLWNyeXB0b2JqID0gICQoY2lwaGVycykgJChoYXNoZXMpICQobWF0aCkgJChzdGF0KSAkKGtlcm5lbCkgJCh4Zm0pCi0KLSMgdGhlIHJ1bGUgZm9yIG1ha2luZyBvYmplY3QgZmlsZXMgYW5kIHRlc3QgYXBwcwotCi0lLm86ICUuYwotCSQoQ0MpIC1jICQoQ0RFRlMpICQoQ0ZMQUdTKSAkKElOQ0RJUikgJDwgLW8gJEAgCi0KLSU6ICUuYyBsaWJjcnlwdG9tb2R1bGUuYSAKLQkkKENDKSAkKENERUZTKSAkKENGTEFHUykgJChJTkNESVIpICQ8IC1vICRAICQoTElCRElSKSAkKExJQlMpCi0KLWlmbmRlZiBBUgotICBBUj1hcgotZW5kaWYKLQotaWZuZGVmIFJBTkxJQgotICBSQU5MSUI9cmFubGliCi1lbmRpZgotCi0jIGFuZCB0aGUgY3J5cHRvIG1vZHVsZSBsaWJyYXJ5IGl0c2VsZgotCi1saWJjcnlwdG9tb2R1bGUuYTogJChjcnlwdG9iaikgCi0JJChBUikgY3IgbGliY3J5cHRvbW9kdWxlLmEgJChjcnlwdG9iaikgCi0JJChSQU5MSUIpIGxpYmNyeXB0b21vZHVsZS5hCi0KLSMgdGVzdCBhcHBsaWNhdGlvbnMgCi0KLXRlc3RhcHAgPSB0ZXN0L2NpcGhlcl9kcml2ZXIgdGVzdC9kYXRhdHlwZXNfZHJpdmVyIFwKLSAgICAgICAgICB0ZXN0L3N0YXRfZHJpdmVyIHRlc3Qvc2hhMV9kcml2ZXIgdGVzdC9rZXJuZWxfZHJpdmVyICAgICAgXAotICAgICAgICAgIHRlc3QvYWVzX2NhbGMgdGVzdC9yYW5kX2dlbiAKLQotYWxsOiBsaWJjcnlwdG9tb2R1bGUuYSAkKHRlc3RhcHApCi0KLXRlc3Q6IGxpYmNyeXB0b21vZHVsZS5hICQodGVzdGFwcCkKLQlAZWNobyAicnVubmluZyBsaWJjcnlwdG9tb2R1bGUgdGVzdCBhcHBsaWNhdGlvbnMuLi4iCi0JdGVzdC9rZXJuZWxfZHJpdmVyJChFWEUpIC12ID4vZGV2L251bGwKLQl0ZXN0L2NpcGhlcl9kcml2ZXIkKEVYRSkgLXYgPi9kZXYvbnVsbAotCUBlY2hvICJsaWJjcnlwdG9tb2R1bGUgdGVzdCBhcHBsaWNhdGlvbnMgcGFzc2VkLiIgCi0KLSMgaG91c2VrZWVwaW5nIGZ1bmN0aW9ucwotCi1jbGVhbjoKLQlybSAtZiBsaWJjcnlwdG9tb2R1bGUuYQotCXJtIC1mICQodGVzdGFwcCkgKi5vICovKi5vIAotCWZvciBhIGluICogLiogKi8qOyBkbyBpZiBbIC1mICIkJGF+IiBdIDsgdGhlbiBybSAkJGF+OyBmaTsgZG9uZTsKLQlybSAtZiBgZmluZCAuIC1uYW1lICIqLltjaF1+Kn4iYAotCXJtIC1yZiBsYXRleAotCi1zdXBlcmNsZWFuOiBjbGVhbgotCXJtIC1mICpjb3JlIFRBR1Mga3RyYWNlLm91dAotCi0KLSMgdGhlIHRhcmdldCAncGFja2FnZScgYnVpbGRzIGEgY29tcHJlc3NlZCB0YXIgYXJjaGl2ZSBvZiB0aGUgc291cmNlIGNvZGUKLQotZGlzdG5hbWUgPSBjcnlwdG8tJChzaGVsbCBjYXQgVkVSU0lPTikKLQotcGFja2FnZTogc3VwZXJjbGVhbgotCWNkIC4uOyB0YXIgY3Z6ZiAkKGRpc3RuYW1lKS50Z3ogY3J5cHRvLwotCi0KLSMgRU9GCmRpZmYgLS1naXQgYS9jcnlwdG8vTWFrZWZpbGUuaW4gYi9jcnlwdG8vTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRmMjlhZAotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDExOSBAQAorIyBNYWtlZmlsZSBmb3IgY3J5cHRvIHRlc3Qgc3VpdGUKKyMKKyMgRGF2aWQgQS4gTWNHcmV3CisjIENpc2NvIFN5c3RlbXMsIEluYy4KKworc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACitWUEFUSCA9IEBzcmNkaXJACisKK0NDCT0gQENDQAorSU5DRElSCT0gLUlpbmNsdWRlIC1JJChzcmNkaXIpL2luY2x1ZGUgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUKK0RFRlMJPSBAREVGU0AKK0NQUEZMQUdTPSBAQ1BQRkxBR1NACitDRkxBR1MJPSBAQ0ZMQUdTQAorTElCUwk9IEBMSUJTQAorTERGTEFHUwk9IEBMREZMQUdTQCAtTC4gLUwuLgorQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChJTkNESVIpICQoQ1BQRkxBR1MpICQoQ0ZMQUdTKQorQ1JZUFRPTElCID0gLWxzcnRwMgorQ1JZUFRPX0xJQkRJUiA9IEBDUllQVE9fTElCRElSQAorCitSQU5MSUIJPSBAUkFOTElCQAorCisjIFNwZWNpZnkgaG93IHRlc3RzIHNob3VsZCBmaW5kIHNoYXJlZCBsaWJyYXJpZXMgb24gbWFjT1MgYW5kIExpbnV4CisjCisjIG1hY09TIHB1cmdlcyBEWUxEX0xJQlJBUllfUEFUSCB3aGVuIHNwYXduaW5nIHN1YnByb2Nlc3Nlcywgc28gaXQncworIyBub3QgcG9zc2libGUgdG8gcGFzcyB0aGlzIGluIGZyb20gdGhlIG91dHNpZGU7IHdlIGhhdmUgdG8gc3BlY2lmeQorIyBpdCBmb3IgYW55IHN1YnByb2Nlc3NlcyB3ZSBjYWxsLiBObyBzdXBwb3J0IGZvciBkeW5hbWljIGxpbmtlZAorIyB0ZXN0cyBvbiBXaW5kb3dzLgoraWZuZXEgKCQoc3RyaXAgJChDUllQVE9fTElCRElSKSksKQorCWlmbmVxICgkKE9TKSxXaW5kb3dzX05UKQorCQlVTkFNRV9TID0gJChzaGVsbCB1bmFtZSAtcykKKwkJaWZlcSAoJChVTkFNRV9TKSxMaW51eCkKKwkJCUZJTkRfTElCUkFSSUVTID0gTERfTElCUkFSWV9QQVRIPSQoQ1JZUFRPX0xJQkRJUikKKwkJZW5kaWYKKwkJaWZlcSAoJChVTkFNRV9TKSxEYXJ3aW4pCisJCQlGSU5EX0xJQlJBUklFUyA9IERZTERfTElCUkFSWV9QQVRIPSQoQ1JZUFRPX0xJQkRJUikKKwkJZW5kaWYKKwllbmRpZgorZW5kaWYKKworIyBFWEUgZGVmaW5lcyB0aGUgc3VmZml4IG9uIGV4ZWN1dGFibGVzIC0gaXQncyAuZXhlIGZvciBjeWd3aW4sIGFuZAorIyBudWxsIG9uIGxpbnV4LCBic2QsIGFuZCBPUyBYIGFuZCBvdGhlciBPU2VzLiAgd2UgZGVmaW5lIHRoaXMgc28gdGhhdAorIyBgbWFrZSBjbGVhbmAgd2lsbCB3b3JrIG9uIHRoZSBjeWd3aW4gcGxhdGZvcm0KK0VYRSA9IEBFWEVACisjIFJhbmRvbSBzb3VyY2UuCitVU0VfRVhURVJOQUxfQ1JZUFRPID0gQFVTRV9FWFRFUk5BTF9DUllQVE9ACisKK2lmZGVmIEFSQ0gKKyAgREVGUyArPSAtRCQoQVJDSCk9MQorZW5kaWYKKworaWZkZWYgc3lzbmFtZQorICBERUZTICs9IC1EJChzeXNuYW1lKT0xCitlbmRpZgorCisuUEhPTlk6IGR1bW15IGFsbCBydW50ZXN0IGNsZWFuIHN1cGVyY2xlYW4KKworZHVtbXkgOiBhbGwgcnVudGVzdAorCisjIHRlc3QgYXBwbGljYXRpb25zCitpZm5lcSAoMSwgJChVU0VfRVhURVJOQUxfQ1JZUFRPKSkKK0FFU19DQUxDID0gdGVzdC9hZXNfY2FsYyQoRVhFKQorZW5kaWYKKwordGVzdGFwcCA9IHRlc3QvY2lwaGVyX2RyaXZlciQoRVhFKSB0ZXN0L2RhdGF0eXBlc19kcml2ZXIkKEVYRSkgXAorCSAgdGVzdC9zdGF0X2RyaXZlciQoRVhFKSB0ZXN0L3NoYTFfZHJpdmVyJChFWEUpIFwKKwkgIHRlc3Qva2VybmVsX2RyaXZlciQoRVhFKSAkKEFFU19DQUxDKSBcCisJICB0ZXN0L2VudiQoRVhFKQorCisjIGRhdGEgdmFsdWVzIHVzZWQgdG8gdGVzdCB0aGUgYWVzX2NhbGMgYXBwbGljYXRpb24gZm9yIEFFUy0xMjgKK2sxMjg9MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYKK3AxMjg9MDAxMTIyMzM0NDU1NjY3Nzg4OTlhYWJiY2NkZGVlZmYKK2MxMjg9NjljNGUwZDg2YTdiMDQzMGQ4Y2RiNzgwNzBiNGM1NWEKKworCisjIGRhdGEgdmFsdWVzIHVzZWQgdG8gdGVzdCB0aGUgYWVzX2NhbGMgYXBwbGljYXRpb24gZm9yIEFFUy0yNTYKK2syNTY9MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZgorcDI1Nj0wMDExMjIzMzQ0NTU2Njc3ODg5OWFhYmJjY2RkZWVmZgorYzI1Nj04ZWEyYjdjYTUxNjc0NWJmZWFmYzQ5OTA0YjQ5NjA4OQorCisKK3J1bnRlc3Q6ICQodGVzdGFwcCkKKwkkKEZJTkRfTElCUkFSSUVTKSB0ZXN0L2VudiQoRVhFKSAjIHByaW50IG91dCBpbmZvcm1hdGlvbiBvbiB0aGUgYnVpbGQgZW52aXJvbm1lbnQKKwlAZWNobyAicnVubmluZyBjcnlwdG8gdGVzdCBhcHBsaWNhdGlvbnMuLi4iCitpZm5lcSAoMSwgJChVU0VfRVhURVJOQUxfQ1JZUFRPKSkKKwkkKEZJTkRfTElCUkFSSUVTKSB0ZXN0IGB0ZXN0L2Flc19jYWxjICQoazEyOCkgJChwMTI4KWAgPSAkKGMxMjgpCisJJChGSU5EX0xJQlJBUklFUykgdGVzdCBgdGVzdC9hZXNfY2FsYyAkKGsyNTYpICQocDI1NilgID0gJChjMjU2KQorZW5kaWYKKwkkKEZJTkRfTElCUkFSSUVTKSB0ZXN0L2NpcGhlcl9kcml2ZXIkKEVYRSkgLXYgPi9kZXYvbnVsbAorCSQoRklORF9MSUJSQVJJRVMpIHRlc3QvZGF0YXR5cGVzX2RyaXZlciQoRVhFKSAtdiA+L2Rldi9udWxsCisJJChGSU5EX0xJQlJBUklFUykgdGVzdC9zdGF0X2RyaXZlciQoRVhFKSA+L2Rldi9udWxsCisJJChGSU5EX0xJQlJBUklFUykgdGVzdC9zaGExX2RyaXZlciQoRVhFKSAtdiA+L2Rldi9udWxsCisJJChGSU5EX0xJQlJBUklFUykgdGVzdC9rZXJuZWxfZHJpdmVyJChFWEUpIC12ID4vZGV2L251bGwKKwlAZWNobyAiY3J5cHRvIHRlc3QgYXBwbGljYXRpb25zIHBhc3NlZC4iCisKKworIyB0aGUgcnVsZSBmb3IgbWFraW5nIG9iamVjdCBmaWxlcyBhbmQgdGVzdCBhcHBzCisKKyUubzogJS5jCisJJChDT01QSUxFKSAtYyAkPCAtbyAkQAorCislJChFWEUpOiAlLmMgJChzcmNkaXIpLy4uL3Rlc3QvZ2V0b3B0X3MuYworCSQoQ09NUElMRSkgJChMREZMQUdTKSAkPCAkKHNyY2RpcikvLi4vdGVzdC9nZXRvcHRfcy5jIC1vICRAICQoQ1JZUFRPTElCKSAkKExJQlMpCisKK2FsbDogJCh0ZXN0YXBwKQorCisjIGhvdXNla2VlcGluZyBmdW5jdGlvbnMKKworY2xlYW46CisJcm0gLWYgJCh0ZXN0YXBwKSAqLm8gKi8qLm8KKwlmb3IgYSBpbiAqIC4qICovKjsgZG8gaWYgWyAtZiAiJCRhfiIgXSA7IHRoZW4gcm0gJCRhfjsgZmk7IGRvbmU7CisJcm0gLWYgYGZpbmQgLiAtbmFtZSAiKi5bY2hdfip+ImAKKwlybSAtcmYgbGF0ZXgKKworc3VwZXJjbGVhbjogY2xlYW4KKwlybSAtZiAqY29yZSBUQUdTIGt0cmFjZS5vdXQKKworIyBFT0YKZGlmZiAtLWdpdCBhL2NyeXB0by9WRVJTSU9OIGIvY3J5cHRvL1ZFUlNJT04KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlZWZjYjkuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL1ZFUlNJT04KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0xLjAuMApkaWZmIC0tZ2l0IGEvY3J5cHRvL2FlX3hmbS94Zm0uYyBiL2NyeXB0by9hZV94Zm0veGZtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0NGI4MzIuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL2FlX3hmbS94Zm0uYworKysgL2Rldi9udWxsCkBAIC0xLDU1OCArMCwwIEBACi0vKgotICogeGZtLmMKLSAqCi0gKiBDcnlwdG8gdHJhbnNmb3JtIGltcGxlbWVudGF0aW9uCi0gKgotICogRGF2aWQgQS4gTWNHcmV3Ci0gKiBDaXNjbyBTeXN0ZW1zLCBJbmMuCi0gKi8KLQotI2luY2x1ZGUgImNyeXB0b2FsZy5oIgotI2luY2x1ZGUgImFlc19jYmMuaCIKLSNpbmNsdWRlICJobWFjLmgiCi0jaW5jbHVkZSAiY3J5cHRvX2tlcm5lbC5oIiAgIC8qIGZvciBjcnlwdG9fZ2V0X3JhbmRvbSgpICovCi0KLSNkZWZpbmUgS0VZX0xFTiAgICAgMTYKLSNkZWZpbmUgRU5DX0tFWV9MRU4gMTYKLSNkZWZpbmUgTUFDX0tFWV9MRU4gMTYKLSNkZWZpbmUgSVZfTEVOICAgICAgMTYKLSNkZWZpbmUgVEFHX0xFTiAgICAgMTIKLSNkZWZpbmUgTUFYX0VYUEFORCAgMjcKLQotZXJyX3N0YXR1c190Ci1hZXNfMTI4X2NiY19obWFjX3NoYTFfOTZfZnVuYyh2b2lkICprZXksICAgICAgICAgICAgCi0JCQkgICAgICB2b2lkICpjbGVhciwgICAgICAgICAgCi0JCQkgICAgICB1bnNpZ25lZCBjbGVhcl9sZW4sICAgICAgIAotCQkJICAgICAgdm9pZCAqaXYsICAgICAgICAgICAgIAotCQkJICAgICAgdm9pZCAqb3BhcXVlLCAgICAgICAgIAotCQkJICAgICAgdW5zaWduZWQgKm9wYXF1ZV9sZW4sIAotCQkJICAgICAgdm9pZCAqYXV0aF90YWcpIHsKLSAgYWVzX2NiY19jdHhfdCBhZXNfY3R4OwotICBobWFjX2N0eF90IGhtYWNfY3R4OwotICB1bnNpZ25lZCBjaGFyIGVuY19rZXlbRU5DX0tFWV9MRU5dOwotICB1bnNpZ25lZCBjaGFyIG1hY19rZXlbTUFDX0tFWV9MRU5dOwotICBlcnJfc3RhdHVzX3Qgc3RhdHVzOwotCi0gIC8qIGNoZWNrIGlmIHdlJ3JlIGRvaW5nIGF1dGhlbnRpY2F0aW9uIG9ubHkgKi8KLSAgaWYgKChpdiA9PSBOVUxMKSAmJiAob3BhcXVlID09IE5VTEwpICYmIChvcGFxdWVfbGVuID09IE5VTEwpKSB7Ci0gICAgICAKLSAgICAgIC8qIHBlcmZvcm0gYXV0aGVudGljYXRpb24gb25seSAqLwotCi0gIH0gZWxzZSBpZiAoKGl2ID09IE5VTEwpIHx8IChvcGFxdWUgPT0gTlVMTCkgfHwgKG9wYXF1ZV9sZW4gPT0gTlVMTCkpIHsKLSAgICAKLSAgICAvKgotICAgICAqIGJhZCBwYXJhbWV0ZXIgLSB3ZSBleHBlY3QgZWl0aGVyIGFsbCB0aHJlZSBwb2ludGVycyB0byBiZSBOVUxMLAotICAgICAqIG9yIG5vbmUgb2YgdGhvc2UgcG9pbnRlcnMgdG8gYmUgTlVMTCAKLSAgICAgKi8KLSAgICByZXR1cm4gZXJyX3N0YXR1c19mYWlsOwotCi0gIH0gZWxzZSB7Ci0KLSAgICAvKiBkZXJpdmUgZW5jcnlwdGlvbiBhbmQgYXV0aGVudGljYXRpb24ga2V5cyBmcm9tIHRoZSBpbnB1dCBrZXkgKi8KLSAgICBzdGF0dXMgPSBobWFjX2luaXQoJmhtYWNfY3R4LCBrZXksIEtFWV9MRU4pOwotICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7Ci0gICAgc3RhdHVzID0gaG1hY19jb21wdXRlKCZobWFjX2N0eCwgIkVOQyIsIDMsIEVOQ19LRVlfTEVOLCBlbmNfa2V5KTsKLSAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOwotCi0gICAgc3RhdHVzID0gaG1hY19pbml0KCZobWFjX2N0eCwga2V5LCBLRVlfTEVOKTsKLSAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOwotICAgIHN0YXR1cyA9IGhtYWNfY29tcHV0ZSgmaG1hY19jdHgsICJNQUMiLCAzLCBNQUNfS0VZX0xFTiwgbWFjX2tleSk7Ci0gICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsKLQotCi0gICAgLyogcGVyZm9ybSBlbmNyeXB0aW9uIGFuZCBhdXRoZW50aWNhdGlvbiAqLwotCi0gICAgLyogc2V0IGFlcyBrZXkgKi8KLSAgICBzdGF0dXMgPSBhZXNfY2JjX2NvbnRleHRfaW5pdCgmYWVzX2N0eCwga2V5LCBkaXJlY3Rpb25fZW5jcnlwdCk7Ci0gICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsKLQotICAgIC8qIHNldCBpdiAqLwotICAgIHN0YXR1cyA9IGNyeXB0b19nZXRfcmFuZG9tKGl2LCBJVl9MRU4pOyAgCi0gICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsgCi0gICAgc3RhdHVzID0gYWVzX2NiY19zZXRfaXYoJmFlc19jdHgsIGl2KTsKLSAgICAKLSAgICAvKiBlbmNyeXB0IHRoZSBvcGFxdWUgZGF0YSAgKi8KLSAgICBzdGF0dXMgPSBhZXNfY2JjX25pc3RfZW5jcnlwdCgmYWVzX2N0eCwgb3BhcXVlLCBvcGFxdWVfbGVuKTsKLSAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOwotCi0gICAgLyogYXV0aGVudGljYXRlIGNsZWFyIGFuZCBvcGFxdWUgZGF0YSAqLwotICAgIHN0YXR1cyA9IGhtYWNfaW5pdCgmaG1hY19jdHgsIG1hY19rZXksIE1BQ19LRVlfTEVOKTsKLSAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOwotCi0gICAgc3RhdHVzID0gaG1hY19zdGFydCgmaG1hY19jdHgpOwotICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7Ci0KLSAgICBzdGF0dXMgPSBobWFjX3VwZGF0ZSgmaG1hY19jdHgsIGNsZWFyLCBjbGVhcl9sZW4pOwotICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7Ci0KLSAgICBzdGF0dXMgPSBobWFjX2NvbXB1dGUoJmhtYWNfY3R4LCBvcGFxdWUsICpvcGFxdWVfbGVuLCBUQUdfTEVOLCBhdXRoX3RhZyk7Ci0gICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsKLQotICB9Ci0KLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7Ci19Ci0KLWVycl9zdGF0dXNfdAotYWVzXzEyOF9jYmNfaG1hY19zaGExXzk2X2ludih2b2lkICprZXksICAgICAgICAgICAgCi0JCQkgICAgIHZvaWQgKmNsZWFyLCAgICAgICAgICAKLQkJCSAgICAgdW5zaWduZWQgY2xlYXJfbGVuLCAgICAgICAKLQkJCSAgICAgdm9pZCAqaXYsICAgICAgICAgICAgIAotCQkJICAgICB2b2lkICpvcGFxdWUsICAgICAgICAgCi0JCQkgICAgIHVuc2lnbmVkICpvcGFxdWVfbGVuLCAKLQkJCSAgICAgdm9pZCAqYXV0aF90YWcpIHsKLSAgYWVzX2NiY19jdHhfdCBhZXNfY3R4OwotICBobWFjX2N0eF90IGhtYWNfY3R4OwotICB1bnNpZ25lZCBjaGFyIGVuY19rZXlbRU5DX0tFWV9MRU5dOwotICB1bnNpZ25lZCBjaGFyIG1hY19rZXlbTUFDX0tFWV9MRU5dOwotICB1bnNpZ25lZCBjaGFyIHRtcF90YWdbVEFHX0xFTl07Ci0gIHVuc2lnbmVkIGNoYXIgKnRhZyA9IGF1dGhfdGFnOwotICBlcnJfc3RhdHVzX3Qgc3RhdHVzOwotICBpbnQgaTsKLSAgCi0gIC8qIGNoZWNrIGlmIHdlJ3JlIGRvaW5nIGF1dGhlbnRpY2F0aW9uIG9ubHkgKi8KLSAgaWYgKChpdiA9PSBOVUxMKSAmJiAob3BhcXVlID09IE5VTEwpICYmIChvcGFxdWVfbGVuID09IE5VTEwpKSB7Ci0gICAgICAKLSAgICAgIC8qIHBlcmZvcm0gYXV0aGVudGljYXRpb24gb25seSAqLwotCi0gIH0gZWxzZSBpZiAoKGl2ID09IE5VTEwpIHx8IChvcGFxdWUgPT0gTlVMTCkgfHwgKG9wYXF1ZV9sZW4gPT0gTlVMTCkpIHsKLSAgICAKLSAgICAvKgotICAgICAqIGJhZCBwYXJhbWV0ZXIgLSB3ZSBleHBlY3QgZWl0aGVyIGFsbCB0aHJlZSBwb2ludGVycyB0byBiZSBOVUxMLAotICAgICAqIG9yIG5vbmUgb2YgdGhvc2UgcG9pbnRlcnMgdG8gYmUgTlVMTCAKLSAgICAgKi8KLSAgICByZXR1cm4gZXJyX3N0YXR1c19mYWlsOwotCi0gIH0gZWxzZSB7Ci0KLSAgICAvKiBkZXJpdmUgZW5jcnlwdGlvbiBhbmQgYXV0aGVudGljYXRpb24ga2V5cyBmcm9tIHRoZSBpbnB1dCBrZXkgKi8KLSAgICBzdGF0dXMgPSBobWFjX2luaXQoJmhtYWNfY3R4LCBrZXksIEtFWV9MRU4pOwotICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7Ci0gICAgc3RhdHVzID0gaG1hY19jb21wdXRlKCZobWFjX2N0eCwgIkVOQyIsIDMsIEVOQ19LRVlfTEVOLCBlbmNfa2V5KTsKLSAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOwotCi0gICAgc3RhdHVzID0gaG1hY19pbml0KCZobWFjX2N0eCwga2V5LCBLRVlfTEVOKTsKLSAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOwotICAgIHN0YXR1cyA9IGhtYWNfY29tcHV0ZSgmaG1hY19jdHgsICJNQUMiLCAzLCBNQUNfS0VZX0xFTiwgbWFjX2tleSk7Ci0gICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsKLQotICAgIC8qIHBlcmZvcm0gZW5jcnlwdGlvbiBhbmQgYXV0aGVudGljYXRpb24gKi8KLQotICAgIC8qIHNldCBhZXMga2V5ICovCi0gICAgc3RhdHVzID0gYWVzX2NiY19jb250ZXh0X2luaXQoJmFlc19jdHgsIGtleSwgZGlyZWN0aW9uX2RlY3J5cHQpOwotICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7Ci0KLSAgICAvKiBzZXQgaXYgKi8KLSAgICBzdGF0dXMgPSByYW5kX3NvdXJjZV9nZXRfb2N0ZXRfc3RyaW5nKGl2LCBJVl9MRU4pOyAgCi0gICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsgCi0gICAgc3RhdHVzID0gYWVzX2NiY19zZXRfaXYoJmFlc19jdHgsIGl2KTsKLSAgICAKLSAgICAvKiBlbmNyeXB0IHRoZSBvcGFxdWUgZGF0YSAgKi8KLSAgICBzdGF0dXMgPSBhZXNfY2JjX25pc3RfZGVjcnlwdCgmYWVzX2N0eCwgb3BhcXVlLCBvcGFxdWVfbGVuKTsKLSAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOwotCi0gICAgLyogYXV0aGVudGljYXRlIGNsZWFyIGFuZCBvcGFxdWUgZGF0YSAqLwotICAgIHN0YXR1cyA9IGhtYWNfaW5pdCgmaG1hY19jdHgsIG1hY19rZXksIE1BQ19LRVlfTEVOKTsKLSAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOwotCi0gICAgc3RhdHVzID0gaG1hY19zdGFydCgmaG1hY19jdHgpOwotICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7Ci0KLSAgICBzdGF0dXMgPSBobWFjX3VwZGF0ZSgmaG1hY19jdHgsIGNsZWFyLCBjbGVhcl9sZW4pOwotICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7Ci0KLSAgICBzdGF0dXMgPSBobWFjX2NvbXB1dGUoJmhtYWNfY3R4LCBvcGFxdWUsICpvcGFxdWVfbGVuLCBUQUdfTEVOLCB0bXBfdGFnKTsKLSAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOwotCi0gICAgLyogY29tcGFyZSB0aGUgY29tcHV0ZWQgdGFnIHdpdGggdGhlIG9uZSBwcm92aWRlZCBhcyBpbnB1dCAqLwotICAgIGZvciAoaT0wOyBpIDwgVEFHX0xFTjsgaSsrKQotICAgICAgaWYgKHRtcF90YWdbaV0gIT0gdGFnW2ldKSAKLQlyZXR1cm4gZXJyX3N0YXR1c19hdXRoX2ZhaWw7IAotCi0gIH0KLQotICByZXR1cm4gZXJyX3N0YXR1c19vazsKLX0KLQotCi0jZGVmaW5lIEVOQyAxCi0KLSNkZWZpbmUgREVCVUcgMAotCi1lcnJfc3RhdHVzX3QKLWFlc18xMjhfY2JjX2htYWNfc2hhMV85Nl9lbmModm9pZCAqa2V5LCAgICAgICAgICAgIAotCQkJICAgICBjb25zdCB2b2lkICpjbGVhciwgICAgICAgICAgCi0JCQkgICAgIHVuc2lnbmVkIGNsZWFyX2xlbiwgICAgICAgCi0JCQkgICAgIHZvaWQgKml2LCAgICAgICAgICAgICAKLQkJCSAgICAgdm9pZCAqb3BhcXVlLCAgICAgICAgIAotCQkJICAgICB1bnNpZ25lZCAqb3BhcXVlX2xlbikgewotICBhZXNfY2JjX2N0eF90IGFlc19jdHg7Ci0gIGhtYWNfY3R4X3QgaG1hY19jdHg7Ci0gIHVuc2lnbmVkIGNoYXIgZW5jX2tleVtFTkNfS0VZX0xFTl07Ci0gIHVuc2lnbmVkIGNoYXIgbWFjX2tleVtNQUNfS0VZX0xFTl07Ci0gIHVuc2lnbmVkIGNoYXIgKmF1dGhfdGFnOwotICBlcnJfc3RhdHVzX3Qgc3RhdHVzOwotCi0gIC8qIGNoZWNrIGlmIHdlJ3JlIGRvaW5nIGF1dGhlbnRpY2F0aW9uIG9ubHkgKi8KLSAgaWYgKChpdiA9PSBOVUxMKSAmJiAob3BhcXVlID09IE5VTEwpICYmIChvcGFxdWVfbGVuID09IE5VTEwpKSB7Ci0gICAgICAKLSAgICAgIC8qIHBlcmZvcm0gYXV0aGVudGljYXRpb24gb25seSAqLwotCi0gIH0gZWxzZSBpZiAoKGl2ID09IE5VTEwpIHx8IChvcGFxdWUgPT0gTlVMTCkgfHwgKG9wYXF1ZV9sZW4gPT0gTlVMTCkpIHsKLSAgICAKLSAgICAvKgotICAgICAqIGJhZCBwYXJhbWV0ZXIgLSB3ZSBleHBlY3QgZWl0aGVyIGFsbCB0aHJlZSBwb2ludGVycyB0byBiZSBOVUxMLAotICAgICAqIG9yIG5vbmUgb2YgdGhvc2UgcG9pbnRlcnMgdG8gYmUgTlVMTCAKLSAgICAgKi8KLSAgICByZXR1cm4gZXJyX3N0YXR1c19mYWlsOwotCi0gIH0gZWxzZSB7Ci0KLSNpZiBERUJVRwotICAgIHByaW50ZigiRU5DIHVzaW5nIGtleSAlc1xuIiwgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoa2V5LCBLRVlfTEVOKSk7Ci0jZW5kaWYKLQotICAgIC8qIGRlcml2ZSBlbmNyeXB0aW9uIGFuZCBhdXRoZW50aWNhdGlvbiBrZXlzIGZyb20gdGhlIGlucHV0IGtleSAqLwotICAgIHN0YXR1cyA9IGhtYWNfaW5pdCgmaG1hY19jdHgsIGtleSwgS0VZX0xFTik7Ci0gICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsKLSAgICBzdGF0dXMgPSBobWFjX2NvbXB1dGUoJmhtYWNfY3R4LCAiRU5DIiwgMywgRU5DX0tFWV9MRU4sIGVuY19rZXkpOwotICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7Ci0KLSAgICBzdGF0dXMgPSBobWFjX2luaXQoJmhtYWNfY3R4LCBrZXksIEtFWV9MRU4pOwotICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7Ci0gICAgc3RhdHVzID0gaG1hY19jb21wdXRlKCZobWFjX2N0eCwgIk1BQyIsIDMsIE1BQ19LRVlfTEVOLCBtYWNfa2V5KTsKLSAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOwotCi0KLSAgICAvKiBwZXJmb3JtIGVuY3J5cHRpb24gYW5kIGF1dGhlbnRpY2F0aW9uICovCi0KLSAgICAvKiBzZXQgYWVzIGtleSAqLwotICAgIHN0YXR1cyA9IGFlc19jYmNfY29udGV4dF9pbml0KCZhZXNfY3R4LCBrZXksIGRpcmVjdGlvbl9lbmNyeXB0KTsKLSAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOwotCi0gICAgLyogc2V0IGl2ICovCi0gICAgc3RhdHVzID0gcmFuZF9zb3VyY2VfZ2V0X29jdGV0X3N0cmluZyhpdiwgSVZfTEVOKTsgIAotICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7IAotICAgIHN0YXR1cyA9IGFlc19jYmNfc2V0X2l2KCZhZXNfY3R4LCBpdik7Ci0gICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsKLQotI2lmIERFQlVHCi0gICAgcHJpbnRmKCJwbGFpbnRleHQgbGVuOiAgJWRcbiIsICpvcGFxdWVfbGVuKTsKLSAgICBwcmludGYoIml2OiAgICAgICAgICVzXG4iLCBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhpdiwgSVZfTEVOKSk7Ci0gICAgcHJpbnRmKCJwbGFpbnRleHQ6ICAlc1xuIiwgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcob3BhcXVlLCAqb3BhcXVlX2xlbikpOwotI2VuZGlmCi0KLSNpZiBFTkMgICAgCi0gICAgLyogZW5jcnlwdCB0aGUgb3BhcXVlIGRhdGEgICovCi0gICAgc3RhdHVzID0gYWVzX2NiY19uaXN0X2VuY3J5cHQoJmFlc19jdHgsIG9wYXF1ZSwgb3BhcXVlX2xlbik7Ci0gICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsKLSNlbmRpZgotCi0jaWYgREVCVUcKLSAgICBwcmludGYoImNpcGhlcnRleHQgbGVuOiAlZFxuIiwgKm9wYXF1ZV9sZW4pOwotICAgIHByaW50ZigiY2lwaGVydGV4dDogJXNcbiIsIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKG9wYXF1ZSwgKm9wYXF1ZV9sZW4pKTsKLSNlbmRpZgotCi0gICAgLyoKLSAgICAgKiBhdXRoZW50aWNhdGUgY2xlYXIgYW5kIG9wYXF1ZSBkYXRhLCB0aGVuIHdyaXRlIHRoZQotICAgICAqIGF1dGhlbnRpY2F0aW9uIHRhZyB0byB0aGUgbG9jYXRpb24gaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZQotICAgICAqIGNpcGhlcnRleHQKLSAgICAgKi8KLSAgICBzdGF0dXMgPSBobWFjX2luaXQoJmhtYWNfY3R4LCBtYWNfa2V5LCBNQUNfS0VZX0xFTik7Ci0gICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsKLQotICAgIHN0YXR1cyA9IGhtYWNfc3RhcnQoJmhtYWNfY3R4KTsKLSAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOwotCi0gICAgc3RhdHVzID0gaG1hY191cGRhdGUoJmhtYWNfY3R4LCBjbGVhciwgY2xlYXJfbGVuKTsKLSAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOwotI2lmIERFQlVHCi0gICAgcHJpbnRmKCJobWFjIGlucHV0OiAlc1xuIiwgCi0JICAgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoY2xlYXIsIGNsZWFyX2xlbikpOwotI2VuZGlmCi0gICAgYXV0aF90YWcgPSAodW5zaWduZWQgY2hhciAqKW9wYXF1ZTsKLSAgICBhdXRoX3RhZyArPSAqb3BhcXVlX2xlbjsgICAgCi0gICAgc3RhdHVzID0gaG1hY19jb21wdXRlKCZobWFjX2N0eCwgb3BhcXVlLCAqb3BhcXVlX2xlbiwgVEFHX0xFTiwgYXV0aF90YWcpOwotICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7Ci0jaWYgREVCVUcKLSAgICBwcmludGYoImhtYWMgaW5wdXQ6ICVzXG4iLCAKLQkgICBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhvcGFxdWUsICpvcGFxdWVfbGVuKSk7Ci0jZW5kaWYKLSAgICAvKiBidW1wIHVwIHRoZSBvcGFxdWVfbGVuIHRvIHJlZmxlY3QgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZyAqLwotICAgICpvcGFxdWVfbGVuICs9IFRBR19MRU47Ci0KLSNpZiBERUJVRwotICAgIHByaW50ZigicHJvdCBkYXRhIGxlbjogICVkXG4iLCAqb3BhcXVlX2xlbik7Ci0gICAgcHJpbnRmKCJwcm90IGRhdGE6ICVzXG4iLCBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhvcGFxdWUsICpvcGFxdWVfbGVuKSk7Ci0jZW5kaWYKLSAgfQotCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOwotfQotCi1lcnJfc3RhdHVzX3QKLWFlc18xMjhfY2JjX2htYWNfc2hhMV85Nl9kZWModm9pZCAqa2V5LCAgICAgICAgICAgIAotCQkJICAgICBjb25zdCB2b2lkICpjbGVhciwgICAgICAgICAgCi0JCQkgICAgIHVuc2lnbmVkIGNsZWFyX2xlbiwgICAgICAgCi0JCQkgICAgIHZvaWQgKml2LCAgICAgICAgICAgICAKLQkJCSAgICAgdm9pZCAqb3BhcXVlLCAgICAgICAgIAotCQkJICAgICB1bnNpZ25lZCAqb3BhcXVlX2xlbikgewotICBhZXNfY2JjX2N0eF90IGFlc19jdHg7Ci0gIGhtYWNfY3R4X3QgaG1hY19jdHg7Ci0gIHVuc2lnbmVkIGNoYXIgZW5jX2tleVtFTkNfS0VZX0xFTl07Ci0gIHVuc2lnbmVkIGNoYXIgbWFjX2tleVtNQUNfS0VZX0xFTl07Ci0gIHVuc2lnbmVkIGNoYXIgdG1wX3RhZ1tUQUdfTEVOXTsKLSAgdW5zaWduZWQgY2hhciAqYXV0aF90YWc7Ci0gIHVuc2lnbmVkIGNpcGhlcnRleHRfbGVuOwotICBlcnJfc3RhdHVzX3Qgc3RhdHVzOwotICBpbnQgaTsKLSAgCi0gIC8qIGNoZWNrIGlmIHdlJ3JlIGRvaW5nIGF1dGhlbnRpY2F0aW9uIG9ubHkgKi8KLSAgaWYgKChpdiA9PSBOVUxMKSAmJiAob3BhcXVlID09IE5VTEwpICYmIChvcGFxdWVfbGVuID09IE5VTEwpKSB7Ci0gICAgICAKLSAgICAgIC8qIHBlcmZvcm0gYXV0aGVudGljYXRpb24gb25seSAqLwotCi0gIH0gZWxzZSBpZiAoKGl2ID09IE5VTEwpIHx8IChvcGFxdWUgPT0gTlVMTCkgfHwgKG9wYXF1ZV9sZW4gPT0gTlVMTCkpIHsKLSAgICAKLSAgICAvKgotICAgICAqIGJhZCBwYXJhbWV0ZXIgLSB3ZSBleHBlY3QgZWl0aGVyIGFsbCB0aHJlZSBwb2ludGVycyB0byBiZSBOVUxMLAotICAgICAqIG9yIG5vbmUgb2YgdGhvc2UgcG9pbnRlcnMgdG8gYmUgTlVMTCAKLSAgICAgKi8KLSAgICByZXR1cm4gZXJyX3N0YXR1c19mYWlsOwotCi0gIH0gZWxzZSB7Ci0jaWYgREVCVUcKLSAgICBwcmludGYoIkRFQyB1c2luZyBrZXkgJXNcbiIsIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKGtleSwgS0VZX0xFTikpOwotI2VuZGlmCi0KLSAgICAvKiBkZXJpdmUgZW5jcnlwdGlvbiBhbmQgYXV0aGVudGljYXRpb24ga2V5cyBmcm9tIHRoZSBpbnB1dCBrZXkgKi8KLSAgICBzdGF0dXMgPSBobWFjX2luaXQoJmhtYWNfY3R4LCBrZXksIEtFWV9MRU4pOwotICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7Ci0gICAgc3RhdHVzID0gaG1hY19jb21wdXRlKCZobWFjX2N0eCwgIkVOQyIsIDMsIEVOQ19LRVlfTEVOLCBlbmNfa2V5KTsKLSAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOwotCi0gICAgc3RhdHVzID0gaG1hY19pbml0KCZobWFjX2N0eCwga2V5LCBLRVlfTEVOKTsKLSAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOwotICAgIHN0YXR1cyA9IGhtYWNfY29tcHV0ZSgmaG1hY19jdHgsICJNQUMiLCAzLCBNQUNfS0VZX0xFTiwgbWFjX2tleSk7Ci0gICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsKLQotI2lmIERFQlVHCi0gICAgcHJpbnRmKCJwcm90IGRhdGEgbGVuOiAgJWRcbiIsICpvcGFxdWVfbGVuKTsKLSAgICBwcmludGYoInByb3QgZGF0YTogJXNcbiIsIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKG9wYXF1ZSwgKm9wYXF1ZV9sZW4pKTsKLSNlbmRpZgotCi0gICAgLyogCi0gICAgICogc2V0IHRoZSBwcm90ZWN0ZWQgZGF0YSBsZW5ndGggdG8gdGhhdCBvZiB0aGUgY2lwaGVydGV4dCwgYnkKLSAgICAgKiBzdWJ0cmFjdGluZyBvdXQgdGhlIGxlbmd0aCBvZiB0aGUgYXV0aGVudGljYXRpb24gdGFnIAotICAgICAqLwotICAgIGNpcGhlcnRleHRfbGVuID0gKm9wYXF1ZV9sZW4gLSBUQUdfTEVOOwotCi0jaWYgREVCVUcKLSAgICBwcmludGYoImNpcGhlcnRleHQgbGVuOiAlZFxuIiwgY2lwaGVydGV4dF9sZW4pOwotI2VuZGlmICAgIAotICAgIC8qIHZlcmlmeSB0aGUgYXV0aGVudGljYXRpb24gdGFnICovCi0KLSAgICAvKiAKLSAgICAgKiBjb21wdXRlIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcgZm9yIHRoZSBjbGVhciBhbmQgb3BhcXVlIGRhdGEsCi0gICAgICogYW5kIHdyaXRlIGl0IHRvIGEgdGVtcG9yYXJ5IGxvY2F0aW9uCi0gICAgICovCi0gICAgc3RhdHVzID0gaG1hY19pbml0KCZobWFjX2N0eCwgbWFjX2tleSwgTUFDX0tFWV9MRU4pOwotICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7Ci0KLSAgICBzdGF0dXMgPSBobWFjX3N0YXJ0KCZobWFjX2N0eCk7Ci0gICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsKLQotICAgIHN0YXR1cyA9IGhtYWNfdXBkYXRlKCZobWFjX2N0eCwgY2xlYXIsIGNsZWFyX2xlbik7Ci0gICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsKLQotI2lmIERFQlVHCi0gICAgcHJpbnRmKCJobWFjIGlucHV0OiAlc1xuIiwgCi0JICAgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoY2xlYXIsIGNsZWFyX2xlbikpOwotI2VuZGlmCi0KLSAgICBzdGF0dXMgPSBobWFjX2NvbXB1dGUoJmhtYWNfY3R4LCBvcGFxdWUsIGNpcGhlcnRleHRfbGVuLCBUQUdfTEVOLCB0bXBfdGFnKTsKLSAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOwotCi0jaWYgREVCVUcKLSAgICBwcmludGYoImhtYWMgaW5wdXQ6ICVzXG4iLCAKLQkgICBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhvcGFxdWUsIGNpcGhlcnRleHRfbGVuKSk7Ci0jZW5kaWYKLQotICAgIC8qIAotICAgICAqIGNvbXBhcmUgdGhlIGNvbXB1dGVkIHRhZyB3aXRoIHRoZSBvbmUgcHJvdmlkZWQgYXMgaW5wdXQgKHdoaWNoCi0gICAgICogaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgY2lwaGVydGV4dCkKLSAgICAgKi8KLSAgICBhdXRoX3RhZyA9ICh1bnNpZ25lZCBjaGFyICopb3BhcXVlOwotICAgIGF1dGhfdGFnICs9IGNpcGhlcnRleHRfbGVuOyAgCi0jaWYgREVCVUcKLSAgICBwcmludGYoImF1dGhfdGFnOiAlc1xuIiwgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoYXV0aF90YWcsIFRBR19MRU4pKTsKLSAgICBwcmludGYoInRtcF90YWc6ICAlc1xuIiwgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcodG1wX3RhZywgVEFHX0xFTikpOwotI2VuZGlmCi0gICAgZm9yIChpPTA7IGkgPCBUQUdfTEVOOyBpKyspIHsKLSAgICAgIGlmICh0bXBfdGFnW2ldICE9IGF1dGhfdGFnW2ldKSAKLQlyZXR1cm4gZXJyX3N0YXR1c19hdXRoX2ZhaWw7IAotICAgIH0KLQotICAgIC8qIGJ1bXAgZG93biB0aGUgb3BhcXVlX2xlbiB0byByZWZsZWN0IHRoZSBhdXRoZW50aWNhdGlvbiB0YWcgKi8KLSAgICAqb3BhcXVlX2xlbiAtPSBUQUdfTEVOOwotCi0gICAgLyogZGVjcnlwdCB0aGUgY29uZmlkZW50aWFsIGRhdGEgKi8KLSAgICBzdGF0dXMgPSBhZXNfY2JjX2NvbnRleHRfaW5pdCgmYWVzX2N0eCwga2V5LCBkaXJlY3Rpb25fZGVjcnlwdCk7Ci0gICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsKLSAgICBzdGF0dXMgPSBhZXNfY2JjX3NldF9pdigmYWVzX2N0eCwgaXYpOwotICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7Ci0KLSNpZiBERUJVRwotICAgIHByaW50ZigiY2lwaGVydGV4dDogJXNcbiIsIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKG9wYXF1ZSwgKm9wYXF1ZV9sZW4pKTsKLSAgICBwcmludGYoIml2OiAgICAgICAgICVzXG4iLCBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhpdiwgSVZfTEVOKSk7Ci0jZW5kaWYKLQotI2lmIEVOQwotICAgIHN0YXR1cyA9IGFlc19jYmNfbmlzdF9kZWNyeXB0KCZhZXNfY3R4LCBvcGFxdWUsICZjaXBoZXJ0ZXh0X2xlbik7Ci0gICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsKLSNlbmRpZgotCi0jaWYgREVCVUcKLSAgICBwcmludGYoInBsYWludGV4dCBsZW46ICAlZFxuIiwgY2lwaGVydGV4dF9sZW4pOwotICAgIHByaW50ZigicGxhaW50ZXh0OiAgJXNcbiIsIAotCSAgIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKG9wYXF1ZSwgY2lwaGVydGV4dF9sZW4pKTsKLSNlbmRpZgotCi0gICAgLyogaW5kaWNhdGUgdGhlIGxlbmd0aCBvZiB0aGUgcGxhaW50ZXh0ICAqLwotICAgICpvcGFxdWVfbGVuID0gY2lwaGVydGV4dF9sZW47Ci0gIH0KLQotICByZXR1cm4gZXJyX3N0YXR1c19vazsKLX0KLQotY3J5cHRvYWxnX2N0eF90IGNyeXB0b2FsZ19jdHggPSB7Ci0gIGFlc18xMjhfY2JjX2htYWNfc2hhMV85Nl9lbmMsCi0gIGFlc18xMjhfY2JjX2htYWNfc2hhMV85Nl9kZWMsCi0gIEtFWV9MRU4sCi0gIElWX0xFTiwKLSAgVEFHX0xFTiwKLSAgTUFYX0VYUEFORCwKLX07Ci0KLWNyeXB0b2FsZ190IGNyeXB0b2FsZyA9ICZjcnlwdG9hbGdfY3R4OwotCi0jZGVmaW5lIE5VTExfVEFHX0xFTiAxMgotCi1lcnJfc3RhdHVzX3QKLW51bGxfZW5jKHZvaWQgKmtleSwgICAgICAgICAgICAKLQkgY29uc3Qgdm9pZCAqY2xlYXIsICAgICAgICAgIAotCSB1bnNpZ25lZCBjbGVhcl9sZW4sICAgICAgIAotCSB2b2lkICppdiwgICAgICAgICAgICAgCi0JIHZvaWQgKm9wYXF1ZSwgICAgICAgICAKLQkgdW5zaWduZWQgKm9wYXF1ZV9sZW4pIHsKLSAgaW50IGk7Ci0gIHVuc2lnbmVkIGNoYXIgKmF1dGhfdGFnOwotICB1bnNpZ25lZCBjaGFyICppbml0X3ZlYyA9IGl2OwotCi0gIC8qIGNoZWNrIGlmIHdlJ3JlIGRvaW5nIGF1dGhlbnRpY2F0aW9uIG9ubHkgKi8KLSAgaWYgKChpdiA9PSBOVUxMKSAmJiAob3BhcXVlID09IE5VTEwpICYmIChvcGFxdWVfbGVuID09IE5VTEwpKSB7Ci0gICAgICAKLSAgICAgIC8qIHBlcmZvcm0gYXV0aGVudGljYXRpb24gb25seSAqLwotCi0gIH0gZWxzZSBpZiAoKGl2ID09IE5VTEwpIHx8IChvcGFxdWUgPT0gTlVMTCkgfHwgKG9wYXF1ZV9sZW4gPT0gTlVMTCkpIHsKLSAgICAKLSAgICAvKgotICAgICAqIGJhZCBwYXJhbWV0ZXIgLSB3ZSBleHBlY3QgZWl0aGVyIGFsbCB0aHJlZSBwb2ludGVycyB0byBiZSBOVUxMLAotICAgICAqIG9yIG5vbmUgb2YgdGhvc2UgcG9pbnRlcnMgdG8gYmUgTlVMTCAKLSAgICAgKi8KLSAgICByZXR1cm4gZXJyX3N0YXR1c19mYWlsOwotCi0gIH0gZWxzZSB7Ci0KLSAgICBwcmludGYoIk5VTEwgRU5DIHVzaW5nIGtleSAlc1xuIiwgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoa2V5LCBLRVlfTEVOKSk7Ci0gICAgcHJpbnRmKCJOVUxMX1RBR19MRU46ICAlZFxuIiwgTlVMTF9UQUdfTEVOKTsKLSAgICBwcmludGYoInBsYWludGV4dCBsZW46ICAlZFxuIiwgKm9wYXF1ZV9sZW4pOwotICAgIGZvciAoaT0wOyBpIDwgSVZfTEVOOyBpKyspCi0gICAgICBpbml0X3ZlY1tpXSA9IGkgKyAoaSAqIDE2KTsKLSAgICBwcmludGYoIml2OiAgICAgICAgICAgICAgICAlc1xuIiwgCi0JICAgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoaXYsIElWX0xFTikpOwotICAgIHByaW50ZigicGxhaW50ZXh0OiAgICAgICAgICVzXG4iLCAKLQkgICBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhvcGFxdWUsICpvcGFxdWVfbGVuKSk7Ci0gICAgYXV0aF90YWcgPSBvcGFxdWU7Ci0gICAgYXV0aF90YWcgKz0gKm9wYXF1ZV9sZW47Ci0gICAgZm9yIChpPTA7IGkgPCBOVUxMX1RBR19MRU47IGkrKykKLSAgICAgIGF1dGhfdGFnW2ldID0gaSArIChpICogMTYpOwotICAgICpvcGFxdWVfbGVuICs9IE5VTExfVEFHX0xFTjsKLSAgICBwcmludGYoInByb3RlY3RlZCBkYXRhIGxlbjogJWRcbiIsICpvcGFxdWVfbGVuKTsKLSAgICBwcmludGYoInByb3RlY3RlZCBkYXRhOiAgICAlc1xuIiwgCi0JICAgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcob3BhcXVlLCAqb3BhcXVlX2xlbikpOwotCi0gIH0KLQotICByZXR1cm4gZXJyX3N0YXR1c19vazsKLX0KLQotZXJyX3N0YXR1c190Ci1udWxsX2RlYyh2b2lkICprZXksICAgICAgICAgICAgCi0JIGNvbnN0IHZvaWQgKmNsZWFyLCAgICAgICAgICAKLQkgdW5zaWduZWQgY2xlYXJfbGVuLCAgICAgICAKLQkgdm9pZCAqaXYsICAgICAgICAgICAgIAotCSB2b2lkICpvcGFxdWUsICAgICAgICAgCi0JIHVuc2lnbmVkICpvcGFxdWVfbGVuKSB7Ci0gIHVuc2lnbmVkIGNoYXIgKmF1dGhfdGFnOwotICAKLSAgLyogY2hlY2sgaWYgd2UncmUgZG9pbmcgYXV0aGVudGljYXRpb24gb25seSAqLwotICBpZiAoKGl2ID09IE5VTEwpICYmIChvcGFxdWUgPT0gTlVMTCkgJiYgKG9wYXF1ZV9sZW4gPT0gTlVMTCkpIHsKLSAgICAgIAotICAgICAgLyogcGVyZm9ybSBhdXRoZW50aWNhdGlvbiBvbmx5ICovCi0KLSAgfSBlbHNlIGlmICgoaXYgPT0gTlVMTCkgfHwgKG9wYXF1ZSA9PSBOVUxMKSB8fCAob3BhcXVlX2xlbiA9PSBOVUxMKSkgewotICAgIAotICAgIC8qCi0gICAgICogYmFkIHBhcmFtZXRlciAtIHdlIGV4cGVjdCBlaXRoZXIgYWxsIHRocmVlIHBvaW50ZXJzIHRvIGJlIE5VTEwsCi0gICAgICogb3Igbm9uZSBvZiB0aG9zZSBwb2ludGVycyB0byBiZSBOVUxMIAotICAgICAqLwotICAgIHJldHVybiBlcnJfc3RhdHVzX2ZhaWw7Ci0KLSAgfSBlbHNlIHsKLQotICAgIHByaW50ZigiTlVMTCBERUMgdXNpbmcga2V5ICVzXG4iLCBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhrZXksIEtFWV9MRU4pKTsKLQotICAgIHByaW50ZigicHJvdGVjdGVkIGRhdGEgbGVuOiAlZFxuIiwgKm9wYXF1ZV9sZW4pOwotICAgIHByaW50ZigicHJvdGVjdGVkIGRhdGE6ICAgICVzXG4iLCAKLQkgICBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhvcGFxdWUsICpvcGFxdWVfbGVuKSk7Ci0gICAgYXV0aF90YWcgPSBvcGFxdWU7Ci0gICAgYXV0aF90YWcgKz0gKCpvcGFxdWVfbGVuIC0gTlVMTF9UQUdfTEVOKTsKLSAgICBwcmludGYoIml2OiAgICAgICAgICVzXG4iLCBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhpdiwgSVZfTEVOKSk7Ci0gICAgKm9wYXF1ZV9sZW4gLT0gTlVMTF9UQUdfTEVOOwotICAgIHByaW50ZigicGxhaW50ZXh0IGxlbjogICVkXG4iLCAqb3BhcXVlX2xlbik7Ci0gICAgcHJpbnRmKCJwbGFpbnRleHQ6ICAlc1xuIiwgCi0JICAgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcob3BhcXVlLCAqb3BhcXVlX2xlbikpOwotICB9Ci0KLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7Ci19Ci0KLWNyeXB0b2FsZ19jdHhfdCBudWxsX2NyeXB0b2FsZ19jdHggPSB7Ci0gIG51bGxfZW5jLAotICBudWxsX2RlYywKLSAgS0VZX0xFTiwKLSAgSVZfTEVOLAotICBOVUxMX1RBR19MRU4sCi0gIE1BWF9FWFBBTkQsCi19OwotCi1jcnlwdG9hbGdfdCBudWxsX2NyeXB0b2FsZyA9ICZudWxsX2NyeXB0b2FsZ19jdHg7Ci0KLWludAotY3J5cHRvYWxnX2dldF9pZChjcnlwdG9hbGdfdCBjKSB7Ci0gIGlmIChjID09IGNyeXB0b2FsZykKLSAgICByZXR1cm4gMTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWNyeXB0b2FsZ190IAotY3J5cHRvYWxnX2ZpbmRfYnlfaWQoaW50IGlkKSB7Ci0gIHN3aXRjaChpZCkgewotICBjYXNlIDE6Ci0gICAgcmV0dXJuIGNyeXB0b2FsZzsKLSAgZGVmYXVsdDoKLSAgICByZXR1cm4gMDsKLSAgfQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2NyeXB0by9jaXBoZXIvYWVzLmMgYi9jcnlwdG8vY2lwaGVyL2Flcy5jCmluZGV4IDRjYmVhZDAuLmM5Y2Q3NzQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jaXBoZXIvYWVzLmMKKysrIGIvY3J5cHRvL2NpcGhlci9hZXMuYwpAQCAtOCwyNiArOCwyNiBAQAogICovCiAKIC8qCi0gKgkKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA1LCBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMTcsIENpc2NvIFN5c3RlbXMsIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogCisgKgogICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCiAgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCiAgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAogICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKKyAqCiAgKiAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAgKiAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAorICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwpAQCAtNDMsMTIgKzQzLDE1IEBACiAgKgogICovCiAKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKIAogI2luY2x1ZGUgImFlcy5oIgogI2luY2x1ZGUgImVyci5oIgogCi0vKiAKLSAqIHdlIHVzZSB0aGUgdGFibGVzIFQwLCBUMSwgVDIsIFQzLCBhbmQgVDQgdG8gY29tcHV0ZSBBRVMsIGFuZCAKKy8qCisgKiB3ZSB1c2UgdGhlIHRhYmxlcyBUMCwgVDEsIFQyLCBUMywgYW5kIFQ0IHRvIGNvbXB1dGUgQUVTLCBhbmQKICAqIHRoZSB0YWJsZXMgVTAsIFUxLCBVMiwgYW5kIFU0IHRvIGNvbXB1dGUgaXRzIGludmVyc2UKICAqCiAgKiBkaWZmZXJlbnQgdGFibGVzIGFyZSB1c2VkIG9uIGxpdHRsZS1lbmRpYW4gKEludGVsLCBWTVMpIGFuZApAQCAtNTksMjExMCArNjIsMjEyOCBAQAogICogb3B0aW1pemF0aW9uIG9uIGEgZGlmZmVyZW50IHBsYXRmb3JtCiAgKi8KIAotI2lmIChXT1JEU19CSUdFTkRJQU4gPT0gMCkgLyogYXNzdW1lIGxpdHRsZSBlbmRpYW4gKi8KLQotdWludDMyX3QgVDBbMjU2XSA9IHsKLSAgMHhhNTYzNjNjNiwgMHg4NDdjN2NmOCwgMHg5OTc3NzdlZSwgMHg4ZDdiN2JmNiwgCi0gIDB4ZGYyZjJmZiwgMHhiZDZiNmJkNiwgMHhiMTZmNmZkZSwgMHg1NGM1YzU5MSwgCi0gIDB4NTAzMDMwNjAsIDB4MzAxMDEwMiwgMHhhOTY3NjdjZSwgMHg3ZDJiMmI1NiwgCi0gIDB4MTlmZWZlZTcsIDB4NjJkN2Q3YjUsIDB4ZTZhYmFiNGQsIDB4OWE3Njc2ZWMsIAotICAweDQ1Y2FjYThmLCAweDlkODI4MjFmLCAweDQwYzljOTg5LCAweDg3N2Q3ZGZhLCAKLSAgMHgxNWZhZmFlZiwgMHhlYjU5NTliMiwgMHhjOTQ3NDc4ZSwgMHhiZjBmMGZiLCAKLSAgMHhlY2FkYWQ0MSwgMHg2N2Q0ZDRiMywgMHhmZGEyYTI1ZiwgMHhlYWFmYWY0NSwgCi0gIDB4YmY5YzljMjMsIDB4ZjdhNGE0NTMsIDB4OTY3MjcyZTQsIDB4NWJjMGMwOWIsIAotICAweGMyYjdiNzc1LCAweDFjZmRmZGUxLCAweGFlOTM5MzNkLCAweDZhMjYyNjRjLCAKLSAgMHg1YTM2MzY2YywgMHg0MTNmM2Y3ZSwgMHgyZjdmN2Y1LCAweDRmY2NjYzgzLCAKLSAgMHg1YzM0MzQ2OCwgMHhmNGE1YTU1MSwgMHgzNGU1ZTVkMSwgMHg4ZjFmMWY5LCAKLSAgMHg5MzcxNzFlMiwgMHg3M2Q4ZDhhYiwgMHg1MzMxMzE2MiwgMHgzZjE1MTUyYSwgCi0gIDB4YzA0MDQwOCwgMHg1MmM3Yzc5NSwgMHg2NTIzMjM0NiwgMHg1ZWMzYzM5ZCwgCi0gIDB4MjgxODE4MzAsIDB4YTE5Njk2MzcsIDB4ZjA1MDUwYSwgMHhiNTlhOWEyZiwgCi0gIDB4OTA3MDcwZSwgMHgzNjEyMTIyNCwgMHg5YjgwODAxYiwgMHgzZGUyZTJkZiwgCi0gIDB4MjZlYmViY2QsIDB4NjkyNzI3NGUsIDB4Y2RiMmIyN2YsIDB4OWY3NTc1ZWEsIAotICAweDFiMDkwOTEyLCAweDllODM4MzFkLCAweDc0MmMyYzU4LCAweDJlMWExYTM0LCAKLSAgMHgyZDFiMWIzNiwgMHhiMjZlNmVkYywgMHhlZTVhNWFiNCwgMHhmYmEwYTA1YiwgCi0gIDB4ZjY1MjUyYTQsIDB4NGQzYjNiNzYsIDB4NjFkNmQ2YjcsIDB4Y2ViM2IzN2QsIAotICAweDdiMjkyOTUyLCAweDNlZTNlM2RkLCAweDcxMmYyZjVlLCAweDk3ODQ4NDEzLCAKLSAgMHhmNTUzNTNhNiwgMHg2OGQxZDFiOSwgMHgwLCAweDJjZWRlZGMxLCAKLSAgMHg2MDIwMjA0MCwgMHgxZmZjZmNlMywgMHhjOGIxYjE3OSwgMHhlZDViNWJiNiwgCi0gIDB4YmU2YTZhZDQsIDB4NDZjYmNiOGQsIDB4ZDliZWJlNjcsIDB4NGIzOTM5NzIsIAotICAweGRlNGE0YTk0LCAweGQ0NGM0Yzk4LCAweGU4NTg1OGIwLCAweDRhY2ZjZjg1LCAKLSAgMHg2YmQwZDBiYiwgMHgyYWVmZWZjNSwgMHhlNWFhYWE0ZiwgMHgxNmZiZmJlZCwgCi0gIDB4YzU0MzQzODYsIDB4ZDc0ZDRkOWEsIDB4NTUzMzMzNjYsIDB4OTQ4NTg1MTEsIAotICAweGNmNDU0NThhLCAweDEwZjlmOWU5LCAweDYwMjAyMDQsIDB4ODE3ZjdmZmUsIAotICAweGYwNTA1MGEwLCAweDQ0M2MzYzc4LCAweGJhOWY5ZjI1LCAweGUzYThhODRiLCAKLSAgMHhmMzUxNTFhMiwgMHhmZWEzYTM1ZCwgMHhjMDQwNDA4MCwgMHg4YThmOGYwNSwgCi0gIDB4YWQ5MjkyM2YsIDB4YmM5ZDlkMjEsIDB4NDgzODM4NzAsIDB4NGY1ZjVmMSwgCi0gIDB4ZGZiY2JjNjMsIDB4YzFiNmI2NzcsIDB4NzVkYWRhYWYsIDB4NjMyMTIxNDIsIAotICAweDMwMTAxMDIwLCAweDFhZmZmZmU1LCAweGVmM2YzZmQsIDB4NmRkMmQyYmYsIAotICAweDRjY2RjZDgxLCAweDE0MGMwYzE4LCAweDM1MTMxMzI2LCAweDJmZWNlY2MzLCAKLSAgMHhlMTVmNWZiZSwgMHhhMjk3OTczNSwgMHhjYzQ0NDQ4OCwgMHgzOTE3MTcyZSwgCi0gIDB4NTdjNGM0OTMsIDB4ZjJhN2E3NTUsIDB4ODI3ZTdlZmMsIDB4NDczZDNkN2EsIAotICAweGFjNjQ2NGM4LCAweGU3NWQ1ZGJhLCAweDJiMTkxOTMyLCAweDk1NzM3M2U2LCAKLSAgMHhhMDYwNjBjMCwgMHg5ODgxODExOSwgMHhkMTRmNGY5ZSwgMHg3ZmRjZGNhMywgCi0gIDB4NjYyMjIyNDQsIDB4N2UyYTJhNTQsIDB4YWI5MDkwM2IsIDB4ODM4ODg4MGIsIAotICAweGNhNDY0NjhjLCAweDI5ZWVlZWM3LCAweGQzYjhiODZiLCAweDNjMTQxNDI4LCAKLSAgMHg3OWRlZGVhNywgMHhlMjVlNWViYywgMHgxZDBiMGIxNiwgMHg3NmRiZGJhZCwgCi0gIDB4M2JlMGUwZGIsIDB4NTYzMjMyNjQsIDB4NGUzYTNhNzQsIDB4MWUwYTBhMTQsIAotICAweGRiNDk0OTkyLCAweGEwNjA2MGMsIDB4NmMyNDI0NDgsIDB4ZTQ1YzVjYjgsIAotICAweDVkYzJjMjlmLCAweDZlZDNkM2JkLCAweGVmYWNhYzQzLCAweGE2NjI2MmM0LCAKLSAgMHhhODkxOTEzOSwgMHhhNDk1OTUzMSwgMHgzN2U0ZTRkMywgMHg4Yjc5NzlmMiwgCi0gIDB4MzJlN2U3ZDUsIDB4NDNjOGM4OGIsIDB4NTkzNzM3NmUsIDB4Yjc2ZDZkZGEsIAotICAweDhjOGQ4ZDAxLCAweDY0ZDVkNWIxLCAweGQyNGU0ZTljLCAweGUwYTlhOTQ5LCAKLSAgMHhiNDZjNmNkOCwgMHhmYTU2NTZhYywgMHg3ZjRmNGYzLCAweDI1ZWFlYWNmLCAKLSAgMHhhZjY1NjVjYSwgMHg4ZTdhN2FmNCwgMHhlOWFlYWU0NywgMHgxODA4MDgxMCwgCi0gIDB4ZDViYWJhNmYsIDB4ODg3ODc4ZjAsIDB4NmYyNTI1NGEsIDB4NzIyZTJlNWMsIAotICAweDI0MWMxYzM4LCAweGYxYTZhNjU3LCAweGM3YjRiNDczLCAweDUxYzZjNjk3LCAKLSAgMHgyM2U4ZThjYiwgMHg3Y2RkZGRhMSwgMHg5Yzc0NzRlOCwgMHgyMTFmMWYzZSwgCi0gIDB4ZGQ0YjRiOTYsIDB4ZGNiZGJkNjEsIDB4ODY4YjhiMGQsIDB4ODU4YThhMGYsIAotICAweDkwNzA3MGUwLCAweDQyM2UzZTdjLCAweGM0YjViNTcxLCAweGFhNjY2NmNjLCAKLSAgMHhkODQ4NDg5MCwgMHg1MDMwMzA2LCAweDFmNmY2ZjcsIDB4MTIwZTBlMWMsIAotICAweGEzNjE2MWMyLCAweDVmMzUzNTZhLCAweGY5NTc1N2FlLCAweGQwYjliOTY5LCAKLSAgMHg5MTg2ODYxNywgMHg1OGMxYzE5OSwgMHgyNzFkMWQzYSwgMHhiOTllOWUyNywgCi0gIDB4MzhlMWUxZDksIDB4MTNmOGY4ZWIsIDB4YjM5ODk4MmIsIDB4MzMxMTExMjIsIAotICAweGJiNjk2OWQyLCAweDcwZDlkOWE5LCAweDg5OGU4ZTA3LCAweGE3OTQ5NDMzLCAKLSAgMHhiNjliOWIyZCwgMHgyMjFlMWUzYywgMHg5Mjg3ODcxNSwgMHgyMGU5ZTljOSwgCi0gIDB4NDljZWNlODcsIDB4ZmY1NTU1YWEsIDB4NzgyODI4NTAsIDB4N2FkZmRmYTUsIAotICAweDhmOGM4YzAzLCAweGY4YTFhMTU5LCAweDgwODk4OTA5LCAweDE3MGQwZDFhLCAKLSAgMHhkYWJmYmY2NSwgMHgzMWU2ZTZkNywgMHhjNjQyNDI4NCwgMHhiODY4NjhkMCwgCi0gIDB4YzM0MTQxODIsIDB4YjA5OTk5MjksIDB4NzcyZDJkNWEsIDB4MTEwZjBmMWUsIAotICAweGNiYjBiMDdiLCAweGZjNTQ1NGE4LCAweGQ2YmJiYjZkLCAweDNhMTYxNjJjLCAKKyNpZm5kZWYgV09SRFNfQklHRU5ESUFOCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgY29uc3QgdWludDMyX3QgVDBbMjU2XSA9IHsKKyAgICAweGE1NjM2M2M2LCAweDg0N2M3Y2Y4LCAgMHg5OTc3NzdlZSwgIDB4OGQ3YjdiZjYsCisgICAgMHhkZjJmMmZmLCAgMHhiZDZiNmJkNiwgIDB4YjE2ZjZmZGUsICAweDU0YzVjNTkxLAorICAgIDB4NTAzMDMwNjAsIDB4MzAxMDEwMiwgICAweGE5Njc2N2NlLCAgMHg3ZDJiMmI1NiwKKyAgICAweDE5ZmVmZWU3LCAweDYyZDdkN2I1LCAgMHhlNmFiYWI0ZCwgIDB4OWE3Njc2ZWMsCisgICAgMHg0NWNhY2E4ZiwgMHg5ZDgyODIxZiwgIDB4NDBjOWM5ODksICAweDg3N2Q3ZGZhLAorICAgIDB4MTVmYWZhZWYsIDB4ZWI1OTU5YjIsICAweGM5NDc0NzhlLCAgMHhiZjBmMGZiLAorICAgIDB4ZWNhZGFkNDEsIDB4NjdkNGQ0YjMsICAweGZkYTJhMjVmLCAgMHhlYWFmYWY0NSwKKyAgICAweGJmOWM5YzIzLCAweGY3YTRhNDUzLCAgMHg5NjcyNzJlNCwgIDB4NWJjMGMwOWIsCisgICAgMHhjMmI3Yjc3NSwgMHgxY2ZkZmRlMSwgIDB4YWU5MzkzM2QsICAweDZhMjYyNjRjLAorICAgIDB4NWEzNjM2NmMsIDB4NDEzZjNmN2UsICAweDJmN2Y3ZjUsICAgMHg0ZmNjY2M4MywKKyAgICAweDVjMzQzNDY4LCAweGY0YTVhNTUxLCAgMHgzNGU1ZTVkMSwgIDB4OGYxZjFmOSwKKyAgICAweDkzNzE3MWUyLCAweDczZDhkOGFiLCAgMHg1MzMxMzE2MiwgIDB4M2YxNTE1MmEsCisgICAgMHhjMDQwNDA4LCAgMHg1MmM3Yzc5NSwgIDB4NjUyMzIzNDYsICAweDVlYzNjMzlkLAorICAgIDB4MjgxODE4MzAsIDB4YTE5Njk2MzcsICAweGYwNTA1MGEsICAgMHhiNTlhOWEyZiwKKyAgICAweDkwNzA3MGUsICAweDM2MTIxMjI0LCAgMHg5YjgwODAxYiwgIDB4M2RlMmUyZGYsCisgICAgMHgyNmViZWJjZCwgMHg2OTI3Mjc0ZSwgIDB4Y2RiMmIyN2YsICAweDlmNzU3NWVhLAorICAgIDB4MWIwOTA5MTIsIDB4OWU4MzgzMWQsICAweDc0MmMyYzU4LCAgMHgyZTFhMWEzNCwKKyAgICAweDJkMWIxYjM2LCAweGIyNmU2ZWRjLCAgMHhlZTVhNWFiNCwgIDB4ZmJhMGEwNWIsCisgICAgMHhmNjUyNTJhNCwgMHg0ZDNiM2I3NiwgIDB4NjFkNmQ2YjcsICAweGNlYjNiMzdkLAorICAgIDB4N2IyOTI5NTIsIDB4M2VlM2UzZGQsICAweDcxMmYyZjVlLCAgMHg5Nzg0ODQxMywKKyAgICAweGY1NTM1M2E2LCAweDY4ZDFkMWI5LCAgMHgwLCAgICAgICAgIDB4MmNlZGVkYzEsCisgICAgMHg2MDIwMjA0MCwgMHgxZmZjZmNlMywgIDB4YzhiMWIxNzksICAweGVkNWI1YmI2LAorICAgIDB4YmU2YTZhZDQsIDB4NDZjYmNiOGQsICAweGQ5YmViZTY3LCAgMHg0YjM5Mzk3MiwKKyAgICAweGRlNGE0YTk0LCAweGQ0NGM0Yzk4LCAgMHhlODU4NThiMCwgIDB4NGFjZmNmODUsCisgICAgMHg2YmQwZDBiYiwgMHgyYWVmZWZjNSwgIDB4ZTVhYWFhNGYsICAweDE2ZmJmYmVkLAorICAgIDB4YzU0MzQzODYsIDB4ZDc0ZDRkOWEsICAweDU1MzMzMzY2LCAgMHg5NDg1ODUxMSwKKyAgICAweGNmNDU0NThhLCAweDEwZjlmOWU5LCAgMHg2MDIwMjA0LCAgIDB4ODE3ZjdmZmUsCisgICAgMHhmMDUwNTBhMCwgMHg0NDNjM2M3OCwgIDB4YmE5ZjlmMjUsICAweGUzYThhODRiLAorICAgIDB4ZjM1MTUxYTIsIDB4ZmVhM2EzNWQsICAweGMwNDA0MDgwLCAgMHg4YThmOGYwNSwKKyAgICAweGFkOTI5MjNmLCAweGJjOWQ5ZDIxLCAgMHg0ODM4Mzg3MCwgIDB4NGY1ZjVmMSwKKyAgICAweGRmYmNiYzYzLCAweGMxYjZiNjc3LCAgMHg3NWRhZGFhZiwgIDB4NjMyMTIxNDIsCisgICAgMHgzMDEwMTAyMCwgMHgxYWZmZmZlNSwgIDB4ZWYzZjNmZCwgICAweDZkZDJkMmJmLAorICAgIDB4NGNjZGNkODEsIDB4MTQwYzBjMTgsICAweDM1MTMxMzI2LCAgMHgyZmVjZWNjMywKKyAgICAweGUxNWY1ZmJlLCAweGEyOTc5NzM1LCAgMHhjYzQ0NDQ4OCwgIDB4MzkxNzE3MmUsCisgICAgMHg1N2M0YzQ5MywgMHhmMmE3YTc1NSwgIDB4ODI3ZTdlZmMsICAweDQ3M2QzZDdhLAorICAgIDB4YWM2NDY0YzgsIDB4ZTc1ZDVkYmEsICAweDJiMTkxOTMyLCAgMHg5NTczNzNlNiwKKyAgICAweGEwNjA2MGMwLCAweDk4ODE4MTE5LCAgMHhkMTRmNGY5ZSwgIDB4N2ZkY2RjYTMsCisgICAgMHg2NjIyMjI0NCwgMHg3ZTJhMmE1NCwgIDB4YWI5MDkwM2IsICAweDgzODg4ODBiLAorICAgIDB4Y2E0NjQ2OGMsIDB4MjllZWVlYzcsICAweGQzYjhiODZiLCAgMHgzYzE0MTQyOCwKKyAgICAweDc5ZGVkZWE3LCAweGUyNWU1ZWJjLCAgMHgxZDBiMGIxNiwgIDB4NzZkYmRiYWQsCisgICAgMHgzYmUwZTBkYiwgMHg1NjMyMzI2NCwgIDB4NGUzYTNhNzQsICAweDFlMGEwYTE0LAorICAgIDB4ZGI0OTQ5OTIsIDB4YTA2MDYwYywgICAweDZjMjQyNDQ4LCAgMHhlNDVjNWNiOCwKKyAgICAweDVkYzJjMjlmLCAweDZlZDNkM2JkLCAgMHhlZmFjYWM0MywgIDB4YTY2MjYyYzQsCisgICAgMHhhODkxOTEzOSwgMHhhNDk1OTUzMSwgIDB4MzdlNGU0ZDMsICAweDhiNzk3OWYyLAorICAgIDB4MzJlN2U3ZDUsIDB4NDNjOGM4OGIsICAweDU5MzczNzZlLCAgMHhiNzZkNmRkYSwKKyAgICAweDhjOGQ4ZDAxLCAweDY0ZDVkNWIxLCAgMHhkMjRlNGU5YywgIDB4ZTBhOWE5NDksCisgICAgMHhiNDZjNmNkOCwgMHhmYTU2NTZhYywgIDB4N2Y0ZjRmMywgICAweDI1ZWFlYWNmLAorICAgIDB4YWY2NTY1Y2EsIDB4OGU3YTdhZjQsICAweGU5YWVhZTQ3LCAgMHgxODA4MDgxMCwKKyAgICAweGQ1YmFiYTZmLCAweDg4Nzg3OGYwLCAgMHg2ZjI1MjU0YSwgIDB4NzIyZTJlNWMsCisgICAgMHgyNDFjMWMzOCwgMHhmMWE2YTY1NywgIDB4YzdiNGI0NzMsICAweDUxYzZjNjk3LAorICAgIDB4MjNlOGU4Y2IsIDB4N2NkZGRkYTEsICAweDljNzQ3NGU4LCAgMHgyMTFmMWYzZSwKKyAgICAweGRkNGI0Yjk2LCAweGRjYmRiZDYxLCAgMHg4NjhiOGIwZCwgIDB4ODU4YThhMGYsCisgICAgMHg5MDcwNzBlMCwgMHg0MjNlM2U3YywgIDB4YzRiNWI1NzEsICAweGFhNjY2NmNjLAorICAgIDB4ZDg0ODQ4OTAsIDB4NTAzMDMwNiwgICAweDFmNmY2ZjcsICAgMHgxMjBlMGUxYywKKyAgICAweGEzNjE2MWMyLCAweDVmMzUzNTZhLCAgMHhmOTU3NTdhZSwgIDB4ZDBiOWI5NjksCisgICAgMHg5MTg2ODYxNywgMHg1OGMxYzE5OSwgIDB4MjcxZDFkM2EsICAweGI5OWU5ZTI3LAorICAgIDB4MzhlMWUxZDksIDB4MTNmOGY4ZWIsICAweGIzOTg5ODJiLCAgMHgzMzExMTEyMiwKKyAgICAweGJiNjk2OWQyLCAweDcwZDlkOWE5LCAgMHg4OThlOGUwNywgIDB4YTc5NDk0MzMsCisgICAgMHhiNjliOWIyZCwgMHgyMjFlMWUzYywgIDB4OTI4Nzg3MTUsICAweDIwZTllOWM5LAorICAgIDB4NDljZWNlODcsIDB4ZmY1NTU1YWEsICAweDc4MjgyODUwLCAgMHg3YWRmZGZhNSwKKyAgICAweDhmOGM4YzAzLCAweGY4YTFhMTU5LCAgMHg4MDg5ODkwOSwgIDB4MTcwZDBkMWEsCisgICAgMHhkYWJmYmY2NSwgMHgzMWU2ZTZkNywgIDB4YzY0MjQyODQsICAweGI4Njg2OGQwLAorICAgIDB4YzM0MTQxODIsIDB4YjA5OTk5MjksICAweDc3MmQyZDVhLCAgMHgxMTBmMGYxZSwKKyAgICAweGNiYjBiMDdiLCAweGZjNTQ1NGE4LCAgMHhkNmJiYmI2ZCwgIDB4M2ExNjE2MmMsCiB9OworLyogY2xhbmctZm9ybWF0IG9uICovCiAKLXVpbnQzMl90IFQxWzI1Nl0gPSB7Ci0gIDB4NjM2M2M2YTUsIDB4N2M3Y2Y4ODQsIDB4Nzc3N2VlOTksIDB4N2I3YmY2OGQsIAotICAweGYyZjJmZjBkLCAweDZiNmJkNmJkLCAweDZmNmZkZWIxLCAweGM1YzU5MTU0LCAKLSAgMHgzMDMwNjA1MCwgMHgxMDEwMjAzLCAweDY3NjdjZWE5LCAweDJiMmI1NjdkLCAKLSAgMHhmZWZlZTcxOSwgMHhkN2Q3YjU2MiwgMHhhYmFiNGRlNiwgMHg3Njc2ZWM5YSwgCi0gIDB4Y2FjYThmNDUsIDB4ODI4MjFmOWQsIDB4YzljOTg5NDAsIDB4N2Q3ZGZhODcsIAotICAweGZhZmFlZjE1LCAweDU5NTliMmViLCAweDQ3NDc4ZWM5LCAweGYwZjBmYjBiLCAKLSAgMHhhZGFkNDFlYywgMHhkNGQ0YjM2NywgMHhhMmEyNWZmZCwgMHhhZmFmNDVlYSwgCi0gIDB4OWM5YzIzYmYsIDB4YTRhNDUzZjcsIDB4NzI3MmU0OTYsIDB4YzBjMDliNWIsIAotICAweGI3Yjc3NWMyLCAweGZkZmRlMTFjLCAweDkzOTMzZGFlLCAweDI2MjY0YzZhLCAKLSAgMHgzNjM2NmM1YSwgMHgzZjNmN2U0MSwgMHhmN2Y3ZjUwMiwgMHhjY2NjODM0ZiwgCi0gIDB4MzQzNDY4NWMsIDB4YTVhNTUxZjQsIDB4ZTVlNWQxMzQsIDB4ZjFmMWY5MDgsIAotICAweDcxNzFlMjkzLCAweGQ4ZDhhYjczLCAweDMxMzE2MjUzLCAweDE1MTUyYTNmLCAKLSAgMHg0MDQwODBjLCAweGM3Yzc5NTUyLCAweDIzMjM0NjY1LCAweGMzYzM5ZDVlLCAKLSAgMHgxODE4MzAyOCwgMHg5Njk2MzdhMSwgMHg1MDUwYTBmLCAweDlhOWEyZmI1LCAKLSAgMHg3MDcwZTA5LCAweDEyMTIyNDM2LCAweDgwODAxYjliLCAweGUyZTJkZjNkLCAKLSAgMHhlYmViY2QyNiwgMHgyNzI3NGU2OSwgMHhiMmIyN2ZjZCwgMHg3NTc1ZWE5ZiwgCi0gIDB4OTA5MTIxYiwgMHg4MzgzMWQ5ZSwgMHgyYzJjNTg3NCwgMHgxYTFhMzQyZSwgCi0gIDB4MWIxYjM2MmQsIDB4NmU2ZWRjYjIsIDB4NWE1YWI0ZWUsIDB4YTBhMDViZmIsIAotICAweDUyNTJhNGY2LCAweDNiM2I3NjRkLCAweGQ2ZDZiNzYxLCAweGIzYjM3ZGNlLCAKLSAgMHgyOTI5NTI3YiwgMHhlM2UzZGQzZSwgMHgyZjJmNWU3MSwgMHg4NDg0MTM5NywgCi0gIDB4NTM1M2E2ZjUsIDB4ZDFkMWI5NjgsIDB4MDAwMDAwMDAsIDB4ZWRlZGMxMmMsIAotICAweDIwMjA0MDYwLCAweGZjZmNlMzFmLCAweGIxYjE3OWM4LCAweDViNWJiNmVkLCAKLSAgMHg2YTZhZDRiZSwgMHhjYmNiOGQ0NiwgMHhiZWJlNjdkOSwgMHgzOTM5NzI0YiwgCi0gIDB4NGE0YTk0ZGUsIDB4NGM0Yzk4ZDQsIDB4NTg1OGIwZTgsIDB4Y2ZjZjg1NGEsIAotICAweGQwZDBiYjZiLCAweGVmZWZjNTJhLCAweGFhYWE0ZmU1LCAweGZiZmJlZDE2LCAKLSAgMHg0MzQzODZjNSwgMHg0ZDRkOWFkNywgMHgzMzMzNjY1NSwgMHg4NTg1MTE5NCwgCi0gIDB4NDU0NThhY2YsIDB4ZjlmOWU5MTAsIDB4MjAyMDQwNiwgMHg3ZjdmZmU4MSwgCi0gIDB4NTA1MGEwZjAsIDB4M2MzYzc4NDQsIDB4OWY5ZjI1YmEsIDB4YThhODRiZTMsIAotICAweDUxNTFhMmYzLCAweGEzYTM1ZGZlLCAweDQwNDA4MGMwLCAweDhmOGYwNThhLCAKLSAgMHg5MjkyM2ZhZCwgMHg5ZDlkMjFiYywgMHgzODM4NzA0OCwgMHhmNWY1ZjEwNCwgCi0gIDB4YmNiYzYzZGYsIDB4YjZiNjc3YzEsIDB4ZGFkYWFmNzUsIDB4MjEyMTQyNjMsIAotICAweDEwMTAyMDMwLCAweGZmZmZlNTFhLCAweGYzZjNmZDBlLCAweGQyZDJiZjZkLCAKLSAgMHhjZGNkODE0YywgMHhjMGMxODE0LCAweDEzMTMyNjM1LCAweGVjZWNjMzJmLCAKLSAgMHg1ZjVmYmVlMSwgMHg5Nzk3MzVhMiwgMHg0NDQ0ODhjYywgMHgxNzE3MmUzOSwgCi0gIDB4YzRjNDkzNTcsIDB4YTdhNzU1ZjIsIDB4N2U3ZWZjODIsIDB4M2QzZDdhNDcsIAotICAweDY0NjRjOGFjLCAweDVkNWRiYWU3LCAweDE5MTkzMjJiLCAweDczNzNlNjk1LCAKLSAgMHg2MDYwYzBhMCwgMHg4MTgxMTk5OCwgMHg0ZjRmOWVkMSwgMHhkY2RjYTM3ZiwgCi0gIDB4MjIyMjQ0NjYsIDB4MmEyYTU0N2UsIDB4OTA5MDNiYWIsIDB4ODg4ODBiODMsIAotICAweDQ2NDY4Y2NhLCAweGVlZWVjNzI5LCAweGI4Yjg2YmQzLCAweDE0MTQyODNjLCAKLSAgMHhkZWRlYTc3OSwgMHg1ZTVlYmNlMiwgMHhiMGIxNjFkLCAweGRiZGJhZDc2LCAKLSAgMHhlMGUwZGIzYiwgMHgzMjMyNjQ1NiwgMHgzYTNhNzQ0ZSwgMHhhMGExNDFlLCAKLSAgMHg0OTQ5OTJkYiwgMHg2MDYwYzBhLCAweDI0MjQ0ODZjLCAweDVjNWNiOGU0LCAKLSAgMHhjMmMyOWY1ZCwgMHhkM2QzYmQ2ZSwgMHhhY2FjNDNlZiwgMHg2MjYyYzRhNiwgCi0gIDB4OTE5MTM5YTgsIDB4OTU5NTMxYTQsIDB4ZTRlNGQzMzcsIDB4Nzk3OWYyOGIsIAotICAweGU3ZTdkNTMyLCAweGM4Yzg4YjQzLCAweDM3Mzc2ZTU5LCAweDZkNmRkYWI3LCAKLSAgMHg4ZDhkMDE4YywgMHhkNWQ1YjE2NCwgMHg0ZTRlOWNkMiwgMHhhOWE5NDllMCwgCi0gIDB4NmM2Y2Q4YjQsIDB4NTY1NmFjZmEsIDB4ZjRmNGYzMDcsIDB4ZWFlYWNmMjUsIAotICAweDY1NjVjYWFmLCAweDdhN2FmNDhlLCAweGFlYWU0N2U5LCAweDgwODEwMTgsIAotICAweGJhYmE2ZmQ1LCAweDc4NzhmMDg4LCAweDI1MjU0YTZmLCAweDJlMmU1YzcyLCAKLSAgMHgxYzFjMzgyNCwgMHhhNmE2NTdmMSwgMHhiNGI0NzNjNywgMHhjNmM2OTc1MSwgCi0gIDB4ZThlOGNiMjMsIDB4ZGRkZGExN2MsIDB4NzQ3NGU4OWMsIDB4MWYxZjNlMjEsIAotICAweDRiNGI5NmRkLCAweGJkYmQ2MWRjLCAweDhiOGIwZDg2LCAweDhhOGEwZjg1LCAKLSAgMHg3MDcwZTA5MCwgMHgzZTNlN2M0MiwgMHhiNWI1NzFjNCwgMHg2NjY2Y2NhYSwgCi0gIDB4NDg0ODkwZDgsIDB4MzAzMDYwNSwgMHhmNmY2ZjcwMSwgMHhlMGUxYzEyLCAKLSAgMHg2MTYxYzJhMywgMHgzNTM1NmE1ZiwgMHg1NzU3YWVmOSwgMHhiOWI5NjlkMCwgCi0gIDB4ODY4NjE3OTEsIDB4YzFjMTk5NTgsIDB4MWQxZDNhMjcsIDB4OWU5ZTI3YjksIAotICAweGUxZTFkOTM4LCAweGY4ZjhlYjEzLCAweDk4OTgyYmIzLCAweDExMTEyMjMzLCAKLSAgMHg2OTY5ZDJiYiwgMHhkOWQ5YTk3MCwgMHg4ZThlMDc4OSwgMHg5NDk0MzNhNywgCi0gIDB4OWI5YjJkYjYsIDB4MWUxZTNjMjIsIDB4ODc4NzE1OTIsIDB4ZTllOWM5MjAsIAotICAweGNlY2U4NzQ5LCAweDU1NTVhYWZmLCAweDI4Mjg1MDc4LCAweGRmZGZhNTdhLCAKLSAgMHg4YzhjMDM4ZiwgMHhhMWExNTlmOCwgMHg4OTg5MDk4MCwgMHhkMGQxYTE3LCAKLSAgMHhiZmJmNjVkYSwgMHhlNmU2ZDczMSwgMHg0MjQyODRjNiwgMHg2ODY4ZDBiOCwgCi0gIDB4NDE0MTgyYzMsIDB4OTk5OTI5YjAsIDB4MmQyZDVhNzcsIDB4ZjBmMWUxMSwgCi0gIDB4YjBiMDdiY2IsIDB4NTQ1NGE4ZmMsIDB4YmJiYjZkZDYsIDB4MTYxNjJjM2EsIAorLyogY2xhbmctZm9ybWF0IG9mZiAqLworc3RhdGljIGNvbnN0IHVpbnQzMl90IFQxWzI1Nl0gPSB7CisgICAgMHg2MzYzYzZhNSwgMHg3YzdjZjg4NCwgIDB4Nzc3N2VlOTksICAweDdiN2JmNjhkLAorICAgIDB4ZjJmMmZmMGQsIDB4NmI2YmQ2YmQsICAweDZmNmZkZWIxLCAgMHhjNWM1OTE1NCwKKyAgICAweDMwMzA2MDUwLCAweDEwMTAyMDMsICAgMHg2NzY3Y2VhOSwgIDB4MmIyYjU2N2QsCisgICAgMHhmZWZlZTcxOSwgMHhkN2Q3YjU2MiwgIDB4YWJhYjRkZTYsICAweDc2NzZlYzlhLAorICAgIDB4Y2FjYThmNDUsIDB4ODI4MjFmOWQsICAweGM5Yzk4OTQwLCAgMHg3ZDdkZmE4NywKKyAgICAweGZhZmFlZjE1LCAweDU5NTliMmViLCAgMHg0NzQ3OGVjOSwgIDB4ZjBmMGZiMGIsCisgICAgMHhhZGFkNDFlYywgMHhkNGQ0YjM2NywgIDB4YTJhMjVmZmQsICAweGFmYWY0NWVhLAorICAgIDB4OWM5YzIzYmYsIDB4YTRhNDUzZjcsICAweDcyNzJlNDk2LCAgMHhjMGMwOWI1YiwKKyAgICAweGI3Yjc3NWMyLCAweGZkZmRlMTFjLCAgMHg5MzkzM2RhZSwgIDB4MjYyNjRjNmEsCisgICAgMHgzNjM2NmM1YSwgMHgzZjNmN2U0MSwgIDB4ZjdmN2Y1MDIsICAweGNjY2M4MzRmLAorICAgIDB4MzQzNDY4NWMsIDB4YTVhNTUxZjQsICAweGU1ZTVkMTM0LCAgMHhmMWYxZjkwOCwKKyAgICAweDcxNzFlMjkzLCAweGQ4ZDhhYjczLCAgMHgzMTMxNjI1MywgIDB4MTUxNTJhM2YsCisgICAgMHg0MDQwODBjLCAgMHhjN2M3OTU1MiwgIDB4MjMyMzQ2NjUsICAweGMzYzM5ZDVlLAorICAgIDB4MTgxODMwMjgsIDB4OTY5NjM3YTEsICAweDUwNTBhMGYsICAgMHg5YTlhMmZiNSwKKyAgICAweDcwNzBlMDksICAweDEyMTIyNDM2LCAgMHg4MDgwMWI5YiwgIDB4ZTJlMmRmM2QsCisgICAgMHhlYmViY2QyNiwgMHgyNzI3NGU2OSwgIDB4YjJiMjdmY2QsICAweDc1NzVlYTlmLAorICAgIDB4OTA5MTIxYiwgIDB4ODM4MzFkOWUsICAweDJjMmM1ODc0LCAgMHgxYTFhMzQyZSwKKyAgICAweDFiMWIzNjJkLCAweDZlNmVkY2IyLCAgMHg1YTVhYjRlZSwgIDB4YTBhMDViZmIsCisgICAgMHg1MjUyYTRmNiwgMHgzYjNiNzY0ZCwgIDB4ZDZkNmI3NjEsICAweGIzYjM3ZGNlLAorICAgIDB4MjkyOTUyN2IsIDB4ZTNlM2RkM2UsICAweDJmMmY1ZTcxLCAgMHg4NDg0MTM5NywKKyAgICAweDUzNTNhNmY1LCAweGQxZDFiOTY4LCAgMHgwMDAwMDAwMCwgIDB4ZWRlZGMxMmMsCisgICAgMHgyMDIwNDA2MCwgMHhmY2ZjZTMxZiwgIDB4YjFiMTc5YzgsICAweDViNWJiNmVkLAorICAgIDB4NmE2YWQ0YmUsIDB4Y2JjYjhkNDYsICAweGJlYmU2N2Q5LCAgMHgzOTM5NzI0YiwKKyAgICAweDRhNGE5NGRlLCAweDRjNGM5OGQ0LCAgMHg1ODU4YjBlOCwgIDB4Y2ZjZjg1NGEsCisgICAgMHhkMGQwYmI2YiwgMHhlZmVmYzUyYSwgIDB4YWFhYTRmZTUsICAweGZiZmJlZDE2LAorICAgIDB4NDM0Mzg2YzUsIDB4NGQ0ZDlhZDcsICAweDMzMzM2NjU1LCAgMHg4NTg1MTE5NCwKKyAgICAweDQ1NDU4YWNmLCAweGY5ZjllOTEwLCAgMHgyMDIwNDA2LCAgIDB4N2Y3ZmZlODEsCisgICAgMHg1MDUwYTBmMCwgMHgzYzNjNzg0NCwgIDB4OWY5ZjI1YmEsICAweGE4YTg0YmUzLAorICAgIDB4NTE1MWEyZjMsIDB4YTNhMzVkZmUsICAweDQwNDA4MGMwLCAgMHg4ZjhmMDU4YSwKKyAgICAweDkyOTIzZmFkLCAweDlkOWQyMWJjLCAgMHgzODM4NzA0OCwgIDB4ZjVmNWYxMDQsCisgICAgMHhiY2JjNjNkZiwgMHhiNmI2NzdjMSwgIDB4ZGFkYWFmNzUsICAweDIxMjE0MjYzLAorICAgIDB4MTAxMDIwMzAsIDB4ZmZmZmU1MWEsICAweGYzZjNmZDBlLCAgMHhkMmQyYmY2ZCwKKyAgICAweGNkY2Q4MTRjLCAweGMwYzE4MTQsICAgMHgxMzEzMjYzNSwgIDB4ZWNlY2MzMmYsCisgICAgMHg1ZjVmYmVlMSwgMHg5Nzk3MzVhMiwgIDB4NDQ0NDg4Y2MsICAweDE3MTcyZTM5LAorICAgIDB4YzRjNDkzNTcsIDB4YTdhNzU1ZjIsICAweDdlN2VmYzgyLCAgMHgzZDNkN2E0NywKKyAgICAweDY0NjRjOGFjLCAweDVkNWRiYWU3LCAgMHgxOTE5MzIyYiwgIDB4NzM3M2U2OTUsCisgICAgMHg2MDYwYzBhMCwgMHg4MTgxMTk5OCwgIDB4NGY0ZjllZDEsICAweGRjZGNhMzdmLAorICAgIDB4MjIyMjQ0NjYsIDB4MmEyYTU0N2UsICAweDkwOTAzYmFiLCAgMHg4ODg4MGI4MywKKyAgICAweDQ2NDY4Y2NhLCAweGVlZWVjNzI5LCAgMHhiOGI4NmJkMywgIDB4MTQxNDI4M2MsCisgICAgMHhkZWRlYTc3OSwgMHg1ZTVlYmNlMiwgIDB4YjBiMTYxZCwgICAweGRiZGJhZDc2LAorICAgIDB4ZTBlMGRiM2IsIDB4MzIzMjY0NTYsICAweDNhM2E3NDRlLCAgMHhhMGExNDFlLAorICAgIDB4NDk0OTkyZGIsIDB4NjA2MGMwYSwgICAweDI0MjQ0ODZjLCAgMHg1YzVjYjhlNCwKKyAgICAweGMyYzI5ZjVkLCAweGQzZDNiZDZlLCAgMHhhY2FjNDNlZiwgIDB4NjI2MmM0YTYsCisgICAgMHg5MTkxMzlhOCwgMHg5NTk1MzFhNCwgIDB4ZTRlNGQzMzcsICAweDc5NzlmMjhiLAorICAgIDB4ZTdlN2Q1MzIsIDB4YzhjODhiNDMsICAweDM3Mzc2ZTU5LCAgMHg2ZDZkZGFiNywKKyAgICAweDhkOGQwMThjLCAweGQ1ZDViMTY0LCAgMHg0ZTRlOWNkMiwgIDB4YTlhOTQ5ZTAsCisgICAgMHg2YzZjZDhiNCwgMHg1NjU2YWNmYSwgIDB4ZjRmNGYzMDcsICAweGVhZWFjZjI1LAorICAgIDB4NjU2NWNhYWYsIDB4N2E3YWY0OGUsICAweGFlYWU0N2U5LCAgMHg4MDgxMDE4LAorICAgIDB4YmFiYTZmZDUsIDB4Nzg3OGYwODgsICAweDI1MjU0YTZmLCAgMHgyZTJlNWM3MiwKKyAgICAweDFjMWMzODI0LCAweGE2YTY1N2YxLCAgMHhiNGI0NzNjNywgIDB4YzZjNjk3NTEsCisgICAgMHhlOGU4Y2IyMywgMHhkZGRkYTE3YywgIDB4NzQ3NGU4OWMsICAweDFmMWYzZTIxLAorICAgIDB4NGI0Yjk2ZGQsIDB4YmRiZDYxZGMsICAweDhiOGIwZDg2LCAgMHg4YThhMGY4NSwKKyAgICAweDcwNzBlMDkwLCAweDNlM2U3YzQyLCAgMHhiNWI1NzFjNCwgIDB4NjY2NmNjYWEsCisgICAgMHg0ODQ4OTBkOCwgMHgzMDMwNjA1LCAgIDB4ZjZmNmY3MDEsICAweGUwZTFjMTIsCisgICAgMHg2MTYxYzJhMywgMHgzNTM1NmE1ZiwgIDB4NTc1N2FlZjksICAweGI5Yjk2OWQwLAorICAgIDB4ODY4NjE3OTEsIDB4YzFjMTk5NTgsICAweDFkMWQzYTI3LCAgMHg5ZTllMjdiOSwKKyAgICAweGUxZTFkOTM4LCAweGY4ZjhlYjEzLCAgMHg5ODk4MmJiMywgIDB4MTExMTIyMzMsCisgICAgMHg2OTY5ZDJiYiwgMHhkOWQ5YTk3MCwgIDB4OGU4ZTA3ODksICAweDk0OTQzM2E3LAorICAgIDB4OWI5YjJkYjYsIDB4MWUxZTNjMjIsICAweDg3ODcxNTkyLCAgMHhlOWU5YzkyMCwKKyAgICAweGNlY2U4NzQ5LCAweDU1NTVhYWZmLCAgMHgyODI4NTA3OCwgIDB4ZGZkZmE1N2EsCisgICAgMHg4YzhjMDM4ZiwgMHhhMWExNTlmOCwgIDB4ODk4OTA5ODAsICAweGQwZDFhMTcsCisgICAgMHhiZmJmNjVkYSwgMHhlNmU2ZDczMSwgIDB4NDI0Mjg0YzYsICAweDY4NjhkMGI4LAorICAgIDB4NDE0MTgyYzMsIDB4OTk5OTI5YjAsICAweDJkMmQ1YTc3LCAgMHhmMGYxZTExLAorICAgIDB4YjBiMDdiY2IsIDB4NTQ1NGE4ZmMsICAweGJiYmI2ZGQ2LCAgMHgxNjE2MmMzYSwKIH07CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KIAotdWludDMyX3QgVDJbMjU2XSA9IHsKLSAgMHg2M2M2YTU2MywgMHg3Y2Y4ODQ3YywgMHg3N2VlOTk3NywgMHg3YmY2OGQ3YiwgCi0gIDB4ZjJmZjBkZjIsIDB4NmJkNmJkNmIsIDB4NmZkZWIxNmYsIDB4YzU5MTU0YzUsIAotICAweDMwNjA1MDMwLCAweDEwMjAzMDEsIDB4NjdjZWE5NjcsIDB4MmI1NjdkMmIsIAotICAweGZlZTcxOWZlLCAweGQ3YjU2MmQ3LCAweGFiNGRlNmFiLCAweDc2ZWM5YTc2LCAKLSAgMHhjYThmNDVjYSwgMHg4MjFmOWQ4MiwgMHhjOTg5NDBjOSwgMHg3ZGZhODc3ZCwgCi0gIDB4ZmFlZjE1ZmEsIDB4NTliMmViNTksIDB4NDc4ZWM5NDcsIDB4ZjBmYjBiZjAsIAotICAweGFkNDFlY2FkLCAweGQ0YjM2N2Q0LCAweGEyNWZmZGEyLCAweGFmNDVlYWFmLCAKLSAgMHg5YzIzYmY5YywgMHhhNDUzZjdhNCwgMHg3MmU0OTY3MiwgMHhjMDliNWJjMCwgCi0gIDB4Yjc3NWMyYjcsIDB4ZmRlMTFjZmQsIDB4OTMzZGFlOTMsIDB4MjY0YzZhMjYsIAotICAweDM2NmM1YTM2LCAweDNmN2U0MTNmLCAweGY3ZjUwMmY3LCAweGNjODM0ZmNjLCAKLSAgMHgzNDY4NWMzNCwgMHhhNTUxZjRhNSwgMHhlNWQxMzRlNSwgMHhmMWY5MDhmMSwgCi0gIDB4NzFlMjkzNzEsIDB4ZDhhYjczZDgsIDB4MzE2MjUzMzEsIDB4MTUyYTNmMTUsIAotICAweDQwODBjMDQsIDB4Yzc5NTUyYzcsIDB4MjM0NjY1MjMsIDB4YzM5ZDVlYzMsIAotICAweDE4MzAyODE4LCAweDk2MzdhMTk2LCAweDUwYTBmMDUsIDB4OWEyZmI1OWEsIAotICAweDcwZTA5MDcsIDB4MTIyNDM2MTIsIDB4ODAxYjliODAsIDB4ZTJkZjNkZTIsIAotICAweGViY2QyNmViLCAweDI3NGU2OTI3LCAweGIyN2ZjZGIyLCAweDc1ZWE5Zjc1LCAKLSAgMHg5MTIxYjA5LCAweDgzMWQ5ZTgzLCAweDJjNTg3NDJjLCAweDFhMzQyZTFhLCAKLSAgMHgxYjM2MmQxYiwgMHg2ZWRjYjI2ZSwgMHg1YWI0ZWU1YSwgMHhhMDViZmJhMCwgCi0gIDB4NTJhNGY2NTIsIDB4M2I3NjRkM2IsIDB4ZDZiNzYxZDYsIDB4YjM3ZGNlYjMsIAotICAweDI5NTI3YjI5LCAweGUzZGQzZWUzLCAweDJmNWU3MTJmLCAweDg0MTM5Nzg0LCAKLSAgMHg1M2E2ZjU1MywgMHhkMWI5NjhkMSwgMHgwLCAweGVkYzEyY2VkLCAKLSAgMHgyMDQwNjAyMCwgMHhmY2UzMWZmYywgMHhiMTc5YzhiMSwgMHg1YmI2ZWQ1YiwgCi0gIDB4NmFkNGJlNmEsIDB4Y2I4ZDQ2Y2IsIDB4YmU2N2Q5YmUsIDB4Mzk3MjRiMzksIAotICAweDRhOTRkZTRhLCAweDRjOThkNDRjLCAweDU4YjBlODU4LCAweGNmODU0YWNmLCAKLSAgMHhkMGJiNmJkMCwgMHhlZmM1MmFlZiwgMHhhYTRmZTVhYSwgMHhmYmVkMTZmYiwgCi0gIDB4NDM4NmM1NDMsIDB4NGQ5YWQ3NGQsIDB4MzM2NjU1MzMsIDB4ODUxMTk0ODUsIAotICAweDQ1OGFjZjQ1LCAweGY5ZTkxMGY5LCAweDIwNDA2MDIsIDB4N2ZmZTgxN2YsIAotICAweDUwYTBmMDUwLCAweDNjNzg0NDNjLCAweDlmMjViYTlmLCAweGE4NGJlM2E4LCAKLSAgMHg1MWEyZjM1MSwgMHhhMzVkZmVhMywgMHg0MDgwYzA0MCwgMHg4ZjA1OGE4ZiwgCi0gIDB4OTIzZmFkOTIsIDB4OWQyMWJjOWQsIDB4Mzg3MDQ4MzgsIDB4ZjVmMTA0ZjUsIAotICAweGJjNjNkZmJjLCAweGI2NzdjMWI2LCAweGRhYWY3NWRhLCAweDIxNDI2MzIxLCAKLSAgMHgxMDIwMzAxMCwgMHhmZmU1MWFmZiwgMHhmM2ZkMGVmMywgMHhkMmJmNmRkMiwgCi0gIDB4Y2Q4MTRjY2QsIDB4YzE4MTQwYywgMHgxMzI2MzUxMywgMHhlY2MzMmZlYywgCi0gIDB4NWZiZWUxNWYsIDB4OTczNWEyOTcsIDB4NDQ4OGNjNDQsIDB4MTcyZTM5MTcsIAotICAweGM0OTM1N2M0LCAweGE3NTVmMmE3LCAweDdlZmM4MjdlLCAweDNkN2E0NzNkLCAKLSAgMHg2NGM4YWM2NCwgMHg1ZGJhZTc1ZCwgMHgxOTMyMmIxOSwgMHg3M2U2OTU3MywgCi0gIDB4NjBjMGEwNjAsIDB4ODExOTk4ODEsIDB4NGY5ZWQxNGYsIDB4ZGNhMzdmZGMsIAotICAweDIyNDQ2NjIyLCAweDJhNTQ3ZTJhLCAweDkwM2JhYjkwLCAweDg4MGI4Mzg4LCAKLSAgMHg0NjhjY2E0NiwgMHhlZWM3MjllZSwgMHhiODZiZDNiOCwgMHgxNDI4M2MxNCwgCi0gIDB4ZGVhNzc5ZGUsIDB4NWViY2UyNWUsIDB4YjE2MWQwYiwgMHhkYmFkNzZkYiwgCi0gIDB4ZTBkYjNiZTAsIDB4MzI2NDU2MzIsIDB4M2E3NDRlM2EsIDB4YTE0MWUwYSwgCi0gIDB4NDk5MmRiNDksIDB4NjBjMGEwNiwgMHgyNDQ4NmMyNCwgMHg1Y2I4ZTQ1YywgCi0gIDB4YzI5ZjVkYzIsIDB4ZDNiZDZlZDMsIDB4YWM0M2VmYWMsIDB4NjJjNGE2NjIsIAotICAweDkxMzlhODkxLCAweDk1MzFhNDk1LCAweGU0ZDMzN2U0LCAweDc5ZjI4Yjc5LCAKLSAgMHhlN2Q1MzJlNywgMHhjODhiNDNjOCwgMHgzNzZlNTkzNywgMHg2ZGRhYjc2ZCwgCi0gIDB4OGQwMThjOGQsIDB4ZDViMTY0ZDUsIDB4NGU5Y2QyNGUsIDB4YTk0OWUwYTksIAotICAweDZjZDhiNDZjLCAweDU2YWNmYTU2LCAweGY0ZjMwN2Y0LCAweGVhY2YyNWVhLCAKLSAgMHg2NWNhYWY2NSwgMHg3YWY0OGU3YSwgMHhhZTQ3ZTlhZSwgMHg4MTAxODA4LCAKLSAgMHhiYTZmZDViYSwgMHg3OGYwODg3OCwgMHgyNTRhNmYyNSwgMHgyZTVjNzIyZSwgCi0gIDB4MWMzODI0MWMsIDB4YTY1N2YxYTYsIDB4YjQ3M2M3YjQsIDB4YzY5NzUxYzYsIAotICAweGU4Y2IyM2U4LCAweGRkYTE3Y2RkLCAweDc0ZTg5Yzc0LCAweDFmM2UyMTFmLCAKLSAgMHg0Yjk2ZGQ0YiwgMHhiZDYxZGNiZCwgMHg4YjBkODY4YiwgMHg4YTBmODU4YSwgCi0gIDB4NzBlMDkwNzAsIDB4M2U3YzQyM2UsIDB4YjU3MWM0YjUsIDB4NjZjY2FhNjYsIAotICAweDQ4OTBkODQ4LCAweDMwNjA1MDMsIDB4ZjZmNzAxZjYsIDB4ZTFjMTIwZSwgCi0gIDB4NjFjMmEzNjEsIDB4MzU2YTVmMzUsIDB4NTdhZWY5NTcsIDB4Yjk2OWQwYjksIAotICAweDg2MTc5MTg2LCAweGMxOTk1OGMxLCAweDFkM2EyNzFkLCAweDllMjdiOTllLCAKLSAgMHhlMWQ5MzhlMSwgMHhmOGViMTNmOCwgMHg5ODJiYjM5OCwgMHgxMTIyMzMxMSwgCi0gIDB4NjlkMmJiNjksIDB4ZDlhOTcwZDksIDB4OGUwNzg5OGUsIDB4OTQzM2E3OTQsIAotICAweDliMmRiNjliLCAweDFlM2MyMjFlLCAweDg3MTU5Mjg3LCAweGU5YzkyMGU5LCAKLSAgMHhjZTg3NDljZSwgMHg1NWFhZmY1NSwgMHgyODUwNzgyOCwgMHhkZmE1N2FkZiwgCi0gIDB4OGMwMzhmOGMsIDB4YTE1OWY4YTEsIDB4ODkwOTgwODksIDB4ZDFhMTcwZCwgCi0gIDB4YmY2NWRhYmYsIDB4ZTZkNzMxZTYsIDB4NDI4NGM2NDIsIDB4NjhkMGI4NjgsIAotICAweDQxODJjMzQxLCAweDk5MjliMDk5LCAweDJkNWE3NzJkLCAweGYxZTExMGYsIAotICAweGIwN2JjYmIwLCAweDU0YThmYzU0LCAweGJiNmRkNmJiLCAweDE2MmMzYTE2LCAKKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KK3N0YXRpYyBjb25zdCB1aW50MzJfdCBUMlsyNTZdID0geworICAgIDB4NjNjNmE1NjMsIDB4N2NmODg0N2MsICAweDc3ZWU5OTc3LCAgMHg3YmY2OGQ3YiwKKyAgICAweGYyZmYwZGYyLCAweDZiZDZiZDZiLCAgMHg2ZmRlYjE2ZiwgIDB4YzU5MTU0YzUsCisgICAgMHgzMDYwNTAzMCwgMHgxMDIwMzAxLCAgIDB4NjdjZWE5NjcsICAweDJiNTY3ZDJiLAorICAgIDB4ZmVlNzE5ZmUsIDB4ZDdiNTYyZDcsICAweGFiNGRlNmFiLCAgMHg3NmVjOWE3NiwKKyAgICAweGNhOGY0NWNhLCAweDgyMWY5ZDgyLCAgMHhjOTg5NDBjOSwgIDB4N2RmYTg3N2QsCisgICAgMHhmYWVmMTVmYSwgMHg1OWIyZWI1OSwgIDB4NDc4ZWM5NDcsICAweGYwZmIwYmYwLAorICAgIDB4YWQ0MWVjYWQsIDB4ZDRiMzY3ZDQsICAweGEyNWZmZGEyLCAgMHhhZjQ1ZWFhZiwKKyAgICAweDljMjNiZjljLCAweGE0NTNmN2E0LCAgMHg3MmU0OTY3MiwgIDB4YzA5YjViYzAsCisgICAgMHhiNzc1YzJiNywgMHhmZGUxMWNmZCwgIDB4OTMzZGFlOTMsICAweDI2NGM2YTI2LAorICAgIDB4MzY2YzVhMzYsIDB4M2Y3ZTQxM2YsICAweGY3ZjUwMmY3LCAgMHhjYzgzNGZjYywKKyAgICAweDM0Njg1YzM0LCAweGE1NTFmNGE1LCAgMHhlNWQxMzRlNSwgIDB4ZjFmOTA4ZjEsCisgICAgMHg3MWUyOTM3MSwgMHhkOGFiNzNkOCwgIDB4MzE2MjUzMzEsICAweDE1MmEzZjE1LAorICAgIDB4NDA4MGMwNCwgIDB4Yzc5NTUyYzcsICAweDIzNDY2NTIzLCAgMHhjMzlkNWVjMywKKyAgICAweDE4MzAyODE4LCAweDk2MzdhMTk2LCAgMHg1MGEwZjA1LCAgIDB4OWEyZmI1OWEsCisgICAgMHg3MGUwOTA3LCAgMHgxMjI0MzYxMiwgIDB4ODAxYjliODAsICAweGUyZGYzZGUyLAorICAgIDB4ZWJjZDI2ZWIsIDB4Mjc0ZTY5MjcsICAweGIyN2ZjZGIyLCAgMHg3NWVhOWY3NSwKKyAgICAweDkxMjFiMDksICAweDgzMWQ5ZTgzLCAgMHgyYzU4NzQyYywgIDB4MWEzNDJlMWEsCisgICAgMHgxYjM2MmQxYiwgMHg2ZWRjYjI2ZSwgIDB4NWFiNGVlNWEsICAweGEwNWJmYmEwLAorICAgIDB4NTJhNGY2NTIsIDB4M2I3NjRkM2IsICAweGQ2Yjc2MWQ2LCAgMHhiMzdkY2ViMywKKyAgICAweDI5NTI3YjI5LCAweGUzZGQzZWUzLCAgMHgyZjVlNzEyZiwgIDB4ODQxMzk3ODQsCisgICAgMHg1M2E2ZjU1MywgMHhkMWI5NjhkMSwgIDB4MCwgICAgICAgICAweGVkYzEyY2VkLAorICAgIDB4MjA0MDYwMjAsIDB4ZmNlMzFmZmMsICAweGIxNzljOGIxLCAgMHg1YmI2ZWQ1YiwKKyAgICAweDZhZDRiZTZhLCAweGNiOGQ0NmNiLCAgMHhiZTY3ZDliZSwgIDB4Mzk3MjRiMzksCisgICAgMHg0YTk0ZGU0YSwgMHg0Yzk4ZDQ0YywgIDB4NThiMGU4NTgsICAweGNmODU0YWNmLAorICAgIDB4ZDBiYjZiZDAsIDB4ZWZjNTJhZWYsICAweGFhNGZlNWFhLCAgMHhmYmVkMTZmYiwKKyAgICAweDQzODZjNTQzLCAweDRkOWFkNzRkLCAgMHgzMzY2NTUzMywgIDB4ODUxMTk0ODUsCisgICAgMHg0NThhY2Y0NSwgMHhmOWU5MTBmOSwgIDB4MjA0MDYwMiwgICAweDdmZmU4MTdmLAorICAgIDB4NTBhMGYwNTAsIDB4M2M3ODQ0M2MsICAweDlmMjViYTlmLCAgMHhhODRiZTNhOCwKKyAgICAweDUxYTJmMzUxLCAweGEzNWRmZWEzLCAgMHg0MDgwYzA0MCwgIDB4OGYwNThhOGYsCisgICAgMHg5MjNmYWQ5MiwgMHg5ZDIxYmM5ZCwgIDB4Mzg3MDQ4MzgsICAweGY1ZjEwNGY1LAorICAgIDB4YmM2M2RmYmMsIDB4YjY3N2MxYjYsICAweGRhYWY3NWRhLCAgMHgyMTQyNjMyMSwKKyAgICAweDEwMjAzMDEwLCAweGZmZTUxYWZmLCAgMHhmM2ZkMGVmMywgIDB4ZDJiZjZkZDIsCisgICAgMHhjZDgxNGNjZCwgMHhjMTgxNDBjLCAgIDB4MTMyNjM1MTMsICAweGVjYzMyZmVjLAorICAgIDB4NWZiZWUxNWYsIDB4OTczNWEyOTcsICAweDQ0ODhjYzQ0LCAgMHgxNzJlMzkxNywKKyAgICAweGM0OTM1N2M0LCAweGE3NTVmMmE3LCAgMHg3ZWZjODI3ZSwgIDB4M2Q3YTQ3M2QsCisgICAgMHg2NGM4YWM2NCwgMHg1ZGJhZTc1ZCwgIDB4MTkzMjJiMTksICAweDczZTY5NTczLAorICAgIDB4NjBjMGEwNjAsIDB4ODExOTk4ODEsICAweDRmOWVkMTRmLCAgMHhkY2EzN2ZkYywKKyAgICAweDIyNDQ2NjIyLCAweDJhNTQ3ZTJhLCAgMHg5MDNiYWI5MCwgIDB4ODgwYjgzODgsCisgICAgMHg0NjhjY2E0NiwgMHhlZWM3MjllZSwgIDB4Yjg2YmQzYjgsICAweDE0MjgzYzE0LAorICAgIDB4ZGVhNzc5ZGUsIDB4NWViY2UyNWUsICAweGIxNjFkMGIsICAgMHhkYmFkNzZkYiwKKyAgICAweGUwZGIzYmUwLCAweDMyNjQ1NjMyLCAgMHgzYTc0NGUzYSwgIDB4YTE0MWUwYSwKKyAgICAweDQ5OTJkYjQ5LCAweDYwYzBhMDYsICAgMHgyNDQ4NmMyNCwgIDB4NWNiOGU0NWMsCisgICAgMHhjMjlmNWRjMiwgMHhkM2JkNmVkMywgIDB4YWM0M2VmYWMsICAweDYyYzRhNjYyLAorICAgIDB4OTEzOWE4OTEsIDB4OTUzMWE0OTUsICAweGU0ZDMzN2U0LCAgMHg3OWYyOGI3OSwKKyAgICAweGU3ZDUzMmU3LCAweGM4OGI0M2M4LCAgMHgzNzZlNTkzNywgIDB4NmRkYWI3NmQsCisgICAgMHg4ZDAxOGM4ZCwgMHhkNWIxNjRkNSwgIDB4NGU5Y2QyNGUsICAweGE5NDllMGE5LAorICAgIDB4NmNkOGI0NmMsIDB4NTZhY2ZhNTYsICAweGY0ZjMwN2Y0LCAgMHhlYWNmMjVlYSwKKyAgICAweDY1Y2FhZjY1LCAweDdhZjQ4ZTdhLCAgMHhhZTQ3ZTlhZSwgIDB4ODEwMTgwOCwKKyAgICAweGJhNmZkNWJhLCAweDc4ZjA4ODc4LCAgMHgyNTRhNmYyNSwgIDB4MmU1YzcyMmUsCisgICAgMHgxYzM4MjQxYywgMHhhNjU3ZjFhNiwgIDB4YjQ3M2M3YjQsICAweGM2OTc1MWM2LAorICAgIDB4ZThjYjIzZTgsIDB4ZGRhMTdjZGQsICAweDc0ZTg5Yzc0LCAgMHgxZjNlMjExZiwKKyAgICAweDRiOTZkZDRiLCAweGJkNjFkY2JkLCAgMHg4YjBkODY4YiwgIDB4OGEwZjg1OGEsCisgICAgMHg3MGUwOTA3MCwgMHgzZTdjNDIzZSwgIDB4YjU3MWM0YjUsICAweDY2Y2NhYTY2LAorICAgIDB4NDg5MGQ4NDgsIDB4MzA2MDUwMywgICAweGY2ZjcwMWY2LCAgMHhlMWMxMjBlLAorICAgIDB4NjFjMmEzNjEsIDB4MzU2YTVmMzUsICAweDU3YWVmOTU3LCAgMHhiOTY5ZDBiOSwKKyAgICAweDg2MTc5MTg2LCAweGMxOTk1OGMxLCAgMHgxZDNhMjcxZCwgIDB4OWUyN2I5OWUsCisgICAgMHhlMWQ5MzhlMSwgMHhmOGViMTNmOCwgIDB4OTgyYmIzOTgsICAweDExMjIzMzExLAorICAgIDB4NjlkMmJiNjksIDB4ZDlhOTcwZDksICAweDhlMDc4OThlLCAgMHg5NDMzYTc5NCwKKyAgICAweDliMmRiNjliLCAweDFlM2MyMjFlLCAgMHg4NzE1OTI4NywgIDB4ZTljOTIwZTksCisgICAgMHhjZTg3NDljZSwgMHg1NWFhZmY1NSwgIDB4Mjg1MDc4MjgsICAweGRmYTU3YWRmLAorICAgIDB4OGMwMzhmOGMsIDB4YTE1OWY4YTEsICAweDg5MDk4MDg5LCAgMHhkMWExNzBkLAorICAgIDB4YmY2NWRhYmYsIDB4ZTZkNzMxZTYsICAweDQyODRjNjQyLCAgMHg2OGQwYjg2OCwKKyAgICAweDQxODJjMzQxLCAweDk5MjliMDk5LCAgMHgyZDVhNzcyZCwgIDB4ZjFlMTEwZiwKKyAgICAweGIwN2JjYmIwLCAweDU0YThmYzU0LCAgMHhiYjZkZDZiYiwgIDB4MTYyYzNhMTYsCiB9OworLyogY2xhbmctZm9ybWF0IG9uICovCiAKLXVpbnQzMl90IFQzWzI1Nl0gPSB7Ci0gIDB4YzZhNTYzNjMsIDB4Zjg4NDdjN2MsIDB4ZWU5OTc3NzcsIDB4ZjY4ZDdiN2IsIAotICAweGZmMGRmMmYyLCAweGQ2YmQ2YjZiLCAweGRlYjE2ZjZmLCAweDkxNTRjNWM1LCAKLSAgMHg2MDUwMzAzMCwgMHgyMDMwMTAxLCAweGNlYTk2NzY3LCAweDU2N2QyYjJiLCAKLSAgMHhlNzE5ZmVmZSwgMHhiNTYyZDdkNywgMHg0ZGU2YWJhYiwgMHhlYzlhNzY3NiwgCi0gIDB4OGY0NWNhY2EsIDB4MWY5ZDgyODIsIDB4ODk0MGM5YzksIDB4ZmE4NzdkN2QsIAotICAweGVmMTVmYWZhLCAweGIyZWI1OTU5LCAweDhlYzk0NzQ3LCAweGZiMGJmMGYwLCAKLSAgMHg0MWVjYWRhZCwgMHhiMzY3ZDRkNCwgMHg1ZmZkYTJhMiwgMHg0NWVhYWZhZiwgCi0gIDB4MjNiZjljOWMsIDB4NTNmN2E0YTQsIDB4ZTQ5NjcyNzIsIDB4OWI1YmMwYzAsIAotICAweDc1YzJiN2I3LCAweGUxMWNmZGZkLCAweDNkYWU5MzkzLCAweDRjNmEyNjI2LCAKLSAgMHg2YzVhMzYzNiwgMHg3ZTQxM2YzZiwgMHhmNTAyZjdmNywgMHg4MzRmY2NjYywgCi0gIDB4Njg1YzM0MzQsIDB4NTFmNGE1YTUsIDB4ZDEzNGU1ZTUsIDB4ZjkwOGYxZjEsIAotICAweGUyOTM3MTcxLCAweGFiNzNkOGQ4LCAweDYyNTMzMTMxLCAweDJhM2YxNTE1LCAKLSAgMHg4MGMwNDA0LCAweDk1NTJjN2M3LCAweDQ2NjUyMzIzLCAweDlkNWVjM2MzLCAKLSAgMHgzMDI4MTgxOCwgMHgzN2ExOTY5NiwgMHhhMGYwNTA1LCAweDJmYjU5YTlhLCAKLSAgMHhlMDkwNzA3LCAweDI0MzYxMjEyLCAweDFiOWI4MDgwLCAweGRmM2RlMmUyLCAKLSAgMHhjZDI2ZWJlYiwgMHg0ZTY5MjcyNywgMHg3ZmNkYjJiMiwgMHhlYTlmNzU3NSwgCi0gIDB4MTIxYjA5MDksIDB4MWQ5ZTgzODMsIDB4NTg3NDJjMmMsIDB4MzQyZTFhMWEsIAotICAweDM2MmQxYjFiLCAweGRjYjI2ZTZlLCAweGI0ZWU1YTVhLCAweDViZmJhMGEwLCAKLSAgMHhhNGY2NTI1MiwgMHg3NjRkM2IzYiwgMHhiNzYxZDZkNiwgMHg3ZGNlYjNiMywgCi0gIDB4NTI3YjI5MjksIDB4ZGQzZWUzZTMsIDB4NWU3MTJmMmYsIDB4MTM5Nzg0ODQsIAotICAweGE2ZjU1MzUzLCAweGI5NjhkMWQxLCAweDAsIDB4YzEyY2VkZWQsIAotICAweDQwNjAyMDIwLCAweGUzMWZmY2ZjLCAweDc5YzhiMWIxLCAweGI2ZWQ1YjViLCAKLSAgMHhkNGJlNmE2YSwgMHg4ZDQ2Y2JjYiwgMHg2N2Q5YmViZSwgMHg3MjRiMzkzOSwgCi0gIDB4OTRkZTRhNGEsIDB4OThkNDRjNGMsIDB4YjBlODU4NTgsIDB4ODU0YWNmY2YsIAotICAweGJiNmJkMGQwLCAweGM1MmFlZmVmLCAweDRmZTVhYWFhLCAweGVkMTZmYmZiLCAKLSAgMHg4NmM1NDM0MywgMHg5YWQ3NGQ0ZCwgMHg2NjU1MzMzMywgMHgxMTk0ODU4NSwgCi0gIDB4OGFjZjQ1NDUsIDB4ZTkxMGY5ZjksIDB4NDA2MDIwMiwgMHhmZTgxN2Y3ZiwgCi0gIDB4YTBmMDUwNTAsIDB4Nzg0NDNjM2MsIDB4MjViYTlmOWYsIDB4NGJlM2E4YTgsIAotICAweGEyZjM1MTUxLCAweDVkZmVhM2EzLCAweDgwYzA0MDQwLCAweDU4YThmOGYsIAotICAweDNmYWQ5MjkyLCAweDIxYmM5ZDlkLCAweDcwNDgzODM4LCAweGYxMDRmNWY1LCAKLSAgMHg2M2RmYmNiYywgMHg3N2MxYjZiNiwgMHhhZjc1ZGFkYSwgMHg0MjYzMjEyMSwgCi0gIDB4MjAzMDEwMTAsIDB4ZTUxYWZmZmYsIDB4ZmQwZWYzZjMsIDB4YmY2ZGQyZDIsIAotICAweDgxNGNjZGNkLCAweDE4MTQwYzBjLCAweDI2MzUxMzEzLCAweGMzMmZlY2VjLCAKLSAgMHhiZWUxNWY1ZiwgMHgzNWEyOTc5NywgMHg4OGNjNDQ0NCwgMHgyZTM5MTcxNywgCi0gIDB4OTM1N2M0YzQsIDB4NTVmMmE3YTcsIDB4ZmM4MjdlN2UsIDB4N2E0NzNkM2QsIAotICAweGM4YWM2NDY0LCAweGJhZTc1ZDVkLCAweDMyMmIxOTE5LCAweGU2OTU3MzczLCAKLSAgMHhjMGEwNjA2MCwgMHgxOTk4ODE4MSwgMHg5ZWQxNGY0ZiwgMHhhMzdmZGNkYywgCi0gIDB4NDQ2NjIyMjIsIDB4NTQ3ZTJhMmEsIDB4M2JhYjkwOTAsIDB4YjgzODg4OCwgCi0gIDB4OGNjYTQ2NDYsIDB4YzcyOWVlZWUsIDB4NmJkM2I4YjgsIDB4MjgzYzE0MTQsIAotICAweGE3NzlkZWRlLCAweGJjZTI1ZTVlLCAweDE2MWQwYjBiLCAweGFkNzZkYmRiLCAKLSAgMHhkYjNiZTBlMCwgMHg2NDU2MzIzMiwgMHg3NDRlM2EzYSwgMHgxNDFlMGEwYSwgCi0gIDB4OTJkYjQ5NDksIDB4YzBhMDYwNiwgMHg0ODZjMjQyNCwgMHhiOGU0NWM1YywgCi0gIDB4OWY1ZGMyYzIsIDB4YmQ2ZWQzZDMsIDB4NDNlZmFjYWMsIDB4YzRhNjYyNjIsIAotICAweDM5YTg5MTkxLCAweDMxYTQ5NTk1LCAweGQzMzdlNGU0LCAweGYyOGI3OTc5LCAKLSAgMHhkNTMyZTdlNywgMHg4YjQzYzhjOCwgMHg2ZTU5MzczNywgMHhkYWI3NmQ2ZCwgCi0gIDB4MThjOGQ4ZCwgMHhiMTY0ZDVkNSwgMHg5Y2QyNGU0ZSwgMHg0OWUwYTlhOSwgCi0gIDB4ZDhiNDZjNmMsIDB4YWNmYTU2NTYsIDB4ZjMwN2Y0ZjQsIDB4Y2YyNWVhZWEsIAotICAweGNhYWY2NTY1LCAweGY0OGU3YTdhLCAweDQ3ZTlhZWFlLCAweDEwMTgwODA4LCAKLSAgMHg2ZmQ1YmFiYSwgMHhmMDg4Nzg3OCwgMHg0YTZmMjUyNSwgMHg1YzcyMmUyZSwgCi0gIDB4MzgyNDFjMWMsIDB4NTdmMWE2YTYsIDB4NzNjN2I0YjQsIDB4OTc1MWM2YzYsIAotICAweGNiMjNlOGU4LCAweGExN2NkZGRkLCAweGU4OWM3NDc0LCAweDNlMjExZjFmLCAKLSAgMHg5NmRkNGI0YiwgMHg2MWRjYmRiZCwgMHhkODY4YjhiLCAweGY4NThhOGEsIAotICAweGUwOTA3MDcwLCAweDdjNDIzZTNlLCAweDcxYzRiNWI1LCAweGNjYWE2NjY2LCAKLSAgMHg5MGQ4NDg0OCwgMHg2MDUwMzAzLCAweGY3MDFmNmY2LCAweDFjMTIwZTBlLCAKLSAgMHhjMmEzNjE2MSwgMHg2YTVmMzUzNSwgMHhhZWY5NTc1NywgMHg2OWQwYjliOSwgCi0gIDB4MTc5MTg2ODYsIDB4OTk1OGMxYzEsIDB4M2EyNzFkMWQsIDB4MjdiOTllOWUsIAotICAweGQ5MzhlMWUxLCAweGViMTNmOGY4LCAweDJiYjM5ODk4LCAweDIyMzMxMTExLCAKLSAgMHhkMmJiNjk2OSwgMHhhOTcwZDlkOSwgMHg3ODk4ZThlLCAweDMzYTc5NDk0LCAKLSAgMHgyZGI2OWI5YiwgMHgzYzIyMWUxZSwgMHgxNTkyODc4NywgMHhjOTIwZTllOSwgCi0gIDB4ODc0OWNlY2UsIDB4YWFmZjU1NTUsIDB4NTA3ODI4MjgsIDB4YTU3YWRmZGYsIAotICAweDM4ZjhjOGMsIDB4NTlmOGExYTEsIDB4OTgwODk4OSwgMHgxYTE3MGQwZCwgCi0gIDB4NjVkYWJmYmYsIDB4ZDczMWU2ZTYsIDB4ODRjNjQyNDIsIDB4ZDBiODY4NjgsIAotICAweDgyYzM0MTQxLCAweDI5YjA5OTk5LCAweDVhNzcyZDJkLCAweDFlMTEwZjBmLCAKLSAgMHg3YmNiYjBiMCwgMHhhOGZjNTQ1NCwgMHg2ZGQ2YmJiYiwgMHgyYzNhMTYxNiwgCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgY29uc3QgdWludDMyX3QgVDNbMjU2XSA9IHsKKyAgICAweGM2YTU2MzYzLCAweGY4ODQ3YzdjLCAgMHhlZTk5Nzc3NywgIDB4ZjY4ZDdiN2IsCisgICAgMHhmZjBkZjJmMiwgMHhkNmJkNmI2YiwgIDB4ZGViMTZmNmYsICAweDkxNTRjNWM1LAorICAgIDB4NjA1MDMwMzAsIDB4MjAzMDEwMSwgICAweGNlYTk2NzY3LCAgMHg1NjdkMmIyYiwKKyAgICAweGU3MTlmZWZlLCAweGI1NjJkN2Q3LCAgMHg0ZGU2YWJhYiwgIDB4ZWM5YTc2NzYsCisgICAgMHg4ZjQ1Y2FjYSwgMHgxZjlkODI4MiwgIDB4ODk0MGM5YzksICAweGZhODc3ZDdkLAorICAgIDB4ZWYxNWZhZmEsIDB4YjJlYjU5NTksICAweDhlYzk0NzQ3LCAgMHhmYjBiZjBmMCwKKyAgICAweDQxZWNhZGFkLCAweGIzNjdkNGQ0LCAgMHg1ZmZkYTJhMiwgIDB4NDVlYWFmYWYsCisgICAgMHgyM2JmOWM5YywgMHg1M2Y3YTRhNCwgIDB4ZTQ5NjcyNzIsICAweDliNWJjMGMwLAorICAgIDB4NzVjMmI3YjcsIDB4ZTExY2ZkZmQsICAweDNkYWU5MzkzLCAgMHg0YzZhMjYyNiwKKyAgICAweDZjNWEzNjM2LCAweDdlNDEzZjNmLCAgMHhmNTAyZjdmNywgIDB4ODM0ZmNjY2MsCisgICAgMHg2ODVjMzQzNCwgMHg1MWY0YTVhNSwgIDB4ZDEzNGU1ZTUsICAweGY5MDhmMWYxLAorICAgIDB4ZTI5MzcxNzEsIDB4YWI3M2Q4ZDgsICAweDYyNTMzMTMxLCAgMHgyYTNmMTUxNSwKKyAgICAweDgwYzA0MDQsICAweDk1NTJjN2M3LCAgMHg0NjY1MjMyMywgIDB4OWQ1ZWMzYzMsCisgICAgMHgzMDI4MTgxOCwgMHgzN2ExOTY5NiwgIDB4YTBmMDUwNSwgICAweDJmYjU5YTlhLAorICAgIDB4ZTA5MDcwNywgIDB4MjQzNjEyMTIsICAweDFiOWI4MDgwLCAgMHhkZjNkZTJlMiwKKyAgICAweGNkMjZlYmViLCAweDRlNjkyNzI3LCAgMHg3ZmNkYjJiMiwgIDB4ZWE5Zjc1NzUsCisgICAgMHgxMjFiMDkwOSwgMHgxZDllODM4MywgIDB4NTg3NDJjMmMsICAweDM0MmUxYTFhLAorICAgIDB4MzYyZDFiMWIsIDB4ZGNiMjZlNmUsICAweGI0ZWU1YTVhLCAgMHg1YmZiYTBhMCwKKyAgICAweGE0ZjY1MjUyLCAweDc2NGQzYjNiLCAgMHhiNzYxZDZkNiwgIDB4N2RjZWIzYjMsCisgICAgMHg1MjdiMjkyOSwgMHhkZDNlZTNlMywgIDB4NWU3MTJmMmYsICAweDEzOTc4NDg0LAorICAgIDB4YTZmNTUzNTMsIDB4Yjk2OGQxZDEsICAweDAsICAgICAgICAgMHhjMTJjZWRlZCwKKyAgICAweDQwNjAyMDIwLCAweGUzMWZmY2ZjLCAgMHg3OWM4YjFiMSwgIDB4YjZlZDViNWIsCisgICAgMHhkNGJlNmE2YSwgMHg4ZDQ2Y2JjYiwgIDB4NjdkOWJlYmUsICAweDcyNGIzOTM5LAorICAgIDB4OTRkZTRhNGEsIDB4OThkNDRjNGMsICAweGIwZTg1ODU4LCAgMHg4NTRhY2ZjZiwKKyAgICAweGJiNmJkMGQwLCAweGM1MmFlZmVmLCAgMHg0ZmU1YWFhYSwgIDB4ZWQxNmZiZmIsCisgICAgMHg4NmM1NDM0MywgMHg5YWQ3NGQ0ZCwgIDB4NjY1NTMzMzMsICAweDExOTQ4NTg1LAorICAgIDB4OGFjZjQ1NDUsIDB4ZTkxMGY5ZjksICAweDQwNjAyMDIsICAgMHhmZTgxN2Y3ZiwKKyAgICAweGEwZjA1MDUwLCAweDc4NDQzYzNjLCAgMHgyNWJhOWY5ZiwgIDB4NGJlM2E4YTgsCisgICAgMHhhMmYzNTE1MSwgMHg1ZGZlYTNhMywgIDB4ODBjMDQwNDAsICAweDU4YThmOGYsCisgICAgMHgzZmFkOTI5MiwgMHgyMWJjOWQ5ZCwgIDB4NzA0ODM4MzgsICAweGYxMDRmNWY1LAorICAgIDB4NjNkZmJjYmMsIDB4NzdjMWI2YjYsICAweGFmNzVkYWRhLCAgMHg0MjYzMjEyMSwKKyAgICAweDIwMzAxMDEwLCAweGU1MWFmZmZmLCAgMHhmZDBlZjNmMywgIDB4YmY2ZGQyZDIsCisgICAgMHg4MTRjY2RjZCwgMHgxODE0MGMwYywgIDB4MjYzNTEzMTMsICAweGMzMmZlY2VjLAorICAgIDB4YmVlMTVmNWYsIDB4MzVhMjk3OTcsICAweDg4Y2M0NDQ0LCAgMHgyZTM5MTcxNywKKyAgICAweDkzNTdjNGM0LCAweDU1ZjJhN2E3LCAgMHhmYzgyN2U3ZSwgIDB4N2E0NzNkM2QsCisgICAgMHhjOGFjNjQ2NCwgMHhiYWU3NWQ1ZCwgIDB4MzIyYjE5MTksICAweGU2OTU3MzczLAorICAgIDB4YzBhMDYwNjAsIDB4MTk5ODgxODEsICAweDllZDE0ZjRmLCAgMHhhMzdmZGNkYywKKyAgICAweDQ0NjYyMjIyLCAweDU0N2UyYTJhLCAgMHgzYmFiOTA5MCwgIDB4YjgzODg4OCwKKyAgICAweDhjY2E0NjQ2LCAweGM3MjllZWVlLCAgMHg2YmQzYjhiOCwgIDB4MjgzYzE0MTQsCisgICAgMHhhNzc5ZGVkZSwgMHhiY2UyNWU1ZSwgIDB4MTYxZDBiMGIsICAweGFkNzZkYmRiLAorICAgIDB4ZGIzYmUwZTAsIDB4NjQ1NjMyMzIsICAweDc0NGUzYTNhLCAgMHgxNDFlMGEwYSwKKyAgICAweDkyZGI0OTQ5LCAweGMwYTA2MDYsICAgMHg0ODZjMjQyNCwgIDB4YjhlNDVjNWMsCisgICAgMHg5ZjVkYzJjMiwgMHhiZDZlZDNkMywgIDB4NDNlZmFjYWMsICAweGM0YTY2MjYyLAorICAgIDB4MzlhODkxOTEsIDB4MzFhNDk1OTUsICAweGQzMzdlNGU0LCAgMHhmMjhiNzk3OSwKKyAgICAweGQ1MzJlN2U3LCAweDhiNDNjOGM4LCAgMHg2ZTU5MzczNywgIDB4ZGFiNzZkNmQsCisgICAgMHgxOGM4ZDhkLCAgMHhiMTY0ZDVkNSwgIDB4OWNkMjRlNGUsICAweDQ5ZTBhOWE5LAorICAgIDB4ZDhiNDZjNmMsIDB4YWNmYTU2NTYsICAweGYzMDdmNGY0LCAgMHhjZjI1ZWFlYSwKKyAgICAweGNhYWY2NTY1LCAweGY0OGU3YTdhLCAgMHg0N2U5YWVhZSwgIDB4MTAxODA4MDgsCisgICAgMHg2ZmQ1YmFiYSwgMHhmMDg4Nzg3OCwgIDB4NGE2ZjI1MjUsICAweDVjNzIyZTJlLAorICAgIDB4MzgyNDFjMWMsIDB4NTdmMWE2YTYsICAweDczYzdiNGI0LCAgMHg5NzUxYzZjNiwKKyAgICAweGNiMjNlOGU4LCAweGExN2NkZGRkLCAgMHhlODljNzQ3NCwgIDB4M2UyMTFmMWYsCisgICAgMHg5NmRkNGI0YiwgMHg2MWRjYmRiZCwgIDB4ZDg2OGI4YiwgICAweGY4NThhOGEsCisgICAgMHhlMDkwNzA3MCwgMHg3YzQyM2UzZSwgIDB4NzFjNGI1YjUsICAweGNjYWE2NjY2LAorICAgIDB4OTBkODQ4NDgsIDB4NjA1MDMwMywgICAweGY3MDFmNmY2LCAgMHgxYzEyMGUwZSwKKyAgICAweGMyYTM2MTYxLCAweDZhNWYzNTM1LCAgMHhhZWY5NTc1NywgIDB4NjlkMGI5YjksCisgICAgMHgxNzkxODY4NiwgMHg5OTU4YzFjMSwgIDB4M2EyNzFkMWQsICAweDI3Yjk5ZTllLAorICAgIDB4ZDkzOGUxZTEsIDB4ZWIxM2Y4ZjgsICAweDJiYjM5ODk4LCAgMHgyMjMzMTExMSwKKyAgICAweGQyYmI2OTY5LCAweGE5NzBkOWQ5LCAgMHg3ODk4ZThlLCAgIDB4MzNhNzk0OTQsCisgICAgMHgyZGI2OWI5YiwgMHgzYzIyMWUxZSwgIDB4MTU5Mjg3ODcsICAweGM5MjBlOWU5LAorICAgIDB4ODc0OWNlY2UsIDB4YWFmZjU1NTUsICAweDUwNzgyODI4LCAgMHhhNTdhZGZkZiwKKyAgICAweDM4ZjhjOGMsICAweDU5ZjhhMWExLCAgMHg5ODA4OTg5LCAgIDB4MWExNzBkMGQsCisgICAgMHg2NWRhYmZiZiwgMHhkNzMxZTZlNiwgIDB4ODRjNjQyNDIsICAweGQwYjg2ODY4LAorICAgIDB4ODJjMzQxNDEsIDB4MjliMDk5OTksICAweDVhNzcyZDJkLCAgMHgxZTExMGYwZiwKKyAgICAweDdiY2JiMGIwLCAweGE4ZmM1NDU0LCAgMHg2ZGQ2YmJiYiwgIDB4MmMzYTE2MTYsCiB9OworLyogY2xhbmctZm9ybWF0IG9uICovCiAKLXVpbnQzMl90IFUwWzI1Nl0gPSB7Ci0gIDB4NTBhN2Y0NTEsIDB4NTM2NTQxN2UsIDB4YzNhNDE3MWEsIDB4OTY1ZTI3M2EsIAotICAweGNiNmJhYjNiLCAweGYxNDU5ZDFmLCAweGFiNThmYWFjLCAweDkzMDNlMzRiLCAKLSAgMHg1NWZhMzAyMCwgMHhmNjZkNzZhZCwgMHg5MTc2Y2M4OCwgMHgyNTRjMDJmNSwgCi0gIDB4ZmNkN2U1NGYsIDB4ZDdjYjJhYzUsIDB4ODA0NDM1MjYsIDB4OGZhMzYyYjUsIAotICAweDQ5NWFiMWRlLCAweDY3MWJiYTI1LCAweDk4MGVlYTQ1LCAweGUxYzBmZTVkLCAKLSAgMHgyNzUyZmMzLCAweDEyZjA0YzgxLCAweGEzOTc0NjhkLCAweGM2ZjlkMzZiLCAKLSAgMHhlNzVmOGYwMywgMHg5NTljOTIxNSwgMHhlYjdhNmRiZiwgMHhkYTU5NTI5NSwgCi0gIDB4MmQ4M2JlZDQsIDB4ZDMyMTc0NTgsIDB4Mjk2OWUwNDksIDB4NDRjOGM5OGUsIAotICAweDZhODljMjc1LCAweDc4Nzk4ZWY0LCAweDZiM2U1ODk5LCAweGRkNzFiOTI3LCAKLSAgMHhiNjRmZTFiZSwgMHgxN2FkODhmMCwgMHg2NmFjMjBjOSwgMHhiNDNhY2U3ZCwgCi0gIDB4MTg0YWRmNjMsIDB4ODIzMTFhZTUsIDB4NjAzMzUxOTcsIDB4NDU3ZjUzNjIsIAotICAweGUwNzc2NGIxLCAweDg0YWU2YmJiLCAweDFjYTA4MWZlLCAweDk0MmIwOGY5LCAKLSAgMHg1ODY4NDg3MCwgMHgxOWZkNDU4ZiwgMHg4NzZjZGU5NCwgMHhiN2Y4N2I1MiwgCi0gIDB4MjNkMzczYWIsIDB4ZTIwMjRiNzIsIDB4NTc4ZjFmZTMsIDB4MmFhYjU1NjYsIAotICAweDcyOGViYjIsIDB4M2MyYjUyZiwgMHg5YTdiYzU4NiwgMHhhNTA4MzdkMywgCi0gIDB4ZjI4NzI4MzAsIDB4YjJhNWJmMjMsIDB4YmE2YTAzMDIsIDB4NWM4MjE2ZWQsIAotICAweDJiMWNjZjhhLCAweDkyYjQ3OWE3LCAweGYwZjIwN2YzLCAweGExZTI2OTRlLCAKLSAgMHhjZGY0ZGE2NSwgMHhkNWJlMDUwNiwgMHgxZjYyMzRkMSwgMHg4YWZlYTZjNCwgCi0gIDB4OWQ1MzJlMzQsIDB4YTA1NWYzYTIsIDB4MzJlMThhMDUsIDB4NzVlYmY2YTQsIAotICAweDM5ZWM4MzBiLCAweGFhZWY2MDQwLCAweDY5ZjcxNWUsIDB4NTExMDZlYmQsIAotICAweGY5OGEyMTNlLCAweDNkMDZkZDk2LCAweGFlMDUzZWRkLCAweDQ2YmRlNjRkLCAKLSAgMHhiNThkNTQ5MSwgMHg1NWRjNDcxLCAweDZmZDQwNjA0LCAweGZmMTU1MDYwLCAKLSAgMHgyNGZiOTgxOSwgMHg5N2U5YmRkNiwgMHhjYzQzNDA4OSwgMHg3NzllZDk2NywgCi0gIDB4YmQ0MmU4YjAsIDB4ODg4Yjg5MDcsIDB4Mzg1YjE5ZTcsIDB4ZGJlZWM4NzksIAotICAweDQ3MGE3Y2ExLCAweGU5MGY0MjdjLCAweGM5MWU4NGY4LCAweDAsIAotICAweDgzODY4MDA5LCAweDQ4ZWQyYjMyLCAweGFjNzAxMTFlLCAweDRlNzI1YTZjLCAKLSAgMHhmYmZmMGVmZCwgMHg1NjM4ODUwZiwgMHgxZWQ1YWUzZCwgMHgyNzM5MmQzNiwgCi0gIDB4NjRkOTBmMGEsIDB4MjFhNjVjNjgsIDB4ZDE1NDViOWIsIDB4M2EyZTM2MjQsIAotICAweGIxNjcwYTBjLCAweGZlNzU3OTMsIDB4ZDI5NmVlYjQsIDB4OWU5MTliMWIsIAotICAweDRmYzVjMDgwLCAweGEyMjBkYzYxLCAweDY5NGI3NzVhLCAweDE2MWExMjFjLCAKLSAgMHhhYmE5M2UyLCAweGU1MmFhMGMwLCAweDQzZTAyMjNjLCAweDFkMTcxYjEyLCAKLSAgMHhiMGQwOTBlLCAweGFkYzc4YmYyLCAweGI5YThiNjJkLCAweGM4YTkxZTE0LCAKLSAgMHg4NTE5ZjE1NywgMHg0YzA3NzVhZiwgMHhiYmRkOTllZSwgMHhmZDYwN2ZhMywgCi0gIDB4OWYyNjAxZjcsIDB4YmNmNTcyNWMsIDB4YzUzYjY2NDQsIDB4MzQ3ZWZiNWIsIAotICAweDc2Mjk0MzhiLCAweGRjYzYyM2NiLCAweDY4ZmNlZGI2LCAweDYzZjFlNGI4LCAKLSAgMHhjYWRjMzFkNywgMHgxMDg1NjM0MiwgMHg0MDIyOTcxMywgMHgyMDExYzY4NCwgCi0gIDB4N2QyNDRhODUsIDB4ZjgzZGJiZDIsIDB4MTEzMmY5YWUsIDB4NmRhMTI5YzcsIAotICAweDRiMmY5ZTFkLCAweGYzMzBiMmRjLCAweGVjNTI4NjBkLCAweGQwZTNjMTc3LCAKLSAgMHg2YzE2YjMyYiwgMHg5OWI5NzBhOSwgMHhmYTQ4OTQxMSwgMHgyMjY0ZTk0NywgCi0gIDB4YzQ4Y2ZjYTgsIDB4MWEzZmYwYTAsIDB4ZDgyYzdkNTYsIDB4ZWY5MDMzMjIsIAotICAweGM3NGU0OTg3LCAweGMxZDEzOGQ5LCAweGZlYTJjYThjLCAweDM2MGJkNDk4LCAKLSAgMHhjZjgxZjVhNiwgMHgyOGRlN2FhNSwgMHgyNjhlYjdkYSwgMHhhNGJmYWQzZiwgCi0gIDB4ZTQ5ZDNhMmMsIDB4ZDkyNzg1MCwgMHg5YmNjNWY2YSwgMHg2MjQ2N2U1NCwgCi0gIDB4YzIxMzhkZjYsIDB4ZThiOGQ4OTAsIDB4NWVmNzM5MmUsIDB4ZjVhZmMzODIsIAotICAweGJlODA1ZDlmLCAweDdjOTNkMDY5LCAweGE5MmRkNTZmLCAweGIzMTIyNWNmLCAKLSAgMHgzYjk5YWNjOCwgMHhhNzdkMTgxMCwgMHg2ZTYzOWNlOCwgMHg3YmJiM2JkYiwgCi0gIDB4OTc4MjZjZCwgMHhmNDE4NTk2ZSwgMHgxYjc5YWVjLCAweGE4OWE0ZjgzLCAKLSAgMHg2NTZlOTVlNiwgMHg3ZWU2ZmZhYSwgMHg4Y2ZiYzIxLCAweGU2ZTgxNWVmLCAKLSAgMHhkOTliZTdiYSwgMHhjZTM2NmY0YSwgMHhkNDA5OWZlYSwgMHhkNjdjYjAyOSwgCi0gIDB4YWZiMmE0MzEsIDB4MzEyMzNmMmEsIDB4MzA5NGE1YzYsIDB4YzA2NmEyMzUsIAotICAweDM3YmM0ZTc0LCAweGE2Y2E4MmZjLCAweGIwZDA5MGUwLCAweDE1ZDhhNzMzLCAKLSAgMHg0YTk4MDRmMSwgMHhmN2RhZWM0MSwgMHhlNTBjZDdmLCAweDJmZjY5MTE3LCAKLSAgMHg4ZGQ2NGQ3NiwgMHg0ZGIwZWY0MywgMHg1NDRkYWFjYywgMHhkZjA0OTZlNCwgCi0gIDB4ZTNiNWQxOWUsIDB4MWI4ODZhNGMsIDB4YjgxZjJjYzEsIDB4N2Y1MTY1NDYsIAotICAweDRlYTVlOWQsIDB4NWQzNThjMDEsIDB4NzM3NDg3ZmEsIDB4MmU0MTBiZmIsIAotICAweDVhMWQ2N2IzLCAweDUyZDJkYjkyLCAweDMzNTYxMGU5LCAweDEzNDdkNjZkLCAKLSAgMHg4YzYxZDc5YSwgMHg3YTBjYTEzNywgMHg4ZTE0Zjg1OSwgMHg4OTNjMTNlYiwgCi0gIDB4ZWUyN2E5Y2UsIDB4MzVjOTYxYjcsIDB4ZWRlNTFjZTEsIDB4M2NiMTQ3N2EsIAotICAweDU5ZGZkMjljLCAweDNmNzNmMjU1LCAweDc5Y2UxNDE4LCAweGJmMzdjNzczLCAKLSAgMHhlYWNkZjc1MywgMHg1YmFhZmQ1ZiwgMHgxNDZmM2RkZiwgMHg4NmRiNDQ3OCwgCi0gIDB4ODFmM2FmY2EsIDB4M2VjNDY4YjksIDB4MmMzNDI0MzgsIDB4NWY0MGEzYzIsIAotICAweDcyYzMxZDE2LCAweGMyNWUyYmMsIDB4OGI0OTNjMjgsIDB4NDE5NTBkZmYsIAotICAweDcxMDFhODM5LCAweGRlYjMwYzA4LCAweDljZTRiNGQ4LCAweDkwYzE1NjY0LCAKLSAgMHg2MTg0Y2I3YiwgMHg3MGI2MzJkNSwgMHg3NDVjNmM0OCwgMHg0MjU3YjhkMCwgCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgY29uc3QgdWludDMyX3QgVTBbMjU2XSA9IHsKKyAgICAweDUwYTdmNDUxLCAweDUzNjU0MTdlLCAgMHhjM2E0MTcxYSwgIDB4OTY1ZTI3M2EsCisgICAgMHhjYjZiYWIzYiwgMHhmMTQ1OWQxZiwgIDB4YWI1OGZhYWMsICAweDkzMDNlMzRiLAorICAgIDB4NTVmYTMwMjAsIDB4ZjY2ZDc2YWQsICAweDkxNzZjYzg4LCAgMHgyNTRjMDJmNSwKKyAgICAweGZjZDdlNTRmLCAweGQ3Y2IyYWM1LCAgMHg4MDQ0MzUyNiwgIDB4OGZhMzYyYjUsCisgICAgMHg0OTVhYjFkZSwgMHg2NzFiYmEyNSwgIDB4OTgwZWVhNDUsICAweGUxYzBmZTVkLAorICAgIDB4Mjc1MmZjMywgIDB4MTJmMDRjODEsICAweGEzOTc0NjhkLCAgMHhjNmY5ZDM2YiwKKyAgICAweGU3NWY4ZjAzLCAweDk1OWM5MjE1LCAgMHhlYjdhNmRiZiwgIDB4ZGE1OTUyOTUsCisgICAgMHgyZDgzYmVkNCwgMHhkMzIxNzQ1OCwgIDB4Mjk2OWUwNDksICAweDQ0YzhjOThlLAorICAgIDB4NmE4OWMyNzUsIDB4Nzg3OThlZjQsICAweDZiM2U1ODk5LCAgMHhkZDcxYjkyNywKKyAgICAweGI2NGZlMWJlLCAweDE3YWQ4OGYwLCAgMHg2NmFjMjBjOSwgIDB4YjQzYWNlN2QsCisgICAgMHgxODRhZGY2MywgMHg4MjMxMWFlNSwgIDB4NjAzMzUxOTcsICAweDQ1N2Y1MzYyLAorICAgIDB4ZTA3NzY0YjEsIDB4ODRhZTZiYmIsICAweDFjYTA4MWZlLCAgMHg5NDJiMDhmOSwKKyAgICAweDU4Njg0ODcwLCAweDE5ZmQ0NThmLCAgMHg4NzZjZGU5NCwgIDB4YjdmODdiNTIsCisgICAgMHgyM2QzNzNhYiwgMHhlMjAyNGI3MiwgIDB4NTc4ZjFmZTMsICAweDJhYWI1NTY2LAorICAgIDB4NzI4ZWJiMiwgIDB4M2MyYjUyZiwgICAweDlhN2JjNTg2LCAgMHhhNTA4MzdkMywKKyAgICAweGYyODcyODMwLCAweGIyYTViZjIzLCAgMHhiYTZhMDMwMiwgIDB4NWM4MjE2ZWQsCisgICAgMHgyYjFjY2Y4YSwgMHg5MmI0NzlhNywgIDB4ZjBmMjA3ZjMsICAweGExZTI2OTRlLAorICAgIDB4Y2RmNGRhNjUsIDB4ZDViZTA1MDYsICAweDFmNjIzNGQxLCAgMHg4YWZlYTZjNCwKKyAgICAweDlkNTMyZTM0LCAweGEwNTVmM2EyLCAgMHgzMmUxOGEwNSwgIDB4NzVlYmY2YTQsCisgICAgMHgzOWVjODMwYiwgMHhhYWVmNjA0MCwgIDB4NjlmNzE1ZSwgICAweDUxMTA2ZWJkLAorICAgIDB4Zjk4YTIxM2UsIDB4M2QwNmRkOTYsICAweGFlMDUzZWRkLCAgMHg0NmJkZTY0ZCwKKyAgICAweGI1OGQ1NDkxLCAweDU1ZGM0NzEsICAgMHg2ZmQ0MDYwNCwgIDB4ZmYxNTUwNjAsCisgICAgMHgyNGZiOTgxOSwgMHg5N2U5YmRkNiwgIDB4Y2M0MzQwODksICAweDc3OWVkOTY3LAorICAgIDB4YmQ0MmU4YjAsIDB4ODg4Yjg5MDcsICAweDM4NWIxOWU3LCAgMHhkYmVlYzg3OSwKKyAgICAweDQ3MGE3Y2ExLCAweGU5MGY0MjdjLCAgMHhjOTFlODRmOCwgIDB4MCwKKyAgICAweDgzODY4MDA5LCAweDQ4ZWQyYjMyLCAgMHhhYzcwMTExZSwgIDB4NGU3MjVhNmMsCisgICAgMHhmYmZmMGVmZCwgMHg1NjM4ODUwZiwgIDB4MWVkNWFlM2QsICAweDI3MzkyZDM2LAorICAgIDB4NjRkOTBmMGEsIDB4MjFhNjVjNjgsICAweGQxNTQ1YjliLCAgMHgzYTJlMzYyNCwKKyAgICAweGIxNjcwYTBjLCAweGZlNzU3OTMsICAgMHhkMjk2ZWViNCwgIDB4OWU5MTliMWIsCisgICAgMHg0ZmM1YzA4MCwgMHhhMjIwZGM2MSwgIDB4Njk0Yjc3NWEsICAweDE2MWExMjFjLAorICAgIDB4YWJhOTNlMiwgIDB4ZTUyYWEwYzAsICAweDQzZTAyMjNjLCAgMHgxZDE3MWIxMiwKKyAgICAweGIwZDA5MGUsICAweGFkYzc4YmYyLCAgMHhiOWE4YjYyZCwgIDB4YzhhOTFlMTQsCisgICAgMHg4NTE5ZjE1NywgMHg0YzA3NzVhZiwgIDB4YmJkZDk5ZWUsICAweGZkNjA3ZmEzLAorICAgIDB4OWYyNjAxZjcsIDB4YmNmNTcyNWMsICAweGM1M2I2NjQ0LCAgMHgzNDdlZmI1YiwKKyAgICAweDc2Mjk0MzhiLCAweGRjYzYyM2NiLCAgMHg2OGZjZWRiNiwgIDB4NjNmMWU0YjgsCisgICAgMHhjYWRjMzFkNywgMHgxMDg1NjM0MiwgIDB4NDAyMjk3MTMsICAweDIwMTFjNjg0LAorICAgIDB4N2QyNDRhODUsIDB4ZjgzZGJiZDIsICAweDExMzJmOWFlLCAgMHg2ZGExMjljNywKKyAgICAweDRiMmY5ZTFkLCAweGYzMzBiMmRjLCAgMHhlYzUyODYwZCwgIDB4ZDBlM2MxNzcsCisgICAgMHg2YzE2YjMyYiwgMHg5OWI5NzBhOSwgIDB4ZmE0ODk0MTEsICAweDIyNjRlOTQ3LAorICAgIDB4YzQ4Y2ZjYTgsIDB4MWEzZmYwYTAsICAweGQ4MmM3ZDU2LCAgMHhlZjkwMzMyMiwKKyAgICAweGM3NGU0OTg3LCAweGMxZDEzOGQ5LCAgMHhmZWEyY2E4YywgIDB4MzYwYmQ0OTgsCisgICAgMHhjZjgxZjVhNiwgMHgyOGRlN2FhNSwgIDB4MjY4ZWI3ZGEsICAweGE0YmZhZDNmLAorICAgIDB4ZTQ5ZDNhMmMsIDB4ZDkyNzg1MCwgICAweDliY2M1ZjZhLCAgMHg2MjQ2N2U1NCwKKyAgICAweGMyMTM4ZGY2LCAweGU4YjhkODkwLCAgMHg1ZWY3MzkyZSwgIDB4ZjVhZmMzODIsCisgICAgMHhiZTgwNWQ5ZiwgMHg3YzkzZDA2OSwgIDB4YTkyZGQ1NmYsICAweGIzMTIyNWNmLAorICAgIDB4M2I5OWFjYzgsIDB4YTc3ZDE4MTAsICAweDZlNjM5Y2U4LCAgMHg3YmJiM2JkYiwKKyAgICAweDk3ODI2Y2QsICAweGY0MTg1OTZlLCAgMHgxYjc5YWVjLCAgIDB4YTg5YTRmODMsCisgICAgMHg2NTZlOTVlNiwgMHg3ZWU2ZmZhYSwgIDB4OGNmYmMyMSwgICAweGU2ZTgxNWVmLAorICAgIDB4ZDk5YmU3YmEsIDB4Y2UzNjZmNGEsICAweGQ0MDk5ZmVhLCAgMHhkNjdjYjAyOSwKKyAgICAweGFmYjJhNDMxLCAweDMxMjMzZjJhLCAgMHgzMDk0YTVjNiwgIDB4YzA2NmEyMzUsCisgICAgMHgzN2JjNGU3NCwgMHhhNmNhODJmYywgIDB4YjBkMDkwZTAsICAweDE1ZDhhNzMzLAorICAgIDB4NGE5ODA0ZjEsIDB4ZjdkYWVjNDEsICAweGU1MGNkN2YsICAgMHgyZmY2OTExNywKKyAgICAweDhkZDY0ZDc2LCAweDRkYjBlZjQzLCAgMHg1NDRkYWFjYywgIDB4ZGYwNDk2ZTQsCisgICAgMHhlM2I1ZDE5ZSwgMHgxYjg4NmE0YywgIDB4YjgxZjJjYzEsICAweDdmNTE2NTQ2LAorICAgIDB4NGVhNWU5ZCwgIDB4NWQzNThjMDEsICAweDczNzQ4N2ZhLCAgMHgyZTQxMGJmYiwKKyAgICAweDVhMWQ2N2IzLCAweDUyZDJkYjkyLCAgMHgzMzU2MTBlOSwgIDB4MTM0N2Q2NmQsCisgICAgMHg4YzYxZDc5YSwgMHg3YTBjYTEzNywgIDB4OGUxNGY4NTksICAweDg5M2MxM2ViLAorICAgIDB4ZWUyN2E5Y2UsIDB4MzVjOTYxYjcsICAweGVkZTUxY2UxLCAgMHgzY2IxNDc3YSwKKyAgICAweDU5ZGZkMjljLCAweDNmNzNmMjU1LCAgMHg3OWNlMTQxOCwgIDB4YmYzN2M3NzMsCisgICAgMHhlYWNkZjc1MywgMHg1YmFhZmQ1ZiwgIDB4MTQ2ZjNkZGYsICAweDg2ZGI0NDc4LAorICAgIDB4ODFmM2FmY2EsIDB4M2VjNDY4YjksICAweDJjMzQyNDM4LCAgMHg1ZjQwYTNjMiwKKyAgICAweDcyYzMxZDE2LCAweGMyNWUyYmMsICAgMHg4YjQ5M2MyOCwgIDB4NDE5NTBkZmYsCisgICAgMHg3MTAxYTgzOSwgMHhkZWIzMGMwOCwgIDB4OWNlNGI0ZDgsICAweDkwYzE1NjY0LAorICAgIDB4NjE4NGNiN2IsIDB4NzBiNjMyZDUsICAweDc0NWM2YzQ4LCAgMHg0MjU3YjhkMCwKIH07CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KIAotdWludDMyX3QgVTFbMjU2XSA9IHsKLSAgMHhhN2Y0NTE1MCwgMHg2NTQxN2U1MywgMHhhNDE3MWFjMywgMHg1ZTI3M2E5NiwgCi0gIDB4NmJhYjNiY2IsIDB4NDU5ZDFmZjEsIDB4NThmYWFjYWIsIDB4M2UzNGI5MywgCi0gIDB4ZmEzMDIwNTUsIDB4NmQ3NmFkZjYsIDB4NzZjYzg4OTEsIDB4NGMwMmY1MjUsIAotICAweGQ3ZTU0ZmZjLCAweGNiMmFjNWQ3LCAweDQ0MzUyNjgwLCAweGEzNjJiNThmLCAKLSAgMHg1YWIxZGU0OSwgMHgxYmJhMjU2NywgMHhlZWE0NTk4LCAweGMwZmU1ZGUxLCAKLSAgMHg3NTJmYzMwMiwgMHhmMDRjODExMiwgMHg5NzQ2OGRhMywgMHhmOWQzNmJjNiwgCi0gIDB4NWY4ZjAzZTcsIDB4OWM5MjE1OTUsIDB4N2E2ZGJmZWIsIDB4NTk1Mjk1ZGEsIAotICAweDgzYmVkNDJkLCAweDIxNzQ1OGQzLCAweDY5ZTA0OTI5LCAweGM4Yzk4ZTQ0LCAKLSAgMHg4OWMyNzU2YSwgMHg3OThlZjQ3OCwgMHgzZTU4OTk2YiwgMHg3MWI5MjdkZCwgCi0gIDB4NGZlMWJlYjYsIDB4YWQ4OGYwMTcsIDB4YWMyMGM5NjYsIDB4M2FjZTdkYjQsIAotICAweDRhZGY2MzE4LCAweDMxMWFlNTgyLCAweDMzNTE5NzYwLCAweDdmNTM2MjQ1LCAKLSAgMHg3NzY0YjFlMCwgMHhhZTZiYmI4NCwgMHhhMDgxZmUxYywgMHgyYjA4Zjk5NCwgCi0gIDB4Njg0ODcwNTgsIDB4ZmQ0NThmMTksIDB4NmNkZTk0ODcsIDB4Zjg3YjUyYjcsIAotICAweGQzNzNhYjIzLCAweDI0YjcyZTIsIDB4OGYxZmUzNTcsIDB4YWI1NTY2MmEsIAotICAweDI4ZWJiMjA3LCAweGMyYjUyZjAzLCAweDdiYzU4NjlhLCAweDgzN2QzYTUsIAotICAweDg3MjgzMGYyLCAweGE1YmYyM2IyLCAweDZhMDMwMmJhLCAweDgyMTZlZDVjLCAKLSAgMHgxY2NmOGEyYiwgMHhiNDc5YTc5MiwgMHhmMjA3ZjNmMCwgMHhlMjY5NGVhMSwgCi0gIDB4ZjRkYTY1Y2QsIDB4YmUwNTA2ZDUsIDB4NjIzNGQxMWYsIDB4ZmVhNmM0OGEsIAotICAweDUzMmUzNDlkLCAweDU1ZjNhMmEwLCAweGUxOGEwNTMyLCAweGViZjZhNDc1LCAKLSAgMHhlYzgzMGIzOSwgMHhlZjYwNDBhYSwgMHg5ZjcxNWUwNiwgMHgxMDZlYmQ1MSwgCi0gIDB4OGEyMTNlZjksIDB4NmRkOTYzZCwgMHg1M2VkZGFlLCAweGJkZTY0ZDQ2LCAKLSAgMHg4ZDU0OTFiNSwgMHg1ZGM0NzEwNSwgMHhkNDA2MDQ2ZiwgMHgxNTUwNjBmZiwgCi0gIDB4ZmI5ODE5MjQsIDB4ZTliZGQ2OTcsIDB4NDM0MDg5Y2MsIDB4OWVkOTY3NzcsIAotICAweDQyZThiMGJkLCAweDhiODkwNzg4LCAweDViMTllNzM4LCAweGVlYzg3OWRiLCAKLSAgMHhhN2NhMTQ3LCAweGY0MjdjZTksIDB4MWU4NGY4YzksIDB4MCwgCi0gIDB4ODY4MDA5ODMsIDB4ZWQyYjMyNDgsIDB4NzAxMTFlYWMsIDB4NzI1YTZjNGUsIAotICAweGZmMGVmZGZiLCAweDM4ODUwZjU2LCAweGQ1YWUzZDFlLCAweDM5MmQzNjI3LCAKLSAgMHhkOTBmMGE2NCwgMHhhNjVjNjgyMSwgMHg1NDViOWJkMSwgMHgyZTM2MjQzYSwgCi0gIDB4NjcwYTBjYjEsIDB4ZTc1NzkzMGYsIDB4OTZlZWI0ZDIsIDB4OTE5YjFiOWUsIAotICAweGM1YzA4MDRmLCAweDIwZGM2MWEyLCAweDRiNzc1YTY5LCAweDFhMTIxYzE2LCAKLSAgMHhiYTkzZTIwYSwgMHgyYWEwYzBlNSwgMHhlMDIyM2M0MywgMHgxNzFiMTIxZCwgCi0gIDB4ZDA5MGUwYiwgMHhjNzhiZjJhZCwgMHhhOGI2MmRiOSwgMHhhOTFlMTRjOCwgCi0gIDB4MTlmMTU3ODUsIDB4Nzc1YWY0YywgMHhkZDk5ZWViYiwgMHg2MDdmYTNmZCwgCi0gIDB4MjYwMWY3OWYsIDB4ZjU3MjVjYmMsIDB4M2I2NjQ0YzUsIDB4N2VmYjViMzQsIAotICAweDI5NDM4Yjc2LCAweGM2MjNjYmRjLCAweGZjZWRiNjY4LCAweGYxZTRiODYzLCAKLSAgMHhkYzMxZDdjYSwgMHg4NTYzNDIxMCwgMHgyMjk3MTM0MCwgMHgxMWM2ODQyMCwgCi0gIDB4MjQ0YTg1N2QsIDB4M2RiYmQyZjgsIDB4MzJmOWFlMTEsIDB4YTEyOWM3NmQsIAotICAweDJmOWUxZDRiLCAweDMwYjJkY2YzLCAweDUyODYwZGVjLCAweGUzYzE3N2QwLCAKLSAgMHgxNmIzMmI2YywgMHhiOTcwYTk5OSwgMHg0ODk0MTFmYSwgMHg2NGU5NDcyMiwgCi0gIDB4OGNmY2E4YzQsIDB4M2ZmMGEwMWEsIDB4MmM3ZDU2ZDgsIDB4OTAzMzIyZWYsIAotICAweDRlNDk4N2M3LCAweGQxMzhkOWMxLCAweGEyY2E4Y2ZlLCAweGJkNDk4MzYsIAotICAweDgxZjVhNmNmLCAweGRlN2FhNTI4LCAweDhlYjdkYTI2LCAweGJmYWQzZmE0LCAKLSAgMHg5ZDNhMmNlNCwgMHg5Mjc4NTAwZCwgMHhjYzVmNmE5YiwgMHg0NjdlNTQ2MiwgCi0gIDB4MTM4ZGY2YzIsIDB4YjhkODkwZTgsIDB4ZjczOTJlNWUsIDB4YWZjMzgyZjUsIAotICAweDgwNWQ5ZmJlLCAweDkzZDA2OTdjLCAweDJkZDU2ZmE5LCAweDEyMjVjZmIzLCAKLSAgMHg5OWFjYzgzYiwgMHg3ZDE4MTBhNywgMHg2MzljZTg2ZSwgMHhiYjNiZGI3YiwgCi0gIDB4NzgyNmNkMDksIDB4MTg1OTZlZjQsIDB4Yjc5YWVjMDEsIDB4OWE0ZjgzYTgsIAotICAweDZlOTVlNjY1LCAweGU2ZmZhYTdlLCAweGNmYmMyMTA4LCAweGU4MTVlZmU2LCAKLSAgMHg5YmU3YmFkOSwgMHgzNjZmNGFjZSwgMHg5OWZlYWQ0LCAweDdjYjAyOWQ2LCAKLSAgMHhiMmE0MzFhZiwgMHgyMzNmMmEzMSwgMHg5NGE1YzYzMCwgMHg2NmEyMzVjMCwgCi0gIDB4YmM0ZTc0MzcsIDB4Y2E4MmZjYTYsIDB4ZDA5MGUwYjAsIDB4ZDhhNzMzMTUsIAotICAweDk4MDRmMTRhLCAweGRhZWM0MWY3LCAweDUwY2Q3ZjBlLCAweGY2OTExNzJmLCAKLSAgMHhkNjRkNzY4ZCwgMHhiMGVmNDM0ZCwgMHg0ZGFhY2M1NCwgMHg0OTZlNGRmLCAKLSAgMHhiNWQxOWVlMywgMHg4ODZhNGMxYiwgMHgxZjJjYzFiOCwgMHg1MTY1NDY3ZiwgCi0gIDB4ZWE1ZTlkMDQsIDB4MzU4YzAxNWQsIDB4NzQ4N2ZhNzMsIDB4NDEwYmZiMmUsIAotICAweDFkNjdiMzVhLCAweGQyZGI5MjUyLCAweDU2MTBlOTMzLCAweDQ3ZDY2ZDEzLCAKLSAgMHg2MWQ3OWE4YywgMHhjYTEzNzdhLCAweDE0Zjg1OThlLCAweDNjMTNlYjg5LCAKLSAgMHgyN2E5Y2VlZSwgMHhjOTYxYjczNSwgMHhlNTFjZTFlZCwgMHhiMTQ3N2EzYywgCi0gIDB4ZGZkMjljNTksIDB4NzNmMjU1M2YsIDB4Y2UxNDE4NzksIDB4MzdjNzczYmYsIAotICAweGNkZjc1M2VhLCAweGFhZmQ1ZjViLCAweDZmM2RkZjE0LCAweGRiNDQ3ODg2LCAKLSAgMHhmM2FmY2E4MSwgMHhjNDY4YjkzZSwgMHgzNDI0MzgyYywgMHg0MGEzYzI1ZiwgCi0gIDB4YzMxZDE2NzIsIDB4MjVlMmJjMGMsIDB4NDkzYzI4OGIsIDB4OTUwZGZmNDEsIAotICAweDFhODM5NzEsIDB4YjMwYzA4ZGUsIDB4ZTRiNGQ4OWMsIDB4YzE1NjY0OTAsIAotICAweDg0Y2I3YjYxLCAweGI2MzJkNTcwLCAweDVjNmM0ODc0LCAweDU3YjhkMDQyLCAKKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KK3N0YXRpYyBjb25zdCB1aW50MzJfdCBVMVsyNTZdID0geworICAgIDB4YTdmNDUxNTAsIDB4NjU0MTdlNTMsICAweGE0MTcxYWMzLCAgMHg1ZTI3M2E5NiwKKyAgICAweDZiYWIzYmNiLCAweDQ1OWQxZmYxLCAgMHg1OGZhYWNhYiwgIDB4M2UzNGI5MywKKyAgICAweGZhMzAyMDU1LCAweDZkNzZhZGY2LCAgMHg3NmNjODg5MSwgIDB4NGMwMmY1MjUsCisgICAgMHhkN2U1NGZmYywgMHhjYjJhYzVkNywgIDB4NDQzNTI2ODAsICAweGEzNjJiNThmLAorICAgIDB4NWFiMWRlNDksIDB4MWJiYTI1NjcsICAweGVlYTQ1OTgsICAgMHhjMGZlNWRlMSwKKyAgICAweDc1MmZjMzAyLCAweGYwNGM4MTEyLCAgMHg5NzQ2OGRhMywgIDB4ZjlkMzZiYzYsCisgICAgMHg1ZjhmMDNlNywgMHg5YzkyMTU5NSwgIDB4N2E2ZGJmZWIsICAweDU5NTI5NWRhLAorICAgIDB4ODNiZWQ0MmQsIDB4MjE3NDU4ZDMsICAweDY5ZTA0OTI5LCAgMHhjOGM5OGU0NCwKKyAgICAweDg5YzI3NTZhLCAweDc5OGVmNDc4LCAgMHgzZTU4OTk2YiwgIDB4NzFiOTI3ZGQsCisgICAgMHg0ZmUxYmViNiwgMHhhZDg4ZjAxNywgIDB4YWMyMGM5NjYsICAweDNhY2U3ZGI0LAorICAgIDB4NGFkZjYzMTgsIDB4MzExYWU1ODIsICAweDMzNTE5NzYwLCAgMHg3ZjUzNjI0NSwKKyAgICAweDc3NjRiMWUwLCAweGFlNmJiYjg0LCAgMHhhMDgxZmUxYywgIDB4MmIwOGY5OTQsCisgICAgMHg2ODQ4NzA1OCwgMHhmZDQ1OGYxOSwgIDB4NmNkZTk0ODcsICAweGY4N2I1MmI3LAorICAgIDB4ZDM3M2FiMjMsIDB4MjRiNzJlMiwgICAweDhmMWZlMzU3LCAgMHhhYjU1NjYyYSwKKyAgICAweDI4ZWJiMjA3LCAweGMyYjUyZjAzLCAgMHg3YmM1ODY5YSwgIDB4ODM3ZDNhNSwKKyAgICAweDg3MjgzMGYyLCAweGE1YmYyM2IyLCAgMHg2YTAzMDJiYSwgIDB4ODIxNmVkNWMsCisgICAgMHgxY2NmOGEyYiwgMHhiNDc5YTc5MiwgIDB4ZjIwN2YzZjAsICAweGUyNjk0ZWExLAorICAgIDB4ZjRkYTY1Y2QsIDB4YmUwNTA2ZDUsICAweDYyMzRkMTFmLCAgMHhmZWE2YzQ4YSwKKyAgICAweDUzMmUzNDlkLCAweDU1ZjNhMmEwLCAgMHhlMThhMDUzMiwgIDB4ZWJmNmE0NzUsCisgICAgMHhlYzgzMGIzOSwgMHhlZjYwNDBhYSwgIDB4OWY3MTVlMDYsICAweDEwNmViZDUxLAorICAgIDB4OGEyMTNlZjksIDB4NmRkOTYzZCwgICAweDUzZWRkYWUsICAgMHhiZGU2NGQ0NiwKKyAgICAweDhkNTQ5MWI1LCAweDVkYzQ3MTA1LCAgMHhkNDA2MDQ2ZiwgIDB4MTU1MDYwZmYsCisgICAgMHhmYjk4MTkyNCwgMHhlOWJkZDY5NywgIDB4NDM0MDg5Y2MsICAweDllZDk2Nzc3LAorICAgIDB4NDJlOGIwYmQsIDB4OGI4OTA3ODgsICAweDViMTllNzM4LCAgMHhlZWM4NzlkYiwKKyAgICAweGE3Y2ExNDcsICAweGY0MjdjZTksICAgMHgxZTg0ZjhjOSwgIDB4MCwKKyAgICAweDg2ODAwOTgzLCAweGVkMmIzMjQ4LCAgMHg3MDExMWVhYywgIDB4NzI1YTZjNGUsCisgICAgMHhmZjBlZmRmYiwgMHgzODg1MGY1NiwgIDB4ZDVhZTNkMWUsICAweDM5MmQzNjI3LAorICAgIDB4ZDkwZjBhNjQsIDB4YTY1YzY4MjEsICAweDU0NWI5YmQxLCAgMHgyZTM2MjQzYSwKKyAgICAweDY3MGEwY2IxLCAweGU3NTc5MzBmLCAgMHg5NmVlYjRkMiwgIDB4OTE5YjFiOWUsCisgICAgMHhjNWMwODA0ZiwgMHgyMGRjNjFhMiwgIDB4NGI3NzVhNjksICAweDFhMTIxYzE2LAorICAgIDB4YmE5M2UyMGEsIDB4MmFhMGMwZTUsICAweGUwMjIzYzQzLCAgMHgxNzFiMTIxZCwKKyAgICAweGQwOTBlMGIsICAweGM3OGJmMmFkLCAgMHhhOGI2MmRiOSwgIDB4YTkxZTE0YzgsCisgICAgMHgxOWYxNTc4NSwgMHg3NzVhZjRjLCAgIDB4ZGQ5OWVlYmIsICAweDYwN2ZhM2ZkLAorICAgIDB4MjYwMWY3OWYsIDB4ZjU3MjVjYmMsICAweDNiNjY0NGM1LCAgMHg3ZWZiNWIzNCwKKyAgICAweDI5NDM4Yjc2LCAweGM2MjNjYmRjLCAgMHhmY2VkYjY2OCwgIDB4ZjFlNGI4NjMsCisgICAgMHhkYzMxZDdjYSwgMHg4NTYzNDIxMCwgIDB4MjI5NzEzNDAsICAweDExYzY4NDIwLAorICAgIDB4MjQ0YTg1N2QsIDB4M2RiYmQyZjgsICAweDMyZjlhZTExLCAgMHhhMTI5Yzc2ZCwKKyAgICAweDJmOWUxZDRiLCAweDMwYjJkY2YzLCAgMHg1Mjg2MGRlYywgIDB4ZTNjMTc3ZDAsCisgICAgMHgxNmIzMmI2YywgMHhiOTcwYTk5OSwgIDB4NDg5NDExZmEsICAweDY0ZTk0NzIyLAorICAgIDB4OGNmY2E4YzQsIDB4M2ZmMGEwMWEsICAweDJjN2Q1NmQ4LCAgMHg5MDMzMjJlZiwKKyAgICAweDRlNDk4N2M3LCAweGQxMzhkOWMxLCAgMHhhMmNhOGNmZSwgIDB4YmQ0OTgzNiwKKyAgICAweDgxZjVhNmNmLCAweGRlN2FhNTI4LCAgMHg4ZWI3ZGEyNiwgIDB4YmZhZDNmYTQsCisgICAgMHg5ZDNhMmNlNCwgMHg5Mjc4NTAwZCwgIDB4Y2M1ZjZhOWIsICAweDQ2N2U1NDYyLAorICAgIDB4MTM4ZGY2YzIsIDB4YjhkODkwZTgsICAweGY3MzkyZTVlLCAgMHhhZmMzODJmNSwKKyAgICAweDgwNWQ5ZmJlLCAweDkzZDA2OTdjLCAgMHgyZGQ1NmZhOSwgIDB4MTIyNWNmYjMsCisgICAgMHg5OWFjYzgzYiwgMHg3ZDE4MTBhNywgIDB4NjM5Y2U4NmUsICAweGJiM2JkYjdiLAorICAgIDB4NzgyNmNkMDksIDB4MTg1OTZlZjQsICAweGI3OWFlYzAxLCAgMHg5YTRmODNhOCwKKyAgICAweDZlOTVlNjY1LCAweGU2ZmZhYTdlLCAgMHhjZmJjMjEwOCwgIDB4ZTgxNWVmZTYsCisgICAgMHg5YmU3YmFkOSwgMHgzNjZmNGFjZSwgIDB4OTlmZWFkNCwgICAweDdjYjAyOWQ2LAorICAgIDB4YjJhNDMxYWYsIDB4MjMzZjJhMzEsICAweDk0YTVjNjMwLCAgMHg2NmEyMzVjMCwKKyAgICAweGJjNGU3NDM3LCAweGNhODJmY2E2LCAgMHhkMDkwZTBiMCwgIDB4ZDhhNzMzMTUsCisgICAgMHg5ODA0ZjE0YSwgMHhkYWVjNDFmNywgIDB4NTBjZDdmMGUsICAweGY2OTExNzJmLAorICAgIDB4ZDY0ZDc2OGQsIDB4YjBlZjQzNGQsICAweDRkYWFjYzU0LCAgMHg0OTZlNGRmLAorICAgIDB4YjVkMTllZTMsIDB4ODg2YTRjMWIsICAweDFmMmNjMWI4LCAgMHg1MTY1NDY3ZiwKKyAgICAweGVhNWU5ZDA0LCAweDM1OGMwMTVkLCAgMHg3NDg3ZmE3MywgIDB4NDEwYmZiMmUsCisgICAgMHgxZDY3YjM1YSwgMHhkMmRiOTI1MiwgIDB4NTYxMGU5MzMsICAweDQ3ZDY2ZDEzLAorICAgIDB4NjFkNzlhOGMsIDB4Y2ExMzc3YSwgICAweDE0Zjg1OThlLCAgMHgzYzEzZWI4OSwKKyAgICAweDI3YTljZWVlLCAweGM5NjFiNzM1LCAgMHhlNTFjZTFlZCwgIDB4YjE0NzdhM2MsCisgICAgMHhkZmQyOWM1OSwgMHg3M2YyNTUzZiwgIDB4Y2UxNDE4NzksICAweDM3Yzc3M2JmLAorICAgIDB4Y2RmNzUzZWEsIDB4YWFmZDVmNWIsICAweDZmM2RkZjE0LCAgMHhkYjQ0Nzg4NiwKKyAgICAweGYzYWZjYTgxLCAweGM0NjhiOTNlLCAgMHgzNDI0MzgyYywgIDB4NDBhM2MyNWYsCisgICAgMHhjMzFkMTY3MiwgMHgyNWUyYmMwYywgIDB4NDkzYzI4OGIsICAweDk1MGRmZjQxLAorICAgIDB4MWE4Mzk3MSwgIDB4YjMwYzA4ZGUsICAweGU0YjRkODljLCAgMHhjMTU2NjQ5MCwKKyAgICAweDg0Y2I3YjYxLCAweGI2MzJkNTcwLCAgMHg1YzZjNDg3NCwgIDB4NTdiOGQwNDIsCiB9OworLyogY2xhbmctZm9ybWF0IG9uICovCiAKLXVpbnQzMl90IFUyWzI1Nl0gPSB7Ci0gIDB4ZjQ1MTUwYTcsIDB4NDE3ZTUzNjUsIDB4MTcxYWMzYTQsIDB4MjczYTk2NWUsIAotICAweGFiM2JjYjZiLCAweDlkMWZmMTQ1LCAweGZhYWNhYjU4LCAweGUzNGI5MzAzLCAKLSAgMHgzMDIwNTVmYSwgMHg3NmFkZjY2ZCwgMHhjYzg4OTE3NiwgMHgyZjUyNTRjLCAKLSAgMHhlNTRmZmNkNywgMHgyYWM1ZDdjYiwgMHgzNTI2ODA0NCwgMHg2MmI1OGZhMywgCi0gIDB4YjFkZTQ5NWEsIDB4YmEyNTY3MWIsIDB4ZWE0NTk4MGUsIDB4ZmU1ZGUxYzAsIAotICAweDJmYzMwMjc1LCAweDRjODExMmYwLCAweDQ2OGRhMzk3LCAweGQzNmJjNmY5LCAKLSAgMHg4ZjAzZTc1ZiwgMHg5MjE1OTU5YywgMHg2ZGJmZWI3YSwgMHg1Mjk1ZGE1OSwgCi0gIDB4YmVkNDJkODMsIDB4NzQ1OGQzMjEsIDB4ZTA0OTI5NjksIDB4Yzk4ZTQ0YzgsIAotICAweGMyNzU2YTg5LCAweDhlZjQ3ODc5LCAweDU4OTk2YjNlLCAweGI5MjdkZDcxLCAKLSAgMHhlMWJlYjY0ZiwgMHg4OGYwMTdhZCwgMHgyMGM5NjZhYywgMHhjZTdkYjQzYSwgCi0gIDB4ZGY2MzE4NGEsIDB4MWFlNTgyMzEsIDB4NTE5NzYwMzMsIDB4NTM2MjQ1N2YsIAotICAweDY0YjFlMDc3LCAweDZiYmI4NGFlLCAweDgxZmUxY2EwLCAweDhmOTk0MmIsIAotICAweDQ4NzA1ODY4LCAweDQ1OGYxOWZkLCAweGRlOTQ4NzZjLCAweDdiNTJiN2Y4LCAKLSAgMHg3M2FiMjNkMywgMHg0YjcyZTIwMiwgMHgxZmUzNTc4ZiwgMHg1NTY2MmFhYiwgCi0gIDB4ZWJiMjA3MjgsIDB4YjUyZjAzYzIsIDB4YzU4NjlhN2IsIDB4MzdkM2E1MDgsIAotICAweDI4MzBmMjg3LCAweGJmMjNiMmE1LCAweDMwMmJhNmEsIDB4MTZlZDVjODIsIAotICAweGNmOGEyYjFjLCAweDc5YTc5MmI0LCAweDdmM2YwZjIsIDB4Njk0ZWExZTIsIAotICAweGRhNjVjZGY0LCAweDUwNmQ1YmUsIDB4MzRkMTFmNjIsIDB4YTZjNDhhZmUsIAotICAweDJlMzQ5ZDUzLCAweGYzYTJhMDU1LCAweDhhMDUzMmUxLCAweGY2YTQ3NWViLCAKLSAgMHg4MzBiMzllYywgMHg2MDQwYWFlZiwgMHg3MTVlMDY5ZiwgMHg2ZWJkNTExMCwgCi0gIDB4MjEzZWY5OGEsIDB4ZGQ5NjNkMDYsIDB4M2VkZGFlMDUsIDB4ZTY0ZDQ2YmQsIAotICAweDU0OTFiNThkLCAweGM0NzEwNTVkLCAweDYwNDZmZDQsIDB4NTA2MGZmMTUsIAotICAweDk4MTkyNGZiLCAweGJkZDY5N2U5LCAweDQwODljYzQzLCAweGQ5Njc3NzllLCAKLSAgMHhlOGIwYmQ0MiwgMHg4OTA3ODg4YiwgMHgxOWU3Mzg1YiwgMHhjODc5ZGJlZSwgCi0gIDB4N2NhMTQ3MGEsIDB4NDI3Y2U5MGYsIDB4ODRmOGM5MWUsIDB4MCwgCi0gIDB4ODAwOTgzODYsIDB4MmIzMjQ4ZWQsIDB4MTExZWFjNzAsIDB4NWE2YzRlNzIsIAotICAweGVmZGZiZmYsIDB4ODUwZjU2MzgsIDB4YWUzZDFlZDUsIDB4MmQzNjI3MzksIAotICAweGYwYTY0ZDksIDB4NWM2ODIxYTYsIDB4NWI5YmQxNTQsIDB4MzYyNDNhMmUsIAotICAweGEwY2IxNjcsIDB4NTc5MzBmZTcsIDB4ZWViNGQyOTYsIDB4OWIxYjllOTEsIAotICAweGMwODA0ZmM1LCAweGRjNjFhMjIwLCAweDc3NWE2OTRiLCAweDEyMWMxNjFhLCAKLSAgMHg5M2UyMGFiYSwgMHhhMGMwZTUyYSwgMHgyMjNjNDNlMCwgMHgxYjEyMWQxNywgCi0gIDB4OTBlMGIwZCwgMHg4YmYyYWRjNywgMHhiNjJkYjlhOCwgMHgxZTE0YzhhOSwgCi0gIDB4ZjE1Nzg1MTksIDB4NzVhZjRjMDcsIDB4OTllZWJiZGQsIDB4N2ZhM2ZkNjAsIAotICAweDFmNzlmMjYsIDB4NzI1Y2JjZjUsIDB4NjY0NGM1M2IsIDB4ZmI1YjM0N2UsIAotICAweDQzOGI3NjI5LCAweDIzY2JkY2M2LCAweGVkYjY2OGZjLCAweGU0Yjg2M2YxLCAKLSAgMHgzMWQ3Y2FkYywgMHg2MzQyMTA4NSwgMHg5NzEzNDAyMiwgMHhjNjg0MjAxMSwgCi0gIDB4NGE4NTdkMjQsIDB4YmJkMmY4M2QsIDB4ZjlhZTExMzIsIDB4MjljNzZkYTEsIAotICAweDllMWQ0YjJmLCAweGIyZGNmMzMwLCAweDg2MGRlYzUyLCAweGMxNzdkMGUzLCAKLSAgMHhiMzJiNmMxNiwgMHg3MGE5OTliOSwgMHg5NDExZmE0OCwgMHhlOTQ3MjI2NCwgCi0gIDB4ZmNhOGM0OGMsIDB4ZjBhMDFhM2YsIDB4N2Q1NmQ4MmMsIDB4MzMyMmVmOTAsIAotICAweDQ5ODdjNzRlLCAweDM4ZDljMWQxLCAweGNhOGNmZWEyLCAweGQ0OTgzNjBiLCAKLSAgMHhmNWE2Y2Y4MSwgMHg3YWE1MjhkZSwgMHhiN2RhMjY4ZSwgMHhhZDNmYTRiZiwgCi0gIDB4M2EyY2U0OWQsIDB4Nzg1MDBkOTIsIDB4NWY2YTliY2MsIDB4N2U1NDYyNDYsIAotICAweDhkZjZjMjEzLCAweGQ4OTBlOGI4LCAweDM5MmU1ZWY3LCAweGMzODJmNWFmLCAKLSAgMHg1ZDlmYmU4MCwgMHhkMDY5N2M5MywgMHhkNTZmYTkyZCwgMHgyNWNmYjMxMiwgCi0gIDB4YWNjODNiOTksIDB4MTgxMGE3N2QsIDB4OWNlODZlNjMsIDB4M2JkYjdiYmIsIAotICAweDI2Y2QwOTc4LCAweDU5NmVmNDE4LCAweDlhZWMwMWI3LCAweDRmODNhODlhLCAKLSAgMHg5NWU2NjU2ZSwgMHhmZmFhN2VlNiwgMHhiYzIxMDhjZiwgMHgxNWVmZTZlOCwgCi0gIDB4ZTdiYWQ5OWIsIDB4NmY0YWNlMzYsIDB4OWZlYWQ0MDksIDB4YjAyOWQ2N2MsIAotICAweGE0MzFhZmIyLCAweDNmMmEzMTIzLCAweGE1YzYzMDk0LCAweGEyMzVjMDY2LCAKLSAgMHg0ZTc0MzdiYywgMHg4MmZjYTZjYSwgMHg5MGUwYjBkMCwgMHhhNzMzMTVkOCwgCi0gIDB4NGYxNGE5OCwgMHhlYzQxZjdkYSwgMHhjZDdmMGU1MCwgMHg5MTE3MmZmNiwgCi0gIDB4NGQ3NjhkZDYsIDB4ZWY0MzRkYjAsIDB4YWFjYzU0NGQsIDB4OTZlNGRmMDQsIAotICAweGQxOWVlM2I1LCAweDZhNGMxYjg4LCAweDJjYzFiODFmLCAweDY1NDY3ZjUxLCAKLSAgMHg1ZTlkMDRlYSwgMHg4YzAxNWQzNSwgMHg4N2ZhNzM3NCwgMHhiZmIyZTQxLCAKLSAgMHg2N2IzNWExZCwgMHhkYjkyNTJkMiwgMHgxMGU5MzM1NiwgMHhkNjZkMTM0NywgCi0gIDB4ZDc5YThjNjEsIDB4YTEzNzdhMGMsIDB4Zjg1OThlMTQsIDB4MTNlYjg5M2MsIAotICAweGE5Y2VlZTI3LCAweDYxYjczNWM5LCAweDFjZTFlZGU1LCAweDQ3N2EzY2IxLCAKLSAgMHhkMjljNTlkZiwgMHhmMjU1M2Y3MywgMHgxNDE4NzljZSwgMHhjNzczYmYzNywgCi0gIDB4Zjc1M2VhY2QsIDB4ZmQ1ZjViYWEsIDB4M2RkZjE0NmYsIDB4NDQ3ODg2ZGIsIAotICAweGFmY2E4MWYzLCAweDY4YjkzZWM0LCAweDI0MzgyYzM0LCAweGEzYzI1ZjQwLCAKLSAgMHgxZDE2NzJjMywgMHhlMmJjMGMyNSwgMHgzYzI4OGI0OSwgMHhkZmY0MTk1LCAKLSAgMHhhODM5NzEwMSwgMHhjMDhkZWIzLCAweGI0ZDg5Y2U0LCAweDU2NjQ5MGMxLCAKLSAgMHhjYjdiNjE4NCwgMHgzMmQ1NzBiNiwgMHg2YzQ4NzQ1YywgMHhiOGQwNDI1NywgCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgY29uc3QgdWludDMyX3QgVTJbMjU2XSA9IHsKKyAgICAweGY0NTE1MGE3LCAweDQxN2U1MzY1LCAgMHgxNzFhYzNhNCwgIDB4MjczYTk2NWUsCisgICAgMHhhYjNiY2I2YiwgMHg5ZDFmZjE0NSwgIDB4ZmFhY2FiNTgsICAweGUzNGI5MzAzLAorICAgIDB4MzAyMDU1ZmEsIDB4NzZhZGY2NmQsICAweGNjODg5MTc2LCAgMHgyZjUyNTRjLAorICAgIDB4ZTU0ZmZjZDcsIDB4MmFjNWQ3Y2IsICAweDM1MjY4MDQ0LCAgMHg2MmI1OGZhMywKKyAgICAweGIxZGU0OTVhLCAweGJhMjU2NzFiLCAgMHhlYTQ1OTgwZSwgIDB4ZmU1ZGUxYzAsCisgICAgMHgyZmMzMDI3NSwgMHg0YzgxMTJmMCwgIDB4NDY4ZGEzOTcsICAweGQzNmJjNmY5LAorICAgIDB4OGYwM2U3NWYsIDB4OTIxNTk1OWMsICAweDZkYmZlYjdhLCAgMHg1Mjk1ZGE1OSwKKyAgICAweGJlZDQyZDgzLCAweDc0NThkMzIxLCAgMHhlMDQ5Mjk2OSwgIDB4Yzk4ZTQ0YzgsCisgICAgMHhjMjc1NmE4OSwgMHg4ZWY0Nzg3OSwgIDB4NTg5OTZiM2UsICAweGI5MjdkZDcxLAorICAgIDB4ZTFiZWI2NGYsIDB4ODhmMDE3YWQsICAweDIwYzk2NmFjLCAgMHhjZTdkYjQzYSwKKyAgICAweGRmNjMxODRhLCAweDFhZTU4MjMxLCAgMHg1MTk3NjAzMywgIDB4NTM2MjQ1N2YsCisgICAgMHg2NGIxZTA3NywgMHg2YmJiODRhZSwgIDB4ODFmZTFjYTAsICAweDhmOTk0MmIsCisgICAgMHg0ODcwNTg2OCwgMHg0NThmMTlmZCwgIDB4ZGU5NDg3NmMsICAweDdiNTJiN2Y4LAorICAgIDB4NzNhYjIzZDMsIDB4NGI3MmUyMDIsICAweDFmZTM1NzhmLCAgMHg1NTY2MmFhYiwKKyAgICAweGViYjIwNzI4LCAweGI1MmYwM2MyLCAgMHhjNTg2OWE3YiwgIDB4MzdkM2E1MDgsCisgICAgMHgyODMwZjI4NywgMHhiZjIzYjJhNSwgIDB4MzAyYmE2YSwgICAweDE2ZWQ1YzgyLAorICAgIDB4Y2Y4YTJiMWMsIDB4NzlhNzkyYjQsICAweDdmM2YwZjIsICAgMHg2OTRlYTFlMiwKKyAgICAweGRhNjVjZGY0LCAweDUwNmQ1YmUsICAgMHgzNGQxMWY2MiwgIDB4YTZjNDhhZmUsCisgICAgMHgyZTM0OWQ1MywgMHhmM2EyYTA1NSwgIDB4OGEwNTMyZTEsICAweGY2YTQ3NWViLAorICAgIDB4ODMwYjM5ZWMsIDB4NjA0MGFhZWYsICAweDcxNWUwNjlmLCAgMHg2ZWJkNTExMCwKKyAgICAweDIxM2VmOThhLCAweGRkOTYzZDA2LCAgMHgzZWRkYWUwNSwgIDB4ZTY0ZDQ2YmQsCisgICAgMHg1NDkxYjU4ZCwgMHhjNDcxMDU1ZCwgIDB4NjA0NmZkNCwgICAweDUwNjBmZjE1LAorICAgIDB4OTgxOTI0ZmIsIDB4YmRkNjk3ZTksICAweDQwODljYzQzLCAgMHhkOTY3Nzc5ZSwKKyAgICAweGU4YjBiZDQyLCAweDg5MDc4ODhiLCAgMHgxOWU3Mzg1YiwgIDB4Yzg3OWRiZWUsCisgICAgMHg3Y2ExNDcwYSwgMHg0MjdjZTkwZiwgIDB4ODRmOGM5MWUsICAweDAsCisgICAgMHg4MDA5ODM4NiwgMHgyYjMyNDhlZCwgIDB4MTExZWFjNzAsICAweDVhNmM0ZTcyLAorICAgIDB4ZWZkZmJmZiwgIDB4ODUwZjU2MzgsICAweGFlM2QxZWQ1LCAgMHgyZDM2MjczOSwKKyAgICAweGYwYTY0ZDksICAweDVjNjgyMWE2LCAgMHg1YjliZDE1NCwgIDB4MzYyNDNhMmUsCisgICAgMHhhMGNiMTY3LCAgMHg1NzkzMGZlNywgIDB4ZWViNGQyOTYsICAweDliMWI5ZTkxLAorICAgIDB4YzA4MDRmYzUsIDB4ZGM2MWEyMjAsICAweDc3NWE2OTRiLCAgMHgxMjFjMTYxYSwKKyAgICAweDkzZTIwYWJhLCAweGEwYzBlNTJhLCAgMHgyMjNjNDNlMCwgIDB4MWIxMjFkMTcsCisgICAgMHg5MGUwYjBkLCAgMHg4YmYyYWRjNywgIDB4YjYyZGI5YTgsICAweDFlMTRjOGE5LAorICAgIDB4ZjE1Nzg1MTksIDB4NzVhZjRjMDcsICAweDk5ZWViYmRkLCAgMHg3ZmEzZmQ2MCwKKyAgICAweDFmNzlmMjYsICAweDcyNWNiY2Y1LCAgMHg2NjQ0YzUzYiwgIDB4ZmI1YjM0N2UsCisgICAgMHg0MzhiNzYyOSwgMHgyM2NiZGNjNiwgIDB4ZWRiNjY4ZmMsICAweGU0Yjg2M2YxLAorICAgIDB4MzFkN2NhZGMsIDB4NjM0MjEwODUsICAweDk3MTM0MDIyLCAgMHhjNjg0MjAxMSwKKyAgICAweDRhODU3ZDI0LCAweGJiZDJmODNkLCAgMHhmOWFlMTEzMiwgIDB4MjljNzZkYTEsCisgICAgMHg5ZTFkNGIyZiwgMHhiMmRjZjMzMCwgIDB4ODYwZGVjNTIsICAweGMxNzdkMGUzLAorICAgIDB4YjMyYjZjMTYsIDB4NzBhOTk5YjksICAweDk0MTFmYTQ4LCAgMHhlOTQ3MjI2NCwKKyAgICAweGZjYThjNDhjLCAweGYwYTAxYTNmLCAgMHg3ZDU2ZDgyYywgIDB4MzMyMmVmOTAsCisgICAgMHg0OTg3Yzc0ZSwgMHgzOGQ5YzFkMSwgIDB4Y2E4Y2ZlYTIsICAweGQ0OTgzNjBiLAorICAgIDB4ZjVhNmNmODEsIDB4N2FhNTI4ZGUsICAweGI3ZGEyNjhlLCAgMHhhZDNmYTRiZiwKKyAgICAweDNhMmNlNDlkLCAweDc4NTAwZDkyLCAgMHg1ZjZhOWJjYywgIDB4N2U1NDYyNDYsCisgICAgMHg4ZGY2YzIxMywgMHhkODkwZThiOCwgIDB4MzkyZTVlZjcsICAweGMzODJmNWFmLAorICAgIDB4NWQ5ZmJlODAsIDB4ZDA2OTdjOTMsICAweGQ1NmZhOTJkLCAgMHgyNWNmYjMxMiwKKyAgICAweGFjYzgzYjk5LCAweDE4MTBhNzdkLCAgMHg5Y2U4NmU2MywgIDB4M2JkYjdiYmIsCisgICAgMHgyNmNkMDk3OCwgMHg1OTZlZjQxOCwgIDB4OWFlYzAxYjcsICAweDRmODNhODlhLAorICAgIDB4OTVlNjY1NmUsIDB4ZmZhYTdlZTYsICAweGJjMjEwOGNmLCAgMHgxNWVmZTZlOCwKKyAgICAweGU3YmFkOTliLCAweDZmNGFjZTM2LCAgMHg5ZmVhZDQwOSwgIDB4YjAyOWQ2N2MsCisgICAgMHhhNDMxYWZiMiwgMHgzZjJhMzEyMywgIDB4YTVjNjMwOTQsICAweGEyMzVjMDY2LAorICAgIDB4NGU3NDM3YmMsIDB4ODJmY2E2Y2EsICAweDkwZTBiMGQwLCAgMHhhNzMzMTVkOCwKKyAgICAweDRmMTRhOTgsICAweGVjNDFmN2RhLCAgMHhjZDdmMGU1MCwgIDB4OTExNzJmZjYsCisgICAgMHg0ZDc2OGRkNiwgMHhlZjQzNGRiMCwgIDB4YWFjYzU0NGQsICAweDk2ZTRkZjA0LAorICAgIDB4ZDE5ZWUzYjUsIDB4NmE0YzFiODgsICAweDJjYzFiODFmLCAgMHg2NTQ2N2Y1MSwKKyAgICAweDVlOWQwNGVhLCAweDhjMDE1ZDM1LCAgMHg4N2ZhNzM3NCwgIDB4YmZiMmU0MSwKKyAgICAweDY3YjM1YTFkLCAweGRiOTI1MmQyLCAgMHgxMGU5MzM1NiwgIDB4ZDY2ZDEzNDcsCisgICAgMHhkNzlhOGM2MSwgMHhhMTM3N2EwYywgIDB4Zjg1OThlMTQsICAweDEzZWI4OTNjLAorICAgIDB4YTljZWVlMjcsIDB4NjFiNzM1YzksICAweDFjZTFlZGU1LCAgMHg0NzdhM2NiMSwKKyAgICAweGQyOWM1OWRmLCAweGYyNTUzZjczLCAgMHgxNDE4NzljZSwgIDB4Yzc3M2JmMzcsCisgICAgMHhmNzUzZWFjZCwgMHhmZDVmNWJhYSwgIDB4M2RkZjE0NmYsICAweDQ0Nzg4NmRiLAorICAgIDB4YWZjYTgxZjMsIDB4NjhiOTNlYzQsICAweDI0MzgyYzM0LCAgMHhhM2MyNWY0MCwKKyAgICAweDFkMTY3MmMzLCAweGUyYmMwYzI1LCAgMHgzYzI4OGI0OSwgIDB4ZGZmNDE5NSwKKyAgICAweGE4Mzk3MTAxLCAweGMwOGRlYjMsICAgMHhiNGQ4OWNlNCwgIDB4NTY2NDkwYzEsCisgICAgMHhjYjdiNjE4NCwgMHgzMmQ1NzBiNiwgIDB4NmM0ODc0NWMsICAweGI4ZDA0MjU3LAogfTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLwogCi11aW50MzJfdCBVM1syNTZdID0gewotICAweDUxNTBhN2Y0LCAweDdlNTM2NTQxLCAweDFhYzNhNDE3LCAweDNhOTY1ZTI3LCAKLSAgMHgzYmNiNmJhYiwgMHgxZmYxNDU5ZCwgMHhhY2FiNThmYSwgMHg0YjkzMDNlMywgCi0gIDB4MjA1NWZhMzAsIDB4YWRmNjZkNzYsIDB4ODg5MTc2Y2MsIDB4ZjUyNTRjMDIsIAotICAweDRmZmNkN2U1LCAweGM1ZDdjYjJhLCAweDI2ODA0NDM1LCAweGI1OGZhMzYyLCAKLSAgMHhkZTQ5NWFiMSwgMHgyNTY3MWJiYSwgMHg0NTk4MGVlYSwgMHg1ZGUxYzBmZSwgCi0gIDB4YzMwMjc1MmYsIDB4ODExMmYwNGMsIDB4OGRhMzk3NDYsIDB4NmJjNmY5ZDMsIAotICAweDNlNzVmOGYsIDB4MTU5NTljOTIsIDB4YmZlYjdhNmQsIDB4OTVkYTU5NTIsIAotICAweGQ0MmQ4M2JlLCAweDU4ZDMyMTc0LCAweDQ5Mjk2OWUwLCAweDhlNDRjOGM5LCAKLSAgMHg3NTZhODljMiwgMHhmNDc4Nzk4ZSwgMHg5OTZiM2U1OCwgMHgyN2RkNzFiOSwgCi0gIDB4YmViNjRmZTEsIDB4ZjAxN2FkODgsIDB4Yzk2NmFjMjAsIDB4N2RiNDNhY2UsIAotICAweDYzMTg0YWRmLCAweGU1ODIzMTFhLCAweDk3NjAzMzUxLCAweDYyNDU3ZjUzLCAKLSAgMHhiMWUwNzc2NCwgMHhiYjg0YWU2YiwgMHhmZTFjYTA4MSwgMHhmOTk0MmIwOCwgCi0gIDB4NzA1ODY4NDgsIDB4OGYxOWZkNDUsIDB4OTQ4NzZjZGUsIDB4NTJiN2Y4N2IsIAotICAweGFiMjNkMzczLCAweDcyZTIwMjRiLCAweGUzNTc4ZjFmLCAweDY2MmFhYjU1LCAKLSAgMHhiMjA3MjhlYiwgMHgyZjAzYzJiNSwgMHg4NjlhN2JjNSwgMHhkM2E1MDgzNywgCi0gIDB4MzBmMjg3MjgsIDB4MjNiMmE1YmYsIDB4MmJhNmEwMywgMHhlZDVjODIxNiwgCi0gIDB4OGEyYjFjY2YsIDB4YTc5MmI0NzksIDB4ZjNmMGYyMDcsIDB4NGVhMWUyNjksIAotICAweDY1Y2RmNGRhLCAweDZkNWJlMDUsIDB4ZDExZjYyMzQsIDB4YzQ4YWZlYTYsIAotICAweDM0OWQ1MzJlLCAweGEyYTA1NWYzLCAweDUzMmUxOGEsIDB4YTQ3NWViZjYsIAotICAweGIzOWVjODMsIDB4NDBhYWVmNjAsIDB4NWUwNjlmNzEsIDB4YmQ1MTEwNmUsIAotICAweDNlZjk4YTIxLCAweDk2M2QwNmRkLCAweGRkYWUwNTNlLCAweDRkNDZiZGU2LCAKLSAgMHg5MWI1OGQ1NCwgMHg3MTA1NWRjNCwgMHg0NmZkNDA2LCAweDYwZmYxNTUwLCAKLSAgMHgxOTI0ZmI5OCwgMHhkNjk3ZTliZCwgMHg4OWNjNDM0MCwgMHg2Nzc3OWVkOSwgCi0gIDB4YjBiZDQyZTgsIDB4Nzg4OGI4OSwgMHhlNzM4NWIxOSwgMHg3OWRiZWVjOCwgCi0gIDB4YTE0NzBhN2MsIDB4N2NlOTBmNDIsIDB4ZjhjOTFlODQsIDB4MCwgCi0gIDB4OTgzODY4MCwgMHgzMjQ4ZWQyYiwgMHgxZWFjNzAxMSwgMHg2YzRlNzI1YSwgCi0gIDB4ZmRmYmZmMGUsIDB4ZjU2Mzg4NSwgMHgzZDFlZDVhZSwgMHgzNjI3MzkyZCwgCi0gIDB4YTY0ZDkwZiwgMHg2ODIxYTY1YywgMHg5YmQxNTQ1YiwgMHgyNDNhMmUzNiwgCi0gIDB4Y2IxNjcwYSwgMHg5MzBmZTc1NywgMHhiNGQyOTZlZSwgMHgxYjllOTE5YiwgCi0gIDB4ODA0ZmM1YzAsIDB4NjFhMjIwZGMsIDB4NWE2OTRiNzcsIDB4MWMxNjFhMTIsIAotICAweGUyMGFiYTkzLCAweGMwZTUyYWEwLCAweDNjNDNlMDIyLCAweDEyMWQxNzFiLCAKLSAgMHhlMGIwZDA5LCAweGYyYWRjNzhiLCAweDJkYjlhOGI2LCAweDE0YzhhOTFlLCAKLSAgMHg1Nzg1MTlmMSwgMHhhZjRjMDc3NSwgMHhlZWJiZGQ5OSwgMHhhM2ZkNjA3ZiwgCi0gIDB4Zjc5ZjI2MDEsIDB4NWNiY2Y1NzIsIDB4NDRjNTNiNjYsIDB4NWIzNDdlZmIsIAotICAweDhiNzYyOTQzLCAweGNiZGNjNjIzLCAweGI2NjhmY2VkLCAweGI4NjNmMWU0LCAKLSAgMHhkN2NhZGMzMSwgMHg0MjEwODU2MywgMHgxMzQwMjI5NywgMHg4NDIwMTFjNiwgCi0gIDB4ODU3ZDI0NGEsIDB4ZDJmODNkYmIsIDB4YWUxMTMyZjksIDB4Yzc2ZGExMjksIAotICAweDFkNGIyZjllLCAweGRjZjMzMGIyLCAweGRlYzUyODYsIDB4NzdkMGUzYzEsIAotICAweDJiNmMxNmIzLCAweGE5OTliOTcwLCAweDExZmE0ODk0LCAweDQ3MjI2NGU5LCAKLSAgMHhhOGM0OGNmYywgMHhhMDFhM2ZmMCwgMHg1NmQ4MmM3ZCwgMHgyMmVmOTAzMywgCi0gIDB4ODdjNzRlNDksIDB4ZDljMWQxMzgsIDB4OGNmZWEyY2EsIDB4OTgzNjBiZDQsIAotICAweGE2Y2Y4MWY1LCAweGE1MjhkZTdhLCAweGRhMjY4ZWI3LCAweDNmYTRiZmFkLCAKLSAgMHgyY2U0OWQzYSwgMHg1MDBkOTI3OCwgMHg2YTliY2M1ZiwgMHg1NDYyNDY3ZSwgCi0gIDB4ZjZjMjEzOGQsIDB4OTBlOGI4ZDgsIDB4MmU1ZWY3MzksIDB4ODJmNWFmYzMsIAotICAweDlmYmU4MDVkLCAweDY5N2M5M2QwLCAweDZmYTkyZGQ1LCAweGNmYjMxMjI1LCAKLSAgMHhjODNiOTlhYywgMHgxMGE3N2QxOCwgMHhlODZlNjM5YywgMHhkYjdiYmIzYiwgCi0gIDB4Y2QwOTc4MjYsIDB4NmVmNDE4NTksIDB4ZWMwMWI3OWEsIDB4ODNhODlhNGYsIAotICAweGU2NjU2ZTk1LCAweGFhN2VlNmZmLCAweDIxMDhjZmJjLCAweGVmZTZlODE1LCAKLSAgMHhiYWQ5OWJlNywgMHg0YWNlMzY2ZiwgMHhlYWQ0MDk5ZiwgMHgyOWQ2N2NiMCwgCi0gIDB4MzFhZmIyYTQsIDB4MmEzMTIzM2YsIDB4YzYzMDk0YTUsIDB4MzVjMDY2YTIsIAotICAweDc0MzdiYzRlLCAweGZjYTZjYTgyLCAweGUwYjBkMDkwLCAweDMzMTVkOGE3LCAKLSAgMHhmMTRhOTgwNCwgMHg0MWY3ZGFlYywgMHg3ZjBlNTBjZCwgMHgxNzJmZjY5MSwgCi0gIDB4NzY4ZGQ2NGQsIDB4NDM0ZGIwZWYsIDB4Y2M1NDRkYWEsIDB4ZTRkZjA0OTYsIAotICAweDllZTNiNWQxLCAweDRjMWI4ODZhLCAweGMxYjgxZjJjLCAweDQ2N2Y1MTY1LCAKLSAgMHg5ZDA0ZWE1ZSwgMHgxNWQzNThjLCAweGZhNzM3NDg3LCAweGZiMmU0MTBiLCAKLSAgMHhiMzVhMWQ2NywgMHg5MjUyZDJkYiwgMHhlOTMzNTYxMCwgMHg2ZDEzNDdkNiwgCi0gIDB4OWE4YzYxZDcsIDB4Mzc3YTBjYTEsIDB4NTk4ZTE0ZjgsIDB4ZWI4OTNjMTMsIAotICAweGNlZWUyN2E5LCAweGI3MzVjOTYxLCAweGUxZWRlNTFjLCAweDdhM2NiMTQ3LCAKLSAgMHg5YzU5ZGZkMiwgMHg1NTNmNzNmMiwgMHgxODc5Y2UxNCwgMHg3M2JmMzdjNywgCi0gIDB4NTNlYWNkZjcsIDB4NWY1YmFhZmQsIDB4ZGYxNDZmM2QsIDB4Nzg4NmRiNDQsIAotICAweGNhODFmM2FmLCAweGI5M2VjNDY4LCAweDM4MmMzNDI0LCAweGMyNWY0MGEzLCAKLSAgMHgxNjcyYzMxZCwgMHhiYzBjMjVlMiwgMHgyODhiNDkzYywgMHhmZjQxOTUwZCwgCi0gIDB4Mzk3MTAxYTgsIDB4OGRlYjMwYywgMHhkODljZTRiNCwgMHg2NDkwYzE1NiwgCi0gIDB4N2I2MTg0Y2IsIDB4ZDU3MGI2MzIsIDB4NDg3NDVjNmMsIDB4ZDA0MjU3YjgsIAorLyogY2xhbmctZm9ybWF0IG9mZiAqLworc3RhdGljIGNvbnN0IHVpbnQzMl90IFUzWzI1Nl0gPSB7CisgICAgMHg1MTUwYTdmNCwgMHg3ZTUzNjU0MSwgIDB4MWFjM2E0MTcsICAweDNhOTY1ZTI3LAorICAgIDB4M2JjYjZiYWIsIDB4MWZmMTQ1OWQsICAweGFjYWI1OGZhLCAgMHg0YjkzMDNlMywKKyAgICAweDIwNTVmYTMwLCAweGFkZjY2ZDc2LCAgMHg4ODkxNzZjYywgIDB4ZjUyNTRjMDIsCisgICAgMHg0ZmZjZDdlNSwgMHhjNWQ3Y2IyYSwgIDB4MjY4MDQ0MzUsICAweGI1OGZhMzYyLAorICAgIDB4ZGU0OTVhYjEsIDB4MjU2NzFiYmEsICAweDQ1OTgwZWVhLCAgMHg1ZGUxYzBmZSwKKyAgICAweGMzMDI3NTJmLCAweDgxMTJmMDRjLCAgMHg4ZGEzOTc0NiwgIDB4NmJjNmY5ZDMsCisgICAgMHgzZTc1ZjhmLCAgMHgxNTk1OWM5MiwgIDB4YmZlYjdhNmQsICAweDk1ZGE1OTUyLAorICAgIDB4ZDQyZDgzYmUsIDB4NThkMzIxNzQsICAweDQ5Mjk2OWUwLCAgMHg4ZTQ0YzhjOSwKKyAgICAweDc1NmE4OWMyLCAweGY0Nzg3OThlLCAgMHg5OTZiM2U1OCwgIDB4MjdkZDcxYjksCisgICAgMHhiZWI2NGZlMSwgMHhmMDE3YWQ4OCwgIDB4Yzk2NmFjMjAsICAweDdkYjQzYWNlLAorICAgIDB4NjMxODRhZGYsIDB4ZTU4MjMxMWEsICAweDk3NjAzMzUxLCAgMHg2MjQ1N2Y1MywKKyAgICAweGIxZTA3NzY0LCAweGJiODRhZTZiLCAgMHhmZTFjYTA4MSwgIDB4Zjk5NDJiMDgsCisgICAgMHg3MDU4Njg0OCwgMHg4ZjE5ZmQ0NSwgIDB4OTQ4NzZjZGUsICAweDUyYjdmODdiLAorICAgIDB4YWIyM2QzNzMsIDB4NzJlMjAyNGIsICAweGUzNTc4ZjFmLCAgMHg2NjJhYWI1NSwKKyAgICAweGIyMDcyOGViLCAweDJmMDNjMmI1LCAgMHg4NjlhN2JjNSwgIDB4ZDNhNTA4MzcsCisgICAgMHgzMGYyODcyOCwgMHgyM2IyYTViZiwgIDB4MmJhNmEwMywgICAweGVkNWM4MjE2LAorICAgIDB4OGEyYjFjY2YsIDB4YTc5MmI0NzksICAweGYzZjBmMjA3LCAgMHg0ZWExZTI2OSwKKyAgICAweDY1Y2RmNGRhLCAweDZkNWJlMDUsICAgMHhkMTFmNjIzNCwgIDB4YzQ4YWZlYTYsCisgICAgMHgzNDlkNTMyZSwgMHhhMmEwNTVmMywgIDB4NTMyZTE4YSwgICAweGE0NzVlYmY2LAorICAgIDB4YjM5ZWM4MywgIDB4NDBhYWVmNjAsICAweDVlMDY5ZjcxLCAgMHhiZDUxMTA2ZSwKKyAgICAweDNlZjk4YTIxLCAweDk2M2QwNmRkLCAgMHhkZGFlMDUzZSwgIDB4NGQ0NmJkZTYsCisgICAgMHg5MWI1OGQ1NCwgMHg3MTA1NWRjNCwgIDB4NDZmZDQwNiwgICAweDYwZmYxNTUwLAorICAgIDB4MTkyNGZiOTgsIDB4ZDY5N2U5YmQsICAweDg5Y2M0MzQwLCAgMHg2Nzc3OWVkOSwKKyAgICAweGIwYmQ0MmU4LCAweDc4ODhiODksICAgMHhlNzM4NWIxOSwgIDB4NzlkYmVlYzgsCisgICAgMHhhMTQ3MGE3YywgMHg3Y2U5MGY0MiwgIDB4ZjhjOTFlODQsICAweDAsCisgICAgMHg5ODM4NjgwLCAgMHgzMjQ4ZWQyYiwgIDB4MWVhYzcwMTEsICAweDZjNGU3MjVhLAorICAgIDB4ZmRmYmZmMGUsIDB4ZjU2Mzg4NSwgICAweDNkMWVkNWFlLCAgMHgzNjI3MzkyZCwKKyAgICAweGE2NGQ5MGYsICAweDY4MjFhNjVjLCAgMHg5YmQxNTQ1YiwgIDB4MjQzYTJlMzYsCisgICAgMHhjYjE2NzBhLCAgMHg5MzBmZTc1NywgIDB4YjRkMjk2ZWUsICAweDFiOWU5MTliLAorICAgIDB4ODA0ZmM1YzAsIDB4NjFhMjIwZGMsICAweDVhNjk0Yjc3LCAgMHgxYzE2MWExMiwKKyAgICAweGUyMGFiYTkzLCAweGMwZTUyYWEwLCAgMHgzYzQzZTAyMiwgIDB4MTIxZDE3MWIsCisgICAgMHhlMGIwZDA5LCAgMHhmMmFkYzc4YiwgIDB4MmRiOWE4YjYsICAweDE0YzhhOTFlLAorICAgIDB4NTc4NTE5ZjEsIDB4YWY0YzA3NzUsICAweGVlYmJkZDk5LCAgMHhhM2ZkNjA3ZiwKKyAgICAweGY3OWYyNjAxLCAweDVjYmNmNTcyLCAgMHg0NGM1M2I2NiwgIDB4NWIzNDdlZmIsCisgICAgMHg4Yjc2Mjk0MywgMHhjYmRjYzYyMywgIDB4YjY2OGZjZWQsICAweGI4NjNmMWU0LAorICAgIDB4ZDdjYWRjMzEsIDB4NDIxMDg1NjMsICAweDEzNDAyMjk3LCAgMHg4NDIwMTFjNiwKKyAgICAweDg1N2QyNDRhLCAweGQyZjgzZGJiLCAgMHhhZTExMzJmOSwgIDB4Yzc2ZGExMjksCisgICAgMHgxZDRiMmY5ZSwgMHhkY2YzMzBiMiwgIDB4ZGVjNTI4NiwgICAweDc3ZDBlM2MxLAorICAgIDB4MmI2YzE2YjMsIDB4YTk5OWI5NzAsICAweDExZmE0ODk0LCAgMHg0NzIyNjRlOSwKKyAgICAweGE4YzQ4Y2ZjLCAweGEwMWEzZmYwLCAgMHg1NmQ4MmM3ZCwgIDB4MjJlZjkwMzMsCisgICAgMHg4N2M3NGU0OSwgMHhkOWMxZDEzOCwgIDB4OGNmZWEyY2EsICAweDk4MzYwYmQ0LAorICAgIDB4YTZjZjgxZjUsIDB4YTUyOGRlN2EsICAweGRhMjY4ZWI3LCAgMHgzZmE0YmZhZCwKKyAgICAweDJjZTQ5ZDNhLCAweDUwMGQ5Mjc4LCAgMHg2YTliY2M1ZiwgIDB4NTQ2MjQ2N2UsCisgICAgMHhmNmMyMTM4ZCwgMHg5MGU4YjhkOCwgIDB4MmU1ZWY3MzksICAweDgyZjVhZmMzLAorICAgIDB4OWZiZTgwNWQsIDB4Njk3YzkzZDAsICAweDZmYTkyZGQ1LCAgMHhjZmIzMTIyNSwKKyAgICAweGM4M2I5OWFjLCAweDEwYTc3ZDE4LCAgMHhlODZlNjM5YywgIDB4ZGI3YmJiM2IsCisgICAgMHhjZDA5NzgyNiwgMHg2ZWY0MTg1OSwgIDB4ZWMwMWI3OWEsICAweDgzYTg5YTRmLAorICAgIDB4ZTY2NTZlOTUsIDB4YWE3ZWU2ZmYsICAweDIxMDhjZmJjLCAgMHhlZmU2ZTgxNSwKKyAgICAweGJhZDk5YmU3LCAweDRhY2UzNjZmLCAgMHhlYWQ0MDk5ZiwgIDB4MjlkNjdjYjAsCisgICAgMHgzMWFmYjJhNCwgMHgyYTMxMjMzZiwgIDB4YzYzMDk0YTUsICAweDM1YzA2NmEyLAorICAgIDB4NzQzN2JjNGUsIDB4ZmNhNmNhODIsICAweGUwYjBkMDkwLCAgMHgzMzE1ZDhhNywKKyAgICAweGYxNGE5ODA0LCAweDQxZjdkYWVjLCAgMHg3ZjBlNTBjZCwgIDB4MTcyZmY2OTEsCisgICAgMHg3NjhkZDY0ZCwgMHg0MzRkYjBlZiwgIDB4Y2M1NDRkYWEsICAweGU0ZGYwNDk2LAorICAgIDB4OWVlM2I1ZDEsIDB4NGMxYjg4NmEsICAweGMxYjgxZjJjLCAgMHg0NjdmNTE2NSwKKyAgICAweDlkMDRlYTVlLCAweDE1ZDM1OGMsICAgMHhmYTczNzQ4NywgIDB4ZmIyZTQxMGIsCisgICAgMHhiMzVhMWQ2NywgMHg5MjUyZDJkYiwgIDB4ZTkzMzU2MTAsICAweDZkMTM0N2Q2LAorICAgIDB4OWE4YzYxZDcsIDB4Mzc3YTBjYTEsICAweDU5OGUxNGY4LCAgMHhlYjg5M2MxMywKKyAgICAweGNlZWUyN2E5LCAweGI3MzVjOTYxLCAgMHhlMWVkZTUxYywgIDB4N2EzY2IxNDcsCisgICAgMHg5YzU5ZGZkMiwgMHg1NTNmNzNmMiwgIDB4MTg3OWNlMTQsICAweDczYmYzN2M3LAorICAgIDB4NTNlYWNkZjcsIDB4NWY1YmFhZmQsICAweGRmMTQ2ZjNkLCAgMHg3ODg2ZGI0NCwKKyAgICAweGNhODFmM2FmLCAweGI5M2VjNDY4LCAgMHgzODJjMzQyNCwgIDB4YzI1ZjQwYTMsCisgICAgMHgxNjcyYzMxZCwgMHhiYzBjMjVlMiwgIDB4Mjg4YjQ5M2MsICAweGZmNDE5NTBkLAorICAgIDB4Mzk3MTAxYTgsIDB4OGRlYjMwYywgICAweGQ4OWNlNGI0LCAgMHg2NDkwYzE1NiwKKyAgICAweDdiNjE4NGNiLCAweGQ1NzBiNjMyLCAgMHg0ODc0NWM2YywgIDB4ZDA0MjU3YjgsCiB9OworLyogY2xhbmctZm9ybWF0IG9uICovCiAKICNlbHNlIC8qIGFzc3VtZSBiaWcgZW5kaWFuICovCi0KLXVpbnQzMl90IFQwWzI1Nl0gPSB7Ci0gIDB4YzY2MzYzYTUsIDB4Zjg3YzdjODQsIDB4ZWU3Nzc3OTksIDB4ZjY3YjdiOGQsIAotICAweGZmZjJmMjBkLCAweGQ2NmI2YmJkLCAweGRlNmY2ZmIxLCAweDkxYzVjNTU0LCAKLSAgMHg2MDMwMzA1MCwgMHgyMDEwMTAzLCAweGNlNjc2N2E5LCAweDU2MmIyYjdkLCAKLSAgMHhlN2ZlZmUxOSwgMHhiNWQ3ZDc2MiwgMHg0ZGFiYWJlNiwgMHhlYzc2NzY5YSwgCi0gIDB4OGZjYWNhNDUsIDB4MWY4MjgyOWQsIDB4ODljOWM5NDAsIDB4ZmE3ZDdkODcsIAotICAweGVmZmFmYTE1LCAweGIyNTk1OWViLCAweDhlNDc0N2M5LCAweGZiZjBmMDBiLCAKLSAgMHg0MWFkYWRlYywgMHhiM2Q0ZDQ2NywgMHg1ZmEyYTJmZCwgMHg0NWFmYWZlYSwgCi0gIDB4MjM5YzljYmYsIDB4NTNhNGE0ZjcsIDB4ZTQ3MjcyOTYsIDB4OWJjMGMwNWIsIAotICAweDc1YjdiN2MyLCAweGUxZmRmZDFjLCAweDNkOTM5M2FlLCAweDRjMjYyNjZhLCAKLSAgMHg2YzM2MzY1YSwgMHg3ZTNmM2Y0MSwgMHhmNWY3ZjcwMiwgMHg4M2NjY2M0ZiwgCi0gIDB4NjgzNDM0NWMsIDB4NTFhNWE1ZjQsIDB4ZDFlNWU1MzQsIDB4ZjlmMWYxMDgsIAotICAweGUyNzE3MTkzLCAweGFiZDhkODczLCAweDYyMzEzMTUzLCAweDJhMTUxNTNmLCAKLSAgMHg4MDQwNDBjLCAweDk1YzdjNzUyLCAweDQ2MjMyMzY1LCAweDlkYzNjMzVlLCAKLSAgMHgzMDE4MTgyOCwgMHgzNzk2OTZhMSwgMHhhMDUwNTBmLCAweDJmOWE5YWI1LCAKLSAgMHhlMDcwNzA5LCAweDI0MTIxMjM2LCAweDFiODA4MDliLCAweGRmZTJlMjNkLCAKLSAgMHhjZGViZWIyNiwgMHg0ZTI3Mjc2OSwgMHg3ZmIyYjJjZCwgMHhlYTc1NzU5ZiwgCi0gIDB4MTIwOTA5MWIsIDB4MWQ4MzgzOWUsIDB4NTgyYzJjNzQsIDB4MzQxYTFhMmUsIAotICAweDM2MWIxYjJkLCAweGRjNmU2ZWIyLCAweGI0NWE1YWVlLCAweDViYTBhMGZiLCAKLSAgMHhhNDUyNTJmNiwgMHg3NjNiM2I0ZCwgMHhiN2Q2ZDY2MSwgMHg3ZGIzYjNjZSwgCi0gIDB4NTIyOTI5N2IsIDB4ZGRlM2UzM2UsIDB4NWUyZjJmNzEsIDB4MTM4NDg0OTcsIAotICAweGE2NTM1M2Y1LCAweGI5ZDFkMTY4LCAweDAsIDB4YzFlZGVkMmMsIAotICAweDQwMjAyMDYwLCAweGUzZmNmYzFmLCAweDc5YjFiMWM4LCAweGI2NWI1YmVkLCAKLSAgMHhkNDZhNmFiZSwgMHg4ZGNiY2I0NiwgMHg2N2JlYmVkOSwgMHg3MjM5Mzk0YiwgCi0gIDB4OTQ0YTRhZGUsIDB4OTg0YzRjZDQsIDB4YjA1ODU4ZTgsIDB4ODVjZmNmNGEsIAotICAweGJiZDBkMDZiLCAweGM1ZWZlZjJhLCAweDRmYWFhYWU1LCAweGVkZmJmYjE2LCAKLSAgMHg4NjQzNDNjNSwgMHg5YTRkNGRkNywgMHg2NjMzMzM1NSwgMHgxMTg1ODU5NCwgCi0gIDB4OGE0NTQ1Y2YsIDB4ZTlmOWY5MTAsIDB4NDAyMDIwNiwgMHhmZTdmN2Y4MSwgCi0gIDB4YTA1MDUwZjAsIDB4NzgzYzNjNDQsIDB4MjU5ZjlmYmEsIDB4NGJhOGE4ZTMsIAotICAweGEyNTE1MWYzLCAweDVkYTNhM2ZlLCAweDgwNDA0MGMwLCAweDU4ZjhmOGEsIAotICAweDNmOTI5MmFkLCAweDIxOWQ5ZGJjLCAweDcwMzgzODQ4LCAweGYxZjVmNTA0LCAKLSAgMHg2M2JjYmNkZiwgMHg3N2I2YjZjMSwgMHhhZmRhZGE3NSwgMHg0MjIxMjE2MywgCi0gIDB4MjAxMDEwMzAsIDB4ZTVmZmZmMWEsIDB4ZmRmM2YzMGUsIDB4YmZkMmQyNmQsIAotICAweDgxY2RjZDRjLCAweDE4MGMwYzE0LCAweDI2MTMxMzM1LCAweGMzZWNlYzJmLCAKLSAgMHhiZTVmNWZlMSwgMHgzNTk3OTdhMiwgMHg4ODQ0NDRjYywgMHgyZTE3MTczOSwgCi0gIDB4OTNjNGM0NTcsIDB4NTVhN2E3ZjIsIDB4ZmM3ZTdlODIsIDB4N2EzZDNkNDcsIAotICAweGM4NjQ2NGFjLCAweGJhNWQ1ZGU3LCAweDMyMTkxOTJiLCAweGU2NzM3Mzk1LCAKLSAgMHhjMDYwNjBhMCwgMHgxOTgxODE5OCwgMHg5ZTRmNGZkMSwgMHhhM2RjZGM3ZiwgCi0gIDB4NDQyMjIyNjYsIDB4NTQyYTJhN2UsIDB4M2I5MDkwYWIsIDB4Yjg4ODg4MywgCi0gIDB4OGM0NjQ2Y2EsIDB4YzdlZWVlMjksIDB4NmJiOGI4ZDMsIDB4MjgxNDE0M2MsIAotICAweGE3ZGVkZTc5LCAweGJjNWU1ZWUyLCAweDE2MGIwYjFkLCAweGFkZGJkYjc2LCAKLSAgMHhkYmUwZTAzYiwgMHg2NDMyMzI1NiwgMHg3NDNhM2E0ZSwgMHgxNDBhMGExZSwgCi0gIDB4OTI0OTQ5ZGIsIDB4YzA2MDYwYSwgMHg0ODI0MjQ2YywgMHhiODVjNWNlNCwgCi0gIDB4OWZjMmMyNWQsIDB4YmRkM2QzNmUsIDB4NDNhY2FjZWYsIDB4YzQ2MjYyYTYsIAotICAweDM5OTE5MWE4LCAweDMxOTU5NWE0LCAweGQzZTRlNDM3LCAweGYyNzk3OThiLCAKLSAgMHhkNWU3ZTczMiwgMHg4YmM4Yzg0MywgMHg2ZTM3Mzc1OSwgMHhkYTZkNmRiNywgCi0gIDB4MThkOGQ4YywgMHhiMWQ1ZDU2NCwgMHg5YzRlNGVkMiwgMHg0OWE5YTllMCwgCi0gIDB4ZDg2YzZjYjQsIDB4YWM1NjU2ZmEsIDB4ZjNmNGY0MDcsIDB4Y2ZlYWVhMjUsIAotICAweGNhNjU2NWFmLCAweGY0N2E3YThlLCAweDQ3YWVhZWU5LCAweDEwMDgwODE4LCAKLSAgMHg2ZmJhYmFkNSwgMHhmMDc4Nzg4OCwgMHg0YTI1MjU2ZiwgMHg1YzJlMmU3MiwgCi0gIDB4MzgxYzFjMjQsIDB4NTdhNmE2ZjEsIDB4NzNiNGI0YzcsIDB4OTdjNmM2NTEsIAotICAweGNiZThlODIzLCAweGExZGRkZDdjLCAweGU4NzQ3NDljLCAweDNlMWYxZjIxLCAKLSAgMHg5NjRiNGJkZCwgMHg2MWJkYmRkYywgMHhkOGI4Yjg2LCAweGY4YThhODUsIAotICAweGUwNzA3MDkwLCAweDdjM2UzZTQyLCAweDcxYjViNWM0LCAweGNjNjY2NmFhLCAKLSAgMHg5MDQ4NDhkOCwgMHg2MDMwMzA1LCAweGY3ZjZmNjAxLCAweDFjMGUwZTEyLCAKLSAgMHhjMjYxNjFhMywgMHg2YTM1MzU1ZiwgMHhhZTU3NTdmOSwgMHg2OWI5YjlkMCwgCi0gIDB4MTc4Njg2OTEsIDB4OTljMWMxNTgsIDB4M2ExZDFkMjcsIDB4Mjc5ZTllYjksIAotICAweGQ5ZTFlMTM4LCAweGViZjhmODEzLCAweDJiOTg5OGIzLCAweDIyMTExMTMzLCAKLSAgMHhkMjY5NjliYiwgMHhhOWQ5ZDk3MCwgMHg3OGU4ZTg5LCAweDMzOTQ5NGE3LCAKLSAgMHgyZDliOWJiNiwgMHgzYzFlMWUyMiwgMHgxNTg3ODc5MiwgMHhjOWU5ZTkyMCwgCi0gIDB4ODdjZWNlNDksIDB4YWE1NTU1ZmYsIDB4NTAyODI4NzgsIDB4YTVkZmRmN2EsIAotICAweDM4YzhjOGYsIDB4NTlhMWExZjgsIDB4OTg5ODk4MCwgMHgxYTBkMGQxNywgCi0gIDB4NjViZmJmZGEsIDB4ZDdlNmU2MzEsIDB4ODQ0MjQyYzYsIDB4ZDA2ODY4YjgsIAotICAweDgyNDE0MWMzLCAweDI5OTk5OWIwLCAweDVhMmQyZDc3LCAweDFlMGYwZjExLCAKLSAgMHg3YmIwYjBjYiwgMHhhODU0NTRmYywgMHg2ZGJiYmJkNiwgMHgyYzE2MTYzYSwgCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgY29uc3QgdWludDMyX3QgVDBbMjU2XSA9IHsKKyAgICAweGM2NjM2M2E1LCAweGY4N2M3Yzg0LCAgMHhlZTc3Nzc5OSwgIDB4ZjY3YjdiOGQsCisgICAgMHhmZmYyZjIwZCwgMHhkNjZiNmJiZCwgIDB4ZGU2ZjZmYjEsICAweDkxYzVjNTU0LAorICAgIDB4NjAzMDMwNTAsIDB4MjAxMDEwMywgICAweGNlNjc2N2E5LCAgMHg1NjJiMmI3ZCwKKyAgICAweGU3ZmVmZTE5LCAweGI1ZDdkNzYyLCAgMHg0ZGFiYWJlNiwgIDB4ZWM3Njc2OWEsCisgICAgMHg4ZmNhY2E0NSwgMHgxZjgyODI5ZCwgIDB4ODljOWM5NDAsICAweGZhN2Q3ZDg3LAorICAgIDB4ZWZmYWZhMTUsIDB4YjI1OTU5ZWIsICAweDhlNDc0N2M5LCAgMHhmYmYwZjAwYiwKKyAgICAweDQxYWRhZGVjLCAweGIzZDRkNDY3LCAgMHg1ZmEyYTJmZCwgIDB4NDVhZmFmZWEsCisgICAgMHgyMzljOWNiZiwgMHg1M2E0YTRmNywgIDB4ZTQ3MjcyOTYsICAweDliYzBjMDViLAorICAgIDB4NzViN2I3YzIsIDB4ZTFmZGZkMWMsICAweDNkOTM5M2FlLCAgMHg0YzI2MjY2YSwKKyAgICAweDZjMzYzNjVhLCAweDdlM2YzZjQxLCAgMHhmNWY3ZjcwMiwgIDB4ODNjY2NjNGYsCisgICAgMHg2ODM0MzQ1YywgMHg1MWE1YTVmNCwgIDB4ZDFlNWU1MzQsICAweGY5ZjFmMTA4LAorICAgIDB4ZTI3MTcxOTMsIDB4YWJkOGQ4NzMsICAweDYyMzEzMTUzLCAgMHgyYTE1MTUzZiwKKyAgICAweDgwNDA0MGMsICAweDk1YzdjNzUyLCAgMHg0NjIzMjM2NSwgIDB4OWRjM2MzNWUsCisgICAgMHgzMDE4MTgyOCwgMHgzNzk2OTZhMSwgIDB4YTA1MDUwZiwgICAweDJmOWE5YWI1LAorICAgIDB4ZTA3MDcwOSwgIDB4MjQxMjEyMzYsICAweDFiODA4MDliLCAgMHhkZmUyZTIzZCwKKyAgICAweGNkZWJlYjI2LCAweDRlMjcyNzY5LCAgMHg3ZmIyYjJjZCwgIDB4ZWE3NTc1OWYsCisgICAgMHgxMjA5MDkxYiwgMHgxZDgzODM5ZSwgIDB4NTgyYzJjNzQsICAweDM0MWExYTJlLAorICAgIDB4MzYxYjFiMmQsIDB4ZGM2ZTZlYjIsICAweGI0NWE1YWVlLCAgMHg1YmEwYTBmYiwKKyAgICAweGE0NTI1MmY2LCAweDc2M2IzYjRkLCAgMHhiN2Q2ZDY2MSwgIDB4N2RiM2IzY2UsCisgICAgMHg1MjI5Mjk3YiwgMHhkZGUzZTMzZSwgIDB4NWUyZjJmNzEsICAweDEzODQ4NDk3LAorICAgIDB4YTY1MzUzZjUsIDB4YjlkMWQxNjgsICAweDAsICAgICAgICAgMHhjMWVkZWQyYywKKyAgICAweDQwMjAyMDYwLCAweGUzZmNmYzFmLCAgMHg3OWIxYjFjOCwgIDB4YjY1YjViZWQsCisgICAgMHhkNDZhNmFiZSwgMHg4ZGNiY2I0NiwgIDB4NjdiZWJlZDksICAweDcyMzkzOTRiLAorICAgIDB4OTQ0YTRhZGUsIDB4OTg0YzRjZDQsICAweGIwNTg1OGU4LCAgMHg4NWNmY2Y0YSwKKyAgICAweGJiZDBkMDZiLCAweGM1ZWZlZjJhLCAgMHg0ZmFhYWFlNSwgIDB4ZWRmYmZiMTYsCisgICAgMHg4NjQzNDNjNSwgMHg5YTRkNGRkNywgIDB4NjYzMzMzNTUsICAweDExODU4NTk0LAorICAgIDB4OGE0NTQ1Y2YsIDB4ZTlmOWY5MTAsICAweDQwMjAyMDYsICAgMHhmZTdmN2Y4MSwKKyAgICAweGEwNTA1MGYwLCAweDc4M2MzYzQ0LCAgMHgyNTlmOWZiYSwgIDB4NGJhOGE4ZTMsCisgICAgMHhhMjUxNTFmMywgMHg1ZGEzYTNmZSwgIDB4ODA0MDQwYzAsICAweDU4ZjhmOGEsCisgICAgMHgzZjkyOTJhZCwgMHgyMTlkOWRiYywgIDB4NzAzODM4NDgsICAweGYxZjVmNTA0LAorICAgIDB4NjNiY2JjZGYsIDB4NzdiNmI2YzEsICAweGFmZGFkYTc1LCAgMHg0MjIxMjE2MywKKyAgICAweDIwMTAxMDMwLCAweGU1ZmZmZjFhLCAgMHhmZGYzZjMwZSwgIDB4YmZkMmQyNmQsCisgICAgMHg4MWNkY2Q0YywgMHgxODBjMGMxNCwgIDB4MjYxMzEzMzUsICAweGMzZWNlYzJmLAorICAgIDB4YmU1ZjVmZTEsIDB4MzU5Nzk3YTIsICAweDg4NDQ0NGNjLCAgMHgyZTE3MTczOSwKKyAgICAweDkzYzRjNDU3LCAweDU1YTdhN2YyLCAgMHhmYzdlN2U4MiwgIDB4N2EzZDNkNDcsCisgICAgMHhjODY0NjRhYywgMHhiYTVkNWRlNywgIDB4MzIxOTE5MmIsICAweGU2NzM3Mzk1LAorICAgIDB4YzA2MDYwYTAsIDB4MTk4MTgxOTgsICAweDllNGY0ZmQxLCAgMHhhM2RjZGM3ZiwKKyAgICAweDQ0MjIyMjY2LCAweDU0MmEyYTdlLCAgMHgzYjkwOTBhYiwgIDB4Yjg4ODg4MywKKyAgICAweDhjNDY0NmNhLCAweGM3ZWVlZTI5LCAgMHg2YmI4YjhkMywgIDB4MjgxNDE0M2MsCisgICAgMHhhN2RlZGU3OSwgMHhiYzVlNWVlMiwgIDB4MTYwYjBiMWQsICAweGFkZGJkYjc2LAorICAgIDB4ZGJlMGUwM2IsIDB4NjQzMjMyNTYsICAweDc0M2EzYTRlLCAgMHgxNDBhMGExZSwKKyAgICAweDkyNDk0OWRiLCAweGMwNjA2MGEsICAgMHg0ODI0MjQ2YywgIDB4Yjg1YzVjZTQsCisgICAgMHg5ZmMyYzI1ZCwgMHhiZGQzZDM2ZSwgIDB4NDNhY2FjZWYsICAweGM0NjI2MmE2LAorICAgIDB4Mzk5MTkxYTgsIDB4MzE5NTk1YTQsICAweGQzZTRlNDM3LCAgMHhmMjc5Nzk4YiwKKyAgICAweGQ1ZTdlNzMyLCAweDhiYzhjODQzLCAgMHg2ZTM3Mzc1OSwgIDB4ZGE2ZDZkYjcsCisgICAgMHgxOGQ4ZDhjLCAgMHhiMWQ1ZDU2NCwgIDB4OWM0ZTRlZDIsICAweDQ5YTlhOWUwLAorICAgIDB4ZDg2YzZjYjQsIDB4YWM1NjU2ZmEsICAweGYzZjRmNDA3LCAgMHhjZmVhZWEyNSwKKyAgICAweGNhNjU2NWFmLCAweGY0N2E3YThlLCAgMHg0N2FlYWVlOSwgIDB4MTAwODA4MTgsCisgICAgMHg2ZmJhYmFkNSwgMHhmMDc4Nzg4OCwgIDB4NGEyNTI1NmYsICAweDVjMmUyZTcyLAorICAgIDB4MzgxYzFjMjQsIDB4NTdhNmE2ZjEsICAweDczYjRiNGM3LCAgMHg5N2M2YzY1MSwKKyAgICAweGNiZThlODIzLCAweGExZGRkZDdjLCAgMHhlODc0NzQ5YywgIDB4M2UxZjFmMjEsCisgICAgMHg5NjRiNGJkZCwgMHg2MWJkYmRkYywgIDB4ZDhiOGI4NiwgICAweGY4YThhODUsCisgICAgMHhlMDcwNzA5MCwgMHg3YzNlM2U0MiwgIDB4NzFiNWI1YzQsICAweGNjNjY2NmFhLAorICAgIDB4OTA0ODQ4ZDgsIDB4NjAzMDMwNSwgICAweGY3ZjZmNjAxLCAgMHgxYzBlMGUxMiwKKyAgICAweGMyNjE2MWEzLCAweDZhMzUzNTVmLCAgMHhhZTU3NTdmOSwgIDB4NjliOWI5ZDAsCisgICAgMHgxNzg2ODY5MSwgMHg5OWMxYzE1OCwgIDB4M2ExZDFkMjcsICAweDI3OWU5ZWI5LAorICAgIDB4ZDllMWUxMzgsIDB4ZWJmOGY4MTMsICAweDJiOTg5OGIzLCAgMHgyMjExMTEzMywKKyAgICAweGQyNjk2OWJiLCAweGE5ZDlkOTcwLCAgMHg3OGU4ZTg5LCAgIDB4MzM5NDk0YTcsCisgICAgMHgyZDliOWJiNiwgMHgzYzFlMWUyMiwgIDB4MTU4Nzg3OTIsICAweGM5ZTllOTIwLAorICAgIDB4ODdjZWNlNDksIDB4YWE1NTU1ZmYsICAweDUwMjgyODc4LCAgMHhhNWRmZGY3YSwKKyAgICAweDM4YzhjOGYsICAweDU5YTFhMWY4LCAgMHg5ODk4OTgwLCAgIDB4MWEwZDBkMTcsCisgICAgMHg2NWJmYmZkYSwgMHhkN2U2ZTYzMSwgIDB4ODQ0MjQyYzYsICAweGQwNjg2OGI4LAorICAgIDB4ODI0MTQxYzMsIDB4Mjk5OTk5YjAsICAweDVhMmQyZDc3LCAgMHgxZTBmMGYxMSwKKyAgICAweDdiYjBiMGNiLCAweGE4NTQ1NGZjLCAgMHg2ZGJiYmJkNiwgIDB4MmMxNjE2M2EsCiB9OworLyogY2xhbmctZm9ybWF0IG9uICovCiAKLXVpbnQzMl90IFQxWzI1Nl0gPSB7Ci0gIDB4YTVjNjYzNjMsIDB4ODRmODdjN2MsIDB4OTllZTc3NzcsIDB4OGRmNjdiN2IsIAotICAweGRmZmYyZjIsIDB4YmRkNjZiNmIsIDB4YjFkZTZmNmYsIDB4NTQ5MWM1YzUsIAotICAweDUwNjAzMDMwLCAweDMwMjAxMDEsIDB4YTljZTY3NjcsIDB4N2Q1NjJiMmIsIAotICAweDE5ZTdmZWZlLCAweDYyYjVkN2Q3LCAweGU2NGRhYmFiLCAweDlhZWM3Njc2LCAKLSAgMHg0NThmY2FjYSwgMHg5ZDFmODI4MiwgMHg0MDg5YzljOSwgMHg4N2ZhN2Q3ZCwgCi0gIDB4MTVlZmZhZmEsIDB4ZWJiMjU5NTksIDB4Yzk4ZTQ3NDcsIDB4YmZiZjBmMCwgCi0gIDB4ZWM0MWFkYWQsIDB4NjdiM2Q0ZDQsIDB4ZmQ1ZmEyYTIsIDB4ZWE0NWFmYWYsIAotICAweGJmMjM5YzljLCAweGY3NTNhNGE0LCAweDk2ZTQ3MjcyLCAweDViOWJjMGMwLCAKLSAgMHhjMjc1YjdiNywgMHgxY2UxZmRmZCwgMHhhZTNkOTM5MywgMHg2YTRjMjYyNiwgCi0gIDB4NWE2YzM2MzYsIDB4NDE3ZTNmM2YsIDB4MmY1ZjdmNywgMHg0ZjgzY2NjYywgCi0gIDB4NWM2ODM0MzQsIDB4ZjQ1MWE1YTUsIDB4MzRkMWU1ZTUsIDB4OGY5ZjFmMSwgCi0gIDB4OTNlMjcxNzEsIDB4NzNhYmQ4ZDgsIDB4NTM2MjMxMzEsIDB4M2YyYTE1MTUsIAotICAweGMwODA0MDQsIDB4NTI5NWM3YzcsIDB4NjU0NjIzMjMsIDB4NWU5ZGMzYzMsIAotICAweDI4MzAxODE4LCAweGExMzc5Njk2LCAweGYwYTA1MDUsIDB4YjUyZjlhOWEsIAotICAweDkwZTA3MDcsIDB4MzYyNDEyMTIsIDB4OWIxYjgwODAsIDB4M2RkZmUyZTIsIAotICAweDI2Y2RlYmViLCAweDY5NGUyNzI3LCAweGNkN2ZiMmIyLCAweDlmZWE3NTc1LCAKLSAgMHgxYjEyMDkwOSwgMHg5ZTFkODM4MywgMHg3NDU4MmMyYywgMHgyZTM0MWExYSwgCi0gIDB4MmQzNjFiMWIsIDB4YjJkYzZlNmUsIDB4ZWViNDVhNWEsIDB4ZmI1YmEwYTAsIAotICAweGY2YTQ1MjUyLCAweDRkNzYzYjNiLCAweDYxYjdkNmQ2LCAweGNlN2RiM2IzLCAKLSAgMHg3YjUyMjkyOSwgMHgzZWRkZTNlMywgMHg3MTVlMmYyZiwgMHg5NzEzODQ4NCwgCi0gIDB4ZjVhNjUzNTMsIDB4NjhiOWQxZDEsIDB4MCwgMHgyY2MxZWRlZCwgCi0gIDB4NjA0MDIwMjAsIDB4MWZlM2ZjZmMsIDB4Yzg3OWIxYjEsIDB4ZWRiNjViNWIsIAotICAweGJlZDQ2YTZhLCAweDQ2OGRjYmNiLCAweGQ5NjdiZWJlLCAweDRiNzIzOTM5LCAKLSAgMHhkZTk0NGE0YSwgMHhkNDk4NGM0YywgMHhlOGIwNTg1OCwgMHg0YTg1Y2ZjZiwgCi0gIDB4NmJiYmQwZDAsIDB4MmFjNWVmZWYsIDB4ZTU0ZmFhYWEsIDB4MTZlZGZiZmIsIAotICAweGM1ODY0MzQzLCAweGQ3OWE0ZDRkLCAweDU1NjYzMzMzLCAweDk0MTE4NTg1LCAKLSAgMHhjZjhhNDU0NSwgMHgxMGU5ZjlmOSwgMHg2MDQwMjAyLCAweDgxZmU3ZjdmLCAKLSAgMHhmMGEwNTA1MCwgMHg0NDc4M2MzYywgMHhiYTI1OWY5ZiwgMHhlMzRiYThhOCwgCi0gIDB4ZjNhMjUxNTEsIDB4ZmU1ZGEzYTMsIDB4YzA4MDQwNDAsIDB4OGEwNThmOGYsIAotICAweGFkM2Y5MjkyLCAweGJjMjE5ZDlkLCAweDQ4NzAzODM4LCAweDRmMWY1ZjUsIAotICAweGRmNjNiY2JjLCAweGMxNzdiNmI2LCAweDc1YWZkYWRhLCAweDYzNDIyMTIxLCAKLSAgMHgzMDIwMTAxMCwgMHgxYWU1ZmZmZiwgMHhlZmRmM2YzLCAweDZkYmZkMmQyLCAKLSAgMHg0YzgxY2RjZCwgMHgxNDE4MGMwYywgMHgzNTI2MTMxMywgMHgyZmMzZWNlYywgCi0gIDB4ZTFiZTVmNWYsIDB4YTIzNTk3OTcsIDB4Y2M4ODQ0NDQsIDB4MzkyZTE3MTcsIAotICAweDU3OTNjNGM0LCAweGYyNTVhN2E3LCAweDgyZmM3ZTdlLCAweDQ3N2EzZDNkLCAKLSAgMHhhY2M4NjQ2NCwgMHhlN2JhNWQ1ZCwgMHgyYjMyMTkxOSwgMHg5NWU2NzM3MywgCi0gIDB4YTBjMDYwNjAsIDB4OTgxOTgxODEsIDB4ZDE5ZTRmNGYsIDB4N2ZhM2RjZGMsIAotICAweDY2NDQyMjIyLCAweDdlNTQyYTJhLCAweGFiM2I5MDkwLCAweDgzMGI4ODg4LCAKLSAgMHhjYThjNDY0NiwgMHgyOWM3ZWVlZSwgMHhkMzZiYjhiOCwgMHgzYzI4MTQxNCwgCi0gIDB4NzlhN2RlZGUsIDB4ZTJiYzVlNWUsIDB4MWQxNjBiMGIsIDB4NzZhZGRiZGIsIAotICAweDNiZGJlMGUwLCAweDU2NjQzMjMyLCAweDRlNzQzYTNhLCAweDFlMTQwYTBhLCAKLSAgMHhkYjkyNDk0OSwgMHhhMGMwNjA2LCAweDZjNDgyNDI0LCAweGU0Yjg1YzVjLCAKLSAgMHg1ZDlmYzJjMiwgMHg2ZWJkZDNkMywgMHhlZjQzYWNhYywgMHhhNmM0NjI2MiwgCi0gIDB4YTgzOTkxOTEsIDB4YTQzMTk1OTUsIDB4MzdkM2U0ZTQsIDB4OGJmMjc5NzksIAotICAweDMyZDVlN2U3LCAweDQzOGJjOGM4LCAweDU5NmUzNzM3LCAweGI3ZGE2ZDZkLCAKLSAgMHg4YzAxOGQ4ZCwgMHg2NGIxZDVkNSwgMHhkMjljNGU0ZSwgMHhlMDQ5YTlhOSwgCi0gIDB4YjRkODZjNmMsIDB4ZmFhYzU2NTYsIDB4N2YzZjRmNCwgMHgyNWNmZWFlYSwgCi0gIDB4YWZjYTY1NjUsIDB4OGVmNDdhN2EsIDB4ZTk0N2FlYWUsIDB4MTgxMDA4MDgsIAotICAweGQ1NmZiYWJhLCAweDg4ZjA3ODc4LCAweDZmNGEyNTI1LCAweDcyNWMyZTJlLCAKLSAgMHgyNDM4MWMxYywgMHhmMTU3YTZhNiwgMHhjNzczYjRiNCwgMHg1MTk3YzZjNiwgCi0gIDB4MjNjYmU4ZTgsIDB4N2NhMWRkZGQsIDB4OWNlODc0NzQsIDB4MjEzZTFmMWYsIAotICAweGRkOTY0YjRiLCAweGRjNjFiZGJkLCAweDg2MGQ4YjhiLCAweDg1MGY4YThhLCAKLSAgMHg5MGUwNzA3MCwgMHg0MjdjM2UzZSwgMHhjNDcxYjViNSwgMHhhYWNjNjY2NiwgCi0gIDB4ZDg5MDQ4NDgsIDB4NTA2MDMwMywgMHgxZjdmNmY2LCAweDEyMWMwZTBlLCAKLSAgMHhhM2MyNjE2MSwgMHg1ZjZhMzUzNSwgMHhmOWFlNTc1NywgMHhkMDY5YjliOSwgCi0gIDB4OTExNzg2ODYsIDB4NTg5OWMxYzEsIDB4MjczYTFkMWQsIDB4YjkyNzllOWUsIAotICAweDM4ZDllMWUxLCAweDEzZWJmOGY4LCAweGIzMmI5ODk4LCAweDMzMjIxMTExLCAKLSAgMHhiYmQyNjk2OSwgMHg3MGE5ZDlkOSwgMHg4OTA3OGU4ZSwgMHhhNzMzOTQ5NCwgCi0gIDB4YjYyZDliOWIsIDB4MjIzYzFlMWUsIDB4OTIxNTg3ODcsIDB4MjBjOWU5ZTksIAotICAweDQ5ODdjZWNlLCAweGZmYWE1NTU1LCAweDc4NTAyODI4LCAweDdhYTVkZmRmLCAKLSAgMHg4ZjAzOGM4YywgMHhmODU5YTFhMSwgMHg4MDA5ODk4OSwgMHgxNzFhMGQwZCwgCi0gIDB4ZGE2NWJmYmYsIDB4MzFkN2U2ZTYsIDB4YzY4NDQyNDIsIDB4YjhkMDY4NjgsIAotICAweGMzODI0MTQxLCAweGIwMjk5OTk5LCAweDc3NWEyZDJkLCAweDExMWUwZjBmLCAKLSAgMHhjYjdiYjBiMCwgMHhmY2E4NTQ1NCwgMHhkNjZkYmJiYiwgMHgzYTJjMTYxNiwgCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgY29uc3QgdWludDMyX3QgVDFbMjU2XSA9IHsKKyAgICAweGE1YzY2MzYzLCAweDg0Zjg3YzdjLCAgMHg5OWVlNzc3NywgIDB4OGRmNjdiN2IsCisgICAgMHhkZmZmMmYyLCAgMHhiZGQ2NmI2YiwgIDB4YjFkZTZmNmYsICAweDU0OTFjNWM1LAorICAgIDB4NTA2MDMwMzAsIDB4MzAyMDEwMSwgICAweGE5Y2U2NzY3LCAgMHg3ZDU2MmIyYiwKKyAgICAweDE5ZTdmZWZlLCAweDYyYjVkN2Q3LCAgMHhlNjRkYWJhYiwgIDB4OWFlYzc2NzYsCisgICAgMHg0NThmY2FjYSwgMHg5ZDFmODI4MiwgIDB4NDA4OWM5YzksICAweDg3ZmE3ZDdkLAorICAgIDB4MTVlZmZhZmEsIDB4ZWJiMjU5NTksICAweGM5OGU0NzQ3LCAgMHhiZmJmMGYwLAorICAgIDB4ZWM0MWFkYWQsIDB4NjdiM2Q0ZDQsICAweGZkNWZhMmEyLCAgMHhlYTQ1YWZhZiwKKyAgICAweGJmMjM5YzljLCAweGY3NTNhNGE0LCAgMHg5NmU0NzI3MiwgIDB4NWI5YmMwYzAsCisgICAgMHhjMjc1YjdiNywgMHgxY2UxZmRmZCwgIDB4YWUzZDkzOTMsICAweDZhNGMyNjI2LAorICAgIDB4NWE2YzM2MzYsIDB4NDE3ZTNmM2YsICAweDJmNWY3ZjcsICAgMHg0ZjgzY2NjYywKKyAgICAweDVjNjgzNDM0LCAweGY0NTFhNWE1LCAgMHgzNGQxZTVlNSwgIDB4OGY5ZjFmMSwKKyAgICAweDkzZTI3MTcxLCAweDczYWJkOGQ4LCAgMHg1MzYyMzEzMSwgIDB4M2YyYTE1MTUsCisgICAgMHhjMDgwNDA0LCAgMHg1Mjk1YzdjNywgIDB4NjU0NjIzMjMsICAweDVlOWRjM2MzLAorICAgIDB4MjgzMDE4MTgsIDB4YTEzNzk2OTYsICAweGYwYTA1MDUsICAgMHhiNTJmOWE5YSwKKyAgICAweDkwZTA3MDcsICAweDM2MjQxMjEyLCAgMHg5YjFiODA4MCwgIDB4M2RkZmUyZTIsCisgICAgMHgyNmNkZWJlYiwgMHg2OTRlMjcyNywgIDB4Y2Q3ZmIyYjIsICAweDlmZWE3NTc1LAorICAgIDB4MWIxMjA5MDksIDB4OWUxZDgzODMsICAweDc0NTgyYzJjLCAgMHgyZTM0MWExYSwKKyAgICAweDJkMzYxYjFiLCAweGIyZGM2ZTZlLCAgMHhlZWI0NWE1YSwgIDB4ZmI1YmEwYTAsCisgICAgMHhmNmE0NTI1MiwgMHg0ZDc2M2IzYiwgIDB4NjFiN2Q2ZDYsICAweGNlN2RiM2IzLAorICAgIDB4N2I1MjI5MjksIDB4M2VkZGUzZTMsICAweDcxNWUyZjJmLCAgMHg5NzEzODQ4NCwKKyAgICAweGY1YTY1MzUzLCAweDY4YjlkMWQxLCAgMHgwLCAgICAgICAgIDB4MmNjMWVkZWQsCisgICAgMHg2MDQwMjAyMCwgMHgxZmUzZmNmYywgIDB4Yzg3OWIxYjEsICAweGVkYjY1YjViLAorICAgIDB4YmVkNDZhNmEsIDB4NDY4ZGNiY2IsICAweGQ5NjdiZWJlLCAgMHg0YjcyMzkzOSwKKyAgICAweGRlOTQ0YTRhLCAweGQ0OTg0YzRjLCAgMHhlOGIwNTg1OCwgIDB4NGE4NWNmY2YsCisgICAgMHg2YmJiZDBkMCwgMHgyYWM1ZWZlZiwgIDB4ZTU0ZmFhYWEsICAweDE2ZWRmYmZiLAorICAgIDB4YzU4NjQzNDMsIDB4ZDc5YTRkNGQsICAweDU1NjYzMzMzLCAgMHg5NDExODU4NSwKKyAgICAweGNmOGE0NTQ1LCAweDEwZTlmOWY5LCAgMHg2MDQwMjAyLCAgIDB4ODFmZTdmN2YsCisgICAgMHhmMGEwNTA1MCwgMHg0NDc4M2MzYywgIDB4YmEyNTlmOWYsICAweGUzNGJhOGE4LAorICAgIDB4ZjNhMjUxNTEsIDB4ZmU1ZGEzYTMsICAweGMwODA0MDQwLCAgMHg4YTA1OGY4ZiwKKyAgICAweGFkM2Y5MjkyLCAweGJjMjE5ZDlkLCAgMHg0ODcwMzgzOCwgIDB4NGYxZjVmNSwKKyAgICAweGRmNjNiY2JjLCAweGMxNzdiNmI2LCAgMHg3NWFmZGFkYSwgIDB4NjM0MjIxMjEsCisgICAgMHgzMDIwMTAxMCwgMHgxYWU1ZmZmZiwgIDB4ZWZkZjNmMywgICAweDZkYmZkMmQyLAorICAgIDB4NGM4MWNkY2QsIDB4MTQxODBjMGMsICAweDM1MjYxMzEzLCAgMHgyZmMzZWNlYywKKyAgICAweGUxYmU1ZjVmLCAweGEyMzU5Nzk3LCAgMHhjYzg4NDQ0NCwgIDB4MzkyZTE3MTcsCisgICAgMHg1NzkzYzRjNCwgMHhmMjU1YTdhNywgIDB4ODJmYzdlN2UsICAweDQ3N2EzZDNkLAorICAgIDB4YWNjODY0NjQsIDB4ZTdiYTVkNWQsICAweDJiMzIxOTE5LCAgMHg5NWU2NzM3MywKKyAgICAweGEwYzA2MDYwLCAweDk4MTk4MTgxLCAgMHhkMTllNGY0ZiwgIDB4N2ZhM2RjZGMsCisgICAgMHg2NjQ0MjIyMiwgMHg3ZTU0MmEyYSwgIDB4YWIzYjkwOTAsICAweDgzMGI4ODg4LAorICAgIDB4Y2E4YzQ2NDYsIDB4MjljN2VlZWUsICAweGQzNmJiOGI4LCAgMHgzYzI4MTQxNCwKKyAgICAweDc5YTdkZWRlLCAweGUyYmM1ZTVlLCAgMHgxZDE2MGIwYiwgIDB4NzZhZGRiZGIsCisgICAgMHgzYmRiZTBlMCwgMHg1NjY0MzIzMiwgIDB4NGU3NDNhM2EsICAweDFlMTQwYTBhLAorICAgIDB4ZGI5MjQ5NDksIDB4YTBjMDYwNiwgICAweDZjNDgyNDI0LCAgMHhlNGI4NWM1YywKKyAgICAweDVkOWZjMmMyLCAweDZlYmRkM2QzLCAgMHhlZjQzYWNhYywgIDB4YTZjNDYyNjIsCisgICAgMHhhODM5OTE5MSwgMHhhNDMxOTU5NSwgIDB4MzdkM2U0ZTQsICAweDhiZjI3OTc5LAorICAgIDB4MzJkNWU3ZTcsIDB4NDM4YmM4YzgsICAweDU5NmUzNzM3LCAgMHhiN2RhNmQ2ZCwKKyAgICAweDhjMDE4ZDhkLCAweDY0YjFkNWQ1LCAgMHhkMjljNGU0ZSwgIDB4ZTA0OWE5YTksCisgICAgMHhiNGQ4NmM2YywgMHhmYWFjNTY1NiwgIDB4N2YzZjRmNCwgICAweDI1Y2ZlYWVhLAorICAgIDB4YWZjYTY1NjUsIDB4OGVmNDdhN2EsICAweGU5NDdhZWFlLCAgMHgxODEwMDgwOCwKKyAgICAweGQ1NmZiYWJhLCAweDg4ZjA3ODc4LCAgMHg2ZjRhMjUyNSwgIDB4NzI1YzJlMmUsCisgICAgMHgyNDM4MWMxYywgMHhmMTU3YTZhNiwgIDB4Yzc3M2I0YjQsICAweDUxOTdjNmM2LAorICAgIDB4MjNjYmU4ZTgsIDB4N2NhMWRkZGQsICAweDljZTg3NDc0LCAgMHgyMTNlMWYxZiwKKyAgICAweGRkOTY0YjRiLCAweGRjNjFiZGJkLCAgMHg4NjBkOGI4YiwgIDB4ODUwZjhhOGEsCisgICAgMHg5MGUwNzA3MCwgMHg0MjdjM2UzZSwgIDB4YzQ3MWI1YjUsICAweGFhY2M2NjY2LAorICAgIDB4ZDg5MDQ4NDgsIDB4NTA2MDMwMywgICAweDFmN2Y2ZjYsICAgMHgxMjFjMGUwZSwKKyAgICAweGEzYzI2MTYxLCAweDVmNmEzNTM1LCAgMHhmOWFlNTc1NywgIDB4ZDA2OWI5YjksCisgICAgMHg5MTE3ODY4NiwgMHg1ODk5YzFjMSwgIDB4MjczYTFkMWQsICAweGI5Mjc5ZTllLAorICAgIDB4MzhkOWUxZTEsIDB4MTNlYmY4ZjgsICAweGIzMmI5ODk4LCAgMHgzMzIyMTExMSwKKyAgICAweGJiZDI2OTY5LCAweDcwYTlkOWQ5LCAgMHg4OTA3OGU4ZSwgIDB4YTczMzk0OTQsCisgICAgMHhiNjJkOWI5YiwgMHgyMjNjMWUxZSwgIDB4OTIxNTg3ODcsICAweDIwYzllOWU5LAorICAgIDB4NDk4N2NlY2UsIDB4ZmZhYTU1NTUsICAweDc4NTAyODI4LCAgMHg3YWE1ZGZkZiwKKyAgICAweDhmMDM4YzhjLCAweGY4NTlhMWExLCAgMHg4MDA5ODk4OSwgIDB4MTcxYTBkMGQsCisgICAgMHhkYTY1YmZiZiwgMHgzMWQ3ZTZlNiwgIDB4YzY4NDQyNDIsICAweGI4ZDA2ODY4LAorICAgIDB4YzM4MjQxNDEsIDB4YjAyOTk5OTksICAweDc3NWEyZDJkLCAgMHgxMTFlMGYwZiwKKyAgICAweGNiN2JiMGIwLCAweGZjYTg1NDU0LCAgMHhkNjZkYmJiYiwgIDB4M2EyYzE2MTYsCiB9OworLyogY2xhbmctZm9ybWF0IG9uICovCiAKLXVpbnQzMl90IFQyWzI1Nl0gPSB7Ci0gIDB4NjNhNWM2NjMsIDB4N2M4NGY4N2MsIDB4Nzc5OWVlNzcsIDB4N2I4ZGY2N2IsIAotICAweGYyMGRmZmYyLCAweDZiYmRkNjZiLCAweDZmYjFkZTZmLCAweGM1NTQ5MWM1LCAKLSAgMHgzMDUwNjAzMCwgMHgxMDMwMjAxLCAweDY3YTljZTY3LCAweDJiN2Q1NjJiLCAKLSAgMHhmZTE5ZTdmZSwgMHhkNzYyYjVkNywgMHhhYmU2NGRhYiwgMHg3NjlhZWM3NiwgCi0gIDB4Y2E0NThmY2EsIDB4ODI5ZDFmODIsIDB4Yzk0MDg5YzksIDB4N2Q4N2ZhN2QsIAotICAweGZhMTVlZmZhLCAweDU5ZWJiMjU5LCAweDQ3Yzk4ZTQ3LCAweGYwMGJmYmYwLCAKLSAgMHhhZGVjNDFhZCwgMHhkNDY3YjNkNCwgMHhhMmZkNWZhMiwgMHhhZmVhNDVhZiwgCi0gIDB4OWNiZjIzOWMsIDB4YTRmNzUzYTQsIDB4NzI5NmU0NzIsIDB4YzA1YjliYzAsIAotICAweGI3YzI3NWI3LCAweGZkMWNlMWZkLCAweDkzYWUzZDkzLCAweDI2NmE0YzI2LCAKLSAgMHgzNjVhNmMzNiwgMHgzZjQxN2UzZiwgMHhmNzAyZjVmNywgMHhjYzRmODNjYywgCi0gIDB4MzQ1YzY4MzQsIDB4YTVmNDUxYTUsIDB4ZTUzNGQxZTUsIDB4ZjEwOGY5ZjEsIAotICAweDcxOTNlMjcxLCAweGQ4NzNhYmQ4LCAweDMxNTM2MjMxLCAweDE1M2YyYTE1LCAKLSAgMHg0MGMwODA0LCAweGM3NTI5NWM3LCAweDIzNjU0NjIzLCAweGMzNWU5ZGMzLCAKLSAgMHgxODI4MzAxOCwgMHg5NmExMzc5NiwgMHg1MGYwYTA1LCAweDlhYjUyZjlhLCAKLSAgMHg3MDkwZTA3LCAweDEyMzYyNDEyLCAweDgwOWIxYjgwLCAweGUyM2RkZmUyLCAKLSAgMHhlYjI2Y2RlYiwgMHgyNzY5NGUyNywgMHhiMmNkN2ZiMiwgMHg3NTlmZWE3NSwgCi0gIDB4OTFiMTIwOSwgMHg4MzllMWQ4MywgMHgyYzc0NTgyYywgMHgxYTJlMzQxYSwgCi0gIDB4MWIyZDM2MWIsIDB4NmViMmRjNmUsIDB4NWFlZWI0NWEsIDB4YTBmYjViYTAsIAotICAweDUyZjZhNDUyLCAweDNiNGQ3NjNiLCAweGQ2NjFiN2Q2LCAweGIzY2U3ZGIzLCAKLSAgMHgyOTdiNTIyOSwgMHhlMzNlZGRlMywgMHgyZjcxNWUyZiwgMHg4NDk3MTM4NCwgCi0gIDB4NTNmNWE2NTMsIDB4ZDE2OGI5ZDEsIDB4MCwgMHhlZDJjYzFlZCwgCi0gIDB4MjA2MDQwMjAsIDB4ZmMxZmUzZmMsIDB4YjFjODc5YjEsIDB4NWJlZGI2NWIsIAotICAweDZhYmVkNDZhLCAweGNiNDY4ZGNiLCAweGJlZDk2N2JlLCAweDM5NGI3MjM5LCAKLSAgMHg0YWRlOTQ0YSwgMHg0Y2Q0OTg0YywgMHg1OGU4YjA1OCwgMHhjZjRhODVjZiwgCi0gIDB4ZDA2YmJiZDAsIDB4ZWYyYWM1ZWYsIDB4YWFlNTRmYWEsIDB4ZmIxNmVkZmIsIAotICAweDQzYzU4NjQzLCAweDRkZDc5YTRkLCAweDMzNTU2NjMzLCAweDg1OTQxMTg1LCAKLSAgMHg0NWNmOGE0NSwgMHhmOTEwZTlmOSwgMHgyMDYwNDAyLCAweDdmODFmZTdmLCAKLSAgMHg1MGYwYTA1MCwgMHgzYzQ0NzgzYywgMHg5ZmJhMjU5ZiwgMHhhOGUzNGJhOCwgCi0gIDB4NTFmM2EyNTEsIDB4YTNmZTVkYTMsIDB4NDBjMDgwNDAsIDB4OGY4YTA1OGYsIAotICAweDkyYWQzZjkyLCAweDlkYmMyMTlkLCAweDM4NDg3MDM4LCAweGY1MDRmMWY1LCAKLSAgMHhiY2RmNjNiYywgMHhiNmMxNzdiNiwgMHhkYTc1YWZkYSwgMHgyMTYzNDIyMSwgCi0gIDB4MTAzMDIwMTAsIDB4ZmYxYWU1ZmYsIDB4ZjMwZWZkZjMsIDB4ZDI2ZGJmZDIsIAotICAweGNkNGM4MWNkLCAweGMxNDE4MGMsIDB4MTMzNTI2MTMsIDB4ZWMyZmMzZWMsIAotICAweDVmZTFiZTVmLCAweDk3YTIzNTk3LCAweDQ0Y2M4ODQ0LCAweDE3MzkyZTE3LCAKLSAgMHhjNDU3OTNjNCwgMHhhN2YyNTVhNywgMHg3ZTgyZmM3ZSwgMHgzZDQ3N2EzZCwgCi0gIDB4NjRhY2M4NjQsIDB4NWRlN2JhNWQsIDB4MTkyYjMyMTksIDB4NzM5NWU2NzMsIAotICAweDYwYTBjMDYwLCAweDgxOTgxOTgxLCAweDRmZDE5ZTRmLCAweGRjN2ZhM2RjLCAKLSAgMHgyMjY2NDQyMiwgMHgyYTdlNTQyYSwgMHg5MGFiM2I5MCwgMHg4ODgzMGI4OCwgCi0gIDB4NDZjYThjNDYsIDB4ZWUyOWM3ZWUsIDB4YjhkMzZiYjgsIDB4MTQzYzI4MTQsIAotICAweGRlNzlhN2RlLCAweDVlZTJiYzVlLCAweGIxZDE2MGIsIDB4ZGI3NmFkZGIsIAotICAweGUwM2JkYmUwLCAweDMyNTY2NDMyLCAweDNhNGU3NDNhLCAweGExZTE0MGEsIAotICAweDQ5ZGI5MjQ5LCAweDYwYTBjMDYsIDB4MjQ2YzQ4MjQsIDB4NWNlNGI4NWMsIAotICAweGMyNWQ5ZmMyLCAweGQzNmViZGQzLCAweGFjZWY0M2FjLCAweDYyYTZjNDYyLCAKLSAgMHg5MWE4Mzk5MSwgMHg5NWE0MzE5NSwgMHhlNDM3ZDNlNCwgMHg3OThiZjI3OSwgCi0gIDB4ZTczMmQ1ZTcsIDB4Yzg0MzhiYzgsIDB4Mzc1OTZlMzcsIDB4NmRiN2RhNmQsIAotICAweDhkOGMwMThkLCAweGQ1NjRiMWQ1LCAweDRlZDI5YzRlLCAweGE5ZTA0OWE5LCAKLSAgMHg2Y2I0ZDg2YywgMHg1NmZhYWM1NiwgMHhmNDA3ZjNmNCwgMHhlYTI1Y2ZlYSwgCi0gIDB4NjVhZmNhNjUsIDB4N2E4ZWY0N2EsIDB4YWVlOTQ3YWUsIDB4ODE4MTAwOCwgCi0gIDB4YmFkNTZmYmEsIDB4Nzg4OGYwNzgsIDB4MjU2ZjRhMjUsIDB4MmU3MjVjMmUsIAotICAweDFjMjQzODFjLCAweGE2ZjE1N2E2LCAweGI0Yzc3M2I0LCAweGM2NTE5N2M2LCAKLSAgMHhlODIzY2JlOCwgMHhkZDdjYTFkZCwgMHg3NDljZTg3NCwgMHgxZjIxM2UxZiwgCi0gIDB4NGJkZDk2NGIsIDB4YmRkYzYxYmQsIDB4OGI4NjBkOGIsIDB4OGE4NTBmOGEsIAotICAweDcwOTBlMDcwLCAweDNlNDI3YzNlLCAweGI1YzQ3MWI1LCAweDY2YWFjYzY2LCAKLSAgMHg0OGQ4OTA0OCwgMHgzMDUwNjAzLCAweGY2MDFmN2Y2LCAweGUxMjFjMGUsIAotICAweDYxYTNjMjYxLCAweDM1NWY2YTM1LCAweDU3ZjlhZTU3LCAweGI5ZDA2OWI5LCAKLSAgMHg4NjkxMTc4NiwgMHhjMTU4OTljMSwgMHgxZDI3M2ExZCwgMHg5ZWI5Mjc5ZSwgCi0gIDB4ZTEzOGQ5ZTEsIDB4ZjgxM2ViZjgsIDB4OThiMzJiOTgsIDB4MTEzMzIyMTEsIAotICAweDY5YmJkMjY5LCAweGQ5NzBhOWQ5LCAweDhlODkwNzhlLCAweDk0YTczMzk0LCAKLSAgMHg5YmI2MmQ5YiwgMHgxZTIyM2MxZSwgMHg4NzkyMTU4NywgMHhlOTIwYzllOSwgCi0gIDB4Y2U0OTg3Y2UsIDB4NTVmZmFhNTUsIDB4Mjg3ODUwMjgsIDB4ZGY3YWE1ZGYsIAotICAweDhjOGYwMzhjLCAweGExZjg1OWExLCAweDg5ODAwOTg5LCAweGQxNzFhMGQsIAotICAweGJmZGE2NWJmLCAweGU2MzFkN2U2LCAweDQyYzY4NDQyLCAweDY4YjhkMDY4LCAKLSAgMHg0MWMzODI0MSwgMHg5OWIwMjk5OSwgMHgyZDc3NWEyZCwgMHhmMTExZTBmLCAKLSAgMHhiMGNiN2JiMCwgMHg1NGZjYTg1NCwgMHhiYmQ2NmRiYiwgMHgxNjNhMmMxNiwgCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgY29uc3QgdWludDMyX3QgVDJbMjU2XSA9IHsKKyAgICAweDYzYTVjNjYzLCAweDdjODRmODdjLCAgMHg3Nzk5ZWU3NywgIDB4N2I4ZGY2N2IsCisgICAgMHhmMjBkZmZmMiwgMHg2YmJkZDY2YiwgIDB4NmZiMWRlNmYsICAweGM1NTQ5MWM1LAorICAgIDB4MzA1MDYwMzAsIDB4MTAzMDIwMSwgICAweDY3YTljZTY3LCAgMHgyYjdkNTYyYiwKKyAgICAweGZlMTllN2ZlLCAweGQ3NjJiNWQ3LCAgMHhhYmU2NGRhYiwgIDB4NzY5YWVjNzYsCisgICAgMHhjYTQ1OGZjYSwgMHg4MjlkMWY4MiwgIDB4Yzk0MDg5YzksICAweDdkODdmYTdkLAorICAgIDB4ZmExNWVmZmEsIDB4NTllYmIyNTksICAweDQ3Yzk4ZTQ3LCAgMHhmMDBiZmJmMCwKKyAgICAweGFkZWM0MWFkLCAweGQ0NjdiM2Q0LCAgMHhhMmZkNWZhMiwgIDB4YWZlYTQ1YWYsCisgICAgMHg5Y2JmMjM5YywgMHhhNGY3NTNhNCwgIDB4NzI5NmU0NzIsICAweGMwNWI5YmMwLAorICAgIDB4YjdjMjc1YjcsIDB4ZmQxY2UxZmQsICAweDkzYWUzZDkzLCAgMHgyNjZhNGMyNiwKKyAgICAweDM2NWE2YzM2LCAweDNmNDE3ZTNmLCAgMHhmNzAyZjVmNywgIDB4Y2M0ZjgzY2MsCisgICAgMHgzNDVjNjgzNCwgMHhhNWY0NTFhNSwgIDB4ZTUzNGQxZTUsICAweGYxMDhmOWYxLAorICAgIDB4NzE5M2UyNzEsIDB4ZDg3M2FiZDgsICAweDMxNTM2MjMxLCAgMHgxNTNmMmExNSwKKyAgICAweDQwYzA4MDQsICAweGM3NTI5NWM3LCAgMHgyMzY1NDYyMywgIDB4YzM1ZTlkYzMsCisgICAgMHgxODI4MzAxOCwgMHg5NmExMzc5NiwgIDB4NTBmMGEwNSwgICAweDlhYjUyZjlhLAorICAgIDB4NzA5MGUwNywgIDB4MTIzNjI0MTIsICAweDgwOWIxYjgwLCAgMHhlMjNkZGZlMiwKKyAgICAweGViMjZjZGViLCAweDI3Njk0ZTI3LCAgMHhiMmNkN2ZiMiwgIDB4NzU5ZmVhNzUsCisgICAgMHg5MWIxMjA5LCAgMHg4MzllMWQ4MywgIDB4MmM3NDU4MmMsICAweDFhMmUzNDFhLAorICAgIDB4MWIyZDM2MWIsIDB4NmViMmRjNmUsICAweDVhZWViNDVhLCAgMHhhMGZiNWJhMCwKKyAgICAweDUyZjZhNDUyLCAweDNiNGQ3NjNiLCAgMHhkNjYxYjdkNiwgIDB4YjNjZTdkYjMsCisgICAgMHgyOTdiNTIyOSwgMHhlMzNlZGRlMywgIDB4MmY3MTVlMmYsICAweDg0OTcxMzg0LAorICAgIDB4NTNmNWE2NTMsIDB4ZDE2OGI5ZDEsICAweDAsICAgICAgICAgMHhlZDJjYzFlZCwKKyAgICAweDIwNjA0MDIwLCAweGZjMWZlM2ZjLCAgMHhiMWM4NzliMSwgIDB4NWJlZGI2NWIsCisgICAgMHg2YWJlZDQ2YSwgMHhjYjQ2OGRjYiwgIDB4YmVkOTY3YmUsICAweDM5NGI3MjM5LAorICAgIDB4NGFkZTk0NGEsIDB4NGNkNDk4NGMsICAweDU4ZThiMDU4LCAgMHhjZjRhODVjZiwKKyAgICAweGQwNmJiYmQwLCAweGVmMmFjNWVmLCAgMHhhYWU1NGZhYSwgIDB4ZmIxNmVkZmIsCisgICAgMHg0M2M1ODY0MywgMHg0ZGQ3OWE0ZCwgIDB4MzM1NTY2MzMsICAweDg1OTQxMTg1LAorICAgIDB4NDVjZjhhNDUsIDB4ZjkxMGU5ZjksICAweDIwNjA0MDIsICAgMHg3ZjgxZmU3ZiwKKyAgICAweDUwZjBhMDUwLCAweDNjNDQ3ODNjLCAgMHg5ZmJhMjU5ZiwgIDB4YThlMzRiYTgsCisgICAgMHg1MWYzYTI1MSwgMHhhM2ZlNWRhMywgIDB4NDBjMDgwNDAsICAweDhmOGEwNThmLAorICAgIDB4OTJhZDNmOTIsIDB4OWRiYzIxOWQsICAweDM4NDg3MDM4LCAgMHhmNTA0ZjFmNSwKKyAgICAweGJjZGY2M2JjLCAweGI2YzE3N2I2LCAgMHhkYTc1YWZkYSwgIDB4MjE2MzQyMjEsCisgICAgMHgxMDMwMjAxMCwgMHhmZjFhZTVmZiwgIDB4ZjMwZWZkZjMsICAweGQyNmRiZmQyLAorICAgIDB4Y2Q0YzgxY2QsIDB4YzE0MTgwYywgICAweDEzMzUyNjEzLCAgMHhlYzJmYzNlYywKKyAgICAweDVmZTFiZTVmLCAweDk3YTIzNTk3LCAgMHg0NGNjODg0NCwgIDB4MTczOTJlMTcsCisgICAgMHhjNDU3OTNjNCwgMHhhN2YyNTVhNywgIDB4N2U4MmZjN2UsICAweDNkNDc3YTNkLAorICAgIDB4NjRhY2M4NjQsIDB4NWRlN2JhNWQsICAweDE5MmIzMjE5LCAgMHg3Mzk1ZTY3MywKKyAgICAweDYwYTBjMDYwLCAweDgxOTgxOTgxLCAgMHg0ZmQxOWU0ZiwgIDB4ZGM3ZmEzZGMsCisgICAgMHgyMjY2NDQyMiwgMHgyYTdlNTQyYSwgIDB4OTBhYjNiOTAsICAweDg4ODMwYjg4LAorICAgIDB4NDZjYThjNDYsIDB4ZWUyOWM3ZWUsICAweGI4ZDM2YmI4LCAgMHgxNDNjMjgxNCwKKyAgICAweGRlNzlhN2RlLCAweDVlZTJiYzVlLCAgMHhiMWQxNjBiLCAgIDB4ZGI3NmFkZGIsCisgICAgMHhlMDNiZGJlMCwgMHgzMjU2NjQzMiwgIDB4M2E0ZTc0M2EsICAweGExZTE0MGEsCisgICAgMHg0OWRiOTI0OSwgMHg2MGEwYzA2LCAgIDB4MjQ2YzQ4MjQsICAweDVjZTRiODVjLAorICAgIDB4YzI1ZDlmYzIsIDB4ZDM2ZWJkZDMsICAweGFjZWY0M2FjLCAgMHg2MmE2YzQ2MiwKKyAgICAweDkxYTgzOTkxLCAweDk1YTQzMTk1LCAgMHhlNDM3ZDNlNCwgIDB4Nzk4YmYyNzksCisgICAgMHhlNzMyZDVlNywgMHhjODQzOGJjOCwgIDB4Mzc1OTZlMzcsICAweDZkYjdkYTZkLAorICAgIDB4OGQ4YzAxOGQsIDB4ZDU2NGIxZDUsICAweDRlZDI5YzRlLCAgMHhhOWUwNDlhOSwKKyAgICAweDZjYjRkODZjLCAweDU2ZmFhYzU2LCAgMHhmNDA3ZjNmNCwgIDB4ZWEyNWNmZWEsCisgICAgMHg2NWFmY2E2NSwgMHg3YThlZjQ3YSwgIDB4YWVlOTQ3YWUsICAweDgxODEwMDgsCisgICAgMHhiYWQ1NmZiYSwgMHg3ODg4ZjA3OCwgIDB4MjU2ZjRhMjUsICAweDJlNzI1YzJlLAorICAgIDB4MWMyNDM4MWMsIDB4YTZmMTU3YTYsICAweGI0Yzc3M2I0LCAgMHhjNjUxOTdjNiwKKyAgICAweGU4MjNjYmU4LCAweGRkN2NhMWRkLCAgMHg3NDljZTg3NCwgIDB4MWYyMTNlMWYsCisgICAgMHg0YmRkOTY0YiwgMHhiZGRjNjFiZCwgIDB4OGI4NjBkOGIsICAweDhhODUwZjhhLAorICAgIDB4NzA5MGUwNzAsIDB4M2U0MjdjM2UsICAweGI1YzQ3MWI1LCAgMHg2NmFhY2M2NiwKKyAgICAweDQ4ZDg5MDQ4LCAweDMwNTA2MDMsICAgMHhmNjAxZjdmNiwgIDB4ZTEyMWMwZSwKKyAgICAweDYxYTNjMjYxLCAweDM1NWY2YTM1LCAgMHg1N2Y5YWU1NywgIDB4YjlkMDY5YjksCisgICAgMHg4NjkxMTc4NiwgMHhjMTU4OTljMSwgIDB4MWQyNzNhMWQsICAweDllYjkyNzllLAorICAgIDB4ZTEzOGQ5ZTEsIDB4ZjgxM2ViZjgsICAweDk4YjMyYjk4LCAgMHgxMTMzMjIxMSwKKyAgICAweDY5YmJkMjY5LCAweGQ5NzBhOWQ5LCAgMHg4ZTg5MDc4ZSwgIDB4OTRhNzMzOTQsCisgICAgMHg5YmI2MmQ5YiwgMHgxZTIyM2MxZSwgIDB4ODc5MjE1ODcsICAweGU5MjBjOWU5LAorICAgIDB4Y2U0OTg3Y2UsIDB4NTVmZmFhNTUsICAweDI4Nzg1MDI4LCAgMHhkZjdhYTVkZiwKKyAgICAweDhjOGYwMzhjLCAweGExZjg1OWExLCAgMHg4OTgwMDk4OSwgIDB4ZDE3MWEwZCwKKyAgICAweGJmZGE2NWJmLCAweGU2MzFkN2U2LCAgMHg0MmM2ODQ0MiwgIDB4NjhiOGQwNjgsCisgICAgMHg0MWMzODI0MSwgMHg5OWIwMjk5OSwgIDB4MmQ3NzVhMmQsICAweGYxMTFlMGYsCisgICAgMHhiMGNiN2JiMCwgMHg1NGZjYTg1NCwgIDB4YmJkNjZkYmIsICAweDE2M2EyYzE2LAogfTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLwogCi11aW50MzJfdCBUM1syNTZdID0gewotICAweDYzNjNhNWM2LCAweDdjN2M4NGY4LCAweDc3Nzc5OWVlLCAweDdiN2I4ZGY2LCAKLSAgMHhmMmYyMGRmZiwgMHg2YjZiYmRkNiwgMHg2ZjZmYjFkZSwgMHhjNWM1NTQ5MSwgCi0gIDB4MzAzMDUwNjAsIDB4MTAxMDMwMiwgMHg2NzY3YTljZSwgMHgyYjJiN2Q1NiwgCi0gIDB4ZmVmZTE5ZTcsIDB4ZDdkNzYyYjUsIDB4YWJhYmU2NGQsIDB4NzY3NjlhZWMsIAotICAweGNhY2E0NThmLCAweDgyODI5ZDFmLCAweGM5Yzk0MDg5LCAweDdkN2Q4N2ZhLCAKLSAgMHhmYWZhMTVlZiwgMHg1OTU5ZWJiMiwgMHg0NzQ3Yzk4ZSwgMHhmMGYwMGJmYiwgCi0gIDB4YWRhZGVjNDEsIDB4ZDRkNDY3YjMsIDB4YTJhMmZkNWYsIDB4YWZhZmVhNDUsIAotICAweDljOWNiZjIzLCAweGE0YTRmNzUzLCAweDcyNzI5NmU0LCAweGMwYzA1YjliLCAKLSAgMHhiN2I3YzI3NSwgMHhmZGZkMWNlMSwgMHg5MzkzYWUzZCwgMHgyNjI2NmE0YywgCi0gIDB4MzYzNjVhNmMsIDB4M2YzZjQxN2UsIDB4ZjdmNzAyZjUsIDB4Y2NjYzRmODMsIAotICAweDM0MzQ1YzY4LCAweGE1YTVmNDUxLCAweGU1ZTUzNGQxLCAweGYxZjEwOGY5LCAKLSAgMHg3MTcxOTNlMiwgMHhkOGQ4NzNhYiwgMHgzMTMxNTM2MiwgMHgxNTE1M2YyYSwgCi0gIDB4NDA0MGMwOCwgMHhjN2M3NTI5NSwgMHgyMzIzNjU0NiwgMHhjM2MzNWU5ZCwgCi0gIDB4MTgxODI4MzAsIDB4OTY5NmExMzcsIDB4NTA1MGYwYSwgMHg5YTlhYjUyZiwgCi0gIDB4NzA3MDkwZSwgMHgxMjEyMzYyNCwgMHg4MDgwOWIxYiwgMHhlMmUyM2RkZiwgCi0gIDB4ZWJlYjI2Y2QsIDB4MjcyNzY5NGUsIDB4YjJiMmNkN2YsIDB4NzU3NTlmZWEsIAotICAweDkwOTFiMTIsIDB4ODM4MzllMWQsIDB4MmMyYzc0NTgsIDB4MWExYTJlMzQsIAotICAweDFiMWIyZDM2LCAweDZlNmViMmRjLCAweDVhNWFlZWI0LCAweGEwYTBmYjViLCAKLSAgMHg1MjUyZjZhNCwgMHgzYjNiNGQ3NiwgMHhkNmQ2NjFiNywgMHhiM2IzY2U3ZCwgCi0gIDB4MjkyOTdiNTIsIDB4ZTNlMzNlZGQsIDB4MmYyZjcxNWUsIDB4ODQ4NDk3MTMsIAotICAweDUzNTNmNWE2LCAweGQxZDE2OGI5LCAweDAsIDB4ZWRlZDJjYzEsIAotICAweDIwMjA2MDQwLCAweGZjZmMxZmUzLCAweGIxYjFjODc5LCAweDViNWJlZGI2LCAKLSAgMHg2YTZhYmVkNCwgMHhjYmNiNDY4ZCwgMHhiZWJlZDk2NywgMHgzOTM5NGI3MiwgCi0gIDB4NGE0YWRlOTQsIDB4NGM0Y2Q0OTgsIDB4NTg1OGU4YjAsIDB4Y2ZjZjRhODUsIAotICAweGQwZDA2YmJiLCAweGVmZWYyYWM1LCAweGFhYWFlNTRmLCAweGZiZmIxNmVkLCAKLSAgMHg0MzQzYzU4NiwgMHg0ZDRkZDc5YSwgMHgzMzMzNTU2NiwgMHg4NTg1OTQxMSwgCi0gIDB4NDU0NWNmOGEsIDB4ZjlmOTEwZTksIDB4MjAyMDYwNCwgMHg3ZjdmODFmZSwgCi0gIDB4NTA1MGYwYTAsIDB4M2MzYzQ0NzgsIDB4OWY5ZmJhMjUsIDB4YThhOGUzNGIsIAotICAweDUxNTFmM2EyLCAweGEzYTNmZTVkLCAweDQwNDBjMDgwLCAweDhmOGY4YTA1LCAKLSAgMHg5MjkyYWQzZiwgMHg5ZDlkYmMyMSwgMHgzODM4NDg3MCwgMHhmNWY1MDRmMSwgCi0gIDB4YmNiY2RmNjMsIDB4YjZiNmMxNzcsIDB4ZGFkYTc1YWYsIDB4MjEyMTYzNDIsIAotICAweDEwMTAzMDIwLCAweGZmZmYxYWU1LCAweGYzZjMwZWZkLCAweGQyZDI2ZGJmLCAKLSAgMHhjZGNkNGM4MSwgMHhjMGMxNDE4LCAweDEzMTMzNTI2LCAweGVjZWMyZmMzLCAKLSAgMHg1ZjVmZTFiZSwgMHg5Nzk3YTIzNSwgMHg0NDQ0Y2M4OCwgMHgxNzE3MzkyZSwgCi0gIDB4YzRjNDU3OTMsIDB4YTdhN2YyNTUsIDB4N2U3ZTgyZmMsIDB4M2QzZDQ3N2EsIAotICAweDY0NjRhY2M4LCAweDVkNWRlN2JhLCAweDE5MTkyYjMyLCAweDczNzM5NWU2LCAKLSAgMHg2MDYwYTBjMCwgMHg4MTgxOTgxOSwgMHg0ZjRmZDE5ZSwgMHhkY2RjN2ZhMywgCi0gIDB4MjIyMjY2NDQsIDB4MmEyYTdlNTQsIDB4OTA5MGFiM2IsIDB4ODg4ODgzMGIsIAotICAweDQ2NDZjYThjLCAweGVlZWUyOWM3LCAweGI4YjhkMzZiLCAweDE0MTQzYzI4LCAKLSAgMHhkZWRlNzlhNywgMHg1ZTVlZTJiYywgMHhiMGIxZDE2LCAweGRiZGI3NmFkLCAKLSAgMHhlMGUwM2JkYiwgMHgzMjMyNTY2NCwgMHgzYTNhNGU3NCwgMHhhMGExZTE0LCAKLSAgMHg0OTQ5ZGI5MiwgMHg2MDYwYTBjLCAweDI0MjQ2YzQ4LCAweDVjNWNlNGI4LCAKLSAgMHhjMmMyNWQ5ZiwgMHhkM2QzNmViZCwgMHhhY2FjZWY0MywgMHg2MjYyYTZjNCwgCi0gIDB4OTE5MWE4MzksIDB4OTU5NWE0MzEsIDB4ZTRlNDM3ZDMsIDB4Nzk3OThiZjIsIAotICAweGU3ZTczMmQ1LCAweGM4Yzg0MzhiLCAweDM3Mzc1OTZlLCAweDZkNmRiN2RhLCAKLSAgMHg4ZDhkOGMwMSwgMHhkNWQ1NjRiMSwgMHg0ZTRlZDI5YywgMHhhOWE5ZTA0OSwgCi0gIDB4NmM2Y2I0ZDgsIDB4NTY1NmZhYWMsIDB4ZjRmNDA3ZjMsIDB4ZWFlYTI1Y2YsIAotICAweDY1NjVhZmNhLCAweDdhN2E4ZWY0LCAweGFlYWVlOTQ3LCAweDgwODE4MTAsIAotICAweGJhYmFkNTZmLCAweDc4Nzg4OGYwLCAweDI1MjU2ZjRhLCAweDJlMmU3MjVjLCAKLSAgMHgxYzFjMjQzOCwgMHhhNmE2ZjE1NywgMHhiNGI0Yzc3MywgMHhjNmM2NTE5NywgCi0gIDB4ZThlODIzY2IsIDB4ZGRkZDdjYTEsIDB4NzQ3NDljZTgsIDB4MWYxZjIxM2UsIAotICAweDRiNGJkZDk2LCAweGJkYmRkYzYxLCAweDhiOGI4NjBkLCAweDhhOGE4NTBmLCAKLSAgMHg3MDcwOTBlMCwgMHgzZTNlNDI3YywgMHhiNWI1YzQ3MSwgMHg2NjY2YWFjYywgCi0gIDB4NDg0OGQ4OTAsIDB4MzAzMDUwNiwgMHhmNmY2MDFmNywgMHhlMGUxMjFjLCAKLSAgMHg2MTYxYTNjMiwgMHgzNTM1NWY2YSwgMHg1NzU3ZjlhZSwgMHhiOWI5ZDA2OSwgCi0gIDB4ODY4NjkxMTcsIDB4YzFjMTU4OTksIDB4MWQxZDI3M2EsIDB4OWU5ZWI5MjcsIAotICAweGUxZTEzOGQ5LCAweGY4ZjgxM2ViLCAweDk4OThiMzJiLCAweDExMTEzMzIyLCAKLSAgMHg2OTY5YmJkMiwgMHhkOWQ5NzBhOSwgMHg4ZThlODkwNywgMHg5NDk0YTczMywgCi0gIDB4OWI5YmI2MmQsIDB4MWUxZTIyM2MsIDB4ODc4NzkyMTUsIDB4ZTllOTIwYzksIAotICAweGNlY2U0OTg3LCAweDU1NTVmZmFhLCAweDI4Mjg3ODUwLCAweGRmZGY3YWE1LCAKLSAgMHg4YzhjOGYwMywgMHhhMWExZjg1OSwgMHg4OTg5ODAwOSwgMHhkMGQxNzFhLCAKLSAgMHhiZmJmZGE2NSwgMHhlNmU2MzFkNywgMHg0MjQyYzY4NCwgMHg2ODY4YjhkMCwgCi0gIDB4NDE0MWMzODIsIDB4OTk5OWIwMjksIDB4MmQyZDc3NWEsIDB4ZjBmMTExZSwgCi0gIDB4YjBiMGNiN2IsIDB4NTQ1NGZjYTgsIDB4YmJiYmQ2NmQsIDB4MTYxNjNhMmMsIAorLyogY2xhbmctZm9ybWF0IG9mZiAqLworc3RhdGljIGNvbnN0IHVpbnQzMl90IFQzWzI1Nl0gPSB7CisgICAgMHg2MzYzYTVjNiwgMHg3YzdjODRmOCwgIDB4Nzc3Nzk5ZWUsICAweDdiN2I4ZGY2LAorICAgIDB4ZjJmMjBkZmYsIDB4NmI2YmJkZDYsICAweDZmNmZiMWRlLCAgMHhjNWM1NTQ5MSwKKyAgICAweDMwMzA1MDYwLCAweDEwMTAzMDIsICAgMHg2NzY3YTljZSwgIDB4MmIyYjdkNTYsCisgICAgMHhmZWZlMTllNywgMHhkN2Q3NjJiNSwgIDB4YWJhYmU2NGQsICAweDc2NzY5YWVjLAorICAgIDB4Y2FjYTQ1OGYsIDB4ODI4MjlkMWYsICAweGM5Yzk0MDg5LCAgMHg3ZDdkODdmYSwKKyAgICAweGZhZmExNWVmLCAweDU5NTllYmIyLCAgMHg0NzQ3Yzk4ZSwgIDB4ZjBmMDBiZmIsCisgICAgMHhhZGFkZWM0MSwgMHhkNGQ0NjdiMywgIDB4YTJhMmZkNWYsICAweGFmYWZlYTQ1LAorICAgIDB4OWM5Y2JmMjMsIDB4YTRhNGY3NTMsICAweDcyNzI5NmU0LCAgMHhjMGMwNWI5YiwKKyAgICAweGI3YjdjMjc1LCAweGZkZmQxY2UxLCAgMHg5MzkzYWUzZCwgIDB4MjYyNjZhNGMsCisgICAgMHgzNjM2NWE2YywgMHgzZjNmNDE3ZSwgIDB4ZjdmNzAyZjUsICAweGNjY2M0ZjgzLAorICAgIDB4MzQzNDVjNjgsIDB4YTVhNWY0NTEsICAweGU1ZTUzNGQxLCAgMHhmMWYxMDhmOSwKKyAgICAweDcxNzE5M2UyLCAweGQ4ZDg3M2FiLCAgMHgzMTMxNTM2MiwgIDB4MTUxNTNmMmEsCisgICAgMHg0MDQwYzA4LCAgMHhjN2M3NTI5NSwgIDB4MjMyMzY1NDYsICAweGMzYzM1ZTlkLAorICAgIDB4MTgxODI4MzAsIDB4OTY5NmExMzcsICAweDUwNTBmMGEsICAgMHg5YTlhYjUyZiwKKyAgICAweDcwNzA5MGUsICAweDEyMTIzNjI0LCAgMHg4MDgwOWIxYiwgIDB4ZTJlMjNkZGYsCisgICAgMHhlYmViMjZjZCwgMHgyNzI3Njk0ZSwgIDB4YjJiMmNkN2YsICAweDc1NzU5ZmVhLAorICAgIDB4OTA5MWIxMiwgIDB4ODM4MzllMWQsICAweDJjMmM3NDU4LCAgMHgxYTFhMmUzNCwKKyAgICAweDFiMWIyZDM2LCAweDZlNmViMmRjLCAgMHg1YTVhZWViNCwgIDB4YTBhMGZiNWIsCisgICAgMHg1MjUyZjZhNCwgMHgzYjNiNGQ3NiwgIDB4ZDZkNjYxYjcsICAweGIzYjNjZTdkLAorICAgIDB4MjkyOTdiNTIsIDB4ZTNlMzNlZGQsICAweDJmMmY3MTVlLCAgMHg4NDg0OTcxMywKKyAgICAweDUzNTNmNWE2LCAweGQxZDE2OGI5LCAgMHgwLCAgICAgICAgIDB4ZWRlZDJjYzEsCisgICAgMHgyMDIwNjA0MCwgMHhmY2ZjMWZlMywgIDB4YjFiMWM4NzksICAweDViNWJlZGI2LAorICAgIDB4NmE2YWJlZDQsIDB4Y2JjYjQ2OGQsICAweGJlYmVkOTY3LCAgMHgzOTM5NGI3MiwKKyAgICAweDRhNGFkZTk0LCAweDRjNGNkNDk4LCAgMHg1ODU4ZThiMCwgIDB4Y2ZjZjRhODUsCisgICAgMHhkMGQwNmJiYiwgMHhlZmVmMmFjNSwgIDB4YWFhYWU1NGYsICAweGZiZmIxNmVkLAorICAgIDB4NDM0M2M1ODYsIDB4NGQ0ZGQ3OWEsICAweDMzMzM1NTY2LCAgMHg4NTg1OTQxMSwKKyAgICAweDQ1NDVjZjhhLCAweGY5ZjkxMGU5LCAgMHgyMDIwNjA0LCAgIDB4N2Y3ZjgxZmUsCisgICAgMHg1MDUwZjBhMCwgMHgzYzNjNDQ3OCwgIDB4OWY5ZmJhMjUsICAweGE4YThlMzRiLAorICAgIDB4NTE1MWYzYTIsIDB4YTNhM2ZlNWQsICAweDQwNDBjMDgwLCAgMHg4ZjhmOGEwNSwKKyAgICAweDkyOTJhZDNmLCAweDlkOWRiYzIxLCAgMHgzODM4NDg3MCwgIDB4ZjVmNTA0ZjEsCisgICAgMHhiY2JjZGY2MywgMHhiNmI2YzE3NywgIDB4ZGFkYTc1YWYsICAweDIxMjE2MzQyLAorICAgIDB4MTAxMDMwMjAsIDB4ZmZmZjFhZTUsICAweGYzZjMwZWZkLCAgMHhkMmQyNmRiZiwKKyAgICAweGNkY2Q0YzgxLCAweGMwYzE0MTgsICAgMHgxMzEzMzUyNiwgIDB4ZWNlYzJmYzMsCisgICAgMHg1ZjVmZTFiZSwgMHg5Nzk3YTIzNSwgIDB4NDQ0NGNjODgsICAweDE3MTczOTJlLAorICAgIDB4YzRjNDU3OTMsIDB4YTdhN2YyNTUsICAweDdlN2U4MmZjLCAgMHgzZDNkNDc3YSwKKyAgICAweDY0NjRhY2M4LCAweDVkNWRlN2JhLCAgMHgxOTE5MmIzMiwgIDB4NzM3Mzk1ZTYsCisgICAgMHg2MDYwYTBjMCwgMHg4MTgxOTgxOSwgIDB4NGY0ZmQxOWUsICAweGRjZGM3ZmEzLAorICAgIDB4MjIyMjY2NDQsIDB4MmEyYTdlNTQsICAweDkwOTBhYjNiLCAgMHg4ODg4ODMwYiwKKyAgICAweDQ2NDZjYThjLCAweGVlZWUyOWM3LCAgMHhiOGI4ZDM2YiwgIDB4MTQxNDNjMjgsCisgICAgMHhkZWRlNzlhNywgMHg1ZTVlZTJiYywgIDB4YjBiMWQxNiwgICAweGRiZGI3NmFkLAorICAgIDB4ZTBlMDNiZGIsIDB4MzIzMjU2NjQsICAweDNhM2E0ZTc0LCAgMHhhMGExZTE0LAorICAgIDB4NDk0OWRiOTIsIDB4NjA2MGEwYywgICAweDI0MjQ2YzQ4LCAgMHg1YzVjZTRiOCwKKyAgICAweGMyYzI1ZDlmLCAweGQzZDM2ZWJkLCAgMHhhY2FjZWY0MywgIDB4NjI2MmE2YzQsCisgICAgMHg5MTkxYTgzOSwgMHg5NTk1YTQzMSwgIDB4ZTRlNDM3ZDMsICAweDc5Nzk4YmYyLAorICAgIDB4ZTdlNzMyZDUsIDB4YzhjODQzOGIsICAweDM3Mzc1OTZlLCAgMHg2ZDZkYjdkYSwKKyAgICAweDhkOGQ4YzAxLCAweGQ1ZDU2NGIxLCAgMHg0ZTRlZDI5YywgIDB4YTlhOWUwNDksCisgICAgMHg2YzZjYjRkOCwgMHg1NjU2ZmFhYywgIDB4ZjRmNDA3ZjMsICAweGVhZWEyNWNmLAorICAgIDB4NjU2NWFmY2EsIDB4N2E3YThlZjQsICAweGFlYWVlOTQ3LCAgMHg4MDgxODEwLAorICAgIDB4YmFiYWQ1NmYsIDB4Nzg3ODg4ZjAsICAweDI1MjU2ZjRhLCAgMHgyZTJlNzI1YywKKyAgICAweDFjMWMyNDM4LCAweGE2YTZmMTU3LCAgMHhiNGI0Yzc3MywgIDB4YzZjNjUxOTcsCisgICAgMHhlOGU4MjNjYiwgMHhkZGRkN2NhMSwgIDB4NzQ3NDljZTgsICAweDFmMWYyMTNlLAorICAgIDB4NGI0YmRkOTYsIDB4YmRiZGRjNjEsICAweDhiOGI4NjBkLCAgMHg4YThhODUwZiwKKyAgICAweDcwNzA5MGUwLCAweDNlM2U0MjdjLCAgMHhiNWI1YzQ3MSwgIDB4NjY2NmFhY2MsCisgICAgMHg0ODQ4ZDg5MCwgMHgzMDMwNTA2LCAgIDB4ZjZmNjAxZjcsICAweGUwZTEyMWMsCisgICAgMHg2MTYxYTNjMiwgMHgzNTM1NWY2YSwgIDB4NTc1N2Y5YWUsICAweGI5YjlkMDY5LAorICAgIDB4ODY4NjkxMTcsIDB4YzFjMTU4OTksICAweDFkMWQyNzNhLCAgMHg5ZTllYjkyNywKKyAgICAweGUxZTEzOGQ5LCAweGY4ZjgxM2ViLCAgMHg5ODk4YjMyYiwgIDB4MTExMTMzMjIsCisgICAgMHg2OTY5YmJkMiwgMHhkOWQ5NzBhOSwgIDB4OGU4ZTg5MDcsICAweDk0OTRhNzMzLAorICAgIDB4OWI5YmI2MmQsIDB4MWUxZTIyM2MsICAweDg3ODc5MjE1LCAgMHhlOWU5MjBjOSwKKyAgICAweGNlY2U0OTg3LCAweDU1NTVmZmFhLCAgMHgyODI4Nzg1MCwgIDB4ZGZkZjdhYTUsCisgICAgMHg4YzhjOGYwMywgMHhhMWExZjg1OSwgIDB4ODk4OTgwMDksICAweGQwZDE3MWEsCisgICAgMHhiZmJmZGE2NSwgMHhlNmU2MzFkNywgIDB4NDI0MmM2ODQsICAweDY4NjhiOGQwLAorICAgIDB4NDE0MWMzODIsIDB4OTk5OWIwMjksICAweDJkMmQ3NzVhLCAgMHhmMGYxMTFlLAorICAgIDB4YjBiMGNiN2IsIDB4NTQ1NGZjYTgsICAweGJiYmJkNjZkLCAgMHgxNjE2M2EyYywKIH07CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KIAotdWludDMyX3QgVTBbMjU2XSA9IHsKLSAgMHg1MWY0YTc1MCwgMHg3ZTQxNjU1MywgMHgxYTE3YTRjMywgMHgzYTI3NWU5NiwgCi0gIDB4M2JhYjZiY2IsIDB4MWY5ZDQ1ZjEsIDB4YWNmYTU4YWIsIDB4NGJlMzAzOTMsIAotICAweDIwMzBmYTU1LCAweGFkNzY2ZGY2LCAweDg4Y2M3NjkxLCAweGY1MDI0YzI1LCAKLSAgMHg0ZmU1ZDdmYywgMHhjNTJhY2JkNywgMHgyNjM1NDQ4MCwgMHhiNTYyYTM4ZiwgCi0gIDB4ZGViMTVhNDksIDB4MjViYTFiNjcsIDB4NDVlYTBlOTgsIDB4NWRmZWMwZTEsIAotICAweGMzMmY3NTAyLCAweDgxNGNmMDEyLCAweDhkNDY5N2EzLCAweDZiZDNmOWM2LCAKLSAgMHgzOGY1ZmU3LCAweDE1OTI5Yzk1LCAweGJmNmQ3YWViLCAweDk1NTI1OWRhLCAKLSAgMHhkNGJlODMyZCwgMHg1ODc0MjFkMywgMHg0OWUwNjkyOSwgMHg4ZWM5Yzg0NCwgCi0gIDB4NzVjMjg5NmEsIDB4ZjQ4ZTc5NzgsIDB4OTk1ODNlNmIsIDB4MjdiOTcxZGQsIAotICAweGJlZTE0ZmI2LCAweGYwODhhZDE3LCAweGM5MjBhYzY2LCAweDdkY2UzYWI0LCAKLSAgMHg2M2RmNGExOCwgMHhlNTFhMzE4MiwgMHg5NzUxMzM2MCwgMHg2MjUzN2Y0NSwgCi0gIDB4YjE2NDc3ZTAsIDB4YmI2YmFlODQsIDB4ZmU4MWEwMWMsIDB4ZjkwODJiOTQsIAotICAweDcwNDg2ODU4LCAweDhmNDVmZDE5LCAweDk0ZGU2Yzg3LCAweDUyN2JmOGI3LCAKLSAgMHhhYjczZDMyMywgMHg3MjRiMDJlMiwgMHhlMzFmOGY1NywgMHg2NjU1YWIyYSwgCi0gIDB4YjJlYjI4MDcsIDB4MmZiNWMyMDMsIDB4ODZjNTdiOWEsIDB4ZDMzNzA4YTUsIAotICAweDMwMjg4N2YyLCAweDIzYmZhNWIyLCAweDIwMzZhYmEsIDB4ZWQxNjgyNWMsIAotICAweDhhY2YxYzJiLCAweGE3NzliNDkyLCAweGYzMDdmMmYwLCAweDRlNjllMmExLCAKLSAgMHg2NWRhZjRjZCwgMHg2MDViZWQ1LCAweGQxMzQ2MjFmLCAweGM0YTZmZThhLCAKLSAgMHgzNDJlNTM5ZCwgMHhhMmYzNTVhMCwgMHg1OGFlMTMyLCAweGE0ZjZlYjc1LCAKLSAgMHhiODNlYzM5LCAweDQwNjBlZmFhLCAweDVlNzE5ZjA2LCAweGJkNmUxMDUxLCAKLSAgMHgzZTIxOGFmOSwgMHg5NmRkMDYzZCwgMHhkZDNlMDVhZSwgMHg0ZGU2YmQ0NiwgCi0gIDB4OTE1NDhkYjUsIDB4NzFjNDVkMDUsIDB4NDA2ZDQ2ZiwgMHg2MDUwMTVmZiwgCi0gIDB4MTk5OGZiMjQsIDB4ZDZiZGU5OTcsIDB4ODk0MDQzY2MsIDB4NjdkOTllNzcsIAotICAweGIwZTg0MmJkLCAweDc4OThiODgsIDB4ZTcxOTViMzgsIDB4NzljOGVlZGIsIAotICAweGExN2MwYTQ3LCAweDdjNDIwZmU5LCAweGY4ODQxZWM5LCAweDAsIAotICAweDk4MDg2ODMsIDB4MzIyYmVkNDgsIDB4MWUxMTcwYWMsIDB4NmM1YTcyNGUsIAotICAweGZkMGVmZmZiLCAweGY4NTM4NTYsIDB4M2RhZWQ1MWUsIDB4MzYyZDM5MjcsIAotICAweGEwZmQ5NjQsIDB4Njg1Y2E2MjEsIDB4OWI1YjU0ZDEsIDB4MjQzNjJlM2EsIAotICAweGMwYTY3YjEsIDB4OTM1N2U3MGYsIDB4YjRlZTk2ZDIsIDB4MWI5YjkxOWUsIAotICAweDgwYzBjNTRmLCAweDYxZGMyMGEyLCAweDVhNzc0YjY5LCAweDFjMTIxYTE2LCAKLSAgMHhlMjkzYmEwYSwgMHhjMGEwMmFlNSwgMHgzYzIyZTA0MywgMHgxMjFiMTcxZCwgCi0gIDB4ZTA5MGQwYiwgMHhmMjhiYzdhZCwgMHgyZGI2YThiOSwgMHgxNDFlYTljOCwgCi0gIDB4NTdmMTE5ODUsIDB4YWY3NTA3NGMsIDB4ZWU5OWRkYmIsIDB4YTM3ZjYwZmQsIAotICAweGY3MDEyNjlmLCAweDVjNzJmNWJjLCAweDQ0NjYzYmM1LCAweDViZmI3ZTM0LCAKLSAgMHg4YjQzMjk3NiwgMHhjYjIzYzZkYywgMHhiNmVkZmM2OCwgMHhiOGU0ZjE2MywgCi0gIDB4ZDczMWRjY2EsIDB4NDI2Mzg1MTAsIDB4MTM5NzIyNDAsIDB4ODRjNjExMjAsIAotICAweDg1NGEyNDdkLCAweGQyYmIzZGY4LCAweGFlZjkzMjExLCAweGM3MjlhMTZkLCAKLSAgMHgxZDllMmY0YiwgMHhkY2IyMzBmMywgMHhkODY1MmVjLCAweDc3YzFlM2QwLCAKLSAgMHgyYmIzMTY2YywgMHhhOTcwYjk5OSwgMHgxMTk0NDhmYSwgMHg0N2U5NjQyMiwgCi0gIDB4YThmYzhjYzQsIDB4YTBmMDNmMWEsIDB4NTY3ZDJjZDgsIDB4MjIzMzkwZWYsIAotICAweDg3NDk0ZWM3LCAweGQ5MzhkMWMxLCAweDhjY2FhMmZlLCAweDk4ZDQwYjM2LCAKLSAgMHhhNmY1ODFjZiwgMHhhNTdhZGUyOCwgMHhkYWI3OGUyNiwgMHgzZmFkYmZhNCwgCi0gIDB4MmMzYTlkZTQsIDB4NTA3ODkyMGQsIDB4NmE1ZmNjOWIsIDB4NTQ3ZTQ2NjIsIAotICAweGY2OGQxM2MyLCAweDkwZDhiOGU4LCAweDJlMzlmNzVlLCAweDgyYzNhZmY1LCAKLSAgMHg5ZjVkODBiZSwgMHg2OWQwOTM3YywgMHg2ZmQ1MmRhOSwgMHhjZjI1MTJiMywgCi0gIDB4YzhhYzk5M2IsIDB4MTAxODdkYTcsIDB4ZTg5YzYzNmUsIDB4ZGIzYmJiN2IsIAotICAweGNkMjY3ODA5LCAweDZlNTkxOGY0LCAweGVjOWFiNzAxLCAweDgzNGY5YWE4LCAKLSAgMHhlNjk1NmU2NSwgMHhhYWZmZTY3ZSwgMHgyMWJjY2YwOCwgMHhlZjE1ZThlNiwgCi0gIDB4YmFlNzliZDksIDB4NGE2ZjM2Y2UsIDB4ZWE5ZjA5ZDQsIDB4MjliMDdjZDYsIAotICAweDMxYTRiMmFmLCAweDJhM2YyMzMxLCAweGM2YTU5NDMwLCAweDM1YTI2NmMwLCAKLSAgMHg3NDRlYmMzNywgMHhmYzgyY2FhNiwgMHhlMDkwZDBiMCwgMHgzM2E3ZDgxNSwgCi0gIDB4ZjEwNDk4NGEsIDB4NDFlY2RhZjcsIDB4N2ZjZDUwMGUsIDB4MTc5MWY2MmYsIAotICAweDc2NGRkNjhkLCAweDQzZWZiMDRkLCAweGNjYWE0ZDU0LCAweGU0OTYwNGRmLCAKLSAgMHg5ZWQxYjVlMywgMHg0YzZhODgxYiwgMHhjMTJjMWZiOCwgMHg0NjY1NTE3ZiwgCi0gIDB4OWQ1ZWVhMDQsIDB4MThjMzU1ZCwgMHhmYTg3NzQ3MywgMHhmYjBiNDEyZSwgCi0gIDB4YjM2NzFkNWEsIDB4OTJkYmQyNTIsIDB4ZTkxMDU2MzMsIDB4NmRkNjQ3MTMsIAotICAweDlhZDc2MThjLCAweDM3YTEwYzdhLCAweDU5ZjgxNDhlLCAweGViMTMzYzg5LCAKLSAgMHhjZWE5MjdlZSwgMHhiNzYxYzkzNSwgMHhlMTFjZTVlZCwgMHg3YTQ3YjEzYywgCi0gIDB4OWNkMmRmNTksIDB4NTVmMjczM2YsIDB4MTgxNGNlNzksIDB4NzNjNzM3YmYsIAotICAweDUzZjdjZGVhLCAweDVmZmRhYTViLCAweGRmM2Q2ZjE0LCAweDc4NDRkYjg2LCAKLSAgMHhjYWFmZjM4MSwgMHhiOTY4YzQzZSwgMHgzODI0MzQyYywgMHhjMmEzNDA1ZiwgCi0gIDB4MTYxZGMzNzIsIDB4YmNlMjI1MGMsIDB4MjgzYzQ5OGIsIDB4ZmYwZDk1NDEsIAotICAweDM5YTgwMTcxLCAweDgwY2IzZGUsIDB4ZDhiNGU0OWMsIDB4NjQ1NmMxOTAsIAotICAweDdiY2I4NDYxLCAweGQ1MzJiNjcwLCAweDQ4NmM1Yzc0LCAweGQwYjg1NzQyCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgY29uc3QgdWludDMyX3QgVTBbMjU2XSA9IHsKKyAgICAweDUxZjRhNzUwLCAweDdlNDE2NTUzLCAgMHgxYTE3YTRjMywgIDB4M2EyNzVlOTYsCisgICAgMHgzYmFiNmJjYiwgMHgxZjlkNDVmMSwgIDB4YWNmYTU4YWIsICAweDRiZTMwMzkzLAorICAgIDB4MjAzMGZhNTUsIDB4YWQ3NjZkZjYsICAweDg4Y2M3NjkxLCAgMHhmNTAyNGMyNSwKKyAgICAweDRmZTVkN2ZjLCAweGM1MmFjYmQ3LCAgMHgyNjM1NDQ4MCwgIDB4YjU2MmEzOGYsCisgICAgMHhkZWIxNWE0OSwgMHgyNWJhMWI2NywgIDB4NDVlYTBlOTgsICAweDVkZmVjMGUxLAorICAgIDB4YzMyZjc1MDIsIDB4ODE0Y2YwMTIsICAweDhkNDY5N2EzLCAgMHg2YmQzZjljNiwKKyAgICAweDM4ZjVmZTcsICAweDE1OTI5Yzk1LCAgMHhiZjZkN2FlYiwgIDB4OTU1MjU5ZGEsCisgICAgMHhkNGJlODMyZCwgMHg1ODc0MjFkMywgIDB4NDllMDY5MjksICAweDhlYzljODQ0LAorICAgIDB4NzVjMjg5NmEsIDB4ZjQ4ZTc5NzgsICAweDk5NTgzZTZiLCAgMHgyN2I5NzFkZCwKKyAgICAweGJlZTE0ZmI2LCAweGYwODhhZDE3LCAgMHhjOTIwYWM2NiwgIDB4N2RjZTNhYjQsCisgICAgMHg2M2RmNGExOCwgMHhlNTFhMzE4MiwgIDB4OTc1MTMzNjAsICAweDYyNTM3ZjQ1LAorICAgIDB4YjE2NDc3ZTAsIDB4YmI2YmFlODQsICAweGZlODFhMDFjLCAgMHhmOTA4MmI5NCwKKyAgICAweDcwNDg2ODU4LCAweDhmNDVmZDE5LCAgMHg5NGRlNmM4NywgIDB4NTI3YmY4YjcsCisgICAgMHhhYjczZDMyMywgMHg3MjRiMDJlMiwgIDB4ZTMxZjhmNTcsICAweDY2NTVhYjJhLAorICAgIDB4YjJlYjI4MDcsIDB4MmZiNWMyMDMsICAweDg2YzU3YjlhLCAgMHhkMzM3MDhhNSwKKyAgICAweDMwMjg4N2YyLCAweDIzYmZhNWIyLCAgMHgyMDM2YWJhLCAgIDB4ZWQxNjgyNWMsCisgICAgMHg4YWNmMWMyYiwgMHhhNzc5YjQ5MiwgIDB4ZjMwN2YyZjAsICAweDRlNjllMmExLAorICAgIDB4NjVkYWY0Y2QsIDB4NjA1YmVkNSwgICAweGQxMzQ2MjFmLCAgMHhjNGE2ZmU4YSwKKyAgICAweDM0MmU1MzlkLCAweGEyZjM1NWEwLCAgMHg1OGFlMTMyLCAgIDB4YTRmNmViNzUsCisgICAgMHhiODNlYzM5LCAgMHg0MDYwZWZhYSwgIDB4NWU3MTlmMDYsICAweGJkNmUxMDUxLAorICAgIDB4M2UyMThhZjksIDB4OTZkZDA2M2QsICAweGRkM2UwNWFlLCAgMHg0ZGU2YmQ0NiwKKyAgICAweDkxNTQ4ZGI1LCAweDcxYzQ1ZDA1LCAgMHg0MDZkNDZmLCAgIDB4NjA1MDE1ZmYsCisgICAgMHgxOTk4ZmIyNCwgMHhkNmJkZTk5NywgIDB4ODk0MDQzY2MsICAweDY3ZDk5ZTc3LAorICAgIDB4YjBlODQyYmQsIDB4Nzg5OGI4OCwgICAweGU3MTk1YjM4LCAgMHg3OWM4ZWVkYiwKKyAgICAweGExN2MwYTQ3LCAweDdjNDIwZmU5LCAgMHhmODg0MWVjOSwgIDB4MCwKKyAgICAweDk4MDg2ODMsICAweDMyMmJlZDQ4LCAgMHgxZTExNzBhYywgIDB4NmM1YTcyNGUsCisgICAgMHhmZDBlZmZmYiwgMHhmODUzODU2LCAgIDB4M2RhZWQ1MWUsICAweDM2MmQzOTI3LAorICAgIDB4YTBmZDk2NCwgIDB4Njg1Y2E2MjEsICAweDliNWI1NGQxLCAgMHgyNDM2MmUzYSwKKyAgICAweGMwYTY3YjEsICAweDkzNTdlNzBmLCAgMHhiNGVlOTZkMiwgIDB4MWI5YjkxOWUsCisgICAgMHg4MGMwYzU0ZiwgMHg2MWRjMjBhMiwgIDB4NWE3NzRiNjksICAweDFjMTIxYTE2LAorICAgIDB4ZTI5M2JhMGEsIDB4YzBhMDJhZTUsICAweDNjMjJlMDQzLCAgMHgxMjFiMTcxZCwKKyAgICAweGUwOTBkMGIsICAweGYyOGJjN2FkLCAgMHgyZGI2YThiOSwgIDB4MTQxZWE5YzgsCisgICAgMHg1N2YxMTk4NSwgMHhhZjc1MDc0YywgIDB4ZWU5OWRkYmIsICAweGEzN2Y2MGZkLAorICAgIDB4ZjcwMTI2OWYsIDB4NWM3MmY1YmMsICAweDQ0NjYzYmM1LCAgMHg1YmZiN2UzNCwKKyAgICAweDhiNDMyOTc2LCAweGNiMjNjNmRjLCAgMHhiNmVkZmM2OCwgIDB4YjhlNGYxNjMsCisgICAgMHhkNzMxZGNjYSwgMHg0MjYzODUxMCwgIDB4MTM5NzIyNDAsICAweDg0YzYxMTIwLAorICAgIDB4ODU0YTI0N2QsIDB4ZDJiYjNkZjgsICAweGFlZjkzMjExLCAgMHhjNzI5YTE2ZCwKKyAgICAweDFkOWUyZjRiLCAweGRjYjIzMGYzLCAgMHhkODY1MmVjLCAgIDB4NzdjMWUzZDAsCisgICAgMHgyYmIzMTY2YywgMHhhOTcwYjk5OSwgIDB4MTE5NDQ4ZmEsICAweDQ3ZTk2NDIyLAorICAgIDB4YThmYzhjYzQsIDB4YTBmMDNmMWEsICAweDU2N2QyY2Q4LCAgMHgyMjMzOTBlZiwKKyAgICAweDg3NDk0ZWM3LCAweGQ5MzhkMWMxLCAgMHg4Y2NhYTJmZSwgIDB4OThkNDBiMzYsCisgICAgMHhhNmY1ODFjZiwgMHhhNTdhZGUyOCwgIDB4ZGFiNzhlMjYsICAweDNmYWRiZmE0LAorICAgIDB4MmMzYTlkZTQsIDB4NTA3ODkyMGQsICAweDZhNWZjYzliLCAgMHg1NDdlNDY2MiwKKyAgICAweGY2OGQxM2MyLCAweDkwZDhiOGU4LCAgMHgyZTM5Zjc1ZSwgIDB4ODJjM2FmZjUsCisgICAgMHg5ZjVkODBiZSwgMHg2OWQwOTM3YywgIDB4NmZkNTJkYTksICAweGNmMjUxMmIzLAorICAgIDB4YzhhYzk5M2IsIDB4MTAxODdkYTcsICAweGU4OWM2MzZlLCAgMHhkYjNiYmI3YiwKKyAgICAweGNkMjY3ODA5LCAweDZlNTkxOGY0LCAgMHhlYzlhYjcwMSwgIDB4ODM0ZjlhYTgsCisgICAgMHhlNjk1NmU2NSwgMHhhYWZmZTY3ZSwgIDB4MjFiY2NmMDgsICAweGVmMTVlOGU2LAorICAgIDB4YmFlNzliZDksIDB4NGE2ZjM2Y2UsICAweGVhOWYwOWQ0LCAgMHgyOWIwN2NkNiwKKyAgICAweDMxYTRiMmFmLCAweDJhM2YyMzMxLCAgMHhjNmE1OTQzMCwgIDB4MzVhMjY2YzAsCisgICAgMHg3NDRlYmMzNywgMHhmYzgyY2FhNiwgIDB4ZTA5MGQwYjAsICAweDMzYTdkODE1LAorICAgIDB4ZjEwNDk4NGEsIDB4NDFlY2RhZjcsICAweDdmY2Q1MDBlLCAgMHgxNzkxZjYyZiwKKyAgICAweDc2NGRkNjhkLCAweDQzZWZiMDRkLCAgMHhjY2FhNGQ1NCwgIDB4ZTQ5NjA0ZGYsCisgICAgMHg5ZWQxYjVlMywgMHg0YzZhODgxYiwgIDB4YzEyYzFmYjgsICAweDQ2NjU1MTdmLAorICAgIDB4OWQ1ZWVhMDQsIDB4MThjMzU1ZCwgICAweGZhODc3NDczLCAgMHhmYjBiNDEyZSwKKyAgICAweGIzNjcxZDVhLCAweDkyZGJkMjUyLCAgMHhlOTEwNTYzMywgIDB4NmRkNjQ3MTMsCisgICAgMHg5YWQ3NjE4YywgMHgzN2ExMGM3YSwgIDB4NTlmODE0OGUsICAweGViMTMzYzg5LAorICAgIDB4Y2VhOTI3ZWUsIDB4Yjc2MWM5MzUsICAweGUxMWNlNWVkLCAgMHg3YTQ3YjEzYywKKyAgICAweDljZDJkZjU5LCAweDU1ZjI3MzNmLCAgMHgxODE0Y2U3OSwgIDB4NzNjNzM3YmYsCisgICAgMHg1M2Y3Y2RlYSwgMHg1ZmZkYWE1YiwgIDB4ZGYzZDZmMTQsICAweDc4NDRkYjg2LAorICAgIDB4Y2FhZmYzODEsIDB4Yjk2OGM0M2UsICAweDM4MjQzNDJjLCAgMHhjMmEzNDA1ZiwKKyAgICAweDE2MWRjMzcyLCAweGJjZTIyNTBjLCAgMHgyODNjNDk4YiwgIDB4ZmYwZDk1NDEsCisgICAgMHgzOWE4MDE3MSwgMHg4MGNiM2RlLCAgIDB4ZDhiNGU0OWMsICAweDY0NTZjMTkwLAorICAgIDB4N2JjYjg0NjEsIDB4ZDUzMmI2NzAsICAweDQ4NmM1Yzc0LCAgMHhkMGI4NTc0MgogfTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLwogCi11aW50MzJfdCBVMVsyNTZdID0gewotICAweDUwNTFmNGE3LCAweDUzN2U0MTY1LCAweGMzMWExN2E0LCAweDk2M2EyNzVlLCAKLSAgMHhjYjNiYWI2YiwgMHhmMTFmOWQ0NSwgMHhhYmFjZmE1OCwgMHg5MzRiZTMwMywgCi0gIDB4NTUyMDMwZmEsIDB4ZjZhZDc2NmQsIDB4OTE4OGNjNzYsIDB4MjVmNTAyNGMsIAotICAweGZjNGZlNWQ3LCAweGQ3YzUyYWNiLCAweDgwMjYzNTQ0LCAweDhmYjU2MmEzLCAKLSAgMHg0OWRlYjE1YSwgMHg2NzI1YmExYiwgMHg5ODQ1ZWEwZSwgMHhlMTVkZmVjMCwgCi0gIDB4MmMzMmY3NSwgMHgxMjgxNGNmMCwgMHhhMzhkNDY5NywgMHhjNjZiZDNmOSwgCi0gIDB4ZTcwMzhmNWYsIDB4OTUxNTkyOWMsIDB4ZWJiZjZkN2EsIDB4ZGE5NTUyNTksIAotICAweDJkZDRiZTgzLCAweGQzNTg3NDIxLCAweDI5NDllMDY5LCAweDQ0OGVjOWM4LCAKLSAgMHg2YTc1YzI4OSwgMHg3OGY0OGU3OSwgMHg2Yjk5NTgzZSwgMHhkZDI3Yjk3MSwgCi0gIDB4YjZiZWUxNGYsIDB4MTdmMDg4YWQsIDB4NjZjOTIwYWMsIDB4YjQ3ZGNlM2EsIAotICAweDE4NjNkZjRhLCAweDgyZTUxYTMxLCAweDYwOTc1MTMzLCAweDQ1NjI1MzdmLCAKLSAgMHhlMGIxNjQ3NywgMHg4NGJiNmJhZSwgMHgxY2ZlODFhMCwgMHg5NGY5MDgyYiwgCi0gIDB4NTg3MDQ4NjgsIDB4MTk4ZjQ1ZmQsIDB4ODc5NGRlNmMsIDB4Yjc1MjdiZjgsIAotICAweDIzYWI3M2QzLCAweGUyNzI0YjAyLCAweDU3ZTMxZjhmLCAweDJhNjY1NWFiLCAKLSAgMHg3YjJlYjI4LCAweDMyZmI1YzIsIDB4OWE4NmM1N2IsIDB4YTVkMzM3MDgsIAotICAweGYyMzAyODg3LCAweGIyMjNiZmE1LCAweGJhMDIwMzZhLCAweDVjZWQxNjgyLCAKLSAgMHgyYjhhY2YxYywgMHg5MmE3NzliNCwgMHhmMGYzMDdmMiwgMHhhMTRlNjllMiwgCi0gIDB4Y2Q2NWRhZjQsIDB4ZDUwNjA1YmUsIDB4MWZkMTM0NjIsIDB4OGFjNGE2ZmUsIAotICAweDlkMzQyZTUzLCAweGEwYTJmMzU1LCAweDMyMDU4YWUxLCAweDc1YTRmNmViLCAKLSAgMHgzOTBiODNlYywgMHhhYTQwNjBlZiwgMHg2NWU3MTlmLCAweDUxYmQ2ZTEwLCAKLSAgMHhmOTNlMjE4YSwgMHgzZDk2ZGQwNiwgMHhhZWRkM2UwNSwgMHg0NjRkZTZiZCwgCi0gIDB4YjU5MTU0OGQsIDB4NTcxYzQ1ZCwgMHg2ZjA0MDZkNCwgMHhmZjYwNTAxNSwgCi0gIDB4MjQxOTk4ZmIsIDB4OTdkNmJkZTksIDB4Y2M4OTQwNDMsIDB4Nzc2N2Q5OWUsIAotICAweGJkYjBlODQyLCAweDg4MDc4OThiLCAweDM4ZTcxOTViLCAweGRiNzljOGVlLCAKLSAgMHg0N2ExN2MwYSwgMHhlOTdjNDIwZiwgMHhjOWY4ODQxZSwgMHgwLCAKLSAgMHg4MzA5ODA4NiwgMHg0ODMyMmJlZCwgMHhhYzFlMTE3MCwgMHg0ZTZjNWE3MiwgCi0gIDB4ZmJmZDBlZmYsIDB4NTYwZjg1MzgsIDB4MWUzZGFlZDUsIDB4MjczNjJkMzksIAotICAweDY0MGEwZmQ5LCAweDIxNjg1Y2E2LCAweGQxOWI1YjU0LCAweDNhMjQzNjJlLCAKLSAgMHhiMTBjMGE2NywgMHhmOTM1N2U3LCAweGQyYjRlZTk2LCAweDllMWI5YjkxLCAKLSAgMHg0ZjgwYzBjNSwgMHhhMjYxZGMyMCwgMHg2OTVhNzc0YiwgMHgxNjFjMTIxYSwgCi0gIDB4YWUyOTNiYSwgMHhlNWMwYTAyYSwgMHg0MzNjMjJlMCwgMHgxZDEyMWIxNywgCi0gIDB4YjBlMDkwZCwgMHhhZGYyOGJjNywgMHhiOTJkYjZhOCwgMHhjODE0MWVhOSwgCi0gIDB4ODU1N2YxMTksIDB4NGNhZjc1MDcsIDB4YmJlZTk5ZGQsIDB4ZmRhMzdmNjAsIAotICAweDlmZjcwMTI2LCAweGJjNWM3MmY1LCAweGM1NDQ2NjNiLCAweDM0NWJmYjdlLCAKLSAgMHg3NjhiNDMyOSwgMHhkY2NiMjNjNiwgMHg2OGI2ZWRmYywgMHg2M2I4ZTRmMSwgCi0gIDB4Y2FkNzMxZGMsIDB4MTA0MjYzODUsIDB4NDAxMzk3MjIsIDB4MjA4NGM2MTEsIAotICAweDdkODU0YTI0LCAweGY4ZDJiYjNkLCAweDExYWVmOTMyLCAweDZkYzcyOWExLCAKLSAgMHg0YjFkOWUyZiwgMHhmM2RjYjIzMCwgMHhlYzBkODY1MiwgMHhkMDc3YzFlMywgCi0gIDB4NmMyYmIzMTYsIDB4OTlhOTcwYjksIDB4ZmExMTk0NDgsIDB4MjI0N2U5NjQsIAotICAweGM0YThmYzhjLCAweDFhYTBmMDNmLCAweGQ4NTY3ZDJjLCAweGVmMjIzMzkwLCAKLSAgMHhjNzg3NDk0ZSwgMHhjMWQ5MzhkMSwgMHhmZThjY2FhMiwgMHgzNjk4ZDQwYiwgCi0gIDB4Y2ZhNmY1ODEsIDB4MjhhNTdhZGUsIDB4MjZkYWI3OGUsIDB4YTQzZmFkYmYsIAotICAweGU0MmMzYTlkLCAweGQ1MDc4OTIsIDB4OWI2YTVmY2MsIDB4NjI1NDdlNDYsIAotICAweGMyZjY4ZDEzLCAweGU4OTBkOGI4LCAweDVlMmUzOWY3LCAweGY1ODJjM2FmLCAKLSAgMHhiZTlmNWQ4MCwgMHg3YzY5ZDA5MywgMHhhOTZmZDUyZCwgMHhiM2NmMjUxMiwgCi0gIDB4M2JjOGFjOTksIDB4YTcxMDE4N2QsIDB4NmVlODljNjMsIDB4N2JkYjNiYmIsIAotICAweDljZDI2NzgsIDB4ZjQ2ZTU5MTgsIDB4MWVjOWFiNywgMHhhODgzNGY5YSwgCi0gIDB4NjVlNjk1NmUsIDB4N2VhYWZmZTYsIDB4ODIxYmNjZiwgMHhlNmVmMTVlOCwgCi0gIDB4ZDliYWU3OWIsIDB4Y2U0YTZmMzYsIDB4ZDRlYTlmMDksIDB4ZDYyOWIwN2MsIAotICAweGFmMzFhNGIyLCAweDMxMmEzZjIzLCAweDMwYzZhNTk0LCAweGMwMzVhMjY2LCAKLSAgMHgzNzc0NGViYywgMHhhNmZjODJjYSwgMHhiMGUwOTBkMCwgMHgxNTMzYTdkOCwgCi0gIDB4NGFmMTA0OTgsIDB4Zjc0MWVjZGEsIDB4ZTdmY2Q1MCwgMHgyZjE3OTFmNiwgCi0gIDB4OGQ3NjRkZDYsIDB4NGQ0M2VmYjAsIDB4NTRjY2FhNGQsIDB4ZGZlNDk2MDQsIAotICAweGUzOWVkMWI1LCAweDFiNGM2YTg4LCAweGI4YzEyYzFmLCAweDdmNDY2NTUxLCAKLSAgMHg0OWQ1ZWVhLCAweDVkMDE4YzM1LCAweDczZmE4Nzc0LCAweDJlZmIwYjQxLCAKLSAgMHg1YWIzNjcxZCwgMHg1MjkyZGJkMiwgMHgzM2U5MTA1NiwgMHgxMzZkZDY0NywgCi0gIDB4OGM5YWQ3NjEsIDB4N2EzN2ExMGMsIDB4OGU1OWY4MTQsIDB4ODllYjEzM2MsIAotICAweGVlY2VhOTI3LCAweDM1Yjc2MWM5LCAweGVkZTExY2U1LCAweDNjN2E0N2IxLCAKLSAgMHg1OTljZDJkZiwgMHgzZjU1ZjI3MywgMHg3OTE4MTRjZSwgMHhiZjczYzczNywgCi0gIDB4ZWE1M2Y3Y2QsIDB4NWI1ZmZkYWEsIDB4MTRkZjNkNmYsIDB4ODY3ODQ0ZGIsIAotICAweDgxY2FhZmYzLCAweDNlYjk2OGM0LCAweDJjMzgyNDM0LCAweDVmYzJhMzQwLCAKLSAgMHg3MjE2MWRjMywgMHhjYmNlMjI1LCAweDhiMjgzYzQ5LCAweDQxZmYwZDk1LCAKLSAgMHg3MTM5YTgwMSwgMHhkZTA4MGNiMywgMHg5Y2Q4YjRlNCwgMHg5MDY0NTZjMSwgCi0gIDB4NjE3YmNiODQsIDB4NzBkNTMyYjYsIDB4NzQ0ODZjNWMsIDB4NDJkMGI4NTcKKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KK3N0YXRpYyBjb25zdCB1aW50MzJfdCBVMVsyNTZdID0geworICAgIDB4NTA1MWY0YTcsIDB4NTM3ZTQxNjUsICAweGMzMWExN2E0LCAgMHg5NjNhMjc1ZSwKKyAgICAweGNiM2JhYjZiLCAweGYxMWY5ZDQ1LCAgMHhhYmFjZmE1OCwgIDB4OTM0YmUzMDMsCisgICAgMHg1NTIwMzBmYSwgMHhmNmFkNzY2ZCwgIDB4OTE4OGNjNzYsICAweDI1ZjUwMjRjLAorICAgIDB4ZmM0ZmU1ZDcsIDB4ZDdjNTJhY2IsICAweDgwMjYzNTQ0LCAgMHg4ZmI1NjJhMywKKyAgICAweDQ5ZGViMTVhLCAweDY3MjViYTFiLCAgMHg5ODQ1ZWEwZSwgIDB4ZTE1ZGZlYzAsCisgICAgMHgyYzMyZjc1LCAgMHgxMjgxNGNmMCwgIDB4YTM4ZDQ2OTcsICAweGM2NmJkM2Y5LAorICAgIDB4ZTcwMzhmNWYsIDB4OTUxNTkyOWMsICAweGViYmY2ZDdhLCAgMHhkYTk1NTI1OSwKKyAgICAweDJkZDRiZTgzLCAweGQzNTg3NDIxLCAgMHgyOTQ5ZTA2OSwgIDB4NDQ4ZWM5YzgsCisgICAgMHg2YTc1YzI4OSwgMHg3OGY0OGU3OSwgIDB4NmI5OTU4M2UsICAweGRkMjdiOTcxLAorICAgIDB4YjZiZWUxNGYsIDB4MTdmMDg4YWQsICAweDY2YzkyMGFjLCAgMHhiNDdkY2UzYSwKKyAgICAweDE4NjNkZjRhLCAweDgyZTUxYTMxLCAgMHg2MDk3NTEzMywgIDB4NDU2MjUzN2YsCisgICAgMHhlMGIxNjQ3NywgMHg4NGJiNmJhZSwgIDB4MWNmZTgxYTAsICAweDk0ZjkwODJiLAorICAgIDB4NTg3MDQ4NjgsIDB4MTk4ZjQ1ZmQsICAweDg3OTRkZTZjLCAgMHhiNzUyN2JmOCwKKyAgICAweDIzYWI3M2QzLCAweGUyNzI0YjAyLCAgMHg1N2UzMWY4ZiwgIDB4MmE2NjU1YWIsCisgICAgMHg3YjJlYjI4LCAgMHgzMmZiNWMyLCAgIDB4OWE4NmM1N2IsICAweGE1ZDMzNzA4LAorICAgIDB4ZjIzMDI4ODcsIDB4YjIyM2JmYTUsICAweGJhMDIwMzZhLCAgMHg1Y2VkMTY4MiwKKyAgICAweDJiOGFjZjFjLCAweDkyYTc3OWI0LCAgMHhmMGYzMDdmMiwgIDB4YTE0ZTY5ZTIsCisgICAgMHhjZDY1ZGFmNCwgMHhkNTA2MDViZSwgIDB4MWZkMTM0NjIsICAweDhhYzRhNmZlLAorICAgIDB4OWQzNDJlNTMsIDB4YTBhMmYzNTUsICAweDMyMDU4YWUxLCAgMHg3NWE0ZjZlYiwKKyAgICAweDM5MGI4M2VjLCAweGFhNDA2MGVmLCAgMHg2NWU3MTlmLCAgIDB4NTFiZDZlMTAsCisgICAgMHhmOTNlMjE4YSwgMHgzZDk2ZGQwNiwgIDB4YWVkZDNlMDUsICAweDQ2NGRlNmJkLAorICAgIDB4YjU5MTU0OGQsIDB4NTcxYzQ1ZCwgICAweDZmMDQwNmQ0LCAgMHhmZjYwNTAxNSwKKyAgICAweDI0MTk5OGZiLCAweDk3ZDZiZGU5LCAgMHhjYzg5NDA0MywgIDB4Nzc2N2Q5OWUsCisgICAgMHhiZGIwZTg0MiwgMHg4ODA3ODk4YiwgIDB4MzhlNzE5NWIsICAweGRiNzljOGVlLAorICAgIDB4NDdhMTdjMGEsIDB4ZTk3YzQyMGYsICAweGM5Zjg4NDFlLCAgMHgwLAorICAgIDB4ODMwOTgwODYsIDB4NDgzMjJiZWQsICAweGFjMWUxMTcwLCAgMHg0ZTZjNWE3MiwKKyAgICAweGZiZmQwZWZmLCAweDU2MGY4NTM4LCAgMHgxZTNkYWVkNSwgIDB4MjczNjJkMzksCisgICAgMHg2NDBhMGZkOSwgMHgyMTY4NWNhNiwgIDB4ZDE5YjViNTQsICAweDNhMjQzNjJlLAorICAgIDB4YjEwYzBhNjcsIDB4ZjkzNTdlNywgICAweGQyYjRlZTk2LCAgMHg5ZTFiOWI5MSwKKyAgICAweDRmODBjMGM1LCAweGEyNjFkYzIwLCAgMHg2OTVhNzc0YiwgIDB4MTYxYzEyMWEsCisgICAgMHhhZTI5M2JhLCAgMHhlNWMwYTAyYSwgIDB4NDMzYzIyZTAsICAweDFkMTIxYjE3LAorICAgIDB4YjBlMDkwZCwgIDB4YWRmMjhiYzcsICAweGI5MmRiNmE4LCAgMHhjODE0MWVhOSwKKyAgICAweDg1NTdmMTE5LCAweDRjYWY3NTA3LCAgMHhiYmVlOTlkZCwgIDB4ZmRhMzdmNjAsCisgICAgMHg5ZmY3MDEyNiwgMHhiYzVjNzJmNSwgIDB4YzU0NDY2M2IsICAweDM0NWJmYjdlLAorICAgIDB4NzY4YjQzMjksIDB4ZGNjYjIzYzYsICAweDY4YjZlZGZjLCAgMHg2M2I4ZTRmMSwKKyAgICAweGNhZDczMWRjLCAweDEwNDI2Mzg1LCAgMHg0MDEzOTcyMiwgIDB4MjA4NGM2MTEsCisgICAgMHg3ZDg1NGEyNCwgMHhmOGQyYmIzZCwgIDB4MTFhZWY5MzIsICAweDZkYzcyOWExLAorICAgIDB4NGIxZDllMmYsIDB4ZjNkY2IyMzAsICAweGVjMGQ4NjUyLCAgMHhkMDc3YzFlMywKKyAgICAweDZjMmJiMzE2LCAweDk5YTk3MGI5LCAgMHhmYTExOTQ0OCwgIDB4MjI0N2U5NjQsCisgICAgMHhjNGE4ZmM4YywgMHgxYWEwZjAzZiwgIDB4ZDg1NjdkMmMsICAweGVmMjIzMzkwLAorICAgIDB4Yzc4NzQ5NGUsIDB4YzFkOTM4ZDEsICAweGZlOGNjYWEyLCAgMHgzNjk4ZDQwYiwKKyAgICAweGNmYTZmNTgxLCAweDI4YTU3YWRlLCAgMHgyNmRhYjc4ZSwgIDB4YTQzZmFkYmYsCisgICAgMHhlNDJjM2E5ZCwgMHhkNTA3ODkyLCAgIDB4OWI2YTVmY2MsICAweDYyNTQ3ZTQ2LAorICAgIDB4YzJmNjhkMTMsIDB4ZTg5MGQ4YjgsICAweDVlMmUzOWY3LCAgMHhmNTgyYzNhZiwKKyAgICAweGJlOWY1ZDgwLCAweDdjNjlkMDkzLCAgMHhhOTZmZDUyZCwgIDB4YjNjZjI1MTIsCisgICAgMHgzYmM4YWM5OSwgMHhhNzEwMTg3ZCwgIDB4NmVlODljNjMsICAweDdiZGIzYmJiLAorICAgIDB4OWNkMjY3OCwgIDB4ZjQ2ZTU5MTgsICAweDFlYzlhYjcsICAgMHhhODgzNGY5YSwKKyAgICAweDY1ZTY5NTZlLCAweDdlYWFmZmU2LCAgMHg4MjFiY2NmLCAgIDB4ZTZlZjE1ZTgsCisgICAgMHhkOWJhZTc5YiwgMHhjZTRhNmYzNiwgIDB4ZDRlYTlmMDksICAweGQ2MjliMDdjLAorICAgIDB4YWYzMWE0YjIsIDB4MzEyYTNmMjMsICAweDMwYzZhNTk0LCAgMHhjMDM1YTI2NiwKKyAgICAweDM3NzQ0ZWJjLCAweGE2ZmM4MmNhLCAgMHhiMGUwOTBkMCwgIDB4MTUzM2E3ZDgsCisgICAgMHg0YWYxMDQ5OCwgMHhmNzQxZWNkYSwgIDB4ZTdmY2Q1MCwgICAweDJmMTc5MWY2LAorICAgIDB4OGQ3NjRkZDYsIDB4NGQ0M2VmYjAsICAweDU0Y2NhYTRkLCAgMHhkZmU0OTYwNCwKKyAgICAweGUzOWVkMWI1LCAweDFiNGM2YTg4LCAgMHhiOGMxMmMxZiwgIDB4N2Y0NjY1NTEsCisgICAgMHg0OWQ1ZWVhLCAgMHg1ZDAxOGMzNSwgIDB4NzNmYTg3NzQsICAweDJlZmIwYjQxLAorICAgIDB4NWFiMzY3MWQsIDB4NTI5MmRiZDIsICAweDMzZTkxMDU2LCAgMHgxMzZkZDY0NywKKyAgICAweDhjOWFkNzYxLCAweDdhMzdhMTBjLCAgMHg4ZTU5ZjgxNCwgIDB4ODllYjEzM2MsCisgICAgMHhlZWNlYTkyNywgMHgzNWI3NjFjOSwgIDB4ZWRlMTFjZTUsICAweDNjN2E0N2IxLAorICAgIDB4NTk5Y2QyZGYsIDB4M2Y1NWYyNzMsICAweDc5MTgxNGNlLCAgMHhiZjczYzczNywKKyAgICAweGVhNTNmN2NkLCAweDViNWZmZGFhLCAgMHgxNGRmM2Q2ZiwgIDB4ODY3ODQ0ZGIsCisgICAgMHg4MWNhYWZmMywgMHgzZWI5NjhjNCwgIDB4MmMzODI0MzQsICAweDVmYzJhMzQwLAorICAgIDB4NzIxNjFkYzMsIDB4Y2JjZTIyNSwgICAweDhiMjgzYzQ5LCAgMHg0MWZmMGQ5NSwKKyAgICAweDcxMzlhODAxLCAweGRlMDgwY2IzLCAgMHg5Y2Q4YjRlNCwgIDB4OTA2NDU2YzEsCisgICAgMHg2MTdiY2I4NCwgMHg3MGQ1MzJiNiwgIDB4NzQ0ODZjNWMsICAweDQyZDBiODU3CiB9OworLyogY2xhbmctZm9ybWF0IG9uICovCiAKLXVpbnQzMl90IFUyWzI1Nl0gPSB7Ci0gIDB4YTc1MDUxZjQsIDB4NjU1MzdlNDEsIDB4YTRjMzFhMTcsIDB4NWU5NjNhMjcsIAotICAweDZiY2IzYmFiLCAweDQ1ZjExZjlkLCAweDU4YWJhY2ZhLCAweDM5MzRiZTMsIAotICAweGZhNTUyMDMwLCAweDZkZjZhZDc2LCAweDc2OTE4OGNjLCAweDRjMjVmNTAyLCAKLSAgMHhkN2ZjNGZlNSwgMHhjYmQ3YzUyYSwgMHg0NDgwMjYzNSwgMHhhMzhmYjU2MiwgCi0gIDB4NWE0OWRlYjEsIDB4MWI2NzI1YmEsIDB4ZTk4NDVlYSwgMHhjMGUxNWRmZSwgCi0gIDB4NzUwMmMzMmYsIDB4ZjAxMjgxNGMsIDB4OTdhMzhkNDYsIDB4ZjljNjZiZDMsIAotICAweDVmZTcwMzhmLCAweDljOTUxNTkyLCAweDdhZWJiZjZkLCAweDU5ZGE5NTUyLCAKLSAgMHg4MzJkZDRiZSwgMHgyMWQzNTg3NCwgMHg2OTI5NDllMCwgMHhjODQ0OGVjOSwgCi0gIDB4ODk2YTc1YzIsIDB4Nzk3OGY0OGUsIDB4M2U2Yjk5NTgsIDB4NzFkZDI3YjksIAotICAweDRmYjZiZWUxLCAweGFkMTdmMDg4LCAweGFjNjZjOTIwLCAweDNhYjQ3ZGNlLCAKLSAgMHg0YTE4NjNkZiwgMHgzMTgyZTUxYSwgMHgzMzYwOTc1MSwgMHg3ZjQ1NjI1MywgCi0gIDB4NzdlMGIxNjQsIDB4YWU4NGJiNmIsIDB4YTAxY2ZlODEsIDB4MmI5NGY5MDgsIAotICAweDY4NTg3MDQ4LCAweGZkMTk4ZjQ1LCAweDZjODc5NGRlLCAweGY4Yjc1MjdiLCAKLSAgMHhkMzIzYWI3MywgMHgyZTI3MjRiLCAweDhmNTdlMzFmLCAweGFiMmE2NjU1LCAKLSAgMHgyODA3YjJlYiwgMHhjMjAzMmZiNSwgMHg3YjlhODZjNSwgMHg4YTVkMzM3LCAKLSAgMHg4N2YyMzAyOCwgMHhhNWIyMjNiZiwgMHg2YWJhMDIwMywgMHg4MjVjZWQxNiwgCi0gIDB4MWMyYjhhY2YsIDB4YjQ5MmE3NzksIDB4ZjJmMGYzMDcsIDB4ZTJhMTRlNjksIAotICAweGY0Y2Q2NWRhLCAweGJlZDUwNjA1LCAweDYyMWZkMTM0LCAweGZlOGFjNGE2LCAKLSAgMHg1MzlkMzQyZSwgMHg1NWEwYTJmMywgMHhlMTMyMDU4YSwgMHhlYjc1YTRmNiwgCi0gIDB4ZWMzOTBiODMsIDB4ZWZhYTQwNjAsIDB4OWYwNjVlNzEsIDB4MTA1MWJkNmUsIAotICAweDhhZjkzZTIxLCAweDYzZDk2ZGQsIDB4NWFlZGQzZSwgMHhiZDQ2NGRlNiwgCi0gIDB4OGRiNTkxNTQsIDB4NWQwNTcxYzQsIDB4ZDQ2ZjA0MDYsIDB4MTVmZjYwNTAsIAotICAweGZiMjQxOTk4LCAweGU5OTdkNmJkLCAweDQzY2M4OTQwLCAweDllNzc2N2Q5LCAKLSAgMHg0MmJkYjBlOCwgMHg4Yjg4MDc4OSwgMHg1YjM4ZTcxOSwgMHhlZWRiNzljOCwgCi0gIDB4YTQ3YTE3YywgMHhmZTk3YzQyLCAweDFlYzlmODg0LCAweDAsIAotICAweDg2ODMwOTgwLCAweGVkNDgzMjJiLCAweDcwYWMxZTExLCAweDcyNGU2YzVhLCAKLSAgMHhmZmZiZmQwZSwgMHgzODU2MGY4NSwgMHhkNTFlM2RhZSwgMHgzOTI3MzYyZCwgCi0gIDB4ZDk2NDBhMGYsIDB4YTYyMTY4NWMsIDB4NTRkMTliNWIsIDB4MmUzYTI0MzYsIAotICAweDY3YjEwYzBhLCAweGU3MGY5MzU3LCAweDk2ZDJiNGVlLCAweDkxOWUxYjliLCAKLSAgMHhjNTRmODBjMCwgMHgyMGEyNjFkYywgMHg0YjY5NWE3NywgMHgxYTE2MWMxMiwgCi0gIDB4YmEwYWUyOTMsIDB4MmFlNWMwYTAsIDB4ZTA0MzNjMjIsIDB4MTcxZDEyMWIsIAotICAweGQwYjBlMDksIDB4YzdhZGYyOGIsIDB4YThiOTJkYjYsIDB4YTljODE0MWUsIAotICAweDE5ODU1N2YxLCAweDc0Y2FmNzUsIDB4ZGRiYmVlOTksIDB4NjBmZGEzN2YsIAotICAweDI2OWZmNzAxLCAweGY1YmM1YzcyLCAweDNiYzU0NDY2LCAweDdlMzQ1YmZiLCAKLSAgMHgyOTc2OGI0MywgMHhjNmRjY2IyMywgMHhmYzY4YjZlZCwgMHhmMTYzYjhlNCwgCi0gIDB4ZGNjYWQ3MzEsIDB4ODUxMDQyNjMsIDB4MjI0MDEzOTcsIDB4MTEyMDg0YzYsIAotICAweDI0N2Q4NTRhLCAweDNkZjhkMmJiLCAweDMyMTFhZWY5LCAweGExNmRjNzI5LCAKLSAgMHgyZjRiMWQ5ZSwgMHgzMGYzZGNiMiwgMHg1MmVjMGQ4NiwgMHhlM2QwNzdjMSwgCi0gIDB4MTY2YzJiYjMsIDB4Yjk5OWE5NzAsIDB4NDhmYTExOTQsIDB4NjQyMjQ3ZTksIAotICAweDhjYzRhOGZjLCAweDNmMWFhMGYwLCAweDJjZDg1NjdkLCAweDkwZWYyMjMzLCAKLSAgMHg0ZWM3ODc0OSwgMHhkMWMxZDkzOCwgMHhhMmZlOGNjYSwgMHhiMzY5OGQ0LCAKLSAgMHg4MWNmYTZmNSwgMHhkZTI4YTU3YSwgMHg4ZTI2ZGFiNywgMHhiZmE0M2ZhZCwgCi0gIDB4OWRlNDJjM2EsIDB4OTIwZDUwNzgsIDB4Y2M5YjZhNWYsIDB4NDY2MjU0N2UsIAotICAweDEzYzJmNjhkLCAweGI4ZTg5MGQ4LCAweGY3NWUyZTM5LCAweGFmZjU4MmMzLCAKLSAgMHg4MGJlOWY1ZCwgMHg5MzdjNjlkMCwgMHgyZGE5NmZkNSwgMHgxMmIzY2YyNSwgCi0gIDB4OTkzYmM4YWMsIDB4N2RhNzEwMTgsIDB4NjM2ZWU4OWMsIDB4YmI3YmRiM2IsIAotICAweDc4MDljZDI2LCAweDE4ZjQ2ZTU5LCAweGI3MDFlYzlhLCAweDlhYTg4MzRmLCAKLSAgMHg2ZTY1ZTY5NSwgMHhlNjdlYWFmZiwgMHhjZjA4MjFiYywgMHhlOGU2ZWYxNSwgCi0gIDB4OWJkOWJhZTcsIDB4MzZjZTRhNmYsIDB4OWQ0ZWE5ZiwgMHg3Y2Q2MjliMCwgCi0gIDB4YjJhZjMxYTQsIDB4MjMzMTJhM2YsIDB4OTQzMGM2YTUsIDB4NjZjMDM1YTIsIAotICAweGJjMzc3NDRlLCAweGNhYTZmYzgyLCAweGQwYjBlMDkwLCAweGQ4MTUzM2E3LCAKLSAgMHg5ODRhZjEwNCwgMHhkYWY3NDFlYywgMHg1MDBlN2ZjZCwgMHhmNjJmMTc5MSwgCi0gIDB4ZDY4ZDc2NGQsIDB4YjA0ZDQzZWYsIDB4NGQ1NGNjYWEsIDB4NGRmZTQ5NiwgCi0gIDB4YjVlMzllZDEsIDB4ODgxYjRjNmEsIDB4MWZiOGMxMmMsIDB4NTE3ZjQ2NjUsIAotICAweGVhMDQ5ZDVlLCAweDM1NWQwMThjLCAweDc0NzNmYTg3LCAweDQxMmVmYjBiLCAKLSAgMHgxZDVhYjM2NywgMHhkMjUyOTJkYiwgMHg1NjMzZTkxMCwgMHg0NzEzNmRkNiwgCi0gIDB4NjE4YzlhZDcsIDB4YzdhMzdhMSwgMHgxNDhlNTlmOCwgMHgzYzg5ZWIxMywgCi0gIDB4MjdlZWNlYTksIDB4YzkzNWI3NjEsIDB4ZTVlZGUxMWMsIDB4YjEzYzdhNDcsIAotICAweGRmNTk5Y2QyLCAweDczM2Y1NWYyLCAweGNlNzkxODE0LCAweDM3YmY3M2M3LCAKLSAgMHhjZGVhNTNmNywgMHhhYTViNWZmZCwgMHg2ZjE0ZGYzZCwgMHhkYjg2Nzg0NCwgCi0gIDB4ZjM4MWNhYWYsIDB4YzQzZWI5NjgsIDB4MzQyYzM4MjQsIDB4NDA1ZmMyYTMsIAotICAweGMzNzIxNjFkLCAweDI1MGNiY2UyLCAweDQ5OGIyODNjLCAweDk1NDFmZjBkLCAKLSAgMHgxNzEzOWE4LCAweGIzZGUwODBjLCAweGU0OWNkOGI0LCAweGMxOTA2NDU2LCAKLSAgMHg4NDYxN2JjYiwgMHhiNjcwZDUzMiwgMHg1Yzc0NDg2YywgMHg1NzQyZDBiOCAKKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KK3N0YXRpYyBjb25zdCB1aW50MzJfdCBVMlsyNTZdID0geworICAgIDB4YTc1MDUxZjQsIDB4NjU1MzdlNDEsICAweGE0YzMxYTE3LCAgMHg1ZTk2M2EyNywKKyAgICAweDZiY2IzYmFiLCAweDQ1ZjExZjlkLCAgMHg1OGFiYWNmYSwgIDB4MzkzNGJlMywKKyAgICAweGZhNTUyMDMwLCAweDZkZjZhZDc2LCAgMHg3NjkxODhjYywgIDB4NGMyNWY1MDIsCisgICAgMHhkN2ZjNGZlNSwgMHhjYmQ3YzUyYSwgIDB4NDQ4MDI2MzUsICAweGEzOGZiNTYyLAorICAgIDB4NWE0OWRlYjEsIDB4MWI2NzI1YmEsICAweGU5ODQ1ZWEsICAgMHhjMGUxNWRmZSwKKyAgICAweDc1MDJjMzJmLCAweGYwMTI4MTRjLCAgMHg5N2EzOGQ0NiwgIDB4ZjljNjZiZDMsCisgICAgMHg1ZmU3MDM4ZiwgMHg5Yzk1MTU5MiwgIDB4N2FlYmJmNmQsICAweDU5ZGE5NTUyLAorICAgIDB4ODMyZGQ0YmUsIDB4MjFkMzU4NzQsICAweDY5Mjk0OWUwLCAgMHhjODQ0OGVjOSwKKyAgICAweDg5NmE3NWMyLCAweDc5NzhmNDhlLCAgMHgzZTZiOTk1OCwgIDB4NzFkZDI3YjksCisgICAgMHg0ZmI2YmVlMSwgMHhhZDE3ZjA4OCwgIDB4YWM2NmM5MjAsICAweDNhYjQ3ZGNlLAorICAgIDB4NGExODYzZGYsIDB4MzE4MmU1MWEsICAweDMzNjA5NzUxLCAgMHg3ZjQ1NjI1MywKKyAgICAweDc3ZTBiMTY0LCAweGFlODRiYjZiLCAgMHhhMDFjZmU4MSwgIDB4MmI5NGY5MDgsCisgICAgMHg2ODU4NzA0OCwgMHhmZDE5OGY0NSwgIDB4NmM4Nzk0ZGUsICAweGY4Yjc1MjdiLAorICAgIDB4ZDMyM2FiNzMsIDB4MmUyNzI0YiwgICAweDhmNTdlMzFmLCAgMHhhYjJhNjY1NSwKKyAgICAweDI4MDdiMmViLCAweGMyMDMyZmI1LCAgMHg3YjlhODZjNSwgIDB4OGE1ZDMzNywKKyAgICAweDg3ZjIzMDI4LCAweGE1YjIyM2JmLCAgMHg2YWJhMDIwMywgIDB4ODI1Y2VkMTYsCisgICAgMHgxYzJiOGFjZiwgMHhiNDkyYTc3OSwgIDB4ZjJmMGYzMDcsICAweGUyYTE0ZTY5LAorICAgIDB4ZjRjZDY1ZGEsIDB4YmVkNTA2MDUsICAweDYyMWZkMTM0LCAgMHhmZThhYzRhNiwKKyAgICAweDUzOWQzNDJlLCAweDU1YTBhMmYzLCAgMHhlMTMyMDU4YSwgIDB4ZWI3NWE0ZjYsCisgICAgMHhlYzM5MGI4MywgMHhlZmFhNDA2MCwgIDB4OWYwNjVlNzEsICAweDEwNTFiZDZlLAorICAgIDB4OGFmOTNlMjEsIDB4NjNkOTZkZCwgICAweDVhZWRkM2UsICAgMHhiZDQ2NGRlNiwKKyAgICAweDhkYjU5MTU0LCAweDVkMDU3MWM0LCAgMHhkNDZmMDQwNiwgIDB4MTVmZjYwNTAsCisgICAgMHhmYjI0MTk5OCwgMHhlOTk3ZDZiZCwgIDB4NDNjYzg5NDAsICAweDllNzc2N2Q5LAorICAgIDB4NDJiZGIwZTgsIDB4OGI4ODA3ODksICAweDViMzhlNzE5LCAgMHhlZWRiNzljOCwKKyAgICAweGE0N2ExN2MsICAweGZlOTdjNDIsICAgMHgxZWM5Zjg4NCwgIDB4MCwKKyAgICAweDg2ODMwOTgwLCAweGVkNDgzMjJiLCAgMHg3MGFjMWUxMSwgIDB4NzI0ZTZjNWEsCisgICAgMHhmZmZiZmQwZSwgMHgzODU2MGY4NSwgIDB4ZDUxZTNkYWUsICAweDM5MjczNjJkLAorICAgIDB4ZDk2NDBhMGYsIDB4YTYyMTY4NWMsICAweDU0ZDE5YjViLCAgMHgyZTNhMjQzNiwKKyAgICAweDY3YjEwYzBhLCAweGU3MGY5MzU3LCAgMHg5NmQyYjRlZSwgIDB4OTE5ZTFiOWIsCisgICAgMHhjNTRmODBjMCwgMHgyMGEyNjFkYywgIDB4NGI2OTVhNzcsICAweDFhMTYxYzEyLAorICAgIDB4YmEwYWUyOTMsIDB4MmFlNWMwYTAsICAweGUwNDMzYzIyLCAgMHgxNzFkMTIxYiwKKyAgICAweGQwYjBlMDksICAweGM3YWRmMjhiLCAgMHhhOGI5MmRiNiwgIDB4YTljODE0MWUsCisgICAgMHgxOTg1NTdmMSwgMHg3NGNhZjc1LCAgIDB4ZGRiYmVlOTksICAweDYwZmRhMzdmLAorICAgIDB4MjY5ZmY3MDEsIDB4ZjViYzVjNzIsICAweDNiYzU0NDY2LCAgMHg3ZTM0NWJmYiwKKyAgICAweDI5NzY4YjQzLCAweGM2ZGNjYjIzLCAgMHhmYzY4YjZlZCwgIDB4ZjE2M2I4ZTQsCisgICAgMHhkY2NhZDczMSwgMHg4NTEwNDI2MywgIDB4MjI0MDEzOTcsICAweDExMjA4NGM2LAorICAgIDB4MjQ3ZDg1NGEsIDB4M2RmOGQyYmIsICAweDMyMTFhZWY5LCAgMHhhMTZkYzcyOSwKKyAgICAweDJmNGIxZDllLCAweDMwZjNkY2IyLCAgMHg1MmVjMGQ4NiwgIDB4ZTNkMDc3YzEsCisgICAgMHgxNjZjMmJiMywgMHhiOTk5YTk3MCwgIDB4NDhmYTExOTQsICAweDY0MjI0N2U5LAorICAgIDB4OGNjNGE4ZmMsIDB4M2YxYWEwZjAsICAweDJjZDg1NjdkLCAgMHg5MGVmMjIzMywKKyAgICAweDRlYzc4NzQ5LCAweGQxYzFkOTM4LCAgMHhhMmZlOGNjYSwgIDB4YjM2OThkNCwKKyAgICAweDgxY2ZhNmY1LCAweGRlMjhhNTdhLCAgMHg4ZTI2ZGFiNywgIDB4YmZhNDNmYWQsCisgICAgMHg5ZGU0MmMzYSwgMHg5MjBkNTA3OCwgIDB4Y2M5YjZhNWYsICAweDQ2NjI1NDdlLAorICAgIDB4MTNjMmY2OGQsIDB4YjhlODkwZDgsICAweGY3NWUyZTM5LCAgMHhhZmY1ODJjMywKKyAgICAweDgwYmU5ZjVkLCAweDkzN2M2OWQwLCAgMHgyZGE5NmZkNSwgIDB4MTJiM2NmMjUsCisgICAgMHg5OTNiYzhhYywgMHg3ZGE3MTAxOCwgIDB4NjM2ZWU4OWMsICAweGJiN2JkYjNiLAorICAgIDB4NzgwOWNkMjYsIDB4MThmNDZlNTksICAweGI3MDFlYzlhLCAgMHg5YWE4ODM0ZiwKKyAgICAweDZlNjVlNjk1LCAweGU2N2VhYWZmLCAgMHhjZjA4MjFiYywgIDB4ZThlNmVmMTUsCisgICAgMHg5YmQ5YmFlNywgMHgzNmNlNGE2ZiwgIDB4OWQ0ZWE5ZiwgICAweDdjZDYyOWIwLAorICAgIDB4YjJhZjMxYTQsIDB4MjMzMTJhM2YsICAweDk0MzBjNmE1LCAgMHg2NmMwMzVhMiwKKyAgICAweGJjMzc3NDRlLCAweGNhYTZmYzgyLCAgMHhkMGIwZTA5MCwgIDB4ZDgxNTMzYTcsCisgICAgMHg5ODRhZjEwNCwgMHhkYWY3NDFlYywgIDB4NTAwZTdmY2QsICAweGY2MmYxNzkxLAorICAgIDB4ZDY4ZDc2NGQsIDB4YjA0ZDQzZWYsICAweDRkNTRjY2FhLCAgMHg0ZGZlNDk2LAorICAgIDB4YjVlMzllZDEsIDB4ODgxYjRjNmEsICAweDFmYjhjMTJjLCAgMHg1MTdmNDY2NSwKKyAgICAweGVhMDQ5ZDVlLCAweDM1NWQwMThjLCAgMHg3NDczZmE4NywgIDB4NDEyZWZiMGIsCisgICAgMHgxZDVhYjM2NywgMHhkMjUyOTJkYiwgIDB4NTYzM2U5MTAsICAweDQ3MTM2ZGQ2LAorICAgIDB4NjE4YzlhZDcsIDB4YzdhMzdhMSwgICAweDE0OGU1OWY4LCAgMHgzYzg5ZWIxMywKKyAgICAweDI3ZWVjZWE5LCAweGM5MzViNzYxLCAgMHhlNWVkZTExYywgIDB4YjEzYzdhNDcsCisgICAgMHhkZjU5OWNkMiwgMHg3MzNmNTVmMiwgIDB4Y2U3OTE4MTQsICAweDM3YmY3M2M3LAorICAgIDB4Y2RlYTUzZjcsIDB4YWE1YjVmZmQsICAweDZmMTRkZjNkLCAgMHhkYjg2Nzg0NCwKKyAgICAweGYzODFjYWFmLCAweGM0M2ViOTY4LCAgMHgzNDJjMzgyNCwgIDB4NDA1ZmMyYTMsCisgICAgMHhjMzcyMTYxZCwgMHgyNTBjYmNlMiwgIDB4NDk4YjI4M2MsICAweDk1NDFmZjBkLAorICAgIDB4MTcxMzlhOCwgIDB4YjNkZTA4MGMsICAweGU0OWNkOGI0LCAgMHhjMTkwNjQ1NiwKKyAgICAweDg0NjE3YmNiLCAweGI2NzBkNTMyLCAgMHg1Yzc0NDg2YywgIDB4NTc0MmQwYjgKIH07CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KIAotdWludDMyX3QgVTNbMjU2XSA9IHsKLSAgMHhmNGE3NTA1MSwgMHg0MTY1NTM3ZSwgMHgxN2E0YzMxYSwgMHgyNzVlOTYzYSwgCi0gIDB4YWI2YmNiM2IsIDB4OWQ0NWYxMWYsIDB4ZmE1OGFiYWMsIDB4ZTMwMzkzNGIsIAotICAweDMwZmE1NTIwLCAweDc2NmRmNmFkLCAweGNjNzY5MTg4LCAweDI0YzI1ZjUsIAotICAweGU1ZDdmYzRmLCAweDJhY2JkN2M1LCAweDM1NDQ4MDI2LCAweDYyYTM4ZmI1LCAKLSAgMHhiMTVhNDlkZSwgMHhiYTFiNjcyNSwgMHhlYTBlOTg0NSwgMHhmZWMwZTE1ZCwgCi0gIDB4MmY3NTAyYzMsIDB4NGNmMDEyODEsIDB4NDY5N2EzOGQsIDB4ZDNmOWM2NmIsIAotICAweDhmNWZlNzAzLCAweDkyOWM5NTE1LCAweDZkN2FlYmJmLCAweDUyNTlkYTk1LCAKLSAgMHhiZTgzMmRkNCwgMHg3NDIxZDM1OCwgMHhlMDY5Mjk0OSwgMHhjOWM4NDQ4ZSwgCi0gIDB4YzI4OTZhNzUsIDB4OGU3OTc4ZjQsIDB4NTgzZTZiOTksIDB4Yjk3MWRkMjcsIAotICAweGUxNGZiNmJlLCAweDg4YWQxN2YwLCAweDIwYWM2NmM5LCAweGNlM2FiNDdkLCAKLSAgMHhkZjRhMTg2MywgMHgxYTMxODJlNSwgMHg1MTMzNjA5NywgMHg1MzdmNDU2MiwgCi0gIDB4NjQ3N2UwYjEsIDB4NmJhZTg0YmIsIDB4ODFhMDFjZmUsIDB4ODJiOTRmOSwgCi0gIDB4NDg2ODU4NzAsIDB4NDVmZDE5OGYsIDB4ZGU2Yzg3OTQsIDB4N2JmOGI3NTIsIAotICAweDczZDMyM2FiLCAweDRiMDJlMjcyLCAweDFmOGY1N2UzLCAweDU1YWIyYTY2LCAKLSAgMHhlYjI4MDdiMiwgMHhiNWMyMDMyZiwgMHhjNTdiOWE4NiwgMHgzNzA4YTVkMywgCi0gIDB4Mjg4N2YyMzAsIDB4YmZhNWIyMjMsIDB4MzZhYmEwMiwgMHgxNjgyNWNlZCwgCi0gIDB4Y2YxYzJiOGEsIDB4NzliNDkyYTcsIDB4N2YyZjBmMywgMHg2OWUyYTE0ZSwgCi0gIDB4ZGFmNGNkNjUsIDB4NWJlZDUwNiwgMHgzNDYyMWZkMSwgMHhhNmZlOGFjNCwgCi0gIDB4MmU1MzlkMzQsIDB4ZjM1NWEwYTIsIDB4OGFlMTMyMDUsIDB4ZjZlYjc1YTQsIAotICAweDgzZWMzOTBiLCAweDYwZWZhYTQwLCAweDcxOWYwNjVlLCAweDZlMTA1MWJkLCAKLSAgMHgyMThhZjkzZSwgMHhkZDA2M2Q5NiwgMHgzZTA1YWVkZCwgMHhlNmJkNDY0ZCwgCi0gIDB4NTQ4ZGI1OTEsIDB4YzQ1ZDA1NzEsIDB4NmQ0NmYwNCwgMHg1MDE1ZmY2MCwgCi0gIDB4OThmYjI0MTksIDB4YmRlOTk3ZDYsIDB4NDA0M2NjODksIDB4ZDk5ZTc3NjcsIAotICAweGU4NDJiZGIwLCAweDg5OGI4ODA3LCAweDE5NWIzOGU3LCAweGM4ZWVkYjc5LCAKLSAgMHg3YzBhNDdhMSwgMHg0MjBmZTk3YywgMHg4NDFlYzlmOCwgMHgwLCAKLSAgMHg4MDg2ODMwOSwgMHgyYmVkNDgzMiwgMHgxMTcwYWMxZSwgMHg1YTcyNGU2YywgCi0gIDB4ZWZmZmJmZCwgMHg4NTM4NTYwZiwgMHhhZWQ1MWUzZCwgMHgyZDM5MjczNiwgCi0gIDB4ZmQ5NjQwYSwgMHg1Y2E2MjE2OCwgMHg1YjU0ZDE5YiwgMHgzNjJlM2EyNCwgCi0gIDB4YTY3YjEwYywgMHg1N2U3MGY5MywgMHhlZTk2ZDJiNCwgMHg5YjkxOWUxYiwgCi0gIDB4YzBjNTRmODAsIDB4ZGMyMGEyNjEsIDB4Nzc0YjY5NWEsIDB4MTIxYTE2MWMsIAotICAweDkzYmEwYWUyLCAweGEwMmFlNWMwLCAweDIyZTA0MzNjLCAweDFiMTcxZDEyLCAKLSAgMHg5MGQwYjBlLCAweDhiYzdhZGYyLCAweGI2YThiOTJkLCAweDFlYTljODE0LCAKLSAgMHhmMTE5ODU1NywgMHg3NTA3NGNhZiwgMHg5OWRkYmJlZSwgMHg3ZjYwZmRhMywgCi0gIDB4MTI2OWZmNywgMHg3MmY1YmM1YywgMHg2NjNiYzU0NCwgMHhmYjdlMzQ1YiwgCi0gIDB4NDMyOTc2OGIsIDB4MjNjNmRjY2IsIDB4ZWRmYzY4YjYsIDB4ZTRmMTYzYjgsIAotICAweDMxZGNjYWQ3LCAweDYzODUxMDQyLCAweDk3MjI0MDEzLCAweGM2MTEyMDg0LCAKLSAgMHg0YTI0N2Q4NSwgMHhiYjNkZjhkMiwgMHhmOTMyMTFhZSwgMHgyOWExNmRjNywgCi0gIDB4OWUyZjRiMWQsIDB4YjIzMGYzZGMsIDB4ODY1MmVjMGQsIDB4YzFlM2QwNzcsIAotICAweGIzMTY2YzJiLCAweDcwYjk5OWE5LCAweDk0NDhmYTExLCAweGU5NjQyMjQ3LCAKLSAgMHhmYzhjYzRhOCwgMHhmMDNmMWFhMCwgMHg3ZDJjZDg1NiwgMHgzMzkwZWYyMiwgCi0gIDB4NDk0ZWM3ODcsIDB4MzhkMWMxZDksIDB4Y2FhMmZlOGMsIDB4ZDQwYjM2OTgsIAotICAweGY1ODFjZmE2LCAweDdhZGUyOGE1LCAweGI3OGUyNmRhLCAweGFkYmZhNDNmLCAKLSAgMHgzYTlkZTQyYywgMHg3ODkyMGQ1MCwgMHg1ZmNjOWI2YSwgMHg3ZTQ2NjI1NCwgCi0gIDB4OGQxM2MyZjYsIDB4ZDhiOGU4OTAsIDB4MzlmNzVlMmUsIDB4YzNhZmY1ODIsIAotICAweDVkODBiZTlmLCAweGQwOTM3YzY5LCAweGQ1MmRhOTZmLCAweDI1MTJiM2NmLCAKLSAgMHhhYzk5M2JjOCwgMHgxODdkYTcxMCwgMHg5YzYzNmVlOCwgMHgzYmJiN2JkYiwgCi0gIDB4MjY3ODA5Y2QsIDB4NTkxOGY0NmUsIDB4OWFiNzAxZWMsIDB4NGY5YWE4ODMsIAotICAweDk1NmU2NWU2LCAweGZmZTY3ZWFhLCAweGJjY2YwODIxLCAweDE1ZThlNmVmLCAKLSAgMHhlNzliZDliYSwgMHg2ZjM2Y2U0YSwgMHg5ZjA5ZDRlYSwgMHhiMDdjZDYyOSwgCi0gIDB4YTRiMmFmMzEsIDB4M2YyMzMxMmEsIDB4YTU5NDMwYzYsIDB4YTI2NmMwMzUsIAotICAweDRlYmMzNzc0LCAweDgyY2FhNmZjLCAweDkwZDBiMGUwLCAweGE3ZDgxNTMzLCAKLSAgMHg0OTg0YWYxLCAweGVjZGFmNzQxLCAweGNkNTAwZTdmLCAweDkxZjYyZjE3LCAKLSAgMHg0ZGQ2OGQ3NiwgMHhlZmIwNGQ0MywgMHhhYTRkNTRjYywgMHg5NjA0ZGZlNCwgCi0gIDB4ZDFiNWUzOWUsIDB4NmE4ODFiNGMsIDB4MmMxZmI4YzEsIDB4NjU1MTdmNDYsIAotICAweDVlZWEwNDlkLCAweDhjMzU1ZDAxLCAweDg3NzQ3M2ZhLCAweGI0MTJlZmIsIAotICAweDY3MWQ1YWIzLCAweGRiZDI1MjkyLCAweDEwNTYzM2U5LCAweGQ2NDcxMzZkLCAKLSAgMHhkNzYxOGM5YSwgMHhhMTBjN2EzNywgMHhmODE0OGU1OSwgMHgxMzNjODllYiwgCi0gIDB4YTkyN2VlY2UsIDB4NjFjOTM1YjcsIDB4MWNlNWVkZTEsIDB4NDdiMTNjN2EsIAotICAweGQyZGY1OTljLCAweGYyNzMzZjU1LCAweDE0Y2U3OTE4LCAweGM3MzdiZjczLCAKLSAgMHhmN2NkZWE1MywgMHhmZGFhNWI1ZiwgMHgzZDZmMTRkZiwgMHg0NGRiODY3OCwgCi0gIDB4YWZmMzgxY2EsIDB4NjhjNDNlYjksIDB4MjQzNDJjMzgsIDB4YTM0MDVmYzIsIAotICAweDFkYzM3MjE2LCAweGUyMjUwY2JjLCAweDNjNDk4YjI4LCAweGQ5NTQxZmYsIAotICAweGE4MDE3MTM5LCAweGNiM2RlMDgsIDB4YjRlNDljZDgsIDB4NTZjMTkwNjQsIAotICAweGNiODQ2MTdiLCAweDMyYjY3MGQ1LCAweDZjNWM3NDQ4LCAweGI4NTc0MmQwIAorLyogY2xhbmctZm9ybWF0IG9mZiAqLworc3RhdGljIGNvbnN0IHVpbnQzMl90IFUzWzI1Nl0gPSB7CisgICAgMHhmNGE3NTA1MSwgMHg0MTY1NTM3ZSwgIDB4MTdhNGMzMWEsICAweDI3NWU5NjNhLAorICAgIDB4YWI2YmNiM2IsIDB4OWQ0NWYxMWYsICAweGZhNThhYmFjLCAgMHhlMzAzOTM0YiwKKyAgICAweDMwZmE1NTIwLCAweDc2NmRmNmFkLCAgMHhjYzc2OTE4OCwgIDB4MjRjMjVmNSwKKyAgICAweGU1ZDdmYzRmLCAweDJhY2JkN2M1LCAgMHgzNTQ0ODAyNiwgIDB4NjJhMzhmYjUsCisgICAgMHhiMTVhNDlkZSwgMHhiYTFiNjcyNSwgIDB4ZWEwZTk4NDUsICAweGZlYzBlMTVkLAorICAgIDB4MmY3NTAyYzMsIDB4NGNmMDEyODEsICAweDQ2OTdhMzhkLCAgMHhkM2Y5YzY2YiwKKyAgICAweDhmNWZlNzAzLCAweDkyOWM5NTE1LCAgMHg2ZDdhZWJiZiwgIDB4NTI1OWRhOTUsCisgICAgMHhiZTgzMmRkNCwgMHg3NDIxZDM1OCwgIDB4ZTA2OTI5NDksICAweGM5Yzg0NDhlLAorICAgIDB4YzI4OTZhNzUsIDB4OGU3OTc4ZjQsICAweDU4M2U2Yjk5LCAgMHhiOTcxZGQyNywKKyAgICAweGUxNGZiNmJlLCAweDg4YWQxN2YwLCAgMHgyMGFjNjZjOSwgIDB4Y2UzYWI0N2QsCisgICAgMHhkZjRhMTg2MywgMHgxYTMxODJlNSwgIDB4NTEzMzYwOTcsICAweDUzN2Y0NTYyLAorICAgIDB4NjQ3N2UwYjEsIDB4NmJhZTg0YmIsICAweDgxYTAxY2ZlLCAgMHg4MmI5NGY5LAorICAgIDB4NDg2ODU4NzAsIDB4NDVmZDE5OGYsICAweGRlNmM4Nzk0LCAgMHg3YmY4Yjc1MiwKKyAgICAweDczZDMyM2FiLCAweDRiMDJlMjcyLCAgMHgxZjhmNTdlMywgIDB4NTVhYjJhNjYsCisgICAgMHhlYjI4MDdiMiwgMHhiNWMyMDMyZiwgIDB4YzU3YjlhODYsICAweDM3MDhhNWQzLAorICAgIDB4Mjg4N2YyMzAsIDB4YmZhNWIyMjMsICAweDM2YWJhMDIsICAgMHgxNjgyNWNlZCwKKyAgICAweGNmMWMyYjhhLCAweDc5YjQ5MmE3LCAgMHg3ZjJmMGYzLCAgIDB4NjllMmExNGUsCisgICAgMHhkYWY0Y2Q2NSwgMHg1YmVkNTA2LCAgIDB4MzQ2MjFmZDEsICAweGE2ZmU4YWM0LAorICAgIDB4MmU1MzlkMzQsIDB4ZjM1NWEwYTIsICAweDhhZTEzMjA1LCAgMHhmNmViNzVhNCwKKyAgICAweDgzZWMzOTBiLCAweDYwZWZhYTQwLCAgMHg3MTlmMDY1ZSwgIDB4NmUxMDUxYmQsCisgICAgMHgyMThhZjkzZSwgMHhkZDA2M2Q5NiwgIDB4M2UwNWFlZGQsICAweGU2YmQ0NjRkLAorICAgIDB4NTQ4ZGI1OTEsIDB4YzQ1ZDA1NzEsICAweDZkNDZmMDQsICAgMHg1MDE1ZmY2MCwKKyAgICAweDk4ZmIyNDE5LCAweGJkZTk5N2Q2LCAgMHg0MDQzY2M4OSwgIDB4ZDk5ZTc3NjcsCisgICAgMHhlODQyYmRiMCwgMHg4OThiODgwNywgIDB4MTk1YjM4ZTcsICAweGM4ZWVkYjc5LAorICAgIDB4N2MwYTQ3YTEsIDB4NDIwZmU5N2MsICAweDg0MWVjOWY4LCAgMHgwLAorICAgIDB4ODA4NjgzMDksIDB4MmJlZDQ4MzIsICAweDExNzBhYzFlLCAgMHg1YTcyNGU2YywKKyAgICAweGVmZmZiZmQsICAweDg1Mzg1NjBmLCAgMHhhZWQ1MWUzZCwgIDB4MmQzOTI3MzYsCisgICAgMHhmZDk2NDBhLCAgMHg1Y2E2MjE2OCwgIDB4NWI1NGQxOWIsICAweDM2MmUzYTI0LAorICAgIDB4YTY3YjEwYywgIDB4NTdlNzBmOTMsICAweGVlOTZkMmI0LCAgMHg5YjkxOWUxYiwKKyAgICAweGMwYzU0ZjgwLCAweGRjMjBhMjYxLCAgMHg3NzRiNjk1YSwgIDB4MTIxYTE2MWMsCisgICAgMHg5M2JhMGFlMiwgMHhhMDJhZTVjMCwgIDB4MjJlMDQzM2MsICAweDFiMTcxZDEyLAorICAgIDB4OTBkMGIwZSwgIDB4OGJjN2FkZjIsICAweGI2YThiOTJkLCAgMHgxZWE5YzgxNCwKKyAgICAweGYxMTk4NTU3LCAweDc1MDc0Y2FmLCAgMHg5OWRkYmJlZSwgIDB4N2Y2MGZkYTMsCisgICAgMHgxMjY5ZmY3LCAgMHg3MmY1YmM1YywgIDB4NjYzYmM1NDQsICAweGZiN2UzNDViLAorICAgIDB4NDMyOTc2OGIsIDB4MjNjNmRjY2IsICAweGVkZmM2OGI2LCAgMHhlNGYxNjNiOCwKKyAgICAweDMxZGNjYWQ3LCAweDYzODUxMDQyLCAgMHg5NzIyNDAxMywgIDB4YzYxMTIwODQsCisgICAgMHg0YTI0N2Q4NSwgMHhiYjNkZjhkMiwgIDB4ZjkzMjExYWUsICAweDI5YTE2ZGM3LAorICAgIDB4OWUyZjRiMWQsIDB4YjIzMGYzZGMsICAweDg2NTJlYzBkLCAgMHhjMWUzZDA3NywKKyAgICAweGIzMTY2YzJiLCAweDcwYjk5OWE5LCAgMHg5NDQ4ZmExMSwgIDB4ZTk2NDIyNDcsCisgICAgMHhmYzhjYzRhOCwgMHhmMDNmMWFhMCwgIDB4N2QyY2Q4NTYsICAweDMzOTBlZjIyLAorICAgIDB4NDk0ZWM3ODcsIDB4MzhkMWMxZDksICAweGNhYTJmZThjLCAgMHhkNDBiMzY5OCwKKyAgICAweGY1ODFjZmE2LCAweDdhZGUyOGE1LCAgMHhiNzhlMjZkYSwgIDB4YWRiZmE0M2YsCisgICAgMHgzYTlkZTQyYywgMHg3ODkyMGQ1MCwgIDB4NWZjYzliNmEsICAweDdlNDY2MjU0LAorICAgIDB4OGQxM2MyZjYsIDB4ZDhiOGU4OTAsICAweDM5Zjc1ZTJlLCAgMHhjM2FmZjU4MiwKKyAgICAweDVkODBiZTlmLCAweGQwOTM3YzY5LCAgMHhkNTJkYTk2ZiwgIDB4MjUxMmIzY2YsCisgICAgMHhhYzk5M2JjOCwgMHgxODdkYTcxMCwgIDB4OWM2MzZlZTgsICAweDNiYmI3YmRiLAorICAgIDB4MjY3ODA5Y2QsIDB4NTkxOGY0NmUsICAweDlhYjcwMWVjLCAgMHg0ZjlhYTg4MywKKyAgICAweDk1NmU2NWU2LCAweGZmZTY3ZWFhLCAgMHhiY2NmMDgyMSwgIDB4MTVlOGU2ZWYsCisgICAgMHhlNzliZDliYSwgMHg2ZjM2Y2U0YSwgIDB4OWYwOWQ0ZWEsICAweGIwN2NkNjI5LAorICAgIDB4YTRiMmFmMzEsIDB4M2YyMzMxMmEsICAweGE1OTQzMGM2LCAgMHhhMjY2YzAzNSwKKyAgICAweDRlYmMzNzc0LCAweDgyY2FhNmZjLCAgMHg5MGQwYjBlMCwgIDB4YTdkODE1MzMsCisgICAgMHg0OTg0YWYxLCAgMHhlY2RhZjc0MSwgIDB4Y2Q1MDBlN2YsICAweDkxZjYyZjE3LAorICAgIDB4NGRkNjhkNzYsIDB4ZWZiMDRkNDMsICAweGFhNGQ1NGNjLCAgMHg5NjA0ZGZlNCwKKyAgICAweGQxYjVlMzllLCAweDZhODgxYjRjLCAgMHgyYzFmYjhjMSwgIDB4NjU1MTdmNDYsCisgICAgMHg1ZWVhMDQ5ZCwgMHg4YzM1NWQwMSwgIDB4ODc3NDczZmEsICAweGI0MTJlZmIsCisgICAgMHg2NzFkNWFiMywgMHhkYmQyNTI5MiwgIDB4MTA1NjMzZTksICAweGQ2NDcxMzZkLAorICAgIDB4ZDc2MThjOWEsIDB4YTEwYzdhMzcsICAweGY4MTQ4ZTU5LCAgMHgxMzNjODllYiwKKyAgICAweGE5MjdlZWNlLCAweDYxYzkzNWI3LCAgMHgxY2U1ZWRlMSwgIDB4NDdiMTNjN2EsCisgICAgMHhkMmRmNTk5YywgMHhmMjczM2Y1NSwgIDB4MTRjZTc5MTgsICAweGM3MzdiZjczLAorICAgIDB4ZjdjZGVhNTMsIDB4ZmRhYTViNWYsICAweDNkNmYxNGRmLCAgMHg0NGRiODY3OCwKKyAgICAweGFmZjM4MWNhLCAweDY4YzQzZWI5LCAgMHgyNDM0MmMzOCwgIDB4YTM0MDVmYzIsCisgICAgMHgxZGMzNzIxNiwgMHhlMjI1MGNiYywgIDB4M2M0OThiMjgsICAweGQ5NTQxZmYsCisgICAgMHhhODAxNzEzOSwgMHhjYjNkZTA4LCAgIDB4YjRlNDljZDgsICAweDU2YzE5MDY0LAorICAgIDB4Y2I4NDYxN2IsIDB4MzJiNjcwZDUsICAweDZjNWM3NDQ4LCAgMHhiODU3NDJkMAogfTsKLQorLyogY2xhbmctZm9ybWF0IG9uICovCiAjZW5kaWYKIAotLyogCisvKgogICogdGhlIGZvbGxvd2luZyB0YWJsZXMgKGFlc19zYm94LCBhZXNfaW52X3Nib3gsIFQ0LCBVNCkgYXJlCi0gKiBlbmRpYW4tbmV1dHJhbCAKKyAqIGVuZGlhbi1uZXV0cmFsCiAgKi8KLQotb2N0ZXRfdAotYWVzX3Nib3hbMjU2XSA9IHsKLSAgMHg2MywgMHg3YywgMHg3NywgMHg3YiwgMHhmMiwgMHg2YiwgMHg2ZiwgMHhjNSwgCi0gIDB4MzAsIDB4MDEsIDB4NjcsIDB4MmIsIDB4ZmUsIDB4ZDcsIDB4YWIsIDB4NzYsIAotICAweGNhLCAweDgyLCAweGM5LCAweDdkLCAweGZhLCAweDU5LCAweDQ3LCAweGYwLCAKLSAgMHhhZCwgMHhkNCwgMHhhMiwgMHhhZiwgMHg5YywgMHhhNCwgMHg3MiwgMHhjMCwgCi0gIDB4YjcsIDB4ZmQsIDB4OTMsIDB4MjYsIDB4MzYsIDB4M2YsIDB4ZjcsIDB4Y2MsIAotICAweDM0LCAweGE1LCAweGU1LCAweGYxLCAweDcxLCAweGQ4LCAweDMxLCAweDE1LCAKLSAgMHgwNCwgMHhjNywgMHgyMywgMHhjMywgMHgxOCwgMHg5NiwgMHgwNSwgMHg5YSwgCi0gIDB4MDcsIDB4MTIsIDB4ODAsIDB4ZTIsIDB4ZWIsIDB4MjcsIDB4YjIsIDB4NzUsIAotICAweDA5LCAweDgzLCAweDJjLCAweDFhLCAweDFiLCAweDZlLCAweDVhLCAweGEwLCAKLSAgMHg1MiwgMHgzYiwgMHhkNiwgMHhiMywgMHgyOSwgMHhlMywgMHgyZiwgMHg4NCwgCi0gIDB4NTMsIDB4ZDEsIDB4MDAsIDB4ZWQsIDB4MjAsIDB4ZmMsIDB4YjEsIDB4NWIsIAotICAweDZhLCAweGNiLCAweGJlLCAweDM5LCAweDRhLCAweDRjLCAweDU4LCAweGNmLCAKLSAgMHhkMCwgMHhlZiwgMHhhYSwgMHhmYiwgMHg0MywgMHg0ZCwgMHgzMywgMHg4NSwgCi0gIDB4NDUsIDB4ZjksIDB4MDIsIDB4N2YsIDB4NTAsIDB4M2MsIDB4OWYsIDB4YTgsIAotICAweDUxLCAweGEzLCAweDQwLCAweDhmLCAweDkyLCAweDlkLCAweDM4LCAweGY1LCAKLSAgMHhiYywgMHhiNiwgMHhkYSwgMHgyMSwgMHgxMCwgMHhmZiwgMHhmMywgMHhkMiwgCi0gIDB4Y2QsIDB4MGMsIDB4MTMsIDB4ZWMsIDB4NWYsIDB4OTcsIDB4NDQsIDB4MTcsIAotICAweGM0LCAweGE3LCAweDdlLCAweDNkLCAweDY0LCAweDVkLCAweDE5LCAweDczLCAKLSAgMHg2MCwgMHg4MSwgMHg0ZiwgMHhkYywgMHgyMiwgMHgyYSwgMHg5MCwgMHg4OCwgCi0gIDB4NDYsIDB4ZWUsIDB4YjgsIDB4MTQsIDB4ZGUsIDB4NWUsIDB4MGIsIDB4ZGIsIAotICAweGUwLCAweDMyLCAweDNhLCAweDBhLCAweDQ5LCAweDA2LCAweDI0LCAweDVjLCAKLSAgMHhjMiwgMHhkMywgMHhhYywgMHg2MiwgMHg5MSwgMHg5NSwgMHhlNCwgMHg3OSwgCi0gIDB4ZTcsIDB4YzgsIDB4MzcsIDB4NmQsIDB4OGQsIDB4ZDUsIDB4NGUsIDB4YTksIAotICAweDZjLCAweDU2LCAweGY0LCAweGVhLCAweDY1LCAweDdhLCAweGFlLCAweDA4LCAKLSAgMHhiYSwgMHg3OCwgMHgyNSwgMHgyZSwgMHgxYywgMHhhNiwgMHhiNCwgMHhjNiwgCi0gIDB4ZTgsIDB4ZGQsIDB4NzQsIDB4MWYsIDB4NGIsIDB4YmQsIDB4OGIsIDB4OGEsIAotICAweDcwLCAweDNlLCAweGI1LCAweDY2LCAweDQ4LCAweDAzLCAweGY2LCAweDBlLCAKLSAgMHg2MSwgMHgzNSwgMHg1NywgMHhiOSwgMHg4NiwgMHhjMSwgMHgxZCwgMHg5ZSwgCi0gIDB4ZTEsIDB4ZjgsIDB4OTgsIDB4MTEsIDB4NjksIDB4ZDksIDB4OGUsIDB4OTQsIAotICAweDliLCAweDFlLCAweDg3LCAweGU5LCAweGNlLCAweDU1LCAweDI4LCAweGRmLCAKLSAgMHg4YywgMHhhMSwgMHg4OSwgMHgwZCwgMHhiZiwgMHhlNiwgMHg0MiwgMHg2OCwgCi0gIDB4NDEsIDB4OTksIDB4MmQsIDB4MGYsIDB4YjAsIDB4NTQsIDB4YmIsIDB4MTYgCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgY29uc3QgdWludDhfdCBhZXNfc2JveFsyNTZdID0geworICAgIDB4NjMsIDB4N2MsIDB4NzcsIDB4N2IsIDB4ZjIsIDB4NmIsIDB4NmYsIDB4YzUsCisgICAgMHgzMCwgMHgwMSwgMHg2NywgMHgyYiwgMHhmZSwgMHhkNywgMHhhYiwgMHg3NiwKKyAgICAweGNhLCAweDgyLCAweGM5LCAweDdkLCAweGZhLCAweDU5LCAweDQ3LCAweGYwLAorICAgIDB4YWQsIDB4ZDQsIDB4YTIsIDB4YWYsIDB4OWMsIDB4YTQsIDB4NzIsIDB4YzAsCisgICAgMHhiNywgMHhmZCwgMHg5MywgMHgyNiwgMHgzNiwgMHgzZiwgMHhmNywgMHhjYywKKyAgICAweDM0LCAweGE1LCAweGU1LCAweGYxLCAweDcxLCAweGQ4LCAweDMxLCAweDE1LAorICAgIDB4MDQsIDB4YzcsIDB4MjMsIDB4YzMsIDB4MTgsIDB4OTYsIDB4MDUsIDB4OWEsCisgICAgMHgwNywgMHgxMiwgMHg4MCwgMHhlMiwgMHhlYiwgMHgyNywgMHhiMiwgMHg3NSwKKyAgICAweDA5LCAweDgzLCAweDJjLCAweDFhLCAweDFiLCAweDZlLCAweDVhLCAweGEwLAorICAgIDB4NTIsIDB4M2IsIDB4ZDYsIDB4YjMsIDB4MjksIDB4ZTMsIDB4MmYsIDB4ODQsCisgICAgMHg1MywgMHhkMSwgMHgwMCwgMHhlZCwgMHgyMCwgMHhmYywgMHhiMSwgMHg1YiwKKyAgICAweDZhLCAweGNiLCAweGJlLCAweDM5LCAweDRhLCAweDRjLCAweDU4LCAweGNmLAorICAgIDB4ZDAsIDB4ZWYsIDB4YWEsIDB4ZmIsIDB4NDMsIDB4NGQsIDB4MzMsIDB4ODUsCisgICAgMHg0NSwgMHhmOSwgMHgwMiwgMHg3ZiwgMHg1MCwgMHgzYywgMHg5ZiwgMHhhOCwKKyAgICAweDUxLCAweGEzLCAweDQwLCAweDhmLCAweDkyLCAweDlkLCAweDM4LCAweGY1LAorICAgIDB4YmMsIDB4YjYsIDB4ZGEsIDB4MjEsIDB4MTAsIDB4ZmYsIDB4ZjMsIDB4ZDIsCisgICAgMHhjZCwgMHgwYywgMHgxMywgMHhlYywgMHg1ZiwgMHg5NywgMHg0NCwgMHgxNywKKyAgICAweGM0LCAweGE3LCAweDdlLCAweDNkLCAweDY0LCAweDVkLCAweDE5LCAweDczLAorICAgIDB4NjAsIDB4ODEsIDB4NGYsIDB4ZGMsIDB4MjIsIDB4MmEsIDB4OTAsIDB4ODgsCisgICAgMHg0NiwgMHhlZSwgMHhiOCwgMHgxNCwgMHhkZSwgMHg1ZSwgMHgwYiwgMHhkYiwKKyAgICAweGUwLCAweDMyLCAweDNhLCAweDBhLCAweDQ5LCAweDA2LCAweDI0LCAweDVjLAorICAgIDB4YzIsIDB4ZDMsIDB4YWMsIDB4NjIsIDB4OTEsIDB4OTUsIDB4ZTQsIDB4NzksCisgICAgMHhlNywgMHhjOCwgMHgzNywgMHg2ZCwgMHg4ZCwgMHhkNSwgMHg0ZSwgMHhhOSwKKyAgICAweDZjLCAweDU2LCAweGY0LCAweGVhLCAweDY1LCAweDdhLCAweGFlLCAweDA4LAorICAgIDB4YmEsIDB4NzgsIDB4MjUsIDB4MmUsIDB4MWMsIDB4YTYsIDB4YjQsIDB4YzYsCisgICAgMHhlOCwgMHhkZCwgMHg3NCwgMHgxZiwgMHg0YiwgMHhiZCwgMHg4YiwgMHg4YSwKKyAgICAweDcwLCAweDNlLCAweGI1LCAweDY2LCAweDQ4LCAweDAzLCAweGY2LCAweDBlLAorICAgIDB4NjEsIDB4MzUsIDB4NTcsIDB4YjksIDB4ODYsIDB4YzEsIDB4MWQsIDB4OWUsCisgICAgMHhlMSwgMHhmOCwgMHg5OCwgMHgxMSwgMHg2OSwgMHhkOSwgMHg4ZSwgMHg5NCwKKyAgICAweDliLCAweDFlLCAweDg3LCAweGU5LCAweGNlLCAweDU1LCAweDI4LCAweGRmLAorICAgIDB4OGMsIDB4YTEsIDB4ODksIDB4MGQsIDB4YmYsIDB4ZTYsIDB4NDIsIDB4NjgsCisgICAgMHg0MSwgMHg5OSwgMHgyZCwgMHgwZiwgMHhiMCwgMHg1NCwgMHhiYiwgMHgxNgogfTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLwogCi1vY3RldF90Ci1hZXNfaW52X3Nib3hbMjU2XSA9IHsKLSAgMHg1MiwgMHgwOSwgMHg2YSwgMHhkNSwgMHgzMCwgMHgzNiwgMHhhNSwgMHgzOCwgCi0gIDB4YmYsIDB4NDAsIDB4YTMsIDB4OWUsIDB4ODEsIDB4ZjMsIDB4ZDcsIDB4ZmIsCi0gIDB4N2MsIDB4ZTMsIDB4MzksIDB4ODIsIDB4OWIsIDB4MmYsIDB4ZmYsIDB4ODcsCi0gIDB4MzQsIDB4OGUsIDB4NDMsIDB4NDQsIDB4YzQsIDB4ZGUsIDB4ZTksIDB4Y2IsCi0gIDB4NTQsIDB4N2IsIDB4OTQsIDB4MzIsIDB4YTYsIDB4YzIsIDB4MjMsIDB4M2QsIAotICAweGVlLCAweDRjLCAweDk1LCAweDBiLCAweDQyLCAweGZhLCAweGMzLCAweDRlLAotICAweDA4LCAweDJlLCAweGExLCAweDY2LCAweDI4LCAweGQ5LCAweDI0LCAweGIyLAotICAweDc2LCAweDViLCAweGEyLCAweDQ5LCAweDZkLCAweDhiLCAweGQxLCAweDI1LAotICAweDcyLCAweGY4LCAweGY2LCAweDY0LCAweDg2LCAweDY4LCAweDk4LCAweDE2LCAKLSAgMHhkNCwgMHhhNCwgMHg1YywgMHhjYywgMHg1ZCwgMHg2NSwgMHhiNiwgMHg5MiwKLSAgMHg2YywgMHg3MCwgMHg0OCwgMHg1MCwgMHhmZCwgMHhlZCwgMHhiOSwgMHhkYSwgCi0gIDB4NWUsIDB4MTUsIDB4NDYsIDB4NTcsIDB4YTcsIDB4OGQsIDB4OWQsIDB4ODQsCi0gIDB4OTAsIDB4ZDgsIDB4YWIsIDB4MDAsIDB4OGMsIDB4YmMsIDB4ZDMsIDB4MGEsIAotICAweGY3LCAweGU0LCAweDU4LCAweDA1LCAweGI4LCAweGIzLCAweDQ1LCAweDA2LAotICAweGQwLCAweDJjLCAweDFlLCAweDhmLCAweGNhLCAweDNmLCAweDBmLCAweDAyLCAKLSAgMHhjMSwgMHhhZiwgMHhiZCwgMHgwMywgMHgwMSwgMHgxMywgMHg4YSwgMHg2YiwKLSAgMHgzYSwgMHg5MSwgMHgxMSwgMHg0MSwgMHg0ZiwgMHg2NywgMHhkYywgMHhlYSwgCi0gIDB4OTcsIDB4ZjIsIDB4Y2YsIDB4Y2UsIDB4ZjAsIDB4YjQsIDB4ZTYsIDB4NzMsCi0gIDB4OTYsIDB4YWMsIDB4NzQsIDB4MjIsIDB4ZTcsIDB4YWQsIDB4MzUsIDB4ODUsIAotICAweGUyLCAweGY5LCAweDM3LCAweGU4LCAweDFjLCAweDc1LCAweGRmLCAweDZlLAotICAweDQ3LCAweGYxLCAweDFhLCAweDcxLCAweDFkLCAweDI5LCAweGM1LCAweDg5LCAKLSAgMHg2ZiwgMHhiNywgMHg2MiwgMHgwZSwgMHhhYSwgMHgxOCwgMHhiZSwgMHgxYiwKLSAgMHhmYywgMHg1NiwgMHgzZSwgMHg0YiwgMHhjNiwgMHhkMiwgMHg3OSwgMHgyMCwgCi0gIDB4OWEsIDB4ZGIsIDB4YzAsIDB4ZmUsIDB4NzgsIDB4Y2QsIDB4NWEsIDB4ZjQsCi0gIDB4MWYsIDB4ZGQsIDB4YTgsIDB4MzMsIDB4ODgsIDB4MDcsIDB4YzcsIDB4MzEsIAotICAweGIxLCAweDEyLCAweDEwLCAweDU5LCAweDI3LCAweDgwLCAweGVjLCAweDVmLAotICAweDYwLCAweDUxLCAweDdmLCAweGE5LCAweDE5LCAweGI1LCAweDRhLCAweDBkLCAKLSAgMHgyZCwgMHhlNSwgMHg3YSwgMHg5ZiwgMHg5MywgMHhjOSwgMHg5YywgMHhlZiwKLSAgMHhhMCwgMHhlMCwgMHgzYiwgMHg0ZCwgMHhhZSwgMHgyYSwgMHhmNSwgMHhiMCwgCi0gIDB4YzgsIDB4ZWIsIDB4YmIsIDB4M2MsIDB4ODMsIDB4NTMsIDB4OTksIDB4NjEsCi0gIDB4MTcsIDB4MmIsIDB4MDQsIDB4N2UsIDB4YmEsIDB4NzcsIDB4ZDYsIDB4MjYsIAotICAweGUxLCAweDY5LCAweDE0LCAweDYzLCAweDU1LCAweDIxLCAweDBjLCAweDdkCisjaWZuZGVmIENQVV9SSVNDCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgY29uc3QgdWludDhfdCBhZXNfaW52X3Nib3hbMjU2XSA9IHsKKyAgICAweDUyLCAweDA5LCAweDZhLCAweGQ1LCAweDMwLCAweDM2LCAweGE1LCAweDM4LAorICAgIDB4YmYsIDB4NDAsIDB4YTMsIDB4OWUsIDB4ODEsIDB4ZjMsIDB4ZDcsIDB4ZmIsCisgICAgMHg3YywgMHhlMywgMHgzOSwgMHg4MiwgMHg5YiwgMHgyZiwgMHhmZiwgMHg4NywKKyAgICAweDM0LCAweDhlLCAweDQzLCAweDQ0LCAweGM0LCAweGRlLCAweGU5LCAweGNiLAorICAgIDB4NTQsIDB4N2IsIDB4OTQsIDB4MzIsIDB4YTYsIDB4YzIsIDB4MjMsIDB4M2QsCisgICAgMHhlZSwgMHg0YywgMHg5NSwgMHgwYiwgMHg0MiwgMHhmYSwgMHhjMywgMHg0ZSwKKyAgICAweDA4LCAweDJlLCAweGExLCAweDY2LCAweDI4LCAweGQ5LCAweDI0LCAweGIyLAorICAgIDB4NzYsIDB4NWIsIDB4YTIsIDB4NDksIDB4NmQsIDB4OGIsIDB4ZDEsIDB4MjUsCisgICAgMHg3MiwgMHhmOCwgMHhmNiwgMHg2NCwgMHg4NiwgMHg2OCwgMHg5OCwgMHgxNiwKKyAgICAweGQ0LCAweGE0LCAweDVjLCAweGNjLCAweDVkLCAweDY1LCAweGI2LCAweDkyLAorICAgIDB4NmMsIDB4NzAsIDB4NDgsIDB4NTAsIDB4ZmQsIDB4ZWQsIDB4YjksIDB4ZGEsCisgICAgMHg1ZSwgMHgxNSwgMHg0NiwgMHg1NywgMHhhNywgMHg4ZCwgMHg5ZCwgMHg4NCwKKyAgICAweDkwLCAweGQ4LCAweGFiLCAweDAwLCAweDhjLCAweGJjLCAweGQzLCAweDBhLAorICAgIDB4ZjcsIDB4ZTQsIDB4NTgsIDB4MDUsIDB4YjgsIDB4YjMsIDB4NDUsIDB4MDYsCisgICAgMHhkMCwgMHgyYywgMHgxZSwgMHg4ZiwgMHhjYSwgMHgzZiwgMHgwZiwgMHgwMiwKKyAgICAweGMxLCAweGFmLCAweGJkLCAweDAzLCAweDAxLCAweDEzLCAweDhhLCAweDZiLAorICAgIDB4M2EsIDB4OTEsIDB4MTEsIDB4NDEsIDB4NGYsIDB4NjcsIDB4ZGMsIDB4ZWEsCisgICAgMHg5NywgMHhmMiwgMHhjZiwgMHhjZSwgMHhmMCwgMHhiNCwgMHhlNiwgMHg3MywKKyAgICAweDk2LCAweGFjLCAweDc0LCAweDIyLCAweGU3LCAweGFkLCAweDM1LCAweDg1LAorICAgIDB4ZTIsIDB4ZjksIDB4MzcsIDB4ZTgsIDB4MWMsIDB4NzUsIDB4ZGYsIDB4NmUsCisgICAgMHg0NywgMHhmMSwgMHgxYSwgMHg3MSwgMHgxZCwgMHgyOSwgMHhjNSwgMHg4OSwKKyAgICAweDZmLCAweGI3LCAweDYyLCAweDBlLCAweGFhLCAweDE4LCAweGJlLCAweDFiLAorICAgIDB4ZmMsIDB4NTYsIDB4M2UsIDB4NGIsIDB4YzYsIDB4ZDIsIDB4NzksIDB4MjAsCisgICAgMHg5YSwgMHhkYiwgMHhjMCwgMHhmZSwgMHg3OCwgMHhjZCwgMHg1YSwgMHhmNCwKKyAgICAweDFmLCAweGRkLCAweGE4LCAweDMzLCAweDg4LCAweDA3LCAweGM3LCAweDMxLAorICAgIDB4YjEsIDB4MTIsIDB4MTAsIDB4NTksIDB4MjcsIDB4ODAsIDB4ZWMsIDB4NWYsCisgICAgMHg2MCwgMHg1MSwgMHg3ZiwgMHhhOSwgMHgxOSwgMHhiNSwgMHg0YSwgMHgwZCwKKyAgICAweDJkLCAweGU1LCAweDdhLCAweDlmLCAweDkzLCAweGM5LCAweDljLCAweGVmLAorICAgIDB4YTAsIDB4ZTAsIDB4M2IsIDB4NGQsIDB4YWUsIDB4MmEsIDB4ZjUsIDB4YjAsCisgICAgMHhjOCwgMHhlYiwgMHhiYiwgMHgzYywgMHg4MywgMHg1MywgMHg5OSwgMHg2MSwKKyAgICAweDE3LCAweDJiLCAweDA0LCAweDdlLCAweGJhLCAweDc3LCAweGQ2LCAweDI2LAorICAgIDB4ZTEsIDB4NjksIDB4MTQsIDB4NjMsIDB4NTUsIDB4MjEsIDB4MGMsIDB4N2QKIH07CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKyNlbmRpZiAvKiAhIENQVV9SSVNDICovCiAKLXVpbnQzMl90Ci1UNFsyNTZdID0geyAKLSAgMHg2MzYzNjM2MywgMHg3YzdjN2M3YywgMHg3Nzc3Nzc3NywgMHg3YjdiN2I3YiwKLSAgMHhmMmYyZjJmMiwgMHg2YjZiNmI2YiwgMHg2ZjZmNmY2ZiwgMHhjNWM1YzVjNSwgCi0gIDB4MzAzMDMwMzAsIDB4MDEwMTAxMDEsIDB4Njc2NzY3NjcsIDB4MmIyYjJiMmIsIAotICAweGZlZmVmZWZlLCAweGQ3ZDdkN2Q3LCAweGFiYWJhYmFiLCAweDc2NzY3Njc2LCAKLSAgMHhjYWNhY2FjYSwgMHg4MjgyODI4MiwgMHhjOWM5YzljOSwgMHg3ZDdkN2Q3ZCwgCi0gIDB4ZmFmYWZhZmEsIDB4NTk1OTU5NTksIDB4NDc0NzQ3NDcsIDB4ZjBmMGYwZjAsCi0gIDB4YWRhZGFkYWQsIDB4ZDRkNGQ0ZDQsIDB4YTJhMmEyYTIsIDB4YWZhZmFmYWYsCi0gIDB4OWM5YzljOWMsIDB4YTRhNGE0YTQsIDB4NzI3MjcyNzIsIDB4YzBjMGMwYzAsCi0gIDB4YjdiN2I3YjcsIDB4ZmRmZGZkZmQsIDB4OTM5MzkzOTMsIDB4MjYyNjI2MjYsCi0gIDB4MzYzNjM2MzYsIDB4M2YzZjNmM2YsIDB4ZjdmN2Y3ZjcsIDB4Y2NjY2NjY2MsCi0gIDB4MzQzNDM0MzQsIDB4YTVhNWE1YTUsIDB4ZTVlNWU1ZTUsIDB4ZjFmMWYxZjEsCi0gIDB4NzE3MTcxNzEsIDB4ZDhkOGQ4ZDgsIDB4MzEzMTMxMzEsIDB4MTUxNTE1MTUsCi0gIDB4MDQwNDA0MDQsIDB4YzdjN2M3YzcsIDB4MjMyMzIzMjMsIDB4YzNjM2MzYzMsCi0gIDB4MTgxODE4MTgsIDB4OTY5Njk2OTYsIDB4MDUwNTA1MDUsIDB4OWE5YTlhOWEsCi0gIDB4MDcwNzA3MDcsIDB4MTIxMjEyMTIsIDB4ODA4MDgwODAsIDB4ZTJlMmUyZTIsCi0gIDB4ZWJlYmViZWIsIDB4MjcyNzI3MjcsIDB4YjJiMmIyYjIsIDB4NzU3NTc1NzUsCi0gIDB4MDkwOTA5MDksIDB4ODM4MzgzODMsIDB4MmMyYzJjMmMsIDB4MWExYTFhMWEsIAotICAweDFiMWIxYjFiLCAweDZlNmU2ZTZlLCAweDVhNWE1YTVhLCAweGEwYTBhMGEwLAotICAweDUyNTI1MjUyLCAweDNiM2IzYjNiLCAweGQ2ZDZkNmQ2LCAweGIzYjNiM2IzLAotICAweDI5MjkyOTI5LCAweGUzZTNlM2UzLCAweDJmMmYyZjJmLCAweDg0ODQ4NDg0LAotICAweDUzNTM1MzUzLCAweGQxZDFkMWQxLCAweDAwMDAwMDAwLCAweGVkZWRlZGVkLAotICAweDIwMjAyMDIwLCAweGZjZmNmY2ZjLCAweGIxYjFiMWIxLCAweDViNWI1YjViLAotICAweDZhNmE2YTZhLCAweGNiY2JjYmNiLCAweGJlYmViZWJlLCAweDM5MzkzOTM5LAotICAweDRhNGE0YTRhLCAweDRjNGM0YzRjLCAweDU4NTg1ODU4LCAweGNmY2ZjZmNmLAotICAweGQwZDBkMGQwLCAweGVmZWZlZmVmLCAweGFhYWFhYWFhLCAweGZiZmJmYmZiLAotICAweDQzNDM0MzQzLCAweDRkNGQ0ZDRkLCAweDMzMzMzMzMzLCAweDg1ODU4NTg1LAotICAweDQ1NDU0NTQ1LCAweGY5ZjlmOWY5LCAweDAyMDIwMjAyLCAweDdmN2Y3ZjdmLAotICAweDUwNTA1MDUwLCAweDNjM2MzYzNjLCAweDlmOWY5ZjlmLCAweGE4YThhOGE4LAotICAweDUxNTE1MTUxLCAweGEzYTNhM2EzLCAweDQwNDA0MDQwLCAweDhmOGY4ZjhmLAotICAweDkyOTI5MjkyLCAweDlkOWQ5ZDlkLCAweDM4MzgzODM4LCAweGY1ZjVmNWY1LAotICAweGJjYmNiY2JjLCAweGI2YjZiNmI2LCAweGRhZGFkYWRhLCAweDIxMjEyMTIxLAotICAweDEwMTAxMDEwLCAweGZmZmZmZmZmLCAweGYzZjNmM2YzLCAweGQyZDJkMmQyLAotICAweGNkY2RjZGNkLCAweDBjMGMwYzBjLCAweDEzMTMxMzEzLCAweGVjZWNlY2VjLAotICAweDVmNWY1ZjVmLCAweDk3OTc5Nzk3LCAweDQ0NDQ0NDQ0LCAweDE3MTcxNzE3LAotICAweGM0YzRjNGM0LCAweGE3YTdhN2E3LCAweDdlN2U3ZTdlLCAweDNkM2QzZDNkLAotICAweDY0NjQ2NDY0LCAweDVkNWQ1ZDVkLCAweDE5MTkxOTE5LCAweDczNzM3MzczLAotICAweDYwNjA2MDYwLCAweDgxODE4MTgxLCAweDRmNGY0ZjRmLCAweGRjZGNkY2RjLAotICAweDIyMjIyMjIyLCAweDJhMmEyYTJhLCAweDkwOTA5MDkwLCAweDg4ODg4ODg4LAotICAweDQ2NDY0NjQ2LCAweGVlZWVlZWVlLCAweGI4YjhiOGI4LCAweDE0MTQxNDE0LCAKLSAgMHhkZWRlZGVkZSwgMHg1ZTVlNWU1ZSwgMHgwYjBiMGIwYiwgMHhkYmRiZGJkYiwgCi0gIDB4ZTBlMGUwZTAsIDB4MzIzMjMyMzIsIDB4M2EzYTNhM2EsIDB4MGEwYTBhMGEsCi0gIDB4NDk0OTQ5NDksIDB4MDYwNjA2MDYsIDB4MjQyNDI0MjQsIDB4NWM1YzVjNWMsCi0gIDB4YzJjMmMyYzIsIDB4ZDNkM2QzZDMsIDB4YWNhY2FjYWMsIDB4NjI2MjYyNjIsIAotICAweDkxOTE5MTkxLCAweDk1OTU5NTk1LCAweGU0ZTRlNGU0LCAweDc5Nzk3OTc5LAotICAweGU3ZTdlN2U3LCAweGM4YzhjOGM4LCAweDM3MzczNzM3LCAweDZkNmQ2ZDZkLAotICAweDhkOGQ4ZDhkLCAweGQ1ZDVkNWQ1LCAweDRlNGU0ZTRlLCAweGE5YTlhOWE5LCAKLSAgMHg2YzZjNmM2YywgMHg1NjU2NTY1NiwgMHhmNGY0ZjRmNCwgMHhlYWVhZWFlYSwKLSAgMHg2NTY1NjU2NSwgMHg3YTdhN2E3YSwgMHhhZWFlYWVhZSwgMHgwODA4MDgwOCwgCi0gIDB4YmFiYWJhYmEsIDB4Nzg3ODc4NzgsIDB4MjUyNTI1MjUsIDB4MmUyZTJlMmUsCi0gIDB4MWMxYzFjMWMsIDB4YTZhNmE2YTYsIDB4YjRiNGI0YjQsIDB4YzZjNmM2YzYsCi0gIDB4ZThlOGU4ZTgsIDB4ZGRkZGRkZGQsIDB4NzQ3NDc0NzQsIDB4MWYxZjFmMWYsCi0gIDB4NGI0YjRiNGIsIDB4YmRiZGJkYmQsIDB4OGI4YjhiOGIsIDB4OGE4YThhOGEsCi0gIDB4NzA3MDcwNzAsIDB4M2UzZTNlM2UsIDB4YjViNWI1YjUsIDB4NjY2NjY2NjYsCi0gIDB4NDg0ODQ4NDgsIDB4MDMwMzAzMDMsIDB4ZjZmNmY2ZjYsIDB4MGUwZTBlMGUsCi0gIDB4NjE2MTYxNjEsIDB4MzUzNTM1MzUsIDB4NTc1NzU3NTcsIDB4YjliOWI5YjksCi0gIDB4ODY4Njg2ODYsIDB4YzFjMWMxYzEsIDB4MWQxZDFkMWQsIDB4OWU5ZTllOWUsCi0gIDB4ZTFlMWUxZTEsIDB4ZjhmOGY4ZjgsIDB4OTg5ODk4OTgsIDB4MTExMTExMTEsIAotICAweDY5Njk2OTY5LCAweGQ5ZDlkOWQ5LCAweDhlOGU4ZThlLCAweDk0OTQ5NDk0LAotICAweDliOWI5YjliLCAweDFlMWUxZTFlLCAweDg3ODc4Nzg3LCAweGU5ZTllOWU5LAotICAweGNlY2VjZWNlLCAweDU1NTU1NTU1LCAweDI4MjgyODI4LCAweGRmZGZkZmRmLAotICAweDhjOGM4YzhjLCAweGExYTFhMWExLCAweDg5ODk4OTg5LCAweDBkMGQwZDBkLAotICAweGJmYmZiZmJmLCAweGU2ZTZlNmU2LCAweDQyNDI0MjQyLCAweDY4Njg2ODY4LAotICAweDQxNDE0MTQxLCAweDk5OTk5OTk5LCAweDJkMmQyZDJkLCAweDBmMGYwZjBmLAotICAweGIwYjBiMGIwLCAweDU0NTQ1NDU0LCAweGJiYmJiYmJiLCAweDE2MTYxNjE2CisjaWZkZWYgQ1BVX1JJU0MKKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KK3N0YXRpYyBjb25zdCB1aW50MzJfdCBUNFsyNTZdID0geworICAgIDB4NjM2MzYzNjMsIDB4N2M3YzdjN2MsIDB4Nzc3Nzc3NzcsIDB4N2I3YjdiN2IsCisgICAgMHhmMmYyZjJmMiwgMHg2YjZiNmI2YiwgMHg2ZjZmNmY2ZiwgMHhjNWM1YzVjNSwKKyAgICAweDMwMzAzMDMwLCAweDAxMDEwMTAxLCAweDY3Njc2NzY3LCAweDJiMmIyYjJiLAorICAgIDB4ZmVmZWZlZmUsIDB4ZDdkN2Q3ZDcsIDB4YWJhYmFiYWIsIDB4NzY3Njc2NzYsCisgICAgMHhjYWNhY2FjYSwgMHg4MjgyODI4MiwgMHhjOWM5YzljOSwgMHg3ZDdkN2Q3ZCwKKyAgICAweGZhZmFmYWZhLCAweDU5NTk1OTU5LCAweDQ3NDc0NzQ3LCAweGYwZjBmMGYwLAorICAgIDB4YWRhZGFkYWQsIDB4ZDRkNGQ0ZDQsIDB4YTJhMmEyYTIsIDB4YWZhZmFmYWYsCisgICAgMHg5YzljOWM5YywgMHhhNGE0YTRhNCwgMHg3MjcyNzI3MiwgMHhjMGMwYzBjMCwKKyAgICAweGI3YjdiN2I3LCAweGZkZmRmZGZkLCAweDkzOTM5MzkzLCAweDI2MjYyNjI2LAorICAgIDB4MzYzNjM2MzYsIDB4M2YzZjNmM2YsIDB4ZjdmN2Y3ZjcsIDB4Y2NjY2NjY2MsCisgICAgMHgzNDM0MzQzNCwgMHhhNWE1YTVhNSwgMHhlNWU1ZTVlNSwgMHhmMWYxZjFmMSwKKyAgICAweDcxNzE3MTcxLCAweGQ4ZDhkOGQ4LCAweDMxMzEzMTMxLCAweDE1MTUxNTE1LAorICAgIDB4MDQwNDA0MDQsIDB4YzdjN2M3YzcsIDB4MjMyMzIzMjMsIDB4YzNjM2MzYzMsCisgICAgMHgxODE4MTgxOCwgMHg5Njk2OTY5NiwgMHgwNTA1MDUwNSwgMHg5YTlhOWE5YSwKKyAgICAweDA3MDcwNzA3LCAweDEyMTIxMjEyLCAweDgwODA4MDgwLCAweGUyZTJlMmUyLAorICAgIDB4ZWJlYmViZWIsIDB4MjcyNzI3MjcsIDB4YjJiMmIyYjIsIDB4NzU3NTc1NzUsCisgICAgMHgwOTA5MDkwOSwgMHg4MzgzODM4MywgMHgyYzJjMmMyYywgMHgxYTFhMWExYSwKKyAgICAweDFiMWIxYjFiLCAweDZlNmU2ZTZlLCAweDVhNWE1YTVhLCAweGEwYTBhMGEwLAorICAgIDB4NTI1MjUyNTIsIDB4M2IzYjNiM2IsIDB4ZDZkNmQ2ZDYsIDB4YjNiM2IzYjMsCisgICAgMHgyOTI5MjkyOSwgMHhlM2UzZTNlMywgMHgyZjJmMmYyZiwgMHg4NDg0ODQ4NCwKKyAgICAweDUzNTM1MzUzLCAweGQxZDFkMWQxLCAweDAwMDAwMDAwLCAweGVkZWRlZGVkLAorICAgIDB4MjAyMDIwMjAsIDB4ZmNmY2ZjZmMsIDB4YjFiMWIxYjEsIDB4NWI1YjViNWIsCisgICAgMHg2YTZhNmE2YSwgMHhjYmNiY2JjYiwgMHhiZWJlYmViZSwgMHgzOTM5MzkzOSwKKyAgICAweDRhNGE0YTRhLCAweDRjNGM0YzRjLCAweDU4NTg1ODU4LCAweGNmY2ZjZmNmLAorICAgIDB4ZDBkMGQwZDAsIDB4ZWZlZmVmZWYsIDB4YWFhYWFhYWEsIDB4ZmJmYmZiZmIsCisgICAgMHg0MzQzNDM0MywgMHg0ZDRkNGQ0ZCwgMHgzMzMzMzMzMywgMHg4NTg1ODU4NSwKKyAgICAweDQ1NDU0NTQ1LCAweGY5ZjlmOWY5LCAweDAyMDIwMjAyLCAweDdmN2Y3ZjdmLAorICAgIDB4NTA1MDUwNTAsIDB4M2MzYzNjM2MsIDB4OWY5ZjlmOWYsIDB4YThhOGE4YTgsCisgICAgMHg1MTUxNTE1MSwgMHhhM2EzYTNhMywgMHg0MDQwNDA0MCwgMHg4ZjhmOGY4ZiwKKyAgICAweDkyOTI5MjkyLCAweDlkOWQ5ZDlkLCAweDM4MzgzODM4LCAweGY1ZjVmNWY1LAorICAgIDB4YmNiY2JjYmMsIDB4YjZiNmI2YjYsIDB4ZGFkYWRhZGEsIDB4MjEyMTIxMjEsCisgICAgMHgxMDEwMTAxMCwgMHhmZmZmZmZmZiwgMHhmM2YzZjNmMywgMHhkMmQyZDJkMiwKKyAgICAweGNkY2RjZGNkLCAweDBjMGMwYzBjLCAweDEzMTMxMzEzLCAweGVjZWNlY2VjLAorICAgIDB4NWY1ZjVmNWYsIDB4OTc5Nzk3OTcsIDB4NDQ0NDQ0NDQsIDB4MTcxNzE3MTcsCisgICAgMHhjNGM0YzRjNCwgMHhhN2E3YTdhNywgMHg3ZTdlN2U3ZSwgMHgzZDNkM2QzZCwKKyAgICAweDY0NjQ2NDY0LCAweDVkNWQ1ZDVkLCAweDE5MTkxOTE5LCAweDczNzM3MzczLAorICAgIDB4NjA2MDYwNjAsIDB4ODE4MTgxODEsIDB4NGY0ZjRmNGYsIDB4ZGNkY2RjZGMsCisgICAgMHgyMjIyMjIyMiwgMHgyYTJhMmEyYSwgMHg5MDkwOTA5MCwgMHg4ODg4ODg4OCwKKyAgICAweDQ2NDY0NjQ2LCAweGVlZWVlZWVlLCAweGI4YjhiOGI4LCAweDE0MTQxNDE0LAorICAgIDB4ZGVkZWRlZGUsIDB4NWU1ZTVlNWUsIDB4MGIwYjBiMGIsIDB4ZGJkYmRiZGIsCisgICAgMHhlMGUwZTBlMCwgMHgzMjMyMzIzMiwgMHgzYTNhM2EzYSwgMHgwYTBhMGEwYSwKKyAgICAweDQ5NDk0OTQ5LCAweDA2MDYwNjA2LCAweDI0MjQyNDI0LCAweDVjNWM1YzVjLAorICAgIDB4YzJjMmMyYzIsIDB4ZDNkM2QzZDMsIDB4YWNhY2FjYWMsIDB4NjI2MjYyNjIsCisgICAgMHg5MTkxOTE5MSwgMHg5NTk1OTU5NSwgMHhlNGU0ZTRlNCwgMHg3OTc5Nzk3OSwKKyAgICAweGU3ZTdlN2U3LCAweGM4YzhjOGM4LCAweDM3MzczNzM3LCAweDZkNmQ2ZDZkLAorICAgIDB4OGQ4ZDhkOGQsIDB4ZDVkNWQ1ZDUsIDB4NGU0ZTRlNGUsIDB4YTlhOWE5YTksCisgICAgMHg2YzZjNmM2YywgMHg1NjU2NTY1NiwgMHhmNGY0ZjRmNCwgMHhlYWVhZWFlYSwKKyAgICAweDY1NjU2NTY1LCAweDdhN2E3YTdhLCAweGFlYWVhZWFlLCAweDA4MDgwODA4LAorICAgIDB4YmFiYWJhYmEsIDB4Nzg3ODc4NzgsIDB4MjUyNTI1MjUsIDB4MmUyZTJlMmUsCisgICAgMHgxYzFjMWMxYywgMHhhNmE2YTZhNiwgMHhiNGI0YjRiNCwgMHhjNmM2YzZjNiwKKyAgICAweGU4ZThlOGU4LCAweGRkZGRkZGRkLCAweDc0NzQ3NDc0LCAweDFmMWYxZjFmLAorICAgIDB4NGI0YjRiNGIsIDB4YmRiZGJkYmQsIDB4OGI4YjhiOGIsIDB4OGE4YThhOGEsCisgICAgMHg3MDcwNzA3MCwgMHgzZTNlM2UzZSwgMHhiNWI1YjViNSwgMHg2NjY2NjY2NiwKKyAgICAweDQ4NDg0ODQ4LCAweDAzMDMwMzAzLCAweGY2ZjZmNmY2LCAweDBlMGUwZTBlLAorICAgIDB4NjE2MTYxNjEsIDB4MzUzNTM1MzUsIDB4NTc1NzU3NTcsIDB4YjliOWI5YjksCisgICAgMHg4Njg2ODY4NiwgMHhjMWMxYzFjMSwgMHgxZDFkMWQxZCwgMHg5ZTllOWU5ZSwKKyAgICAweGUxZTFlMWUxLCAweGY4ZjhmOGY4LCAweDk4OTg5ODk4LCAweDExMTExMTExLAorICAgIDB4Njk2OTY5NjksIDB4ZDlkOWQ5ZDksIDB4OGU4ZThlOGUsIDB4OTQ5NDk0OTQsCisgICAgMHg5YjliOWI5YiwgMHgxZTFlMWUxZSwgMHg4Nzg3ODc4NywgMHhlOWU5ZTllOSwKKyAgICAweGNlY2VjZWNlLCAweDU1NTU1NTU1LCAweDI4MjgyODI4LCAweGRmZGZkZmRmLAorICAgIDB4OGM4YzhjOGMsIDB4YTFhMWExYTEsIDB4ODk4OTg5ODksIDB4MGQwZDBkMGQsCisgICAgMHhiZmJmYmZiZiwgMHhlNmU2ZTZlNiwgMHg0MjQyNDI0MiwgMHg2ODY4Njg2OCwKKyAgICAweDQxNDE0MTQxLCAweDk5OTk5OTk5LCAweDJkMmQyZDJkLCAweDBmMGYwZjBmLAorICAgIDB4YjBiMGIwYjAsIDB4NTQ1NDU0NTQsIDB4YmJiYmJiYmIsIDB4MTYxNjE2MTYKIH07CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KIAotdWludDMyX3QgVTRbMjU2XSA9IHsKLSAgMHg1MjUyNTI1MiwgMHg5MDkwOTA5LCAweDZhNmE2YTZhLCAweGQ1ZDVkNWQ1LCAKLSAgMHgzMDMwMzAzMCwgMHgzNjM2MzYzNiwgMHhhNWE1YTVhNSwgMHgzODM4MzgzOCwgCi0gIDB4YmZiZmJmYmYsIDB4NDA0MDQwNDAsIDB4YTNhM2EzYTMsIDB4OWU5ZTllOWUsIAotICAweDgxODE4MTgxLCAweGYzZjNmM2YzLCAweGQ3ZDdkN2Q3LCAweGZiZmJmYmZiLCAKLSAgMHg3YzdjN2M3YywgMHhlM2UzZTNlMywgMHgzOTM5MzkzOSwgMHg4MjgyODI4MiwgCi0gIDB4OWI5YjliOWIsIDB4MmYyZjJmMmYsIDB4ZmZmZmZmZmYsIDB4ODc4Nzg3ODcsIAotICAweDM0MzQzNDM0LCAweDhlOGU4ZThlLCAweDQzNDM0MzQzLCAweDQ0NDQ0NDQ0LCAKLSAgMHhjNGM0YzRjNCwgMHhkZWRlZGVkZSwgMHhlOWU5ZTllOSwgMHhjYmNiY2JjYiwgCi0gIDB4NTQ1NDU0NTQsIDB4N2I3YjdiN2IsIDB4OTQ5NDk0OTQsIDB4MzIzMjMyMzIsIAotICAweGE2YTZhNmE2LCAweGMyYzJjMmMyLCAweDIzMjMyMzIzLCAweDNkM2QzZDNkLCAKLSAgMHhlZWVlZWVlZSwgMHg0YzRjNGM0YywgMHg5NTk1OTU5NSwgMHhiMGIwYjBiLCAKLSAgMHg0MjQyNDI0MiwgMHhmYWZhZmFmYSwgMHhjM2MzYzNjMywgMHg0ZTRlNGU0ZSwgCi0gIDB4ODA4MDgwOCwgMHgyZTJlMmUyZSwgMHhhMWExYTFhMSwgMHg2NjY2NjY2NiwgCi0gIDB4MjgyODI4MjgsIDB4ZDlkOWQ5ZDksIDB4MjQyNDI0MjQsIDB4YjJiMmIyYjIsIAotICAweDc2NzY3Njc2LCAweDViNWI1YjViLCAweGEyYTJhMmEyLCAweDQ5NDk0OTQ5LCAKLSAgMHg2ZDZkNmQ2ZCwgMHg4YjhiOGI4YiwgMHhkMWQxZDFkMSwgMHgyNTI1MjUyNSwgCi0gIDB4NzI3MjcyNzIsIDB4ZjhmOGY4ZjgsIDB4ZjZmNmY2ZjYsIDB4NjQ2NDY0NjQsIAotICAweDg2ODY4Njg2LCAweDY4Njg2ODY4LCAweDk4OTg5ODk4LCAweDE2MTYxNjE2LCAKLSAgMHhkNGQ0ZDRkNCwgMHhhNGE0YTRhNCwgMHg1YzVjNWM1YywgMHhjY2NjY2NjYywgCi0gIDB4NWQ1ZDVkNWQsIDB4NjU2NTY1NjUsIDB4YjZiNmI2YjYsIDB4OTI5MjkyOTIsIAotICAweDZjNmM2YzZjLCAweDcwNzA3MDcwLCAweDQ4NDg0ODQ4LCAweDUwNTA1MDUwLCAKLSAgMHhmZGZkZmRmZCwgMHhlZGVkZWRlZCwgMHhiOWI5YjliOSwgMHhkYWRhZGFkYSwgCi0gIDB4NWU1ZTVlNWUsIDB4MTUxNTE1MTUsIDB4NDY0NjQ2NDYsIDB4NTc1NzU3NTcsIAotICAweGE3YTdhN2E3LCAweDhkOGQ4ZDhkLCAweDlkOWQ5ZDlkLCAweDg0ODQ4NDg0LCAKLSAgMHg5MDkwOTA5MCwgMHhkOGQ4ZDhkOCwgMHhhYmFiYWJhYiwgMHgwLCAKLSAgMHg4YzhjOGM4YywgMHhiY2JjYmNiYywgMHhkM2QzZDNkMywgMHhhMGEwYTBhLCAKLSAgMHhmN2Y3ZjdmNywgMHhlNGU0ZTRlNCwgMHg1ODU4NTg1OCwgMHg1MDUwNTA1LCAKLSAgMHhiOGI4YjhiOCwgMHhiM2IzYjNiMywgMHg0NTQ1NDU0NSwgMHg2MDYwNjA2LCAKLSAgMHhkMGQwZDBkMCwgMHgyYzJjMmMyYywgMHgxZTFlMWUxZSwgMHg4ZjhmOGY4ZiwgCi0gIDB4Y2FjYWNhY2EsIDB4M2YzZjNmM2YsIDB4ZjBmMGYwZiwgMHgyMDIwMjAyLCAKLSAgMHhjMWMxYzFjMSwgMHhhZmFmYWZhZiwgMHhiZGJkYmRiZCwgMHgzMDMwMzAzLCAKLSAgMHgxMDEwMTAxLCAweDEzMTMxMzEzLCAweDhhOGE4YThhLCAweDZiNmI2YjZiLCAKLSAgMHgzYTNhM2EzYSwgMHg5MTkxOTE5MSwgMHgxMTExMTExMSwgMHg0MTQxNDE0MSwgCi0gIDB4NGY0ZjRmNGYsIDB4Njc2NzY3NjcsIDB4ZGNkY2RjZGMsIDB4ZWFlYWVhZWEsIAotICAweDk3OTc5Nzk3LCAweGYyZjJmMmYyLCAweGNmY2ZjZmNmLCAweGNlY2VjZWNlLCAKLSAgMHhmMGYwZjBmMCwgMHhiNGI0YjRiNCwgMHhlNmU2ZTZlNiwgMHg3MzczNzM3MywgCi0gIDB4OTY5Njk2OTYsIDB4YWNhY2FjYWMsIDB4NzQ3NDc0NzQsIDB4MjIyMjIyMjIsIAotICAweGU3ZTdlN2U3LCAweGFkYWRhZGFkLCAweDM1MzUzNTM1LCAweDg1ODU4NTg1LCAKLSAgMHhlMmUyZTJlMiwgMHhmOWY5ZjlmOSwgMHgzNzM3MzczNywgMHhlOGU4ZThlOCwgCi0gIDB4MWMxYzFjMWMsIDB4NzU3NTc1NzUsIDB4ZGZkZmRmZGYsIDB4NmU2ZTZlNmUsIAotICAweDQ3NDc0NzQ3LCAweGYxZjFmMWYxLCAweDFhMWExYTFhLCAweDcxNzE3MTcxLCAKLSAgMHgxZDFkMWQxZCwgMHgyOTI5MjkyOSwgMHhjNWM1YzVjNSwgMHg4OTg5ODk4OSwgCi0gIDB4NmY2ZjZmNmYsIDB4YjdiN2I3YjcsIDB4NjI2MjYyNjIsIDB4ZTBlMGUwZSwgCi0gIDB4YWFhYWFhYWEsIDB4MTgxODE4MTgsIDB4YmViZWJlYmUsIDB4MWIxYjFiMWIsIAotICAweGZjZmNmY2ZjLCAweDU2NTY1NjU2LCAweDNlM2UzZTNlLCAweDRiNGI0YjRiLCAKLSAgMHhjNmM2YzZjNiwgMHhkMmQyZDJkMiwgMHg3OTc5Nzk3OSwgMHgyMDIwMjAyMCwgCi0gIDB4OWE5YTlhOWEsIDB4ZGJkYmRiZGIsIDB4YzBjMGMwYzAsIDB4ZmVmZWZlZmUsIAotICAweDc4Nzg3ODc4LCAweGNkY2RjZGNkLCAweDVhNWE1YTVhLCAweGY0ZjRmNGY0LCAKLSAgMHgxZjFmMWYxZiwgMHhkZGRkZGRkZCwgMHhhOGE4YThhOCwgMHgzMzMzMzMzMywgCi0gIDB4ODg4ODg4ODgsIDB4NzA3MDcwNywgMHhjN2M3YzdjNywgMHgzMTMxMzEzMSwgCi0gIDB4YjFiMWIxYjEsIDB4MTIxMjEyMTIsIDB4MTAxMDEwMTAsIDB4NTk1OTU5NTksIAotICAweDI3MjcyNzI3LCAweDgwODA4MDgwLCAweGVjZWNlY2VjLCAweDVmNWY1ZjVmLCAKLSAgMHg2MDYwNjA2MCwgMHg1MTUxNTE1MSwgMHg3ZjdmN2Y3ZiwgMHhhOWE5YTlhOSwgCi0gIDB4MTkxOTE5MTksIDB4YjViNWI1YjUsIDB4NGE0YTRhNGEsIDB4ZDBkMGQwZCwgCi0gIDB4MmQyZDJkMmQsIDB4ZTVlNWU1ZTUsIDB4N2E3YTdhN2EsIDB4OWY5ZjlmOWYsIAotICAweDkzOTM5MzkzLCAweGM5YzljOWM5LCAweDljOWM5YzljLCAweGVmZWZlZmVmLCAKLSAgMHhhMGEwYTBhMCwgMHhlMGUwZTBlMCwgMHgzYjNiM2IzYiwgMHg0ZDRkNGQ0ZCwgCi0gIDB4YWVhZWFlYWUsIDB4MmEyYTJhMmEsIDB4ZjVmNWY1ZjUsIDB4YjBiMGIwYjAsIAotICAweGM4YzhjOGM4LCAweGViZWJlYmViLCAweGJiYmJiYmJiLCAweDNjM2MzYzNjLCAKLSAgMHg4MzgzODM4MywgMHg1MzUzNTM1MywgMHg5OTk5OTk5OSwgMHg2MTYxNjE2MSwgCi0gIDB4MTcxNzE3MTcsIDB4MmIyYjJiMmIsIDB4NDA0MDQwNCwgMHg3ZTdlN2U3ZSwgCi0gIDB4YmFiYWJhYmEsIDB4Nzc3Nzc3NzcsIDB4ZDZkNmQ2ZDYsIDB4MjYyNjI2MjYsIAotICAweGUxZTFlMWUxLCAweDY5Njk2OTY5LCAweDE0MTQxNDE0LCAweDYzNjM2MzYzLCAKLSAgMHg1NTU1NTU1NSwgMHgyMTIxMjEyMSwgMHhjMGMwYzBjLCAweDdkN2Q3ZDdkCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgY29uc3QgdWludDMyX3QgVTRbMjU2XSA9IHsKKyAgICAweDUyNTI1MjUyLCAweDkwOTA5MDksICAgMHg2YTZhNmE2YSwgIDB4ZDVkNWQ1ZDUsCisgICAgMHgzMDMwMzAzMCwgMHgzNjM2MzYzNiwgIDB4YTVhNWE1YTUsICAweDM4MzgzODM4LAorICAgIDB4YmZiZmJmYmYsIDB4NDA0MDQwNDAsICAweGEzYTNhM2EzLCAgMHg5ZTllOWU5ZSwKKyAgICAweDgxODE4MTgxLCAweGYzZjNmM2YzLCAgMHhkN2Q3ZDdkNywgIDB4ZmJmYmZiZmIsCisgICAgMHg3YzdjN2M3YywgMHhlM2UzZTNlMywgIDB4MzkzOTM5MzksICAweDgyODI4MjgyLAorICAgIDB4OWI5YjliOWIsIDB4MmYyZjJmMmYsICAweGZmZmZmZmZmLCAgMHg4Nzg3ODc4NywKKyAgICAweDM0MzQzNDM0LCAweDhlOGU4ZThlLCAgMHg0MzQzNDM0MywgIDB4NDQ0NDQ0NDQsCisgICAgMHhjNGM0YzRjNCwgMHhkZWRlZGVkZSwgIDB4ZTllOWU5ZTksICAweGNiY2JjYmNiLAorICAgIDB4NTQ1NDU0NTQsIDB4N2I3YjdiN2IsICAweDk0OTQ5NDk0LCAgMHgzMjMyMzIzMiwKKyAgICAweGE2YTZhNmE2LCAweGMyYzJjMmMyLCAgMHgyMzIzMjMyMywgIDB4M2QzZDNkM2QsCisgICAgMHhlZWVlZWVlZSwgMHg0YzRjNGM0YywgIDB4OTU5NTk1OTUsICAweGIwYjBiMGIsCisgICAgMHg0MjQyNDI0MiwgMHhmYWZhZmFmYSwgIDB4YzNjM2MzYzMsICAweDRlNGU0ZTRlLAorICAgIDB4ODA4MDgwOCwgIDB4MmUyZTJlMmUsICAweGExYTFhMWExLCAgMHg2NjY2NjY2NiwKKyAgICAweDI4MjgyODI4LCAweGQ5ZDlkOWQ5LCAgMHgyNDI0MjQyNCwgIDB4YjJiMmIyYjIsCisgICAgMHg3Njc2NzY3NiwgMHg1YjViNWI1YiwgIDB4YTJhMmEyYTIsICAweDQ5NDk0OTQ5LAorICAgIDB4NmQ2ZDZkNmQsIDB4OGI4YjhiOGIsICAweGQxZDFkMWQxLCAgMHgyNTI1MjUyNSwKKyAgICAweDcyNzI3MjcyLCAweGY4ZjhmOGY4LCAgMHhmNmY2ZjZmNiwgIDB4NjQ2NDY0NjQsCisgICAgMHg4Njg2ODY4NiwgMHg2ODY4Njg2OCwgIDB4OTg5ODk4OTgsICAweDE2MTYxNjE2LAorICAgIDB4ZDRkNGQ0ZDQsIDB4YTRhNGE0YTQsICAweDVjNWM1YzVjLCAgMHhjY2NjY2NjYywKKyAgICAweDVkNWQ1ZDVkLCAweDY1NjU2NTY1LCAgMHhiNmI2YjZiNiwgIDB4OTI5MjkyOTIsCisgICAgMHg2YzZjNmM2YywgMHg3MDcwNzA3MCwgIDB4NDg0ODQ4NDgsICAweDUwNTA1MDUwLAorICAgIDB4ZmRmZGZkZmQsIDB4ZWRlZGVkZWQsICAweGI5YjliOWI5LCAgMHhkYWRhZGFkYSwKKyAgICAweDVlNWU1ZTVlLCAweDE1MTUxNTE1LCAgMHg0NjQ2NDY0NiwgIDB4NTc1NzU3NTcsCisgICAgMHhhN2E3YTdhNywgMHg4ZDhkOGQ4ZCwgIDB4OWQ5ZDlkOWQsICAweDg0ODQ4NDg0LAorICAgIDB4OTA5MDkwOTAsIDB4ZDhkOGQ4ZDgsICAweGFiYWJhYmFiLCAgMHgwLAorICAgIDB4OGM4YzhjOGMsIDB4YmNiY2JjYmMsICAweGQzZDNkM2QzLCAgMHhhMGEwYTBhLAorICAgIDB4ZjdmN2Y3ZjcsIDB4ZTRlNGU0ZTQsICAweDU4NTg1ODU4LCAgMHg1MDUwNTA1LAorICAgIDB4YjhiOGI4YjgsIDB4YjNiM2IzYjMsICAweDQ1NDU0NTQ1LCAgMHg2MDYwNjA2LAorICAgIDB4ZDBkMGQwZDAsIDB4MmMyYzJjMmMsICAweDFlMWUxZTFlLCAgMHg4ZjhmOGY4ZiwKKyAgICAweGNhY2FjYWNhLCAweDNmM2YzZjNmLCAgMHhmMGYwZjBmLCAgIDB4MjAyMDIwMiwKKyAgICAweGMxYzFjMWMxLCAweGFmYWZhZmFmLCAgMHhiZGJkYmRiZCwgIDB4MzAzMDMwMywKKyAgICAweDEwMTAxMDEsICAweDEzMTMxMzEzLCAgMHg4YThhOGE4YSwgIDB4NmI2YjZiNmIsCisgICAgMHgzYTNhM2EzYSwgMHg5MTkxOTE5MSwgIDB4MTExMTExMTEsICAweDQxNDE0MTQxLAorICAgIDB4NGY0ZjRmNGYsIDB4Njc2NzY3NjcsICAweGRjZGNkY2RjLCAgMHhlYWVhZWFlYSwKKyAgICAweDk3OTc5Nzk3LCAweGYyZjJmMmYyLCAgMHhjZmNmY2ZjZiwgIDB4Y2VjZWNlY2UsCisgICAgMHhmMGYwZjBmMCwgMHhiNGI0YjRiNCwgIDB4ZTZlNmU2ZTYsICAweDczNzM3MzczLAorICAgIDB4OTY5Njk2OTYsIDB4YWNhY2FjYWMsICAweDc0NzQ3NDc0LCAgMHgyMjIyMjIyMiwKKyAgICAweGU3ZTdlN2U3LCAweGFkYWRhZGFkLCAgMHgzNTM1MzUzNSwgIDB4ODU4NTg1ODUsCisgICAgMHhlMmUyZTJlMiwgMHhmOWY5ZjlmOSwgIDB4MzczNzM3MzcsICAweGU4ZThlOGU4LAorICAgIDB4MWMxYzFjMWMsIDB4NzU3NTc1NzUsICAweGRmZGZkZmRmLCAgMHg2ZTZlNmU2ZSwKKyAgICAweDQ3NDc0NzQ3LCAweGYxZjFmMWYxLCAgMHgxYTFhMWExYSwgIDB4NzE3MTcxNzEsCisgICAgMHgxZDFkMWQxZCwgMHgyOTI5MjkyOSwgIDB4YzVjNWM1YzUsICAweDg5ODk4OTg5LAorICAgIDB4NmY2ZjZmNmYsIDB4YjdiN2I3YjcsICAweDYyNjI2MjYyLCAgMHhlMGUwZTBlLAorICAgIDB4YWFhYWFhYWEsIDB4MTgxODE4MTgsICAweGJlYmViZWJlLCAgMHgxYjFiMWIxYiwKKyAgICAweGZjZmNmY2ZjLCAweDU2NTY1NjU2LCAgMHgzZTNlM2UzZSwgIDB4NGI0YjRiNGIsCisgICAgMHhjNmM2YzZjNiwgMHhkMmQyZDJkMiwgIDB4Nzk3OTc5NzksICAweDIwMjAyMDIwLAorICAgIDB4OWE5YTlhOWEsIDB4ZGJkYmRiZGIsICAweGMwYzBjMGMwLCAgMHhmZWZlZmVmZSwKKyAgICAweDc4Nzg3ODc4LCAweGNkY2RjZGNkLCAgMHg1YTVhNWE1YSwgIDB4ZjRmNGY0ZjQsCisgICAgMHgxZjFmMWYxZiwgMHhkZGRkZGRkZCwgIDB4YThhOGE4YTgsICAweDMzMzMzMzMzLAorICAgIDB4ODg4ODg4ODgsIDB4NzA3MDcwNywgICAweGM3YzdjN2M3LCAgMHgzMTMxMzEzMSwKKyAgICAweGIxYjFiMWIxLCAweDEyMTIxMjEyLCAgMHgxMDEwMTAxMCwgIDB4NTk1OTU5NTksCisgICAgMHgyNzI3MjcyNywgMHg4MDgwODA4MCwgIDB4ZWNlY2VjZWMsICAweDVmNWY1ZjVmLAorICAgIDB4NjA2MDYwNjAsIDB4NTE1MTUxNTEsICAweDdmN2Y3ZjdmLCAgMHhhOWE5YTlhOSwKKyAgICAweDE5MTkxOTE5LCAweGI1YjViNWI1LCAgMHg0YTRhNGE0YSwgIDB4ZDBkMGQwZCwKKyAgICAweDJkMmQyZDJkLCAweGU1ZTVlNWU1LCAgMHg3YTdhN2E3YSwgIDB4OWY5ZjlmOWYsCisgICAgMHg5MzkzOTM5MywgMHhjOWM5YzljOSwgIDB4OWM5YzljOWMsICAweGVmZWZlZmVmLAorICAgIDB4YTBhMGEwYTAsIDB4ZTBlMGUwZTAsICAweDNiM2IzYjNiLCAgMHg0ZDRkNGQ0ZCwKKyAgICAweGFlYWVhZWFlLCAweDJhMmEyYTJhLCAgMHhmNWY1ZjVmNSwgIDB4YjBiMGIwYjAsCisgICAgMHhjOGM4YzhjOCwgMHhlYmViZWJlYiwgIDB4YmJiYmJiYmIsICAweDNjM2MzYzNjLAorICAgIDB4ODM4MzgzODMsIDB4NTM1MzUzNTMsICAweDk5OTk5OTk5LCAgMHg2MTYxNjE2MSwKKyAgICAweDE3MTcxNzE3LCAweDJiMmIyYjJiLCAgMHg0MDQwNDA0LCAgIDB4N2U3ZTdlN2UsCisgICAgMHhiYWJhYmFiYSwgMHg3Nzc3Nzc3NywgIDB4ZDZkNmQ2ZDYsICAweDI2MjYyNjI2LAorICAgIDB4ZTFlMWUxZTEsIDB4Njk2OTY5NjksICAweDE0MTQxNDE0LCAgMHg2MzYzNjM2MywKKyAgICAweDU1NTU1NTU1LCAweDIxMjEyMTIxLCAgMHhjMGMwYzBjLCAgIDB4N2Q3ZDdkN2QKIH07CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKyNlbmRpZiAvKiBDUFVfUklTQyAqLwogCi0KKyNkZWZpbmUgZ2YyXzhfZmllbGRfcG9seW5vbWlhbCAweDFCCisvKgorICogZ2YyXzhfc2hpZnQoeikgcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBHRigyXjgpICdtdWx0aXBseSBieSB4JworICogb3BlcmF0aW9uLCB1c2luZyB0aGUgZmllbGQgcmVwcmVzZW50YXRpb24gZnJvbSBBRVM7IHRoYXQgaXMsIHRoZQorICogbmV4dCBnZjJfOCB2YWx1ZSBpbiB0aGUgY3ljbGljIHJlcHJlc2VudGF0aW9uIG9mIHRoYXQgZmllbGQuICBUaGUKKyAqIHZhbHVlIHogc2hvdWxkIGJlIGFuIHVpbnQ4X3QuCisgKi8KKyNkZWZpbmUgZ2YyXzhfc2hpZnQoeikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCgoeikmMTI4KSA/ICgoKHopIDw8IDEpIF4gZ2YyXzhfZmllbGRfcG9seW5vbWlhbCkgOiAoKHopIDw8IDEpKQogCiAvKiBhZXMgaW50ZXJuYWxzICovCiAKLS8qCi0gKiBnZjJfOF9zaGlmdCh4KSByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIEdGKDJeOCkgJ211bHRpcGx5IGJ5IHgnIAotICogb3BlcmF0aW9uLCB1c2luZyB0aGUgZmllbGQgcmVwcmVzZW50YXRpb24gZnJvbSBBRVMuICBUaGlzIGZ1bmN0aW9uCi0gKiBpcyB1c2VkIGluIHRoZSBBRVMga2V5IGV4cGFuc2lvbiByb3V0aW5lLgotICovCitzdGF0aWMgdm9pZCBhZXNfMTI4X2V4cGFuZF9lbmNyeXB0aW9uX2tleShjb25zdCB1aW50OF90ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX2Flc19leHBhbmRlZF9rZXlfdCAqZXhwYW5kZWRfa2V5KQoreworICAgIGludCBpOworICAgIHVpbnQ4X3QgcmM7CiAKLWlubGluZSBnZjJfOAotZ2YyXzhfc2hpZnQoZ2YyXzggaW5wdXQpIHsKLSAgaWYgKChpbnB1dCAmIDEyOCkgPT0gMCkKLSAgICByZXR1cm4gaW5wdXQgPDwgMTsKLSAgZWxzZQotICAgIHJldHVybiAoaW5wdXQgPDwgMSkgXiBnZjJfOF9maWVsZF9wb2x5bm9taWFsOyAKKyAgICAvKiBpbml0aWFsaXplIHJvdW5kIGNvbnN0YW50ICovCisgICAgcmMgPSAxOworCisgICAgZXhwYW5kZWRfa2V5LT5udW1fcm91bmRzID0gMTA7CisKKyAgICB2MTI4X2NvcHlfb2N0ZXRfc3RyaW5nKCZleHBhbmRlZF9rZXktPnJvdW5kWzBdLCBrZXkpOworCisjaWYgMAorICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX2Flc19pY20sCisgICAgICAgICAgICAgICAgImV4cGFuZGVkIGtleVswXTogICVzIiwgdjEyOF9oZXhfc3RyaW5nKCZleHBhbmRlZF9rZXktPnJvdW5kWzBdKSk7CisjZW5kaWYKKworICAgIC8qIGxvb3Agb3ZlciByb3VuZCBrZXlzICovCisgICAgZm9yIChpID0gMTsgaSA8IDExOyBpKyspIHsKKyAgICAgICAgLyogbXVuZ2UgZmlyc3Qgd29yZCBvZiByb3VuZCBrZXkgKi8KKyAgICAgICAgZXhwYW5kZWRfa2V5LT5yb3VuZFtpXS52OFswXSA9CisgICAgICAgICAgICBhZXNfc2JveFtleHBhbmRlZF9rZXktPnJvdW5kW2kgLSAxXS52OFsxM11dIF4gcmM7CisgICAgICAgIGV4cGFuZGVkX2tleS0+cm91bmRbaV0udjhbMV0gPQorICAgICAgICAgICAgYWVzX3Nib3hbZXhwYW5kZWRfa2V5LT5yb3VuZFtpIC0gMV0udjhbMTRdXTsKKyAgICAgICAgZXhwYW5kZWRfa2V5LT5yb3VuZFtpXS52OFsyXSA9CisgICAgICAgICAgICBhZXNfc2JveFtleHBhbmRlZF9rZXktPnJvdW5kW2kgLSAxXS52OFsxNV1dOworICAgICAgICBleHBhbmRlZF9rZXktPnJvdW5kW2ldLnY4WzNdID0KKyAgICAgICAgICAgIGFlc19zYm94W2V4cGFuZGVkX2tleS0+cm91bmRbaSAtIDFdLnY4WzEyXV07CisKKyAgICAgICAgZXhwYW5kZWRfa2V5LT5yb3VuZFtpXS52MzJbMF0gXj0gZXhwYW5kZWRfa2V5LT5yb3VuZFtpIC0gMV0udjMyWzBdOworCisgICAgICAgIC8qIHNldCByZW1haW5pbmcgMzIgYml0IHdvcmRzIHRvIHRoZSBleG9yIG9mIHRoZSBvbmUgcHJldmlvdXMgd2l0aAorICAgICAgICAgKiB0aGUgb25lIGZvdXIgd29yZHMgcHJldmlvdXMgKi8KKworICAgICAgICBleHBhbmRlZF9rZXktPnJvdW5kW2ldLnYzMlsxXSA9CisgICAgICAgICAgICBleHBhbmRlZF9rZXktPnJvdW5kW2ldLnYzMlswXSBeIGV4cGFuZGVkX2tleS0+cm91bmRbaSAtIDFdLnYzMlsxXTsKKworICAgICAgICBleHBhbmRlZF9rZXktPnJvdW5kW2ldLnYzMlsyXSA9CisgICAgICAgICAgICBleHBhbmRlZF9rZXktPnJvdW5kW2ldLnYzMlsxXSBeIGV4cGFuZGVkX2tleS0+cm91bmRbaSAtIDFdLnYzMlsyXTsKKworICAgICAgICBleHBhbmRlZF9rZXktPnJvdW5kW2ldLnYzMlszXSA9CisgICAgICAgICAgICBleHBhbmRlZF9rZXktPnJvdW5kW2ldLnYzMlsyXSBeIGV4cGFuZGVkX2tleS0+cm91bmRbaSAtIDFdLnYzMlszXTsKKworI2lmIDAKKyAgICAgICAgZGVidWdfcHJpbnQyKHNydHBfbW9kX2Flc19pY20sCisgICAgICAgICAgICAgICAgICAgICAiZXhwYW5kZWQga2V5WyVkXTogICVzIiwgaSwgdjEyOF9oZXhfc3RyaW5nKCZleHBhbmRlZF9rZXktPnJvdW5kW2ldKSk7CisjZW5kaWYKKworICAgICAgICAvKiBtb2RpZnkgcm91bmQgY29uc3RhbnQgKi8KKyAgICAgICAgcmMgPSBnZjJfOF9zaGlmdChyYyk7CisgICAgfQogfQogCi1pbmxpbmUgdm9pZAotYWVzX2V4cGFuZF9lbmNyeXB0aW9uX2tleShjb25zdCB2MTI4X3Qga2V5LCAKLQkJCSAgYWVzX2V4cGFuZGVkX2tleV90IGV4cGFuZGVkX2tleSkgewotICBpbnQgaTsKLSAgZ2YyXzggcmM7CitzdGF0aWMgdm9pZCBhZXNfMjU2X2V4cGFuZF9lbmNyeXB0aW9uX2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX2Flc19leHBhbmRlZF9rZXlfdCAqZXhwYW5kZWRfa2V5KQoreworICAgIGludCBpOworICAgIHVpbnQ4X3QgcmM7CiAKLSAgLyogaW5pdGlhbGl6ZSByb3VuZCBjb25zdGFudCAqLwotICByYyA9IDE7Ci0gIAotICBleHBhbmRlZF9rZXlbMF0udjMyWzBdID0ga2V5LnYzMlswXTsKLSAgZXhwYW5kZWRfa2V5WzBdLnYzMlsxXSA9IGtleS52MzJbMV07Ci0gIGV4cGFuZGVkX2tleVswXS52MzJbMl0gPSBrZXkudjMyWzJdOwotICBleHBhbmRlZF9rZXlbMF0udjMyWzNdID0ga2V5LnYzMlszXTsKKyAgICAvKiBpbml0aWFsaXplIHJvdW5kIGNvbnN0YW50ICovCisgICAgcmMgPSAxOwogCi0gIC8qIGxvb3Agb3ZlciByb3VuZCBrZXlzICovCi0gIGZvciAoaT0xOyBpIDwgMTE7IGkrKykgeworICAgIGV4cGFuZGVkX2tleS0+bnVtX3JvdW5kcyA9IDE0OwogCi0gICAgLyogbXVuZ2UgZmlyc3Qgd29yZCBvZiByb3VuZCBrZXkgKi8KLSAgICBleHBhbmRlZF9rZXlbaV0ub2N0ZXRbMF0gPSBhZXNfc2JveFtleHBhbmRlZF9rZXlbaS0xXS5vY3RldFsxM11dIF4gcmM7Ci0gICAgZXhwYW5kZWRfa2V5W2ldLm9jdGV0WzFdID0gYWVzX3Nib3hbZXhwYW5kZWRfa2V5W2ktMV0ub2N0ZXRbMTRdXTsKLSAgICBleHBhbmRlZF9rZXlbaV0ub2N0ZXRbMl0gPSBhZXNfc2JveFtleHBhbmRlZF9rZXlbaS0xXS5vY3RldFsxNV1dOwotICAgIGV4cGFuZGVkX2tleVtpXS5vY3RldFszXSA9IGFlc19zYm94W2V4cGFuZGVkX2tleVtpLTFdLm9jdGV0WzEyXV07CisgICAgdjEyOF9jb3B5X29jdGV0X3N0cmluZygmZXhwYW5kZWRfa2V5LT5yb3VuZFswXSwga2V5KTsKKyAgICB2MTI4X2NvcHlfb2N0ZXRfc3RyaW5nKCZleHBhbmRlZF9rZXktPnJvdW5kWzFdLCBrZXkgKyAxNik7CiAKLSAgICBleHBhbmRlZF9rZXlbaV0udjMyWzBdIF49ICBleHBhbmRlZF9rZXlbaS0xXS52MzJbMF07Ci0gICAgCi0gICAgLyogc2V0IHJlbWFpbmluZyAzMiBiaXQgd29yZHMgdG8gdGhlIGV4b3Igb2YgdGhlIG9uZSBwcmV2aW91cyB3aXRoCi0gICAgICogdGhlIG9uZSBmb3VyIHdvcmRzIHByZXZpb3VzICovCi0gICAgCi0gICAgZXhwYW5kZWRfa2V5W2ldLnYzMlsxXSA9Ci0gICAgICBleHBhbmRlZF9rZXlbaV0udjMyWzBdIF4gZXhwYW5kZWRfa2V5W2ktMV0udjMyWzFdOwotICAgIAotICAgIGV4cGFuZGVkX2tleVtpXS52MzJbMl0gPQotICAgICAgZXhwYW5kZWRfa2V5W2ldLnYzMlsxXSBeIGV4cGFuZGVkX2tleVtpLTFdLnYzMlsyXTsKLSAgICAKLSAgICBleHBhbmRlZF9rZXlbaV0udjMyWzNdID0KLSAgICAgIGV4cGFuZGVkX2tleVtpXS52MzJbMl0gXiBleHBhbmRlZF9rZXlbaS0xXS52MzJbM107CisjaWYgMAorICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX2Flc19pY20sCisgICAgICAgICAgICAgICAgImV4cGFuZGVkIGtleVswXTogICVzIiwgdjEyOF9oZXhfc3RyaW5nKCZleHBhbmRlZF9rZXktPnJvdW5kWzBdKSk7CisgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfYWVzX2ljbSwKKyAgICAgICAgICAgICAgICAiZXhwYW5kZWQga2V5WzFdOiAgJXMiLCB2MTI4X2hleF9zdHJpbmcoJmV4cGFuZGVkX2tleS0+cm91bmRbMV0pKTsKKyNlbmRpZgogCi0gICAgLyogbW9kaWZ5IHJvdW5kIGNvbnN0YW50ICovCi0gICAgcmMgPSBnZjJfOF9zaGlmdChyYyk7CisgICAgLyogbG9vcCBvdmVyIHJlc3Qgb2Ygcm91bmQga2V5cyAqLworICAgIGZvciAoaSA9IDI7IGkgPCAxNTsgaSsrKSB7CisgICAgICAgIC8qIG11bmdlIGZpcnN0IHdvcmQgb2Ygcm91bmQga2V5ICovCisgICAgICAgIGlmICgoaSAmIDEpID09IDApIHsKKyAgICAgICAgICAgIGV4cGFuZGVkX2tleS0+cm91bmRbaV0udjhbMF0gPQorICAgICAgICAgICAgICAgIGFlc19zYm94W2V4cGFuZGVkX2tleS0+cm91bmRbaSAtIDFdLnY4WzEzXV0gXiByYzsKKyAgICAgICAgICAgIGV4cGFuZGVkX2tleS0+cm91bmRbaV0udjhbMV0gPQorICAgICAgICAgICAgICAgIGFlc19zYm94W2V4cGFuZGVkX2tleS0+cm91bmRbaSAtIDFdLnY4WzE0XV07CisgICAgICAgICAgICBleHBhbmRlZF9rZXktPnJvdW5kW2ldLnY4WzJdID0KKyAgICAgICAgICAgICAgICBhZXNfc2JveFtleHBhbmRlZF9rZXktPnJvdW5kW2kgLSAxXS52OFsxNV1dOworICAgICAgICAgICAgZXhwYW5kZWRfa2V5LT5yb3VuZFtpXS52OFszXSA9CisgICAgICAgICAgICAgICAgYWVzX3Nib3hbZXhwYW5kZWRfa2V5LT5yb3VuZFtpIC0gMV0udjhbMTJdXTsKIAotICB9CisgICAgICAgICAgICAvKiBtb2RpZnkgcm91bmQgY29uc3RhbnQgKi8KKyAgICAgICAgICAgIHJjID0gZ2YyXzhfc2hpZnQocmMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXhwYW5kZWRfa2V5LT5yb3VuZFtpXS52OFswXSA9CisgICAgICAgICAgICAgICAgYWVzX3Nib3hbZXhwYW5kZWRfa2V5LT5yb3VuZFtpIC0gMV0udjhbMTJdXTsKKyAgICAgICAgICAgIGV4cGFuZGVkX2tleS0+cm91bmRbaV0udjhbMV0gPQorICAgICAgICAgICAgICAgIGFlc19zYm94W2V4cGFuZGVkX2tleS0+cm91bmRbaSAtIDFdLnY4WzEzXV07CisgICAgICAgICAgICBleHBhbmRlZF9rZXktPnJvdW5kW2ldLnY4WzJdID0KKyAgICAgICAgICAgICAgICBhZXNfc2JveFtleHBhbmRlZF9rZXktPnJvdW5kW2kgLSAxXS52OFsxNF1dOworICAgICAgICAgICAgZXhwYW5kZWRfa2V5LT5yb3VuZFtpXS52OFszXSA9CisgICAgICAgICAgICAgICAgYWVzX3Nib3hbZXhwYW5kZWRfa2V5LT5yb3VuZFtpIC0gMV0udjhbMTVdXTsKKyAgICAgICAgfQorCisgICAgICAgIGV4cGFuZGVkX2tleS0+cm91bmRbaV0udjMyWzBdIF49IGV4cGFuZGVkX2tleS0+cm91bmRbaSAtIDJdLnYzMlswXTsKKworICAgICAgICAvKiBzZXQgcmVtYWluaW5nIDMyIGJpdCB3b3JkcyB0byB0aGUgZXhvciBvZiB0aGUgb25lIHByZXZpb3VzIHdpdGgKKyAgICAgICAgICogdGhlIG9uZSBlaWdodCB3b3JkcyBwcmV2aW91cyAqLworCisgICAgICAgIGV4cGFuZGVkX2tleS0+cm91bmRbaV0udjMyWzFdID0KKyAgICAgICAgICAgIGV4cGFuZGVkX2tleS0+cm91bmRbaV0udjMyWzBdIF4gZXhwYW5kZWRfa2V5LT5yb3VuZFtpIC0gMl0udjMyWzFdOworCisgICAgICAgIGV4cGFuZGVkX2tleS0+cm91bmRbaV0udjMyWzJdID0KKyAgICAgICAgICAgIGV4cGFuZGVkX2tleS0+cm91bmRbaV0udjMyWzFdIF4gZXhwYW5kZWRfa2V5LT5yb3VuZFtpIC0gMl0udjMyWzJdOworCisgICAgICAgIGV4cGFuZGVkX2tleS0+cm91bmRbaV0udjMyWzNdID0KKyAgICAgICAgICAgIGV4cGFuZGVkX2tleS0+cm91bmRbaV0udjMyWzJdIF4gZXhwYW5kZWRfa2V5LT5yb3VuZFtpIC0gMl0udjMyWzNdOworCisjaWYgMAorICAgICAgICBkZWJ1Z19wcmludDIoc3J0cF9tb2RfYWVzX2ljbSwKKyAgICAgICAgICAgICAgICAgICAgICJleHBhbmRlZCBrZXlbJWRdOiAgJXMiLCBpLCB2MTI4X2hleF9zdHJpbmcoJmV4cGFuZGVkX2tleS0+cm91bmRbaV0pKTsKKyNlbmRpZgorICAgIH0KIH0KIAotaW5saW5lIHZvaWQKLWFlc19leHBhbmRfZGVjcnlwdGlvbl9rZXkoY29uc3QgdjEyOF90IGtleSwgCi0JCQkgIGFlc19leHBhbmRlZF9rZXlfdCBleHBhbmRlZF9rZXkpIHsKLSAgaW50IGk7CitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2Flc19leHBhbmRfZW5jcnlwdGlvbl9rZXkoCisgICAgY29uc3QgdWludDhfdCAqa2V5LAorICAgIGludCBrZXlfbGVuLAorICAgIHNydHBfYWVzX2V4cGFuZGVkX2tleV90ICpleHBhbmRlZF9rZXkpCit7CisgICAgaWYgKGtleV9sZW4gPT0gMTYpIHsKKyAgICAgICAgYWVzXzEyOF9leHBhbmRfZW5jcnlwdGlvbl9rZXkoa2V5LCBleHBhbmRlZF9rZXkpOworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOworICAgIH0gZWxzZSBpZiAoa2V5X2xlbiA9PSAyNCkgeworICAgICAgICAvKiBBRVMtMTkyIG5vdCB5ZXQgc3VwcG9ydGVkICovCisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYmFkX3BhcmFtOworICAgIH0gZWxzZSBpZiAoa2V5X2xlbiA9PSAzMikgeworICAgICAgICBhZXNfMjU2X2V4cGFuZF9lbmNyeXB0aW9uX2tleShrZXksIGV4cGFuZGVkX2tleSk7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisgICAgfQorfQogCi0gIGFlc19leHBhbmRfZW5jcnlwdGlvbl9rZXkoa2V5LCBleHBhbmRlZF9rZXkpOworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9hZXNfZXhwYW5kX2RlY3J5cHRpb25fa2V5KAorICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICBpbnQga2V5X2xlbiwKKyAgICBzcnRwX2Flc19leHBhbmRlZF9rZXlfdCAqZXhwYW5kZWRfa2V5KQoreworICAgIGludCBpOworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKKyAgICBpbnQgbnVtX3JvdW5kcyA9IGV4cGFuZGVkX2tleS0+bnVtX3JvdW5kczsKIAotICAvKiBpbnZlcnQgdGhlIG9yZGVyIG9mIHRoZSByb3VuZCBrZXlzICovCi0gIGZvciAoaT0wOyBpIDwgNTsgaSsrKSB7Ci0gICAgdjEyOF90IHRtcDsKLSAgICB2MTI4X2NvcHkoJnRtcCwgJmV4cGFuZGVkX2tleVsxMC1pXSk7Ci0gICAgdjEyOF9jb3B5KCZleHBhbmRlZF9rZXlbMTAtaV0sICZleHBhbmRlZF9rZXlbaV0pOwotICAgIHYxMjhfY29weSgmZXhwYW5kZWRfa2V5W2ldLCAmdG1wKTsKLSAgfQotICAgIAotICAvKiAKLSAgICogYXBwbHkgdGhlIGludmVyc2UgbWl4Q29sdW1uIHRyYW5zZm9ybSB0byB0aGUgcm91bmQga2V5cyAoZXhjZXB0Ci0gICAqIGZvciB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0KSAgCi0gICAqCi0gICAqIG1peENvbHVtbiBpcyBpbXBsZW1lbnRlZCBieSB1c2luZyB0aGUgdGFibGVzIFUwLCBVMSwgVTIsIFUzLAotICAgKiBmb2xsb3dlZCBieSB0aGUgVDQgdGFibGUgKHdoaWNoIGNhbmNlbHMgb3V0IHRoZSB1c2Ugb2YgdGhlIHNib3gKLSAgICogaW4gdGhlIFUtdGFibGVzKQotICAgKi8KLSAgZm9yIChpPTE7IGkgPCAxMDsgaSsrKSB7Ci0jaWYgQ1BVX1JJU0MKLSAgICB1aW50MzJfdCB0bXA7CisgICAgc3RhdHVzID0gc3J0cF9hZXNfZXhwYW5kX2VuY3J5cHRpb25fa2V5KGtleSwga2V5X2xlbiwgZXhwYW5kZWRfa2V5KTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQogCi0gICAgdG1wID0gZXhwYW5kZWRfa2V5W2ldLnYzMlswXTsKLSAgICBleHBhbmRlZF9rZXlbaV0udjMyWzBdID0gCi0gICAgICBVMFtUNFsodG1wID4+IDI0KSAgICAgICBdICYgMHhmZl0gXiAKLSAgICAgIFUxW1Q0Wyh0bXAgPj4gMTYpICYgMHhmZl0gJiAweGZmXSBeIAotICAgICAgVTJbVDRbKHRtcCA+PiA4KSAgJiAweGZmXSAmIDB4ZmZdIF4gCi0gICAgICBVM1tUNFsodG1wKSAgICAgICAmIDB4ZmZdICYgMHhmZl07CisgICAgLyogaW52ZXJ0IHRoZSBvcmRlciBvZiB0aGUgcm91bmQga2V5cyAqLworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fcm91bmRzIC8gMjsgaSsrKSB7CisgICAgICAgIHYxMjhfdCB0bXA7CisgICAgICAgIHYxMjhfY29weSgmdG1wLCAmZXhwYW5kZWRfa2V5LT5yb3VuZFtudW1fcm91bmRzIC0gaV0pOworICAgICAgICB2MTI4X2NvcHkoJmV4cGFuZGVkX2tleS0+cm91bmRbbnVtX3JvdW5kcyAtIGldLAorICAgICAgICAgICAgICAgICAgJmV4cGFuZGVkX2tleS0+cm91bmRbaV0pOworICAgICAgICB2MTI4X2NvcHkoJmV4cGFuZGVkX2tleS0+cm91bmRbaV0sICZ0bXApOworICAgIH0KIAotICAgIHRtcCA9IGV4cGFuZGVkX2tleVtpXS52MzJbMV07Ci0gICAgZXhwYW5kZWRfa2V5W2ldLnYzMlsxXSA9IAotICAgICAgVTBbVDRbKHRtcCA+PiAyNCkgICAgICAgXSAmIDB4ZmZdIF4gCi0gICAgICBVMVtUNFsodG1wID4+IDE2KSAmIDB4ZmZdICYgMHhmZl0gXiAKLSAgICAgIFUyW1Q0Wyh0bXAgPj4gOCkgICYgMHhmZl0gJiAweGZmXSBeIAotICAgICAgVTNbVDRbKHRtcCkgICAgICAgJiAweGZmXSAmIDB4ZmZdOworICAgIC8qCisgICAgICogYXBwbHkgdGhlIGludmVyc2UgbWl4Q29sdW1uIHRyYW5zZm9ybSB0byB0aGUgcm91bmQga2V5cyAoZXhjZXB0CisgICAgICogZm9yIHRoZSBmaXJzdCBhbmQgdGhlIGxhc3QpCisgICAgICoKKyAgICAgKiBtaXhDb2x1bW4gaXMgaW1wbGVtZW50ZWQgYnkgdXNpbmcgdGhlIHRhYmxlcyBVMCwgVTEsIFUyLCBVMywKKyAgICAgKiBmb2xsb3dlZCBieSB0aGUgVDQgdGFibGUgKHdoaWNoIGNhbmNlbHMgb3V0IHRoZSB1c2Ugb2YgdGhlIHNib3gKKyAgICAgKiBpbiB0aGUgVS10YWJsZXMpCisgICAgICovCisgICAgZm9yIChpID0gMTsgaSA8IG51bV9yb3VuZHM7IGkrKykgeworI2lmZGVmIENQVV9SSVNDCisgICAgICAgIHVpbnQzMl90IHRtcDsKIAotICAgIHRtcCA9IGV4cGFuZGVkX2tleVtpXS52MzJbMl07Ci0gICAgZXhwYW5kZWRfa2V5W2ldLnYzMlsyXSA9IAotICAgICAgVTBbVDRbKHRtcCA+PiAyNCkgICAgICAgXSAmIDB4ZmZdIF4gCi0gICAgICBVMVtUNFsodG1wID4+IDE2KSAmIDB4ZmZdICYgMHhmZl0gXiAKLSAgICAgIFUyW1Q0Wyh0bXAgPj4gOCkgICYgMHhmZl0gJiAweGZmXSBeIAotICAgICAgVTNbVDRbKHRtcCkgICAgICAgJiAweGZmXSAmIDB4ZmZdOworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorICAgICAgICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisgICAgICAgIHRtcCA9IGV4cGFuZGVkX2tleS0+cm91bmRbaV0udjMyWzBdOworICAgICAgICBleHBhbmRlZF9rZXktPnJvdW5kW2ldLnYzMlswXSA9CisgICAgICAgICAgICBVMFtUNFsodG1wID4+IDI0KSAgICAgICBdICYgMHhmZl0gXgorICAgICAgICAgICAgVTFbVDRbKHRtcCA+PiAxNikgJiAweGZmXSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFUyW1Q0Wyh0bXAgPj4gOCkgICYgMHhmZl0gJiAweGZmXSBeCisgICAgICAgICAgICBVM1tUNFsodG1wKSAgICAgICAmIDB4ZmZdICYgMHhmZl07CiAKLSAgICB0bXAgPSBleHBhbmRlZF9rZXlbaV0udjMyWzNdOwotICAgIGV4cGFuZGVkX2tleVtpXS52MzJbM10gPSAKLSAgICAgIFUwW1Q0Wyh0bXAgPj4gMjQpICAgICAgIF0gJiAweGZmXSBeIAotICAgICAgVTFbVDRbKHRtcCA+PiAxNikgJiAweGZmXSAmIDB4ZmZdIF4gCi0gICAgICBVMltUNFsodG1wID4+IDgpICAmIDB4ZmZdICYgMHhmZl0gXiAKLSAgICAgIFUzW1Q0Wyh0bXApICAgICAgICYgMHhmZl0gJiAweGZmXTsKKyAgICAgICAgdG1wID0gZXhwYW5kZWRfa2V5LT5yb3VuZFtpXS52MzJbMV07CisgICAgICAgIGV4cGFuZGVkX2tleS0+cm91bmRbaV0udjMyWzFdID0KKyAgICAgICAgICAgIFUwW1Q0Wyh0bXAgPj4gMjQpICAgICAgIF0gJiAweGZmXSBeCisgICAgICAgICAgICBVMVtUNFsodG1wID4+IDE2KSAmIDB4ZmZdICYgMHhmZl0gXgorICAgICAgICAgICAgVTJbVDRbKHRtcCA+PiA4KSAgJiAweGZmXSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFUzW1Q0Wyh0bXApICAgICAgICYgMHhmZl0gJiAweGZmXTsKKworICAgICAgICB0bXAgPSBleHBhbmRlZF9rZXktPnJvdW5kW2ldLnYzMlsyXTsKKyAgICAgICAgZXhwYW5kZWRfa2V5LT5yb3VuZFtpXS52MzJbMl0gPQorICAgICAgICAgICAgVTBbVDRbKHRtcCA+PiAyNCkgICAgICAgXSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFUxW1Q0Wyh0bXAgPj4gMTYpICYgMHhmZl0gJiAweGZmXSBeCisgICAgICAgICAgICBVMltUNFsodG1wID4+IDgpICAmIDB4ZmZdICYgMHhmZl0gXgorICAgICAgICAgICAgVTNbVDRbKHRtcCkgICAgICAgJiAweGZmXSAmIDB4ZmZdOworCisgICAgICAgIHRtcCA9IGV4cGFuZGVkX2tleS0+cm91bmRbaV0udjMyWzNdOworICAgICAgICBleHBhbmRlZF9rZXktPnJvdW5kW2ldLnYzMlszXSA9CisgICAgICAgICAgICBVMFtUNFsodG1wID4+IDI0KSAgICAgICBdICYgMHhmZl0gXgorICAgICAgICAgICAgVTFbVDRbKHRtcCA+PiAxNikgJiAweGZmXSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFUyW1Q0Wyh0bXAgPj4gOCkgICYgMHhmZl0gJiAweGZmXSBeCisgICAgICAgICAgICBVM1tUNFsodG1wKSAgICAgICAmIDB4ZmZdICYgMHhmZl07CisjZWxzZQorICAgICAgICB0bXAgPSBleHBhbmRlZF9rZXktPnJvdW5kW2ldLnYzMlswXTsKKyAgICAgICAgZXhwYW5kZWRfa2V5LT5yb3VuZFtpXS52MzJbMF0gPQorICAgICAgICAgICAgVTNbVDRbKHRtcCA+PiAyNCkgICAgICAgXSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFUyW1Q0Wyh0bXAgPj4gMTYpICYgMHhmZl0gJiAweGZmXSBeCisgICAgICAgICAgICBVMVtUNFsodG1wID4+IDgpICAmIDB4ZmZdICYgMHhmZl0gXgorICAgICAgICAgICAgVTBbVDRbKHRtcCkgICAgICAgJiAweGZmXSAmIDB4ZmZdOworCisgICAgICAgIHRtcCA9IGV4cGFuZGVkX2tleS0+cm91bmRbaV0udjMyWzFdOworICAgICAgICBleHBhbmRlZF9rZXktPnJvdW5kW2ldLnYzMlsxXSA9CisgICAgICAgICAgICBVM1tUNFsodG1wID4+IDI0KSAgICAgICBdICYgMHhmZl0gXgorICAgICAgICAgICAgVTJbVDRbKHRtcCA+PiAxNikgJiAweGZmXSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFUxW1Q0Wyh0bXAgPj4gOCkgICYgMHhmZl0gJiAweGZmXSBeCisgICAgICAgICAgICBVMFtUNFsodG1wKSAgICAgICAmIDB4ZmZdICYgMHhmZl07CisKKyAgICAgICAgdG1wID0gZXhwYW5kZWRfa2V5LT5yb3VuZFtpXS52MzJbMl07CisgICAgICAgIGV4cGFuZGVkX2tleS0+cm91bmRbaV0udjMyWzJdID0KKyAgICAgICAgICAgIFUzW1Q0Wyh0bXAgPj4gMjQpICAgICAgIF0gJiAweGZmXSBeCisgICAgICAgICAgICBVMltUNFsodG1wID4+IDE2KSAmIDB4ZmZdICYgMHhmZl0gXgorICAgICAgICAgICAgVTFbVDRbKHRtcCA+PiA4KSAgJiAweGZmXSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFUwW1Q0Wyh0bXApICAgICAgICYgMHhmZl0gJiAweGZmXTsKKworICAgICAgICB0bXAgPSBleHBhbmRlZF9rZXktPnJvdW5kW2ldLnYzMlszXTsKKyAgICAgICAgZXhwYW5kZWRfa2V5LT5yb3VuZFtpXS52MzJbM10gPQorICAgICAgICAgICAgVTNbVDRbKHRtcCA+PiAyNCkgICAgICAgXSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFUyW1Q0Wyh0bXAgPj4gMTYpICYgMHhmZl0gJiAweGZmXSBeCisgICAgICAgICAgICBVMVtUNFsodG1wID4+IDgpICAmIDB4ZmZdICYgMHhmZl0gXgorICAgICAgICAgICAgVTBbVDRbKHRtcCkgICAgICAgJiAweGZmXSAmIDB4ZmZdOworLyogY2xhbmctZm9ybWF0IG9uICovCisjZW5kaWYgLyogV09SRFNfQklHRU5ESUFOICovCisKICNlbHNlIC8qIGFzc3VtZSBDUFVfQ0lTQyAqLwogCi0gICAgdWludDMyX3QgYzAsIGMxLCBjMiwgYzM7CisgICAgICAgIHVpbnQzMl90IGMwLCBjMSwgYzIsIGMzOwogCi0gICAgYzAgPSBVMFthZXNfc2JveFtleHBhbmRlZF9rZXlbaV0ub2N0ZXRbMF1dXSAKLSAgICAgICBeIFUxW2Flc19zYm94W2V4cGFuZGVkX2tleVtpXS5vY3RldFsxXV1dIAotICAgICAgIF4gVTJbYWVzX3Nib3hbZXhwYW5kZWRfa2V5W2ldLm9jdGV0WzJdXV0gCi0gICAgICAgXiBVM1thZXNfc2JveFtleHBhbmRlZF9rZXlbaV0ub2N0ZXRbM11dXTsKKyAgICAgICAgYzAgPSBVMFthZXNfc2JveFtleHBhbmRlZF9rZXktPnJvdW5kW2ldLnY4WzBdXV0gXgorICAgICAgICAgICAgIFUxW2Flc19zYm94W2V4cGFuZGVkX2tleS0+cm91bmRbaV0udjhbMV1dXSBeCisgICAgICAgICAgICAgVTJbYWVzX3Nib3hbZXhwYW5kZWRfa2V5LT5yb3VuZFtpXS52OFsyXV1dIF4KKyAgICAgICAgICAgICBVM1thZXNfc2JveFtleHBhbmRlZF9rZXktPnJvdW5kW2ldLnY4WzNdXV07CiAKLSAgICBjMSA9IFUwW2Flc19zYm94W2V4cGFuZGVkX2tleVtpXS5vY3RldFs0XV1dIAotICAgICAgIF4gVTFbYWVzX3Nib3hbZXhwYW5kZWRfa2V5W2ldLm9jdGV0WzVdXV0gCi0gICAgICAgXiBVMlthZXNfc2JveFtleHBhbmRlZF9rZXlbaV0ub2N0ZXRbNl1dXSAKLSAgICAgICBeIFUzW2Flc19zYm94W2V4cGFuZGVkX2tleVtpXS5vY3RldFs3XV1dOworICAgICAgICBjMSA9IFUwW2Flc19zYm94W2V4cGFuZGVkX2tleS0+cm91bmRbaV0udjhbNF1dXSBeCisgICAgICAgICAgICAgVTFbYWVzX3Nib3hbZXhwYW5kZWRfa2V5LT5yb3VuZFtpXS52OFs1XV1dIF4KKyAgICAgICAgICAgICBVMlthZXNfc2JveFtleHBhbmRlZF9rZXktPnJvdW5kW2ldLnY4WzZdXV0gXgorICAgICAgICAgICAgIFUzW2Flc19zYm94W2V4cGFuZGVkX2tleS0+cm91bmRbaV0udjhbN11dXTsKIAotICAgIGMyID0gVTBbYWVzX3Nib3hbZXhwYW5kZWRfa2V5W2ldLm9jdGV0WzhdXV0gCi0gICAgICAgXiBVMVthZXNfc2JveFtleHBhbmRlZF9rZXlbaV0ub2N0ZXRbOV1dXSAKLSAgICAgICBeIFUyW2Flc19zYm94W2V4cGFuZGVkX2tleVtpXS5vY3RldFsxMF1dXSAKLSAgICAgICBeIFUzW2Flc19zYm94W2V4cGFuZGVkX2tleVtpXS5vY3RldFsxMV1dXTsKKyAgICAgICAgYzIgPSBVMFthZXNfc2JveFtleHBhbmRlZF9rZXktPnJvdW5kW2ldLnY4WzhdXV0gXgorICAgICAgICAgICAgIFUxW2Flc19zYm94W2V4cGFuZGVkX2tleS0+cm91bmRbaV0udjhbOV1dXSBeCisgICAgICAgICAgICAgVTJbYWVzX3Nib3hbZXhwYW5kZWRfa2V5LT5yb3VuZFtpXS52OFsxMF1dXSBeCisgICAgICAgICAgICAgVTNbYWVzX3Nib3hbZXhwYW5kZWRfa2V5LT5yb3VuZFtpXS52OFsxMV1dXTsKIAotICAgIGMzID0gVTBbYWVzX3Nib3hbZXhwYW5kZWRfa2V5W2ldLm9jdGV0WzEyXV1dIAotICAgICAgIF4gVTFbYWVzX3Nib3hbZXhwYW5kZWRfa2V5W2ldLm9jdGV0WzEzXV1dIAotICAgICAgIF4gVTJbYWVzX3Nib3hbZXhwYW5kZWRfa2V5W2ldLm9jdGV0WzE0XV1dIAotICAgICAgIF4gVTNbYWVzX3Nib3hbZXhwYW5kZWRfa2V5W2ldLm9jdGV0WzE1XV1dOworICAgICAgICBjMyA9IFUwW2Flc19zYm94W2V4cGFuZGVkX2tleS0+cm91bmRbaV0udjhbMTJdXV0gXgorICAgICAgICAgICAgIFUxW2Flc19zYm94W2V4cGFuZGVkX2tleS0+cm91bmRbaV0udjhbMTNdXV0gXgorICAgICAgICAgICAgIFUyW2Flc19zYm94W2V4cGFuZGVkX2tleS0+cm91bmRbaV0udjhbMTRdXV0gXgorICAgICAgICAgICAgIFUzW2Flc19zYm94W2V4cGFuZGVkX2tleS0+cm91bmRbaV0udjhbMTVdXV07CiAKLSAgICBleHBhbmRlZF9rZXlbaV0udjMyWzBdID0gYzA7Ci0gICAgZXhwYW5kZWRfa2V5W2ldLnYzMlsxXSA9IGMxOwotICAgIGV4cGFuZGVkX2tleVtpXS52MzJbMl0gPSBjMjsKLSAgICBleHBhbmRlZF9rZXlbaV0udjMyWzNdID0gYzM7Ci0gICAgICAgIAotI2VuZGlmICAgICAKLSAgfQorICAgICAgICBleHBhbmRlZF9rZXktPnJvdW5kW2ldLnYzMlswXSA9IGMwOworICAgICAgICBleHBhbmRlZF9rZXktPnJvdW5kW2ldLnYzMlsxXSA9IGMxOworICAgICAgICBleHBhbmRlZF9rZXktPnJvdW5kW2ldLnYzMlsyXSA9IGMyOworICAgICAgICBleHBhbmRlZF9rZXktPnJvdW5kW2ldLnYzMlszXSA9IGMzOworCisjZW5kaWYKKyAgICB9CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQogCi0jaWYgQ1BVX0NJU0MKKyNpZmRlZiBDUFVfQ0lTQwogCitzdGF0aWMgaW5saW5lIHZvaWQgYWVzX3JvdW5kKHYxMjhfdCAqc3RhdGUsIGNvbnN0IHYxMjhfdCAqcm91bmRfa2V5KQoreworICAgIHVpbnQzMl90IGNvbHVtbjAsIGNvbHVtbjEsIGNvbHVtbjIsIGNvbHVtbjM7CiAKLWlubGluZSB2b2lkCi1hZXNfcm91bmQodjEyOF90ICpzdGF0ZSwgY29uc3QgdjEyOF90IHJvdW5kX2tleSkgewotICB1aW50MzJfdCBjb2x1bW4wLCBjb2x1bW4xLCBjb2x1bW4yLCBjb2x1bW4zOworICAgIC8qIGNvbXB1dGUgdGhlIGNvbHVtbnMgb2YgdGhlIG91dHB1dCBzcXVhcmUgaW4gdGVybXMgb2YgdGhlIG9jdGV0cworICAgICAgIG9mIHN0YXRlLCB1c2luZyB0aGUgdGFibGVzIFQwLCBUMSwgVDIsIFQzICovCiAKLSAgLyogY29tcHV0ZSB0aGUgY29sdW1ucyBvZiB0aGUgb3V0cHV0IHNxdWFyZSBpbiB0ZXJtcyBvZiB0aGUgb2N0ZXRzCi0gICAgIG9mIHN0YXRlLCB1c2luZyB0aGUgdGFibGVzIFQwLCBUMSwgVDIsIFQzICovCisgICAgY29sdW1uMCA9IFQwW3N0YXRlLT52OFswXV0gXiBUMVtzdGF0ZS0+djhbNV1dIF4gVDJbc3RhdGUtPnY4WzEwXV0gXgorICAgICAgICAgICAgICBUM1tzdGF0ZS0+djhbMTVdXTsKIAotICBjb2x1bW4wID0gVDBbc3RhdGUtPm9jdGV0WzBdXSBeIFQxW3N0YXRlLT5vY3RldFs1XV0KLSAgICBeIFQyW3N0YXRlLT5vY3RldFsxMF1dIF4gVDNbc3RhdGUtPm9jdGV0WzE1XV07Ci0gIAotICBjb2x1bW4xID0gVDBbc3RhdGUtPm9jdGV0WzRdXSBeIFQxW3N0YXRlLT5vY3RldFs5XV0KLSAgICBeIFQyW3N0YXRlLT5vY3RldFsxNF1dIF4gVDNbc3RhdGUtPm9jdGV0WzNdXTsKKyAgICBjb2x1bW4xID0gVDBbc3RhdGUtPnY4WzRdXSBeIFQxW3N0YXRlLT52OFs5XV0gXiBUMltzdGF0ZS0+djhbMTRdXSBeCisgICAgICAgICAgICAgIFQzW3N0YXRlLT52OFszXV07CiAKLSAgY29sdW1uMiA9IFQwW3N0YXRlLT5vY3RldFs4XV0gXiBUMVtzdGF0ZS0+b2N0ZXRbMTNdXQotICAgIF4gVDJbc3RhdGUtPm9jdGV0WzJdXSBeIFQzW3N0YXRlLT5vY3RldFs3XV07CisgICAgY29sdW1uMiA9IFQwW3N0YXRlLT52OFs4XV0gXiBUMVtzdGF0ZS0+djhbMTNdXSBeIFQyW3N0YXRlLT52OFsyXV0gXgorICAgICAgICAgICAgICBUM1tzdGF0ZS0+djhbN11dOwogCi0gIGNvbHVtbjMgPSBUMFtzdGF0ZS0+b2N0ZXRbMTJdXSBeIFQxW3N0YXRlLT5vY3RldFsxXV0KLSAgICBeIFQyW3N0YXRlLT5vY3RldFs2XV0gXiBUM1tzdGF0ZS0+b2N0ZXRbMTFdXTsKKyAgICBjb2x1bW4zID0gVDBbc3RhdGUtPnY4WzEyXV0gXiBUMVtzdGF0ZS0+djhbMV1dIF4gVDJbc3RhdGUtPnY4WzZdXSBeCisgICAgICAgICAgICAgIFQzW3N0YXRlLT52OFsxMV1dOwogCi0gIHN0YXRlLT52MzJbMF0gPSBjb2x1bW4wIF4gcm91bmRfa2V5LnYzMlswXTsKLSAgc3RhdGUtPnYzMlsxXSA9IGNvbHVtbjEgXiByb3VuZF9rZXkudjMyWzFdOwotICBzdGF0ZS0+djMyWzJdID0gY29sdW1uMiBeIHJvdW5kX2tleS52MzJbMl07Ci0gIHN0YXRlLT52MzJbM10gPSBjb2x1bW4zIF4gcm91bmRfa2V5LnYzMlszXTsKLSAgCisgICAgc3RhdGUtPnYzMlswXSA9IGNvbHVtbjAgXiByb3VuZF9rZXktPnYzMlswXTsKKyAgICBzdGF0ZS0+djMyWzFdID0gY29sdW1uMSBeIHJvdW5kX2tleS0+djMyWzFdOworICAgIHN0YXRlLT52MzJbMl0gPSBjb2x1bW4yIF4gcm91bmRfa2V5LT52MzJbMl07CisgICAgc3RhdGUtPnYzMlszXSA9IGNvbHVtbjMgXiByb3VuZF9rZXktPnYzMlszXTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGFlc19pbnZfcm91bmQodjEyOF90ICpzdGF0ZSwgY29uc3QgdjEyOF90ICpyb3VuZF9rZXkpCit7CisgICAgdWludDMyX3QgY29sdW1uMCwgY29sdW1uMSwgY29sdW1uMiwgY29sdW1uMzsKIAotaW5saW5lIHZvaWQKLWFlc19pbnZfcm91bmQodjEyOF90ICpzdGF0ZSwgY29uc3QgdjEyOF90IHJvdW5kX2tleSkgewotICB1bnNpZ25lZCBsb25nIGNvbHVtbjAsIGNvbHVtbjEsIGNvbHVtbjIsIGNvbHVtbjM7CisgICAgLyogY29tcHV0ZSB0aGUgY29sdW1ucyBvZiB0aGUgb3V0cHV0IHNxdWFyZSBpbiB0ZXJtcyBvZiB0aGUgb2N0ZXRzCisgICAgICAgb2Ygc3RhdGUsIHVzaW5nIHRoZSB0YWJsZXMgVTAsIFUxLCBVMiwgVTMgKi8KIAotICAvKiBjb21wdXRlIHRoZSBjb2x1bW5zIG9mIHRoZSBvdXRwdXQgc3F1YXJlIGluIHRlcm1zIG9mIHRoZSBvY3RldHMKLSAgICAgb2Ygc3RhdGUsIHVzaW5nIHRoZSB0YWJsZXMgVTAsIFUxLCBVMiwgVTMgKi8KKyAgICBjb2x1bW4wID0gVTBbc3RhdGUtPnY4WzBdXSBeIFUxW3N0YXRlLT52OFsxM11dIF4gVTJbc3RhdGUtPnY4WzEwXV0gXgorICAgICAgICAgICAgICBVM1tzdGF0ZS0+djhbN11dOwogCi0gIGNvbHVtbjAgPSBVMFtzdGF0ZS0+b2N0ZXRbMF1dIF4gVTFbc3RhdGUtPm9jdGV0WzEzXV0KLSAgICBeIFUyW3N0YXRlLT5vY3RldFsxMF1dIF4gVTNbc3RhdGUtPm9jdGV0WzddXTsKLSAgCi0gIGNvbHVtbjEgPSBVMFtzdGF0ZS0+b2N0ZXRbNF1dIF4gVTFbc3RhdGUtPm9jdGV0WzFdXQotICAgIF4gVTJbc3RhdGUtPm9jdGV0WzE0XV0gXiBVM1tzdGF0ZS0+b2N0ZXRbMTFdXTsKKyAgICBjb2x1bW4xID0gVTBbc3RhdGUtPnY4WzRdXSBeIFUxW3N0YXRlLT52OFsxXV0gXiBVMltzdGF0ZS0+djhbMTRdXSBeCisgICAgICAgICAgICAgIFUzW3N0YXRlLT52OFsxMV1dOwogCi0gIGNvbHVtbjIgPSBVMFtzdGF0ZS0+b2N0ZXRbOF1dIF4gVTFbc3RhdGUtPm9jdGV0WzVdXQotICAgIF4gVTJbc3RhdGUtPm9jdGV0WzJdXSBeIFUzW3N0YXRlLT5vY3RldFsxNV1dOworICAgIGNvbHVtbjIgPSBVMFtzdGF0ZS0+djhbOF1dIF4gVTFbc3RhdGUtPnY4WzVdXSBeIFUyW3N0YXRlLT52OFsyXV0gXgorICAgICAgICAgICAgICBVM1tzdGF0ZS0+djhbMTVdXTsKIAotICBjb2x1bW4zID0gVTBbc3RhdGUtPm9jdGV0WzEyXV0gXiBVMVtzdGF0ZS0+b2N0ZXRbOV1dCi0gICAgXiBVMltzdGF0ZS0+b2N0ZXRbNl1dIF4gVTNbc3RhdGUtPm9jdGV0WzNdXTsKKyAgICBjb2x1bW4zID0gVTBbc3RhdGUtPnY4WzEyXV0gXiBVMVtzdGF0ZS0+djhbOV1dIF4gVTJbc3RhdGUtPnY4WzZdXSBeCisgICAgICAgICAgICAgIFUzW3N0YXRlLT52OFszXV07CiAKLSAgc3RhdGUtPnYzMlswXSA9IGNvbHVtbjAgXiByb3VuZF9rZXkudjMyWzBdOwotICBzdGF0ZS0+djMyWzFdID0gY29sdW1uMSBeIHJvdW5kX2tleS52MzJbMV07Ci0gIHN0YXRlLT52MzJbMl0gPSBjb2x1bW4yIF4gcm91bmRfa2V5LnYzMlsyXTsKLSAgc3RhdGUtPnYzMlszXSA9IGNvbHVtbjMgXiByb3VuZF9rZXkudjMyWzNdOwotICAKKyAgICBzdGF0ZS0+djMyWzBdID0gY29sdW1uMCBeIHJvdW5kX2tleS0+djMyWzBdOworICAgIHN0YXRlLT52MzJbMV0gPSBjb2x1bW4xIF4gcm91bmRfa2V5LT52MzJbMV07CisgICAgc3RhdGUtPnYzMlsyXSA9IGNvbHVtbjIgXiByb3VuZF9rZXktPnYzMlsyXTsKKyAgICBzdGF0ZS0+djMyWzNdID0gY29sdW1uMyBeIHJvdW5kX2tleS0+djMyWzNdOwogfQogCi1pbmxpbmUgdm9pZAotYWVzX2ZpbmFsX3JvdW5kKHYxMjhfdCAqc3RhdGUsIHYxMjhfdCByb3VuZF9rZXkpIHsKLSAgb2N0ZXRfdCB0bXA7CitzdGF0aWMgaW5saW5lIHZvaWQgYWVzX2ZpbmFsX3JvdW5kKHYxMjhfdCAqc3RhdGUsIGNvbnN0IHYxMjhfdCAqcm91bmRfa2V5KQoreworICAgIHVpbnQ4X3QgdG1wOwogCi0gIC8qIGJ5dGUgc3Vic3RpdHV0aW9ucyBhbmQgcm93IHNoaWZ0cyAqLwotICAvKiBmaXJzdCByb3cgLSBubyBzaGlmdCAqLwotICBzdGF0ZS0+b2N0ZXRbMF0gPSBhZXNfc2JveFtzdGF0ZS0+b2N0ZXRbMF1dOwotICBzdGF0ZS0+b2N0ZXRbNF0gPSBhZXNfc2JveFtzdGF0ZS0+b2N0ZXRbNF1dOwotICBzdGF0ZS0+b2N0ZXRbOF0gPSBhZXNfc2JveFtzdGF0ZS0+b2N0ZXRbOF1dOwotICBzdGF0ZS0+b2N0ZXRbMTJdID0gYWVzX3Nib3hbc3RhdGUtPm9jdGV0WzEyXV07CisgICAgLyogYnl0ZSBzdWJzdGl0dXRpb25zIGFuZCByb3cgc2hpZnRzICovCisgICAgLyogZmlyc3Qgcm93IC0gbm8gc2hpZnQgKi8KKyAgICBzdGF0ZS0+djhbMF0gPSBhZXNfc2JveFtzdGF0ZS0+djhbMF1dOworICAgIHN0YXRlLT52OFs0XSA9IGFlc19zYm94W3N0YXRlLT52OFs0XV07CisgICAgc3RhdGUtPnY4WzhdID0gYWVzX3Nib3hbc3RhdGUtPnY4WzhdXTsKKyAgICBzdGF0ZS0+djhbMTJdID0gYWVzX3Nib3hbc3RhdGUtPnY4WzEyXV07CiAKLSAgLyogc2Vjb25kIHJvdyAtIHNoaWZ0IG9uZSBsZWZ0ICovCi0gIHRtcCA9IGFlc19zYm94W3N0YXRlLT5vY3RldFsxXV07Ci0gIHN0YXRlLT5vY3RldFsxXSA9IGFlc19zYm94W3N0YXRlLT5vY3RldFs1XV07Ci0gIHN0YXRlLT5vY3RldFs1XSA9IGFlc19zYm94W3N0YXRlLT5vY3RldFs5XV07Ci0gIHN0YXRlLT5vY3RldFs5XSA9IGFlc19zYm94W3N0YXRlLT5vY3RldFsxM11dOwotICBzdGF0ZS0+b2N0ZXRbMTNdID0gdG1wOworICAgIC8qIHNlY29uZCByb3cgLSBzaGlmdCBvbmUgbGVmdCAqLworICAgIHRtcCA9IGFlc19zYm94W3N0YXRlLT52OFsxXV07CisgICAgc3RhdGUtPnY4WzFdID0gYWVzX3Nib3hbc3RhdGUtPnY4WzVdXTsKKyAgICBzdGF0ZS0+djhbNV0gPSBhZXNfc2JveFtzdGF0ZS0+djhbOV1dOworICAgIHN0YXRlLT52OFs5XSA9IGFlc19zYm94W3N0YXRlLT52OFsxM11dOworICAgIHN0YXRlLT52OFsxM10gPSB0bXA7CiAKLSAgLyogdGhpcmQgcm93IC0gc2hpZnQgdHdvIGxlZnQgKi8KLSAgdG1wID0gYWVzX3Nib3hbc3RhdGUtPm9jdGV0WzEwXV07Ci0gIHN0YXRlLT5vY3RldFsxMF0gPSBhZXNfc2JveFtzdGF0ZS0+b2N0ZXRbMl1dOwotICBzdGF0ZS0+b2N0ZXRbMl0gPSB0bXA7Ci0gIHRtcCA9IGFlc19zYm94W3N0YXRlLT5vY3RldFsxNF1dOwotICBzdGF0ZS0+b2N0ZXRbMTRdID0gYWVzX3Nib3hbc3RhdGUtPm9jdGV0WzZdXTsKLSAgc3RhdGUtPm9jdGV0WzZdID0gdG1wOyAKLSAgCi0gIC8qIGZvdXJ0aCByb3cgLSBzaGlmdCB0aHJlZSBsZWZ0ICovCi0gIHRtcCA9IGFlc19zYm94W3N0YXRlLT5vY3RldFsxNV1dOwotICBzdGF0ZS0+b2N0ZXRbMTVdID0gYWVzX3Nib3hbc3RhdGUtPm9jdGV0WzExXV07Ci0gIHN0YXRlLT5vY3RldFsxMV0gPSBhZXNfc2JveFtzdGF0ZS0+b2N0ZXRbN11dOwotICBzdGF0ZS0+b2N0ZXRbN10gPSBhZXNfc2JveFtzdGF0ZS0+b2N0ZXRbM11dOwotICBzdGF0ZS0+b2N0ZXRbM10gPSB0bXA7CisgICAgLyogdGhpcmQgcm93IC0gc2hpZnQgdHdvIGxlZnQgKi8KKyAgICB0bXAgPSBhZXNfc2JveFtzdGF0ZS0+djhbMTBdXTsKKyAgICBzdGF0ZS0+djhbMTBdID0gYWVzX3Nib3hbc3RhdGUtPnY4WzJdXTsKKyAgICBzdGF0ZS0+djhbMl0gPSB0bXA7CisgICAgdG1wID0gYWVzX3Nib3hbc3RhdGUtPnY4WzE0XV07CisgICAgc3RhdGUtPnY4WzE0XSA9IGFlc19zYm94W3N0YXRlLT52OFs2XV07CisgICAgc3RhdGUtPnY4WzZdID0gdG1wOwogCi0gIHYxMjhfeG9yX2VxKHN0YXRlLCAmcm91bmRfa2V5KTsKKyAgICAvKiBmb3VydGggcm93IC0gc2hpZnQgdGhyZWUgbGVmdCAqLworICAgIHRtcCA9IGFlc19zYm94W3N0YXRlLT52OFsxNV1dOworICAgIHN0YXRlLT52OFsxNV0gPSBhZXNfc2JveFtzdGF0ZS0+djhbMTFdXTsKKyAgICBzdGF0ZS0+djhbMTFdID0gYWVzX3Nib3hbc3RhdGUtPnY4WzddXTsKKyAgICBzdGF0ZS0+djhbN10gPSBhZXNfc2JveFtzdGF0ZS0+djhbM11dOworICAgIHN0YXRlLT52OFszXSA9IHRtcDsKKworICAgIHYxMjhfeG9yX2VxKHN0YXRlLCByb3VuZF9rZXkpOwogfQogCi1pbmxpbmUgdm9pZAotYWVzX2ludl9maW5hbF9yb3VuZCh2MTI4X3QgKnN0YXRlLCB2MTI4X3Qgcm91bmRfa2V5KSB7Ci0gIG9jdGV0X3QgdG1wOworc3RhdGljIGlubGluZSB2b2lkIGFlc19pbnZfZmluYWxfcm91bmQodjEyOF90ICpzdGF0ZSwgY29uc3QgdjEyOF90ICpyb3VuZF9rZXkpCit7CisgICAgdWludDhfdCB0bXA7CiAKLSAgLyogYnl0ZSBzdWJzdGl0dXRpb25zIGFuZCByb3cgc2hpZnRzICovCi0gIC8qIGZpcnN0IHJvdyAtIG5vIHNoaWZ0ICovCi0gIHN0YXRlLT5vY3RldFswXSA9IGFlc19pbnZfc2JveFtzdGF0ZS0+b2N0ZXRbMF1dOwotICBzdGF0ZS0+b2N0ZXRbNF0gPSBhZXNfaW52X3Nib3hbc3RhdGUtPm9jdGV0WzRdXTsKLSAgc3RhdGUtPm9jdGV0WzhdID0gYWVzX2ludl9zYm94W3N0YXRlLT5vY3RldFs4XV07Ci0gIHN0YXRlLT5vY3RldFsxMl0gPSBhZXNfaW52X3Nib3hbc3RhdGUtPm9jdGV0WzEyXV07CisgICAgLyogYnl0ZSBzdWJzdGl0dXRpb25zIGFuZCByb3cgc2hpZnRzICovCisgICAgLyogZmlyc3Qgcm93IC0gbm8gc2hpZnQgKi8KKyAgICBzdGF0ZS0+djhbMF0gPSBhZXNfaW52X3Nib3hbc3RhdGUtPnY4WzBdXTsKKyAgICBzdGF0ZS0+djhbNF0gPSBhZXNfaW52X3Nib3hbc3RhdGUtPnY4WzRdXTsKKyAgICBzdGF0ZS0+djhbOF0gPSBhZXNfaW52X3Nib3hbc3RhdGUtPnY4WzhdXTsKKyAgICBzdGF0ZS0+djhbMTJdID0gYWVzX2ludl9zYm94W3N0YXRlLT52OFsxMl1dOwogCi0gIC8qIHNlY29uZCByb3cgLSBzaGlmdCBvbmUgcmlnaHQgKi8KLSAgdG1wID0gYWVzX2ludl9zYm94W3N0YXRlLT5vY3RldFsxM11dOwotICBzdGF0ZS0+b2N0ZXRbMTNdID0gYWVzX2ludl9zYm94W3N0YXRlLT5vY3RldFs5XV07Ci0gIHN0YXRlLT5vY3RldFs5XSA9IGFlc19pbnZfc2JveFtzdGF0ZS0+b2N0ZXRbNV1dOwotICBzdGF0ZS0+b2N0ZXRbNV0gPSBhZXNfaW52X3Nib3hbc3RhdGUtPm9jdGV0WzFdXTsKLSAgc3RhdGUtPm9jdGV0WzFdID0gdG1wOworICAgIC8qIHNlY29uZCByb3cgLSBzaGlmdCBvbmUgcmlnaHQgKi8KKyAgICB0bXAgPSBhZXNfaW52X3Nib3hbc3RhdGUtPnY4WzEzXV07CisgICAgc3RhdGUtPnY4WzEzXSA9IGFlc19pbnZfc2JveFtzdGF0ZS0+djhbOV1dOworICAgIHN0YXRlLT52OFs5XSA9IGFlc19pbnZfc2JveFtzdGF0ZS0+djhbNV1dOworICAgIHN0YXRlLT52OFs1XSA9IGFlc19pbnZfc2JveFtzdGF0ZS0+djhbMV1dOworICAgIHN0YXRlLT52OFsxXSA9IHRtcDsKIAotICAvKiB0aGlyZCByb3cgLSBzaGlmdCB0d28gcmlnaHQgKi8KLSAgdG1wID0gYWVzX2ludl9zYm94W3N0YXRlLT5vY3RldFsyXV07Ci0gIHN0YXRlLT5vY3RldFsyXSA9IGFlc19pbnZfc2JveFtzdGF0ZS0+b2N0ZXRbMTBdXTsKLSAgc3RhdGUtPm9jdGV0WzEwXSA9IHRtcDsKLSAgdG1wID0gYWVzX2ludl9zYm94W3N0YXRlLT5vY3RldFs2XV07Ci0gIHN0YXRlLT5vY3RldFs2XSA9IGFlc19pbnZfc2JveFtzdGF0ZS0+b2N0ZXRbMTRdXTsKLSAgc3RhdGUtPm9jdGV0WzE0XSA9IHRtcDsgCi0gIAotICAvKiBmb3VydGggcm93IC0gc2hpZnQgdGhyZWUgcmlnaHQgKi8KLSAgdG1wID0gYWVzX2ludl9zYm94W3N0YXRlLT5vY3RldFszXV07Ci0gIHN0YXRlLT5vY3RldFszXSA9IGFlc19pbnZfc2JveFtzdGF0ZS0+b2N0ZXRbN11dOwotICBzdGF0ZS0+b2N0ZXRbN10gPSBhZXNfaW52X3Nib3hbc3RhdGUtPm9jdGV0WzExXV07Ci0gIHN0YXRlLT5vY3RldFsxMV0gPSBhZXNfaW52X3Nib3hbc3RhdGUtPm9jdGV0WzE1XV07Ci0gIHN0YXRlLT5vY3RldFsxNV0gPSB0bXA7CisgICAgLyogdGhpcmQgcm93IC0gc2hpZnQgdHdvIHJpZ2h0ICovCisgICAgdG1wID0gYWVzX2ludl9zYm94W3N0YXRlLT52OFsyXV07CisgICAgc3RhdGUtPnY4WzJdID0gYWVzX2ludl9zYm94W3N0YXRlLT52OFsxMF1dOworICAgIHN0YXRlLT52OFsxMF0gPSB0bXA7CisgICAgdG1wID0gYWVzX2ludl9zYm94W3N0YXRlLT52OFs2XV07CisgICAgc3RhdGUtPnY4WzZdID0gYWVzX2ludl9zYm94W3N0YXRlLT52OFsxNF1dOworICAgIHN0YXRlLT52OFsxNF0gPSB0bXA7CiAKLSAgdjEyOF94b3JfZXEoc3RhdGUsICZyb3VuZF9rZXkpOworICAgIC8qIGZvdXJ0aCByb3cgLSBzaGlmdCB0aHJlZSByaWdodCAqLworICAgIHRtcCA9IGFlc19pbnZfc2JveFtzdGF0ZS0+djhbM11dOworICAgIHN0YXRlLT52OFszXSA9IGFlc19pbnZfc2JveFtzdGF0ZS0+djhbN11dOworICAgIHN0YXRlLT52OFs3XSA9IGFlc19pbnZfc2JveFtzdGF0ZS0+djhbMTFdXTsKKyAgICBzdGF0ZS0+djhbMTFdID0gYWVzX2ludl9zYm94W3N0YXRlLT52OFsxNV1dOworICAgIHN0YXRlLT52OFsxNV0gPSB0bXA7CisKKyAgICB2MTI4X3hvcl9lcShzdGF0ZSwgcm91bmRfa2V5KTsKIH0KIAotCiAjZWxpZiBDUFVfUklTQwogCi0jaWYgIVdPUkRTX0JJR0VORElBTgotI2Vycm9yICJvbmx5IGJpZy1lbmRpYW4gUklTQyBpcyBzdXBwb3J0ZWQsIHBsZWFzZSBjaG9vc2UgQ1BVX0NJU0MgaW4gY29uZmlnLmgiCi0jZW5kaWYKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZXNfcm91bmQodjEyOF90ICpzdGF0ZSwgY29uc3QgdjEyOF90ICpyb3VuZF9rZXkpCit7CisgICAgdWludDMyX3QgY29sdW1uMCwgY29sdW1uMSwgY29sdW1uMiwgY29sdW1uMzsKIAotaW5saW5lIHZvaWQKLWFlc19yb3VuZCh2MTI4X3QgKnN0YXRlLCBjb25zdCB2MTI4X3Qgcm91bmRfa2V5KSB7Ci0gIHVpbnQzMl90IGNvbHVtbjAsIGNvbHVtbjEsIGNvbHVtbjIsIGNvbHVtbjM7CisvKiBjb21wdXRlIHRoZSBjb2x1bW5zIG9mIHRoZSBvdXRwdXQgc3F1YXJlIGluIHRlcm1zIG9mIHRoZSBvY3RldHMKKyAgIG9mIHN0YXRlLCB1c2luZyB0aGUgdGFibGVzIFQwLCBUMSwgVDIsIFQzICovCisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisgICAgY29sdW1uMCA9IFQwW3N0YXRlLT52MzJbMF0gPj4gMjRdIF4gVDFbKHN0YXRlLT52MzJbMV0gPj4gMTYpICYgMHhmZl0gXgorICAgICAgICAgICAgICBUMlsoc3RhdGUtPnYzMlsyXSA+PiA4KSAmIDB4ZmZdIF4gVDNbc3RhdGUtPnYzMlszXSAmIDB4ZmZdOwogCi0gIC8qIGNvbXB1dGUgdGhlIGNvbHVtbnMgb2YgdGhlIG91dHB1dCBzcXVhcmUgaW4gdGVybXMgb2YgdGhlIG9jdGV0cwotICAgICBvZiBzdGF0ZSwgdXNpbmcgdGhlIHRhYmxlcyBUMCwgVDEsIFQyLCBUMyAqLworICAgIGNvbHVtbjEgPSBUMFtzdGF0ZS0+djMyWzFdID4+IDI0XSBeIFQxWyhzdGF0ZS0+djMyWzJdID4+IDE2KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgICAgVDJbKHN0YXRlLT52MzJbM10gPj4gOCkgJiAweGZmXSBeIFQzW3N0YXRlLT52MzJbMF0gJiAweGZmXTsKIAotICBjb2x1bW4wID0gVDBbc3RhdGUtPnYzMlswXSA+PiAyNF0gXiBUMVsoc3RhdGUtPnYzMlsxXSA+PiAxNikgJiAweGZmXQotICAgIF4gVDJbKHN0YXRlLT52MzJbMl0gPj4gOCkgJiAweGZmXSBeIFQzW3N0YXRlLT52MzJbM10gJiAweGZmXTsKLSAgCi0gIGNvbHVtbjEgPSBUMFtzdGF0ZS0+djMyWzFdID4+IDI0XSBeIFQxWyhzdGF0ZS0+djMyWzJdID4+IDE2KSAmIDB4ZmZdCi0gICAgXiBUMlsoc3RhdGUtPnYzMlszXSA+PiA4KSAmIDB4ZmZdIF4gVDNbc3RhdGUtPnYzMlswXSAmIDB4ZmZdOworICAgIGNvbHVtbjIgPSBUMFtzdGF0ZS0+djMyWzJdID4+IDI0XSBeIFQxWyhzdGF0ZS0+djMyWzNdID4+IDE2KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgICAgVDJbKHN0YXRlLT52MzJbMF0gPj4gOCkgJiAweGZmXSBeIFQzW3N0YXRlLT52MzJbMV0gJiAweGZmXTsKIAotICBjb2x1bW4yID0gVDBbc3RhdGUtPnYzMlsyXSA+PiAyNF0gXiBUMVsoc3RhdGUtPnYzMlszXSA+PiAxNikgJiAweGZmXQotICAgIF4gVDJbKHN0YXRlLT52MzJbMF0gPj4gOCkgJiAweGZmXSBeIFQzW3N0YXRlLT52MzJbMV0gJiAweGZmXTsKKyAgICBjb2x1bW4zID0gVDBbc3RhdGUtPnYzMlszXSA+PiAyNF0gXiBUMVsoc3RhdGUtPnYzMlswXSA+PiAxNikgJiAweGZmXSBeCisgICAgICAgICAgICAgIFQyWyhzdGF0ZS0+djMyWzFdID4+IDgpICYgMHhmZl0gXiBUM1tzdGF0ZS0+djMyWzJdICYgMHhmZl07CisjZWxzZQorICAgIGNvbHVtbjAgPSBUMFtzdGF0ZS0+djMyWzBdICYgMHhmZl0gXiBUMVsoc3RhdGUtPnYzMlsxXSA+PiA4KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgICAgVDJbKHN0YXRlLT52MzJbMl0gPj4gMTYpICYgMHhmZl0gXiBUM1tzdGF0ZS0+djMyWzNdID4+IDI0XTsKIAotICBjb2x1bW4zID0gVDBbc3RhdGUtPnYzMlszXSA+PiAyNF0gXiBUMVsoc3RhdGUtPnYzMlswXSA+PiAxNikgJiAweGZmXQotICAgIF4gVDJbKHN0YXRlLT52MzJbMV0gPj4gOCkgJiAweGZmXSBeIFQzW3N0YXRlLT52MzJbMl0gJiAweGZmXTsKKyAgICBjb2x1bW4xID0gVDBbc3RhdGUtPnYzMlsxXSAmIDB4ZmZdIF4gVDFbKHN0YXRlLT52MzJbMl0gPj4gOCkgJiAweGZmXSBeCisgICAgICAgICAgICAgIFQyWyhzdGF0ZS0+djMyWzNdID4+IDE2KSAmIDB4ZmZdIF4gVDNbc3RhdGUtPnYzMlswXSA+PiAyNF07CiAKLSAgc3RhdGUtPnYzMlswXSA9IGNvbHVtbjAgXiByb3VuZF9rZXkudjMyWzBdOwotICBzdGF0ZS0+djMyWzFdID0gY29sdW1uMSBeIHJvdW5kX2tleS52MzJbMV07Ci0gIHN0YXRlLT52MzJbMl0gPSBjb2x1bW4yIF4gcm91bmRfa2V5LnYzMlsyXTsKLSAgc3RhdGUtPnYzMlszXSA9IGNvbHVtbjMgXiByb3VuZF9rZXkudjMyWzNdOwotICAKKyAgICBjb2x1bW4yID0gVDBbc3RhdGUtPnYzMlsyXSAmIDB4ZmZdIF4gVDFbKHN0YXRlLT52MzJbM10gPj4gOCkgJiAweGZmXSBeCisgICAgICAgICAgICAgIFQyWyhzdGF0ZS0+djMyWzBdID4+IDE2KSAmIDB4ZmZdIF4gVDNbc3RhdGUtPnYzMlsxXSA+PiAyNF07CisKKyAgICBjb2x1bW4zID0gVDBbc3RhdGUtPnYzMlszXSAmIDB4ZmZdIF4gVDFbKHN0YXRlLT52MzJbMF0gPj4gOCkgJiAweGZmXSBeCisgICAgICAgICAgICAgIFQyWyhzdGF0ZS0+djMyWzFdID4+IDE2KSAmIDB4ZmZdIF4gVDNbc3RhdGUtPnYzMlsyXSA+PiAyNF07CisjZW5kaWYgLyogV09SRFNfQklHRU5ESUFOICovCisKKyAgICBzdGF0ZS0+djMyWzBdID0gY29sdW1uMCBeIHJvdW5kX2tleS0+djMyWzBdOworICAgIHN0YXRlLT52MzJbMV0gPSBjb2x1bW4xIF4gcm91bmRfa2V5LT52MzJbMV07CisgICAgc3RhdGUtPnYzMlsyXSA9IGNvbHVtbjIgXiByb3VuZF9rZXktPnYzMlsyXTsKKyAgICBzdGF0ZS0+djMyWzNdID0gY29sdW1uMyBeIHJvdW5kX2tleS0+djMyWzNdOwogfQogCi1pbmxpbmUgdm9pZAotYWVzX2ludl9yb3VuZCh2MTI4X3QgKnN0YXRlLCBjb25zdCB2MTI4X3Qgcm91bmRfa2V5KSB7Ci0gIHVuc2lnbmVkIGxvbmcgY29sdW1uMCwgY29sdW1uMSwgY29sdW1uMiwgY29sdW1uMzsKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZXNfaW52X3JvdW5kKHYxMjhfdCAqc3RhdGUsIGNvbnN0IHYxMjhfdCAqcm91bmRfa2V5KQoreworICAgIHVpbnQzMl90IGNvbHVtbjAsIGNvbHVtbjEsIGNvbHVtbjIsIGNvbHVtbjM7CiAKLSAgLyogY29tcHV0ZSB0aGUgY29sdW1ucyBvZiB0aGUgb3V0cHV0IHNxdWFyZSBpbiB0ZXJtcyBvZiB0aGUgb2N0ZXRzCi0gICAgIG9mIHN0YXRlLCB1c2luZyB0aGUgdGFibGVzIFUwLCBVMSwgVTIsIFUzICovCisvKiBjb21wdXRlIHRoZSBjb2x1bW5zIG9mIHRoZSBvdXRwdXQgc3F1YXJlIGluIHRlcm1zIG9mIHRoZSBvY3RldHMKKyAgIG9mIHN0YXRlLCB1c2luZyB0aGUgdGFibGVzIFUwLCBVMSwgVTIsIFUzICovCiAKLSAgY29sdW1uMCA9IFUwW3N0YXRlLT52MzJbMF0gPj4gMjRdIF4gVTFbKHN0YXRlLT52MzJbM10gPj4gMTYpICYgMHhmZl0KLSAgICBeIFUyWyhzdGF0ZS0+djMyWzJdID4+IDgpICYgMHhmZl0gXiBVM1tzdGF0ZS0+djMyWzFdICYgMHhmZl07Ci0gIAotICBjb2x1bW4xID0gVTBbc3RhdGUtPnYzMlsxXSA+PiAyNF0gXiBVMVsoc3RhdGUtPnYzMlswXSA+PiAxNikgJiAweGZmXQotICAgIF4gVTJbKHN0YXRlLT52MzJbM10gPj4gOCkgJiAweGZmXSBeIFUzW3N0YXRlLT52MzJbMl0gJiAweGZmXTsKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyAgICBjb2x1bW4wID0gVTBbc3RhdGUtPnYzMlswXSA+PiAyNF0gXiBVMVsoc3RhdGUtPnYzMlszXSA+PiAxNikgJiAweGZmXSBeCisgICAgICAgICAgICAgIFUyWyhzdGF0ZS0+djMyWzJdID4+IDgpICYgMHhmZl0gXiBVM1tzdGF0ZS0+djMyWzFdICYgMHhmZl07CiAKLSAgY29sdW1uMiA9IFUwW3N0YXRlLT52MzJbMl0gPj4gMjRdIF4gVTFbKHN0YXRlLT52MzJbMV0gPj4gMTYpICYgMHhmZl0KLSAgICBeIFUyWyhzdGF0ZS0+djMyWzBdID4+IDgpICYgMHhmZl0gXiBVM1tzdGF0ZS0+djMyWzNdICYgMHhmZl07CisgICAgY29sdW1uMSA9IFUwW3N0YXRlLT52MzJbMV0gPj4gMjRdIF4gVTFbKHN0YXRlLT52MzJbMF0gPj4gMTYpICYgMHhmZl0gXgorICAgICAgICAgICAgICBVMlsoc3RhdGUtPnYzMlszXSA+PiA4KSAmIDB4ZmZdIF4gVTNbc3RhdGUtPnYzMlsyXSAmIDB4ZmZdOwogCi0gIGNvbHVtbjMgPSBVMFtzdGF0ZS0+djMyWzNdID4+IDI0XSBeIFUxWyhzdGF0ZS0+djMyWzJdID4+IDE2KSAmIDB4ZmZdCi0gICAgXiBVMlsoc3RhdGUtPnYzMlsxXSA+PiA4KSAmIDB4ZmZdIF4gVTNbc3RhdGUtPnYzMlswXSAmIDB4ZmZdOworICAgIGNvbHVtbjIgPSBVMFtzdGF0ZS0+djMyWzJdID4+IDI0XSBeIFUxWyhzdGF0ZS0+djMyWzFdID4+IDE2KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgICAgVTJbKHN0YXRlLT52MzJbMF0gPj4gOCkgJiAweGZmXSBeIFUzW3N0YXRlLT52MzJbM10gJiAweGZmXTsKIAotICBzdGF0ZS0+djMyWzBdID0gY29sdW1uMCBeIHJvdW5kX2tleS52MzJbMF07Ci0gIHN0YXRlLT52MzJbMV0gPSBjb2x1bW4xIF4gcm91bmRfa2V5LnYzMlsxXTsKLSAgc3RhdGUtPnYzMlsyXSA9IGNvbHVtbjIgXiByb3VuZF9rZXkudjMyWzJdOwotICBzdGF0ZS0+djMyWzNdID0gY29sdW1uMyBeIHJvdW5kX2tleS52MzJbM107Ci0gIAorICAgIGNvbHVtbjMgPSBVMFtzdGF0ZS0+djMyWzNdID4+IDI0XSBeIFUxWyhzdGF0ZS0+djMyWzJdID4+IDE2KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgICAgVTJbKHN0YXRlLT52MzJbMV0gPj4gOCkgJiAweGZmXSBeIFUzW3N0YXRlLT52MzJbMF0gJiAweGZmXTsKKyNlbHNlCisgICAgY29sdW1uMCA9IFUwW3N0YXRlLT52MzJbMF0gJiAweGZmXSBeIFUxWyhzdGF0ZS0+djMyWzNdID4+IDgpICYgMHhmZl0gXgorICAgICAgICAgICAgICBVMlsoc3RhdGUtPnYzMlsyXSA+PiAxNikgJiAweGZmXSBeCisgICAgICAgICAgICAgIFUzWyhzdGF0ZS0+djMyWzFdID4+IDI0KSAmIDB4ZmZdOworCisgICAgY29sdW1uMSA9IFUwW3N0YXRlLT52MzJbMV0gJiAweGZmXSBeIFUxWyhzdGF0ZS0+djMyWzBdID4+IDgpICYgMHhmZl0gXgorICAgICAgICAgICAgICBVMlsoc3RhdGUtPnYzMlszXSA+PiAxNikgJiAweGZmXSBeCisgICAgICAgICAgICAgIFUzWyhzdGF0ZS0+djMyWzJdID4+IDI0KSAmIDB4ZmZdOworCisgICAgY29sdW1uMiA9IFUwW3N0YXRlLT52MzJbMl0gJiAweGZmXSBeIFUxWyhzdGF0ZS0+djMyWzFdID4+IDgpICYgMHhmZl0gXgorICAgICAgICAgICAgICBVMlsoc3RhdGUtPnYzMlswXSA+PiAxNikgJiAweGZmXSBeCisgICAgICAgICAgICAgIFUzWyhzdGF0ZS0+djMyWzNdID4+IDI0KSAmIDB4ZmZdOworCisgICAgY29sdW1uMyA9IFUwW3N0YXRlLT52MzJbM10gJiAweGZmXSBeIFUxWyhzdGF0ZS0+djMyWzJdID4+IDgpICYgMHhmZl0gXgorICAgICAgICAgICAgICBVMlsoc3RhdGUtPnYzMlsxXSA+PiAxNikgJiAweGZmXSBeCisgICAgICAgICAgICAgIFUzWyhzdGF0ZS0+djMyWzBdID4+IDI0KSAmIDB4ZmZdOworI2VuZGlmIC8qIFdPUkRTX0JJR0VORElBTiAqLworCisgICAgc3RhdGUtPnYzMlswXSA9IGNvbHVtbjAgXiByb3VuZF9rZXktPnYzMlswXTsKKyAgICBzdGF0ZS0+djMyWzFdID0gY29sdW1uMSBeIHJvdW5kX2tleS0+djMyWzFdOworICAgIHN0YXRlLT52MzJbMl0gPSBjb2x1bW4yIF4gcm91bmRfa2V5LT52MzJbMl07CisgICAgc3RhdGUtPnYzMlszXSA9IGNvbHVtbjMgXiByb3VuZF9rZXktPnYzMlszXTsKIH0KIAotaW5saW5lIHZvaWQKLWFlc19maW5hbF9yb3VuZCh2MTI4X3QgKnN0YXRlLCB2MTI4X3Qgcm91bmRfa2V5KSB7Ci0gIHVpbnQzMl90IHRtcDAsIHRtcDEsIHRtcDIsIHRtcDM7CitzdGF0aWMgaW5saW5lIHZvaWQgYWVzX2ZpbmFsX3JvdW5kKHYxMjhfdCAqc3RhdGUsIGNvbnN0IHYxMjhfdCAqcm91bmRfa2V5KQoreworICAgIHVpbnQzMl90IHRtcDAsIHRtcDEsIHRtcDIsIHRtcDM7CiAKLSAgdG1wMCA9IChUNFsoc3RhdGUtPnYzMlswXSA+PiAyNCldICAgICAgICAmIDB4ZmYwMDAwMDApIAotICAgICAgIF4gKFQ0WyhzdGF0ZS0+djMyWzFdID4+IDE2KSAmIDB4ZmZdICYgMHgwMGZmMDAwMCkgCi0gICAgICAgXiAoVDRbKHN0YXRlLT52MzJbMl0gPj4gIDgpICYgMHhmZl0gJiAweDAwMDBmZjAwKSAKLSAgICAgICBeIChUNFsoc3RhdGUtPnYzMlszXSAgICAgICkgJiAweGZmXSAmIDB4MDAwMDAwZmYpIAotICAgICAgIF4gcm91bmRfa2V5LnYzMlswXTsKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyAgICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisgICAgdG1wMCA9IChUNFsoc3RhdGUtPnYzMlswXSA+PiAyNCldICAgICAgICAmIDB4ZmYwMDAwMDApIF4KKyAgICAgICAgICAgKFQ0WyhzdGF0ZS0+djMyWzFdID4+IDE2KSAmIDB4ZmZdICYgMHgwMGZmMDAwMCkgXgorICAgICAgICAgICAoVDRbKHN0YXRlLT52MzJbMl0gPj4gIDgpICYgMHhmZl0gJiAweDAwMDBmZjAwKSBeCisgICAgICAgICAgIChUNFsoc3RhdGUtPnYzMlszXSAgICAgICkgJiAweGZmXSAmIDB4MDAwMDAwZmYpIF4KKyAgICAgICAgICAgcm91bmRfa2V5LT52MzJbMF07CiAKLSAgdG1wMSA9IChUNFsoc3RhdGUtPnYzMlsxXSA+PiAyNCldICAgICAgICAmIDB4ZmYwMDAwMDApCi0gICAgICAgXiAoVDRbKHN0YXRlLT52MzJbMl0gPj4gMTYpICYgMHhmZl0gJiAweDAwZmYwMDAwKQotICAgICAgIF4gKFQ0WyhzdGF0ZS0+djMyWzNdID4+ICA4KSAmIDB4ZmZdICYgMHgwMDAwZmYwMCkKLSAgICAgICBeIChUNFsoc3RhdGUtPnYzMlswXSAgICAgICkgJiAweGZmXSAmIDB4MDAwMDAwZmYpCi0gICAgICAgXiByb3VuZF9rZXkudjMyWzFdOworICAgIHRtcDEgPSAoVDRbKHN0YXRlLT52MzJbMV0gPj4gMjQpXSAgICAgICAgJiAweGZmMDAwMDAwKSBeCisgICAgICAgICAgIChUNFsoc3RhdGUtPnYzMlsyXSA+PiAxNikgJiAweGZmXSAmIDB4MDBmZjAwMDApIF4KKyAgICAgICAgICAgKFQ0WyhzdGF0ZS0+djMyWzNdID4+ICA4KSAmIDB4ZmZdICYgMHgwMDAwZmYwMCkgXgorICAgICAgICAgICAoVDRbKHN0YXRlLT52MzJbMF0gICAgICApICYgMHhmZl0gJiAweDAwMDAwMGZmKSBeCisgICAgICAgICAgIHJvdW5kX2tleS0+djMyWzFdOwogCi0gIHRtcDIgPSAoVDRbKHN0YXRlLT52MzJbMl0gPj4gMjQpXSAgICAgICAgJiAweGZmMDAwMDAwKQotICAgICAgIF4gKFQ0WyhzdGF0ZS0+djMyWzNdID4+IDE2KSAmIDB4ZmZdICYgMHgwMGZmMDAwMCkKLSAgICAgICBeIChUNFsoc3RhdGUtPnYzMlswXSA+PiAgOCkgJiAweGZmXSAmIDB4MDAwMGZmMDApCi0gICAgICAgXiAoVDRbKHN0YXRlLT52MzJbMV0gICAgICApICYgMHhmZl0gJiAweDAwMDAwMGZmKQotICAgICAgIF4gcm91bmRfa2V5LnYzMlsyXTsKKyAgICB0bXAyID0gKFQ0WyhzdGF0ZS0+djMyWzJdID4+IDI0KV0gICAgICAgICYgMHhmZjAwMDAwMCkgXgorICAgICAgICAgICAoVDRbKHN0YXRlLT52MzJbM10gPj4gMTYpICYgMHhmZl0gJiAweDAwZmYwMDAwKSBeCisgICAgICAgICAgIChUNFsoc3RhdGUtPnYzMlswXSA+PiAgOCkgJiAweGZmXSAmIDB4MDAwMGZmMDApIF4KKyAgICAgICAgICAgKFQ0WyhzdGF0ZS0+djMyWzFdICAgICAgKSAmIDB4ZmZdICYgMHgwMDAwMDBmZikgXgorICAgICAgICAgICByb3VuZF9rZXktPnYzMlsyXTsKIAotICB0bXAzID0gKFQ0WyhzdGF0ZS0+djMyWzNdID4+IDI0KV0gICAgICAgICYgMHhmZjAwMDAwMCkKLSAgICAgICBeIChUNFsoc3RhdGUtPnYzMlswXSA+PiAxNikgJiAweGZmXSAmIDB4MDBmZjAwMDApCi0gICAgICAgXiAoVDRbKHN0YXRlLT52MzJbMV0gPj4gIDgpICYgMHhmZl0gJiAweDAwMDBmZjAwKQotICAgICAgIF4gKFQ0WyhzdGF0ZS0+djMyWzJdICAgICAgKSAmIDB4ZmZdICYgMHgwMDAwMDBmZikKLSAgICAgICBeIHJvdW5kX2tleS52MzJbM107CisgICAgdG1wMyA9IChUNFsoc3RhdGUtPnYzMlszXSA+PiAyNCldICAgICAgICAmIDB4ZmYwMDAwMDApIF4KKyAgICAgICAgICAgKFQ0WyhzdGF0ZS0+djMyWzBdID4+IDE2KSAmIDB4ZmZdICYgMHgwMGZmMDAwMCkgXgorICAgICAgICAgICAoVDRbKHN0YXRlLT52MzJbMV0gPj4gIDgpICYgMHhmZl0gJiAweDAwMDBmZjAwKSBeCisgICAgICAgICAgIChUNFsoc3RhdGUtPnYzMlsyXSAgICAgICkgJiAweGZmXSAmIDB4MDAwMDAwZmYpIF4KKyAgICAgICAgICAgcm91bmRfa2V5LT52MzJbM107CisjZWxzZQorICAgIHRtcDAgPSAoVDRbKHN0YXRlLT52MzJbM10gPj4gMjQpXSAgICAgICAgJiAweGZmMDAwMDAwKSBeCisgICAgICAgICAgIChUNFsoc3RhdGUtPnYzMlsyXSA+PiAxNikgJiAweGZmXSAmIDB4MDBmZjAwMDApIF4KKyAgICAgICAgICAgKFQ0WyhzdGF0ZS0+djMyWzFdID4+ICA4KSAmIDB4ZmZdICYgMHgwMDAwZmYwMCkgXgorICAgICAgICAgICAoVDRbKHN0YXRlLT52MzJbMF0gICAgICApICYgMHhmZl0gJiAweDAwMDAwMGZmKSBeCisgICAgICAgICAgIHJvdW5kX2tleS0+djMyWzBdOwogCi0gIHN0YXRlLT52MzJbMF0gPSB0bXAwOwotICBzdGF0ZS0+djMyWzFdID0gdG1wMTsKLSAgc3RhdGUtPnYzMlsyXSA9IHRtcDI7Ci0gIHN0YXRlLT52MzJbM10gPSB0bXAzOworICAgIHRtcDEgPSAoVDRbKHN0YXRlLT52MzJbMF0gPj4gMjQpXSAgICAgICAgJiAweGZmMDAwMDAwKSBeCisgICAgICAgICAgIChUNFsoc3RhdGUtPnYzMlszXSA+PiAxNikgJiAweGZmXSAmIDB4MDBmZjAwMDApIF4KKyAgICAgICAgICAgKFQ0WyhzdGF0ZS0+djMyWzJdID4+ICA4KSAmIDB4ZmZdICYgMHgwMDAwZmYwMCkgXgorICAgICAgICAgICAoVDRbKHN0YXRlLT52MzJbMV0gICAgICApICYgMHhmZl0gJiAweDAwMDAwMGZmKSBeCisgICAgICAgICAgIHJvdW5kX2tleS0+djMyWzFdOwogCisgICAgdG1wMiA9IChUNFsoc3RhdGUtPnYzMlsxXSA+PiAyNCldICAgICAgICAmIDB4ZmYwMDAwMDApIF4KKyAgICAgICAgICAgKFQ0WyhzdGF0ZS0+djMyWzBdID4+IDE2KSAmIDB4ZmZdICYgMHgwMGZmMDAwMCkgXgorICAgICAgICAgICAoVDRbKHN0YXRlLT52MzJbM10gPj4gIDgpICYgMHhmZl0gJiAweDAwMDBmZjAwKSBeCisgICAgICAgICAgIChUNFsoc3RhdGUtPnYzMlsyXSAgICAgICkgJiAweGZmXSAmIDB4MDAwMDAwZmYpIF4KKyAgICAgICAgICAgcm91bmRfa2V5LT52MzJbMl07CisKKyAgICB0bXAzID0gKFQ0WyhzdGF0ZS0+djMyWzJdID4+IDI0KV0gICAgICAgICYgMHhmZjAwMDAwMCkgXgorICAgICAgICAgICAoVDRbKHN0YXRlLT52MzJbMV0gPj4gMTYpICYgMHhmZl0gJiAweDAwZmYwMDAwKSBeCisgICAgICAgICAgIChUNFsoc3RhdGUtPnYzMlswXSA+PiAgOCkgJiAweGZmXSAmIDB4MDAwMGZmMDApIF4KKyAgICAgICAgICAgKFQ0WyhzdGF0ZS0+djMyWzNdICAgICAgKSAmIDB4ZmZdICYgMHgwMDAwMDBmZikgXgorICAgICAgICAgICByb3VuZF9rZXktPnYzMlszXTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworI2VuZGlmIC8qIFdPUkRTX0JJR0VORElBTiAqLworCisgICAgc3RhdGUtPnYzMlswXSA9IHRtcDA7CisgICAgc3RhdGUtPnYzMlsxXSA9IHRtcDE7CisgICAgc3RhdGUtPnYzMlsyXSA9IHRtcDI7CisgICAgc3RhdGUtPnYzMlszXSA9IHRtcDM7CiB9CiAKLWlubGluZSB2b2lkCi1hZXNfaW52X2ZpbmFsX3JvdW5kKHYxMjhfdCAqc3RhdGUsIHYxMjhfdCByb3VuZF9rZXkpIHsKLSAgdWludDMyX3QgdG1wMCwgdG1wMSwgdG1wMiwgdG1wMzsKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZXNfaW52X2ZpbmFsX3JvdW5kKHYxMjhfdCAqc3RhdGUsIGNvbnN0IHYxMjhfdCAqcm91bmRfa2V5KQoreworICAgIHVpbnQzMl90IHRtcDAsIHRtcDEsIHRtcDIsIHRtcDM7CiAKLSAgdG1wMCA9IChVNFsoc3RhdGUtPnYzMlswXSA+PiAyNCldICAgICAgICAmIDB4ZmYwMDAwMDApIAotICAgICAgIF4gKFU0WyhzdGF0ZS0+djMyWzNdID4+IDE2KSAmIDB4ZmZdICYgMHgwMGZmMDAwMCkgCi0gICAgICAgXiAoVTRbKHN0YXRlLT52MzJbMl0gPj4gIDgpICYgMHhmZl0gJiAweDAwMDBmZjAwKSAKLSAgICAgICBeIChVNFsoc3RhdGUtPnYzMlsxXSAgICAgICkgJiAweGZmXSAmIDB4MDAwMDAwZmYpIAotICAgICAgIF4gcm91bmRfa2V5LnYzMlswXTsKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyAgICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisgICAgdG1wMCA9IChVNFsoc3RhdGUtPnYzMlswXSA+PiAyNCldICAgICAgICAmIDB4ZmYwMDAwMDApIF4KKyAgICAgICAgICAgKFU0WyhzdGF0ZS0+djMyWzNdID4+IDE2KSAmIDB4ZmZdICYgMHgwMGZmMDAwMCkgXgorICAgICAgICAgICAoVTRbKHN0YXRlLT52MzJbMl0gPj4gIDgpICYgMHhmZl0gJiAweDAwMDBmZjAwKSBeCisgICAgICAgICAgIChVNFsoc3RhdGUtPnYzMlsxXSAgICAgICkgJiAweGZmXSAmIDB4MDAwMDAwZmYpIF4KKyAgICAgICAgICAgcm91bmRfa2V5LT52MzJbMF07CiAKLSAgdG1wMSA9IChVNFsoc3RhdGUtPnYzMlsxXSA+PiAyNCldICAgICAgICAmIDB4ZmYwMDAwMDApCi0gICAgICAgXiAoVTRbKHN0YXRlLT52MzJbMF0gPj4gMTYpICYgMHhmZl0gJiAweDAwZmYwMDAwKQotICAgICAgIF4gKFU0WyhzdGF0ZS0+djMyWzNdID4+ICA4KSAmIDB4ZmZdICYgMHgwMDAwZmYwMCkKLSAgICAgICBeIChVNFsoc3RhdGUtPnYzMlsyXSAgICAgICkgJiAweGZmXSAmIDB4MDAwMDAwZmYpCi0gICAgICAgXiByb3VuZF9rZXkudjMyWzFdOworICAgIHRtcDEgPSAoVTRbKHN0YXRlLT52MzJbMV0gPj4gMjQpXSAgICAgICAgJiAweGZmMDAwMDAwKSBeCisgICAgICAgICAgIChVNFsoc3RhdGUtPnYzMlswXSA+PiAxNikgJiAweGZmXSAmIDB4MDBmZjAwMDApIF4KKyAgICAgICAgICAgKFU0WyhzdGF0ZS0+djMyWzNdID4+ICA4KSAmIDB4ZmZdICYgMHgwMDAwZmYwMCkgXgorICAgICAgICAgICAoVTRbKHN0YXRlLT52MzJbMl0gICAgICApICYgMHhmZl0gJiAweDAwMDAwMGZmKSBeCisgICAgICAgICAgIHJvdW5kX2tleS0+djMyWzFdOwogCi0gIHRtcDIgPSAoVTRbKHN0YXRlLT52MzJbMl0gPj4gMjQpXSAgICAgICAgJiAweGZmMDAwMDAwKQotICAgICAgIF4gKFU0WyhzdGF0ZS0+djMyWzFdID4+IDE2KSAmIDB4ZmZdICYgMHgwMGZmMDAwMCkKLSAgICAgICBeIChVNFsoc3RhdGUtPnYzMlswXSA+PiAgOCkgJiAweGZmXSAmIDB4MDAwMGZmMDApCi0gICAgICAgXiAoVTRbKHN0YXRlLT52MzJbM10gICAgICApICYgMHhmZl0gJiAweDAwMDAwMGZmKQotICAgICAgIF4gcm91bmRfa2V5LnYzMlsyXTsKKyAgICB0bXAyID0gKFU0WyhzdGF0ZS0+djMyWzJdID4+IDI0KV0gICAgICAgICYgMHhmZjAwMDAwMCkgXgorICAgICAgICAgICAoVTRbKHN0YXRlLT52MzJbMV0gPj4gMTYpICYgMHhmZl0gJiAweDAwZmYwMDAwKSBeCisgICAgICAgICAgIChVNFsoc3RhdGUtPnYzMlswXSA+PiAgOCkgJiAweGZmXSAmIDB4MDAwMGZmMDApIF4KKyAgICAgICAgICAgKFU0WyhzdGF0ZS0+djMyWzNdICAgICAgKSAmIDB4ZmZdICYgMHgwMDAwMDBmZikgXgorICAgICAgICAgICByb3VuZF9rZXktPnYzMlsyXTsKIAotICB0bXAzID0gKFU0WyhzdGF0ZS0+djMyWzNdID4+IDI0KV0gICAgICAgICYgMHhmZjAwMDAwMCkKLSAgICAgICBeIChVNFsoc3RhdGUtPnYzMlsyXSA+PiAxNikgJiAweGZmXSAmIDB4MDBmZjAwMDApCi0gICAgICAgXiAoVTRbKHN0YXRlLT52MzJbMV0gPj4gIDgpICYgMHhmZl0gJiAweDAwMDBmZjAwKQotICAgICAgIF4gKFU0WyhzdGF0ZS0+djMyWzBdICAgICAgKSAmIDB4ZmZdICYgMHgwMDAwMDBmZikKLSAgICAgICBeIHJvdW5kX2tleS52MzJbM107CisgICAgdG1wMyA9IChVNFsoc3RhdGUtPnYzMlszXSA+PiAyNCldICAgICAgICAmIDB4ZmYwMDAwMDApIF4KKyAgICAgICAgICAgKFU0WyhzdGF0ZS0+djMyWzJdID4+IDE2KSAmIDB4ZmZdICYgMHgwMGZmMDAwMCkgXgorICAgICAgICAgICAoVTRbKHN0YXRlLT52MzJbMV0gPj4gIDgpICYgMHhmZl0gJiAweDAwMDBmZjAwKSBeCisgICAgICAgICAgIChVNFsoc3RhdGUtPnYzMlswXSAgICAgICkgJiAweGZmXSAmIDB4MDAwMDAwZmYpIF4KKyAgICAgICAgICAgcm91bmRfa2V5LT52MzJbM107CisjZWxzZQorICAgIHRtcDAgPSAoVTRbKHN0YXRlLT52MzJbMV0gPj4gMjQpXSAgICAgICAgJiAweGZmMDAwMDAwKSBeCisgICAgICAgICAgIChVNFsoc3RhdGUtPnYzMlsyXSA+PiAxNikgJiAweGZmXSAmIDB4MDBmZjAwMDApIF4KKyAgICAgICAgICAgKFU0WyhzdGF0ZS0+djMyWzNdID4+ICA4KSAmIDB4ZmZdICYgMHgwMDAwZmYwMCkgXgorICAgICAgICAgICAoVTRbKHN0YXRlLT52MzJbMF0gICAgICApICYgMHhmZl0gJiAweDAwMDAwMGZmKSBeCisgICAgICAgICAgIHJvdW5kX2tleS0+djMyWzBdOwogCi0gIHN0YXRlLT52MzJbMF0gPSB0bXAwOwotICBzdGF0ZS0+djMyWzFdID0gdG1wMTsKLSAgc3RhdGUtPnYzMlsyXSA9IHRtcDI7Ci0gIHN0YXRlLT52MzJbM10gPSB0bXAzOworICAgIHRtcDEgPSAoVTRbKHN0YXRlLT52MzJbMl0gPj4gMjQpXSAgICAgICAgJiAweGZmMDAwMDAwKSBeCisgICAgICAgICAgIChVNFsoc3RhdGUtPnYzMlszXSA+PiAxNikgJiAweGZmXSAmIDB4MDBmZjAwMDApIF4KKyAgICAgICAgICAgKFU0WyhzdGF0ZS0+djMyWzBdID4+ICA4KSAmIDB4ZmZdICYgMHgwMDAwZmYwMCkgXgorICAgICAgICAgICAoVTRbKHN0YXRlLT52MzJbMV0gICAgICApICYgMHhmZl0gJiAweDAwMDAwMGZmKSBeCisgICAgICAgICAgIHJvdW5kX2tleS0+djMyWzFdOwogCisgICAgdG1wMiA9IChVNFsoc3RhdGUtPnYzMlszXSA+PiAyNCldICAgICAgICAmIDB4ZmYwMDAwMDApIF4KKyAgICAgICAgICAgKFU0WyhzdGF0ZS0+djMyWzBdID4+IDE2KSAmIDB4ZmZdICYgMHgwMGZmMDAwMCkgXgorICAgICAgICAgICAoVTRbKHN0YXRlLT52MzJbMV0gPj4gIDgpICYgMHhmZl0gJiAweDAwMDBmZjAwKSBeCisgICAgICAgICAgIChVNFsoc3RhdGUtPnYzMlsyXSAgICAgICkgJiAweGZmXSAmIDB4MDAwMDAwZmYpIF4KKyAgICAgICAgICAgcm91bmRfa2V5LT52MzJbMl07CisKKyAgICB0bXAzID0gKFU0WyhzdGF0ZS0+djMyWzBdID4+IDI0KV0gICAgICAgICYgMHhmZjAwMDAwMCkgXgorICAgICAgICAgICAoVTRbKHN0YXRlLT52MzJbMV0gPj4gMTYpICYgMHhmZl0gJiAweDAwZmYwMDAwKSBeCisgICAgICAgICAgIChVNFsoc3RhdGUtPnYzMlsyXSA+PiAgOCkgJiAweGZmXSAmIDB4MDAwMGZmMDApIF4KKyAgICAgICAgICAgKFU0WyhzdGF0ZS0+djMyWzNdICAgICAgKSAmIDB4ZmZdICYgMHgwMDAwMDBmZikgXgorICAgICAgICAgICByb3VuZF9rZXktPnYzMlszXTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworI2VuZGlmIC8qIFdPUkRTX0JJR0VORElBTiAqLworCisgICAgc3RhdGUtPnYzMlswXSA9IHRtcDA7CisgICAgc3RhdGUtPnYzMlsxXSA9IHRtcDE7CisgICAgc3RhdGUtPnYzMlsyXSA9IHRtcDI7CisgICAgc3RhdGUtPnYzMlszXSA9IHRtcDM7CiB9CiAKLSNlbGlmIENQVV8xNiAgLyogYXNzdW1lIDE2LWJpdCB3b3JkIHNpemUgb24gcHJvY2Vzc29yICovCisjZWxpZiBDUFVfMTYgLyogYXNzdW1lIDE2LWJpdCB3b3JkIHNpemUgb24gcHJvY2Vzc29yICovCiAKLWlubGluZSB2b2lkCi1hZXNfcm91bmQodjEyOF90ICpzdGF0ZSwgY29uc3QgdjEyOF90IHJvdW5kX2tleSkgewotICB1bnNpZ25lZCBsb25nIGNvbHVtbjAsIGNvbHVtbjEsIGNvbHVtbjIsIGNvbHVtbjM7Ci0gIHVpbnQxNl90IGMKLSAgLyogY29tcHV0ZSB0aGUgY29sdW1ucyBvZiB0aGUgb3V0cHV0IHNxdWFyZSBpbiB0ZXJtcyBvZiB0aGUgb2N0ZXRzCi0gICAgIG9mIHN0YXRlLCB1c2luZyB0aGUgdGFibGVzIFQwLCBUMSwgVDIsIFQzICovCitzdGF0aWMgaW5saW5lIHZvaWQgYWVzX3JvdW5kKHYxMjhfdCAqc3RhdGUsIGNvbnN0IHYxMjhfdCAqcm91bmRfa2V5KQoreworICAgIHVpbnQzMl90IGNvbHVtbjAsIGNvbHVtbjEsIGNvbHVtbjIsIGNvbHVtbjM7CisgICAgLyogY29tcHV0ZSB0aGUgY29sdW1ucyBvZiB0aGUgb3V0cHV0IHNxdWFyZSBpbiB0ZXJtcyBvZiB0aGUgb2N0ZXRzCisgICAgICAgb2Ygc3RhdGUsIHVzaW5nIHRoZSB0YWJsZXMgVDAsIFQxLCBUMiwgVDMgKi8KIAotICBjb2x1bW4wID0gVDBbc3RhdGUtPm9jdGV0WzBdXSBeIFQxW3N0YXRlLT5vY3RldFs1XV0KLSAgICBeIFQyW3N0YXRlLT5vY3RldFsxMF1dIF4gVDNbc3RhdGUtPm9jdGV0WzE1XV07Ci0gIAotICBjb2x1bW4xID0gVDBbc3RhdGUtPm9jdGV0WzRdXSBeIFQxW3N0YXRlLT5vY3RldFs5XV0KLSAgICBeIFQyW3N0YXRlLT5vY3RldFsxNF1dIF4gVDNbc3RhdGUtPm9jdGV0WzNdXTsKKyAgICBjb2x1bW4wID0gVDBbc3RhdGUtPnY4WzBdXSBeIFQxW3N0YXRlLT52OFs1XV0gXiBUMltzdGF0ZS0+djhbMTBdXSBeCisgICAgICAgICAgICAgIFQzW3N0YXRlLT52OFsxNV1dOwogCi0gIGNvbHVtbjIgPSBUMFtzdGF0ZS0+b2N0ZXRbOF1dIF4gVDFbc3RhdGUtPm9jdGV0WzEzXV0KLSAgICBeIFQyW3N0YXRlLT5vY3RldFsyXV0gXiBUM1tzdGF0ZS0+b2N0ZXRbN11dOworICAgIGNvbHVtbjEgPSBUMFtzdGF0ZS0+djhbNF1dIF4gVDFbc3RhdGUtPnY4WzldXSBeIFQyW3N0YXRlLT52OFsxNF1dIF4KKyAgICAgICAgICAgICAgVDNbc3RhdGUtPnY4WzNdXTsKIAotICBjb2x1bW4zID0gVDBbc3RhdGUtPm9jdGV0WzEyXV0gXiBUMVtzdGF0ZS0+b2N0ZXRbMV1dCi0gICAgXiBUMltzdGF0ZS0+b2N0ZXRbNl1dIF4gVDNbc3RhdGUtPm9jdGV0WzExXV07CisgICAgY29sdW1uMiA9IFQwW3N0YXRlLT52OFs4XV0gXiBUMVtzdGF0ZS0+djhbMTNdXSBeIFQyW3N0YXRlLT52OFsyXV0gXgorICAgICAgICAgICAgICBUM1tzdGF0ZS0+djhbN11dOwogCi0gIHN0YXRlLT52MzJbMF0gPSBjb2x1bW4wIF4gcm91bmRfa2V5LnYzMlswXTsKLSAgc3RhdGUtPnYzMlsxXSA9IGNvbHVtbjEgXiByb3VuZF9rZXkudjMyWzFdOwotICBzdGF0ZS0+djMyWzJdID0gY29sdW1uMiBeIHJvdW5kX2tleS52MzJbMl07Ci0gIHN0YXRlLT52MzJbM10gPSBjb2x1bW4zIF4gcm91bmRfa2V5LnYzMlszXTsKLSAgCisgICAgY29sdW1uMyA9IFQwW3N0YXRlLT52OFsxMl1dIF4gVDFbc3RhdGUtPnY4WzFdXSBeIFQyW3N0YXRlLT52OFs2XV0gXgorICAgICAgICAgICAgICBUM1tzdGF0ZS0+djhbMTFdXTsKKworICAgIHN0YXRlLT52MzJbMF0gPSBjb2x1bW4wIF4gcm91bmRfa2V5LT52MzJbMF07CisgICAgc3RhdGUtPnYzMlsxXSA9IGNvbHVtbjEgXiByb3VuZF9rZXktPnYzMlsxXTsKKyAgICBzdGF0ZS0+djMyWzJdID0gY29sdW1uMiBeIHJvdW5kX2tleS0+djMyWzJdOworICAgIHN0YXRlLT52MzJbM10gPSBjb2x1bW4zIF4gcm91bmRfa2V5LT52MzJbM107CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZXNfaW52X3JvdW5kKHYxMjhfdCAqc3RhdGUsIGNvbnN0IHYxMjhfdCAqcm91bmRfa2V5KQoreworICAgIHVpbnQzMl90IGNvbHVtbjAsIGNvbHVtbjEsIGNvbHVtbjIsIGNvbHVtbjM7CiAKLWlubGluZSB2b2lkCi1hZXNfaW52X3JvdW5kKHYxMjhfdCAqc3RhdGUsIGNvbnN0IHYxMjhfdCByb3VuZF9rZXkpIHsKLSAgdW5zaWduZWQgbG9uZyBjb2x1bW4wLCBjb2x1bW4xLCBjb2x1bW4yLCBjb2x1bW4zOworICAgIC8qIGNvbXB1dGUgdGhlIGNvbHVtbnMgb2YgdGhlIG91dHB1dCBzcXVhcmUgaW4gdGVybXMgb2YgdGhlIG9jdGV0cworICAgICAgIG9mIHN0YXRlLCB1c2luZyB0aGUgdGFibGVzIFUwLCBVMSwgVTIsIFUzICovCiAKLSAgLyogY29tcHV0ZSB0aGUgY29sdW1ucyBvZiB0aGUgb3V0cHV0IHNxdWFyZSBpbiB0ZXJtcyBvZiB0aGUgb2N0ZXRzCi0gICAgIG9mIHN0YXRlLCB1c2luZyB0aGUgdGFibGVzIFUwLCBVMSwgVTIsIFUzICovCisgICAgY29sdW1uMCA9IFUwW3N0YXRlLT52OFswXV0gXiBVMVtzdGF0ZS0+djhbNV1dIF4gVTJbc3RhdGUtPnY4WzEwXV0gXgorICAgICAgICAgICAgICBVM1tzdGF0ZS0+djhbMTVdXTsKIAotICBjb2x1bW4wID0gVTBbc3RhdGUtPm9jdGV0WzBdXSBeIFUxW3N0YXRlLT5vY3RldFs1XV0KLSAgICBeIFUyW3N0YXRlLT5vY3RldFsxMF1dIF4gVTNbc3RhdGUtPm9jdGV0WzE1XV07Ci0gIAotICBjb2x1bW4xID0gVTBbc3RhdGUtPm9jdGV0WzRdXSBeIFUxW3N0YXRlLT5vY3RldFs5XV0KLSAgICBeIFUyW3N0YXRlLT5vY3RldFsxNF1dIF4gVTNbc3RhdGUtPm9jdGV0WzNdXTsKKyAgICBjb2x1bW4xID0gVTBbc3RhdGUtPnY4WzRdXSBeIFUxW3N0YXRlLT52OFs5XV0gXiBVMltzdGF0ZS0+djhbMTRdXSBeCisgICAgICAgICAgICAgIFUzW3N0YXRlLT52OFszXV07CiAKLSAgY29sdW1uMiA9IFUwW3N0YXRlLT5vY3RldFs4XV0gXiBVMVtzdGF0ZS0+b2N0ZXRbMTNdXQotICAgIF4gVTJbc3RhdGUtPm9jdGV0WzJdXSBeIFUzW3N0YXRlLT5vY3RldFs3XV07CisgICAgY29sdW1uMiA9IFUwW3N0YXRlLT52OFs4XV0gXiBVMVtzdGF0ZS0+djhbMTNdXSBeIFUyW3N0YXRlLT52OFsyXV0gXgorICAgICAgICAgICAgICBVM1tzdGF0ZS0+djhbN11dOwogCi0gIGNvbHVtbjMgPSBVMFtzdGF0ZS0+b2N0ZXRbMTJdXSBeIFUxW3N0YXRlLT5vY3RldFsxXV0KLSAgICBeIFUyW3N0YXRlLT5vY3RldFs2XV0gXiBVM1tzdGF0ZS0+b2N0ZXRbMTFdXTsKKyAgICBjb2x1bW4zID0gVTBbc3RhdGUtPnY4WzEyXV0gXiBVMVtzdGF0ZS0+djhbMV1dIF4gVTJbc3RhdGUtPnY4WzZdXSBeCisgICAgICAgICAgICAgIFUzW3N0YXRlLT52OFsxMV1dOwogCi0gIHN0YXRlLT52MzJbMF0gPSBjb2x1bW4wIF4gcm91bmRfa2V5LnYzMlswXTsKLSAgc3RhdGUtPnYzMlsxXSA9IGNvbHVtbjEgXiByb3VuZF9rZXkudjMyWzFdOwotICBzdGF0ZS0+djMyWzJdID0gY29sdW1uMiBeIHJvdW5kX2tleS52MzJbMl07Ci0gIHN0YXRlLT52MzJbM10gPSBjb2x1bW4zIF4gcm91bmRfa2V5LnYzMlszXTsKLSAgCisgICAgc3RhdGUtPnYzMlswXSA9IGNvbHVtbjAgXiByb3VuZF9rZXktPnYzMlswXTsKKyAgICBzdGF0ZS0+djMyWzFdID0gY29sdW1uMSBeIHJvdW5kX2tleS0+djMyWzFdOworICAgIHN0YXRlLT52MzJbMl0gPSBjb2x1bW4yIF4gcm91bmRfa2V5LT52MzJbMl07CisgICAgc3RhdGUtPnYzMlszXSA9IGNvbHVtbjMgXiByb3VuZF9rZXktPnYzMlszXTsKIH0KIAotaW5saW5lIHZvaWQKLWFlc19maW5hbF9yb3VuZCh2MTI4X3QgKnN0YXRlLCB2MTI4X3Qgcm91bmRfa2V5KSB7Ci0gIG9jdGV0X3QgdG1wOworc3RhdGljIGlubGluZSB2b2lkIGFlc19maW5hbF9yb3VuZCh2MTI4X3QgKnN0YXRlLCBjb25zdCB2MTI4X3QgKnJvdW5kX2tleSkKK3sKKyAgICB1aW50OF90IHRtcDsKIAotICAvKiBieXRlIHN1YnN0aXR1dGlvbnMgYW5kIHJvdyBzaGlmdHMgKi8KLSAgLyogZmlyc3Qgcm93IC0gbm8gc2hpZnQgKi8KLSAgc3RhdGUtPm9jdGV0WzBdID0gYWVzX3Nib3hbc3RhdGUtPm9jdGV0WzBdXTsKLSAgc3RhdGUtPm9jdGV0WzRdID0gYWVzX3Nib3hbc3RhdGUtPm9jdGV0WzRdXTsKLSAgc3RhdGUtPm9jdGV0WzhdID0gYWVzX3Nib3hbc3RhdGUtPm9jdGV0WzhdXTsKLSAgc3RhdGUtPm9jdGV0WzEyXSA9IGFlc19zYm94W3N0YXRlLT5vY3RldFsxMl1dOworICAgIC8qIGJ5dGUgc3Vic3RpdHV0aW9ucyBhbmQgcm93IHNoaWZ0cyAqLworICAgIC8qIGZpcnN0IHJvdyAtIG5vIHNoaWZ0ICovCisgICAgc3RhdGUtPnY4WzBdID0gYWVzX3Nib3hbc3RhdGUtPnY4WzBdXTsKKyAgICBzdGF0ZS0+djhbNF0gPSBhZXNfc2JveFtzdGF0ZS0+djhbNF1dOworICAgIHN0YXRlLT52OFs4XSA9IGFlc19zYm94W3N0YXRlLT52OFs4XV07CisgICAgc3RhdGUtPnY4WzEyXSA9IGFlc19zYm94W3N0YXRlLT52OFsxMl1dOwogCi0gIC8qIHNlY29uZCByb3cgLSBzaGlmdCBvbmUgbGVmdCAqLwotICB0bXAgPSBhZXNfc2JveFtzdGF0ZS0+b2N0ZXRbMV1dOwotICBzdGF0ZS0+b2N0ZXRbMV0gPSBhZXNfc2JveFtzdGF0ZS0+b2N0ZXRbNV1dOwotICBzdGF0ZS0+b2N0ZXRbNV0gPSBhZXNfc2JveFtzdGF0ZS0+b2N0ZXRbOV1dOwotICBzdGF0ZS0+b2N0ZXRbOV0gPSBhZXNfc2JveFtzdGF0ZS0+b2N0ZXRbMTNdXTsKLSAgc3RhdGUtPm9jdGV0WzEzXSA9IHRtcDsKKyAgICAvKiBzZWNvbmQgcm93IC0gc2hpZnQgb25lIGxlZnQgKi8KKyAgICB0bXAgPSBhZXNfc2JveFtzdGF0ZS0+djhbMV1dOworICAgIHN0YXRlLT52OFsxXSA9IGFlc19zYm94W3N0YXRlLT52OFs1XV07CisgICAgc3RhdGUtPnY4WzVdID0gYWVzX3Nib3hbc3RhdGUtPnY4WzldXTsKKyAgICBzdGF0ZS0+djhbOV0gPSBhZXNfc2JveFtzdGF0ZS0+djhbMTNdXTsKKyAgICBzdGF0ZS0+djhbMTNdID0gdG1wOwogCi0gIC8qIHRoaXJkIHJvdyAtIHNoaWZ0IHR3byBsZWZ0ICovCi0gIHRtcCA9IGFlc19zYm94W3N0YXRlLT5vY3RldFsxMF1dOwotICBzdGF0ZS0+b2N0ZXRbMTBdID0gYWVzX3Nib3hbc3RhdGUtPm9jdGV0WzJdXTsKLSAgc3RhdGUtPm9jdGV0WzJdID0gdG1wOwotICB0bXAgPSBhZXNfc2JveFtzdGF0ZS0+b2N0ZXRbMTRdXTsKLSAgc3RhdGUtPm9jdGV0WzE0XSA9IGFlc19zYm94W3N0YXRlLT5vY3RldFs2XV07Ci0gIHN0YXRlLT5vY3RldFs2XSA9IHRtcDsgCi0gIAotICAvKiBmb3VydGggcm93IC0gc2hpZnQgdGhyZWUgbGVmdCAqLwotICB0bXAgPSBhZXNfc2JveFtzdGF0ZS0+b2N0ZXRbMTVdXTsKLSAgc3RhdGUtPm9jdGV0WzE1XSA9IGFlc19zYm94W3N0YXRlLT5vY3RldFsxMV1dOwotICBzdGF0ZS0+b2N0ZXRbMTFdID0gYWVzX3Nib3hbc3RhdGUtPm9jdGV0WzddXTsKLSAgc3RhdGUtPm9jdGV0WzddID0gYWVzX3Nib3hbc3RhdGUtPm9jdGV0WzNdXTsKLSAgc3RhdGUtPm9jdGV0WzNdID0gdG1wOworICAgIC8qIHRoaXJkIHJvdyAtIHNoaWZ0IHR3byBsZWZ0ICovCisgICAgdG1wID0gYWVzX3Nib3hbc3RhdGUtPnY4WzEwXV07CisgICAgc3RhdGUtPnY4WzEwXSA9IGFlc19zYm94W3N0YXRlLT52OFsyXV07CisgICAgc3RhdGUtPnY4WzJdID0gdG1wOworICAgIHRtcCA9IGFlc19zYm94W3N0YXRlLT52OFsxNF1dOworICAgIHN0YXRlLT52OFsxNF0gPSBhZXNfc2JveFtzdGF0ZS0+djhbNl1dOworICAgIHN0YXRlLT52OFs2XSA9IHRtcDsKIAotICB2MTI4X3hvcl9lcShzdGF0ZSwgJnJvdW5kX2tleSk7CisgICAgLyogZm91cnRoIHJvdyAtIHNoaWZ0IHRocmVlIGxlZnQgKi8KKyAgICB0bXAgPSBhZXNfc2JveFtzdGF0ZS0+djhbMTVdXTsKKyAgICBzdGF0ZS0+djhbMTVdID0gYWVzX3Nib3hbc3RhdGUtPnY4WzExXV07CisgICAgc3RhdGUtPnY4WzExXSA9IGFlc19zYm94W3N0YXRlLT52OFs3XV07CisgICAgc3RhdGUtPnY4WzddID0gYWVzX3Nib3hbc3RhdGUtPnY4WzNdXTsKKyAgICBzdGF0ZS0+djhbM10gPSB0bXA7CisKKyAgICB2MTI4X3hvcl9lcShzdGF0ZSwgcm91bmRfa2V5KTsKIH0KIAotaW5saW5lIHZvaWQKLWFlc19pbnZfZmluYWxfcm91bmQodjEyOF90ICpzdGF0ZSwgdjEyOF90IHJvdW5kX2tleSkgewotICBvY3RldF90IHRtcDsKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZXNfaW52X2ZpbmFsX3JvdW5kKHYxMjhfdCAqc3RhdGUsIGNvbnN0IHYxMjhfdCAqcm91bmRfa2V5KQoreworICAgIHVpbnQ4X3QgdG1wOwogCi0gIC8qIGJ5dGUgc3Vic3RpdHV0aW9ucyBhbmQgcm93IHNoaWZ0cyAqLwotICAvKiBmaXJzdCByb3cgLSBubyBzaGlmdCAqLwotICBzdGF0ZS0+b2N0ZXRbMF0gPSBhZXNfaW52X3Nib3hbc3RhdGUtPm9jdGV0WzBdXTsKLSAgc3RhdGUtPm9jdGV0WzRdID0gYWVzX2ludl9zYm94W3N0YXRlLT5vY3RldFs0XV07Ci0gIHN0YXRlLT5vY3RldFs4XSA9IGFlc19pbnZfc2JveFtzdGF0ZS0+b2N0ZXRbOF1dOwotICBzdGF0ZS0+b2N0ZXRbMTJdID0gYWVzX2ludl9zYm94W3N0YXRlLT5vY3RldFsxMl1dOworICAgIC8qIGJ5dGUgc3Vic3RpdHV0aW9ucyBhbmQgcm93IHNoaWZ0cyAqLworICAgIC8qIGZpcnN0IHJvdyAtIG5vIHNoaWZ0ICovCisgICAgc3RhdGUtPnY4WzBdID0gYWVzX2ludl9zYm94W3N0YXRlLT52OFswXV07CisgICAgc3RhdGUtPnY4WzRdID0gYWVzX2ludl9zYm94W3N0YXRlLT52OFs0XV07CisgICAgc3RhdGUtPnY4WzhdID0gYWVzX2ludl9zYm94W3N0YXRlLT52OFs4XV07CisgICAgc3RhdGUtPnY4WzEyXSA9IGFlc19pbnZfc2JveFtzdGF0ZS0+djhbMTJdXTsKIAotICAvKiBzZWNvbmQgcm93IC0gc2hpZnQgb25lIGxlZnQgKi8KLSAgdG1wID0gYWVzX2ludl9zYm94W3N0YXRlLT5vY3RldFsxXV07Ci0gIHN0YXRlLT5vY3RldFsxXSA9IGFlc19pbnZfc2JveFtzdGF0ZS0+b2N0ZXRbNV1dOwotICBzdGF0ZS0+b2N0ZXRbNV0gPSBhZXNfaW52X3Nib3hbc3RhdGUtPm9jdGV0WzldXTsKLSAgc3RhdGUtPm9jdGV0WzldID0gYWVzX2ludl9zYm94W3N0YXRlLT5vY3RldFsxM11dOwotICBzdGF0ZS0+b2N0ZXRbMTNdID0gdG1wOworICAgIC8qIHNlY29uZCByb3cgLSBzaGlmdCBvbmUgbGVmdCAqLworICAgIHRtcCA9IGFlc19pbnZfc2JveFtzdGF0ZS0+djhbMV1dOworICAgIHN0YXRlLT52OFsxXSA9IGFlc19pbnZfc2JveFtzdGF0ZS0+djhbNV1dOworICAgIHN0YXRlLT52OFs1XSA9IGFlc19pbnZfc2JveFtzdGF0ZS0+djhbOV1dOworICAgIHN0YXRlLT52OFs5XSA9IGFlc19pbnZfc2JveFtzdGF0ZS0+djhbMTNdXTsKKyAgICBzdGF0ZS0+djhbMTNdID0gdG1wOwogCi0gIC8qIHRoaXJkIHJvdyAtIHNoaWZ0IHR3byBsZWZ0ICovCi0gIHRtcCA9IGFlc19pbnZfc2JveFtzdGF0ZS0+b2N0ZXRbMTBdXTsKLSAgc3RhdGUtPm9jdGV0WzEwXSA9IGFlc19pbnZfc2JveFtzdGF0ZS0+b2N0ZXRbMl1dOwotICBzdGF0ZS0+b2N0ZXRbMl0gPSB0bXA7Ci0gIHRtcCA9IGFlc19pbnZfc2JveFtzdGF0ZS0+b2N0ZXRbMTRdXTsKLSAgc3RhdGUtPm9jdGV0WzE0XSA9IGFlc19pbnZfc2JveFtzdGF0ZS0+b2N0ZXRbNl1dOwotICBzdGF0ZS0+b2N0ZXRbNl0gPSB0bXA7IAotICAKLSAgLyogZm91cnRoIHJvdyAtIHNoaWZ0IHRocmVlIGxlZnQgKi8KLSAgdG1wID0gYWVzX2ludl9zYm94W3N0YXRlLT5vY3RldFsxNV1dOwotICBzdGF0ZS0+b2N0ZXRbMTVdID0gYWVzX2ludl9zYm94W3N0YXRlLT5vY3RldFsxMV1dOwotICBzdGF0ZS0+b2N0ZXRbMTFdID0gYWVzX2ludl9zYm94W3N0YXRlLT5vY3RldFs3XV07Ci0gIHN0YXRlLT5vY3RldFs3XSA9IGFlc19pbnZfc2JveFtzdGF0ZS0+b2N0ZXRbM11dOwotICBzdGF0ZS0+b2N0ZXRbM10gPSB0bXA7CisgICAgLyogdGhpcmQgcm93IC0gc2hpZnQgdHdvIGxlZnQgKi8KKyAgICB0bXAgPSBhZXNfaW52X3Nib3hbc3RhdGUtPnY4WzEwXV07CisgICAgc3RhdGUtPnY4WzEwXSA9IGFlc19pbnZfc2JveFtzdGF0ZS0+djhbMl1dOworICAgIHN0YXRlLT52OFsyXSA9IHRtcDsKKyAgICB0bXAgPSBhZXNfaW52X3Nib3hbc3RhdGUtPnY4WzE0XV07CisgICAgc3RhdGUtPnY4WzE0XSA9IGFlc19pbnZfc2JveFtzdGF0ZS0+djhbNl1dOworICAgIHN0YXRlLT52OFs2XSA9IHRtcDsKIAotICB2MTI4X3hvcl9lcShzdGF0ZSwgJnJvdW5kX2tleSk7CisgICAgLyogZm91cnRoIHJvdyAtIHNoaWZ0IHRocmVlIGxlZnQgKi8KKyAgICB0bXAgPSBhZXNfaW52X3Nib3hbc3RhdGUtPnY4WzE1XV07CisgICAgc3RhdGUtPnY4WzE1XSA9IGFlc19pbnZfc2JveFtzdGF0ZS0+djhbMTFdXTsKKyAgICBzdGF0ZS0+djhbMTFdID0gYWVzX2ludl9zYm94W3N0YXRlLT52OFs3XV07CisgICAgc3RhdGUtPnY4WzddID0gYWVzX2ludl9zYm94W3N0YXRlLT52OFszXV07CisgICAgc3RhdGUtPnY4WzNdID0gdG1wOworCisgICAgdjEyOF94b3JfZXEoc3RhdGUsIHJvdW5kX2tleSk7CiB9CiAKLSNlbmRpZiAgLyogQ1BVIHR5cGUgKi8KKyNlbmRpZiAvKiBDUFUgdHlwZSAqLwogCi1pbmxpbmUgdm9pZAotYWVzX2FkZF9pbl9zdWJrZXkodjEyOF90ICpzdGF0ZSwgdjEyOF90IHJvdW5kX2tleSkgewotICBzdGF0ZS0+djMyWzBdIF49IHJvdW5kX2tleS52MzJbMF07Ci0gIHN0YXRlLT52MzJbMV0gXj0gcm91bmRfa2V5LnYzMlsxXTsKLSAgc3RhdGUtPnYzMlsyXSBePSByb3VuZF9rZXkudjMyWzJdOwotICBzdGF0ZS0+djMyWzNdIF49IHJvdW5kX2tleS52MzJbM107ICAgIAordm9pZCBzcnRwX2Flc19lbmNyeXB0KHYxMjhfdCAqcGxhaW50ZXh0LCBjb25zdCBzcnRwX2Flc19leHBhbmRlZF9rZXlfdCAqZXhwX2tleSkKK3sKKyAgICAvKiBhZGQgaW4gdGhlIHN1YmtleSAqLworICAgIHYxMjhfeG9yX2VxKHBsYWludGV4dCwgJmV4cF9rZXktPnJvdW5kWzBdKTsKKworICAgIC8qIG5vdyBkbyB0aGUgcm91bmRzICovCisgICAgYWVzX3JvdW5kKHBsYWludGV4dCwgJmV4cF9rZXktPnJvdW5kWzFdKTsKKyAgICBhZXNfcm91bmQocGxhaW50ZXh0LCAmZXhwX2tleS0+cm91bmRbMl0pOworICAgIGFlc19yb3VuZChwbGFpbnRleHQsICZleHBfa2V5LT5yb3VuZFszXSk7CisgICAgYWVzX3JvdW5kKHBsYWludGV4dCwgJmV4cF9rZXktPnJvdW5kWzRdKTsKKyAgICBhZXNfcm91bmQocGxhaW50ZXh0LCAmZXhwX2tleS0+cm91bmRbNV0pOworICAgIGFlc19yb3VuZChwbGFpbnRleHQsICZleHBfa2V5LT5yb3VuZFs2XSk7CisgICAgYWVzX3JvdW5kKHBsYWludGV4dCwgJmV4cF9rZXktPnJvdW5kWzddKTsKKyAgICBhZXNfcm91bmQocGxhaW50ZXh0LCAmZXhwX2tleS0+cm91bmRbOF0pOworICAgIGFlc19yb3VuZChwbGFpbnRleHQsICZleHBfa2V5LT5yb3VuZFs5XSk7CisgICAgaWYgKGV4cF9rZXktPm51bV9yb3VuZHMgPT0gMTApIHsKKyAgICAgICAgYWVzX2ZpbmFsX3JvdW5kKHBsYWludGV4dCwgJmV4cF9rZXktPnJvdW5kWzEwXSk7CisgICAgfSBlbHNlIGlmIChleHBfa2V5LT5udW1fcm91bmRzID09IDEyKSB7CisgICAgICAgIGFlc19yb3VuZChwbGFpbnRleHQsICZleHBfa2V5LT5yb3VuZFsxMF0pOworICAgICAgICBhZXNfcm91bmQocGxhaW50ZXh0LCAmZXhwX2tleS0+cm91bmRbMTFdKTsKKyAgICAgICAgYWVzX2ZpbmFsX3JvdW5kKHBsYWludGV4dCwgJmV4cF9rZXktPnJvdW5kWzEyXSk7CisgICAgfSBlbHNlIGlmIChleHBfa2V5LT5udW1fcm91bmRzID09IDE0KSB7CisgICAgICAgIGFlc19yb3VuZChwbGFpbnRleHQsICZleHBfa2V5LT5yb3VuZFsxMF0pOworICAgICAgICBhZXNfcm91bmQocGxhaW50ZXh0LCAmZXhwX2tleS0+cm91bmRbMTFdKTsKKyAgICAgICAgYWVzX3JvdW5kKHBsYWludGV4dCwgJmV4cF9rZXktPnJvdW5kWzEyXSk7CisgICAgICAgIGFlc19yb3VuZChwbGFpbnRleHQsICZleHBfa2V5LT5yb3VuZFsxM10pOworICAgICAgICBhZXNfZmluYWxfcm91bmQocGxhaW50ZXh0LCAmZXhwX2tleS0+cm91bmRbMTRdKTsKKyAgICB9CiB9CiAKK3ZvaWQgc3J0cF9hZXNfZGVjcnlwdCh2MTI4X3QgKnBsYWludGV4dCwgY29uc3Qgc3J0cF9hZXNfZXhwYW5kZWRfa2V5X3QgKmV4cF9rZXkpCit7CisgICAgLyogYWRkIGluIHRoZSBzdWJrZXkgKi8KKyAgICB2MTI4X3hvcl9lcShwbGFpbnRleHQsICZleHBfa2V5LT5yb3VuZFswXSk7CiAKLSNpZiBUSElTX0FTTV9DT0RFX1dPUktTIC8qIERBTSAtIGZpeCB0aGlzISAqLwotCi0vKgotICogICAgIFQwICAgICAgc3RhcnRzIGF0IDB4ODA0ZTYwMAotICogICAgIFQxICAgICAgc3RhcnRzIGF0IDB4ODA0ZWEwMAotICogICAgIFQyICAgICAgc3RhcnRzIGF0IDB4ODA0ZWUwMAotICogICAgIFQzICAgICAgc3RhcnRzIGF0IDB4ODA0ZjIwMAotICoKLSAqIEludGVyZmFjZToKLSAqCi0gKiAgICAgZWJwICAgICBwb2ludGVyIHRvIHRoZSBzdGFjawotICoJCTB4OCglZWJwKQlwb2ludGVyIHRvIG1lc3NhZ2UKLSAqCQkweGMoJWVicCkJcG9pbnRlciB0byBrZXkKLSAqCWVheAlwb2ludGVyIHRvIGRhdGEgKGxvYWRlZCB3aXRoIDB4OCglZWJwKSkKLSAqCWVieCAJdGVtcCB1c2VkIGZvciBhZGRyZXNzIGNvbXB1dGF0aW9uCi0gKgllY3gJY29sdW1uMAotICoJZWR4CWNvbHVtbjEKLSAqCWVzaQljb2x1bW4yCi0gKgllZGkJY29sdW1uMwotICovCi0KLSNkZWZpbmUgUk9VTkQoQUREMCxBREQxLEFERDIsQUREMykgICAgICBcCi1hc20gKCJtb3YgICAgKCVlYXgpLCVlYXgiKTsgICAgICAgICAgICAgXAotYXNtICgibW92enggICVhbCwgJWVieCIpOyAgICAgICAgICAgICAgIFwKLWFzbSAoIm1vdiAgICBUMCgsJWVieCw0KSwlZWN4Iik7ICAgICAgICBcCi1hc20gKCJtb3Z6eCAgJWFoLCVlYngiKTsJCVwKLWFzbSAoIm1vdiAgICBUMSgsJWVieCw0KSwlZWRpIik7ICAgICAgICBcCi1hc20gKCJic3dhcCAgJWVheCIpOwkJCVwKLWFzbSAoIm1vdnp4ICAlYWgsJWVieCIpOyAgICAgICAgICAgICAgICBcCi1hc20gKCJtb3YgICAgVDIoLCVlYngsNCksJWVzaSIpOyAgICAgICAgXAotYXNtICgibW92enggICVhbCwlZWJ4Iik7ICAgICAgICAgICAgICAgIFwKLWFzbSAoIm1vdiAgICBUMygsJWVieCw0KSwlZWR4Iik7ICAgICAgICBcCi1hc20gKCJtb3YgICAgMHg4KCVlYnApLCVlYXgiKTsgICAgICAgICAgXAotYXNtICgibW92ICAgIDB4NCglZWF4KSwlZWF4Iik7ICAgICAgICAgIFwKLWFzbSAoIm1vdnp4ICAlYWwsICVlYngiKTsgICAgICAgICAgICAgICBcCi1hc20gKCJ4b3IgICAgVDAoLCVlYngsNCksJWVkeCIpOyAgICAgICAgXAotYXNtICgibW92enggICVhaCwlZWJ4Iik7ICAgICAgICAgICAgICAgIFwKLWFzbSAoInhvciAgICBUMSgsJWVieCw0KSwlZWN4Iik7ICAgICAgICBcCi1hc20gKCJic3dhcCAgJWVheCIpOyAgICAgICAgICAgICAgICAgICAgXAotYXNtICgibW92enggICVhaCwlZWJ4Iik7ICAgICAgICAgICAgICAgIFwKLWFzbSAoInhvciAgICBUMigsJWVieCw0KSwlZWRpIik7ICAgICAgICBcCi1hc20gKCJtb3Z6eCAgJWFsLCVlYngiKTsgICAgICAgICAgICAgICAgXAotYXNtICgieG9yICAgIFQzKCwlZWJ4LDQpLCVlc2kiKTsgICAgICAgIFwKLWFzbSAoIm1vdiAgICAweDgoJWVicCksJWVheCIpOyAgICAgICAgICBcCi1hc20gKCJtb3YgICAgMHg4KCVlYXgpLCVlYXgiKTsgICAgICAgICAgXAotYXNtICgibW92enggICVhbCwgJWVieCIpOyAgICAgICAgICAgICAgIFwKLWFzbSAoInhvciAgICBUMCgsJWVieCw0KSwlZXNpIik7ICAgICAgICBcCi1hc20gKCJtb3Z6eCAgJWFoLCVlYngiKTsgICAgICAgICAgICAgICAgXAotYXNtICgieG9yICAgIFQxKCwlZWJ4LDQpLCVlZHgiKTsgICAgICAgIFwKLWFzbSAoImJzd2FwICAlZWF4Iik7ICAgICAgICAgICAgICAgICAgICBcCi1hc20gKCJtb3Z6eCAgJWFoLCVlYngiKTsgICAgICAgICAgICAgICAgXAotYXNtICgieG9yICAgIFQyKCwlZWJ4LDQpLCVlY3giKTsgICAgICAgIFwKLWFzbSAoIm1vdnp4ICAlYWwsJWVieCIpOyAgICAgICAgICAgICAgICBcCi1hc20gKCJ4b3IgICAgVDMoLCVlYngsNCksJWVkaSIpOyAgICAgICAgXAotYXNtICgibW92ICAgIDB4OCglZWJwKSwlZWF4Iik7ICAgICAgICAgIFwKLWFzbSAoIm1vdiAgICAweGMoJWVheCksJWVheCIpOyAgICAgICAgICBcCi1hc20gKCJtb3Z6eCAgJWFsLCAlZWJ4Iik7ICAgICAgICAgICAgICAgXAotYXNtICgieG9yICAgIFQwKCwlZWJ4LDQpLCVlZGkiKTsgICAgICAgIFwKLWFzbSAoIm1vdnp4ICAlYWgsJWVieCIpOyAgICAgICAgICAgICAgICBcCi1hc20gKCJ4b3IgICAgVDEoLCVlYngsNCksJWVzaSIpOyAgICAgICAgXAotYXNtICgiYnN3YXAgICVlYXgiKTsgICAgICAgICAgICAgICAgICAgIFwKLWFzbSAoIm1vdnp4ICAlYWgsJWVieCIpOyAgICAgICAgICAgICAgICBcCi1hc20gKCJ4b3IgICAgVDIoLCVlYngsNCksJWVkeCIpOyAgICAgICAgXAotYXNtICgibW92enggICVhbCwlZWJ4Iik7ICAgICAgICAgICAgICAgIFwKLWFzbSAoInhvciAgICBUMygsJWVieCw0KSwlZWN4Iik7ICAgICAgICBcCi1hc20gKCJtb3YgICAgMHg4KCVlYnApLCVlYXgiKTsgICAgICAgICAgXAotYXNtICgibW92ICAgIDB4YyglZWJwKSwlZWJ4Iik7ICAgICAgICAgIFwKLWFzbSAoInhvciAgICAiI0FERDAiKCVlYngpLCVlY3giKTsgICAgICBcCi1hc20gKCJtb3YgICAgJWVjeCwoJWVheCkiKTsgICAgICAgICAgICAgXAotYXNtICgieG9yICAgICIjQUREMSIoJWVieCksJWVkeCIpOyAgICAgIFwKLWFzbSAoIm1vdiAgICAlZWR4LDB4NCglZWF4KSIpOyAgICAgICAgICBcCi1hc20gKCJ4b3IgICAgIiNBREQyIiglZWJ4KSwlZXNpIik7ICAgICAgXAotYXNtICgibW92ICAgICVlc2ksMHg4KCVlYXgpIik7ICAgICAgICAgIFwKLWFzbSAoInhvciAgICAiI0FERDMiKCVlYngpLCVlZGkiKTsgICAgICBcCi1hc20gKCJtb3YgICAgJWVkaSwweGMoJWVheCkiKTsKLQotdm9pZAotYWVzX2VuY3J5cHQodjEyOF90ICpwbGFpbnRleHQsIGNvbnN0IGFlc19leHBhbmRlZF9rZXlfdCBleHBfa2V5KSB7Ci0gIGV4dGVybiB1aW50MzJfdCBUMFsyNTZdLCBUMVsyNTZdLCBUMlsyNTZdLCBUM1syNTZdLCBUNFsyNTZdOyAKLQotICAKLSAgYXNtICgic3ViICAgICQweDVjLCVlc3AiKTsKLSAgYXNtICgicHVzaCAgICVlZGkiKTsKLSAgYXNtICgicHVzaCAgICVlc2kiKTsKLSAgYXNtICgicHVzaCAgICVlYngiKTsKLSAgYXNtICgibW92ICAgIDB4OCglZWJwKSwlZWN4Iik7Ci0gIGFzbSAoIm1vdiAgICAoJWVjeCksJWVheCIpOwotICBhc20gKCJtb3YgICAgMHg0KCVlY3gpLCVlZHgiKTsKLSAgYXNtICgibW92ICAgIDB4YyglZWJwKSwlZWN4Iik7Ci0gIGFzbSAoInhvciAgICAoJWVjeCksJWVheCIpOwotICBhc20gKCJ4b3IgICAgMHg0KCVlY3gpLCVlZHgiKTsKLSAgYXNtICgibW92ICAgIDB4OCglZWJwKSwlZWN4Iik7Ci0gIGFzbSAoIm1vdiAgICAlZWF4LCglZWN4KSIpOwotICBhc20gKCJtb3YgICAgJWVkeCwweDQoJWVjeCkiKTsKLSAgYXNtICgibW92ICAgIDB4OCglZWJwKSwlZWF4Iik7Ci0gIGFzbSAoIm1vdiAgICAweDgoJWVheCksJWVieCIpOwotICBhc20gKCJtb3YgICAgMHhjKCVlYXgpLCVlc2kiKTsKLSAgYXNtICgibW92ICAgIDB4YyglZWJwKSwlZWF4Iik7Ci0gIGFzbSAoInhvciAgICAweDgoJWVheCksJWVieCIpOwotICBhc20gKCJ4b3IgICAgMHhjKCVlYXgpLCVlc2kiKTsKLSAgYXNtICgibW92ICAgIDB4OCglZWJwKSwlZWF4Iik7Ci0gIGFzbSAoIm1vdiAgICAlZWJ4LDB4OCglZWF4KSIpOwotICBhc20gKCJtb3YgICAgJWVzaSwweGMoJWVheCkiKTsKLSAgLy8gSW5pdGlhbGl6ZSBjb2x1bW4wLCAxLCAyLCAmIDMgKFJPVU5EIGFzc3VtZXMgdGhlbSBsb2FkZWQpCi0gIGFzbSAoIm1vdiAgICAoJWVheCksJWVjeCIpOwotICBhc20gKCJtb3YgICAgMHg0KCVlYXgpLCVlZHgiKTsKLSAgYXNtICgibW92ICAgIDB4OCglZWF4KSwlZXNpIik7Ci0gIGFzbSAoIm1vdiAgICAweGMoJWVheCksJWVkaSIpOwotICAvLwotICAvLyBST1VORCAxCi0gIC8vCi0gIFJPVU5EKDB4MTAsMHgxNCwweDE4LDB4MWMpCi0gICAgLy8KLSAgICAvLyBST1VORCAyCi0gICAgLy8KLSAgICBST1VORCgweDIwLDB4MjQsMHgyOCwweDJjKQotICAgIC8vCi0gICAgLy8gUk9VTkQgMwotICAgIC8vCi0gICAgUk9VTkQoMHgzMCwweDM0LDB4MzgsMHgzYykKLSAgICAvLwotICAgIC8vIFJPVU5EIDQKLSAgICAvLwotICAgIFJPVU5EKDB4NDAsMHg0NCwweDQ4LDB4NGMpCi0gICAgLy8KLSAgICAvLyBST1VORCA1Ci0gICAgLy8KLSAgICBST1VORCgweDUwLDB4NTQsMHg1OCwweDVjKQotICAgIC8vCi0gICAgLy8gUk9VTkQgNgotICAgIC8vCi0gICAgUk9VTkQoMHg2MCwweDY0LDB4NjgsMHg2YykKLSAgICAvLwotICAgIC8vIFJPVU5EIDcKLSAgICAvLwotICAgIFJPVU5EKDB4NzAsMHg3NCwweDc4LDB4N2MpCi0gICAgLy8gCi0gICAgLy8gUk9VTkQgOAotICAgIC8vCi0gICAgUk9VTkQoMHg4MCwweDg0LDB4ODgsMHg4YykKLSAgICAvLwotICAgIC8vIFJPVU5EIDkKLSAgICAvLwotICAgIFJPVU5EKDB4OTAsMHg5NCwweDk4LDB4OWMpCi0gICAgYXNtICgibW92ICAgIDB4YyglZWJwKSwlZWF4Iik7Ci0gIGFzbSAoIm1vdiAgICAweDgoJWVicCksJWVzaSIpOwotICAvLwotICAvLyBMQVNUIFJPVU5EICgxMCkKLSAgLy8KLSAgYXNtICgibW92ICAgIDB4YTAoJWVheCksJWVkeCIpOwotICBhc20gKCJtb3YgICAgJWVkeCwweGZmZmZmZmYwKCVlYnApIik7Ci0gIGFzbSAoIm1vdiAgICAweGE0KCVlYXgpLCVlZHgiKTsKLSAgYXNtICgibW92ICAgICVlZHgsMHhmZmZmZmZmNCglZWJwKSIpOwotICBhc20gKCJtb3YgICAgMHhhOCglZWF4KSwlZWR4Iik7Ci0gIGFzbSAoIm1vdiAgICAlZWR4LDB4ZmZmZmZmZjgoJWVicCkiKTsKLSAgYXNtICgibW92ICAgIDB4YWMoJWVheCksJWVkeCIpOwotICBhc20gKCJtb3YgICAgJWVkeCwweGZmZmZmZmZjKCVlYnApIik7Ci0gIGFzbSAoIm1vdnpibCAoJWVzaSksJWVkeCIpOwotICBhc20gKCJtb3YgICAgYWVzX3Nib3goJWVkeCksJWRsIik7Ci0gIGFzbSAoIm1vdiAgICAlZGwsKCVlc2kpIik7Ci0gIGFzbSAoIm1vdnpibCAweDQoJWVzaSksJWVkeCIpOwotICBhc20gKCJtb3YgICAgYWVzX3Nib3goJWVkeCksJWRsIik7Ci0gIGFzbSAoIm1vdiAgICAlZGwsMHg0KCVlc2kpIik7Ci0gIGFzbSAoIm1vdnpibCAweDgoJWVzaSksJWVkeCIpOwotICBhc20gKCJtb3YgICAgYWVzX3Nib3goJWVkeCksJWRsIik7Ci0gIGFzbSAoIm1vdiAgICAlZGwsMHg4KCVlc2kpIik7Ci0gIGFzbSAoIm1vdnpibCAweGMoJWVzaSksJWVkeCIpOwotICBhc20gKCJtb3YgICAgYWVzX3Nib3goJWVkeCksJWRsIik7Ci0gIGFzbSAoIm1vdiAgICAlZGwsMHhjKCVlc2kpIik7Ci0gIGFzbSAoIm1vdnpibCAweDEoJWVzaSksJWVkeCIpOwotICBhc20gKCJtb3YgICAgYWVzX3Nib3goJWVkeCksJWNsIik7Ci0gIGFzbSAoIm1vdnpibCAweDUoJWVzaSksJWVkeCIpOwotICBhc20gKCJtb3YgICAgYWVzX3Nib3goJWVkeCksJWRsIik7Ci0gIGFzbSAoIm1vdiAgICAlZGwsMHgxKCVlc2kpIik7Ci0gIGFzbSAoIm1vdnpibCAweDkoJWVzaSksJWVkeCIpOwotICBhc20gKCJtb3YgICAgYWVzX3Nib3goJWVkeCksJWRsIik7Ci0gIGFzbSAoIm1vdiAgICAlZGwsMHg1KCVlc2kpIik7Ci0gIGFzbSAoIm1vdnpibCAweGQoJWVzaSksJWVkeCIpOwotICBhc20gKCJtb3YgICAgYWVzX3Nib3goJWVkeCksJWRsIik7Ci0gIGFzbSAoIm1vdiAgICAlZGwsMHg5KCVlc2kpIik7Ci0gIGFzbSAoIm1vdiAgICAlY2wsMHhkKCVlc2kpIik7Ci0gIGFzbSAoIm1vdnpibCAweGEoJWVzaSksJWVkeCIpOwotICBhc20gKCJtb3YgICAgYWVzX3Nib3goJWVkeCksJWNsIik7Ci0gIGFzbSAoIm1vdnpibCAweDIoJWVzaSksJWVkeCIpOwotICBhc20gKCJtb3YgICAgYWVzX3Nib3goJWVkeCksJWRsIik7Ci0gIGFzbSAoIm1vdiAgICAlZGwsMHhhKCVlc2kpIik7Ci0gIGFzbSAoIm1vdiAgICAlY2wsMHgyKCVlc2kpIik7Ci0gIGFzbSAoIm1vdnpibCAweGUoJWVzaSksJWVkeCIpOwotICBhc20gKCJtb3YgICAgYWVzX3Nib3goJWVkeCksJWNsIik7Ci0gIGFzbSAoIm1vdnpibCAweDYoJWVzaSksJWVkeCIpOwotICBhc20gKCJtb3YgICAgYWVzX3Nib3goJWVkeCksJWRsIik7Ci0gIGFzbSAoIm1vdiAgICAlZGwsMHhlKCVlc2kpIik7Ci0gIGFzbSAoIm1vdiAgICAlY2wsMHg2KCVlc2kpIik7Ci0gIGFzbSAoIm1vdnpibCAweGYoJWVzaSksJWVkeCIpOwotICBhc20gKCJtb3YgICAgYWVzX3Nib3goJWVkeCksJWNsIik7Ci0gIGFzbSAoIm1vdnpibCAweGIoJWVzaSksJWVkeCIpOwotICBhc20gKCJtb3YgICAgYWVzX3Nib3goJWVkeCksJWRsIik7Ci0gIGFzbSAoIm1vdiAgICAlZGwsMHhmKCVlc2kpIik7Ci0gIGFzbSAoIm1vdnpibCAweDcoJWVzaSksJWVkeCIpOwotICBhc20gKCJtb3YgICAgYWVzX3Nib3goJWVkeCksJWRsIik7Ci0gIGFzbSAoIm1vdiAgICAlZGwsMHhiKCVlc2kpIik7Ci0gIGFzbSAoIm1vdnpibCAweDMoJWVzaSksJWVkeCIpOwotICBhc20gKCJtb3YgICAgYWVzX3Nib3goJWVkeCksJWRsIik7Ci0gIGFzbSAoIm1vdiAgICAlZGwsMHg3KCVlc2kpIik7Ci0gIGFzbSAoIm1vdiAgICAlY2wsMHgzKCVlc2kpIik7Ci0gIGFzbSAoIm1vdiAgICAweDgoJWVicCksJWVheCIpOwotICBhc20gKCJtb3YgICAgKCVlYXgpLCVlYngiKTsKLSAgYXNtICgibW92ICAgIDB4NCglZWF4KSwlZXNpIik7Ci0gIGFzbSAoInhvciAgICAweGZmZmZmZmYwKCVlYnApLCVlYngiKTsKLSAgYXNtICgieG9yICAgIDB4ZmZmZmZmZjQoJWVicCksJWVzaSIpOwotICBhc20gKCJtb3YgICAgJWVieCwoJWVheCkiKTsKLSAgYXNtICgibW92ICAgICVlc2ksMHg0KCVlYXgpIik7Ci0gIGFzbSAoIm1vdiAgICAweDgoJWVicCksJWVheCIpOwotICBhc20gKCJtb3YgICAgMHg4KCVlYXgpLCVlYngiKTsKLSAgYXNtICgibW92ICAgIDB4YyglZWF4KSwlZXNpIik7Ci0gIGFzbSAoInhvciAgICAweGZmZmZmZmY4KCVlYnApLCVlYngiKTsKLSAgYXNtICgieG9yICAgIDB4ZmZmZmZmZmMoJWVicCksJWVzaSIpOwotICBhc20gKCJtb3YgICAgJWVieCwweDgoJWVheCkiKTsKLSAgYXNtICgibW92ICAgICVlc2ksMHhjKCVlYXgpIik7Ci0gIGFzbSAoInBvcCAgICAlZWJ4Iik7Ci0gIGFzbSAoInBvcCAgICAlZXNpIik7Ci0gIGFzbSAoInBvcCAgICAlZWRpIik7Ci0gIGFzbSAoImFkZCAgICAkMHg1YywlZXNwIik7CisgICAgLyogbm93IGRvIHRoZSByb3VuZHMgKi8KKyAgICBhZXNfaW52X3JvdW5kKHBsYWludGV4dCwgJmV4cF9rZXktPnJvdW5kWzFdKTsKKyAgICBhZXNfaW52X3JvdW5kKHBsYWludGV4dCwgJmV4cF9rZXktPnJvdW5kWzJdKTsKKyAgICBhZXNfaW52X3JvdW5kKHBsYWludGV4dCwgJmV4cF9rZXktPnJvdW5kWzNdKTsKKyAgICBhZXNfaW52X3JvdW5kKHBsYWludGV4dCwgJmV4cF9rZXktPnJvdW5kWzRdKTsKKyAgICBhZXNfaW52X3JvdW5kKHBsYWludGV4dCwgJmV4cF9rZXktPnJvdW5kWzVdKTsKKyAgICBhZXNfaW52X3JvdW5kKHBsYWludGV4dCwgJmV4cF9rZXktPnJvdW5kWzZdKTsKKyAgICBhZXNfaW52X3JvdW5kKHBsYWludGV4dCwgJmV4cF9rZXktPnJvdW5kWzddKTsKKyAgICBhZXNfaW52X3JvdW5kKHBsYWludGV4dCwgJmV4cF9rZXktPnJvdW5kWzhdKTsKKyAgICBhZXNfaW52X3JvdW5kKHBsYWludGV4dCwgJmV4cF9rZXktPnJvdW5kWzldKTsKKyAgICBpZiAoZXhwX2tleS0+bnVtX3JvdW5kcyA9PSAxMCkgeworICAgICAgICBhZXNfaW52X2ZpbmFsX3JvdW5kKHBsYWludGV4dCwgJmV4cF9rZXktPnJvdW5kWzEwXSk7CisgICAgfSBlbHNlIGlmIChleHBfa2V5LT5udW1fcm91bmRzID09IDEyKSB7CisgICAgICAgIGFlc19pbnZfcm91bmQocGxhaW50ZXh0LCAmZXhwX2tleS0+cm91bmRbMTBdKTsKKyAgICAgICAgYWVzX2ludl9yb3VuZChwbGFpbnRleHQsICZleHBfa2V5LT5yb3VuZFsxMV0pOworICAgICAgICBhZXNfaW52X2ZpbmFsX3JvdW5kKHBsYWludGV4dCwgJmV4cF9rZXktPnJvdW5kWzEyXSk7CisgICAgfSBlbHNlIGlmIChleHBfa2V5LT5udW1fcm91bmRzID09IDE0KSB7CisgICAgICAgIGFlc19pbnZfcm91bmQocGxhaW50ZXh0LCAmZXhwX2tleS0+cm91bmRbMTBdKTsKKyAgICAgICAgYWVzX2ludl9yb3VuZChwbGFpbnRleHQsICZleHBfa2V5LT5yb3VuZFsxMV0pOworICAgICAgICBhZXNfaW52X3JvdW5kKHBsYWludGV4dCwgJmV4cF9rZXktPnJvdW5kWzEyXSk7CisgICAgICAgIGFlc19pbnZfcm91bmQocGxhaW50ZXh0LCAmZXhwX2tleS0+cm91bmRbMTNdKTsKKyAgICAgICAgYWVzX2ludl9maW5hbF9yb3VuZChwbGFpbnRleHQsICZleHBfa2V5LT5yb3VuZFsxNF0pOworICAgIH0KIH0KLQotI2Vsc2UgLyogdW5rbm93biBDUFUgdHlwZSAqLwotCi12b2lkCi1hZXNfZW5jcnlwdCh2MTI4X3QgKnBsYWludGV4dCwgY29uc3QgYWVzX2V4cGFuZGVkX2tleV90IGV4cF9rZXkpIHsKLQotICAvKiBhZGQgaW4gdGhlIHN1YmtleSAqLwotICAvKiB2MTI4X3hvcl9lcShwbGFpbnRleHQsICZleHBfa2V5WzBdKTsgKi8KLSAgYWVzX2FkZF9pbl9zdWJrZXkocGxhaW50ZXh0LCBleHBfa2V5WzBdKTsKLQotICAvKiBub3cgZG8gbmluZSByb3VuZHMgKi8KLSAgYWVzX3JvdW5kKHBsYWludGV4dCwgZXhwX2tleVsxXSk7Ci0gIGFlc19yb3VuZChwbGFpbnRleHQsIGV4cF9rZXlbMl0pOwotICBhZXNfcm91bmQocGxhaW50ZXh0LCBleHBfa2V5WzNdKTsKLSAgYWVzX3JvdW5kKHBsYWludGV4dCwgZXhwX2tleVs0XSk7Ci0gIGFlc19yb3VuZChwbGFpbnRleHQsIGV4cF9rZXlbNV0pOwotICBhZXNfcm91bmQocGxhaW50ZXh0LCBleHBfa2V5WzZdKTsKLSAgYWVzX3JvdW5kKHBsYWludGV4dCwgZXhwX2tleVs3XSk7Ci0gIGFlc19yb3VuZChwbGFpbnRleHQsIGV4cF9rZXlbOF0pOyAgCi0gIGFlc19yb3VuZChwbGFpbnRleHQsIGV4cF9rZXlbOV0pOwotICAvKiB0aGUgbGFzdCByb3VuZCBpcyBkaWZmZXJlbnQgKi8KLSAKLSBhZXNfZmluYWxfcm91bmQocGxhaW50ZXh0LCBleHBfa2V5WzEwXSk7ICAKLQotIH0KLQotdm9pZAotYWVzX2RlY3J5cHQodjEyOF90ICpwbGFpbnRleHQsIGNvbnN0IGFlc19leHBhbmRlZF9rZXlfdCBleHBfa2V5KSB7Ci0gIAotICAvKiBhZGQgaW4gdGhlIHN1YmtleSAqLwotICAvKiB2MTI4X3hvcl9lcShwbGFpbnRleHQsICZleHBfa2V5WzEwXSk7ICovCi0gIGFlc19hZGRfaW5fc3Via2V5KHBsYWludGV4dCwgZXhwX2tleVswXSk7Ci0KLSAgLyogbm93IGRvIG5pbmUgcm91bmRzICovCi0gIGFlc19pbnZfcm91bmQocGxhaW50ZXh0LCBleHBfa2V5WzFdKTsKLSAgYWVzX2ludl9yb3VuZChwbGFpbnRleHQsIGV4cF9rZXlbMl0pOwotICBhZXNfaW52X3JvdW5kKHBsYWludGV4dCwgZXhwX2tleVszXSk7Ci0gIGFlc19pbnZfcm91bmQocGxhaW50ZXh0LCBleHBfa2V5WzRdKTsKLSAgYWVzX2ludl9yb3VuZChwbGFpbnRleHQsIGV4cF9rZXlbNV0pOwotICBhZXNfaW52X3JvdW5kKHBsYWludGV4dCwgZXhwX2tleVs2XSk7Ci0gIGFlc19pbnZfcm91bmQocGxhaW50ZXh0LCBleHBfa2V5WzddKTsKLSAgYWVzX2ludl9yb3VuZChwbGFpbnRleHQsIGV4cF9rZXlbOF0pOyAgCi0gIGFlc19pbnZfcm91bmQocGxhaW50ZXh0LCBleHBfa2V5WzldKTsKLSAgLyogdGhlIGxhc3Qgcm91bmQgaXMgZGlmZmVyZW50ICovCi0gIGFlc19pbnZfZmluYWxfcm91bmQocGxhaW50ZXh0LCBleHBfa2V5WzEwXSk7ICAKLQotfQotCi0jZW5kaWYgLyogVEhJU19BU01fQ09ERV9XT1JLUyAqLwotCmRpZmYgLS1naXQgYS9jcnlwdG8vY2lwaGVyL2Flc19jYmMuYyBiL2NyeXB0by9jaXBoZXIvYWVzX2NiYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzY5ZjQ4Li4wMDAwMDAwCi0tLSBhL2NyeXB0by9jaXBoZXIvYWVzX2NiYy5jCisrKyAvZGV2L251bGwKQEAgLTEsNDQ0ICswLDAgQEAKLS8qCi0gKiBhZXNfY2JjLmMKLSAqCi0gKiBBRVMgQ2lwaGVyIEJsb2NrIENoYWluaW5nIE1vZGUKLSAqCi0gKiBEYXZpZCBBLiBNY0dyZXcKLSAqIENpc2NvIFN5c3RlbXMsIEluYy4KLSAqLwotCi0vKgotICoJCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSwgQ2lzY28gU3lzdGVtcywgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAKLSAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogCi0gKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICovCi0KLQotI2luY2x1ZGUgImFlc19jYmMuaCIKLSNpbmNsdWRlICJhbGxvYy5oIgotCi1kZWJ1Z19tb2R1bGVfdCBtb2RfYWVzX2NiYyA9IHsKLSAgMCwgICAgICAgICAgICAgICAgIC8qIGRlYnVnZ2luZyBpcyBvZmYgYnkgZGVmYXVsdCAqLwotICAiYWVzIGNiYyIgICAgICAgICAgLyogcHJpbnRhYmxlIG1vZHVsZSBuYW1lICAgICAgICovCi19OwotCi0KLQotZXJyX3N0YXR1c190Ci1hZXNfY2JjX2FsbG9jKGNpcGhlcl90ICoqYywgaW50IGtleV9sZW4pIHsKLSAgZXh0ZXJuIGNpcGhlcl90eXBlX3QgYWVzX2NiYzsKLSAgdWludDhfdCAqcG9pbnRlcjsKLSAgaW50IHRtcDsKLQotICBkZWJ1Z19wcmludChtb2RfYWVzX2NiYywgCi0JICAgICAgImFsbG9jYXRpbmcgY2lwaGVyIHdpdGgga2V5IGxlbmd0aCAlZCIsIGtleV9sZW4pOwotCi0gIGlmIChrZXlfbGVuICE9IDE2KQotICAgIHJldHVybiBlcnJfc3RhdHVzX2JhZF9wYXJhbTsKLSAgCi0gIC8qIGFsbG9jYXRlIG1lbW9yeSBhIGNpcGhlciBvZiB0eXBlIGFlc19pY20gKi8KLSAgdG1wID0gKHNpemVvZihhZXNfY2JjX2N0eF90KSArIHNpemVvZihjaXBoZXJfdCkpOwotICBwb2ludGVyID0gY3J5cHRvX2FsbG9jKHRtcCk7Ci0gIGlmIChwb2ludGVyID09IE5VTEwpIAotICAgIHJldHVybiBlcnJfc3RhdHVzX2FsbG9jX2ZhaWw7Ci0KLSAgLyogc2V0IHBvaW50ZXJzICovCi0gICpjID0gKGNpcGhlcl90ICopcG9pbnRlcjsKLSAgKCpjKS0+dHlwZSA9ICZhZXNfY2JjOwotICAoKmMpLT5zdGF0ZSA9IHBvaW50ZXIgKyBzaXplb2YoY2lwaGVyX3QpOwotCi0gIC8qIGluY3JlbWVudCByZWZfY291bnQgKi8KLSAgYWVzX2NiYy5yZWZfY291bnQrKzsKLQotICAvKiBzZXQga2V5IHNpemUgICAgICAgICovCi0gICgqYyktPmtleV9sZW4gPSBrZXlfbGVuOwotCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOyAgCi19Ci0KLWVycl9zdGF0dXNfdAotYWVzX2NiY19kZWFsbG9jKGNpcGhlcl90ICpjKSB7Ci0gIGV4dGVybiBjaXBoZXJfdHlwZV90IGFlc19jYmM7Ci0KLSAgLyogemVyb2l6ZSBlbnRpcmUgc3RhdGUqLwotICBvY3RldF9zdHJpbmdfc2V0X3RvX3plcm8oKG9jdGV0X3QgKiljLCAKLQkJCSAgIHNpemVvZihhZXNfY2JjX2N0eF90KSArIHNpemVvZihjaXBoZXJfdCkpOwotCi0gIC8qIGZyZWUgbWVtb3J5ICovCi0gIGNyeXB0b19mcmVlKGMpOwotCi0gIC8qIGRlY3JlbWVudCByZWZfY291bnQgKi8KLSAgYWVzX2NiYy5yZWZfY291bnQtLTsKLSAgCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOyAgCi19Ci0KLWVycl9zdGF0dXNfdAotYWVzX2NiY19jb250ZXh0X2luaXQoYWVzX2NiY19jdHhfdCAqYywgY29uc3Qgb2N0ZXRfdCAqa2V5LCAKLQkJICAgICBjaXBoZXJfZGlyZWN0aW9uX3QgZGlyKSB7Ci0gIHYxMjhfdCB0bXBfa2V5OwotCi0gIC8qIHNldCB0bXBfa2V5IChmb3IgYWxpZ25tZW50KSAqLwotICB2MTI4X2NvcHlfb2N0ZXRfc3RyaW5nKCZ0bXBfa2V5LCBrZXkpOwotCi0gIGRlYnVnX3ByaW50KG1vZF9hZXNfY2JjLCAKLQkgICAgICAia2V5OiAgJXMiLCB2MTI4X2hleF9zdHJpbmcoJnRtcF9rZXkpKTsgCi0KLSAgLyogZXhwYW5kIGtleSBmb3IgdGhlIGFwcHJvcHJpYXRlIGRpcmVjdGlvbiAqLwotICBzd2l0Y2ggKGRpcikgewotICBjYXNlIChkaXJlY3Rpb25fZW5jcnlwdCk6Ci0gICAgYWVzX2V4cGFuZF9lbmNyeXB0aW9uX2tleSh0bXBfa2V5LCBjLT5leHBhbmRlZF9rZXkpOwotICAgIGJyZWFrOwotICBjYXNlIChkaXJlY3Rpb25fZGVjcnlwdCk6Ci0gICAgYWVzX2V4cGFuZF9kZWNyeXB0aW9uX2tleSh0bXBfa2V5LCBjLT5leHBhbmRlZF9rZXkpOwotICAgIGJyZWFrOwotICBkZWZhdWx0OgotICAgIHJldHVybiBlcnJfc3RhdHVzX2JhZF9wYXJhbTsKLSAgfQotCi0KLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7Ci19Ci0KLQotZXJyX3N0YXR1c190Ci1hZXNfY2JjX3NldF9pdihhZXNfY2JjX2N0eF90ICpjLCB2b2lkICppdikgewotICBpbnQgaTsKLS8qICAgdjEyOF90ICppbnB1dCA9IGl2OyAqLwotICBvY3RldF90ICppbnB1dCA9IGl2OwotIAotICAvKiBzZXQgc3RhdGUgYW5kICdwcmV2aW91cycgYmxvY2sgdG8gaXYgKi8KLSAgZm9yIChpPTA7IGkgPCAxNjsgaSsrKSAKLSAgICBjLT5wcmV2aW91cy5vY3RldFtpXSA9IGMtPnN0YXRlLm9jdGV0W2ldID0gaW5wdXRbaV07Ci0KLSAgZGVidWdfcHJpbnQobW9kX2Flc19jYmMsICJzZXR0aW5nIGl2OiAlcyIsIHYxMjhfaGV4X3N0cmluZygmYy0+c3RhdGUpKTsgCi0KLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7Ci19Ci0KLWVycl9zdGF0dXNfdAotYWVzX2NiY19lbmNyeXB0KGFlc19jYmNfY3R4X3QgKmMsCi0JCXVuc2lnbmVkIGNoYXIgKmRhdGEsIAotCQl1bnNpZ25lZCBpbnQgKmJ5dGVzX2luX2RhdGEpIHsKLSAgaW50IGk7Ci0gIHVuc2lnbmVkIGNoYXIgKmlucHV0ICA9IGRhdGE7ICAgLyogcG9pbnRlciB0byBkYXRhIGJlaW5nIHJlYWQgICAgKi8KLSAgdW5zaWduZWQgY2hhciAqb3V0cHV0ID0gZGF0YTsgICAvKiBwb2ludGVyIHRvIGRhdGEgYmVpbmcgd3JpdHRlbiAqLwotICBpbnQgYnl0ZXNfdG9fZW5jciA9ICpieXRlc19pbl9kYXRhOwotCi0gIC8qCi0gICAqIHZlcmlmeSB0aGF0IHdlJ3JlIDE2LW9jdGV0IGFsaWduZWQKLSAgICovCi0gIGlmICgqYnl0ZXNfaW5fZGF0YSAmIDB4ZikgCi0gICAgcmV0dXJuIGVycl9zdGF0dXNfYmFkX3BhcmFtOwotCi0gIC8qCi0gICAqIG5vdGUgdGhhdCB3ZSBhc3N1bWUgdGhhdCB0aGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yIGhhcyBhbHJlYWR5Ci0gICAqIGJlZW4gc2V0LCBlLmcuIGJ5IGNhbGxpbmcgYWVzX2NiY19zZXRfaXYoKQotICAgKi8KLSAgZGVidWdfcHJpbnQobW9kX2Flc19jYmMsICJpdjogJXMiLCAKLQkgICAgICB2MTI4X2hleF9zdHJpbmcoJmMtPnN0YXRlKSk7Ci0gIAotICAvKgotICAgKiBsb29wIG92ZXIgcGxhaW50ZXh0IGJsb2NrcywgZXhvcmluZyBzdGF0ZSBpbnRvIHBsYWludGV4dCB0aGVuCi0gICAqIGVuY3J5cHRpbmcgYW5kIHdyaXRpbmcgdG8gb3V0cHV0Ci0gICAqLwotICB3aGlsZSAoYnl0ZXNfdG9fZW5jciA+IDApIHsKLSAgICAKLSAgICAvKiBleG9yIHBsYWludGV4dCBpbnRvIHN0YXRlICovCi0gICAgZm9yIChpPTA7IGkgPCAxNjsgaSsrKQotICAgICAgYy0+c3RhdGUub2N0ZXRbaV0gXj0gKmlucHV0Kys7Ci0KLSAgICBkZWJ1Z19wcmludChtb2RfYWVzX2NiYywgImluYmxvY2s6ICAlcyIsIAotCSAgICAgIHYxMjhfaGV4X3N0cmluZygmYy0+c3RhdGUpKTsKLQotICAgIGFlc19lbmNyeXB0KCZjLT5zdGF0ZSwgYy0+ZXhwYW5kZWRfa2V5KTsKLQotICAgIGRlYnVnX3ByaW50KG1vZF9hZXNfY2JjLCAib3V0YmxvY2s6ICVzIiwgCi0JICAgICAgdjEyOF9oZXhfc3RyaW5nKCZjLT5zdGF0ZSkpOwotCi0gICAgLyogY29weSBjaXBoZXJ0ZXh0IHRvIG91dHB1dCAqLwotICAgIGZvciAoaT0wOyBpIDwgMTY7IGkrKykKLSAgICAgICpvdXRwdXQrKyA9IGMtPnN0YXRlLm9jdGV0W2ldOwotCi0gICAgYnl0ZXNfdG9fZW5jciAtPSAxNjsKLSAgfQotCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOwotfQotCi1lcnJfc3RhdHVzX3QKLWFlc19jYmNfZGVjcnlwdChhZXNfY2JjX2N0eF90ICpjLAotCQl1bnNpZ25lZCBjaGFyICpkYXRhLCAKLQkJdW5zaWduZWQgaW50ICpieXRlc19pbl9kYXRhKSB7Ci0gIGludCBpOwotICB2MTI4X3Qgc3RhdGUsIHByZXZpb3VzOwotICB1bnNpZ25lZCBjaGFyICppbnB1dCAgPSBkYXRhOyAgIC8qIHBvaW50ZXIgdG8gZGF0YSBiZWluZyByZWFkICAgICovCi0gIHVuc2lnbmVkIGNoYXIgKm91dHB1dCA9IGRhdGE7ICAgLyogcG9pbnRlciB0byBkYXRhIGJlaW5nIHdyaXR0ZW4gKi8KLSAgaW50IGJ5dGVzX3RvX2VuY3IgPSAqYnl0ZXNfaW5fZGF0YTsKLSAgb2N0ZXRfdCB0bXA7Ci0KLSAgLyoKLSAgICogdmVyaWZ5IHRoYXQgd2UncmUgMTYtb2N0ZXQgYWxpZ25lZAotICAgKi8KLSAgaWYgKCpieXRlc19pbl9kYXRhICYgMHgwZikKLSAgICByZXR1cm4gZXJyX3N0YXR1c19iYWRfcGFyYW07ICAgIAotCi0gIC8qIHNldCAncHJldmlvdXMnIGJsb2NrIHRvIGl2Ki8KLSAgZm9yIChpPTA7IGkgPCAxNjsgaSsrKSB7Ci0gICAgcHJldmlvdXMub2N0ZXRbaV0gPSBjLT5wcmV2aW91cy5vY3RldFtpXTsKLSAgfQotCi0gIGRlYnVnX3ByaW50KG1vZF9hZXNfY2JjLCAiaXY6ICVzIiwgCi0JICAgICAgdjEyOF9oZXhfc3RyaW5nKCZwcmV2aW91cykpOwotCi0gIC8qCi0gICAqIGxvb3Agb3ZlciBjaXBoZXJ0ZXh0IGJsb2NrcywgZGVjcnlwdGluZyB0aGVuIGV4b3Jpbmcgd2l0aCBzdGF0ZQotICAgKiB0aGVuIHdyaXRpbmcgcGxhaW50ZXh0IHRvIG91dHB1dAotICAgKi8KLSAgd2hpbGUgKGJ5dGVzX3RvX2VuY3IgPiAwKSB7Ci0gICAgICAgIAotICAgIC8qIHNldCBzdGF0ZSB0byBjaXBoZXJ0ZXh0IGlucHV0IGJsb2NrICovCi0gICAgZm9yIChpPTA7IGkgPCAxNjsgaSsrKSB7Ci0gICAgIHN0YXRlLm9jdGV0W2ldID0gKmlucHV0Kys7Ci0gICAgfQotCi0gICAgZGVidWdfcHJpbnQobW9kX2Flc19jYmMsICJpbmJsb2NrOiAgJXMiLCAKLQkgICAgICB2MTI4X2hleF9zdHJpbmcoJnN0YXRlKSk7Ci0KLSAgICAvKiBkZWNyeXB0IHN0YXRlICovCi0gICAgYWVzX2RlY3J5cHQoJnN0YXRlLCBjLT5leHBhbmRlZF9rZXkpOwotCi0gICAgZGVidWdfcHJpbnQobW9kX2Flc19jYmMsICJvdXRibG9jazogJXMiLCAKLQkgICAgICB2MTI4X2hleF9zdHJpbmcoJnN0YXRlKSk7Ci0KLSAgICAvKiAKLSAgICAgKiBleG9yIHByZXZpb3VzIGNpcGhlcnRleHQgYmxvY2sgb3V0IG9mIHBsYWludGV4dCwgYW5kIHdyaXRlIG5ldwotICAgICAqIHBsYWludGV4dCBibG9jayB0byBvdXRwdXQsIHdoaWxlIGNvcHlpbmcgb2xkIGNpcGhlcnRleHQgYmxvY2sKLSAgICAgKiB0byB0aGUgJ3ByZXZpb3VzJyBibG9jawotICAgICAqLwotICAgIGZvciAoaT0wOyBpIDwgMTY7IGkrKykgewotICAgICAgdG1wID0gKm91dHB1dDsKLSAgICAgICpvdXRwdXQrKyA9IHN0YXRlLm9jdGV0W2ldIF4gcHJldmlvdXMub2N0ZXRbaV07Ci0gICAgICBwcmV2aW91cy5vY3RldFtpXSA9IHRtcDsKLSAgICB9Ci0KLSAgICBieXRlc190b19lbmNyIC09IDE2OwotICB9Ci0KLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7Ci19Ci0KLQotZXJyX3N0YXR1c190Ci1hZXNfY2JjX25pc3RfZW5jcnlwdChhZXNfY2JjX2N0eF90ICpjLAotCQkgICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsIAotCQkgICAgIHVuc2lnbmVkIGludCAqYnl0ZXNfaW5fZGF0YSkgewotICBpbnQgaTsKLSAgdW5zaWduZWQgY2hhciAqcGFkX3N0YXJ0OyAKLSAgaW50IG51bV9wYWRfYnl0ZXM7Ci0gIGVycl9zdGF0dXNfdCBzdGF0dXM7Ci0KLSAgLyoKLSAgICogZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgcGFkZGluZyBieXRlcyB0aGF0IHdlIG5lZWQgdG8gYWRkIC0gCi0gICAqIHRoaXMgdmFsdWUgaXMgYWx3YXlzIGJldHdlZW4gMSBhbmQgMTYsIGluY2x1c2l2ZS4KLSAgICovCi0gIG51bV9wYWRfYnl0ZXMgPSAxNiAtICgqYnl0ZXNfaW5fZGF0YSAmIDB4Zik7Ci0gIHBhZF9zdGFydCA9IGRhdGE7Ci0gIHBhZF9zdGFydCArPSAqYnl0ZXNfaW5fZGF0YTsKLSAgKnBhZF9zdGFydCsrID0gMHhhMDsKLSAgZm9yIChpPTA7IGkgPCBudW1fcGFkX2J5dGVzOyBpKyspIAotICAgICpwYWRfc3RhcnQrKyA9IDB4MDA7Ci0gICAKLSAgLyogCi0gICAqIGluY3JlbWVudCB0aGUgZGF0YSBzaXplIAotICAgKi8KLSAgKmJ5dGVzX2luX2RhdGEgKz0gbnVtX3BhZF9ieXRlczsgIAotCi0gIC8qCi0gICAqIG5vdyBjYmMgZW5jcnlwdCB0aGUgcGFkZGVkIGRhdGEgCi0gICAqLwotICBzdGF0dXMgPSBhZXNfY2JjX2VuY3J5cHQoYywgZGF0YSwgYnl0ZXNfaW5fZGF0YSk7Ci0gIGlmIChzdGF0dXMpIAotICAgIHJldHVybiBzdGF0dXM7Ci0KLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7Ci19Ci0KLQotZXJyX3N0YXR1c190Ci1hZXNfY2JjX25pc3RfZGVjcnlwdChhZXNfY2JjX2N0eF90ICpjLAotCQkgICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsIAotCQkgICAgIHVuc2lnbmVkIGludCAqYnl0ZXNfaW5fZGF0YSkgewotICB1bnNpZ25lZCBjaGFyICpwYWRfZW5kOwotICBpbnQgbnVtX3BhZF9ieXRlczsKLSAgZXJyX3N0YXR1c190IHN0YXR1czsKLQotICAvKgotICAgKiBjYmMgZGVjcnlwdCB0aGUgcGFkZGVkIGRhdGEgCi0gICAqLwotICBzdGF0dXMgPSBhZXNfY2JjX2RlY3J5cHQoYywgZGF0YSwgYnl0ZXNfaW5fZGF0YSk7Ci0gIGlmIChzdGF0dXMpIAotICAgIHJldHVybiBzdGF0dXM7Ci0KLSAgLyoKLSAgICogZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgcGFkZGluZyBieXRlcyBpbiB0aGUgZGVjcnlwdGVkIHBsYWludGV4dAotICAgKiAtIHRoaXMgdmFsdWUgaXMgYWx3YXlzIGJldHdlZW4gMSBhbmQgMTYsIGluY2x1c2l2ZS4KLSAgICovCi0gIG51bV9wYWRfYnl0ZXMgPSAxOwotICBwYWRfZW5kID0gZGF0YSArICgqYnl0ZXNfaW5fZGF0YSAtIDEpOwotICB3aGlsZSAoKnBhZF9lbmQgIT0gMHhhMCkgeyAgIC8qIG5vdGU6IHNob3VsZCBjaGVjayBwYWRkaW5nIGNvcnJlY3RuZXNzICovCi0gICAgcGFkX2VuZC0tOwotICAgIG51bV9wYWRfYnl0ZXMrKzsKLSAgfQotCi0gIC8qIGRlY3JlbWVudCBkYXRhIHNpemUgKi8KLSAgKmJ5dGVzX2luX2RhdGEgLT0gbnVtX3BhZF9ieXRlczsgIAotCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOwotfQotCi0KLWNoYXIgCi1hZXNfY2JjX2Rlc2NyaXB0aW9uW10gPSAiYWVzIGNpcGhlciBibG9jayBjaGFpbmluZyAoY2JjKSBtb2RlIjsKLQotLyoKLSAqIFRlc3QgY2FzZSAwIGlzIGRlcml2ZWQgZnJvbSBGSVBTIDE5NyBBcHBlbmRpeCBBOyBpdCB1c2VzIGFuCi0gKiBhbGwtemVybyBJViwgc28gdGhhdCB0aGUgZmlyc3QgYmxvY2sgZW5jcnlwdGlvbiBtYXRjaGVzIHRoZSB0ZXN0Ci0gKiBjYXNlIGluIHRoYXQgYXBwZW5kaXguICBUaGlzIHByb3BlcnR5IHByb3ZpZGVzIGEgY2hlY2sgb2YgdGhlIGJhc2UKLSAqIEFFUyBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uIGFsZ29yaXRobXM7IGlmIENCQyBmYWlscyBvbiBzb21lCi0gKiBwYXJ0aWN1bGFyIHBsYXRmb3JtLCB0aGVuIHlvdSBzaG91bGQgcHJpbnQgb3V0IEFFUyBpbnRlcm1lZGlhdGUKLSAqIGRhdGEgYW5kIGNvbXBhcmUgd2l0aCB0aGUgZGV0YWlsZWQgaW5mbyBwcm92aWRlZCBpbiB0aGF0IGFwcGVuZGl4LgotICoKLSAqLwotCi0KLW9jdGV0X3QgYWVzX2NiY190ZXN0X2Nhc2VfMF9rZXlbMTZdID0gewotICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCAKLSAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZgotfTsKLQotb2N0ZXRfdCBhZXNfY2JjX3Rlc3RfY2FzZV8wX3BsYWludGV4dFs2NF0gPSAgewotICAweDAwLCAweDExLCAweDIyLCAweDMzLCAweDQ0LCAweDU1LCAweDY2LCAweDc3LAotICAweDg4LCAweDk5LCAweGFhLCAweGJiLCAweGNjLCAweGRkLCAweGVlLCAweGZmIAotfTsKLQotb2N0ZXRfdCBhZXNfY2JjX3Rlc3RfY2FzZV8wX2NpcGhlcnRleHRbODBdID0gewotICAweDY5LCAweGM0LCAweGUwLCAweGQ4LCAweDZhLCAweDdiLCAweDA0LCAweDMwLCAKLSAgMHhkOCwgMHhjZCwgMHhiNywgMHg4MCwgMHg3MCwgMHhiNCwgMHhjNSwgMHg1YSwKLSAgMHgwMywgMHgzNSwgMHhlZCwgMHgyNywgMHg2NywgMHhmMiwgMHg2ZCwgMHhmMSwgCi0gIDB4NjQsIDB4ODMsIDB4MmUsIDB4MjMsIDB4NDQsIDB4MzgsIDB4NzAsIDB4OGIKLQotfTsKLQotb2N0ZXRfdCBhZXNfY2JjX3Rlc3RfY2FzZV8wX2l2WzE2XSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKLX07Ci0KLQotY2lwaGVyX3Rlc3RfY2FzZV90IGFlc19jYmNfdGVzdF9jYXNlXzAgPSB7Ci0gIDE2LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9jdGV0cyBpbiBrZXkgICAgICAgICAgICAqLwotICBhZXNfY2JjX3Rlc3RfY2FzZV8wX2tleSwgICAgICAgICAgICAgICAvKiBrZXkgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgYWVzX2NiY190ZXN0X2Nhc2VfMF9pdiwgICAgICAgICAgICAgICAgLyogaW5pdGlhbGl6YXRpb24gdmVjdG9yICAgICovCi0gIDE2LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9jdGV0cyBpbiBwbGFpbnRleHQgICAgICAqLwotICBhZXNfY2JjX3Rlc3RfY2FzZV8wX3BsYWludGV4dCwgICAgICAgICAvKiBwbGFpbnRleHQgICAgICAgICAgICAgICAgKi8KLSAgMzIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2N0ZXRzIGluIGNpcGhlcnRleHQgICAgICovCi0gIGFlc19jYmNfdGVzdF9jYXNlXzBfY2lwaGVydGV4dCwgICAgICAgIC8qIGNpcGhlcnRleHQgICAgICAgICAgICAgICAqLwotICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIG5leHQgdGVzdGNhc2UgKi8KLX07Ci0KLQotLyoKLSAqIHRoaXMgdGVzdCBjYXNlIGlzIHRha2VuIGRpcmVjdGx5IGZyb20gQXBwZW5kaXggRi4yIG9mIE5JU1QgU3BlY2lhbAotICogUHVibGljYXRpb24gU1AgODAwLTM4QQotICovCi0KLW9jdGV0X3QgYWVzX2NiY190ZXN0X2Nhc2VfMV9rZXlbMTZdID0gewotICAweDJiLCAweDdlLCAweDE1LCAweDE2LCAweDI4LCAweGFlLCAweGQyLCAweGE2LAotICAweGFiLCAweGY3LCAweDE1LCAweDg4LCAweDA5LCAweGNmLCAweDRmLCAweDNjLAotfTsKLQotb2N0ZXRfdCBhZXNfY2JjX3Rlc3RfY2FzZV8xX3BsYWludGV4dFs2NF0gPSAgewotICAweDZiLCAweGMxLCAweGJlLCAweGUyLCAweDJlLCAweDQwLCAweDlmLCAweDk2LCAKLSAgMHhlOSwgMHgzZCwgMHg3ZSwgMHgxMSwgMHg3MywgMHg5MywgMHgxNywgMHgyYSwKLSAgMHhhZSwgMHgyZCwgMHg4YSwgMHg1NywgMHgxZSwgMHgwMywgMHhhYywgMHg5YywgCi0gIDB4OWUsIDB4YjcsIDB4NmYsIDB4YWMsIDB4NDUsIDB4YWYsIDB4OGUsIDB4NTEsCi0gIDB4MzAsIDB4YzgsIDB4MWMsIDB4NDYsIDB4YTMsIDB4NWMsIDB4ZTQsIDB4MTEsCi0gIDB4ZTUsIDB4ZmIsIDB4YzEsIDB4MTksIDB4MWEsIDB4MGEsIDB4NTIsIDB4ZWYsCi0gIDB4ZjYsIDB4OWYsIDB4MjQsIDB4NDUsIDB4ZGYsIDB4NGYsIDB4OWIsIDB4MTcsIAotICAweGFkLCAweDJiLCAweDQxLCAweDdiLCAweGU2LCAweDZjLCAweDM3LCAweDEwCi19OwotCi1vY3RldF90IGFlc19jYmNfdGVzdF9jYXNlXzFfY2lwaGVydGV4dFs4MF0gPSB7Ci0gIDB4NzYsIDB4NDksIDB4YWIsIDB4YWMsIDB4ODEsIDB4MTksIDB4YjIsIDB4NDYsCi0gIDB4Y2UsIDB4ZTksIDB4OGUsIDB4OWIsIDB4MTIsIDB4ZTksIDB4MTksIDB4N2QsCi0gIDB4NTAsIDB4ODYsIDB4Y2IsIDB4OWIsIDB4NTAsIDB4NzIsIDB4MTksIDB4ZWUsCi0gIDB4OTUsIDB4ZGIsIDB4MTEsIDB4M2EsIDB4OTEsIDB4NzYsIDB4NzgsIDB4YjIsCi0gIDB4NzMsIDB4YmUsIDB4ZDYsIDB4YjgsIDB4ZTMsIDB4YzEsIDB4NzQsIDB4M2IsCi0gIDB4NzEsIDB4MTYsIDB4ZTYsIDB4OWUsIDB4MjIsIDB4MjIsIDB4OTUsIDB4MTYsIAotICAweDNmLCAweGYxLCAweGNhLCAweGExLCAweDY4LCAweDFmLCAweGFjLCAweDA5LCAKLSAgMHgxMiwgMHgwZSwgMHhjYSwgMHgzMCwgMHg3NSwgMHg4NiwgMHhlMSwgMHhhNywKLSAgMHgzOSwgMHgzNCwgMHgwNywgMHgwMywgMHgzNiwgMHhkMCwgMHg3NywgMHg5OSwgCi0gIDB4ZTAsIDB4YzQsIDB4MmYsIDB4ZGQsIDB4YTgsIDB4ZGYsIDB4NGMsIDB4YTMKLX07Ci0KLW9jdGV0X3QgYWVzX2NiY190ZXN0X2Nhc2VfMV9pdlsxNl0gPSB7Ci0gIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIAotICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmCi19OwotCi1jaXBoZXJfdGVzdF9jYXNlX3QgYWVzX2NiY190ZXN0X2Nhc2VfMSA9IHsKLSAgMTYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2N0ZXRzIGluIGtleSAgICAgICAgICAgICovCi0gIGFlc19jYmNfdGVzdF9jYXNlXzFfa2V5LCAgICAgICAgICAgICAgIC8qIGtleSAgICAgICAgICAgICAgICAgICAgICAqLwotICBhZXNfY2JjX3Rlc3RfY2FzZV8xX2l2LCAgICAgICAgICAgICAgICAvKiBpbml0aWFsaXphdGlvbiB2ZWN0b3IgICAgKi8KLSAgNjQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2N0ZXRzIGluIHBsYWludGV4dCAgICAgICovCi0gIGFlc19jYmNfdGVzdF9jYXNlXzFfcGxhaW50ZXh0LCAgICAgICAgIC8qIHBsYWludGV4dCAgICAgICAgICAgICAgICAqLwotICA4MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvY3RldHMgaW4gY2lwaGVydGV4dCAgICAgKi8KLSAgYWVzX2NiY190ZXN0X2Nhc2VfMV9jaXBoZXJ0ZXh0LCAgICAgICAgLyogY2lwaGVydGV4dCAgICAgICAgICAgICAgICovCi0gICZhZXNfY2JjX3Rlc3RfY2FzZV8wICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIG5leHQgdGVzdGNhc2UgKi8KLX07Ci0KLWNpcGhlcl90eXBlX3QgYWVzX2NiYyA9IHsKLSAgKGNpcGhlcl9hbGxvY19mdW5jX3QpICAgICAgICAgIGFlc19jYmNfYWxsb2MsCi0gIChjaXBoZXJfZGVhbGxvY19mdW5jX3QpICAgICAgICBhZXNfY2JjX2RlYWxsb2MsICAKLSAgKGNpcGhlcl9pbml0X2Z1bmNfdCkgICAgICAgICAgIGFlc19jYmNfY29udGV4dF9pbml0LAotICAoY2lwaGVyX2VuY3J5cHRfZnVuY190KSAgICAgICAgYWVzX2NiY19uaXN0X2VuY3J5cHQsCi0gIChjaXBoZXJfZGVjcnlwdF9mdW5jX3QpICAgICAgICBhZXNfY2JjX25pc3RfZGVjcnlwdCwKLSAgKGNpcGhlcl9zZXRfaXZfZnVuY190KSAgICAgICAgIGFlc19jYmNfc2V0X2l2LAotICAoY2hhciAqKSAgICAgICAgICAgICAgICAgICAgICAgYWVzX2NiY19kZXNjcmlwdGlvbiwKLSAgKGludCkgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgLyogaW5zdGFuY2UgY291bnQgKi8KLSAgKGNpcGhlcl90ZXN0X2Nhc2VfdCAqKSAgICAgICAgJmFlc19jYmNfdGVzdF9jYXNlXzAsCi0gIChkZWJ1Z19tb2R1bGVfdCAqKSAgICAgICAgICAgICZtb2RfYWVzX2NiYwotfTsKLQotCmRpZmYgLS1naXQgYS9jcnlwdG8vY2lwaGVyL2Flc19nY21fbnNzLmMgYi9jcnlwdG8vY2lwaGVyL2Flc19nY21fbnNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1NDdjZAotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9jaXBoZXIvYWVzX2djbV9uc3MuYwpAQCAtMCwwICsxLDYwOSBAQAorLyoKKyAqIGFlc19nY21fbnNzLmMKKyAqCisgKiBBRVMgR2Fsb2lzIENvdW50ZXIgTW9kZQorICoKKyAqIFJpY2hhcmQgTC4gQmFybmVzCisgKiBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICovCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTcsIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiYWVzX2djbS5oIgorI2luY2x1ZGUgImFsbG9jLmgiCisjaW5jbHVkZSAiZXJyLmgiIC8qIGZvciBzcnRwX2RlYnVnICovCisjaW5jbHVkZSAiY3J5cHRvX3R5cGVzLmgiCisjaW5jbHVkZSAiY2lwaGVyX3R5cGVzLmgiCisjaW5jbHVkZSA8c2VjZXJyLmg+CisjaW5jbHVkZSA8bnNwci5oPgorCitzcnRwX2RlYnVnX21vZHVsZV90IHNydHBfbW9kX2Flc19nY20gPSB7CisgICAgMCwgICAgICAgICAgICAvKiBkZWJ1Z2dpbmcgaXMgb2ZmIGJ5IGRlZmF1bHQgKi8KKyAgICAiYWVzIGdjbSBuc3MiIC8qIHByaW50YWJsZSBtb2R1bGUgbmFtZSAgICAgICAqLworfTsKKworLyoKKyAqIEZvciBub3cgd2Ugb25seSBzdXBwb3J0IDggYW5kIDE2IG9jdGV0IHRhZ3MuICBUaGUgc3BlYyBhbGxvd3MgZm9yCisgKiBvcHRpb25hbCAxMiBieXRlIHRhZywgd2hpY2ggbWF5IGJlIHN1cHBvcnRlZCBpbiB0aGUgZnV0dXJlLgorICovCisjZGVmaW5lIEdDTV9JVl9MRU4gMTIKKyNkZWZpbmUgR0NNX0FVVEhfVEFHX0xFTiAxNgorI2RlZmluZSBHQ01fQVVUSF9UQUdfTEVOXzggOAorCisvKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBjcnlwdG8gZW5naW5lLgorICogVGhlIGtleV9sZW4gcGFyYW1ldGVyIHNob3VsZCBiZSBvbmUgb2YgMjggb3IgNDQgZm9yCisgKiBBRVMtMTI4LUdDTSBvciBBRVMtMjU2LUdDTSByZXNwZWN0aXZlbHkuICBOb3RlIHRoYXQgdGhlCisgKiBrZXkgbGVuZ3RoIGluY2x1ZGVzIHRoZSAxNCBieXRlIHNhbHQgdmFsdWUgdGhhdCBpcyB1c2VkIHdoZW4KKyAqIGluaXRpYWxpemluZyB0aGUgS0RGLgorICovCitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9hZXNfZ2NtX25zc19hbGxvYyhzcnRwX2NpcGhlcl90ICoqYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXlfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRsZW4pCit7CisgICAgc3J0cF9hZXNfZ2NtX2N0eF90ICpnY207CisgICAgTlNTSW5pdENvbnRleHQgKm5zczsKKworICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX2Flc19nY20sICJhbGxvY2F0aW5nIGNpcGhlciB3aXRoIGtleSBsZW5ndGggJWQiLAorICAgICAgICAgICAgICAgIGtleV9sZW4pOworICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX2Flc19nY20sICJhbGxvY2F0aW5nIGNpcGhlciB3aXRoIHRhZyBsZW5ndGggJWQiLCB0bGVuKTsKKworICAgIC8qCisgICAgICogVmVyaWZ5IHRoZSBrZXlfbGVuIGlzIHZhbGlkIGZvciBvbmUgb2Y6IEFFUy0xMjgvMjU2CisgICAgICovCisgICAgaWYgKGtleV9sZW4gIT0gU1JUUF9BRVNfR0NNXzEyOF9LRVlfTEVOX1dTQUxUICYmCisgICAgICAgIGtleV9sZW4gIT0gU1JUUF9BRVNfR0NNXzI1Nl9LRVlfTEVOX1dTQUxUKSB7CisgICAgICAgIHJldHVybiAoc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbSk7CisgICAgfQorCisgICAgaWYgKHRsZW4gIT0gR0NNX0FVVEhfVEFHX0xFTiAmJiB0bGVuICE9IEdDTV9BVVRIX1RBR19MRU5fOCkgeworICAgICAgICByZXR1cm4gKHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW0pOworICAgIH0KKworICAgIC8qIEluaXRpYWxpemUgTlNTIGVxdWl2IG9mIE5TU19Ob0RCX0luaXQoTlVMTCkgKi8KKyAgICBuc3MgPSBOU1NfSW5pdENvbnRleHQoIiIsICIiLCAiIiwgIiIsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5TU19JTklUX1JFQURPTkxZIHwgTlNTX0lOSVRfTk9DRVJUREIgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNTX0lOSVRfTk9NT0REQiB8IE5TU19JTklUX0ZPUkNFT1BFTiB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU1NfSU5JVF9PUFRJTUlaRVNQQUNFKTsKKyAgICBpZiAoIW5zcykgeworICAgICAgICByZXR1cm4gKHNydHBfZXJyX3N0YXR1c19jaXBoZXJfZmFpbCk7CisgICAgfQorCisgICAgLyogYWxsb2NhdGUgbWVtb3J5IGEgY2lwaGVyIG9mIHR5cGUgYWVzX2djbSAqLworICAgICpjID0gKHNydHBfY2lwaGVyX3QgKilzcnRwX2NyeXB0b19hbGxvYyhzaXplb2Yoc3J0cF9jaXBoZXJfdCkpOworICAgIGlmICgqYyA9PSBOVUxMKSB7CisgICAgICAgIE5TU19TaHV0ZG93bkNvbnRleHQobnNzKTsKKyAgICAgICAgcmV0dXJuIChzcnRwX2Vycl9zdGF0dXNfYWxsb2NfZmFpbCk7CisgICAgfQorCisgICAgZ2NtID0gKHNydHBfYWVzX2djbV9jdHhfdCAqKXNydHBfY3J5cHRvX2FsbG9jKHNpemVvZihzcnRwX2Flc19nY21fY3R4X3QpKTsKKyAgICBpZiAoZ2NtID09IE5VTEwpIHsKKyAgICAgICAgTlNTX1NodXRkb3duQ29udGV4dChuc3MpOworICAgICAgICBzcnRwX2NyeXB0b19mcmVlKCpjKTsKKyAgICAgICAgKmMgPSBOVUxMOworICAgICAgICByZXR1cm4gKHNydHBfZXJyX3N0YXR1c19hbGxvY19mYWlsKTsKKyAgICB9CisKKyAgICBnY20tPm5zcyA9IG5zczsKKworICAgIC8qIHNldCBwb2ludGVycyAqLworICAgICgqYyktPnN0YXRlID0gZ2NtOworCisgICAgLyogc2V0dXAgY2lwaGVyIGF0dHJpYnV0ZXMgKi8KKyAgICBzd2l0Y2ggKGtleV9sZW4pIHsKKyAgICBjYXNlIFNSVFBfQUVTX0dDTV8xMjhfS0VZX0xFTl9XU0FMVDoKKyAgICAgICAgKCpjKS0+dHlwZSA9ICZzcnRwX2Flc19nY21fMTI4OworICAgICAgICAoKmMpLT5hbGdvcml0aG0gPSBTUlRQX0FFU19HQ01fMTI4OworICAgICAgICBnY20tPmtleV9zaXplID0gU1JUUF9BRVNfMTI4X0tFWV9MRU47CisgICAgICAgIGdjbS0+dGFnX3NpemUgPSB0bGVuOworICAgICAgICBnY20tPnBhcmFtcy51bFRhZ0JpdHMgPSA4ICogdGxlbjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTUlRQX0FFU19HQ01fMjU2X0tFWV9MRU5fV1NBTFQ6CisgICAgICAgICgqYyktPnR5cGUgPSAmc3J0cF9hZXNfZ2NtXzI1NjsKKyAgICAgICAgKCpjKS0+YWxnb3JpdGhtID0gU1JUUF9BRVNfR0NNXzI1NjsKKyAgICAgICAgZ2NtLT5rZXlfc2l6ZSA9IFNSVFBfQUVTXzI1Nl9LRVlfTEVOOworICAgICAgICBnY20tPnRhZ19zaXplID0gdGxlbjsKKyAgICAgICAgZ2NtLT5wYXJhbXMudWxUYWdCaXRzID0gOCAqIHRsZW47CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8qIHRoaXMgc2hvdWxkIG5ldmVyIGhpdCwgYnV0IHRvIGJlIHN1cmUuLi4gKi8KKyAgICAgICAgcmV0dXJuIChzcnRwX2Vycl9zdGF0dXNfYmFkX3BhcmFtKTsKKyAgICB9CisKKyAgICAvKiBzZXQga2V5IHNpemUgYW5kIHRhZyBzaXplKi8KKyAgICAoKmMpLT5rZXlfbGVuID0ga2V5X2xlbjsKKworICAgIHJldHVybiAoc3J0cF9lcnJfc3RhdHVzX29rKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZGVhbGxvY2F0ZXMgYSBHQ00gc2Vzc2lvbgorICovCitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9hZXNfZ2NtX25zc19kZWFsbG9jKHNydHBfY2lwaGVyX3QgKmMpCit7CisgICAgc3J0cF9hZXNfZ2NtX2N0eF90ICpjdHg7CisKKyAgICBjdHggPSAoc3J0cF9hZXNfZ2NtX2N0eF90ICopYy0+c3RhdGU7CisgICAgaWYgKGN0eCkgeworICAgICAgICAvKiByZWxlYXNlIE5TUyByZXNvdXJjZXMgKi8KKyAgICAgICAgaWYgKGN0eC0+a2V5KSB7CisgICAgICAgICAgICBQSzExX0ZyZWVTeW1LZXkoY3R4LT5rZXkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGN0eC0+bnNzKSB7CisgICAgICAgICAgICBOU1NfU2h1dGRvd25Db250ZXh0KGN0eC0+bnNzKTsKKyAgICAgICAgICAgIGN0eC0+bnNzID0gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHplcm9pemUgdGhlIGtleSBtYXRlcmlhbCAqLworICAgICAgICBvY3RldF9zdHJpbmdfc2V0X3RvX3plcm8oY3R4LCBzaXplb2Yoc3J0cF9hZXNfZ2NtX2N0eF90KSk7CisgICAgICAgIHNydHBfY3J5cHRvX2ZyZWUoY3R4KTsKKyAgICB9CisKKyAgICAvKiBmcmVlIG1lbW9yeSAqLworICAgIHNydHBfY3J5cHRvX2ZyZWUoYyk7CisKKyAgICByZXR1cm4gKHNydHBfZXJyX3N0YXR1c19vayk7Cit9CisKKy8qCisgKiBhZXNfZ2NtX25zc19jb250ZXh0X2luaXQoLi4uKSBpbml0aWFsaXplcyB0aGUgYWVzX2djbV9jb250ZXh0CisgKiB1c2luZyB0aGUgdmFsdWUgaW4ga2V5W10uCisgKgorICogdGhlIGtleSBpcyB0aGUgc2VjcmV0IGtleQorICovCitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9hZXNfZ2NtX25zc19jb250ZXh0X2luaXQodm9pZCAqY3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5KQoreworICAgIHNydHBfYWVzX2djbV9jdHhfdCAqYyA9IChzcnRwX2Flc19nY21fY3R4X3QgKiljdjsKKworICAgIGMtPmRpciA9IHNydHBfZGlyZWN0aW9uX2FueTsKKworICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX2Flc19nY20sICJrZXk6ICAlcyIsCisgICAgICAgICAgICAgICAgc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZyhrZXksIGMtPmtleV9zaXplKSk7CisKKyAgICBpZiAoYy0+a2V5KSB7CisgICAgICAgIFBLMTFfRnJlZVN5bUtleShjLT5rZXkpOworICAgICAgICBjLT5rZXkgPSBOVUxMOworICAgIH0KKworICAgIFBLMTFTbG90SW5mbyAqc2xvdCA9IFBLMTFfR2V0QmVzdFNsb3QoQ0tNX0FFU19HQ00sIE5VTEwpOworICAgIGlmICghc2xvdCkgeworICAgICAgICByZXR1cm4gKHNydHBfZXJyX3N0YXR1c19jaXBoZXJfZmFpbCk7CisgICAgfQorCisgICAgU0VDSXRlbSBrZXlfaXRlbSA9IHsgc2lCdWZmZXIsICh1bnNpZ25lZCBjaGFyICopa2V5LCBjLT5rZXlfc2l6ZSB9OworICAgIGMtPmtleSA9IFBLMTFfSW1wb3J0U3ltS2V5KHNsb3QsIENLTV9BRVNfR0NNLCBQSzExX09yaWdpblVud3JhcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDS0FfRU5DUllQVCwgJmtleV9pdGVtLCBOVUxMKTsKKyAgICBQSzExX0ZyZWVTbG90KHNsb3QpOworCisgICAgaWYgKCFjLT5rZXkpIHsKKyAgICAgICAgcmV0dXJuIChzcnRwX2Vycl9zdGF0dXNfY2lwaGVyX2ZhaWwpOworICAgIH0KKworICAgIHJldHVybiAoc3J0cF9lcnJfc3RhdHVzX29rKTsKK30KKworLyoKKyAqIGFlc19nY21fbnNzX3NldF9pdihjLCBpdikgc2V0cyB0aGUgY291bnRlciB2YWx1ZSB0byB0aGUgZXhvciBvZiBpdiB3aXRoCisgKiB0aGUgb2Zmc2V0CisgKi8KK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2Flc19nY21fbnNzX3NldF9pdigKKyAgICB2b2lkICpjdiwKKyAgICB1aW50OF90ICppdiwKKyAgICBzcnRwX2NpcGhlcl9kaXJlY3Rpb25fdCBkaXJlY3Rpb24pCit7CisgICAgc3J0cF9hZXNfZ2NtX2N0eF90ICpjID0gKHNydHBfYWVzX2djbV9jdHhfdCAqKWN2OworCisgICAgaWYgKGRpcmVjdGlvbiAhPSBzcnRwX2RpcmVjdGlvbl9lbmNyeXB0ICYmCisgICAgICAgIGRpcmVjdGlvbiAhPSBzcnRwX2RpcmVjdGlvbl9kZWNyeXB0KSB7CisgICAgICAgIHJldHVybiAoc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbSk7CisgICAgfQorICAgIGMtPmRpciA9IGRpcmVjdGlvbjsKKworICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX2Flc19nY20sICJzZXR0aW5nIGl2OiAlcyIsCisgICAgICAgICAgICAgICAgc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZyhpdiwgR0NNX0lWX0xFTikpOworCisgICAgbWVtY3B5KGMtPml2LCBpdiwgR0NNX0lWX0xFTik7CisKKyAgICByZXR1cm4gKHNydHBfZXJyX3N0YXR1c19vayk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgQUFECisgKgorICogUGFyYW1ldGVyczoKKyAqCWMJQ3J5cHRvIGNvbnRleHQKKyAqCWFhZAlBZGRpdGlvbmFsIGRhdGEgdG8gcHJvY2VzcyBmb3IgQUVBRCBjaXBoZXIgc3VpdGVzCisgKglhYWRfbGVuCWxlbmd0aCBvZiBhYWQgYnVmZmVyCisgKi8KK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2Flc19nY21fbnNzX3NldF9hYWQodm9pZCAqY3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWFkX2xlbikKK3sKKyAgICBzcnRwX2Flc19nY21fY3R4X3QgKmMgPSAoc3J0cF9hZXNfZ2NtX2N0eF90ICopY3Y7CisKKyAgICBkZWJ1Z19wcmludChzcnRwX21vZF9hZXNfZ2NtLCAic2V0dGluZyBBQUQ6ICVzIiwKKyAgICAgICAgICAgICAgICBzcnRwX29jdGV0X3N0cmluZ19oZXhfc3RyaW5nKGFhZCwgYWFkX2xlbikpOworCisgICAgaWYgKGFhZF9sZW4gKyBjLT5hYWRfc2l6ZSA+IE1BWF9BRF9TSVpFKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYmFkX3BhcmFtOworICAgIH0KKworICAgIG1lbWNweShjLT5hYWQgKyBjLT5hYWRfc2l6ZSwgYWFkLCBhYWRfbGVuKTsKKyAgICBjLT5hYWRfc2l6ZSArPSBhYWRfbGVuOworCisgICAgcmV0dXJuIChzcnRwX2Vycl9zdGF0dXNfb2spOworfQorCitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9hZXNfZ2NtX25zc19kb19jcnlwdG8odm9pZCAqY3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVuY3J5cHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZW5jX2xlbikKK3sKKyAgICBzcnRwX2Flc19nY21fY3R4X3QgKmMgPSAoc3J0cF9hZXNfZ2NtX2N0eF90ICopY3Y7CisKKyAgICBjLT5wYXJhbXMucEl2ID0gYy0+aXY7CisgICAgYy0+cGFyYW1zLnVsSXZMZW4gPSBHQ01fSVZfTEVOOworICAgIGMtPnBhcmFtcy5wQUFEID0gYy0+YWFkOworICAgIGMtPnBhcmFtcy51bEFBRExlbiA9IGMtPmFhZF9zaXplOworCisgICAgLy8gUmVzZXQgQUFECisgICAgYy0+YWFkX3NpemUgPSAwOworCisgICAgaW50IHJ2OworICAgIFNFQ0l0ZW0gcGFyYW0gPSB7IHNpQnVmZmVyLCAodW5zaWduZWQgY2hhciAqKSZjLT5wYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKENLX0dDTV9QQVJBTVMpIH07CisgICAgaWYgKGVuY3J5cHQpIHsKKyAgICAgICAgcnYgPSBQSzExX0VuY3J5cHQoYy0+a2V5LCBDS01fQUVTX0dDTSwgJnBhcmFtLCBidWYsIGVuY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICplbmNfbGVuICsgMTYsIGJ1ZiwgKmVuY19sZW4pOworICAgIH0gZWxzZSB7CisgICAgICAgIHJ2ID0gUEsxMV9EZWNyeXB0KGMtPmtleSwgQ0tNX0FFU19HQ00sICZwYXJhbSwgYnVmLCBlbmNfbGVuLCAqZW5jX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCAqZW5jX2xlbik7CisgICAgfQorCisgICAgc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdHVzID0gKHNydHBfZXJyX3N0YXR1c19vayk7CisgICAgaWYgKHJ2ICE9IFNFQ1N1Y2Nlc3MpIHsKKyAgICAgICAgc3RhdHVzID0gKHNydHBfZXJyX3N0YXR1c19jaXBoZXJfZmFpbCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZW5jcnlwdHMgYSBidWZmZXIgdXNpbmcgQUVTIEdDTSBtb2RlCisgKgorICogWFhYKHJsYkBpcHYuc3gpOiBXZSdyZSByZXF1aXJlZCB0byBicmVhayBvZmYgYW5kIGNhY2hlIHRoZSB0YWcKKyAqIGhlcmUsIGJlY2F1c2UgdGhlIGdldF90YWcoKSBtZXRob2QgaXMgc2VwYXJhdGUgYW5kIHRoZSB0ZXN0cyBleHBlY3QKKyAqIGVuY3J5cHQoKSBub3QgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBwbGFpbnRleHQuICBJdCBtaWdodCBiZQorICogZ29vZCB0byB1cGRhdGUgdGhlIGNhbGxpbmcgQVBJIHNvIHRoYXQgdGhpcyBpcyBjbGVhbmVyLgorICoKKyAqIFBhcmFtZXRlcnM6CisgKgljCUNyeXB0byBjb250ZXh0CisgKglidWYJZGF0YSB0byBlbmNyeXB0CisgKgllbmNfbGVuCWxlbmd0aCBvZiBlbmNyeXB0IGJ1ZmZlcgorICovCitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9hZXNfZ2NtX25zc19lbmNyeXB0KHZvaWQgKmN2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZW5jX2xlbikKK3sKKyAgICBzcnRwX2Flc19nY21fY3R4X3QgKmMgPSAoc3J0cF9hZXNfZ2NtX2N0eF90ICopY3Y7CisKKyAgICAvLyBXaGVuIHdlIGdldCBhIG5vbi1OVUxMIGJ1ZmZlciwgd2Uga25vdyB0aGF0IHRoZSBjYWxsZXIgaXMKKyAgICAvLyBwcmVwYXJlZCB0byBhbHNvIHRha2UgdGhlIHRhZy4gIFdoZW4gd2UgZ2V0IGEgTlVMTCBidWZmZXIsCisgICAgLy8gZXZlbiB0aG91Z2ggdGhlcmUncyBubyBkYXRhLCB3ZSBuZWVkIHRvIGdpdmUgTlNTIGEgYnVmZmVyCisgICAgLy8gd2hlcmUgaXQgY2FuIHdyaXRlIHRoZSB0YWcuICBXZSBjYW4ndCBqdXN0IHVzZSBjLT50YWcgYmVjYXVzZQorICAgIC8vIG1lbWNweSBoYXMgdW5kZWZpbmVkIGJlaGF2aW9yIG9uIG92ZXJsYXBwaW5nIHJhbmdlcy4KKyAgICB1bnNpZ25lZCBjaGFyIHRhZ2J1ZlsxNl07CisgICAgdW5zaWduZWQgY2hhciAqbm9uX251bGxfYnVmID0gYnVmOworICAgIGlmICghbm9uX251bGxfYnVmICYmICgqZW5jX2xlbiA9PSAwKSkgeworICAgICAgICBub25fbnVsbF9idWYgPSB0YWdidWY7CisgICAgfSBlbHNlIGlmICghbm9uX251bGxfYnVmKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYmFkX3BhcmFtOworICAgIH0KKworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1cyA9CisgICAgICAgIHNydHBfYWVzX2djbV9uc3NfZG9fY3J5cHRvKGN2LCAxLCBub25fbnVsbF9idWYsIGVuY19sZW4pOworICAgIGlmIChzdGF0dXMgIT0gc3J0cF9lcnJfc3RhdHVzX29rKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgbWVtY3B5KGMtPnRhZywgbm9uX251bGxfYnVmICsgKCplbmNfbGVuIC0gYy0+dGFnX3NpemUpLCBjLT50YWdfc2l6ZSk7CisgICAgKmVuY19sZW4gLT0gYy0+dGFnX3NpemU7CisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyBhbmQgcmV0dXJucyB0aGUgR0NNIHRhZyBmb3IgYSBnaXZlbiBjb250ZXh0LgorICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIGVuY3J5cHRpbmcgdGhlIGRhdGEuICBUaGUgKmxlbiB2YWx1ZQorICogaXMgaW5jcmVhc2VkIGJ5IHRoZSB0YWcgc2l6ZS4gIFRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCAqYnVmIGhhcworICogZW5vdWdoIHJvb20gdG8gYWNjZXB0IHRoZSBhcHBlbmRlZCB0YWcuCisgKgorICogUGFyYW1ldGVyczoKKyAqCWMJQ3J5cHRvIGNvbnRleHQKKyAqCWJ1ZglkYXRhIHRvIGVuY3J5cHQKKyAqCWxlbglsZW5ndGggb2YgZW5jcnlwdCBidWZmZXIKKyAqLworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IHNydHBfYWVzX2djbV9uc3NfZ2V0X3RhZyh2b2lkICpjdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqbGVuKQoreworICAgIHNydHBfYWVzX2djbV9jdHhfdCAqYyA9IChzcnRwX2Flc19nY21fY3R4X3QgKiljdjsKKyAgICAqbGVuID0gYy0+dGFnX3NpemU7CisgICAgbWVtY3B5KGJ1ZiwgYy0+dGFnLCBjLT50YWdfc2l6ZSk7CisgICAgcmV0dXJuIChzcnRwX2Vycl9zdGF0dXNfb2spOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBkZWNyeXB0cyBhIGJ1ZmZlciB1c2luZyBBRVMgR0NNIG1vZGUKKyAqCisgKiBQYXJhbWV0ZXJzOgorICoJYwlDcnlwdG8gY29udGV4dAorICoJYnVmCWRhdGEgdG8gZW5jcnlwdAorICoJZW5jX2xlbglsZW5ndGggb2YgZW5jcnlwdCBidWZmZXIKKyAqLworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IHNydHBfYWVzX2djbV9uc3NfZGVjcnlwdCh2b2lkICpjdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmVuY19sZW4pCit7CisgICAgc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdHVzID0gc3J0cF9hZXNfZ2NtX25zc19kb19jcnlwdG8oY3YsIDAsIGJ1ZiwgZW5jX2xlbik7CisgICAgaWYgKHN0YXR1cyAhPSBzcnRwX2Vycl9zdGF0dXNfb2spIHsKKyAgICAgICAgaW50IGVyciA9IFBSX0dldEVycm9yKCk7CisgICAgICAgIGlmIChlcnIgPT0gU0VDX0VSUk9SX0JBRF9EQVRBKSB7CisgICAgICAgICAgICBzdGF0dXMgPSBzcnRwX2Vycl9zdGF0dXNfYXV0aF9mYWlsOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIE5hbWUgb2YgdGhpcyBjcnlwdG8gZW5naW5lCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyIHNydHBfYWVzX2djbV8xMjhfbnNzX2Rlc2NyaXB0aW9uW10gPSAiQUVTLTEyOCBHQ00gdXNpbmcgTlNTIjsKK3N0YXRpYyBjb25zdCBjaGFyIHNydHBfYWVzX2djbV8yNTZfbnNzX2Rlc2NyaXB0aW9uW10gPSAiQUVTLTI1NiBHQ00gdXNpbmcgTlNTIjsKKworLyoKKyAqIEtBVCB2YWx1ZXMgZm9yIEFFUyBzZWxmLXRlc3QuICBUaGVzZQorICogdmFsdWVzIHdlJ3JlIGRlcml2ZWQgZnJvbSBpbmRlcGVuZGVudCB0ZXN0IGNvZGUKKyAqIHVzaW5nIE9wZW5TU0wuCisgKi8KKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KK3N0YXRpYyBjb25zdCB1aW50OF90IHNydHBfYWVzX2djbV90ZXN0X2Nhc2VfMF9rZXlbU1JUUF9BRVNfR0NNXzEyOF9LRVlfTEVOX1dTQUxUXSA9IHsKKyAgICAweGZlLCAweGZmLCAweGU5LCAweDkyLCAweDg2LCAweDY1LCAweDczLCAweDFjLAorICAgIDB4NmQsIDB4NmEsIDB4OGYsIDB4OTQsIDB4NjcsIDB4MzAsIDB4ODMsIDB4MDgsCisgICAgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwOCwKKyAgICAweDA5LCAweDBhLCAweDBiLCAweDBjLAorfTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgdWludDhfdCBzcnRwX2Flc19nY21fdGVzdF9jYXNlXzBfaXZbMTJdID0geworICAgIDB4Y2EsIDB4ZmUsIDB4YmEsIDB4YmUsIDB4ZmEsIDB4Y2UsIDB4ZGIsIDB4YWQsCisgICAgMHhkZSwgMHhjYSwgMHhmOCwgMHg4OAorfTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgY29uc3QgdWludDhfdCBzcnRwX2Flc19nY21fdGVzdF9jYXNlXzBfcGxhaW50ZXh0WzYwXSA9ICB7CisgICAgMHhkOSwgMHgzMSwgMHgzMiwgMHgyNSwgMHhmOCwgMHg4NCwgMHgwNiwgMHhlNSwKKyAgICAweGE1LCAweDU5LCAweDA5LCAweGM1LCAweGFmLCAweGY1LCAweDI2LCAweDlhLAorICAgIDB4ODYsIDB4YTcsIDB4YTksIDB4NTMsIDB4MTUsIDB4MzQsIDB4ZjcsIDB4ZGEsCisgICAgMHgyZSwgMHg0YywgMHgzMCwgMHgzZCwgMHg4YSwgMHgzMSwgMHg4YSwgMHg3MiwKKyAgICAweDFjLCAweDNjLCAweDBjLCAweDk1LCAweDk1LCAweDY4LCAweDA5LCAweDUzLAorICAgIDB4MmYsIDB4Y2YsIDB4MGUsIDB4MjQsIDB4NDksIDB4YTYsIDB4YjUsIDB4MjUsCisgICAgMHhiMSwgMHg2YSwgMHhlZCwgMHhmNSwgMHhhYSwgMHgwZCwgMHhlNiwgMHg1NywKKyAgICAweGJhLCAweDYzLCAweDdiLCAweDM5Cit9OworCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgY29uc3QgdWludDhfdCBzcnRwX2Flc19nY21fdGVzdF9jYXNlXzBfYWFkWzIwXSA9IHsKKyAgICAweGZlLCAweGVkLCAweGZhLCAweGNlLCAweGRlLCAweGFkLCAweGJlLCAweGVmLAorICAgIDB4ZmUsIDB4ZWQsIDB4ZmEsIDB4Y2UsIDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWYsCisgICAgMHhhYiwgMHhhZCwgMHhkYSwgMHhkMgorfTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgY29uc3QgdWludDhfdCBzcnRwX2Flc19nY21fdGVzdF9jYXNlXzBfY2lwaGVydGV4dFs3Nl0gPSB7CisgICAgMHg0MiwgMHg4MywgMHgxZSwgMHhjMiwgMHgyMSwgMHg3NywgMHg3NCwgMHgyNCwKKyAgICAweDRiLCAweDcyLCAweDIxLCAweGI3LCAweDg0LCAweGQwLCAweGQ0LCAweDljLAorICAgIDB4ZTMsIDB4YWEsIDB4MjEsIDB4MmYsIDB4MmMsIDB4MDIsIDB4YTQsIDB4ZTAsCisgICAgMHgzNSwgMHhjMSwgMHg3ZSwgMHgyMywgMHgyOSwgMHhhYywgMHhhMSwgMHgyZSwKKyAgICAweDIxLCAweGQ1LCAweDE0LCAweGIyLCAweDU0LCAweDY2LCAweDkzLCAweDFjLAorICAgIDB4N2QsIDB4OGYsIDB4NmEsIDB4NWEsIDB4YWMsIDB4ODQsIDB4YWEsIDB4MDUsCisgICAgMHgxYiwgMHhhMywgMHgwYiwgMHgzOSwgMHg2YSwgMHgwYSwgMHhhYywgMHg5NywKKyAgICAweDNkLCAweDU4LCAweGUwLCAweDkxLAorICAgIC8qIHRoZSBsYXN0IDE2IGJ5dGVzIGFyZSB0aGUgdGFnICovCisgICAgMHg1YiwgMHhjOSwgMHg0ZiwgMHhiYywgMHgzMiwgMHgyMSwgMHhhNSwgMHhkYiwKKyAgICAweDk0LCAweGZhLCAweGU5LCAweDVhLCAweGU3LCAweDEyLCAweDFhLCAweDQ3LAorfTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworCitzdGF0aWMgY29uc3Qgc3J0cF9jaXBoZXJfdGVzdF9jYXNlX3Qgc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8wYSA9IHsKKyAgICBTUlRQX0FFU19HQ01fMTI4X0tFWV9MRU5fV1NBTFQsICAgICAgLyogb2N0ZXRzIGluIGtleSAgICAgICAgICAgICovCisgICAgc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8wX2tleSwgICAgICAgIC8qIGtleSAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHNydHBfYWVzX2djbV90ZXN0X2Nhc2VfMF9pdiwgICAgICAgICAvKiBwYWNrZXQgaW5kZXggICAgICAgICAgICAgKi8KKyAgICA2MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2N0ZXRzIGluIHBsYWludGV4dCAgICAgICovCisgICAgc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8wX3BsYWludGV4dCwgIC8qIHBsYWludGV4dCAgICAgICAgICAgICAgICAqLworICAgIDY4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvY3RldHMgaW4gY2lwaGVydGV4dCAgICAgKi8KKyAgICBzcnRwX2Flc19nY21fdGVzdF9jYXNlXzBfY2lwaGVydGV4dCwgLyogY2lwaGVydGV4dCAgKyB0YWcgICAgICAgICovCisgICAgMjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9jdGV0cyBpbiBBQUQgICAgICAgICAgICAqLworICAgIHNydHBfYWVzX2djbV90ZXN0X2Nhc2VfMF9hYWQsICAgICAgICAvKiBBQUQgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBHQ01fQVVUSF9UQUdfTEVOXzgsICAgICAgICAgICAgICAgICAgLyogKi8KKyAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBuZXh0IHRlc3RjYXNlICovCit9OworCitzdGF0aWMgY29uc3Qgc3J0cF9jaXBoZXJfdGVzdF9jYXNlX3Qgc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8wID0geworICAgIFNSVFBfQUVTX0dDTV8xMjhfS0VZX0xFTl9XU0FMVCwgICAgICAvKiBvY3RldHMgaW4ga2V5ICAgICAgICAgICAgKi8KKyAgICBzcnRwX2Flc19nY21fdGVzdF9jYXNlXzBfa2V5LCAgICAgICAgLyoga2V5ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8wX2l2LCAgICAgICAgIC8qIHBhY2tldCBpbmRleCAgICAgICAgICAgICAqLworICAgIDYwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvY3RldHMgaW4gcGxhaW50ZXh0ICAgICAgKi8KKyAgICBzcnRwX2Flc19nY21fdGVzdF9jYXNlXzBfcGxhaW50ZXh0LCAgLyogcGxhaW50ZXh0ICAgICAgICAgICAgICAgICovCisgICAgNzYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9jdGV0cyBpbiBjaXBoZXJ0ZXh0ICAgICAqLworICAgIHNydHBfYWVzX2djbV90ZXN0X2Nhc2VfMF9jaXBoZXJ0ZXh0LCAvKiBjaXBoZXJ0ZXh0ICArIHRhZyAgICAgICAgKi8KKyAgICAyMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2N0ZXRzIGluIEFBRCAgICAgICAgICAgICovCisgICAgc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8wX2FhZCwgICAgICAgIC8qIEFBRCAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEdDTV9BVVRIX1RBR19MRU4sICAgICAgICAgICAgICAgICAgICAvKiAqLworICAgICZzcnRwX2Flc19nY21fdGVzdF9jYXNlXzBhICAgICAgICAgICAvKiBwb2ludGVyIHRvIG5leHQgdGVzdGNhc2UgKi8KK307CisKKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KK3N0YXRpYyBjb25zdCB1aW50OF90IHNydHBfYWVzX2djbV90ZXN0X2Nhc2VfMV9rZXlbU1JUUF9BRVNfR0NNXzI1Nl9LRVlfTEVOX1dTQUxUXSA9IHsKKyAgICAweGZlLCAweGZmLCAweGU5LCAweDkyLCAweDg2LCAweDY1LCAweDczLCAweDFjLAorICAgIDB4YTUsIDB4NTksIDB4MDksIDB4YzUsIDB4NTQsIDB4NjYsIDB4OTMsIDB4MWMsCisgICAgMHhhZiwgMHhmNSwgMHgyNiwgMHg5YSwgMHgyMSwgMHhkNSwgMHgxNCwgMHhiMiwKKyAgICAweDZkLCAweDZhLCAweDhmLCAweDk0LCAweDY3LCAweDMwLCAweDgzLCAweDA4LAorICAgIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsCisgICAgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywKK307CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworLyogY2xhbmctZm9ybWF0IG9mZiAqLworc3RhdGljIHVpbnQ4X3Qgc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8xX2l2WzEyXSA9IHsKKyAgICAweGNhLCAweGZlLCAweGJhLCAweGJlLCAweGZhLCAweGNlLCAweGRiLCAweGFkLAorICAgIDB4ZGUsIDB4Y2EsIDB4ZjgsIDB4ODgKK307CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworLyogY2xhbmctZm9ybWF0IG9mZiAqLworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8xX3BsYWludGV4dFs2MF0gPSAgeworICAgIDB4ZDksIDB4MzEsIDB4MzIsIDB4MjUsIDB4ZjgsIDB4ODQsIDB4MDYsIDB4ZTUsCisgICAgMHhhNSwgMHg1OSwgMHgwOSwgMHhjNSwgMHhhZiwgMHhmNSwgMHgyNiwgMHg5YSwKKyAgICAweDg2LCAweGE3LCAweGE5LCAweDUzLCAweDE1LCAweDM0LCAweGY3LCAweGRhLAorICAgIDB4MmUsIDB4NGMsIDB4MzAsIDB4M2QsIDB4OGEsIDB4MzEsIDB4OGEsIDB4NzIsCisgICAgMHgxYywgMHgzYywgMHgwYywgMHg5NSwgMHg5NSwgMHg2OCwgMHgwOSwgMHg1MywKKyAgICAweDJmLCAweGNmLCAweDBlLCAweDI0LCAweDQ5LCAweGE2LCAweGI1LCAweDI1LAorICAgIDB4YjEsIDB4NmEsIDB4ZWQsIDB4ZjUsIDB4YWEsIDB4MGQsIDB4ZTYsIDB4NTcsCisgICAgMHhiYSwgMHg2MywgMHg3YiwgMHgzOQorfTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgY29uc3QgdWludDhfdCBzcnRwX2Flc19nY21fdGVzdF9jYXNlXzFfYWFkWzIwXSA9IHsKKyAgICAweGZlLCAweGVkLCAweGZhLCAweGNlLCAweGRlLCAweGFkLCAweGJlLCAweGVmLAorICAgIDB4ZmUsIDB4ZWQsIDB4ZmEsIDB4Y2UsIDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWYsCisgICAgMHhhYiwgMHhhZCwgMHhkYSwgMHhkMgorfTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgY29uc3QgdWludDhfdCBzcnRwX2Flc19nY21fdGVzdF9jYXNlXzFfY2lwaGVydGV4dFs3Nl0gPSB7CisgICAgMHgwYiwgMHgxMSwgMHhjZiwgMHhhZiwgMHg2OCwgMHg0ZCwgMHhhZSwgMHg0NiwKKyAgICAweGM3LCAweDkwLCAweGI4LCAweDhlLCAweGI3LCAweDZhLCAweDc2LCAweDJhLAorICAgIDB4OTQsIDB4ODIsIDB4Y2EsIDB4YWIsIDB4M2UsIDB4MzksIDB4ZDcsIDB4ODYsCisgICAgMHgxYiwgMHhjNywgMHg5MywgMHhlZCwgMHg3NSwgMHg3ZiwgMHgyMywgMHg1YSwKKyAgICAweGRhLCAweGZkLCAweGQzLCAweGUyLCAweDBlLCAweDgwLCAweDg3LCAweGE5LAorICAgIDB4NmQsIDB4ZDcsIDB4ZTIsIDB4NmEsIDB4N2QsIDB4NWYsIDB4YjQsIDB4ODAsCisgICAgMHhlZiwgMHhlZiwgMHhjNSwgMHgyOSwgMHgxMiwgMHhkMSwgMHhhYSwgMHgxMCwKKyAgICAweDA5LCAweGM5LCAweDg2LCAweGMxLAorICAgIC8qIHRoZSBsYXN0IDE2IGJ5dGVzIGFyZSB0aGUgdGFnICovCisgICAgMHg0NSwgMHhiYywgMHgwMywgMHhlNiwgMHhlMSwgMHhhYywgMHgwYSwgMHg5ZiwKKyAgICAweDgxLCAweGNiLCAweDhlLCAweDViLCAweDQ2LCAweDY1LCAweDYzLCAweDFkLAorfTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworCitzdGF0aWMgY29uc3Qgc3J0cF9jaXBoZXJfdGVzdF9jYXNlX3Qgc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8xYSA9IHsKKyAgICBTUlRQX0FFU19HQ01fMjU2X0tFWV9MRU5fV1NBTFQsICAgICAgLyogb2N0ZXRzIGluIGtleSAgICAgICAgICAgICovCisgICAgc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8xX2tleSwgICAgICAgIC8qIGtleSAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHNydHBfYWVzX2djbV90ZXN0X2Nhc2VfMV9pdiwgICAgICAgICAvKiBwYWNrZXQgaW5kZXggICAgICAgICAgICAgKi8KKyAgICA2MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2N0ZXRzIGluIHBsYWludGV4dCAgICAgICovCisgICAgc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8xX3BsYWludGV4dCwgIC8qIHBsYWludGV4dCAgICAgICAgICAgICAgICAqLworICAgIDY4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvY3RldHMgaW4gY2lwaGVydGV4dCAgICAgKi8KKyAgICBzcnRwX2Flc19nY21fdGVzdF9jYXNlXzFfY2lwaGVydGV4dCwgLyogY2lwaGVydGV4dCAgKyB0YWcgICAgICAgICovCisgICAgMjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9jdGV0cyBpbiBBQUQgICAgICAgICAgICAqLworICAgIHNydHBfYWVzX2djbV90ZXN0X2Nhc2VfMV9hYWQsICAgICAgICAvKiBBQUQgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBHQ01fQVVUSF9UQUdfTEVOXzgsICAgICAgICAgICAgICAgICAgLyogKi8KKyAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBuZXh0IHRlc3RjYXNlICovCit9OworCitzdGF0aWMgY29uc3Qgc3J0cF9jaXBoZXJfdGVzdF9jYXNlX3Qgc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8xID0geworICAgIFNSVFBfQUVTX0dDTV8yNTZfS0VZX0xFTl9XU0FMVCwgICAgICAvKiBvY3RldHMgaW4ga2V5ICAgICAgICAgICAgKi8KKyAgICBzcnRwX2Flc19nY21fdGVzdF9jYXNlXzFfa2V5LCAgICAgICAgLyoga2V5ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8xX2l2LCAgICAgICAgIC8qIHBhY2tldCBpbmRleCAgICAgICAgICAgICAqLworICAgIDYwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvY3RldHMgaW4gcGxhaW50ZXh0ICAgICAgKi8KKyAgICBzcnRwX2Flc19nY21fdGVzdF9jYXNlXzFfcGxhaW50ZXh0LCAgLyogcGxhaW50ZXh0ICAgICAgICAgICAgICAgICovCisgICAgNzYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9jdGV0cyBpbiBjaXBoZXJ0ZXh0ICAgICAqLworICAgIHNydHBfYWVzX2djbV90ZXN0X2Nhc2VfMV9jaXBoZXJ0ZXh0LCAvKiBjaXBoZXJ0ZXh0ICArIHRhZyAgICAgICAgKi8KKyAgICAyMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2N0ZXRzIGluIEFBRCAgICAgICAgICAgICovCisgICAgc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8xX2FhZCwgICAgICAgIC8qIEFBRCAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEdDTV9BVVRIX1RBR19MRU4sICAgICAgICAgICAgICAgICAgICAvKiAqLworICAgICZzcnRwX2Flc19nY21fdGVzdF9jYXNlXzFhICAgICAgICAgICAvKiBwb2ludGVyIHRvIG5leHQgdGVzdGNhc2UgKi8KK307CisKKy8qCisgKiBUaGlzIGlzIHRoZSB2ZWN0b3IgZnVuY3Rpb24gdGFibGUgZm9yIHRoaXMgY3J5cHRvIGVuZ2luZS4KKyAqLworLyogY2xhbmctZm9ybWF0IG9mZiAqLworY29uc3Qgc3J0cF9jaXBoZXJfdHlwZV90IHNydHBfYWVzX2djbV8xMjggPSB7CisgICAgc3J0cF9hZXNfZ2NtX25zc19hbGxvYywKKyAgICBzcnRwX2Flc19nY21fbnNzX2RlYWxsb2MsCisgICAgc3J0cF9hZXNfZ2NtX25zc19jb250ZXh0X2luaXQsCisgICAgc3J0cF9hZXNfZ2NtX25zc19zZXRfYWFkLAorICAgIHNydHBfYWVzX2djbV9uc3NfZW5jcnlwdCwKKyAgICBzcnRwX2Flc19nY21fbnNzX2RlY3J5cHQsCisgICAgc3J0cF9hZXNfZ2NtX25zc19zZXRfaXYsCisgICAgc3J0cF9hZXNfZ2NtX25zc19nZXRfdGFnLAorICAgIHNydHBfYWVzX2djbV8xMjhfbnNzX2Rlc2NyaXB0aW9uLAorICAgICZzcnRwX2Flc19nY21fdGVzdF9jYXNlXzAsCisgICAgU1JUUF9BRVNfR0NNXzEyOAorfTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworCisvKgorICogVGhpcyBpcyB0aGUgdmVjdG9yIGZ1bmN0aW9uIHRhYmxlIGZvciB0aGlzIGNyeXB0byBlbmdpbmUuCisgKi8KKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KK2NvbnN0IHNydHBfY2lwaGVyX3R5cGVfdCBzcnRwX2Flc19nY21fMjU2ID0geworICAgIHNydHBfYWVzX2djbV9uc3NfYWxsb2MsCisgICAgc3J0cF9hZXNfZ2NtX25zc19kZWFsbG9jLAorICAgIHNydHBfYWVzX2djbV9uc3NfY29udGV4dF9pbml0LAorICAgIHNydHBfYWVzX2djbV9uc3Nfc2V0X2FhZCwKKyAgICBzcnRwX2Flc19nY21fbnNzX2VuY3J5cHQsCisgICAgc3J0cF9hZXNfZ2NtX25zc19kZWNyeXB0LAorICAgIHNydHBfYWVzX2djbV9uc3Nfc2V0X2l2LAorICAgIHNydHBfYWVzX2djbV9uc3NfZ2V0X3RhZywKKyAgICBzcnRwX2Flc19nY21fMjU2X25zc19kZXNjcmlwdGlvbiwKKyAgICAmc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8xLAorICAgIFNSVFBfQUVTX0dDTV8yNTYKK307CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KZGlmZiAtLWdpdCBhL2NyeXB0by9jaXBoZXIvYWVzX2djbV9vc3NsLmMgYi9jcnlwdG8vY2lwaGVyL2Flc19nY21fb3NzbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZDVlM2IKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vY2lwaGVyL2Flc19nY21fb3NzbC5jCkBAIC0wLDAgKzEsNTgzIEBACisvKgorICogYWVzX2djbV9vc3NsLmMKKyAqCisgKiBBRVMgR2Fsb2lzIENvdW50ZXIgTW9kZQorICoKKyAqIEpvaG4gQS4gRm9sZXkKKyAqIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKi8KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNywgQ2lzY28gU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorI2luY2x1ZGUgImFlc19nY20uaCIKKyNpbmNsdWRlICJhbGxvYy5oIgorI2luY2x1ZGUgImVyci5oIiAvKiBmb3Igc3J0cF9kZWJ1ZyAqLworI2luY2x1ZGUgImNyeXB0b190eXBlcy5oIgorI2luY2x1ZGUgImNpcGhlcl90eXBlcy5oIgorCitzcnRwX2RlYnVnX21vZHVsZV90IHNydHBfbW9kX2Flc19nY20gPSB7CisgICAgMCwgICAgICAgIC8qIGRlYnVnZ2luZyBpcyBvZmYgYnkgZGVmYXVsdCAqLworICAgICJhZXMgZ2NtIiAvKiBwcmludGFibGUgbW9kdWxlIG5hbWUgICAgICAgKi8KK307CisKKy8qCisgKiBGb3Igbm93IHdlIG9ubHkgc3VwcG9ydCA4IGFuZCAxNiBvY3RldCB0YWdzLiAgVGhlIHNwZWMgYWxsb3dzIGZvcgorICogb3B0aW9uYWwgMTIgYnl0ZSB0YWcsIHdoaWNoIG1heSBiZSBzdXBwb3J0ZWQgaW4gdGhlIGZ1dHVyZS4KKyAqLworI2RlZmluZSBHQ01fQVVUSF9UQUdfTEVOIDE2CisjZGVmaW5lIEdDTV9BVVRIX1RBR19MRU5fOCA4CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzIGNyeXB0byBlbmdpbmUuCisgKiBUaGUga2V5X2xlbiBwYXJhbWV0ZXIgc2hvdWxkIGJlIG9uZSBvZiAyOCBvciA0NCBmb3IKKyAqIEFFUy0xMjgtR0NNIG9yIEFFUy0yNTYtR0NNIHJlc3BlY3RpdmVseS4gIE5vdGUgdGhhdCB0aGUKKyAqIGtleSBsZW5ndGggaW5jbHVkZXMgdGhlIDE0IGJ5dGUgc2FsdCB2YWx1ZSB0aGF0IGlzIHVzZWQgd2hlbgorICogaW5pdGlhbGl6aW5nIHRoZSBLREYuCisgKi8KK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2Flc19nY21fb3BlbnNzbF9hbGxvYyhzcnRwX2NpcGhlcl90ICoqYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGxlbikKK3sKKyAgICBzcnRwX2Flc19nY21fY3R4X3QgKmdjbTsKKworICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX2Flc19nY20sICJhbGxvY2F0aW5nIGNpcGhlciB3aXRoIGtleSBsZW5ndGggJWQiLAorICAgICAgICAgICAgICAgIGtleV9sZW4pOworICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX2Flc19nY20sICJhbGxvY2F0aW5nIGNpcGhlciB3aXRoIHRhZyBsZW5ndGggJWQiLCB0bGVuKTsKKworICAgIC8qCisgICAgICogVmVyaWZ5IHRoZSBrZXlfbGVuIGlzIHZhbGlkIGZvciBvbmUgb2Y6IEFFUy0xMjgvMjU2CisgICAgICovCisgICAgaWYgKGtleV9sZW4gIT0gU1JUUF9BRVNfR0NNXzEyOF9LRVlfTEVOX1dTQUxUICYmCisgICAgICAgIGtleV9sZW4gIT0gU1JUUF9BRVNfR0NNXzI1Nl9LRVlfTEVOX1dTQUxUKSB7CisgICAgICAgIHJldHVybiAoc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbSk7CisgICAgfQorCisgICAgaWYgKHRsZW4gIT0gR0NNX0FVVEhfVEFHX0xFTiAmJiB0bGVuICE9IEdDTV9BVVRIX1RBR19MRU5fOCkgeworICAgICAgICByZXR1cm4gKHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW0pOworICAgIH0KKworICAgIC8qIGFsbG9jYXRlIG1lbW9yeSBhIGNpcGhlciBvZiB0eXBlIGFlc19nY20gKi8KKyAgICAqYyA9IChzcnRwX2NpcGhlcl90ICopc3J0cF9jcnlwdG9fYWxsb2Moc2l6ZW9mKHNydHBfY2lwaGVyX3QpKTsKKyAgICBpZiAoKmMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gKHNydHBfZXJyX3N0YXR1c19hbGxvY19mYWlsKTsKKyAgICB9CisKKyAgICBnY20gPSAoc3J0cF9hZXNfZ2NtX2N0eF90ICopc3J0cF9jcnlwdG9fYWxsb2Moc2l6ZW9mKHNydHBfYWVzX2djbV9jdHhfdCkpOworICAgIGlmIChnY20gPT0gTlVMTCkgeworICAgICAgICBzcnRwX2NyeXB0b19mcmVlKCpjKTsKKyAgICAgICAgKmMgPSBOVUxMOworICAgICAgICByZXR1cm4gKHNydHBfZXJyX3N0YXR1c19hbGxvY19mYWlsKTsKKyAgICB9CisKKyAgICBnY20tPmN0eCA9IEVWUF9DSVBIRVJfQ1RYX25ldygpOworICAgIGlmIChnY20tPmN0eCA9PSBOVUxMKSB7CisgICAgICAgIHNydHBfY3J5cHRvX2ZyZWUoZ2NtKTsKKyAgICAgICAgc3J0cF9jcnlwdG9fZnJlZSgqYyk7CisgICAgICAgICpjID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19hbGxvY19mYWlsOworICAgIH0KKworICAgIC8qIHNldCBwb2ludGVycyAqLworICAgICgqYyktPnN0YXRlID0gZ2NtOworCisgICAgLyogc2V0dXAgY2lwaGVyIGF0dHJpYnV0ZXMgKi8KKyAgICBzd2l0Y2ggKGtleV9sZW4pIHsKKyAgICBjYXNlIFNSVFBfQUVTX0dDTV8xMjhfS0VZX0xFTl9XU0FMVDoKKyAgICAgICAgKCpjKS0+dHlwZSA9ICZzcnRwX2Flc19nY21fMTI4OworICAgICAgICAoKmMpLT5hbGdvcml0aG0gPSBTUlRQX0FFU19HQ01fMTI4OworICAgICAgICBnY20tPmtleV9zaXplID0gU1JUUF9BRVNfMTI4X0tFWV9MRU47CisgICAgICAgIGdjbS0+dGFnX2xlbiA9IHRsZW47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU1JUUF9BRVNfR0NNXzI1Nl9LRVlfTEVOX1dTQUxUOgorICAgICAgICAoKmMpLT50eXBlID0gJnNydHBfYWVzX2djbV8yNTY7CisgICAgICAgICgqYyktPmFsZ29yaXRobSA9IFNSVFBfQUVTX0dDTV8yNTY7CisgICAgICAgIGdjbS0+a2V5X3NpemUgPSBTUlRQX0FFU18yNTZfS0VZX0xFTjsKKyAgICAgICAgZ2NtLT50YWdfbGVuID0gdGxlbjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLyogc2V0IGtleSBzaXplICAgICAgICAqLworICAgICgqYyktPmtleV9sZW4gPSBrZXlfbGVuOworCisgICAgcmV0dXJuIChzcnRwX2Vycl9zdGF0dXNfb2spOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBkZWFsbG9jYXRlcyBhIEdDTSBzZXNzaW9uCisgKi8KK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2Flc19nY21fb3BlbnNzbF9kZWFsbG9jKHNydHBfY2lwaGVyX3QgKmMpCit7CisgICAgc3J0cF9hZXNfZ2NtX2N0eF90ICpjdHg7CisKKyAgICBjdHggPSAoc3J0cF9hZXNfZ2NtX2N0eF90ICopYy0+c3RhdGU7CisgICAgaWYgKGN0eCkgeworICAgICAgICBFVlBfQ0lQSEVSX0NUWF9mcmVlKGN0eC0+Y3R4KTsKKyAgICAgICAgLyogemVyb2l6ZSB0aGUga2V5IG1hdGVyaWFsICovCisgICAgICAgIG9jdGV0X3N0cmluZ19zZXRfdG9femVybyhjdHgsIHNpemVvZihzcnRwX2Flc19nY21fY3R4X3QpKTsKKyAgICAgICAgc3J0cF9jcnlwdG9fZnJlZShjdHgpOworICAgIH0KKworICAgIC8qIGZyZWUgbWVtb3J5ICovCisgICAgc3J0cF9jcnlwdG9fZnJlZShjKTsKKworICAgIHJldHVybiAoc3J0cF9lcnJfc3RhdHVzX29rKTsKK30KKworLyoKKyAqIGFlc19nY21fb3BlbnNzbF9jb250ZXh0X2luaXQoLi4uKSBpbml0aWFsaXplcyB0aGUgYWVzX2djbV9jb250ZXh0CisgKiB1c2luZyB0aGUgdmFsdWUgaW4ga2V5W10uCisgKgorICogdGhlIGtleSBpcyB0aGUgc2VjcmV0IGtleQorICovCitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9hZXNfZ2NtX29wZW5zc2xfY29udGV4dF9pbml0KHZvaWQgKmN2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXkpCit7CisgICAgc3J0cF9hZXNfZ2NtX2N0eF90ICpjID0gKHNydHBfYWVzX2djbV9jdHhfdCAqKWN2OworICAgIGNvbnN0IEVWUF9DSVBIRVIgKmV2cDsKKworICAgIGMtPmRpciA9IHNydHBfZGlyZWN0aW9uX2FueTsKKworICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX2Flc19nY20sICJrZXk6ICAlcyIsCisgICAgICAgICAgICAgICAgc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZyhrZXksIGMtPmtleV9zaXplKSk7CisKKyAgICBzd2l0Y2ggKGMtPmtleV9zaXplKSB7CisgICAgY2FzZSBTUlRQX0FFU18yNTZfS0VZX0xFTjoKKyAgICAgICAgZXZwID0gRVZQX2Flc18yNTZfZ2NtKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU1JUUF9BRVNfMTI4X0tFWV9MRU46CisgICAgICAgIGV2cCA9IEVWUF9hZXNfMTI4X2djbSgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gKHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW0pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKGMtPmN0eCk7CisgICAgaWYgKCFFVlBfQ2lwaGVySW5pdF9leChjLT5jdHgsIGV2cCwgTlVMTCwga2V5LCBOVUxMLCAwKSkgeworICAgICAgICByZXR1cm4gKHNydHBfZXJyX3N0YXR1c19pbml0X2ZhaWwpOworICAgIH0KKworICAgIHJldHVybiAoc3J0cF9lcnJfc3RhdHVzX29rKTsKK30KKworLyoKKyAqIGFlc19nY21fb3BlbnNzbF9zZXRfaXYoYywgaXYpIHNldHMgdGhlIGNvdW50ZXIgdmFsdWUgdG8gdGhlIGV4b3Igb2YgaXYgd2l0aAorICogdGhlIG9mZnNldAorICovCitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9hZXNfZ2NtX29wZW5zc2xfc2V0X2l2KAorICAgIHZvaWQgKmN2LAorICAgIHVpbnQ4X3QgKml2LAorICAgIHNydHBfY2lwaGVyX2RpcmVjdGlvbl90IGRpcmVjdGlvbikKK3sKKyAgICBzcnRwX2Flc19nY21fY3R4X3QgKmMgPSAoc3J0cF9hZXNfZ2NtX2N0eF90ICopY3Y7CisKKyAgICBpZiAoZGlyZWN0aW9uICE9IHNydHBfZGlyZWN0aW9uX2VuY3J5cHQgJiYKKyAgICAgICAgZGlyZWN0aW9uICE9IHNydHBfZGlyZWN0aW9uX2RlY3J5cHQpIHsKKyAgICAgICAgcmV0dXJuIChzcnRwX2Vycl9zdGF0dXNfYmFkX3BhcmFtKTsKKyAgICB9CisgICAgYy0+ZGlyID0gZGlyZWN0aW9uOworCisgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfYWVzX2djbSwgInNldHRpbmcgaXY6ICVzIiwKKyAgICAgICAgICAgICAgICBzcnRwX29jdGV0X3N0cmluZ19oZXhfc3RyaW5nKGl2LCAxMikpOworCisgICAgaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKGMtPmN0eCwgRVZQX0NUUkxfR0NNX1NFVF9JVkxFTiwgMTIsIDApKSB7CisgICAgICAgIHJldHVybiAoc3J0cF9lcnJfc3RhdHVzX2luaXRfZmFpbCk7CisgICAgfQorCisgICAgaWYgKCFFVlBfQ2lwaGVySW5pdF9leChjLT5jdHgsIE5VTEwsIE5VTEwsIE5VTEwsIGl2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGMtPmRpciA9PSBzcnRwX2RpcmVjdGlvbl9lbmNyeXB0ID8gMSA6IDApKSkgeworICAgICAgICByZXR1cm4gKHNydHBfZXJyX3N0YXR1c19pbml0X2ZhaWwpOworICAgIH0KKworICAgIHJldHVybiAoc3J0cF9lcnJfc3RhdHVzX29rKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcHJvY2Vzc2VzIHRoZSBBQUQKKyAqCisgKiBQYXJhbWV0ZXJzOgorICoJYwlDcnlwdG8gY29udGV4dAorICoJYWFkCUFkZGl0aW9uYWwgZGF0YSB0byBwcm9jZXNzIGZvciBBRUFEIGNpcGhlciBzdWl0ZXMKKyAqCWFhZF9sZW4JbGVuZ3RoIG9mIGFhZCBidWZmZXIKKyAqLworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IHNydHBfYWVzX2djbV9vcGVuc3NsX3NldF9hYWQodm9pZCAqY3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhYWRfbGVuKQoreworICAgIHNydHBfYWVzX2djbV9jdHhfdCAqYyA9IChzcnRwX2Flc19nY21fY3R4X3QgKiljdjsKKyAgICBpbnQgcnY7CisKKyAgICBkZWJ1Z19wcmludChzcnRwX21vZF9hZXNfZ2NtLCAic2V0dGluZyBBQUQ6ICVzIiwKKyAgICAgICAgICAgICAgICBzcnRwX29jdGV0X3N0cmluZ19oZXhfc3RyaW5nKGFhZCwgYWFkX2xlbikpOworCisgICAgLyoKKyAgICAgKiBTZXQgZHVtbXkgdGFnLCBPcGVuU1NMIHJlcXVpcmVzIHRoZSBUYWcgdG8gYmUgc2V0IGJlZm9yZQorICAgICAqIHByb2Nlc3NpbmcgQUFECisgICAgICovCisKKyAgICAvKgorICAgICAqIE9wZW5TU0wgbmV2ZXIgd3JpdGUgdG8gYWRkcmVzcyBwb2ludGVkIGJ5IHRoZSBsYXN0IHBhcmFtZXRlciBvZgorICAgICAqIEVWUF9DSVBIRVJfQ1RYX2N0cmwgd2hpbGUgRVZQX0NUUkxfR0NNX1NFVF9UQUcgKGluIHJlYWxpdHksCisgICAgICogT3BlblNTTCBjb3B5IGl0cyBjb250ZW50IHRvIHRoZSBjb250ZXh0KSwgc28gd2UgY2FuIG1ha2UKKyAgICAgKiBhYWQgcmVhZC1vbmx5IGluIHRoaXMgZnVuY3Rpb24gYW5kIGFsbCBpdHMgd3JhcHBlcnMuCisgICAgICovCisgICAgdW5zaWduZWQgY2hhciBkdW1teV90YWdbR0NNX0FVVEhfVEFHX0xFTl07CisgICAgbWVtc2V0KGR1bW15X3RhZywgMHgwLCBHQ01fQVVUSF9UQUdfTEVOKTsKKyAgICBFVlBfQ0lQSEVSX0NUWF9jdHJsKGMtPmN0eCwgRVZQX0NUUkxfR0NNX1NFVF9UQUcsIGMtPnRhZ19sZW4sICZkdW1teV90YWcpOworCisgICAgcnYgPSBFVlBfQ2lwaGVyKGMtPmN0eCwgTlVMTCwgYWFkLCBhYWRfbGVuKTsKKyAgICBpZiAocnYgIT0gYWFkX2xlbikgeworICAgICAgICByZXR1cm4gKHNydHBfZXJyX3N0YXR1c19hbGdvX2ZhaWwpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAoc3J0cF9lcnJfc3RhdHVzX29rKTsKKyAgICB9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGVuY3J5cHRzIGEgYnVmZmVyIHVzaW5nIEFFUyBHQ00gbW9kZQorICoKKyAqIFBhcmFtZXRlcnM6CisgKgljCUNyeXB0byBjb250ZXh0CisgKglidWYJZGF0YSB0byBlbmNyeXB0CisgKgllbmNfbGVuCWxlbmd0aCBvZiBlbmNyeXB0IGJ1ZmZlcgorICovCitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9hZXNfZ2NtX29wZW5zc2xfZW5jcnlwdCh2b2lkICpjdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZW5jX2xlbikKK3sKKyAgICBzcnRwX2Flc19nY21fY3R4X3QgKmMgPSAoc3J0cF9hZXNfZ2NtX2N0eF90ICopY3Y7CisgICAgaWYgKGMtPmRpciAhPSBzcnRwX2RpcmVjdGlvbl9lbmNyeXB0ICYmIGMtPmRpciAhPSBzcnRwX2RpcmVjdGlvbl9kZWNyeXB0KSB7CisgICAgICAgIHJldHVybiAoc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBFbmNyeXB0IHRoZSBkYXRhCisgICAgICovCisgICAgRVZQX0NpcGhlcihjLT5jdHgsIGJ1ZiwgYnVmLCAqZW5jX2xlbik7CisKKyAgICByZXR1cm4gKHNydHBfZXJyX3N0YXR1c19vayk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgYW5kIHJldHVybnMgdGhlIEdDTSB0YWcgZm9yIGEgZ2l2ZW4gY29udGV4dC4KKyAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBlbmNyeXB0aW5nIHRoZSBkYXRhLiAgVGhlICpsZW4gdmFsdWUKKyAqIGlzIGluY3JlYXNlZCBieSB0aGUgdGFnIHNpemUuICBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgKmJ1ZiBoYXMKKyAqIGVub3VnaCByb29tIHRvIGFjY2VwdCB0aGUgYXBwZW5kZWQgdGFnLgorICoKKyAqIFBhcmFtZXRlcnM6CisgKgljCUNyeXB0byBjb250ZXh0CisgKglidWYJZGF0YSB0byBlbmNyeXB0CisgKglsZW4JbGVuZ3RoIG9mIGVuY3J5cHQgYnVmZmVyCisgKi8KK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2Flc19nY21fb3BlbnNzbF9nZXRfdGFnKHZvaWQgKmN2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmxlbikKK3sKKyAgICBzcnRwX2Flc19nY21fY3R4X3QgKmMgPSAoc3J0cF9hZXNfZ2NtX2N0eF90ICopY3Y7CisgICAgLyoKKyAgICAgKiBDYWxjdWxhdGUgdGhlIHRhZworICAgICAqLworICAgIEVWUF9DaXBoZXIoYy0+Y3R4LCBOVUxMLCBOVUxMLCAwKTsKKworICAgIC8qCisgICAgICogUmV0cmVpdmUgdGhlIHRhZworICAgICAqLworICAgIEVWUF9DSVBIRVJfQ1RYX2N0cmwoYy0+Y3R4LCBFVlBfQ1RSTF9HQ01fR0VUX1RBRywgYy0+dGFnX2xlbiwgYnVmKTsKKworICAgIC8qCisgICAgICogSW5jcmVhc2UgZW5jcnlwdGlvbiBsZW5ndGggYnkgZGVzaXJlZCB0YWcgc2l6ZQorICAgICAqLworICAgICpsZW4gPSBjLT50YWdfbGVuOworCisgICAgcmV0dXJuIChzcnRwX2Vycl9zdGF0dXNfb2spOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBkZWNyeXB0cyBhIGJ1ZmZlciB1c2luZyBBRVMgR0NNIG1vZGUKKyAqCisgKiBQYXJhbWV0ZXJzOgorICoJYwlDcnlwdG8gY29udGV4dAorICoJYnVmCWRhdGEgdG8gZW5jcnlwdAorICoJZW5jX2xlbglsZW5ndGggb2YgZW5jcnlwdCBidWZmZXIKKyAqLworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IHNydHBfYWVzX2djbV9vcGVuc3NsX2RlY3J5cHQodm9pZCAqY3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmVuY19sZW4pCit7CisgICAgc3J0cF9hZXNfZ2NtX2N0eF90ICpjID0gKHNydHBfYWVzX2djbV9jdHhfdCAqKWN2OworICAgIGlmIChjLT5kaXIgIT0gc3J0cF9kaXJlY3Rpb25fZW5jcnlwdCAmJiBjLT5kaXIgIT0gc3J0cF9kaXJlY3Rpb25fZGVjcnlwdCkgeworICAgICAgICByZXR1cm4gKHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW0pOworICAgIH0KKworICAgIC8qCisgICAgICogU2V0IHRoZSB0YWcgYmVmb3JlIGRlY3J5cHRpbmcKKyAgICAgKi8KKyAgICBFVlBfQ0lQSEVSX0NUWF9jdHJsKGMtPmN0eCwgRVZQX0NUUkxfR0NNX1NFVF9UQUcsIGMtPnRhZ19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBidWYgKyAoKmVuY19sZW4gLSBjLT50YWdfbGVuKSk7CisgICAgRVZQX0NpcGhlcihjLT5jdHgsIGJ1ZiwgYnVmLCAqZW5jX2xlbiAtIGMtPnRhZ19sZW4pOworCisgICAgLyoKKyAgICAgKiBDaGVjayB0aGUgdGFnCisgICAgICovCisgICAgaWYgKEVWUF9DaXBoZXIoYy0+Y3R4LCBOVUxMLCBOVUxMLCAwKSkgeworICAgICAgICByZXR1cm4gKHNydHBfZXJyX3N0YXR1c19hdXRoX2ZhaWwpOworICAgIH0KKworICAgIC8qCisgICAgICogUmVkdWNlIHRoZSBidWZmZXIgc2l6ZSBieSB0aGUgdGFnIGxlbmd0aCBzaW5jZSB0aGUgdGFnCisgICAgICogaXMgbm90IHBhcnQgb2YgdGhlIG9yaWdpbmFsIHBheWxvYWQKKyAgICAgKi8KKyAgICAqZW5jX2xlbiAtPSBjLT50YWdfbGVuOworCisgICAgcmV0dXJuIChzcnRwX2Vycl9zdGF0dXNfb2spOworfQorCisvKgorICogTmFtZSBvZiB0aGlzIGNyeXB0byBlbmdpbmUKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgc3J0cF9hZXNfZ2NtXzEyOF9vcGVuc3NsX2Rlc2NyaXB0aW9uW10gPQorICAgICJBRVMtMTI4IEdDTSB1c2luZyBvcGVuc3NsIjsKK3N0YXRpYyBjb25zdCBjaGFyIHNydHBfYWVzX2djbV8yNTZfb3BlbnNzbF9kZXNjcmlwdGlvbltdID0KKyAgICAiQUVTLTI1NiBHQ00gdXNpbmcgb3BlbnNzbCI7CisKKy8qCisgKiBLQVQgdmFsdWVzIGZvciBBRVMgc2VsZi10ZXN0LiAgVGhlc2UKKyAqIHZhbHVlcyB3ZSdyZSBkZXJpdmVkIGZyb20gaW5kZXBlbmRlbnQgdGVzdCBjb2RlCisgKiB1c2luZyBPcGVuU1NMLgorICovCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgY29uc3QgdWludDhfdCBzcnRwX2Flc19nY21fdGVzdF9jYXNlXzBfa2V5W1NSVFBfQUVTX0dDTV8xMjhfS0VZX0xFTl9XU0FMVF0gPSB7CisgICAgMHhmZSwgMHhmZiwgMHhlOSwgMHg5MiwgMHg4NiwgMHg2NSwgMHg3MywgMHgxYywKKyAgICAweDZkLCAweDZhLCAweDhmLCAweDk0LCAweDY3LCAweDMwLCAweDgzLCAweDA4LAorICAgIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsCisgICAgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywKK307CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworLyogY2xhbmctZm9ybWF0IG9mZiAqLworc3RhdGljIHVpbnQ4X3Qgc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8wX2l2WzEyXSA9IHsKKyAgICAweGNhLCAweGZlLCAweGJhLCAweGJlLCAweGZhLCAweGNlLCAweGRiLCAweGFkLAorICAgIDB4ZGUsIDB4Y2EsIDB4ZjgsIDB4ODgKK307CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworLyogY2xhbmctZm9ybWF0IG9mZiAqLworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8wX3BsYWludGV4dFs2MF0gPSAgeworICAgIDB4ZDksIDB4MzEsIDB4MzIsIDB4MjUsIDB4ZjgsIDB4ODQsIDB4MDYsIDB4ZTUsCisgICAgMHhhNSwgMHg1OSwgMHgwOSwgMHhjNSwgMHhhZiwgMHhmNSwgMHgyNiwgMHg5YSwKKyAgICAweDg2LCAweGE3LCAweGE5LCAweDUzLCAweDE1LCAweDM0LCAweGY3LCAweGRhLAorICAgIDB4MmUsIDB4NGMsIDB4MzAsIDB4M2QsIDB4OGEsIDB4MzEsIDB4OGEsIDB4NzIsCisgICAgMHgxYywgMHgzYywgMHgwYywgMHg5NSwgMHg5NSwgMHg2OCwgMHgwOSwgMHg1MywKKyAgICAweDJmLCAweGNmLCAweDBlLCAweDI0LCAweDQ5LCAweGE2LCAweGI1LCAweDI1LAorICAgIDB4YjEsIDB4NmEsIDB4ZWQsIDB4ZjUsIDB4YWEsIDB4MGQsIDB4ZTYsIDB4NTcsCisgICAgMHhiYSwgMHg2MywgMHg3YiwgMHgzOQorfTsKKworLyogY2xhbmctZm9ybWF0IG9mZiAqLworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8wX2FhZFsyMF0gPSB7CisgICAgMHhmZSwgMHhlZCwgMHhmYSwgMHhjZSwgMHhkZSwgMHhhZCwgMHhiZSwgMHhlZiwKKyAgICAweGZlLCAweGVkLCAweGZhLCAweGNlLCAweGRlLCAweGFkLCAweGJlLCAweGVmLAorICAgIDB4YWIsIDB4YWQsIDB4ZGEsIDB4ZDIKK307CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworLyogY2xhbmctZm9ybWF0IG9mZiAqLworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8wX2NpcGhlcnRleHRbNzZdID0geworICAgIDB4NDIsIDB4ODMsIDB4MWUsIDB4YzIsIDB4MjEsIDB4NzcsIDB4NzQsIDB4MjQsCisgICAgMHg0YiwgMHg3MiwgMHgyMSwgMHhiNywgMHg4NCwgMHhkMCwgMHhkNCwgMHg5YywKKyAgICAweGUzLCAweGFhLCAweDIxLCAweDJmLCAweDJjLCAweDAyLCAweGE0LCAweGUwLAorICAgIDB4MzUsIDB4YzEsIDB4N2UsIDB4MjMsIDB4MjksIDB4YWMsIDB4YTEsIDB4MmUsCisgICAgMHgyMSwgMHhkNSwgMHgxNCwgMHhiMiwgMHg1NCwgMHg2NiwgMHg5MywgMHgxYywKKyAgICAweDdkLCAweDhmLCAweDZhLCAweDVhLCAweGFjLCAweDg0LCAweGFhLCAweDA1LAorICAgIDB4MWIsIDB4YTMsIDB4MGIsIDB4MzksIDB4NmEsIDB4MGEsIDB4YWMsIDB4OTcsCisgICAgMHgzZCwgMHg1OCwgMHhlMCwgMHg5MSwKKyAgICAvKiB0aGUgbGFzdCAxNiBieXRlcyBhcmUgdGhlIHRhZyAqLworICAgIDB4NWIsIDB4YzksIDB4NGYsIDB4YmMsIDB4MzIsIDB4MjEsIDB4YTUsIDB4ZGIsCisgICAgMHg5NCwgMHhmYSwgMHhlOSwgMHg1YSwgMHhlNywgMHgxMiwgMHgxYSwgMHg0NywKK307CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworc3RhdGljIGNvbnN0IHNydHBfY2lwaGVyX3Rlc3RfY2FzZV90IHNydHBfYWVzX2djbV90ZXN0X2Nhc2VfMGEgPSB7CisgICAgU1JUUF9BRVNfR0NNXzEyOF9LRVlfTEVOX1dTQUxULCAgICAgIC8qIG9jdGV0cyBpbiBrZXkgICAgICAgICAgICAqLworICAgIHNydHBfYWVzX2djbV90ZXN0X2Nhc2VfMF9rZXksICAgICAgICAvKiBrZXkgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBzcnRwX2Flc19nY21fdGVzdF9jYXNlXzBfaXYsICAgICAgICAgLyogcGFja2V0IGluZGV4ICAgICAgICAgICAgICovCisgICAgNjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9jdGV0cyBpbiBwbGFpbnRleHQgICAgICAqLworICAgIHNydHBfYWVzX2djbV90ZXN0X2Nhc2VfMF9wbGFpbnRleHQsICAvKiBwbGFpbnRleHQgICAgICAgICAgICAgICAgKi8KKyAgICA2OCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2N0ZXRzIGluIGNpcGhlcnRleHQgICAgICovCisgICAgc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8wX2NpcGhlcnRleHQsIC8qIGNpcGhlcnRleHQgICsgdGFnICAgICAgICAqLworICAgIDIwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvY3RldHMgaW4gQUFEICAgICAgICAgICAgKi8KKyAgICBzcnRwX2Flc19nY21fdGVzdF9jYXNlXzBfYWFkLCAgICAgICAgLyogQUFEICAgICAgICAgICAgICAgICAgICAgICovCisgICAgR0NNX0FVVEhfVEFHX0xFTl84LCAgICAgICAgICAgICAgICAgIC8qICovCisgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gbmV4dCB0ZXN0Y2FzZSAqLworfTsKKworc3RhdGljIGNvbnN0IHNydHBfY2lwaGVyX3Rlc3RfY2FzZV90IHNydHBfYWVzX2djbV90ZXN0X2Nhc2VfMCA9IHsKKyAgICBTUlRQX0FFU19HQ01fMTI4X0tFWV9MRU5fV1NBTFQsICAgICAgLyogb2N0ZXRzIGluIGtleSAgICAgICAgICAgICovCisgICAgc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8wX2tleSwgICAgICAgIC8qIGtleSAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHNydHBfYWVzX2djbV90ZXN0X2Nhc2VfMF9pdiwgICAgICAgICAvKiBwYWNrZXQgaW5kZXggICAgICAgICAgICAgKi8KKyAgICA2MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2N0ZXRzIGluIHBsYWludGV4dCAgICAgICovCisgICAgc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8wX3BsYWludGV4dCwgIC8qIHBsYWludGV4dCAgICAgICAgICAgICAgICAqLworICAgIDc2LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvY3RldHMgaW4gY2lwaGVydGV4dCAgICAgKi8KKyAgICBzcnRwX2Flc19nY21fdGVzdF9jYXNlXzBfY2lwaGVydGV4dCwgLyogY2lwaGVydGV4dCAgKyB0YWcgICAgICAgICovCisgICAgMjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9jdGV0cyBpbiBBQUQgICAgICAgICAgICAqLworICAgIHNydHBfYWVzX2djbV90ZXN0X2Nhc2VfMF9hYWQsICAgICAgICAvKiBBQUQgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBHQ01fQVVUSF9UQUdfTEVOLCAgICAgICAgICAgICAgICAgICAgLyogKi8KKyAgICAmc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8wYSAgICAgICAgICAgLyogcG9pbnRlciB0byBuZXh0IHRlc3RjYXNlICovCit9OworCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgY29uc3QgdWludDhfdCBzcnRwX2Flc19nY21fdGVzdF9jYXNlXzFfa2V5W1NSVFBfQUVTX0dDTV8yNTZfS0VZX0xFTl9XU0FMVF0gPSB7CisgICAgMHhmZSwgMHhmZiwgMHhlOSwgMHg5MiwgMHg4NiwgMHg2NSwgMHg3MywgMHgxYywKKyAgICAweGE1LCAweDU5LCAweDA5LCAweGM1LCAweDU0LCAweDY2LCAweDkzLCAweDFjLAorICAgIDB4YWYsIDB4ZjUsIDB4MjYsIDB4OWEsIDB4MjEsIDB4ZDUsIDB4MTQsIDB4YjIsCisgICAgMHg2ZCwgMHg2YSwgMHg4ZiwgMHg5NCwgMHg2NywgMHgzMCwgMHg4MywgMHgwOCwKKyAgICAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDA4LAorICAgIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsCit9OworLyogY2xhbmctZm9ybWF0IG9uICovCisKKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KK3N0YXRpYyB1aW50OF90IHNydHBfYWVzX2djbV90ZXN0X2Nhc2VfMV9pdlsxMl0gPSB7CisgICAgMHhjYSwgMHhmZSwgMHhiYSwgMHhiZSwgMHhmYSwgMHhjZSwgMHhkYiwgMHhhZCwKKyAgICAweGRlLCAweGNhLCAweGY4LCAweDg4Cit9OworLyogY2xhbmctZm9ybWF0IG9uICovCisKKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KK3N0YXRpYyBjb25zdCB1aW50OF90IHNydHBfYWVzX2djbV90ZXN0X2Nhc2VfMV9wbGFpbnRleHRbNjBdID0gIHsKKyAgICAweGQ5LCAweDMxLCAweDMyLCAweDI1LCAweGY4LCAweDg0LCAweDA2LCAweGU1LAorICAgIDB4YTUsIDB4NTksIDB4MDksIDB4YzUsIDB4YWYsIDB4ZjUsIDB4MjYsIDB4OWEsCisgICAgMHg4NiwgMHhhNywgMHhhOSwgMHg1MywgMHgxNSwgMHgzNCwgMHhmNywgMHhkYSwKKyAgICAweDJlLCAweDRjLCAweDMwLCAweDNkLCAweDhhLCAweDMxLCAweDhhLCAweDcyLAorICAgIDB4MWMsIDB4M2MsIDB4MGMsIDB4OTUsIDB4OTUsIDB4NjgsIDB4MDksIDB4NTMsCisgICAgMHgyZiwgMHhjZiwgMHgwZSwgMHgyNCwgMHg0OSwgMHhhNiwgMHhiNSwgMHgyNSwKKyAgICAweGIxLCAweDZhLCAweGVkLCAweGY1LCAweGFhLCAweDBkLCAweGU2LCAweDU3LAorICAgIDB4YmEsIDB4NjMsIDB4N2IsIDB4MzkKK307CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworLyogY2xhbmctZm9ybWF0IG9mZiAqLworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8xX2FhZFsyMF0gPSB7CisgICAgMHhmZSwgMHhlZCwgMHhmYSwgMHhjZSwgMHhkZSwgMHhhZCwgMHhiZSwgMHhlZiwKKyAgICAweGZlLCAweGVkLCAweGZhLCAweGNlLCAweGRlLCAweGFkLCAweGJlLCAweGVmLAorICAgIDB4YWIsIDB4YWQsIDB4ZGEsIDB4ZDIKK307CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworLyogY2xhbmctZm9ybWF0IG9mZiAqLworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8xX2NpcGhlcnRleHRbNzZdID0geworICAgIDB4MGIsIDB4MTEsIDB4Y2YsIDB4YWYsIDB4NjgsIDB4NGQsIDB4YWUsIDB4NDYsCisgICAgMHhjNywgMHg5MCwgMHhiOCwgMHg4ZSwgMHhiNywgMHg2YSwgMHg3NiwgMHgyYSwKKyAgICAweDk0LCAweDgyLCAweGNhLCAweGFiLCAweDNlLCAweDM5LCAweGQ3LCAweDg2LAorICAgIDB4MWIsIDB4YzcsIDB4OTMsIDB4ZWQsIDB4NzUsIDB4N2YsIDB4MjMsIDB4NWEsCisgICAgMHhkYSwgMHhmZCwgMHhkMywgMHhlMiwgMHgwZSwgMHg4MCwgMHg4NywgMHhhOSwKKyAgICAweDZkLCAweGQ3LCAweGUyLCAweDZhLCAweDdkLCAweDVmLCAweGI0LCAweDgwLAorICAgIDB4ZWYsIDB4ZWYsIDB4YzUsIDB4MjksIDB4MTIsIDB4ZDEsIDB4YWEsIDB4MTAsCisgICAgMHgwOSwgMHhjOSwgMHg4NiwgMHhjMSwKKyAgICAvKiB0aGUgbGFzdCAxNiBieXRlcyBhcmUgdGhlIHRhZyAqLworICAgIDB4NDUsIDB4YmMsIDB4MDMsIDB4ZTYsIDB4ZTEsIDB4YWMsIDB4MGEsIDB4OWYsCisgICAgMHg4MSwgMHhjYiwgMHg4ZSwgMHg1YiwgMHg0NiwgMHg2NSwgMHg2MywgMHgxZCwKK307CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworc3RhdGljIGNvbnN0IHNydHBfY2lwaGVyX3Rlc3RfY2FzZV90IHNydHBfYWVzX2djbV90ZXN0X2Nhc2VfMWEgPSB7CisgICAgU1JUUF9BRVNfR0NNXzI1Nl9LRVlfTEVOX1dTQUxULCAgICAgIC8qIG9jdGV0cyBpbiBrZXkgICAgICAgICAgICAqLworICAgIHNydHBfYWVzX2djbV90ZXN0X2Nhc2VfMV9rZXksICAgICAgICAvKiBrZXkgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBzcnRwX2Flc19nY21fdGVzdF9jYXNlXzFfaXYsICAgICAgICAgLyogcGFja2V0IGluZGV4ICAgICAgICAgICAgICovCisgICAgNjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9jdGV0cyBpbiBwbGFpbnRleHQgICAgICAqLworICAgIHNydHBfYWVzX2djbV90ZXN0X2Nhc2VfMV9wbGFpbnRleHQsICAvKiBwbGFpbnRleHQgICAgICAgICAgICAgICAgKi8KKyAgICA2OCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2N0ZXRzIGluIGNpcGhlcnRleHQgICAgICovCisgICAgc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8xX2NpcGhlcnRleHQsIC8qIGNpcGhlcnRleHQgICsgdGFnICAgICAgICAqLworICAgIDIwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvY3RldHMgaW4gQUFEICAgICAgICAgICAgKi8KKyAgICBzcnRwX2Flc19nY21fdGVzdF9jYXNlXzFfYWFkLCAgICAgICAgLyogQUFEICAgICAgICAgICAgICAgICAgICAgICovCisgICAgR0NNX0FVVEhfVEFHX0xFTl84LCAgICAgICAgICAgICAgICAgIC8qICovCisgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gbmV4dCB0ZXN0Y2FzZSAqLworfTsKKworc3RhdGljIGNvbnN0IHNydHBfY2lwaGVyX3Rlc3RfY2FzZV90IHNydHBfYWVzX2djbV90ZXN0X2Nhc2VfMSA9IHsKKyAgICBTUlRQX0FFU19HQ01fMjU2X0tFWV9MRU5fV1NBTFQsICAgICAgLyogb2N0ZXRzIGluIGtleSAgICAgICAgICAgICovCisgICAgc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8xX2tleSwgICAgICAgIC8qIGtleSAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHNydHBfYWVzX2djbV90ZXN0X2Nhc2VfMV9pdiwgICAgICAgICAvKiBwYWNrZXQgaW5kZXggICAgICAgICAgICAgKi8KKyAgICA2MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2N0ZXRzIGluIHBsYWludGV4dCAgICAgICovCisgICAgc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8xX3BsYWludGV4dCwgIC8qIHBsYWludGV4dCAgICAgICAgICAgICAgICAqLworICAgIDc2LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvY3RldHMgaW4gY2lwaGVydGV4dCAgICAgKi8KKyAgICBzcnRwX2Flc19nY21fdGVzdF9jYXNlXzFfY2lwaGVydGV4dCwgLyogY2lwaGVydGV4dCAgKyB0YWcgICAgICAgICovCisgICAgMjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9jdGV0cyBpbiBBQUQgICAgICAgICAgICAqLworICAgIHNydHBfYWVzX2djbV90ZXN0X2Nhc2VfMV9hYWQsICAgICAgICAvKiBBQUQgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBHQ01fQVVUSF9UQUdfTEVOLCAgICAgICAgICAgICAgICAgICAgLyogKi8KKyAgICAmc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8xYSAgICAgICAgICAgLyogcG9pbnRlciB0byBuZXh0IHRlc3RjYXNlICovCit9OworCisvKgorICogVGhpcyBpcyB0aGUgdmVjdG9yIGZ1bmN0aW9uIHRhYmxlIGZvciB0aGlzIGNyeXB0byBlbmdpbmUuCisgKi8KK2NvbnN0IHNydHBfY2lwaGVyX3R5cGVfdCBzcnRwX2Flc19nY21fMTI4ID0geworICAgIHNydHBfYWVzX2djbV9vcGVuc3NsX2FsbG9jLAorICAgIHNydHBfYWVzX2djbV9vcGVuc3NsX2RlYWxsb2MsCisgICAgc3J0cF9hZXNfZ2NtX29wZW5zc2xfY29udGV4dF9pbml0LAorICAgIHNydHBfYWVzX2djbV9vcGVuc3NsX3NldF9hYWQsCisgICAgc3J0cF9hZXNfZ2NtX29wZW5zc2xfZW5jcnlwdCwKKyAgICBzcnRwX2Flc19nY21fb3BlbnNzbF9kZWNyeXB0LAorICAgIHNydHBfYWVzX2djbV9vcGVuc3NsX3NldF9pdiwKKyAgICBzcnRwX2Flc19nY21fb3BlbnNzbF9nZXRfdGFnLAorICAgIHNydHBfYWVzX2djbV8xMjhfb3BlbnNzbF9kZXNjcmlwdGlvbiwKKyAgICAmc3J0cF9hZXNfZ2NtX3Rlc3RfY2FzZV8wLAorICAgIFNSVFBfQUVTX0dDTV8xMjgKK307CisKKy8qCisgKiBUaGlzIGlzIHRoZSB2ZWN0b3IgZnVuY3Rpb24gdGFibGUgZm9yIHRoaXMgY3J5cHRvIGVuZ2luZS4KKyAqLworY29uc3Qgc3J0cF9jaXBoZXJfdHlwZV90IHNydHBfYWVzX2djbV8yNTYgPSB7CisgICAgc3J0cF9hZXNfZ2NtX29wZW5zc2xfYWxsb2MsCisgICAgc3J0cF9hZXNfZ2NtX29wZW5zc2xfZGVhbGxvYywKKyAgICBzcnRwX2Flc19nY21fb3BlbnNzbF9jb250ZXh0X2luaXQsCisgICAgc3J0cF9hZXNfZ2NtX29wZW5zc2xfc2V0X2FhZCwKKyAgICBzcnRwX2Flc19nY21fb3BlbnNzbF9lbmNyeXB0LAorICAgIHNydHBfYWVzX2djbV9vcGVuc3NsX2RlY3J5cHQsCisgICAgc3J0cF9hZXNfZ2NtX29wZW5zc2xfc2V0X2l2LAorICAgIHNydHBfYWVzX2djbV9vcGVuc3NsX2dldF90YWcsCisgICAgc3J0cF9hZXNfZ2NtXzI1Nl9vcGVuc3NsX2Rlc2NyaXB0aW9uLAorICAgICZzcnRwX2Flc19nY21fdGVzdF9jYXNlXzEsCisgICAgU1JUUF9BRVNfR0NNXzI1NgorfTsKZGlmZiAtLWdpdCBhL2NyeXB0by9jaXBoZXIvYWVzX2ljbS5jIGIvY3J5cHRvL2NpcGhlci9hZXNfaWNtLmMKaW5kZXggM2NkZWY0MC4uNzU1MWM3NSAxMDA2NDQKLS0tIGEvY3J5cHRvL2NpcGhlci9hZXNfaWNtLmMKKysrIGIvY3J5cHRvL2NpcGhlci9hZXNfaWNtLmMKQEAgLTgsMjYgKzgsMjYgQEAKICAqLwogCiAvKgotICoJCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSwgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDE3IENpc2NvIFN5c3RlbXMsIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogCisgKgogICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCiAgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCiAgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAogICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKKyAqCiAgKiAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAgKiAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAorICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwpAQCAtNDMsMTUgKzQzLDE5IEBACiAgKgogICovCiAKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKIAogI2RlZmluZSBBTElHTl8zMiAwCiAKICNpbmNsdWRlICJhZXNfaWNtLmgiCiAjaW5jbHVkZSAiYWxsb2MuaCIKKyNpbmNsdWRlICJjaXBoZXJfdHlwZXMuaCIKIAotZGVidWdfbW9kdWxlX3QgbW9kX2Flc19pY20gPSB7Ci0gIDAsICAgICAgICAgICAgICAgICAvKiBkZWJ1Z2dpbmcgaXMgb2ZmIGJ5IGRlZmF1bHQgKi8KLSAgImFlcyBpY20iICAgICAgICAgIC8qIHByaW50YWJsZSBtb2R1bGUgbmFtZSAgICAgICAqLworc3J0cF9kZWJ1Z19tb2R1bGVfdCBzcnRwX21vZF9hZXNfaWNtID0geworICAgIDAsICAgICAgICAvKiBkZWJ1Z2dpbmcgaXMgb2ZmIGJ5IGRlZmF1bHQgKi8KKyAgICAiYWVzIGljbSIgLyogcHJpbnRhYmxlIG1vZHVsZSBuYW1lICAgICAgICovCiB9OwogCiAvKgpAQCAtNTksNyArNjMsNyBAQAogICoKICAqIDE2IGJpdHMKICAqIDwtLS0tLT4KLSAqICstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKyAKKyAqICstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKwogICogfCAgICAgICAgICAgbm9uY2UgICAgICAgICAgIHwgICAgcGFrY2V0IGluZGV4ICAgIHwgIGN0ciB8LS0tKwogICogKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rICAgfAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfApAQCAtNzAsMTYgKzc0LDE2IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSsKICAqCQkJCQkJCSAgfCBlbmNyeXB0IHwKICAqCQkJCQkJCSAgKy0tLS0tLS0tLSsKLSAqCQkJCQkJCSAgICAgICB8IAorICoJCQkJCQkJICAgICAgIHwKICAqICstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKyAgIHwKLSAqIHwgICAgICAgICAgICAgICAgICAgIGtleXN0cmVhbSBibG9jayAgICAgICAgICAgICAgICAgICAgfDwtLSsgCi0gKiArLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSsgICAKKyAqIHwgICAgICAgICAgICAgICAgICAgIGtleXN0cmVhbSBibG9jayAgICAgICAgICAgICAgICAgICAgfDwtLSsKKyAqICstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKwogICoKICAqIEFsbCBmaWVsZHMgYXJlIGJpZy1lbmRpYW4KICAqCiAgKiBjdHIgaXMgdGhlIGJsb2NrIGNvdW50ZXIsIHdoaWNoIGluY3JlbWVudHMgZnJvbSB6ZXJvIGZvcgogICogZWFjaCBwYWNrZXQgKDE2IGJpdHMgd2lkZSkKLSAqIAorICoKICAqIHBhY2tldCBpbmRleCBpcyBkaXN0aW5jdCBmb3IgZWFjaCBwYWNrZXQgKDQ4IGJpdHMgd2lkZSkKICAqCiAgKiBub25jZSBjYW4gYmUgZGlzdGluY3QgYWNyb3NzIG1hbnkgdXNlcyBvZiB0aGUgc2FtZSBrZXksIG9yCkBAIC04OCwxNDggKzkyLDEzOCBAQAogICoKICAqLwogCi1lcnJfc3RhdHVzX3QKLWFlc19pY21fYWxsb2MoY2lwaGVyX3QgKipjLCBpbnQga2V5X2xlbikgewotICBleHRlcm4gY2lwaGVyX3R5cGVfdCBhZXNfaWNtOwotICB1aW50OF90ICpwb2ludGVyOwotICBpbnQgdG1wOworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IHNydHBfYWVzX2ljbV9hbGxvYyhzcnRwX2NpcGhlcl90ICoqYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtleV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0bGVuKQoreworICAgIHNydHBfYWVzX2ljbV9jdHhfdCAqaWNtOwogCi0gIGRlYnVnX3ByaW50KG1vZF9hZXNfaWNtLCAKLQkgICAgICAiYWxsb2NhdGluZyBjaXBoZXIgd2l0aCBrZXkgbGVuZ3RoICVkIiwga2V5X2xlbik7CisgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfYWVzX2ljbSwgImFsbG9jYXRpbmcgY2lwaGVyIHdpdGgga2V5IGxlbmd0aCAlZCIsCisgICAgICAgICAgICAgICAga2V5X2xlbik7CiAKLSNpZiBHRU5FUklDX0FFU0lDTQotICAvLyBJc21hY3J5cCwgZm9yIGV4YW1wbGUsIHVzZXMgMTYgYnl0ZSBrZXkgKyA4IGJ5dGUgCi0gIC8vIHNhbHQgIHNvIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGgga2V5X2xlbiA9IDI0LgotICAvLyBUaGUgY2hlY2sgZm9yIGtleV9sZW4gPSAzMCBkb2VzIG5vdCBhcHBseS4gT3VyIHVzYWdlCi0gIC8vIG9mIGFlcyBmdW5jdGlvbnMgd2l0aCBrZXlfbGVuID0gdmFsdWVzIG90aGVyIHRoYW4gMzAKLSAgLy8gaGFzIG5vdCBicm9rZW4gYW55dGhpbmcuIERvbid0IGtub3cgd2hhdCB3b3VsZCBiZSB0aGUKLSAgLy8gZWZmZWN0IG9mIHNraXBwaW5nIHRoaXMgY2hlY2sgZm9yIHNydHAgaW4gZ2VuZXJhbC4KLSNlbHNlCi0gIGlmIChrZXlfbGVuICE9IDMwKQotICAgIHJldHVybiBlcnJfc3RhdHVzX2JhZF9wYXJhbTsKLSNlbmRpZgotICAvKiBhbGxvY2F0ZSBtZW1vcnkgYSBjaXBoZXIgb2YgdHlwZSBhZXNfaWNtICovCi0gIHRtcCA9IChzaXplb2YoYWVzX2ljbV9jdHhfdCkgKyBzaXplb2YoY2lwaGVyX3QpKTsKLSAgcG9pbnRlciA9IGNyeXB0b19hbGxvYyh0bXApOwotICBpZiAocG9pbnRlciA9PSBOVUxMKSAKLSAgICByZXR1cm4gZXJyX3N0YXR1c19hbGxvY19mYWlsOworICAgIC8qCisgICAgICogVGhlIGNoZWNrIGZvciBrZXlfbGVuID0gMzAvNDYgZG9lcyBub3QgYXBwbHkuIE91ciB1c2FnZQorICAgICAqIG9mIGFlcyBmdW5jdGlvbnMgd2l0aCBrZXlfbGVuID0gdmFsdWVzIG90aGVyIHRoYW4gMzAKKyAgICAgKiBoYXMgbm90IGJyb2tlbiBhbnl0aGluZy4gRG9uJ3Qga25vdyB3aGF0IHdvdWxkIGJlIHRoZQorICAgICAqIGVmZmVjdCBvZiBza2lwcGluZyB0aGlzIGNoZWNrIGZvciBzcnRwIGluIGdlbmVyYWwuCisgICAgICovCisgICAgaWYgKGtleV9sZW4gIT0gU1JUUF9BRVNfSUNNXzEyOF9LRVlfTEVOX1dTQUxUICYmCisgICAgICAgIGtleV9sZW4gIT0gU1JUUF9BRVNfSUNNXzI1Nl9LRVlfTEVOX1dTQUxUKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYmFkX3BhcmFtOworICAgIH0KIAotICAvKiBzZXQgcG9pbnRlcnMgKi8KLSAgKmMgPSAoY2lwaGVyX3QgKilwb2ludGVyOwotICAoKmMpLT50eXBlID0gJmFlc19pY207Ci0gICgqYyktPnN0YXRlID0gcG9pbnRlciArIHNpemVvZihjaXBoZXJfdCk7CisgICAgLyogYWxsb2NhdGUgbWVtb3J5IGEgY2lwaGVyIG9mIHR5cGUgYWVzX2ljbSAqLworICAgICpjID0gKHNydHBfY2lwaGVyX3QgKilzcnRwX2NyeXB0b19hbGxvYyhzaXplb2Yoc3J0cF9jaXBoZXJfdCkpOworICAgIGlmICgqYyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYWxsb2NfZmFpbDsKKyAgICB9CiAKLSAgLyogaW5jcmVtZW50IHJlZl9jb3VudCAqLwotICBhZXNfaWNtLnJlZl9jb3VudCsrOworICAgIGljbSA9IChzcnRwX2Flc19pY21fY3R4X3QgKilzcnRwX2NyeXB0b19hbGxvYyhzaXplb2Yoc3J0cF9hZXNfaWNtX2N0eF90KSk7CisgICAgaWYgKGljbSA9PSBOVUxMKSB7CisgICAgICAgIHNydHBfY3J5cHRvX2ZyZWUoKmMpOworICAgICAgICAqYyA9IE5VTEw7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYWxsb2NfZmFpbDsKKyAgICB9CiAKLSAgLyogc2V0IGtleSBzaXplICAgICAgICAqLwotICAoKmMpLT5rZXlfbGVuID0ga2V5X2xlbjsKKyAgICAvKiBzZXQgcG9pbnRlcnMgKi8KKyAgICAoKmMpLT5zdGF0ZSA9IGljbTsKIAotICByZXR1cm4gZXJyX3N0YXR1c19vazsgIAorICAgIHN3aXRjaCAoa2V5X2xlbikgeworICAgIGNhc2UgU1JUUF9BRVNfSUNNXzI1Nl9LRVlfTEVOX1dTQUxUOgorICAgICAgICAoKmMpLT5hbGdvcml0aG0gPSBTUlRQX0FFU19JQ01fMjU2OworICAgICAgICAoKmMpLT50eXBlID0gJnNydHBfYWVzX2ljbV8yNTY7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgICgqYyktPmFsZ29yaXRobSA9IFNSVFBfQUVTX0lDTV8xMjg7CisgICAgICAgICgqYyktPnR5cGUgPSAmc3J0cF9hZXNfaWNtXzEyODsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLyogc2V0IGtleSBzaXplICAgICAgICAqLworICAgIGljbS0+a2V5X3NpemUgPSBrZXlfbGVuOworICAgICgqYyktPmtleV9sZW4gPSBrZXlfbGVuOworCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKIH0KIAotZXJyX3N0YXR1c190Ci1hZXNfaWNtX2RlYWxsb2MoY2lwaGVyX3QgKmMpIHsKLSAgZXh0ZXJuIGNpcGhlcl90eXBlX3QgYWVzX2ljbTsKK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2Flc19pY21fZGVhbGxvYyhzcnRwX2NpcGhlcl90ICpjKQoreworICAgIHNydHBfYWVzX2ljbV9jdHhfdCAqY3R4OwogCi0gIC8qIHplcm9pemUgZW50aXJlIHN0YXRlKi8KLSAgb2N0ZXRfc3RyaW5nX3NldF90b196ZXJvKChvY3RldF90ICopYywgCi0JCQkgICBzaXplb2YoYWVzX2ljbV9jdHhfdCkgKyBzaXplb2YoY2lwaGVyX3QpKTsKKyAgICBpZiAoYyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYmFkX3BhcmFtOworICAgIH0KIAotICAvKiBmcmVlIG1lbW9yeSAqLwotICBjcnlwdG9fZnJlZShjKTsKKyAgICBjdHggPSAoc3J0cF9hZXNfaWNtX2N0eF90ICopYy0+c3RhdGU7CisgICAgaWYgKGN0eCkgeworICAgICAgICAvKiB6ZXJvaXplIHRoZSBrZXkgbWF0ZXJpYWwgKi8KKyAgICAgICAgb2N0ZXRfc3RyaW5nX3NldF90b196ZXJvKGN0eCwgc2l6ZW9mKHNydHBfYWVzX2ljbV9jdHhfdCkpOworICAgICAgICBzcnRwX2NyeXB0b19mcmVlKGN0eCk7CisgICAgfQogCi0gIC8qIGRlY3JlbWVudCByZWZfY291bnQgKi8KLSAgYWVzX2ljbS5yZWZfY291bnQtLTsKLSAgCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOyAgCisgICAgLyogZnJlZSB0aGUgY2lwaGVyIGNvbnRleHQgKi8KKyAgICBzcnRwX2NyeXB0b19mcmVlKGMpOworCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKIH0KIAotCiAvKgogICogYWVzX2ljbV9jb250ZXh0X2luaXQoLi4uKSBpbml0aWFsaXplcyB0aGUgYWVzX2ljbV9jb250ZXh0CiAgKiB1c2luZyB0aGUgdmFsdWUgaW4ga2V5W10uCiAgKgotICogdGhlIGtleSBpcyB0aGUgc2VjcmV0IGtleSAKKyAqIHRoZSBrZXkgaXMgdGhlIHNlY3JldCBrZXkKICAqCiAgKiB0aGUgc2FsdCBpcyB1bnByZWRpY3RhYmxlIChidXQgbm90IG5lY2Vzc2FyaWx5IHNlY3JldCkgZGF0YSB3aGljaAogICogcmFuZG9taXplcyB0aGUgc3RhcnRpbmcgcG9pbnQgaW4gdGhlIGtleXN0cmVhbQogICovCiAKLWVycl9zdGF0dXNfdAotYWVzX2ljbV9jb250ZXh0X2luaXQoYWVzX2ljbV9jdHhfdCAqYywgY29uc3Qgb2N0ZXRfdCAqa2V5KSB7Ci0gIHYxMjhfdCB0bXBfa2V5Oworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IHNydHBfYWVzX2ljbV9jb250ZXh0X2luaXQodm9pZCAqY3YsIGNvbnN0IHVpbnQ4X3QgKmtleSkKK3sKKyAgICBzcnRwX2Flc19pY21fY3R4X3QgKmMgPSAoc3J0cF9hZXNfaWNtX2N0eF90ICopY3Y7CisgICAgc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdHVzOworICAgIGludCBiYXNlX2tleV9sZW4sIGNvcHlfbGVuOwogCi0gIC8qIHNldCBjb3VudGVyIGFuZCBpbml0aWFsIHZhbHVlcyB0byAnb2Zmc2V0JyB2YWx1ZSAqLwotICAvKiBGSVghISEgdGhpcyBhc3N1bWVzIHRoZSBzYWx0IGlzIGF0IGtleSArIDE2LCBhbmQgdGh1cyB0aGF0IHRoZSAqLwotICAvKiBGSVghISEgY2lwaGVyIGtleSBsZW5ndGggaXMgMTYhICBBbHNvIG5vdGUgdGhpcyBjb3BpZXMgcGFzdCB0aGUKLSAgICAgICAgICAgIGVuZCBvZiB0aGUgJ2tleScgYXJyYXkgYnkgMiBieXRlcyEgKi8KLSAgdjEyOF9jb3B5X29jdGV0X3N0cmluZygmYy0+Y291bnRlciwga2V5ICsgMTYpOwotICB2MTI4X2NvcHlfb2N0ZXRfc3RyaW5nKCZjLT5vZmZzZXQsIGtleSArIDE2KTsKKyAgICBpZiAoYy0+a2V5X3NpemUgPT0gU1JUUF9BRVNfSUNNXzEyOF9LRVlfTEVOX1dTQUxUIHx8CisgICAgICAgIGMtPmtleV9zaXplID09IFNSVFBfQUVTX0lDTV8yNTZfS0VZX0xFTl9XU0FMVCkgeworICAgICAgICBiYXNlX2tleV9sZW4gPSBjLT5rZXlfc2l6ZSAtIFNSVFBfU0FMVF9MRU47CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisgICAgfQogCi0gIC8qIGZvcmNlIGxhc3QgdHdvIG9jdGV0cyBvZiB0aGUgb2Zmc2V0IHRvIHplcm8gKGZvciBzcnRwIGNvbXBhdGliaWxpdHkpICovCi0gIGMtPm9mZnNldC5vY3RldFsxNF0gPSBjLT5vZmZzZXQub2N0ZXRbMTVdID0gMDsKLSAgYy0+Y291bnRlci5vY3RldFsxNF0gPSBjLT5jb3VudGVyLm9jdGV0WzE1XSA9IDA7Ci0gIAotICAvKiBzZXQgdG1wX2tleSAoZm9yIGFsaWdubWVudCkgKi8KLSAgdjEyOF9jb3B5X29jdGV0X3N0cmluZygmdG1wX2tleSwga2V5KTsKKyAgICAvKgorICAgICAqIHNldCBjb3VudGVyIGFuZCBpbml0aWFsIHZhbHVlcyB0byAnb2Zmc2V0JyB2YWx1ZSwgYmVpbmcgY2FyZWZ1bCBub3QgdG8KKyAgICAgKiBnbyBwYXN0IHRoZSBlbmQgb2YgdGhlIGtleSBidWZmZXIKKyAgICAgKi8KKyAgICB2MTI4X3NldF90b196ZXJvKCZjLT5jb3VudGVyKTsKKyAgICB2MTI4X3NldF90b196ZXJvKCZjLT5vZmZzZXQpOwogCi0gIGRlYnVnX3ByaW50KG1vZF9hZXNfaWNtLCAKLQkgICAgICAia2V5OiAgJXMiLCB2MTI4X2hleF9zdHJpbmcoJnRtcF9rZXkpKTsgCi0gIGRlYnVnX3ByaW50KG1vZF9hZXNfaWNtLCAKLQkgICAgICAib2Zmc2V0OiAlcyIsIHYxMjhfaGV4X3N0cmluZygmYy0+b2Zmc2V0KSk7IAorICAgIGNvcHlfbGVuID0gYy0+a2V5X3NpemUgLSBiYXNlX2tleV9sZW47CisgICAgLyogZm9yY2UgbGFzdCB0d28gb2N0ZXRzIG9mIHRoZSBvZmZzZXQgdG8gYmUgbGVmdCB6ZXJvIChmb3Igc3J0cAorICAgICAqIGNvbXBhdGliaWxpdHkpICovCisgICAgaWYgKGNvcHlfbGVuID4gU1JUUF9TQUxUX0xFTikgeworICAgICAgICBjb3B5X2xlbiA9IFNSVFBfU0FMVF9MRU47CisgICAgfQogCi0gIC8qIGV4cGFuZCBrZXkgKi8KLSAgYWVzX2V4cGFuZF9lbmNyeXB0aW9uX2tleSh0bXBfa2V5LCBjLT5leHBhbmRlZF9rZXkpOworICAgIG1lbWNweSgmYy0+Y291bnRlciwga2V5ICsgYmFzZV9rZXlfbGVuLCBjb3B5X2xlbik7CisgICAgbWVtY3B5KCZjLT5vZmZzZXQsIGtleSArIGJhc2Vfa2V5X2xlbiwgY29weV9sZW4pOwogCi0gIC8qIGluZGljYXRlIHRoYXQgdGhlIGtleXN0cmVhbV9idWZmZXIgaXMgZW1wdHkgKi8KLSAgYy0+Ynl0ZXNfaW5fYnVmZmVyID0gMDsKKyAgICBkZWJ1Z19wcmludChzcnRwX21vZF9hZXNfaWNtLCAia2V5OiAgJXMiLAorICAgICAgICAgICAgICAgIHNydHBfb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoa2V5LCBiYXNlX2tleV9sZW4pKTsKKyAgICBkZWJ1Z19wcmludChzcnRwX21vZF9hZXNfaWNtLCAib2Zmc2V0OiAlcyIsIHYxMjhfaGV4X3N0cmluZygmYy0+b2Zmc2V0KSk7CiAKLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7Ci19CisgICAgLyogZXhwYW5kIGtleSAqLworICAgIHN0YXR1cyA9CisgICAgICAgIHNydHBfYWVzX2V4cGFuZF9lbmNyeXB0aW9uX2tleShrZXksIGJhc2Vfa2V5X2xlbiwgJmMtPmV4cGFuZGVkX2tleSk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICB2MTI4X3NldF90b196ZXJvKCZjLT5jb3VudGVyKTsKKyAgICAgICAgdjEyOF9zZXRfdG9femVybygmYy0+b2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CiAKLS8qCi0gKiBhZXNfaWNtX3NldF9vY3RldChjLCBpKSBzZXRzIHRoZSBjb3VudGVyIG9mIHRoZSBjb250ZXh0IHdoaWNoIGl0IGlzCi0gKiBwYXNzZWQgc28gdGhhdCB0aGUgbmV4dCBvY3RldCBvZiBrZXlzdHJlYW0gdGhhdCB3aWxsIGJlIGdlbmVyYXRlZAotICogaXMgdGhlIGl0aCBvY3RldAotICovCi0KLWVycl9zdGF0dXNfdAotYWVzX2ljbV9zZXRfb2N0ZXQoYWVzX2ljbV9jdHhfdCAqYywKLQkJICB1aW50NjRfdCBvY3RldF9udW0pIHsKLQotICBpbnQgdGFpbF9udW0gICAgICAgPSBvY3RldF9udW0gJSAxNjsKLSAgdWludDY0X3QgYmxvY2tfbnVtID0gb2N0ZXRfbnVtIC8gMTY7Ci0gIAotCi0gIC8qIHNldCBjb3VudGVyIHZhbHVlICovCi0gIGMtPmNvdW50ZXIudjY0WzBdID0gYy0+b2Zmc2V0LnY2NFswXTsKLSAgYy0+Y291bnRlci52NjRbMF0gPSBjLT5vZmZzZXQudjY0WzBdIF4gYmxvY2tfbnVtOwotCi0gIGRlYnVnX3ByaW50KG1vZF9hZXNfaWNtLCAKLQkgICAgICAic2V0X29jdGV0OiAlcyIsIHYxMjhfaGV4X3N0cmluZygmYy0+Y291bnRlcikpOyAKLQotICAvKiBmaWxsIGtleXN0cmVhbSBidWZmZXIsIGlmIG5lZWRlZCAqLwotICBpZiAodGFpbF9udW0pIHsKLSAgICB2MTI4X2NvcHkoJmMtPmtleXN0cmVhbV9idWZmZXIsICZjLT5jb3VudGVyKTsKLSAgICBhZXNfZW5jcnlwdCgmYy0+a2V5c3RyZWFtX2J1ZmZlciwgYy0+ZXhwYW5kZWRfa2V5KTsKLSAgICBjLT5ieXRlc19pbl9idWZmZXIgPSAxNjsKLQotICAgIGRlYnVnX3ByaW50KG1vZF9hZXNfaWNtLCAiY291bnRlcjogICAgJXMiLCAKLQkgICAgICB2MTI4X2hleF9zdHJpbmcoJmMtPmNvdW50ZXIpKTsKLSAgICBkZWJ1Z19wcmludChtb2RfYWVzX2ljbSwgImNpcGhlcnRleHQ6ICVzIiwgCi0JICAgICAgdjEyOF9oZXhfc3RyaW5nKCZjLT5rZXlzdHJlYW1fYnVmZmVyKSk7ICAgIAotICAgIAotICAgIC8qICBpbmRpY2F0ZSBudW1iZXIgb2YgYnl0ZXMgaW4ga2V5c3RyZWFtX2J1ZmZlciAgKi8KLSAgICBjLT5ieXRlc19pbl9idWZmZXIgPSAxNiAtIHRhaWxfbnVtOwotICAKLSAgfSBlbHNlIHsKLSAgICAKLSAgICAvKiBpbmRpY2F0ZSB0aGF0IGtleXN0cmVhbV9idWZmZXIgaXMgZW1wdHkgKi8KKyAgICAvKiBpbmRpY2F0ZSB0aGF0IHRoZSBrZXlzdHJlYW1fYnVmZmVyIGlzIGVtcHR5ICovCiAgICAgYy0+Ynl0ZXNfaW5fYnVmZmVyID0gMDsKLSAgfQogCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7CiB9CiAKIC8qCkBAIC0yMzcsNjAgKzIzMSw1MSBAQAogICogdGhlIG9mZnNldAogICovCiAKLWVycl9zdGF0dXNfdAotYWVzX2ljbV9zZXRfaXYoYWVzX2ljbV9jdHhfdCAqYywgdm9pZCAqaXYpIHsKLSAgdjEyOF90ICpub25jZSA9IGl2Oworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IHNydHBfYWVzX2ljbV9zZXRfaXYodm9pZCAqY3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfY2lwaGVyX2RpcmVjdGlvbl90IGRpcmVjdGlvbikKK3sKKyAgICBzcnRwX2Flc19pY21fY3R4X3QgKmMgPSAoc3J0cF9hZXNfaWNtX2N0eF90ICopY3Y7CisgICAgdjEyOF90IG5vbmNlOwogCi0gIGRlYnVnX3ByaW50KG1vZF9hZXNfaWNtLCAKLQkgICAgICAic2V0dGluZyBpdjogJXMiLCB2MTI4X2hleF9zdHJpbmcobm9uY2UpKTsgCi0gCi0gIHYxMjhfeG9yKCZjLT5jb3VudGVyLCAmYy0+b2Zmc2V0LCBub25jZSk7Ci0gIAotICBkZWJ1Z19wcmludChtb2RfYWVzX2ljbSwgCi0JICAgICAgInNldF9jb3VudGVyOiAlcyIsIHYxMjhfaGV4X3N0cmluZygmYy0+Y291bnRlcikpOyAKKyAgICAvKiBzZXQgbm9uY2UgKGZvciBhbGlnbm1lbnQpICovCisgICAgdjEyOF9jb3B5X29jdGV0X3N0cmluZygmbm9uY2UsIGl2KTsKIAotICAvKiBpbmRpY2F0ZSB0aGF0IHRoZSBrZXlzdHJlYW1fYnVmZmVyIGlzIGVtcHR5ICovCi0gIGMtPmJ5dGVzX2luX2J1ZmZlciA9IDA7CisgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfYWVzX2ljbSwgInNldHRpbmcgaXY6ICVzIiwgdjEyOF9oZXhfc3RyaW5nKCZub25jZSkpOwogCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOworICAgIHYxMjhfeG9yKCZjLT5jb3VudGVyLCAmYy0+b2Zmc2V0LCAmbm9uY2UpOworCisgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfYWVzX2ljbSwgInNldF9jb3VudGVyOiAlcyIsCisgICAgICAgICAgICAgICAgdjEyOF9oZXhfc3RyaW5nKCZjLT5jb3VudGVyKSk7CisKKyAgICAvKiBpbmRpY2F0ZSB0aGF0IHRoZSBrZXlzdHJlYW1fYnVmZmVyIGlzIGVtcHR5ICovCisgICAgYy0+Ynl0ZXNfaW5fYnVmZmVyID0gMDsKKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7CiB9CiAKLQotCiAvKgogICogYWVzX2ljbV9hZHZhbmNlKC4uLikgcmVmaWxscyB0aGUga2V5c3RyZWFtX2J1ZmZlciBhbmQKICAqIGFkdmFuY2VzIHRoZSBibG9jayBpbmRleCBvZiB0aGUgc2ljbV9jb250ZXh0IGZvcndhcmQgYnkgb25lCiAgKgogICogdGhpcyBpcyBhbiBpbnRlcm5hbCwgaG9wZWZ1bGx5IGlubGluZWQgZnVuY3Rpb24KICAqLwotICAKLWlubGluZSB2b2lkCi1hZXNfaWNtX2FkdmFuY2UoYWVzX2ljbV9jdHhfdCAqYykgeworc3RhdGljIHZvaWQgc3J0cF9hZXNfaWNtX2FkdmFuY2Uoc3J0cF9hZXNfaWNtX2N0eF90ICpjKQoreworICAgIC8qIGZpbGwgYnVmZmVyIHdpdGggbmV3IGtleXN0cmVhbSAqLworICAgIHYxMjhfY29weSgmYy0+a2V5c3RyZWFtX2J1ZmZlciwgJmMtPmNvdW50ZXIpOworICAgIHNydHBfYWVzX2VuY3J5cHQoJmMtPmtleXN0cmVhbV9idWZmZXIsICZjLT5leHBhbmRlZF9rZXkpOworICAgIGMtPmJ5dGVzX2luX2J1ZmZlciA9IHNpemVvZih2MTI4X3QpOwogCi0jaWYgR0VORVJJQ19BRVNJQ00gIAotICB1aW50MzJfdCB0ZW1wOwotI2VuZGlmCi0gCi0gIC8qIGZpbGwgYnVmZmVyIHdpdGggbmV3IGtleXN0cmVhbSAqLwotICB2MTI4X2NvcHkoJmMtPmtleXN0cmVhbV9idWZmZXIsICZjLT5jb3VudGVyKTsKLSAgYWVzX2VuY3J5cHQoJmMtPmtleXN0cmVhbV9idWZmZXIsIGMtPmV4cGFuZGVkX2tleSk7Ci0gIGMtPmJ5dGVzX2luX2J1ZmZlciA9IDE2OworICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX2Flc19pY20sICJjb3VudGVyOiAgICAlcyIsCisgICAgICAgICAgICAgICAgdjEyOF9oZXhfc3RyaW5nKCZjLT5jb3VudGVyKSk7CisgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfYWVzX2ljbSwgImNpcGhlcnRleHQ6ICVzIiwKKyAgICAgICAgICAgICAgICB2MTI4X2hleF9zdHJpbmcoJmMtPmtleXN0cmVhbV9idWZmZXIpKTsKIAotICBkZWJ1Z19wcmludChtb2RfYWVzX2ljbSwgImNvdW50ZXI6ICAgICVzIiwgCi0JICAgICAgdjEyOF9oZXhfc3RyaW5nKCZjLT5jb3VudGVyKSk7Ci0gIGRlYnVnX3ByaW50KG1vZF9hZXNfaWNtLCAiY2lwaGVydGV4dDogJXMiLCAKLQkgICAgICB2MTI4X2hleF9zdHJpbmcoJmMtPmtleXN0cmVhbV9idWZmZXIpKTsgICAgCi0gIAotICAvKiBjbG9jayBjb3VudGVyIGZvcndhcmQgKi8KLSAgCi0jaWYgR0VORVJJQ19BRVNJQ00gIAotICAvL2FsZXgncyBjbG9jayBjb3VudGVyIGZvcndhcmQKLSAgdGVtcCA9IG50b2hsKGMtPmNvdW50ZXIudjMyWzNdKTsKLSAgYy0+Y291bnRlci52MzJbM10gPSBodG9ubCgrK3RlbXApOwotI2Vsc2UKLSAgaWYgKCErKyhjLT5jb3VudGVyLm9jdGV0WzE1XSkpIAotICAgICsrKGMtPmNvdW50ZXIub2N0ZXRbMTRdKTsKLSNlbmRpZgorICAgIC8qIGNsb2NrIGNvdW50ZXIgZm9yd2FyZCAqLworICAgIGlmICghKysoYy0+Y291bnRlci52OFsxNV0pKSB7CisgICAgICAgICsrKGMtPmNvdW50ZXIudjhbMTRdKTsKKyAgICB9CiB9CiAKIC8qCkBAIC0zMDMsMTgyICsyODgsMjQzIEBACiAgKiAgLSBhZGQga2V5c3RyZWFtIGludG8gZGF0YSB1bnRpbCBrZXlzdHJlYW1fYnVmZmVyIGlzIGRlcGxldGVkCiAgKiAgLSBsb29wIG92ZXIgYmxvY2tzLCBmaWxsaW5nIGtleXN0cmVhbV9idWZmZXIgYW5kIHRoZW4KICAqICAgIGFkZGluZyBrZXlzdHJlYW0gaW50byBkYXRhCi0gKiAgLSBmaWxsIGJ1ZmZlciB0aGVuIGFkZCBpbiByZW1haW5pbmcgKDwgMTYpIGJ5dGVzIG9mIGtleXN0cmVhbSAKKyAqICAtIGZpbGwgYnVmZmVyIHRoZW4gYWRkIGluIHJlbWFpbmluZyAoPCAxNikgYnl0ZXMgb2Yga2V5c3RyZWFtCiAgKi8KIAotZXJyX3N0YXR1c190Ci1hZXNfaWNtX2VuY3J5cHQoYWVzX2ljbV9jdHhfdCAqYywKLQkJdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgKmVuY19sZW4pIHsKLSAgdW5zaWduZWQgaW50IGJ5dGVzX3RvX2VuY3IgPSAqZW5jX2xlbjsKLSAgaW50IGk7Ci0gIHVpbnQzMl90ICpiOworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IHNydHBfYWVzX2ljbV9lbmNyeXB0KHZvaWQgKmN2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmVuY19sZW4pCit7CisgICAgc3J0cF9hZXNfaWNtX2N0eF90ICpjID0gKHNydHBfYWVzX2ljbV9jdHhfdCAqKWN2OworICAgIHVuc2lnbmVkIGludCBieXRlc190b19lbmNyID0gKmVuY19sZW47CisgICAgdW5zaWduZWQgaW50IGk7CisgICAgdWludDMyX3QgKmI7CiAKLSAgLyogY2hlY2sgdGhhdCB0aGVyZSdzIGVub3VnaCBzZWdtZW50IGxlZnQgKi8KLSAgaWYgKChieXRlc190b19lbmNyICsgaHRvbnMoYy0+Y291bnRlci52MTZbN10pKSA+IDB4ZmZmZikKLSAgICByZXR1cm4gZXJyX3N0YXR1c190ZXJtaW51czsKKyAgICAvKiBjaGVjayB0aGF0IHRoZXJlJ3MgZW5vdWdoIHNlZ21lbnQgbGVmdCovCisgICAgaWYgKChieXRlc190b19lbmNyICsgaHRvbnMoYy0+Y291bnRlci52MTZbN10pKSA+IDB4ZmZmZikgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX3Rlcm1pbnVzOworICAgIH0KIAotIGRlYnVnX3ByaW50KG1vZF9hZXNfaWNtLCAiYmxvY2sgaW5kZXg6ICVkIiwgCi0JICAgICBodG9ucyhjLT5jb3VudGVyLnYxNls3XSkpOwotICAKLSAgaWYgKGJ5dGVzX3RvX2VuY3IgPD0gYy0+Ynl0ZXNfaW5fYnVmZmVyKSB7Ci0gICAgCi0gICAgLyogZGVhbCB3aXRoIG9kZCBjYXNlIG9mIHNtYWxsIGJ5dGVzX3RvX2VuY3IgKi8KLSAgICBmb3IgKGkgPSAoMTYgLSBjLT5ieXRlc19pbl9idWZmZXIpOwotCSBpIDwgKDE2IC0gYy0+Ynl0ZXNfaW5fYnVmZmVyICsgYnl0ZXNfdG9fZW5jcik7IGkrKykgCi0gICAgICAqYnVmKysgXj0gYy0+a2V5c3RyZWFtX2J1ZmZlci5vY3RldFtpXTsKKyAgICBkZWJ1Z19wcmludChzcnRwX21vZF9hZXNfaWNtLCAiYmxvY2sgaW5kZXg6ICVkIiwgaHRvbnMoYy0+Y291bnRlci52MTZbN10pKTsKKyAgICBpZiAoYnl0ZXNfdG9fZW5jciA8PSAodW5zaWduZWQgaW50KWMtPmJ5dGVzX2luX2J1ZmZlcikgeworICAgICAgICAvKiBkZWFsIHdpdGggb2RkIGNhc2Ugb2Ygc21hbGwgYnl0ZXNfdG9fZW5jciAqLworICAgICAgICBmb3IgKGkgPSAoc2l6ZW9mKHYxMjhfdCkgLSBjLT5ieXRlc19pbl9idWZmZXIpOworICAgICAgICAgICAgIGkgPCAoc2l6ZW9mKHYxMjhfdCkgLSBjLT5ieXRlc19pbl9idWZmZXIgKyBieXRlc190b19lbmNyKTsgaSsrKSB7CisgICAgICAgICAgICAqYnVmKysgXj0gYy0+a2V5c3RyZWFtX2J1ZmZlci52OFtpXTsKKyAgICAgICAgfQogCi0gICAgYy0+Ynl0ZXNfaW5fYnVmZmVyIC09IGJ5dGVzX3RvX2VuY3I7CisgICAgICAgIGMtPmJ5dGVzX2luX2J1ZmZlciAtPSBieXRlc190b19lbmNyOwogCi0gICAgLyogcmV0dXJuIG5vdyB0byBhdm9pZCB0aGUgbWFpbiBsb29wICovCi0gICAgcmV0dXJuIGVycl9zdGF0dXNfb2s7CisgICAgICAgIC8qIHJldHVybiBub3cgdG8gYXZvaWQgdGhlIG1haW4gbG9vcCAqLworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogCi0gIH0gZWxzZSB7Ci0gICAgCi0gICAgLyogZW5jcnlwdCBieXRlcyB1bnRpbCB0aGUgcmVtYWluaW5nIGRhdGEgaXMgMTYtYnl0ZSBhbGlnbmVkICovICAgIAotICAgIGZvciAoaT0oMTYgLSBjLT5ieXRlc19pbl9idWZmZXIpOyBpIDwgMTY7IGkrKykgCi0gICAgICAqYnVmKysgXj0gYy0+a2V5c3RyZWFtX2J1ZmZlci5vY3RldFtpXTsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBlbmNyeXB0IGJ5dGVzIHVudGlsIHRoZSByZW1haW5pbmcgZGF0YSBpcyAxNi1ieXRlIGFsaWduZWQgKi8KKyAgICAgICAgZm9yIChpID0gKHNpemVvZih2MTI4X3QpIC0gYy0+Ynl0ZXNfaW5fYnVmZmVyKTsgaSA8IHNpemVvZih2MTI4X3QpOworICAgICAgICAgICAgIGkrKykgeworICAgICAgICAgICAgKmJ1ZisrIF49IGMtPmtleXN0cmVhbV9idWZmZXIudjhbaV07CisgICAgICAgIH0KIAotICAgIGJ5dGVzX3RvX2VuY3IgLT0gYy0+Ynl0ZXNfaW5fYnVmZmVyOwotICAgIGMtPmJ5dGVzX2luX2J1ZmZlciA9IDA7CisgICAgICAgIGJ5dGVzX3RvX2VuY3IgLT0gYy0+Ynl0ZXNfaW5fYnVmZmVyOworICAgICAgICBjLT5ieXRlc19pbl9idWZmZXIgPSAwOworICAgIH0KIAotICB9Ci0gIAotICAvKiBub3cgbG9vcCBvdmVyIGVudGlyZSAxNi1ieXRlIGJsb2NrcyBvZiBrZXlzdHJlYW0gKi8KLSAgZm9yIChpPTA7IGkgPCAoYnl0ZXNfdG9fZW5jci8xNik7IGkrKykgeworICAgIC8qIG5vdyBsb29wIG92ZXIgZW50aXJlIDE2LWJ5dGUgYmxvY2tzIG9mIGtleXN0cmVhbSAqLworICAgIGZvciAoaSA9IDA7IGkgPCAoYnl0ZXNfdG9fZW5jciAvIHNpemVvZih2MTI4X3QpKTsgaSsrKSB7CisgICAgICAgIC8qIGZpbGwgYnVmZmVyIHdpdGggbmV3IGtleXN0cmVhbSAqLworICAgICAgICBzcnRwX2Flc19pY21fYWR2YW5jZShjKTsKIAotICAgIC8qIGZpbGwgYnVmZmVyIHdpdGggbmV3IGtleXN0cmVhbSAqLwotICAgIGFlc19pY21fYWR2YW5jZShjKTsKLQotICAgIC8qCi0gICAgICogYWRkIGtleXN0cmVhbSBpbnRvIHRoZSBkYXRhIGJ1ZmZlciAodGhpcyB3b3VsZCBiZSBhIGxvdCBmYXN0ZXIKLSAgICAgKiBpZiB3ZSBjb3VsZCBhc3N1bWUgMzItYml0IGFsaWdubWVudCEpCi0gICAgICovCisvKgorICogYWRkIGtleXN0cmVhbSBpbnRvIHRoZSBkYXRhIGJ1ZmZlciAodGhpcyB3b3VsZCBiZSBhIGxvdCBmYXN0ZXIKKyAqIGlmIHdlIGNvdWxkIGFzc3VtZSAzMi1iaXQgYWxpZ25tZW50ISkKKyAqLwogCiAjaWYgQUxJR05fMzIKLSAgICBiID0gKHVpbnQzMl90ICopYnVmOwotICAgICpiKysgXj0gYy0+a2V5c3RyZWFtX2J1ZmZlci52MzJbMF07Ci0gICAgKmIrKyBePSBjLT5rZXlzdHJlYW1fYnVmZmVyLnYzMlsxXTsKLSAgICAqYisrIF49IGMtPmtleXN0cmVhbV9idWZmZXIudjMyWzJdOwotICAgICpiKysgXj0gYy0+a2V5c3RyZWFtX2J1ZmZlci52MzJbM107Ci0gICAgYnVmID0gKG9jdGV0X3QgKiliOwotI2Vsc2UgICAgCi0gICAgaWYgKCgoKHVpbnQzMl90KSBidWYpICYgMHgwMykgIT0gMCkgewotICAgICAgKmJ1ZisrIF49IGMtPmtleXN0cmVhbV9idWZmZXIub2N0ZXRbMF07Ci0gICAgICAqYnVmKysgXj0gYy0+a2V5c3RyZWFtX2J1ZmZlci5vY3RldFsxXTsKLSAgICAgICpidWYrKyBePSBjLT5rZXlzdHJlYW1fYnVmZmVyLm9jdGV0WzJdOwotICAgICAgKmJ1ZisrIF49IGMtPmtleXN0cmVhbV9idWZmZXIub2N0ZXRbM107Ci0gICAgICAqYnVmKysgXj0gYy0+a2V5c3RyZWFtX2J1ZmZlci5vY3RldFs0XTsKLSAgICAgICpidWYrKyBePSBjLT5rZXlzdHJlYW1fYnVmZmVyLm9jdGV0WzVdOwotICAgICAgKmJ1ZisrIF49IGMtPmtleXN0cmVhbV9idWZmZXIub2N0ZXRbNl07Ci0gICAgICAqYnVmKysgXj0gYy0+a2V5c3RyZWFtX2J1ZmZlci5vY3RldFs3XTsKLSAgICAgICpidWYrKyBePSBjLT5rZXlzdHJlYW1fYnVmZmVyLm9jdGV0WzhdOwotICAgICAgKmJ1ZisrIF49IGMtPmtleXN0cmVhbV9idWZmZXIub2N0ZXRbOV07Ci0gICAgICAqYnVmKysgXj0gYy0+a2V5c3RyZWFtX2J1ZmZlci5vY3RldFsxMF07Ci0gICAgICAqYnVmKysgXj0gYy0+a2V5c3RyZWFtX2J1ZmZlci5vY3RldFsxMV07Ci0gICAgICAqYnVmKysgXj0gYy0+a2V5c3RyZWFtX2J1ZmZlci5vY3RldFsxMl07Ci0gICAgICAqYnVmKysgXj0gYy0+a2V5c3RyZWFtX2J1ZmZlci5vY3RldFsxM107Ci0gICAgICAqYnVmKysgXj0gYy0+a2V5c3RyZWFtX2J1ZmZlci5vY3RldFsxNF07Ci0gICAgICAqYnVmKysgXj0gYy0+a2V5c3RyZWFtX2J1ZmZlci5vY3RldFsxNV07Ci0gICAgfSBlbHNlIHsKLSAgICAgIGIgPSAodWludDMyX3QgKilidWY7Ci0gICAgICAqYisrIF49IGMtPmtleXN0cmVhbV9idWZmZXIudjMyWzBdOwotICAgICAgKmIrKyBePSBjLT5rZXlzdHJlYW1fYnVmZmVyLnYzMlsxXTsKLSAgICAgICpiKysgXj0gYy0+a2V5c3RyZWFtX2J1ZmZlci52MzJbMl07Ci0gICAgICAqYisrIF49IGMtPmtleXN0cmVhbV9idWZmZXIudjMyWzNdOwotICAgICAgYnVmID0gKG9jdGV0X3QgKiliOwotICAgIH0KKyAgICAgICAgYiA9ICh1aW50MzJfdCAqKWJ1ZjsKKyAgICAgICAgKmIrKyBePSBjLT5rZXlzdHJlYW1fYnVmZmVyLnYzMlswXTsKKyAgICAgICAgKmIrKyBePSBjLT5rZXlzdHJlYW1fYnVmZmVyLnYzMlsxXTsKKyAgICAgICAgKmIrKyBePSBjLT5rZXlzdHJlYW1fYnVmZmVyLnYzMlsyXTsKKyAgICAgICAgKmIrKyBePSBjLT5rZXlzdHJlYW1fYnVmZmVyLnYzMlszXTsKKyAgICAgICAgYnVmID0gKHVpbnQ4X3QgKiliOworI2Vsc2UKKyAgICAgICAgaWYgKCgoKHVpbnRwdHJfdClidWYpICYgMHgwMykgIT0gMCkgeworICAgICAgICAgICAgKmJ1ZisrIF49IGMtPmtleXN0cmVhbV9idWZmZXIudjhbMF07CisgICAgICAgICAgICAqYnVmKysgXj0gYy0+a2V5c3RyZWFtX2J1ZmZlci52OFsxXTsKKyAgICAgICAgICAgICpidWYrKyBePSBjLT5rZXlzdHJlYW1fYnVmZmVyLnY4WzJdOworICAgICAgICAgICAgKmJ1ZisrIF49IGMtPmtleXN0cmVhbV9idWZmZXIudjhbM107CisgICAgICAgICAgICAqYnVmKysgXj0gYy0+a2V5c3RyZWFtX2J1ZmZlci52OFs0XTsKKyAgICAgICAgICAgICpidWYrKyBePSBjLT5rZXlzdHJlYW1fYnVmZmVyLnY4WzVdOworICAgICAgICAgICAgKmJ1ZisrIF49IGMtPmtleXN0cmVhbV9idWZmZXIudjhbNl07CisgICAgICAgICAgICAqYnVmKysgXj0gYy0+a2V5c3RyZWFtX2J1ZmZlci52OFs3XTsKKyAgICAgICAgICAgICpidWYrKyBePSBjLT5rZXlzdHJlYW1fYnVmZmVyLnY4WzhdOworICAgICAgICAgICAgKmJ1ZisrIF49IGMtPmtleXN0cmVhbV9idWZmZXIudjhbOV07CisgICAgICAgICAgICAqYnVmKysgXj0gYy0+a2V5c3RyZWFtX2J1ZmZlci52OFsxMF07CisgICAgICAgICAgICAqYnVmKysgXj0gYy0+a2V5c3RyZWFtX2J1ZmZlci52OFsxMV07CisgICAgICAgICAgICAqYnVmKysgXj0gYy0+a2V5c3RyZWFtX2J1ZmZlci52OFsxMl07CisgICAgICAgICAgICAqYnVmKysgXj0gYy0+a2V5c3RyZWFtX2J1ZmZlci52OFsxM107CisgICAgICAgICAgICAqYnVmKysgXj0gYy0+a2V5c3RyZWFtX2J1ZmZlci52OFsxNF07CisgICAgICAgICAgICAqYnVmKysgXj0gYy0+a2V5c3RyZWFtX2J1ZmZlci52OFsxNV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBiID0gKHVpbnQzMl90ICopYnVmOworICAgICAgICAgICAgKmIrKyBePSBjLT5rZXlzdHJlYW1fYnVmZmVyLnYzMlswXTsKKyAgICAgICAgICAgICpiKysgXj0gYy0+a2V5c3RyZWFtX2J1ZmZlci52MzJbMV07CisgICAgICAgICAgICAqYisrIF49IGMtPmtleXN0cmVhbV9idWZmZXIudjMyWzJdOworICAgICAgICAgICAgKmIrKyBePSBjLT5rZXlzdHJlYW1fYnVmZmVyLnYzMlszXTsKKyAgICAgICAgICAgIGJ1ZiA9ICh1aW50OF90ICopYjsKKyAgICAgICAgfQogI2VuZGlmIC8qICNpZiBBTElHTl8zMiAqLworICAgIH0KIAotICB9Ci0gIAotICAvKiBpZiB0aGVyZSBpcyBhIHRhaWwgZW5kIG9mIHRoZSBkYXRhLCBwcm9jZXNzIGl0ICovCi0gIGlmICgoYnl0ZXNfdG9fZW5jciAmIDB4ZikgIT0gMCkgewotICAgIAotICAgIC8qIGZpbGwgYnVmZmVyIHdpdGggbmV3IGtleXN0cmVhbSAqLwotICAgIGFlc19pY21fYWR2YW5jZShjKTsKLSAgICAKLSAgICBmb3IgKGk9MDsgaSA8IChieXRlc190b19lbmNyICYgMHhmKTsgaSsrKQotICAgICAgKmJ1ZisrIF49IGMtPmtleXN0cmVhbV9idWZmZXIub2N0ZXRbaV07Ci0gICAgCi0gICAgLyogcmVzZXQgdGhlIGtleXN0cmVhbSBidWZmZXIgc2l6ZSB0byByaWdodCB2YWx1ZSAqLwotICAgIGMtPmJ5dGVzX2luX2J1ZmZlciA9IDE2IC0gaTsgIAotICB9IGVsc2UgeworICAgIC8qIGlmIHRoZXJlIGlzIGEgdGFpbCBlbmQgb2YgdGhlIGRhdGEsIHByb2Nlc3MgaXQgKi8KKyAgICBpZiAoKGJ5dGVzX3RvX2VuY3IgJiAweGYpICE9IDApIHsKKyAgICAgICAgLyogZmlsbCBidWZmZXIgd2l0aCBuZXcga2V5c3RyZWFtICovCisgICAgICAgIHNydHBfYWVzX2ljbV9hZHZhbmNlKGMpOwogCi0gICAgLyogbm8gdGFpbCwgc28ganVzdCByZXNldCB0aGUga2V5c3RyZWFtIGJ1ZmZlciBzaXplIHRvIHplcm8gKi8KLSAgICBjLT5ieXRlc19pbl9idWZmZXIgPSAwOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKGJ5dGVzX3RvX2VuY3IgJiAweGYpOyBpKyspIHsKKyAgICAgICAgICAgICpidWYrKyBePSBjLT5rZXlzdHJlYW1fYnVmZmVyLnY4W2ldOworICAgICAgICB9CiAKLSAgfQorICAgICAgICAvKiByZXNldCB0aGUga2V5c3RyZWFtIGJ1ZmZlciBzaXplIHRvIHJpZ2h0IHZhbHVlICovCisgICAgICAgIGMtPmJ5dGVzX2luX2J1ZmZlciA9IHNpemVvZih2MTI4X3QpIC0gaTsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBubyB0YWlsLCBzbyBqdXN0IHJlc2V0IHRoZSBrZXlzdHJlYW0gYnVmZmVyIHNpemUgdG8gemVybyAqLworICAgICAgICBjLT5ieXRlc19pbl9idWZmZXIgPSAwOworICAgIH0KIAotICByZXR1cm4gZXJyX3N0YXR1c19vazsKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQogCi1lcnJfc3RhdHVzX3QKLWFlc19pY21fb3V0cHV0KGFlc19pY21fY3R4X3QgKmMsIG9jdGV0X3QgKmJ1ZmZlciwgaW50IG51bV9vY3RldHNfdG9fb3V0cHV0KSB7Ci0gIHVuc2lnbmVkIGludCBsZW4gPSBudW1fb2N0ZXRzX3RvX291dHB1dDsKLSAgCi0gIC8qIHplcm9pemUgdGhlIGJ1ZmZlciAqLwotICBvY3RldF9zdHJpbmdfc2V0X3RvX3plcm8oYnVmZmVyLCBudW1fb2N0ZXRzX3RvX291dHB1dCk7Ci0gIAotICAvKiBleG9yIGtleXN0cmVhbSBpbnRvIGJ1ZmZlciAqLwotICByZXR1cm4gYWVzX2ljbV9lbmNyeXB0KGMsIGJ1ZmZlciwgJmxlbik7Ci19CitzdGF0aWMgY29uc3QgY2hhciBzcnRwX2Flc19pY21fMTI4X2Rlc2NyaXB0aW9uW10gPQorICAgICJBRVMtMTI4IGludGVnZXIgY291bnRlciBtb2RlIjsKK3N0YXRpYyBjb25zdCBjaGFyIHNydHBfYWVzX2ljbV8yNTZfZGVzY3JpcHRpb25bXSA9CisgICAgIkFFUy0yNTYgaW50ZWdlciBjb3VudGVyIG1vZGUiOwogCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgY29uc3QgdWludDhfdCBzcnRwX2Flc19pY21fMTI4X3Rlc3RfY2FzZV8wX2tleVtTUlRQX0FFU19JQ01fMTI4X0tFWV9MRU5fV1NBTFRdID0geworICAgIDB4MmIsIDB4N2UsIDB4MTUsIDB4MTYsIDB4MjgsIDB4YWUsIDB4ZDIsIDB4YTYsCisgICAgMHhhYiwgMHhmNywgMHgxNSwgMHg4OCwgMHgwOSwgMHhjZiwgMHg0ZiwgMHgzYywKKyAgICAweGYwLCAweGYxLCAweGYyLCAweGYzLCAweGY0LCAweGY1LCAweGY2LCAweGY3LAorICAgIDB4ZjgsIDB4ZjksIDB4ZmEsIDB4ZmIsIDB4ZmMsIDB4ZmQKK307CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KIAotY2hhciAKLWFlc19pY21fZGVzY3JpcHRpb25bXSA9ICJhZXMgaW50ZWdlciBjb3VudGVyIG1vZGUiOworLyogY2xhbmctZm9ybWF0IG9mZiAqLworc3RhdGljIHVpbnQ4X3Qgc3J0cF9hZXNfaWNtXzEyOF90ZXN0X2Nhc2VfMF9ub25jZVsxNl0gPSB7CisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCit9OworLyogY2xhbmctZm9ybWF0IG9uICovCiAKLW9jdGV0X3QgYWVzX2ljbV90ZXN0X2Nhc2VfMF9rZXlbMzBdID0gewotICAweDJiLCAweDdlLCAweDE1LCAweDE2LCAweDI4LCAweGFlLCAweGQyLCAweGE2LAotICAweGFiLCAweGY3LCAweDE1LCAweDg4LCAweDA5LCAweGNmLCAweDRmLCAweDNjLAotICAweGYwLCAweGYxLCAweGYyLCAweGYzLCAweGY0LCAweGY1LCAweGY2LCAweGY3LAotICAweGY4LCAweGY5LCAweGZhLCAweGZiLCAweGZjLCAweGZkCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgY29uc3QgdWludDhfdCBzcnRwX2Flc19pY21fMTI4X3Rlc3RfY2FzZV8wX3BsYWludGV4dFszMl0gPSAgeworICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCit9OworLyogY2xhbmctZm9ybWF0IG9uICovCisKKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KK3N0YXRpYyBjb25zdCB1aW50OF90IHNydHBfYWVzX2ljbV8xMjhfdGVzdF9jYXNlXzBfY2lwaGVydGV4dFszMl0gPSB7CisgICAgMHhlMCwgMHgzZSwgMHhhZCwgMHgwOSwgMHgzNSwgMHhjOSwgMHg1ZSwgMHg4MCwKKyAgICAweGUxLCAweDY2LCAweGIxLCAweDZkLCAweGQ5LCAweDJiLCAweDRlLCAweGI0LAorICAgIDB4ZDIsIDB4MzUsIDB4MTMsIDB4MTYsIDB4MmIsIDB4MDIsIDB4ZDAsIDB4ZjcsCisgICAgMHgyYSwgMHg0MywgMHhhMiwgMHhmZSwgMHg0YSwgMHg1ZiwgMHg5NywgMHhhYgorfTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworCitzdGF0aWMgY29uc3Qgc3J0cF9jaXBoZXJfdGVzdF9jYXNlX3Qgc3J0cF9hZXNfaWNtXzEyOF90ZXN0X2Nhc2VfMCA9IHsKKyAgICBTUlRQX0FFU19JQ01fMTI4X0tFWV9MRU5fV1NBTFQsICAgICAgICAgIC8qIG9jdGV0cyBpbiBrZXkgICAgICAgICAgICAqLworICAgIHNydHBfYWVzX2ljbV8xMjhfdGVzdF9jYXNlXzBfa2V5LCAgICAgICAgLyoga2V5ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgc3J0cF9hZXNfaWNtXzEyOF90ZXN0X2Nhc2VfMF9ub25jZSwgICAgICAvKiBwYWNrZXQgaW5kZXggICAgICAgICAgICAgKi8KKyAgICAzMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9jdGV0cyBpbiBwbGFpbnRleHQgICAgICAqLworICAgIHNydHBfYWVzX2ljbV8xMjhfdGVzdF9jYXNlXzBfcGxhaW50ZXh0LCAgLyogcGxhaW50ZXh0ICAgICAgICAgICAgICAgICovCisgICAgMzIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvY3RldHMgaW4gY2lwaGVydGV4dCAgICAgKi8KKyAgICBzcnRwX2Flc19pY21fMTI4X3Rlc3RfY2FzZV8wX2NpcGhlcnRleHQsIC8qIGNpcGhlcnRleHQgICAgICAgICAgICAgICAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAqLworICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBuZXh0IHRlc3RjYXNlICovCiB9OwogCi1vY3RldF90IGFlc19pY21fdGVzdF9jYXNlXzBfbm9uY2VbMTZdID0gewotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorLyogY2xhbmctZm9ybWF0IG9mZiAqLworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc3J0cF9hZXNfaWNtXzI1Nl90ZXN0X2Nhc2VfMF9rZXlbU1JUUF9BRVNfSUNNXzI1Nl9LRVlfTEVOX1dTQUxUXSA9IHsKKyAgICAweDU3LCAweGY4LCAweDJmLCAweGUzLCAweDYxLCAweDNmLCAweGQxLCAweDcwLAorICAgIDB4YTgsIDB4NWUsIDB4YzksIDB4M2MsIDB4NDAsIDB4YjEsIDB4ZjAsIDB4OTIsCisgICAgMHgyZSwgMHhjNCwgMHhjYiwgMHgwZCwgMHhjMCwgMHgyNSwgMHhiNSwgMHg4MiwKKyAgICAweDcyLCAweDE0LCAweDdjLCAweGM0LCAweDM4LCAweDk0LCAweDRhLCAweDk4LAorICAgIDB4ZjAsIDB4ZjEsIDB4ZjIsIDB4ZjMsIDB4ZjQsIDB4ZjUsIDB4ZjYsIDB4ZjcsCisgICAgMHhmOCwgMHhmOSwgMHhmYSwgMHhmYiwgMHhmYywgMHhmZAorfTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgdWludDhfdCBzcnRwX2Flc19pY21fMjU2X3Rlc3RfY2FzZV8wX25vbmNlWzE2XSA9IHsKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKK307CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworLyogY2xhbmctZm9ybWF0IG9mZiAqLworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc3J0cF9hZXNfaWNtXzI1Nl90ZXN0X2Nhc2VfMF9wbGFpbnRleHRbMzJdID0gIHsKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorfTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgY29uc3QgdWludDhfdCBzcnRwX2Flc19pY21fMjU2X3Rlc3RfY2FzZV8wX2NpcGhlcnRleHRbMzJdID0geworICAgIDB4OTIsIDB4YmQsIDB4ZDIsIDB4OGEsIDB4OTMsIDB4YzMsIDB4ZjUsIDB4MjUsCisgICAgMHgxMSwgMHhjNiwgMHg3NywgMHhkMCwgMHg4YiwgMHg1NSwgMHgxNSwgMHhhNCwKKyAgICAweDlkLCAweGE3LCAweDFiLCAweDIzLCAweDc4LCAweGE4LCAweDU0LCAweGY2LAorICAgIDB4NzAsIDB4NTAsIDB4NzUsIDB4NmQsIDB4ZWQsIDB4MTYsIDB4NWIsIDB4YWMKK307CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworc3RhdGljIGNvbnN0IHNydHBfY2lwaGVyX3Rlc3RfY2FzZV90IHNydHBfYWVzX2ljbV8yNTZfdGVzdF9jYXNlXzAgPSB7CisgICAgU1JUUF9BRVNfSUNNXzI1Nl9LRVlfTEVOX1dTQUxULCAgICAgICAgICAvKiBvY3RldHMgaW4ga2V5ICAgICAgICAgICAgKi8KKyAgICBzcnRwX2Flc19pY21fMjU2X3Rlc3RfY2FzZV8wX2tleSwgICAgICAgIC8qIGtleSAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHNydHBfYWVzX2ljbV8yNTZfdGVzdF9jYXNlXzBfbm9uY2UsICAgICAgLyogcGFja2V0IGluZGV4ICAgICAgICAgICAgICovCisgICAgMzIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvY3RldHMgaW4gcGxhaW50ZXh0ICAgICAgKi8KKyAgICBzcnRwX2Flc19pY21fMjU2X3Rlc3RfY2FzZV8wX3BsYWludGV4dCwgIC8qIHBsYWludGV4dCAgICAgICAgICAgICAgICAqLworICAgIDMyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2N0ZXRzIGluIGNpcGhlcnRleHQgICAgICovCisgICAgc3J0cF9hZXNfaWNtXzI1Nl90ZXN0X2Nhc2VfMF9jaXBoZXJ0ZXh0LCAvKiBjaXBoZXJ0ZXh0ICAgICAgICAgICAgICAgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gbmV4dCB0ZXN0Y2FzZSAqLwogfTsKIAotb2N0ZXRfdCBhZXNfaWNtX3Rlc3RfY2FzZV8wX3BsYWludGV4dFszMl0gPSAgewotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAKLX07Ci0KLW9jdGV0X3QgYWVzX2ljbV90ZXN0X2Nhc2VfMF9jaXBoZXJ0ZXh0WzMyXSA9IHsKLSAgMHhlMCwgMHgzZSwgMHhhZCwgMHgwOSwgMHgzNSwgMHhjOSwgMHg1ZSwgMHg4MCwKLSAgMHhlMSwgMHg2NiwgMHhiMSwgMHg2ZCwgMHhkOSwgMHgyYiwgMHg0ZSwgMHhiNCwKLSAgMHhkMiwgMHgzNSwgMHgxMywgMHgxNiwgMHgyYiwgMHgwMiwgMHhkMCwgMHhmNywKLSAgMHgyYSwgMHg0MywgMHhhMiwgMHhmZSwgMHg0YSwgMHg1ZiwgMHg5NywgMHhhYgotfTsKLQotY2lwaGVyX3Rlc3RfY2FzZV90IGFlc19pY21fdGVzdF9jYXNlXzAgPSB7Ci0gIDMwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9jdGV0cyBpbiBrZXkgICAgICAgICAgICAqLwotICBhZXNfaWNtX3Rlc3RfY2FzZV8wX2tleSwgICAgICAgICAgICAgICAvKiBrZXkgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgYWVzX2ljbV90ZXN0X2Nhc2VfMF9ub25jZSwgICAgICAgICAgICAgLyogcGFja2V0IGluZGV4ICAgICAgICAgICAgICovCi0gIDMyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9jdGV0cyBpbiBwbGFpbnRleHQgICAgICAqLwotICBhZXNfaWNtX3Rlc3RfY2FzZV8wX3BsYWludGV4dCwgICAgICAgICAvKiBwbGFpbnRleHQgICAgICAgICAgICAgICAgKi8KLSAgMzIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2N0ZXRzIGluIGNpcGhlcnRleHQgICAgICovCi0gIGFlc19pY21fdGVzdF9jYXNlXzBfY2lwaGVydGV4dCwgICAgICAgIC8qIGNpcGhlcnRleHQgICAgICAgICAgICAgICAqLwotICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIG5leHQgdGVzdGNhc2UgKi8KLX07Ci0KLSAKIC8qCiAgKiBub3RlOiB0aGUgZW5jcnlwdCBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gdGhlIGRlY3J5cHQgZnVuY3Rpb24KICAqLwogCi1jaXBoZXJfdHlwZV90IGFlc19pY20gPSB7Ci0gIChjaXBoZXJfYWxsb2NfZnVuY190KSAgICAgICAgICBhZXNfaWNtX2FsbG9jLAotICAoY2lwaGVyX2RlYWxsb2NfZnVuY190KSAgICAgICAgYWVzX2ljbV9kZWFsbG9jLCAgCi0gIChjaXBoZXJfaW5pdF9mdW5jX3QpICAgICAgICAgICBhZXNfaWNtX2NvbnRleHRfaW5pdCwKLSAgKGNpcGhlcl9lbmNyeXB0X2Z1bmNfdCkgICAgICAgIGFlc19pY21fZW5jcnlwdCwKLSAgKGNpcGhlcl9kZWNyeXB0X2Z1bmNfdCkgICAgICAgIGFlc19pY21fZW5jcnlwdCwKLSAgKGNpcGhlcl9zZXRfaXZfZnVuY190KSAgICAgICAgIGFlc19pY21fc2V0X2l2LAotICAoY2hhciAqKSAgICAgICAgICAgICAgICAgICAgICAgYWVzX2ljbV9kZXNjcmlwdGlvbiwKLSAgKGludCkgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgLyogaW5zdGFuY2UgY291bnQgKi8KLSAgKGNpcGhlcl90ZXN0X2Nhc2VfdCAqKSAgICAgICAgJmFlc19pY21fdGVzdF9jYXNlXzAsCi0gIChkZWJ1Z19tb2R1bGVfdCAqKSAgICAgICAgICAgICZtb2RfYWVzX2ljbQorY29uc3Qgc3J0cF9jaXBoZXJfdHlwZV90IHNydHBfYWVzX2ljbV8xMjggPSB7CisgICAgc3J0cF9hZXNfaWNtX2FsbG9jLCAgICAgICAgICAgIC8qICovCisgICAgc3J0cF9hZXNfaWNtX2RlYWxsb2MsICAgICAgICAgIC8qICovCisgICAgc3J0cF9hZXNfaWNtX2NvbnRleHRfaW5pdCwgICAgIC8qICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldF9hYWQgKi8KKyAgICBzcnRwX2Flc19pY21fZW5jcnlwdCwgICAgICAgICAgLyogKi8KKyAgICBzcnRwX2Flc19pY21fZW5jcnlwdCwgICAgICAgICAgLyogKi8KKyAgICBzcnRwX2Flc19pY21fc2V0X2l2LCAgICAgICAgICAgLyogKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ2V0X3RhZyAqLworICAgIHNydHBfYWVzX2ljbV8xMjhfZGVzY3JpcHRpb24sICAvKiAqLworICAgICZzcnRwX2Flc19pY21fMTI4X3Rlc3RfY2FzZV8wLCAvKiAqLworICAgIFNSVFBfQUVTX0lDTV8xMjggICAgICAgICAgICAgICAvKiAqLwogfTsKIAorY29uc3Qgc3J0cF9jaXBoZXJfdHlwZV90IHNydHBfYWVzX2ljbV8yNTYgPSB7CisgICAgc3J0cF9hZXNfaWNtX2FsbG9jLCAgICAgICAgICAgIC8qICovCisgICAgc3J0cF9hZXNfaWNtX2RlYWxsb2MsICAgICAgICAgIC8qICovCisgICAgc3J0cF9hZXNfaWNtX2NvbnRleHRfaW5pdCwgICAgIC8qICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldF9hYWQgKi8KKyAgICBzcnRwX2Flc19pY21fZW5jcnlwdCwgICAgICAgICAgLyogKi8KKyAgICBzcnRwX2Flc19pY21fZW5jcnlwdCwgICAgICAgICAgLyogKi8KKyAgICBzcnRwX2Flc19pY21fc2V0X2l2LCAgICAgICAgICAgLyogKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ2V0X3RhZyAqLworICAgIHNydHBfYWVzX2ljbV8yNTZfZGVzY3JpcHRpb24sICAvKiAqLworICAgICZzcnRwX2Flc19pY21fMjU2X3Rlc3RfY2FzZV8wLCAvKiAqLworICAgIFNSVFBfQUVTX0lDTV8yNTYgICAgICAgICAgICAgICAvKiAqLworfTsKZGlmZiAtLWdpdCBhL2NyeXB0by9jaXBoZXIvYWVzX2ljbV9uc3MuYyBiL2NyeXB0by9jaXBoZXIvYWVzX2ljbV9uc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTYxYjhmCi0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL2NpcGhlci9hZXNfaWNtX25zcy5jCkBAIC0wLDAgKzEsNTYyIEBACisvKgorICogYWVzX2ljbV9uc3MuYworICoKKyAqIEFFUyBJbnRlZ2VyIENvdW50ZXIgTW9kZQorICoKKyAqIFJpY2hhcmQgTC4gQmFybmVzCisgKiBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKi8KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNywgQ2lzY28gU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJhZXNfaWNtX2V4dC5oIgorI2luY2x1ZGUgImNyeXB0b190eXBlcy5oIgorI2luY2x1ZGUgImVyci5oIiAvKiBmb3Igc3J0cF9kZWJ1ZyAqLworI2luY2x1ZGUgImFsbG9jLmgiCisjaW5jbHVkZSAiY2lwaGVyX3R5cGVzLmgiCisKK3NydHBfZGVidWdfbW9kdWxlX3Qgc3J0cF9tb2RfYWVzX2ljbSA9IHsKKyAgICAwLCAgICAgICAgICAgIC8qIGRlYnVnZ2luZyBpcyBvZmYgYnkgZGVmYXVsdCAqLworICAgICJhZXMgaWNtIG5zcyIgLyogcHJpbnRhYmxlIG1vZHVsZSBuYW1lICAgICAgICovCit9OworCisvKgorICogaW50ZWdlciBjb3VudGVyIG1vZGUgd29ya3MgYXMgZm9sbG93czoKKyAqCisgKiAxNiBiaXRzCisgKiA8LS0tLS0+CisgKiArLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSsKKyAqIHwgICAgICAgICAgIG5vbmNlICAgICAgICAgICB8ICAgIHBhY2tldCBpbmRleCAgICB8ICBjdHIgfC0tLSsKKyAqICstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKyAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKyAgIHYKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgc2FsdCAgICAgICAgICAgICAgICAgICAgICB8MDAwMDAwfC0+KCspCisgKiArLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSsgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVuY3J5cHQgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiArLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSsgICB8CisgKiB8ICAgICAgICAgICAgICAgICAgICBrZXlzdHJlYW0gYmxvY2sgICAgICAgICAgICAgICAgICAgIHw8LS0rCisgKiArLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSsKKyAqCisgKiBBbGwgZmllbGRzIGFyZSBiaWctZW5kaWFuCisgKgorICogY3RyIGlzIHRoZSBibG9jayBjb3VudGVyLCB3aGljaCBpbmNyZW1lbnRzIGZyb20gemVybyBmb3IKKyAqIGVhY2ggcGFja2V0ICgxNiBiaXRzIHdpZGUpCisgKgorICogcGFja2V0IGluZGV4IGlzIGRpc3RpbmN0IGZvciBlYWNoIHBhY2tldCAoNDggYml0cyB3aWRlKQorICoKKyAqIG5vbmNlIGNhbiBiZSBkaXN0aW5jdCBhY3Jvc3MgbWFueSB1c2VzIG9mIHRoZSBzYW1lIGtleSwgb3IKKyAqIGNhbiBiZSBhIGZpeGVkIHZhbHVlIHBlciBrZXksIG9yIGNhbiBiZSBwZXItcGFja2V0IHJhbmRvbW5lc3MKKyAqICg2NCBiaXRzKQorICoKKyAqLworCisvKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBjcnlwdG8gZW5naW5lLgorICogVGhlIGtleV9sZW4gcGFyYW1ldGVyIHNob3VsZCBiZSBvbmUgb2YgMzAsIDM4LCBvciA0NiBmb3IKKyAqIEFFUy0xMjgsIEFFUy0xOTIsIGFuZCBBRVMtMjU2IHJlc3BlY3RpdmVseS4gIE5vdGUsIHRoaXMga2V5X2xlbgorICogdmFsdWUgaXMgaW5mbGF0ZWQsIGFzIGl0IGFsc28gYWNjb3VudHMgZm9yIHRoZSAxMTIgYml0IHNhbHQKKyAqIHZhbHVlLiAgVGhlIHRsZW4gYXJndW1lbnQgaXMgZm9yIHRoZSBBRUFEIHRhZyBsZW5ndGgsIHdoaWNoCisgKiBpc24ndCB1c2VkIGluIGNvdW50ZXIgbW9kZS4KKyAqLworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IHNydHBfYWVzX2ljbV9uc3NfYWxsb2Moc3J0cF9jaXBoZXJfdCAqKmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0bGVuKQoreworICAgIHNydHBfYWVzX2ljbV9jdHhfdCAqaWNtOworICAgIE5TU0luaXRDb250ZXh0ICpuc3M7CisKKyAgICBkZWJ1Z19wcmludChzcnRwX21vZF9hZXNfaWNtLCAiYWxsb2NhdGluZyBjaXBoZXIgd2l0aCBrZXkgbGVuZ3RoICVkIiwKKyAgICAgICAgICAgICAgICBrZXlfbGVuKTsKKworICAgIC8qCisgICAgICogVmVyaWZ5IHRoZSBrZXlfbGVuIGlzIHZhbGlkIGZvciBvbmUgb2Y6IEFFUy0xMjgvMTkyLzI1NgorICAgICAqLworICAgIGlmIChrZXlfbGVuICE9IFNSVFBfQUVTX0lDTV8xMjhfS0VZX0xFTl9XU0FMVCAmJgorICAgICAgICBrZXlfbGVuICE9IFNSVFBfQUVTX0lDTV8xOTJfS0VZX0xFTl9XU0FMVCAmJgorICAgICAgICBrZXlfbGVuICE9IFNSVFBfQUVTX0lDTV8yNTZfS0VZX0xFTl9XU0FMVCkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbTsKKyAgICB9CisKKyAgICAvKiBJbml0aWFsaXplIE5TUyBlcXVpdiBvZiBOU1NfTm9EQl9Jbml0KE5VTEwpICovCisgICAgbnNzID0gTlNTX0luaXRDb250ZXh0KCIiLCAiIiwgIiIsICIiLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICBOU1NfSU5JVF9SRUFET05MWSB8IE5TU19JTklUX05PQ0VSVERCIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TU19JTklUX05PTU9EREIgfCBOU1NfSU5JVF9GT1JDRU9QRU4gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNTX0lOSVRfT1BUSU1JWkVTUEFDRSk7CisgICAgaWYgKCFuc3MpIHsKKyAgICAgICAgcmV0dXJuIChzcnRwX2Vycl9zdGF0dXNfY2lwaGVyX2ZhaWwpOworICAgIH0KKworICAgIC8qIGFsbG9jYXRlIG1lbW9yeSBhIGNpcGhlciBvZiB0eXBlIGFlc19pY20gKi8KKyAgICAqYyA9IChzcnRwX2NpcGhlcl90ICopc3J0cF9jcnlwdG9fYWxsb2Moc2l6ZW9mKHNydHBfY2lwaGVyX3QpKTsKKyAgICBpZiAoKmMgPT0gTlVMTCkgeworICAgICAgICBOU1NfU2h1dGRvd25Db250ZXh0KG5zcyk7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYWxsb2NfZmFpbDsKKyAgICB9CisKKyAgICBpY20gPSAoc3J0cF9hZXNfaWNtX2N0eF90ICopc3J0cF9jcnlwdG9fYWxsb2Moc2l6ZW9mKHNydHBfYWVzX2ljbV9jdHhfdCkpOworICAgIGlmIChpY20gPT0gTlVMTCkgeworICAgICAgICBOU1NfU2h1dGRvd25Db250ZXh0KG5zcyk7CisgICAgICAgIHNydHBfY3J5cHRvX2ZyZWUoKmMpOworICAgICAgICAqYyA9IE5VTEw7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYWxsb2NfZmFpbDsKKyAgICB9CisKKyAgICBpY20tPmtleSA9IE5VTEw7CisgICAgaWNtLT5jdHggPSBOVUxMOworICAgIGljbS0+bnNzID0gbnNzOworCisgICAgLyogc2V0IHBvaW50ZXJzICovCisgICAgKCpjKS0+c3RhdGUgPSBpY207CisKKyAgICAvKiBzZXR1cCBjaXBoZXIgcGFyYW1ldGVycyAqLworICAgIHN3aXRjaCAoa2V5X2xlbikgeworICAgIGNhc2UgU1JUUF9BRVNfSUNNXzEyOF9LRVlfTEVOX1dTQUxUOgorICAgICAgICAoKmMpLT5hbGdvcml0aG0gPSBTUlRQX0FFU19JQ01fMTI4OworICAgICAgICAoKmMpLT50eXBlID0gJnNydHBfYWVzX2ljbV8xMjg7CisgICAgICAgIGljbS0+a2V5X3NpemUgPSBTUlRQX0FFU18xMjhfS0VZX0xFTjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTUlRQX0FFU19JQ01fMTkyX0tFWV9MRU5fV1NBTFQ6CisgICAgICAgICgqYyktPmFsZ29yaXRobSA9IFNSVFBfQUVTX0lDTV8xOTI7CisgICAgICAgICgqYyktPnR5cGUgPSAmc3J0cF9hZXNfaWNtXzE5MjsKKyAgICAgICAgaWNtLT5rZXlfc2l6ZSA9IFNSVFBfQUVTXzE5Ml9LRVlfTEVOOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNSVFBfQUVTX0lDTV8yNTZfS0VZX0xFTl9XU0FMVDoKKyAgICAgICAgKCpjKS0+YWxnb3JpdGhtID0gU1JUUF9BRVNfSUNNXzI1NjsKKyAgICAgICAgKCpjKS0+dHlwZSA9ICZzcnRwX2Flc19pY21fMjU2OworICAgICAgICBpY20tPmtleV9zaXplID0gU1JUUF9BRVNfMjU2X0tFWV9MRU47CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8qIHNldCBrZXkgc2l6ZSAgICAgICAgKi8KKyAgICAoKmMpLT5rZXlfbGVuID0ga2V5X2xlbjsKKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGRlYWxsb2NhdGVzIGFuIGluc3RhbmNlIG9mIHRoaXMgZW5naW5lCisgKi8KK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2Flc19pY21fbnNzX2RlYWxsb2Moc3J0cF9jaXBoZXJfdCAqYykKK3sKKyAgICBzcnRwX2Flc19pY21fY3R4X3QgKmN0eDsKKworICAgIGN0eCA9IChzcnRwX2Flc19pY21fY3R4X3QgKiljLT5zdGF0ZTsKKyAgICBpZiAoY3R4KSB7CisgICAgICAgIC8qIGZyZWUgYW55IFBLMTEgdmFsdWVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQgKi8KKyAgICAgICAgaWYgKGN0eC0+a2V5KSB7CisgICAgICAgICAgICBQSzExX0ZyZWVTeW1LZXkoY3R4LT5rZXkpOworICAgICAgICAgICAgY3R4LT5rZXkgPSBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGN0eC0+Y3R4KSB7CisgICAgICAgICAgICBQSzExX0Rlc3Ryb3lDb250ZXh0KGN0eC0+Y3R4LCBQUl9UUlVFKTsKKyAgICAgICAgICAgIGN0eC0+Y3R4ID0gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjdHgtPm5zcykgeworICAgICAgICAgICAgTlNTX1NodXRkb3duQ29udGV4dChjdHgtPm5zcyk7CisgICAgICAgICAgICBjdHgtPm5zcyA9IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICAvKiB6ZXJvaXplIGV2ZXJ5dGhpbmcgKi8KKyAgICAgICAgb2N0ZXRfc3RyaW5nX3NldF90b196ZXJvKGN0eCwgc2l6ZW9mKHNydHBfYWVzX2ljbV9jdHhfdCkpOworICAgICAgICBzcnRwX2NyeXB0b19mcmVlKGN0eCk7CisgICAgfQorCisgICAgLyogZnJlZSBtZW1vcnkgKi8KKyAgICBzcnRwX2NyeXB0b19mcmVlKGMpOworCisgICAgcmV0dXJuIChzcnRwX2Vycl9zdGF0dXNfb2spOworfQorCisvKgorICogYWVzX2ljbV9uc3NfY29udGV4dF9pbml0KC4uLikgaW5pdGlhbGl6ZXMgdGhlIGFlc19pY21fY29udGV4dAorICogdXNpbmcgdGhlIHZhbHVlIGluIGtleVtdLgorICoKKyAqIHRoZSBrZXkgaXMgdGhlIHNlY3JldCBrZXkKKyAqCisgKiB0aGUgc2FsdCBpcyB1bnByZWRpY3RhYmxlIChidXQgbm90IG5lY2Vzc2FyaWx5IHNlY3JldCkgZGF0YSB3aGljaAorICogcmFuZG9taXplcyB0aGUgc3RhcnRpbmcgcG9pbnQgaW4gdGhlIGtleXN0cmVhbQorICovCitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9hZXNfaWNtX25zc19jb250ZXh0X2luaXQodm9pZCAqY3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5KQoreworICAgIHNydHBfYWVzX2ljbV9jdHhfdCAqYyA9IChzcnRwX2Flc19pY21fY3R4X3QgKiljdjsKKworICAgIC8qCisgICAgICogc2V0IGNvdW50ZXIgYW5kIGluaXRpYWwgdmFsdWVzIHRvICdvZmZzZXQnIHZhbHVlLCBiZWluZyBjYXJlZnVsIG5vdCB0bworICAgICAqIGdvIHBhc3QgdGhlIGVuZCBvZiB0aGUga2V5IGJ1ZmZlcgorICAgICAqLworICAgIHYxMjhfc2V0X3RvX3plcm8oJmMtPmNvdW50ZXIpOworICAgIHYxMjhfc2V0X3RvX3plcm8oJmMtPm9mZnNldCk7CisgICAgbWVtY3B5KCZjLT5jb3VudGVyLCBrZXkgKyBjLT5rZXlfc2l6ZSwgU1JUUF9TQUxUX0xFTik7CisgICAgbWVtY3B5KCZjLT5vZmZzZXQsIGtleSArIGMtPmtleV9zaXplLCBTUlRQX1NBTFRfTEVOKTsKKworICAgIC8qIGZvcmNlIGxhc3QgdHdvIG9jdGV0cyBvZiB0aGUgb2Zmc2V0IHRvIHplcm8gKGZvciBzcnRwIGNvbXBhdGliaWxpdHkpICovCisgICAgYy0+b2Zmc2V0LnY4W1NSVFBfU0FMVF9MRU5dID0gYy0+b2Zmc2V0LnY4W1NSVFBfU0FMVF9MRU4gKyAxXSA9IDA7CisgICAgYy0+Y291bnRlci52OFtTUlRQX1NBTFRfTEVOXSA9IGMtPmNvdW50ZXIudjhbU1JUUF9TQUxUX0xFTiArIDFdID0gMDsKKworICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX2Flc19pY20sICJrZXk6ICAlcyIsCisgICAgICAgICAgICAgICAgc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZyhrZXksIGMtPmtleV9zaXplKSk7CisgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfYWVzX2ljbSwgIm9mZnNldDogJXMiLCB2MTI4X2hleF9zdHJpbmcoJmMtPm9mZnNldCkpOworCisgICAgaWYgKGMtPmtleSkgeworICAgICAgICBQSzExX0ZyZWVTeW1LZXkoYy0+a2V5KTsKKyAgICAgICAgYy0+a2V5ID0gTlVMTDsKKyAgICB9CisKKyAgICBQSzExU2xvdEluZm8gKnNsb3QgPSBQSzExX0dldEJlc3RTbG90KENLTV9BRVNfQ1RSLCBOVUxMKTsKKyAgICBpZiAoIXNsb3QpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisgICAgfQorCisgICAgU0VDSXRlbSBrZXlJdGVtID0geyBzaUJ1ZmZlciwgKHVuc2lnbmVkIGNoYXIgKilrZXksIGMtPmtleV9zaXplIH07CisgICAgYy0+a2V5ID0gUEsxMV9JbXBvcnRTeW1LZXkoc2xvdCwgQ0tNX0FFU19DVFIsIFBLMTFfT3JpZ2luVW53cmFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENLQV9FTkNSWVBULCAma2V5SXRlbSwgTlVMTCk7CisgICAgUEsxMV9GcmVlU2xvdChzbG90KTsKKworICAgIGlmICghYy0+a2V5KSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfY2lwaGVyX2ZhaWw7CisgICAgfQorCisgICAgcmV0dXJuIChzcnRwX2Vycl9zdGF0dXNfb2spOworfQorCisvKgorICogYWVzX2ljbV9zZXRfaXYoYywgaXYpIHNldHMgdGhlIGNvdW50ZXIgdmFsdWUgdG8gdGhlIGV4b3Igb2YgaXYgd2l0aAorICogdGhlIG9mZnNldAorICovCitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9hZXNfaWNtX25zc19zZXRfaXYodm9pZCAqY3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9jaXBoZXJfZGlyZWN0aW9uX3QgZGlyKQoreworICAgIHNydHBfYWVzX2ljbV9jdHhfdCAqYyA9IChzcnRwX2Flc19pY21fY3R4X3QgKiljdjsKKyAgICB2MTI4X3Qgbm9uY2U7CisKKyAgICAvKiBzZXQgbm9uY2UgKGZvciBhbGlnbm1lbnQpICovCisgICAgdjEyOF9jb3B5X29jdGV0X3N0cmluZygmbm9uY2UsIGl2KTsKKworICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX2Flc19pY20sICJzZXR0aW5nIGl2OiAlcyIsIHYxMjhfaGV4X3N0cmluZygmbm9uY2UpKTsKKworICAgIHYxMjhfeG9yKCZjLT5jb3VudGVyLCAmYy0+b2Zmc2V0LCAmbm9uY2UpOworCisgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfYWVzX2ljbSwgInNldF9jb3VudGVyOiAlcyIsCisgICAgICAgICAgICAgICAgdjEyOF9oZXhfc3RyaW5nKCZjLT5jb3VudGVyKSk7CisKKyAgICAvKiBzZXQgdXAgdGhlIFBLMTEgY29udGV4dCBub3cgdGhhdCB3ZSBoYXZlIGFsbCB0aGUgaW5mbyAqLworICAgIENLX0FFU19DVFJfUEFSQU1TIHBhcmFtOworICAgIHBhcmFtLnVsQ291bnRlckJpdHMgPSAxNjsKKyAgICBtZW1jcHkocGFyYW0uY2IsICZjLT5jb3VudGVyLCAxNik7CisKKyAgICBpZiAoIWMtPmtleSkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbTsKKyAgICB9CisKKyAgICBpZiAoYy0+Y3R4KSB7CisgICAgICAgIFBLMTFfRGVzdHJveUNvbnRleHQoYy0+Y3R4LCBQUl9UUlVFKTsKKyAgICB9CisKKyAgICBTRUNJdGVtIHBhcmFtSXRlbSA9IHsgc2lCdWZmZXIsICh1bnNpZ25lZCBjaGFyICopJnBhcmFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoQ0tfQUVTX0NUUl9QQVJBTVMpIH07CisgICAgYy0+Y3R4ID0gUEsxMV9DcmVhdGVDb250ZXh0QnlTeW1LZXkoQ0tNX0FFU19DVFIsIENLQV9FTkNSWVBULCBjLT5rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhcmFtSXRlbSk7CisgICAgaWYgKCFjLT5jdHgpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19jaXBoZXJfZmFpbDsKKyAgICB9CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBlbmNyeXB0cyBhIGJ1ZmZlciB1c2luZyBBRVMgQ1RSIG1vZGUKKyAqCisgKiBQYXJhbWV0ZXJzOgorICoJYwlDcnlwdG8gY29udGV4dAorICoJYnVmCWRhdGEgdG8gZW5jcnlwdAorICoJZW5jX2xlbglsZW5ndGggb2YgZW5jcnlwdCBidWZmZXIKKyAqLworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IHNydHBfYWVzX2ljbV9uc3NfZW5jcnlwdCh2b2lkICpjdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmVuY19sZW4pCit7CisgICAgc3J0cF9hZXNfaWNtX2N0eF90ICpjID0gKHNydHBfYWVzX2ljbV9jdHhfdCAqKWN2OworCisgICAgaWYgKCFjLT5jdHgpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisgICAgfQorCisgICAgaW50IHJ2ID0KKyAgICAgICAgUEsxMV9DaXBoZXJPcChjLT5jdHgsIGJ1ZiwgKGludCAqKWVuY19sZW4sICplbmNfbGVuLCBidWYsICplbmNfbGVuKTsKKworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1cyA9IChzcnRwX2Vycl9zdGF0dXNfb2spOworICAgIGlmIChydiAhPSBTRUNTdWNjZXNzKSB7CisgICAgICAgIHN0YXR1cyA9IChzcnRwX2Vycl9zdGF0dXNfY2lwaGVyX2ZhaWwpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBOYW1lIG9mIHRoaXMgY3J5cHRvIGVuZ2luZQorICovCitzdGF0aWMgY29uc3QgY2hhciBzcnRwX2Flc19pY21fMTI4X25zc19kZXNjcmlwdGlvbltdID0KKyAgICAiQUVTLTEyOCBjb3VudGVyIG1vZGUgdXNpbmcgTlNTIjsKK3N0YXRpYyBjb25zdCBjaGFyIHNydHBfYWVzX2ljbV8xOTJfbnNzX2Rlc2NyaXB0aW9uW10gPQorICAgICJBRVMtMTkyIGNvdW50ZXIgbW9kZSB1c2luZyBOU1MiOworc3RhdGljIGNvbnN0IGNoYXIgc3J0cF9hZXNfaWNtXzI1Nl9uc3NfZGVzY3JpcHRpb25bXSA9CisgICAgIkFFUy0yNTYgY291bnRlciBtb2RlIHVzaW5nIE5TUyI7CisKKy8qCisgKiBLQVQgdmFsdWVzIGZvciBBRVMgc2VsZi10ZXN0LiAgVGhlc2UKKyAqIHZhbHVlcyBjYW1lIGZyb20gdGhlIGxlZ2FjeSBsaWJzcnRwIGNvZGUuCisgKi8KKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KK3N0YXRpYyBjb25zdCB1aW50OF90IHNydHBfYWVzX2ljbV8xMjhfdGVzdF9jYXNlXzBfa2V5W1NSVFBfQUVTX0lDTV8xMjhfS0VZX0xFTl9XU0FMVF0gPSB7CisgICAgMHgyYiwgMHg3ZSwgMHgxNSwgMHgxNiwgMHgyOCwgMHhhZSwgMHhkMiwgMHhhNiwKKyAgICAweGFiLCAweGY3LCAweDE1LCAweDg4LCAweDA5LCAweGNmLCAweDRmLCAweDNjLAorICAgIDB4ZjAsIDB4ZjEsIDB4ZjIsIDB4ZjMsIDB4ZjQsIDB4ZjUsIDB4ZjYsIDB4ZjcsCisgICAgMHhmOCwgMHhmOSwgMHhmYSwgMHhmYiwgMHhmYywgMHhmZAorfTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgdWludDhfdCBzcnRwX2Flc19pY21fMTI4X3Rlc3RfY2FzZV8wX25vbmNlWzE2XSA9IHsKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKK307CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworLyogY2xhbmctZm9ybWF0IG9mZiAqLworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc3J0cF9hZXNfaWNtXzEyOF90ZXN0X2Nhc2VfMF9wbGFpbnRleHRbMzJdID0gIHsKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorfTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgY29uc3QgdWludDhfdCBzcnRwX2Flc19pY21fMTI4X3Rlc3RfY2FzZV8wX2NpcGhlcnRleHRbMzJdID0geworICAgIDB4ZTAsIDB4M2UsIDB4YWQsIDB4MDksIDB4MzUsIDB4YzksIDB4NWUsIDB4ODAsCisgICAgMHhlMSwgMHg2NiwgMHhiMSwgMHg2ZCwgMHhkOSwgMHgyYiwgMHg0ZSwgMHhiNCwKKyAgICAweGQyLCAweDM1LCAweDEzLCAweDE2LCAweDJiLCAweDAyLCAweGQwLCAweGY3LAorICAgIDB4MmEsIDB4NDMsIDB4YTIsIDB4ZmUsIDB4NGEsIDB4NWYsIDB4OTcsIDB4YWIKK307CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworc3RhdGljIGNvbnN0IHNydHBfY2lwaGVyX3Rlc3RfY2FzZV90IHNydHBfYWVzX2ljbV8xMjhfdGVzdF9jYXNlXzAgPSB7CisgICAgU1JUUF9BRVNfSUNNXzEyOF9LRVlfTEVOX1dTQUxULCAgICAgICAgICAvKiBvY3RldHMgaW4ga2V5ICAgICAgICAgICAgKi8KKyAgICBzcnRwX2Flc19pY21fMTI4X3Rlc3RfY2FzZV8wX2tleSwgICAgICAgIC8qIGtleSAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHNydHBfYWVzX2ljbV8xMjhfdGVzdF9jYXNlXzBfbm9uY2UsICAgICAgLyogcGFja2V0IGluZGV4ICAgICAgICAgICAgICovCisgICAgMzIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvY3RldHMgaW4gcGxhaW50ZXh0ICAgICAgKi8KKyAgICBzcnRwX2Flc19pY21fMTI4X3Rlc3RfY2FzZV8wX3BsYWludGV4dCwgIC8qIHBsYWludGV4dCAgICAgICAgICAgICAgICAqLworICAgIDMyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2N0ZXRzIGluIGNpcGhlcnRleHQgICAgICovCisgICAgc3J0cF9hZXNfaWNtXzEyOF90ZXN0X2Nhc2VfMF9jaXBoZXJ0ZXh0LCAvKiBjaXBoZXJ0ZXh0ICAgICAgICAgICAgICAgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKi8KKyAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gbmV4dCB0ZXN0Y2FzZSAqLworfTsKKworLyoKKyAqIEtBVCB2YWx1ZXMgZm9yIEFFUy0xOTItQ1RSIHNlbGYtdGVzdC4gIFRoZXNlCisgKiB2YWx1ZXMgY2FtZSBmcm9tIHNlY3Rpb24gNyBvZiBSRkMgNjE4OC4KKyAqLworLyogY2xhbmctZm9ybWF0IG9mZiAqLworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc3J0cF9hZXNfaWNtXzE5Ml90ZXN0X2Nhc2VfMF9rZXlbU1JUUF9BRVNfSUNNXzE5Ml9LRVlfTEVOX1dTQUxUXSA9IHsKKyAgICAweGVhLCAweGIyLCAweDM0LCAweDc2LCAweDRlLCAweDUxLCAweDdiLCAweDJkLAorICAgIDB4M2QsIDB4MTYsIDB4MGQsIDB4NTgsIDB4N2QsIDB4OGMsIDB4ODYsIDB4MjEsCisgICAgMHg5NywgMHg0MCwgMHhmNiwgMHg1ZiwgMHg5OSwgMHhiNiwgMHhiYywgMHhmNywKKyAgICAweGYwLCAweGYxLCAweGYyLCAweGYzLCAweGY0LCAweGY1LCAweGY2LCAweGY3LAorICAgIDB4ZjgsIDB4ZjksIDB4ZmEsIDB4ZmIsIDB4ZmMsIDB4ZmQKK307CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworLyogY2xhbmctZm9ybWF0IG9mZiAqLworc3RhdGljIHVpbnQ4X3Qgc3J0cF9hZXNfaWNtXzE5Ml90ZXN0X2Nhc2VfMF9ub25jZVsxNl0gPSB7CisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCit9OworLyogY2xhbmctZm9ybWF0IG9uICovCisKKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KK3N0YXRpYyBjb25zdCB1aW50OF90IHNydHBfYWVzX2ljbV8xOTJfdGVzdF9jYXNlXzBfcGxhaW50ZXh0WzMyXSA9ICB7CisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKK307CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworLyogY2xhbmctZm9ybWF0IG9mZiAqLworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc3J0cF9hZXNfaWNtXzE5Ml90ZXN0X2Nhc2VfMF9jaXBoZXJ0ZXh0WzMyXSA9IHsKKyAgICAweDM1LCAweDA5LCAweDZjLCAweGJhLCAweDQ2LCAweDEwLCAweDAyLCAweDhkLAorICAgIDB4YzEsIDB4YjUsIDB4NzUsIDB4MDMsIDB4ODAsIDB4NGMsIDB4ZTMsIDB4N2MsCisgICAgMHg1ZCwgMHhlOSwgMHg4NiwgMHgyOSwgMHgxZCwgMHhjYywgMHhlMSwgMHg2MSwKKyAgICAweGQ1LCAweDE2LCAweDVlLCAweGM0LCAweDU2LCAweDhmLCAweDVjLCAweDlhCit9OworLyogY2xhbmctZm9ybWF0IG9uICovCisKK3N0YXRpYyBjb25zdCBzcnRwX2NpcGhlcl90ZXN0X2Nhc2VfdCBzcnRwX2Flc19pY21fMTkyX3Rlc3RfY2FzZV8wID0geworICAgIFNSVFBfQUVTX0lDTV8xOTJfS0VZX0xFTl9XU0FMVCwgICAgICAgICAgLyogb2N0ZXRzIGluIGtleSAgICAgICAgICAgICovCisgICAgc3J0cF9hZXNfaWNtXzE5Ml90ZXN0X2Nhc2VfMF9rZXksICAgICAgICAvKiBrZXkgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBzcnRwX2Flc19pY21fMTkyX3Rlc3RfY2FzZV8wX25vbmNlLCAgICAgIC8qIHBhY2tldCBpbmRleCAgICAgICAgICAgICAqLworICAgIDMyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2N0ZXRzIGluIHBsYWludGV4dCAgICAgICovCisgICAgc3J0cF9hZXNfaWNtXzE5Ml90ZXN0X2Nhc2VfMF9wbGFpbnRleHQsICAvKiBwbGFpbnRleHQgICAgICAgICAgICAgICAgKi8KKyAgICAzMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9jdGV0cyBpbiBjaXBoZXJ0ZXh0ICAgICAqLworICAgIHNydHBfYWVzX2ljbV8xOTJfdGVzdF9jYXNlXzBfY2lwaGVydGV4dCwgLyogY2lwaGVydGV4dCAgICAgICAgICAgICAgICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICovCisgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIG5leHQgdGVzdGNhc2UgKi8KK307CisKKy8qCisgKiBLQVQgdmFsdWVzIGZvciBBRVMtMjU2LUNUUiBzZWxmLXRlc3QuICBUaGVzZQorICogdmFsdWVzIGNhbWUgZnJvbSBzZWN0aW9uIDcgb2YgUkZDIDYxODguCisgKi8KKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KK3N0YXRpYyBjb25zdCB1aW50OF90IHNydHBfYWVzX2ljbV8yNTZfdGVzdF9jYXNlXzBfa2V5W1NSVFBfQUVTX0lDTV8yNTZfS0VZX0xFTl9XU0FMVF0gPSB7CisgICAgMHg1NywgMHhmOCwgMHgyZiwgMHhlMywgMHg2MSwgMHgzZiwgMHhkMSwgMHg3MCwKKyAgICAweGE4LCAweDVlLCAweGM5LCAweDNjLCAweDQwLCAweGIxLCAweGYwLCAweDkyLAorICAgIDB4MmUsIDB4YzQsIDB4Y2IsIDB4MGQsIDB4YzAsIDB4MjUsIDB4YjUsIDB4ODIsCisgICAgMHg3MiwgMHgxNCwgMHg3YywgMHhjNCwgMHgzOCwgMHg5NCwgMHg0YSwgMHg5OCwKKyAgICAweGYwLCAweGYxLCAweGYyLCAweGYzLCAweGY0LCAweGY1LCAweGY2LCAweGY3LAorICAgIDB4ZjgsIDB4ZjksIDB4ZmEsIDB4ZmIsIDB4ZmMsIDB4ZmQKK307CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworLyogY2xhbmctZm9ybWF0IG9mZiAqLworc3RhdGljIHVpbnQ4X3Qgc3J0cF9hZXNfaWNtXzI1Nl90ZXN0X2Nhc2VfMF9ub25jZVsxNl0gPSB7CisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCit9OworLyogY2xhbmctZm9ybWF0IG9uICovCisKKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KK3N0YXRpYyBjb25zdCB1aW50OF90IHNydHBfYWVzX2ljbV8yNTZfdGVzdF9jYXNlXzBfcGxhaW50ZXh0WzMyXSA9ICB7CisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKK307CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworLyogY2xhbmctZm9ybWF0IG9mZiAqLworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc3J0cF9hZXNfaWNtXzI1Nl90ZXN0X2Nhc2VfMF9jaXBoZXJ0ZXh0WzMyXSA9IHsKKyAgICAweDkyLCAweGJkLCAweGQyLCAweDhhLCAweDkzLCAweGMzLCAweGY1LCAweDI1LAorICAgIDB4MTEsIDB4YzYsIDB4NzcsIDB4ZDAsIDB4OGIsIDB4NTUsIDB4MTUsIDB4YTQsCisgICAgMHg5ZCwgMHhhNywgMHgxYiwgMHgyMywgMHg3OCwgMHhhOCwgMHg1NCwgMHhmNiwKKyAgICAweDcwLCAweDUwLCAweDc1LCAweDZkLCAweGVkLCAweDE2LCAweDViLCAweGFjCit9OworLyogY2xhbmctZm9ybWF0IG9uICovCisKK3N0YXRpYyBjb25zdCBzcnRwX2NpcGhlcl90ZXN0X2Nhc2VfdCBzcnRwX2Flc19pY21fMjU2X3Rlc3RfY2FzZV8wID0geworICAgIFNSVFBfQUVTX0lDTV8yNTZfS0VZX0xFTl9XU0FMVCwgICAgICAgICAgLyogb2N0ZXRzIGluIGtleSAgICAgICAgICAgICovCisgICAgc3J0cF9hZXNfaWNtXzI1Nl90ZXN0X2Nhc2VfMF9rZXksICAgICAgICAvKiBrZXkgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBzcnRwX2Flc19pY21fMjU2X3Rlc3RfY2FzZV8wX25vbmNlLCAgICAgIC8qIHBhY2tldCBpbmRleCAgICAgICAgICAgICAqLworICAgIDMyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2N0ZXRzIGluIHBsYWludGV4dCAgICAgICovCisgICAgc3J0cF9hZXNfaWNtXzI1Nl90ZXN0X2Nhc2VfMF9wbGFpbnRleHQsICAvKiBwbGFpbnRleHQgICAgICAgICAgICAgICAgKi8KKyAgICAzMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9jdGV0cyBpbiBjaXBoZXJ0ZXh0ICAgICAqLworICAgIHNydHBfYWVzX2ljbV8yNTZfdGVzdF9jYXNlXzBfY2lwaGVydGV4dCwgLyogY2lwaGVydGV4dCAgICAgICAgICAgICAgICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICovCisgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIG5leHQgdGVzdGNhc2UgKi8KK307CisKKy8qCisgKiBUaGlzIGlzIHRoZSBmdW5jdGlvbiB0YWJsZSBmb3IgdGhpcyBjcnlwdG8gZW5naW5lLgorICogbm90ZTogdGhlIGVuY3J5cHQgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIHRoZSBkZWNyeXB0IGZ1bmN0aW9uCisgKi8KK2NvbnN0IHNydHBfY2lwaGVyX3R5cGVfdCBzcnRwX2Flc19pY21fMTI4ID0geworICAgIHNydHBfYWVzX2ljbV9uc3NfYWxsb2MsICAgICAgICAgICAvKiAqLworICAgIHNydHBfYWVzX2ljbV9uc3NfZGVhbGxvYywgICAgICAgICAvKiAqLworICAgIHNydHBfYWVzX2ljbV9uc3NfY29udGV4dF9pbml0LCAgICAvKiAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXRfYWFkICovCisgICAgc3J0cF9hZXNfaWNtX25zc19lbmNyeXB0LCAgICAgICAgIC8qICovCisgICAgc3J0cF9hZXNfaWNtX25zc19lbmNyeXB0LCAgICAgICAgIC8qICovCisgICAgc3J0cF9hZXNfaWNtX25zc19zZXRfaXYsICAgICAgICAgIC8qICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdldF90YWcgKi8KKyAgICBzcnRwX2Flc19pY21fMTI4X25zc19kZXNjcmlwdGlvbiwgLyogKi8KKyAgICAmc3J0cF9hZXNfaWNtXzEyOF90ZXN0X2Nhc2VfMCwgICAgLyogKi8KKyAgICBTUlRQX0FFU19JQ01fMTI4ICAgICAgICAgICAgICAgICAgLyogKi8KK307CisKKy8qCisgKiBUaGlzIGlzIHRoZSBmdW5jdGlvbiB0YWJsZSBmb3IgdGhpcyBjcnlwdG8gZW5naW5lLgorICogbm90ZTogdGhlIGVuY3J5cHQgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIHRoZSBkZWNyeXB0IGZ1bmN0aW9uCisgKi8KK2NvbnN0IHNydHBfY2lwaGVyX3R5cGVfdCBzcnRwX2Flc19pY21fMTkyID0geworICAgIHNydHBfYWVzX2ljbV9uc3NfYWxsb2MsICAgICAgICAgICAvKiAqLworICAgIHNydHBfYWVzX2ljbV9uc3NfZGVhbGxvYywgICAgICAgICAvKiAqLworICAgIHNydHBfYWVzX2ljbV9uc3NfY29udGV4dF9pbml0LCAgICAvKiAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXRfYWFkICovCisgICAgc3J0cF9hZXNfaWNtX25zc19lbmNyeXB0LCAgICAgICAgIC8qICovCisgICAgc3J0cF9hZXNfaWNtX25zc19lbmNyeXB0LCAgICAgICAgIC8qICovCisgICAgc3J0cF9hZXNfaWNtX25zc19zZXRfaXYsICAgICAgICAgIC8qICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdldF90YWcgKi8KKyAgICBzcnRwX2Flc19pY21fMTkyX25zc19kZXNjcmlwdGlvbiwgLyogKi8KKyAgICAmc3J0cF9hZXNfaWNtXzE5Ml90ZXN0X2Nhc2VfMCwgICAgLyogKi8KKyAgICBTUlRQX0FFU19JQ01fMTkyICAgICAgICAgICAgICAgICAgLyogKi8KK307CisKKy8qCisgKiBUaGlzIGlzIHRoZSBmdW5jdGlvbiB0YWJsZSBmb3IgdGhpcyBjcnlwdG8gZW5naW5lLgorICogbm90ZTogdGhlIGVuY3J5cHQgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIHRoZSBkZWNyeXB0IGZ1bmN0aW9uCisgKi8KK2NvbnN0IHNydHBfY2lwaGVyX3R5cGVfdCBzcnRwX2Flc19pY21fMjU2ID0geworICAgIHNydHBfYWVzX2ljbV9uc3NfYWxsb2MsICAgICAgICAgICAvKiAqLworICAgIHNydHBfYWVzX2ljbV9uc3NfZGVhbGxvYywgICAgICAgICAvKiAqLworICAgIHNydHBfYWVzX2ljbV9uc3NfY29udGV4dF9pbml0LCAgICAvKiAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXRfYWFkICovCisgICAgc3J0cF9hZXNfaWNtX25zc19lbmNyeXB0LCAgICAgICAgIC8qICovCisgICAgc3J0cF9hZXNfaWNtX25zc19lbmNyeXB0LCAgICAgICAgIC8qICovCisgICAgc3J0cF9hZXNfaWNtX25zc19zZXRfaXYsICAgICAgICAgIC8qICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdldF90YWcgKi8KKyAgICBzcnRwX2Flc19pY21fMjU2X25zc19kZXNjcmlwdGlvbiwgLyogKi8KKyAgICAmc3J0cF9hZXNfaWNtXzI1Nl90ZXN0X2Nhc2VfMCwgICAgLyogKi8KKyAgICBTUlRQX0FFU19JQ01fMjU2ICAgICAgICAgICAgICAgICAgLyogKi8KK307CmRpZmYgLS1naXQgYS9jcnlwdG8vY2lwaGVyL2Flc19pY21fb3NzbC5jIGIvY3J5cHRvL2NpcGhlci9hZXNfaWNtX29zc2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmI3MjlhCi0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL2NpcGhlci9hZXNfaWNtX29zc2wuYwpAQCAtMCwwICsxLDU0MSBAQAorLyoKKyAqIGFlc19pY21fb3NzbC5jCisgKgorICogQUVTIEludGVnZXIgQ291bnRlciBNb2RlCisgKgorICogSm9obiBBLiBGb2xleQorICogQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqIDIvMjQvMjAxMjogIFRoaXMgbW9kdWxlIHdhcyBtb2RpZmllZCB0byB1c2UgQ2lzY29TU0wgZm9yIEFFUyBjb3VudGVyCisgKiAgICAgICAgICAgICBtb2RlLiAgRWRkeSBMZW0gY29udHJpYnV0ZWQgdGhlIGNvZGUgdG8gYWxsb3cgdGhpcy4KKyAqCisgKiAxMi8yMC8yMDEyOiBBZGRlZCBzdXBwb3J0IGZvciBBRVMtMTkyIGFuZCBBRVMtMjU2LgorICovCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTcsIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyNpbmNsdWRlICJhZXNfaWNtX2V4dC5oIgorI2luY2x1ZGUgImNyeXB0b190eXBlcy5oIgorI2luY2x1ZGUgImVyci5oIiAvKiBmb3Igc3J0cF9kZWJ1ZyAqLworI2luY2x1ZGUgImFsbG9jLmgiCisjaW5jbHVkZSAiY2lwaGVyX3R5cGVzLmgiCisKK3NydHBfZGVidWdfbW9kdWxlX3Qgc3J0cF9tb2RfYWVzX2ljbSA9IHsKKyAgICAwLCAgICAgICAgICAgICAvKiBkZWJ1Z2dpbmcgaXMgb2ZmIGJ5IGRlZmF1bHQgKi8KKyAgICAiYWVzIGljbSBvc3NsIiAvKiBwcmludGFibGUgbW9kdWxlIG5hbWUgICAgICAgKi8KK307CisKKy8qCisgKiBpbnRlZ2VyIGNvdW50ZXIgbW9kZSB3b3JrcyBhcyBmb2xsb3dzOgorICoKKyAqIDE2IGJpdHMKKyAqIDwtLS0tLT4KKyAqICstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKworICogfCAgICAgICAgICAgbm9uY2UgICAgICAgICAgIHwgICAgcGFja2V0IGluZGV4ICAgIHwgIGN0ciB8LS0tKworICogKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rICAgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rICAgdgorICogfCAgICAgICAgICAgICAgICAgICAgICBzYWx0ICAgICAgICAgICAgICAgICAgICAgIHwwMDAwMDB8LT4oKykKKyAqICstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKyAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZW5jcnlwdCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKyAgIHwKKyAqIHwgICAgICAgICAgICAgICAgICAgIGtleXN0cmVhbSBibG9jayAgICAgICAgICAgICAgICAgICAgfDwtLSsKKyAqICstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKworICoKKyAqIEFsbCBmaWVsZHMgYXJlIGJpZy1lbmRpYW4KKyAqCisgKiBjdHIgaXMgdGhlIGJsb2NrIGNvdW50ZXIsIHdoaWNoIGluY3JlbWVudHMgZnJvbSB6ZXJvIGZvcgorICogZWFjaCBwYWNrZXQgKDE2IGJpdHMgd2lkZSkKKyAqCisgKiBwYWNrZXQgaW5kZXggaXMgZGlzdGluY3QgZm9yIGVhY2ggcGFja2V0ICg0OCBiaXRzIHdpZGUpCisgKgorICogbm9uY2UgY2FuIGJlIGRpc3RpbmN0IGFjcm9zcyBtYW55IHVzZXMgb2YgdGhlIHNhbWUga2V5LCBvcgorICogY2FuIGJlIGEgZml4ZWQgdmFsdWUgcGVyIGtleSwgb3IgY2FuIGJlIHBlci1wYWNrZXQgcmFuZG9tbmVzcworICogKDY0IGJpdHMpCisgKgorICovCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzIGNyeXB0byBlbmdpbmUuCisgKiBUaGUga2V5X2xlbiBwYXJhbWV0ZXIgc2hvdWxkIGJlIG9uZSBvZiAzMCwgMzgsIG9yIDQ2IGZvcgorICogQUVTLTEyOCwgQUVTLTE5MiwgYW5kIEFFUy0yNTYgcmVzcGVjdGl2ZWx5LiAgTm90ZSwgdGhpcyBrZXlfbGVuCisgKiB2YWx1ZSBpcyBpbmZsYXRlZCwgYXMgaXQgYWxzbyBhY2NvdW50cyBmb3IgdGhlIDExMiBiaXQgc2FsdAorICogdmFsdWUuICBUaGUgdGxlbiBhcmd1bWVudCBpcyBmb3IgdGhlIEFFQUQgdGFnIGxlbmd0aCwgd2hpY2gKKyAqIGlzbid0IHVzZWQgaW4gY291bnRlciBtb2RlLgorICovCitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9hZXNfaWNtX29wZW5zc2xfYWxsb2Moc3J0cF9jaXBoZXJfdCAqKmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtleV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRsZW4pCit7CisgICAgc3J0cF9hZXNfaWNtX2N0eF90ICppY207CisKKyAgICBkZWJ1Z19wcmludChzcnRwX21vZF9hZXNfaWNtLCAiYWxsb2NhdGluZyBjaXBoZXIgd2l0aCBrZXkgbGVuZ3RoICVkIiwKKyAgICAgICAgICAgICAgICBrZXlfbGVuKTsKKworICAgIC8qCisgICAgICogVmVyaWZ5IHRoZSBrZXlfbGVuIGlzIHZhbGlkIGZvciBvbmUgb2Y6IEFFUy0xMjgvMTkyLzI1NgorICAgICAqLworICAgIGlmIChrZXlfbGVuICE9IFNSVFBfQUVTX0lDTV8xMjhfS0VZX0xFTl9XU0FMVCAmJgorICAgICAgICBrZXlfbGVuICE9IFNSVFBfQUVTX0lDTV8xOTJfS0VZX0xFTl9XU0FMVCAmJgorICAgICAgICBrZXlfbGVuICE9IFNSVFBfQUVTX0lDTV8yNTZfS0VZX0xFTl9XU0FMVCkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbTsKKyAgICB9CisKKyAgICAvKiBhbGxvY2F0ZSBtZW1vcnkgYSBjaXBoZXIgb2YgdHlwZSBhZXNfaWNtICovCisgICAgKmMgPSAoc3J0cF9jaXBoZXJfdCAqKXNydHBfY3J5cHRvX2FsbG9jKHNpemVvZihzcnRwX2NpcGhlcl90KSk7CisgICAgaWYgKCpjID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19hbGxvY19mYWlsOworICAgIH0KKworICAgIGljbSA9IChzcnRwX2Flc19pY21fY3R4X3QgKilzcnRwX2NyeXB0b19hbGxvYyhzaXplb2Yoc3J0cF9hZXNfaWNtX2N0eF90KSk7CisgICAgaWYgKGljbSA9PSBOVUxMKSB7CisgICAgICAgIHNydHBfY3J5cHRvX2ZyZWUoKmMpOworICAgICAgICAqYyA9IE5VTEw7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYWxsb2NfZmFpbDsKKyAgICB9CisKKyAgICBpY20tPmN0eCA9IEVWUF9DSVBIRVJfQ1RYX25ldygpOworICAgIGlmIChpY20tPmN0eCA9PSBOVUxMKSB7CisgICAgICAgIHNydHBfY3J5cHRvX2ZyZWUoaWNtKTsKKyAgICAgICAgc3J0cF9jcnlwdG9fZnJlZSgqYyk7CisgICAgICAgICpjID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19hbGxvY19mYWlsOworICAgIH0KKworICAgIC8qIHNldCBwb2ludGVycyAqLworICAgICgqYyktPnN0YXRlID0gaWNtOworCisgICAgLyogc2V0dXAgY2lwaGVyIHBhcmFtZXRlcnMgKi8KKyAgICBzd2l0Y2ggKGtleV9sZW4pIHsKKyAgICBjYXNlIFNSVFBfQUVTX0lDTV8xMjhfS0VZX0xFTl9XU0FMVDoKKyAgICAgICAgKCpjKS0+YWxnb3JpdGhtID0gU1JUUF9BRVNfSUNNXzEyODsKKyAgICAgICAgKCpjKS0+dHlwZSA9ICZzcnRwX2Flc19pY21fMTI4OworICAgICAgICBpY20tPmtleV9zaXplID0gU1JUUF9BRVNfMTI4X0tFWV9MRU47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU1JUUF9BRVNfSUNNXzE5Ml9LRVlfTEVOX1dTQUxUOgorICAgICAgICAoKmMpLT5hbGdvcml0aG0gPSBTUlRQX0FFU19JQ01fMTkyOworICAgICAgICAoKmMpLT50eXBlID0gJnNydHBfYWVzX2ljbV8xOTI7CisgICAgICAgIGljbS0+a2V5X3NpemUgPSBTUlRQX0FFU18xOTJfS0VZX0xFTjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTUlRQX0FFU19JQ01fMjU2X0tFWV9MRU5fV1NBTFQ6CisgICAgICAgICgqYyktPmFsZ29yaXRobSA9IFNSVFBfQUVTX0lDTV8yNTY7CisgICAgICAgICgqYyktPnR5cGUgPSAmc3J0cF9hZXNfaWNtXzI1NjsKKyAgICAgICAgaWNtLT5rZXlfc2l6ZSA9IFNSVFBfQUVTXzI1Nl9LRVlfTEVOOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvKiBzZXQga2V5IHNpemUgICAgICAgICovCisgICAgKCpjKS0+a2V5X2xlbiA9IGtleV9sZW47CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBkZWFsbG9jYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGlzIGVuZ2luZQorICovCitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9hZXNfaWNtX29wZW5zc2xfZGVhbGxvYyhzcnRwX2NpcGhlcl90ICpjKQoreworICAgIHNydHBfYWVzX2ljbV9jdHhfdCAqY3R4OworCisgICAgaWYgKGMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEZyZWUgdGhlIEVWUCBjb250ZXh0CisgICAgICovCisgICAgY3R4ID0gKHNydHBfYWVzX2ljbV9jdHhfdCAqKWMtPnN0YXRlOworICAgIGlmIChjdHggIT0gTlVMTCkgeworICAgICAgICBFVlBfQ0lQSEVSX0NUWF9mcmVlKGN0eC0+Y3R4KTsKKyAgICAgICAgLyogemVyb2l6ZSB0aGUga2V5IG1hdGVyaWFsICovCisgICAgICAgIG9jdGV0X3N0cmluZ19zZXRfdG9femVybyhjdHgsIHNpemVvZihzcnRwX2Flc19pY21fY3R4X3QpKTsKKyAgICAgICAgc3J0cF9jcnlwdG9fZnJlZShjdHgpOworICAgIH0KKworICAgIC8qIGZyZWUgbWVtb3J5ICovCisgICAgc3J0cF9jcnlwdG9fZnJlZShjKTsKKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7Cit9CisKKy8qCisgKiBhZXNfaWNtX29wZW5zc2xfY29udGV4dF9pbml0KC4uLikgaW5pdGlhbGl6ZXMgdGhlIGFlc19pY21fY29udGV4dAorICogdXNpbmcgdGhlIHZhbHVlIGluIGtleVtdLgorICoKKyAqIHRoZSBrZXkgaXMgdGhlIHNlY3JldCBrZXkKKyAqCisgKiB0aGUgc2FsdCBpcyB1bnByZWRpY3RhYmxlIChidXQgbm90IG5lY2Vzc2FyaWx5IHNlY3JldCkgZGF0YSB3aGljaAorICogcmFuZG9taXplcyB0aGUgc3RhcnRpbmcgcG9pbnQgaW4gdGhlIGtleXN0cmVhbQorICovCitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9hZXNfaWNtX29wZW5zc2xfY29udGV4dF9pbml0KHZvaWQgKmN2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXkpCit7CisgICAgc3J0cF9hZXNfaWNtX2N0eF90ICpjID0gKHNydHBfYWVzX2ljbV9jdHhfdCAqKWN2OworICAgIGNvbnN0IEVWUF9DSVBIRVIgKmV2cDsKKworICAgIC8qCisgICAgICogc2V0IGNvdW50ZXIgYW5kIGluaXRpYWwgdmFsdWVzIHRvICdvZmZzZXQnIHZhbHVlLCBiZWluZyBjYXJlZnVsIG5vdCB0bworICAgICAqIGdvIHBhc3QgdGhlIGVuZCBvZiB0aGUga2V5IGJ1ZmZlcgorICAgICAqLworICAgIHYxMjhfc2V0X3RvX3plcm8oJmMtPmNvdW50ZXIpOworICAgIHYxMjhfc2V0X3RvX3plcm8oJmMtPm9mZnNldCk7CisgICAgbWVtY3B5KCZjLT5jb3VudGVyLCBrZXkgKyBjLT5rZXlfc2l6ZSwgU1JUUF9TQUxUX0xFTik7CisgICAgbWVtY3B5KCZjLT5vZmZzZXQsIGtleSArIGMtPmtleV9zaXplLCBTUlRQX1NBTFRfTEVOKTsKKworICAgIC8qIGZvcmNlIGxhc3QgdHdvIG9jdGV0cyBvZiB0aGUgb2Zmc2V0IHRvIHplcm8gKGZvciBzcnRwIGNvbXBhdGliaWxpdHkpICovCisgICAgYy0+b2Zmc2V0LnY4W1NSVFBfU0FMVF9MRU5dID0gYy0+b2Zmc2V0LnY4W1NSVFBfU0FMVF9MRU4gKyAxXSA9IDA7CisgICAgYy0+Y291bnRlci52OFtTUlRQX1NBTFRfTEVOXSA9IGMtPmNvdW50ZXIudjhbU1JUUF9TQUxUX0xFTiArIDFdID0gMDsKKworICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX2Flc19pY20sICJrZXk6ICAlcyIsCisgICAgICAgICAgICAgICAgc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZyhrZXksIGMtPmtleV9zaXplKSk7CisgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfYWVzX2ljbSwgIm9mZnNldDogJXMiLCB2MTI4X2hleF9zdHJpbmcoJmMtPm9mZnNldCkpOworCisgICAgc3dpdGNoIChjLT5rZXlfc2l6ZSkgeworICAgIGNhc2UgU1JUUF9BRVNfMjU2X0tFWV9MRU46CisgICAgICAgIGV2cCA9IEVWUF9hZXNfMjU2X2N0cigpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNSVFBfQUVTXzE5Ml9LRVlfTEVOOgorICAgICAgICBldnAgPSBFVlBfYWVzXzE5Ml9jdHIoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTUlRQX0FFU18xMjhfS0VZX0xFTjoKKyAgICAgICAgZXZwID0gRVZQX2Flc18xMjhfY3RyKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYmFkX3BhcmFtOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKGMtPmN0eCk7CisgICAgaWYgKCFFVlBfRW5jcnlwdEluaXRfZXgoYy0+Y3R4LCBldnAsIE5VTEwsIGtleSwgTlVMTCkpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19mYWlsOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7CisgICAgfQorCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKworLyoKKyAqIGFlc19pY21fc2V0X2l2KGMsIGl2KSBzZXRzIHRoZSBjb3VudGVyIHZhbHVlIHRvIHRoZSBleG9yIG9mIGl2IHdpdGgKKyAqIHRoZSBvZmZzZXQKKyAqLworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IHNydHBfYWVzX2ljbV9vcGVuc3NsX3NldF9pdigKKyAgICB2b2lkICpjdiwKKyAgICB1aW50OF90ICppdiwKKyAgICBzcnRwX2NpcGhlcl9kaXJlY3Rpb25fdCBkaXIpCit7CisgICAgc3J0cF9hZXNfaWNtX2N0eF90ICpjID0gKHNydHBfYWVzX2ljbV9jdHhfdCAqKWN2OworICAgIHYxMjhfdCBub25jZTsKKworICAgIC8qIHNldCBub25jZSAoZm9yIGFsaWdubWVudCkgKi8KKyAgICB2MTI4X2NvcHlfb2N0ZXRfc3RyaW5nKCZub25jZSwgaXYpOworCisgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfYWVzX2ljbSwgInNldHRpbmcgaXY6ICVzIiwgdjEyOF9oZXhfc3RyaW5nKCZub25jZSkpOworCisgICAgdjEyOF94b3IoJmMtPmNvdW50ZXIsICZjLT5vZmZzZXQsICZub25jZSk7CisKKyAgICBkZWJ1Z19wcmludChzcnRwX21vZF9hZXNfaWNtLCAic2V0X2NvdW50ZXI6ICVzIiwKKyAgICAgICAgICAgICAgICB2MTI4X2hleF9zdHJpbmcoJmMtPmNvdW50ZXIpKTsKKworICAgIGlmICghRVZQX0VuY3J5cHRJbml0X2V4KGMtPmN0eCwgTlVMTCwgTlVMTCwgTlVMTCwgYy0+Y291bnRlci52OCkpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19mYWlsOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7CisgICAgfQorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBlbmNyeXB0cyBhIGJ1ZmZlciB1c2luZyBBRVMgQ1RSIG1vZGUKKyAqCisgKiBQYXJhbWV0ZXJzOgorICoJYwlDcnlwdG8gY29udGV4dAorICoJYnVmCWRhdGEgdG8gZW5jcnlwdAorICoJZW5jX2xlbglsZW5ndGggb2YgZW5jcnlwdCBidWZmZXIKKyAqLworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IHNydHBfYWVzX2ljbV9vcGVuc3NsX2VuY3J5cHQodm9pZCAqY3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmVuY19sZW4pCit7CisgICAgc3J0cF9hZXNfaWNtX2N0eF90ICpjID0gKHNydHBfYWVzX2ljbV9jdHhfdCAqKWN2OworICAgIGludCBsZW4gPSAwOworCisgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfYWVzX2ljbSwgInJzMDogJXMiLCB2MTI4X2hleF9zdHJpbmcoJmMtPmNvdW50ZXIpKTsKKworICAgIGlmICghRVZQX0VuY3J5cHRVcGRhdGUoYy0+Y3R4LCBidWYsICZsZW4sIGJ1ZiwgKmVuY19sZW4pKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfY2lwaGVyX2ZhaWw7CisgICAgfQorICAgICplbmNfbGVuID0gbGVuOworCisgICAgaWYgKCFFVlBfRW5jcnlwdEZpbmFsX2V4KGMtPmN0eCwgYnVmLCAmbGVuKSkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2NpcGhlcl9mYWlsOworICAgIH0KKyAgICAqZW5jX2xlbiArPSBsZW47CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOworfQorCisvKgorICogTmFtZSBvZiB0aGlzIGNyeXB0byBlbmdpbmUKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgc3J0cF9hZXNfaWNtXzEyOF9vcGVuc3NsX2Rlc2NyaXB0aW9uW10gPQorICAgICJBRVMtMTI4IGNvdW50ZXIgbW9kZSB1c2luZyBvcGVuc3NsIjsKK3N0YXRpYyBjb25zdCBjaGFyIHNydHBfYWVzX2ljbV8xOTJfb3BlbnNzbF9kZXNjcmlwdGlvbltdID0KKyAgICAiQUVTLTE5MiBjb3VudGVyIG1vZGUgdXNpbmcgb3BlbnNzbCI7CitzdGF0aWMgY29uc3QgY2hhciBzcnRwX2Flc19pY21fMjU2X29wZW5zc2xfZGVzY3JpcHRpb25bXSA9CisgICAgIkFFUy0yNTYgY291bnRlciBtb2RlIHVzaW5nIG9wZW5zc2wiOworCisvKgorICogS0FUIHZhbHVlcyBmb3IgQUVTIHNlbGYtdGVzdC4gIFRoZXNlCisgKiB2YWx1ZXMgY2FtZSBmcm9tIHRoZSBsZWdhY3kgbGlic3J0cCBjb2RlLgorICovCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgY29uc3QgdWludDhfdCBzcnRwX2Flc19pY21fMTI4X3Rlc3RfY2FzZV8wX2tleVtTUlRQX0FFU19JQ01fMTI4X0tFWV9MRU5fV1NBTFRdID0geworICAgIDB4MmIsIDB4N2UsIDB4MTUsIDB4MTYsIDB4MjgsIDB4YWUsIDB4ZDIsIDB4YTYsCisgICAgMHhhYiwgMHhmNywgMHgxNSwgMHg4OCwgMHgwOSwgMHhjZiwgMHg0ZiwgMHgzYywKKyAgICAweGYwLCAweGYxLCAweGYyLCAweGYzLCAweGY0LCAweGY1LCAweGY2LCAweGY3LAorICAgIDB4ZjgsIDB4ZjksIDB4ZmEsIDB4ZmIsIDB4ZmMsIDB4ZmQKK307CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworLyogY2xhbmctZm9ybWF0IG9mZiAqLworc3RhdGljIHVpbnQ4X3Qgc3J0cF9hZXNfaWNtXzEyOF90ZXN0X2Nhc2VfMF9ub25jZVsxNl0gPSB7CisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCit9OworLyogY2xhbmctZm9ybWF0IG9uICovCisKKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KK3N0YXRpYyBjb25zdCB1aW50OF90IHNydHBfYWVzX2ljbV8xMjhfdGVzdF9jYXNlXzBfcGxhaW50ZXh0WzMyXSA9ICB7CisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKK307CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworLyogY2xhbmctZm9ybWF0IG9mZiAqLworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc3J0cF9hZXNfaWNtXzEyOF90ZXN0X2Nhc2VfMF9jaXBoZXJ0ZXh0WzMyXSA9IHsKKyAgICAweGUwLCAweDNlLCAweGFkLCAweDA5LCAweDM1LCAweGM5LCAweDVlLCAweDgwLAorICAgIDB4ZTEsIDB4NjYsIDB4YjEsIDB4NmQsIDB4ZDksIDB4MmIsIDB4NGUsIDB4YjQsCisgICAgMHhkMiwgMHgzNSwgMHgxMywgMHgxNiwgMHgyYiwgMHgwMiwgMHhkMCwgMHhmNywKKyAgICAweDJhLCAweDQzLCAweGEyLCAweGZlLCAweDRhLCAweDVmLCAweDk3LCAweGFiCit9OworLyogY2xhbmctZm9ybWF0IG9uICovCisKK3N0YXRpYyBjb25zdCBzcnRwX2NpcGhlcl90ZXN0X2Nhc2VfdCBzcnRwX2Flc19pY21fMTI4X3Rlc3RfY2FzZV8wID0geworICAgIFNSVFBfQUVTX0lDTV8xMjhfS0VZX0xFTl9XU0FMVCwgICAgICAgICAgLyogb2N0ZXRzIGluIGtleSAgICAgICAgICAgICovCisgICAgc3J0cF9hZXNfaWNtXzEyOF90ZXN0X2Nhc2VfMF9rZXksICAgICAgICAvKiBrZXkgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBzcnRwX2Flc19pY21fMTI4X3Rlc3RfY2FzZV8wX25vbmNlLCAgICAgIC8qIHBhY2tldCBpbmRleCAgICAgICAgICAgICAqLworICAgIDMyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2N0ZXRzIGluIHBsYWludGV4dCAgICAgICovCisgICAgc3J0cF9hZXNfaWNtXzEyOF90ZXN0X2Nhc2VfMF9wbGFpbnRleHQsICAvKiBwbGFpbnRleHQgICAgICAgICAgICAgICAgKi8KKyAgICAzMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9jdGV0cyBpbiBjaXBoZXJ0ZXh0ICAgICAqLworICAgIHNydHBfYWVzX2ljbV8xMjhfdGVzdF9jYXNlXzBfY2lwaGVydGV4dCwgLyogY2lwaGVydGV4dCAgICAgICAgICAgICAgICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICovCisgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIG5leHQgdGVzdGNhc2UgKi8KK307CisKKy8qCisgKiBLQVQgdmFsdWVzIGZvciBBRVMtMTkyLUNUUiBzZWxmLXRlc3QuICBUaGVzZQorICogdmFsdWVzIGNhbWUgZnJvbSBzZWN0aW9uIDcgb2YgUkZDIDYxODguCisgKi8KKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KK3N0YXRpYyBjb25zdCB1aW50OF90IHNydHBfYWVzX2ljbV8xOTJfdGVzdF9jYXNlXzBfa2V5W1NSVFBfQUVTX0lDTV8xOTJfS0VZX0xFTl9XU0FMVF0gPSB7CisgICAgMHhlYSwgMHhiMiwgMHgzNCwgMHg3NiwgMHg0ZSwgMHg1MSwgMHg3YiwgMHgyZCwKKyAgICAweDNkLCAweDE2LCAweDBkLCAweDU4LCAweDdkLCAweDhjLCAweDg2LCAweDIxLAorICAgIDB4OTcsIDB4NDAsIDB4ZjYsIDB4NWYsIDB4OTksIDB4YjYsIDB4YmMsIDB4ZjcsCisgICAgMHhmMCwgMHhmMSwgMHhmMiwgMHhmMywgMHhmNCwgMHhmNSwgMHhmNiwgMHhmNywKKyAgICAweGY4LCAweGY5LCAweGZhLCAweGZiLCAweGZjLCAweGZkCit9OworLyogY2xhbmctZm9ybWF0IG9uICovCisKKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KK3N0YXRpYyB1aW50OF90IHNydHBfYWVzX2ljbV8xOTJfdGVzdF9jYXNlXzBfbm9uY2VbMTZdID0geworICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorfTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgY29uc3QgdWludDhfdCBzcnRwX2Flc19pY21fMTkyX3Rlc3RfY2FzZV8wX3BsYWludGV4dFszMl0gPSAgeworICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCit9OworLyogY2xhbmctZm9ybWF0IG9uICovCisKKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KK3N0YXRpYyBjb25zdCB1aW50OF90IHNydHBfYWVzX2ljbV8xOTJfdGVzdF9jYXNlXzBfY2lwaGVydGV4dFszMl0gPSB7CisgICAgMHgzNSwgMHgwOSwgMHg2YywgMHhiYSwgMHg0NiwgMHgxMCwgMHgwMiwgMHg4ZCwKKyAgICAweGMxLCAweGI1LCAweDc1LCAweDAzLCAweDgwLCAweDRjLCAweGUzLCAweDdjLAorICAgIDB4NWQsIDB4ZTksIDB4ODYsIDB4MjksIDB4MWQsIDB4Y2MsIDB4ZTEsIDB4NjEsCisgICAgMHhkNSwgMHgxNiwgMHg1ZSwgMHhjNCwgMHg1NiwgMHg4ZiwgMHg1YywgMHg5YQorfTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworCitzdGF0aWMgY29uc3Qgc3J0cF9jaXBoZXJfdGVzdF9jYXNlX3Qgc3J0cF9hZXNfaWNtXzE5Ml90ZXN0X2Nhc2VfMCA9IHsKKyAgICBTUlRQX0FFU19JQ01fMTkyX0tFWV9MRU5fV1NBTFQsICAgICAgICAgIC8qIG9jdGV0cyBpbiBrZXkgICAgICAgICAgICAqLworICAgIHNydHBfYWVzX2ljbV8xOTJfdGVzdF9jYXNlXzBfa2V5LCAgICAgICAgLyoga2V5ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgc3J0cF9hZXNfaWNtXzE5Ml90ZXN0X2Nhc2VfMF9ub25jZSwgICAgICAvKiBwYWNrZXQgaW5kZXggICAgICAgICAgICAgKi8KKyAgICAzMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9jdGV0cyBpbiBwbGFpbnRleHQgICAgICAqLworICAgIHNydHBfYWVzX2ljbV8xOTJfdGVzdF9jYXNlXzBfcGxhaW50ZXh0LCAgLyogcGxhaW50ZXh0ICAgICAgICAgICAgICAgICovCisgICAgMzIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvY3RldHMgaW4gY2lwaGVydGV4dCAgICAgKi8KKyAgICBzcnRwX2Flc19pY21fMTkyX3Rlc3RfY2FzZV8wX2NpcGhlcnRleHQsIC8qIGNpcGhlcnRleHQgICAgICAgICAgICAgICAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAqLworICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBuZXh0IHRlc3RjYXNlICovCit9OworCisvKgorICogS0FUIHZhbHVlcyBmb3IgQUVTLTI1Ni1DVFIgc2VsZi10ZXN0LiAgVGhlc2UKKyAqIHZhbHVlcyBjYW1lIGZyb20gc2VjdGlvbiA3IG9mIFJGQyA2MTg4LgorICovCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgY29uc3QgdWludDhfdCBzcnRwX2Flc19pY21fMjU2X3Rlc3RfY2FzZV8wX2tleVtTUlRQX0FFU19JQ01fMjU2X0tFWV9MRU5fV1NBTFRdID0geworICAgIDB4NTcsIDB4ZjgsIDB4MmYsIDB4ZTMsIDB4NjEsIDB4M2YsIDB4ZDEsIDB4NzAsCisgICAgMHhhOCwgMHg1ZSwgMHhjOSwgMHgzYywgMHg0MCwgMHhiMSwgMHhmMCwgMHg5MiwKKyAgICAweDJlLCAweGM0LCAweGNiLCAweDBkLCAweGMwLCAweDI1LCAweGI1LCAweDgyLAorICAgIDB4NzIsIDB4MTQsIDB4N2MsIDB4YzQsIDB4MzgsIDB4OTQsIDB4NGEsIDB4OTgsCisgICAgMHhmMCwgMHhmMSwgMHhmMiwgMHhmMywgMHhmNCwgMHhmNSwgMHhmNiwgMHhmNywKKyAgICAweGY4LCAweGY5LCAweGZhLCAweGZiLCAweGZjLCAweGZkCit9OworLyogY2xhbmctZm9ybWF0IG9uICovCisKKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KK3N0YXRpYyB1aW50OF90IHNydHBfYWVzX2ljbV8yNTZfdGVzdF9jYXNlXzBfbm9uY2VbMTZdID0geworICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorfTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgY29uc3QgdWludDhfdCBzcnRwX2Flc19pY21fMjU2X3Rlc3RfY2FzZV8wX3BsYWludGV4dFszMl0gPSAgeworICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCit9OworLyogY2xhbmctZm9ybWF0IG9uICovCisKKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KK3N0YXRpYyBjb25zdCB1aW50OF90IHNydHBfYWVzX2ljbV8yNTZfdGVzdF9jYXNlXzBfY2lwaGVydGV4dFszMl0gPSB7CisgICAgMHg5MiwgMHhiZCwgMHhkMiwgMHg4YSwgMHg5MywgMHhjMywgMHhmNSwgMHgyNSwKKyAgICAweDExLCAweGM2LCAweDc3LCAweGQwLCAweDhiLCAweDU1LCAweDE1LCAweGE0LAorICAgIDB4OWQsIDB4YTcsIDB4MWIsIDB4MjMsIDB4NzgsIDB4YTgsIDB4NTQsIDB4ZjYsCisgICAgMHg3MCwgMHg1MCwgMHg3NSwgMHg2ZCwgMHhlZCwgMHgxNiwgMHg1YiwgMHhhYworfTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworCitzdGF0aWMgY29uc3Qgc3J0cF9jaXBoZXJfdGVzdF9jYXNlX3Qgc3J0cF9hZXNfaWNtXzI1Nl90ZXN0X2Nhc2VfMCA9IHsKKyAgICBTUlRQX0FFU19JQ01fMjU2X0tFWV9MRU5fV1NBTFQsICAgICAgICAgIC8qIG9jdGV0cyBpbiBrZXkgICAgICAgICAgICAqLworICAgIHNydHBfYWVzX2ljbV8yNTZfdGVzdF9jYXNlXzBfa2V5LCAgICAgICAgLyoga2V5ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgc3J0cF9hZXNfaWNtXzI1Nl90ZXN0X2Nhc2VfMF9ub25jZSwgICAgICAvKiBwYWNrZXQgaW5kZXggICAgICAgICAgICAgKi8KKyAgICAzMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9jdGV0cyBpbiBwbGFpbnRleHQgICAgICAqLworICAgIHNydHBfYWVzX2ljbV8yNTZfdGVzdF9jYXNlXzBfcGxhaW50ZXh0LCAgLyogcGxhaW50ZXh0ICAgICAgICAgICAgICAgICovCisgICAgMzIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvY3RldHMgaW4gY2lwaGVydGV4dCAgICAgKi8KKyAgICBzcnRwX2Flc19pY21fMjU2X3Rlc3RfY2FzZV8wX2NpcGhlcnRleHQsIC8qIGNpcGhlcnRleHQgICAgICAgICAgICAgICAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAqLworICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBuZXh0IHRlc3RjYXNlICovCit9OworCisvKgorICogVGhpcyBpcyB0aGUgZnVuY3Rpb24gdGFibGUgZm9yIHRoaXMgY3J5cHRvIGVuZ2luZS4KKyAqIG5vdGU6IHRoZSBlbmNyeXB0IGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byB0aGUgZGVjcnlwdCBmdW5jdGlvbgorICovCitjb25zdCBzcnRwX2NpcGhlcl90eXBlX3Qgc3J0cF9hZXNfaWNtXzEyOCA9IHsKKyAgICBzcnRwX2Flc19pY21fb3BlbnNzbF9hbGxvYywgICAgICAgICAgIC8qICovCisgICAgc3J0cF9hZXNfaWNtX29wZW5zc2xfZGVhbGxvYywgICAgICAgICAvKiAqLworICAgIHNydHBfYWVzX2ljbV9vcGVuc3NsX2NvbnRleHRfaW5pdCwgICAgLyogKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldF9hYWQgKi8KKyAgICBzcnRwX2Flc19pY21fb3BlbnNzbF9lbmNyeXB0LCAgICAgICAgIC8qICovCisgICAgc3J0cF9hZXNfaWNtX29wZW5zc2xfZW5jcnlwdCwgICAgICAgICAvKiAqLworICAgIHNydHBfYWVzX2ljbV9vcGVuc3NsX3NldF9pdiwgICAgICAgICAgLyogKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdldF90YWcgKi8KKyAgICBzcnRwX2Flc19pY21fMTI4X29wZW5zc2xfZGVzY3JpcHRpb24sIC8qICovCisgICAgJnNydHBfYWVzX2ljbV8xMjhfdGVzdF9jYXNlXzAsICAgICAgICAvKiAqLworICAgIFNSVFBfQUVTX0lDTV8xMjggICAgICAgICAgICAgICAgICAgICAgLyogKi8KK307CisKKy8qCisgKiBUaGlzIGlzIHRoZSBmdW5jdGlvbiB0YWJsZSBmb3IgdGhpcyBjcnlwdG8gZW5naW5lLgorICogbm90ZTogdGhlIGVuY3J5cHQgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIHRoZSBkZWNyeXB0IGZ1bmN0aW9uCisgKi8KK2NvbnN0IHNydHBfY2lwaGVyX3R5cGVfdCBzcnRwX2Flc19pY21fMTkyID0geworICAgIHNydHBfYWVzX2ljbV9vcGVuc3NsX2FsbG9jLCAgICAgICAgICAgLyogKi8KKyAgICBzcnRwX2Flc19pY21fb3BlbnNzbF9kZWFsbG9jLCAgICAgICAgIC8qICovCisgICAgc3J0cF9hZXNfaWNtX29wZW5zc2xfY29udGV4dF9pbml0LCAgICAvKiAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0X2FhZCAqLworICAgIHNydHBfYWVzX2ljbV9vcGVuc3NsX2VuY3J5cHQsICAgICAgICAgLyogKi8KKyAgICBzcnRwX2Flc19pY21fb3BlbnNzbF9lbmNyeXB0LCAgICAgICAgIC8qICovCisgICAgc3J0cF9hZXNfaWNtX29wZW5zc2xfc2V0X2l2LCAgICAgICAgICAvKiAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ2V0X3RhZyAqLworICAgIHNydHBfYWVzX2ljbV8xOTJfb3BlbnNzbF9kZXNjcmlwdGlvbiwgLyogKi8KKyAgICAmc3J0cF9hZXNfaWNtXzE5Ml90ZXN0X2Nhc2VfMCwgICAgICAgIC8qICovCisgICAgU1JUUF9BRVNfSUNNXzE5MiAgICAgICAgICAgICAgICAgICAgICAvKiAqLworfTsKKworLyoKKyAqIFRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRhYmxlIGZvciB0aGlzIGNyeXB0byBlbmdpbmUuCisgKiBub3RlOiB0aGUgZW5jcnlwdCBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gdGhlIGRlY3J5cHQgZnVuY3Rpb24KKyAqLworY29uc3Qgc3J0cF9jaXBoZXJfdHlwZV90IHNydHBfYWVzX2ljbV8yNTYgPSB7CisgICAgc3J0cF9hZXNfaWNtX29wZW5zc2xfYWxsb2MsICAgICAgICAgICAvKiAqLworICAgIHNydHBfYWVzX2ljbV9vcGVuc3NsX2RlYWxsb2MsICAgICAgICAgLyogKi8KKyAgICBzcnRwX2Flc19pY21fb3BlbnNzbF9jb250ZXh0X2luaXQsICAgIC8qICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXRfYWFkICovCisgICAgc3J0cF9hZXNfaWNtX29wZW5zc2xfZW5jcnlwdCwgICAgICAgICAvKiAqLworICAgIHNydHBfYWVzX2ljbV9vcGVuc3NsX2VuY3J5cHQsICAgICAgICAgLyogKi8KKyAgICBzcnRwX2Flc19pY21fb3BlbnNzbF9zZXRfaXYsICAgICAgICAgIC8qICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBnZXRfdGFnICovCisgICAgc3J0cF9hZXNfaWNtXzI1Nl9vcGVuc3NsX2Rlc2NyaXB0aW9uLCAvKiAqLworICAgICZzcnRwX2Flc19pY21fMjU2X3Rlc3RfY2FzZV8wLCAgICAgICAgLyogKi8KKyAgICBTUlRQX0FFU19JQ01fMjU2ICAgICAgICAgICAgICAgICAgICAgIC8qICovCit9OwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2NpcGhlci9jaXBoZXIuYyBiL2NyeXB0by9jaXBoZXIvY2lwaGVyLmMKaW5kZXggZjA5YTFmZS4uMzU0NTE3ZCAxMDA2NDQKLS0tIGEvY3J5cHRvL2NpcGhlci9jaXBoZXIuYworKysgYi9jcnlwdG8vY2lwaGVyL2NpcGhlci5jCkBAIC01LDMwICs1LDMwIEBACiAgKgogICogRGF2aWQgQS4gTWNHcmV3CiAgKiBDaXNjbyBTeXN0ZW1zLCBJbmMuCi0gKiAKKyAqCiAgKi8KIAogLyoKLSAqCQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUsIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxNyBDaXNjbyBTeXN0ZW1zLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwogICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKICAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCisgKgogICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAogICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKKyAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKQEAgLTQ0LDM2MCArNDQsNjIxIEBACiAgKgogICovCiAKLSNpbmNsdWRlICJjaXBoZXIuaCIKLSNpbmNsdWRlICJyYW5kX3NvdXJjZS5oIiAgICAgICAgLyogdXNlZCBpbiBpbnZlcnRpYmlsdGl5IHRlc3RzICAgICAgICAqLwotI2luY2x1ZGUgImFsbG9jLmgiICAgICAgICAgICAgICAvKiBmb3IgY3J5cHRvX2FsbG9jKCksIGNyeXB0b19mcmVlKCkgICovCi0jaW5jbHVkZSA8dGltZS5oPiAgICAgICAgICAgICAgIC8qIGZvciBjbG9jaygpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKIAotZGVidWdfbW9kdWxlX3QgbW9kX2NpcGhlciA9IHsKLSAgMCwgICAgICAgICAgICAgICAgIC8qIGRlYnVnZ2luZyBpcyBvZmYgYnkgZGVmYXVsdCAqLwotICAiY2lwaGVyIiAgICAgICAgICAgLyogcHJpbnRhYmxlIG1vZHVsZSBuYW1lICAgICAgICovCisjaW5jbHVkZSAiY2lwaGVyLmgiCisjaW5jbHVkZSAiY2lwaGVyX3ByaXYuaCIKKyNpbmNsdWRlICJjcnlwdG9fdHlwZXMuaCIKKyNpbmNsdWRlICJlcnIuaCIgICAvKiBmb3Igc3J0cF9kZWJ1ZyAqLworI2luY2x1ZGUgImFsbG9jLmgiIC8qIGZvciBjcnlwdG9fYWxsb2MoKSwgY3J5cHRvX2ZyZWUoKSAgKi8KKworc3J0cF9kZWJ1Z19tb2R1bGVfdCBzcnRwX21vZF9jaXBoZXIgPSB7CisgICAgMCwgICAgICAgLyogZGVidWdnaW5nIGlzIG9mZiBieSBkZWZhdWx0ICovCisgICAgImNpcGhlciIgLyogcHJpbnRhYmxlIG1vZHVsZSBuYW1lICAgICAgICovCiB9OwogCi1lcnJfc3RhdHVzX3QKLWNpcGhlcl9vdXRwdXQoY2lwaGVyX3QgKmMsIG9jdGV0X3QgKmJ1ZmZlciwgaW50IG51bV9vY3RldHNfdG9fb3V0cHV0KSB7Ci0gIAotICAvKiB6ZXJvaXplIHRoZSBidWZmZXIgKi8KLSAgb2N0ZXRfc3RyaW5nX3NldF90b196ZXJvKGJ1ZmZlciwgbnVtX29jdGV0c190b19vdXRwdXQpOwotICAKLSAgLyogZXhvciBrZXlzdHJlYW0gaW50byBidWZmZXIgKi8KLSAgcmV0dXJuIGNpcGhlcl9lbmNyeXB0KGMsIGJ1ZmZlciwgKHVuc2lnbmVkIGludCAqKSAmbnVtX29jdGV0c190b19vdXRwdXQpOworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9jaXBoZXJfdHlwZV9hbGxvYyhjb25zdCBzcnRwX2NpcGhlcl90eXBlX3QgKmN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX2NpcGhlcl90ICoqYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtleV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0bGVuKQoreworICAgIGlmICghY3QgfHwgIWN0LT5hbGxvYykgeworICAgICAgICByZXR1cm4gKHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW0pOworICAgIH0KKyAgICByZXR1cm4gKChjdCktPmFsbG9jKChjKSwgKGtleV9sZW4pLCAodGxlbikpKTsKK30KKworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9jaXBoZXJfZGVhbGxvYyhzcnRwX2NpcGhlcl90ICpjKQoreworICAgIGlmICghYyB8fCAhYy0+dHlwZSkgeworICAgICAgICByZXR1cm4gKHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW0pOworICAgIH0KKyAgICByZXR1cm4gKCgoYyktPnR5cGUpLT5kZWFsbG9jKGMpKTsKK30KKworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9jaXBoZXJfaW5pdChzcnRwX2NpcGhlcl90ICpjLCBjb25zdCB1aW50OF90ICprZXkpCit7CisgICAgaWYgKCFjIHx8ICFjLT50eXBlIHx8ICFjLT5zdGF0ZSkgeworICAgICAgICByZXR1cm4gKHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW0pOworICAgIH0KKyAgICByZXR1cm4gKCgoYyktPnR5cGUpLT5pbml0KCgoYyktPnN0YXRlKSwgKGtleSkpKTsKK30KKworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9jaXBoZXJfc2V0X2l2KHNydHBfY2lwaGVyX3QgKmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRpcmVjdGlvbikKK3sKKyAgICBpZiAoIWMgfHwgIWMtPnR5cGUgfHwgIWMtPnN0YXRlKSB7CisgICAgICAgIHJldHVybiAoc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbSk7CisgICAgfQorCisgICAgcmV0dXJuICgoKGMpLT50eXBlKS0+c2V0X2l2KCgoYyktPnN0YXRlKSwgaXYsIGRpcmVjdGlvbikpOworfQorCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2NpcGhlcl9vdXRwdXQoc3J0cF9jaXBoZXJfdCAqYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKm51bV9vY3RldHNfdG9fb3V0cHV0KQoreworICAgIC8qIHplcm9pemUgdGhlIGJ1ZmZlciAqLworICAgIG9jdGV0X3N0cmluZ19zZXRfdG9femVybyhidWZmZXIsICpudW1fb2N0ZXRzX3RvX291dHB1dCk7CisKKyAgICAvKiBleG9yIGtleXN0cmVhbSBpbnRvIGJ1ZmZlciAqLworICAgIHJldHVybiAoKChjKS0+dHlwZSktPmVuY3J5cHQoKChjKS0+c3RhdGUpLCBidWZmZXIsIG51bV9vY3RldHNfdG9fb3V0cHV0KSk7Cit9CisKK3NydHBfZXJyX3N0YXR1c190IHNydHBfY2lwaGVyX2VuY3J5cHQoc3J0cF9jaXBoZXJfdCAqYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqbnVtX29jdGV0c190b19vdXRwdXQpCit7CisgICAgaWYgKCFjIHx8ICFjLT50eXBlIHx8ICFjLT5zdGF0ZSkgeworICAgICAgICByZXR1cm4gKHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW0pOworICAgIH0KKworICAgIHJldHVybiAoKChjKS0+dHlwZSktPmVuY3J5cHQoKChjKS0+c3RhdGUpLCBidWZmZXIsIG51bV9vY3RldHNfdG9fb3V0cHV0KSk7Cit9CisKK3NydHBfZXJyX3N0YXR1c190IHNydHBfY2lwaGVyX2RlY3J5cHQoc3J0cF9jaXBoZXJfdCAqYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqbnVtX29jdGV0c190b19vdXRwdXQpCit7CisgICAgaWYgKCFjIHx8ICFjLT50eXBlIHx8ICFjLT5zdGF0ZSkgeworICAgICAgICByZXR1cm4gKHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW0pOworICAgIH0KKworICAgIHJldHVybiAoKChjKS0+dHlwZSktPmRlY3J5cHQoKChjKS0+c3RhdGUpLCBidWZmZXIsIG51bV9vY3RldHNfdG9fb3V0cHV0KSk7Cit9CisKK3NydHBfZXJyX3N0YXR1c190IHNydHBfY2lwaGVyX2dldF90YWcoc3J0cF9jaXBoZXJfdCAqYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqdGFnX2xlbikKK3sKKyAgICBpZiAoIWMgfHwgIWMtPnR5cGUgfHwgIWMtPnN0YXRlKSB7CisgICAgICAgIHJldHVybiAoc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbSk7CisgICAgfQorICAgIGlmICghKChjKS0+dHlwZSktPmdldF90YWcpIHsKKyAgICAgICAgcmV0dXJuIChzcnRwX2Vycl9zdGF0dXNfbm9fc3VjaF9vcCk7CisgICAgfQorCisgICAgcmV0dXJuICgoKGMpLT50eXBlKS0+Z2V0X3RhZygoKGMpLT5zdGF0ZSksIGJ1ZmZlciwgdGFnX2xlbikpOworfQorCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2NpcGhlcl9zZXRfYWFkKHNydHBfY2lwaGVyX3QgKmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWFkX2xlbikKK3sKKyAgICBpZiAoIWMgfHwgIWMtPnR5cGUgfHwgIWMtPnN0YXRlKSB7CisgICAgICAgIHJldHVybiAoc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbSk7CisgICAgfQorICAgIGlmICghKChjKS0+dHlwZSktPnNldF9hYWQpIHsKKyAgICAgICAgcmV0dXJuIChzcnRwX2Vycl9zdGF0dXNfbm9fc3VjaF9vcCk7CisgICAgfQorCisgICAgcmV0dXJuICgoKGMpLT50eXBlKS0+c2V0X2FhZCgoKGMpLT5zdGF0ZSksIGFhZCwgYWFkX2xlbikpOwogfQogCiAvKiBzb21lIGJvb2trZWVwaW5nIGZ1bmN0aW9ucyAqLwogCi1pbnQKLWNpcGhlcl9nZXRfa2V5X2xlbmd0aChjb25zdCBjaXBoZXJfdCAqYykgewotICByZXR1cm4gYy0+a2V5X2xlbjsKK2ludCBzcnRwX2NpcGhlcl9nZXRfa2V5X2xlbmd0aChjb25zdCBzcnRwX2NpcGhlcl90ICpjKQoreworICAgIHJldHVybiBjLT5rZXlfbGVuOwogfQogCi0vKiAKLSAqIGNpcGhlcl90eXBlX3NlbGZfdGVzdChjdCkgdGVzdHMgYSBjaXBoZXIgb2YgdHlwZSBjdCBhZ2FpbnN0IHRlc3QgY2FzZXMKLSAqIHByb3ZpZGVkIGluIGFuIGFycmF5IG9mIHZhbHVlcyBvZiBrZXksIHNhbHQsIHh0ZF9zZXFfbnVtX3QsCi0gKiBwbGFpbnRleHQsIGFuZCBjaXBoZXJ0ZXh0IHRoYXQgaXMga25vd24gdG8gYmUgZ29vZAorLyoKKyAqIEEgdHJpdmlhbCBwbGF0Zm9ybSBpbmRlcGVuZGVudCByYW5kb20gc291cmNlLgorICogRm9yIHVzZSBpbiB0ZXN0IG9ubHkuCiAgKi8KK3ZvaWQgc3J0cF9jaXBoZXJfcmFuZF9mb3JfdGVzdHModm9pZCAqZGVzdCwgdWludDMyX3QgbGVuKQoreworICAgIC8qIEdlbmVyaWMgQy1saWJyYXJ5IChyYW5kKCkpIHZlcnNpb24gKi8KKyAgICAvKiBUaGlzIGlzIGEgcmFuZG9tIHNvdXJjZSBvZiBsYXN0IHJlc29ydCAqLworICAgIHVpbnQ4X3QgKmRzdCA9ICh1aW50OF90ICopZGVzdDsKKyAgICB3aGlsZSAobGVuKSB7CisgICAgICAgIGludCB2YWwgPSByYW5kKCk7CisgICAgICAgIC8qIHJhbmQoKSByZXR1cm5zIDAtMzI3NjcgKHVnaCkgKi8KKyAgICAgICAgLyogSXMgdGhpcyBhIGdvb2QgZW5vdWdoIHdheSB0byBnZXQgcmFuZG9tIGJ5dGVzPworICAgICAgICAgICBJdCBpcyBpZiBpdCBwYXNzZXMgRklQUy0xNDAuLi4gKi8KKyAgICAgICAgKmRzdCsrID0gdmFsICYgMHhmZjsKKyAgICAgICAgbGVuLS07CisgICAgfQorfQorCisvKgorICogQSB0cml2aWFsIHBsYXRmb3JtIGluZGVwZW5kZW50IDMyIGJpdCByYW5kb20gbnVtYmVyLgorICogRm9yIHVzZSBpbiB0ZXN0IG9ubHkuCisgKi8KK3VpbnQzMl90IHNydHBfY2lwaGVyX3JhbmRfdTMyX2Zvcl90ZXN0cyh2b2lkKQoreworICAgIHVpbnQzMl90IHI7CisgICAgc3J0cF9jaXBoZXJfcmFuZF9mb3JfdGVzdHMoJnIsIHNpemVvZihyKSk7CisgICAgcmV0dXJuIHI7Cit9CiAKICNkZWZpbmUgU0VMRl9URVNUX0JVRl9PQ1RFVFMgMTI4Ci0jZGVmaW5lIE5VTV9SQU5EX1RFU1RTICAgICAgIDEyOAotI2RlZmluZSBNQVhfS0VZX0xFTiAgICAgICAgICA2NAorI2RlZmluZSBOVU1fUkFORF9URVNUUyAxMjgKKyNkZWZpbmUgTUFYX0tFWV9MRU4gNjQKKy8qCisgKiBzcnRwX2NpcGhlcl90eXBlX3Rlc3QoY3QsIHRlc3RfZGF0YSkgdGVzdHMgYSBjaXBoZXIgb2YgdHlwZSBjdCBhZ2FpbnN0CisgKiB0ZXN0IGNhc2VzIHByb3ZpZGVkIGluIGEgbGlzdCB0ZXN0X2RhdGEgb2YgdmFsdWVzIG9mIGtleSwgc2FsdCwgaXYsCisgKiBwbGFpbnRleHQsIGFuZCBjaXBoZXJ0ZXh0IHRoYXQgaXMga25vd24gdG8gYmUgZ29vZAorICovCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2NpcGhlcl90eXBlX3Rlc3QoCisgICAgY29uc3Qgc3J0cF9jaXBoZXJfdHlwZV90ICpjdCwKKyAgICBjb25zdCBzcnRwX2NpcGhlcl90ZXN0X2Nhc2VfdCAqdGVzdF9kYXRhKQoreworICAgIGNvbnN0IHNydHBfY2lwaGVyX3Rlc3RfY2FzZV90ICp0ZXN0X2Nhc2UgPSB0ZXN0X2RhdGE7CisgICAgc3J0cF9jaXBoZXJfdCAqYzsKKyAgICBzcnRwX2Vycl9zdGF0dXNfdCBzdGF0dXM7CisgICAgdWludDhfdCBidWZmZXJbU0VMRl9URVNUX0JVRl9PQ1RFVFNdOworICAgIHVpbnQ4X3QgYnVmZmVyMltTRUxGX1RFU1RfQlVGX09DVEVUU107CisgICAgdWludDMyX3QgdGFnX2xlbjsKKyAgICB1bnNpZ25lZCBpbnQgbGVuOworICAgIGludCBpLCBqLCBjYXNlX251bSA9IDA7CisgICAgdW5zaWduZWQgayA9IDA7CiAKLWVycl9zdGF0dXNfdAotY2lwaGVyX3R5cGVfc2VsZl90ZXN0KGNvbnN0IGNpcGhlcl90eXBlX3QgKmN0KSB7Ci0gIGNvbnN0IGNpcGhlcl90ZXN0X2Nhc2VfdCAqdGVzdF9jYXNlID0gY3QtPnRlc3RfZGF0YTsKLSAgY2lwaGVyX3QgKmM7Ci0gIGVycl9zdGF0dXNfdCBzdGF0dXM7Ci0gIG9jdGV0X3QgYnVmZmVyW1NFTEZfVEVTVF9CVUZfT0NURVRTXTsKLSAgb2N0ZXRfdCBidWZmZXIyW1NFTEZfVEVTVF9CVUZfT0NURVRTXTsKLSAgdW5zaWduZWQgaW50IGxlbjsKLSAgaW50IGksIGosIGNhc2VfbnVtID0gMDsKKyAgICBkZWJ1Z19wcmludChzcnRwX21vZF9jaXBoZXIsICJydW5uaW5nIHNlbGYtdGVzdCBmb3IgY2lwaGVyICVzIiwKKyAgICAgICAgICAgICAgICBjdC0+ZGVzY3JpcHRpb24pOwogCi0gIGRlYnVnX3ByaW50KG1vZF9jaXBoZXIsICJydW5uaW5nIHNlbGYtdGVzdCBmb3IgY2lwaGVyICVzIiwgCi0JICAgICAgY3QtPmRlc2NyaXB0aW9uKTsKLQotICAvKgotICAgKiBjaGVjayB0byBtYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGF0IGxlYXN0IG9uZSB0ZXN0IGNhc2UsIGFuZAotICAgKiByZXR1cm4gYW4gZXJyb3IgaWYgd2UgZG9uJ3QgLSB3ZSBuZWVkIHRvIGJlIHBhcmFub2lkIGhlcmUKLSAgICovCi0gIGlmICh0ZXN0X2Nhc2UgPT0gTlVMTCkKLSAgICByZXR1cm4gZXJyX3N0YXR1c19jYW50X2NoZWNrOwotCi0gIC8qCi0gICAqIGxvb3Agb3ZlciBhbGwgdGVzdCBjYXNlcywgcGVyZm9ybSBrbm93bi1hbnN3ZXIgdGVzdHMgb2YgYm90aCB0aGUKLSAgICogZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbiBmdW5jdGlvbnMKLSAgICovICAKLSAgd2hpbGUgKHRlc3RfY2FzZSAhPSBOVUxMKSB7Ci0KLSAgICAvKiBhbGxvY2F0ZSBjaXBoZXIgKi8KLSAgICBzdGF0dXMgPSBjaXBoZXJfdHlwZV9hbGxvYyhjdCwgJmMsIHRlc3RfY2FzZS0+a2V5X2xlbmd0aF9vY3RldHMpOwotICAgIGlmIChzdGF0dXMpCi0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIAogICAgIC8qCi0gICAgICogdGVzdCB0aGUgZW5jcnlwdCBmdW5jdGlvbiAKKyAgICAgKiBjaGVjayB0byBtYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGF0IGxlYXN0IG9uZSB0ZXN0IGNhc2UsIGFuZAorICAgICAqIHJldHVybiBhbiBlcnJvciBpZiB3ZSBkb24ndCAtIHdlIG5lZWQgdG8gYmUgcGFyYW5vaWQgaGVyZQogICAgICAqLwotICAgIGRlYnVnX3ByaW50KG1vZF9jaXBoZXIsICJ0ZXN0aW5nIGVuY3J5cHRpb24iLCBOVUxMKTsgICAgCi0gICAgCi0gICAgLyogaW5pdGlhbGl6ZSBjaXBoZXIgKi8KLSAgICBzdGF0dXMgPSBjaXBoZXJfaW5pdChjLCB0ZXN0X2Nhc2UtPmtleSwgZGlyZWN0aW9uX2VuY3J5cHQpOwotICAgIGlmIChzdGF0dXMpIHsKLSAgICAgIGNpcGhlcl9kZWFsbG9jKGMpOwotICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICBpZiAodGVzdF9jYXNlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19jYW50X2NoZWNrOwogICAgIH0KIAotICAgIC8qIGNvcHkgcGxhaW50ZXh0IGludG8gdGVzdCBidWZmZXIgKi8KLSAgICBpZiAodGVzdF9jYXNlLT5jaXBoZXJ0ZXh0X2xlbmd0aF9vY3RldHMgPiBTRUxGX1RFU1RfQlVGX09DVEVUUykgewotICAgICAgY2lwaGVyX2RlYWxsb2MoYyk7ICAgIAotICAgICAgcmV0dXJuIGVycl9zdGF0dXNfYmFkX3BhcmFtOwotICAgIH0KLSAgICBmb3IgKGk9MDsgaSA8IHRlc3RfY2FzZS0+cGxhaW50ZXh0X2xlbmd0aF9vY3RldHM7IGkrKykKLSAgICAgIGJ1ZmZlcltpXSA9IHRlc3RfY2FzZS0+cGxhaW50ZXh0W2ldOwotCi0gICAgZGVidWdfcHJpbnQobW9kX2NpcGhlciwgInBsYWludGV4dDogICAgJXMiLAotCSAgICAgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoYnVmZmVyLAotCQkJCSAgICAgdGVzdF9jYXNlLT5wbGFpbnRleHRfbGVuZ3RoX29jdGV0cykpOwotCi0gICAgLyogc2V0IHRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IgKi8KLSAgICBzdGF0dXMgPSBjaXBoZXJfc2V0X2l2KGMsIHRlc3RfY2FzZS0+aWR4KTsKLSAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICBjaXBoZXJfZGVhbGxvYyhjKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfSAKLSAgICAKLSAgICAvKiBlbmNyeXB0ICovCi0gICAgbGVuID0gdGVzdF9jYXNlLT5wbGFpbnRleHRfbGVuZ3RoX29jdGV0czsKLSAgICBzdGF0dXMgPSBjaXBoZXJfZW5jcnlwdChjLCBidWZmZXIsICZsZW4pOwotICAgIGlmIChzdGF0dXMpIHsKLSAgICAgIGNpcGhlcl9kZWFsbG9jKGMpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgCi0gICAgZGVidWdfcHJpbnQobW9kX2NpcGhlciwgImNpcGhlcnRleHQ6ICAgJXMiLAotCSAgICAgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoYnVmZmVyLAotCQkJCSAgICAgdGVzdF9jYXNlLT5jaXBoZXJ0ZXh0X2xlbmd0aF9vY3RldHMpKTsKLQotICAgIC8qIGNvbXBhcmUgdGhlIHJlc3VsdGluZyBjaXBoZXJ0ZXh0IHdpdGggdGhhdCBpbiB0aGUgdGVzdCBjYXNlICovCi0gICAgaWYgKGxlbiAhPSB0ZXN0X2Nhc2UtPmNpcGhlcnRleHRfbGVuZ3RoX29jdGV0cykKLSAgICAgIHJldHVybiBlcnJfc3RhdHVzX2FsZ29fZmFpbDsKLSAgICBzdGF0dXMgPSBlcnJfc3RhdHVzX29rOwotICAgIGZvciAoaT0wOyBpIDwgdGVzdF9jYXNlLT5jaXBoZXJ0ZXh0X2xlbmd0aF9vY3RldHM7IGkrKykKLSAgICAgIGlmIChidWZmZXJbaV0gIT0gdGVzdF9jYXNlLT5jaXBoZXJ0ZXh0W2ldKSB7Ci0Jc3RhdHVzID0gZXJyX3N0YXR1c19hbGdvX2ZhaWw7Ci0JZGVidWdfcHJpbnQobW9kX2NpcGhlciwgInRlc3QgY2FzZSAlZCBmYWlsZWQiLCBjYXNlX251bSk7Ci0JZGVidWdfcHJpbnQobW9kX2NpcGhlciwgIihmYWlsdXJlIGF0IGJ5dGUgJWQpIiwgaSk7Ci0JYnJlYWs7Ci0gICAgICB9Ci0gICAgaWYgKHN0YXR1cykgewotCi0gICAgICBkZWJ1Z19wcmludChtb2RfY2lwaGVyLCAiYyBjb21wdXRlZDogJXMiLAotCSAgICAgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoYnVmZmVyLAotCQkgIDIqdGVzdF9jYXNlLT5wbGFpbnRleHRfbGVuZ3RoX29jdGV0cykpOwotICAgICAgZGVidWdfcHJpbnQobW9kX2NpcGhlciwgImMgZXhwZWN0ZWQ6ICVzIiwKLQkJICBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyh0ZXN0X2Nhc2UtPmNpcGhlcnRleHQsCi0JCQkgIDIqdGVzdF9jYXNlLT5wbGFpbnRleHRfbGVuZ3RoX29jdGV0cykpOwotCi0gICAgICBjaXBoZXJfZGVhbGxvYyhjKTsKLSAgICAgIHJldHVybiBlcnJfc3RhdHVzX2FsZ29fZmFpbDsKLSAgICB9Ci0gICAgCiAgICAgLyoKLSAgICAgKiB0ZXN0IHRoZSBkZWNyeXB0IGZ1bmN0aW9uCisgICAgICogbG9vcCBvdmVyIGFsbCB0ZXN0IGNhc2VzLCBwZXJmb3JtIGtub3duLWFuc3dlciB0ZXN0cyBvZiBib3RoIHRoZQorICAgICAqIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gZnVuY3Rpb25zCiAgICAgICovCi0gICAgZGVidWdfcHJpbnQobW9kX2NpcGhlciwgInRlc3RpbmcgZGVjcnlwdGlvbiIsIE5VTEwpOyAgICAKKyAgICB3aGlsZSAodGVzdF9jYXNlICE9IE5VTEwpIHsKKyAgICAgICAgLyogYWxsb2NhdGUgY2lwaGVyICovCisgICAgICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX3R5cGVfYWxsb2MoY3QsICZjLCB0ZXN0X2Nhc2UtPmtleV9sZW5ndGhfb2N0ZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfY2FzZS0+dGFnX2xlbmd0aF9vY3RldHMpOworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CiAKLSAgICAvKiByZS1pbml0aWFsaXplIGNpcGhlciBmb3IgZGVjcnlwdGlvbiAqLwotICAgIHN0YXR1cyA9IGNpcGhlcl9pbml0KGMsIHRlc3RfY2FzZS0+a2V5LCBkaXJlY3Rpb25fZGVjcnlwdCk7Ci0gICAgaWYgKHN0YXR1cykgewotICAgICAgY2lwaGVyX2RlYWxsb2MoYyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICAvKgorICAgICAgICAgKiB0ZXN0IHRoZSBlbmNyeXB0IGZ1bmN0aW9uCisgICAgICAgICAqLworICAgICAgICBkZWJ1Z19wcmludChzcnRwX21vZF9jaXBoZXIsICJ0ZXN0aW5nIGVuY3J5cHRpb24iLCBOVUxMKTsKKworICAgICAgICAvKiBpbml0aWFsaXplIGNpcGhlciAqLworICAgICAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9pbml0KGMsIHRlc3RfY2FzZS0+a2V5KTsKKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgc3J0cF9jaXBoZXJfZGVhbGxvYyhjKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIH0KKworICAgICAgICAvKiBjb3B5IHBsYWludGV4dCBpbnRvIHRlc3QgYnVmZmVyICovCisgICAgICAgIGlmICh0ZXN0X2Nhc2UtPmNpcGhlcnRleHRfbGVuZ3RoX29jdGV0cyA+IFNFTEZfVEVTVF9CVUZfT0NURVRTKSB7CisgICAgICAgICAgICBzcnRwX2NpcGhlcl9kZWFsbG9jKGMpOworICAgICAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisgICAgICAgIH0KKyAgICAgICAgZm9yIChrID0gMDsgayA8IHRlc3RfY2FzZS0+cGxhaW50ZXh0X2xlbmd0aF9vY3RldHM7IGsrKykgeworICAgICAgICAgICAgYnVmZmVyW2tdID0gdGVzdF9jYXNlLT5wbGFpbnRleHRba107CisgICAgICAgIH0KKworICAgICAgICBkZWJ1Z19wcmludChzcnRwX21vZF9jaXBoZXIsICJwbGFpbnRleHQ6ICAgICVzIiwKKyAgICAgICAgICAgICAgICAgICAgc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgdGVzdF9jYXNlLT5wbGFpbnRleHRfbGVuZ3RoX29jdGV0cykpOworCisgICAgICAgIC8qIHNldCB0aGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yICovCisgICAgICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX3NldF9pdihjLCAodWludDhfdCAqKXRlc3RfY2FzZS0+aWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9kaXJlY3Rpb25fZW5jcnlwdCk7CisgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgICAgIHNydHBfY2lwaGVyX2RlYWxsb2MoYyk7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGMtPmFsZ29yaXRobSA9PSBTUlRQX0FFU19HQ01fMTI4IHx8CisgICAgICAgICAgICBjLT5hbGdvcml0aG0gPT0gU1JUUF9BRVNfR0NNXzI1NikgeworICAgICAgICAgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfY2lwaGVyLCAiSVY6ICAgICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcodGVzdF9jYXNlLT5pZHgsIDEyKSk7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBTZXQgdGhlIEFBRAorICAgICAgICAgICAgICovCisgICAgICAgICAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9zZXRfYWFkKGMsIHRlc3RfY2FzZS0+YWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2Nhc2UtPmFhZF9sZW5ndGhfb2N0ZXRzKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgICAgICAgICBzcnRwX2NpcGhlcl9kZWFsbG9jKGMpOworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWJ1Z19wcmludChzcnRwX21vZF9jaXBoZXIsICJBQUQ6ICAgICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9jYXNlLT5hYWQsIHRlc3RfY2FzZS0+YWFkX2xlbmd0aF9vY3RldHMpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGVuY3J5cHQgKi8KKyAgICAgICAgbGVuID0gdGVzdF9jYXNlLT5wbGFpbnRleHRfbGVuZ3RoX29jdGV0czsKKyAgICAgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfZW5jcnlwdChjLCBidWZmZXIsICZsZW4pOworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBzcnRwX2NpcGhlcl9kZWFsbG9jKGMpOworICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjLT5hbGdvcml0aG0gPT0gU1JUUF9BRVNfR0NNXzEyOCB8fAorICAgICAgICAgICAgYy0+YWxnb3JpdGhtID09IFNSVFBfQUVTX0dDTV8yNTYpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBHZXQgdGhlIEdDTSB0YWcKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfZ2V0X3RhZyhjLCBidWZmZXIgKyBsZW4sICZ0YWdfbGVuKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgICAgICAgICBzcnRwX2NpcGhlcl9kZWFsbG9jKGMpOworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsZW4gKz0gdGFnX2xlbjsKKyAgICAgICAgfQorCisgICAgICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX2NpcGhlciwgImNpcGhlcnRleHQ6ICAgJXMiLAorICAgICAgICAgICAgICAgICAgICBzcnRwX29jdGV0X3N0cmluZ19oZXhfc3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCB0ZXN0X2Nhc2UtPmNpcGhlcnRleHRfbGVuZ3RoX29jdGV0cykpOworCisgICAgICAgIC8qIGNvbXBhcmUgdGhlIHJlc3VsdGluZyBjaXBoZXJ0ZXh0IHdpdGggdGhhdCBpbiB0aGUgdGVzdCBjYXNlICovCisgICAgICAgIGlmIChsZW4gIT0gdGVzdF9jYXNlLT5jaXBoZXJ0ZXh0X2xlbmd0aF9vY3RldHMpIHsKKyAgICAgICAgICAgIHNydHBfY2lwaGVyX2RlYWxsb2MoYyk7CisgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2FsZ29fZmFpbDsKKyAgICAgICAgfQorICAgICAgICBzdGF0dXMgPSBzcnRwX2Vycl9zdGF0dXNfb2s7CisgICAgICAgIGZvciAoayA9IDA7IGsgPCB0ZXN0X2Nhc2UtPmNpcGhlcnRleHRfbGVuZ3RoX29jdGV0czsgaysrKSB7CisgICAgICAgICAgICBpZiAoYnVmZmVyW2tdICE9IHRlc3RfY2FzZS0+Y2lwaGVydGV4dFtrXSkgeworICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNydHBfZXJyX3N0YXR1c19hbGdvX2ZhaWw7CisgICAgICAgICAgICAgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfY2lwaGVyLCAidGVzdCBjYXNlICVkIGZhaWxlZCIsIGNhc2VfbnVtKTsKKyAgICAgICAgICAgICAgICBkZWJ1Z19wcmludChzcnRwX21vZF9jaXBoZXIsICIoZmFpbHVyZSBhdCBieXRlICV1KSIsIGspOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX2NpcGhlciwgImMgY29tcHV0ZWQ6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCAyICogdGVzdF9jYXNlLT5wbGFpbnRleHRfbGVuZ3RoX29jdGV0cykpOworICAgICAgICAgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfY2lwaGVyLCAiYyBleHBlY3RlZDogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2Nhc2UtPmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAqIHRlc3RfY2FzZS0+cGxhaW50ZXh0X2xlbmd0aF9vY3RldHMpKTsKKworICAgICAgICAgICAgc3J0cF9jaXBoZXJfZGVhbGxvYyhjKTsKKyAgICAgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYWxnb19mYWlsOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogdGVzdCB0aGUgZGVjcnlwdCBmdW5jdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfY2lwaGVyLCAidGVzdGluZyBkZWNyeXB0aW9uIiwgTlVMTCk7CisKKyAgICAgICAgLyogcmUtaW5pdGlhbGl6ZSBjaXBoZXIgZm9yIGRlY3J5cHRpb24gKi8KKyAgICAgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfaW5pdChjLCB0ZXN0X2Nhc2UtPmtleSk7CisgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgICAgIHNydHBfY2lwaGVyX2RlYWxsb2MoYyk7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisKKyAgICAgICAgLyogY29weSBjaXBoZXJ0ZXh0IGludG8gdGVzdCBidWZmZXIgKi8KKyAgICAgICAgaWYgKHRlc3RfY2FzZS0+Y2lwaGVydGV4dF9sZW5ndGhfb2N0ZXRzID4gU0VMRl9URVNUX0JVRl9PQ1RFVFMpIHsKKyAgICAgICAgICAgIHNydHBfY2lwaGVyX2RlYWxsb2MoYyk7CisgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGsgPSAwOyBrIDwgdGVzdF9jYXNlLT5jaXBoZXJ0ZXh0X2xlbmd0aF9vY3RldHM7IGsrKykgeworICAgICAgICAgICAgYnVmZmVyW2tdID0gdGVzdF9jYXNlLT5jaXBoZXJ0ZXh0W2tdOworICAgICAgICB9CisKKyAgICAgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfY2lwaGVyLCAiY2lwaGVydGV4dDogICAgJXMiLAorICAgICAgICAgICAgICAgICAgICBzcnRwX29jdGV0X3N0cmluZ19oZXhfc3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCB0ZXN0X2Nhc2UtPnBsYWludGV4dF9sZW5ndGhfb2N0ZXRzKSk7CisKKyAgICAgICAgLyogc2V0IHRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IgKi8KKyAgICAgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfc2V0X2l2KGMsICh1aW50OF90ICopdGVzdF9jYXNlLT5pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX2RpcmVjdGlvbl9kZWNyeXB0KTsKKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgc3J0cF9jaXBoZXJfZGVhbGxvYyhjKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYy0+YWxnb3JpdGhtID09IFNSVFBfQUVTX0dDTV8xMjggfHwKKyAgICAgICAgICAgIGMtPmFsZ29yaXRobSA9PSBTUlRQX0FFU19HQ01fMjU2KSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogU2V0IHRoZSBBQUQKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfc2V0X2FhZChjLCB0ZXN0X2Nhc2UtPmFhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9jYXNlLT5hYWRfbGVuZ3RoX29jdGV0cyk7CisgICAgICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICAgICAgc3J0cF9jaXBoZXJfZGVhbGxvYyhjKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfY2lwaGVyLCAiQUFEOiAgICAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX29jdGV0X3N0cmluZ19oZXhfc3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfY2FzZS0+YWFkLCB0ZXN0X2Nhc2UtPmFhZF9sZW5ndGhfb2N0ZXRzKSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBkZWNyeXB0ICovCisgICAgICAgIGxlbiA9IHRlc3RfY2FzZS0+Y2lwaGVydGV4dF9sZW5ndGhfb2N0ZXRzOworICAgICAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9kZWNyeXB0KGMsIGJ1ZmZlciwgJmxlbik7CisgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgICAgIHNydHBfY2lwaGVyX2RlYWxsb2MoYyk7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisKKyAgICAgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfY2lwaGVyLCAicGxhaW50ZXh0OiAgICVzIiwKKyAgICAgICAgICAgICAgICAgICAgc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgdGVzdF9jYXNlLT5wbGFpbnRleHRfbGVuZ3RoX29jdGV0cykpOworCisgICAgICAgIC8qIGNvbXBhcmUgdGhlIHJlc3VsdGluZyBwbGFpbnRleHQgd2l0aCB0aGF0IGluIHRoZSB0ZXN0IGNhc2UgKi8KKyAgICAgICAgaWYgKGxlbiAhPSB0ZXN0X2Nhc2UtPnBsYWludGV4dF9sZW5ndGhfb2N0ZXRzKSB7CisgICAgICAgICAgICBzcnRwX2NpcGhlcl9kZWFsbG9jKGMpOworICAgICAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19hbGdvX2ZhaWw7CisgICAgICAgIH0KKyAgICAgICAgc3RhdHVzID0gc3J0cF9lcnJfc3RhdHVzX29rOworICAgICAgICBmb3IgKGsgPSAwOyBrIDwgdGVzdF9jYXNlLT5wbGFpbnRleHRfbGVuZ3RoX29jdGV0czsgaysrKSB7CisgICAgICAgICAgICBpZiAoYnVmZmVyW2tdICE9IHRlc3RfY2FzZS0+cGxhaW50ZXh0W2tdKSB7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gc3J0cF9lcnJfc3RhdHVzX2FsZ29fZmFpbDsKKyAgICAgICAgICAgICAgICBkZWJ1Z19wcmludChzcnRwX21vZF9jaXBoZXIsICJ0ZXN0IGNhc2UgJWQgZmFpbGVkIiwgY2FzZV9udW0pOworICAgICAgICAgICAgICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX2NpcGhlciwgIihmYWlsdXJlIGF0IGJ5dGUgJXUpIiwgayk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfY2lwaGVyLCAicCBjb21wdXRlZDogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIDIgKiB0ZXN0X2Nhc2UtPnBsYWludGV4dF9sZW5ndGhfb2N0ZXRzKSk7CisgICAgICAgICAgICBkZWJ1Z19wcmludChzcnRwX21vZF9jaXBoZXIsICJwIGV4cGVjdGVkOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX29jdGV0X3N0cmluZ19oZXhfc3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfY2FzZS0+cGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgKiB0ZXN0X2Nhc2UtPnBsYWludGV4dF9sZW5ndGhfb2N0ZXRzKSk7CisKKyAgICAgICAgICAgIHNydHBfY2lwaGVyX2RlYWxsb2MoYyk7CisgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2FsZ29fZmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGRlYWxsb2NhdGUgdGhlIGNpcGhlciAqLworICAgICAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9kZWFsbG9jKGMpOworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogdGhlIGNpcGhlciBwYXNzZWQgdGhlIHRlc3QgY2FzZSwgc28gbW92ZSBvbiB0byB0aGUgbmV4dCB0ZXN0CisgICAgICAgICAqIGNhc2UgaW4gdGhlIGxpc3Q7IGlmIE5VTEwsIHdlJ2wgcHJvY2VlZCB0byB0aGUgbmV4dCB0ZXN0CisgICAgICAgICAqLworICAgICAgICB0ZXN0X2Nhc2UgPSB0ZXN0X2Nhc2UtPm5leHRfdGVzdF9jYXNlOworICAgICAgICArK2Nhc2VfbnVtOwogICAgIH0KIAotICAgIC8qIGNvcHkgY2lwaGVydGV4dCBpbnRvIHRlc3QgYnVmZmVyICovCi0gICAgaWYgKHRlc3RfY2FzZS0+Y2lwaGVydGV4dF9sZW5ndGhfb2N0ZXRzID4gU0VMRl9URVNUX0JVRl9PQ1RFVFMpIHsKLSAgICAgIGNpcGhlcl9kZWFsbG9jKGMpOyAgICAKLSAgICAgIHJldHVybiBlcnJfc3RhdHVzX2JhZF9wYXJhbTsKLSAgICB9Ci0gICAgZm9yIChpPTA7IGkgPCB0ZXN0X2Nhc2UtPmNpcGhlcnRleHRfbGVuZ3RoX29jdGV0czsgaSsrKQotICAgICAgYnVmZmVyW2ldID0gdGVzdF9jYXNlLT5jaXBoZXJ0ZXh0W2ldOworICAgIC8qIG5vdyBydW4gc29tZSByYW5kb20gaW52ZXJ0aWJpbGl0eSB0ZXN0cyAqLwogCi0gICAgZGVidWdfcHJpbnQobW9kX2NpcGhlciwgImNpcGhlcnRleHQ6ICAgICVzIiwKLQkJb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoYnVmZmVyLAotCQkJCQl0ZXN0X2Nhc2UtPnBsYWludGV4dF9sZW5ndGhfb2N0ZXRzKSk7Ci0KLSAgICAvKiBzZXQgdGhlIGluaXRpYWxpemF0aW9uIHZlY3RvciAqLwotICAgIHN0YXR1cyA9IGNpcGhlcl9zZXRfaXYoYywgdGVzdF9jYXNlLT5pZHgpOworICAgIC8qIGFsbG9jYXRlIGNpcGhlciwgdXNpbmcgcGFyYW1hdGVycyBmcm9tIHRoZSBmaXJzdCB0ZXN0IGNhc2UgKi8KKyAgICB0ZXN0X2Nhc2UgPSB0ZXN0X2RhdGE7CisgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfdHlwZV9hbGxvYyhjdCwgJmMsIHRlc3RfY2FzZS0+a2V5X2xlbmd0aF9vY3RldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2Nhc2UtPnRhZ19sZW5ndGhfb2N0ZXRzKTsKICAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICBjaXBoZXJfZGVhbGxvYyhjKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfSAKLSAgICAKLSAgICAvKiBkZWNyeXB0ICovCi0gICAgbGVuID0gdGVzdF9jYXNlLT5jaXBoZXJ0ZXh0X2xlbmd0aF9vY3RldHM7Ci0gICAgc3RhdHVzID0gY2lwaGVyX2RlY3J5cHQoYywgYnVmZmVyLCAmbGVuKTsKLSAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICBjaXBoZXJfZGVhbGxvYyhjKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICAgIAotICAgIGRlYnVnX3ByaW50KG1vZF9jaXBoZXIsICJwbGFpbnRleHQ6ICAgJXMiLAotCSAgICAgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoYnVmZmVyLAotCQkJCSAgICAgdGVzdF9jYXNlLT5wbGFpbnRleHRfbGVuZ3RoX29jdGV0cykpOwotCi0gICAgLyogY29tcGFyZSB0aGUgcmVzdWx0aW5nIHBsYWludGV4dCB3aXRoIHRoYXQgaW4gdGhlIHRlc3QgY2FzZSAqLwotICAgIGlmIChsZW4gIT0gdGVzdF9jYXNlLT5wbGFpbnRleHRfbGVuZ3RoX29jdGV0cykKLSAgICAgIHJldHVybiBlcnJfc3RhdHVzX2FsZ29fZmFpbDsKLSAgICBzdGF0dXMgPSBlcnJfc3RhdHVzX29rOwotICAgIGZvciAoaT0wOyBpIDwgdGVzdF9jYXNlLT5wbGFpbnRleHRfbGVuZ3RoX29jdGV0czsgaSsrKQotICAgICAgaWYgKGJ1ZmZlcltpXSAhPSB0ZXN0X2Nhc2UtPnBsYWludGV4dFtpXSkgewotCXN0YXR1cyA9IGVycl9zdGF0dXNfYWxnb19mYWlsOwotCWRlYnVnX3ByaW50KG1vZF9jaXBoZXIsICJ0ZXN0IGNhc2UgJWQgZmFpbGVkIiwgY2FzZV9udW0pOwotCWRlYnVnX3ByaW50KG1vZF9jaXBoZXIsICIoZmFpbHVyZSBhdCBieXRlICVkKSIsIGkpOwotICAgICAgfQotICAgIGlmIChzdGF0dXMpIHsKLQotICAgICAgZGVidWdfcHJpbnQobW9kX2NpcGhlciwgInAgY29tcHV0ZWQ6ICVzIiwKLQkgICAgIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKGJ1ZmZlciwKLQkJICAyKnRlc3RfY2FzZS0+cGxhaW50ZXh0X2xlbmd0aF9vY3RldHMpKTsKLSAgICAgIGRlYnVnX3ByaW50KG1vZF9jaXBoZXIsICJwIGV4cGVjdGVkOiAlcyIsCi0JCSAgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcodGVzdF9jYXNlLT5wbGFpbnRleHQsCi0JCQkgIDIqdGVzdF9jYXNlLT5wbGFpbnRleHRfbGVuZ3RoX29jdGV0cykpOwotCi0gICAgICBjaXBoZXJfZGVhbGxvYyhjKTsKLSAgICAgIHJldHVybiBlcnJfc3RhdHVzX2FsZ29fZmFpbDsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAKLSAgICAvKiBkZWFsbG9jYXRlIHRoZSBjaXBoZXIgKi8KLSAgICBzdGF0dXMgPSBjaXBoZXJfZGVhbGxvYyhjKTsKLSAgICBpZiAoc3RhdHVzKQotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAKLSAgICAvKiAKLSAgICAgKiB0aGUgY2lwaGVyIHBhc3NlZCB0aGUgdGVzdCBjYXNlLCBzbyBtb3ZlIG9uIHRvIHRoZSBuZXh0IHRlc3QKLSAgICAgKiBjYXNlIGluIHRoZSBsaXN0OyBpZiBOVUxMLCB3ZSdsIHByb2NlZWQgdG8gdGhlIG5leHQgdGVzdAotICAgICAqLyAgIAotICAgIHRlc3RfY2FzZSA9IHRlc3RfY2FzZS0+bmV4dF90ZXN0X2Nhc2U7Ci0gICAgKytjYXNlX251bTsKLSAgfQorICAgIGZvciAoaiA9IDA7IGogPCBOVU1fUkFORF9URVNUUzsgaisrKSB7CisgICAgICAgIHVuc2lnbmVkIGludCBsZW5ndGg7CisgICAgICAgIHVuc2lnbmVkIGludCBwbGFpbnRleHRfbGVuOworICAgICAgICB1aW50OF90IGtleVtNQVhfS0VZX0xFTl07CisgICAgICAgIHVpbnQ4X3QgaXZbTUFYX0tFWV9MRU5dOwogCi0gIC8qIG5vdyBydW4gc29tZSByYW5kb20gaW52ZXJ0aWJpbGl0eSB0ZXN0cyAqLworICAgICAgICAvKiBjaG9vc2UgYSBsZW5ndGggYXQgcmFuZG9tIChsZWF2aW5nIHJvb20gZm9yIElWIGFuZCBwYWRkaW5nKSAqLworICAgICAgICBsZW5ndGggPSBzcnRwX2NpcGhlcl9yYW5kX3UzMl9mb3JfdGVzdHMoKSAlIChTRUxGX1RFU1RfQlVGX09DVEVUUyAtIDY0KTsKKyAgICAgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfY2lwaGVyLCAicmFuZG9tIHBsYWludGV4dCBsZW5ndGggJWRcbiIsIGxlbmd0aCk7CisgICAgICAgIHNydHBfY2lwaGVyX3JhbmRfZm9yX3Rlc3RzKGJ1ZmZlciwgbGVuZ3RoKTsKIAotICAvKiBhbGxvY2F0ZSBjaXBoZXIsIHVzaW5nIHBhcmFtYXRlcnMgZnJvbSB0aGUgZmlyc3QgdGVzdCBjYXNlICovCi0gIHRlc3RfY2FzZSA9IGN0LT50ZXN0X2RhdGE7Ci0gIHN0YXR1cyA9IGNpcGhlcl90eXBlX2FsbG9jKGN0LCAmYywgdGVzdF9jYXNlLT5rZXlfbGVuZ3RoX29jdGV0cyk7Ci0gIGlmIChzdGF0dXMpCi0gICAgICByZXR1cm4gc3RhdHVzOwotICAKLSAgcmFuZF9zb3VyY2VfaW5pdCgpOwotICAKLSAgZm9yIChqPTA7IGogPCBOVU1fUkFORF9URVNUUzsgaisrKSB7Ci0gICAgaW50IGxlbmd0aCwgcGxhaW50ZXh0X2xlbjsKLSAgICBvY3RldF90IGtleVtNQVhfS0VZX0xFTl07Ci0gICAgb2N0ZXRfdCAgaXZbTUFYX0tFWV9MRU5dOworICAgICAgICBkZWJ1Z19wcmludChzcnRwX21vZF9jaXBoZXIsICJwbGFpbnRleHQ6ICAgICVzIiwKKyAgICAgICAgICAgICAgICAgICAgc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZyhidWZmZXIsIGxlbmd0aCkpOwogCi0gICAgLyogY2hvb3NlIGEgbGVuZ3RoIGF0IHJhbmRvbSAobGVhdmluZyByb29tIGZvciBJViBhbmQgcGFkZGluZykgKi8KLSAgICBsZW5ndGggPSByYW5kKCkgJSAoU0VMRl9URVNUX0JVRl9PQ1RFVFMgLSA2NCk7Ci0gICAgZGVidWdfcHJpbnQobW9kX2NpcGhlciwgInJhbmRvbSBwbGFpbnRleHQgbGVuZ3RoICVkXG4iLCBsZW5ndGgpOwotICAgIHN0YXR1cyA9IHJhbmRfc291cmNlX2dldF9vY3RldF9zdHJpbmcoYnVmZmVyLCBsZW5ndGgpOwotICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7CisgICAgICAgIC8qIGNvcHkgcGxhaW50ZXh0IGludG8gc2Vjb25kIGJ1ZmZlciAqLworICAgICAgICBmb3IgKGkgPSAwOyAodW5zaWduZWQgaW50KWkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgYnVmZmVyMltpXSA9IGJ1ZmZlcltpXTsKKyAgICAgICAgfQogCi0gICAgZGVidWdfcHJpbnQobW9kX2NpcGhlciwgInBsYWludGV4dDogICAgJXMiLAotCQlvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhidWZmZXIsIGxlbmd0aCkpOworICAgICAgICAvKiBjaG9vc2UgYSBrZXkgYXQgcmFuZG9tICovCisgICAgICAgIGlmICh0ZXN0X2Nhc2UtPmtleV9sZW5ndGhfb2N0ZXRzID4gTUFYX0tFWV9MRU4pIHsKKyAgICAgICAgICAgIHNydHBfY2lwaGVyX2RlYWxsb2MoYyk7CisgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2NhbnRfY2hlY2s7CisgICAgICAgIH0KKyAgICAgICAgc3J0cF9jaXBoZXJfcmFuZF9mb3JfdGVzdHMoa2V5LCB0ZXN0X2Nhc2UtPmtleV9sZW5ndGhfb2N0ZXRzKTsKIAotICAgIC8qIGNvcHkgcGxhaW50ZXh0IGludG8gc2Vjb25kIGJ1ZmZlciAqLwotICAgIGZvciAoaT0wOyBpIDwgbGVuZ3RoOyBpKyspCi0gICAgICBidWZmZXIyW2ldID0gYnVmZmVyW2ldOwotICAgIAotICAgIC8qIGNob29zZSBhIGtleSBhdCByYW5kb20gKi8KLSAgICBpZiAodGVzdF9jYXNlLT5rZXlfbGVuZ3RoX29jdGV0cyA+IE1BWF9LRVlfTEVOKQotICAgICAgcmV0dXJuIGVycl9zdGF0dXNfY2FudF9jaGVjazsKLSAgICBzdGF0dXMgPSByYW5kX3NvdXJjZV9nZXRfb2N0ZXRfc3RyaW5nKGtleSwgdGVzdF9jYXNlLT5rZXlfbGVuZ3RoX29jdGV0cyk7Ci0gICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgLyogY2hvc2UgYSByYW5kb20gaW5pdGlhbGl6YXRpb24gdmVjdG9yICovCisgICAgICAgIHNydHBfY2lwaGVyX3JhbmRfZm9yX3Rlc3RzKGl2LCBNQVhfS0VZX0xFTik7CiAKLSAgIC8qIGNob3NlIGEgcmFuZG9tIGluaXRpYWxpemF0aW9uIHZlY3RvciAqLwotICAgIHN0YXR1cyA9IHJhbmRfc291cmNlX2dldF9vY3RldF9zdHJpbmcoaXYsIE1BWF9LRVlfTEVOKTsKLSAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOwotICAgICAgICAKLSAgICAvKiBpbml0aWFsaXplIGNpcGhlciAqLwotICAgIHN0YXR1cyA9IGNpcGhlcl9pbml0KGMsIGtleSwgZGlyZWN0aW9uX2VuY3J5cHQpOwotICAgIGlmIChzdGF0dXMpIHsKLSAgICAgIGNpcGhlcl9kZWFsbG9jKGMpOwotICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgLyogaW5pdGlhbGl6ZSBjaXBoZXIgKi8KKyAgICAgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfaW5pdChjLCBrZXkpOworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBzcnRwX2NpcGhlcl9kZWFsbG9jKGMpOworICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHNldCBpbml0aWFsaXphdGlvbiB2ZWN0b3IgKi8KKyAgICAgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfc2V0X2l2KGMsICh1aW50OF90ICopdGVzdF9jYXNlLT5pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX2RpcmVjdGlvbl9lbmNyeXB0KTsKKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgc3J0cF9jaXBoZXJfZGVhbGxvYyhjKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYy0+YWxnb3JpdGhtID09IFNSVFBfQUVTX0dDTV8xMjggfHwKKyAgICAgICAgICAgIGMtPmFsZ29yaXRobSA9PSBTUlRQX0FFU19HQ01fMjU2KSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogU2V0IHRoZSBBQUQKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfc2V0X2FhZChjLCB0ZXN0X2Nhc2UtPmFhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9jYXNlLT5hYWRfbGVuZ3RoX29jdGV0cyk7CisgICAgICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICAgICAgc3J0cF9jaXBoZXJfZGVhbGxvYyhjKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfY2lwaGVyLCAiQUFEOiAgICAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX29jdGV0X3N0cmluZ19oZXhfc3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfY2FzZS0+YWFkLCB0ZXN0X2Nhc2UtPmFhZF9sZW5ndGhfb2N0ZXRzKSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBlbmNyeXB0IGJ1ZmZlciB3aXRoIGNpcGhlciAqLworICAgICAgICBwbGFpbnRleHRfbGVuID0gbGVuZ3RoOworICAgICAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9lbmNyeXB0KGMsIGJ1ZmZlciwgJmxlbmd0aCk7CisgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgICAgIHNydHBfY2lwaGVyX2RlYWxsb2MoYyk7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisgICAgICAgIGlmIChjLT5hbGdvcml0aG0gPT0gU1JUUF9BRVNfR0NNXzEyOCB8fAorICAgICAgICAgICAgYy0+YWxnb3JpdGhtID09IFNSVFBfQUVTX0dDTV8yNTYpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBHZXQgdGhlIEdDTSB0YWcKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfZ2V0X3RhZyhjLCBidWZmZXIgKyBsZW5ndGgsICZ0YWdfbGVuKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgICAgICAgICBzcnRwX2NpcGhlcl9kZWFsbG9jKGMpOworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsZW5ndGggKz0gdGFnX2xlbjsKKyAgICAgICAgfQorICAgICAgICBkZWJ1Z19wcmludChzcnRwX21vZF9jaXBoZXIsICJjaXBoZXJ0ZXh0OiAgICVzIiwKKyAgICAgICAgICAgICAgICAgICAgc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZyhidWZmZXIsIGxlbmd0aCkpOworCisgICAgICAgIC8qCisgICAgICAgICAqIHJlLWluaXRpYWxpemUgY2lwaGVyIGZvciBkZWNyeXB0aW9uLCByZS1zZXQgdGhlIGl2LCB0aGVuCisgICAgICAgICAqIGRlY3J5cHQgdGhlIGNpcGhlcnRleHQKKyAgICAgICAgICovCisgICAgICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX2luaXQoYywga2V5KTsKKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgc3J0cF9jaXBoZXJfZGVhbGxvYyhjKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIH0KKyAgICAgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfc2V0X2l2KGMsICh1aW50OF90ICopdGVzdF9jYXNlLT5pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX2RpcmVjdGlvbl9kZWNyeXB0KTsKKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgc3J0cF9jaXBoZXJfZGVhbGxvYyhjKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGMtPmFsZ29yaXRobSA9PSBTUlRQX0FFU19HQ01fMTI4IHx8CisgICAgICAgICAgICBjLT5hbGdvcml0aG0gPT0gU1JUUF9BRVNfR0NNXzI1NikgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFNldCB0aGUgQUFECisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX3NldF9hYWQoYywgdGVzdF9jYXNlLT5hYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfY2FzZS0+YWFkX2xlbmd0aF9vY3RldHMpOworICAgICAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgICAgIHNydHBfY2lwaGVyX2RlYWxsb2MoYyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX2NpcGhlciwgIkFBRDogICAgJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2Nhc2UtPmFhZCwgdGVzdF9jYXNlLT5hYWRfbGVuZ3RoX29jdGV0cykpOworICAgICAgICB9CisgICAgICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX2RlY3J5cHQoYywgYnVmZmVyLCAmbGVuZ3RoKTsKKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgc3J0cF9jaXBoZXJfZGVhbGxvYyhjKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIH0KKworICAgICAgICBkZWJ1Z19wcmludChzcnRwX21vZF9jaXBoZXIsICJwbGFpbnRleHRbMl06ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZyhidWZmZXIsIGxlbmd0aCkpOworCisgICAgICAgIC8qIGNvbXBhcmUgdGhlIHJlc3VsdGluZyBwbGFpbnRleHQgd2l0aCB0aGUgb3JpZ2luYWwgb25lICovCisgICAgICAgIGlmIChsZW5ndGggIT0gcGxhaW50ZXh0X2xlbikgeworICAgICAgICAgICAgc3J0cF9jaXBoZXJfZGVhbGxvYyhjKTsKKyAgICAgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYWxnb19mYWlsOworICAgICAgICB9CisgICAgICAgIHN0YXR1cyA9IHNydHBfZXJyX3N0YXR1c19vazsKKyAgICAgICAgZm9yIChrID0gMDsgayA8IHBsYWludGV4dF9sZW47IGsrKykgeworICAgICAgICAgICAgaWYgKGJ1ZmZlcltrXSAhPSBidWZmZXIyW2tdKSB7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gc3J0cF9lcnJfc3RhdHVzX2FsZ29fZmFpbDsKKyAgICAgICAgICAgICAgICBkZWJ1Z19wcmludChzcnRwX21vZF9jaXBoZXIsICJyYW5kb20gdGVzdCBjYXNlICVkIGZhaWxlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZV9udW0pOworICAgICAgICAgICAgICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX2NpcGhlciwgIihmYWlsdXJlIGF0IGJ5dGUgJXUpIiwgayk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgc3J0cF9jaXBoZXJfZGVhbGxvYyhjKTsKKyAgICAgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYWxnb19mYWlsOworICAgICAgICB9CiAgICAgfQogCi0gICAgLyogc2V0IGluaXRpYWxpemF0aW9uIHZlY3RvciAqLwotICAgIHN0YXR1cyA9IGNpcGhlcl9zZXRfaXYoYywgdGVzdF9jYXNlLT5pZHgpOworICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX2RlYWxsb2MoYyk7CiAgICAgaWYgKHN0YXR1cykgewotICAgICAgY2lwaGVyX2RlYWxsb2MoYyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0gCi0KLSAgICAvKiBlbmNyeXB0IGJ1ZmZlciB3aXRoIGNpcGhlciAqLwotICAgIHBsYWludGV4dF9sZW4gPSBsZW5ndGg7Ci0gICAgc3RhdHVzID0gY2lwaGVyX2VuY3J5cHQoYywgYnVmZmVyLCAmbGVuZ3RoKTsKLSAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICBjaXBoZXJfZGVhbGxvYyhjKTsKLSAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQotICAgIGRlYnVnX3ByaW50KG1vZF9jaXBoZXIsICJjaXBoZXJ0ZXh0OiAgICVzIiwKLQkJb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoYnVmZmVyLCBsZW5ndGgpKTsKIAotICAgIC8qIAotICAgICAqIHJlLWluaXRpYWxpemUgY2lwaGVyIGZvciBkZWNyeXB0aW9uLCByZS1zZXQgdGhlIGl2LCB0aGVuCi0gICAgICogZGVjcnlwdCB0aGUgY2lwaGVydGV4dAotICAgICAqLwotICAgIHN0YXR1cyA9IGNpcGhlcl9pbml0KGMsIGtleSwgZGlyZWN0aW9uX2RlY3J5cHQpOwotICAgIGlmIChzdGF0dXMpIHsKLSAgICAgIGNpcGhlcl9kZWFsbG9jKGMpOwotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0gICAgc3RhdHVzID0gY2lwaGVyX3NldF9pdihjLCB0ZXN0X2Nhc2UtPmlkeCk7Ci0gICAgaWYgKHN0YXR1cykgewotICAgICAgY2lwaGVyX2RlYWxsb2MoYyk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0gCi0gICAgc3RhdHVzID0gY2lwaGVyX2RlY3J5cHQoYywgYnVmZmVyLCAmbGVuZ3RoKTsKLSAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICBjaXBoZXJfZGVhbGxvYyhjKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfSAgICAKLQotICAgIGRlYnVnX3ByaW50KG1vZF9jaXBoZXIsICJwbGFpbnRleHRbMl06ICVzIiwKLQkJb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoYnVmZmVyLCBsZW5ndGgpKTsgICAgCi0KLSAgICAvKiBjb21wYXJlIHRoZSByZXN1bHRpbmcgcGxhaW50ZXh0IHdpdGggdGhlIG9yaWdpbmFsIG9uZSAqLwotICAgIGlmIChsZW5ndGggIT0gcGxhaW50ZXh0X2xlbikKLSAgICAgIHJldHVybiBlcnJfc3RhdHVzX2FsZ29fZmFpbDsKLSAgICBzdGF0dXMgPSBlcnJfc3RhdHVzX29rOwotICAgIGZvciAoaT0wOyBpIDwgcGxhaW50ZXh0X2xlbjsgaSsrKQotICAgICAgaWYgKGJ1ZmZlcltpXSAhPSBidWZmZXIyW2ldKSB7Ci0Jc3RhdHVzID0gZXJyX3N0YXR1c19hbGdvX2ZhaWw7Ci0JZGVidWdfcHJpbnQobW9kX2NpcGhlciwgInJhbmRvbSB0ZXN0IGNhc2UgJWQgZmFpbGVkIiwgY2FzZV9udW0pOwotCWRlYnVnX3ByaW50KG1vZF9jaXBoZXIsICIoZmFpbHVyZSBhdCBieXRlICVkKSIsIGkpOwotICAgICAgfQotICAgIGlmIChzdGF0dXMpIHsKLSAgICAgIGNpcGhlcl9kZWFsbG9jKGMpOwotICAgICAgcmV0dXJuIGVycl9zdGF0dXNfYWxnb19mYWlsOwotICAgIH0KLSAgICAgICAgCi0gIH0KLQotICByZXR1cm4gZXJyX3N0YXR1c19vazsKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQogCisvKgorICogc3J0cF9jaXBoZXJfdHlwZV9zZWxmX3Rlc3QoY3QpIHBlcmZvcm1zIHNydHBfY2lwaGVyX3R5cGVfdGVzdCBvbiBjdCdzCisgKiBpbnRlcm5hbCBsaXN0IG9mIHRlc3QgZGF0YS4KKyAqLworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9jaXBoZXJfdHlwZV9zZWxmX3Rlc3QoY29uc3Qgc3J0cF9jaXBoZXJfdHlwZV90ICpjdCkKK3sKKyAgICByZXR1cm4gc3J0cF9jaXBoZXJfdHlwZV90ZXN0KGN0LCBjdC0+dGVzdF9kYXRhKTsKK30KIAogLyoKICAqIGNpcGhlcl9iaXRzX3Blcl9zZWNvbmQoYywgbCwgdCkgY29tcHV0ZXMgKGFuIGVzdGltYXRlIG9mKSB0aGUKICAqIG51bWJlciBvZiBiaXRzIHRoYXQgYSBjaXBoZXIgaW1wbGVtZW50YXRpb24gY2FuIGVuY3J5cHQgaW4gYSBzZWNvbmQKLSAqIAorICoKICAqIGMgaXMgYSBjaXBoZXIgKHdoaWNoIE1VU1QgYmUgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBhbHJlYWR5KSwgbAogICogaXMgdGhlIGxlbmd0aCBpbiBvY3RldHMgb2YgdGhlIHRlc3QgZGF0YSB0byBiZSBlbmNyeXB0ZWQsIGFuZCB0IGlzCiAgKiB0aGUgbnVtYmVyIG9mIHRyaWFscwogICoKLSAqIGlmIGFuIGVycm9yIGlzIGVuY291bnRlcmVkLCB0aGUgdmFsdWUgMC4wIGlzIHJldHVybmVkCisgKiBpZiBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZCwgdGhlIHZhbHVlIDAgaXMgcmV0dXJuZWQKICAqLwordWludDY0X3Qgc3J0cF9jaXBoZXJfYml0c19wZXJfc2Vjb25kKHNydHBfY2lwaGVyX3QgKmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9jdGV0c19pbl9idWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV90cmlhbHMpCit7CisgICAgaW50IGk7CisgICAgdjEyOF90IG5vbmNlOworICAgIGNsb2NrX3QgdGltZXI7CisgICAgdW5zaWduZWQgY2hhciAqZW5jX2J1ZjsKKyAgICB1bnNpZ25lZCBpbnQgbGVuID0gb2N0ZXRzX2luX2J1ZmZlcjsKIAotZG91YmxlCi1jaXBoZXJfYml0c19wZXJfc2Vjb25kKGNpcGhlcl90ICpjLCBpbnQgb2N0ZXRzX2luX2J1ZmZlciwgaW50IG51bV90cmlhbHMpIHsKLSAgaW50IGk7Ci0gIHYxMjhfdCBub25jZTsKLSAgY2xvY2tfdCB0aW1lcjsKLSAgdW5zaWduZWQgY2hhciAqZW5jX2J1ZjsKLSAgdW5zaWduZWQgaW50IGxlbiA9IG9jdGV0c19pbl9idWZmZXI7CisgICAgZW5jX2J1ZiA9ICh1bnNpZ25lZCBjaGFyICopc3J0cF9jcnlwdG9fYWxsb2Mob2N0ZXRzX2luX2J1ZmZlcik7CisgICAgaWYgKGVuY19idWYgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsgLyogaW5kaWNhdGUgYmFkIHBhcmFtZXRlcnMgYnkgcmV0dXJuaW5nIG51bGwgKi8KKyAgICB9CisgICAgLyogdGltZSByZXBlYXRlZCB0cmlhbHMgKi8KKyAgICB2MTI4X3NldF90b196ZXJvKCZub25jZSk7CisgICAgdGltZXIgPSBjbG9jaygpOworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fdHJpYWxzOyBpKyssIG5vbmNlLnYzMlszXSA9IGkpIHsKKyAgICAgICAgaWYgKHNydHBfY2lwaGVyX3NldF9pdihjLCAodWludDhfdCAqKSZub25jZSwgc3J0cF9kaXJlY3Rpb25fZW5jcnlwdCkgIT0KKyAgICAgICAgICAgIHNydHBfZXJyX3N0YXR1c19vaykgeworICAgICAgICAgICAgc3J0cF9jcnlwdG9fZnJlZShlbmNfYnVmKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGlmIChzcnRwX2NpcGhlcl9lbmNyeXB0KGMsIGVuY19idWYsICZsZW4pICE9IHNydHBfZXJyX3N0YXR1c19vaykgeworICAgICAgICAgICAgc3J0cF9jcnlwdG9fZnJlZShlbmNfYnVmKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorICAgIHRpbWVyID0gY2xvY2soKSAtIHRpbWVyOwogCi0gIGVuY19idWYgPSBjcnlwdG9fYWxsb2Mob2N0ZXRzX2luX2J1ZmZlcik7Ci0gIGlmIChlbmNfYnVmID09IE5VTEwpCi0gICAgcmV0dXJuIDAuMDsgIC8qIGluZGljYXRlIGJhZCBwYXJhbWV0ZXJzIGJ5IHJldHVybmluZyBudWxsICovCi0gIAotICAvKiB0aW1lIHJlcGVhdGVkIHRyaWFscyAqLwotICB2MTI4X3NldF90b196ZXJvKCZub25jZSk7Ci0gIHRpbWVyID0gY2xvY2soKTsKLSAgZm9yKGk9MDsgaSA8IG51bV90cmlhbHM7IGkrKywgbm9uY2UudjMyWzNdID0gaSkgewotICAgIGNpcGhlcl9zZXRfaXYoYywgJm5vbmNlKTsKLSAgICBjaXBoZXJfZW5jcnlwdChjLCBlbmNfYnVmLCAmbGVuKTsKLSAgfQotICB0aW1lciA9IGNsb2NrKCkgLSB0aW1lcjsKKyAgICBzcnRwX2NyeXB0b19mcmVlKGVuY19idWYpOwogCi0gIGNyeXB0b19mcmVlKGVuY19idWYpOwotICAKLSAgcmV0dXJuIChkb3VibGUpIENMT0NLU19QRVJfU0VDICogbnVtX3RyaWFscwotICAgICogOCAqIG9jdGV0c19pbl9idWZmZXIgLyB0aW1lcjsKKyAgICBpZiAodGltZXIgPT0gMCkgeworICAgICAgICAvKiBUb28gZmFzdCEgKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuICh1aW50NjRfdClDTE9DS1NfUEVSX1NFQyAqIG51bV90cmlhbHMgKiA4ICogb2N0ZXRzX2luX2J1ZmZlciAvIHRpbWVyOwogfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2NpcGhlci9udWxsX2NpcGhlci5jIGIvY3J5cHRvL2NpcGhlci9udWxsX2NpcGhlci5jCmluZGV4IGIwMDhkMTIuLjY1OWFkZDAgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jaXBoZXIvbnVsbF9jaXBoZXIuYworKysgYi9jcnlwdG8vY2lwaGVyL251bGxfY2lwaGVyLmMKQEAgLTksMjYgKzksMjYgQEAKICAqLwogCiAvKgotICoJCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSwgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDE3IENpc2NvIFN5c3RlbXMsIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogCisgKgogICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCiAgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCiAgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAogICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKKyAqCiAgKiAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAgKiAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAorICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwpAQCAtNDQsMTA5ICs0NCwxMTAgQEAKICAqCiAgKi8KIAorI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSAiZGF0YXR5cGVzLmgiCiAjaW5jbHVkZSAibnVsbF9jaXBoZXIuaCIKKyNpbmNsdWRlICJlcnIuaCIgLyogZm9yIHNydHBfZGVidWcgKi8KICNpbmNsdWRlICJhbGxvYy5oIgorI2luY2x1ZGUgImNpcGhlcl90eXBlcy5oIgogCi0vKiB0aGUgbnVsbF9jaXBoZXIgdXNlcyB0aGUgY2lwaGVyIGRlYnVnIG1vZHVsZSAgKi8KK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX251bGxfY2lwaGVyX2FsbG9jKHNydHBfY2lwaGVyX3QgKipjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtleV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGxlbikKK3sKKyAgICBleHRlcm4gY29uc3Qgc3J0cF9jaXBoZXJfdHlwZV90IHNydHBfbnVsbF9jaXBoZXI7CiAKLWV4dGVybiBkZWJ1Z19tb2R1bGVfdCBtb2RfY2lwaGVyOworICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX2NpcGhlciwgImFsbG9jYXRpbmcgY2lwaGVyIHdpdGgga2V5IGxlbmd0aCAlZCIsCisgICAgICAgICAgICAgICAga2V5X2xlbik7CiAKLWVycl9zdGF0dXNfdAotbnVsbF9jaXBoZXJfYWxsb2MoY2lwaGVyX3QgKipjLCBpbnQga2V5X2xlbikgewotICBleHRlcm4gY2lwaGVyX3R5cGVfdCBudWxsX2NpcGhlcjsKLSAgdWludDhfdCAqcG9pbnRlcjsKLSAgCi0gIGRlYnVnX3ByaW50KG1vZF9jaXBoZXIsIAotCSAgICAgICJhbGxvY2F0aW5nIGNpcGhlciB3aXRoIGtleSBsZW5ndGggJWQiLCBrZXlfbGVuKTsKKyAgICAvKiBhbGxvY2F0ZSBtZW1vcnkgYSBjaXBoZXIgb2YgdHlwZSBudWxsX2NpcGhlciAqLworICAgICpjID0gKHNydHBfY2lwaGVyX3QgKilzcnRwX2NyeXB0b19hbGxvYyhzaXplb2Yoc3J0cF9jaXBoZXJfdCkpOworICAgIGlmICgqYyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYWxsb2NfZmFpbDsKKyAgICB9CiAKLSAgLyogYWxsb2NhdGUgbWVtb3J5IGEgY2lwaGVyIG9mIHR5cGUgbnVsbF9jaXBoZXIgKi8KLSAgcG9pbnRlciA9IGNyeXB0b19hbGxvYyhzaXplb2YobnVsbF9jaXBoZXJfY3R4X3QpICsgc2l6ZW9mKGNpcGhlcl90KSk7Ci0gIGlmIChwb2ludGVyID09IE5VTEwpCi0gICAgcmV0dXJuIGVycl9zdGF0dXNfYWxsb2NfZmFpbDsKKyAgICAvKiBzZXQgcG9pbnRlcnMgKi8KKyAgICAoKmMpLT5hbGdvcml0aG0gPSBTUlRQX05VTExfQ0lQSEVSOworICAgICgqYyktPnR5cGUgPSAmc3J0cF9udWxsX2NpcGhlcjsKKyAgICAoKmMpLT5zdGF0ZSA9ICh2b2lkICopMHgxOyAvKiBUaGUgbnVsbCBjaXBoZXIgZG9lcyBub3QgbWFpbnRhaW4gc3RhdGUgKi8KIAotICAvKiBzZXQgcG9pbnRlcnMgKi8KLSAgKmMgPSAoY2lwaGVyX3QgKilwb2ludGVyOwotICAoKmMpLT50eXBlID0gJm51bGxfY2lwaGVyOwotICAoKmMpLT5zdGF0ZSA9IHBvaW50ZXIgKyBzaXplb2YoY2lwaGVyX3QpOworICAgIC8qIHNldCBrZXkgc2l6ZSAqLworICAgICgqYyktPmtleV9sZW4gPSBrZXlfbGVuOwogCi0gIC8qIHNldCBrZXkgc2l6ZSAqLwotICAoKmMpLT5rZXlfbGVuID0ga2V5X2xlbjsKLQotICAvKiBpbmNyZW1lbnQgcmVmX2NvdW50ICovCi0gIG51bGxfY2lwaGVyLnJlZl9jb3VudCsrOwotICAKLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7Ci0gIAorICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7CiB9CiAKLWVycl9zdGF0dXNfdAotbnVsbF9jaXBoZXJfZGVhbGxvYyhjaXBoZXJfdCAqYykgewotICBleHRlcm4gY2lwaGVyX3R5cGVfdCBudWxsX2NpcGhlcjsKK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX251bGxfY2lwaGVyX2RlYWxsb2Moc3J0cF9jaXBoZXJfdCAqYykKK3sKKyAgICBleHRlcm4gY29uc3Qgc3J0cF9jaXBoZXJfdHlwZV90IHNydHBfbnVsbF9jaXBoZXI7CiAKLSAgLyogemVyb2l6ZSBlbnRpcmUgc3RhdGUqLwotICBvY3RldF9zdHJpbmdfc2V0X3RvX3plcm8oKG9jdGV0X3QgKiljLCAKLQkJCSAgIHNpemVvZihudWxsX2NpcGhlcl9jdHhfdCkgKyBzaXplb2YoY2lwaGVyX3QpKTsKKyAgICAvKiB6ZXJvaXplIGVudGlyZSBzdGF0ZSovCisgICAgb2N0ZXRfc3RyaW5nX3NldF90b196ZXJvKGMsIHNpemVvZihzcnRwX2NpcGhlcl90KSk7CiAKLSAgLyogZnJlZSBtZW1vcnkgb2YgdHlwZSBudWxsX2NpcGhlciAqLwotICBjcnlwdG9fZnJlZShjKTsKKyAgICAvKiBmcmVlIG1lbW9yeSBvZiB0eXBlIG51bGxfY2lwaGVyICovCisgICAgc3J0cF9jcnlwdG9fZnJlZShjKTsKIAotICAvKiBkZWNyZW1lbnQgcmVmZXJlbmNlIGNvdW50ICovCi0gIG51bGxfY2lwaGVyLnJlZl9jb3VudC0tOwotICAKLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7Ci0gIAorICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7CiB9CiAKLWVycl9zdGF0dXNfdAotbnVsbF9jaXBoZXJfaW5pdChudWxsX2NpcGhlcl9jdHhfdCAqY3R4LCBjb25zdCBvY3RldF90ICprZXkpIHsKK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX251bGxfY2lwaGVyX2luaXQodm9pZCAqY3YsIGNvbnN0IHVpbnQ4X3QgKmtleSkKK3sKKyAgICAvKiBzcnRwX251bGxfY2lwaGVyX2N0eF90ICpjID0gKHNydHBfbnVsbF9jaXBoZXJfY3R4X3QgKiljdjsgKi8KIAotICBkZWJ1Z19wcmludChtb2RfY2lwaGVyLCAiaW5pdGlhbGl6aW5nIG51bGwgY2lwaGVyIiwgTlVMTCk7CisgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfY2lwaGVyLCAiaW5pdGlhbGl6aW5nIG51bGwgY2lwaGVyIiwgTlVMTCk7CiAKLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7CisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKIH0KIAotZXJyX3N0YXR1c190Ci1udWxsX2NpcGhlcl9zZXRfaXYobnVsbF9jaXBoZXJfY3R4X3QgKmMsIHZvaWQgKml2KSB7IAotICByZXR1cm4gZXJyX3N0YXR1c19vazsKK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX251bGxfY2lwaGVyX3NldF9pdih2b2lkICpjdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX2NpcGhlcl9kaXJlY3Rpb25fdCBkaXIpCit7CisgICAgLyogc3J0cF9udWxsX2NpcGhlcl9jdHhfdCAqYyA9IChzcnRwX251bGxfY2lwaGVyX2N0eF90ICopY3Y7ICovCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKIH0KIAotZXJyX3N0YXR1c190Ci1udWxsX2NpcGhlcl9lbmNyeXB0KG51bGxfY2lwaGVyX2N0eF90ICpjLAotCQkgICAgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgKmJ5dGVzX3RvX2VuY3IpIHsKLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7CitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9udWxsX2NpcGhlcl9lbmNyeXB0KHZvaWQgKmN2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqYnl0ZXNfdG9fZW5jcikKK3sKKyAgICAvKiBzcnRwX251bGxfY2lwaGVyX2N0eF90ICpjID0gKHNydHBfbnVsbF9jaXBoZXJfY3R4X3QgKiljdjsgKi8KKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQogCi1jaGFyIAotbnVsbF9jaXBoZXJfZGVzY3JpcHRpb25bXSA9ICJudWxsIGNpcGhlciI7CitzdGF0aWMgY29uc3QgY2hhciBzcnRwX251bGxfY2lwaGVyX2Rlc2NyaXB0aW9uW10gPSAibnVsbCBjaXBoZXIiOwogCi1jaXBoZXJfdGVzdF9jYXNlX3QgIAotbnVsbF9jaXBoZXJfdGVzdF8wID0gewotICAwLCAgICAgICAgICAgICAgICAgLyogb2N0ZXRzIGluIGtleSAgICAgICAgICAgICovCi0gIE5VTEwsICAgICAgICAgICAgICAvKiBrZXkgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgMCwgICAgICAgICAgICAgICAgIC8qIHBhY2tldCBpbmRleCAgICAgICAgICAgICAqLwotICAwLCAgICAgICAgICAgICAgICAgLyogb2N0ZXRzIGluIHBsYWludGV4dCAgICAgICovCi0gIE5VTEwsICAgICAgICAgICAgICAvKiBwbGFpbnRleHQgICAgICAgICAgICAgICAgKi8KLSAgMCwgICAgICAgICAgICAgICAgIC8qIG9jdGV0cyBpbiBwbGFpbnRleHQgICAgICAqLwotICBOVUxMLCAgICAgICAgICAgICAgLyogY2lwaGVydGV4dCAgICAgICAgICAgICAgICovCi0gIE5VTEwgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIG5leHQgdGVzdGNhc2UgKi8KK3N0YXRpYyBjb25zdCBzcnRwX2NpcGhlcl90ZXN0X2Nhc2VfdCBzcnRwX251bGxfY2lwaGVyX3Rlc3RfMCA9IHsKKyAgICAwLCAgICAvKiBvY3RldHMgaW4ga2V5ICAgICAgICAgICAgKi8KKyAgICBOVUxMLCAvKiBrZXkgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAwLCAgICAvKiBwYWNrZXQgaW5kZXggICAgICAgICAgICAgKi8KKyAgICAwLCAgICAvKiBvY3RldHMgaW4gcGxhaW50ZXh0ICAgICAgKi8KKyAgICBOVUxMLCAvKiBwbGFpbnRleHQgICAgICAgICAgICAgICAgKi8KKyAgICAwLCAgICAvKiBvY3RldHMgaW4gcGxhaW50ZXh0ICAgICAgKi8KKyAgICBOVUxMLCAvKiBjaXBoZXJ0ZXh0ICAgICAgICAgICAgICAgKi8KKyAgICAwLCAgICAvKiAqLworICAgIE5VTEwsIC8qICovCisgICAgMCwgICAgLyogKi8KKyAgICBOVUxMICAvKiBwb2ludGVyIHRvIG5leHQgdGVzdGNhc2UgKi8KIH07CiAKLQogLyoKICAqIG5vdGU6IHRoZSBkZWNyeXB0IGZ1bmN0aW9uIGlzIGlkZW50aWFsIHRvIHRoZSBlbmNyeXB0IGZ1bmN0aW9uCiAgKi8KIAotY2lwaGVyX3R5cGVfdCBudWxsX2NpcGhlciA9IHsKLSAgKGNpcGhlcl9hbGxvY19mdW5jX3QpICAgICAgICAgbnVsbF9jaXBoZXJfYWxsb2MsCi0gIChjaXBoZXJfZGVhbGxvY19mdW5jX3QpICAgICAgIG51bGxfY2lwaGVyX2RlYWxsb2MsCi0gIChjaXBoZXJfaW5pdF9mdW5jX3QpICAgICAgICAgIG51bGxfY2lwaGVyX2luaXQsCi0gIChjaXBoZXJfZW5jcnlwdF9mdW5jX3QpICAgICAgIG51bGxfY2lwaGVyX2VuY3J5cHQsCi0gIChjaXBoZXJfZGVjcnlwdF9mdW5jX3QpICAgICAgIG51bGxfY2lwaGVyX2VuY3J5cHQsCi0gIChjaXBoZXJfc2V0X2l2X2Z1bmNfdCkgICAgICAgIG51bGxfY2lwaGVyX3NldF9pdiwKLSAgKGNoYXIgKikgICAgICAgICAgICAgICAgICAgICAgbnVsbF9jaXBoZXJfZGVzY3JpcHRpb24sCi0gIChpbnQpICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gIChjaXBoZXJfdGVzdF9jYXNlX3QgKikgICAgICAgJm51bGxfY2lwaGVyX3Rlc3RfMCwKLSAgKGRlYnVnX21vZHVsZV90ICopICAgICAgICAgICAgTlVMTAorY29uc3Qgc3J0cF9jaXBoZXJfdHlwZV90IHNydHBfbnVsbF9jaXBoZXIgPSB7CisgICAgc3J0cF9udWxsX2NpcGhlcl9hbGxvYywgICAgICAgLyogKi8KKyAgICBzcnRwX251bGxfY2lwaGVyX2RlYWxsb2MsICAgICAvKiAqLworICAgIHNydHBfbnVsbF9jaXBoZXJfaW5pdCwgICAgICAgIC8qICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0X2FhZCAqLworICAgIHNydHBfbnVsbF9jaXBoZXJfZW5jcnlwdCwgICAgIC8qICovCisgICAgc3J0cF9udWxsX2NpcGhlcl9lbmNyeXB0LCAgICAgLyogKi8KKyAgICBzcnRwX251bGxfY2lwaGVyX3NldF9pdiwgICAgICAvKiAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdldF90YWcgKi8KKyAgICBzcnRwX251bGxfY2lwaGVyX2Rlc2NyaXB0aW9uLCAvKiAqLworICAgICZzcnRwX251bGxfY2lwaGVyX3Rlc3RfMCwgICAgIC8qICovCisgICAgU1JUUF9OVUxMX0NJUEhFUiAgICAgICAgICAgICAgLyogKi8KIH07Ci0KZGlmZiAtLWdpdCBhL2NyeXB0by9oYXNoL2F1dGguYyBiL2NyeXB0by9oYXNoL2F1dGguYwppbmRleCBmYjZiN2IxLi5mMTkzMjdkIDEwMDY0NAotLS0gYS9jcnlwdG8vaGFzaC9hdXRoLmMKKysrIGIvY3J5cHRvL2hhc2gvYXV0aC5jCkBAIC04LDI2ICs4LDI2IEBACiAgKi8KIAogLyoKLSAqCQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUsIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxNywgQ2lzY28gU3lzdGVtcywgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAorICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgotICogCisgKgogICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKICAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKICAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCiAgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAorICoKICAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKICAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCkBAIC00MywxMzEgKzQzLDE0NSBAQAogICoKICAqLwogCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKICNpbmNsdWRlICJhdXRoLmgiCisjaW5jbHVkZSAiZXJyLmgiICAgICAgIC8qIGZvciBzcnRwX2RlYnVnICovCisjaW5jbHVkZSAiZGF0YXR5cGVzLmgiIC8qIGZvciBvY3RldF9zdHJpbmcgKi8KIAogLyogdGhlIGRlYnVnIG1vZHVsZSBmb3IgYXV0aGVudGlhdGlvbiAqLwogCi1kZWJ1Z19tb2R1bGVfdCBtb2RfYXV0aCA9IHsKLSAgMCwgICAgICAgICAgICAgICAgICAvKiBkZWJ1Z2dpbmcgaXMgb2ZmIGJ5IGRlZmF1bHQgKi8KLSAgImF1dGggZnVuYyIgICAgICAgICAvKiBwcmludGFibGUgbmFtZSBmb3IgbW9kdWxlICAgKi8KK3NydHBfZGVidWdfbW9kdWxlX3Qgc3J0cF9tb2RfYXV0aCA9IHsKKyAgICAwLCAgICAgICAgICAvKiBkZWJ1Z2dpbmcgaXMgb2ZmIGJ5IGRlZmF1bHQgKi8KKyAgICAiYXV0aCBmdW5jIiAvKiBwcmludGFibGUgbmFtZSBmb3IgbW9kdWxlICAgKi8KIH07CiAKLQotaW50Ci1hdXRoX2dldF9rZXlfbGVuZ3RoKGNvbnN0IGF1dGhfdCAqYSkgewotICByZXR1cm4gYS0+a2V5X2xlbjsKK2ludCBzcnRwX2F1dGhfZ2V0X2tleV9sZW5ndGgoY29uc3Qgc3J0cF9hdXRoX3QgKmEpCit7CisgICAgcmV0dXJuIGEtPmtleV9sZW47CiB9CiAKLWludAotYXV0aF9nZXRfdGFnX2xlbmd0aChjb25zdCBhdXRoX3QgKmEpIHsKLSAgcmV0dXJuIGEtPm91dF9sZW47CitpbnQgc3J0cF9hdXRoX2dldF90YWdfbGVuZ3RoKGNvbnN0IHNydHBfYXV0aF90ICphKQoreworICAgIHJldHVybiBhLT5vdXRfbGVuOwogfQogCi1pbnQKLWF1dGhfZ2V0X3ByZWZpeF9sZW5ndGgoY29uc3QgYXV0aF90ICphKSB7Ci0gIHJldHVybiBhLT5wcmVmaXhfbGVuOwotfQotCi1pbnQKLWF1dGhfdHlwZV9nZXRfcmVmX2NvdW50KGNvbnN0IGF1dGhfdHlwZV90ICphdCkgewotICByZXR1cm4gYXQtPnJlZl9jb3VudDsKK2ludCBzcnRwX2F1dGhfZ2V0X3ByZWZpeF9sZW5ndGgoY29uc3Qgc3J0cF9hdXRoX3QgKmEpCit7CisgICAgcmV0dXJuIGEtPnByZWZpeF9sZW47CiB9CiAKIC8qCi0gKiBhdXRoX3R5cGVfc2VsZl90ZXN0KCkgdGVzdHMgYW4gYXV0aCBmdW5jdGlvbiBvZiB0eXBlIGN0IGFnYWluc3QKLSAqIHRlc3QgY2FzZXMgcHJvdmlkZWQgaW4gYW4gYXJyYXkgb2YgdmFsdWVzIG9mIGtleSwgZGF0YSwgYW5kIHRhZworICogc3J0cF9hdXRoX3R5cGVfdGVzdCgpIHRlc3RzIGFuIGF1dGggZnVuY3Rpb24gb2YgdHlwZSBjdCBhZ2FpbnN0CisgKiB0ZXN0IGNhc2VzIHByb3ZpZGVkIGluIGEgbGlzdCB0ZXN0X2RhdGEgb2YgdmFsdWVzIG9mIGtleSwgZGF0YSwgYW5kIHRhZwogICogdGhhdCBpcyBrbm93biB0byBiZSBnb29kCiAgKi8KIAogLyogc2hvdWxkIGJlIGJpZyBlbm91Z2ggZm9yIG1vc3Qgb2NjYXNpb25zICovCiAjZGVmaW5lIFNFTEZfVEVTVF9UQUdfQlVGX09DVEVUUyAzMgogCi1lcnJfc3RhdHVzX3QKLWF1dGhfdHlwZV9zZWxmX3Rlc3QoY29uc3QgYXV0aF90eXBlX3QgKmF0KSB7Ci0gIGF1dGhfdGVzdF9jYXNlX3QgKnRlc3RfY2FzZSA9IGF0LT50ZXN0X2RhdGE7Ci0gIGF1dGhfdCAqYTsKLSAgZXJyX3N0YXR1c190IHN0YXR1czsKLSAgb2N0ZXRfdCB0YWdbU0VMRl9URVNUX1RBR19CVUZfT0NURVRTXTsKLSAgaW50IGksIGNhc2VfbnVtID0gMDsKK3NydHBfZXJyX3N0YXR1c190IHNydHBfYXV0aF90eXBlX3Rlc3QoY29uc3Qgc3J0cF9hdXRoX3R5cGVfdCAqYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNydHBfYXV0aF90ZXN0X2Nhc2VfdCAqdGVzdF9kYXRhKQoreworICAgIGNvbnN0IHNydHBfYXV0aF90ZXN0X2Nhc2VfdCAqdGVzdF9jYXNlID0gdGVzdF9kYXRhOworICAgIHNydHBfYXV0aF90ICphOworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKKyAgICB1aW50OF90IHRhZ1tTRUxGX1RFU1RfVEFHX0JVRl9PQ1RFVFNdOworICAgIGludCBpLCBjYXNlX251bSA9IDA7CiAKLSAgZGVidWdfcHJpbnQobW9kX2F1dGgsICJydW5uaW5nIHNlbGYtdGVzdCBmb3IgYXV0aCBmdW5jdGlvbiAlcyIsIAotCSAgICAgIGF0LT5kZXNjcmlwdGlvbik7Ci0gIAotICAvKgotICAgKiBjaGVjayB0byBtYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGF0IGxlYXN0IG9uZSB0ZXN0IGNhc2UsIGFuZAotICAgKiByZXR1cm4gYW4gZXJyb3IgaWYgd2UgZG9uJ3QgLSB3ZSBuZWVkIHRvIGJlIHBhcmFub2lkIGhlcmUKLSAgICovCi0gIGlmICh0ZXN0X2Nhc2UgPT0gTlVMTCkKLSAgICByZXR1cm4gZXJyX3N0YXR1c19jYW50X2NoZWNrOworICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX2F1dGgsICJydW5uaW5nIHNlbGYtdGVzdCBmb3IgYXV0aCBmdW5jdGlvbiAlcyIsCisgICAgICAgICAgICAgICAgYXQtPmRlc2NyaXB0aW9uKTsKIAotICAvKiBsb29wIG92ZXIgYWxsIHRlc3QgY2FzZXMgKi8gIAotICB3aGlsZSAodGVzdF9jYXNlICE9IE5VTEwpIHsKLQotICAgIC8qIGNoZWNrIHRlc3QgY2FzZSBwYXJhbWV0ZXJzICovCi0gICAgaWYgKHRlc3RfY2FzZS0+dGFnX2xlbmd0aF9vY3RldHMgPiBTRUxGX1RFU1RfVEFHX0JVRl9PQ1RFVFMpCi0gICAgICByZXR1cm4gZXJyX3N0YXR1c19iYWRfcGFyYW07Ci0gICAgCi0gICAgLyogYWxsb2NhdGUgYXV0aCAqLwotICAgIHN0YXR1cyA9IGF1dGhfdHlwZV9hbGxvYyhhdCwgJmEsIHRlc3RfY2FzZS0+a2V5X2xlbmd0aF9vY3RldHMsCi0JCQkgICAgIHRlc3RfY2FzZS0+dGFnX2xlbmd0aF9vY3RldHMpOwotICAgIGlmIChzdGF0dXMpCi0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIAotICAgIC8qIGluaXRpYWxpemUgYXV0aCAqLwotICAgIHN0YXR1cyA9IGF1dGhfaW5pdChhLCB0ZXN0X2Nhc2UtPmtleSk7Ci0gICAgaWYgKHN0YXR1cykgewotICAgICAgYXV0aF9kZWFsbG9jKGEpOwotICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAvKgorICAgICAqIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgYXQgbGVhc3Qgb25lIHRlc3QgY2FzZSwgYW5kCisgICAgICogcmV0dXJuIGFuIGVycm9yIGlmIHdlIGRvbid0IC0gd2UgbmVlZCB0byBiZSBwYXJhbm9pZCBoZXJlCisgICAgICovCisgICAgaWYgKHRlc3RfY2FzZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfY2FudF9jaGVjazsKICAgICB9CiAKLSAgICAvKiB6ZXJvaXplIHRhZyB0aGVuIGNvbXB1dGUgKi8KLSAgICBvY3RldF9zdHJpbmdfc2V0X3RvX3plcm8odGFnLCB0ZXN0X2Nhc2UtPnRhZ19sZW5ndGhfb2N0ZXRzKTsKLSAgICBzdGF0dXMgPSBhdXRoX2NvbXB1dGUoYSwgdGVzdF9jYXNlLT5kYXRhLAotCQkJICB0ZXN0X2Nhc2UtPmRhdGFfbGVuZ3RoX29jdGV0cywgdGFnKTsKLSAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICBhdXRoX2RlYWxsb2MoYSk7Ci0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLSAgICAKLSAgICBkZWJ1Z19wcmludChtb2RfYXV0aCwgImtleTogJXMiLAotCQlvY3RldF9zdHJpbmdfaGV4X3N0cmluZyh0ZXN0X2Nhc2UtPmtleSwKLQkJCQkJdGVzdF9jYXNlLT5rZXlfbGVuZ3RoX29jdGV0cykpOwotICAgIGRlYnVnX3ByaW50KG1vZF9hdXRoLCAiZGF0YTogJXMiLAotCQlvY3RldF9zdHJpbmdfaGV4X3N0cmluZyh0ZXN0X2Nhc2UtPmRhdGEsCi0JCQkJICAgdGVzdF9jYXNlLT5kYXRhX2xlbmd0aF9vY3RldHMpKTsKLSAgICBkZWJ1Z19wcmludChtb2RfYXV0aCwgInRhZyBjb21wdXRlZDogJXMiLAotCSAgIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKHRhZywgdGVzdF9jYXNlLT50YWdfbGVuZ3RoX29jdGV0cykpOwotICAgIGRlYnVnX3ByaW50KG1vZF9hdXRoLCAidGFnIGV4cGVjdGVkOiAlcyIsCi0JICAgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcodGVzdF9jYXNlLT50YWcsCi0JCQkJICAgdGVzdF9jYXNlLT50YWdfbGVuZ3RoX29jdGV0cykpOworICAgIC8qIGxvb3Agb3ZlciBhbGwgdGVzdCBjYXNlcyAqLworICAgIHdoaWxlICh0ZXN0X2Nhc2UgIT0gTlVMTCkgeworICAgICAgICAvKiBjaGVjayB0ZXN0IGNhc2UgcGFyYW1ldGVycyAqLworICAgICAgICBpZiAodGVzdF9jYXNlLT50YWdfbGVuZ3RoX29jdGV0cyA+IFNFTEZfVEVTVF9UQUdfQlVGX09DVEVUUykgeworICAgICAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisgICAgICAgIH0KIAotICAgIC8qIGNoZWNrIHRoZSByZXN1bHQgKi8KLSAgICBzdGF0dXMgPSBlcnJfc3RhdHVzX29rOwotICAgIGZvciAoaT0wOyBpIDwgdGVzdF9jYXNlLT50YWdfbGVuZ3RoX29jdGV0czsgaSsrKQotICAgICAgaWYgKHRhZ1tpXSAhPSB0ZXN0X2Nhc2UtPnRhZ1tpXSkgewotCXN0YXR1cyA9IGVycl9zdGF0dXNfYWxnb19mYWlsOwotCWRlYnVnX3ByaW50KG1vZF9hdXRoLCAidGVzdCBjYXNlICVkIGZhaWxlZCIsIGNhc2VfbnVtKTsKLQlkZWJ1Z19wcmludChtb2RfYXV0aCwgIiAgKG1pc21hdGNoIGF0IG9jdGV0ICVkKSIsIGkpOwotICAgICAgfQotICAgIGlmIChzdGF0dXMpIHsKLSAgICAgIGF1dGhfZGVhbGxvYyhhKTsKLSAgICAgIHJldHVybiBlcnJfc3RhdHVzX2FsZ29fZmFpbDsKKyAgICAgICAgLyogYWxsb2NhdGUgYXV0aCAqLworICAgICAgICBzdGF0dXMgPSBzcnRwX2F1dGhfdHlwZV9hbGxvYyhhdCwgJmEsIHRlc3RfY2FzZS0+a2V5X2xlbmd0aF9vY3RldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfY2FzZS0+dGFnX2xlbmd0aF9vY3RldHMpOworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisKKyAgICAgICAgLyogaW5pdGlhbGl6ZSBhdXRoICovCisgICAgICAgIHN0YXR1cyA9IHNydHBfYXV0aF9pbml0KGEsIHRlc3RfY2FzZS0+a2V5KTsKKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgc3J0cF9hdXRoX2RlYWxsb2MoYSk7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisKKyAgICAgICAgLyogemVyb2l6ZSB0YWcgdGhlbiBjb21wdXRlICovCisgICAgICAgIG9jdGV0X3N0cmluZ19zZXRfdG9femVybyh0YWcsIHRlc3RfY2FzZS0+dGFnX2xlbmd0aF9vY3RldHMpOworICAgICAgICBzdGF0dXMgPSBzcnRwX2F1dGhfY29tcHV0ZShhLCB0ZXN0X2Nhc2UtPmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfY2FzZS0+ZGF0YV9sZW5ndGhfb2N0ZXRzLCB0YWcpOworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBzcnRwX2F1dGhfZGVhbGxvYyhhKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIH0KKworICAgICAgICBkZWJ1Z19wcmludChzcnRwX21vZF9hdXRoLCAia2V5OiAlcyIsCisgICAgICAgICAgICAgICAgICAgIHNydHBfb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcodGVzdF9jYXNlLT5rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9jYXNlLT5rZXlfbGVuZ3RoX29jdGV0cykpOworICAgICAgICBkZWJ1Z19wcmludChzcnRwX21vZF9hdXRoLCAiZGF0YTogJXMiLAorICAgICAgICAgICAgICAgICAgICBzcnRwX29jdGV0X3N0cmluZ19oZXhfc3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9jYXNlLT5kYXRhLCB0ZXN0X2Nhc2UtPmRhdGFfbGVuZ3RoX29jdGV0cykpOworICAgICAgICBkZWJ1Z19wcmludCgKKyAgICAgICAgICAgIHNydHBfbW9kX2F1dGgsICJ0YWcgY29tcHV0ZWQ6ICVzIiwKKyAgICAgICAgICAgIHNydHBfb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcodGFnLCB0ZXN0X2Nhc2UtPnRhZ19sZW5ndGhfb2N0ZXRzKSk7CisgICAgICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX2F1dGgsICJ0YWcgZXhwZWN0ZWQ6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZyh0ZXN0X2Nhc2UtPnRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2Nhc2UtPnRhZ19sZW5ndGhfb2N0ZXRzKSk7CisKKyAgICAgICAgLyogY2hlY2sgdGhlIHJlc3VsdCAqLworICAgICAgICBzdGF0dXMgPSBzcnRwX2Vycl9zdGF0dXNfb2s7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0ZXN0X2Nhc2UtPnRhZ19sZW5ndGhfb2N0ZXRzOyBpKyspIHsKKyAgICAgICAgICAgIGlmICh0YWdbaV0gIT0gdGVzdF9jYXNlLT50YWdbaV0pIHsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBzcnRwX2Vycl9zdGF0dXNfYWxnb19mYWlsOworICAgICAgICAgICAgICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX2F1dGgsICJ0ZXN0IGNhc2UgJWQgZmFpbGVkIiwgY2FzZV9udW0pOworICAgICAgICAgICAgICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX2F1dGgsICIgIChtaXNtYXRjaCBhdCBvY3RldCAlZCkiLCBpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBzcnRwX2F1dGhfZGVhbGxvYyhhKTsKKyAgICAgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYWxnb19mYWlsOworICAgICAgICB9CisKKyAgICAgICAgLyogZGVhbGxvY2F0ZSB0aGUgYXV0aCBmdW5jdGlvbiAqLworICAgICAgICBzdGF0dXMgPSBzcnRwX2F1dGhfZGVhbGxvYyhhKTsKKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIHRoZSBhdXRoIGZ1bmN0aW9uIHBhc3NlZCB0aGUgdGVzdCBjYXNlLCBzbyBtb3ZlIG9uIHRvIHRoZSBuZXh0IHRlc3QKKyAgICAgICAgICogY2FzZSBpbiB0aGUgbGlzdDsgaWYgTlVMTCwgd2UnbGwgcXVpdCBhbmQgcmV0dXJuIGFuIE9LCisgICAgICAgICAqLworICAgICAgICB0ZXN0X2Nhc2UgPSB0ZXN0X2Nhc2UtPm5leHRfdGVzdF9jYXNlOworICAgICAgICArK2Nhc2VfbnVtOwogICAgIH0KLSAgICAKLSAgICAvKiBkZWFsbG9jYXRlIHRoZSBhdXRoIGZ1bmN0aW9uICovCi0gICAgc3RhdHVzID0gYXV0aF9kZWFsbG9jKGEpOwotICAgIGlmIChzdGF0dXMpCi0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIAotICAgIC8qIAotICAgICAqIHRoZSBhdXRoIGZ1bmN0aW9uIHBhc3NlZCB0aGUgdGVzdCBjYXNlLCBzbyBtb3ZlIG9uIHRvIHRoZSBuZXh0IHRlc3QKLSAgICAgKiBjYXNlIGluIHRoZSBsaXN0OyBpZiBOVUxMLCB3ZSdsbCBxdWl0IGFuZCByZXR1cm4gYW4gT0sKLSAgICAgKi8gICAKLSAgICB0ZXN0X2Nhc2UgPSB0ZXN0X2Nhc2UtPm5leHRfdGVzdF9jYXNlOwotICAgICsrY2FzZV9udW07Ci0gIH0KLSAgCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOworCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKIH0KIAorLyoKKyAqIHNydHBfYXV0aF90eXBlX3NlbGZfdGVzdChhdCkgcGVyZm9ybXMgc3J0cF9hdXRoX3R5cGVfdGVzdCBvbiBhdCdzIGludGVybmFsCisgKiBsaXN0IG9mIHRlc3QgZGF0YS4KKyAqLwogCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2F1dGhfdHlwZV9zZWxmX3Rlc3QoY29uc3Qgc3J0cF9hdXRoX3R5cGVfdCAqYXQpCit7CisgICAgcmV0dXJuIHNydHBfYXV0aF90eXBlX3Rlc3QoYXQsIGF0LT50ZXN0X2RhdGEpOworfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2hhc2gvaG1hYy5jIGIvY3J5cHRvL2hhc2gvaG1hYy5jCmluZGV4IDFiMTk4OTguLjZlOTE0NjggMTAwNjQ0Ci0tLSBhL2NyeXB0by9oYXNoL2htYWMuYworKysgYi9jcnlwdG8vaGFzaC9obWFjLmMKQEAgLTEsMzIgKzEsMzIgQEAKIC8qCiAgKiBobWFjLmMKICAqCi0gKiBpbXBsZW1lbnRhdGlvbiBvZiBobWFjIGF1dGhfdHlwZV90CisgKiBpbXBsZW1lbnRhdGlvbiBvZiBobWFjIHNydHBfYXV0aF90eXBlX3QKICAqCiAgKiBEYXZpZCBBLiBNY0dyZXcKICAqIENpc2NvIFN5c3RlbXMsIEluYy4KICAqLwogLyoKLSAqCQotICogQ29weXJpZ2h0KGMpIDIwMDEtMjAwNSBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDEtMjAxNyBDaXNjbyBTeXN0ZW1zLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwogICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKICAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCisgKgogICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAogICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKKyAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKQEAgLTQyLDIzMCArNDIsMjQyIEBACiAgKgogICovCiAKLSNpbmNsdWRlICJobWFjLmgiIAorI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiaG1hYy5oIgogI2luY2x1ZGUgImFsbG9jLmgiCisjaW5jbHVkZSAiY2lwaGVyX3R5cGVzLmgiCiAKIC8qIHRoZSBkZWJ1ZyBtb2R1bGUgZm9yIGF1dGhlbnRpYXRpb24gKi8KIAotZGVidWdfbW9kdWxlX3QgbW9kX2htYWMgPSB7Ci0gIDAsICAgICAgICAgICAgICAgICAgLyogZGVidWdnaW5nIGlzIG9mZiBieSBkZWZhdWx0ICovCi0gICJobWFjIHNoYS0xIiAgICAgICAgLyogcHJpbnRhYmxlIG5hbWUgZm9yIG1vZHVsZSAgICovCitzcnRwX2RlYnVnX21vZHVsZV90IHNydHBfbW9kX2htYWMgPSB7CisgICAgMCwgICAgICAgICAgIC8qIGRlYnVnZ2luZyBpcyBvZmYgYnkgZGVmYXVsdCAqLworICAgICJobWFjIHNoYS0xIiAvKiBwcmludGFibGUgbmFtZSBmb3IgbW9kdWxlICAgKi8KIH07CiAKK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2htYWNfYWxsb2Moc3J0cF9hdXRoX3QgKiphLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG91dF9sZW4pCit7CisgICAgZXh0ZXJuIGNvbnN0IHNydHBfYXV0aF90eXBlX3Qgc3J0cF9obWFjOworICAgIHVpbnQ4X3QgKnBvaW50ZXI7CiAKLWVycl9zdGF0dXNfdAotaG1hY19hbGxvYyhhdXRoX3QgKiphLCBpbnQga2V5X2xlbiwgaW50IG91dF9sZW4pIHsKLSAgZXh0ZXJuIGF1dGhfdHlwZV90IGhtYWM7Ci0gIHVpbnQ4X3QgKnBvaW50ZXI7Ci0gIGhtYWNfY3R4X3QgKm5ld19obWFjX2N0eDsKKyAgICBkZWJ1Z19wcmludChzcnRwX21vZF9obWFjLCAiYWxsb2NhdGluZyBhdXRoIGZ1bmMgd2l0aCBrZXkgbGVuZ3RoICVkIiwKKyAgICAgICAgICAgICAgICBrZXlfbGVuKTsKKyAgICBkZWJ1Z19wcmludChzcnRwX21vZF9obWFjLCAiICAgICAgICAgICAgICAgICAgICAgICAgICB0YWcgbGVuZ3RoICVkIiwKKyAgICAgICAgICAgICAgICBvdXRfbGVuKTsKIAotICBkZWJ1Z19wcmludChtb2RfaG1hYywgImFsbG9jYXRpbmcgYXV0aCBmdW5jIHdpdGgga2V5IGxlbmd0aCAlZCIsIGtleV9sZW4pOwotICBkZWJ1Z19wcmludChtb2RfaG1hYywgIiAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnIGxlbmd0aCAlZCIsIG91dF9sZW4pOworICAgIC8qCisgICAgICogY2hlY2sga2V5IGxlbmd0aCAtIG5vdGUgdGhhdCB3ZSBkb24ndCBzdXBwb3J0IGtleXMgbGFyZ2VyCisgICAgICogdGhhbiAyMCBieXRlcyB5ZXQKKyAgICAgKi8KKyAgICBpZiAoa2V5X2xlbiA+IDIwKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYmFkX3BhcmFtOworICAgIH0KIAotICAvKgotICAgKiBjaGVjayBrZXkgbGVuZ3RoIC0gbm90ZSB0aGF0IHdlIGRvbid0IHN1cHBvcnQga2V5cyBsYXJnZXIKLSAgICogdGhhbiAyMCBieXRlcyB5ZXQKLSAgICovCi0gIGlmIChrZXlfbGVuID4gMjApCi0gICAgcmV0dXJuIGVycl9zdGF0dXNfYmFkX3BhcmFtOworICAgIC8qIGNoZWNrIG91dHB1dCBsZW5ndGggLSBzaG91bGQgYmUgbGVzcyB0aGFuIDIwIGJ5dGVzICovCisgICAgaWYgKG91dF9sZW4gPiAyMCkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbTsKKyAgICB9CiAKLSAgLyogY2hlY2sgb3V0cHV0IGxlbmd0aCAtIHNob3VsZCBiZSBsZXNzIHRoYW4gMjAgYnl0ZXMgKi8KLSAgaWYgKG91dF9sZW4gPiAyMCkKLSAgICByZXR1cm4gZXJyX3N0YXR1c19iYWRfcGFyYW07CisgICAgLyogYWxsb2NhdGUgbWVtb3J5IGZvciBhdXRoIGFuZCBzcnRwX2htYWNfY3R4X3Qgc3RydWN0dXJlcyAqLworICAgIHBvaW50ZXIgPSAodWludDhfdCAqKXNydHBfY3J5cHRvX2FsbG9jKHNpemVvZihzcnRwX2htYWNfY3R4X3QpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3J0cF9hdXRoX3QpKTsKKyAgICBpZiAocG9pbnRlciA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYWxsb2NfZmFpbDsKKyAgICB9CiAKLSAgLyogYWxsb2NhdGUgbWVtb3J5IGZvciBhdXRoIGFuZCBobWFjX2N0eF90IHN0cnVjdHVyZXMgKi8KLSAgcG9pbnRlciA9IGNyeXB0b19hbGxvYyhzaXplb2YoaG1hY19jdHhfdCkgKyBzaXplb2YoYXV0aF90KSk7Ci0gIGlmIChwb2ludGVyID09IE5VTEwpCi0gICAgcmV0dXJuIGVycl9zdGF0dXNfYWxsb2NfZmFpbDsKKyAgICAvKiBzZXQgcG9pbnRlcnMgKi8KKyAgICAqYSA9IChzcnRwX2F1dGhfdCAqKXBvaW50ZXI7CisgICAgKCphKS0+dHlwZSA9ICZzcnRwX2htYWM7CisgICAgKCphKS0+c3RhdGUgPSBwb2ludGVyICsgc2l6ZW9mKHNydHBfYXV0aF90KTsKKyAgICAoKmEpLT5vdXRfbGVuID0gb3V0X2xlbjsKKyAgICAoKmEpLT5rZXlfbGVuID0ga2V5X2xlbjsKKyAgICAoKmEpLT5wcmVmaXhfbGVuID0gMDsKIAotICAvKiBzZXQgcG9pbnRlcnMgKi8KLSAgKmEgPSAoYXV0aF90ICopcG9pbnRlcjsKLSAgKCphKS0+dHlwZSA9ICZobWFjOwotICAoKmEpLT5zdGF0ZSA9IHBvaW50ZXIgKyBzaXplb2YoYXV0aF90KTsgIAotICAoKmEpLT5vdXRfbGVuID0gb3V0X2xlbjsKLSAgKCphKS0+a2V5X2xlbiA9IGtleV9sZW47Ci0gICgqYSktPnByZWZpeF9sZW4gPSAwOwotICBuZXdfaG1hY19jdHggPSAoaG1hY19jdHhfdCAqKSgoKmEpLT5zdGF0ZSk7Ci0KLSAgLyogaW5jcmVtZW50IGdsb2JhbCBjb3VudCBvZiBhbGwgaG1hYyB1c2VzICovCi0gIGhtYWMucmVmX2NvdW50Kys7Ci0KLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7CisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKIH0KIAotZXJyX3N0YXR1c190Ci1obWFjX2RlYWxsb2MoYXV0aF90ICphKSB7Ci0gIGV4dGVybiBhdXRoX3R5cGVfdCBobWFjOwotICAKLSAgLyogemVyb2l6ZSBlbnRpcmUgc3RhdGUqLwotICBvY3RldF9zdHJpbmdfc2V0X3RvX3plcm8oKG9jdGV0X3QgKilhLCAKLQkJCSAgIHNpemVvZihobWFjX2N0eF90KSArIHNpemVvZihhdXRoX3QpKTsKK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2htYWNfZGVhbGxvYyhzcnRwX2F1dGhfdCAqYSkKK3sKKyAgICAvKiB6ZXJvaXplIGVudGlyZSBzdGF0ZSovCisgICAgb2N0ZXRfc3RyaW5nX3NldF90b196ZXJvKGEsIHNpemVvZihzcnRwX2htYWNfY3R4X3QpICsgc2l6ZW9mKHNydHBfYXV0aF90KSk7CiAKLSAgLyogZnJlZSBtZW1vcnkgKi8KLSAgY3J5cHRvX2ZyZWUoYSk7Ci0gIAotICAvKiBkZWNyZW1lbnQgZ2xvYmFsIGNvdW50IG9mIGFsbCBobWFjIHVzZXMgKi8KLSAgaG1hYy5yZWZfY291bnQtLTsKKyAgICAvKiBmcmVlIG1lbW9yeSAqLworICAgIHNydHBfY3J5cHRvX2ZyZWUoYSk7CiAKLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7CisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKIH0KIAotZXJyX3N0YXR1c190Ci1obWFjX2luaXQoaG1hY19jdHhfdCAqc3RhdGUsIGNvbnN0IG9jdGV0X3QgKmtleSwgaW50IGtleV9sZW4pIHsKLSAgaW50IGk7CitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9obWFjX2luaXQodm9pZCAqc3RhdGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5X2xlbikKK3sKKyAgICBzcnRwX2htYWNfY3R4X3QgKnN0YXRlID0gKHNydHBfaG1hY19jdHhfdCAqKXN0YXRldjsKKyAgICBpbnQgaTsKKyAgICB1aW50OF90IGlwYWRbNjRdOwogCi0gIC8qCi0gICAqIGNoZWNrIGtleSBsZW5ndGggLSBub3RlIHRoYXQgd2UgZG9uJ3Qgc3VwcG9ydCBrZXlzIGxhcmdlcgotICAgKiB0aGFuIDIwIGJ5dGVzIHlldAotICAgKi8KLSAgaWYgKGtleV9sZW4gPiAyMCkgICAgICAgICAgICAgIAotICAgIHJldHVybiBlcnJfc3RhdHVzX2JhZF9wYXJhbTsKLSAgCi0gIC8qCi0gICAqIHNldCB2YWx1ZXMgb2YgaXBhZCBhbmQgb3BhZCBpbiB0aGUgY29udGV4dCBieSBleG9yaW5nIHRoZSBrZXkKLSAgICogaW50byB0aGUgYXBwcm9wcmlhdGUgY29uc3RhbnQgdmFsdWVzCi0gICAqLwotICBmb3IgKGk9MDsgaSA8IGtleV9sZW47IGkrKykgeyAgICAKLSAgICBzdGF0ZS0+aXBhZFtpXSA9IGtleVtpXSBeIDB4MzY7Ci0gICAgc3RhdGUtPm9wYWRbaV0gPSBrZXlbaV0gXiAweDVjOwotICB9ICAKLSAgLyogc2V0IHRoZSByZXN0IG9mIGlwYWQsIG9wYWQgdG8gY29uc3RhbnQgdmFsdWVzICovCi0gIGZvciAoICAgOyBpIDwgNjQ7IGkrKykgeyAgICAKLSAgICAoKG9jdGV0X3QgKilzdGF0ZS0+aXBhZClbaV0gPSAweDM2OwotICAgICgob2N0ZXRfdCAqKXN0YXRlLT5vcGFkKVtpXSA9IDB4NWM7Ci0gIH0gIAorICAgIC8qCisgICAgICogY2hlY2sga2V5IGxlbmd0aCAtIG5vdGUgdGhhdCB3ZSBkb24ndCBzdXBwb3J0IGtleXMgbGFyZ2VyCisgICAgICogdGhhbiAyMCBieXRlcyB5ZXQKKyAgICAgKi8KKyAgICBpZiAoa2V5X2xlbiA+IDIwKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYmFkX3BhcmFtOworICAgIH0KIAotICBkZWJ1Z19wcmludChtb2RfaG1hYywgImlwYWQ6ICVzIiwgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoc3RhdGUtPmlwYWQsIDY0KSk7Ci0gIAotICAvKiBpbml0aWFsaXplIHNoYTEgY29udGV4dCAqLwotICBzaGExX2luaXQoJnN0YXRlLT5jdHgpOworICAgIC8qCisgICAgICogc2V0IHZhbHVlcyBvZiBpcGFkIGFuZCBvcGFkIGJ5IGV4b3JpbmcgdGhlIGtleSBpbnRvIHRoZQorICAgICAqIGFwcHJvcHJpYXRlIGNvbnN0YW50IHZhbHVlcworICAgICAqLworICAgIGZvciAoaSA9IDA7IGkgPCBrZXlfbGVuOyBpKyspIHsKKyAgICAgICAgaXBhZFtpXSA9IGtleVtpXSBeIDB4MzY7CisgICAgICAgIHN0YXRlLT5vcGFkW2ldID0ga2V5W2ldIF4gMHg1YzsKKyAgICB9CisgICAgLyogc2V0IHRoZSByZXN0IG9mIGlwYWQsIG9wYWQgdG8gY29uc3RhbnQgdmFsdWVzICovCisgICAgZm9yICg7IGkgPCA2NDsgaSsrKSB7CisgICAgICAgIGlwYWRbaV0gPSAweDM2OworICAgICAgICAoKHVpbnQ4X3QgKilzdGF0ZS0+b3BhZClbaV0gPSAweDVjOworICAgIH0KIAotICAvKiBoYXNoIGlwYWQgXiBrZXkgKi8KLSAgc2hhMV91cGRhdGUoJnN0YXRlLT5jdHgsIChvY3RldF90ICopc3RhdGUtPmlwYWQsIDY0KTsKKyAgICBkZWJ1Z19wcmludChzcnRwX21vZF9obWFjLCAiaXBhZDogJXMiLAorICAgICAgICAgICAgICAgIHNydHBfb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoaXBhZCwgNjQpKTsKIAotICByZXR1cm4gZXJyX3N0YXR1c19vazsKKyAgICAvKiBpbml0aWFsaXplIHNoYTEgY29udGV4dCAqLworICAgIHNydHBfc2hhMV9pbml0KCZzdGF0ZS0+aW5pdF9jdHgpOworCisgICAgLyogaGFzaCBpcGFkIF4ga2V5ICovCisgICAgc3J0cF9zaGExX3VwZGF0ZSgmc3RhdGUtPmluaXRfY3R4LCBpcGFkLCA2NCk7CisgICAgbWVtY3B5KCZzdGF0ZS0+Y3R4LCAmc3RhdGUtPmluaXRfY3R4LCBzaXplb2Yoc3J0cF9zaGExX2N0eF90KSk7CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQogCi1lcnJfc3RhdHVzX3QKLWhtYWNfc3RhcnQoaG1hY19jdHhfdCAqc3RhdGUpIHsKLSAgICAKLSAgLyogaW5pdGlhbGl6ZSBzaGExIGNvbnRleHQgKi8KLSAgc2hhMV9pbml0KCZzdGF0ZS0+Y3R4KTsKK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2htYWNfc3RhcnQodm9pZCAqc3RhdGV2KQoreworICAgIHNydHBfaG1hY19jdHhfdCAqc3RhdGUgPSAoc3J0cF9obWFjX2N0eF90ICopc3RhdGV2OwogCi0gIC8qIGhhc2ggaXBhZCBeIGtleSAqLwotICBzaGExX3VwZGF0ZSgmc3RhdGUtPmN0eCwgKG9jdGV0X3QgKilzdGF0ZS0+aXBhZCwgNjQpOworICAgIG1lbWNweSgmc3RhdGUtPmN0eCwgJnN0YXRlLT5pbml0X2N0eCwgc2l6ZW9mKHNydHBfc2hhMV9jdHhfdCkpOwogCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7CiB9CiAKLWVycl9zdGF0dXNfdAotaG1hY191cGRhdGUoaG1hY19jdHhfdCAqc3RhdGUsIGNvbnN0IG9jdGV0X3QgKm1lc3NhZ2UsIGludCBtc2dfb2N0ZXRzKSB7CitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9obWFjX3VwZGF0ZSh2b2lkICpzdGF0ZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICptZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1zZ19vY3RldHMpCit7CisgICAgc3J0cF9obWFjX2N0eF90ICpzdGF0ZSA9IChzcnRwX2htYWNfY3R4X3QgKilzdGF0ZXY7CiAKLSAgZGVidWdfcHJpbnQobW9kX2htYWMsICJpbnB1dDogJXMiLCAKLQkgICAgICBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhtZXNzYWdlLCBtc2dfb2N0ZXRzKSk7Ci0gIAotICAvKiBoYXNoIG1lc3NhZ2UgaW50byBzaGExIGNvbnRleHQgKi8KLSAgc2hhMV91cGRhdGUoJnN0YXRlLT5jdHgsIG1lc3NhZ2UsIG1zZ19vY3RldHMpOworICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX2htYWMsICJpbnB1dDogJXMiLAorICAgICAgICAgICAgICAgIHNydHBfb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcobWVzc2FnZSwgbXNnX29jdGV0cykpOwogCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOworICAgIC8qIGhhc2ggbWVzc2FnZSBpbnRvIHNoYTEgY29udGV4dCAqLworICAgIHNydHBfc2hhMV91cGRhdGUoJnN0YXRlLT5jdHgsIG1lc3NhZ2UsIG1zZ19vY3RldHMpOworCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKIH0KIAotZXJyX3N0YXR1c190Ci1obWFjX2NvbXB1dGUoaG1hY19jdHhfdCAqc3RhdGUsIGNvbnN0IG9jdGV0X3QgKm1lc3NhZ2UsCi0JICAgICBpbnQgbXNnX29jdGV0cywgaW50IHRhZ19sZW4sIG9jdGV0X3QgKnJlc3VsdCkgewotICB1aW50MzJfdCBoYXNoX3ZhbHVlWzVdOwotICB1aW50MzJfdCBIWzVdOwotICBpbnQgaTsKK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2htYWNfY29tcHV0ZSh2b2lkICpzdGF0ZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbXNnX29jdGV0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFnX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpyZXN1bHQpCit7CisgICAgc3J0cF9obWFjX2N0eF90ICpzdGF0ZSA9IChzcnRwX2htYWNfY3R4X3QgKilzdGF0ZXY7CisgICAgdWludDMyX3QgaGFzaF92YWx1ZVs1XTsKKyAgICB1aW50MzJfdCBIWzVdOworICAgIGludCBpOwogCi0gIC8qIGNoZWNrIHRhZyBsZW5ndGgsIHJldHVybiBlcnJvciBpZiB3ZSBjYW4ndCBwcm92aWRlIHRoZSB2YWx1ZSBleHBlY3RlZCAqLwotICBpZiAodGFnX2xlbiA+IDIwKQotICAgIHJldHVybiBlcnJfc3RhdHVzX2JhZF9wYXJhbTsKLSAgCi0gIC8qIGhhc2ggbWVzc2FnZSwgY29weSBvdXRwdXQgaW50byBIICovCi0gIGhtYWNfdXBkYXRlKHN0YXRlLCBtZXNzYWdlLCBtc2dfb2N0ZXRzKTsKLSAgc2hhMV9maW5hbCgmc3RhdGUtPmN0eCwgSCk7CisgICAgLyogY2hlY2sgdGFnIGxlbmd0aCwgcmV0dXJuIGVycm9yIGlmIHdlIGNhbid0IHByb3ZpZGUgdGhlIHZhbHVlIGV4cGVjdGVkICovCisgICAgaWYgKHRhZ19sZW4gPiAyMCkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbTsKKyAgICB9CiAKLSAgLyoKLSAgICogbm90ZSB0aGF0IHdlIGRvbid0IG5lZWQgdG8gZGVidWdfcHJpbnQoKSB0aGUgaW5wdXQsIHNpbmNlIHRoZQotICAgKiBmdW5jdGlvbiBobWFjX3VwZGF0ZSgpIGFscmVhZHkgZGlkIHRoYXQgZm9yIHVzCi0gICAqLwotICBkZWJ1Z19wcmludChtb2RfaG1hYywgImludGVybWVkaWF0ZSBzdGF0ZTogJXMiLCAKLQkgICAgICBvY3RldF9zdHJpbmdfaGV4X3N0cmluZygob2N0ZXRfdCAqKUgsIDIwKSk7CisgICAgLyogaGFzaCBtZXNzYWdlLCBjb3B5IG91dHB1dCBpbnRvIEggKi8KKyAgICBzcnRwX2htYWNfdXBkYXRlKHN0YXRlLCBtZXNzYWdlLCBtc2dfb2N0ZXRzKTsKKyAgICBzcnRwX3NoYTFfZmluYWwoJnN0YXRlLT5jdHgsIEgpOwogCi0gIC8qIHJlLWluaXRpYWxpemUgaGFzaCBjb250ZXh0ICovCi0gIHNoYTFfaW5pdCgmc3RhdGUtPmN0eCk7Ci0gIAotICAvKiBoYXNoIG9wYWQgXiBrZXkgICovCi0gIHNoYTFfdXBkYXRlKCZzdGF0ZS0+Y3R4LCAob2N0ZXRfdCAqKXN0YXRlLT5vcGFkLCA2NCk7CisgICAgLyoKKyAgICAgKiBub3RlIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBkZWJ1Z19wcmludCgpIHRoZSBpbnB1dCwgc2luY2UgdGhlCisgICAgICogZnVuY3Rpb24gaG1hY191cGRhdGUoKSBhbHJlYWR5IGRpZCB0aGF0IGZvciB1cworICAgICAqLworICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX2htYWMsICJpbnRlcm1lZGlhdGUgc3RhdGU6ICVzIiwKKyAgICAgICAgICAgICAgICBzcnRwX29jdGV0X3N0cmluZ19oZXhfc3RyaW5nKCh1aW50OF90ICopSCwgMjApKTsKIAotICAvKiBoYXNoIHRoZSByZXN1bHQgb2YgdGhlIGlubmVyIGhhc2ggKi8KLSAgc2hhMV91cGRhdGUoJnN0YXRlLT5jdHgsIChvY3RldF90ICopSCwgMjApOwotICAKLSAgLyogdGhlIHJlc3VsdCBpcyByZXR1cm5lZCBpbiB0aGUgYXJyYXkgaGFzaF92YWx1ZVtdICovCi0gIHNoYTFfZmluYWwoJnN0YXRlLT5jdHgsIGhhc2hfdmFsdWUpOworICAgIC8qIHJlLWluaXRpYWxpemUgaGFzaCBjb250ZXh0ICovCisgICAgc3J0cF9zaGExX2luaXQoJnN0YXRlLT5jdHgpOwogCi0gIC8qIGNvcHkgaGFzaF92YWx1ZSB0byAqcmVzdWx0ICovCi0gIGZvciAoaT0wOyBpIDwgdGFnX2xlbjsgaSsrKSAgICAKLSAgICByZXN1bHRbaV0gPSAoKG9jdGV0X3QgKiloYXNoX3ZhbHVlKVtpXTsKKyAgICAvKiBoYXNoIG9wYWQgXiBrZXkgICovCisgICAgc3J0cF9zaGExX3VwZGF0ZSgmc3RhdGUtPmN0eCwgKHVpbnQ4X3QgKilzdGF0ZS0+b3BhZCwgNjQpOwogCi0gIGRlYnVnX3ByaW50KG1vZF9obWFjLCAib3V0cHV0OiAlcyIsIAotCSAgICAgIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKChvY3RldF90ICopaGFzaF92YWx1ZSwgdGFnX2xlbikpOworICAgIC8qIGhhc2ggdGhlIHJlc3VsdCBvZiB0aGUgaW5uZXIgaGFzaCAqLworICAgIHNydHBfc2hhMV91cGRhdGUoJnN0YXRlLT5jdHgsICh1aW50OF90ICopSCwgMjApOwogCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOworICAgIC8qIHRoZSByZXN1bHQgaXMgcmV0dXJuZWQgaW4gdGhlIGFycmF5IGhhc2hfdmFsdWVbXSAqLworICAgIHNydHBfc2hhMV9maW5hbCgmc3RhdGUtPmN0eCwgaGFzaF92YWx1ZSk7CisKKyAgICAvKiBjb3B5IGhhc2hfdmFsdWUgdG8gKnJlc3VsdCAqLworICAgIGZvciAoaSA9IDA7IGkgPCB0YWdfbGVuOyBpKyspIHsKKyAgICAgICAgcmVzdWx0W2ldID0gKCh1aW50OF90ICopaGFzaF92YWx1ZSlbaV07CisgICAgfQorCisgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfaG1hYywgIm91dHB1dDogJXMiLAorICAgICAgICAgICAgICAgIHNydHBfb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoKHVpbnQ4X3QgKiloYXNoX3ZhbHVlLCB0YWdfbGVuKSk7CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQogCi0KIC8qIGJlZ2luIHRlc3QgY2FzZSAwICovCi0KLW9jdGV0X3QKLWhtYWNfdGVzdF9jYXNlXzBfa2V5WzIwXSA9IHsKLSAgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgCi0gIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIAotICAweDBiLCAweDBiLCAweDBiLCAweDBiCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgY29uc3QgdWludDhfdCBzcnRwX2htYWNfdGVzdF9jYXNlXzBfa2V5WzIwXSA9IHsKKyAgICAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLAorICAgIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsCisgICAgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYgogfTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLwogCi1vY3RldF90IAotaG1hY190ZXN0X2Nhc2VfMF9kYXRhWzhdID0gewotICAweDQ4LCAweDY5LCAweDIwLCAweDU0LCAweDY4LCAweDY1LCAweDcyLCAweDY1ICAgLyogIkhpIFRoZXJlIiAqLworLyogY2xhbmctZm9ybWF0IG9mZiAqLworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc3J0cF9obWFjX3Rlc3RfY2FzZV8wX2RhdGFbOF0gPSB7CisgICAgMHg0OCwgMHg2OSwgMHgyMCwgMHg1NCwgMHg2OCwgMHg2NSwgMHg3MiwgMHg2NSAvKiAiSGkgVGhlcmUiICovCiB9OworLyogY2xhbmctZm9ybWF0IG9uICovCiAKLW9jdGV0X3QKLWhtYWNfdGVzdF9jYXNlXzBfdGFnWzIwXSA9IHsKLSAgMHhiNiwgMHgxNywgMHgzMSwgMHg4NiwgMHg1NSwgMHgwNSwgMHg3MiwgMHg2NCwgCi0gIDB4ZTIsIDB4OGIsIDB4YzAsIDB4YjYsIDB4ZmIsIDB4MzcsIDB4OGMsIDB4OGUsIAotICAweGYxLCAweDQ2LCAweGJlLCAweDAwCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgY29uc3QgdWludDhfdCBzcnRwX2htYWNfdGVzdF9jYXNlXzBfdGFnWzIwXSA9IHsKKyAgICAweGI2LCAweDE3LCAweDMxLCAweDg2LCAweDU1LCAweDA1LCAweDcyLCAweDY0LAorICAgIDB4ZTIsIDB4OGIsIDB4YzAsIDB4YjYsIDB4ZmIsIDB4MzcsIDB4OGMsIDB4OGUsCisgICAgMHhmMSwgMHg0NiwgMHhiZSwgMHgwMAogfTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLwogCi1hdXRoX3Rlc3RfY2FzZV90Ci1obWFjX3Rlc3RfY2FzZV8wID0gewotICAyMCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBvY3RldHMgaW4ga2V5ICAgICAgICAgICAgKi8KLSAgaG1hY190ZXN0X2Nhc2VfMF9rZXksICAgICAgLyoga2V5ICAgICAgICAgICAgICAgICAgICAgICovCi0gIDgsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9jdGV0cyBpbiBkYXRhICAgICAgICAgICAqLyAKLSAgaG1hY190ZXN0X2Nhc2VfMF9kYXRhLCAgICAgLyogZGF0YSAgICAgICAgICAgICAgICAgICAgICovCi0gIDIwLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9jdGV0cyBpbiB0YWcgICAgICAgICAgICAqLwotICBobWFjX3Rlc3RfY2FzZV8wX3RhZywgICAgICAvKiB0YWcgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBuZXh0IHRlc3RjYXNlICovCitzdGF0aWMgY29uc3Qgc3J0cF9hdXRoX3Rlc3RfY2FzZV90IHNydHBfaG1hY190ZXN0X2Nhc2VfMCA9IHsKKyAgICAyMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2N0ZXRzIGluIGtleSAgICAgICAgICAgICovCisgICAgc3J0cF9obWFjX3Rlc3RfY2FzZV8wX2tleSwgIC8qIGtleSAgICAgICAgICAgICAgICAgICAgICAqLworICAgIDgsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvY3RldHMgaW4gZGF0YSAgICAgICAgICAgKi8KKyAgICBzcnRwX2htYWNfdGVzdF9jYXNlXzBfZGF0YSwgLyogZGF0YSAgICAgICAgICAgICAgICAgICAgICovCisgICAgMjAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9jdGV0cyBpbiB0YWcgICAgICAgICAgICAqLworICAgIHNydHBfaG1hY190ZXN0X2Nhc2VfMF90YWcsICAvKiB0YWcgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBuZXh0IHRlc3RjYXNlICovCiB9OwogCiAvKiBlbmQgdGVzdCBjYXNlIDAgKi8KIAotY2hhciBobWFjX2Rlc2NyaXB0aW9uW10gPSAiaG1hYyBzaGEtMSBhdXRoZW50aWNhdGlvbiBmdW5jdGlvbiI7CitzdGF0aWMgY29uc3QgY2hhciBzcnRwX2htYWNfZGVzY3JpcHRpb25bXSA9CisgICAgImhtYWMgc2hhLTEgYXV0aGVudGljYXRpb24gZnVuY3Rpb24iOwogCiAvKgotICogYXV0aF90eXBlX3QgaG1hYyBpcyB0aGUgaG1hYyBtZXRhb2JqZWN0CisgKiBzcnRwX2F1dGhfdHlwZV90IGhtYWMgaXMgdGhlIGhtYWMgbWV0YW9iamVjdAogICovCiAKLWF1dGhfdHlwZV90Ci1obWFjICA9IHsKLSAgKGF1dGhfYWxsb2NfZnVuYykgICAgICBobWFjX2FsbG9jLAotICAoYXV0aF9kZWFsbG9jX2Z1bmMpICAgIGhtYWNfZGVhbGxvYywKLSAgKGF1dGhfaW5pdF9mdW5jKSAgICAgICBobWFjX2luaXQsCi0gIChhdXRoX2NvbXB1dGVfZnVuYykgICAgaG1hY19jb21wdXRlLAotICAoYXV0aF91cGRhdGVfZnVuYykgICAgIGhtYWNfdXBkYXRlLAotICAoYXV0aF9zdGFydF9mdW5jKSAgICAgIGhtYWNfc3RhcnQsCi0gIChjaGFyICopICAgICAgICAgICAgICAgaG1hY19kZXNjcmlwdGlvbiwKLSAgKGludCkgICAgICAgICAgICAgICAgICAwLCAgLyogaW5zdGFuY2UgY291bnQgKi8KLSAgKGF1dGhfdGVzdF9jYXNlX3QgKikgICZobWFjX3Rlc3RfY2FzZV8wLAotICAoZGVidWdfbW9kdWxlX3QgKikgICAgJm1vZF9obWFjCitjb25zdCBzcnRwX2F1dGhfdHlwZV90IHNydHBfaG1hYyA9IHsKKyAgICBzcnRwX2htYWNfYWxsb2MsICAgICAgICAvKiAqLworICAgIHNydHBfaG1hY19kZWFsbG9jLCAgICAgIC8qICovCisgICAgc3J0cF9obWFjX2luaXQsICAgICAgICAgLyogKi8KKyAgICBzcnRwX2htYWNfY29tcHV0ZSwgICAgICAvKiAqLworICAgIHNydHBfaG1hY191cGRhdGUsICAgICAgIC8qICovCisgICAgc3J0cF9obWFjX3N0YXJ0LCAgICAgICAgLyogKi8KKyAgICBzcnRwX2htYWNfZGVzY3JpcHRpb24sICAvKiAqLworICAgICZzcnRwX2htYWNfdGVzdF9jYXNlXzAsIC8qICovCisgICAgU1JUUF9ITUFDX1NIQTEgICAgICAgICAgLyogKi8KIH07Ci0KZGlmZiAtLWdpdCBhL2NyeXB0by9oYXNoL2htYWNfb3NzbC5jIGIvY3J5cHRvL2hhc2gvaG1hY19vc3NsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE0NjQzOAotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9oYXNoL2htYWNfb3NzbC5jCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogaG1hY19vc3NsLmMKKyAqCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBobWFjIHNydHBfYXV0aF90eXBlX3QgdGhhdCBsZXZlcmFnZXMgT3BlblNTTAorICoKKyAqIEpvaG4gQS4gRm9sZXkKKyAqIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqLworLyoKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAxMy0yMDE3LCBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImF1dGguaCIKKyNpbmNsdWRlICJhbGxvYy5oIgorI2luY2x1ZGUgImVyci5oIiAvKiBmb3Igc3J0cF9kZWJ1ZyAqLworI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisKKyNkZWZpbmUgU0hBMV9ESUdFU1RfU0laRSAyMAorCisvKiB0aGUgZGVidWcgbW9kdWxlIGZvciBhdXRoZW50aWF0aW9uICovCisKK3NydHBfZGVidWdfbW9kdWxlX3Qgc3J0cF9tb2RfaG1hYyA9IHsKKyAgICAwLCAgICAgICAgICAgICAgICAgICAvKiBkZWJ1Z2dpbmcgaXMgb2ZmIGJ5IGRlZmF1bHQgKi8KKyAgICAiaG1hYyBzaGEtMSBvcGVuc3NsIiAvKiBwcmludGFibGUgbmFtZSBmb3IgbW9kdWxlICAgKi8KK307CisKK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2htYWNfYWxsb2Moc3J0cF9hdXRoX3QgKiphLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG91dF9sZW4pCit7CisgICAgZXh0ZXJuIGNvbnN0IHNydHBfYXV0aF90eXBlX3Qgc3J0cF9obWFjOworCisgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfaG1hYywgImFsbG9jYXRpbmcgYXV0aCBmdW5jIHdpdGgga2V5IGxlbmd0aCAlZCIsCisgICAgICAgICAgICAgICAga2V5X2xlbik7CisgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfaG1hYywgIiAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnIGxlbmd0aCAlZCIsCisgICAgICAgICAgICAgICAgb3V0X2xlbik7CisKKyAgICAvKiBjaGVjayBvdXRwdXQgbGVuZ3RoIC0gc2hvdWxkIGJlIGxlc3MgdGhhbiAyMCBieXRlcyAqLworICAgIGlmIChvdXRfbGVuID4gU0hBMV9ESUdFU1RfU0laRSkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbTsKKyAgICB9CisKKy8qIE9wZW5TU0wgMS4xLjAgbWFkZSBITUFDX0NUWCBhbiBvcGFxdWUgc3RydWN0dXJlLCB3aGljaCBtdXN0IGJlIGFsbG9jYXRlZAorICAgdXNpbmcgSE1BQ19DVFhfbmV3LiAgQnV0IHRoaXMgZnVuY3Rpb24gZG9lc24ndCBleGlzdCBpbiBPcGVuU1NMIDEuMC54LiAqLworI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPCAweDEwMTAwMDAwTCB8fCBMSUJSRVNTTF9WRVJTSU9OX05VTUJFUgorICAgIHsKKyAgICAgICAgLyogYWxsb2NhdGUgbWVtb3J5IGZvciBhdXRoIGFuZCBITUFDX0NUWCBzdHJ1Y3R1cmVzICovCisgICAgICAgIHVpbnQ4X3QgKnBvaW50ZXI7CisgICAgICAgIEhNQUNfQ1RYICpuZXdfaG1hY19jdHg7CisgICAgICAgIHBvaW50ZXIgPSAodWludDhfdCAqKXNydHBfY3J5cHRvX2FsbG9jKHNpemVvZihITUFDX0NUWCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3J0cF9hdXRoX3QpKTsKKyAgICAgICAgaWYgKHBvaW50ZXIgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19hbGxvY19mYWlsOworICAgICAgICB9CisgICAgICAgICphID0gKHNydHBfYXV0aF90ICopcG9pbnRlcjsKKyAgICAgICAgKCphKS0+c3RhdGUgPSBwb2ludGVyICsgc2l6ZW9mKHNydHBfYXV0aF90KTsKKyAgICAgICAgbmV3X2htYWNfY3R4ID0gKEhNQUNfQ1RYICopKCgqYSktPnN0YXRlKTsKKworICAgICAgICBITUFDX0NUWF9pbml0KG5ld19obWFjX2N0eCk7CisgICAgfQorCisjZWxzZQorICAgICphID0gKHNydHBfYXV0aF90ICopc3J0cF9jcnlwdG9fYWxsb2Moc2l6ZW9mKHNydHBfYXV0aF90KSk7CisgICAgaWYgKCphID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19hbGxvY19mYWlsOworICAgIH0KKworICAgICgqYSktPnN0YXRlID0gSE1BQ19DVFhfbmV3KCk7CisgICAgaWYgKCgqYSktPnN0YXRlID09IE5VTEwpIHsKKyAgICAgICAgc3J0cF9jcnlwdG9fZnJlZSgqYSk7CisgICAgICAgICphID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19hbGxvY19mYWlsOworICAgIH0KKyNlbmRpZgorCisgICAgLyogc2V0IHBvaW50ZXJzICovCisgICAgKCphKS0+dHlwZSA9ICZzcnRwX2htYWM7CisgICAgKCphKS0+b3V0X2xlbiA9IG91dF9sZW47CisgICAgKCphKS0+a2V5X2xlbiA9IGtleV9sZW47CisgICAgKCphKS0+cHJlZml4X2xlbiA9IDA7CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOworfQorCitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9obWFjX2RlYWxsb2Moc3J0cF9hdXRoX3QgKmEpCit7CisgICAgSE1BQ19DVFggKmhtYWNfY3R4OworCisgICAgaG1hY19jdHggPSAoSE1BQ19DVFggKilhLT5zdGF0ZTsKKworI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPCAweDEwMTAwMDAwTCB8fCBMSUJSRVNTTF9WRVJTSU9OX05VTUJFUgorICAgIEhNQUNfQ1RYX2NsZWFudXAoaG1hY19jdHgpOworCisgICAgLyogemVyb2l6ZSBlbnRpcmUgc3RhdGUqLworICAgIG9jdGV0X3N0cmluZ19zZXRfdG9femVybyhhLCBzaXplb2YoSE1BQ19DVFgpICsgc2l6ZW9mKHNydHBfYXV0aF90KSk7CisKKyNlbHNlCisgICAgSE1BQ19DVFhfZnJlZShobWFjX2N0eCk7CisKKyAgICAvKiB6ZXJvaXplIGVudGlyZSBzdGF0ZSovCisgICAgb2N0ZXRfc3RyaW5nX3NldF90b196ZXJvKGEsIHNpemVvZihzcnRwX2F1dGhfdCkpOworI2VuZGlmCisKKyAgICAvKiBmcmVlIG1lbW9yeSAqLworICAgIHNydHBfY3J5cHRvX2ZyZWUoYSk7CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOworfQorCitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9obWFjX3N0YXJ0KHZvaWQgKnN0YXRldikKK3sKKyAgICBITUFDX0NUWCAqc3RhdGUgPSAoSE1BQ19DVFggKilzdGF0ZXY7CisKKyAgICBpZiAoSE1BQ19Jbml0X2V4KHN0YXRlLCBOVUxMLCAwLCBOVUxMLCBOVUxMKSA9PSAwKQorICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2F1dGhfZmFpbDsKKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7Cit9CisKK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2htYWNfaW5pdCh2b2lkICpzdGF0ZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXlfbGVuKQoreworICAgIEhNQUNfQ1RYICpzdGF0ZSA9IChITUFDX0NUWCAqKXN0YXRldjsKKworICAgIGlmIChITUFDX0luaXRfZXgoc3RhdGUsIGtleSwga2V5X2xlbiwgRVZQX3NoYTEoKSwgTlVMTCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19hdXRoX2ZhaWw7CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOworfQorCitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9obWFjX3VwZGF0ZSh2b2lkICpzdGF0ZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICptZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1zZ19vY3RldHMpCit7CisgICAgSE1BQ19DVFggKnN0YXRlID0gKEhNQUNfQ1RYICopc3RhdGV2OworCisgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfaG1hYywgImlucHV0OiAlcyIsCisgICAgICAgICAgICAgICAgc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZyhtZXNzYWdlLCBtc2dfb2N0ZXRzKSk7CisKKyAgICBpZiAoSE1BQ19VcGRhdGUoc3RhdGUsIG1lc3NhZ2UsIG1zZ19vY3RldHMpID09IDApCisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYXV0aF9mYWlsOworCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IHNydHBfaG1hY19jb21wdXRlKHZvaWQgKnN0YXRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICptZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtc2dfb2N0ZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YWdfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnJlc3VsdCkKK3sKKyAgICBITUFDX0NUWCAqc3RhdGUgPSAoSE1BQ19DVFggKilzdGF0ZXY7CisgICAgdWludDhfdCBoYXNoX3ZhbHVlW1NIQTFfRElHRVNUX1NJWkVdOworICAgIGludCBpOworICAgIHVuc2lnbmVkIGludCBsZW47CisKKyAgICAvKiBjaGVjayB0YWcgbGVuZ3RoLCByZXR1cm4gZXJyb3IgaWYgd2UgY2FuJ3QgcHJvdmlkZSB0aGUgdmFsdWUgZXhwZWN0ZWQgKi8KKyAgICBpZiAodGFnX2xlbiA+IFNIQTFfRElHRVNUX1NJWkUpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisgICAgfQorCisgICAgLyogaGFzaCBtZXNzYWdlLCBjb3B5IG91dHB1dCBpbnRvIEggKi8KKyAgICBpZiAoSE1BQ19VcGRhdGUoc3RhdGUsIG1lc3NhZ2UsIG1zZ19vY3RldHMpID09IDApCisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYXV0aF9mYWlsOworCisgICAgaWYgKEhNQUNfRmluYWwoc3RhdGUsIGhhc2hfdmFsdWUsICZsZW4pID09IDApCisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYXV0aF9mYWlsOworCisgICAgaWYgKGxlbiA8IHRhZ19sZW4pCisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYXV0aF9mYWlsOworCisgICAgLyogY29weSBoYXNoX3ZhbHVlIHRvICpyZXN1bHQgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgdGFnX2xlbjsgaSsrKSB7CisgICAgICAgIHJlc3VsdFtpXSA9IGhhc2hfdmFsdWVbaV07CisgICAgfQorCisgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfaG1hYywgIm91dHB1dDogJXMiLAorICAgICAgICAgICAgICAgIHNydHBfb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoaGFzaF92YWx1ZSwgdGFnX2xlbikpOworCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKworLyogYmVnaW4gdGVzdCBjYXNlIDAgKi8KKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KK3N0YXRpYyBjb25zdCB1aW50OF90IHNydHBfaG1hY190ZXN0X2Nhc2VfMF9rZXlbU0hBMV9ESUdFU1RfU0laRV0gPSB7CisgICAgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiwKKyAgICAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLAorICAgIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIKK307CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworLyogY2xhbmctZm9ybWF0IG9mZiAqLworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc3J0cF9obWFjX3Rlc3RfY2FzZV8wX2RhdGFbOF0gPSB7CisgICAgMHg0OCwgMHg2OSwgMHgyMCwgMHg1NCwgMHg2OCwgMHg2NSwgMHg3MiwgMHg2NSAvKiAiSGkgVGhlcmUiICovCit9OworLyogY2xhbmctZm9ybWF0IG9uICovCisKKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KK3N0YXRpYyBjb25zdCB1aW50OF90IHNydHBfaG1hY190ZXN0X2Nhc2VfMF90YWdbU0hBMV9ESUdFU1RfU0laRV0gPSB7CisgICAgMHhiNiwgMHgxNywgMHgzMSwgMHg4NiwgMHg1NSwgMHgwNSwgMHg3MiwgMHg2NCwKKyAgICAweGUyLCAweDhiLCAweGMwLCAweGI2LCAweGZiLCAweDM3LCAweDhjLCAweDhlLAorICAgIDB4ZjEsIDB4NDYsIDB4YmUsIDB4MDAKK307CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworc3RhdGljIGNvbnN0IHNydHBfYXV0aF90ZXN0X2Nhc2VfdCBzcnRwX2htYWNfdGVzdF9jYXNlXzAgPSB7CisgICAgc2l6ZW9mKHNydHBfaG1hY190ZXN0X2Nhc2VfMF9rZXkpLCAgLyogb2N0ZXRzIGluIGtleSAgICAgICAgICAgICovCisgICAgc3J0cF9obWFjX3Rlc3RfY2FzZV8wX2tleSwgICAgICAgICAgLyoga2V5ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgc2l6ZW9mKHNydHBfaG1hY190ZXN0X2Nhc2VfMF9kYXRhKSwgLyogb2N0ZXRzIGluIGRhdGEgICAgICAgICAgICovCisgICAgc3J0cF9obWFjX3Rlc3RfY2FzZV8wX2RhdGEsICAgICAgICAgLyogZGF0YSAgICAgICAgICAgICAgICAgICAgICovCisgICAgc2l6ZW9mKHNydHBfaG1hY190ZXN0X2Nhc2VfMF90YWcpLCAgLyogb2N0ZXRzIGluIHRhZyAgICAgICAgICAgICovCisgICAgc3J0cF9obWFjX3Rlc3RfY2FzZV8wX3RhZywgICAgICAgICAgLyogdGFnICAgICAgICAgICAgICAgICAgICAgICovCisgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBuZXh0IHRlc3RjYXNlICovCit9OworCisvKiBlbmQgdGVzdCBjYXNlIDAgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgc3J0cF9obWFjX2Rlc2NyaXB0aW9uW10gPQorICAgICJobWFjIHNoYS0xIGF1dGhlbnRpY2F0aW9uIGZ1bmN0aW9uIjsKKworLyoKKyAqIHNydHBfYXV0aF90eXBlX3QgaG1hYyBpcyB0aGUgaG1hYyBtZXRhb2JqZWN0CisgKi8KKworY29uc3Qgc3J0cF9hdXRoX3R5cGVfdCBzcnRwX2htYWMgPSB7CisgICAgc3J0cF9obWFjX2FsbG9jLCAgICAgICAgLyogKi8KKyAgICBzcnRwX2htYWNfZGVhbGxvYywgICAgICAvKiAqLworICAgIHNydHBfaG1hY19pbml0LCAgICAgICAgIC8qICovCisgICAgc3J0cF9obWFjX2NvbXB1dGUsICAgICAgLyogKi8KKyAgICBzcnRwX2htYWNfdXBkYXRlLCAgICAgICAvKiAqLworICAgIHNydHBfaG1hY19zdGFydCwgICAgICAgIC8qICovCisgICAgc3J0cF9obWFjX2Rlc2NyaXB0aW9uLCAgLyogKi8KKyAgICAmc3J0cF9obWFjX3Rlc3RfY2FzZV8wLCAvKiAqLworICAgIFNSVFBfSE1BQ19TSEExICAgICAgICAgIC8qICovCit9OwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2hhc2gvbnVsbF9hdXRoLmMgYi9jcnlwdG8vaGFzaC9udWxsX2F1dGguYwppbmRleCA5MzllODRiLi41MTk0NDE3IDEwMDY0NAotLS0gYS9jcnlwdG8vaGFzaC9udWxsX2F1dGguYworKysgYi9jcnlwdG8vaGFzaC9udWxsX2F1dGguYwpAQCAtOSwyNiArOSwyNiBAQAogICovCiAKIC8qCi0gKgkKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA1LCBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMTcsIENpc2NvIFN5c3RlbXMsIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogCisgKgogICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCiAgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCiAgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAogICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKKyAqCiAgKiAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAgKiAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAorICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwpAQCAtNDQsMTE3ICs0NCwxMjUgQEAKICAqCiAgKi8KIAorI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgogCi0jaW5jbHVkZSAibnVsbF9hdXRoLmgiIAorI2luY2x1ZGUgIm51bGxfYXV0aC5oIgorI2luY2x1ZGUgImVyci5oIiAvKiBmb3Igc3J0cF9kZWJ1ZyAqLwogI2luY2x1ZGUgImFsbG9jLmgiCisjaW5jbHVkZSAiY2lwaGVyX3R5cGVzLmgiCiAKLS8qIG51bGxfYXV0aCB1c2VzIHRoZSBhdXRoIGRlYnVnIG1vZHVsZSAqLworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IHNydHBfbnVsbF9hdXRoX2FsbG9jKHNydHBfYXV0aF90ICoqYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3V0X2xlbikKK3sKKyAgICBleHRlcm4gY29uc3Qgc3J0cF9hdXRoX3R5cGVfdCBzcnRwX251bGxfYXV0aDsKKyAgICB1aW50OF90ICpwb2ludGVyOwogCi1leHRlcm4gZGVidWdfbW9kdWxlX3QgbW9kX2F1dGg7CisgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfYXV0aCwgImFsbG9jYXRpbmcgYXV0aCBmdW5jIHdpdGgga2V5IGxlbmd0aCAlZCIsCisgICAgICAgICAgICAgICAga2V5X2xlbik7CisgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfYXV0aCwgIiAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnIGxlbmd0aCAlZCIsCisgICAgICAgICAgICAgICAgb3V0X2xlbik7CiAKLWVycl9zdGF0dXNfdAotbnVsbF9hdXRoX2FsbG9jKGF1dGhfdCAqKmEsIGludCBrZXlfbGVuLCBpbnQgb3V0X2xlbikgewotICBleHRlcm4gYXV0aF90eXBlX3QgbnVsbF9hdXRoOwotICB1aW50OF90ICpwb2ludGVyOworICAgIC8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgYXV0aCBhbmQgc3J0cF9udWxsX2F1dGhfY3R4X3Qgc3RydWN0dXJlcyAqLworICAgIHBvaW50ZXIgPSAodWludDhfdCAqKXNydHBfY3J5cHRvX2FsbG9jKHNpemVvZihzcnRwX251bGxfYXV0aF9jdHhfdCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzcnRwX2F1dGhfdCkpOworICAgIGlmIChwb2ludGVyID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19hbGxvY19mYWlsOworICAgIH0KIAotICBkZWJ1Z19wcmludChtb2RfYXV0aCwgImFsbG9jYXRpbmcgYXV0aCBmdW5jIHdpdGgga2V5IGxlbmd0aCAlZCIsIGtleV9sZW4pOwotICBkZWJ1Z19wcmludChtb2RfYXV0aCwgIiAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnIGxlbmd0aCAlZCIsIG91dF9sZW4pOworICAgIC8qIHNldCBwb2ludGVycyAqLworICAgICphID0gKHNydHBfYXV0aF90ICopcG9pbnRlcjsKKyAgICAoKmEpLT50eXBlID0gJnNydHBfbnVsbF9hdXRoOworICAgICgqYSktPnN0YXRlID0gcG9pbnRlciArIHNpemVvZihzcnRwX2F1dGhfdCk7CisgICAgKCphKS0+b3V0X2xlbiA9IG91dF9sZW47CisgICAgKCphKS0+cHJlZml4X2xlbiA9IG91dF9sZW47CisgICAgKCphKS0+a2V5X2xlbiA9IGtleV9sZW47CiAKLSAgLyogYWxsb2NhdGUgbWVtb3J5IGZvciBhdXRoIGFuZCBudWxsX2F1dGhfY3R4X3Qgc3RydWN0dXJlcyAqLwotICBwb2ludGVyID0gY3J5cHRvX2FsbG9jKHNpemVvZihudWxsX2F1dGhfY3R4X3QpICsgc2l6ZW9mKGF1dGhfdCkpOwotICBpZiAocG9pbnRlciA9PSBOVUxMKQotICAgIHJldHVybiBlcnJfc3RhdHVzX2FsbG9jX2ZhaWw7Ci0KLSAgLyogc2V0IHBvaW50ZXJzICovCi0gICphID0gKGF1dGhfdCAqKXBvaW50ZXI7Ci0gICgqYSktPnR5cGUgPSAmbnVsbF9hdXRoOwotICAoKmEpLT5zdGF0ZSA9IHBvaW50ZXIgKyBzaXplb2YgKGF1dGhfdCk7ICAKLSAgKCphKS0+b3V0X2xlbiA9IG91dF9sZW47Ci0gICgqYSktPnByZWZpeF9sZW4gPSBvdXRfbGVuOwotICAoKmEpLT5rZXlfbGVuID0ga2V5X2xlbjsKLQotICAvKiBpbmNyZW1lbnQgZ2xvYmFsIGNvdW50IG9mIGFsbCBudWxsX2F1dGggdXNlcyAqLwotICBudWxsX2F1dGgucmVmX2NvdW50Kys7Ci0KLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7CisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKIH0KIAotZXJyX3N0YXR1c190Ci1udWxsX2F1dGhfZGVhbGxvYyhhdXRoX3QgKmEpIHsKLSAgZXh0ZXJuIGF1dGhfdHlwZV90IG51bGxfYXV0aDsKLSAgCi0gIC8qIHplcm9pemUgZW50aXJlIHN0YXRlKi8KLSAgb2N0ZXRfc3RyaW5nX3NldF90b196ZXJvKChvY3RldF90ICopYSwgCi0JCQkgICBzaXplb2YobnVsbF9hdXRoX2N0eF90KSArIHNpemVvZihhdXRoX3QpKTsKK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX251bGxfYXV0aF9kZWFsbG9jKHNydHBfYXV0aF90ICphKQoreworICAgIGV4dGVybiBjb25zdCBzcnRwX2F1dGhfdHlwZV90IHNydHBfbnVsbF9hdXRoOwogCi0gIC8qIGZyZWUgbWVtb3J5ICovCi0gIGNyeXB0b19mcmVlKGEpOwotICAKLSAgLyogZGVjcmVtZW50IGdsb2JhbCBjb3VudCBvZiBhbGwgbnVsbF9hdXRoIHVzZXMgKi8KLSAgbnVsbF9hdXRoLnJlZl9jb3VudC0tOworICAgIC8qIHplcm9pemUgZW50aXJlIHN0YXRlKi8KKyAgICBvY3RldF9zdHJpbmdfc2V0X3RvX3plcm8oYSwgc2l6ZW9mKHNydHBfbnVsbF9hdXRoX2N0eF90KSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3J0cF9hdXRoX3QpKTsKIAotICByZXR1cm4gZXJyX3N0YXR1c19vazsKKyAgICAvKiBmcmVlIG1lbW9yeSAqLworICAgIHNydHBfY3J5cHRvX2ZyZWUoYSk7CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQogCi1lcnJfc3RhdHVzX3QKLW51bGxfYXV0aF9pbml0KG51bGxfYXV0aF9jdHhfdCAqc3RhdGUsIGNvbnN0IG9jdGV0X3QgKmtleSwgaW50IGtleV9sZW4pIHsKK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX251bGxfYXV0aF9pbml0KHZvaWQgKnN0YXRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXlfbGVuKQoreworICAgIC8qIHNydHBfbnVsbF9hdXRoX2N0eF90ICpzdGF0ZSA9IChzcnRwX251bGxfYXV0aF9jdHhfdCAqKXN0YXRldjsgKi8KKyAgICAvKiBhY2NlcHQgYW55IGxlbmd0aCBvZiBrZXksIGFuZCBkbyBub3RoaW5nICovCiAKLSAgLyogYWNjZXB0IGFueSBsZW5ndGggb2Yga2V5LCBhbmQgZG8gbm90aGluZyAqLwotICAKLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7CisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKIH0KIAotZXJyX3N0YXR1c190Ci1udWxsX2F1dGhfY29tcHV0ZShudWxsX2F1dGhfY3R4X3QgKnN0YXRlLCBvY3RldF90ICptZXNzYWdlLAotCQkgICBpbnQgbXNnX29jdGV0cywgaW50IHRhZ19sZW4sIG9jdGV0X3QgKnJlc3VsdCkgeworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IHNydHBfbnVsbF9hdXRoX2NvbXB1dGUodm9pZCAqc3RhdGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtc2dfb2N0ZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhZ19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpyZXN1bHQpCit7CisgICAgLyogc3J0cF9udWxsX2F1dGhfY3R4X3QgKnN0YXRlID0gKHNydHBfbnVsbF9hdXRoX2N0eF90ICopc3RhdGV2OyAqLwogCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7CiB9CiAKLWVycl9zdGF0dXNfdAotbnVsbF9hdXRoX3VwZGF0ZShudWxsX2F1dGhfY3R4X3QgKnN0YXRlLCBvY3RldF90ICptZXNzYWdlLAotCQkgICBpbnQgbXNnX29jdGV0cykgeworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IHNydHBfbnVsbF9hdXRoX3VwZGF0ZSh2b2lkICpzdGF0ZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtc2dfb2N0ZXRzKQoreworICAgIC8qIHNydHBfbnVsbF9hdXRoX2N0eF90ICpzdGF0ZSA9IChzcnRwX251bGxfYXV0aF9jdHhfdCAqKXN0YXRldjsgKi8KIAotICByZXR1cm4gZXJyX3N0YXR1c19vazsKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQogCi1lcnJfc3RhdHVzX3QKLW51bGxfYXV0aF9zdGFydChudWxsX2F1dGhfY3R4X3QgKnN0YXRlKSB7Ci0gIHJldHVybiBlcnJfc3RhdHVzX29rOworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IHNydHBfbnVsbF9hdXRoX3N0YXJ0KHZvaWQgKnN0YXRldikKK3sKKyAgICAvKiBzcnRwX251bGxfYXV0aF9jdHhfdCAqc3RhdGUgPSAoc3J0cF9udWxsX2F1dGhfY3R4X3QgKilzdGF0ZXY7ICovCisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQogCiAvKgotICogYXV0aF90eXBlX3QgLSBkZWZpbmVzIGRlc2NyaXB0aW9uLCB0ZXN0IGNhc2UsIGFuZCBudWxsX2F1dGgKKyAqIHNydHBfYXV0aF90eXBlX3QgLSBkZWZpbmVzIGRlc2NyaXB0aW9uLCB0ZXN0IGNhc2UsIGFuZCBudWxsX2F1dGgKICAqIG1ldGFvYmplY3QKICAqLwogCiAvKiBiZWdpbiB0ZXN0IGNhc2UgMCAqLwogCi1hdXRoX3Rlc3RfY2FzZV90Ci1udWxsX2F1dGhfdGVzdF9jYXNlXzAgPSB7Ci0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2N0ZXRzIGluIGtleSAgICAgICAgICAgICovCi0gIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoga2V5ICAgICAgICAgICAgICAgICAgICAgICovCi0gIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2N0ZXRzIGluIGRhdGEgICAgICAgICAgICovIAotICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRhdGEgICAgICAgICAgICAgICAgICAgICAqLwotICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9jdGV0cyBpbiB0YWcgICAgICAgICAgICAqLwotICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRhZyAgICAgICAgICAgICAgICAgICAgICAqLwotICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gbmV4dCB0ZXN0Y2FzZSAqLworc3RhdGljIGNvbnN0IHNydHBfYXV0aF90ZXN0X2Nhc2VfdCBzcnRwX251bGxfYXV0aF90ZXN0X2Nhc2VfMCA9IHsKKyAgICAwLCAgICAvKiBvY3RldHMgaW4ga2V5ICAgICAgICAgICAgKi8KKyAgICBOVUxMLCAvKiBrZXkgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAwLCAgICAvKiBvY3RldHMgaW4gZGF0YSAgICAgICAgICAgKi8KKyAgICBOVUxMLCAvKiBkYXRhICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAwLCAgICAvKiBvY3RldHMgaW4gdGFnICAgICAgICAgICAgKi8KKyAgICBOVUxMLCAvKiB0YWcgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBOVUxMICAvKiBwb2ludGVyIHRvIG5leHQgdGVzdGNhc2UgKi8KIH07CiAKIC8qIGVuZCB0ZXN0IGNhc2UgMCAqLwogCi1jaGFyIG51bGxfYXV0aF9kZXNjcmlwdGlvbltdID0gIm51bGwgYXV0aGVudGljYXRpb24gZnVuY3Rpb24iOworc3RhdGljIGNvbnN0IGNoYXIgc3J0cF9udWxsX2F1dGhfZGVzY3JpcHRpb25bXSA9ICJudWxsIGF1dGhlbnRpY2F0aW9uIGZ1bmN0aW9uIjsKIAotYXV0aF90eXBlX3QKLW51bGxfYXV0aCAgPSB7Ci0gIChhdXRoX2FsbG9jX2Z1bmMpICAgICAgbnVsbF9hdXRoX2FsbG9jLAotICAoYXV0aF9kZWFsbG9jX2Z1bmMpICAgIG51bGxfYXV0aF9kZWFsbG9jLAotICAoYXV0aF9pbml0X2Z1bmMpICAgICAgIG51bGxfYXV0aF9pbml0LAotICAoYXV0aF9jb21wdXRlX2Z1bmMpICAgIG51bGxfYXV0aF9jb21wdXRlLAotICAoYXV0aF91cGRhdGVfZnVuYykgICAgIG51bGxfYXV0aF91cGRhdGUsCi0gIChhdXRoX3N0YXJ0X2Z1bmMpICAgICAgbnVsbF9hdXRoX3N0YXJ0LAotICAoY2hhciAqKSAgICAgICAgICAgICAgIG51bGxfYXV0aF9kZXNjcmlwdGlvbiwKLSAgKGludCkgICAgICAgICAgICAgICAgICAwLCAgLyogaW5zdGFuY2UgY291bnQgKi8KLSAgKGF1dGhfdGVzdF9jYXNlX3QgKikgICAmbnVsbF9hdXRoX3Rlc3RfY2FzZV8wCitjb25zdCBzcnRwX2F1dGhfdHlwZV90IHNydHBfbnVsbF9hdXRoID0geworICAgIHNydHBfbnVsbF9hdXRoX2FsbG9jLCAgICAgICAgLyogKi8KKyAgICBzcnRwX251bGxfYXV0aF9kZWFsbG9jLCAgICAgIC8qICovCisgICAgc3J0cF9udWxsX2F1dGhfaW5pdCwgICAgICAgICAvKiAqLworICAgIHNydHBfbnVsbF9hdXRoX2NvbXB1dGUsICAgICAgLyogKi8KKyAgICBzcnRwX251bGxfYXV0aF91cGRhdGUsICAgICAgIC8qICovCisgICAgc3J0cF9udWxsX2F1dGhfc3RhcnQsICAgICAgICAvKiAqLworICAgIHNydHBfbnVsbF9hdXRoX2Rlc2NyaXB0aW9uLCAgLyogKi8KKyAgICAmc3J0cF9udWxsX2F1dGhfdGVzdF9jYXNlXzAsIC8qICovCisgICAgU1JUUF9OVUxMX0FVVEggICAgICAgICAgICAgICAvKiAqLwogfTsKLQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2hhc2gvc2hhMS5jIGIvY3J5cHRvL2hhc2gvc2hhMS5jCmluZGV4IDU5OTA1ZTcuLmFmZDYzODEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9oYXNoL3NoYTEuYworKysgYi9jcnlwdG8vaGFzaC9zaGExLmMKQEAgLTksMjYgKzksMjYgQEAKICAqLwogCiAvKgotICoJCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSwgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDE3LCBDaXNjbyBTeXN0ZW1zLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwogICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKICAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCisgKgogICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAogICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKKyAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKQEAgLTQ0LDQ5ICs0NCw0OSBAQAogICoKICAqLwogCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCiAKICNpbmNsdWRlICJzaGExLmgiCiAKLWRlYnVnX21vZHVsZV90IG1vZF9zaGExID0gewotICAwLCAgICAgICAgICAgICAgICAgLyogZGVidWdnaW5nIGlzIG9mZiBieSBkZWZhdWx0ICovCi0gICJzaGEtMSIgICAgICAgICAgICAvKiBwcmludGFibGUgbW9kdWxlIG5hbWUgICAgICAgKi8KK3NydHBfZGVidWdfbW9kdWxlX3Qgc3J0cF9tb2Rfc2hhMSA9IHsKKyAgICAwLCAgICAgIC8qIGRlYnVnZ2luZyBpcyBvZmYgYnkgZGVmYXVsdCAqLworICAgICJzaGEtMSIgLyogcHJpbnRhYmxlIG1vZHVsZSBuYW1lICAgICAgICovCiB9OwogCi0jZGVmaW5lIGJzd2FwXzMyKHgpIG50b2hsKHgpCi0KIC8qIFNOID09IFJvdGF0ZSBsZWZ0IE4gYml0cyAqLwotI2RlZmluZSBTMShYKSAgKChYIDw8IDEpICB8IChYID4+IDMxKSkKLSNkZWZpbmUgUzUoWCkgICgoWCA8PCA1KSAgfCAoWCA+PiAyNykpCisjZGVmaW5lIFMxKFgpICgoWCA8PCAxKSB8IChYID4+IDMxKSkKKyNkZWZpbmUgUzUoWCkgKChYIDw8IDUpIHwgKFggPj4gMjcpKQogI2RlZmluZSBTMzAoWCkgKChYIDw8IDMwKSB8IChYID4+IDIpKQogCi0jZGVmaW5lIGYwKEIsQyxEKSAoKEIgJiBDKSB8ICh+QiAmIEQpKSAgICAgICAgICAgICAgCi0jZGVmaW5lIGYxKEIsQyxEKSAoQiBeIEMgXiBEKQotI2RlZmluZSBmMihCLEMsRCkgKChCICYgQykgfCAoQiAmIEQpIHwgKEMgJiBEKSkKLSNkZWZpbmUgZjMoQixDLEQpIChCIF4gQyBeIEQpCisjZGVmaW5lIGYwKEIsIEMsIEQpICgoQiAmIEMpIHwgKH5CICYgRCkpCisjZGVmaW5lIGYxKEIsIEMsIEQpIChCIF4gQyBeIEQpCisjZGVmaW5lIGYyKEIsIEMsIEQpICgoQiAmIEMpIHwgKEIgJiBEKSB8IChDICYgRCkpCisjZGVmaW5lIGYzKEIsIEMsIEQpIChCIF4gQyBeIEQpCiAKLS8qIAotICogbm90YSBiZW5lOiB0aGUgdmFyaWFibGUgSzAgYXBwZWFycyBpbiB0aGUgY3Vyc2VzIGxpYnJhcnksIHNvIHdlIAotICogZ2l2ZSBsb25nZXIgbmFtZXMgdG8gdGhlc2UgdmFyaWFibGVzIHRvIGF2b2lkIHNwdXJpb3VzIHdhcm5pbmdzIAorLyoKKyAqIG5vdGEgYmVuZTogdGhlIHZhcmlhYmxlIEswIGFwcGVhcnMgaW4gdGhlIGN1cnNlcyBsaWJyYXJ5LCBzbyB3ZQorICogZ2l2ZSBsb25nZXIgbmFtZXMgdG8gdGhlc2UgdmFyaWFibGVzIHRvIGF2b2lkIHNwdXJpb3VzIHdhcm5pbmdzCiAgKiBvbiBzeXN0ZW1zIHRoYXQgdXNlcyBjdXJzZXMKICAqLwogCi11aW50MzJfdCBTSEFfSzAgPSAweDVBODI3OTk5OyAgIC8qIEt0IGZvciAwICA8PSB0IDw9IDE5ICovCi11aW50MzJfdCBTSEFfSzEgPSAweDZFRDlFQkExOyAgIC8qIEt0IGZvciAyMCA8PSB0IDw9IDM5ICovCi11aW50MzJfdCBTSEFfSzIgPSAweDhGMUJCQ0RDOyAgIC8qIEt0IGZvciA0MCA8PSB0IDw9IDU5ICovCi11aW50MzJfdCBTSEFfSzMgPSAweENBNjJDMUQ2OyAgIC8qIEt0IGZvciA2MCA8PSB0IDw9IDc5ICovCit1aW50MzJfdCBTSEFfSzAgPSAweDVBODI3OTk5OyAvKiBLdCBmb3IgMCAgPD0gdCA8PSAxOSAqLwordWludDMyX3QgU0hBX0sxID0gMHg2RUQ5RUJBMTsgLyogS3QgZm9yIDIwIDw9IHQgPD0gMzkgKi8KK3VpbnQzMl90IFNIQV9LMiA9IDB4OEYxQkJDREM7IC8qIEt0IGZvciA0MCA8PSB0IDw9IDU5ICovCit1aW50MzJfdCBTSEFfSzMgPSAweENBNjJDMUQ2OyAvKiBLdCBmb3IgNjAgPD0gdCA8PSA3OSAqLwogCi12b2lkCi1zaGExKGNvbnN0IG9jdGV0X3QgKm1zZywgIGludCBvY3RldHNfaW5fbXNnLCB1aW50MzJfdCBoYXNoX3ZhbHVlWzVdKSB7Ci0gIHNoYTFfY3R4X3QgY3R4Owordm9pZCBzcnRwX3NoYTEoY29uc3QgdWludDhfdCAqbXNnLCBpbnQgb2N0ZXRzX2luX21zZywgdWludDMyX3QgaGFzaF92YWx1ZVs1XSkKK3sKKyAgICBzcnRwX3NoYTFfY3R4X3QgY3R4OwogCi0gIHNoYTFfaW5pdCgmY3R4KTsKLSAgc2hhMV91cGRhdGUoJmN0eCwgbXNnLCBvY3RldHNfaW5fbXNnKTsKLSAgc2hhMV9maW5hbCgmY3R4LCBoYXNoX3ZhbHVlKTsKLQorICAgIHNydHBfc2hhMV9pbml0KCZjdHgpOworICAgIHNydHBfc2hhMV91cGRhdGUoJmN0eCwgbXNnLCBvY3RldHNfaW5fbXNnKTsKKyAgICBzcnRwX3NoYTFfZmluYWwoJmN0eCwgaGFzaF92YWx1ZSk7CiB9CiAKIC8qCi0gKiAgc2hhMV9jb3JlKE0sIEgpIGNvbXB1dGVzIHRoZSBjb3JlIGNvbXByZXNzaW9uIGZ1bmN0aW9uLCB3aGVyZSBNIGlzCisgKiAgc3J0cF9zaGExX2NvcmUoTSwgSCkgY29tcHV0ZXMgdGhlIGNvcmUgY29tcHJlc3Npb24gZnVuY3Rpb24sIHdoZXJlIE0gaXMKICAqICB0aGUgbmV4dCBwYXJ0IG9mIHRoZSBtZXNzYWdlIChpbiBuZXR3b3JrIGJ5dGUgb3JkZXIpIGFuZCBIIGlzIHRoZQogICogIGludGVybWVkaWF0ZSBzdGF0ZSB7IEgwLCBIMSwgLi4ufSAoaW4gaG9zdCBieXRlIG9yZGVyKQogICoKQEAgLTk3LDMxMCArOTcsMzc4IEBACiAgKiAgKGNyeXB0by9jaXBoZXIvc2VhbC5jKQogICovCiAKLXZvaWQKLXNoYTFfY29yZShjb25zdCB1aW50MzJfdCBNWzE2XSwgdWludDMyX3QgaGFzaF92YWx1ZVs1XSkgewotICB1aW50MzJfdCBIMDsKLSAgdWludDMyX3QgSDE7Ci0gIHVpbnQzMl90IEgyOwotICB1aW50MzJfdCBIMzsKLSAgdWludDMyX3QgSDQ7Ci0gIHVpbnQzMl90IFdbODBdOwotICB1aW50MzJfdCBBLCBCLCBDLCBELCBFLCBURU1QOwotICBpbnQgdDsKK3ZvaWQgc3J0cF9zaGExX2NvcmUoY29uc3QgdWludDMyX3QgTVsxNl0sIHVpbnQzMl90IGhhc2hfdmFsdWVbNV0pCit7CisgICAgdWludDMyX3QgSDA7CisgICAgdWludDMyX3QgSDE7CisgICAgdWludDMyX3QgSDI7CisgICAgdWludDMyX3QgSDM7CisgICAgdWludDMyX3QgSDQ7CisgICAgdWludDMyX3QgV1s4MF07CisgICAgdWludDMyX3QgQSwgQiwgQywgRCwgRSwgVEVNUDsKKyAgICBpbnQgdDsKIAotICAvKiBjb3B5IGhhc2hfdmFsdWUgaW50byBIMCwgSDEsIEgyLCBIMywgSDQgKi8KLSAgSDAgPSBoYXNoX3ZhbHVlWzBdOwotICBIMSA9IGhhc2hfdmFsdWVbMV07Ci0gIEgyID0gaGFzaF92YWx1ZVsyXTsKLSAgSDMgPSBoYXNoX3ZhbHVlWzNdOwotICBINCA9IGhhc2hfdmFsdWVbNF07CisgICAgLyogY29weSBoYXNoX3ZhbHVlIGludG8gSDAsIEgxLCBIMiwgSDMsIEg0ICovCisgICAgSDAgPSBoYXNoX3ZhbHVlWzBdOworICAgIEgxID0gaGFzaF92YWx1ZVsxXTsKKyAgICBIMiA9IGhhc2hfdmFsdWVbMl07CisgICAgSDMgPSBoYXNoX3ZhbHVlWzNdOworICAgIEg0ID0gaGFzaF92YWx1ZVs0XTsKIAotICAvKiBjb3B5L3hvciBtZXNzYWdlIGludG8gYXJyYXkgKi8KLSAgICAKLSAgV1swXSAgPSBic3dhcF8zMihNWzBdKTsKLSAgV1sxXSAgPSBic3dhcF8zMihNWzFdKTsKLSAgV1syXSAgPSBic3dhcF8zMihNWzJdKTsKLSAgV1szXSAgPSBic3dhcF8zMihNWzNdKTsKLSAgV1s0XSAgPSBic3dhcF8zMihNWzRdKTsKLSAgV1s1XSAgPSBic3dhcF8zMihNWzVdKTsKLSAgV1s2XSAgPSBic3dhcF8zMihNWzZdKTsKLSAgV1s3XSAgPSBic3dhcF8zMihNWzddKTsKLSAgV1s4XSAgPSBic3dhcF8zMihNWzhdKTsKLSAgV1s5XSAgPSBic3dhcF8zMihNWzldKTsKLSAgV1sxMF0gPSBic3dhcF8zMihNWzEwXSk7Ci0gIFdbMTFdID0gYnN3YXBfMzIoTVsxMV0pOwotICBXWzEyXSA9IGJzd2FwXzMyKE1bMTJdKTsKLSAgV1sxM10gPSBic3dhcF8zMihNWzEzXSk7Ci0gIFdbMTRdID0gYnN3YXBfMzIoTVsxNF0pOwotICBXWzE1XSA9IGJzd2FwXzMyKE1bMTVdKTsKLSAgVEVNUCA9IFdbMTNdIF4gV1s4XSAgXiBXWzJdICBeIFdbMF07ICBXWzE2XSA9IFMxKFRFTVApOwotICBURU1QID0gV1sxNF0gXiBXWzldICBeIFdbM10gIF4gV1sxXTsgIFdbMTddID0gUzEoVEVNUCk7Ci0gIFRFTVAgPSBXWzE1XSBeIFdbMTBdIF4gV1s0XSAgXiBXWzJdOyAgV1sxOF0gPSBTMShURU1QKTsKLSAgVEVNUCA9IFdbMTZdIF4gV1sxMV0gXiBXWzVdICBeIFdbM107ICBXWzE5XSA9IFMxKFRFTVApOwotICBURU1QID0gV1sxN10gXiBXWzEyXSBeIFdbNl0gIF4gV1s0XTsgIFdbMjBdID0gUzEoVEVNUCk7Ci0gIFRFTVAgPSBXWzE4XSBeIFdbMTNdIF4gV1s3XSAgXiBXWzVdOyAgV1syMV0gPSBTMShURU1QKTsKLSAgVEVNUCA9IFdbMTldIF4gV1sxNF0gXiBXWzhdICBeIFdbNl07ICBXWzIyXSA9IFMxKFRFTVApOwotICBURU1QID0gV1syMF0gXiBXWzE1XSBeIFdbOV0gIF4gV1s3XTsgIFdbMjNdID0gUzEoVEVNUCk7Ci0gIFRFTVAgPSBXWzIxXSBeIFdbMTZdIF4gV1sxMF0gXiBXWzhdOyAgV1syNF0gPSBTMShURU1QKTsKLSAgVEVNUCA9IFdbMjJdIF4gV1sxN10gXiBXWzExXSBeIFdbOV07ICBXWzI1XSA9IFMxKFRFTVApOwotICBURU1QID0gV1syM10gXiBXWzE4XSBeIFdbMTJdIF4gV1sxMF07IFdbMjZdID0gUzEoVEVNUCk7Ci0gIFRFTVAgPSBXWzI0XSBeIFdbMTldIF4gV1sxM10gXiBXWzExXTsgV1syN10gPSBTMShURU1QKTsKLSAgVEVNUCA9IFdbMjVdIF4gV1syMF0gXiBXWzE0XSBeIFdbMTJdOyBXWzI4XSA9IFMxKFRFTVApOwotICBURU1QID0gV1syNl0gXiBXWzIxXSBeIFdbMTVdIF4gV1sxM107IFdbMjldID0gUzEoVEVNUCk7Ci0gIFRFTVAgPSBXWzI3XSBeIFdbMjJdIF4gV1sxNl0gXiBXWzE0XTsgV1szMF0gPSBTMShURU1QKTsKLSAgVEVNUCA9IFdbMjhdIF4gV1syM10gXiBXWzE3XSBeIFdbMTVdOyBXWzMxXSA9IFMxKFRFTVApOworICAgIC8qIGNvcHkveG9yIG1lc3NhZ2UgaW50byBhcnJheSAqLwogCi0gIC8qIHByb2Nlc3MgdGhlIHJlbWFpbmRlciBvZiB0aGUgYXJyYXkgKi8KLSAgZm9yICh0PTMyOyB0IDwgODA7IHQrKykgewotICAgIFRFTVAgPSBXW3QtM10gXiBXW3QtOF0gXiBXW3QtMTRdIF4gV1t0LTE2XTsKLSAgICBXW3RdID0gUzEoVEVNUCk7ICAgICAgCi0gIH0KKyAgICBXWzBdID0gYmUzMl90b19jcHUoTVswXSk7CisgICAgV1sxXSA9IGJlMzJfdG9fY3B1KE1bMV0pOworICAgIFdbMl0gPSBiZTMyX3RvX2NwdShNWzJdKTsKKyAgICBXWzNdID0gYmUzMl90b19jcHUoTVszXSk7CisgICAgV1s0XSA9IGJlMzJfdG9fY3B1KE1bNF0pOworICAgIFdbNV0gPSBiZTMyX3RvX2NwdShNWzVdKTsKKyAgICBXWzZdID0gYmUzMl90b19jcHUoTVs2XSk7CisgICAgV1s3XSA9IGJlMzJfdG9fY3B1KE1bN10pOworICAgIFdbOF0gPSBiZTMyX3RvX2NwdShNWzhdKTsKKyAgICBXWzldID0gYmUzMl90b19jcHUoTVs5XSk7CisgICAgV1sxMF0gPSBiZTMyX3RvX2NwdShNWzEwXSk7CisgICAgV1sxMV0gPSBiZTMyX3RvX2NwdShNWzExXSk7CisgICAgV1sxMl0gPSBiZTMyX3RvX2NwdShNWzEyXSk7CisgICAgV1sxM10gPSBiZTMyX3RvX2NwdShNWzEzXSk7CisgICAgV1sxNF0gPSBiZTMyX3RvX2NwdShNWzE0XSk7CisgICAgV1sxNV0gPSBiZTMyX3RvX2NwdShNWzE1XSk7CisgICAgVEVNUCA9IFdbMTNdIF4gV1s4XSBeIFdbMl0gXiBXWzBdOworICAgIFdbMTZdID0gUzEoVEVNUCk7CisgICAgVEVNUCA9IFdbMTRdIF4gV1s5XSBeIFdbM10gXiBXWzFdOworICAgIFdbMTddID0gUzEoVEVNUCk7CisgICAgVEVNUCA9IFdbMTVdIF4gV1sxMF0gXiBXWzRdIF4gV1syXTsKKyAgICBXWzE4XSA9IFMxKFRFTVApOworICAgIFRFTVAgPSBXWzE2XSBeIFdbMTFdIF4gV1s1XSBeIFdbM107CisgICAgV1sxOV0gPSBTMShURU1QKTsKKyAgICBURU1QID0gV1sxN10gXiBXWzEyXSBeIFdbNl0gXiBXWzRdOworICAgIFdbMjBdID0gUzEoVEVNUCk7CisgICAgVEVNUCA9IFdbMThdIF4gV1sxM10gXiBXWzddIF4gV1s1XTsKKyAgICBXWzIxXSA9IFMxKFRFTVApOworICAgIFRFTVAgPSBXWzE5XSBeIFdbMTRdIF4gV1s4XSBeIFdbNl07CisgICAgV1syMl0gPSBTMShURU1QKTsKKyAgICBURU1QID0gV1syMF0gXiBXWzE1XSBeIFdbOV0gXiBXWzddOworICAgIFdbMjNdID0gUzEoVEVNUCk7CisgICAgVEVNUCA9IFdbMjFdIF4gV1sxNl0gXiBXWzEwXSBeIFdbOF07CisgICAgV1syNF0gPSBTMShURU1QKTsKKyAgICBURU1QID0gV1syMl0gXiBXWzE3XSBeIFdbMTFdIF4gV1s5XTsKKyAgICBXWzI1XSA9IFMxKFRFTVApOworICAgIFRFTVAgPSBXWzIzXSBeIFdbMThdIF4gV1sxMl0gXiBXWzEwXTsKKyAgICBXWzI2XSA9IFMxKFRFTVApOworICAgIFRFTVAgPSBXWzI0XSBeIFdbMTldIF4gV1sxM10gXiBXWzExXTsKKyAgICBXWzI3XSA9IFMxKFRFTVApOworICAgIFRFTVAgPSBXWzI1XSBeIFdbMjBdIF4gV1sxNF0gXiBXWzEyXTsKKyAgICBXWzI4XSA9IFMxKFRFTVApOworICAgIFRFTVAgPSBXWzI2XSBeIFdbMjFdIF4gV1sxNV0gXiBXWzEzXTsKKyAgICBXWzI5XSA9IFMxKFRFTVApOworICAgIFRFTVAgPSBXWzI3XSBeIFdbMjJdIF4gV1sxNl0gXiBXWzE0XTsKKyAgICBXWzMwXSA9IFMxKFRFTVApOworICAgIFRFTVAgPSBXWzI4XSBeIFdbMjNdIF4gV1sxN10gXiBXWzE1XTsKKyAgICBXWzMxXSA9IFMxKFRFTVApOwogCi0gIEEgPSBIMDsgQiA9IEgxOyBDID0gSDI7IEQgPSBIMzsgRSA9IEg0OwotCi0gIGZvciAodD0wOyB0IDwgMjA7IHQrKykgewotICAgIFRFTVAgPSBTNShBKSArIGYwKEIsQyxEKSArIEUgKyBXW3RdICsgU0hBX0swOwotICAgIEUgPSBEOyBEID0gQzsgQyA9IFMzMChCKTsgQiA9IEE7IEEgPSBURU1QOwotICB9Ci0gIGZvciAoICAgOyB0IDwgNDA7IHQrKykgewotICAgIFRFTVAgPSBTNShBKSArIGYxKEIsQyxEKSArIEUgKyBXW3RdICsgU0hBX0sxOwotICAgIEUgPSBEOyBEID0gQzsgQyA9IFMzMChCKTsgQiA9IEE7IEEgPSBURU1QOwotICB9Ci0gIGZvciAoICAgOyB0IDwgNjA7IHQrKykgewotICAgIFRFTVAgPSBTNShBKSArIGYyKEIsQyxEKSArIEUgKyBXW3RdICsgU0hBX0syOwotICAgIEUgPSBEOyBEID0gQzsgQyA9IFMzMChCKTsgQiA9IEE7IEEgPSBURU1QOwotICB9Ci0gIGZvciAoICAgOyB0IDwgODA7IHQrKykgewotICAgIFRFTVAgPSBTNShBKSArIGYzKEIsQyxEKSArIEUgKyBXW3RdICsgU0hBX0szOwotICAgIEUgPSBEOyBEID0gQzsgQyA9IFMzMChCKTsgQiA9IEE7IEEgPSBURU1QOwotICB9Ci0KLSAgaGFzaF92YWx1ZVswXSA9IEgwICsgQTsKLSAgaGFzaF92YWx1ZVsxXSA9IEgxICsgQjsKLSAgaGFzaF92YWx1ZVsyXSA9IEgyICsgQzsKLSAgaGFzaF92YWx1ZVszXSA9IEgzICsgRDsKLSAgaGFzaF92YWx1ZVs0XSA9IEg0ICsgRTsKLQotICByZXR1cm47Ci19Ci0KLXZvaWQKLXNoYTFfaW5pdChzaGExX2N0eF90ICpjdHgpIHsKLSAKLSAgLyogaW5pdGlhbGl6ZSBzdGF0ZSB2ZWN0b3IgKi8KLSAgY3R4LT5IWzBdID0gMHg2NzQ1MjMwMTsKLSAgY3R4LT5IWzFdID0gMHhlZmNkYWI4OTsKLSAgY3R4LT5IWzJdID0gMHg5OGJhZGNmZTsKLSAgY3R4LT5IWzNdID0gMHgxMDMyNTQ3NjsKLSAgY3R4LT5IWzRdID0gMHhjM2QyZTFmMDsKLQotICAvKiBpbmRpY2F0ZSB0aGF0IG1lc3NhZ2UgYnVmZmVyIGlzIGVtcHR5ICovCi0gIGN0eC0+b2N0ZXRzX2luX2J1ZmZlciA9IDA7Ci0KLSAgLyogcmVzZXQgbWVzc2FnZSBiaXQtY291bnQgdG8gemVybyAqLwotICBjdHgtPm51bV9iaXRzX2luX21zZyA9IDA7Ci0KLX0KLQotdm9pZAotc2hhMV91cGRhdGUoc2hhMV9jdHhfdCAqY3R4LCBjb25zdCBvY3RldF90ICptc2csIGludCBvY3RldHNfaW5fbXNnKSB7Ci0gIGludCBpOwotICBvY3RldF90ICpidWYgPSAob2N0ZXRfdCAqKWN0eC0+TTsKLQotICAvKiB1cGRhdGUgbWVzc2FnZSBiaXQtY291bnQgKi8KLSAgY3R4LT5udW1fYml0c19pbl9tc2cgKz0gb2N0ZXRzX2luX21zZyAqIDg7Ci0KLSAgLyogbG9vcCBvdmVyIDE2LXdvcmQgYmxvY2tzIG9mIE0gKi8KLSAgd2hpbGUgKG9jdGV0c19pbl9tc2cgPiAwKSB7Ci0gICAgCi0gICAgaWYgKG9jdGV0c19pbl9tc2cgKyBjdHgtPm9jdGV0c19pbl9idWZmZXIgPj0gNjQpIHsKLQotICAgICAgLyogCi0gICAgICAgKiBjb3B5IHdvcmRzIG9mIE0gaW50byBtc2cgYnVmZmVyIHVudGlsIHRoYXQgYnVmZmVyIGlzIGZ1bGwsCi0gICAgICAgKiBjb252ZXJ0aW5nIHRoZW0gaW50byBob3N0IGJ5dGUgb3JkZXIgYXMgbmVlZGVkCi0gICAgICAgKi8KLSAgICAgIG9jdGV0c19pbl9tc2cgLT0gKDY0IC0gY3R4LT5vY3RldHNfaW5fYnVmZmVyKTsKLSAgICAgIGZvciAoaT1jdHgtPm9jdGV0c19pbl9idWZmZXI7IGkgPCA2NDsgaSsrKSAKLQlidWZbaV0gPSAqbXNnKys7Ci0gICAgICBjdHgtPm9jdGV0c19pbl9idWZmZXIgPSAwOwotCi0gICAgICAvKiBwcm9jZXNzIGEgd2hvbGUgYmxvY2sgKi8KLQotICAgICAgZGVidWdfcHJpbnQobW9kX3NoYTEsICIodXBkYXRlKSBydW5uaW5nIHNoYTFfY29yZSgpIiwgTlVMTCk7Ci0KLSAgICAgIHNoYTFfY29yZShjdHgtPk0sIGN0eC0+SCk7Ci0KLSAgICB9IGVsc2UgewotCi0gICAgICBkZWJ1Z19wcmludChtb2Rfc2hhMSwgIih1cGRhdGUpIG5vdCBydW5uaW5nIHNoYTFfY29yZSgpIiwgTlVMTCk7Ci0KLSAgICAgIGZvciAoaT1jdHgtPm9jdGV0c19pbl9idWZmZXI7IAotCSAgIGkgPCAoY3R4LT5vY3RldHNfaW5fYnVmZmVyICsgb2N0ZXRzX2luX21zZyk7IGkrKykKLQlidWZbaV0gPSAqbXNnKys7Ci0gICAgICBjdHgtPm9jdGV0c19pbl9idWZmZXIgKz0gb2N0ZXRzX2luX21zZzsKLSAgICAgIG9jdGV0c19pbl9tc2cgPSAwOworICAgIC8qIHByb2Nlc3MgdGhlIHJlbWFpbmRlciBvZiB0aGUgYXJyYXkgKi8KKyAgICBmb3IgKHQgPSAzMjsgdCA8IDgwOyB0KyspIHsKKyAgICAgICAgVEVNUCA9IFdbdCAtIDNdIF4gV1t0IC0gOF0gXiBXW3QgLSAxNF0gXiBXW3QgLSAxNl07CisgICAgICAgIFdbdF0gPSBTMShURU1QKTsKICAgICB9CiAKLSAgfQorICAgIEEgPSBIMDsKKyAgICBCID0gSDE7CisgICAgQyA9IEgyOworICAgIEQgPSBIMzsKKyAgICBFID0gSDQ7CiAKKyAgICBmb3IgKHQgPSAwOyB0IDwgMjA7IHQrKykgeworICAgICAgICBURU1QID0gUzUoQSkgKyBmMChCLCBDLCBEKSArIEUgKyBXW3RdICsgU0hBX0swOworICAgICAgICBFID0gRDsKKyAgICAgICAgRCA9IEM7CisgICAgICAgIEMgPSBTMzAoQik7CisgICAgICAgIEIgPSBBOworICAgICAgICBBID0gVEVNUDsKKyAgICB9CisgICAgZm9yICg7IHQgPCA0MDsgdCsrKSB7CisgICAgICAgIFRFTVAgPSBTNShBKSArIGYxKEIsIEMsIEQpICsgRSArIFdbdF0gKyBTSEFfSzE7CisgICAgICAgIEUgPSBEOworICAgICAgICBEID0gQzsKKyAgICAgICAgQyA9IFMzMChCKTsKKyAgICAgICAgQiA9IEE7CisgICAgICAgIEEgPSBURU1QOworICAgIH0KKyAgICBmb3IgKDsgdCA8IDYwOyB0KyspIHsKKyAgICAgICAgVEVNUCA9IFM1KEEpICsgZjIoQiwgQywgRCkgKyBFICsgV1t0XSArIFNIQV9LMjsKKyAgICAgICAgRSA9IEQ7CisgICAgICAgIEQgPSBDOworICAgICAgICBDID0gUzMwKEIpOworICAgICAgICBCID0gQTsKKyAgICAgICAgQSA9IFRFTVA7CisgICAgfQorICAgIGZvciAoOyB0IDwgODA7IHQrKykgeworICAgICAgICBURU1QID0gUzUoQSkgKyBmMyhCLCBDLCBEKSArIEUgKyBXW3RdICsgU0hBX0szOworICAgICAgICBFID0gRDsKKyAgICAgICAgRCA9IEM7CisgICAgICAgIEMgPSBTMzAoQik7CisgICAgICAgIEIgPSBBOworICAgICAgICBBID0gVEVNUDsKKyAgICB9CisKKyAgICBoYXNoX3ZhbHVlWzBdID0gSDAgKyBBOworICAgIGhhc2hfdmFsdWVbMV0gPSBIMSArIEI7CisgICAgaGFzaF92YWx1ZVsyXSA9IEgyICsgQzsKKyAgICBoYXNoX3ZhbHVlWzNdID0gSDMgKyBEOworICAgIGhhc2hfdmFsdWVbNF0gPSBINCArIEU7CisKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgc3J0cF9zaGExX2luaXQoc3J0cF9zaGExX2N0eF90ICpjdHgpCit7CisgICAgLyogaW5pdGlhbGl6ZSBzdGF0ZSB2ZWN0b3IgKi8KKyAgICBjdHgtPkhbMF0gPSAweDY3NDUyMzAxOworICAgIGN0eC0+SFsxXSA9IDB4ZWZjZGFiODk7CisgICAgY3R4LT5IWzJdID0gMHg5OGJhZGNmZTsKKyAgICBjdHgtPkhbM10gPSAweDEwMzI1NDc2OworICAgIGN0eC0+SFs0XSA9IDB4YzNkMmUxZjA7CisKKyAgICAvKiBpbmRpY2F0ZSB0aGF0IG1lc3NhZ2UgYnVmZmVyIGlzIGVtcHR5ICovCisgICAgY3R4LT5vY3RldHNfaW5fYnVmZmVyID0gMDsKKworICAgIC8qIHJlc2V0IG1lc3NhZ2UgYml0LWNvdW50IHRvIHplcm8gKi8KKyAgICBjdHgtPm51bV9iaXRzX2luX21zZyA9IDA7Cit9CisKK3ZvaWQgc3J0cF9zaGExX3VwZGF0ZShzcnRwX3NoYTFfY3R4X3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICptc2csCisgICAgICAgICAgICAgICAgICAgICAgaW50IG9jdGV0c19pbl9tc2cpCit7CisgICAgaW50IGk7CisgICAgdWludDhfdCAqYnVmID0gKHVpbnQ4X3QgKiljdHgtPk07CisKKyAgICAvKiB1cGRhdGUgbWVzc2FnZSBiaXQtY291bnQgKi8KKyAgICBjdHgtPm51bV9iaXRzX2luX21zZyArPSBvY3RldHNfaW5fbXNnICogODsKKworICAgIC8qIGxvb3Agb3ZlciAxNi13b3JkIGJsb2NrcyBvZiBNICovCisgICAgd2hpbGUgKG9jdGV0c19pbl9tc2cgPiAwKSB7CisgICAgICAgIGlmIChvY3RldHNfaW5fbXNnICsgY3R4LT5vY3RldHNfaW5fYnVmZmVyID49IDY0KSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogY29weSB3b3JkcyBvZiBNIGludG8gbXNnIGJ1ZmZlciB1bnRpbCB0aGF0IGJ1ZmZlciBpcyBmdWxsLAorICAgICAgICAgICAgICogY29udmVydGluZyB0aGVtIGludG8gaG9zdCBieXRlIG9yZGVyIGFzIG5lZWRlZAorICAgICAgICAgICAgICovCisgICAgICAgICAgICBvY3RldHNfaW5fbXNnIC09ICg2NCAtIGN0eC0+b2N0ZXRzX2luX2J1ZmZlcik7CisgICAgICAgICAgICBmb3IgKGkgPSBjdHgtPm9jdGV0c19pbl9idWZmZXI7IGkgPCA2NDsgaSsrKSB7CisgICAgICAgICAgICAgICAgYnVmW2ldID0gKm1zZysrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY3R4LT5vY3RldHNfaW5fYnVmZmVyID0gMDsKKworICAgICAgICAgICAgLyogcHJvY2VzcyBhIHdob2xlIGJsb2NrICovCisKKyAgICAgICAgICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX3NoYTEsICIodXBkYXRlKSBydW5uaW5nIHNydHBfc2hhMV9jb3JlKCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICAgICAgICAgIHNydHBfc2hhMV9jb3JlKGN0eC0+TSwgY3R4LT5IKTsKKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVidWdfcHJpbnQoc3J0cF9tb2Rfc2hhMSwgIih1cGRhdGUpIG5vdCBydW5uaW5nIHNydHBfc2hhMV9jb3JlKCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICAgICAgICAgIGZvciAoaSA9IGN0eC0+b2N0ZXRzX2luX2J1ZmZlcjsKKyAgICAgICAgICAgICAgICAgaSA8IChjdHgtPm9jdGV0c19pbl9idWZmZXIgKyBvY3RldHNfaW5fbXNnKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgYnVmW2ldID0gKm1zZysrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY3R4LT5vY3RldHNfaW5fYnVmZmVyICs9IG9jdGV0c19pbl9tc2c7CisgICAgICAgICAgICBvY3RldHNfaW5fbXNnID0gMDsKKyAgICAgICAgfQorICAgIH0KIH0KIAogLyoKLSAqIHNoYTFfZmluYWwoY3R4LCBvdXRwdXQpIGNvbXB1dGVzIHRoZSByZXN1bHQgZm9yIGN0eCBhbmQgY29waWVzIGl0CisgKiBzcnRwX3NoYTFfZmluYWwoY3R4LCBvdXRwdXQpIGNvbXB1dGVzIHRoZSByZXN1bHQgZm9yIGN0eCBhbmQgY29waWVzIGl0CiAgKiBpbnRvIHRoZSB0d2VudHkgb2N0ZXRzIGxvY2F0ZWQgYXQgKm91dHB1dAogICovCiAKLXZvaWQKLXNoYTFfZmluYWwoc2hhMV9jdHhfdCAqY3R4LCB1aW50MzJfdCAqb3V0cHV0KSB7Ci0gIHVpbnQzMl90IEEsIEIsIEMsIEQsIEUsIFRFTVA7Ci0gIHVpbnQzMl90IFdbODBdOyAgCi0gIGludCBpLCB0Owordm9pZCBzcnRwX3NoYTFfZmluYWwoc3J0cF9zaGExX2N0eF90ICpjdHgsIHVpbnQzMl90ICpvdXRwdXQpCit7CisgICAgdWludDMyX3QgQSwgQiwgQywgRCwgRSwgVEVNUDsKKyAgICB1aW50MzJfdCBXWzgwXTsKKyAgICBpbnQgaSwgdDsKIAotICAvKgotICAgKiBwcm9jZXNzIHRoZSByZW1haW5pbmcgb2N0ZXRzX2luX2J1ZmZlciwgcGFkZGluZyBhbmQgdGVybWluYXRpbmcgYXMKLSAgICogbmVjZXNzYXJ5Ci0gICAqLwotICB7Ci0gICAgaW50IHRhaWwgPSBjdHgtPm9jdGV0c19pbl9idWZmZXIgJSA0OwotICAgIAotICAgIC8qIGNvcHkveG9yIG1lc3NhZ2UgaW50byBhcnJheSAqLwotICAgIGZvciAoaT0wOyBpIDwgKGN0eC0+b2N0ZXRzX2luX2J1ZmZlciszKS80OyBpKyspIAotICAgICAgV1tpXSAgPSBic3dhcF8zMihjdHgtPk1baV0pOyAgLyogd2h5IG5vIGJzd2FwXzMyKCkgaGVyZT8gICAtIERBTSAqLwotCi0gICAgLyogc2V0IHRoZSBoaWdoIGJpdCBvZiB0aGUgb2N0ZXQgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBtZXNzYWdlICovCi0gICAgc3dpdGNoICh0YWlsKSB7Ci0gICAgY2FzZSAoMyk6Ci0gICAgICBXW2ktMV0gPSAoYnN3YXBfMzIoY3R4LT5NW2ktMV0pICYgMHhmZmZmZmYwMCkgfCAweDgwOwotICAgICAgV1tpXSA9IDB4MDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgKDIpOiAgICAgIAotICAgICAgV1tpLTFdID0gKGJzd2FwXzMyKGN0eC0+TVtpLTFdKSAmIDB4ZmZmZjAwMDApIHwgMHg4MDAwOwotICAgICAgV1tpXSA9IDB4MDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgKDEpOgotICAgICAgV1tpLTFdID0gKGJzd2FwXzMyKGN0eC0+TVtpLTFdKSAmIDB4ZmYwMDAwMDApIHwgMHg4MDAwMDA7Ci0gICAgICBXW2ldID0gMHgwOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoMCk6Ci0gICAgICBXW2ldID0gMHg4MDAwMDAwMDsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICAvKiB6ZXJvaXplIHJlbWFpbmluZyB3b3JkcyAqLwotICAgIGZvciAoaSsrICAgOyBpIDwgMTU7IGkrKykKLSAgICAgIFdbaV0gPSAweDA7Ci0KLSAgICAvKiAKLSAgICAgKiBpZiB0aGVyZSBpcyByb29tIGF0IHRoZSBlbmQgb2YgdGhlIHdvcmQgYXJyYXksIHRoZW4gc2V0IHRoZQotICAgICAqIGxhc3Qgd29yZCB0byB0aGUgYml0LWxlbmd0aCBvZiB0aGUgbWVzc2FnZTsgb3RoZXJ3aXNlLCBzZXQgdGhhdAotICAgICAqIHdvcmQgdG8gemVybyBhbmQgdGhlbiB3ZSBuZWVkIHRvIGRvIG9uZSBtb3JlIHJ1biBvZiB0aGUKLSAgICAgKiBjb21wcmVzc2lvbiBhbGdvLgorICAgIC8qCisgICAgICogcHJvY2VzcyB0aGUgcmVtYWluaW5nIG9jdGV0c19pbl9idWZmZXIsIHBhZGRpbmcgYW5kIHRlcm1pbmF0aW5nIGFzCisgICAgICogbmVjZXNzYXJ5CiAgICAgICovCi0gICAgaWYgKGN0eC0+b2N0ZXRzX2luX2J1ZmZlciA8IDU2KSAKLSAgICAgIFdbMTVdID0gY3R4LT5udW1fYml0c19pbl9tc2c7Ci0gICAgZWxzZQotICAgICAgV1sxNV0gPSAweDA7CisgICAgeworICAgICAgICBpbnQgdGFpbCA9IGN0eC0+b2N0ZXRzX2luX2J1ZmZlciAlIDQ7CiAKLSAgICAvKiBwcm9jZXNzIHRoZSB3b3JkIGFycmF5ICovCi0gICAgZm9yICh0PTE2OyB0IDwgODA7IHQrKykgewotICAgICAgVEVNUCA9IFdbdC0zXSBeIFdbdC04XSBeIFdbdC0xNF0gXiBXW3QtMTZdOwotICAgICAgV1t0XSA9IFMxKFRFTVApOworICAgICAgICAvKiBjb3B5L3hvciBtZXNzYWdlIGludG8gYXJyYXkgKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IChjdHgtPm9jdGV0c19pbl9idWZmZXIgKyAzKSAvIDQ7IGkrKykgeworICAgICAgICAgICAgV1tpXSA9IGJlMzJfdG9fY3B1KGN0eC0+TVtpXSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBzZXQgdGhlIGhpZ2ggYml0IG9mIHRoZSBvY3RldCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIG1lc3NhZ2UgKi8KKyAgICAgICAgc3dpdGNoICh0YWlsKSB7CisgICAgICAgIGNhc2UgKDMpOgorICAgICAgICAgICAgV1tpIC0gMV0gPSAoYmUzMl90b19jcHUoY3R4LT5NW2kgLSAxXSkgJiAweGZmZmZmZjAwKSB8IDB4ODA7CisgICAgICAgICAgICBXW2ldID0gMHgwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgKDIpOgorICAgICAgICAgICAgV1tpIC0gMV0gPSAoYmUzMl90b19jcHUoY3R4LT5NW2kgLSAxXSkgJiAweGZmZmYwMDAwKSB8IDB4ODAwMDsKKyAgICAgICAgICAgIFdbaV0gPSAweDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAoMSk6CisgICAgICAgICAgICBXW2kgLSAxXSA9IChiZTMyX3RvX2NwdShjdHgtPk1baSAtIDFdKSAmIDB4ZmYwMDAwMDApIHwgMHg4MDAwMDA7CisgICAgICAgICAgICBXW2ldID0gMHgwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgKDApOgorICAgICAgICAgICAgV1tpXSA9IDB4ODAwMDAwMDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHplcm9pemUgcmVtYWluaW5nIHdvcmRzICovCisgICAgICAgIGZvciAoaSsrOyBpIDwgMTU7IGkrKykgeworICAgICAgICAgICAgV1tpXSA9IDB4MDsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIGlmIHRoZXJlIGlzIHJvb20gYXQgdGhlIGVuZCBvZiB0aGUgd29yZCBhcnJheSwgdGhlbiBzZXQgdGhlCisgICAgICAgICAqIGxhc3Qgd29yZCB0byB0aGUgYml0LWxlbmd0aCBvZiB0aGUgbWVzc2FnZTsgb3RoZXJ3aXNlLCBzZXQgdGhhdAorICAgICAgICAgKiB3b3JkIHRvIHplcm8gYW5kIHRoZW4gd2UgbmVlZCB0byBkbyBvbmUgbW9yZSBydW4gb2YgdGhlCisgICAgICAgICAqIGNvbXByZXNzaW9uIGFsZ28uCisgICAgICAgICAqLworICAgICAgICBpZiAoY3R4LT5vY3RldHNfaW5fYnVmZmVyIDwgNTYpIHsKKyAgICAgICAgICAgIFdbMTVdID0gY3R4LT5udW1fYml0c19pbl9tc2c7CisgICAgICAgIH0gZWxzZSBpZiAoY3R4LT5vY3RldHNfaW5fYnVmZmVyIDwgNjApIHsKKyAgICAgICAgICAgIFdbMTVdID0gMHgwOworICAgICAgICB9CisKKyAgICAgICAgLyogcHJvY2VzcyB0aGUgd29yZCBhcnJheSAqLworICAgICAgICBmb3IgKHQgPSAxNjsgdCA8IDgwOyB0KyspIHsKKyAgICAgICAgICAgIFRFTVAgPSBXW3QgLSAzXSBeIFdbdCAtIDhdIF4gV1t0IC0gMTRdIF4gV1t0IC0gMTZdOworICAgICAgICAgICAgV1t0XSA9IFMxKFRFTVApOworICAgICAgICB9CisKKyAgICAgICAgQSA9IGN0eC0+SFswXTsKKyAgICAgICAgQiA9IGN0eC0+SFsxXTsKKyAgICAgICAgQyA9IGN0eC0+SFsyXTsKKyAgICAgICAgRCA9IGN0eC0+SFszXTsKKyAgICAgICAgRSA9IGN0eC0+SFs0XTsKKworICAgICAgICBmb3IgKHQgPSAwOyB0IDwgMjA7IHQrKykgeworICAgICAgICAgICAgVEVNUCA9IFM1KEEpICsgZjAoQiwgQywgRCkgKyBFICsgV1t0XSArIFNIQV9LMDsKKyAgICAgICAgICAgIEUgPSBEOworICAgICAgICAgICAgRCA9IEM7CisgICAgICAgICAgICBDID0gUzMwKEIpOworICAgICAgICAgICAgQiA9IEE7CisgICAgICAgICAgICBBID0gVEVNUDsKKyAgICAgICAgfQorICAgICAgICBmb3IgKDsgdCA8IDQwOyB0KyspIHsKKyAgICAgICAgICAgIFRFTVAgPSBTNShBKSArIGYxKEIsIEMsIEQpICsgRSArIFdbdF0gKyBTSEFfSzE7CisgICAgICAgICAgICBFID0gRDsKKyAgICAgICAgICAgIEQgPSBDOworICAgICAgICAgICAgQyA9IFMzMChCKTsKKyAgICAgICAgICAgIEIgPSBBOworICAgICAgICAgICAgQSA9IFRFTVA7CisgICAgICAgIH0KKyAgICAgICAgZm9yICg7IHQgPCA2MDsgdCsrKSB7CisgICAgICAgICAgICBURU1QID0gUzUoQSkgKyBmMihCLCBDLCBEKSArIEUgKyBXW3RdICsgU0hBX0syOworICAgICAgICAgICAgRSA9IEQ7CisgICAgICAgICAgICBEID0gQzsKKyAgICAgICAgICAgIEMgPSBTMzAoQik7CisgICAgICAgICAgICBCID0gQTsKKyAgICAgICAgICAgIEEgPSBURU1QOworICAgICAgICB9CisgICAgICAgIGZvciAoOyB0IDwgODA7IHQrKykgeworICAgICAgICAgICAgVEVNUCA9IFM1KEEpICsgZjMoQiwgQywgRCkgKyBFICsgV1t0XSArIFNIQV9LMzsKKyAgICAgICAgICAgIEUgPSBEOworICAgICAgICAgICAgRCA9IEM7CisgICAgICAgICAgICBDID0gUzMwKEIpOworICAgICAgICAgICAgQiA9IEE7CisgICAgICAgICAgICBBID0gVEVNUDsKKyAgICAgICAgfQorCisgICAgICAgIGN0eC0+SFswXSArPSBBOworICAgICAgICBjdHgtPkhbMV0gKz0gQjsKKyAgICAgICAgY3R4LT5IWzJdICs9IEM7CisgICAgICAgIGN0eC0+SFszXSArPSBEOworICAgICAgICBjdHgtPkhbNF0gKz0gRTsKICAgICB9CiAKLSAgICBBID0gY3R4LT5IWzBdOyAKLSAgICBCID0gY3R4LT5IWzFdOyAKLSAgICBDID0gY3R4LT5IWzJdOyAKLSAgICBEID0gY3R4LT5IWzNdOyAKLSAgICBFID0gY3R4LT5IWzRdOworICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX3NoYTEsICIoZmluYWwpIHJ1bm5pbmcgc3J0cF9zaGExX2NvcmUoKSIsIE5VTEwpOwogCi0gICAgZm9yICh0PTA7IHQgPCAyMDsgdCsrKSB7Ci0gICAgICBURU1QID0gUzUoQSkgKyBmMChCLEMsRCkgKyBFICsgV1t0XSArIFNIQV9LMDsKLSAgICAgIEUgPSBEOyBEID0gQzsgQyA9IFMzMChCKTsgQiA9IEE7IEEgPSBURU1QOwotICAgIH0KLSAgICBmb3IgKCAgIDsgdCA8IDQwOyB0KyspIHsKLSAgICAgIFRFTVAgPSBTNShBKSArIGYxKEIsQyxEKSArIEUgKyBXW3RdICsgU0hBX0sxOwotICAgICAgRSA9IEQ7IEQgPSBDOyBDID0gUzMwKEIpOyBCID0gQTsgQSA9IFRFTVA7Ci0gICAgfQotICAgIGZvciAoICAgOyB0IDwgNjA7IHQrKykgewotICAgICAgVEVNUCA9IFM1KEEpICsgZjIoQixDLEQpICsgRSArIFdbdF0gKyBTSEFfSzI7Ci0gICAgICBFID0gRDsgRCA9IEM7IEMgPSBTMzAoQik7IEIgPSBBOyBBID0gVEVNUDsKLSAgICB9Ci0gICAgZm9yICggICA7IHQgPCA4MDsgdCsrKSB7Ci0gICAgICBURU1QID0gUzUoQSkgKyBmMyhCLEMsRCkgKyBFICsgV1t0XSArIFNIQV9LMzsKLSAgICAgIEUgPSBEOyBEID0gQzsgQyA9IFMzMChCKTsgQiA9IEE7IEEgPSBURU1QOworICAgIGlmIChjdHgtPm9jdGV0c19pbl9idWZmZXIgPj0gNTYpIHsKKyAgICAgICAgZGVidWdfcHJpbnQoc3J0cF9tb2Rfc2hhMSwgIihmaW5hbCkgcnVubmluZyBzcnRwX3NoYTFfY29yZSgpIGFnYWluIiwKKyAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICAgICAgLyogd2UgbmVlZCB0byBkbyBvbmUgZmluYWwgcnVuIG9mIHRoZSBjb21wcmVzc2lvbiBhbGdvICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogc2V0IGluaXRpYWwgcGFydCBvZiB3b3JkIGFycmF5IHRvIHplcm9zLCBhbmQgc2V0IHRoZQorICAgICAgICAgKiBmaW5hbCBwYXJ0IHRvIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0aGUgbWVzc2FnZQorICAgICAgICAgKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDE1OyBpKyspIHsKKyAgICAgICAgICAgIFdbaV0gPSAweDA7CisgICAgICAgIH0KKyAgICAgICAgV1sxNV0gPSBjdHgtPm51bV9iaXRzX2luX21zZzsKKworICAgICAgICAvKiBwcm9jZXNzIHRoZSB3b3JkIGFycmF5ICovCisgICAgICAgIGZvciAodCA9IDE2OyB0IDwgODA7IHQrKykgeworICAgICAgICAgICAgVEVNUCA9IFdbdCAtIDNdIF4gV1t0IC0gOF0gXiBXW3QgLSAxNF0gXiBXW3QgLSAxNl07CisgICAgICAgICAgICBXW3RdID0gUzEoVEVNUCk7CisgICAgICAgIH0KKworICAgICAgICBBID0gY3R4LT5IWzBdOworICAgICAgICBCID0gY3R4LT5IWzFdOworICAgICAgICBDID0gY3R4LT5IWzJdOworICAgICAgICBEID0gY3R4LT5IWzNdOworICAgICAgICBFID0gY3R4LT5IWzRdOworCisgICAgICAgIGZvciAodCA9IDA7IHQgPCAyMDsgdCsrKSB7CisgICAgICAgICAgICBURU1QID0gUzUoQSkgKyBmMChCLCBDLCBEKSArIEUgKyBXW3RdICsgU0hBX0swOworICAgICAgICAgICAgRSA9IEQ7CisgICAgICAgICAgICBEID0gQzsKKyAgICAgICAgICAgIEMgPSBTMzAoQik7CisgICAgICAgICAgICBCID0gQTsKKyAgICAgICAgICAgIEEgPSBURU1QOworICAgICAgICB9CisgICAgICAgIGZvciAoOyB0IDwgNDA7IHQrKykgeworICAgICAgICAgICAgVEVNUCA9IFM1KEEpICsgZjEoQiwgQywgRCkgKyBFICsgV1t0XSArIFNIQV9LMTsKKyAgICAgICAgICAgIEUgPSBEOworICAgICAgICAgICAgRCA9IEM7CisgICAgICAgICAgICBDID0gUzMwKEIpOworICAgICAgICAgICAgQiA9IEE7CisgICAgICAgICAgICBBID0gVEVNUDsKKyAgICAgICAgfQorICAgICAgICBmb3IgKDsgdCA8IDYwOyB0KyspIHsKKyAgICAgICAgICAgIFRFTVAgPSBTNShBKSArIGYyKEIsIEMsIEQpICsgRSArIFdbdF0gKyBTSEFfSzI7CisgICAgICAgICAgICBFID0gRDsKKyAgICAgICAgICAgIEQgPSBDOworICAgICAgICAgICAgQyA9IFMzMChCKTsKKyAgICAgICAgICAgIEIgPSBBOworICAgICAgICAgICAgQSA9IFRFTVA7CisgICAgICAgIH0KKyAgICAgICAgZm9yICg7IHQgPCA4MDsgdCsrKSB7CisgICAgICAgICAgICBURU1QID0gUzUoQSkgKyBmMyhCLCBDLCBEKSArIEUgKyBXW3RdICsgU0hBX0szOworICAgICAgICAgICAgRSA9IEQ7CisgICAgICAgICAgICBEID0gQzsKKyAgICAgICAgICAgIEMgPSBTMzAoQik7CisgICAgICAgICAgICBCID0gQTsKKyAgICAgICAgICAgIEEgPSBURU1QOworICAgICAgICB9CisKKyAgICAgICAgY3R4LT5IWzBdICs9IEE7CisgICAgICAgIGN0eC0+SFsxXSArPSBCOworICAgICAgICBjdHgtPkhbMl0gKz0gQzsKKyAgICAgICAgY3R4LT5IWzNdICs9IEQ7CisgICAgICAgIGN0eC0+SFs0XSArPSBFOwogICAgIH0KIAotICAgIGN0eC0+SFswXSArPSBBOwotICAgIGN0eC0+SFsxXSArPSBCOwotICAgIGN0eC0+SFsyXSArPSBDOwotICAgIGN0eC0+SFszXSArPSBEOwotICAgIGN0eC0+SFs0XSArPSBFOworICAgIC8qIGNvcHkgcmVzdWx0IGludG8gb3V0cHV0IGJ1ZmZlciAqLworICAgIG91dHB1dFswXSA9IGJlMzJfdG9fY3B1KGN0eC0+SFswXSk7CisgICAgb3V0cHV0WzFdID0gYmUzMl90b19jcHUoY3R4LT5IWzFdKTsKKyAgICBvdXRwdXRbMl0gPSBiZTMyX3RvX2NwdShjdHgtPkhbMl0pOworICAgIG91dHB1dFszXSA9IGJlMzJfdG9fY3B1KGN0eC0+SFszXSk7CisgICAgb3V0cHV0WzRdID0gYmUzMl90b19jcHUoY3R4LT5IWzRdKTsKIAotICB9CisgICAgLyogaW5kaWNhdGUgdGhhdCBtZXNzYWdlIGJ1ZmZlciBpbiBjb250ZXh0IGlzIGVtcHR5ICovCisgICAgY3R4LT5vY3RldHNfaW5fYnVmZmVyID0gMDsKIAotICBkZWJ1Z19wcmludChtb2Rfc2hhMSwgIihmaW5hbCkgcnVubmluZyBzaGExX2NvcmUoKSIsIE5VTEwpOwotCi0gIGlmIChjdHgtPm9jdGV0c19pbl9idWZmZXIgPj0gNTYpIHsKLQotICAgIGRlYnVnX3ByaW50KG1vZF9zaGExLCAiKGZpbmFsKSBydW5uaW5nIHNoYTFfY29yZSgpIGFnYWluIiwgTlVMTCk7Ci0KLSAgICAvKiB3ZSBuZWVkIHRvIGRvIG9uZSBmaW5hbCBydW4gb2YgdGhlIGNvbXByZXNzaW9uIGFsZ28gKi8KLQotICAgIC8qIAotICAgICAqIHNldCBpbml0aWFsIHBhcnQgb2Ygd29yZCBhcnJheSB0byB6ZXJvcywgYW5kIHNldCB0aGUgCi0gICAgICogZmluYWwgcGFydCB0byB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gdGhlIG1lc3NhZ2UKLSAgICAgKi8KLSAgICBmb3IgKGk9MDsgaSA8IDE1OyBpKyspCi0gICAgICBXW2ldID0gMHgwOwotICAgIFdbMTVdID0gY3R4LT5udW1fYml0c19pbl9tc2c7Ci0KLSAgICAvKiBwcm9jZXNzIHRoZSB3b3JkIGFycmF5ICovCi0gICAgZm9yICh0PTE2OyB0IDwgODA7IHQrKykgewotICAgICAgVEVNUCA9IFdbdC0zXSBeIFdbdC04XSBeIFdbdC0xNF0gXiBXW3QtMTZdOwotICAgICAgV1t0XSA9IFMxKFRFTVApOwotICAgIH0KLQotICAgIEEgPSBjdHgtPkhbMF07IAotICAgIEIgPSBjdHgtPkhbMV07IAotICAgIEMgPSBjdHgtPkhbMl07IAotICAgIEQgPSBjdHgtPkhbM107IAotICAgIEUgPSBjdHgtPkhbNF07Ci0KLSAgICBmb3IgKHQ9MDsgdCA8IDIwOyB0KyspIHsKLSAgICAgIFRFTVAgPSBTNShBKSArIGYwKEIsQyxEKSArIEUgKyBXW3RdICsgU0hBX0swOwotICAgICAgRSA9IEQ7IEQgPSBDOyBDID0gUzMwKEIpOyBCID0gQTsgQSA9IFRFTVA7Ci0gICAgfQotICAgIGZvciAoICAgOyB0IDwgNDA7IHQrKykgewotICAgICAgVEVNUCA9IFM1KEEpICsgZjEoQixDLEQpICsgRSArIFdbdF0gKyBTSEFfSzE7Ci0gICAgICBFID0gRDsgRCA9IEM7IEMgPSBTMzAoQik7IEIgPSBBOyBBID0gVEVNUDsKLSAgICB9Ci0gICAgZm9yICggICA7IHQgPCA2MDsgdCsrKSB7Ci0gICAgICBURU1QID0gUzUoQSkgKyBmMihCLEMsRCkgKyBFICsgV1t0XSArIFNIQV9LMjsKLSAgICAgIEUgPSBEOyBEID0gQzsgQyA9IFMzMChCKTsgQiA9IEE7IEEgPSBURU1QOwotICAgIH0KLSAgICBmb3IgKCAgIDsgdCA8IDgwOyB0KyspIHsKLSAgICAgIFRFTVAgPSBTNShBKSArIGYzKEIsQyxEKSArIEUgKyBXW3RdICsgU0hBX0szOwotICAgICAgRSA9IEQ7IEQgPSBDOyBDID0gUzMwKEIpOyBCID0gQTsgQSA9IFRFTVA7Ci0gICAgfQotCi0gICAgY3R4LT5IWzBdICs9IEE7Ci0gICAgY3R4LT5IWzFdICs9IEI7Ci0gICAgY3R4LT5IWzJdICs9IEM7Ci0gICAgY3R4LT5IWzNdICs9IEQ7Ci0gICAgY3R4LT5IWzRdICs9IEU7Ci0gIH0KLQotICAvKiBjb3B5IHJlc3VsdCBpbnRvIG91dHB1dCBidWZmZXIgKi8KLSAgb3V0cHV0WzBdID0gYnN3YXBfMzIoY3R4LT5IWzBdKTsKLSAgb3V0cHV0WzFdID0gYnN3YXBfMzIoY3R4LT5IWzFdKTsKLSAgb3V0cHV0WzJdID0gYnN3YXBfMzIoY3R4LT5IWzJdKTsKLSAgb3V0cHV0WzNdID0gYnN3YXBfMzIoY3R4LT5IWzNdKTsKLSAgb3V0cHV0WzRdID0gYnN3YXBfMzIoY3R4LT5IWzRdKTsKLQotICAvKiBpbmRpY2F0ZSB0aGF0IG1lc3NhZ2UgYnVmZmVyIGluIGNvbnRleHQgaXMgZW1wdHkgKi8KLSAgY3R4LT5vY3RldHNfaW5fYnVmZmVyID0gMDsKLQotICByZXR1cm47CisgICAgcmV0dXJuOwogfQotCi0KZGlmZiAtLWdpdCBhL2NyeXB0by9pbmNsdWRlL2Flcy5oIGIvY3J5cHRvL2luY2x1ZGUvYWVzLmgKaW5kZXggMTI2Zjk3MC4uNzc5YzNhYyAxMDA2NDQKLS0tIGEvY3J5cHRvL2luY2x1ZGUvYWVzLmgKKysrIGIvY3J5cHRvL2luY2x1ZGUvYWVzLmgKQEAgLTgsMjYgKzgsMjYgQEAKICAqLwogCiAvKgotICoJCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSwgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDE3LCBDaXNjbyBTeXN0ZW1zLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwogICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKICAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCisgKgogICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAogICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKKyAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKQEAgLTQzLDUwICs0Myw0MSBAQAogICoKICAqLwogCi0jaWZuZGVmIF9BRVNfSAotI2RlZmluZSBfQUVTX0gKLQotI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmbmRlZiBBRVNfSAorI2RlZmluZSBBRVNfSAogCiAjaW5jbHVkZSAiZGF0YXR5cGVzLmgiCi0jaW5jbHVkZSAiZ2YyXzguaCIKKyNpbmNsdWRlICJlcnIuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgogCiAvKiBhZXMgaW50ZXJuYWxzICovCiAKLXR5cGVkZWYgdjEyOF90IGFlc19leHBhbmRlZF9rZXlfdFsxMV07Cit0eXBlZGVmIHN0cnVjdCB7CisgICAgdjEyOF90IHJvdW5kWzE1XTsKKyAgICBpbnQgbnVtX3JvdW5kczsKK30gc3J0cF9hZXNfZXhwYW5kZWRfa2V5X3Q7CiAKLXZvaWQKLWFlc19leHBhbmRfZW5jcnlwdGlvbl9rZXkodjEyOF90IGtleSwgCi0JCQkgIGFlc19leHBhbmRlZF9rZXlfdCBleHBhbmRlZF9rZXkpOworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9hZXNfZXhwYW5kX2VuY3J5cHRpb25fa2V5KAorICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICBpbnQga2V5X2xlbiwKKyAgICBzcnRwX2Flc19leHBhbmRlZF9rZXlfdCAqZXhwYW5kZWRfa2V5KTsKIAotaW5saW5lIHZvaWQKLWFlc19leHBhbmRfZGVjcnlwdGlvbl9rZXkoY29uc3QgdjEyOF90IGtleSwgCi0JCQkgIGFlc19leHBhbmRlZF9rZXlfdCBleHBhbmRlZF9rZXkpOworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9hZXNfZXhwYW5kX2RlY3J5cHRpb25fa2V5KAorICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICBpbnQga2V5X2xlbiwKKyAgICBzcnRwX2Flc19leHBhbmRlZF9rZXlfdCAqZXhwYW5kZWRfa2V5KTsKIAotdm9pZAotYWVzX2VuY3J5cHQodjEyOF90ICpwbGFpbnRleHQsIGNvbnN0IGFlc19leHBhbmRlZF9rZXlfdCBleHBfa2V5KTsKK3ZvaWQgc3J0cF9hZXNfZW5jcnlwdCh2MTI4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcnRwX2Flc19leHBhbmRlZF9rZXlfdCAqZXhwX2tleSk7CiAKLXZvaWQKLWFlc19kZWNyeXB0KHYxMjhfdCAqcGxhaW50ZXh0LCBjb25zdCBhZXNfZXhwYW5kZWRfa2V5X3QgZXhwX2tleSk7Cit2b2lkIHNydHBfYWVzX2RlY3J5cHQodjEyOF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3J0cF9hZXNfZXhwYW5kZWRfa2V5X3QgKmV4cF9rZXkpOwogCi0vKgotICogZ2YyXzhfc2hpZnQoeCkgcmV0dXJucyB0aGUgbmV4dCBnZjJfOCB2YWx1ZSBpbiB0aGUgY3ljbGljCi0gKiByZXByZXNlbnRhdGlvbiBvZiB0aGF0IGZpZWxkCi0gKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCiAKLWdmMl84Ci1nZjJfOF9zaGlmdChvY3RldF90IGlucHV0KTsKLQotI2lmIDAKLS8qCi0gKiBpbnRlcm5hbCBmdW5jdGlvbnMgCi0gKi8KLQotdm9pZAotYWVzX2luaXRfc2JveCh2b2lkKTsKLQotdm9pZAotYWVzX2NvbXB1dGVfdGFibGVzKHZvaWQpOwotI2VuZGlmIAotCi0jZW5kaWYgLyogX0FFU19IICovCisjZW5kaWYgLyogQUVTX0ggKi8KZGlmZiAtLWdpdCBhL2NyeXB0by9pbmNsdWRlL2Flc19jYmMuaCBiL2NyeXB0by9pbmNsdWRlL2Flc19jYmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ1ZDYwMS4uMDAwMDAwMAotLS0gYS9jcnlwdG8vaW5jbHVkZS9hZXNfY2JjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKgotICogYWVzX2NiYy5oCi0gKgotICogSGVhZGVyIGZvciBBRVMgQ2lwaGVyIEJsb2JrIENoYWluaW5nIE1vZGUuCi0gKgotICogRGF2aWQgQS4gTWNHcmV3Ci0gKiBDaXNjbyBTeXN0ZW1zLCBJbmMuCi0gKgotICovCi0KLSNpZm5kZWYgQUVTX0NCQ19ICi0jZGVmaW5lIEFFU19DQkNfSAotCi0jaW5jbHVkZSAiYWVzLmgiCi0jaW5jbHVkZSAiY2lwaGVyLmgiCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgdjEyOF90ICAgc3RhdGU7ICAgICAgICAgICAgICAgICAgLyogY2lwaGVyIGNoYWluaW5nIHN0YXRlICAgICAgICAgICAgKi8KLSAgdjEyOF90ICAgcHJldmlvdXM7ICAgICAgICAgICAgICAgLyogcHJldmlvdXMgY2lwaGVydGV4dCBibG9jayAgICAgICAgKi8KLSAgYWVzX2V4cGFuZGVkX2tleV90IGV4cGFuZGVkX2tleTsgLyogdGhlIGNpcGhlciBrZXkgICAgICAgICAgICAgICAgICAgKi8KLX0gYWVzX2NiY19jdHhfdDsKLQotZXJyX3N0YXR1c190Ci1hZXNfY2JjX3NldF9rZXkoYWVzX2NiY19jdHhfdCAqYywKLQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2V5KTsgCi0KLWVycl9zdGF0dXNfdAotYWVzX2NiY19lbmNyeXB0KGFlc19jYmNfY3R4X3QgKmMsIAotCQl1bnNpZ25lZCBjaGFyICpidWYsIAotCQl1bnNpZ25lZCBpbnQgICpieXRlc19pbl9kYXRhKTsKLQotZXJyX3N0YXR1c190Ci1hZXNfY2JjX2NvbnRleHRfaW5pdChhZXNfY2JjX2N0eF90ICpjLCBjb25zdCBvY3RldF90ICprZXksIAotCQkgICAgIGNpcGhlcl9kaXJlY3Rpb25fdCBkaXIpOwotCi1lcnJfc3RhdHVzX3QKLWFlc19jYmNfc2V0X2l2KGFlc19jYmNfY3R4X3QgKmMsIHZvaWQgKml2KTsKLQotZXJyX3N0YXR1c190Ci1hZXNfY2JjX25pc3RfZW5jcnlwdChhZXNfY2JjX2N0eF90ICpjLAotCQkgICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsIAotCQkgICAgIHVuc2lnbmVkIGludCAqYnl0ZXNfaW5fZGF0YSk7Ci0KLWVycl9zdGF0dXNfdAotYWVzX2NiY19uaXN0X2RlY3J5cHQoYWVzX2NiY19jdHhfdCAqYywKLQkJICAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCAKLQkJICAgICB1bnNpZ25lZCBpbnQgKmJ5dGVzX2luX2RhdGEpOwotCi0jZW5kaWYgLyogQUVTX0NCQ19IICovCi0KZGlmZiAtLWdpdCBhL2NyeXB0by9pbmNsdWRlL2Flc19nY20uaCBiL2NyeXB0by9pbmNsdWRlL2Flc19nY20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDYwMzFmCi0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL2luY2x1ZGUvYWVzX2djbS5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBhZXNfZ2NtLmgKKyAqCisgKiBIZWFkZXIgZm9yIEFFUyBHYWxvaXMgQ291bnRlciBNb2RlLgorICoKKyAqIEpvaG4gQS4gRm9sZXkKKyAqIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKi8KKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTcsIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBBRVNfR0NNX0gKKyNkZWZpbmUgQUVTX0dDTV9ICisKKyNpbmNsdWRlICJjaXBoZXIuaCIKKyNpbmNsdWRlICJzcnRwLmgiCisjaW5jbHVkZSAiZGF0YXR5cGVzLmgiCisKKyNpZmRlZiBPUEVOU1NMCisKKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBpbnQga2V5X3NpemU7CisgICAgaW50IHRhZ19sZW47CisgICAgRVZQX0NJUEhFUl9DVFggKmN0eDsKKyAgICBzcnRwX2NpcGhlcl9kaXJlY3Rpb25fdCBkaXI7Cit9IHNydHBfYWVzX2djbV9jdHhfdDsKKworI2VuZGlmIC8qIE9QRU5TU0wgKi8KKworI2lmZGVmIE5TUworCisjaW5jbHVkZSA8bnNzLmg+CisjaW5jbHVkZSA8cGsxMXB1Yi5oPgorCisjZGVmaW5lIE1BWF9BRF9TSVpFIDIwNDgKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGludCBrZXlfc2l6ZTsKKyAgICBpbnQgdGFnX3NpemU7CisgICAgc3J0cF9jaXBoZXJfZGlyZWN0aW9uX3QgZGlyOworICAgIE5TU0luaXRDb250ZXh0ICpuc3M7CisgICAgUEsxMVN5bUtleSAqa2V5OworICAgIHVpbnQ4X3QgaXZbMTJdOworICAgIHVpbnQ4X3QgYWFkW01BWF9BRF9TSVpFXTsKKyAgICBpbnQgYWFkX3NpemU7CisgICAgQ0tfR0NNX1BBUkFNUyBwYXJhbXM7CisgICAgdWludDhfdCB0YWdbMTZdOworfSBzcnRwX2Flc19nY21fY3R4X3Q7CisKKyNlbmRpZiAvKiBOU1MgKi8KKworI2VuZGlmIC8qIEFFU19HQ01fSCAqLwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2luY2x1ZGUvYWVzX2ljbS5oIGIvY3J5cHRvL2luY2x1ZGUvYWVzX2ljbS5oCmluZGV4IGJiZmVlMmMuLjhkZWQxNTYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9pbmNsdWRlL2Flc19pY20uaAorKysgYi9jcnlwdG8vaW5jbHVkZS9hZXNfaWNtLmgKQEAgLTgsNiArOCw0MiBAQAogICoKICAqLwogCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDE3LCBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKICNpZm5kZWYgQUVTX0lDTV9ICiAjZGVmaW5lIEFFU19JQ01fSAogCkBAIC0xNSwyOCArNTEsMTIgQEAKICNpbmNsdWRlICJjaXBoZXIuaCIKIAogdHlwZWRlZiBzdHJ1Y3QgewotICB2MTI4X3QgICBjb3VudGVyOyAgICAgICAgICAgICAgICAvKiBob2xkcyB0aGUgY291bnRlciB2YWx1ZSAgICAgICAgICAqLwotICB2MTI4X3QgICBvZmZzZXQ7ICAgICAgICAgICAgICAgICAvKiBpbml0aWFsIG9mZnNldCB2YWx1ZSAgICAgICAgICAgICAqLwotICB2MTI4X3QgICBrZXlzdHJlYW1fYnVmZmVyOyAgICAgICAvKiBidWZmZXJzIGJ5dGVzIG9mIGtleXN0cmVhbSAgICAgICAqLwotICBpbnQgICAgICBieXRlc19pbl9idWZmZXI7ICAgICAgICAvKiBudW1iZXIgb2YgdW51c2VkIGJ5dGVzIGluIGJ1ZmZlciAqLwotICBhZXNfZXhwYW5kZWRfa2V5X3QgZXhwYW5kZWRfa2V5OyAvKiB0aGUgY2lwaGVyIGtleSAgICAgICAgICAgICAgICAgICAqLwotfSBhZXNfaWNtX2N0eF90OwotCi0KLWVycl9zdGF0dXNfdAotYWVzX2ljbV9jb250ZXh0X2luaXQoYWVzX2ljbV9jdHhfdCAqYywKLQkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXkpOyAKLQotZXJyX3N0YXR1c190Ci1hZXNfaWNtX3NldF9pdihhZXNfaWNtX2N0eF90ICpjLCB2b2lkICppdik7Ci0KLWVycl9zdGF0dXNfdAotYWVzX2ljbV9lbmNyeXB0KGFlc19pY21fY3R4X3QgKmMsCi0JCXVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50ICpieXRlc190b19lbmNyKTsKLQotZXJyX3N0YXR1c190Ci1hZXNfaWNtX291dHB1dChhZXNfaWNtX2N0eF90ICpjLAotCSAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsIGludCBieXRlc190b19vdXRwdXQpOworICAgIHYxMjhfdCBjb3VudGVyOyAgICAgICAgICAgICAgICAgICAgICAgLyogaG9sZHMgdGhlIGNvdW50ZXIgdmFsdWUgICAgICAgICAgKi8KKyAgICB2MTI4X3Qgb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXRpYWwgb2Zmc2V0IHZhbHVlICAgICAgICAgICAgICovCisgICAgdjEyOF90IGtleXN0cmVhbV9idWZmZXI7ICAgICAgICAgICAgICAvKiBidWZmZXJzIGJ5dGVzIG9mIGtleXN0cmVhbSAgICAgICAqLworICAgIHNydHBfYWVzX2V4cGFuZGVkX2tleV90IGV4cGFuZGVkX2tleTsgLyogdGhlIGNpcGhlciBrZXkgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgYnl0ZXNfaW5fYnVmZmVyOyAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiB1bnVzZWQgYnl0ZXMgaW4gYnVmZmVyICovCisgICAgaW50IGtleV9zaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBRVMga2V5IHNpemUgKyAxNCBieXRlIFNBTFQgKi8KK30gc3J0cF9hZXNfaWNtX2N0eF90OwogCiAjZW5kaWYgLyogQUVTX0lDTV9IICovCi0KZGlmZiAtLWdpdCBhL2NyeXB0by9pbmNsdWRlL2Flc19pY21fZXh0LmggYi9jcnlwdG8vaW5jbHVkZS9hZXNfaWNtX2V4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMzA2ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vaW5jbHVkZS9hZXNfaWNtX2V4dC5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBhZXNfaWNtLmgKKyAqCisgKiBIZWFkZXIgZm9yIEFFUyBJbnRlZ2VyIENvdW50ZXIgTW9kZS4KKyAqCisgKiBEYXZpZCBBLiBNY0dyZXcKKyAqIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKi8KKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMTcsIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBBRVNfSUNNX0gKKyNkZWZpbmUgQUVTX0lDTV9ICisKKyNpbmNsdWRlICJjaXBoZXIuaCIKKyNpbmNsdWRlICJkYXRhdHlwZXMuaCIKKworI2lmZGVmIE9QRU5TU0wKKworI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHYxMjhfdCBjb3VudGVyOyAvKiBob2xkcyB0aGUgY291bnRlciB2YWx1ZSAgICAgICAgICAqLworICAgIHYxMjhfdCBvZmZzZXQ7ICAvKiBpbml0aWFsIG9mZnNldCB2YWx1ZSAgICAgICAgICAgICAqLworICAgIGludCBrZXlfc2l6ZTsKKyAgICBFVlBfQ0lQSEVSX0NUWCAqY3R4OworfSBzcnRwX2Flc19pY21fY3R4X3Q7CisKKyNlbmRpZiAvKiBPUEVOU1NMICovCisKKyNpZmRlZiBOU1MKKworI2luY2x1ZGUgPG5zcy5oPgorI2luY2x1ZGUgPHBrMTFwdWIuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHYxMjhfdCBjb3VudGVyOworICAgIHYxMjhfdCBvZmZzZXQ7CisgICAgaW50IGtleV9zaXplOworICAgIHVpbnQ4X3QgaXZbMTZdOworICAgIE5TU0luaXRDb250ZXh0ICpuc3M7CisgICAgUEsxMVN5bUtleSAqa2V5OworICAgIFBLMTFDb250ZXh0ICpjdHg7Cit9IHNydHBfYWVzX2ljbV9jdHhfdDsKKworI2VuZGlmIC8qIE5TUyAqLworCisjZW5kaWYgLyogQUVTX0lDTV9IICovCmRpZmYgLS1naXQgYS9jcnlwdG8vaW5jbHVkZS9hbGxvYy5oIGIvY3J5cHRvL2luY2x1ZGUvYWxsb2MuaAppbmRleCA4NDNhN2Y4Li4xZmMwNDEwIDEwMDY0NAotLS0gYS9jcnlwdG8vaW5jbHVkZS9hbGxvYy5oCisrKyBiL2NyeXB0by9pbmNsdWRlL2FsbG9jLmgKQEAgLTEsMzIgKzEsMzIgQEAKIC8qCiAgKiBhbGxvYy5oCiAgKgotICogaW50ZXJmYWNlIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24sIHdpdGggb3B0aW9uYWwgZGVidWdnaW5nIAorICogaW50ZXJmYWNlIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24sIHdpdGggb3B0aW9uYWwgZGVidWdnaW5nCiAgKgogICogRGF2aWQgQS4gTWNHcmV3CiAgKiBDaXNjbyBTeXN0ZW1zLCBJbmMuCiAgKi8KIC8qCi0gKgkKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA1IENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxNyBDaXNjbyBTeXN0ZW1zLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwogICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKICAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCisgKgogICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAogICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKKyAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKQEAgLTQyLDIwICs0MiwzNSBAQAogICoKICAqLwogCi0KICNpZm5kZWYgQ1JZUFRPX0FMTE9DX0gKICNkZWZpbmUgQ1JZUFRPX0FMTE9DX0gKIAotI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImRhdGF0eXBlcy5oIgogCi0jaWYgSEFWRV9TVERMSUJfSAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2VuZGlmIAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgogCi12b2lkICoKLWNyeXB0b19hbGxvYyhzaXplX3Qgc2l6ZSk7CisvKgorICogc3J0cF9jcnlwdG9fYWxsb2MKKyAqCisgKiBBbGxvY2F0ZXMgYSBibG9jayBvZiBtZW1vcnkgIG9mIGdpdmVuIHNpemUuIFRoZSBtZW1vcnkgd2lsbCBiZQorICogaW5pdGlhbGl6ZWQgdG8gemVybydzLiBGcmVlIHRoZSBtZW1vcnkgd2l0aCBhIGNhbGwgdG8gc3J0cF9jcnlwdG9fZnJlZS4KKyAqCisgKiByZXR1cm5zIHBvaW50ZXIgdG8gbWVtb3J5IG9uIHN1Y2Nlc3Mgb3IgZWxzZSBOVUxMCisgKi8KK3ZvaWQgKnNydHBfY3J5cHRvX2FsbG9jKHNpemVfdCBzaXplKTsKIAotdm9pZAotY3J5cHRvX2ZyZWUodm9pZCAqcHRyKTsKKy8qCisgKiBzcnRwX2NyeXB0b19mcmVlCisgKgorICogRnJlZXMgdGhlIGJsb2NrIG9mIG1lbW9yeSAgcHRyIHByZXZpb3VzbHkgIGFsbG9jYXRlZCB3aXRoCisgKiBzcnRwX2NyeXB0b19hbGxvYworICovCit2b2lkIHNydHBfY3J5cHRvX2ZyZWUodm9pZCAqcHRyKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKIAogI2VuZGlmIC8qIENSWVBUT19BTExPQ19IICovCmRpZmYgLS1naXQgYS9jcnlwdG8vaW5jbHVkZS9hdXRoLmggYi9jcnlwdG8vaW5jbHVkZS9hdXRoLmgKaW5kZXggNTBlNjAzMi4uNzc0ZWExNiAxMDA2NDQKLS0tIGEvY3J5cHRvL2luY2x1ZGUvYXV0aC5oCisrKyBiL2NyeXB0by9pbmNsdWRlL2F1dGguaApAQCAtOCwyNiArOCwyNiBAQAogICovCiAKIC8qCi0gKgkKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA1LCBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMTcsIENpc2NvIFN5c3RlbXMsIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogCisgKgogICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCiAgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCiAgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAogICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKKyAqCiAgKiAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAgKiAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAorICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwpAQCAtNDMsMTE3ICs0MywxMzEgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBBVVRIX0gKLSNkZWZpbmUgQVVUSF9ICisjaWZuZGVmIFNSVFBfQVVUSF9ICisjZGVmaW5lIFNSVFBfQVVUSF9ICiAKLSNpbmNsdWRlICJkYXRhdHlwZXMuaCIgICAgICAgICAgCi0jaW5jbHVkZSAiZXJyLmgiICAgICAgICAgICAgICAgIC8qIGVycm9yIGNvZGVzICAgICovCisjaW5jbHVkZSAic3J0cC5oIgorI2luY2x1ZGUgImNyeXB0b190eXBlcy5oIiAvKiBmb3IgdmFsdWVzIG9mIGF1dGhfdHlwZV9pZF90ICovCiAKLXR5cGVkZWYgc3RydWN0IGF1dGhfdHlwZV90ICphdXRoX3R5cGVfcG9pbnRlcjsKLXR5cGVkZWYgc3RydWN0IGF1dGhfdCAgICAgICphdXRoX3BvaW50ZXJfdDsKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKIAotdHlwZWRlZiBlcnJfc3RhdHVzX3QgKCphdXRoX2FsbG9jX2Z1bmMpCi0gICAgIChhdXRoX3BvaW50ZXJfdCAqYXAsIGludCBrZXlfbGVuLCBpbnQgb3V0X2xlbik7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBzcnRwX2F1dGhfdHlwZV90ICpzcnRwX2F1dGhfdHlwZV9wb2ludGVyOwordHlwZWRlZiBzdHJ1Y3Qgc3J0cF9hdXRoX3QgKnNydHBfYXV0aF9wb2ludGVyX3Q7CiAKLXR5cGVkZWYgZXJyX3N0YXR1c190ICgqYXV0aF9pbml0X2Z1bmMpCi0gICAgICh2b2lkICpzdGF0ZSwgY29uc3Qgb2N0ZXRfdCAqa2V5LCBpbnQga2V5X2xlbik7Cit0eXBlZGVmIHNydHBfZXJyX3N0YXR1c190ICgqc3J0cF9hdXRoX2FsbG9jX2Z1bmMpKHNydHBfYXV0aF9wb2ludGVyX3QgKmFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG91dF9sZW4pOwogCi10eXBlZGVmIGVycl9zdGF0dXNfdCAoKmF1dGhfZGVhbGxvY19mdW5jKShhdXRoX3BvaW50ZXJfdCBhcCk7Cit0eXBlZGVmIHNydHBfZXJyX3N0YXR1c190ICgqc3J0cF9hdXRoX2luaXRfZnVuYykodm9pZCAqc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXlfbGVuKTsKIAotdHlwZWRlZiBlcnJfc3RhdHVzX3QgKCphdXRoX2NvbXB1dGVfZnVuYykKLSAgICAgKHZvaWQgKnN0YXRlLCBvY3RldF90ICpidWZmZXIsIGludCBvY3RldHNfdG9fYXV0aCwgCi0gICAgICBpbnQgdGFnX2xlbiwgb2N0ZXRfdCAqdGFnKTsKK3R5cGVkZWYgc3J0cF9lcnJfc3RhdHVzX3QgKCpzcnRwX2F1dGhfZGVhbGxvY19mdW5jKShzcnRwX2F1dGhfcG9pbnRlcl90IGFwKTsKIAotdHlwZWRlZiBlcnJfc3RhdHVzX3QgKCphdXRoX3VwZGF0ZV9mdW5jKQotICAgICAodm9pZCAqc3RhdGUsIG9jdGV0X3QgKmJ1ZmZlciwgaW50IG9jdGV0c190b19hdXRoKTsKK3R5cGVkZWYgc3J0cF9lcnJfc3RhdHVzX3QgKCpzcnRwX2F1dGhfY29tcHV0ZV9mdW5jKSh2b2lkICpzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9jdGV0c190b19hdXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YWdfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnRhZyk7CiAKLXR5cGVkZWYgZXJyX3N0YXR1c190ICgqYXV0aF9zdGFydF9mdW5jKSh2b2lkICpzdGF0ZSk7Ci0gICAgIAordHlwZWRlZiBzcnRwX2Vycl9zdGF0dXNfdCAoKnNydHBfYXV0aF91cGRhdGVfZnVuYykodm9pZCAqc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2N0ZXRzX3RvX2F1dGgpOworCit0eXBlZGVmIHNydHBfZXJyX3N0YXR1c190ICgqc3J0cF9hdXRoX3N0YXJ0X2Z1bmMpKHZvaWQgKnN0YXRlKTsKKwogLyogc29tZSBzeW50YWN0aWMgc3VnYXIgb24gdGhlc2UgZnVuY3Rpb24gdHlwZXMgKi8KKyNkZWZpbmUgc3J0cF9hdXRoX3R5cGVfYWxsb2MoYXQsIGEsIGtsZW4sIG91dGxlbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKChhdCktPmFsbG9jKChhKSwgKGtsZW4pLCAob3V0bGVuKSkpCiAKLSNkZWZpbmUgYXV0aF90eXBlX2FsbG9jKGF0LCBhLCBrbGVuLCBvdXRsZW4pICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAoKGF0KS0+YWxsb2MoKGEpLCAoa2xlbiksIChvdXRsZW4pKSkKKyNkZWZpbmUgc3J0cF9hdXRoX2luaXQoYSwga2V5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCgoYSktPnR5cGUpLT5pbml0KChhKS0+c3RhdGUsIChrZXkpLCAoKGEpLT5rZXlfbGVuKSkpCiAKLSNkZWZpbmUgYXV0aF9pbml0KGEsIGtleSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAoKChhKS0+dHlwZSktPmluaXQoKGEpLT5zdGF0ZSwgKGtleSksICgoYSktPmtleV9sZW4pKSkKKyNkZWZpbmUgc3J0cF9hdXRoX2NvbXB1dGUoYSwgYnVmLCBsZW4sIHJlcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCgoYSktPnR5cGUpLT5jb21wdXRlKChhKS0+c3RhdGUsIChidWYpLCAobGVuKSwgKGEpLT5vdXRfbGVuLCAocmVzKSkpCiAKLSNkZWZpbmUgYXV0aF9jb21wdXRlKGEsIGJ1ZiwgbGVuLCByZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICgoKGEpLT50eXBlKS0+Y29tcHV0ZSgoYSktPnN0YXRlLCAoYnVmKSwgKGxlbiksIChhKS0+b3V0X2xlbiwgKHJlcykpKQorI2RlZmluZSBzcnRwX2F1dGhfdXBkYXRlKGEsIGJ1ZiwgbGVuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKChhKS0+dHlwZSktPnVwZGF0ZSgoYSktPnN0YXRlLCAoYnVmKSwgKGxlbikpKQogCi0jZGVmaW5lIGF1dGhfdXBkYXRlKGEsIGJ1ZiwgbGVuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAoKChhKS0+dHlwZSktPnVwZGF0ZSgoYSktPnN0YXRlLCAoYnVmKSwgKGxlbikpKQorI2RlZmluZSBzcnRwX2F1dGhfc3RhcnQoYSkgKCgoYSktPnR5cGUpLT5zdGFydCgoYSktPnN0YXRlKSkKIAotI2RlZmluZSBhdXRoX3N0YXJ0KGEpKCgoYSktPnR5cGUpLT5zdGFydCgoYSktPnN0YXRlKSkKLQotI2RlZmluZSBhdXRoX2RlYWxsb2MoYykgKCgoYyktPnR5cGUpLT5kZWFsbG9jKGMpKQorI2RlZmluZSBzcnRwX2F1dGhfZGVhbGxvYyhjKSAoKChjKS0+dHlwZSktPmRlYWxsb2MoYykpCiAKIC8qIGZ1bmN0aW9ucyB0byBnZXQgaW5mb3JtYXRpb24gYWJvdXQgYSBwYXJ0aWN1bGFyIGF1dGhfdCAqLworaW50IHNydHBfYXV0aF9nZXRfa2V5X2xlbmd0aChjb25zdCBzdHJ1Y3Qgc3J0cF9hdXRoX3QgKmEpOwogCi1pbnQKLWF1dGhfZ2V0X2tleV9sZW5ndGgoY29uc3Qgc3RydWN0IGF1dGhfdCAqYSk7CitpbnQgc3J0cF9hdXRoX2dldF90YWdfbGVuZ3RoKGNvbnN0IHN0cnVjdCBzcnRwX2F1dGhfdCAqYSk7CiAKLWludAotYXV0aF9nZXRfdGFnX2xlbmd0aChjb25zdCBzdHJ1Y3QgYXV0aF90ICphKTsKLQotaW50Ci1hdXRoX2dldF9wcmVmaXhfbGVuZ3RoKGNvbnN0IHN0cnVjdCBhdXRoX3QgKmEpOworaW50IHNydHBfYXV0aF9nZXRfcHJlZml4X2xlbmd0aChjb25zdCBzdHJ1Y3Qgc3J0cF9hdXRoX3QgKmEpOwogCiAvKgotICogYXV0aF90ZXN0X2Nhc2VfdCBpcyBhIChsaXN0IG9mKSBrZXkvbWVzc2FnZS90YWcgdmFsdWVzIHRoYXQgYXJlCisgKiBzcnRwX2F1dGhfdGVzdF9jYXNlX3QgaXMgYSAobGlzdCBvZikga2V5L21lc3NhZ2UvdGFnIHZhbHVlcyB0aGF0IGFyZQogICoga25vd24gdG8gYmUgY29ycmVjdCBmb3IgYSBwYXJ0aWN1bGFyIGNpcGhlci4gIHRoaXMgZGF0YSBjYW4gYmUgdXNlZAogICogdG8gdGVzdCBhbiBpbXBsZW1lbnRhdGlvbiBpbiBhbiBvbi10aGUtZmx5IHNlbGYgdGVzdCBvZiB0aGUKLSAqIGNvcnJlY25lc3Mgb2YgdGhlIGltcGxlbWVudGF0aW9uLiAgKHNlZSB0aGUgYXV0aF90eXBlX3NlbGZfdGVzdCgpCisgKiBjb3JyZWN0bmVzcyBvZiB0aGUgaW1wbGVtZW50YXRpb24uICAoc2VlIHRoZSBzcnRwX2F1dGhfdHlwZV9zZWxmX3Rlc3QoKQogICogZnVuY3Rpb24gYmVsb3cpCiAgKi8KK3R5cGVkZWYgc3RydWN0IHNydHBfYXV0aF90ZXN0X2Nhc2VfdCB7CisgICAgaW50IGtleV9sZW5ndGhfb2N0ZXRzOyAgLyogb2N0ZXRzIGluIGtleSAgICAgICAgICAgICovCisgICAgY29uc3QgdWludDhfdCAqa2V5OyAgICAgLyoga2V5ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaW50IGRhdGFfbGVuZ3RoX29jdGV0czsgLyogb2N0ZXRzIGluIGRhdGEgICAgICAgICAgICovCisgICAgY29uc3QgdWludDhfdCAqZGF0YTsgICAgLyogZGF0YSAgICAgICAgICAgICAgICAgICAgICovCisgICAgaW50IHRhZ19sZW5ndGhfb2N0ZXRzOyAgLyogb2N0ZXRzIGluIHRhZyAgICAgICAgICAgICovCisgICAgY29uc3QgdWludDhfdCAqdGFnOyAgICAgLyogdGFnICAgICAgICAgICAgICAgICAgICAgICovCisgICAgY29uc3Qgc3RydWN0IHNydHBfYXV0aF90ZXN0X2Nhc2VfdAorICAgICAgICAqbmV4dF90ZXN0X2Nhc2U7IC8qIHBvaW50ZXIgdG8gbmV4dCB0ZXN0Y2FzZSAqLworfSBzcnRwX2F1dGhfdGVzdF9jYXNlX3Q7CiAKLXR5cGVkZWYgc3RydWN0IGF1dGhfdGVzdF9jYXNlX3QgewotICBpbnQga2V5X2xlbmd0aF9vY3RldHM7ICAgICAgICAgICAgICAgICAgICAvKiBvY3RldHMgaW4ga2V5ICAgICAgICAgICAgKi8KLSAgb2N0ZXRfdCAqa2V5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoga2V5ICAgICAgICAgICAgICAgICAgICAgICovCi0gIGludCBkYXRhX2xlbmd0aF9vY3RldHM7ICAgICAgICAgICAgICAgICAgIC8qIG9jdGV0cyBpbiBkYXRhICAgICAgICAgICAqLyAKLSAgb2N0ZXRfdCAqZGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGF0YSAgICAgICAgICAgICAgICAgICAgICovCi0gIGludCB0YWdfbGVuZ3RoX29jdGV0czsgICAgICAgICAgICAgICAgICAgIC8qIG9jdGV0cyBpbiB0YWcgICAgICAgICAgICAqLwotICBvY3RldF90ICp0YWc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0YWcgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgc3RydWN0IGF1dGhfdGVzdF9jYXNlX3QgKm5leHRfdGVzdF9jYXNlOyAgLyogcG9pbnRlciB0byBuZXh0IHRlc3RjYXNlICovCi19IGF1dGhfdGVzdF9jYXNlX3Q7CisvKiBzcnRwX2F1dGhfdHlwZV90ICovCit0eXBlZGVmIHN0cnVjdCBzcnRwX2F1dGhfdHlwZV90IHsKKyAgICBzcnRwX2F1dGhfYWxsb2NfZnVuYyBhbGxvYzsKKyAgICBzcnRwX2F1dGhfZGVhbGxvY19mdW5jIGRlYWxsb2M7CisgICAgc3J0cF9hdXRoX2luaXRfZnVuYyBpbml0OworICAgIHNydHBfYXV0aF9jb21wdXRlX2Z1bmMgY29tcHV0ZTsKKyAgICBzcnRwX2F1dGhfdXBkYXRlX2Z1bmMgdXBkYXRlOworICAgIHNydHBfYXV0aF9zdGFydF9mdW5jIHN0YXJ0OworICAgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uOworICAgIGNvbnN0IHNydHBfYXV0aF90ZXN0X2Nhc2VfdCAqdGVzdF9kYXRhOworICAgIHNydHBfYXV0aF90eXBlX2lkX3QgaWQ7Cit9IHNydHBfYXV0aF90eXBlX3Q7CiAKLS8qIGF1dGhfdHlwZV90ICovCit0eXBlZGVmIHN0cnVjdCBzcnRwX2F1dGhfdCB7CisgICAgY29uc3Qgc3J0cF9hdXRoX3R5cGVfdCAqdHlwZTsKKyAgICB2b2lkICpzdGF0ZTsKKyAgICBpbnQgb3V0X2xlbjsgICAgLyogbGVuZ3RoIG9mIG91dHB1dCB0YWcgaW4gb2N0ZXRzICovCisgICAgaW50IGtleV9sZW47ICAgIC8qIGxlbmd0aCBvZiBrZXkgaW4gb2N0ZXRzICAgICAgICAqLworICAgIGludCBwcmVmaXhfbGVuOyAvKiBsZW5ndGggb2Yga2V5c3RyZWFtIHByZWZpeCAgICAgKi8KK30gc3J0cF9hdXRoX3Q7CiAKLXR5cGVkZWYgc3RydWN0IGF1dGhfdHlwZV90IHsKLSAgYXV0aF9hbGxvY19mdW5jICAgICAgYWxsb2M7Ci0gIGF1dGhfZGVhbGxvY19mdW5jICAgIGRlYWxsb2M7Ci0gIGF1dGhfaW5pdF9mdW5jICAgICAgIGluaXQ7Ci0gIGF1dGhfY29tcHV0ZV9mdW5jICAgIGNvbXB1dGU7Ci0gIGF1dGhfdXBkYXRlX2Z1bmMgICAgIHVwZGF0ZTsKLSAgYXV0aF9zdGFydF9mdW5jICAgICAgc3RhcnQ7Ci0gIGNoYXIgICAgICAgICAgICAgICAgKmRlc2NyaXB0aW9uOwotICBpbnQgICAgICAgICAgICAgICAgICByZWZfY291bnQ7Ci0gIGF1dGhfdGVzdF9jYXNlX3QgICAgKnRlc3RfZGF0YTsKLSAgZGVidWdfbW9kdWxlX3QgICAgICAqZGVidWc7Ci19IGF1dGhfdHlwZV90OwotCi10eXBlZGVmIHN0cnVjdCBhdXRoX3QgewotICBhdXRoX3R5cGVfdCAqdHlwZTsKLSAgdm9pZCAgICAgICAgKnN0YXRlOyAgICAgICAgICAgICAgICAgICAKLSAgaW50ICAgICAgICAgIG91dF9sZW47ICAgICAgICAgICAvKiBsZW5ndGggb2Ygb3V0cHV0IHRhZyBpbiBvY3RldHMgKi8KLSAgaW50ICAgICAgICAgIGtleV9sZW47ICAgICAgICAgICAvKiBsZW5ndGggb2Yga2V5IGluIG9jdGV0cyAgICAgICAgKi8KLSAgaW50ICAgICAgICAgIHByZWZpeF9sZW47ICAgICAgICAvKiBsZW5ndGggb2Yga2V5c3RyZWFtIHByZWZpeCAgICAgKi8KLX0gYXV0aF90OwotCi0vKiAKLSAqIGF1dGhfdHlwZV9zZWxmX3Rlc3QoKSB0ZXN0cyBhbiBhdXRoX3R5cGUgYWdhaW5zdCB0ZXN0IGNhc2VzCisvKgorICogc3J0cF9hdXRoX3R5cGVfc2VsZl90ZXN0KCkgdGVzdHMgYW4gYXV0aF90eXBlIGFnYWluc3QgdGVzdCBjYXNlcwogICogcHJvdmlkZWQgaW4gYW4gYXJyYXkgb2YgdmFsdWVzIG9mIGtleS9tZXNzYWdlL3RhZyB0aGF0IGlzIGtub3duIHRvCiAgKiBiZSBnb29kCiAgKi8KLQotZXJyX3N0YXR1c190Ci1hdXRoX3R5cGVfc2VsZl90ZXN0KGNvbnN0IGF1dGhfdHlwZV90ICphdCk7CitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2F1dGhfdHlwZV9zZWxmX3Rlc3QoY29uc3Qgc3J0cF9hdXRoX3R5cGVfdCAqYXQpOwogCiAvKgotICogYXV0aF90eXBlX2dldF9yZWZfY291bnQoYXQpIHJldHVybnMgdGhlIHJlZmVyZW5jZSBjb3VudCAodGhlIG51bWJlcgotICogb2YgaW5zdGFudGlhdGlvbnMpIG9mIHRoZSBhdXRoX3R5cGVfdCBhdAorICogc3J0cF9hdXRoX3R5cGVfdGVzdCgpIHRlc3RzIGFuIGF1dGhfdHlwZSBhZ2FpbnN0IGV4dGVybmFsIHRlc3QgY2FzZXMKKyAqIHByb3ZpZGVkIGluIGFuIGFycmF5IG9mIHZhbHVlcyBvZiBrZXkvbWVzc2FnZS90YWcgdGhhdCBpcyBrbm93biB0bworICogYmUgZ29vZAogICovCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2F1dGhfdHlwZV90ZXN0KGNvbnN0IHNydHBfYXV0aF90eXBlX3QgKmF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcnRwX2F1dGhfdGVzdF9jYXNlX3QgKnRlc3RfZGF0YSk7CiAKLWludAotYXV0aF90eXBlX2dldF9yZWZfY291bnQoY29uc3QgYXV0aF90eXBlX3QgKmF0KTsKKy8qCisgKiBzcnRwX3JlcGxhY2VfYXV0aF90eXBlKGN0LCBpZCkKKyAqCisgKiByZXBsYWNlcyBzcnRwJ3Mga2VybmVsJ3MgYXV0aCB0eXBlIGltcGxlbWVudGF0aW9uIGZvciB0aGUgYXV0aF90eXBlIGlkCisgKiB3aXRoIGEgbmV3IG9uZSBwYXNzZWQgaW4gZXh0ZXJuYWxseS4gIFRoZSBuZXcgYXV0aCB0eXBlIG11c3QgcGFzcyBhbGwgdGhlCisgKiBleGlzdGluZyBhdXRoX3R5cGUncyBzZWxmIHRlc3RzIGFzIHdlbGwgYXMgaXRzIG93bi4KKyAqLworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9yZXBsYWNlX2F1dGhfdHlwZShjb25zdCBzcnRwX2F1dGhfdHlwZV90ICpjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9hdXRoX3R5cGVfaWRfdCBpZCk7CiAKLSNlbmRpZiAvKiBBVVRIX0ggKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBTUlRQX0FVVEhfSCAqLwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2luY2x1ZGUvY2lwaGVyLmggYi9jcnlwdG8vaW5jbHVkZS9jaXBoZXIuaAppbmRleCBiMmJjODhiLi40ZjE0ZTM1IDEwMDY0NAotLS0gYS9jcnlwdG8vaW5jbHVkZS9jaXBoZXIuaAorKysgYi9jcnlwdG8vaW5jbHVkZS9jaXBoZXIuaApAQCAtNywyNiArNywyNiBAQAogICogQ2lzY28gU3lzdGVtcywgSW5jLgogICovCiAvKgotICoJCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSwgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDE3IENpc2NvIFN5c3RlbXMsIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogCisgKgogICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCiAgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCiAgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAogICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKKyAqCiAgKiAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAgKiAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAorICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwpAQCAtNDIsMTc4ICs0MiwyMDcgQEAKICAqCiAgKi8KIAorI2lmbmRlZiBTUlRQX0NJUEhFUl9ICisjZGVmaW5lIFNSVFBfQ0lQSEVSX0gKIAotI2lmbmRlZiBDSVBIRVJfSAotI2RlZmluZSBDSVBIRVJfSAorI2luY2x1ZGUgInNydHAuaCIKKyNpbmNsdWRlICJjcnlwdG9fdHlwZXMuaCIgLyogZm9yIHZhbHVlcyBvZiBjaXBoZXJfdHlwZV9pZF90ICovCiAKLSNpbmNsdWRlICJkYXRhdHlwZXMuaCIgICAgICAgICAgCi0jaW5jbHVkZSAicmRieC5oIiAgICAgICAgICAgICAgIC8qIGZvciB4dGRfc2VxX251bV90ICovCi0jaW5jbHVkZSAiZXJyLmgiICAgICAgICAgICAgICAgIC8qIGZvciBlcnJvciBjb2RlcyAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKIAotCi0vKioKLSAqIEBicmllZiBjaXBoZXJfZGlyZWN0aW9uX3QgZGVmaW5lcyBhIHBhcnRpY3VsYXIgY2lwaGVyIG9wZXJhdGlvbi4gCisvKgorICogc3J0cF9jaXBoZXJfZGlyZWN0aW9uX3QgZGVmaW5lcyBhIHBhcnRpY3VsYXIgY2lwaGVyIG9wZXJhdGlvbi4KICAqCi0gKiBBIGNpcGhlcl9kaXJlY3Rpb25fdCBpcyBhbiBlbnVtIHRoYXQgZGVzY3JpYmVzIGEgcGFydGljdWxhciBjaXBoZXIKKyAqIEEgc3J0cF9jaXBoZXJfZGlyZWN0aW9uX3QgaXMgYW4gZW51bSB0aGF0IGRlc2NyaWJlcyBhIHBhcnRpY3VsYXIgY2lwaGVyCiAgKiBvcGVyYXRpb24sIGkuZS4gZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uLiAgRm9yIHNvbWUgY2lwaGVycywgdGhpcwogICogZGlzdGluY3Rpb24gZG9lcyBub3QgbWF0dGVyLCBidXQgZm9yIG90aGVycywgaXQgaXMgZXNzZW50aWFsLgogICovCi0KLXR5cGVkZWYgZW51bSB7IAotICBkaXJlY3Rpb25fZW5jcnlwdCwgLyoqPCBlbmNyeXB0aW9uIChjb252ZXJ0IHBsYWludGV4dCB0byBjaXBoZXJ0ZXh0KSAqLwotICBkaXJlY3Rpb25fZGVjcnlwdCwgLyoqPCBkZWNyeXB0aW9uIChjb252ZXJ0IGNpcGhlcnRleHQgdG8gcGxhaW50ZXh0KSAqLwotICBkaXJlY3Rpb25fYW55ICAgICAgLyoqPCBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24gICAgICAgICAgICAgICAgICAgICAqLwotfSBjaXBoZXJfZGlyZWN0aW9uX3Q7Cit0eXBlZGVmIGVudW0geworICAgIHNydHBfZGlyZWN0aW9uX2VuY3J5cHQsIC8qKjwgZW5jcnlwdGlvbiAoY29udmVydCBwbGFpbnRleHQgdG8gY2lwaGVydGV4dCkgKi8KKyAgICBzcnRwX2RpcmVjdGlvbl9kZWNyeXB0LCAvKio8IGRlY3J5cHRpb24gKGNvbnZlcnQgY2lwaGVydGV4dCB0byBwbGFpbnRleHQpICovCisgICAgc3J0cF9kaXJlY3Rpb25fYW55ICAgICAgLyoqPCBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24gICAgICAgICAgICAgICAgICAgICAqLworfSBzcnRwX2NpcGhlcl9kaXJlY3Rpb25fdDsKIAogLyoKLSAqIHRoZSBjaXBoZXJfcG9pbnRlciBhbmQgY2lwaGVyX3R5cGVfcG9pbnRlciBkZWZpbml0aW9ucyBhcmUgbmVlZGVkCi0gKiBhcyBjaXBoZXJfdCBhbmQgY2lwaGVyX3R5cGVfdCBhcmUgbm90IHlldCBkZWZpbmVkCisgKiB0aGUgc3J0cF9jaXBoZXJfcG9pbnRlcl90IGRlZmluaXRpb24gaXMgbmVlZGVkCisgKiBhcyBzcnRwX2NpcGhlcl90IGlzIG5vdCB5ZXQgZGVmaW5lZAogICovCi0KLXR5cGVkZWYgc3RydWN0IGNpcGhlcl90eXBlX3QgKmNpcGhlcl90eXBlX3BvaW50ZXJfdDsKLXR5cGVkZWYgc3RydWN0IGNpcGhlcl90ICAgICAgKmNpcGhlcl9wb2ludGVyX3Q7Cit0eXBlZGVmIHN0cnVjdCBzcnRwX2NpcGhlcl90ICpzcnRwX2NpcGhlcl9wb2ludGVyX3Q7CiAKIC8qCi0gKiAgYSBjaXBoZXJfYWxsb2NfZnVuY190IGFsbG9jYXRlcyAoYnV0IGRvZXMgbm90IGluaXRpYWxpemUpIGEgY2lwaGVyX3QgCisgKiAgYSBzcnRwX2NpcGhlcl9hbGxvY19mdW5jX3QgYWxsb2NhdGVzIChidXQgZG9lcyBub3QgaW5pdGlhbGl6ZSkgYQorICogc3J0cF9jaXBoZXJfdAogICovCi0KLXR5cGVkZWYgZXJyX3N0YXR1c190ICgqY2lwaGVyX2FsbG9jX2Z1bmNfdCkKLSAgICAgKGNpcGhlcl9wb2ludGVyX3QgKmNwLCBpbnQga2V5X2xlbik7Ci0KLS8qIAotICogYSBjaXBoZXJfaW5pdF9mdW5jX3QgW3JlLV1pbml0aWFsaXplcyBhIGNpcGhlcl90IHdpdGggYSBnaXZlbiBrZXkKLSAqIGFuZCBkaXJlY3Rpb24gKGkuZS4sIGVuY3J5cHQgb3IgZGVjcnlwdCkKLSAqLwotCi10eXBlZGVmIGVycl9zdGF0dXNfdCAoKmNpcGhlcl9pbml0X2Z1bmNfdCkKLSAgKHZvaWQgKnN0YXRlLCBjb25zdCBvY3RldF90ICprZXksIGNpcGhlcl9kaXJlY3Rpb25fdCBkaXIpOwotCi0vKiBhIGNpcGhlcl9kZWFsbG9jX2Z1bmNfdCBkZS1hbGxvY2F0ZXMgYSBjaXBoZXJfdCAqLwotCi10eXBlZGVmIGVycl9zdGF0dXNfdCAoKmNpcGhlcl9kZWFsbG9jX2Z1bmNfdCkoY2lwaGVyX3BvaW50ZXJfdCBjcCk7Ci0KLS8qIGEgY2lwaGVyX3NldF9zZWdtZW50X2Z1bmNfdCBzZXRzIHRoZSBzZWdtZW50IGluZGV4IG9mIGEgY2lwaGVyX3QgKi8KLQotdHlwZWRlZiBlcnJfc3RhdHVzX3QgKCpjaXBoZXJfc2V0X3NlZ21lbnRfZnVuY190KQotICAgICAodm9pZCAqc3RhdGUsIHh0ZF9zZXFfbnVtX3QgaWR4KTsKLQotLyogYSBjaXBoZXJfZW5jcnlwdF9mdW5jX3QgZW5jcnlwdHMgZGF0YSBpbi1wbGFjZSAqLwotCi10eXBlZGVmIGVycl9zdGF0dXNfdCAoKmNpcGhlcl9lbmNyeXB0X2Z1bmNfdCkKLSAgICAgKHZvaWQgKnN0YXRlLCBvY3RldF90ICpidWZmZXIsIHVuc2lnbmVkIGludCAqb2N0ZXRzX3RvX2VuY3J5cHQpOwotCi0vKiBhIGNpcGhlcl9kZWNyeXB0X2Z1bmNfdCBkZWNyeXB0cyBkYXRhIGluLXBsYWNlICovCi0KLXR5cGVkZWYgZXJyX3N0YXR1c190ICgqY2lwaGVyX2RlY3J5cHRfZnVuY190KQotICAgICAodm9pZCAqc3RhdGUsIG9jdGV0X3QgKmJ1ZmZlciwgdW5zaWduZWQgaW50ICpvY3RldHNfdG9fZGVjcnlwdCk7Ci0KLS8qIAotICogYSBjaXBoZXJfc2V0X25vbmNlX3NlcV9mdW5jX3QgZnVuY3Rpb24gc2V0cyBib3RoIHRoZSBub25jZQotICogYW5kIHRoZSBleHRlbmRlZCBzZXF1ZW5jZSBudW1iZXIKLSAqLwotCi10eXBlZGVmIGVycl9zdGF0dXNfdCAoKmNpcGhlcl9zZXRfaXZfZnVuY190KQotICAgICAoY2lwaGVyX3BvaW50ZXJfdCBjcCwgdm9pZCAqaXYpOwordHlwZWRlZiBzcnRwX2Vycl9zdGF0dXNfdCAoKnNydHBfY2lwaGVyX2FsbG9jX2Z1bmNfdCkoc3J0cF9jaXBoZXJfcG9pbnRlcl90ICpjcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXlfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhZ19sZW4pOwogCiAvKgotICogY2lwaGVyX3Rlc3RfY2FzZV90IGlzIGEgKGxpc3Qgb2YpIGtleSwgc2FsdCwgeHRkX3NlcV9udW1fdCwKLSAqIHBsYWludGV4dCwgYW5kIGNpcGhlcnRleHQgdmFsdWVzIHRoYXQgYXJlIGtub3duIHRvIGJlIGNvcnJlY3QgZm9yIGEKKyAqIGEgc3J0cF9jaXBoZXJfaW5pdF9mdW5jX3QgW3JlLV1pbml0aWFsaXplcyBhIGNpcGhlcl90IHdpdGggYSBnaXZlbiBrZXkKKyAqLwordHlwZWRlZiBzcnRwX2Vycl9zdGF0dXNfdCAoKnNydHBfY2lwaGVyX2luaXRfZnVuY190KSh2b2lkICpzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5KTsKKworLyogYSBzcnRwX2NpcGhlcl9kZWFsbG9jX2Z1bmNfdCBkZS1hbGxvY2F0ZXMgYSBjaXBoZXJfdCAqLwordHlwZWRlZiBzcnRwX2Vycl9zdGF0dXNfdCAoKnNydHBfY2lwaGVyX2RlYWxsb2NfZnVuY190KSgKKyAgICBzcnRwX2NpcGhlcl9wb2ludGVyX3QgY3ApOworCisvKgorICogYSBzcnRwX2NpcGhlcl9zZXRfYWFkX2Z1bmNfdCBwcm9jZXNzZXMgdGhlIEFBRCBkYXRhIGZvciBBRUFEIGNpcGhlcnMKKyAqLwordHlwZWRlZiBzcnRwX2Vycl9zdGF0dXNfdCAoKnNydHBfY2lwaGVyX3NldF9hYWRfZnVuY190KSh2b2lkICpzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhYWRfbGVuKTsKKworLyogYSBzcnRwX2NpcGhlcl9lbmNyeXB0X2Z1bmNfdCBlbmNyeXB0cyBkYXRhIGluLXBsYWNlICovCit0eXBlZGVmIHNydHBfZXJyX3N0YXR1c190ICgqc3J0cF9jaXBoZXJfZW5jcnlwdF9mdW5jX3QpKAorICAgIHZvaWQgKnN0YXRlLAorICAgIHVpbnQ4X3QgKmJ1ZmZlciwKKyAgICB1bnNpZ25lZCBpbnQgKm9jdGV0c190b19lbmNyeXB0KTsKKworLyogYSBzcnRwX2NpcGhlcl9kZWNyeXB0X2Z1bmNfdCBkZWNyeXB0cyBkYXRhIGluLXBsYWNlICovCit0eXBlZGVmIHNydHBfZXJyX3N0YXR1c190ICgqc3J0cF9jaXBoZXJfZGVjcnlwdF9mdW5jX3QpKAorICAgIHZvaWQgKnN0YXRlLAorICAgIHVpbnQ4X3QgKmJ1ZmZlciwKKyAgICB1bnNpZ25lZCBpbnQgKm9jdGV0c190b19kZWNyeXB0KTsKKworLyoKKyAqIGEgc3J0cF9jaXBoZXJfc2V0X2l2X2Z1bmNfdCBmdW5jdGlvbiBzZXRzIHRoZSBjdXJyZW50IGluaXRpYWxpemF0aW9uIHZlY3RvcgorICovCit0eXBlZGVmIHNydHBfZXJyX3N0YXR1c190ICgqc3J0cF9jaXBoZXJfc2V0X2l2X2Z1bmNfdCkoCisgICAgdm9pZCAqc3RhdGUsCisgICAgdWludDhfdCAqaXYsCisgICAgc3J0cF9jaXBoZXJfZGlyZWN0aW9uX3QgZGlyZWN0aW9uKTsKKworLyoKKyAqIGEgY2lwaGVyX2dldF90YWdfZnVuY190IGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IHRoZSBhdXRoZW50aWNhdGlvbgorICogdGFnIHRoYXQgd2FzIGNhbGN1bGF0ZWQgYnkgYW4gQUVBRCBjaXBoZXIuCisgKi8KK3R5cGVkZWYgc3J0cF9lcnJfc3RhdHVzX3QgKCpzcnRwX2NpcGhlcl9nZXRfdGFnX2Z1bmNfdCkodm9pZCAqc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmxlbik7CisKKy8qCisgKiBzcnRwX2NpcGhlcl90ZXN0X2Nhc2VfdCBpcyBhIChsaXN0IG9mKSBrZXksIHNhbHQsIHBsYWludGV4dCwgY2lwaGVydGV4dCwKKyAqIGFuZCBhYWQgdmFsdWVzIHRoYXQgYXJlIGtub3duIHRvIGJlIGNvcnJlY3QgZm9yIGEKICAqIHBhcnRpY3VsYXIgY2lwaGVyLiAgdGhpcyBkYXRhIGNhbiBiZSB1c2VkIHRvIHRlc3QgYW4gaW1wbGVtZW50YXRpb24KLSAqIGluIGFuIG9uLXRoZS1mbHkgc2VsZiB0ZXN0IG9mIHRoZSBjb3JyZWNuZXNzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4KLSAqIChzZWUgdGhlIGNpcGhlcl90eXBlX3NlbGZfdGVzdCgpIGZ1bmN0aW9uIGJlbG93KQorICogaW4gYW4gb24tdGhlLWZseSBzZWxmIHRlc3Qgb2YgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4KKyAqIChzZWUgdGhlIHNydHBfY2lwaGVyX3R5cGVfc2VsZl90ZXN0KCkgZnVuY3Rpb24gYmVsb3cpCiAgKi8KK3R5cGVkZWYgc3RydWN0IHNydHBfY2lwaGVyX3Rlc3RfY2FzZV90IHsKKyAgICBpbnQga2V5X2xlbmd0aF9vY3RldHM7ICAgICAgICAgICAgICAgICAvKiBvY3RldHMgaW4ga2V5ICAgICAgICAgICAgKi8KKyAgICBjb25zdCB1aW50OF90ICprZXk7ICAgICAgICAgICAgICAgICAgICAvKiBrZXkgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1aW50OF90ICppZHg7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwYWNrZXQgaW5kZXggICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBpbnQgcGxhaW50ZXh0X2xlbmd0aF9vY3RldHM7ICAvKiBvY3RldHMgaW4gcGxhaW50ZXh0ICAgICAgKi8KKyAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQ7ICAgICAgICAgICAgICAvKiBwbGFpbnRleHQgICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBpbnQgY2lwaGVydGV4dF9sZW5ndGhfb2N0ZXRzOyAvKiBvY3RldHMgaW4gcGxhaW50ZXh0ICAgICAgKi8KKyAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0OyAgICAgICAgICAgICAvKiBjaXBoZXJ0ZXh0ICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgYWFkX2xlbmd0aF9vY3RldHM7ICAgICAgICAgICAgICAgICAvKiBvY3RldHMgaW4gQUFEICAgICAgICAgICAgKi8KKyAgICBjb25zdCB1aW50OF90ICphYWQ7ICAgICAgICAgICAgICAgICAgICAvKiBBQUQgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgdGFnX2xlbmd0aF9vY3RldHM7ICAgICAgICAgICAgICAgICAvKiBMZW5ndGggb2YgQUVBRCB0YWcgICAgICAgKi8KKyAgICBjb25zdCBzdHJ1Y3Qgc3J0cF9jaXBoZXJfdGVzdF9jYXNlX3QKKyAgICAgICAgKm5leHRfdGVzdF9jYXNlOyAvKiBwb2ludGVyIHRvIG5leHQgdGVzdGNhc2UgKi8KK30gc3J0cF9jaXBoZXJfdGVzdF9jYXNlX3Q7CiAKLXR5cGVkZWYgc3RydWN0IGNpcGhlcl90ZXN0X2Nhc2VfdCB7Ci0gIGludCBrZXlfbGVuZ3RoX29jdGV0czsgICAgICAgICAgICAgICAgICAgICAgLyogb2N0ZXRzIGluIGtleSAgICAgICAgICAgICovCi0gIG9jdGV0X3QgKmtleTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoga2V5ICAgICAgICAgICAgICAgICAgICAgICovCi0gIG9jdGV0X3QgKmlkeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcGFja2V0IGluZGV4ICAgICAgICAgICAgICovCi0gIGludCBwbGFpbnRleHRfbGVuZ3RoX29jdGV0czsgICAgICAgICAgICAgICAgLyogb2N0ZXRzIGluIHBsYWludGV4dCAgICAgICovIAotICBvY3RldF90ICpwbGFpbnRleHQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBsYWludGV4dCAgICAgICAgICAgICAgICAqLwotICBpbnQgY2lwaGVydGV4dF9sZW5ndGhfb2N0ZXRzOyAgICAgICAgICAgICAgIC8qIG9jdGV0cyBpbiBwbGFpbnRleHQgICAgICAqLyAKLSAgb2N0ZXRfdCAqY2lwaGVydGV4dDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBjaXBoZXJ0ZXh0ICAgICAgICAgICAgICAgKi8KLSAgc3RydWN0IGNpcGhlcl90ZXN0X2Nhc2VfdCAqbmV4dF90ZXN0X2Nhc2U7ICAvKiBwb2ludGVyIHRvIG5leHQgdGVzdGNhc2UgKi8KLX0gY2lwaGVyX3Rlc3RfY2FzZV90OwotCi0vKiBjaXBoZXJfdHlwZV90IGRlZmluZXMgdGhlICdtZXRhZGF0YScgZm9yIGEgcGFydGljdWxhciBjaXBoZXIgdHlwZSAqLwotCi10eXBlZGVmIHN0cnVjdCBjaXBoZXJfdHlwZV90IHsKLSAgY2lwaGVyX2FsbG9jX2Z1bmNfdCAgICAgICAgIGFsbG9jOwotICBjaXBoZXJfZGVhbGxvY19mdW5jX3QgICAgICAgZGVhbGxvYzsKLSAgY2lwaGVyX2luaXRfZnVuY190ICAgICAgICAgIGluaXQ7Ci0gIGNpcGhlcl9lbmNyeXB0X2Z1bmNfdCAgICAgICBlbmNyeXB0OwotICBjaXBoZXJfZW5jcnlwdF9mdW5jX3QgICAgICAgZGVjcnlwdDsKLSAgY2lwaGVyX3NldF9pdl9mdW5jX3QgICAgICAgIHNldF9pdjsKLSAgY2hhciAgICAgICAgICAgICAgICAgICAgICAgKmRlc2NyaXB0aW9uOwotICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgcmVmX2NvdW50OwotICBjaXBoZXJfdGVzdF9jYXNlX3QgICAgICAgICAqdGVzdF9kYXRhOwotICBkZWJ1Z19tb2R1bGVfdCAgICAgICAgICAgICAqZGVidWc7Ci19IGNpcGhlcl90eXBlX3Q7CisvKiBzcnRwX2NpcGhlcl90eXBlX3QgZGVmaW5lcyB0aGUgJ21ldGFkYXRhJyBmb3IgYSBwYXJ0aWN1bGFyIGNpcGhlciB0eXBlICovCit0eXBlZGVmIHN0cnVjdCBzcnRwX2NpcGhlcl90eXBlX3QgeworICAgIHNydHBfY2lwaGVyX2FsbG9jX2Z1bmNfdCBhbGxvYzsKKyAgICBzcnRwX2NpcGhlcl9kZWFsbG9jX2Z1bmNfdCBkZWFsbG9jOworICAgIHNydHBfY2lwaGVyX2luaXRfZnVuY190IGluaXQ7CisgICAgc3J0cF9jaXBoZXJfc2V0X2FhZF9mdW5jX3Qgc2V0X2FhZDsKKyAgICBzcnRwX2NpcGhlcl9lbmNyeXB0X2Z1bmNfdCBlbmNyeXB0OworICAgIHNydHBfY2lwaGVyX2VuY3J5cHRfZnVuY190IGRlY3J5cHQ7CisgICAgc3J0cF9jaXBoZXJfc2V0X2l2X2Z1bmNfdCBzZXRfaXY7CisgICAgc3J0cF9jaXBoZXJfZ2V0X3RhZ19mdW5jX3QgZ2V0X3RhZzsKKyAgICBjb25zdCBjaGFyICpkZXNjcmlwdGlvbjsKKyAgICBjb25zdCBzcnRwX2NpcGhlcl90ZXN0X2Nhc2VfdCAqdGVzdF9kYXRhOworICAgIHNydHBfY2lwaGVyX3R5cGVfaWRfdCBpZDsKK30gc3J0cF9jaXBoZXJfdHlwZV90OwogCiAvKgotICogY2lwaGVyX3QgZGVmaW5lcyBhbiBpbnN0YW50aWF0aW9uIG9mIGEgcGFydGljdWxhciBjaXBoZXIsIHdpdGggZml4ZWQKKyAqIHNydHBfY2lwaGVyX3QgZGVmaW5lcyBhbiBpbnN0YW50aWF0aW9uIG9mIGEgcGFydGljdWxhciBjaXBoZXIsIHdpdGggZml4ZWQKICAqIGtleSBsZW5ndGgsIGtleSBhbmQgc2FsdCB2YWx1ZXMKICAqLwotCi10eXBlZGVmIHN0cnVjdCBjaXBoZXJfdCB7Ci0gIGNpcGhlcl90eXBlX3QgKnR5cGU7Ci0gIHZvaWQgICAgICAgICAgKnN0YXRlOwotICBpbnQgICAgICAgICAgICBrZXlfbGVuOwotI2lmIEZPUkNFXzY0QklUX0FMSUdOCi0gIGludCAgICAgICAgICAgIHBhZDsKLSNlbmRpZgotfSBjaXBoZXJfdDsKLQotLyogc29tZSBzeW50YWN0aWMgc3VnYXIgb24gdGhlc2UgZnVuY3Rpb24gdHlwZXMgKi8KLQotI2RlZmluZSBjaXBoZXJfdHlwZV9hbGxvYyhjdCwgYywga2xlbikgKChjdCktPmFsbG9jKChjKSwgKGtsZW4pKSkKLQotI2RlZmluZSBjaXBoZXJfZGVhbGxvYyhjKSAoKChjKS0+dHlwZSktPmRlYWxsb2MoYykpCi0KLSNkZWZpbmUgY2lwaGVyX2luaXQoYywgaywgZGlyKSAoKChjKS0+dHlwZSktPmluaXQoKChjKS0+c3RhdGUpLCAoayksIChkaXIpKSkKLQotI2RlZmluZSBjaXBoZXJfZW5jcnlwdChjLCBidWYsIGxlbikgXAotICAgICAgICAoKChjKS0+dHlwZSktPmVuY3J5cHQoKChjKS0+c3RhdGUpLCAoYnVmKSwgKGxlbikpKQotCi0jZGVmaW5lIGNpcGhlcl9kZWNyeXB0KGMsIGJ1ZiwgbGVuKSBcCi0gICAgICAgICgoKGMpLT50eXBlKS0+ZGVjcnlwdCgoKGMpLT5zdGF0ZSksIChidWYpLCAobGVuKSkpCi0KLSNkZWZpbmUgY2lwaGVyX3NldF9pdihjLCBuKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKChjKSA/ICgoKGMpLT50eXBlKS0+c2V0X2l2KCgoYyktPnN0YXRlKSwgKG4pKSkgOiAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyX3N0YXR1c19ub19zdWNoX29wKSAgCi0KLWVycl9zdGF0dXNfdAotY2lwaGVyX291dHB1dChjaXBoZXJfdCAqYywgb2N0ZXRfdCAqYnVmZmVyLCBpbnQgbnVtX29jdGV0c190b19vdXRwdXQpOwotCit0eXBlZGVmIHN0cnVjdCBzcnRwX2NpcGhlcl90IHsKKyAgICBjb25zdCBzcnRwX2NpcGhlcl90eXBlX3QgKnR5cGU7CisgICAgdm9pZCAqc3RhdGU7CisgICAgaW50IGtleV9sZW47CisgICAgaW50IGFsZ29yaXRobTsKK30gc3J0cF9jaXBoZXJfdDsKIAogLyogc29tZSBib29ra2VlcGluZyBmdW5jdGlvbnMgKi8KLQotaW50Ci1jaXBoZXJfZ2V0X2tleV9sZW5ndGgoY29uc3QgY2lwaGVyX3QgKmMpOwotCi0KLS8qIAotICogY2lwaGVyX3R5cGVfc2VsZl90ZXN0KCkgdGVzdHMgYSBjaXBoZXIgYWdhaW5zdCB0ZXN0IGNhc2VzIHByb3ZpZGVkIGluIAotICogYW4gYXJyYXkgb2YgdmFsdWVzIG9mIGtleS94dGRfc2VxX251bV90L3BsYWludGV4dC9jaXBoZXJ0ZXh0IAotICogdGhhdCBpcyBrbm93biB0byBiZSBnb29kCi0gKi8KLQotZXJyX3N0YXR1c190Ci1jaXBoZXJfdHlwZV9zZWxmX3Rlc3QoY29uc3QgY2lwaGVyX3R5cGVfdCAqY3QpOwotCitpbnQgc3J0cF9jaXBoZXJfZ2V0X2tleV9sZW5ndGgoY29uc3Qgc3J0cF9jaXBoZXJfdCAqYyk7CiAKIC8qCi0gKiBjaXBoZXJfYml0c19wZXJfc2Vjb25kKGMsIGwsIHQpIGNvbXB1dGVzIChhbmQgZXN0aW1hdGUgb2YpIHRoZQorICogc3J0cF9jaXBoZXJfdHlwZV9zZWxmX3Rlc3QoKSB0ZXN0cyBhIGNpcGhlciBhZ2FpbnN0IHRlc3QgY2FzZXMgcHJvdmlkZWQgaW4KKyAqIGFuIGFycmF5IG9mIHZhbHVlcyBvZiBrZXkvc3J0cF94dGRfc2VxX251bV90L3BsYWludGV4dC9jaXBoZXJ0ZXh0CisgKiB0aGF0IGlzIGtub3duIHRvIGJlIGdvb2QKKyAqLworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9jaXBoZXJfdHlwZV9zZWxmX3Rlc3QoY29uc3Qgc3J0cF9jaXBoZXJfdHlwZV90ICpjdCk7CisKKy8qCisgKiBzcnRwX2NpcGhlcl90eXBlX3Rlc3QoKSB0ZXN0cyBhIGNpcGhlciBhZ2FpbnN0IGV4dGVybmFsIHRlc3QgY2FzZXMgcHJvdmlkZWQKKyAqIGluCisgKiBhbiBhcnJheSBvZiB2YWx1ZXMgb2Yga2V5L3NydHBfeHRkX3NlcV9udW1fdC9wbGFpbnRleHQvY2lwaGVydGV4dAorICogdGhhdCBpcyBrbm93biB0byBiZSBnb29kCisgKi8KK3NydHBfZXJyX3N0YXR1c190IHNydHBfY2lwaGVyX3R5cGVfdGVzdCgKKyAgICBjb25zdCBzcnRwX2NpcGhlcl90eXBlX3QgKmN0LAorICAgIGNvbnN0IHNydHBfY2lwaGVyX3Rlc3RfY2FzZV90ICp0ZXN0X2RhdGEpOworCisvKgorICogc3J0cF9jaXBoZXJfYml0c19wZXJfc2Vjb25kKGMsIGwsIHQpIGNvbXB1dGVzIChhbiBlc3RpbWF0ZSBvZikgdGhlCiAgKiBudW1iZXIgb2YgYml0cyB0aGF0IGEgY2lwaGVyIGltcGxlbWVudGF0aW9uIGNhbiBlbmNyeXB0IGluIGEgc2Vjb25kCi0gKiAKKyAqCiAgKiBjIGlzIGEgY2lwaGVyICh3aGljaCBNVVNUIGJlIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgYWxyZWFkeSksIGwKICAqIGlzIHRoZSBsZW5ndGggaW4gb2N0ZXRzIG9mIHRoZSB0ZXN0IGRhdGEgdG8gYmUgZW5jcnlwdGVkLCBhbmQgdCBpcwogICogdGhlIG51bWJlciBvZiB0cmlhbHMKICAqCi0gKiBpZiBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZCwgdGhlbiB0aGUgdmFsdWUgMC4wIGlzIHJldHVybmVkCisgKiBpZiBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZCwgdGhlbiB0aGUgdmFsdWUgMCBpcyByZXR1cm5lZAogICovCit1aW50NjRfdCBzcnRwX2NpcGhlcl9iaXRzX3Blcl9zZWNvbmQoc3J0cF9jaXBoZXJfdCAqYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2N0ZXRzX2luX2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3RyaWFscyk7CiAKLWRvdWJsZQotY2lwaGVyX2JpdHNfcGVyX3NlY29uZChjaXBoZXJfdCAqYywgaW50IG9jdGV0c19pbl9idWZmZXIsIGludCBudW1fdHJpYWxzKTsKK3NydHBfZXJyX3N0YXR1c190IHNydHBfY2lwaGVyX3R5cGVfYWxsb2MoY29uc3Qgc3J0cF9jaXBoZXJfdHlwZV90ICpjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9jaXBoZXJfdCAqKmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXlfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGxlbik7CitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2NpcGhlcl9kZWFsbG9jKHNydHBfY2lwaGVyX3QgKmMpOworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9jaXBoZXJfaW5pdChzcnRwX2NpcGhlcl90ICpjLCBjb25zdCB1aW50OF90ICprZXkpOworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9jaXBoZXJfc2V0X2l2KHNydHBfY2lwaGVyX3QgKmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRpcmVjdGlvbik7CitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2NpcGhlcl9vdXRwdXQoc3J0cF9jaXBoZXJfdCAqYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKm51bV9vY3RldHNfdG9fb3V0cHV0KTsKK3NydHBfZXJyX3N0YXR1c190IHNydHBfY2lwaGVyX2VuY3J5cHQoc3J0cF9jaXBoZXJfdCAqYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqbnVtX29jdGV0c190b19vdXRwdXQpOworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9jaXBoZXJfZGVjcnlwdChzcnRwX2NpcGhlcl90ICpjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpudW1fb2N0ZXRzX3RvX291dHB1dCk7CitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2NpcGhlcl9nZXRfdGFnKHNydHBfY2lwaGVyX3QgKmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnRhZ19sZW4pOworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9jaXBoZXJfc2V0X2FhZChzcnRwX2NpcGhlcl90ICpjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFhZF9sZW4pOwogCi0jZW5kaWYgLyogQ0lQSEVSX0ggKi8KKy8qCisgKiBzcnRwX3JlcGxhY2VfY2lwaGVyX3R5cGUoY3QsIGlkKQorICoKKyAqIHJlcGxhY2VzIHNydHAncyBleGlzdGluZyBjaXBoZXIgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBjaXBoZXJfdHlwZSBpZAorICogd2l0aCBhIG5ldyBvbmUgcGFzc2VkIGluIGV4dGVybmFsbHkuICBUaGUgbmV3IGNpcGhlciBtdXN0IHBhc3MgYWxsIHRoZQorICogZXhpc3RpbmcgY2lwaGVyX3R5cGUncyBzZWxmIHRlc3RzIGFzIHdlbGwgYXMgaXRzIG93bi4KKyAqLworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9yZXBsYWNlX2NpcGhlcl90eXBlKGNvbnN0IHNydHBfY2lwaGVyX3R5cGVfdCAqY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9jaXBoZXJfdHlwZV9pZF90IGlkKTsKIAorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIFNSVFBfQ0lQSEVSX0ggKi8KZGlmZiAtLWdpdCBhL2NyeXB0by9pbmNsdWRlL2NpcGhlcl9wcml2LmggYi9jcnlwdG8vaW5jbHVkZS9jaXBoZXJfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ODQ4ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vaW5jbHVkZS9jaXBoZXJfcHJpdi5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDEtMjAxNyBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgU1JUUF9DSUhQRVJfUFJJVl9ICisjZGVmaW5lIFNSVFBfQ0lIUEVSX1BSSVZfSAorCisjaW5jbHVkZSAiY2lwaGVyLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoKKyAqIEEgdHJpdmlhbCBwbGF0Zm9ybSBpbmRlcGVuZGVudCByYW5kb20gc291cmNlLgorICogRm9yIHVzZSBpbiB0ZXN0IG9ubHkuCisgKi8KK3ZvaWQgc3J0cF9jaXBoZXJfcmFuZF9mb3JfdGVzdHModm9pZCAqZGVzdCwgdWludDMyX3QgbGVuKTsKKworLyoKKyAqIEEgdHJpdmlhbCBwbGF0Zm9ybSBpbmRlcGVuZGVudCAzMiBiaXQgcmFuZG9tIG51bWJlci4KKyAqIEZvciB1c2UgaW4gdGVzdCBvbmx5LgorICovCit1aW50MzJfdCBzcnRwX2NpcGhlcl9yYW5kX3UzMl9mb3JfdGVzdHModm9pZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBTUlRQX0NJUEhFUl9QUklWX0ggKi8KZGlmZiAtLWdpdCBhL2NyeXB0by9pbmNsdWRlL2NpcGhlcl90eXBlcy5oIGIvY3J5cHRvL2luY2x1ZGUvY2lwaGVyX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThmMDMyOAotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9pbmNsdWRlL2NpcGhlcl90eXBlcy5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDEtMjAxNyBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgQ0lIUEVSX1RZUEVTX0gKKyNkZWZpbmUgQ0lIUEVSX1RZUEVTX0gKKworI2luY2x1ZGUgImNpcGhlci5oIgorI2luY2x1ZGUgImF1dGguaCIKKworLyoKKyAqIGNpcGhlciB0eXBlcyB0aGF0IGNhbiBiZSBpbmNsdWRlZCBpbiB0aGUga2VybmVsCisgKi8KKworZXh0ZXJuIGNvbnN0IHNydHBfY2lwaGVyX3R5cGVfdCBzcnRwX251bGxfY2lwaGVyOworZXh0ZXJuIGNvbnN0IHNydHBfY2lwaGVyX3R5cGVfdCBzcnRwX2Flc19pY21fMTI4OworZXh0ZXJuIGNvbnN0IHNydHBfY2lwaGVyX3R5cGVfdCBzcnRwX2Flc19pY21fMjU2OworI2lmZGVmIEdDTQorZXh0ZXJuIGNvbnN0IHNydHBfY2lwaGVyX3R5cGVfdCBzcnRwX2Flc19pY21fMTkyOworZXh0ZXJuIGNvbnN0IHNydHBfY2lwaGVyX3R5cGVfdCBzcnRwX2Flc19nY21fMTI4OworZXh0ZXJuIGNvbnN0IHNydHBfY2lwaGVyX3R5cGVfdCBzcnRwX2Flc19nY21fMjU2OworI2VuZGlmCisKKy8qCisgKiBhdXRoIGZ1bmMgdHlwZXMgdGhhdCBjYW4gYmUgaW5jbHVkZWQgaW4gdGhlIGtlcm5lbAorICovCisKK2V4dGVybiBjb25zdCBzcnRwX2F1dGhfdHlwZV90IHNydHBfbnVsbF9hdXRoOworZXh0ZXJuIGNvbnN0IHNydHBfYXV0aF90eXBlX3Qgc3J0cF9obWFjOworCisvKgorICogb3RoZXIgZ2VuZXJpYyBkZWJ1ZyBtb2R1bGVzIHRoYXQgY2FuIGJlIGluY2x1ZGVkIGluIHRoZSBrZXJuZWwKKyAqLworCitleHRlcm4gc3J0cF9kZWJ1Z19tb2R1bGVfdCBzcnRwX21vZF9hdXRoOworZXh0ZXJuIHNydHBfZGVidWdfbW9kdWxlX3Qgc3J0cF9tb2RfY2lwaGVyOworZXh0ZXJuIHNydHBfZGVidWdfbW9kdWxlX3Qgc3J0cF9tb2Rfc3RhdDsKK2V4dGVybiBzcnRwX2RlYnVnX21vZHVsZV90IHNydHBfbW9kX2FsbG9jOworCisvKiBkZWJ1ZyBtb2R1bGVzIGZvciBjaXBoZXIgdHlwZXMgKi8KK2V4dGVybiBzcnRwX2RlYnVnX21vZHVsZV90IHNydHBfbW9kX2Flc19pY207CisjaWZkZWYgT1BFTlNTTAorZXh0ZXJuIHNydHBfZGVidWdfbW9kdWxlX3Qgc3J0cF9tb2RfYWVzX2djbTsKKyNlbmRpZgorI2lmZGVmIE5TUworZXh0ZXJuIHNydHBfZGVidWdfbW9kdWxlX3Qgc3J0cF9tb2RfYWVzX2djbTsKKyNlbmRpZgorCisvKiBkZWJ1ZyBtb2R1bGVzIGZvciBhdXRoIHR5cGVzICovCitleHRlcm4gc3J0cF9kZWJ1Z19tb2R1bGVfdCBzcnRwX21vZF9obWFjOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NyeXB0by9pbmNsdWRlL2NvbmZpZy5oIGIvY3J5cHRvL2luY2x1ZGUvY29uZmlnLmgKaW5kZXggMmRlZTE3MS4uMzMzY2Y0MyAxMDA2NDQKLS0tIGEvY3J5cHRvL2luY2x1ZGUvY29uZmlnLmgKKysrIGIvY3J5cHRvL2luY2x1ZGUvY29uZmlnLmgKQEAgLTEsMTIxICsxLDE5NyBAQAotLyogaW5jbHVkZS9jb25maWcuaC4gIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGNvbmZpZ3VyZS4gICovCi0vKgotICogY29uZmlnLmgKLSAqCi0gKiB0ZW1wbGF0ZSBmb3IgaGVhZGVyIGNvbmZpZyBmaWxlIGZvciBTZWN1cmUgUlRQIGFuZCBVU1QgaW1wbGVtZW50YXRpb24KLSAqCi0gKiBEYXZpZCBBLiBNY0dyZXcKLSAqIENpc2NvIFN5c3RlbXMsIEluYy4KLSAqLworLyogY3J5cHRvL2luY2x1ZGUvY29uZmlnLmguICBHZW5lcmF0ZWQgZnJvbSBjb25maWdfaW4uaCBieSBjb25maWd1cmUuICAqLworLyogY29uZmlnX2luLmguICBHZW5lcmF0ZWQgZnJvbSBjb25maWd1cmUuYWMgYnkgYXV0b2hlYWRlci4gICovCiAKKy8qIERlZmluZSBpZiBidWlsZGluZyB1bml2ZXJzYWwgKGludGVybmFsIGhlbHBlciBtYWNybykgKi8KKy8qICN1bmRlZiBBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQgKi8KIAotI2lmbmRlZiBDT05GSUdfSAotI2RlZmluZSBDT05GSUdfSAorLyogRGVmaW5lIGlmIGJ1aWxkaW5nIGZvciBhIENJU0MgbWFjaGluZSAoZS5nLiBJbnRlbCkuICovCisjZGVmaW5lIENQVV9DSVNDIDEKIAotLyogaWYgd2UncmUgb24gYSBiaWcgZW5kaWFuIG1hY2hpbmUsIHdlIG5lZWQgdG8gZGVmaW5lIHRoaXMgKi8KKy8qIERlZmluZSBpZiBidWlsZGluZyBmb3IgYSBSSVNDIG1hY2hpbmUgKGFzc3VtZSBzbG93IGJ5dGUgYWNjZXNzKS4gKi8KKy8qICN1bmRlZiBDUFVfUklTQyAqLwogCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgKEJZVEVfT1JERVIgPT0gQklHX0VORElBTikKLSNkZWZpbmUgV09SRFNfQklHRU5ESUFOICAgICAgMQotI2Vsc2UKLSNkZWZpbmUgV09SRFNfQklHRU5ESUFOICAgICAgMAotI2VuZGlmCisvKiBEZWZpbmUgdG8gZW5hYmxlZCBkZWJ1ZyBsb2dnaW5nIGZvciBhbGwgbXVkdWxlcy4gKi8KKy8qICN1bmRlZiBFTkFCTEVfREVCVUdfTE9HR0lORyAqLwogCi0vKiBjaGVjayBmb3IgPHN0ZGludC5oPiBvciA8bWFjaGluZS90eXBlcy5oPiAgICAgICAgICAgICAgKi8KKy8qIExvZ2dpbmcgc3RhdG1lbnRzIHdpbGwgYmUgd3JpdGVuIHRvIHRoaXMgZmlsZS4gKi8KKy8qICN1bmRlZiBFUlJfUkVQT1JUSU5HX0ZJTEUgKi8KIAotI2RlZmluZSBIQVZFX1NURElOVF9IICAgICAgICAxCi0jZGVmaW5lIEhBVkVfTUFDSElORV9UWVBFU19IIDEKLSNkZWZpbmUgSEFWRV9TWVNfSU5UX1RZUEVTX0ggMAorLyogRGVmaW5lIHRvIHJlZGlyZWN0IGxvZ2dpbmcgdG8gc3Rkb3V0LiAqLworLyogI3VuZGVmIEVSUl9SRVBPUlRJTkdfU1RET1VUICovCiAKLS8qIGNoZWNrIGZvciBtaWNyb3NvZnQgaW50ZWdlciBkZWZpbml0aW9ucyAoZS5nLiwgY3lnd2luKSAqLworLyogRGVmaW5lIHRoaXMgdG8gdXNlIEFFUy1HQ00uICovCisvKiAjdW5kZWYgR0NNICovCiAKLSNkZWZpbmUgSEFWRV9NU19UWVBFUyAgICAgICAgMQorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxhcnBhL2luZXQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfQVJQQV9JTkVUX0ggMQogCi0vKiBpZiB3ZSBkb24ndCBoYXZlIHVpby5oLCB3ZSdsbCBuZWVkIHRvIGRlZmluZSBzdHJ1Y3QgaW92ZWMgKi8KKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Ynl0ZXN3YXAuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfQllURVNXQVBfSCAxCiAKLSNkZWZpbmUgSEFWRV9TWVNfVUlPX0ggICAgICAgMQorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpbmV0X2F0b24nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0lORVRfQVRPTiAxCiAKLS8qIDx1bmlzdGQuaD4gaXMgdXNlZCBieSBzb21lIHRlc3QvIGFwcHMgICAgICAgICAgICAgICAgICAqLworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYGludDE2X3QnLiAqLworI2RlZmluZSBIQVZFX0lOVDE2X1QgMQogCi0jZGVmaW5lIEhBVkVfVU5JU1REX0ggICAgICAgIDEKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBpbnQzMl90Jy4gKi8KKyNkZWZpbmUgSEFWRV9JTlQzMl9UIDEKIAotLyogdGVzdCBhcHBzIHNob3VsZCB1c2UgaW5ldF9hdG9uKCksIGlmIGl0J3MgYXZhaWxhYmxlICovCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgaW50OF90Jy4gKi8KKyNkZWZpbmUgSEFWRV9JTlQ4X1QgMQogCi0jZGVmaW5lIEhBVkVfSU5FVF9BVE9OICAgICAgIDEKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfSU5UVFlQRVNfSCAxCiAKLS8qIGNoZWNrIGlmIHdlIGhhdmUgc3lzbG9nIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAqLworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBkbCcgbGlicmFyeSAoLWxkbCkuICovCisvKiAjdW5kZWYgSEFWRV9MSUJETCAqLwogCi0jZGVmaW5lIEhBVkVfU1lTTE9HX0ggICAgICAgIDEKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbnNwcjQnIGxpYnJhcnkgKC1sbnNwcjQpLiAqLworLyogI3VuZGVmIEhBVkVfTElCTlNQUjQgKi8KIAotLyogY2hlY2sgdG8gc2VlIGlmIHRoZSB1c2VyIGhhcyByZXF1ZXN0ZWQgdGhlIHVzZSBvZiBzeXNsb2cgKi8KKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbnNzMycgbGlicmFyeSAoLWxuc3MzKS4gKi8KKy8qICN1bmRlZiBIQVZFX0xJQk5TUzMgKi8KIAotI2RlZmluZSBVU0VfU1lTTE9HICAgICAgICAgICAwCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNvY2tldCcgbGlicmFyeSAoLWxzb2NrZXQpLiAqLworLyogI3VuZGVmIEhBVkVfTElCU09DS0VUICovCiAKLSNkZWZpbmUgRVJSX1JFUE9SVElOR19TVERPVVQgMQorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB6JyBsaWJyYXJ5ICgtbHopLiAqLworLyogI3VuZGVmIEhBVkVfTElCWiAqLwogCi0jZGVmaW5lIEVSUl9SRVBPUlRJTkdfU1lTTE9HIChIQVZFX1NZU0xPR19IICYgVVNFX1NZU0xPRykKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWFjaGluZS90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX01BQ0hJTkVfVFlQRVNfSCAqLwogCi0vKiBkZWZpbmUgRVJSX1JFUE9SVElOR19GSUxFIHRvIGhhdmUgbWVzc2FnZXMgc2VudCB0byBmaWxlICovCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1lbW9yeS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9NRU1PUllfSCAxCiAKLSNkZWZpbmUgRVJSX1JFUE9SVElOR19GSUxFIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L2luLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX05FVElORVRfSU5fSCAxCiAKLS8qIAotICogc2V0IEVOQUJMRV9ERUJVR0dJTkcgdG8gMSB0byBjb21waWxlIGluIGR5bmFtaWMgZGVidWdnaW5nIHN5c3RlbSwKLSAqIHNldCBpdCB0byAwIHRvIG5vdCBjb21waWxlIGluIGR5bmFtaWMgZGVidWdnaW5nIChmb3IgYSBzbGlnaHQKLSAqIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50KQotICovCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5zcy5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX05TU19IICovCiAKLSNkZWZpbmUgRU5BQkxFX0RFQlVHR0lORyAgICAgMQorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB3aW5wY2FwJyBsaWJyYXJ5ICgtbHdwY2FwKSAqLworLyogI3VuZGVmIEhBVkVfUENBUCAqLwogCi0vKiBpZiB3ZSdyZSBnb2luZyB0byB1c2UgR0RPSSwgZGVmaW5lIFNSVFBfR0RPSSB0byAxICAgICAgKi8KKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2lnYWN0aW9uJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TSUdBQ1RJT04gMQogCi0jZGVmaW5lIFNSVFBfR0RPSSAgICAgICAgICAgIDAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc29ja2V0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TT0NLRVQgMQogCi0vKgotICogQ1BVX3R5cGUgaXMgZGVmaW5lZCBhcyAxIGlmIHRoZSBob3N0IHByb2Nlc3NvciBpcyBvZiB0aGF0IHR5cGUuCi0gKiBOb3RlIHRoYXQgbW9yZSB0aGFuIG9uZSB0eXBlIGNhbiBiZSBkZWZpbmVkIGF0IG9uY2U7IHRoaXMgaXMgc28KLSAqIHRoYXQgc3BlY2lhbCBpbnN0cnVjdGlvbnMgYW5kIG90aGVyIG9wdGltaXphdGlvbnMgY2FuIGJlIGhhbmRsZWQKLSAqIGluZGVwZW5kZW50bHkuCi0gKiAKLSAqIENQVV9SSVNDICAgICBSSVNDIG1hY2hpbmVzIChhc3N1bWUgc2xvdyBieXRlIGFjY2VzcykKLSAqIENQVV9DSVNDICAgICBDSVNDIG1hY2hpbmVzIChlLmcuIEludGVsKQotICogCi0gKi8KKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NURElOVF9IIDEKIAotI2lmIFdPUkRTX0JJR0VORElBTgotI2RlZmluZSBDUFVfUklTQyAgICAgMQotI2Vsc2UKLSNkZWZpbmUgQ1BVX0NJU0MgICAgIDEKLSNlbmRpZgotCi0vKgotICogZGVmaW5lIENQVV8xNiBpZiBjcnlwdG9hbGdvcml0aG1zIHNob3VsZCB1c2UgMTYtYml0IG9wZXJhdGlvbnMgLQotICogdGhpcyBpcyBwcm9iYWJseSBvbmx5IHRoZSBjYXNlIG9uIHZlcnkgbG93LWVuZCBkZXZpY2VzCi0gKi8KLSNkZWZpbmUgQ1BVXzE2ICAgICAgIDAKLQotLyogCi0gKiBkZWZpbmUgQ1BVX0FMVElWRUMgaW4gb3JkZXIgdG8gdXNlIHRoZSBHNC9HNSBwcm9jZXNzb3IncyBBbHRpVmVjCi0gKiBTSU1EIGluc3RydWN0aW9uIHNldCB3aGVyZSBwb3NzaWJsZQotICovCi0jZGVmaW5lIENQVV9BTFRJVkVDICAwCi0KLQotLyoKLSAqIGlmIC9kZXYvcmFuZG9tIGlzIGF2YWlsYWJsZSwgdGhlbiBERVZfUkFORE9NID09IDEKLSAqCi0gKiAvZGV2L3JhbmRvbSBpcyBhICh0cnVlKSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB3aGljaCBpcwotICogaW1wbGVtZW50ZWQgaW4gbWFueSBtb2Rlcm4gb3BlcmF0aW5nIHN5c3RlbXMKLSAqLwotCi0jZGVmaW5lIERFVl9SQU5ET00gMAotCi0vKiBjaGVjayBmb3Igc3RkbGliLmggLSB3ZSB1c2UgaXQgZm9yIGFsbG9jKCkgYW5kIGZyZWUoKSAqLwotCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9TVERMSUJfSCAxCiAKLSNlbmRpZiAvKiBDT05GSUdfSCAqLworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NUUklOR1NfSCAxCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5nLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NUUklOR19IIDEKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvaW50X3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfU1lTX0lOVF9UWVBFU19IICovCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NvY2tldC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfU09DS0VUX0ggMQogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zdGF0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3Vpby5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfVUlPX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgdWludDE2X3QnLiAqLworI2RlZmluZSBIQVZFX1VJTlQxNl9UIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHVpbnQzMl90Jy4gKi8KKyNkZWZpbmUgSEFWRV9VSU5UMzJfVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGB1aW50NjRfdCcuICovCisjZGVmaW5lIEhBVkVfVUlOVDY0X1QgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgdWludDhfdCcuICovCisjZGVmaW5lIEhBVkVfVUlOVDhfVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1VOSVNURF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1c2xlZXAnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1VTTEVFUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d2luZG93cy5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1dJTkRPV1NfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHdpbnNvY2syLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfV0lOU09DSzJfSCAqLworCisvKiBEZWZpbmUgdG8gdXNlIFg4NiBpbmxpbmVkIGFzc2VtYmx5IGNvZGUgKi8KKyNkZWZpbmUgSEFWRV9YODYgMQorCisvKiBEZWZpbmUgdGhpcyB0byB1c2UgTlNTIGNyeXB0by4gKi8KKy8qICN1bmRlZiBOU1MgKi8KKworLyogRGVmaW5lIHRoaXMgdG8gdXNlIE9wZW5TU0wgY3J5cHRvLiAqLworLyogI3VuZGVmIE9QRU5TU0wgKi8KKworLyogRGVmaW5lIHRoaXMgaWYgT1BFTlNTTF9jbGVhbnNlIGlzIGJyb2tlbi4gKi8KKy8qICN1bmRlZiBPUEVOU1NMX0NMRUFOU0VfQlJPS0VOICovCisKKy8qIERlZmluZSB0aGlzIHRvIHVzZSBPcGVuU1NMIEtERiBmb3IgU1JUUC4gKi8KKy8qICN1bmRlZiBPUEVOU1NMX0tERiAqLworCisvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KKyNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgImh0dHBzOi8vZ2l0aHViLmNvbS9jaXNjby9saWJzcnRwL2lzc3VlcyIKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX05BTUUgImxpYnNydHAyIgorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBhbmQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICJsaWJzcnRwMiAyLjMuMC1wcmUiCisKKy8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICJsaWJzcnRwMiIKKworLyogRGVmaW5lIHRvIHRoZSBob21lIHBhZ2UgZm9yIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9VUkwgIiIKKworLyogRGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIyLjMuMC1wcmUiCisKKy8qIFRoZSBzaXplIG9mIGB1bnNpZ25lZCBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfVU5TSUdORURfTE9ORyA4CisKKy8qIFRoZSBzaXplIG9mIGB1bnNpZ25lZCBsb25nIGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9VTlNJR05FRF9MT05HX0xPTkcgOAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRlciBmaWxlcy4gKi8KKyNkZWZpbmUgU1REQ19IRUFERVJTIDEKKworLyogRGVmaW5lIFdPUkRTX0JJR0VORElBTiB0byAxIGlmIHlvdXIgcHJvY2Vzc29yIHN0b3JlcyB3b3JkcyB3aXRoIHRoZSBtb3N0CisgICBzaWduaWZpY2FudCBieXRlIGZpcnN0IChsaWtlIE1vdG9yb2xhIGFuZCBTUEFSQywgdW5saWtlIEludGVsKS4gKi8KKyNpZiBkZWZpbmVkIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRAorIyBpZiBkZWZpbmVkIF9fQklHX0VORElBTl9fCisjICBkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEKKyMgZW5kaWYKKyNlbHNlCisjIGlmbmRlZiBXT1JEU19CSUdFTkRJQU4KKy8qICMgIHVuZGVmIFdPUkRTX0JJR0VORElBTiAqLworIyBlbmRpZgorI2VuZGlmCisKKy8qIERlZmluZSB0byBlbXB0eSBpZiBgY29uc3QnIGRvZXMgbm90IGNvbmZvcm0gdG8gQU5TSSBDLiAqLworLyogI3VuZGVmIGNvbnN0ICovCisKKy8qIERlZmluZSB0byBgX19pbmxpbmVfXycgb3IgYF9faW5saW5lJyBpZiB0aGF0J3Mgd2hhdCB0aGUgQyBjb21waWxlcgorICAgY2FsbHMgaXQsIG9yIHRvIG5vdGhpbmcgaWYgJ2lubGluZScgaXMgbm90IHN1cHBvcnRlZCB1bmRlciBhbnkgbmFtZS4gICovCisjaWZuZGVmIF9fY3BsdXNwbHVzCisvKiAjdW5kZWYgaW5saW5lICovCisjZW5kaWYKKworLyogRGVmaW5lIHRvIGB1bnNpZ25lZCBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworLyogI3VuZGVmIHNpemVfdCAqLwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2luY2x1ZGUvY3J5cHRvLmggYi9jcnlwdG8vaW5jbHVkZS9jcnlwdG8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM1MjgyMS4uMDAwMDAwMAotLS0gYS9jcnlwdG8vaW5jbHVkZS9jcnlwdG8uaAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qCi0gKiBjcnlwdG8uaAotICoKLSAqIEFQSSBmb3IgbGliY3J5cHRvCi0gKiAKLSAqIERhdmlkIEEuIE1jR3JldwotICogQ2lzY28gU3lzdGVtcywgSW5jLgotICovCi0KLSNpZm5kZWYgQ1JZUFRPX0gKLSNkZWZpbmUgQ1JZUFRPX0gKLQotI2luY2x1ZGUgImNyeXB0b19rZXJuZWwuaCIKLQotI2VuZGlmIC8qIENSWVBUT19IICovCi0KLQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2luY2x1ZGUvY3J5cHRvX2tlcm5lbC5oIGIvY3J5cHRvL2luY2x1ZGUvY3J5cHRvX2tlcm5lbC5oCmluZGV4IDBmM2Y3ZWUuLjFmOGRmYTcgMTAwNjQ0Ci0tLSBhL2NyeXB0by9pbmNsdWRlL2NyeXB0b19rZXJuZWwuaAorKysgYi9jcnlwdG8vaW5jbHVkZS9jcnlwdG9fa2VybmVsLmgKQEAgLTcsMjYgKzcsMjYgQEAKICAqIENpc2NvIFN5c3RlbXMsIEluYy4KICAqLwogLyoKLSAqCQotICogQ29weXJpZ2h0KGMpIDIwMDEtMjAwNSBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDEtMjAxNyBDaXNjbyBTeXN0ZW1zLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwogICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKICAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCisgKgogICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAogICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKKyAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKQEAgLTQyLDIwICs0MiwxOCBAQAogICoKICAqLwogCi0KICNpZm5kZWYgQ1JZUFRPX0tFUk5FTAogI2RlZmluZSBDUllQVE9fS0VSTkVMCiAKLSNpbmNsdWRlICJyYW5kX3NvdXJjZS5oIiAgICAgICAKLSNpbmNsdWRlICJwcm5nLmgiCi0jaW5jbHVkZSAiY2lwaGVyLmgiICAgIAorI2luY2x1ZGUgImNpcGhlci5oIgogI2luY2x1ZGUgImF1dGguaCIKLSNpbmNsdWRlICJjcnlwdG9hbGcuaCIKLSNpbmNsdWRlICJzdGF0LmgiCiAjaW5jbHVkZSAiZXJyLmgiCiAjaW5jbHVkZSAiY3J5cHRvX3R5cGVzLmgiCiAjaW5jbHVkZSAia2V5LmgiCiAKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKIAogLyoKICAqIGNyeXB0b19rZXJuZWxfc3RhdGVfdCBkZWZpbmVzIHRoZSBwb3NzaWJsZSBzdGF0ZXM6CkBAIC02Myw3MSArNjEsMzYgQEAKICAqICAgIGluc2VjdXJlIC0gbm90IHlldCBpbml0aWFsaXplZAogICogICAgc2VjdXJlICAgLSBpbml0aWFsaXplZCBhbmQgcGFzc2VkIHNlbGYtdGVzdHMKICAqLwotCiB0eXBlZGVmIGVudW0gewotICBjcnlwdG9fa2VybmVsX3N0YXRlX2luc2VjdXJlLAotICBjcnlwdG9fa2VybmVsX3N0YXRlX3NlY3VyZQotfSBjcnlwdG9fa2VybmVsX3N0YXRlX3Q7Ci0KLQotLyoqIAotICogIEBicmllZiBBIGNpcGhlcl90eXBlX2lkX3QgaXMgYW4gaWRlbnRpZmllciBmb3IgYSBwYXJ0aWN1bGFyIGNpcGhlcgotICogIHR5cGUuCi0gKgotICogIEEgY2lwaGVyX3R5cGVfaWRfdCBpcyBhbiBpbnRlZ2VyIHRoYXQgcmVwcmVzZW50cyBhIHBhcnRpY3VsYXIKLSAqICBjaXBoZXIgdHlwZSwgZS5nLiB0aGUgQWR2YW5jZWQgRW5jcnlwdGlvbiBTdGFuZGFyZCAoQUVTKS4gIEEKLSAqICBOVUxMX0NJUEhFUiBpcyBhdmFsaWFibGU7IHRoaXMgY2lwaGVyIGxlYXZlcyB0aGUgZGF0YSB1bmNoYW5nZWQsCi0gKiAgYW5kIGNhbiBiZSBzZWxlY3RlZCB0byBpbmRpY2F0ZSB0aGF0IG5vIGVuY3J5cHRpb24gaXMgdG8gdGFrZQotICogIHBsYWNlLgotICogCi0gKiAgQGluZ3JvdXAgQ2lwaGVycwotICovCi10eXBlZGVmIHVpbnQzMl90IGNpcGhlcl90eXBlX2lkX3Q7IAotCi0vKioKLSAqICBAYnJpZWYgQW4gYXV0aF90eXBlX2lkX3QgaXMgYW4gaWRlbnRpZmllciBmb3IgYSBwYXJ0aWN1bGFyIGF1dGhlbnRpY2F0aW9uCi0gKiAgIGZ1bmN0aW9uLgotICoKLSAqICBBbiBhdXRoX3R5cGVfaWRfdCBpcyBhbiBpbnRlZ2VyIHRoYXQgcmVwcmVzZW50cyBhIHBhcnRpY3VsYXIKLSAqICBhdXRoZW50aWNhdGlvbiBmdW5jdGlvbiB0eXBlLCBlLmcuIEhNQUMtU0hBMS4gIEEgTlVMTF9BVVRIIGlzCi0gKiAgYXZhbGlhYmxlOyB0aGlzIGF1dGhlbnRpY2F0aW9uIGZ1bmN0aW9uIHBlcmZvcm1zIG5vIGNvbXB1dGF0aW9uLAotICogIGFuZCBjYW4gYmUgc2VsZWN0ZWQgdG8gaW5kaWNhdGUgdGhhdCBubyBhdXRoZW50aWNhdGlvbiBpcyB0byB0YWtlCi0gKiAgcGxhY2UuCi0gKiAgCi0gKiAgQGluZ3JvdXAgQXV0aGVudGljYXRpb24KLSAqLwotdHlwZWRlZiB1aW50MzJfdCBhdXRoX3R5cGVfaWRfdDsKLQotCi0vKiAKLSAqIGxpbmtlZCBsaXN0IG9mIGNpcGhlciB0eXBlcyAKLSAqLwotCi10eXBlZGVmIHN0cnVjdCBrZXJuZWxfY2lwaGVyX3R5cGUgewotICBjaXBoZXJfdHlwZV9pZF90ICBpZDsKLSAgY2lwaGVyX3R5cGVfdCAgICAqY2lwaGVyX3R5cGU7Ci0gIHN0cnVjdCBrZXJuZWxfY2lwaGVyX3R5cGUgKm5leHQ7Ci19IGtlcm5lbF9jaXBoZXJfdHlwZV90OwotCi0vKiAKLSAqIGxpbmtlZCBsaXN0IG9mIGF1dGggdHlwZXMgCi0gKi8KLQotdHlwZWRlZiBzdHJ1Y3Qga2VybmVsX2F1dGhfdHlwZSB7Ci0gIGF1dGhfdHlwZV9pZF90ICBpZDsKLSAgYXV0aF90eXBlX3QgICAgKmF1dGhfdHlwZTsKLSAgc3RydWN0IGtlcm5lbF9hdXRoX3R5cGUgKm5leHQ7Ci19IGtlcm5lbF9hdXRoX3R5cGVfdDsKKyAgICBzcnRwX2NyeXB0b19rZXJuZWxfc3RhdGVfaW5zZWN1cmUsCisgICAgc3J0cF9jcnlwdG9fa2VybmVsX3N0YXRlX3NlY3VyZQorfSBzcnRwX2NyeXB0b19rZXJuZWxfc3RhdGVfdDsKIAogLyoKLSAqIGxpbmtlZCBsaXN0IG9mIGRlYnVnIG1vZHVsZXMgCisgKiBsaW5rZWQgbGlzdCBvZiBjaXBoZXIgdHlwZXMKICAqLwordHlwZWRlZiBzdHJ1Y3Qgc3J0cF9rZXJuZWxfY2lwaGVyX3R5cGUgeworICAgIHNydHBfY2lwaGVyX3R5cGVfaWRfdCBpZDsKKyAgICBjb25zdCBzcnRwX2NpcGhlcl90eXBlX3QgKmNpcGhlcl90eXBlOworICAgIHN0cnVjdCBzcnRwX2tlcm5lbF9jaXBoZXJfdHlwZSAqbmV4dDsKK30gc3J0cF9rZXJuZWxfY2lwaGVyX3R5cGVfdDsKIAotdHlwZWRlZiBzdHJ1Y3Qga2VybmVsX2RlYnVnX21vZHVsZSB7Ci0gIGRlYnVnX21vZHVsZV90ICptb2Q7Ci0gIHN0cnVjdCBrZXJuZWxfZGVidWdfbW9kdWxlICpuZXh0OwotfSBrZXJuZWxfZGVidWdfbW9kdWxlX3Q7CisvKgorICogbGlua2VkIGxpc3Qgb2YgYXV0aCB0eXBlcworICovCit0eXBlZGVmIHN0cnVjdCBzcnRwX2tlcm5lbF9hdXRoX3R5cGUgeworICAgIHNydHBfYXV0aF90eXBlX2lkX3QgaWQ7CisgICAgY29uc3Qgc3J0cF9hdXRoX3R5cGVfdCAqYXV0aF90eXBlOworICAgIHN0cnVjdCBzcnRwX2tlcm5lbF9hdXRoX3R5cGUgKm5leHQ7Cit9IHNydHBfa2VybmVsX2F1dGhfdHlwZV90OwogCisvKgorICogbGlua2VkIGxpc3Qgb2YgZGVidWcgbW9kdWxlcworICovCit0eXBlZGVmIHN0cnVjdCBzcnRwX2tlcm5lbF9kZWJ1Z19tb2R1bGUgeworICAgIHNydHBfZGVidWdfbW9kdWxlX3QgKm1vZDsKKyAgICBzdHJ1Y3Qgc3J0cF9rZXJuZWxfZGVidWdfbW9kdWxlICpuZXh0OworfSBzcnRwX2tlcm5lbF9kZWJ1Z19tb2R1bGVfdDsKIAogLyoKICAqIGNyeXB0b19rZXJuZWxfdCBpcyB0aGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBjcnlwdG8ga2VybmVsCkBAIC0xMzUsMTU0ICs5OCwxMTggQEAKICAqIG5vdGUgdGhhdCB0aGVyZSBpcyAqZXhhY3RseSBvbmUqIGluc3RhbmNlIG9mIHRoaXMgZGF0YSB0eXBlLAogICogYSBnbG9iYWwgdmFyaWFibGUgZGVmaW5lZCBpbiBjcnlwdG9fa2VybmVsLmMKICAqLwotCiB0eXBlZGVmIHN0cnVjdCB7Ci0gIGNyeXB0b19rZXJuZWxfc3RhdGVfdCBzdGF0ZTsgICAgICAgICAgICAgIC8qIGN1cnJlbnQgc3RhdGUgb2Yga2VybmVsICAgICAqLwotICBrZXJuZWxfY2lwaGVyX3R5cGVfdCAqY2lwaGVyX3R5cGVfbGlzdDsgICAvKiBsaXN0IG9mIGFsbCBjaXBoZXIgdHlwZXMgICAgKi8KLSAga2VybmVsX2F1dGhfdHlwZV90ICAgKmF1dGhfdHlwZV9saXN0OyAgICAgLyogbGlzdCBvZiBhbGwgYXV0aCBmdW5jIHR5cGVzICovCi0gIGtlcm5lbF9kZWJ1Z19tb2R1bGVfdCAqZGVidWdfbW9kdWxlX2xpc3Q7IC8qIGxpc3Qgb2YgYWxsIGRlYnVnIG1vZHVsZXMgICAqLwotfSBjcnlwdG9fa2VybmVsX3Q7Ci0KKyAgICBzcnRwX2NyeXB0b19rZXJuZWxfc3RhdGVfdCBzdGF0ZTsgLyogY3VycmVudCBzdGF0ZSBvZiBrZXJuZWwgICAgICovCisgICAgc3J0cF9rZXJuZWxfY2lwaGVyX3R5cGVfdCAqY2lwaGVyX3R5cGVfbGlzdDsgLyogbGlzdCBvZiBhbGwgY2lwaGVyIHR5cGVzICovCisgICAgc3J0cF9rZXJuZWxfYXV0aF90eXBlX3QgKmF1dGhfdHlwZV9saXN0OyAvKiBsaXN0IG9mIGFsbCBhdXRoIGZ1bmMgdHlwZXMgKi8KKyAgICBzcnRwX2tlcm5lbF9kZWJ1Z19tb2R1bGVfdAorICAgICAgICAqZGVidWdfbW9kdWxlX2xpc3Q7IC8qIGxpc3Qgb2YgYWxsIGRlYnVnIG1vZHVsZXMgICAqLworfSBzcnRwX2NyeXB0b19rZXJuZWxfdDsKIAogLyoKLSAqIGNyeXB0b19rZXJuZWxfdCBleHRlcm5hbCBhcGkKKyAqIHNydHBfY3J5cHRvX2tlcm5lbF90IGV4dGVybmFsIGFwaQogICovCiAKLQogLyoKLSAqIFRoZSBmdW5jdGlvbiBjcnlwdG9fa2VybmVsX2luaXQoKSBpbml0aWFsaXplZCB0aGUgY3J5cHRvIGtlcm5lbCBhbmQKKyAqIFRoZSBmdW5jdGlvbiBzcnRwX2NyeXB0b19rZXJuZWxfaW5pdCgpIGluaXRpYWxpemVkIHRoZSBjcnlwdG8ga2VybmVsIGFuZAogICogcnVucyB0aGUgc2VsZi10ZXN0IG9wZXJhdGlvbnMgb24gdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9ycyBhbmQKICAqIGNyeXB0byBhbGdvcml0aG1zLiAgUG9zc2libGUgcmV0dXJuIHZhbHVlcyBhcmU6CiAgKgotICogICAgZXJyX3N0YXR1c19vayAgICAgaW5pdGlhbGl6YXRpb24gc3VjY2Vzc2Z1bAotICogICAgPG90aGVyPiAgICAgICAgICAgaW5pdCBmYWlsdXJlIAorICogICAgc3J0cF9lcnJfc3RhdHVzX29rICAgIGluaXRpYWxpemF0aW9uIHN1Y2Nlc3NmdWwKKyAqICAgIDxvdGhlcj4gICAgICAgICAgICAgICBpbml0IGZhaWx1cmUKICAqCi0gKiBJZiBhbnkgdmFsdWUgb3RoZXIgdGhhbiBlcnJfc3RhdHVzX29rIGlzIHJldHVybmVkLCB0aGUKLSAqIGNyeXB0b19rZXJuZWwgTVVTVCBOT1QgYmUgdXNlZC4gIAorICogSWYgYW55IHZhbHVlIG90aGVyIHRoYW4gc3J0cF9lcnJfc3RhdHVzX29rIGlzIHJldHVybmVkLCB0aGUKKyAqIGNyeXB0b19rZXJuZWwgTVVTVCBOT1QgYmUgdXNlZC4KICAqLwotCi1lcnJfc3RhdHVzX3QKLWNyeXB0b19rZXJuZWxfaW5pdCgpOwotCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2NyeXB0b19rZXJuZWxfaW5pdCh2b2lkKTsKIAogLyoKLSAqIFRoZSBmdW5jdGlvbiBjcnlwdG9fa2VybmVsX3NodXRkb3duKCkgZGUtaW5pdGlhbGl6ZXMgdGhlCisgKiBUaGUgZnVuY3Rpb24gc3J0cF9jcnlwdG9fa2VybmVsX3NodXRkb3duKCkgZGUtaW5pdGlhbGl6ZXMgdGhlCiAgKiBjcnlwdG9fa2VybmVsLCB6ZXJvaXplcyBrZXlzIGFuZCBvdGhlciBjcnlwdG9ncmFwaGljIG1hdGVyaWFsLCBhbmQKICAqIGRlYWxsb2NhdGVzIGFueSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5LiAgUG9zc2libGUgcmV0dXJuCiAgKiB2YWx1ZXMgYXJlOgogICoKLSAqICAgIGVycl9zdGF0dXNfb2sgICAgIHNodXRkb3duIHN1Y2Nlc3NmdWwKLSAqICAgIDxvdGhlcj4gICAgICAgICAgIHNodXRkb3duIGZhaWx1cmUgCisgKiAgICBzcnRwX2Vycl9zdGF0dXNfb2sgICAgIHNodXRkb3duIHN1Y2Nlc3NmdWwKKyAqICAgIDxvdGhlcj4gICAgICAgICAgICAgICAgc2h1dGRvd24gZmFpbHVyZQogICoKICAqLwotCi1lcnJfc3RhdHVzX3QKLWNyeXB0b19rZXJuZWxfc2h1dGRvd24oKTsKK3NydHBfZXJyX3N0YXR1c190IHNydHBfY3J5cHRvX2tlcm5lbF9zaHV0ZG93bih2b2lkKTsKIAogLyoKLSAqIFRoZSBmdW5jdGlvbiBjcnlwdG9fa2VybmVsX3N0YXRzKCkgY2hlY2tzIHRoZSB0aGUgY3J5cHRvX2tlcm5lbCwKKyAqIFRoZSBmdW5jdGlvbiBzcnRwX2NyeXB0b19rZXJuZWxfc3RhdHMoKSBjaGVja3MgdGhlIHRoZSBjcnlwdG9fa2VybmVsLAogICogcnVubmluZyB0ZXN0cyBvbiB0aGUgY2lwaGVycywgYXV0aCBmdW5jcywgYW5kIHJuZywgYW5kIHByaW50cyBvdXQgYQogICogc3RhdHVzIHJlcG9ydC4gIFBvc3NpYmxlIHJldHVybiB2YWx1ZXMgYXJlOgogICoKLSAqICAgIGVycl9zdGF0dXNfb2sgICAgIGFsbCB0ZXN0cyB3ZXJlIHBhc3NlZAotICogICAgPG90aGVyPiAgICAgICAgICAgYSB0ZXN0IGZhaWxlZCAKKyAqICAgIHNydHBfZXJyX3N0YXR1c19vayAgICAgYWxsIHRlc3RzIHdlcmUgcGFzc2VkCisgKiAgICA8b3RoZXI+ICAgICAgICAgICAgICAgIGEgdGVzdCBmYWlsZWQKICAqCiAgKi8KLQotZXJyX3N0YXR1c190Ci1jcnlwdG9fa2VybmVsX3N0YXR1cygpOwotCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2NyeXB0b19rZXJuZWxfc3RhdHVzKHZvaWQpOwogCiAvKgotICogY3J5cHRvX2tlcm5lbF9saXN0X2RlYnVnX21vZHVsZXMoKSBvdXRwdXRzIGEgbGlzdCBvZiBkZWJ1Z2dpbmcgbW9kdWxlcworICogc3J0cF9jcnlwdG9fa2VybmVsX2xpc3RfZGVidWdfbW9kdWxlcygpIG91dHB1dHMgYSBsaXN0IG9mIGRlYnVnZ2luZyBtb2R1bGVzCiAgKgogICovCi0KLWVycl9zdGF0dXNfdAotY3J5cHRvX2tlcm5lbF9saXN0X2RlYnVnX21vZHVsZXMoKTsKK3NydHBfZXJyX3N0YXR1c190IHNydHBfY3J5cHRvX2tlcm5lbF9saXN0X2RlYnVnX21vZHVsZXModm9pZCk7CiAKIC8qCi0gKiBjcnlwdG9fa2VybmVsX2xvYWRfY2lwaGVyX3R5cGUoKQorICogc3J0cF9jcnlwdG9fa2VybmVsX2xvYWRfY2lwaGVyX3R5cGUoKQogICoKICAqLworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9jcnlwdG9fa2VybmVsX2xvYWRfY2lwaGVyX3R5cGUoCisgICAgY29uc3Qgc3J0cF9jaXBoZXJfdHlwZV90ICpjdCwKKyAgICBzcnRwX2NpcGhlcl90eXBlX2lkX3QgaWQpOwogCi1lcnJfc3RhdHVzX3QKLWNyeXB0b19rZXJuZWxfbG9hZF9jaXBoZXJfdHlwZShjaXBoZXJfdHlwZV90ICpjdCwgY2lwaGVyX3R5cGVfaWRfdCBpZCk7CitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2NyeXB0b19rZXJuZWxfbG9hZF9hdXRoX3R5cGUoY29uc3Qgc3J0cF9hdXRoX3R5cGVfdCAqY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9hdXRoX3R5cGVfaWRfdCBpZCk7CiAKLWVycl9zdGF0dXNfdAotY3J5cHRvX2tlcm5lbF9sb2FkX2F1dGhfdHlwZShhdXRoX3R5cGVfdCAqY3QsIGF1dGhfdHlwZV9pZF90IGlkKTsKLQotZXJyX3N0YXR1c190Ci1jcnlwdG9fa2VybmVsX2xvYWRfZGVidWdfbW9kdWxlKGRlYnVnX21vZHVsZV90ICpuZXdfZG0pOworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9jcnlwdG9fa2VybmVsX2xvYWRfZGVidWdfbW9kdWxlKAorICAgIHNydHBfZGVidWdfbW9kdWxlX3QgKm5ld19kbSk7CiAKIC8qCi0gKiBjcnlwdG9fa2VybmVsX2FsbG9jX2NpcGhlcihpZCwgY3AsIGtleV9sZW4pOyAKKyAqIHNydHBfY3J5cHRvX2tlcm5lbF9hbGxvY19jaXBoZXIoaWQsIGNwLCBrZXlfbGVuKTsKICAqCiAgKiBhbGxvY2F0ZXMgYSBjaXBoZXIgb2YgdHlwZSBpZCBhdCBsb2NhdGlvbiAqY3AsIHdpdGgga2V5IGxlbmd0aAogICoga2V5X2xlbiBvY3RldHMuICBSZXR1cm4gdmFsdWVzIGFyZToKLSAqIAotICogICAgZXJyX3N0YXR1c19vayAgICAgICAgICAgbm8gcHJvYmxlbXMKLSAqICAgIGVycl9zdGF0dXNfYWxsb2NfZmFpbCAgIGFuIGFsbG9jYXRpb24gZmFpbHVyZSBvY2N1cmVkCi0gKiAgICBlcnJfc3RhdHVzX2ZhaWwgICAgICAgICBjb3VsZG4ndCBmaW5kIGNpcGhlciB3aXRoIGlkZW50aWZpZXIgJ2lkJworICoKKyAqICAgIHNydHBfZXJyX3N0YXR1c19vayAgICAgICAgICAgbm8gcHJvYmxlbXMKKyAqICAgIHNydHBfZXJyX3N0YXR1c19hbGxvY19mYWlsICAgYW4gYWxsb2NhdGlvbiBmYWlsdXJlIG9jY3VyZWQKKyAqICAgIHNydHBfZXJyX3N0YXR1c19mYWlsICAgICAgICAgY291bGRuJ3QgZmluZCBjaXBoZXIgd2l0aCBpZGVudGlmaWVyICdpZCcKICAqLwotCi1lcnJfc3RhdHVzX3QKLWNyeXB0b19rZXJuZWxfYWxsb2NfY2lwaGVyKGNpcGhlcl90eXBlX2lkX3QgaWQsIAotCQkJICAgY2lwaGVyX3BvaW50ZXJfdCAqY3AsIAotCQkJICAgaW50IGtleV9sZW4pOworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9jcnlwdG9fa2VybmVsX2FsbG9jX2NpcGhlcihzcnRwX2NpcGhlcl90eXBlX2lkX3QgaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfY2lwaGVyX3BvaW50ZXJfdCAqY3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXlfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFnX2xlbik7CiAKIC8qCi0gKiBjcnlwdG9fa2VybmVsX2FsbG9jX2F1dGgoaWQsIGFwLCBrZXlfbGVuLCB0YWdfbGVuKTsgCisgKiBzcnRwX2NyeXB0b19rZXJuZWxfYWxsb2NfYXV0aChpZCwgYXAsIGtleV9sZW4sIHRhZ19sZW4pOwogICoKICAqIGFsbG9jYXRlcyBhbiBhdXRoIGZ1bmN0aW9uIG9mIHR5cGUgaWQgYXQgbG9jYXRpb24gKmFwLCB3aXRoIGtleQogICogbGVuZ3RoIGtleV9sZW4gb2N0ZXRzIGFuZCBvdXRwdXQgdGFnIGxlbmd0aCBvZiB0YWdfbGVuLiAgUmV0dXJuCiAgKiB2YWx1ZXMgYXJlOgotICogCi0gKiAgICBlcnJfc3RhdHVzX29rICAgICAgICAgICBubyBwcm9ibGVtcwotICogICAgZXJyX3N0YXR1c19hbGxvY19mYWlsICAgYW4gYWxsb2NhdGlvbiBmYWlsdXJlIG9jY3VyZWQKLSAqICAgIGVycl9zdGF0dXNfZmFpbCAgICAgICAgIGNvdWxkbid0IGZpbmQgYXV0aCB3aXRoIGlkZW50aWZpZXIgJ2lkJworICoKKyAqICAgIHNydHBfZXJyX3N0YXR1c19vayAgICAgICAgICAgbm8gcHJvYmxlbXMKKyAqICAgIHNydHBfZXJyX3N0YXR1c19hbGxvY19mYWlsICAgYW4gYWxsb2NhdGlvbiBmYWlsdXJlIG9jY3VyZWQKKyAqICAgIHNydHBfZXJyX3N0YXR1c19mYWlsICAgICAgICAgY291bGRuJ3QgZmluZCBhdXRoIHdpdGggaWRlbnRpZmllciAnaWQnCiAgKi8KLQotZXJyX3N0YXR1c190Ci1jcnlwdG9fa2VybmVsX2FsbG9jX2F1dGgoYXV0aF90eXBlX2lkX3QgaWQsIAotCQkJIGF1dGhfcG9pbnRlcl90ICphcCwgCi0JCQkgaW50IGtleV9sZW4sCi0JCQkgaW50IHRhZ19sZW4pOwotCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2NyeXB0b19rZXJuZWxfYWxsb2NfYXV0aChzcnRwX2F1dGhfdHlwZV9pZF90IGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9hdXRoX3BvaW50ZXJfdCAqYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YWdfbGVuKTsKIAogLyoKLSAqIGNyeXB0b19rZXJuZWxfc2V0X2RlYnVnX21vZHVsZShtb2RfbmFtZSwgdikKLSAqIAorICogc3J0cF9jcnlwdG9fa2VybmVsX3NldF9kZWJ1Z19tb2R1bGUobW9kX25hbWUsIHYpCisgKgogICogc2V0cyBkeW5hbWljIGRlYnVnZ2luZyB0byB0aGUgdmFsdWUgdiAoMCBmb3Igb2ZmLCAxIGZvciBvbikgZm9yIHRoZQogICogZGVidWcgbW9kdWxlIHdpdGggdGhlIG5hbWUgbW9kX25hbWUKICAqCi0gKiByZXR1cm5zIGVycl9zdGF0dXNfb2sgb24gc3VjY2VzcywgZXJyX3N0YXR1c19mYWlsIG90aGVyd2lzZQorICogcmV0dXJucyBzcnRwX2Vycl9zdGF0dXNfb2sgb24gc3VjY2Vzcywgc3J0cF9lcnJfc3RhdHVzX2ZhaWwgb3RoZXJ3aXNlCiAgKi8KK3NydHBfZXJyX3N0YXR1c190IHNydHBfY3J5cHRvX2tlcm5lbF9zZXRfZGVidWdfbW9kdWxlKGNvbnN0IGNoYXIgKm1vZF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHYpOwogCi1lcnJfc3RhdHVzX3QKLWNyeXB0b19rZXJuZWxfc2V0X2RlYnVnX21vZHVsZShjaGFyICptb2RfbmFtZSwgaW50IHYpOworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKIAotLyoqCi0gKiBAYnJpZWYgd3JpdGVzIGEgcmFuZG9tIG9jdGV0IHN0cmluZy4KLSAqCi0gKiBUaGUgZnVuY3Rpb24gY2FsbCBjcnlwdG9fZ2V0X3JhbmRvbShkZXN0LCBsZW4pIHdyaXRlcyBsZW4gb2N0ZXRzIG9mCi0gKiByYW5kb20gZGF0YSB0byB0aGUgbG9jYXRpb24gdG8gd2hpY2ggZGVzdCBwb2ludHMsIGFuZCByZXR1cm5zIGFuCi0gKiBlcnJvciBjb2RlLiAgVGhpcyBlcnJvciBjb2RlIEBiIG11c3QgYmUgY2hlY2tlZCwgYW5kIGlmIGEgZmFpbHVyZSBpcwotICogcmVwb3J0ZWQsIHRoZSBkYXRhIGluIHRoZSBidWZmZXIgQGIgbXVzdCBAYiBub3QgYmUgdXNlZC4KLSAqIAotICogQHdhcm5pbmcgSWYgdGhlIHJldHVybiBjb2RlIGlzIG5vdCBjaGVja2VkLCB0aGVuIG5vbi1yYW5kb20KLSAqICAgICAgICAgIGRhdGEgbWF5IGJlIGluIHRoZSBidWZmZXIuICBUaGlzIGZ1bmN0aW9uIHdpbGwgZmFpbAotICogICAgICAgICAgdW5sZXNzIGl0IGlzIGNhbGxlZCBhZnRlciBjcnlwdG9fa2VybmVsX2luaXQoKS4KLSAqCi0gKiBAcmV0dXJuCi0gKiAgICAgLSBlcnJfc3RhdHVzX29rICAgIGlmIG5vIHByb2JsZW1zIG9jY3VyZWQuCi0gKiAgICAgLSBbb3RoZXJdICAgICAgICAgIGEgcHJvYmxlbSBvY2N1cmVkLCBhbmQgbm8gYXNzdW1wdGlvbnMgc2hvdWxkCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIGJlIG1hZGUgYWJvdXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBkZXN0aW5hdGlvbgotICogICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuCi0gKgotICogQGluZ3JvdXAgU1JUUAotICovCi1lcnJfc3RhdHVzX3QKLWNyeXB0b19nZXRfcmFuZG9tKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGxlbmd0aCk7Ci0gICAgIAogI2VuZGlmIC8qIENSWVBUT19LRVJORUwgKi8KZGlmZiAtLWdpdCBhL2NyeXB0by9pbmNsdWRlL2NyeXB0b190eXBlcy5oIGIvY3J5cHRvL2luY2x1ZGUvY3J5cHRvX3R5cGVzLmgKaW5kZXggZTIwYzc3MS4uN2ZkMzE3OCAxMDA2NDQKLS0tIGEvY3J5cHRvL2luY2x1ZGUvY3J5cHRvX3R5cGVzLmgKKysrIGIvY3J5cHRvL2luY2x1ZGUvY3J5cHRvX3R5cGVzLmgKQEAgLTcsMjYgKzcsMjYgQEAKICAqIENpc2NvIFN5c3RlbXMsIEluYy4KICAqLwogLyoKLSAqCQotICogQ29weXJpZ2h0KGMpIDIwMDEtMjAwNSBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDEtMjAxNyBDaXNjbyBTeXN0ZW1zLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwogICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKICAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCisgKgogICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAogICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKKyAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKQEAgLTQyLDE2NSArNDIsNzUgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBDUllQVE9fVFlQRVNfSAotI2RlZmluZSBDUllQVE9fVFlQRVNfSAorI2lmbmRlZiBTUlRQX0NSWVBUT19UWVBFU19ICisjZGVmaW5lIFNSVFBfQ1JZUFRPX1RZUEVTX0gKIAotLyoqCi0gKiBAZGVmZ3JvdXAgQWxnb3MgQ3J5cHRvZ3JhcGhpYyBBbGdvcml0aG1zCisvKgorICogVGhlIG51bGwgY2lwaGVyIHBlcmZvcm1zIG5vIGVuY3J5cHRpb24uCiAgKgotICoKLSAqIFRoaXMgbGlicmFyeSBwcm92aWRlcyBzZXZlcmFsIGRpZmZlcmVudCBjcnlwdG9ncmFwaGljIGFsZ29yaXRobXMsCi0gKiBlYWNoIG9mIHdoaWNoIGNhbiBiZSBzZWxlY3RlZCBieSB1c2luZyB0aGUgY2lwaGVyX3R5cGVfaWRfdCBhbmQKLSAqIGF1dGhfdHlwZV9pZF90LiAgVGhlc2UgYWxnb3JpdGhtcyBhcmUgZG9jdW1lbnRlZCBiZWxvdy4KLSAqCi0gKiBBdXRoZW50aWNhdGlvbiBmdW5jdGlvbnMgdGhhdCB1c2UgdGhlIFVuaXZlcnNhbCBTZWN1cml0eSBUcmFuc2Zvcm0KLSAqIChVU1QpIG11c3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGEgY2lwaGVyIG90aGVyIHRoYW4gdGhlIG51bGwKLSAqIGNpcGhlci4gIFRoZXNlIGZ1bmN0aW9ucyByZXF1aXJlIGEgcGVyLW1lc3NhZ2UgcHNldWRvcmFuZG9tIGlucHV0Ci0gKiB0aGF0IGlzIGdlbmVyYXRlZCBieSB0aGUgY2lwaGVyLgotICogCi0gKiBUaGUgaWRlbnRpZmllcnMgU1RST05HSE9MRF9BVVRIIGFuZCBTVFJPTkdIT0xEX0NJUEhFUiBpZGVudGlmeSB0aGUKLSAqIHN0cm9uZ2VzdCBhdmFpbGFibGUgYXV0aGVudGljYXRpb24gZnVuY3Rpb24gYW5kIGNpcGhlciwKLSAqIHJlc3BlY3RpdmVseS4gIFRoZXkgYXJlIHJlc29sdmVkIGF0IGNvbXBpbGUgdGltZSB0byB0aGUgc3Ryb25nZXN0Ci0gKiBhdmFpbGFibGUgYWxnb3JpdGhtLiAgVGhlIHN0cm9uZ2hvbGQgYWxnb3JpdGhtcyBjYW4gc2VydmUgYXMgZGlkCi0gKiB0aGUga2VlcCBvZiBhIG1lZGlldmFsIGZvcnRpZmljYXRpb247IHRoZXkgcHJvdmlkZSB0aGUgc3Ryb25nZXN0Ci0gKiBkZWZlbnNlIChvciB0aGUgbGFzdCByZWZ1Z2UpLgotICogCi0gKiBAewotICovCi0KLS8qKgotICogQGRlZmdyb3VwIENpcGhlcnMgQ2lwaGVyIFR5cGVzCi0gKgotICogQGJyaWVmICAgIEVhY2ggY2lwaGVyIHR5cGUgaXMgaWRlbnRpZmllZCBieSBhbiB1bnNpZ25lZCBpbnRlZ2VyLiAgVGhlCi0gKiAgICAgICAgICAgY2lwaGVyIHR5cGVzIGF2YWlsYWJsZSBpbiB0aGlzIGVkaXRpb24gb2YgbGliU1JUUCBhcmUgZ2l2ZW4gCi0gKiAgICAgICAgICAgYnkgdGhlICNkZWZpbmVzIGJlbG93LgotICoKLSAqIEEgY2lwaGVyX3R5cGVfaWRfdCBpcyBhbiBpZGVudGlmaWVyIGZvciBhIGNpcGhlcl90eXBlOyBvbmx5IHZhbHVlcwotICogZ2l2ZW4gYnkgdGhlICNkZWZpbmVzIGFib3ZlIChvciB0aG9zZSBwcmVzZW50IGluIHRoZSBmaWxlCi0gKiBjcnlwdG9fdHlwZXMuaCkgc2hvdWxkIGJlIHVzZWQuCi0gKgotICogVGhlIGlkZW50aWZpZXIgU1RST05HSE9MRF9DSVBIRVIgaW5kaWNhdGVzIHRoZSBzdHJvbmdlc3QgYXZhaWxhYmxlCi0gKiBjaXBoZXIsIGFsbG93aW5nIGFuIGFwcGxpY2F0aW9uIHRvIGNob29zZSB0aGUgc3Ryb25nZXN0IGF2YWlsYWJsZQotICogYWxnb3JpdGhtIHdpdGhvdXQgYW55IGFkdmFuY2Uga25vd2xlZGdlIGFib3V0IHRoZSBhdmFsaWFibGUKLSAqIGFsZ29yaXRobXMuCi0gKgotICogQHsKLSAqLwotCi0vKioKLSAqIEBicmllZiBUaGUgbnVsbCBjaXBoZXIgcGVyZm9ybXMgbm8gZW5jcnlwdGlvbi4KLSAqCi0gKiBUaGUgTlVMTF9DSVBIRVIgbGVhdmVzIGl0cyBpbnB1dHMgdW5hbHRlcmVkLCBkdXJpbmcgYm90aCB0aGUgCisgKiBUaGUgU1JUUF9OVUxMX0NJUEhFUiBsZWF2ZXMgaXRzIGlucHV0cyB1bmFsdGVyZWQsIGR1cmluZyBib3RoIHRoZQogICogZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbiBvcGVyYXRpb25zLiAgVGhpcyBjaXBoZXIgY2FuIGJlIGNob3NlbgogICogdG8gaW5kaWNhdGUgdGhhdCBubyBlbmNyeXB0aW9uIGlzIHRvIGJlIHBlcmZvcm1lZC4KICAqLwotI2RlZmluZSBOVUxMX0NJUEhFUiAgICAgICAgMCAgICAgICAgICAgIAorI2RlZmluZSBTUlRQX05VTExfQ0lQSEVSIDAKIAotLyoqIAotICogQGJyaWVmIEFFUy0xMjggSW50ZWdlciBDb3VudGVyIE1vZGUgKEFFUyBJQ00pICAgICAgICAgICAgIAorLyoKKyAqIEFFUy0xMjggSW50ZWdlciBDb3VudGVyIE1vZGUgKEFFUyBJQ00pCiAgKgotICogQUVTLTEyOCBJQ00gaXMgdGhlIHZhcmlhbnQgb2YgY291bnRlciBtb2RlIHRoYXQgaXMgdXNlZCBieSBTZWN1cmUgUlRQLiAgCi0gKiBUaGlzIGNpcGhlciB1c2VzIGEgMTYtb2N0ZXQga2V5IGFuZCBhIDMwLW9jdGV0IG9mZnNldCAob3Igc2FsdCkgdmFsdWUuCisgKiBBRVMtMTI4IElDTSBpcyB0aGUgdmFyaWFudCBvZiBjb3VudGVyIG1vZGUgdGhhdCBpcyB1c2VkIGJ5CisgKiBTZWN1cmUgUlRQLiAgVGhpcyBjaXBoZXIgdXNlcyBhIDE2LW9jdGV0IGtleSBjb25jYXRlbmF0ZWQgd2l0aCBhCisgKiAxNC1vY3RldCBvZmZzZXQgKG9yIHNhbHQpIHZhbHVlLgogICovCi0jZGVmaW5lIEFFU18xMjhfSUNNICAgICAgICAxICAgICAgICAgICAgCisjZGVmaW5lIFNSVFBfQUVTX0lDTV8xMjggMQogCi0vKioKLSAqIEBicmllZiBTRUFMIDMuMCAKLSAqIAotICogU0VBTCBpcyB0aGUgU29mdHdhcmUtT3B0aW1pemVkIEVuY3J5cHRpb24gQWxnb3JpdGhtIG9mIENvcHBlcnNtaXRoCi0gKiBhbmQgUm9nYXdheS4gIE5vdGEgYmVuZTogdGhpcyBjaXBoZXIgaXMgSUJNIHByb3ByaWV0YXJ5LgotICovCi0jZGVmaW5lIFNFQUwgICAgICAgICAgICAgICAyICAgICAgICAgICAgCi0KLS8qKiAKLSAqIEBicmllZiBBRVMtMTI4IEludGVnZXIgQ291bnRlciBNb2RlIChBRVMgSUNNKSAgICAgICAgICAgICAKKy8qCisgKiBBRVMtMTkyIEludGVnZXIgQ291bnRlciBNb2RlIChBRVMgSUNNKQogICoKLSAqIEFFUy0xMjggSUNNIGlzIHRoZSB2YXJpYW50IG9mIGNvdW50ZXIgbW9kZSB0aGF0IGlzIHVzZWQgYnkgU2VjdXJlIFJUUC4gIAotICogVGhpcyBjaXBoZXIgdXNlcyBhIDE2LW9jdGV0IGtleSBhbmQgYSAzMC1vY3RldCBvZmZzZXQgKG9yIHNhbHQpIHZhbHVlLgorICogQUVTLTEyOCBJQ00gaXMgdGhlIHZhcmlhbnQgb2YgY291bnRlciBtb2RlIHRoYXQgaXMgdXNlZCBieQorICogU2VjdXJlIFJUUC4gIFRoaXMgY2lwaGVyIHVzZXMgYSAyNC1vY3RldCBrZXkgY29uY2F0ZW5hdGVkIHdpdGggYQorICogMTQtb2N0ZXQgb2Zmc2V0IChvciBzYWx0KSB2YWx1ZS4KICAqLwotI2RlZmluZSBBRVNfMTI4X0NCQyAgICAgICAgMyAgICAgICAgICAgIAorI2RlZmluZSBTUlRQX0FFU19JQ01fMTkyIDQKIAotLyoqCi0gKiBAYnJpZWYgU3Ryb25nZXN0IGF2YWlsYWJsZSBjaXBoZXIuCisvKgorICogQUVTLTI1NiBJbnRlZ2VyIENvdW50ZXIgTW9kZSAoQUVTIElDTSkKICAqCi0gKiBUaGlzIGlkZW50aWZpZXIgcmVzb2x2ZXMgdG8gdGhlIHN0cm9uZ2VzdCBjaXBoZXIgdHlwZSBhdmFpbGFibGUuCisgKiBBRVMtMTI4IElDTSBpcyB0aGUgdmFyaWFudCBvZiBjb3VudGVyIG1vZGUgdGhhdCBpcyB1c2VkIGJ5CisgKiBTZWN1cmUgUlRQLiAgVGhpcyBjaXBoZXIgdXNlcyBhIDMyLW9jdGV0IGtleSBjb25jYXRlbmF0ZWQgd2l0aCBhCisgKiAxNC1vY3RldCBvZmZzZXQgKG9yIHNhbHQpIHZhbHVlLgogICovCi0jZGVmaW5lIFNUUk9OR0hPTERfQ0lQSEVSICBBRVNfMTI4X0lDTSAgCisjZGVmaW5lIFNSVFBfQUVTX0lDTV8yNTYgNQogCi0vKioKLSAqIEB9CisvKgorICogQUVTLTEyOF9HQ00gR2Fsb2lzIENvdW50ZXIgTW9kZSAoQUVTIEdDTSkKKyAqCisgKiBBRVMtMTI4IEdDTSBpcyB0aGUgdmFyaWFudCBvZiBnYWxvaXMgY291bnRlciBtb2RlIHRoYXQgaXMgdXNlZCBieQorICogU2VjdXJlIFJUUC4gIFRoaXMgY2lwaGVyIHVzZXMgYSAxNi1vY3RldCBrZXkuCiAgKi8KKyNkZWZpbmUgU1JUUF9BRVNfR0NNXzEyOCA2CiAKLQotCi0vKioKLSAqIEBkZWZncm91cCBBdXRoZW50aWNhdGlvbiBBdXRoZW50aWNhdGlvbiBGdW5jdGlvbiBUeXBlcwotICogCi0gKiBAYnJpZWYgRWFjaCBhdXRoZW50aWNhdGlvbiBmdW5jdGlvbiB0eXBlIGlzIGlkZW50aWZpZWQgYnkgYW4KLSAqIHVuc2lnbmVkIGludGVnZXIuICBUaGUgYXV0aGVudGljYXRpb24gZnVuY3Rpb24gdHlwZXMgYXZhaWxhYmxlIGluCi0gKiB0aGlzIGVkaXRpb24gb2YgbGliU1JUUCBhcmUgZ2l2ZW4gYnkgdGhlICNkZWZpbmVzIGJlbG93LgorLyoKKyAqIEFFUy0yNTZfR0NNIEdhbG9pcyBDb3VudGVyIE1vZGUgKEFFUyBHQ00pCiAgKgotICogQW4gYXV0aF90eXBlX2lkX3QgaXMgYW4gaWRlbnRpZmllciBmb3IgYW4gYXV0aGVudGljYXRpb24gZnVuY3Rpb24gdHlwZTsKLSAqIG9ubHkgdmFsdWVzIGdpdmVuIGJ5IHRoZSAjZGVmaW5lcyBhYm92ZSAob3IgdGhvc2UgcHJlc2VudCBpbiB0aGUgCi0gKiBmaWxlIGNyeXB0b190eXBlcy5oKSBzaG91bGQgYmUgdXNlZC4gIAotICoKLSAqIFRoZSBpZGVudGlmaWVyIFNUUk9OR0hPTERfQVVUSCBpbmRpY2F0ZXMgdGhlIHN0cm9uZ2VzdCBhdmFpbGFibGUKLSAqIGF1dGhlbnRpY2F0aW9uIGZ1bmN0aW9uLCBhbGxvd2luZyBhbiBhcHBsaWNhdGlvbiB0byBjaG9vc2UgdGhlCi0gKiBzdHJvbmdlc3QgYXZhaWxhYmxlIGFsZ29yaXRobSB3aXRob3V0IGFueSBhZHZhbmNlIGtub3dsZWRnZSBhYm91dAotICogdGhlIGF2YWxpYWJsZSBhbGdvcml0aG1zLiAgVGhlIHN0cm9uZ2hvbGQgYWxnb3JpdGhtcyBjYW4gc2VydmUgYXMKLSAqIGRpZCB0aGUga2VlcCBvZiBhIG1lZGlldmFsIGZvcnRpZmljYXRpb247IHRoZXkgcHJvdmlkZSB0aGUKLSAqIHN0cm9uZ2VzdCBkZWZlbnNlIChvciB0aGUgbGFzdCByZWZ1Z2UpLgotICoKLSAqIEB7CisgKiBBRVMtMjU2IEdDTSBpcyB0aGUgdmFyaWFudCBvZiBnYWxvaXMgY291bnRlciBtb2RlIHRoYXQgaXMgdXNlZCBieQorICogU2VjdXJlIFJUUC4gIFRoaXMgY2lwaGVyIHVzZXMgYSAzMi1vY3RldCBrZXkuCiAgKi8KKyNkZWZpbmUgU1JUUF9BRVNfR0NNXzI1NiA3CiAKLS8qKgotICogQGJyaWVmIFRoZSBudWxsIGF1dGhlbnRpY2F0aW9uIGZ1bmN0aW9uIHBlcmZvcm1zIG5vIGF1dGhlbnRpY2F0aW9uLgorLyoKKyAqIFRoZSBudWxsIGF1dGhlbnRpY2F0aW9uIGZ1bmN0aW9uIHBlcmZvcm1zIG5vIGF1dGhlbnRpY2F0aW9uLgogICoKICAqIFRoZSBOVUxMX0FVVEggZnVuY3Rpb24gZG9lcyBub3RoaW5nLCBhbmQgY2FuIGJlIHNlbGVjdGVkIHRvIGluZGljYXRlCiAgKiB0aGF0IGF1dGhlbnRpY2F0aW9uIHNob3VsZCBub3QgYmUgcGVyZm9ybWVkLgotICovIAotI2RlZmluZSBOVUxMX0FVVEggICAgICAgICAgMCAgICAgICAgICAgCi0KLS8qKgotICogQGJyaWVmIFVTVCB3aXRoIFRNTUggVmVyc2lvbiAyCi0gKgotICogVVNUX1RNTUh2MiBpbXBsZW1lbnRzIHRoZSBUcnVuY2F0ZWQgTXVsdGktTW9kdWxhciBIYXNoIHVzaW5nCi0gKiBVU1QuICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGEgY2lwaGVyIG90aGVyCi0gKiB0aGFuIHRoZSBudWxsIGNpcGhlci4KLSAqIHdpdGggYSBjaXBoZXIuCiAgKi8KLSNkZWZpbmUgVVNUX1RNTUh2MiAgICAgICAgIDEgICAgICAgICAgIAorI2RlZmluZSBTUlRQX05VTExfQVVUSCAwCiAKLS8qKgotICogQGJyaWVmIChVU1QpIEFFUy0xMjggWE9STUFDICAKKy8qCisgKiBITUFDLVNIQTEKICAqCi0gKiBVU1RfQUVTXzEyOF9YTUFDIGltcGxlbWVudHMgQUVTLTEyOCBYT1JNQUMsIHVzaW5nIFVTVC4gTm90YSBiZW5lOgotICogdGhlIFhPUk1BQyBhbGdvcml0aG0gaXMgSUJNIHByb3ByaWV0YXJ5LgotICovCi0jZGVmaW5lIFVTVF9BRVNfMTI4X1hNQUMgICAyICAgICAgICAgICAKLQotLyoqCi0gKiBAYnJpZWYgSE1BQy1TSEExCi0gKgotICogSE1BQ19TSEExIGltcGxlbWVudHMgdGhlIEhhc2gtYmFzZWQgTUFDIHVzaW5nIHRoZSBOSVNUIFNlY3VyZQorICogU1JUUF9ITUFDX1NIQTEgaW1wbGVtZW50cyB0aGUgSGFzaC1iYXNlZCBNQUMgdXNpbmcgdGhlIE5JU1QgU2VjdXJlCiAgKiBIYXNoIEFsZ29yaXRobSB2ZXJzaW9uIDEgKFNIQTEpLgogICovCi0jZGVmaW5lIEhNQUNfU0hBMSAgICAgICAgICAzICAgICAgICAgIAorI2RlZmluZSBTUlRQX0hNQUNfU0hBMSAzCiAKLS8qKgotICogQGJyaWVmIFN0cm9uZ2VzdCBhdmFpbGFibGUgYXV0aGVudGljYXRpb24gZnVuY3Rpb24uCi0gKgotICogVGhpcyBpZGVudGlmaWVyIHJlc29sdmVzIHRvIHRoZSBzdHJvbmdlc3QgYXZhaWxhYmxlIGF1dGhlbnRpY2F0aW9uCi0gKiBmdW5jdGlvbi4KLSAqLwotI2RlZmluZSBTVFJPTkdIT0xEX0FVVEggICAgSE1BQ19TSEExICAgCi0KLS8qKgotICogQH0KLSAqLwotLyoqCi0gKiBAfQotICovCi0KLSNlbmRpZiAgLyogQ1JZUFRPX1RZUEVTX0ggKi8KKyNlbmRpZiAvKiBTUlRQX0NSWVBUT19UWVBFU19IICovCmRpZmYgLS1naXQgYS9jcnlwdG8vaW5jbHVkZS9jcnlwdG9hbGcuaCBiL2NyeXB0by9pbmNsdWRlL2NyeXB0b2FsZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWJmM2IzLi4wMDAwMDAwCi0tLSBhL2NyeXB0by9pbmNsdWRlL2NyeXB0b2FsZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBjcnlwdG9hbGcuaAotICoKLSAqIEFQSSBmb3IgYXV0aGVudGljYXRlZCBlbmNyeXB0aW9uIGNyeXB0byBhbGdvcml0aG1zCi0gKiAKLSAqIERhdmlkIEEuIE1jR3JldwotICogQ2lzY28gU3lzdGVtcywgSW5jLgotICovCi0vKgotICoJCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSBDaXNjbyBTeXN0ZW1zLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIAotICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAKLSAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKLSAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKi8KLQotI2lmbmRlZiBDUllQVE9BTEdfSAotI2RlZmluZSBDUllQVE9BTEdfSAotCi0jaW5jbHVkZSAiZXJyLmgiCi0KLS8qKgotICogQGRlZmdyb3VwIENyeXB0byBDcnlwdG9ncmFwaHkKLSAqCi0gKiBaZWQgdXNlcyBhIHNpbXBsZSBpbnRlcmZhY2UgdG8gYSBjcnlwdG9ncmFwaGljIHRyYW5zZm9ybS4KLSAqCi0gKiBAewotICovCi0KLS8qKgotICogQGJyaWVmIGFwcGxpZXMgYSBjcnlwdG8gYWxnb3JpdGhtCi0gKgotICogVGhlIGZ1bmN0aW9uIHBvaW50ZXIgY3J5cHRvYWxnX2Z1bmNfdCBwb2ludHMgdG8gYSBmdW5jdGlvbiB0aGF0Ci0gKiBpbXBsZW1lbnRzIGEgY3J5cHRvIHRyYW5zZm9ybSwgYW5kIHByb3ZpZGVzIGEgdW5pZm9ybSBBUEkgZm9yCi0gKiBhY2Nlc3NpbmcgY3J5cHRvIG1lY2hhbmlzbXMuCi0gKiAKLSAqIEBwYXJhbSBrZXkgICAgICAgbG9jYXRpb24gb2Ygc2VjcmV0IGtleSAgICAgICAgICAgICAgICAgIAotICoKLSAqIEBwYXJhbSBjbGVhciAgICAgZGF0YSB0byBiZSBhdXRoZW50aWNhdGVkIGJ1dCBub3QgZW5jcnlwdGVkICAgICAgICAgICAKLSAqCi0gKiBAcGFyYW0gY2xlYXJfbGVuIGxlbmd0aCBvZiBkYXRhIHRvIGJlIGF1dGhlbnRpY2F0ZWQgYnV0IG5vdCBlbmNyeXB0ZWQKLSAqCi0gKiBAcGFyYW0gaXYgICAgICAgIGxvY2F0aW9uIHRvIHdyaXRlIHRoZSBJbml0aWFsaXphdGlvbiBWZWN0b3IgKElWKQotICoKLSAqIEBwYXJhbSBwcm90ZWN0ZWQgbG9jYXRpb24gb2YgdGhlIGRhdGEgdG8gYmUgZW5jcnlwdGVkIGFuZAotICogYXV0aGVudGljYXRlZCAoYmVmb3JlIHRoZSBmdW5jdGlvbiBjYWxsKSwgYW5kIHRoZSBjaXBoZXJ0ZXh0Ci0gKiBhbmQgYXV0aGVudGljYXRpb24gdGFnIChhZnRlciB0aGUgY2FsbCkKLSAqCi0gKiBAcGFyYW0gcHJvdGVjdGVkX2xlbiBsb2NhdGlvbiBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIGJlCi0gKiBlbmNyeXB0ZWQgYW5kIGF1dGhlbnRpY2F0ZWQgKGJlZm9yZSB0aGUgZnVuY3Rpb24gY2FsbCksIGFuZCB0aGUKLSAqIGxlbmd0aCBvZiB0aGUgY2lwaGVydGV4dCAoYWZ0ZXIgdGhlIGNhbGwpCi0gKgotICovCi0gICAgICAgICAgICAgICAgICAgIAotdHlwZWRlZiBlcnJfc3RhdHVzX3QgKCpjcnlwdG9hbGdfZnVuY190KSAKLSAgICAgKHZvaWQgKmtleSwgICAgICAgICAgICAKLSAgICAgIGNvbnN0IHZvaWQgKmNsZWFyLCAgICAgICAgICAKLSAgICAgIHVuc2lnbmVkIGNsZWFyX2xlbiwgICAKLSAgICAgIHZvaWQgKml2LCAgICAgICAgICAgICAKLSAgICAgIHZvaWQgKnByb3RlY3RlZCwgICAgICAgICAKLSAgICAgIHVuc2lnbmVkICpwcm90ZWN0ZWRfbGVuKTsKLQotdHlwZWRlZiAKLWVycl9zdGF0dXNfdCAoKmNyeXB0b2FsZ19pbnZfdCkKLSAgICAgKHZvaWQgKmtleSwgICAgICAgICAgICAvKiBsb2NhdGlvbiBvZiBzZWNyZXQga2V5ICAgICAgICAgICAgICAgICAgKi8KLSAgICAgIGNvbnN0IHZvaWQgKmNsZWFyLCAgICAgLyogZGF0YSB0byBiZSBhdXRoZW50aWNhdGVkIG9ubHkgICAgICAgICAgICovCi0gICAgICB1bnNpZ25lZCBjbGVhcl9sZW4sICAgLyogbGVuZ3RoIG9mIGRhdGEgdG8gYmUgYXV0aGVudGljYXRlZCBvbmx5ICovCi0gICAgICB2b2lkICppdiwgICAgICAgICAgICAgLyogbG9jYXRpb24gb2YgaXYgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICB2b2lkICpvcGFxdWUsICAgICAgICAgLyogZGF0YSB0byBiZSBkZWNyeXB0ZWQgYW5kIGF1dGhlbnRpY2F0ZWQgICovCi0gICAgICB1bnNpZ25lZCAqb3BhcXVlX2xlbiAgLyogbG9jYXRpb24gb2YgdGhlIGxlbmd0aCBvZiBkYXRhIHRvIGJlCi0JCQkgICAgICogZGVjcnlwdGVkIGFuZCBhdXRoZCAoYmVmb3JlIGFuZCBhZnRlcikgCi0JCQkgICAgICovCi0gICAgICApOwotCi10eXBlZGVmIHN0cnVjdCBjcnlwdG9hbGdfY3R4X3QgewotICBjcnlwdG9hbGdfZnVuY190IGVuYzsKLSAgY3J5cHRvYWxnX2ludl90ICBkZWM7Ci0gIHVuc2lnbmVkIGtleV9sZW47Ci0gIHVuc2lnbmVkIGl2X2xlbjsKLSAgdW5zaWduZWQgYXV0aF90YWdfbGVuOwotICB1bnNpZ25lZCBtYXhfZXhwYW5zaW9uOyAKLX0gY3J5cHRvYWxnX2N0eF90OwotCi10eXBlZGVmIGNyeXB0b2FsZ19jdHhfdCAqY3J5cHRvYWxnX3Q7Ci0KLSNkZWZpbmUgY3J5cHRvYWxnX2dldF9rZXlfbGVuKGNyeXB0b2FsZykgKChjcnlwdG9hbGcpLT5rZXlfbGVuKQotCi0jZGVmaW5lIGNyeXB0b2FsZ19nZXRfaXZfbGVuKGNyeXB0b2FsZykgKChjcnlwdG9hbGcpLT5pdl9sZW4pCi0KLSNkZWZpbmUgY3J5cHRvYWxnX2dldF9hdXRoX3RhZ19sZW4oY3J5cHRvYWxnKSAoKGNyeXB0b2FsZyktPmF1dGhfdGFnX2xlbikKLQotaW50Ci1jcnlwdG9hbGdfZ2V0X2lkKGNyeXB0b2FsZ190IGMpOwotCi1jcnlwdG9hbGdfdCAKLWNyeXB0b2FsZ19maW5kX2J5X2lkKGludCBpZCk7Ci0KLQotLyoqCi0gKiBAfQotICovCi0KLSNlbmRpZiAvKiBDUllQVE9BTEdfSCAqLwotCi0KZGlmZiAtLWdpdCBhL2NyeXB0by9pbmNsdWRlL2RhdGF0eXBlcy5oIGIvY3J5cHRvL2luY2x1ZGUvZGF0YXR5cGVzLmgKaW5kZXggZjdlZjNmOC4uNmE1ODhkMCAxMDA2NDQKLS0tIGEvY3J5cHRvL2luY2x1ZGUvZGF0YXR5cGVzLmgKKysrIGIvY3J5cHRvL2luY2x1ZGUvZGF0YXR5cGVzLmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogZGF0YXR5cGVzLmgKLSAqIAorICoKICAqIGRhdGEgdHlwZXMgZm9yIGJpdCB2ZWN0b3JzIGFuZCBmaW5pdGUgZmllbGRzCiAgKgogICogRGF2aWQgQS4gTWNHcmV3CkBAIC04LDI2ICs4LDI2IEBACiAgKi8KIAogLyoKLSAqCQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUsIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxNywgQ2lzY28gU3lzdGVtcywgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAorICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgotICogCisgKgogICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKICAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKICAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCiAgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAorICoKICAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKICAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCkBAIC00MywxODYgKzQzLDE0MCBAQAogICoKICAqLwogCisjaWZuZGVmIERBVEFUWVBFU19ICisjZGVmaW5lIERBVEFUWVBFU19ICiAKLSNpZm5kZWYgX0RBVEFUWVBFU19ICi0jZGVmaW5lIF9EQVRBVFlQRVNfSAotCi0jaW5jbHVkZSAiaW50ZWdlcnMuaCIgICAgICAgICAgIC8qIGRlZmluaXRpb25zIG9mIHVpbnQzMl90LCBldCBjZXRlcmEgICAqLworI2luY2x1ZGUgImludGVnZXJzLmgiIC8qIGRlZmluaXRpb25zIG9mIHVpbnQzMl90LCBldCBjZXRlcmEgICAqLwogI2luY2x1ZGUgImFsbG9jLmgiCiAKLS8qIGlmIERBVEFUWVBFU19VU0VfTUFDUk9TIGlzIGRlZmluZWQsIHRoZW4gbGl0dGxlIGZ1bmN0aW9ucyBhcmUgbWFjcm9zICovCi0jZGVmaW5lIERBVEFUWVBFU19VU0VfTUFDUk9TICAKKyNpbmNsdWRlIDxzdGRhcmcuaD4KIAotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIG9jdGV0X3Q7CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZWxpZiBkZWZpbmVkIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZWxzZQorI2Vycm9yICJQbGF0Zm9ybSBub3QgcmVjb2duaXplZCIKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIGlmIERBVEFUWVBFU19VU0VfTUFDUk9TIGlzIGRlZmluZWQsIHRoZW4gbGl0dGxlIGZ1bmN0aW9ucyBhcmUgbWFjcm9zICovCisjZGVmaW5lIERBVEFUWVBFU19VU0VfTUFDUk9TCiAKIHR5cGVkZWYgdW5pb24gewotICB1bnNpZ25lZCBjaGFyIG9jdGV0WzJdOwotICB1aW50MTZfdCB2YWx1ZTsKKyAgICB1aW50OF90IHY4WzJdOworICAgIHVpbnQxNl90IHZhbHVlOwogfSB2MTZfdDsKIAogdHlwZWRlZiB1bmlvbiB7Ci0gIHVuc2lnbmVkIGNoYXIgb2N0ZXRbNF07Ci0gIHVpbnQxNl90IHYxNlsyXTsKLSAgdWludDMyX3QgdmFsdWU7CisgICAgdWludDhfdCB2OFs0XTsKKyAgICB1aW50MTZfdCB2MTZbMl07CisgICAgdWludDMyX3QgdmFsdWU7CiB9IHYzMl90OwogCiB0eXBlZGVmIHVuaW9uIHsKLSAgdW5zaWduZWQgY2hhciBvY3RldFs4XTsKLSAgdWludDE2X3QgdjE2WzRdOwotICB1aW50MzJfdCB2MzJbMl07Ci0gIHVpbnQ2NF90IHZhbHVlOworICAgIHVpbnQ4X3QgdjhbOF07CisgICAgdWludDE2X3QgdjE2WzRdOworICAgIHVpbnQzMl90IHYzMlsyXTsKKyAgICB1aW50NjRfdCB2YWx1ZTsKIH0gdjY0X3Q7CiAKIHR5cGVkZWYgdW5pb24gewotICB1bnNpZ25lZCBjaGFyIG9jdGV0WzE2XTsKLSAgdWludDE2X3QgdjE2WzhdOwotICB1aW50MzJfdCB2MzJbNF07Ci0gIHVpbnQ2NF90IHY2NFsyXTsKKyAgICB1aW50OF90IHY4WzE2XTsKKyAgICB1aW50MTZfdCB2MTZbOF07CisgICAgdWludDMyX3QgdjMyWzRdOworICAgIHVpbnQ2NF90IHY2NFsyXTsKIH0gdjEyOF90OwogCit0eXBlZGVmIHVuaW9uIHsKKyAgICB1aW50OF90IHY4WzMyXTsKKyAgICB1aW50MTZfdCB2MTZbMTZdOworICAgIHVpbnQzMl90IHYzMls4XTsKKyAgICB1aW50NjRfdCB2NjRbNF07Cit9IHYyNTZfdDsKIAogLyogc29tZSB1c2VmdWwgYW5kIHNpbXBsZSBtYXRoIGZ1bmN0aW9ucyAqLwogCi0jZGVmaW5lIHBvd18yKFgpICggKHVuc2lnbmVkIGludCkxIDw8IChYKSApICAgLyogMl5YICAgICAqLworI2RlZmluZSBwb3dfMihYKSAoKHVuc2lnbmVkIGludCkxIDw8IChYKSkgLyogMl5YICAgICAqLwogCi0jZGVmaW5lIHBvd19taW51c19vbmUoWCkgKCAoWCkgPyAtMSA6IDEgKSAgICAgIC8qICgtMSleWCAgKi8KLQorI2RlZmluZSBwb3dfbWludXNfb25lKFgpICgoWCkgPyAtMSA6IDEpIC8qICgtMSleWCAgKi8KIAogLyoKLSAqIG9jdGV0X3dlaWdodCh4KSByZXR1cm5zIHRoZSBoYW1taW5nIHdlaWdodCAobnVtYmVyIG9mIGJpdHMgZXF1YWwgdG8KKyAqIG9jdGV0X2dldF93ZWlnaHQoeCkgcmV0dXJucyB0aGUgaGFtbWluZyB3ZWlnaHQgKG51bWJlciBvZiBiaXRzIGVxdWFsIHRvCiAgKiBvbmUpIGluIHRoZSBvY3RldCB4CiAgKi8KIAotaW50Ci1vY3RldF9nZXRfd2VpZ2h0KG9jdGV0X3Qgb2N0ZXQpOwotCi1jaGFyICoKLW9jdGV0X2JpdF9zdHJpbmcob2N0ZXRfdCB4KTsKK2ludCBvY3RldF9nZXRfd2VpZ2h0KHVpbnQ4X3Qgb2N0ZXQpOwogCiAjZGVmaW5lIE1BWF9QUklOVF9TVFJJTkdfTEVOIDEwMjQKIAotY2hhciAqCi1vY3RldF9zdHJpbmdfaGV4X3N0cmluZyhjb25zdCB2b2lkICpzdHIsIGludCBsZW5ndGgpOworY2hhciAqc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZyhjb25zdCB2b2lkICpzdHIsIGludCBsZW5ndGgpOwogCi1jaGFyICoKLXYxMjhfYml0X3N0cmluZyh2MTI4X3QgKngpOworY2hhciAqdjEyOF9iaXRfc3RyaW5nKHYxMjhfdCAqeCk7CiAKLWNoYXIgKgotdjEyOF9oZXhfc3RyaW5nKHYxMjhfdCAqeCk7CitjaGFyICp2MTI4X2hleF9zdHJpbmcodjEyOF90ICp4KTsKIAotb2N0ZXRfdAotbmliYmxlX3RvX2hleF9jaGFyKG9jdGV0X3QgbmliYmxlKTsKK3ZvaWQgdjEyOF9jb3B5X29jdGV0X3N0cmluZyh2MTI4X3QgKngsIGNvbnN0IHVpbnQ4X3Qgc1sxNl0pOwogCi1jaGFyICoKLWNoYXJfdG9faGV4X3N0cmluZyhjaGFyICp4LCBpbnQgbnVtX2NoYXIpOwordm9pZCB2MTI4X2xlZnRfc2hpZnQodjEyOF90ICp4LCBpbnQgc2hpZnRfaW5kZXgpOwogCi1vY3RldF90Ci1oZXhfc3RyaW5nX3RvX29jdGV0KGNoYXIgKnMpOwotCi0vKgotICogaGV4X3N0cmluZ190b19vY3RldF9zdHJpbmcocmF3LCBoZXgsIGxlbikgY29udmVydHMgdGhlIGhleGFkZWNpbWFsCi0gKiBzdHJpbmcgYXQgKmhleCAob2YgbGVuZ3RoIGxlbiBvY3RldHMpIHRvIHRoZSBlcXVpdmFsZW50IHJhdyBkYXRhCi0gKiBhbmQgd3JpdGVzIGl0IHRvICpyYXcuCi0gKgotICogaWYgYSBjaGFyYWN0ZXIgaW4gdGhlIGhleCBzdHJpbmcgdGhhdCBpcyBub3QgYSBoZXhhZGVjaWFtbCBkaWdpdAotICogKDAxMjM0NTY3ODlhYmNkZWZBQkNERUYpIGlzIGVuY291bnRlcmVkLCB0aGUgZnVuY3Rpb24gc3RvcHMgd3JpdGluZwotICogZGF0YSB0byAqcmF3Ci0gKgotICogdGhlIG51bWJlciBvZiBoZXggZGlnaXRzIGNvcGllZCAod2hpY2ggaXMgdHdvIHRpbWVzIHRoZSBudW1iZXIgb2YKLSAqIG9jdGV0cyBpbiAqcmF3KSBpcyByZXR1cm5lZAotICovCi0KLWludAotaGV4X3N0cmluZ190b19vY3RldF9zdHJpbmcoY2hhciAqcmF3LCBjaGFyICpoZXgsIGludCBsZW4pOwotCi12MTI4X3QKLWhleF9zdHJpbmdfdG9fdjEyOChjaGFyICpzKTsKLQotdm9pZAotdjEyOF9jb3B5X29jdGV0X3N0cmluZyh2MTI4X3QgKngsIGNvbnN0IG9jdGV0X3Qgc1sxNl0pOwotCi12b2lkCi12MTI4X2xlZnRfc2hpZnQodjEyOF90ICp4LCBpbnQgaW5kZXgpOwotCi12b2lkCi12MTI4X3JpZ2h0X3NoaWZ0KHYxMjhfdCAqeCwgaW50IGluZGV4KTsKK3ZvaWQgdjEyOF9yaWdodF9zaGlmdCh2MTI4X3QgKngsIGludCBzaGlmdF9pbmRleCk7CiAKIC8qCiAgKiB0aGUgZm9sbG93aW5nIG1hY3JvcyBkZWZpbmUgdGhlIGRhdGEgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucwotICogCisgKgogICogSWYgREFUQVRZUEVTX1VTRV9NQUNST1MgaXMgZGVmaW5lZCwgdGhlbiB0aGVzZSBtYWNyb3MgYXJlIHVzZWQKICAqIGRpcmVjdGx5IChhbmQgZnVuY3Rpb24gY2FsbCBvdmVyaGVhZCBpcyBhdm9pZGVkKS4gIE90aGVyd2lzZSwKICAqIHRoZSBtYWNyb3MgYXJlIHVzZWQgdGhyb3VnaCB0aGUgZnVuY3Rpb25zIGRlZmluZWQgaW4gZGF0YXR5cGVzLmMKICAqIChhbmQgdGhlIGNvbXBpbGVyIHByb3ZpZGVzIGJldHRlciB3YXJuaW5ncykuCiAgKi8KIAotI2RlZmluZSBfdjEyOF9zZXRfdG9femVybyh4KSAgICAgXAotKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICh4KS0+djMyWzBdID0gMCwgICAgICAgICAgICAgIFwKLSAgKHgpLT52MzJbMV0gPSAwLCAgICAgICAgICAgICAgXAotICAoeCktPnYzMlsyXSA9IDAsICAgICAgICAgICAgICBcCi0gICh4KS0+djMyWzNdID0gMCAgICAgICAgICAgICAgIFwKLSkKKyNkZWZpbmUgX3YxMjhfc2V0X3RvX3plcm8oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCh4KS0+djMyWzBdID0gMCwgKHgpLT52MzJbMV0gPSAwLCAoeCktPnYzMlsyXSA9IDAsICh4KS0+djMyWzNdID0gMCkKIAotI2RlZmluZSBfdjEyOF9jb3B5KHgsIHkpICAgICAgICAgIFwKLSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKHgpLT52MzJbMF0gPSAoeSktPnYzMlswXSwgICAgIFwKLSAgKHgpLT52MzJbMV0gPSAoeSktPnYzMlsxXSwgICAgIFwKLSAgKHgpLT52MzJbMl0gPSAoeSktPnYzMlsyXSwgICAgIFwKLSAgKHgpLT52MzJbM10gPSAoeSktPnYzMlszXSAgICAgIFwKLSkKKyNkZWZpbmUgX3YxMjhfY29weSh4LCB5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCh4KS0+djMyWzBdID0gKHkpLT52MzJbMF0sICh4KS0+djMyWzFdID0gKHkpLT52MzJbMV0sICAgICAgICAgICAgICAgICAgICAgXAorICAgICAoeCktPnYzMlsyXSA9ICh5KS0+djMyWzJdLCAoeCktPnYzMlszXSA9ICh5KS0+djMyWzNdKQogCi0jZGVmaW5lIF92MTI4X3hvcih6LCB4LCB5KSAgICAgICAgICAgICAgICAgICAgICAgXAotKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgKHopLT52MzJbMF0gPSAoeCktPnYzMlswXSBeICh5KS0+djMyWzBdLCAgICAgXAotICAgKHopLT52MzJbMV0gPSAoeCktPnYzMlsxXSBeICh5KS0+djMyWzFdLCAgICAgXAotICAgKHopLT52MzJbMl0gPSAoeCktPnYzMlsyXSBeICh5KS0+djMyWzJdLCAgICAgXAotICAgKHopLT52MzJbM10gPSAoeCktPnYzMlszXSBeICh5KS0+djMyWzNdICAgICAgXAotKQorI2RlZmluZSBfdjEyOF94b3IoeiwgeCwgeSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKHopLT52MzJbMF0gPSAoeCktPnYzMlswXSBeICh5KS0+djMyWzBdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICh6KS0+djMyWzFdID0gKHgpLT52MzJbMV0gXiAoeSktPnYzMlsxXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAoeiktPnYzMlsyXSA9ICh4KS0+djMyWzJdIF4gKHkpLT52MzJbMl0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgKHopLT52MzJbM10gPSAoeCktPnYzMlszXSBeICh5KS0+djMyWzNdKQogCi0jZGVmaW5lIF92MTI4X2FuZCh6LCB4LCB5KSAgICAgICAgICAgICAgICAgICAgICAgXAotKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgKHopLT52MzJbMF0gPSAoeCktPnYzMlswXSAmICh5KS0+djMyWzBdLCAgICAgXAotICAgKHopLT52MzJbMV0gPSAoeCktPnYzMlsxXSAmICh5KS0+djMyWzFdLCAgICAgXAotICAgKHopLT52MzJbMl0gPSAoeCktPnYzMlsyXSAmICh5KS0+djMyWzJdLCAgICAgXAotICAgKHopLT52MzJbM10gPSAoeCktPnYzMlszXSAmICh5KS0+djMyWzNdICAgICAgXAotKQorI2RlZmluZSBfdjEyOF9hbmQoeiwgeCwgeSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKHopLT52MzJbMF0gPSAoeCktPnYzMlswXSAmICh5KS0+djMyWzBdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICh6KS0+djMyWzFdID0gKHgpLT52MzJbMV0gJiAoeSktPnYzMlsxXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAoeiktPnYzMlsyXSA9ICh4KS0+djMyWzJdICYgKHkpLT52MzJbMl0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgKHopLT52MzJbM10gPSAoeCktPnYzMlszXSAmICh5KS0+djMyWzNdKQogCi0jZGVmaW5lIF92MTI4X29yKHosIHgsIHkpICAgICAgICAgICAgICAgICAgICAgICAgXAotKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgKHopLT52MzJbMF0gPSAoeCktPnYzMlswXSB8ICh5KS0+djMyWzBdLCAgICAgXAotICAgKHopLT52MzJbMV0gPSAoeCktPnYzMlsxXSB8ICh5KS0+djMyWzFdLCAgICAgXAotICAgKHopLT52MzJbMl0gPSAoeCktPnYzMlsyXSB8ICh5KS0+djMyWzJdLCAgICAgXAotICAgKHopLT52MzJbM10gPSAoeCktPnYzMlszXSB8ICh5KS0+djMyWzNdICAgICAgXAotKQorI2RlZmluZSBfdjEyOF9vcih6LCB4LCB5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKHopLT52MzJbMF0gPSAoeCktPnYzMlswXSB8ICh5KS0+djMyWzBdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICh6KS0+djMyWzFdID0gKHgpLT52MzJbMV0gfCAoeSktPnYzMlsxXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAoeiktPnYzMlsyXSA9ICh4KS0+djMyWzJdIHwgKHkpLT52MzJbMl0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgKHopLT52MzJbM10gPSAoeCktPnYzMlszXSB8ICh5KS0+djMyWzNdKQogCi0jZGVmaW5lIF92MTI4X2NvbXBsZW1lbnQoeCkgICAgICAgIFwKLSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgKHgpLT52MzJbMF0gPSB+KHgpLT52MzJbMF0sICAgICBcCi0gICAoeCktPnYzMlsxXSA9IH4oeCktPnYzMlsxXSwgICAgIFwKLSAgICh4KS0+djMyWzJdID0gfih4KS0+djMyWzJdLCAgICAgXAotICAgKHgpLT52MzJbM10gPSB+KHgpLT52MzJbM10gICAgICBcCi0pCisjZGVmaW5lIF92MTI4X2NvbXBsZW1lbnQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoeCktPnYzMlswXSA9IH4oeCktPnYzMlswXSwgKHgpLT52MzJbMV0gPSB+KHgpLT52MzJbMV0sICAgICAgICAgICAgICAgICAgIFwKKyAgICAgKHgpLT52MzJbMl0gPSB+KHgpLT52MzJbMl0sICh4KS0+djMyWzNdID0gfih4KS0+djMyWzNdKQogCiAvKiBvayBmb3IgTk9fNjRCSVRfTUFUSCBpZiBpdCBjYW4gY29tcGFyZSB1aW50NjRfdCdzIChldmVuIGFzIHN0cnVjdHVyZXMpICovCi0jZGVmaW5lIF92MTI4X2lzX2VxKHgsIHkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKCgoeCktPnY2NFswXSA9PSAoeSktPnY2NFswXSkgJiYgKCh4KS0+djY0WzFdID09ICh5KS0+djY0WzFdKSkKLQorI2RlZmluZSBfdjEyOF9pc19lcSh4LCB5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKCh4KS0+djY0WzBdID09ICh5KS0+djY0WzBdKSAmJiAoKHgpLT52NjRbMV0gPT0gKHkpLT52NjRbMV0pKQogCiAjaWZkZWYgTk9fNjRCSVRfTUFUSAotI2RlZmluZSBfdjEyOF94b3JfZXEoeiwgeCkgICAgICAgICBcCi0oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICh6KS0+djMyWzBdIF49ICh4KS0+djMyWzBdLCAgICAgXAotICAgKHopLT52MzJbMV0gXj0gKHgpLT52MzJbMV0sICAgICBcCi0gICAoeiktPnYzMlsyXSBePSAoeCktPnYzMlsyXSwgICAgIFwKLSAgICh6KS0+djMyWzNdIF49ICh4KS0+djMyWzNdICAgICAgXAotKQorI2RlZmluZSBfdjEyOF94b3JfZXEoeiwgeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKHopLT52MzJbMF0gXj0gKHgpLT52MzJbMF0sICh6KS0+djMyWzFdIF49ICh4KS0+djMyWzFdLCAgICAgICAgICAgICAgICAgICBcCisgICAgICh6KS0+djMyWzJdIF49ICh4KS0+djMyWzJdLCAoeiktPnYzMlszXSBePSAoeCktPnYzMlszXSkKICNlbHNlCi0jZGVmaW5lIF92MTI4X3hvcl9lcSh6LCB4KSAgICAgICAgIFwKLSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgKHopLT52NjRbMF0gXj0gKHgpLT52NjRbMF0sICAgICBcCi0gICAoeiktPnY2NFsxXSBePSAoeCktPnY2NFsxXSAgICAgIFwKLSkKKyNkZWZpbmUgX3YxMjhfeG9yX2VxKHosIHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCh6KS0+djY0WzBdIF49ICh4KS0+djY0WzBdLCAoeiktPnY2NFsxXSBePSAoeCktPnY2NFsxXSkKICNlbmRpZgogCiAvKiBOT1RFISAgVGhpcyBhc3N1bWVzIGFuIG9kZCBvcmRlcmluZyEgKi8KQEAgLTIzNCwxNDUgKzE4OCwxOTEgQEAKICAgIHJlYWxseSBjYXJlIHdoaWNoIGJpdCBpcyB3aGljaC4gIEFFUyBkb2VzIGNhcmUgd2hpY2ggYml0IGlzIHdoaWNoLCBidXQKICAgIGRvZXNuJ3QgdXNlIHRoZSAxMjgtYml0IGdldC9zZXQgb3IgMTI4LWJpdCBzaGlmdHMgICovCiAKLSNkZWZpbmUgX3YxMjhfZ2V0X2JpdCh4LCBiaXQpICAgICAgICAgICAgICAgICAgICAgXAotKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICgoKCh4KS0+djMyWyhiaXQpID4+IDVdKSA+PiAoKGJpdCkgJiAzMSkpICYgMSkgIFwKLSkKKyNkZWZpbmUgX3YxMjhfZ2V0X2JpdCh4LCBiaXQpICgoKCgoeCktPnYzMlsoYml0KSA+PiA1XSkgPj4gKChiaXQpJjMxKSkgJiAxKSkKIAotI2RlZmluZSBfdjEyOF9zZXRfYml0KHgsIGJpdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKCgoeCktPnYzMlsoYml0KSA+PiA1XSkgfD0gKCh1aW50MzJfdCkxIDw8ICgoYml0KSAmIDMxKSkpIFwKLSkKKyNkZWZpbmUgX3YxMjhfc2V0X2JpdCh4LCBiaXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCgoKHgpLT52MzJbKGJpdCkgPj4gNV0pIHw9ICgodWludDMyX3QpMSA8PCAoKGJpdCkmMzEpKSkpCiAKLSNkZWZpbmUgX3YxMjhfY2xlYXJfYml0KHgsIGJpdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKCgoeCktPnYzMlsoYml0KSA+PiA1XSkgJj0gfigodWludDMyX3QpMSA8PCAoKGJpdCkgJiAzMSkpKSBcCi0pCisjZGVmaW5lIF92MTI4X2NsZWFyX2JpdCh4LCBiaXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoKCh4KS0+djMyWyhiaXQpID4+IDVdKSAmPSB+KCh1aW50MzJfdCkxIDw8ICgoYml0KSYzMSkpKSkKIAotI2RlZmluZSBfdjEyOF9zZXRfYml0X3RvKHgsIGJpdCwgdmFsdWUpICAgXAotKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgKHZhbHVlKSA/IF92MTI4X3NldF9iaXQoeCwgYml0KSA6ICAgICAgXAotICAgICAgICAgICAgIF92MTI4X2NsZWFyX2JpdCh4LCBiaXQpICAgICAgXAotKQorI2RlZmluZSBfdjEyOF9zZXRfYml0X3RvKHgsIGJpdCwgdmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKHZhbHVlKSA/IF92MTI4X3NldF9iaXQoeCwgYml0KSA6IF92MTI4X2NsZWFyX2JpdCh4LCBiaXQpKQogCisjaWZkZWYgREFUQVRZUEVTX1VTRV9NQUNST1MgLyogbGl0dGxlIGZ1bmN0aW9ucyBhcmUgcmVhbGx5IG1hY3JvcyAqLwogCi0jaWYgMAotLyogbm90aGluZyB1c2VzIHRoaXMgKi8KLSNpZiBXT1JEU19CSUdFTkRJQU4KLQotI2RlZmluZSBfdjEyOF9hZGQoeiwgeCwgeSkgeyAgICAgICAgICAgICAgICAgICAgXAotICB1aW50NjRfdCB0bXA7CQkJCQlcCi0gICAgCQkJCQkJXAotICB0bXAgPSB4LT52MzJbM10gKyB5LT52MzJbM107ICAgICAgICAgICAgICAgICAgXAotICB6LT52MzJbM10gPSAodWludDMyX3QpIHRtcDsJCQlcCi0gIAkJCQkJCVwKLSAgdG1wID0gIHgtPnYzMlsyXSArIHktPnYzMlsyXSArICh0bXAgPj4gMzIpOwlcCi0gIHotPnYzMlsyXSA9ICh1aW50MzJfdCkgdG1wOyAgICAgICAgICAgICAgICAgICBcCi0JCQkJCQlcCi0gIHRtcCA9ICB4LT52MzJbMV0gKyB5LT52MzJbMV0gKyAodG1wID4+IDMyKTsJXAotICB6LT52MzJbMV0gPSAodWludDMyX3QpIHRtcDsJCQlcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHRtcCA9ICB4LT52MzJbMF0gKyB5LT52MzJbMF0gKyAodG1wID4+IDMyKTsJXAotICB6LT52MzJbMF0gPSAodWludDMyX3QpIHRtcDsJCQlcCi19Ci0KLSNlbHNlIC8qIGFzc3VtZSBsaXR0bGUgZW5kaWFuIGFyY2hpdGVjdHVyZSAqLwotCi0jZGVmaW5lIF92MTI4X2FkZCh6LCB4LCB5KSB7ICAgICAgICAgICAgICAgICAgICBcCi0gIHVpbnQ2NF90IHRtcDsJCQkJCVwKLQkJCQkJCVwKLSAgdG1wID0gaHRvbmwoeC0+djMyWzNdKSArIGh0b25sKHktPnYzMlszXSk7CVwKLSAgei0+djMyWzNdID0gbnRvaGwoKHVpbnQzMl90KSB0bXApOwkJXAotICAJCQkJCQlcCi0gIHRtcCA9ICBodG9ubCh4LT52MzJbMl0pICsgaHRvbmwoeS0+djMyWzJdKQlcCi0gICAgICAgKyBodG9ubCh0bXAgPj4gMzIpOwkJCVwKLSAgei0+djMyWzJdID0gbnRvaGwoKHVpbnQzMl90KSB0bXApOwkJXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB0bXAgPSAgaHRvbmwoeC0+djMyWzFdKSArIGh0b25sKHktPnYzMlsxXSkJXAotICAgICAgICsgaHRvbmwodG1wID4+IDMyKTsJCQlcCi0gIHotPnYzMlsxXSA9IG50b2hsKCh1aW50MzJfdCkgdG1wKTsJCVwKLSAgCQkJCQkJXAotICB0bXAgPSAgaHRvbmwoeC0+djMyWzBdKSArIGh0b25sKHktPnYzMlswXSkJXAotICAgICAgICsgaHRvbmwodG1wID4+IDMyKTsJCQlcCi0gIHotPnYzMlswXSA9IG50b2hsKCh1aW50MzJfdCkgdG1wKTsJCVwKLX0KLSNlbmRpZiAvKiBXT1JEU19CSUdFTkRJQU4gKi8gICAgICAgICAgICAgICAgICAgICAgCi0jZW5kaWYgLyogMCAqLwotCi0KLSNpZmRlZiBEQVRBVFlQRVNfVVNFX01BQ1JPUyAgLyogbGl0dGxlIGZ1bmN0aW9ucyBhcmUgcmVhbGx5IG1hY3JvcyAqLwotCi0jZGVmaW5lIHYxMjhfc2V0X3RvX3plcm8oeikgICAgICAgX3YxMjhfc2V0X3RvX3plcm8oeikKLSNkZWZpbmUgdjEyOF9jb3B5KHosIHgpICAgICAgICAgICBfdjEyOF9jb3B5KHosIHgpCi0jZGVmaW5lIHYxMjhfeG9yKHosIHgsIHkpICAgICAgICAgX3YxMjhfeG9yKHosIHgsIHkpCi0jZGVmaW5lIHYxMjhfYW5kKHosIHgsIHkpICAgICAgICAgX3YxMjhfYW5kKHosIHgsIHkpCi0jZGVmaW5lIHYxMjhfb3IoeiwgeCwgeSkgICAgICAgICAgX3YxMjhfb3IoeiwgeCwgeSkKLSNkZWZpbmUgdjEyOF9jb21wbGVtZW50KHgpICAgICAgICBfdjEyOF9jb21wbGVtZW50KHgpIAotI2RlZmluZSB2MTI4X2lzX2VxKHgsIHkpICAgICAgICAgIF92MTI4X2lzX2VxKHgsIHkpCi0jZGVmaW5lIHYxMjhfeG9yX2VxKHgsIHkpICAgICAgICAgX3YxMjhfeG9yX2VxKHgsIHkpCi0jZGVmaW5lIHYxMjhfZ2V0X2JpdCh4LCBpKSAgICAgICAgX3YxMjhfZ2V0X2JpdCh4LCBpKQotI2RlZmluZSB2MTI4X3NldF9iaXQoeCwgaSkgICAgICAgIF92MTI4X3NldF9iaXQoeCwgaSkKLSNkZWZpbmUgdjEyOF9jbGVhcl9iaXQoeCwgaSkgICAgICBfdjEyOF9jbGVhcl9iaXQoeCwgaSkKLSNkZWZpbmUgdjEyOF9zZXRfYml0X3RvKHgsIGksIHkpICBfdjEyOF9zZXRfYml0X3RvKHgsIGksIHkpCisjZGVmaW5lIHYxMjhfc2V0X3RvX3plcm8oeikgX3YxMjhfc2V0X3RvX3plcm8oeikKKyNkZWZpbmUgdjEyOF9jb3B5KHosIHgpIF92MTI4X2NvcHkoeiwgeCkKKyNkZWZpbmUgdjEyOF94b3IoeiwgeCwgeSkgX3YxMjhfeG9yKHosIHgsIHkpCisjZGVmaW5lIHYxMjhfYW5kKHosIHgsIHkpIF92MTI4X2FuZCh6LCB4LCB5KQorI2RlZmluZSB2MTI4X29yKHosIHgsIHkpIF92MTI4X29yKHosIHgsIHkpCisjZGVmaW5lIHYxMjhfY29tcGxlbWVudCh4KSBfdjEyOF9jb21wbGVtZW50KHgpCisjZGVmaW5lIHYxMjhfaXNfZXEoeCwgeSkgX3YxMjhfaXNfZXEoeCwgeSkKKyNkZWZpbmUgdjEyOF94b3JfZXEoeCwgeSkgX3YxMjhfeG9yX2VxKHgsIHkpCisjZGVmaW5lIHYxMjhfZ2V0X2JpdCh4LCBpKSBfdjEyOF9nZXRfYml0KHgsIGkpCisjZGVmaW5lIHYxMjhfc2V0X2JpdCh4LCBpKSBfdjEyOF9zZXRfYml0KHgsIGkpCisjZGVmaW5lIHYxMjhfY2xlYXJfYml0KHgsIGkpIF92MTI4X2NsZWFyX2JpdCh4LCBpKQorI2RlZmluZSB2MTI4X3NldF9iaXRfdG8oeCwgaSwgeSkgX3YxMjhfc2V0X2JpdF90byh4LCBpLCB5KQogCiAjZWxzZQogCi12b2lkCi12MTI4X3NldF90b196ZXJvKHYxMjhfdCAqeCk7Cit2b2lkIHYxMjhfc2V0X3RvX3plcm8odjEyOF90ICp4KTsKIAotaW50Ci12MTI4X2lzX2VxKGNvbnN0IHYxMjhfdCAqeCwgY29uc3QgdjEyOF90ICp5KTsKK2ludCB2MTI4X2lzX2VxKGNvbnN0IHYxMjhfdCAqeCwgY29uc3QgdjEyOF90ICp5KTsKIAotdm9pZAotdjEyOF9jb3B5KHYxMjhfdCAqeCwgY29uc3QgdjEyOF90ICp5KTsKK3ZvaWQgdjEyOF9jb3B5KHYxMjhfdCAqeCwgY29uc3QgdjEyOF90ICp5KTsKIAotdm9pZAotdjEyOF94b3IodjEyOF90ICp6LCB2MTI4X3QgKngsIHYxMjhfdCAqeSk7Cit2b2lkIHYxMjhfeG9yKHYxMjhfdCAqeiwgdjEyOF90ICp4LCB2MTI4X3QgKnkpOwogCi12b2lkCi12MTI4X2FuZCh2MTI4X3QgKnosIHYxMjhfdCAqeCwgdjEyOF90ICp5KTsKK3ZvaWQgdjEyOF9hbmQodjEyOF90ICp6LCB2MTI4X3QgKngsIHYxMjhfdCAqeSk7CiAKLXZvaWQKLXYxMjhfb3IodjEyOF90ICp6LCB2MTI4X3QgKngsIHYxMjhfdCAqeSk7IAordm9pZCB2MTI4X29yKHYxMjhfdCAqeiwgdjEyOF90ICp4LCB2MTI4X3QgKnkpOwogCi12b2lkCi12MTI4X2NvbXBsZW1lbnQodjEyOF90ICp4KTsKK3ZvaWQgdjEyOF9jb21wbGVtZW50KHYxMjhfdCAqeCk7CiAKLWludAotdjEyOF9nZXRfYml0KGNvbnN0IHYxMjhfdCAqeCwgaW50IGkpOworaW50IHYxMjhfZ2V0X2JpdChjb25zdCB2MTI4X3QgKngsIGludCBpKTsKIAotdm9pZAotdjEyOF9zZXRfYml0KHYxMjhfdCAqeCwgaW50IGkpIDsgICAgIAordm9pZCB2MTI4X3NldF9iaXQodjEyOF90ICp4LCBpbnQgaSk7CiAKLXZvaWQKLXYxMjhfY2xlYXJfYml0KHYxMjhfdCAqeCwgaW50IGkpOyAgICAKK3ZvaWQgdjEyOF9jbGVhcl9iaXQodjEyOF90ICp4LCBpbnQgaSk7CiAKLXZvaWQKLXYxMjhfc2V0X2JpdF90byh2MTI4X3QgKngsIGludCBpLCBpbnQgeSk7Cit2b2lkIHYxMjhfc2V0X2JpdF90byh2MTI4X3QgKngsIGludCBpLCBpbnQgeSk7CiAKICNlbmRpZiAvKiBEQVRBVFlQRVNfVVNFX01BQ1JPUyAqLwogCiAvKgotICogb2N0ZXRfc3RyaW5nX2lzX2VxKGEsYiwgbGVuKSByZXR1cm5zIDEgaWYgdGhlIGxlbmd0aCBsZW4gc3RyaW5ncyBhCi0gKiBhbmQgYiBhcmUgbm90IGVxdWFsLCByZXR1cm5zIDAgb3RoZXJ3aXNlCisgKiBzcnRwX29jdGV0X3N0cmluZ19pc19lcShhLCBiLCBsZW4pIHJldHVybnMgMSBpZiB0aGUgbGVuZ3RoIGxlbiBzdHJpbmdzCisgKiBhIGFuZCBiIGFyZSBub3QgZXF1YWwuIEl0IHJldHVybnMgMCBvdGhlcndpc2UuIFRoZSBydW5uaW5nIHRpbWUgb2YgdGhlCisgKiBjb21wYXJpc29uIGRlcGVuZHMgb25seSBvbiBsZW4sIG1ha2luZyB0aGlzIHNhZmUgdG8gdXNlIGZvciAoZS5nLikKKyAqIHZlcmlmeWluZyBhdXRoZW50aWNhdGlvbiB0YWdzLgogICovCiAKLWludAotb2N0ZXRfc3RyaW5nX2lzX2VxKG9jdGV0X3QgKmEsIG9jdGV0X3QgKmIsIGludCBsZW4pOworaW50IHNydHBfb2N0ZXRfc3RyaW5nX2lzX2VxKHVpbnQ4X3QgKmEsIHVpbnQ4X3QgKmIsIGludCBsZW4pOwogCi12b2lkCi1vY3RldF9zdHJpbmdfc2V0X3RvX3plcm8ob2N0ZXRfdCAqcywgaW50IGxlbik7CisvKgorICogQSBwb3J0YWJsZSB3YXkgdG8gemVybyBvdXQgbWVtb3J5IGFzIHJlY29tbWVuZGVkIGJ5CisgKiBodHRwczovL2NyeXB0b2NvZGluZy5uZXQvaW5kZXgucGhwL0NvZGluZ19ydWxlcyNDbGVhbl9tZW1vcnlfb2Zfc2VjcmV0X2RhdGEKKyAqIFRoaXMgaXMgdXNlZCB0byB6ZXJvIG1lbW9yeSB3aGVuIE9QRU5TU0xfY2xlYW5zZSgpIGlzIG5vdCBhdmFpbGFibGUuCisgKi8KK3ZvaWQgc3J0cF9jbGVhbnNlKHZvaWQgKnMsIHNpemVfdCBsZW4pOwogCisvKgorICogRnVuY3Rpb25zIGFzIGEgd3JhcHBlciB0aGF0IGRlbGVnYXRlcyB0byBlaXRoZXIgc3J0cF9jbGVhbnNlKCkgb3IKKyAqIE9QRU5TU0xfY2xlYW5zZSgpIGlmIGF2YWlsYWJsZSB0byB6ZXJvIG1lbW9yeS4KKyAqLwordm9pZCBvY3RldF9zdHJpbmdfc2V0X3RvX3plcm8odm9pZCAqcywgc2l6ZV90IGxlbik7CiAKLS8qIAotICogYnN3YXBfMzIoKSBpcyBhbiBvcHRpbWl6ZWQgdmVyc2lvbiBvZiBodG9ubC9udG9obAorI2lmIGRlZmluZWQoSEFWRV9DT05GSUdfSCkKKworLyoKKyAqIENvbnZlcnQgYmlnIGVuZGlhbiBpbnRlZ2VycyB0byBDUFUgYnl0ZSBvcmRlci4KKyAqLworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorLyogTm90aGluZyB0byBkby4gKi8KKyNkZWZpbmUgYmUzMl90b19jcHUoeCkgKHgpCisjZGVmaW5lIGJlNjRfdG9fY3B1KHgpICh4KQorI2VsaWYgZGVmaW5lZChIQVZFX0JZVEVTV0FQX0gpCisvKiBXZSBoYXZlIChob3BlZnVsbHkpIG9wdGltaXplZCB2ZXJzaW9ucyBpbiBieXRlc3dhcC5oICovCisjaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KKyNkZWZpbmUgYmUzMl90b19jcHUoeCkgYnN3YXBfMzIoKHgpKQorI2RlZmluZSBiZTY0X3RvX2NwdSh4KSBic3dhcF82NCgoeCkpCisjZWxzZSAvKiBXT1JEU19CSUdFTkRJQU4gKi8KKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoSEFWRV9YODYpCisvKiBGYWxsIGJhY2suICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGJlMzJfdG9fY3B1KHVpbnQzMl90IHYpCit7CisgICAgLyogb3B0aW1pemVkIGZvciB4ODYuICovCisgICAgYXNtKCJic3dhcCAlMCIgOiAiPXIiKHYpIDogIjAiKHYpKTsKKyAgICByZXR1cm4gdjsKK30KKyNlbHNlIC8qIEhBVkVfWDg2ICovCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZWxpZiBkZWZpbmVkIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZW5kaWYgLyogSEFWRV9ORVRJTkVUX0lOX0ggKi8KKyNkZWZpbmUgYmUzMl90b19jcHUoeCkgbnRvaGwoKHgpKQorI2VuZGlmIC8qIEhBVkVfWDg2ICovCisKK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgYmU2NF90b19jcHUodWludDY0X3QgdikKK3sKKyNpZmRlZiBOT182NEJJVF9NQVRICisgICAgLyogdXNlIHRoZSBtYWtlNjQgZnVuY3Rpb25zIHRvIGRvIDY0LWJpdCBtYXRoICovCisgICAgdiA9IG1ha2U2NChodG9ubChsb3czMih2KSksIGh0b25sKGhpZ2gzMih2KSkpOworI2Vsc2UgIC8qIE5PXzY0QklUX01BVEggKi8KKyAgICAvKiB1c2UgdGhlIG5hdGl2ZSA2NC1iaXQgbWF0aCAqLworICAgIHYgPSAodWludDY0X3QpKChiZTMyX3RvX2NwdSgodWludDMyX3QpKHYgPj4gMzIpKSkgfAorICAgICAgICAgICAgICAgICAgICgoKHVpbnQ2NF90KWJlMzJfdG9fY3B1KCh1aW50MzJfdCl2KSkgPDwgMzIpKTsKKyNlbmRpZiAvKiBOT182NEJJVF9NQVRIICovCisgICAgcmV0dXJuIHY7Cit9CisKKyNlbmRpZiAvKiBXT1JEU19CSUdFTkRJQU4gKi8KKworI2VuZGlmIC8qIEhBVkVfQ09ORklHX0ggKi8KKworLyoKKyAqIGZ1bmN0aW9ucyBtYW5pcHVsYXRpbmcgYml0dmVjdG9yX3QKKyAqCisgKiBBIGJpdHZlY3Rvcl90IGNvbnNpc3RzIG9mIGFuIGFycmF5IG9mIHdvcmRzIGFuZCBhbiBpbnRlZ2VyCisgKiByZXByZXNlbnRpbmcgdGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBiaXRzIHN0b3JlZCBpbiB0aGUgYXJyYXkuCisgKiBUaGUgYml0cyBhcmUgcGFja2VkIGFzIGZvbGxvd3M6IHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgaXMgdGhhdAorICogb2Ygd29yZFswXSwgd2hpbGUgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGlzIHRoZSBudGggbW9zdAorICogc2lnbmlmaWNhbnQgYml0IG9mIHdvcmRbbV0sIHdoZXJlIGxlbmd0aCA9IGJpdHNfcGVyX3dvcmQgKiBtICsgbi4KKyAqCiAgKi8KIAotdWludDMyX3QKLWJzd2FwXzMyKHVpbnQzMl90IHYpOworI2RlZmluZSBiaXRzX3Blcl93b3JkIDMyCisjZGVmaW5lIGJ5dGVzX3Blcl93b3JkIDQKIAotdWludDY0X3QKLWJzd2FwXzY0KHVpbnQ2NF90IHYpOwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHVpbnQzMl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCAqd29yZDsKK30gYml0dmVjdG9yX3Q7CiAKKyNkZWZpbmUgX2JpdHZlY3Rvcl9nZXRfYml0KHYsIGJpdF9pbmRleCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCgoKCh2KS0+d29yZFsoKGJpdF9pbmRleCkgPj4gNSldKSA+PiAoKGJpdF9pbmRleCkmMzEpKSAmIDEpKQogCi0jZW5kaWYgLyogX0RBVEFUWVBFU19IICovCisjZGVmaW5lIF9iaXR2ZWN0b3Jfc2V0X2JpdCh2LCBiaXRfaW5kZXgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoKCh2KS0+d29yZFsoKGJpdF9pbmRleCkgPj4gNSldIHw9ICgodWludDMyX3QpMSA8PCAoKGJpdF9pbmRleCkmMzEpKSkpKQorCisjZGVmaW5lIF9iaXR2ZWN0b3JfY2xlYXJfYml0KHYsIGJpdF9pbmRleCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoKCh2KS0+d29yZFsoKGJpdF9pbmRleCkgPj4gNSldICY9IH4oKHVpbnQzMl90KTEgPDwgKChiaXRfaW5kZXgpJjMxKSkpKSkKKworI2RlZmluZSBfYml0dmVjdG9yX2dldF9sZW5ndGgodikgKCgodiktPmxlbmd0aCkpCisKKyNpZmRlZiBEQVRBVFlQRVNfVVNFX01BQ1JPUyAvKiBsaXR0bGUgZnVuY3Rpb25zIGFyZSByZWFsbHkgbWFjcm9zICovCisKKyNkZWZpbmUgYml0dmVjdG9yX2dldF9iaXQodiwgYml0X2luZGV4KSBfYml0dmVjdG9yX2dldF9iaXQodiwgYml0X2luZGV4KQorI2RlZmluZSBiaXR2ZWN0b3Jfc2V0X2JpdCh2LCBiaXRfaW5kZXgpIF9iaXR2ZWN0b3Jfc2V0X2JpdCh2LCBiaXRfaW5kZXgpCisjZGVmaW5lIGJpdHZlY3Rvcl9jbGVhcl9iaXQodiwgYml0X2luZGV4KSBfYml0dmVjdG9yX2NsZWFyX2JpdCh2LCBiaXRfaW5kZXgpCisjZGVmaW5lIGJpdHZlY3Rvcl9nZXRfbGVuZ3RoKHYpIF9iaXR2ZWN0b3JfZ2V0X2xlbmd0aCh2KQorCisjZWxzZQorCitpbnQgYml0dmVjdG9yX2dldF9iaXQoY29uc3QgYml0dmVjdG9yX3QgKnYsIGludCBiaXRfaW5kZXgpOworCit2b2lkIGJpdHZlY3Rvcl9zZXRfYml0KGJpdHZlY3Rvcl90ICp2LCBpbnQgYml0X2luZGV4KTsKKwordm9pZCBiaXR2ZWN0b3JfY2xlYXJfYml0KGJpdHZlY3Rvcl90ICp2LCBpbnQgYml0X2luZGV4KTsKKwordW5zaWduZWQgbG9uZyBiaXR2ZWN0b3JfZ2V0X2xlbmd0aChjb25zdCBiaXR2ZWN0b3JfdCAqdik7CisKKyNlbmRpZgorCitpbnQgYml0dmVjdG9yX2FsbG9jKGJpdHZlY3Rvcl90ICp2LCB1bnNpZ25lZCBsb25nIGxlbmd0aCk7CisKK3ZvaWQgYml0dmVjdG9yX2RlYWxsb2MoYml0dmVjdG9yX3QgKnYpOworCit2b2lkIGJpdHZlY3Rvcl9zZXRfdG9femVybyhiaXR2ZWN0b3JfdCAqeCk7CisKK3ZvaWQgYml0dmVjdG9yX2xlZnRfc2hpZnQoYml0dmVjdG9yX3QgKngsIGludCBpbmRleCk7CisKK2NoYXIgKmJpdHZlY3Rvcl9iaXRfc3RyaW5nKGJpdHZlY3Rvcl90ICp4LCBjaGFyICpidWYsIGludCBsZW4pOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogREFUQVRZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2NyeXB0by9pbmNsdWRlL2Vyci5oIGIvY3J5cHRvL2luY2x1ZGUvZXJyLmgKaW5kZXggYzViNjEyNy4uNjZhMTAyMyAxMDA2NDQKLS0tIGEvY3J5cHRvL2luY2x1ZGUvZXJyLmgKKysrIGIvY3J5cHRvL2luY2x1ZGUvZXJyLmgKQEAgLTEsMzIgKzEsMzIgQEAKIC8qCiAgKiBlcnIuaAotICogCisgKgogICogZXJyb3Igc3RhdHVzIGNvZGVzCiAgKgogICogRGF2aWQgQS4gTWNHcmV3CiAgKiBDaXNjbyBTeXN0ZW1zLCBJbmMuCiAgKi8KIC8qCi0gKgkKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA1LCBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMTcsIENpc2NvIFN5c3RlbXMsIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogCisgKgogICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCiAgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCiAgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAogICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKKyAqCiAgKiAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAgKiAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAorICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwpAQCAtNDIsMTUyICs0Miw5MyBAQAogICoKICAqLwogCi0KICNpZm5kZWYgRVJSX0gKICNkZWZpbmUgRVJSX0gKIAotI2luY2x1ZGUgImNvbmZpZy5oIiAgICAgICAgICAgICAvKiBjaGVjayBmb3IgRVJSX1JFUE9SVElOR19TWVNMT0cgKi8KLQogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KICNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlICJzcnRwLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKIAogLyoqCiAgKiBAZGVmZ3JvdXAgRXJyb3IgRXJyb3IgQ29kZXMKLSAqIAotICogRXJyb3Igc3RhdHVzIGNvZGVzIGFyZSByZXByZXNlbnRlZCBieSB0aGUgZW51bWVyYXRpb24gZXJyX3N0YXR1c190LgotICogCisgKgorICogRXJyb3Igc3RhdHVzIGNvZGVzIGFyZSByZXByZXNlbnRlZCBieSB0aGUgZW51bWVyYXRpb24gc3J0cF9lcnJfc3RhdHVzX3QuCisgKgogICogQHsKICAqLwogCi0KLS8qCi0gKiBAYnJpZWYgZXJyX3N0YXR1c190IGRlZmluZXMgZXJyb3IgY29kZXMuCi0gKgotICogVGhlIGVudW1lcmF0aW9uIGVycl9zdGF0dXNfdCBkZWZpbmVzIGVycm9yIGNvZGVzLiAgTm90ZSB0aGF0IHRoZQotICogdmFsdWUgb2YgZXJyX3N0YXR1c19vayBpcyBlcXVhbCB0byB6ZXJvLCB3aGljaCBjYW4gc2ltcGxpZnkgZXJyb3IKLSAqIGNoZWNraW5nIHNvbWV3aGF0LgotICoKLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgZXJyX3N0YXR1c19vayAgICAgICAgICAgPSAwLCAgLyoqPCBub3RoaW5nIHRvIHJlcG9ydCAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19mYWlsICAgICAgICAgPSAxLCAgLyoqPCB1bnNwZWNpZmllZCBmYWlsdXJlICAgICAgICAgICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19iYWRfcGFyYW0gICAgPSAyLCAgLyoqPCB1bnN1cHBvcnRlZCBwYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19hbGxvY19mYWlsICAgPSAzLCAgLyoqPCBjb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgICAgICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19kZWFsbG9jX2ZhaWwgPSA0LCAgLyoqPCBjb3VsZG4ndCBkZWFsbG9jYXRlIHByb3Blcmx5ICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19pbml0X2ZhaWwgICAgPSA1LCAgLyoqPCBjb3VsZG4ndCBpbml0aWFsaXplICAgICAgICAgICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c190ZXJtaW51cyAgICAgPSA2LCAgLyoqPCBjYW4ndCBwcm9jZXNzIGFzIG11Y2ggZGF0YSBhcyByZXF1ZXN0ZWQgKi8KLSAgZXJyX3N0YXR1c19hdXRoX2ZhaWwgICAgPSA3LCAgLyoqPCBhdXRoZW50aWNhdGlvbiBmYWlsdXJlICAgICAgICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19jaXBoZXJfZmFpbCAgPSA4LCAgLyoqPCBjaXBoZXIgZmFpbHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19yZXBsYXlfZmFpbCAgPSA5LCAgLyoqPCByZXBsYXkgY2hlY2sgZmFpbGVkIChiYWQgaW5kZXgpICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19yZXBsYXlfb2xkICAgPSAxMCwgLyoqPCByZXBsYXkgY2hlY2sgZmFpbGVkIChpbmRleCB0b28gb2xkKSAgICAgKi8KLSAgZXJyX3N0YXR1c19hbGdvX2ZhaWwgICAgPSAxMSwgLyoqPCBhbGdvcml0aG0gZmFpbGVkIHRlc3Qgcm91dGluZSAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19ub19zdWNoX29wICAgPSAxMiwgLyoqPCB1bnN1cHBvcnRlZCBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19ub19jdHggICAgICAgPSAxMywgLyoqPCBubyBhcHByb3ByaWF0ZSBjb250ZXh0IGZvdW5kICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19jYW50X2NoZWNrICAgPSAxNCwgLyoqPCB1bmFibGUgdG8gcGVyZm9ybSBkZXNpcmVkIHZhbGlkYXRpb24gICAgKi8KLSAgZXJyX3N0YXR1c19rZXlfZXhwaXJlZCAgPSAxNSwgLyoqPCBjYW4ndCB1c2Uga2V5IGFueSBtb3JlICAgICAgICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19zb2NrZXRfZXJyICAgPSAxNiwgLyoqPCBlcnJvciBpbiB1c2Ugb2Ygc29ja2V0ICAgICAgICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19zaWduYWxfZXJyICAgPSAxNywgLyoqPCBlcnJvciBpbiB1c2UgUE9TSVggc2lnbmFscyAgICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19ub25jZV9iYWQgICAgPSAxOCwgLyoqPCBub25jZSBjaGVjayBmYWlsZWQgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19yZWFkX2ZhaWwgICAgPSAxOSwgLyoqPCBjb3VsZG4ndCByZWFkIGRhdGEgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c193cml0ZV9mYWlsICAgPSAyMCwgLyoqPCBjb3VsZG4ndCB3cml0ZSBkYXRhICAgICAgICAgICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19wYXJzZV9lcnIgICAgPSAyMSwgLyoqPCBlcnJvciBwYXNyaW5nIGRhdGEgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19lbmNvZGVfZXJyICAgPSAyMiwgLyoqPCBlcnJvciBlbmNvZGluZyBkYXRhICAgICAgICAgICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19zZW1hcGhvcmVfZXJyID0gMjMsLyoqPCBlcnJvciB3aGlsZSB1c2luZyBzZW1hcGhvcmVzICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19wZmtleV9lcnIgPSAyNCAgICAsLyoqPCBlcnJvciB3aGlsZSB1c2luZyBwZmtleSAgICAgICAgICAgICAgICAgKi8KLX0gZXJyX3N0YXR1c190OwotCiAvKioKICAqIEB9CiAgKi8KIAotI2lmIChFUlJfUkVQT1JUSU5HX1NZU0xPRykgCi0KLSNpbmNsdWRlIDxzeXNsb2cuaD4KLQogdHlwZWRlZiBlbnVtIHsKLSAgZXJyX2xldmVsX2VtZXJnZW5jeSA9IExPR19FTUVSRywKLSAgZXJyX2xldmVsX2FsZXJ0ICAgICA9IExPR19BTEVSVCwgIAotICBlcnJfbGV2ZWxfY3JpdGljYWwgID0gTE9HX0NSSVQsICAKLSAgZXJyX2xldmVsX2Vycm9yICAgICA9IExPR19FUlIsICAKLSAgZXJyX2xldmVsX3dhcm5pbmcgICA9IExPR19XQVJOSU5HLAotICBlcnJfbGV2ZWxfbm90aWNlICAgID0gTE9HX05PVElDRSwgIAotICBlcnJfbGV2ZWxfaW5mbyAgICAgID0gTE9HX0lORk8sICAKLSAgZXJyX2xldmVsX2RlYnVnICAgICA9IExPR19ERUJVRywgIAotICBlcnJfbGV2ZWxfbm9uZQotfSBlcnJfcmVwb3J0aW5nX2xldmVsX3Q7Ci0KLSNlbHNlCi0KLXR5cGVkZWYgZW51bSB7Ci0gIGVycl9sZXZlbF9lbWVyZ2VuY3ksIAotICBlcnJfbGV2ZWxfYWxlcnQsICAgICAKLSAgZXJyX2xldmVsX2NyaXRpY2FsLCAgCi0gIGVycl9sZXZlbF9lcnJvciwgICAgIAotICBlcnJfbGV2ZWxfd2FybmluZywgICAKLSAgZXJyX2xldmVsX25vdGljZSwgICAgIAotICBlcnJfbGV2ZWxfaW5mbywgICAgICAKLSAgZXJyX2xldmVsX2RlYnVnLAotICBlcnJfbGV2ZWxfbm9uZQotfSBlcnJfcmVwb3J0aW5nX2xldmVsX3Q7Ci0KLSNlbmRpZgorICAgIHNydHBfZXJyX2xldmVsX2Vycm9yLAorICAgIHNydHBfZXJyX2xldmVsX3dhcm5pbmcsCisgICAgc3J0cF9lcnJfbGV2ZWxfaW5mbywKKyAgICBzcnRwX2Vycl9sZXZlbF9kZWJ1ZworfSBzcnRwX2Vycl9yZXBvcnRpbmdfbGV2ZWxfdDsKIAogLyoKICAqIGVycl9yZXBvcnRpbmdfaW5pdCBwcmVwYXJlcyB0aGUgZXJyb3Igc3lzdGVtLiAgSWYKLSAqIEVSUl9SRVBPUlRJTkdfU1lTTE9HIGlzIGRlZmluZWQsIGl0IHdpbGwgb3BlbiBzeXNsb2cuCi0gKgotICogVGhlIGlkZW50IGFyZ3VtZW50IGlzIGEgc3RyaW5nIHRoYXQgd2lsbCBiZSBwcmVwZW5kZWQgdG8KLSAqIGFsbCBzeXNsb2cgbWVzc2FnZXMuICBJdCBpcyBjb252ZW50aW9uYWxseSBhcmd2WzBdLiAgCi0gKi8KLQotZXJyX3N0YXR1c190Ci1lcnJfcmVwb3J0aW5nX2luaXQoY2hhciAqaWRlbnQpOwotICAKLS8qCi0gKiBrZXlkYWVtb25fcmVwb3J0X2Vycm9yIHJlcG9ydHMgYSAncHJpbnRmJyBmb3JtYXR0ZWQgZXJyb3IKLSAqIHN0cmluZywgZm9sbG93ZWQgYnkgYSBhbiBhcmcgbGlzdC4gIFRoZSBwcmlvcml0eSBhcmd1bWVudAotICogaXMgZXF1aXZhbGVudCB0byB0aGF0IGRlZmluZWQgZm9yIHN5c2xvZy4KLSAqCi0gKiBFcnJvcnMgd2lsbCBiZSByZXBvcnRlZCB0byBFUlJfUkVQT1JUSU5HX0ZJTEUsIGlmIGRlZmluZWQsIGFuZCB0bwotICogc3lzbG9nLCBpZiBFUlJfUkVQT1JUSU5HX1NZU0xPRyBpcyBkZWZpbmVkLgorICogRVJSX1JFUE9SVElOR19TVERPVVQgaXMgZGVmaW5lZCwgaXQgd2lsbCBsb2cgdG8gc3Rkb3V0LgogICoKICAqLwogCi12b2lkCi1lcnJfcmVwb3J0KGludCBwcmlvcml0eSwgY2hhciAqZm9ybWF0LCAuLi4pOworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9lcnJfcmVwb3J0aW5nX2luaXQodm9pZCk7CiAKK3R5cGVkZWYgdm9pZChzcnRwX2Vycl9yZXBvcnRfaGFuZGxlcl9mdW5jX3QpKHNydHBfZXJyX3JlcG9ydGluZ19sZXZlbF90IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbXNnKTsKKworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9pbnN0YWxsX2Vycl9yZXBvcnRfaGFuZGxlcigKKyAgICBzcnRwX2Vycl9yZXBvcnRfaGFuZGxlcl9mdW5jX3QgZnVuYyk7CiAKIC8qCi0gKiBkZWJ1Z19tb2R1bGVfdCBkZWZpbmVzIGEgZGVidWcgbW9kdWxlIAorICogc3J0cF9lcnJfcmVwb3J0IHJlcG9ydHMgYSAncHJpbnRmJyBmb3JtYXR0ZWQgZXJyb3IKKyAqIHN0cmluZywgZm9sbG93ZWQgYnkgYSBhbiBhcmcgbGlzdC4gIFRoZSBsZXZlbCBhcmd1bWVudAorICogaXMgb25lIG9mIHNydHBfZXJyX3JlcG9ydGluZ19sZXZlbF90LgorICoKKyAqIEVycm9ycyB3aWxsIGJlIHJlcG9ydGVkIHRvIHN0ZG91dCwgaWYgRVJSX1JFUE9SVElOR19TVERPVVQKKyAqIGlzIGRlZmluZWQuCisgKgogICovCiAKLXR5cGVkZWYgc3RydWN0IHsgCi0gIHVuc2lnbmVkIGludCAgIG9uOyAgICAgICAgICAvKiAxIGlmIGRlYnVnZ2luZyBpcyBvbiwgMCBpZiBpdCBpcyBvZmYgKi8KLSAgY2hhciAqbmFtZTsgICAgICAgICAgICAgICAgIC8qIHByaW50YWJsZSBuYW1lIGZvciBkZWJ1ZyBtb2R1bGUgICAgICAqLwotfSBkZWJ1Z19tb2R1bGVfdDsKK3ZvaWQgc3J0cF9lcnJfcmVwb3J0KHNydHBfZXJyX3JlcG9ydGluZ19sZXZlbF90IGxldmVsLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CiAKLSNpZiBFTkFCTEVfREVCVUdHSU5HIAorLyoKKyAqIGRlYnVnX21vZHVsZV90IGRlZmluZXMgYSBkZWJ1ZyBtb2R1bGUKKyAqLwogCi0jZGVmaW5lIGRlYnVnX29uKG1vZCkgIChtb2QpLm9uID0gMQordHlwZWRlZiBzdHJ1Y3QgeworICAgIGludCBvbjsgICAgICAgICAgIC8qIDEgaWYgZGVidWdnaW5nIGlzIG9uLCAwIGlmIGl0IGlzIG9mZiAqLworICAgIGNvbnN0IGNoYXIgKm5hbWU7IC8qIHByaW50YWJsZSBuYW1lIGZvciBkZWJ1ZyBtb2R1bGUgICAgICAqLworfSBzcnRwX2RlYnVnX21vZHVsZV90OwogCi0jZGVmaW5lIGRlYnVnX29mZihtb2QpIChtb2QpLm9uID0gMAorI2lmZGVmIEVOQUJMRV9ERUJVR19MT0dHSU5HCiAKLS8qIHVzZSBlcnJfcmVwb3J0KCkgdG8gcmVwb3J0IGRlYnVnIG1lc3NhZ2UgKi8KLSNkZWZpbmUgZGVidWdfcHJpbnQobW9kLCBmb3JtYXQsIGFyZykgICAgICAgICAgICAgICAgICBcCi0gIGlmIChtb2Qub24pIGVycl9yZXBvcnQoZXJyX2xldmVsX2RlYnVnLCAoIiVzOiAiIGZvcm1hdCksIG1vZC5uYW1lLCBhcmcpCi0jZGVmaW5lIGRlYnVnX3ByaW50Mihtb2QsIGZvcm1hdCwgYXJnMSxhcmcyKSAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKG1vZC5vbikgZXJyX3JlcG9ydChlcnJfbGV2ZWxfZGVidWcsICgiJXM6ICIgZm9ybWF0KSwgbW9kLm5hbWUsIGFyZzEsYXJnMikKKyNkZWZpbmUgZGVidWdfcHJpbnQobW9kLCBmb3JtYXQsIGFyZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc3J0cF9lcnJfcmVwb3J0KHNydHBfZXJyX2xldmVsX2RlYnVnLCAoIiVzOiAiIGZvcm1hdCAiXG4iKSwgbW9kLm5hbWUsIGFyZykKKyNkZWZpbmUgZGVidWdfcHJpbnQyKG1vZCwgZm9ybWF0LCBhcmcxLCBhcmcyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc3J0cF9lcnJfcmVwb3J0KHNydHBfZXJyX2xldmVsX2RlYnVnLCAoIiVzOiAiIGZvcm1hdCAiXG4iKSwgbW9kLm5hbWUsICAgICAgXAorICAgICAgICAgICAgICAgICAgICBhcmcxLCBhcmcyKQogCiAjZWxzZQogCi0vKiBkZWZpbmUgbWFjcm9zIHRvIGRvIG5vdGhpbmcgKi8KLSNkZWZpbmUgZGVidWdfcHJpbnQobW9kLCBmb3JtYXQsIGFyZykgCisjZGVmaW5lIGRlYnVnX3ByaW50KG1vZCwgZm9ybWF0LCBhcmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChtb2Qub24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzcnRwX2Vycl9yZXBvcnQoc3J0cF9lcnJfbGV2ZWxfZGVidWcsICgiJXM6ICIgZm9ybWF0ICJcbiIpLCBtb2QubmFtZSwgYXJnKQorI2RlZmluZSBkZWJ1Z19wcmludDIobW9kLCBmb3JtYXQsIGFyZzEsIGFyZzIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAobW9kLm9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc3J0cF9lcnJfcmVwb3J0KHNydHBfZXJyX2xldmVsX2RlYnVnLCAoIiVzOiAiIGZvcm1hdCAiXG4iKSwgbW9kLm5hbWUsICAgICAgXAorICAgICAgICAgICAgICAgICAgICBhcmcxLCBhcmcyKQogCi0jZGVmaW5lIGRlYnVnX29uKG1vZCkgIAorI2VuZGlmCiAKLSNkZWZpbmUgZGVidWdfb2ZmKG1vZCkgCi0KKyNpZmRlZiBfX2NwbHVzcGx1cworfQogI2VuZGlmCiAKICNlbmRpZiAvKiBFUlJfSCAqLwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2luY2x1ZGUvZ2YyXzguaCBiL2NyeXB0by9pbmNsdWRlL2dmMl84LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlMDhkYTYuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL2luY2x1ZGUvZ2YyXzguaAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qCi0gKiBnZjJfOC5oCi0gKgotICogR0YoMjU2KSBpbXBsZW1lbnRhdGlvbgotICoKLSAqIERhdmlkIEEuIE1jR3JldwotICogQ2lzY28gU3lzdGVtcywgSW5jLgotICovCi0KLS8qCi0gKgkKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA1LCBDaXNjbyBTeXN0ZW1zLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIAotICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAKLSAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKLSAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKi8KLQotCi0jaWZuZGVmIEdGMl84X0gKLSNkZWZpbmUgR0YyXzhfSAotCi0jaW5jbHVkZSAiZGF0YXR5cGVzLmgiICAvKiBmb3Igb2N0ZXRfdCBkZWZpbml0aW9uICovCi0KLXR5cGVkZWYgb2N0ZXRfdCBnZjJfODsKLQotI2RlZmluZSBnZjJfOF9maWVsZF9wb2x5bm9taWFsIDB4MUIKLQotLyoKLSAqIGdmMl84X3NoaWZ0KHgpIHJldHVybnMgdGhlIG5leHQgZ2YyXzggdmFsdWUgaW4gdGhlIGN5Y2xpYwotICogcmVwcmVzZW50YXRpb24gb2YgdGhhdCBmaWVsZAotICovCi0KLWdmMl84Ci1nZjJfOF9zaGlmdChvY3RldF90IGlucHV0KTsKLQotZ2YyXzgKLWdmMl84X2NvbXB1dGVfaW52ZXJzZShnZjJfOCB4KTsKLQotdm9pZAotdGVzdF9nZjJfOCh2b2lkKTsKLQotZ2YyXzgKLWdmMl84X211bHRpcGx5KGdmMl84IHgsIGdmMl84IHkpOwotCi0jZW5kaWYgLyogR0YyXzhfSCAqLwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2luY2x1ZGUvaG1hYy5oIGIvY3J5cHRvL2luY2x1ZGUvaG1hYy5oCmluZGV4IDU2OWExNzUuLjE0ODgxODEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9pbmNsdWRlL2htYWMuaAorKysgYi9jcnlwdG8vaW5jbHVkZS9obWFjLmgKQEAgLTEsMzMgKzEsMzMgQEAKIC8qCiAgKiBobWFjLmgKICAqCi0gKiBpbnRlcmZhY2UgdG8gaG1hYyBhdXRoX3R5cGVfdAorICogaW50ZXJmYWNlIHRvIGhtYWMgc3J0cF9hdXRoX3R5cGVfdAogICoKICAqIERhdmlkIEEuIE1jR3JldwogICogQ2lzY28gU3lzdGVtcywgSW5jLgogICoKICAqLwogLyoKLSAqCQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUsIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxNywgQ2lzY28gU3lzdGVtcywgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAorICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgotICogCisgKgogICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKICAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKICAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCiAgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAorICoKICAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKICAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCkBAIC01MCwyOCArNTAsOSBAQAogI2luY2x1ZGUgInNoYTEuaCIKIAogdHlwZWRlZiBzdHJ1Y3QgewotICBvY3RldF90ICAgIGlwYWRbNjRdLCBvcGFkWzY0XTsKLSAgc2hhMV9jdHhfdCBjdHg7Ci19IGhtYWNfY3R4X3Q7Ci0KLWVycl9zdGF0dXNfdAotaG1hY19hbGxvYyhhdXRoX3QgKiphLCBpbnQga2V5X2xlbiwgaW50IG91dF9sZW4pOwotCi1lcnJfc3RhdHVzX3QKLWhtYWNfZGVhbGxvYyhhdXRoX3QgKmEpOwotCi1lcnJfc3RhdHVzX3QKLWhtYWNfaW5pdChobWFjX2N0eF90ICpzdGF0ZSwgY29uc3Qgb2N0ZXRfdCAqa2V5LCBpbnQga2V5X2xlbik7Ci0KLWVycl9zdGF0dXNfdAotaG1hY19zdGFydChobWFjX2N0eF90ICpzdGF0ZSk7Ci0KLWVycl9zdGF0dXNfdAotaG1hY191cGRhdGUoaG1hY19jdHhfdCAqc3RhdGUsIGNvbnN0IG9jdGV0X3QgKm1lc3NhZ2UsIGludCBtc2dfb2N0ZXRzKTsKLQotZXJyX3N0YXR1c190Ci1obWFjX2NvbXB1dGUoaG1hY19jdHhfdCAqc3RhdGUsIGNvbnN0IG9jdGV0X3QgKm1lc3NhZ2UsCi0JICAgICBpbnQgbXNnX29jdGV0cywgaW50IHRhZ19sZW4sIG9jdGV0X3QgKnJlc3VsdCk7Ci0KKyAgICB1aW50OF90IG9wYWRbNjRdOworICAgIHNydHBfc2hhMV9jdHhfdCBjdHg7CisgICAgc3J0cF9zaGExX2N0eF90IGluaXRfY3R4OworfSBzcnRwX2htYWNfY3R4X3Q7CiAKICNlbmRpZiAvKiBITUFDX0ggKi8KZGlmZiAtLWdpdCBhL2NyeXB0by9pbmNsdWRlL2ludGVnZXJzLmggYi9jcnlwdG8vaW5jbHVkZS9pbnRlZ2Vycy5oCmluZGV4IDVlM2RhZGEuLmYyY2Q3YzAgMTAwNjQ0Ci0tLSBhL2NyeXB0by9pbmNsdWRlL2ludGVnZXJzLmgKKysrIGIvY3J5cHRvL2luY2x1ZGUvaW50ZWdlcnMuaApAQCAtOCwyNiArOCwyNiBAQAogICovCiAKIC8qCi0gKgkKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA1LCBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMTcsIENpc2NvIFN5c3RlbXMsIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogCisgKgogICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCiAgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCiAgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAogICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKKyAqCiAgKiAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAgKiAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAorICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwpAQCAtNDMsMTA0ICs0MywxMDQgQEAKICAqCiAgKi8KIAotCiAjaWZuZGVmIElOVEVHRVJTX0gKICNkZWZpbmUgSU5URUdFUlNfSAogCi0jaW5jbHVkZSAiY29uZmlnLmgiICAgICAgIC8qIGNvbmZpZ3VyYXRpb24gZmlsZSwgdXNpbmcgYXV0b2NvbmYgICAgICAgICAgKi8KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPiAgICAgICAvKiBzdGFuZGFyZCBpbnRlZ2VycyBzaG91bGQgYmUgcmVmZXJlbmNlZCBoZXJlICovCi0KLQogLyogdXNlIHN0YW5kYXJkIGludGVnZXIgZGVmaW5pdGlvbnMsIGlmIHRoZXkncmUgYXZhaWxhYmxlICAqLwotI2lmIEhBVkVfU1RESU5UX0ggCi0KKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NURElOVF9ICiAjaW5jbHVkZSA8c3RkaW50Lmg+Ci0KLSNlbGlmIEhBVkVfU1lTX0lOVF9UWVBFU19IICAKLQotI2luY2x1ZGUgPHN5cy9pbnRfdHlwZXMuaD4gICAgLyogdGhpcyBleGlzdHMgb24gU3VuIE9TICovCi0KLSNlbGlmIChIQVZFX01BQ0hJTkVfVFlQRVNfSCAmJiAhSEFWRV9NU19UWVBFUykgLyogT3BlbiBCU0QsIG5vdCBDeWd3aW4gKi8KLQorI2VuZGlmCisjaWZkZWYgSEFWRV9JTlRUWVBFU19ICisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX0lOVF9UWVBFU19ICisjaW5jbHVkZSA8c3lzL2ludF90eXBlcy5oPiAvKiB0aGlzIGV4aXN0cyBvbiBTdW4gT1MgKi8KKyNlbmRpZgorI2lmZGVmIEhBVkVfTUFDSElORV9UWVBFU19ICiAjaW5jbHVkZSA8bWFjaGluZS90eXBlcy5oPgorI2VuZGlmCiAKLSNlbHNlICAvKiBpZiBhbGwgZWxzZSBmYWlscywgdXNlIHRoZXNlIGRlZmluaXRpb25zICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCiAKLS8qCi0gKiBtYWNoaW5lLXNwZWNpZmljIGRlZmluaXRpb25zIGZvciAzMiBiaXQgbWFjaGluZXMgLSB5b3UgbWF5IG5lZWQgdG8KLSAqIGVkaXQgdGhlc2UgZGVmaW5pdGlvbnMgZm9yIHlvdXIgb3duIG1hY2hpbmUKLSAqLworLyogQ2FuIHdlIGRvIDY0IGJpdCBpbnRlZ2Vycz8gKi8KKyNpZiAhZGVmaW5lZChIQVZFX1VJTlQ2NF9UKQorI2lmIFNJWkVPRl9VTlNJR05FRF9MT05HID09IDgKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyB1aW50NjRfdDsKKyNlbGlmIFNJWkVPRl9VTlNJR05FRF9MT05HX0xPTkcgPT0gOAordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWludDY0X3Q7CisjZWxzZQorI2RlZmluZSBOT182NEJJVF9NQVRIIDEKKyNlbmRpZgorI2VuZGlmCiAKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50ICAgICB1aW50MTZfdDsKLXR5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgICAgICB1aW50MzJfdDsKLSNpZmRlZiBOT182NEJJVF9NQVRICisvKiBSZWFzb25hYmxlIGRlZmF1bHRzIGZvciAzMiBiaXQgbWFjaGluZXMgLSB5b3UgbWF5IG5lZWQgdG8KKyAqIGVkaXQgdGhlc2UgZGVmaW5pdGlvbnMgZm9yIHlvdXIgb3duIG1hY2hpbmUuICovCisjaWZuZGVmIEhBVkVfVUlOVDhfVAordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnQ4X3Q7CisjZW5kaWYKKyNpZm5kZWYgSEFWRV9VSU5UMTZfVAordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdWludDE2X3Q7CisjZW5kaWYKKyNpZm5kZWYgSEFWRV9VSU5UMzJfVAordHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDMyX3Q7CisjZW5kaWYKKyNpZm5kZWYgSEFWRV9JTlQzMl9UCit0eXBlZGVmIGludCBpbnQzMl90OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE5PXzY0QklUX01BVEgpICYmIGRlZmluZWQoSEFWRV9DT05GSUdfSCkKIHR5cGVkZWYgZG91YmxlIHVpbnQ2NF90OwogLyogYXNzZXJ0IHRoYXQgc2l6ZW9mKGRvdWJsZSkgPT0gOCAqLwotI2Vsc2UKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1aW50NjRfdDsKLSNlbmRpZgotCi0vKiAKLSAqIGlmIHdlJ3JlIG9uIE1TLCBhdm9pZCByZS1kZWZpbmluZyB0aGUgZm9sbG93aW5nIG1pcm9zb2Z0IHR5cGVzIC0gKgotICogdGhlc2UgYXJlIHByZXNlbnQgaW4gY3lnd2luCi0gKi8KLQotI2lmIChIQVZFX01TX1RZUEVTID09IDApCi0KLXR5cGVkZWYgc2hvcnQgaW50ICAgICBpbnQxNl90OwotdHlwZWRlZiBpbnQgICAgICAgICAgIGludDMyX3Q7Ci0jaWZkZWYgTk9fNjRCSVRfTUFUSAotdHlwZWRlZiBkb3VibGUgaW50NjRfdDsKLS8qIGFzc2VydCB0aGF0IHNpemVvZihkb3VibGUpID09IDggKi8KLSNlbHNlCi10eXBlZGVmIGxvbmcgbG9uZyBpbnQgaW50NjRfdDsKLSNlbmRpZgotCi0jZWxzZQotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+ICAvKiBwaWNrIHVwIGN5Z3dpbiBkZWZpbml0aW9ucyAqLwotCi0jZW5kaWYKLQorZXh0ZXJuIHVpbnQ2NF90IG1ha2U2NCh1aW50MzJfdCBoaWdoLCB1aW50MzJfdCBsb3cpOworZXh0ZXJuIHVpbnQzMl90IGhpZ2gzMih1aW50NjRfdCB2YWx1ZSk7CitleHRlcm4gdWludDMyX3QgbG93MzIodWludDY0X3QgdmFsdWUpOwogI2VuZGlmCiAKIC8qIFRoZXNlIG1hY3JvcyBhcmUgdG8gbG9hZCBhbmQgc3RvcmUgMzItYml0IHZhbHVlcyBmcm9tIHVuLWFsaWduZWQKICAgIGFkZHJlc3Nlcy4gIFRoaXMgaXMgcmVxdWlyZWQgZm9yIHByb2Nlc3NvcnMgdGhhdCBkbyBub3QgYWxsb3cgdW5hbGlnbmVkCiAgICBsb2Fkcy4gKi8KLSNpZiBBTElHTk1FTlRfMzJCSVRfUkVRVUlSRUQKLS8vIE5vdGUgdGhhdCBpZiBpdCdzIGluIGEgdmFyaWFibGUsIHlvdSBjYW4gbWVtY3B5IGl0Ci0jaWYgV09SRFNfQklHRU5ESUFOID09IDEKLSNkZWZpbmUgUFVUXzMyKGFkZHIsdmFsdWUpIFwKLSAgICB7IFwKLSAgICAgICAgKCh1bnNpZ25lZCBjaGFyICopIChhZGRyKSlbMF0gPSAodmFsdWUgPj4gMjQpOyBcCi0gICAgICAgICgodW5zaWduZWQgY2hhciAqKSAoYWRkcikpWzFdID0gKHZhbHVlID4+IDE2KSAmIDB4ZmY7IFwKLSAgICAgICAgKCh1bnNpZ25lZCBjaGFyICopIChhZGRyKSlbMl0gPSAodmFsdWUgPj4gOCkgJiAweGZmOyBcCi0gICAgICAgICgodW5zaWduZWQgY2hhciAqKSAoYWRkcikpWzNdID0gKHZhbHVlKSAgICAgICYgMHhmZjsgXAorI2lmZGVmIEFMSUdOTUVOVF8zMkJJVF9SRVFVSVJFRAorLyogTm90ZSB0aGF0IGlmIGl0J3MgaW4gYSB2YXJpYWJsZSwgeW91IGNhbiBtZW1jcHkgaXQgKi8KKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyNkZWZpbmUgUFVUXzMyKGFkZHIsIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKHVuc2lnbmVkIGNoYXIgKikoYWRkcikpWzBdID0gKHZhbHVlID4+IDI0KTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKCh1bnNpZ25lZCBjaGFyICopKGFkZHIpKVsxXSA9ICh2YWx1ZSA+PiAxNikgJiAweGZmOyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgodW5zaWduZWQgY2hhciAqKShhZGRyKSlbMl0gPSAodmFsdWUgPj4gOCkgJiAweGZmOyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKHVuc2lnbmVkIGNoYXIgKikoYWRkcikpWzNdID0gKHZhbHVlKSYweGZmOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9Ci0jZGVmaW5lIEdFVF8zMihhZGRyKSAoKCgodW5zaWduZWQgY2hhciAqKSAoYWRkcikpWzBdIDw8IDI0KSB8ICBcCi0gICAgICAgICAgICAgICAgICAgICAgKCgodW5zaWduZWQgY2hhciAqKSAoYWRkcikpWzFdIDw8IDE2KSB8ICBcCi0gICAgICAgICAgICAgICAgICAgICAgKCgodW5zaWduZWQgY2hhciAqKSAoYWRkcikpWzJdIDw8IDgpICB8ICBcCi0gICAgICAgICAgICAgICAgICAgICAgKCgodW5zaWduZWQgY2hhciAqKSAoYWRkcikpWzNdKSkgCisjZGVmaW5lIEdFVF8zMihhZGRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoKCh1bnNpZ25lZCBjaGFyICopKGFkZHIpKVswXSA8PCAyNCkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgKCgodW5zaWduZWQgY2hhciAqKShhZGRyKSlbMV0gPDwgMTYpIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICgoKHVuc2lnbmVkIGNoYXIgKikoYWRkcikpWzJdIDw8IDgpIHwgKCgodW5zaWduZWQgY2hhciAqKShhZGRyKSlbM10pKQogI2Vsc2UKLSNkZWZpbmUgUFVUXzMyKGFkZHIsdmFsdWUpIFwKLSAgICB7IFwKLSAgICAgICAgKCh1bnNpZ25lZCBjaGFyICopIChhZGRyKSlbM10gPSAodmFsdWUgPj4gMjQpOyBcCi0gICAgICAgICgodW5zaWduZWQgY2hhciAqKSAoYWRkcikpWzJdID0gKHZhbHVlID4+IDE2KSAmIDB4ZmY7IFwKLSAgICAgICAgKCh1bnNpZ25lZCBjaGFyICopIChhZGRyKSlbMV0gPSAodmFsdWUgPj4gOCkgJiAweGZmOyBcCi0gICAgICAgICgodW5zaWduZWQgY2hhciAqKSAoYWRkcikpWzBdID0gKHZhbHVlKSAgICAgICYgMHhmZjsgXAorI2RlZmluZSBQVVRfMzIoYWRkciwgdmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgodW5zaWduZWQgY2hhciAqKShhZGRyKSlbM10gPSAodmFsdWUgPj4gMjQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKHVuc2lnbmVkIGNoYXIgKikoYWRkcikpWzJdID0gKHZhbHVlID4+IDE2KSAmIDB4ZmY7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKCh1bnNpZ25lZCBjaGFyICopKGFkZHIpKVsxXSA9ICh2YWx1ZSA+PiA4KSAmIDB4ZmY7ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgodW5zaWduZWQgY2hhciAqKShhZGRyKSlbMF0gPSAodmFsdWUpJjB4ZmY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0KLSNkZWZpbmUgR0VUXzMyKGFkZHIpICgoKCh1bnNpZ25lZCBjaGFyICopIChhZGRyKSlbM10gPDwgMjQpIHwgIFwKLSAgICAgICAgICAgICAgICAgICAgICAoKCh1bnNpZ25lZCBjaGFyICopIChhZGRyKSlbMl0gPDwgMTYpIHwgIFwKLSAgICAgICAgICAgICAgICAgICAgICAoKCh1bnNpZ25lZCBjaGFyICopIChhZGRyKSlbMV0gPDwgOCkgIHwgIFwKLSAgICAgICAgICAgICAgICAgICAgICAoKCh1bnNpZ25lZCBjaGFyICopIChhZGRyKSlbMF0pKSAKKyNkZWZpbmUgR0VUXzMyKGFkZHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCgoKHVuc2lnbmVkIGNoYXIgKikoYWRkcikpWzNdIDw8IDI0KSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAoKCh1bnNpZ25lZCBjaGFyICopKGFkZHIpKVsyXSA8PCAxNikgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgKCgodW5zaWduZWQgY2hhciAqKShhZGRyKSlbMV0gPDwgOCkgfCAoKCh1bnNpZ25lZCBjaGFyICopKGFkZHIpKVswXSkpCiAjZW5kaWYgLy8gV09SRFNfQklHRU5ESUFOCiAjZWxzZQotI2RlZmluZSBQVVRfMzIoYWRkcix2YWx1ZSkgKigoKHVpbnQzMl90ICopIChhZGRyKSkgPSAodmFsdWUpCisjZGVmaW5lIFBVVF8zMihhZGRyLCB2YWx1ZSkgKigoKHVpbnQzMl90ICopIChhZGRyKSkgPSAodmFsdWUpCiAjZGVmaW5lIEdFVF8zMihhZGRyKSAoKigoKHVpbnQzMl90ICopIChhZGRyKSkpCiAjZW5kaWYKIAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCiAKICNlbmRpZiAvKiBJTlRFR0VSU19IICovCmRpZmYgLS1naXQgYS9jcnlwdG8vaW5jbHVkZS9rZXkuaCBiL2NyeXB0by9pbmNsdWRlL2tleS5oCmluZGV4IDA1YTA2NjkuLjM0OTgxMTQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9pbmNsdWRlL2tleS5oCisrKyBiL2NyeXB0by9pbmNsdWRlL2tleS5oCkBAIC0yLDMxICsyLDMxIEBACiAgKiBrZXkuaAogICoKICAqIGtleSB1c2FnZSBsaW1pdHMgZW5mb3JjZW1lbnQKLSAqIAorICoKICAqIERhdmlkIEEuIE1jZ3JldwogICogQ2lzY28gU3lzdGVtcywgSW5jLgogICovCiAvKgotICoJCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMTcgQ2lzY28gU3lzdGVtcywgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAorICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgotICogCisgKgogICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKICAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKICAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCiAgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAorICoKICAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKICAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCkBAIC00NSwzOCArNDUsNDQgQEAKICNpZm5kZWYgS0VZX0gKICNkZWZpbmUgS0VZX0gKIAotI2luY2x1ZGUgInJkYnguaCIgICAvKiBmb3IgeHRkX3NlcV9udW1fdCAqLworI2luY2x1ZGUgInJkYnguaCIgLyogZm9yIHNydHBfeHRkX3NlcV9udW1fdCAqLwogI2luY2x1ZGUgImVyci5oIgogCi10eXBlZGVmIHN0cnVjdCBrZXlfbGltaXRfY3R4X3QgKmtleV9saW1pdF90OworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBzcnRwX2tleV9saW1pdF9jdHhfdCAqc3J0cF9rZXlfbGltaXRfdDsKIAogdHlwZWRlZiBlbnVtIHsKLSAgIGtleV9ldmVudF9ub3JtYWwsCi0gICBrZXlfZXZlbnRfc29mdF9saW1pdCwKLSAgIGtleV9ldmVudF9oYXJkX2xpbWl0Ci19IGtleV9ldmVudF90OworICAgIHNydHBfa2V5X2V2ZW50X25vcm1hbCwKKyAgICBzcnRwX2tleV9ldmVudF9zb2Z0X2xpbWl0LAorICAgIHNydHBfa2V5X2V2ZW50X2hhcmRfbGltaXQKK30gc3J0cF9rZXlfZXZlbnRfdDsKIAotZXJyX3N0YXR1c190Ci1rZXlfbGltaXRfc2V0KGtleV9saW1pdF90IGtleSwgeHRkX3NlcV9udW1fdCBzKTsKK3NydHBfZXJyX3N0YXR1c190IHNydHBfa2V5X2xpbWl0X3NldChzcnRwX2tleV9saW1pdF90IGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcnRwX3h0ZF9zZXFfbnVtX3Qgcyk7CiAKLWVycl9zdGF0dXNfdAota2V5X2xpbWl0X2Nsb25lKGtleV9saW1pdF90IG9yaWdpbmFsLCBrZXlfbGltaXRfdCAqbmV3X2tleSk7CitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2tleV9saW1pdF9jbG9uZShzcnRwX2tleV9saW1pdF90IG9yaWdpbmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9rZXlfbGltaXRfdCAqbmV3X2tleSk7CiAKLWVycl9zdGF0dXNfdAota2V5X2xpbWl0X2NoZWNrKGNvbnN0IGtleV9saW1pdF90IGtleSk7CitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2tleV9saW1pdF9jaGVjayhjb25zdCBzcnRwX2tleV9saW1pdF90IGtleSk7CiAKLWtleV9ldmVudF90Ci1rZXlfbGltaXRfdXBkYXRlKGtleV9saW1pdF90IGtleSk7CitzcnRwX2tleV9ldmVudF90IHNydHBfa2V5X2xpbWl0X3VwZGF0ZShzcnRwX2tleV9saW1pdF90IGtleSk7CiAKLXR5cGVkZWYgZW51bSB7IAotICAga2V5X3N0YXRlX25vcm1hbCwKLSAgIGtleV9zdGF0ZV9wYXN0X3NvZnRfbGltaXQsCi0gICBrZXlfc3RhdGVfZXhwaXJlZAotfSBrZXlfc3RhdGVfdDsKK3R5cGVkZWYgZW51bSB7CisgICAgc3J0cF9rZXlfc3RhdGVfbm9ybWFsLAorICAgIHNydHBfa2V5X3N0YXRlX3Bhc3Rfc29mdF9saW1pdCwKKyAgICBzcnRwX2tleV9zdGF0ZV9leHBpcmVkCit9IHNydHBfa2V5X3N0YXRlX3Q7CiAKLXR5cGVkZWYgc3RydWN0IGtleV9saW1pdF9jdHhfdCB7Ci0gIHh0ZF9zZXFfbnVtX3QgbnVtX2xlZnQ7Ci0gIGtleV9zdGF0ZV90ICAgc3RhdGU7Ci19IGtleV9saW1pdF9jdHhfdDsKK3R5cGVkZWYgc3RydWN0IHNydHBfa2V5X2xpbWl0X2N0eF90IHsKKyAgICBzcnRwX3h0ZF9zZXFfbnVtX3QgbnVtX2xlZnQ7CisgICAgc3J0cF9rZXlfc3RhdGVfdCBzdGF0ZTsKK30gc3J0cF9rZXlfbGltaXRfY3R4X3Q7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCiAKICNlbmRpZiAvKiBLRVlfSCAqLwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2luY2x1ZGUvbWF0aC5oIGIvY3J5cHRvL2luY2x1ZGUvbWF0aC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWVkNzc1Li4wMDAwMDAwCi0tLSBhL2NyeXB0by9pbmNsdWRlL21hdGguaAorKysgL2Rldi9udWxsCkBAIC0xLDQzNSArMCwwIEBACi0vKgotICogbWF0aC5oCi0gKgotICogY3J5cHRvIG1hdGggb3BlcmF0aW9ucyBhbmQgZGF0YSB0eXBlcwotICoKLSAqIERhdmlkIEEuIE1jR3JldwotICogQ2lzY28gU3lzdGVtcywgSW5jLgotICovCi0vKgotICoJCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSBDaXNjbyBTeXN0ZW1zLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIAotICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAKLSAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKLSAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKi8KLQotI2lmbmRlZiBNQVRIX0gKLSNkZWZpbmUgTUFUSF9ICi0KLSNpbmNsdWRlICJkYXRhdHlwZXMuaCIKLQotaW5saW5lIGludAotb2N0ZXRfZ2V0X3dlaWdodChvY3RldF90IG9jdGV0KTsKLQotdW5zaWduZWQgY2hhcgotdjMyX3dlaWdodCh2MzJfdCBhKTsKLQotdW5zaWduZWQgY2hhcgotdjMyX2Rpc3RhbmNlKHYzMl90IHgsIHYzMl90IHkpOwotCi11bnNpZ25lZCBpbnQKLXYzMl9kb3RfcHJvZHVjdCh2MzJfdCBhLCB2MzJfdCBiKTsKLQotY2hhciAqCi1vY3RldF9iaXRfc3RyaW5nKG9jdGV0X3QgeCk7Ci0KLWNoYXIgKgotdjE2X2JpdF9zdHJpbmcodjE2X3QgeCk7Ci0KLWNoYXIgKgotdjMyX2JpdF9zdHJpbmcodjMyX3QgeCk7Ci0KLWNoYXIgKgotdjY0X2JpdF9zdHJpbmcodjY0X3QgeCk7Ci0KLWNoYXIgKgotdjEyOF9iaXRfc3RyaW5nKHYxMjhfdCB4KTsKLQotb2N0ZXRfdAotbmliYmxlX3RvX2hleF9jaGFyKG9jdGV0X3QgbmliYmxlKTsKLQotY2hhciAqCi1vY3RldF9oZXhfc3RyaW5nKG9jdGV0X3QgeCk7Ci0KLWNoYXIgKgotb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoY29uc3Qgb2N0ZXRfdCAqc3RyLCBpbnQgbGVuZ3RoKTsKLQotY2hhciAqCi12MTZfaGV4X3N0cmluZyh2MTZfdCB4KTsKLQotY2hhciAqCi12MzJfaGV4X3N0cmluZyh2MzJfdCB4KTsKLQotY2hhciAqCi12NjRfaGV4X3N0cmluZyh2NjRfdCB4KTsKLQotY2hhciAqCi12MTI4X2hleF9zdHJpbmcodjEyOF90IHgpOwotCi1jaGFyICoKLWNoYXJfdG9faGV4X3N0cmluZyhjaGFyICp4LCBpbnQgbnVtX2NoYXIpOwotCi1pbnQKLWhleF9jaGFyX3RvX25pYmJsZShvY3RldF90IGMpOwotCi1pbnQKLWlzX2hleF9zdHJpbmcoY2hhciAqcyk7Ci0KLW9jdGV0X3QKLWhleF9zdHJpbmdfdG9fb2N0ZXQoY2hhciAqcyk7Ci0KLS8qCi0gKiBoZXhfc3RyaW5nX3RvX29jdGV0X3N0cmluZyBjb252ZXJ0cyBhIGhleGFkZWNpbWFsIHN0cmluZwotICogb2YgbGVuZ3RoIDIgKiBsZW4gdG8gYSByYXcgb2N0ZXQgc3RyaW5nIG9mIGxlbmd0aCBsZW4KLSAqLwotCi1pbnQKLWhleF9zdHJpbmdfdG9fb2N0ZXRfc3RyaW5nKGNoYXIgKnJhdywgY2hhciAqaGV4LCBpbnQgbGVuKTsgCi0KLXYxNl90Ci1oZXhfc3RyaW5nX3RvX3YxNihjaGFyICpzKTsKLQotdjMyX3QKLWhleF9zdHJpbmdfdG9fdjMyKGNoYXIgKnMpOwotCi12NjRfdAotaGV4X3N0cmluZ190b192NjQoY2hhciAqcyk7Ci0KLXYxMjhfdAotaGV4X3N0cmluZ190b192MTI4KGNoYXIgKnMpOwotCi0vKiB0aGUgbWF0cml4IEFbXSBpcyBzdG9yZWQgaW4gY29sdW1uIGZvcm1hdCwgaS5lLiwgQVtpXSBpcwotICAgdGhlIGl0aCBjb2x1bW4gb2YgdGhlIG1hdHJpeCAqLwotCi1vY3RldF90IAotQV90aW1lc194X3BsdXNfYihvY3RldF90IEFbOF0sIG9jdGV0X3QgeCwgb2N0ZXRfdCBiKTsKLQotdm9pZAotdjE2X2NvcHlfb2N0ZXRfc3RyaW5nKHYxNl90ICp4LCBjb25zdCBvY3RldF90IHNbMl0pOwotCi12b2lkCi12MzJfY29weV9vY3RldF9zdHJpbmcodjMyX3QgKngsIGNvbnN0IG9jdGV0X3Qgc1s0XSk7Ci0KLXZvaWQKLXY2NF9jb3B5X29jdGV0X3N0cmluZyh2NjRfdCAqeCwgY29uc3Qgb2N0ZXRfdCBzWzhdKTsKLQotdm9pZAotdjEyOF9jb3B5X29jdGV0X3N0cmluZyh2MTI4X3QgKngsIGNvbnN0IG9jdGV0X3Qgc1sxNl0pOwotCi12b2lkCi12MTI4X2FkZCh2MTI4X3QgKnosIHYxMjhfdCAqeCwgdjEyOF90ICp5KTsKLQotaW50Ci1vY3RldF9zdHJpbmdfaXNfZXEob2N0ZXRfdCAqYSwgb2N0ZXRfdCAqYiwgaW50IGxlbik7Ci0KLXZvaWQKLW9jdGV0X3N0cmluZ19zZXRfdG9femVybyhvY3RldF90ICpzLCBpbnQgbGVuKTsKLQotCi0KLS8qIAotICogdGhlIG1hdHJpeCBBW10gaXMgc3RvcmVkIGluIGNvbHVtbiBmb3JtYXQsIGkuZS4sIEFbaV0gaXMgdGhlIGl0aAotICogY29sdW1uIG9mIHRoZSBtYXRyaXgKLSovCi1vY3RldF90IAotQV90aW1lc194X3BsdXNfYihvY3RldF90IEFbOF0sIG9jdGV0X3QgeCwgb2N0ZXRfdCBiKTsKLQotdm9pZAotdjEyOF9jb3B5X29jdGV0X3N0cmluZyh2MTI4X3QgKngsIGNvbnN0IG9jdGV0X3Qgc1sxNl0pOwotCi12b2lkCi12MTI4X2xlZnRfc2hpZnQodjEyOF90ICp4LCBpbnQgaW5kZXgpOwotCi12b2lkCi12MTI4X3JpZ2h0X3NoaWZ0KHYxMjhfdCAqeCwgaW50IGluZGV4KTsKLQotLyoKLSAqIHRoZSBmb2xsb3dpbmcgbWFjcm9zIGRlZmluZSB0aGUgZGF0YSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zCi0gKiAKLSAqIElmIERBVEFUWVBFU19VU0VfTUFDUk9TIGlzIGRlZmluZWQsIHRoZW4gdGhlc2UgbWFjcm9zIGFyZSB1c2VkCi0gKiBkaXJlY3RseSAoYW5kIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQgaXMgYXZvaWRlZCkuICBPdGhlcndpc2UsCi0gKiB0aGUgbWFjcm9zIGFyZSB1c2VkIHRocm91Z2ggdGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGRhdGF0eXBlcy5jCi0gKiAoYW5kIHRoZSBjb21waWxlciBwcm92aWRlcyBiZXR0ZXIgd2FybmluZ3MpLgotICovCi0KLSNkZWZpbmUgX3YxMjhfc2V0X3RvX3plcm8oeCkgICAgIFwKLSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoeCktPnYzMlswXSA9IDAsICAgICAgICAgICAgICBcCi0gICh4KS0+djMyWzFdID0gMCwgICAgICAgICAgICAgIFwKLSAgKHgpLT52MzJbMl0gPSAwLCAgICAgICAgICAgICAgXAotICAoeCktPnYzMlszXSA9IDAgICAgICAgICAgICAgICBcCi0pCi0KLSNkZWZpbmUgX3YxMjhfY29weSh4LCB5KSAgICAgICAgICBcCi0oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICh4KS0+djMyWzBdID0gKHkpLT52MzJbMF0sICAgICBcCi0gICh4KS0+djMyWzFdID0gKHkpLT52MzJbMV0sICAgICBcCi0gICh4KS0+djMyWzJdID0gKHkpLT52MzJbMl0sICAgICBcCi0gICh4KS0+djMyWzNdID0gKHkpLT52MzJbM10gICAgICBcCi0pCi0KLSNkZWZpbmUgX3YxMjhfeG9yKHosIHgsIHkpICAgICAgICAgICAgICAgICAgICAgICBcCi0oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAoeiktPnYzMlswXSA9ICh4KS0+djMyWzBdIF4gKHkpLT52MzJbMF0sICAgICBcCi0gICAoeiktPnYzMlsxXSA9ICh4KS0+djMyWzFdIF4gKHkpLT52MzJbMV0sICAgICBcCi0gICAoeiktPnYzMlsyXSA9ICh4KS0+djMyWzJdIF4gKHkpLT52MzJbMl0sICAgICBcCi0gICAoeiktPnYzMlszXSA9ICh4KS0+djMyWzNdIF4gKHkpLT52MzJbM10gICAgICBcCi0pCi0KLSNkZWZpbmUgX3YxMjhfYW5kKHosIHgsIHkpICAgICAgICAgICAgICAgICAgICAgICBcCi0oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAoeiktPnYzMlswXSA9ICh4KS0+djMyWzBdICYgKHkpLT52MzJbMF0sICAgICBcCi0gICAoeiktPnYzMlsxXSA9ICh4KS0+djMyWzFdICYgKHkpLT52MzJbMV0sICAgICBcCi0gICAoeiktPnYzMlsyXSA9ICh4KS0+djMyWzJdICYgKHkpLT52MzJbMl0sICAgICBcCi0gICAoeiktPnYzMlszXSA9ICh4KS0+djMyWzNdICYgKHkpLT52MzJbM10gICAgICBcCi0pCi0KLSNkZWZpbmUgX3YxMjhfb3IoeiwgeCwgeSkgICAgICAgICAgICAgICAgICAgICAgICBcCi0oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAoeiktPnYzMlswXSA9ICh4KS0+djMyWzBdIHwgKHkpLT52MzJbMF0sICAgICBcCi0gICAoeiktPnYzMlsxXSA9ICh4KS0+djMyWzFdIHwgKHkpLT52MzJbMV0sICAgICBcCi0gICAoeiktPnYzMlsyXSA9ICh4KS0+djMyWzJdIHwgKHkpLT52MzJbMl0sICAgICBcCi0gICAoeiktPnYzMlszXSA9ICh4KS0+djMyWzNdIHwgKHkpLT52MzJbM10gICAgICBcCi0pCi0KLSNkZWZpbmUgX3YxMjhfY29tcGxlbWVudCh4KSAgICAgICAgXAotKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAoeCktPnYzMlswXSA9IH4oeCktPnYzMlswXSwgICAgIFwKLSAgICh4KS0+djMyWzFdID0gfih4KS0+djMyWzFdLCAgICAgXAotICAgKHgpLT52MzJbMl0gPSB+KHgpLT52MzJbMl0sICAgICBcCi0gICAoeCktPnYzMlszXSA9IH4oeCktPnYzMlszXSAgICAgIFwKLSkKLQotI2RlZmluZSBfdjEyOF9pc19lcSh4LCB5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICgoKHgpLT52NjRbMF0gPT0gKHkpLT52NjRbMF0pICYmICgoeCktPnY2NFsxXSA9PSAoeSktPnY2NFsxXSkpCi0KLQotI2RlZmluZSBfdjEyOF94b3JfZXEoeiwgeCkgICAgICAgICBcCi0oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICh6KS0+djY0WzBdIF49ICh4KS0+djY0WzBdLCAgICAgXAotICAgKHopLT52NjRbMV0gXj0gKHgpLT52NjRbMV0gICAgICBcCi0pCi0KLQotI2RlZmluZSBfdjEyOF9nZXRfYml0KHgsIGJpdCkgICAgICAgICAgICAgICAgICAgICBcCi0oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICh4LT52MzJbMy0oKGJpdCkgPj4gNSldID4+ICgoYml0KSAmIDMxKSkgJiAxICAgICAgIFwKLSkKLQotI2RlZmluZSBfdjEyOF9zZXRfYml0KHgsIGJpdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKCgoeCktPnYzMlszLSgoYml0KSA+PiA1KV0pIHw9ICgodWludDMyX3QpMSA8PCAoKGJpdCkgJiAzMSkpKSBcCi0pCi0KLSNkZWZpbmUgX3YxMjhfY2xlYXJfYml0KHgsIGJpdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKCgoeCktPnYzMlsoYml0KSA+PiA1XSkgJj0gfigodW5zaWduZWQgbG9uZykxIDw8ICgoYml0KSAmIDMxKSkpIFwKLSkKLQotI2RlZmluZSBfdjEyOF9zZXRfYml0X3RvKHgsIGJpdCwgdmFsdWUpICAgXAotKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgKHZhbHVlKSA/IF92MTI4X3NldF9iaXQoeCwgYml0KSA6ICAgICAgXAotICAgICAgICAgICAgIF92MTI4X2NsZWFyX2JpdCh4LCBiaXQpICAgICAgXAotKQotCi0KLSNpZiBPTEQKLQotI2RlZmluZSBfdjEyOF9nZXRfYml0KHgsIGJpdCkgICAgICAgICAgICAgICAgICAgICBcCi0oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKCgoKHgpLT52MzJbKGJpdCkgPj4gNV0pID4+ICgoYml0KSAmIDMxKSkgJiAxKSAgXAotKQotCi0jZGVmaW5lIF92MTI4X3NldF9iaXQoeCwgYml0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoKCh4KS0+djMyWyhiaXQpID4+IDVdKSB8PSAoKHVuc2lnbmVkIGxvbmcpMSA8PCAoKGJpdCkgJiAzMSkpKSBcCi0pCi0KLSNkZWZpbmUgX3YxMjhfY2xlYXJfYml0KHgsIGJpdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKCgoeCktPnYzMlsoYml0KSA+PiA1XSkgJj0gfigodW5zaWduZWQgbG9uZykxIDw8ICgoYml0KSAmIDMxKSkpIFwKLSkKLQotI2RlZmluZSBfdjEyOF9zZXRfYml0X3RvKHgsIGJpdCwgdmFsdWUpICAgXAotKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgKHZhbHVlKSA/IF92MTI4X3NldF9iaXQoeCwgYml0KSA6ICAgICAgXAotICAgICAgICAgICAgIF92MTI4X2NsZWFyX2JpdCh4LCBiaXQpICAgICAgXAotKQotCi0jZW5kaWYgLyogT0xEICovCi0KLSNpZiBXT1JEU19CSUdFTkRJQU4KLQotI2RlZmluZSBfdjEyOF9hZGQoeiwgeCwgeSkgeyAgICAgICAgICAgICAgICAgICAgXAotICB1aW50NjRfdCB0bXA7CQkJCQlcCi0gICAgCQkJCQkJXAotICB0bXAgPSB4LT52MzJbM10gKyB5LT52MzJbM107ICAgICAgICAgICAgICAgICAgXAotICB6LT52MzJbM10gPSAodWludDMyX3QpIHRtcDsJCQlcCi0gIAkJCQkJCVwKLSAgdG1wID0gIHgtPnYzMlsyXSArIHktPnYzMlsyXSArICh0bXAgPj4gMzIpOwlcCi0gIHotPnYzMlsyXSA9ICh1aW50MzJfdCkgdG1wOyAgICAgICAgICAgICAgICAgICBcCi0JCQkJCQlcCi0gIHRtcCA9ICB4LT52MzJbMV0gKyB5LT52MzJbMV0gKyAodG1wID4+IDMyKTsJXAotICB6LT52MzJbMV0gPSAodWludDMyX3QpIHRtcDsJCQlcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHRtcCA9ICB4LT52MzJbMF0gKyB5LT52MzJbMF0gKyAodG1wID4+IDMyKTsJXAotICB6LT52MzJbMF0gPSAodWludDMyX3QpIHRtcDsJCQlcCi19Ci0KLSNlbHNlIC8qIGFzc3VtZSBsaXR0bGUgZW5kaWFuIGFyY2hpdGVjdHVyZSAqLwotCi0jZGVmaW5lIF92MTI4X2FkZCh6LCB4LCB5KSB7ICAgICAgICAgICAgICAgICAgICBcCi0gIHVpbnQ2NF90IHRtcDsJCQkJCVwKLQkJCQkJCVwKLSAgdG1wID0gaHRvbmwoeC0+djMyWzNdKSArIGh0b25sKHktPnYzMlszXSk7CVwKLSAgei0+djMyWzNdID0gbnRvaGwoKHVpbnQzMl90KSB0bXApOwkJXAotICAJCQkJCQlcCi0gIHRtcCA9ICBodG9ubCh4LT52MzJbMl0pICsgaHRvbmwoeS0+djMyWzJdKQlcCi0gICAgICAgKyBodG9ubCh0bXAgPj4gMzIpOwkJCVwKLSAgei0+djMyWzJdID0gbnRvaGwoKHVpbnQzMl90KSB0bXApOwkJXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB0bXAgPSAgaHRvbmwoeC0+djMyWzFdKSArIGh0b25sKHktPnYzMlsxXSkJXAotICAgICAgICsgaHRvbmwodG1wID4+IDMyKTsJCQlcCi0gIHotPnYzMlsxXSA9IG50b2hsKCh1aW50MzJfdCkgdG1wKTsJCVwKLSAgCQkJCQkJXAotICB0bXAgPSAgaHRvbmwoeC0+djMyWzBdKSArIGh0b25sKHktPnYzMlswXSkJXAotICAgICAgICsgaHRvbmwodG1wID4+IDMyKTsJCQlcCi0gIHotPnYzMlswXSA9IG50b2hsKCh1aW50MzJfdCkgdG1wKTsJCVwKLX0KLQkJCQkJCQotI2VuZGlmIC8qIFdPUkRTX0JJR0VORElBTiAqLyAgICAgICAgICAgICAgICAgICAgICAKLQotCi0jaWZkZWYgREFUQVRZUEVTX1VTRV9NQUNST1MgIC8qIGxpdHRsZSBmdW5jdGlvbnMgYXJlIHJlYWxseSBtYWNyb3MgKi8KLQotI2RlZmluZSB2MTI4X3NldF90b196ZXJvKHopICAgICAgIF92MTI4X3NldF90b196ZXJvKHopCi0jZGVmaW5lIHYxMjhfY29weSh6LCB4KSAgICAgICAgICAgX3YxMjhfY29weSh6LCB4KQotI2RlZmluZSB2MTI4X3hvcih6LCB4LCB5KSAgICAgICAgIF92MTI4X3hvcih6LCB4LCB5KQotI2RlZmluZSB2MTI4X2FuZCh6LCB4LCB5KSAgICAgICAgIF92MTI4X2FuZCh6LCB4LCB5KQotI2RlZmluZSB2MTI4X29yKHosIHgsIHkpICAgICAgICAgIF92MTI4X29yKHosIHgsIHkpCi0jZGVmaW5lIHYxMjhfY29tcGxlbWVudCh4KSAgICAgICAgX3YxMjhfY29tcGxlbWVudCh4KSAKLSNkZWZpbmUgdjEyOF9pc19lcSh4LCB5KSAgICAgICAgICBfdjEyOF9pc19lcSh4LCB5KQotI2RlZmluZSB2MTI4X3hvcl9lcSh4LCB5KSAgICAgICAgIF92MTI4X3hvcl9lcSh4LCB5KQotI2RlZmluZSB2MTI4X2dldF9iaXQoeCwgaSkgICAgICAgIF92MTI4X2dldF9iaXQoeCwgaSkKLSNkZWZpbmUgdjEyOF9zZXRfYml0KHgsIGkpICAgICAgICBfdjEyOF9zZXRfYml0KHgsIGkpCi0jZGVmaW5lIHYxMjhfY2xlYXJfYml0KHgsIGkpICAgICAgX3YxMjhfY2xlYXJfYml0KHgsIGkpCi0jZGVmaW5lIHYxMjhfc2V0X2JpdF90byh4LCBpLCB5KSAgX3YxMjhfc2V0X2JpdF90byh4LCBpLCB5KQotCi0jZWxzZQotCi12b2lkCi12MTI4X3NldF90b196ZXJvKHYxMjhfdCAqeCk7Ci0KLWludAotdjEyOF9pc19lcShjb25zdCB2MTI4X3QgKngsIGNvbnN0IHYxMjhfdCAqeSk7Ci0KLXZvaWQKLXYxMjhfY29weSh2MTI4X3QgKngsIGNvbnN0IHYxMjhfdCAqeSk7Ci0KLXZvaWQKLXYxMjhfeG9yKHYxMjhfdCAqeiwgdjEyOF90ICp4LCB2MTI4X3QgKnkpOwotCi12b2lkCi12MTI4X2FuZCh2MTI4X3QgKnosIHYxMjhfdCAqeCwgdjEyOF90ICp5KTsKLQotdm9pZAotdjEyOF9vcih2MTI4X3QgKnosIHYxMjhfdCAqeCwgdjEyOF90ICp5KTsgCi0KLXZvaWQKLXYxMjhfY29tcGxlbWVudCh2MTI4X3QgKngpOwotCi1pbnQKLXYxMjhfZ2V0X2JpdChjb25zdCB2MTI4X3QgKngsIGludCBpKTsKLQotdm9pZAotdjEyOF9zZXRfYml0KHYxMjhfdCAqeCwgaW50IGkpIDsgICAgIAotCi12b2lkCi12MTI4X2NsZWFyX2JpdCh2MTI4X3QgKngsIGludCBpKTsgICAgCi0KLXZvaWQKLXYxMjhfc2V0X2JpdF90byh2MTI4X3QgKngsIGludCBpLCBpbnQgeSk7Ci0KLSNlbmRpZiAvKiBEQVRBVFlQRVNfVVNFX01BQ1JPUyAqLwotCi0vKgotICogb2N0ZXRfc3RyaW5nX2lzX2VxKGEsYiwgbGVuKSByZXR1cm5zIDEgaWYgdGhlIGxlbmd0aCBsZW4gc3RyaW5ncyBhCi0gKiBhbmQgYiBhcmUgbm90IGVxdWFsLCByZXR1cm5zIDAgb3RoZXJ3aXNlCi0gKi8KLQotaW50Ci1vY3RldF9zdHJpbmdfaXNfZXEob2N0ZXRfdCAqYSwgb2N0ZXRfdCAqYiwgaW50IGxlbik7Ci0KLXZvaWQKLW9jdGV0X3N0cmluZ19zZXRfdG9femVybyhvY3RldF90ICpzLCBpbnQgbGVuKTsKLQotCi0vKgotICogZnVuY3Rpb25zIG1hbmlwdWxhdGluZyBiaXRfdmVjdG9yX3QgCi0gKgotICogQSBiaXR2ZWN0b3JfdCBjb25zaXN0cyBvZiBhbiBhcnJheSBvZiB3b3JkcyBhbmQgYW4gaW50ZWdlcgotICogcmVwcmVzZW50aW5nIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgYml0cyBzdG9yZWQgaW4gdGhlIGFycmF5LgotICogVGhlIGJpdHMgYXJlIHBhY2tlZCBhcyBmb2xsb3dzOiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IGlzIHRoYXQKLSAqIG9mIHdvcmRbMF0sIHdoaWxlIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBpcyB0aGUgbnRoIG1vc3QKLSAqIHNpZ25pZmljYW50IGJpdCBvZiB3b3JkW21dLCB3aGVyZSBsZW5ndGggPSBiaXRzX3Blcl93b3JkICogbSArIG4uCi0gKiAKLSAqLwotCi0jZGVmaW5lIGJpdHNfcGVyX3dvcmQgIDMyCi0jZGVmaW5lIGJ5dGVzX3Blcl93b3JkIDQKLQotdHlwZWRlZiBzdHJ1Y3QgewotICB1aW50MzJfdCBsZW5ndGg7ICAgCi0gIHVpbnQzMl90ICp3b3JkOwotfSBiaXR2ZWN0b3JfdDsKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLWludAotYml0dmVjdG9yX2FsbG9jKGJpdHZlY3Rvcl90ICp2LCB1bnNpZ25lZCBsb25nIGxlbmd0aCk7Ci0KLXZvaWQKLWJpdHZlY3Rvcl9zZXRfYml0KGJpdHZlY3Rvcl90ICp2LCBpbnQgYml0X2luZGV4KTsKLQotaW50Ci1iaXR2ZWN0b3JfZ2V0X2JpdChjb25zdCBiaXR2ZWN0b3JfdCAqdiwgaW50IGJpdF9pbmRleCk7Ci0KLWludAotYml0dmVjdG9yX3ByaW50X2hleChjb25zdCBiaXR2ZWN0b3JfdCAqdiwgRklMRSAqc3RyZWFtKTsKLQotaW50Ci1iaXR2ZWN0b3Jfc2V0X2Zyb21faGV4KGJpdHZlY3Rvcl90ICp2LCBjaGFyICpzdHJpbmcpOwotCi0jZW5kaWYgLyogTUFUSF9IICovCi0KLQotCmRpZmYgLS1naXQgYS9jcnlwdG8vaW5jbHVkZS9udWxsX2F1dGguaCBiL2NyeXB0by9pbmNsdWRlL251bGxfYXV0aC5oCmluZGV4IGFkYjYwNTIuLjQ5MGRkN2IgMTAwNjQ0Ci0tLSBhL2NyeXB0by9pbmNsdWRlL251bGxfYXV0aC5oCisrKyBiL2NyeXB0by9pbmNsdWRlL251bGxfYXV0aC5oCkBAIC03LDI2ICs3LDI2IEBACiAgKi8KIAogLyoKLSAqCQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUsIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxNywgQ2lzY28gU3lzdGVtcywgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAorICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgotICogCisgKgogICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKICAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKICAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCiAgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAorICoKICAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKICAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCkBAIC00NywyMiArNDcsMjcgQEAKIAogI2luY2x1ZGUgImF1dGguaCIKIAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCiB0eXBlZGVmIHN0cnVjdCB7Ci0JY2hhciBmb287Ci19IG51bGxfYXV0aF9jdHhfdDsKKyAgICBjaGFyIGZvbzsKK30gc3J0cF9udWxsX2F1dGhfY3R4X3Q7CiAKLWVycl9zdGF0dXNfdAotbnVsbF9hdXRoX2FsbG9jKGF1dGhfdCAqKmEsIGludCBrZXlfbGVuLCBpbnQgb3V0X2xlbik7CisjaWYgMAorc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9udWxsX2F1dGhfYWxsb2Moc3J0cF9hdXRoX3QgKiphLCBpbnQga2V5X2xlbiwgaW50IG91dF9sZW4pOwogCi1lcnJfc3RhdHVzX3QKLW51bGxfYXV0aF9kZWFsbG9jKGF1dGhfdCAqYSk7CitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX251bGxfYXV0aF9kZWFsbG9jKHNydHBfYXV0aF90ICphKTsKIAotZXJyX3N0YXR1c190Ci1udWxsX2F1dGhfaW5pdChudWxsX2F1dGhfY3R4X3QgKnN0YXRlLCBjb25zdCBvY3RldF90ICprZXksIGludCBrZXlfbGVuKTsKK3NydHBfZXJyX3N0YXR1c190IHNydHBfbnVsbF9hdXRoX2luaXQoc3J0cF9udWxsX2F1dGhfY3R4X3QgKnN0YXRlLCBjb25zdCB1aW50OF90ICprZXksIGludCBrZXlfbGVuKTsKIAotZXJyX3N0YXR1c190Ci1udWxsX2F1dGhfY29tcHV0ZSAobnVsbF9hdXRoX2N0eF90ICpzdGF0ZSwgb2N0ZXRfdCAqbWVzc2FnZSwKLQkJICAgaW50IG1zZ19vY3RldHMsIGludCB0YWdfbGVuLCBvY3RldF90ICpyZXN1bHQpOworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9udWxsX2F1dGhfY29tcHV0ZShzcnRwX251bGxfYXV0aF9jdHhfdCAqc3RhdGUsIHVpbnQ4X3QgKm1lc3NhZ2UsIGludCBtc2dfb2N0ZXRzLCBpbnQgdGFnX2xlbiwgdWludDhfdCAqcmVzdWx0KTsKIAorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCiAKICNlbmRpZiAvKiBOVUxMX0FVVEhfSCAqLwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2luY2x1ZGUvbnVsbF9jaXBoZXIuaCBiL2NyeXB0by9pbmNsdWRlL251bGxfY2lwaGVyLmgKaW5kZXggY2ZiZWZlOS4uNWU4YzkxYyAxMDA2NDQKLS0tIGEvY3J5cHRvL2luY2x1ZGUvbnVsbF9jaXBoZXIuaAorKysgYi9jcnlwdG8vaW5jbHVkZS9udWxsX2NpcGhlci5oCkBAIC05LDI2ICs5LDI2IEBACiAgKi8KIAogLyoKLSAqCQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUsIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxNywgQ2lzY28gU3lzdGVtcywgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAorICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgotICogCisgKgogICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKICAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKICAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCiAgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAorICoKICAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKICAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCkBAIC00NCw3ICs0NCw2IEBACiAgKgogICovCiAKLQogI2lmbmRlZiBOVUxMX0NJUEhFUl9ICiAjZGVmaW5lIE5VTExfQ0lQSEVSX0gKIApAQCAtNTIsMjkgKzUxLDcgQEAKICNpbmNsdWRlICJjaXBoZXIuaCIKIAogdHlwZWRlZiBzdHJ1Y3QgewotICBjaGFyIGZvbyA7LyogZW1wdHksIGZvciBub3cgKi8KLX0gbnVsbF9jaXBoZXJfY3R4X3Q7Ci0KLQotLyoKLSAqIG5vbmUgb2YgdGhlc2UgZnVuY3Rpb25zIGRvIGFueXRoaW5nICh0aG91Z2ggZnV0dXJlIHZlcnNpb25zIG1heSBrZWVwCi0gKiB0cmFjayBvZiBieXRlcyBlbmNyeXB0ZWQsIG51bWJlciBvZiBpbnN0YW5jZXMsIGFuZC9vciBvdGhlciBpbmZvKS4KLSAqLwotCi1lcnJfc3RhdHVzX3QKLW51bGxfY2lwaGVyX2luaXQobnVsbF9jaXBoZXJfY3R4X3QgKmMsIGNvbnN0IG9jdGV0X3QgKmtleSk7Ci0KLWVycl9zdGF0dXNfdAotbnVsbF9jaXBoZXJfc2V0X3NlZ21lbnQobnVsbF9jaXBoZXJfY3R4X3QgKmMsCi0JCQl1bnNpZ25lZCBsb25nIGluZGV4KTsKLQotZXJyX3N0YXR1c190Ci1udWxsX2NpcGhlcl9lbmNyeXB0KG51bGxfY2lwaGVyX2N0eF90ICpjLAotCQkgICAgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgKmJ5dGVzX3RvX2VuY3IpOwotCi0KLWVycl9zdGF0dXNfdAotbnVsbF9jaXBoZXJfZW5jcnlwdF9hbGlnbmVkKG51bGxfY2lwaGVyX2N0eF90ICpjLAotCQkJICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGJ5dGVzX3RvX2VuY3IpOworICAgIGNoYXIgZm9vOyAvKiBlbXB0eSwgZm9yIG5vdyAqLworfSBzcnRwX251bGxfY2lwaGVyX2N0eF90OwogCiAjZW5kaWYgLyogTlVMTF9DSVBIRVJfSCAqLwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2luY2x1ZGUvcHJuZy5oIGIvY3J5cHRvL2luY2x1ZGUvcHJuZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWEwNmFmLi4wMDAwMDAwCi0tLSBhL2NyeXB0by9pbmNsdWRlL3BybmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBwcm5nLmgKLSAqCi0gKiBwc2V1ZG9yYW5kb20gc291cmNlCi0gKgotICogRGF2aWQgQS4gTWNHcmV3Ci0gKiBDaXNjbyBTeXN0ZW1zLCBJbmMuCi0gKi8KLQotI2lmbmRlZiBQUk5HX0gKLSNkZWZpbmUgUFJOR19ICi0KLSNpZm5kZWYgQ0xPQ0tTX1BFUl9TRUMKLSNpbmNsdWRlIDx0aW1lLmg+ICAgICAgICAgLyogZm9yIHRpbWUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZW5kaWYKLQotI2luY2x1ZGUgInJhbmRfc291cmNlLmgiICAvKiBmb3IgcmFuZF9zb3VyY2VfZnVuY190IGRlZmluaXRpb24gICAgICAgKi8KLSNpbmNsdWRlICJhZXMuaCIgICAgICAgICAgLyogZm9yIGFlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jaW5jbHVkZSAiYWVzX2ljbS5oIiAgICAgIC8qIGZvciBhZXMgY3RyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0jZGVmaW5lIE1BWF9QUk5HX09VVF9MRU4gMHhmZmZmZmZmZlUKLQotLyoKLSAqIHg5MTdfcHJuZyBpcyBhbiBBTlNJIFg5LjE3LWxpa2UgQUVTLWJhc2VkIFBSTkcKLSAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIHYxMjhfdCAgIHN0YXRlOyAgICAgICAgICAvKiBzdGF0ZSBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgYWVzX2V4cGFuZGVkX2tleV90IGtleTsgIC8qIHNlY3JldCBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICB1aW50MzJfdCBvY3RldF9jb3VudDsgICAgLyogbnVtYmVyIG9mIG9jdGV0cyBvdXRwdXQgc2luY2UgbGFzdCBpbml0ICovCi0gIHJhbmRfc291cmNlX2Z1bmNfdCByYW5kOyAvKiByYW5kb20gc291cmNlIGZvciByZS1pbml0aWFsaXphdGlvbiAgICAgKi8KLX0geDkxN19wcm5nX3Q7Ci0KLWVycl9zdGF0dXNfdAoteDkxN19wcm5nX2luaXQoKTsKLQotZXJyX3N0YXR1c190Ci14OTE3X3BybmdfZ2V0X29jdGV0X3N0cmluZyhvY3RldF90ICpkZXN0LCB1aW50MzJfdCBsZW4pOwotCi0KLS8qCi0gKiBjdHJfcHJuZyBpcyBhbiBBRVMtQ1RSIGJhc2VkIFBSTkcKLSAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIHVpbnQzMl90IG9jdGV0X2NvdW50OyAgICAvKiBudW1iZXIgb2Ygb2N0ZXRzIG91dHB1dCBzaW5jZSBsYXN0IGluaXQgKi8KLSAgYWVzX2ljbV9jdHhfdCAgIHN0YXRlOyAgIC8qIHN0YXRlIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICByYW5kX3NvdXJjZV9mdW5jX3QgcmFuZDsgLyogcmFuZG9tIHNvdXJjZSBmb3IgcmUtaW5pdGlhbGl6YXRpb24gICAgICovCi19IGN0cl9wcm5nX3Q7Ci0KLWVycl9zdGF0dXNfdAotY3RyX3BybmdfaW5pdCgpOwotCi1lcnJfc3RhdHVzX3QKLWN0cl9wcm5nX2dldF9vY3RldF9zdHJpbmcodm9pZCAqZGVzdCwgaW50IGxlbik7Ci0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9jcnlwdG8vaW5jbHVkZS9yYW5kX3NvdXJjZS5oIGIvY3J5cHRvL2luY2x1ZGUvcmFuZF9zb3VyY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc1YTJiYy4uMDAwMDAwMAotLS0gYS9jcnlwdG8vaW5jbHVkZS9yYW5kX3NvdXJjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIHJhbmRfc291cmNlLmgKLSAqCi0gKiBpbXBsZW1lbnRzIGEgcmFuZG9tIHNvdXJjZSBiYXNlZCBvbiAvZGV2L3JhbmRvbQotICoKLSAqIERhdmlkIEEuIE1jR3JldwotICogQ2lzY28gU3lzdGVtcywgSW5jLgotICovCi0vKgotICoJCi0gKiBDb3B5cmlnaHQoYykgMjAwMS0yMDA1IENpc2NvIFN5c3RlbXMsIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogCi0gKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIAotICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAotICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqLwotCi0KLSNpZm5kZWYgUkFORF9TT1VSQ0UKLSNkZWZpbmUgUkFORF9TT1VSQ0UKLQotI2luY2x1ZGUgImVyci5oIgotI2luY2x1ZGUgImRhdGF0eXBlcy5oIgotCi1lcnJfc3RhdHVzX3QKLXJhbmRfc291cmNlX2luaXQoKTsKLQotLyoKLSAqIHJhbmRfc291cmNlX2dldF9vY3RldF9zdHJpbmcoKSB3cml0ZXMgYSByYW5kb20gb2N0ZXQgc3RyaW5nLgotICoKLSAqIFRoZSBmdW5jdGlvbiBjYWxsIHJhbmRfc291cmNlX2dldF9vY3RldF9zdHJpbmcoZGVzdCwgbGVuKSB3cml0ZXMKLSAqIGxlbiBvY3RldHMgb2YgcmFuZG9tIGRhdGEgdG8gdGhlIGxvY2F0aW9uIHRvIHdoaWNoIGRlc3QgcG9pbnRzLAotICogYW5kIHJldHVybnMgYW4gZXJyb3IgY29kZS4gIFRoaXMgZXJyb3IgY29kZSBzaG91bGQgYmUgY2hlY2tlZCwKLSAqIGFuZCBpZiBhIGZhaWx1cmUgaXMgcmVwb3J0ZWQsIHRoZSBkYXRhIGluIHRoZSBidWZmZXIgTVVTVCBOT1QKLSAqIGJlIHVzZWQuCi0gKiAKLSAqIHdhcm5pbmc6IElmIHRoZSByZXR1cm4gY29kZSBpcyBub3QgY2hlY2tlZCwgdGhlbiBub24tcmFuZG9tCi0gKiAgICAgICAgICBkYXRhIG1heSBpbmFkdmVydGVudGx5IGJlIHVzZWQuCi0gKgotICogcmV0dXJuczoKLSAqICAgICAtIGVycl9zdGF0dXNfb2sgICAgaWYgbm8gcHJvYmxlbXMgb2NjdXJlZC4KLSAqICAgICAtIFtvdGhlcl0gICAgICAgICAgYSBwcm9ibGVtIG9jY3VyZWQsIGFuZCBubyBhc3N1bXB0aW9ucyBzaG91bGQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgYmUgbWFkZSBhYm91dCB0aGUgY29udGVudHMgb2YgdGhlIGRlc3RpbmF0aW9uCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci4KLSAqLwotCi1lcnJfc3RhdHVzX3QKLXJhbmRfc291cmNlX2dldF9vY3RldF9zdHJpbmcodm9pZCAqZGVzdCwgaW50IGxlbmd0aCk7Ci0KLWVycl9zdGF0dXNfdAotcmFuZF9zb3VyY2VfZGVpbml0KCk7Ci0KLS8qIAotICogZnVuY3Rpb24gcHJvdG90eXBlIGZvciBhIHJhbmRvbSBzb3VyY2UgZnVuY3Rpb24KLSAqCi0gKiBBIHJhbmRfc291cmNlX2Z1bmNfdCB3cml0ZXMgbnVtX29jdGV0cyBhdCB0aGUgbG9jYXRpb24gaW5kaWNhdGVkIGJ5Ci0gKiBkZXN0IGFuZCByZXR1cm5zIGVycl9zdGF0dXNfb2suICBBbnkgb3RoZXIgcmV0dXJuIHZhbHVlIGluZGljYXRlcwotICogZmFpbHVyZS4KLSAqLwotCi10eXBlZGVmIGVycl9zdGF0dXNfdCAoKnJhbmRfc291cmNlX2Z1bmNfdCkKLSAgICAgKHZvaWQgKmRlc3QsIGludCBudW1fb2N0ZXRzKTsKLQotI2VuZGlmIC8qIFJBTkRfU09VUkNFICovCmRpZmYgLS1naXQgYS9jcnlwdG8vaW5jbHVkZS9yZGIuaCBiL2NyeXB0by9pbmNsdWRlL3JkYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MzE0YzEKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vaW5jbHVkZS9yZGIuaApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIHJlcGxheS1kYXRhYmFzZS5oCisgKgorICogaW50ZXJmYWNlIGZvciBhIHJlcGxheSBkYXRhYmFzZSBmb3IgcGFja2V0IHNlY3VyaXR5CisgKgorICogRGF2aWQgQS4gTWNHcmV3CisgKiBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKi8KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxNywgQ2lzY28gU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIFJFUExBWV9EQl9ICisjZGVmaW5lIFJFUExBWV9EQl9ICisKKyNpbmNsdWRlICJpbnRlZ2Vycy5oIiAgLyogZm9yIHVpbnQzMl90ICAgICAqLworI2luY2x1ZGUgImRhdGF0eXBlcy5oIiAvKiBmb3IgdjEyOF90ICAgICAgICovCisjaW5jbHVkZSAiZXJyLmgiICAgICAgIC8qIGZvciBzcnRwX2Vycl9zdGF0dXNfdCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qCisgKiBpZiB0aGUgaXRoIGxlYXN0IHNpZ25pZmljYW50IGJpdCBpcyBvbmUsIHRoZW4gdGhlIHBhY2tldCBpbmRleAorICogd2luZG93X2VuZC1pIGlzIGluIHRoZSBkYXRhYmFzZQorICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1aW50MzJfdCB3aW5kb3dfc3RhcnQ7IC8qIHBhY2tldCBpbmRleCBvZiB0aGUgZmlyc3QgYml0IGluIGJpdG1hc2sgKi8KKyAgICB2MTI4X3QgYml0bWFzazsKK30gc3J0cF9yZGJfdDsKKworI2RlZmluZSByZGJfYml0c19pbl9iaXRtYXNrICg4ICogc2l6ZW9mKHYxMjhfdCkpCisKKy8qCisgKiBzcnRwX3JkYl9pbml0CisgKgorICogaW5pdGFsaXplcyByZGIKKyAqCisgKiByZXR1cm5zIHNydHBfZXJyX3N0YXR1c19vayBvbiBzdWNjZXNzLCBzcnRwX2Vycl9zdGF0dXNfdF9mYWlsIG90aGVyd2lzZQorICovCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX3JkYl9pbml0KHNydHBfcmRiX3QgKnJkYik7CisKKy8qCisgKiBzcnRwX3JkYl9jaGVjaworICoKKyAqIGNoZWNrcyB0byBzZWUgaWYgaW5kZXggYXBwZWFycyBpbiByZGIKKyAqCisgKiByZXR1cm5zIHNydHBfZXJyX3N0YXR1c19mYWlsIGlmIHRoZSBpbmRleCBhbHJlYWR5IGFwcGVhcnMgaW4gcmRiLAorICogcmV0dXJucyBzcnRwX2Vycl9zdGF0dXNfb2sgb3RoZXJ3aXNlCisgKi8KK3NydHBfZXJyX3N0YXR1c190IHNydHBfcmRiX2NoZWNrKGNvbnN0IHNydHBfcmRiX3QgKnJkYiwgdWludDMyX3QgcmRiX2luZGV4KTsKKworLyoKKyAqIHNydHBfcmRiX2FkZF9pbmRleAorICoKKyAqIGFkZHMgaW5kZXggdG8gc3J0cF9yZGJfdCAoYW5kIGRvZXMgKm5vdCogY2hlY2sgaWYgaW5kZXggYXBwZWFycyBpbiBkYikKKyAqCisgKiByZXR1cm5zIHNydHBfZXJyX3N0YXR1c19vayBvbiBzdWNjZXNzLCBzcnRwX2Vycl9zdGF0dXNfZmFpbCBvdGhlcndpc2UKKyAqCisgKi8KK3NydHBfZXJyX3N0YXR1c190IHNydHBfcmRiX2FkZF9pbmRleChzcnRwX3JkYl90ICpyZGIsIHVpbnQzMl90IHJkYl9pbmRleCk7CisKKy8qCisgKiB0aGUgZnVuY3Rpb25zIHNydHBfcmRiX2luY3JlbWVudCgpIGFuZCBzcnRwX3JkYl9nZXRfdmFsdWUoKSBhcmUgZm9yIHVzZSBieQorICogc2VuZGVycywgbm90IHJlY2VpdmVycyAtIERPIE5PVCB1c2UgdGhlc2UgZnVuY3Rpb25zIG9uIHRoZSBzYW1lCisgKiBzcnRwX3JkYl90IHVwb24gd2hpY2ggc3J0cF9yZGJfYWRkX2luZGV4IGlzIHVzZWQhCisgKi8KKworLyoKKyAqIHNydHBfcmRiX2luY3JlbWVudChkYikgaW5jcmVtZW50cyB0aGUgc2VxdWVuY2UgbnVtYmVyIGluIGRiLCBpZiBpdCBpcworICogbm90IHRvbyBoaWdoCisgKgorICogcmV0dXJuIHZhbHVlczoKKyAqCisgKiAgICBzcnRwX2Vycl9zdGF0dXNfb2sgICAgICAgICAgICBubyBwcm9ibGVtCisgKiAgICBzcnRwX2Vycl9zdGF0dXNfa2V5X2V4cGlyZWQgICBzZXF1ZW5jZSBudW1iZXIgdG9vIGhpZ2gKKyAqCisgKi8KK3NydHBfZXJyX3N0YXR1c190IHNydHBfcmRiX2luY3JlbWVudChzcnRwX3JkYl90ICpyZGIpOworCisvKgorICogc3J0cF9yZGJfZ2V0X3ZhbHVlKGRiKSByZXR1cm5zIHRoZSBjdXJyZW50IHNlcXVlbmNlIG51bWJlciBvZiBkYgorICovCit1aW50MzJfdCBzcnRwX3JkYl9nZXRfdmFsdWUoY29uc3Qgc3J0cF9yZGJfdCAqcmRiKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIFJFUExBWV9EQl9IICovCmRpZmYgLS1naXQgYS9jcnlwdG8vaW5jbHVkZS9yZGJ4LmggYi9jcnlwdG8vaW5jbHVkZS9yZGJ4LmgKaW5kZXggY2U5ZWNmNi4uMjE5NDE3OCAxMDA2NDQKLS0tIGEvY3J5cHRvL2luY2x1ZGUvcmRieC5oCisrKyBiL2NyeXB0by9pbmNsdWRlL3JkYnguaApAQCAtOCwxMzkgKzgsMjAyIEBACiAgKgogICovCiAKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMTcsIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKwogI2lmbmRlZiBSREJYX0gKICNkZWZpbmUgUkRCWF9ICiAKICNpbmNsdWRlICJkYXRhdHlwZXMuaCIKICNpbmNsdWRlICJlcnIuaCIKIAotLyogI2RlZmluZSBST0NfVEVTVCAqLyAgCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qICNkZWZpbmUgUk9DX1RFU1QgKi8KIAogI2lmbmRlZiBST0NfVEVTVAogCi10eXBlZGVmIHVpbnQxNl90IHNlcXVlbmNlX251bWJlcl90OyAgIC8qIDE2IGJpdCBzZXF1ZW5jZSBudW1iZXIgICovCi10eXBlZGVmIHVpbnQzMl90IHJvbGxvdmVyX2NvdW50ZXJfdDsgICAvKiAzMiBiaXQgcm9sbG92ZXIgY291bnRlciAqLwordHlwZWRlZiB1aW50MTZfdCBzcnRwX3NlcXVlbmNlX251bWJlcl90OyAgLyogMTYgYml0IHNlcXVlbmNlIG51bWJlciAgKi8KK3R5cGVkZWYgdWludDMyX3Qgc3J0cF9yb2xsb3Zlcl9jb3VudGVyX3Q7IC8qIDMyIGJpdCByb2xsb3ZlciBjb3VudGVyICovCiAKLSNlbHNlICAvKiB1c2Ugc21hbGwgc2VxX251bSBhbmQgcm9jIGRhdGF0eXBlcyBmb3IgdGVzdGluZyBwdXJwb3NlcyAqLworI2Vsc2UgLyogdXNlIHNtYWxsIHNlcV9udW0gYW5kIHJvYyBkYXRhdHlwZXMgZm9yIHRlc3RpbmcgcHVycG9zZXMgKi8KIAotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHNlcXVlbmNlX251bWJlcl90OyAgICAgICAgIC8qIDggYml0IHNlcXVlbmNlIG51bWJlciAgICovCi10eXBlZGVmIHVpbnQxNl90IHJvbGxvdmVyX2NvdW50ZXJfdDsgICAvKiAxNiBiaXQgcm9sbG92ZXIgY291bnRlciAqLwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHNydHBfc2VxdWVuY2VfbnVtYmVyX3Q7IC8qIDggYml0IHNlcXVlbmNlIG51bWJlciAgICovCit0eXBlZGVmIHVpbnQxNl90IHNydHBfcm9sbG92ZXJfY291bnRlcl90OyAgICAgLyogMTYgYml0IHJvbGxvdmVyIGNvdW50ZXIgKi8KIAogI2VuZGlmCiAKLSNkZWZpbmUgc2VxX251bV9tZWRpYW4gKDEgPDwgKDgqc2l6ZW9mKHNlcXVlbmNlX251bWJlcl90KSAtIDEpKQotI2RlZmluZSBzZXFfbnVtX21heCAgICAoMSA8PCAoOCpzaXplb2Yoc2VxdWVuY2VfbnVtYmVyX3QpKSkKKyNkZWZpbmUgc2VxX251bV9tZWRpYW4gKDEgPDwgKDggKiBzaXplb2Yoc3J0cF9zZXF1ZW5jZV9udW1iZXJfdCkgLSAxKSkKKyNkZWZpbmUgc2VxX251bV9tYXggKDEgPDwgKDggKiBzaXplb2Yoc3J0cF9zZXF1ZW5jZV9udW1iZXJfdCkpKQogCiAvKgotICogQW4geHRkX3NlcV9udW1fdCBpcyBhIDY0LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIHVzZWQgYXMgYW4gJ2V4dGVuZGVkJwotICogc2VxdWVuY2UgbnVtYmVyLiAgCisgKiBBbiBydHBfeHRkX3NlcV9udW1fdCBpcyBhIDY0LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIHVzZWQgYXMgYW4gJ2V4dGVuZGVkJworICogc2VxdWVuY2UgbnVtYmVyLgogICovCi0KLXR5cGVkZWYgdWludDY0X3QgeHRkX3NlcV9udW1fdDsKLQordHlwZWRlZiB1aW50NjRfdCBzcnRwX3h0ZF9zZXFfbnVtX3Q7CiAKIC8qCi0gKiBBbiByZGJ4X3QgaXMgYSByZXBsYXkgZGF0YWJhc2Ugd2l0aCBleHRlbmRlZCByYW5nZTsgaXQgdXNlcyBhbgorICogQW4gc3J0cF9yZGJ4X3QgaXMgYSByZXBsYXkgZGF0YWJhc2Ugd2l0aCBleHRlbmRlZCByYW5nZTsgaXQgdXNlcyBhbgogICogeHRkX3NlcV9udW1fdCBhbmQgYSBiaXRtYXNrIG9mIHJlY2VudGx5IHJlY2VpdmVkIGluZGljZXMuCiAgKi8KLQogdHlwZWRlZiBzdHJ1Y3QgewotICB4dGRfc2VxX251bV90IGluZGV4OwotICB2MTI4X3QgYml0bWFzazsKLX0gcmRieF90OwotCisgICAgc3J0cF94dGRfc2VxX251bV90IGluZGV4OworICAgIGJpdHZlY3Rvcl90IGJpdG1hc2s7Cit9IHNydHBfcmRieF90OwogCiAvKgotICogcmRieF9pbml0KHJkYnhfcHRyKQorICogc3J0cF9yZGJ4X2luaXQocmRieF9wdHIsIHdzKQogICoKLSAqIGluaXRpYWxpemVzIHRoZSByZGJ4IHBvaW50ZWQgdG8gYnkgaXRzIGFyZ3VtZW50LCBzZXR0aW5nIHRoZQotICogcm9sbG92ZXIgY291bnRlciBhbmQgc2VxdWVuY2UgbnVtYmVyIHRvIHplcm8KKyAqIGluaXRpYWxpemVzIHRoZSByZGJ4IHBvaW50ZWQgdG8gYnkgaXRzIGFyZ3VtZW50IHdpdGggdGhlIHdpbmRvdyBzaXplIHdzLAorICogc2V0dGluZyB0aGUgcm9sbG92ZXIgY291bnRlciBhbmQgc2VxdWVuY2UgbnVtYmVyIHRvIHplcm8KICAqLwotCi1lcnJfc3RhdHVzX3QKLXJkYnhfaW5pdChyZGJ4X3QgKnJkYngpOwotCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX3JkYnhfaW5pdChzcnRwX3JkYnhfdCAqcmRieCwgdW5zaWduZWQgbG9uZyB3cyk7CiAKIC8qCi0gKiByZGJ4X2VzdGltYXRlX2luZGV4KHJkYngsIGd1ZXNzLCBzKQotICogCisgKiBzcnRwX3JkYnhfZGVhbGxvYyhyZGJ4X3B0cikKKyAqCisgKiBmcmVlcyBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSByZGJ4CisgKi8KK3NydHBfZXJyX3N0YXR1c190IHNydHBfcmRieF9kZWFsbG9jKHNydHBfcmRieF90ICpyZGJ4KTsKKworLyoKKyAqIHNydHBfcmRieF9lc3RpbWF0ZV9pbmRleChyZGJ4LCBndWVzcywgcykKKyAqCiAgKiBnaXZlbiBhbiByZGJ4IGFuZCBhIHNlcXVlbmNlIG51bWJlciBzIChmcm9tIGEgbmV3bHkgYXJyaXZlZCBwYWNrZXQpLAogICogc2V0cyB0aGUgY29udGVudHMgb2YgKmd1ZXNzIHRvIGNvbnRhaW4gdGhlIGJlc3QgZ3Vlc3Mgb2YgdGhlIHBhY2tldAogICogaW5kZXggdG8gd2hpY2ggcyBjb3JyZXNwb25kcywgYW5kIHJldHVybnMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbgogICogKmd1ZXNzIGFuZCB0aGUgbG9jYWxseSBzdG9yZWQgc3luY2ggaW5mbwogICovCi0KLWludAotcmRieF9lc3RpbWF0ZV9pbmRleChjb25zdCByZGJ4X3QgKnJkYngsCi0JCSAgICB4dGRfc2VxX251bV90ICpndWVzcywKLQkJICAgIHNlcXVlbmNlX251bWJlcl90IHMpOworaW50MzJfdCBzcnRwX3JkYnhfZXN0aW1hdGVfaW5kZXgoY29uc3Qgc3J0cF9yZGJ4X3QgKnJkYngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX3h0ZF9zZXFfbnVtX3QgKmd1ZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9zZXF1ZW5jZV9udW1iZXJfdCBzKTsKIAogLyoKLSAqIHJkYnhfY2hlY2socmRieCwgZGVsdGEpOworICogc3J0cF9yZGJ4X2NoZWNrKHJkYngsIGRlbHRhKTsKICAqCi0gKiByZGJ4X2NoZWNrKCZyLCBkZWx0YSkgY2hlY2tzIHRvIHNlZSBpZiB0aGUgeHRkX3NlcV9udW1fdAorICogc3J0cF9yZGJ4X2NoZWNrKCZyLCBkZWx0YSkgY2hlY2tzIHRvIHNlZSBpZiB0aGUgeHRkX3NlcV9udW1fdAogICogd2hpY2ggaXMgYXQgcmRieC0+d2luZG93X3N0YXJ0ICsgZGVsdGEgaXMgaW4gdGhlIHJkYgogICoKICAqLwotCi1lcnJfc3RhdHVzX3QKLXJkYnhfY2hlY2soY29uc3QgcmRieF90ICpyZGJ4LCBpbnQgZGlmZmVyZW5jZSk7CitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX3JkYnhfY2hlY2soY29uc3Qgc3J0cF9yZGJ4X3QgKnJkYngsIGludCBkaWZmZXJlbmNlKTsKIAogLyoKLSAqIHJlcGxheV9hZGRfaW5kZXgocmRieCwgZGVsdGEpCi0gKiAKLSAqIGFkZHMgdGhlIHh0ZF9zZXFfbnVtX3QgYXQgcmRieC0+d2luZG93X3N0YXJ0ICsgZGVsdGEgdG8gcmVwbGF5X2RiCisgKiBzcnRwX3JlcGxheV9hZGRfaW5kZXgocmRieCwgZGVsdGEpCisgKgorICogYWRkcyB0aGUgc3J0cF94dGRfc2VxX251bV90IGF0IHJkYngtPndpbmRvd19zdGFydCArIGRlbHRhIHRvIHJlcGxheV9kYgogICogKGFuZCBkb2VzICpub3QqIGNoZWNrIGlmIHRoYXQgeHRkX3NlcV9udW1fdCBhcHBlYXJzIGluIGRiKQogICoKICAqIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCAqb25seSogYWZ0ZXIgcmVwbGF5X2NoZWNrIGhhcwogICogaW5kaWNhdGVkIHRoYXQgdGhlIGluZGV4IGRvZXMgbm90IGFwcGVhciBpbiB0aGUgcmRieCwgYW5kIGEgbXV0ZXgKICAqIHNob3VsZCBwcm90ZWN0IHRoZSByZGJ4IGJldHdlZW4gdGhlc2UgY2FsbHMgaWYgbmVjZXNzYXJ5LgogICovCi0KLWVycl9zdGF0dXNfdAotcmRieF9hZGRfaW5kZXgocmRieF90ICpyZGJ4LCBpbnQgZGVsdGEpOworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9yZGJ4X2FkZF9pbmRleChzcnRwX3JkYnhfdCAqcmRieCwgaW50IGRlbHRhKTsKIAogLyoKLSAqIHh0ZF9zZXFfbnVtX3QgZnVuY3Rpb25zIC0gdGhlc2UgYXJlICppbnRlcm5hbCogZnVuY3Rpb25zIG9mIHJkYngsIGFuZAorICogc3J0cF9yZGJ4X3NldF9yb2MocmRieCwgcm9jKSBpbml0YWxpemVzIHRoZSBzcnRwX3JkYnhfdCBhdCB0aGUgbG9jYXRpb24gcmRieAorICogdG8gaGF2ZSB0aGUgcm9sbG92ZXIgY291bnRlciB2YWx1ZSByb2MuICBJZiB0aGF0IHZhbHVlIGlzIGxlc3MgdGhhbgorICogdGhlIGN1cnJlbnQgcm9sbG92ZXIgY291bnRlciB2YWx1ZSwgdGhlbiB0aGUgZnVuY3Rpb24gcmV0dXJucworICogc3J0cF9lcnJfc3RhdHVzX3JlcGxheV9vbGQ7IG90aGVyd2lzZSwgc3J0cF9lcnJfc3RhdHVzX29rIGlzIHJldHVybmVkLgorICoKKyAqLworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9yZGJ4X3NldF9yb2Moc3J0cF9yZGJ4X3QgKnJkYngsIHVpbnQzMl90IHJvYyk7CisKKy8qCisgKiBzcnRwX3JkYnhfZ2V0X3BhY2tldF9pbmRleChyZGJ4KSByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgcm9sbG92ZXIgY291bnRlcgorICogZm9yCisgKiB0aGUgc3J0cF9yZGJ4X3QgcG9pbnRlZCB0byBieSByZGJ4CisgKgorICovCitzcnRwX3h0ZF9zZXFfbnVtX3Qgc3J0cF9yZGJ4X2dldF9wYWNrZXRfaW5kZXgoY29uc3Qgc3J0cF9yZGJ4X3QgKnJkYngpOworCisvKgorICogc3J0cF94dGRfc2VxX251bV90IGZ1bmN0aW9ucyAtIHRoZXNlIGFyZSAqaW50ZXJuYWwqIGZ1bmN0aW9ucyBvZiByZGJ4LCBhbmQKICAqIHNob3VsZG4ndCBiZSB1c2VkIHRvIG1hbmlwdWxhdGUgcmRieCBpbnRlcm5hbCB2YWx1ZXMuICB1c2UgdGhlIHJkYngKICAqIGFwaSBpbnN0ZWFkIQogICovCiAKKy8qCisgKiBzcnRwX3JkYnhfZ2V0X3dzKHJkYnhfcHRyKQorICoKKyAqIGdldHMgdGhlIHdpbmRvdyBzaXplIHdoaWNoIHdhcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHJkYngKKyAqLwordW5zaWduZWQgbG9uZyBzcnRwX3JkYnhfZ2V0X3dpbmRvd19zaXplKGNvbnN0IHNydHBfcmRieF90ICpyZGJ4KTsKIAogLyogaW5kZXhfaW5pdCgmcGkpIGluaXRpYWxpemVzIGEgcGFja2V0IGluZGV4IHBpIChzZXRzIGl0IHRvIHplcm8pICovCi0KLXZvaWQKLWluZGV4X2luaXQoeHRkX3NlcV9udW1fdCAqcGkpOwordm9pZCBzcnRwX2luZGV4X2luaXQoc3J0cF94dGRfc2VxX251bV90ICpwaSk7CiAKIC8qIGluZGV4X2FkdmFuY2UoJnBpLCBzKSBhZHZhbmNlcyBhIHh0ZF9zZXFfbnVtX3QgZm9yd2FyZCBieSBzICovCi0KLXZvaWQKLWluZGV4X2FkdmFuY2UoeHRkX3NlcV9udW1fdCAqcGksIHNlcXVlbmNlX251bWJlcl90IHMpOwotCit2b2lkIHNydHBfaW5kZXhfYWR2YW5jZShzcnRwX3h0ZF9zZXFfbnVtX3QgKnBpLCBzcnRwX3NlcXVlbmNlX251bWJlcl90IHMpOwogCiAvKgotICogaW5kZXhfZ3Vlc3MobG9jYWwsIGd1ZXNzLCBzKQotICogCi0gKiBnaXZlbiBhIHh0ZF9zZXFfbnVtX3QgbG9jYWwgKHdoaWNoIHJlcHJlc2VudHMgdGhlIGhpZ2hlc3QKKyAqIHNydHBfaW5kZXhfZ3Vlc3MobG9jYWwsIGd1ZXNzLCBzKQorICoKKyAqIGdpdmVuIGEgc3J0cF94dGRfc2VxX251bV90IGxvY2FsICh3aGljaCByZXByZXNlbnRzIHRoZSBoaWdoZXN0CiAgKiBrbm93bi10by1iZS1nb29kIGluZGV4KSBhbmQgYSBzZXF1ZW5jZSBudW1iZXIgcyAoZnJvbSBhIG5ld2x5CiAgKiBhcnJpdmVkIHBhY2tldCksIHNldHMgdGhlIGNvbnRlbnRzIG9mICpndWVzcyB0byBjb250YWluIHRoZSBiZXN0CiAgKiBndWVzcyBvZiB0aGUgcGFja2V0IGluZGV4IHRvIHdoaWNoIHMgY29ycmVzcG9uZHMsIGFuZCByZXR1cm5zIHRoZQogICogZGlmZmVyZW5jZSBiZXR3ZWVuICpndWVzcyBhbmQgKmxvY2FsCiAgKi8KK2ludDMyX3Qgc3J0cF9pbmRleF9ndWVzcyhjb25zdCBzcnRwX3h0ZF9zZXFfbnVtX3QgKmxvY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfeHRkX3NlcV9udW1fdCAqZ3Vlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9zZXF1ZW5jZV9udW1iZXJfdCBzKTsKIAotaW50Ci1pbmRleF9ndWVzcyhjb25zdCB4dGRfc2VxX251bV90ICpsb2NhbCwKLQkJICAgeHRkX3NlcV9udW1fdCAqZ3Vlc3MsCi0JCSAgIHNlcXVlbmNlX251bWJlcl90IHMpOworLyoKKyAqIHNydHBfcmRieF9nZXRfcm9jKHJkYngpCisgKgorICogR2V0IHRoZSBjdXJyZW50IHJvbGxvdmVyIGNvdW50ZXIKKyAqCisgKi8KK3VpbnQzMl90IHNydHBfcmRieF9nZXRfcm9jKGNvbnN0IHNydHBfcmRieF90ICpyZGJ4KTsKIAorLyoKKyAqIHNydHBfcmRieF9zZXRfcm9jX3NlcShyZGJ4LCByb2MsIHNlcSkgaW5pdGFsaXplcyB0aGUgc3J0cF9yZGJ4X3QgYXQgdGhlCisgKiBsb2NhdGlvbiByZGJ4IHRvIGhhdmUgdGhlIHJvbGxvdmVyIGNvdW50ZXIgdmFsdWUgcm9jIGFuZCBwYWNrZXQgc2VxdWVuY2UKKyAqIG51bWJlciBzZXEuICBJZiB0aGUgbmV3IHJvbGxvdmVyIGNvdW50ZXIgdmFsdWUgaXMgbGVzcyB0aGFuIHRoZSBjdXJyZW50CisgKiByb2xsb3ZlciBjb3VudGVyIHZhbHVlLCB0aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zCisgKiBzcnRwX2Vycl9zdGF0dXNfcmVwbGF5X29sZCwgb3RoZXJ3aXNlLCBzcnRwX2Vycl9zdGF0dXNfb2sgaXMgcmV0dXJuZWQuCisgKi8KK3NydHBfZXJyX3N0YXR1c190IHNydHBfcmRieF9zZXRfcm9jX3NlcShzcnRwX3JkYnhfdCAqcmRieCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCByb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2VxKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKIAogI2VuZGlmIC8qIFJEQlhfSCAqLwotCi0KLQotCi0KLQotCi0KLQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2luY2x1ZGUvc2hhMS5oIGIvY3J5cHRvL2luY2x1ZGUvc2hhMS5oCmluZGV4IDJmNTA4Y2IuLjkzM2MxNDYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9pbmNsdWRlL3NoYTEuaAorKysgYi9jcnlwdG8vaW5jbHVkZS9zaGExLmgKQEAgLTksMjYgKzksMjYgQEAKICAqLwogCiAvKgotICoJCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSwgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDE3LCBDaXNjbyBTeXN0ZW1zLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwogICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKICAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCisgKgogICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAogICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKKyAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKQEAgLTQ3LDYzICs0NywxMzggQEAKICNpZm5kZWYgU0hBMV9ICiAjZGVmaW5lIFNIQTFfSAogCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKICNpbmNsdWRlICJlcnIuaCIKKyNpZmRlZiBPUEVOU1NMCisjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbHNlCiAjaW5jbHVkZSAiZGF0YXR5cGVzLmgiCisjZW5kaWYKIAotdHlwZWRlZiBzdHJ1Y3QgewotICB1aW50MzJfdCBIWzVdOyAgICAgICAgICAgICAvKiBzdGF0ZSB2ZWN0b3IgICAgICAgICAgICAgICAgICAgICovCi0gIHVpbnQzMl90IE1bMTZdOyAgICAgICAgICAgIC8qIG1lc3NhZ2UgYnVmZmVyICAgICAgICAgICAgICAgICAgKi8KLSAgaW50IG9jdGV0c19pbl9idWZmZXI7ICAgICAgLyogb2N0ZXRzIG9mIG1lc3NhZ2UgaW4gYnVmZmVyICAgICAqLwotICB1aW50MzJfdCBudW1fYml0c19pbl9tc2c7ICAvKiB0b3RhbCBudW1iZXIgb2YgYml0cyBpbiBtZXNzYWdlICovCi19IHNoYTFfY3R4X3Q7CisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZmRlZiBPUEVOU1NMCiAKIC8qCi0gKiBzaGExKCZjdHgsIG1zZywgbGVuLCBvdXRwdXQpIGhhc2hlcyB0aGUgbGVuIG9jdGV0cyBzdGFydGluZyBhdCBtc2cKLSAqIGludG8gdGhlIFNIQTEgY29udGV4dCwgdGhlbiB3cml0ZXMgdGhlIHJlc3VsdCB0byB0aGUgMjAgb2N0ZXRzIGF0Ci0gKiBvdXRwdXQKLSAqIAotICovCi0KLXZvaWQKLXNoYTEoY29uc3Qgb2N0ZXRfdCAqbWVzc2FnZSwgIGludCBvY3RldHNfaW5fbXNnLCB1aW50MzJfdCBvdXRwdXRbNV0pOwotCi0vKgotICogc2hhMV9pbml0KCZjdHgpIGluaXRpYWxpemVzIHRoZSBTSEExIGNvbnRleHQgY3R4Ci0gKiAKLSAqIHNoYTFfdXBkYXRlKCZjdHgsIG1zZywgbGVuKSBoYXNoZXMgdGhlIGxlbiBvY3RldHMgc3RhcnRpbmcgYXQgbXNnCisgKiBzcnRwX3NoYTFfaW5pdCgmY3R4KSBpbml0aWFsaXplcyB0aGUgU0hBMSBjb250ZXh0IGN0eAorICoKKyAqIHNydHBfc2hhMV91cGRhdGUoJmN0eCwgbXNnLCBsZW4pIGhhc2hlcyB0aGUgbGVuIG9jdGV0cyBzdGFydGluZyBhdCBtc2cKICAqIGludG8gdGhlIFNIQTEgY29udGV4dAotICogCi0gKiBzaGExX2ZpbmFsKCZjdHgsIG91dHB1dCkgcGVyZm9ybXMgdGhlIGZpbmFsIHByb2Nlc3Npbmcgb2YgdGhlIFNIQTEKKyAqCisgKiBzcnRwX3NoYTFfZmluYWwoJmN0eCwgb3V0cHV0KSBwZXJmb3JtcyB0aGUgZmluYWwgcHJvY2Vzc2luZyBvZiB0aGUgU0hBMQogICogY29udGV4dCBhbmQgd3JpdGVzIHRoZSByZXN1bHQgdG8gdGhlIDIwIG9jdGV0cyBhdCBvdXRwdXQKICAqCisgKiBSZXR1cm4gdmFsdWVzIGFyZSBpZ25vcmVkIG9uIHRoZSBFVlAgZnVuY3Rpb25zIHNpbmNlIGFsbCB0aHJlZQorICogb2YgdGhlc2UgZnVuY3Rpb25zIHJldHVybiB2b2lkLgorICoKICAqLwogCi12b2lkCi1zaGExX2luaXQoc2hhMV9jdHhfdCAqY3R4KTsKKy8qIE9wZW5TU0wgMS4xLjAgbWFkZSBFVlBfTURfQ1RYIGFuIG9wYXF1ZSBzdHJ1Y3R1cmUsIHdoaWNoIG11c3QgYmUgYWxsb2NhdGVkCisgICB1c2luZyBFVlBfTURfQ1RYX25ldy4gQnV0IHRoaXMgZnVuY3Rpb24gZG9lc24ndCBleGlzdCBpbiBPcGVuU1NMIDEuMC54LiAqLworI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPCAweDEwMTAwMDAwTCB8fCBMSUJSRVNTTF9WRVJTSU9OX05VTUJFUgogCi12b2lkCi1zaGExX3VwZGF0ZShzaGExX2N0eF90ICpjdHgsIGNvbnN0IG9jdGV0X3QgKk0sIGludCBvY3RldHNfaW5fbXNnKTsKK3R5cGVkZWYgRVZQX01EX0NUWCBzcnRwX3NoYTFfY3R4X3Q7CiAKLXZvaWQKLXNoYTFfZmluYWwoc2hhMV9jdHhfdCAqY3R4LCB1aW50MzJfdCBvdXRwdXRbNV0pOworc3RhdGljIGlubGluZSB2b2lkIHNydHBfc2hhMV9pbml0KHNydHBfc2hhMV9jdHhfdCAqY3R4KQoreworICAgIEVWUF9NRF9DVFhfaW5pdChjdHgpOworICAgIEVWUF9EaWdlc3RJbml0KGN0eCwgRVZQX3NoYTEoKSk7Cit9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcnRwX3NoYTFfdXBkYXRlKHNydHBfc2hhMV9jdHhfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvY3RldHNfaW5fbXNnKQoreworICAgIEVWUF9EaWdlc3RVcGRhdGUoY3R4LCBNLCBvY3RldHNfaW5fbXNnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNydHBfc2hhMV9maW5hbChzcnRwX3NoYTFfY3R4X3QgKmN0eCwgdWludDMyX3QgKm91dHB1dCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgbGVuID0gMDsKKworICAgIEVWUF9EaWdlc3RGaW5hbChjdHgsICh1bnNpZ25lZCBjaGFyICopb3V0cHV0LCAmbGVuKTsKKyAgICBFVlBfTURfQ1RYX2NsZWFudXAoY3R4KTsKK30KKworI2Vsc2UKKwordHlwZWRlZiBFVlBfTURfQ1RYICpzcnRwX3NoYTFfY3R4X3Q7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcnRwX3NoYTFfaW5pdChzcnRwX3NoYTFfY3R4X3QgKmN0eCkKK3sKKyAgICAqY3R4ID0gRVZQX01EX0NUWF9uZXcoKTsKKyAgICBFVlBfRGlnZXN0SW5pdCgqY3R4LCBFVlBfc2hhMSgpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNydHBfc2hhMV91cGRhdGUoc3J0cF9zaGExX2N0eF90ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9jdGV0c19pbl9tc2cpCit7CisgICAgRVZQX0RpZ2VzdFVwZGF0ZSgqY3R4LCBNLCBvY3RldHNfaW5fbXNnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNydHBfc2hhMV9maW5hbChzcnRwX3NoYTFfY3R4X3QgKmN0eCwgdWludDMyX3QgKm91dHB1dCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgbGVuID0gMDsKKworICAgIEVWUF9EaWdlc3RGaW5hbCgqY3R4LCAodW5zaWduZWQgY2hhciAqKW91dHB1dCwgJmxlbik7CisgICAgRVZQX01EX0NUWF9mcmVlKCpjdHgpOworfQorI2VuZGlmCisKKyNlbHNlCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1aW50MzJfdCBIWzVdOyAgICAgICAgICAgIC8qIHN0YXRlIHZlY3RvciAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1aW50MzJfdCBNWzE2XTsgICAgICAgICAgIC8qIG1lc3NhZ2UgYnVmZmVyICAgICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgb2N0ZXRzX2luX2J1ZmZlcjsgICAgIC8qIG9jdGV0cyBvZiBtZXNzYWdlIGluIGJ1ZmZlciAgICAgKi8KKyAgICB1aW50MzJfdCBudW1fYml0c19pbl9tc2c7IC8qIHRvdGFsIG51bWJlciBvZiBiaXRzIGluIG1lc3NhZ2UgKi8KK30gc3J0cF9zaGExX2N0eF90OwogCiAvKgotICogVGhlIHNoYTFfY29yZSBmdW5jdGlvbiBpcyBJTlRFUk5BTCB0byBTSEEtMSwgYnV0IGl0IGlzIGRlY2xhcmVkCisgKiBzcnRwX3NoYTFfaW5pdCgmY3R4KSBpbml0aWFsaXplcyB0aGUgU0hBMSBjb250ZXh0IGN0eAorICoKKyAqIHNydHBfc2hhMV91cGRhdGUoJmN0eCwgbXNnLCBsZW4pIGhhc2hlcyB0aGUgbGVuIG9jdGV0cyBzdGFydGluZyBhdCBtc2cKKyAqIGludG8gdGhlIFNIQTEgY29udGV4dAorICoKKyAqIHNydHBfc2hhMV9maW5hbCgmY3R4LCBvdXRwdXQpIHBlcmZvcm1zIHRoZSBmaW5hbCBwcm9jZXNzaW5nIG9mIHRoZSBTSEExCisgKiBjb250ZXh0IGFuZCB3cml0ZXMgdGhlIHJlc3VsdCB0byB0aGUgMjAgb2N0ZXRzIGF0IG91dHB1dAorICoKKyAqLwordm9pZCBzcnRwX3NoYTFfaW5pdChzcnRwX3NoYTFfY3R4X3QgKmN0eCk7CisKK3ZvaWQgc3J0cF9zaGExX3VwZGF0ZShzcnRwX3NoYTFfY3R4X3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpNLAorICAgICAgICAgICAgICAgICAgICAgIGludCBvY3RldHNfaW5fbXNnKTsKKwordm9pZCBzcnRwX3NoYTFfZmluYWwoc3J0cF9zaGExX2N0eF90ICpjdHgsIHVpbnQzMl90IG91dHB1dFs1XSk7CisKKy8qCisgKiBUaGUgc3J0cF9zaGExX2NvcmUgZnVuY3Rpb24gaXMgSU5URVJOQUwgdG8gU0hBLTEsIGJ1dCBpdCBpcyBkZWNsYXJlZAogICogaGVyZSBiZWNhdXNlIGl0IGlzIGFsc28gdXNlZCBieSB0aGUgY2lwaGVyIFNFQUwgMy4wIGluIGl0cyBrZXkKLSAqIHNldHVwIGFsZ29yaXRobS4gIAorICogc2V0dXAgYWxnb3JpdGhtLgogICovCiAKIC8qCi0gKiAgc2hhMV9jb3JlKE0sIEgpIGNvbXB1dGVzIHRoZSBjb3JlIHNoYTEgY29tcHJlc3Npb24gZnVuY3Rpb24sIHdoZXJlIE0gaXMKKyAqICBzcnRwX3NoYTFfY29yZShNLCBIKSBjb21wdXRlcyB0aGUgY29yZSBzaGExIGNvbXByZXNzaW9uIGZ1bmN0aW9uLCB3aGVyZSBNIGlzCiAgKiAgdGhlIG5leHQgcGFydCBvZiB0aGUgbWVzc2FnZSBhbmQgSCBpcyB0aGUgaW50ZXJtZWRpYXRlIHN0YXRlIHtIMCwKICAqICBIMSwgLi4ufQogICoKICAqICB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGRvIGFueSBvZiB0aGUgcGFkZGluZyByZXF1aXJlZCBpbiB0aGUKICAqICBjb21wbGV0ZSBzaGExIGZ1bmN0aW9uCiAgKi8KK3ZvaWQgc3J0cF9zaGExX2NvcmUoY29uc3QgdWludDMyX3QgTVsxNl0sIHVpbnQzMl90IGhhc2hfdmFsdWVbNV0pOwogCi12b2lkCi1zaGExX2NvcmUoY29uc3QgdWludDMyX3QgTVsxNl0sIHVpbnQzMl90IGhhc2hfdmFsdWVbNV0pOwotICAgICAKKyNlbmRpZiAvKiBlbHNlIE9QRU5TU0wgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKwogI2VuZGlmIC8qIFNIQTFfSCAqLwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2luY2x1ZGUvc3RhdC5oIGIvY3J5cHRvL2luY2x1ZGUvc3RhdC5oCmluZGV4IDZkNWU0YTQuLjE4OTRlMDQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9pbmNsdWRlL3N0YXQuaAorKysgYi9jcnlwdG8vaW5jbHVkZS9zdGF0LmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogc3RhdHMuaAotICogCisgKgogICogaW50ZXJmYWNlIHRvIHN0YXRpc3RpY2FsIHRlc3QgZnVuY3Rpb25zCiAgKgogICogRGF2aWQgQS4gTWNHcmV3CkBAIC04LDI2ICs4LDI2IEBACiAgKi8KIAogLyoKLSAqCQotICogQ29weXJpZ2h0KGMpIDIwMDEtMjAwNSwgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqIENvcHlyaWdodChjKSAyMDAxLTIwMTcsIENpc2NvIFN5c3RlbXMsIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogCisgKgogICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCiAgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCiAgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAogICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKKyAqCiAgKiAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAgKiAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAorICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwpAQCAtNDMsMjQgKzQzLDI0IEBACiAgKgogICovCiAKLQogI2lmbmRlZiBTVEFUX0gKICNkZWZpbmUgU1RBVF9ICiAKLSNpbmNsdWRlICJkYXRhdHlwZXMuaCIgICAgICAgLyogZm9yIG9jdGV0X3QgICAgICAgICAgICAgICAgICAgICAgICovCi0jaW5jbHVkZSAiZXJyLmgiICAgICAgICAgICAgIC8qIGZvciBlcnJfc3RhdHVzX3QgICAgICAgICAgICAgICAgICAqLwotI2luY2x1ZGUgInJhbmRfc291cmNlLmgiICAgICAvKiBmb3IgcmFuZF9zb3VyY2VfZnVuY190IGRlZmluaXRpb24gKi8KKyNpbmNsdWRlICJkYXRhdHlwZXMuaCIgLyogZm9yIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgICovCisjaW5jbHVkZSAiZXJyLmgiICAgICAgIC8qIGZvciBzcnRwX2Vycl9zdGF0dXNfdCAgICAgICAgICAgICAqLwogCi1lcnJfc3RhdHVzX3QKLXN0YXRfdGVzdF9tb25vYml0KG9jdGV0X3QgKmRhdGEpOworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgogCi1lcnJfc3RhdHVzX3QKLXN0YXRfdGVzdF9wb2tlcihvY3RldF90ICpkYXRhKTsKK3NydHBfZXJyX3N0YXR1c190IHN0YXRfdGVzdF9tb25vYml0KHVpbnQ4X3QgKmRhdGEpOwogCi1lcnJfc3RhdHVzX3QKLXN0YXRfdGVzdF9ydW5zKG9jdGV0X3QgKmRhdGEpOworc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdF90ZXN0X3Bva2VyKHVpbnQ4X3QgKmRhdGEpOwogCi1lcnJfc3RhdHVzX3QKLXN0YXRfdGVzdF9yYW5kX3NvdXJjZShyYW5kX3NvdXJjZV9mdW5jX3QgcnMpOworc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdF90ZXN0X3J1bnModWludDhfdCAqZGF0YSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCiAKICNlbmRpZiAvKiBTVEFUX0ggKi8KZGlmZiAtLWdpdCBhL2NyeXB0by9pbmNsdWRlL3hmbS5oIGIvY3J5cHRvL2luY2x1ZGUveGZtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNTQ0OWUuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL2luY2x1ZGUveGZtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotLyoKLSAqIHhmbS5oCi0gKgotICogaW50ZXJmYWNlIGZvciBhYnN0cmFjdCBjcnlwdG8gdHJhbnNmb3JtCi0gKiAKLSAqIERhdmlkIEEuIE1jR3JldwotICogQ2lzY28gU3lzdGVtcywgSW5jLgotICovCi0KLSNpZm5kZWYgWEZNX0gKLSNkZWZpbmUgWEZNX0gKLQotI2luY2x1ZGUgImNyeXB0b19rZXJuZWwuaCIKLSNpbmNsdWRlICJlcnIuaCIKLQotLyoqCi0gKiBAZGVmZ3JvdXAgQ3J5cHRvIENyeXB0b2dyYXBoeQotICoKLSAqIEEgc2ltcGxlIGludGVyZmFjZSB0byBhbiBhYnN0cmFjdCBjcnlwdG9ncmFwaGljIHRyYW5zZm9ybSB0aGF0Ci0gKiBwcm92aWRlcyBib3RoIGNvbmZpZGVudGlhbGl0eSBhbmQgbWVzc2FnZSBhdXRoZW50aWNhdGlvbi4KLSAqCi0gKiBAewotICovCi0KLS8qKgotICogQGJyaWVmIGFwcGxpZXMgYSBjcnlwdG8gdHJhbnNmb3JtCi0gKgotICogVGhlIGZ1bmN0aW9uIHBvaW50ZXIgeGZtX2Z1bmNfdCBwb2ludHMgdG8gYSBmdW5jdGlvbiB0aGF0Ci0gKiBpbXBsZW1lbnRzIGEgY3J5cHRvIHRyYW5zZm9ybSwgYW5kIHByb3ZpZGVzIGEgdW5pZm9ybSBBUEkgZm9yCi0gKiBhY2Nlc3NpbmcgY3J5cHRvIG1lY2hhbmlzbXMuCi0gKiAKLSAqIEBwYXJhbSBrZXkgICAgICAgbG9jYXRpb24gb2Ygc2VjcmV0IGtleSAgICAgICAgICAgICAgICAgIAotICoKLSAqIEBwYXJhbSBjbGVhciAgICAgZGF0YSB0byBiZSBhdXRoZW50aWNhdGVkIG9ubHkgICAgICAgICAgIAotICoKLSAqIEBwYXJhbSBjbGVhcl9sZW4gbGVuZ3RoIG9mIGRhdGEgdG8gYmUgYXV0aGVudGljYXRlZCBvbmx5IAotICoKLSAqIEBwYXJhbSBpdiAgICAgICAgbG9jYXRpb24gdG8gd3JpdGUgdGhlIEluaXRpYWxpemF0aW9uIFZlY3RvciAoSVYpCi0gKgotICogQHBhcmFtIHByb3RlY3RlZCBsb2NhdGlvbiBvZiB0aGUgZGF0YSB0byBiZSBlbmNyeXB0ZWQgYW5kCi0gKiBhdXRoZW50aWNhdGVkIChiZWZvcmUgdGhlIGZ1bmN0aW9uIGNhbGwpLCBhbmQgdGhlIGNpcGhlcnRleHQKLSAqIGFuZCBhdXRoZW50aWNhdGlvbiB0YWcgKGFmdGVyIHRoZSBjYWxsKQotICoKLSAqIEBwYXJhbSBwcm90ZWN0ZWRfbGVuIGxvY2F0aW9uIG9mIHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgdG8gYmUKLSAqIGVuY3J5cHRlZCBhbmQgYXV0aGVudGljYXRlZCAoYmVmb3JlIHRoZSBmdW5jdGlvbiBjYWxsKSwgYW5kIHRoZQotICogbGVuZ3RoIG9mIHRoZSBjaXBoZXJ0ZXh0IChhZnRlciB0aGUgY2FsbCkKLSAqCi0gKiBAcGFyYW0gYXV0aF90YWcgICBsb2NhdGlvbiB0byB3cml0ZSBhdXRoIHRhZyAgICAgICAgICAgICAgCi0gKi8KLQotdHlwZWRlZiBlcnJfc3RhdHVzX3QgKCp4Zm1fZnVuY190KSAKLSAgICAgKHZvaWQgKmtleSwgICAgICAgICAgICAKLSAgICAgIHZvaWQgKmNsZWFyLCAgICAgICAgICAKLSAgICAgIHVuc2lnbmVkIGNsZWFyX2xlbiwgICAKLSAgICAgIHZvaWQgKml2LCAgICAgICAgICAgICAKLSAgICAgIHZvaWQgKm9wYXF1ZSwgICAgICAgICAKLSAgICAgIHVuc2lnbmVkICpvcGFxdWVfbGVuLCAKLSAgICAgIHZvaWQgKmF1dGhfdGFnICAgICAgICAKLSAgICAgICk7Ci0KLXR5cGVkZWYgCi1lcnJfc3RhdHVzX3QgKCp4Zm1faW52X3QpCi0gICAgICh2b2lkICprZXksICAgICAgICAgICAgLyogbG9jYXRpb24gb2Ygc2VjcmV0IGtleSAgICAgICAgICAgICAgICAgICovCi0gICAgICB2b2lkICpjbGVhciwgICAgICAgICAgLyogZGF0YSB0byBiZSBhdXRoZW50aWNhdGVkIG9ubHkgICAgICAgICAgICovCi0gICAgICB1bnNpZ25lZCBjbGVhcl9sZW4sICAgLyogbGVuZ3RoIG9mIGRhdGEgdG8gYmUgYXV0aGVudGljYXRlZCBvbmx5ICovCi0gICAgICB2b2lkICppdiwgICAgICAgICAgICAgLyogbG9jYXRpb24gb2YgaXYgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICB2b2lkICpvcGFxdWUsICAgICAgICAgLyogZGF0YSB0byBiZSBkZWNyeXB0ZWQgYW5kIGF1dGhlbnRpY2F0ZWQgICovCi0gICAgICB1bnNpZ25lZCAqb3BhcXVlX2xlbiwgLyogbG9jYXRpb24gb2YgdGhlIGxlbmd0aCBvZiBkYXRhIHRvIGJlCi0JCQkgICAgICogZGVjcnlwdGVkIGFuZCBhdXRoZCAoYmVmb3JlIGFuZCBhZnRlcikgCi0JCQkgICAgICovCi0gICAgICB2b2lkICphdXRoX3RhZyAgICAgICAgLyogbG9jYXRpb24gb2YgYXV0aCB0YWcgICAgICAgICAgICAgICAgICAgICovCi0gICAgICApOwotCi10eXBlZGVmIHN0cnVjdCB4Zm1fY3R4X3QgewotICB4Zm1fZnVuY190IGZ1bmM7Ci0gIHhmbV9pbnZfdCAgaW52OwotICB1bnNpZ25lZCBrZXlfbGVuOwotICB1bnNpZ25lZCBpdl9sZW47Ci0gIHVuc2lnbmVkIGF1dGhfdGFnX2xlbjsKLX0geGZtX2N0eF90OwotCi10eXBlZGVmIHhmbV9jdHhfdCAqeGZtX3Q7Ci0KLSNkZWZpbmUgeGZtX2dldF9rZXlfbGVuKHhmbSkgKCh4Zm0pLT5rZXlfbGVuKQotCi0jZGVmaW5lIHhmbV9nZXRfaXZfbGVuKHhmbSkgKCh4Zm0pLT5pdl9sZW4pCi0KLSNkZWZpbmUgeGZtX2dldF9hdXRoX3RhZ19sZW4oeGZtKSAoKHhmbSktPmF1dGhfdGFnX2xlbikKLQotCi0vKiBjcnlwdG9hbGdvIC0gNS8yOCAqLwotICAKLXR5cGVkZWYgZXJyX3N0YXR1c190ICgqY3J5cHRvYWxnX2Z1bmNfdCkgCi0gICAgICh2b2lkICprZXksICAgICAgICAgICAgCi0gICAgICB2b2lkICpjbGVhciwgICAgICAgICAgCi0gICAgICB1bnNpZ25lZCBjbGVhcl9sZW4sICAgCi0gICAgICB2b2lkICppdiwgICAgICAgICAgICAgCi0gICAgICB2b2lkICpvcGFxdWUsICAgICAgICAgCi0gICAgICB1bnNpZ25lZCAqb3BhcXVlX2xlbgotICAgICAgKTsKLQotdHlwZWRlZiAKLWVycl9zdGF0dXNfdCAoKmNyeXB0b2FsZ19pbnZfdCkKLSAgICAgKHZvaWQgKmtleSwgICAgICAgICAgICAvKiBsb2NhdGlvbiBvZiBzZWNyZXQga2V5ICAgICAgICAgICAgICAgICAgKi8KLSAgICAgIHZvaWQgKmNsZWFyLCAgICAgICAgICAvKiBkYXRhIHRvIGJlIGF1dGhlbnRpY2F0ZWQgb25seSAgICAgICAgICAgKi8KLSAgICAgIHVuc2lnbmVkIGNsZWFyX2xlbiwgICAvKiBsZW5ndGggb2YgZGF0YSB0byBiZSBhdXRoZW50aWNhdGVkIG9ubHkgKi8KLSAgICAgIHZvaWQgKml2LCAgICAgICAgICAgICAvKiBsb2NhdGlvbiBvZiBpdiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgIHZvaWQgKm9wYXF1ZSwgICAgICAgICAvKiBkYXRhIHRvIGJlIGRlY3J5cHRlZCBhbmQgYXV0aGVudGljYXRlZCAgKi8KLSAgICAgIHVuc2lnbmVkICpvcGFxdWVfbGVuICAvKiBsb2NhdGlvbiBvZiB0aGUgbGVuZ3RoIG9mIGRhdGEgdG8gYmUKLQkJCSAgICAgKiBkZWNyeXB0ZWQgYW5kIGF1dGhkIChiZWZvcmUgYW5kIGFmdGVyKSAKLQkJCSAgICAgKi8KLSAgICAgICk7Ci0KLXR5cGVkZWYgc3RydWN0IGNyeXB0b2FsZ19jdHhfdCB7Ci0gIGNyeXB0b2FsZ19mdW5jX3QgZW5jOwotICBjcnlwdG9hbGdfaW52X3QgIGRlYzsKLSAgdW5zaWduZWQga2V5X2xlbjsKLSAgdW5zaWduZWQgaXZfbGVuOwotICB1bnNpZ25lZCBhdXRoX3RhZ19sZW47Ci0gIHVuc2lnbmVkIG1heF9leHBhbnNpb247IAotfSBjcnlwdG9hbGdfY3R4X3Q7Ci0KLXR5cGVkZWYgY3J5cHRvYWxnX2N0eF90ICpjcnlwdG9hbGdfdDsKLQotI2RlZmluZSBjcnlwdG9hbGdfZ2V0X2tleV9sZW4oY3J5cHRvYWxnKSAoKGNyeXB0b2FsZyktPmtleV9sZW4pCi0KLSNkZWZpbmUgY3J5cHRvYWxnX2dldF9pdl9sZW4oY3J5cHRvYWxnKSAoKGNyeXB0b2FsZyktPml2X2xlbikKLQotI2RlZmluZSBjcnlwdG9hbGdfZ2V0X2F1dGhfdGFnX2xlbihjcnlwdG9hbGcpICgoY3J5cHRvYWxnKS0+YXV0aF90YWdfbGVuKQotCi0KLQotLyoqCi0gKiBAfQotICovCi0KLSNlbmRpZiAvKiBYRk1fSCAqLwotCi0KZGlmZiAtLWdpdCBhL2NyeXB0by9rZXJuZWwvYWxsb2MuYyBiL2NyeXB0by9rZXJuZWwvYWxsb2MuYwppbmRleCBkMDk5MTBiLi5kYmU1ODI2IDEwMDY0NAotLS0gYS9jcnlwdG8va2VybmVsL2FsbG9jLmMKKysrIGIvY3J5cHRvL2tlcm5lbC9hbGxvYy5jCkBAIC0xLDMyICsxLDMyIEBACiAvKgogICogYWxsb2MuYwogICoKLSAqIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gCisgKiBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uCiAgKgogICogRGF2aWQgQS4gTWNHcmV3CiAgKiBDaXNjbyBTeXN0ZW1zLCBJbmMuCiAgKi8KIC8qCi0gKgkKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA1IENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxNyBDaXNjbyBTeXN0ZW1zLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwogICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKICAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCisgKgogICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAogICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKKyAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKQEAgLTQyLDUxICs0Miw2MCBAQAogICoKICAqLwogCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKICNpbmNsdWRlICJhbGxvYy5oIgogI2luY2x1ZGUgImNyeXB0b19rZXJuZWwuaCIKIAogLyogdGhlIGRlYnVnIG1vZHVsZSBmb3IgbWVtb3J5IGFsbG9jYXRpb24gKi8KIAotZGVidWdfbW9kdWxlX3QgbW9kX2FsbG9jID0gewotICAwLCAgICAgICAgICAgICAgICAgIC8qIGRlYnVnZ2luZyBpcyBvZmYgYnkgZGVmYXVsdCAqLwotICAiYWxsb2MiICAgICAgICAgICAgIC8qIHByaW50YWJsZSBuYW1lIGZvciBtb2R1bGUgICAqLworc3J0cF9kZWJ1Z19tb2R1bGVfdCBzcnRwX21vZF9hbGxvYyA9IHsKKyAgICAwLCAgICAgIC8qIGRlYnVnZ2luZyBpcyBvZmYgYnkgZGVmYXVsdCAqLworICAgICJhbGxvYyIgLyogcHJpbnRhYmxlIG5hbWUgZm9yIG1vZHVsZSAgICovCiB9OwogCi0jaWYgSEFWRV9TVERMSUJfSAotCiAvKgotICogTm90YSBiZW5lOiB0aGUgZGVidWdnaW5nIHN0YXRlbWVudHMgZm9yIGNyeXB0b19hbGxvYygpIGFuZAotICogY3J5cHRvX2ZyZWUoKSBoYXZlIGlkZW50aWNhbCBwcmVmaXhlcywgd2hpY2ggaW5jbHVkZSB0aGUgYWRkcmVzc2VzCisgKiBOb3RhIGJlbmU6IHRoZSBkZWJ1Z2dpbmcgc3RhdGVtZW50cyBmb3Igc3J0cF9jcnlwdG9fYWxsb2MoKSBhbmQKKyAqIHNydHBfY3J5cHRvX2ZyZWUoKSBoYXZlIGlkZW50aWNhbCBwcmVmaXhlcywgd2hpY2ggaW5jbHVkZSB0aGUgYWRkcmVzc2VzCiAgKiBvZiB0aGUgbWVtb3J5IGxvY2F0aW9ucyBvbiB3aGljaCB0aGV5IGFyZSBvcGVyYXRpbmcuICBUaGlzIGZhY3QgY2FuCiAgKiBiZSB1c2VkIHRvIGxvY2F0ZSBtZW1vcnkgbGVha3MsIGJ5IHR1cm5pbmcgb24gbWVtb3J5IGRlYnVnZ2luZywKICAqIGdyZXBwaW5nIGZvciAnYWxsb2MnLCB0aGVuIG1hdGNoaW5nIGFsbG9jIGFuZCBmcmVlIGNhbGxzIGJ5CiAgKiBhZGRyZXNzLgogICovCiAKLXZvaWQgKgotY3J5cHRvX2FsbG9jKHNpemVfdCBzaXplKSB7Ci0gIHZvaWQgKnB0cjsKKyNpZiBkZWZpbmVkKEhBVkVfU1RETElCX0gpCiAKLSAgcHRyID0gbWFsbG9jKHNpemUpOwotICAgIAotICBpZiAocHRyKSB7Ci0gICAgZGVidWdfcHJpbnQobW9kX2FsbG9jLCAiKGxvY2F0aW9uOiAlcCkgYWxsb2NhdGVkIiwgcHRyKTsKLSAgfSBlbHNlCi0gICAgZGVidWdfcHJpbnQobW9kX2FsbG9jLCAiYWxsb2NhdGlvbiBmYWlsZWQgKGFza2VkIGZvciAlZCBieXRlcylcbiIsIHNpemUpOwotICAgIAotICByZXR1cm4gcHRyOwordm9pZCAqc3J0cF9jcnlwdG9fYWxsb2Moc2l6ZV90IHNpemUpCit7CisgICAgdm9pZCAqcHRyOworCisgICAgaWYgKCFzaXplKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHB0ciA9IGNhbGxvYygxLCBzaXplKTsKKworICAgIGlmIChwdHIpIHsKKyAgICAgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfYWxsb2MsICIobG9jYXRpb246ICVwKSBhbGxvY2F0ZWQiLCBwdHIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX2FsbG9jLCAiYWxsb2NhdGlvbiBmYWlsZWQgKGFza2VkIGZvciAlZCBieXRlcylcbiIsCisgICAgICAgICAgICAgICAgICAgIHNpemUpOworICAgIH0KKworICAgIHJldHVybiBwdHI7CiB9CiAKLXZvaWQgCi1jcnlwdG9fZnJlZSh2b2lkICpwdHIpIHsKK3ZvaWQgc3J0cF9jcnlwdG9fZnJlZSh2b2lkICpwdHIpCit7CisgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfYWxsb2MsICIobG9jYXRpb246ICVwKSBmcmVlZCIsIHB0cik7CiAKLSAgZGVidWdfcHJpbnQobW9kX2FsbG9jLCAiKGxvY2F0aW9uOiAlcCkgZnJlZWQiLCBwdHIpOwotCi0gIGZyZWUocHRyKTsKKyAgICBmcmVlKHB0cik7CiB9CiAKLSNlbHNlICAvKiB3ZSBuZWVkIHRvIGRlZmluZSBvdXIgb3duIG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmVzICovCisjZWxzZSAvKiB3ZSBuZWVkIHRvIGRlZmluZSBvdXIgb3duIG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmVzICovCiAKLSNlcnJvciBubyBtZW1vcnkgYWxsb2NhdGlvbiBkZWZpbmVkIHlldCAKKyNlcnJvciBubyBtZW1vcnkgYWxsb2NhdGlvbiBkZWZpbmVkIHlldAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2NyeXB0by9rZXJuZWwvY3J5cHRvX2tlcm5lbC5jIGIvY3J5cHRvL2tlcm5lbC9jcnlwdG9fa2VybmVsLmMKaW5kZXggODJiNGFjYS4uZGY2YWY3ZCAxMDA2NDQKLS0tIGEvY3J5cHRvL2tlcm5lbC9jcnlwdG9fa2VybmVsLmMKKysrIGIvY3J5cHRvL2tlcm5lbC9jcnlwdG9fa2VybmVsLmMKQEAgLTcsMjYgKzcsMjYgQEAKICAqIENpc2NvIFN5c3RlbXMsIEluYy4KICAqLwogLyoKLSAqCQotICogQ29weXJpZ2h0KGMpIDIwMDEtMjAwNSBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDEtMjAxNyBDaXNjbyBTeXN0ZW1zLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwogICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKICAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCisgKgogICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAogICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKKyAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKQEAgLTQyLDQ1NiArNDIsNTIwIEBACiAgKgogICovCiAKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKIAotI2luY2x1ZGUgPHN0ZGlvLmg+ICAgICAgLyogcHJpbnRmKCkgaXMgdXNlZCBpbiBjcnlwdG9fa2VybmVsX3N0YXR1cygpICovCiAjaW5jbHVkZSAiYWxsb2MuaCIKIAogI2luY2x1ZGUgImNyeXB0b19rZXJuZWwuaCIKKyNpbmNsdWRlICJjaXBoZXJfdHlwZXMuaCIKIAogLyogdGhlIGRlYnVnIG1vZHVsZSBmb3IgdGhlIGNyeXB0b19rZXJuZWwgKi8KIAotZGVidWdfbW9kdWxlX3QgbW9kX2NyeXB0b19rZXJuZWwgPSB7Ci0gIDAsICAgICAgICAgICAgICAgICAgLyogZGVidWdnaW5nIGlzIG9mZiBieSBkZWZhdWx0ICovCi0gICJjcnlwdG8ga2VybmVsIiAgICAgLyogcHJpbnRhYmxlIG5hbWUgZm9yIG1vZHVsZSAgICovCitzcnRwX2RlYnVnX21vZHVsZV90IHNydHBfbW9kX2NyeXB0b19rZXJuZWwgPSB7CisgICAgMCwgICAgICAgICAgICAgIC8qIGRlYnVnZ2luZyBpcyBvZmYgYnkgZGVmYXVsdCAqLworICAgICJjcnlwdG8ga2VybmVsIiAvKiBwcmludGFibGUgbmFtZSBmb3IgbW9kdWxlICAgKi8KIH07CiAKLS8qCi0gKiBvdGhlciBkZWJ1ZyBtb2R1bGVzIHRoYXQgY2FuIGJlIGluY2x1ZGVkIGluIHRoZSBrZXJuZWwKLSAqLwotCi1leHRlcm4gZGVidWdfbW9kdWxlX3QgbW9kX2F1dGg7Ci1leHRlcm4gZGVidWdfbW9kdWxlX3QgbW9kX2NpcGhlcjsKLWV4dGVybiBkZWJ1Z19tb2R1bGVfdCBtb2Rfc3RhdDsKLWV4dGVybiBkZWJ1Z19tb2R1bGVfdCBtb2RfYWxsb2M7Ci0KLS8qIAotICogY2lwaGVyIHR5cGVzIHRoYXQgY2FuIGJlIGluY2x1ZGVkIGluIHRoZSBrZXJuZWwKLSAqLyAKLQotZXh0ZXJuIGNpcGhlcl90eXBlX3QgbnVsbF9jaXBoZXI7Ci1leHRlcm4gY2lwaGVyX3R5cGVfdCBhZXNfaWNtOwotZXh0ZXJuIGNpcGhlcl90eXBlX3QgYWVzX2NiYzsKLQotCi0vKgotICogYXV0aCBmdW5jIHR5cGVzIHRoYXQgY2FuIGJlIGluY2x1ZGVkIGluIHRoZSBrZXJuZWwKLSAqLwotCi1leHRlcm4gYXV0aF90eXBlX3QgbnVsbF9hdXRoOwotZXh0ZXJuIGF1dGhfdHlwZV90IGhtYWM7Ci0KIC8qIGNyeXB0b19rZXJuZWwgaXMgYSBnbG9iYWwgdmFyaWFibGUsIHRoZSBvbmx5IG9uZSBvZiBpdHMgZGF0YXR5cGUgKi8KIAotY3J5cHRvX2tlcm5lbF90Ci1jcnlwdG9fa2VybmVsID0gewotICBjcnlwdG9fa2VybmVsX3N0YXRlX2luc2VjdXJlLCAgICAvKiBzdGFydCBvZmYgaW4gaW5zZWN1cmUgc3RhdGUgKi8KLSAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gY2lwaGVyIHR5cGVzIHlldCAgICAgICAgICovCi0gIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIGF1dGggdHlwZXMgeWV0ICAgICAgICAgICAqLwotICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBubyBkZWJ1ZyBtb2R1bGVzIHlldCAgICAgICAgKi8KK3NydHBfY3J5cHRvX2tlcm5lbF90IGNyeXB0b19rZXJuZWwgPSB7CisgICAgc3J0cF9jcnlwdG9fa2VybmVsX3N0YXRlX2luc2VjdXJlLCAvKiBzdGFydCBvZmYgaW4gaW5zZWN1cmUgc3RhdGUgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIGNpcGhlciB0eXBlcyB5ZXQgICAgICAgICAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gYXV0aCB0eXBlcyB5ZXQgICAgICAgICAgICovCisgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBubyBkZWJ1ZyBtb2R1bGVzIHlldCAgICAgICAgKi8KIH07CiAKLWVycl9zdGF0dXNfdAotY3J5cHRvX2tlcm5lbF9pbml0KCkgewotICBlcnJfc3RhdHVzX3Qgc3RhdHVzOyAgCisjZGVmaW5lIE1BWF9STkdfVFJJQUxTIDI1CiAKLSAgLyogaW5pdGlhbGl6ZSBlcnJvciByZXBvcnRpbmcgc3lzdGVtICovCi0gIHN0YXR1cyA9IGVycl9yZXBvcnRpbmdfaW5pdCgiY3J5cHRvIik7Ci0gIGlmIChzdGF0dXMpCi0gICAgcmV0dXJuIHN0YXR1czsKK3NydHBfZXJyX3N0YXR1c190IHNydHBfY3J5cHRvX2tlcm5lbF9pbml0KCkKK3sKKyAgICBzcnRwX2Vycl9zdGF0dXNfdCBzdGF0dXM7CiAKLSAgLyogbG9hZCBkZWJ1ZyBtb2R1bGVzICovCi0gIHN0YXR1cyA9IGNyeXB0b19rZXJuZWxfbG9hZF9kZWJ1Z19tb2R1bGUoJm1vZF9jcnlwdG9fa2VybmVsKTsKLSAgaWYgKHN0YXR1cykKLSAgICByZXR1cm4gc3RhdHVzOwotICBzdGF0dXMgPSBjcnlwdG9fa2VybmVsX2xvYWRfZGVidWdfbW9kdWxlKCZtb2RfYXV0aCk7Ci0gIGlmIChzdGF0dXMpCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgc3RhdHVzID0gY3J5cHRvX2tlcm5lbF9sb2FkX2RlYnVnX21vZHVsZSgmbW9kX2NpcGhlcik7Ci0gIGlmIChzdGF0dXMpCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgc3RhdHVzID0gY3J5cHRvX2tlcm5lbF9sb2FkX2RlYnVnX21vZHVsZSgmbW9kX3N0YXQpOwotICBpZiAoc3RhdHVzKQotICAgIHJldHVybiBzdGF0dXM7Ci0gIHN0YXR1cyA9IGNyeXB0b19rZXJuZWxfbG9hZF9kZWJ1Z19tb2R1bGUoJm1vZF9hbGxvYyk7Ci0gIGlmIChzdGF0dXMpCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgCi0gIC8qIGluaXRpYWxpemUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKi8KLSAgc3RhdHVzID0gcmFuZF9zb3VyY2VfaW5pdCgpOwotICBpZiAoc3RhdHVzKQotICAgIHJldHVybiBzdGF0dXM7CisgICAgLyogY2hlY2sgdGhlIHNlY3VyaXR5IHN0YXRlICovCisgICAgaWYgKGNyeXB0b19rZXJuZWwuc3RhdGUgPT0gc3J0cF9jcnlwdG9fa2VybmVsX3N0YXRlX3NlY3VyZSkgeworICAgICAgICAvKgorICAgICAgICAgKiB3ZSdyZSBhbHJlYWR5IGluIHRoZSBzZWN1cmUgc3RhdGUsIGJ1dCB3ZSd2ZSBiZWVuIGFza2VkIHRvCisgICAgICAgICAqIHJlLWluaXRpYWxpemUsIHNvIHdlIGp1c3QgcmUtcnVuIHRoZSBzZWxmLXRlc3RzIGFuZCB0aGVuIHJldHVybgorICAgICAgICAgKi8KKyAgICAgICAgcmV0dXJuIHNydHBfY3J5cHRvX2tlcm5lbF9zdGF0dXMoKTsKKyAgICB9CiAKLSAgLyogcnVuIEZJUFMtMTQwIHN0YXRpc3RpY2FsIHRlc3RzIG9uIHJhbmRfc291cmNlICovICAKLSAgc3RhdHVzID0gc3RhdF90ZXN0X3JhbmRfc291cmNlKHJhbmRfc291cmNlX2dldF9vY3RldF9zdHJpbmcpOwotICBpZiAoc3RhdHVzKQotICAgIHJldHVybiBzdGF0dXM7Ci0KLSAgLyogaW5pdGlhbGl6ZSBwc2V1ZG9yYW5kb20gbnVtYmVyIGdlbmVyYXRvciAqLwotICBzdGF0dXMgPSBjdHJfcHJuZ19pbml0KHJhbmRfc291cmNlX2dldF9vY3RldF9zdHJpbmcpOwotICBpZiAoc3RhdHVzKQotICAgIHJldHVybiBzdGF0dXM7Ci0KLSAgLyogcnVuIEZJUFMtMTQwIHN0YXRpc3RpY2FsIHRlc3RzIG9uIGN0cl9wcm5nICovICAKLSAgc3RhdHVzID0gc3RhdF90ZXN0X3JhbmRfc291cmNlKGN0cl9wcm5nX2dldF9vY3RldF9zdHJpbmcpOwotICBpZiAoc3RhdHVzKQotICAgIHJldHVybiBzdGF0dXM7Ci0gCi0gIC8qIGxvYWQgY2lwaGVyIHR5cGVzICovCi0gIHN0YXR1cyA9IGNyeXB0b19rZXJuZWxfbG9hZF9jaXBoZXJfdHlwZSgmbnVsbF9jaXBoZXIsIE5VTExfQ0lQSEVSKTsKLSAgaWYgKHN0YXR1cykgCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgc3RhdHVzID0gY3J5cHRvX2tlcm5lbF9sb2FkX2NpcGhlcl90eXBlKCZhZXNfaWNtLCBBRVNfMTI4X0lDTSk7Ci0gIGlmIChzdGF0dXMpIAotICAgIHJldHVybiBzdGF0dXM7Ci0gIHN0YXR1cyA9IGNyeXB0b19rZXJuZWxfbG9hZF9jaXBoZXJfdHlwZSgmYWVzX2NiYywgQUVTXzEyOF9DQkMpOwotICBpZiAoc3RhdHVzKSAKLSAgICByZXR1cm4gc3RhdHVzOwotCi0gIC8qIGxvYWQgYXV0aCBmdW5jIHR5cGVzICovCi0gIHN0YXR1cyA9IGNyeXB0b19rZXJuZWxfbG9hZF9hdXRoX3R5cGUoJm51bGxfYXV0aCwgTlVMTF9BVVRIKTsKLSAgaWYgKHN0YXR1cykKLSAgICByZXR1cm4gc3RhdHVzOwotICBzdGF0dXMgPSBjcnlwdG9fa2VybmVsX2xvYWRfYXV0aF90eXBlKCZobWFjLCBITUFDX1NIQTEpOwotICBpZiAoc3RhdHVzKQotICAgIHJldHVybiBzdGF0dXM7Ci0KLSAgLyogY2hhbmdlIHN0YXRlIHRvIHNlY3VyZSAqLwotICBjcnlwdG9fa2VybmVsLnN0YXRlID0gY3J5cHRvX2tlcm5lbF9zdGF0ZV9zZWN1cmU7Ci0KLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7Ci19Ci0KLWVycl9zdGF0dXNfdAotY3J5cHRvX2tlcm5lbF9zdGF0dXMoKSB7Ci0gIGVycl9zdGF0dXNfdCBzdGF0dXM7Ci0gIGtlcm5lbF9jaXBoZXJfdHlwZV90ICAqY3R5cGUgPSBjcnlwdG9fa2VybmVsLmNpcGhlcl90eXBlX2xpc3Q7Ci0gIGtlcm5lbF9hdXRoX3R5cGVfdCAgICAqYXR5cGUgPSBjcnlwdG9fa2VybmVsLmF1dGhfdHlwZV9saXN0OwotICBrZXJuZWxfZGVidWdfbW9kdWxlX3QgKmRtICAgID0gY3J5cHRvX2tlcm5lbC5kZWJ1Z19tb2R1bGVfbGlzdDsKLQotICAvKiBydW4gRklQUy0xNDAgc3RhdGlzdGljYWwgdGVzdHMgb24gcmFuZF9zb3VyY2UgKi8gIAotICBwcmludGYoInRlc3RpbmcgcmFuZF9zb3VyY2UuLi4iKTsKLSAgc3RhdHVzID0gc3RhdF90ZXN0X3JhbmRfc291cmNlKHJhbmRfc291cmNlX2dldF9vY3RldF9zdHJpbmcpOwotICBpZiAoc3RhdHVzKSB7Ci0gICAgcHJpbnRmKCJmYWlsZWRcbiIpOwotICAgIGNyeXB0b19rZXJuZWwuc3RhdGUgPSBjcnlwdG9fa2VybmVsX3N0YXRlX2luc2VjdXJlOwotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0gIAotICBwcmludGYoInBhc3NlZFxuIik7Ci0KLSAgLyogZm9yIGVhY2ggY2lwaGVyIHR5cGUsIGRlc2NyaWJlIGFuZCB0ZXN0ICovCi0gIHdoaWxlKGN0eXBlICE9IE5VTEwpIHsKLSAgICBwcmludGYoImNpcGhlcjogJXNcbiIsIGN0eXBlLT5jaXBoZXJfdHlwZS0+ZGVzY3JpcHRpb24pOwotICAgIHByaW50ZigiICBpbnN0YW5jZSBjb3VudDogJWRcbiIsIGN0eXBlLT5jaXBoZXJfdHlwZS0+cmVmX2NvdW50KTsKLSAgICBwcmludGYoIiAgc2VsZi10ZXN0OiAiKTsKLSAgICBzdGF0dXMgPSBjaXBoZXJfdHlwZV9zZWxmX3Rlc3QoY3R5cGUtPmNpcGhlcl90eXBlKTsKKyAgICAvKiBpbml0aWFsaXplIGVycm9yIHJlcG9ydGluZyBzeXN0ZW0gKi8KKyAgICBzdGF0dXMgPSBzcnRwX2Vycl9yZXBvcnRpbmdfaW5pdCgpOwogICAgIGlmIChzdGF0dXMpIHsKLSAgICAgIHByaW50ZigiZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgc3RhdHVzKTsKLSAgICAgIGV4aXQoc3RhdHVzKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9Ci0gICAgcHJpbnRmKCJwYXNzZWRcbiIpOwotICAgIGN0eXBlID0gY3R5cGUtPm5leHQ7Ci0gIH0KLSAgCi0gIC8qIGZvciBlYWNoIGF1dGggdHlwZSwgZGVzY3JpYmUgYW5kIHRlc3QgKi8KLSAgd2hpbGUoYXR5cGUgIT0gTlVMTCkgewotICAgIHByaW50ZigiYXV0aCBmdW5jOiAlc1xuIiwgYXR5cGUtPmF1dGhfdHlwZS0+ZGVzY3JpcHRpb24pOwotICAgIHByaW50ZigiICBpbnN0YW5jZSBjb3VudDogJWRcbiIsIGF0eXBlLT5hdXRoX3R5cGUtPnJlZl9jb3VudCk7Ci0gICAgcHJpbnRmKCIgIHNlbGYtdGVzdDogIik7Ci0gICAgc3RhdHVzID0gYXV0aF90eXBlX3NlbGZfdGVzdChhdHlwZS0+YXV0aF90eXBlKTsKKworICAgIC8qIGxvYWQgZGVidWcgbW9kdWxlcyAqLworICAgIHN0YXR1cyA9IHNydHBfY3J5cHRvX2tlcm5lbF9sb2FkX2RlYnVnX21vZHVsZSgmc3J0cF9tb2RfY3J5cHRvX2tlcm5lbCk7CiAgICAgaWYgKHN0YXR1cykgewotICAgICAgcHJpbnRmKCJmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLCBzdGF0dXMpOwotICAgICAgZXhpdChzdGF0dXMpOworICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KLSAgICBwcmludGYoInBhc3NlZFxuIik7Ci0gICAgYXR5cGUgPSBhdHlwZS0+bmV4dDsKLSAgfQotCi0gIC8qIGRlc2NyaWJlIGVhY2ggZGVidWcgbW9kdWxlICovCi0gIHByaW50ZigiZGVidWcgbW9kdWxlcyBsb2FkZWQ6XG4iKTsKLSAgd2hpbGUgKGRtICE9IE5VTEwpIHsKLSAgICBwcmludGYoIiAgJXMgIiwgZG0tPm1vZC0+bmFtZSk7ICAKLSAgICBpZiAoZG0tPm1vZC0+b24pCi0gICAgICBwcmludGYoIihvbilcbiIpOwotICAgIGVsc2UKLSAgICAgIHByaW50ZigiKG9mZilcbiIpOwotICAgIGRtID0gZG0tPm5leHQ7Ci0gIH0KLQotICByZXR1cm4gZXJyX3N0YXR1c19vazsKLX0KLQotZXJyX3N0YXR1c190Ci1jcnlwdG9fa2VybmVsX2xpc3RfZGVidWdfbW9kdWxlcygpIHsKLSAga2VybmVsX2RlYnVnX21vZHVsZV90ICpkbSA9IGNyeXB0b19rZXJuZWwuZGVidWdfbW9kdWxlX2xpc3Q7Ci0KLSAgLyogZGVzY3JpYmUgZWFjaCBkZWJ1ZyBtb2R1bGUgKi8KLSAgcHJpbnRmKCJkZWJ1ZyBtb2R1bGVzIGxvYWRlZDpcbiIpOwotICB3aGlsZSAoZG0gIT0gTlVMTCkgewotICAgIHByaW50ZigiICAlcyAiLCBkbS0+bW9kLT5uYW1lKTsgIAotICAgIGlmIChkbS0+bW9kLT5vbikKLSAgICAgIHByaW50ZigiKG9uKVxuIik7Ci0gICAgZWxzZQotICAgICAgcHJpbnRmKCIob2ZmKVxuIik7Ci0gICAgZG0gPSBkbS0+bmV4dDsKLSAgfQotCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOwotfQotCi1lcnJfc3RhdHVzX3QKLWNyeXB0b19rZXJuZWxfc2h1dGRvd24oKSB7Ci0gIGVycl9zdGF0dXNfdCBzdGF0dXM7Ci0gIGtlcm5lbF9jaXBoZXJfdHlwZV90ICpjdHlwZSwgKm5leHQ7Ci0KLSAgLyoKLSAgICogZnJlZSBkeW5hbWljIG1lbW9yeSB1c2VkIGluIGNyeXB0b19rZXJuZWwgYXQgcHJlc2VudAotICAgKi8KLQotICAvKiB3YWxrIGRvd24gY2lwaGVyIHR5cGUgbGlzdCwgZnJlZWluZyBtZW1vcnkgKi8KLSAgY3R5cGUgPSBjcnlwdG9fa2VybmVsLmNpcGhlcl90eXBlX2xpc3Q7Ci0gIHdoaWxlIChjdHlwZSAhPSBOVUxMKSB7Ci0gICAgbmV4dCA9IGN0eXBlLT5uZXh0OwotICAgIGRlYnVnX3ByaW50KG1vZF9jcnlwdG9fa2VybmVsLCAKLQkJImZyZWVpbmcgbWVtb3J5IGZvciBjaXBoZXIgJXMiLCAKLQkJY3R5cGUtPmNpcGhlcl90eXBlLT5kZXNjcmlwdGlvbik7Ci0gICAgY3J5cHRvX2ZyZWUoY3R5cGUpOwotICAgIGN0eXBlID0gbmV4dDsKLSAgfQotCi0gIC8qIGRlLWluaXRpYWxpemUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKi8KLSAgc3RhdHVzID0gcmFuZF9zb3VyY2VfZGVpbml0KCk7Ci0gIGlmIChzdGF0dXMpCi0gICAgcmV0dXJuIHN0YXR1czsKLQotICAvKiByZXR1cm4gdG8gaW5zZWN1cmUgc3RhdGUgKi8KLSAgY3J5cHRvX2tlcm5lbC5zdGF0ZSA9IGNyeXB0b19rZXJuZWxfc3RhdGVfaW5zZWN1cmU7Ci0gIAotICByZXR1cm4gZXJyX3N0YXR1c19vazsKLX0KLQotZXJyX3N0YXR1c190Ci1jcnlwdG9fa2VybmVsX2xvYWRfY2lwaGVyX3R5cGUoY2lwaGVyX3R5cGVfdCAqbmV3X2N0LCBjaXBoZXJfdHlwZV9pZF90IGlkKSB7Ci0gIGtlcm5lbF9jaXBoZXJfdHlwZV90ICpjdHlwZSwgKm5ldzsKLSAgZXJyX3N0YXR1c190IHN0YXR1czsKLQotICAvKiBkZWZlbnNpdmUgY29kaW5nICovCi0gIGlmIChuZXdfY3QgPT0gTlVMTCkKLSAgICByZXR1cm4gZXJyX3N0YXR1c19iYWRfcGFyYW07Ci0KLSAgLyogY2hlY2sgY2lwaGVyIHR5cGUgYnkgcnVubmluZyBzZWxmLXRlc3QgKi8KLSAgc3RhdHVzID0gY2lwaGVyX3R5cGVfc2VsZl90ZXN0KG5ld19jdCk7Ci0gIGlmIChzdGF0dXMpIHsKLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0KLSAgLyogd2FsayBkb3duIGxpc3QsIGNoZWNraW5nIGlmIHRoaXMgdHlwZSBpcyBpbiB0aGUgbGlzdCBhbHJlYWR5ICAqLwotICBjdHlwZSA9IGNyeXB0b19rZXJuZWwuY2lwaGVyX3R5cGVfbGlzdDsKLSAgd2hpbGUgKGN0eXBlICE9IE5VTEwpIHsKLSAgICBpZiAoKG5ld19jdCA9PSBjdHlwZS0+Y2lwaGVyX3R5cGUpIHx8IChpZCA9PSBjdHlwZS0+aWQpKQotICAgICAgcmV0dXJuIGVycl9zdGF0dXNfYmFkX3BhcmFtOyAgICAKLSAgICBjdHlwZSA9IGN0eXBlLT5uZXh0OwotICB9Ci0KLSAgLyogcHV0IG5ld19jdCBhdCB0aGUgaGVhZCBvZiB0aGUgbGlzdCAqLwotICAvKiBhbGxvY2F0ZSBtZW1vcnkgKi8KLSAgbmV3ID0gKGtlcm5lbF9jaXBoZXJfdHlwZV90ICopIGNyeXB0b19hbGxvYyhzaXplb2Yoa2VybmVsX2NpcGhlcl90eXBlX3QpKTsKLSAgaWYgKG5ldyA9PSBOVUxMKQotICAgIHJldHVybiBlcnJfc3RhdHVzX2FsbG9jX2ZhaWw7Ci0gICAgCi0gIC8qIHNldCBmaWVsZHMgKi8KLSAgbmV3LT5jaXBoZXJfdHlwZSA9IG5ld19jdDsKLSAgbmV3LT5pZCA9IGlkOwotICBuZXctPm5leHQgPSBjcnlwdG9fa2VybmVsLmNpcGhlcl90eXBlX2xpc3Q7Ci0KLSAgLyogc2V0IGhlYWQgb2YgbGlzdCB0byBuZXcgY2lwaGVyIHR5cGUgKi8KLSAgY3J5cHRvX2tlcm5lbC5jaXBoZXJfdHlwZV9saXN0ID0gbmV3OyAgICAKLQotICAvKiBsb2FkIGRlYnVnIG1vZHVsZSwgaWYgdGhlcmUgaXMgb25lIHByZXNlbnQgKi8KLSAgaWYgKG5ld19jdC0+ZGVidWcgIT0gTlVMTCkKLSAgICBjcnlwdG9fa2VybmVsX2xvYWRfZGVidWdfbW9kdWxlKG5ld19jdC0+ZGVidWcpOwotICAvKiB3ZSBjb3VsZCBjaGVjayBmb3IgZXJyb3JzIGhlcmUgKi8KLQotICByZXR1cm4gZXJyX3N0YXR1c19vazsKLX0KLQotZXJyX3N0YXR1c190Ci1jcnlwdG9fa2VybmVsX2xvYWRfYXV0aF90eXBlKGF1dGhfdHlwZV90ICpuZXdfYXQsIGF1dGhfdHlwZV9pZF90IGlkKSB7Ci0gIGtlcm5lbF9hdXRoX3R5cGVfdCAqYXR5cGUsICpuZXc7Ci0gIGVycl9zdGF0dXNfdCBzdGF0dXM7Ci0KLSAgLyogZGVmZW5zaXZlIGNvZGluZyAqLwotICBpZiAobmV3X2F0ID09IE5VTEwpCi0gICAgcmV0dXJuIGVycl9zdGF0dXNfYmFkX3BhcmFtOwotCi0gIC8qIGNoZWNrIGF1dGggdHlwZSBieSBydW5uaW5nIHNlbGYtdGVzdCAqLwotICBzdGF0dXMgPSBhdXRoX3R5cGVfc2VsZl90ZXN0KG5ld19hdCk7Ci0gIGlmIChzdGF0dXMpIHsKLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0KLSAgLyogd2FsayBkb3duIGxpc3QsIGNoZWNraW5nIGlmIHRoaXMgdHlwZSBpcyBpbiB0aGUgbGlzdCBhbHJlYWR5ICAqLwotICBhdHlwZSA9IGNyeXB0b19rZXJuZWwuYXV0aF90eXBlX2xpc3Q7Ci0gIHdoaWxlIChhdHlwZSAhPSBOVUxMKSB7Ci0gICAgaWYgKChuZXdfYXQgPT0gYXR5cGUtPmF1dGhfdHlwZSkgfHwgKGlkID09IGF0eXBlLT5pZCkpCi0gICAgICByZXR1cm4gZXJyX3N0YXR1c19iYWRfcGFyYW07ICAgIAotICAgIGF0eXBlID0gYXR5cGUtPm5leHQ7Ci0gIH0KLQotICAvKiBwdXQgbmV3X2F0IGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0ICovCi0gIC8qIGFsbG9jYXRlIG1lbW9yeSAqLwotICBuZXcgPSAoa2VybmVsX2F1dGhfdHlwZV90ICopY3J5cHRvX2FsbG9jKHNpemVvZihrZXJuZWxfYXV0aF90eXBlX3QpKTsKLSAgaWYgKG5ldyA9PSBOVUxMKQotICAgIHJldHVybiBlcnJfc3RhdHVzX2FsbG9jX2ZhaWw7Ci0gICAgCi0gIC8qIHNldCBmaWVsZHMgKi8KLSAgbmV3LT5hdXRoX3R5cGUgPSBuZXdfYXQ7Ci0gIG5ldy0+aWQgPSBpZDsKLSAgbmV3LT5uZXh0ID0gY3J5cHRvX2tlcm5lbC5hdXRoX3R5cGVfbGlzdDsKLQotICAvKiBzZXQgaGVhZCBvZiBsaXN0IHRvIG5ldyBhdXRoIHR5cGUgKi8KLSAgY3J5cHRvX2tlcm5lbC5hdXRoX3R5cGVfbGlzdCA9IG5ldzsgICAgCi0KLSAgLyogbG9hZCBkZWJ1ZyBtb2R1bGUsIGlmIHRoZXJlIGlzIG9uZSBwcmVzZW50ICovCi0gIGlmIChuZXdfYXQtPmRlYnVnICE9IE5VTEwpCi0gICAgY3J5cHRvX2tlcm5lbF9sb2FkX2RlYnVnX21vZHVsZShuZXdfYXQtPmRlYnVnKTsKLSAgLyogd2UgY291bGQgY2hlY2sgZm9yIGVycm9ycyBoZXJlICovCi0KLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7Ci0KLX0KLQotCi1jaXBoZXJfdHlwZV90ICoKLWNyeXB0b19rZXJuZWxfZ2V0X2NpcGhlcl90eXBlKGNpcGhlcl90eXBlX2lkX3QgaWQpIHsKLSAga2VybmVsX2NpcGhlcl90eXBlX3QgKmN0eXBlOwotICAKLSAgLyogd2FsayBkb3duIGxpc3QsIGxvb2tpbmcgZm9yIGlkICAqLwotICBjdHlwZSA9IGNyeXB0b19rZXJuZWwuY2lwaGVyX3R5cGVfbGlzdDsKLSAgd2hpbGUgKGN0eXBlICE9IE5VTEwpIHsKLSAgICBpZiAoaWQgPT0gY3R5cGUtPmlkKQotICAgICAgcmV0dXJuIGN0eXBlLT5jaXBoZXJfdHlwZTsgCi0gICAgY3R5cGUgPSBjdHlwZS0+bmV4dDsKLSAgfSAKLQotICAvKiBoYXZlbid0IGZvdW5kIHRoZSByaWdodCBvbmUsIGluZGljYXRlIGZhaWx1cmUgYnkgcmV0dXJuaW5nIE5VTEwgKi8KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLQotZXJyX3N0YXR1c190Ci1jcnlwdG9fa2VybmVsX2FsbG9jX2NpcGhlcihjaXBoZXJfdHlwZV9pZF90IGlkLCAKLQkJCSAgICAgIGNpcGhlcl9wb2ludGVyX3QgKmNwLCAKLQkJCSAgICAgIGludCBrZXlfbGVuKSB7Ci0gIGNpcGhlcl90eXBlX3QgKmN0OwotCi0gIC8qIAotICAgKiBpZiB0aGUgY3J5cHRvX2tlcm5lbCBpcyBub3QgeWV0IGluaXRpYWxpemVkLCB3ZSByZWZ1c2UgdG8gYWxsb2NhdGUKLSAgICogYW55IGNpcGhlcnMgLSB0aGlzIGlzIGEgYml0IGV4dHJhLXBhcmFub2lkCi0gICAqLwotICBpZiAoY3J5cHRvX2tlcm5lbC5zdGF0ZSAhPSBjcnlwdG9fa2VybmVsX3N0YXRlX3NlY3VyZSkKLSAgICByZXR1cm4gZXJyX3N0YXR1c19pbml0X2ZhaWw7Ci0KLSAgY3QgPSBjcnlwdG9fa2VybmVsX2dldF9jaXBoZXJfdHlwZShpZCk7Ci0gIGlmICghY3QpCi0gICAgcmV0dXJuIGVycl9zdGF0dXNfZmFpbDsKLSAgCi0gIHJldHVybiAoKGN0KS0+YWxsb2MoY3AsIGtleV9sZW4pKTsKLX0KLQotCi0KLWF1dGhfdHlwZV90ICoKLWNyeXB0b19rZXJuZWxfZ2V0X2F1dGhfdHlwZShhdXRoX3R5cGVfaWRfdCBpZCkgewotICBrZXJuZWxfYXV0aF90eXBlX3QgKmF0eXBlOwotICAKLSAgLyogd2FsayBkb3duIGxpc3QsIGxvb2tpbmcgZm9yIGlkICAqLwotICBhdHlwZSA9IGNyeXB0b19rZXJuZWwuYXV0aF90eXBlX2xpc3Q7Ci0gIHdoaWxlIChhdHlwZSAhPSBOVUxMKSB7Ci0gICAgaWYgKGlkID09IGF0eXBlLT5pZCkKLSAgICAgIHJldHVybiBhdHlwZS0+YXV0aF90eXBlOyAKLSAgICBhdHlwZSA9IGF0eXBlLT5uZXh0OwotICB9IAotCi0gIC8qIGhhdmVuJ3QgZm91bmQgdGhlIHJpZ2h0IG9uZSwgaW5kaWNhdGUgZmFpbHVyZSBieSByZXR1cm5pbmcgTlVMTCAqLwotICByZXR1cm4gTlVMTDsKLX0KLQotZXJyX3N0YXR1c190Ci1jcnlwdG9fa2VybmVsX2FsbG9jX2F1dGgoYXV0aF90eXBlX2lkX3QgaWQsIAotCQkJIGF1dGhfcG9pbnRlcl90ICphcCwgCi0JCQkgaW50IGtleV9sZW4sCi0JCQkgaW50IHRhZ19sZW4pIHsKLSAgYXV0aF90eXBlX3QgKmF0OwotCi0gIC8qIAotICAgKiBpZiB0aGUgY3J5cHRvX2tlcm5lbCBpcyBub3QgeWV0IGluaXRpYWxpemVkLCB3ZSByZWZ1c2UgdG8gYWxsb2NhdGUKLSAgICogYW55IGF1dGggZnVuY3Rpb25zIC0gdGhpcyBpcyBhIGJpdCBleHRyYS1wYXJhbm9pZAotICAgKi8KLSAgaWYgKGNyeXB0b19rZXJuZWwuc3RhdGUgIT0gY3J5cHRvX2tlcm5lbF9zdGF0ZV9zZWN1cmUpCi0gICAgcmV0dXJuIGVycl9zdGF0dXNfaW5pdF9mYWlsOwotCi0gIGF0ID0gY3J5cHRvX2tlcm5lbF9nZXRfYXV0aF90eXBlKGlkKTsKLSAgaWYgKCFhdCkKLSAgICByZXR1cm4gZXJyX3N0YXR1c19mYWlsOwotICAKLSAgcmV0dXJuICgoYXQpLT5hbGxvYyhhcCwga2V5X2xlbiwgdGFnX2xlbikpOwotfQotCi0jaW5jbHVkZSA8c3RyaW5nLmg+ICAgLyogZm9yIHN0cm5jbXAoKSAqLwotCi1lcnJfc3RhdHVzX3QKLWNyeXB0b19rZXJuZWxfbG9hZF9kZWJ1Z19tb2R1bGUoZGVidWdfbW9kdWxlX3QgKm5ld19kbSkgewotICBrZXJuZWxfZGVidWdfbW9kdWxlX3QgKmtkbSwgKm5ldzsKLQotICAvKiBkZWZlbnNpdmUgY29kaW5nICovCi0gIGlmIChuZXdfZG0gPT0gTlVMTCkKLSAgICByZXR1cm4gZXJyX3N0YXR1c19iYWRfcGFyYW07Ci0KLSAgLyogd2FsayBkb3duIGxpc3QsIGNoZWNraW5nIGlmIHRoaXMgdHlwZSBpcyBpbiB0aGUgbGlzdCBhbHJlYWR5ICAqLwotICBrZG0gPSBjcnlwdG9fa2VybmVsLmRlYnVnX21vZHVsZV9saXN0OwotICB3aGlsZSAoa2RtICE9IE5VTEwpIHsKLSAgICBpZiAoc3RybmNtcChuZXdfZG0tPm5hbWUsIGtkbS0+bW9kLT5uYW1lLCA2NCkgPT0gMCkKLSAgICAgIHJldHVybiBlcnJfc3RhdHVzX2JhZF9wYXJhbTsgICAgCi0gICAga2RtID0ga2RtLT5uZXh0OwotICB9Ci0KLSAgLyogcHV0IG5ld19kbSBhdCB0aGUgaGVhZCBvZiB0aGUgbGlzdCAqLwotICAvKiBhbGxvY2F0ZSBtZW1vcnkgKi8KLSAgbmV3ID0gKGtlcm5lbF9kZWJ1Z19tb2R1bGVfdCAqKWNyeXB0b19hbGxvYyhzaXplb2Yoa2VybmVsX2RlYnVnX21vZHVsZV90KSk7Ci0gIGlmIChuZXcgPT0gTlVMTCkKLSAgICByZXR1cm4gZXJyX3N0YXR1c19hbGxvY19mYWlsOwotICAgIAotICAvKiBzZXQgZmllbGRzICovCi0gIG5ldy0+bW9kID0gbmV3X2RtOwotICBuZXctPm5leHQgPSBjcnlwdG9fa2VybmVsLmRlYnVnX21vZHVsZV9saXN0OwotCi0gIC8qIHNldCBoZWFkIG9mIGxpc3QgdG8gbmV3IGNpcGhlciB0eXBlICovCi0gIGNyeXB0b19rZXJuZWwuZGVidWdfbW9kdWxlX2xpc3QgPSBuZXc7ICAgIAotCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOwotfQotCi1lcnJfc3RhdHVzX3QKLWNyeXB0b19rZXJuZWxfc2V0X2RlYnVnX21vZHVsZShjaGFyICpuYW1lLCBpbnQgb24pIHsKLSAga2VybmVsX2RlYnVnX21vZHVsZV90ICprZG07Ci0gIAotICAvKiB3YWxrIGRvd24gbGlzdCwgY2hlY2tpbmcgaWYgdGhpcyB0eXBlIGlzIGluIHRoZSBsaXN0IGFscmVhZHkgICovCi0gIGtkbSA9IGNyeXB0b19rZXJuZWwuZGVidWdfbW9kdWxlX2xpc3Q7Ci0gIHdoaWxlIChrZG0gIT0gTlVMTCkgewotICAgIGlmIChzdHJuY21wKG5hbWUsIGtkbS0+bW9kLT5uYW1lLCA2NCkgPT0gMCkgewotICAgICAga2RtLT5tb2QtPm9uID0gb247Ci0gICAgICByZXR1cm4gZXJyX3N0YXR1c19vazsKKyAgICBzdGF0dXMgPSBzcnRwX2NyeXB0b19rZXJuZWxfbG9hZF9kZWJ1Z19tb2R1bGUoJnNydHBfbW9kX2F1dGgpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9Ci0gICAga2RtID0ga2RtLT5uZXh0OwotICB9CisgICAgc3RhdHVzID0gc3J0cF9jcnlwdG9fa2VybmVsX2xvYWRfZGVidWdfbW9kdWxlKCZzcnRwX21vZF9jaXBoZXIpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgc3RhdHVzID0gc3J0cF9jcnlwdG9fa2VybmVsX2xvYWRfZGVidWdfbW9kdWxlKCZzcnRwX21vZF9zdGF0KTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorICAgIHN0YXR1cyA9IHNydHBfY3J5cHRvX2tlcm5lbF9sb2FkX2RlYnVnX21vZHVsZSgmc3J0cF9tb2RfYWxsb2MpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CiAKLSAgcmV0dXJuIGVycl9zdGF0dXNfZmFpbDsKKyAgICAvKiBsb2FkIGNpcGhlciB0eXBlcyAqLworICAgIHN0YXR1cyA9IHNydHBfY3J5cHRvX2tlcm5lbF9sb2FkX2NpcGhlcl90eXBlKCZzcnRwX251bGxfY2lwaGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSVFBfTlVMTF9DSVBIRVIpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgc3RhdHVzID0gc3J0cF9jcnlwdG9fa2VybmVsX2xvYWRfY2lwaGVyX3R5cGUoJnNydHBfYWVzX2ljbV8xMjgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JUUF9BRVNfSUNNXzEyOCk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKyAgICBzdGF0dXMgPSBzcnRwX2NyeXB0b19rZXJuZWxfbG9hZF9jaXBoZXJfdHlwZSgmc3J0cF9hZXNfaWNtXzI1NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlRQX0FFU19JQ01fMjU2KTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorICAgIHN0YXR1cyA9IHNydHBfY3J5cHRvX2tlcm5lbF9sb2FkX2RlYnVnX21vZHVsZSgmc3J0cF9tb2RfYWVzX2ljbSk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKyNpZmRlZiBHQ00KKyAgICBzdGF0dXMgPSBzcnRwX2NyeXB0b19rZXJuZWxfbG9hZF9jaXBoZXJfdHlwZSgmc3J0cF9hZXNfaWNtXzE5MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlRQX0FFU19JQ01fMTkyKTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorICAgIHN0YXR1cyA9IHNydHBfY3J5cHRvX2tlcm5lbF9sb2FkX2NpcGhlcl90eXBlKCZzcnRwX2Flc19nY21fMTI4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSVFBfQUVTX0dDTV8xMjgpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgc3RhdHVzID0gc3J0cF9jcnlwdG9fa2VybmVsX2xvYWRfY2lwaGVyX3R5cGUoJnNydHBfYWVzX2djbV8yNTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JUUF9BRVNfR0NNXzI1Nik7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKyAgICBzdGF0dXMgPSBzcnRwX2NyeXB0b19rZXJuZWxfbG9hZF9kZWJ1Z19tb2R1bGUoJnNydHBfbW9kX2Flc19nY20pOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisjZW5kaWYKKworICAgIC8qIGxvYWQgYXV0aCBmdW5jIHR5cGVzICovCisgICAgc3RhdHVzID0gc3J0cF9jcnlwdG9fa2VybmVsX2xvYWRfYXV0aF90eXBlKCZzcnRwX251bGxfYXV0aCwgU1JUUF9OVUxMX0FVVEgpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgc3RhdHVzID0gc3J0cF9jcnlwdG9fa2VybmVsX2xvYWRfYXV0aF90eXBlKCZzcnRwX2htYWMsIFNSVFBfSE1BQ19TSEExKTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorICAgIHN0YXR1cyA9IHNydHBfY3J5cHRvX2tlcm5lbF9sb2FkX2RlYnVnX21vZHVsZSgmc3J0cF9tb2RfaG1hYyk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8qIGNoYW5nZSBzdGF0ZSB0byBzZWN1cmUgKi8KKyAgICBjcnlwdG9fa2VybmVsLnN0YXRlID0gc3J0cF9jcnlwdG9fa2VybmVsX3N0YXRlX3NlY3VyZTsKKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7CiB9CiAKLWVycl9zdGF0dXNfdAotY3J5cHRvX2dldF9yYW5kb20odW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKSB7Ci0gIGlmIChjcnlwdG9fa2VybmVsLnN0YXRlID09IGNyeXB0b19rZXJuZWxfc3RhdGVfc2VjdXJlKQotICAgIHJldHVybiBjdHJfcHJuZ19nZXRfb2N0ZXRfc3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKTsKLSAgZWxzZQotICAgIHJldHVybiBlcnJfc3RhdHVzX2ZhaWw7CitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2NyeXB0b19rZXJuZWxfc3RhdHVzKCkKK3sKKyAgICBzcnRwX2Vycl9zdGF0dXNfdCBzdGF0dXM7CisgICAgc3J0cF9rZXJuZWxfY2lwaGVyX3R5cGVfdCAqY3R5cGUgPSBjcnlwdG9fa2VybmVsLmNpcGhlcl90eXBlX2xpc3Q7CisgICAgc3J0cF9rZXJuZWxfYXV0aF90eXBlX3QgKmF0eXBlID0gY3J5cHRvX2tlcm5lbC5hdXRoX3R5cGVfbGlzdDsKKworICAgIC8qIGZvciBlYWNoIGNpcGhlciB0eXBlLCBkZXNjcmliZSBhbmQgdGVzdCAqLworICAgIHdoaWxlIChjdHlwZSAhPSBOVUxMKSB7CisgICAgICAgIHNydHBfZXJyX3JlcG9ydChzcnRwX2Vycl9sZXZlbF9pbmZvLCAiY2lwaGVyOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlLT5jaXBoZXJfdHlwZS0+ZGVzY3JpcHRpb24pOworICAgICAgICBzcnRwX2Vycl9yZXBvcnQoc3J0cF9lcnJfbGV2ZWxfaW5mbywgIiAgc2VsZi10ZXN0OiAiKTsKKyAgICAgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfdHlwZV9zZWxmX3Rlc3QoY3R5cGUtPmNpcGhlcl90eXBlKTsKKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgc3J0cF9lcnJfcmVwb3J0KHNydHBfZXJyX2xldmVsX2Vycm9yLCAiZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMpOworICAgICAgICAgICAgZXhpdChzdGF0dXMpOworICAgICAgICB9CisgICAgICAgIHNydHBfZXJyX3JlcG9ydChzcnRwX2Vycl9sZXZlbF9pbmZvLCAicGFzc2VkXG4iKTsKKyAgICAgICAgY3R5cGUgPSBjdHlwZS0+bmV4dDsKKyAgICB9CisKKyAgICAvKiBmb3IgZWFjaCBhdXRoIHR5cGUsIGRlc2NyaWJlIGFuZCB0ZXN0ICovCisgICAgd2hpbGUgKGF0eXBlICE9IE5VTEwpIHsKKyAgICAgICAgc3J0cF9lcnJfcmVwb3J0KHNydHBfZXJyX2xldmVsX2luZm8sICJhdXRoIGZ1bmM6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgYXR5cGUtPmF1dGhfdHlwZS0+ZGVzY3JpcHRpb24pOworICAgICAgICBzcnRwX2Vycl9yZXBvcnQoc3J0cF9lcnJfbGV2ZWxfaW5mbywgIiAgc2VsZi10ZXN0OiAiKTsKKyAgICAgICAgc3RhdHVzID0gc3J0cF9hdXRoX3R5cGVfc2VsZl90ZXN0KGF0eXBlLT5hdXRoX3R5cGUpOworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBzcnRwX2Vycl9yZXBvcnQoc3J0cF9lcnJfbGV2ZWxfZXJyb3IsICJmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyk7CisgICAgICAgICAgICBleGl0KHN0YXR1cyk7CisgICAgICAgIH0KKyAgICAgICAgc3J0cF9lcnJfcmVwb3J0KHNydHBfZXJyX2xldmVsX2luZm8sICJwYXNzZWRcbiIpOworICAgICAgICBhdHlwZSA9IGF0eXBlLT5uZXh0OworICAgIH0KKworICAgIHNydHBfY3J5cHRvX2tlcm5lbF9saXN0X2RlYnVnX21vZHVsZXMoKTsKKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7Cit9CisKK3NydHBfZXJyX3N0YXR1c190IHNydHBfY3J5cHRvX2tlcm5lbF9saXN0X2RlYnVnX21vZHVsZXMoKQoreworICAgIHNydHBfa2VybmVsX2RlYnVnX21vZHVsZV90ICpkbSA9IGNyeXB0b19rZXJuZWwuZGVidWdfbW9kdWxlX2xpc3Q7CisKKyAgICAvKiBkZXNjcmliZSBlYWNoIGRlYnVnIG1vZHVsZSAqLworICAgIHNydHBfZXJyX3JlcG9ydChzcnRwX2Vycl9sZXZlbF9pbmZvLCAiZGVidWcgbW9kdWxlcyBsb2FkZWQ6XG4iKTsKKyAgICB3aGlsZSAoZG0gIT0gTlVMTCkgeworICAgICAgICBzcnRwX2Vycl9yZXBvcnQoc3J0cF9lcnJfbGV2ZWxfaW5mbywgIiAgJXMgIiwgZG0tPm1vZC0+bmFtZSk7CisgICAgICAgIGlmIChkbS0+bW9kLT5vbikgeworICAgICAgICAgICAgc3J0cF9lcnJfcmVwb3J0KHNydHBfZXJyX2xldmVsX2luZm8sICIob24pXG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNydHBfZXJyX3JlcG9ydChzcnRwX2Vycl9sZXZlbF9pbmZvLCAiKG9mZilcbiIpOworICAgICAgICB9CisgICAgICAgIGRtID0gZG0tPm5leHQ7CisgICAgfQorCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9jcnlwdG9fa2VybmVsX3NodXRkb3duKCkKK3sKKyAgICAvKgorICAgICAqIGZyZWUgZHluYW1pYyBtZW1vcnkgdXNlZCBpbiBjcnlwdG9fa2VybmVsIGF0IHByZXNlbnQKKyAgICAgKi8KKworICAgIC8qIHdhbGsgZG93biBjaXBoZXIgdHlwZSBsaXN0LCBmcmVlaW5nIG1lbW9yeSAqLworICAgIHdoaWxlIChjcnlwdG9fa2VybmVsLmNpcGhlcl90eXBlX2xpc3QgIT0gTlVMTCkgeworICAgICAgICBzcnRwX2tlcm5lbF9jaXBoZXJfdHlwZV90ICpjdHlwZSA9IGNyeXB0b19rZXJuZWwuY2lwaGVyX3R5cGVfbGlzdDsKKyAgICAgICAgY3J5cHRvX2tlcm5lbC5jaXBoZXJfdHlwZV9saXN0ID0gY3R5cGUtPm5leHQ7CisgICAgICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX2NyeXB0b19rZXJuZWwsICJmcmVlaW5nIG1lbW9yeSBmb3IgY2lwaGVyICVzIiwKKyAgICAgICAgICAgICAgICAgICAgY3R5cGUtPmNpcGhlcl90eXBlLT5kZXNjcmlwdGlvbik7CisgICAgICAgIHNydHBfY3J5cHRvX2ZyZWUoY3R5cGUpOworICAgIH0KKworICAgIC8qIHdhbGsgZG93biBhdXRoZXRpY2F0aW9uIG1vZHVsZSBsaXN0LCBmcmVlaW5nIG1lbW9yeSAqLworICAgIHdoaWxlIChjcnlwdG9fa2VybmVsLmF1dGhfdHlwZV9saXN0ICE9IE5VTEwpIHsKKyAgICAgICAgc3J0cF9rZXJuZWxfYXV0aF90eXBlX3QgKmF0eXBlID0gY3J5cHRvX2tlcm5lbC5hdXRoX3R5cGVfbGlzdDsKKyAgICAgICAgY3J5cHRvX2tlcm5lbC5hdXRoX3R5cGVfbGlzdCA9IGF0eXBlLT5uZXh0OworICAgICAgICBkZWJ1Z19wcmludChzcnRwX21vZF9jcnlwdG9fa2VybmVsLAorICAgICAgICAgICAgICAgICAgICAiZnJlZWluZyBtZW1vcnkgZm9yIGF1dGhlbnRpY2F0aW9uICVzIiwKKyAgICAgICAgICAgICAgICAgICAgYXR5cGUtPmF1dGhfdHlwZS0+ZGVzY3JpcHRpb24pOworICAgICAgICBzcnRwX2NyeXB0b19mcmVlKGF0eXBlKTsKKyAgICB9CisKKyAgICAvKiB3YWxrIGRvd24gZGVidWcgbW9kdWxlIGxpc3QsIGZyZWVpbmcgbWVtb3J5ICovCisgICAgd2hpbGUgKGNyeXB0b19rZXJuZWwuZGVidWdfbW9kdWxlX2xpc3QgIT0gTlVMTCkgeworICAgICAgICBzcnRwX2tlcm5lbF9kZWJ1Z19tb2R1bGVfdCAqa2RtID0gY3J5cHRvX2tlcm5lbC5kZWJ1Z19tb2R1bGVfbGlzdDsKKyAgICAgICAgY3J5cHRvX2tlcm5lbC5kZWJ1Z19tb2R1bGVfbGlzdCA9IGtkbS0+bmV4dDsKKyAgICAgICAgZGVidWdfcHJpbnQoc3J0cF9tb2RfY3J5cHRvX2tlcm5lbCwKKyAgICAgICAgICAgICAgICAgICAgImZyZWVpbmcgbWVtb3J5IGZvciBkZWJ1ZyBtb2R1bGUgJXMiLCBrZG0tPm1vZC0+bmFtZSk7CisgICAgICAgIHNydHBfY3J5cHRvX2ZyZWUoa2RtKTsKKyAgICB9CisKKyAgICAvKiByZXR1cm4gdG8gaW5zZWN1cmUgc3RhdGUgKi8KKyAgICBjcnlwdG9fa2VybmVsLnN0YXRlID0gc3J0cF9jcnlwdG9fa2VybmVsX3N0YXRlX2luc2VjdXJlOworCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKworc3RhdGljIGlubGluZSBzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2NyeXB0b19rZXJuZWxfZG9fbG9hZF9jaXBoZXJfdHlwZSgKKyAgICBjb25zdCBzcnRwX2NpcGhlcl90eXBlX3QgKm5ld19jdCwKKyAgICBzcnRwX2NpcGhlcl90eXBlX2lkX3QgaWQsCisgICAgaW50IHJlcGxhY2UpCit7CisgICAgc3J0cF9rZXJuZWxfY2lwaGVyX3R5cGVfdCAqY3R5cGUsICpuZXdfY3R5cGU7CisgICAgc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdHVzOworCisgICAgLyogZGVmZW5zaXZlIGNvZGluZyAqLworICAgIGlmIChuZXdfY3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbTsKKyAgICB9CisKKyAgICBpZiAobmV3X2N0LT5pZCAhPSBpZCkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbTsKKyAgICB9CisKKyAgICAvKiBjaGVjayBjaXBoZXIgdHlwZSBieSBydW5uaW5nIHNlbGYtdGVzdCAqLworICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX3R5cGVfc2VsZl90ZXN0KG5ld19jdCk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8qIHdhbGsgZG93biBsaXN0LCBjaGVja2luZyBpZiB0aGlzIHR5cGUgaXMgaW4gdGhlIGxpc3QgYWxyZWFkeSAgKi8KKyAgICBjdHlwZSA9IGNyeXB0b19rZXJuZWwuY2lwaGVyX3R5cGVfbGlzdDsKKyAgICB3aGlsZSAoY3R5cGUgIT0gTlVMTCkgeworICAgICAgICBpZiAoaWQgPT0gY3R5cGUtPmlkKSB7CisgICAgICAgICAgICBpZiAoIXJlcGxhY2UpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICAgICAgc3J0cF9jaXBoZXJfdHlwZV90ZXN0KG5ld19jdCwgY3R5cGUtPmNpcGhlcl90eXBlLT50ZXN0X2RhdGEpOworICAgICAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBuZXdfY3R5cGUgPSBjdHlwZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgaWYgKG5ld19jdCA9PSBjdHlwZS0+Y2lwaGVyX3R5cGUpIHsKKyAgICAgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYmFkX3BhcmFtOworICAgICAgICB9CisgICAgICAgIGN0eXBlID0gY3R5cGUtPm5leHQ7CisgICAgfQorCisgICAgLyogaWYgbm90IGZvdW5kLCBwdXQgbmV3X2N0IGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0ICovCisgICAgaWYgKGN0eXBlID09IE5VTEwpIHsKKyAgICAgICAgLyogYWxsb2NhdGUgbWVtb3J5ICovCisgICAgICAgIG5ld19jdHlwZSA9IChzcnRwX2tlcm5lbF9jaXBoZXJfdHlwZV90ICopc3J0cF9jcnlwdG9fYWxsb2MoCisgICAgICAgICAgICBzaXplb2Yoc3J0cF9rZXJuZWxfY2lwaGVyX3R5cGVfdCkpOworICAgICAgICBpZiAobmV3X2N0eXBlID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYWxsb2NfZmFpbDsKKyAgICAgICAgfQorICAgICAgICBuZXdfY3R5cGUtPm5leHQgPSBjcnlwdG9fa2VybmVsLmNpcGhlcl90eXBlX2xpc3Q7CisKKyAgICAgICAgLyogc2V0IGhlYWQgb2YgbGlzdCB0byBuZXcgY2lwaGVyIHR5cGUgKi8KKyAgICAgICAgY3J5cHRvX2tlcm5lbC5jaXBoZXJfdHlwZV9saXN0ID0gbmV3X2N0eXBlOworICAgIH0KKworICAgIC8qIHNldCBmaWVsZHMgKi8KKyAgICBuZXdfY3R5cGUtPmNpcGhlcl90eXBlID0gbmV3X2N0OworICAgIG5ld19jdHlwZS0+aWQgPSBpZDsKKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7Cit9CisKK3NydHBfZXJyX3N0YXR1c190IHNydHBfY3J5cHRvX2tlcm5lbF9sb2FkX2NpcGhlcl90eXBlKAorICAgIGNvbnN0IHNydHBfY2lwaGVyX3R5cGVfdCAqbmV3X2N0LAorICAgIHNydHBfY2lwaGVyX3R5cGVfaWRfdCBpZCkKK3sKKyAgICByZXR1cm4gc3J0cF9jcnlwdG9fa2VybmVsX2RvX2xvYWRfY2lwaGVyX3R5cGUobmV3X2N0LCBpZCwgMCk7Cit9CisKK3NydHBfZXJyX3N0YXR1c190IHNydHBfcmVwbGFjZV9jaXBoZXJfdHlwZShjb25zdCBzcnRwX2NpcGhlcl90eXBlX3QgKm5ld19jdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX2NpcGhlcl90eXBlX2lkX3QgaWQpCit7CisgICAgcmV0dXJuIHNydHBfY3J5cHRvX2tlcm5lbF9kb19sb2FkX2NpcGhlcl90eXBlKG5ld19jdCwgaWQsIDEpOworfQorCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2NyeXB0b19rZXJuZWxfZG9fbG9hZF9hdXRoX3R5cGUoCisgICAgY29uc3Qgc3J0cF9hdXRoX3R5cGVfdCAqbmV3X2F0LAorICAgIHNydHBfYXV0aF90eXBlX2lkX3QgaWQsCisgICAgaW50IHJlcGxhY2UpCit7CisgICAgc3J0cF9rZXJuZWxfYXV0aF90eXBlX3QgKmF0eXBlLCAqbmV3X2F0eXBlOworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKKworICAgIC8qIGRlZmVuc2l2ZSBjb2RpbmcgKi8KKyAgICBpZiAobmV3X2F0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisgICAgfQorCisgICAgaWYgKG5ld19hdC0+aWQgIT0gaWQpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisgICAgfQorCisgICAgLyogY2hlY2sgYXV0aCB0eXBlIGJ5IHJ1bm5pbmcgc2VsZi10ZXN0ICovCisgICAgc3RhdHVzID0gc3J0cF9hdXRoX3R5cGVfc2VsZl90ZXN0KG5ld19hdCk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8qIHdhbGsgZG93biBsaXN0LCBjaGVja2luZyBpZiB0aGlzIHR5cGUgaXMgaW4gdGhlIGxpc3QgYWxyZWFkeSAgKi8KKyAgICBhdHlwZSA9IGNyeXB0b19rZXJuZWwuYXV0aF90eXBlX2xpc3Q7CisgICAgd2hpbGUgKGF0eXBlICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKGlkID09IGF0eXBlLT5pZCkgeworICAgICAgICAgICAgaWYgKCFyZXBsYWNlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdGF0dXMgPSBzcnRwX2F1dGhfdHlwZV90ZXN0KG5ld19hdCwgYXR5cGUtPmF1dGhfdHlwZS0+dGVzdF9kYXRhKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbmV3X2F0eXBlID0gYXR5cGU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIGlmIChuZXdfYXQgPT0gYXR5cGUtPmF1dGhfdHlwZSkgeworICAgICAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisgICAgICAgIH0KKyAgICAgICAgYXR5cGUgPSBhdHlwZS0+bmV4dDsKKyAgICB9CisKKyAgICAvKiBpZiBub3QgZm91bmQsIHB1dCBuZXdfYXQgYXQgdGhlIGhlYWQgb2YgdGhlIGxpc3QgKi8KKyAgICBpZiAoYXR5cGUgPT0gTlVMTCkgeworICAgICAgICAvKiBhbGxvY2F0ZSBtZW1vcnkgKi8KKyAgICAgICAgbmV3X2F0eXBlID0gKHNydHBfa2VybmVsX2F1dGhfdHlwZV90ICopc3J0cF9jcnlwdG9fYWxsb2MoCisgICAgICAgICAgICBzaXplb2Yoc3J0cF9rZXJuZWxfYXV0aF90eXBlX3QpKTsKKyAgICAgICAgaWYgKG5ld19hdHlwZSA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2FsbG9jX2ZhaWw7CisgICAgICAgIH0KKworICAgICAgICBuZXdfYXR5cGUtPm5leHQgPSBjcnlwdG9fa2VybmVsLmF1dGhfdHlwZV9saXN0OworICAgICAgICAvKiBzZXQgaGVhZCBvZiBsaXN0IHRvIG5ldyBhdXRoIHR5cGUgKi8KKyAgICAgICAgY3J5cHRvX2tlcm5lbC5hdXRoX3R5cGVfbGlzdCA9IG5ld19hdHlwZTsKKyAgICB9CisKKyAgICAvKiBzZXQgZmllbGRzICovCisgICAgbmV3X2F0eXBlLT5hdXRoX3R5cGUgPSBuZXdfYXQ7CisgICAgbmV3X2F0eXBlLT5pZCA9IGlkOworCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9jcnlwdG9fa2VybmVsX2xvYWRfYXV0aF90eXBlKAorICAgIGNvbnN0IHNydHBfYXV0aF90eXBlX3QgKm5ld19hdCwKKyAgICBzcnRwX2F1dGhfdHlwZV9pZF90IGlkKQoreworICAgIHJldHVybiBzcnRwX2NyeXB0b19rZXJuZWxfZG9fbG9hZF9hdXRoX3R5cGUobmV3X2F0LCBpZCwgMCk7Cit9CisKK3NydHBfZXJyX3N0YXR1c190IHNydHBfcmVwbGFjZV9hdXRoX3R5cGUoY29uc3Qgc3J0cF9hdXRoX3R5cGVfdCAqbmV3X2F0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX2F1dGhfdHlwZV9pZF90IGlkKQoreworICAgIHJldHVybiBzcnRwX2NyeXB0b19rZXJuZWxfZG9fbG9hZF9hdXRoX3R5cGUobmV3X2F0LCBpZCwgMSk7Cit9CisKK2NvbnN0IHNydHBfY2lwaGVyX3R5cGVfdCAqc3J0cF9jcnlwdG9fa2VybmVsX2dldF9jaXBoZXJfdHlwZSgKKyAgICBzcnRwX2NpcGhlcl90eXBlX2lkX3QgaWQpCit7CisgICAgc3J0cF9rZXJuZWxfY2lwaGVyX3R5cGVfdCAqY3R5cGU7CisKKyAgICAvKiB3YWxrIGRvd24gbGlzdCwgbG9va2luZyBmb3IgaWQgICovCisgICAgY3R5cGUgPSBjcnlwdG9fa2VybmVsLmNpcGhlcl90eXBlX2xpc3Q7CisgICAgd2hpbGUgKGN0eXBlICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKGlkID09IGN0eXBlLT5pZCkgeworICAgICAgICAgICAgcmV0dXJuIGN0eXBlLT5jaXBoZXJfdHlwZTsKKyAgICAgICAgfQorICAgICAgICBjdHlwZSA9IGN0eXBlLT5uZXh0OworICAgIH0KKworICAgIC8qIGhhdmVuJ3QgZm91bmQgdGhlIHJpZ2h0IG9uZSwgaW5kaWNhdGUgZmFpbHVyZSBieSByZXR1cm5pbmcgTlVMTCAqLworICAgIHJldHVybiBOVUxMOworfQorCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2NyeXB0b19rZXJuZWxfYWxsb2NfY2lwaGVyKHNydHBfY2lwaGVyX3R5cGVfaWRfdCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9jaXBoZXJfcG9pbnRlcl90ICpjcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtleV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YWdfbGVuKQoreworICAgIGNvbnN0IHNydHBfY2lwaGVyX3R5cGVfdCAqY3Q7CisKKyAgICAvKgorICAgICAqIGlmIHRoZSBjcnlwdG9fa2VybmVsIGlzIG5vdCB5ZXQgaW5pdGlhbGl6ZWQsIHdlIHJlZnVzZSB0byBhbGxvY2F0ZQorICAgICAqIGFueSBjaXBoZXJzIC0gdGhpcyBpcyBhIGJpdCBleHRyYS1wYXJhbm9pZAorICAgICAqLworICAgIGlmIChjcnlwdG9fa2VybmVsLnN0YXRlICE9IHNydHBfY3J5cHRvX2tlcm5lbF9zdGF0ZV9zZWN1cmUpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19pbml0X2ZhaWw7CisgICAgfQorCisgICAgY3QgPSBzcnRwX2NyeXB0b19rZXJuZWxfZ2V0X2NpcGhlcl90eXBlKGlkKTsKKyAgICBpZiAoIWN0KSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfZmFpbDsKKyAgICB9CisKKyAgICByZXR1cm4gKChjdCktPmFsbG9jKGNwLCBrZXlfbGVuLCB0YWdfbGVuKSk7Cit9CisKK2NvbnN0IHNydHBfYXV0aF90eXBlX3QgKnNydHBfY3J5cHRvX2tlcm5lbF9nZXRfYXV0aF90eXBlKHNydHBfYXV0aF90eXBlX2lkX3QgaWQpCit7CisgICAgc3J0cF9rZXJuZWxfYXV0aF90eXBlX3QgKmF0eXBlOworCisgICAgLyogd2FsayBkb3duIGxpc3QsIGxvb2tpbmcgZm9yIGlkICAqLworICAgIGF0eXBlID0gY3J5cHRvX2tlcm5lbC5hdXRoX3R5cGVfbGlzdDsKKyAgICB3aGlsZSAoYXR5cGUgIT0gTlVMTCkgeworICAgICAgICBpZiAoaWQgPT0gYXR5cGUtPmlkKSB7CisgICAgICAgICAgICByZXR1cm4gYXR5cGUtPmF1dGhfdHlwZTsKKyAgICAgICAgfQorICAgICAgICBhdHlwZSA9IGF0eXBlLT5uZXh0OworICAgIH0KKworICAgIC8qIGhhdmVuJ3QgZm91bmQgdGhlIHJpZ2h0IG9uZSwgaW5kaWNhdGUgZmFpbHVyZSBieSByZXR1cm5pbmcgTlVMTCAqLworICAgIHJldHVybiBOVUxMOworfQorCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2NyeXB0b19rZXJuZWxfYWxsb2NfYXV0aChzcnRwX2F1dGhfdHlwZV9pZF90IGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9hdXRoX3BvaW50ZXJfdCAqYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YWdfbGVuKQoreworICAgIGNvbnN0IHNydHBfYXV0aF90eXBlX3QgKmF0OworCisgICAgLyoKKyAgICAgKiBpZiB0aGUgY3J5cHRvX2tlcm5lbCBpcyBub3QgeWV0IGluaXRpYWxpemVkLCB3ZSByZWZ1c2UgdG8gYWxsb2NhdGUKKyAgICAgKiBhbnkgYXV0aCBmdW5jdGlvbnMgLSB0aGlzIGlzIGEgYml0IGV4dHJhLXBhcmFub2lkCisgICAgICovCisgICAgaWYgKGNyeXB0b19rZXJuZWwuc3RhdGUgIT0gc3J0cF9jcnlwdG9fa2VybmVsX3N0YXRlX3NlY3VyZSkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2luaXRfZmFpbDsKKyAgICB9CisKKyAgICBhdCA9IHNydHBfY3J5cHRvX2tlcm5lbF9nZXRfYXV0aF90eXBlKGlkKTsKKyAgICBpZiAoIWF0KSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfZmFpbDsKKyAgICB9CisKKyAgICByZXR1cm4gKChhdCktPmFsbG9jKGFwLCBrZXlfbGVuLCB0YWdfbGVuKSk7Cit9CisKK3NydHBfZXJyX3N0YXR1c190IHNydHBfY3J5cHRvX2tlcm5lbF9sb2FkX2RlYnVnX21vZHVsZSgKKyAgICBzcnRwX2RlYnVnX21vZHVsZV90ICpuZXdfZG0pCit7CisgICAgc3J0cF9rZXJuZWxfZGVidWdfbW9kdWxlX3QgKmtkbSwgKm5ldzsKKworICAgIC8qIGRlZmVuc2l2ZSBjb2RpbmcgKi8KKyAgICBpZiAobmV3X2RtID09IE5VTEwgfHwgbmV3X2RtLT5uYW1lID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisgICAgfQorCisgICAgLyogd2FsayBkb3duIGxpc3QsIGNoZWNraW5nIGlmIHRoaXMgdHlwZSBpcyBpbiB0aGUgbGlzdCBhbHJlYWR5ICAqLworICAgIGtkbSA9IGNyeXB0b19rZXJuZWwuZGVidWdfbW9kdWxlX2xpc3Q7CisgICAgd2hpbGUgKGtkbSAhPSBOVUxMKSB7CisgICAgICAgIGlmIChzdHJuY21wKG5ld19kbS0+bmFtZSwga2RtLT5tb2QtPm5hbWUsIDY0KSA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbTsKKyAgICAgICAgfQorICAgICAgICBrZG0gPSBrZG0tPm5leHQ7CisgICAgfQorCisgICAgLyogcHV0IG5ld19kbSBhdCB0aGUgaGVhZCBvZiB0aGUgbGlzdCAqLworICAgIC8qIGFsbG9jYXRlIG1lbW9yeSAqLworICAgIG5ldyA9IChzcnRwX2tlcm5lbF9kZWJ1Z19tb2R1bGVfdCAqKXNydHBfY3J5cHRvX2FsbG9jKAorICAgICAgICBzaXplb2Yoc3J0cF9rZXJuZWxfZGVidWdfbW9kdWxlX3QpKTsKKyAgICBpZiAobmV3ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19hbGxvY19mYWlsOworICAgIH0KKworICAgIC8qIHNldCBmaWVsZHMgKi8KKyAgICBuZXctPm1vZCA9IG5ld19kbTsKKyAgICBuZXctPm5leHQgPSBjcnlwdG9fa2VybmVsLmRlYnVnX21vZHVsZV9saXN0OworCisgICAgLyogc2V0IGhlYWQgb2YgbGlzdCB0byBuZXcgY2lwaGVyIHR5cGUgKi8KKyAgICBjcnlwdG9fa2VybmVsLmRlYnVnX21vZHVsZV9saXN0ID0gbmV3OworCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9jcnlwdG9fa2VybmVsX3NldF9kZWJ1Z19tb2R1bGUoY29uc3QgY2hhciAqbmFtZSwgaW50IG9uKQoreworICAgIHNydHBfa2VybmVsX2RlYnVnX21vZHVsZV90ICprZG07CisKKyAgICAvKiB3YWxrIGRvd24gbGlzdCwgY2hlY2tpbmcgaWYgdGhpcyB0eXBlIGlzIGluIHRoZSBsaXN0IGFscmVhZHkgICovCisgICAga2RtID0gY3J5cHRvX2tlcm5lbC5kZWJ1Z19tb2R1bGVfbGlzdDsKKyAgICB3aGlsZSAoa2RtICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKHN0cm5jbXAobmFtZSwga2RtLT5tb2QtPm5hbWUsIDY0KSA9PSAwKSB7CisgICAgICAgICAgICBrZG0tPm1vZC0+b24gPSBvbjsKKyAgICAgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7CisgICAgICAgIH0KKyAgICAgICAga2RtID0ga2RtLT5uZXh0OworICAgIH0KKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfZmFpbDsKIH0KZGlmZiAtLWdpdCBhL2NyeXB0by9rZXJuZWwvZXJyLmMgYi9jcnlwdG8va2VybmVsL2Vyci5jCmluZGV4IDk3MTA5NTUuLjlkYjViZmIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9rZXJuZWwvZXJyLmMKKysrIGIvY3J5cHRvL2tlcm5lbC9lcnIuYwpAQCAtNywyNiArNywyNiBAQAogICogQ2lzY28gU3lzdGVtcywgSW5jLgogICovCiAvKgotICoJCi0gKiBDb3B5cmlnaHQoYykgMjAwMS0yMDA1IENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwMS0yMDE3IENpc2NvIFN5c3RlbXMsIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogCisgKgogICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCiAgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCiAgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAogICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKKyAqCiAgKiAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAgKiAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAorICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwpAQCAtNDIsNjMgKzQyLDY3IEBACiAgKgogICovCiAKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgImVyci5oIgorI2luY2x1ZGUgImRhdGF0eXBlcy5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgogCisvKiBzcnRwX2Vycl9maWxlIGlzIHRoZSBGSUxFIHRvIHdoaWNoIGVycm9ycyBhcmUgcmVwb3J0ZWQgKi8KIAotLyogIGVycl9sZXZlbCByZWZsZWN0cyB0aGUgbGV2ZWwgb2YgZXJyb3JzIHRoYXQgYXJlIHJlcG9ydGVkICAqLworc3RhdGljIEZJTEUgKnNydHBfZXJyX2ZpbGUgPSBOVUxMOwogCi1lcnJfcmVwb3J0aW5nX2xldmVsX3QgZXJyX2xldmVsID0gZXJyX2xldmVsX25vbmU7Ci0KLS8qIGVycl9maWxlIGlzIHRoZSBGSUxFIHRvIHdoaWNoIGVycm9ycyBhcmUgcmVwb3J0ZWQgKi8KLQotRklMRSAqZXJyX2ZpbGUgPSBOVUxMOwotCi1lcnJfc3RhdHVzX3QKLWVycl9yZXBvcnRpbmdfaW5pdChjaGFyICppZGVudCkgewotI2lmIChFUlJfUkVQT1JUSU5HX1NZU0xPRyA9PSAxKQotICBvcGVubG9nKGlkZW50LCBMT0dfUElELCBMT0dfQVVUSFBSSVYpOwotI2VuZGlmCi0gIAotICAvKgotICAgKiBCZWxpZXZlIGl0IG9yIG5vdCwgb3BlbmxvZyBkb2Vzbid0IHJldHVybiBhbiBlcnJvciBvbiBmYWlsdXJlLgotICAgKiBCdXQgdGhlbiwgbmVpdGhlciBkb2VzIHRoZSBzeXNsb2coKSBjYWxsLi4uCi0gICAqLwotCi0jaWYgRVJSX1JFUE9SVElOR19TVERPVVQKLSAgZXJyX2ZpbGUgPSBzdGRvdXQ7Ci0jZWxzZQotI2lmZGVmIEVSUl9SRVBPUlRJTkdfRklMRQotICAvKiBvcGVuIGZpbGUgZm9yIGVycm9yIHJlcG9ydGluZyAqLwotICBlcnJfZmlsZSA9IGZvcGVuKEVSUl9SRVBPUlRJTkdfRklMRSwgInciKTsKLSAgaWYgKGVycl9maWxlID09IE5VTEwpCi0gICAgcmV0dXJuIGVycl9zdGF0dXNfaW5pdF9mYWlsOwotI2VuZGlmCi0jZW5kaWYKLQotICByZXR1cm4gZXJyX3N0YXR1c19vazsKLX0KLQotdm9pZAotZXJyX3JlcG9ydChpbnQgcHJpb3JpdHksIGNoYXIgKmZvcm1hdCwgLi4uKSB7Ci0gIHZhX2xpc3QgYXJnczsKLQotICBpZiAocHJpb3JpdHkgPD0gZXJyX2xldmVsKSB7Ci0KLSAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwotICAgIGlmIChlcnJfZmlsZSAhPSBOVUxMKSB7Ci0gICAgICB2ZnByaW50ZihlcnJfZmlsZSwgZm9ybWF0LCBhcmdzKTsKLQkgIC8qICAgICAgZnByaW50ZihlcnJfZmlsZSwgIlxuIik7ICovCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2Vycl9yZXBvcnRpbmdfaW5pdCgpCit7CisjaWZkZWYgRVJSX1JFUE9SVElOR19TVERPVVQKKyAgICBzcnRwX2Vycl9maWxlID0gc3Rkb3V0OworI2VsaWYgZGVmaW5lZChFUlJfUkVQT1JUSU5HX0ZJTEUpCisgICAgLyogb3BlbiBmaWxlIGZvciBlcnJvciByZXBvcnRpbmcgKi8KKyAgICBzcnRwX2Vycl9maWxlID0gZm9wZW4oRVJSX1JFUE9SVElOR19GSUxFLCAidyIpOworICAgIGlmIChzcnRwX2Vycl9maWxlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19pbml0X2ZhaWw7CiAgICAgfQotI2lmIChFUlJfUkVQT1JUSU5HX1NZU0xPRyA9PSAxKQotICAgIHZzeXNsb2cocHJpb3JpdHksIGZvcm1hdCwgYXJncyk7CiAjZW5kaWYKLSAgICB2YV9lbmQoYXJncyk7Ci0gIH0KKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7CiB9CiAKLXZvaWQKLWVycl9yZXBvcnRpbmdfc2V0X2xldmVsKGVycl9yZXBvcnRpbmdfbGV2ZWxfdCBsdmwpIHsgCi0gIGVycl9sZXZlbCA9IGx2bDsKK3N0YXRpYyBzcnRwX2Vycl9yZXBvcnRfaGFuZGxlcl9mdW5jX3QgKnNydHBfZXJyX3JlcG9ydF9oYW5kbGVyID0gTlVMTDsKKworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9pbnN0YWxsX2Vycl9yZXBvcnRfaGFuZGxlcigKKyAgICBzcnRwX2Vycl9yZXBvcnRfaGFuZGxlcl9mdW5jX3QgZnVuYykKK3sKKyAgICBzcnRwX2Vycl9yZXBvcnRfaGFuZGxlciA9IGZ1bmM7CisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKIH0KIAotCit2b2lkIHNydHBfZXJyX3JlcG9ydChzcnRwX2Vycl9yZXBvcnRpbmdfbGV2ZWxfdCBsZXZlbCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgICAgY2hhciBtc2dbNTEyXTsKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgaWYgKHNydHBfZXJyX2ZpbGUgIT0gTlVMTCkgeworICAgICAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOworICAgICAgICB2ZnByaW50ZihzcnRwX2Vycl9maWxlLCBmb3JtYXQsIGFyZ3MpOworICAgICAgICB2YV9lbmQoYXJncyk7CisgICAgfQorICAgIGlmIChzcnRwX2Vycl9yZXBvcnRfaGFuZGxlciAhPSBOVUxMKSB7CisgICAgICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7CisgICAgICAgIGlmICh2c25wcmludGYobXNnLCBzaXplb2YobXNnKSwgZm9ybWF0LCBhcmdzKSA+IDApIHsKKyAgICAgICAgICAgIC8qIHN0cmlwIHRyYWlsaW5nIFxuLCBjYWxsYmFjayBzaG91bGQgbm90IGhhdmUgb25lICovCisgICAgICAgICAgICBzaXplX3QgbCA9IHN0cmxlbihtc2cpOworICAgICAgICAgICAgaWYgKGwgJiYgbXNnW2wgLSAxXSA9PSAnXG4nKSB7CisgICAgICAgICAgICAgICAgbXNnW2wgLSAxXSA9ICdcMCc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzcnRwX2Vycl9yZXBvcnRfaGFuZGxlcihsZXZlbCwgbXNnKTsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBOT1RFLCBuZWVkIHRvIGJlIGNhcmVmdWxsLCB0aGVyZSBpcyBhIHBvdGVudGlhbCB0aGF0CisgICAgICAgICAgICAgKiBvY3RldF9zdHJpbmdfc2V0X3RvX3plcm8oKSBjb3VsZAorICAgICAgICAgICAgICogY2FsbCBzcnRwX2Vycl9yZXBvcnQoKSBpbiB0aGUgZnV0dXJlLCBsZWFkaW5nIHRvIHJlY3Vyc2lvbgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBvY3RldF9zdHJpbmdfc2V0X3RvX3plcm8obXNnLCBzaXplb2YobXNnKSk7CisgICAgICAgIH0KKyAgICAgICAgdmFfZW5kKGFyZ3MpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2NyeXB0by9rZXJuZWwva2V5LmMgYi9jcnlwdG8va2VybmVsL2tleS5jCmluZGV4IGZkNzVhNjMuLjA0NjYxOTUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9rZXJuZWwva2V5LmMKKysrIGIvY3J5cHRvL2tlcm5lbC9rZXkuYwpAQCAtMiwzMSArMiwzMSBAQAogICoga2V5LmMKICAqCiAgKiBrZXkgdXNhZ2UgbGltaXRzIGVuZm9yY2VtZW50Ci0gKiAKKyAqCiAgKiBEYXZpZCBBLiBNY2dyZXcKICAqIENpc2NvIFN5c3RlbXMsIEluYy4KICAqLwogLyoKLSAqCQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDE3IENpc2NvIFN5c3RlbXMsIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogCisgKgogICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCiAgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCiAgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAogICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKKyAqCiAgKiAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAgKiAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAorICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwpAQCAtNDIsNzQgKzQyLDgxIEBACiAgKgogICovCiAKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgImtleS5oIgogCiAjZGVmaW5lIHNvZnRfbGltaXQgMHgxMDAwMAogCi1lcnJfc3RhdHVzX3QKLWtleV9saW1pdF9zZXQoa2V5X2xpbWl0X3Qga2V5LCBjb25zdCB4dGRfc2VxX251bV90IHMpIHsKK3NydHBfZXJyX3N0YXR1c190IHNydHBfa2V5X2xpbWl0X3NldChzcnRwX2tleV9saW1pdF90IGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcnRwX3h0ZF9zZXFfbnVtX3QgcykKK3sKICNpZmRlZiBOT182NEJJVF9NQVRICi0gIGlmIChoaWdoMzIocykgPT0gMCAmJiBsb3czMihzKSA8IHNvZnRfbGltaXQpCi0gICAgcmV0dXJuIGVycl9zdGF0dXNfYmFkX3BhcmFtOworICAgIGlmIChoaWdoMzIocykgPT0gMCAmJiBsb3czMihzKSA8IHNvZnRfbGltaXQpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisgICAgfQogI2Vsc2UKLSAgaWYgKHMgPCBzb2Z0X2xpbWl0KQotICAgIHJldHVybiBlcnJfc3RhdHVzX2JhZF9wYXJhbTsKKyAgICBpZiAocyA8IHNvZnRfbGltaXQpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisgICAgfQogI2VuZGlmCi0gIGtleS0+bnVtX2xlZnQgPSBzOwotICBrZXktPnN0YXRlID0ga2V5X3N0YXRlX25vcm1hbDsKLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7CisgICAga2V5LT5udW1fbGVmdCA9IHM7CisgICAga2V5LT5zdGF0ZSA9IHNydHBfa2V5X3N0YXRlX25vcm1hbDsKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQogCi1lcnJfc3RhdHVzX3QKLWtleV9saW1pdF9jbG9uZShrZXlfbGltaXRfdCBvcmlnaW5hbCwga2V5X2xpbWl0X3QgKm5ldykgewotICBpZiAob3JpZ2luYWwgPT0gTlVMTCkKLSAgICByZXR1cm4gZXJyX3N0YXR1c19iYWRfcGFyYW07Ci0gICpuZXcgPSBvcmlnaW5hbDsKLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7CitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2tleV9saW1pdF9jbG9uZShzcnRwX2tleV9saW1pdF90IG9yaWdpbmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9rZXlfbGltaXRfdCAqbmV3X2tleSkKK3sKKyAgICBpZiAob3JpZ2luYWwgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbTsKKyAgICB9CisgICAgKm5ld19rZXkgPSBvcmlnaW5hbDsKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQogCi1lcnJfc3RhdHVzX3QKLWtleV9saW1pdF9jaGVjayhjb25zdCBrZXlfbGltaXRfdCBrZXkpIHsKLSAgaWYgKGtleS0+c3RhdGUgPT0ga2V5X3N0YXRlX2V4cGlyZWQpCi0gICAgcmV0dXJuIGVycl9zdGF0dXNfa2V5X2V4cGlyZWQ7Ci0gIHJldHVybiBlcnJfc3RhdHVzX29rOworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9rZXlfbGltaXRfY2hlY2soY29uc3Qgc3J0cF9rZXlfbGltaXRfdCBrZXkpCit7CisgICAgaWYgKGtleS0+c3RhdGUgPT0gc3J0cF9rZXlfc3RhdGVfZXhwaXJlZCkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2tleV9leHBpcmVkOworICAgIH0KKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQogCi1rZXlfZXZlbnRfdAota2V5X2xpbWl0X3VwZGF0ZShrZXlfbGltaXRfdCBrZXkpIHsKK3NydHBfa2V5X2V2ZW50X3Qgc3J0cF9rZXlfbGltaXRfdXBkYXRlKHNydHBfa2V5X2xpbWl0X3Qga2V5KQorewogI2lmZGVmIE5PXzY0QklUX01BVEgKLSAgaWYgKGxvdzMyKGtleS0+bnVtX2xlZnQpID09IDApCi0gIHsKLQkgIC8vIGNhcnJ5Ci0JICBrZXktPm51bV9sZWZ0ID0gbWFrZTY0KGhpZ2gzMihrZXktPm51bV9sZWZ0KS0xLGxvMzIoa2V5LT5udW1fbGVmdCkgLSAxKTsKLSAgfQotICBlbHNlCi0gIHsKLQkgIC8vIG5vIGNhcnJ5Ci0JICBrZXktPm51bV9sZWZ0ID0gbWFrZTY0KGhpZ2gzMihrZXktPm51bV9sZWZ0KSxsb3czMihrZXktPm51bV9sZWZ0KSAtIDEpOwotICB9Ci0gIGlmIChoaWdoMzIoa2V5LT5udW1fbGVmdCkgIT0gMCB8fCBsb3czMihrZXktPm51bV9sZWZ0KSA+PSBzb2Z0X2xpbWl0KSB7Ci0gICAgcmV0dXJuIGtleV9ldmVudF9ub3JtYWw7ICAgLyogd2UncmUgYWJvdmUgdGhlIHNvZnQgbGltaXQgKi8KLSAgfQorICAgIGlmIChsb3czMihrZXktPm51bV9sZWZ0KSA9PSAwKSB7CisgICAgICAgIC8vIGNhcnJ5CisgICAgICAgIGtleS0+bnVtX2xlZnQgPQorICAgICAgICAgICAgbWFrZTY0KGhpZ2gzMihrZXktPm51bV9sZWZ0KSAtIDEsIGxvdzMyKGtleS0+bnVtX2xlZnQpIC0gMSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gbm8gY2FycnkKKyAgICAgICAga2V5LT5udW1fbGVmdCA9IG1ha2U2NChoaWdoMzIoa2V5LT5udW1fbGVmdCksIGxvdzMyKGtleS0+bnVtX2xlZnQpIC0gMSk7CisgICAgfQorICAgIGlmIChoaWdoMzIoa2V5LT5udW1fbGVmdCkgIT0gMCB8fCBsb3czMihrZXktPm51bV9sZWZ0KSA+PSBzb2Z0X2xpbWl0KSB7CisgICAgICAgIHJldHVybiBzcnRwX2tleV9ldmVudF9ub3JtYWw7IC8qIHdlJ3JlIGFib3ZlIHRoZSBzb2Z0IGxpbWl0ICovCisgICAgfQogI2Vsc2UKLSAga2V5LT5udW1fbGVmdC0tOwotICBpZiAoa2V5LT5udW1fbGVmdCA+PSBzb2Z0X2xpbWl0KSB7Ci0gICAgcmV0dXJuIGtleV9ldmVudF9ub3JtYWw7ICAgLyogd2UncmUgYWJvdmUgdGhlIHNvZnQgbGltaXQgKi8KLSAgfQorICAgIGtleS0+bnVtX2xlZnQtLTsKKyAgICBpZiAoa2V5LT5udW1fbGVmdCA+PSBzb2Z0X2xpbWl0KSB7CisgICAgICAgIHJldHVybiBzcnRwX2tleV9ldmVudF9ub3JtYWw7IC8qIHdlJ3JlIGFib3ZlIHRoZSBzb2Z0IGxpbWl0ICovCisgICAgfQogI2VuZGlmCi0gIGlmIChrZXktPnN0YXRlID09IGtleV9zdGF0ZV9ub3JtYWwpIHsKLSAgICAvKiB3ZSBqdXN0IHBhc3NlZCB0aGUgc29mdCBsaW1pdCwgc28gY2hhbmdlIHRoZSBzdGF0ZSAqLwotICAgIGtleS0+c3RhdGUgPSBrZXlfc3RhdGVfcGFzdF9zb2Z0X2xpbWl0OwotICB9CisgICAgaWYgKGtleS0+c3RhdGUgPT0gc3J0cF9rZXlfc3RhdGVfbm9ybWFsKSB7CisgICAgICAgIC8qIHdlIGp1c3QgcGFzc2VkIHRoZSBzb2Z0IGxpbWl0LCBzbyBjaGFuZ2UgdGhlIHN0YXRlICovCisgICAgICAgIGtleS0+c3RhdGUgPSBzcnRwX2tleV9zdGF0ZV9wYXN0X3NvZnRfbGltaXQ7CisgICAgfQogI2lmZGVmIE5PXzY0QklUX01BVEgKLSAgaWYgKGxvdzMyKGtleS0+bnVtX2xlZnQpID09IDAgJiYgaGlnaDMyKGtleS0+bnVtX2xlZnQgPT0gMCkpCisgICAgaWYgKGxvdzMyKGtleS0+bnVtX2xlZnQpID09IDAgJiYgaGlnaDMyKGtleS0+bnVtX2xlZnQgPT0gMCkpCiAjZWxzZQotICBpZiAoa2V5LT5udW1fbGVmdCA8IDEpCisgICAgaWYgKGtleS0+bnVtX2xlZnQgPCAxKQogI2VuZGlmCi0gIHsgLyogd2UganVzdCBoaXQgdGhlIGhhcmQgbGltaXQgKi8KLSAgICBrZXktPnN0YXRlID0ga2V5X3N0YXRlX2V4cGlyZWQ7Ci0gICAgcmV0dXJuIGtleV9ldmVudF9oYXJkX2xpbWl0OwotICB9Ci0gICByZXR1cm4ga2V5X2V2ZW50X3NvZnRfbGltaXQ7CisgICAgeyAvKiB3ZSBqdXN0IGhpdCB0aGUgaGFyZCBsaW1pdCAqLworICAgICAgICBrZXktPnN0YXRlID0gc3J0cF9rZXlfc3RhdGVfZXhwaXJlZDsKKyAgICAgICAgcmV0dXJuIHNydHBfa2V5X2V2ZW50X2hhcmRfbGltaXQ7CisgICAgfQorICAgIHJldHVybiBzcnRwX2tleV9ldmVudF9zb2Z0X2xpbWl0OwogfQotCmRpZmYgLS1naXQgYS9jcnlwdG8vbWF0aC9kYXRhdHlwZXMuYyBiL2NyeXB0by9tYXRoL2RhdGF0eXBlcy5jCmluZGV4IDBkYTlmZTcuLjAwMTU4NGMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9tYXRoL2RhdGF0eXBlcy5jCisrKyBiL2NyeXB0by9tYXRoL2RhdGF0eXBlcy5jCkBAIC04LDI2ICs4LDI2IEBACiAgKiBDaXNjbyBTeXN0ZW1zLCBJbmMuCiAgKi8KIC8qCi0gKgkKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA1IENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxNyBDaXNjbyBTeXN0ZW1zLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwogICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKICAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCisgKgogICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAogICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKKyAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKQEAgLTQzLDUwICs0MywzNCBAQAogICoKICAqLwogCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpZmRlZiBPUEVOU1NMCisjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKyNlbmRpZgorCiAjaW5jbHVkZSAiZGF0YXR5cGVzLmgiCiAKLWludCAKLW9jdGV0X3dlaWdodFsyNTZdID0gewotICAwLCAxLCAxLCAyLCAxLCAyLCAyLCAzLAotICAxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LAotICAxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LAotICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LAotICAxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LAotICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LAotICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LAotICAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LAotICAxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LAotICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LAotICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LAotICAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LAotICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LAotICAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LAotICAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LAotICA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LAotICAxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LAotICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LAotICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LAotICAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LAotICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LAotICAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LAotICAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LAotICA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LAotICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LAotICAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LAotICAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LAotICA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LAotICAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LAotICA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LAotICA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LAotICA1LCA2LCA2LCA3LCA2LCA3LCA3LCA4CitzdGF0aWMgY29uc3QgaW50OF90IG9jdGV0X3dlaWdodFsyNTZdID0geworICAgIDAsIDEsIDEsIDIsIDEsIDIsIDIsIDMsIDEsIDIsIDIsIDMsIDIsIDMsIDMsIDQsIDEsIDIsIDIsIDMsIDIsIDMsIDMsIDQsCisgICAgMiwgMywgMywgNCwgMywgNCwgNCwgNSwgMSwgMiwgMiwgMywgMiwgMywgMywgNCwgMiwgMywgMywgNCwgMywgNCwgNCwgNSwKKyAgICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LCAxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LAorICAgIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCisgICAgMiwgMywgMywgNCwgMywgNCwgNCwgNSwgMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwgMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwKKyAgICA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LCAxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LCAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LAorICAgIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsCisgICAgMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwgMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwgNCwgNSwgNSwgNiwgNSwgNiwgNiwgNywKKyAgICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LAorICAgIDQsIDUsIDUsIDYsIDUsIDYsIDYsIDcsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsIDQsIDUsIDUsIDYsIDUsIDYsIDYsIDcsCisgICAgNCwgNSwgNSwgNiwgNSwgNiwgNiwgNywgNSwgNiwgNiwgNywgNiwgNywgNywgOAogfTsKIAotaW50Ci1vY3RldF9nZXRfd2VpZ2h0KG9jdGV0X3Qgb2N0ZXQpIHsKLSAgZXh0ZXJuIGludCBvY3RldF93ZWlnaHRbMjU2XTsKLQotICByZXR1cm4gb2N0ZXRfd2VpZ2h0W29jdGV0XTsKLX0gIAoraW50IG9jdGV0X2dldF93ZWlnaHQodWludDhfdCBvY3RldCkKK3sKKyAgICByZXR1cm4gKGludClvY3RldF93ZWlnaHRbb2N0ZXRdOworfQogCiAvKgogICogYml0X3N0cmluZyBpcyBhIGJ1ZmZlciB0aGF0IGlzIHVzZWQgdG8gaG9sZCBvdXRwdXQgc3RyaW5ncywgZS5nLgpAQCAtOTcsNTM0ICs4MSw0MTAgQEAKIAogY2hhciBiaXRfc3RyaW5nW01BWF9QUklOVF9TVFJJTkdfTEVOXTsKIAotb2N0ZXRfdAotbmliYmxlX3RvX2hleF9jaGFyKG9jdGV0X3QgbmliYmxlKSB7Ci0gIGNoYXIgYnVmWzE2XSA9IHsnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywKLQkJICAnOCcsICc5JywgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJyB9OwotICByZXR1cm4gYnVmW25pYmJsZSAmIDB4Rl07Cit1aW50OF90IHNydHBfbmliYmxlX3RvX2hleF9jaGFyKHVpbnQ4X3QgbmliYmxlKQoreworICAgIGNoYXIgYnVmWzE2XSA9IHsgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsCisgICAgICAgICAgICAgICAgICAgICAnOCcsICc5JywgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJyB9OworICAgIHJldHVybiBidWZbbmliYmxlICYgMHhGXTsKIH0KIAotY2hhciAqCi1vY3RldF9zdHJpbmdfaGV4X3N0cmluZyhjb25zdCB2b2lkICpzLCBpbnQgbGVuZ3RoKSB7Ci0gIGNvbnN0IG9jdGV0X3QgKnN0ciA9IHM7Ci0gIGludCBpOwotICAKLSAgLyogZG91YmxlIGxlbmd0aCwgc2luY2Ugb25lIG9jdGV0IHRha2VzIHR3byBoZXggY2hhcmFjdGVycyAqLwotICBsZW5ndGggKj0gMjsKK2NoYXIgKnNydHBfb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoY29uc3Qgdm9pZCAqcywgaW50IGxlbmd0aCkKK3sKKyAgICBjb25zdCB1aW50OF90ICpzdHIgPSAoY29uc3QgdWludDhfdCAqKXM7CisgICAgaW50IGk7CiAKLSAgLyogdHJ1bmNhdGUgc3RyaW5nIGlmIGl0IHdvdWxkIGJlIHRvbyBsb25nICovCi0gIGlmIChsZW5ndGggPiBNQVhfUFJJTlRfU1RSSU5HX0xFTikKLSAgICBsZW5ndGggPSBNQVhfUFJJTlRfU1RSSU5HX0xFTi0xOwotICAKLSAgZm9yIChpPTA7IGkgPCBsZW5ndGg7IGkrPTIpIHsKLSAgICBiaXRfc3RyaW5nW2ldICAgPSBuaWJibGVfdG9faGV4X2NoYXIoKnN0ciA+PiA0KTsKLSAgICBiaXRfc3RyaW5nW2krMV0gPSBuaWJibGVfdG9faGV4X2NoYXIoKnN0cisrICYgMHhGKTsKLSAgfQotICBiaXRfc3RyaW5nW2ldID0gMDsgLyogbnVsbCB0ZXJtaW5hdGUgc3RyaW5nICovCi0gIHJldHVybiBiaXRfc3RyaW5nOwotfQorICAgIC8qIGRvdWJsZSBsZW5ndGgsIHNpbmNlIG9uZSBvY3RldCB0YWtlcyB0d28gaGV4IGNoYXJhY3RlcnMgKi8KKyAgICBsZW5ndGggKj0gMjsKIAotaW5saW5lIGludAotaGV4X2NoYXJfdG9fbmliYmxlKG9jdGV0X3QgYykgewotICBzd2l0Y2goYykgewotICBjYXNlICgnMCcpOiByZXR1cm4gMHgwOwotICBjYXNlICgnMScpOiByZXR1cm4gMHgxOwotICBjYXNlICgnMicpOiByZXR1cm4gMHgyOwotICBjYXNlICgnMycpOiByZXR1cm4gMHgzOwotICBjYXNlICgnNCcpOiByZXR1cm4gMHg0OwotICBjYXNlICgnNScpOiByZXR1cm4gMHg1OwotICBjYXNlICgnNicpOiByZXR1cm4gMHg2OwotICBjYXNlICgnNycpOiByZXR1cm4gMHg3OwotICBjYXNlICgnOCcpOiByZXR1cm4gMHg4OwotICBjYXNlICgnOScpOiByZXR1cm4gMHg5OwotICBjYXNlICgnYScpOiByZXR1cm4gMHhhOwotICBjYXNlICgnQScpOiByZXR1cm4gMHhhOwotICBjYXNlICgnYicpOiByZXR1cm4gMHhiOwotICBjYXNlICgnQicpOiByZXR1cm4gMHhiOwotICBjYXNlICgnYycpOiByZXR1cm4gMHhjOwotICBjYXNlICgnQycpOiByZXR1cm4gMHhjOwotICBjYXNlICgnZCcpOiByZXR1cm4gMHhkOwotICBjYXNlICgnRCcpOiByZXR1cm4gMHhkOwotICBjYXNlICgnZScpOiByZXR1cm4gMHhlOwotICBjYXNlICgnRScpOiByZXR1cm4gMHhlOwotICBjYXNlICgnZicpOiByZXR1cm4gMHhmOwotICBjYXNlICgnRicpOiByZXR1cm4gMHhmOwotICBkZWZhdWx0OiByZXR1cm4gLTE7ICAgLyogdGhpcyBmbGFncyBhbiBlcnJvciAqLwotICB9Ci0gIC8qIE5PVFJFQUNIRUQgKi8KLSAgcmV0dXJuIC0xOyAgLyogdGhpcyBrZWVwcyBjb21waWxlcnMgZnJvbSBjb21wbGFpbmluZyAqLwotfQorICAgIC8qIHRydW5jYXRlIHN0cmluZyBpZiBpdCB3b3VsZCBiZSB0b28gbG9uZyAqLworICAgIGlmIChsZW5ndGggPiBNQVhfUFJJTlRfU1RSSU5HX0xFTikKKyAgICAgICAgbGVuZ3RoID0gTUFYX1BSSU5UX1NUUklOR19MRU4gLSAyOwogCi1pbnQKLWlzX2hleF9zdHJpbmcoY2hhciAqcykgewotICB3aGlsZSgqcyAhPSAwKQotICAgIGlmIChoZXhfY2hhcl90b19uaWJibGUoKnMrKykgPT0gLTEpCi0gICAgICByZXR1cm4gMDsKLSAgcmV0dXJuIDE7Ci19Ci0KLS8qCi0gKiBoZXhfc3RyaW5nX3RvX29jdGV0X3N0cmluZyBjb252ZXJ0cyBhIGhleGFkZWNpbWFsIHN0cmluZwotICogb2YgbGVuZ3RoIDIgKiBsZW4gdG8gYSByYXcgb2N0ZXQgc3RyaW5nIG9mIGxlbmd0aCBsZW4KLSAqLwotCi1pbnQKLWhleF9zdHJpbmdfdG9fb2N0ZXRfc3RyaW5nKGNoYXIgKnJhdywgY2hhciAqaGV4LCBpbnQgbGVuKSB7Ci0gIG9jdGV0X3QgeDsKLSAgaW50IHRtcDsKLSAgaW50IGhleF9sZW47Ci0KLSAgaGV4X2xlbiA9IDA7Ci0gIHdoaWxlIChoZXhfbGVuIDwgbGVuKSB7Ci0gICAgdG1wID0gaGV4X2NoYXJfdG9fbmliYmxlKGhleFswXSk7Ci0gICAgaWYgKHRtcCA9PSAtMSkKLSAgICAgIHJldHVybiBoZXhfbGVuOwotICAgIHggPSAodG1wIDw8IDQpOwotICAgIGhleF9sZW4rKzsKLSAgICB0bXAgPSBoZXhfY2hhcl90b19uaWJibGUoaGV4WzFdKTsKLSAgICBpZiAodG1wID09IC0xKQotICAgICAgcmV0dXJuIGhleF9sZW47Ci0gICAgeCB8PSAodG1wICYgMHhmZik7Ci0gICAgaGV4X2xlbisrOwotICAgICpyYXcrKyA9IHg7Ci0gICAgaGV4ICs9IDI7Ci0gIH0KLSAgcmV0dXJuIGhleF9sZW47Ci19Ci0KLWNoYXIgKgotdjEyOF9oZXhfc3RyaW5nKHYxMjhfdCAqeCkgewotICBpbnQgaSwgajsKLQotICBmb3IgKGk9aj0wOyBpIDwgMTY7IGkrKykgewotICAgIGJpdF9zdHJpbmdbaisrXSAgPSBuaWJibGVfdG9faGV4X2NoYXIoeC0+b2N0ZXRbaV0gPj4gNCk7Ci0gICAgYml0X3N0cmluZ1tqKytdICA9IG5pYmJsZV90b19oZXhfY2hhcih4LT5vY3RldFtpXSAmIDB4Rik7Ci0gIH0KLSAgCi0gIGJpdF9zdHJpbmdbal0gPSAwOyAvKiBudWxsIHRlcm1pbmF0ZSBzdHJpbmcgKi8KLSAgcmV0dXJuIGJpdF9zdHJpbmc7Ci19Ci0KLWNoYXIgKgotdjEyOF9iaXRfc3RyaW5nKHYxMjhfdCAqeCkgewotICBpbnQgaiwgaW5kZXg7Ci0gIHVpbnQzMl90IG1hc2s7Ci0gIAotICBmb3IgKGo9aW5kZXg9MDsgaiA8IDQ7IGorKykgewotICAgIGZvciAobWFzaz0weDgwMDAwMDAwOyBtYXNrID4gMDsgbWFzayA+Pj0gMSkgewotICAgICAgaWYgKHgtPnYzMltqXSAmIG1hc2spCi0JYml0X3N0cmluZ1tpbmRleF0gPSAnMSc7Ci0gICAgICBlbHNlCi0JYml0X3N0cmluZ1tpbmRleF0gPSAnMCc7Ci0gICAgICArK2luZGV4OworICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMikgeworICAgICAgICBiaXRfc3RyaW5nW2ldID0gc3J0cF9uaWJibGVfdG9faGV4X2NoYXIoKnN0ciA+PiA0KTsKKyAgICAgICAgYml0X3N0cmluZ1tpICsgMV0gPSBzcnRwX25pYmJsZV90b19oZXhfY2hhcigqc3RyKysgJiAweEYpOwogICAgIH0KLSAgfQotICBiaXRfc3RyaW5nWzEyOF0gPSAwOyAvKiBudWxsIHRlcm1pbmF0ZSBzdHJpbmcgKi8KLQotICByZXR1cm4gYml0X3N0cmluZzsKKyAgICBiaXRfc3RyaW5nW2ldID0gMDsgLyogbnVsbCB0ZXJtaW5hdGUgc3RyaW5nICovCisgICAgcmV0dXJuIGJpdF9zdHJpbmc7CiB9CiAKLXZvaWQKLXYxMjhfY29weV9vY3RldF9zdHJpbmcodjEyOF90ICp4LCBjb25zdCBvY3RldF90IHNbMTZdKSB7Ci0jaWYgQUxJR05NRU5UXzMyQklUX1JFUVVJUkVECi0gIGlmICgoKCh1aW50MzJfdCkgJnNbMF0pICYgMHgzKSAhPSAwKQotI2VuZGlmCi0gIHsKLQkgIHgtPm9jdGV0WzBdICA9IHNbMF07Ci0JICB4LT5vY3RldFsxXSAgPSBzWzFdOwotCSAgeC0+b2N0ZXRbMl0gID0gc1syXTsKLQkgIHgtPm9jdGV0WzNdICA9IHNbM107Ci0JICB4LT5vY3RldFs0XSAgPSBzWzRdOwotCSAgeC0+b2N0ZXRbNV0gID0gc1s1XTsKLQkgIHgtPm9jdGV0WzZdICA9IHNbNl07Ci0JICB4LT5vY3RldFs3XSAgPSBzWzddOwotCSAgeC0+b2N0ZXRbOF0gID0gc1s4XTsKLQkgIHgtPm9jdGV0WzldICA9IHNbOV07Ci0JICB4LT5vY3RldFsxMF0gPSBzWzEwXTsKLQkgIHgtPm9jdGV0WzExXSA9IHNbMTFdOwotCSAgeC0+b2N0ZXRbMTJdID0gc1sxMl07Ci0JICB4LT5vY3RldFsxM10gPSBzWzEzXTsKLQkgIHgtPm9jdGV0WzE0XSA9IHNbMTRdOwotCSAgeC0+b2N0ZXRbMTVdID0gc1sxNV07Ci0gIH0KLSNpZiBBTElHTk1FTlRfMzJCSVRfUkVRVUlSRUQKLSAgZWxzZSAKLSAgewotCSAgdjEyOF90ICp2ID0gKHYxMjhfdCAqKSAmc1swXTsKK2NoYXIgKnYxMjhfaGV4X3N0cmluZyh2MTI4X3QgKngpCit7CisgICAgaW50IGksIGo7CiAKLQkgIHYxMjhfY29weSh4LHYpOwotICB9CisgICAgZm9yIChpID0gaiA9IDA7IGkgPCAxNjsgaSsrKSB7CisgICAgICAgIGJpdF9zdHJpbmdbaisrXSA9IHNydHBfbmliYmxlX3RvX2hleF9jaGFyKHgtPnY4W2ldID4+IDQpOworICAgICAgICBiaXRfc3RyaW5nW2orK10gPSBzcnRwX25pYmJsZV90b19oZXhfY2hhcih4LT52OFtpXSAmIDB4Rik7CisgICAgfQorCisgICAgYml0X3N0cmluZ1tqXSA9IDA7IC8qIG51bGwgdGVybWluYXRlIHN0cmluZyAqLworICAgIHJldHVybiBiaXRfc3RyaW5nOworfQorCitjaGFyICp2MTI4X2JpdF9zdHJpbmcodjEyOF90ICp4KQoreworICAgIGludCBqLCBpOworICAgIHVpbnQzMl90IG1hc2s7CisKKyAgICBmb3IgKGogPSBpID0gMDsgaiA8IDQ7IGorKykgeworICAgICAgICBmb3IgKG1hc2sgPSAweDgwMDAwMDAwOyBtYXNrID4gMDsgbWFzayA+Pj0gMSkgeworICAgICAgICAgICAgaWYgKHgtPnYzMltqXSAmIG1hc2spCisgICAgICAgICAgICAgICAgYml0X3N0cmluZ1tpXSA9ICcxJzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiaXRfc3RyaW5nW2ldID0gJzAnOworICAgICAgICAgICAgKytpOworICAgICAgICB9CisgICAgfQorICAgIGJpdF9zdHJpbmdbMTI4XSA9IDA7IC8qIG51bGwgdGVybWluYXRlIHN0cmluZyAqLworCisgICAgcmV0dXJuIGJpdF9zdHJpbmc7Cit9CisKK3ZvaWQgdjEyOF9jb3B5X29jdGV0X3N0cmluZyh2MTI4X3QgKngsIGNvbnN0IHVpbnQ4X3Qgc1sxNl0pCit7CisjaWZkZWYgQUxJR05NRU5UXzMyQklUX1JFUVVJUkVECisgICAgaWYgKCgoKHVpbnQzMl90KSZzWzBdKSAmIDB4MykgIT0gMCkKKyNlbmRpZgorICAgIHsKKyAgICAgICAgeC0+djhbMF0gPSBzWzBdOworICAgICAgICB4LT52OFsxXSA9IHNbMV07CisgICAgICAgIHgtPnY4WzJdID0gc1syXTsKKyAgICAgICAgeC0+djhbM10gPSBzWzNdOworICAgICAgICB4LT52OFs0XSA9IHNbNF07CisgICAgICAgIHgtPnY4WzVdID0gc1s1XTsKKyAgICAgICAgeC0+djhbNl0gPSBzWzZdOworICAgICAgICB4LT52OFs3XSA9IHNbN107CisgICAgICAgIHgtPnY4WzhdID0gc1s4XTsKKyAgICAgICAgeC0+djhbOV0gPSBzWzldOworICAgICAgICB4LT52OFsxMF0gPSBzWzEwXTsKKyAgICAgICAgeC0+djhbMTFdID0gc1sxMV07CisgICAgICAgIHgtPnY4WzEyXSA9IHNbMTJdOworICAgICAgICB4LT52OFsxM10gPSBzWzEzXTsKKyAgICAgICAgeC0+djhbMTRdID0gc1sxNF07CisgICAgICAgIHgtPnY4WzE1XSA9IHNbMTVdOworICAgIH0KKyNpZmRlZiBBTElHTk1FTlRfMzJCSVRfUkVRVUlSRUQKKyAgICBlbHNlIHsKKyAgICAgICAgdjEyOF90ICp2ID0gKHYxMjhfdCAqKSZzWzBdOworCisgICAgICAgIHYxMjhfY29weSh4LCB2KTsKKyAgICB9CiAjZW5kaWYKIH0KIAogI2lmbmRlZiBEQVRBVFlQRVNfVVNFX01BQ1JPUyAvKiBsaXR0bGUgZnVuY3Rpb25zIGFyZSBub3QgbWFjcm9zICovCiAKLXZvaWQKLXYxMjhfc2V0X3RvX3plcm8odjEyOF90ICp4KSB7Ci0gIF92MTI4X3NldF90b196ZXJvKHgpOwordm9pZCB2MTI4X3NldF90b196ZXJvKHYxMjhfdCAqeCkKK3sKKyAgICBfdjEyOF9zZXRfdG9femVybyh4KTsKIH0KIAotdm9pZAotdjEyOF9jb3B5KHYxMjhfdCAqeCwgY29uc3QgdjEyOF90ICp5KSB7Ci0gIF92MTI4X2NvcHkoeCwgeSk7Cit2b2lkIHYxMjhfY29weSh2MTI4X3QgKngsIGNvbnN0IHYxMjhfdCAqeSkKK3sKKyAgICBfdjEyOF9jb3B5KHgsIHkpOwogfQogCi12b2lkCi12MTI4X3hvcih2MTI4X3QgKnosIHYxMjhfdCAqeCwgdjEyOF90ICp5KSB7Ci0gIF92MTI4X3hvcih6LCB4LCB5KTsKLX0gCi0KLXZvaWQKLXYxMjhfYW5kKHYxMjhfdCAqeiwgdjEyOF90ICp4LCB2MTI4X3QgKnkpIHsKLSAgX3YxMjhfYW5kKHosIHgsIHkpOwordm9pZCB2MTI4X3hvcih2MTI4X3QgKnosIHYxMjhfdCAqeCwgdjEyOF90ICp5KQoreworICAgIF92MTI4X3hvcih6LCB4LCB5KTsKIH0KIAotdm9pZAotdjEyOF9vcih2MTI4X3QgKnosIHYxMjhfdCAqeCwgdjEyOF90ICp5KSB7Ci0gIF92MTI4X29yKHosIHgsIHkpOwordm9pZCB2MTI4X2FuZCh2MTI4X3QgKnosIHYxMjhfdCAqeCwgdjEyOF90ICp5KQoreworICAgIF92MTI4X2FuZCh6LCB4LCB5KTsKIH0KIAotdm9pZAotdjEyOF9jb21wbGVtZW50KHYxMjhfdCAqeCkgewotICBfdjEyOF9jb21wbGVtZW50KHgpOwordm9pZCB2MTI4X29yKHYxMjhfdCAqeiwgdjEyOF90ICp4LCB2MTI4X3QgKnkpCit7CisgICAgX3YxMjhfb3IoeiwgeCwgeSk7CiB9CiAKLWludAotdjEyOF9pc19lcShjb25zdCB2MTI4X3QgKngsIGNvbnN0IHYxMjhfdCAqeSkgewotICByZXR1cm4gX3YxMjhfaXNfZXEoeCwgeSk7Cit2b2lkIHYxMjhfY29tcGxlbWVudCh2MTI4X3QgKngpCit7CisgICAgX3YxMjhfY29tcGxlbWVudCh4KTsKIH0KIAotaW50Ci12MTI4X3hvcl9lcSh2MTI4X3QgKngsIGNvbnN0IHYxMjhfdCAqeSkgewotICByZXR1cm4gX3YxMjhfeG9yX2VxKHgsIHkpOworaW50IHYxMjhfaXNfZXEoY29uc3QgdjEyOF90ICp4LCBjb25zdCB2MTI4X3QgKnkpCit7CisgICAgcmV0dXJuIF92MTI4X2lzX2VxKHgsIHkpOwogfQogCi1pbnQKLXYxMjhfZ2V0X2JpdChjb25zdCB2MTI4X3QgKngsIGludCBpKSB7Ci0gIHJldHVybiBfdjEyOF9nZXRfYml0KHgsIGkpOworaW50IHYxMjhfeG9yX2VxKHYxMjhfdCAqeCwgY29uc3QgdjEyOF90ICp5KQoreworICAgIHJldHVybiBfdjEyOF94b3JfZXEoeCwgeSk7CiB9CiAKLXZvaWQKLXYxMjhfc2V0X2JpdCh2MTI4X3QgKngsIGludCBpKSB7Ci0gIF92MTI4X3NldF9iaXQoeCwgaSk7Ci19ICAgICAKLQotdm9pZAotdjEyOF9jbGVhcl9iaXQodjEyOF90ICp4LCBpbnQgaSl7Ci0gIF92MTI4X2NsZWFyX2JpdCh4LCBpKTsKLX0gICAgCi0KLXZvaWQKLXYxMjhfc2V0X2JpdF90byh2MTI4X3QgKngsIGludCBpLCBpbnQgeSl7Ci0gIF92MTI4X3NldF9iaXRfdG8oeCwgaSwgeSk7CitpbnQgdjEyOF9nZXRfYml0KGNvbnN0IHYxMjhfdCAqeCwgaW50IGkpCit7CisgICAgcmV0dXJuIF92MTI4X2dldF9iaXQoeCwgaSk7CiB9CiAKK3ZvaWQgdjEyOF9zZXRfYml0KHYxMjhfdCAqeCwgaW50IGkpCit7CisgICAgX3YxMjhfc2V0X2JpdCh4LCBpKTsKK30KKwordm9pZCB2MTI4X2NsZWFyX2JpdCh2MTI4X3QgKngsIGludCBpKQoreworICAgIF92MTI4X2NsZWFyX2JpdCh4LCBpKTsKK30KKwordm9pZCB2MTI4X3NldF9iaXRfdG8odjEyOF90ICp4LCBpbnQgaSwgaW50IHkpCit7CisgICAgX3YxMjhfc2V0X2JpdF90byh4LCBpLCB5KTsKK30KIAogI2VuZGlmIC8qIERBVEFUWVBFU19VU0VfTUFDUk9TICovCiAKLXZvaWQKLXYxMjhfcmlnaHRfc2hpZnQodjEyOF90ICp4LCBpbnQgaW5kZXgpIHsKLSAgY29uc3QgaW50IGJhc2VfaW5kZXggPSBpbmRleCA+PiA1OwotICBjb25zdCBpbnQgYml0X2luZGV4ID0gaW5kZXggJiAzMTsKLSAgaW50IGksIGZyb207Ci0gIHVpbnQzMl90IGI7Ci0gICAgCi0gIGlmIChpbmRleCA+IDEyNykgewotICAgIHYxMjhfc2V0X3RvX3plcm8oeCk7Ci0gICAgcmV0dXJuOwotICB9Cit2b2lkIHYxMjhfcmlnaHRfc2hpZnQodjEyOF90ICp4LCBpbnQgc2hpZnQpCit7CisgICAgY29uc3QgaW50IGJhc2VfaW5kZXggPSBzaGlmdCA+PiA1OworICAgIGNvbnN0IGludCBiaXRfaW5kZXggPSBzaGlmdCAmIDMxOworICAgIGludCBpLCBmcm9tOworICAgIHVpbnQzMl90IGI7CiAKLSAgaWYgKGJpdF9pbmRleCA9PSAwKSB7Ci0KLSAgICAvKiBjb3B5IGVhY2ggd29yZCBmcm9tIGxlZnQgc2l6ZSB0byByaWdodCBzaWRlICovCi0gICAgeC0+djMyWzQtMV0gPSB4LT52MzJbNC0xLWJhc2VfaW5kZXhdOwotICAgIGZvciAoaT00LTE7IGkgPiBiYXNlX2luZGV4OyBpLS0pIAotICAgICAgeC0+djMyW2ktMV0gPSB4LT52MzJbaS0xLWJhc2VfaW5kZXhdOwotCi0gIH0gZWxzZSB7Ci0gICAgCi0gICAgLyogc2V0IGVhY2ggd29yZCB0byB0aGUgIm9yIiBvZiB0aGUgdHdvIGJpdC1zaGlmdGVkIHdvcmRzICovCi0gICAgZm9yIChpID0gNDsgaSA+IGJhc2VfaW5kZXg7IGktLSkgewotICAgICAgZnJvbSA9IGktMSAtIGJhc2VfaW5kZXg7Ci0gICAgICBiID0geC0+djMyW2Zyb21dIDw8IGJpdF9pbmRleDsKLSAgICAgIGlmIChmcm9tID4gMCkKLSAgICAgICAgYiB8PSB4LT52MzJbZnJvbS0xXSA+PiAoMzItYml0X2luZGV4KTsKLSAgICAgIHgtPnYzMltpLTFdID0gYjsKKyAgICBpZiAoc2hpZnQgPiAxMjcpIHsKKyAgICAgICAgdjEyOF9zZXRfdG9femVybyh4KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgfQogCi0gIC8qIG5vdyB3cmFwIHVwIHRoZSBmaW5hbCBwb3J0aW9uICovCi0gIGZvciAoaT0wOyBpIDwgYmFzZV9pbmRleDsgaSsrKSAKLSAgICB4LT52MzJbaV0gPSAwOwotICAKKyAgICBpZiAoYml0X2luZGV4ID09IDApIHsKKyAgICAgICAgLyogY29weSBlYWNoIHdvcmQgZnJvbSBsZWZ0IHNpemUgdG8gcmlnaHQgc2lkZSAqLworICAgICAgICB4LT52MzJbNCAtIDFdID0geC0+djMyWzQgLSAxIC0gYmFzZV9pbmRleF07CisgICAgICAgIGZvciAoaSA9IDQgLSAxOyBpID4gYmFzZV9pbmRleDsgaS0tKQorICAgICAgICAgICAgeC0+djMyW2kgLSAxXSA9IHgtPnYzMltpIC0gMSAtIGJhc2VfaW5kZXhdOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogc2V0IGVhY2ggd29yZCB0byB0aGUgIm9yIiBvZiB0aGUgdHdvIGJpdC1zaGlmdGVkIHdvcmRzICovCisgICAgICAgIGZvciAoaSA9IDQ7IGkgPiBiYXNlX2luZGV4OyBpLS0pIHsKKyAgICAgICAgICAgIGZyb20gPSBpIC0gMSAtIGJhc2VfaW5kZXg7CisgICAgICAgICAgICBiID0geC0+djMyW2Zyb21dIDw8IGJpdF9pbmRleDsKKyAgICAgICAgICAgIGlmIChmcm9tID4gMCkKKyAgICAgICAgICAgICAgICBiIHw9IHgtPnYzMltmcm9tIC0gMV0gPj4gKDMyIC0gYml0X2luZGV4KTsKKyAgICAgICAgICAgIHgtPnYzMltpIC0gMV0gPSBiOworICAgICAgICB9CisgICAgfQorCisgICAgLyogbm93IHdyYXAgdXAgdGhlIGZpbmFsIHBvcnRpb24gKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgYmFzZV9pbmRleDsgaSsrKQorICAgICAgICB4LT52MzJbaV0gPSAwOwogfQogCi12b2lkCi12MTI4X2xlZnRfc2hpZnQodjEyOF90ICp4LCBpbnQgaW5kZXgpIHsKLSAgaW50IGk7Ci0gIGNvbnN0IGludCBiYXNlX2luZGV4ID0gaW5kZXggPj4gNTsKLSAgY29uc3QgaW50IGJpdF9pbmRleCA9IGluZGV4ICYgMzE7Cit2b2lkIHYxMjhfbGVmdF9zaGlmdCh2MTI4X3QgKngsIGludCBzaGlmdCkKK3sKKyAgICBpbnQgaTsKKyAgICBjb25zdCBpbnQgYmFzZV9pbmRleCA9IHNoaWZ0ID4+IDU7CisgICAgY29uc3QgaW50IGJpdF9pbmRleCA9IHNoaWZ0ICYgMzE7CiAKLSAgaWYgKGluZGV4ID4gMTI3KSB7Ci0gICAgdjEyOF9zZXRfdG9femVybyh4KTsKLSAgICByZXR1cm47Ci0gIH0gCi0gIAotICBpZiAoYml0X2luZGV4ID09IDApIHsKLSAgICBmb3IgKGk9MDsgaSA8IDQgLSBiYXNlX2luZGV4OyBpKyspCi0gICAgICB4LT52MzJbaV0gPSB4LT52MzJbaStiYXNlX2luZGV4XTsKLSAgfSBlbHNlIHsKLSAgICBmb3IgKGk9MDsgaSA8IDQgLSBiYXNlX2luZGV4IC0gMTsgaSsrKQotICAgICAgeC0+djMyW2ldID0gKHgtPnYzMltpK2Jhc2VfaW5kZXhdID4+IGJpdF9pbmRleCkgXgotCSh4LT52MzJbaStiYXNlX2luZGV4KzFdIDw8ICgzMiAtIGJpdF9pbmRleCkpOwotICAgIHgtPnYzMls0IC0gYmFzZV9pbmRleC0xXSA9IHgtPnYzMls0LTFdID4+IGJpdF9pbmRleDsKLSAgfQorICAgIGlmIChzaGlmdCA+IDEyNykgeworICAgICAgICB2MTI4X3NldF90b196ZXJvKHgpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gIC8qIG5vdyB3cmFwIHVwIHRoZSBmaW5hbCBwb3J0aW9uICovCi0gIGZvciAoaSA9IDQgLSBiYXNlX2luZGV4OyBpIDwgNDsgaSsrKSAKLSAgICB4LT52MzJbaV0gPSAwOworICAgIGlmIChiaXRfaW5kZXggPT0gMCkgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNCAtIGJhc2VfaW5kZXg7IGkrKykKKyAgICAgICAgICAgIHgtPnYzMltpXSA9IHgtPnYzMltpICsgYmFzZV9pbmRleF07CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDQgLSBiYXNlX2luZGV4IC0gMTsgaSsrKQorICAgICAgICAgICAgeC0+djMyW2ldID0gKHgtPnYzMltpICsgYmFzZV9pbmRleF0gPj4gYml0X2luZGV4KSBeCisgICAgICAgICAgICAgICAgICAgICAgICAoeC0+djMyW2kgKyBiYXNlX2luZGV4ICsgMV0gPDwgKDMyIC0gYml0X2luZGV4KSk7CisgICAgICAgIHgtPnYzMls0IC0gYmFzZV9pbmRleCAtIDFdID0geC0+djMyWzQgLSAxXSA+PiBiaXRfaW5kZXg7CisgICAgfQogCisgICAgLyogbm93IHdyYXAgdXAgdGhlIGZpbmFsIHBvcnRpb24gKi8KKyAgICBmb3IgKGkgPSA0IC0gYmFzZV9pbmRleDsgaSA8IDQ7IGkrKykKKyAgICAgICAgeC0+djMyW2ldID0gMDsKIH0KIAorLyogZnVuY3Rpb25zIG1hbmlwdWxhdGluZyBiaXR2ZWN0b3JfdCAqLwogCi1pbnQKLW9jdGV0X3N0cmluZ19pc19lcShvY3RldF90ICphLCBvY3RldF90ICpiLCBpbnQgbGVuKSB7Ci0gIG9jdGV0X3QgKmVuZCA9IGIgKyBsZW47Ci0gIHdoaWxlIChiIDwgZW5kKQotICAgIGlmICgqYSsrICE9ICpiKyspCi0gICAgICByZXR1cm4gMTsKLSAgcmV0dXJuIDA7CisjaWZuZGVmIERBVEFUWVBFU19VU0VfTUFDUk9TIC8qIGxpdHRsZSBmdW5jdGlvbnMgYXJlIG5vdCBtYWNyb3MgKi8KKworaW50IGJpdHZlY3Rvcl9nZXRfYml0KGNvbnN0IGJpdHZlY3Rvcl90ICp2LCBpbnQgYml0X2luZGV4KQoreworICAgIHJldHVybiBfYml0dmVjdG9yX2dldF9iaXQodiwgYml0X2luZGV4KTsKIH0KIAotdm9pZAotb2N0ZXRfc3RyaW5nX3NldF90b196ZXJvKG9jdGV0X3QgKnMsIGludCBsZW4pIHsKLSAgb2N0ZXRfdCAqZW5kID0gcyArIGxlbjsKLQotICBkbyB7Ci0gICAgKnMgPSAwOwotICB9IHdoaWxlICgrK3MgPCBlbmQpOwotICAKK3ZvaWQgYml0dmVjdG9yX3NldF9iaXQoYml0dmVjdG9yX3QgKnYsIGludCBiaXRfaW5kZXgpCit7CisgICAgX2JpdHZlY3Rvcl9zZXRfYml0KHYsIGJpdF9pbmRleCk7CiB9CiAKLS8qIAotICogYnN3YXBfMzIoKSBpcyBhbiBvcHRpbWl6ZWQgdmVyc2lvbiBvZiBodG9ubC9udG9obAotICovCi0KLWlubGluZSB1aW50MzJfdAotYnN3YXBfMzIodWludDMyX3QgdikgewotI2lmIENQVV9DSVNDICAgICAgICAgICAgICAgICAgICAgCi0jaWZuZGVmIE1JUFNFTCAgLyogTUlQU0VMIHN0YW5kcyBmb3IgTUlQUyBFbmRpYW4gTGl0dGxlLCBidXQgaXQncyBub3QgeDg2LAotCQkgKiBzbyBpZ25vcmUgdGhlIGFzc2VtYmx5IGxhbmd1YWdlICovCi0gIC8qIGFzc3VtZSB0aGF0IHdlJ3JlIG9uIGFuIEludGVsIHg4NiB3aXRoIHggPiAzICovCi0gIGFzbSgiYnN3YXAgJTAiIDogIj1yIiAodikgOiAiMCIgKHYpKTsKLSNlbmRpZgotI2VuZGlmCi0gIC8qIGFzc3VtZSB0aGF0IHdlJ3JlIG9uIGEgYmlnLWVuZGlhbiBvciBub24taW50ZWwgbWFjaGluZSAqLwotICByZXR1cm4gdjsKK3ZvaWQgYml0dmVjdG9yX2NsZWFyX2JpdChiaXR2ZWN0b3JfdCAqdiwgaW50IGJpdF9pbmRleCkKK3sKKyAgICBfYml0dmVjdG9yX2NsZWFyX2JpdCh2LCBiaXRfaW5kZXgpOwogfQogCi1pbmxpbmUgdWludDY0X3QKLWJzd2FwXzY0KHVpbnQ2NF90IHYpIHsKLSNpZiBDUFVfQ0lTQyAgLyogYXNzdW1lIHRoYXQgd2UncmUgb24gYW4gSW50ZWwgeDg2IHdpdGggeCA+IDMgKi8KLSNpZm5kZWYgTUlQU0VMICAvKiBNSVBTRUwgc3RhbmRzIGZvciBNSVBTIEVuZGlhbiBMaXR0bGUsIGJ1dCBpdCdzIG5vdCB4ODYsCi0JCSAqIHNvIGlnbm9yZSB0aGUgYXNzZW1ibHkgbGFuZ3VhZ2UgKi8KLSAgdj0gKGJzd2FwXzMyKHYgPj4gMzIpKSB8ICgodWludDY0X3QpYnN3YXBfMzIoKHVpbnQzMl90KXYpKSA8PCAzMiA7Ci0jZW5kaWYKLSNlbmRpZiAgICAgICAgLyogYXNzdW1lIHRoYXQgd2UncmUgb24gYSBiaWctZW5kaWFuIG9yIG5vbi1pbnRlbCBtYWNoaW5lICovCi0gIHJldHVybiB2OwotfQorI2VuZGlmIC8qIERBVEFUWVBFU19VU0VfTUFDUk9TICovCiAKK2ludCBiaXR2ZWN0b3JfYWxsb2MoYml0dmVjdG9yX3QgKnYsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKQoreworICAgIHVuc2lnbmVkIGxvbmcgbDsKIAorICAgIC8qIFJvdW5kIGxlbmd0aCB1cCB0byBhIG11bHRpcGxlIG9mIGJpdHNfcGVyX3dvcmQgKi8KKyAgICBsZW5ndGggPQorICAgICAgICAobGVuZ3RoICsgYml0c19wZXJfd29yZCAtIDEpICYgfih1bnNpZ25lZCBsb25nKSgoYml0c19wZXJfd29yZCAtIDEpKTsKIAorICAgIGwgPSBsZW5ndGggLyBiaXRzX3Blcl93b3JkICogYnl0ZXNfcGVyX3dvcmQ7CiAKLS8qCi0gKiAgRnJvbSBSRkMgMTUyMTogVGhlIEJhc2U2NCBBbHBoYWJldAotICoKLSAqICAgVmFsdWUgRW5jb2RpbmcgIFZhbHVlIEVuY29kaW5nICBWYWx1ZSBFbmNvZGluZyAgVmFsdWUgRW5jb2RpbmcKLSAqICAgICAgICAwIEEgICAgICAgICAgICAxNyBSICAgICAgICAgICAgMzQgaSAgICAgICAgICAgIDUxIHoKLSAqICAgICAgICAxIEIgICAgICAgICAgICAxOCBTICAgICAgICAgICAgMzUgaiAgICAgICAgICAgIDUyIDAKLSAqICAgICAgICAyIEMgICAgICAgICAgICAxOSBUICAgICAgICAgICAgMzYgayAgICAgICAgICAgIDUzIDEKLSAqICAgICAgICAzIEQgICAgICAgICAgICAyMCBVICAgICAgICAgICAgMzcgbCAgICAgICAgICAgIDU0IDIKLSAqICAgICAgICA0IEUgICAgICAgICAgICAyMSBWICAgICAgICAgICAgMzggbSAgICAgICAgICAgIDU1IDMKLSAqICAgICAgICA1IEYgICAgICAgICAgICAyMiBXICAgICAgICAgICAgMzkgbiAgICAgICAgICAgIDU2IDQKLSAqICAgICAgICA2IEcgICAgICAgICAgICAyMyBYICAgICAgICAgICAgNDAgbyAgICAgICAgICAgIDU3IDUKLSAqICAgICAgICA3IEggICAgICAgICAgICAyNCBZICAgICAgICAgICAgNDEgcCAgICAgICAgICAgIDU4IDYKLSAqICAgICAgICA4IEkgICAgICAgICAgICAyNSBaICAgICAgICAgICAgNDIgcSAgICAgICAgICAgIDU5IDcKLSAqICAgICAgICA5IEogICAgICAgICAgICAyNiBhICAgICAgICAgICAgNDMgciAgICAgICAgICAgIDYwIDgKLSAqICAgICAgIDEwIEsgICAgICAgICAgICAyNyBiICAgICAgICAgICAgNDQgcyAgICAgICAgICAgIDYxIDkKLSAqICAgICAgIDExIEwgICAgICAgICAgICAyOCBjICAgICAgICAgICAgNDUgdCAgICAgICAgICAgIDYyICsKLSAqICAgICAgIDEyIE0gICAgICAgICAgICAyOSBkICAgICAgICAgICAgNDYgdSAgICAgICAgICAgIDYzIC8KLSAqICAgICAgIDEzIE4gICAgICAgICAgICAzMCBlICAgICAgICAgICAgNDcgdgotICogICAgICAgMTQgTyAgICAgICAgICAgIDMxIGYgICAgICAgICAgICA0OCB3ICAgICAgICAgKHBhZCkgPQotICogICAgICAgMTUgUCAgICAgICAgICAgIDMyIGcgICAgICAgICAgICA0OSB4Ci0gKiAgICAgICAxNiBRICAgICAgICAgICAgMzMgaCAgICAgICAgICAgIDUwIHkKLSAqLworICAgIC8qIGFsbG9jYXRlIG1lbW9yeSwgdGhlbiBzZXQgcGFyYW1ldGVycyAqLworICAgIGlmIChsID09IDApIHsKKyAgICAgICAgdi0+d29yZCA9IE5VTEw7CisgICAgICAgIHYtPmxlbmd0aCA9IDA7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9IGVsc2UgeworICAgICAgICB2LT53b3JkID0gKHVpbnQzMl90ICopc3J0cF9jcnlwdG9fYWxsb2MobCk7CisgICAgICAgIGlmICh2LT53b3JkID09IE5VTEwpIHsKKyAgICAgICAgICAgIHYtPmxlbmd0aCA9IDA7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgdi0+bGVuZ3RoID0gbGVuZ3RoOwogCi1pbnQKLWJhc2U2NF9jaGFyX3RvX3NleHRldChvY3RldF90IGMpIHsKLSAgc3dpdGNoKGMpIHsKLSAgY2FzZSAnQSc6CisgICAgLyogaW5pdGlhbGl6ZSBiaXR2ZWN0b3IgdG8gemVybyAqLworICAgIGJpdHZlY3Rvcl9zZXRfdG9femVybyh2KTsKKwogICAgIHJldHVybiAwOwotICBjYXNlICdCJzoKLSAgICByZXR1cm4gMTsKLSAgY2FzZSAnQyc6Ci0gICAgcmV0dXJuIDI7Ci0gIGNhc2UgJ0QnOgotICAgIHJldHVybiAzOwotICBjYXNlICdFJzoKLSAgICByZXR1cm4gNDsKLSAgY2FzZSAnRic6Ci0gICAgcmV0dXJuIDU7Ci0gIGNhc2UgJ0cnOgotICAgIHJldHVybiA2OwotICBjYXNlICdIJzoKLSAgICByZXR1cm4gNzsKLSAgY2FzZSAnSSc6Ci0gICAgcmV0dXJuIDg7Ci0gIGNhc2UgJ0onOgotICAgIHJldHVybiA5OwotICBjYXNlICdLJzoKLSAgICByZXR1cm4gMTA7Ci0gIGNhc2UgJ0wnOgotICAgIHJldHVybiAxMTsKLSAgY2FzZSAnTSc6Ci0gICAgcmV0dXJuIDEyOwotICBjYXNlICdOJzoKLSAgICByZXR1cm4gMTM7Ci0gIGNhc2UgJ08nOgotICAgIHJldHVybiAxNDsKLSAgY2FzZSAnUCc6Ci0gICAgcmV0dXJuIDE1OwotICBjYXNlICdRJzoKLSAgICByZXR1cm4gMTY7Ci0gIGNhc2UgJ1InOgotICAgIHJldHVybiAxNzsKLSAgY2FzZSAnUyc6Ci0gICAgcmV0dXJuIDE4OwotICBjYXNlICdUJzoKLSAgICByZXR1cm4gMTk7Ci0gIGNhc2UgJ1UnOgotICAgIHJldHVybiAyMDsKLSAgY2FzZSAnVic6Ci0gICAgcmV0dXJuIDIxOwotICBjYXNlICdXJzoKLSAgICByZXR1cm4gMjI7Ci0gIGNhc2UgJ1gnOgotICAgIHJldHVybiAyMzsKLSAgY2FzZSAnWSc6Ci0gICAgcmV0dXJuIDI0OwotICBjYXNlICdaJzoKLSAgICByZXR1cm4gMjU7Ci0gIGNhc2UgJ2EnOgotICAgIHJldHVybiAyNjsKLSAgY2FzZSAnYic6Ci0gICAgcmV0dXJuIDI3OwotICBjYXNlICdjJzoKLSAgICByZXR1cm4gMjg7Ci0gIGNhc2UgJ2QnOgotICAgIHJldHVybiAyOTsKLSAgY2FzZSAnZSc6Ci0gICAgcmV0dXJuIDMwOwotICBjYXNlICdmJzoKLSAgICByZXR1cm4gMzE7Ci0gIGNhc2UgJ2cnOgotICAgIHJldHVybiAzMjsKLSAgY2FzZSAnaCc6Ci0gICAgcmV0dXJuIDMzOwotICBjYXNlICdpJzoKLSAgICByZXR1cm4gMzQ7Ci0gIGNhc2UgJ2onOgotICAgIHJldHVybiAzNTsKLSAgY2FzZSAnayc6Ci0gICAgcmV0dXJuIDM2OwotICBjYXNlICdsJzoKLSAgICByZXR1cm4gMzc7Ci0gIGNhc2UgJ20nOgotICAgIHJldHVybiAzODsKLSAgY2FzZSAnbic6Ci0gICAgcmV0dXJuIDM5OwotICBjYXNlICdvJzoKLSAgICByZXR1cm4gNDA7Ci0gIGNhc2UgJ3AnOgotICAgIHJldHVybiA0MTsKLSAgY2FzZSAncSc6Ci0gICAgcmV0dXJuIDQyOwotICBjYXNlICdyJzoKLSAgICByZXR1cm4gNDM7Ci0gIGNhc2UgJ3MnOgotICAgIHJldHVybiA0NDsKLSAgY2FzZSAndCc6Ci0gICAgcmV0dXJuIDQ1OwotICBjYXNlICd1JzoKLSAgICByZXR1cm4gNDY7Ci0gIGNhc2UgJ3YnOgotICAgIHJldHVybiA0NzsKLSAgY2FzZSAndyc6Ci0gICAgcmV0dXJuIDQ4OwotICBjYXNlICd4JzoKLSAgICByZXR1cm4gNDk7Ci0gIGNhc2UgJ3knOgotICAgIHJldHVybiA1MDsKLSAgY2FzZSAneic6Ci0gICAgcmV0dXJuIDUxOwotICBjYXNlICcwJzoKLSAgICByZXR1cm4gNTI7Ci0gIGNhc2UgJzEnOgotICAgIHJldHVybiA1MzsKLSAgY2FzZSAnMic6Ci0gICAgcmV0dXJuIDU0OwotICBjYXNlICczJzoKLSAgICByZXR1cm4gNTU7Ci0gIGNhc2UgJzQnOgotICAgIHJldHVybiA1NjsKLSAgY2FzZSAnNSc6Ci0gICAgcmV0dXJuIDU3OwotICBjYXNlICc2JzoKLSAgICByZXR1cm4gNTg7Ci0gIGNhc2UgJzcnOgotICAgIHJldHVybiA1OTsKLSAgY2FzZSAnOCc6Ci0gICAgcmV0dXJuIDYwOwotICBjYXNlICc5JzoKLSAgICByZXR1cm4gNjE7Ci0gIGNhc2UgJysnOgotICAgIHJldHVybiA2MjsKLSAgY2FzZSAnLyc6Ci0gICAgcmV0dXJuIDYzOwotICBjYXNlICc9JzoKLSAgICByZXR1cm4gNjQ7Ci0gIGRlZmF1bHQ6Ci0gICAgcmV0dXJuIC0xOwotIH0KLSByZXR1cm4gLTE7CiB9CiAKLS8qCi0gKiBiYXNlNjRfc3RyaW5nX3RvX29jdGV0X3N0cmluZyBjb252ZXJ0cyBhIGhleGFkZWNpbWFsIHN0cmluZwotICogb2YgbGVuZ3RoIDIgKiBsZW4gdG8gYSByYXcgb2N0ZXQgc3RyaW5nIG9mIGxlbmd0aCBsZW4KLSAqLwotCi1pbnQKLWJhc2U2NF9zdHJpbmdfdG9fb2N0ZXRfc3RyaW5nKGNoYXIgKnJhdywgY2hhciAqYmFzZTY0LCBpbnQgbGVuKSB7Ci0gIG9jdGV0X3QgeDsKLSAgaW50IHRtcDsKLSAgaW50IGJhc2U2NF9sZW47Ci0KLSAgYmFzZTY0X2xlbiA9IDA7Ci0gIHdoaWxlIChiYXNlNjRfbGVuIDwgbGVuKSB7Ci0gICAgdG1wID0gYmFzZTY0X2NoYXJfdG9fc2V4dGV0KGJhc2U2NFswXSk7Ci0gICAgaWYgKHRtcCA9PSAtMSkKLSAgICAgIHJldHVybiBiYXNlNjRfbGVuOwotICAgIHggPSAodG1wIDw8IDYpOwotICAgIGJhc2U2NF9sZW4rKzsKLSAgICB0bXAgPSBiYXNlNjRfY2hhcl90b19zZXh0ZXQoYmFzZTY0WzFdKTsKLSAgICBpZiAodG1wID09IC0xKQotICAgICAgcmV0dXJuIGJhc2U2NF9sZW47Ci0gICAgeCB8PSAodG1wICYgMHhmZmZmKTsKLSAgICBiYXNlNjRfbGVuKys7Ci0gICAgKnJhdysrID0geDsKLSAgICBiYXNlNjQgKz0gMjsKLSAgfQotICByZXR1cm4gYmFzZTY0X2xlbjsKK3ZvaWQgYml0dmVjdG9yX2RlYWxsb2MoYml0dmVjdG9yX3QgKnYpCit7CisgICAgaWYgKHYtPndvcmQgIT0gTlVMTCkKKyAgICAgICAgc3J0cF9jcnlwdG9fZnJlZSh2LT53b3JkKTsKKyAgICB2LT53b3JkID0gTlVMTDsKKyAgICB2LT5sZW5ndGggPSAwOwogfQorCit2b2lkIGJpdHZlY3Rvcl9zZXRfdG9femVybyhiaXR2ZWN0b3JfdCAqeCkKK3sKKyAgICAvKiBDOTkgZ3VhcmFudGVlcyB0aGF0IG1lbXNldCgwKSB3aWxsIHNldCB0aGUgdmFsdWUgMCBmb3IgdWludDMyX3QgKi8KKyAgICBtZW1zZXQoeC0+d29yZCwgMCwgeC0+bGVuZ3RoID4+IDMpOworfQorCitjaGFyICpiaXR2ZWN0b3JfYml0X3N0cmluZyhiaXR2ZWN0b3JfdCAqeCwgY2hhciAqYnVmLCBpbnQgbGVuKQoreworICAgIGludCBqLCBpOworICAgIHVpbnQzMl90IG1hc2s7CisKKyAgICBmb3IgKGogPSBpID0gMDsgaiA8IChpbnQpKHgtPmxlbmd0aCA+PiA1KSAmJiBpIDwgbGVuIC0gMTsgaisrKSB7CisgICAgICAgIGZvciAobWFzayA9IDB4ODAwMDAwMDA7IG1hc2sgPiAwOyBtYXNrID4+PSAxKSB7CisgICAgICAgICAgICBpZiAoeC0+d29yZFtqXSAmIG1hc2spCisgICAgICAgICAgICAgICAgYnVmW2ldID0gJzEnOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJ1ZltpXSA9ICcwJzsKKyAgICAgICAgICAgICsraTsKKyAgICAgICAgICAgIGlmIChpID49IGxlbiAtIDEpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgYnVmW2ldID0gMDsgLyogbnVsbCB0ZXJtaW5hdGUgc3RyaW5nICovCisKKyAgICByZXR1cm4gYnVmOworfQorCit2b2lkIGJpdHZlY3Rvcl9sZWZ0X3NoaWZ0KGJpdHZlY3Rvcl90ICp4LCBpbnQgc2hpZnQpCit7CisgICAgaW50IGk7CisgICAgY29uc3QgaW50IGJhc2VfaW5kZXggPSBzaGlmdCA+PiA1OworICAgIGNvbnN0IGludCBiaXRfaW5kZXggPSBzaGlmdCAmIDMxOworICAgIGNvbnN0IGludCB3b3JkX2xlbmd0aCA9IHgtPmxlbmd0aCA+PiA1OworCisgICAgaWYgKHNoaWZ0ID49IChpbnQpeC0+bGVuZ3RoKSB7CisgICAgICAgIGJpdHZlY3Rvcl9zZXRfdG9femVybyh4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChiaXRfaW5kZXggPT0gMCkgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd29yZF9sZW5ndGggLSBiYXNlX2luZGV4OyBpKyspCisgICAgICAgICAgICB4LT53b3JkW2ldID0geC0+d29yZFtpICsgYmFzZV9pbmRleF07CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHdvcmRfbGVuZ3RoIC0gYmFzZV9pbmRleCAtIDE7IGkrKykKKyAgICAgICAgICAgIHgtPndvcmRbaV0gPSAoeC0+d29yZFtpICsgYmFzZV9pbmRleF0gPj4gYml0X2luZGV4KSBeCisgICAgICAgICAgICAgICAgICAgICAgICAgKHgtPndvcmRbaSArIGJhc2VfaW5kZXggKyAxXSA8PCAoMzIgLSBiaXRfaW5kZXgpKTsKKyAgICAgICAgeC0+d29yZFt3b3JkX2xlbmd0aCAtIGJhc2VfaW5kZXggLSAxXSA9CisgICAgICAgICAgICB4LT53b3JkW3dvcmRfbGVuZ3RoIC0gMV0gPj4gYml0X2luZGV4OworICAgIH0KKworICAgIC8qIG5vdyB3cmFwIHVwIHRoZSBmaW5hbCBwb3J0aW9uICovCisgICAgZm9yIChpID0gd29yZF9sZW5ndGggLSBiYXNlX2luZGV4OyBpIDwgd29yZF9sZW5ndGg7IGkrKykKKyAgICAgICAgeC0+d29yZFtpXSA9IDA7Cit9CisKK2ludCBzcnRwX29jdGV0X3N0cmluZ19pc19lcSh1aW50OF90ICphLCB1aW50OF90ICpiLCBpbnQgbGVuKQoreworICAgIHVpbnQ4X3QgKmVuZCA9IGIgKyBsZW47CisgICAgdWludDhfdCBhY2N1bXVsYXRvciA9IDA7CisKKyAgICAvKgorICAgICAqIFdlIHVzZSB0aGlzIHNvbWV3aGF0IG9ic2N1cmUgaW1wbGVtZW50YXRpb24gdG8gdHJ5IHRvIGVuc3VyZSB0aGUgcnVubmluZworICAgICAqIHRpbWUgb25seSBkZXBlbmRzIG9uIGxlbiwgZXZlbiBhY2NvdW50aW5nIGZvciBjb21waWxlciBvcHRpbWl6YXRpb25zLgorICAgICAqIFRoZSBhY2N1bXVsYXRvciBlbmRzIHVwIHplcm8gaWZmIHRoZSBzdHJpbmdzIGFyZSBlcXVhbC4KKyAgICAgKi8KKyAgICB3aGlsZSAoYiA8IGVuZCkKKyAgICAgICAgYWNjdW11bGF0b3IgfD0gKCphKysgXiAqYisrKTsKKworICAgIC8qIFJldHVybiAxIGlmICpub3QqIGVxdWFsLiAqLworICAgIHJldHVybiBhY2N1bXVsYXRvciAhPSAwOworfQorCit2b2lkIHNydHBfY2xlYW5zZSh2b2lkICpzLCBzaXplX3QgbGVuKQoreworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXM7CisgICAgd2hpbGUgKGxlbi0tKQorICAgICAgICAqcCsrID0gMDsKK30KKwordm9pZCBvY3RldF9zdHJpbmdfc2V0X3RvX3plcm8odm9pZCAqcywgc2l6ZV90IGxlbikKK3sKKyNpZiBkZWZpbmVkKE9QRU5TU0wpICYmICFkZWZpbmVkKE9QRU5TU0xfQ0xFQU5TRV9CUk9LRU4pCisgICAgT1BFTlNTTF9jbGVhbnNlKHMsIGxlbik7CisjZWxzZQorICAgIHNydHBfY2xlYW5zZShzLCBsZW4pOworI2VuZGlmCit9CisKKyNpZmRlZiBURVNUQVBQX1NPVVJDRQorCitzdGF0aWMgY29uc3QgY2hhciBiNjRjaGFyc1tdID0gIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CisKK3N0YXRpYyBpbnQgYmFzZTY0X2Jsb2NrX3RvX29jdGV0X3RyaXBsZShjaGFyICpvdXQsIGNoYXIgKmluKQoreworICAgIHVuc2lnbmVkIGNoYXIgc2V4dGV0c1s0XSA9IHsgMCB9OworICAgIGludCBqID0gMDsKKyAgICBpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAgICAgY2hhciAqcCA9IHN0cmNocihiNjRjaGFycywgaW5baV0pOworICAgICAgICBpZiAocCAhPSBOVUxMKQorICAgICAgICAgICAgc2V4dGV0c1tpXSA9IHAgLSBiNjRjaGFyczsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaisrOworICAgIH0KKworICAgIG91dFswXSA9IChzZXh0ZXRzWzBdIDw8IDIpIHwgKHNleHRldHNbMV0gPj4gNCk7CisgICAgaWYgKGogPCAyKQorICAgICAgICBvdXRbMV0gPSAoc2V4dGV0c1sxXSA8PCA0KSB8IChzZXh0ZXRzWzJdID4+IDIpOworICAgIGlmIChqIDwgMSkKKyAgICAgICAgb3V0WzJdID0gKHNleHRldHNbMl0gPDwgNikgfCBzZXh0ZXRzWzNdOworICAgIHJldHVybiBqOworfQorCitpbnQgYmFzZTY0X3N0cmluZ190b19vY3RldF9zdHJpbmcoY2hhciAqb3V0LCBpbnQgKnBhZCwgY2hhciAqaW4sIGludCBsZW4pCit7CisgICAgaW50IGsgPSAwOworICAgIGludCBpID0gMDsKKyAgICBpbnQgaiA9IDA7CisgICAgaWYgKGxlbiAlIDQgIT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB3aGlsZSAoaSA8IGxlbiAmJiBqID09IDApIHsKKyAgICAgICAgaiA9IGJhc2U2NF9ibG9ja190b19vY3RldF90cmlwbGUob3V0ICsgaywgaW4gKyBpKTsKKyAgICAgICAgayArPSAzOworICAgICAgICBpICs9IDQ7CisgICAgfQorICAgICpwYWQgPSBqOworICAgIHJldHVybiBpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NyeXB0by9tYXRoL2dmMl84LmMgYi9jcnlwdG8vbWF0aC9nZjJfOC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWI2MTY5Li4wMDAwMDAwCi0tLSBhL2NyeXB0by9tYXRoL2dmMl84LmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKgotICogZ2YyXzguYwotICoKLSAqIEdGKDI1NikgZmluaXRlIGZpZWxkIGltcGxlbWVudGF0aW9uLCB3aXRoIHRoZSByZXByZXNlbnRhdGlvbiB1c2VkCi0gKiBpbiB0aGUgQUVTIGNpcGhlci4KLSAqIAotICogRGF2aWQgQS4gTWNHcmV3Ci0gKiBDaXNjbyBTeXN0ZW1zLCBJbmMuCi0gKi8KLQotLyoKLSAqCQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUsIENpc2NvIFN5c3RlbXMsIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogCi0gKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIAotICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAotICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqLwotCi0KLSNpbmNsdWRlICJkYXRhdHlwZXMuaCIKLSNpbmNsdWRlICJnZjJfOC5oIgotCi0vKgotICogZ2YyXzhfc2hpZnQoeCkgcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBHRigyXjgpICdtdWx0aXBseSBieSB4JyAKLSAqIG9wZXJhdGlvbiwgdXNpbmcgdGhlIGZpZWxkIHJlcHJlc2VudGF0aW9uIGZyb20gQUVTLiAgCi0gKi8KLQotaW5saW5lIGdmMl84Ci1nZjJfOF9zaGlmdChnZjJfOCBpbnB1dCkgewotICBpZiAoKGlucHV0ICYgMTI4KSA9PSAwKQotICAgIHJldHVybiBpbnB1dCA8PCAxOwotICBlbHNlCi0gICAgcmV0dXJuIChpbnB1dCA8PCAxKSBeIGdmMl84X2ZpZWxkX3BvbHlub21pYWw7IAotfQotCi1pbmxpbmUgZ2YyXzgKLWdmMl84X211bHRpcGx5KGdmMl84IHgsIGdmMl84IHkpIHsKLSAgZ2YyXzggeiA9IDA7Ci0KLSAgaWYgKHkgJiAgIDEpIHogXj0geDsgeCA9IGdmMl84X3NoaWZ0KHgpOwotICBpZiAoeSAmICAgMikgeiBePSB4OyB4ID0gZ2YyXzhfc2hpZnQoeCk7Ci0gIGlmICh5ICYgICA0KSB6IF49IHg7IHggPSBnZjJfOF9zaGlmdCh4KTsKLSAgaWYgKHkgJiAgIDgpIHogXj0geDsgeCA9IGdmMl84X3NoaWZ0KHgpOwotICBpZiAoeSAmICAxNikgeiBePSB4OyB4ID0gZ2YyXzhfc2hpZnQoeCk7Ci0gIGlmICh5ICYgIDMyKSB6IF49IHg7IHggPSBnZjJfOF9zaGlmdCh4KTsKLSAgaWYgKHkgJiAgNjQpIHogXj0geDsgeCA9IGdmMl84X3NoaWZ0KHgpOwotICBpZiAoeSAmIDEyOCkgeiBePSB4OyAKLSAgCi0gIHJldHVybiB6OwotfQotCi0KLS8qIHRoaXMgc2hvdWxkIHVzZSB0aGUgZXVjbGlkZWFuIGFsZ29yaXRobSAqLwotCi1nZjJfOAotZ2YyXzhfY29tcHV0ZV9pbnZlcnNlKGdmMl84IHgpIHsKLSAgdW5zaWduZWQgaW50IGk7Ci0KLSAgaWYgKHggPT0gMCkgcmV0dXJuIDA7ICAgIC8qIHplcm8gaXMgYSBzcGVjaWFsIGNhc2UgKi8KLSAgZm9yIChpPTA7IGkgPCAyNTY7IGkrKykKLSAgICBpZiAoZ2YyXzhfbXVsdGlwbHkoKGdmMl84KSBpLCB4KSA9PSAxKQotICAgICAgcmV0dXJuIChnZjJfOCkgaTsKLQotICAgIHJldHVybiAwOwotfQotCmRpZmYgLS1naXQgYS9jcnlwdG8vbWF0aC9tYXRoLmMgYi9jcnlwdG8vbWF0aC9tYXRoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmOWFmM2YuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL21hdGgvbWF0aC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTYxICswLDAgQEAKLS8qCi0gKiBtYXRoLmMKLSAqCi0gKiBjcnlwdG8gbWF0aCBvcGVyYXRpb25zIGFuZCBkYXRhIHR5cGVzCi0gKgotICogRGF2aWQgQS4gTWNHcmV3Ci0gKiBDaXNjbyBTeXN0ZW1zLCBJbmMuCi0gKi8KLS8qCi0gKgkKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA1IENpc2NvIFN5c3RlbXMsIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogCi0gKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIAotICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAotICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqLwotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgPHN0ZGxpYi5oPiAgICAgICAgICAgLyogbWFsbG9jKCkgdXNlZCBpbiBiaXR2ZWN0b3JfYWxsb2MgKi8KLQotaW50IAotb2N0ZXRfd2VpZ2h0WzI1Nl0gPSB7Ci0gIDAsIDEsIDEsIDIsIDEsIDIsIDIsIDMsCi0gIDEsIDIsIDIsIDMsIDIsIDMsIDMsIDQsCi0gIDEsIDIsIDIsIDMsIDIsIDMsIDMsIDQsCi0gIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsCi0gIDEsIDIsIDIsIDMsIDIsIDMsIDMsIDQsCi0gIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsCi0gIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsCi0gIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCi0gIDEsIDIsIDIsIDMsIDIsIDMsIDMsIDQsCi0gIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsCi0gIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsCi0gIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCi0gIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsCi0gIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCi0gIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCi0gIDQsIDUsIDUsIDYsIDUsIDYsIDYsIDcsCi0gIDEsIDIsIDIsIDMsIDIsIDMsIDMsIDQsCi0gIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsCi0gIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsCi0gIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCi0gIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsCi0gIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCi0gIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCi0gIDQsIDUsIDUsIDYsIDUsIDYsIDYsIDcsCi0gIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsCi0gIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCi0gIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCi0gIDQsIDUsIDUsIDYsIDUsIDYsIDYsIDcsCi0gIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCi0gIDQsIDUsIDUsIDYsIDUsIDYsIDYsIDcsCi0gIDQsIDUsIDUsIDYsIDUsIDYsIDYsIDcsCi0gIDUsIDYsIDYsIDcsIDYsIDcsIDcsIDgKLX07Ci0KLWludAotbG93X2JpdFsyNTZdID0gewotICAtMSwgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgNCwgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgNSwgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgNCwgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgNiwgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgNCwgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgNSwgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgNCwgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgNywgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgNCwgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgNSwgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgNCwgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgNiwgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgNCwgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgNSwgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgNCwgMCwgMSwgMCwgMiwgMCwgMSwgMCwKLSAgMywgMCwgMSwgMCwgMiwgMCwgMSwgMAotfTsKLQotCi1pbnQKLWhpZ2hfYml0WzI1Nl0gPSB7Ci0gIC0xLCAwLCAxLCAxLCAyLCAyLCAyLCAyLAotICAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLAotICA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LAotICA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LAotICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LAotICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LAotICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LAotICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LAotICA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LAotICA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LAotICA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LAotICA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LAotICA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LAotICA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LAotICA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LAotICA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LAotICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAotICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAotICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAotICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAotICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAotICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAotICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAotICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAotICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAotICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAotICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAotICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAotICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAotICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAotICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAotICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3Ci19OwotCi1pbnQKLW9jdGV0X2dldF93ZWlnaHQob2N0ZXRfdCBvY3RldCkgewotICBleHRlcm4gaW50IG9jdGV0X3dlaWdodFsyNTZdOwotCi0gIHJldHVybiBvY3RldF93ZWlnaHRbb2N0ZXRdOwotfSAgCi0KLXVuc2lnbmVkIGNoYXIKLXYzMl93ZWlnaHQodjMyX3QgYSkgewotICB1bnNpZ25lZCBpbnQgd3QgPSAwOwotICAKLSAgd3QgKz0gb2N0ZXRfd2VpZ2h0W2Eub2N0ZXRbMF1dOyAgLyogbm90ZTogZW5kaWFuLW5lc3MgbWFrZXMgbm8gZGlmZmVyZW5jZSAqLwotICB3dCArPSBvY3RldF93ZWlnaHRbYS5vY3RldFsxXV07Ci0gIHd0ICs9IG9jdGV0X3dlaWdodFthLm9jdGV0WzJdXTsKLSAgd3QgKz0gb2N0ZXRfd2VpZ2h0W2Eub2N0ZXRbM11dOwotICAKLSAgcmV0dXJuIHd0OwotfQotCi1pbmxpbmUgdW5zaWduZWQgY2hhcgotdjMyX2Rpc3RhbmNlKHYzMl90IHgsIHYzMl90IHkpIHsKLSAgeC52YWx1ZSBePSB5LnZhbHVlOwotICByZXR1cm4gdjMyX3dlaWdodCh4KTsKLX0KLQotdW5zaWduZWQgaW50Ci12MzJfZG90X3Byb2R1Y3QodjMyX3QgYSwgdjMyX3QgYikgewotICBhLnZhbHVlICY9IGIudmFsdWU7Ci0gIHJldHVybiB2MzJfd2VpZ2h0KGEpICYgMTsKLX0KLQotLyoKLSAqIF9iaXRfc3RyaW5nIHJldHVybnMgYSBOVUxMLXRlcm1pbmF0ZWQgY2hhcmFjdGVyIHN0cmluZyBzdWl0YWJsZSBmb3IKLSAqIHByaW50aW5nCi0gKi8KLQotI2RlZmluZSBNQVhfU1RSSU5HX0xFTkdUSCAxMDI0Ci0KLWNoYXIgYml0X3N0cmluZ1tNQVhfU1RSSU5HX0xFTkdUSF07Ci0KLWNoYXIgKgotb2N0ZXRfYml0X3N0cmluZyhvY3RldF90IHgpIHsKLSAgaW50IG1hc2ssIGluZGV4OwotCi0gIGZvciAobWFzayA9IDEsIGluZGV4ID0gMDsgbWFzayA8IDI1NjsgbWFzayA8PD0gMSkKLSAgICBpZiAoKHggJiBtYXNrKSA9PSAwKQotICAgICAgYml0X3N0cmluZ1tpbmRleCsrXSA9ICcwJzsKLSAgICBlbHNlCi0gICAgICBiaXRfc3RyaW5nW2luZGV4KytdID0gJzEnOwotCi0gIGJpdF9zdHJpbmdbaW5kZXgrK10gPSAwOyAgLyogTlVMTCB0ZXJtaW5hdGUgc3RyaW5nICovCi0KLSAgcmV0dXJuIGJpdF9zdHJpbmc7Ci19Ci0KLWNoYXIgKgotdjE2X2JpdF9zdHJpbmcodjE2X3QgeCkgewotICBpbnQgaSwgbWFzaywgaW5kZXg7Ci0KLSAgZm9yIChpID0gaW5kZXggPSAwOyBpIDwgMjsgaSsrKSB7Ci0gICAgZm9yIChtYXNrID0gMTsgbWFzayA8IDI1NjsgbWFzayA8PD0gMSkKLSAgICAgIGlmICgoeC5vY3RldFtpXSAmIG1hc2spID09IDApCi0JYml0X3N0cmluZ1tpbmRleCsrXSA9ICcwJzsKLSAgICAgIGVsc2UKLQliaXRfc3RyaW5nW2luZGV4KytdID0gJzEnOwotICB9Ci0gIGJpdF9zdHJpbmdbaW5kZXgrK10gPSAwOyAgLyogTlVMTCB0ZXJtaW5hdGUgc3RyaW5nICovCi0gIHJldHVybiBiaXRfc3RyaW5nOwotfQotCi1jaGFyICoKLXYzMl9iaXRfc3RyaW5nKHYzMl90IHgpIHsKLSAgaW50IGksIG1hc2ssIGluZGV4OwotCi0gIGZvciAoaSA9IGluZGV4ID0gMDsgaSA8IDQ7IGkrKykgewotICAgIGZvciAobWFzayA9IDEyODsgbWFzayA+IDA7IG1hc2sgPj49IDEpCi0gICAgICBpZiAoKHgub2N0ZXRbaV0gJiBtYXNrKSA9PSAwKQotCWJpdF9zdHJpbmdbaW5kZXgrK10gPSAnMCc7Ci0gICAgICBlbHNlCi0JYml0X3N0cmluZ1tpbmRleCsrXSA9ICcxJzsKLSAgfQotICBiaXRfc3RyaW5nW2luZGV4KytdID0gMDsgIC8qIE5VTEwgdGVybWluYXRlIHN0cmluZyAqLwotICByZXR1cm4gYml0X3N0cmluZzsKLX0KLQotY2hhciAqCi12NjRfYml0X3N0cmluZyh2NjRfdCAqeCkgewotICBpbnQgaSwgbWFzaywgaW5kZXg7Ci0KLSAgZm9yIChpID0gaW5kZXggPSAwOyBpIDwgODsgaSsrKSB7Ci0gICAgZm9yIChtYXNrID0gMTsgbWFzayA8IDI1NjsgbWFzayA8PD0gMSkKLSAgICAgIGlmICgoeC0+b2N0ZXRbaV0gJiBtYXNrKSA9PSAwKQotCWJpdF9zdHJpbmdbaW5kZXgrK10gPSAnMCc7Ci0gICAgICBlbHNlCi0JYml0X3N0cmluZ1tpbmRleCsrXSA9ICcxJzsKLSAgfQotICBiaXRfc3RyaW5nW2luZGV4KytdID0gMDsgIC8qIE5VTEwgdGVybWluYXRlIHN0cmluZyAqLwotICByZXR1cm4gYml0X3N0cmluZzsKLX0KLQotY2hhciAqCi12MTI4X2JpdF9zdHJpbmcodjEyOF90ICp4KSB7Ci0gIGludCBqLCBpbmRleDsKLSAgdWludDMyX3QgbWFzazsKLSAgCi0gIGZvciAoaj1pbmRleD0wOyBqIDwgNDsgaisrKSB7Ci0gICAgZm9yIChtYXNrPTB4ODAwMDAwMDA7IG1hc2sgPiAwOyBtYXNrID4+PSAxKSB7Ci0gICAgICBpZiAoeC0+djMyW2pdICYgbWFzaykKLQliaXRfc3RyaW5nW2luZGV4XSA9ICcxJzsKLSAgICAgIGVsc2UKLQliaXRfc3RyaW5nW2luZGV4XSA9ICcwJzsKLSAgICAgICsraW5kZXg7Ci0gICAgfQotICB9Ci0gIGJpdF9zdHJpbmdbMTI4XSA9IDA7IC8qIG51bGwgdGVybWluYXRlIHN0cmluZyAqLwotCi0gIHJldHVybiBiaXRfc3RyaW5nOwotfQotCi1vY3RldF90Ci1uaWJibGVfdG9faGV4X2NoYXIob2N0ZXRfdCBuaWJibGUpIHsKLSAgY2hhciBidWZbMTZdID0geycwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLAotCQkgICc4JywgJzknLCAnYScsICdiJywgJ2MnLCAnZCcsICdlJywgJ2YnIH07Ci0gIHJldHVybiBidWZbbmliYmxlICYgMHhGXTsKLX0KLQotY2hhciAqCi1vY3RldF9oZXhfc3RyaW5nKG9jdGV0X3QgeCkgewotCi0gIGJpdF9zdHJpbmdbMF0gID0gbmliYmxlX3RvX2hleF9jaGFyKHggPj4gNCk7Ci0gIGJpdF9zdHJpbmdbMV0gID0gbmliYmxlX3RvX2hleF9jaGFyKHggJiAweEYpOwotICAKLSAgYml0X3N0cmluZ1syXSA9IDA7IC8qIG51bGwgdGVybWluYXRlIHN0cmluZyAqLwotICByZXR1cm4gYml0X3N0cmluZzsKLX0KLQotY2hhciAqCi1vY3RldF9zdHJpbmdfaGV4X3N0cmluZyhjb25zdCBvY3RldF90ICpzdHIsIGludCBsZW5ndGgpIHsKLSAgaW50IGk7Ci0gIAotICAvKiBkb3VibGUgbGVuZ3RoLCBzaW5jZSBvbmUgb2N0ZXQgdGFrZXMgdHdvIGhleCBjaGFyYWN0ZXJzICovCi0gIGxlbmd0aCAqPSAyOwotCi0gIC8qIHRydW5jYXRlIHN0cmluZyBpZiBpdCB3b3VsZCBiZSB0b28gbG9uZyAqLwotICBpZiAobGVuZ3RoID4gTUFYX1NUUklOR19MRU5HVEgpCi0gICAgbGVuZ3RoID0gTUFYX1NUUklOR19MRU5HVEgtMTsKLSAgCi0gIGZvciAoaT0wOyBpIDwgbGVuZ3RoOyBpKz0yKSB7Ci0gICAgYml0X3N0cmluZ1tpXSAgID0gbmliYmxlX3RvX2hleF9jaGFyKCpzdHIgPj4gNCk7Ci0gICAgYml0X3N0cmluZ1tpKzFdID0gbmliYmxlX3RvX2hleF9jaGFyKCpzdHIrKyAmIDB4Rik7Ci0gIH0KLSAgYml0X3N0cmluZ1tpXSA9IDA7IC8qIG51bGwgdGVybWluYXRlIHN0cmluZyAqLwotICByZXR1cm4gYml0X3N0cmluZzsKLX0KLQotY2hhciAqCi12MTZfaGV4X3N0cmluZyh2MTZfdCB4KSB7Ci0gIGludCBpLCBqOwotCi0gIGZvciAoaT1qPTA7IGkgPCAyOyBpKyspIHsKLSAgICBiaXRfc3RyaW5nW2orK10gID0gbmliYmxlX3RvX2hleF9jaGFyKHgub2N0ZXRbaV0gPj4gNCk7Ci0gICAgYml0X3N0cmluZ1tqKytdICA9IG5pYmJsZV90b19oZXhfY2hhcih4Lm9jdGV0W2ldICYgMHhGKTsKLSAgfQotICAKLSAgYml0X3N0cmluZ1tqXSA9IDA7IC8qIG51bGwgdGVybWluYXRlIHN0cmluZyAqLwotICByZXR1cm4gYml0X3N0cmluZzsKLX0KLQotY2hhciAqCi12MzJfaGV4X3N0cmluZyh2MzJfdCB4KSB7Ci0gIGludCBpLCBqOwotCi0gIGZvciAoaT1qPTA7IGkgPCA0OyBpKyspIHsKLSAgICBiaXRfc3RyaW5nW2orK10gID0gbmliYmxlX3RvX2hleF9jaGFyKHgub2N0ZXRbaV0gPj4gNCk7Ci0gICAgYml0X3N0cmluZ1tqKytdICA9IG5pYmJsZV90b19oZXhfY2hhcih4Lm9jdGV0W2ldICYgMHhGKTsKLSAgfQotICAKLSAgYml0X3N0cmluZ1tqXSA9IDA7IC8qIG51bGwgdGVybWluYXRlIHN0cmluZyAqLwotICByZXR1cm4gYml0X3N0cmluZzsKLX0KLQotY2hhciAqCi12NjRfaGV4X3N0cmluZyh2NjRfdCAqeCkgewotICBpbnQgaSwgajsKLQotICBmb3IgKGk9aj0wOyBpIDwgODsgaSsrKSB7Ci0gICAgYml0X3N0cmluZ1tqKytdICA9IG5pYmJsZV90b19oZXhfY2hhcih4LT5vY3RldFtpXSA+PiA0KTsKLSAgICBiaXRfc3RyaW5nW2orK10gID0gbmliYmxlX3RvX2hleF9jaGFyKHgtPm9jdGV0W2ldICYgMHhGKTsKLSAgfQotICAKLSAgYml0X3N0cmluZ1tqXSA9IDA7IC8qIG51bGwgdGVybWluYXRlIHN0cmluZyAqLwotICByZXR1cm4gYml0X3N0cmluZzsKLX0KLQotY2hhciAqCi12MTI4X2hleF9zdHJpbmcodjEyOF90ICp4KSB7Ci0gIGludCBpLCBqOwotCi0gIGZvciAoaT1qPTA7IGkgPCAxNjsgaSsrKSB7Ci0gICAgYml0X3N0cmluZ1tqKytdICA9IG5pYmJsZV90b19oZXhfY2hhcih4LT5vY3RldFtpXSA+PiA0KTsKLSAgICBiaXRfc3RyaW5nW2orK10gID0gbmliYmxlX3RvX2hleF9jaGFyKHgtPm9jdGV0W2ldICYgMHhGKTsKLSAgfQotICAKLSAgYml0X3N0cmluZ1tqXSA9IDA7IC8qIG51bGwgdGVybWluYXRlIHN0cmluZyAqLwotICByZXR1cm4gYml0X3N0cmluZzsKLX0KLQotY2hhciAqCi1jaGFyX3RvX2hleF9zdHJpbmcoY2hhciAqeCwgaW50IG51bV9jaGFyKSB7Ci0gIGludCBpLCBqOwotCi0gIGlmIChudW1fY2hhciA+PSAxNikKLSAgICBudW1fY2hhciA9IDE2OwotICBmb3IgKGk9aj0wOyBpIDwgbnVtX2NoYXI7IGkrKykgewotICAgIGJpdF9zdHJpbmdbaisrXSAgPSBuaWJibGVfdG9faGV4X2NoYXIoeFtpXSA+PiA0KTsKLSAgICBiaXRfc3RyaW5nW2orK10gID0gbmliYmxlX3RvX2hleF9jaGFyKHhbaV0gJiAweEYpOwotICB9Ci0gIAotICBiaXRfc3RyaW5nW2pdID0gMDsgLyogbnVsbCB0ZXJtaW5hdGUgc3RyaW5nICovCi0gIHJldHVybiBiaXRfc3RyaW5nOwotfQotCi1pbnQKLWhleF9jaGFyX3RvX25pYmJsZShvY3RldF90IGMpIHsKLSAgc3dpdGNoKGMpIHsKLSAgY2FzZSAoJzAnKTogcmV0dXJuIDB4MDsKLSAgY2FzZSAoJzEnKTogcmV0dXJuIDB4MTsKLSAgY2FzZSAoJzInKTogcmV0dXJuIDB4MjsKLSAgY2FzZSAoJzMnKTogcmV0dXJuIDB4MzsKLSAgY2FzZSAoJzQnKTogcmV0dXJuIDB4NDsKLSAgY2FzZSAoJzUnKTogcmV0dXJuIDB4NTsKLSAgY2FzZSAoJzYnKTogcmV0dXJuIDB4NjsKLSAgY2FzZSAoJzcnKTogcmV0dXJuIDB4NzsKLSAgY2FzZSAoJzgnKTogcmV0dXJuIDB4ODsKLSAgY2FzZSAoJzknKTogcmV0dXJuIDB4OTsKLSAgY2FzZSAoJ2EnKTogcmV0dXJuIDB4YTsKLSAgY2FzZSAoJ0EnKTogcmV0dXJuIDB4YTsKLSAgY2FzZSAoJ2InKTogcmV0dXJuIDB4YjsKLSAgY2FzZSAoJ0InKTogcmV0dXJuIDB4YjsKLSAgY2FzZSAoJ2MnKTogcmV0dXJuIDB4YzsKLSAgY2FzZSAoJ0MnKTogcmV0dXJuIDB4YzsKLSAgY2FzZSAoJ2QnKTogcmV0dXJuIDB4ZDsKLSAgY2FzZSAoJ0QnKTogcmV0dXJuIDB4ZDsKLSAgY2FzZSAoJ2UnKTogcmV0dXJuIDB4ZTsKLSAgY2FzZSAoJ0UnKTogcmV0dXJuIDB4ZTsKLSAgY2FzZSAoJ2YnKTogcmV0dXJuIDB4ZjsKLSAgY2FzZSAoJ0YnKTogcmV0dXJuIDB4ZjsKLSAgZGVmYXVsdDogcmV0dXJuIC0xOyAgIC8qIHRoaXMgZmxhZ3MgYW4gZXJyb3IgKi8KLSAgfQotICAvKiBOT1RSRUFDSEVEICovCi0gIHJldHVybiAtMTsgIC8qIHRoaXMga2VlcHMgY29tcGlsZXJzIGZyb20gY29tcGxhaW5pbmcgKi8KLX0KLQotaW50Ci1pc19oZXhfc3RyaW5nKGNoYXIgKnMpIHsKLSAgd2hpbGUoKnMgIT0gMCkKLSAgICBpZiAoaGV4X2NoYXJfdG9fbmliYmxlKCpzKyspID09IC0xKQotICAgICAgcmV0dXJuIDA7Ci0gIHJldHVybiAxOwotfQotCi1vY3RldF90Ci1oZXhfc3RyaW5nX3RvX29jdGV0KGNoYXIgKnMpIHsKLSAgb2N0ZXRfdCB4OwotCi0gIHggPSAoaGV4X2NoYXJfdG9fbmliYmxlKHNbMF0pIDw8IDQpCi0gICAgfCBoZXhfY2hhcl90b19uaWJibGUoc1sxXSAmIDB4RkYpOwotICAKLSAgcmV0dXJuIHg7Ci19Ci0KLS8qCi0gKiBoZXhfc3RyaW5nX3RvX29jdGV0X3N0cmluZyBjb252ZXJ0cyBhIGhleGFkZWNpbWFsIHN0cmluZwotICogb2YgbGVuZ3RoIDIgKiBsZW4gdG8gYSByYXcgb2N0ZXQgc3RyaW5nIG9mIGxlbmd0aCBsZW4KLSAqLwotCi1pbnQKLWhleF9zdHJpbmdfdG9fb2N0ZXRfc3RyaW5nKGNoYXIgKnJhdywgY2hhciAqaGV4LCBpbnQgbGVuKSB7Ci0gIG9jdGV0X3QgeDsKLSAgaW50IHRtcDsKLSAgaW50IGhleF9sZW47Ci0KLSAgaGV4X2xlbiA9IDA7Ci0gIHdoaWxlIChoZXhfbGVuIDwgbGVuKSB7Ci0gICAgdG1wID0gaGV4X2NoYXJfdG9fbmliYmxlKGhleFswXSk7Ci0gICAgaWYgKHRtcCA9PSAtMSkKLSAgICAgIHJldHVybiBoZXhfbGVuOwotICAgIHggPSAodG1wIDw8IDQpOwotICAgIGhleF9sZW4rKzsKLSAgICB0bXAgPSBoZXhfY2hhcl90b19uaWJibGUoaGV4WzFdKTsKLSAgICBpZiAodG1wID09IC0xKQotICAgICAgcmV0dXJuIGhleF9sZW47Ci0gICAgeCB8PSAodG1wICYgMHhmZik7Ci0gICAgaGV4X2xlbisrOwotICAgICpyYXcrKyA9IHg7Ci0gICAgaGV4ICs9IDI7Ci0gIH0KLSAgcmV0dXJuIGhleF9sZW47Ci19Ci0KLXYxNl90Ci1oZXhfc3RyaW5nX3RvX3YxNihjaGFyICpzKSB7Ci0gIHYxNl90IHg7Ci0gIGludCBpLCBqOwotCi0gIGZvciAoaT1qPTA7IGkgPCA0OyBpICs9IDIsIGorKykgewotICAgIHgub2N0ZXRbal0gPSAoaGV4X2NoYXJfdG9fbmliYmxlKHNbaV0pIDw8IDQpCi0gICAgICB8IGhleF9jaGFyX3RvX25pYmJsZShzW2krMV0gJiAweEZGKTsKLSAgfQotICByZXR1cm4geDsKLX0KLQotdjMyX3QKLWhleF9zdHJpbmdfdG9fdjMyKGNoYXIgKnMpIHsKLSAgdjMyX3QgeDsKLSAgaW50IGksIGo7Ci0KLSAgZm9yIChpPWo9MDsgaSA8IDg7IGkgKz0gMiwgaisrKSB7Ci0gICAgeC5vY3RldFtqXSA9IChoZXhfY2hhcl90b19uaWJibGUoc1tpXSkgPDwgNCkKLSAgICAgIHwgaGV4X2NoYXJfdG9fbmliYmxlKHNbaSsxXSAmIDB4RkYpOwotICB9Ci0gIHJldHVybiB4OwotfQotCi12NjRfdAotaGV4X3N0cmluZ190b192NjQoY2hhciAqcykgewotICB2NjRfdCB4OwotICBpbnQgaSwgajsKLQotICBmb3IgKGk9aj0wOyBpIDwgMTY7IGkgKz0gMiwgaisrKSB7Ci0gICAgeC5vY3RldFtqXSA9IChoZXhfY2hhcl90b19uaWJibGUoc1tpXSkgPDwgNCkKLSAgICAgIHwgaGV4X2NoYXJfdG9fbmliYmxlKHNbaSsxXSAmIDB4RkYpOwotICB9Ci0gIHJldHVybiB4OwotfQotCi12MTI4X3QKLWhleF9zdHJpbmdfdG9fdjEyOChjaGFyICpzKSB7Ci0gIHYxMjhfdCB4OwotICBpbnQgaSwgajsKLQotICBmb3IgKGk9aj0wOyBpIDwgMzI7IGkgKz0gMiwgaisrKSB7Ci0gICAgeC5vY3RldFtqXSA9IChoZXhfY2hhcl90b19uaWJibGUoc1tpXSkgPDwgNCkKLSAgICAgIHwgaGV4X2NoYXJfdG9fbmliYmxlKHNbaSsxXSAmIDB4RkYpOwotICB9Ci0gIHJldHVybiB4OwotfQotCi0KLQotLyogCi0gKiB0aGUgbWF0cml4IEFbXSBpcyBzdG9yZWQgaW4gY29sdW1uIGZvcm1hdCwgaS5lLiwgQVtpXSBpcyB0aGUgaXRoCi0gKiBjb2x1bW4gb2YgdGhlIG1hdHJpeCAKLSAqLwotCi1vY3RldF90IAotQV90aW1lc194X3BsdXNfYihvY3RldF90IEFbOF0sIG9jdGV0X3QgeCwgb2N0ZXRfdCBiKSB7Ci0gIGludCBpbmRleCA9IDA7Ci0gIHVuc2lnbmVkIG1hc2s7Ci0gIAotICBmb3IgKG1hc2s9MTsgbWFzayA8IDI1NjsgbWFzayAqPSAyKSB7Ci0gICAgaWYgKHggJiBtYXNrKQotICAgICAgYl49IEFbaW5kZXhdOwotICAgICsraW5kZXg7Ci0gIH0KLQotICByZXR1cm4gYjsKLX0KLQotaW5saW5lIHZvaWQKLXYxNl9jb3B5X29jdGV0X3N0cmluZyh2MTZfdCAqeCwgY29uc3Qgb2N0ZXRfdCBzWzJdKSB7Ci0gIHgtPm9jdGV0WzBdICA9IHNbMF07Ci0gIHgtPm9jdGV0WzFdICA9IHNbMV07Ci19Ci0KLWlubGluZSB2b2lkCi12MzJfY29weV9vY3RldF9zdHJpbmcodjMyX3QgKngsIGNvbnN0IG9jdGV0X3Qgc1s0XSkgewotICB4LT5vY3RldFswXSAgPSBzWzBdOwotICB4LT5vY3RldFsxXSAgPSBzWzFdOwotICB4LT5vY3RldFsyXSAgPSBzWzJdOwotICB4LT5vY3RldFszXSAgPSBzWzNdOwotfQotCi1pbmxpbmUgdm9pZAotdjY0X2NvcHlfb2N0ZXRfc3RyaW5nKHY2NF90ICp4LCBjb25zdCBvY3RldF90IHNbOF0pIHsKLSAgeC0+b2N0ZXRbMF0gID0gc1swXTsKLSAgeC0+b2N0ZXRbMV0gID0gc1sxXTsKLSAgeC0+b2N0ZXRbMl0gID0gc1syXTsKLSAgeC0+b2N0ZXRbM10gID0gc1szXTsKLSAgeC0+b2N0ZXRbNF0gID0gc1s0XTsKLSAgeC0+b2N0ZXRbNV0gID0gc1s1XTsKLSAgeC0+b2N0ZXRbNl0gID0gc1s2XTsKLSAgeC0+b2N0ZXRbN10gID0gc1s3XTsKLX0KLQotdm9pZAotdjEyOF9jb3B5X29jdGV0X3N0cmluZyh2MTI4X3QgKngsIGNvbnN0IG9jdGV0X3Qgc1sxNl0pIHsKLSAgeC0+b2N0ZXRbMF0gID0gc1swXTsKLSAgeC0+b2N0ZXRbMV0gID0gc1sxXTsKLSAgeC0+b2N0ZXRbMl0gID0gc1syXTsKLSAgeC0+b2N0ZXRbM10gID0gc1szXTsKLSAgeC0+b2N0ZXRbNF0gID0gc1s0XTsKLSAgeC0+b2N0ZXRbNV0gID0gc1s1XTsKLSAgeC0+b2N0ZXRbNl0gID0gc1s2XTsKLSAgeC0+b2N0ZXRbN10gID0gc1s3XTsKLSAgeC0+b2N0ZXRbOF0gID0gc1s4XTsKLSAgeC0+b2N0ZXRbOV0gID0gc1s5XTsKLSAgeC0+b2N0ZXRbMTBdID0gc1sxMF07Ci0gIHgtPm9jdGV0WzExXSA9IHNbMTFdOwotICB4LT5vY3RldFsxMl0gPSBzWzEyXTsKLSAgeC0+b2N0ZXRbMTNdID0gc1sxM107Ci0gIHgtPm9jdGV0WzE0XSA9IHNbMTRdOwotICB4LT5vY3RldFsxNV0gPSBzWzE1XTsKLQotfQotCi0jaWZuZGVmIERBVEFUWVBFU19VU0VfTUFDUk9TIC8qIGxpdHRsZSBmdW5jdGlvbnMgYXJlIG5vdCBtYWNyb3MgKi8KLQotdm9pZAotdjEyOF9zZXRfdG9femVybyh2MTI4X3QgKngpIHsKLSAgX3YxMjhfc2V0X3RvX3plcm8oeCk7Ci19Ci0KLXZvaWQKLXYxMjhfY29weSh2MTI4X3QgKngsIGNvbnN0IHYxMjhfdCAqeSkgewotICBfdjEyOF9jb3B5KHgsIHkpOwotfQotCi12b2lkCi12MTI4X3hvcih2MTI4X3QgKnosIHYxMjhfdCAqeCwgdjEyOF90ICp5KSB7Ci0gIF92MTI4X3hvcih6LCB4LCB5KTsKLX0gCi0KLXZvaWQKLXYxMjhfYW5kKHYxMjhfdCAqeiwgdjEyOF90ICp4LCB2MTI4X3QgKnkpIHsKLSAgX3YxMjhfYW5kKHosIHgsIHkpOwotfQotCi12b2lkCi12MTI4X29yKHYxMjhfdCAqeiwgdjEyOF90ICp4LCB2MTI4X3QgKnkpIHsKLSAgX3YxMjhfb3IoeiwgeCwgeSk7Ci19Ci0KLXZvaWQKLXYxMjhfY29tcGxlbWVudCh2MTI4X3QgKngpIHsKLSAgX3YxMjhfY29tcGxlbWVudCh4KTsKLX0KLQotaW50Ci12MTI4X2lzX2VxKGNvbnN0IHYxMjhfdCAqeCwgY29uc3QgdjEyOF90ICp5KSB7Ci0gIHJldHVybiBfdjEyOF9pc19lcSh4LCB5KTsKLX0KLQotaW50Ci12MTI4X2dldF9iaXQoY29uc3QgdjEyOF90ICp4LCBpbnQgaSkgewotICByZXR1cm4gX3YxMjhfZ2V0X2JpdCh4LCBpKTsKLX0KLQotdm9pZAotdjEyOF9zZXRfYml0KHYxMjhfdCAqeCwgaW50IGkpIHsKLSAgX3YxMjhfc2V0X2JpdCh4LCBpKTsKLX0gICAgIAotCi12b2lkCi12MTI4X2NsZWFyX2JpdCh2MTI4X3QgKngsIGludCBpKXsKLSAgX3YxMjhfY2xlYXJfYml0KHgsIGkpOwotfSAgICAKLQotdm9pZAotdjEyOF9zZXRfYml0X3RvKHYxMjhfdCAqeCwgaW50IGksIGludCB5KXsKLSAgX3YxMjhfc2V0X2JpdF90byh4LCBpLCB5KTsKLX0KLQotCi0jZW5kaWYgLyogREFUQVRZUEVTX1VTRV9NQUNST1MgKi8KLQotCi1pbmxpbmUgdm9pZAotdjEyOF9sZWZ0X3NoaWZ0Mih2MTI4X3QgKngsIGludCBudW1fYml0cykgewotICBpbnQgaTsKLSAgaW50IHdvcmRfc2hpZnQgPSBudW1fYml0cyA+PiA1OwotICBpbnQgYml0X3NoaWZ0ICA9IG51bV9iaXRzICYgMzE7Ci0KLSAgZm9yIChpPTA7IGkgPCAoNC13b3JkX3NoaWZ0KTsgaSsrKSB7Ci0gICAgeC0+djMyW2ldID0geC0+djMyW2krd29yZF9zaGlmdF0gPDwgYml0X3NoaWZ0OwotICB9Ci0gIAotICBmb3IgKCAgIDsgaSA8IHdvcmRfc2hpZnQ7IGkrKykgewotICAgIHgtPnYzMltpXSA9IDA7Ci0gIH0KLSAgCi19Ci0KLXZvaWQKLXYxMjhfcmlnaHRfc2hpZnQodjEyOF90ICp4LCBpbnQgaW5kZXgpIHsKLSAgY29uc3QgaW50IGJhc2VfaW5kZXggPSBpbmRleCA+PiA1OwotICBjb25zdCBpbnQgYml0X2luZGV4ID0gaW5kZXggJiAzMTsKLSAgaW50IGksIGZyb207Ci0gIHVpbnQzMl90IGI7Ci0gICAgCi0gIGlmIChpbmRleCA+IDEyNykgewotICAgIHYxMjhfc2V0X3RvX3plcm8oeCk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgaWYgKGJpdF9pbmRleCA9PSAwKSB7Ci0KLSAgICAvKiBjb3B5IGVhY2ggd29yZCBmcm9tIGxlZnQgc2l6ZSB0byByaWdodCBzaWRlICovCi0gICAgeC0+djMyWzQtMV0gPSB4LT52MzJbNC0xLWJhc2VfaW5kZXhdOwotICAgIGZvciAoaT00LTE7IGkgPiBiYXNlX2luZGV4OyBpLS0pIAotICAgICAgeC0+djMyW2ktMV0gPSB4LT52MzJbaS0xLWJhc2VfaW5kZXhdOwotCi0gIH0gZWxzZSB7Ci0gICAgCi0gICAgLyogc2V0IGVhY2ggd29yZCB0byB0aGUgIm9yIiBvZiB0aGUgdHdvIGJpdC1zaGlmdGVkIHdvcmRzICovCi0gICAgZm9yIChpID0gNDsgaSA+IGJhc2VfaW5kZXg7IGktLSkgewotICAgICAgZnJvbSA9IGktMSAtIGJhc2VfaW5kZXg7Ci0gICAgICBiID0geC0+djMyW2Zyb21dIDw8IGJpdF9pbmRleDsKLSAgICAgIGlmIChmcm9tID4gMCkKLSAgICAgICAgYiB8PSB4LT52MzJbZnJvbS0xXSA+PiAoMzItYml0X2luZGV4KTsKLSAgICAgIHgtPnYzMltpLTFdID0gYjsKLSAgICB9Ci0gICAgCi0gIH0KLQotICAvKiBub3cgd3JhcCB1cCB0aGUgZmluYWwgcG9ydGlvbiAqLwotICBmb3IgKGk9MDsgaSA8IGJhc2VfaW5kZXg7IGkrKykgCi0gICAgeC0+djMyW2ldID0gMDsKLSAgCi19Ci0KLXZvaWQKLXYxMjhfbGVmdF9zaGlmdCh2MTI4X3QgKngsIGludCBpbmRleCkgewotICBpbnQgaTsKLSAgY29uc3QgaW50IGJhc2VfaW5kZXggPSBpbmRleCA+PiA1OwotICBjb25zdCBpbnQgYml0X2luZGV4ID0gaW5kZXggJiAzMTsKLQotICBpZiAoaW5kZXggPiAxMjcpIHsKLSAgICB2MTI4X3NldF90b196ZXJvKHgpOwotICAgIHJldHVybjsKLSAgfSAKLSAgCi0gIGlmIChiaXRfaW5kZXggPT0gMCkgewotICAgIGZvciAoaT0wOyBpIDwgNCAtIGJhc2VfaW5kZXg7IGkrKykKLSAgICAgIHgtPnYzMltpXSA9IHgtPnYzMltpK2Jhc2VfaW5kZXhdOwotICB9IGVsc2UgewotICAgIGZvciAoaT0wOyBpIDwgNCAtIGJhc2VfaW5kZXggLSAxOyBpKyspCi0gICAgICB4LT52MzJbaV0gPSAoeC0+djMyW2krYmFzZV9pbmRleF0gPDwgYml0X2luZGV4KSBeCi0JKHgtPnYzMltpK2Jhc2VfaW5kZXgrMV0gPj4gKDMyIC0gYml0X2luZGV4KSk7Ci0gICAgeC0+djMyWzQgLSBiYXNlX2luZGV4LTFdID0geC0+djMyWzQtMV0gPDwgYml0X2luZGV4OwotICB9Ci0KLSAgLyogbm93IHdyYXAgdXAgdGhlIGZpbmFsIHBvcnRpb24gKi8KLSAgZm9yIChpID0gNCAtIGJhc2VfaW5kZXg7IGkgPCA0OyBpKyspIAotICAgIHgtPnYzMltpXSA9IDA7Ci0KLX0KLQotCi0jaWYgMAotdm9pZAotdjEyOF9hZGQodjEyOF90ICp6LCB2MTI4X3QgKngsIHYxMjhfdCAqeSkgewotICAvKiBpbnRlZ2VyIGFkZGl0aW9uIG1vZHVsbyAyXjEyOCAgICAqLwotCi0jaWYgV09SRFNfQklHRU5ESUFOCi0gIHVpbnQ2NF90IHRtcDsKLSAgICAKLSAgdG1wID0geC0+djMyWzNdICsgeS0+djMyWzNdOwotICB6LT52MzJbM10gPSAodWludDMyX3QpIHRtcDsKLSAgCi0gIHRtcCA9ICB4LT52MzJbMl0gKyB5LT52MzJbMl0gKyAodG1wID4+IDMyKTsKLSAgei0+djMyWzJdID0gKHVpbnQzMl90KSB0bXA7Ci0KLSAgdG1wID0gIHgtPnYzMlsxXSArIHktPnYzMlsxXSArICh0bXAgPj4gMzIpOwotICB6LT52MzJbMV0gPSAodWludDMyX3QpIHRtcDsKLSAgCi0gIHRtcCA9ICB4LT52MzJbMF0gKyB5LT52MzJbMF0gKyAodG1wID4+IDMyKTsKLSAgei0+djMyWzBdID0gKHVpbnQzMl90KSB0bXA7Ci0KLSNlbHNlIC8qIGFzc3VtZSBsaXR0bGUgZW5kaWFuIGFyY2hpdGVjdHVyZSAqLwotICB1aW50NjRfdCB0bXA7Ci0gIAotICB0bXAgPSBodG9ubCh4LT52MzJbM10pICsgaHRvbmwoeS0+djMyWzNdKTsKLSAgei0+djMyWzNdID0gbnRvaGwoKHVpbnQzMl90KSB0bXApOwotICAKLSAgdG1wID0gIGh0b25sKHgtPnYzMlsyXSkgKyBodG9ubCh5LT52MzJbMl0pICsgaHRvbmwodG1wID4+IDMyKTsKLSAgei0+djMyWzJdID0gbnRvaGwoKHVpbnQzMl90KSB0bXApOwotCi0gIHRtcCA9ICBodG9ubCh4LT52MzJbMV0pICsgaHRvbmwoeS0+djMyWzFdKSArIGh0b25sKHRtcCA+PiAzMik7Ci0gIHotPnYzMlsxXSA9IG50b2hsKCh1aW50MzJfdCkgdG1wKTsKLSAgCi0gIHRtcCA9ICBodG9ubCh4LT52MzJbMF0pICsgaHRvbmwoeS0+djMyWzBdKSArIGh0b25sKHRtcCA+PiAzMik7Ci0gIHotPnYzMlswXSA9IG50b2hsKCh1aW50MzJfdCkgdG1wKTsKLQotI2VuZGlmIC8qIFdPUkRTX0JJR0VORElBTiAqLwotICAKLX0KLSNlbmRpZgotCi1pbnQKLW9jdGV0X3N0cmluZ19pc19lcShvY3RldF90ICphLCBvY3RldF90ICpiLCBpbnQgbGVuKSB7Ci0gIG9jdGV0X3QgKmVuZCA9IGIgKyBsZW47Ci0gIHdoaWxlIChiIDwgZW5kKQotICAgIGlmICgqYSsrICE9ICpiKyspCi0gICAgICByZXR1cm4gMTsKLSAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQKLW9jdGV0X3N0cmluZ19zZXRfdG9femVybyhvY3RldF90ICpzLCBpbnQgbGVuKSB7Ci0gIG9jdGV0X3QgKmVuZCA9IHMgKyBsZW47Ci0KLSAgZG8gewotICAgICpzID0gMDsKLSAgfSB3aGlsZSAoKytzIDwgZW5kKTsKLSAgCi19Ci0KLS8qIGZ1bmN0aW9ucyBtYW5pcHVsYXRpbmcgYml0X3ZlY3Rvcl90ICovCi0KLSNkZWZpbmUgQklUVkVDVE9SX01BWF9XT1JEUyA1Ci0KLWludAotYml0dmVjdG9yX2FsbG9jKGJpdHZlY3Rvcl90ICp2LCB1bnNpZ25lZCBsb25nIGxlbmd0aCkgewotICB1bnNpZ25lZCBsb25nIGwgPSAobGVuZ3RoICsgYnl0ZXNfcGVyX3dvcmQgLSAxKSAvIGJ5dGVzX3Blcl93b3JkOwotICBpbnQgaTsKLQotICAvKiBhbGxvY2F0ZSBtZW1vcnksIHRoZW4gc2V0IHBhcmFtZXRlcnMgKi8KLSAgaWYgKGwgPiBCSVRWRUNUT1JfTUFYX1dPUkRTKQotICAgIHJldHVybiAtMTsKLSAgZWxzZQotICAgIGwgPSBCSVRWRUNUT1JfTUFYX1dPUkRTOwotICB2LT53b3JkICAgPSBtYWxsb2MobCk7Ci0gIGlmICh2LT53b3JkID09IE5VTEwpCi0gICAgcmV0dXJuIC0xOwotICB2LT5sZW5ndGggPSBsZW5ndGg7Ci0KLSAgLyogaW5pdGlhbGl6ZSBiaXR2ZWN0b3IgdG8gemVybyAqLwotICBmb3IgKGk9MDsgaSA8IChsZW5ndGggPj4gNSk7IGkrKykgewotICAgIHYtPndvcmQgPSAwOwotICB9Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQKLWJpdHZlY3Rvcl9zZXRfYml0KGJpdHZlY3Rvcl90ICp2LCBpbnQgYml0X2luZGV4KSB7Ci0KLSAgdi0+d29yZFsoYml0X2luZGV4ID4+IDUpXSB8PSAoMSA8PCAoYml0X2luZGV4ICYgMzEpKTsKLSAgCi19Ci0KLWludAotYml0dmVjdG9yX2dldF9iaXQoY29uc3QgYml0dmVjdG9yX3QgKnYsIGludCBiaXRfaW5kZXgpIHsKLQotICByZXR1cm4gKCh2LT53b3JkWyhiaXRfaW5kZXggPj4gNSldKSA+PiAoYml0X2luZGV4ICYgMzEpKSAmIDE7Ci0gIAotfQotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLQotaW50Ci1iaXR2ZWN0b3JfcHJpbnRfaGV4KGNvbnN0IGJpdHZlY3Rvcl90ICp2LCBGSUxFICpzdHJlYW0pIHsKLSAgaW50IGk7Ci0gIGludCBtID0gdi0+bGVuZ3RoID4+IDU7Ci0gIGludCBuID0gdi0+bGVuZ3RoICYgMzE7Ci0gIGNoYXIgc3RyaW5nWzldOwotICB1aW50MzJfdCB0bXA7Ci0KLSAgLyogaWYgbGVuZ3RoIGlzbid0IGEgbXVsdGlwbGUgb2YgZm91ciwgd2UgY2FuJ3QgaGV4X3ByaW50ICovCi0gIGlmIChuICYgMykKLSAgICByZXR1cm4gLTE7Ci0gIAotICAvKiBpZiB0aGUgbGVuZ3RoIGlzIHplcm8sIGRvIG5vdGhpbmcgKi8KLSAgaWYgKHYtPmxlbmd0aCA9PSAwKQotICAgIHJldHVybiAwOwotCi0gIC8qCi0gICAqIGxvb3Agb3ZlciB3b3JkcyBmcm9tIG1vc3Qgc2lnbmlmaWNhbnQgdG8gbGVhc3Qgc2lnbmlmaWNhbnQgLSAKLSAgICovCi0gIAotICBmb3IgKGk9bTsgaSA+IDA7IGkrKykgewotICAgIGNoYXIgKnN0ciA9IHN0cmluZyArIDc7Ci0gICAgdG1wID0gdi0+d29yZFtpXTsKLSAgICAKLSAgICAvKiBudWxsIHRlcm1pbmF0ZSBzdHJpbmcgKi8KLSAgICBzdHJpbmdbOF0gPSAwOyAgIAotCi0gICAgLyogbG9vcCBvdmVyIG5pYmJsZXMgKi8KLSAgICAqc3RyLS0gPSBuaWJibGVfdG9faGV4X2NoYXIodG1wICYgMHhmKTsgIHRtcCA+Pj0gNDsgCi0gICAgKnN0ci0tID0gbmliYmxlX3RvX2hleF9jaGFyKHRtcCAmIDB4Zik7ICB0bXAgPj49IDQ7IAotICAgICpzdHItLSA9IG5pYmJsZV90b19oZXhfY2hhcih0bXAgJiAweGYpOyAgdG1wID4+PSA0OyAKLSAgICAqc3RyLS0gPSBuaWJibGVfdG9faGV4X2NoYXIodG1wICYgMHhmKTsgIHRtcCA+Pj0gNDsgCi0gICAgKnN0ci0tID0gbmliYmxlX3RvX2hleF9jaGFyKHRtcCAmIDB4Zik7ICB0bXAgPj49IDQ7IAotICAgICpzdHItLSA9IG5pYmJsZV90b19oZXhfY2hhcih0bXAgJiAweGYpOyAgdG1wID4+PSA0OyAKLSAgICAqc3RyLS0gPSBuaWJibGVfdG9faGV4X2NoYXIodG1wICYgMHhmKTsgIHRtcCA+Pj0gNDsgCi0gICAgKnN0ci0tID0gbmliYmxlX3RvX2hleF9jaGFyKHRtcCAmIDB4Zik7ICAgCi0KLSAgICAvKiBub3cgcHJpbnQgc3RyZWFtICovCi0gICAgZnByaW50ZihzdHJlYW0sIHN0cmluZyk7Ci0gIH0KLSAgCi0gIHJldHVybiAwOwotCi19Ci0KLQotaW50Ci1oZXhfc3RyaW5nX2xlbmd0aChjaGFyICpzKSB7Ci0gIGludCBjb3VudCA9IDA7Ci0gIAotICAvKiBpZ25vcmUgbGVhZGluZyB6ZXJvcyAqLwotICB3aGlsZSAoKCpzICE9IDApICYmICpzID09ICcwJykKLSAgICBzKys7Ci0KLSAgLyogY291bnQgcmVtYWluaW5nIGNoYXJhY3RlcnMgKi8KLSAgd2hpbGUgKCpzICE9IDApIHsKLSAgICBpZiAoaGV4X2NoYXJfdG9fbmliYmxlKCpzKyspID09IC0xKQotICAgICAgcmV0dXJuIC0xOwotICAgIGNvdW50Kys7Ci0gIH0KLQotICByZXR1cm4gY291bnQ7Ci19Ci0KLWludAotYml0dmVjdG9yX3NldF9mcm9tX2hleChiaXR2ZWN0b3JfdCAqdiwgY2hhciAqc3RyaW5nKSB7Ci0gIGludCBudW1faGV4X2NoYXJzLCBtLCBuLCBpLCBqOwotICB1aW50MzJfdCB0bXA7Ci0gIAotICBudW1faGV4X2NoYXJzID0gaGV4X3N0cmluZ19sZW5ndGgoc3RyaW5nKTsKLSAgaWYgKG51bV9oZXhfY2hhcnMgPT0gLTEpCi0gICAgcmV0dXJuIC0xOwotCi0gIC8qIHNldCBsZW5ndGggKi8KLSAgdi0+bGVuZ3RoID0gbnVtX2hleF9jaGFycyAqIDQ7Ci0gIC8qIAotICAgKiBhdCB0aGlzIHBvaW50LCB3ZSBzaG91bGQgc3VidHJhY3QgYXdheSBhIGJpdCBpZiB0aGUgaGlnaAotICAgKiBiaXQgb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBpcyB6ZXJvLCBidXQgd2UgaWdub3JlIHRoYXQgCi0gICAqIGZvciBub3cgYW5kIGFzc3VtZSB0aGF0IHdlJ3JlIGZvdXItYml0IGFsaWduZWQgLSBEQU0KLSAgICovCi0KLSAgCi0gIG0gPSBudW1faGV4X2NoYXJzIC8gODsgICAvKiBudW1iZXIgb2Ygd29yZHMgICAgICAgICAgICAgICAgKi8KLSAgbiA9IG51bV9oZXhfY2hhcnMgJSA4OyAgIC8qIG51bWJlciBvZiBuaWJibGVzIGluIGxhc3Qgd29yZCAqLwotCi0gIC8qIGlmIHRoZSBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIHRoZSBiaXR2ZWN0b3IsIHJldHVybiBhbiBlcnJvciAqLwotICBpZiAobSA+IEJJVFZFQ1RPUl9NQVhfV09SRFMpCi0gICAgcmV0dXJuIC0xOwotCi0gIC8qIAotICAgKiBsb29wIG92ZXIgd29yZHMgZnJvbSBtb3N0IHNpZ25pZmljYW50IC0gZmlyc3Qgd29yZCBpcyBhIHNwZWNpYWwKLSAgICogY2FzZSAKLSAgICovCi0gIAotICBpZiAobikgewotICAgIHRtcCA9IDA7Ci0gICAgZm9yIChpPTA7IGkgPCBuOyBpKyspIHsKLSAgICAgIHRtcCA9IGhleF9jaGFyX3RvX25pYmJsZSgqc3RyaW5nKyspOyAKLSAgICAgIHRtcCA8PD0gNDsgIAotICAgIH0KLSAgICB2LT53b3JkW21dID0gdG1wOwotICB9Ci0KLSAgLyogbm93IGxvb3Agb3ZlciB0aGUgcmVzdCBvZiB0aGUgd29yZHMgKi8KLSAgZm9yIChpPW0tMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgdG1wID0gMDsKLSAgICAgZm9yIChqPTA7IGogPCA4OyBqKyspIHsKLSAgICAgICB0bXAgPSBoZXhfY2hhcl90b19uaWJibGUoKnN0cmluZysrKTsgCi0gICAgICAgdG1wIDw8PSA0OyAgCi0gICAgIH0KLSAgICAgdi0+d29yZFtpXSA9IHRtcDsKLSAgfQotCi0gIHJldHVybiAwOwotfQotCi0KLS8qIGZ1bmN0aW9ucyBiZWxvdyBub3QgeWV0IHRlc3RlZCEgKi8KLQotaW50Ci12MzJfbG93X2JpdCh2MzJfdCAqdykgewotICBpbnQgdmFsdWU7Ci0KLSAgdmFsdWUgPSBsb3dfYml0W3ctPm9jdGV0WzBdXTsKLSAgaWYgKHZhbHVlICE9IC0xKQotICAgIHJldHVybiB2YWx1ZTsKLSAgdmFsdWUgPSBsb3dfYml0W3ctPm9jdGV0WzFdXTsKLSAgaWYgKHZhbHVlICE9IC0xKQotICAgIHJldHVybiB2YWx1ZSArIDg7Ci0gIHZhbHVlID0gbG93X2JpdFt3LT5vY3RldFsyXV07Ci0gIGlmICh2YWx1ZSAhPSAtMSkKLSAgICByZXR1cm4gdmFsdWUgKyAxNjsKLSAgdmFsdWUgPSBsb3dfYml0W3ctPm9jdGV0WzNdXTsKLSAgaWYgKHZhbHVlID09IC0xKQotICAgIHJldHVybiAtMTsKLSAgcmV0dXJuIHZhbHVlICsgMjQ7Ci19Ci0KLS8qIGhpZ2hfYml0IG5vdCBkb25lIHlldCAqLwotCi0KLQotCi0KZGlmZiAtLWdpdCBhL2NyeXB0by9tYXRoL3N0YXQuYyBiL2NyeXB0by9tYXRoL3N0YXQuYwppbmRleCBmZGRhY2FjLi42ZGQzMzJiIDEwMDY0NAotLS0gYS9jcnlwdG8vbWF0aC9zdGF0LmMKKysrIGIvY3J5cHRvL21hdGgvc3RhdC5jCkBAIC0xLDE3ICsxLDU3IEBACiAvKgogICogc3RhdHMuYwogICoKLSAqIHN0YXRpc3RpY2FsIHRlc3RzIGZvciByYW5kb21uZXNzIChGSVBTIDE0MC0yLCBTZWN0aW9uIDQuOSkKLSAqIAorICogc3RhdGlzdGljYWwgdGVzdHMKKyAqCiAgKiBEYXZpZCBBLiBNY0dyZXcKICAqIENpc2NvIFN5c3RlbXMsIEluYy4KICAqLwogCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDE3LCBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgInN0YXQuaCIKIAotZGVidWdfbW9kdWxlX3QgbW9kX3N0YXQgPSB7Ci0gIDAsICAgICAgICAgICAgICAgICAvKiBkZWJ1Z2dpbmcgaXMgb2ZmIGJ5IGRlZmF1bHQgKi8KLSAgInN0YXQgdGVzdCIgICAgICAgIC8qIHByaW50YWJsZSBtb2R1bGUgbmFtZSAgICAgICAqLworc3J0cF9kZWJ1Z19tb2R1bGVfdCBzcnRwX21vZF9zdGF0ID0geworICAgIDAsICAgICAgICAgICAgICAgICAgLyogZGVidWdnaW5nIGlzIG9mZiBieSBkZWZhdWx0ICovCisgICAgKGNoYXIgKikic3RhdCB0ZXN0IiAvKiBwcmludGFibGUgbW9kdWxlIG5hbWUgICAgICAgKi8KIH07CiAKIC8qCkBAIC0yMSwzMzEgKzYxLDE1MyBAQAogCiAjZGVmaW5lIFNUQVRfVEVTVF9EQVRBX0xFTiAyNTAwCiAKLWVycl9zdGF0dXNfdAotc3RhdF90ZXN0X21vbm9iaXQob2N0ZXRfdCAqZGF0YSkgewotICBvY3RldF90ICpkYXRhX2VuZCA9IGRhdGEgKyBTVEFUX1RFU1RfREFUQV9MRU47Ci0gIHVpbnQxNl90IG9uZXNfY291bnQ7CitzcnRwX2Vycl9zdGF0dXNfdCBzdGF0X3Rlc3RfbW9ub2JpdCh1aW50OF90ICpkYXRhKQoreworICAgIHVpbnQ4X3QgKmRhdGFfZW5kID0gZGF0YSArIFNUQVRfVEVTVF9EQVRBX0xFTjsKKyAgICB1aW50MTZfdCBvbmVzX2NvdW50OwogCi0gIG9uZXNfY291bnQgPSAwOwotICB3aGlsZSAoZGF0YSA8IGRhdGFfZW5kKSB7Ci0gICAgb25lc19jb3VudCArPSBvY3RldF9nZXRfd2VpZ2h0KCpkYXRhKTsKLSAgICBkYXRhKys7Ci0gIH0KKyAgICBvbmVzX2NvdW50ID0gMDsKKyAgICB3aGlsZSAoZGF0YSA8IGRhdGFfZW5kKSB7CisgICAgICAgIG9uZXNfY291bnQgKz0gb2N0ZXRfZ2V0X3dlaWdodCgqZGF0YSk7CisgICAgICAgIGRhdGErKzsKKyAgICB9CiAKLSAgZGVidWdfcHJpbnQobW9kX3N0YXQsICJiaXQgY291bnQ6ICVkIiwgb25lc19jb3VudCk7Ci0gIAotICBpZiAoKG9uZXNfY291bnQgPCA5NzI1KSB8fCAob25lc19jb3VudCA+IDEwMjc1KSkKLSAgICByZXR1cm4gZXJyX3N0YXR1c19hbGdvX2ZhaWw7CisgICAgZGVidWdfcHJpbnQoc3J0cF9tb2Rfc3RhdCwgImJpdCBjb3VudDogJWQiLCBvbmVzX2NvdW50KTsKIAotICByZXR1cm4gZXJyX3N0YXR1c19vazsKKyAgICBpZiAoKG9uZXNfY291bnQgPCA5NzI1KSB8fCAob25lc19jb3VudCA+IDEwMjc1KSkKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19hbGdvX2ZhaWw7CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQogCi1lcnJfc3RhdHVzX3QKLXN0YXRfdGVzdF9wb2tlcihvY3RldF90ICpkYXRhKSB7Ci0gIGludCBpOwotICBvY3RldF90ICpkYXRhX2VuZCA9IGRhdGEgKyBTVEFUX1RFU1RfREFUQV9MRU47Ci0gIGRvdWJsZSBwb2tlcjsKLSAgdWludDE2X3QgZlsxNl0gPSB7Ci0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCi0gIH07Ci0gIAotICB3aGlsZSAoZGF0YSA8IGRhdGFfZW5kKSB7Ci0gICAgZlsqZGF0YSAmIDB4MGZdKys7ICAgIC8qIGluY3JlbWVudCBmcmVxLiBjb3VudCBmb3IgbG93IG5pYmJsZSAgKi8KLSAgICBmWygqZGF0YSkgPj4gNF0rKzsgICAgLyogaW5jcmVtZW50IGZyZXEuIGNvdW50IGZvciBoaWdoIG5pYmJsZSAqLwotICAgIGRhdGErKzsKLSAgfQorc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdF90ZXN0X3Bva2VyKHVpbnQ4X3QgKmRhdGEpCit7CisgICAgaW50IGk7CisgICAgdWludDhfdCAqZGF0YV9lbmQgPSBkYXRhICsgU1RBVF9URVNUX0RBVEFfTEVOOworICAgIGRvdWJsZSBwb2tlcjsKKyAgICB1aW50MTZfdCBmWzE2XSA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OwogCi0gIHBva2VyID0gMC4wOwotICBmb3IgKGk9MDsgaSA8IDE2OyBpKyspIAotICAgIHBva2VyICs9IChkb3VibGUpIGZbaV0gKiBmW2ldOworICAgIHdoaWxlIChkYXRhIDwgZGF0YV9lbmQpIHsKKyAgICAgICAgZlsqZGF0YSAmIDB4MGZdKys7IC8qIGluY3JlbWVudCBmcmVxLiBjb3VudCBmb3IgbG93IG5pYmJsZSAgKi8KKyAgICAgICAgZlsoKmRhdGEpID4+IDRdKys7IC8qIGluY3JlbWVudCBmcmVxLiBjb3VudCBmb3IgaGlnaCBuaWJibGUgKi8KKyAgICAgICAgZGF0YSsrOworICAgIH0KIAotICBwb2tlciAqPSAoMTYuMCAvIDUwMDAuMCk7Ci0gIHBva2VyIC09IDUwMDAuMDsKKyAgICBwb2tlciA9IDAuMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKyAgICAgICAgcG9rZXIgKz0gKGRvdWJsZSlmW2ldICogZltpXTsKIAotICBkZWJ1Z19wcmludChtb2Rfc3RhdCwgInBva2VyIHRlc3Q6ICVmXG4iLCBwb2tlcik7Ci0gICAgCi0gIGlmICgocG9rZXIgPCAyLjE2KSB8fCAocG9rZXIgPiA0Ni4xNykpCi0gICAgcmV0dXJuIGVycl9zdGF0dXNfYWxnb19mYWlsOwotICAKLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7CisgICAgcG9rZXIgKj0gKDE2LjAgLyA1MDAwLjApOworICAgIHBva2VyIC09IDUwMDAuMDsKKworICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX3N0YXQsICJwb2tlciB0ZXN0OiAlZlxuIiwgcG9rZXIpOworCisgICAgaWYgKChwb2tlciA8IDIuMTYpIHx8IChwb2tlciA+IDQ2LjE3KSkKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19hbGdvX2ZhaWw7CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQogCi0KIC8qCiAgKiBydW5zW2ldIGhvbGRzIHRoZSBudW1iZXIgb2YgcnVucyBvZiBzaXplIChpLTEpCiAgKi8KIAotZXJyX3N0YXR1c190Ci1zdGF0X3Rlc3RfcnVucyhvY3RldF90ICpkYXRhKSB7Ci0gIG9jdGV0X3QgKmRhdGFfZW5kID0gZGF0YSArIFNUQVRfVEVTVF9EQVRBX0xFTjsKLSAgdWludDE2X3QgcnVuc1s2XSA9IHsgMCwgMCwgMCwgMCwgMCwgMCB9OyAKLSAgdWludDE2X3QgZ2Fwc1s2XSA9IHsgMCwgMCwgMCwgMCwgMCwgMCB9OwotICB1aW50MTZfdCBsb192YWx1ZVs2XSA9IHsgMjMxNSwgMTExNCwgNTI3LCAyNDAsIDEwMywgMTAzIH07Ci0gIHVpbnQxNl90IGhpX3ZhbHVlWzZdID0geyAyNjg1LCAxMzg2LCA3MjMsIDM4NCwgMjA5LCAyMDkgfTsKLSAgaW50MTZfdCAgc3RhdGUgPSAwOwotICB1aW50MTZfdCBtYXNrOwotICBpbnQgaTsKLSAgCi0gIC8qCi0gICAqIHRoZSBzdGF0ZSB2YXJpYWJsZSBob2xkcyB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gdGhlCi0gICAqIGN1cnJlbnQgcnVuIChvciBnYXAsIGlmIG5lZ2F0aXZlKQotICAgKi8KLSAgCi0gIHdoaWxlIChkYXRhIDwgZGF0YV9lbmQpIHsKK3NydHBfZXJyX3N0YXR1c190IHN0YXRfdGVzdF9ydW5zKHVpbnQ4X3QgKmRhdGEpCit7CisgICAgdWludDhfdCAqZGF0YV9lbmQgPSBkYXRhICsgU1RBVF9URVNUX0RBVEFfTEVOOworICAgIHVpbnQxNl90IHJ1bnNbNl0gPSB7IDAsIDAsIDAsIDAsIDAsIDAgfTsKKyAgICB1aW50MTZfdCBnYXBzWzZdID0geyAwLCAwLCAwLCAwLCAwLCAwIH07CisgICAgdWludDE2X3QgbG9fdmFsdWVbNl0gPSB7IDIzMTUsIDExMTQsIDUyNywgMjQwLCAxMDMsIDEwMyB9OworICAgIHVpbnQxNl90IGhpX3ZhbHVlWzZdID0geyAyNjg1LCAxMzg2LCA3MjMsIDM4NCwgMjA5LCAyMDkgfTsKKyAgICBpbnQgc3RhdGUgPSAwOworICAgIHVpbnQxNl90IG1hc2s7CisgICAgaW50IGk7CiAKLSAgICAvKiBsb29wIG92ZXIgdGhlIGJpdHMgb2YgdGhpcyBieXRlICovCi0gICAgZm9yIChtYXNrID0gMTsgbWFzayA8IDI1NjsgbWFzayA8PD0gMSkgewotICAgICAgaWYgKCpkYXRhICYgbWFzaykgeworICAgIC8qCisgICAgICogdGhlIHN0YXRlIHZhcmlhYmxlIGhvbGRzIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0aGUKKyAgICAgKiBjdXJyZW50IHJ1biAob3IgZ2FwLCBpZiBuZWdhdGl2ZSkKKyAgICAgKi8KIAotIAkvKiBuZXh0IGJpdCBpcyBhIG9uZSAgKi8KLQlpZiAoc3RhdGUgPiAwKSB7Ci0KLQkgIC8qIHByZWZpeCBpcyBhIHJ1biwgc28gaW5jcmVtZW50IHRoZSBydW4tY291bnQgICovCi0JICBzdGF0ZSsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgCi0KLQkgIC8qIGNoZWNrIGZvciBsb25nIHJ1bnMgKi8gCi0JICBpZiAoc3RhdGUgPiAyNSkgewotCQlkZWJ1Z19wcmludChtb2Rfc3RhdCwgIj4yNSBydW5zOiAlZCIsIHN0YXRlKTsKLQkJcmV0dXJuIGVycl9zdGF0dXNfYWxnb19mYWlsOwotCSAgfQotCi0JfSBlbHNlIGlmIChzdGF0ZSA8IDApIHsKLQotCSAgLyogcHJlZml4IGlzIGEgZ2FwICAqLwotCSAgaWYgKHN0YXRlIDwgLTI1KSB7Ci0JCWRlYnVnX3ByaW50KG1vZF9zdGF0LCAiPjI1IGdhcHM6ICVkIiwgc3RhdGUpOwotCSAgICByZXR1cm4gZXJyX3N0YXR1c19hbGdvX2ZhaWw7ICAgIC8qIGxvbmctcnVucyB0ZXN0IGZhaWxlZCAgICovCi0JICB9Ci0JICBpZiAoc3RhdGUgPCAtNikgewotCSAgICBzdGF0ZSA9IC02OyAgICAgICAgICAgICAgICAgICAgIC8qIGdyb3VwIHRvZ2V0aGVyIGdhcHMgPiA1ICovCi0JICB9Ci0JICBnYXBzWy0xLXN0YXRlXSsrOyAgICAgICAgICAgICAgICAgLyogaW5jcmVtZW50IGdhcCBjb3VudCAgICAgICovCi0gICAgICAgICAgc3RhdGUgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldCBzdGF0ZSBhdCBvbmUgc2V0IGJpdCAqLwotCX0gZWxzZSB7Ci0KLQkgIC8qIHN0YXRlIGlzIHplcm87IHRoaXMgaGFwcGVucyBvbmx5IGF0IGluaXRpYWxpemF0aW9uICAgICAgICAqLwotCSAgc3RhdGUgPSAxOyAgICAgICAgICAgIAotCX0KLSAgICAgIH0gZWxzZSB7Ci0KLQkvKiBuZXh0IGJpdCBpcyBhIHplcm8gICovCi0JaWYgKHN0YXRlID4gMCkgewotCi0JICAvKiBwcmVmaXggaXMgYSBydW4gKi8KLQkgIGlmIChzdGF0ZSA+IDI1KSB7Ci0JCWRlYnVnX3ByaW50KG1vZF9zdGF0LCAiPjI1IHJ1bnMgKDIpOiAlZCIsIHN0YXRlKTsKLQkgICAgcmV0dXJuIGVycl9zdGF0dXNfYWxnb19mYWlsOyAgICAvKiBsb25nLXJ1bnMgdGVzdCBmYWlsZWQgICAqLwotCSAgfQotCSAgaWYgKHN0YXRlID4gNikgewotCSAgICBzdGF0ZSA9IDY7ICAgICAgICAgICAgICAgICAgICAgIC8qIGdyb3VwIHRvZ2V0aGVyIHJ1bnMgPiA1ICovCi0JICB9Ci0JICBydW5zW3N0YXRlLTFdKys7ICAgICAgICAgICAgICAgICAgLyogaW5jcmVtZW50IHJ1biBjb3VudCAgICAgICAqLwotICAgICAgICAgIHN0YXRlID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXQgc3RhdGUgYXQgb25lIHplcm8gYml0ICovCi0JfSBlbHNlIGlmIChzdGF0ZSA8IDApIHsKLQotCSAgLyogcHJlZml4IGlzIGEgZ2FwLCBzbyBpbmNyZW1lbnQgZ2FwLWNvdW50IChkZWNyZW1lbnQgc3RhdGUpICovCi0JICBzdGF0ZS0tOwotCi0JICAvKiBjaGVjayBmb3IgbG9uZyBnYXBzICovIAotCSAgaWYgKHN0YXRlIDwgLTI1KSB7Ci0JCWRlYnVnX3ByaW50KG1vZF9zdGF0LCAiPjI1IGdhcHMgKDIpOiAlZCIsIHN0YXRlKTsKLQkgICAgcmV0dXJuIGVycl9zdGF0dXNfYWxnb19mYWlsOwotCSAgfQotCi0JfSBlbHNlIHsKLQotCSAgLyogc3RhdGUgaXMgemVybzsgdGhpcyBoYXBwZW5zIG9ubHkgYXQgaW5pdGlhbGl6YXRpb24gICAgICAgICovCi0JICBzdGF0ZSA9IC0xOwotCX0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBtb3ZlIGFsb25nIHRvIG5leHQgb2N0ZXQgKi8KLSAgICBkYXRhKys7Ci0gIH0KLQotICBpZiAobW9kX3N0YXQub24pIHsKLSAgICBkZWJ1Z19wcmludChtb2Rfc3RhdCwgInJ1bnMgdGVzdCIsIE5VTEwpOwotICAgIGZvciAoaT0wOyBpIDwgNjsgaSsrKQotICAgICAgZGVidWdfcHJpbnQobW9kX3N0YXQsICIgIHJ1bnNbXTogJWQiLCBydW5zW2ldKTsKLSAgICBmb3IgKGk9MDsgaSA8IDY7IGkrKykKLSAgICAgIGRlYnVnX3ByaW50KG1vZF9zdGF0LCAiICBnYXBzW106ICVkIiwgZ2Fwc1tpXSk7Ci0gIH0KLQotICAvKiBjaGVjayBydW4gYW5kIGdhcCBjb3VudHMgYWdhaW5zdCB0aGUgZml4ZWQgbGltaXRzICovCi0gIGZvciAoaT0wOyBpIDwgNjsgaSsrKSAKLSAgICBpZiAoICAgKHJ1bnNbaV0gPCBsb192YWx1ZVtpXSApIHx8IChydW5zW2ldID4gaGlfdmFsdWVbaV0pCi0JfHwgKGdhcHNbaV0gPCBsb192YWx1ZVtpXSApIHx8IChnYXBzW2ldID4gaGlfdmFsdWVbaV0pKQotICAgICAgcmV0dXJuIGVycl9zdGF0dXNfYWxnb19mYWlsOwotCi0gIAotICByZXR1cm4gZXJyX3N0YXR1c19vazsKLX0KLQotCi0vKgotICogdGhlIGZ1bmN0aW9uIHN0YXRfdGVzdF9yYW5kX3NvdXJjZSBhcHBseXMgdGhlIEZJUFMtMTQwLTIgc3RhdGlzdGljYWwKLSAqIHRlc3RzIHRvIHRoZSByYW5kb20gc291cmNlIGRlZmluZWQgYnkgcnMKLSAqCi0gKi8KLQotI2RlZmluZSBSQU5EX1NSQ19CVUZfT0NURVRTIDUwIC8qIHRoaXMgdmFsdWUgTVVTVCBkaXZpZGUgMjUwMCEgKi8gCi0KLWVycl9zdGF0dXNfdAotc3RhdF90ZXN0X3JhbmRfc291cmNlKHJhbmRfc291cmNlX2Z1bmNfdCBnZXRfcmFuZF9ieXRlcykgewotICBpbnQgaTsKLSAgZG91YmxlIHBva2VyOwotICBvY3RldF90ICpkYXRhLCAqZGF0YV9lbmQ7Ci0gIHVpbnQxNl90IGZbMTZdID0gewotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAotICB9OwotICBvY3RldF90IGJ1ZmZlcltSQU5EX1NSQ19CVUZfT0NURVRTXTsKLSAgZXJyX3N0YXR1c190IHN0YXR1czsKLSAgaW50IG9uZXNfY291bnQgPSAwOwotICB1aW50MTZfdCBydW5zWzZdID0geyAwLCAwLCAwLCAwLCAwLCAwIH07IAotICB1aW50MTZfdCBnYXBzWzZdID0geyAwLCAwLCAwLCAwLCAwLCAwIH07Ci0gIHVpbnQxNl90IGxvX3ZhbHVlWzZdID0geyAyMzE1LCAxMTE0LCA1MjcsIDI0MCwgMTAzLCAxMDMgfTsKLSAgdWludDE2X3QgaGlfdmFsdWVbNl0gPSB7IDI2ODUsIDEzODYsIDcyMywgMzg0LCAyMDksIDIwOSB9OwotICBpbnQxNl90ICBzdGF0ZSA9IDA7Ci0gIHVpbnQxNl90IG1hc2s7Ci0gIAotICAvKiBjb3VudGVycyBmb3IgbW9ub2JpdCwgcG9rZXIsIGFuZCBydW5zIHRlc3RzIGFyZSBpbml0aWFsaXplZCBhYm92ZSAqLwotCi0gIC8qIG1haW4gbG9vcDogZmlsbCBidWZmZXIsIHVwZGF0ZSBjb3VudGVycyBmb3Igc3RhdCB0ZXN0cyAqLwotICBmb3IgKGk9MDsgaSA8IDI1MDA7IGkrPVJBTkRfU1JDX0JVRl9PQ1RFVFMpIHsKLSAgICAKLSAgICAvKiBmaWxsIGRhdGEgYnVmZmVyICovCi0gICAgc3RhdHVzID0gZ2V0X3JhbmRfYnl0ZXMoYnVmZmVyLCBSQU5EX1NSQ19CVUZfT0NURVRTKTsKLSAgICBpZiAoc3RhdHVzKSB7Ci0JICBkZWJ1Z19wcmludChtb2Rfc3RhdCwgImNvdWxkbid0IGdldCByYW5kIGJ5dGVzOiAlZCIsc3RhdHVzKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0JfQotCi0jaWYgMAotICAgIGRlYnVnX3ByaW50KG1vZF9zdGF0LCAiJXMiLCAKLQkJb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoYnVmZmVyLCBSQU5EX1NSQ19CVUZfT0NURVRTKSk7Ci0jZW5kaWYKLSAgCi0gICAgZGF0YSA9IGJ1ZmZlcjsKLSAgICBkYXRhX2VuZCA9IGRhdGEgKyBSQU5EX1NSQ19CVUZfT0NURVRTOwogICAgIHdoaWxlIChkYXRhIDwgZGF0YV9lbmQpIHsKKyAgICAgICAgLyogbG9vcCBvdmVyIHRoZSBiaXRzIG9mIHRoaXMgYnl0ZSAqLworICAgICAgICBmb3IgKG1hc2sgPSAxOyBtYXNrIDwgMjU2OyBtYXNrIDw8PSAxKSB7CisgICAgICAgICAgICBpZiAoKmRhdGEgJiBtYXNrKSB7CisgICAgICAgICAgICAgICAgLyogbmV4dCBiaXQgaXMgYSBvbmUgICovCisgICAgICAgICAgICAgICAgaWYgKHN0YXRlID4gMCkgeworICAgICAgICAgICAgICAgICAgICAvKiBwcmVmaXggaXMgYSBydW4sIHNvIGluY3JlbWVudCB0aGUgcnVuLWNvdW50ICAqLworICAgICAgICAgICAgICAgICAgICBzdGF0ZSsrOwogCi0gICAgICAvKiB1cGRhdGUgbW9ub2JpdCB0ZXN0IGNvdW50ZXIgKi8KLSAgICAgIG9uZXNfY291bnQgKz0gb2N0ZXRfZ2V0X3dlaWdodCgqZGF0YSk7CisgICAgICAgICAgICAgICAgICAgIC8qIGNoZWNrIGZvciBsb25nIHJ1bnMgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID4gMjUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX3N0YXQsICI+MjUgcnVuczogJWQiLCBzdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2FsZ29fZmFpbDsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAvKiB1cGRhdGUgcG9rZXIgdGVzdCBjb3VudGVycyAqLwotICAgICAgZlsqZGF0YSAmIDB4MGZdKys7ICAgIC8qIGluY3JlbWVudCBmcmVxLiBjb3VudCBmb3IgbG93IG5pYmJsZSAgKi8KLSAgICAgIGZbKCpkYXRhKSA+PiA0XSsrOyAgICAvKiBpbmNyZW1lbnQgZnJlcS4gY291bnQgZm9yIGhpZ2ggbmliYmxlICovCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLyogcHJlZml4IGlzIGEgZ2FwICAqLworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPCAtMjUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX3ByaW50KHNydHBfbW9kX3N0YXQsICI+MjUgZ2FwczogJWQiLCBzdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2FsZ29fZmFpbDsgLyogbG9uZy1ydW5zIHRlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsZWQgICAqLworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA8IC02KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IC02OyAvKiBncm91cCB0b2dldGhlciBnYXBzID4gNSAqLworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGdhcHNbLTEgLSBzdGF0ZV0rKzsgLyogaW5jcmVtZW50IGdhcCBjb3VudCAgICAgICovCisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMTsgICAgICAgICAgLyogc2V0IHN0YXRlIGF0IG9uZSBzZXQgYml0ICovCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLyogc3RhdGUgaXMgemVybzsgdGhpcyBoYXBwZW5zIG9ubHkgYXQgaW5pdGlhbGl6YXRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogbmV4dCBiaXQgaXMgYSB6ZXJvICAqLworICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLyogcHJlZml4IGlzIGEgcnVuICovCisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA+IDI1KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19wcmludChzcnRwX21vZF9zdGF0LCAiPjI1IHJ1bnMgKDIpOiAlZCIsIHN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYWxnb19mYWlsOyAvKiBsb25nLXJ1bnMgdGVzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxlZCAgICovCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID4gNikgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSA2OyAvKiBncm91cCB0b2dldGhlciBydW5zID4gNSAqLworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJ1bnNbc3RhdGUgLSAxXSsrOyAvKiBpbmNyZW1lbnQgcnVuIGNvdW50ICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gLTE7ICAgICAgICAvKiBzZXQgc3RhdGUgYXQgb25lIHplcm8gYml0ICovCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLyogcHJlZml4IGlzIGEgZ2FwLCBzbyBpbmNyZW1lbnQgZ2FwLWNvdW50IChkZWNyZW1lbnQgc3RhdGUpCisgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICBzdGF0ZS0tOwogCi0gICAgICAvKiB1cGRhdGUgcnVucyB0ZXN0IGNvdW50ZXJzICovCi0gICAgICAvKiBsb29wIG92ZXIgdGhlIGJpdHMgb2YgdGhpcyBieXRlICovCi0gICAgICBmb3IgKG1hc2sgPSAxOyBtYXNrIDwgMjU2OyBtYXNrIDw8PSAxKSB7Ci0JaWYgKCpkYXRhICYgbWFzaykgewotCSAgCi0JICAvKiBuZXh0IGJpdCBpcyBhIG9uZSAgKi8KLQkgIGlmIChzdGF0ZSA+IDApIHsKLQkgICAgCi0JICAgIC8qIHByZWZpeCBpcyBhIHJ1biwgc28gaW5jcmVtZW50IHRoZSBydW4tY291bnQgICovCi0JICAgIHN0YXRlKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkgICAgCi0JICAgIC8qIGNoZWNrIGZvciBsb25nIHJ1bnMgKi8gCi0JICAgIGlmIChzdGF0ZSA+IDI1KSB7Ci0JCSAgZGVidWdfcHJpbnQobW9kX3N0YXQsICI+MjUgcnVucyAoMyk6ICVkIiwgc3RhdGUpOwotCSAgICAgIHJldHVybiBlcnJfc3RhdHVzX2FsZ29fZmFpbDsKLQkJfQotCSAgICAKLQkgIH0gZWxzZSBpZiAoc3RhdGUgPCAwKSB7Ci0JICAgIAotCSAgICAvKiBwcmVmaXggaXMgYSBnYXAgICovCi0JICAgIGlmIChzdGF0ZSA8IC0yNSkgewotCQkgIGRlYnVnX3ByaW50KG1vZF9zdGF0LCAiPjI1IGdhcHMgKDMpOiAlZCIsIHN0YXRlKTsKLQkgICAgICByZXR1cm4gZXJyX3N0YXR1c19hbGdvX2ZhaWw7ICAgIC8qIGxvbmctcnVucyB0ZXN0IGZhaWxlZCAgICovCi0JICAgIH0KLQkgICAgaWYgKHN0YXRlIDwgLTYpIHsKLQkgICAgICBzdGF0ZSA9IC02OyAgICAgICAgICAgICAgICAgICAgIC8qIGdyb3VwIHRvZ2V0aGVyIGdhcHMgPiA1ICovCi0JICAgIH0KLQkgICAgZ2Fwc1stMS1zdGF0ZV0rKzsgICAgICAgICAgICAgICAgIC8qIGluY3JlbWVudCBnYXAgY291bnQgICAgICAqLwotCSAgICBzdGF0ZSA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0IHN0YXRlIGF0IG9uZSBzZXQgYml0ICovCi0JICB9IGVsc2UgewotCSAgICAKLQkgICAgLyogc3RhdGUgaXMgemVybzsgdGhpcyBoYXBwZW5zIG9ubHkgYXQgaW5pdGlhbGl6YXRpb24gICAgICAgICovCi0JICAgIHN0YXRlID0gMTsgICAgICAgICAgICAKLQkgIH0KLQl9IGVsc2UgewotCSAgCi0JICAvKiBuZXh0IGJpdCBpcyBhIHplcm8gICovCi0JICBpZiAoc3RhdGUgPiAwKSB7Ci0JICAgIAotCSAgICAvKiBwcmVmaXggaXMgYSBydW4gKi8KLQkgICAgaWYgKHN0YXRlID4gMjUpIHsKLQkJICBkZWJ1Z19wcmludChtb2Rfc3RhdCwgIj4yNSBydW5zICg0KTogJWQiLCBzdGF0ZSk7Ci0JICAgICAgcmV0dXJuIGVycl9zdGF0dXNfYWxnb19mYWlsOyAgICAvKiBsb25nLXJ1bnMgdGVzdCBmYWlsZWQgICAqLwotCSAgICB9Ci0JICAgIGlmIChzdGF0ZSA+IDYpIHsKLQkgICAgICBzdGF0ZSA9IDY7ICAgICAgICAgICAgICAgICAgICAgIC8qIGdyb3VwIHRvZ2V0aGVyIHJ1bnMgPiA1ICovCi0JICAgIH0KLQkgICAgcnVuc1tzdGF0ZS0xXSsrOyAgICAgICAgICAgICAgICAgIC8qIGluY3JlbWVudCBydW4gY291bnQgICAgICAgKi8KLQkgICAgc3RhdGUgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldCBzdGF0ZSBhdCBvbmUgemVybyBiaXQgKi8KLQkgIH0gZWxzZSBpZiAoc3RhdGUgPCAwKSB7Ci0JICAgIAotCSAgICAvKiBwcmVmaXggaXMgYSBnYXAsIHNvIGluY3JlbWVudCBnYXAtY291bnQgKGRlY3JlbWVudCBzdGF0ZSkgKi8KLQkgICAgc3RhdGUtLTsKLQkgICAgCi0JICAgIC8qIGNoZWNrIGZvciBsb25nIGdhcHMgKi8gCi0JICAgIGlmIChzdGF0ZSA8IC0yNSkgewotCQkgIGRlYnVnX3ByaW50KG1vZF9zdGF0LCAiPjI1IGdhcHMgKDQpOiAlZCIsIHN0YXRlKTsKLQkgICAgICByZXR1cm4gZXJyX3N0YXR1c19hbGdvX2ZhaWw7Ci0JCX0KLQkgICAgCi0JICB9IGVsc2UgewotCSAgICAKLQkgICAgLyogc3RhdGUgaXMgemVybzsgdGhpcyBoYXBwZW5zIG9ubHkgYXQgaW5pdGlhbGl6YXRpb24gICAgICAgICovCi0JICAgIHN0YXRlID0gLTE7Ci0JICB9Ci0JfQotICAgICAgfQotICAgICAgCi0gICAgICAvKiBhZHZhbmNlIGRhdGEgcG9pbnRlciAqLwotICAgICAgZGF0YSsrOwotICAgIH0KLSAgfQorICAgICAgICAgICAgICAgICAgICAvKiBjaGVjayBmb3IgbG9uZyBnYXBzICovCisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA8IC0yNSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfcHJpbnQoc3J0cF9tb2Rfc3RhdCwgIj4yNSBnYXBzICgyKTogJWQiLCBzdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2FsZ29fZmFpbDsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gIC8qIGNoZWNrIHRvIHNlZSBpZiB0ZXN0IGRhdGEgaXMgd2l0aGluIGJvdW5kcyAqLworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8qIHN0YXRlIGlzIHplcm87IHRoaXMgaGFwcGVucyBvbmx5IGF0IGluaXRpYWxpemF0aW9uICovCisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CiAKLSAgLyogY2hlY2sgbW9ub2JpdCB0ZXN0IGRhdGEgKi8KLQotICBkZWJ1Z19wcmludChtb2Rfc3RhdCwgInN0YXQ6IGJpdCBjb3VudDogJWQiLCBvbmVzX2NvdW50KTsKLSAgCi0gIGlmICgob25lc19jb3VudCA8IDk3MjUpIHx8IChvbmVzX2NvdW50ID4gMTAyNzUpKSB7Ci0gICAgZGVidWdfcHJpbnQobW9kX3N0YXQsICJzdGF0OiBmYWlsZWQgbW9ub2JpdCB0ZXN0ICVkIiwgb25lc19jb3VudCk7Ci0gICAgcmV0dXJuIGVycl9zdGF0dXNfYWxnb19mYWlsOwotICB9Ci0gIAotICAvKiBjaGVjayBwb2tlciB0ZXN0IGRhdGEgKi8KLSAgcG9rZXIgPSAwLjA7Ci0gIGZvciAoaT0wOyBpIDwgMTY7IGkrKykgCi0gICAgcG9rZXIgKz0gKGRvdWJsZSkgZltpXSAqIGZbaV07Ci0KLSAgcG9rZXIgKj0gKDE2LjAgLyA1MDAwLjApOwotICBwb2tlciAtPSA1MDAwLjA7Ci0KLSAgZGVidWdfcHJpbnQobW9kX3N0YXQsICJzdGF0OiBwb2tlciB0ZXN0OiAlZiIsIHBva2VyKTsKLSAgICAKLSAgaWYgKChwb2tlciA8IDIuMTYpIHx8IChwb2tlciA+IDQ2LjE3KSkgewotICAgICAgZGVidWdfcHJpbnQobW9kX3N0YXQsICJzdGF0OiBmYWlsZWQgcG9rZXIgdGVzdCIsIE5VTEwpOwotICAgIHJldHVybiBlcnJfc3RhdHVzX2FsZ29fZmFpbDsKLSAgfQotCi0gIC8qIGNoZWNrIHJ1biBhbmQgZ2FwIGNvdW50cyBhZ2FpbnN0IHRoZSBmaXhlZCBsaW1pdHMgKi8KLSAgZm9yIChpPTA7IGkgPCA2OyBpKyspIAotICAgIGlmICgocnVuc1tpXSA8IGxvX3ZhbHVlW2ldICkgfHwgKHJ1bnNbaV0gPiBoaV92YWx1ZVtpXSkKLQkgfHwgKGdhcHNbaV0gPCBsb192YWx1ZVtpXSApIHx8IChnYXBzW2ldID4gaGlfdmFsdWVbaV0pKSB7Ci0gICAgICBkZWJ1Z19wcmludChtb2Rfc3RhdCwgInN0YXQ6IGZhaWxlZCBydW4vZ2FwIHRlc3QiLCBOVUxMKTsKLSAgICAgIHJldHVybiBlcnJfc3RhdHVzX2FsZ29fZmFpbDsgCisgICAgICAgIC8qIG1vdmUgYWxvbmcgdG8gbmV4dCBvY3RldCAqLworICAgICAgICBkYXRhKys7CiAgICAgfQogCi0gIGRlYnVnX3ByaW50KG1vZF9zdGF0LCAicGFzc2VkIHJhbmRvbSBzdGF0IHRlc3QiLCBOVUxMKTsKLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7CisgICAgaWYgKHNydHBfbW9kX3N0YXQub24pIHsKKyAgICAgICAgZGVidWdfcHJpbnQoc3J0cF9tb2Rfc3RhdCwgInJ1bnMgdGVzdCIsIE5VTEwpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorICAgICAgICAgICAgZGVidWdfcHJpbnQoc3J0cF9tb2Rfc3RhdCwgIiAgcnVuc1tdOiAlZCIsIHJ1bnNbaV0pOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorICAgICAgICAgICAgZGVidWdfcHJpbnQoc3J0cF9tb2Rfc3RhdCwgIiAgZ2Fwc1tdOiAlZCIsIGdhcHNbaV0pOworICAgIH0KKworICAgIC8qIGNoZWNrIHJ1biBhbmQgZ2FwIGNvdW50cyBhZ2FpbnN0IHRoZSBmaXhlZCBsaW1pdHMgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorICAgICAgICBpZiAoKHJ1bnNbaV0gPCBsb192YWx1ZVtpXSkgfHwgKHJ1bnNbaV0gPiBoaV92YWx1ZVtpXSkgfHwKKyAgICAgICAgICAgIChnYXBzW2ldIDwgbG9fdmFsdWVbaV0pIHx8IChnYXBzW2ldID4gaGlfdmFsdWVbaV0pKQorICAgICAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19hbGdvX2ZhaWw7CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JlcGxheS9yZGIuYyBiL2NyeXB0by9yZXBsYXkvcmRiLmMKaW5kZXggMTllY2E3OS4uYWIxYzdiNSAxMDA2NDQKLS0tIGEvY3J5cHRvL3JlcGxheS9yZGIuYworKysgYi9jcnlwdG8vcmVwbGF5L3JkYi5jCkBAIC04LDI2ICs4LDI2IEBACiAgKi8KIAogLyoKLSAqCQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUsIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxNywgQ2lzY28gU3lzdGVtcywgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAorICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgotICogCisgKgogICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKICAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKICAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCiAgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAorICoKICAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKICAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCkBAIC00Myw5NSArNDMsOTUgQEAKICAqCiAgKi8KIAorI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgogCiAjaW5jbHVkZSAicmRiLmgiCiAKLQogLyoKICAqIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgYSByZXBsYXkgZGF0YWJhc2Ugd29ya3MgYXMgZm9sbG93czoKLSAqIAorICoKICAqIHdpbmRvd19zdGFydCBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHBhY2tldCBpbiB0aGUgd2luZG93CiAgKiBiaXRtYXNrICAgICAgYSBiaXQtYnVmZmVyLCBjb250YWluaW5nIHRoZSBtb3N0IHJlY2VudGx5IGVudGVyZWQKLSAqICAgICAgICAgICAgICBpbmRleCBhcyB0aGUgbGVmdG1vc3QgYml0IAorICogICAgICAgICAgICAgIGluZGV4IGFzIHRoZSBsZWZ0bW9zdCBiaXQKICAqCiAgKi8KIAotLyogcmRiX2luaXQgaW5pdGFsaXplcyByZGIgKi8KLQotZXJyX3N0YXR1c190Ci1yZGJfaW5pdChyZGJfdCAqcmRiKSB7Ci0gIHYxMjhfc2V0X3RvX3plcm8oJnJkYi0+Yml0bWFzayk7Ci0gIHJkYi0+d2luZG93X3N0YXJ0ID0gMDsKLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7CisvKiBzcnRwX3JkYl9pbml0IGluaXRhbGl6ZXMgcmRiICovCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX3JkYl9pbml0KHNydHBfcmRiX3QgKnJkYikKK3sKKyAgICB2MTI4X3NldF90b196ZXJvKCZyZGItPmJpdG1hc2spOworICAgIHJkYi0+d2luZG93X3N0YXJ0ID0gMDsKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQogCiAvKgotICogcmRiX2NoZWNrIGNoZWNrcyB0byBzZWUgaWYgaW5kZXggYXBwZWFycyBpbiByZGIKKyAqIHNydHBfcmRiX2NoZWNrIGNoZWNrcyB0byBzZWUgaWYgaW5kZXggYXBwZWFycyBpbiByZGIKICAqLworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9yZGJfY2hlY2soY29uc3Qgc3J0cF9yZGJfdCAqcmRiLCB1aW50MzJfdCBwX2luZGV4KQoreworICAgIC8qIGlmIHRoZSBpbmRleCBhcHBlYXJzIGFmdGVyIChvciBhdCB2ZXJ5IGVuZCBvZikgdGhlIHdpbmRvdywgaXRzIGdvb2QgKi8KKyAgICBpZiAocF9pbmRleCA+PSByZGItPndpbmRvd19zdGFydCArIHJkYl9iaXRzX2luX2JpdG1hc2spIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKKyAgICB9CiAKLWVycl9zdGF0dXNfdAotcmRiX2NoZWNrKGNvbnN0IHJkYl90ICpyZGIsIHVpbnQzMl90IGluZGV4KSB7Ci0gIAotICAvKiBpZiB0aGUgaW5kZXggYXBwZWFycyBhZnRlciAob3IgYXQgdmVyeSBlbmQgb2YpIHRoZSB3aW5kb3csIGl0cyBnb29kICovCi0gIGlmIChpbmRleCA+IHJkYi0+d2luZG93X3N0YXJ0ICsgcmRiX2JpdHNfaW5fYml0bWFzaykKLSAgICByZXR1cm4gZXJyX3N0YXR1c19vazsKLSAgCi0gIC8qIGlmIHRoZSBpbmRleCBhcHBlYXJzIGJlZm9yZSB0aGUgd2luZG93LCBpdHMgYmFkICovCi0gIGlmIChpbmRleCA8IHJkYi0+d2luZG93X3N0YXJ0KQotICAgIHJldHVybiBlcnJfc3RhdHVzX2ZhaWw7CisgICAgLyogaWYgdGhlIGluZGV4IGFwcGVhcnMgYmVmb3JlIHRoZSB3aW5kb3csIGl0cyBiYWQgKi8KKyAgICBpZiAocF9pbmRleCA8IHJkYi0+d2luZG93X3N0YXJ0KSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfcmVwbGF5X29sZDsKKyAgICB9CiAKLSAgLyogb3RoZXJ3aXNlLCB0aGUgaW5kZXggYXBwZWFycyB3aXRoaW4gdGhlIHdpbmRvdywgc28gY2hlY2sgdGhlIGJpdG1hc2sgKi8KLSAgaWYgKHYxMjhfZ2V0X2JpdCgmcmRiLT5iaXRtYXNrLCAoaW5kZXggLSByZGItPndpbmRvd19zdGFydCkpID09IDEpCi0gICAgcmV0dXJuIGVycl9zdGF0dXNfZmFpbDsgICAgCi0gICAgICAKLSAgLyogb3RoZXJ3aXNlLCB0aGUgaW5kZXggaXMgb2theSAqLwotICByZXR1cm4gZXJyX3N0YXR1c19vazsKKyAgICAvKiBvdGhlcndpc2UsIHRoZSBpbmRleCBhcHBlYXJzIHdpdGhpbiB0aGUgd2luZG93LCBzbyBjaGVjayB0aGUgYml0bWFzayAqLworICAgIGlmICh2MTI4X2dldF9iaXQoJnJkYi0+Yml0bWFzaywgKHBfaW5kZXggLSByZGItPndpbmRvd19zdGFydCkpID09IDEpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19yZXBsYXlfZmFpbDsKKyAgICB9CisKKyAgICAvKiBvdGhlcndpc2UsIHRoZSBpbmRleCBpcyBva2F5ICovCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKIH0KIAogLyoKLSAqIHJkYl9hZGRfaW5kZXggYWRkcyBpbmRleCB0byByZGJfdCAoYW5kIGRvZXMgKm5vdCogY2hlY2sgaWYKKyAqIHNydHBfcmRiX2FkZF9pbmRleCBhZGRzIGluZGV4IHRvIHNydHBfcmRiX3QgKGFuZCBkb2VzICpub3QqIGNoZWNrIGlmCiAgKiBpbmRleCBhcHBlYXJzIGluIGRiKQogICoKLSAqIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIHJkYl9jaGVjayBoYXMKKyAqIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIHNydHBfcmRiX2NoZWNrIGhhcwogICogaW5kaWNhdGVkIHRoYXQgdGhlIGluZGV4IGRvZXMgbm90IGFwcGVhciBpbiB0aGUgcmRiLCBlLmcuLCBhIG11dGV4CiAgKiBzaG91bGQgcHJvdGVjdCB0aGUgcmRiIGJldHdlZW4gdGhlc2UgY2FsbHMKICAqLworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9yZGJfYWRkX2luZGV4KHNydHBfcmRiX3QgKnJkYiwgdWludDMyX3QgcF9pbmRleCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgZGVsdGE7CiAKLWVycl9zdGF0dXNfdAotcmRiX2FkZF9pbmRleChyZGJfdCAqcmRiLCB1aW50MzJfdCBpbmRleCkgewotICBpbnQgZGVsdGE7ICAKKyAgICBpZiAocF9pbmRleCA8IHJkYi0+d2luZG93X3N0YXJ0KQorICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX3JlcGxheV9mYWlsOwogCi0gIC8qIGhlcmUgd2UgKmFzc3VtZSogdGhhdCBpbmRleCA+IHJkYi0+d2luZG93X3N0YXJ0ICovCisgICAgZGVsdGEgPSAocF9pbmRleCAtIHJkYi0+d2luZG93X3N0YXJ0KTsKKyAgICBpZiAoZGVsdGEgPCByZGJfYml0c19pbl9iaXRtYXNrKSB7CisgICAgICAgIC8qIGlmIHRoZSBwX2luZGV4IGlzIHdpdGhpbiB0aGUgd2luZG93LCBzZXQgdGhlIGFwcHJvcHJpYXRlIGJpdCAqLworICAgICAgICB2MTI4X3NldF9iaXQoJnJkYi0+Yml0bWFzaywgZGVsdGEpOwogCi0gIGRlbHRhID0gKGluZGV4IC0gcmRiLT53aW5kb3dfc3RhcnQpOyAgICAKLSAgaWYgKGRlbHRhIDwgcmRiX2JpdHNfaW5fYml0bWFzaykgeworICAgIH0gZWxzZSB7CisgICAgICAgIGRlbHRhIC09IHJkYl9iaXRzX2luX2JpdG1hc2sgLSAxOwogCi0gICAgLyogaWYgdGhlIGluZGV4IGlzIHdpdGhpbiB0aGUgd2luZG93LCBzZXQgdGhlIGFwcHJvcHJpYXRlIGJpdCAqLwotICAgIHYxMjhfc2V0X2JpdCgmcmRiLT5iaXRtYXNrLCBkZWx0YSk7CisgICAgICAgIC8qIHNoaWZ0IHRoZSB3aW5kb3cgZm9yd2FyZCBieSBkZWx0YSBiaXRzKi8KKyAgICAgICAgdjEyOF9sZWZ0X3NoaWZ0KCZyZGItPmJpdG1hc2ssIGRlbHRhKTsKKyAgICAgICAgdjEyOF9zZXRfYml0KCZyZGItPmJpdG1hc2ssIHJkYl9iaXRzX2luX2JpdG1hc2sgLSAxKTsKKyAgICAgICAgcmRiLT53aW5kb3dfc3RhcnQgKz0gZGVsdGE7CisgICAgfQogCi0gIH0gZWxzZSB7IAotICAgIAotICAgIGRlbHRhIC09IHJkYl9iaXRzX2luX2JpdG1hc2s7Ci0KLSAgICAvKiBzaGlmdCB0aGUgd2luZG93IGZvcndhcmQgYnkgZGVsdGEgYml0cyovCi0gICAgdjEyOF9sZWZ0X3NoaWZ0KCZyZGItPmJpdG1hc2ssIGRlbHRhKTsKLSAgICB2MTI4X3NldF9iaXQoJnJkYi0+Yml0bWFzaywgcmRiX2JpdHNfaW5fYml0bWFzay1kZWx0YSk7Ci0gICAgcmRiLT53aW5kb3dfc3RhcnQgKz0gZGVsdGE7Ci0KLSAgfSAgICAKLQotICByZXR1cm4gZXJyX3N0YXR1c19vazsKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQogCi1lcnJfc3RhdHVzX3QKLXJkYl9pbmNyZW1lbnQocmRiX3QgKnJkYikgewotCi0gIGlmIChyZGItPndpbmRvd19zdGFydCsrID4gMHg3ZmZmZmZmZikKLSAgICByZXR1cm4gZXJyX3N0YXR1c19rZXlfZXhwaXJlZDsKLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7CitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX3JkYl9pbmNyZW1lbnQoc3J0cF9yZGJfdCAqcmRiKQoreworICAgIGlmIChyZGItPndpbmRvd19zdGFydCA+PSAweDdmZmZmZmZmKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfa2V5X2V4cGlyZWQ7CisgICAgfQorICAgICsrcmRiLT53aW5kb3dfc3RhcnQ7CisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKIH0KIAotdWludDMyX3QKLXJkYl9nZXRfdmFsdWUoY29uc3QgcmRiX3QgKnJkYikgewotICByZXR1cm4gcmRiLT53aW5kb3dfc3RhcnQ7Cit1aW50MzJfdCBzcnRwX3JkYl9nZXRfdmFsdWUoY29uc3Qgc3J0cF9yZGJfdCAqcmRiKQoreworICAgIHJldHVybiByZGItPndpbmRvd19zdGFydDsKIH0KZGlmZiAtLWdpdCBhL2NyeXB0by9yZXBsYXkvcmRieC5jIGIvY3J5cHRvL3JlcGxheS9yZGJ4LmMKaW5kZXggOTAxMmFhNy4uNDBjYmEwMSAxMDA2NDQKLS0tIGEvY3J5cHRvL3JlcGxheS9yZGJ4LmMKKysrIGIvY3J5cHRvL3JlcGxheS9yZGJ4LmMKQEAgLTgsMjYgKzgsMjYgQEAKICAqLwogCiAvKgotICoJCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSwgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDE3LCBDaXNjbyBTeXN0ZW1zLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwogICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKICAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCisgKgogICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAogICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKKyAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKQEAgLTQzLDEzNCArNDMsMTI0IEBACiAgKgogICovCiAKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgInJkYnguaCIKIAotI2RlZmluZSByZGJ4X2hpZ2hfYml0X2luX2JpdG1hc2sgMTI3Ci0KIC8qCi0gKiBmcm9tIGRyYWZ0LWlldGYtYXZ0LXNydHAtMDAudHh0OgorICogZnJvbSBSRkMgMzcxMToKICAqCiAgKiBBIHJlY2VpdmVyIHJlY29uc3RydWN0cyB0aGUgaW5kZXggaSBvZiBhIHBhY2tldCB3aXRoIHNlcXVlbmNlCi0gKiAgbnVtYmVyIHMgdXNpbmcgdGhlIGVzdGltYXRlCisgKiAgbnVtYmVyIFNFUSB1c2luZyB0aGUgZXN0aW1hdGUKICAqCi0gKiBpID0gNjUsNTM2ICogdCArIHMsCisgKiBpID0gMl4xNiAqIHYgKyBTRVEsCiAgKgotICogd2hlcmUgdCBpcyBjaG9zZW4gZnJvbSB0aGUgc2V0IHsgci0xLCByLCByKzEgfSBzdWNoIHRoYXQgaSBpcwotICogY2xvc2VzdCB0byB0aGUgdmFsdWUgNjUsNTM2ICogciArIHNfbC4gIElmIHRoZSB2YWx1ZSByKzEgaXMgdXNlZCwKKyAqIHdoZXJlIHYgaXMgY2hvc2VuIGZyb20gdGhlIHNldCB7IFJPQy0xLCBST0MsIFJPQysxIH0gc3VjaCB0aGF0IGkgaXMKKyAqIGNsb3Nlc3QgdG8gdGhlIHZhbHVlIDJeMTYgKiBST0MgKyBzX2wuICBJZiB0aGUgdmFsdWUgcisxIGlzIHVzZWQsCiAgKiB0aGVuIHRoZSByb2xsb3ZlciBjb3VudGVyIHIgaW4gdGhlIGNyeXB0b2dyYXBoaWMgY29udGV4dCBpcwogICogaW5jcmVtZW50ZWQgYnkgb25lIChpZiB0aGUgcGFja2V0IGNvbnRhaW5pbmcgcyBpcyBhdXRoZW50aWMpLgogICovCiAKLQotCiAvKgogICogcmRieCBpbXBsZW1lbnRhdGlvbiBub3RlcwogICoKLSAqIEEgeHRkX3NlcV9udW1fdCBpcyBlc3NlbnRpYWxseSBhIHNlcXVlbmNlIG51bWJlciBmb3Igd2hpY2ggc29tZSBvZgorICogQSBzcnRwX3h0ZF9zZXFfbnVtX3QgaXMgZXNzZW50aWFsbHkgYSBzZXF1ZW5jZSBudW1iZXIgZm9yIHdoaWNoIHNvbWUgb2YKICAqIHRoZSBkYXRhIG9uIHRoZSB3aXJlIGFyZSBpbXBsaWNpdC4gIEl0IGxvZ2ljYWxseSBjb25zaXN0cyBvZiBhCiAgKiByb2xsb3ZlciBjb3VudGVyIGFuZCBhIHNlcXVlbmNlIG51bWJlcjsgdGhlIHNlcXVlbmNlIG51bWJlciBpcyB0aGUKICAqIGV4cGxpY2l0IHBhcnQsIGFuZCB0aGUgcm9sbG92ZXIgY291bnRlciBpcyB0aGUgaW1wbGljaXQgcGFydC4KICAqCiAgKiBVcG9uIHJlY2VpdmluZyBhIHNlcXVlbmNlX251bWJlciAoZS5nLiBpbiBhIG5ld2x5IHJlY2VpdmVkIFNSVFAKLSAqIHBhY2tldCksIHRoZSBjb21wbGV0ZSB4dGRfc2VxX251bV90IGNhbiBiZSBlc3RpbWF0ZWQgYnkgdXNpbmcgYQotICogbG9jYWwgeHRkX3NlcV9udW1fdCBhcyBhIGJhc2lzLiAgVGhpcyBpcyBkb25lIHVzaW5nIHRoZSBmdW5jdGlvbgotICogaW5kZXhfZ3Vlc3MoJmxvY2FsLCAmZ3Vlc3MsIHNlcV9mcm9tX3BhY2tldCkuICBUaGlzIGZ1bmN0aW9uCisgKiBwYWNrZXQpLCB0aGUgY29tcGxldGUgc3J0cF94dGRfc2VxX251bV90IGNhbiBiZSBlc3RpbWF0ZWQgYnkgdXNpbmcgYQorICogbG9jYWwgc3J0cF94dGRfc2VxX251bV90IGFzIGEgYmFzaXMuICBUaGlzIGlzIGRvbmUgdXNpbmcgdGhlIGZ1bmN0aW9uCisgKiBzcnRwX2luZGV4X2d1ZXNzKCZsb2NhbCwgJmd1ZXNzLCBzZXFfZnJvbV9wYWNrZXQpLiAgVGhpcyBmdW5jdGlvbgogICogcmV0dXJucyB0aGUgZGlmZmVyZW5jZSBvZiB0aGUgZ3Vlc3MgYW5kIHRoZSBsb2NhbCB2YWx1ZS4gIFRoZSBsb2NhbAotICogeHRkX3NlcV9udW1fdCBjYW4gYmUgbW92ZWQgZm9yd2FyZCB0byB0aGUgZ3Vlc3MgdXNpbmcgdGhlIGZ1bmN0aW9uCi0gKiBpbmRleF9hZHZhbmNlKCZndWVzcywgZGVsdGEpLCB3aGVyZSBkZWx0YSBpcyB0aGUgZGlmZmVyZW5jZS4KLSAqIAorICogc3J0cF94dGRfc2VxX251bV90IGNhbiBiZSBtb3ZlZCBmb3J3YXJkIHRvIHRoZSBndWVzcyB1c2luZyB0aGUgZnVuY3Rpb24KKyAqIHNydHBfaW5kZXhfYWR2YW5jZSgmZ3Vlc3MsIGRlbHRhKSwgd2hlcmUgZGVsdGEgaXMgdGhlIGRpZmZlcmVuY2UuCiAgKgotICogQSByZGJ4X3QgY29uc2lzdHMgb2YgYSB4dGRfc2VxX251bV90IGFuZCBhIGJpdG1hc2suICBUaGUgaW5kZXggaXMgaGlnaGVzdAotICogc2VxdWVuY2UgbnVtYmVyIHRoYXQgaGFzIGJlZW4gcmVjZWl2ZWQsIGFuZCB0aGUgYml0bWFzayBpbmRpY2F0ZXMKKyAqCisgKiBBIHNydHBfcmRieF90IGNvbnNpc3RzIG9mIGEgc3J0cF94dGRfc2VxX251bV90IGFuZCBhIGJpdG1hc2suICBUaGUgaW5kZXggaXMKKyAqIGhpZ2hlc3Qgc2VxdWVuY2UgbnVtYmVyIHRoYXQgaGFzIGJlZW4gcmVjZWl2ZWQsIGFuZCB0aGUgYml0bWFzayBpbmRpY2F0ZXMKICAqIHdoaWNoIG9mIHRoZSByZWNlbnQgaW5kaWNpZXMgaGF2ZSBiZWVuIHJlY2VpdmVkIGFzIHdlbGwuICBUaGUKICAqIGhpZ2hlc3QgYml0IGluIHRoZSBiaXRtYXNrIGNvcnJlc3BvbmRzIHRvIHRoZSBpbmRleCBpbiB0aGUgYml0bWFzay4KICAqLwogCi0KLXZvaWQKLWluZGV4X2luaXQoeHRkX3NlcV9udW1fdCAqcGkpIHsKK3ZvaWQgc3J0cF9pbmRleF9pbml0KHNydHBfeHRkX3NlcV9udW1fdCAqcGkpCit7CiAjaWZkZWYgTk9fNjRCSVRfTUFUSAotICAqcGkgPSBtYWtlNjQoMCwwKTsKKyAgICAqcGkgPSBtYWtlNjQoMCwgMCk7CiAjZWxzZQotICAqcGkgPSAwOworICAgICpwaSA9IDA7CiAjZW5kaWYKIH0KIAotdm9pZAotaW5kZXhfYWR2YW5jZSh4dGRfc2VxX251bV90ICpwaSwgc2VxdWVuY2VfbnVtYmVyX3Qgcykgewordm9pZCBzcnRwX2luZGV4X2FkdmFuY2Uoc3J0cF94dGRfc2VxX251bV90ICpwaSwgc3J0cF9zZXF1ZW5jZV9udW1iZXJfdCBzKQorewogI2lmZGVmIE5PXzY0QklUX01BVEgKLSAgLyogYSA+IH5iIG1lYW5zIGErYiB3aWxsIGdlbmVyYXRlIGEgY2FycnkgKi8KLSAgLyogcyBpcyB1aW50MTYgaGVyZSAqLwotICAqcGkgPSBtYWtlNjQoaGlnaDMyKCpwaSkgKyAocyA+IH5sb3czMigqcGkpID8gMSA6IDApLGxvdzMyKCpwaSkgKyBzKTsKKyAgICAvKiBhID4gfmIgbWVhbnMgYStiIHdpbGwgZ2VuZXJhdGUgYSBjYXJyeSAqLworICAgIC8qIHMgaXMgdWludDE2IGhlcmUgKi8KKyAgICAqcGkgPSBtYWtlNjQoaGlnaDMyKCpwaSkgKyAocyA+IH5sb3czMigqcGkpID8gMSA6IDApLCBsb3czMigqcGkpICsgcyk7CiAjZWxzZQotICAqcGkgKz0gczsKKyAgICAqcGkgKz0gczsKICNlbmRpZgogfQogCi0KIC8qCi0gKiBpbmRleF9ndWVzcyhsb2NhbCwgZ3Vlc3MsIHMpCi0gKiAKLSAqIGdpdmVuIGEgeHRkX3NlcV9udW1fdCBsb2NhbCAod2hpY2ggcmVwcmVzZW50cyB0aGUgbGFzdAotICoga25vd24tdG8tYmUtZ29vZCByZWNlaXZlZCB4dGRfc2VxX251bV90KSBhbmQgYSBzZXF1ZW5jZSBudW1iZXIgcworICogc3J0cF9pbmRleF9ndWVzcyhsb2NhbCwgZ3Vlc3MsIHMpCisgKgorICogZ2l2ZW4gYSBzcnRwX3h0ZF9zZXFfbnVtX3QgbG9jYWwgKHdoaWNoIHJlcHJlc2VudHMgdGhlIGxhc3QKKyAqIGtub3duLXRvLWJlLWdvb2QgcmVjZWl2ZWQgc3J0cF94dGRfc2VxX251bV90KSBhbmQgYSBzZXF1ZW5jZSBudW1iZXIgcwogICogKGZyb20gYSBuZXdseSBhcnJpdmVkIHBhY2tldCksIHNldHMgdGhlIGNvbnRlbnRzIG9mICpndWVzcyB0bwogICogY29udGFpbiB0aGUgYmVzdCBndWVzcyBvZiB0aGUgcGFja2V0IGluZGV4IHRvIHdoaWNoIHMgY29ycmVzcG9uZHMsCiAgKiBhbmQgcmV0dXJucyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuICpndWVzcyBhbmQgKmxvY2FsCiAgKgogICogbm90YSBiZW5lIC0gdGhlIG91dHB1dCBpcyBhIHNpZ25lZCBpbnRlZ2VyLCBET04nVCBjYXN0IGl0IHRvIGEKLSAqIHVuc2lnbmVkIGludGVnZXIhICAKKyAqIHVuc2lnbmVkIGludGVnZXIhCiAgKi8KIAotaW50Ci1pbmRleF9ndWVzcyhjb25zdCB4dGRfc2VxX251bV90ICpsb2NhbCwKLQkJICAgeHRkX3NlcV9udW1fdCAqZ3Vlc3MsCi0JCSAgIHNlcXVlbmNlX251bWJlcl90IHMpIHsKK2ludDMyX3Qgc3J0cF9pbmRleF9ndWVzcyhjb25zdCBzcnRwX3h0ZF9zZXFfbnVtX3QgKmxvY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfeHRkX3NlcV9udW1fdCAqZ3Vlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9zZXF1ZW5jZV9udW1iZXJfdCBzKQorewogI2lmZGVmIE5PXzY0QklUX01BVEgKLSAgdWludDMyX3QgbG9jYWxfcm9jID0gKChoaWdoMzIoKmxvY2FsKSA8PCAxNikgfAotCQkJCQkJKGxvdzMyKCpsb2NhbCkgPj4gMTYpKTsKLSAgdWludDE2X3QgbG9jYWxfc2VxID0gKHVpbnQxNl90KSAobG93MzIoKmxvY2FsKSk7CisgICAgdWludDMyX3QgbG9jYWxfcm9jID0gKChoaWdoMzIoKmxvY2FsKSA8PCAxNikgfCAobG93MzIoKmxvY2FsKSA+PiAxNikpOworICAgIHVpbnQxNl90IGxvY2FsX3NlcSA9ICh1aW50MTZfdCkobG93MzIoKmxvY2FsKSk7CiAjZWxzZQotICB1aW50MzJfdCBsb2NhbF9yb2MgPSAodWludDMyX3QpKCpsb2NhbCA+PiAxNik7Ci0gIHVpbnQxNl90IGxvY2FsX3NlcSA9ICh1aW50MTZfdCkgKmxvY2FsOworICAgIHVpbnQzMl90IGxvY2FsX3JvYyA9ICh1aW50MzJfdCkoKmxvY2FsID4+IDE2KTsKKyAgICB1aW50MTZfdCBsb2NhbF9zZXEgPSAodWludDE2X3QpKmxvY2FsOwogI2VuZGlmCi0jaWZkZWYgTk9fNjRCSVRfTUFUSAotICB1aW50MzJfdCBndWVzc19yb2MgPSAoKGhpZ2gzMigqZ3Vlc3MpIDw8IDE2KSB8Ci0JCQkJCQkobG93MzIoKmd1ZXNzKSA+PiAxNikpOwotICB1aW50MTZfdCBndWVzc19zZXEgPSAodWludDE2X3QpIChsb3czMigqZ3Vlc3MpKTsKLSNlbHNlCi0gIHVpbnQzMl90IGd1ZXNzX3JvYyA9ICh1aW50MzJfdCkoKmd1ZXNzID4+IDE2KTsKLSAgdWludDE2X3QgZ3Vlc3Nfc2VxID0gKHVpbnQxNl90KSAqZ3Vlc3M7ICAKLSNlbmRpZgotICBpbnQgZGlmZmVyZW5jZTsKLSAgCi0gIGlmIChsb2NhbF9zZXEgPCBzZXFfbnVtX21lZGlhbikgewotICAgIGlmIChzIC0gbG9jYWxfc2VxID4gc2VxX251bV9tZWRpYW4pIHsKLSAgICAgIGd1ZXNzX3JvYyA9IGxvY2FsX3JvYyAtIDE7Ci0gICAgICBkaWZmZXJlbmNlID0gc2VxX251bV9tYXggLSBzICsgbG9jYWxfc2VxOworICAgIHVpbnQzMl90IGd1ZXNzX3JvYzsKKyAgICB1aW50MTZfdCBndWVzc19zZXE7CisgICAgaW50MzJfdCBkaWZmZXJlbmNlOworCisgICAgaWYgKGxvY2FsX3NlcSA8IHNlcV9udW1fbWVkaWFuKSB7CisgICAgICAgIGlmIChzIC0gbG9jYWxfc2VxID4gc2VxX251bV9tZWRpYW4pIHsKKyAgICAgICAgICAgIGd1ZXNzX3JvYyA9IGxvY2FsX3JvYyAtIDE7CisgICAgICAgICAgICBkaWZmZXJlbmNlID0gcyAtIGxvY2FsX3NlcSAtIHNlcV9udW1fbWF4OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZ3Vlc3Nfcm9jID0gbG9jYWxfcm9jOworICAgICAgICAgICAgZGlmZmVyZW5jZSA9IHMgLSBsb2NhbF9zZXE7CisgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgZ3Vlc3Nfcm9jID0gbG9jYWxfcm9jOwotICAgICAgZGlmZmVyZW5jZSA9IHMgLSBsb2NhbF9zZXE7CisgICAgICAgIGlmIChsb2NhbF9zZXEgLSBzZXFfbnVtX21lZGlhbiA+IHMpIHsKKyAgICAgICAgICAgIGd1ZXNzX3JvYyA9IGxvY2FsX3JvYyArIDE7CisgICAgICAgICAgICBkaWZmZXJlbmNlID0gcyAtIGxvY2FsX3NlcSArIHNlcV9udW1fbWF4OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZ3Vlc3Nfcm9jID0gbG9jYWxfcm9jOworICAgICAgICAgICAgZGlmZmVyZW5jZSA9IHMgLSBsb2NhbF9zZXE7CisgICAgICAgIH0KICAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKGxvY2FsX3NlcSAtIHNlcV9udW1fbWVkaWFuID4gcykgewotICAgICAgZ3Vlc3Nfcm9jID0gbG9jYWxfcm9jKzE7Ci0gICAgICBkaWZmZXJlbmNlID0gc2VxX251bV9tYXggLSBsb2NhbF9zZXEgKyBzOwotICAgIH0gZWxzZSB7Ci0gICAgICBkaWZmZXJlbmNlID0gcyAtIGxvY2FsX3NlcTsKLSAgICAgIGd1ZXNzX3JvYyA9IGxvY2FsX3JvYzsKLSAgICB9Ci0gIH0KLSAgZ3Vlc3Nfc2VxID0gczsKLSAgCi0gIC8qIE5vdGU6IGd1ZXNzX3JvYyBpcyAzMiBiaXRzLCBzbyB0aGlzIGdlbmVyYXRlcyBhIDQ4LWJpdCByZXN1bHQhICovCisgICAgZ3Vlc3Nfc2VxID0gczsKKworLyogTm90ZTogZ3Vlc3Nfcm9jIGlzIDMyIGJpdHMsIHNvIHRoaXMgZ2VuZXJhdGVzIGEgNDgtYml0IHJlc3VsdCEgKi8KICNpZmRlZiBOT182NEJJVF9NQVRICi0gICpndWVzcyA9IG1ha2U2NChndWVzc19yb2MgPj4gMTYsCi0JCQkJICAoZ3Vlc3Nfcm9jIDw8IDE2KSB8IGd1ZXNzX3NlcSk7CisgICAgKmd1ZXNzID0gbWFrZTY0KGd1ZXNzX3JvYyA+PiAxNiwgKGd1ZXNzX3JvYyA8PCAxNikgfCBndWVzc19zZXEpOwogI2Vsc2UKLSAgKmd1ZXNzID0gKCgodWludDY0X3QpIGd1ZXNzX3JvYykgPDwgMTYpIHwgZ3Vlc3Nfc2VxOworICAgICpndWVzcyA9ICgoKHVpbnQ2NF90KWd1ZXNzX3JvYykgPDwgMTYpIHwgZ3Vlc3Nfc2VxOwogI2VuZGlmCiAKLSAgcmV0dXJuIGRpZmZlcmVuY2U7CisgICAgcmV0dXJuIGRpZmZlcmVuY2U7CiB9CiAKIC8qCkBAIC0xNzgsMTEyICsxNjgsMjE5IEBACiAgKgogICovCiAKLQogLyoKLSAqICByZGJ4X2luaXQoJnIpIGluaXRhbGl6ZXMgdGhlIHJkYnhfdCBwb2ludGVkIHRvIGJ5IHIgCisgKiAgc3J0cF9yZGJ4X2luaXQoJnIsIHdzKSBpbml0aWFsaXplcyB0aGUgc3J0cF9yZGJ4X3QgcG9pbnRlZCB0byBieSByIHdpdGgKKyAqIHdpbmRvdyBzaXplIHdzCiAgKi8KK3NydHBfZXJyX3N0YXR1c190IHNydHBfcmRieF9pbml0KHNydHBfcmRieF90ICpyZGJ4LCB1bnNpZ25lZCBsb25nIHdzKQoreworICAgIGlmICh3cyA9PSAwKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYmFkX3BhcmFtOworICAgIH0KIAotZXJyX3N0YXR1c190Ci1yZGJ4X2luaXQocmRieF90ICpyZGJ4KSB7Ci0gIHYxMjhfc2V0X3RvX3plcm8oJnJkYngtPmJpdG1hc2spOwotICBpbmRleF9pbml0KCZyZGJ4LT5pbmRleCk7CisgICAgaWYgKGJpdHZlY3Rvcl9hbGxvYygmcmRieC0+Yml0bWFzaywgd3MpICE9IDApIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19hbGxvY19mYWlsOworICAgIH0KIAotICByZXR1cm4gZXJyX3N0YXR1c19vazsKKyAgICBzcnRwX2luZGV4X2luaXQoJnJkYngtPmluZGV4KTsKKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7CiB9CiAKKy8qCisgKiAgc3J0cF9yZGJ4X2RlYWxsb2MoJnIpIGZyZWVzIG1lbW9yeSBmb3IgdGhlIHNydHBfcmRieF90IHBvaW50ZWQgdG8gYnkgcgorICovCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX3JkYnhfZGVhbGxvYyhzcnRwX3JkYnhfdCAqcmRieCkKK3sKKyAgICBiaXR2ZWN0b3JfZGVhbGxvYygmcmRieC0+Yml0bWFzayk7CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOworfQogCiAvKgotICogcmRieF9jaGVjaygmciwgZGVsdGEpIGNoZWNrcyB0byBzZWUgaWYgdGhlIHh0ZF9zZXFfbnVtX3QKKyAqIHNydHBfcmRieF9zZXRfcm9jKHJkYngsIHJvYykgaW5pdGFsaXplcyB0aGUgc3J0cF9yZGJ4X3QgYXQgdGhlIGxvY2F0aW9uIHJkYngKKyAqIHRvIGhhdmUgdGhlIHJvbGxvdmVyIGNvdW50ZXIgdmFsdWUgcm9jLiAgSWYgdGhhdCB2YWx1ZSBpcyBsZXNzIHRoYW4KKyAqIHRoZSBjdXJyZW50IHJvbGxvdmVyIGNvdW50ZXIgdmFsdWUsIHRoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMKKyAqIHNydHBfZXJyX3N0YXR1c19yZXBsYXlfb2xkOyBvdGhlcndpc2UsIHNydHBfZXJyX3N0YXR1c19vayBpcyByZXR1cm5lZC4KKyAqCisgKi8KK3NydHBfZXJyX3N0YXR1c190IHNydHBfcmRieF9zZXRfcm9jKHNydHBfcmRieF90ICpyZGJ4LCB1aW50MzJfdCByb2MpCit7CisgICAgYml0dmVjdG9yX3NldF90b196ZXJvKCZyZGJ4LT5iaXRtYXNrKTsKKworI2lmZGVmIE5PXzY0QklUX01BVEgKKyNlcnJvciBub3QgeWV0IGltcGxlbWVudGVkCisjZWxzZQorCisgICAgLyogbWFrZSBzdXJlIHRoYXQgd2UncmUgbm90IG1vdmluZyBiYWNrd2FyZHMgKi8KKyAgICBpZiAocm9jIDwgKHJkYngtPmluZGV4ID4+IDE2KSkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX3JlcGxheV9vbGQ7CisgICAgfQorCisgICAgcmRieC0+aW5kZXggJj0gMHhmZmZmOyAgICAgICAgICAgICAgICAvKiByZXRhaW4gbG93ZXN0IDE2IGJpdHMgKi8KKyAgICByZGJ4LT5pbmRleCB8PSAoKHVpbnQ2NF90KXJvYykgPDwgMTY7IC8qIHNldCBST0MgKi8KKyNlbmRpZgorCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKworLyoKKyAqIHNydHBfcmRieF9nZXRfcGFja2V0X2luZGV4KHJkYngpIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBwYWNrZXQgaW5kZXgKKyAqIGZvciB0aGUgc3J0cF9yZGJ4X3QgcG9pbnRlZCB0byBieSByZGJ4CisgKgorICovCitzcnRwX3h0ZF9zZXFfbnVtX3Qgc3J0cF9yZGJ4X2dldF9wYWNrZXRfaW5kZXgoY29uc3Qgc3J0cF9yZGJ4X3QgKnJkYngpCit7CisgICAgcmV0dXJuIHJkYngtPmluZGV4OworfQorCisvKgorICogc3J0cF9yZGJ4X2dldF93aW5kb3dfc2l6ZShyZGJ4KSByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgd2luZG93IHNpemUKKyAqIGZvciB0aGUgc3J0cF9yZGJ4X3QgcG9pbnRlZCB0byBieSByZGJ4CisgKgorICovCit1bnNpZ25lZCBsb25nIHNydHBfcmRieF9nZXRfd2luZG93X3NpemUoY29uc3Qgc3J0cF9yZGJ4X3QgKnJkYngpCit7CisgICAgcmV0dXJuIGJpdHZlY3Rvcl9nZXRfbGVuZ3RoKCZyZGJ4LT5iaXRtYXNrKTsKK30KKworLyoKKyAqIHNydHBfcmRieF9jaGVjaygmciwgZGVsdGEpIGNoZWNrcyB0byBzZWUgaWYgdGhlIHNydHBfeHRkX3NlcV9udW1fdAogICogd2hpY2ggaXMgYXQgcmRieC0+aW5kZXggKyBkZWx0YSBpcyBpbiB0aGUgcmRiCiAgKi8KK3NydHBfZXJyX3N0YXR1c190IHNydHBfcmRieF9jaGVjayhjb25zdCBzcnRwX3JkYnhfdCAqcmRieCwgaW50IGRlbHRhKQoreworICAgIGlmIChkZWx0YSA+IDApIHsgLyogaWYgZGVsdGEgaXMgcG9zaXRpdmUsIGl0J3MgZ29vZCAqLworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOworICAgIH0gZWxzZSBpZiAoKGludCkoYml0dmVjdG9yX2dldF9sZW5ndGgoJnJkYngtPmJpdG1hc2spIC0gMSkgKyBkZWx0YSA8IDApIHsKKyAgICAgICAgLyogaWYgZGVsdGEgaXMgbG93ZXIgdGhhbiB0aGUgYml0bWFzaywgaXQncyBiYWQgKi8KKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19yZXBsYXlfb2xkOworICAgIH0gZWxzZSBpZiAoYml0dmVjdG9yX2dldF9iaXQoCisgICAgICAgICAgICAgICAgICAgJnJkYngtPmJpdG1hc2ssCisgICAgICAgICAgICAgICAgICAgKGludCkoYml0dmVjdG9yX2dldF9sZW5ndGgoJnJkYngtPmJpdG1hc2spIC0gMSkgKyBkZWx0YSkgPT0KKyAgICAgICAgICAgICAgIDEpIHsKKyAgICAgICAgLyogZGVsdGEgaXMgd2l0aGluIHRoZSB3aW5kb3csIHNvIGNoZWNrIHRoZSBiaXRtYXNrICovCisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfcmVwbGF5X2ZhaWw7CisgICAgfQorICAgIC8qIG90aGVyd2lzZSwgdGhlIGluZGV4IGlzIG9rYXkgKi8KIAotZXJyX3N0YXR1c190Ci1yZGJ4X2NoZWNrKGNvbnN0IHJkYnhfdCAqcmRieCwgaW50IGRlbHRhKSB7Ci0gIAotICBpZiAoZGVsdGEgPiAwKSB7ICAgICAgIC8qIGlmIGRlbHRhIGlzIHBvc2l0aXZlLCBpdCdzIGdvb2QgKi8KLSAgICByZXR1cm4gZXJyX3N0YXR1c19vazsKLSAgfSBlbHNlIGlmIChyZGJ4X2hpZ2hfYml0X2luX2JpdG1hc2sgKyBkZWx0YSA8IDApIHsgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZiBkZWx0YSBpcyBsb3dlciB0aGFuIHRoZSBiaXRtYXNrLCBpdCdzIGJhZCAqLwotICAgIHJldHVybiBlcnJfc3RhdHVzX3JlcGxheV9vbGQ7IAotICB9IGVsc2UgaWYgKHYxMjhfZ2V0X2JpdCgmcmRieC0+Yml0bWFzaywgCi0JCQkgIHJkYnhfaGlnaF9iaXRfaW5fYml0bWFzayArIGRlbHRhKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVsdGEgaXMgd2l0aGluIHRoZSB3aW5kb3csIHNvIGNoZWNrIHRoZSBiaXRtYXNrICovCi0gICAgcmV0dXJuIGVycl9zdGF0dXNfcmVwbGF5X2ZhaWw7ICAgIAotICB9Ci0gLyogb3RoZXJ3aXNlLCB0aGUgaW5kZXggaXMgb2theSAqLwotCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOyAKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQogCiAvKgotICogcmRieF9hZGRfaW5kZXggYWRkcyB0aGUgeHRkX3NlcV9udW1fdCBhdCByZGJ4LT53aW5kb3dfc3RhcnQgKyBkIHRvCi0gKiByZXBsYXlfZGIgKGFuZCBkb2VzICpub3QqIGNoZWNrIGlmIHRoYXQgeHRkX3NlcV9udW1fdCBhcHBlYXJzIGluIGRiKQorICogc3J0cF9yZGJ4X2FkZF9pbmRleCBhZGRzIHRoZSBzcnRwX3h0ZF9zZXFfbnVtX3QgYXQgcmRieC0+d2luZG93X3N0YXJ0ICsgZCB0bworICogcmVwbGF5X2RiIChhbmQgZG9lcyAqbm90KiBjaGVjayBpZiB0aGF0IHNydHBfeHRkX3NlcV9udW1fdCBhcHBlYXJzIGluIGRiKQogICoKICAqIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIHJlcGxheV9jaGVjayBoYXMKICAqIGluZGljYXRlZCB0aGF0IHRoZSBpbmRleCBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIHJkYngsIGUuZy4sIGEgbXV0ZXgKICAqIHNob3VsZCBwcm90ZWN0IHRoZSByZGJ4IGJldHdlZW4gdGhlc2UgY2FsbHMgaWYgbmVlZCBiZQogICovCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX3JkYnhfYWRkX2luZGV4KHNydHBfcmRieF90ICpyZGJ4LCBpbnQgZGVsdGEpCit7CisgICAgaWYgKGRlbHRhID4gMCkgeworICAgICAgICAvKiBzaGlmdCBmb3J3YXJkIGJ5IGRlbHRhICovCisgICAgICAgIHNydHBfaW5kZXhfYWR2YW5jZSgmcmRieC0+aW5kZXgsIGRlbHRhKTsKKyAgICAgICAgYml0dmVjdG9yX2xlZnRfc2hpZnQoJnJkYngtPmJpdG1hc2ssIGRlbHRhKTsKKyAgICAgICAgYml0dmVjdG9yX3NldF9iaXQoJnJkYngtPmJpdG1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHZlY3Rvcl9nZXRfbGVuZ3RoKCZyZGJ4LT5iaXRtYXNrKSAtIDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIGRlbHRhIGlzIGluIHdpbmRvdyAqLworICAgICAgICBiaXR2ZWN0b3Jfc2V0X2JpdCgmcmRieC0+Yml0bWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYml0dmVjdG9yX2dldF9sZW5ndGgoJnJkYngtPmJpdG1hc2spIC0gMSArIGRlbHRhKTsKKyAgICB9CiAKLWVycl9zdGF0dXNfdAotcmRieF9hZGRfaW5kZXgocmRieF90ICpyZGJ4LCBpbnQgZGVsdGEpIHsKLSAgCi0gIGlmIChkZWx0YSA+IDApIHsKLSAgICAvKiBzaGlmdCBmb3J3YXJkIGJ5IGRlbHRhICovCi0gICAgaW5kZXhfYWR2YW5jZSgmcmRieC0+aW5kZXgsIGRlbHRhKTsKLSAgICB2MTI4X2xlZnRfc2hpZnQoJnJkYngtPmJpdG1hc2ssIGRlbHRhKTsKLSAgICB2MTI4X3NldF9iaXQoJnJkYngtPmJpdG1hc2ssIDEyNyk7Ci0gIH0gZWxzZSB7Ci0gICAgLyogZGVsdGEgaXMgaW4gd2luZG93LCBzbyBmbGlwIGJpdCBpbiBiaXRtYXNrICovCi0gICAgdjEyOF9zZXRfYml0KCZyZGJ4LT5iaXRtYXNrLCAtZGVsdGEpOwotICB9CisgICAgLyogbm90ZSB0aGF0IHdlIG5lZWQgbm90IGNvbnNpZGVyIHRoZSBjYXNlIHRoYXQgZGVsdGEgPT0gMCAqLwogCi0gIC8qIG5vdGUgdGhhdCB3ZSBuZWVkIG5vdCBjb25zaWRlciB0aGUgY2FzZSB0aGF0IGRlbHRhID09IDAgKi8KLSAgCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7CiB9CiAKLQotCiAvKgotICogcmRieF9lc3RpbWF0ZV9pbmRleChyZGJ4LCBndWVzcywgcykKLSAqIAorICogc3J0cF9yZGJ4X2VzdGltYXRlX2luZGV4KHJkYngsIGd1ZXNzLCBzKQorICoKICAqIGdpdmVuIGFuIHJkYnggYW5kIGEgc2VxdWVuY2UgbnVtYmVyIHMgKGZyb20gYSBuZXdseSBhcnJpdmVkIHBhY2tldCksCiAgKiBzZXRzIHRoZSBjb250ZW50cyBvZiAqZ3Vlc3MgdG8gY29udGFpbiB0aGUgYmVzdCBndWVzcyBvZiB0aGUgcGFja2V0CiAgKiBpbmRleCB0byB3aGljaCBzIGNvcnJlc3BvbmRzLCBhbmQgcmV0dXJucyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuCiAgKiAqZ3Vlc3MgYW5kIHRoZSBsb2NhbGx5IHN0b3JlZCBzeW5jaCBpbmZvCiAgKi8KK2ludDMyX3Qgc3J0cF9yZGJ4X2VzdGltYXRlX2luZGV4KGNvbnN0IHNydHBfcmRieF90ICpyZGJ4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF94dGRfc2VxX251bV90ICpndWVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfc2VxdWVuY2VfbnVtYmVyX3QgcykKK3sKKy8qCisgKiBpZiB0aGUgc2VxdWVuY2UgbnVtYmVyIGFuZCByb2xsb3ZlciBjb3VudGVyIGluIHRoZSByZGJ4IGFyZQorICogbm9uLXplcm8sIHRoZW4gdXNlIHRoZSBzcnRwX2luZGV4X2d1ZXNzKC4uLikgZnVuY3Rpb24sIG90aGVyd2lzZSwganVzdAorICogc2V0IHRoZSByb2xsb3ZlciBjb3VudGVyIHRvIHplcm8gKHNpbmNlIHRoZSBzcnRwX2luZGV4X2d1ZXNzKC4uLikKKyAqIGZ1bmN0aW9uIG1pZ2h0IGluY29ycmVjdGx5IGd1ZXNzIHRoYXQgdGhlIHJvbGxvdmVyIGNvdW50ZXIgaXMKKyAqIDB4ZmZmZmZmZmYpCisgKi8KIAotaW50Ci1yZGJ4X2VzdGltYXRlX2luZGV4KGNvbnN0IHJkYnhfdCAqcmRieCwKLQkJICAgIHh0ZF9zZXFfbnVtX3QgKmd1ZXNzLAotCQkgICAgc2VxdWVuY2VfbnVtYmVyX3QgcykgewotCi0gIC8qCi0gICAqIGlmIHRoZSBzZXF1ZW5jZSBudW1iZXIgYW5kIHJvbGxvdmVyIGNvdW50ZXIgaW4gdGhlIHJkYnggYXJlCi0gICAqIG5vbi16ZXJvLCB0aGVuIHVzZSB0aGUgaW5kZXhfZ3Vlc3MoLi4uKSBmdW5jdGlvbiwgb3RoZXJ3aXNlLCBqdXN0Ci0gICAqIHNldCB0aGUgcm9sbG92ZXIgY291bnRlciB0byB6ZXJvIChzaW5jZSB0aGUgaW5kZXhfZ3Vlc3MoLi4uKQotICAgKiBmdW5jdGlvbiBtaWdodCBpbmNvcnJlY3RseSBndWVzcyB0aGF0IHRoZSByb2xsb3ZlciBjb3VudGVyIGlzCi0gICAqIDB4ZmZmZmZmZmYpCi0gICAqLwotCi0jaWYgTk9fNjRCSVRfTUFUSAotICAvKiBzZXFfbnVtX21lZGlhbiA9IDB4ODAwMCAqLwotICBpZiAoaGlnaDMyKHJkYngtPmluZGV4KSA+IDAgfHwKLQkgIGxvdzMyKHJkYngtPmluZGV4KSA+IHNlcV9udW1fbWVkaWFuKQorI2lmZGVmIE5PXzY0QklUX01BVEgKKyAgICAvKiBzZXFfbnVtX21lZGlhbiA9IDB4ODAwMCAqLworICAgIGlmIChoaWdoMzIocmRieC0+aW5kZXgpID4gMCB8fCBsb3czMihyZGJ4LT5pbmRleCkgPiBzZXFfbnVtX21lZGlhbikKICNlbHNlCi0gIGlmIChyZGJ4LT5pbmRleCA+IHNlcV9udW1fbWVkaWFuKQorICAgIGlmIChyZGJ4LT5pbmRleCA+IHNlcV9udW1fbWVkaWFuKQogI2VuZGlmCi0gICAgcmV0dXJuIGluZGV4X2d1ZXNzKCZyZGJ4LT5pbmRleCwgZ3Vlc3MsIHMpOworICAgIHsKKyAgICAgICAgcmV0dXJuIHNydHBfaW5kZXhfZ3Vlc3MoJnJkYngtPmluZGV4LCBndWVzcywgcyk7CisgICAgfQogCi0jaWYgTk9fNjRCSVRfTUFUSAotICAqZ3Vlc3MgPSBtYWtlNjQoMCwodWludDMyX3QpIHMpOwotI2Vsc2UgIAotICAqZ3Vlc3MgPSBzOwotI2VuZGlmCi0KLSNpZiBOT182NEJJVF9NQVRICi0gIHJldHVybiBzIC0gKHVpbnQxNl90KSBsb3czMihyZGJ4LT5pbmRleCk7CisjaWZkZWYgTk9fNjRCSVRfTUFUSAorICAgICpndWVzcyA9IG1ha2U2NCgwLCAodWludDMyX3Qpcyk7CiAjZWxzZQotICByZXR1cm4gcyAtICh1aW50MTZfdCkgcmRieC0+aW5kZXg7CisgICAgKmd1ZXNzID0gczsKICNlbmRpZgorCisjaWZkZWYgTk9fNjRCSVRfTUFUSAorICAgIHJldHVybiBzIC0gKHVpbnQxNl90KWxvdzMyKHJkYngtPmluZGV4KTsKKyNlbHNlCisgICAgcmV0dXJuIHMgLSAodWludDE2X3QpcmRieC0+aW5kZXg7CisjZW5kaWYKK30KKworLyoKKyAqIHNydHBfcmRieF9nZXRfcm9jKHJkYngpCisgKgorICogR2V0IHRoZSBjdXJyZW50IHJvbGxvdmVyIGNvdW50ZXIKKyAqCisgKi8KK3VpbnQzMl90IHNydHBfcmRieF9nZXRfcm9jKGNvbnN0IHNydHBfcmRieF90ICpyZGJ4KQoreworICAgIHVpbnQzMl90IHJvYzsKKworI2lmZGVmIE5PXzY0QklUX01BVEgKKyAgICByb2MgPSAoKGhpZ2gzMihyZGJ4LT5pbmRleCkgPDwgMTYpIHwgKGxvdzMyKHJkYngtPmluZGV4KSA+PiAxNikpOworI2Vsc2UKKyAgICByb2MgPSAodWludDMyX3QpKHJkYngtPmluZGV4ID4+IDE2KTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJvYzsKK30KKworLyoKKyAqIHNydHBfcmRieF9zZXRfcm9jX3NlcShyZGJ4LCByb2MsIHNlcSkgaW5pdGFsaXplcyB0aGUgc3J0cF9yZGJ4X3QgYXQgdGhlCisgKiBsb2NhdGlvbiByZGJ4IHRvIGhhdmUgdGhlIHJvbGxvdmVyIGNvdW50ZXIgdmFsdWUgcm9jIGFuZCBwYWNrZXQgc2VxdWVuY2UKKyAqIG51bWJlciBzZXEuICBJZiB0aGUgbmV3IHJvbGxvdmVyIGNvdW50ZXIgdmFsdWUgaXMgbGVzcyB0aGFuIHRoZSBjdXJyZW50CisgKiByb2xsb3ZlciBjb3VudGVyIHZhbHVlLCB0aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zCisgKiBzcnRwX2Vycl9zdGF0dXNfcmVwbGF5X29sZCwgb3RoZXJ3aXNlLCBzcnRwX2Vycl9zdGF0dXNfb2sgaXMgcmV0dXJuZWQuCisgKi8KK3NydHBfZXJyX3N0YXR1c190IHNydHBfcmRieF9zZXRfcm9jX3NlcShzcnRwX3JkYnhfdCAqcmRieCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCByb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2VxKQoreworI2lmZGVmIE5PXzY0QklUX01BVEgKKyNlcnJvciBub3QgeWV0IGltcGxlbWVudGVkCisjZWxzZQorCisgICAgLyogbWFrZSBzdXJlIHRoYXQgd2UncmUgbm90IG1vdmluZyBiYWNrd2FyZHMgKi8KKyAgICBpZiAocm9jIDwgKHJkYngtPmluZGV4ID4+IDE2KSkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX3JlcGxheV9vbGQ7CisgICAgfQorCisgICAgcmRieC0+aW5kZXggPSBzZXE7CisgICAgcmRieC0+aW5kZXggfD0gKCh1aW50NjRfdClyb2MpIDw8IDE2OyAvKiBzZXQgUk9DICovCisjZW5kaWYKKworICAgIGJpdHZlY3Rvcl9zZXRfdG9femVybygmcmRieC0+Yml0bWFzayk7CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JlcGxheS91dF9zaW0uYyBiL2NyeXB0by9yZXBsYXkvdXRfc2ltLmMKaW5kZXggYTM0OGQ3Yy4uMjgyNWI2OCAxMDA2NDQKLS0tIGEvY3J5cHRvL3JlcGxheS91dF9zaW0uYworKysgYi9jcnlwdG8vcmVwbGF5L3V0X3NpbS5jCkBAIC0zLDMyICszLDMyIEBACiAgKgogICogYW4gdW5yZWxpYWJsZSB0cmFuc3BvcnQgc2ltdWxhdG9yCiAgKiAoZm9yIHRlc3RpbmcgcmVwbGF5IGRhdGFiYXNlcyBhbmQgc3VjaGxpa2UpCi0gKiAKKyAqCiAgKiBEYXZpZCBBLiBNY0dyZXcKICAqIENpc2NvIFN5c3RlbXMsIEluYy4KICAqLwogCiAvKgotICoJCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSwgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDE3LCBDaXNjbyBTeXN0ZW1zLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwogICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKICAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCisgKgogICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAogICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKKyAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKQEAgLTQ0LDYyICs0NCw2NCBAQAogICoKICAqLwogCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCiAKICNpbmNsdWRlICJ1dF9zaW0uaCIKKyNpbmNsdWRlICJjaXBoZXJfcHJpdi5oIgogCi0KLWludAotdXRfY29tcGFyKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpIHsKLSAgcmV0dXJuIHJhbmRvbSgpID4gKFJBTkRfTUFYLzIpID8gLTEgOiAxOworaW50IHV0X2NvbXBhcihjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworICAgIHVpbnQ4X3QgcjsKKyAgICBzcnRwX2NpcGhlcl9yYW5kX2Zvcl90ZXN0cygmciwgc2l6ZW9mKHIpKTsKKyAgICByZXR1cm4gciA+IChVSU5UOF9NQVggLyAyKSA/IC0xIDogMTsKIH0KIAotdm9pZAotdXRfaW5pdCh1dF9jb25uZWN0aW9uICp1dGMpIHsKLSAgaW50IGk7Ci0gIHV0Yy0+aW5kZXggPSAwOwordm9pZCB1dF9pbml0KHV0X2Nvbm5lY3Rpb24gKnV0YykKK3sKKyAgICBpbnQgaTsKKyAgICB1dGMtPmluZGV4ID0gMDsKIAotICBmb3IgKGk9MDsgaSA8IFVUX0JVRjsgaSsrKQotICAgIHV0Yy0+YnVmZmVyW2ldID0gaTsKLSAgCi0gIHFzb3J0KHV0Yy0+YnVmZmVyLCBVVF9CVUYsIHNpemVvZih1aW50MzJfdCksIHV0X2NvbXBhcik7CisgICAgZm9yIChpID0gMDsgaSA8IFVUX0JVRjsgaSsrKQorICAgICAgICB1dGMtPmJ1ZmZlcltpXSA9IGk7CiAKLSAgdXRjLT5pbmRleCA9IFVUX0JVRiAtIDE7CisgICAgcXNvcnQodXRjLT5idWZmZXIsIFVUX0JVRiwgc2l6ZW9mKHVpbnQzMl90KSwgdXRfY29tcGFyKTsKKworICAgIHV0Yy0+aW5kZXggPSBVVF9CVUYgLSAxOwogfQogCi11aW50MzJfdAotdXRfbmV4dF9pbmRleCh1dF9jb25uZWN0aW9uICp1dGMpIHsKLSAgdWludDMyX3QgdG1wOwordWludDMyX3QgdXRfbmV4dF9pbmRleCh1dF9jb25uZWN0aW9uICp1dGMpCit7CisgICAgdWludDMyX3QgdG1wOwogCi0gIHRtcCA9IHV0Yy0+YnVmZmVyWzBdOwotICB1dGMtPmluZGV4Kys7Ci0gIHV0Yy0+YnVmZmVyWzBdID0gdXRjLT5pbmRleDsKKyAgICB0bXAgPSB1dGMtPmJ1ZmZlclswXTsKKyAgICB1dGMtPmluZGV4Kys7CisgICAgdXRjLT5idWZmZXJbMF0gPSB1dGMtPmluZGV4OwogCi0gIHFzb3J0KHV0Yy0+YnVmZmVyLCBVVF9CVUYsIHNpemVvZih1aW50MzJfdCksIHV0X2NvbXBhcik7Ci0gIAotICByZXR1cm4gdG1wOworICAgIHFzb3J0KHV0Yy0+YnVmZmVyLCBVVF9CVUYsIHNpemVvZih1aW50MzJfdCksIHV0X2NvbXBhcik7CisKKyAgICByZXR1cm4gdG1wOwogfQogCi0KLQogI2lmZGVmIFVUX1RFU1QKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKLWludAotbWFpbigpIHsKLSAgdWludDMyX3QgaSwgaXJlY3ZkLCBpZGlmZjsKLSAgdXRfY29ubmVjdGlvbiB1dGM7CitpbnQgbWFpbigpCit7CisgICAgdWludDMyX3QgaSwgaXJlY3ZkLCBpZGlmZjsKKyAgICB1dF9jb25uZWN0aW9uIHV0YzsKIAotICB1dF9pbml0KCZ1dGMpOworICAgIHV0X2luaXQoJnV0Yyk7CiAKLSAgZm9yIChpPTA7IGkgPCAxMDAwOyBpKyspIHsKLSAgICBpcmVjdmQgPSB1dF9uZXh0X2luZGV4KCZ1dGMpOwotICAgIGlkaWZmID0gaSAtIGlyZWN2ZDsKLSAgICBwcmludGYoIiVsdVx0JWx1XHQlZFxuIiwgaSwgaXJlY3ZkLCBpZGlmZik7Ci0gIH0KLSAgCi0gIHJldHVybiAwOworICAgIGZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKyAgICAgICAgaXJlY3ZkID0gdXRfbmV4dF9pbmRleCgmdXRjKTsKKyAgICAgICAgaWRpZmYgPSBpIC0gaXJlY3ZkOworICAgICAgICBwcmludGYoIiVsdVx0JWx1XHQlZFxuIiwgaSwgaXJlY3ZkLCBpZGlmZik7CisgICAgfQorCisgICAgcmV0dXJuIDA7CiB9CiAKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9jcnlwdG8vcm5nL2N0cl9wcm5nLmMgYi9jcnlwdG8vcm5nL2N0cl9wcm5nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkNTI3MTAuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL3JuZy9jdHJfcHJuZy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0gKiBjdHJfcHJuZy5jIAotICoKLSAqIGNvdW50ZXIgbW9kZSBiYXNlZCBwc2V1ZG9yYW5kb20gc291cmNlCi0gKgotICogRGF2aWQgQS4gTWNHcmV3Ci0gKiBDaXNjbyBTeXN0ZW1zLCBJbmMuCi0gKi8KLS8qCi0gKgkKLSAqIENvcHlyaWdodChjKSAyMDAxLTIwMDUgQ2lzY28gU3lzdGVtcywgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAKLSAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogCi0gKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICovCi0KLQotI2luY2x1ZGUgInBybmcuaCIKLQotLyogc2luZ2xlLCBnbG9iYWwgcHJuZyBzdHJ1Y3R1cmUgKi8KLQotY3RyX3BybmdfdCBjdHJfcHJuZzsKLQotZXJyX3N0YXR1c190Ci1jdHJfcHJuZ19pbml0KHJhbmRfc291cmNlX2Z1bmNfdCByYW5kb21fc291cmNlKSB7Ci0gIG9jdGV0X3QgdG1wX2tleVszMl07Ci0gIGVycl9zdGF0dXNfdCBzdGF0dXM7Ci0KLSAgLyogaW5pdGlhbGl6ZSBvdXRwdXQgY291bnQgdG8gemVybyAqLwotICBjdHJfcHJuZy5vY3RldF9jb3VudCA9IDA7Ci0KLSAgLyogc2V0IHJhbmRvbSBzb3VyY2UgKi8KLSAgY3RyX3BybmcucmFuZCA9IHJhbmRvbV9zb3VyY2U7Ci0gIAotICAvKiBpbml0aWFsaXplIHNlY3JldCBrZXkgZnJvbSByYW5kb20gc291cmNlICovCi0gIHN0YXR1cyA9IHJhbmRvbV9zb3VyY2UodG1wX2tleSwgMzIpOwotICBpZiAoc3RhdHVzKSAKLSAgICByZXR1cm4gc3RhdHVzOwotCi0gIC8qIGluaXRpYWxpemUgYWVzIGN0ciBjb250ZXh0IHdpdGggcmFuZG9tIGtleSAqLwotICBzdGF0dXMgPSBhZXNfaWNtX2NvbnRleHRfaW5pdCgmY3RyX3Bybmcuc3RhdGUsIHRtcF9rZXkpOwotICBpZiAoc3RhdHVzKSAKLSAgICByZXR1cm4gc3RhdHVzOwotCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOwotfQotCi1lcnJfc3RhdHVzX3QKLWN0cl9wcm5nX2dldF9vY3RldF9zdHJpbmcodm9pZCAqZGVzdCwgaW50IGxlbikgewotICBlcnJfc3RhdHVzX3Qgc3RhdHVzOwotCi0gIC8qIAotICAgKiBpZiB3ZSBuZWVkIHRvIHJlLWluaXRpYWxpemUgdGhlIHBybmcsIGRvIHNvIG5vdyAKLSAgICoKLSAgICogd2UgY2FzdCB0byBhIDY0LWJpdCBpbnRlZ2VyIGluIG9yZGVyIHRvIGF2b2lkIG92ZXJmbG93cwotICAgKi8KLSAgaWYgKCh1aW50NjRfdCkgY3RyX3Bybmcub2N0ZXRfY291bnQgKyBsZW4gPiBNQVhfUFJOR19PVVRfTEVOKSB7Ci0gICAgc3RhdHVzID0gY3RyX3BybmdfaW5pdChjdHJfcHJuZy5yYW5kKTsgICAgCi0gICAgaWYgKHN0YXR1cykKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAgY3RyX3Bybmcub2N0ZXRfY291bnQgKz0gbGVuOwotCi0gIC8qCi0gICAqIHdyaXRlIHBybmcgb3V0cHV0IAotICAgKi8KLSAgc3RhdHVzID0gYWVzX2ljbV9vdXRwdXQoJmN0cl9wcm5nLnN0YXRlLCBkZXN0LCBsZW4pOwotICBpZiAoc3RhdHVzKQotICAgIHJldHVybiBzdGF0dXM7Ci0gIAotICByZXR1cm4gZXJyX3N0YXR1c19vazsKLX0KLQotZXJyX3N0YXR1c190Ci1jdHJfcHJuZ19kZWluaXQoKSB7Ci0KLSAgLyogbm90aGluZyAqLwotICAKLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7ICAKLX0KZGlmZiAtLWdpdCBhL2NyeXB0by9ybmcvcHJuZy5jIGIvY3J5cHRvL3JuZy9wcm5nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3YzA4ZDQuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL3JuZy9wcm5nLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODAgKzAsMCBAQAotLyoKLSAqIHBybmcuYyAKLSAqCi0gKiBwc2V1ZG9yYW5kb20gc291cmNlCi0gKgotICogRGF2aWQgQS4gTWNHcmV3Ci0gKiBDaXNjbyBTeXN0ZW1zLCBJbmMuCi0gKi8KLS8qCi0gKgkKLSAqIENvcHlyaWdodChjKSAyMDAxLTIwMDUgQ2lzY28gU3lzdGVtcywgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAKLSAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogCi0gKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICovCi0KLQotI2luY2x1ZGUgInBybmcuaCIKLQotLyogc2luZ2xlLCBnbG9iYWwgcHJuZyBzdHJ1Y3R1cmUgKi8KLQoteDkxN19wcm5nX3QgeDkxN19wcm5nOwotCi1lcnJfc3RhdHVzX3QKLXg5MTdfcHJuZ19pbml0KHJhbmRfc291cmNlX2Z1bmNfdCByYW5kb21fc291cmNlKSB7Ci0gIHYxMjhfdCB0bXBfa2V5OwotICBlcnJfc3RhdHVzX3Qgc3RhdHVzOwotCi0gIC8qIGluaXRpYWxpemUgb3V0cHV0IGNvdW50IHRvIHplcm8gKi8KLSAgeDkxN19wcm5nLm9jdGV0X2NvdW50ID0gMDsKLQotICAvKiBzZXQgcmFuZG9tIHNvdXJjZSAqLwotICB4OTE3X3BybmcucmFuZCA9IHJhbmRvbV9zb3VyY2U7Ci0gIAotICAvKiBpbml0aWFsaXplIHNlY3JldCBrZXkgZnJvbSByYW5kb20gc291cmNlICovCi0gIHN0YXR1cyA9IHJhbmRvbV9zb3VyY2UoKG9jdGV0X3QgKikmdG1wX2tleSwgMTYpOwotICBpZiAoc3RhdHVzKSAKLSAgICByZXR1cm4gc3RhdHVzOwotCi0gIC8qIGV4cGFuZCBhZXMga2V5ICovCi0gIGFlc19leHBhbmRfZW5jcnlwdGlvbl9rZXkodG1wX2tleSwgeDkxN19wcm5nLmtleSk7Ci0KLSAgLyogaW5pdGlhbGl6ZSBwcm5nIHN0YXRlIGZyb20gcmFuZG9tIHNvdXJjZSAqLwotICBzdGF0dXMgPSB4OTE3X3BybmcucmFuZCgob2N0ZXRfdCAqKSZ4OTE3X3Bybmcuc3RhdGUsIDE2KTsKLSAgaWYgKHN0YXR1cykgCi0gICAgcmV0dXJuIHN0YXR1czsKLQotICByZXR1cm4gZXJyX3N0YXR1c19vazsKLX0KLQotZXJyX3N0YXR1c190Ci14OTE3X3BybmdfZ2V0X29jdGV0X3N0cmluZyhvY3RldF90ICpkZXN0LCB1aW50MzJfdCBsZW4pIHsKLSAgdWludDMyX3QgdDsKLSAgdjEyOF90IGJ1ZmZlcjsKLSAgaW50IGksIHRhaWxfbGVuOwotICBlcnJfc3RhdHVzX3Qgc3RhdHVzOwotCi0gIC8qIAotICAgKiBpZiB3ZSBuZWVkIHRvIHJlLWluaXRpYWxpemUgdGhlIHBybmcsIGRvIHNvIG5vdyAKLSAgICoKLSAgICogd2UgY2FzdCB0byBhIDY0LWJpdCBpbnRlZ2VyIGluIG9yZGVyIHRvIGF2b2lkIG92ZXJmbG93cwotICAgKi8KLSAgaWYgKCh1aW50NjRfdCkgeDkxN19wcm5nLm9jdGV0X2NvdW50ICsgbGVuID4gTUFYX1BSTkdfT1VUX0xFTikgewotICAgIHN0YXR1cyA9IHg5MTdfcHJuZ19pbml0KHg5MTdfcHJuZy5yYW5kKTsgICAgCi0gICAgaWYgKHN0YXR1cykKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAgeDkxN19wcm5nLm9jdGV0X2NvdW50ICs9IGxlbjsKLSAgCi0gIC8qIGZpbmQgb3V0IHRoZSB0aW1lICovCi0gIHQgPSB0aW1lKE5VTEwpOwotICAKLSAgLyogbG9vcCB1bnRpbCB3ZSBoYXZlIG91dHB1dCBlbm91Z2ggZGF0YSAqLwotICBmb3IgKGk9MDsgaSA8IGxlbi8xNjsgaSsrKSB7Ci0gICAgCi0gICAgLyogZXhvciB0aW1lIGludG8gc3RhdGUgKi8KLSAgICB4OTE3X3Bybmcuc3RhdGUudjMyWzBdIF49IHQ7IAotIAotICAgIC8qIGNvcHkgc3RhdGUgaW50byBidWZmZXIgKi8KLSAgICB2MTI4X2NvcHkoJmJ1ZmZlciwgJng5MTdfcHJuZy5zdGF0ZSk7Ci0KLSAgICAvKiBhcHBseSBhZXMgdG8gYnVmZmVyICovCi0gICAgYWVzX2VuY3J5cHQoJmJ1ZmZlciwgeDkxN19wcm5nLmtleSk7Ci0gICAgCi0gICAgLyogd3JpdGUgZGF0YSB0byBvdXRwdXQgKi8KLSAgICAqZGVzdCsrID0gYnVmZmVyLm9jdGV0WzBdOwotICAgICpkZXN0KysgPSBidWZmZXIub2N0ZXRbMV07Ci0gICAgKmRlc3QrKyA9IGJ1ZmZlci5vY3RldFsyXTsKLSAgICAqZGVzdCsrID0gYnVmZmVyLm9jdGV0WzNdOwotICAgICpkZXN0KysgPSBidWZmZXIub2N0ZXRbNF07Ci0gICAgKmRlc3QrKyA9IGJ1ZmZlci5vY3RldFs1XTsKLSAgICAqZGVzdCsrID0gYnVmZmVyLm9jdGV0WzZdOwotICAgICpkZXN0KysgPSBidWZmZXIub2N0ZXRbN107Ci0gICAgKmRlc3QrKyA9IGJ1ZmZlci5vY3RldFs4XTsKLSAgICAqZGVzdCsrID0gYnVmZmVyLm9jdGV0WzldOwotICAgICpkZXN0KysgPSBidWZmZXIub2N0ZXRbMTBdOwotICAgICpkZXN0KysgPSBidWZmZXIub2N0ZXRbMTFdOwotICAgICpkZXN0KysgPSBidWZmZXIub2N0ZXRbMTJdOwotICAgICpkZXN0KysgPSBidWZmZXIub2N0ZXRbMTNdOwotICAgICpkZXN0KysgPSBidWZmZXIub2N0ZXRbMTRdOwotICAgICpkZXN0KysgPSBidWZmZXIub2N0ZXRbMTVdOwotCi0gICAgLyogZXhvciB0aW1lIGludG8gYnVmZmVyICovCi0gICAgYnVmZmVyLnYzMlswXSBePSB0OwotCi0gICAgLyogZW5jcnlwdCBidWZmZXIgKi8KLSAgICBhZXNfZW5jcnlwdCgmYnVmZmVyLCB4OTE3X3Bybmcua2V5KTsKLQotICAgIC8qIGNvcHkgYnVmZmVyIGludG8gc3RhdGUgKi8KLSAgICB2MTI4X2NvcHkoJng5MTdfcHJuZy5zdGF0ZSwgJmJ1ZmZlcik7Ci0gICAgCi0gIH0KLSAgCi0gIC8qIGlmIHdlIG5lZWQgdG8gb3V0cHV0IGFueSBtb3JlIG9jdGV0cywgd2UnbGwgZG8gc28gbm93ICovCi0gIHRhaWxfbGVuID0gbGVuICUgMTY7Ci0gIGlmICh0YWlsX2xlbikgewotICAgIAotICAgIC8qIGV4b3IgdGltZSBpbnRvIHN0YXRlICovCi0gICAgeDkxN19wcm5nLnN0YXRlLnYzMlswXSBePSB0OyAKLSAKLSAgICAvKiBjb3B5IHZhbHVlIGludG8gYnVmZmVyICovCi0gICAgdjEyOF9jb3B5KCZidWZmZXIsICZ4OTE3X3Bybmcuc3RhdGUpOwotCi0gICAgLyogYXBwbHkgYWVzIHRvIGJ1ZmZlciAqLwotICAgIGFlc19lbmNyeXB0KCZidWZmZXIsIHg5MTdfcHJuZy5rZXkpOwotCi0gICAgLyogd3JpdGUgZGF0YSB0byBvdXRwdXQgKi8KLSAgICBmb3IgKGk9MDsgaSA8IHRhaWxfbGVuOyBpKyspIHsKLSAgICAgICpkZXN0KysgPSBidWZmZXIub2N0ZXRbaV07Ci0gICAgfQotCi0gICAgLyogbm93IHVwZGF0ZSB0aGUgc3RhdGUgb25lIG1vcmUgdGltZSAqLwotCi0gICAgLyogZXhvciB0aW1lIGludG8gYnVmZmVyICovCi0gICAgYnVmZmVyLnYzMlswXSBePSB0OwotCi0gICAgLyogZW5jcnlwdCBidWZmZXIgKi8KLSAgICBhZXNfZW5jcnlwdCgmYnVmZmVyLCB4OTE3X3Bybmcua2V5KTsKLQotICAgIC8qIGNvcHkgYnVmZmVyIGludG8gc3RhdGUgKi8KLSAgICB2MTI4X2NvcHkoJng5MTdfcHJuZy5zdGF0ZSwgJmJ1ZmZlcik7Ci0KLSAgfQotICAKLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7Ci19Ci0KLWVycl9zdGF0dXNfdAoteDkxN19wcm5nX2RlaW5pdCgpIHsKLSAgCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOyAgCi19CmRpZmYgLS1naXQgYS9jcnlwdG8vcm5nL3JhbmRfc291cmNlLmMgYi9jcnlwdG8vcm5nL3JhbmRfc291cmNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1MjE3MTkuLjAwMDAwMDAKLS0tIGEvY3J5cHRvL3JuZy9yYW5kX3NvdXJjZS5jCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqIHJhbmRfc291cmNlLmMKLSAqCi0gKiBpbXBsZW1lbnRzIGEgcmFuZG9tIHNvdXJjZSBiYXNlZCBvbiAvZGV2L3JhbmRvbQotICoKLSAqIERhdmlkIEEuIE1jR3JldwotICogQ2lzY28gU3lzdGVtcywgSW5jLgotICovCi0vKgotICoJCi0gKiBDb3B5cmlnaHQoYykgMjAwMS0yMDA1IENpc2NvIFN5c3RlbXMsIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogCi0gKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIAotICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAotICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqLwotCi0KLSNpbmNsdWRlICJyYW5kX3NvdXJjZS5oIgotCi0jaW5jbHVkZSA8ZmNudGwuaD4gICAgICAgICAgLyogZm9yIG9wZW4oKSAgKi8KLSNpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgICAvKiBmb3IgY2xvc2UoKSAqLwotCi0vKiBnbG9iYWwgZGV2X3JhbmRfZmRlcyBpcyBmaWxlIGRlc2NyaXB0b3IgZm9yIC9kZXYvcmFuZG9tICovCi0KLWludCBkZXZfcmFuZG9tX2ZkZXMgPSAwOwotCi1lcnJfc3RhdHVzX3QKLXJhbmRfc291cmNlX2luaXQoKSB7Ci0KLSAgLyogb3BlbiAvZGV2L3JhbmRvbSBmb3IgcmVhZGluZyAqLwotICBkZXZfcmFuZG9tX2ZkZXMgPSBvcGVuKCIvZGV2L3VyYW5kb20iLCBPX1JET05MWSwgMCk7Ci0gIGlmIChkZXZfcmFuZG9tX2ZkZXMgPT0gMCkKLSAgICByZXR1cm4gZXJyX3N0YXR1c19pbml0X2ZhaWw7Ci0KLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7Ci19Ci0KLWVycl9zdGF0dXNfdAotcmFuZF9zb3VyY2VfZ2V0X29jdGV0X3N0cmluZyh2b2lkICpkZXN0LCBpbnQgbGVuKSB7Ci0KLSAgLyogCi0gICAqIHJlYWQgbGVuIG9jdGV0cyBmcm9tIC9kZXYvcmFuZG9tIHRvIGRlc3QsIGFuZAotICAgKiBjaGVjayByZXR1cm4gdmFsdWUgdG8gbWFrZSBzdXJlIGVub3VnaCBvY3RldHMgd2VyZQotICAgKiB3cml0dGVuIAotICAgKi8KLSAgaWYgKHJlYWQoZGV2X3JhbmRvbV9mZGVzLCBkZXN0LCBsZW4pICE9IGxlbikKLSAgICByZXR1cm4gZXJyX3N0YXR1c19mYWlsOwotCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOwotfQotCi1lcnJfc3RhdHVzX3QKLXJhbmRfc291cmNlX2RlaW5pdCgpIHsKLQotICBpZiAoZGV2X3JhbmRvbV9mZGVzID09IDApCi0gICAgcmV0dXJuIGVycl9zdGF0dXNfZGVhbGxvY19mYWlsOyAgLyogd2VsbCwgd2UgaGF2ZW4ndCByZWFsbHkgZmFpbGVkLCAqCi0JCQkJICAgICAgKiBidXQgdGhlcmUgaXMgc29tZXRoaW5nIHdyb25nICAgICovCi0gIGNsb3NlKGRldl9yYW5kb21fZmRlcyk7ICAKLSAgCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOyAgCi19CmRpZmYgLS1naXQgYS9jcnlwdG8vdGVzdC9hZXNfY2FsYy5jIGIvY3J5cHRvL3Rlc3QvYWVzX2NhbGMuYwppbmRleCA1NmIwMzIzLi5iMzYyZmQ1IDEwMDY0NAotLS0gYS9jcnlwdG8vdGVzdC9hZXNfY2FsYy5jCisrKyBiL2NyeXB0by90ZXN0L2Flc19jYWxjLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogYWVzX2NhbGMuYwotICogCisgKgogICogQSBzaW1wbGUgQUVTIGNhbGN1bGF0b3IgZm9yIGdlbmVyYXRpbmcgQUVTIGVuY3J5cHRpb24gdmFsdWVzCiAgKgogICogRGF2aWQgQS4gTWNHcmV3CkBAIC04LDEwNCArOCwxNTAgQEAKICAqLwogCiAvKgotICAKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxNywgQ2lzY28gU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisvKgorCiAgRXhhbXBsZSB1c2FnZSAod2l0aCBmaXJzdCBOSVNUIEZJUFMgMTk3IHRlc3QgY2FzZSk6Ci0gCi1bc2hdJCB0ZXN0L2Flc19jYWxjIDAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmIDAwMTEyMjMzNDQ1NTY2Nzc4ODk5YWFiYmNjZGRlZWZmIC12CisKKyBbc2hdJCB0ZXN0L2Flc19jYWxjIDAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmIFwKKyAgICAgICAwMDExMjIzMzQ0NTU2Njc3ODg5OWFhYmJjY2RkZWVmZiAtdgorCiAgcGxhaW50ZXh0OiAgICAgIDAwMTEyMjMzNDQ1NTY2Nzc4ODk5YWFiYmNjZGRlZWZmCiAga2V5OiAgICAgICAgICAgIDAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmCiAgY2lwaGVydGV4dDogICAgIDY5YzRlMGQ4NmE3YjA0MzBkOGNkYjc4MDcwYjRjNTVhCiAKICAqLwogCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKICNpbmNsdWRlICJhZXMuaCIKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgInV0aWwuaCIKIAotdm9pZAotdXNhZ2UoY2hhciAqcHJvZ19uYW1lKSB7Ci0gIHByaW50ZigidXNhZ2U6ICVzIDxrZXk+IDxwbGFpbnRleHQ+IFstdl1cbiIsIHByb2dfbmFtZSk7Ci0gIGV4aXQoMjU1KTsKK3ZvaWQgdXNhZ2UoY2hhciAqcHJvZ19uYW1lKQoreworICAgIHByaW50ZigidXNhZ2U6ICVzIDxrZXk+IDxwbGFpbnRleHQ+IFstdl1cbiIsIHByb2dfbmFtZSk7CisgICAgZXhpdCgyNTUpOwogfQogCi0jZGVmaW5lIEFFU19LRVlfTEVOIDE2CisjZGVmaW5lIEFFU19NQVhfS0VZX0xFTiAzMgogCi1pbnQKLW1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKLSAgdjEyOF90IGRhdGEsIGtleTsKLSAgYWVzX2V4cGFuZGVkX2tleV90IGV4cF9rZXk7Ci0gIGludCBsZW47Ci0gIGludCB2ZXJib3NlOworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICB2MTI4X3QgZGF0YTsKKyAgICB1aW50OF90IGtleVtBRVNfTUFYX0tFWV9MRU5dOworICAgIHNydHBfYWVzX2V4cGFuZGVkX2tleV90IGV4cF9rZXk7CisgICAgaW50IGtleV9sZW4sIGxlbjsKKyAgICBpbnQgdmVyYm9zZSA9IDA7CisgICAgc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdHVzOwogCi0gIGlmIChhcmdjID09IDMpIHsKLSAgICAvKiB3ZSdyZSBub3QgaW4gdmVyYm9zZSBtb2RlICovCi0gICAgdmVyYm9zZSA9IDA7Ci0gIH0gZWxzZSBpZiAoYXJnYyA9PSA0KSB7Ci0gICAgaWYgKHN0cm5jbXAoYXJndlszXSwgIi12IiwgMikgPT0gMCkgewotICAgICAgLyogd2UncmUgaW4gdmVyYm9zZSBtb2RlICovCi0gICAgICB2ZXJib3NlID0gMTsKKyAgICBpZiAoYXJnYyA9PSAzKSB7CisgICAgICAgIC8qIHdlJ3JlIG5vdCBpbiB2ZXJib3NlIG1vZGUgKi8KKyAgICAgICAgdmVyYm9zZSA9IDA7CisgICAgfSBlbHNlIGlmIChhcmdjID09IDQpIHsKKyAgICAgICAgaWYgKHN0cm5jbXAoYXJndlszXSwgIi12IiwgMikgPT0gMCkgeworICAgICAgICAgICAgLyogd2UncmUgaW4gdmVyYm9zZSBtb2RlICovCisgICAgICAgICAgICB2ZXJib3NlID0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIHVucmVjb2duaXplZCBmbGFnLCBjb21wbGFpbiBhbmQgZXhpdCAqLworICAgICAgICAgICAgdXNhZ2UoYXJndlswXSk7CisgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgLyogdW5yZWNvZ25pemVkIGZsYWcsIGNvbXBsYWluIGFuZCBleGl0ICovCi0gICAgICB1c2FnZShhcmd2WzBdKTsKKyAgICAgICAgLyogd2UndmUgYmVlbiBmZWQgdGhlIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMgLSBjb21wYWluIGFuZCBleGl0ICovCisgICAgICAgIHVzYWdlKGFyZ3ZbMF0pOwogICAgIH0KLSAgfSBlbHNlIHsKLSAgICAvKiB3ZSd2ZSBiZWVuIGZlZCB0aGUgd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyAtIGNvbXBhaW4gYW5kIGV4aXQgKi8KLSAgICB1c2FnZShhcmd2WzBdKTsKLSAgfQotICAKLSAgLyogcmVhZCBpbiBrZXksIGNoZWNraW5nIGxlbmd0aCAqLwotICBpZiAoc3RybGVuKGFyZ3ZbMV0pID4gQUVTX0tFWV9MRU4qMikgewotICAgIGZwcmludGYoc3RkZXJyLCAKLQkgICAgImVycm9yOiB0b28gbWFueSBkaWdpdHMgaW4ga2V5ICIKLQkgICAgIihzaG91bGQgYmUgJWQgaGV4YWRlY2ltYWwgZGlnaXRzLCBmb3VuZCAldSlcbiIsCi0JICAgIEFFU19LRVlfTEVOKjIsICh1bnNpZ25lZClzdHJsZW4oYXJndlsxXSkpOwotICAgIGV4aXQoMSk7ICAgIAotICB9Ci0gIGxlbiA9IGhleF9zdHJpbmdfdG9fb2N0ZXRfc3RyaW5nKChvY3RldF90ICopJmtleSwgYXJndlsxXSwgQUVTX0tFWV9MRU4qMik7Ci0gIC8qIGNoZWNrIHRoYXQgaGV4IHN0cmluZyBpcyB0aGUgcmlnaHQgbGVuZ3RoICovCi0gIGlmIChsZW4gPCBBRVNfS0VZX0xFTioyKSB7Ci0gICAgZnByaW50ZihzdGRlcnIsIAotCSAgICAiZXJyb3I6IHRvbyBmZXcgZGlnaXRzIGluIGtleSAiCi0JICAgICIoc2hvdWxkIGJlICVkIGhleGFkZWNpbWFsIGRpZ2l0cywgZm91bmQgJWQpXG4iLAotCSAgICBBRVNfS0VZX0xFTioyLCBsZW4pOwotICAgIGV4aXQoMSk7ICAgIAotICB9IAotICAgICAgCi0gIC8qIHJlYWQgaW4gcGxhaW50ZXh0LCBjaGVja2luZyBsZW5ndGggKi8KLSAgaWYgKHN0cmxlbihhcmd2WzJdKSA+IDE2KjIpIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgCi0JICAgICJlcnJvcjogdG9vIG1hbnkgZGlnaXRzIGluIHBsYWludGV4dCAiCi0JICAgICIoc2hvdWxkIGJlICVkIGhleGFkZWNpbWFsIGRpZ2l0cywgZm91bmQgJXUpXG4iLAotCSAgICAxNioyLCAodW5zaWduZWQpc3RybGVuKGFyZ3ZbMl0pKTsKLSAgICBleGl0KDEpOyAgICAKLSAgfQotICBsZW4gPSBoZXhfc3RyaW5nX3RvX29jdGV0X3N0cmluZygob2N0ZXRfdCAqKSgmZGF0YSksIGFyZ3ZbMl0sIDE2KjIpOwotICAvKiBjaGVjayB0aGF0IGhleCBzdHJpbmcgaXMgdGhlIHJpZ2h0IGxlbmd0aCAqLwotICBpZiAobGVuIDwgMTYqMikgewotICAgIGZwcmludGYoc3RkZXJyLCAKLQkgICAgImVycm9yOiB0b28gZmV3IGRpZ2l0cyBpbiBwbGFpbnRleHQgIgotCSAgICAiKHNob3VsZCBiZSAlZCBoZXhhZGVjaW1hbCBkaWdpdHMsIGZvdW5kICVkKVxuIiwKLQkgICAgMTYqMiwgbGVuKTsKLSAgICBleGl0KDEpOyAgICAKLSAgfQogCi0gIGlmICh2ZXJib3NlKSB7Ci0gICAgLyogcHJpbnQgb3V0IHBsYWludGV4dCAqLwotICAgIHByaW50ZigicGxhaW50ZXh0Olx0JXNcbiIsIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKChvY3RldF90ICopJmRhdGEsIDE2KSk7Ci0gIH0KKyAgICAvKiByZWFkIGluIGtleSwgY2hlY2tpbmcgbGVuZ3RoICovCisgICAgaWYgKHN0cmxlbihhcmd2WzFdKSA+IEFFU19NQVhfS0VZX0xFTiAqIDIpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvcjogdG9vIG1hbnkgZGlnaXRzIGluIGtleSAiCisgICAgICAgICAgICAgICAgICAgICAgICAiKHNob3VsZCBiZSBhdCBtb3N0ICVkIGhleGFkZWNpbWFsIGRpZ2l0cywgZm91bmQgJXUpXG4iLAorICAgICAgICAgICAgICAgIEFFU19NQVhfS0VZX0xFTiAqIDIsICh1bnNpZ25lZClzdHJsZW4oYXJndlsxXSkpOworICAgICAgICBleGl0KDEpOworICAgIH0KKyAgICBsZW4gPSBoZXhfc3RyaW5nX3RvX29jdGV0X3N0cmluZygoY2hhciAqKWtleSwgYXJndlsxXSwgQUVTX01BWF9LRVlfTEVOICogMik7CisgICAgLyogY2hlY2sgdGhhdCBoZXggc3RyaW5nIGlzIHRoZSByaWdodCBsZW5ndGggKi8KKyAgICBpZiAobGVuICE9IDMyICYmIGxlbiAhPSA0OCAmJiBsZW4gIT0gNjQpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvcjogYmFkIG51bWJlciBvZiBkaWdpdHMgaW4ga2V5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICIoc2hvdWxkIGJlIDMyLzQ4LzY0IGhleGFkZWNpbWFsIGRpZ2l0cywgZm91bmQgJWQpXG4iLAorICAgICAgICAgICAgICAgIGxlbik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIGtleV9sZW4gPSBsZW4gLyAyOwogCi0gIC8qIGVuY3J5cHQgcGxhaW50ZXh0ICovCi0gIGFlc19leHBhbmRfZW5jcnlwdGlvbl9rZXkoa2V5LCBleHBfa2V5KTsKKyAgICAvKiByZWFkIGluIHBsYWludGV4dCwgY2hlY2tpbmcgbGVuZ3RoICovCisgICAgaWYgKHN0cmxlbihhcmd2WzJdKSA+IDE2ICogMikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yOiB0b28gbWFueSBkaWdpdHMgaW4gcGxhaW50ZXh0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICIoc2hvdWxkIGJlICVkIGhleGFkZWNpbWFsIGRpZ2l0cywgZm91bmQgJXUpXG4iLAorICAgICAgICAgICAgICAgIDE2ICogMiwgKHVuc2lnbmVkKXN0cmxlbihhcmd2WzJdKSk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIGxlbiA9IGhleF9zdHJpbmdfdG9fb2N0ZXRfc3RyaW5nKChjaGFyICopKCZkYXRhKSwgYXJndlsyXSwgMTYgKiAyKTsKKyAgICAvKiBjaGVjayB0aGF0IGhleCBzdHJpbmcgaXMgdGhlIHJpZ2h0IGxlbmd0aCAqLworICAgIGlmIChsZW4gPCAxNiAqIDIpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvcjogdG9vIGZldyBkaWdpdHMgaW4gcGxhaW50ZXh0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICIoc2hvdWxkIGJlICVkIGhleGFkZWNpbWFsIGRpZ2l0cywgZm91bmQgJWQpXG4iLAorICAgICAgICAgICAgICAgIDE2ICogMiwgbGVuKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CiAKLSAgYWVzX2VuY3J5cHQoJmRhdGEsIGV4cF9rZXkpOworICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgIC8qIHByaW50IG91dCBwbGFpbnRleHQgKi8KKyAgICAgICAgcHJpbnRmKCJwbGFpbnRleHQ6XHQlc1xuIiwKKyAgICAgICAgICAgICAgIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKCh1aW50OF90ICopJmRhdGEsIDE2KSk7CisgICAgfQogCi0gIC8qIHdyaXRlIGNpcGhlcnRleHQgdG8gb3V0cHV0ICovCi0gIGlmICh2ZXJib3NlKSB7Ci0gICAgcHJpbnRmKCJrZXk6XHRcdCVzXG4iLCB2MTI4X2hleF9zdHJpbmcoJmtleSkpOwotICAgIHByaW50ZigiY2lwaGVydGV4dDpcdCIpOwotICB9Ci0gIHByaW50ZigiJXNcbiIsIHYxMjhfaGV4X3N0cmluZygmZGF0YSkpOworICAgIC8qIGVuY3J5cHQgcGxhaW50ZXh0ICovCisgICAgc3RhdHVzID0gc3J0cF9hZXNfZXhwYW5kX2VuY3J5cHRpb25fa2V5KGtleSwga2V5X2xlbiwgJmV4cF9rZXkpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvcjogQUVTIGtleSBleHBhbnNpb24gZmFpbGVkLlxuIik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQogCi0gIHJldHVybiAwOworICAgIHNydHBfYWVzX2VuY3J5cHQoJmRhdGEsICZleHBfa2V5KTsKKworICAgIC8qIHdyaXRlIGNpcGhlcnRleHQgdG8gb3V0cHV0ICovCisgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgcHJpbnRmKCJrZXk6XHRcdCVzXG4iLCBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhrZXksIGtleV9sZW4pKTsKKyAgICAgICAgcHJpbnRmKCJjaXBoZXJ0ZXh0Olx0Iik7CisgICAgfQorICAgIHByaW50ZigiJXNcbiIsIHYxMjhfaGV4X3N0cmluZygmZGF0YSkpOworCisgICAgcmV0dXJuIDA7CiB9Ci0KZGlmZiAtLWdpdCBhL2NyeXB0by90ZXN0L2F1dGhfZHJpdmVyLmMgYi9jcnlwdG8vdGVzdC9hdXRoX2RyaXZlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTMzNDgwLi4wMDAwMDAwCi0tLSBhL2NyeXB0by90ZXN0L2F1dGhfZHJpdmVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDAgKzAsMCBAQAotLyoKLSAqIGF1dGhfZHJpdmVyLmMKLSAqCi0gKiBhIGRyaXZlciBmb3IgYXV0aCBmdW5jdGlvbnMKLSAqCi0gKiBEYXZpZCBBLiBNY0dyZXcKLSAqIENpc2NvIFN5c3RlbXMsIEluYy4KLSAqLwotCi0vKgotICoJCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSwgQ2lzY28gU3lzdGVtcywgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAKLSAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogCi0gKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICovCi0KLQotI2luY2x1ZGUgPHN0ZGlvLmg+ICAgIC8qIGZvciBwcmludGYoKSAqLwotI2luY2x1ZGUgPHN0ZGxpYi5oPiAgIC8qIGZvciB4YWxsb2MoKSAqLwotI2luY2x1ZGUgPHVuaXN0ZC5oPiAgIC8qIGZvciBnZXRvcHQoKSAqLwotCi0jaW5jbHVkZSAiYXV0aC5oIgotI2luY2x1ZGUgIm51bGxfYXV0aC5oIgotCi0jZGVmaW5lIFBSSU5UX0RFQlVHX0RBVEEgMAotCi1leHRlcm4gYXV0aF90eXBlX3QgdG1taHYyOwotCi1jb25zdCB1aW50MTZfdCBtc2cwWzldID0gewotICAweDYwMTUsIDB4ZjE0MSwgMHg1YmExLCAweDI5YTAsIDB4ZjYwNCwgMHhkMWMsIDB4MmQ5LCAweGFhOGEsIDB4NzkzMQotfTsKLQotLyoga2V5MSBpcyBmb3IgVEFHX1dPUkRTID0gMiAqLwotCi1jb25zdCB1aW50MTZfdCBrZXkxWzQ3XSA9IHsKLSAgMHhlNjI3LCAweDZhMDEsIDB4NWVhNywgMHhmMjdhLCAweGM1MzYsIDB4MjE5MiwgMHgxMWJlLCAweGVhMzUsCi0gIDB4ZGI5ZCwgMHg2M2Q2LCAweGZhOGEsIDB4ZmM0NSwgMHhlMDhiLCAweGQyMTYsIDB4Y2VkMiwgMHg3ODUzLAotICAweDFhODIsIDB4MjJmNSwgMHg5MGZiLCAweDFjMjksIDB4NzA4ZSwgMHhkMDZmLCAweDgyYzMsIDB4YmVlNiwKLSAgMHg0ZjIxLCAweDZmMzMsIDB4NjVjMCwgMHhkMjExLCAweGMyNWUsIDB4OTEzOCwgMHg0ZmEzLCAweDdjMWYsCi0gIDB4NjFhYywgMHgzNDg5LCAweDI5NzYsIDB4OGMxOSwgMHg4MjUyLCAweGRkYmYsIDB4Y2FkMywgMHhjMjhmLAotICAweDY4ZDYsIDB4NThkZCwgMHg1MDRmLCAweDJiYmYsIDB4MDI3OCwgMHg3MGI3LCAweGNmY2EKLX07Ci0KLWRvdWJsZQotYXV0aF9iaXRzX3Blcl9zZWNvbmQoYXV0aF90ICpoLCBpbnQgbXNnX2xlbik7Ci0KLQotdm9pZAotdXNhZ2UoY2hhciAqcHJvZ19uYW1lKSB7Ci0gIHByaW50ZigidXNhZ2U6ICVzIFsgLXQgfCAtdiBdXG4iLCBwcm9nX25hbWUpOwotICBleGl0KDI1NSk7Ci19Ci0KLSNkZWZpbmUgTUFYX01TR19MRU4gMjA0OAotCi1pbnQKLW1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKLSAgYXV0aF90ICphID0gTlVMTDsKLSAgZXJyX3N0YXR1c190IHN0YXR1czsKLSAgaW50IGk7Ci0gIGludCBjOwotICB1bnNpZ25lZCBkb190aW1pbmdfdGVzdCA9IDA7Ci0gIHVuc2lnbmVkIGRvX3ZhbGlkYXRpb24gPSAwOwotCi0gIC8qIHByb2Nlc3MgaW5wdXQgYXJndW1lbnRzICovCi0gIHdoaWxlICgxKSB7Ci0gICAgYyA9IGdldG9wdChhcmdjLCBhcmd2LCAidHYiKTsKLSAgICBpZiAoYyA9PSAtMSkgCi0gICAgICBicmVhazsKLSAgICBzd2l0Y2ggKGMpIHsKLSAgICBjYXNlICd0JzoKLSAgICAgIGRvX3RpbWluZ190ZXN0ID0gMTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgJ3YnOgotICAgICAgZG9fdmFsaWRhdGlvbiA9IDE7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgdXNhZ2UoYXJndlswXSk7Ci0gICAgfSAgICAKLSAgfQotICAKLSAgcHJpbnRmKCJhdXRoIGRyaXZlclxuRGF2aWQgQS4gTWNHcmV3XG5DaXNjbyBTeXN0ZW1zLCBJbmMuXG4iKTsKLQotICBpZiAoIWRvX3ZhbGlkYXRpb24gJiYgIWRvX3RpbWluZ190ZXN0KQotICAgIHVzYWdlKGFyZ3ZbMF0pOwotCi0gIGlmIChkb192YWxpZGF0aW9uKSB7Ci0gICAgcHJpbnRmKCJydW5uaW5nIHNlbGYtdGVzdCBmb3IgJXMuLi4iLCB0bW1odjIuZGVzY3JpcHRpb24pOwotICAgIHN0YXR1cyA9IHRtbWh2Ml9hZGRfYmlnX3Rlc3QoKTsKLSAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICBwcmludGYoInRtbWh2Ml9hZGRfYmlnX3Rlc3QgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgc3RhdHVzKTsKLSAgICAgIGV4aXQoc3RhdHVzKTsKLSAgICB9ICAKLSAgICBzdGF0dXMgPSBhdXRoX3R5cGVfc2VsZl90ZXN0KCZ0bW1odjIpOwotICAgIGlmIChzdGF0dXMpIHsKLSAgICAgIHByaW50ZigiZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgc3RhdHVzKTsKLSAgICAgIGV4aXQoc3RhdHVzKTsKLSAgICB9Ci0gICAgcHJpbnRmKCJwYXNzZWRcbiIpOwotICB9Ci0KLSAgaWYgKGRvX3RpbWluZ190ZXN0KSB7Ci0KLSAgICAvKiB0bW1odjIgdGltaW5nIHRlc3QgKi8KLSAgICBzdGF0dXMgPSBhdXRoX3R5cGVfYWxsb2MoJnRtbWh2MiwgJmEsIDk0LCA0KTsKLSAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICBmcHJpbnRmKHN0ZGVyciwgImNhbid0IGFsbG9jYXRlIHRtbWh2MlxuIik7Ci0gICAgICBleGl0KHN0YXR1cyk7Ci0gICAgfQotICAgIHN0YXR1cyA9IGF1dGhfaW5pdChhLCAob2N0ZXRfdCAqKWtleTEpOwotICAgIGlmIChzdGF0dXMpIHsKLSAgICAgIHByaW50ZigiZXJyb3IgaW5pdGlhbGl6YWluZyBhdXRoIGZ1bmN0aW9uXG4iKTsKLSAgICAgIGV4aXQoc3RhdHVzKTsKLSAgICB9Ci0gICAgCi0gICAgcHJpbnRmKCJ0aW1pbmcgJXMgKHRhZyBsZW5ndGggJWQpXG4iLCAKLQkgICB0bW1odjIuZGVzY3JpcHRpb24sIGF1dGhfZ2V0X3RhZ19sZW5ndGgoYSkpOwotICAgIGZvciAoaT04OyBpIDw9IE1BWF9NU0dfTEVOOyBpICo9IDIpCi0gICAgICBwcmludGYoIm1zZyBsZW46ICVkXHRnaWdhYml0cyBwZXIgc2Vjb25kOiAlZlxuIiwKLQkgICAgIGksIGF1dGhfYml0c19wZXJfc2Vjb25kKGEsIGkpIC8gMUU5KTsKLQotICAgIHN0YXR1cyA9IGF1dGhfZGVhbGxvYyhhKTsKLSAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICBwcmludGYoImVycm9yIGRlYWxsb2NhdGluZyBhdXRoIGZ1bmN0aW9uXG4iKTsKLSAgICAgIGV4aXQoc3RhdHVzKTsKLSAgICB9Ci0gICAgCi0gIH0KLQotICByZXR1cm4gMDsKLX0KLQotI2RlZmluZSBOVU1fVFJJQUxTIDEwMDAwMAotCi0jaW5jbHVkZSA8dGltZS5oPgotCi1kb3VibGUKLWF1dGhfYml0c19wZXJfc2Vjb25kKGF1dGhfdCAqYSwgaW50IG1zZ19sZW5fb2N0ZXRzKSB7Ci0gIGludCBpOwotICBjbG9ja190IHRpbWVyOwotICBvY3RldF90ICpyZXN1bHQ7Ci0gIGludCBtc2dfbGVuID0gKG1zZ19sZW5fb2N0ZXRzICsgMSkvMjsKLSAgdWludDE2X3QgKm1zZ19zdHJpbmc7IAotCi0gIC8qIGNyZWF0ZSByYW5kb20gbWVzc2FnZSAqLwotICBtc2dfc3RyaW5nID0gKHVpbnQxNl90ICopIGNyeXB0b19hbGxvYyhtc2dfbGVuX29jdGV0cyk7Ci0gIGlmIChtc2dfc3RyaW5nID09IE5VTEwpCi0gICAgcmV0dXJuIDAuMDsgLyogaW5kaWNhdGUgZmFpbHVyZSAqLyAgCi0gIGZvciAoaT0wOyBpIDwgbXNnX2xlbjsgaSsrKSAKLSAgICBtc2dfc3RyaW5nW2ldID0gKHVpbnQxNl90KSByYW5kb20oKTsKLQotICAvKiBhbGxvY2F0ZSB0ZW1wb3Jhcnkgc3RvcmFnZSBmb3IgYXV0aGVudGljYXRpb24gdGFnICovCi0gIHJlc3VsdCA9IGNyeXB0b19hbGxvYyhhdXRoX2dldF90YWdfbGVuZ3RoKGEpKTsKLSAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7Ci0gICAgZnJlZShtc2dfc3RyaW5nKTsKLSAgICByZXR1cm4gMC4wOyAvKiBpbmRpY2F0ZSBmYWlsdXJlICovICAKLSAgfQotICAKLSAgdGltZXIgPSBjbG9jaygpOwotICBmb3IgKGk9MDsgaSA8IE5VTV9UUklBTFM7IGkrKykgewotICAgIGF1dGhfY29tcHV0ZShhLCAob2N0ZXRfdCAqKW1zZ19zdHJpbmcsIG1zZ19sZW5fb2N0ZXRzLCAob2N0ZXRfdCAqKXJlc3VsdCk7Ci0gIH0KLSAgdGltZXIgPSBjbG9jaygpIC0gdGltZXI7Ci0KLSAgZnJlZShtc2dfc3RyaW5nKTsKLSAgZnJlZShyZXN1bHQpOwotICAKLSAgcmV0dXJuIChkb3VibGUpIE5VTV9UUklBTFMgKiA4ICogbXNnX2xlbl9vY3RldHMgKiBDTE9DS1NfUEVSX1NFQyAvIHRpbWVyOwotfQotCi0KZGlmZiAtLWdpdCBhL2NyeXB0by90ZXN0L2NpcGhlcl9kcml2ZXIuYyBiL2NyeXB0by90ZXN0L2NpcGhlcl9kcml2ZXIuYwppbmRleCA2NWNmNmMwLi44MjE5YTA2IDEwMDY0NAotLS0gYS9jcnlwdG8vdGVzdC9jaXBoZXJfZHJpdmVyLmMKKysrIGIvY3J5cHRvL3Rlc3QvY2lwaGVyX2RyaXZlci5jCkBAIC04LDI2ICs4LDI2IEBACiAgKi8KIAogLyoKLSAqCQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUsIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxNyBDaXNjbyBTeXN0ZW1zLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwogICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKICAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCisgKgogICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAogICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKKyAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKQEAgLTQzLDIyICs0MywyNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8c3RkaW8uaD4gICAgICAgICAgIC8qIGZvciBwcmludGYoKSAqLwotI2luY2x1ZGUgPHN0ZGxpYi5oPiAgICAgICAgICAvKiBmb3IgcmFuZG9tKCkgKi8KLSNpbmNsdWRlIDxzdHJpbmcuaD4gICAgICAgICAgLyogZm9yIG1lbXNldCgpICovCi0jaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgICAgIC8qIGZvciBnZXRvcHQoKSAqLworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4gLyogZm9yIHByaW50ZigpICovCisjaW5jbHVkZSAiZ2V0b3B0X3MuaCIKICNpbmNsdWRlICJjaXBoZXIuaCIKKyNpbmNsdWRlICJjaXBoZXJfcHJpdi5oIgorI2lmZGVmIEdDTQorI2luY2x1ZGUgImFlc19pY21fZXh0LmgiCisjaW5jbHVkZSAiYWVzX2djbS5oIgorI2Vsc2UKICNpbmNsdWRlICJhZXNfaWNtLmgiCi0jaW5jbHVkZSAibnVsbF9jaXBoZXIuaCIKKyNlbmRpZgogCiAjZGVmaW5lIFBSSU5UX0RFQlVHIDAKIAotdm9pZAotY2lwaGVyX2RyaXZlcl90ZXN0X3Rocm91Z2hwdXQoY2lwaGVyX3QgKmMpOwordm9pZCBjaXBoZXJfZHJpdmVyX3Rlc3RfdGhyb3VnaHB1dChzcnRwX2NpcGhlcl90ICpjKTsKIAotZXJyX3N0YXR1c190Ci1jaXBoZXJfZHJpdmVyX3NlbGZfdGVzdChjaXBoZXJfdHlwZV90ICpjdCk7Ci0KK3NydHBfZXJyX3N0YXR1c190IGNpcGhlcl9kcml2ZXJfc2VsZl90ZXN0KHNydHBfY2lwaGVyX3R5cGVfdCAqY3QpOwogCiAvKgogICogY2lwaGVyX2RyaXZlcl90ZXN0X2J1ZmZlcmluZyhjdCkgdGVzdHMgdGhlIGNpcGhlcidzIG91dHB1dApAQCAtNjYsMTg4ICs3MCwyODAgQEAKICAqIGNhbGxzCiAgKi8KIAotZXJyX3N0YXR1c190Ci1jaXBoZXJfZHJpdmVyX3Rlc3RfYnVmZmVyaW5nKGNpcGhlcl90ICpjKTsKLQorc3J0cF9lcnJfc3RhdHVzX3QgY2lwaGVyX2RyaXZlcl90ZXN0X2J1ZmZlcmluZyhzcnRwX2NpcGhlcl90ICpjKTsKIAogLyoKICAqIGZ1bmN0aW9ucyBmb3IgdGVzdGluZyBjaXBoZXIgY2FjaGUgdGhyYXNoCiAgKi8KLWVycl9zdGF0dXNfdAotY2lwaGVyX2RyaXZlcl90ZXN0X2FycmF5X3Rocm91Z2hwdXQoY2lwaGVyX3R5cGVfdCAqY3QsIAotCQkJCSAgICBpbnQga2xlbiwgaW50IG51bV9jaXBoZXIpOworc3J0cF9lcnJfc3RhdHVzX3QgY2lwaGVyX2RyaXZlcl90ZXN0X2FycmF5X3Rocm91Z2hwdXQoc3J0cF9jaXBoZXJfdHlwZV90ICpjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBrbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9jaXBoZXIpOwogCi12b2lkCi1jaXBoZXJfYXJyYXlfdGVzdF90aHJvdWdocHV0KGNpcGhlcl90ICpjYVtdLCBpbnQgbnVtX2NpcGhlcik7Cit2b2lkIGNpcGhlcl9hcnJheV90ZXN0X3Rocm91Z2hwdXQoc3J0cF9jaXBoZXJfdCAqY2FbXSwgaW50IG51bV9jaXBoZXIpOwogCi1kb3VibGUKLWNpcGhlcl9hcnJheV9iaXRzX3Blcl9zZWNvbmQoY2lwaGVyX3QgKmNpcGhlcl9hcnJheVtdLCBpbnQgbnVtX2NpcGhlciwgCi0JCQkgICAgIGludCBvY3RldHNfaW5fYnVmZmVyLCBpbnQgbnVtX3RyaWFscyk7Cit1aW50NjRfdCBjaXBoZXJfYXJyYXlfYml0c19wZXJfc2Vjb25kKHNydHBfY2lwaGVyX3QgKmNpcGhlcl9hcnJheVtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX2NpcGhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgb2N0ZXRzX2luX2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV90cmlhbHMpOwogCi1lcnJfc3RhdHVzX3QKLWNpcGhlcl9hcnJheV9kZWxldGUoY2lwaGVyX3QgKmNpcGhlcl9hcnJheVtdLCBpbnQgbnVtX2NpcGhlcik7CitzcnRwX2Vycl9zdGF0dXNfdCBjaXBoZXJfYXJyYXlfZGVsZXRlKHNydHBfY2lwaGVyX3QgKmNpcGhlcl9hcnJheVtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX2NpcGhlcik7CiAKLWVycl9zdGF0dXNfdAotY2lwaGVyX2FycmF5X2FsbG9jX2luaXQoY2lwaGVyX3QgKioqY2lwaGVyX2FycmF5LCBpbnQgbnVtX2NpcGhlcnMsCi0JCQljaXBoZXJfdHlwZV90ICpjdHlwZSwgaW50IGtsZW4pOworc3J0cF9lcnJfc3RhdHVzX3QgY2lwaGVyX2FycmF5X2FsbG9jX2luaXQoc3J0cF9jaXBoZXJfdCAqKipjaXBoZXJfYXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX2NpcGhlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX2NpcGhlcl90eXBlX3QgKmN0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtsZW4pOwogCi12b2lkCi11c2FnZShjaGFyICpwcm9nX25hbWUpIHsKLSAgcHJpbnRmKCJ1c2FnZTogJXMgWyAtdCB8IC12IHwgLWEgXVxuIiwgcHJvZ19uYW1lKTsKLSAgZXhpdCgyNTUpOwordm9pZCB1c2FnZShjaGFyICpwcm9nX25hbWUpCit7CisgICAgcHJpbnRmKCJ1c2FnZTogJXMgWyAtdCB8IC12IHwgLWEgXVxuIiwgcHJvZ19uYW1lKTsKKyAgICBleGl0KDI1NSk7CiB9CiAKLXZvaWQKLWNoZWNrX3N0YXR1cyhlcnJfc3RhdHVzX3QgcykgewotICBpZiAocykgewotICAgIHByaW50ZigiZXJyb3IgKGNvZGUgJWQpXG4iLCBzKTsKLSAgICBleGl0KHMpOwotICB9Ci0gIHJldHVybjsKK3ZvaWQgY2hlY2tfc3RhdHVzKHNydHBfZXJyX3N0YXR1c190IHMpCit7CisgICAgaWYgKHMpIHsKKyAgICAgICAgcHJpbnRmKCJlcnJvciAoY29kZSAlZClcbiIsIHMpOworICAgICAgICBleGl0KHMpOworICAgIH0KKyAgICByZXR1cm47CiB9CiAKIC8qCi0gKiBudWxsX2NpcGhlciwgYWVzX2ljbSwgYW5kIGFlc19jYmMgYXJlIHRoZSBjaXBoZXIgbWV0YS1vYmplY3RzCisgKiBudWxsX2NpcGhlciBhbmQgc3J0cF9hZXNfaWNtIGFyZSB0aGUgY2lwaGVyIG1ldGEtb2JqZWN0cwogICogZGVmaW5lZCBpbiB0aGUgZmlsZXMgaW4gY3J5cHRvL2NpcGhlciBzdWJkaXJlY3RvcnkuICB0aGVzZSBhcmUKICAqIGRlY2xhcmVkIGV4dGVybmFsIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGVzZSBjaXBoZXIgdHlwZXMgaGVyZQogICovCiAKLWV4dGVybiBjaXBoZXJfdHlwZV90IG51bGxfY2lwaGVyOwotZXh0ZXJuIGNpcGhlcl90eXBlX3QgYWVzX2ljbTsKLWV4dGVybiBjaXBoZXJfdHlwZV90IGFlc19jYmM7CitleHRlcm4gc3J0cF9jaXBoZXJfdHlwZV90IHNydHBfbnVsbF9jaXBoZXI7CitleHRlcm4gc3J0cF9jaXBoZXJfdHlwZV90IHNydHBfYWVzX2ljbV8xMjg7CitleHRlcm4gc3J0cF9jaXBoZXJfdHlwZV90IHNydHBfYWVzX2ljbV8yNTY7CisjaWZkZWYgR0NNCitleHRlcm4gc3J0cF9jaXBoZXJfdHlwZV90IHNydHBfYWVzX2ljbV8xOTI7CitleHRlcm4gc3J0cF9jaXBoZXJfdHlwZV90IHNydHBfYWVzX2djbV8xMjg7CitleHRlcm4gc3J0cF9jaXBoZXJfdHlwZV90IHNydHBfYWVzX2djbV8yNTY7CisjZW5kaWYKIAotaW50Ci1tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKLSAgY2lwaGVyX3QgKmMgPSBOVUxMOwotICBlcnJfc3RhdHVzX3Qgc3RhdHVzOwotICB1bnNpZ25lZCBjaGFyIHRlc3Rfa2V5WzIwXSA9IHsKLSAgICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCi0gICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMwotICB9OwotICBpbnQgcTsKLSAgdW5zaWduZWQgZG9fdGltaW5nX3Rlc3QgPSAwOwotICB1bnNpZ25lZCBkb192YWxpZGF0aW9uID0gMDsKLSAgdW5zaWduZWQgZG9fYXJyYXlfdGltaW5nX3Rlc3QgPSAwOworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBzcnRwX2NpcGhlcl90ICpjID0gTlVMTDsKKyAgICBzcnRwX2Vycl9zdGF0dXNfdCBzdGF0dXM7CisgICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLworICAgIHVuc2lnbmVkIGNoYXIgdGVzdF9rZXlbNDhdID0geworICAgICAgICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLAorICAgICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAorICAgICAgICAweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmLAorICAgICAgICAweDIwLCAweDIxLCAweDIyLCAweDIzLCAweDI0LCAweDI1LCAweDI2LCAweDI3LAorICAgICAgICAweDI4LCAweDI5LCAweDJhLCAweDJiLCAweDJjLCAweDJkLCAweDJlLCAweDJmLAorICAgIH07CisgICAgLyogY2xhbmctZm9ybWF0IG9uICovCisgICAgaW50IHE7CisgICAgdW5zaWduZWQgZG9fdGltaW5nX3Rlc3QgPSAwOworICAgIHVuc2lnbmVkIGRvX3ZhbGlkYXRpb24gPSAwOworICAgIHVuc2lnbmVkIGRvX2FycmF5X3RpbWluZ190ZXN0ID0gMDsKIAotICAvKiBwcm9jZXNzIGlucHV0IGFyZ3VtZW50cyAqLwotICB3aGlsZSAoMSkgewotICAgIHEgPSBnZXRvcHQoYXJnYywgYXJndiwgInR2YSIpOwotICAgIGlmIChxID09IC0xKSAKLSAgICAgIGJyZWFrOwotICAgIHN3aXRjaCAocSkgewotICAgIGNhc2UgJ3QnOgotICAgICAgZG9fdGltaW5nX3Rlc3QgPSAxOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAndic6Ci0gICAgICBkb192YWxpZGF0aW9uID0gMTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgJ2EnOgotICAgICAgZG9fYXJyYXlfdGltaW5nX3Rlc3QgPSAxOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHVzYWdlKGFyZ3ZbMF0pOwotICAgIH0gICAgCi0gIH0KLSAgIAotICBwcmludGYoImNpcGhlciB0ZXN0IGRyaXZlclxuIgotCSAiRGF2aWQgQS4gTWNHcmV3XG4iCi0JICJDaXNjbyBTeXN0ZW1zLCBJbmMuXG4iKTsKLQotICBpZiAoIWRvX3ZhbGlkYXRpb24gJiYgIWRvX3RpbWluZ190ZXN0ICYmICFkb19hcnJheV90aW1pbmdfdGVzdCkKLSAgICB1c2FnZShhcmd2WzBdKTsKLQotICAgLyogYXJyeSB0aW1pbmcgKGNhY2hlIHRocmFzaCkgdGVzdCAqLwotICBpZiAoZG9fYXJyYXlfdGltaW5nX3Rlc3QpIHsKLSAgICBpbnQgbWF4X251bV9jaXBoZXIgPSAxIDw8IDE2OyAgIC8qIG51bWJlciBvZiBjaXBoZXJzIGluIGNpcGhlcl9hcnJheSAqLwotICAgIGludCBudW1fY2lwaGVyOwotICAgIAotICAgIGZvciAobnVtX2NpcGhlcj0xOyBudW1fY2lwaGVyIDwgbWF4X251bV9jaXBoZXI7IG51bV9jaXBoZXIgKj04KQotICAgICAgY2lwaGVyX2RyaXZlcl90ZXN0X2FycmF5X3Rocm91Z2hwdXQoJm51bGxfY2lwaGVyLCAwLCBudW1fY2lwaGVyKTsgCi0KLSAgICBmb3IgKG51bV9jaXBoZXI9MTsgbnVtX2NpcGhlciA8IG1heF9udW1fY2lwaGVyOyBudW1fY2lwaGVyICo9OCkKLSAgICAgIGNpcGhlcl9kcml2ZXJfdGVzdF9hcnJheV90aHJvdWdocHV0KCZhZXNfaWNtLCAzMCwgbnVtX2NpcGhlcik7IAotCi0gICAgZm9yIChudW1fY2lwaGVyPTE7IG51bV9jaXBoZXIgPCBtYXhfbnVtX2NpcGhlcjsgbnVtX2NpcGhlciAqPTgpCi0gICAgICBjaXBoZXJfZHJpdmVyX3Rlc3RfYXJyYXlfdGhyb3VnaHB1dCgmYWVzX2NiYywgMTYsIG51bV9jaXBoZXIpOyAKLSAKLSAgfQotCi0gIGlmIChkb192YWxpZGF0aW9uKSB7Ci0gICAgY2lwaGVyX2RyaXZlcl9zZWxmX3Rlc3QoJm51bGxfY2lwaGVyKTsKLSAgICBjaXBoZXJfZHJpdmVyX3NlbGZfdGVzdCgmYWVzX2ljbSk7Ci0gICAgY2lwaGVyX2RyaXZlcl9zZWxmX3Rlc3QoJmFlc19jYmMpOwotICB9Ci0KLSAgLyogZG8gdGltaW5nIGFuZC9vciBidWZmZXJfdGVzdCBvbiBudWxsX2NpcGhlciAqLwotICBzdGF0dXMgPSBjaXBoZXJfdHlwZV9hbGxvYygmbnVsbF9jaXBoZXIsICZjLCAwKTsgCi0gIGNoZWNrX3N0YXR1cyhzdGF0dXMpOwotCi0gIHN0YXR1cyA9IGNpcGhlcl9pbml0KGMsIE5VTEwsIGRpcmVjdGlvbl9lbmNyeXB0KTsKLSAgY2hlY2tfc3RhdHVzKHN0YXR1cyk7Ci0KLSAgaWYgKGRvX3RpbWluZ190ZXN0KSAKLSAgICBjaXBoZXJfZHJpdmVyX3Rlc3RfdGhyb3VnaHB1dChjKTsKLSAgaWYgKGRvX3ZhbGlkYXRpb24pIHsKLSAgICBzdGF0dXMgPSBjaXBoZXJfZHJpdmVyX3Rlc3RfYnVmZmVyaW5nKGMpOwotICAgIGNoZWNrX3N0YXR1cyhzdGF0dXMpOwotICB9Ci0gIHN0YXR1cyA9IGNpcGhlcl9kZWFsbG9jKGMpOwotICBjaGVja19zdGF0dXMoc3RhdHVzKTsKLSAgCi0KLSAgLyogcnVuIHRoZSB0aHJvdWdocHV0IHRlc3Qgb24gdGhlIGFlc19pY20gY2lwaGVyICovCi0gICAgc3RhdHVzID0gY2lwaGVyX3R5cGVfYWxsb2MoJmFlc19pY20sICZjLCAzMCk7ICAKLSAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yOiBjYW4ndCBhbGxvY2F0ZSBjaXBoZXJcbiIpOwotICAgICAgZXhpdChzdGF0dXMpOworICAgIC8qIHByb2Nlc3MgaW5wdXQgYXJndW1lbnRzICovCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgcSA9IGdldG9wdF9zKGFyZ2MsIGFyZ3YsICJ0dmEiKTsKKyAgICAgICAgaWYgKHEgPT0gLTEpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3dpdGNoIChxKSB7CisgICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAgICAgZG9fdGltaW5nX3Rlc3QgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3YnOgorICAgICAgICAgICAgZG9fdmFsaWRhdGlvbiA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnYSc6CisgICAgICAgICAgICBkb19hcnJheV90aW1pbmdfdGVzdCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHVzYWdlKGFyZ3ZbMF0pOworICAgICAgICB9CiAgICAgfQogCi0gICAgc3RhdHVzID0gY2lwaGVyX2luaXQoYywgdGVzdF9rZXksIGRpcmVjdGlvbl9lbmNyeXB0KTsKKyAgICBwcmludGYoImNpcGhlciB0ZXN0IGRyaXZlclxuIgorICAgICAgICAgICAiRGF2aWQgQS4gTWNHcmV3XG4iCisgICAgICAgICAgICJDaXNjbyBTeXN0ZW1zLCBJbmMuXG4iKTsKKworICAgIGlmICghZG9fdmFsaWRhdGlvbiAmJiAhZG9fdGltaW5nX3Rlc3QgJiYgIWRvX2FycmF5X3RpbWluZ190ZXN0KQorICAgICAgICB1c2FnZShhcmd2WzBdKTsKKworICAgIC8qIGFycnkgdGltaW5nIChjYWNoZSB0aHJhc2gpIHRlc3QgKi8KKyAgICBpZiAoZG9fYXJyYXlfdGltaW5nX3Rlc3QpIHsKKyAgICAgICAgaW50IG1heF9udW1fY2lwaGVyID0gMSA8PCAxNjsgLyogbnVtYmVyIG9mIGNpcGhlcnMgaW4gY2lwaGVyX2FycmF5ICovCisgICAgICAgIGludCBudW1fY2lwaGVyOworCisgICAgICAgIGZvciAobnVtX2NpcGhlciA9IDE7IG51bV9jaXBoZXIgPCBtYXhfbnVtX2NpcGhlcjsgbnVtX2NpcGhlciAqPSA4KQorICAgICAgICAgICAgY2lwaGVyX2RyaXZlcl90ZXN0X2FycmF5X3Rocm91Z2hwdXQoJnNydHBfbnVsbF9jaXBoZXIsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fY2lwaGVyKTsKKworICAgICAgICBmb3IgKG51bV9jaXBoZXIgPSAxOyBudW1fY2lwaGVyIDwgbWF4X251bV9jaXBoZXI7IG51bV9jaXBoZXIgKj0gOCkKKyAgICAgICAgICAgIGNpcGhlcl9kcml2ZXJfdGVzdF9hcnJheV90aHJvdWdocHV0KAorICAgICAgICAgICAgICAgICZzcnRwX2Flc19pY21fMTI4LCBTUlRQX0FFU19JQ01fMTI4X0tFWV9MRU5fV1NBTFQsIG51bV9jaXBoZXIpOworCisgICAgICAgIGZvciAobnVtX2NpcGhlciA9IDE7IG51bV9jaXBoZXIgPCBtYXhfbnVtX2NpcGhlcjsgbnVtX2NpcGhlciAqPSA4KQorICAgICAgICAgICAgY2lwaGVyX2RyaXZlcl90ZXN0X2FycmF5X3Rocm91Z2hwdXQoCisgICAgICAgICAgICAgICAgJnNydHBfYWVzX2ljbV8yNTYsIFNSVFBfQUVTX0lDTV8yNTZfS0VZX0xFTl9XU0FMVCwgbnVtX2NpcGhlcik7CisKKyNpZmRlZiBHQ00KKyAgICAgICAgZm9yIChudW1fY2lwaGVyID0gMTsgbnVtX2NpcGhlciA8IG1heF9udW1fY2lwaGVyOyBudW1fY2lwaGVyICo9IDgpCisgICAgICAgICAgICBjaXBoZXJfZHJpdmVyX3Rlc3RfYXJyYXlfdGhyb3VnaHB1dCgKKyAgICAgICAgICAgICAgICAmc3J0cF9hZXNfaWNtXzE5MiwgU1JUUF9BRVNfSUNNXzE5Ml9LRVlfTEVOX1dTQUxULCBudW1fY2lwaGVyKTsKKworICAgICAgICBmb3IgKG51bV9jaXBoZXIgPSAxOyBudW1fY2lwaGVyIDwgbWF4X251bV9jaXBoZXI7IG51bV9jaXBoZXIgKj0gOCkgeworICAgICAgICAgICAgY2lwaGVyX2RyaXZlcl90ZXN0X2FycmF5X3Rocm91Z2hwdXQoCisgICAgICAgICAgICAgICAgJnNydHBfYWVzX2djbV8xMjgsIFNSVFBfQUVTX0dDTV8xMjhfS0VZX0xFTl9XU0FMVCwgbnVtX2NpcGhlcik7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKG51bV9jaXBoZXIgPSAxOyBudW1fY2lwaGVyIDwgbWF4X251bV9jaXBoZXI7IG51bV9jaXBoZXIgKj0gOCkgeworICAgICAgICAgICAgY2lwaGVyX2RyaXZlcl90ZXN0X2FycmF5X3Rocm91Z2hwdXQoCisgICAgICAgICAgICAgICAgJnNydHBfYWVzX2djbV8yNTYsIFNSVFBfQUVTX0dDTV8yNTZfS0VZX0xFTl9XU0FMVCwgbnVtX2NpcGhlcik7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAgIGlmIChkb192YWxpZGF0aW9uKSB7CisgICAgICAgIGNpcGhlcl9kcml2ZXJfc2VsZl90ZXN0KCZzcnRwX251bGxfY2lwaGVyKTsKKyAgICAgICAgY2lwaGVyX2RyaXZlcl9zZWxmX3Rlc3QoJnNydHBfYWVzX2ljbV8xMjgpOworICAgICAgICBjaXBoZXJfZHJpdmVyX3NlbGZfdGVzdCgmc3J0cF9hZXNfaWNtXzI1Nik7CisjaWZkZWYgR0NNCisgICAgICAgIGNpcGhlcl9kcml2ZXJfc2VsZl90ZXN0KCZzcnRwX2Flc19pY21fMTkyKTsKKyAgICAgICAgY2lwaGVyX2RyaXZlcl9zZWxmX3Rlc3QoJnNydHBfYWVzX2djbV8xMjgpOworICAgICAgICBjaXBoZXJfZHJpdmVyX3NlbGZfdGVzdCgmc3J0cF9hZXNfZ2NtXzI1Nik7CisjZW5kaWYKKyAgICB9CisKKyAgICAvKiBkbyB0aW1pbmcgYW5kL29yIGJ1ZmZlcl90ZXN0IG9uIHNydHBfbnVsbF9jaXBoZXIgKi8KKyAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl90eXBlX2FsbG9jKCZzcnRwX251bGxfY2lwaGVyLCAmYywgMCwgMCk7CisgICAgY2hlY2tfc3RhdHVzKHN0YXR1cyk7CisKKyAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9pbml0KGMsIE5VTEwpOwogICAgIGNoZWNrX3N0YXR1cyhzdGF0dXMpOwogCiAgICAgaWYgKGRvX3RpbWluZ190ZXN0KQotICAgICAgY2lwaGVyX2RyaXZlcl90ZXN0X3Rocm91Z2hwdXQoYyk7Ci0gICAgCisgICAgICAgIGNpcGhlcl9kcml2ZXJfdGVzdF90aHJvdWdocHV0KGMpOwogICAgIGlmIChkb192YWxpZGF0aW9uKSB7Ci0gICAgICBzdGF0dXMgPSBjaXBoZXJfZHJpdmVyX3Rlc3RfYnVmZmVyaW5nKGMpOwotICAgICAgY2hlY2tfc3RhdHVzKHN0YXR1cyk7CisgICAgICAgIHN0YXR1cyA9IGNpcGhlcl9kcml2ZXJfdGVzdF9idWZmZXJpbmcoYyk7CisgICAgICAgIGNoZWNrX3N0YXR1cyhzdGF0dXMpOwogICAgIH0KLSAgICAKLSAgICBzdGF0dXMgPSBjaXBoZXJfZGVhbGxvYyhjKTsKKyAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9kZWFsbG9jKGMpOwogICAgIGNoZWNrX3N0YXR1cyhzdGF0dXMpOwotICAKLSAgcmV0dXJuIDA7CisKKyAgICAvKiBydW4gdGhlIHRocm91Z2hwdXQgdGVzdCBvbiB0aGUgYWVzX2ljbSBjaXBoZXIgKDEyOC1iaXQga2V5KSAqLworICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX3R5cGVfYWxsb2MoJnNydHBfYWVzX2ljbV8xMjgsICZjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JUUF9BRVNfSUNNXzEyOF9LRVlfTEVOX1dTQUxULCAwKTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3I6IGNhbid0IGFsbG9jYXRlIGNpcGhlclxuIik7CisgICAgICAgIGV4aXQoc3RhdHVzKTsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9pbml0KGMsIHRlc3Rfa2V5KTsKKyAgICBjaGVja19zdGF0dXMoc3RhdHVzKTsKKworICAgIGlmIChkb190aW1pbmdfdGVzdCkKKyAgICAgICAgY2lwaGVyX2RyaXZlcl90ZXN0X3Rocm91Z2hwdXQoYyk7CisKKyAgICBpZiAoZG9fdmFsaWRhdGlvbikgeworICAgICAgICBzdGF0dXMgPSBjaXBoZXJfZHJpdmVyX3Rlc3RfYnVmZmVyaW5nKGMpOworICAgICAgICBjaGVja19zdGF0dXMoc3RhdHVzKTsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9kZWFsbG9jKGMpOworICAgIGNoZWNrX3N0YXR1cyhzdGF0dXMpOworCisgICAgLyogcmVwZWF0IHRoZSB0ZXN0cyB3aXRoIDI1Ni1iaXQga2V5cyAqLworICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX3R5cGVfYWxsb2MoJnNydHBfYWVzX2ljbV8yNTYsICZjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JUUF9BRVNfSUNNXzI1Nl9LRVlfTEVOX1dTQUxULCAwKTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3I6IGNhbid0IGFsbG9jYXRlIGNpcGhlclxuIik7CisgICAgICAgIGV4aXQoc3RhdHVzKTsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9pbml0KGMsIHRlc3Rfa2V5KTsKKyAgICBjaGVja19zdGF0dXMoc3RhdHVzKTsKKworICAgIGlmIChkb190aW1pbmdfdGVzdCkKKyAgICAgICAgY2lwaGVyX2RyaXZlcl90ZXN0X3Rocm91Z2hwdXQoYyk7CisKKyAgICBpZiAoZG9fdmFsaWRhdGlvbikgeworICAgICAgICBzdGF0dXMgPSBjaXBoZXJfZHJpdmVyX3Rlc3RfYnVmZmVyaW5nKGMpOworICAgICAgICBjaGVja19zdGF0dXMoc3RhdHVzKTsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9kZWFsbG9jKGMpOworICAgIGNoZWNrX3N0YXR1cyhzdGF0dXMpOworCisjaWZkZWYgR0NNCisgICAgLyogcnVuIHRoZSB0aHJvdWdocHV0IHRlc3Qgb24gdGhlIGFlc19nY21fMTI4IGNpcGhlciAqLworICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX3R5cGVfYWxsb2MoJnNydHBfYWVzX2djbV8xMjgsICZjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JUUF9BRVNfR0NNXzEyOF9LRVlfTEVOX1dTQUxULCA4KTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3I6IGNhbid0IGFsbG9jYXRlIEdDTSAxMjggY2lwaGVyXG4iKTsKKyAgICAgICAgZXhpdChzdGF0dXMpOworICAgIH0KKyAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9pbml0KGMsIHRlc3Rfa2V5KTsKKyAgICBjaGVja19zdGF0dXMoc3RhdHVzKTsKKyAgICBpZiAoZG9fdGltaW5nX3Rlc3QpIHsKKyAgICAgICAgY2lwaGVyX2RyaXZlcl90ZXN0X3Rocm91Z2hwdXQoYyk7CisgICAgfQorCisgICAgLy8gR0NNIGNpcGhlcnMgZG9uJ3QgZG8gYnVmZmVyaW5nOyB0aGV5J3JlICJvbmUgc2hvdCIKKworICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX2RlYWxsb2MoYyk7CisgICAgY2hlY2tfc3RhdHVzKHN0YXR1cyk7CisKKyAgICAvKiBydW4gdGhlIHRocm91Z2hwdXQgdGVzdCBvbiB0aGUgYWVzX2djbV8yNTYgY2lwaGVyICovCisgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfdHlwZV9hbGxvYygmc3J0cF9hZXNfZ2NtXzI1NiwgJmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlRQX0FFU19HQ01fMjU2X0tFWV9MRU5fV1NBTFQsIDE2KTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3I6IGNhbid0IGFsbG9jYXRlIEdDTSAyNTYgY2lwaGVyXG4iKTsKKyAgICAgICAgZXhpdChzdGF0dXMpOworICAgIH0KKyAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9pbml0KGMsIHRlc3Rfa2V5KTsKKyAgICBjaGVja19zdGF0dXMoc3RhdHVzKTsKKyAgICBpZiAoZG9fdGltaW5nX3Rlc3QpIHsKKyAgICAgICAgY2lwaGVyX2RyaXZlcl90ZXN0X3Rocm91Z2hwdXQoYyk7CisgICAgfQorCisgICAgLy8gR0NNIGNpcGhlcnMgZG9uJ3QgZG8gYnVmZmVyaW5nOyB0aGV5J3JlICJvbmUgc2hvdCIKKworICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX2RlYWxsb2MoYyk7CisgICAgY2hlY2tfc3RhdHVzKHN0YXR1cyk7CisjZW5kaWYKKworICAgIHJldHVybiAwOwogfQogCi12b2lkCi1jaXBoZXJfZHJpdmVyX3Rlc3RfdGhyb3VnaHB1dChjaXBoZXJfdCAqYykgewotICBpbnQgaTsKLSAgaW50IG1pbl9lbmNfbGVuID0gMzI7ICAgICAKLSAgaW50IG1heF9lbmNfbGVuID0gMjA0ODsgICAvKiBzaG91bGQgYmUgYSBwb3dlciBvZiB0d28gKi8KLSAgaW50IG51bV90cmlhbHMgPSAxMDAwMDA7ICAKLSAgCi0gIHByaW50ZigidGltaW5nICVzIHRocm91Z2hwdXQ6XG4iLCBjLT50eXBlLT5kZXNjcmlwdGlvbik7Ci0gIGZmbHVzaChzdGRvdXQpOwotICBmb3IgKGk9bWluX2VuY19sZW47IGkgPD0gbWF4X2VuY19sZW47IGkgPSBpICogMikKLSAgICBwcmludGYoIm1zZyBsZW46ICVkXHRnaWdhYml0cyBwZXIgc2Vjb25kOiAlZlxuIiwKLQkgICBpLCBjaXBoZXJfYml0c19wZXJfc2Vjb25kKGMsIGksIG51bV90cmlhbHMpIC8gMWU5KTsKK3ZvaWQgY2lwaGVyX2RyaXZlcl90ZXN0X3Rocm91Z2hwdXQoc3J0cF9jaXBoZXJfdCAqYykKK3sKKyAgICBpbnQgaTsKKyAgICBpbnQgbWluX2VuY19sZW4gPSAzMjsKKyAgICBpbnQgbWF4X2VuY19sZW4gPSAyMDQ4OyAvKiBzaG91bGQgYmUgYSBwb3dlciBvZiB0d28gKi8KKyAgICBpbnQgbnVtX3RyaWFscyA9IDEwMDAwMDA7CiAKKyAgICBwcmludGYoInRpbWluZyAlcyB0aHJvdWdocHV0LCBrZXkgbGVuZ3RoICVkOlxuIiwgYy0+dHlwZS0+ZGVzY3JpcHRpb24sCisgICAgICAgICAgIGMtPmtleV9sZW4pOworICAgIGZmbHVzaChzdGRvdXQpOworICAgIGZvciAoaSA9IG1pbl9lbmNfbGVuOyBpIDw9IG1heF9lbmNfbGVuOyBpID0gaSAqIDIpCisgICAgICAgIHByaW50ZigibXNnIGxlbjogJWRcdGdpZ2FiaXRzIHBlciBzZWNvbmQ6ICVmXG4iLCBpLAorICAgICAgICAgICAgICAgc3J0cF9jaXBoZXJfYml0c19wZXJfc2Vjb25kKGMsIGksIG51bV90cmlhbHMpIC8gMWU5KTsKIH0KIAotZXJyX3N0YXR1c190Ci1jaXBoZXJfZHJpdmVyX3NlbGZfdGVzdChjaXBoZXJfdHlwZV90ICpjdCkgewotICBlcnJfc3RhdHVzX3Qgc3RhdHVzOwotICAKLSAgcHJpbnRmKCJydW5uaW5nIGNpcGhlciBzZWxmLXRlc3QgZm9yICVzLi4uIiwgY3QtPmRlc2NyaXB0aW9uKTsKLSAgc3RhdHVzID0gY2lwaGVyX3R5cGVfc2VsZl90ZXN0KGN0KTsKLSAgaWYgKHN0YXR1cykgewotICAgIHByaW50ZigiZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgc3RhdHVzKTsKLSAgICBleGl0KHN0YXR1cyk7Ci0gIH0KLSAgcHJpbnRmKCJwYXNzZWRcbiIpOwotICAKLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7CitzcnRwX2Vycl9zdGF0dXNfdCBjaXBoZXJfZHJpdmVyX3NlbGZfdGVzdChzcnRwX2NpcGhlcl90eXBlX3QgKmN0KQoreworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKKworICAgIHByaW50ZigicnVubmluZyBjaXBoZXIgc2VsZi10ZXN0IGZvciAlcy4uLiIsIGN0LT5kZXNjcmlwdGlvbik7CisgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfdHlwZV9zZWxmX3Rlc3QoY3QpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcHJpbnRmKCJmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLCBzdGF0dXMpOworICAgICAgICBleGl0KHN0YXR1cyk7CisgICAgfQorICAgIHByaW50ZigicGFzc2VkXG4iKTsKKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7CiB9CiAKIC8qCkBAIC0yNTYsMjM0ICszNTIsMjUyIEBACiAgKiBjYWxscwogICovCiAKLWVycl9zdGF0dXNfdAotY2lwaGVyX2RyaXZlcl90ZXN0X2J1ZmZlcmluZyhjaXBoZXJfdCAqYykgewotICBpbnQgaSwgaiwgbGVuLCBudW1fdHJpYWxzID0gMTAwMDsKLSAgaW50IGJ1ZmxlbiA9IDEwMjQ7Ci0gIG9jdGV0X3QgYnVmZmVyMFtidWZsZW5dLCBidWZmZXIxW2J1Zmxlbl0sICpjdXJyZW50LCAqZW5kOwotICBvY3RldF90IGlkeFsxNl0gPSB7IAotICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIAotICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MzQKLSAgfTsKLSAgZXJyX3N0YXR1c190IHN0YXR1czsKLSAgCi0gIHByaW50ZigidGVzdGluZyBvdXRwdXQgYnVmZmVyaW5nIGZvciBjaXBoZXIgJXMuLi4iLAotCSBjLT50eXBlLT5kZXNjcmlwdGlvbik7CisjZGVmaW5lIElOSVRJQUxfQlVGTEVOIDEwMjQKK3NydHBfZXJyX3N0YXR1c190IGNpcGhlcl9kcml2ZXJfdGVzdF9idWZmZXJpbmcoc3J0cF9jaXBoZXJfdCAqYykKK3sKKyAgICBpbnQgaSwgaiwgbnVtX3RyaWFscyA9IDEwMDA7CisgICAgdW5zaWduZWQgbGVuLCBidWZsZW4gPSBJTklUSUFMX0JVRkxFTjsKKyAgICB1aW50OF90IGJ1ZmZlcjBbSU5JVElBTF9CVUZMRU5dLCBidWZmZXIxW0lOSVRJQUxfQlVGTEVOXSwgKmN1cnJlbnQsICplbmQ7CisgICAgdWludDhfdCBpZHhbMTZdID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgzNCB9OworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKIAotICBmb3IgKGk9MDsgaSA8IG51bV90cmlhbHM7IGkrKykgeworICAgIHByaW50ZigidGVzdGluZyBvdXRwdXQgYnVmZmVyaW5nIGZvciBjaXBoZXIgJXMuLi4iLCBjLT50eXBlLT5kZXNjcmlwdGlvbik7CiAKLSAgIC8qIHNldCBidWZmZXJzIHRvIHplcm8gKi8KLSAgICBmb3IgKGo9MDsgaiA8IGJ1ZmxlbjsgaisrKSAKLSAgICAgIGJ1ZmZlcjBbal0gPSBidWZmZXIxW2pdID0gMDsKLSAgICAKLSAgICAvKiBpbml0aWFsaXplIGNpcGhlciAgKi8KLSAgICBzdGF0dXMgPSBjaXBoZXJfc2V0X2l2KGMsIGlkeCk7Ci0gICAgaWYgKHN0YXR1cykKLSAgICAgIHJldHVybiBzdGF0dXM7CisgICAgZm9yIChpID0gMDsgaSA8IG51bV90cmlhbHM7IGkrKykgeworICAgICAgICAvKiBzZXQgYnVmZmVycyB0byB6ZXJvICovCisgICAgICAgIGZvciAoaiA9IDA7IGogPCAoaW50KWJ1ZmxlbjsgaisrKSB7CisgICAgICAgICAgICBidWZmZXIwW2pdID0gYnVmZmVyMVtqXSA9IDA7CisgICAgICAgIH0KIAotICAgIC8qIGdlbmVyYXRlICdyZWZlcmVuY2UnIHZhbHVlIGJ5IGVuY3J5cHRpbmcgYWxsIGF0IG9uY2UgKi8KLSAgICBzdGF0dXMgPSBjaXBoZXJfZW5jcnlwdChjLCBidWZmZXIwLCAmYnVmbGVuKTsKLSAgICBpZiAoc3RhdHVzKQotICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgLyogaW5pdGlhbGl6ZSBjaXBoZXIgICovCisgICAgICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX3NldF9pdihjLCAodWludDhfdCAqKWlkeCwgc3J0cF9kaXJlY3Rpb25fZW5jcnlwdCk7CisgICAgICAgIGlmIChzdGF0dXMpCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOwogCi0gICAgLyogcmUtaW5pdGlhbGl6ZSBjaXBoZXIgKi8KLSAgICBzdGF0dXMgPSBjaXBoZXJfc2V0X2l2KGMsIGlkeCk7Ci0gICAgaWYgKHN0YXR1cykKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgCi0gICAgLyogbm93IGxvb3Agb3ZlciBzaG9ydCBsZW5ndGhzIHVudGlsIGJ1ZmZlcjEgaXMgZW5jcnlwdGVkICovCi0gICAgY3VycmVudCA9IGJ1ZmZlcjE7Ci0gICAgZW5kID0gYnVmZmVyMSArIGJ1ZmxlbjsKLSAgICB3aGlsZSAoY3VycmVudCA8IGVuZCkgeworICAgICAgICAvKiBnZW5lcmF0ZSAncmVmZXJlbmNlJyB2YWx1ZSBieSBlbmNyeXB0aW5nIGFsbCBhdCBvbmNlICovCisgICAgICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX2VuY3J5cHQoYywgYnVmZmVyMCwgJmJ1Zmxlbik7CisgICAgICAgIGlmIChzdGF0dXMpCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOwogCi0gICAgICAvKiBjaG9vc2UgYSBzaG9ydCBsZW5ndGggKi8KLSAgICAgIGxlbiA9IHJhbmRvbSgpICYgMHgwMWY7CisgICAgICAgIC8qIHJlLWluaXRpYWxpemUgY2lwaGVyICovCisgICAgICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX3NldF9pdihjLCAodWludDhfdCAqKWlkeCwgc3J0cF9kaXJlY3Rpb25fZW5jcnlwdCk7CisgICAgICAgIGlmIChzdGF0dXMpCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOwogCi0gICAgICAvKiBtYWtlIHN1cmUgdGhhdCBsZW4gZG9lc24ndCBjYXVzZSB1cyB0byBvdmVycmVhY2ggdGhlIGJ1ZmZlciAqLwotICAgICAgaWYgKGN1cnJlbnQgKyBsZW4gPiBlbmQpCi0JbGVuID0gZW5kIC0gY3VycmVudDsKKyAgICAgICAgLyogbm93IGxvb3Agb3ZlciBzaG9ydCBsZW5ndGhzIHVudGlsIGJ1ZmZlcjEgaXMgZW5jcnlwdGVkICovCisgICAgICAgIGN1cnJlbnQgPSBidWZmZXIxOworICAgICAgICBlbmQgPSBidWZmZXIxICsgYnVmbGVuOworICAgICAgICB3aGlsZSAoY3VycmVudCA8IGVuZCkgeworICAgICAgICAgICAgLyogY2hvb3NlIGEgc2hvcnQgbGVuZ3RoICovCisgICAgICAgICAgICBsZW4gPSBzcnRwX2NpcGhlcl9yYW5kX3UzMl9mb3JfdGVzdHMoKSAmIDB4MDFmOwogCi0gICAgICBzdGF0dXMgPSBjaXBoZXJfZW5jcnlwdChjLCBjdXJyZW50LCAmbGVuKTsKLSAgICAgIGlmIChzdGF0dXMpIAotCXJldHVybiBzdGF0dXM7Ci0gICAgICAKLSAgICAgIC8qIGFkdmFuY2UgcG9pbnRlciBpbnRvIGJ1ZmZlcjEgdG8gcmVmbGVjdCBlbmNyeXB0aW9uICovCi0gICAgICBjdXJyZW50ICs9IGxlbjsKLSAgICAgIAotICAgICAgLyogaWYgYnVmZmVyMSBpcyBhbGwgZW5jcnlwdGVkLCBicmVhayBvdXQgb2YgbG9vcCAqLwotICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kKQotCWJyZWFrOworICAgICAgICAgICAgLyogbWFrZSBzdXJlIHRoYXQgbGVuIGRvZXNuJ3QgY2F1c2UgdXMgdG8gb3ZlcnJlYWNoIHRoZSBidWZmZXIgKi8KKyAgICAgICAgICAgIGlmIChjdXJyZW50ICsgbGVuID4gZW5kKQorICAgICAgICAgICAgICAgIGxlbiA9IGVuZCAtIGN1cnJlbnQ7CisKKyAgICAgICAgICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX2VuY3J5cHQoYywgY3VycmVudCwgJmxlbik7CisgICAgICAgICAgICBpZiAoc3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlciBpbnRvIGJ1ZmZlcjEgdG8gcmVmbGVjdCBlbmNyeXB0aW9uICovCisgICAgICAgICAgICBjdXJyZW50ICs9IGxlbjsKKworICAgICAgICAgICAgLyogaWYgYnVmZmVyMSBpcyBhbGwgZW5jcnlwdGVkLCBicmVhayBvdXQgb2YgbG9vcCAqLworICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyogY29tcGFyZSBidWZmZXJzICovCisgICAgICAgIGZvciAoaiA9IDA7IGogPCAoaW50KWJ1ZmxlbjsgaisrKSB7CisgICAgICAgICAgICBpZiAoYnVmZmVyMFtqXSAhPSBidWZmZXIxW2pdKSB7CisjaWYgUFJJTlRfREVCVUcKKyAgICAgICAgICAgICAgICBwcmludGYoInRlc3QgY2FzZSAlZCBmYWlsZWQgYXQgYnl0ZSAlZFxuIiwgaSwgaik7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJjb21wdXRlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKGJ1ZmZlcjEsIGJ1ZmxlbikpOworICAgICAgICAgICAgICAgIHByaW50ZigiZXhwZWN0ZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhidWZmZXIwLCBidWZsZW4pKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYWxnb19mYWlsOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCi0gICAgLyogY29tcGFyZSBidWZmZXJzICovCi0gICAgZm9yIChqPTA7IGogPCBidWZsZW47IGorKykKLSAgICAgIGlmIChidWZmZXIwW2pdICE9IGJ1ZmZlcjFbal0pIHsKLSNpZiBQUklOVF9ERUJVRwotCXByaW50ZigidGVzdCBjYXNlICVkIGZhaWxlZCBhdCBieXRlICVkXG4iLCBpLCBqKTsKLQlwcmludGYoImNvbXB1dGVkOiAlc1xuIiwgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoYnVmZmVyMSwgYnVmbGVuKSk7Ci0JcHJpbnRmKCJleHBlY3RlZDogJXNcbiIsIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKGJ1ZmZlcjAsIGJ1ZmxlbikpOwotI2VuZGlmIAotCXJldHVybiBlcnJfc3RhdHVzX2FsZ29fZmFpbDsKLSAgICAgIH0KLSAgfQotICAKLSAgcHJpbnRmKCJwYXNzZWRcbiIpOworICAgIHByaW50ZigicGFzc2VkXG4iKTsKIAotICByZXR1cm4gZXJyX3N0YXR1c19vazsKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQogCi0KIC8qCiAgKiBUaGUgZnVuY3Rpb24gY2lwaGVyX3Rlc3RfdGhyb3VnaHB1dF9hcnJheSgpIHRlc3RzIHRoZSBlZmZlY3Qgb2YgQ1BVCi0gKiBjYWNoZSB0aHJhc2ggb24gY2lwaGVyIHRocm91Z2hwdXQuICAKKyAqIGNhY2hlIHRocmFzaCBvbiBjaXBoZXIgdGhyb3VnaHB1dC4KICAqCiAgKiBjaXBoZXJfYXJyYXlfYWxsb2NfaW5pdChjdHlwZSwgYXJyYXksIG51bV9jaXBoZXJzKSBjcmVhdGVzIGFuIGFycmF5Ci0gKiBvZiBjaXBoZXJfdCBvZiB0eXBlIGN0eXBlCisgKiBvZiBzcnRwX2NpcGhlcl90IG9mIHR5cGUgY3R5cGUKICAqLwogCi1lcnJfc3RhdHVzX3QKLWNpcGhlcl9hcnJheV9hbGxvY19pbml0KGNpcGhlcl90ICoqKmNhLCBpbnQgbnVtX2NpcGhlcnMsCi0JCQljaXBoZXJfdHlwZV90ICpjdHlwZSwgaW50IGtsZW4pIHsKLSAgaW50IGksIGo7Ci0gIGVycl9zdGF0dXNfdCBzdGF0dXM7Ci0gIG9jdGV0X3QgKmtleTsKLSAgY2lwaGVyX3QgKipjaXBoZXJfYXJyYXk7CitzcnRwX2Vycl9zdGF0dXNfdCBjaXBoZXJfYXJyYXlfYWxsb2NfaW5pdChzcnRwX2NpcGhlcl90ICoqKmNhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9jaXBoZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9jaXBoZXJfdHlwZV90ICpjdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBrbGVuKQoreworICAgIGludCBpLCBqOworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKKyAgICB1aW50OF90ICprZXk7CisgICAgc3J0cF9jaXBoZXJfdCAqKmNpcGhlcl9hcnJheTsKKyAgICAvKiBwYWQga2xlbiBhbGxvY2F0aW9uLCB0byBoYW5kbGUgYWVzX2ljbSByZWFkaW5nIDE2IGJ5dGVzIGZvciB0aGUKKyAgICAgICAxNC1ieXRlIHNhbHQgKi8KKyAgICBpbnQga2xlbl9wYWQgPSAoKGtsZW4gKyAxNSkgPj4gNCkgPDwgNDsKIAotICAvKiBhbGxvY2F0ZSBhcnJheSBvZiBwb2ludGVycyB0byBjaXBoZXJzICovCi0gIGNpcGhlcl9hcnJheSA9IChjaXBoZXJfdCAqKikgbWFsbG9jKHNpemVvZihjaXBoZXJfdCAqKSAqIG51bV9jaXBoZXJzKTsKLSAgaWYgKGNpcGhlcl9hcnJheSA9PSBOVUxMKQotICAgIHJldHVybiBlcnJfc3RhdHVzX2FsbG9jX2ZhaWw7CisgICAgLyogYWxsb2NhdGUgYXJyYXkgb2YgcG9pbnRlcnMgdG8gY2lwaGVycyAqLworICAgIGNpcGhlcl9hcnJheSA9IChzcnRwX2NpcGhlcl90ICoqKXNydHBfY3J5cHRvX2FsbG9jKHNpemVvZihzcnRwX2NpcGhlcl90ICopICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fY2lwaGVycyk7CisgICAgaWYgKGNpcGhlcl9hcnJheSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2FsbG9jX2ZhaWw7CiAKLSAgLyogc2V0IGNhIHRvIGxvY2F0aW9uIG9mIGNpcGhlcl9hcnJheSAqLwotICAqY2EgPSBjaXBoZXJfYXJyYXk7CisgICAgLyogc2V0IGNhIHRvIGxvY2F0aW9uIG9mIGNpcGhlcl9hcnJheSAqLworICAgICpjYSA9IGNpcGhlcl9hcnJheTsKIAotICAvKiBhbGxvY2F0ZSBrZXkgKi8KLSAga2V5ID0gY3J5cHRvX2FsbG9jKGtsZW4pOwotICBpZiAoa2V5ID09IE5VTEwpIHsKLSAgICBmcmVlKGNpcGhlcl9hcnJheSk7Ci0gICAgcmV0dXJuIGVycl9zdGF0dXNfYWxsb2NfZmFpbDsKLSAgfQotICAKLSAgLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gYXJyYXkgb2YgY2lwaGVycyAqLwotICBmb3IgKGk9MDsgaSA8IG51bV9jaXBoZXJzOyBpKyspIHsKKyAgICAvKiBhbGxvY2F0ZSBrZXkgKi8KKyAgICBrZXkgPSBzcnRwX2NyeXB0b19hbGxvYyhrbGVuX3BhZCk7CisgICAgaWYgKGtleSA9PSBOVUxMKSB7CisgICAgICAgIHNydHBfY3J5cHRvX2ZyZWUoY2lwaGVyX2FycmF5KTsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19hbGxvY19mYWlsOworICAgIH0KIAotICAgIC8qIGFsbG9jYXRlIGNpcGhlciAqLwotICAgIHN0YXR1cyA9IGNpcGhlcl90eXBlX2FsbG9jKGN0eXBlLCBjaXBoZXJfYXJyYXksIGtsZW4pOwotICAgIGlmIChzdGF0dXMpCi0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIAotICAgIC8qIGdlbmVyYXRlIHJhbmRvbSBrZXkgYW5kIGluaXRpYWxpemUgY2lwaGVyICovCi0gICAgZm9yIChqPTA7IGogPCBrbGVuOyBqKyspCi0gICAgICBrZXlbal0gPSAob2N0ZXRfdCkgcmFuZG9tKCk7Ci0gICAgc3RhdHVzID0gY2lwaGVyX2luaXQoKmNpcGhlcl9hcnJheSwga2V5LCBkaXJlY3Rpb25fZW5jcnlwdCk7Ci0gICAgaWYgKHN0YXR1cykKLSAgICAgIHJldHVybiBzdGF0dXM7CisgICAgLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gYXJyYXkgb2YgY2lwaGVycyAqLworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fY2lwaGVyczsgaSsrKSB7CisgICAgICAgIC8qIGFsbG9jYXRlIGNpcGhlciAqLworICAgICAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl90eXBlX2FsbG9jKGN0eXBlLCBjaXBoZXJfYXJyYXksIGtsZW4sIDE2KTsKKyAgICAgICAgaWYgKHN0YXR1cykKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CiAKLS8qICAgICBwcmludGYoIiVkdGggY2lwaGVyIGlzIGF0ICVwXG4iLCBpLCAqY2lwaGVyX2FycmF5KTsgKi8KLS8qICAgICBwcmludGYoIiVkdGggY2lwaGVyIGRlc2NyaXB0aW9uOiAlc1xuIiwgaSwgICovCi0vKiAJICAgKCpjaXBoZXJfYXJyYXkpLT50eXBlLT5kZXNjcmlwdGlvbik7ICovCi0gICAgCi0gICAgLyogYWR2YW5jZSBjaXBoZXIgYXJyYXkgcG9pbnRlciAqLwotICAgIGNpcGhlcl9hcnJheSsrOwotICB9CisgICAgICAgIC8qIGdlbmVyYXRlIHJhbmRvbSBrZXkgYW5kIGluaXRpYWxpemUgY2lwaGVyICovCisgICAgICAgIHNydHBfY2lwaGVyX3JhbmRfZm9yX3Rlc3RzKGtleSwga2xlbik7CisgICAgICAgIGZvciAoaiA9IGtsZW47IGogPCBrbGVuX3BhZDsgaisrKQorICAgICAgICAgICAga2V5W2pdID0gMDsKKyAgICAgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfaW5pdCgqY2lwaGVyX2FycmF5LCBrZXkpOworICAgICAgICBpZiAoc3RhdHVzKQorICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKIAotICByZXR1cm4gZXJyX3N0YXR1c19vazsKKyAgICAgICAgLyogICAgIHByaW50ZigiJWR0aCBjaXBoZXIgaXMgYXQgJXBcbiIsIGksICpjaXBoZXJfYXJyYXkpOyAqLworICAgICAgICAvKiAgICAgcHJpbnRmKCIlZHRoIGNpcGhlciBkZXNjcmlwdGlvbjogJXNcbiIsIGksICAqLworICAgICAgICAvKiAJICAgKCpjaXBoZXJfYXJyYXkpLT50eXBlLT5kZXNjcmlwdGlvbik7ICovCisKKyAgICAgICAgLyogYWR2YW5jZSBjaXBoZXIgYXJyYXkgcG9pbnRlciAqLworICAgICAgICBjaXBoZXJfYXJyYXkrKzsKKyAgICB9CisKKyAgICBzcnRwX2NyeXB0b19mcmVlKGtleSk7CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQogCi1lcnJfc3RhdHVzX3QKLWNpcGhlcl9hcnJheV9kZWxldGUoY2lwaGVyX3QgKmNpcGhlcl9hcnJheVtdLCBpbnQgbnVtX2NpcGhlcikgewotICBpbnQgaTsKLSAgCi0gIGZvciAoaT0wOyBpIDwgbnVtX2NpcGhlcjsgaSsrKSB7Ci0gICAgY2lwaGVyX2RlYWxsb2MoY2lwaGVyX2FycmF5W2ldKTsKLSAgfQorc3J0cF9lcnJfc3RhdHVzX3QgY2lwaGVyX2FycmF5X2RlbGV0ZShzcnRwX2NpcGhlcl90ICpjaXBoZXJfYXJyYXlbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9jaXBoZXIpCit7CisgICAgaW50IGk7CiAKLSAgZnJlZShjaXBoZXJfYXJyYXkpOwotICAKLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7CisgICAgZm9yIChpID0gMDsgaSA8IG51bV9jaXBoZXI7IGkrKykgeworICAgICAgICBzcnRwX2NpcGhlcl9kZWFsbG9jKGNpcGhlcl9hcnJheVtpXSk7CisgICAgfQorCisgICAgc3J0cF9jcnlwdG9fZnJlZShjaXBoZXJfYXJyYXkpOworCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKIH0KIAotCiAvKgogICogY2lwaGVyX2FycmF5X2JpdHNfcGVyX3NlY29uZChjLCBsLCB0KSBjb21wdXRlcyAoYW4gZXN0aW1hdGUgb2YpIHRoZQogICogbnVtYmVyIG9mIGJpdHMgdGhhdCBhIGNpcGhlciBpbXBsZW1lbnRhdGlvbiBjYW4gZW5jcnlwdCBpbiBhIHNlY29uZAogICogd2hlbiBkaXN0aW5jdCBrZXlzIGFyZSB1c2VkIHRvIGVuY3J5cHQgZGlzdGluY3QgbWVzc2FnZXMKLSAqIAorICoKICAqIGMgaXMgYSBjaXBoZXIgKHdoaWNoIE1VU1QgYmUgYWxsb2NhdGVkIGFuIGluaXRpYWxpemVkIGFscmVhZHkpLCBsCiAgKiBpcyB0aGUgbGVuZ3RoIGluIG9jdGV0cyBvZiB0aGUgdGVzdCBkYXRhIHRvIGJlIGVuY3J5cHRlZCwgYW5kIHQgaXMKICAqIHRoZSBudW1iZXIgb2YgdHJpYWxzCiAgKgotICogaWYgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQsIHRoZSB2YWx1ZSAwLjAgaXMgcmV0dXJuZWQKKyAqIGlmIGFuIGVycm9yIGlzIGVuY291bnRlcmVkLCB0aGUgdmFsdWUgMCBpcyByZXR1cm5lZAogICovCiAKLSNpbmNsdWRlIDx0aW1lLmg+Cit1aW50NjRfdCBjaXBoZXJfYXJyYXlfYml0c19wZXJfc2Vjb25kKHNydHBfY2lwaGVyX3QgKmNpcGhlcl9hcnJheVtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX2NpcGhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgb2N0ZXRzX2luX2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV90cmlhbHMpCit7CisgICAgaW50IGk7CisgICAgdjEyOF90IG5vbmNlOworICAgIGNsb2NrX3QgdGltZXI7CisgICAgdW5zaWduZWQgY2hhciAqZW5jX2J1ZjsKKyAgICBpbnQgY2lwaGVyX2luZGV4ID0gc3J0cF9jaXBoZXJfcmFuZF91MzJfZm9yX3Rlc3RzKCkgJSBudW1fY2lwaGVyOwogCi1kb3VibGUKLWNpcGhlcl9hcnJheV9iaXRzX3Blcl9zZWNvbmQoY2lwaGVyX3QgKmNpcGhlcl9hcnJheVtdLCBpbnQgbnVtX2NpcGhlciwgCi0JCQkgICAgIGludCBvY3RldHNfaW5fYnVmZmVyLCBpbnQgbnVtX3RyaWFscykgewotICBpbnQgaTsKLSAgdjEyOF90IG5vbmNlOwotICBjbG9ja190IHRpbWVyOwotICB1bnNpZ25lZCBjaGFyICplbmNfYnVmOwotICBpbnQgY2lwaGVyX2luZGV4ID0gMDsKKyAgICAvKiBPdmVyLWFsbG9jLCBmb3IgTklTVCBDQkMgcGFkZGluZyAqLworICAgIGVuY19idWYgPSBzcnRwX2NyeXB0b19hbGxvYyhvY3RldHNfaW5fYnVmZmVyICsgMTcpOworICAgIGlmIChlbmNfYnVmID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOyAvKiBpbmRpY2F0ZSBiYWQgcGFyYW1ldGVycyBieSByZXR1cm5pbmcgbnVsbCAqLwogCisgICAgLyogdGltZSByZXBlYXRlZCB0cmlhbHMgKi8KKyAgICB2MTI4X3NldF90b196ZXJvKCZub25jZSk7CisgICAgdGltZXIgPSBjbG9jaygpOworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fdHJpYWxzOyBpKyssIG5vbmNlLnYzMlszXSA9IGkpIHsKKyAgICAgICAgLyogbGVuZ3RoIHBhcmFtZXRlciB0byBzcnRwX2NpcGhlcl9lbmNyeXB0IGlzIGluL291dCAtLSBvdXQgaXMgdG90YWwsCisgICAgICAgICAqIHBhZGRlZAorICAgICAgICAgKiBsZW5ndGggLS0gc28gcmVzZXQgaXQgZWFjaCB0aW1lLiAqLworICAgICAgICB1bnNpZ25lZCBvY3RldHNfdG9fZW5jcnlwdCA9IG9jdGV0c19pbl9idWZmZXI7CiAKLSAgZW5jX2J1ZiA9IGNyeXB0b19hbGxvYyhvY3RldHNfaW5fYnVmZmVyKTsKLSAgaWYgKGVuY19idWYgPT0gTlVMTCkKLSAgICByZXR1cm4gMC4wOyAgLyogaW5kaWNhdGUgYmFkIHBhcmFtZXRlcnMgYnkgcmV0dXJuaW5nIG51bGwgKi8KLSAgCi0gIC8qIHRpbWUgcmVwZWF0ZWQgdHJpYWxzICovCi0gIHYxMjhfc2V0X3RvX3plcm8oJm5vbmNlKTsKLSAgdGltZXIgPSBjbG9jaygpOwotICBmb3IoaT0wOyBpIDwgbnVtX3RyaWFsczsgaSsrLCBub25jZS52MzJbM10gPSBpKSB7CisgICAgICAgIC8qIGVuY3J5cHQgYnVmZmVyIHdpdGggY2lwaGVyICovCisgICAgICAgIHNydHBfY2lwaGVyX3NldF9pdihjaXBoZXJfYXJyYXlbY2lwaGVyX2luZGV4XSwgKHVpbnQ4X3QgKikmbm9uY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX2RpcmVjdGlvbl9lbmNyeXB0KTsKKyAgICAgICAgc3J0cF9jaXBoZXJfZW5jcnlwdChjaXBoZXJfYXJyYXlbY2lwaGVyX2luZGV4XSwgZW5jX2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2N0ZXRzX3RvX2VuY3J5cHQpOwogCi0gICAgLyogY2hvb3NlIGEgY2lwaGVyIGF0IHJhbmRvbSBmcm9tIHRoZSBhcnJheSovCi0gICAgY2lwaGVyX2luZGV4ID0gKCooKHVpbnQzMl90ICopZW5jX2J1ZikpICUgbnVtX2NpcGhlcjsKKyAgICAgICAgLyogY2hvb3NlIGEgY2lwaGVyIGF0IHJhbmRvbSBmcm9tIHRoZSBhcnJheSovCisgICAgICAgIGNpcGhlcl9pbmRleCA9ICgqKCh1aW50MzJfdCAqKWVuY19idWYpKSAlIG51bV9jaXBoZXI7CisgICAgfQorICAgIHRpbWVyID0gY2xvY2soKSAtIHRpbWVyOwogCi0gICAgLyogZW5jcnlwdCBidWZmZXIgd2l0aCBjaXBoZXIgKi8KLSAgICBjaXBoZXJfc2V0X2l2KGNpcGhlcl9hcnJheVtjaXBoZXJfaW5kZXhdLCAmbm9uY2UpOwotICAgIGNpcGhlcl9lbmNyeXB0KGNpcGhlcl9hcnJheVtjaXBoZXJfaW5kZXhdLCBlbmNfYnVmLCAmb2N0ZXRzX2luX2J1ZmZlcik7Ci0gIH0KLSAgdGltZXIgPSBjbG9jaygpIC0gdGltZXI7CisgICAgc3J0cF9jcnlwdG9fZnJlZShlbmNfYnVmKTsKIAotICBmcmVlKGVuY19idWYpOwotICAKLSAgcmV0dXJuIChkb3VibGUpIENMT0NLU19QRVJfU0VDICogbnVtX3RyaWFscwotICAgICogOCAqIG9jdGV0c19pbl9idWZmZXIgLyB0aW1lcjsKKyAgICBpZiAodGltZXIgPT0gMCkgeworICAgICAgICAvKiBUb28gZmFzdCEgKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuICh1aW50NjRfdClDTE9DS1NfUEVSX1NFQyAqIG51bV90cmlhbHMgKiA4ICogb2N0ZXRzX2luX2J1ZmZlciAvIHRpbWVyOwogfQogCi12b2lkCi1jaXBoZXJfYXJyYXlfdGVzdF90aHJvdWdocHV0KGNpcGhlcl90ICpjYVtdLCBpbnQgbnVtX2NpcGhlcikgewotICBpbnQgaTsKLSAgaW50IG1pbl9lbmNfbGVuID0gMTY7ICAgICAKLSAgaW50IG1heF9lbmNfbGVuID0gMjA0ODsgICAvKiBzaG91bGQgYmUgYSBwb3dlciBvZiB0d28gKi8KLSAgaW50IG51bV90cmlhbHMgPSAxMDAwMDsKK3ZvaWQgY2lwaGVyX2FycmF5X3Rlc3RfdGhyb3VnaHB1dChzcnRwX2NpcGhlcl90ICpjYVtdLCBpbnQgbnVtX2NpcGhlcikKK3sKKyAgICBpbnQgaTsKKyAgICBpbnQgbWluX2VuY19sZW4gPSAxNjsKKyAgICBpbnQgbWF4X2VuY19sZW4gPSAyMDQ4OyAvKiBzaG91bGQgYmUgYSBwb3dlciBvZiB0d28gKi8KKyAgICBpbnQgbnVtX3RyaWFscyA9IDEwMDAwMDA7CiAKLSAgcHJpbnRmKCJ0aW1pbmcgJXMgdGhyb3VnaHB1dCB3aXRoIGFycmF5IHNpemUgJWQ6XG4iLCAKLQkgKGNhWzBdKS0+dHlwZS0+ZGVzY3JpcHRpb24sIG51bV9jaXBoZXIpOwotICBmZmx1c2goc3Rkb3V0KTsKLSAgZm9yIChpPW1pbl9lbmNfbGVuOyBpIDw9IG1heF9lbmNfbGVuOyBpID0gaSAqIDQpCi0gICAgcHJpbnRmKCJtc2cgbGVuOiAlZFx0Z2lnYWJpdHMgcGVyIHNlY29uZDogJWZcbiIsIGksCi0JICAgY2lwaGVyX2FycmF5X2JpdHNfcGVyX3NlY29uZChjYSwgbnVtX2NpcGhlciwgaSwgbnVtX3RyaWFscykgLyAxZTkpOwotCisgICAgcHJpbnRmKCJ0aW1pbmcgJXMgdGhyb3VnaHB1dCB3aXRoIGtleSBsZW5ndGggJWQsIGFycmF5IHNpemUgJWQ6XG4iLAorICAgICAgICAgICAoY2FbMF0pLT50eXBlLT5kZXNjcmlwdGlvbiwgKGNhWzBdKS0+a2V5X2xlbiwgbnVtX2NpcGhlcik7CisgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgZm9yIChpID0gbWluX2VuY19sZW47IGkgPD0gbWF4X2VuY19sZW47IGkgPSBpICogNCkKKyAgICAgICAgcHJpbnRmKCJtc2cgbGVuOiAlZFx0Z2lnYWJpdHMgcGVyIHNlY29uZDogJWZcbiIsIGksCisgICAgICAgICAgICAgICBjaXBoZXJfYXJyYXlfYml0c19wZXJfc2Vjb25kKGNhLCBudW1fY2lwaGVyLCBpLCBudW1fdHJpYWxzKSAvCisgICAgICAgICAgICAgICAgICAgMWU5KTsKIH0KIAotZXJyX3N0YXR1c190Ci1jaXBoZXJfZHJpdmVyX3Rlc3RfYXJyYXlfdGhyb3VnaHB1dChjaXBoZXJfdHlwZV90ICpjdCwgCi0JCQkJICAgIGludCBrbGVuLCBpbnQgbnVtX2NpcGhlcikgewotICBjaXBoZXJfdCAqKmNhID0gTlVMTDsKLSAgZXJyX3N0YXR1c190IHN0YXR1czsKK3NydHBfZXJyX3N0YXR1c190IGNpcGhlcl9kcml2ZXJfdGVzdF9hcnJheV90aHJvdWdocHV0KHNydHBfY2lwaGVyX3R5cGVfdCAqY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fY2lwaGVyKQoreworICAgIHNydHBfY2lwaGVyX3QgKipjYSA9IE5VTEw7CisgICAgc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdHVzOwogCi0gIHN0YXR1cyA9IGNpcGhlcl9hcnJheV9hbGxvY19pbml0KCZjYSwgbnVtX2NpcGhlciwgY3QsIGtsZW4pOwotICBpZiAoc3RhdHVzKSB7Ci0gICAgcHJpbnRmKCJlcnJvcjogY2lwaGVyX2FycmF5X2FsbG9jX2luaXQoKSBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLAotCSAgIHN0YXR1cyk7Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotICAKLSAgY2lwaGVyX2FycmF5X3Rlc3RfdGhyb3VnaHB1dChjYSwgbnVtX2NpcGhlcik7Ci0gIAotICBjaXBoZXJfYXJyYXlfZGVsZXRlKGNhLCBudW1fY2lwaGVyKTsgICAgCi0gCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOworICAgIHN0YXR1cyA9IGNpcGhlcl9hcnJheV9hbGxvY19pbml0KCZjYSwgbnVtX2NpcGhlciwgY3QsIGtsZW4pOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcHJpbnRmKCJlcnJvcjogY2lwaGVyX2FycmF5X2FsbG9jX2luaXQoKSBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLAorICAgICAgICAgICAgICAgc3RhdHVzKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBjaXBoZXJfYXJyYXlfdGVzdF90aHJvdWdocHV0KGNhLCBudW1fY2lwaGVyKTsKKworICAgIGNpcGhlcl9hcnJheV9kZWxldGUoY2EsIG51bV9jaXBoZXIpOworCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKIH0KZGlmZiAtLWdpdCBhL2NyeXB0by90ZXN0L2RhdGF0eXBlc19kcml2ZXIuYyBiL2NyeXB0by90ZXN0L2RhdGF0eXBlc19kcml2ZXIuYwppbmRleCAxZTMxNWI2Li45NjM3OWJlIDEwMDY0NAotLS0gYS9jcnlwdG8vdGVzdC9kYXRhdHlwZXNfZHJpdmVyLmMKKysrIGIvY3J5cHRvL3Rlc3QvZGF0YXR5cGVzX2RyaXZlci5jCkBAIC04LDI2ICs4LDI2IEBACiAgKi8KIAogLyoKLSAqCQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUsIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxNywgQ2lzY28gU3lzdGVtcywgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAorICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgotICogCisgKgogICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKICAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKICAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCiAgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAorICoKICAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKICAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCkBAIC00MywxMTIgKzQzLDExMSBAQAogICoKICAqLwogCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCiAKLSNpbmNsdWRlIDxzdGRpby5oPiAgICAgICAgICAgIC8qIGZvciBwcmludGYoKSAqLwotI2luY2x1ZGUgPHN0cmluZy5oPiAgICAgICAgICAgLyogZm9yIHN0cmxlbigpICovCisjaW5jbHVkZSA8c3RkaW8uaD4gIC8qIGZvciBwcmludGYoKSAqLworI2luY2x1ZGUgPHN0cmluZy5oPiAvKiBmb3Igc3RybGVuKCkgKi8KICNpbmNsdWRlICJkYXRhdHlwZXMuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCiAKLXZvaWQKLWJ5dGVfb3JkZXIoKTsKK3ZvaWQgYnl0ZV9vcmRlcih2b2lkKTsKIAotdm9pZAotdGVzdF9oZXhfc3RyaW5nX2Z1bmNzKCk7Cit2b2lkIHRlc3RfaGV4X3N0cmluZ19mdW5jcyh2b2lkKTsKIAotdm9pZAotcHJpbnRfc3RyaW5nKG9jdGV0X3QgKnMpOwordm9pZCBwcmludF9zdHJpbmcoY2hhciAqcyk7CiAKLXZvaWQKLXRlc3RfYnN3YXAoKTsKK3ZvaWQgdGVzdF9ic3dhcCh2b2lkKTsKIAotaW50Ci1tYWluICgpIHsKLSAgCi0gIC8qCi0gICAqIHRoaXMgcHJvZ3JhbSBpbmNsdWRlcyB2YXJpb3VzIGFuZCBzdW5kcnkgdGVzdHMgZm9yIGZ1bmRhbWVudGFsCi0gICAqIGRhdGF0eXBlcy4gIGl0J3MgYSBncmFiLWJhZyBvZiB0aHJvd2F3YXkgY29kZSwgcmV0YWluZWQgb25seSBpbgotICAgKiBjYXNlIG9mIGZ1dHVyZSBwcm9ibGVtcwotICAgKi8KK3ZvaWQgdGVzdF9zZXRfdG9femVybyh2b2lkKTsKIAotICBpbnQgaSwgajsKLSAgdjEyOF90IHg7Ci0gIG9jdGV0X3QgKnIgPSAKLSAgICAiVGhlIE1vdmluZyBGaW5nZXIgd3JpdGVzOyBhbmQsIGhhdmluZyB3cml0LFxuIgotICAgICJNb3ZlcyBvbjogbm9yIGFsbCB0aHkgUGlldHkgbm9yIFdpdFxuIgotICAgICJTaGFsbCBsdXJlIGl0IGJhY2sgdG8gY2FuY2VsIGhhbGYgYSBMaW5lLFxuIgotICAgICJOb3IgYWxsIHRoeSBUZWFycyB3YXNoIG91dCBhIFdvcmQgb2YgaXQuIjsKLSAgb2N0ZXRfdCAqcyA9ICJpbmNvbXBsZXQiOyAKLSAKLSAgcHJpbnRfc3RyaW5nKHIpOwotICBwcmludF9zdHJpbmcocyk7Ci0gCi0gIGJ5dGVfb3JkZXIoKTsKLSAgdGVzdF9oZXhfc3RyaW5nX2Z1bmNzKCk7CitpbnQgbWFpbih2b2lkKQoreworICAgIC8qCisgICAgICogdGhpcyBwcm9ncmFtIGluY2x1ZGVzIHZhcmlvdXMgYW5kIHN1bmRyeSB0ZXN0cyBmb3IgZnVuZGFtZW50YWwKKyAgICAgKiBkYXRhdHlwZXMuICBpdCdzIGEgZ3JhYi1iYWcgb2YgdGhyb3dhd2F5IGNvZGUsIHJldGFpbmVkIG9ubHkgaW4KKyAgICAgKiBjYXNlIG9mIGZ1dHVyZSBwcm9ibGVtcworICAgICAqLwogCi0gIGZvciAoaj0wOyBqIDwgMTI4OyBqKyspIHsKKyAgICBpbnQgaSwgajsKKyAgICB2MTI4X3QgeDsKKyAgICBjaGFyICpyID0gIlRoZSBNb3ZpbmcgRmluZ2VyIHdyaXRlczsgYW5kLCBoYXZpbmcgd3JpdCxcbiIKKyAgICAgICAgICAgICAgIk1vdmVzIG9uOiBub3IgYWxsIHRoeSBQaWV0eSBub3IgV2l0XG4iCisgICAgICAgICAgICAgICJTaGFsbCBsdXJlIGl0IGJhY2sgdG8gY2FuY2VsIGhhbGYgYSBMaW5lLFxuIgorICAgICAgICAgICAgICAiTm9yIGFsbCB0aHkgVGVhcnMgd2FzaCBvdXQgYSBXb3JkIG9mIGl0LiI7CisgICAgY2hhciAqcyA9ICJpbmNvbXBsZXQiOworCisgICAgcHJpbnRfc3RyaW5nKHIpOworICAgIHByaW50X3N0cmluZyhzKTsKKworICAgIGJ5dGVfb3JkZXIoKTsKKyAgICB0ZXN0X2hleF9zdHJpbmdfZnVuY3MoKTsKKworICAgIGZvciAoaiA9IDA7IGogPCAxMjg7IGorKykgeworICAgICAgICB2MTI4X3NldF90b196ZXJvKCZ4KTsKKyAgICAgICAgLyogICAgICB4LnYzMlswXSA9ICgxIDw8IGopOyAqLworICAgICAgICB2MTI4X3NldF9iaXQoJngsIGopOworICAgICAgICBwcmludGYoIiVzXG4iLCB2MTI4X2JpdF9zdHJpbmcoJngpKTsKKyAgICAgICAgdjEyOF9jbGVhcl9iaXQoJngsIGopOworICAgICAgICBwcmludGYoIiVzXG4iLCB2MTI4X2JpdF9zdHJpbmcoJngpKTsKKyAgICB9CisKKyAgICBwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogICAgIHYxMjhfc2V0X3RvX3plcm8oJngpOwotICAgIC8qICAgICAgeC52MzJbMF0gPSAoMSA8PCBqKTsgKi8KLSAgICB2MTI4X3NldF9iaXQoJngsIGopOwotICAgIHByaW50ZigiJXNcbiIsIHYxMjhfYml0X3N0cmluZygmeCkpOyAKLSAgICB2MTI4X2NsZWFyX2JpdCgmeCwgaik7Ci0gICAgcHJpbnRmKCIlc1xuIiwgdjEyOF9iaXRfc3RyaW5nKCZ4KSk7IAotICAgIAotICB9CisgICAgZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKSB7CisgICAgICAgIHYxMjhfc2V0X2JpdCgmeCwgaSk7CisgICAgfQorICAgIHByaW50ZigiJXNcbiIsIHYxMjhfYml0X3N0cmluZygmeCkpOwogCi0gIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0gIHYxMjhfc2V0X3RvX3plcm8oJngpOwotICBmb3IgKGk9MDsgaSA8IDEyODsgaSsrKSB7Ci0gICAgdjEyOF9zZXRfYml0KCZ4LCBpKTsKLSAgfQotICBwcmludGYoIiVzXG4iLCB2MTI4X2JpdF9zdHJpbmcoJngpKTsgCi0KLSAgcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLSAgdjEyOF9zZXRfdG9femVybygmeCk7Ci0gIHYxMjhfc2V0X2JpdCgmeCwgMCk7Ci0gIGZvciAoaT0wOyBpIDwgMTI4OyBpKyspIHsKLSAgICAgIHByaW50ZigiJXNcbiIsIHYxMjhfYml0X3N0cmluZygmeCkpOyAKLSAgICB2MTI4X3JpZ2h0X3NoaWZ0KCZ4LCAxKTsKLSAgfQotICBwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICB2MTI4X3NldF90b196ZXJvKCZ4KTsKLSAgdjEyOF9zZXRfYml0KCZ4LCAxMjcpOwotICBmb3IgKGk9MDsgaSA8IDEyODsgaSsrKSB7Ci0gICAgICBwcmludGYoIiVzXG4iLCB2MTI4X2JpdF9zdHJpbmcoJngpKTsgCi0gICAgdjEyOF9sZWZ0X3NoaWZ0KCZ4LCAxKTsKLSAgfQotICBwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICBmb3IgKGk9MDsgaSA8IDEyODsgaSsrKSB7CisgICAgcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKyAgICB2MTI4X3NldF90b196ZXJvKCZ4KTsKKyAgICB2MTI4X3NldF9iaXQoJngsIDApOworICAgIGZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykgeworICAgICAgICBwcmludGYoIiVzXG4iLCB2MTI4X2JpdF9zdHJpbmcoJngpKTsKKyAgICAgICAgdjEyOF9yaWdodF9zaGlmdCgmeCwgMSk7CisgICAgfQorICAgIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAgICAgdjEyOF9zZXRfdG9femVybygmeCk7CiAgICAgdjEyOF9zZXRfYml0KCZ4LCAxMjcpOwotICAgIHYxMjhfbGVmdF9zaGlmdCgmeCwgaSk7Ci0gICAgICBwcmludGYoIiVzXG4iLCB2MTI4X2JpdF9zdHJpbmcoJngpKTsgCi0gIH0KLSAgcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLSAgdjEyOF9zZXRfdG9femVybygmeCk7Ci0gIGZvciAoaT0wOyBpIDwgMTI4OyBpKz0yKSB7Ci0gICAgdjEyOF9zZXRfYml0KCZ4LCBpKTsKLSAgfQotICBwcmludGYoImJpdF9zdHJpbmc6IHsgJXMgfVxuIiwgdjEyOF9iaXRfc3RyaW5nKCZ4KSk7IAotICBwcmludGYoImdldF9iaXQ6ICAgIHsgIik7ICAgCi0gIGZvciAoaT0wOyBpIDwgMTI4OyBpKyspIHsKLSAgICBpZiAodjEyOF9nZXRfYml0KCZ4LCBpKSA9PSAxKQotICAgICAgcHJpbnRmKCIxIik7Ci0gICAgZWxzZQotICAgICAgcHJpbnRmKCIwIik7Ci0gIH0KLSAgcHJpbnRmKCIgfSBcbiIpOworICAgIGZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykgeworICAgICAgICBwcmludGYoIiVzXG4iLCB2MTI4X2JpdF9zdHJpbmcoJngpKTsKKyAgICAgICAgdjEyOF9sZWZ0X3NoaWZ0KCZ4LCAxKTsKKyAgICB9CisgICAgcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspIHsKKyAgICAgICAgdjEyOF9zZXRfdG9femVybygmeCk7CisgICAgICAgIHYxMjhfc2V0X2JpdCgmeCwgMTI3KTsKKyAgICAgICAgdjEyOF9sZWZ0X3NoaWZ0KCZ4LCBpKTsKKyAgICAgICAgcHJpbnRmKCIlc1xuIiwgdjEyOF9iaXRfc3RyaW5nKCZ4KSk7CisgICAgfQorICAgIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisgICAgdjEyOF9zZXRfdG9femVybygmeCk7CisgICAgZm9yIChpID0gMDsgaSA8IDEyODsgaSArPSAyKSB7CisgICAgICAgIHYxMjhfc2V0X2JpdCgmeCwgaSk7CisgICAgfQorICAgIHByaW50ZigiYml0X3N0cmluZzogeyAlcyB9XG4iLCB2MTI4X2JpdF9zdHJpbmcoJngpKTsKKyAgICBwcmludGYoImdldF9iaXQ6ICAgIHsgIik7CisgICAgZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKSB7CisgICAgICAgIGlmICh2MTI4X2dldF9iaXQoJngsIGkpID09IDEpCisgICAgICAgICAgICBwcmludGYoIjEiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJpbnRmKCIwIik7CisgICAgfQorICAgIHByaW50ZigiIH0gXG4iKTsKIAotICB0ZXN0X2Jzd2FwKCk7CisgICAgdGVzdF9ic3dhcCgpOworICAgIHRlc3Rfc2V0X3RvX3plcm8oKTsKIAotICByZXR1cm4gMDsKKyAgICByZXR1cm4gMDsKIH0KIAotCiAvKiBieXRlX29yZGVyKCkgcHJpbnRzIG91dCBieXRlIG9yZGVyaW5nIG9mIGRhdGF0eXBlcyAqLwogCi12b2lkCi1ieXRlX29yZGVyKCkgewotICBpbnQgaTsKLSAgdjEyOF90IGU7Cit2b2lkIGJ5dGVfb3JkZXIodm9pZCkKK3sKKyAgICBpbnQgaTsKKyAgICB2MTI4X3QgZTsKICNpZiAwCiAgIHYxNl90IGI7CiAgIHYzMl90IGM7CkBAIC0xNzUsNjMgKzE3NCw4MyBAQAogCiAgIGMudmFsdWUgPSAweDAwMDEwMDAyOwogICBwcmludGYoInYzMl90Olx0JXgleFxuIiwgYy52MTZbMF0sIGMudjE2WzFdKTsKLSNlbmRpZiAKKyNlbmRpZgogCi0gIHByaW50ZigiYnl0ZSBvcmRlcmluZyBvZiBjcnlwdG8vbWF0aCBkYXRhdHlwZXM6XG4iKTsKLSAgZm9yIChpPTA7IGkgPCBzaXplb2YoZSk7IGkrKykKLSAgICBlLm9jdGV0W2ldID0gaTsKLSAgcHJpbnRmKCJ2MTI4X3Q6ICVzXG4iLCB2MTI4X2hleF9zdHJpbmcoJmUpKTsKLSAgCisgICAgcHJpbnRmKCJieXRlIG9yZGVyaW5nIG9mIGNyeXB0by9tYXRoIGRhdGF0eXBlczpcbiIpOworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YoZSk7IGkrKykKKyAgICAgICAgZS52OFtpXSA9IGk7CisgICAgcHJpbnRmKCJ2MTI4X3Q6ICVzXG4iLCB2MTI4X2hleF9zdHJpbmcoJmUpKTsKIH0KIAotdm9pZAotdGVzdF9oZXhfc3RyaW5nX2Z1bmNzKCkgewotICBvY3RldF90IGhleDFbXSA9ICJhYmFkY2FmZSI7Ci0gIG9jdGV0X3QgaGV4MltdID0gIjAxMjM0NTY3ODlhYmNkZWZxcXFxcSI7Ci0gIG9jdGV0X3QgcmF3WzEwXTsKLSAgaW50IGxlbjsKK3ZvaWQgdGVzdF9oZXhfc3RyaW5nX2Z1bmNzKHZvaWQpCit7CisgICAgY2hhciBoZXgxW10gPSAiYWJhZGNhZmUiOworICAgIGNoYXIgaGV4MltdID0gIjAxMjM0NTY3ODlhYmNkZWZxcXFxcSI7CisgICAgY2hhciByYXdbMTBdOworICAgIGludCBsZW47CiAKLSAgbGVuID0gaGV4X3N0cmluZ190b19vY3RldF9zdHJpbmcocmF3LCBoZXgxLCBzdHJsZW4oaGV4MSkpOwotICBwcmludGYoImNvbXB1dGVkIGxlbmd0aDogJWRcdHN0cmluZzogJXNcbiIsIGxlbiwKLQkgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcocmF3LCBsZW4pKTsKLSAgcHJpbnRmKCJleHBlY3RlZCBsZW5ndGg6ICV1XHRzdHJpbmc6ICVzXG4iLCAodW5zaWduZWQpc3RybGVuKGhleDEpLCBoZXgxKTsKKyAgICBsZW4gPSBoZXhfc3RyaW5nX3RvX29jdGV0X3N0cmluZyhyYXcsIGhleDEsIHN0cmxlbihoZXgxKSk7CisgICAgcHJpbnRmKCJjb21wdXRlZCBsZW5ndGg6ICVkXHRzdHJpbmc6ICVzXG4iLCBsZW4sCisgICAgICAgICAgIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKHJhdywgbGVuIC8gMikpOworICAgIHByaW50ZigiZXhwZWN0ZWQgbGVuZ3RoOiAldVx0c3RyaW5nOiAlc1xuIiwgKHVuc2lnbmVkKXN0cmxlbihoZXgxKSwgaGV4MSk7CiAKLSAgbGVuID0gaGV4X3N0cmluZ190b19vY3RldF9zdHJpbmcocmF3LCBoZXgyLCBzdHJsZW4oaGV4MikpOwotICBwcmludGYoImNvbXB1dGVkIGxlbmd0aDogJWRcdHN0cmluZzogJXNcbiIsIGxlbiwKLQkgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcocmF3LCBsZW4pKTsKLSAgcHJpbnRmKCJleHBlY3RlZCBsZW5ndGg6ICVkXHRzdHJpbmc6ICVzXG4iLCAxNiwgIjAxMjM0NTY3ODlhYmNkZWYiKTsKLQorICAgIGxlbiA9IGhleF9zdHJpbmdfdG9fb2N0ZXRfc3RyaW5nKHJhdywgaGV4Miwgc3RybGVuKGhleDIpKTsKKyAgICBwcmludGYoImNvbXB1dGVkIGxlbmd0aDogJWRcdHN0cmluZzogJXNcbiIsIGxlbiwKKyAgICAgICAgICAgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcocmF3LCBsZW4gLyAyKSk7CisgICAgcHJpbnRmKCJleHBlY3RlZCBsZW5ndGg6ICVkXHRzdHJpbmc6ICVzXG4iLCAxNiwgIjAxMjM0NTY3ODlhYmNkZWYiKTsKIH0KIAotdm9pZAotcHJpbnRfc3RyaW5nKG9jdGV0X3QgKnMpIHsKLSAgaW50IGk7ICAKLSAgcHJpbnRmKCIlc1xuIiwgcyk7Ci0gIHByaW50Zigic3RybGVuKHMpID0gJXVcbiIsICh1bnNpZ25lZClzdHJsZW4ocykpOwotICBwcmludGYoInsgIik7Ci0gIGZvciAoaT0wOyBpIDwgc3RybGVuKHMpOyBpKyspIHsKLSAgICBwcmludGYoIjB4JXgsICIsIHNbaV0pOwotICAgIGlmICgoKGkrMSkgJSA4KSA9PSAwKQotICAgICAgcHJpbnRmKCJcbiAgICIpOwotICB9Ci0gIHByaW50ZigifVxuIik7Cit2b2lkIHByaW50X3N0cmluZyhjaGFyICpzKQoreworICAgIHNpemVfdCBpOworICAgIHByaW50ZigiJXNcbiIsIHMpOworICAgIHByaW50Zigic3RybGVuKHMpID0gJXVcbiIsICh1bnNpZ25lZClzdHJsZW4ocykpOworICAgIHByaW50ZigieyAiKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc3RybGVuKHMpOyBpKyspIHsKKyAgICAgICAgcHJpbnRmKCIweCV4LCAiLCBzW2ldKTsKKyAgICAgICAgaWYgKCgoaSArIDEpICUgOCkgPT0gMCkKKyAgICAgICAgICAgIHByaW50ZigiXG4gICAiKTsKKyAgICB9CisgICAgcHJpbnRmKCJ9XG4iKTsKIH0KIAotdm9pZAotdGVzdF9ic3dhcCgpIHsKLSAgdWludDMyX3QgeCA9IDB4MTEyMjMzNDQ7Ci0gIHVpbnQ2NF90IHkgPSAweDExMjIzMzQ0NTU2Njc3ODhMTDsKK3ZvaWQgdGVzdF9ic3dhcCh2b2lkKQoreworICAgIHVpbnQzMl90IHggPSAweDExMjIzMzQ0OworICAgIHVpbnQ2NF90IHkgPSAweDExMjIzMzQ0NTU2Njc3ODhMTDsKIAotICBwcmludGYoImJlZm9yZTogJTB4XG5hZnRlcjogICUweFxuIiwgeCwgYnN3YXBfMzIoeCkpOwotICBwcmludGYoImJlZm9yZTogJTBsbHhcbmFmdGVyOiAgJTBsbHhcbiIsIHksIGJzd2FwXzY0KHkpKTsKKyAgICBwcmludGYoImJlZm9yZTogJTB4XG5hZnRlcjogICUweFxuIiwgeCwgKHVuc2lnbmVkIGludCliZTMyX3RvX2NwdSh4KSk7CisgICAgcHJpbnRmKCJiZWZvcmU6ICUwbGx4XG5hZnRlcjogICUwbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXksCisgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmU2NF90b19jcHUoeSkpOwogCi0gIHkgPSAxMjM0OworICAgIHkgPSAxMjM0OwogCi0gIHByaW50ZigiMTIzNDogJTBsbHhcbiIsIHkpOwotICBwcmludGYoImFzIG9jdGV0IHN0cmluZzogJXNcbiIsIAotCSBvY3RldF9zdHJpbmdfaGV4X3N0cmluZygob2N0ZXRfdCAqKSAmeSwgOCkpOwotICB5ID0gYnN3YXBfNjQoeSk7Ci0gIHByaW50ZigiYnN3YXBwZWQgb2N0ZXQgc3RyaW5nOiAlc1xuIiwgCi0JIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKChvY3RldF90ICopICZ5LCA4KSk7CisgICAgcHJpbnRmKCIxMjM0OiAlMGxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyl5KTsKKyAgICBwcmludGYoImFzIG9jdGV0IHN0cmluZzogJXNcbiIsIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKCh1aW50OF90ICopJnksIDgpKTsKKyAgICB5ID0gYmU2NF90b19jcHUoeSk7CisgICAgcHJpbnRmKCJic3dhcHBlZCBvY3RldCBzdHJpbmc6ICVzXG4iLAorICAgICAgICAgICBvY3RldF9zdHJpbmdfaGV4X3N0cmluZygodWludDhfdCAqKSZ5LCA4KSk7Cit9CiAKK3ZvaWQgdGVzdF9zZXRfdG9femVybyh2b2lkKQoreworI2RlZmluZSBCVUZGRVJfU0laRSAoMTYpCisgICAgdWludDhfdCBidWZmZXJbQlVGRkVSX1NJWkVdOworICAgIHNpemVfdCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IEJVRkZFUl9TSVpFOyBpKyspIHsKKyAgICAgICAgYnVmZmVyW2ldID0gaSAmIDB4ZmY7CisgICAgfQorICAgIHByaW50ZigiQnVmZmVyIGJlZm9yZTogJXNcbiIsIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKGJ1ZmZlciwgQlVGRkVSX1NJWkUpKTsKKyAgICBvY3RldF9zdHJpbmdfc2V0X3RvX3plcm8oYnVmZmVyLCBCVUZGRVJfU0laRSk7CisgICAgcHJpbnRmKCJCdWZmZXIgYWZ0ZXI6ICVzXG4iLCBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhidWZmZXIsIEJVRkZFUl9TSVpFKSk7CisgICAgZm9yIChpID0gMDsgaSA8IEJVRkZFUl9TSVpFOyBpKyspIHsKKyAgICAgICAgaWYgKGJ1ZmZlcltpXSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICJCdWZmZXIgY29udGVudHMgbm90IHplcm8gYXQgcG9zaXRpb24gJXp1IChpcyAlZClcbiIsIGksCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltpXSk7CisgICAgICAgICAgICBhYm9ydCgpOworICAgICAgICB9CisgICAgfQorI3VuZGVmIEJVRkZFUl9TSVpFCiB9CmRpZmYgLS1naXQgYS9jcnlwdG8vdGVzdC9lbnYuYyBiL2NyeXB0by90ZXN0L2Vudi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjM2Y0ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vdGVzdC9lbnYuYwpAQCAtMCwwICsxLDg5IEBACisvKgorICogZW52LmMKKyAqCisgKiBwcmludHMgb3V0IGEgYnJpZWYgcmVwb3J0IG9uIHRoZSBidWlsZCBlbnZpcm9ubWVudAorICoKKyAqIERhdmlkIE1jR3JldworICogQ2lzY28gU3lzdGVtcywgSW5jLgorICovCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDE3IENpc2NvIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+IC8qIGZvciBzcnRjbXAoKSAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorCitpbnQgbWFpbih2b2lkKQoreworICAgIGludCBlcnJfY291bnQgPSAwOworCisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisgICAgcHJpbnRmKCJDUFUgc2V0IHRvIGJpZy1lbmRpYW5cdFx0XHQoV09SRFNfQklHRU5ESUFOID09IDEpXG4iKTsKKyNlbHNlCisgICAgcHJpbnRmKCJDUFUgc2V0IHRvIGxpdHRsZS1lbmRpYW5cdFx0KFdPUkRTX0JJR0VORElBTiA9PSAwKVxuIik7CisjZW5kaWYKKworI2lmZGVmIENQVV9SSVNDCisgICAgcHJpbnRmKCJDUFUgc2V0IHRvIFJJU0NcdFx0XHRcdChDUFVfUklTQyA9PSAxKVxuIik7CisjZWxpZiBkZWZpbmVkKENQVV9DSVNDKQorICAgIHByaW50ZigiQ1BVIHNldCB0byBDSVNDXHRcdFx0XHQoQ1BVX0NJU0MgPT0gMSlcbiIpOworI2Vsc2UKKyAgICBwcmludGYoCisgICAgICAgICJDUFUgc2V0IHRvIGFuIHVua25vd24gdHlwZSwgcHJvYmFibHkgZHVlIHRvIGEgY29uZmlndXJhdGlvbiBlcnJvclxuIik7CisgICAgZXJyX2NvdW50Kys7CisjZW5kaWYKKworI2lmZGVmIENQVV9BTFRJVkVDCisgICAgcHJpbnRmKCJDUFUgc2V0IHRvIEFMVElWRUNcdFx0XHRcdChDUFVfQUxUSVZFQyA9PSAwKVxuIik7CisjZW5kaWYKKworI2lmbmRlZiBOT182NEJJVF9NQVRICisgICAgcHJpbnRmKCJ1c2luZyBuYXRpdmUgNjQtYml0IHR5cGVcdFx0KE5PXzY0X0JJVF9NQVRIID09IDApXG4iKTsKKyNlbHNlCisgICAgcHJpbnRmKCJ1c2luZyBidWlsdC1pbiA2NC1iaXQgbWF0aFx0XHQoTk9fNjRfQklUX01BVEggPT0gMSlcbiIpOworI2VuZGlmCisKKyNpZmRlZiBFUlJfUkVQT1JUSU5HX1NURE9VVAorICAgIHByaW50ZigidXNpbmcgc3Rkb3V0IGZvciBlcnJvciByZXBvcnRpbmdcdChFUlJfUkVQT1JUSU5HX1NURE9VVCA9PSAxKVxuIik7CisjZW5kaWYKKworICAgIGlmIChlcnJfY291bnQpCisgICAgICAgIHByaW50Zigid2FybmluZzogY29uZmlndXJhdGlvbiBpcyBwcm9iYWJseSBpbiBlcnJvciAiCisgICAgICAgICAgICAgICAiKGZvdW5kICVkIHByb2JsZW1zKVxuIiwKKyAgICAgICAgICAgICAgIGVycl9jb3VudCk7CisKKyAgICByZXR1cm4gZXJyX2NvdW50OworfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3Rlc3Qva2VybmVsX2RyaXZlci5jIGIvY3J5cHRvL3Rlc3Qva2VybmVsX2RyaXZlci5jCmluZGV4IGY3YmQyMDMuLmQyOTQwNWEgMTAwNjQ0Ci0tLSBhL2NyeXB0by90ZXN0L2tlcm5lbF9kcml2ZXIuYworKysgYi9jcnlwdG8vdGVzdC9rZXJuZWxfZHJpdmVyLmMKQEAgLTcsMjYgKzcsMjYgQEAKICAqIENpc2NvIFN5c3RlbXMsIEluYy4KICAqLwogLyoKLSAqCQotICogQ29weXJpZ2h0KGMpIDIwMDEtMjAwNSBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDEtMjAxNyBDaXNjbyBTeXN0ZW1zLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwogICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKICAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCisgKgogICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAogICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKKyAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKQEAgLTQyLDc0ICs0Miw3NiBAQAogICoKICAqLwogCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCiAKLSNpbmNsdWRlIDxzdGRpby5oPiAgICAgICAgICAgLyogZm9yIHByaW50ZigpICovCi0jaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgICAgIC8qIGZvciBnZXRvcHQoKSAqLworI2luY2x1ZGUgPHN0ZGlvLmg+IC8qIGZvciBwcmludGYoKSAqLworI2luY2x1ZGUgImdldG9wdF9zLmgiCiAjaW5jbHVkZSAiY3J5cHRvX2tlcm5lbC5oIgogCi12b2lkCi11c2FnZShjaGFyICpwcm9nX25hbWUpIHsKLSAgcHJpbnRmKCJ1c2FnZTogJXMgWyAtdiBdWyAtZCBkZWJ1Z19tb2R1bGUgXSpcbiIsIHByb2dfbmFtZSk7Ci0gIGV4aXQoMjU1KTsKK3ZvaWQgdXNhZ2UoY2hhciAqcHJvZ19uYW1lKQoreworICAgIHByaW50ZigidXNhZ2U6ICVzIFsgLXYgXVsgLWQgZGVidWdfbW9kdWxlIF0qXG4iLCBwcm9nX25hbWUpOworICAgIGV4aXQoMjU1KTsKIH0KIAotaW50Ci1tYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7Ci0gIGV4dGVybiBjaGFyICpvcHRhcmc7Ci0gIGludCBxOwotICBpbnQgZG9fdmFsaWRhdGlvbiAgICAgID0gMDsKLSAgZXJyX3N0YXR1c190IHN0YXR1czsKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgaW50IHE7CisgICAgaW50IGRvX3ZhbGlkYXRpb24gPSAwOworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKIAotICBpZiAoYXJnYyA9PSAxKQotICAgIHVzYWdlKGFyZ3ZbMF0pOworICAgIGlmIChhcmdjID09IDEpCisgICAgICAgIHVzYWdlKGFyZ3ZbMF0pOwogCi0gIC8qIGluaXRpYWxpemUga2VybmVsIC0gd2UgbmVlZCB0byBkbyB0aGlzIGJlZm9yZSBhbnl0aGluZyBlbHNlICovIAotICBzdGF0dXMgPSBjcnlwdG9fa2VybmVsX2luaXQoKTsKLSAgaWYgKHN0YXR1cykgewotICAgIHByaW50ZigiZXJyb3I6IGNyeXB0b19rZXJuZWwgaW5pdCBmYWlsZWRcbiIpOwotICAgIGV4aXQoMSk7Ci0gIH0KLSAgcHJpbnRmKCJjcnlwdG9fa2VybmVsIHN1Y2Nlc3NmdWxseSBpbml0YWxpemVkXG4iKTsKLQotICAvKiBwcm9jZXNzIGlucHV0IGFyZ3VtZW50cyAqLwotICB3aGlsZSAoMSkgewotICAgIHEgPSBnZXRvcHQoYXJnYywgYXJndiwgInZkOiIpOwotICAgIGlmIChxID09IC0xKSAKLSAgICAgIGJyZWFrOwotICAgIHN3aXRjaCAocSkgewotICAgIGNhc2UgJ3YnOgotICAgICAgZG9fdmFsaWRhdGlvbiA9IDE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICdkJzoKLSAgICAgIHN0YXR1cyA9IGNyeXB0b19rZXJuZWxfc2V0X2RlYnVnX21vZHVsZShvcHRhcmcsIDEpOwotICAgICAgaWYgKHN0YXR1cykgewotCXByaW50ZigiZXJyb3I6IHNldCBkZWJ1ZyBtb2R1bGUgKCVzKSBmYWlsZWRcbiIsIG9wdGFyZyk7Ci0JZXhpdCgxKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICB1c2FnZShhcmd2WzBdKTsKLSAgICB9ICAgIAotICB9Ci0KLSAgaWYgKGRvX3ZhbGlkYXRpb24pIHsKLSAgICBwcmludGYoImNoZWNraW5nIGNyeXB0b19rZXJuZWwgc3RhdHVzLi4uXG4iKTsKLSAgICBzdGF0dXMgPSBjcnlwdG9fa2VybmVsX3N0YXR1cygpOworICAgIC8qIGluaXRpYWxpemUga2VybmVsIC0gd2UgbmVlZCB0byBkbyB0aGlzIGJlZm9yZSBhbnl0aGluZyBlbHNlICovCisgICAgc3RhdHVzID0gc3J0cF9jcnlwdG9fa2VybmVsX2luaXQoKTsKICAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICBwcmludGYoImZhaWxlZFxuIik7Ci0gICAgICBleGl0KDEpOworICAgICAgICBwcmludGYoImVycm9yOiBzcnRwX2NyeXB0b19rZXJuZWwgaW5pdCBmYWlsZWRcbiIpOworICAgICAgICBleGl0KDEpOwogICAgIH0KLSAgICBwcmludGYoImNyeXB0b19rZXJuZWwgcGFzc2VkIHNlbGYtdGVzdHNcbiIpOwotICB9CisgICAgcHJpbnRmKCJzcnRwX2NyeXB0b19rZXJuZWwgc3VjY2Vzc2Z1bGx5IGluaXRhbGl6ZWRcbiIpOwogCi0gIHN0YXR1cyA9IGNyeXB0b19rZXJuZWxfc2h1dGRvd24oKTsKLSAgaWYgKHN0YXR1cykgewotICAgIHByaW50ZigiZXJyb3I6IGNyeXB0b19rZXJuZWwgc2h1dGRvd24gZmFpbGVkXG4iKTsKLSAgICBleGl0KDEpOwotICB9Ci0gIHByaW50ZigiY3J5cHRvX2tlcm5lbCBzdWNjZXNzZnVsbHkgc2h1dCBkb3duXG4iKTsKLSAgCi0gIHJldHVybiAwOworICAgIC8qIHByb2Nlc3MgaW5wdXQgYXJndW1lbnRzICovCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgcSA9IGdldG9wdF9zKGFyZ2MsIGFyZ3YsICJ2ZDoiKTsKKyAgICAgICAgaWYgKHEgPT0gLTEpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3dpdGNoIChxKSB7CisgICAgICAgIGNhc2UgJ3YnOgorICAgICAgICAgICAgZG9fdmFsaWRhdGlvbiA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnZCc6CisgICAgICAgICAgICBzdGF0dXMgPSBzcnRwX2NyeXB0b19rZXJuZWxfc2V0X2RlYnVnX21vZHVsZShvcHRhcmdfcywgMSk7CisgICAgICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJlcnJvcjogc2V0IGRlYnVnIG1vZHVsZSAoJXMpIGZhaWxlZFxuIiwgb3B0YXJnX3MpOworICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHVzYWdlKGFyZ3ZbMF0pOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGRvX3ZhbGlkYXRpb24pIHsKKyAgICAgICAgcHJpbnRmKCJjaGVja2luZyBzcnRwX2NyeXB0b19rZXJuZWwgc3RhdHVzLi4uXG4iKTsKKyAgICAgICAgc3RhdHVzID0gc3J0cF9jcnlwdG9fa2VybmVsX3N0YXR1cygpOworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBwcmludGYoImZhaWxlZFxuIik7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisgICAgICAgIHByaW50Zigic3J0cF9jcnlwdG9fa2VybmVsIHBhc3NlZCBzZWxmLXRlc3RzXG4iKTsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBzcnRwX2NyeXB0b19rZXJuZWxfc2h1dGRvd24oKTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHByaW50ZigiZXJyb3I6IHNydHBfY3J5cHRvX2tlcm5lbCBzaHV0ZG93biBmYWlsZWRcbiIpOworICAgICAgICBleGl0KDEpOworICAgIH0KKyAgICBwcmludGYoInNydHBfY3J5cHRvX2tlcm5lbCBzdWNjZXNzZnVsbHkgc2h1dCBkb3duXG4iKTsKKworICAgIHJldHVybiAwOwogfQogCiAvKgpAQCAtMTE3LDEwICsxMTksOSBAQAogICogb2YgdGhlIGNyeXB0b19rZXJuZWwKICAqLwogCi1lcnJfc3RhdHVzX3QKLWNyeXB0b19rZXJuZWxfY2lwaGVyX3Rlc3QoKSB7CitzcnRwX2Vycl9zdGF0dXNfdCBjcnlwdG9fa2VybmVsX2NpcGhlcl90ZXN0KHZvaWQpCit7CisgICAgLyogbm90IGltcGxlbWVudGVkIHlldCEgKi8KIAotICAvKiBub3QgaW1wbGVtZW50ZWQgeWV0ISAqLwotCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7CiB9CmRpZmYgLS1naXQgYS9jcnlwdG8vdGVzdC9yYW5kX2dlbi5jIGIvY3J5cHRvL3Rlc3QvcmFuZF9nZW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRlNTkwYi4uMDAwMDAwMAotLS0gYS9jcnlwdG8vdGVzdC9yYW5kX2dlbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qCi0gKiByYW5kX2dlbi5jCi0gKgotICogYSByYW5kb20gc291cmNlIChyYW5kb20gbnVtYmVyIGdlbmVyYXRvcikKLSAqCi0gKiBEYXZpZCBBLiBNY0dyZXcKLSAqIENpc2NvIFN5c3RlbXMsIEluYy4KLSAqLwotLyoKLSAqCQotICogQ29weXJpZ2h0KGMpIDIwMDEtMjAwNSBDaXNjbyBTeXN0ZW1zLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIAotICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAKLSAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKLSAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKi8KLQotCi0jaW5jbHVkZSA8c3RkaW8uaD4gICAgICAgICAgIC8qIGZvciBwcmludGYoKSAqLwotI2luY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAgICAvKiBmb3IgZ2V0b3B0KCkgKi8KLSNpbmNsdWRlICJjcnlwdG9fa2VybmVsLmgiCi0KLS8qCi0gKiBNQVhfUFJJTlRfU1RSSU5HX0xFTiBpcyBkZWZpbmVkIGluIGRhdGF0eXBlcy5oLCBhbmQgaXMgdGhlIGxlbmd0aAotICogb2YgdGhlIGxhcmdlc3QgaGV4YWRlY2ltYWwgc3RyaW5nIHRoYXQgY2FuIGJlIGdlbmVyYXRlZCBieSB0aGUKLSAqIGZ1bmN0aW9uIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKCkuCi0gKi8KLQotI2RlZmluZSBCVUZfTEVOIChNQVhfUFJJTlRfU1RSSU5HX0xFTi8yKQotCi12b2lkCi11c2FnZShjaGFyICpwcm9nX25hbWUpIHsKLSAgcHJpbnRmKCJ1c2FnZTogJXMgLW4gPG51bV9ieXRlcz4gWy1sXVsgLWQgZGVidWdfbW9kdWxlIF0qXG4iCi0JICIgICAtbiA8bnVtPiAgIG91dHB1dCA8bnVtPiByYW5kb20gYnl0ZXMsIHdoZXJlIDxudW0+IgotCSAiIGlzIGJldHdlZW4gemVybyBhbmQgJWRcbiIKLQkgIiAgIC1sICAgICAgICAgbGlzdCB0aGUgYXZhbGlhYmxlIGRlYnVnIG1vZHVsZXNcbiIKLQkgIiAgIC1kIDxtb2Q+ICAgdHVybiBvbiBkZWJ1Z2dpbmcgbW9kdWxlIDxtb2Q+XG4iLCAKLQkgcHJvZ19uYW1lLCBCVUZfTEVOKTsKLSAgZXhpdCgyNTUpOwotfQotCi1pbnQKLW1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKLSAgZXh0ZXJuIGNoYXIgKm9wdGFyZzsKLSAgaW50IHE7Ci0gIGludCBudW1fb2N0ZXRzID0gMDsKLSAgdW5zaWduZWQgZG9fbGlzdF9tb2RzID0gMDsKLSAgZXJyX3N0YXR1c190IHN0YXR1czsKLQotICBpZiAoYXJnYyA9PSAxKQotICAgIHVzYWdlKGFyZ3ZbMF0pOwotCi0gIC8qIGluaXRpYWxpemUga2VybmVsIC0gd2UgbmVlZCB0byBkbyB0aGlzIGJlZm9yZSBhbnl0aGluZyBlbHNlICovIAotICBzdGF0dXMgPSBjcnlwdG9fa2VybmVsX2luaXQoKTsKLSAgaWYgKHN0YXR1cykgewotICAgIHByaW50ZigiZXJyb3I6IGNyeXB0b19rZXJuZWwgaW5pdCBmYWlsZWRcbiIpOwotICAgIGV4aXQoMSk7Ci0gIH0KLQotICAvKiBwcm9jZXNzIGlucHV0IGFyZ3VtZW50cyAqLwotICB3aGlsZSAoMSkgewotICAgIHEgPSBnZXRvcHQoYXJnYywgYXJndiwgImxkOm46Iik7Ci0gICAgaWYgKHEgPT0gLTEpIAotICAgICAgYnJlYWs7Ci0gICAgc3dpdGNoIChxKSB7Ci0gICAgY2FzZSAnZCc6Ci0gICAgICBzdGF0dXMgPSBjcnlwdG9fa2VybmVsX3NldF9kZWJ1Z19tb2R1bGUob3B0YXJnLCAxKTsKLSAgICAgIGlmIChzdGF0dXMpIHsKLQlwcmludGYoImVycm9yOiBzZXQgZGVidWcgbW9kdWxlICglcykgZmFpbGVkXG4iLCBvcHRhcmcpOwotCWV4aXQoMSk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlICdsJzoKLSAgICAgIGRvX2xpc3RfbW9kcyA9IDE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICduJzoKLSAgICAgIG51bV9vY3RldHMgPSBhdG9pKG9wdGFyZyk7Ci0gICAgICBpZiAobnVtX29jdGV0cyA8IDAgfHwgbnVtX29jdGV0cyA+IEJVRl9MRU4pCi0JdXNhZ2UoYXJndlswXSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgdXNhZ2UoYXJndlswXSk7Ci0gICAgfSAgICAKLSAgfQotCi0gIGlmIChkb19saXN0X21vZHMpIHsKLSAgICBzdGF0dXMgPSBjcnlwdG9fa2VybmVsX2xpc3RfZGVidWdfbW9kdWxlcygpOwotICAgIGlmIChzdGF0dXMpIHsKLSAgICAgIHByaW50ZigiZXJyb3I6IGxpc3Qgb2YgZGVidWcgbW9kdWxlcyBmYWlsZWRcbiIpOwotICAgICAgZXhpdCgxKTsKLSAgICB9Ci0gIH0KLQotICBpZiAobnVtX29jdGV0cyA+IDApIHsKLSAgICBvY3RldF90IGJ1ZmZlcltCVUZfTEVOXTsKLSAgICAKLSAgICBzdGF0dXMgPSBjcnlwdG9fZ2V0X3JhbmRvbShidWZmZXIsIG51bV9vY3RldHMpOwotICAgIGlmIChzdGF0dXMpIHsKLSAgICAgIHByaW50ZigiZXJyb3I6IGZhaWx1cmUgaW4gcmFuZG9tIHNvdXJjZVxuIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHByaW50ZigiJXNcbiIsIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKGJ1ZmZlciwgbnVtX29jdGV0cykpOwotICAgIH0KLSAgfQotCi0gIHN0YXR1cyA9IGNyeXB0b19rZXJuZWxfc2h1dGRvd24oKTsKLSAgaWYgKHN0YXR1cykgewotICAgIHByaW50ZigiZXJyb3I6IGNyeXB0b19rZXJuZWwgc2h1dGRvd24gZmFpbGVkXG4iKTsKLSAgICBleGl0KDEpOwotICB9Ci0gIAotICByZXR1cm4gMDsKLX0KLQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3Rlc3Qvc2hhMV9kcml2ZXIuYyBiL2NyeXB0by90ZXN0L3NoYTFfZHJpdmVyLmMKaW5kZXggZDliZmE4Yi4uYzY0YjAwMCAxMDA2NDQKLS0tIGEvY3J5cHRvL3Rlc3Qvc2hhMV9kcml2ZXIuYworKysgYi9jcnlwdG8vdGVzdC9zaGExX2RyaXZlci5jCkBAIC04LDI2ICs4LDI2IEBACiAgKi8KIAogLyoKLSAqCQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUsIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxNywgQ2lzY28gU3lzdGVtcywgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAorICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgotICogCisgKgogICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKICAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKICAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCiAgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAorICoKICAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKICAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCkBAIC00Myw1NiArNDMsMzQ1IEBACiAgKgogICovCiAKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSAic2hhMS5oIgorI2luY2x1ZGUgInV0aWwuaCIKIAotaW50Ci1obWFjX3NoYTFfdGVzdCgpOworI2RlZmluZSBTSEFfUEFTUyAwCisjZGVmaW5lIFNIQV9GQUlMIDEKIAotaW50Ci1tYWluICgpIHsKLSAgdWludDMyX3QgaGFzaF92YWx1ZVs1XTsKLSAgb2N0ZXRfdCBtc2dfcmVmWzNdID0geyAweDYxLCAweDYyLCAweDYzIH07Ci0gIG9jdGV0X3QgaGFzaF9yZWZbMjBdID0gewotICAgIDB4YTksIDB4OTksIDB4M2UsIDB4MzYsIDB4NDcsIDB4MDYsIDB4ODEsIDB4NmEsCi0gICAgMHhiYSwgMHgzZSwgMHgyNSwgMHg3MSwgMHg3OCwgMHg1MCwgMHhjMiwgMHg2YywgCi0gICAgMHg5YywgMHhkMCwgMHhkOCwgMHg5ZCAKLSAgfTsKLSAgb2N0ZXRfdCBtc2dfcmVmMls1Nl0gPSB7Ci0gICAgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgCi0gICAgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywKLSAgICAweDY1LCAweDY2LCAweDY3LCAweDY4LCAweDY2LCAweDY3LCAweDY4LCAweDY5LCAKLSAgICAweDY3LCAweDY4LCAweDY5LCAweDZhLCAweDY4LCAweDY5LCAweDZhLCAweDZiLAotICAgIDB4NjksIDB4NmEsIDB4NmIsIDB4NmMsIDB4NmEsIDB4NmIsIDB4NmMsIDB4NmQsCi0gICAgMHg2YiwgMHg2YywgMHg2ZCwgMHg2ZSwgMHg2YywgMHg2ZCwgMHg2ZSwgMHg2ZiwKLSAgICAweDZkLCAweDZlLCAweDZmLCAweDcwLCAweDZlLCAweDZmLCAweDcwLCAweDcxCi0gIH07Ci0gIG9jdGV0X3QgaGFzaF9yZWYyWzIwXSA9IHsKLSAgICAweDg0LCAweDk4LCAweDNlLCAweDQ0LCAweDFjLCAweDNiLCAweGQyLCAweDZlLCAKLSAgICAweGJhLCAweGFlLCAweDRhLCAweGExLCAweGY5LCAweDUxLCAweDI5LCAweGU1LAotICAgIDB4ZTUsIDB4NDYsIDB4NzAsIDB4ZjEKLSAgfTsKLSAgc2hhMV9jdHhfdCBjdHg7CisjZGVmaW5lIE1BWF9IQVNIX0RBVEFfTEVOIDEwMjQKKyNkZWZpbmUgTUFYX0hBU0hfT1VUX0xFTiAyMAogCi0gIHByaW50Zigic2hhMSB0ZXN0IGRyaXZlclxuIgotICAgICAgICAgIkRhdmlkIEEuIE1jR3Jld1xuIgotICAgICAgICAgIkNpc2NvIFN5c3RlbXMsIEluYy5cbiIpOwordHlwZWRlZiBzdHJ1Y3QgaGFzaF90ZXN0X2Nhc2VfdCB7CisgICAgdW5zaWduZWQgZGF0YV9sZW47ICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIG9jdGV0cyBpbiBkYXRhICAgICAgICAqLworICAgIHVuc2lnbmVkIGhhc2hfbGVuOyAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBvY3RldHMgb3V0cHV0IGJ5IGhhc2ggKi8KKyAgICB1aW50OF90IGRhdGFbTUFYX0hBU0hfREFUQV9MRU5dOyAvKiBtZXNzYWdlIGRhdGEgICAgICAgICAgICAgICAgICAgICovCisgICAgdWludDhfdCBoYXNoW01BWF9IQVNIX09VVF9MRU5dOyAgLyogZXhwZWN0ZWQgaGFzaCBvdXRwdXQgICAgICAgICAgICAqLworICAgIHN0cnVjdCBoYXNoX3Rlc3RfY2FzZV90ICpuZXh0X3Rlc3RfY2FzZTsKK30gaGFzaF90ZXN0X2Nhc2VfdDsKIAotICBzaGExX2luaXQoJmN0eCk7Ci0gIHNoYTFfdXBkYXRlKCZjdHgsIG1zZ19yZWYsIDMpOwotICBzaGExX2ZpbmFsKCZjdHgsIGhhc2hfdmFsdWUpOwotICBwcmludGYoInJlZmVyZW5jZSB2YWx1ZTogJXNcbiIsIAotCSBvY3RldF9zdHJpbmdfaGV4X3N0cmluZygob2N0ZXRfdCAqKWhhc2hfcmVmLCAyMCkpOwotICBwcmludGYoImNvbXB1dGVkIHZhbHVlOiAgJXNcbiIsIAotCSBvY3RldF9zdHJpbmdfaGV4X3N0cmluZygob2N0ZXRfdCAqKWhhc2hfdmFsdWUsIDIwKSk7CitoYXNoX3Rlc3RfY2FzZV90ICpzaGExX3Rlc3RfY2FzZV9saXN0OwogCi0gIHNoYTFfaW5pdCgmY3R4KTsKLSAgc2hhMV91cGRhdGUoJmN0eCwgbXNnX3JlZjIsIDU2KTsKLSAgc2hhMV9maW5hbCgmY3R4LCBoYXNoX3ZhbHVlKTsKLSAgcHJpbnRmKCJyZWZlcmVuY2UgdmFsdWU6ICVzXG4iLCAKLQkgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoKG9jdGV0X3QgKiloYXNoX3JlZjIsIDIwKSk7Ci0gIHByaW50ZigiY29tcHV0ZWQgdmFsdWU6ICAlc1xuIiwgCi0JIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKChvY3RldF90ICopaGFzaF92YWx1ZSwgMjApKTsKK3NydHBfZXJyX3N0YXR1c190IGhhc2hfdGVzdF9jYXNlX2FkZChoYXNoX3Rlc3RfY2FzZV90ICoqbGlzdF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZGF0YV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X2hhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaGFzaF9sZW4pCit7CisgICAgaGFzaF90ZXN0X2Nhc2VfdCAqbGlzdF9oZWFkID0gKmxpc3RfcHRyOworICAgIGhhc2hfdGVzdF9jYXNlX3QgKnRlc3RfY2FzZTsKKyAgICB1bnNpZ25lZCB0bXBfbGVuOwogCi0gIHJldHVybiAwOworICAgIHRlc3RfY2FzZSA9IG1hbGxvYyhzaXplb2YoaGFzaF90ZXN0X2Nhc2VfdCkpOworICAgIGlmICh0ZXN0X2Nhc2UgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19hbGxvY19mYWlsOworCisgICAgdG1wX2xlbiA9IGhleF9zdHJpbmdfdG9fb2N0ZXRfc3RyaW5nKChjaGFyICopdGVzdF9jYXNlLT5kYXRhLCBoZXhfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9sZW4gKiAyKTsKKyAgICBpZiAodG1wX2xlbiAhPSBkYXRhX2xlbiAqIDIpIHsKKyAgICAgICAgZnJlZSh0ZXN0X2Nhc2UpOworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX3BhcnNlX2VycjsKKyAgICB9CisKKyAgICB0bXBfbGVuID0gaGV4X3N0cmluZ190b19vY3RldF9zdHJpbmcoKGNoYXIgKil0ZXN0X2Nhc2UtPmhhc2gsIGhleF9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2xlbiAqIDIpOworICAgIGlmICh0bXBfbGVuICE9IGhhc2hfbGVuICogMikgeworICAgICAgICBmcmVlKHRlc3RfY2FzZSk7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfcGFyc2VfZXJyOworICAgIH0KKworICAgIHRlc3RfY2FzZS0+ZGF0YV9sZW4gPSBkYXRhX2xlbjsKKyAgICB0ZXN0X2Nhc2UtPmhhc2hfbGVuID0gaGFzaF9sZW47CisKKyAgICAvKiBhZGQgdGhlIG5ldyB0ZXN0IGNhc2UgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QgKi8KKyAgICB0ZXN0X2Nhc2UtPm5leHRfdGVzdF9jYXNlID0gbGlzdF9oZWFkOworICAgICpsaXN0X3B0ciA9IHRlc3RfY2FzZTsKKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7Cit9CisKK3NydHBfZXJyX3N0YXR1c190IHNoYTFfdGVzdF9jYXNlX3ZhbGlkYXRlKGNvbnN0IGhhc2hfdGVzdF9jYXNlX3QgKnRlc3RfY2FzZSkKK3sKKyAgICBzcnRwX3NoYTFfY3R4X3QgY3R4OworICAgIHVpbnQzMl90IGhhc2hfdmFsdWVbNV07CisKKyAgICBpZiAodGVzdF9jYXNlID09IE5VTEwpCisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYmFkX3BhcmFtOworCisgICAgaWYgKHRlc3RfY2FzZS0+aGFzaF9sZW4gIT0gMjApCisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYmFkX3BhcmFtOworICAgIGlmICh0ZXN0X2Nhc2UtPmRhdGFfbGVuID4gTUFYX0hBU0hfREFUQV9MRU4pCisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYmFkX3BhcmFtOworCisgICAgc3J0cF9zaGExX2luaXQoJmN0eCk7CisgICAgc3J0cF9zaGExX3VwZGF0ZSgmY3R4LCB0ZXN0X2Nhc2UtPmRhdGEsIHRlc3RfY2FzZS0+ZGF0YV9sZW4pOworICAgIHNydHBfc2hhMV9maW5hbCgmY3R4LCBoYXNoX3ZhbHVlKTsKKyAgICBpZiAoMCA9PSBtZW1jbXAodGVzdF9jYXNlLT5oYXNoLCBoYXNoX3ZhbHVlLCAyMCkpIHsKKyNpZiBWRVJCT1NFCisgICAgICAgIHByaW50ZigiUEFTU0VEOiByZWZlcmVuY2UgdmFsdWU6ICVzXG4iLAorICAgICAgICAgICAgICAgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoKGNvbnN0IHVpbnQ4X3QgKil0ZXN0X2Nhc2UtPmhhc2gsIDIwKSk7CisgICAgICAgIHByaW50ZigiUEFTU0VEOiBjb21wdXRlZCB2YWx1ZTogICVzXG4iLAorICAgICAgICAgICAgICAgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoKGNvbnN0IHVpbnQ4X3QgKiloYXNoX3ZhbHVlLCAyMCkpOworI2VuZGlmCisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7CisgICAgfQorCisgICAgcHJpbnRmKCJyZWZlcmVuY2UgdmFsdWU6ICVzXG4iLAorICAgICAgICAgICBvY3RldF9zdHJpbmdfaGV4X3N0cmluZygoY29uc3QgdWludDhfdCAqKXRlc3RfY2FzZS0+aGFzaCwgMjApKTsKKyAgICBwcmludGYoImNvbXB1dGVkIHZhbHVlOiAgJXNcbiIsCisgICAgICAgICAgIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKChjb25zdCB1aW50OF90ICopaGFzaF92YWx1ZSwgMjApKTsKKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYWxnb19mYWlsOworfQorCitzdHJ1Y3QgaGV4X3NoYTFfdGVzdF9jYXNlX3QgeworICAgIHVuc2lnbmVkIGJpdF9sZW47CisgICAgY2hhciBoZXhfZGF0YVtNQVhfSEFTSF9EQVRBX0xFTiAqIDJdOworICAgIGNoYXIgaGV4X2hhc2hbNDBdOworfTsKKworc3J0cF9lcnJfc3RhdHVzX3Qgc2hhMV9hZGRfdGVzdF9jYXNlcyh2b2lkKQoreworICAgIGludCBpOworICAgIHNydHBfZXJyX3N0YXR1c190IGVycjsKKworICAgIC8qCisgICAgICogdGhlc2UgdGVzdCBjYXNlcyBhcmUgdGFrZW4gZnJvbSB0aGUgIlNIQS0xIFNhbXBsZSBWZWN0b3JzIgorICAgICAqIHByb3ZpZGVkIGJ5IE5JU1QgYXQgaHR0cDovL2NzcmMubmlzdC5nb3YvY3J5cHR2YWwvc2hzLmh0bWwKKyAgICAgKi8KKworICAgIHN0cnVjdCBoZXhfc2hhMV90ZXN0X2Nhc2VfdCB0Y1tdID0geworICAgICAgICB7IDAsICIiLCAiZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOSIgfSwKKyAgICAgICAgeyA4LCAiYTgiLCAiOTlmMmFhOTVlMzZmOTVjMmFjYjBlYWYyMzk5OGYwMzA2MzhmM2YxNSIgfSwKKyAgICAgICAgeyAxNiwgIjMwMDAiLCAiZjk0NGRjZDYzNWY5ODAxZjdhYzkwYTQwN2ZiYzQ3OTk2NGRlYzAyNCIgfSwKKyAgICAgICAgeyAyNCwgIjQyNzQ5ZSIsICJhNDQ0MzE5ZTliNmNjMWU4NDY0YzUxMWVjMDk2OWMzN2Q2YmIyNjE5IiB9LAorICAgICAgICB7IDMyLCAiOWZjM2ZlMDgiLCAiMTZhMGZmODRmY2MxNTZmZDVkM2NhM2E3NDRmMjBhMjMyZDE3MjI1MyIgfSwKKyAgICAgICAgeyA0MCwgImI1YzFjNmYxYWYiLCAiZmVjOWRlZWJmY2RlZGFmNjZkZGE1MjVlMWJlNDM1OTdhNzNhMWY5MyIgfSwKKyAgICAgICAgeyA0OCwgImU0NzU3MWU1MDIyZSIsICI4Y2UwNTExODFmMGVkNWU5ZDBjNDk4ZjZiYzRjYWY0NDhkMjBkZWI1IiB9LAorICAgICAgICB7IDU2LCAiM2UxYjI4ODM5ZmI3NTgiLCAiNjdkYTUzODM3ZDg5ZTAzYmY2NTJlZjA5YzM2OWEzNDE1OTM3Y2ZkMyIgfSwKKyAgICAgICAgeyA2NCwgImE4MTM1MGNiYjIyNGNiOTAiLCAiMzA1ZTRmZjk4ODhhZDg1NWE3ODU3M2NkZGY0YzU2NDBjY2U3ZTk0NiIgfSwKKyAgICAgICAgeyA3MiwgImMyNDNkMTY3OTIzZGVjM2NlMSIsCisgICAgICAgICAgIjU5MDJiNzdiMzI2NWYwMjNmOWJiYzM5NmJhMWE5M2ZhMzUwOWJkZTciIH0sCisgICAgICAgIHsgODAsICI1MGFjMThjNTlkNmEzN2EyOWJmNCIsCisgICAgICAgICAgImZjYWRlNWY1ZDE1NmJmNmY5YWY5N2JkZmE5YzE5YmNjZmI0ZmY2YWIiIH0sCisgICAgICAgIHsgODgsICI5OGUyYjYxMWFkM2IxY2NjZjYzNGY2IiwKKyAgICAgICAgICAiMWQyMGZiZTAwNTMzYzEwZTNjYmQ2YjI3MDg4YTVkZTBjNjMyYzRiNSIgfSwKKyAgICAgICAgeyA5NiwgIjczZmU5YWZiNjhlMWU4NzEyZTVkNGVlYyIsCisgICAgICAgICAgIjdlMWI3ZTBmN2E4ZjM0NTVhOWMwM2U5NTgwZmQ2M2FlMjA1YTJkOTMiIH0sCisgICAgICAgIHsgMTA0LCAiOWU3MDFlZDdkNDEyYTkyMjZhMmExMzBlNjYiLAorICAgICAgICAgICI3MDZmMDY3NzE0NjMwN2IyMGJiMGU4ZDYzMTFlMzI5OTY2ODg0ZDEzIiB9LAorICAgICAgICB7IDExMiwgIjZkM2VlOTA0MTNiMGE3Y2JmNjllNWU2MTQ0Y2EiLAorICAgICAgICAgICJhNzI0MWE3MDNhYWYwZDUzZmUxNDJmODZiZjJlODQ5MjUxZmE4ZGZmIiB9LAorICAgICAgICB7IDEyMCwgImZhZTI0ZDU2NTE0ZWZjYjUzMGZkNDgwMmY1ZTcxZiIsCisgICAgICAgICAgIjQwMGY1MzU0NjkxNmQzM2FkMDFhNWU2ZGY2NjgyMmRmYmRjNGU5ZTYiIH0sCisgICAgICAgIHsgMTI4LCAiYzVhMjJkZDZlZGEzZmUyYmRjNGRkYjNjZTZiMzVmZDEiLAorICAgICAgICAgICJmYWM4YWI5M2MxYWU2YzE2ZjAzMTE4NzJiOTg0ZjcyOWRjOTI4Y2NkIiB9LAorICAgICAgICB7IDEzNiwgImQ5OGNkZWQyYWRhYmYwOGZkYTM1NjQ0NWM3ODE4MDJkOTUiLAorICAgICAgICAgICJmYmE2ZDc1MGMxOGRhNThmNmUyYWFiMTAxMTJiOWE1ZWYzMzAxYjNiIiB9LAorICAgICAgICB7IDE0NCwgImJjYzZkNzA4N2E4NGYwMDEwM2NjYjMyZTVmNTQ4N2E3NTFhMiIsCisgICAgICAgICAgIjI5ZDI3YzJkNDRjMjA1YzgxMDdmMDM1MWIwNTc1M2FjNzA4MjI2YjYiIH0sCisgICAgICAgIHsgMTUyLCAiMzZlY2FjYjEwNTU0MzQxOTBkYmJjNTU2YzQ4YmFmY2IwZmViMGQiLAorICAgICAgICAgICJiOTcxYmZjMWViZDZmMzU5ZThkNzRjYjdlY2ZlN2Y4OThkMGJhODQ1IiB9LAorICAgICAgICB7IDE2MCwgIjVmZjllZGI2OWU4ZjZiYmQ0OThlYjQ1Mzc1ODBiN2ZiYTdhZDMxZDAiLAorICAgICAgICAgICI5NmQwOGM0MzAwOTRiOWZjYzE2NGFkMmZiNmY3MmQwYTI0MjY4ZjY4IiB9LAorICAgICAgICB7IDE2OCwgImM5NWI0NDFkODI3MDgyMmE0NmE3OThmYWU1ZGVmY2Y3YjI2YWJhY2UzNiIsCisgICAgICAgICAgImEyODdlYTc1MmE1OTNkNTIwOWUyODc4ODFhMDljNDlmYTNmMGJlYjEiIH0sCisgICAgICAgIHsgMTc2LCAiODMxMDRjMWQ4YTU1YjI4ZjkwNmYxYjcyY2I1M2Y2OGNiYjA5N2I0NGY4NjAiLAorICAgICAgICAgICJhMDZjNzEzNzc5Y2JkODg1MTllZDRhNTg1YWMwY2I4YTVlOWQ2MTJiIiB9LAorICAgICAgICB7IDE4NCwgIjc1NTE3NTUyOGQ1NWMzOWM1NjQ5M2Q2OTdiNzkwZjA5OWE1Y2U3NDFmNzc1NGIiLAorICAgICAgICAgICJiZmY3ZDUyYzEzYTM2ODgxMzJhMWQ0MDdiMWFiNDBmNWI1YWNlMjk4IiB9LAorICAgICAgICB7IDE5MiwgIjA4OGZjMzgxMjhiYmRiOWZkN2Q2NTIyOGIzMTg0YjNmYWFjNmM4NzE1ZjA3MjcyZiIsCisgICAgICAgICAgImM3NTY2YjkxZDdiNmY1NmJkZmNhYTk3ODFhN2I2ODQxYWFjYjE3ZTkiIH0sCisgICAgICAgIHsgMjAwLCAiYTRhNTg2ZWI5MjQ1YTZjODdlM2FkZjEwMDlhYzhhNDlmNDZjMDdlMTQxODUwMTY4OTUiLAorICAgICAgICAgICJmZmEzMGMwYjVjNTUwZWE0YjFlMzRmOGE2MGVjOTI5NWExZTA2YWMxIiB9LAorICAgICAgICB7IDIwOCwgIjhlN2M1NTUyNzBjMDA2MDkyYzJhMzE4OWUyYTUyNmI4NzNlMmUyNjlmMGZiMjgyNDUyNTYiLAorICAgICAgICAgICIyOWU2NmVkMjNlOTE0MzUxZTg3MmFhNzYxZGY2ZTRmMWEwN2Y0YjgxIiB9LAorICAgICAgICB7IDIxNiwgImE1ZjNiZmE2YmIwYmEzYjU5ZjZiOWNiZGVmOGE1NThlYzU2NWU4YWEzMTIxZjQwNWU3ZjJmMCIsCisgICAgICAgICAgImIyOGNmNWU1YjgwNmEwMTQ5MWQ0MWY2OWJkOTI0ODc2NWM1ZGMyOTIiIH0sCisgICAgICAgIHsgMjI0LCAiNTg5MDU0ZjBkMmJkM2MyYzg1YjQ2NmJmZDhjZTE4ZTZlYzNlMGI4N2Q5NDRjZDA5M2JhMzY0NjkiLAorICAgICAgICAgICI2MDIyNGZiNzJjNDYwNjk2NTJjZDc4YmNkMDgwMjllZjY0ZGE2MmYzIiB9LAorICAgICAgICB7IDIzMiwgImEwYWJiMTIwODNiNWJiYzc4MTI4NjAxYmYxY2JkYmMwZmRmNGI4NjJiMjRkODk5OTUzZDhkYTBmZjMiLAorICAgICAgICAgICJiNzJjNGE4NmY3MjYwOGYyNGMwNWYzYjkwODhlZjkyZmJhNDMxZGY3IiB9LAorICAgICAgICB7IDI0MCwgIjgyMTQzZjRjZWE2ZmFkYmY5OThlMTI4YTg4MTFkYzc1MzAxY2YxZGI0ZjA3OTUwMWVhNTY4ZGE2OGVlYiIsCisgICAgICAgICAgIjczNzc5YWQ1ZDZiNzFiOWI4MzI4ZWY3MjIwZmYxMmViMTY3MDc2YWMiIH0sCisgICAgICAgIHsgMjQ4LCAiOWYxMjMxZGQ2ZGYxZmY3YmMwYjBkNGY5ODlkMDQ4NjcyNjgzY2UzNWQ5NTZkMmY1NzkxMzA0NjI2N2U2ZjMiLAorICAgICAgICAgICJhMDk2NzFkNDQ1MmQ3Y2Y1MDAxNWM5MTRhMWUzMTk3M2QyMGNjMWEwIiB9LAorICAgICAgICB7IDI1NiwKKyAgICAgICAgICAiMDQxYzUxMmI1ZWVkNzkxZjgwZDMyODJmM2EyOGRmMjYzYmIxZGY5NWUxMjM5YTc2NTBlNTY3MGZjMjE4NzkxOSIsCisgICAgICAgICAgImU4OGNkY2QyMzNkOTkxODRhNmZkMjYwYjhmY2ExYjdmNzY4N2FlZTAiIH0sCisgICAgICAgIHsgMjY0LAorICAgICAgICAgICIxN2U4MWY2YWU4YzJlNTU3OWQ2OWRhZmE2ZTA3MGU3MTExNDYxNTUyZDMxNGI2OTFlN2EzZTdhNGZlYjNmYWU0MTgiLAorICAgICAgICAgICIwMTBkZWYyMjg1MGRlYjExNjhkNTI1ZThjODRjMjgxMTZjYjhhMjY5IiB9LAorICAgICAgICB7IDI3MiwgImQxNTk3NmIyM2ExZDcxMmFkMjhmYWQwNGQ4MDVmNTcyMDI2YjU0ZGQ2NDk2MWZkYTk0ZDUzNTVhMGNjOTg2MiIKKyAgICAgICAgICAgICAgICIwY2Y3NyIsCisgICAgICAgICAgImFlYWE0MGJhMTcxN2VkNTQzOWIxZTZlYTkwMWIyOTRiYTUwMGY5YWQiIH0sCisgICAgICAgIHsgMjgwLCAiMDlmY2U0ZDQzNGY2YmQzMmE0NGUwNGI4NDhmZjUwZWM5ZjY0MmE4YTg1YjM3YTI2NGRjNzNmMTMwZjIyODM4IgorICAgICAgICAgICAgICAgIjQ0MzMyOGYiLAorICAgICAgICAgICJjNjQzMzc5MTIzODc5NWUzNGYwODBhNWYxZjE3MjNmMDY1NDYzY2EwIiB9LAorICAgICAgICB7IDI4OCwgImYxN2FmMjdkNzc2ZWM4MmEyNTdkOGQ0NmQyYjQ2YjYzOTQ2MmM1Njk4NGNjMWJlOWMxMjIyZWFkYjhiMjY1OSIKKyAgICAgICAgICAgICAgICI0YTI1YzcwOWQiLAorICAgICAgICAgICJlMjFlMjJiODljMWJiOTQ0YTMyOTMyZTZiMmEyZjIwZDQ5MTk4MmMzIiB9LAorICAgICAgICB7IDI5NiwgImIxM2NlNjM1ZDZmODc1ODE0M2ZmYjExNGYyZjYwMWNiMjBiNjI3Njk1MTQxNmEyZjk0ZmJmNGFkMDgxNzc5ZCIKKyAgICAgICAgICAgICAgICI3OWY0ZjE5NWIyMiIsCisgICAgICAgICAgIjU3NTMyM2E5NjYxZjVkMjgzODc5NjRkMmJhNmFiOTJjMTdkMDVhOGEiIH0sCisgICAgICAgIHsgMzA0LCAiNTQ5ODc5M2Y2MDkxNmZmMWM5MThkZGU1NzJjZGVhNzZkYTg2MjliYTRlYWQ2ZDA2NWRlM2RmYjQ4ZGU5NGQyIgorICAgICAgICAgICAgICAgIjM0Y2MxYzUwMDI5MTAiLAorICAgICAgICAgICJmZWI0NDQ5NGFmNzJmMjQ1YmZlNjhlODZjNGQ3OTg2ZDU3YzExZGI3IiB9LAorICAgICAgICB7IDMxMiwgIjQ5OGExZTBiMzlmYTQ5NTgyYWU2ODhjZDcxNWM4NmZiYWY4YTgxYjhiMTFiNGQxNTk0YzQ5YzkwMmQxOTdjOCIKKyAgICAgICAgICAgICAgICJiYThhNjIxZmQ2ZTNiZTUiLAorICAgICAgICAgICJjZmYyMjkwYjM2NDhiYTI4MzFiOThkZGU0MzZhNzJmOWViZjUxZWVlIiB9LAorICAgICAgICB7IDMyMCwgIjNhMzZhZTcxNTIxZjlhZjYyOGIzZTM0ZGNiMGQ0NTEzZjg0Yzc4ZWU0OWYxMDQxNmE5ODg1NzE1MGI4YjE1YyIKKyAgICAgICAgICAgICAgICJiNWM4M2FmYjRiNTcwMzc2ZSIsCisgICAgICAgICAgIjliNGVmZTlkMjdiOTY1OTA1YjBjM2RhYjY3YjhkN2M5ZWJhY2Q1NmMiIH0sCisgICAgICAgIHsgMzI4LCAiZGNjNzZiNDBhZTBlYTNiYTI1M2U5MmFjNTBmY2RlNzkxNjYyYzViNmM5NDg1MzhjZmZjMmQ5NWU5ZGU5OWNhIgorICAgICAgICAgICAgICAgImMzNGRmY2EzODkxMGRiMjY3OGYiLAorICAgICAgICAgICJhZmVkYjBmZjE1NjIwNWJjZDgzMWNiZGJkYTQzZGI4YjA1ODhjMTEzIiB9LAorICAgICAgICB7IDMzNiwgIjViNWVjNmVjNGZkM2FkOWM0OTA2ZjY1Yzc0N2ZkNDIzM2MxMWExNzM2YjZiMjI4YjkyZTkwY2RkYWJiMGM3YyIKKyAgICAgICAgICAgICAgICIyZmNmOTcxNmQzZmFkMjYxZGZmMzMiLAorICAgICAgICAgICI4ZGViMWU4NThmODgyOTNhNWU1ZTRkNTIxYTM0YjJhNGVmYTcwZmM0IiB9LAorICAgICAgICB7IDM0NCwgImRmNDhhMzdiMjliMWQ2ZGU0ZTk0NzE3ZDYwY2RiNDI5M2ZjZjE3MGJiYTM4OGJkZGY3YTkwMzVhMTVkNDMzZiIKKyAgICAgICAgICAgICAgICIyMGZkNjk3YzNlNGM4YjhjNWY1OTBhYiIsCisgICAgICAgICAgIjk1Y2JkYWMwZjc0YWZhNjljZWJkMGU1YzdkZWZiYzZmYWYwY2JlYWYiIH0sCisgICAgICAgIHsgMzUyLCAiMWYxNzliM2I4MjI1MGE2NWUxYjBhZWU5NDllMjE4ZTJmNDVjN2E4ZGJmZDZiYTA4ZGUwNWM1NWFjZmMyMjZiIgorICAgICAgICAgICAgICAgIjQ4YzY4ZDdmNzA1N2U1Njc1Y2Q5NmZjZmMiLAorICAgICAgICAgICJmMDMwN2JjYjkyODQyZTVhZTBjZDRmNGYxNGYzZGY3Zjg3N2ZiZWYyIiB9LAorICAgICAgICB7IDM2MCwgImVlM2Q3MmRhM2E0NGQ5NzE1Nzg5NzJhOGU2NzgwY2U2NDk0MTI2N2UwZjdkMDE3OWIyMTRmYTk3ODU1ZTE3OSIKKyAgICAgICAgICAgICAgICIwZTg4OGUwOWZiZTNhNzA0MTIxNzZjYjNiNTQiLAorICAgICAgICAgICI3YjEzYmIwZGJmMTQ5NjRiZDYzYjEzM2FjODVlMjIxMDA1NDJlZjU1IiB9LAorICAgICAgICB7IDM2OCwgImQ0ZDRjNzg0M2QzMTJiMzBmNjEwYjM2ODIyNTRjOGJlOTZkNWY2Njg0NTAzZjhmYmZiY2QxNTc3NGZjMWIwOCIKKyAgICAgICAgICAgICAgICI0ZDM3NDFhZmI4ZDI0YWFhOGFiOWMxMDRmNzI1OCIsCisgICAgICAgICAgImMzMTRkMmI2Y2Y0MzliZTY3OGQyYTc0ZTg5MGQ5NmNmYWMxYzAyZWQiIH0sCisgICAgICAgIHsgMzc2LCAiMzJjMDk0OTQ0ZjU5MzZhMTkwYTA4NzdmYjkxNzhhN2JmNjBjZWFlMzZmZDUzMDY3MWM1YjM4YzVkYmQ1ZTZhIgorICAgICAgICAgICAgICAgIjZjMGQ2MTVjMmFjOGFkMDRiMjEzY2M1ODk1NDFjZjYiLAorICAgICAgICAgICI0ZDBiZTM2MWU0MTBiNDdhOWQ2N2Q4Y2UwYmI2YThlMDFjNTNjMDc4IiB9LAorICAgICAgICB7IDM4NCwgImU1ZDMxODBjMTRiZjI3YTU0MDlmYTEyYjEwNGE4ZmQ3ZTk2Mzk2MDliZmRlNmVlODJiYmY5NjQ4YmUyNTQ2ZCIKKyAgICAgICAgICAgICAgICIyOTY4OGE2NWUyZTNmM2RhNDdhNDVhYzE0MzQzYzljMDIiLAorICAgICAgICAgICJlNTM1MzQzMWZmYWUwOTdmNjc1Y2JmNDk4ODY5ZjZmYmI2ZTFjOWYyIiB9LAorICAgICAgICB7IDM5MiwgImU3YjZlNGI2OWY3MjQzMjdlNDFlMTE4OGEzN2Y0ZmUzOGIxZGJhMTljYmY1YTczMTFkNmUzMmYxMDM4ZTk3YSIKKyAgICAgICAgICAgICAgICJiNTA2ZWUwNWFlYmViYzFlZWQwOWZjMGUzNTcxMDk4MThiOSIsCisgICAgICAgICAgImI4NzIwYTcwNjhhMDg1YzAxOGFiMTg5NjFkZTI3NjVhYTZjZDlhYzQiIH0sCisgICAgICAgIHsgNDAwLCAiYmM4ODBjYjgzYjhhYzY4ZWYyZmVkYzJkYTk1ZTc2NzdjZTJhYTE4YjBlMmQ4YjMyMjcwMWY2N2FmN2Q1ZTdhIgorICAgICAgICAgICAgICAgIjBkOTZlOWUzMzMyNmNjYjc3NDdjZmZmMDg1MmI5NjFiZmQ0NzUiLAorICAgICAgICAgICJiMDczMjE4MTU2ODU0M2JhODVmMmI2ZGE2MDJiNGIwNjVkOTkzMWFhIiB9LAorICAgICAgICB7IDQwOCwgIjIzNWVhOWMyYmE3YWYyNTQwMGYyZTk4YTQ3YTI5MWIwYmNjZGFhZDYzZmFhMjQ3NTcyMWZkYTU1MTBjYzdkYSIKKyAgICAgICAgICAgICAgICJkODE0YmNlOGRhYmI2MTE3OTBhNmFiZTU2MDMwYjc5OGI3NWM5NDQiLAorICAgICAgICAgICI5YzIyNjc0Y2YzMjIyYzNiYTkyMTY3MjY5NGFhZmVlNGNlNjdiOTZiIiB9LAorICAgICAgICB7IDQxNiwgIjA3ZTNlMjlmZWQ2MzEwNGI4NDEwZjMyM2I5NzVmZDlmYmE1M2Y2MzZhZjhjNGU2OGE1M2ZiMjAyY2EzNWRkOSIKKyAgICAgICAgICAgICAgICJlZTA3Y2IxNjllYzUxODYyOTJlNDRjMjdlNTY5NmE5NjdmNWU2NzcwOSIsCisgICAgICAgICAgImQxMjgzMzVmNGNlY2NhOTA2NmNkYWUwODk1OGNlNjU2ZmYwYjRjZmMiIH0sCisgICAgICAgIHsgNDI0LCAiNjVkMmExZGQ2MGE1MTdlYjI3YmZiZjUzMGNmNmE1NDU4ZjlkNWY0NzMwMDU4YmQ5ODE0Mzc5NTQ3ZjM0MjQxIgorICAgICAgICAgICAgICAgIjgyMmJmNjdlNjMzNWE2ZDhiNWVkMDZhYmY4ODQxODg0YzYzNmEyNTczM2YiLAorICAgICAgICAgICIwYjY3YzU3YWM1NzhkZTg4YTJhZTA1NWNhZWFlYzhiYjliMDA4NWEwIiB9LAorICAgICAgICB7IDQzMiwgImRjYzg2YjNiZDQ2MTYxNWJhYjczOWQ4ZGFhZmFjMjMxYzBmNDYyZTgxOWFkMjlmOWYxNDA1OGYzYWI1Yjc1OSIKKyAgICAgICAgICAgICAgICI0MWQ0MjQxZWEyZjE3ZWJiOGE0NTg4MzFiMzdhOWIxNmRlYWQ0YTc2YTliMGUiLAorICAgICAgICAgICJjNzY2ZjkxMmE4OWQ0Y2NkYTg4ZTBjY2U2YTcxM2VmNWYxNzhiNTk2IiB9LAorICAgICAgICB7IDQ0MCwgIjQ2MjdkNTRmMDU2OGRjMTI2YjYyYThjMzVmYjQ2YTlhYzUwMjQ0MDBmMjk5NWU1MTYzNTYzNmUxYWZjNDM3MyIKKyAgICAgICAgICAgICAgICJkYmI4NDhlYjMyZGYyMzkxNDIzMDU2MGI4MjQ3N2U5YzM1NzI2NDdhN2YyYmI5MiIsCisgICAgICAgICAgIjlhYTM5MjVhOWRjYjE3N2IxNWNjZmY5Yjc4ZTcwY2YzNDQ4NTg3NzkiIH0sCisgICAgICAgIHsgNDQ4LCAiYmE1MzFhZmZkNDM4MTE2OGVmMjRkOGIyNzVhODRkOTI1NGM3ZjVjYzU1ZmRlZDUzYWE4MDI0YjJjNWM1YzhhIgorICAgICAgICAgICAgICAgImE3MTQ2ZmUxZDFiODNkNjJiNzA0NjdlOWEyZTJjYjY3YjMzNjE4MzBhZGJhYjI4ZDciLAorICAgICAgICAgICI0ODExZmEzMDA0MmZjMDc2YWNmMzdjOGUyMjc0ZDAyNTMwN2U1OTQzIiB9LAorICAgICAgICB7IDQ1NiwgIjg3NjRkY2JjZjg5ZGNmNDI4MmViNjQ0ZTNkNTY4YmRjY2I0YjEzNTA4YmZhN2JmZTBmZmMwNWVmZDEzOTBiZSIKKyAgICAgICAgICAgICAgICIyMjEwOTk2OTI2Mjk5MmQzNzc2OTFlYjRmNzdmM2Q1OWVhODQ2NmE3NGFiZjU3YjJlZjQiLAorICAgICAgICAgICI2NzQzMDE4NDUwYzk3MzA3NjFlZTJiMTMwZGY5YjkxYzFlMTE4MTUwIiB9LAorICAgICAgICB7IDQ2NCwgIjQ5N2Q5ZGY5ZGRiNTU0ZjNkMTc4NzBiMWEzMTk4NmMxYmUyNzdiYzQ0ZmVmZjcxMzU0NDIxN2E5ZjU3OTYyMyIKKyAgICAgICAgICAgICAgICJkMThiNWZmYWUzMDZjMjVhNDU1MjFkMjc1OWE3MmMwNDU5YjU4OTU3MjU1YWI1OTJmM2JlNCIsCisgICAgICAgICAgIjcxYWQ0YTE5ZDM3ZDkyYTVlNmVmMzY5NGRkYmViNWFhNjFhZGE2NDUiIH0sCisgICAgICAgIHsgNDcyLCAiNzJjM2MyZTA2NWFlZmE4ZDlmN2E2NTIyOWU4MTgxNzZlZWYwNWRhODNmODM1MTA3YmE5MGVjMmU5NTQ3MmU3IgorICAgICAgICAgICAgICAgIjNlNTM4Zjc4M2I0MTZjMDQ2NTRiYTg5MDlmMjZhMTJkYjZlNWM0ZTM3NmI3NjE1ZTRhMjU4MTkiLAorICAgICAgICAgICJhN2Q5ZGM2OGRhY2VmYjdkNjExNjE4NjA0OGNiMzU1Y2M1NDhlMTFkIiB9LAorICAgICAgICB7IDQ4MCwgIjdjYzk4OTQ0NTRkMDA1NWFiNTA2OWEzMzk4NGUyZjcxMmJlZjdlMzEyNDk2MGQzMzU1OWY1ZjNiODE5MDZiYiIKKyAgICAgICAgICAgICAgICI2NmZlNjRkYTEzYzE1M2NhN2Y1Y2FiYzg5NjY3MzE0YzMyYzAxMDM2ZDEyZWNhZjVmOWE3OGRlOTgiLAorICAgICAgICAgICIxNDJlNDI5ZjA1MjJiYTVhYmY1MTMxZmE4MWRmODJkMzU1Yjk2OTA5IiB9LAorICAgICAgICB7IDQ4OCwgIjc0ZTg0MDRkNWE0NTNjNWY0ZDMwNmYyY2ZhMzM4Y2E2NTUwMWM4NDBkZGFiM2ZiODIxMTc5MzM0ODNhZmQ2OSIKKyAgICAgICAgICAgICAgICIxM2M1NmFhZjhhMGEwYTZiMmEzNDJmYzNkOWRjNzU5OWY0YTg1MGRmYTE1ZDA2YzYxOTY2ZDc0ZWE1OSIsCisgICAgICAgICAgImVmNzJkYjcwZGNiY2FiOTkxZTk2Mzc5NzZjNmZhZjAwZDIyY2FhZTkiIH0sCisgICAgICAgIHsgNDk2LCAiNDZmZTVlZDMyNmM4ZmUzNzZmY2M5MmRjOWUyNzE0ZTIyNDBkMzI1M2IxMDVhZGZiYjI1NmZmN2ExOWJjNDA5IgorICAgICAgICAgICAgICAgIjc1YzYwNGFkN2MwMDcxYzRmZDc4YTdjYjY0Nzg2ZTFiZWNlNTQ4ZmE0ODMzYzA0MDY1ZmU1OTNmNmZiMTAiLAorICAgICAgICAgICJmMjIwYTc0NTdmNDU4OGQ2MzlkYzIxNDA3Yzk0MmU5ODQzZjhlMjZiIiB9LAorICAgICAgICB7IDUwNCwgIjgzNmRmYTI1MjRkNjIxY2YwN2MzZDI5MDg4MzVkZTg1OWU1NDlkMzUwMzA0MzNjNzk2YjgxMjcyZmQ4YmMwMyIKKyAgICAgICAgICAgICAgICI0OGU4ZGRiYzc3MDVhNWFkMWZkZjIxNTViNmJjNDg4ODRhYzBjZDM3NjkyNWYwNjlhMzc4NDljMDg5Yzg2NCIKKyAgICAgICAgICAgICAgICI1IiwKKyAgICAgICAgICAiZGRkMjExN2I2ZTMwOWMyMzNlZGU4NWY5NjJhMGMyZmMyMTVlNWM2OSIgfSwKKyAgICAgICAgeyA1MTIsICI3ZTNhNGMzMjVjYjljNTJiODgzODdmOTNkMDFhZTg2ZDQyMDk4ZjVlZmE3Zjk0NTczODhiNWU3NGI2ZDI4YjIiCisgICAgICAgICAgICAgICAiNDM4ZDQyZDhiNjQ3MDMzMjRkNGFhMjVhYjZhYWQxNTNhZTMwY2QyYjJhZjRkNWU1YzAwYThhMmQwMjIwYzYxIgorICAgICAgICAgICAgICAgIjE2IiwKKyAgICAgICAgICAiYTMwNTQ0MjdjZGIxM2YxNjRhNjEwYjM0ODcwMjcyNGM4MDhhMGRjYyIgfQorICAgIH07CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgNjU7IGkrKykgeworICAgICAgICBlcnIgPSBoYXNoX3Rlc3RfY2FzZV9hZGQoJnNoYTFfdGVzdF9jYXNlX2xpc3QsIHRjW2ldLmhleF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNbaV0uYml0X2xlbiAvIDgsIHRjW2ldLmhleF9oYXNoLCAyMCk7CisgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgIHByaW50ZigiZXJyb3IgYWRkaW5nIGhhc2ggdGVzdCBjYXNlIChjb2RlICVkKVxuIiwgZXJyKTsKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOworfQorCitzcnRwX2Vycl9zdGF0dXNfdCBzaGExX2RlYWxsb2NfdGVzdF9jYXNlcyh2b2lkKQoreworICAgIGhhc2hfdGVzdF9jYXNlX3QgKnQsICpuZXh0OworCisgICAgZm9yICh0ID0gc2hhMV90ZXN0X2Nhc2VfbGlzdDsgdCAhPSBOVUxMOyB0ID0gbmV4dCkgeworICAgICAgICBuZXh0ID0gdC0+bmV4dF90ZXN0X2Nhc2U7CisgICAgICAgIGZyZWUodCk7CisgICAgfQorCisgICAgc2hhMV90ZXN0X2Nhc2VfbGlzdCA9IE5VTEw7CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOworfQorCitzcnRwX2Vycl9zdGF0dXNfdCBzaGExX3ZhbGlkYXRlKHZvaWQpCit7CisgICAgaGFzaF90ZXN0X2Nhc2VfdCAqdGVzdF9jYXNlOworICAgIHNydHBfZXJyX3N0YXR1c190IGVycjsKKworICAgIGVyciA9IHNoYTFfYWRkX3Rlc3RfY2FzZXMoKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIHByaW50ZigiZXJyb3IgYWRkaW5nIFNIQTEgdGVzdCBjYXNlcyAoZXJyb3IgY29kZSAlZClcbiIsIGVycik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgaWYgKHNoYTFfdGVzdF9jYXNlX2xpc3QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19jYW50X2NoZWNrOworCisgICAgdGVzdF9jYXNlID0gc2hhMV90ZXN0X2Nhc2VfbGlzdDsKKyAgICB3aGlsZSAodGVzdF9jYXNlICE9IE5VTEwpIHsKKyAgICAgICAgZXJyID0gc2hhMV90ZXN0X2Nhc2VfdmFsaWRhdGUodGVzdF9jYXNlKTsKKyAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgcHJpbnRmKCJlcnJvciB2YWxpZGF0aW5nIGhhc2ggdGVzdCBjYXNlIChlcnJvciBjb2RlICVkKVxuIiwgZXJyKTsKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIH0KKyAgICAgICAgdGVzdF9jYXNlID0gdGVzdF9jYXNlLT5uZXh0X3Rlc3RfY2FzZTsKKyAgICB9CisKKyAgICBzaGExX2RlYWxsb2NfdGVzdF9jYXNlcygpOworCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKworaW50IG1haW4odm9pZCkKK3sKKyAgICBzcnRwX2Vycl9zdGF0dXNfdCBlcnI7CisKKyAgICBwcmludGYoInNoYTEgdGVzdCBkcml2ZXJcbiIpOworCisgICAgZXJyID0gc2hhMV92YWxpZGF0ZSgpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgcHJpbnRmKCJTSEExIGRpZCBub3QgcGFzcyB2YWxpZGF0aW9uIHRlc3RpbmdcbiIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgcHJpbnRmKCJTSEExIHBhc3NlZCB2YWxpZGF0aW9uIHRlc3RzXG4iKTsKKworICAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3Rlc3Qvc3RhdF9kcml2ZXIuYyBiL2NyeXB0by90ZXN0L3N0YXRfZHJpdmVyLmMKaW5kZXggYjFmZGJmNC4uOWEzZDkxOCAxMDA2NDQKLS0tIGEvY3J5cHRvL3Rlc3Qvc3RhdF9kcml2ZXIuYworKysgYi9jcnlwdG8vdGVzdC9zdGF0X2RyaXZlci5jCkBAIC03LDk1ICs3LDI0NiBAQAogICogQ2lzY28gU3lzdGVtcywgSW5jLgogICovCiAKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMTcsIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KIAotI2luY2x1ZGUgPHN0ZGlvLmg+ICAgICAgICAgLyogZm9yIHByaW50ZigpICovCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPiAvKiBmb3IgcHJpbnRmKCkgKi8KIAogI2luY2x1ZGUgImVyci5oIgogI2luY2x1ZGUgInN0YXQuaCIKKyNpbmNsdWRlICJzcnRwLmgiCiAKICNpbmNsdWRlICJjaXBoZXIuaCIKKyNpbmNsdWRlICJjaXBoZXJfcHJpdi5oIgogCi10eXBlZGVmIHN0cnVjdCB7Ci0gIHZvaWQgKnN0YXRlOwotfSByYW5kb21fc291cmNlX3Q7Ci0KLWVycl9zdGF0dXNfdAotcmFuZG9tX3NvdXJjZV9hbGxvYygpOwotCi12b2lkCi1lcnJfY2hlY2soZXJyX3N0YXR1c190IHMpIHsKLSAgaWYgKHMpIHsKLSAgICBwcmludGYoImVycm9yIChjb2RlICVkKVxuIiwgcyk7Ci0gICAgZXhpdCgxKTsKLSAgfQordm9pZCBlcnJfY2hlY2soc3J0cF9lcnJfc3RhdHVzX3QgcykKK3sKKyAgICBpZiAocykgeworICAgICAgICBwcmludGYoImVycm9yIChjb2RlICVkKVxuIiwgcyk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQogfQogCi1pbnQKLW1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKLSAgb2N0ZXRfdCBidWZmZXJbMjUwMF07Ci0gIHVuc2lnbmVkIGludCBidWZfbGVuID0gMjUwMDsKLSAgaW50IGksIGo7Ci0gIGV4dGVybiBjaXBoZXJfdHlwZV90IGFlc19pY207Ci0gIGNpcGhlcl90ICpjOwotICBvY3RldF90IGtleVszMF0gPSB7Ci0gICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgCi0gICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgCi0gICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgCi0gICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICB1aW50OF90IGJ1ZmZlclsyNTMyXTsKKyAgICB1bnNpZ25lZCBpbnQgYnVmX2xlbiA9IDI1MDA7CisgICAgaW50IGksIGo7CisgICAgZXh0ZXJuIHNydHBfY2lwaGVyX3R5cGVfdCBzcnRwX2Flc19pY21fMTI4OworICAgIGV4dGVybiBzcnRwX2NpcGhlcl90eXBlX3Qgc3J0cF9hZXNfaWNtXzI1NjsKKyNpZmRlZiBHQ00KKyAgICBleHRlcm4gc3J0cF9jaXBoZXJfdHlwZV90IHNydHBfYWVzX2djbV8xMjg7CisgICAgZXh0ZXJuIHNydHBfY2lwaGVyX3R5cGVfdCBzcnRwX2Flc19nY21fMjU2OworI2VuZGlmCisgICAgc3J0cF9jaXBoZXJfdCAqYzsKKyAgICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisgICAgdWludDhfdCBrZXlbNDZdID0geworICAgICAgICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAgICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAgICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAgICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAgICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAgICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1CiAgICAgfTsKLSAgdjEyOF90IG5vbmNlOwotICBpbnQgbnVtX3RyaWFscyA9IDUwMDsKLSAgaW50IG51bV9mYWlsOworICAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLworICAgIHYxMjhfdCBub25jZTsKKyAgICBpbnQgbnVtX3RyaWFscyA9IDUwMDsKKyAgICBpbnQgbnVtX2ZhaWw7CiAKLSAgcHJpbnRmKCJzdGF0aXN0aWNhbCB0ZXN0cyBkcml2ZXJcbiIpOworICAgIHByaW50Zigic3RhdGlzdGljYWwgdGVzdHMgZHJpdmVyXG4iKTsKIAotICBmb3IgKGk9MDsgaSA8IDI1MDA7IGkrKykKLSAgICBidWZmZXJbaV0gPSAwOworICAgIHYxMjhfc2V0X3RvX3plcm8oJm5vbmNlKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgMjUwMDsgaSsrKQorICAgICAgICBidWZmZXJbaV0gPSAwOwogCi0gIC8qIHJ1biB0ZXN0cyAqLwotICBwcmludGYoInJ1bm5pbmcgc3RhdF90ZXN0cyBvbiBhbGwtbnVsbCBidWZmZXIsIGV4cGVjdGluZyBmYWlsdXJlXG4iKTsKLSAgcHJpbnRmKCJtb25vYml0ICVkXG4iLCBzdGF0X3Rlc3RfbW9ub2JpdChidWZmZXIpKTsKLSAgcHJpbnRmKCJwb2tlciAgICVkXG4iLCBzdGF0X3Rlc3RfcG9rZXIoYnVmZmVyKSk7Ci0gIHByaW50ZigicnVucyAgICAlZFxuIiwgc3RhdF90ZXN0X3J1bnMoYnVmZmVyKSk7CisgICAgLyogcnVuIHRlc3RzICovCisgICAgcHJpbnRmKCJydW5uaW5nIHN0YXRfdGVzdHMgb24gYWxsLW51bGwgYnVmZmVyLCBleHBlY3RpbmcgZmFpbHVyZVxuIik7CisgICAgcHJpbnRmKCJtb25vYml0ICVkXG4iLCBzdGF0X3Rlc3RfbW9ub2JpdChidWZmZXIpKTsKKyAgICBwcmludGYoInBva2VyICAgJWRcbiIsIHN0YXRfdGVzdF9wb2tlcihidWZmZXIpKTsKKyAgICBwcmludGYoInJ1bnMgICAgJWRcbiIsIHN0YXRfdGVzdF9ydW5zKGJ1ZmZlcikpOwogCi0gIGZvciAoaT0wOyBpIDwgMjUwMDsgaSsrKQotICAgIGJ1ZmZlcltpXSA9IHJhbmRvbSgpOwotICBwcmludGYoInJ1bm5pbmcgc3RhdF90ZXN0cyBvbiByYW5kb20oKSwgZXhwZWN0aW5nIHN1Y2Nlc3NcbiIpOwotICBwcmludGYoIm1vbm9iaXQgJWRcbiIsIHN0YXRfdGVzdF9tb25vYml0KGJ1ZmZlcikpOwotICBwcmludGYoInBva2VyICAgJWRcbiIsIHN0YXRfdGVzdF9wb2tlcihidWZmZXIpKTsKLSAgcHJpbnRmKCJydW5zICAgICVkXG4iLCBzdGF0X3Rlc3RfcnVucyhidWZmZXIpKTsKKyAgICBzcnRwX2NpcGhlcl9yYW5kX2Zvcl90ZXN0cyhidWZmZXIsIDI1MDApOworICAgIHByaW50ZigicnVubmluZyBzdGF0X3Rlc3RzIG9uIHJhbmQoKSwgZXhwZWN0aW5nIHN1Y2Nlc3NcbiIpOworICAgIHByaW50ZigibW9ub2JpdCAlZFxuIiwgc3RhdF90ZXN0X21vbm9iaXQoYnVmZmVyKSk7CisgICAgcHJpbnRmKCJwb2tlciAgICVkXG4iLCBzdGF0X3Rlc3RfcG9rZXIoYnVmZmVyKSk7CisgICAgcHJpbnRmKCJydW5zICAgICVkXG4iLCBzdGF0X3Rlc3RfcnVucyhidWZmZXIpKTsKIAotICBwcmludGYoInJ1bm5pbmcgc3RhdF90ZXN0cyBvbiBBRVMtMTI4LUlDTSwgZXhwZWN0aW5nIHN1Y2Nlc3NcbiIpOwotICAvKiBzZXQgYnVmZmVyIHRvIGNpcGhlciBvdXRwdXQgKi8KLSAgZm9yIChpPTA7IGkgPCAyNTAwOyBpKyspCi0gICAgYnVmZmVyW2ldID0gMDsKLSAgZXJyX2NoZWNrKGNpcGhlcl90eXBlX2FsbG9jKCZhZXNfaWNtLCAmYywgMzApKTsKLSAgZXJyX2NoZWNrKGNpcGhlcl9pbml0KGMsIGtleSwgZGlyZWN0aW9uX2VuY3J5cHQpKTsKLSAgZXJyX2NoZWNrKGNpcGhlcl9zZXRfaXYoYywgJm5vbmNlKSk7Ci0gIGVycl9jaGVjayhjaXBoZXJfZW5jcnlwdChjLCBidWZmZXIsICZidWZfbGVuKSk7Ci0gIC8qIHJ1biB0ZXN0cyBvbiBjaXBoZXIgb3V0b3V0ICovCi0gIHByaW50ZigibW9ub2JpdCAlZFxuIiwgc3RhdF90ZXN0X21vbm9iaXQoYnVmZmVyKSk7Ci0gIHByaW50ZigicG9rZXIgICAlZFxuIiwgc3RhdF90ZXN0X3Bva2VyKGJ1ZmZlcikpOwotICBwcmludGYoInJ1bnMgICAgJWRcbiIsIHN0YXRfdGVzdF9ydW5zKGJ1ZmZlcikpOworICAgIHByaW50ZigicnVubmluZyBzdGF0X3Rlc3RzIG9uIEFFUy0xMjgtSUNNLCBleHBlY3Rpbmcgc3VjY2Vzc1xuIik7CisgICAgLyogc2V0IGJ1ZmZlciB0byBjaXBoZXIgb3V0cHV0ICovCisgICAgZm9yIChpID0gMDsgaSA8IDI1MDA7IGkrKykKKyAgICAgICAgYnVmZmVyW2ldID0gMDsKKyAgICBlcnJfY2hlY2soc3J0cF9jaXBoZXJfdHlwZV9hbGxvYygmc3J0cF9hZXNfaWNtXzEyOCwgJmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JUUF9BRVNfSUNNXzEyOF9LRVlfTEVOX1dTQUxULCAwKSk7CisgICAgZXJyX2NoZWNrKHNydHBfY2lwaGVyX2luaXQoYywga2V5KSk7CisgICAgZXJyX2NoZWNrKHNydHBfY2lwaGVyX3NldF9pdihjLCAodWludDhfdCAqKSZub25jZSwgc3J0cF9kaXJlY3Rpb25fZW5jcnlwdCkpOworICAgIGVycl9jaGVjayhzcnRwX2NpcGhlcl9lbmNyeXB0KGMsIGJ1ZmZlciwgJmJ1Zl9sZW4pKTsKKyAgICAvKiBydW4gdGVzdHMgb24gY2lwaGVyIG91dG91dCAqLworICAgIHByaW50ZigibW9ub2JpdCAlZFxuIiwgc3RhdF90ZXN0X21vbm9iaXQoYnVmZmVyKSk7CisgICAgcHJpbnRmKCJwb2tlciAgICVkXG4iLCBzdGF0X3Rlc3RfcG9rZXIoYnVmZmVyKSk7CisgICAgcHJpbnRmKCJydW5zICAgICVkXG4iLCBzdGF0X3Rlc3RfcnVucyhidWZmZXIpKTsKIAotICBwcmludGYoInJ1bnMgdGVzdCAocGxlYXNlIGJlIHBhdGllbnQpOiAiKTsKLSAgZmZsdXNoKHN0ZG91dCk7Ci0gIG51bV9mYWlsID0gMDsKLSAgdjEyOF9zZXRfdG9femVybygmbm9uY2UpOwotICBmb3Ioaj0wOyBqIDwgbnVtX3RyaWFsczsgaisrKSB7Ci0gICAgZm9yIChpPTA7IGkgPCAyNTAwOyBpKyspCi0gICAgICBidWZmZXJbaV0gPSAwOwotICAgIG5vbmNlLnYzMlszXSA9IGk7Ci0gICAgZXJyX2NoZWNrKGNpcGhlcl9zZXRfaXYoYywgJm5vbmNlKSk7Ci0gICAgZXJyX2NoZWNrKGNpcGhlcl9lbmNyeXB0KGMsIGJ1ZmZlciwgJmJ1Zl9sZW4pKTsKLSAgICBpZiAoc3RhdF90ZXN0X3J1bnMoYnVmZmVyKSkgewotICAgICAgbnVtX2ZhaWwrKzsKKyAgICBwcmludGYoInJ1bnMgdGVzdCAocGxlYXNlIGJlIHBhdGllbnQpOiAiKTsKKyAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICBudW1fZmFpbCA9IDA7CisgICAgdjEyOF9zZXRfdG9femVybygmbm9uY2UpOworICAgIGZvciAoaiA9IDA7IGogPCBudW1fdHJpYWxzOyBqKyspIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1MDA7IGkrKykKKyAgICAgICAgICAgIGJ1ZmZlcltpXSA9IDA7CisgICAgICAgIG5vbmNlLnYzMlszXSA9IGk7CisgICAgICAgIGVycl9jaGVjaygKKyAgICAgICAgICAgIHNydHBfY2lwaGVyX3NldF9pdihjLCAodWludDhfdCAqKSZub25jZSwgc3J0cF9kaXJlY3Rpb25fZW5jcnlwdCkpOworICAgICAgICBlcnJfY2hlY2soc3J0cF9jaXBoZXJfZW5jcnlwdChjLCBidWZmZXIsICZidWZfbGVuKSk7CisgICAgICAgIGlmIChzdGF0X3Rlc3RfcnVucyhidWZmZXIpKSB7CisgICAgICAgICAgICBudW1fZmFpbCsrOworICAgICAgICB9CiAgICAgfQotICB9CiAKLSAgcHJpbnRmKCIlZCBmYWlsdXJlcyBpbiAlZCB0ZXN0c1xuIiwgbnVtX2ZhaWwsIG51bV90cmlhbHMpOwotICBwcmludGYoIihub3RhIGJlbmU6IGEgc21hbGwgZnJhY3Rpb24gb2Ygc3RhdF90ZXN0IGZhaWx1cmVzIGRvZXMgbm90IFxuIgotCSAiaW5kaWNhdGUgdGhhdCB0aGUgcmFuZG9tIHNvdXJjZSBpcyBpbnZhbGlkKVxuIik7CisgICAgcHJpbnRmKCIlZCBmYWlsdXJlcyBpbiAlZCB0ZXN0c1xuIiwgbnVtX2ZhaWwsIG51bV90cmlhbHMpOworICAgIHByaW50ZigiKG5vdGEgYmVuZTogYSBzbWFsbCBmcmFjdGlvbiBvZiBzdGF0X3Rlc3QgZmFpbHVyZXMgZG9lcyBub3QgXG4iCisgICAgICAgICAgICJpbmRpY2F0ZSB0aGF0IHRoZSByYW5kb20gc291cmNlIGlzIGludmFsaWQpXG4iKTsKIAotICByZXR1cm4gMDsKKyAgICBlcnJfY2hlY2soc3J0cF9jaXBoZXJfZGVhbGxvYyhjKSk7CisKKyAgICBwcmludGYoInJ1bm5pbmcgc3RhdF90ZXN0cyBvbiBBRVMtMjU2LUlDTSwgZXhwZWN0aW5nIHN1Y2Nlc3NcbiIpOworICAgIC8qIHNldCBidWZmZXIgdG8gY2lwaGVyIG91dHB1dCAqLworICAgIGZvciAoaSA9IDA7IGkgPCAyNTAwOyBpKyspCisgICAgICAgIGJ1ZmZlcltpXSA9IDA7CisgICAgZXJyX2NoZWNrKHNydHBfY2lwaGVyX3R5cGVfYWxsb2MoJnNydHBfYWVzX2ljbV8yNTYsICZjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSVFBfQUVTX0lDTV8yNTZfS0VZX0xFTl9XU0FMVCwgMCkpOworICAgIGVycl9jaGVjayhzcnRwX2NpcGhlcl9pbml0KGMsIGtleSkpOworICAgIGVycl9jaGVjayhzcnRwX2NpcGhlcl9zZXRfaXYoYywgKHVpbnQ4X3QgKikmbm9uY2UsIHNydHBfZGlyZWN0aW9uX2VuY3J5cHQpKTsKKyAgICBlcnJfY2hlY2soc3J0cF9jaXBoZXJfZW5jcnlwdChjLCBidWZmZXIsICZidWZfbGVuKSk7CisgICAgLyogcnVuIHRlc3RzIG9uIGNpcGhlciBvdXRvdXQgKi8KKyAgICBwcmludGYoIm1vbm9iaXQgJWRcbiIsIHN0YXRfdGVzdF9tb25vYml0KGJ1ZmZlcikpOworICAgIHByaW50ZigicG9rZXIgICAlZFxuIiwgc3RhdF90ZXN0X3Bva2VyKGJ1ZmZlcikpOworICAgIHByaW50ZigicnVucyAgICAlZFxuIiwgc3RhdF90ZXN0X3J1bnMoYnVmZmVyKSk7CisKKyAgICBwcmludGYoInJ1bnMgdGVzdCAocGxlYXNlIGJlIHBhdGllbnQpOiAiKTsKKyAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICBudW1fZmFpbCA9IDA7CisgICAgdjEyOF9zZXRfdG9femVybygmbm9uY2UpOworICAgIGZvciAoaiA9IDA7IGogPCBudW1fdHJpYWxzOyBqKyspIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1MDA7IGkrKykKKyAgICAgICAgICAgIGJ1ZmZlcltpXSA9IDA7CisgICAgICAgIG5vbmNlLnYzMlszXSA9IGk7CisgICAgICAgIGVycl9jaGVjaygKKyAgICAgICAgICAgIHNydHBfY2lwaGVyX3NldF9pdihjLCAodWludDhfdCAqKSZub25jZSwgc3J0cF9kaXJlY3Rpb25fZW5jcnlwdCkpOworICAgICAgICBlcnJfY2hlY2soc3J0cF9jaXBoZXJfZW5jcnlwdChjLCBidWZmZXIsICZidWZfbGVuKSk7CisgICAgICAgIGlmIChzdGF0X3Rlc3RfcnVucyhidWZmZXIpKSB7CisgICAgICAgICAgICBudW1fZmFpbCsrOworICAgICAgICB9CisgICAgfQorCisjaWZkZWYgR0NNCisgICAgeworICAgICAgICBwcmludGYoInJ1bm5pbmcgc3RhdF90ZXN0cyBvbiBBRVMtMTI4LUdDTSwgZXhwZWN0aW5nIHN1Y2Nlc3NcbiIpOworICAgICAgICAvKiBzZXQgYnVmZmVyIHRvIGNpcGhlciBvdXRwdXQgKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1MDA7IGkrKykgeworICAgICAgICAgICAgYnVmZmVyW2ldID0gMDsKKyAgICAgICAgfQorICAgICAgICBlcnJfY2hlY2soc3J0cF9jaXBoZXJfdHlwZV9hbGxvYygmc3J0cF9hZXNfZ2NtXzEyOCwgJmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSVFBfQUVTX0dDTV8xMjhfS0VZX0xFTl9XU0FMVCwgOCkpOworICAgICAgICBlcnJfY2hlY2soc3J0cF9jaXBoZXJfaW5pdChjLCBrZXkpKTsKKyAgICAgICAgZXJyX2NoZWNrKAorICAgICAgICAgICAgc3J0cF9jaXBoZXJfc2V0X2l2KGMsICh1aW50OF90ICopJm5vbmNlLCBzcnRwX2RpcmVjdGlvbl9lbmNyeXB0KSk7CisgICAgICAgIGVycl9jaGVjayhzcnRwX2NpcGhlcl9lbmNyeXB0KGMsIGJ1ZmZlciwgJmJ1Zl9sZW4pKTsKKyAgICAgICAgLyogcnVuIHRlc3RzIG9uIGNpcGhlciBvdXRvdXQgKi8KKyAgICAgICAgcHJpbnRmKCJtb25vYml0ICVkXG4iLCBzdGF0X3Rlc3RfbW9ub2JpdChidWZmZXIpKTsKKyAgICAgICAgcHJpbnRmKCJwb2tlciAgICVkXG4iLCBzdGF0X3Rlc3RfcG9rZXIoYnVmZmVyKSk7CisgICAgICAgIHByaW50ZigicnVucyAgICAlZFxuIiwgc3RhdF90ZXN0X3J1bnMoYnVmZmVyKSk7CisgICAgICAgIGZmbHVzaChzdGRvdXQpOworICAgICAgICBudW1fZmFpbCA9IDA7CisgICAgICAgIHYxMjhfc2V0X3RvX3plcm8oJm5vbmNlKTsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IG51bV90cmlhbHM7IGorKykgeworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1MDA7IGkrKykgeworICAgICAgICAgICAgICAgIGJ1ZmZlcltpXSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBub25jZS52MzJbM10gPSBpOworICAgICAgICAgICAgZXJyX2NoZWNrKHNydHBfY2lwaGVyX3NldF9pdihjLCAodWludDhfdCAqKSZub25jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9kaXJlY3Rpb25fZW5jcnlwdCkpOworICAgICAgICAgICAgZXJyX2NoZWNrKHNydHBfY2lwaGVyX2VuY3J5cHQoYywgYnVmZmVyLCAmYnVmX2xlbikpOworICAgICAgICAgICAgYnVmX2xlbiA9IDI1MDA7CisgICAgICAgICAgICBpZiAoc3RhdF90ZXN0X3J1bnMoYnVmZmVyKSkgeworICAgICAgICAgICAgICAgIG51bV9mYWlsKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcmludGYoInJ1bm5pbmcgc3RhdF90ZXN0cyBvbiBBRVMtMjU2LUdDTSwgZXhwZWN0aW5nIHN1Y2Nlc3NcbiIpOworICAgICAgICAvKiBzZXQgYnVmZmVyIHRvIGNpcGhlciBvdXRwdXQgKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1MDA7IGkrKykgeworICAgICAgICAgICAgYnVmZmVyW2ldID0gMDsKKyAgICAgICAgfQorICAgICAgICBlcnJfY2hlY2soc3J0cF9jaXBoZXJfdHlwZV9hbGxvYygmc3J0cF9hZXNfZ2NtXzI1NiwgJmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSVFBfQUVTX0dDTV8yNTZfS0VZX0xFTl9XU0FMVCwgMTYpKTsKKyAgICAgICAgZXJyX2NoZWNrKHNydHBfY2lwaGVyX2luaXQoYywga2V5KSk7CisgICAgICAgIGVycl9jaGVjaygKKyAgICAgICAgICAgIHNydHBfY2lwaGVyX3NldF9pdihjLCAodWludDhfdCAqKSZub25jZSwgc3J0cF9kaXJlY3Rpb25fZW5jcnlwdCkpOworICAgICAgICBlcnJfY2hlY2soc3J0cF9jaXBoZXJfZW5jcnlwdChjLCBidWZmZXIsICZidWZfbGVuKSk7CisgICAgICAgIC8qIHJ1biB0ZXN0cyBvbiBjaXBoZXIgb3V0b3V0ICovCisgICAgICAgIHByaW50ZigibW9ub2JpdCAlZFxuIiwgc3RhdF90ZXN0X21vbm9iaXQoYnVmZmVyKSk7CisgICAgICAgIHByaW50ZigicG9rZXIgICAlZFxuIiwgc3RhdF90ZXN0X3Bva2VyKGJ1ZmZlcikpOworICAgICAgICBwcmludGYoInJ1bnMgICAgJWRcbiIsIHN0YXRfdGVzdF9ydW5zKGJ1ZmZlcikpOworICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICAgICAgbnVtX2ZhaWwgPSAwOworICAgICAgICB2MTI4X3NldF90b196ZXJvKCZub25jZSk7CisgICAgICAgIGZvciAoaiA9IDA7IGogPCBudW1fdHJpYWxzOyBqKyspIHsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTAwOyBpKyspIHsKKyAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbm9uY2UudjMyWzNdID0gaTsKKyAgICAgICAgICAgIGVycl9jaGVjayhzcnRwX2NpcGhlcl9zZXRfaXYoYywgKHVpbnQ4X3QgKikmbm9uY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfZGlyZWN0aW9uX2VuY3J5cHQpKTsKKyAgICAgICAgICAgIGVycl9jaGVjayhzcnRwX2NpcGhlcl9lbmNyeXB0KGMsIGJ1ZmZlciwgJmJ1Zl9sZW4pKTsKKyAgICAgICAgICAgIGJ1Zl9sZW4gPSAyNTAwOworICAgICAgICAgICAgaWYgKHN0YXRfdGVzdF9ydW5zKGJ1ZmZlcikpIHsKKyAgICAgICAgICAgICAgICBudW1fZmFpbCsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICBwcmludGYoIiVkIGZhaWx1cmVzIGluICVkIHRlc3RzXG4iLCBudW1fZmFpbCwgbnVtX3RyaWFscyk7CisgICAgcHJpbnRmKCIobm90YSBiZW5lOiBhIHNtYWxsIGZyYWN0aW9uIG9mIHN0YXRfdGVzdCBmYWlsdXJlcyBkb2VzIG5vdCBcbiIKKyAgICAgICAgICAgImluZGljYXRlIHRoYXQgdGhlIHJhbmRvbSBzb3VyY2UgaXMgaW52YWxpZClcbiIpOworCisgICAgZXJyX2NoZWNrKHNydHBfY2lwaGVyX2RlYWxsb2MoYykpOworCisgICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kb2MvRG94eWZpbGUgYi9kb2MvRG94eWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4YTRlNzQuLjAwMDAwMDAKLS0tIGEvZG9jL0RveHlmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTA0MiArMCwwIEBACi0jIERveHlmaWxlIDEuMy1yYzMKLQotIyBUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBzZXR0aW5ncyB0byBiZSB1c2VkIGJ5IHRoZSBkb2N1bWVudGF0aW9uIHN5c3RlbQotIyBkb3h5Z2VuICh3d3cuZG94eWdlbi5vcmcpIGZvciBhIHByb2plY3QKLSMKLSMgQWxsIHRleHQgYWZ0ZXIgYSBoYXNoICgjKSBpcyBjb25zaWRlcmVkIGEgY29tbWVudCBhbmQgd2lsbCBiZSBpZ25vcmVkCi0jIFRoZSBmb3JtYXQgaXM6Ci0jICAgICAgIFRBRyA9IHZhbHVlIFt2YWx1ZSwgLi4uXQotIyBGb3IgbGlzdHMgaXRlbXMgY2FuIGFsc28gYmUgYXBwZW5kZWQgdXNpbmc6Ci0jICAgICAgIFRBRyArPSB2YWx1ZSBbdmFsdWUsIC4uLl0KLSMgVmFsdWVzIHRoYXQgY29udGFpbiBzcGFjZXMgc2hvdWxkIGJlIHBsYWNlZCBiZXR3ZWVuIHF1b3RlcyAoIiAiKQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEdlbmVyYWwgY29uZmlndXJhdGlvbiBvcHRpb25zCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSMgVGhlIFBST0pFQ1RfTkFNRSB0YWcgaXMgYSBzaW5nbGUgd29yZCAob3IgYSBzZXF1ZW5jZSBvZiB3b3JkcyBzdXJyb3VuZGVkIAotIyBieSBxdW90ZXMpIHRoYXQgc2hvdWxkIGlkZW50aWZ5IHRoZSBwcm9qZWN0LgotCi1QUk9KRUNUX05BTUUgICAgICAgICAgID0gbGliU1JUUAotCi0jIFRoZSBQUk9KRUNUX05VTUJFUiB0YWcgY2FuIGJlIHVzZWQgdG8gZW50ZXIgYSBwcm9qZWN0IG9yIHJldmlzaW9uIG51bWJlci4gCi0jIFRoaXMgY291bGQgYmUgaGFuZHkgZm9yIGFyY2hpdmluZyB0aGUgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24gb3IgCi0jIGlmIHNvbWUgdmVyc2lvbiBjb250cm9sIHN5c3RlbSBpcyB1c2VkLgotCi1QUk9KRUNUX05VTUJFUiAgICAgICAgID0gMS4zLjIyCi0KLSMgVGhlIE9VVFBVVF9ESVJFQ1RPUlkgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgKHJlbGF0aXZlIG9yIGFic29sdXRlKSAKLSMgYmFzZSBwYXRoIHdoZXJlIHRoZSBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiB3aWxsIGJlIHB1dC4gCi0jIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkLCBpdCB3aWxsIGJlIHJlbGF0aXZlIHRvIHRoZSBsb2NhdGlvbiAKLSMgd2hlcmUgZG94eWdlbiB3YXMgc3RhcnRlZC4gSWYgbGVmdCBibGFuayB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkLgotCi1PVVRQVVRfRElSRUNUT1JZICAgICAgID0gCi0KLSMgVGhlIE9VVFBVVF9MQU5HVUFHRSB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBsYW5ndWFnZSBpbiB3aGljaCBhbGwgCi0jIGRvY3VtZW50YXRpb24gZ2VuZXJhdGVkIGJ5IGRveHlnZW4gaXMgd3JpdHRlbi4gRG94eWdlbiB3aWxsIHVzZSB0aGlzIAotIyBpbmZvcm1hdGlvbiB0byBnZW5lcmF0ZSBhbGwgY29uc3RhbnQgb3V0cHV0IGluIHRoZSBwcm9wZXIgbGFuZ3VhZ2UuIAotIyBUaGUgZGVmYXVsdCBsYW5ndWFnZSBpcyBFbmdsaXNoLCBvdGhlciBzdXBwb3J0ZWQgbGFuZ3VhZ2VzIGFyZTogCi0jIEJyYXppbGlhbiwgQ2F0YWxhbiwgQ2hpbmVzZSwgQ2hpbmVzZS1UcmFkaXRpb25hbCwgQ3JvYXRpYW4sIEN6ZWNoLCBEYW5pc2gsIER1dGNoLCAKLSMgRmlubmlzaCwgRnJlbmNoLCBHZXJtYW4sIEdyZWVrLCBIdW5nYXJpYW4sIEl0YWxpYW4sIEphcGFuZXNlLCBKYXBhbmVzZS1lbiAKLSMgKEphcGFuZXNlIHdpdGggZW5nbGlzaCBtZXNzYWdlcyksIEtvcmVhbiwgTm9yd2VnaWFuLCBQb2xpc2gsIFBvcnR1Z3Vlc2UsIAotIyBSb21hbmlhbiwgUnVzc2lhbiwgU2VyYmlhbiwgU2xvdmFrLCBTbG92ZW5lLCBTcGFuaXNoLCBTd2VkaXNoIGFuZCBVa3JhaW5pYW4uCi0KLU9VVFBVVF9MQU5HVUFHRSAgICAgICAgPSBFbmdsaXNoCi0KLSMgSWYgdGhlIEVYVFJBQ1RfQUxMIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBhc3N1bWUgYWxsIGVudGl0aWVzIGluIAotIyBkb2N1bWVudGF0aW9uIGFyZSBkb2N1bWVudGVkLCBldmVuIGlmIG5vIGRvY3VtZW50YXRpb24gd2FzIGF2YWlsYWJsZS4gCi0jIFByaXZhdGUgY2xhc3MgbWVtYmVycyBhbmQgc3RhdGljIGZpbGUgbWVtYmVycyB3aWxsIGJlIGhpZGRlbiB1bmxlc3MgCi0jIHRoZSBFWFRSQUNUX1BSSVZBVEUgYW5kIEVYVFJBQ1RfU1RBVElDIHRhZ3MgYXJlIHNldCB0byBZRVMKLQotRVhUUkFDVF9BTEwgICAgICAgICAgICA9IE5PCi0KLSMgSWYgdGhlIEVYVFJBQ1RfUFJJVkFURSB0YWcgaXMgc2V0IHRvIFlFUyBhbGwgcHJpdmF0ZSBtZW1iZXJzIG9mIGEgY2xhc3MgCi0jIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uCi0KLUVYVFJBQ1RfUFJJVkFURSAgICAgICAgPSBOTwotCi0jIElmIHRoZSBFWFRSQUNUX1NUQVRJQyB0YWcgaXMgc2V0IHRvIFlFUyBhbGwgc3RhdGljIG1lbWJlcnMgb2YgYSBmaWxlIAotIyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLgotCi1FWFRSQUNUX1NUQVRJQyAgICAgICAgID0gTk8KLQotIyBJZiB0aGUgRVhUUkFDVF9MT0NBTF9DTEFTU0VTIHRhZyBpcyBzZXQgdG8gWUVTIGNsYXNzZXMgKGFuZCBzdHJ1Y3RzKSAKLSMgZGVmaW5lZCBsb2NhbGx5IGluIHNvdXJjZSBmaWxlcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLiAKLSMgSWYgc2V0IHRvIE5PIG9ubHkgY2xhc3NlcyBkZWZpbmVkIGluIGhlYWRlciBmaWxlcyBhcmUgaW5jbHVkZWQuCi0KLUVYVFJBQ1RfTE9DQUxfQ0xBU1NFUyAgPSBZRVMKLQotIyBJZiB0aGUgSElERV9VTkRPQ19NRU1CRVJTIHRhZyBpcyBzZXQgdG8gWUVTLCBEb3h5Z2VuIHdpbGwgaGlkZSBhbGwgCi0jIHVuZG9jdW1lbnRlZCBtZW1iZXJzIG9mIGRvY3VtZW50ZWQgY2xhc3NlcywgZmlsZXMgb3IgbmFtZXNwYWNlcy4gCi0jIElmIHNldCB0byBOTyAodGhlIGRlZmF1bHQpIHRoZXNlIG1lbWJlcnMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgCi0jIHZhcmlvdXMgb3ZlcnZpZXdzLCBidXQgbm8gZG9jdW1lbnRhdGlvbiBzZWN0aW9uIGlzIGdlbmVyYXRlZC4gCi0jIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QgaWYgRVhUUkFDVF9BTEwgaXMgZW5hYmxlZC4KLQotSElERV9VTkRPQ19NRU1CRVJTICAgICA9IFlFUwotCi0jIElmIHRoZSBISURFX1VORE9DX0NMQVNTRVMgdGFnIGlzIHNldCB0byBZRVMsIERveHlnZW4gd2lsbCBoaWRlIGFsbCAKLSMgdW5kb2N1bWVudGVkIGNsYXNzZXMgdGhhdCBhcmUgbm9ybWFsbHkgdmlzaWJsZSBpbiB0aGUgY2xhc3MgaGllcmFyY2h5LiAKLSMgSWYgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkgdGhlc2UgY2xhc3Mgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgdmFyaW91cyAKLSMgb3ZlcnZpZXdzLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IGlmIEVYVFJBQ1RfQUxMIGlzIGVuYWJsZWQuCi0KLUhJREVfVU5ET0NfQ0xBU1NFUyAgICAgPSBOTwotCi0jIElmIHRoZSBISURFX0ZSSUVORF9DT01QT1VORFMgdGFnIGlzIHNldCB0byBZRVMsIERveHlnZW4gd2lsbCBoaWRlIGFsbCAKLSMgZnJpZW5kIChjbGFzc3xzdHJ1Y3R8dW5pb24pIGRlY2xhcmF0aW9ucy4gCi0jIElmIHNldCB0byBOTyAodGhlIGRlZmF1bHQpIHRoZXNlIGRlY2xhcmF0aW9ucyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSAKLSMgZG9jdW1lbnRhdGlvbi4KLQotSElERV9GUklFTkRfQ09NUE9VTkRTICA9IE5PCi0KLSMgSWYgdGhlIEhJREVfSU5fQk9EWV9ET0NTIHRhZyBpcyBzZXQgdG8gWUVTLCBEb3h5Z2VuIHdpbGwgaGlkZSBhbnkgCi0jIGRvY3VtZW50YXRpb24gYmxvY2tzIGZvdW5kIGluc2lkZSB0aGUgYm9keSBvZiBhIGZ1bmN0aW9uLiAKLSMgSWYgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkgdGhlc2UgYmxvY2tzIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIAotIyBmdW5jdGlvbidzIGRldGFpbGVkIGRvY3VtZW50YXRpb24gYmxvY2suCi0KLUhJREVfSU5fQk9EWV9ET0NTICAgICAgPSBOTwotCi0jIElmIHRoZSBCUklFRl9NRU1CRVJfREVTQyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIERveHlnZW4gd2lsbCAKLSMgaW5jbHVkZSBicmllZiBtZW1iZXIgZGVzY3JpcHRpb25zIGFmdGVyIHRoZSBtZW1iZXJzIHRoYXQgYXJlIGxpc3RlZCBpbiAKLSMgdGhlIGZpbGUgYW5kIGNsYXNzIGRvY3VtZW50YXRpb24gKHNpbWlsYXIgdG8gSmF2YURvYykuIAotIyBTZXQgdG8gTk8gdG8gZGlzYWJsZSB0aGlzLgotCi1CUklFRl9NRU1CRVJfREVTQyAgICAgID0gWUVTCi0KLSMgSWYgdGhlIFJFUEVBVF9CUklFRiB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIERveHlnZW4gd2lsbCBwcmVwZW5kIAotIyB0aGUgYnJpZWYgZGVzY3JpcHRpb24gb2YgYSBtZW1iZXIgb3IgZnVuY3Rpb24gYmVmb3JlIHRoZSBkZXRhaWxlZCBkZXNjcmlwdGlvbi4gCi0jIE5vdGU6IGlmIGJvdGggSElERV9VTkRPQ19NRU1CRVJTIGFuZCBCUklFRl9NRU1CRVJfREVTQyBhcmUgc2V0IHRvIE5PLCB0aGUgCi0jIGJyaWVmIGRlc2NyaXB0aW9ucyB3aWxsIGJlIGNvbXBsZXRlbHkgc3VwcHJlc3NlZC4KLQotUkVQRUFUX0JSSUVGICAgICAgICAgICA9IE5PCi0KLSMgSWYgdGhlIEFMV0FZU19ERVRBSUxFRF9TRUMgYW5kIFJFUEVBVF9CUklFRiB0YWdzIGFyZSBib3RoIHNldCB0byBZRVMgdGhlbiAKLSMgRG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgZGV0YWlsZWQgc2VjdGlvbiBldmVuIGlmIHRoZXJlIGlzIG9ubHkgYSBicmllZiAKLSMgZGVzY3JpcHRpb24uCi0KLUFMV0FZU19ERVRBSUxFRF9TRUMgICAgPSBOTwotCi0jIElmIHRoZSBJTkxJTkVfSU5IRVJJVEVEX01FTUIgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBzaG93Ci0jIGFsbCBpbmhlcml0ZWQgbWVtYmVycyBvZiBhIGNsYXNzIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoYXQgY2xhc3MKLSMgYXMgaWYgdGhvc2UgbWVtYmVycyB3ZXJlIG9yZGluYXJ5IGNsYXNzIG1lbWJlcnMuIENvbnN0cnVjdG9ycywKLSMgZGVzdHJ1Y3RvcnMgYW5kIGFzc2lnbm1lbnQgb3BlcmF0b3JzIG9mIHRoZSBiYXNlIGNsYXNzZXMgd2lsbCBub3QgYmUKLSMgc2hvd24uCi0KLUlOTElORV9JTkhFUklURURfTUVNQiAgPSBOTwotCi0jIElmIHRoZSBGVUxMX1BBVEhfTkFNRVMgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBEb3h5Z2VuIHdpbGwgcHJlcGVuZCB0aGUgZnVsbCAKLSMgcGF0aCBiZWZvcmUgZmlsZXMgbmFtZSBpbiB0aGUgZmlsZSBsaXN0IGFuZCBpbiB0aGUgaGVhZGVyIGZpbGVzLiBJZiBzZXQgCi0jIHRvIE5PIHRoZSBzaG9ydGVzdCBwYXRoIHRoYXQgbWFrZXMgdGhlIGZpbGUgbmFtZSB1bmlxdWUgd2lsbCBiZSB1c2VkLgotCi1GVUxMX1BBVEhfTkFNRVMgICAgICAgID0gTk8KLQotIyBJZiB0aGUgRlVMTF9QQVRIX05BTUVTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gdGhlIFNUUklQX0ZST01fUEFUSCB0YWcgCi0jIGNhbiBiZSB1c2VkIHRvIHN0cmlwIGEgdXNlciBkZWZpbmVkIHBhcnQgb2YgdGhlIHBhdGguIFN0cmlwcGluZyBpcyAKLSMgb25seSBkb25lIGlmIG9uZSBvZiB0aGUgc3BlY2lmaWVkIHN0cmluZ3MgbWF0Y2hlcyB0aGUgbGVmdC1oYW5kIHBhcnQgb2YgCi0jIHRoZSBwYXRoLiBJdCBpcyBhbGxvd2VkIHRvIHVzZSByZWxhdGl2ZSBwYXRocyBpbiB0aGUgYXJndW1lbnQgbGlzdC4KLQotU1RSSVBfRlJPTV9QQVRIICAgICAgICA9IAotCi0jIFRoZSBJTlRFUk5BTF9ET0NTIHRhZyBkZXRlcm1pbmVzIGlmIGRvY3VtZW50YXRpb24gCi0jIHRoYXQgaXMgdHlwZWQgYWZ0ZXIgYSBcaW50ZXJuYWwgY29tbWFuZCBpcyBpbmNsdWRlZC4gSWYgdGhlIHRhZyBpcyBzZXQgCi0jIHRvIE5PICh0aGUgZGVmYXVsdCkgdGhlbiB0aGUgZG9jdW1lbnRhdGlvbiB3aWxsIGJlIGV4Y2x1ZGVkLiAKLSMgU2V0IGl0IHRvIFlFUyB0byBpbmNsdWRlIHRoZSBpbnRlcm5hbCBkb2N1bWVudGF0aW9uLgotCi1JTlRFUk5BTF9ET0NTICAgICAgICAgID0gTk8KLQotIyBJZiB0aGUgQ0FTRV9TRU5TRV9OQU1FUyB0YWcgaXMgc2V0IHRvIE5PIHRoZW4gRG94eWdlbiB3aWxsIG9ubHkgZ2VuZXJhdGUgCi0jIGZpbGUgbmFtZXMgaW4gbG93ZXIgY2FzZSBsZXR0ZXJzLiBJZiBzZXQgdG8gWUVTIHVwcGVyIGNhc2UgbGV0dGVycyBhcmUgYWxzbyAKLSMgYWxsb3dlZC4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IGhhdmUgY2xhc3NlcyBvciBmaWxlcyB3aG9zZSBuYW1lcyBvbmx5IGRpZmZlciAKLSMgaW4gY2FzZSBhbmQgaWYgeW91ciBmaWxlIHN5c3RlbSBzdXBwb3J0cyBjYXNlIHNlbnNpdGl2ZSBmaWxlIG5hbWVzLiBXaW5kb3dzIAotIyB1c2VycyBhcmUgYWR2aWNlZCB0byBzZXQgdGhpcyBvcHRpb24gdG8gTk8uCi0KLUNBU0VfU0VOU0VfTkFNRVMgICAgICAgPSBZRVMKLQotIyBJZiB0aGUgU0hPUlRfTkFNRVMgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBtdWNoIHNob3J0ZXIgCi0jIChidXQgbGVzcyByZWFkYWJsZSkgZmlsZSBuYW1lcy4gVGhpcyBjYW4gYmUgdXNlZnVsIGlzIHlvdXIgZmlsZSBzeXN0ZW1zIAotIyBkb2Vzbid0IHN1cHBvcnQgbG9uZyBuYW1lcyBsaWtlIG9uIERPUywgTWFjLCBvciBDRC1ST00uCi0KLVNIT1JUX05BTUVTICAgICAgICAgICAgPSBOTwotCi0jIElmIHRoZSBISURFX1NDT1BFX05BTUVTIHRhZyBpcyBzZXQgdG8gTk8gKHRoZSBkZWZhdWx0KSB0aGVuIERveHlnZW4gCi0jIHdpbGwgc2hvdyBtZW1iZXJzIHdpdGggdGhlaXIgZnVsbCBjbGFzcyBhbmQgbmFtZXNwYWNlIHNjb3BlcyBpbiB0aGUgCi0jIGRvY3VtZW50YXRpb24uIElmIHNldCB0byBZRVMgdGhlIHNjb3BlIHdpbGwgYmUgaGlkZGVuLgotCi1ISURFX1NDT1BFX05BTUVTICAgICAgID0gTk8KLQotIyBJZiB0aGUgVkVSQkFUSU1fSEVBREVSUyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIHRoZW4gRG94eWdlbiAKLSMgd2lsbCBnZW5lcmF0ZSBhIHZlcmJhdGltIGNvcHkgb2YgdGhlIGhlYWRlciBmaWxlIGZvciBlYWNoIGNsYXNzIGZvciAKLSMgd2hpY2ggYW4gaW5jbHVkZSBpcyBzcGVjaWZpZWQuIFNldCB0byBOTyB0byBkaXNhYmxlIHRoaXMuCi0KLVZFUkJBVElNX0hFQURFUlMgICAgICAgPSBZRVMKLQotIyBJZiB0aGUgU0hPV19JTkNMVURFX0ZJTEVTIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgdGhlbiBEb3h5Z2VuIAotIyB3aWxsIHB1dCBsaXN0IG9mIHRoZSBmaWxlcyB0aGF0IGFyZSBpbmNsdWRlZCBieSBhIGZpbGUgaW4gdGhlIGRvY3VtZW50YXRpb24gCi0jIG9mIHRoYXQgZmlsZS4KLQotU0hPV19JTkNMVURFX0ZJTEVTICAgICA9IE5PCi0KLSMgSWYgdGhlIEpBVkFET0NfQVVUT0JSSUVGIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gRG94eWdlbiAKLSMgd2lsbCBpbnRlcnByZXQgdGhlIGZpcnN0IGxpbmUgKHVudGlsIHRoZSBmaXJzdCBkb3QpIG9mIGEgSmF2YURvYy1zdHlsZSAKLSMgY29tbWVudCBhcyB0aGUgYnJpZWYgZGVzY3JpcHRpb24uIElmIHNldCB0byBOTywgdGhlIEphdmFEb2MgCi0jIGNvbW1lbnRzICB3aWxsIGJlaGF2ZSBqdXN0IGxpa2UgdGhlIFF0LXN0eWxlIGNvbW1lbnRzICh0aHVzIHJlcXVpcmluZyBhbiAKLSMgZXhwbGljdCBAYnJpZWYgY29tbWFuZCBmb3IgYSBicmllZiBkZXNjcmlwdGlvbi4KLQotSkFWQURPQ19BVVRPQlJJRUYgICAgICA9IE5PCi0KLSMgVGhlIE1VTFRJTElORV9DUFBfSVNfQlJJRUYgdGFnIGNhbiBiZSBzZXQgdG8gWUVTIHRvIG1ha2UgRG94eWdlbiAKLSMgdHJlYXQgYSBtdWx0aS1saW5lIEMrKyBzcGVjaWFsIGNvbW1lbnQgYmxvY2sgKGkuZS4gYSBibG9jayBvZiAvLyEgb3IgLy8vIAotIyBjb21tZW50cykgYXMgYSBicmllZiBkZXNjcmlwdGlvbi4gVGhpcyB1c2VkIHRvIGJlIHRoZSBkZWZhdWx0IGJlaGF2aW91ci4gCi0jIFRoZSBuZXcgZGVmYXVsdCBpcyB0byB0cmVhdCBhIG11bHRpLWxpbmUgQysrIGNvbW1lbnQgYmxvY2sgYXMgYSBkZXRhaWxlZCAKLSMgZGVzY3JpcHRpb24uIFNldCB0aGlzIHRhZyB0byBZRVMgaWYgeW91IHByZWZlciB0aGUgb2xkIGJlaGF2aW91ciBpbnN0ZWFkLgotCi1NVUxUSUxJTkVfQ1BQX0lTX0JSSUVGID0gTk8KLQotIyBJZiB0aGUgREVUQUlMU19BVF9UT1AgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBEb3h5Z2VuIAotIyB3aWxsIG91dHB1dCB0aGUgZGV0YWlsZWQgZGVzY3JpcHRpb24gbmVhciB0aGUgdG9wLCBsaWtlIEphdmFEb2MuCi0jIElmIHNldCB0byBOTywgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uIGFwcGVhcnMgYWZ0ZXIgdGhlIG1lbWJlciAKLSMgZG9jdW1lbnRhdGlvbi4KLQotREVUQUlMU19BVF9UT1AgICAgICAgICA9IE5PCi0KLSMgSWYgdGhlIElOSEVSSVRfRE9DUyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIHRoZW4gYW4gdW5kb2N1bWVudGVkIAotIyBtZW1iZXIgaW5oZXJpdHMgdGhlIGRvY3VtZW50YXRpb24gZnJvbSBhbnkgZG9jdW1lbnRlZCBtZW1iZXIgdGhhdCBpdCAKLSMgcmVpbXBsZW1lbnRzLgotCi1JTkhFUklUX0RPQ1MgICAgICAgICAgID0gWUVTCi0KLSMgSWYgdGhlIElOTElORV9JTkZPIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgdGhlbiBhIHRhZyBbaW5saW5lXSAKLSMgaXMgaW5zZXJ0ZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yIGlubGluZSBtZW1iZXJzLgotCi1JTkxJTkVfSU5GTyAgICAgICAgICAgID0gWUVTCi0KLSMgSWYgdGhlIFNPUlRfTUVNQkVSX0RPQ1MgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSB0aGVuIGRveHlnZW4gCi0jIHdpbGwgc29ydCB0aGUgKGRldGFpbGVkKSBkb2N1bWVudGF0aW9uIG9mIGZpbGUgYW5kIGNsYXNzIG1lbWJlcnMgCi0jIGFscGhhYmV0aWNhbGx5IGJ5IG1lbWJlciBuYW1lLiBJZiBzZXQgdG8gTk8gdGhlIG1lbWJlcnMgd2lsbCBhcHBlYXIgaW4gCi0jIGRlY2xhcmF0aW9uIG9yZGVyLgotCi1TT1JUX01FTUJFUl9ET0NTICAgICAgID0gWUVTCi0KLSMgSWYgbWVtYmVyIGdyb3VwaW5nIGlzIHVzZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kIHRoZSBESVNUUklCVVRFX0dST1VQX0RPQyAKLSMgdGFnIGlzIHNldCB0byBZRVMsIHRoZW4gZG94eWdlbiB3aWxsIHJldXNlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBmaXJzdCAKLSMgbWVtYmVyIGluIHRoZSBncm91cCAoaWYgYW55KSBmb3IgdGhlIG90aGVyIG1lbWJlcnMgb2YgdGhlIGdyb3VwLiBCeSBkZWZhdWx0IAotIyBhbGwgbWVtYmVycyBvZiBhIGdyb3VwIG11c3QgYmUgZG9jdW1lbnRlZCBleHBsaWNpdGx5LgotCi1ESVNUUklCVVRFX0dST1VQX0RPQyAgID0gTk8KLQotIyBUaGUgVEFCX1NJWkUgdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgbnVtYmVyIG9mIHNwYWNlcyBpbiBhIHRhYi4gCi0jIERveHlnZW4gdXNlcyB0aGlzIHZhbHVlIHRvIHJlcGxhY2UgdGFicyBieSBzcGFjZXMgaW4gY29kZSBmcmFnbWVudHMuCi0KLVRBQl9TSVpFICAgICAgICAgICAgICAgPSAzCi0KLSMgVGhlIEdFTkVSQVRFX1RPRE9MSVNUIHRhZyBjYW4gYmUgdXNlZCB0byBlbmFibGUgKFlFUykgb3IgCi0jIGRpc2FibGUgKE5PKSB0aGUgdG9kbyBsaXN0LiBUaGlzIGxpc3QgaXMgY3JlYXRlZCBieSBwdXR0aW5nIFx0b2RvIAotIyBjb21tYW5kcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KLQotR0VORVJBVEVfVE9ET0xJU1QgICAgICA9IFlFUwotCi0jIFRoZSBHRU5FUkFURV9URVNUTElTVCB0YWcgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIChZRVMpIG9yIAotIyBkaXNhYmxlIChOTykgdGhlIHRlc3QgbGlzdC4gVGhpcyBsaXN0IGlzIGNyZWF0ZWQgYnkgcHV0dGluZyBcdGVzdCAKLSMgY29tbWFuZHMgaW4gdGhlIGRvY3VtZW50YXRpb24uCi0KLUdFTkVSQVRFX1RFU1RMSVNUICAgICAgPSBZRVMKLQotIyBUaGUgR0VORVJBVEVfQlVHTElTVCB0YWcgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIChZRVMpIG9yIAotIyBkaXNhYmxlIChOTykgdGhlIGJ1ZyBsaXN0LiBUaGlzIGxpc3QgaXMgY3JlYXRlZCBieSBwdXR0aW5nIFxidWcgCi0jIGNvbW1hbmRzIGluIHRoZSBkb2N1bWVudGF0aW9uLgotCi1HRU5FUkFURV9CVUdMSVNUICAgICAgID0gWUVTCi0KLSMgVGhlIEdFTkVSQVRFX0RFUFJFQ0FURURMSVNUIHRhZyBjYW4gYmUgdXNlZCB0byBlbmFibGUgKFlFUykgb3IgCi0jIGRpc2FibGUgKE5PKSB0aGUgZGVwcmVjYXRlZCBsaXN0LiBUaGlzIGxpc3QgaXMgY3JlYXRlZCBieSBwdXR0aW5nIAotIyBcZGVwcmVjYXRlZCBjb21tYW5kcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KLQotR0VORVJBVEVfREVQUkVDQVRFRExJU1Q9IFlFUwotCi0jIFRoaXMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBudW1iZXIgb2YgYWxpYXNlcyB0aGF0IGFjdHMgCi0jIGFzIGNvbW1hbmRzIGluIHRoZSBkb2N1bWVudGF0aW9uLiBBbiBhbGlhcyBoYXMgdGhlIGZvcm0gIm5hbWU9dmFsdWUiLiAKLSMgRm9yIGV4YW1wbGUgYWRkaW5nICJzaWRlZWZmZWN0PVxwYXIgU2lkZSBFZmZlY3RzOlxuIiB3aWxsIGFsbG93IHlvdSB0byAKLSMgcHV0IHRoZSBjb21tYW5kIFxzaWRlZWZmZWN0IChvciBAc2lkZWVmZmVjdCkgaW4gdGhlIGRvY3VtZW50YXRpb24sIHdoaWNoIAotIyB3aWxsIHJlc3VsdCBpbiBhIHVzZXIgZGVmaW5lZCBwYXJhZ3JhcGggd2l0aCBoZWFkaW5nICJTaWRlIEVmZmVjdHM6Ii4gCi0jIFlvdSBjYW4gcHV0IFxuJ3MgaW4gdGhlIHZhbHVlIHBhcnQgb2YgYW4gYWxpYXMgdG8gaW5zZXJ0IG5ld2xpbmVzLgotCi1BTElBU0VTICAgICAgICAgICAgICAgID0gCi0KLSMgVGhlIEVOQUJMRURfU0VDVElPTlMgdGFnIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSBjb25kaXRpb25hbCAKLSMgZG9jdW1lbnRhdGlvbiBzZWN0aW9ucywgbWFya2VkIGJ5IFxpZiBzZWN0aW9ubmFtZSAuLi4gXGVuZGlmLgotCi1FTkFCTEVEX1NFQ1RJT05TICAgICAgID0gCi0KLSMgVGhlIE1BWF9JTklUSUFMSVpFUl9MSU5FUyB0YWcgZGV0ZXJtaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgbGluZXMgCi0jIHRoZSBpbml0aWFsIHZhbHVlIG9mIGEgdmFyaWFibGUgb3IgZGVmaW5lIGNvbnNpc3Qgb2YgZm9yIGl0IHRvIGFwcGVhciBpbiAKLSMgdGhlIGRvY3VtZW50YXRpb24uIElmIHRoZSBpbml0aWFsaXplciBjb25zaXN0cyBvZiBtb3JlIGxpbmVzIHRoYW4gc3BlY2lmaWVkIAotIyBoZXJlIGl0IHdpbGwgYmUgaGlkZGVuLiBVc2UgYSB2YWx1ZSBvZiAwIHRvIGhpZGUgaW5pdGlhbGl6ZXJzIGNvbXBsZXRlbHkuIAotIyBUaGUgYXBwZWFyYW5jZSBvZiB0aGUgaW5pdGlhbGl6ZXIgb2YgaW5kaXZpZHVhbCB2YXJpYWJsZXMgYW5kIGRlZmluZXMgaW4gdGhlIAotIyBkb2N1bWVudGF0aW9uIGNhbiBiZSBjb250cm9sbGVkIHVzaW5nIFxzaG93aW5pdGlhbGl6ZXIgb3IgXGhpZGVpbml0aWFsaXplciAKLSMgY29tbWFuZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiByZWdhcmRsZXNzIG9mIHRoaXMgc2V0dGluZy4KLQotTUFYX0lOSVRJQUxJWkVSX0xJTkVTICA9IDMwCi0KLSMgU2V0IHRoZSBPUFRJTUlaRV9PVVRQVVRfRk9SX0MgdGFnIHRvIFlFUyBpZiB5b3VyIHByb2plY3QgY29uc2lzdHMgb2YgQyBzb3VyY2VzIAotIyBvbmx5LiBEb3h5Z2VuIHdpbGwgdGhlbiBnZW5lcmF0ZSBvdXRwdXQgdGhhdCBpcyBtb3JlIHRhaWxvcmVkIGZvciBDLiAKLSMgRm9yIGluc3RhbmNlIHNvbWUgb2YgdGhlIG5hbWVzIHRoYXQgYXJlIHVzZWQgd2lsbCBiZSBkaWZmZXJlbnQuIFRoZSBsaXN0IAotIyBvZiBhbGwgbWVtYmVycyB3aWxsIGJlIG9taXR0ZWQsIGV0Yy4KLQotT1BUSU1JWkVfT1VUUFVUX0ZPUl9DICA9IFlFUwotCi0jIFNldCB0aGUgT1BUSU1JWkVfT1VUUFVUX0pBVkEgdGFnIHRvIFlFUyBpZiB5b3VyIHByb2plY3QgY29uc2lzdHMgb2YgSmF2YSBzb3VyY2VzIAotIyBvbmx5LiBEb3h5Z2VuIHdpbGwgdGhlbiBnZW5lcmF0ZSBvdXRwdXQgdGhhdCBpcyBtb3JlIHRhaWxvcmVkIGZvciBKYXZhLiAKLSMgRm9yIGluc3RhbmNlIG5hbWVzcGFjZXMgd2lsbCBiZSBwcmVzZW50ZWQgYXMgcGFja2FnZXMsIHF1YWxpZmllZCBzY29wZXMgCi0jIHdpbGwgbG9vayBkaWZmZXJlbnQsIGV0Yy4KLQotT1BUSU1JWkVfT1VUUFVUX0pBVkEgICA9IE5PCi0KLSMgU2V0IHRoZSBTSE9XX1VTRURfRklMRVMgdGFnIHRvIE5PIHRvIGRpc2FibGUgdGhlIGxpc3Qgb2YgZmlsZXMgZ2VuZXJhdGVkIAotIyBhdCB0aGUgYm90dG9tIG9mIHRoZSBkb2N1bWVudGF0aW9uIG9mIGNsYXNzZXMgYW5kIHN0cnVjdHMuIElmIHNldCB0byBZRVMgdGhlIAotIyBsaXN0IHdpbGwgbWVudGlvbiB0aGUgZmlsZXMgdGhhdCB3ZXJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGRvY3VtZW50YXRpb24uCi0KLVNIT1dfVVNFRF9GSUxFUyAgICAgICAgPSBZRVMKLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB3YXJuaW5nIGFuZCBwcm9ncmVzcyBtZXNzYWdlcwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jIFRoZSBRVUlFVCB0YWcgY2FuIGJlIHVzZWQgdG8gdHVybiBvbi9vZmYgdGhlIG1lc3NhZ2VzIHRoYXQgYXJlIGdlbmVyYXRlZCAKLSMgYnkgZG94eWdlbi4gUG9zc2libGUgdmFsdWVzIGFyZSBZRVMgYW5kIE5PLiBJZiBsZWZ0IGJsYW5rIE5PIGlzIHVzZWQuCi0KLVFVSUVUICAgICAgICAgICAgICAgICAgPSBOTwotCi0jIFRoZSBXQVJOSU5HUyB0YWcgY2FuIGJlIHVzZWQgdG8gdHVybiBvbi9vZmYgdGhlIHdhcm5pbmcgbWVzc2FnZXMgdGhhdCBhcmUgCi0jIGdlbmVyYXRlZCBieSBkb3h5Z2VuLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIFlFUyBhbmQgTk8uIElmIGxlZnQgYmxhbmsgCi0jIE5PIGlzIHVzZWQuCi0KLVdBUk5JTkdTICAgICAgICAgICAgICAgPSBZRVMKLQotIyBJZiBXQVJOX0lGX1VORE9DVU1FTlRFRCBpcyBzZXQgdG8gWUVTLCB0aGVuIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSB3YXJuaW5ncyAKLSMgZm9yIHVuZG9jdW1lbnRlZCBtZW1iZXJzLiBJZiBFWFRSQUNUX0FMTCBpcyBzZXQgdG8gWUVTIHRoZW4gdGhpcyBmbGFnIHdpbGwgCi0jIGF1dG9tYXRpY2FsbHkgYmUgZGlzYWJsZWQuCi0KLVdBUk5fSUZfVU5ET0NVTUVOVEVEICAgPSBZRVMKLQotIyBJZiBXQVJOX0lGX0RPQ19FUlJPUiBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgd2FybmluZ3MgZm9yIAotIyBwb3RlbnRpYWwgZXJyb3JzIGluIHRoZSBkb2N1bWVudGF0aW9uLCBzdWNoIGFzIG5vdCBkb2N1bWVudGluZyBzb21lIAotIyBwYXJhbWV0ZXJzIGluIGEgZG9jdW1lbnRlZCBmdW5jdGlvbiwgb3IgZG9jdW1lbnRpbmcgcGFyYW1ldGVycyB0aGF0IAotIyBkb24ndCBleGlzdCBvciB1c2luZyBtYXJrdXAgY29tbWFuZHMgd3JvbmdseS4KLQotV0FSTl9JRl9ET0NfRVJST1IgICAgICA9IFlFUwotCi0jIFRoZSBXQVJOX0ZPUk1BVCB0YWcgZGV0ZXJtaW5lcyB0aGUgZm9ybWF0IG9mIHRoZSB3YXJuaW5nIG1lc3NhZ2VzIHRoYXQgCi0jIGRveHlnZW4gY2FuIHByb2R1Y2UuIFRoZSBzdHJpbmcgc2hvdWxkIGNvbnRhaW4gdGhlICRmaWxlLCAkbGluZSwgYW5kICR0ZXh0IAotIyB0YWdzLCB3aGljaCB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSBmaWxlIGFuZCBsaW5lIG51bWJlciBmcm9tIHdoaWNoIHRoZSAKLSMgd2FybmluZyBvcmlnaW5hdGVkIGFuZCB0aGUgd2FybmluZyB0ZXh0LgotCi1XQVJOX0ZPUk1BVCAgICAgICAgICAgID0gIiRmaWxlOiRsaW5lOiAkdGV4dCIKLQotIyBUaGUgV0FSTl9MT0dGSUxFIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgZmlsZSB0byB3aGljaCB3YXJuaW5nIAotIyBhbmQgZXJyb3IgbWVzc2FnZXMgc2hvdWxkIGJlIHdyaXR0ZW4uIElmIGxlZnQgYmxhbmsgdGhlIG91dHB1dCBpcyB3cml0dGVuIAotIyB0byBzdGRlcnIuCi0KLVdBUk5fTE9HRklMRSAgICAgICAgICAgPSAKLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgaW5wdXQgZmlsZXMKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotIyBUaGUgSU5QVVQgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGZpbGVzIGFuZC9vciBkaXJlY3RvcmllcyB0aGF0IGNvbnRhaW4gCi0jIGRvY3VtZW50ZWQgc291cmNlIGZpbGVzLiBZb3UgbWF5IGVudGVyIGZpbGUgbmFtZXMgbGlrZSAibXlmaWxlLmNwcCIgb3IgCi0jIGRpcmVjdG9yaWVzIGxpa2UgIi91c3Ivc3JjL215cHJvamVjdCIuIFNlcGFyYXRlIHRoZSBmaWxlcyBvciBkaXJlY3RvcmllcyAKLSMgd2l0aCBzcGFjZXMuCi0KLUlOUFVUICAgICAgICAgICAgICAgICAgPSBpbnRyby50eHQgLi4vaW5jbHVkZS9zcnRwLmggLi4vY3J5cHRvL2luY2x1ZGUvY3J5cHRvX3R5cGVzLmggLi4vaW5jbHVkZS9lcnIuaCAuLi9jcnlwdG8vaW5jbHVkZS9jcnlwdG9fa2VybmVsLmggIGNyeXB0b19rZXJuZWwudHh0IAotCi0jIElmIHRoZSB2YWx1ZSBvZiB0aGUgSU5QVVQgdGFnIGNvbnRhaW5zIGRpcmVjdG9yaWVzLCB5b3UgY2FuIHVzZSB0aGUgCi0jIEZJTEVfUEFUVEVSTlMgdGFnIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgd2lsZGNhcmQgcGF0dGVybiAobGlrZSAqLmNwcCAKLSMgYW5kICouaCkgdG8gZmlsdGVyIG91dCB0aGUgc291cmNlLWZpbGVzIGluIHRoZSBkaXJlY3Rvcmllcy4gSWYgbGVmdCAKLSMgYmxhbmsgdGhlIGZvbGxvd2luZyBwYXR0ZXJucyBhcmUgdGVzdGVkOiAKLSMgKi5jICouY2MgKi5jeHggKi5jcHAgKi5jKysgKi5qYXZhICouaWkgKi5peHggKi5pcHAgKi5pKysgKi5pbmwgKi5oICouaGggKi5oeHggKi5ocHAgCi0jICouaCsrICouaWRsICoub2RsCi0KLUZJTEVfUEFUVEVSTlMgICAgICAgICAgPSAKLQotIyBUaGUgUkVDVVJTSVZFIHRhZyBjYW4gYmUgdXNlZCB0byB0dXJuIHNwZWNpZnkgd2hldGhlciBvciBub3Qgc3ViZGlyZWN0b3JpZXMgCi0jIHNob3VsZCBiZSBzZWFyY2hlZCBmb3IgaW5wdXQgZmlsZXMgYXMgd2VsbC4gUG9zc2libGUgdmFsdWVzIGFyZSBZRVMgYW5kIE5PLiAKLSMgSWYgbGVmdCBibGFuayBOTyBpcyB1c2VkLgotCi1SRUNVUlNJVkUgICAgICAgICAgICAgID0gTk8KLQotIyBUaGUgRVhDTFVERSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBmaWxlcyBhbmQvb3IgZGlyZWN0b3JpZXMgdGhhdCBzaG91bGQgCi0jIGV4Y2x1ZGVkIGZyb20gdGhlIElOUFVUIHNvdXJjZSBmaWxlcy4gVGhpcyB3YXkgeW91IGNhbiBlYXNpbHkgZXhjbHVkZSBhIAotIyBzdWJkaXJlY3RvcnkgZnJvbSBhIGRpcmVjdG9yeSB0cmVlIHdob3NlIHJvb3QgaXMgc3BlY2lmaWVkIHdpdGggdGhlIElOUFVUIHRhZy4KLQotRVhDTFVERSAgICAgICAgICAgICAgICA9IAotCi0jIFRoZSBFWENMVURFX1NZTUxJTktTIHRhZyBjYW4gYmUgdXNlZCBzZWxlY3Qgd2hldGhlciBvciBub3QgZmlsZXMgb3IgZGlyZWN0b3JpZXMgCi0jIHRoYXQgYXJlIHN5bWJvbGljIGxpbmtzIChhIFVuaXggZmlsZXN5c3RlbSBmZWF0dXJlKSBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgaW5wdXQuCi0KLUVYQ0xVREVfU1lNTElOS1MgICAgICAgPSBOTwotCi0jIElmIHRoZSB2YWx1ZSBvZiB0aGUgSU5QVVQgdGFnIGNvbnRhaW5zIGRpcmVjdG9yaWVzLCB5b3UgY2FuIHVzZSB0aGUgCi0jIEVYQ0xVREVfUEFUVEVSTlMgdGFnIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgd2lsZGNhcmQgcGF0dGVybnMgdG8gZXhjbHVkZSAKLSMgY2VydGFpbiBmaWxlcyBmcm9tIHRob3NlIGRpcmVjdG9yaWVzLgotCi1FWENMVURFX1BBVFRFUk5TICAgICAgID0gCi0KLSMgVGhlIEVYQU1QTEVfUEFUSCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBmaWxlcyBvciAKLSMgZGlyZWN0b3JpZXMgdGhhdCBjb250YWluIGV4YW1wbGUgY29kZSBmcmFnbWVudHMgdGhhdCBhcmUgaW5jbHVkZWQgKHNlZSAKLSMgdGhlIFxpbmNsdWRlIGNvbW1hbmQpLgotCi1FWEFNUExFX1BBVEggICAgICAgICAgID0gCi0KLSMgSWYgdGhlIHZhbHVlIG9mIHRoZSBFWEFNUExFX1BBVEggdGFnIGNvbnRhaW5zIGRpcmVjdG9yaWVzLCB5b3UgY2FuIHVzZSB0aGUgCi0jIEVYQU1QTEVfUEFUVEVSTlMgdGFnIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgd2lsZGNhcmQgcGF0dGVybiAobGlrZSAqLmNwcCAKLSMgYW5kICouaCkgdG8gZmlsdGVyIG91dCB0aGUgc291cmNlLWZpbGVzIGluIHRoZSBkaXJlY3Rvcmllcy4gSWYgbGVmdCAKLSMgYmxhbmsgYWxsIGZpbGVzIGFyZSBpbmNsdWRlZC4KLQotRVhBTVBMRV9QQVRURVJOUyAgICAgICA9IAotCi0jIElmIHRoZSBFWEFNUExFX1JFQ1VSU0lWRSB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIHN1YmRpcmVjdG9yaWVzIHdpbGwgYmUgCi0jIHNlYXJjaGVkIGZvciBpbnB1dCBmaWxlcyB0byBiZSB1c2VkIHdpdGggdGhlIFxpbmNsdWRlIG9yIFxkb250aW5jbHVkZSAKLSMgY29tbWFuZHMgaXJyZXNwZWN0aXZlIG9mIHRoZSB2YWx1ZSBvZiB0aGUgUkVDVVJTSVZFIHRhZy4gCi0jIFBvc3NpYmxlIHZhbHVlcyBhcmUgWUVTIGFuZCBOTy4gSWYgbGVmdCBibGFuayBOTyBpcyB1c2VkLgotCi1FWEFNUExFX1JFQ1VSU0lWRSAgICAgID0gTk8KLQotIyBUaGUgSU1BR0VfUEFUSCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBmaWxlcyBvciAKLSMgZGlyZWN0b3JpZXMgdGhhdCBjb250YWluIGltYWdlIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uIChzZWUgCi0jIHRoZSBcaW1hZ2UgY29tbWFuZCkuCi0KLUlNQUdFX1BBVEggICAgICAgICAgICAgPSAKLQotIyBUaGUgSU5QVVRfRklMVEVSIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgcHJvZ3JhbSB0aGF0IGRveHlnZW4gc2hvdWxkIAotIyBpbnZva2UgdG8gZmlsdGVyIGZvciBlYWNoIGlucHV0IGZpbGUuIERveHlnZW4gd2lsbCBpbnZva2UgdGhlIGZpbHRlciBwcm9ncmFtIAotIyBieSBleGVjdXRpbmcgKHZpYSBwb3BlbigpKSB0aGUgY29tbWFuZCA8ZmlsdGVyPiA8aW5wdXQtZmlsZT4sIHdoZXJlIDxmaWx0ZXI+IAotIyBpcyB0aGUgdmFsdWUgb2YgdGhlIElOUFVUX0ZJTFRFUiB0YWcsIGFuZCA8aW5wdXQtZmlsZT4gaXMgdGhlIG5hbWUgb2YgYW4gCi0jIGlucHV0IGZpbGUuIERveHlnZW4gd2lsbCB0aGVuIHVzZSB0aGUgb3V0cHV0IHRoYXQgdGhlIGZpbHRlciBwcm9ncmFtIHdyaXRlcyAKLSMgdG8gc3RhbmRhcmQgb3V0cHV0LgotCi1JTlBVVF9GSUxURVIgICAgICAgICAgID0gCi0KLSMgSWYgdGhlIEZJTFRFUl9TT1VSQ0VfRklMRVMgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBpbnB1dCBmaWx0ZXIgKGlmIHNldCB1c2luZyAKLSMgSU5QVVRfRklMVEVSKSB3aWxsIGJlIHVzZWQgdG8gZmlsdGVyIHRoZSBpbnB1dCBmaWxlcyB3aGVuIHByb2R1Y2luZyBzb3VyY2UgCi0jIGZpbGVzIHRvIGJyb3dzZSAoaS5lLiB3aGVuIFNPVVJDRV9CUk9XU0VSIGlzIHNldCB0byBZRVMpLgotCi1GSUxURVJfU09VUkNFX0ZJTEVTICAgID0gTk8KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBzb3VyY2UgYnJvd3NpbmcKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotIyBJZiB0aGUgU09VUkNFX0JST1dTRVIgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBhIGxpc3Qgb2Ygc291cmNlIGZpbGVzIHdpbGwgCi0jIGJlIGdlbmVyYXRlZC4gRG9jdW1lbnRlZCBlbnRpdGllcyB3aWxsIGJlIGNyb3NzLXJlZmVyZW5jZWQgd2l0aCB0aGVzZSBzb3VyY2VzLgotCi1TT1VSQ0VfQlJPV1NFUiAgICAgICAgID0gTk8KLQotIyBTZXR0aW5nIHRoZSBJTkxJTkVfU09VUkNFUyB0YWcgdG8gWUVTIHdpbGwgaW5jbHVkZSB0aGUgYm9keSAKLSMgb2YgZnVuY3Rpb25zIGFuZCBjbGFzc2VzIGRpcmVjdGx5IGluIHRoZSBkb2N1bWVudGF0aW9uLgotCi1JTkxJTkVfU09VUkNFUyAgICAgICAgID0gTk8KLQotIyBTZXR0aW5nIHRoZSBTVFJJUF9DT0RFX0NPTU1FTlRTIHRhZyB0byBZRVMgKHRoZSBkZWZhdWx0KSB3aWxsIGluc3RydWN0IAotIyBkb3h5Z2VuIHRvIGhpZGUgYW55IHNwZWNpYWwgY29tbWVudCBibG9ja3MgZnJvbSBnZW5lcmF0ZWQgc291cmNlIGNvZGUgCi0jIGZyYWdtZW50cy4gTm9ybWFsIEMgYW5kIEMrKyBjb21tZW50cyB3aWxsIGFsd2F5cyByZW1haW4gdmlzaWJsZS4KLQotU1RSSVBfQ09ERV9DT01NRU5UUyAgICA9IFlFUwotCi0jIElmIHRoZSBSRUZFUkVOQ0VEX0JZX1JFTEFUSU9OIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgCi0jIHRoZW4gZm9yIGVhY2ggZG9jdW1lbnRlZCBmdW5jdGlvbiBhbGwgZG9jdW1lbnRlZCAKLSMgZnVuY3Rpb25zIHJlZmVyZW5jaW5nIGl0IHdpbGwgYmUgbGlzdGVkLgotCi1SRUZFUkVOQ0VEX0JZX1JFTEFUSU9OID0gWUVTCi0KLSMgSWYgdGhlIFJFRkVSRU5DRVNfUkVMQVRJT04gdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSAKLSMgdGhlbiBmb3IgZWFjaCBkb2N1bWVudGVkIGZ1bmN0aW9uIGFsbCBkb2N1bWVudGVkIGVudGl0aWVzIAotIyBjYWxsZWQvdXNlZCBieSB0aGF0IGZ1bmN0aW9uIHdpbGwgYmUgbGlzdGVkLgotCi1SRUZFUkVOQ0VTX1JFTEFUSU9OICAgID0gWUVTCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGFscGhhYmV0aWNhbCBjbGFzcyBpbmRleAotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jIElmIHRoZSBBTFBIQUJFVElDQUxfSU5ERVggdGFnIGlzIHNldCB0byBZRVMsIGFuIGFscGhhYmV0aWNhbCBpbmRleCAKLSMgb2YgYWxsIGNvbXBvdW5kcyB3aWxsIGJlIGdlbmVyYXRlZC4gRW5hYmxlIHRoaXMgaWYgdGhlIHByb2plY3QgCi0jIGNvbnRhaW5zIGEgbG90IG9mIGNsYXNzZXMsIHN0cnVjdHMsIHVuaW9ucyBvciBpbnRlcmZhY2VzLgotCi1BTFBIQUJFVElDQUxfSU5ERVggICAgID0gTk8KLQotIyBJZiB0aGUgYWxwaGFiZXRpY2FsIGluZGV4IGlzIGVuYWJsZWQgKHNlZSBBTFBIQUJFVElDQUxfSU5ERVgpIHRoZW4gCi0jIHRoZSBDT0xTX0lOX0FMUEhBX0lOREVYIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgY29sdW1ucyAKLSMgaW4gd2hpY2ggdGhpcyBsaXN0IHdpbGwgYmUgc3BsaXQgKGNhbiBiZSBhIG51bWJlciBpbiB0aGUgcmFuZ2UgWzEuLjIwXSkKLQotQ09MU19JTl9BTFBIQV9JTkRFWCAgICA9IDUKLQotIyBJbiBjYXNlIGFsbCBjbGFzc2VzIGluIGEgcHJvamVjdCBzdGFydCB3aXRoIGEgY29tbW9uIHByZWZpeCwgYWxsIAotIyBjbGFzc2VzIHdpbGwgYmUgcHV0IHVuZGVyIHRoZSBzYW1lIGhlYWRlciBpbiB0aGUgYWxwaGFiZXRpY2FsIGluZGV4LiAKLSMgVGhlIElHTk9SRV9QUkVGSVggdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgcHJlZml4ZXMgdGhhdCAKLSMgc2hvdWxkIGJlIGlnbm9yZWQgd2hpbGUgZ2VuZXJhdGluZyB0aGUgaW5kZXggaGVhZGVycy4KLQotSUdOT1JFX1BSRUZJWCAgICAgICAgICA9IAotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBIVE1MIG91dHB1dAotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jIElmIHRoZSBHRU5FUkFURV9IVE1MIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgRG94eWdlbiB3aWxsIAotIyBnZW5lcmF0ZSBIVE1MIG91dHB1dC4KLQotR0VORVJBVEVfSFRNTCAgICAgICAgICA9IE5PCi0KLSMgVGhlIEhUTUxfT1VUUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgd2hlcmUgdGhlIEhUTUwgZG9jcyB3aWxsIGJlIHB1dC4gCi0jIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkIHRoZSB2YWx1ZSBvZiBPVVRQVVRfRElSRUNUT1JZIHdpbGwgYmUgCi0jIHB1dCBpbiBmcm9udCBvZiBpdC4gSWYgbGVmdCBibGFuayBgaHRtbCcgd2lsbCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHBhdGguCi0KLUhUTUxfT1VUUFVUICAgICAgICAgICAgPSBodG1sCi0KLSMgVGhlIEhUTUxfRklMRV9FWFRFTlNJT04gdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGZpbGUgZXh0ZW5zaW9uIGZvciAKLSMgZWFjaCBnZW5lcmF0ZWQgSFRNTCBwYWdlIChmb3IgZXhhbXBsZTogLmh0bSwucGhwLC5hc3ApLiBJZiBpdCBpcyBsZWZ0IGJsYW5rIAotIyBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgZmlsZXMgd2l0aCAuaHRtbCBleHRlbnNpb24uCi0KLUhUTUxfRklMRV9FWFRFTlNJT04gICAgPSAuaHRtbAotCi0jIFRoZSBIVE1MX0hFQURFUiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHBlcnNvbmFsIEhUTUwgaGVhZGVyIGZvciAKLSMgZWFjaCBnZW5lcmF0ZWQgSFRNTCBwYWdlLiBJZiBpdCBpcyBsZWZ0IGJsYW5rIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIAotIyBzdGFuZGFyZCBoZWFkZXIuCi0KLUhUTUxfSEVBREVSICAgICAgICAgICAgPSAKLQotIyBUaGUgSFRNTF9GT09URVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwZXJzb25hbCBIVE1MIGZvb3RlciBmb3IgCi0jIGVhY2ggZ2VuZXJhdGVkIEhUTUwgcGFnZS4gSWYgaXQgaXMgbGVmdCBibGFuayBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSAKLSMgc3RhbmRhcmQgZm9vdGVyLgotCi1IVE1MX0ZPT1RFUiAgICAgICAgICAgID0gCi0KLSMgVGhlIEhUTUxfU1RZTEVTSEVFVCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHVzZXIgZGVmaW5lZCBjYXNjYWRpbmcgCi0jIHN0eWxlIHNoZWV0IHRoYXQgaXMgdXNlZCBieSBlYWNoIEhUTUwgcGFnZS4gSXQgY2FuIGJlIHVzZWQgdG8gCi0jIGZpbmUtdHVuZSB0aGUgbG9vayBvZiB0aGUgSFRNTCBvdXRwdXQuIElmIHRoZSB0YWcgaXMgbGVmdCBibGFuayBkb3h5Z2VuIAotIyB3aWxsIGdlbmVyYXRlIGEgZGVmYXVsdCBzdHlsZSBzaGVldAotCi1IVE1MX1NUWUxFU0hFRVQgICAgICAgID0gCi0KLSMgSWYgdGhlIEhUTUxfQUxJR05fTUVNQkVSUyB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIG1lbWJlcnMgb2YgY2xhc3NlcywgCi0jIGZpbGVzIG9yIG5hbWVzcGFjZXMgd2lsbCBiZSBhbGlnbmVkIGluIEhUTUwgdXNpbmcgdGFibGVzLiBJZiBzZXQgdG8gCi0jIE5PIGEgYnVsbGV0IGxpc3Qgd2lsbCBiZSB1c2VkLgotCi1IVE1MX0FMSUdOX01FTUJFUlMgICAgID0gWUVTCi0KLSMgSWYgdGhlIEdFTkVSQVRFX0hUTUxIRUxQIHRhZyBpcyBzZXQgdG8gWUVTLCBhZGRpdGlvbmFsIGluZGV4IGZpbGVzIAotIyB3aWxsIGJlIGdlbmVyYXRlZCB0aGF0IGNhbiBiZSB1c2VkIGFzIGlucHV0IGZvciB0b29scyBsaWtlIHRoZSAKLSMgTWljcm9zb2Z0IEhUTUwgaGVscCB3b3Jrc2hvcCB0byBnZW5lcmF0ZSBhIGNvbXByZXNzZWQgSFRNTCBoZWxwIGZpbGUgKC5jaG0pIAotIyBvZiB0aGUgZ2VuZXJhdGVkIEhUTUwgZG9jdW1lbnRhdGlvbi4KLQotR0VORVJBVEVfSFRNTEhFTFAgICAgICA9IE5PCi0KLSMgSWYgdGhlIEdFTkVSQVRFX0hUTUxIRUxQIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgQ0hNX0ZJTEUgdGFnIGNhbiAKLSMgYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBmaWxlIG5hbWUgb2YgdGhlIHJlc3VsdGluZyAuY2htIGZpbGUuIFlvdSAKLSMgY2FuIGFkZCBhIHBhdGggaW4gZnJvbnQgb2YgdGhlIGZpbGUgaWYgdGhlIHJlc3VsdCBzaG91bGQgbm90IGJlIAotIyB3cml0dGVuIHRvIHRoZSBodG1sIG91dHB1dCBkaXIuCi0KLUNITV9GSUxFICAgICAgICAgICAgICAgPSAKLQotIyBJZiB0aGUgR0VORVJBVEVfSFRNTEhFTFAgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBISENfTE9DQVRJT04gdGFnIGNhbiAKLSMgYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiAoYWJzb2x1dGUgcGF0aCBpbmNsdWRpbmcgZmlsZSBuYW1lKSBvZiAKLSMgdGhlIEhUTUwgaGVscCBjb21waWxlciAoaGhjLmV4ZSkuIElmIG5vbiBlbXB0eSBkb3h5Z2VuIHdpbGwgdHJ5IHRvIHJ1biAKLSMgdGhlIGh0bWwgaGVscCBjb21waWxlciBvbiB0aGUgZ2VuZXJhdGVkIGluZGV4LmhocC4KLQotSEhDX0xPQ0FUSU9OICAgICAgICAgICA9IAotCi0jIElmIHRoZSBHRU5FUkFURV9IVE1MSEVMUCB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIEdFTkVSQVRFX0NISSBmbGFnIAotIyBjb250cm9scyBpZiBhIHNlcGFyYXRlIC5jaGkgaW5kZXggZmlsZSBpcyBnZW5lcmF0ZWQgKFlFUykgb3IgdGhhdCAKLSMgaXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBtYXN0ZXIgLmNobSBmaWxlIChOTykuCi0KLUdFTkVSQVRFX0NISSAgICAgICAgICAgPSBOTwotCi0jIElmIHRoZSBHRU5FUkFURV9IVE1MSEVMUCB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIEJJTkFSWV9UT0MgZmxhZyAKLSMgY29udHJvbHMgd2hldGhlciBhIGJpbmFyeSB0YWJsZSBvZiBjb250ZW50cyBpcyBnZW5lcmF0ZWQgKFlFUykgb3IgYSAKLSMgbm9ybWFsIHRhYmxlIG9mIGNvbnRlbnRzIChOTykgaW4gdGhlIC5jaG0gZmlsZS4KLQotQklOQVJZX1RPQyAgICAgICAgICAgICA9IE5PCi0KLSMgVGhlIFRPQ19FWFBBTkQgZmxhZyBjYW4gYmUgc2V0IHRvIFlFUyB0byBhZGQgZXh0cmEgaXRlbXMgZm9yIGdyb3VwIG1lbWJlcnMgCi0jIHRvIHRoZSBjb250ZW50cyBvZiB0aGUgSHRtbCBoZWxwIGRvY3VtZW50YXRpb24gYW5kIHRvIHRoZSB0cmVlIHZpZXcuCi0KLVRPQ19FWFBBTkQgICAgICAgICAgICAgPSBOTwotCi0jIFRoZSBESVNBQkxFX0lOREVYIHRhZyBjYW4gYmUgdXNlZCB0byB0dXJuIG9uL29mZiB0aGUgY29uZGVuc2VkIGluZGV4IGF0IAotIyB0b3Agb2YgZWFjaCBIVE1MIHBhZ2UuIFRoZSB2YWx1ZSBOTyAodGhlIGRlZmF1bHQpIGVuYWJsZXMgdGhlIGluZGV4IGFuZCAKLSMgdGhlIHZhbHVlIFlFUyBkaXNhYmxlcyBpdC4KLQotRElTQUJMRV9JTkRFWCAgICAgICAgICA9IE5PCi0KLSMgVGhpcyB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBudW1iZXIgb2YgZW51bSB2YWx1ZXMgKHJhbmdlIFsxLi4yMF0pIAotIyB0aGF0IGRveHlnZW4gd2lsbCBncm91cCBvbiBvbmUgbGluZSBpbiB0aGUgZ2VuZXJhdGVkIEhUTUwgZG9jdW1lbnRhdGlvbi4KLQotRU5VTV9WQUxVRVNfUEVSX0xJTkUgICA9IDQKLQotIyBJZiB0aGUgR0VORVJBVEVfVFJFRVZJRVcgdGFnIGlzIHNldCB0byBZRVMsIGEgc2lkZSBwYW5lbCB3aWxsIGJlCi0jIGdlbmVyYXRlZCBjb250YWluaW5nIGEgdHJlZS1saWtlIGluZGV4IHN0cnVjdHVyZSAoanVzdCBsaWtlIHRoZSBvbmUgdGhhdCAKLSMgaXMgZ2VuZXJhdGVkIGZvciBIVE1MIEhlbHApLiBGb3IgdGhpcyB0byB3b3JrIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIAotIyBKYXZhU2NyaXB0LCBESFRNTCwgQ1NTIGFuZCBmcmFtZXMgaXMgcmVxdWlyZWQgKGZvciBpbnN0YW5jZSBNb3ppbGxhLCAKLSMgTmV0c2NhcGUgNi4wKywgSW50ZXJuZXQgZXhwbG9yZXIgNS4wKywgb3IgS29ucXVlcm9yKS4gV2luZG93cyB1c2VycyBhcmUgCi0jIHByb2JhYmx5IGJldHRlciBvZmYgdXNpbmcgdGhlIEhUTUwgaGVscCBmZWF0dXJlLgotCi1HRU5FUkFURV9UUkVFVklFVyAgICAgID0gTk8KLQotIyBJZiB0aGUgdHJlZXZpZXcgaXMgZW5hYmxlZCAoc2VlIEdFTkVSQVRFX1RSRUVWSUVXKSB0aGVuIHRoaXMgdGFnIGNhbiBiZSAKLSMgdXNlZCB0byBzZXQgdGhlIGluaXRpYWwgd2lkdGggKGluIHBpeGVscykgb2YgdGhlIGZyYW1lIGluIHdoaWNoIHRoZSB0cmVlIAotIyBpcyBzaG93bi4KLQotVFJFRVZJRVdfV0lEVEggICAgICAgICA9IDI1MAotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBMYVRlWCBvdXRwdXQKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotIyBJZiB0aGUgR0VORVJBVEVfTEFURVggdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSBEb3h5Z2VuIHdpbGwgCi0jIGdlbmVyYXRlIExhdGV4IG91dHB1dC4KLQotR0VORVJBVEVfTEFURVggICAgICAgICA9IFlFUwotCi0jIFRoZSBMQVRFWF9PVVRQVVQgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGVyZSB0aGUgTGFUZVggZG9jcyB3aWxsIGJlIHB1dC4gCi0jIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkIHRoZSB2YWx1ZSBvZiBPVVRQVVRfRElSRUNUT1JZIHdpbGwgYmUgCi0jIHB1dCBpbiBmcm9udCBvZiBpdC4gSWYgbGVmdCBibGFuayBgbGF0ZXgnIHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBwYXRoLgotCi1MQVRFWF9PVVRQVVQgICAgICAgICAgID0gbGF0ZXgKLQotIyBUaGUgTEFURVhfQ01EX05BTUUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIExhVGVYIGNvbW1hbmQgbmFtZSB0byBiZSAKLSMgaW52b2tlZC4gSWYgbGVmdCBibGFuayBgbGF0ZXgnIHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBjb21tYW5kIG5hbWUuCi0KLUxBVEVYX0NNRF9OQU1FICAgICAgICAgPSBsYXRleAotCi0jIFRoZSBNQUtFSU5ERVhfQ01EX05BTUUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGNvbW1hbmQgbmFtZSB0byAKLSMgZ2VuZXJhdGUgaW5kZXggZm9yIExhVGVYLiBJZiBsZWZ0IGJsYW5rIGBtYWtlaW5kZXgnIHdpbGwgYmUgdXNlZCBhcyB0aGUgCi0jIGRlZmF1bHQgY29tbWFuZCBuYW1lLgotCi1NQUtFSU5ERVhfQ01EX05BTUUgICAgID0gbWFrZWluZGV4Ci0KLSMgSWYgdGhlIENPTVBBQ1RfTEFURVggdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiBnZW5lcmF0ZXMgbW9yZSBjb21wYWN0IAotIyBMYVRlWCBkb2N1bWVudHMuIFRoaXMgbWF5IGJlIHVzZWZ1bCBmb3Igc21hbGwgcHJvamVjdHMgYW5kIG1heSBoZWxwIHRvIAotIyBzYXZlIHNvbWUgdHJlZXMgaW4gZ2VuZXJhbC4KLQotQ09NUEFDVF9MQVRFWCAgICAgICAgICA9IE5PCi0KLSMgVGhlIFBBUEVSX1RZUEUgdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgcGFwZXIgdHlwZSB0aGF0IGlzIHVzZWQgCi0jIGJ5IHRoZSBwcmludGVyLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOiBhNCwgYTR3aWRlLCBsZXR0ZXIsIGxlZ2FsIGFuZCAKLSMgZXhlY3V0aXZlLiBJZiBsZWZ0IGJsYW5rIGE0d2lkZSB3aWxsIGJlIHVzZWQuCi0KLVBBUEVSX1RZUEUgICAgICAgICAgICAgPSBsZXR0ZXIgCi0KLSMgVGhlIEVYVFJBX1BBQ0tBR0VTIHRhZyBjYW4gYmUgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBuYW1lcyBvZiBMYVRlWCAKLSMgcGFja2FnZXMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIExhVGVYIG91dHB1dC4KLQotRVhUUkFfUEFDS0FHRVMgICAgICAgICA9IAotCi0jIFRoZSBMQVRFWF9IRUFERVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwZXJzb25hbCBMYVRlWCBoZWFkZXIgZm9yIAotIyB0aGUgZ2VuZXJhdGVkIGxhdGV4IGRvY3VtZW50LiBUaGUgaGVhZGVyIHNob3VsZCBjb250YWluIGV2ZXJ5dGhpbmcgdW50aWwgCi0jIHRoZSBmaXJzdCBjaGFwdGVyLiBJZiBpdCBpcyBsZWZ0IGJsYW5rIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIAotIyBzdGFuZGFyZCBoZWFkZXIuIE5vdGljZTogb25seSB1c2UgdGhpcyB0YWcgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIQotCi1MQVRFWF9IRUFERVIgICAgICAgICAgID0gaGVhZGVyLnRleAotCi0jIElmIHRoZSBQREZfSFlQRVJMSU5LUyB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIExhVGVYIHRoYXQgaXMgZ2VuZXJhdGVkIAotIyBpcyBwcmVwYXJlZCBmb3IgY29udmVyc2lvbiB0byBwZGYgKHVzaW5nIHBzMnBkZikuIFRoZSBwZGYgZmlsZSB3aWxsIAotIyBjb250YWluIGxpbmtzIChqdXN0IGxpa2UgdGhlIEhUTUwgb3V0cHV0KSBpbnN0ZWFkIG9mIHBhZ2UgcmVmZXJlbmNlcyAKLSMgVGhpcyBtYWtlcyB0aGUgb3V0cHV0IHN1aXRhYmxlIGZvciBvbmxpbmUgYnJvd3NpbmcgdXNpbmcgYSBwZGYgdmlld2VyLgotCi1QREZfSFlQRVJMSU5LUyAgICAgICAgID0gWUVTCi0KLSMgSWYgdGhlIFVTRV9QREZMQVRFWCB0YWcgaXMgc2V0IHRvIFlFUywgcGRmbGF0ZXggd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgCi0jIHBsYWluIGxhdGV4IGluIHRoZSBnZW5lcmF0ZWQgTWFrZWZpbGUuIFNldCB0aGlzIG9wdGlvbiB0byBZRVMgdG8gZ2V0IGEgCi0jIGhpZ2hlciBxdWFsaXR5IFBERiBkb2N1bWVudGF0aW9uLgotCi1VU0VfUERGTEFURVggICAgICAgICAgID0gWUVTCi0KLSMgSWYgdGhlIExBVEVYX0JBVENITU9ERSB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGFkZCB0aGUgXFxiYXRjaG1vZGUuIAotIyBjb21tYW5kIHRvIHRoZSBnZW5lcmF0ZWQgTGFUZVggZmlsZXMuIFRoaXMgd2lsbCBpbnN0cnVjdCBMYVRlWCB0byBrZWVwIAotIyBydW5uaW5nIGlmIGVycm9ycyBvY2N1ciwgaW5zdGVhZCBvZiBhc2tpbmcgdGhlIHVzZXIgZm9yIGhlbHAuIAotIyBUaGlzIG9wdGlvbiBpcyBhbHNvIHVzZWQgd2hlbiBnZW5lcmF0aW5nIGZvcm11bGFzIGluIEhUTUwuCi0KLUxBVEVYX0JBVENITU9ERSAgICAgICAgPSBOTwotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBSVEYgb3V0cHV0Ci0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSMgSWYgdGhlIEdFTkVSQVRFX1JURiB0YWcgaXMgc2V0IHRvIFlFUyBEb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgUlRGIG91dHB1dCAKLSMgVGhlIFJURiBvdXRwdXQgaXMgb3B0aW1pc2VkIGZvciBXb3JkIDk3IGFuZCBtYXkgbm90IGxvb2sgdmVyeSBwcmV0dHkgd2l0aCAKLSMgb3RoZXIgUlRGIHJlYWRlcnMgb3IgZWRpdG9ycy4KLQotR0VORVJBVEVfUlRGICAgICAgICAgICA9IE5PCi0KLSMgVGhlIFJURl9PVVRQVVQgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGVyZSB0aGUgUlRGIGRvY3Mgd2lsbCBiZSBwdXQuIAotIyBJZiBhIHJlbGF0aXZlIHBhdGggaXMgZW50ZXJlZCB0aGUgdmFsdWUgb2YgT1VUUFVUX0RJUkVDVE9SWSB3aWxsIGJlIAotIyBwdXQgaW4gZnJvbnQgb2YgaXQuIElmIGxlZnQgYmxhbmsgYHJ0Zicgd2lsbCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHBhdGguCi0KLVJURl9PVVRQVVQgICAgICAgICAgICAgPSBydGYKLQotIyBJZiB0aGUgQ09NUEFDVF9SVEYgdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiBnZW5lcmF0ZXMgbW9yZSBjb21wYWN0IAotIyBSVEYgZG9jdW1lbnRzLiBUaGlzIG1heSBiZSB1c2VmdWwgZm9yIHNtYWxsIHByb2plY3RzIGFuZCBtYXkgaGVscCB0byAKLSMgc2F2ZSBzb21lIHRyZWVzIGluIGdlbmVyYWwuCi0KLUNPTVBBQ1RfUlRGICAgICAgICAgICAgPSBOTwotCi0jIElmIHRoZSBSVEZfSFlQRVJMSU5LUyB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIFJURiB0aGF0IGlzIGdlbmVyYXRlZCAKLSMgd2lsbCBjb250YWluIGh5cGVybGluayBmaWVsZHMuIFRoZSBSVEYgZmlsZSB3aWxsIAotIyBjb250YWluIGxpbmtzIChqdXN0IGxpa2UgdGhlIEhUTUwgb3V0cHV0KSBpbnN0ZWFkIG9mIHBhZ2UgcmVmZXJlbmNlcy4gCi0jIFRoaXMgbWFrZXMgdGhlIG91dHB1dCBzdWl0YWJsZSBmb3Igb25saW5lIGJyb3dzaW5nIHVzaW5nIFdPUkQgb3Igb3RoZXIgCi0jIHByb2dyYW1zIHdoaWNoIHN1cHBvcnQgdGhvc2UgZmllbGRzLiAKLSMgTm90ZTogd29yZHBhZCAod3JpdGUpIGFuZCBvdGhlcnMgZG8gbm90IHN1cHBvcnQgbGlua3MuCi0KLVJURl9IWVBFUkxJTktTICAgICAgICAgPSBOTwotCi0jIExvYWQgc3R5bGVzaGVldCBkZWZpbml0aW9ucyBmcm9tIGZpbGUuIFN5bnRheCBpcyBzaW1pbGFyIHRvIGRveHlnZW4ncyAKLSMgY29uZmlnIGZpbGUsIGkuZS4gYSBzZXJpZXMgb2YgYXNzaWdtZW50cy4gWW91IG9ubHkgaGF2ZSB0byBwcm92aWRlIAotIyByZXBsYWNlbWVudHMsIG1pc3NpbmcgZGVmaW5pdGlvbnMgYXJlIHNldCB0byB0aGVpciBkZWZhdWx0IHZhbHVlLgotCi1SVEZfU1RZTEVTSEVFVF9GSUxFICAgID0gCi0KLSMgU2V0IG9wdGlvbmFsIHZhcmlhYmxlcyB1c2VkIGluIHRoZSBnZW5lcmF0aW9uIG9mIGFuIHJ0ZiBkb2N1bWVudC4gCi0jIFN5bnRheCBpcyBzaW1pbGFyIHRvIGRveHlnZW4ncyBjb25maWcgZmlsZS4KLQotUlRGX0VYVEVOU0lPTlNfRklMRSAgICA9IAotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBtYW4gcGFnZSBvdXRwdXQKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotIyBJZiB0aGUgR0VORVJBVEVfTUFOIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgRG94eWdlbiB3aWxsIAotIyBnZW5lcmF0ZSBtYW4gcGFnZXMKLQotR0VORVJBVEVfTUFOICAgICAgICAgICA9IE5PCi0KLSMgVGhlIE1BTl9PVVRQVVQgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGVyZSB0aGUgbWFuIHBhZ2VzIHdpbGwgYmUgcHV0LiAKLSMgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZSAKLSMgcHV0IGluIGZyb250IG9mIGl0LiBJZiBsZWZ0IGJsYW5rIGBtYW4nIHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBwYXRoLgotCi1NQU5fT1VUUFVUICAgICAgICAgICAgID0gbWFuCi0KLSMgVGhlIE1BTl9FWFRFTlNJT04gdGFnIGRldGVybWluZXMgdGhlIGV4dGVuc2lvbiB0aGF0IGlzIGFkZGVkIHRvIAotIyB0aGUgZ2VuZXJhdGVkIG1hbiBwYWdlcyAoZGVmYXVsdCBpcyB0aGUgc3Vicm91dGluZSdzIHNlY3Rpb24gLjMpCi0KLU1BTl9FWFRFTlNJT04gICAgICAgICAgPSAuMwotCi0jIElmIHRoZSBNQU5fTElOS1MgdGFnIGlzIHNldCB0byBZRVMgYW5kIERveHlnZW4gZ2VuZXJhdGVzIG1hbiBvdXRwdXQsIAotIyB0aGVuIGl0IHdpbGwgZ2VuZXJhdGUgb25lIGFkZGl0aW9uYWwgbWFuIGZpbGUgZm9yIGVhY2ggZW50aXR5IAotIyBkb2N1bWVudGVkIGluIHRoZSByZWFsIG1hbiBwYWdlKHMpLiBUaGVzZSBhZGRpdGlvbmFsIGZpbGVzIAotIyBvbmx5IHNvdXJjZSB0aGUgcmVhbCBtYW4gcGFnZSwgYnV0IHdpdGhvdXQgdGhlbSB0aGUgbWFuIGNvbW1hbmQgCi0jIHdvdWxkIGJlIHVuYWJsZSB0byBmaW5kIHRoZSBjb3JyZWN0IHBhZ2UuIFRoZSBkZWZhdWx0IGlzIE5PLgotCi1NQU5fTElOS1MgICAgICAgICAgICAgID0gTk8KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgWE1MIG91dHB1dAotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jIElmIHRoZSBHRU5FUkFURV9YTUwgdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiB3aWxsIAotIyBnZW5lcmF0ZSBhbiBYTUwgZmlsZSB0aGF0IGNhcHR1cmVzIHRoZSBzdHJ1Y3R1cmUgb2YgCi0jIHRoZSBjb2RlIGluY2x1ZGluZyBhbGwgZG9jdW1lbnRhdGlvbi4gTm90ZSB0aGF0IHRoaXMgCi0jIGZlYXR1cmUgaXMgc3RpbGwgZXhwZXJpbWVudGFsIGFuZCBpbmNvbXBsZXRlIGF0IHRoZSAKLSMgbW9tZW50LgotCi1HRU5FUkFURV9YTUwgICAgICAgICAgID0gTk8KLQotIyBUaGUgWE1MX1NDSEVNQSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhbiBYTUwgc2NoZW1hLCAKLSMgd2hpY2ggY2FuIGJlIHVzZWQgYnkgYSB2YWxpZGF0aW5nIFhNTCBwYXJzZXIgdG8gY2hlY2sgdGhlIAotIyBzeW50YXggb2YgdGhlIFhNTCBmaWxlcy4KLQotWE1MX1NDSEVNQSAgICAgICAgICAgICA9IAotCi0jIFRoZSBYTUxfRFREIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGFuIFhNTCBEVEQsIAotIyB3aGljaCBjYW4gYmUgdXNlZCBieSBhIHZhbGlkYXRpbmcgWE1MIHBhcnNlciB0byBjaGVjayB0aGUgCi0jIHN5bnRheCBvZiB0aGUgWE1MIGZpbGVzLgotCi1YTUxfRFREICAgICAgICAgICAgICAgID0gCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgQXV0b0dlbiBEZWZpbml0aW9ucyBvdXRwdXQKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotIyBJZiB0aGUgR0VORVJBVEVfQVVUT0dFTl9ERUYgdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiB3aWxsIAotIyBnZW5lcmF0ZSBhbiBBdXRvR2VuIERlZmluaXRpb25zIChzZWUgYXV0b2dlbi5zZi5uZXQpIGZpbGUgCi0jIHRoYXQgY2FwdHVyZXMgdGhlIHN0cnVjdHVyZSBvZiB0aGUgY29kZSBpbmNsdWRpbmcgYWxsIAotIyBkb2N1bWVudGF0aW9uLiBOb3RlIHRoYXQgdGhpcyBmZWF0dXJlIGlzIHN0aWxsIGV4cGVyaW1lbnRhbCAKLSMgYW5kIGluY29tcGxldGUgYXQgdGhlIG1vbWVudC4KLQotR0VORVJBVEVfQVVUT0dFTl9ERUYgICA9IE5PCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIFBlcmwgbW9kdWxlIG91dHB1dAotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jIElmIHRoZSBHRU5FUkFURV9QRVJMTU9EIHRhZyBpcyBzZXQgdG8gWUVTIERveHlnZW4gd2lsbCAKLSMgZ2VuZXJhdGUgYSBQZXJsIG1vZHVsZSBmaWxlIHRoYXQgY2FwdHVyZXMgdGhlIHN0cnVjdHVyZSBvZiAKLSMgdGhlIGNvZGUgaW5jbHVkaW5nIGFsbCBkb2N1bWVudGF0aW9uLiBOb3RlIHRoYXQgdGhpcyAKLSMgZmVhdHVyZSBpcyBzdGlsbCBleHBlcmltZW50YWwgYW5kIGluY29tcGxldGUgYXQgdGhlIAotIyBtb21lbnQuCi0KLUdFTkVSQVRFX1BFUkxNT0QgICAgICAgPSBOTwotCi0jIElmIHRoZSBQRVJMTU9EX0xBVEVYIHRhZyBpcyBzZXQgdG8gWUVTIERveHlnZW4gd2lsbCBnZW5lcmF0ZSAKLSMgdGhlIG5lY2Vzc2FyeSBNYWtlZmlsZSBydWxlcywgUGVybCBzY3JpcHRzIGFuZCBMYVRlWCBjb2RlIHRvIGJlIGFibGUgCi0jIHRvIGdlbmVyYXRlIFBERiBhbmQgRFZJIG91dHB1dCBmcm9tIHRoZSBQZXJsIG1vZHVsZSBvdXRwdXQuCi0KLVBFUkxNT0RfTEFURVggICAgICAgICAgPSBOTwotCi0jIElmIHRoZSBQRVJMTU9EX1BSRVRUWSB0YWcgaXMgc2V0IHRvIFlFUyB0aGUgUGVybCBtb2R1bGUgb3V0cHV0IHdpbGwgYmUgCi0jIG5pY2VseSBmb3JtYXR0ZWQgc28gaXQgY2FuIGJlIHBhcnNlZCBieSBhIGh1bWFuIHJlYWRlci4gIFRoaXMgaXMgdXNlZnVsIAotIyBpZiB5b3Ugd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgaXMgZ29pbmcgb24uICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhpcyAKLSMgdGFnIGlzIHNldCB0byBOTyB0aGUgc2l6ZSBvZiB0aGUgUGVybCBtb2R1bGUgb3V0cHV0IHdpbGwgYmUgbXVjaCBzbWFsbGVyIAotIyBhbmQgUGVybCB3aWxsIHBhcnNlIGl0IGp1c3QgdGhlIHNhbWUuCi0KLVBFUkxNT0RfUFJFVFRZICAgICAgICAgPSBZRVMKLQotIyBUaGUgbmFtZXMgb2YgdGhlIG1ha2UgdmFyaWFibGVzIGluIHRoZSBnZW5lcmF0ZWQgZG94eXJ1bGVzLm1ha2UgZmlsZSAKLSMgYXJlIHByZWZpeGVkIHdpdGggdGhlIHN0cmluZyBjb250YWluZWQgaW4gUEVSTE1PRF9NQUtFVkFSX1BSRUZJWC4gCi0jIFRoaXMgaXMgdXNlZnVsIHNvIGRpZmZlcmVudCBkb3h5cnVsZXMubWFrZSBmaWxlcyBpbmNsdWRlZCBieSB0aGUgc2FtZSAKLSMgTWFrZWZpbGUgZG9uJ3Qgb3ZlcndyaXRlIGVhY2ggb3RoZXIncyB2YXJpYWJsZXMuCi0KLVBFUkxNT0RfTUFLRVZBUl9QUkVGSVggPSAKLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgcHJlcHJvY2Vzc29yICAgCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSMgSWYgdGhlIEVOQUJMRV9QUkVQUk9DRVNTSU5HIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgRG94eWdlbiB3aWxsIAotIyBldmFsdWF0ZSBhbGwgQy1wcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBmb3VuZCBpbiB0aGUgc291cmNlcyBhbmQgaW5jbHVkZSAKLSMgZmlsZXMuCi0KLUVOQUJMRV9QUkVQUk9DRVNTSU5HICAgPSBZRVMKLQotIyBJZiB0aGUgTUFDUk9fRVhQQU5TSU9OIHRhZyBpcyBzZXQgdG8gWUVTIERveHlnZW4gd2lsbCBleHBhbmQgYWxsIG1hY3JvIAotIyBuYW1lcyBpbiB0aGUgc291cmNlIGNvZGUuIElmIHNldCB0byBOTyAodGhlIGRlZmF1bHQpIG9ubHkgY29uZGl0aW9uYWwgCi0jIGNvbXBpbGF0aW9uIHdpbGwgYmUgcGVyZm9ybWVkLiBNYWNybyBleHBhbnNpb24gY2FuIGJlIGRvbmUgaW4gYSBjb250cm9sbGVkIAotIyB3YXkgYnkgc2V0dGluZyBFWFBBTkRfT05MWV9QUkVERUYgdG8gWUVTLgotCi1NQUNST19FWFBBTlNJT04gICAgICAgID0gTk8KLQotIyBJZiB0aGUgRVhQQU5EX09OTFlfUFJFREVGIGFuZCBNQUNST19FWFBBTlNJT04gdGFncyBhcmUgYm90aCBzZXQgdG8gWUVTIAotIyB0aGVuIHRoZSBtYWNybyBleHBhbnNpb24gaXMgbGltaXRlZCB0byB0aGUgbWFjcm9zIHNwZWNpZmllZCB3aXRoIHRoZSAKLSMgUFJFREVGSU5FRCBhbmQgRVhQQU5EX0FTX1BSRURFRklORUQgdGFncy4KLQotRVhQQU5EX09OTFlfUFJFREVGICAgICA9IE5PCi0KLSMgSWYgdGhlIFNFQVJDSF9JTkNMVURFUyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIHRoZSBpbmNsdWRlcyBmaWxlcyAKLSMgaW4gdGhlIElOQ0xVREVfUEFUSCAoc2VlIGJlbG93KSB3aWxsIGJlIHNlYXJjaCBpZiBhICNpbmNsdWRlIGlzIGZvdW5kLgotCi1TRUFSQ0hfSU5DTFVERVMgICAgICAgID0gWUVTCi0KLSMgVGhlIElOQ0xVREVfUEFUSCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBkaXJlY3RvcmllcyB0aGF0IAotIyBjb250YWluIGluY2x1ZGUgZmlsZXMgdGhhdCBhcmUgbm90IGlucHV0IGZpbGVzIGJ1dCBzaG91bGQgYmUgcHJvY2Vzc2VkIGJ5IAotIyB0aGUgcHJlcHJvY2Vzc29yLgotCi1JTkNMVURFX1BBVEggICAgICAgICAgID0gCi0KLSMgWW91IGNhbiB1c2UgdGhlIElOQ0xVREVfRklMRV9QQVRURVJOUyB0YWcgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSB3aWxkY2FyZCAKLSMgcGF0dGVybnMgKGxpa2UgKi5oIGFuZCAqLmhwcCkgdG8gZmlsdGVyIG91dCB0aGUgaGVhZGVyLWZpbGVzIGluIHRoZSAKLSMgZGlyZWN0b3JpZXMuIElmIGxlZnQgYmxhbmssIHRoZSBwYXR0ZXJucyBzcGVjaWZpZWQgd2l0aCBGSUxFX1BBVFRFUk5TIHdpbGwgCi0jIGJlIHVzZWQuCi0KLUlOQ0xVREVfRklMRV9QQVRURVJOUyAgPSAKLQotIyBUaGUgUFJFREVGSU5FRCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBtYWNybyBuYW1lcyB0aGF0IAotIyBhcmUgZGVmaW5lZCBiZWZvcmUgdGhlIHByZXByb2Nlc3NvciBpcyBzdGFydGVkIChzaW1pbGFyIHRvIHRoZSAtRCBvcHRpb24gb2YgCi0jIGdjYykuIFRoZSBhcmd1bWVudCBvZiB0aGUgdGFnIGlzIGEgbGlzdCBvZiBtYWNyb3Mgb2YgdGhlIGZvcm06IG5hbWUgCi0jIG9yIG5hbWU9ZGVmaW5pdGlvbiAobm8gc3BhY2VzKS4gSWYgdGhlIGRlZmluaXRpb24gYW5kIHRoZSA9IGFyZSAKLSMgb21pdHRlZCA9MSBpcyBhc3N1bWVkLgotCi1QUkVERUZJTkVEICAgICAgICAgICAgID0gCi0KLSMgSWYgdGhlIE1BQ1JPX0VYUEFOU0lPTiBhbmQgRVhQQU5EX09OTFlfUFJFREVGIHRhZ3MgYXJlIHNldCB0byBZRVMgdGhlbiAKLSMgdGhpcyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGxpc3Qgb2YgbWFjcm8gbmFtZXMgdGhhdCBzaG91bGQgYmUgZXhwYW5kZWQuIAotIyBUaGUgbWFjcm8gZGVmaW5pdGlvbiB0aGF0IGlzIGZvdW5kIGluIHRoZSBzb3VyY2VzIHdpbGwgYmUgdXNlZC4gCi0jIFVzZSB0aGUgUFJFREVGSU5FRCB0YWcgaWYgeW91IHdhbnQgdG8gdXNlIGEgZGlmZmVyZW50IG1hY3JvIGRlZmluaXRpb24uCi0KLUVYUEFORF9BU19ERUZJTkVEICAgICAgPSAKLQotIyBJZiB0aGUgU0tJUF9GVU5DVElPTl9NQUNST1MgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSB0aGVuIAotIyBkb3h5Z2VuJ3MgcHJlcHJvY2Vzc29yIHdpbGwgcmVtb3ZlIGFsbCBmdW5jdGlvbi1saWtlIG1hY3JvcyB0aGF0IGFyZSBhbG9uZSAKLSMgb24gYSBsaW5lLCBoYXZlIGFuIGFsbCB1cHBlcmNhc2UgbmFtZSwgYW5kIGRvIG5vdCBlbmQgd2l0aCBhIHNlbWljb2xvbi4gU3VjaCAKLSMgZnVuY3Rpb24gbWFjcm9zIGFyZSB0eXBpY2FsbHkgdXNlZCBmb3IgYm9pbGVyLXBsYXRlIGNvZGUsIGFuZCB3aWxsIGNvbmZ1c2UgdGhlIAotIyBwYXJzZXIgaWYgbm90IHJlbW92ZWQuCi0KLVNLSVBfRlVOQ1RJT05fTUFDUk9TICAgPSBZRVMKLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDb25maWd1cmF0aW9uOjphZGR0aW9ucyByZWxhdGVkIHRvIGV4dGVybmFsIHJlZmVyZW5jZXMgICAKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotIyBUaGUgVEFHRklMRVMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgdGFnZmlsZXMuCi0KLVRBR0ZJTEVTICAgICAgICAgICAgICAgPSAKLQotIyBXaGVuIGEgZmlsZSBuYW1lIGlzIHNwZWNpZmllZCBhZnRlciBHRU5FUkFURV9UQUdGSUxFLCBkb3h5Z2VuIHdpbGwgY3JlYXRlIAotIyBhIHRhZyBmaWxlIHRoYXQgaXMgYmFzZWQgb24gdGhlIGlucHV0IGZpbGVzIGl0IHJlYWRzLgotCi1HRU5FUkFURV9UQUdGSUxFICAgICAgID0gCi0KLSMgSWYgdGhlIEFMTEVYVEVSTkFMUyB0YWcgaXMgc2V0IHRvIFlFUyBhbGwgZXh0ZXJuYWwgY2xhc3NlcyB3aWxsIGJlIGxpc3RlZCAKLSMgaW4gdGhlIGNsYXNzIGluZGV4LiBJZiBzZXQgdG8gTk8gb25seSB0aGUgaW5oZXJpdGVkIGV4dGVybmFsIGNsYXNzZXMgCi0jIHdpbGwgYmUgbGlzdGVkLgotCi1BTExFWFRFUk5BTFMgICAgICAgICAgID0gTk8KLQotIyBJZiB0aGUgRVhURVJOQUxfR1JPVVBTIHRhZyBpcyBzZXQgdG8gWUVTIGFsbCBleHRlcm5hbCBncm91cHMgd2lsbCBiZSBsaXN0ZWQgCi0jIGluIHRoZSBtb2R1bGVzIGluZGV4LiBJZiBzZXQgdG8gTk8sIG9ubHkgdGhlIGN1cnJlbnQgcHJvamVjdCdzIGdyb3VwcyB3aWxsIAotIyBiZSBsaXN0ZWQuCi0KLUVYVEVSTkFMX0dST1VQUyAgICAgICAgPSBZRVMKLQotIyBUaGUgUEVSTF9QQVRIIHNob3VsZCBiZSB0aGUgYWJzb2x1dGUgcGF0aCBhbmQgbmFtZSBvZiB0aGUgcGVybCBzY3JpcHQgCi0jIGludGVycHJldGVyIChpLmUuIHRoZSByZXN1bHQgb2YgYHdoaWNoIHBlcmwnKS4KLQotUEVSTF9QQVRIICAgICAgICAgICAgICA9IC91c3IvYmluL3BlcmwKLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgZG90IHRvb2wgICAKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotIyBJZiB0aGUgQ0xBU1NfRElBR1JBTVMgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSBEb3h5Z2VuIHdpbGwgCi0jIGdlbmVyYXRlIGEgaW5oZXJpdGFuY2UgZGlhZ3JhbSAoaW4gSHRtbCwgUlRGIGFuZCBMYVRlWCkgZm9yIGNsYXNzZXMgd2l0aCBiYXNlIG9yIAotIyBzdXBlciBjbGFzc2VzLiBTZXR0aW5nIHRoZSB0YWcgdG8gTk8gdHVybnMgdGhlIGRpYWdyYW1zIG9mZi4gTm90ZSB0aGF0IHRoaXMgCi0jIG9wdGlvbiBpcyBzdXBlcmNlZGVkIGJ5IHRoZSBIQVZFX0RPVCBvcHRpb24gYmVsb3cuIFRoaXMgaXMgb25seSBhIGZhbGxiYWNrLiBJdCBpcyAKLSMgcmVjb21tZW5kZWQgdG8gaW5zdGFsbCBhbmQgdXNlIGRvdCwgc2luY2UgaXQgeWllbGQgbW9yZSBwb3dlcmZ1bCBncmFwaHMuCi0KLUNMQVNTX0RJQUdSQU1TICAgICAgICAgPSBZRVMKLQotIyBJZiBzZXQgdG8gWUVTLCB0aGUgaW5oZXJpdGFuY2UgYW5kIGNvbGxhYm9yYXRpb24gZ3JhcGhzIHdpbGwgaGlkZSAKLSMgaW5oZXJpdGFuY2UgYW5kIHVzYWdlIHJlbGF0aW9ucyBpZiB0aGUgdGFyZ2V0IGlzIHVuZG9jdW1lbnRlZCAKLSMgb3IgaXMgbm90IGEgY2xhc3MuCi0KLUhJREVfVU5ET0NfUkVMQVRJT05TICAgPSBZRVMKLQotIyBJZiB5b3Ugc2V0IHRoZSBIQVZFX0RPVCB0YWcgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGFzc3VtZSB0aGUgZG90IHRvb2wgaXMgCi0jIGF2YWlsYWJsZSBmcm9tIHRoZSBwYXRoLiBUaGlzIHRvb2wgaXMgcGFydCBvZiBHcmFwaHZpeiwgYSBncmFwaCB2aXN1YWxpemF0aW9uIAotIyB0b29sa2l0IGZyb20gQVQmVCBhbmQgTHVjZW50IEJlbGwgTGFicy4gVGhlIG90aGVyIG9wdGlvbnMgaW4gdGhpcyBzZWN0aW9uIAotIyBoYXZlIG5vIGVmZmVjdCBpZiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gTk8gKHRoZSBkZWZhdWx0KQotCi1IQVZFX0RPVCAgICAgICAgICAgICAgID0gTk8KLQotIyBJZiB0aGUgQ0xBU1NfR1JBUEggYW5kIEhBVkVfRE9UIHRhZ3MgYXJlIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIAotIyB3aWxsIGdlbmVyYXRlIGEgZ3JhcGggZm9yIGVhY2ggZG9jdW1lbnRlZCBjbGFzcyBzaG93aW5nIHRoZSBkaXJlY3QgYW5kIAotIyBpbmRpcmVjdCBpbmhlcml0YW5jZSByZWxhdGlvbnMuIFNldHRpbmcgdGhpcyB0YWcgdG8gWUVTIHdpbGwgZm9yY2UgdGhlIAotIyB0aGUgQ0xBU1NfRElBR1JBTVMgdGFnIHRvIE5PLgotCi1DTEFTU19HUkFQSCAgICAgICAgICAgID0gWUVTCi0KLSMgSWYgdGhlIENPTExBQk9SQVRJT05fR1JBUEggYW5kIEhBVkVfRE9UIHRhZ3MgYXJlIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIAotIyB3aWxsIGdlbmVyYXRlIGEgZ3JhcGggZm9yIGVhY2ggZG9jdW1lbnRlZCBjbGFzcyBzaG93aW5nIHRoZSBkaXJlY3QgYW5kIAotIyBpbmRpcmVjdCBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbmNpZXMgKGluaGVyaXRhbmNlLCBjb250YWlubWVudCwgYW5kIAotIyBjbGFzcyByZWZlcmVuY2VzIHZhcmlhYmxlcykgb2YgdGhlIGNsYXNzIHdpdGggb3RoZXIgZG9jdW1lbnRlZCBjbGFzc2VzLgotCi1DT0xMQUJPUkFUSU9OX0dSQVBIICAgID0gWUVTCi0KLSMgSWYgc2V0IHRvIFlFUywgdGhlIGluaGVyaXRhbmNlIGFuZCBjb2xsYWJvcmF0aW9uIGdyYXBocyB3aWxsIHNob3cgdGhlIAotIyByZWxhdGlvbnMgYmV0d2VlbiB0ZW1wbGF0ZXMgYW5kIHRoZWlyIGluc3RhbmNlcy4KLQotVEVNUExBVEVfUkVMQVRJT05TICAgICA9IFlFUwotCi0jIElmIHRoZSBFTkFCTEVfUFJFUFJPQ0VTU0lORywgU0VBUkNIX0lOQ0xVREVTLCBJTkNMVURFX0dSQVBILCBhbmQgSEFWRV9ET1QgCi0jIHRhZ3MgYXJlIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBncmFwaCBmb3IgZWFjaCBkb2N1bWVudGVkIAotIyBmaWxlIHNob3dpbmcgdGhlIGRpcmVjdCBhbmQgaW5kaXJlY3QgaW5jbHVkZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGZpbGUgd2l0aCAKLSMgb3RoZXIgZG9jdW1lbnRlZCBmaWxlcy4KLQotSU5DTFVERV9HUkFQSCAgICAgICAgICA9IFlFUwotCi0jIElmIHRoZSBFTkFCTEVfUFJFUFJPQ0VTU0lORywgU0VBUkNIX0lOQ0xVREVTLCBJTkNMVURFRF9CWV9HUkFQSCwgYW5kIAotIyBIQVZFX0RPVCB0YWdzIGFyZSBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgZ3JhcGggZm9yIGVhY2ggCi0jIGRvY3VtZW50ZWQgaGVhZGVyIGZpbGUgc2hvd2luZyB0aGUgZG9jdW1lbnRlZCBmaWxlcyB0aGF0IGRpcmVjdGx5IG9yIAotIyBpbmRpcmVjdGx5IGluY2x1ZGUgdGhpcyBmaWxlLgotCi1JTkNMVURFRF9CWV9HUkFQSCAgICAgID0gWUVTCi0KLSMgSWYgdGhlIEdSQVBISUNBTF9ISUVSQVJDSFkgYW5kIEhBVkVfRE9UIHRhZ3MgYXJlIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIAotIyB3aWxsIGdyYXBoaWNhbCBoaWVyYXJjaHkgb2YgYWxsIGNsYXNzZXMgaW5zdGVhZCBvZiBhIHRleHR1YWwgb25lLgotCi1HUkFQSElDQUxfSElFUkFSQ0hZICAgID0gWUVTCi0KLSMgVGhlIERPVF9JTUFHRV9GT1JNQVQgdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgaW1hZ2UgZm9ybWF0IG9mIHRoZSBpbWFnZXMgCi0jIGdlbmVyYXRlZCBieSBkb3QuIFBvc3NpYmxlIHZhbHVlcyBhcmUgcG5nLCBqcGcsIG9yIGdpZgotIyBJZiBsZWZ0IGJsYW5rIHBuZyB3aWxsIGJlIHVzZWQuCi0KLURPVF9JTUFHRV9GT1JNQVQgICAgICAgPSBwbmcKLQotIyBUaGUgdGFnIERPVF9QQVRIIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIHBhdGggd2hlcmUgdGhlIGRvdCB0b29sIGNhbiBiZSAKLSMgZm91bmQuIElmIGxlZnQgYmxhbmssIGl0IGlzIGFzc3VtZWQgdGhlIGRvdCB0b29sIGNhbiBiZSBmb3VuZCBvbiB0aGUgcGF0aC4KLQotRE9UX1BBVEggICAgICAgICAgICAgICA9IAotCi0jIFRoZSBET1RGSUxFX0RJUlMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgZGlyZWN0b3JpZXMgdGhhdCAKLSMgY29udGFpbiBkb3QgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gKHNlZSB0aGUgCi0jIFxkb3RmaWxlIGNvbW1hbmQpLgotCi1ET1RGSUxFX0RJUlMgICAgICAgICAgID0gCi0KLSMgVGhlIE1BWF9ET1RfR1JBUEhfV0lEVEggdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgbWF4aW11bSBhbGxvd2VkIHdpZHRoIAotIyAoaW4gcGl4ZWxzKSBvZiB0aGUgZ3JhcGhzIGdlbmVyYXRlZCBieSBkb3QuIElmIGEgZ3JhcGggYmVjb21lcyBsYXJnZXIgdGhhbiAKLSMgdGhpcyB2YWx1ZSwgZG94eWdlbiB3aWxsIHRyeSB0byB0cnVuY2F0ZSB0aGUgZ3JhcGgsIHNvIHRoYXQgaXQgZml0cyB3aXRoaW4gCi0jIHRoZSBzcGVjaWZpZWQgY29uc3RyYWludC4gQmV3YXJlIHRoYXQgbW9zdCBicm93c2VycyBjYW5ub3QgY29wZSB3aXRoIHZlcnkgCi0jIGxhcmdlIGltYWdlcy4KLQotTUFYX0RPVF9HUkFQSF9XSURUSCAgICA9IDEwMjQKLQotIyBUaGUgTUFYX0RPVF9HUkFQSF9IRUlHSFQgdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgbWF4aW11bSBhbGxvd3MgaGVpZ2h0IAotIyAoaW4gcGl4ZWxzKSBvZiB0aGUgZ3JhcGhzIGdlbmVyYXRlZCBieSBkb3QuIElmIGEgZ3JhcGggYmVjb21lcyBsYXJnZXIgdGhhbiAKLSMgdGhpcyB2YWx1ZSwgZG94eWdlbiB3aWxsIHRyeSB0byB0cnVuY2F0ZSB0aGUgZ3JhcGgsIHNvIHRoYXQgaXQgZml0cyB3aXRoaW4gCi0jIHRoZSBzcGVjaWZpZWQgY29uc3RyYWludC4gQmV3YXJlIHRoYXQgbW9zdCBicm93c2VycyBjYW5ub3QgY29wZSB3aXRoIHZlcnkgCi0jIGxhcmdlIGltYWdlcy4KLQotTUFYX0RPVF9HUkFQSF9IRUlHSFQgICA9IDEwMjQKLQotIyBJZiB0aGUgR0VORVJBVEVfTEVHRU5EIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgRG94eWdlbiB3aWxsIAotIyBnZW5lcmF0ZSBhIGxlZ2VuZCBwYWdlIGV4cGxhaW5pbmcgdGhlIG1lYW5pbmcgb2YgdGhlIHZhcmlvdXMgYm94ZXMgYW5kIAotIyBhcnJvd3MgaW4gdGhlIGRvdCBnZW5lcmF0ZWQgZ3JhcGhzLgotCi1HRU5FUkFURV9MRUdFTkQgICAgICAgID0gWUVTCi0KLSMgSWYgdGhlIERPVF9DTEVBTlVQIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgRG94eWdlbiB3aWxsIAotIyByZW1vdmUgdGhlIGludGVybWVkYXRlIGRvdCBmaWxlcyB0aGF0IGFyZSB1c2VkIHRvIGdlbmVyYXRlIAotIyB0aGUgdmFyaW91cyBncmFwaHMuCi0KLURPVF9DTEVBTlVQICAgICAgICAgICAgPSBZRVMKLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDb25maWd1cmF0aW9uOjphZGR0aW9ucyByZWxhdGVkIHRvIHRoZSBzZWFyY2ggZW5naW5lICAgCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSMgVGhlIFNFQVJDSEVOR0lORSB0YWcgc3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IGEgc2VhcmNoIGVuZ2luZSBzaG91bGQgYmUgCi0jIHVzZWQuIElmIHNldCB0byBOTyB0aGUgdmFsdWVzIG9mIGFsbCB0YWdzIGJlbG93IHRoaXMgb25lIHdpbGwgYmUgaWdub3JlZC4KLQotU0VBUkNIRU5HSU5FICAgICAgICAgICA9IE5PCi0KLSMgVGhlIENHSV9OQU1FIHRhZyBzaG91bGQgYmUgdGhlIG5hbWUgb2YgdGhlIENHSSBzY3JpcHQgdGhhdCAKLSMgc3RhcnRzIHRoZSBzZWFyY2ggZW5naW5lIChkb3h5c2VhcmNoKSB3aXRoIHRoZSBjb3JyZWN0IHBhcmFtZXRlcnMuIAotIyBBIHNjcmlwdCB3aXRoIHRoaXMgbmFtZSB3aWxsIGJlIGdlbmVyYXRlZCBieSBkb3h5Z2VuLgotCi1DR0lfTkFNRSAgICAgICAgICAgICAgID0gc2VhcmNoLmNnaQotCi0jIFRoZSBDR0lfVVJMIHRhZyBzaG91bGQgYmUgdGhlIGFic29sdXRlIFVSTCB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSAKLSMgY2dpIGJpbmFyaWVzIGFyZSBsb2NhdGVkLiBTZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgeW91ciBodHRwIGRhZW1vbiBmb3IgCi0jIGRldGFpbHMuCi0KLUNHSV9VUkwgICAgICAgICAgICAgICAgPSAKLQotIyBUaGUgRE9DX1VSTCB0YWcgc2hvdWxkIGJlIHRoZSBhYnNvbHV0ZSBVUkwgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgCi0jIGRvY3VtZW50YXRpb24gaXMgbG9jYXRlZC4gSWYgbGVmdCBibGFuayB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgCi0jIGRvY3VtZW50YXRpb24sIHdpdGggZmlsZTovLyBwcmVwZW5kZWQgdG8gaXQsIHdpbGwgYmUgdXNlZC4KLQotRE9DX1VSTCAgICAgICAgICAgICAgICA9IAotCi0jIFRoZSBET0NfQUJTUEFUSCB0YWcgc2hvdWxkIGJlIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIAotIyBkb2N1bWVudGF0aW9uIGlzIGxvY2F0ZWQuIElmIGxlZnQgYmxhbmsgdGhlIGRpcmVjdG9yeSBvbiB0aGUgbG9jYWwgbWFjaGluZSAKLSMgd2lsbCBiZSB1c2VkLgotCi1ET0NfQUJTUEFUSCAgICAgICAgICAgID0gCi0KLSMgVGhlIEJJTl9BQlNQQVRIIHRhZyBtdXN0IHBvaW50IHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGRveHlzZWFyY2ggYmluYXJ5IAotIyBpcyBpbnN0YWxsZWQuCi0KLUJJTl9BQlNQQVRIICAgICAgICAgICAgPSAvdXNyL2xvY2FsL2Jpbi8KLQotIyBUaGUgRVhUX0RPQ19QQVRIUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBwYXRocyB0byAKLSMgZG9jdW1lbnRhdGlvbiBnZW5lcmF0ZWQgZm9yIG90aGVyIHByb2plY3RzLiBUaGlzIGFsbG93cyBkb3h5c2VhcmNoIHRvIHNlYXJjaCAKLSMgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZXNlIHByb2plY3RzIGFzIHdlbGwuCi0KLUVYVF9ET0NfUEFUSFMgICAgICAgICAgPSAKZGlmZiAtLWdpdCBhL2RvYy9Eb3h5ZmlsZS5pbiBiL2RvYy9Eb3h5ZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjlhMDNkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL0RveHlmaWxlLmluCkBAIC0wLDAgKzEsMjQxMiBAQAorIyBEb3h5ZmlsZSAxLjguMTEKKworIyBUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBzZXR0aW5ncyB0byBiZSB1c2VkIGJ5IHRoZSBkb2N1bWVudGF0aW9uIHN5c3RlbQorIyBkb3h5Z2VuICh3d3cuZG94eWdlbi5vcmcpIGZvciBhIHByb2plY3QuCisjCisjIEFsbCB0ZXh0IGFmdGVyIGEgZG91YmxlIGhhc2ggKCMjKSBpcyBjb25zaWRlcmVkIGEgY29tbWVudCBhbmQgaXMgcGxhY2VkIGluCisjIGZyb250IG9mIHRoZSBUQUcgaXQgaXMgcHJlY2VkaW5nLgorIworIyBBbGwgdGV4dCBhZnRlciBhIHNpbmdsZSBoYXNoICgjKSBpcyBjb25zaWRlcmVkIGEgY29tbWVudCBhbmQgd2lsbCBiZSBpZ25vcmVkLgorIyBUaGUgZm9ybWF0IGlzOgorIyBUQUcgPSB2YWx1ZSBbdmFsdWUsIC4uLl0KKyMgRm9yIGxpc3RzLCBpdGVtcyBjYW4gYWxzbyBiZSBhcHBlbmRlZCB1c2luZzoKKyMgVEFHICs9IHZhbHVlIFt2YWx1ZSwgLi4uXQorIyBWYWx1ZXMgdGhhdCBjb250YWluIHNwYWNlcyBzaG91bGQgYmUgcGxhY2VkIGJldHdlZW4gcXVvdGVzIChcIiBcIikuCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvamVjdCByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFRoaXMgdGFnIHNwZWNpZmllcyB0aGUgZW5jb2RpbmcgdXNlZCBmb3IgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIGNvbmZpZyBmaWxlCisjIHRoYXQgZm9sbG93LiBUaGUgZGVmYXVsdCBpcyBVVEYtOCB3aGljaCBpcyBhbHNvIHRoZSBlbmNvZGluZyB1c2VkIGZvciBhbGwgdGV4dAorIyBiZWZvcmUgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhpcyB0YWcuIERveHlnZW4gdXNlcyBsaWJpY29udiAob3IgdGhlIGljb252CisjIGJ1aWx0IGludG8gbGliYykgZm9yIHRoZSB0cmFuc2NvZGluZy4gU2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJpY29udgorIyBmb3IgdGhlIGxpc3Qgb2YgcG9zc2libGUgZW5jb2RpbmdzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogVVRGLTguCisKK0RPWFlGSUxFX0VOQ09ESU5HICAgICAgPSBVVEYtOAorCisjIFRoZSBQUk9KRUNUX05BTUUgdGFnIGlzIGEgc2luZ2xlIHdvcmQgKG9yIGEgc2VxdWVuY2Ugb2Ygd29yZHMgc3Vycm91bmRlZCBieQorIyBkb3VibGUtcXVvdGVzLCB1bmxlc3MgeW91IGFyZSB1c2luZyBEb3h5d2l6YXJkKSB0aGF0IHNob3VsZCBpZGVudGlmeSB0aGUKKyMgcHJvamVjdCBmb3Igd2hpY2ggdGhlIGRvY3VtZW50YXRpb24gaXMgZ2VuZXJhdGVkLiBUaGlzIG5hbWUgaXMgdXNlZCBpbiB0aGUKKyMgdGl0bGUgb2YgbW9zdCBnZW5lcmF0ZWQgcGFnZXMgYW5kIGluIGEgZmV3IG90aGVyIHBsYWNlcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE15IFByb2plY3QuCisKK1BST0pFQ1RfTkFNRSAgICAgICAgICAgPSBsaWJTUlRQCisKKyMgVGhlIFBST0pFQ1RfTlVNQkVSIHRhZyBjYW4gYmUgdXNlZCB0byBlbnRlciBhIHByb2plY3Qgb3IgcmV2aXNpb24gbnVtYmVyLiBUaGlzCisjIGNvdWxkIGJlIGhhbmR5IGZvciBhcmNoaXZpbmcgdGhlIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uIG9yIGlmIHNvbWUgdmVyc2lvbgorIyBjb250cm9sIHN5c3RlbSBpcyB1c2VkLgorCitQUk9KRUNUX05VTUJFUiAgICAgICAgID0gTElCU1JUUFZFUlNJT05OVU1CRVIKKworIyBVc2luZyB0aGUgUFJPSkVDVF9CUklFRiB0YWcgb25lIGNhbiBwcm92aWRlIGFuIG9wdGlvbmFsIG9uZSBsaW5lIGRlc2NyaXB0aW9uCisjIGZvciBhIHByb2plY3QgdGhhdCBhcHBlYXJzIGF0IHRoZSB0b3Agb2YgZWFjaCBwYWdlIGFuZCBzaG91bGQgZ2l2ZSB2aWV3ZXIgYQorIyBxdWljayBpZGVhIGFib3V0IHRoZSBwdXJwb3NlIG9mIHRoZSBwcm9qZWN0LiBLZWVwIHRoZSBkZXNjcmlwdGlvbiBzaG9ydC4KKworUFJPSkVDVF9CUklFRiAgICAgICAgICA9CisKKyMgV2l0aCB0aGUgUFJPSkVDVF9MT0dPIHRhZyBvbmUgY2FuIHNwZWNpZnkgYSBsb2dvIG9yIGFuIGljb24gdGhhdCBpcyBpbmNsdWRlZAorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gVGhlIG1heGltdW0gaGVpZ2h0IG9mIHRoZSBsb2dvIHNob3VsZCBub3QgZXhjZWVkIDU1CisjIHBpeGVscyBhbmQgdGhlIG1heGltdW0gd2lkdGggc2hvdWxkIG5vdCBleGNlZWQgMjAwIHBpeGVscy4gRG94eWdlbiB3aWxsIGNvcHkKKyMgdGhlIGxvZ28gdG8gdGhlIG91dHB1dCBkaXJlY3RvcnkuCisKK1BST0pFQ1RfTE9HTyAgICAgICAgICAgPQorCisjIFRoZSBPVVRQVVRfRElSRUNUT1JZIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIChyZWxhdGl2ZSBvciBhYnNvbHV0ZSkgcGF0aAorIyBpbnRvIHdoaWNoIHRoZSBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiB3aWxsIGJlIHdyaXR0ZW4uIElmIGEgcmVsYXRpdmUgcGF0aCBpcworIyBlbnRlcmVkLCBpdCB3aWxsIGJlIHJlbGF0aXZlIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSBkb3h5Z2VuIHdhcyBzdGFydGVkLiBJZgorIyBsZWZ0IGJsYW5rIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aWxsIGJlIHVzZWQuCisKK09VVFBVVF9ESVJFQ1RPUlkgICAgICAgPQorCisjIElmIHRoZSBDUkVBVEVfU1VCRElSUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBjcmVhdGUgNDA5NiBzdWItCisjIGRpcmVjdG9yaWVzIChpbiAyIGxldmVscykgdW5kZXIgdGhlIG91dHB1dCBkaXJlY3Rvcnkgb2YgZWFjaCBvdXRwdXQgZm9ybWF0IGFuZAorIyB3aWxsIGRpc3RyaWJ1dGUgdGhlIGdlbmVyYXRlZCBmaWxlcyBvdmVyIHRoZXNlIGRpcmVjdG9yaWVzLiBFbmFibGluZyB0aGlzCisjIG9wdGlvbiBjYW4gYmUgdXNlZnVsIHdoZW4gZmVlZGluZyBkb3h5Z2VuIGEgaHVnZSBhbW91bnQgb2Ygc291cmNlIGZpbGVzLCB3aGVyZQorIyBwdXR0aW5nIGFsbCBnZW5lcmF0ZWQgZmlsZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IHdvdWxkIG90aGVyd2lzZSBjYXVzZXMKKyMgcGVyZm9ybWFuY2UgcHJvYmxlbXMgZm9yIHRoZSBmaWxlIHN5c3RlbS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitDUkVBVEVfU1VCRElSUyAgICAgICAgID0gTk8KKworIyBJZiB0aGUgQUxMT1dfVU5JQ09ERV9OQU1FUyB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGFsbG93IG5vbi1BU0NJSQorIyBjaGFyYWN0ZXJzIHRvIGFwcGVhciBpbiB0aGUgbmFtZXMgb2YgZ2VuZXJhdGVkIGZpbGVzLiBJZiBzZXQgdG8gTk8sIG5vbi1BU0NJSQorIyBjaGFyYWN0ZXJzIHdpbGwgYmUgZXNjYXBlZCwgZm9yIGV4YW1wbGUgX3hFM194ODFfeDg0IHdpbGwgYmUgdXNlZCBmb3IgVW5pY29kZQorIyBVKzMwNDQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworQUxMT1dfVU5JQ09ERV9OQU1FUyAgICA9IE5PCisKKyMgVGhlIE9VVFBVVF9MQU5HVUFHRSB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBsYW5ndWFnZSBpbiB3aGljaCBhbGwKKyMgZG9jdW1lbnRhdGlvbiBnZW5lcmF0ZWQgYnkgZG94eWdlbiBpcyB3cml0dGVuLiBEb3h5Z2VuIHdpbGwgdXNlIHRoaXMKKyMgaW5mb3JtYXRpb24gdG8gZ2VuZXJhdGUgYWxsIGNvbnN0YW50IG91dHB1dCBpbiB0aGUgcHJvcGVyIGxhbmd1YWdlLgorIyBQb3NzaWJsZSB2YWx1ZXMgYXJlOiBBZnJpa2FhbnMsIEFyYWJpYywgQXJtZW5pYW4sIEJyYXppbGlhbiwgQ2F0YWxhbiwgQ2hpbmVzZSwKKyMgQ2hpbmVzZS1UcmFkaXRpb25hbCwgQ3JvYXRpYW4sIEN6ZWNoLCBEYW5pc2gsIER1dGNoLCBFbmdsaXNoIChVbml0ZWQgU3RhdGVzKSwKKyMgRXNwZXJhbnRvLCBGYXJzaSAoUGVyc2lhbiksIEZpbm5pc2gsIEZyZW5jaCwgR2VybWFuLCBHcmVlaywgSHVuZ2FyaWFuLAorIyBJbmRvbmVzaWFuLCBJdGFsaWFuLCBKYXBhbmVzZSwgSmFwYW5lc2UtZW4gKEphcGFuZXNlIHdpdGggRW5nbGlzaCBtZXNzYWdlcyksCisjIEtvcmVhbiwgS29yZWFuLWVuIChLb3JlYW4gd2l0aCBFbmdsaXNoIG1lc3NhZ2VzKSwgTGF0dmlhbiwgTGl0aHVhbmlhbiwKKyMgTWFjZWRvbmlhbiwgTm9yd2VnaWFuLCBQZXJzaWFuIChGYXJzaSksIFBvbGlzaCwgUG9ydHVndWVzZSwgUm9tYW5pYW4sIFJ1c3NpYW4sCisjIFNlcmJpYW4sIFNlcmJpYW4tQ3lyaWxsaWMsIFNsb3ZhaywgU2xvdmVuZSwgU3BhbmlzaCwgU3dlZGlzaCwgVHVya2lzaCwKKyMgVWtyYWluaWFuIGFuZCBWaWV0bmFtZXNlLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogRW5nbGlzaC4KKworT1VUUFVUX0xBTkdVQUdFICAgICAgICA9IEVuZ2xpc2gKKworIyBJZiB0aGUgQlJJRUZfTUVNQkVSX0RFU0MgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBpbmNsdWRlIGJyaWVmIG1lbWJlcgorIyBkZXNjcmlwdGlvbnMgYWZ0ZXIgdGhlIG1lbWJlcnMgdGhhdCBhcmUgbGlzdGVkIGluIHRoZSBmaWxlIGFuZCBjbGFzcworIyBkb2N1bWVudGF0aW9uIChzaW1pbGFyIHRvIEphdmFkb2MpLiBTZXQgdG8gTk8gdG8gZGlzYWJsZSB0aGlzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitCUklFRl9NRU1CRVJfREVTQyAgICAgID0gWUVTCisKKyMgSWYgdGhlIFJFUEVBVF9CUklFRiB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIHByZXBlbmQgdGhlIGJyaWVmCisjIGRlc2NyaXB0aW9uIG9mIGEgbWVtYmVyIG9yIGZ1bmN0aW9uIGJlZm9yZSB0aGUgZGV0YWlsZWQgZGVzY3JpcHRpb24KKyMKKyMgTm90ZTogSWYgYm90aCBISURFX1VORE9DX01FTUJFUlMgYW5kIEJSSUVGX01FTUJFUl9ERVNDIGFyZSBzZXQgdG8gTk8sIHRoZQorIyBicmllZiBkZXNjcmlwdGlvbnMgd2lsbCBiZSBjb21wbGV0ZWx5IHN1cHByZXNzZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1JFUEVBVF9CUklFRiAgICAgICAgICAgPSBOTworCisjIFRoaXMgdGFnIGltcGxlbWVudHMgYSBxdWFzaS1pbnRlbGxpZ2VudCBicmllZiBkZXNjcmlwdGlvbiBhYmJyZXZpYXRvciB0aGF0IGlzCisjIHVzZWQgdG8gZm9ybSB0aGUgdGV4dCBpbiB2YXJpb3VzIGxpc3RpbmdzLiBFYWNoIHN0cmluZyBpbiB0aGlzIGxpc3QsIGlmIGZvdW5kCisjIGFzIHRoZSBsZWFkaW5nIHRleHQgb2YgdGhlIGJyaWVmIGRlc2NyaXB0aW9uLCB3aWxsIGJlIHN0cmlwcGVkIGZyb20gdGhlIHRleHQKKyMgYW5kIHRoZSByZXN1bHQsIGFmdGVyIHByb2Nlc3NpbmcgdGhlIHdob2xlIGxpc3QsIGlzIHVzZWQgYXMgdGhlIGFubm90YXRlZAorIyB0ZXh0LiBPdGhlcndpc2UsIHRoZSBicmllZiBkZXNjcmlwdGlvbiBpcyB1c2VkIGFzLWlzLiBJZiBsZWZ0IGJsYW5rLCB0aGUKKyMgZm9sbG93aW5nIHZhbHVlcyBhcmUgdXNlZCAoJG5hbWUgaXMgYXV0b21hdGljYWxseSByZXBsYWNlZCB3aXRoIHRoZSBuYW1lIG9mCisjIHRoZSBlbnRpdHkpOlRoZSAkbmFtZSBjbGFzcywgVGhlICRuYW1lIHdpZGdldCwgVGhlICRuYW1lIGZpbGUsIGlzLCBwcm92aWRlcywKKyMgc3BlY2lmaWVzLCBjb250YWlucywgcmVwcmVzZW50cywgYSwgYW4gYW5kIHRoZS4KKworQUJCUkVWSUFURV9CUklFRiAgICAgICA9CisKKyMgSWYgdGhlIEFMV0FZU19ERVRBSUxFRF9TRUMgYW5kIFJFUEVBVF9CUklFRiB0YWdzIGFyZSBib3RoIHNldCB0byBZRVMgdGhlbgorIyBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBkZXRhaWxlZCBzZWN0aW9uIGV2ZW4gaWYgdGhlcmUgaXMgb25seSBhIGJyaWVmCisjIGRlc2NyaXB0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0FMV0FZU19ERVRBSUxFRF9TRUMgICAgPSBOTworCisjIElmIHRoZSBJTkxJTkVfSU5IRVJJVEVEX01FTUIgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBzaG93IGFsbAorIyBpbmhlcml0ZWQgbWVtYmVycyBvZiBhIGNsYXNzIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoYXQgY2xhc3MgYXMgaWYgdGhvc2UKKyMgbWVtYmVycyB3ZXJlIG9yZGluYXJ5IGNsYXNzIG1lbWJlcnMuIENvbnN0cnVjdG9ycywgZGVzdHJ1Y3RvcnMgYW5kIGFzc2lnbm1lbnQKKyMgb3BlcmF0b3JzIG9mIHRoZSBiYXNlIGNsYXNzZXMgd2lsbCBub3QgYmUgc2hvd24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworSU5MSU5FX0lOSEVSSVRFRF9NRU1CICA9IE5PCisKKyMgSWYgdGhlIEZVTExfUEFUSF9OQU1FUyB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIHByZXBlbmQgdGhlIGZ1bGwgcGF0aAorIyBiZWZvcmUgZmlsZXMgbmFtZSBpbiB0aGUgZmlsZSBsaXN0IGFuZCBpbiB0aGUgaGVhZGVyIGZpbGVzLiBJZiBzZXQgdG8gTk8gdGhlCisjIHNob3J0ZXN0IHBhdGggdGhhdCBtYWtlcyB0aGUgZmlsZSBuYW1lIHVuaXF1ZSB3aWxsIGJlIHVzZWQKKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworRlVMTF9QQVRIX05BTUVTICAgICAgICA9IE5PCisKKyMgVGhlIFNUUklQX0ZST01fUEFUSCB0YWcgY2FuIGJlIHVzZWQgdG8gc3RyaXAgYSB1c2VyLWRlZmluZWQgcGFydCBvZiB0aGUgcGF0aC4KKyMgU3RyaXBwaW5nIGlzIG9ubHkgZG9uZSBpZiBvbmUgb2YgdGhlIHNwZWNpZmllZCBzdHJpbmdzIG1hdGNoZXMgdGhlIGxlZnQtaGFuZAorIyBwYXJ0IG9mIHRoZSBwYXRoLiBUaGUgdGFnIGNhbiBiZSB1c2VkIHRvIHNob3cgcmVsYXRpdmUgcGF0aHMgaW4gdGhlIGZpbGUgbGlzdC4KKyMgSWYgbGVmdCBibGFuayB0aGUgZGlyZWN0b3J5IGZyb20gd2hpY2ggZG94eWdlbiBpcyBydW4gaXMgdXNlZCBhcyB0aGUgcGF0aCB0bworIyBzdHJpcC4KKyMKKyMgTm90ZSB0aGF0IHlvdSBjYW4gc3BlY2lmeSBhYnNvbHV0ZSBwYXRocyBoZXJlLCBidXQgYWxzbyByZWxhdGl2ZSBwYXRocywgd2hpY2gKKyMgd2lsbCBiZSByZWxhdGl2ZSBmcm9tIHRoZSBkaXJlY3Rvcnkgd2hlcmUgZG94eWdlbiBpcyBzdGFydGVkLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgRlVMTF9QQVRIX05BTUVTIGlzIHNldCB0byBZRVMuCisKK1NUUklQX0ZST01fUEFUSCAgICAgICAgPQorCisjIFRoZSBTVFJJUF9GUk9NX0lOQ19QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzdHJpcCBhIHVzZXItZGVmaW5lZCBwYXJ0IG9mIHRoZQorIyBwYXRoIG1lbnRpb25lZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiBhIGNsYXNzLCB3aGljaCB0ZWxscyB0aGUgcmVhZGVyIHdoaWNoCisjIGhlYWRlciBmaWxlIHRvIGluY2x1ZGUgaW4gb3JkZXIgdG8gdXNlIGEgY2xhc3MuIElmIGxlZnQgYmxhbmsgb25seSB0aGUgbmFtZSBvZgorIyB0aGUgaGVhZGVyIGZpbGUgY29udGFpbmluZyB0aGUgY2xhc3MgZGVmaW5pdGlvbiBpcyB1c2VkLiBPdGhlcndpc2Ugb25lIHNob3VsZAorIyBzcGVjaWZ5IHRoZSBsaXN0IG9mIGluY2x1ZGUgcGF0aHMgdGhhdCBhcmUgbm9ybWFsbHkgcGFzc2VkIHRvIHRoZSBjb21waWxlcgorIyB1c2luZyB0aGUgLUkgZmxhZy4KKworU1RSSVBfRlJPTV9JTkNfUEFUSCAgICA9CisKKyMgSWYgdGhlIFNIT1JUX05BTUVTIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgbXVjaCBzaG9ydGVyIChidXQKKyMgbGVzcyByZWFkYWJsZSkgZmlsZSBuYW1lcy4gVGhpcyBjYW4gYmUgdXNlZnVsIGlzIHlvdXIgZmlsZSBzeXN0ZW1zIGRvZXNuJ3QKKyMgc3VwcG9ydCBsb25nIG5hbWVzIGxpa2Ugb24gRE9TLCBNYWMsIG9yIENELVJPTS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitTSE9SVF9OQU1FUyAgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgSkFWQURPQ19BVVRPQlJJRUYgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgaW50ZXJwcmV0IHRoZQorIyBmaXJzdCBsaW5lICh1bnRpbCB0aGUgZmlyc3QgZG90KSBvZiBhIEphdmFkb2Mtc3R5bGUgY29tbWVudCBhcyB0aGUgYnJpZWYKKyMgZGVzY3JpcHRpb24uIElmIHNldCB0byBOTywgdGhlIEphdmFkb2Mtc3R5bGUgd2lsbCBiZWhhdmUganVzdCBsaWtlIHJlZ3VsYXIgUXQtCisjIHN0eWxlIGNvbW1lbnRzICh0aHVzIHJlcXVpcmluZyBhbiBleHBsaWNpdCBAYnJpZWYgY29tbWFuZCBmb3IgYSBicmllZgorIyBkZXNjcmlwdGlvbi4pCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworSkFWQURPQ19BVVRPQlJJRUYgICAgICA9IE5PCisKKyMgSWYgdGhlIFFUX0FVVE9CUklFRiB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBpbnRlcnByZXQgdGhlIGZpcnN0CisjIGxpbmUgKHVudGlsIHRoZSBmaXJzdCBkb3QpIG9mIGEgUXQtc3R5bGUgY29tbWVudCBhcyB0aGUgYnJpZWYgZGVzY3JpcHRpb24uIElmCisjIHNldCB0byBOTywgdGhlIFF0LXN0eWxlIHdpbGwgYmVoYXZlIGp1c3QgbGlrZSByZWd1bGFyIFF0LXN0eWxlIGNvbW1lbnRzICh0aHVzCisjIHJlcXVpcmluZyBhbiBleHBsaWNpdCBcYnJpZWYgY29tbWFuZCBmb3IgYSBicmllZiBkZXNjcmlwdGlvbi4pCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworUVRfQVVUT0JSSUVGICAgICAgICAgICA9IE5PCisKKyMgVGhlIE1VTFRJTElORV9DUFBfSVNfQlJJRUYgdGFnIGNhbiBiZSBzZXQgdG8gWUVTIHRvIG1ha2UgZG94eWdlbiB0cmVhdCBhCisjIG11bHRpLWxpbmUgQysrIHNwZWNpYWwgY29tbWVudCBibG9jayAoaS5lLiBhIGJsb2NrIG9mIC8vISBvciAvLy8gY29tbWVudHMpIGFzCisjIGEgYnJpZWYgZGVzY3JpcHRpb24uIFRoaXMgdXNlZCB0byBiZSB0aGUgZGVmYXVsdCBiZWhhdmlvci4gVGhlIG5ldyBkZWZhdWx0IGlzCisjIHRvIHRyZWF0IGEgbXVsdGktbGluZSBDKysgY29tbWVudCBibG9jayBhcyBhIGRldGFpbGVkIGRlc2NyaXB0aW9uLiBTZXQgdGhpcworIyB0YWcgdG8gWUVTIGlmIHlvdSBwcmVmZXIgdGhlIG9sZCBiZWhhdmlvciBpbnN0ZWFkLgorIworIyBOb3RlIHRoYXQgc2V0dGluZyB0aGlzIHRhZyB0byBZRVMgYWxzbyBtZWFucyB0aGF0IHJhdGlvbmFsIHJvc2UgY29tbWVudHMgYXJlCisjIG5vdCByZWNvZ25pemVkIGFueSBtb3JlLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK01VTFRJTElORV9DUFBfSVNfQlJJRUYgPSBOTworCisjIElmIHRoZSBJTkhFUklUX0RPQ1MgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBhbiB1bmRvY3VtZW50ZWQgbWVtYmVyIGluaGVyaXRzIHRoZQorIyBkb2N1bWVudGF0aW9uIGZyb20gYW55IGRvY3VtZW50ZWQgbWVtYmVyIHRoYXQgaXQgcmUtaW1wbGVtZW50cy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworSU5IRVJJVF9ET0NTICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBTRVBBUkFURV9NRU1CRVJfUEFHRVMgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgcHJvZHVjZSBhIG5ldworIyBwYWdlIGZvciBlYWNoIG1lbWJlci4gSWYgc2V0IHRvIE5PLCB0aGUgZG9jdW1lbnRhdGlvbiBvZiBhIG1lbWJlciB3aWxsIGJlIHBhcnQKKyMgb2YgdGhlIGZpbGUvY2xhc3MvbmFtZXNwYWNlIHRoYXQgY29udGFpbnMgaXQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworU0VQQVJBVEVfTUVNQkVSX1BBR0VTICA9IE5PCisKKyMgVGhlIFRBQl9TSVpFIHRhZyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIG51bWJlciBvZiBzcGFjZXMgaW4gYSB0YWIuIERveHlnZW4KKyMgdXNlcyB0aGlzIHZhbHVlIHRvIHJlcGxhY2UgdGFicyBieSBzcGFjZXMgaW4gY29kZSBmcmFnbWVudHMuCisjIE1pbmltdW0gdmFsdWU6IDEsIG1heGltdW0gdmFsdWU6IDE2LCBkZWZhdWx0IHZhbHVlOiA0LgorCitUQUJfU0laRSAgICAgICAgICAgICAgID0gNAorCisjIFRoaXMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBudW1iZXIgb2YgYWxpYXNlcyB0aGF0IGFjdCBhcyBjb21tYW5kcyBpbgorIyB0aGUgZG9jdW1lbnRhdGlvbi4gQW4gYWxpYXMgaGFzIHRoZSBmb3JtOgorIyBuYW1lPXZhbHVlCisjIEZvciBleGFtcGxlIGFkZGluZworIyAic2lkZWVmZmVjdD1AcGFyIFNpZGUgRWZmZWN0czpcbiIKKyMgd2lsbCBhbGxvdyB5b3UgdG8gcHV0IHRoZSBjb21tYW5kIFxzaWRlZWZmZWN0IChvciBAc2lkZWVmZmVjdCkgaW4gdGhlCisjIGRvY3VtZW50YXRpb24sIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEgdXNlci1kZWZpbmVkIHBhcmFncmFwaCB3aXRoIGhlYWRpbmcKKyMgIlNpZGUgRWZmZWN0czoiLiBZb3UgY2FuIHB1dCBcbidzIGluIHRoZSB2YWx1ZSBwYXJ0IG9mIGFuIGFsaWFzIHRvIGluc2VydAorIyBuZXdsaW5lcy4KKworQUxJQVNFUyAgICAgICAgICAgICAgICA9CisKKyMgVGhpcyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIG51bWJlciBvZiB3b3JkLWtleXdvcmQgbWFwcGluZ3MgKFRDTCBvbmx5KS4KKyMgQSBtYXBwaW5nIGhhcyB0aGUgZm9ybSAibmFtZT12YWx1ZSIuIEZvciBleGFtcGxlIGFkZGluZyAiY2xhc3M9aXRjbDo6Y2xhc3MiCisjIHdpbGwgYWxsb3cgeW91IHRvIHVzZSB0aGUgY29tbWFuZCBjbGFzcyBpbiB0aGUgaXRjbDo6Y2xhc3MgbWVhbmluZy4KKworVENMX1NVQlNUICAgICAgICAgICAgICA9CisKKyMgU2V0IHRoZSBPUFRJTUlaRV9PVVRQVVRfRk9SX0MgdGFnIHRvIFlFUyBpZiB5b3VyIHByb2plY3QgY29uc2lzdHMgb2YgQyBzb3VyY2VzCisjIG9ubHkuIERveHlnZW4gd2lsbCB0aGVuIGdlbmVyYXRlIG91dHB1dCB0aGF0IGlzIG1vcmUgdGFpbG9yZWQgZm9yIEMuIEZvcgorIyBpbnN0YW5jZSwgc29tZSBvZiB0aGUgbmFtZXMgdGhhdCBhcmUgdXNlZCB3aWxsIGJlIGRpZmZlcmVudC4gVGhlIGxpc3Qgb2YgYWxsCisjIG1lbWJlcnMgd2lsbCBiZSBvbWl0dGVkLCBldGMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworT1BUSU1JWkVfT1VUUFVUX0ZPUl9DICA9IFlFUworCisjIFNldCB0aGUgT1BUSU1JWkVfT1VUUFVUX0pBVkEgdGFnIHRvIFlFUyBpZiB5b3VyIHByb2plY3QgY29uc2lzdHMgb2YgSmF2YSBvcgorIyBQeXRob24gc291cmNlcyBvbmx5LiBEb3h5Z2VuIHdpbGwgdGhlbiBnZW5lcmF0ZSBvdXRwdXQgdGhhdCBpcyBtb3JlIHRhaWxvcmVkCisjIGZvciB0aGF0IGxhbmd1YWdlLiBGb3IgaW5zdGFuY2UsIG5hbWVzcGFjZXMgd2lsbCBiZSBwcmVzZW50ZWQgYXMgcGFja2FnZXMsCisjIHF1YWxpZmllZCBzY29wZXMgd2lsbCBsb29rIGRpZmZlcmVudCwgZXRjLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK09QVElNSVpFX09VVFBVVF9KQVZBICAgPSBOTworCisjIFNldCB0aGUgT1BUSU1JWkVfRk9SX0ZPUlRSQU4gdGFnIHRvIFlFUyBpZiB5b3VyIHByb2plY3QgY29uc2lzdHMgb2YgRm9ydHJhbgorIyBzb3VyY2VzLiBEb3h5Z2VuIHdpbGwgdGhlbiBnZW5lcmF0ZSBvdXRwdXQgdGhhdCBpcyB0YWlsb3JlZCBmb3IgRm9ydHJhbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitPUFRJTUlaRV9GT1JfRk9SVFJBTiAgID0gTk8KKworIyBTZXQgdGhlIE9QVElNSVpFX09VVFBVVF9WSERMIHRhZyB0byBZRVMgaWYgeW91ciBwcm9qZWN0IGNvbnNpc3RzIG9mIFZIREwKKyMgc291cmNlcy4gRG94eWdlbiB3aWxsIHRoZW4gZ2VuZXJhdGUgb3V0cHV0IHRoYXQgaXMgdGFpbG9yZWQgZm9yIFZIREwuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworT1BUSU1JWkVfT1VUUFVUX1ZIREwgICA9IE5PCisKKyMgRG94eWdlbiBzZWxlY3RzIHRoZSBwYXJzZXIgdG8gdXNlIGRlcGVuZGluZyBvbiB0aGUgZXh0ZW5zaW9uIG9mIHRoZSBmaWxlcyBpdAorIyBwYXJzZXMuIFdpdGggdGhpcyB0YWcgeW91IGNhbiBhc3NpZ24gd2hpY2ggcGFyc2VyIHRvIHVzZSBmb3IgYSBnaXZlbgorIyBleHRlbnNpb24uIERveHlnZW4gaGFzIGEgYnVpbHQtaW4gbWFwcGluZywgYnV0IHlvdSBjYW4gb3ZlcnJpZGUgb3IgZXh0ZW5kIGl0CisjIHVzaW5nIHRoaXMgdGFnLiBUaGUgZm9ybWF0IGlzIGV4dD1sYW5ndWFnZSwgd2hlcmUgZXh0IGlzIGEgZmlsZSBleHRlbnNpb24sIGFuZAorIyBsYW5ndWFnZSBpcyBvbmUgb2YgdGhlIHBhcnNlcnMgc3VwcG9ydGVkIGJ5IGRveHlnZW46IElETCwgSmF2YSwgSmF2YXNjcmlwdCwKKyMgQyMsIEMsIEMrKywgRCwgUEhQLCBPYmplY3RpdmUtQywgUHl0aG9uLCBGb3J0cmFuIChmaXhlZCBmb3JtYXQgRm9ydHJhbjoKKyMgRm9ydHJhbkZpeGVkLCBmcmVlIGZvcm1hdHRlZCBGb3J0cmFuOiBGb3J0cmFuRnJlZSwgdW5rbm93biBmb3JtYXR0ZWQgRm9ydHJhbjoKKyMgRm9ydHJhbi4gSW4gdGhlIGxhdGVyIGNhc2UgdGhlIHBhcnNlciB0cmllcyB0byBndWVzcyB3aGV0aGVyIHRoZSBjb2RlIGlzIGZpeGVkCisjIG9yIGZyZWUgZm9ybWF0dGVkIGNvZGUsIHRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIEZvcnRyYW4gdHlwZSBmaWxlcyksIFZIREwuIEZvcgorIyBpbnN0YW5jZSB0byBtYWtlIGRveHlnZW4gdHJlYXQgLmluYyBmaWxlcyBhcyBGb3J0cmFuIGZpbGVzIChkZWZhdWx0IGlzIFBIUCksCisjIGFuZCAuZiBmaWxlcyBhcyBDIChkZWZhdWx0IGlzIEZvcnRyYW4pLCB1c2U6IGluYz1Gb3J0cmFuIGY9Qy4KKyMKKyMgTm90ZTogRm9yIGZpbGVzIHdpdGhvdXQgZXh0ZW5zaW9uIHlvdSBjYW4gdXNlIG5vX2V4dGVuc2lvbiBhcyBhIHBsYWNlaG9sZGVyLgorIworIyBOb3RlIHRoYXQgZm9yIGN1c3RvbSBleHRlbnNpb25zIHlvdSBhbHNvIG5lZWQgdG8gc2V0IEZJTEVfUEFUVEVSTlMgb3RoZXJ3aXNlCisjIHRoZSBmaWxlcyBhcmUgbm90IHJlYWQgYnkgZG94eWdlbi4KKworRVhURU5TSU9OX01BUFBJTkcgICAgICA9CisKKyMgSWYgdGhlIE1BUktET1dOX1NVUFBPUlQgdGFnIGlzIGVuYWJsZWQgdGhlbiBkb3h5Z2VuIHByZS1wcm9jZXNzZXMgYWxsIGNvbW1lbnRzCisjIGFjY29yZGluZyB0byB0aGUgTWFya2Rvd24gZm9ybWF0LCB3aGljaCBhbGxvd3MgZm9yIG1vcmUgcmVhZGFibGUKKyMgZG9jdW1lbnRhdGlvbi4gU2VlIGh0dHA6Ly9kYXJpbmdmaXJlYmFsbC5uZXQvcHJvamVjdHMvbWFya2Rvd24vIGZvciBkZXRhaWxzLgorIyBUaGUgb3V0cHV0IG9mIG1hcmtkb3duIHByb2Nlc3NpbmcgaXMgZnVydGhlciBwcm9jZXNzZWQgYnkgZG94eWdlbiwgc28geW91IGNhbgorIyBtaXggZG94eWdlbiwgSFRNTCwgYW5kIFhNTCBjb21tYW5kcyB3aXRoIE1hcmtkb3duIGZvcm1hdHRpbmcuIERpc2FibGUgb25seSBpbgorIyBjYXNlIG9mIGJhY2t3YXJkIGNvbXBhdGliaWxpdGllcyBpc3N1ZXMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK01BUktET1dOX1NVUFBPUlQgICAgICAgPSBZRVMKKworIyBXaGVuIGVuYWJsZWQgZG94eWdlbiB0cmllcyB0byBsaW5rIHdvcmRzIHRoYXQgY29ycmVzcG9uZCB0byBkb2N1bWVudGVkCisjIGNsYXNzZXMsIG9yIG5hbWVzcGFjZXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBkb2N1bWVudGF0aW9uLiBTdWNoIGEgbGluayBjYW4KKyMgYmUgcHJldmVudGVkIGluIGluZGl2aWR1YWwgY2FzZXMgYnkgcHV0dGluZyBhICUgc2lnbiBpbiBmcm9udCBvZiB0aGUgd29yZCBvcgorIyBnbG9iYWxseSBieSBzZXR0aW5nIEFVVE9MSU5LX1NVUFBPUlQgdG8gTk8uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0FVVE9MSU5LX1NVUFBPUlQgICAgICAgPSBZRVMKKworIyBJZiB5b3UgdXNlIFNUTCBjbGFzc2VzIChpLmUuIHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvciwgZXRjLikgYnV0IGRvIG5vdCB3YW50CisjIHRvIGluY2x1ZGUgKGEgdGFnIGZpbGUgZm9yKSB0aGUgU1RMIHNvdXJjZXMgYXMgaW5wdXQsIHRoZW4geW91IHNob3VsZCBzZXQgdGhpcworIyB0YWcgdG8gWUVTIGluIG9yZGVyIHRvIGxldCBkb3h5Z2VuIG1hdGNoIGZ1bmN0aW9ucyBkZWNsYXJhdGlvbnMgYW5kCisjIGRlZmluaXRpb25zIHdob3NlIGFyZ3VtZW50cyBjb250YWluIFNUTCBjbGFzc2VzIChlLmcuIGZ1bmMoc3RkOjpzdHJpbmcpOworIyB2ZXJzdXMgZnVuYyhzdGQ6OnN0cmluZykge30pLiBUaGlzIGFsc28gbWFrZSB0aGUgaW5oZXJpdGFuY2UgYW5kIGNvbGxhYm9yYXRpb24KKyMgZGlhZ3JhbXMgdGhhdCBpbnZvbHZlIFNUTCBjbGFzc2VzIG1vcmUgY29tcGxldGUgYW5kIGFjY3VyYXRlLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0JVSUxUSU5fU1RMX1NVUFBPUlQgICAgPSBOTworCisjIElmIHlvdSB1c2UgTWljcm9zb2Z0J3MgQysrL0NMSSBsYW5ndWFnZSwgeW91IHNob3VsZCBzZXQgdGhpcyBvcHRpb24gdG8gWUVTIHRvCisjIGVuYWJsZSBwYXJzaW5nIHN1cHBvcnQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworQ1BQX0NMSV9TVVBQT1JUICAgICAgICA9IE5PCisKKyMgU2V0IHRoZSBTSVBfU1VQUE9SVCB0YWcgdG8gWUVTIGlmIHlvdXIgcHJvamVjdCBjb25zaXN0cyBvZiBzaXAgKHNlZToKKyMgaHR0cDovL3d3dy5yaXZlcmJhbmtjb21wdXRpbmcuY28udWsvc29mdHdhcmUvc2lwL2ludHJvKSBzb3VyY2VzIG9ubHkuIERveHlnZW4KKyMgd2lsbCBwYXJzZSB0aGVtIGxpa2Ugbm9ybWFsIEMrKyBidXQgd2lsbCBhc3N1bWUgYWxsIGNsYXNzZXMgdXNlIHB1YmxpYyBpbnN0ZWFkCisjIG9mIHByaXZhdGUgaW5oZXJpdGFuY2Ugd2hlbiBubyBleHBsaWNpdCBwcm90ZWN0aW9uIGtleXdvcmQgaXMgcHJlc2VudC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitTSVBfU1VQUE9SVCAgICAgICAgICAgID0gTk8KKworIyBGb3IgTWljcm9zb2Z0J3MgSURMIHRoZXJlIGFyZSBwcm9wZ2V0IGFuZCBwcm9wcHV0IGF0dHJpYnV0ZXMgdG8gaW5kaWNhdGUKKyMgZ2V0dGVyIGFuZCBzZXR0ZXIgbWV0aG9kcyBmb3IgYSBwcm9wZXJ0eS4gU2V0dGluZyB0aGlzIG9wdGlvbiB0byBZRVMgd2lsbCBtYWtlCisjIGRveHlnZW4gdG8gcmVwbGFjZSB0aGUgZ2V0IGFuZCBzZXQgbWV0aG9kcyBieSBhIHByb3BlcnR5IGluIHRoZSBkb2N1bWVudGF0aW9uLgorIyBUaGlzIHdpbGwgb25seSB3b3JrIGlmIHRoZSBtZXRob2RzIGFyZSBpbmRlZWQgZ2V0dGluZyBvciBzZXR0aW5nIGEgc2ltcGxlCisjIHR5cGUuIElmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCBvciB5b3Ugd2FudCB0byBzaG93IHRoZSBtZXRob2RzIGFueXdheSwgeW91CisjIHNob3VsZCBzZXQgdGhpcyBvcHRpb24gdG8gTk8uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0lETF9QUk9QRVJUWV9TVVBQT1JUICAgPSBZRVMKKworIyBJZiBtZW1iZXIgZ3JvdXBpbmcgaXMgdXNlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgdGhlIERJU1RSSUJVVEVfR1JPVVBfRE9DCisjIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIHJldXNlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBmaXJzdAorIyBtZW1iZXIgaW4gdGhlIGdyb3VwIChpZiBhbnkpIGZvciB0aGUgb3RoZXIgbWVtYmVycyBvZiB0aGUgZ3JvdXAuIEJ5IGRlZmF1bHQKKyMgYWxsIG1lbWJlcnMgb2YgYSBncm91cCBtdXN0IGJlIGRvY3VtZW50ZWQgZXhwbGljaXRseS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitESVNUUklCVVRFX0dST1VQX0RPQyAgID0gTk8KKworIyBJZiBvbmUgYWRkcyBhIHN0cnVjdCBvciBjbGFzcyB0byBhIGdyb3VwIGFuZCB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGVuIGFsc28KKyMgYW55IG5lc3RlZCBjbGFzcyBvciBzdHJ1Y3QgaXMgYWRkZWQgdG8gdGhlIHNhbWUgZ3JvdXAuIEJ5IGRlZmF1bHQgdGhpcyBvcHRpb24KKyMgaXMgZGlzYWJsZWQgYW5kIG9uZSBoYXMgdG8gYWRkIG5lc3RlZCBjb21wb3VuZHMgZXhwbGljaXRseSB2aWEgXGluZ3JvdXAuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworR1JPVVBfTkVTVEVEX0NPTVBPVU5EUyA9IE5PCisKKyMgU2V0IHRoZSBTVUJHUk9VUElORyB0YWcgdG8gWUVTIHRvIGFsbG93IGNsYXNzIG1lbWJlciBncm91cHMgb2YgdGhlIHNhbWUgdHlwZQorIyAoZm9yIGluc3RhbmNlIGEgZ3JvdXAgb2YgcHVibGljIGZ1bmN0aW9ucykgdG8gYmUgcHV0IGFzIGEgc3ViZ3JvdXAgb2YgdGhhdAorIyB0eXBlIChlLmcuIHVuZGVyIHRoZSBQdWJsaWMgRnVuY3Rpb25zIHNlY3Rpb24pLiBTZXQgaXQgdG8gTk8gdG8gcHJldmVudAorIyBzdWJncm91cGluZy4gQWx0ZXJuYXRpdmVseSwgdGhpcyBjYW4gYmUgZG9uZSBwZXIgY2xhc3MgdXNpbmcgdGhlCisjIFxub3N1Ymdyb3VwaW5nIGNvbW1hbmQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1NVQkdST1VQSU5HICAgICAgICAgICAgPSBZRVMKKworIyBXaGVuIHRoZSBJTkxJTkVfR1JPVVBFRF9DTEFTU0VTIHRhZyBpcyBzZXQgdG8gWUVTLCBjbGFzc2VzLCBzdHJ1Y3RzIGFuZCB1bmlvbnMKKyMgYXJlIHNob3duIGluc2lkZSB0aGUgZ3JvdXAgaW4gd2hpY2ggdGhleSBhcmUgaW5jbHVkZWQgKGUuZy4gdXNpbmcgXGluZ3JvdXApCisjIGluc3RlYWQgb2Ygb24gYSBzZXBhcmF0ZSBwYWdlIChmb3IgSFRNTCBhbmQgTWFuIHBhZ2VzKSBvciBzZWN0aW9uIChmb3IgTGFUZVgKKyMgYW5kIFJURikuCisjCisjIE5vdGUgdGhhdCB0aGlzIGZlYXR1cmUgZG9lcyBub3Qgd29yayBpbiBjb21iaW5hdGlvbiB3aXRoCisjIFNFUEFSQVRFX01FTUJFUl9QQUdFUy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitJTkxJTkVfR1JPVVBFRF9DTEFTU0VTID0gTk8KKworIyBXaGVuIHRoZSBJTkxJTkVfU0lNUExFX1NUUlVDVFMgdGFnIGlzIHNldCB0byBZRVMsIHN0cnVjdHMsIGNsYXNzZXMsIGFuZCB1bmlvbnMKKyMgd2l0aCBvbmx5IHB1YmxpYyBkYXRhIGZpZWxkcyBvciBzaW1wbGUgdHlwZWRlZiBmaWVsZHMgd2lsbCBiZSBzaG93biBpbmxpbmUgaW4KKyMgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIHNjb3BlIGluIHdoaWNoIHRoZXkgYXJlIGRlZmluZWQgKGkuZS4gZmlsZSwKKyMgbmFtZXNwYWNlLCBvciBncm91cCBkb2N1bWVudGF0aW9uKSwgcHJvdmlkZWQgdGhpcyBzY29wZSBpcyBkb2N1bWVudGVkLiBJZiBzZXQKKyMgdG8gTk8sIHN0cnVjdHMsIGNsYXNzZXMsIGFuZCB1bmlvbnMgYXJlIHNob3duIG9uIGEgc2VwYXJhdGUgcGFnZSAoZm9yIEhUTUwgYW5kCisjIE1hbiBwYWdlcykgb3Igc2VjdGlvbiAoZm9yIExhVGVYIGFuZCBSVEYpLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0lOTElORV9TSU1QTEVfU1RSVUNUUyAgPSBOTworCisjIFdoZW4gVFlQRURFRl9ISURFU19TVFJVQ1QgdGFnIGlzIGVuYWJsZWQsIGEgdHlwZWRlZiBvZiBhIHN0cnVjdCwgdW5pb24sIG9yCisjIGVudW0gaXMgZG9jdW1lbnRlZCBhcyBzdHJ1Y3QsIHVuaW9uLCBvciBlbnVtIHdpdGggdGhlIG5hbWUgb2YgdGhlIHR5cGVkZWYuIFNvCisjIHR5cGVkZWYgc3RydWN0IFR5cGVTIHt9IFR5cGVULCB3aWxsIGFwcGVhciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhcyBhIHN0cnVjdAorIyB3aXRoIG5hbWUgVHlwZVQuIFdoZW4gZGlzYWJsZWQgdGhlIHR5cGVkZWYgd2lsbCBhcHBlYXIgYXMgYSBtZW1iZXIgb2YgYSBmaWxlLAorIyBuYW1lc3BhY2UsIG9yIGNsYXNzLiBBbmQgdGhlIHN0cnVjdCB3aWxsIGJlIG5hbWVkIFR5cGVTLiBUaGlzIGNhbiB0eXBpY2FsbHkgYmUKKyMgdXNlZnVsIGZvciBDIGNvZGUgaW4gY2FzZSB0aGUgY29kaW5nIGNvbnZlbnRpb24gZGljdGF0ZXMgdGhhdCBhbGwgY29tcG91bmQKKyMgdHlwZXMgYXJlIHR5cGVkZWYnZWQgYW5kIG9ubHkgdGhlIHR5cGVkZWYgaXMgcmVmZXJlbmNlZCwgbmV2ZXIgdGhlIHRhZyBuYW1lLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1RZUEVERUZfSElERVNfU1RSVUNUICAgPSBOTworCisjIFRoZSBzaXplIG9mIHRoZSBzeW1ib2wgbG9va3VwIGNhY2hlIGNhbiBiZSBzZXQgdXNpbmcgTE9PS1VQX0NBQ0hFX1NJWkUuIFRoaXMKKyMgY2FjaGUgaXMgdXNlZCB0byByZXNvbHZlIHN5bWJvbHMgZ2l2ZW4gdGhlaXIgbmFtZSBhbmQgc2NvcGUuIFNpbmNlIHRoaXMgY2FuIGJlCisjIGFuIGV4cGVuc2l2ZSBwcm9jZXNzIGFuZCBvZnRlbiB0aGUgc2FtZSBzeW1ib2wgYXBwZWFycyBtdWx0aXBsZSB0aW1lcyBpbiB0aGUKKyMgY29kZSwgZG94eWdlbiBrZWVwcyBhIGNhY2hlIG9mIHByZS1yZXNvbHZlZCBzeW1ib2xzLiBJZiB0aGUgY2FjaGUgaXMgdG9vIHNtYWxsCisjIGRveHlnZW4gd2lsbCBiZWNvbWUgc2xvd2VyLiBJZiB0aGUgY2FjaGUgaXMgdG9vIGxhcmdlLCBtZW1vcnkgaXMgd2FzdGVkLiBUaGUKKyMgY2FjaGUgc2l6ZSBpcyBnaXZlbiBieSB0aGlzIGZvcm11bGE6IDJeKDE2K0xPT0tVUF9DQUNIRV9TSVpFKS4gVGhlIHZhbGlkIHJhbmdlCisjIGlzIDAuLjksIHRoZSBkZWZhdWx0IGlzIDAsIGNvcnJlc3BvbmRpbmcgdG8gYSBjYWNoZSBzaXplIG9mIDJeMTY9NjU1MzYKKyMgc3ltYm9scy4gQXQgdGhlIGVuZCBvZiBhIHJ1biBkb3h5Z2VuIHdpbGwgcmVwb3J0IHRoZSBjYWNoZSB1c2FnZSBhbmQgc3VnZ2VzdAorIyB0aGUgb3B0aW1hbCBjYWNoZSBzaXplIGZyb20gYSBzcGVlZCBwb2ludCBvZiB2aWV3LgorIyBNaW5pbXVtIHZhbHVlOiAwLCBtYXhpbXVtIHZhbHVlOiA5LCBkZWZhdWx0IHZhbHVlOiAwLgorCitMT09LVVBfQ0FDSEVfU0laRSAgICAgID0gMAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEJ1aWxkIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEVYVFJBQ1RfQUxMIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgYXNzdW1lIGFsbCBlbnRpdGllcyBpbgorIyBkb2N1bWVudGF0aW9uIGFyZSBkb2N1bWVudGVkLCBldmVuIGlmIG5vIGRvY3VtZW50YXRpb24gd2FzIGF2YWlsYWJsZS4gUHJpdmF0ZQorIyBjbGFzcyBtZW1iZXJzIGFuZCBzdGF0aWMgZmlsZSBtZW1iZXJzIHdpbGwgYmUgaGlkZGVuIHVubGVzcyB0aGUKKyMgRVhUUkFDVF9QUklWQVRFIHJlc3BlY3RpdmVseSBFWFRSQUNUX1NUQVRJQyB0YWdzIGFyZSBzZXQgdG8gWUVTLgorIyBOb3RlOiBUaGlzIHdpbGwgYWxzbyBkaXNhYmxlIHRoZSB3YXJuaW5ncyBhYm91dCB1bmRvY3VtZW50ZWQgbWVtYmVycyB0aGF0IGFyZQorIyBub3JtYWxseSBwcm9kdWNlZCB3aGVuIFdBUk5JTkdTIGlzIHNldCB0byBZRVMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworRVhUUkFDVF9BTEwgICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEVYVFJBQ1RfUFJJVkFURSB0YWcgaXMgc2V0IHRvIFlFUywgYWxsIHByaXZhdGUgbWVtYmVycyBvZiBhIGNsYXNzIHdpbGwKKyMgYmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworRVhUUkFDVF9QUklWQVRFICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEVYVFJBQ1RfUEFDS0FHRSB0YWcgaXMgc2V0IHRvIFlFUywgYWxsIG1lbWJlcnMgd2l0aCBwYWNrYWdlIG9yIGludGVybmFsCisjIHNjb3BlIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworRVhUUkFDVF9QQUNLQUdFICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEVYVFJBQ1RfU1RBVElDIHRhZyBpcyBzZXQgdG8gWUVTLCBhbGwgc3RhdGljIG1lbWJlcnMgb2YgYSBmaWxlIHdpbGwgYmUKKyMgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworRVhUUkFDVF9TVEFUSUMgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEVYVFJBQ1RfTE9DQUxfQ0xBU1NFUyB0YWcgaXMgc2V0IHRvIFlFUywgY2xhc3NlcyAoYW5kIHN0cnVjdHMpIGRlZmluZWQKKyMgbG9jYWxseSBpbiBzb3VyY2UgZmlsZXMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gSWYgc2V0IHRvIE5PLAorIyBvbmx5IGNsYXNzZXMgZGVmaW5lZCBpbiBoZWFkZXIgZmlsZXMgYXJlIGluY2x1ZGVkLiBEb2VzIG5vdCBoYXZlIGFueSBlZmZlY3QKKyMgZm9yIEphdmEgc291cmNlcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworRVhUUkFDVF9MT0NBTF9DTEFTU0VTICA9IFlFUworCisjIFRoaXMgZmxhZyBpcyBvbmx5IHVzZWZ1bCBmb3IgT2JqZWN0aXZlLUMgY29kZS4gSWYgc2V0IHRvIFlFUywgbG9jYWwgbWV0aG9kcywKKyMgd2hpY2ggYXJlIGRlZmluZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uIHNlY3Rpb24gYnV0IG5vdCBpbiB0aGUgaW50ZXJmYWNlIGFyZQorIyBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gSWYgc2V0IHRvIE5PLCBvbmx5IG1ldGhvZHMgaW4gdGhlIGludGVyZmFjZSBhcmUKKyMgaW5jbHVkZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworRVhUUkFDVF9MT0NBTF9NRVRIT0RTICA9IE5PCisKKyMgSWYgdGhpcyBmbGFnIGlzIHNldCB0byBZRVMsIHRoZSBtZW1iZXJzIG9mIGFub255bW91cyBuYW1lc3BhY2VzIHdpbGwgYmUKKyMgZXh0cmFjdGVkIGFuZCBhcHBlYXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYXMgYSBuYW1lc3BhY2UgY2FsbGVkCisjICdhbm9ueW1vdXNfbmFtZXNwYWNle2ZpbGV9Jywgd2hlcmUgZmlsZSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIGJhc2UgbmFtZSBvZgorIyB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBhbm9ueW1vdXMgbmFtZXNwYWNlLiBCeSBkZWZhdWx0IGFub255bW91cyBuYW1lc3BhY2UKKyMgYXJlIGhpZGRlbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitFWFRSQUNUX0FOT05fTlNQQUNFUyAgID0gTk8KKworIyBJZiB0aGUgSElERV9VTkRPQ19NRU1CRVJTIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgaGlkZSBhbGwKKyMgdW5kb2N1bWVudGVkIG1lbWJlcnMgaW5zaWRlIGRvY3VtZW50ZWQgY2xhc3NlcyBvciBmaWxlcy4gSWYgc2V0IHRvIE5PIHRoZXNlCisjIG1lbWJlcnMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgdmFyaW91cyBvdmVydmlld3MsIGJ1dCBubyBkb2N1bWVudGF0aW9uCisjIHNlY3Rpb24gaXMgZ2VuZXJhdGVkLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IGlmIEVYVFJBQ1RfQUxMIGlzIGVuYWJsZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworSElERV9VTkRPQ19NRU1CRVJTICAgICA9IFlFUworCisjIElmIHRoZSBISURFX1VORE9DX0NMQVNTRVMgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBoaWRlIGFsbAorIyB1bmRvY3VtZW50ZWQgY2xhc3NlcyB0aGF0IGFyZSBub3JtYWxseSB2aXNpYmxlIGluIHRoZSBjbGFzcyBoaWVyYXJjaHkuIElmIHNldAorIyB0byBOTywgdGhlc2UgY2xhc3NlcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSB2YXJpb3VzIG92ZXJ2aWV3cy4gVGhpcyBvcHRpb24KKyMgaGFzIG5vIGVmZmVjdCBpZiBFWFRSQUNUX0FMTCBpcyBlbmFibGVkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0hJREVfVU5ET0NfQ0xBU1NFUyAgICAgPSBOTworCisjIElmIHRoZSBISURFX0ZSSUVORF9DT01QT1VORFMgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBoaWRlIGFsbCBmcmllbmQKKyMgKGNsYXNzfHN0cnVjdHx1bmlvbikgZGVjbGFyYXRpb25zLiBJZiBzZXQgdG8gTk8sIHRoZXNlIGRlY2xhcmF0aW9ucyB3aWxsIGJlCisjIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0hJREVfRlJJRU5EX0NPTVBPVU5EUyAgPSBOTworCisjIElmIHRoZSBISURFX0lOX0JPRFlfRE9DUyB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGhpZGUgYW55CisjIGRvY3VtZW50YXRpb24gYmxvY2tzIGZvdW5kIGluc2lkZSB0aGUgYm9keSBvZiBhIGZ1bmN0aW9uLiBJZiBzZXQgdG8gTk8sIHRoZXNlCisjIGJsb2NrcyB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBmdW5jdGlvbidzIGRldGFpbGVkIGRvY3VtZW50YXRpb24gYmxvY2suCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworSElERV9JTl9CT0RZX0RPQ1MgICAgICA9IE5PCisKKyMgVGhlIElOVEVSTkFMX0RPQ1MgdGFnIGRldGVybWluZXMgaWYgZG9jdW1lbnRhdGlvbiB0aGF0IGlzIHR5cGVkIGFmdGVyIGEKKyMgXGludGVybmFsIGNvbW1hbmQgaXMgaW5jbHVkZWQuIElmIHRoZSB0YWcgaXMgc2V0IHRvIE5PIHRoZW4gdGhlIGRvY3VtZW50YXRpb24KKyMgd2lsbCBiZSBleGNsdWRlZC4gU2V0IGl0IHRvIFlFUyB0byBpbmNsdWRlIHRoZSBpbnRlcm5hbCBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0lOVEVSTkFMX0RPQ1MgICAgICAgICAgPSBOTworCisjIElmIHRoZSBDQVNFX1NFTlNFX05BTUVTIHRhZyBpcyBzZXQgdG8gTk8gdGhlbiBkb3h5Z2VuIHdpbGwgb25seSBnZW5lcmF0ZSBmaWxlCisjIG5hbWVzIGluIGxvd2VyLWNhc2UgbGV0dGVycy4gSWYgc2V0IHRvIFlFUywgdXBwZXItY2FzZSBsZXR0ZXJzIGFyZSBhbHNvCisjIGFsbG93ZWQuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBoYXZlIGNsYXNzZXMgb3IgZmlsZXMgd2hvc2UgbmFtZXMgb25seSBkaWZmZXIKKyMgaW4gY2FzZSBhbmQgaWYgeW91ciBmaWxlIHN5c3RlbSBzdXBwb3J0cyBjYXNlIHNlbnNpdGl2ZSBmaWxlIG5hbWVzLiBXaW5kb3dzCisjIGFuZCBNYWMgdXNlcnMgYXJlIGFkdmlzZWQgdG8gc2V0IHRoaXMgb3B0aW9uIHRvIE5PLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogc3lzdGVtIGRlcGVuZGVudC4KKworQ0FTRV9TRU5TRV9OQU1FUyAgICAgICA9IFlFUworCisjIElmIHRoZSBISURFX1NDT1BFX05BTUVTIHRhZyBpcyBzZXQgdG8gTk8gdGhlbiBkb3h5Z2VuIHdpbGwgc2hvdyBtZW1iZXJzIHdpdGgKKyMgdGhlaXIgZnVsbCBjbGFzcyBhbmQgbmFtZXNwYWNlIHNjb3BlcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gSWYgc2V0IHRvIFlFUywgdGhlCisjIHNjb3BlIHdpbGwgYmUgaGlkZGVuLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0hJREVfU0NPUEVfTkFNRVMgICAgICAgPSBOTworCisjIElmIHRoZSBISURFX0NPTVBPVU5EX1JFRkVSRU5DRSB0YWcgaXMgc2V0IHRvIE5PIChkZWZhdWx0KSB0aGVuIGRveHlnZW4gd2lsbAorIyBhcHBlbmQgYWRkaXRpb25hbCB0ZXh0IHRvIGEgcGFnZSdzIHRpdGxlLCBzdWNoIGFzIENsYXNzIFJlZmVyZW5jZS4gSWYgc2V0IHRvCisjIFlFUyB0aGUgY29tcG91bmQgcmVmZXJlbmNlIHdpbGwgYmUgaGlkZGVuLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0hJREVfQ09NUE9VTkRfUkVGRVJFTkNFPSBOTworCisjIElmIHRoZSBTSE9XX0lOQ0xVREVfRklMRVMgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgcHV0IGEgbGlzdCBvZgorIyB0aGUgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQgYnkgYSBmaWxlIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoYXQgZmlsZS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworU0hPV19JTkNMVURFX0ZJTEVTICAgICA9IE5PCisKKyMgSWYgdGhlIFNIT1dfR1JPVVBFRF9NRU1CX0lOQyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIERveHlnZW4gd2lsbCBhZGQgZm9yIGVhY2gKKyMgZ3JvdXBlZCBtZW1iZXIgYW4gaW5jbHVkZSBzdGF0ZW1lbnQgdG8gdGhlIGRvY3VtZW50YXRpb24sIHRlbGxpbmcgdGhlIHJlYWRlcgorIyB3aGljaCBmaWxlIHRvIGluY2x1ZGUgaW4gb3JkZXIgdG8gdXNlIHRoZSBtZW1iZXIuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworU0hPV19HUk9VUEVEX01FTUJfSU5DICA9IE5PCisKKyMgSWYgdGhlIEZPUkNFX0xPQ0FMX0lOQ0xVREVTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGxpc3QgaW5jbHVkZQorIyBmaWxlcyB3aXRoIGRvdWJsZSBxdW90ZXMgaW4gdGhlIGRvY3VtZW50YXRpb24gcmF0aGVyIHRoYW4gd2l0aCBzaGFycCBicmFja2V0cy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitGT1JDRV9MT0NBTF9JTkNMVURFUyAgID0gTk8KKworIyBJZiB0aGUgSU5MSU5FX0lORk8gdGFnIGlzIHNldCB0byBZRVMgdGhlbiBhIHRhZyBbaW5saW5lXSBpcyBpbnNlcnRlZCBpbiB0aGUKKyMgZG9jdW1lbnRhdGlvbiBmb3IgaW5saW5lIG1lbWJlcnMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0lOTElORV9JTkZPICAgICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgU09SVF9NRU1CRVJfRE9DUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBzb3J0IHRoZQorIyAoZGV0YWlsZWQpIGRvY3VtZW50YXRpb24gb2YgZmlsZSBhbmQgY2xhc3MgbWVtYmVycyBhbHBoYWJldGljYWxseSBieSBtZW1iZXIKKyMgbmFtZS4gSWYgc2V0IHRvIE5PLCB0aGUgbWVtYmVycyB3aWxsIGFwcGVhciBpbiBkZWNsYXJhdGlvbiBvcmRlci4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworU09SVF9NRU1CRVJfRE9DUyAgICAgICA9IFlFUworCisjIElmIHRoZSBTT1JUX0JSSUVGX0RPQ1MgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgc29ydCB0aGUgYnJpZWYKKyMgZGVzY3JpcHRpb25zIG9mIGZpbGUsIG5hbWVzcGFjZSBhbmQgY2xhc3MgbWVtYmVycyBhbHBoYWJldGljYWxseSBieSBtZW1iZXIKKyMgbmFtZS4gSWYgc2V0IHRvIE5PLCB0aGUgbWVtYmVycyB3aWxsIGFwcGVhciBpbiBkZWNsYXJhdGlvbiBvcmRlci4gTm90ZSB0aGF0CisjIHRoaXMgd2lsbCBhbHNvIGluZmx1ZW5jZSB0aGUgb3JkZXIgb2YgdGhlIGNsYXNzZXMgaW4gdGhlIGNsYXNzIGxpc3QuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworU09SVF9CUklFRl9ET0NTICAgICAgICA9IE5PCisKKyMgSWYgdGhlIFNPUlRfTUVNQkVSU19DVE9SU18xU1QgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgc29ydCB0aGUKKyMgKGJyaWVmIGFuZCBkZXRhaWxlZCkgZG9jdW1lbnRhdGlvbiBvZiBjbGFzcyBtZW1iZXJzIHNvIHRoYXQgY29uc3RydWN0b3JzIGFuZAorIyBkZXN0cnVjdG9ycyBhcmUgbGlzdGVkIGZpcnN0LiBJZiBzZXQgdG8gTk8gdGhlIGNvbnN0cnVjdG9ycyB3aWxsIGFwcGVhciBpbiB0aGUKKyMgcmVzcGVjdGl2ZSBvcmRlcnMgZGVmaW5lZCBieSBTT1JUX0JSSUVGX0RPQ1MgYW5kIFNPUlRfTUVNQkVSX0RPQ1MuCisjIE5vdGU6IElmIFNPUlRfQlJJRUZfRE9DUyBpcyBzZXQgdG8gTk8gdGhpcyBvcHRpb24gaXMgaWdub3JlZCBmb3Igc29ydGluZyBicmllZgorIyBtZW1iZXIgZG9jdW1lbnRhdGlvbi4KKyMgTm90ZTogSWYgU09SVF9NRU1CRVJfRE9DUyBpcyBzZXQgdG8gTk8gdGhpcyBvcHRpb24gaXMgaWdub3JlZCBmb3Igc29ydGluZworIyBkZXRhaWxlZCBtZW1iZXIgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitTT1JUX01FTUJFUlNfQ1RPUlNfMVNUID0gTk8KKworIyBJZiB0aGUgU09SVF9HUk9VUF9OQU1FUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBzb3J0IHRoZSBoaWVyYXJjaHkKKyMgb2YgZ3JvdXAgbmFtZXMgaW50byBhbHBoYWJldGljYWwgb3JkZXIuIElmIHNldCB0byBOTyB0aGUgZ3JvdXAgbmFtZXMgd2lsbAorIyBhcHBlYXIgaW4gdGhlaXIgZGVmaW5lZCBvcmRlci4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitTT1JUX0dST1VQX05BTUVTICAgICAgID0gTk8KKworIyBJZiB0aGUgU09SVF9CWV9TQ09QRV9OQU1FIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgY2xhc3MgbGlzdCB3aWxsIGJlIHNvcnRlZCBieQorIyBmdWxseS1xdWFsaWZpZWQgbmFtZXMsIGluY2x1ZGluZyBuYW1lc3BhY2VzLiBJZiBzZXQgdG8gTk8sIHRoZSBjbGFzcyBsaXN0IHdpbGwKKyMgYmUgc29ydGVkIG9ubHkgYnkgY2xhc3MgbmFtZSwgbm90IGluY2x1ZGluZyB0aGUgbmFtZXNwYWNlIHBhcnQuCisjIE5vdGU6IFRoaXMgb3B0aW9uIGlzIG5vdCB2ZXJ5IHVzZWZ1bCBpZiBISURFX1NDT1BFX05BTUVTIGlzIHNldCB0byBZRVMuCisjIE5vdGU6IFRoaXMgb3B0aW9uIGFwcGxpZXMgb25seSB0byB0aGUgY2xhc3MgbGlzdCwgbm90IHRvIHRoZSBhbHBoYWJldGljYWwKKyMgbGlzdC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitTT1JUX0JZX1NDT1BFX05BTUUgICAgID0gTk8KKworIyBJZiB0aGUgU1RSSUNUX1BST1RPX01BVENISU5HIG9wdGlvbiBpcyBlbmFibGVkIGFuZCBkb3h5Z2VuIGZhaWxzIHRvIGRvIHByb3BlcgorIyB0eXBlIHJlc29sdXRpb24gb2YgYWxsIHBhcmFtZXRlcnMgb2YgYSBmdW5jdGlvbiBpdCB3aWxsIHJlamVjdCBhIG1hdGNoIGJldHdlZW4KKyMgdGhlIHByb3RvdHlwZSBhbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGEgbWVtYmVyIGZ1bmN0aW9uIGV2ZW4gaWYgdGhlcmUgaXMKKyMgb25seSBvbmUgY2FuZGlkYXRlIG9yIGl0IGlzIG9idmlvdXMgd2hpY2ggY2FuZGlkYXRlIHRvIGNob29zZSBieSBkb2luZyBhCisjIHNpbXBsZSBzdHJpbmcgbWF0Y2guIEJ5IGRpc2FibGluZyBTVFJJQ1RfUFJPVE9fTUFUQ0hJTkcgZG94eWdlbiB3aWxsIHN0aWxsCisjIGFjY2VwdCBhIG1hdGNoIGJldHdlZW4gcHJvdG90eXBlIGFuZCBpbXBsZW1lbnRhdGlvbiBpbiBzdWNoIGNhc2VzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1NUUklDVF9QUk9UT19NQVRDSElORyAgPSBOTworCisjIFRoZSBHRU5FUkFURV9UT0RPTElTVCB0YWcgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIChZRVMpIG9yIGRpc2FibGUgKE5PKSB0aGUgdG9kbworIyBsaXN0LiBUaGlzIGxpc3QgaXMgY3JlYXRlZCBieSBwdXR0aW5nIFx0b2RvIGNvbW1hbmRzIGluIHRoZSBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitHRU5FUkFURV9UT0RPTElTVCAgICAgID0gWUVTCisKKyMgVGhlIEdFTkVSQVRFX1RFU1RMSVNUIHRhZyBjYW4gYmUgdXNlZCB0byBlbmFibGUgKFlFUykgb3IgZGlzYWJsZSAoTk8pIHRoZSB0ZXN0CisjIGxpc3QuIFRoaXMgbGlzdCBpcyBjcmVhdGVkIGJ5IHB1dHRpbmcgXHRlc3QgY29tbWFuZHMgaW4gdGhlIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0dFTkVSQVRFX1RFU1RMSVNUICAgICAgPSBZRVMKKworIyBUaGUgR0VORVJBVEVfQlVHTElTVCB0YWcgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIChZRVMpIG9yIGRpc2FibGUgKE5PKSB0aGUgYnVnCisjIGxpc3QuIFRoaXMgbGlzdCBpcyBjcmVhdGVkIGJ5IHB1dHRpbmcgXGJ1ZyBjb21tYW5kcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworR0VORVJBVEVfQlVHTElTVCAgICAgICA9IFlFUworCisjIFRoZSBHRU5FUkFURV9ERVBSRUNBVEVETElTVCB0YWcgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIChZRVMpIG9yIGRpc2FibGUgKE5PKQorIyB0aGUgZGVwcmVjYXRlZCBsaXN0LiBUaGlzIGxpc3QgaXMgY3JlYXRlZCBieSBwdXR0aW5nIFxkZXByZWNhdGVkIGNvbW1hbmRzIGluCisjIHRoZSBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitHRU5FUkFURV9ERVBSRUNBVEVETElTVD0gWUVTCisKKyMgVGhlIEVOQUJMRURfU0VDVElPTlMgdGFnIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSBjb25kaXRpb25hbCBkb2N1bWVudGF0aW9uCisjIHNlY3Rpb25zLCBtYXJrZWQgYnkgXGlmIDxzZWN0aW9uX2xhYmVsPiAuLi4gXGVuZGlmIGFuZCBcY29uZCA8c2VjdGlvbl9sYWJlbD4KKyMgLi4uIFxlbmRjb25kIGJsb2Nrcy4KKworRU5BQkxFRF9TRUNUSU9OUyAgICAgICA9CisKKyMgVGhlIE1BWF9JTklUSUFMSVpFUl9MSU5FUyB0YWcgZGV0ZXJtaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgbGluZXMgdGhhdCB0aGUKKyMgaW5pdGlhbCB2YWx1ZSBvZiBhIHZhcmlhYmxlIG9yIG1hY3JvIC8gZGVmaW5lIGNhbiBoYXZlIGZvciBpdCB0byBhcHBlYXIgaW4gdGhlCisjIGRvY3VtZW50YXRpb24uIElmIHRoZSBpbml0aWFsaXplciBjb25zaXN0cyBvZiBtb3JlIGxpbmVzIHRoYW4gc3BlY2lmaWVkIGhlcmUKKyMgaXQgd2lsbCBiZSBoaWRkZW4uIFVzZSBhIHZhbHVlIG9mIDAgdG8gaGlkZSBpbml0aWFsaXplcnMgY29tcGxldGVseS4gVGhlCisjIGFwcGVhcmFuY2Ugb2YgdGhlIHZhbHVlIG9mIGluZGl2aWR1YWwgdmFyaWFibGVzIGFuZCBtYWNyb3MgLyBkZWZpbmVzIGNhbiBiZQorIyBjb250cm9sbGVkIHVzaW5nIFxzaG93aW5pdGlhbGl6ZXIgb3IgXGhpZGVpbml0aWFsaXplciBjb21tYW5kIGluIHRoZQorIyBkb2N1bWVudGF0aW9uIHJlZ2FyZGxlc3Mgb2YgdGhpcyBzZXR0aW5nLgorIyBNaW5pbXVtIHZhbHVlOiAwLCBtYXhpbXVtIHZhbHVlOiAxMDAwMCwgZGVmYXVsdCB2YWx1ZTogMzAuCisKK01BWF9JTklUSUFMSVpFUl9MSU5FUyAgPSAzMAorCisjIFNldCB0aGUgU0hPV19VU0VEX0ZJTEVTIHRhZyB0byBOTyB0byBkaXNhYmxlIHRoZSBsaXN0IG9mIGZpbGVzIGdlbmVyYXRlZCBhdAorIyB0aGUgYm90dG9tIG9mIHRoZSBkb2N1bWVudGF0aW9uIG9mIGNsYXNzZXMgYW5kIHN0cnVjdHMuIElmIHNldCB0byBZRVMsIHRoZQorIyBsaXN0IHdpbGwgbWVudGlvbiB0aGUgZmlsZXMgdGhhdCB3ZXJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1NIT1dfVVNFRF9GSUxFUyAgICAgICAgPSBZRVMKKworIyBTZXQgdGhlIFNIT1dfRklMRVMgdGFnIHRvIE5PIHRvIGRpc2FibGUgdGhlIGdlbmVyYXRpb24gb2YgdGhlIEZpbGVzIHBhZ2UuIFRoaXMKKyMgd2lsbCByZW1vdmUgdGhlIEZpbGVzIGVudHJ5IGZyb20gdGhlIFF1aWNrIEluZGV4IGFuZCBmcm9tIHRoZSBGb2xkZXIgVHJlZSBWaWV3CisjIChpZiBzcGVjaWZpZWQpLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitTSE9XX0ZJTEVTICAgICAgICAgICAgID0gWUVTCisKKyMgU2V0IHRoZSBTSE9XX05BTUVTUEFDRVMgdGFnIHRvIE5PIHRvIGRpc2FibGUgdGhlIGdlbmVyYXRpb24gb2YgdGhlIE5hbWVzcGFjZXMKKyMgcGFnZS4gVGhpcyB3aWxsIHJlbW92ZSB0aGUgTmFtZXNwYWNlcyBlbnRyeSBmcm9tIHRoZSBRdWljayBJbmRleCBhbmQgZnJvbSB0aGUKKyMgRm9sZGVyIFRyZWUgVmlldyAoaWYgc3BlY2lmaWVkKS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworU0hPV19OQU1FU1BBQ0VTICAgICAgICA9IFlFUworCisjIFRoZSBGSUxFX1ZFUlNJT05fRklMVEVSIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgcHJvZ3JhbSBvciBzY3JpcHQgdGhhdAorIyBkb3h5Z2VuIHNob3VsZCBpbnZva2UgdG8gZ2V0IHRoZSBjdXJyZW50IHZlcnNpb24gZm9yIGVhY2ggZmlsZSAodHlwaWNhbGx5IGZyb20KKyMgdGhlIHZlcnNpb24gY29udHJvbCBzeXN0ZW0pLiBEb3h5Z2VuIHdpbGwgaW52b2tlIHRoZSBwcm9ncmFtIGJ5IGV4ZWN1dGluZyAodmlhCisjIHBvcGVuKCkpIHRoZSBjb21tYW5kIGNvbW1hbmQgaW5wdXQtZmlsZSwgd2hlcmUgY29tbWFuZCBpcyB0aGUgdmFsdWUgb2YgdGhlCisjIEZJTEVfVkVSU0lPTl9GSUxURVIgdGFnLCBhbmQgaW5wdXQtZmlsZSBpcyB0aGUgbmFtZSBvZiBhbiBpbnB1dCBmaWxlIHByb3ZpZGVkCisjIGJ5IGRveHlnZW4uIFdoYXRldmVyIHRoZSBwcm9ncmFtIHdyaXRlcyB0byBzdGFuZGFyZCBvdXRwdXQgaXMgdXNlZCBhcyB0aGUgZmlsZQorIyB2ZXJzaW9uLiBGb3IgYW4gZXhhbXBsZSBzZWUgdGhlIGRvY3VtZW50YXRpb24uCisKK0ZJTEVfVkVSU0lPTl9GSUxURVIgICAgPQorCisjIFRoZSBMQVlPVVRfRklMRSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGxheW91dCBmaWxlIHdoaWNoIHdpbGwgYmUgcGFyc2VkCisjIGJ5IGRveHlnZW4uIFRoZSBsYXlvdXQgZmlsZSBjb250cm9scyB0aGUgZ2xvYmFsIHN0cnVjdHVyZSBvZiB0aGUgZ2VuZXJhdGVkCisjIG91dHB1dCBmaWxlcyBpbiBhbiBvdXRwdXQgZm9ybWF0IGluZGVwZW5kZW50IHdheS4gVG8gY3JlYXRlIHRoZSBsYXlvdXQgZmlsZQorIyB0aGF0IHJlcHJlc2VudHMgZG94eWdlbidzIGRlZmF1bHRzLCBydW4gZG94eWdlbiB3aXRoIHRoZSAtbCBvcHRpb24uIFlvdSBjYW4KKyMgb3B0aW9uYWxseSBzcGVjaWZ5IGEgZmlsZSBuYW1lIGFmdGVyIHRoZSBvcHRpb24sIGlmIG9taXR0ZWQgRG94eWdlbkxheW91dC54bWwKKyMgd2lsbCBiZSB1c2VkIGFzIHRoZSBuYW1lIG9mIHRoZSBsYXlvdXQgZmlsZS4KKyMKKyMgTm90ZSB0aGF0IGlmIHlvdSBydW4gZG94eWdlbiBmcm9tIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYSBmaWxlIGNhbGxlZAorIyBEb3h5Z2VuTGF5b3V0LnhtbCwgZG94eWdlbiB3aWxsIHBhcnNlIGl0IGF1dG9tYXRpY2FsbHkgZXZlbiBpZiB0aGUgTEFZT1VUX0ZJTEUKKyMgdGFnIGlzIGxlZnQgZW1wdHkuCisKK0xBWU9VVF9GSUxFICAgICAgICAgICAgPQorCisjIFRoZSBDSVRFX0JJQl9GSUxFUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBiaWIgZmlsZXMgY29udGFpbmluZworIyB0aGUgcmVmZXJlbmNlIGRlZmluaXRpb25zLiBUaGlzIG11c3QgYmUgYSBsaXN0IG9mIC5iaWIgZmlsZXMuIFRoZSAuYmliCisjIGV4dGVuc2lvbiBpcyBhdXRvbWF0aWNhbGx5IGFwcGVuZGVkIGlmIG9taXR0ZWQuIFRoaXMgcmVxdWlyZXMgdGhlIGJpYnRleCB0b29sCisjIHRvIGJlIGluc3RhbGxlZC4gU2VlIGFsc28gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CaWJUZVggZm9yIG1vcmUgaW5mby4KKyMgRm9yIExhVGVYIHRoZSBzdHlsZSBvZiB0aGUgYmlibGlvZ3JhcGh5IGNhbiBiZSBjb250cm9sbGVkIHVzaW5nCisjIExBVEVYX0JJQl9TVFlMRS4gVG8gdXNlIHRoaXMgZmVhdHVyZSB5b3UgbmVlZCBiaWJ0ZXggYW5kIHBlcmwgYXZhaWxhYmxlIGluIHRoZQorIyBzZWFyY2ggcGF0aC4gU2VlIGFsc28gXGNpdGUgZm9yIGluZm8gaG93IHRvIGNyZWF0ZSByZWZlcmVuY2VzLgorCitDSVRFX0JJQl9GSUxFUyAgICAgICAgID0KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB3YXJuaW5nIGFuZCBwcm9ncmVzcyBtZXNzYWdlcworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFRoZSBRVUlFVCB0YWcgY2FuIGJlIHVzZWQgdG8gdHVybiBvbi9vZmYgdGhlIG1lc3NhZ2VzIHRoYXQgYXJlIGdlbmVyYXRlZCB0bworIyBzdGFuZGFyZCBvdXRwdXQgYnkgZG94eWdlbi4gSWYgUVVJRVQgaXMgc2V0IHRvIFlFUyB0aGlzIGltcGxpZXMgdGhhdCB0aGUKKyMgbWVzc2FnZXMgYXJlIG9mZi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitRVUlFVCAgICAgICAgICAgICAgICAgID0gTk8KKworIyBUaGUgV0FSTklOR1MgdGFnIGNhbiBiZSB1c2VkIHRvIHR1cm4gb24vb2ZmIHRoZSB3YXJuaW5nIG1lc3NhZ2VzIHRoYXQgYXJlCisjIGdlbmVyYXRlZCB0byBzdGFuZGFyZCBlcnJvciAoc3RkZXJyKSBieSBkb3h5Z2VuLiBJZiBXQVJOSU5HUyBpcyBzZXQgdG8gWUVTCisjIHRoaXMgaW1wbGllcyB0aGF0IHRoZSB3YXJuaW5ncyBhcmUgb24uCisjCisjIFRpcDogVHVybiB3YXJuaW5ncyBvbiB3aGlsZSB3cml0aW5nIHRoZSBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitXQVJOSU5HUyAgICAgICAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIFdBUk5fSUZfVU5ET0NVTUVOVEVEIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlCisjIHdhcm5pbmdzIGZvciB1bmRvY3VtZW50ZWQgbWVtYmVycy4gSWYgRVhUUkFDVF9BTEwgaXMgc2V0IHRvIFlFUyB0aGVuIHRoaXMgZmxhZworIyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgZGlzYWJsZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1dBUk5fSUZfVU5ET0NVTUVOVEVEICAgPSBZRVMKKworIyBJZiB0aGUgV0FSTl9JRl9ET0NfRVJST1IgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSB3YXJuaW5ncyBmb3IKKyMgcG90ZW50aWFsIGVycm9ycyBpbiB0aGUgZG9jdW1lbnRhdGlvbiwgc3VjaCBhcyBub3QgZG9jdW1lbnRpbmcgc29tZSBwYXJhbWV0ZXJzCisjIGluIGEgZG9jdW1lbnRlZCBmdW5jdGlvbiwgb3IgZG9jdW1lbnRpbmcgcGFyYW1ldGVycyB0aGF0IGRvbid0IGV4aXN0IG9yIHVzaW5nCisjIG1hcmt1cCBjb21tYW5kcyB3cm9uZ2x5LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitXQVJOX0lGX0RPQ19FUlJPUiAgICAgID0gWUVTCisKKyMgVGhpcyBXQVJOX05PX1BBUkFNRE9DIG9wdGlvbiBjYW4gYmUgZW5hYmxlZCB0byBnZXQgd2FybmluZ3MgZm9yIGZ1bmN0aW9ucyB0aGF0CisjIGFyZSBkb2N1bWVudGVkLCBidXQgaGF2ZSBubyBkb2N1bWVudGF0aW9uIGZvciB0aGVpciBwYXJhbWV0ZXJzIG9yIHJldHVybgorIyB2YWx1ZS4gSWYgc2V0IHRvIE5PLCBkb3h5Z2VuIHdpbGwgb25seSB3YXJuIGFib3V0IHdyb25nIG9yIGluY29tcGxldGUKKyMgcGFyYW1ldGVyIGRvY3VtZW50YXRpb24sIGJ1dCBub3QgYWJvdXQgdGhlIGFic2VuY2Ugb2YgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitXQVJOX05PX1BBUkFNRE9DICAgICAgID0gTk8KKworIyBJZiB0aGUgV0FSTl9BU19FUlJPUiB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBpbW1lZGlhdGVseSBzdG9wIHdoZW4KKyMgYSB3YXJuaW5nIGlzIGVuY291bnRlcmVkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1dBUk5fQVNfRVJST1IgICAgICAgICAgPSBOTworCisjIFRoZSBXQVJOX0ZPUk1BVCB0YWcgZGV0ZXJtaW5lcyB0aGUgZm9ybWF0IG9mIHRoZSB3YXJuaW5nIG1lc3NhZ2VzIHRoYXQgZG94eWdlbgorIyBjYW4gcHJvZHVjZS4gVGhlIHN0cmluZyBzaG91bGQgY29udGFpbiB0aGUgJGZpbGUsICRsaW5lLCBhbmQgJHRleHQgdGFncywgd2hpY2gKKyMgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgZmlsZSBhbmQgbGluZSBudW1iZXIgZnJvbSB3aGljaCB0aGUgd2FybmluZyBvcmlnaW5hdGVkCisjIGFuZCB0aGUgd2FybmluZyB0ZXh0LiBPcHRpb25hbGx5IHRoZSBmb3JtYXQgbWF5IGNvbnRhaW4gJHZlcnNpb24sIHdoaWNoIHdpbGwKKyMgYmUgcmVwbGFjZWQgYnkgdGhlIHZlcnNpb24gb2YgdGhlIGZpbGUgKGlmIGl0IGNvdWxkIGJlIG9idGFpbmVkIHZpYQorIyBGSUxFX1ZFUlNJT05fRklMVEVSKQorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogJGZpbGU6JGxpbmU6ICR0ZXh0LgorCitXQVJOX0ZPUk1BVCAgICAgICAgICAgID0gIiRmaWxlOiRsaW5lOiAkdGV4dCIKKworIyBUaGUgV0FSTl9MT0dGSUxFIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgZmlsZSB0byB3aGljaCB3YXJuaW5nIGFuZCBlcnJvcgorIyBtZXNzYWdlcyBzaG91bGQgYmUgd3JpdHRlbi4gSWYgbGVmdCBibGFuayB0aGUgb3V0cHV0IGlzIHdyaXR0ZW4gdG8gc3RhbmRhcmQKKyMgZXJyb3IgKHN0ZGVycikuCisKK1dBUk5fTE9HRklMRSAgICAgICAgICAgPQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBpbnB1dCBmaWxlcworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFRoZSBJTlBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBmaWxlcyBhbmQvb3IgZGlyZWN0b3JpZXMgdGhhdCBjb250YWluCisjIGRvY3VtZW50ZWQgc291cmNlIGZpbGVzLiBZb3UgbWF5IGVudGVyIGZpbGUgbmFtZXMgbGlrZSBteWZpbGUuY3BwIG9yCisjIGRpcmVjdG9yaWVzIGxpa2UgL3Vzci9zcmMvbXlwcm9qZWN0LiBTZXBhcmF0ZSB0aGUgZmlsZXMgb3IgZGlyZWN0b3JpZXMgd2l0aAorIyBzcGFjZXMuIFNlZSBhbHNvIEZJTEVfUEFUVEVSTlMgYW5kIEVYVEVOU0lPTl9NQVBQSU5HCisjIE5vdGU6IElmIHRoaXMgdGFnIGlzIGVtcHR5IHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpcyBzZWFyY2hlZC4KKworSU5QVVQgICAgICAgICAgICAgICAgICA9IC4uL1JFQURNRS5tZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgLi4vaW5jbHVkZS9zcnRwLmggXAorICAgICAgICAgICAgICAgICAgICAgICAgIC4uL2NyeXB0by9pbmNsdWRlL2F1dGguaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgLi4vY3J5cHRvL2luY2x1ZGUvY2lwaGVyLmggXAorICAgICAgICAgICAgICAgICAgICAgICAgIC4uL2NyeXB0by9pbmNsdWRlL2NyeXB0b190eXBlcy5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAuLi9jcnlwdG8vaW5jbHVkZS9lcnIuaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgY3J5cHRvX2tlcm5lbC50eHQKKworIyBUaGlzIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgZW5jb2Rpbmcgb2YgdGhlIHNvdXJjZSBmaWxlcworIyB0aGF0IGRveHlnZW4gcGFyc2VzLiBJbnRlcm5hbGx5IGRveHlnZW4gdXNlcyB0aGUgVVRGLTggZW5jb2RpbmcuIERveHlnZW4gdXNlcworIyBsaWJpY29udiAob3IgdGhlIGljb252IGJ1aWx0IGludG8gbGliYykgZm9yIHRoZSB0cmFuc2NvZGluZy4gU2VlIHRoZSBsaWJpY29udgorIyBkb2N1bWVudGF0aW9uIChzZWU6IGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJpY29udikgZm9yIHRoZSBsaXN0IG9mCisjIHBvc3NpYmxlIGVuY29kaW5ncy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFVURi04LgorCitJTlBVVF9FTkNPRElORyAgICAgICAgID0gVVRGLTgKKworIyBJZiB0aGUgdmFsdWUgb2YgdGhlIElOUFVUIHRhZyBjb250YWlucyBkaXJlY3RvcmllcywgeW91IGNhbiB1c2UgdGhlCisjIEZJTEVfUEFUVEVSTlMgdGFnIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgd2lsZGNhcmQgcGF0dGVybnMgKGxpa2UgKi5jcHAgYW5kCisjICouaCkgdG8gZmlsdGVyIG91dCB0aGUgc291cmNlLWZpbGVzIGluIHRoZSBkaXJlY3Rvcmllcy4KKyMKKyMgTm90ZSB0aGF0IGZvciBjdXN0b20gZXh0ZW5zaW9ucyBvciBub3QgZGlyZWN0bHkgc3VwcG9ydGVkIGV4dGVuc2lvbnMgeW91IGFsc28KKyMgbmVlZCB0byBzZXQgRVhURU5TSU9OX01BUFBJTkcgZm9yIHRoZSBleHRlbnNpb24gb3RoZXJ3aXNlIHRoZSBmaWxlcyBhcmUgbm90CisjIHJlYWQgYnkgZG94eWdlbi4KKyMKKyMgSWYgbGVmdCBibGFuayB0aGUgZm9sbG93aW5nIHBhdHRlcm5zIGFyZSB0ZXN0ZWQ6Ki5jLCAqLmNjLCAqLmN4eCwgKi5jcHAsCisjICouYysrLCAqLmphdmEsICouaWksICouaXh4LCAqLmlwcCwgKi5pKyssICouaW5sLCAqLmlkbCwgKi5kZGwsICoub2RsLCAqLmgsCisjICouaGgsICouaHh4LCAqLmhwcCwgKi5oKyssICouY3MsICouZCwgKi5waHAsICoucGhwNCwgKi5waHA1LCAqLnBodG1sLCAqLmluYywKKyMgKi5tLCAqLm1hcmtkb3duLCAqLm1kLCAqLm1tLCAqLmRveCwgKi5weSwgKi5weXcsICouZjkwLCAqLmYsICouZm9yLCAqLnRjbCwKKyMgKi52aGQsICoudmhkbCwgKi51Y2YsICoucXNmLCAqLmFzIGFuZCAqLmpzLgorCitGSUxFX1BBVFRFUk5TICAgICAgICAgID0KKworIyBUaGUgUkVDVVJTSVZFIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHdoZXRoZXIgb3Igbm90IHN1YmRpcmVjdG9yaWVzIHNob3VsZAorIyBiZSBzZWFyY2hlZCBmb3IgaW5wdXQgZmlsZXMgYXMgd2VsbC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitSRUNVUlNJVkUgICAgICAgICAgICAgID0gTk8KKworIyBUaGUgRVhDTFVERSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBmaWxlcyBhbmQvb3IgZGlyZWN0b3JpZXMgdGhhdCBzaG91bGQgYmUKKyMgZXhjbHVkZWQgZnJvbSB0aGUgSU5QVVQgc291cmNlIGZpbGVzLiBUaGlzIHdheSB5b3UgY2FuIGVhc2lseSBleGNsdWRlIGEKKyMgc3ViZGlyZWN0b3J5IGZyb20gYSBkaXJlY3RvcnkgdHJlZSB3aG9zZSByb290IGlzIHNwZWNpZmllZCB3aXRoIHRoZSBJTlBVVCB0YWcuCisjCisjIE5vdGUgdGhhdCByZWxhdGl2ZSBwYXRocyBhcmUgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSBmcm9tIHdoaWNoIGRveHlnZW4gaXMKKyMgcnVuLgorCitFWENMVURFICAgICAgICAgICAgICAgID0KKworIyBUaGUgRVhDTFVERV9TWU1MSU5LUyB0YWcgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IHdoZXRoZXIgb3Igbm90IGZpbGVzIG9yCisjIGRpcmVjdG9yaWVzIHRoYXQgYXJlIHN5bWJvbGljIGxpbmtzIChhIFVuaXggZmlsZSBzeXN0ZW0gZmVhdHVyZSkgYXJlIGV4Y2x1ZGVkCisjIGZyb20gdGhlIGlucHV0LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0VYQ0xVREVfU1lNTElOS1MgICAgICAgPSBOTworCisjIElmIHRoZSB2YWx1ZSBvZiB0aGUgSU5QVVQgdGFnIGNvbnRhaW5zIGRpcmVjdG9yaWVzLCB5b3UgY2FuIHVzZSB0aGUKKyMgRVhDTFVERV9QQVRURVJOUyB0YWcgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSB3aWxkY2FyZCBwYXR0ZXJucyB0byBleGNsdWRlCisjIGNlcnRhaW4gZmlsZXMgZnJvbSB0aG9zZSBkaXJlY3Rvcmllcy4KKyMKKyMgTm90ZSB0aGF0IHRoZSB3aWxkY2FyZHMgYXJlIG1hdGNoZWQgYWdhaW5zdCB0aGUgZmlsZSB3aXRoIGFic29sdXRlIHBhdGgsIHNvIHRvCisjIGV4Y2x1ZGUgYWxsIHRlc3QgZGlyZWN0b3JpZXMgZm9yIGV4YW1wbGUgdXNlIHRoZSBwYXR0ZXJuICovdGVzdC8qCisKK0VYQ0xVREVfUEFUVEVSTlMgICAgICAgPQorCisjIFRoZSBFWENMVURFX1NZTUJPTFMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgc3ltYm9sIG5hbWVzCisjIChuYW1lc3BhY2VzLCBjbGFzc2VzLCBmdW5jdGlvbnMsIGV0Yy4pIHRoYXQgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gdGhlCisjIG91dHB1dC4gVGhlIHN5bWJvbCBuYW1lIGNhbiBiZSBhIGZ1bGx5IHF1YWxpZmllZCBuYW1lLCBhIHdvcmQsIG9yIGlmIHRoZQorIyB3aWxkY2FyZCAqIGlzIHVzZWQsIGEgc3Vic3RyaW5nLiBFeGFtcGxlczogQU5hbWVzcGFjZSwgQUNsYXNzLAorIyBBQ2xhc3M6OkFOYW1lc3BhY2UsIEFOYW1lc3BhY2U6OipUZXN0CisjCisjIE5vdGUgdGhhdCB0aGUgd2lsZGNhcmRzIGFyZSBtYXRjaGVkIGFnYWluc3QgdGhlIGZpbGUgd2l0aCBhYnNvbHV0ZSBwYXRoLCBzbyB0bworIyBleGNsdWRlIGFsbCB0ZXN0IGRpcmVjdG9yaWVzIHVzZSB0aGUgcGF0dGVybiAqL3Rlc3QvKgorCitFWENMVURFX1NZTUJPTFMgICAgICAgID0KKworIyBUaGUgRVhBTVBMRV9QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGZpbGVzIG9yIGRpcmVjdG9yaWVzCisjIHRoYXQgY29udGFpbiBleGFtcGxlIGNvZGUgZnJhZ21lbnRzIHRoYXQgYXJlIGluY2x1ZGVkIChzZWUgdGhlIFxpbmNsdWRlCisjIGNvbW1hbmQpLgorCitFWEFNUExFX1BBVEggICAgICAgICAgID0KKworIyBJZiB0aGUgdmFsdWUgb2YgdGhlIEVYQU1QTEVfUEFUSCB0YWcgY29udGFpbnMgZGlyZWN0b3JpZXMsIHlvdSBjYW4gdXNlIHRoZQorIyBFWEFNUExFX1BBVFRFUk5TIHRhZyB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIHdpbGRjYXJkIHBhdHRlcm4gKGxpa2UgKi5jcHAgYW5kCisjICouaCkgdG8gZmlsdGVyIG91dCB0aGUgc291cmNlLWZpbGVzIGluIHRoZSBkaXJlY3Rvcmllcy4gSWYgbGVmdCBibGFuayBhbGwKKyMgZmlsZXMgYXJlIGluY2x1ZGVkLgorCitFWEFNUExFX1BBVFRFUk5TICAgICAgID0KKworIyBJZiB0aGUgRVhBTVBMRV9SRUNVUlNJVkUgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBzdWJkaXJlY3RvcmllcyB3aWxsIGJlCisjIHNlYXJjaGVkIGZvciBpbnB1dCBmaWxlcyB0byBiZSB1c2VkIHdpdGggdGhlIFxpbmNsdWRlIG9yIFxkb250aW5jbHVkZSBjb21tYW5kcworIyBpcnJlc3BlY3RpdmUgb2YgdGhlIHZhbHVlIG9mIHRoZSBSRUNVUlNJVkUgdGFnLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0VYQU1QTEVfUkVDVVJTSVZFICAgICAgPSBOTworCisjIFRoZSBJTUFHRV9QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGZpbGVzIG9yIGRpcmVjdG9yaWVzCisjIHRoYXQgY29udGFpbiBpbWFnZXMgdGhhdCBhcmUgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gKHNlZSB0aGUKKyMgXGltYWdlIGNvbW1hbmQpLgorCitJTUFHRV9QQVRIICAgICAgICAgICAgID0KKworIyBUaGUgSU5QVVRfRklMVEVSIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgcHJvZ3JhbSB0aGF0IGRveHlnZW4gc2hvdWxkCisjIGludm9rZSB0byBmaWx0ZXIgZm9yIGVhY2ggaW5wdXQgZmlsZS4gRG94eWdlbiB3aWxsIGludm9rZSB0aGUgZmlsdGVyIHByb2dyYW0KKyMgYnkgZXhlY3V0aW5nICh2aWEgcG9wZW4oKSkgdGhlIGNvbW1hbmQ6CisjCisjIDxmaWx0ZXI+IDxpbnB1dC1maWxlPgorIworIyB3aGVyZSA8ZmlsdGVyPiBpcyB0aGUgdmFsdWUgb2YgdGhlIElOUFVUX0ZJTFRFUiB0YWcsIGFuZCA8aW5wdXQtZmlsZT4gaXMgdGhlCisjIG5hbWUgb2YgYW4gaW5wdXQgZmlsZS4gRG94eWdlbiB3aWxsIHRoZW4gdXNlIHRoZSBvdXRwdXQgdGhhdCB0aGUgZmlsdGVyCisjIHByb2dyYW0gd3JpdGVzIHRvIHN0YW5kYXJkIG91dHB1dC4gSWYgRklMVEVSX1BBVFRFUk5TIGlzIHNwZWNpZmllZCwgdGhpcyB0YWcKKyMgd2lsbCBiZSBpZ25vcmVkLgorIworIyBOb3RlIHRoYXQgdGhlIGZpbHRlciBtdXN0IG5vdCBhZGQgb3IgcmVtb3ZlIGxpbmVzOyBpdCBpcyBhcHBsaWVkIGJlZm9yZSB0aGUKKyMgY29kZSBpcyBzY2FubmVkLCBidXQgbm90IHdoZW4gdGhlIG91dHB1dCBjb2RlIGlzIGdlbmVyYXRlZC4gSWYgbGluZXMgYXJlIGFkZGVkCisjIG9yIHJlbW92ZWQsIHRoZSBhbmNob3JzIHdpbGwgbm90IGJlIHBsYWNlZCBjb3JyZWN0bHkuCisjCisjIE5vdGUgdGhhdCBmb3IgY3VzdG9tIGV4dGVuc2lvbnMgb3Igbm90IGRpcmVjdGx5IHN1cHBvcnRlZCBleHRlbnNpb25zIHlvdSBhbHNvCisjIG5lZWQgdG8gc2V0IEVYVEVOU0lPTl9NQVBQSU5HIGZvciB0aGUgZXh0ZW5zaW9uIG90aGVyd2lzZSB0aGUgZmlsZXMgYXJlIG5vdAorIyBwcm9wZXJseSBwcm9jZXNzZWQgYnkgZG94eWdlbi4KKworSU5QVVRfRklMVEVSICAgICAgICAgICA9CisKKyMgVGhlIEZJTFRFUl9QQVRURVJOUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBmaWx0ZXJzIG9uIGEgcGVyIGZpbGUgcGF0dGVybgorIyBiYXNpcy4gRG94eWdlbiB3aWxsIGNvbXBhcmUgdGhlIGZpbGUgbmFtZSB3aXRoIGVhY2ggcGF0dGVybiBhbmQgYXBwbHkgdGhlCisjIGZpbHRlciBpZiB0aGVyZSBpcyBhIG1hdGNoLiBUaGUgZmlsdGVycyBhcmUgYSBsaXN0IG9mIHRoZSBmb3JtOiBwYXR0ZXJuPWZpbHRlcgorIyAobGlrZSAqLmNwcD1teV9jcHBfZmlsdGVyKS4gU2VlIElOUFVUX0ZJTFRFUiBmb3IgZnVydGhlciBpbmZvcm1hdGlvbiBvbiBob3cKKyMgZmlsdGVycyBhcmUgdXNlZC4gSWYgdGhlIEZJTFRFUl9QQVRURVJOUyB0YWcgaXMgZW1wdHkgb3IgaWYgbm9uZSBvZiB0aGUKKyMgcGF0dGVybnMgbWF0Y2ggdGhlIGZpbGUgbmFtZSwgSU5QVVRfRklMVEVSIGlzIGFwcGxpZWQuCisjCisjIE5vdGUgdGhhdCBmb3IgY3VzdG9tIGV4dGVuc2lvbnMgb3Igbm90IGRpcmVjdGx5IHN1cHBvcnRlZCBleHRlbnNpb25zIHlvdSBhbHNvCisjIG5lZWQgdG8gc2V0IEVYVEVOU0lPTl9NQVBQSU5HIGZvciB0aGUgZXh0ZW5zaW9uIG90aGVyd2lzZSB0aGUgZmlsZXMgYXJlIG5vdAorIyBwcm9wZXJseSBwcm9jZXNzZWQgYnkgZG94eWdlbi4KKworRklMVEVSX1BBVFRFUk5TICAgICAgICA9CisKKyMgSWYgdGhlIEZJTFRFUl9TT1VSQ0VfRklMRVMgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBpbnB1dCBmaWx0ZXIgKGlmIHNldCB1c2luZworIyBJTlBVVF9GSUxURVIpIHdpbGwgYWxzbyBiZSB1c2VkIHRvIGZpbHRlciB0aGUgaW5wdXQgZmlsZXMgdGhhdCBhcmUgdXNlZCBmb3IKKyMgcHJvZHVjaW5nIHRoZSBzb3VyY2UgZmlsZXMgdG8gYnJvd3NlIChpLmUuIHdoZW4gU09VUkNFX0JST1dTRVIgaXMgc2V0IHRvIFlFUykuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworRklMVEVSX1NPVVJDRV9GSUxFUyAgICA9IE5PCisKKyMgVGhlIEZJTFRFUl9TT1VSQ0VfUEFUVEVSTlMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgc291cmNlIGZpbHRlcnMgcGVyIGZpbGUKKyMgcGF0dGVybi4gQSBwYXR0ZXJuIHdpbGwgb3ZlcnJpZGUgdGhlIHNldHRpbmcgZm9yIEZJTFRFUl9QQVRURVJOIChpZiBhbnkpIGFuZAorIyBpdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGRpc2FibGUgc291cmNlIGZpbHRlcmluZyBmb3IgYSBzcGVjaWZpYyBwYXR0ZXJuIHVzaW5nCisjICouZXh0PSAoc28gd2l0aG91dCBuYW1pbmcgYSBmaWx0ZXIpLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgRklMVEVSX1NPVVJDRV9GSUxFUyBpcyBzZXQgdG8gWUVTLgorCitGSUxURVJfU09VUkNFX1BBVFRFUk5TID0KKworIyBJZiB0aGUgVVNFX01ERklMRV9BU19NQUlOUEFHRSB0YWcgcmVmZXJzIHRvIHRoZSBuYW1lIG9mIGEgbWFya2Rvd24gZmlsZSB0aGF0CisjIGlzIHBhcnQgb2YgdGhlIGlucHV0LCBpdHMgY29udGVudHMgd2lsbCBiZSBwbGFjZWQgb24gdGhlIG1haW4gcGFnZQorIyAoaW5kZXguaHRtbCkuIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiB5b3UgaGF2ZSBhIHByb2plY3Qgb24gZm9yIGluc3RhbmNlIEdpdEh1YgorIyBhbmQgd2FudCB0byByZXVzZSB0aGUgaW50cm9kdWN0aW9uIHBhZ2UgYWxzbyBmb3IgdGhlIGRveHlnZW4gb3V0cHV0LgorCitVU0VfTURGSUxFX0FTX01BSU5QQUdFID0gUkVBRE1FLm1kCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gc291cmNlIGJyb3dzaW5nCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIFNPVVJDRV9CUk9XU0VSIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gYSBsaXN0IG9mIHNvdXJjZSBmaWxlcyB3aWxsIGJlCisjIGdlbmVyYXRlZC4gRG9jdW1lbnRlZCBlbnRpdGllcyB3aWxsIGJlIGNyb3NzLXJlZmVyZW5jZWQgd2l0aCB0aGVzZSBzb3VyY2VzLgorIworIyBOb3RlOiBUbyBnZXQgcmlkIG9mIGFsbCBzb3VyY2UgY29kZSBpbiB0aGUgZ2VuZXJhdGVkIG91dHB1dCwgbWFrZSBzdXJlIHRoYXQKKyMgYWxzbyBWRVJCQVRJTV9IRUFERVJTIGlzIHNldCB0byBOTy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitTT1VSQ0VfQlJPV1NFUiAgICAgICAgID0gTk8KKworIyBTZXR0aW5nIHRoZSBJTkxJTkVfU09VUkNFUyB0YWcgdG8gWUVTIHdpbGwgaW5jbHVkZSB0aGUgYm9keSBvZiBmdW5jdGlvbnMsCisjIGNsYXNzZXMgYW5kIGVudW1zIGRpcmVjdGx5IGludG8gdGhlIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworSU5MSU5FX1NPVVJDRVMgICAgICAgICA9IE5PCisKKyMgU2V0dGluZyB0aGUgU1RSSVBfQ09ERV9DT01NRU5UUyB0YWcgdG8gWUVTIHdpbGwgaW5zdHJ1Y3QgZG94eWdlbiB0byBoaWRlIGFueQorIyBzcGVjaWFsIGNvbW1lbnQgYmxvY2tzIGZyb20gZ2VuZXJhdGVkIHNvdXJjZSBjb2RlIGZyYWdtZW50cy4gTm9ybWFsIEMsIEMrKyBhbmQKKyMgRm9ydHJhbiBjb21tZW50cyB3aWxsIGFsd2F5cyByZW1haW4gdmlzaWJsZS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworU1RSSVBfQ09ERV9DT01NRU5UUyAgICA9IFlFUworCisjIElmIHRoZSBSRUZFUkVOQ0VEX0JZX1JFTEFUSU9OIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZm9yIGVhY2ggZG9jdW1lbnRlZAorIyBmdW5jdGlvbiBhbGwgZG9jdW1lbnRlZCBmdW5jdGlvbnMgcmVmZXJlbmNpbmcgaXQgd2lsbCBiZSBsaXN0ZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworUkVGRVJFTkNFRF9CWV9SRUxBVElPTiA9IFlFUworCisjIElmIHRoZSBSRUZFUkVOQ0VTX1JFTEFUSU9OIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZm9yIGVhY2ggZG9jdW1lbnRlZCBmdW5jdGlvbgorIyBhbGwgZG9jdW1lbnRlZCBlbnRpdGllcyBjYWxsZWQvdXNlZCBieSB0aGF0IGZ1bmN0aW9uIHdpbGwgYmUgbGlzdGVkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1JFRkVSRU5DRVNfUkVMQVRJT04gICAgPSBZRVMKKworIyBJZiB0aGUgUkVGRVJFTkNFU19MSU5LX1NPVVJDRSB0YWcgaXMgc2V0IHRvIFlFUyBhbmQgU09VUkNFX0JST1dTRVIgdGFnIGlzIHNldAorIyB0byBZRVMgdGhlbiB0aGUgaHlwZXJsaW5rcyBmcm9tIGZ1bmN0aW9ucyBpbiBSRUZFUkVOQ0VTX1JFTEFUSU9OIGFuZAorIyBSRUZFUkVOQ0VEX0JZX1JFTEFUSU9OIGxpc3RzIHdpbGwgbGluayB0byB0aGUgc291cmNlIGNvZGUuIE90aGVyd2lzZSB0aGV5IHdpbGwKKyMgbGluayB0byB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworUkVGRVJFTkNFU19MSU5LX1NPVVJDRSA9IFlFUworCisjIElmIFNPVVJDRV9UT09MVElQUyBpcyBlbmFibGVkICh0aGUgZGVmYXVsdCkgdGhlbiBob3ZlcmluZyBhIGh5cGVybGluayBpbiB0aGUKKyMgc291cmNlIGNvZGUgd2lsbCBzaG93IGEgdG9vbHRpcCB3aXRoIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gc3VjaCBhcyBwcm90b3R5cGUsCisjIGJyaWVmIGRlc2NyaXB0aW9uIGFuZCBsaW5rcyB0byB0aGUgZGVmaW5pdGlvbiBhbmQgZG9jdW1lbnRhdGlvbi4gU2luY2UgdGhpcworIyB3aWxsIG1ha2UgdGhlIEhUTUwgZmlsZSBsYXJnZXIgYW5kIGxvYWRpbmcgb2YgbGFyZ2UgZmlsZXMgYSBiaXQgc2xvd2VyLCB5b3UKKyMgY2FuIG9wdCB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFNPVVJDRV9CUk9XU0VSIGlzIHNldCB0byBZRVMuCisKK1NPVVJDRV9UT09MVElQUyAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgVVNFX0hUQUdTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gdGhlIHJlZmVyZW5jZXMgdG8gc291cmNlIGNvZGUgd2lsbAorIyBwb2ludCB0byB0aGUgSFRNTCBnZW5lcmF0ZWQgYnkgdGhlIGh0YWdzKDEpIHRvb2wgaW5zdGVhZCBvZiBkb3h5Z2VuIGJ1aWx0LWluCisjIHNvdXJjZSBicm93c2VyLiBUaGUgaHRhZ3MgdG9vbCBpcyBwYXJ0IG9mIEdOVSdzIGdsb2JhbCBzb3VyY2UgdGFnZ2luZyBzeXN0ZW0KKyMgKHNlZSBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ2xvYmFsL2dsb2JhbC5odG1sKS4gWW91IHdpbGwgbmVlZCB2ZXJzaW9uCisjIDQuOC42IG9yIGhpZ2hlci4KKyMKKyMgVG8gdXNlIGl0IGRvIHRoZSBmb2xsb3dpbmc6CisjIC0gSW5zdGFsbCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgZ2xvYmFsCisjIC0gRW5hYmxlIFNPVVJDRV9CUk9XU0VSIGFuZCBVU0VfSFRBR1MgaW4gdGhlIGNvbmZpZyBmaWxlCisjIC0gTWFrZSBzdXJlIHRoZSBJTlBVVCBwb2ludHMgdG8gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlCisjIC0gUnVuIGRveHlnZW4gYXMgbm9ybWFsCisjCisjIERveHlnZW4gd2lsbCBpbnZva2UgaHRhZ3MgKGFuZCB0aGF0IHdpbGwgaW4gdHVybiBpbnZva2UgZ3RhZ3MpLCBzbyB0aGVzZQorIyB0b29scyBtdXN0IGJlIGF2YWlsYWJsZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUgKGkuZS4gaW4gdGhlIHNlYXJjaCBwYXRoKS4KKyMKKyMgVGhlIHJlc3VsdDogaW5zdGVhZCBvZiB0aGUgc291cmNlIGJyb3dzZXIgZ2VuZXJhdGVkIGJ5IGRveHlnZW4sIHRoZSBsaW5rcyB0bworIyBzb3VyY2UgY29kZSB3aWxsIG5vdyBwb2ludCB0byB0aGUgb3V0cHV0IG9mIGh0YWdzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBTT1VSQ0VfQlJPV1NFUiBpcyBzZXQgdG8gWUVTLgorCitVU0VfSFRBR1MgICAgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgVkVSQkFUSU1fSEVBREVSUyB0YWcgaXMgc2V0IHRoZSBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYQorIyB2ZXJiYXRpbSBjb3B5IG9mIHRoZSBoZWFkZXIgZmlsZSBmb3IgZWFjaCBjbGFzcyBmb3Igd2hpY2ggYW4gaW5jbHVkZSBpcworIyBzcGVjaWZpZWQuIFNldCB0byBOTyB0byBkaXNhYmxlIHRoaXMuCisjIFNlZSBhbHNvOiBTZWN0aW9uIFxjbGFzcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworVkVSQkFUSU1fSEVBREVSUyAgICAgICA9IFlFUworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBhbHBoYWJldGljYWwgY2xhc3MgaW5kZXgKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgQUxQSEFCRVRJQ0FMX0lOREVYIHRhZyBpcyBzZXQgdG8gWUVTLCBhbiBhbHBoYWJldGljYWwgaW5kZXggb2YgYWxsCisjIGNvbXBvdW5kcyB3aWxsIGJlIGdlbmVyYXRlZC4gRW5hYmxlIHRoaXMgaWYgdGhlIHByb2plY3QgY29udGFpbnMgYSBsb3Qgb2YKKyMgY2xhc3Nlcywgc3RydWN0cywgdW5pb25zIG9yIGludGVyZmFjZXMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0FMUEhBQkVUSUNBTF9JTkRFWCAgICAgPSBOTworCisjIFRoZSBDT0xTX0lOX0FMUEhBX0lOREVYIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgY29sdW1ucyBpbgorIyB3aGljaCB0aGUgYWxwaGFiZXRpY2FsIGluZGV4IGxpc3Qgd2lsbCBiZSBzcGxpdC4KKyMgTWluaW11bSB2YWx1ZTogMSwgbWF4aW11bSB2YWx1ZTogMjAsIGRlZmF1bHQgdmFsdWU6IDUuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBBTFBIQUJFVElDQUxfSU5ERVggaXMgc2V0IHRvIFlFUy4KKworQ09MU19JTl9BTFBIQV9JTkRFWCAgICA9IDUKKworIyBJbiBjYXNlIGFsbCBjbGFzc2VzIGluIGEgcHJvamVjdCBzdGFydCB3aXRoIGEgY29tbW9uIHByZWZpeCwgYWxsIGNsYXNzZXMgd2lsbAorIyBiZSBwdXQgdW5kZXIgdGhlIHNhbWUgaGVhZGVyIGluIHRoZSBhbHBoYWJldGljYWwgaW5kZXguIFRoZSBJR05PUkVfUFJFRklYIHRhZworIyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgcHJlZml4IChvciBhIGxpc3Qgb2YgcHJlZml4ZXMpIHRoYXQgc2hvdWxkIGJlIGlnbm9yZWQKKyMgd2hpbGUgZ2VuZXJhdGluZyB0aGUgaW5kZXggaGVhZGVycy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEFMUEhBQkVUSUNBTF9JTkRFWCBpcyBzZXQgdG8gWUVTLgorCitJR05PUkVfUFJFRklYICAgICAgICAgID0KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgSFRNTCBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfSFRNTCB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGdlbmVyYXRlIEhUTUwgb3V0cHV0CisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0dFTkVSQVRFX0hUTUwgICAgICAgICAgPSBZRVMKKworIyBUaGUgSFRNTF9PVVRQVVQgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGVyZSB0aGUgSFRNTCBkb2NzIHdpbGwgYmUgcHV0LiBJZiBhCisjIHJlbGF0aXZlIHBhdGggaXMgZW50ZXJlZCB0aGUgdmFsdWUgb2YgT1VUUFVUX0RJUkVDVE9SWSB3aWxsIGJlIHB1dCBpbiBmcm9udCBvZgorIyBpdC4KKyMgVGhlIGRlZmF1bHQgZGlyZWN0b3J5IGlzOiBodG1sLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitIVE1MX09VVFBVVCAgICAgICAgICAgID0gaHRtbAorCisjIFRoZSBIVE1MX0ZJTEVfRVhURU5TSU9OIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBmaWxlIGV4dGVuc2lvbiBmb3IgZWFjaAorIyBnZW5lcmF0ZWQgSFRNTCBwYWdlIChmb3IgZXhhbXBsZTogLmh0bSwgLnBocCwgLmFzcCkuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiAuaHRtbC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9GSUxFX0VYVEVOU0lPTiAgICA9IC5odG1sCisKKyMgVGhlIEhUTUxfSEVBREVSIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgdXNlci1kZWZpbmVkIEhUTUwgaGVhZGVyIGZpbGUgZm9yCisjIGVhY2ggZ2VuZXJhdGVkIEhUTUwgcGFnZS4gSWYgdGhlIHRhZyBpcyBsZWZ0IGJsYW5rIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhCisjIHN0YW5kYXJkIGhlYWRlci4KKyMKKyMgVG8gZ2V0IHZhbGlkIEhUTUwgdGhlIGhlYWRlciBmaWxlIHRoYXQgaW5jbHVkZXMgYW55IHNjcmlwdHMgYW5kIHN0eWxlIHNoZWV0cworIyB0aGF0IGRveHlnZW4gbmVlZHMsIHdoaWNoIGlzIGRlcGVuZGVudCBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHVzZWQgKGUuZy4KKyMgdGhlIHNldHRpbmcgR0VORVJBVEVfVFJFRVZJRVcpLiBJdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gc3RhcnQgd2l0aCBhCisjIGRlZmF1bHQgaGVhZGVyIHVzaW5nCisjIGRveHlnZW4gLXcgaHRtbCBuZXdfaGVhZGVyLmh0bWwgbmV3X2Zvb3Rlci5odG1sIG5ld19zdHlsZXNoZWV0LmNzcworIyBZb3VyQ29uZmlnRmlsZQorIyBhbmQgdGhlbiBtb2RpZnkgdGhlIGZpbGUgbmV3X2hlYWRlci5odG1sLiBTZWUgYWxzbyBzZWN0aW9uICJEb3h5Z2VuIHVzYWdlIgorIyBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGdlbmVyYXRlIHRoZSBkZWZhdWx0IGhlYWRlciB0aGF0IGRveHlnZW4gbm9ybWFsbHkKKyMgdXNlcy4KKyMgTm90ZTogVGhlIGhlYWRlciBpcyBzdWJqZWN0IHRvIGNoYW5nZSBzbyB5b3UgdHlwaWNhbGx5IGhhdmUgdG8gcmVnZW5lcmF0ZSB0aGUKKyMgZGVmYXVsdCBoZWFkZXIgd2hlbiB1cGdyYWRpbmcgdG8gYSBuZXdlciB2ZXJzaW9uIG9mIGRveHlnZW4uIEZvciBhIGRlc2NyaXB0aW9uCisjIG9mIHRoZSBwb3NzaWJsZSBtYXJrZXJzIGFuZCBibG9jayBuYW1lcyBzZWUgdGhlIGRvY3VtZW50YXRpb24uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0hUTUxfSEVBREVSICAgICAgICAgICAgPQorCisjIFRoZSBIVE1MX0ZPT1RFUiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHVzZXItZGVmaW5lZCBIVE1MIGZvb3RlciBmb3IgZWFjaAorIyBnZW5lcmF0ZWQgSFRNTCBwYWdlLiBJZiB0aGUgdGFnIGlzIGxlZnQgYmxhbmsgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgc3RhbmRhcmQKKyMgZm9vdGVyLiBTZWUgSFRNTF9IRUFERVIgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGdlbmVyYXRlIGEgZGVmYXVsdAorIyBmb290ZXIgYW5kIHdoYXQgc3BlY2lhbCBjb21tYW5kcyBjYW4gYmUgdXNlZCBpbnNpZGUgdGhlIGZvb3Rlci4gU2VlIGFsc28KKyMgc2VjdGlvbiAiRG94eWdlbiB1c2FnZSIgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBnZW5lcmF0ZSB0aGUgZGVmYXVsdCBmb290ZXIKKyMgdGhhdCBkb3h5Z2VuIG5vcm1hbGx5IHVzZXMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0hUTUxfRk9PVEVSICAgICAgICAgICAgPQorCisjIFRoZSBIVE1MX1NUWUxFU0hFRVQgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSB1c2VyLWRlZmluZWQgY2FzY2FkaW5nIHN0eWxlCisjIHNoZWV0IHRoYXQgaXMgdXNlZCBieSBlYWNoIEhUTUwgcGFnZS4gSXQgY2FuIGJlIHVzZWQgdG8gZmluZS10dW5lIHRoZSBsb29rIG9mCisjIHRoZSBIVE1MIG91dHB1dC4gSWYgbGVmdCBibGFuayBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBkZWZhdWx0IHN0eWxlIHNoZWV0LgorIyBTZWUgYWxzbyBzZWN0aW9uICJEb3h5Z2VuIHVzYWdlIiBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGdlbmVyYXRlIHRoZSBzdHlsZQorIyBzaGVldCB0aGF0IGRveHlnZW4gbm9ybWFsbHkgdXNlcy4KKyMgTm90ZTogSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIEhUTUxfRVhUUkFfU1RZTEVTSEVFVCBpbnN0ZWFkIG9mIHRoaXMgdGFnLCBhcworIyBpdCBpcyBtb3JlIHJvYnVzdCBhbmQgdGhpcyB0YWcgKEhUTUxfU1RZTEVTSEVFVCkgd2lsbCBpbiB0aGUgZnV0dXJlIGJlY29tZQorIyBvYnNvbGV0ZS4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9TVFlMRVNIRUVUICAgICAgICA9IGRvY3MuY3NzCisKKyMgVGhlIEhUTUxfRVhUUkFfU1RZTEVTSEVFVCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhZGRpdGlvbmFsIHVzZXItZGVmaW5lZAorIyBjYXNjYWRpbmcgc3R5bGUgc2hlZXRzIHRoYXQgYXJlIGluY2x1ZGVkIGFmdGVyIHRoZSBzdGFuZGFyZCBzdHlsZSBzaGVldHMKKyMgY3JlYXRlZCBieSBkb3h5Z2VuLiBVc2luZyB0aGlzIG9wdGlvbiBvbmUgY2FuIG92ZXJydWxlIGNlcnRhaW4gc3R5bGUgYXNwZWN0cy4KKyMgVGhpcyBpcyBwcmVmZXJyZWQgb3ZlciB1c2luZyBIVE1MX1NUWUxFU0hFRVQgc2luY2UgaXQgZG9lcyBub3QgcmVwbGFjZSB0aGUKKyMgc3RhbmRhcmQgc3R5bGUgc2hlZXQgYW5kIGlzIHRoZXJlZm9yZSBtb3JlIHJvYnVzdCBhZ2FpbnN0IGZ1dHVyZSB1cGRhdGVzLgorIyBEb3h5Z2VuIHdpbGwgY29weSB0aGUgc3R5bGUgc2hlZXQgZmlsZXMgdG8gdGhlIG91dHB1dCBkaXJlY3RvcnkuCisjIE5vdGU6IFRoZSBvcmRlciBvZiB0aGUgZXh0cmEgc3R5bGUgc2hlZXQgZmlsZXMgaXMgb2YgaW1wb3J0YW5jZSAoZS5nLiB0aGUgbGFzdAorIyBzdHlsZSBzaGVldCBpbiB0aGUgbGlzdCBvdmVycnVsZXMgdGhlIHNldHRpbmcgb2YgdGhlIHByZXZpb3VzIG9uZXMgaW4gdGhlCisjIGxpc3QpLiBGb3IgYW4gZXhhbXBsZSBzZWUgdGhlIGRvY3VtZW50YXRpb24uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0hUTUxfRVhUUkFfU1RZTEVTSEVFVCAgPQorCisjIFRoZSBIVE1MX0VYVFJBX0ZJTEVTIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGV4dHJhIGltYWdlcyBvcgorIyBvdGhlciBzb3VyY2UgZmlsZXMgd2hpY2ggc2hvdWxkIGJlIGNvcGllZCB0byB0aGUgSFRNTCBvdXRwdXQgZGlyZWN0b3J5LiBOb3RlCisjIHRoYXQgdGhlc2UgZmlsZXMgd2lsbCBiZSBjb3BpZWQgdG8gdGhlIGJhc2UgSFRNTCBvdXRwdXQgZGlyZWN0b3J5LiBVc2UgdGhlCisjICRyZWxwYXRoXiBtYXJrZXIgaW4gdGhlIEhUTUxfSEVBREVSIGFuZC9vciBIVE1MX0ZPT1RFUiBmaWxlcyB0byBsb2FkIHRoZXNlCisjIGZpbGVzLiBJbiB0aGUgSFRNTF9TVFlMRVNIRUVUIGZpbGUsIHVzZSB0aGUgZmlsZSBuYW1lIG9ubHkuIEFsc28gbm90ZSB0aGF0IHRoZQorIyBmaWxlcyB3aWxsIGJlIGNvcGllZCBhcy1pczsgdGhlcmUgYXJlIG5vIGNvbW1hbmRzIG9yIG1hcmtlcnMgYXZhaWxhYmxlLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitIVE1MX0VYVFJBX0ZJTEVTICAgICAgID0KKworIyBUaGUgSFRNTF9DT0xPUlNUWUxFX0hVRSB0YWcgY29udHJvbHMgdGhlIGNvbG9yIG9mIHRoZSBIVE1MIG91dHB1dC4gRG94eWdlbgorIyB3aWxsIGFkanVzdCB0aGUgY29sb3JzIGluIHRoZSBzdHlsZSBzaGVldCBhbmQgYmFja2dyb3VuZCBpbWFnZXMgYWNjb3JkaW5nIHRvCisjIHRoaXMgY29sb3IuIEh1ZSBpcyBzcGVjaWZpZWQgYXMgYW4gYW5nbGUgb24gYSBjb2xvcndoZWVsLCBzZWUKKyMgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IdWUgZm9yIG1vcmUgaW5mb3JtYXRpb24uIEZvciBpbnN0YW5jZSB0aGUgdmFsdWUKKyMgMCByZXByZXNlbnRzIHJlZCwgNjAgaXMgeWVsbG93LCAxMjAgaXMgZ3JlZW4sIDE4MCBpcyBjeWFuLCAyNDAgaXMgYmx1ZSwgMzAwCisjIHB1cnBsZSwgYW5kIDM2MCBpcyByZWQgYWdhaW4uCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDM1OSwgZGVmYXVsdCB2YWx1ZTogMjIwLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitIVE1MX0NPTE9SU1RZTEVfSFVFICAgID0gMjIwCisKKyMgVGhlIEhUTUxfQ09MT1JTVFlMRV9TQVQgdGFnIGNvbnRyb2xzIHRoZSBwdXJpdHkgKG9yIHNhdHVyYXRpb24pIG9mIHRoZSBjb2xvcnMKKyMgaW4gdGhlIEhUTUwgb3V0cHV0LiBGb3IgYSB2YWx1ZSBvZiAwIHRoZSBvdXRwdXQgd2lsbCB1c2UgZ3JheXNjYWxlcyBvbmx5LiBBCisjIHZhbHVlIG9mIDI1NSB3aWxsIHByb2R1Y2UgdGhlIG1vc3Qgdml2aWQgY29sb3JzLgorIyBNaW5pbXVtIHZhbHVlOiAwLCBtYXhpbXVtIHZhbHVlOiAyNTUsIGRlZmF1bHQgdmFsdWU6IDEwMC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9DT0xPUlNUWUxFX1NBVCAgICA9IDEwMAorCisjIFRoZSBIVE1MX0NPTE9SU1RZTEVfR0FNTUEgdGFnIGNvbnRyb2xzIHRoZSBnYW1tYSBjb3JyZWN0aW9uIGFwcGxpZWQgdG8gdGhlCisjIGx1bWluYW5jZSBjb21wb25lbnQgb2YgdGhlIGNvbG9ycyBpbiB0aGUgSFRNTCBvdXRwdXQuIFZhbHVlcyBiZWxvdyAxMDAKKyMgZ3JhZHVhbGx5IG1ha2UgdGhlIG91dHB1dCBsaWdodGVyLCB3aGVyZWFzIHZhbHVlcyBhYm92ZSAxMDAgbWFrZSB0aGUgb3V0cHV0CisjIGRhcmtlci4gVGhlIHZhbHVlIGRpdmlkZWQgYnkgMTAwIGlzIHRoZSBhY3R1YWwgZ2FtbWEgYXBwbGllZCwgc28gODAgcmVwcmVzZW50cworIyBhIGdhbW1hIG9mIDAuOCwgVGhlIHZhbHVlIDIyMCByZXByZXNlbnRzIGEgZ2FtbWEgb2YgMi4yLCBhbmQgMTAwIGRvZXMgbm90CisjIGNoYW5nZSB0aGUgZ2FtbWEuCisjIE1pbmltdW0gdmFsdWU6IDQwLCBtYXhpbXVtIHZhbHVlOiAyNDAsIGRlZmF1bHQgdmFsdWU6IDgwLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitIVE1MX0NPTE9SU1RZTEVfR0FNTUEgID0gODAKKworIyBJZiB0aGUgSFRNTF9USU1FU1RBTVAgdGFnIGlzIHNldCB0byBZRVMgdGhlbiB0aGUgZm9vdGVyIG9mIGVhY2ggZ2VuZXJhdGVkIEhUTUwKKyMgcGFnZSB3aWxsIGNvbnRhaW4gdGhlIGRhdGUgYW5kIHRpbWUgd2hlbiB0aGUgcGFnZSB3YXMgZ2VuZXJhdGVkLiBTZXR0aW5nIHRoaXMKKyMgdG8gWUVTIGNhbiBoZWxwIHRvIHNob3cgd2hlbiBkb3h5Z2VuIHdhcyBsYXN0IHJ1biBhbmQgdGh1cyBpZiB0aGUKKyMgZG9jdW1lbnRhdGlvbiBpcyB1cCB0byBkYXRlLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0hUTUxfVElNRVNUQU1QICAgICAgICAgPSBOTworCisjIElmIHRoZSBIVE1MX0RZTkFNSUNfU0VDVElPTlMgdGFnIGlzIHNldCB0byBZRVMgdGhlbiB0aGUgZ2VuZXJhdGVkIEhUTUwKKyMgZG9jdW1lbnRhdGlvbiB3aWxsIGNvbnRhaW4gc2VjdGlvbnMgdGhhdCBjYW4gYmUgaGlkZGVuIGFuZCBzaG93biBhZnRlciB0aGUKKyMgcGFnZSBoYXMgbG9hZGVkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0hUTUxfRFlOQU1JQ19TRUNUSU9OUyAgPSBOTworCisjIFdpdGggSFRNTF9JTkRFWF9OVU1fRU5UUklFUyBvbmUgY2FuIGNvbnRyb2wgdGhlIHByZWZlcnJlZCBudW1iZXIgb2YgZW50cmllcworIyBzaG93biBpbiB0aGUgdmFyaW91cyB0cmVlIHN0cnVjdHVyZWQgaW5kaWNlcyBpbml0aWFsbHk7IHRoZSB1c2VyIGNhbiBleHBhbmQKKyMgYW5kIGNvbGxhcHNlIGVudHJpZXMgZHluYW1pY2FsbHkgbGF0ZXIgb24uIERveHlnZW4gd2lsbCBleHBhbmQgdGhlIHRyZWUgdG8KKyMgc3VjaCBhIGxldmVsIHRoYXQgYXQgbW9zdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBlbnRyaWVzIGFyZSB2aXNpYmxlICh1bmxlc3MKKyMgYSBmdWxseSBjb2xsYXBzZWQgdHJlZSBhbHJlYWR5IGV4Y2VlZHMgdGhpcyBhbW91bnQpLiBTbyBzZXR0aW5nIHRoZSBudW1iZXIgb2YKKyMgZW50cmllcyAxIHdpbGwgcHJvZHVjZSBhIGZ1bGwgY29sbGFwc2VkIHRyZWUgYnkgZGVmYXVsdC4gMCBpcyBhIHNwZWNpYWwgdmFsdWUKKyMgcmVwcmVzZW50aW5nIGFuIGluZmluaXRlIG51bWJlciBvZiBlbnRyaWVzIGFuZCB3aWxsIHJlc3VsdCBpbiBhIGZ1bGwgZXhwYW5kZWQKKyMgdHJlZSBieSBkZWZhdWx0LgorIyBNaW5pbXVtIHZhbHVlOiAwLCBtYXhpbXVtIHZhbHVlOiA5OTk5LCBkZWZhdWx0IHZhbHVlOiAxMDAuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0hUTUxfSU5ERVhfTlVNX0VOVFJJRVMgPSAxMDAKKworIyBJZiB0aGUgR0VORVJBVEVfRE9DU0VUIHRhZyBpcyBzZXQgdG8gWUVTLCBhZGRpdGlvbmFsIGluZGV4IGZpbGVzIHdpbGwgYmUKKyMgZ2VuZXJhdGVkIHRoYXQgY2FuIGJlIHVzZWQgYXMgaW5wdXQgZm9yIEFwcGxlJ3MgWGNvZGUgMyBpbnRlZ3JhdGVkIGRldmVsb3BtZW50CisjIGVudmlyb25tZW50IChzZWU6IGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL3Rvb2xzL3hjb2RlLyksIGludHJvZHVjZWQgd2l0aAorIyBPU1ggMTAuNSAoTGVvcGFyZCkuIFRvIGNyZWF0ZSBhIGRvY3VtZW50YXRpb24gc2V0LCBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYQorIyBNYWtlZmlsZSBpbiB0aGUgSFRNTCBvdXRwdXQgZGlyZWN0b3J5LiBSdW5uaW5nIG1ha2Ugd2lsbCBwcm9kdWNlIHRoZSBkb2NzZXQgaW4KKyMgdGhhdCBkaXJlY3RvcnkgYW5kIHJ1bm5pbmcgbWFrZSBpbnN0YWxsIHdpbGwgaW5zdGFsbCB0aGUgZG9jc2V0IGluCisjIH4vTGlicmFyeS9EZXZlbG9wZXIvU2hhcmVkL0RvY3VtZW50YXRpb24vRG9jU2V0cyBzbyB0aGF0IFhjb2RlIHdpbGwgZmluZCBpdCBhdAorIyBzdGFydHVwLiBTZWUgaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vdG9vbHMvY3JlYXRpbmdkb2NzZXRzd2l0aGRveHlnZW4uaHRtbAorIyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitHRU5FUkFURV9ET0NTRVQgICAgICAgID0gTk8KKworIyBUaGlzIHRhZyBkZXRlcm1pbmVzIHRoZSBuYW1lIG9mIHRoZSBkb2NzZXQgZmVlZC4gQSBkb2N1bWVudGF0aW9uIGZlZWQgcHJvdmlkZXMKKyMgYW4gdW1icmVsbGEgdW5kZXIgd2hpY2ggbXVsdGlwbGUgZG9jdW1lbnRhdGlvbiBzZXRzIGZyb20gYSBzaW5nbGUgcHJvdmlkZXIKKyMgKHN1Y2ggYXMgYSBjb21wYW55IG9yIHByb2R1Y3Qgc3VpdGUpIGNhbiBiZSBncm91cGVkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogRG94eWdlbiBnZW5lcmF0ZWQgZG9jcy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0RPQ1NFVCBpcyBzZXQgdG8gWUVTLgorCitET0NTRVRfRkVFRE5BTUUgICAgICAgID0gIkRveHlnZW4gZ2VuZXJhdGVkIGRvY3MiCisKKyMgVGhpcyB0YWcgc3BlY2lmaWVzIGEgc3RyaW5nIHRoYXQgc2hvdWxkIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBkb2N1bWVudGF0aW9uCisjIHNldCBidW5kbGUuIFRoaXMgc2hvdWxkIGJlIGEgcmV2ZXJzZSBkb21haW4tbmFtZSBzdHlsZSBzdHJpbmcsIGUuZy4KKyMgY29tLm15Y29tcGFueS5NeURvY1NldC4gRG94eWdlbiB3aWxsIGFwcGVuZCAuZG9jc2V0IHRvIHRoZSBuYW1lLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogb3JnLmRveHlnZW4uUHJvamVjdC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0RPQ1NFVCBpcyBzZXQgdG8gWUVTLgorCitET0NTRVRfQlVORExFX0lEICAgICAgID0gb3JnLmRveHlnZW4uUHJvamVjdAorCisjIFRoZSBET0NTRVRfUFVCTElTSEVSX0lEIHRhZyBzcGVjaWZpZXMgYSBzdHJpbmcgdGhhdCBzaG91bGQgdW5pcXVlbHkgaWRlbnRpZnkKKyMgdGhlIGRvY3VtZW50YXRpb24gcHVibGlzaGVyLiBUaGlzIHNob3VsZCBiZSBhIHJldmVyc2UgZG9tYWluLW5hbWUgc3R5bGUKKyMgc3RyaW5nLCBlLmcuIGNvbS5teWNvbXBhbnkuTXlEb2NTZXQuZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IG9yZy5kb3h5Z2VuLlB1Ymxpc2hlci4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0RPQ1NFVCBpcyBzZXQgdG8gWUVTLgorCitET0NTRVRfUFVCTElTSEVSX0lEICAgID0gb3JnLmRveHlnZW4uUHVibGlzaGVyCisKKyMgVGhlIERPQ1NFVF9QVUJMSVNIRVJfTkFNRSB0YWcgaWRlbnRpZmllcyB0aGUgZG9jdW1lbnRhdGlvbiBwdWJsaXNoZXIuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBQdWJsaXNoZXIuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9ET0NTRVQgaXMgc2V0IHRvIFlFUy4KKworRE9DU0VUX1BVQkxJU0hFUl9OQU1FICA9IFB1Ymxpc2hlcgorCisjIElmIHRoZSBHRU5FUkFURV9IVE1MSEVMUCB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gZ2VuZXJhdGVzIHRocmVlCisjIGFkZGl0aW9uYWwgSFRNTCBpbmRleCBmaWxlczogaW5kZXguaGhwLCBpbmRleC5oaGMsIGFuZCBpbmRleC5oaGsuIFRoZQorIyBpbmRleC5oaHAgaXMgYSBwcm9qZWN0IGZpbGUgdGhhdCBjYW4gYmUgcmVhZCBieSBNaWNyb3NvZnQncyBIVE1MIEhlbHAgV29ya3Nob3AKKyMgKHNlZTogaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL2VuLXVzL2Rvd25sb2FkL2RldGFpbHMuYXNweD9pZD0yMTEzOCkgb24KKyMgV2luZG93cy4KKyMKKyMgVGhlIEhUTUwgSGVscCBXb3Jrc2hvcCBjb250YWlucyBhIGNvbXBpbGVyIHRoYXQgY2FuIGNvbnZlcnQgYWxsIEhUTUwgb3V0cHV0CisjIGdlbmVyYXRlZCBieSBkb3h5Z2VuIGludG8gYSBzaW5nbGUgY29tcGlsZWQgSFRNTCBmaWxlICguY2htKS4gQ29tcGlsZWQgSFRNTAorIyBmaWxlcyBhcmUgbm93IHVzZWQgYXMgdGhlIFdpbmRvd3MgOTggaGVscCBmb3JtYXQsIGFuZCB3aWxsIHJlcGxhY2UgdGhlIG9sZAorIyBXaW5kb3dzIGhlbHAgZm9ybWF0ICguaGxwKSBvbiBhbGwgV2luZG93cyBwbGF0Zm9ybXMgaW4gdGhlIGZ1dHVyZS4gQ29tcHJlc3NlZAorIyBIVE1MIGZpbGVzIGFsc28gY29udGFpbiBhbiBpbmRleCwgYSB0YWJsZSBvZiBjb250ZW50cywgYW5kIHlvdSBjYW4gc2VhcmNoIGZvcgorIyB3b3JkcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gVGhlIEhUTUwgd29ya3Nob3AgYWxzbyBjb250YWlucyBhIHZpZXdlciBmb3IKKyMgY29tcHJlc3NlZCBIVE1MIGZpbGVzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0dFTkVSQVRFX0hUTUxIRUxQICAgICAgPSBOTworCisjIFRoZSBDSE1fRklMRSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgZmlsZSBuYW1lIG9mIHRoZSByZXN1bHRpbmcgLmNobQorIyBmaWxlLiBZb3UgY2FuIGFkZCBhIHBhdGggaW4gZnJvbnQgb2YgdGhlIGZpbGUgaWYgdGhlIHJlc3VsdCBzaG91bGQgbm90IGJlCisjIHdyaXR0ZW4gdG8gdGhlIGh0bWwgb3V0cHV0IGRpcmVjdG9yeS4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUxIRUxQIGlzIHNldCB0byBZRVMuCisKK0NITV9GSUxFICAgICAgICAgICAgICAgPQorCisjIFRoZSBISENfTE9DQVRJT04gdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGxvY2F0aW9uIChhYnNvbHV0ZSBwYXRoCisjIGluY2x1ZGluZyBmaWxlIG5hbWUpIG9mIHRoZSBIVE1MIGhlbHAgY29tcGlsZXIgKGhoYy5leGUpLiBJZiBub24tZW1wdHksCisjIGRveHlnZW4gd2lsbCB0cnkgdG8gcnVuIHRoZSBIVE1MIGhlbHAgY29tcGlsZXIgb24gdGhlIGdlbmVyYXRlZCBpbmRleC5oaHAuCisjIFRoZSBmaWxlIGhhcyB0byBiZSBzcGVjaWZpZWQgd2l0aCBmdWxsIHBhdGguCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MSEVMUCBpcyBzZXQgdG8gWUVTLgorCitISENfTE9DQVRJT04gICAgICAgICAgID0KKworIyBUaGUgR0VORVJBVEVfQ0hJIGZsYWcgY29udHJvbHMgaWYgYSBzZXBhcmF0ZSAuY2hpIGluZGV4IGZpbGUgaXMgZ2VuZXJhdGVkCisjIChZRVMpIG9yIHRoYXQgaXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBtYXN0ZXIgLmNobSBmaWxlIChOTykuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUxIRUxQIGlzIHNldCB0byBZRVMuCisKK0dFTkVSQVRFX0NISSAgICAgICAgICAgPSBOTworCisjIFRoZSBDSE1fSU5ERVhfRU5DT0RJTkcgaXMgdXNlZCB0byBlbmNvZGUgSHRtbEhlbHAgaW5kZXggKGhoayksIGNvbnRlbnQgKGhoYykKKyMgYW5kIHByb2plY3QgZmlsZSBjb250ZW50LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTEhFTFAgaXMgc2V0IHRvIFlFUy4KKworQ0hNX0lOREVYX0VOQ09ESU5HICAgICA9CisKKyMgVGhlIEJJTkFSWV9UT0MgZmxhZyBjb250cm9scyB3aGV0aGVyIGEgYmluYXJ5IHRhYmxlIG9mIGNvbnRlbnRzIGlzIGdlbmVyYXRlZAorIyAoWUVTKSBvciBhIG5vcm1hbCB0YWJsZSBvZiBjb250ZW50cyAoTk8pIGluIHRoZSAuY2htIGZpbGUuIEZ1cnRoZXJtb3JlIGl0CisjIGVuYWJsZXMgdGhlIFByZXZpb3VzIGFuZCBOZXh0IGJ1dHRvbnMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUxIRUxQIGlzIHNldCB0byBZRVMuCisKK0JJTkFSWV9UT0MgICAgICAgICAgICAgPSBOTworCisjIFRoZSBUT0NfRVhQQU5EIGZsYWcgY2FuIGJlIHNldCB0byBZRVMgdG8gYWRkIGV4dHJhIGl0ZW1zIGZvciBncm91cCBtZW1iZXJzIHRvCisjIHRoZSB0YWJsZSBvZiBjb250ZW50cyBvZiB0aGUgSFRNTCBoZWxwIGRvY3VtZW50YXRpb24gYW5kIHRvIHRoZSB0cmVlIHZpZXcuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUxIRUxQIGlzIHNldCB0byBZRVMuCisKK1RPQ19FWFBBTkQgICAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBHRU5FUkFURV9RSFAgdGFnIGlzIHNldCB0byBZRVMgYW5kIGJvdGggUUhQX05BTUVTUEFDRSBhbmQKKyMgUUhQX1ZJUlRVQUxfRk9MREVSIGFyZSBzZXQsIGFuIGFkZGl0aW9uYWwgaW5kZXggZmlsZSB3aWxsIGJlIGdlbmVyYXRlZCB0aGF0CisjIGNhbiBiZSB1c2VkIGFzIGlucHV0IGZvciBRdCdzIHFoZWxwZ2VuZXJhdG9yIHRvIGdlbmVyYXRlIGEgUXQgQ29tcHJlc3NlZCBIZWxwCisjICgucWNoKSBvZiB0aGUgZ2VuZXJhdGVkIEhUTUwgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitHRU5FUkFURV9RSFAgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgUUhHX0xPQ0FUSU9OIHRhZyBpcyBzcGVjaWZpZWQsIHRoZSBRQ0hfRklMRSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeQorIyB0aGUgZmlsZSBuYW1lIG9mIHRoZSByZXN1bHRpbmcgLnFjaCBmaWxlLiBUaGUgcGF0aCBzcGVjaWZpZWQgaXMgcmVsYXRpdmUgdG8KKyMgdGhlIEhUTUwgb3V0cHV0IGZvbGRlci4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1FIUCBpcyBzZXQgdG8gWUVTLgorCitRQ0hfRklMRSAgICAgICAgICAgICAgID0KKworIyBUaGUgUUhQX05BTUVTUEFDRSB0YWcgc3BlY2lmaWVzIHRoZSBuYW1lc3BhY2UgdG8gdXNlIHdoZW4gZ2VuZXJhdGluZyBRdCBIZWxwCisjIFByb2plY3Qgb3V0cHV0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIFF0IEhlbHAgUHJvamVjdCAvIE5hbWVzcGFjZQorIyAoc2VlOiBodHRwOi8vcXQtcHJvamVjdC5vcmcvZG9jL3F0LTQuOC9xdGhlbHBwcm9qZWN0Lmh0bWwjbmFtZXNwYWNlKS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IG9yZy5kb3h5Z2VuLlByb2plY3QuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9RSFAgaXMgc2V0IHRvIFlFUy4KKworUUhQX05BTUVTUEFDRSAgICAgICAgICA9IG9yZy5kb3h5Z2VuLlByb2plY3QKKworIyBUaGUgUUhQX1ZJUlRVQUxfRk9MREVSIHRhZyBzcGVjaWZpZXMgdGhlIG5hbWVzcGFjZSB0byB1c2Ugd2hlbiBnZW5lcmF0aW5nIFF0CisjIEhlbHAgUHJvamVjdCBvdXRwdXQuIEZvciBtb3JlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgUXQgSGVscCBQcm9qZWN0IC8gVmlydHVhbAorIyBGb2xkZXJzIChzZWU6IGh0dHA6Ly9xdC1wcm9qZWN0Lm9yZy9kb2MvcXQtNC44L3F0aGVscHByb2plY3QuaHRtbCN2aXJ0dWFsLQorIyBmb2xkZXJzKS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IGRvYy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1FIUCBpcyBzZXQgdG8gWUVTLgorCitRSFBfVklSVFVBTF9GT0xERVIgICAgID0gZG9jCisKKyMgSWYgdGhlIFFIUF9DVVNUX0ZJTFRFUl9OQU1FIHRhZyBpcyBzZXQsIGl0IHNwZWNpZmllcyB0aGUgbmFtZSBvZiBhIGN1c3RvbQorIyBmaWx0ZXIgdG8gYWRkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIFF0IEhlbHAgUHJvamVjdCAvIEN1c3RvbQorIyBGaWx0ZXJzIChzZWU6IGh0dHA6Ly9xdC1wcm9qZWN0Lm9yZy9kb2MvcXQtNC44L3F0aGVscHByb2plY3QuaHRtbCNjdXN0b20tCisjIGZpbHRlcnMpLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUUhQIGlzIHNldCB0byBZRVMuCisKK1FIUF9DVVNUX0ZJTFRFUl9OQU1FICAgPQorCisjIFRoZSBRSFBfQ1VTVF9GSUxURVJfQVRUUlMgdGFnIHNwZWNpZmllcyB0aGUgbGlzdCBvZiB0aGUgYXR0cmlidXRlcyBvZiB0aGUKKyMgY3VzdG9tIGZpbHRlciB0byBhZGQuIEZvciBtb3JlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgUXQgSGVscCBQcm9qZWN0IC8gQ3VzdG9tCisjIEZpbHRlcnMgKHNlZTogaHR0cDovL3F0LXByb2plY3Qub3JnL2RvYy9xdC00LjgvcXRoZWxwcHJvamVjdC5odG1sI2N1c3RvbS0KKyMgZmlsdGVycykuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9RSFAgaXMgc2V0IHRvIFlFUy4KKworUUhQX0NVU1RfRklMVEVSX0FUVFJTICA9CisKKyMgVGhlIFFIUF9TRUNUX0ZJTFRFUl9BVFRSUyB0YWcgc3BlY2lmaWVzIHRoZSBsaXN0IG9mIHRoZSBhdHRyaWJ1dGVzIHRoaXMKKyMgcHJvamVjdCdzIGZpbHRlciBzZWN0aW9uIG1hdGNoZXMuIFF0IEhlbHAgUHJvamVjdCAvIEZpbHRlciBBdHRyaWJ1dGVzIChzZWU6CisjIGh0dHA6Ly9xdC1wcm9qZWN0Lm9yZy9kb2MvcXQtNC44L3F0aGVscHByb2plY3QuaHRtbCNmaWx0ZXItYXR0cmlidXRlcykuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9RSFAgaXMgc2V0IHRvIFlFUy4KKworUUhQX1NFQ1RfRklMVEVSX0FUVFJTICA9CisKKyMgVGhlIFFIR19MT0NBVElPTiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgUXQncworIyBxaGVscGdlbmVyYXRvci4gSWYgbm9uLWVtcHR5IGRveHlnZW4gd2lsbCB0cnkgdG8gcnVuIHFoZWxwZ2VuZXJhdG9yIG9uIHRoZQorIyBnZW5lcmF0ZWQgLnFocCBmaWxlLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUUhQIGlzIHNldCB0byBZRVMuCisKK1FIR19MT0NBVElPTiAgICAgICAgICAgPQorCisjIElmIHRoZSBHRU5FUkFURV9FQ0xJUFNFSEVMUCB0YWcgaXMgc2V0IHRvIFlFUywgYWRkaXRpb25hbCBpbmRleCBmaWxlcyB3aWxsIGJlCisjIGdlbmVyYXRlZCwgdG9nZXRoZXIgd2l0aCB0aGUgSFRNTCBmaWxlcywgdGhleSBmb3JtIGFuIEVjbGlwc2UgaGVscCBwbHVnaW4uIFRvCisjIGluc3RhbGwgdGhpcyBwbHVnaW4gYW5kIG1ha2UgaXQgYXZhaWxhYmxlIHVuZGVyIHRoZSBoZWxwIGNvbnRlbnRzIG1lbnUgaW4KKyMgRWNsaXBzZSwgdGhlIGNvbnRlbnRzIG9mIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgSFRNTCBhbmQgWE1MIGZpbGVzIG5lZWRzCisjIHRvIGJlIGNvcGllZCBpbnRvIHRoZSBwbHVnaW5zIGRpcmVjdG9yeSBvZiBlY2xpcHNlLiBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5CisjIHdpdGhpbiB0aGUgcGx1Z2lucyBkaXJlY3Rvcnkgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBFQ0xJUFNFX0RPQ19JRCB2YWx1ZS4KKyMgQWZ0ZXIgY29weWluZyBFY2xpcHNlIG5lZWRzIHRvIGJlIHJlc3RhcnRlZCBiZWZvcmUgdGhlIGhlbHAgYXBwZWFycy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitHRU5FUkFURV9FQ0xJUFNFSEVMUCAgID0gTk8KKworIyBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgRWNsaXBzZSBoZWxwIHBsdWdpbi4gV2hlbiBpbnN0YWxsaW5nIHRoZSBwbHVnaW4KKyMgdGhlIGRpcmVjdG9yeSBuYW1lIGNvbnRhaW5pbmcgdGhlIEhUTUwgYW5kIFhNTCBmaWxlcyBzaG91bGQgYWxzbyBoYXZlIHRoaXMKKyMgbmFtZS4gRWFjaCBkb2N1bWVudGF0aW9uIHNldCBzaG91bGQgaGF2ZSBpdHMgb3duIGlkZW50aWZpZXIuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBvcmcuZG94eWdlbi5Qcm9qZWN0LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfRUNMSVBTRUhFTFAgaXMgc2V0IHRvIFlFUy4KKworRUNMSVBTRV9ET0NfSUQgICAgICAgICA9IG9yZy5kb3h5Z2VuLlByb2plY3QKKworIyBJZiB5b3Ugd2FudCBmdWxsIGNvbnRyb2wgb3ZlciB0aGUgbGF5b3V0IG9mIHRoZSBnZW5lcmF0ZWQgSFRNTCBwYWdlcyBpdCBtaWdodAorIyBiZSBuZWNlc3NhcnkgdG8gZGlzYWJsZSB0aGUgaW5kZXggYW5kIHJlcGxhY2UgaXQgd2l0aCB5b3VyIG93bi4gVGhlCisjIERJU0FCTEVfSU5ERVggdGFnIGNhbiBiZSB1c2VkIHRvIHR1cm4gb24vb2ZmIHRoZSBjb25kZW5zZWQgaW5kZXggKHRhYnMpIGF0IHRvcAorIyBvZiBlYWNoIEhUTUwgcGFnZS4gQSB2YWx1ZSBvZiBOTyBlbmFibGVzIHRoZSBpbmRleCBhbmQgdGhlIHZhbHVlIFlFUyBkaXNhYmxlcworIyBpdC4gU2luY2UgdGhlIHRhYnMgaW4gdGhlIGluZGV4IGNvbnRhaW4gdGhlIHNhbWUgaW5mb3JtYXRpb24gYXMgdGhlIG5hdmlnYXRpb24KKyMgdHJlZSwgeW91IGNhbiBzZXQgdGhpcyBvcHRpb24gdG8gWUVTIGlmIHlvdSBhbHNvIHNldCBHRU5FUkFURV9UUkVFVklFVyB0byBZRVMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworRElTQUJMRV9JTkRFWCAgICAgICAgICA9IE5PCisKKyMgVGhlIEdFTkVSQVRFX1RSRUVWSUVXIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgd2hldGhlciBhIHRyZWUtbGlrZSBpbmRleAorIyBzdHJ1Y3R1cmUgc2hvdWxkIGJlIGdlbmVyYXRlZCB0byBkaXNwbGF5IGhpZXJhcmNoaWNhbCBpbmZvcm1hdGlvbi4gSWYgdGhlIHRhZworIyB2YWx1ZSBpcyBzZXQgdG8gWUVTLCBhIHNpZGUgcGFuZWwgd2lsbCBiZSBnZW5lcmF0ZWQgY29udGFpbmluZyBhIHRyZWUtbGlrZQorIyBpbmRleCBzdHJ1Y3R1cmUgKGp1c3QgbGlrZSB0aGUgb25lIHRoYXQgaXMgZ2VuZXJhdGVkIGZvciBIVE1MIEhlbHApLiBGb3IgdGhpcworIyB0byB3b3JrIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIEphdmFTY3JpcHQsIERIVE1MLCBDU1MgYW5kIGZyYW1lcyBpcyByZXF1aXJlZAorIyAoaS5lLiBhbnkgbW9kZXJuIGJyb3dzZXIpLiBXaW5kb3dzIHVzZXJzIGFyZSBwcm9iYWJseSBiZXR0ZXIgb2ZmIHVzaW5nIHRoZQorIyBIVE1MIGhlbHAgZmVhdHVyZS4gVmlhIGN1c3RvbSBzdHlsZSBzaGVldHMgKHNlZSBIVE1MX0VYVFJBX1NUWUxFU0hFRVQpIG9uZSBjYW4KKyMgZnVydGhlciBmaW5lLXR1bmUgdGhlIGxvb2sgb2YgdGhlIGluZGV4LiBBcyBhbiBleGFtcGxlLCB0aGUgZGVmYXVsdCBzdHlsZQorIyBzaGVldCBnZW5lcmF0ZWQgYnkgZG94eWdlbiBoYXMgYW4gZXhhbXBsZSB0aGF0IHNob3dzIGhvdyB0byBwdXQgYW4gaW1hZ2UgYXQKKyMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUgaW5zdGVhZCBvZiB0aGUgUFJPSkVDVF9OQU1FLiBTaW5jZSB0aGUgdHJlZSBiYXNpY2FsbHkgaGFzCisjIHRoZSBzYW1lIGluZm9ybWF0aW9uIGFzIHRoZSB0YWIgaW5kZXgsIHlvdSBjb3VsZCBjb25zaWRlciBzZXR0aW5nCisjIERJU0FCTEVfSU5ERVggdG8gWUVTIHdoZW4gZW5hYmxpbmcgdGhpcyBvcHRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworR0VORVJBVEVfVFJFRVZJRVcgICAgICA9IE5PCisKKyMgVGhlIEVOVU1fVkFMVUVTX1BFUl9MSU5FIHRhZyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIG51bWJlciBvZiBlbnVtIHZhbHVlcyB0aGF0CisjIGRveHlnZW4gd2lsbCBncm91cCBvbiBvbmUgbGluZSBpbiB0aGUgZ2VuZXJhdGVkIEhUTUwgZG9jdW1lbnRhdGlvbi4KKyMKKyMgTm90ZSB0aGF0IGEgdmFsdWUgb2YgMCB3aWxsIGNvbXBsZXRlbHkgc3VwcHJlc3MgdGhlIGVudW0gdmFsdWVzIGZyb20gYXBwZWFyaW5nCisjIGluIHRoZSBvdmVydmlldyBzZWN0aW9uLgorIyBNaW5pbXVtIHZhbHVlOiAwLCBtYXhpbXVtIHZhbHVlOiAyMCwgZGVmYXVsdCB2YWx1ZTogNC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworRU5VTV9WQUxVRVNfUEVSX0xJTkUgICA9IDQKKworIyBJZiB0aGUgdHJlZXZpZXcgaXMgZW5hYmxlZCAoc2VlIEdFTkVSQVRFX1RSRUVWSUVXKSB0aGVuIHRoaXMgdGFnIGNhbiBiZSB1c2VkCisjIHRvIHNldCB0aGUgaW5pdGlhbCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgZnJhbWUgaW4gd2hpY2ggdGhlIHRyZWUgaXMgc2hvd24uCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDE1MDAsIGRlZmF1bHQgdmFsdWU6IDI1MC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworVFJFRVZJRVdfV0lEVEggICAgICAgICA9IDI1MAorCisjIElmIHRoZSBFWFRfTElOS1NfSU5fV0lORE9XIG9wdGlvbiBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgb3BlbiBsaW5rcyB0bworIyBleHRlcm5hbCBzeW1ib2xzIGltcG9ydGVkIHZpYSB0YWcgZmlsZXMgaW4gYSBzZXBhcmF0ZSB3aW5kb3cuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworRVhUX0xJTktTX0lOX1dJTkRPVyAgICA9IE5PCisKKyMgVXNlIHRoaXMgdGFnIHRvIGNoYW5nZSB0aGUgZm9udCBzaXplIG9mIExhVGVYIGZvcm11bGFzIGluY2x1ZGVkIGFzIGltYWdlcyBpbgorIyB0aGUgSFRNTCBkb2N1bWVudGF0aW9uLiBXaGVuIHlvdSBjaGFuZ2UgdGhlIGZvbnQgc2l6ZSBhZnRlciBhIHN1Y2Nlc3NmdWwKKyMgZG94eWdlbiBydW4geW91IG5lZWQgdG8gbWFudWFsbHkgcmVtb3ZlIGFueSBmb3JtXyoucG5nIGltYWdlcyBmcm9tIHRoZSBIVE1MCisjIG91dHB1dCBkaXJlY3RvcnkgdG8gZm9yY2UgdGhlbSB0byBiZSByZWdlbmVyYXRlZC4KKyMgTWluaW11bSB2YWx1ZTogOCwgbWF4aW11bSB2YWx1ZTogNTAsIGRlZmF1bHQgdmFsdWU6IDEwLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitGT1JNVUxBX0ZPTlRTSVpFICAgICAgID0gMTAKKworIyBVc2UgdGhlIEZPUk1VTEFfVFJBTlBBUkVOVCB0YWcgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRoZSBpbWFnZXMKKyMgZ2VuZXJhdGVkIGZvciBmb3JtdWxhcyBhcmUgdHJhbnNwYXJlbnQgUE5Hcy4gVHJhbnNwYXJlbnQgUE5HcyBhcmUgbm90CisjIHN1cHBvcnRlZCBwcm9wZXJseSBmb3IgSUUgNi4wLCBidXQgYXJlIHN1cHBvcnRlZCBvbiBhbGwgbW9kZXJuIGJyb3dzZXJzLgorIworIyBOb3RlIHRoYXQgd2hlbiBjaGFuZ2luZyB0aGlzIG9wdGlvbiB5b3UgbmVlZCB0byBkZWxldGUgYW55IGZvcm1fKi5wbmcgZmlsZXMgaW4KKyMgdGhlIEhUTUwgb3V0cHV0IGRpcmVjdG9yeSBiZWZvcmUgdGhlIGNoYW5nZXMgaGF2ZSBlZmZlY3QuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0ZPUk1VTEFfVFJBTlNQQVJFTlQgICAgPSBZRVMKKworIyBFbmFibGUgdGhlIFVTRV9NQVRISkFYIG9wdGlvbiB0byByZW5kZXIgTGFUZVggZm9ybXVsYXMgdXNpbmcgTWF0aEpheCAoc2VlCisjIGh0dHA6Ly93d3cubWF0aGpheC5vcmcpIHdoaWNoIHVzZXMgY2xpZW50IHNpZGUgSmF2YXNjcmlwdCBmb3IgdGhlIHJlbmRlcmluZworIyBpbnN0ZWFkIG9mIHVzaW5nIHByZS1yZW5kZXJlZCBiaXRtYXBzLiBVc2UgdGhpcyBpZiB5b3UgZG8gbm90IGhhdmUgTGFUZVgKKyMgaW5zdGFsbGVkIG9yIGlmIHlvdSB3YW50IHRvIGZvcm11bGFzIGxvb2sgcHJldHRpZXIgaW4gdGhlIEhUTUwgb3V0cHV0LiBXaGVuCisjIGVuYWJsZWQgeW91IG1heSBhbHNvIG5lZWQgdG8gaW5zdGFsbCBNYXRoSmF4IHNlcGFyYXRlbHkgYW5kIGNvbmZpZ3VyZSB0aGUgcGF0aAorIyB0byBpdCB1c2luZyB0aGUgTUFUSEpBWF9SRUxQQVRIIG9wdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitVU0VfTUFUSEpBWCAgICAgICAgICAgID0gTk8KKworIyBXaGVuIE1hdGhKYXggaXMgZW5hYmxlZCB5b3UgY2FuIHNldCB0aGUgZGVmYXVsdCBvdXRwdXQgZm9ybWF0IHRvIGJlIHVzZWQgZm9yCisjIHRoZSBNYXRoSmF4IG91dHB1dC4gU2VlIHRoZSBNYXRoSmF4IHNpdGUgKHNlZToKKyMgaHR0cDovL2RvY3MubWF0aGpheC5vcmcvZW4vbGF0ZXN0L291dHB1dC5odG1sKSBmb3IgbW9yZSBkZXRhaWxzLgorIyBQb3NzaWJsZSB2YWx1ZXMgYXJlOiBIVE1MLUNTUyAod2hpY2ggaXMgc2xvd2VyLCBidXQgaGFzIHRoZSBiZXN0CisjIGNvbXBhdGliaWxpdHkpLCBOYXRpdmVNTUwgKGkuZS4gTWF0aE1MKSBhbmQgU1ZHLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogSFRNTC1DU1MuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBVU0VfTUFUSEpBWCBpcyBzZXQgdG8gWUVTLgorCitNQVRISkFYX0ZPUk1BVCAgICAgICAgID0gSFRNTC1DU1MKKworIyBXaGVuIE1hdGhKYXggaXMgZW5hYmxlZCB5b3UgbmVlZCB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiByZWxhdGl2ZSB0byB0aGUgSFRNTAorIyBvdXRwdXQgZGlyZWN0b3J5IHVzaW5nIHRoZSBNQVRISkFYX1JFTFBBVEggb3B0aW9uLiBUaGUgZGVzdGluYXRpb24gZGlyZWN0b3J5CisjIHNob3VsZCBjb250YWluIHRoZSBNYXRoSmF4LmpzIHNjcmlwdC4gRm9yIGluc3RhbmNlLCBpZiB0aGUgbWF0aGpheCBkaXJlY3RvcnkKKyMgaXMgbG9jYXRlZCBhdCB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgSFRNTCBvdXRwdXQgZGlyZWN0b3J5LCB0aGVuCisjIE1BVEhKQVhfUkVMUEFUSCBzaG91bGQgYmUgLi4vbWF0aGpheC4gVGhlIGRlZmF1bHQgdmFsdWUgcG9pbnRzIHRvIHRoZSBNYXRoSmF4CisjIENvbnRlbnQgRGVsaXZlcnkgTmV0d29yayBzbyB5b3UgY2FuIHF1aWNrbHkgc2VlIHRoZSByZXN1bHQgd2l0aG91dCBpbnN0YWxsaW5nCisjIE1hdGhKYXguIEhvd2V2ZXIsIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIGluc3RhbGwgYSBsb2NhbCBjb3B5IG9mCisjIE1hdGhKYXggZnJvbSBodHRwOi8vd3d3Lm1hdGhqYXgub3JnIGJlZm9yZSBkZXBsb3ltZW50LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogaHR0cDovL2Nkbi5tYXRoamF4Lm9yZy9tYXRoamF4L2xhdGVzdC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFVTRV9NQVRISkFYIGlzIHNldCB0byBZRVMuCisKK01BVEhKQVhfUkVMUEFUSCAgICAgICAgPSBodHRwOi8vY2RuLm1hdGhqYXgub3JnL21hdGhqYXgvbGF0ZXN0CisKKyMgVGhlIE1BVEhKQVhfRVhURU5TSU9OUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBNYXRoSmF4CisjIGV4dGVuc2lvbiBuYW1lcyB0aGF0IHNob3VsZCBiZSBlbmFibGVkIGR1cmluZyBNYXRoSmF4IHJlbmRlcmluZy4gRm9yIGV4YW1wbGUKKyMgTUFUSEpBWF9FWFRFTlNJT05TID0gVGVYL0FNU21hdGggVGVYL0FNU3N5bWJvbHMKKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFVTRV9NQVRISkFYIGlzIHNldCB0byBZRVMuCisKK01BVEhKQVhfRVhURU5TSU9OUyAgICAgPQorCisjIFRoZSBNQVRISkFYX0NPREVGSUxFIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgZmlsZSB3aXRoIGphdmFzY3JpcHQgcGllY2VzCisjIG9mIGNvZGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gc3RhcnR1cCBvZiB0aGUgTWF0aEpheCBjb2RlLiBTZWUgdGhlIE1hdGhKYXggc2l0ZQorIyAoc2VlOiBodHRwOi8vZG9jcy5tYXRoamF4Lm9yZy9lbi9sYXRlc3Qvb3V0cHV0Lmh0bWwpIGZvciBtb3JlIGRldGFpbHMuIEZvciBhbgorIyBleGFtcGxlIHNlZSB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFVTRV9NQVRISkFYIGlzIHNldCB0byBZRVMuCisKK01BVEhKQVhfQ09ERUZJTEUgICAgICAgPQorCisjIFdoZW4gdGhlIFNFQVJDSEVOR0lORSB0YWcgaXMgZW5hYmxlZCBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBzZWFyY2ggYm94IGZvcgorIyB0aGUgSFRNTCBvdXRwdXQuIFRoZSB1bmRlcmx5aW5nIHNlYXJjaCBlbmdpbmUgdXNlcyBqYXZhc2NyaXB0IGFuZCBESFRNTCBhbmQKKyMgc2hvdWxkIHdvcmsgb24gYW55IG1vZGVybiBicm93c2VyLiBOb3RlIHRoYXQgd2hlbiB1c2luZyBIVE1MIGhlbHAKKyMgKEdFTkVSQVRFX0hUTUxIRUxQKSwgUXQgaGVscCAoR0VORVJBVEVfUUhQKSwgb3IgZG9jc2V0cyAoR0VORVJBVEVfRE9DU0VUKQorIyB0aGVyZSBpcyBhbHJlYWR5IGEgc2VhcmNoIGZ1bmN0aW9uIHNvIHRoaXMgb25lIHNob3VsZCB0eXBpY2FsbHkgYmUgZGlzYWJsZWQuCisjIEZvciBsYXJnZSBwcm9qZWN0cyB0aGUgamF2YXNjcmlwdCBiYXNlZCBzZWFyY2ggZW5naW5lIGNhbiBiZSBzbG93LCB0aGVuCisjIGVuYWJsaW5nIFNFUlZFUl9CQVNFRF9TRUFSQ0ggbWF5IHByb3ZpZGUgYSBiZXR0ZXIgc29sdXRpb24uIEl0IGlzIHBvc3NpYmxlIHRvCisjIHNlYXJjaCB1c2luZyB0aGUga2V5Ym9hcmQ7IHRvIGp1bXAgdG8gdGhlIHNlYXJjaCBib3ggdXNlIDxhY2Nlc3Mga2V5PiArIFMKKyMgKHdoYXQgdGhlIDxhY2Nlc3Mga2V5PiBpcyBkZXBlbmRzIG9uIHRoZSBPUyBhbmQgYnJvd3NlciwgYnV0IGl0IGlzIHR5cGljYWxseQorIyA8Q1RSTD4sIDxBTFQ+LzxvcHRpb24+LCBvciBib3RoKS4gSW5zaWRlIHRoZSBzZWFyY2ggYm94IHVzZSB0aGUgPGN1cnNvciBkb3duCisjIGtleT4gdG8ganVtcCBpbnRvIHRoZSBzZWFyY2ggcmVzdWx0cyB3aW5kb3csIHRoZSByZXN1bHRzIGNhbiBiZSBuYXZpZ2F0ZWQKKyMgdXNpbmcgdGhlIDxjdXJzb3Iga2V5cz4uIFByZXNzIDxFbnRlcj4gdG8gc2VsZWN0IGFuIGl0ZW0gb3IgPGVzY2FwZT4gdG8gY2FuY2VsCisjIHRoZSBzZWFyY2guIFRoZSBmaWx0ZXIgb3B0aW9ucyBjYW4gYmUgc2VsZWN0ZWQgd2hlbiB0aGUgY3Vyc29yIGlzIGluc2lkZSB0aGUKKyMgc2VhcmNoIGJveCBieSBwcmVzc2luZyA8U2hpZnQ+KzxjdXJzb3IgZG93bj4uIEFsc28gaGVyZSB1c2UgdGhlIDxjdXJzb3Iga2V5cz4KKyMgdG8gc2VsZWN0IGEgZmlsdGVyIGFuZCA8RW50ZXI+IG9yIDxlc2NhcGU+IHRvIGFjdGl2YXRlIG9yIGNhbmNlbCB0aGUgZmlsdGVyCisjIG9wdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworU0VBUkNIRU5HSU5FICAgICAgICAgICA9IE5PCisKKyMgV2hlbiB0aGUgU0VSVkVSX0JBU0VEX1NFQVJDSCB0YWcgaXMgZW5hYmxlZCB0aGUgc2VhcmNoIGVuZ2luZSB3aWxsIGJlCisjIGltcGxlbWVudGVkIHVzaW5nIGEgd2ViIHNlcnZlciBpbnN0ZWFkIG9mIGEgd2ViIGNsaWVudCB1c2luZyBKYXZhc2NyaXB0LiBUaGVyZQorIyBhcmUgdHdvIGZsYXZvcnMgb2Ygd2ViIHNlcnZlciBiYXNlZCBzZWFyY2hpbmcgZGVwZW5kaW5nIG9uIHRoZSBFWFRFUk5BTF9TRUFSQ0gKKyMgc2V0dGluZy4gV2hlbiBkaXNhYmxlZCwgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgUEhQIHNjcmlwdCBmb3Igc2VhcmNoaW5nIGFuZAorIyBhbiBpbmRleCBmaWxlIHVzZWQgYnkgdGhlIHNjcmlwdC4gV2hlbiBFWFRFUk5BTF9TRUFSQ0ggaXMgZW5hYmxlZCB0aGUgaW5kZXhpbmcKKyMgYW5kIHNlYXJjaGluZyBuZWVkcyB0byBiZSBwcm92aWRlZCBieSBleHRlcm5hbCB0b29scy4gU2VlIHRoZSBzZWN0aW9uCisjICJFeHRlcm5hbCBJbmRleGluZyBhbmQgU2VhcmNoaW5nIiBmb3IgZGV0YWlscy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgU0VBUkNIRU5HSU5FIGlzIHNldCB0byBZRVMuCisKK1NFUlZFUl9CQVNFRF9TRUFSQ0ggICAgPSBOTworCisjIFdoZW4gRVhURVJOQUxfU0VBUkNIIHRhZyBpcyBlbmFibGVkIGRveHlnZW4gd2lsbCBubyBsb25nZXIgZ2VuZXJhdGUgdGhlIFBIUAorIyBzY3JpcHQgZm9yIHNlYXJjaGluZy4gSW5zdGVhZCB0aGUgc2VhcmNoIHJlc3VsdHMgYXJlIHdyaXR0ZW4gdG8gYW4gWE1MIGZpbGUKKyMgd2hpY2ggbmVlZHMgdG8gYmUgcHJvY2Vzc2VkIGJ5IGFuIGV4dGVybmFsIGluZGV4ZXIuIERveHlnZW4gd2lsbCBpbnZva2UgYW4KKyMgZXh0ZXJuYWwgc2VhcmNoIGVuZ2luZSBwb2ludGVkIHRvIGJ5IHRoZSBTRUFSQ0hFTkdJTkVfVVJMIG9wdGlvbiB0byBvYnRhaW4gdGhlCisjIHNlYXJjaCByZXN1bHRzLgorIworIyBEb3h5Z2VuIHNoaXBzIHdpdGggYW4gZXhhbXBsZSBpbmRleGVyIChkb3h5aW5kZXhlcikgYW5kIHNlYXJjaCBlbmdpbmUKKyMgKGRveHlzZWFyY2guY2dpKSB3aGljaCBhcmUgYmFzZWQgb24gdGhlIG9wZW4gc291cmNlIHNlYXJjaCBlbmdpbmUgbGlicmFyeQorIyBYYXBpYW4gKHNlZTogaHR0cDovL3hhcGlhbi5vcmcvKS4KKyMKKyMgU2VlIHRoZSBzZWN0aW9uICJFeHRlcm5hbCBJbmRleGluZyBhbmQgU2VhcmNoaW5nIiBmb3IgZGV0YWlscy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgU0VBUkNIRU5HSU5FIGlzIHNldCB0byBZRVMuCisKK0VYVEVSTkFMX1NFQVJDSCAgICAgICAgPSBOTworCisjIFRoZSBTRUFSQ0hFTkdJTkVfVVJMIHNob3VsZCBwb2ludCB0byBhIHNlYXJjaCBlbmdpbmUgaG9zdGVkIGJ5IGEgd2ViIHNlcnZlcgorIyB3aGljaCB3aWxsIHJldHVybiB0aGUgc2VhcmNoIHJlc3VsdHMgd2hlbiBFWFRFUk5BTF9TRUFSQ0ggaXMgZW5hYmxlZC4KKyMKKyMgRG94eWdlbiBzaGlwcyB3aXRoIGFuIGV4YW1wbGUgaW5kZXhlciAoZG94eWluZGV4ZXIpIGFuZCBzZWFyY2ggZW5naW5lCisjIChkb3h5c2VhcmNoLmNnaSkgd2hpY2ggYXJlIGJhc2VkIG9uIHRoZSBvcGVuIHNvdXJjZSBzZWFyY2ggZW5naW5lIGxpYnJhcnkKKyMgWGFwaWFuIChzZWU6IGh0dHA6Ly94YXBpYW4ub3JnLykuIFNlZSB0aGUgc2VjdGlvbiAiRXh0ZXJuYWwgSW5kZXhpbmcgYW5kCisjIFNlYXJjaGluZyIgZm9yIGRldGFpbHMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBTRUFSQ0hFTkdJTkUgaXMgc2V0IHRvIFlFUy4KKworU0VBUkNIRU5HSU5FX1VSTCAgICAgICA9CisKKyMgV2hlbiBTRVJWRVJfQkFTRURfU0VBUkNIIGFuZCBFWFRFUk5BTF9TRUFSQ0ggYXJlIGJvdGggZW5hYmxlZCB0aGUgdW5pbmRleGVkCisjIHNlYXJjaCBkYXRhIGlzIHdyaXR0ZW4gdG8gYSBmaWxlIGZvciBpbmRleGluZyBieSBhbiBleHRlcm5hbCB0b29sLiBXaXRoIHRoZQorIyBTRUFSQ0hEQVRBX0ZJTEUgdGFnIHRoZSBuYW1lIG9mIHRoaXMgZmlsZSBjYW4gYmUgc3BlY2lmaWVkLgorIyBUaGUgZGVmYXVsdCBmaWxlIGlzOiBzZWFyY2hkYXRhLnhtbC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFNFQVJDSEVOR0lORSBpcyBzZXQgdG8gWUVTLgorCitTRUFSQ0hEQVRBX0ZJTEUgICAgICAgID0gc2VhcmNoZGF0YS54bWwKKworIyBXaGVuIFNFUlZFUl9CQVNFRF9TRUFSQ0ggYW5kIEVYVEVSTkFMX1NFQVJDSCBhcmUgYm90aCBlbmFibGVkIHRoZQorIyBFWFRFUk5BTF9TRUFSQ0hfSUQgdGFnIGNhbiBiZSB1c2VkIGFzIGFuIGlkZW50aWZpZXIgZm9yIHRoZSBwcm9qZWN0LiBUaGlzIGlzCisjIHVzZWZ1bCBpbiBjb21iaW5hdGlvbiB3aXRoIEVYVFJBX1NFQVJDSF9NQVBQSU5HUyB0byBzZWFyY2ggdGhyb3VnaCBtdWx0aXBsZQorIyBwcm9qZWN0cyBhbmQgcmVkaXJlY3QgdGhlIHJlc3VsdHMgYmFjayB0byB0aGUgcmlnaHQgcHJvamVjdC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFNFQVJDSEVOR0lORSBpcyBzZXQgdG8gWUVTLgorCitFWFRFUk5BTF9TRUFSQ0hfSUQgICAgID0KKworIyBUaGUgRVhUUkFfU0VBUkNIX01BUFBJTkdTIHRhZyBjYW4gYmUgdXNlZCB0byBlbmFibGUgc2VhcmNoaW5nIHRocm91Z2ggZG94eWdlbgorIyBwcm9qZWN0cyBvdGhlciB0aGFuIHRoZSBvbmUgZGVmaW5lZCBieSB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZSwgYnV0IHRoYXQgYXJlCisjIGFsbCBhZGRlZCB0byB0aGUgc2FtZSBleHRlcm5hbCBzZWFyY2ggaW5kZXguIEVhY2ggcHJvamVjdCBuZWVkcyB0byBoYXZlIGEKKyMgdW5pcXVlIGlkIHNldCB2aWEgRVhURVJOQUxfU0VBUkNIX0lELiBUaGUgc2VhcmNoIG1hcHBpbmcgdGhlbiBtYXBzIHRoZSBpZCBvZgorIyB0byBhIHJlbGF0aXZlIGxvY2F0aW9uIHdoZXJlIHRoZSBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZC4gVGhlIGZvcm1hdCBpczoKKyMgRVhUUkFfU0VBUkNIX01BUFBJTkdTID0gdGFnbmFtZTE9bG9jMSB0YWduYW1lMj1sb2MyIC4uLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgU0VBUkNIRU5HSU5FIGlzIHNldCB0byBZRVMuCisKK0VYVFJBX1NFQVJDSF9NQVBQSU5HUyAgPQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBMYVRlWCBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfTEFURVggdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBMYVRlWCBvdXRwdXQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0dFTkVSQVRFX0xBVEVYICAgICAgICAgPSBOTworCisjIFRoZSBMQVRFWF9PVVRQVVQgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGVyZSB0aGUgTGFUZVggZG9jcyB3aWxsIGJlIHB1dC4gSWYgYQorIyByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZSBwdXQgaW4gZnJvbnQgb2YKKyMgaXQuCisjIFRoZSBkZWZhdWx0IGRpcmVjdG9yeSBpczogbGF0ZXguCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitMQVRFWF9PVVRQVVQgICAgICAgICAgID0gbGF0ZXgKKworIyBUaGUgTEFURVhfQ01EX05BTUUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIExhVGVYIGNvbW1hbmQgbmFtZSB0byBiZQorIyBpbnZva2VkLgorIworIyBOb3RlIHRoYXQgd2hlbiBlbmFibGluZyBVU0VfUERGTEFURVggdGhpcyBvcHRpb24gaXMgb25seSB1c2VkIGZvciBnZW5lcmF0aW5nCisjIGJpdG1hcHMgZm9yIGZvcm11bGFzIGluIHRoZSBIVE1MIG91dHB1dCwgYnV0IG5vdCBpbiB0aGUgTWFrZWZpbGUgdGhhdCBpcworIyB3cml0dGVuIHRvIHRoZSBvdXRwdXQgZGlyZWN0b3J5LgorIyBUaGUgZGVmYXVsdCBmaWxlIGlzOiBsYXRleC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK0xBVEVYX0NNRF9OQU1FICAgICAgICAgPSBsYXRleAorCisjIFRoZSBNQUtFSU5ERVhfQ01EX05BTUUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGNvbW1hbmQgbmFtZSB0byBnZW5lcmF0ZQorIyBpbmRleCBmb3IgTGFUZVguCisjIFRoZSBkZWZhdWx0IGZpbGUgaXM6IG1ha2VpbmRleC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK01BS0VJTkRFWF9DTURfTkFNRSAgICAgPSBtYWtlaW5kZXgKKworIyBJZiB0aGUgQ09NUEFDVF9MQVRFWCB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiBnZW5lcmF0ZXMgbW9yZSBjb21wYWN0IExhVGVYCisjIGRvY3VtZW50cy4gVGhpcyBtYXkgYmUgdXNlZnVsIGZvciBzbWFsbCBwcm9qZWN0cyBhbmQgbWF5IGhlbHAgdG8gc2F2ZSBzb21lCisjIHRyZWVzIGluIGdlbmVyYWwuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK0NPTVBBQ1RfTEFURVggICAgICAgICAgPSBOTworCisjIFRoZSBQQVBFUl9UWVBFIHRhZyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIHBhcGVyIHR5cGUgdGhhdCBpcyB1c2VkIGJ5IHRoZQorIyBwcmludGVyLgorIyBQb3NzaWJsZSB2YWx1ZXMgYXJlOiBhNCAoMjEwIHggMjk3IG1tKSwgbGV0dGVyICg4LjUgeCAxMSBpbmNoZXMpLCBsZWdhbCAoOC41IHgKKyMgMTQgaW5jaGVzKSBhbmQgZXhlY3V0aXZlICg3LjI1IHggMTAuNSBpbmNoZXMpLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogYTQuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitQQVBFUl9UWVBFICAgICAgICAgICAgID0gbGV0dGVyCisKKyMgVGhlIEVYVFJBX1BBQ0tBR0VTIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIExhVGVYIHBhY2thZ2UgbmFtZXMKKyMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIExhVGVYIG91dHB1dC4gVGhlIHBhY2thZ2UgY2FuIGJlIHNwZWNpZmllZCBqdXN0CisjIGJ5IGl0cyBuYW1lIG9yIHdpdGggdGhlIGNvcnJlY3Qgc3ludGF4IGFzIHRvIGJlIHVzZWQgd2l0aCB0aGUgTGFUZVgKKyMgXHVzZXBhY2thZ2UgY29tbWFuZC4gVG8gZ2V0IHRoZSB0aW1lcyBmb250IGZvciBpbnN0YW5jZSB5b3UgY2FuIHNwZWNpZnkgOgorIyBFWFRSQV9QQUNLQUdFUz10aW1lcyBvciBFWFRSQV9QQUNLQUdFUz17dGltZXN9CisjIFRvIHVzZSB0aGUgb3B0aW9uIGludGxpbWl0cyB3aXRoIHRoZSBhbXNtYXRoIHBhY2thZ2UgeW91IGNhbiBzcGVjaWZ5OgorIyBFWFRSQV9QQUNLQUdFUz1baW50bGltaXRzXXthbXNtYXRofQorIyBJZiBsZWZ0IGJsYW5rIG5vIGV4dHJhIHBhY2thZ2VzIHdpbGwgYmUgaW5jbHVkZWQuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitFWFRSQV9QQUNLQUdFUyAgICAgICAgID0KKworIyBUaGUgTEFURVhfSEVBREVSIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgcGVyc29uYWwgTGFUZVggaGVhZGVyIGZvciB0aGUKKyMgZ2VuZXJhdGVkIExhVGVYIGRvY3VtZW50LiBUaGUgaGVhZGVyIHNob3VsZCBjb250YWluIGV2ZXJ5dGhpbmcgdW50aWwgdGhlIGZpcnN0CisjIGNoYXB0ZXIuIElmIGl0IGlzIGxlZnQgYmxhbmsgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgc3RhbmRhcmQgaGVhZGVyLiBTZWUKKyMgc2VjdGlvbiAiRG94eWdlbiB1c2FnZSIgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBsZXQgZG94eWdlbiB3cml0ZSB0aGUKKyMgZGVmYXVsdCBoZWFkZXIgdG8gYSBzZXBhcmF0ZSBmaWxlLgorIworIyBOb3RlOiBPbmx5IHVzZSBhIHVzZXItZGVmaW5lZCBoZWFkZXIgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nISBUaGUKKyMgZm9sbG93aW5nIGNvbW1hbmRzIGhhdmUgYSBzcGVjaWFsIG1lYW5pbmcgaW5zaWRlIHRoZSBoZWFkZXI6ICR0aXRsZSwKKyMgJGRhdGV0aW1lLCAkZGF0ZSwgJGRveHlnZW52ZXJzaW9uLCAkcHJvamVjdG5hbWUsICRwcm9qZWN0bnVtYmVyLAorIyAkcHJvamVjdGJyaWVmLCAkcHJvamVjdGxvZ28uIERveHlnZW4gd2lsbCByZXBsYWNlICR0aXRsZSB3aXRoIHRoZSBlbXB0eQorIyBzdHJpbmcsIGZvciB0aGUgcmVwbGFjZW1lbnQgdmFsdWVzIG9mIHRoZSBvdGhlciBjb21tYW5kcyB0aGUgdXNlciBpcyByZWZlcnJlZAorIyB0byBIVE1MX0hFQURFUi4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK0xBVEVYX0hFQURFUiAgICAgICAgICAgPQorCisjIFRoZSBMQVRFWF9GT09URVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwZXJzb25hbCBMYVRlWCBmb290ZXIgZm9yIHRoZQorIyBnZW5lcmF0ZWQgTGFUZVggZG9jdW1lbnQuIFRoZSBmb290ZXIgc2hvdWxkIGNvbnRhaW4gZXZlcnl0aGluZyBhZnRlciB0aGUgbGFzdAorIyBjaGFwdGVyLiBJZiBpdCBpcyBsZWZ0IGJsYW5rIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIHN0YW5kYXJkIGZvb3Rlci4gU2VlCisjIExBVEVYX0hFQURFUiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZ2VuZXJhdGUgYSBkZWZhdWx0IGZvb3RlciBhbmQgd2hhdAorIyBzcGVjaWFsIGNvbW1hbmRzIGNhbiBiZSB1c2VkIGluc2lkZSB0aGUgZm9vdGVyLgorIworIyBOb3RlOiBPbmx5IHVzZSBhIHVzZXItZGVmaW5lZCBmb290ZXIgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIQorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTEFURVggaXMgc2V0IHRvIFlFUy4KKworTEFURVhfRk9PVEVSICAgICAgICAgICA9CisKKyMgVGhlIExBVEVYX0VYVFJBX1NUWUxFU0hFRVQgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYWRkaXRpb25hbCB1c2VyLWRlZmluZWQKKyMgTGFUZVggc3R5bGUgc2hlZXRzIHRoYXQgYXJlIGluY2x1ZGVkIGFmdGVyIHRoZSBzdGFuZGFyZCBzdHlsZSBzaGVldHMgY3JlYXRlZAorIyBieSBkb3h5Z2VuLiBVc2luZyB0aGlzIG9wdGlvbiBvbmUgY2FuIG92ZXJydWxlIGNlcnRhaW4gc3R5bGUgYXNwZWN0cy4gRG94eWdlbgorIyB3aWxsIGNvcHkgdGhlIHN0eWxlIHNoZWV0IGZpbGVzIHRvIHRoZSBvdXRwdXQgZGlyZWN0b3J5LgorIyBOb3RlOiBUaGUgb3JkZXIgb2YgdGhlIGV4dHJhIHN0eWxlIHNoZWV0IGZpbGVzIGlzIG9mIGltcG9ydGFuY2UgKGUuZy4gdGhlIGxhc3QKKyMgc3R5bGUgc2hlZXQgaW4gdGhlIGxpc3Qgb3ZlcnJ1bGVzIHRoZSBzZXR0aW5nIG9mIHRoZSBwcmV2aW91cyBvbmVzIGluIHRoZQorIyBsaXN0KS4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK0xBVEVYX0VYVFJBX1NUWUxFU0hFRVQgPQorCisjIFRoZSBMQVRFWF9FWFRSQV9GSUxFUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBleHRyYSBpbWFnZXMgb3IKKyMgb3RoZXIgc291cmNlIGZpbGVzIHdoaWNoIHNob3VsZCBiZSBjb3BpZWQgdG8gdGhlIExBVEVYX09VVFBVVCBvdXRwdXQKKyMgZGlyZWN0b3J5LiBOb3RlIHRoYXQgdGhlIGZpbGVzIHdpbGwgYmUgY29waWVkIGFzLWlzOyB0aGVyZSBhcmUgbm8gY29tbWFuZHMgb3IKKyMgbWFya2VycyBhdmFpbGFibGUuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitMQVRFWF9FWFRSQV9GSUxFUyAgICAgID0KKworIyBJZiB0aGUgUERGX0hZUEVSTElOS1MgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBMYVRlWCB0aGF0IGlzIGdlbmVyYXRlZCBpcworIyBwcmVwYXJlZCBmb3IgY29udmVyc2lvbiB0byBQREYgKHVzaW5nIHBzMnBkZiBvciBwZGZsYXRleCkuIFRoZSBQREYgZmlsZSB3aWxsCisjIGNvbnRhaW4gbGlua3MgKGp1c3QgbGlrZSB0aGUgSFRNTCBvdXRwdXQpIGluc3RlYWQgb2YgcGFnZSByZWZlcmVuY2VzLiBUaGlzCisjIG1ha2VzIHRoZSBvdXRwdXQgc3VpdGFibGUgZm9yIG9ubGluZSBicm93c2luZyB1c2luZyBhIFBERiB2aWV3ZXIuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitQREZfSFlQRVJMSU5LUyAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIFVTRV9QREZMQVRFWCB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIHVzZSBwZGZsYXRleCB0byBnZW5lcmF0ZQorIyB0aGUgUERGIGZpbGUgZGlyZWN0bHkgZnJvbSB0aGUgTGFUZVggZmlsZXMuIFNldCB0aGlzIG9wdGlvbiB0byBZRVMsIHRvIGdldCBhCisjIGhpZ2hlciBxdWFsaXR5IFBERiBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTEFURVggaXMgc2V0IHRvIFlFUy4KKworVVNFX1BERkxBVEVYICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBMQVRFWF9CQVRDSE1PREUgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBhZGQgdGhlIFxiYXRjaG1vZGUKKyMgY29tbWFuZCB0byB0aGUgZ2VuZXJhdGVkIExhVGVYIGZpbGVzLiBUaGlzIHdpbGwgaW5zdHJ1Y3QgTGFUZVggdG8ga2VlcCBydW5uaW5nCisjIGlmIGVycm9ycyBvY2N1ciwgaW5zdGVhZCBvZiBhc2tpbmcgdGhlIHVzZXIgZm9yIGhlbHAuIFRoaXMgb3B0aW9uIGlzIGFsc28gdXNlZAorIyB3aGVuIGdlbmVyYXRpbmcgZm9ybXVsYXMgaW4gSFRNTC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTEFURVggaXMgc2V0IHRvIFlFUy4KKworTEFURVhfQkFUQ0hNT0RFICAgICAgICA9IE5PCisKKyMgSWYgdGhlIExBVEVYX0hJREVfSU5ESUNFUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBub3QgaW5jbHVkZSB0aGUKKyMgaW5kZXggY2hhcHRlcnMgKHN1Y2ggYXMgRmlsZSBJbmRleCwgQ29tcG91bmQgSW5kZXgsIGV0Yy4pIGluIHRoZSBvdXRwdXQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK0xBVEVYX0hJREVfSU5ESUNFUyAgICAgPSBOTworCisjIElmIHRoZSBMQVRFWF9TT1VSQ0VfQ09ERSB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBpbmNsdWRlIHNvdXJjZQorIyBjb2RlIHdpdGggc3ludGF4IGhpZ2hsaWdodGluZyBpbiB0aGUgTGFUZVggb3V0cHV0LgorIworIyBOb3RlIHRoYXQgd2hpY2ggc291cmNlcyBhcmUgc2hvd24gYWxzbyBkZXBlbmRzIG9uIG90aGVyIHNldHRpbmdzIHN1Y2ggYXMKKyMgU09VUkNFX0JST1dTRVIuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK0xBVEVYX1NPVVJDRV9DT0RFICAgICAgPSBOTworCisjIFRoZSBMQVRFWF9CSUJfU1RZTEUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIHN0eWxlIHRvIHVzZSBmb3IgdGhlCisjIGJpYmxpb2dyYXBoeSwgZS5nLiBwbGFpbm5hdCwgb3IgaWVlZXRyLiBTZWUKKyMgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CaWJUZVggYW5kIFxjaXRlIGZvciBtb3JlIGluZm8uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBwbGFpbi4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK0xBVEVYX0JJQl9TVFlMRSAgICAgICAgPSBwbGFpbgorCisjIElmIHRoZSBMQVRFWF9USU1FU1RBTVAgdGFnIGlzIHNldCB0byBZRVMgdGhlbiB0aGUgZm9vdGVyIG9mIGVhY2ggZ2VuZXJhdGVkCisjIHBhZ2Ugd2lsbCBjb250YWluIHRoZSBkYXRlIGFuZCB0aW1lIHdoZW4gdGhlIHBhZ2Ugd2FzIGdlbmVyYXRlZC4gU2V0dGluZyB0aGlzCisjIHRvIE5PIGNhbiBoZWxwIHdoZW4gY29tcGFyaW5nIHRoZSBvdXRwdXQgb2YgbXVsdGlwbGUgcnVucy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTEFURVggaXMgc2V0IHRvIFlFUy4KKworTEFURVhfVElNRVNUQU1QICAgICAgICA9IE5PCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIFJURiBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfUlRGIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgUlRGIG91dHB1dC4gVGhlCisjIFJURiBvdXRwdXQgaXMgb3B0aW1pemVkIGZvciBXb3JkIDk3IGFuZCBtYXkgbm90IGxvb2sgdG9vIHByZXR0eSB3aXRoIG90aGVyIFJURgorIyByZWFkZXJzL2VkaXRvcnMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworR0VORVJBVEVfUlRGICAgICAgICAgICA9IE5PCisKKyMgVGhlIFJURl9PVVRQVVQgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGVyZSB0aGUgUlRGIGRvY3Mgd2lsbCBiZSBwdXQuIElmIGEKKyMgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkIHRoZSB2YWx1ZSBvZiBPVVRQVVRfRElSRUNUT1JZIHdpbGwgYmUgcHV0IGluIGZyb250IG9mCisjIGl0LgorIyBUaGUgZGVmYXVsdCBkaXJlY3RvcnkgaXM6IHJ0Zi4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1JURiBpcyBzZXQgdG8gWUVTLgorCitSVEZfT1VUUFVUICAgICAgICAgICAgID0gcnRmCisKKyMgSWYgdGhlIENPTVBBQ1RfUlRGIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIGdlbmVyYXRlcyBtb3JlIGNvbXBhY3QgUlRGCisjIGRvY3VtZW50cy4gVGhpcyBtYXkgYmUgdXNlZnVsIGZvciBzbWFsbCBwcm9qZWN0cyBhbmQgbWF5IGhlbHAgdG8gc2F2ZSBzb21lCisjIHRyZWVzIGluIGdlbmVyYWwuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1JURiBpcyBzZXQgdG8gWUVTLgorCitDT01QQUNUX1JURiAgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgUlRGX0hZUEVSTElOS1MgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBSVEYgdGhhdCBpcyBnZW5lcmF0ZWQgd2lsbAorIyBjb250YWluIGh5cGVybGluayBmaWVsZHMuIFRoZSBSVEYgZmlsZSB3aWxsIGNvbnRhaW4gbGlua3MgKGp1c3QgbGlrZSB0aGUgSFRNTAorIyBvdXRwdXQpIGluc3RlYWQgb2YgcGFnZSByZWZlcmVuY2VzLiBUaGlzIG1ha2VzIHRoZSBvdXRwdXQgc3VpdGFibGUgZm9yIG9ubGluZQorIyBicm93c2luZyB1c2luZyBXb3JkIG9yIHNvbWUgb3RoZXIgV29yZCBjb21wYXRpYmxlIHJlYWRlcnMgdGhhdCBzdXBwb3J0IHRob3NlCisjIGZpZWxkcy4KKyMKKyMgTm90ZTogV29yZFBhZCAod3JpdGUpIGFuZCBvdGhlcnMgZG8gbm90IHN1cHBvcnQgbGlua3MuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1JURiBpcyBzZXQgdG8gWUVTLgorCitSVEZfSFlQRVJMSU5LUyAgICAgICAgID0gTk8KKworIyBMb2FkIHN0eWxlc2hlZXQgZGVmaW5pdGlvbnMgZnJvbSBmaWxlLiBTeW50YXggaXMgc2ltaWxhciB0byBkb3h5Z2VuJ3MgY29uZmlnCisjIGZpbGUsIGkuZS4gYSBzZXJpZXMgb2YgYXNzaWdubWVudHMuIFlvdSBvbmx5IGhhdmUgdG8gcHJvdmlkZSByZXBsYWNlbWVudHMsCisjIG1pc3NpbmcgZGVmaW5pdGlvbnMgYXJlIHNldCB0byB0aGVpciBkZWZhdWx0IHZhbHVlLgorIworIyBTZWUgYWxzbyBzZWN0aW9uICJEb3h5Z2VuIHVzYWdlIiBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGdlbmVyYXRlIHRoZQorIyBkZWZhdWx0IHN0eWxlIHNoZWV0IHRoYXQgZG94eWdlbiBub3JtYWxseSB1c2VzLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUlRGIGlzIHNldCB0byBZRVMuCisKK1JURl9TVFlMRVNIRUVUX0ZJTEUgICAgPQorCisjIFNldCBvcHRpb25hbCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZ2VuZXJhdGlvbiBvZiBhbiBSVEYgZG9jdW1lbnQuIFN5bnRheCBpcworIyBzaW1pbGFyIHRvIGRveHlnZW4ncyBjb25maWcgZmlsZS4gQSB0ZW1wbGF0ZSBleHRlbnNpb25zIGZpbGUgY2FuIGJlIGdlbmVyYXRlZAorIyB1c2luZyBkb3h5Z2VuIC1lIHJ0ZiBleHRlbnNpb25GaWxlLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUlRGIGlzIHNldCB0byBZRVMuCisKK1JURl9FWFRFTlNJT05TX0ZJTEUgICAgPQorCisjIElmIHRoZSBSVEZfU09VUkNFX0NPREUgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgaW5jbHVkZSBzb3VyY2UgY29kZQorIyB3aXRoIHN5bnRheCBoaWdobGlnaHRpbmcgaW4gdGhlIFJURiBvdXRwdXQuCisjCisjIE5vdGUgdGhhdCB3aGljaCBzb3VyY2VzIGFyZSBzaG93biBhbHNvIGRlcGVuZHMgb24gb3RoZXIgc2V0dGluZ3Mgc3VjaCBhcworIyBTT1VSQ0VfQlJPV1NFUi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUlRGIGlzIHNldCB0byBZRVMuCisKK1JURl9TT1VSQ0VfQ09ERSAgICAgICAgPSBOTworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBtYW4gcGFnZSBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfTUFOIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgbWFuIHBhZ2VzIGZvcgorIyBjbGFzc2VzIGFuZCBmaWxlcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitHRU5FUkFURV9NQU4gICAgICAgICAgID0gTk8KKworIyBUaGUgTUFOX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBtYW4gcGFnZXMgd2lsbCBiZSBwdXQuIElmIGEKKyMgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkIHRoZSB2YWx1ZSBvZiBPVVRQVVRfRElSRUNUT1JZIHdpbGwgYmUgcHV0IGluIGZyb250IG9mCisjIGl0LiBBIGRpcmVjdG9yeSBtYW4zIHdpbGwgYmUgY3JlYXRlZCBpbnNpZGUgdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkKKyMgTUFOX09VVFBVVC4KKyMgVGhlIGRlZmF1bHQgZGlyZWN0b3J5IGlzOiBtYW4uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9NQU4gaXMgc2V0IHRvIFlFUy4KKworTUFOX09VVFBVVCAgICAgICAgICAgICA9IG1hbgorCisjIFRoZSBNQU5fRVhURU5TSU9OIHRhZyBkZXRlcm1pbmVzIHRoZSBleHRlbnNpb24gdGhhdCBpcyBhZGRlZCB0byB0aGUgZ2VuZXJhdGVkCisjIG1hbiBwYWdlcy4gSW4gY2FzZSB0aGUgbWFudWFsIHNlY3Rpb24gZG9lcyBub3Qgc3RhcnQgd2l0aCBhIG51bWJlciwgdGhlIG51bWJlcgorIyAzIGlzIHByZXBlbmRlZC4gVGhlIGRvdCAoLikgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgTUFOX0VYVEVOU0lPTiB0YWcgaXMKKyMgb3B0aW9uYWwuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiAuMy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX01BTiBpcyBzZXQgdG8gWUVTLgorCitNQU5fRVhURU5TSU9OICAgICAgICAgID0gLjMKKworIyBUaGUgTUFOX1NVQkRJUiB0YWcgZGV0ZXJtaW5lcyB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IGNyZWF0ZWQgd2l0aGluCisjIE1BTl9PVVRQVVQgaW4gd2hpY2ggdGhlIG1hbiBwYWdlcyBhcmUgcGxhY2VkLiBJZiBkZWZhdWx0cyB0byBtYW4gZm9sbG93ZWQgYnkKKyMgTUFOX0VYVEVOU0lPTiB3aXRoIHRoZSBpbml0aWFsIC4gcmVtb3ZlZC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX01BTiBpcyBzZXQgdG8gWUVTLgorCitNQU5fU1VCRElSICAgICAgICAgICAgID0KKworIyBJZiB0aGUgTUFOX0xJTktTIHRhZyBpcyBzZXQgdG8gWUVTIGFuZCBkb3h5Z2VuIGdlbmVyYXRlcyBtYW4gb3V0cHV0LCB0aGVuIGl0CisjIHdpbGwgZ2VuZXJhdGUgb25lIGFkZGl0aW9uYWwgbWFuIGZpbGUgZm9yIGVhY2ggZW50aXR5IGRvY3VtZW50ZWQgaW4gdGhlIHJlYWwKKyMgbWFuIHBhZ2UocykuIFRoZXNlIGFkZGl0aW9uYWwgZmlsZXMgb25seSBzb3VyY2UgdGhlIHJlYWwgbWFuIHBhZ2UsIGJ1dCB3aXRob3V0CisjIHRoZW0gdGhlIG1hbiBjb21tYW5kIHdvdWxkIGJlIHVuYWJsZSB0byBmaW5kIHRoZSBjb3JyZWN0IHBhZ2UuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX01BTiBpcyBzZXQgdG8gWUVTLgorCitNQU5fTElOS1MgICAgICAgICAgICAgID0gTk8KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgWE1MIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9YTUwgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhbiBYTUwgZmlsZSB0aGF0CisjIGNhcHR1cmVzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGNvZGUgaW5jbHVkaW5nIGFsbCBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0dFTkVSQVRFX1hNTCAgICAgICAgICAgPSBOTworCisjIFRoZSBYTUxfT1VUUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgd2hlcmUgdGhlIFhNTCBwYWdlcyB3aWxsIGJlIHB1dC4gSWYgYQorIyByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZSBwdXQgaW4gZnJvbnQgb2YKKyMgaXQuCisjIFRoZSBkZWZhdWx0IGRpcmVjdG9yeSBpczogeG1sLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfWE1MIGlzIHNldCB0byBZRVMuCisKK1hNTF9PVVRQVVQgICAgICAgICAgICAgPSB4bWwKKworIyBJZiB0aGUgWE1MX1BST0dSQU1MSVNUSU5HIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgZHVtcCB0aGUgcHJvZ3JhbQorIyBsaXN0aW5ncyAoaW5jbHVkaW5nIHN5bnRheCBoaWdobGlnaHRpbmcgYW5kIGNyb3NzLXJlZmVyZW5jaW5nIGluZm9ybWF0aW9uKSB0bworIyB0aGUgWE1MIG91dHB1dC4gTm90ZSB0aGF0IGVuYWJsaW5nIHRoaXMgd2lsbCBzaWduaWZpY2FudGx5IGluY3JlYXNlIHRoZSBzaXplCisjIG9mIHRoZSBYTUwgb3V0cHV0LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfWE1MIGlzIHNldCB0byBZRVMuCisKK1hNTF9QUk9HUkFNTElTVElORyAgICAgPSBZRVMKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgRE9DQk9PSyBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfRE9DQk9PSyB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGdlbmVyYXRlIERvY2Jvb2sgZmlsZXMKKyMgdGhhdCBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBQREYuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworR0VORVJBVEVfRE9DQk9PSyAgICAgICA9IE5PCisKKyMgVGhlIERPQ0JPT0tfT1VUUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgd2hlcmUgdGhlIERvY2Jvb2sgcGFnZXMgd2lsbCBiZSBwdXQuCisjIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkIHRoZSB2YWx1ZSBvZiBPVVRQVVRfRElSRUNUT1JZIHdpbGwgYmUgcHV0IGluCisjIGZyb250IG9mIGl0LgorIyBUaGUgZGVmYXVsdCBkaXJlY3RvcnkgaXM6IGRvY2Jvb2suCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9ET0NCT09LIGlzIHNldCB0byBZRVMuCisKK0RPQ0JPT0tfT1VUUFVUICAgICAgICAgPSBkb2Nib29rCisKKyMgSWYgdGhlIERPQ0JPT0tfUFJPR1JBTUxJU1RJTkcgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBpbmNsdWRlIHRoZQorIyBwcm9ncmFtIGxpc3RpbmdzIChpbmNsdWRpbmcgc3ludGF4IGhpZ2hsaWdodGluZyBhbmQgY3Jvc3MtcmVmZXJlbmNpbmcKKyMgaW5mb3JtYXRpb24pIHRvIHRoZSBET0NCT09LIG91dHB1dC4gTm90ZSB0aGF0IGVuYWJsaW5nIHRoaXMgd2lsbCBzaWduaWZpY2FudGx5CisjIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBET0NCT09LIG91dHB1dC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfRE9DQk9PSyBpcyBzZXQgdG8gWUVTLgorCitET0NCT09LX1BST0dSQU1MSVNUSU5HID0gTk8KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBBdXRvR2VuIERlZmluaXRpb25zIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9BVVRPR0VOX0RFRiB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGFuCisjIEF1dG9HZW4gRGVmaW5pdGlvbnMgKHNlZSBodHRwOi8vYXV0b2dlbi5zZi5uZXQpIGZpbGUgdGhhdCBjYXB0dXJlcyB0aGUKKyMgc3RydWN0dXJlIG9mIHRoZSBjb2RlIGluY2x1ZGluZyBhbGwgZG9jdW1lbnRhdGlvbi4gTm90ZSB0aGF0IHRoaXMgZmVhdHVyZSBpcworIyBzdGlsbCBleHBlcmltZW50YWwgYW5kIGluY29tcGxldGUgYXQgdGhlIG1vbWVudC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitHRU5FUkFURV9BVVRPR0VOX0RFRiAgID0gTk8KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgUGVybCBtb2R1bGUgb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEdFTkVSQVRFX1BFUkxNT0QgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIFBlcmwgbW9kdWxlCisjIGZpbGUgdGhhdCBjYXB0dXJlcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBjb2RlIGluY2x1ZGluZyBhbGwgZG9jdW1lbnRhdGlvbi4KKyMKKyMgTm90ZSB0aGF0IHRoaXMgZmVhdHVyZSBpcyBzdGlsbCBleHBlcmltZW50YWwgYW5kIGluY29tcGxldGUgYXQgdGhlIG1vbWVudC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitHRU5FUkFURV9QRVJMTU9EICAgICAgID0gTk8KKworIyBJZiB0aGUgUEVSTE1PRF9MQVRFWCB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGdlbmVyYXRlIHRoZSBuZWNlc3NhcnkKKyMgTWFrZWZpbGUgcnVsZXMsIFBlcmwgc2NyaXB0cyBhbmQgTGFUZVggY29kZSB0byBiZSBhYmxlIHRvIGdlbmVyYXRlIFBERiBhbmQgRFZJCisjIG91dHB1dCBmcm9tIHRoZSBQZXJsIG1vZHVsZSBvdXRwdXQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1BFUkxNT0QgaXMgc2V0IHRvIFlFUy4KKworUEVSTE1PRF9MQVRFWCAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIFBFUkxNT0RfUFJFVFRZIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgUGVybCBtb2R1bGUgb3V0cHV0IHdpbGwgYmUgbmljZWx5CisjIGZvcm1hdHRlZCBzbyBpdCBjYW4gYmUgcGFyc2VkIGJ5IGEgaHVtYW4gcmVhZGVyLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0bworIyB1bmRlcnN0YW5kIHdoYXQgaXMgZ29pbmcgb24uIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGlzIHRhZyBpcyBzZXQgdG8gTk8sIHRoZQorIyBzaXplIG9mIHRoZSBQZXJsIG1vZHVsZSBvdXRwdXQgd2lsbCBiZSBtdWNoIHNtYWxsZXIgYW5kIFBlcmwgd2lsbCBwYXJzZSBpdAorIyBqdXN0IHRoZSBzYW1lLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUEVSTE1PRCBpcyBzZXQgdG8gWUVTLgorCitQRVJMTU9EX1BSRVRUWSAgICAgICAgID0gWUVTCisKKyMgVGhlIG5hbWVzIG9mIHRoZSBtYWtlIHZhcmlhYmxlcyBpbiB0aGUgZ2VuZXJhdGVkIGRveHlydWxlcy5tYWtlIGZpbGUgYXJlCisjIHByZWZpeGVkIHdpdGggdGhlIHN0cmluZyBjb250YWluZWQgaW4gUEVSTE1PRF9NQUtFVkFSX1BSRUZJWC4gVGhpcyBpcyB1c2VmdWwKKyMgc28gZGlmZmVyZW50IGRveHlydWxlcy5tYWtlIGZpbGVzIGluY2x1ZGVkIGJ5IHRoZSBzYW1lIE1ha2VmaWxlIGRvbid0CisjIG92ZXJ3cml0ZSBlYWNoIG90aGVyJ3MgdmFyaWFibGVzLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUEVSTE1PRCBpcyBzZXQgdG8gWUVTLgorCitQRVJMTU9EX01BS0VWQVJfUFJFRklYID0KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgcHJlcHJvY2Vzc29yCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEVOQUJMRV9QUkVQUk9DRVNTSU5HIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgZXZhbHVhdGUgYWxsCisjIEMtcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgZm91bmQgaW4gdGhlIHNvdXJjZXMgYW5kIGluY2x1ZGUgZmlsZXMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0VOQUJMRV9QUkVQUk9DRVNTSU5HICAgPSBZRVMKKworIyBJZiB0aGUgTUFDUk9fRVhQQU5TSU9OIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgZXhwYW5kIGFsbCBtYWNybyBuYW1lcworIyBpbiB0aGUgc291cmNlIGNvZGUuIElmIHNldCB0byBOTywgb25seSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB3aWxsIGJlCisjIHBlcmZvcm1lZC4gTWFjcm8gZXhwYW5zaW9uIGNhbiBiZSBkb25lIGluIGEgY29udHJvbGxlZCB3YXkgYnkgc2V0dGluZworIyBFWFBBTkRfT05MWV9QUkVERUYgdG8gWUVTLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBFTkFCTEVfUFJFUFJPQ0VTU0lORyBpcyBzZXQgdG8gWUVTLgorCitNQUNST19FWFBBTlNJT04gICAgICAgID0gTk8KKworIyBJZiB0aGUgRVhQQU5EX09OTFlfUFJFREVGIGFuZCBNQUNST19FWFBBTlNJT04gdGFncyBhcmUgYm90aCBzZXQgdG8gWUVTIHRoZW4KKyMgdGhlIG1hY3JvIGV4cGFuc2lvbiBpcyBsaW1pdGVkIHRvIHRoZSBtYWNyb3Mgc3BlY2lmaWVkIHdpdGggdGhlIFBSRURFRklORUQgYW5kCisjIEVYUEFORF9BU19ERUZJTkVEIHRhZ3MuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEVOQUJMRV9QUkVQUk9DRVNTSU5HIGlzIHNldCB0byBZRVMuCisKK0VYUEFORF9PTkxZX1BSRURFRiAgICAgPSBOTworCisjIElmIHRoZSBTRUFSQ0hfSU5DTFVERVMgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBpbmNsdWRlIGZpbGVzIGluIHRoZQorIyBJTkNMVURFX1BBVEggd2lsbCBiZSBzZWFyY2hlZCBpZiBhICNpbmNsdWRlIGlzIGZvdW5kLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgRU5BQkxFX1BSRVBST0NFU1NJTkcgaXMgc2V0IHRvIFlFUy4KKworU0VBUkNIX0lOQ0xVREVTICAgICAgICA9IFlFUworCisjIFRoZSBJTkNMVURFX1BBVEggdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgZGlyZWN0b3JpZXMgdGhhdAorIyBjb250YWluIGluY2x1ZGUgZmlsZXMgdGhhdCBhcmUgbm90IGlucHV0IGZpbGVzIGJ1dCBzaG91bGQgYmUgcHJvY2Vzc2VkIGJ5IHRoZQorIyBwcmVwcm9jZXNzb3IuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBTRUFSQ0hfSU5DTFVERVMgaXMgc2V0IHRvIFlFUy4KKworSU5DTFVERV9QQVRIICAgICAgICAgICA9CisKKyMgWW91IGNhbiB1c2UgdGhlIElOQ0xVREVfRklMRV9QQVRURVJOUyB0YWcgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSB3aWxkY2FyZAorIyBwYXR0ZXJucyAobGlrZSAqLmggYW5kICouaHBwKSB0byBmaWx0ZXIgb3V0IHRoZSBoZWFkZXItZmlsZXMgaW4gdGhlCisjIGRpcmVjdG9yaWVzLiBJZiBsZWZ0IGJsYW5rLCB0aGUgcGF0dGVybnMgc3BlY2lmaWVkIHdpdGggRklMRV9QQVRURVJOUyB3aWxsIGJlCisjIHVzZWQuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBFTkFCTEVfUFJFUFJPQ0VTU0lORyBpcyBzZXQgdG8gWUVTLgorCitJTkNMVURFX0ZJTEVfUEFUVEVSTlMgID0KKworIyBUaGUgUFJFREVGSU5FRCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBtYWNybyBuYW1lcyB0aGF0IGFyZQorIyBkZWZpbmVkIGJlZm9yZSB0aGUgcHJlcHJvY2Vzc29yIGlzIHN0YXJ0ZWQgKHNpbWlsYXIgdG8gdGhlIC1EIG9wdGlvbiBvZiBlLmcuCisjIGdjYykuIFRoZSBhcmd1bWVudCBvZiB0aGUgdGFnIGlzIGEgbGlzdCBvZiBtYWNyb3Mgb2YgdGhlIGZvcm06IG5hbWUgb3IKKyMgbmFtZT1kZWZpbml0aW9uIChubyBzcGFjZXMpLiBJZiB0aGUgZGVmaW5pdGlvbiBhbmQgdGhlICI9IiBhcmUgb21pdHRlZCwgIj0xIgorIyBpcyBhc3N1bWVkLiBUbyBwcmV2ZW50IGEgbWFjcm8gZGVmaW5pdGlvbiBmcm9tIGJlaW5nIHVuZGVmaW5lZCB2aWEgI3VuZGVmIG9yCisjIHJlY3Vyc2l2ZWx5IGV4cGFuZGVkIHVzZSB0aGUgOj0gb3BlcmF0b3IgaW5zdGVhZCBvZiB0aGUgPSBvcGVyYXRvci4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEVOQUJMRV9QUkVQUk9DRVNTSU5HIGlzIHNldCB0byBZRVMuCisKK1BSRURFRklORUQgICAgICAgICAgICAgPQorCisjIElmIHRoZSBNQUNST19FWFBBTlNJT04gYW5kIEVYUEFORF9PTkxZX1BSRURFRiB0YWdzIGFyZSBzZXQgdG8gWUVTIHRoZW4gdGhpcworIyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGxpc3Qgb2YgbWFjcm8gbmFtZXMgdGhhdCBzaG91bGQgYmUgZXhwYW5kZWQuIFRoZQorIyBtYWNybyBkZWZpbml0aW9uIHRoYXQgaXMgZm91bmQgaW4gdGhlIHNvdXJjZXMgd2lsbCBiZSB1c2VkLiBVc2UgdGhlIFBSRURFRklORUQKKyMgdGFnIGlmIHlvdSB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCBtYWNybyBkZWZpbml0aW9uIHRoYXQgb3ZlcnJ1bGVzIHRoZQorIyBkZWZpbml0aW9uIGZvdW5kIGluIHRoZSBzb3VyY2UgY29kZS4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEVOQUJMRV9QUkVQUk9DRVNTSU5HIGlzIHNldCB0byBZRVMuCisKK0VYUEFORF9BU19ERUZJTkVEICAgICAgPQorCisjIElmIHRoZSBTS0lQX0ZVTkNUSU9OX01BQ1JPUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4ncyBwcmVwcm9jZXNzb3Igd2lsbAorIyByZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8gZnVuY3Rpb24tbGlrZSBtYWNyb3MgdGhhdCBhcmUgYWxvbmUgb24gYSBsaW5lLCBoYXZlCisjIGFuIGFsbCB1cHBlcmNhc2UgbmFtZSwgYW5kIGRvIG5vdCBlbmQgd2l0aCBhIHNlbWljb2xvbi4gU3VjaCBmdW5jdGlvbiBtYWNyb3MKKyMgYXJlIHR5cGljYWxseSB1c2VkIGZvciBib2lsZXItcGxhdGUgY29kZSwgYW5kIHdpbGwgY29uZnVzZSB0aGUgcGFyc2VyIGlmIG5vdAorIyByZW1vdmVkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgRU5BQkxFX1BSRVBST0NFU1NJTkcgaXMgc2V0IHRvIFlFUy4KKworU0tJUF9GVU5DVElPTl9NQUNST1MgICA9IFlFUworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGV4dGVybmFsIHJlZmVyZW5jZXMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUaGUgVEFHRklMRVMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgdGFnIGZpbGVzLiBGb3IgZWFjaCB0YWcKKyMgZmlsZSB0aGUgbG9jYXRpb24gb2YgdGhlIGV4dGVybmFsIGRvY3VtZW50YXRpb24gc2hvdWxkIGJlIGFkZGVkLiBUaGUgZm9ybWF0IG9mCisjIGEgdGFnIGZpbGUgd2l0aG91dCB0aGlzIGxvY2F0aW9uIGlzIGFzIGZvbGxvd3M6CisjIFRBR0ZJTEVTID0gZmlsZTEgZmlsZTIgLi4uCisjIEFkZGluZyBsb2NhdGlvbiBmb3IgdGhlIHRhZyBmaWxlcyBpcyBkb25lIGFzIGZvbGxvd3M6CisjIFRBR0ZJTEVTID0gZmlsZTE9bG9jMSAiZmlsZTIgPSBsb2MyIiAuLi4KKyMgd2hlcmUgbG9jMSBhbmQgbG9jMiBjYW4gYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGUgcGF0aHMgb3IgVVJMcy4gU2VlIHRoZQorIyBzZWN0aW9uICJMaW5raW5nIHRvIGV4dGVybmFsIGRvY3VtZW50YXRpb24iIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1c2UKKyMgb2YgdGFnIGZpbGVzLgorIyBOb3RlOiBFYWNoIHRhZyBmaWxlIG11c3QgaGF2ZSBhIHVuaXF1ZSBuYW1lICh3aGVyZSB0aGUgbmFtZSBkb2VzIE5PVCBpbmNsdWRlCisjIHRoZSBwYXRoKS4gSWYgYSB0YWcgZmlsZSBpcyBub3QgbG9jYXRlZCBpbiB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIGRveHlnZW4gaXMKKyMgcnVuLCB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgdGhlIHBhdGggdG8gdGhlIHRhZ2ZpbGUgaGVyZS4KKworVEFHRklMRVMgICAgICAgICAgICAgICA9CisKKyMgV2hlbiBhIGZpbGUgbmFtZSBpcyBzcGVjaWZpZWQgYWZ0ZXIgR0VORVJBVEVfVEFHRklMRSwgZG94eWdlbiB3aWxsIGNyZWF0ZSBhCisjIHRhZyBmaWxlIHRoYXQgaXMgYmFzZWQgb24gdGhlIGlucHV0IGZpbGVzIGl0IHJlYWRzLiBTZWUgc2VjdGlvbiAiTGlua2luZyB0bworIyBleHRlcm5hbCBkb2N1bWVudGF0aW9uIiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNhZ2Ugb2YgdGFnIGZpbGVzLgorCitHRU5FUkFURV9UQUdGSUxFICAgICAgID0KKworIyBJZiB0aGUgQUxMRVhURVJOQUxTIHRhZyBpcyBzZXQgdG8gWUVTLCBhbGwgZXh0ZXJuYWwgY2xhc3Mgd2lsbCBiZSBsaXN0ZWQgaW4KKyMgdGhlIGNsYXNzIGluZGV4LiBJZiBzZXQgdG8gTk8sIG9ubHkgdGhlIGluaGVyaXRlZCBleHRlcm5hbCBjbGFzc2VzIHdpbGwgYmUKKyMgbGlzdGVkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0FMTEVYVEVSTkFMUyAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBFWFRFUk5BTF9HUk9VUFMgdGFnIGlzIHNldCB0byBZRVMsIGFsbCBleHRlcm5hbCBncm91cHMgd2lsbCBiZSBsaXN0ZWQKKyMgaW4gdGhlIG1vZHVsZXMgaW5kZXguIElmIHNldCB0byBOTywgb25seSB0aGUgY3VycmVudCBwcm9qZWN0J3MgZ3JvdXBzIHdpbGwgYmUKKyMgbGlzdGVkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitFWFRFUk5BTF9HUk9VUFMgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIEVYVEVSTkFMX1BBR0VTIHRhZyBpcyBzZXQgdG8gWUVTLCBhbGwgZXh0ZXJuYWwgcGFnZXMgd2lsbCBiZSBsaXN0ZWQgaW4KKyMgdGhlIHJlbGF0ZWQgcGFnZXMgaW5kZXguIElmIHNldCB0byBOTywgb25seSB0aGUgY3VycmVudCBwcm9qZWN0J3MgcGFnZXMgd2lsbAorIyBiZSBsaXN0ZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0VYVEVSTkFMX1BBR0VTICAgICAgICAgPSBZRVMKKworIyBUaGUgUEVSTF9QQVRIIHNob3VsZCBiZSB0aGUgYWJzb2x1dGUgcGF0aCBhbmQgbmFtZSBvZiB0aGUgcGVybCBzY3JpcHQKKyMgaW50ZXJwcmV0ZXIgKGkuZS4gdGhlIHJlc3VsdCBvZiAnd2hpY2ggcGVybCcpLgorIyBUaGUgZGVmYXVsdCBmaWxlICh3aXRoIGFic29sdXRlIHBhdGgpIGlzOiAvdXNyL2Jpbi9wZXJsLgorCitQRVJMX1BBVEggICAgICAgICAgICAgID0gL3Vzci9iaW4vcGVybAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBkb3QgdG9vbAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBDTEFTU19ESUFHUkFNUyB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgY2xhc3MgZGlhZ3JhbQorIyAoaW4gSFRNTCBhbmQgTGFUZVgpIGZvciBjbGFzc2VzIHdpdGggYmFzZSBvciBzdXBlciBjbGFzc2VzLiBTZXR0aW5nIHRoZSB0YWcgdG8KKyMgTk8gdHVybnMgdGhlIGRpYWdyYW1zIG9mZi4gTm90ZSB0aGF0IHRoaXMgb3B0aW9uIGFsc28gd29ya3Mgd2l0aCBIQVZFX0RPVAorIyBkaXNhYmxlZCwgYnV0IGl0IGlzIHJlY29tbWVuZGVkIHRvIGluc3RhbGwgYW5kIHVzZSBkb3QsIHNpbmNlIGl0IHlpZWxkcyBtb3JlCisjIHBvd2VyZnVsIGdyYXBocy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworQ0xBU1NfRElBR1JBTVMgICAgICAgICA9IFlFUworCisjIFlvdSBjYW4gZGVmaW5lIG1lc3NhZ2Ugc2VxdWVuY2UgY2hhcnRzIHdpdGhpbiBkb3h5Z2VuIGNvbW1lbnRzIHVzaW5nIHRoZSBcbXNjCisjIGNvbW1hbmQuIERveHlnZW4gd2lsbCB0aGVuIHJ1biB0aGUgbXNjZ2VuIHRvb2wgKHNlZToKKyMgaHR0cDovL3d3dy5tY3Rlcm5hbi5tZS51ay9tc2NnZW4vKSkgdG8gcHJvZHVjZSB0aGUgY2hhcnQgYW5kIGluc2VydCBpdCBpbiB0aGUKKyMgZG9jdW1lbnRhdGlvbi4gVGhlIE1TQ0dFTl9QQVRIIHRhZyBhbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZQorIyB0aGUgbXNjZ2VuIHRvb2wgcmVzaWRlcy4gSWYgbGVmdCBlbXB0eSB0aGUgdG9vbCBpcyBhc3N1bWVkIHRvIGJlIGZvdW5kIGluIHRoZQorIyBkZWZhdWx0IHNlYXJjaCBwYXRoLgorCitNU0NHRU5fUEFUSCAgICAgICAgICAgID0KKworIyBZb3UgY2FuIGluY2x1ZGUgZGlhZ3JhbXMgbWFkZSB3aXRoIGRpYSBpbiBkb3h5Z2VuIGRvY3VtZW50YXRpb24uIERveHlnZW4gd2lsbAorIyB0aGVuIHJ1biBkaWEgdG8gcHJvZHVjZSB0aGUgZGlhZ3JhbSBhbmQgaW5zZXJ0IGl0IGluIHRoZSBkb2N1bWVudGF0aW9uLiBUaGUKKyMgRElBX1BBVEggdGFnIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBkaWEgYmluYXJ5IHJlc2lkZXMuCisjIElmIGxlZnQgZW1wdHkgZGlhIGlzIGFzc3VtZWQgdG8gYmUgZm91bmQgaW4gdGhlIGRlZmF1bHQgc2VhcmNoIHBhdGguCisKK0RJQV9QQVRIICAgICAgICAgICAgICAgPQorCisjIElmIHNldCB0byBZRVMgdGhlIGluaGVyaXRhbmNlIGFuZCBjb2xsYWJvcmF0aW9uIGdyYXBocyB3aWxsIGhpZGUgaW5oZXJpdGFuY2UKKyMgYW5kIHVzYWdlIHJlbGF0aW9ucyBpZiB0aGUgdGFyZ2V0IGlzIHVuZG9jdW1lbnRlZCBvciBpcyBub3QgYSBjbGFzcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworSElERV9VTkRPQ19SRUxBVElPTlMgICA9IFlFUworCisjIElmIHlvdSBzZXQgdGhlIEhBVkVfRE9UIHRhZyB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgYXNzdW1lIHRoZSBkb3QgdG9vbCBpcworIyBhdmFpbGFibGUgZnJvbSB0aGUgcGF0aC4gVGhpcyB0b29sIGlzIHBhcnQgb2YgR3JhcGh2aXogKHNlZToKKyMgaHR0cDovL3d3dy5ncmFwaHZpei5vcmcvKSwgYSBncmFwaCB2aXN1YWxpemF0aW9uIHRvb2xraXQgZnJvbSBBVCZUIGFuZCBMdWNlbnQKKyMgQmVsbCBMYWJzLiBUaGUgb3RoZXIgb3B0aW9ucyBpbiB0aGlzIHNlY3Rpb24gaGF2ZSBubyBlZmZlY3QgaWYgdGhpcyBvcHRpb24gaXMKKyMgc2V0IHRvIE5PCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworSEFWRV9ET1QgICAgICAgICAgICAgICA9IE5PCisKKyMgVGhlIERPVF9OVU1fVEhSRUFEUyBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBkb3QgaW52b2NhdGlvbnMgZG94eWdlbiBpcyBhbGxvd2VkCisjIHRvIHJ1biBpbiBwYXJhbGxlbC4gV2hlbiBzZXQgdG8gMCBkb3h5Z2VuIHdpbGwgYmFzZSB0aGlzIG9uIHRoZSBudW1iZXIgb2YKKyMgcHJvY2Vzc29ycyBhdmFpbGFibGUgaW4gdGhlIHN5c3RlbS4gWW91IGNhbiBzZXQgaXQgZXhwbGljaXRseSB0byBhIHZhbHVlCisjIGxhcmdlciB0aGFuIDAgdG8gZ2V0IGNvbnRyb2wgb3ZlciB0aGUgYmFsYW5jZSBiZXR3ZWVuIENQVSBsb2FkIGFuZCBwcm9jZXNzaW5nCisjIHNwZWVkLgorIyBNaW5pbXVtIHZhbHVlOiAwLCBtYXhpbXVtIHZhbHVlOiAzMiwgZGVmYXVsdCB2YWx1ZTogMC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0RPVF9OVU1fVEhSRUFEUyAgICAgICAgPSAwCisKKyMgV2hlbiB5b3Ugd2FudCBhIGRpZmZlcmVudGx5IGxvb2tpbmcgZm9udCBpbiB0aGUgZG90IGZpbGVzIHRoYXQgZG94eWdlbgorIyBnZW5lcmF0ZXMgeW91IGNhbiBzcGVjaWZ5IHRoZSBmb250IG5hbWUgdXNpbmcgRE9UX0ZPTlROQU1FLiBZb3UgbmVlZCB0byBtYWtlCisjIHN1cmUgZG90IGlzIGFibGUgdG8gZmluZCB0aGUgZm9udCwgd2hpY2ggY2FuIGJlIGRvbmUgYnkgcHV0dGluZyBpdCBpbiBhCisjIHN0YW5kYXJkIGxvY2F0aW9uIG9yIGJ5IHNldHRpbmcgdGhlIERPVEZPTlRQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIG9yIGJ5CisjIHNldHRpbmcgRE9UX0ZPTlRQQVRIIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgZm9udC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IEhlbHZldGljYS4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0RPVF9GT05UTkFNRSAgICAgICAgICAgPSBIZWx2ZXRpY2EKKworIyBUaGUgRE9UX0ZPTlRTSVpFIHRhZyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIHNpemUgKGluIHBvaW50cykgb2YgdGhlIGZvbnQgb2YKKyMgZG90IGdyYXBocy4KKyMgTWluaW11bSB2YWx1ZTogNCwgbWF4aW11bSB2YWx1ZTogMjQsIGRlZmF1bHQgdmFsdWU6IDEwLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworRE9UX0ZPTlRTSVpFICAgICAgICAgICA9IDEwCisKKyMgQnkgZGVmYXVsdCBkb3h5Z2VuIHdpbGwgdGVsbCBkb3QgdG8gdXNlIHRoZSBkZWZhdWx0IGZvbnQgYXMgc3BlY2lmaWVkIHdpdGgKKyMgRE9UX0ZPTlROQU1FLiBJZiB5b3Ugc3BlY2lmeSBhIGRpZmZlcmVudCBmb250IHVzaW5nIERPVF9GT05UTkFNRSB5b3UgY2FuIHNldAorIyB0aGUgcGF0aCB3aGVyZSBkb3QgY2FuIGZpbmQgaXQgdXNpbmcgdGhpcyB0YWcuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitET1RfRk9OVFBBVEggICAgICAgICAgID0KKworIyBJZiB0aGUgQ0xBU1NfR1JBUEggdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBncmFwaCBmb3IKKyMgZWFjaCBkb2N1bWVudGVkIGNsYXNzIHNob3dpbmcgdGhlIGRpcmVjdCBhbmQgaW5kaXJlY3QgaW5oZXJpdGFuY2UgcmVsYXRpb25zLgorIyBTZXR0aW5nIHRoaXMgdGFnIHRvIFlFUyB3aWxsIGZvcmNlIHRoZSBDTEFTU19ESUFHUkFNUyB0YWcgdG8gTk8uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitDTEFTU19HUkFQSCAgICAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIENPTExBQk9SQVRJT05fR1JBUEggdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYQorIyBncmFwaCBmb3IgZWFjaCBkb2N1bWVudGVkIGNsYXNzIHNob3dpbmcgdGhlIGRpcmVjdCBhbmQgaW5kaXJlY3QgaW1wbGVtZW50YXRpb24KKyMgZGVwZW5kZW5jaWVzIChpbmhlcml0YW5jZSwgY29udGFpbm1lbnQsIGFuZCBjbGFzcyByZWZlcmVuY2VzIHZhcmlhYmxlcykgb2YgdGhlCisjIGNsYXNzIHdpdGggb3RoZXIgZG9jdW1lbnRlZCBjbGFzc2VzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworQ09MTEFCT1JBVElPTl9HUkFQSCAgICA9IFlFUworCisjIElmIHRoZSBHUk9VUF9HUkFQSFMgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBncmFwaCBmb3IKKyMgZ3JvdXBzLCBzaG93aW5nIHRoZSBkaXJlY3QgZ3JvdXBzIGRlcGVuZGVuY2llcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0dST1VQX0dSQVBIUyAgICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgVU1MX0xPT0sgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBpbmhlcml0YW5jZSBhbmQKKyMgY29sbGFib3JhdGlvbiBkaWFncmFtcyBpbiBhIHN0eWxlIHNpbWlsYXIgdG8gdGhlIE9NRydzIFVuaWZpZWQgTW9kZWxpbmcKKyMgTGFuZ3VhZ2UuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK1VNTF9MT09LICAgICAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBVTUxfTE9PSyB0YWcgaXMgZW5hYmxlZCwgdGhlIGZpZWxkcyBhbmQgbWV0aG9kcyBhcmUgc2hvd24gaW5zaWRlIHRoZQorIyBjbGFzcyBub2RlLiBJZiB0aGVyZSBhcmUgbWFueSBmaWVsZHMgb3IgbWV0aG9kcyBhbmQgbWFueSBub2RlcyB0aGUgZ3JhcGggbWF5CisjIGJlY29tZSB0b28gYmlnIHRvIGJlIHVzZWZ1bC4gVGhlIFVNTF9MSU1JVF9OVU1fRklFTERTIHRocmVzaG9sZCBsaW1pdHMgdGhlCisjIG51bWJlciBvZiBpdGVtcyBmb3IgZWFjaCB0eXBlIHRvIG1ha2UgdGhlIHNpemUgbW9yZSBtYW5hZ2VhYmxlLiBTZXQgdGhpcyB0byAwCisjIGZvciBubyBsaW1pdC4gTm90ZSB0aGF0IHRoZSB0aHJlc2hvbGQgbWF5IGJlIGV4Y2VlZGVkIGJ5IDUwJSBiZWZvcmUgdGhlIGxpbWl0CisjIGlzIGVuZm9yY2VkLiBTbyB3aGVuIHlvdSBzZXQgdGhlIHRocmVzaG9sZCB0byAxMCwgdXAgdG8gMTUgZmllbGRzIG1heSBhcHBlYXIsCisjIGJ1dCBpZiB0aGUgbnVtYmVyIGV4Y2VlZHMgMTUsIHRoZSB0b3RhbCBhbW91bnQgb2YgZmllbGRzIHNob3duIGlzIGxpbWl0ZWQgdG8KKyMgMTAuCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDEwMCwgZGVmYXVsdCB2YWx1ZTogMTAuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitVTUxfTElNSVRfTlVNX0ZJRUxEUyAgID0gMTAKKworIyBJZiB0aGUgVEVNUExBVEVfUkVMQVRJT05TIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gdGhlIGluaGVyaXRhbmNlIGFuZAorIyBjb2xsYWJvcmF0aW9uIGdyYXBocyB3aWxsIHNob3cgdGhlIHJlbGF0aW9ucyBiZXR3ZWVuIHRlbXBsYXRlcyBhbmQgdGhlaXIKKyMgaW5zdGFuY2VzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitURU1QTEFURV9SRUxBVElPTlMgICAgID0gWUVTCisKKyMgSWYgdGhlIElOQ0xVREVfR1JBUEgsIEVOQUJMRV9QUkVQUk9DRVNTSU5HIGFuZCBTRUFSQ0hfSU5DTFVERVMgdGFncyBhcmUgc2V0IHRvCisjIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGdyYXBoIGZvciBlYWNoIGRvY3VtZW50ZWQgZmlsZSBzaG93aW5nIHRoZQorIyBkaXJlY3QgYW5kIGluZGlyZWN0IGluY2x1ZGUgZGVwZW5kZW5jaWVzIG9mIHRoZSBmaWxlIHdpdGggb3RoZXIgZG9jdW1lbnRlZAorIyBmaWxlcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0lOQ0xVREVfR1JBUEggICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgSU5DTFVERURfQllfR1JBUEgsIEVOQUJMRV9QUkVQUk9DRVNTSU5HIGFuZCBTRUFSQ0hfSU5DTFVERVMgdGFncyBhcmUKKyMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGdyYXBoIGZvciBlYWNoIGRvY3VtZW50ZWQgZmlsZSBzaG93aW5nCisjIHRoZSBkaXJlY3QgYW5kIGluZGlyZWN0IGluY2x1ZGUgZGVwZW5kZW5jaWVzIG9mIHRoZSBmaWxlIHdpdGggb3RoZXIgZG9jdW1lbnRlZAorIyBmaWxlcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0lOQ0xVREVEX0JZX0dSQVBIICAgICAgPSBZRVMKKworIyBJZiB0aGUgQ0FMTF9HUkFQSCB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGNhbGwKKyMgZGVwZW5kZW5jeSBncmFwaCBmb3IgZXZlcnkgZ2xvYmFsIGZ1bmN0aW9uIG9yIGNsYXNzIG1ldGhvZC4KKyMKKyMgTm90ZSB0aGF0IGVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgc2lnbmlmaWNhbnRseSBpbmNyZWFzZSB0aGUgdGltZSBvZiBhIHJ1bi4KKyMgU28gaW4gbW9zdCBjYXNlcyBpdCB3aWxsIGJlIGJldHRlciB0byBlbmFibGUgY2FsbCBncmFwaHMgZm9yIHNlbGVjdGVkCisjIGZ1bmN0aW9ucyBvbmx5IHVzaW5nIHRoZSBcY2FsbGdyYXBoIGNvbW1hbmQuIERpc2FibGluZyBhIGNhbGwgZ3JhcGggY2FuIGJlCisjIGFjY29tcGxpc2hlZCBieSBtZWFucyBvZiB0aGUgY29tbWFuZCBcaGlkZWNhbGxncmFwaC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworQ0FMTF9HUkFQSCAgICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIENBTExFUl9HUkFQSCB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGNhbGxlcgorIyBkZXBlbmRlbmN5IGdyYXBoIGZvciBldmVyeSBnbG9iYWwgZnVuY3Rpb24gb3IgY2xhc3MgbWV0aG9kLgorIworIyBOb3RlIHRoYXQgZW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBzaWduaWZpY2FudGx5IGluY3JlYXNlIHRoZSB0aW1lIG9mIGEgcnVuLgorIyBTbyBpbiBtb3N0IGNhc2VzIGl0IHdpbGwgYmUgYmV0dGVyIHRvIGVuYWJsZSBjYWxsZXIgZ3JhcGhzIGZvciBzZWxlY3RlZAorIyBmdW5jdGlvbnMgb25seSB1c2luZyB0aGUgXGNhbGxlcmdyYXBoIGNvbW1hbmQuIERpc2FibGluZyBhIGNhbGxlciBncmFwaCBjYW4gYmUKKyMgYWNjb21wbGlzaGVkIGJ5IG1lYW5zIG9mIHRoZSBjb21tYW5kIFxoaWRlY2FsbGVyZ3JhcGguCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0NBTExFUl9HUkFQSCAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBHUkFQSElDQUxfSElFUkFSQ0hZIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdyYXBoaWNhbAorIyBoaWVyYXJjaHkgb2YgYWxsIGNsYXNzZXMgaW5zdGVhZCBvZiBhIHRleHR1YWwgb25lLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworR1JBUEhJQ0FMX0hJRVJBUkNIWSAgICA9IFlFUworCisjIElmIHRoZSBESVJFQ1RPUllfR1JBUEggdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgc2hvdyB0aGUKKyMgZGVwZW5kZW5jaWVzIGEgZGlyZWN0b3J5IGhhcyBvbiBvdGhlciBkaXJlY3RvcmllcyBpbiBhIGdyYXBoaWNhbCB3YXkuIFRoZQorIyBkZXBlbmRlbmN5IHJlbGF0aW9ucyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgI2luY2x1ZGUgcmVsYXRpb25zIGJldHdlZW4gdGhlCisjIGZpbGVzIGluIHRoZSBkaXJlY3Rvcmllcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0RJUkVDVE9SWV9HUkFQSCAgICAgICAgPSBZRVMKKworIyBUaGUgRE9UX0lNQUdFX0ZPUk1BVCB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBpbWFnZSBmb3JtYXQgb2YgdGhlIGltYWdlcworIyBnZW5lcmF0ZWQgYnkgZG90LiBGb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIGltYWdlIGZvcm1hdHMgc2VlIHRoZSBzZWN0aW9uCisjIG91dHB1dCBmb3JtYXRzIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBkb3QgdG9vbCAoR3JhcGh2aXogKHNlZToKKyMgaHR0cDovL3d3dy5ncmFwaHZpei5vcmcvKSkuCisjIE5vdGU6IElmIHlvdSBjaG9vc2Ugc3ZnIHlvdSBuZWVkIHRvIHNldCBIVE1MX0ZJTEVfRVhURU5TSU9OIHRvIHhodG1sIGluIG9yZGVyCisjIHRvIG1ha2UgdGhlIFNWRyBmaWxlcyB2aXNpYmxlIGluIElFIDkrIChvdGhlciBicm93c2VycyBkbyBub3QgaGF2ZSB0aGlzCisjIHJlcXVpcmVtZW50KS4KKyMgUG9zc2libGUgdmFsdWVzIGFyZTogcG5nLCBqcGcsIGdpZiwgc3ZnLCBwbmc6Z2QsIHBuZzpnZDpnZCwgcG5nOmNhaXJvLAorIyBwbmc6Y2Fpcm86Z2QsIHBuZzpjYWlybzpjYWlybywgcG5nOmNhaXJvOmdkaXBsdXMsIHBuZzpnZGlwbHVzIGFuZAorIyBwbmc6Z2RpcGx1czpnZGlwbHVzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogcG5nLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworRE9UX0lNQUdFX0ZPUk1BVCAgICAgICA9IHBuZworCisjIElmIERPVF9JTUFHRV9GT1JNQVQgaXMgc2V0IHRvIHN2ZywgdGhlbiB0aGlzIG9wdGlvbiBjYW4gYmUgc2V0IHRvIFlFUyB0bworIyBlbmFibGUgZ2VuZXJhdGlvbiBvZiBpbnRlcmFjdGl2ZSBTVkcgaW1hZ2VzIHRoYXQgYWxsb3cgem9vbWluZyBhbmQgcGFubmluZy4KKyMKKyMgTm90ZSB0aGF0IHRoaXMgcmVxdWlyZXMgYSBtb2Rlcm4gYnJvd3NlciBvdGhlciB0aGFuIEludGVybmV0IEV4cGxvcmVyLiBUZXN0ZWQKKyMgYW5kIHdvcmtpbmcgYXJlIEZpcmVmb3gsIENocm9tZSwgU2FmYXJpLCBhbmQgT3BlcmEuCisjIE5vdGU6IEZvciBJRSA5KyB5b3UgbmVlZCB0byBzZXQgSFRNTF9GSUxFX0VYVEVOU0lPTiB0byB4aHRtbCBpbiBvcmRlciB0byBtYWtlCisjIHRoZSBTVkcgZmlsZXMgdmlzaWJsZS4gT2xkZXIgdmVyc2lvbnMgb2YgSUUgZG8gbm90IGhhdmUgU1ZHIHN1cHBvcnQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0lOVEVSQUNUSVZFX1NWRyAgICAgICAgPSBOTworCisjIFRoZSBET1RfUEFUSCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgcGF0aCB3aGVyZSB0aGUgZG90IHRvb2wgY2FuIGJlCisjIGZvdW5kLiBJZiBsZWZ0IGJsYW5rLCBpdCBpcyBhc3N1bWVkIHRoZSBkb3QgdG9vbCBjYW4gYmUgZm91bmQgaW4gdGhlIHBhdGguCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitET1RfUEFUSCAgICAgICAgICAgICAgID0KKworIyBUaGUgRE9URklMRV9ESVJTIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGRpcmVjdG9yaWVzIHRoYXQKKyMgY29udGFpbiBkb3QgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gKHNlZSB0aGUgXGRvdGZpbGUKKyMgY29tbWFuZCkuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitET1RGSUxFX0RJUlMgICAgICAgICAgID0KKworIyBUaGUgTVNDRklMRV9ESVJTIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGRpcmVjdG9yaWVzIHRoYXQKKyMgY29udGFpbiBtc2MgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gKHNlZSB0aGUgXG1zY2ZpbGUKKyMgY29tbWFuZCkuCisKK01TQ0ZJTEVfRElSUyAgICAgICAgICAgPQorCisjIFRoZSBESUFGSUxFX0RJUlMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgZGlyZWN0b3JpZXMgdGhhdAorIyBjb250YWluIGRpYSBmaWxlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiAoc2VlIHRoZSBcZGlhZmlsZQorIyBjb21tYW5kKS4KKworRElBRklMRV9ESVJTICAgICAgICAgICA9CisKKyMgV2hlbiB1c2luZyBwbGFudHVtbCwgdGhlIFBMQU5UVU1MX0pBUl9QQVRIIHRhZyBzaG91bGQgYmUgdXNlZCB0byBzcGVjaWZ5IHRoZQorIyBwYXRoIHdoZXJlIGphdmEgY2FuIGZpbmQgdGhlIHBsYW50dW1sLmphciBmaWxlLiBJZiBsZWZ0IGJsYW5rLCBpdCBpcyBhc3N1bWVkCisjIFBsYW50VU1MIGlzIG5vdCB1c2VkIG9yIGNhbGxlZCBkdXJpbmcgYSBwcmVwcm9jZXNzaW5nIHN0ZXAuIERveHlnZW4gd2lsbAorIyBnZW5lcmF0ZSBhIHdhcm5pbmcgd2hlbiBpdCBlbmNvdW50ZXJzIGEgXHN0YXJ0dW1sIGNvbW1hbmQgaW4gdGhpcyBjYXNlIGFuZAorIyB3aWxsIG5vdCBnZW5lcmF0ZSBvdXRwdXQgZm9yIHRoZSBkaWFncmFtLgorCitQTEFOVFVNTF9KQVJfUEFUSCAgICAgID0KKworIyBXaGVuIHVzaW5nIHBsYW50dW1sLCB0aGUgc3BlY2lmaWVkIHBhdGhzIGFyZSBzZWFyY2hlZCBmb3IgZmlsZXMgc3BlY2lmaWVkIGJ5CisjIHRoZSAhaW5jbHVkZSBzdGF0ZW1lbnQgaW4gYSBwbGFudHVtbCBibG9jay4KKworUExBTlRVTUxfSU5DTFVERV9QQVRIICA9CisKKyMgVGhlIERPVF9HUkFQSF9NQVhfTk9ERVMgdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgbWF4aW11bSBudW1iZXIgb2Ygbm9kZXMKKyMgdGhhdCB3aWxsIGJlIHNob3duIGluIHRoZSBncmFwaC4gSWYgdGhlIG51bWJlciBvZiBub2RlcyBpbiBhIGdyYXBoIGJlY29tZXMKKyMgbGFyZ2VyIHRoYW4gdGhpcyB2YWx1ZSwgZG94eWdlbiB3aWxsIHRydW5jYXRlIHRoZSBncmFwaCwgd2hpY2ggaXMgdmlzdWFsaXplZAorIyBieSByZXByZXNlbnRpbmcgYSBub2RlIGFzIGEgcmVkIGJveC4gTm90ZSB0aGF0IGRveHlnZW4gaWYgdGhlIG51bWJlciBvZiBkaXJlY3QKKyMgY2hpbGRyZW4gb2YgdGhlIHJvb3Qgbm9kZSBpbiBhIGdyYXBoIGlzIGFscmVhZHkgbGFyZ2VyIHRoYW4KKyMgRE9UX0dSQVBIX01BWF9OT0RFUyB0aGVuIHRoZSBncmFwaCB3aWxsIG5vdCBiZSBzaG93biBhdCBhbGwuIEFsc28gbm90ZSB0aGF0CisjIHRoZSBzaXplIG9mIGEgZ3JhcGggY2FuIGJlIGZ1cnRoZXIgcmVzdHJpY3RlZCBieSBNQVhfRE9UX0dSQVBIX0RFUFRILgorIyBNaW5pbXVtIHZhbHVlOiAwLCBtYXhpbXVtIHZhbHVlOiAxMDAwMCwgZGVmYXVsdCB2YWx1ZTogNTAuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitET1RfR1JBUEhfTUFYX05PREVTICAgID0gNTAKKworIyBUaGUgTUFYX0RPVF9HUkFQSF9ERVBUSCB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBtYXhpbXVtIGRlcHRoIG9mIHRoZSBncmFwaHMKKyMgZ2VuZXJhdGVkIGJ5IGRvdC4gQSBkZXB0aCB2YWx1ZSBvZiAzIG1lYW5zIHRoYXQgb25seSBub2RlcyByZWFjaGFibGUgZnJvbSB0aGUKKyMgcm9vdCBieSBmb2xsb3dpbmcgYSBwYXRoIHZpYSBhdCBtb3N0IDMgZWRnZXMgd2lsbCBiZSBzaG93bi4gTm9kZXMgdGhhdCBsYXkKKyMgZnVydGhlciBmcm9tIHRoZSByb290IG5vZGUgd2lsbCBiZSBvbWl0dGVkLiBOb3RlIHRoYXQgc2V0dGluZyB0aGlzIG9wdGlvbiB0byAxCisjIG9yIDIgbWF5IGdyZWF0bHkgcmVkdWNlIHRoZSBjb21wdXRhdGlvbiB0aW1lIG5lZWRlZCBmb3IgbGFyZ2UgY29kZSBiYXNlcy4gQWxzbworIyBub3RlIHRoYXQgdGhlIHNpemUgb2YgYSBncmFwaCBjYW4gYmUgZnVydGhlciByZXN0cmljdGVkIGJ5CisjIERPVF9HUkFQSF9NQVhfTk9ERVMuIFVzaW5nIGEgZGVwdGggb2YgMCBtZWFucyBubyBkZXB0aCByZXN0cmljdGlvbi4KKyMgTWluaW11bSB2YWx1ZTogMCwgbWF4aW11bSB2YWx1ZTogMTAwMCwgZGVmYXVsdCB2YWx1ZTogMC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK01BWF9ET1RfR1JBUEhfREVQVEggICAgPSAwCisKKyMgU2V0IHRoZSBET1RfVFJBTlNQQVJFTlQgdGFnIHRvIFlFUyB0byBnZW5lcmF0ZSBpbWFnZXMgd2l0aCBhIHRyYW5zcGFyZW50CisjIGJhY2tncm91bmQuIFRoaXMgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgYmVjYXVzZSBkb3Qgb24gV2luZG93cyBkb2VzIG5vdCBzZWVtCisjIHRvIHN1cHBvcnQgdGhpcyBvdXQgb2YgdGhlIGJveC4KKyMKKyMgV2FybmluZzogRGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybSB1c2VkLCBlbmFibGluZyB0aGlzIG9wdGlvbiBtYXkgbGVhZCB0bworIyBiYWRseSBhbnRpLWFsaWFzZWQgbGFiZWxzIG9uIHRoZSBlZGdlcyBvZiBhIGdyYXBoIChpLmUuIHRoZXkgYmVjb21lIGhhcmQgdG8KKyMgcmVhZCkuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0RPVF9UUkFOU1BBUkVOVCAgICAgICAgPSBOTworCisjIFNldCB0aGUgRE9UX01VTFRJX1RBUkdFVFMgdGFnIHRvIFlFUyB0byBhbGxvdyBkb3QgdG8gZ2VuZXJhdGUgbXVsdGlwbGUgb3V0cHV0CisjIGZpbGVzIGluIG9uZSBydW4gKGkuZS4gbXVsdGlwbGUgLW8gYW5kIC1UIG9wdGlvbnMgb24gdGhlIGNvbW1hbmQgbGluZSkuIFRoaXMKKyMgbWFrZXMgZG90IHJ1biBmYXN0ZXIsIGJ1dCBzaW5jZSBvbmx5IG5ld2VyIHZlcnNpb25zIG9mIGRvdCAoPjEuOC4xMCkgc3VwcG9ydAorIyB0aGlzLCB0aGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworRE9UX01VTFRJX1RBUkdFVFMgICAgICA9IE5PCisKKyMgSWYgdGhlIEdFTkVSQVRFX0xFR0VORCB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBsZWdlbmQgcGFnZQorIyBleHBsYWluaW5nIHRoZSBtZWFuaW5nIG9mIHRoZSB2YXJpb3VzIGJveGVzIGFuZCBhcnJvd3MgaW4gdGhlIGRvdCBnZW5lcmF0ZWQKKyMgZ3JhcGhzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworR0VORVJBVEVfTEVHRU5EICAgICAgICA9IFlFUworCisjIElmIHRoZSBET1RfQ0xFQU5VUCB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIHJlbW92ZSB0aGUgaW50ZXJtZWRpYXRlIGRvdAorIyBmaWxlcyB0aGF0IGFyZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSB2YXJpb3VzIGdyYXBocy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0RPVF9DTEVBTlVQICAgICAgICAgICAgPSBZRVMKZGlmZiAtLWdpdCBhL2RvYy9NYWtlZmlsZSBiL2RvYy9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ2ZWY1ZC4uMDAwMDAwMAotLS0gYS9kb2MvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0jIE1ha2VmaWxlIGZvciBsaWJTUlRQIGRvY3VtZW50YXRpb24KLSMKLSMgRGF2aWQgQS4gTWNHcmV3Ci0jIENpc2NvIFN5c3RlbXMsIEluYy4KLSMKLSMgVGhpcyBtYWtlZmlsZSBkb2VzIG5vdCB1c2UgdGhlIGF1dG9jb25mIHN5c3RlbTsgd2UgZG9uJ3QgcmVhbGx5IG5lZWQKLSMgaXQuICBXZSBqdXN0IHJ1biBkb3h5Z2VuIHRoZW4gbGF0ZXguICBJZiB5b3UgZG9uJ3QgaGF2ZSBlaXRoZXIgb2YKLSMgdGhlc2UsIHRoZW4gdGhlcmUgaXMgbm8gd2F5IHRoYXQgeW91IGNhbiBtYWtlIHlvdXIgb3duCi0jIGRvY3VtZW50YXRpb24uICBPZiBjb3Vyc2UsIHlvdSBjYW4ganVzdCBnbyBvbmxpbmUgYXQgcGljayB1cCB0aGUKLSMgZG9jdW1lbnRhdGlvbiBmcm9tIGh0dHA6Ly9zcnRwLnNvdXJjZWZvcmdlLm5ldC4KLQotLlBIT05ZOiBsaWJzcnRwZG9jIGNyeXB0b2RvYyBjbGVhbgotbGlic3J0cGRvYzogY2xlYW4KLQlkb3h5Z2VuCi0Jc2VkICdzL1xzdWJzZWN0aW9uL1xzZWN0aW9uLycgbGF0ZXgvaW5kZXgudGV4ID4gbGF0ZXgvaW5kZXgudG1wCi0JbXYgbGF0ZXgvaW5kZXgudG1wIGxhdGV4L2luZGV4LnRleAotCWNkIGxhdGV4OyBtYWtlCi0JY3AgbGF0ZXgvcmVmbWFuLnBkZiBsaWJzcnRwLnBkZgotCi0KLWNyeXB0b2RvYzogY2xlYW4KLQlkb3h5Z2VuIGNyeXB0by5kb3gKLQkjIHNlZCAncy9cc3Vic2VjdGlvbi9cc2VjdGlvbi8nIGxhdGV4L2luZGV4LnRleCA+IGxhdGV4L2luZGV4LnRtcAotCSMgbXYgbGF0ZXgvaW5kZXgudG1wIGxhdGV4L2luZGV4LnRleAotCWNkIGxhdGV4OyBtYWtlCi0JY3AgbGF0ZXgvcmVmbWFuLnBkZiBjcnlwdG8ucGRmCi0KLWNsZWFuOgotCXJtIC1yZiBsYXRleC8gCi0JZm9yIGEgaW4gKiA7IGRvCQkJICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgaWYgWyAtZiAiJCRhfiIgXSA7IHRoZW4gcm0gLWYgJCRhfjsgZmk7CVwKLSAgICAgICAgZG9uZTsKZGlmZiAtLWdpdCBhL2RvYy9NYWtlZmlsZS5pbiBiL2RvYy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzBjY2JiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMzIgQEAKKyMgTWFrZWZpbGUgZm9yIGxpYlNSVFAgZG9jdW1lbnRhdGlvbgorIworIyBEYXZpZCBBLiBNY0dyZXcKKyMgQ2lzY28gU3lzdGVtcywgSW5jLgorIworIyBUaGlzIG1ha2VmaWxlIGRvZXMgbm90IHVzZSB0aGUgYXV0b2NvbmYgc3lzdGVtOyB3ZSBkb24ndCByZWFsbHkgbmVlZAorIyBpdC4gV2UganVzdCBydW4gZG94eWdlbi4KKyMgVGhlIG1vc3QgdXAgdG8gZGF0ZSBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZCBhdCB3d3cuZ2l0aHViLmNvbS9jaXNjby9saWJzcnRwCisKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAorVlBBVEggPSBAc3JjZGlyQAorCisjIERldGVybWluZSB0aGUgdmVyc2lvbiBvZiB0aGUgbGlicmFyeQorCit2ZXJzaW9uID0gJChzaGVsbCBjYXQgJCh0b3Bfc3JjZGlyKS9WRVJTSU9OKQorCisuUEhPTlk6IGxpYnNydHBkb2MgY2xlYW4KK2xpYnNydHBkb2M6CisJQGlmIHRlc3QgISAtZSBEb3h5ZmlsZS5pbjsgdGhlbiBcCisJCWVjaG8gIioqKiBTb3JyeSwgY2FuJ3QgYnVpbGQgZG9jIG91dHNpZGUgc291cmNlIGRpciI7IGV4aXQgMTsgXAorCWZpCisJc2VkICdzL0xJQlNSVFBWRVJTSU9OTlVNQkVSLyQodmVyc2lvbikvJyBEb3h5ZmlsZS5pbiA+IERveHlmaWxlCisJZG94eWdlbgorCitjbGVhbjoKKworCXJtIC1yZiBodG1sLyBEb3h5ZmlsZQorCWZvciBhIGluICogOyBkbwkJCQkJCQlcCisJCQkgIGlmIFsgLWYgIiQkYX4iIF0gOyB0aGVuIHJtIC1mICQkYX47IGZpOwlcCisJCWRvbmU7CmRpZmYgLS1naXQgYS9kb2MvY3J5cHRvX2tlcm5lbC50eHQgYi9kb2MvY3J5cHRvX2tlcm5lbC50eHQKaW5kZXggZTBmOTdlZC4uYjBkMDMzZiAxMDA2NDQKLS0tIGEvZG9jL2NyeXB0b19rZXJuZWwudHh0CisrKyBiL2RvYy9jcnlwdG9fa2VybmVsLnR4dApAQCAtMzUsNyArMzUsNyBAQAogICovCiAKIGVycl9zdGF0dXNfdAotY2lwaGVyX2luaXQoY2lwaGVyX3QgKmNpcGhlciwgY29uc3Qgb2N0ZXRfdCAqa2V5KTsKK2NpcGhlcl9pbml0KGNpcGhlcl90ICpjaXBoZXIsIGNvbnN0IHVpbnQ4X3QgKmtleSk7CiAKIC8qKgogICogQGJyaWVmIFNldHMgdGhlIGluaXRpYWxpemF0aW9uIHZlY3RvciBvZiBhIGdpdmVuIGNpcGhlci4KQEAgLTU4LDcgKzU4LDcgQEAKICAqIEB3YXJuaW5nIE1heSBiZSBpbXBsZW1lbnRlZCBhcyBhIG1hY3JvLgogICovCiBlcnJfc3RhdHVzX3QgCi1jaXBoZXJfb3V0cHV0KGNpcGhlcl90ICpjLCBvY3RldF90ICpidWZmZXIsIGludCBudW1fb2N0ZXRzX3RvX291dHB1dCk7CitjaXBoZXJfb3V0cHV0KGNpcGhlcl90ICpjLCB1aW50OF90ICpidWZmZXIsIGludCBudW1fb2N0ZXRzX3RvX291dHB1dCk7CiAKIC8qKgogICogQGJyaWVmIERlYWxsb2NhdGVzIGEgY2lwaGVyLgpkaWZmIC0tZ2l0IGEvZG9jL2RvY3MuY3NzIGIvZG9jL2RvY3MuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNjExMTYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZG9jcy5jc3MKQEAgLTAsMCArMSwxNDc5IEBACisvKiBUaGUgc3RhbmRhcmQgQ1NTIGZvciBkb3h5Z2VuIDEuOC4xMSAqLworCitib2R5LCB0YWJsZSwgZGl2LCBwLCBkbCB7CisgICAgZm9udDogNDAwIDE0cHgvMjJweCBSb2JvdG8sc2Fucy1zZXJpZjsKK30KKworYm9keSB7CisgICAgbWF4LXdpZHRoOiA4MDBweDsKKyAgICBtYXJnaW46IDAgYXV0bzsKK30KKworLyogQGdyb3VwIEhlYWRpbmcgTGV2ZWxzICovCisKK2gxLmdyb3VwaGVhZGVyIHsKKwlmb250LXNpemU6IDE1MCU7Cit9CisKKy50aXRsZSB7CisJZm9udDogNDAwIDE0cHgvMjhweCBSb2JvdG8sc2Fucy1zZXJpZjsKKwlmb250LXNpemU6IDE1MCU7CisJZm9udC13ZWlnaHQ6IGJvbGQ7CisJbWFyZ2luOiAxMHB4IDJweDsKK30KKworaDIuZ3JvdXBoZWFkZXIgeworCWJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjODc5RUNCOworCWNvbG9yOiAjMzU0QzdCOworCWZvbnQtc2l6ZTogMTUwJTsKKwlmb250LXdlaWdodDogbm9ybWFsOworCW1hcmdpbi10b3A6IDEuNzVlbTsKKwlwYWRkaW5nLXRvcDogOHB4OworCXBhZGRpbmctYm90dG9tOiA0cHg7CisJd2lkdGg6IDEwMCU7Cit9CisKK2gzLmdyb3VwaGVhZGVyIHsKKwlmb250LXNpemU6IDEwMCU7Cit9CisKK2gxLCBoMiwgaDMsIGg0LCBoNSwgaDYgeworCS13ZWJraXQtdHJhbnNpdGlvbjogdGV4dC1zaGFkb3cgMC41cyBsaW5lYXI7CisJLW1vei10cmFuc2l0aW9uOiB0ZXh0LXNoYWRvdyAwLjVzIGxpbmVhcjsKKwktbXMtdHJhbnNpdGlvbjogdGV4dC1zaGFkb3cgMC41cyBsaW5lYXI7CisJLW8tdHJhbnNpdGlvbjogdGV4dC1zaGFkb3cgMC41cyBsaW5lYXI7CisJdHJhbnNpdGlvbjogdGV4dC1zaGFkb3cgMC41cyBsaW5lYXI7CisJbWFyZ2luLXJpZ2h0OiAxNXB4OworfQorCitoMS5nbG93LCBoMi5nbG93LCBoMy5nbG93LCBoNC5nbG93LCBoNS5nbG93LCBoNi5nbG93IHsKKwl0ZXh0LXNoYWRvdzogMCAwIDE1cHggY3lhbjsKK30KKworZHQgeworCWZvbnQtd2VpZ2h0OiBib2xkOworfQorCitkaXYubXVsdGljb2wgeworCS1tb3otY29sdW1uLWdhcDogMWVtOworCS13ZWJraXQtY29sdW1uLWdhcDogMWVtOworCS1tb3otY29sdW1uLWNvdW50OiAzOworCS13ZWJraXQtY29sdW1uLWNvdW50OiAzOworfQorCitwLnN0YXJ0bGksIHAuc3RhcnRkZCB7CisJbWFyZ2luLXRvcDogMnB4OworfQorCitwLnN0YXJ0dGQgeworCW1hcmdpbi10b3A6IDBweDsKK30KKworcC5lbmRsaSB7CisJbWFyZ2luLWJvdHRvbTogMHB4OworfQorCitwLmVuZGRkIHsKKwltYXJnaW4tYm90dG9tOiA0cHg7Cit9CisKK3AuZW5kdGQgeworCW1hcmdpbi1ib3R0b206IDJweDsKK30KKworLyogQGVuZCAqLworCitjYXB0aW9uIHsKKwlmb250LXdlaWdodDogYm9sZDsKK30KKworc3Bhbi5sZWdlbmQgeworICAgICAgICBmb250LXNpemU6IDcwJTsKKyAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCitoMy52ZXJzaW9uIHsKKyAgICAgICAgZm9udC1zaXplOiA5MCU7CisgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworZGl2LnFpbmRleCwgZGl2Lm5hdnRhYnsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjRUJFRkY2OworCWJvcmRlcjogMXB4IHNvbGlkICNBM0I0RDc7CisJdGV4dC1hbGlnbjogY2VudGVyOworfQorCitkaXYucWluZGV4LCBkaXYubmF2cGF0aCB7CisJd2lkdGg6IDEwMCU7CisJbGluZS1oZWlnaHQ6IDE0MCU7Cit9CisKK2Rpdi5uYXZ0YWIgeworCW1hcmdpbi1yaWdodDogMTVweDsKK30KKworLyogQGdyb3VwIExpbmsgU3R5bGluZyAqLworCithIHsKKwljb2xvcjogIzNENTc4QzsKKwlmb250LXdlaWdodDogbm9ybWFsOworCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKworLmNvbnRlbnRzIGE6dmlzaXRlZCB7CisJY29sb3I6ICM0NjY1QTI7Cit9CisKK2E6aG92ZXIgeworCXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCithLnFpbmRleCB7CisJZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2EucWluZGV4SEwgeworCWZvbnQtd2VpZ2h0OiBib2xkOworCWJhY2tncm91bmQtY29sb3I6ICM5Q0FGRDQ7CisJY29sb3I6ICNmZmZmZmY7CisJYm9yZGVyOiAxcHggZG91YmxlICM4NjlEQ0E7Cit9CisKKy5jb250ZW50cyBhLnFpbmRleEhMOnZpc2l0ZWQgeworICAgICAgICBjb2xvcjogI2ZmZmZmZjsKK30KKworYS5lbCB7CisJZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2EuZWxSZWYgeworfQorCithLmNvZGUsIGEuY29kZTp2aXNpdGVkLCBhLmxpbmUsIGEubGluZTp2aXNpdGVkIHsKKwljb2xvcjogIzQ2NjVBMjsgCit9CisKK2EuY29kZVJlZiwgYS5jb2RlUmVmOnZpc2l0ZWQsIGEubGluZVJlZiwgYS5saW5lUmVmOnZpc2l0ZWQgeworCWNvbG9yOiAjNDY2NUEyOyAKK30KKworLyogQGVuZCAqLworCitkbC5lbCB7CisJbWFyZ2luLWxlZnQ6IC0xY207Cit9CisKK3ByZS5mcmFnbWVudCB7CisgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNDNENGRTU7CisgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGQkZDRkQ7CisgICAgICAgIHBhZGRpbmc6IDRweCA2cHg7CisgICAgICAgIG1hcmdpbjogNHB4IDhweCA0cHggMnB4OworICAgICAgICBvdmVyZmxvdzogYXV0bzsKKyAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOworICAgICAgICBmb250LXNpemU6ICA5cHQ7CisgICAgICAgIGxpbmUtaGVpZ2h0OiAxMjUlOworICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBmaXhlZDsKKyAgICAgICAgZm9udC1zaXplOiAxMDUlOworfQorCitkaXYuZnJhZ21lbnQgeworICAgICAgICBwYWRkaW5nOiA0cHggNnB4OworICAgICAgICBtYXJnaW46IDRweCA4cHggNHB4IDJweDsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjRkJGQ0ZEOworCWJvcmRlcjogMXB4IHNvbGlkICNDNENGRTU7Cit9CisKK2Rpdi5saW5lIHsKKwlmb250LWZhbWlseTogbW9ub3NwYWNlLCBmaXhlZDsKKyAgICAgICAgZm9udC1zaXplOiAxM3B4OworCW1pbi1oZWlnaHQ6IDEzcHg7CisJbGluZS1oZWlnaHQ6IDEuMDsKKwl0ZXh0LXdyYXA6IHVucmVzdHJpY3RlZDsKKwl3aGl0ZS1zcGFjZTogLW1vei1wcmUtd3JhcDsgLyogTW96ICovCisJd2hpdGUtc3BhY2U6IC1wcmUtd3JhcDsgICAgIC8qIE9wZXJhIDQtNiAqLworCXdoaXRlLXNwYWNlOiAtby1wcmUtd3JhcDsgICAvKiBPcGVyYSA3ICovCisJd2hpdGUtc3BhY2U6IHByZS13cmFwOyAgICAgIC8qIENTUzMgICovCisJd29yZC13cmFwOiBicmVhay13b3JkOyAgICAgIC8qIElFIDUuNSsgKi8KKwl0ZXh0LWluZGVudDogLTUzcHg7CisJcGFkZGluZy1sZWZ0OiA1M3B4OworCXBhZGRpbmctYm90dG9tOiAwcHg7CisJbWFyZ2luOiAwcHg7CisJLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5OiBiYWNrZ3JvdW5kLWNvbG9yLCBib3gtc2hhZG93OworCS13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogMC41czsKKwktbW96LXRyYW5zaXRpb24tcHJvcGVydHk6IGJhY2tncm91bmQtY29sb3IsIGJveC1zaGFkb3c7CisJLW1vei10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjVzOworCS1tcy10cmFuc2l0aW9uLXByb3BlcnR5OiBiYWNrZ3JvdW5kLWNvbG9yLCBib3gtc2hhZG93OworCS1tcy10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjVzOworCS1vLXRyYW5zaXRpb24tcHJvcGVydHk6IGJhY2tncm91bmQtY29sb3IsIGJveC1zaGFkb3c7CisJLW8tdHJhbnNpdGlvbi1kdXJhdGlvbjogMC41czsKKwl0cmFuc2l0aW9uLXByb3BlcnR5OiBiYWNrZ3JvdW5kLWNvbG9yLCBib3gtc2hhZG93OworCXRyYW5zaXRpb24tZHVyYXRpb246IDAuNXM7Cit9CisKK2Rpdi5saW5lOmFmdGVyIHsKKyAgICBjb250ZW50OiJcMDAwQSI7CisgICAgd2hpdGUtc3BhY2U6IHByZTsKK30KKworZGl2LmxpbmUuZ2xvdyB7CisJYmFja2dyb3VuZC1jb2xvcjogY3lhbjsKKwlib3gtc2hhZG93OiAwIDAgMTBweCBjeWFuOworfQorCisKK3NwYW4ubGluZW5vIHsKKwlwYWRkaW5nLXJpZ2h0OiA0cHg7CisJdGV4dC1hbGlnbjogcmlnaHQ7CisJYm9yZGVyLXJpZ2h0OiAycHggc29saWQgIzBGMDsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjRThFOEU4OworICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOworfQorc3Bhbi5saW5lbm8gYSB7CisJYmFja2dyb3VuZC1jb2xvcjogI0Q4RDhEODsKK30KKworc3Bhbi5saW5lbm8gYTpob3ZlciB7CisJYmFja2dyb3VuZC1jb2xvcjogI0M4QzhDODsKK30KKworZGl2LmFoLCBzcGFuLmFoIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsKKwlmb250LXdlaWdodDogYm9sZDsKKwljb2xvcjogI2ZmZmZmZjsKKyAgICBtYXJnaW4tYm90dG9tOiAzcHg7CisgICAgCW1hcmdpbi10b3A6IDNweDsKKyAgICBwYWRkaW5nOiAwLjJlbTsKKwlib3JkZXI6IHNvbGlkIHRoaW4gIzMzMzsKKwlib3JkZXItcmFkaXVzOiAwLjVlbTsKKwktd2Via2l0LWJvcmRlci1yYWRpdXM6IC41ZW07CisJLW1vei1ib3JkZXItcmFkaXVzOiAuNWVtOworCWJveC1zaGFkb3c6IDJweCAycHggM3B4ICM5OTk7CisJLXdlYmtpdC1ib3gtc2hhZG93OiAycHggMnB4IDNweCAjOTk5OworCS1tb3otYm94LXNoYWRvdzogcmdiYSgwLCAwLCAwLCAwLjE1KSAycHggMnB4IDJweDsKKwliYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKCNlZWUpLCB0bygjMDAwKSxjb2xvci1zdG9wKDAuMywgIzQ0NCkpOworCWJhY2tncm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KGNlbnRlciB0b3AsICNlZWUgMCUsICM0NDQgNDAlLCAjMDAwIDExMCUpOworfQorCitkaXYuY2xhc3NpbmRleCB1bCB7CisgICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7CisgICAgICAgIHBhZGRpbmctbGVmdDogMDsKK30KKworZGl2LmNsYXNzaW5kZXggc3Bhbi5haSB7CisgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKK30KKworZGl2Lmdyb3VwSGVhZGVyIHsKKyAgICBtYXJnaW4tbGVmdDogMTZweDsKKwkgICBtYXJnaW4tdG9wOiAxMnB4OworICAgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitkaXYuZ3JvdXBUZXh0IHsKKwltYXJnaW4tbGVmdDogMTZweDsKKwlmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK2JvZHkgeworCWJhY2tncm91bmQtY29sb3I6IHdoaXRlOworCWNvbG9yOiBibGFjazsKK30KKworZGl2LmNvbnRlbnRzIHsKKwltYXJnaW4tdG9wOiAxMHB4OworCW1hcmdpbi1sZWZ0OiAxMnB4OworCW1hcmdpbi1yaWdodDogOHB4OworfQorCit0ZC5pbmRleGtleSB7CisJYmFja2dyb3VuZC1jb2xvcjogI0VCRUZGNjsKKwlmb250LXdlaWdodDogYm9sZDsKKwlib3JkZXI6IDFweCBzb2xpZCAjQzRDRkU1OworCW1hcmdpbjogMnB4IDBweCAycHggMDsKKwlwYWRkaW5nOiAycHggMTBweDsKKyAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKKyAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKwordGQuaW5kZXh2YWx1ZSB7CisJYmFja2dyb3VuZC1jb2xvcjogI0VCRUZGNjsKKwlib3JkZXI6IDFweCBzb2xpZCAjQzRDRkU1OworCXBhZGRpbmc6IDJweCAxMHB4OworCW1hcmdpbjogMnB4IDBweDsKK30KKwordHIubWVtbGlzdCB7CisJYmFja2dyb3VuZC1jb2xvcjogI0VFRjFGNzsKK30KKworcC5mb3JtdWxhRHNwIHsKKwl0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKK2ltZy5mb3JtdWxhRHNwIHsKKwkKK30KKworaW1nLmZvcm11bGFJbmwgeworCXZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cit9CisKK2Rpdi5jZW50ZXIgeworCXRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAgICAgbWFyZ2luLXRvcDogMHB4OworICAgICAgICBtYXJnaW4tYm90dG9tOiAwcHg7CisgICAgICAgIHBhZGRpbmc6IDBweDsKK30KKworZGl2LmNlbnRlciBpbWcgeworCWJvcmRlcjogMHB4OworfQorCithZGRyZXNzLmZvb3RlciB7CisJdGV4dC1hbGlnbjogcmlnaHQ7CisJcGFkZGluZy1yaWdodDogMTJweDsKK30KKworaW1nLmZvb3RlciB7CisJYm9yZGVyOiAwcHg7CisJdmVydGljYWwtYWxpZ246IG1pZGRsZTsKK30KKworLyogQGdyb3VwIENvZGUgQ29sb3JpemF0aW9uICovCisKK3NwYW4ua2V5d29yZCB7CisJY29sb3I6ICMwMDgwMDAKK30KKworc3Bhbi5rZXl3b3JkdHlwZSB7CisJY29sb3I6ICM2MDQwMjAKK30KKworc3Bhbi5rZXl3b3JkZmxvdyB7CisJY29sb3I6ICNlMDgwMDAKK30KKworc3Bhbi5jb21tZW50IHsKKwljb2xvcjogIzgwMDAwMAorfQorCitzcGFuLnByZXByb2Nlc3NvciB7CisJY29sb3I6ICM4MDYwMjAKK30KKworc3Bhbi5zdHJpbmdsaXRlcmFsIHsKKwljb2xvcjogIzAwMjA4MAorfQorCitzcGFuLmNoYXJsaXRlcmFsIHsKKwljb2xvcjogIzAwODA4MAorfQorCitzcGFuLnZoZGxkaWdpdCB7IAorCWNvbG9yOiAjZmYwMGZmIAorfQorCitzcGFuLnZoZGxjaGFyIHsgCisJY29sb3I6ICMwMDAwMDAgCit9CisKK3NwYW4udmhkbGtleXdvcmQgeyAKKwljb2xvcjogIzcwMDA3MCAKK30KKworc3Bhbi52aGRsbG9naWMgeyAKKwljb2xvcjogI2ZmMDAwMCAKK30KKworYmxvY2txdW90ZSB7CisgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGN0Y4RkI7CisgICAgICAgIGJvcmRlci1sZWZ0OiAycHggc29saWQgIzlDQUZENDsKKyAgICAgICAgbWFyZ2luOiAwIDI0cHggMCA0cHg7CisgICAgICAgIHBhZGRpbmc6IDAgMTJweCAwIDE2cHg7Cit9CisKKy8qIEBlbmQgKi8KKworCisuc2VhcmNoIHsKKwljb2xvcjogIzAwMzM5OTsKKwlmb250LXdlaWdodDogYm9sZDsKK30KKworZm9ybS5zZWFyY2ggeworCW1hcmdpbi1ib3R0b206IDBweDsKKwltYXJnaW4tdG9wOiAwcHg7Cit9CisKK2lucHV0LnNlYXJjaCB7CisJZm9udC1zaXplOiA3NSU7CisJY29sb3I6ICMwMDAwODA7CisJZm9udC13ZWlnaHQ6IG5vcm1hbDsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZThlZWYyOworfQorCisKK3RkLnRpbnkgeworCWZvbnQtc2l6ZTogNzUlOworfQorCisuZGlydGFiIHsKKwlwYWRkaW5nOiA0cHg7CisJYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKKwlib3JkZXI6IDFweCBzb2xpZCAjQTNCNEQ3OworfQorCit0aC5kaXJ0YWIgeworCWJhY2tncm91bmQ6ICNFQkVGRjY7CisJZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2hyIHsKKwloZWlnaHQ6IDBweDsKKwlib3JkZXI6IG5vbmU7CisJYm9yZGVyLXRvcDogMXB4IHNvbGlkICM0QTZBQUE7Cit9CisKK2hyLmZvb3RlciB7CisJaGVpZ2h0OiAxcHg7Cit9CisKKy8qIEBncm91cCBNZW1iZXIgRGVzY3JpcHRpb25zICovCisKK3RhYmxlLm1lbWJlcmRlY2xzIHsKKwlib3JkZXItc3BhY2luZzogMHB4OworCXBhZGRpbmc6IDBweDsKK30KKworLm1lbWJlcmRlY2xzIHRkLCAuZmllbGR0YWJsZSB0ciB7CisJLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5OiBiYWNrZ3JvdW5kLWNvbG9yLCBib3gtc2hhZG93OworCS13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogMC41czsKKwktbW96LXRyYW5zaXRpb24tcHJvcGVydHk6IGJhY2tncm91bmQtY29sb3IsIGJveC1zaGFkb3c7CisJLW1vei10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjVzOworCS1tcy10cmFuc2l0aW9uLXByb3BlcnR5OiBiYWNrZ3JvdW5kLWNvbG9yLCBib3gtc2hhZG93OworCS1tcy10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjVzOworCS1vLXRyYW5zaXRpb24tcHJvcGVydHk6IGJhY2tncm91bmQtY29sb3IsIGJveC1zaGFkb3c7CisJLW8tdHJhbnNpdGlvbi1kdXJhdGlvbjogMC41czsKKwl0cmFuc2l0aW9uLXByb3BlcnR5OiBiYWNrZ3JvdW5kLWNvbG9yLCBib3gtc2hhZG93OworCXRyYW5zaXRpb24tZHVyYXRpb246IDAuNXM7Cit9CisKKy5tZW1iZXJkZWNscyB0ZC5nbG93LCAuZmllbGR0YWJsZSB0ci5nbG93IHsKKwliYWNrZ3JvdW5kLWNvbG9yOiBjeWFuOworCWJveC1zaGFkb3c6IDAgMCAxNXB4IGN5YW47Cit9CisKKy5tZGVzY0xlZnQsIC5tZGVzY1JpZ2h0LAorLm1lbUl0ZW1MZWZ0LCAubWVtSXRlbVJpZ2h0LAorLm1lbVRlbXBsSXRlbUxlZnQsIC5tZW1UZW1wbEl0ZW1SaWdodCwgLm1lbVRlbXBsUGFyYW1zIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjRjlGQUZDOworCWJvcmRlcjogbm9uZTsKKwltYXJnaW46IDRweDsKKwlwYWRkaW5nOiAxcHggMCAwIDhweDsKK30KKworLm1kZXNjTGVmdCwgLm1kZXNjUmlnaHQgeworCXBhZGRpbmc6IDBweCA4cHggNHB4IDhweDsKKwljb2xvcjogIzU1NTsKK30KKworLm1lbVNlcGFyYXRvciB7CisgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjREVFNEYwOworICAgICAgICBsaW5lLWhlaWdodDogMXB4OworICAgICAgICBtYXJnaW46IDBweDsKKyAgICAgICAgcGFkZGluZzogMHB4OworfQorCisubWVtSXRlbUxlZnQsIC5tZW1UZW1wbEl0ZW1MZWZ0IHsKKyAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKK30KKworLm1lbUl0ZW1SaWdodCB7CisJd2lkdGg6IDEwMCU7Cit9CisKKy5tZW1UZW1wbFBhcmFtcyB7CisJY29sb3I6ICM0NjY1QTI7CisgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisJZm9udC1zaXplOiA4MCU7Cit9CisKKy8qIEBlbmQgKi8KKworLyogQGdyb3VwIE1lbWJlciBEZXRhaWxzICovCisKKy8qIFN0eWxlcyBmb3IgZGV0YWlsZWQgbWVtYmVyIGRvY3VtZW50YXRpb24gKi8KKworLm1lbXRlbXBsYXRlIHsKKwlmb250LXNpemU6IDgwJTsKKwljb2xvcjogIzQ2NjVBMjsKKwlmb250LXdlaWdodDogbm9ybWFsOworCW1hcmdpbi1sZWZ0OiA5cHg7Cit9CisKKy5tZW1uYXYgeworCWJhY2tncm91bmQtY29sb3I6ICNFQkVGRjY7CisJYm9yZGVyOiAxcHggc29saWQgI0EzQjRENzsKKwl0ZXh0LWFsaWduOiBjZW50ZXI7CisJbWFyZ2luOiAycHg7CisgICAgCW1hcmdpbi1yaWdodDogMTVweDsKKwlwYWRkaW5nOiAycHg7Cit9CisKKy5tZW1wYWdlIHsKKwl3aWR0aDogMTAwJTsKK30KKworLm1lbWl0ZW0geworCXBhZGRpbmc6IDA7CisJbWFyZ2luLWJvdHRvbTogMTBweDsKKyAgICAJbWFyZ2luLXJpZ2h0OiA1cHg7CisgICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjVzIGxpbmVhcjsKKyAgICAgICAgLW1vei10cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuNXMgbGluZWFyOworICAgICAgICAtbXMtdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjVzIGxpbmVhcjsKKyAgICAgICAgLW8tdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjVzIGxpbmVhcjsKKyAgICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjVzIGxpbmVhcjsKKyAgICAgICAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudDsKKyAgICAgICAgd2lkdGg6IDEwMCU7Cit9CisKKy5tZW1pdGVtLmdsb3cgeworICAgICAgICAgYm94LXNoYWRvdzogMCAwIDE1cHggY3lhbjsKK30KKworLm1lbW5hbWUgeworICAgICAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgbWFyZ2luLWxlZnQ6IDZweDsKK30KKworLm1lbW5hbWUgdGQgeworCXZlcnRpY2FsLWFsaWduOiBib3R0b207Cit9CisKKy5tZW1wcm90bywgZGwucmVmbGlzdCBkdCB7CisgICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjQThCOEQ5OworICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNBOEI4RDk7CisgICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNBOEI4RDk7CisgICAgICAgIHBhZGRpbmc6IDZweCAwcHggNnB4IDBweDsKKyAgICAgICAgY29sb3I6ICMyNTM1NTU7CisgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICB0ZXh0LXNoYWRvdzogMHB4IDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOworICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCgnbmF2X2YucG5nJyk7CisgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14OworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTJFOEYyOworICAgICAgICAvKiBvcGVyYSBzcGVjaWZpYyBtYXJrdXAgKi8KKyAgICAgICAgYm94LXNoYWRvdzogNXB4IDVweCA1cHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKKyAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDsKKyAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNHB4OworICAgICAgICAvKiBmaXJlZm94IHNwZWNpZmljIG1hcmt1cCAqLworICAgICAgICAtbW96LWJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4xNSkgNXB4IDVweCA1cHg7CisgICAgICAgIC1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDogNHB4OworICAgICAgICAtbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDogNHB4OworICAgICAgICAvKiB3ZWJraXQgc3BlY2lmaWMgbWFya3VwICovCisgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogNXB4IDVweCA1cHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKKyAgICAgICAgLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4OworICAgICAgICAtd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDRweDsKKworfQorCisubWVtZG9jLCBkbC5yZWZsaXN0IGRkIHsKKyAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNBOEI4RDk7ICAgICAgCisgICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0E4QjhEOTsgICAgICAKKyAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI0E4QjhEOTsgCisgICAgICAgIHBhZGRpbmc6IDZweCAxMHB4IDJweCAxMHB4OworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkJGQ0ZEOworICAgICAgICBib3JkZXItdG9wLXdpZHRoOiAwOworICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCgnbmF2X2cucG5nJyk7CisgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14OworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGOworICAgICAgICAvKiBvcGVyYSBzcGVjaWZpYyBtYXJrdXAgKi8KKyAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNHB4OworICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4OworICAgICAgICBib3gtc2hhZG93OiA1cHggNXB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTUpOworICAgICAgICAvKiBmaXJlZm94IHNwZWNpZmljIG1hcmt1cCAqLworICAgICAgICAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDogNHB4OworICAgICAgICAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6IDRweDsKKyAgICAgICAgLW1vei1ib3gtc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMTUpIDVweCA1cHggNXB4OworICAgICAgICAvKiB3ZWJraXQgc3BlY2lmaWMgbWFya3VwICovCisgICAgICAgIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNHB4OworICAgICAgICAtd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA0cHg7CisgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogNXB4IDVweCA1cHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKK30KKworZGwucmVmbGlzdCBkdCB7CisgICAgICAgIHBhZGRpbmc6IDVweDsKK30KKworZGwucmVmbGlzdCBkZCB7CisgICAgICAgIG1hcmdpbjogMHB4IDBweCAxMHB4IDBweDsKKyAgICAgICAgcGFkZGluZzogNXB4OworfQorCisucGFyYW1rZXkgeworCXRleHQtYWxpZ246IHJpZ2h0OworfQorCisucGFyYW10eXBlIHsKKwl3aGl0ZS1zcGFjZTogbm93cmFwOworfQorCisucGFyYW1uYW1lIHsKKwljb2xvcjogIzYwMjAyMDsKKwl3aGl0ZS1zcGFjZTogbm93cmFwOworfQorLnBhcmFtbmFtZSBlbSB7CisJZm9udC1zdHlsZTogbm9ybWFsOworfQorLnBhcmFtbmFtZSBjb2RlIHsKKyAgICAgICAgbGluZS1oZWlnaHQ6IDE0cHg7Cit9CisKKy5wYXJhbXMsIC5yZXR2YWwsIC5leGNlcHRpb24sIC50cGFyYW1zIHsKKyAgICAgICAgbWFyZ2luLWxlZnQ6IDBweDsKKyAgICAgICAgcGFkZGluZy1sZWZ0OiAwcHg7Cit9ICAgICAgIAorCisucGFyYW1zIC5wYXJhbW5hbWUsIC5yZXR2YWwgLnBhcmFtbmFtZSB7CisgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorICAgICAgICAKKy5wYXJhbXMgLnBhcmFtdHlwZSB7CisgICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKKyAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKK30gICAgICAgCisgICAgICAgIAorLnBhcmFtcyAucGFyYW1kaXIgeworICAgICAgICBmb250LWZhbWlseTogImNvdXJpZXIgbmV3Iixjb3VyaWVyLG1vbm9zcGFjZTsKKyAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKwordGFibGUubWxhYmVscyB7CisJYm9yZGVyLXNwYWNpbmc6IDBweDsKK30KKwordGQubWxhYmVscy1sZWZ0IHsKKwl3aWR0aDogMTAwJTsKKwlwYWRkaW5nOiAwcHg7Cit9CisKK3RkLm1sYWJlbHMtcmlnaHQgeworCXZlcnRpY2FsLWFsaWduOiBib3R0b207CisJcGFkZGluZzogMHB4OworCXdoaXRlLXNwYWNlOiBub3dyYXA7Cit9CisKK3NwYW4ubWxhYmVscyB7CisgICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7Cit9CisKK3NwYW4ubWxhYmVsIHsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzcyOERDMTsKKyAgICAgICAgYm9yZGVyLXRvcDoxcHggc29saWQgIzUzNzNCNDsKKyAgICAgICAgYm9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1MzczQjQ7CisgICAgICAgIGJvcmRlci1yaWdodDoxcHggc29saWQgI0M0Q0ZFNTsKKyAgICAgICAgYm9yZGVyLWJvdHRvbToxcHggc29saWQgI0M0Q0ZFNTsKKwl0ZXh0LXNoYWRvdzogbm9uZTsKKwljb2xvcjogd2hpdGU7CisJbWFyZ2luLXJpZ2h0OiA0cHg7CisJcGFkZGluZzogMnB4IDNweDsKKwlib3JkZXItcmFkaXVzOiAzcHg7CisJZm9udC1zaXplOiA3cHQ7CisJd2hpdGUtc3BhY2U6IG5vd3JhcDsKKwl2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworfQorCisKKworLyogQGVuZCAqLworCisvKiB0aGVzZSBhcmUgZm9yIHRyZWUgdmlldyBpbnNpZGUgYSAoaW5kZXgpIHBhZ2UgKi8KKworZGl2LmRpcmVjdG9yeSB7CisgICAgICAgIG1hcmdpbjogMTBweCAwcHg7CisgICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjOUNBRkQ0OworICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzlDQUZENDsKKyAgICAgICAgd2lkdGg6IDEwMCU7Cit9CisKKy5kaXJlY3RvcnkgdGFibGUgeworICAgICAgICBib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Cit9CisKKy5kaXJlY3RvcnkgdGQgeworICAgICAgICBtYXJnaW46IDBweDsKKyAgICAgICAgcGFkZGluZzogMHB4OworCXZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKKy5kaXJlY3RvcnkgdGQuZW50cnkgeworICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOworICAgICAgICBwYWRkaW5nLXJpZ2h0OiA2cHg7CisJcGFkZGluZy10b3A6IDNweDsKK30KKworLmRpcmVjdG9yeSB0ZC5lbnRyeSBhIHsKKyAgICAgICAgb3V0bGluZTpub25lOworfQorCisuZGlyZWN0b3J5IHRkLmVudHJ5IGEgaW1nIHsKKyAgICAgICAgYm9yZGVyOiBub25lOworfQorCisuZGlyZWN0b3J5IHRkLmRlc2MgeworICAgICAgICB3aWR0aDogMTAwJTsKKyAgICAgICAgcGFkZGluZy1sZWZ0OiA2cHg7CisJcGFkZGluZy1yaWdodDogNnB4OworCXBhZGRpbmctdG9wOiAzcHg7CisJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMDUpOworfQorCisuZGlyZWN0b3J5IHRyLmV2ZW4geworCXBhZGRpbmctbGVmdDogNnB4OworCWJhY2tncm91bmQtY29sb3I6ICNGN0Y4RkI7Cit9CisKKy5kaXJlY3RvcnkgaW1nIHsKKwl2ZXJ0aWNhbC1hbGlnbjogLTMwJTsKK30KKworLmRpcmVjdG9yeSAubGV2ZWxzIHsKKyAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKKyAgICAgICAgd2lkdGg6IDEwMCU7CisgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICBmb250LXNpemU6IDlwdDsKK30KKworLmRpcmVjdG9yeSAubGV2ZWxzIHNwYW4geworICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CisgICAgICAgIHBhZGRpbmctbGVmdDogMnB4OworICAgICAgICBwYWRkaW5nLXJpZ2h0OiAycHg7CisJY29sb3I6ICMzRDU3OEM7Cit9CisKKy5hcnJvdyB7CisgICAgY29sb3I6ICM5Q0FGRDQ7CisgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKKyAgICAta2h0bWwtdXNlci1zZWxlY3Q6IG5vbmU7CisgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKKyAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CisgICAgdXNlci1zZWxlY3Q6IG5vbmU7CisgICAgY3Vyc29yOiBwb2ludGVyOworICAgIGZvbnQtc2l6ZTogODAlOworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgICB3aWR0aDogMTZweDsKKyAgICBoZWlnaHQ6IDIycHg7Cit9CisKKy5pY29uIHsKKyAgICBmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYTsKKyAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICBmb250LXNpemU6IDEycHg7CisgICAgaGVpZ2h0OiAxNHB4OworICAgIHdpZHRoOiAxNnB4OworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzI4REMxOworICAgIGNvbG9yOiB3aGl0ZTsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgYm9yZGVyLXJhZGl1czogNHB4OworICAgIG1hcmdpbi1sZWZ0OiAycHg7CisgICAgICAgIG1hcmdpbi1yaWdodDogMnB4OworfQorCisuaWNvbmEgeworICAgIHdpZHRoOiAyNHB4OworICAgIGhlaWdodDogMjJweDsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cit9CisKKy5pY29uZm9wZW4geworICAgIHdpZHRoOiAyNHB4OworICAgIGhlaWdodDogMThweDsKKyAgICBtYXJnaW4tYm90dG9tOiA0cHg7CisgICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoJ2ZvbGRlcm9wZW4ucG5nJyk7CisgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMHB4IC00cHg7CisgICAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC15OworICAgIHZlcnRpY2FsLWFsaWduOnRvcDsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cit9CisKKy5pY29uZmNsb3NlZCB7CisgICAgd2lkdGg6IDI0cHg7CisgICAgaGVpZ2h0OiAxOHB4OworICAgIG1hcmdpbi1ib3R0b206IDRweDsKKyAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCgnZm9sZGVyY2xvc2VkLnBuZycpOworICAgIGJhY2tncm91bmQtcG9zaXRpb246IDBweCAtNHB4OworICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteTsKKyAgICB2ZXJ0aWNhbC1hbGlnbjp0b3A7CisgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworfQorCisuaWNvbmRvYyB7CisgICAgd2lkdGg6IDI0cHg7CisgICAgaGVpZ2h0OiAxOHB4OworICAgIG1hcmdpbi1ib3R0b206IDRweDsKKyAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCgnZG9jLnBuZycpOworICAgIGJhY2tncm91bmQtcG9zaXRpb246IDBweCAtNHB4OworICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteTsKKyAgICB2ZXJ0aWNhbC1hbGlnbjp0b3A7CisgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworfQorCit0YWJsZS5kaXJlY3RvcnkgeworICAgIGZvbnQ6IDQwMCAxNHB4IFJvYm90byxzYW5zLXNlcmlmOworfQorCisvKiBAZW5kICovCisKK2Rpdi5keW5oZWFkZXIgeworICAgICAgICBtYXJnaW4tdG9wOiA4cHg7CisJLXdlYmtpdC10b3VjaC1jYWxsb3V0OiBub25lOworCS13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CisJLWtodG1sLXVzZXItc2VsZWN0OiBub25lOworCS1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CisJLW1zLXVzZXItc2VsZWN0OiBub25lOworCXVzZXItc2VsZWN0OiBub25lOworfQorCithZGRyZXNzIHsKKwlmb250LXN0eWxlOiBub3JtYWw7CisJY29sb3I6ICMyQTNENjE7Cit9CisKK3RhYmxlLmRveHRhYmxlIGNhcHRpb24geworCWNhcHRpb24tc2lkZTogdG9wOworfQorCit0YWJsZS5kb3h0YWJsZSB7CisJYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlOworICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CisgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDsKK30KKwordGFibGUuZG94dGFibGUgdGQsIHRhYmxlLmRveHRhYmxlIHRoIHsKKwlib3JkZXI6IDFweCBzb2xpZCAjMkQ0MDY4OworCXBhZGRpbmc6IDNweCA3cHggMnB4OworfQorCit0YWJsZS5kb3h0YWJsZSB0aCB7CisJYmFja2dyb3VuZC1jb2xvcjogIzM3NEY3RjsKKwljb2xvcjogI0ZGRkZGRjsKKwlmb250LXNpemU6IDExMCU7CisJcGFkZGluZy1ib3R0b206IDRweDsKKwlwYWRkaW5nLXRvcDogNXB4OworfQorCit0YWJsZS5maWVsZHRhYmxlIHsKKyAgICAgICAgd2lkdGg6IDEwMCU7CisgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CisgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNBOEI4RDk7CisgICAgICAgIGJvcmRlci1zcGFjaW5nOiAwcHg7CisgICAgICAgIC1tb3otYm9yZGVyLXJhZGl1czogNHB4OworICAgICAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweDsKKyAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OworICAgICAgICAtbW96LWJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4xNSkgMnB4IDJweCAycHg7CisgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogMnB4IDJweCAycHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKKyAgICAgICAgYm94LXNoYWRvdzogMnB4IDJweCAycHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKK30KKworLmZpZWxkdGFibGUgdGQsIC5maWVsZHRhYmxlIHRoIHsKKyAgICAgICAgcGFkZGluZzogM3B4IDdweCAycHg7Cit9CisKKy5maWVsZHRhYmxlIHRkLmZpZWxkdHlwZSwgLmZpZWxkdGFibGUgdGQuZmllbGRuYW1lIHsKKyAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKKyAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI0E4QjhEOTsKKyAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNBOEI4RDk7CisgICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKKy5maWVsZHRhYmxlIHRkLmZpZWxkbmFtZSB7CisgICAgICAgIHBhZGRpbmctdG9wOiAzcHg7Cit9CisKKy5maWVsZHRhYmxlIHRkLmZpZWxkZG9jIHsKKyAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNBOEI4RDk7CisgICAgICAgIHdpZHRoOiAxMDAlOworfQorCisuZmllbGR0YWJsZSB0ZC5maWVsZGRvYyBwOmZpcnN0LWNoaWxkIHsKKyAgICAgICAgbWFyZ2luLXRvcDogMHB4OworfSAgICAgICAKKyAgICAgICAgCisuZmllbGR0YWJsZSB0ZC5maWVsZGRvYyBwOmxhc3QtY2hpbGQgeworICAgICAgICBtYXJnaW4tYm90dG9tOiAycHg7Cit9CisKKy5maWVsZHRhYmxlIHRyOmxhc3QtY2hpbGQgdGQgeworICAgICAgICBib3JkZXItYm90dG9tOiBub25lOworfQorCisuZmllbGR0YWJsZSB0aCB7CisgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKCduYXZfZi5wbmcnKTsKKyAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7CisgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNFMkU4RjI7CisgICAgICAgIGZvbnQtc2l6ZTogOTAlOworICAgICAgICBjb2xvcjogIzI1MzU1NTsKKyAgICAgICAgcGFkZGluZy1ib3R0b206IDRweDsKKyAgICAgICAgcGFkZGluZy10b3A6IDVweDsKKyAgICAgICAgdGV4dC1hbGlnbjpsZWZ0OworICAgICAgICAtbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDogNHB4OworICAgICAgICAtbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6IDRweDsKKyAgICAgICAgLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHg7CisgICAgICAgIC13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDsKKyAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNHB4OworICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4OworICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0E4QjhEOTsKK30KKworCisudGFic2VhcmNoIHsKKwl0b3A6IDBweDsKKwlsZWZ0OiAxMHB4OworCWhlaWdodDogMzZweDsKKwliYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ3RhYl9iLnBuZycpOworCXotaW5kZXg6IDEwMTsKKwlvdmVyZmxvdzogaGlkZGVuOworCWZvbnQtc2l6ZTogMTNweDsKK30KKworLm5hdnBhdGggdWwKK3sKKwlmb250LXNpemU6IDExcHg7CisJYmFja2dyb3VuZC1pbWFnZTp1cmwoJ3RhYl9iLnBuZycpOworCWJhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14OworCWJhY2tncm91bmQtcG9zaXRpb246IDAgLTVweDsKKwloZWlnaHQ6MzBweDsKKwlsaW5lLWhlaWdodDozMHB4OworCWNvbG9yOiM4QUEwQ0M7CisJYm9yZGVyOnNvbGlkIDFweCAjQzJDREU0OworCW92ZXJmbG93OmhpZGRlbjsKKwltYXJnaW46MHB4OworCXBhZGRpbmc6MHB4OworfQorCisubmF2cGF0aCBsaQoreworCWxpc3Qtc3R5bGUtdHlwZTpub25lOworCWZsb2F0OmxlZnQ7CisJcGFkZGluZy1sZWZ0OjEwcHg7CisJcGFkZGluZy1yaWdodDoxNXB4OworCWJhY2tncm91bmQtaW1hZ2U6dXJsKCdiY19zLnBuZycpOworCWJhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDsKKwliYWNrZ3JvdW5kLXBvc2l0aW9uOnJpZ2h0OworCWNvbG9yOiMzNjREN0M7Cit9CisKKy5uYXZwYXRoIGxpLm5hdmVsZW0gYQoreworCWhlaWdodDozMnB4OworCWRpc3BsYXk6YmxvY2s7CisJdGV4dC1kZWNvcmF0aW9uOiBub25lOworCW91dGxpbmU6IG5vbmU7CisJY29sb3I6ICMyODNBNUQ7CisJZm9udC1mYW1pbHk6ICdMdWNpZGEgR3JhbmRlJyxHZW5ldmEsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7CisJdGV4dC1zaGFkb3c6IDBweCAxcHggMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKKwl0ZXh0LWRlY29yYXRpb246IG5vbmU7ICAgICAgICAKK30KKworLm5hdnBhdGggbGkubmF2ZWxlbSBhOmhvdmVyCit7CisJY29sb3I6IzY4ODRCRDsKK30KKworLm5hdnBhdGggbGkuZm9vdGVyCit7CisgICAgICAgIGxpc3Qtc3R5bGUtdHlwZTpub25lOworICAgICAgICBmbG9hdDpyaWdodDsKKyAgICAgICAgcGFkZGluZy1sZWZ0OjEwcHg7CisgICAgICAgIHBhZGRpbmctcmlnaHQ6MTVweDsKKyAgICAgICAgYmFja2dyb3VuZC1pbWFnZTpub25lOworICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7CisgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246cmlnaHQ7CisgICAgICAgIGNvbG9yOiMzNjREN0M7CisgICAgICAgIGZvbnQtc2l6ZTogOHB0OworfQorCisKK2Rpdi5zdW1tYXJ5Cit7CisJZmxvYXQ6IHJpZ2h0OworCWZvbnQtc2l6ZTogOHB0OworCXBhZGRpbmctcmlnaHQ6IDVweDsKKwl3aWR0aDogNTAlOworCXRleHQtYWxpZ246IHJpZ2h0OworfSAgICAgICAKKworZGl2LnN1bW1hcnkgYQoreworCXdoaXRlLXNwYWNlOiBub3dyYXA7Cit9CisKK3RhYmxlLmNsYXNzaW5kZXgKK3sKKyAgICAgICAgbWFyZ2luOiAxMHB4OworICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOworICAgICAgICBtYXJnaW4tbGVmdDogMyU7CisgICAgICAgIG1hcmdpbi1yaWdodDogMyU7CisgICAgICAgIHdpZHRoOiA5NCU7CisgICAgICAgIGJvcmRlcjogMDsKKyAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7IAorICAgICAgICBwYWRkaW5nOiAwOworfQorCitkaXYuaW5ncm91cHMKK3sKKwlmb250LXNpemU6IDhwdDsKKwl3aWR0aDogNTAlOworCXRleHQtYWxpZ246IGxlZnQ7Cit9CisKK2Rpdi5pbmdyb3VwcyBhCit7CisJd2hpdGUtc3BhY2U6IG5vd3JhcDsKK30KKworZGl2LmhlYWRlcgoreworICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCgnbmF2X2gucG5nJyk7CisgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14OworCWJhY2tncm91bmQtY29sb3I6ICNGOUZBRkM7CisJbWFyZ2luOiAgMHB4OworCWJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQzRDRkU1OworfQorCitkaXYuaGVhZGVydGl0bGUKK3sKKwlwYWRkaW5nOiA1cHggNXB4IDVweCAxMHB4OworfQorCitkbAoreworICAgICAgICBwYWRkaW5nOiAwIDAgMCAxMHB4OworfQorCisvKiBkbC5ub3RlLCBkbC53YXJuaW5nLCBkbC5hdHRlbnRpb24sIGRsLnByZSwgZGwucG9zdCwgZGwuaW52YXJpYW50LCBkbC5kZXByZWNhdGVkLCBkbC50b2RvLCBkbC50ZXN0LCBkbC5idWcgKi8KK2RsLnNlY3Rpb24KK3sKKwltYXJnaW4tbGVmdDogMHB4OworCXBhZGRpbmctbGVmdDogMHB4OworfQorCitkbC5ub3RlCit7CisgICAgICAgIG1hcmdpbi1sZWZ0Oi03cHg7CisgICAgICAgIHBhZGRpbmctbGVmdDogM3B4OworICAgICAgICBib3JkZXItbGVmdDo0cHggc29saWQ7CisgICAgICAgIGJvcmRlci1jb2xvcjogI0QwQzAwMDsKK30KKworZGwud2FybmluZywgZGwuYXR0ZW50aW9uCit7CisgICAgICAgIG1hcmdpbi1sZWZ0Oi03cHg7CisgICAgICAgIHBhZGRpbmctbGVmdDogM3B4OworICAgICAgICBib3JkZXItbGVmdDo0cHggc29saWQ7CisgICAgICAgIGJvcmRlci1jb2xvcjogI0ZGMDAwMDsKK30KKworZGwucHJlLCBkbC5wb3N0LCBkbC5pbnZhcmlhbnQKK3sKKyAgICAgICAgbWFyZ2luLWxlZnQ6LTdweDsKKyAgICAgICAgcGFkZGluZy1sZWZ0OiAzcHg7CisgICAgICAgIGJvcmRlci1sZWZ0OjRweCBzb2xpZDsKKyAgICAgICAgYm9yZGVyLWNvbG9yOiAjMDBEMDAwOworfQorCitkbC5kZXByZWNhdGVkCit7CisgICAgICAgIG1hcmdpbi1sZWZ0Oi03cHg7CisgICAgICAgIHBhZGRpbmctbGVmdDogM3B4OworICAgICAgICBib3JkZXItbGVmdDo0cHggc29saWQ7CisgICAgICAgIGJvcmRlci1jb2xvcjogIzUwNTA1MDsKK30KKworZGwudG9kbworeworICAgICAgICBtYXJnaW4tbGVmdDotN3B4OworICAgICAgICBwYWRkaW5nLWxlZnQ6IDNweDsKKyAgICAgICAgYm9yZGVyLWxlZnQ6NHB4IHNvbGlkOworICAgICAgICBib3JkZXItY29sb3I6ICMwMEMwRTA7Cit9CisKK2RsLnRlc3QKK3sKKyAgICAgICAgbWFyZ2luLWxlZnQ6LTdweDsKKyAgICAgICAgcGFkZGluZy1sZWZ0OiAzcHg7CisgICAgICAgIGJvcmRlci1sZWZ0OjRweCBzb2xpZDsKKyAgICAgICAgYm9yZGVyLWNvbG9yOiAjMzAzMEUwOworfQorCitkbC5idWcKK3sKKyAgICAgICAgbWFyZ2luLWxlZnQ6LTdweDsKKyAgICAgICAgcGFkZGluZy1sZWZ0OiAzcHg7CisgICAgICAgIGJvcmRlci1sZWZ0OjRweCBzb2xpZDsKKyAgICAgICAgYm9yZGVyLWNvbG9yOiAjQzA4MDUwOworfQorCitkbC5zZWN0aW9uIGRkIHsKKwltYXJnaW4tYm90dG9tOiA2cHg7Cit9CisKKworI3Byb2plY3Rsb2dvCit7CisJdGV4dC1hbGlnbjogY2VudGVyOworCXZlcnRpY2FsLWFsaWduOiBib3R0b207CisJYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKK30KKyAKKyNwcm9qZWN0bG9nbyBpbWcKK3sgCisJYm9yZGVyOiAwcHggbm9uZTsKK30KKyAKKyNwcm9qZWN0YWxpZ24KK3sKKyAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKK30KKworI3Byb2plY3RuYW1lCit7CisJZm9udDogMzAwJSBUYWhvbWEsIEFyaWFsLHNhbnMtc2VyaWY7CisJbWFyZ2luOiAwcHg7CisJcGFkZGluZzogMnB4IDBweDsKK30KKyAgICAKKyNwcm9qZWN0YnJpZWYKK3sKKwlmb250OiAxMjAlIFRhaG9tYSwgQXJpYWwsc2Fucy1zZXJpZjsKKwltYXJnaW46IDBweDsKKwlwYWRkaW5nOiAwcHg7Cit9CisKKyNwcm9qZWN0bnVtYmVyCit7CisJZm9udDogNTAlIFRhaG9tYSwgQXJpYWwsc2Fucy1zZXJpZjsKKwltYXJnaW46IDBweDsKKwlwYWRkaW5nOiAwcHg7Cit9CisKKyN0aXRsZWFyZWEKK3sKKwlwYWRkaW5nOiAwcHg7CisJbWFyZ2luOiAwcHg7CisJd2lkdGg6IDEwMCU7CisJYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM1MzczQjQ7Cit9CisKKy5pbWFnZQoreworICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKKy5kb3RncmFwaAoreworICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKKy5tc2NncmFwaAoreworICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKKy5kaWFncmFwaAoreworICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKKy5jYXB0aW9uCit7CisJZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2Rpdi56b29tCit7CisJYm9yZGVyOiAxcHggc29saWQgIzkwQTVDRTsKK30KKworZGwuY2l0ZWxpc3QgeworICAgICAgICBtYXJnaW4tYm90dG9tOjUwcHg7Cit9CisKK2RsLmNpdGVsaXN0IGR0IHsKKyAgICAgICAgY29sb3I6IzMzNDk3NTsKKyAgICAgICAgZmxvYXQ6bGVmdDsKKyAgICAgICAgZm9udC13ZWlnaHQ6Ym9sZDsKKyAgICAgICAgbWFyZ2luLXJpZ2h0OjEwcHg7CisgICAgICAgIHBhZGRpbmc6NXB4OworfQorCitkbC5jaXRlbGlzdCBkZCB7CisgICAgICAgIG1hcmdpbjoycHggMDsKKyAgICAgICAgcGFkZGluZzo1cHggMDsKK30KKworZGl2LnRvYyB7CisgICAgICAgIHBhZGRpbmc6IDE0cHggMjVweDsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Y0RjZGQTsKKyAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0Q4REZFRTsKKyAgICAgICAgYm9yZGVyLXJhZGl1czogN3B4IDdweCA3cHggN3B4OworICAgICAgICBmbG9hdDogcmlnaHQ7CisgICAgICAgIGhlaWdodDogYXV0bzsKKyAgICAgICAgbWFyZ2luOiAwIDhweCAxMHB4IDEwcHg7CisgICAgICAgIHdpZHRoOiAyMDBweDsKK30KKworZGl2LnRvYyBsaSB7CisgICAgICAgIGJhY2tncm91bmQ6IHVybCgiYmR3bi5wbmciKSBuby1yZXBlYXQgc2Nyb2xsIDAgNXB4IHRyYW5zcGFyZW50OworICAgICAgICBmb250OiAxMHB4LzEuMiBWZXJkYW5hLERlamFWdSBTYW5zLEdlbmV2YSxzYW5zLXNlcmlmOworICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CisgICAgICAgIHBhZGRpbmctbGVmdDogMTBweDsKKyAgICAgICAgcGFkZGluZy10b3A6IDJweDsKK30KKworZGl2LnRvYyBoMyB7CisgICAgICAgIGZvbnQ6IGJvbGQgMTJweC8xLjIgQXJpYWwsRnJlZVNhbnMsc2Fucy1zZXJpZjsKKwljb2xvcjogIzQ2NjVBMjsKKyAgICAgICAgYm9yZGVyLWJvdHRvbTogMCBub25lOworICAgICAgICBtYXJnaW46IDA7Cit9CisKK2Rpdi50b2MgdWwgeworICAgICAgICBsaXN0LXN0eWxlOiBub25lIG91dHNpZGUgbm9uZTsKKyAgICAgICAgYm9yZGVyOiBtZWRpdW0gbm9uZTsKKyAgICAgICAgcGFkZGluZzogMHB4OworfSAgICAgICAKKworZGl2LnRvYyBsaS5sZXZlbDEgeworICAgICAgICBtYXJnaW4tbGVmdDogMHB4OworfQorCitkaXYudG9jIGxpLmxldmVsMiB7CisgICAgICAgIG1hcmdpbi1sZWZ0OiAxNXB4OworfQorCitkaXYudG9jIGxpLmxldmVsMyB7CisgICAgICAgIG1hcmdpbi1sZWZ0OiAzMHB4OworfQorCitkaXYudG9jIGxpLmxldmVsNCB7CisgICAgICAgIG1hcmdpbi1sZWZ0OiA0NXB4OworfQorCisuaW5oZXJpdF9oZWFkZXIgeworICAgICAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgY29sb3I6IGdyYXk7CisgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKKwktd2Via2l0LXRvdWNoLWNhbGxvdXQ6IG5vbmU7CisJLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKKwkta2h0bWwtdXNlci1zZWxlY3Q6IG5vbmU7CisJLW1vei11c2VyLXNlbGVjdDogbm9uZTsKKwktbXMtdXNlci1zZWxlY3Q6IG5vbmU7CisJdXNlci1zZWxlY3Q6IG5vbmU7Cit9CisKKy5pbmhlcml0X2hlYWRlciB0ZCB7CisgICAgICAgIHBhZGRpbmc6IDZweCAwcHggMnB4IDVweDsKK30KKworLmluaGVyaXQgeworICAgICAgICBkaXNwbGF5OiBub25lOworfQorCit0ci5oZWFkaW5nIGgyIHsKKyAgICAgICAgbWFyZ2luLXRvcDogMTJweDsKKyAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OworfQorCisvKiB0b29sdGlwIHJlbGF0ZWQgc3R5bGUgaW5mbyAqLworCisudHRjIHsKKyAgICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgICAgICBkaXNwbGF5OiBub25lOworfQorCisjcG93ZXJUaXAgeworCWN1cnNvcjogZGVmYXVsdDsKKwl3aGl0ZS1zcGFjZTogbm93cmFwOworCWJhY2tncm91bmQtY29sb3I6IHdoaXRlOworCWJvcmRlcjogMXB4IHNvbGlkIGdyYXk7CisJYm9yZGVyLXJhZGl1czogNHB4IDRweCA0cHggNHB4OworCWJveC1zaGFkb3c6IDFweCAxcHggN3B4IGdyYXk7CisJZGlzcGxheTogbm9uZTsKKwlmb250LXNpemU6IHNtYWxsZXI7CisJbWF4LXdpZHRoOiA4MCU7CisJb3BhY2l0eTogMC45OworCXBhZGRpbmc6IDFleCAxZW0gMWVtOworCXBvc2l0aW9uOiBhYnNvbHV0ZTsKKwl6LWluZGV4OiAyMTQ3NDgzNjQ3OworfQorCisjcG93ZXJUaXAgZGl2LnR0ZG9jIHsKKyAgICAgICAgY29sb3I6IGdyZXk7CisJZm9udC1zdHlsZTogaXRhbGljOworfQorCisjcG93ZXJUaXAgZGl2LnR0bmFtZSBhIHsKKyAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKyNwb3dlclRpcCBkaXYudHRuYW1lIHsKKyAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKyNwb3dlclRpcCBkaXYudHRkZWNpIHsKKyAgICAgICAgY29sb3I6ICMwMDYzMTg7Cit9CisKKyNwb3dlclRpcCBkaXYgeworICAgICAgICBtYXJnaW46IDBweDsKKyAgICAgICAgcGFkZGluZzogMHB4OworICAgICAgICBmb250OiAxMnB4LzE2cHggUm9ib3RvLHNhbnMtc2VyaWY7Cit9CisKKyNwb3dlclRpcDpiZWZvcmUsICNwb3dlclRpcDphZnRlciB7CisJY29udGVudDogIiI7CisJcG9zaXRpb246IGFic29sdXRlOworCW1hcmdpbjogMHB4OworfQorCisjcG93ZXJUaXAubjphZnRlciwgICNwb3dlclRpcC5uOmJlZm9yZSwKKyNwb3dlclRpcC5zOmFmdGVyLCAgI3Bvd2VyVGlwLnM6YmVmb3JlLAorI3Bvd2VyVGlwLnc6YWZ0ZXIsICAjcG93ZXJUaXAudzpiZWZvcmUsCisjcG93ZXJUaXAuZTphZnRlciwgICNwb3dlclRpcC5lOmJlZm9yZSwKKyNwb3dlclRpcC5uZTphZnRlciwgI3Bvd2VyVGlwLm5lOmJlZm9yZSwKKyNwb3dlclRpcC5zZTphZnRlciwgI3Bvd2VyVGlwLnNlOmJlZm9yZSwKKyNwb3dlclRpcC5udzphZnRlciwgI3Bvd2VyVGlwLm53OmJlZm9yZSwKKyNwb3dlclRpcC5zdzphZnRlciwgI3Bvd2VyVGlwLnN3OmJlZm9yZSB7CisJYm9yZGVyOiBzb2xpZCB0cmFuc3BhcmVudDsKKwljb250ZW50OiAiICI7CisJaGVpZ2h0OiAwOworCXdpZHRoOiAwOworCXBvc2l0aW9uOiBhYnNvbHV0ZTsKK30KKworI3Bvd2VyVGlwLm46YWZ0ZXIsICAjcG93ZXJUaXAuczphZnRlciwKKyNwb3dlclRpcC53OmFmdGVyLCAgI3Bvd2VyVGlwLmU6YWZ0ZXIsCisjcG93ZXJUaXAubnc6YWZ0ZXIsICNwb3dlclRpcC5uZTphZnRlciwKKyNwb3dlclRpcC5zdzphZnRlciwgI3Bvd2VyVGlwLnNlOmFmdGVyIHsKKwlib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7Cit9CisKKyNwb3dlclRpcC5uOmJlZm9yZSwgICNwb3dlclRpcC5zOmJlZm9yZSwKKyNwb3dlclRpcC53OmJlZm9yZSwgICNwb3dlclRpcC5lOmJlZm9yZSwKKyNwb3dlclRpcC5udzpiZWZvcmUsICNwb3dlclRpcC5uZTpiZWZvcmUsCisjcG93ZXJUaXAuc3c6YmVmb3JlLCAjcG93ZXJUaXAuc2U6YmVmb3JlIHsKKwlib3JkZXItY29sb3I6IHJnYmEoMTI4LCAxMjgsIDEyOCwgMCk7Cit9CisKKyNwb3dlclRpcC5uOmFmdGVyLCAgI3Bvd2VyVGlwLm46YmVmb3JlLAorI3Bvd2VyVGlwLm5lOmFmdGVyLCAjcG93ZXJUaXAubmU6YmVmb3JlLAorI3Bvd2VyVGlwLm53OmFmdGVyLCAjcG93ZXJUaXAubnc6YmVmb3JlIHsKKwl0b3A6IDEwMCU7Cit9CisKKyNwb3dlclRpcC5uOmFmdGVyLCAjcG93ZXJUaXAubmU6YWZ0ZXIsICNwb3dlclRpcC5udzphZnRlciB7CisJYm9yZGVyLXRvcC1jb2xvcjogI2ZmZmZmZjsKKwlib3JkZXItd2lkdGg6IDEwcHg7CisJbWFyZ2luOiAwcHggLTEwcHg7Cit9CisjcG93ZXJUaXAubjpiZWZvcmUgeworCWJvcmRlci10b3AtY29sb3I6ICM4MDgwODA7CisJYm9yZGVyLXdpZHRoOiAxMXB4OworCW1hcmdpbjogMHB4IC0xMXB4OworfQorI3Bvd2VyVGlwLm46YWZ0ZXIsICNwb3dlclRpcC5uOmJlZm9yZSB7CisJbGVmdDogNTAlOworfQorCisjcG93ZXJUaXAubnc6YWZ0ZXIsICNwb3dlclRpcC5udzpiZWZvcmUgeworCXJpZ2h0OiAxNHB4OworfQorCisjcG93ZXJUaXAubmU6YWZ0ZXIsICNwb3dlclRpcC5uZTpiZWZvcmUgeworCWxlZnQ6IDE0cHg7Cit9CisKKyNwb3dlclRpcC5zOmFmdGVyLCAgI3Bvd2VyVGlwLnM6YmVmb3JlLAorI3Bvd2VyVGlwLnNlOmFmdGVyLCAjcG93ZXJUaXAuc2U6YmVmb3JlLAorI3Bvd2VyVGlwLnN3OmFmdGVyLCAjcG93ZXJUaXAuc3c6YmVmb3JlIHsKKwlib3R0b206IDEwMCU7Cit9CisKKyNwb3dlclRpcC5zOmFmdGVyLCAjcG93ZXJUaXAuc2U6YWZ0ZXIsICNwb3dlclRpcC5zdzphZnRlciB7CisJYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZmZmZjsKKwlib3JkZXItd2lkdGg6IDEwcHg7CisJbWFyZ2luOiAwcHggLTEwcHg7Cit9CisKKyNwb3dlclRpcC5zOmJlZm9yZSwgI3Bvd2VyVGlwLnNlOmJlZm9yZSwgI3Bvd2VyVGlwLnN3OmJlZm9yZSB7CisJYm9yZGVyLWJvdHRvbS1jb2xvcjogIzgwODA4MDsKKwlib3JkZXItd2lkdGg6IDExcHg7CisJbWFyZ2luOiAwcHggLTExcHg7Cit9CisKKyNwb3dlclRpcC5zOmFmdGVyLCAjcG93ZXJUaXAuczpiZWZvcmUgeworCWxlZnQ6IDUwJTsKK30KKworI3Bvd2VyVGlwLnN3OmFmdGVyLCAjcG93ZXJUaXAuc3c6YmVmb3JlIHsKKwlyaWdodDogMTRweDsKK30KKworI3Bvd2VyVGlwLnNlOmFmdGVyLCAjcG93ZXJUaXAuc2U6YmVmb3JlIHsKKwlsZWZ0OiAxNHB4OworfQorCisjcG93ZXJUaXAuZTphZnRlciwgI3Bvd2VyVGlwLmU6YmVmb3JlIHsKKwlsZWZ0OiAxMDAlOworfQorI3Bvd2VyVGlwLmU6YWZ0ZXIgeworCWJvcmRlci1sZWZ0LWNvbG9yOiAjZmZmZmZmOworCWJvcmRlci13aWR0aDogMTBweDsKKwl0b3A6IDUwJTsKKwltYXJnaW4tdG9wOiAtMTBweDsKK30KKyNwb3dlclRpcC5lOmJlZm9yZSB7CisJYm9yZGVyLWxlZnQtY29sb3I6ICM4MDgwODA7CisJYm9yZGVyLXdpZHRoOiAxMXB4OworCXRvcDogNTAlOworCW1hcmdpbi10b3A6IC0xMXB4OworfQorCisjcG93ZXJUaXAudzphZnRlciwgI3Bvd2VyVGlwLnc6YmVmb3JlIHsKKwlyaWdodDogMTAwJTsKK30KKyNwb3dlclRpcC53OmFmdGVyIHsKKwlib3JkZXItcmlnaHQtY29sb3I6ICNmZmZmZmY7CisJYm9yZGVyLXdpZHRoOiAxMHB4OworCXRvcDogNTAlOworCW1hcmdpbi10b3A6IC0xMHB4OworfQorI3Bvd2VyVGlwLnc6YmVmb3JlIHsKKwlib3JkZXItcmlnaHQtY29sb3I6ICM4MDgwODA7CisJYm9yZGVyLXdpZHRoOiAxMXB4OworCXRvcDogNTAlOworCW1hcmdpbi10b3A6IC0xMXB4OworfQorCitAbWVkaWEgcHJpbnQKK3sKKyAgI3RvcCB7IGRpc3BsYXk6IG5vbmU7IH0KKyAgI3NpZGUtbmF2IHsgZGlzcGxheTogbm9uZTsgfQorICAjbmF2LXBhdGggeyBkaXNwbGF5OiBub25lOyB9CisgIGJvZHkgeyBvdmVyZmxvdzp2aXNpYmxlOyB9CisgIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYgeyBwYWdlLWJyZWFrLWFmdGVyOiBhdm9pZDsgfQorICAuc3VtbWFyeSB7IGRpc3BsYXk6IG5vbmU7IH0KKyAgLm1lbWl0ZW0geyBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7IH0KKyAgI2RvYy1jb250ZW50CisgIHsKKyAgICBtYXJnaW4tbGVmdDowICFpbXBvcnRhbnQ7CisgICAgaGVpZ2h0OmF1dG8gIWltcG9ydGFudDsKKyAgICB3aWR0aDphdXRvICFpbXBvcnRhbnQ7CisgICAgb3ZlcmZsb3c6aW5oZXJpdDsKKyAgICBkaXNwbGF5OmlubGluZTsKKyAgfQorfQorCmRpZmYgLS1naXQgYS9kb2MvZHJhZnQtaXJ0Zi1jZnJnLWljbS0wMC50eHQgYi9kb2MvZHJhZnQtaXJ0Zi1jZnJnLWljbS0wMC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkZmNlMzMuLjAwMDAwMDAKLS0tIGEvZG9jL2RyYWZ0LWlydGYtY2ZyZy1pY20tMDAudHh0CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2hlYWRlci50ZXggYi9kb2MvaGVhZGVyLnRleApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNlYzc2Mi4uMDAwMDAwMAotLS0gYS9kb2MvaGVhZGVyLnRleAorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0lIGhlYWRlci50ZXgKLSUgCi0lIGhlYWRlciBmaWxlIGZvciB0aGUgbGliU1JUUCBkb2N1bWVudGF0aW9uIC0gYmFzZWQgb24gdGhlIGhlYWRlcgotJSBmaWxlIGdlbmVyYXRlZCBieSBkb3h5Z2VuLCB3aXRoIHRoZSBpbml0aWFsIGNoYXB0ZXJzIG9mIHRoZSAKLSUgb3JpZ2luYWwgbGliU1JUUCBkb2N1bWVudGF0aW9uIHRhY2tlZCBvbgotJSAKLVxkb2N1bWVudGNsYXNzW2xldHRlcnBhcGVyXXtib29rfQotXHVzZXBhY2thZ2V7bWFrZWlkeH0KLVx1c2VwYWNrYWdle2ZhbmN5aGRyfQotXHVzZXBhY2thZ2V7Z3JhcGhpY3h9Ci1cdXNlcGFja2FnZXttdWx0aWNvbH0KLVx1c2VwYWNrYWdle2Zsb2F0fQotXHVzZXBhY2thZ2V7dGV4dGNvbXB9Ci1cdXNlcGFja2FnZXthbGx0dH0KLVx1c2VwYWNrYWdle3RpbWVzfQotXGlmeFxwZGZvdXRwdXRcdW5kZWZpbmVkCi1cdXNlcGFja2FnZVtwczJwZGYsCi0gICAgICAgICAgICBwYWdlYmFja3JlZj10cnVlLAotICAgICAgICAgICAgY29sb3JsaW5rcz10cnVlLAotICAgICAgICAgICAgbGlua2NvbG9yPWJsdWUKLSAgICAgICAgICAgXXtoeXBlcnJlZn0KLVxlbHNlCi1cdXNlcGFja2FnZVtwZGZ0ZXgsCi0gICAgICAgICAgICBwYWdlYmFja3JlZj10cnVlLAotICAgICAgICAgICAgY29sb3JsaW5rcz10cnVlLAotICAgICAgICAgICAgbGlua2NvbG9yPWJsdWUKLSAgICAgICAgICAgXXtoeXBlcnJlZn0KLVxmaQotXHVzZXBhY2thZ2V7ZG94eWdlbn0KLVxtYWtlaW5kZXgKLVxzZXRjb3VudGVye3RvY2RlcHRofXsxfQotXHNldGxlbmd0aHtcZm9vdHJ1bGV3aWR0aH17MC40cHR9Ci0KLSUgdGhlc2UgbGVuZ3RocyBhcmUgZnJvbSBEQU0KLVx0ZXh0d2lkdGggPSA2LjUgaW4KLSVcdGV4dGhlaWdodCA9IDkgaW4KLVxvZGRzaWRlbWFyZ2luID0gMC4wIGluCi1cZXZlbnNpZGVtYXJnaW4gPSAwLjAgaW4KLVx0b3BtYXJnaW4gPSAwLjAgaW4KLVxoZWFkaGVpZ2h0ID0gMC4wIGluCi0lXGhlYWRzZXAgPSAwLjAgaW4KLVxwYXJza2lwID0gMC4yaW4KLVxwYXJpbmRlbnQgPSAwLjBpbgotCi0lIHRoZXNlIGhlYWRlciBhbmQgZm9vdGVyIGRlZmluaXRpb25zIGZyb20gREFNCi1cbGhlYWR7bGliU1JUUH0KLVxjaGVhZHt9Ci1ccmhlYWR7XHJpZ2h0bWFya30KLSVccmhlYWR7XHNsc2hhcGUgfQotXGxmb290e30KLVxjZm9vdHsgXHRoZXBhZ2UgfQotXHJmb290e30KLSVcZmFuY3loZWFkW0xFLFJPXXtccmlnaHRtYXJrIH0KLSVcZmFuY3loZWFkW0xPLFJFXXtcc2xzaGFwZSB9Ci0KLSUgbGV0J3MgdXNlIHRoZSBwYWxhdGlubyBmb250Ci1cZm9udGZhbWlseXtwcGx9Ci1cc2VsZWN0Zm9udAotCi0KLVxiZWdpbntkb2N1bWVudH0KLVxiZWdpbnt0aXRsZXBhZ2V9Ci1cdnNwYWNlKns3Y219Ci0lXGJlZ2lue2NlbnRlcn0KLXtcSHVnZSAKLWxpYlNSVFAgMS40IE92ZXJ2aWV3IGFuZCBSZWZlcmVuY2UgTWFudWFsXFwKLSAgXGhydWxlZmlsbAotfVxcCi1cdnNwYWNlKnsxY219Ci1cYmVnaW57Zmx1c2hyaWdodH0KLXtcTGFyZ2UgRGF2aWQgQS4gTWNHcmV3IFxcIFx0ZXh0dHR7bWNncmV3QGNpc2NvLmNvbX0gfVxcCi1cdnNwYWNlKnswLjVjbX0KLVxlbmR7Zmx1c2hyaWdodH0KLSVcZW5ke2NlbnRlcn0KLVxlbmR7dGl0bGVwYWdlfQotCi0KLVxjbGVhcmVtcHR5ZG91YmxlcGFnZQotXHZzcGFjZSp7M2NtfQote1xMQVJHRSBQcmVmYWNlfQotXHZzcGFjZXsxY219Ci0KLVRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBhbmQgZG9jdW1lbnRhdGlvbiBvZiBsaWJTUlRQIHdhcyB3cml0dGVuCi1ieSBEYXZpZCBNY0dyZXcgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBpbiBvcmRlciB0byBwcm9tb3RlIHRoZSB1c2UsCi11bmRlcnN0YW5kaW5nLCBhbmQgaW50ZXJvcGVyYWJpbGl0eSBvZiBTZWN1cmUgUlRQLiAgUmFuZGVsbCBKZXN1cAotY29udHJpYnV0ZWQgYSB3b3JraW5nIFNSVENQIGltcGxlbWVudGF0aW9uIGFuZCBvdGhlciBmaXhlcy4gIEFsZXgKLVZhbnplbGxhIGFuZCBXaWxsIENsYXJrIGNvbnRyaWJ1dGVkIGNoYW5nZXMgc28gdGhhdCB0aGUgQUVTIElDTQotaW1wbGVtZW50YXRpb24gY2FuIGJlIHVzZWQgZm9yIElTTUEgbWVkaWEgZW5jcnlwdGlvbi4gIFN0ZXZlIFVuZGVyd29vZAotY29udHJpYnV0ZWQgeDg2XF82NCBwb3J0YWJpbGl0eSBjaGFuZ2VzLiAgV2UgYWxzbyBnaXZlIHRoYW5rcyB0byBCcmlhbgotV2VpcywgTWFyayBCYXVnaGVyLCBKZWZmIENoYW4sIEJpbGwgU2ltb24sIERvdWdsYXMgU21pdGgsIEJpbGwgTWF5LAotUmljaGFyZCBQcmVpc3RsZXksIEpvZSBUYXJkbyBhbmQgb3RoZXJzIGZvciBjb250cmlidXRpb25zLCBjb21tZW50cywKLWFuZCBjb3JyZWN0aW9ucy4KLQotVGhpcyByZWZlcmVuY2UgbWF0ZXJpYWwgaW4gdGhpcyBkb2N1bWVuYXRpb24gd2FzIGdlbmVyYXRlZCB1c2luZyB0aGUKLVx0ZXh0dHR7ZG94eWdlbn0gdXRpbGl0eSBmb3IgYXV0b21hdGljIGRvY3VtZW50YXRpb24gb2Ygc291cmNlIGNvZGUuCi0KLVxjb3B5cmlnaHQgMjAwMS0yMDA1IGJ5IERhdmlkIEEuIE1jR3JldywgQ2lzY28gU3lzdGVtcywgSW5jLgotXHRoaXNwYWdlc3R5bGV7ZW1wdHl9Ci0KLVxjbGVhcmVtcHR5ZG91YmxlcGFnZQotXHBhZ2VudW1iZXJpbmd7cm9tYW59Ci1cdGFibGVvZmNvbnRlbnRzCi0lXGNsZWFyZW1wdHlkb3VibGVwYWdlCi0KLVxjbGVhcmVtcHR5ZG91YmxlcGFnZQotXHBhZ2VudW1iZXJpbmd7YXJhYmljfQotCi0KZGlmZiAtLWdpdCBhL2RvYy9pbnRyby50eHQgYi9kb2MvaW50cm8udHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTg0MzVjLi4wMDAwMDAwCi0tLSBhL2RvYy9pbnRyby50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzNzYgKzAsMCBAQAotLyoqCi0gCi1AbWFpbnBhZ2UgSW50cm9kdWN0aW9uIHRvIGxpYlNSVFAKLSAKLVRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGxpYlNSVFAsIHRoZSBPcGVuIFNvdXJjZSBTZWN1cmUgUlRQIGxpYnJhcnkKLWZyb20gQ2lzY28gU3lzdGVtcywgSW5jLiAgUlRQIGlzIHRoZSBSZWFsLXRpbWUgVHJhbnNwb3J0IFByb3RvY29sLCBhbgotSUVURiBzdGFuZGFyZCBmb3IgdGhlIHRyYW5zcG9ydCBvZiByZWFsLXRpbWUgZGF0YSBzdWNoIGFzIHRlbGVwaG9ueSwKLWF1ZGlvLCBhbmQgdmlkZW8sIGRlZmluZWQgYnkgUkZDMTg4OS4gIFNlY3VyZSBSVFAgKFNSVFApIGlzIGFuIFJUUAotcHJvZmlsZSBmb3IgcHJvdmlkaW5nIGNvbmZpZGVudGlhbGl0eSB0byBSVFAgZGF0YSBhbmQgYXV0aGVudGljYXRpb24KLXRvIHRoZSBSVFAgaGVhZGVyIGFuZCBwYXlsb2FkLiAgU1JUUCBpcyBhbiBJRVRGIFByb3Bvc2VkIFN0YW5kYXJkLCBhbmQKLWlzIGRlZmluZWQgaW4gUkZDIDM3MTEsIGFuZCB3YXMgZGV2ZWxvcGVkIGluIHRoZSBJRVRGIEF1ZGlvL1ZpZGVvCi1UcmFuc3BvcnQgKEFWVCkgV29ya2luZyBHcm91cC4gIFRoaXMgbGlicmFyeSBzdXBwb3J0cyBhbGwgb2YgdGhlCi1tYW5kYXRvcnkgZmVhdHVyZXMgb2YgU1JUUCwgYnV0IG5vdCBhbGwgb2YgdGhlIG9wdGlvbmFsIGZlYXR1cmVzLiAgU2VlCi10aGUgQHJlZiBGZWF0dXJlcyBzZWN0aW9uIGZvciBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uLgotIAotVGhpcyBkb2N1bWVudCBpcyBvcmdhbml6ZWQgYXMgZm9sbG93cy4gIFRoZSBmaXJzdCBjaGFwdGVyIHByb3ZpZGVzIAotYmFja2dyb3VuZCBtYXRlcmlhbCBvbiBTUlRQIGFuZCBvdmVydmlldyBvZiBsaWJTUlRQLiAgVGhlIGZvbGxvd2luZwotY2hhcHRlcnMgcHJvdmlkZSBhIGRldGFpbGVkIHJlZmVyZW5jZSB0byB0aGUgbGliU1JUUCBBUEkgYW5kIHJlbGF0ZWQKLWZ1bmN0aW9ucy4gIFRoZSByZWZlcmVuY2UgbWF0ZXJpYWwgaXMgY3JlYXRlZCBhdXRvbWF0aWNhbGx5ICh1c2luZyB0aGUKLWRveHlnZW4gdXRpbGl0eSkgZnJvbSBjb21tZW50cyBlbWJlZGRlZCBpbiBzb21lIG9mIHRoZSBDIGhlYWRlcgotZmlsZXMuIFRoZSBkb2N1bWVudGF0aW9uIGlzIG9yZ2FuaXplZCBpbnRvIG1vZHVsZXMgaW4gb3JkZXIgdG8gaW1wcm92ZQotaXRzIGNsYXJpdHkuICBUaGVzZSBtb2R1bGVzIGRvIG5vdCBkaXJlY3RseSBjb3JyZXNwb25kIHRvIGZpbGVzLiBBbgotdW5kZXJseWluZyBjcnlwdG9ncmFwaGljIGtlcm5lbCBwcm92aWRlcyBtdWNoIG9mIHRoZSBiYXNpYwotZnVuY3Rpb25hbGl0eSBvZiBsaWJTUlRQLCBidXQgaXMgbW9zdGx5IHVuZG9jdW1lbnRlZCBiZWNhdXNlIGl0IGRvZXMKLWl0cyB3b3JrIGJlaGluZCB0aGUgc2NlbmVzLgotCi1Ac2VjdGlvbiBMSUNFTlNFIExpY2Vuc2UgYW5kIERpc2NsYWltZXIKLQotbGliU1JUUCBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2UsIHdoaWNoIGlzIGluY2x1ZGVkCi1pbiB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0aW9uLiAgSXQgaXMgcmVwcm9kdWNlZCBpbiB0aGUgbWFudWFsIGluCi1jYXNlIHlvdSBnb3QgdGhlIGxpYnJhcnkgZnJvbSBhbm90aGVyIHNvdXJjZS4KLQkKLUBsYXRleG9ubHkKLVxiZWdpbntxdW90ZX0KLUNvcHlyaWdodCAoYykgMjAwMS0yMDA1IENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi1hcmUgbWV0OgotXGJlZ2lue2l0ZW1pemV9Ci1caXRlbSAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotXGl0ZW0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotXGl0ZW0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotXGVuZHtpdGVtaXplfQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLUxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi1GT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKLUlORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi1TRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLUhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLVNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLUFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLU9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLVxlbmR7cXVvdGV9Ci1AZW5kbGF0ZXhvbmx5Ci0KLUBzZWN0aW9uIEZlYXR1cmVzIFN1cHBvcnRlZCBGZWF0dXJlcwotCi1UaGlzIGxpYnJhcnkgc3VwcG9ydHMgYWxsIG9mIHRoZSBtYW5kYXRvcnktdG8taW1wbGVtZW50IGZlYXR1cmVzIG9mCi1TUlRQIChhcyBkZWZpbmVkIGJ5IHRoZSBtb3N0IHJlY2VudCBJbnRlcm5ldCBEcmFmdCkuICBTb21lIG9mIHRoZXNlCi1mZWF0dXJlcyBjYW4gYmUgc2VsZWN0ZWQgKG9yIGRlLXNlbGVjdGVkKSBhdCBydW4gdGltZSBieSBzZXR0aW5nIGFuCi1hcHByb3ByaWF0ZSBwb2xpY3k7IHRoaXMgaXMgZG9uZSB1c2luZyB0aGUgc3RydWN0dXJlIHNydHBfcG9saWN5X3QuCi1Tb21lIG90aGVyIGJlaGF2aW9ycyBvZiB0aGUgcHJvdG9jb2wgY2FuIGJlIGFkYXB0ZWQgYnkgZGVmaW5pbmcgYW4KLWFwcHJvcmlhdGUgZXZlbnQgaGFuZGxlciBmb3IgdGhlIGV4Y2VwdGlvbmFsIGV2ZW50czsgc2VlIHRoZSBAcmVmCi1TUlRQZXZlbnRzIHNlY3Rpb24uICAKLQotU29tZSBvcHRpb25zIHRoYXQgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgc3BlY2lmaWNhdGlvbiBhcmUgc3VwcG9ydGVkLgotTW9zdCBub3RhYmx5LCB0aGUgVE1NSCBhdXRoZW50aWNhdGlvbiBmdW5jdGlvbiBpcyBpbmNsdWRlZCwgdGhvdWdoIGl0Ci13YXMgcmVtb3ZlZCBmcm9tIHRoZSBTUlRQIEludGVybmV0IERyYWZ0IGR1cmluZyB0aGUgc3VtbWVyIG9mIDIwMDIuCi0KLQotQGxhdGV4b25seQotU29tZSBvcHRpb25zIHRoYXQgYXJlIGRlc2NyaWJlZCBpbiB0aGUgU1JUUCBzcGVjaWZpY2F0aW9uIGFyZSBub3QKLXN1cHBvcnRlZC4gIFRoaXMgaW5jbHVkZXMgCi1cYmVnaW57aXRlbWl6ZX0KLVxpdGVtIHRoZSBNYXN0ZXIgS2V5IEluZGV4IChNS0kpLAotXGl0ZW0ga2V5IGRlcml2YXRpb24gcmF0ZXMgb3RoZXIgdGhhbiB6ZXJvLAotXGl0ZW0gdGhlIGNpcGhlciBGOCwKLVxpdGVtIGFudGktcmVwbGF5IGxpc3RzIHdpdGggc2l6ZXMgb3RoZXIgdGhhbiAxMjgsCi1caXRlbSB0aGUgdXNlIG9mIHRoZSBwYWNrZXQgaW5kZXggdG8gc2VsZWN0IGJldHdlZW4gbWFzdGVyIGtleXMuCi1cZW5ke2l0ZW1pemV9Ci1AZW5kbGF0ZXhvbmx5Ci0gCi1UaGUgdXNlciBzaG91bGQgYmUgYXdhcmUgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBtaXN1c2UgdGhpcyBsaWJhcnksCi1hbmQgdGhhdCB0aGUgcmVzdWx0IG1heSBiZSB0aGF0IHRoZSBzZWN1cml0eSBsZXZlbCBpdCBwcm92aWRlcyBpcwotaW5hZGVxdWF0ZS4gIElmIHlvdSBhcmUgaW1wbGVtZW50aW5nIGEgZmVhdHVyZSB1c2luZyB0aGlzIGxpYnJhcnksIHlvdQotd2lsbCB3YW50IHRvIHJlYWQgdGhlIFNlY3VyaXR5IENvbnNpZGVyYXRpb25zIHNlY3Rpb24gb2YgdGhlIEludGVybmV0Ci1EcmFmdC4gIEluIGFkZGl0aW9uLCBpdCBpcyBpbXBvcnRhbnQgdGhhdCB5b3UgcmVhZCBhbmQgdW5kZXJzdGFuZCB0aGUKLXRlcm1zIG91dGxpbmVkIGluIHRoZSBAcmVmIExJQ0VOU0Ugc2VjdGlvbi4KLQotCi1Ac2VjdGlvbiBJbnN0YWxsaW5nIEluc3RhbGxpbmcgYW5kIEJ1aWxkaW5nIGxpYlNSVFAKLQotQGxhdGV4b25seQotCi1UbyBpbnN0YWxsIGxpYlNSVFAsIGRvd25sb2FkIHRoZSBsYXRlc3QgcmVsZWFzZSBvZiB0aGUgZGlzdHJpYnV0aW9uCi1mcm9tIFx0ZXh0dHR7c3J0cC5zb3VyY2Vmb3JnZS5uZXR9LiAgVGhlIGZvcm1hdCBvZiB0aGUgbmFtZXMgb2YgdGhlCi1kaXN0cmlidXRpb25zIGFyZSBcdGV4dHR0e3NydHAtQS5CLkMudGd6fSwgd2hlcmUgXHRleHR0dHtBfSBpcyB0aGUKLXZlcnNpb24gbnVtYmVyLCBcdGV4dHR0e0J9IGlzIHRoZSBtYWpvciByZWxlYXNlIG51bWJlciwgXHRleHR0dHtDfSBpcwotdGhlIG1pbm9yIHJlbGVhc2UgbnVtYmVyLCBhbmQgXHRleHR0dHt0Z3p9IGlzIHRoZSBmaWxlCi1leHRlbnNpb25cZm9vdG5vdGV7VGhlIGV4dGVuc2lvbiBcdGV4dHR0ey50Z3p9IGlzIGlkZW50aWNhbCB0bwotXHRleHR0dHt0YXIuZ3p9LCBhbmQgaW5kaWNhdGVzIGEgY29tcHJlc3NlZCB0YXIgZmlsZS59ICBZb3UgcHJvYmFibHkKLXdhbnQgdG8gZ2V0IHRoZSBtb3N0IHJlY2VudCByZWxlYXNlLiAgVW5wYWNrIHRoZSBkaXN0cmlidXRpb24gYW5kCi1leHRyYWN0IHRoZSBzb3VyY2UgZmlsZXM7IHRoZSBkaXJlY3RvcnkgaW50byB3aGljaCB0aGUgc29ydWNlIGZpbGVzCi13aWxsIGdvIGlzIG5hbWVkIFx0ZXh0dHR7c3J0cH0uCi0KLWxpYlNSVFAgdXNlcyB0aGUgR05VIFx0ZXh0dHR7YXV0b2NvbmZ9IGFuZCBcdGV4dHR0e21ha2V9Ci11dGlsaXRpZXNcZm9vdG5vdGV7QlNEIG1ha2Ugd2lsbCBub3Qgd29yazsgaWYgYm90aCB2ZXJzaW9ucyBvZiBtYWtlCi1hcmUgb24geW91ciBwbGF0Zm9ybSwgeW91IGNhbiBpbnZva2UgR05VIG1ha2UgYXMgXHRleHR0dHtnbWFrZX0ufS4gIEluCi10aGUgXHRleHR0dHtzcnRwfSBkaXJlY3RvcnksIHJ1biB0aGUgY29uZmlndXJlIHNjcmlwdCBhbmQgdGhlbiBtYWtlOgotXGJlZ2lue3ZlcmJhdGltfQotICAuL2NvbmZpZ3VyZSBbIG9wdGlvbnMgXSAgICAgICAKLSAgbWFrZSAgICAgICAgICAgICAgICAgICAgICAgICAgCi1cZW5ke3ZlcmJhdGltfQotVGhlIGNvbmZpZ3VyZSBzY3JpcHQgYWNjZXB0cyB0aGUgZm9sbG93aW5nIG9wdGlvbnM6Ci1cYmVnaW57cXVvdGV9Ci1cYmVnaW57ZGVzY3JpcHRpb259Ci1caXRlbVstLWhlbHBdICAgICAgICAgICAgICBwcm92aWRlcyBhIHVzYWdlIHN1bW1hcnkuCi1caXRlbVstLWRpc2FibGUtZGVidWddICAgICBjb21waWxlcyBsaWJTUlRQIHdpdGhvdXQgdGhlIHJ1bnRpbWUgCi0JCQkgICBkeW5hbWljIGRlYnVnZ2luZyBzeXN0ZW0uCi1caXRlbVstLWVuYWJsZS1nZW5lcmljLWFlc2ljbV0gY29tcGlsZSBpbiBjaGFuZ2VzIGZvciBpc21hY3J5cAotXGl0ZW1bLS1lbmFibGUtc3lzbG9nXSAgICAgdXNlIHN5c2xvZyBmb3IgZXJyb3IgcmVwb3J0aW5nLgotXGl0ZW1bLS1kaXNhYmxlLXN0ZG91dF0gICAgZGlhYmxlcyBzdGRvdXQgZm9yIGVycm9yIHJlcG9ydGluZy4KLVxpdGVtWy0tZW5hYmxlLWNvbnNvbGVdICAgIHVzZSBcdGV4dHR0ey9kZXYvY29uc29sZX0gZm9yIGVycm9yIHJlcG9ydGluZwotXGl0ZW1bLS1nZG9pXSAgICAgICAgICAgICAgdXNlIEdET0kga2V5IG1hbmFnZW1lbnQgKGRpc2FibGVkIGF0IHByZXNlbnQpLgotXGVuZHtkZXNjcmlwdGlvbn0KLVxlbmR7cXVvdGV9Ci0KLUJ5IGRlZmF1bHQsIGR5bmFtaWMgZGViYnVnaW5nIGlzIGVuYWJsZWQgYW5kIHN0ZG91dCBpcyB1c2VkIGZvcgotZGVidWdnaW5nLiAgWW91IGNhbiB1c2UgdGhlIGNvbmZpZ3VyZSBvcHRpb25zIHRvIGhhdmUgdGhlIGRlYnVnZ2luZwotb3V0cHV0IHNlbnQgdG8gc3lzbG9nIG9yIHRoZSBzeXN0ZW0gY29uc29sZS4gIEFsdGVybmF0aXZlbHksIHlvdSBjYW4KLWRlZmluZSBFUlJcX1JFUE9SVElOR1xfRklMRSBpbiBcdGV4dHR0e2luY2x1ZGUvY29uZi5ofSB0byBiZSBhbnkgb3RoZXIKLWZpbGUgdGhhdCBjYW4gYmUgb3BlbmVkIGJ5IGxpYlNSVFAsIGFuZCBkZWJ1ZyBtZXNzYWdlcyB3aWxsIGJlIHNlbnQgdG8KLWl0LgotCi1UaGlzIHBhY2thZ2UgaGFzIGJlZW4gdGVzdGVkIG9uIHRoZSBmb2xsb3dpbmcgcGxhdGZvcm1zOiBNYWMgT1MgWAotKHBvd2VycGMtYXBwbGUtZGFyd2luMS40KSwgQ3lnd2luIChpNjg2LXBjLWN5Z3dpbiksIFNvbGFyaXMKLShzcGFyYy1zdW4tc29sYXJpczIuNiksIFJlZEhhdCBMaW51eCA3LjEgYW5kIDkgKGk2ODYtcGMtbGludXgpLCBhbmQKLU9wZW5CU0QgKHNwYXJjLXVua25vd24tb3BlbmJzZDIuNykuCi0KLQotQGVuZGxhdGV4b25seQotCi1Ac2VjdGlvbiBBcHBsaWNhdGlvbnMgQXBwbGljYXRpb25zCi0KLUBsYXRleG9ubHkKLQotU2V2ZXJhbCB0ZXN0IGRyaXZlcnMgYW5kIGEgc2ltcGxlIGFuZCBwb3J0YWJsZSBzcnRwIGFwcGxpY2F0aW9uIGFyZQotaW5jbHVkZWQgaW4gdGhlIFx0ZXh0dHR7dGVzdC99IHN1YmRpcmVjdG9yeS4KLQotXGJlZ2lue2NlbnRlcn0KLVxiZWdpbnt0YWJ1bGFyfXtsbH0KLVxobGluZQotVGVzdCBkcml2ZXIgICAgCSYgRnVuY3Rpb24gdGVzdGVkCVxcCi1caGxpbmUKLWtlcm5lbFxfZHJpdmVyICAgJiBjcnlwdG8ga2VybmVsIChjaXBoZXJzLCBhdXRoIGZ1bmNzLCBybmcpIFxcCi1zcnRwXF9kcml2ZXIJJiBzcnRwIGluLW1lbW9yeSB0ZXN0cyAoZG9lcyBub3QgdXNlIHRoZSBuZXR3b3JrKSBcXAotcmRieFxfZHJpdmVyCSYgcmRieCAoZXh0ZW5kZWQgcmVwbGF5IGRhdGFiYXNlKSBcXAotcm9jXF9kcml2ZXIJJiBleHRlbmRlZCBzZXF1ZW5jZSBudW1iZXIgZnVuY3Rpb25zIFxcIAotcmVwbGF5XF9kcml2ZXIJJiByZXBsYXkgZGF0YWJhc2UgIFxcCi1jaXBoZXJcX2RyaXZlcgkmIGNpcGhlcnMgIFxcCi1hdXRoXF9kcml2ZXIJJiBoYXNoIGZ1bmN0aW9ucyBcXAotXGhsaW5lCi1cZW5ke3RhYnVsYXJ9Ci1cZW5ke2NlbnRlcn0KLQotVGhlIGFwcCBydHB3IGlzIGEgc2ltcGxlIHJ0cCBhcHBsaWNhdGlvbiB3aGljaCByZWFkcyB3b3JkcyBmcm9tCi0vdXNyL2RpY3Qvd29yZHMgYW5kIHRoZW4gc2VuZHMgdGhlbSBvdXQgb25lIGF0IGEgdGltZSB1c2luZyBbc11ydHAuCi1NYW51YWwgc3J0cCBrZXlpbmcgdXNlcyB0aGUgLWsgb3B0aW9uOyBhdXRvbWF0ZWQga2V5IG1hbmFnZW1lbnQKLXVzaW5nIGdkb2kgd2lsbCBiZSBhZGRlZCBsYXRlci4KLQotVGhlIHVzYWdlIGZvciBydHB3IGlzCi0KLVx0ZXh0dHR7cnRwdyBbWy1kICQ8JGRlYnVnJD4kXSogWy1rICQ8JGtleSQ+JCBbLWFdWy1lXV0gWy1zIHwgLXJdIGRlc3RcX2lwCi1kZXN0XF9wb3J0XVstbF19Ci0KLUVpdGhlciB0aGUgLXMgKHNlbmRlcikgb3IgLXIgKHJlY2VpdmVyKSBvcHRpb24gbXVzdCBiZSBjaG9zZW4uICBUaGUKLXZhbHVlcyBkZXN0XF9pcCwgZGVzdFxfcG9ydCBhcmUgdGhlIElQIGFkZHJlc3MgYW5kIFVEUCBwb3J0IHRvIHdoaWNoCi10aGUgZGljdGlvbmFyeSB3aWxsIGJlIHNlbnQsIHJlc3BlY3RpdmVseS4gIFRoZSBvcHRpb25zIGFyZToKLVxiZWdpbntjZW50ZXJ9Ci1cYmVnaW57dGFidWxhcn17bGx9Ci0gIC1zCQkmIChTKVJUUCBzZW5kZXIgLSBjYXVzZXMgYXBwIHRvIHNlbmQgd29yZHMgXFwKLSAgLXIJCSYgKFMpUlRQIHJlY2VpdmUgLSBjYXVzZXMgYXBwIHRvIHJlY2V2ZSB3b3JkcyBcXAotICAtayAkPCRrZXkkPiQgICAgICAmIHVzZSBTUlRQIG1hc3RlciBrZXkgJDwka2V5JD4kLCB3aGVyZSB0aGUgCi0JCWtleSBpcyBhIGhleGFkZWNpbWFsIHZhbHVlICh3aXRob3V0IHRoZQotICAgICAgICAgICAgICAgIGxlYWRpbmcgIjB4IikgXFwKLSAgLWUgICAgICAgICAgICAmIGVuY3J5cHQvZGVjcnlwdCAoZm9yIGRhdGEgY29uZmlkZW50aWFsaXR5KQotICAgICAgICAgICAgICAgIChyZXF1aXJlcyB1c2Ugb2YgLWsgb3B0aW9uIGFzIHdlbGwpXFwKLSAgLWEgICAgICAgICAgICAmIG1lc3NhZ2UgYXV0aGVudGljYXRpb24gCi0gICAgICAgICAgICAgICAgKHJlcXVpcmVzIHVzZSBvZiAtayBvcHRpb24gYXMgd2VsbCkgXFwKLSAgLWwgICAgICAgICAgICAmIGxpc3QgdGhlIGF2YWxpYWJsZSBkZWJ1ZyBtb2R1bGVzIFxcCi0gIC1kICQ8JGRlYnVnJD4kICAgICYgdHVybiBvbiBkZWJ1Z2dpbmcgZm9yIG1vZHVsZSAkPCRkZWJ1ZyQ+JCBcXAotXGVuZHt0YWJ1bGFyfQotXGVuZHtjZW50ZXJ9Ci0KLUluIG9yZGVyIHRvIGdldCBhIHJhbmRvbSAzMC1ieXRlIHZhbHVlIGZvciB1c2UgYXMgYSBrZXkvc2FsdCBwYWlyLCB5b3UKLWNhbiB1c2UgdGhlIFx0ZXh0dHR7cmFuZFxfZ2VufSB1dGlsaXR5IGluIHRoZSBcdGV4dHR0e3Rlc3QvfQotc3ViZGlyZWN0b3J5LgotCi1BbiBleGFtcGxlIG9mIGFuIFNSVFAgc2Vzc2lvbiB1c2luZyB0d28gcnRwdyBwcm9ncmFtcyBmb2xsb3dzOgotCi1cYmVnaW57dmVyYmF0aW19Ci1bc2gxXSBzZXQgaz1gdGVzdC9yYW5kX2dlbiAtbiAzMGAKLVtzaDFdIGVjaG8gJGsKLWMxZWVjMzcxN2RhNzYxOTViYjg3ODU3ODc5MGFmNzFjNGVlOWY4NTllMTk3YTQxNGE3OGQ1YWJjNzQ1MQotW3NoMV0kIHRlc3QvcnRwdyAtcyAtayAkayAtZWEgMC4wLjAuMCA5OTk5IAotU2VjdXJpdHkgc2VydmljZXM6IGNvbmZpZGVudGlhbGl0eSBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uCi1zZXQgbWFzdGVyIGtleS9zYWx0IHRvIEMxRUVDMzcxN0RBNzYxOTVCQjg3ODU3ODc5MEFGNzFDLzRFRTlGODU5RTE5N0E0MTRBNzhENUFCQzc0NTEKLXNldHRpbmcgU1NSQyB0byAyMDc4OTE3MDUzCi1zZW5kaW5nIHdvcmQ6IEEKLXNlbmRpbmcgd29yZDogYQotc2VuZGluZyB3b3JkOiBhYQotc2VuZGluZyB3b3JkOiBhYWwKLXNlbmRpbmcgd29yZDogYWFsaWkKLXNlbmRpbmcgd29yZDogYWFtCi1zZW5kaW5nIHdvcmQ6IEFhbmkKLXNlbmRpbmcgd29yZDogYWFyZHZhcmsKLS4uLgotCi1bc2gyXSBzZXQgaz1jMWVlYzM3MTdkYTc2MTk1YmI4Nzg1Nzg3OTBhZjcxYzRlZTlmODU5ZTE5N2E0MTRhNzhkNWFiYzc0NTEKLVtzaDJdJCB0ZXN0L3J0cHcgLXIgLWsgJGsgLWVhIDAuMC4wLjAgOTk5OSAKLXNlY3VyaXR5IHNlcnZpY2VzOiBjb25maWRlbnRpYWxpdHkgbWVzc2FnZSBhdXRoZW50aWNhdGlvbgotc2V0IG1hc3RlciBrZXkvc2FsdCB0byBDMUVFQzM3MTdEQTc2MTk1QkI4Nzg1Nzg3OTBBRjcxQy80RUU5Rjg1OUUxOTdBNDE0QTc4RDVBQkM3NDUxCi0xOSBvY3RldHMgcmVjZWl2ZWQgZnJvbSBTU1JDIDIwNzg5MTcwNTMgd29yZDogQQotMTkgb2N0ZXRzIHJlY2VpdmVkIGZyb20gU1NSQyAyMDc4OTE3MDUzIHdvcmQ6IGEKLTIwIG9jdGV0cyByZWNlaXZlZCBmcm9tIFNTUkMgMjA3ODkxNzA1MyB3b3JkOiBhYQotMjEgb2N0ZXRzIHJlY2VpdmVkIGZyb20gU1NSQyAyMDc4OTE3MDUzIHdvcmQ6IGFhbAotLi4uCi1cZW5ke3ZlcmJhdGltfQotCi0KLUBlbmRsYXRleG9ubHkKLQotCi1Ac2VjdGlvbiBSZXZpZXcgU2VjdXJlIFJUUCBCYWNrZ3JvdW5kCi0KLUluIHRoaXMgc2VjdGlvbiB3ZSByZXZpZXcgU1JUUCBhbmQgaW50cm9kdWNlIHNvbWUgdGVybXMgdGhhdCBhcmUgdXNlZAotaW4gbGliU1JUUC4gIEFuIFJUUCBzZXNzaW9uIGlzIGRlZmluZWQgYnkgYSBwYWlyIG9mIGRlc3RpbmF0aW9uCi10cmFuc3BvcnQgYWRkcmVzc2VzLCB0aGF0IGlzLCBhIG5ldHdvcmsgYWRkcmVzcyBwbHVzIGEgcGFpciBvZiBVRFAKLXBvcnRzIGZvciBSVFAgYW5kIFJUQ1AuICBSVENQLCB0aGUgUlRQIGNvbnRyb2wgcHJvdG9jb2wsIGlzIHVzZWQgdG8KLWNvb3JkaW5hdGUgYmV0d2VlbiB0aGUgcGFydGljaXBhbnRzIGluIGFuIFJUUCBzZXNzaW9uLCBlLmcuIHRvIHByb3ZpZGUKLWZlZWRiYWNrIGZyb20gcmVjZWl2ZXJzIHRvIHNlbmRlcnMuICBBbiBAZSBTUlRQIEBlIHNlc3Npb24gaXMKLXNpbWlsYXJseSBkZWZpbmVkOyBpdCBpcyBqdXN0IGFuIFJUUCBzZXNzaW9uIGZvciB3aGljaCB0aGUgU1JUUAotcHJvZmlsZSBpcyBiZWluZyB1c2VkLiAgQW4gU1JUUCBzZXNzaW9uIGNvbnNpc3RzIG9mIHRoZSB0cmFmZmljIHNlbnQKLXRvIHRoZSBTUlRQIG9yIFNSVENQIGRlc3RpbmF0aW9uIHRyYW5zcG9ydCBhZGRyZXNzZXMuICBFYWNoCi1wYXJ0aWNpcGFudCBpbiBhIHNlc3Npb24gaXMgaWRlbnRpZmllZCBieSBhIHN5bmNocm9uaXphdGlvbiBzb3VyY2UKLShTU1JDKSBpZGVudGlmaWVyLiAgU29tZSBwYXJ0aWNpcGFudHMgbWF5IG5vdCBzZW5kIGFueSBTUlRQIHRyYWZmaWM7Ci10aGV5IGFyZSBjYWxsZWQgcmVjZWl2ZXJzLCBldmVuIHRob3VnaCB0aGV5IHNlbmQgb3V0IFNSVENQIHRyYWZmaWMsCi1zdWNoIGFzIHJlY2VpdmVyIHJlcG9ydHMuCi0KLVJUUCBhbGxvd3MgbXVsdGlwbGUgc291cmNlcyB0byBzZW5kIFJUUCBhbmQgUlRDUCB0cmFmZmljIGR1cmluZyB0aGUKLXNhbWUgc2Vzc2lvbi4gIFRoZSBzeW5jaHJvbml6YXRpb24gc291cmNlIGlkZW50aWZpZXIgKFNTUkMpIGlzIHVzZWQgdG8KLWRpc3Rpbmd1aXNoIHRoZXNlIHNvdXJjZXMuICBJbiBsaWJTUlRQLCB3ZSBjYWxsIHRoZSBTUlRQIGFuZCBTUlRDUAotdHJhZmZpYyBmcm9tIGEgcGFydGljdWxhciBzb3VyY2UgYSBAZSBzdHJlYW0uICBFYWNoIHN0cmVhbSBoYXMgaXRzIG93bgotU1NSQywgc2VxdWVuY2UgbnVtYmVyLCByb2xsb3ZlciBjb3VudGVyLCBhbmQgb3RoZXIgZGF0YS4gIEEgcGFydGljdWxhcgotY2hvaWNlIG9mIG9wdGlvbnMsIGNyeXB0b2dyYXBoaWMgbWVjaGFuaXNtcywgYW5kIGtleXMgaXMgY2FsbGVkIGEgQGUKLXBvbGljeS4gIEVhY2ggc3RyZWFtIHdpdGhpbiBhIHNlc3Npb24gY2FuIGhhdmUgYSBkaXN0aW5jdCBwb2xpY3kKLWFwcGxpZWQgdG8gaXQuICBBIHNlc3Npb24gcG9saWN5IGlzIGEgY29sbGVjdGlvbiBvZiBzdHJlYW0gcG9saWNpZXMuCi0KLUEgc2luZ2xlIHBvbGljeSBjYW4gYmUgdXNlZCBmb3IgYWxsIG9mIHRoZSBzdHJlYW1zIGluIGEgZ2l2ZW4gc2Vzc2lvbiwKLXRob3VnaCB0aGUgY2FzZSBpbiB3aGljaCBhIHNpbmdsZSBAZSBrZXkgaXMgc2hhcmVkIGFjcm9zcyBtdWx0aXBsZQotc3RyZWFtcyByZXF1aXJlcyBjYXJlLiAgV2hlbiBrZXkgc2hhcmluZyBpcyB1c2VkLCB0aGUgU1NSQyB2YWx1ZXMgdGhhdAotaWRlbnRpZnkgdGhlIHN0cmVhbXMgQGIgbXVzdCBiZSBkaXN0aW5jdC4gIFRoaXMgcmVxdWlyZW1lbnQgY2FuIGJlCi1lbmZvcmNlZCBieSB1c2luZyB0aGUgY29udmVudGlvbiB0aGF0IGVhY2ggU1JUUCBhbmQgU1JUQ1Aga2V5IGlzIHVzZWQKLWZvciBlbmNyeXB0aW9uIGJ5IG9ubHkgYSBzaW5nbGUgc2VuZGVyLiAgSW4gb3RoZXIgd29yZHMsIHRoZSBrZXkgaXMKLXNoYXJlZCBvbmx5IGFjcm9zcyBzdHJlYW1zIHRoYXQgb3JpZ2luYXRlIGZyb20gYSBwYXJ0aWN1bGFyIGRldmljZSAob2YKLWNvdXJzZSwgb3RoZXIgU1JUUCBwYXJ0aWNpcGFudHMgd2lsbCBuZWVkIHRvIHVzZSB0aGUga2V5IGZvcgotZGVjcnlwdGlvbikuICBsaWJTUlRQIHN1cHBvcnRzIHRoaXMgZW5mb3JjZW1lbnQgYnkgZGV0ZWN0aW5nIHRoZSBjYXNlCi1pbiB3aGljaCBhIGtleSBpcyB1c2VkIGZvciBib3RoIGluYm91bmQgYW5kIG91dGJvdW5kIGRhdGEuCi0KLQotQHNlY3Rpb24gT3ZlcnZpZXcgbGliU1JUUCBPdmVydmlldwotCi1saWJTUlRQIHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgcHJvdGVjdGluZyBSVFAgYW5kIFJUQ1AuICBSVFAgcGFja2V0cwotY2FuIGJlIGVuY3J5cHRlZCBhbmQgYXV0aGVudGljYXRlZCAodXNpbmcgdGhlIHNydHBfcHJvdGVjdCgpCi1mdW5jdGlvbiksIHR1cm5pbmcgdGhlbSBpbnRvIFNSVFAgcGFja2V0cy4gIFNpbWlsYXJseSwgU1JUUCBwYWNrZXRzCi1jYW4gYmUgZGVjcnlwdGVkIGFuZCBoYXZlIHRoZWlyIGF1dGhlbnRpY2F0aW9uIHZlcmlmaWVkICh1c2luZyB0aGUKLXNydHBfdW5wcm90ZWN0KCkgZnVuY3Rpb24pLCB0dXJuaW5nIHRoZW0gaW50byBSVFAgcGFja2V0cy4gIFNpbWlsYXIKLWZ1bmN0aW9ucyBhcHBseSBzZWN1cml0eSB0byBSVENQIHBhY2tldHMuCi0KLVRoZSB0eXBlZGVmIHNydHBfc3RyZWFtX3QgcG9pbnRzIHRvIGEgc3RydWN0dXJlIGhvbGRpbmcgYWxsIG9mIHRoZQotc3RhdGUgYXNzb2NpYXRlZCB3aXRoIGFuIFNSVFAgc3RyZWFtLCBpbmNsdWRpbmcgdGhlIGtleXMgYW5kCi1wYXJhbWV0ZXJzIGZvciBjaXBoZXIgYW5kIG1lc3NhZ2UgYXV0aGVudGljYXRpb24gZnVuY3Rpb25zIGFuZCB0aGUKLWFudGktcmVwbGF5IGRhdGEuICBBIHBhcnRpY3VsYXIgc3J0cF9zdHJlYW1fdCBob2xkcyB0aGUgaW5mb3JtYXRpb24KLW5lZWRlZCB0byBwcm90ZWN0IGEgcGFydGljdWxhciBSVFAgYW5kIFJUQ1Agc3RyZWFtLiAgVGhpcyBkYXRhdHlwZQotaXMgaW50ZW50aW9uYWxseSBvcGFxdWUgaW4gb3JkZXIgdG8gYmV0dGVyIHNlcGVyYXRlIHRoZSBsaWJTUlRQCi1BUEkgZnJvbSBpdHMgaW1wbGVtZW50YXRpb24uCi0KLVdpdGhpbiBhbiBTUlRQIHNlc3Npb24sIHRoZXJlIGNhbiBiZSBtdWx0aXBsZSBzdHJlYW1zLCBlYWNoCi1vcmlnaW5hdGluZyBmcm9tIGEgcGFydGljdWxhciBzZW5kZXIuICBFYWNoIHNvdXJjZSB1c2VzIGEgZGlzdGluY3QKLXN0cmVhbSBjb250ZXh0IHRvIHByb3RlY3QgdGhlIFJUUCBhbmQgUlRDUCBzdHJlYW0gdGhhdCBpdCBpcwotb3JpZ2luYXRpbmcuICBUaGUgdHlwZWRlZiBzcnRwX3QgcG9pbnRzIHRvIGEgc3RydWN0dXJlIGhvbGRpbmcgYWxsIG9mCi10aGUgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIGFuIFNSVFAgc2Vzc2lvbi4gIFRoZXJlIGNhbiBiZSBtdWx0aXBsZQotc3RyZWFtIGNvbnRleHRzIGFzc29jaWF0ZWQgd2l0aCBhIHNpbmdsZSBzcnRwX3QuICBBIHN0cmVhbSBjb250ZXh0Ci1jYW5ub3QgZXhpc3QgaW5kZXBlbnQgZnJvbSBhbiBzcnRwX3QsIHRob3VnaCBvZiBjb3Vyc2UgYW4gc3J0cF90IGNhbgotYmUgY3JlYXRlZCB0aGF0IGNvbnRhaW5zIG9ubHkgYSBzaW5nbGUgc3RyZWFtIGNvbnRleHQuICBBIGRldmljZQotcGFydGljaXBhdGluZyBpbiBhbiBTUlRQIHNlc3Npb24gbXVzdCBoYXZlIGEgc3RyZWFtIGNvbnRleHQgZm9yIGVhY2gKLXNvdXJjZSBpbiB0aGF0IHNlc3Npb24sIHNvIHRoYXQgaXQgY2FuIHByb2Nlc3MgdGhlIGRhdGEgdGhhdCBpdAotcmVjZWl2ZXMgZnJvbSBlYWNoIHNlbmRlci4KLQotCi1JbiBsaWJTUlRQLCBhIHNlc3Npb24gaXMgY3JlYXRlZCB1c2luZyB0aGUgZnVuY3Rpb24gc3J0cF9jcmVhdGUoKS4KLVRoZSBwb2xpY3kgdG8gYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHNlc3Npb24gaXMgcGFzc2VkIGludG8gdGhpcwotZnVuY3Rpb24gYXMgYW4gc3J0cF9wb2xpY3lfdCBzdHJ1Y3R1cmUuICBBIHNpbmdsZSBvbmUgb2YgdGhlc2UKLXN0cnVjdHVyZXMgZGVzY3JpYmVzIHRoZSBwb2xpY3kgb2YgYSBzaW5nbGUgc3RyZWFtLiAgVGhlc2Ugc3RydWN0dXJlcwotY2FuIGFsc28gYmUgbGlua2VkIHRvZ2V0aGVyIHRvIGZvcm0gYW4gZW50aXJlIHNlc3Npb24gcG9saWN5LiAgQSBsaW5rZWQKLWxpc3Qgb2Ygc3J0cF9wb2xpY3lfdCBzdHJ1Y3R1cmVzIGlzIGVxdWl2YWxlbnQgdG8gYSBzZXNzaW9uIHBvbGljeS4gIAotSW4gc3VjaCBhIHBvbGljeSwgd2UgcmVmZXIgdG8gYSBzaW5nbGUgc3J0cF9wb2xpY3lfdCBhcyBhbiBAZSBlbGVtZW50LgotCi1BbiBzcnRwX3BvbGljeV90IHN0cnVjdXRyZSBjb250YWlucyB0d28gY3J5cHRvX3BvbGljeV90IHN0cnVjdHVyZXMKLXRoYXQgZGVzY3JpYmUgdGhlIGNyeXB0b2dyYWhpYyBwb2xpY2llcyBmb3IgUlRQIGFuZCBSVENQLCBhcyB3ZWxsIGFzCi10aGUgU1JUUCBtYXN0ZXIga2V5IGFuZCB0aGUgU1NSQyB2YWx1ZS4gIFRoZSBTU1JDIGRlc2NyaWJlcyB3aGF0IHRvCi1wcm90ZWN0IChlLmcuIHdoaWNoIHN0cmVhbSksIGFuZCB0aGUgY3J5cHRvX3BvbGljeV90IHN0cnVjdHVyZXMKLWRlc2NyaWJlIGhvdyB0byBwcm90ZWN0IGl0LiAgVGhlIGtleSBpcyBjb250YWluZWQgaW4gYSBwb2xpY3kgZWxlbWVudAotYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBpbnRlcmZhY2UgdG8gdGhlIGxpYnJhcnkuICBJbiBtYW55IGNhc2VzLCBpdAotaXMgZGVzaXJhYmxlIHRvIHVzZSB0aGUgc2FtZSBjcnlwdG9ncmFwaGljIHBvbGljaWVzIGFjcm9zcyBhbGwgb2YgdGhlCi1zdHJlYW1zIGluIGEgc2Vzc2lvbiwgYnV0IHRvIHVzZSBhIGRpc3RpbmN0IGtleSBmb3IgZWFjaCBzdHJlYW0uICBBCi1jcnlwdG9fcG9saWN5X3Qgc3RydWN0dXJlIGNhbiBiZSBpbml0aWFsaXplZCBieSB1c2luZyBlaXRoZXIgdGhlCi1jcnlwdG9fcG9saWN5X3NldF9ydHBfZGVmYXVsdCgpIG9yIGNyeXB0b19wb2xpY3lfc2V0X3J0Y3BfZGVmYXVsdCgpCi1mdW5jdGlvbnMsIHdoaWNoIHNldCBhIGNyeXB0byBwb2xpY3kgc3RydWN0dXJlIHRvIHRoZSBkZWZhdWx0IHBvbGljaWVzCi1mb3IgUlRQIGFuZCBSVENQIHByb3RlY3Rpb24sIHJlc3BlY3RpdmVseS4KLQkJCQkgICAKLUBzZWN0aW9uIEV4YW1wbGUgRXhhbXBsZSBDb2RlCi0KLVRoaXMgc2VjdGlvbiBwcm92aWRlcyBhIHNpbXBsZSBleGFtcGxlIG9mIGhvdyB0byB1c2UgbGliU1JUUC4gIFRoZQotZXhhbXBsZSBjb2RlIGxhY2tzIGVycm9yIGNoZWNraW5nLCBidXQgaXMgZnVuY3Rpb25hbC4gIEhlcmUgd2UgYXNzdW1lCi10aGF0IHRoZSB2YWx1ZSBzc3JjIGlzIGFscmVhZHkgc2V0IHRvIGRlc2NyaWJlIHRoZSBTU1JDIG9mIHRoZSBzdHJlYW0KLXRoYXQgd2UgYXJlIHNlbmRpbmcsIGFuZCB0aGF0IHRoZSBmdW5jdGlvbnMgZ2V0X3J0cF9wYWNrZXQoKSBhbmQKLXNlbmRfc3J0cF9wYWNrZXQoKSBhcmUgYXZhaWxhYmxlIHRvIHVzLiAgVGhlIGZvcm1lciBwdXRzIGFuIFJUUCBwYWNrZXQKLWludG8gdGhlIGJ1ZmZlciBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIG9jdGV0cyB3cml0dGVuIHRvIHRoYXQKLWJ1ZmZlci4gIFRoZSBsYXR0ZXIgc2VuZHMgdGhlIFJUUCBwYWNrZXQgaW4gdGhlIGJ1ZmZlciwgZ2l2ZW4gdGhlCi1sZW5ndGggYXMgaXRzIHNlY29uZCBhcmd1bWVudC4KLQotQHZlcmJhdGltCi0gICBzcnRwX3Qgc2Vzc2lvbjsgICAKLSAgIHNydHBfcG9saWN5X3QgcG9saWN5OwotICAgb2N0ZXRfdCBrZXlbMzBdOwotCi0gICAvKiBpbml0aWFsaXplIGxpYlNSVFAgKi8KLSAgIHNydHBfaW5pdCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQotICAgLyogc2V0IHBvbGljeSB0byBkZXNjcmliZSBhIHBvbGljeSBmb3IgYW4gU1JUUCBzdHJlYW0gKi8KLSAgIGNyeXB0b19wb2xpY3lfc2V0X3J0cF9kZWZhdWx0KCZwb2xpY3kucnRwKTsgICAKLSAgIGNyeXB0b19wb2xpY3lfc2V0X3J0Y3BfZGVmYXVsdCgmcG9saWN5LnJ0Y3ApOyAKLSAgIHBvbGljeS5zc3JjID0gc3NyYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICBwb2xpY3kua2V5ICA9IGtleTsKLSAgIHBvbGljeS5uZXh0ID0gTlVMTDsKLQotICAgLyogc2V0IGtleSB0byByYW5kb20gdmFsdWUgKi8KLSAgIGNyeXB0b19nZXRfcmFuZG9tKGtleSwgMzApOyAgICAgICAgICAKLQotICAgLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIFNSVFAgc2Vzc2lvbiAqLwotICAgc3J0cF9jcmVhdGUoJnNlc3Npb24sIHBvbGljeSk7ICAKLSAgIAotICAgLyogbWFpbiBsb29wOiBnZXQgcnRwIHBhY2tldHMsIHNlbmQgc3J0cCBwYWNrZXRzICovCi0gICB3aGlsZSAoMSkgewotICAgICAgY2hhciBydHBfYnVmZmVyWzIwNDhdOwotICAgICAgdW5zaWduZWQgbGVuOwotCi0gICAgICBsZW4gPSBnZXRfcnRwX3BhY2tldChydHBfYnVmZmVyKTsKLSAgICAgIHNydHBfcHJvdGVjdChzZXNzaW9uLCBydHBfYnVmZmVyLCAmbGVuKTsKLSAgICAgIHNlbmRfc3J0cF9wYWNrZXQocnRwX2J1ZmZlciwgbGVuKTsKLSAgIH0KLUBlbmR2ZXJiYXRpbQotCi0KLSAqLwpkaWZmIC0tZ2l0IGEvZG9jL2xpYnNydHAucGRmIGIvZG9jL2xpYnNydHAucGRmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTE5NjRmLi4wMDAwMDAwCi0tLSBhL2RvYy9saWJzcnRwLnBkZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9yZWZlcmVuY2VzLnR4dCBiL2RvYy9yZWZlcmVuY2VzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVjOWQ0My4uMDAwMDAwMAotLS0gYS9kb2MvcmVmZXJlbmNlcy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi1TUlRQIGFuZCBJQ00gUmVmZXJlbmNlcyAKLVNlcHRlbWJlciwgMjAwNQotCi1UaGlzIGRvY3VtZW50IHByb3ZpZGVzIHJlZmVyZW5jZXMgZm9yIHRoZSB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKLWZ1bmN0aW9ucyB1c2VkIGluIGxpYlNSVFAgYW5kIGxpYmFlc2ljbS4KLQotU2VjdXJlIFJUUCBpcyBkZWZpbmVkIGluIFJGQyAzNzExLCB3aGljaCBpcyBpbmNsdWRlZCBpbiB0aGlzCi1kaXN0cmlidXRpb24gZm9yIGNvbnZlbmllbmNlLiAgVGhlIGNvdW50ZXIgbW9kZSBkZWZpbml0aW9uIGlzIGluCi1TZWN0aW9uIDQuMS4xIG9mIHRoZSBTUlRQIGRyYWZ0LgotCi1TSEEtMSBpcyBkZWZpbmVkIGluIEZJUFMtMTgwLTEsIGF2YWlsYWJsZSBvbmxpbmUgYXQgdGhlIE5JU1Qgd2Vic2l0ZS4KLQotSE1BQyBpcyBkZWZpbmVkIGluIFJGQzIxMDQsIGFuZCBITUFDLVNIQTEgdGVzdCB2ZWN0b3JzIGFyZSBhdmFpbGFibGUKLWluIFJGQzIyMDIsIHdoaWNoIGFyZSBhdmFpbGFibGUgb25saW5lIGF0IGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjLwotCi1JQ00gaXMgZGVmaW5lZCBieSBkcmFmdC1pcnRmLWNmcmctaWNtLTAwLnR4dCwgYW5kIGl0cyBhcHBsaWNhdGlvbiBpbgotSVNNQWNyeXAgKHRoZSBJbnRlcm5ldCBTdHJlYW1pbmcgTWVkaWEgQWxsaWFuY2UgMS4wIEVuY3J5cHRpb24gYW5kCi1BdXRoZW50aWNhdGlvbikgaXMgZGVmaW5lZCBpbiB0aGF0IHNwZWNpZmljYXRpb24uICBJdCBpcyBhdmFpbGFibGUKLWZyb20gaHR0cDovL3d3dy5pc21hLnR2Ly4KLQotCmRpZmYgLS1naXQgYS9kb2MvcmZjMzcxMS50eHQgYi9kb2MvcmZjMzcxMS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjYzA2NDguLjAwMDAwMDAKLS0tIGEvZG9jL3JmYzM3MTEudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzEzOSArMCwwIEBACi0KLQotCi0KLQotCi1OZXR3b3JrIFdvcmtpbmcgR3JvdXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE0uIEJhdWdoZXIKLVJlcXVlc3QgZm9yIENvbW1lbnRzOiAzNzExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQuIE1jR3JldwotQ2F0ZWdvcnk6IFN0YW5kYXJkcyBUcmFjayAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaXNjbyBTeXN0ZW1zLCBJbmMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE0uIE5hc2x1bmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRS4gQ2FycmFyYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLLiBOb3JybWFuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXJpY3Nzb24gUmVzZWFyY2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFyY2ggMjAwNAotCi0KLSAgICAgICAgICAgICBUaGUgU2VjdXJlIFJlYWwtdGltZSBUcmFuc3BvcnQgUHJvdG9jb2wgKFNSVFApCi0KLVN0YXR1cyBvZiB0aGlzIE1lbW8KLQotICAgVGhpcyBkb2N1bWVudCBzcGVjaWZpZXMgYW4gSW50ZXJuZXQgc3RhbmRhcmRzIHRyYWNrIHByb3RvY29sIGZvciB0aGUKLSAgIEludGVybmV0IGNvbW11bml0eSwgYW5kIHJlcXVlc3RzIGRpc2N1c3Npb24gYW5kIHN1Z2dlc3Rpb25zIGZvcgotICAgaW1wcm92ZW1lbnRzLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBjdXJyZW50IGVkaXRpb24gb2YgdGhlICJJbnRlcm5ldAotICAgT2ZmaWNpYWwgUHJvdG9jb2wgU3RhbmRhcmRzIiAoU1REIDEpIGZvciB0aGUgc3RhbmRhcmRpemF0aW9uIHN0YXRlCi0gICBhbmQgc3RhdHVzIG9mIHRoaXMgcHJvdG9jb2wuICBEaXN0cmlidXRpb24gb2YgdGhpcyBtZW1vIGlzIHVubGltaXRlZC4KLQotQ29weXJpZ2h0IE5vdGljZQotCi0gICBDb3B5cmlnaHQgKEMpIFRoZSBJbnRlcm5ldCBTb2NpZXR5ICgyMDA0KS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0KLUFic3RyYWN0Ci0KLSAgIFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBTZWN1cmUgUmVhbC10aW1lIFRyYW5zcG9ydCBQcm90b2NvbAotICAgKFNSVFApLCBhIHByb2ZpbGUgb2YgdGhlIFJlYWwtdGltZSBUcmFuc3BvcnQgUHJvdG9jb2wgKFJUUCksIHdoaWNoCi0gICBjYW4gcHJvdmlkZSBjb25maWRlbnRpYWxpdHksIG1lc3NhZ2UgYXV0aGVudGljYXRpb24sIGFuZCByZXBsYXkKLSAgIHByb3RlY3Rpb24gdG8gdGhlIFJUUCB0cmFmZmljIGFuZCB0byB0aGUgY29udHJvbCB0cmFmZmljIGZvciBSVFAsIHRoZQotICAgUmVhbC10aW1lIFRyYW5zcG9ydCBDb250cm9sIFByb3RvY29sIChSVENQKS4KLQotVGFibGUgb2YgQ29udGVudHMKLQotICAgMS4gIEludHJvZHVjdGlvbiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAzCi0gICAgICAgMS4xLiAgTm90YXRpb25hbCBDb252ZW50aW9ucyAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDMKLSAgIDIuICBHb2FscyBhbmQgRmVhdHVyZXMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNAotICAgICAgIDIuMS4gIEZlYXR1cmVzIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA1Ci0gICAzLiAgU1JUUCBGcmFtZXdvcmsgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDUKLSAgICAgICAzLjEuICBTZWN1cmUgUlRQIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNgotICAgICAgIDMuMi4gIFNSVFAgQ3J5cHRvZ3JhcGhpYyBDb250ZXh0cy4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA3Ci0gICAgICAgICAgICAgMy4yLjEuICBUcmFuc2Zvcm0taW5kZXBlbmRlbnQgcGFyYW1ldGVycyAuIC4gLiAuIC4gLiAuIC4gIDgKLSAgICAgICAgICAgICAzLjIuMi4gIFRyYW5zZm9ybS1kZXBlbmRlbnQgcGFyYW1ldGVycyAuIC4gLiAuIC4gLiAuIC4gLiAxMAotICAgICAgICAgICAgIDMuMi4zLiAgTWFwcGluZyBTUlRQIFBhY2tldHMgdG8gQ3J5cHRvZ3JhcGhpYyBDb250ZXh0cyAuIDEwCi0gICAgICAgMy4zLiAgU1JUUCBQYWNrZXQgUHJvY2Vzc2luZyAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gMTEKLSAgICAgICAgICAgICAzLjMuMS4gIFBhY2tldCBJbmRleCBEZXRlcm1pbmF0aW9uLCBhbmQgUk9DLCBzX2wgVXBkYXRlLiAxMwotICAgICAgICAgICAgIDMuMy4yLiAgUmVwbGF5IFByb3RlY3Rpb24uIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIDE1Ci0gICAgICAzLjQuICBTZWN1cmUgUlRDUCAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gMTUKLQotCi0KLUJhdWdoZXIsIGV0IGFsLiAgICAgICAgICAgICBTdGFuZGFyZHMgVHJhY2sgICAgICAgICAgICAgICAgICAgICBbUGFnZSAxXQotDAotUkZDIDM3MTEgICAgICAgICAgICAgICAgICAgICAgICAgIFNSVFAgICAgICAgICAgICAgICAgICAgICAgICBNYXJjaCAyMDA0Ci0KLQotICAgNC4gIFByZS1EZWZpbmVkIENyeXB0b2dyYXBoaWMgVHJhbnNmb3JtcyAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIDE5Ci0gICAgICAgNC4xLiAgRW5jcnlwdGlvbiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gMTkKLSAgICAgICAgICAgICA0LjEuMS4gIEFFUyBpbiBDb3VudGVyIE1vZGUuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAyMQotICAgICAgICAgICAgIDQuMS4yLiAgQUVTIGluIGY4LW1vZGUgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIDIyCi0gICAgICAgICAgICAgNC4xLjMuICBOVUxMIENpcGhlci4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gMjUKLSAgICAgICA0LjIuICBNZXNzYWdlIEF1dGhlbnRpY2F0aW9uIGFuZCBJbnRlZ3JpdHkgLiAuIC4gLiAuIC4gLiAuIC4gLiAyNQotICAgICAgICAgICAgIDQuMi4xLiAgSE1BQy1TSEExLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIDI1Ci0gICAgICAgNC4zLiAgS2V5IERlcml2YXRpb24gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gMjYKLSAgICAgICAgICAgICA0LjMuMS4gIEtleSBEZXJpdmF0aW9uIEFsZ29yaXRobSAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAyNgotICAgICAgICAgICAgIDQuMy4yLiAgU1JUQ1AgS2V5IERlcml2YXRpb24gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIDI4Ci0gICAgICAgICAgICAgNC4zLjMuICBBRVMtQ00gUFJGIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gMjgKLSAgIDUuICBEZWZhdWx0IGFuZCBtYW5kYXRvcnktdG8taW1wbGVtZW50IFRyYW5zZm9ybXMuIC4gLiAuIC4gLiAuIC4gLiAyOAotICAgICAgIDUuMS4gIEVuY3J5cHRpb246IEFFUy1DTSBhbmQgTlVMTC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIDI5Ci0gICAgICAgNS4yLiAgTWVzc2FnZSBBdXRoZW50aWNhdGlvbi9JbnRlZ3JpdHk6IEhNQUMtU0hBMS4gLiAuIC4gLiAuIC4gMjkKLSAgICAgICA1LjMuICBLZXkgRGVyaXZhdGlvbjogQUVTLUNNIFBSRiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAyOQotICAgNi4gIEFkZGluZyBTUlRQIFRyYW5zZm9ybXMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIDI5Ci0gICA3LiAgUmF0aW9uYWxlLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gMzAKLSAgICAgICA3LjEuICBLZXkgZGVyaXZhdGlvbiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAzMAotICAgICAgIDcuMi4gIFNhbHRpbmcga2V5LiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIDMwCi0gICAgICAgNy4zLiAgTWVzc2FnZSBJbnRlZ3JpdHkgZnJvbSBVbml2ZXJzYWwgSGFzaGluZyAuIC4gLiAuIC4gLiAuIC4gMzEKLSAgICAgICA3LjQuICBEYXRhIE9yaWdpbiBBdXRoZW50aWNhdGlvbiBDb25zaWRlcmF0aW9ucy4gLiAuIC4gLiAuIC4gLiAzMQotICAgICAgIDcuNS4gIFNob3J0IGFuZCBaZXJvLWxlbmd0aCBNZXNzYWdlIEF1dGhlbnRpY2F0aW9uIC4gLiAuIC4gLiAuIDMyCi0gICA4LiAgS2V5IE1hbmFnZW1lbnQgQ29uc2lkZXJhdGlvbnMuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gMzMKLSAgICAgICA4LjEuICBSZS1rZXlpbmcgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAzNAotICAgICAgICAgICAgIDguMS4xLiAgVXNlIG9mIHRoZSA8RnJvbSwgVG8+IGZvciByZS1rZXlpbmcuIC4gLiAuIC4gLiAuIDM0Ci0gICAgICAgOC4yLiAgS2V5IE1hbmFnZW1lbnQgcGFyYW1ldGVycy4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gMzUKLSAgIDkuICBTZWN1cml0eSBDb25zaWRlcmF0aW9ucy4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAzNwotICAgICAgIDkuMS4gIFNTUkMgY29sbGlzaW9uIGFuZCB0d28tdGltZSBwYWQuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIDM3Ci0gICAgICAgOS4yLiAgS2V5IFVzYWdlLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gMzgKLSAgICAgICA5LjMuICBDb25maWRlbnRpYWxpdHkgb2YgdGhlIFJUUCBQYXlsb2FkIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAzOQotICAgICAgIDkuNC4gIENvbmZpZGVudGlhbGl0eSBvZiB0aGUgUlRQIEhlYWRlci4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIDQwCi0gICAgICAgOS41LiAgSW50ZWdyaXR5IG9mIHRoZSBSVFAgcGF5bG9hZCBhbmQgaGVhZGVyLiAuIC4gLiAuIC4gLiAuIC4gNDAKLSAgICAgICAgICAgICA5LjUuMS4gUmlza3Mgb2YgV2VhayBvciBOdWxsIE1lc3NhZ2UgQXV0aGVudGljYXRpb24uIC4gLiA0MgotICAgICAgICAgICAgIDkuNS4yLiAgSW1wbGljaXQgSGVhZGVyIEF1dGhlbnRpY2F0aW9uIC4gLiAuIC4gLiAuIC4gLiAuIDQzCi0gICAxMC4gIEludGVyYWN0aW9uIHdpdGggRm9yd2FyZCBFcnJvciBDb3JyZWN0aW9uIG1lY2hhbmlzbXMuIC4gLiAuIC4gNDMKLSAgIDExLiAgU2NlbmFyaW9zIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiA0MwotICAgICAgIDExLjEuIFVuaWNhc3QuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIDQzCi0gICAgICAgMTEuMi4gTXVsdGljYXN0IChvbmUgc2VuZGVyKSAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gNDQKLSAgICAgICAxMS4zLiBSZS1rZXlpbmcgYW5kIGFjY2VzcyBjb250cm9sIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiA0NQotICAgICAgIDExLjQuIFN1bW1hcnkgb2YgYmFzaWMgc2NlbmFyaW9zIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIDQ2Ci0gICAxMi4gSUFOQSBDb25zaWRlcmF0aW9ucy4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gNDYKLSAgIDEzLiBBY2tub3dsZWRnZW1lbnRzIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiA0NwotICAgMTQuIFJlZmVyZW5jZXMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIDQ3Ci0gICAgICAgMTQuMS4gTm9ybWF0aXZlIFJlZmVyZW5jZXMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gNDcKLSAgICAgICAxNC4yLiBJbmZvcm1hdGl2ZSBSZWZlcmVuY2VzIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiA0OAotICAgQXBwZW5kaXggQTogUHNldWRvY29kZSBmb3IgSW5kZXggRGV0ZXJtaW5hdGlvbiAuIC4gLiAuIC4gLiAuIC4gLiAuIDUxCi0gICBBcHBlbmRpeCBCOiBUZXN0IFZlY3RvcnMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gNTEKLSAgICAgICBCLjEuICBBRVMtZjggVGVzdCBWZWN0b3JzLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiA1MQotCi0KLQotQmF1Z2hlciwgZXQgYWwuICAgICAgICAgICAgIFN0YW5kYXJkcyBUcmFjayAgICAgICAgICAgICAgICAgICAgIFtQYWdlIDJdCi0MCi1SRkMgMzcxMSAgICAgICAgICAgICAgICAgICAgICAgICAgU1JUUCAgICAgICAgICAgICAgICAgICAgICAgIE1hcmNoIDIwMDQKLQotCi0gICAgICAgQi4yLiAgQUVTLUNNIFRlc3QgVmVjdG9ycy4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gNTIKLSAgICAgICBCLjMuICBLZXkgRGVyaXZhdGlvbiBUZXN0IFZlY3RvcnMuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiA1MwotICAgQXV0aG9ycycgQWRkcmVzc2VzIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIDU1Ci0gICBGdWxsIENvcHlyaWdodCBTdGF0ZW1lbnQgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gNTYKLQotMS4gIEludHJvZHVjdGlvbgotCi0gICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgU2VjdXJlIFJlYWwtdGltZSBUcmFuc3BvcnQgUHJvdG9jb2wKLSAgIChTUlRQKSwgYSBwcm9maWxlIG9mIHRoZSBSZWFsLXRpbWUgVHJhbnNwb3J0IFByb3RvY29sIChSVFApLCB3aGljaAotICAgY2FuIHByb3ZpZGUgY29uZmlkZW50aWFsaXR5LCBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uLCBhbmQgcmVwbGF5Ci0gICBwcm90ZWN0aW9uIHRvIHRoZSBSVFAgdHJhZmZpYyBhbmQgdG8gdGhlIGNvbnRyb2wgdHJhZmZpYyBmb3IgUlRQLAotICAgUlRDUCAodGhlIFJlYWwtdGltZSBUcmFuc3BvcnQgQ29udHJvbCBQcm90b2NvbCkgW1JGQzMzNTBdLgotCi0gICBTUlRQIHByb3ZpZGVzIGEgZnJhbWV3b3JrIGZvciBlbmNyeXB0aW9uIGFuZCBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uCi0gICBvZiBSVFAgYW5kIFJUQ1Agc3RyZWFtcyAoU2VjdGlvbiAzKS4gIFNSVFAgZGVmaW5lcyBhIHNldCBvZiBkZWZhdWx0Ci0gICBjcnlwdG9ncmFwaGljIHRyYW5zZm9ybXMgKFNlY3Rpb25zIDQgYW5kIDUpLCBhbmQgaXQgYWxsb3dzIG5ldwotICAgdHJhbnNmb3JtcyB0byBiZSBpbnRyb2R1Y2VkIGluIHRoZSBmdXR1cmUgKFNlY3Rpb24gNikuICBXaXRoCi0gICBhcHByb3ByaWF0ZSBrZXkgbWFuYWdlbWVudCAoU2VjdGlvbnMgNyBhbmQgOCksIFNSVFAgaXMgc2VjdXJlCi0gICAoU2VjdGlvbnMgOSkgZm9yIHVuaWNhc3QgYW5kIG11bHRpY2FzdCBSVFAgYXBwbGljYXRpb25zIChTZWN0aW9uIDExKS4KLQotICAgU1JUUCBjYW4gYWNoaWV2ZSBoaWdoIHRocm91Z2hwdXQgYW5kIGxvdyBwYWNrZXQgZXhwYW5zaW9uLiAgU1JUUAotICAgcHJvdmVzIHRvIGJlIGEgc3VpdGFibGUgcHJvdGVjdGlvbiBmb3IgaGV0ZXJvZ2VuZW91cyBlbnZpcm9ubWVudHMKLSAgIChtaXggb2Ygd2lyZWQgYW5kIHdpcmVsZXNzIG5ldHdvcmtzKS4gIFRvIGdldCBzdWNoIGZlYXR1cmVzLCBkZWZhdWx0Ci0gICB0cmFuc2Zvcm1zIGFyZSBkZXNjcmliZWQsIGJhc2VkIG9uIGFuIGFkZGl0aXZlIHN0cmVhbSBjaXBoZXIgZm9yCi0gICBlbmNyeXB0aW9uLCBhIGtleWVkLWhhc2ggYmFzZWQgZnVuY3Rpb24gZm9yIG1lc3NhZ2UgYXV0aGVudGljYXRpb24sCi0gICBhbmQgYW4gImltcGxpY2l0IiBpbmRleCBmb3Igc2VxdWVuY2luZy9zeW5jaHJvbml6YXRpb24gYmFzZWQgb24gdGhlCi0gICBSVFAgc2VxdWVuY2UgbnVtYmVyIGZvciBTUlRQIGFuZCBhbiBpbmRleCBudW1iZXIgZm9yIFNlY3VyZSBSVENQCi0gICAoU1JUQ1ApLgotCi0xLjEuICBOb3RhdGlvbmFsIENvbnZlbnRpb25zCi0KLSAgIFRoZSBrZXl3b3JkcyAiTVVTVCIsICJNVVNUIE5PVCIsICJSRVFVSVJFRCIsICJTSEFMTCIsICJTSEFMTCBOT1QiLAotICAgIlNIT1VMRCIsICJTSE9VTEQgTk9UIiwgIlJFQ09NTUVOREVEIiwgIk1BWSIsIGFuZCAiT1BUSU9OQUwiIGluIHRoaXMKLSAgIGRvY3VtZW50IGFyZSB0byBiZSBpbnRlcnByZXRlZCBhcyBkZXNjcmliZWQgaW4gW1JGQzIxMTldLiAgVGhlCi0gICB0ZXJtaW5vbG9neSBjb25mb3JtcyB0byBbUkZDMjgyOF0gd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbi4gIEZvcgotICAgc2ltcGxpY2l0eSB3ZSB1c2UgdGhlIHRlcm0gInJhbmRvbSIgdGhyb3VnaG91dCB0aGUgZG9jdW1lbnQgdG8gZGVub3RlCi0gICByYW5kb21seSBvciBwc2V1ZG8tcmFuZG9tbHkgZ2VuZXJhdGVkIHZhbHVlcy4gIExhcmdlIGFtb3VudHMgb2YKLSAgIHJhbmRvbSBiaXRzIG1heSBiZSBkaWZmaWN1bHQgdG8gb2J0YWluLCBhbmQgZm9yIHRoZSBzZWN1cml0eSBvZiBTUlRQLAotICAgcHNldWRvLXJhbmRvbW5lc3MgaXMgc3VmZmljaWVudCBbUkZDMTc1MF0uCi0KLSAgIEJ5IGNvbnZlbnRpb24sIHRoZSBhZG9wdGVkIHJlcHJlc2VudGF0aW9uIGlzIHRoZSBuZXR3b3JrIGJ5dGUgb3JkZXIsCi0gICBpLmUuLCB0aGUgbGVmdCBtb3N0IGJpdCAob2N0ZXQpIGlzIHRoZSBtb3N0IHNpZ25pZmljYW50IG9uZS4gIEJ5IFhPUgotICAgd2UgbWVhbiBiaXR3aXNlIGFkZGl0aW9uIG1vZHVsbyAyIG9mIGJpbmFyeSBzdHJpbmdzLCBhbmQgfHwgZGVub3RlcwotICAgY29uY2F0ZW5hdGlvbi4gIEluIG90aGVyIHdvcmRzLCBpZiBDID0gQSB8fCBCLCB0aGVuIHRoZSBtb3N0Ci0gICBzaWduaWZpY2FudCBiaXRzIG9mIEMgYXJlIHRoZSBiaXRzIG9mIEEsIGFuZCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQKLSAgIGJpdHMgb2YgQyBlcXVhbCB0aGUgYml0cyBvZiBCLiAgSGV4YWRlY2ltYWwgbnVtYmVycyBhcmUgcHJlZml4ZWQgYnkKLSAgIDB4LgotCi0KLQotCi1CYXVnaGVyLCBldCBhbC4gICAgICAgICAgICAgU3RhbmRhcmRzIFRyYWNrICAgICAgICAgICAgICAgICAgICAgW1BhZ2UgM10KLQwKLVJGQyAzNzExICAgICAgICAgICAgICAgICAgICAgICAgICBTUlRQICAgICAgICAgICAgICAgICAgICAgICAgTWFyY2ggMjAwNAotCi0KLSAgIFRoZSB3b3JkICJlbmNyeXB0aW9uIiBpbmNsdWRlcyBhbHNvIHVzZSBvZiB0aGUgTlVMTCBhbGdvcml0aG0gKHdoaWNoCi0gICBpbiBwcmFjdGljZSBkb2VzIGxlYXZlIHRoZSBkYXRhIGluIHRoZSBjbGVhcikuCi0KLSAgIFdpdGggc2xpZ2h0IGFidXNlIG9mIG5vdGF0aW9uLCB3ZSB1c2UgdGhlIHRlcm1zICJtZXNzYWdlCi0gICBhdXRoZW50aWNhdGlvbiIgYW5kICJhdXRoZW50aWNhdGlvbiB0YWciIGFzIGlzIGNvbW1vbiBwcmFjdGljZSwgZXZlbgotICAgdGhvdWdoIGluIHNvbWUgY2lyY3Vtc3RhbmNlcywgZS5nLiwgZ3JvdXAgY29tbXVuaWNhdGlvbiwgdGhlIHNlcnZpY2UKLSAgIHByb3ZpZGVkIGlzIGFjdHVhbGx5IG9ubHkgaW50ZWdyaXR5IHByb3RlY3Rpb24gYW5kIG5vdCBkYXRhIG9yaWdpbgotICAgYXV0aGVudGljYXRpb24uCi0KLTIuICBHb2FscyBhbmQgRmVhdHVyZXMKLQotICAgVGhlIHNlY3VyaXR5IGdvYWxzIGZvciBTUlRQIGFyZSB0byBlbnN1cmU6Ci0KLSAgICogIHRoZSBjb25maWRlbnRpYWxpdHkgb2YgdGhlIFJUUCBhbmQgUlRDUCBwYXlsb2FkcywgYW5kCi0KLSAgICogIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGVudGlyZSBSVFAgYW5kIFJUQ1AgcGFja2V0cywgdG9nZXRoZXIgd2l0aAotICAgICAgcHJvdGVjdGlvbiBhZ2FpbnN0IHJlcGxheWVkIHBhY2tldHMuCi0KLSAgIFRoZXNlIHNlY3VyaXR5IHNlcnZpY2VzIGFyZSBvcHRpb25hbCBhbmQgaW5kZXBlbmRlbnQgZnJvbSBlYWNoIG90aGVyLAotICAgZXhjZXB0IHRoYXQgU1JUQ1AgaW50ZWdyaXR5IHByb3RlY3Rpb24gaXMgbWFuZGF0b3J5IChtYWxpY2lvdXMgb3IKLSAgIGVycm9uZW91cyBhbHRlcmF0aW9uIG9mIFJUQ1AgbWVzc2FnZXMgY291bGQgb3RoZXJ3aXNlIGRpc3J1cHQgdGhlCi0gICBwcm9jZXNzaW5nIG9mIHRoZSBSVFAgc3RyZWFtKS4KLQotICAgT3RoZXIsIGZ1bmN0aW9uYWwsIGdvYWxzIGZvciB0aGUgcHJvdG9jb2wgYXJlOgotCi0gICAqICBhIGZyYW1ld29yayB0aGF0IHBlcm1pdHMgdXBncmFkaW5nIHdpdGggbmV3IGNyeXB0b2dyYXBoaWMKLSAgICAgIHRyYW5zZm9ybXMsCi0KLSAgICogIGxvdyBiYW5kd2lkdGggY29zdCwgaS5lLiwgYSBmcmFtZXdvcmsgcHJlc2VydmluZyBSVFAgaGVhZGVyCi0gICAgICBjb21wcmVzc2lvbiBlZmZpY2llbmN5LAotCi0gICBhbmQsIGFzc2VydGVkIGJ5IHRoZSBwcmUtZGVmaW5lZCB0cmFuc2Zvcm1zOgotCi0gICAqICBhIGxvdyBjb21wdXRhdGlvbmFsIGNvc3QsCi0KLSAgICogIGEgc21hbGwgZm9vdHByaW50IChpLmUuLCBzbWFsbCBjb2RlIHNpemUgYW5kIGRhdGEgbWVtb3J5IGZvcgotICAgICAga2V5aW5nIGluZm9ybWF0aW9uIGFuZCByZXBsYXkgbGlzdHMpLAotCi0gICAqICBsaW1pdGVkIHBhY2tldCBleHBhbnNpb24gdG8gc3VwcG9ydCB0aGUgYmFuZHdpZHRoIGVjb25vbXkgZ29hbCwKLQotICAgKiAgaW5kZXBlbmRlbmNlIGZyb20gdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0LCBuZXR3b3JrLCBhbmQgcGh5c2ljYWwKLSAgICAgIGxheWVycyB1c2VkIGJ5IFJUUCwgaW4gcGFydGljdWxhciBoaWdoIHRvbGVyYW5jZSB0byBwYWNrZXQgbG9zcwotICAgICAgYW5kIHJlLW9yZGVyaW5nLgotCi0gICBUaGVzZSBwcm9wZXJ0aWVzIGVuc3VyZSB0aGF0IFNSVFAgaXMgYSBzdWl0YWJsZSBwcm90ZWN0aW9uIHNjaGVtZSBmb3IKLSAgIFJUUC9SVENQIGluIGJvdGggd2lyZWQgYW5kIHdpcmVsZXNzIHNjZW5hcmlvcy4KLQotCi0KLQotCi1CYXVnaGVyLCBldCBhbC4gICAgICAgICAgICAgU3RhbmRhcmRzIFRyYWNrICAgICAgICAgICAgICAgICAgICAgW1BhZ2UgNF0KLQwKLVJGQyAzNzExICAgICAgICAgICAgICAgICAgICAgICAgICBTUlRQICAgICAgICAgICAgICAgICAgICAgICAgTWFyY2ggMjAwNAotCi0KLTIuMS4gIEZlYXR1cmVzCi0KLSAgIEJlc2lkZXMgdGhlIGFib3ZlIG1lbnRpb25lZCBkaXJlY3QgZ29hbHMsIFNSVFAgcHJvdmlkZXMgZm9yIHNvbWUKLSAgIGFkZGl0aW9uYWwgZmVhdHVyZXMuICBUaGV5IGhhdmUgYmVlbiBpbnRyb2R1Y2VkIHRvIGxpZ2h0ZW4gdGhlIGJ1cmRlbgotICAgb24ga2V5IG1hbmFnZW1lbnQgYW5kIHRvIGZ1cnRoZXIgaW5jcmVhc2Ugc2VjdXJpdHkuICBUaGV5IGluY2x1ZGU6Ci0KLSAgICogIEEgc2luZ2xlICJtYXN0ZXIga2V5IiBjYW4gcHJvdmlkZSBrZXlpbmcgbWF0ZXJpYWwgZm9yCi0gICAgICBjb25maWRlbnRpYWxpdHkgYW5kIGludGVncml0eSBwcm90ZWN0aW9uLCBib3RoIGZvciB0aGUgU1JUUCBzdHJlYW0KLSAgICAgIGFuZCB0aGUgY29ycmVzcG9uZGluZyBTUlRDUCBzdHJlYW0uICBUaGlzIGlzIGFjaGlldmVkIHdpdGggYSBrZXkKLSAgICAgIGRlcml2YXRpb24gZnVuY3Rpb24gKHNlZSBTZWN0aW9uIDQuMyksIHByb3ZpZGluZyAic2Vzc2lvbiBrZXlzIgotICAgICAgZm9yIHRoZSByZXNwZWN0aXZlIHNlY3VyaXR5IHByaW1pdGl2ZSwgc2VjdXJlbHkgZGVyaXZlZCBmcm9tIHRoZQotICAgICAgbWFzdGVyIGtleS4KLQotICAgKiAgSW4gYWRkaXRpb24sIHRoZSBrZXkgZGVyaXZhdGlvbiBjYW4gYmUgY29uZmlndXJlZCB0byBwZXJpb2RpY2FsbHkKLSAgICAgIHJlZnJlc2ggdGhlIHNlc3Npb24ga2V5cywgd2hpY2ggbGltaXRzIHRoZSBhbW91bnQgb2YgY2lwaGVydGV4dAotICAgICAgcHJvZHVjZWQgYnkgYSBmaXhlZCBrZXksIGF2YWlsYWJsZSBmb3IgYW4gYWR2ZXJzYXJ5IHRvCi0gICAgICBjcnlwdGFuYWx5emUuCi0KLSAgICogICJTYWx0aW5nIGtleXMiIGFyZSB1c2VkIHRvIHByb3RlY3QgYWdhaW5zdCBwcmUtY29tcHV0YXRpb24gYW5kCi0gICAgICB0aW1lLW1lbW9yeSB0cmFkZW9mZiBhdHRhY2tzIFtNRjAwXSBbQlMwMF0uCi0KLSAgIERldGFpbGVkIHJhdGlvbmFsZSBmb3IgdGhlc2UgZmVhdHVyZXMgY2FuIGJlIGZvdW5kIGluIFNlY3Rpb24gNy4KLQotMy4gIFNSVFAgRnJhbWV3b3JrCi0KLSAgIFJUUCBpcyB0aGUgUmVhbC10aW1lIFRyYW5zcG9ydCBQcm90b2NvbCBbUkZDMzU1MF0uICBXZSBkZWZpbmUgU1JUUCBhcwotICAgYSBwcm9maWxlIG9mIFJUUC4gIFRoaXMgcHJvZmlsZSBpcyBhbiBleHRlbnNpb24gdG8gdGhlIFJUUAotICAgQXVkaW8vVmlkZW8gUHJvZmlsZSBbUkZDMzU1MV0uICBFeGNlcHQgd2hlcmUgZXhwbGljaXRseSBub3RlZCwgYWxsCi0gICBhc3BlY3RzIG9mIHRoYXQgcHJvZmlsZSBhcHBseSwgd2l0aCB0aGUgYWRkaXRpb24gb2YgdGhlIFNSVFAgc2VjdXJpdHkKLSAgIGZlYXR1cmVzLiAgQ29uY2VwdHVhbGx5LCB3ZSBjb25zaWRlciBTUlRQIHRvIGJlIGEgImJ1bXAgaW4gdGhlIHN0YWNrIgotICAgaW1wbGVtZW50YXRpb24gd2hpY2ggcmVzaWRlcyBiZXR3ZWVuIHRoZSBSVFAgYXBwbGljYXRpb24gYW5kIHRoZQotICAgdHJhbnNwb3J0IGxheWVyLiAgU1JUUCBpbnRlcmNlcHRzIFJUUCBwYWNrZXRzIGFuZCB0aGVuIGZvcndhcmRzIGFuCi0gICBlcXVpdmFsZW50IFNSVFAgcGFja2V0IG9uIHRoZSBzZW5kaW5nIHNpZGUsIGFuZCBpbnRlcmNlcHRzIFNSVFAKLSAgIHBhY2tldHMgYW5kIHBhc3NlcyBhbiBlcXVpdmFsZW50IFJUUCBwYWNrZXQgdXAgdGhlIHN0YWNrIG9uIHRoZQotICAgcmVjZWl2aW5nIHNpZGUuCi0KLSAgIFNlY3VyZSBSVENQIChTUlRDUCkgcHJvdmlkZXMgdGhlIHNhbWUgc2VjdXJpdHkgc2VydmljZXMgdG8gUlRDUCBhcwotICAgU1JUUCBkb2VzIHRvIFJUUC4gIFNSVENQIG1lc3NhZ2UgYXV0aGVudGljYXRpb24gaXMgTUFOREFUT1JZIGFuZAotICAgdGhlcmVieSBwcm90ZWN0cyB0aGUgUlRDUCBmaWVsZHMgdG8ga2VlcCB0cmFjayBvZiBtZW1iZXJzaGlwLCBwcm92aWRlCi0gICBmZWVkYmFjayB0byBSVFAgc2VuZGVycywgb3IgbWFpbnRhaW4gcGFja2V0IHNlcXVlbmNlIGNvdW50ZXJzLiAgU1JUQ1AKLSAgIGlzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNC4KLQotCi0KLQotCi0KLQotCi0KLQotQmF1Z2hlciwgZXQgYWwuICAgICAgICAgICAgIFN0YW5kYXJkcyBUcmFjayAgICAgICAgICAgICAgICAgICAgIFtQYWdlIDVdCi0MCi1SRkMgMzcxMSAgICAgICAgICAgICAgICAgICAgICAgICAgU1JUUCAgICAgICAgICAgICAgICAgICAgICAgIE1hcmNoIDIwMDQKLQotCi0zLjEuICBTZWN1cmUgUlRQCi0KLSAgICAgIFRoZSBmb3JtYXQgb2YgYW4gU1JUUCBwYWNrZXQgaXMgaWxsdXN0cmF0ZWQgaW4gRmlndXJlIDEuCi0KLSAgICAgICAgMCAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMwotICAgICAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCi0gICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rPCsKLSAgICAgfFY9MnxQfFh8ICBDQyAgIHxNfCAgICAgUFQgICAgICB8ICAgICAgIHNlcXVlbmNlIG51bWJlciAgICAgICAgIHwgfAotICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyB8Ci0gICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwKLSAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsgfAotICAgICB8ICAgICAgICAgICBzeW5jaHJvbml6YXRpb24gc291cmNlIChTU1JDKSBpZGVudGlmaWVyICAgICAgICAgICAgfCB8Ci0gICAgICs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rIHwKLSAgICAgfCAgICAgICAgICAgIGNvbnRyaWJ1dGluZyBzb3VyY2UgKENTUkMpIGlkZW50aWZpZXJzICAgICAgICAgICAgIHwgfAotICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8Ci0gICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHwKLSAgICAgfCAgICAgICAgICAgICAgICAgICBSVFAgZXh0ZW5zaW9uIChPUFRJT05BTCkgICAgICAgICAgICAgICAgICAgIHwgfAotICAgKz4rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyB8Ci0gICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICB8IHwKLSAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfAotICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlRQIHBhZGRpbmcgICB8IFJUUCBwYWQgY291bnQgfCB8Ci0gICArPistKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rPCsKLSAgIHwgfiAgICAgICAgICAgICAgICAgICAgIFNSVFAgTUtJIChPUFRJT05BTCkgICAgICAgICAgICAgICAgICAgICAgIH4gfAotICAgfCArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyB8Ci0gICB8IDogICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uIHRhZyAoUkVDT01NRU5ERUQpICAgICAgICAgICAgICA6IHwKLSAgIHwgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsgfAotICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICArLSBFbmNyeXB0ZWQgUG9ydGlvbiogICAgICAgICAgICAgICAgICAgICAgQXV0aGVudGljYXRlZCBQb3J0aW9uIC0tLSsKLQotICAgRmlndXJlIDEuICBUaGUgZm9ybWF0IG9mIGFuIFNSVFAgcGFja2V0LiAgKkVuY3J5cHRlZCBQb3J0aW9uIGlzIHRoZQotICAgc2FtZSBzaXplIGFzIHRoZSBwbGFpbnRleHQgZm9yIHRoZSBTZWN0aW9uIDQgcHJlLWRlZmluZWQgdHJhbnNmb3Jtcy4KLQotICAgVGhlICJFbmNyeXB0ZWQgUG9ydGlvbiIgb2YgYW4gU1JUUCBwYWNrZXQgY29uc2lzdHMgb2YgdGhlIGVuY3J5cHRpb24KLSAgIG9mIHRoZSBSVFAgcGF5bG9hZCAoaW5jbHVkaW5nIFJUUCBwYWRkaW5nIHdoZW4gcHJlc2VudCkgb2YgdGhlCi0gICBlcXVpdmFsZW50IFJUUCBwYWNrZXQuICBUaGUgRW5jcnlwdGVkIFBvcnRpb24gTUFZIGJlIHRoZSBleGFjdCBzaXplCi0gICBvZiB0aGUgcGxhaW50ZXh0IG9yIE1BWSBiZSBsYXJnZXIuICBGaWd1cmUgMSBzaG93cyB0aGUgUlRQIHBheWxvYWQKLSAgIGluY2x1ZGluZyBhbnkgcG9zc2libGUgcGFkZGluZyBmb3IgUlRQIFtSRkMzNTUwXS4KLQotICAgTm9uZSBvZiB0aGUgcHJlLWRlZmluZWQgZW5jcnlwdGlvbiB0cmFuc2Zvcm1zIHVzZXMgYW55IHBhZGRpbmc7IGZvcgotICAgdGhlc2UsIHRoZSBSVFAgYW5kIFNSVFAgcGF5bG9hZCBzaXplcyBtYXRjaCBleGFjdGx5LiAgTmV3IHRyYW5zZm9ybXMKLSAgIGFkZGVkIHRvIFNSVFAgKGZvbGxvd2luZyBTZWN0aW9uIDYpIG1heSByZXF1aXJlIHBhZGRpbmcsIGFuZCBtYXkKLSAgIGhlbmNlIHByb2R1Y2UgbGFyZ2VyIHBheWxvYWRzLiAgUlRQIHByb3ZpZGVzIGl0cyBvd24gcGFkZGluZyBmb3JtYXQKLSAgIChhcyBzZWVuIGluIEZpZy4gMSksIHdoaWNoIGR1ZSB0byB0aGUgcGFkZGluZyBpbmRpY2F0b3IgaW4gdGhlIFJUUAotICAgaGVhZGVyIGhhcyBtZXJpdHMgaW4gdGVybXMgb2YgY29tcGFjdG5lc3MgcmVsYXRpdmUgdG8gcGFkZGluZ3MgdXNpbmcKLSAgIHByZWZpeC1mcmVlIGNvZGVzLiAgVGhpcyBSVFAgcGFkZGluZyBTSEFMTCBiZSB0aGUgZGVmYXVsdCBtZXRob2QgZm9yCi0gICB0cmFuc2Zvcm1zIHJlcXVpcmluZyBwYWRkaW5nLiAgVHJhbnNmb3JtcyBNQVkgc3BlY2lmeSBvdGhlciBwYWRkaW5nCi0gICBtZXRob2RzLCBhbmQgTVVTVCB0aGVuIHNwZWNpZnkgdGhlIGFtb3VudCwgZm9ybWF0LCBhbmQgcHJvY2Vzc2luZyBvZgotICAgdGhlaXIgcGFkZGluZy4gIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgZW5jcnlwdGlvbiB0cmFuc2Zvcm1zCi0KLQotCi1CYXVnaGVyLCBldCBhbC4gICAgICAgICAgICAgU3RhbmRhcmRzIFRyYWNrICAgICAgICAgICAgICAgICAgICAgW1BhZ2UgNl0KLQwKLVJGQyAzNzExICAgICAgICAgICAgICAgICAgICAgICAgICBTUlRQICAgICAgICAgICAgICAgICAgICAgICAgTWFyY2ggMjAwNAotCi0KLSAgIHRoYXQgdXNlIHBhZGRpbmcgYXJlIHZ1bG5lcmFibGUgdG8gc3VidGxlIGF0dGFja3MsIGVzcGVjaWFsbHkgd2hlbgotICAgbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBpcyBub3QgdXNlZCBbVjAyXS4gIEVhY2ggc3BlY2lmaWNhdGlvbiBmb3IgYQotICAgbmV3IGVuY3J5cHRpb24gdHJhbnNmb3JtIG5lZWRzIHRvIGNhcmVmdWxseSBjb25zaWRlciBhbmQgZGVzY3JpYmUgdGhlCi0gICBzZWN1cml0eSBpbXBsaWNhdGlvbnMgb2YgdGhlIHBhZGRpbmcgdGhhdCBpdCB1c2VzLiAgTWVzc2FnZQotICAgYXV0aGVudGljYXRpb24gY29kZXMgZGVmaW5lIHRoZWlyIG93biBwYWRkaW5nLCBzbyB0aGlzIGRlZmF1bHQgZG9lcwotICAgbm90IGFwcGx5IHRvIGF1dGhlbnRpY2F0aW9uIHRyYW5zZm9ybXMuCi0KLSAgIFRoZSBPUFRJT05BTCBNS0kgYW5kIHRoZSBSRUNPTU1FTkRFRCBhdXRoZW50aWNhdGlvbiB0YWcgYXJlIHRoZSBvbmx5Ci0gICBmaWVsZHMgZGVmaW5lZCBieSBTUlRQIHRoYXQgYXJlIG5vdCBpbiBSVFAuICBPbmx5IDgtYml0IGFsaWdubWVudCBpcwotICAgYXNzdW1lZC4KLQotICAgICAgTUtJIChNYXN0ZXIgS2V5IElkZW50aWZpZXIpOiBjb25maWd1cmFibGUgbGVuZ3RoLCBPUFRJT05BTC4gIFRoZQotICAgICAgICAgICAgICBNS0kgaXMgZGVmaW5lZCwgc2lnbmFsZWQsIGFuZCB1c2VkIGJ5IGtleSBtYW5hZ2VtZW50LiAgVGhlCi0gICAgICAgICAgICAgIE1LSSBpZGVudGlmaWVzIHRoZSBtYXN0ZXIga2V5IGZyb20gd2hpY2ggdGhlIHNlc3Npb24KLSAgICAgICAgICAgICAga2V5KHMpIHdlcmUgZGVyaXZlZCB0aGF0IGF1dGhlbnRpY2F0ZSBhbmQvb3IgZW5jcnlwdCB0aGUKLSAgICAgICAgICAgICAgcGFydGljdWxhciBwYWNrZXQuICBOb3RlIHRoYXQgdGhlIE1LSSBTSEFMTCBOT1QgaWRlbnRpZnkKLSAgICAgICAgICAgICAgdGhlIFNSVFAgY3J5cHRvZ3JhcGhpYyBjb250ZXh0LCB3aGljaCBpcyBpZGVudGlmaWVkCi0gICAgICAgICAgICAgIGFjY29yZGluZyB0byBTZWN0aW9uIDMuMi4zLiAgVGhlIE1LSSBNQVkgYmUgdXNlZCBieSBrZXkKLSAgICAgICAgICAgICAgbWFuYWdlbWVudCBmb3IgdGhlIHB1cnBvc2VzIG9mIHJlLWtleWluZywgaWRlbnRpZnlpbmcgYQotICAgICAgICAgICAgICBwYXJ0aWN1bGFyIG1hc3RlciBrZXkgd2l0aGluIHRoZSBjcnlwdG9ncmFwaGljIGNvbnRleHQKLSAgICAgICAgICAgICAgKFNlY3Rpb24gMy4yLjEpLgotCi0gICAgICBBdXRoZW50aWNhdGlvbiB0YWc6IGNvbmZpZ3VyYWJsZSBsZW5ndGgsIFJFQ09NTUVOREVELiAgVGhlCi0gICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uIHRhZyBpcyB1c2VkIHRvIGNhcnJ5IG1lc3NhZ2UgYXV0aGVudGljYXRpb24KLSAgICAgICAgICAgICAgZGF0YS4gIFRoZSBBdXRoZW50aWNhdGVkIFBvcnRpb24gb2YgYW4gU1JUUCBwYWNrZXQKLSAgICAgICAgICAgICAgY29uc2lzdHMgb2YgdGhlIFJUUCBoZWFkZXIgZm9sbG93ZWQgYnkgdGhlIEVuY3J5cHRlZAotICAgICAgICAgICAgICBQb3J0aW9uIG9mIHRoZSBTUlRQIHBhY2tldC4gIFRodXMsIGlmIGJvdGggZW5jcnlwdGlvbiBhbmQKLSAgICAgICAgICAgICAgYXV0aGVudGljYXRpb24gYXJlIGFwcGxpZWQsIGVuY3J5cHRpb24gU0hBTEwgYmUgYXBwbGllZAotICAgICAgICAgICAgICBiZWZvcmUgYXV0aGVudGljYXRpb24gb24gdGhlIHNlbmRlciBzaWRlIGFuZCBjb252ZXJzZWx5IG9uCi0gICAgICAgICAgICAgIHRoZSByZWNlaXZlciBzaWRlLiAgVGhlIGF1dGhlbnRpY2F0aW9uIHRhZyBwcm92aWRlcwotICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbiBvZiB0aGUgUlRQIGhlYWRlciBhbmQgcGF5bG9hZCwgYW5kIGl0Ci0gICAgICAgICAgICAgIGluZGlyZWN0bHkgcHJvdmlkZXMgcmVwbGF5IHByb3RlY3Rpb24gYnkgYXV0aGVudGljYXRpbmcKLSAgICAgICAgICAgICAgdGhlIHNlcXVlbmNlIG51bWJlci4gIE5vdGUgdGhhdCB0aGUgTUtJIGlzIG5vdCBpbnRlZ3JpdHkKLSAgICAgICAgICAgICAgcHJvdGVjdGVkIGFzIHRoaXMgZG9lcyBub3QgcHJvdmlkZSBhbnkgZXh0cmEgcHJvdGVjdGlvbi4KLQotMy4yLiAgU1JUUCBDcnlwdG9ncmFwaGljIENvbnRleHRzCi0KLSAgIEVhY2ggU1JUUCBzdHJlYW0gcmVxdWlyZXMgdGhlIHNlbmRlciBhbmQgcmVjZWl2ZXIgdG8gbWFpbnRhaW4KLSAgIGNyeXB0b2dyYXBoaWMgc3RhdGUgaW5mb3JtYXRpb24uICBUaGlzIGluZm9ybWF0aW9uIGlzIGNhbGxlZCB0aGUKLSAgICJjcnlwdG9ncmFwaGljIGNvbnRleHQiLgotCi0gICBTUlRQIHVzZXMgdHdvIHR5cGVzIG9mIGtleXM6IHNlc3Npb24ga2V5cyBhbmQgbWFzdGVyIGtleXMuICBCeSBhCi0gICAic2Vzc2lvbiBrZXkiLCB3ZSBtZWFuIGEga2V5IHdoaWNoIGlzIHVzZWQgZGlyZWN0bHkgaW4gYQotICAgY3J5cHRvZ3JhcGhpYyB0cmFuc2Zvcm0gKGUuZy4sIGVuY3J5cHRpb24gb3IgbWVzc2FnZSBhdXRoZW50aWNhdGlvbiksCi0gICBhbmQgYnkgYSAibWFzdGVyIGtleSIsIHdlIG1lYW4gYSByYW5kb20gYml0IHN0cmluZyAoZ2l2ZW4gYnkgdGhlIGtleQotICAgbWFuYWdlbWVudCBwcm90b2NvbCkgZnJvbSB3aGljaCBzZXNzaW9uIGtleXMgYXJlIGRlcml2ZWQgaW4gYQotCi0KLQotCi0KLUJhdWdoZXIsIGV0IGFsLiAgICAgICAgICAgICBTdGFuZGFyZHMgVHJhY2sgICAgICAgICAgICAgICAgICAgICBbUGFnZSA3XQotDAotUkZDIDM3MTEgICAgICAgICAgICAgICAgICAgICAgICAgIFNSVFAgICAgICAgICAgICAgICAgICAgICAgICBNYXJjaCAyMDA0Ci0KLQotICAgY3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlIHdheS4gIFRoZSBtYXN0ZXIga2V5KHMpIGFuZCBvdGhlciBwYXJhbWV0ZXJzCi0gICBpbiB0aGUgY3J5cHRvZ3JhcGhpYyBjb250ZXh0IGFyZSBwcm92aWRlZCBieSBrZXkgbWFuYWdlbWVudAotICAgbWVjaGFuaXNtcyBleHRlcm5hbCB0byBTUlRQLCBzZWUgU2VjdGlvbiA4LgotCi0zLjIuMS4gIFRyYW5zZm9ybS1pbmRlcGVuZGVudCBwYXJhbWV0ZXJzCi0KLSAgIFRyYW5zZm9ybS1pbmRlcGVuZGVudCBwYXJhbWV0ZXJzIGFyZSBwcmVzZW50IGluIHRoZSBjcnlwdG9ncmFwaGljCi0gICBjb250ZXh0IGluZGVwZW5kZW50bHkgb2YgdGhlIHBhcnRpY3VsYXIgZW5jcnlwdGlvbiBvciBhdXRoZW50aWNhdGlvbgotICAgdHJhbnNmb3JtcyB0aGF0IGFyZSB1c2VkLiAgVGhlIHRyYW5zZm9ybS1pbmRlcGVuZGVudCBwYXJhbWV0ZXJzIG9mCi0gICB0aGUgY3J5cHRvZ3JhcGhpYyBjb250ZXh0IGZvciBTUlRQIGNvbnNpc3Qgb2Y6Ci0KLSAgICogIGEgMzItYml0IHVuc2lnbmVkIHJvbGxvdmVyIGNvdW50ZXIgKFJPQyksIHdoaWNoIHJlY29yZHMgaG93IG1hbnkKLSAgICAgIHRpbWVzIHRoZSAxNi1iaXQgUlRQIHNlcXVlbmNlIG51bWJlciBoYXMgYmVlbiByZXNldCB0byB6ZXJvIGFmdGVyCi0gICAgICBwYXNzaW5nIHRocm91Z2ggNjUsNTM1LiAgVW5saWtlIHRoZSBzZXF1ZW5jZSBudW1iZXIgKFNFUSksIHdoaWNoCi0gICAgICBTUlRQIGV4dHJhY3RzIGZyb20gdGhlIFJUUCBwYWNrZXQgaGVhZGVyLCB0aGUgUk9DIGlzIG1haW50YWluZWQgYnkKLSAgICAgIFNSVFAgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4zLjEuCi0KLSAgICAgIFdlIGRlZmluZSB0aGUgaW5kZXggb2YgdGhlIFNSVFAgcGFja2V0IGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbgotICAgICAgUk9DIGFuZCBSVFAgc2VxdWVuY2UgbnVtYmVyIHRvIGJlIHRoZSA0OC1iaXQgcXVhbnRpdHkKLQotICAgICAgICAgICAgaSA9IDJeMTYgKiBST0MgKyBTRVEuCi0KLSAgICogIGZvciB0aGUgcmVjZWl2ZXIgb25seSwgYSAxNi1iaXQgc2VxdWVuY2UgbnVtYmVyIHNfbCwgd2hpY2ggY2FuIGJlCi0gICAgICB0aG91Z2h0IG9mIGFzIHRoZSBoaWdoZXN0IHJlY2VpdmVkIFJUUCBzZXF1ZW5jZSBudW1iZXIgKHNlZQotICAgICAgU2VjdGlvbiAzLjMuMSBmb3IgaXRzIGhhbmRsaW5nKSwgd2hpY2ggU0hPVUxEIGJlIGF1dGhlbnRpY2F0ZWQKLSAgICAgIHNpbmNlIG1lc3NhZ2UgYXV0aGVudGljYXRpb24gaXMgUkVDT01NRU5ERUQsCi0KLSAgICogIGFuIGlkZW50aWZpZXIgZm9yIHRoZSBlbmNyeXB0aW9uIGFsZ29yaXRobSwgaS5lLiwgdGhlIGNpcGhlciBhbmQKLSAgICAgIGl0cyBtb2RlIG9mIG9wZXJhdGlvbiwKLQotICAgKiAgYW4gaWRlbnRpZmllciBmb3IgdGhlIG1lc3NhZ2UgYXV0aGVudGljYXRpb24gYWxnb3JpdGhtLAotCi0gICAqICBhIHJlcGxheSBsaXN0LCBtYWludGFpbmVkIGJ5IHRoZSByZWNlaXZlciBvbmx5ICh3aGVuCi0gICAgICBhdXRoZW50aWNhdGlvbiBhbmQgcmVwbGF5IHByb3RlY3Rpb24gYXJlIHByb3ZpZGVkKSwgY29udGFpbmluZwotICAgICAgaW5kaWNlcyBvZiByZWNlbnRseSByZWNlaXZlZCBhbmQgYXV0aGVudGljYXRlZCBTUlRQIHBhY2tldHMsCi0KLSAgICogIGFuIE1LSSBpbmRpY2F0b3IgKDAvMSkgYXMgdG8gd2hldGhlciBhbiBNS0kgaXMgcHJlc2VudCBpbiBTUlRQIGFuZAotICAgICAgU1JUQ1AgcGFja2V0cywKLQotICAgKiAgaWYgdGhlIE1LSSBpbmRpY2F0b3IgaXMgc2V0IHRvIG9uZSwgdGhlIGxlbmd0aCAoaW4gb2N0ZXRzKSBvZiB0aGUKLSAgICAgIE1LSSBmaWVsZCwgYW5kIChmb3IgdGhlIHNlbmRlcikgdGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgY3VycmVudGx5Ci0gICAgICBhY3RpdmUgTUtJICh0aGUgdmFsdWUgb2YgdGhlIE1LSSBpbmRpY2F0b3IgYW5kIGxlbmd0aCBNVVNUIGJlIGtlcHQKLSAgICAgIGZpeGVkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbnRleHQpLAotCi0gICAqICB0aGUgbWFzdGVyIGtleShzKSwgd2hpY2ggTVVTVCBiZSByYW5kb20gYW5kIGtlcHQgc2VjcmV0LAotCi0KLQotCi0KLQotQmF1Z2hlciwgZXQgYWwuICAgICAgICAgICAgIFN0YW5kYXJkcyBUcmFjayAgICAgICAgICAgICAgICAgICAgIFtQYWdlIDhdCi0MCi1SRkMgMzcxMSAgICAgICAgICAgICAgICAgICAgICAgICAgU1JUUCAgICAgICAgICAgICAgICAgICAgICAgIE1hcmNoIDIwMDQKLQotCi0gICAqICBmb3IgZWFjaCBtYXN0ZXIga2V5LCB0aGVyZSBpcyBhIGNvdW50ZXIgb2YgdGhlIG51bWJlciBvZiBTUlRQCi0gICAgICBwYWNrZXRzIHRoYXQgaGF2ZSBiZWVuIHByb2Nlc3NlZCAoc2VudCkgd2l0aCB0aGF0IG1hc3RlciBrZXkKLSAgICAgIChlc3NlbnRpYWwgZm9yIHNlY3VyaXR5LCBzZWUgU2VjdGlvbnMgMy4zLjEgYW5kIDkpLAotCi0gICAqICBub24tbmVnYXRpdmUgaW50ZWdlcnMgbl9lLCBhbmQgbl9hLCBkZXRlcm1pbmluZyB0aGUgbGVuZ3RoIG9mIHRoZQotICAgICAgc2Vzc2lvbiBrZXlzIGZvciBlbmNyeXB0aW9uLCBhbmQgbWVzc2FnZSBhdXRoZW50aWNhdGlvbi4KLQotICAgSW4gYWRkaXRpb24sIGZvciBlYWNoIG1hc3RlciBrZXksIGFuIFNSVFAgc3RyZWFtIE1BWSB1c2UgdGhlCi0gICBmb2xsb3dpbmcgYXNzb2NpYXRlZCB2YWx1ZXM6Ci0KLSAgICogIGEgbWFzdGVyIHNhbHQsIHRvIGJlIHVzZWQgaW4gdGhlIGtleSBkZXJpdmF0aW9uIG9mIHNlc3Npb24ga2V5cy4KLSAgICAgIFRoaXMgdmFsdWUsIHdoZW4gdXNlZCwgTVVTVCBiZSByYW5kb20sIGJ1dCBNQVkgYmUgcHVibGljLiAgVXNlIG9mCi0gICAgICBtYXN0ZXIgc2FsdCBpcyBzdHJvbmdseSBSRUNPTU1FTkRFRCwgc2VlIFNlY3Rpb24gOS4yLiAgQSAiTlVMTCIKLSAgICAgIHNhbHQgaXMgdHJlYXRlZCBhcyAwMC4uLjAuCi0KLSAgICogIGFuIGludGVnZXIgaW4gdGhlIHNldCB7MSwyLDQsLi4uLDJeMjR9LCB0aGUgImtleV9kZXJpdmF0aW9uX3JhdGUiLAotICAgICAgd2hlcmUgYW4gdW5zcGVjaWZpZWQgdmFsdWUgaXMgdHJlYXRlZCBhcyB6ZXJvLiAgVGhlIGNvbnN0cmFpbnQgdG8KLSAgICAgIGJlIGEgcG93ZXIgb2YgMiBzaW1wbGlmaWVzIHRoZSBzZXNzaW9uLWtleSBkZXJpdmF0aW9uCi0gICAgICBpbXBsZW1lbnRhdGlvbiwgc2VlIFNlY3Rpb24gNC4zLgotCi0gICAqICBhbiBNS0kgdmFsdWUsCi0KLSAgICogIDxGcm9tLCBUbz4gdmFsdWVzLCBzcGVjaWZ5aW5nIHRoZSBsaWZldGltZSBmb3IgYSBtYXN0ZXIga2V5LAotICAgICAgZXhwcmVzc2VkIGluIHRlcm1zIG9mIHRoZSB0d28gNDgtYml0IGluZGV4IHZhbHVlcyBpbnNpZGUgd2hvc2UKLSAgICAgIHJhbmdlIChpbmNsdWRpbmcgdGhlIHJhbmdlIGVuZC1wb2ludHMpIHRoZSBtYXN0ZXIga2V5IGlzIHZhbGlkLgotICAgICAgRm9yIHRoZSB1c2Ugb2YgPEZyb20sIFRvPiwgc2VlIFNlY3Rpb24gOC4xLjEuICA8RnJvbSwgVG8+IGlzIGFuCi0gICAgICBhbHRlcm5hdGl2ZSB0byB0aGUgTUtJIGFuZCBhc3N1bWVzIHRoYXQgYSBtYXN0ZXIga2V5IGlzIGluIG9uZS0KLSAgICAgIHRvLW9uZSBjb3JyZXNwb25kZW5jZSB3aXRoIHRoZSBTUlRQIHNlc3Npb24ga2V5IG9uIHdoaWNoIHRoZQotICAgICAgPEZyb20sIFRvPiByYW5nZSBpcyBkZWZpbmVkLgotCi0gICBTUlRDUCBTSEFMTCBieSBkZWZhdWx0IHNoYXJlIHRoZSBjcnlwdG8gY29udGV4dCB3aXRoIFNSVFAsIGV4Y2VwdDoKLQotICAgKiAgbm8gcm9sbG92ZXIgY291bnRlciBhbmQgc19sLXZhbHVlIG5lZWQgdG8gYmUgbWFpbnRhaW5lZCBhcyB0aGUKLSAgICAgIFJUQ1AgaW5kZXggaXMgZXhwbGljaXRseSBjYXJyaWVkIGluIGVhY2ggU1JUQ1AgcGFja2V0LAotCi0gICAqICBhIHNlcGFyYXRlIHJlcGxheSBsaXN0IGlzIG1haW50YWluZWQgKHdoZW4gcmVwbGF5IHByb3RlY3Rpb24gaXMKLSAgICAgIHByb3ZpZGVkKSwKLQotICAgKiAgU1JUQ1AgbWFpbnRhaW5zIGEgc2VwYXJhdGUgY291bnRlciBmb3IgaXRzIG1hc3RlciBrZXkgKGV2ZW4gaWYgdGhlCi0gICAgICBtYXN0ZXIga2V5IGlzIHRoZSBzYW1lIGFzIHRoYXQgZm9yIFNSVFAsIHNlZSBiZWxvdyksIGFzIGEgbWVhbnMgdG8KLSAgICAgIG1haW50YWluIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiBTUlRDUCBwYWNrZXRzIHRoYXQgaGF2ZSBiZWVuCi0gICAgICBwcm9jZXNzZWQgd2l0aCB0aGF0IGtleS4KLQotICAgTm90ZSBpbiBwYXJ0aWN1bGFyIHRoYXQgdGhlIG1hc3RlciBrZXkocykgTUFZIGJlIHNoYXJlZCBiZXR3ZWVuIFNSVFAKLSAgIGFuZCB0aGUgY29ycmVzcG9uZGluZyBTUlRDUCwgaWYgdGhlIHByZS1kZWZpbmVkIHRyYW5zZm9ybXMgKGluY2x1ZGluZwotICAgdGhlIGtleSBkZXJpdmF0aW9uKSBhcmUgdXNlZCBidXQgdGhlIHNlc3Npb24ga2V5KHMpIE1VU1QgTk9UIGJlIHNvCi0gICBzaGFyZWQuCi0KLQotCi0KLUJhdWdoZXIsIGV0IGFsLiAgICAgICAgICAgICBTdGFuZGFyZHMgVHJhY2sgICAgICAgICAgICAgICAgICAgICBbUGFnZSA5XQotDAotUkZDIDM3MTEgICAgICAgICAgICAgICAgICAgICAgICAgIFNSVFAgICAgICAgICAgICAgICAgICAgICAgICBNYXJjaCAyMDA0Ci0KLQotICAgSW4gYWRkaXRpb24sIHRoZXJlIGNhbiBiZSBjYXNlcyAoc2VlIFNlY3Rpb25zIDggYW5kIDkuMSkgd2hlcmUKLSAgIHNldmVyYWwgU1JUUCBzdHJlYW1zIHdpdGhpbiBhIGdpdmVuIFJUUCBzZXNzaW9uLCBpZGVudGlmaWVkIGJ5IHRoZWlyCi0gICBzeW5jaHJvbml6YXRpb24gc291cmNlIChTU1JDcywgd2hpY2ggaXMgcGFydCBvZiB0aGUgUlRQIGhlYWRlciksCi0gICBzaGFyZSBtb3N0IG9mIHRoZSBjcnlwdG8gY29udGV4dCBwYXJhbWV0ZXJzIChpbmNsdWRpbmcgcG9zc2libHkKLSAgIG1hc3RlciBhbmQgc2Vzc2lvbiBrZXlzKS4gIEluIHN1Y2ggY2FzZXMsIGp1c3QgYXMgaW4gdGhlIG5vcm1hbAotICAgU1JUUC9TUlRDUCBwYXJhbWV0ZXIgc2hhcmluZyBhYm92ZSwgc2VwYXJhdGUgcmVwbGF5IGxpc3RzIGFuZCBwYWNrZXQKLSAgIGNvdW50ZXJzIGZvciBlYWNoIHN0cmVhbSAoU1NSQykgTVVTVCBzdGlsbCBiZSBtYWludGFpbmVkLiAgQWxzbywKLSAgIHNlcGFyYXRlIFNSVFAgaW5kaWNlcyBNVVNUIHRoZW4gYmUgbWFpbnRhaW5lZC4KLQotICAgQSBzdW1tYXJ5IG9mIHBhcmFtZXRlcnMsIHByZS1kZWZpbmVkIHRyYW5zZm9ybXMsIGFuZCBkZWZhdWx0IHZhbHVlcwotICAgZm9yIHRoZSBhYm92ZSBwYXJhbWV0ZXJzIChhbmQgb3RoZXIgU1JUUCBwYXJhbWV0ZXJzKSBjYW4gYmUgZm91bmQgaW4KLSAgIFNlY3Rpb25zIDUgYW5kIDguMi4KLQotMy4yLjIuICBUcmFuc2Zvcm0tZGVwZW5kZW50IHBhcmFtZXRlcnMKLQotICAgQWxsIGVuY3J5cHRpb24sIGF1dGhlbnRpY2F0aW9uL2ludGVncml0eSwgYW5kIGtleSBkZXJpdmF0aW9uCi0gICBwYXJhbWV0ZXJzIGFyZSBkZWZpbmVkIGluIHRoZSB0cmFuc2Zvcm1zIHNlY3Rpb24gKFNlY3Rpb24gNCkuCi0gICBUeXBpY2FsIGV4YW1wbGVzIG9mIHN1Y2ggcGFyYW1ldGVycyBhcmUgYmxvY2sgc2l6ZSBvZiBjaXBoZXJzLAotICAgc2Vzc2lvbiBrZXlzLCBkYXRhIGZvciB0aGUgSW5pdGlhbGl6YXRpb24gVmVjdG9yIChJVikgZm9ybWF0aW9uLCBldGMuCi0gICBGdXR1cmUgU1JUUCB0cmFuc2Zvcm0gc3BlY2lmaWNhdGlvbnMgTVVTVCBpbmNsdWRlIGEgc2VjdGlvbiB0byBsaXN0Ci0gICB0aGUgYWRkaXRpb25hbCBjcnlwdG9ncmFwaGljIGNvbnRleHQncyBwYXJhbWV0ZXJzIGZvciB0aGF0IHRyYW5zZm9ybSwKLSAgIGlmIGFueS4KLQotMy4yLjMuICBNYXBwaW5nIFNSVFAgUGFja2V0cyB0byBDcnlwdG9ncmFwaGljIENvbnRleHRzCi0KLSAgIFJlY2FsbCB0aGF0IGFuIFJUUCBzZXNzaW9uIGZvciBlYWNoIHBhcnRpY2lwYW50IGlzIGRlZmluZWQgW1JGQzM1NTBdCi0gICBieSBhIHBhaXIgb2YgZGVzdGluYXRpb24gdHJhbnNwb3J0IGFkZHJlc3NlcyAob25lIG5ldHdvcmsgYWRkcmVzcwotICAgcGx1cyBhIHBvcnQgcGFpciBmb3IgUlRQIGFuZCBSVENQKSwgYW5kIHRoYXQgYSBtdWx0aW1lZGlhIHNlc3Npb24gaXMKLSAgIGRlZmluZWQgYXMgYSBjb2xsZWN0aW9uIG9mIFJUUCBzZXNzaW9ucy4gIEZvciBleGFtcGxlLCBhIHBhcnRpY3VsYXIKLSAgIG11bHRpbWVkaWEgc2Vzc2lvbiBjb3VsZCBpbmNsdWRlIGFuIGF1ZGlvIFJUUCBzZXNzaW9uLCBhIHZpZGVvIFJUUAotICAgc2Vzc2lvbiwgYW5kIGEgdGV4dCBSVFAgc2Vzc2lvbi4KLQotICAgQSBjcnlwdG9ncmFwaGljIGNvbnRleHQgU0hBTEwgYmUgdW5pcXVlbHkgaWRlbnRpZmllZCBieSB0aGUgdHJpcGxldAotICAgY29udGV4dCBpZGVudGlmaWVyOgotCi0gICBjb250ZXh0IGlkID0gPFNTUkMsIGRlc3RpbmF0aW9uIG5ldHdvcmsgYWRkcmVzcywgZGVzdGluYXRpb24KLSAgIHRyYW5zcG9ydCBwb3J0IG51bWJlcj4KLQotICAgd2hlcmUgdGhlIGRlc3RpbmF0aW9uIG5ldHdvcmsgYWRkcmVzcyBhbmQgdGhlIGRlc3RpbmF0aW9uIHRyYW5zcG9ydAotICAgcG9ydCBhcmUgdGhlIG9uZXMgaW4gdGhlIFNSVFAgcGFja2V0LiAgSXQgaXMgYXNzdW1lZCB0aGF0LCB3aGVuCi0gICBwcmVzZW50ZWQgd2l0aCB0aGlzIGluZm9ybWF0aW9uLCB0aGUga2V5IG1hbmFnZW1lbnQgcmV0dXJucyBhIGNvbnRleHQKLSAgIHdpdGggdGhlIGluZm9ybWF0aW9uIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMi4KLQotICAgQXMgbm90ZWQgYWJvdmUsIFNSVFAgYW5kIFNSVENQIGJ5IGRlZmF1bHQgc2hhcmUgdGhlIGJ1bGsgb2YgdGhlCi0gICBwYXJhbWV0ZXJzIGluIHRoZSBjcnlwdG9ncmFwaGljIGNvbnRleHQuICBUaHVzLCByZXRyaWV2aW5nIHRoZSBjcnlwdG8KLSAgIGNvbnRleHQgcGFyYW1ldGVycyBmb3IgYW4gU1JUQ1Agc3RyZWFtIGluIHByYWN0aWNlIG1heSBpbXBseSBhCi0gICBiaW5kaW5nIHRvIHRoZSBjb3JyZXNwb25kZW50IFNSVFAgY3J5cHRvIGNvbnRleHQuICBJdCBpcyB1cCB0byB0aGUKLSAgIGltcGxlbWVudGF0aW9uIHRvIGFzc3VyZSBzdWNoIGJpbmRpbmcsIHNpbmNlIHRoZSBSVENQIHBvcnQgbWF5IG5vdCBiZQotCi0KLQotQmF1Z2hlciwgZXQgYWwuICAgICAgICAgICAgIFN0YW5kYXJkcyBUcmFjayAgICAgICAgICAgICAgICAgICAgW1BhZ2UgMTBdCi0MCi1SRkMgMzcxMSAgICAgICAgICAgICAgICAgICAgICAgICAgU1JUUCAgICAgICAgICAgICAgICAgICAgICAgIE1hcmNoIDIwMDQKLQotCi0gICBkaXJlY3RseSBkZWR1Y2libGUgZnJvbSB0aGUgUlRQIHBvcnQgb25seS4gIEFsdGVybmF0aXZlbHksIHRoZSBrZXkKLSAgIG1hbmFnZW1lbnQgbWF5IGNob29zZSB0byBwcm92aWRlIHNlcGFyYXRlIFNSVFAtIGFuZCBTUlRDUC0gY29udGV4dHMsCi0gICBkdXBsaWNhdGluZyB0aGUgY29tbW9uIHBhcmFtZXRlcnMgKHN1Y2ggYXMgbWFzdGVyIGtleShzKSkuICBUaGUKLSAgIGxhdHRlciBhcHByb2FjaCB0aGVuIGFsc28gZW5hYmxlcyBTUlRQIGFuZCBTUlRDUCB0byB1c2UsIGUuZy4sCi0gICBkaXN0aW5jdCB0cmFuc2Zvcm1zLCBpZiBzbyBkZXNpcmVkLiAgU2ltaWxhciBjb25zaWRlcmF0aW9ucyBhcmlzZQotICAgd2hlbiBtdWx0aXBsZSBTUlRQIHN0cmVhbXMsIGZvcm1pbmcgcGFydCBvZiBvbmUgc2luZ2xlIFJUUCBzZXNzaW9uLAotICAgc2hhcmUga2V5cyBhbmQgb3RoZXIgcGFyYW1ldGVycy4KLQotICAgSWYgbm8gdmFsaWQgY29udGV4dCBjYW4gYmUgZm91bmQgZm9yIGEgcGFja2V0IGNvcnJlc3BvbmRpbmcgdG8gYQotICAgY2VydGFpbiBjb250ZXh0IGlkZW50aWZpZXIsIHRoYXQgcGFja2V0IE1VU1QgYmUgZGlzY2FyZGVkLgotCi0zLjMuICBTUlRQIFBhY2tldCBQcm9jZXNzaW5nCi0KLSAgIFRoZSBmb2xsb3dpbmcgYXBwbGllcyB0byBTUlRQLiAgU1JUQ1AgaXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40LgotCi0gICBBc3N1bWluZyBpbml0aWFsaXphdGlvbiBvZiB0aGUgY3J5cHRvZ3JhcGhpYyBjb250ZXh0KHMpIGhhcyB0YWtlbgotICAgcGxhY2UgdmlhIGtleSBtYW5hZ2VtZW50LCB0aGUgc2VuZGVyIFNIQUxMIGRvIHRoZSBmb2xsb3dpbmcgdG8KLSAgIGNvbnN0cnVjdCBhbiBTUlRQIHBhY2tldDoKLQotICAgMS4gRGV0ZXJtaW5lIHdoaWNoIGNyeXB0b2dyYXBoaWMgY29udGV4dCB0byB1c2UgYXMgZGVzY3JpYmVkIGluCi0gICAgICBTZWN0aW9uIDMuMi4zLgotCi0gICAyLiBEZXRlcm1pbmUgdGhlIGluZGV4IG9mIHRoZSBTUlRQIHBhY2tldCB1c2luZyB0aGUgcm9sbG92ZXIgY291bnRlciwKLSAgICAgIHRoZSBoaWdoZXN0IHNlcXVlbmNlIG51bWJlciBpbiB0aGUgY3J5cHRvZ3JhcGhpYyBjb250ZXh0LCBhbmQgdGhlCi0gICAgICBzZXF1ZW5jZSBudW1iZXIgaW4gdGhlIFJUUCBwYWNrZXQsIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMy4xLgotCi0gICAzLiBEZXRlcm1pbmUgdGhlIG1hc3RlciBrZXkgYW5kIG1hc3RlciBzYWx0LiAgVGhpcyBpcyBkb25lIHVzaW5nIHRoZQotICAgICAgaW5kZXggZGV0ZXJtaW5lZCBpbiB0aGUgcHJldmlvdXMgc3RlcCBvciB0aGUgY3VycmVudCBNS0kgaW4gdGhlCi0gICAgICBjcnlwdG9ncmFwaGljIGNvbnRleHQsIGFjY29yZGluZyB0byBTZWN0aW9uIDguMS4KLQotICAgNC4gRGV0ZXJtaW5lIHRoZSBzZXNzaW9uIGtleXMgYW5kIHNlc3Npb24gc2FsdCAoaWYgdGhleSBhcmUgdXNlZCBieQotICAgICAgdGhlIHRyYW5zZm9ybSkgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gNC4zLCB1c2luZyBtYXN0ZXIga2V5LAotICAgICAgbWFzdGVyIHNhbHQsIGtleV9kZXJpdmF0aW9uX3JhdGUsIGFuZCBzZXNzaW9uIGtleS1sZW5ndGhzIGluIHRoZQotICAgICAgY3J5cHRvZ3JhcGhpYyBjb250ZXh0IHdpdGggdGhlIGluZGV4LCBkZXRlcm1pbmVkIGluIFN0ZXBzIDIgYW5kIDMuCi0KLSAgIDUuIEVuY3J5cHQgdGhlIFJUUCBwYXlsb2FkIHRvIHByb2R1Y2UgdGhlIEVuY3J5cHRlZCBQb3J0aW9uIG9mIHRoZQotICAgICAgcGFja2V0IChzZWUgU2VjdGlvbiA0LjEsIGZvciB0aGUgZGVmaW5lZCBjaXBoZXJzKS4gIFRoaXMgc3RlcCB1c2VzCi0gICAgICB0aGUgZW5jcnlwdGlvbiBhbGdvcml0aG0gaW5kaWNhdGVkIGluIHRoZSBjcnlwdG9ncmFwaGljIGNvbnRleHQsCi0gICAgICB0aGUgc2Vzc2lvbiBlbmNyeXB0aW9uIGtleSBhbmQgdGhlIHNlc3Npb24gc2FsdCAoaWYgdXNlZCkgZm91bmQgaW4KLSAgICAgIFN0ZXAgNCB0b2dldGhlciB3aXRoIHRoZSBpbmRleCBmb3VuZCBpbiBTdGVwIDIuCi0KLSAgIDYuIElmIHRoZSBNS0kgaW5kaWNhdG9yIGlzIHNldCB0byBvbmUsIGFwcGVuZCB0aGUgTUtJIHRvIHRoZSBwYWNrZXQuCi0KLSAgIDcuIEZvciBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uLCBjb21wdXRlIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcgZm9yIHRoZQotICAgICAgQXV0aGVudGljYXRlZCBQb3J0aW9uIG9mIHRoZSBwYWNrZXQsIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQuMi4KLSAgICAgIFRoaXMgc3RlcCB1c2VzIHRoZSBjdXJyZW50IHJvbGxvdmVyIGNvdW50ZXIsIHRoZSBhdXRoZW50aWNhdGlvbgotCi0KLQotCi0KLUJhdWdoZXIsIGV0IGFsLiAgICAgICAgICAgICBTdGFuZGFyZHMgVHJhY2sgICAgICAgICAgICAgICAgICAgIFtQYWdlIDExXQotDAotUkZDIDM3MTEgICAgICAgICAgICAgICAgICAgICAgICAgIFNSVFAgICAgICAgICAgICAgICAgICAgICAgICBNYXJjaCAyMDA0Ci0KLQotICAgICAgYWxnb3JpdGhtIGluZGljYXRlZCBpbiB0aGUgY3J5cHRvZ3JhcGhpYyBjb250ZXh0LCBhbmQgdGhlIHNlc3Npb24KLSAgICAgIGF1dGhlbnRpY2F0aW9uIGtleSBmb3VuZCBpbiBTdGVwIDQuICBBcHBlbmQgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZwotICAgICAgdG8gdGhlIHBhY2tldC4KLQotICAgOC4gSWYgbmVjZXNzYXJ5LCB1cGRhdGUgdGhlIFJPQyBhcyBpbiBTZWN0aW9uIDMuMy4xLCB1c2luZyB0aGUgcGFja2V0Ci0gICAgICBpbmRleCBkZXRlcm1pbmVkIGluIFN0ZXAgMi4KLQotICAgVG8gYXV0aGVudGljYXRlIGFuZCBkZWNyeXB0IGFuIFNSVFAgcGFja2V0LCB0aGUgcmVjZWl2ZXIgU0hBTEwgZG8gdGhlCi0gICBmb2xsb3dpbmc6Ci0KLSAgIDEuIERldGVybWluZSB3aGljaCBjcnlwdG9ncmFwaGljIGNvbnRleHQgdG8gdXNlIGFzIGRlc2NyaWJlZCBpbgotICAgICAgU2VjdGlvbiAzLjIuMy4KLQotICAgMi4gUnVuIHRoZSBhbGdvcml0aG0gaW4gU2VjdGlvbiAzLjMuMSB0byBnZXQgdGhlIGluZGV4IG9mIHRoZSBTUlRQCi0gICAgICBwYWNrZXQuICBUaGUgYWxnb3JpdGhtIHVzZXMgdGhlIHJvbGxvdmVyIGNvdW50ZXIgYW5kIGhpZ2hlc3QKLSAgICAgIHNlcXVlbmNlIG51bWJlciBpbiB0aGUgY3J5cHRvZ3JhcGhpYyBjb250ZXh0IHdpdGggdGhlIHNlcXVlbmNlCi0gICAgICBudW1iZXIgaW4gdGhlIFNSVFAgcGFja2V0LCBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjMuMS4KLQotICAgMy4gRGV0ZXJtaW5lIHRoZSBtYXN0ZXIga2V5IGFuZCBtYXN0ZXIgc2FsdC4gIElmIHRoZSBNS0kgaW5kaWNhdG9yIGluCi0gICAgICB0aGUgY29udGV4dCBpcyBzZXQgdG8gb25lLCB1c2UgdGhlIE1LSSBpbiB0aGUgU1JUUCBwYWNrZXQsCi0gICAgICBvdGhlcndpc2UgdXNlIHRoZSBpbmRleCBmcm9tIHRoZSBwcmV2aW91cyBzdGVwLCBhY2NvcmRpbmcgdG8KLSAgICAgIFNlY3Rpb24gOC4xLgotCi0gICA0LiBEZXRlcm1pbmUgdGhlIHNlc3Npb24ga2V5cywgYW5kIHNlc3Npb24gc2FsdCAoaWYgdXNlZCBieSB0aGUKLSAgICAgIHRyYW5zZm9ybSkgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gNC4zLCB1c2luZyBtYXN0ZXIga2V5LCBtYXN0ZXIKLSAgICAgIHNhbHQsIGtleV9kZXJpdmF0aW9uX3JhdGUgYW5kIHNlc3Npb24ga2V5LWxlbmd0aHMgaW4gdGhlCi0gICAgICBjcnlwdG9ncmFwaGljIGNvbnRleHQgd2l0aCB0aGUgaW5kZXgsIGRldGVybWluZWQgaW4gU3RlcHMgMiBhbmQgMy4KLQotICAgNS4gRm9yIG1lc3NhZ2UgYXV0aGVudGljYXRpb24gYW5kIHJlcGxheSBwcm90ZWN0aW9uLCBmaXJzdCBjaGVjayBpZgotICAgICAgdGhlIHBhY2tldCBoYXMgYmVlbiByZXBsYXllZCAoU2VjdGlvbiAzLjMuMiksIHVzaW5nIHRoZSBSZXBsYXkKLSAgICAgIExpc3QgYW5kIHRoZSBpbmRleCBhcyBkZXRlcm1pbmVkIGluIFN0ZXAgMi4gIElmIHRoZSBwYWNrZXQgaXMKLSAgICAgIGp1ZGdlZCB0byBiZSByZXBsYXllZCwgdGhlbiB0aGUgcGFja2V0IE1VU1QgYmUgZGlzY2FyZGVkLCBhbmQgdGhlCi0gICAgICBldmVudCBTSE9VTEQgYmUgbG9nZ2VkLgotCi0gICAgICBOZXh0LCBwZXJmb3JtIHZlcmlmaWNhdGlvbiBvZiB0aGUgYXV0aGVudGljYXRpb24gdGFnLCB1c2luZyB0aGUKLSAgICAgIHJvbGxvdmVyIGNvdW50ZXIgZnJvbSBTdGVwIDIsIHRoZSBhdXRoZW50aWNhdGlvbiBhbGdvcml0aG0KLSAgICAgIGluZGljYXRlZCBpbiB0aGUgY3J5cHRvZ3JhcGhpYyBjb250ZXh0LCBhbmQgdGhlIHNlc3Npb24KLSAgICAgIGF1dGhlbnRpY2F0aW9uIGtleSBmcm9tIFN0ZXAgNC4gIElmIHRoZSByZXN1bHQgaXMgIkFVVEhFTlRJQ0FUSU9OCi0gICAgICBGQUlMVVJFIiAoc2VlIFNlY3Rpb24gNC4yKSwgdGhlIHBhY2tldCBNVVNUIGJlIGRpc2NhcmRlZCBmcm9tCi0gICAgICBmdXJ0aGVyIHByb2Nlc3NpbmcgYW5kIHRoZSBldmVudCBTSE9VTEQgYmUgbG9nZ2VkLgotCi0gICA2LiBEZWNyeXB0IHRoZSBFbmNyeXB0ZWQgUG9ydGlvbiBvZiB0aGUgcGFja2V0IChzZWUgU2VjdGlvbiA0LjEsIGZvcgotICAgICAgdGhlIGRlZmluZWQgY2lwaGVycyksIHVzaW5nIHRoZSBkZWNyeXB0aW9uIGFsZ29yaXRobSBpbmRpY2F0ZWQgaW4KLSAgICAgIHRoZSBjcnlwdG9ncmFwaGljIGNvbnRleHQsIHRoZSBzZXNzaW9uIGVuY3J5cHRpb24ga2V5IGFuZCBzYWx0IChpZgotICAgICAgdXNlZCkgZm91bmQgaW4gU3RlcCA0IHdpdGggdGhlIGluZGV4IGZyb20gU3RlcCAyLgotCi0KLQotCi0KLQotQmF1Z2hlciwgZXQgYWwuICAgICAgICAgICAgIFN0YW5kYXJkcyBUcmFjayAgICAgICAgICAgICAgICAgICAgW1BhZ2UgMTJdCi0MCi1SRkMgMzcxMSAgICAgICAgICAgICAgICAgICAgICAgICAgU1JUUCAgICAgICAgICAgICAgICAgICAgICAgIE1hcmNoIDIwMDQKLQotCi0gICA3LiBVcGRhdGUgdGhlIHJvbGxvdmVyIGNvdW50ZXIgYW5kIGhpZ2hlc3Qgc2VxdWVuY2UgbnVtYmVyLCBzX2wsIGluCi0gICAgICB0aGUgY3J5cHRvZ3JhcGhpYyBjb250ZXh0IGFzIGluIFNlY3Rpb24gMy4zLjEsIHVzaW5nIHRoZSBwYWNrZXQKLSAgICAgIGluZGV4IGVzdGltYXRlZCBpbiBTdGVwIDIuICBJZiByZXBsYXkgcHJvdGVjdGlvbiBpcyBwcm92aWRlZCwgYWxzbwotICAgICAgdXBkYXRlIHRoZSBSZXBsYXkgTGlzdCBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjMuMi4KLQotICAgOC4gV2hlbiBwcmVzZW50LCByZW1vdmUgdGhlIE1LSSBhbmQgYXV0aGVudGljYXRpb24gdGFnIGZpZWxkcyBmcm9tCi0gICAgICB0aGUgcGFja2V0LgotCi0zLjMuMS4gIFBhY2tldCBJbmRleCBEZXRlcm1pbmF0aW9uLCBhbmQgUk9DLCBzX2wgVXBkYXRlCi0KLSAgIFNSVFAgaW1wbGVtZW50YXRpb25zIHVzZSBhbiAiaW1wbGljaXQiIHBhY2tldCBpbmRleCBmb3Igc2VxdWVuY2luZywKLSAgIGkuZS4sIG5vdCBhbGwgb2YgdGhlIGluZGV4IGlzIGV4cGxpY2l0bHkgY2FycmllZCBpbiB0aGUgU1JUUCBwYWNrZXQuCi0gICBGb3IgdGhlIHByZS1kZWZpbmVkIHRyYW5zZm9ybXMsIHRoZSBpbmRleCBpIGlzIHVzZWQgaW4gcmVwbGF5Ci0gICBwcm90ZWN0aW9uIChTZWN0aW9uIDMuMy4yKSwgZW5jcnlwdGlvbiAoU2VjdGlvbiA0LjEpLCBtZXNzYWdlCi0gICBhdXRoZW50aWNhdGlvbiAoU2VjdGlvbiA0LjIpLCBhbmQgZm9yIHRoZSBrZXkgZGVyaXZhdGlvbiAoU2VjdGlvbgotICAgNC4zKS4KLQotICAgV2hlbiB0aGUgc2Vzc2lvbiBzdGFydHMsIHRoZSBzZW5kZXIgc2lkZSBNVVNUIHNldCB0aGUgcm9sbG92ZXIKLSAgIGNvdW50ZXIsIFJPQywgdG8gemVyby4gIEVhY2ggdGltZSB0aGUgUlRQIHNlcXVlbmNlIG51bWJlciwgU0VRLCB3cmFwcwotICAgbW9kdWxvIDJeMTYsIHRoZSBzZW5kZXIgc2lkZSBNVVNUIGluY3JlbWVudCBST0MgYnkgb25lLCBtb2R1bG8gMl4zMgotICAgKHNlZSBzZWN1cml0eSBhc3BlY3RzIGJlbG93KS4gIFRoZSBzZW5kZXIncyBwYWNrZXQgaW5kZXggaXMgdGhlbgotICAgZGVmaW5lZCBhcwotCi0gICAgICBpID0gMl4xNiAqIFJPQyArIFNFUS4KLQotICAgUmVjZWl2ZXItc2lkZSBpbXBsZW1lbnRhdGlvbnMgdXNlIHRoZSBSVFAgc2VxdWVuY2UgbnVtYmVyIHRvCi0gICBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgaW5kZXggb2YgYSBwYWNrZXQsIHdoaWNoIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUKLSAgIHBhY2tldCBpbiB0aGUgc2VxdWVuY2Ugb2YgYWxsIFNSVFAgcGFja2V0cy4gIEEgcm9idXN0IGFwcHJvYWNoIGZvcgotICAgdGhlIHByb3BlciB1c2Ugb2YgYSByb2xsb3ZlciBjb3VudGVyIHJlcXVpcmVzIGl0cyBoYW5kbGluZyBhbmQgdXNlIHRvCi0gICBiZSB3ZWxsIGRlZmluZWQuICBJbiBwYXJ0aWN1bGFyLCBvdXQtb2Ytb3JkZXIgUlRQIHBhY2tldHMgd2l0aAotICAgc2VxdWVuY2UgbnVtYmVycyBjbG9zZSB0byAyXjE2IG9yIHplcm8gbXVzdCBiZSBwcm9wZXJseSBoYW5kbGVkLgotCi0gICBUaGUgaW5kZXggZXN0aW1hdGUgaXMgYmFzZWQgb24gdGhlIHJlY2VpdmVyJ3MgbG9jYWxseSBtYWludGFpbmVkIFJPQwotICAgYW5kIHNfbCB2YWx1ZXMuICBBdCB0aGUgc2V0dXAgb2YgdGhlIHNlc3Npb24sIHRoZSBST0MgTVVTVCBiZSBzZXQgdG8KLSAgIHplcm8uICBSZWNlaXZlcnMgam9pbmluZyBhbiBvbi1nb2luZyBzZXNzaW9uIE1VU1QgYmUgZ2l2ZW4gdGhlCi0gICBjdXJyZW50IFJPQyB2YWx1ZSB1c2luZyBvdXQtb2YtYmFuZCBzaWduYWxpbmcgc3VjaCBhcyBrZXktbWFuYWdlbWVudAotICAgc2lnbmFsaW5nLiAgRnVydGhlcm1vcmUsIHRoZSByZWNlaXZlciBTSEFMTCBpbml0aWFsaXplIHNfbCB0byB0aGUgUlRQCi0gICBzZXF1ZW5jZSBudW1iZXIgKFNFUSkgb2YgdGhlIGZpcnN0IG9ic2VydmVkIFNSVFAgcGFja2V0ICh1bmxlc3MgdGhlCi0gICBpbml0aWFsIHZhbHVlIGlzIHByb3ZpZGVkIGJ5IG91dCBvZiBiYW5kIHNpZ25hbGluZyBzdWNoIGFzIGtleQotICAgbWFuYWdlbWVudCkuCi0KLSAgIE9uIGNvbnNlY3V0aXZlIFNSVFAgcGFja2V0cywgdGhlIHJlY2VpdmVyIFNIT1VMRCBlc3RpbWF0ZSB0aGUgaW5kZXgKLSAgIGFzCi0gICAgICAgICBpID0gMl4xNiAqIHYgKyBTRVEsCi0KLSAgIHdoZXJlIHYgaXMgY2hvc2VuIGZyb20gdGhlIHNldCB7IFJPQy0xLCBST0MsIFJPQysxIH0gKG1vZHVsbyAyXjMyKQotICAgc3VjaCB0aGF0IGkgaXMgY2xvc2VzdCAoaW4gbW9kdWxvIDJeNDggc2Vuc2UpIHRvIHRoZSB2YWx1ZSAyXjE2ICogUk9DCi0gICArIHNfbCAoc2VlIEFwcGVuZGl4IEEgZm9yIHBzZXVkb2NvZGUpLgotCi0KLQotQmF1Z2hlciwgZXQgYWwuICAgICAgICAgICAgIFN0YW5kYXJkcyBUcmFjayAgICAgICAgICAgICAgICAgICAgW1BhZ2UgMTNdCi0MCi1SRkMgMzcxMSAgICAgICAgICAgICAgICAgICAgICAgICAgU1JUUCAgICAgICAgICAgICAgICAgICAgICAgIE1hcmNoIDIwMDQKLQotCi0gICBBZnRlciB0aGUgcGFja2V0IGhhcyBiZWVuIHByb2Nlc3NlZCBhbmQgYXV0aGVudGljYXRlZCAod2hlbiBlbmFibGVkCi0gICBmb3IgU1JUUCBwYWNrZXRzIGZvciB0aGUgc2Vzc2lvbiksIHRoZSByZWNlaXZlciBNVVNUIHVzZSB2IHRvCi0gICBjb25kaXRpb25hbGx5IHVwZGF0ZSBpdHMgc19sIGFuZCBST0MgdmFyaWFibGVzIGFzIGZvbGxvd3MuICBJZgotICAgdj0oUk9DLTEpIG1vZCAyXjMyLCB0aGVuIHRoZXJlIGlzIG5vIHVwZGF0ZSB0byBzX2wgb3IgUk9DLiAgSWYgdj1ST0MsCi0gICB0aGVuIHNfbCBpcyBzZXQgdG8gU0VRIGlmIGFuZCBvbmx5IGlmIFNFUSBpcyBsYXJnZXIgdGhhbiB0aGUgY3VycmVudAotICAgc19sOyB0aGVyZSBpcyBubyBjaGFuZ2UgdG8gUk9DLiAgSWYgdj0oUk9DKzEpIG1vZCAyXjMyLCB0aGVuIHNfbCBpcwotICAgc2V0IHRvIFNFUSBhbmQgUk9DIGlzIHNldCB0byB2LgotCi0gICBBZnRlciBhIHJlLWtleWluZyBvY2N1cnMgKGNoYW5naW5nIHRvIGEgbmV3IG1hc3RlciBrZXkpLCB0aGUgcm9sbG92ZXIKLSAgIGNvdW50ZXIgYWx3YXlzIG1haW50YWlucyBpdHMgc2VxdWVuY2Ugb2YgdmFsdWVzLCBpLmUuLCBpdCBNVVNUIE5PVCBiZQotICAgcmVzZXQgdG8gemVyby4KLQotICAgQXMgdGhlIHJvbGxvdmVyIGNvdW50ZXIgaXMgMzIgYml0cyBsb25nIGFuZCB0aGUgc2VxdWVuY2UgbnVtYmVyIGlzIDE2Ci0gICBiaXRzIGxvbmcsIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXRzIGJlbG9uZ2luZyB0byBhIGdpdmVuIFNSVFAKLSAgIHN0cmVhbSB0aGF0IGNhbiBiZSBzZWN1cmVkIHdpdGggdGhlIHNhbWUga2V5IGlzIDJeNDggdXNpbmcgdGhlIHByZS0KLSAgIGRlZmluZWQgdHJhbnNmb3Jtcy4gIEFmdGVyIHRoYXQgbnVtYmVyIG9mIFNSVFAgcGFja2V0cyBoYXZlIGJlZW4gc2VudAotICAgd2l0aCBhIGdpdmVuIChtYXN0ZXIgb3Igc2Vzc2lvbikga2V5LCB0aGUgc2VuZGVyIE1VU1QgTk9UIHNlbmQgYW55Ci0gICBtb3JlIHBhY2tldHMgd2l0aCB0aGF0IGtleS4gIChUaGVyZSBleGlzdHMgYSBzaW1pbGFyIGxpbWl0IGZvciBTUlRDUCwKLSAgIHdoaWNoIGluIHByYWN0aWNlIG1heSBiZSBtb3JlIHJlc3RyaWN0aXZlLCBzZWUgU2VjdGlvbiA5LjIuKSAgVGhpcwotICAgbGltaXRhdGlvbiBlbmZvcmNlcyBhIHNlY3VyaXR5IGJlbmVmaXQgYnkgcHJvdmlkaW5nIGFuIHVwcGVyIGJvdW5kIG9uCi0gICB0aGUgYW1vdW50IG9mIHRyYWZmaWMgdGhhdCBjYW4gcGFzcyBiZWZvcmUgY3J5cHRvZ3JhcGhpYyBrZXlzIGFyZQotICAgY2hhbmdlZC4gIFJlLWtleWluZyAoc2VlIFNlY3Rpb24gOC4xKSBNVVNUIGJlIHRyaWdnZXJlZCwgYmVmb3JlIHRoaXMKLSAgIGFtb3VudCBvZiB0cmFmZmljLCBhbmQgTUFZIGJlIHRyaWdnZXJlZCBlYXJsaWVyLCBlLmcuLCBmb3IgaW5jcmVhc2VkCi0gICBzZWN1cml0eSBhbmQgYWNjZXNzIGNvbnRyb2wgdG8gbWVkaWEuICBSZWN1cnJpbmcga2V5IGRlcml2YXRpb24gYnkKLSAgIG1lYW5zIG9mIGEgbm9uLXplcm8ga2V5X2Rlcml2YXRpb25fcmF0ZSAoc2VlIFNlY3Rpb24gNC4zKSwgYWxzbyBnaXZlcwotICAgc3Ryb25nZXIgc2VjdXJpdHkgYnV0IGRvZXMgbm90IGNoYW5nZSB0aGUgYWJvdmUgYWJzb2x1dGUgbWF4aW11bQotICAgdmFsdWUuCi0KLSAgIE9uIHRoZSByZWNlaXZlciBzaWRlLCB0aGVyZSBpcyBhIGNhdmVhdCB0byB1cGRhdGluZyBzX2wgYW5kIFJPQzogaWYKLSAgIG1lc3NhZ2UgYXV0aGVudGljYXRpb24gaXMgbm90IHByZXNlbnQsIG5laXRoZXIgdGhlIGluaXRpYWxpemF0aW9uIG9mCi0gICBzX2wsIG5vciB0aGUgUk9DIHVwZGF0ZSBjYW4gYmUgbWFkZSBjb21wbGV0ZWx5IHJvYnVzdC4gIFRoZQotICAgcmVjZWl2ZXIncyAiaW1wbGljaXQgaW5kZXgiIGFwcHJvYWNoIHdvcmtzIGZvciB0aGUgcHJlLWRlZmluZWQKLSAgIHRyYW5zZm9ybXMgYXMgbG9uZyBhcyB0aGUgcmVvcmRlciBhbmQgbG9zcyBvZiB0aGUgcGFja2V0cyBhcmUgbm90IHRvbwotICAgZ3JlYXQgYW5kIGJpdC1lcnJvcnMgZG8gbm90IG9jY3VyIGluIHVuZm9ydHVuYXRlIHdheXMuICBJbgotICAgcGFydGljdWxhciwgMl4xNSBwYWNrZXRzIHdvdWxkIG5lZWQgdG8gYmUgbG9zdCwgb3IgYSBwYWNrZXQgd291bGQKLSAgIG5lZWQgdG8gYmUgMl4xNSBwYWNrZXRzIG91dCBvZiBzZXF1ZW5jZSBiZWZvcmUgc3luY2hyb25pemF0aW9uIGlzCi0gICBsb3N0LiAgU3VjaCBkcmFzdGljIGxvc3Mgb3IgcmVvcmRlciBpcyBsaWtlbHkgdG8gZGlzcnVwdCB0aGUgUlRQCi0gICBhcHBsaWNhdGlvbiBpdHNlbGYuCi0KLSAgIFRoZSBhbGdvcml0aG0gZm9yIHRoZSBpbmRleCBlc3RpbWF0ZSBhbmQgUk9DIHVwZGF0ZSBpcyBhIG1hdHRlciBvZgotICAgaW1wbGVtZW50YXRpb24sIGFuZCBzaG91bGQgdGFrZSBpbnRvIGNvbnNpZGVyYXRpb24gdGhlIGVudmlyb25tZW50Ci0gICAoZS5nLiwgcGFja2V0IGxvc3MgcmF0ZSkgYW5kIHRoZSBjYXNlcyB3aGVuIHN5bmNocm9uaXphdGlvbiBpcyBsaWtlbHkKLSAgIHRvIGJlIGxvc3QsIGUuZy4sIHdoZW4gdGhlIGluaXRpYWwgc2VxdWVuY2UgbnVtYmVyIChyYW5kb21seSBjaG9zZW4KLSAgIGJ5IFJUUCkgaXMgbm90IGtub3duIGluIGFkdmFuY2UgKG5vdCBzZW50IGluIHRoZSBrZXkgbWFuYWdlbWVudAotICAgcHJvdG9jb2wpIGJ1dCBtYXkgYmUgbmVhciB0byB3cmFwIG1vZHVsbyAyXjE2LgotCi0KLQotCi0KLQotQmF1Z2hlciwgZXQgYWwuICAgICAgICAgICAgIFN0YW5kYXJkcyBUcmFjayAgICAgICAgICAgICAgICAgICAgW1BhZ2UgMTRdCi0MCi1SRkMgMzcxMSAgICAgICAgICAgICAgICAgICAgICAgICAgU1JUUCAgICAgICAgICAgICAgICAgICAgICAgIE1hcmNoIDIwMDQKLQotCi0gICBBIG1vcmUgZWxhYm9yYXRlIGFuZCBtb3JlIHJvYnVzdCBzY2hlbWUgdGhhbiB0aGUgb25lIGdpdmVuIGFib3ZlIGlzCi0gICB0aGUgaGFuZGxpbmcgb2YgUlRQJ3Mgb3duICJyb2xsb3ZlciBjb3VudGVyIiwgc2VlIEFwcGVuZGl4IEEuMSBvZgotICAgW1JGQzM1NTBdLgotCi0zLjMuMi4gIFJlcGxheSBQcm90ZWN0aW9uCi0KLSAgIFNlY3VyZSByZXBsYXkgcHJvdGVjdGlvbiBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gaW50ZWdyaXR5IHByb3RlY3Rpb24KLSAgIGlzIHByZXNlbnQuICBJdCBpcyBSRUNPTU1FTkRFRCB0byB1c2UgcmVwbGF5IHByb3RlY3Rpb24sIGJvdGggZm9yIFJUUAotICAgYW5kIFJUQ1AsIGFzIGludGVncml0eSBwcm90ZWN0aW9uIGFsb25lIGNhbm5vdCBhc3N1cmUgc2VjdXJpdHkKLSAgIGFnYWluc3QgcmVwbGF5IGF0dGFja3MuCi0KLSAgIEEgcGFja2V0IGlzICJyZXBsYXllZCIgd2hlbiBpdCBpcyBzdG9yZWQgYnkgYW4gYWR2ZXJzYXJ5LCBhbmQgdGhlbgotICAgcmUtaW5qZWN0ZWQgaW50byB0aGUgbmV0d29yay4gIFdoZW4gbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBpcwotICAgcHJvdmlkZWQsIFNSVFAgcHJvdGVjdHMgYWdhaW5zdCBzdWNoIGF0dGFja3MgdGhyb3VnaCBhIFJlcGxheSBMaXN0LgotICAgRWFjaCBTUlRQIHJlY2VpdmVyIG1haW50YWlucyBhIFJlcGxheSBMaXN0LCB3aGljaCBjb25jZXB0dWFsbHkKLSAgIGNvbnRhaW5zIHRoZSBpbmRpY2VzIG9mIGFsbCBvZiB0aGUgcGFja2V0cyB3aGljaCBoYXZlIGJlZW4gcmVjZWl2ZWQKLSAgIGFuZCBhdXRoZW50aWNhdGVkLiAgSW4gcHJhY3RpY2UsIHRoZSBsaXN0IGNhbiB1c2UgYSAic2xpZGluZyB3aW5kb3ciCi0gICBhcHByb2FjaCwgc28gdGhhdCBhIGZpeGVkIGFtb3VudCBvZiBzdG9yYWdlIHN1ZmZpY2VzIGZvciByZXBsYXkKLSAgIHByb3RlY3Rpb24uICBQYWNrZXQgaW5kaWNlcyB3aGljaCBsYWcgYmVoaW5kIHRoZSBwYWNrZXQgaW5kZXggaW4gdGhlCi0gICBjb250ZXh0IGJ5IG1vcmUgdGhhbiBTUlRQLVdJTkRPVy1TSVpFIGNhbiBiZSBhc3N1bWVkIHRvIGhhdmUgYmVlbgotICAgcmVjZWl2ZWQsIHdoZXJlIFNSVFAtV0lORE9XLVNJWkUgaXMgYSByZWNlaXZlci1zaWRlLCBpbXBsZW1lbnRhdGlvbi0KLSAgIGRlcGVuZGVudCBwYXJhbWV0ZXIgYW5kIE1VU1QgYmUgYXQgbGVhc3QgNjQsIGJ1dCB3aGljaCBNQVkgYmUgc2V0IHRvCi0gICBhIGhpZ2hlciB2YWx1ZS4KLQotICAgVGhlIHJlY2VpdmVyIGNoZWNrcyB0aGUgaW5kZXggb2YgYW4gaW5jb21pbmcgcGFja2V0IGFnYWluc3QgdGhlCi0gICByZXBsYXkgbGlzdCBhbmQgdGhlIHdpbmRvdy4gIE9ubHkgcGFja2V0cyB3aXRoIGluZGV4IGFoZWFkIG9mIHRoZQotICAgd2luZG93LCBvciwgaW5zaWRlIHRoZSB3aW5kb3cgYnV0IG5vdCBhbHJlYWR5IHJlY2VpdmVkLCBTSEFMTCBiZQotICAgYWNjZXB0ZWQuCi0KLSAgIEFmdGVyIHRoZSBwYWNrZXQgaGFzIGJlZW4gYXV0aGVudGljYXRlZCAoaWYgbmVjZXNzYXJ5IHRoZSB3aW5kb3cgaXMKLSAgIGZpcnN0IG1vdmVkIGFoZWFkKSwgdGhlIHJlcGxheSBsaXN0IFNIQUxMIGJlIHVwZGF0ZWQgd2l0aCB0aGUgbmV3Ci0gICBpbmRleC4KLQotICAgVGhlIFJlcGxheSBMaXN0IGNhbiBiZSBlZmZpY2llbnRseSBpbXBsZW1lbnRlZCBieSB1c2luZyBhIGJpdG1hcCB0bwotICAgcmVwcmVzZW50IHdoaWNoIHBhY2tldHMgaGF2ZSBiZWVuIHJlY2VpdmVkLCBhcyBkZXNjcmliZWQgaW4gdGhlCi0gICBTZWN1cml0eSBBcmNoaXRlY3R1cmUgZm9yIElQIFtSRkMyNDAxXS4KLQotMy40LiAgU2VjdXJlIFJUQ1AKLQotICAgU2VjdXJlIFJUQ1AgZm9sbG93cyB0aGUgZGVmaW5pdGlvbiBvZiBTZWN1cmUgUlRQLiAgU1JUQ1AgYWRkcyB0aHJlZQotICAgbWFuZGF0b3J5IG5ldyBmaWVsZHMgKHRoZSBTUlRDUCBpbmRleCwgYW4gImVuY3J5cHQtZmxhZyIsIGFuZCB0aGUKLSAgIGF1dGhlbnRpY2F0aW9uIHRhZykgYW5kIG9uZSBvcHRpb25hbCBmaWVsZCAodGhlIE1LSSkgdG8gdGhlIFJUQ1AKLSAgIHBhY2tldCBkZWZpbml0aW9uLiAgVGhlIHRocmVlIG1hbmRhdG9yeSBmaWVsZHMgTVVTVCBiZSBhcHBlbmRlZCB0byBhbgotICAgUlRDUCBwYWNrZXQgaW4gb3JkZXIgdG8gZm9ybSBhbiBlcXVpdmFsZW50IFNSVENQIHBhY2tldC4gIFRoZSBhZGRlZAotICAgZmllbGRzIGZvbGxvdyBhbnkgb3RoZXIgcHJvZmlsZS1zcGVjaWZpYyBleHRlbnNpb25zLgotCi0KLQotCi0KLQotQmF1Z2hlciwgZXQgYWwuICAgICAgICAgICAgIFN0YW5kYXJkcyBUcmFjayAgICAgICAgICAgICAgICAgICAgW1BhZ2UgMTVdCi0MCi1SRkMgMzcxMSAgICAgICAgICAgICAgICAgICAgICAgICAgU1JUUCAgICAgICAgICAgICAgICAgICAgICAgIE1hcmNoIDIwMDQKLQotCi0gICBBY2NvcmRpbmcgdG8gU2VjdGlvbiA2LjEgb2YgW1JGQzM1NTBdLCB0aGVyZSBpcyBhIFJFUVVJUkVEIHBhY2tldAotICAgZm9ybWF0IGZvciBjb21wb3VuZCBwYWNrZXRzLiAgU1JUQ1AgTVVTVCBiZSBnaXZlbiBwYWNrZXRzIGFjY29yZGluZwotICAgdG8gdGhhdCByZXF1aXJlbWVudCBpbiB0aGUgc2Vuc2UgdGhhdCB0aGUgZmlyc3QgcGFydCBNVVNUIGJlIGEgc2VuZGVyCi0gICByZXBvcnQgb3IgYSByZWNlaXZlciByZXBvcnQuICBIb3dldmVyLCB0aGUgUlRDUCBlbmNyeXB0aW9uIHByZWZpeCAoYQotICAgcmFuZG9tIDMyLWJpdCBxdWFudGl0eSkgc3BlY2lmaWVkIGluIHRoYXQgU2VjdGlvbiBNVVNUIE5PVCBiZSB1c2VkCi0gICBzaW5jZSwgYXMgaXMgc3RhdGVkIHRoZXJlLCBpdCBpcyBvbmx5IGFwcGxpY2FibGUgdG8gdGhlIGVuY3J5cHRpb24KLSAgIG1ldGhvZCBzcGVjaWZpZWQgaW4gW1JGQzM1NTBdIGFuZCBpcyBub3QgbmVlZGVkIGJ5IHRoZSBjcnlwdG9ncmFwaGljCi0gICBtZWNoYW5pc21zIHVzZWQgaW4gU1JUUC4KLQotICAgICAgMCAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMwotICAgICAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCi0gICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rPCsKLSAgICAgfFY9MnxQfCAgICBSQyAgIHwgICBQVD1TUiBvciBSUiAgIHwgICAgICAgICAgICAgbGVuZ3RoICAgICAgICAgIHwgfAotICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyB8Ci0gICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgU1NSQyBvZiBzZW5kZXIgICAgICAgICAgICAgICAgICAgICAgICB8IHwKLSAgICs+Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSsgfAotICAgfCB+ICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kZXIgaW5mbyAgICAgICAgICAgICAgICAgICAgICAgICAgfiB8Ci0gICB8ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHwKLSAgIHwgfiAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQgYmxvY2sgMSAgICAgICAgICAgICAgICAgICAgICAgIH4gfAotICAgfCArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyB8Ci0gICB8IH4gICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0IGJsb2NrIDIgICAgICAgICAgICAgICAgICAgICAgICB+IHwKLSAgIHwgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsgfAotICAgfCB+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfiB8Ci0gICB8ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHwKLSAgIHwgfFY9MnxQfCAgICBTQyAgIHwgIFBUPVNERVM9MjAyICB8ICAgICAgICAgICAgIGxlbmd0aCAgICAgICAgICAgIHwgfAotICAgfCArPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9KyB8Ci0gICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgIFNTUkMvQ1NSQ18xICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwKLSAgIHwgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsgfAotICAgfCB+ICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RFUyBpdGVtcyAgICAgICAgICAgICAgICAgICAgICAgICAgfiB8Ci0gICB8ICs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rIHwKLSAgIHwgfiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH4gfAotICAgKz4rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9Kz0rPSs9KyB8Ci0gICB8IHxFfCAgICAgICAgICAgICAgICAgICAgICAgICBTUlRDUCBpbmRleCAgICAgICAgICAgICAgICAgICAgICAgICB8IHwKLSAgIHwgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSs8KwotICAgfCB+ICAgICAgICAgICAgICAgICAgICAgU1JUQ1AgTUtJIChPUFRJT05BTCkgICAgICAgICAgICAgICAgICAgICAgfiB8Ci0gICB8ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHwKLSAgIHwgOiAgICAgICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uIHRhZyAgICAgICAgICAgICAgICAgICAgICAgIDogfAotICAgfCArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyB8Ci0gICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICstLSBFbmNyeXB0ZWQgUG9ydGlvbiAgICAgICAgICAgICAgICAgICAgQXV0aGVudGljYXRlZCBQb3J0aW9uIC0tLS0tKwotCi0KLSAgIEZpZ3VyZSAyLiAgQW4gZXhhbXBsZSBvZiB0aGUgZm9ybWF0IG9mIGEgU2VjdXJlIFJUQ1AgcGFja2V0LAotICAgY29uc2lzdGluZyBvZiBhbiB1bmRlcmx5aW5nIFJUQ1AgY29tcG91bmQgcGFja2V0IHdpdGggYSBTZW5kZXIgUmVwb3J0Ci0gICBhbmQgU0RFUyBwYWNrZXQuCi0KLQotCi0KLQotCi1CYXVnaGVyLCBldCBhbC4gICAgICAgICAgICAgU3RhbmRhcmRzIFRyYWNrICAgICAgICAgICAgICAgICAgICBbUGFnZSAxNl0KLQwKLVJGQyAzNzExICAgICAgICAgICAgICAgICAgICAgICAgICBTUlRQICAgICAgICAgICAgICAgICAgICAgICAgTWFyY2ggMjAwNAotCi0KLSAgIFRoZSBFbmNyeXB0ZWQgUG9ydGlvbiBvZiBhbiBTUlRDUCBwYWNrZXQgY29uc2lzdHMgb2YgdGhlIGVuY3J5cHRpb24KLSAgIChTZWN0aW9uIDQuMSkgb2YgdGhlIFJUQ1AgcGF5bG9hZCBvZiB0aGUgZXF1aXZhbGVudCBjb21wb3VuZCBSVENQCi0gICBwYWNrZXQsIGZyb20gdGhlIGZpcnN0IFJUQ1AgcGFja2V0LCBpLmUuLCBmcm9tIHRoZSBuaW50aCAoOSkgb2N0ZXQgdG8KLSAgIHRoZSBlbmQgb2YgdGhlIGNvbXBvdW5kIHBhY2tldC4gIFRoZSBBdXRoZW50aWNhdGVkIFBvcnRpb24gb2YgYW4KLSAgIFNSVENQIHBhY2tldCBjb25zaXN0cyBvZiB0aGUgZW50aXJlIGVxdWl2YWxlbnQgKGV2ZW50dWFsbHkgY29tcG91bmQpCi0gICBSVENQIHBhY2tldCwgdGhlIEUgZmxhZywgYW5kIHRoZSBTUlRDUCBpbmRleCAoYWZ0ZXIgYW55IGVuY3J5cHRpb24KLSAgIGhhcyBiZWVuIGFwcGxpZWQgdG8gdGhlIHBheWxvYWQpLgotCi0gICBUaGUgYWRkZWQgZmllbGRzIGFyZToKLQotICAgRS1mbGFnOiAxIGJpdCwgUkVRVUlSRUQKLSAgICAgICAgICAgIFRoZSBFLWZsYWcgaW5kaWNhdGVzIGlmIHRoZSBjdXJyZW50IFNSVENQIHBhY2tldCBpcwotICAgICAgICAgICAgZW5jcnlwdGVkIG9yIHVuZW5jcnlwdGVkLiAgU2VjdGlvbiA5LjEgb2YgW1JGQzM1NTBdIGFsbG93cwotICAgICAgICAgICAgdGhlIHNwbGl0IG9mIGEgY29tcG91bmQgUlRDUCBwYWNrZXQgaW50byB0d28gbG93ZXItbGF5ZXIKLSAgICAgICAgICAgIHBhY2tldHMsIG9uZSB0byBiZSBlbmNyeXB0ZWQgYW5kIG9uZSB0byBiZSBzZW50IGluIHRoZQotICAgICAgICAgICAgY2xlYXIuICBUaGUgRSBiaXQgc2V0IHRvICIxIiBpbmRpY2F0ZXMgZW5jcnlwdGVkIHBhY2tldCwgYW5kCi0gICAgICAgICAgICAiMCIgaW5kaWNhdGVzIG5vbi1lbmNyeXB0ZWQgcGFja2V0LgotCi0gICBTUlRDUCBpbmRleDogMzEgYml0cywgUkVRVUlSRUQKLSAgICAgICAgICAgIFRoZSBTUlRDUCBpbmRleCBpcyBhIDMxLWJpdCBjb3VudGVyIGZvciB0aGUgU1JUQ1AgcGFja2V0LgotICAgICAgICAgICAgVGhlIGluZGV4IGlzIGV4cGxpY2l0bHkgaW5jbHVkZWQgaW4gZWFjaCBwYWNrZXQsIGluIGNvbnRyYXN0Ci0gICAgICAgICAgICB0byB0aGUgImltcGxpY2l0IiBpbmRleCBhcHByb2FjaCB1c2VkIGZvciBTUlRQLiAgVGhlIFNSVENQCi0gICAgICAgICAgICBpbmRleCBNVVNUIGJlIHNldCB0byB6ZXJvIGJlZm9yZSB0aGUgZmlyc3QgU1JUQ1AgcGFja2V0IGlzCi0gICAgICAgICAgICBzZW50LCBhbmQgTVVTVCBiZSBpbmNyZW1lbnRlZCBieSBvbmUsIG1vZHVsbyAyXjMxLCBhZnRlcgotICAgICAgICAgICAgZWFjaCBTUlRDUCBwYWNrZXQgaXMgc2VudC4gIEluIHBhcnRpY3VsYXIsIGFmdGVyIGEgcmUta2V5LAotICAgICAgICAgICAgdGhlIFNSVENQIGluZGV4IE1VU1QgTk9UIGJlIHJlc2V0IHRvIHplcm8gYWdhaW4uCi0KLSAgIEF1dGhlbnRpY2F0aW9uIFRhZzogY29uZmlndXJhYmxlIGxlbmd0aCwgUkVRVUlSRUQKLSAgICAgICAgICAgIFRoZSBhdXRoZW50aWNhdGlvbiB0YWcgaXMgdXNlZCB0byBjYXJyeSBtZXNzYWdlCi0gICAgICAgICAgICBhdXRoZW50aWNhdGlvbiBkYXRhLgotCi0gICBNS0k6IGNvbmZpZ3VyYWJsZSBsZW5ndGgsIE9QVElPTkFMCi0gICAgICAgICAgICBUaGUgTUtJIGlzIHRoZSBNYXN0ZXIgS2V5IEluZGljYXRvciwgYW5kIGZ1bmN0aW9ucyBhY2NvcmRpbmcKLSAgICAgICAgICAgIHRvIHRoZSBNS0kgZGVmaW5pdGlvbiBpbiBTZWN0aW9uIDMuCi0KLSAgIFNSVENQIHVzZXMgdGhlIGNyeXB0b2dyYXBoaWMgY29udGV4dCBwYXJhbWV0ZXJzIGFuZCBwYWNrZXQgcHJvY2Vzc2luZwotICAgb2YgU1JUUCBieSBkZWZhdWx0LCB3aXRoIHRoZSBmb2xsb3dpbmcgY2hhbmdlczoKLQotICAgKiAgVGhlIHJlY2VpdmVyIGRvZXMgbm90IG5lZWQgdG8gImVzdGltYXRlIiB0aGUgaW5kZXgsIGFzIGl0IGlzCi0gICAgICBleHBsaWNpdGx5IHNpZ25hbGVkIGluIHRoZSBwYWNrZXQuCi0KLSAgICogIFByZS1kZWZpbmVkIFNSVENQIGVuY3J5cHRpb24gaXMgYXMgc3BlY2lmaWVkIGluIFNlY3Rpb24gNC4xLCBidXQKLSAgICAgIHVzaW5nIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBTUlRDUCBFbmNyeXB0ZWQgUG9ydGlvbiBnaXZlbiBpbiB0aGlzCi0gICAgICBzZWN0aW9uLCBhbmQgdXNpbmcgdGhlIFNSVENQIGluZGV4IGFzIHRoZSBpbmRleCBpLiAgVGhlIGVuY3J5cHRpb24KLSAgICAgIHRyYW5zZm9ybSBhbmQgcmVsYXRlZCBwYXJhbWV0ZXJzIFNIQUxMIGJ5IGRlZmF1bHQgYmUgdGhlIHNhbWUKLSAgICAgIHNlbGVjdGVkIGZvciB0aGUgcHJvdGVjdGlvbiBvZiB0aGUgYXNzb2NpYXRlZCBTUlRQIHN0cmVhbShzKSwKLSAgICAgIHdoaWxlIHRoZSBOVUxMIGFsZ29yaXRobSBTSEFMTCBiZSBhcHBsaWVkIHRvIHRoZSBSVENQIHBhY2tldHMgbm90Ci0gICAgICB0byBiZSBlbmNyeXB0ZWQuICBTUlRDUCBtYXkgaGF2ZSBhIGRpZmZlcmVudCBlbmNyeXB0aW9uIHRyYW5zZm9ybQotCi0KLQotQmF1Z2hlciwgZXQgYWwuICAgICAgICAgICAgIFN0YW5kYXJkcyBUcmFjayAgICAgICAgICAgICAgICAgICAgW1BhZ2UgMTddCi0MCi1SRkMgMzcxMSAgICAgICAgICAgICAgICAgICAgICAgICAgU1JUUCAgICAgICAgICAgICAgICAgICAgICAgIE1hcmNoIDIwMDQKLQotCi0gICAgICB0aGFuIHRoZSBvbmUgdXNlZCBieSB0aGUgY29ycmVzcG9uZGluZyBTUlRQLiAgVGhlIGV4cGVjdGVkIHVzZSBmb3IKLSAgICAgIHRoaXMgZmVhdHVyZSBpcyB3aGVuIHRoZSBmb3JtZXIgaGFzIE5VTEwtZW5jcnlwdGlvbiBhbmQgdGhlIGxhdHRlcgotICAgICAgaGFzIGEgbm9uIE5VTEwtZW5jcnlwdGlvbi4KLQotICAgVGhlIEUtZmxhZyBpcyBhc3NpZ25lZCBhIHZhbHVlIGJ5IHRoZSBzZW5kZXIgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlCi0gICBwYWNrZXQgd2FzIGVuY3J5cHRlZCBvciBub3QuCi0KLSAgICogIFNSVENQIGRlY3J5cHRpb24gaXMgcGVyZm9ybWVkIGFzIGluIFNlY3Rpb24gNCwgYnV0IG9ubHkgaWYgdGhlIEUKLSAgICAgIGZsYWcgaXMgZXF1YWwgdG8gMS4gIElmIHNvLCB0aGUgRW5jcnlwdGVkIFBvcnRpb24gaXMgZGVjcnlwdGVkLAotICAgICAgdXNpbmcgdGhlIFNSVENQIGluZGV4IGFzIHRoZSBpbmRleCBpLiAgSW4gY2FzZSB0aGUgRS1mbGFnIGlzIDAsCi0gICAgICB0aGUgcGF5bG9hZCBpcyBzaW1wbHkgbGVmdCB1bm1vZGlmaWVkLgotCi0gICAqICBTUlRDUCByZXBsYXkgcHJvdGVjdGlvbiBpcyBhcyBkZWZpbmVkIGluIFNlY3Rpb24gMy4zLjIsIGJ1dCB1c2luZwotICAgICAgdGhlIFNSVENQIGluZGV4IGFzIHRoZSBpbmRleCBpIGFuZCBhIHNlcGFyYXRlIFJlcGxheSBMaXN0IHRoYXQgaXMKLSAgICAgIHNwZWNpZmljIHRvIFNSVENQLgotCi0gICAqICBUaGUgcHJlLWRlZmluZWQgU1JUQ1AgYXV0aGVudGljYXRpb24gdGFnIGlzIHNwZWNpZmllZCBhcyBpbgotICAgICAgU2VjdGlvbiA0LjIsIGJ1dCB3aXRoIHRoZSBBdXRoZW50aWNhdGVkIFBvcnRpb24gb2YgdGhlIFNSVENQCi0gICAgICBwYWNrZXQgZ2l2ZW4gaW4gdGhpcyBzZWN0aW9uICh3aGljaCBpbmNsdWRlcyB0aGUgaW5kZXgpLiAgVGhlCi0gICAgICBhdXRoZW50aWNhdGlvbiB0cmFuc2Zvcm0gYW5kIHJlbGF0ZWQgcGFyYW1ldGVycyAoZS5nLiwga2V5IHNpemUpCi0gICAgICBTSEFMTCBieSBkZWZhdWx0IGJlIHRoZSBzYW1lIGFzIHNlbGVjdGVkIGZvciB0aGUgcHJvdGVjdGlvbiBvZiB0aGUKLSAgICAgIGFzc29jaWF0ZWQgU1JUUCBzdHJlYW0ocykuCi0KLSAgICogIEluIHRoZSBsYXN0IHN0ZXAgb2YgdGhlIHByb2Nlc3NpbmcsIG9ubHkgdGhlIHNlbmRlciBuZWVkcyB0bwotICAgICAgdXBkYXRlIHRoZSB2YWx1ZSBvZiB0aGUgU1JUQ1AgaW5kZXggYnkgaW5jcmVtZW50aW5nIGl0IG1vZHVsbyAyXjMxCi0gICAgICBhbmQgZm9yIHNlY3VyaXR5IHJlYXNvbnMgdGhlIHNlbmRlciBNVVNUIGFsc28gY2hlY2sgdGhlIG51bWJlciBvZgotICAgICAgU1JUQ1AgcGFja2V0cyBwcm9jZXNzZWQsIHNlZSBTZWN0aW9uIDkuMi4KLQotICAgTWVzc2FnZSBhdXRoZW50aWNhdGlvbiBmb3IgUlRDUCBpcyBSRVFVSVJFRCwgYXMgaXQgaXMgdGhlIGNvbnRyb2wKLSAgIHByb3RvY29sIChlLmcuLCBpdCBoYXMgYSBCWUUgcGFja2V0KSBmb3IgUlRQLgotCi0gICBQcmVjYXV0aW9ucyBtdXN0IGJlIHRha2VuIHNvIHRoYXQgdGhlIHBhY2tldCBleHBhbnNpb24gaW4gU1JUQ1AgKGR1ZQotICAgdG8gdGhlIGFkZGVkIGZpZWxkcykgZG9lcyBub3QgY2F1c2UgU1JUQ1AgbWVzc2FnZXMgdG8gdXNlIG1vcmUgdGhhbgotICAgdGhlaXIgc2hhcmUgb2YgUlRDUCBiYW5kd2lkdGguICBUbyBhdm9pZCB0aGlzLCB0aGUgZm9sbG93aW5nIHR3bwotICAgbWVhc3VyZXMgTVVTVCBiZSB0YWtlbjoKLQotICAgMS4gV2hlbiBpbml0aWFsaXppbmcgdGhlIFJUQ1AgdmFyaWFibGUgImF2Z19ydGNwX3NpemUiIGRlZmluZWQgaW4KLSAgICAgIGNoYXB0ZXIgNi4zIG9mIFtSRkMzNTUwXSwgaXQgTVVTVCBpbmNsdWRlIHRoZSBzaXplIG9mIHRoZSBmaWVsZHMKLSAgICAgIHRoYXQgd2lsbCBiZSBhZGRlZCBieSBTUlRDUCAoaW5kZXgsIEUtYml0LCBhdXRoZW50aWNhdGlvbiB0YWcsIGFuZAotICAgICAgd2hlbiBwcmVzZW50LCB0aGUgTUtJKS4KLQotICAgMi4gV2hlbiB1cGRhdGluZyB0aGUgImF2Z19ydGNwX3NpemUiIHVzaW5nIHRoZSB2YXJpYWJsZSAicGFja2V0X3NpemUiCi0gICAgICAoc2VjdGlvbiA2LjMuMyBvZiBbUkZDMzU1MF0pLCB0aGUgdmFsdWUgb2YgInBhY2tldF9zaXplIiBNVVNUCi0gICAgICBpbmNsdWRlIHRoZSBzaXplIG9mIHRoZSBhZGRpdGlvbmFsIGZpZWxkcyBhZGRlZCBieSBTUlRDUC4KLQotCi0KLQotCi0KLQotQmF1Z2hlciwgZXQgYWwuICAgICAgICAgICAgIFN0YW5kYXJkcyBUcmFjayAgICAgICAgICAgICAgICAgICAgW1BhZ2UgMThdCi0MCi1SRkMgMzcxMSAgICAgICAgICAgICAgICAgICAgICAgICAgU1JUUCAgICAgICAgICAgICAgICAgICAgICAgIE1hcmNoIDIwMDQKLQotCi0gICBXaXRoIHRoZXNlIG1lYXN1cmVzIGluIHBsYWNlIHRoZSBTUlRDUCBtZXNzYWdlcyB3aWxsIG5vdCB1c2UgbW9yZQotICAgdGhhbiB0aGUgYWxsb3R0ZWQgYmFuZHdpZHRoLiAgVGhlIGVmZmVjdCBvZiB0aGUgc2l6ZSBvZiB0aGUgYWRkZWQKLSAgIGZpZWxkcyBvbiB0aGUgU1JUQ1AgdHJhZmZpYyB3aWxsIGJlIHRoYXQgbWVzc2FnZXMgd2lsbCBiZSBzZW50IHdpdGgKLSAgIGxvbmdlciBwYWNrZXQgaW50ZXJ2YWxzLiAgVGhlIGluY3JlYXNlIGluIHRoZSBpbnRlcnZhbHMgd2lsbCBiZQotICAgZGlyZWN0bHkgcHJvcG9ydGlvbmFsIHRvIHNpemUgb2YgdGhlIGFkZGVkIGZpZWxkcy4gIEZvciB0aGUgcHJlLQotICAgZGVmaW5lZCB0cmFuc2Zvcm1zLCB0aGUgc2l6ZSBvZiB0aGUgYWRkZWQgZmllbGRzIHdpbGwgYmUgYXQgbGVhc3QgMTQKLSAgIG9jdGV0cywgYW5kIHVwcGVyIGJvdW5kZWQgZGVwZW5kaW5nIG9uIE1LSSBhbmQgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZwotICAgc2l6ZXMuCi0KLTQuICBQcmUtRGVmaW5lZCBDcnlwdG9ncmFwaGljIFRyYW5zZm9ybXMKLQotICAgV2hpbGUgdGhlcmUgYXJlIG51bWVyb3VzIGVuY3J5cHRpb24gYW5kIG1lc3NhZ2UgYXV0aGVudGljYXRpb24KLSAgIGFsZ29yaXRobXMgdGhhdCBjYW4gYmUgdXNlZCBpbiBTUlRQLCBiZWxvdyB3ZSBkZWZpbmUgZGVmYXVsdAotICAgYWxnb3JpdGhtcyBpbiBvcmRlciB0byBhdm9pZCB0aGUgY29tcGxleGl0eSBvZiBzcGVjaWZ5aW5nIHRoZQotICAgZW5jb2RpbmdzIGZvciB0aGUgc2lnbmFsaW5nIG9mIGFsZ29yaXRobSBhbmQgcGFyYW1ldGVyIGlkZW50aWZpZXJzLgotICAgVGhlIGRlZmluZWQgYWxnb3JpdGhtcyBoYXZlIGJlZW4gY2hvc2VuIGFzIHRoZXkgZnVsZmlsbCB0aGUgZ29hbHMKLSAgIGxpc3RlZCBpbiBTZWN0aW9uIDIuICBSZWNvbW1lbmRhdGlvbnMgb24gaG93IHRvIGV4dGVuZCBTUlRQIHdpdGggbmV3Ci0gICB0cmFuc2Zvcm1zIGFyZSBnaXZlbiBpbiBTZWN0aW9uIDYuCi0KLTQuMS4gIEVuY3J5cHRpb24KLQotICAgVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBjb21tb24gdG8gYm90aCBwcmUtZGVmaW5lZCwgbm9uLU5VTEwsCi0gICBlbmNyeXB0aW9uIHRyYW5zZm9ybXMgc3BlY2lmaWVkIGluIHRoaXMgc2VjdGlvbi4KLQotICAgKiAgQkxPQ0tfQ0lQSEVSLU1PREUgaW5kaWNhdGVzIHRoZSBibG9jayBjaXBoZXIgdXNlZCBhbmQgaXRzIG1vZGUgb2YKLSAgICAgIG9wZXJhdGlvbgotICAgKiAgbl9iIGlzIHRoZSBiaXQtc2l6ZSBvZiB0aGUgYmxvY2sgZm9yIHRoZSBibG9jayBjaXBoZXIKLSAgICogIGtfZSBpcyB0aGUgc2Vzc2lvbiBlbmNyeXB0aW9uIGtleQotICAgKiAgbl9lIGlzIHRoZSBiaXQtbGVuZ3RoIG9mIGtfZQotICAgKiAga19zIGlzIHRoZSBzZXNzaW9uIHNhbHRpbmcga2V5Ci0gICAqICBuX3MgaXMgdGhlIGJpdC1sZW5ndGggb2Yga19zCi0gICAqICBTUlRQX1BSRUZJWF9MRU5HVEggaXMgdGhlIG9jdGV0IGxlbmd0aCBvZiB0aGUga2V5c3RyZWFtIHByZWZpeCwgYQotICAgICAgbm9uLW5lZ2F0aXZlIGludGVnZXIsIHNwZWNpZmllZCBieSB0aGUgbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBjb2RlCi0gICAgICBpbiB1c2UuCi0KLSAgIFRoZSBkaXN0aW5jdCBzZXNzaW9uIGtleXMgYW5kIHNhbHRzIGZvciBTUlRQL1NSVENQIGFyZSBieSBkZWZhdWx0Ci0gICBkZXJpdmVkIGFzIHNwZWNpZmllZCBpbiBTZWN0aW9uIDQuMy4KLQotICAgVGhlIGVuY3J5cHRpb24gdHJhbnNmb3JtcyBkZWZpbmVkIGluIFNSVFAgbWFwIHRoZSBTUlRQIHBhY2tldCBpbmRleAotICAgYW5kIHNlY3JldCBrZXkgaW50byBhIHBzZXVkby1yYW5kb20ga2V5c3RyZWFtIHNlZ21lbnQuICBFYWNoCi0gICBrZXlzdHJlYW0gc2VnbWVudCBlbmNyeXB0cyBhIHNpbmdsZSBSVFAgcGFja2V0LiAgVGhlIHByb2Nlc3Mgb2YKLSAgIGVuY3J5cHRpbmcgYSBwYWNrZXQgY29uc2lzdHMgb2YgZ2VuZXJhdGluZyB0aGUga2V5c3RyZWFtIHNlZ21lbnQKLSAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhY2tldCwgYW5kIHRoZW4gYml0d2lzZSBleGNsdXNpdmUtb3JpbmcgdGhhdAotICAga2V5c3RyZWFtIHNlZ21lbnQgb250byB0aGUgcGF5bG9hZCBvZiB0aGUgUlRQIHBhY2tldCB0byBwcm9kdWNlIHRoZQotICAgRW5jcnlwdGVkIFBvcnRpb24gb2YgdGhlIFNSVFAgcGFja2V0LiAgSW4gY2FzZSB0aGUgcGF5bG9hZCBzaXplIGlzCi0gICBub3QgYW4gaW50ZWdlciBtdWx0aXBsZSBvZiBuX2IgYml0cywgdGhlIGV4Y2VzcyAobGVhc3Qgc2lnbmlmaWNhbnQpCi0gICBiaXRzIG9mIHRoZSBrZXlzdHJlYW0gYXJlIHNpbXBseSBkaXNjYXJkZWQuICBEZWNyeXB0aW9uIGlzIGRvbmUgdGhlCi0gICBzYW1lIHdheSwgYnV0IHN3YXBwaW5nIHRoZSByb2xlcyBvZiB0aGUgcGxhaW50ZXh0IGFuZCBjaXBoZXJ0ZXh0LgotCi0KLQotQmF1Z2hlciwgZXQgYWwuICAgICAgICAgICAgIFN0YW5kYXJkcyBUcmFjayAgICAgICAgICAgICAgICAgICAgW1BhZ2UgMTldCi0MCi1SRkMgMzcxMSAgICAgICAgICAgICAgICAgICAgICAgICAgU1JUUCAgICAgICAgICAgICAgICAgICAgICAgIE1hcmNoIDIwMDQKLQotCi0gICArLS0tLSsgICArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgS0cgfC0tPnwgS2V5c3RyZWFtIFByZWZpeCB8ICAgICAgICAgIEtleXN0cmVhbSBTdWZmaXggICAgICAgfC0tLSsKLSAgICstLS0tKyAgICstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgIHYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICBQYXlsb2FkIG9mIFJUUCBQYWNrZXQgICAgICAgfC0+KCopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFbmNyeXB0ZWQgUG9ydGlvbiBvZiBTUlRQIFBhY2tldHw8LS0rCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQotICAgRmlndXJlIDM6IERlZmF1bHQgU1JUUCBFbmNyeXB0aW9uIFByb2Nlc3NpbmcuICBIZXJlIEtHIGRlbm90ZXMgdGhlCi0gICBrZXlzdHJlYW0gZ2VuZXJhdG9yLCBhbmQgKCopIGRlbm90ZXMgYml0d2lzZSBleGNsdXNpdmUtb3IuCi0KLSAgIFRoZSBkZWZpbml0aW9uIG9mIGhvdyB0aGUga2V5c3RyZWFtIGlzIGdlbmVyYXRlZCwgZ2l2ZW4gdGhlIGluZGV4LAotICAgZGVwZW5kcyBvbiB0aGUgY2lwaGVyIGFuZCBpdHMgbW9kZSBvZiBvcGVyYXRpb24uICBCZWxvdywgdHdvIHN1Y2gKLSAgIGtleXN0cmVhbSBnZW5lcmF0b3JzIGFyZSBkZWZpbmVkLiAgVGhlIE5VTEwgY2lwaGVyIGlzIGFsc28gZGVmaW5lZCwKLSAgIHRvIGJlIHVzZWQgd2hlbiBlbmNyeXB0aW9uIG9mIFJUUCBpcyBub3QgcmVxdWlyZWQuCi0KLSAgIFRoZSBTUlRQIGRlZmluaXRpb24gb2YgdGhlIGtleXN0cmVhbSBpcyBpbGx1c3RyYXRlZCBpbiBGaWd1cmUgMy4gIFRoZQotICAgaW5pdGlhbCBvY3RldHMgb2YgZWFjaCBrZXlzdHJlYW0gc2VnbWVudCBNQVkgYmUgcmVzZXJ2ZWQgZm9yIHVzZSBpbiBhCi0gICBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGNvZGUsIGluIHdoaWNoIGNhc2UgdGhlIGtleXN0cmVhbSB1c2VkIGZvcgotICAgZW5jcnlwdGlvbiBzdGFydHMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGxhc3QgcmVzZXJ2ZWQgb2N0ZXQuICBUaGUKLSAgIGluaXRpYWwgcmVzZXJ2ZWQgb2N0ZXRzIGFyZSBjYWxsZWQgdGhlICJrZXlzdHJlYW0gcHJlZml4IiAobm90IHRvIGJlCi0gICBjb25mdXNlZCB3aXRoIHRoZSAiZW5jcnlwdGlvbiBwcmVmaXgiIG9mIFtSRkMzNTUwLCBTZWN0aW9uIDYuMV0pLCBhbmQKLSAgIHRoZSByZW1haW5pbmcgb2N0ZXRzIGFyZSBjYWxsZWQgdGhlICJrZXlzdHJlYW0gc3VmZml4Ii4gIFRoZQotICAga2V5c3RyZWFtIHByZWZpeCBNVVNUIE5PVCBiZSB1c2VkIGZvciBlbmNyeXB0aW9uLiAgVGhlIHByb2Nlc3MgaXMKLSAgIGlsbHVzdHJhdGVkIGluIEZpZ3VyZSAzLgotCi0gICBUaGUgbnVtYmVyIG9mIG9jdGV0cyBpbiB0aGUga2V5c3RyZWFtIHByZWZpeCBpcyBkZW5vdGVkIGFzCi0gICBTUlRQX1BSRUZJWF9MRU5HVEguICBUaGUga2V5c3RyZWFtIHByZWZpeCBpcyBpbmRpY2F0ZWQgYnkgYSBwb3NpdGl2ZSwKLSAgIG5vbi16ZXJvIHZhbHVlIG9mIFNSVFBfUFJFRklYX0xFTkdUSC4gIFRoaXMgbWVhbnMgdGhhdCwgZXZlbiBpZgotICAgY29uZmlkZW50aWFsaXR5IGlzIG5vdCB0byBiZSBwcm92aWRlZCwgdGhlIGtleXN0cmVhbSBnZW5lcmF0b3Igb3V0cHV0Ci0gICBtYXkgc3RpbGwgbmVlZCB0byBiZSBjb21wdXRlZCBmb3IgcGFja2V0IGF1dGhlbnRpY2F0aW9uLCBpbiB3aGljaAotICAgY2FzZSB0aGUgZGVmYXVsdCBrZXlzdHJlYW0gZ2VuZXJhdG9yIChtb2RlKSBTSEFMTCBiZSB1c2VkLgotCi0gICBUaGUgZGVmYXVsdCBjaXBoZXIgaXMgdGhlIEFkdmFuY2VkIEVuY3J5cHRpb24gU3RhbmRhcmQgKEFFUykgW0FFU10sCi0gICBhbmQgd2UgZGVmaW5lIHR3byBtb2RlcyBvZiBydW5uaW5nIEFFUywgKDEpIFNlZ21lbnRlZCBJbnRlZ2VyIENvdW50ZXIKLSAgIE1vZGUgQUVTIGFuZCAoMikgQUVTIGluIGY4LW1vZGUuICBJbiB0aGUgcmVtYWluZGVyIG9mIHRoaXMgc2VjdGlvbiwKLSAgIGxldCBFKGsseCkgYmUgQUVTIGFwcGxpZWQgdG8ga2V5IGsgYW5kIGlucHV0IGJsb2NrIHguCi0KLQotCi0KLQotCi0KLQotCi0KLUJhdWdoZXIsIGV0IGFsLiAgICAgICAgICAgICBTdGFuZGFyZHMgVHJhY2sgICAgICAgICAgICAgICAgICAgIFtQYWdlIDIwXQotDAotUkZDIDM3MTEgICAgICAgICAgICAgICAgICAgICAgICAgIFNSVFAgICAgICAgICAgICAgICAgICAgICAgICBNYXJjaCAyMDA0Ci0KLQotNC4xLjEuICBBRVMgaW4gQ291bnRlciBNb2RlCi0KLSAgIENvbmNlcHR1YWxseSwgY291bnRlciBtb2RlIFtBRVMtQ1RSXSBjb25zaXN0cyBvZiBlbmNyeXB0aW5nCi0gICBzdWNjZXNzaXZlIGludGVnZXJzLiAgVGhlIGFjdHVhbCBkZWZpbml0aW9uIGlzIHNvbWV3aGF0IG1vcmUKLSAgIGNvbXBsaWNhdGVkLCBpbiBvcmRlciB0byByYW5kb21pemUgdGhlIHN0YXJ0aW5nIHBvaW50IG9mIHRoZSBpbnRlZ2VyCi0gICBzZXF1ZW5jZS4gIEVhY2ggcGFja2V0IGlzIGVuY3J5cHRlZCB3aXRoIGEgZGlzdGluY3Qga2V5c3RyZWFtCi0gICBzZWdtZW50LCB3aGljaCBTSEFMTCBiZSBjb21wdXRlZCBhcyBmb2xsb3dzLgotCi0gICBBIGtleXN0cmVhbSBzZWdtZW50IFNIQUxMIGJlIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSAxMjgtYml0IG91dHB1dAotICAgYmxvY2tzIG9mIHRoZSBBRVMgY2lwaGVyIGluIHRoZSBlbmNyeXB0IGRpcmVjdGlvbiwgdXNpbmcga2V5IGsgPSBrX2UsCi0gICBpbiB3aGljaCB0aGUgYmxvY2sgaW5kaWNlcyBhcmUgaW4gaW5jcmVhc2luZyBvcmRlci4gIFN5bWJvbGljYWxseSwKLSAgIGVhY2gga2V5c3RyZWFtIHNlZ21lbnQgbG9va3MgbGlrZQotCi0gICAgICBFKGssIElWKSB8fCBFKGssIElWICsgMSBtb2QgMl4xMjgpIHx8IEUoaywgSVYgKyAyIG1vZCAyXjEyOCkgLi4uCi0KLSAgIHdoZXJlIHRoZSAxMjgtYml0IGludGVnZXIgdmFsdWUgSVYgU0hBTEwgYmUgZGVmaW5lZCBieSB0aGUgU1NSQywgdGhlCi0gICBTUlRQIHBhY2tldCBpbmRleCBpLCBhbmQgdGhlIFNSVFAgc2Vzc2lvbiBzYWx0aW5nIGtleSBrX3MsIGFzIGJlbG93LgotCi0gICAgICBJViA9IChrX3MgKiAyXjE2KSBYT1IgKFNTUkMgKiAyXjY0KSBYT1IgKGkgKiAyXjE2KQotCi0gICBFYWNoIG9mIHRoZSB0aHJlZSB0ZXJtcyBpbiB0aGUgWE9SLXN1bSBhYm92ZSBpcyBwYWRkZWQgd2l0aCBhcyBtYW55Ci0gICBsZWFkaW5nIHplcm9zIGFzIG5lZWRlZCB0byBtYWtlIHRoZSBvcGVyYXRpb24gd2VsbC1kZWZpbmVkLAotICAgY29uc2lkZXJlZCBhcyBhIDEyOC1iaXQgdmFsdWUuCi0KLSAgIFRoZSBpbmNsdXNpb24gb2YgdGhlIFNTUkMgYWxsb3dzIHRoZSB1c2Ugb2YgdGhlIHNhbWUga2V5IHRvIHByb3RlY3QKLSAgIGRpc3RpbmN0IFNSVFAgc3RyZWFtcyB3aXRoaW4gdGhlIHNhbWUgUlRQIHNlc3Npb24sIHNlZSB0aGUgc2VjdXJpdHkKLSAgIGNhdmVhdHMgaW4gU2VjdGlvbiA5LjEuCi0KLSAgIEluIHRoZSBjYXNlIG9mIFNSVENQLCB0aGUgU1NSQyBvZiB0aGUgZmlyc3QgaGVhZGVyIG9mIHRoZSBjb21wb3VuZAotICAgcGFja2V0IE1VU1QgYmUgdXNlZCwgaSBTSEFMTCBiZSB0aGUgMzEtYml0IFNSVENQIGluZGV4IGFuZCBrX2UsIGtfcwotICAgU0hBTEwgYmUgcmVwbGFjZWQgYnkgdGhlIFNSVENQIGVuY3J5cHRpb24gc2Vzc2lvbiBrZXkgYW5kIHNhbHQuCi0KLSAgIE5vdGUgdGhhdCB0aGUgaW5pdGlhbCB2YWx1ZSwgSVYsIGlzIGZpeGVkIGZvciBlYWNoIHBhY2tldCBhbmQgaXMKLSAgIGZvcm1lZCBieSAicmVzZXJ2aW5nIiAxNiB6ZXJvcyBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmb3IgdGhlCi0gICBwdXJwb3NlIG9mIHRoZSBjb3VudGVyLiAgVGhlIG51bWJlciBvZiBibG9ja3Mgb2Yga2V5c3RyZWFtIGdlbmVyYXRlZAotICAgZm9yIGFueSBmaXhlZCB2YWx1ZSBvZiBJViBNVVNUIE5PVCBleGNlZWQgMl4xNiB0byBhdm9pZCBrZXlzdHJlYW0KLSAgIHJlLXVzZSwgc2VlIGJlbG93LiAgVGhlIEFFUyBoYXMgYSBibG9jayBzaXplIG9mIDEyOCBiaXRzLCBzbyAyXjE2Ci0gICBvdXRwdXQgYmxvY2tzIGFyZSBzdWZmaWNpZW50IHRvIGdlbmVyYXRlIHRoZSAyXjIzIGJpdHMgb2Yga2V5c3RyZWFtCi0gICBuZWVkZWQgdG8gZW5jcnlwdCB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBSVFAgcGFja2V0IChleGNlcHQgZm9yIElQdjYKLSAgICJqdW1ib2dyYW1zIiBbUkZDMjY3NV0sIHdoaWNoIGFyZSBub3QgbGlrZWx5IHRvIGJlIHVzZWQgZm9yIFJUUC1iYXNlZAotICAgbXVsdGltZWRpYSB0cmFmZmljKS4gIFRoaXMgcmVzdHJpY3Rpb24gb24gdGhlIG1heGltdW0gYml0LXNpemUgb2YgdGhlCi0gICBwYWNrZXQgdGhhdCBjYW4gYmUgZW5jcnlwdGVkIGVuc3VyZXMgdGhlIHNlY3VyaXR5IG9mIHRoZSBlbmNyeXB0aW9uCi0gICBtZXRob2QgYnkgbGltaXRpbmcgdGhlIGVmZmVjdGl2ZW5lc3Mgb2YgcHJvYmFiaWxpc3RpYyBhdHRhY2tzIFtCREpSXS4KLQotICAgRm9yIGEgcGFydGljdWxhciBDb3VudGVyIE1vZGUga2V5LCBlYWNoIElWIHZhbHVlIHVzZWQgYXMgYW4gaW5wdXQKLSAgIE1VU1QgYmUgZGlzdGluY3QsIGluIG9yZGVyIHRvIGF2b2lkIHRoZSBzZWN1cml0eSBleHBvc3VyZSBvZiBhIHR3by0KLSAgIHRpbWUgcGFkIHNpdHVhdGlvbiAoU2VjdGlvbiA5LjEpLiAgVG8gc2F0aXNmeSB0aGlzIGNvbnN0cmFpbnQsIGFuCi0gICBpbXBsZW1lbnRhdGlvbiBNVVNUIGVuc3VyZSB0aGF0IHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgU1JUUCBwYWNrZXQKLQotCi0KLUJhdWdoZXIsIGV0IGFsLiAgICAgICAgICAgICBTdGFuZGFyZHMgVHJhY2sgICAgICAgICAgICAgICAgICAgIFtQYWdlIDIxXQotDAotUkZDIDM3MTEgICAgICAgICAgICAgICAgICAgICAgICAgIFNSVFAgICAgICAgICAgICAgICAgICAgICAgICBNYXJjaCAyMDA0Ci0KLQotICAgaW5kZXggb2YgUk9DIHx8IFNFUSwgYW5kIHRoZSBTU1JDIHVzZWQgaW4gdGhlIGNvbnN0cnVjdGlvbiBvZiB0aGUgSVYKLSAgIGFyZSBkaXN0aW5jdCBmb3IgYW55IHBhcnRpY3VsYXIga2V5LiAgVGhlIGZhaWx1cmUgdG8gZW5zdXJlIHRoaXMKLSAgIHVuaXF1ZW5lc3MgY291bGQgYmUgY2F0YXN0cm9waGljIGZvciBTZWN1cmUgUlRQLiAgVGhpcyBpcyBpbiBjb250cmFzdAotICAgdG8gdGhlIHNpdHVhdGlvbiBmb3IgUlRQIGl0c2VsZiwgd2hpY2ggbWF5IGJlIGFibGUgdG8gdG9sZXJhdGUgc3VjaAotICAgZmFpbHVyZXMuICBJdCBpcyBSRUNPTU1FTkRFRCB0aGF0LCBpZiBhIGRlZGljYXRlZCBzZWN1cml0eSBtb2R1bGUgaXMKLSAgIHByZXNlbnQsIHRoZSBSVFAgc2VxdWVuY2UgbnVtYmVycyBhbmQgU1NSQyBlaXRoZXIgYmUgZ2VuZXJhdGVkIG9yCi0gICBjaGVja2VkIGJ5IHRoYXQgbW9kdWxlIChpLmUuLCBzZXF1ZW5jZS1udW1iZXIgYW5kIFNTUkMgcHJvY2Vzc2luZyBpbgotICAgYW4gU1JUUCBzeXN0ZW0gbmVlZHMgdG8gYmUgcHJvdGVjdGVkIGFzIHdlbGwgYXMgdGhlIGtleSkuCi0KLTQuMS4yLiAgQUVTIGluIGY4LW1vZGUKLQotICAgVG8gZW5jcnlwdCBVTVRTIChVbml2ZXJzYWwgTW9iaWxlIFRlbGVjb21tdW5pY2F0aW9ucyBTeXN0ZW0sIGFzIDNHCi0gICBuZXR3b3JrcykgZGF0YSwgYSBzb2x1dGlvbiAoc2VlIFtmOC1hXSBbZjgtYl0pIGtub3duIGFzIHRoZSBmOC0KLSAgIGFsZ29yaXRobSBoYXMgYmVlbiBkZXZlbG9wZWQuICBPbiBhIGhpZ2ggbGV2ZWwsIHRoZSBwcm9wb3NlZCBzY2hlbWUKLSAgIGlzIGEgdmFyaWFudCBvZiBPdXRwdXQgRmVlZGJhY2sgTW9kZSAoT0ZCKSBbSEFDXSwgd2l0aCBhIG1vcmUKLSAgIGVsYWJvcmF0ZSBpbml0aWFsaXphdGlvbiBhbmQgZmVlZGJhY2sgZnVuY3Rpb24uICBBcyBpbiBub3JtYWwgT0ZCLAotICAgdGhlIGNvcmUgY29uc2lzdHMgb2YgYSBibG9jayBjaXBoZXIuICBXZSBhbHNvIGRlZmluZSBoZXJlIHRoZSB1c2Ugb2YKLSAgIEFFUyBhcyBhIGJsb2NrIGNpcGhlciB0byBiZSB1c2VkIGluIHdoYXQgd2Ugc2hhbGwgY2FsbCAiZjgtbW9kZSBvZgotICAgb3BlcmF0aW9uIiBSVFAgZW5jcnlwdGlvbi4gIFRoZSBBRVMgZjgtbW9kZSBTSEFMTCB1c2UgdGhlIHNhbWUKLSAgIGRlZmF1bHQgc2l6ZXMgZm9yIHNlc3Npb24ga2V5IGFuZCBzYWx0IGFzIEFFUyBjb3VudGVyIG1vZGUuCi0KLSAgIEZpZ3VyZSA0IHNob3dzIHRoZSBzdHJ1Y3R1cmUgb2YgYmxvY2sgY2lwaGVyLCBFLCBydW5uaW5nIGluIGY4LW1vZGUuCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotQmF1Z2hlciwgZXQgYWwuICAgICAgICAgICAgIFN0YW5kYXJkcyBUcmFjayAgICAgICAgICAgICAgICAgICAgW1BhZ2UgMjJdCi0MCi1SRkMgMzcxMSAgICAgICAgICAgICAgICAgICAgICAgICAgU1JUUCAgICAgICAgICAgICAgICAgICAgICAgIE1hcmNoIDIwMDQKLQotCi0gICAgICAgICAgICAgICAgICAgIElWCi0gICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgdgotICAgICAgICAgICAgICAgICstLS0tLS0rCi0gICAgICAgICAgICAgICAgfCAgICAgIHwKLSAgICAgICAgICAgKy0tLT58ICBFICAgfAotICAgICAgICAgICB8ICAgICstLS0tLS0rCi0gICAgICAgICAgIHwgICAgICAgIHwKLSAgICAgbSAtPiAoKikgICAgICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0gIC4uLiAgICAgLS0tLS0tKwotICAgICAgICAgICB8ICAgIElWJyB8ICAgICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgIHwgICAgICAgIHwgICBqPTEgLT4gKCopICAgIGo9MiAtPiAoKikgICAuLi4gIGo9TC0xIC0+KCopCi0gICAgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgfCAgICAgICAgfCAgICAgICstPiAoKikgICAgICAgKy0+ICgqKSAgIC4uLiAgICAgICstPiAoKikKLSAgICAgICAgICAgfCAgICAgICAgfCAgICAgIHwgICAgfCAgICAgICAgfCAgICB8ICAgICAgICAgICAgIHwgICAgfAotICAgICAgICAgICB8ICAgICAgICB2ICAgICAgfCAgICB2ICAgICAgICB8ICAgIHYgICAgICAgICAgICAgfCAgICB2Ci0gICAgICAgICAgIHwgICAgKy0tLS0tLSsgICB8ICstLS0tLS0rICAgIHwgKy0tLS0tLSsgICAgICAgICB8ICstLS0tLS0rCi0gICAga19lIC0tLSstLS0+fCAgRSAgIHwgICB8IHwgIEUgICB8ICAgIHwgfCAgRSAgIHwgICAgICAgICB8IHwgIEUgICB8Ci0gICAgICAgICAgICAgICAgfCAgICAgIHwgICB8IHwgICAgICB8ICAgIHwgfCAgICAgIHwgICAgICAgICB8IHwgICAgICB8Ci0gICAgICAgICAgICAgICAgKy0tLS0tLSsgICB8ICstLS0tLS0rICAgIHwgKy0tLS0tLSsgICAgICAgICB8ICstLS0tLS0rCi0gICAgICAgICAgICAgICAgICAgIHwgICAgICB8ICAgIHwgICAgICAgIHwgICAgfCAgICAgICAgICAgICB8ICAgIHwKLSAgICAgICAgICAgICAgICAgICAgKy0tLS0tLSsgICAgKy0tLS0tLS0tKyAgICArLS0gIC4uLiAgLS0tLSsgICAgfAotICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICAgIHYgICAgICAgICAgIHYgICAgICAgICAgICAgdiAgICAgICAgICAgICAgICAgIHYKLSAgICAgICAgICAgICAgICAgICBTKDApICAgICAgICBTKDEpICAgICAgICAgIFMoMikgIC4gLiAuICAgICAgIFMoTC0xKQotCi0gICBGaWd1cmUgNC4gIGY4LW1vZGUgb2Ygb3BlcmF0aW9uIChhc3RlcmlzaywgKCopLCBkZW5vdGVzIGJpdHdpc2UgWE9SKS4KLSAgIFRoZSBmaWd1cmUgcmVwcmVzZW50cyB0aGUgS0cgaW4gRmlndXJlIDMsIHdoZW4gQUVTLWY4IGlzIHVzZWQuCi0KLTQuMS4yLjEuICBmOCBLZXlzdHJlYW0gR2VuZXJhdGlvbgotCi0gICBUaGUgSW5pdGlhbGl6YXRpb24gVmVjdG9yIChJVikgU0hBTEwgYmUgZGV0ZXJtaW5lZCBhcyBkZXNjcmliZWQgaW4KLSAgIFNlY3Rpb24gNC4xLjIuMiAoYW5kIGluIFNlY3Rpb24gNC4xLjIuMyBmb3IgU1JUQ1ApLgotCi0gICBMZXQgSVYnLCBTKGopLCBhbmQgbSBkZW5vdGUgbl9iLWJpdCBibG9ja3MuICBUaGUga2V5c3RyZWFtLAotICAgUygwKSB8fC4uLiB8fCBTKEwtMSksIGZvciBhbiBOLWJpdCBtZXNzYWdlIFNIQUxMIGJlIGRlZmluZWQgYnkKLSAgIHNldHRpbmcgSVYnID0gRShrX2UgWE9SIG0sIElWKSwgYW5kIFMoLTEpID0gMDAuLjAuICBGb3IKLSAgIGogPSAwLDEsLi4sTC0xIHdoZXJlIEwgPSBOL25fYiAocm91bmRlZCB1cCB0byBuZWFyZXN0IGludGVnZXIgaWYgaXQKLSAgIGlzIG5vdCBhbHJlYWR5IGFuIGludGVnZXIpIGNvbXB1dGUKLQotICAgICAgICAgICAgUyhqKSA9IEUoa19lLCBJVicgWE9SIGogWE9SIFMoai0xKSkKLQotICAgTm90aWNlIHRoYXQgdGhlIElWIGlzIG5vdCB1c2VkIGRpcmVjdGx5LiAgSW5zdGVhZCBpdCBpcyBmZWQgdGhyb3VnaCBFCi0gICB1bmRlciBhbm90aGVyIGtleSB0byBwcm9kdWNlIGFuIGludGVybmFsLCAibWFza2VkIiB2YWx1ZSAoZGVub3RlZAotICAgSVYnKSB0byBwcmV2ZW50IGFuIGF0dGFja2VyIGZyb20gZ2FpbmluZyBrbm93biBpbnB1dC9vdXRwdXQgcGFpcnMuCi0KLQotCi0KLQotCi0KLUJhdWdoZXIsIGV0IGFsLiAgICAgICAgICAgICBTdGFuZGFyZHMgVHJhY2sgICAgICAgICAgICAgICAgICAgIFtQYWdlIDIzXQotDAotUkZDIDM3MTEgICAgICAgICAgICAgICAgICAgICAgICAgIFNSVFAgICAgICAgICAgICAgICAgICAgICAgICBNYXJjaCAyMDA0Ci0KLQotICAgVGhlIHJvbGUgb2YgdGhlIGludGVybmFsIGNvdW50ZXIsIGosIGlzIHRvIHByZXZlbnQgc2hvcnQga2V5c3RyZWFtCi0gICBjeWNsZXMuICBUaGUgdmFsdWUgb2YgdGhlIGtleSBtYXNrIG0gU0hBTEwgYmUKLQotICAgICAgICAgICBtID0ga19zIHx8IDB4NTU1Li41LAotCi0gICBpLmUuLCB0aGUgc2Vzc2lvbiBzYWx0aW5nIGtleSwgYXBwZW5kZWQgYnkgdGhlIGJpbmFyeSBwYXR0ZXJuIDAxMDEuLgotICAgdG8gZmlsbCBvdXQgdGhlIGVudGlyZSBkZXNpcmVkIGtleSBzaXplLCBuX2UuCi0KLSAgIFRoZSBzZW5kZXIgU0hPVUxEIE5PVCBnZW5lcmF0ZSBtb3JlIHRoYW4gMl4zMiBibG9ja3MsIHdoaWNoIGlzCi0gICBzdWZmaWNpZW50IHRvIGdlbmVyYXRlIDJeMzkgYml0cyBvZiBrZXlzdHJlYW0uICBVbmxpa2UgY291bnRlciBtb2RlLAotICAgdGhlcmUgaXMgbm8gYWJzb2x1dGUgdGhyZXNob2xkIGFib3ZlIChiZWxvdykgd2hpY2ggZjggaXMgZ3VhcmFudGVlZAotICAgdG8gYmUgaW5zZWN1cmUgKHNlY3VyZSkuICBUaGUgYWJvdmUgYm91bmQgaGFzIGJlZW4gY2hvc2VuIHRvIGxpbWl0LAotICAgd2l0aCBzdWZmaWNpZW50IHNlY3VyaXR5IG1hcmdpbiwgdGhlIHByb2JhYmlsaXR5IG9mIGRlZ2VuZXJhdGl2ZQotICAgYmVoYXZpb3IgaW4gdGhlIGY4IGtleXN0cmVhbSBnZW5lcmF0aW9uLgotCi00LjEuMi4yLiAgZjggU1JUUCBJViBGb3JtYXRpb24KLQotICAgVGhlIHB1cnBvc2Ugb2YgdGhlIGZvbGxvd2luZyBJViBmb3JtYXRpb24gaXMgdG8gcHJvdmlkZSBhIGZlYXR1cmUKLSAgIHdoaWNoIHdlIGNhbGwgaW1wbGljaXQgaGVhZGVyIGF1dGhlbnRpY2F0aW9uIChJSEEpLCBzZWUgU2VjdGlvbiA5LjUuCi0KLSAgIFRoZSBTUlRQIElWIGZvciAxMjgtYml0IGJsb2NrIEFFUy1mOCBTSEFMTCBiZSBmb3JtZWQgaW4gdGhlIGZvbGxvd2luZwotICAgd2F5OgotCi0gICAgICAgIElWID0gMHgwMCB8fCBNIHx8IFBUIHx8IFNFUSB8fCBUUyB8fCBTU1JDIHx8IFJPQwotCi0gICBNLCBQVCwgU0VRLCBUUywgU1NSQyBTSEFMTCBiZSB0YWtlbiBmcm9tIHRoZSBSVFAgaGVhZGVyOyBST0MgaXMgZnJvbQotICAgdGhlIGNyeXB0b2dyYXBoaWMgY29udGV4dC4KLQotICAgVGhlIHByZXNlbmNlIG9mIHRoZSBTU1JDIGFzIHBhcnQgb2YgdGhlIElWIGFsbG93cyBBRVMtZjggdG8gYmUgdXNlZAotICAgd2hlbiBhIG1hc3RlciBrZXkgaXMgc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgc3RyZWFtcyB3aXRoaW4gdGhlIHNhbWUKLSAgIFJUUCBzZXNzaW9uLCBzZWUgU2VjdGlvbiA5LjEuCi0KLTQuMS4yLjMuICBmOCBTUlRDUCBJViBGb3JtYXRpb24KLQotICAgVGhlIFNSVENQIElWIGZvciAxMjgtYml0IGJsb2NrIEFFUy1mOCBTSEFMTCBiZSBmb3JtZWQgaW4gdGhlCi0gICBmb2xsb3dpbmcgd2F5OgotCi0gICBJVj0gMC4uMCB8fCBFIHx8IFNSVENQIGluZGV4IHx8IFYgfHwgUCB8fCBSQyB8fCBQVCB8fCBsZW5ndGggfHwgU1NSQwotCi0gICB3aGVyZSBWLCBQLCBSQywgUFQsIGxlbmd0aCwgU1NSQyBTSEFMTCBiZSB0YWtlbiBmcm9tIHRoZSBmaXJzdCBoZWFkZXIKLSAgIGluIHRoZSBSVENQIGNvbXBvdW5kIHBhY2tldC4gIEUgYW5kIFNSVENQIGluZGV4IGFyZSB0aGUgMS1iaXQgYW5kCi0gICAzMS1iaXQgZmllbGRzIGFkZGVkIHRvIHRoZSBwYWNrZXQuCi0KLQotCi0KLQotCi0KLQotCi1CYXVnaGVyLCBldCBhbC4gICAgICAgICAgICAgU3RhbmRhcmRzIFRyYWNrICAgICAgICAgICAgICAgICAgICBbUGFnZSAyNF0KLQwKLVJGQyAzNzExICAgICAgICAgICAgICAgICAgICAgICAgICBTUlRQICAgICAgICAgICAgICAgICAgICAgICAgTWFyY2ggMjAwNAotCi0KLTQuMS4zLiAgTlVMTCBDaXBoZXIKLQotICAgVGhlIE5VTEwgY2lwaGVyIGlzIHVzZWQgd2hlbiBubyBjb25maWRlbnRpYWxpdHkgZm9yIFJUUC9SVENQIGlzCi0gICByZXF1ZXN0ZWQuICBUaGUga2V5c3RyZWFtIGNhbiBiZSB0aG91Z2h0IG9mIGFzICIwMDAuLjAiLCBpLmUuLCB0aGUKLSAgIGVuY3J5cHRpb24gU0hBTEwgc2ltcGx5IGNvcHkgdGhlIHBsYWludGV4dCBpbnB1dCBpbnRvIHRoZSBjaXBoZXJ0ZXh0Ci0gICBvdXRwdXQuCi0KLTQuMi4gIE1lc3NhZ2UgQXV0aGVudGljYXRpb24gYW5kIEludGVncml0eQotCi0gICBUaHJvdWdob3V0IHRoaXMgc2VjdGlvbiwgTSB3aWxsIGRlbm90ZSBkYXRhIHRvIGJlIGludGVncml0eQotICAgcHJvdGVjdGVkLiAgSW4gdGhlIGNhc2Ugb2YgU1JUUCwgTSBTSEFMTCBjb25zaXN0IG9mIHRoZSBBdXRoZW50aWNhdGVkCi0gICBQb3J0aW9uIG9mIHRoZSBwYWNrZXQgKGFzIHNwZWNpZmllZCBpbiBGaWd1cmUgMSkgY29uY2F0ZW5hdGVkIHdpdGgKLSAgIHRoZSBST0MsIE0gPSBBdXRoZW50aWNhdGVkIFBvcnRpb24gfHwgUk9DOyBpbiB0aGUgY2FzZSBvZiBTUlRDUCwgTQotICAgU0hBTEwgY29uc2lzdCBvZiB0aGUgQXV0aGVudGljYXRlZCBQb3J0aW9uIChhcyBzcGVjaWZpZWQgaW4gRmlndXJlIDIpCi0gICBvbmx5LgotCi0gICBDb21tb24gcGFyYW1ldGVyczoKLQotICAgKiAgQVVUSF9BTEcgaXMgdGhlIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobQotICAgKiAga19hIGlzIHRoZSBzZXNzaW9uIG1lc3NhZ2UgYXV0aGVudGljYXRpb24ga2V5Ci0gICAqICBuX2EgaXMgdGhlIGJpdC1sZW5ndGggb2YgdGhlIGF1dGhlbnRpY2F0aW9uIGtleQotICAgKiAgbl90YWcgaXMgdGhlIGJpdC1sZW5ndGggb2YgdGhlIG91dHB1dCBhdXRoZW50aWNhdGlvbiB0YWcKLSAgICogIFNSVFBfUFJFRklYX0xFTkdUSCBpcyB0aGUgb2N0ZXQgbGVuZ3RoIG9mIHRoZSBrZXlzdHJlYW0gcHJlZml4IGFzCi0gICAgICBkZWZpbmVkIGFib3ZlLCBhIHBhcmFtZXRlciBvZiBBVVRIX0FMRwotCi0gICBUaGUgZGlzdGluY3Qgc2Vzc2lvbiBhdXRoZW50aWNhdGlvbiBrZXlzIGZvciBTUlRQL1NSVENQIGFyZSBieQotICAgZGVmYXVsdCBkZXJpdmVkIGFzIHNwZWNpZmllZCBpbiBTZWN0aW9uIDQuMy4KLQotICAgVGhlIHZhbHVlcyBvZiBuX2EsIG5fdGFnLCBhbmQgU1JUUF9QUkVGSVhfTEVOR1RIIE1VU1QgYmUgZml4ZWQgZm9yCi0gICBhbnkgcGFydGljdWxhciBmaXhlZCB2YWx1ZSBvZiB0aGUga2V5LgotCi0gICBXZSBkZXNjcmliZSB0aGUgcHJvY2VzcyBvZiBjb21wdXRpbmcgYXV0aGVudGljYXRpb24gdGFncyBhcyBmb2xsb3dzLgotICAgVGhlIHNlbmRlciBjb21wdXRlcyB0aGUgdGFnIG9mIE0gYW5kIGFwcGVuZHMgaXQgdG8gdGhlIHBhY2tldC4gIFRoZQotICAgU1JUUCByZWNlaXZlciB2ZXJpZmllcyBhIG1lc3NhZ2UvYXV0aGVudGljYXRpb24gdGFnIHBhaXIgYnkgY29tcHV0aW5nCi0gICBhIG5ldyBhdXRoZW50aWNhdGlvbiB0YWcgb3ZlciBNIHVzaW5nIHRoZSBzZWxlY3RlZCBhbGdvcml0aG0gYW5kIGtleSwKLSAgIGFuZCB0aGVuIGNvbXBhcmVzIGl0IHRvIHRoZSB0YWcgYXNzb2NpYXRlZCB3aXRoIHRoZSByZWNlaXZlZCBtZXNzYWdlLgotICAgSWYgdGhlIHR3byB0YWdzIGFyZSBlcXVhbCwgdGhlbiB0aGUgbWVzc2FnZS90YWcgcGFpciBpcyB2YWxpZDsKLSAgIG90aGVyd2lzZSwgaXQgaXMgaW52YWxpZCBhbmQgdGhlIGVycm9yIGF1ZGl0IG1lc3NhZ2UgIkFVVEhFTlRJQ0FUSU9OCi0gICBGQUlMVVJFIiBNVVNUIGJlIHJldHVybmVkLgotCi00LjIuMS4gIEhNQUMtU0hBMQotCi0gICBUaGUgcHJlLWRlZmluZWQgYXV0aGVudGljYXRpb24gdHJhbnNmb3JtIGZvciBTUlRQIGlzIEhNQUMtU0hBMQotICAgW1JGQzIxMDRdLiAgV2l0aCBITUFDLVNIQTEsIHRoZSBTUlRQX1BSRUZJWF9MRU5HVEggKEZpZ3VyZSAzKSBTSEFMTAotICAgYmUgMC4gIEZvciBTUlRQIChyZXNwZWN0aXZlbHkgU1JUQ1ApLCB0aGUgSE1BQyBTSEFMTCBiZSBhcHBsaWVkIHRvCi0gICB0aGUgc2Vzc2lvbiBhdXRoZW50aWNhdGlvbiBrZXkgYW5kIE0gYXMgc3BlY2lmaWVkIGFib3ZlLCBpLmUuLAotICAgSE1BQyhrX2EsIE0pLiAgVGhlIEhNQUMgb3V0cHV0IFNIQUxMIHRoZW4gYmUgdHJ1bmNhdGVkIHRvIHRoZSBuX3RhZwotICAgbGVmdC1tb3N0IGJpdHMuCi0KLQotCi1CYXVnaGVyLCBldCBhbC4gICAgICAgICAgICAgU3RhbmRhcmRzIFRyYWNrICAgICAgICAgICAgICAgICAgICBbUGFnZSAyNV0KLQwKLVJGQyAzNzExICAgICAgICAgICAgICAgICAgICAgICAgICBTUlRQICAgICAgICAgICAgICAgICAgICAgICAgTWFyY2ggMjAwNAotCi0KLTQuMy4gIEtleSBEZXJpdmF0aW9uCi0KLTQuMy4xLiAgS2V5IERlcml2YXRpb24gQWxnb3JpdGhtCi0KLSAgIFJlZ2FyZGxlc3Mgb2YgdGhlIGVuY3J5cHRpb24gb3IgbWVzc2FnZSBhdXRoZW50aWNhdGlvbiB0cmFuc2Zvcm0gdGhhdAotICAgaXMgZW1wbG95ZWQgKGl0IG1heSBiZSBhbiBTUlRQIHByZS1kZWZpbmVkIHRyYW5zZm9ybSBvciBuZXdseQotICAgaW50cm9kdWNlZCBhY2NvcmRpbmcgdG8gU2VjdGlvbiA2KSwgaW50ZXJvcGVyYWJsZSBTUlRQCi0gICBpbXBsZW1lbnRhdGlvbnMgTVVTVCB1c2UgdGhlIFNSVFAga2V5IGRlcml2YXRpb24gdG8gZ2VuZXJhdGUgc2Vzc2lvbgotICAga2V5cy4gIE9uY2UgdGhlIGtleSBkZXJpdmF0aW9uIHJhdGUgaXMgcHJvcGVybHkgc2lnbmFsZWQgYXQgdGhlIHN0YXJ0Ci0gICBvZiB0aGUgc2Vzc2lvbiwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgZXh0cmEgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZQotICAgcGFydGllcyB0aGF0IHVzZSBTUlRQIGtleSBkZXJpdmF0aW9uLgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0IGluZGV4IC0tLSsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Ci0gICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rIG1hc3RlciAgKy0tLS0tLS0tKyBzZXNzaW9uIGVuY3Jfa2V5Ci0gICAgICAgICAgICAgICB8IGV4dCAgICAgICB8IGtleSAgICAgfCAgICAgICAgfC0tLS0tLS0tLS0+Ci0gICAgICAgICAgICAgICB8IGtleSBtZ210ICB8LS0tLS0tLS0+fCAga2V5ICAgfCBzZXNzaW9uIGF1dGhfa2V5Ci0gICAgICAgICAgICAgICB8IChvcHRpb25hbCB8ICAgICAgICAgfCBkZXJpdiAgfC0tLS0tLS0tLS0+Ci0gICAgICAgICAgICAgICB8IHJla2V5KSAgICB8LS0tLS0tLS0+fCAgICAgICAgfCBzZXNzaW9uIHNhbHRfa2V5Ci0gICAgICAgICAgICAgICB8ICAgICAgICAgICB8IG1hc3RlciAgfCAgICAgICAgfC0tLS0tLS0tLS0+Ci0gICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rIHNhbHQgICAgKy0tLS0tLS0tKwotCi0gICBGaWd1cmUgNTogU1JUUCBrZXkgZGVyaXZhdGlvbi4KLQotICAgQXQgbGVhc3Qgb25lIGluaXRpYWwga2V5IGRlcml2YXRpb24gU0hBTEwgYmUgcGVyZm9ybWVkIGJ5IFNSVFAsIGkuZS4sCi0gICB0aGUgZmlyc3Qga2V5IGRlcml2YXRpb24gaXMgUkVRVUlSRUQuICBGdXJ0aGVyIGFwcGxpY2F0aW9ucyBvZiB0aGUKLSAgIGtleSBkZXJpdmF0aW9uIE1BWSBiZSBwZXJmb3JtZWQsIGFjY29yZGluZyB0byB0aGUKLSAgICJrZXlfZGVyaXZhdGlvbl9yYXRlIiB2YWx1ZSBpbiB0aGUgY3J5cHRvZ3JhcGhpYyBjb250ZXh0LiAgVGhlIGtleQotICAgZGVyaXZhdGlvbiBmdW5jdGlvbiBTSEFMTCBpbml0aWFsbHkgYmUgaW52b2tlZCBiZWZvcmUgdGhlIGZpcnN0Ci0gICBwYWNrZXQgYW5kIHRoZW4sIHdoZW4gciA+IDAsIGEga2V5IGRlcml2YXRpb24gaXMgcGVyZm9ybWVkIHdoZW5ldmVyCi0gICBpbmRleCBtb2QgciBlcXVhbHMgemVyby4gIFRoaXMgY2FuIGJlIHRob3VnaHQgb2YgYXMgInJlZnJlc2hpbmciIHRoZQotICAgc2Vzc2lvbiBrZXlzLiAgVGhlIHZhbHVlIG9mICJrZXlfZGVyaXZhdGlvbl9yYXRlIiBNVVNUIGJlIGtlcHQgZml4ZWQKLSAgIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGFzc29jaWF0ZWQgbWFzdGVyIGtleS4KLQotICAgSW50ZXJvcGVyYWJsZSBTUlRQIGltcGxlbWVudGF0aW9ucyBNQVkgYWxzbyBkZXJpdmUgc2Vzc2lvbiBzYWx0aW5nCi0gICBrZXlzIGZvciBlbmNyeXB0aW9uIHRyYW5zZm9ybXMsIGFzIGlzIGRvbmUgaW4gYm90aCBvZiB0aGUgcHJlLQotICAgZGVmaW5lZCB0cmFuc2Zvcm1zLgotCi0gICBMZXQgbSBhbmQgbiBiZSBwb3NpdGl2ZSBpbnRlZ2Vycy4gIEEgcHNldWRvLXJhbmRvbSBmdW5jdGlvbiBmYW1pbHkgaXMKLSAgIGEgc2V0IG9mIGtleWVkIGZ1bmN0aW9ucyB7UFJGX24oayx4KX0gc3VjaCB0aGF0IGZvciB0aGUgKHNlY3JldCkKLSAgIHJhbmRvbSBrZXkgaywgZ2l2ZW4gbS1iaXQgeCwgUFJGX24oayx4KSBpcyBhbiBuLWJpdCBzdHJpbmcsCi0gICBjb21wdXRhdGlvbmFsbHkgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSByYW5kb20gbi1iaXQgc3RyaW5ncywgc2VlCi0gICBbSEFDXS4gIEZvciB0aGUgcHVycG9zZSBvZiBrZXkgZGVyaXZhdGlvbiBpbiBTUlRQLCBhIHNlY3VyZSBQUkYgd2l0aAotICAgbSA9IDEyOCAob3IgbW9yZSkgTVVTVCBiZSB1c2VkLCBhbmQgYSBkZWZhdWx0IFBSRiB0cmFuc2Zvcm0gaXMKLSAgIGRlZmluZWQgaW4gU2VjdGlvbiA0LjMuMy4KLQotCi0KLQotCi1CYXVnaGVyLCBldCBhbC4gICAgICAgICAgICAgU3RhbmRhcmRzIFRyYWNrICAgICAgICAgICAgICAgICAgICBbUGFnZSAyNl0KLQwKLVJGQyAzNzExICAgICAgICAgICAgICAgICAgICAgICAgICBTUlRQICAgICAgICAgICAgICAgICAgICAgICAgTWFyY2ggMjAwNAotCi0KLSAgIExldCAiYSBESVYgdCIgZGVub3RlIGludGVnZXIgZGl2aXNpb24gb2YgYSBieSB0LCByb3VuZGVkIGRvd24sIGFuZAotICAgd2l0aCB0aGUgY29udmVudGlvbiB0aGF0ICJhIERJViAwID0gMCIgZm9yIGFsbCBhLiAgV2UgYWxzbyBtYWtlIHRoZQotICAgY29udmVudGlvbiBvZiB0cmVhdGluZyAiYSBESVYgdCIgYXMgYSBiaXQgc3RyaW5nIG9mIHRoZSBzYW1lIGxlbmd0aAotICAgYXMgYSwgYW5kIHRodXMgImEgRElWIHQiIHdpbGwgaW4gZ2VuZXJhbCBoYXZlIGxlYWRpbmcgemVyb3MuCi0KLSAgIEtleSBkZXJpdmF0aW9uIFNIQUxMIGJlIGRlZmluZWQgYXMgZm9sbG93cyBpbiB0ZXJtcyBvZiA8bGFiZWw+LCBhbgotICAgOC1iaXQgY29uc3RhbnQgKHNlZSBiZWxvdyksIG1hc3Rlcl9zYWx0IGFuZCBrZXlfZGVyaXZhdGlvbl9yYXRlLCBhcwotICAgZGV0ZXJtaW5lZCBpbiB0aGUgY3J5cHRvZ3JhcGhpYyBjb250ZXh0LCBhbmQgaW5kZXgsIHRoZSBwYWNrZXQgaW5kZXgKLSAgIChpLmUuLCB0aGUgNDgtYml0IFJPQyB8fCBTRVEgZm9yIFNSVFApOgotCi0gICAqICBMZXQgciA9IGluZGV4IERJViBrZXlfZGVyaXZhdGlvbl9yYXRlICh3aXRoIERJViBhcyBkZWZpbmVkIGFib3ZlKS4KLQotICAgKiAgTGV0IGtleV9pZCA9IDxsYWJlbD4gfHwgci4KLQotICAgKiAgTGV0IHggPSBrZXlfaWQgWE9SIG1hc3Rlcl9zYWx0LCB3aGVyZSBrZXlfaWQgYW5kIG1hc3Rlcl9zYWx0IGFyZQotICAgICAgYWxpZ25lZCBzbyB0aGF0IHRoZWlyIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgYWdyZWUgKHJpZ2h0LQotICAgICAgYWxpZ25tZW50KS4KLQotICAgPGxhYmVsPiBNVVNUIGJlIHVuaXF1ZSBmb3IgZWFjaCB0eXBlIG9mIGtleSB0byBiZSBkZXJpdmVkLiAgV2UKLSAgIGN1cnJlbnRseSBkZWZpbmUgPGxhYmVsPiAweDAwIHRvIDB4MDUgKHNlZSBiZWxvdyksIGFuZCBmdXR1cmUKLSAgIGV4dGVuc2lvbnMgTUFZIHNwZWNpZnkgbmV3IHZhbHVlcyBpbiB0aGUgcmFuZ2UgMHgwNiB0byAweGZmIGZvciBvdGhlcgotICAgcHVycG9zZXMuICBUaGUgbi1iaXQgU1JUUCBrZXkgKG9yIHNhbHQpIGZvciB0aGlzIHBhY2tldCBTSEFMTCB0aGVuIGJlCi0gICBkZXJpdmVkIGZyb20gdGhlIG1hc3RlciBrZXksIGtfbWFzdGVyIGFzIGZvbGxvd3M6Ci0KLSAgICAgIFBSRl9uKGtfbWFzdGVyLCB4KS4KLQotICAgKFRoZSBQUkYgbWF5IGludGVybmFsbHkgc3BlY2lmeSBhZGRpdGlvbmFsIGZvcm1hdHRpbmcgYW5kIHBhZGRpbmcgb2YKLSAgIHgsIHNlZSBlLmcuLCBTZWN0aW9uIDQuMy4zIGZvciB0aGUgZGVmYXVsdCBQUkYuKQotCi0gICBUaGUgc2Vzc2lvbiBrZXlzIGFuZCBzYWx0IFNIQUxMIG5vdyBiZSBkZXJpdmVkIHVzaW5nOgotCi0gICAtIGtfZSAoU1JUUCBlbmNyeXB0aW9uKTogPGxhYmVsPiA9IDB4MDAsIG4gPSBuX2UuCi0KLSAgIC0ga19hIChTUlRQIG1lc3NhZ2UgYXV0aGVudGljYXRpb24pOiA8bGFiZWw+ID0gMHgwMSwgbiA9IG5fYS4KLQotICAgLSBrX3MgKFNSVFAgc2FsdGluZyBrZXkpOiA8bGFiZWw+ID0gMHgwMiwgbiA9IG5fcy4KLQotICAgd2hlcmUgbl9lLCBuX3MsIGFuZCBuX2EgYXJlIGZyb20gdGhlIGNyeXB0b2dyYXBoaWMgY29udGV4dC4KLQotICAgVGhlIG1hc3RlciBrZXkgYW5kIG1hc3RlciBzYWx0IE1VU1QgYmUgcmFuZG9tLCBidXQgdGhlIG1hc3RlciBzYWx0Ci0gICBNQVkgYmUgcHVibGljLgotCi0gICBOb3RlIHRoYXQgZm9yIGEga2V5X2Rlcml2YXRpb25fcmF0ZSBvZiAwLCB0aGUgYXBwbGljYXRpb24gb2YgdGhlIGtleQotICAgZGVyaXZhdGlvbiBTSEFMTCB0YWtlIHBsYWNlIGV4YWN0bHkgb25jZS4KLQotICAgVGhlIGRlZmluaXRpb24gb2YgRElWIGFib3ZlIGlzIHB1cmVseSBmb3Igbm90YXRpb25hbCBjb252ZW5pZW5jZS4KLSAgIEZvciBhIG5vbi16ZXJvIHQgYW1vbmcgdGhlIHNldCBvZiBhbGxvd2VkIGtleSBkZXJpdmF0aW9uIHJhdGVzLCAiYQotICAgRElWIHQiIGNhbiBiZSBpbXBsZW1lbnRlZCBhcyBhIHJpZ2h0LXNoaWZ0IGJ5IHRoZSBiYXNlLTIgbG9nYXJpdGhtIG9mCi0KLQotCi1CYXVnaGVyLCBldCBhbC4gICAgICAgICAgICAgU3RhbmRhcmRzIFRyYWNrICAgICAgICAgICAgICAgICAgICBbUGFnZSAyN10KLQwKLVJGQyAzNzExICAgICAgICAgICAgICAgICAgICAgICAgICBTUlRQICAgICAgICAgICAgICAgICAgICAgICAgTWFyY2ggMjAwNAotCi0KLSAgIHQuICBUaGUgZGVyaXZhdGlvbiBvcGVyYXRpb24gaXMgZnVydGhlciBmYWNpbGl0YXRlZCBpZiB0aGUgcmF0ZXMgYXJlCi0gICBjaG9zZW4gdG8gYmUgcG93ZXJzIG9mIDI1NiwgYnV0IHRoYXQgZ3JhbnVsYXJpdHkgd2FzIGNvbnNpZGVyZWQgdG9vCi0gICBjb2Fyc2UgdG8gYmUgYSByZXF1aXJlbWVudCBvZiB0aGlzIHNwZWNpZmljYXRpb24uCi0KLSAgIFRoZSB1cHBlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHBhY2tldHMgdGhhdCBjYW4gYmUgc2VjdXJlZCB1c2luZwotICAgdGhlIHNhbWUgbWFzdGVyIGtleSAoc2VlIFNlY3Rpb24gOS4yKSBpcyBpbmRlcGVuZGVudCBvZiB0aGUga2V5Ci0gICBkZXJpdmF0aW9uLgotCi00LjMuMi4gIFNSVENQIEtleSBEZXJpdmF0aW9uCi0KLSAgIFNSVENQIFNIQUxMIGJ5IGRlZmF1bHQgdXNlIHRoZSBzYW1lIG1hc3RlciBrZXkgKGFuZCBtYXN0ZXIgc2FsdCkgYXMKLSAgIFNSVFAuICBUbyBkbyB0aGlzIHNlY3VyZWx5LCB0aGUgZm9sbG93aW5nIGNoYW5nZXMgU0hBTEwgYmUgZG9uZSB0bwotICAgdGhlIGRlZmluaXRpb25zIGluIFNlY3Rpb24gNC4zLjEgd2hlbiBhcHBseWluZyBzZXNzaW9uIGtleSBkZXJpdmF0aW9uCi0gICBmb3IgU1JUQ1AuCi0KLSAgIFJlcGxhY2UgdGhlIFNSVFAgaW5kZXggYnkgdGhlIDMyLWJpdCBxdWFudGl0eTogMCB8fCBTUlRDUCBpbmRleAotICAgKGkuZS4sIGV4Y2x1ZGluZyB0aGUgRS1iaXQsIHJlcGxhY2luZyBpdCB3aXRoIGEgZml4ZWQgMC1iaXQpLCBhbmQgdXNlCi0gICA8bGFiZWw+ID0gMHgwMyBmb3IgdGhlIFNSVENQIGVuY3J5cHRpb24ga2V5LCA8bGFiZWw+ID0gMHgwNCBmb3IgdGhlCi0gICBTUlRDUCBhdXRoZW50aWNhdGlvbiBrZXksIGFuZCwgPGxhYmVsPiA9IDB4MDUgZm9yIHRoZSBTUlRDUCBzYWx0aW5nCi0gICBrZXkuCi0KLTQuMy4zLiAgQUVTLUNNIFBSRgotCi0gICBUaGUgY3VycmVudGx5IGRlZmluZWQgUFJGLCBrZXllZCBieSAxMjgsIDE5Miwgb3IgMjU2IGJpdCBtYXN0ZXIga2V5LAotICAgaGFzIGlucHV0IGJsb2NrIHNpemUgbSA9IDEyOCBhbmQgY2FuIHByb2R1Y2Ugbi1iaXQgb3V0cHV0cyBmb3IgbiB1cAotICAgdG8gMl4yMy4gIFBSRl9uKGtfbWFzdGVyLHgpIFNIQUxMIGJlIEFFUyBpbiBDb3VudGVyIE1vZGUgYXMgZGVzY3JpYmVkCi0gICBpbiBTZWN0aW9uIDQuMS4xLCBhcHBsaWVkIHRvIGtleSBrX21hc3RlciwgYW5kIElWIGVxdWFsIHRvICh4KjJeMTYpLAotICAgYW5kIHdpdGggdGhlIG91dHB1dCBrZXlzdHJlYW0gdHJ1bmNhdGVkIHRvIHRoZSBuIGZpcnN0IChsZWZ0LW1vc3QpCi0gICBiaXRzLiAgKFJlcXVpcmluZyBuLzEyOCwgcm91bmRlZCB1cCwgYXBwbGljYXRpb25zIG9mIEFFUy4pCi0KLTUuICBEZWZhdWx0IGFuZCBtYW5kYXRvcnktdG8taW1wbGVtZW50IFRyYW5zZm9ybXMKLQotICAgVGhlIGRlZmF1bHQgdHJhbnNmb3JtcyBhbHNvIGFyZSBtYW5kYXRvcnktdG8taW1wbGVtZW50IHRyYW5zZm9ybXMgaW4KLSAgIFNSVFAuICBPZiBjb3Vyc2UsICJtYW5kYXRvcnktdG8taW1wbGVtZW50IiBkb2VzIG5vdCBpbXBseQotICAgIm1hbmRhdG9yeS10by11c2UiLiAgVGFibGUgMSBzdW1tYXJpemVzIHRoZSBwcmUtZGVmaW5lZCB0cmFuc2Zvcm1zLgotICAgVGhlIGRlZmF1bHQgdmFsdWVzIGJlbG93IGFyZSB2YWxpZCBmb3IgdGhlIHByZS1kZWZpbmVkIHRyYW5zZm9ybXMuCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICBtYW5kYXRvcnktdG8taW1wbC4gICBvcHRpb25hbCAgICAgZGVmYXVsdAotCi0gICBlbmNyeXB0aW9uICAgICAgICAgICAgQUVTLUNNLCBOVUxMICAgICAgICAgQUVTLWY4ICAgICAgIEFFUy1DTQotICAgbWVzc2FnZSBpbnRlZ3JpdHkgICAgIEhNQUMtU0hBMSAgICAgICAgICAgICAgLSAgICAgICAgICBITUFDLVNIQTEKLSAgIGtleSBkZXJpdmF0aW9uIChQUkYpICBBRVMtQ00gICAgICAgICAgICAgICAgIC0gICAgICAgICAgQUVTLUNNCi0KLSAgIFRhYmxlIDE6IE1hbmRhdG9yeS10by1pbXBsZW1lbnQsIG9wdGlvbmFsIGFuZCBkZWZhdWx0IHRyYW5zZm9ybXMgaW4KLSAgIFNSVFAgYW5kIFNSVENQLgotCi0KLQotCi0KLQotQmF1Z2hlciwgZXQgYWwuICAgICAgICAgICAgIFN0YW5kYXJkcyBUcmFjayAgICAgICAgICAgICAgICAgICAgW1BhZ2UgMjhdCi0MCi1SRkMgMzcxMSAgICAgICAgICAgICAgICAgICAgICAgICAgU1JUUCAgICAgICAgICAgICAgICAgICAgICAgIE1hcmNoIDIwMDQKLQotCi01LjEuICBFbmNyeXB0aW9uOiBBRVMtQ00gYW5kIE5VTEwKLQotICAgQUVTIHJ1bm5pbmcgaW4gU2VnbWVudGVkIEludGVnZXIgQ291bnRlciBNb2RlLCBhcyBkZWZpbmVkIGluIFNlY3Rpb24KLSAgIDQuMS4xLCBTSEFMTCBiZSB0aGUgZGVmYXVsdCBlbmNyeXB0aW9uIGFsZ29yaXRobS4gIFRoZSBkZWZhdWx0IGtleQotICAgbGVuZ3RocyBTSEFMTCBiZSAxMjgtYml0IGZvciB0aGUgc2Vzc2lvbiBlbmNyeXB0aW9uIGtleSAobl9lKS4gIFRoZQotICAgZGVmYXVsdCBzZXNzaW9uIHNhbHQga2V5LWxlbmd0aCAobl9zKSBTSEFMTCBiZSAxMTIgYml0cy4KLQotICAgVGhlIE5VTEwgY2lwaGVyIFNIQUxMIGFsc28gYmUgbWFuZGF0b3J5LXRvLWltcGxlbWVudC4KLQotNS4yLiAgTWVzc2FnZSBBdXRoZW50aWNhdGlvbi9JbnRlZ3JpdHk6IEhNQUMtU0hBMQotCi0gICBITUFDLVNIQTEsIGFzIGRlZmluZWQgaW4gU2VjdGlvbiA0LjIuMSwgU0hBTEwgYmUgdGhlIGRlZmF1bHQgbWVzc2FnZQotICAgYXV0aGVudGljYXRpb24gY29kZS4gIFRoZSBkZWZhdWx0IHNlc3Npb24gYXV0aGVudGljYXRpb24ga2V5LWxlbmd0aAotICAgKG5fYSkgU0hBTEwgYmUgMTYwIGJpdHMsIHRoZSBkZWZhdWx0IGF1dGhlbnRpY2F0aW9uIHRhZyBsZW5ndGgKLSAgIChuX3RhZykgU0hBTEwgYmUgODAgYml0cywgYW5kIHRoZSBTUlRQX1BSRUZJWF9MRU5HVEggU0hBTEwgYmUgemVybwotICAgZm9yIEhNQUMtU0hBMS4gIEluIGFkZGl0aW9uLCBmb3IgU1JUQ1AsIHRoZSBwcmUtZGVmaW5lZCBITUFDLVNIQTEKLSAgIE1VU1QgTk9UIGJlIGFwcGxpZWQgd2l0aCBhIHZhbHVlIG9mIG5fdGFnLCBub3Igbl9hLCB0aGF0IGFyZSBzbWFsbGVyCi0gICB0aGFuIHRoZXNlIGRlZmF1bHRzLiAgRm9yIFNSVFAsIHNtYWxsZXIgdmFsdWVzIGFyZSBOT1QgUkVDT01NRU5ERUQsCi0gICBidXQgTUFZIGJlIHVzZWQgYWZ0ZXIgY2FyZWZ1bCBjb25zaWRlcmF0aW9uIG9mIHRoZSBpc3N1ZXMgaW4gU2VjdGlvbgotICAgNy41IGFuZCA5LjUuCi0KLTUuMy4gIEtleSBEZXJpdmF0aW9uOiBBRVMtQ00gUFJGCi0KLSAgIFRoZSBBRVMgQ291bnRlciBNb2RlIGJhc2VkIGtleSBkZXJpdmF0aW9uIGFuZCBQUkYgZGVmaW5lZCBpbiBTZWN0aW9ucwotICAgNC4zLjEgdG8gNC4zLjMsIHVzaW5nIGEgMTI4LWJpdCBtYXN0ZXIga2V5LCBTSEFMTCBiZSB0aGUgZGVmYXVsdAotICAgbWV0aG9kIGZvciBnZW5lcmF0aW5nIHNlc3Npb24ga2V5cy4gIFRoZSBkZWZhdWx0IG1hc3RlciBzYWx0IGxlbmd0aAotICAgU0hBTEwgYmUgMTEyIGJpdHMgYW5kIHRoZSBkZWZhdWx0IGtleS1kZXJpdmF0aW9uIHJhdGUgU0hBTEwgYmUgemVyby4KLQotNi4gIEFkZGluZyBTUlRQIFRyYW5zZm9ybXMKLQotICAgU2VjdGlvbiA0IHByb3ZpZGVzIGV4YW1wbGVzIG9mIHRoZSBsZXZlbCBvZiBkZXRhaWwgbmVlZGVkIGZvcgotICAgZGVmaW5pbmcgdHJhbnNmb3Jtcy4gIFdoZW5ldmVyIGEgbmV3IHRyYW5zZm9ybSBpcyB0byBiZSBhZGRlZCB0bwotICAgU1JUUCwgYSBjb21wYW5pb24gc3RhbmRhcmQgdHJhY2sgUkZDIE1VU1QgYmUgd3JpdHRlbiB0byBleGFjdGx5Ci0gICBkZWZpbmUgaG93IHRoZSBuZXcgdHJhbnNmb3JtIGNhbiBiZSB1c2VkIHdpdGggU1JUUCAoYW5kIFNSVENQKS4gIFN1Y2gKLSAgIGEgY29tcGFuaW9uIFJGQyBTSE9VTEQgYXZvaWQgb3ZlcmxhcCB3aXRoIHRoZSBTUlRQIHByb3RvY29sIGRvY3VtZW50LgotICAgTm90ZSBob3dldmVyLCB0aGF0IGl0IE1BWSBiZSBuZWNlc3NhcnkgdG8gZXh0ZW5kIHRoZSBTUlRQIG9yIFNSVENQCi0gICBjcnlwdG9ncmFwaGljIGNvbnRleHQgZGVmaW5pdGlvbiB3aXRoIG5ldyBwYXJhbWV0ZXJzIChpbmNsdWRpbmcgZml4ZWQKLSAgIG9yIGRlZmF1bHQgdmFsdWVzKSwgYWRkIHN0ZXBzIHRvIHRoZSBwYWNrZXQgcHJvY2Vzc2luZywgb3IgZXZlbiBhZGQKLSAgIGZpZWxkcyB0byB0aGUgU1JUUC9TUlRDUCBwYWNrZXRzLiAgVGhlIGNvbXBhbmlvbiBSRkMgU0hBTEwgZXhwbGFpbgotICAgYW55IGtub3duIGlzc3VlcyByZWdhcmRpbmcgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIHRyYW5zZm9ybSBhbmQKLSAgIG90aGVyIGFzcGVjdHMgb2YgU1JUUC4KLQotICAgRWFjaCBuZXcgdHJhbnNmb3JtIGRvY3VtZW50IFNIT1VMRCBzcGVjaWZ5IGl0cyBrZXkgYXR0cmlidXRlcywgZS5nLiwKLSAgIHNpemUgb2Yga2V5cyAobWluaW11bSwgbWF4aW11bSwgcmVjb21tZW5kZWQpLCBmb3JtYXQgb2Yga2V5cywKLSAgIHJlY29tbWVuZGVkL3JlcXVpcmVkIHByb2Nlc3Npbmcgb2YgaW5wdXQga2V5aW5nIG1hdGVyaWFsLAotICAgcmVxdWlyZW1lbnRzL3JlY29tbWVuZGF0aW9ucyBvbiBrZXkgbGlmZXRpbWUsIHJlLWtleWluZyBhbmQga2V5Ci0gICBkZXJpdmF0aW9uLCB3aGV0aGVyIHNoYXJpbmcgb2Yga2V5cyBiZXR3ZWVuIFNSVFAgYW5kIFNSVENQIGlzIGFsbG93ZWQKLSAgIG9yIG5vdCwgZXRjLgotCi0KLQotQmF1Z2hlciwgZXQgYWwuICAgICAgICAgICAgIFN0YW5kYXJkcyBUcmFjayAgICAgICAgICAgICAgICAgICAgW1BhZ2UgMjldCi0MCi1SRkMgMzcxMSAgICAgICAgICAgICAgICAgICAgICAgICAgU1JUUCAgICAgICAgICAgICAgICAgICAgICAgIE1hcmNoIDIwMDQKLQotCi0gICBBbiBhZGRlZCBtZXNzYWdlIGludGVncml0eSB0cmFuc2Zvcm0gU0hPVUxEIGRlZmluZSBhIG1pbmltdW0KLSAgIGFjY2VwdGFibGUga2V5L3RhZyBzaXplIGZvciBTUlRDUCwgZXF1aXZhbGVudCBpbiBzdHJlbmd0aCB0byB0aGUKLSAgIG1pbmltdW0gdmFsdWVzIGFzIGRlZmluZWQgaW4gU2VjdGlvbiA1LjIuCi0KLTcuICBSYXRpb25hbGUKLQotICAgVGhpcyBzZWN0aW9uIGV4cGxhaW5zIHRoZSByYXRpb25hbGUgYmVoaW5kIHNldmVyYWwgaW1wb3J0YW50IGZlYXR1cmVzCi0gICBvZiBTUlRQLgotCi03LjEuICBLZXkgZGVyaXZhdGlvbgotCi0gICBLZXkgZGVyaXZhdGlvbiByZWR1Y2VzIHRoZSBidXJkZW4gb24gdGhlIGtleSBlc3RhYmxpc2htZW50LiAgQXMgbWFueQotICAgYXMgc2l4IGRpZmZlcmVudCBrZXlzIGFyZSBuZWVkZWQgcGVyIGNyeXB0byBjb250ZXh0IChTUlRQIGFuZCBTUlRDUAotICAgZW5jcnlwdGlvbiBrZXlzIGFuZCBzYWx0cywgU1JUUCBhbmQgU1JUQ1AgYXV0aGVudGljYXRpb24ga2V5cyksIGJ1dAotICAgdGhlc2UgYXJlIGRlcml2ZWQgZnJvbSBhIHNpbmdsZSBtYXN0ZXIga2V5IGluIGEgY3J5cHRvZ3JhcGhpY2FsbHkKLSAgIHNlY3VyZSB3YXkuICBUaHVzLCB0aGUga2V5IG1hbmFnZW1lbnQgcHJvdG9jb2wgbmVlZHMgdG8gZXhjaGFuZ2Ugb25seQotICAgb25lIG1hc3RlciBrZXkgKHBsdXMgbWFzdGVyIHNhbHQgd2hlbiByZXF1aXJlZCksIGFuZCB0aGVuIFNSVFAgaXRzZWxmCi0gICBkZXJpdmVzIGFsbCB0aGUgbmVjZXNzYXJ5IHNlc3Npb24ga2V5cyAodmlhIHRoZSBmaXJzdCwgbWFuZGF0b3J5Ci0gICBhcHBsaWNhdGlvbiBvZiB0aGUga2V5IGRlcml2YXRpb24gZnVuY3Rpb24pLgotCi0gICBNdWx0aXBsZSBhcHBsaWNhdGlvbnMgb2YgdGhlIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uIGFyZSBvcHRpb25hbCwKLSAgIGJ1dCB3aWxsIGdpdmUgc2VjdXJpdHkgYmVuZWZpdHMgd2hlbiBlbmFibGVkLiAgVGhleSBwcmV2ZW50IGFuCi0gICBhdHRhY2tlciBmcm9tIG9idGFpbmluZyBsYXJnZSBhbW91bnRzIG9mIGNpcGhlcnRleHQgcHJvZHVjZWQgYnkgYQotICAgc2luZ2xlIGZpeGVkIHNlc3Npb24ga2V5LiAgSWYgdGhlIGF0dGFja2VyIHdhcyBhYmxlIHRvIGNvbGxlY3QgYQotICAgbGFyZ2UgYW1vdW50IG9mIGNpcGhlcnRleHQgZm9yIGEgY2VydGFpbiBzZXNzaW9uIGtleSwgaGUgbWlnaHQgYmUKLSAgIGhlbHBlZCBpbiBtb3VudGluZyBjZXJ0YWluIGF0dGFja3MuCi0KLSAgIE11bHRpcGxlIGFwcGxpY2F0aW9ucyBvZiB0aGUga2V5IGRlcml2YXRpb24gZnVuY3Rpb24gcHJvdmlkZQotICAgYmFja3dhcmRzIGFuZCBmb3J3YXJkIHNlY3VyaXR5IGluIHRoZSBzZW5zZSB0aGF0IGEgY29tcHJvbWlzZWQKLSAgIHNlc3Npb24ga2V5IGRvZXMgbm90IGNvbXByb21pc2Ugb3RoZXIgc2Vzc2lvbiBrZXlzIGRlcml2ZWQgZnJvbSB0aGUKLSAgIHNhbWUgbWFzdGVyIGtleS4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgYXR0YWNrZXIgd2hvIGlzIGFibGUgdG8gcmVjb3ZlcgotICAgYSBjZXJ0YWluIHNlc3Npb24ga2V5LCBpcyBhbnl3YXkgbm90IGFibGUgdG8gaGF2ZSBhY2Nlc3MgdG8gbWVzc2FnZXMKLSAgIHNlY3VyZWQgdW5kZXIgcHJldmlvdXMgYW5kIGxhdGVyIHNlc3Npb24ga2V5cyAoZGVyaXZlZCBmcm9tIHRoZSBzYW1lCi0gICBtYXN0ZXIga2V5KS4gIChOb3RlIHRoYXQsIG9mIGNvdXJzZSwgYSBsZWFrZWQgbWFzdGVyIGtleSByZXZlYWxzIGFsbAotICAgdGhlIHNlc3Npb24ga2V5cyBkZXJpdmVkIGZyb20gaXQuKQotCi0gICBDb25zaWRlcmF0aW9ucyBhcmlzZSB3aXRoIGhpZ2gtcmF0ZSBrZXkgcmVmcmVzaCwgZXNwZWNpYWxseSBpbiBsYXJnZQotICAgbXVsdGljYXN0IHNldHRpbmdzLCBzZWUgU2VjdGlvbiAxMS4KLQotNy4yLiAgU2FsdGluZyBrZXkKLQotICAgVGhlIG1hc3RlciBzYWx0IGd1YXJhbnRlZXMgc2VjdXJpdHkgYWdhaW5zdCBvZmYtbGluZSBrZXktY29sbGlzaW9uCi0gICBhdHRhY2tzIG9uIHRoZSBrZXkgZGVyaXZhdGlvbiB0aGF0IG1pZ2h0IG90aGVyd2lzZSByZWR1Y2UgdGhlCi0gICBlZmZlY3RpdmUga2V5IHNpemUgW01GMDBdLgotCi0KLQotCi0KLQotCi1CYXVnaGVyLCBldCBhbC4gICAgICAgICAgICAgU3RhbmRhcmRzIFRyYWNrICAgICAgICAgICAgICAgICAgICBbUGFnZSAzMF0KLQwKLVJGQyAzNzExICAgICAgICAgICAgICAgICAgICAgICAgICBTUlRQICAgICAgICAgICAgICAgICAgICAgICAgTWFyY2ggMjAwNAotCi0KLSAgIFRoZSBkZXJpdmVkIHNlc3Npb24gc2FsdGluZyBrZXkgdXNlZCBpbiB0aGUgZW5jcnlwdGlvbiwgaGFzIGJlZW4KLSAgIGludHJvZHVjZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IHNvbWUgYXR0YWNrcyBvbiBhZGRpdGl2ZSBzdHJlYW0KLSAgIGNpcGhlcnMsIHNlZSBTZWN0aW9uIDkuMi4gIFRoZSBleHBsaWNpdCBpbmNsdXNpb24gbWV0aG9kIG9mIHRoZSBzYWx0Ci0gICBpbiB0aGUgSVYgaGFzIGJlZW4gc2VsZWN0ZWQgZm9yIGVhc2Ugb2YgaGFyZHdhcmUgaW1wbGVtZW50YXRpb24uCi0KLTcuMy4gIE1lc3NhZ2UgSW50ZWdyaXR5IGZyb20gVW5pdmVyc2FsIEhhc2hpbmcKLQotICAgVGhlIHBhcnRpY3VsYXIgZGVmaW5pdGlvbiBvZiB0aGUga2V5c3RyZWFtIGdpdmVuIGluIFNlY3Rpb24gNC4xICh0aGUKLSAgIGtleXN0cmVhbSBwcmVmaXgpIGlzIHRvIGdpdmUgcHJvdmlzaW9uIGZvciBwYXJ0aWN1bGFyIHVuaXZlcnNhbCBoYXNoCi0gICBmdW5jdGlvbnMsIHN1aXRhYmxlIGZvciBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGluIHRoZSBXZWdtYW4tQ2FydGVyCi0gICBwYXJhZGlnbSBbV0M4MV0uICBTdWNoIGZ1bmN0aW9ucyBhcmUgcHJvdmFibHkgc2VjdXJlLCBzaW1wbGUsIHF1aWNrLAotICAgYW5kIGVzcGVjaWFsbHkgYXBwcm9wcmlhdGUgZm9yIERpZ2l0YWwgU2lnbmFsIFByb2Nlc3NvcnMgYW5kIG90aGVyCi0gICBwcm9jZXNzb3JzIHdpdGggYSBmYXN0IG11bHRpcGx5IG9wZXJhdGlvbi4KLQotICAgTm8gYXV0aGVudGljYXRpb24gdHJhbnNmb3JtcyBhcmUgY3VycmVudGx5IHByb3ZpZGVkIGluIFNSVFAgb3RoZXIKLSAgIHRoYW4gSE1BQy1TSEExLiAgRnV0dXJlIHRyYW5zZm9ybXMsIGxpa2UgdGhlIGFib3ZlIG1lbnRpb25lZAotICAgdW5pdmVyc2FsIGhhc2ggZnVuY3Rpb25zLCBNQVkgYmUgYWRkZWQgZm9sbG93aW5nIHRoZSBndWlkZWxpbmVzIGluCi0gICBTZWN0aW9uIDYuCi0KLTcuNC4gIERhdGEgT3JpZ2luIEF1dGhlbnRpY2F0aW9uIENvbnNpZGVyYXRpb25zCi0KLSAgIE5vdGUgdGhhdCBpbiBwYWlyLXdpc2UgY29tbXVuaWNhdGlvbnMsIGludGVncml0eSBhbmQgZGF0YSBvcmlnaW4KLSAgIGF1dGhlbnRpY2F0aW9uIGFyZSBwcm92aWRlZCB0b2dldGhlci4gIEhvd2V2ZXIsIGluIGdyb3VwIHNjZW5hcmlvcwotICAgd2hlcmUgdGhlIGtleXMgYXJlIHNoYXJlZCBiZXR3ZWVuIG1lbWJlcnMsIHRoZSBNQUMgdGFnIG9ubHkgcHJvdmVzCi0gICB0aGF0IGEgbWVtYmVyIG9mIHRoZSBncm91cCBzZW50IHRoZSBwYWNrZXQsIGJ1dCBkb2VzIG5vdCBwcmV2ZW50Ci0gICBhZ2FpbnN0IGEgbWVtYmVyIGltcGVyc29uYXRpbmcgYW5vdGhlci4gIERhdGEgb3JpZ2luIGF1dGhlbnRpY2F0aW9uCi0gICAoRE9BKSBmb3IgbXVsdGljYXN0IGFuZCBncm91cCBSVFAgc2Vzc2lvbnMgaXMgYSBoYXJkIHByb2JsZW0gdGhhdAotICAgbmVlZHMgYSBzb2x1dGlvbjsgd2hpbGUgc29tZSBwcm9taXNpbmcgcHJvcG9zYWxzIGFyZSBiZWluZwotICAgaW52ZXN0aWdhdGVkIFtQQ1NUMV0gW1BDU1QyXSwgbW9yZSB3b3JrIGlzIG5lZWRlZCB0byByaWdvcm91c2x5Ci0gICBzcGVjaWZ5IHRoZXNlIHRlY2hub2xvZ2llcy4gIFRodXMgU1JUUCBkYXRhIG9yaWdpbiBhdXRoZW50aWNhdGlvbiBpbgotICAgZ3JvdXBzIGlzIGZvciBmdXJ0aGVyIHN0dWR5LgotCi0gICBET0EgY2FuIGJlIGRvbmUgb3RoZXJ3aXNlIHVzaW5nIHNpZ25hdHVyZXMuICBIb3dldmVyLCB0aGlzIGhhcyBoaWdoCi0gICBpbXBhY3QgaW4gdGVybXMgb2YgYmFuZHdpZHRoIGFuZCBwcm9jZXNzaW5nIHRpbWUsIHRoZXJlZm9yZSB3ZSBkbyBub3QKLSAgIG9mZmVyIHRoaXMgZm9ybSBvZiBhdXRoZW50aWNhdGlvbiBpbiB0aGUgcHJlLWRlZmluZWQgcGFja2V0LWludGVncml0eQotICAgdHJhbnNmb3JtLgotCi0gICBUaGUgcHJlc2VuY2Ugb2YgbWl4ZXJzIGFuZCB0cmFuc2xhdG9ycyBkb2VzIG5vdCBhbGxvdyBkYXRhIG9yaWdpbgotICAgYXV0aGVudGljYXRpb24gaW4gY2FzZSB0aGUgUlRQIHBheWxvYWQgYW5kL29yIHRoZSBSVFAgaGVhZGVyIGFyZQotICAgbWFuaXB1bGF0ZWQuICBOb3RlIHRoYXQgdGhlc2UgdHlwZXMgb2YgbWlkZGxlIGVudGl0aWVzIGFsc28gZGlzcnVwdAotICAgZW5kLXRvLWVuZCBjb25maWRlbnRpYWxpdHkgKGFzIHRoZSBJViBmb3JtYXRpb24gZGVwZW5kcyBlLmcuLCBvbiB0aGUKLSAgIFJUUCBoZWFkZXIgcHJlc2VydmF0aW9uKS4gIEEgY2VydGFpbiB0cnVzdCBtb2RlbCBtYXkgY2hvb3NlIHRvIHRydXN0Ci0gICB0aGUgbWl4ZXJzL3RyYW5zbGF0b3JzIHRvIGRlY3J5cHQvcmUtZW5jcnlwdCB0aGUgbWVkaWEgKHRoaXMgd291bGQKLSAgIGltcGx5IGJyZWFraW5nIHRoZSBlbmQtdG8tZW5kIHNlY3VyaXR5LCB3aXRoIHJlbGF0ZWQgc2VjdXJpdHkKLSAgIGltcGxpY2F0aW9ucykuCi0KLQotCi0KLQotCi1CYXVnaGVyLCBldCBhbC4gICAgICAgICAgICAgU3RhbmRhcmRzIFRyYWNrICAgICAgICAgICAgICAgICAgICBbUGFnZSAzMV0KLQwKLVJGQyAzNzExICAgICAgICAgICAgICAgICAgICAgICAgICBTUlRQICAgICAgICAgICAgICAgICAgICAgICAgTWFyY2ggMjAwNAotCi0KLTcuNS4gIFNob3J0IGFuZCBaZXJvLWxlbmd0aCBNZXNzYWdlIEF1dGhlbnRpY2F0aW9uCi0KLSAgIEFzIHNob3duIGluIEZpZ3VyZSAxLCB0aGUgYXV0aGVudGljYXRpb24gdGFnIGlzIFJFQ09NTUVOREVEIGluIFNSVFAuCi0gICBBIGZ1bGwgODAtYml0IGF1dGhlbnRpY2F0aW9uLXRhZyBTSE9VTEQgYmUgdXNlZCwgYnV0IGEgc2hvcnRlciB0YWcgb3IKLSAgIGV2ZW4gYSB6ZXJvLWxlbmd0aCB0YWcgKGkuZS4sIG5vIG1lc3NhZ2UgYXV0aGVudGljYXRpb24pIE1BWSBiZSB1c2VkCi0gICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMgdG8gc3VwcG9ydCBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyB0d28KLSAgIGFwcGxpY2F0aW9uIGVudmlyb25tZW50cy4KLQotICAgICAgMS4gU3Ryb25nIGF1dGhlbnRpY2F0aW9uIGNhbiBiZSBpbXByYWN0aWNhbCBpbiBlbnZpcm9ubWVudHMgd2hlcmUKLSAgICAgICAgIGJhbmR3aWR0aCBwcmVzZXJ2YXRpb24gaXMgaW1wZXJhdGl2ZS4gIEFuIGltcG9ydGFudCBzcGVjaWFsCi0gICAgICAgICBjYXNlIGlzIHdpcmVsZXNzIGNvbW11bmljYXRpb24gc3lzdGVtcywgaW4gd2hpY2ggYmFuZHdpZHRoIGlzIGEKLSAgICAgICAgIHNjYXJjZSBhbmQgZXhwZW5zaXZlIHJlc291cmNlLiAgU3R1ZGllcyBoYXZlIHNob3duIHRoYXQgZm9yCi0gICAgICAgICBjZXJ0YWluIGFwcGxpY2F0aW9ucyBhbmQgbGluayB0ZWNobm9sb2dpZXMsIGFkZGl0aW9uYWwgYnl0ZXMKLSAgICAgICAgIG1heSByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBkZWNyZWFzZSBpbiBzcGVjdHJ1bSBlZmZpY2llbmN5Ci0gICAgICAgICBbU1dPXS4gIENvbnNpZGVyYWJsZSBlZmZvcnQgaGFzIGJlZW4gbWFkZSB0byBkZXNpZ24gSVAgaGVhZGVyCi0gICAgICAgICBjb21wcmVzc2lvbiB0ZWNobmlxdWVzIHRvIGltcHJvdmUgc3BlY3RydW0gZWZmaWNpZW5jeQotICAgICAgICAgW1JGQzMwOTVdLiAgQSB0eXBpY2FsIHZvaWNlIGFwcGxpY2F0aW9uIHByb2R1Y2VzIDIwIGJ5dGUKLSAgICAgICAgIHNhbXBsZXMsIGFuZCB0aGUgUlRQLCBVRFAgYW5kIElQIGhlYWRlcnMgbmVlZCB0byBiZSBqb2ludGx5Ci0gICAgICAgICBjb21wcmVzc2VkIHRvIG9uZSBvciB0d28gYnl0ZXMgb24gYXZlcmFnZSBpbiBvcmRlciB0byBvYnRhaW4KLSAgICAgICAgIGFjY2VwdGFibGUgd2lyZWxlc3MgYmFuZHdpZHRoIGVjb25vbXkgW1JGQzMwOTVdLiAgSW4gdGhpcyBjYXNlLAotICAgICAgICAgc3Ryb25nIGF1dGhlbnRpY2F0aW9uIHdvdWxkIGltcG9zZSBuZWFybHkgZmlmdHkgcGVyY2VudAotICAgICAgICAgb3ZlcmhlYWQuCi0KLSAgICAgIDIuIEF1dGhlbnRpY2F0aW9uIGlzIGltcHJhY3RpY2FsIGZvciBhcHBsaWNhdGlvbnMgdGhhdCB1c2UgZGF0YQotICAgICAgICAgbGlua3Mgd2l0aCBmaXhlZC13aWR0aCBmaWVsZHMgdGhhdCBjYW5ub3QgYWNjb21tb2RhdGUgdGhlCi0gICAgICAgICBleHBhbnNpb24gZHVlIHRvIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcuICBUaGlzIGlzIHRoZSBjYXNlIGZvcgotICAgICAgICAgc29tZSBpbXBvcnRhbnQgZXhpc3Rpbmcgd2lyZWxlc3MgY2hhbm5lbHMuICBGb3IgZXhhbXBsZSwgemVyby0KLSAgICAgICAgIGJ5dGUgaGVhZGVyIGNvbXByZXNzaW9uIGlzIHVzZWQgdG8gYWRhcHQgRVZSQy9TTVYgdm9pY2Ugd2l0aAotICAgICAgICAgdGhlIGxlZ2FjeSBJUy05NSBiZWFyZXIgY2hhbm5lbCBpbiBDRE1BMjAwMCBWb0lQIHNlcnZpY2VzLiAgSXQKLSAgICAgICAgIHdhcyBmb3VuZCB0aGF0IG5vdCBhIHNpbmdsZSBhZGRpdGlvbmFsIG9jdGV0IGNvdWxkIGJlIGFkZGVkIHRvCi0gICAgICAgICB0aGUgZGF0YSwgd2hpY2ggbW90aXZhdGVkIHRoZSBjcmVhdGlvbiBvZiBhIHplcm8tYnl0ZSBwcm9maWxlCi0gICAgICAgICBmb3IgUk9IQyBbUkZDMzI0Ml0uCi0KLSAgIEEgc2hvcnQgdGFnIGlzIHNlY3VyZSBmb3IgYSByZXN0cmljdGVkIHNldCBvZiBhcHBsaWNhdGlvbnMuICBDb25zaWRlcgotICAgYSB2b2ljZSB0ZWxlcGhvbnkgYXBwbGljYXRpb24sIGZvciBleGFtcGxlLCBzdWNoIGFzIGEgRy43MjkgYXVkaW8KLSAgIGNvZGVjIHdpdGggYSAyMC1taWxsaXNlY29uZCBwYWNrZXRpemF0aW9uIGludGVydmFsLCBwcm90ZWN0ZWQgYnkgYQotICAgMzItYml0IG1lc3NhZ2UgYXV0aGVudGljYXRpb24gdGFnLiAgVGhlIGxpa2VsaWhvb2Qgb2YgYW55IGdpdmVuCi0gICBwYWNrZXQgYmVpbmcgc3VjY2Vzc2Z1bGx5IGZvcmdlZCBpcyBvbmx5IG9uZSBpbiAyXjMyLiAgVGh1cyBhbgotICAgYWR2ZXJzYXJ5IGNhbiBjb250cm9sIG5vIG1vcmUgdGhhbiAyMCBtaWxsaXNlY29uZHMgb2YgYXVkaW8gb3V0cHV0Ci0gICBkdXJpbmcgYSA5OTQtZGF5IHBlcmlvZCwgb24gYXZlcmFnZS4gIEluIGNvbnRyYXN0LCB0aGUgZWZmZWN0IG9mIGEKLSAgIHNpbmdsZSBmb3JnZWQgcGFja2V0IGNhbiBiZSBtdWNoIGxhcmdlciBpZiB0aGUgYXBwbGljYXRpb24gaXMKLSAgIHN0YXRlZnVsLiAgQSBjb2RlYyB0aGF0IHVzZXMgcmVsYXRpdmUgb3IgcHJlZGljdGl2ZSBjb21wcmVzc2lvbgotICAgYWNyb3NzIHBhY2tldHMgd2lsbCBwcm9wYWdhdGUgdGhlIG1hbGljaW91c2x5IGdlbmVyYXRlZCBzdGF0ZSwKLSAgIGFmZmVjdGluZyBhIGxvbmdlciBkdXJhdGlvbiBvZiBvdXRwdXQuCi0KLQotCi0KLQotCi0KLUJhdWdoZXIsIGV0IGFsLiAgICAgICAgICAgICBTdGFuZGFyZHMgVHJhY2sgICAgICAgICAgICAgICAgICAgIFtQYWdlIDMyXQotDAotUkZDIDM3MTEgICAgICAgICAgICAgICAgICAgICAgICAgIFNSVFAgICAgICAgICAgICAgICAgICAgICAgICBNYXJjaCAyMDA0Ci0KLQotICAgQ2VydGFpbmx5IG5vdCBhbGwgU1JUUCBvciB0ZWxlcGhvbnkgYXBwbGljYXRpb25zIG1lZXQgdGhlIGNyaXRlcmlhCi0gICBmb3Igc2hvcnQgb3IgemVyby1sZW5ndGggYXV0aGVudGljYXRpb24gdGFncy4gIFNlY3Rpb24gOS41LjEKLSAgIGRpc2N1c3NlcyB0aGUgcmlza3Mgb2Ygd2VhayBvciBubyBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uLCBhbmQgc2VjdGlvbgotICAgOS41IGRlc2NyaWJlcyB0aGUgY2lyY3Vtc3RhbmNlcyB3aGVuIGl0IGlzIGFjY2VwdGFibGUgYW5kIHdoZW4gaXQgaXMKLSAgIHVuYWNjZXB0YWJsZS4KLQotOC4gIEtleSBNYW5hZ2VtZW50IENvbnNpZGVyYXRpb25zCi0KLSAgIFRoZXJlIGFyZSBlbWVyZ2luZyBrZXkgbWFuYWdlbWVudCBzdGFuZGFyZHMgW01JS0VZXSBbS0VZTUdUXSBbU0RNU10KLSAgIGZvciBlc3RhYmxpc2hpbmcgYW4gU1JUUCBjcnlwdG9ncmFwaGljIGNvbnRleHQgKGUuZy4sIGFuIFNSVFAgbWFzdGVyCi0gICBrZXkpLiAgQm90aCBwcm9wcmlldGFyeSBhbmQgb3Blbi1zdGFuZGFyZCBrZXkgbWFuYWdlbWVudCBtZXRob2RzIGFyZQotICAgbGlrZWx5IHRvIGJlIHVzZWQgZm9yIHRlbGVwaG9ueSBhcHBsaWNhdGlvbnMgW01JS0VZXSBbS0lOS10gYW5kCi0gICBtdWx0aWNhc3QgYXBwbGljYXRpb25zIFtHRE9JXS4gIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBndWlkYW5jZSBmb3IKLSAgIGtleSBtYW5hZ2VtZW50IHN5c3RlbXMgdGhhdCBzZXJ2aWNlIFNSVFAgc2Vzc2lvbi4KLQotICAgRm9yIGluaXRpYWxpemF0aW9uLCBhbiBpbnRlcm9wZXJhYmxlIFNSVFAgaW1wbGVtZW50YXRpb24gU0hPVUxEIGJlCi0gICBnaXZlbiB0aGUgU1NSQyBhbmQgTUFZIGJlIGdpdmVuIHRoZSBpbml0aWFsIFJUUCBzZXF1ZW5jZSBudW1iZXIgZm9yCi0gICB0aGUgUlRQIHN0cmVhbSBieSBrZXkgbWFuYWdlbWVudCAodGh1cywga2V5IG1hbmFnZW1lbnQgaGFzIGEKLSAgIGRlcGVuZGVuY3kgb24gUlRQIG9wZXJhdGlvbmFsIHBhcmFtZXRlcnMpLiAgU2VuZGluZyB0aGUgUlRQIHNlcXVlbmNlCi0gICBudW1iZXIgaW4gdGhlIGtleSBtYW5hZ2VtZW50IG1heSBiZSB1c2VmdWwgZS5nLiwgd2hlbiB0aGUgaW5pdGlhbAotICAgc2VxdWVuY2UgbnVtYmVyIGlzIGNsb3NlIHRvIHdyYXBwaW5nICh0byBhdm9pZCBzeW5jaHJvbml6YXRpb24KLSAgIHByb2JsZW1zKSwgYW5kIHRvIGNvbW11bmljYXRlIHRoZSBjdXJyZW50IHNlcXVlbmNlIG51bWJlciB0byBhCi0gICBqb2luaW5nIGVuZHBvaW50ICh0byBwcm9wZXJseSBpbml0aWFsaXplIGl0cyByZXBsYXkgbGlzdCkuCi0KLSAgIElmIHRoZSBwcmUtZGVmaW5lZCB0cmFuc2Zvcm1zIGFyZSB1c2VkLCBTUlRQIGFsbG93cyBzaGFyaW5nIG9mIHRoZQotICAgc2FtZSBtYXN0ZXIga2V5IGJldHdlZW4gU1JUUC9TUlRDUCBzdHJlYW1zIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBSVFAKLSAgIHNlc3Npb24uCi0KLSAgIEZpcnN0LCBzaGFyaW5nIGJldHdlZW4gU1JUUCBzdHJlYW1zIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBSVFAgc2Vzc2lvbgotICAgaXMgc2VjdXJlIGlmIHRoZSBkZXNpZ24gb2YgdGhlIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20sIGkuZS4sIHRoZQotICAgSVYsIGF2b2lkcyBrZXlzdHJlYW0gcmUtdXNlICh0aGUgdHdvLXRpbWUgcGFkLCBTZWN0aW9uIDkuMSkuICBUaGlzIGlzCi0gICB0YWtlbiBjYXJlIG9mIGJ5IHRoZSBmYWN0IHRoYXQgUlRQIHByb3ZpZGVzIGZvciB1bmlxdWUgU1NSQ3MgZm9yCi0gICBzdHJlYW1zIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBSVFAgc2Vzc2lvbi4gIFNlZSBTZWN0aW9uIDkuMSBmb3IKLSAgIGZ1cnRoZXIgZGlzY3Vzc2lvbi4KLQotICAgU2Vjb25kLCBzaGFyaW5nIGJldHdlZW4gU1JUUCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgU1JUQ1AgaXMgc2VjdXJlLgotICAgVGhlIGZhY3QgdGhhdCBhbiBTUlRQIHN0cmVhbSBhbmQgaXRzIGFzc29jaWF0ZWQgU1JUQ1Agc3RyZWFtIGJvdGgKLSAgIGNhcnJ5IHRoZSBzYW1lIFNTUkMgZG9lcyBub3QgY29uc3RpdHV0ZSBhIHByb2JsZW0gZm9yIHRoZSB0d28tdGltZQotICAgcGFkIGR1ZSB0byB0aGUga2V5IGRlcml2YXRpb24uICBUaHVzLCBTUlRQIGFuZCBTUlRDUCBjb3JyZXNwb25kaW5nIHRvCi0gICBvbmUgUlRQIHNlc3Npb24gTUFZIHNoYXJlIG1hc3RlciBrZXlzIChhcyB0aGV5IGRvIGJ5IGRlZmF1bHQpLgotCi0gICBOb3RlIHRoYXQgbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBhbHNvIGhhcyBhIGRlcGVuZGVuY3kgb24gU1NSQwotICAgdW5pcXVlbmVzcyB0aGF0IGlzIHVucmVsYXRlZCB0byB0aGUgcHJvYmxlbSBvZiBrZXlzdHJlYW0gcmV1c2U6IFNSVFAKLSAgIHN0cmVhbXMgYXV0aGVudGljYXRlZCB1bmRlciB0aGUgc2FtZSBrZXkgTVVTVCBoYXZlIGEgZGlzdGluY3QgU1NSQyBpbgotICAgb3JkZXIgdG8gaWRlbnRpZnkgdGhlIHNlbmRlciBvZiB0aGUgbWVzc2FnZS4gIFRoaXMgcmVxdWlyZW1lbnQgaXMKLSAgIG5lZWRlZCBiZWNhdXNlIHRoZSBTU1JDIGlzIHRoZSBjcnlwdG9ncmFwaGljYWxseSBhdXRoZW50aWNhdGVkIGZpZWxkCi0KLQotCi0KLQotQmF1Z2hlciwgZXQgYWwuICAgICAgICAgICAgIFN0YW5kYXJkcyBUcmFjayAgICAgICAgICAgICAgICAgICAgW1BhZ2UgMzNdCi0MCi1SRkMgMzcxMSAgICAgICAgICAgICAgICAgICAgICAgICAgU1JUUCAgICAgICAgICAgICAgICAgICAgICAgIE1hcmNoIDIwMDQKLQotCi0gICB1c2VkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gZGlmZmVyZW50IFNSVFAgc3RyZWFtcy4gIFdlcmUgdHdvIHN0cmVhbXMKLSAgIHRvIHVzZSBpZGVudGljYWwgU1NSQyB2YWx1ZXMsIHRoZW4gYW4gYWR2ZXJzYXJ5IGNvdWxkIHN1YnN0aXR1dGUKLSAgIG1lc3NhZ2VzIGZyb20gb25lIHN0cmVhbSBpbnRvIHRoZSBvdGhlciB3aXRob3V0IGRldGVjdGlvbi4KLQotICAgU1JUUC9TUlRDUCBNVVNUIE5PVCBzaGFyZSBtYXN0ZXIga2V5cyB1bmRlciBhbnkgb3RoZXIgY2lyY3Vtc3RhbmNlcwotICAgdGhhbiB0aGUgb25lcyBnaXZlbiBhYm92ZSwgaS5lLiwgYmV0d2VlbiBTUlRQIGFuZCBpdHMgY29ycmVzcG9uZGluZwotICAgU1JUQ1AsIGFuZCwgYmV0d2VlbiBzdHJlYW1zIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBSVFAgc2Vzc2lvbi4KLQotOC4xLiAgUmUta2V5aW5nCi0KLSAgIFRoZSByZWNvbW1lbmRlZCB3YXkgZm9yIGEgcGFydGljdWxhciBrZXkgbWFuYWdlbWVudCBzeXN0ZW0gdG8gcHJvdmlkZQotICAgcmUta2V5IHdpdGhpbiBTUlRQIGlzIGJ5IGFzc29jaWF0aW5nIGEgbWFzdGVyIGtleSBpbiBhIGNyeXB0byBjb250ZXh0Ci0gICB3aXRoIGFuIE1LSS4KLQotICAgVGhpcyBwcm92aWRlcyBmb3IgZWFzeSBtYXN0ZXIga2V5IHJldHJpZXZhbCAoc2VlIFNjZW5hcmlvcyBpbiBTZWN0aW9uCi0gICAxMSksIGJ1dCBoYXMgdGhlIGRpc2FkdmFudGFnZSBvZiBhZGRpbmcgZXh0cmEgYml0cyB0byBlYWNoIHBhY2tldC4KLSAgIEFzIG5vdGVkIGluIFNlY3Rpb24gNy41LCBzb21lIHdpcmVsZXNzIGxpbmtzIGRvIG5vdCBjYXRlciBmb3IgYWRkZWQKLSAgIGJpdHMsIHRoZXJlZm9yZSBTUlRQIGFsc28gZGVmaW5lcyBhIG1vcmUgZWNvbm9taWMgd2F5IG9mIHRyaWdnZXJpbmcKLSAgIHJlLWtleWluZywgdmlhIHVzZSBvZiA8RnJvbSwgVG8+LCB3aGljaCB3b3JrcyBpbiBzb21lIHNwZWNpZmljLAotICAgc2ltcGxlIHNjZW5hcmlvcyAoc2VlIFNlY3Rpb24gOC4xLjEpLgotCi0gICBTUlRQIHNlbmRlcnMgU0hBTEwgY291bnQgdGhlIGFtb3VudCBvZiBTUlRQIGFuZCBTUlRDUCB0cmFmZmljIGJlaW5nCi0gICB1c2VkIGZvciBhIG1hc3RlciBrZXkgYW5kIGludm9rZSBrZXkgbWFuYWdlbWVudCB0byByZS1rZXkgaWYgbmVlZGVkCi0gICAoU2VjdGlvbiA5LjIpLiAgVGhlc2UgaW50ZXJhY3Rpb25zIGFyZSBkZWZpbmVkIGJ5IHRoZSBrZXkgbWFuYWdlbWVudAotICAgaW50ZXJmYWNlIHRvIFNSVFAgYW5kIGFyZSBub3QgZGVmaW5lZCBieSB0aGlzIHByb3RvY29sIHNwZWNpZmljYXRpb24uCi0KLTguMS4xLiAgVXNlIG9mIHRoZSA8RnJvbSwgVG8+IGZvciByZS1rZXlpbmcKLQotICAgSW4gYWRkaXRpb24gdG8gdGhlIHVzZSBvZiB0aGUgTUtJLCBTUlRQIGRlZmluZXMgYW5vdGhlciBvcHRpb25hbAotICAgbWVjaGFuaXNtIGZvciBtYXN0ZXIga2V5IHJldHJpZXZhbCwgdGhlIDxGcm9tLCBUbz4uICBUaGUgPEZyb20sIFRvPgotICAgc3BlY2lmaWVzIHRoZSByYW5nZSBvZiBTUlRQIGluZGljZXMgKGEgcGFpciBvZiBzZXF1ZW5jZSBudW1iZXIgYW5kCi0gICBST0MpIHdpdGhpbiB3aGljaCBhIGNlcnRhaW4gbWFzdGVyIGtleSBpcyB2YWxpZCwgYW5kIGlzICh3aGVuIHVzZWQpCi0gICBwYXJ0IG9mIHRoZSBjcnlwdG8gY29udGV4dC4gIEJ5IGxvb2tpbmcgYXQgdGhlIDQ4LWJpdCBTUlRQIGluZGV4IG9mCi0gICB0aGUgY3VycmVudCBTUlRQIHBhY2tldCwgdGhlIGNvcnJlc3BvbmRpbmcgbWFzdGVyIGtleSBjYW4gYmUgZm91bmQgYnkKLSAgIGRldGVybWluaW5nIHdoaWNoIEZyb20tVG8gaW50ZXJ2YWwgaXQgYmVsb25ncyB0by4gIEZvciBTUlRDUCwgdGhlCi0gICBtb3N0IHJlY2VudGx5IG9ic2VydmVkL3VzZWQgU1JUUCBpbmRleCAod2hpY2ggY2FuIGJlIG9idGFpbmVkIGZyb20KLSAgIHRoZSBjcnlwdG9ncmFwaGljIGNvbnRleHQpIGlzIHVzZWQgZm9yIHRoaXMgcHVycG9zZSwgZXZlbiB0aG91Z2gKLSAgIFNSVENQIGhhcyBpdHMgb3duICgzMS1iaXQpIGluZGV4IChzZWUgY2F2ZWF0IGJlbG93KS4KLQotICAgVGhpcyBtZXRob2QsIGNvbXBhcmVkIHRvIHRoZSBNS0ksIGhhcyB0aGUgYWR2YW50YWdlIG9mIGlkZW50aWZ5aW5nCi0gICB0aGUgbWFzdGVyIGtleSBhbmQgZGVmaW5pbmcgaXRzIGxpZmV0aW1lIHdpdGhvdXQgYWRkaW5nIGV4dHJhIGJpdHMgdG8KLSAgIGVhY2ggcGFja2V0LiAgVGhpcyBjb3VsZCBiZSB1c2VmdWwsIGFzIGFscmVhZHkgbm90ZWQsIGZvciBzb21lCi0gICB3aXJlbGVzcyBsaW5rcyB0aGF0IGRvIG5vdCBjYXRlciBmb3IgYWRkZWQgYml0cy4gIEhvd2V2ZXIsIGl0cyB1c2UKLSAgIFNIT1VMRCBiZSBsaW1pdGVkIHRvIHNwZWNpZmljLCB2ZXJ5IHNpbXBsZSBzY2VuYXJpb3MuICBXZSByZWNvbW1lbmQKLSAgIHRvIGxpbWl0IGl0cyB1c2Ugd2hlbiB0aGUgUlRQIHNlc3Npb24gaXMgYSBzaW1wbGUgdW5pZGlyZWN0aW9uYWwgb3IKLSAgIGJpLWRpcmVjdGlvbmFsIHN0cmVhbS4gIFRoaXMgaXMgYmVjYXVzZSBpbiBjYXNlIG9mIG11bHRpcGxlIHN0cmVhbXMsCi0gICBpdCBpcyBkaWZmaWN1bHQgdG8gdHJpZ2dlciB0aGUgcmUta2V5IGJhc2VkIG9uIHRoZSA8RnJvbSwgVG8+IG9mIGEKLSAgIHNpbmdsZSBSVFAgc3RyZWFtLiBGb3IgZXhhbXBsZSwgaWYgc2V2ZXJhbCBzdHJlYW1zIHNoYXJlIGEgbWFzdGVyCi0KLQotCi1CYXVnaGVyLCBldCBhbC4gICAgICAgICAgICAgU3RhbmRhcmRzIFRyYWNrICAgICAgICAgICAgICAgICAgICBbUGFnZSAzNF0KLQwKLVJGQyAzNzExICAgICAgICAgICAgICAgICAgICAgICAgICBTUlRQICAgICAgICAgICAgICAgICAgICAgICAgTWFyY2ggMjAwNAotCi0KLSAgIGtleSwgdGhlcmUgaXMgbm8gc2ltcGxlIG9uZS10by1vbmUgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiB0aGUgaW5kZXgKLSAgIHNlcXVlbmNlIHNwYWNlIG9mIGEgY2VydGFpbiBzdHJlYW0sIGFuZCB0aGUgaW5kZXggc2VxdWVuY2Ugc3BhY2Ugb24KLSAgIHdoaWNoIHRoZSA8RnJvbSwgVG8+IHZhbHVlcyBhcmUgYmFzZWQuICBDb25zZXF1ZW50bHksIHdoZW4gYSBtYXN0ZXIKLSAgIGtleSBpcyBzaGFyZWQgYmV0d2VlbiBzdHJlYW1zLCBvbmUgb2YgdGhlc2Ugc3RyZWFtcyBNVVNUIGJlCi0gICBkZXNpZ25hdGVkIGJ5IGtleSBtYW5hZ2VtZW50IGFzIHRoZSBvbmUgd2hvc2UgaW5kZXggc3BhY2UgZGVmaW5lcyB0aGUKLSAgIHJlLWtleWluZyBwb2ludHMuICBBbHNvLCB0aGUgcmUta2V5IHRyaWdnZXJpbmcgb24gU1JUQ1AgaXMgYmFzZWQgb24KLSAgIHRoZSBjb3JyZXNwb25kZW50IFNSVFAgc3RyZWFtLCBpLmUuLCB3aGVuIHRoZSBTUlRQIHN0cmVhbSBjaGFuZ2VzIHRoZQotICAgbWFzdGVyIGtleSwgc28gZG9lcyB0aGUgY29ycmVzcG9uZGVudCBTUlRDUC4gIFRoaXMgYmVjb21lcyBvYnZpb3VzbHkKLSAgIG1vcmUgYW5kIG1vcmUgY29tcGxleCB3aXRoIG11bHRpcGxlIHN0cmVhbXMuCi0KLSAgIFRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIDxGcm9tLCBUbz4gYXJlICJmcm9tIHRoZSBmaXJzdCBvYnNlcnZlZAotICAgcGFja2V0IiBhbmQgInVudGlsIGZ1cnRoZXIgbm90aWNlIi4gIEhvd2V2ZXIsIHRoZSBtYXhpbXVtIGxpbWl0IG9mCi0gICBTUlRQL1NSVENQIHBhY2tldHMgdGhhdCBhcmUgc2VudCB1bmRlciBlYWNoIGdpdmVuIG1hc3Rlci9zZXNzaW9uIGtleQotICAgKFNlY3Rpb24gOS4yKSBNVVNUIE5PVCBiZSBleGNlZWRlZC4KLQotICAgSW4gY2FzZSB0aGUgPEZyb20sIFRvPiBpcyB1c2VkIGFzIGtleSByZXRyaWV2YWwsIHRoZW4gdGhlIE1LSSBpcyBub3QKLSAgIGluc2VydGVkIGluIHRoZSBwYWNrZXQgKGFuZCBpdHMgaW5kaWNhdG9yIGluIHRoZSBjcnlwdG8gY29udGV4dCBpcwotICAgemVybykuICBIb3dldmVyLCB1c2luZyB0aGUgTUtJIGRvZXMgbm90IGV4Y2x1ZGUgdXNpbmcgPEZyb20sIFRvPiBrZXkKLSAgIGxpZmV0aW1lIHNpbXVsdGFuZW91c2x5LiAgVGhpcyBjYW4gZm9yIGluc3RhbmNlIGJlIHVzZWZ1bCB0byBzaWduYWwKLSAgIGF0IHRoZSBzZW5kZXIgc2lkZSBhdCB3aGljaCBwb2ludCBpbiB0aW1lIGFuIE1LSSBpcyB0byBiZSBtYWRlCi0gICBhY3RpdmUuCi0KLTguMi4gIEtleSBNYW5hZ2VtZW50IHBhcmFtZXRlcnMKLQotICAgVGhlIHRhYmxlIGJlbG93IGxpc3RzIGFsbCBTUlRQIHBhcmFtZXRlcnMgdGhhdCBrZXkgbWFuYWdlbWVudCBjYW4KLSAgIHN1cHBseS4gIEZvciByZWZlcmVuY2UsIGl0IGFsc28gcHJvdmlkZXMgYSBzdW1tYXJ5IG9mIHRoZSBkZWZhdWx0IGFuZAotICAgbWFuZGF0b3J5LXRvLXN1cHBvcnQgdmFsdWVzIGZvciBhbiBTUlRQIGltcGxlbWVudGF0aW9uIGFzIGRlc2NyaWJlZAotICAgaW4gU2VjdGlvbiA1LgotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLUJhdWdoZXIsIGV0IGFsLiAgICAgICAgICAgICBTdGFuZGFyZHMgVHJhY2sgICAgICAgICAgICAgICAgICAgIFtQYWdlIDM1XQotDAotUkZDIDM3MTEgICAgICAgICAgICAgICAgICAgICAgICAgIFNSVFAgICAgICAgICAgICAgICAgICAgICAgICBNYXJjaCAyMDA0Ci0KLQotICAgUGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICAgTWFuZGF0b3J5LXRvLXN1cHBvcnQgICAgRGVmYXVsdAotICAgLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgLS0tLS0tLQotCi0gICBTUlRQIGFuZCBTUlRDUCBlbmNyIHRyYW5zZi4gICAgICAgQUVTX0NNLCBOVUxMICAgICAgICAgQUVTX0NNCi0gICAoT3RoZXIgcG9zc2libGUgdmFsdWVzOiBBRVNfZjgpCi0KLSAgIFNSVFAgYW5kIFNSVENQIGF1dGggdHJhbnNmLiAgICAgICBITUFDLVNIQTEgICAgICAgICAgIEhNQUMtU0hBMQotCi0gICBTUlRQIGFuZCBTUlRDUCBhdXRoIHBhcmFtczoKLSAgICAgbl90YWcgKHRhZyBsZW5ndGgpICAgICAgICAgICAgICAgICA4MCAgICAgICAgICAgICAgICAgODAKLSAgICAgU1JUUCBwcmVmaXhfbGVuZ3RoICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgIDAKLQotICAgS2V5IGRlcml2YXRpb24gUFJGICAgICAgICAgICAgICAgICBBRVNfQ00gICAgICAgICAgICAgIEFFU19DTQotCi0gICBLZXkgbWF0ZXJpYWwgcGFyYW1zCi0gICAoZm9yIGVhY2ggbWFzdGVyIGtleSk6Ci0gICAgIG1hc3RlciBrZXkgbGVuZ3RoICAgICAgICAgICAgICAgICAxMjggICAgICAgICAgICAgICAgMTI4Ci0gICAgIG5fZSAoZW5jciBzZXNzaW9uIGtleSBsZW5ndGgpICAgICAxMjggICAgICAgICAgICAgICAgMTI4Ci0gICAgIG5fYSAoYXV0aCBzZXNzaW9uIGtleSBsZW5ndGgpICAgICAxNjAgICAgICAgICAgICAgICAgMTYwCi0gICAgIG1hc3RlciBzYWx0IGtleQotICAgICBsZW5ndGggb2YgdGhlIG1hc3RlciBzYWx0ICAgICAgICAgMTEyICAgICAgICAgICAgICAgIDExMgotICAgICBuX3MgKHNlc3Npb24gc2FsdCBrZXkgbGVuZ3RoKSAgICAgMTEyICAgICAgICAgICAgICAgIDExMgotICAgICBrZXkgZGVyaXZhdGlvbiByYXRlICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgMAotCi0gICAgIGtleSBsaWZldGltZQotICAgICAgICBTUlRQLXBhY2tldHMtbWF4LWxpZmV0aW1lICAgICAgMl40OCAgICAgICAgICAgICAgIDJeNDgKLSAgICAgICAgU1JUQ1AtcGFja2V0cy1tYXgtbGlmZXRpbWUgICAgIDJeMzEgICAgICAgICAgICAgICAyXjMxCi0gICAgICAgIGZyb20tdG8tbGlmZXRpbWUgPEZyb20sIFRvPgotICAgICBNS0kgaW5kaWNhdG9yICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAwCi0gICAgIGxlbmd0aCBvZiB0aGUgTUtJICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgIDAKLSAgICAgdmFsdWUgb2YgdGhlIE1LSQotCi0gICBDcnlwdG8gY29udGV4dCBpbmRleCBwYXJhbXM6Ci0gICAgIFNTUkMgdmFsdWUKLSAgICAgUk9DCi0gICAgIFNFUQotICAgICBTUlRDUCBJbmRleAotICAgICBUcmFuc3BvcnQgYWRkcmVzcwotICAgICBQb3J0IG51bWJlcgotCi0gICBSZWxhdGlvbiB0byBvdGhlciBSVFAgcHJvZmlsZXM6Ci0gICAgIHNlbmRlcidzIG9yZGVyIGJldHdlZW4gRkVDIGFuZCBTUlRQIEZFQy1TUlRQICAgICAgRkVDLVNSVFAKLSAgICAgKHNlZSBTZWN0aW9uIDEwKQotCi0KLQotCi0KLQotCi0KLUJhdWdoZXIsIGV0IGFsLiAgICAgICAgICAgICBTdGFuZGFyZHMgVHJhY2sgICAgICAgICAgICAgICAgICAgIFtQYWdlIDM2XQotDAotUkZDIDM3MTEgICAgICAgICAgICAgICAgICAgICAgICAgIFNSVFAgICAgICAgICAgICAgICAgICAgICAgICBNYXJjaCAyMDA0Ci0KLQotOS4gU2VjdXJpdHkgQ29uc2lkZXJhdGlvbnMKLQotOS4xLiAgU1NSQyBjb2xsaXNpb24gYW5kIHR3by10aW1lIHBhZAotCi0gICBBbnkgZml4ZWQga2V5c3RyZWFtIG91dHB1dCwgZ2VuZXJhdGVkIGZyb20gdGhlIHNhbWUga2V5IGFuZCBpbmRleAotICAgTVVTVCBvbmx5IGJlIHVzZWQgdG8gZW5jcnlwdCBvbmNlLiAgUmUtdXNpbmcgc3VjaCBrZXlzdHJlYW0gKGpva2luZ2x5Ci0gICBjYWxsZWQgYSAidHdvLXRpbWUgcGFkIiBzeXN0ZW0gYnkgY3J5cHRvZ3JhcGhlcnMpLCBjYW4gc2VyaW91c2x5Ci0gICBjb21wcm9taXNlIHNlY3VyaXR5LiAgVGhlIE5TQSdzIFZFTk9OQSBwcm9qZWN0IFtDOTldIHByb3ZpZGVzIGEKLSAgIGhpc3RvcmljYWwgZXhhbXBsZSBvZiBzdWNoIGEgY29tcHJvbWlzZS4gIEl0IGlzIFJFUVVJUkVEIHRoYXQKLSAgIGF1dG9tYXRpYyBrZXkgbWFuYWdlbWVudCBiZSB1c2VkIGZvciBlc3RhYmxpc2hpbmcgYW5kIG1haW50YWluaW5nCi0gICBTUlRQIGFuZCBTUlRDUCBrZXlpbmcgbWF0ZXJpYWw7IHRoaXMgcmVxdWlyZW1lbnQgaXMgdG8gYXZvaWQKLSAgIGtleXN0cmVhbSByZXVzZSwgd2hpY2ggaXMgbW9yZSBsaWtlbHkgdG8gb2NjdXIgd2l0aCBtYW51YWwga2V5Ci0gICBtYW5hZ2VtZW50LiAgRnVydGhlcm1vcmUsIGluIFNSVFAsIGEgInR3by10aW1lIHBhZCIgaXMgYXZvaWRlZCBieQotICAgcmVxdWlyaW5nIHRoZSBrZXksIG9yIHNvbWUgb3RoZXIgcGFyYW1ldGVyIG9mIGNyeXB0b2dyYXBoaWMKLSAgIHNpZ25pZmljYW5jZSwgdG8gYmUgdW5pcXVlIHBlciBSVFAvUlRDUCBzdHJlYW0gYW5kIHBhY2tldC4gIFRoZSBwcmUtCi0gICBkZWZpbmVkIFNSVFAgdHJhbnNmb3JtcyBhY2NvbXBsaXNoIHBhY2tldC11bmlxdWVuZXNzIGJ5IGluY2x1ZGluZyB0aGUKLSAgIHBhY2tldCBpbmRleCBhbmQgc3RyZWFtLXVuaXF1ZW5lc3MgYnkgaW5jbHVzaW9uIG9mIHRoZSBTU1JDLgotCi0gICBUaGUgcHJlLWRlZmluZWQgdHJhbnNmb3JtcyAoQUVTLUNNIGFuZCBBRVMtZjgpIGFsbG93IG1hc3RlciBrZXlzIHRvCi0gICBiZSBzaGFyZWQgYWNyb3NzIHN0cmVhbXMgYmVsb25naW5nIHRvIHRoZSBzYW1lIFJUUCBzZXNzaW9uIGJ5IHRoZQotICAgaW5jbHVzaW9uIG9mIHRoZSBTU1JDIGluIHRoZSBJVi4gIEEgbWFzdGVyIGtleSBNVVNUIE5PVCBiZSBzaGFyZWQKLSAgIGFtb25nIGRpZmZlcmVudCBSVFAgc2Vzc2lvbnMuCi0KLSAgIFRodXMsIHRoZSBTU1JDIE1VU1QgYmUgdW5pcXVlIGJldHdlZW4gYWxsIHRoZSBSVFAgc3RyZWFtcyB3aXRoaW4gdGhlCi0gICBzYW1lIFJUUCBzZXNzaW9uIHRoYXQgc2hhcmUgdGhlIHNhbWUgbWFzdGVyIGtleS4gIFJUUCBpdHNlbGYgcHJvdmlkZXMKLSAgIGFuIGFsZ29yaXRobSBmb3IgZGV0ZWN0aW5nIFNTUkMgY29sbGlzaW9ucyB3aXRoaW4gdGhlIHNhbWUgUlRQCi0gICBzZXNzaW9uLiAgVGh1cywgdGVtcG9yYXJ5IGNvbGxpc2lvbnMgY291bGQgbGVhZCB0byB0ZW1wb3JhcnkgdHdvLXRpbWUKLSAgIHBhZCwgaW4gdGhlIHVuZm9ydHVuYXRlIGV2ZW50IHRoYXQgU1NSQ3MgY29sbGlkZSBhdCBhIHBvaW50IGluIHRpbWUKLSAgIHdoZW4gdGhlIHN0cmVhbXMgYWxzbyBoYXZlIGlkZW50aWNhbCBzZXF1ZW5jZSBudW1iZXJzIChvY2N1cnJpbmcgd2l0aAotICAgcHJvYmFiaWxpdHkgcm91Z2hseSAyXigtNDgpKS4gIFRoZXJlZm9yZSwgdGhlIGtleSBtYW5hZ2VtZW50IFNIT1VMRAotICAgdGFrZSBjYXJlIG9mIGF2b2lkaW5nIHN1Y2ggU1NSQyBjb2xsaXNpb25zIGJ5IGluY2x1ZGluZyB0aGUgU1NSQ3MgdG8KLSAgIGJlIHVzZWQgaW4gdGhlIHNlc3Npb24gYXMgbmVnb3RpYXRpb24gcGFyYW1ldGVycywgcHJvYWN0aXZlbHkKLSAgIGFzc3VyaW5nIHRoZWlyIHVuaXF1ZW5lc3MuICBUaGlzIGlzIGEgc3Ryb25nIHJlcXVpcmVtZW50cyBpbgotICAgc2NlbmFyaW9zIHdoZXJlIGZvciBleGFtcGxlLCB0aGVyZSBhcmUgbXVsdGlwbGUgc2VuZGVycyB0aGF0IGNhbgotICAgc3RhcnQgdG8gdHJhbnNtaXQgc2ltdWx0YW5lb3VzbHksIGJlZm9yZSBTU1JDIGNvbGxpc2lvbiBhcmUgZGV0ZWN0ZWQKLSAgIGF0IHRoZSBSVFAgbGV2ZWwuCi0KLSAgIE5vdGUgYWxzbyB0aGF0IGV2ZW4gd2l0aCBkaXN0aW5jdCBTU1JDcywgZXh0ZW5zaXZlIHVzZSBvZiB0aGUgc2FtZQotICAga2V5IG1pZ2h0IGltcHJvdmUgY2hhbmNlcyBvZiBwcm9iYWJpbGlzdGljIGNvbGxpc2lvbiBhbmQgdGltZS0KLSAgIG1lbW9yeS10cmFkZW9mZiBhdHRhY2tzIHN1Y2NlZWRpbmcuCi0KLSAgIEFzIGRlc2NyaWJlZCwgbWFzdGVyIGtleXMgTUFZIGJlIHNoYXJlZCBiZXR3ZWVuIHN0cmVhbXMgYmVsb25naW5nIHRvCi0gICB0aGUgc2FtZSBSVFAgc2Vzc2lvbiwgYnV0IGl0IGlzIFJFQ09NTUVOREVEIHRoYXQgZWFjaCBTU1JDIGhhdmUgaXRzCi0gICBvd24gbWFzdGVyIGtleS4gIFdoZW4gbWFzdGVyIGtleXMgYXJlIHNoYXJlZCBhbW9uZyBTU1JDIHBhcnRpY2lwYW50cwotICAgYW5kIFNTUkNzIGFyZSBtYW5hZ2VkIGJ5IGEga2V5IG1hbmFnZW1lbnQgbW9kdWxlIGFzIHJlY29tbWVuZGVkCi0gICBhYm92ZSwgdGhlIFJFQ09NTUVOREVEIHBvbGljeSBmb3IgYW4gU1NSQyBjb2xsaXNpb24gZXJyb3IgaXMgZm9yIHRoZQotICAgcGFydGljaXBhbnQgdG8gbGVhdmUgdGhlIFNSVFAgc2Vzc2lvbiBhcyBpdCBpcyBhIHNpZ24gb2YgbWFsZnVuY3Rpb24uCi0KLQotCi0KLUJhdWdoZXIsIGV0IGFsLiAgICAgICAgICAgICBTdGFuZGFyZHMgVHJhY2sgICAgICAgICAgICAgICAgICAgIFtQYWdlIDM3XQotDAotUkZDIDM3MTEgICAgICAgICAgICAgICAgICAgICAgICAgIFNSVFAgICAgICAgICAgICAgICAgICAgICAgICBNYXJjaCAyMDA0Ci0KLQotOS4yLiAgS2V5IFVzYWdlCi0KLSAgIFRoZSBlZmZlY3RpdmUga2V5IHNpemUgaXMgZGV0ZXJtaW5lZCAodXBwZXIgYm91bmRlZCkgYnkgdGhlIHNpemUgb2YKLSAgIHRoZSBtYXN0ZXIga2V5IGFuZCwgZm9yIGVuY3J5cHRpb24sIHRoZSBzaXplIG9mIHRoZSBzYWx0aW5nIGtleS4gIEFueQotICAgYWRkaXRpdmUgc3RyZWFtIGNpcGhlciBpcyB2dWxuZXJhYmxlIHRvIGF0dGFja3MgdGhhdCB1c2Ugc3RhdGlzdGljYWwKLSAgIGtub3dsZWRnZSBhYm91dCB0aGUgcGxhaW50ZXh0IHNvdXJjZSB0byBlbmFibGUga2V5IGNvbGxpc2lvbiBhbmQKLSAgIHRpbWUtbWVtb3J5IHRyYWRlb2ZmIGF0dGFja3MgW01GMDBdIFtIODBdIFtCUzAwXS4gIFRoZXNlIGF0dGFja3MgdGFrZQotICAgYWR2YW50YWdlIG9mIGNvbW1vbmFsaXRpZXMgYW1vbmcgcGxhaW50ZXh0cywgYW5kIHByb3ZpZGUgYSB3YXkgZm9yIGEKLSAgIGNyeXB0YW5hbHlzdCB0byBhbW9ydGl6ZSB0aGUgY29tcHV0YXRpb25hbCBlZmZvcnQgb2YgZGVjcnlwdGlvbiBvdmVyCi0gICBtYW55IGtleXMsIG9yIG92ZXIgbWFueSBieXRlcyBvZiBvdXRwdXQsIHRodXMgcmVkdWNpbmcgdGhlIGVmZmVjdGl2ZQotICAga2V5IHNpemUgb2YgdGhlIGNpcGhlci4gIEEgZGV0YWlsZWQgYW5hbHlzaXMgb2YgdGhlc2UgYXR0YWNrcyBhbmQKLSAgIHRoZWlyIGFwcGxpY2FiaWxpdHkgdG8gdGhlIGVuY3J5cHRpb24gb2YgSW50ZXJuZXQgdHJhZmZpYyBpcyBwcm92aWRlZAotICAgaW4gW01GMDBdLiAgSW4gc3VtbWFyeSwgdGhlIGVmZmVjdGl2ZSBrZXkgc2l6ZSBvZiBTUlRQIHdoZW4gdXNlZCBpbiBhCi0gICBzZWN1cml0eSBzeXN0ZW0gaW4gd2hpY2ggbSBkaXN0aW5jdCBrZXlzIGFyZSB1c2VkLCBpcyBlcXVhbCB0byB0aGUKLSAgIGtleSBzaXplIG9mIHRoZSBjaXBoZXIgbGVzcyB0aGUgbG9nYXJpdGhtIChiYXNlIHR3bykgb2YgbS4KLSAgIFByb3RlY3Rpb24gYWdhaW5zdCBzdWNoIGF0dGFja3MgY2FuIGJlIHByb3ZpZGVkIHNpbXBseSBieSBpbmNyZWFzaW5nCi0gICB0aGUgc2l6ZSBvZiB0aGUga2V5cyB1c2VkLCB3aGljaCBoZXJlIGNhbiBiZSBhY2NvbXBsaXNoZWQgYnkgdGhlIHVzZQotICAgb2YgdGhlIHNhbHRpbmcga2V5LiAgTm90ZSB0aGF0IHRoZSBzYWx0aW5nIGtleSBNVVNUIGJlIHJhbmRvbSBidXQgTUFZCi0gICBiZSBwdWJsaWMuICBBIHNhbHQgc2l6ZSBvZiAodGhlIHN1Z2dlc3RlZCkgc2l6ZSAxMTIgYml0cyBwcm90ZWN0cwotICAgYWdhaW5zdCBhdHRhY2tzIGluIHNjZW5hcmlvcyB3aGVyZSBhdCBtb3N0IDJeMTEyIGtleXMgYXJlIGluIHVzZS4KLSAgIFRoaXMgaXMgc3VmZmljaWVudCBmb3IgYWxsIHByYWN0aWNhbCBwdXJwb3Nlcy4KLQotICAgSW1wbGVtZW50YXRpb25zIFNIT1VMRCB1c2Uga2V5cyB0aGF0IGFyZSBhcyBsYXJnZSBhcyBwb3NzaWJsZS4KLSAgIFBsZWFzZSBub3RlIHRoYXQgaW4gbWFueSBjYXNlcyBpbmNyZWFzaW5nIHRoZSBrZXkgc2l6ZSBvZiBhIGNpcGhlcgotICAgZG9lcyBub3QgYWZmZWN0IHRoZSB0aHJvdWdocHV0IG9mIHRoYXQgY2lwaGVyLgotCi0gICBUaGUgdXNlIG9mIHRoZSBTUlRQIGFuZCBTUlRDUCBpbmRpY2VzIGluIHRoZSBwcmUtZGVmaW5lZCB0cmFuc2Zvcm1zCi0gICBmaXhlcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyB0aGF0IGNhbiBiZSBzZWN1cmVkIHdpdGggdGhlIHNhbWUKLSAgIGtleS4gIFRoaXMgbGltaXQgaXMgZml4ZWQgdG8gMl40OCBTUlRQIHBhY2tldHMgZm9yIGFuIFNSVFAgc3RyZWFtLAotICAgYW5kIDJeMzEgU1JUQ1AgcGFja2V0cywgd2hlbiBTUlRQIGFuZCBTUlRDUCBhcmUgY29uc2lkZXJlZAotICAgaW5kZXBlbmRlbnRseS4gIER1ZSB0byBmb3IgZXhhbXBsZSByZS1rZXlpbmcsIHJlYWNoaW5nIHRoaXMgbGltaXQgbWF5Ci0gICBvciBtYXkgbm90IGNvaW5jaWRlIHdpdGggd3JhcHBpbmcgb2YgdGhlIGluZGljZXMsIGFuZCB0aHVzIHRoZSBzZW5kZXIKLSAgIE1VU1Qga2VlcCBwYWNrZXQgY291bnRzLiAgSG93ZXZlciwgd2hlbiB0aGUgc2Vzc2lvbiBrZXlzIGZvciByZWxhdGVkCi0gICBTUlRQIGFuZCBTUlRDUCBzdHJlYW1zIGFyZSBkZXJpdmVkIGZyb20gdGhlIHNhbWUgbWFzdGVyIGtleSAodGhlCi0gICBkZWZhdWx0IGJlaGF2aW9yLCBTZWN0aW9uIDQuMyksIHRoZSB1cHBlciBib3VuZCB0aGF0IGhhcyB0byBiZQotICAgY29uc2lkZXJlZCBpcyBpbiBwcmFjdGljZSB0aGUgbWluaW11bSBvZiB0aGUgdHdvIHF1YW50aXRpZXMuICBUaGF0Ci0gICBpcywgd2hlbiAyXjQ4IFNSVFAgcGFja2V0cyBvciAyXjMxIFNSVENQIHBhY2tldHMgaGF2ZSBiZWVuIHNlY3VyZWQKLSAgIHdpdGggdGhlIHNhbWUga2V5ICh3aGljaGV2ZXIgb2NjdXJzIGJlZm9yZSksIHRoZSBrZXkgbWFuYWdlbWVudCBNVVNUCi0gICBiZSBjYWxsZWQgdG8gcHJvdmlkZSBuZXcgbWFzdGVyIGtleShzKSAocHJldmlvdXNseSBzdG9yZWQgYW5kIHVzZWQKLSAgIGtleXMgTVVTVCBOT1QgYmUgdXNlZCBhZ2FpbiksIG9yIHRoZSBzZXNzaW9uIE1VU1QgYmUgdGVybWluYXRlZC4gIElmCi0gICBhIHNlbmRlciBvZiBSVENQIGRpc2NvdmVycyB0aGF0IHRoZSBzZW5kZXIgb2YgU1JUUCAob3IgU1JUQ1ApIGhhcyBub3QKLSAgIHVwZGF0ZWQgdGhlIG1hc3RlciBvciBzZXNzaW9uIGtleSBwcmlvciB0byBzZW5kaW5nIDJeNDggU1JUUCAob3IgMl4zMQotICAgU1JUQ1ApIHBhY2tldHMgYmVsb25naW5nIHRvIHRoZSBzYW1lIFNSVFAgKFNSVENQKSBzdHJlYW0sIGl0IGlzIHVwIHRvCi0gICB0aGUgc2VjdXJpdHkgcG9saWN5IG9mIHRoZSBSVENQIHNlbmRlciBob3cgdG8gYmVoYXZlLCBlLmcuLCB3aGV0aGVyCi0gICBhbiBSVENQIEJZRS1wYWNrZXQgc2hvdWxkIGJlIHNlbnQgYW5kL29yIGlmIHRoZSBldmVudCBzaG91bGQgYmUKLSAgIGxvZ2dlZC4KLQotCi0KLQotCi1CYXVnaGVyLCBldCBhbC4gICAgICAgICAgICAgU3RhbmRhcmRzIFRyYWNrICAgICAgICAgICAgICAgICAgICBbUGFnZSAzOF0KLQwKLVJGQyAzNzExICAgICAgICAgICAgICAgICAgICAgICAgICBTUlRQICAgICAgICAgICAgICAgICAgICAgICAgTWFyY2ggMjAwNAotCi0KLSAgIE5vdGU6IGluIG1vc3QgdHlwaWNhbCBhcHBsaWNhdGlvbnMgKGFzc3VtaW5nIGF0IGxlYXN0IG9uZSBSVENQIHBhY2tldAotICAgZm9yIGV2ZXJ5IDEyOCwwMDAgUlRQIHBhY2tldHMpLCBpdCB3aWxsIGJlIHRoZSBTUlRDUCBpbmRleCB0aGF0IGZpcnN0Ci0gICByZWFjaGVzIHRoZSB1cHBlciBsaW1pdCwgYWx0aG91Z2ggdGhlIHRpbWUgdW50aWwgdGhpcyBvY2N1cnMgaXMgdmVyeQotICAgbG9uZzogZXZlbiBhdCAyMDAgU1JUQ1AgcGFja2V0cy9zZWMsIHRoZSAyXjMxIGluZGV4IHNwYWNlIG9mIFNSVENQIGlzCi0gICBlbm91Z2ggdG8gc2VjdXJlIGFwcHJveGltYXRlbHkgNCBtb250aHMgb2YgY29tbXVuaWNhdGlvbi4KLQotICAgTm90ZSB0aGF0IGlmIHRoZSBtYXN0ZXIga2V5IGlzIHRvIGJlIHNoYXJlZCBiZXR3ZWVuIFNSVFAgc3RyZWFtcwotICAgd2l0aGluIHRoZSBzYW1lIFJUUCBzZXNzaW9uIChTZWN0aW9uIDkuMSksIGFsdGhvdWdoIHRoZSBhYm92ZSBib3VuZHMKLSAgIGFyZSBvbiBhIHBlciBzdHJlYW0gKGkuZS4sIHBlciBTU1JDKSBiYXNpcywgdGhlIHNlbmRlciBNVVNUIGJhc2UgcmUtCi0gICBrZXkgZGVjaXNpb24gb24gdGhlIHN0cmVhbSB3aG9zZSBzZXF1ZW5jZSBudW1iZXIgc3BhY2UgaXMgdGhlIGZpcnN0Ci0gICB0byBiZSBleGhhdXN0ZWQuCi0KLSAgIEtleSBkZXJpdmF0aW9uIGxpbWl0cyB0aGUgYW1vdW50IG9mIHBsYWludGV4dCB0aGF0IGlzIGVuY3J5cHRlZCB3aXRoCi0gICBhIGZpeGVkIHNlc3Npb24ga2V5LCBhbmQgbWFkZSBhdmFpbGFibGUgdG8gYW4gYXR0YWNrZXIgZm9yIGFuYWx5c2lzLAotICAgYnV0IGtleSBkZXJpdmF0aW9uIGRvZXMgbm90IGV4dGVuZCB0aGUgbWFzdGVyIGtleSdzIGxpZmV0aW1lLiAgVG8gc2VlCi0gICB0aGlzLCBzaW1wbHkgY29uc2lkZXIgb3VyIHJlcXVpcmVtZW50cyB0byBhdm9pZCB0d28tdGltZSBwYWQ6ICB0d28KLSAgIGRpc3RpbmN0IHBhY2tldHMgTVVTVCBlaXRoZXIgYmUgcHJvY2Vzc2VkIHdpdGggZGlzdGluY3QgSVZzLCBvciB3aXRoCi0gICBkaXN0aW5jdCBzZXNzaW9uIGtleXMsIGFuZCBib3RoIHRoZSBkaXN0aW5jdG5lc3Mgb2YgSVYgYW5kIG9mIHRoZQotICAgc2Vzc2lvbiBrZXlzIGFyZSAoZm9yIHRoZSBwcmUtZGVmaW5lZCB0cmFuc2Zvcm1zKSBkZXBlbmRlbnQgb24gdGhlCi0gICBkaXN0aW5jdG5lc3Mgb2YgdGhlIHBhY2tldCBpbmRpY2VzLgotCi0gICBOb3RlIHRoYXQgd2l0aCB0aGUga2V5IGRlcml2YXRpb24sIHRoZSBlZmZlY3RpdmUga2V5IHNpemUgaXMgYXQgbW9zdAotICAgdGhhdCBvZiB0aGUgbWFzdGVyIGtleSwgZXZlbiBpZiB0aGUgZGVyaXZlZCBzZXNzaW9uIGtleSBpcwotICAgY29uc2lkZXJhYmx5IGxvbmdlci4gIFdpdGggdGhlIHByZS1kZWZpbmVkIGF1dGhlbnRpY2F0aW9uIHRyYW5zZm9ybSwKLSAgIHRoZSBzZXNzaW9uIGF1dGhlbnRpY2F0aW9uIGtleSBpcyAxNjAgYml0cywgYnV0IHRoZSBtYXN0ZXIga2V5IGJ5Ci0gICBkZWZhdWx0IGlzIG9ubHkgMTI4IGJpdHMuICBUaGlzIGRlc2lnbiBjaG9pY2Ugd2FzIG1hZGUgdG8gY29tcGx5IHdpdGgKLSAgIGNlcnRhaW4gcmVjb21tZW5kYXRpb25zIGluIFtSRkMyMTA0XSBzbyB0aGF0IGFuIGV4aXN0aW5nIEhNQUMKLSAgIGltcGxlbWVudGF0aW9uIGNhbiBiZSBwbHVnZ2VkIGludG8gU1JUUCB3aXRob3V0IHByb2JsZW1zLiAgU2luY2UgdGhlCi0gICBkZWZhdWx0IHRhZyBzaXplIGlzIDgwIGJpdHMsIGl0IGlzLCBmb3IgdGhlIGFwcGxpY2F0aW9ucyBpbiBtaW5kLAotICAgYWxzbyBjb25zaWRlcmVkIGFjY2VwdGFibGUgZnJvbSBzZWN1cml0eSBwb2ludCBvZiB2aWV3LiAgVXNlcnMgaGF2aW5nCi0gICBjb25jZXJucyBhYm91dCB0aGlzIGFyZSBSRUNPTU1FTkRFRCB0byBpbnN0ZWFkIHVzZSBhIDE5MiBiaXQgbWFzdGVyCi0gICBrZXkgaW4gdGhlIGtleSBkZXJpdmF0aW9uLiAgSXQgd2FzLCBob3dldmVyLCBjaG9zZW4gbm90IHRvIG1hbmRhdGUKLSAgIDE5Mi1iaXQga2V5cyBzaW5jZSBleGlzdGluZyBBRVMgaW1wbGVtZW50YXRpb25zIHRvIGJlIHVzZWQgaW4gdGhlCi0gICBrZXktZGVyaXZhdGlvbiBtYXkgbm90IGFsd2F5cyBzdXBwb3J0IGtleS1sZW5ndGhzIG90aGVyIHRoYW4gMTI4Ci0gICBiaXRzLiAgU2luY2UgQUVTIGlzIG5vdCBkZWZpbmVkIChvciBwcm9wZXJseSBhbmFseXplZCkgZm9yIHVzZSB3aXRoCi0gICAxNjAgYml0IGtleXMgaXQgaXMgTk9UIFJFQ09NTUVOREVEIHRoYXQgYWQtaG9jIGtleS1wYWRkaW5nIHNjaGVtZXMKLSAgIGFyZSB1c2VkIHRvIHBhZCBzaG9ydGVyIGtleXMgdG8gMTkyIG9yIDI1NiBiaXRzLgotCi05LjMuICBDb25maWRlbnRpYWxpdHkgb2YgdGhlIFJUUCBQYXlsb2FkCi0KLSAgIFNSVFAncyBwcmUtZGVmaW5lZCBjaXBoZXJzIGFyZSAic2Vla2FibGUiIHN0cmVhbSBjaXBoZXJzLCBpLmUuLAotICAgY2lwaGVycyBhYmxlIHRvIGVmZmljaWVudGx5IHNlZWsgdG8gYXJiaXRyYXJ5IGxvY2F0aW9ucyBpbiB0aGVpcgotICAga2V5c3RyZWFtIChzbyB0aGF0IHRoZSBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24gb2Ygb25lIHBhY2tldCBkb2VzCi0gICBub3QgZGVwZW5kIG9uIHByZWNlZGluZyBwYWNrZXRzKS4gIEJ5IHVzaW5nIHNlZWthYmxlIHN0cmVhbSBjaXBoZXJzLAotICAgU1JUUCBhdm9pZHMgdGhlIGRlbmlhbCBvZiBzZXJ2aWNlIGF0dGFja3MgdGhhdCBhcmUgcG9zc2libGUgb24gc3RyZWFtCi0gICBjaXBoZXJzIHRoYXQgbGFjayB0aGlzIHByb3BlcnR5LiAgSXQgaXMgaW1wb3J0YW50IHRvIGJlIGF3YXJlIHRoYXQsCi0gICBhcyB3aXRoIGFueSBzdHJlYW0gY2lwaGVyLCB0aGUgZXhhY3QgbGVuZ3RoIG9mIHRoZSBwYXlsb2FkIGlzCi0gICByZXZlYWxlZCBieSB0aGUgZW5jcnlwdGlvbi4gIFRoaXMgbWVhbnMgdGhhdCBpdCBtYXkgYmUgcG9zc2libGUgdG8KLQotCi0KLUJhdWdoZXIsIGV0IGFsLiAgICAgICAgICAgICBTdGFuZGFyZHMgVHJhY2sgICAgICAgICAgICAgICAgICAgIFtQYWdlIDM5XQotDAotUkZDIDM3MTEgICAgICAgICAgICAgICAgICAgICAgICAgIFNSVFAgICAgICAgICAgICAgICAgICAgICAgICBNYXJjaCAyMDA0Ci0KLQotICAgZGVkdWNlIGNlcnRhaW4gImZvcm1hdHRpbmcgYml0cyIgb2YgdGhlIHBheWxvYWQsIGFzIHRoZSBsZW5ndGggb2YgdGhlCi0gICBjb2RlYyBvdXRwdXQgbWlnaHQgdmFyeSBkdWUgdG8gY2VydGFpbiBwYXJhbWV0ZXIgc2V0dGluZ3MgZXRjLiAgVGhpcywKLSAgIGluIHR1cm4sIGltcGxpZXMgdGhhdCB0aGUgY29ycmVzcG9uZGluZyBiaXQgb2YgdGhlIGtleXN0cmVhbSBjYW4gYmUKLSAgIGRlZHVjZWQuICBIb3dldmVyLCBpZiB0aGUgc3RyZWFtIGNpcGhlciBpcyBzZWN1cmUgKGNvdW50ZXIgbW9kZSBhbmQKLSAgIGY4IGFyZSBwcm92YWJseSBzZWN1cmUgdW5kZXIgY2VydGFpbiBhc3N1bXB0aW9ucyBbQkRKUl0gW0tTWUhdIFtJS10pLAotICAga25vd2xlZGdlIG9mIGEgZmV3IGJpdHMgb2YgdGhlIGtleXN0cmVhbSB3aWxsIG5vdCBhaWQgYW4gYXR0YWNrZXIgaW4KLSAgIHByZWRpY3Rpbmcgc3Vic2VxdWVudCBrZXlzdHJlYW0gYml0cy4gIFRodXMsIHRoZSBwYXlsb2FkIGxlbmd0aCAoYW5kCi0gICBpbmZvcm1hdGlvbiBkZWR1Y2libGUgZnJvbSB0aGlzKSB3aWxsIGxlYWssIGJ1dCBub3RoaW5nIGVsc2UuCi0KLSAgIEFzIHNvbWUgUlRQIHBhY2tldCBjb3VsZCBjb250YWluIGhpZ2hseSBwcmVkaWN0YWJsZSBkYXRhLCBlLmcuLCBTSUQsCi0gICBpdCBpcyBpbXBvcnRhbnQgdG8gdXNlIGEgY2lwaGVyIGRlc2lnbmVkIHRvIHJlc2lzdCBrbm93biBwbGFpbnRleHQKLSAgIGF0dGFja3MgKHdoaWNoIGlzIHRoZSBjdXJyZW50IHByYWN0aWNlKS4KLQotOS40LiAgQ29uZmlkZW50aWFsaXR5IG9mIHRoZSBSVFAgSGVhZGVyCi0KLSAgIEluIFNSVFAsIFJUUCBoZWFkZXJzIGFyZSBzZW50IGluIHRoZSBjbGVhciB0byBhbGxvdyBmb3IgaGVhZGVyCi0gICBjb21wcmVzc2lvbi4gIFRoaXMgbWVhbnMgdGhhdCBkYXRhIHN1Y2ggYXMgcGF5bG9hZCB0eXBlLAotICAgc3luY2hyb25pemF0aW9uIHNvdXJjZSBpZGVudGlmaWVyLCBhbmQgdGltZXN0YW1wIGFyZSBhdmFpbGFibGUgdG8gYW4KLSAgIGVhdmVzZHJvcHBlci4gIE1vcmVvdmVyLCBzaW5jZSBSVFAgYWxsb3dzIGZvciBmdXR1cmUgZXh0ZW5zaW9ucyBvZgotICAgaGVhZGVycywgd2UgY2Fubm90IGZvcmVzZWUgd2hhdCBraW5kIG9mIHBvc3NpYmx5IHNlbnNpdGl2ZQotICAgaW5mb3JtYXRpb24gbWlnaHQgYWxzbyBiZSAibGVha2VkIi4KLQotICAgU1JUUCBpcyBhIGxvdy1jb3N0IG1ldGhvZCwgd2hpY2ggYWxsb3dzIGhlYWRlciBjb21wcmVzc2lvbiB0byByZWR1Y2UKLSAgIGJhbmR3aWR0aC4gIEl0IGlzIHVwIHRvIHRoZSBlbmRwb2ludHMnIHBvbGljaWVzIHRvIGRlY2lkZSBhYm91dCB0aGUKLSAgIHNlY3VyaXR5IHByb3RvY29sIHRvIGVtcGxveS4gIElmIG9uZSByZWFsbHkgbmVlZHMgdG8gcHJvdGVjdCBoZWFkZXJzLAotICAgYW5kIGlzIGFsbG93ZWQgdG8gZG8gc28gYnkgdGhlIHN1cnJvdW5kaW5nIGVudmlyb25tZW50LCB0aGVuIG9uZQotICAgc2hvdWxkIGFsc28gbG9vayBhdCBhbHRlcm5hdGl2ZXMsIGUuZy4sIElQc2VjIFtSRkMyNDAxXS4KLQotOS41LiAgSW50ZWdyaXR5IG9mIHRoZSBSVFAgcGF5bG9hZCBhbmQgaGVhZGVyCi0KLSAgIFNSVFAgbWVzc2FnZXMgYXJlIHN1YmplY3QgdG8gYXR0YWNrcyBvbiB0aGVpciBpbnRlZ3JpdHkgYW5kIHNvdXJjZQotICAgaWRlbnRpZmljYXRpb24sIGFuZCB0aGVzZSByaXNrcyBhcmUgZGlzY3Vzc2VkIGluIFNlY3Rpb24gOS41LjEuICBUbwotICAgcHJvdGVjdCBhZ2FpbnN0IHRoZXNlIGF0dGFja3MsIGVhY2ggU1JUUCBzdHJlYW0gU0hPVUxEIGJlIHByb3RlY3RlZAotICAgYnkgSE1BQy1TSEExIFtSRkMyMTA0XSB3aXRoIGFuIDgwLWJpdCBvdXRwdXQgdGFnIGFuZCBhIDE2MC1iaXQga2V5LAotICAgb3IgYSBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGNvZGUgd2l0aCBlcXVpdmFsZW50IHN0cmVuZ3RoLiAgU2VjdXJlCi0gICBSVFAgU0hPVUxEIE5PVCBiZSB1c2VkIHdpdGhvdXQgbWVzc2FnZSBhdXRoZW50aWNhdGlvbiwgZXhjZXB0IHVuZGVyCi0gICB0aGUgY2lyY3Vtc3RhbmNlcyBkZXNjcmliZWQgaW4gdGhpcyBzZWN0aW9uLiAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUKLSAgIHRoYXQgZW5jcnlwdGlvbiBhbGdvcml0aG1zLCBpbmNsdWRpbmcgQUVTIENvdW50ZXIgTW9kZSBhbmQgZjgsIGRvIG5vdAotICAgcHJvdmlkZSBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uLiAgU1JUQ1AgTVVTVCBOT1QgYmUgdXNlZCB3aXRoIHdlYWsgKG9yCi0gICBOVUxMKSBhdXRoZW50aWNhdGlvbi4KLQotICAgU1JUUCBNQVkgYmUgdXNlZCB3aXRoIHdlYWsgYXV0aGVudGljYXRpb24gKGUuZy4sIGEgMzItYml0Ci0gICBhdXRoZW50aWNhdGlvbiB0YWcpLCBvciB3aXRoIG5vIGF1dGhlbnRpY2F0aW9uICh0aGUgTlVMTAotICAgYXV0aGVudGljYXRpb24gYWxnb3JpdGhtKS4gIFRoZXNlIG9wdGlvbnMgYWxsb3cgU1JUUCB0byBiZSB1c2VkIHRvCi0gICBwcm92aWRlIGNvbmZpZGVudGlhbGl0eSBpbiBzaXR1YXRpb25zIHdoZXJlCi0KLSAgICAqIHdlYWsgb3IgbnVsbCBhdXRoZW50aWNhdGlvbiBpcyBhbiBhY2NlcHRhYmxlIHNlY3VyaXR5IHJpc2ssIGFuZAotICAgICogaXQgaXMgaW1wcmFjdGljYWwgdG8gcHJvdmlkZSBzdHJvbmcgbWVzc2FnZSBhdXRoZW50aWNhdGlvbi4KLQotCi0KLUJhdWdoZXIsIGV0IGFsLiAgICAgICAgICAgICBTdGFuZGFyZHMgVHJhY2sgICAgICAgICAgICAgICAgICAgIFtQYWdlIDQwXQotDAotUkZDIDM3MTEgICAgICAgICAgICAgICAgICAgICAgICAgIFNSVFAgICAgICAgICAgICAgICAgICAgICAgICBNYXJjaCAyMDA0Ci0KLQotICAgVGhlc2UgY29uZGl0aW9ucyBhcmUgZGVzY3JpYmVkIGJlbG93IGFuZCBpbiBTZWN0aW9uIDcuNS4gIE5vdGUgdGhhdAotICAgYm90aCBjb25kaXRpb25zIE1VU1QgaG9sZCBpbiBvcmRlciBmb3Igd2VhayBvciBudWxsIGF1dGhlbnRpY2F0aW9uIHRvCi0gICBiZSB1c2VkLiAgVGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBleGVyY2lzaW5nIHRoZSB3ZWFrIG9yIG51bGwKLSAgIGF1dGhlbnRpY2F0aW9uIG9wdGlvbnMgbmVlZCB0byBiZSBjb25zaWRlcmVkIGJ5IGEgc2VjdXJpdHkgYXVkaXQKLSAgIHByaW9yIHRvIHRoZWlyIHVzZSBmb3IgYSBwYXJ0aWN1bGFyIGFwcGxpY2F0aW9uIG9yIGVudmlyb25tZW50IGdpdmVuCi0gICB0aGUgcmlza3MsIHdoaWNoIGFyZSBkaXNjdXNzZWQgaW4gU2VjdGlvbiA5LjUuMS4KLQotICAgV2VhayBhdXRoZW50aWNhdGlvbiBpcyBhY2NlcHRhYmxlIHdoZW4gdGhlIFJUUCBhcHBsaWNhdGlvbiBpcyBzdWNoCi0gICB0aGF0IHRoZSBlZmZlY3Qgb2YgYSBzbWFsbCBmcmFjdGlvbiBvZiBzdWNjZXNzZnVsIGZvcmdlcmllcyBpcwotICAgbmVnbGlnaWJsZS4gIElmIHRoZSBhcHBsaWNhdGlvbiBpcyBzdGF0ZWxlc3MsIHRoZW4gdGhlIGVmZmVjdCBvZiBhCi0gICBzaW5nbGUgZm9yZ2VkIFJUUCBwYWNrZXQgaXMgbGltaXRlZCB0byB0aGUgZGVjb2Rpbmcgb2YgdGhhdAotICAgcGFydGljdWxhciBwYWNrZXQuICBVbmRlciB0aGlzIGNvbmRpdGlvbiwgdGhlIHNpemUgb2YgdGhlCi0gICBhdXRoZW50aWNhdGlvbiB0YWcgTVVTVCBlbnN1cmUgdGhhdCBvbmx5IGEgbmVnbGlnaWJsZSBmcmFjdGlvbiBvZiB0aGUKLSAgIHBhY2tldHMgcGFzc2VkIHRvIHRoZSBSVFAgYXBwbGljYXRpb24gYnkgdGhlIFNSVFAgcmVjZWl2ZXIgY2FuIGJlCi0gICBmb3JnZXJpZXMuICBUaGlzIGZyYWN0aW9uIGlzIG5lZ2xpZ2libGUgd2hlbiBhbiBhZHZlcnNhcnksIGlmIGdpdmVuCi0gICBjb250cm9sIG9mIHRoZSBmb3JnZWQgcGFja2V0cywgaXMgbm90IGFibGUgdG8gbWFrZSBhIHNpZ25pZmljYW50Ci0gICBpbXBhY3Qgb24gdGhlIG91dHB1dCBvZiB0aGUgUlRQIGFwcGxpY2F0aW9uIChzZWUgdGhlIGV4YW1wbGUgb2YKLSAgIFNlY3Rpb24gNy41KS4KLQotICAgV2VhayBvciBudWxsIGF1dGhlbnRpY2F0aW9uIE1BWSBiZSBhY2NlcHRhYmxlIHdoZW4gaXQgaXMgdW5saWtlbHkKLSAgIHRoYXQgYW4gYWR2ZXJzYXJ5IGNhbiBtb2RpZnkgY2lwaGVydGV4dCBzbyB0aGF0IGl0IGRlY3J5cHRzIHRvIGFuCi0gICBpbnRlbGxpZ2libGUgdmFsdWUuICBPbmUgaW1wb3J0YW50IGNhc2UgaXMgd2hlbiBpdCBpcyBkaWZmaWN1bHQgZm9yCi0gICBhbiBhZHZlcnNhcnkgdG8gYWNxdWlyZSB0aGUgUlRQIHBsYWludGV4dCBkYXRhLCBzaW5jZSBmb3IgbWFueQotICAgY29kZWNzLCBhbiBhZHZlcnNhcnkgdGhhdCBkb2VzIG5vdCBrbm93IHRoZSBpbnB1dCBzaWduYWwgY2Fubm90Ci0gICBtYW5pcHVsYXRlIHRoZSBvdXRwdXQgc2lnbmFsIGluIGEgY29udHJvbGxlZCB3YXkuICBJbiBtYW55IGNhc2VzIGl0Ci0gICBtYXkgYmUgZGlmZmljdWx0IGZvciB0aGUgYWR2ZXJzYXJ5IHRvIGRldGVybWluZSB0aGUgYWN0dWFsIHZhbHVlIG9mCi0gICB0aGUgcGxhaW50ZXh0LiAgRm9yIGV4YW1wbGUsIGEgaGlkZGVuIHNub29waW5nIGRldmljZSBtaWdodCBiZQotICAgcmVxdWlyZWQgaW4gb3JkZXIgdG8ga25vdyBhIGxpdmUgYXVkaW8gb3IgdmlkZW8gc2lnbmFsLiAgVGhlCi0gICBhZHZlcnNhcnkncyBzaWduYWwgbXVzdCBoYXZlIGEgcXVhbGl0eSBlcXVpdmFsZW50IHRvIG9yIGdyZWF0ZXIgdGhhbgotICAgdGhhdCBvZiB0aGUgc2lnbmFsIHVuZGVyIGF0dGFjaywgc2luY2Ugb3RoZXJ3aXNlIHRoZSBhZHZlcnNhcnkgd291bGQKLSAgIG5vdCBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiB0byBlbmNvZGUgdGhhdCBzaWduYWwgd2l0aCB0aGUgY29kZWMgdXNlZAotICAgYnkgdGhlIHZpY3RpbS4gIFBsYWludGV4dCBwcmVkaWN0aW9uIG1heSBhbHNvIGJlIGVzcGVjaWFsbHkgZGlmZmljdWx0Ci0gICBmb3IgYW4gaW50ZXJhY3RpdmUgYXBwbGljYXRpb24gc3VjaCBhcyBhIHRlbGVwaG9uZSBjYWxsLgotCi0gICBXZWFrIG9yIG51bGwgYXV0aGVudGljYXRpb24gTVVTVCBOT1QgYmUgdXNlZCB3aGVuIHRoZSBSVFAgYXBwbGljYXRpb24KLSAgIG1ha2VzIGRhdGEgZm9yd2FyZGluZyBvciBhY2Nlc3MgY29udHJvbCBkZWNpc2lvbnMgYmFzZWQgb24gdGhlIFJUUAotICAgZGF0YS4gIEluIHN1Y2ggYSBjYXNlLCBhbiBhdHRhY2tlciBtYXkgYmUgYWJsZSB0byBzdWJ2ZXJ0Ci0gICBjb25maWRlbnRpYWxpdHkgYnkgY2F1c2luZyB0aGUgcmVjZWl2ZXIgdG8gZm9yd2FyZCBkYXRhIHRvIGFuCi0gICBhdHRhY2tlci4gIFNlZSBTZWN0aW9uIDMgb2YgW0I5Nl0gZm9yIGEgcmVhbC1saWZlIGV4YW1wbGUgb2Ygc3VjaAotICAgYXR0YWNrcy4KLQotICAgTnVsbCBhdXRoZW50aWNhdGlvbiBNVVNUIE5PVCBiZSB1c2VkIHdoZW4gYSByZXBsYXkgYXR0YWNrLCBpbiB3aGljaAotICAgYW4gYWR2ZXJzYXJ5IHN0b3JlcyBwYWNrZXRzIHRoZW4gcmVwbGF5cyB0aGVtIGxhdGVyIGluIHRoZSBzZXNzaW9uLAotICAgY291bGQgaGF2ZSBhIG5vbi1uZWdsaWdpYmxlIGltcGFjdCBvbiB0aGUgcmVjZWl2ZXIuICBBbiBleGFtcGxlIG9mIGEKLSAgIHN1Y2Nlc3NmdWwgcmVwbGF5IGF0dGFjayBpcyB0aGUgc3RvcmluZyBvZiB0aGUgb3V0cHV0IG9mIGEKLSAgIHN1cnZlaWxsYW5jZSBjYW1lcmEgZm9yIGEgcGVyaW9kIG9mIHRpbWUsIGxhdGVyIGZvbGxvd2VkIGJ5IHRoZQotCi0KLQotCi0KLUJhdWdoZXIsIGV0IGFsLiAgICAgICAgICAgICBTdGFuZGFyZHMgVHJhY2sgICAgICAgICAgICAgICAgICAgIFtQYWdlIDQxXQotDAotUkZDIDM3MTEgICAgICAgICAgICAgICAgICAgICAgICAgIFNSVFAgICAgICAgICAgICAgICAgICAgICAgICBNYXJjaCAyMDA0Ci0KLQotICAgaW5qZWN0aW9uIG9mIHRoYXQgb3V0cHV0IHRvIHRoZSBtb25pdG9yaW5nIHN0YXRpb24gdG8gYXZvaWQKLSAgIHN1cnZlaWxsYW5jZS4gIEVuY3J5cHRpb24gZG9lcyBub3QgcHJvdGVjdCBhZ2FpbnN0IHRoaXMgYXR0YWNrLCBhbmQKLSAgIG5vbi1udWxsIGF1dGhlbnRpY2F0aW9uIGlzIFJFUVVJUkVEIGluIG9yZGVyIHRvIGRlZmVhdCBpdC4KLQotICAgSWYgZXhpc3RlbnRpYWwgbWVzc2FnZSBmb3JnZXJ5IGlzIGFuIGlzc3VlLCBpLmUuLCB3aGVuIHRoZSBhY2N1cmFjeQotICAgb2YgdGhlIHJlY2VpdmVkIGRhdGEgaXMgb2Ygbm9uLW5lZ2xpZ2libGUgaW1wb3J0YW5jZSwgbnVsbAotICAgYXV0aGVudGljYXRpb24gTVVTVCBOT1QgYmUgdXNlZC4KLQotOS41LjEuICBSaXNrcyBvZiBXZWFrIG9yIE51bGwgTWVzc2FnZSBBdXRoZW50aWNhdGlvbgotCi0gICBEdXJpbmcgYSBzZWN1cml0eSBhdWRpdCBjb25zaWRlcmluZyB0aGUgdXNlIG9mIHdlYWsgb3IgbnVsbAotICAgYXV0aGVudGljYXRpb24sIGl0IGlzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQgdGhlIGZvbGxvd2luZyBhdHRhY2tzCi0gICB3aGljaCBhcmUgcG9zc2libGUgd2hlbiBubyBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobSBpcyB1c2VkLgotCi0gICBBbiBhdHRhY2tlciB3aG8gY2Fubm90IHByZWRpY3QgdGhlIHBsYWludGV4dCBpcyBzdGlsbCBhbHdheXMgYWJsZSB0bwotICAgbW9kaWZ5IHRoZSBtZXNzYWdlIHNlbnQgYmV0d2VlbiB0aGUgc2VuZGVyIGFuZCB0aGUgcmVjZWl2ZXIgc28gdGhhdAotICAgaXQgZGVjcnlwdHMgdG8gYSByYW5kb20gcGxhaW50ZXh0IHZhbHVlLCBvciB0byBzZW5kIGEgc3RyZWFtIG9mIGJvZ3VzCi0gICBwYWNrZXRzIHRvIHRoZSByZWNlaXZlciB0aGF0IHdpbGwgZGVjcnlwdCB0byByYW5kb20gcGxhaW50ZXh0IHZhbHVlcy4KLSAgIFRoaXMgYXR0YWNrIGlzIGVzc2VudGlhbGx5IGEgZGVuaWFsIG9mIHNlcnZpY2UgYXR0YWNrLCB0aG91Z2ggaW4gdGhlCi0gICBhYnNlbmNlIG9mIG1lc3NhZ2UgYXV0aGVudGljYXRpb24sIHRoZSBSVFAgYXBwbGljYXRpb24gd2lsbCBoYXZlCi0gICBpbnB1dHMgdGhhdCBhcmUgYml0LXdpc2UgY29ycmVsYXRlZCB3aXRoIHRoZSB0cnVlIHZhbHVlLiAgU29tZQotICAgbXVsdGltZWRpYSBjb2RlY3MgYW5kIGNvbW1vbiBvcGVyYXRpbmcgc3lzdGVtcyB3aWxsIGNyYXNoIHdoZW4gc3VjaAotICAgZGF0YSBhcmUgYWNjZXB0ZWQgYXMgdmFsaWQgdmlkZW8gZGF0YS4gIFRoaXMgZGVuaWFsIG9mIHNlcnZpY2UgYXR0YWNrCi0gICBtYXkgYmUgYSBtdWNoIGxhcmdlciB0aHJlYXQgdGhhbiB0aGF0IGR1ZSB0byBhbiBhdHRhY2tlciBkcm9wcGluZywKLSAgIGRlbGF5aW5nLCBvciByZS1vcmRlcmluZyBwYWNrZXRzLgotCi0gICBBbiBhdHRhY2tlciB3aG8gY2Fubm90IHByZWRpY3QgdGhlIHBsYWludGV4dCBjYW4gc3RpbGwgcmVwbGF5IGEKLSAgIHByZXZpb3VzIG1lc3NhZ2Ugd2l0aCBjZXJ0YWludHkgdGhhdCB0aGUgcmVjZWl2ZXIgd2lsbCBhY2NlcHQgaXQuCi0gICBBcHBsaWNhdGlvbnMgd2l0aCBzdGF0ZWxlc3MgY29kZWNzIG1pZ2h0IGJlIHJvYnVzdCBhZ2FpbnN0IHRoaXMgdHlwZQotICAgb2YgYXR0YWNrLCBidXQgZm9yIG90aGVyLCBtb3JlIGNvbXBsZXggYXBwbGljYXRpb25zIHRoZXNlIGF0dGFja3MgbWF5Ci0gICBiZSBmYXIgbW9yZSBncmF2ZS4KLQotICAgQW4gYXR0YWNrZXIgd2hvIGNhbiBwcmVkaWN0IHRoZSBwbGFpbnRleHQgY2FuIG1vZGlmeSB0aGUgY2lwaGVydGV4dAotICAgc28gdGhhdCBpdCB3aWxsIGRlY3J5cHQgdG8gYW55IHZhbHVlIG9mIGhlciBjaG9vc2luZy4gIFdpdGggYW4KLSAgIGFkZGl0aXZlIHN0cmVhbSBjaXBoZXIsIGFuIGF0dGFja2VyIHdpbGwgYWx3YXlzIGJlIGFibGUgdG8gY2hhbmdlCi0gICBpbmRpdmlkdWFsIGJpdHMuCi0KLSAgIEFuIGF0dGFja2VyIG1heSBiZSBhYmxlIHRvIHN1YnZlcnQgY29uZmlkZW50aWFsaXR5IGR1ZSB0byB0aGUgbGFjayBvZgotICAgYXV0aGVudGljYXRpb24gd2hlbiBhIGRhdGEgZm9yd2FyZGluZyBvciBhY2Nlc3MgY29udHJvbCBkZWNpc2lvbiBpcwotICAgbWFkZSBvbiBkZWNyeXB0ZWQgYnV0IHVuYXV0aGVudGljYXRlZCBwbGFpbnRleHQuICBUaGlzIGlzIGJlY2F1c2UgdGhlCi0gICByZWNlaXZlciBtYXkgYmUgZm9vbGVkIGludG8gZm9yd2FyZGluZyBkYXRhIHRvIGFuIGF0dGFja2VyLCBsZWFkaW5nCi0gICB0byBhbiBpbmRpcmVjdCBicmVhY2ggb2YgY29uZmlkZW50aWFsaXR5IChzZWUgU2VjdGlvbiAzIG9mIFtCOTZdKS4KLSAgIFRoaXMgaXMgYmVjYXVzZSBkYXRhLWZvcndhcmRpbmcgZGVjaXNpb25zIGFyZSBtYWRlIG9uIHRoZSBkZWNyeXB0ZWQKLSAgIHBsYWludGV4dDsgaW5mb3JtYXRpb24gaW4gdGhlIHBsYWludGV4dCB3aWxsIGRldGVybWluZSB0byB3aGF0IHN1Ym5ldAotICAgKG9yIHByb2Nlc3MpIHRoZSBwbGFpbnRleHQgaXMgZm9yd2FyZGVkIGluIEVTUCBbUkZDMjQwMV0gdHVubmVsIG1vZGUKLSAgIChyZXNwZWN0aXZlbHksIHRyYW5zcG9ydCBtb2RlKS4gIFdoZW4gU2VjdXJlIFJUUCBpcyB1c2VkIHdpdGhvdXQKLQotCi0KLQotCi1CYXVnaGVyLCBldCBhbC4gICAgICAgICAgICAgU3RhbmRhcmRzIFRyYWNrICAgICAgICAgICAgICAgICAgICBbUGFnZSA0Ml0KLQwKLVJGQyAzNzExICAgICAgICAgICAgICAgICAgICAgICAgICBTUlRQICAgICAgICAgICAgICAgICAgICAgICAgTWFyY2ggMjAwNAotCi0KLSAgIG1lc3NhZ2UgYXV0aGVudGljYXRpb24sIGl0IHNob3VsZCBiZSB2ZXJpZmllZCB0aGF0IHRoZSBhcHBsaWNhdGlvbgotICAgZG9lcyBub3QgbWFrZSBkYXRhIGZvcndhcmRpbmcgb3IgYWNjZXNzIGNvbnRyb2wgZGVjaXNpb25zIGJhc2VkIG9uCi0gICB0aGUgZGVjcnlwdGVkIHBsYWludGV4dC4KLQotICAgU29tZSBjaXBoZXIgbW9kZXMgb2Ygb3BlcmF0aW9uIHRoYXQgcmVxdWlyZSBwYWRkaW5nLCBlLmcuLCBzdGFuZGFyZAotICAgY2lwaGVyIGJsb2NrIGNoYWluaW5nIChDQkMpIGFyZSB2ZXJ5IHNlbnNpdGl2ZSB0byBhdHRhY2tzIG9uCi0gICBjb25maWRlbnRpYWxpdHkgaWYgY2VydGFpbiBwYWRkaW5nIHR5cGVzIGFyZSB1c2VkIGluIHRoZSBhYnNlbmNlIG9mCi0gICBpbnRlZ3JpdHkuICBUaGUgYXR0YWNrIFtWMDJdIHNob3dzIHRoYXQgdGhpcyBpcyBpbmRlZWQgdGhlIGNhc2UgZm9yCi0gICB0aGUgc3RhbmRhcmQgUlRQIHBhZGRpbmcgYXMgZGlzY3Vzc2VkIGluIHJlZmVyZW5jZSB0byBGaWd1cmUgMSwgd2hlbgotICAgdXNlZCB0b2dldGhlciB3aXRoIENCQyBtb2RlLiAgTGF0ZXIgdHJhbnNmb3JtIGFkZGl0aW9ucyB0byBTUlRQIE1VU1QKLSAgIHRoZXJlZm9yZSBjYXJlZnVsbHkgY29uc2lkZXIgdGhlIHJpc2sgb2YgdXNpbmcgdGhpcyBwYWRkaW5nIHdpdGhvdXQKLSAgIHByb3BlciBpbnRlZ3JpdHkgcHJvdGVjdGlvbi4KLQotOS41LjIuICBJbXBsaWNpdCBIZWFkZXIgQXV0aGVudGljYXRpb24KLQotICAgVGhlIElWIGZvcm1hdGlvbiBvZiB0aGUgZjgtbW9kZSBnaXZlcyBpbXBsaWNpdCBhdXRoZW50aWNhdGlvbiAoSUhBKQotICAgb2YgdGhlIFJUUCBoZWFkZXIsIGV2ZW4gd2hlbiBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGlzIG5vdCB1c2VkLgotICAgV2hlbiBJSEEgaXMgdXNlZCwgYW4gYXR0YWNrZXIgdGhhdCBtb2RpZmllcyB0aGUgdmFsdWUgb2YgdGhlIFJUUAotICAgaGVhZGVyIHdpbGwgY2F1c2UgdGhlIGRlY3J5cHRpb24gcHJvY2VzcyBhdCB0aGUgcmVjZWl2ZXIgdG8gcHJvZHVjZQotICAgcmFuZG9tIHBsYWludGV4dCB2YWx1ZXMuICBXaGlsZSB0aGlzIHByb3RlY3Rpb24gaXMgbm90IGVxdWl2YWxlbnQgdG8KLSAgIG1lc3NhZ2UgYXV0aGVudGljYXRpb24sIGl0IG1heSBiZSB1c2VmdWwgZm9yIHNvbWUgYXBwbGljYXRpb25zLgotCi0xMC4gIEludGVyYWN0aW9uIHdpdGggRm9yd2FyZCBFcnJvciBDb3JyZWN0aW9uIG1lY2hhbmlzbXMKLQotICAgVGhlIGRlZmF1bHQgcHJvY2Vzc2luZyB3aGVuIHVzaW5nIEZvcndhcmQgRXJyb3IgQ29ycmVjdGlvbiAoZS5nLiwgUkZDCi0gICAyNzMzKSBwcm9jZXNzaW5nIHdpdGggU1JUUCBTSEFMTCBiZSB0byBwZXJmb3JtIEZFQyBwcm9jZXNzaW5nIHByaW9yCi0gICB0byBTUlRQIHByb2Nlc3Npbmcgb24gdGhlIHNlbmRlciBzaWRlIGFuZCB0byBwZXJmb3JtIFNSVFAgcHJvY2Vzc2luZwotICAgcHJpb3IgdG8gRkVDIHByb2Nlc3Npbmcgb24gdGhlIHJlY2VpdmVyIHNpZGUuICBBbnkgY2hhbmdlIHRvIHRoaXMKLSAgIG9yZGVyaW5nIChyZXZlcnNpbmcgaXQsIG9yLCBwbGFjaW5nIEZFQyBiZXR3ZWVuIFNSVFAgZW5jcnlwdGlvbiBhbmQKLSAgIFNSVFAgYXV0aGVudGljYXRpb24pIFNIQUxMIGJlIHNpZ25hbGVkIG91dCBvZiBiYW5kLgotCi0xMS4gIFNjZW5hcmlvcwotCi0gICBTUlRQIGNhbiBiZSB1c2VkIGFzIHNlY3VyaXR5IHByb3RvY29sIGZvciB0aGUgUlRQL1JUQ1AgdHJhZmZpYyBpbgotICAgbWFueSBkaWZmZXJlbnQgc2NlbmFyaW9zLiAgU1JUUCBoYXMgYSBudW1iZXIgb2YgY29uZmlndXJhdGlvbgotICAgb3B0aW9ucywgaW4gcGFydGljdWxhciByZWdhcmRpbmcga2V5IHVzYWdlLCBhbmQgY2FuIGhhdmUgaW1wYWN0IG9uCi0gICB0aGUgdG90YWwgcGVyZm9ybWFuY2Ugb2YgdGhlIGFwcGxpY2F0aW9uIGFjY29yZGluZyB0byB0aGUgd2F5IGl0IGlzCi0gICB1c2VkLiAgSGVuY2UsIHRoZSB1c2Ugb2YgU1JUUCBpcyBkZXBlbmRlbnQgb24gdGhlIGtpbmQgb2Ygc2NlbmFyaW8KLSAgIGFuZCBhcHBsaWNhdGlvbiBpdCBpcyB1c2VkIHdpdGguICBJbiB0aGUgZm9sbG93aW5nLCB3ZSBicmllZmx5Ci0gICBpbGx1c3RyYXRlIHNvbWUgdXNlIGNhc2VzIGZvciBTUlRQLCBhbmQgZ2l2ZSBzb21lIGd1aWRlbGluZXMgZm9yCi0gICByZWNvbW1lbmRlZCBzZXR0aW5nIG9mIGl0cyBvcHRpb25zLgotCi0xMS4xLiAgVW5pY2FzdAotCi0gICBBIHR5cGljYWwgZXhhbXBsZSB3b3VsZCBiZSBhIHZvaWNlIGNhbGwgb3IgdmlkZW8tb24tZGVtYW5kCi0gICBhcHBsaWNhdGlvbi4KLQotCi0KLQotCi1CYXVnaGVyLCBldCBhbC4gICAgICAgICAgICAgU3RhbmRhcmRzIFRyYWNrICAgICAgICAgICAgICAgICAgICBbUGFnZSA0M10KLQwKLVJGQyAzNzExICAgICAgICAgICAgICAgICAgICAgICAgICBTUlRQICAgICAgICAgICAgICAgICAgICAgICAgTWFyY2ggMjAwNAotCi0KLSAgIENvbnNpZGVyIG9uZSBiaS1kaXJlY3Rpb25hbCBSVFAgc3RyZWFtLCBhcyBvbmUgUlRQIHNlc3Npb24uICBJdCBpcwotICAgcG9zc2libGUgZm9yIHRoZSB0d28gcGFydGllcyB0byBzaGFyZSB0aGUgc2FtZSBtYXN0ZXIga2V5IGluIHRoZSB0d28KLSAgIGRpcmVjdGlvbnMgYWNjb3JkaW5nIHRvIHRoZSBwcmluY2lwbGVzIG9mIFNlY3Rpb24gOS4xLiAgVGhlIGZpcnN0Ci0gICByb3VuZCBvZiB0aGUga2V5IGRlcml2YXRpb24gc3BsaXRzIHRoZSBtYXN0ZXIga2V5IGludG8gYW55IG9yIGFsbCBvZgotICAgdGhlIGZvbGxvd2luZyBzZXNzaW9uIGtleXMgKGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQgc2VjdXJpdHkKLSAgIGZ1bmN0aW9ucyk6Ci0KLSAgIFNSVFBfZW5jcl9rZXksIFNSVFBfYXV0aF9rZXksIFNSVENQX2VuY3Jfa2V5LCBhbmQgU1JUQ1BfYXV0aCBrZXkuCi0KLSAgIChGb3Igc2ltcGxpY2l0eSwgd2Ugb21pdCBkaXNjdXNzaW9uIG9mIHRoZSBzYWx0cywgd2hpY2ggYXJlIGFsc28KLSAgIGRlcml2ZWQuKSAgSW4gdGhpcyBzY2VuYXJpbywgaXQgd2lsbCBpbiBtb3N0IGNhc2VzIHN1ZmZpY2UgdG8gaGF2ZSBhCi0gICBzaW5nbGUgbWFzdGVyIGtleSB3aXRoIHRoZSBkZWZhdWx0IGxpZmV0aW1lLiAgVGhpcyBndWFyYW50ZWVzCi0gICBzdWZmaWNpZW50bHkgbG9uZyBsaWZldGltZSBvZiB0aGUga2V5cyBhbmQgYSBtaW5pbXVtIHNldCBvZiBrZXlzIGluCi0gICBwbGFjZSBmb3IgbW9zdCBwcmFjdGljYWwgcHVycG9zZXMuICBBbHNvLCBpbiB0aGlzIGNhc2UgUlRDUAotICAgcHJvdGVjdGlvbiBjYW4gYmUgYXBwbGllZCBzbW9vdGhseS4gIFVuZGVyIHRoZXNlIGFzc3VtcHRpb25zLCB1c2Ugb2YKLSAgIHRoZSBNS0kgY2FuIGJlIG9taXR0ZWQuICBBcyB0aGUga2V5LWRlcml2YXRpb24gaW4gY29tYmluYXRpb24gd2l0aAotICAgbGFyZ2UgZGlmZmVyZW5jZSBpbiB0aGUgcGFja2V0IHJhdGUgaW4gdGhlIHJlc3BlY3RpdmUgZGlyZWN0aW9ucyBtYXkKLSAgIHJlcXVpcmUgc2ltdWx0YW5lb3VzIHN0b3JhZ2Ugb2Ygc2V2ZXJhbCBzZXNzaW9uIGtleXMsIGlmIHN0b3JhZ2UgaXMKLSAgIGFuIGlzc3VlLCB3ZSByZWNvbW1lbmRlZCB0byB1c2UgbG93LXJhdGUga2V5IGRlcml2YXRpb24uCi0KLSAgIFRoZSBzYW1lIGNvbnNpZGVyYXRpb25zIGNhbiBiZSBleHRlbmRlZCB0byB0aGUgdW5pY2FzdCBzY2VuYXJpbyB3aXRoCi0gICBtdWx0aXBsZSBSVFAgc2Vzc2lvbnMsIHdoZXJlIGVhY2ggc2Vzc2lvbiB3b3VsZCBoYXZlIGEgZGlzdGluY3QKLSAgIG1hc3RlciBrZXkuCi0KLTExLjIuICBNdWx0aWNhc3QgKG9uZSBzZW5kZXIpCi0KLSAgIEp1c3QgYXMgd2l0aCAodW5wcm90ZWN0ZWQpIFJUUCwgYSBzY2FsYWJpbGl0eSBpc3N1ZSBhcmlzZXMgaW4gYmlnCi0gICBncm91cHMgZHVlIHRvIHRoZSBwb3NzaWJseSB2ZXJ5IGxhcmdlIGFtb3VudCBvZiBTUlRDUCBSZWNlaXZlcgotICAgUmVwb3J0cyB0aGF0IHRoZSBzZW5kZXIgbWlnaHQgbmVlZCB0byBwcm9jZXNzLiAgSW4gU1JUUCwgdGhlIHNlbmRlcgotICAgbWF5IGhhdmUgdG8ga2VlcCBzdGF0ZSAodGhlIGNyeXB0b2dyYXBoaWMgY29udGV4dCkgZm9yIGVhY2ggcmVjZWl2ZXIsCi0gICBvciBtb3JlIHByZWNpc2VseSwgZm9yIHRoZSBTUlRDUCB1c2VkIHRvIHByb3RlY3QgUmVjZWl2ZXIgUmVwb3J0cy4KLSAgIFRoZSBvdmVyaGVhZCBpbmNyZWFzZXMgcHJvcG9ydGlvbmFsbHkgdG8gdGhlIHNpemUgb2YgdGhlIGdyb3VwLiAgSW4KLSAgIHBhcnRpY3VsYXIsIHJlLWtleWluZyByZXF1aXJlcyBzcGVjaWFsIGNvbmNlcm4sIHNlZSBiZWxvdy4KLQotICAgQ29uc2lkZXIgZmlyc3QgYSBzbWFsbCBncm91cCBvZiByZWNlaXZlcnMuICBUaGVyZSBhcmUgYSBmZXcgcG9zc2libGUKLSAgIHNldHVwcyB3aXRoIHRoZSBkaXN0cmlidXRpb24gb2YgbWFzdGVyIGtleXMgYW1vbmcgdGhlIHJlY2VpdmVycy4KLSAgIEdpdmVuIGEgc2luZ2xlIFJUUCBzZXNzaW9uLCBvbmUgcG9zc2liaWxpdHkgaXMgdGhhdCB0aGUgcmVjZWl2ZXJzCi0gICBzaGFyZSB0aGUgc2FtZSBtYXN0ZXIga2V5IGFzIHBlciBTZWN0aW9uIDkuMSB0byBzZWN1cmUgYWxsIHRoZWlyCi0gICByZXNwZWN0aXZlIFJUQ1AgdHJhZmZpYy4gIFRoaXMgc2hhcmVkIG1hc3RlciBrZXkgY291bGQgdGhlbiBiZSB0aGUKLSAgIHNhbWUgb25lIHVzZWQgYnkgdGhlIHNlbmRlciB0byBwcm90ZWN0IGl0cyBvdXRib3VuZCBTUlRQIHRyYWZmaWMuCi0gICBBbHRlcm5hdGl2ZWx5LCBpdCBjb3VsZCBiZSBhIG1hc3RlciBrZXkgc2hhcmVkIG9ubHkgYW1vbmcgdGhlCi0gICByZWNlaXZlcnMgYW5kIHVzZWQgc29sZWx5IGZvciB0aGVpciBTUlRDUCB0cmFmZmljLiAgQm90aCBhbHRlcm5hdGl2ZXMKLSAgIHJlcXVpcmUgdGhlIHJlY2VpdmVycyB0byB0cnVzdCBlYWNoIG90aGVyLgotCi0gICBDb25zaWRlcmluZyBTUlRDUCBhbmQga2V5IHN0b3JhZ2UsIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBsb3ctcmF0ZQotICAgKG9yIHplcm8pIGtleV9kZXJpdmF0aW9uIChleGNlcHQgdGhlIG1hbmRhdG9yeSBpbml0aWFsIG9uZSksIHNvIHRoYXQKLSAgIHRoZSBzZW5kZXIgZG9lcyBub3QgbmVlZCB0byBzdG9yZSB0b28gbWFueSBzZXNzaW9uIGtleXMgKGVhY2ggU1JUQ1AKLSAgIHN0cmVhbSBtaWdodCBvdGhlcndpc2UgaGF2ZSBhIGRpZmZlcmVudCBzZXNzaW9uIGtleSBhdCBhIGdpdmVuIHBvaW50Ci0KLQotCi1CYXVnaGVyLCBldCBhbC4gICAgICAgICAgICAgU3RhbmRhcmRzIFRyYWNrICAgICAgICAgICAgICAgICAgICBbUGFnZSA0NF0KLQwKLVJGQyAzNzExICAgICAgICAgICAgICAgICAgICAgICAgICBTUlRQICAgICAgICAgICAgICAgICAgICAgICAgTWFyY2ggMjAwNAotCi0KLSAgIGluIHRpbWUsIGFzIHRoZSBTUlRDUCBzb3VyY2VzIHNlbmQgYXQgZGlmZmVyZW50IHRpbWVzKS4gIFRodXMsIGluCi0gICBjYXNlIGtleSBkZXJpdmF0aW9uIGlzIHdhbnRlZCBmb3IgU1JUUCwgdGhlIGNyeXB0b2dyYXBoaWMgY29udGV4dCBmb3IKLSAgIFNSVFAgY2FuIGJlIGtlcHQgc2VwYXJhdGUgZnJvbSB0aGUgU1JUQ1AgY3J5cHRvIGNvbnRleHQsIHNvIHRoYXQgaXQKLSAgIGlzIHBvc3NpYmxlIHRvIGhhdmUgYSBrZXlfZGVyaXZhdGlvbl9yYXRlIG9mIDAgZm9yIFNSVENQIGFuZCBhIG5vbi0KLSAgIHplcm8gdmFsdWUgZm9yIFNSVFAuCi0KLSAgIFVzZSBvZiB0aGUgTUtJIGZvciByZS1rZXlpbmcgaXMgUkVDT01NRU5ERUQgZm9yIG1vc3QgYXBwbGljYXRpb25zCi0gICAoc2VlIFNlY3Rpb24gOC4xKS4KLQotICAgSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgU1JUUC9TUlRDUCBzdHJlYW0gKHdpdGhpbiB0aGUgc2FtZSBSVFAKLSAgIHNlc3Npb24pIHRoYXQgc2hhcmUgdGhlIG1hc3RlciBrZXksIHRoZSB1cHBlciBsaW1pdCBvZiAyXjQ4IFNSVFAKLSAgIHBhY2tldHMgLyAyXjMxIFNSVENQIHBhY2tldHMgbWVhbnMgdGhhdCwgYmVmb3JlIG9uZSBvZiB0aGUgc3RyZWFtcwotICAgcmVhY2hlcyBpdHMgbWF4aW11bSBudW1iZXIgb2YgcGFja2V0cywgcmUta2V5aW5nIE1VU1QgYmUgdHJpZ2dlcmVkIG9uCi0gICBBTEwgc3RyZWFtcyBzaGFyaW5nIHRoZSBtYXN0ZXIga2V5LiAgKEZyb20gc3RyaWN0IHNlY3VyaXR5IHBvaW50IG9mCi0gICB2aWV3LCBvbmx5IHRoZSBzdHJlYW0gcmVhY2hpbmcgdGhlIG1heGltdW0gd291bGQgbmVlZCB0byBiZSByZS1rZXllZCwKLSAgIGJ1dCB0aGVuIHRoZSBzdHJlYW1zIHdvdWxkIG5vIGxvbmdlciBiZSBzaGFyaW5nIG1hc3RlciBrZXksIHdoaWNoIGlzCi0gICB0aGUgaW50ZW50aW9uLikgIEEgbG9jYWwgcG9saWN5IGF0IHRoZSBzZW5kZXIgc2lkZSBzaG91bGQgZm9yY2UKLSAgIHJla2V5aW5nIGluIGEgd2F5IHRoYXQgdGhlIG1heGltdW0gcGFja2V0IGxpbWl0IGlzIG5vdCByZWFjaGVkIG9uIGFueQotICAgb2YgdGhlIHN0cmVhbXMuICBVc2Ugb2YgdGhlIE1LSSBmb3IgcmUta2V5aW5nIGlzIFJFQ09NTUVOREVELgotCi0gICBJbiBsYXJnZSBtdWx0aWNhc3Qgd2l0aCBvbmUgc2VuZGVyLCB0aGUgc2FtZSBjb25zaWRlcmF0aW9ucyBhcyBmb3IKLSAgIHRoZSBzbWFsbCBncm91cCBtdWx0aWNhc3QgaG9sZC4gIFRoZSBiaWdnZXN0IGlzc3VlIGluIHRoaXMgc2NlbmFyaW8KLSAgIGlzIHRoZSBhZGRpdGlvbmFsIGxvYWQgcGxhY2VkIGF0IHRoZSBzZW5kZXIgc2lkZSwgZHVlIHRvIHRoZSBzdGF0ZQotICAgKGNyeXB0b2dyYXBoaWMgY29udGV4dHMpIHRoYXQgaGFzIHRvIGJlIG1haW50YWluZWQgZm9yIGVhY2ggcmVjZWl2ZXIsCi0gICBzZW5kaW5nIGJhY2sgUlRDUCBSZWNlaXZlciBSZXBvcnRzLiAgQXQgbWluaW11bSwgYSByZXBsYXkgd2luZG93Ci0gICBtaWdodCBuZWVkIHRvIGJlIG1haW50YWluZWQgZm9yIGVhY2ggUlRDUCBzb3VyY2UuCi0KLTExLjMuICBSZS1rZXlpbmcgYW5kIGFjY2VzcyBjb250cm9sCi0KLSAgIFJlLWtleWluZyBtYXkgb2NjdXIgZHVlIHRvIGFjY2VzcyBjb250cm9sIChlLmcuLCB3aGVuIGEgbWVtYmVyIGlzCi0gICByZW1vdmVkIGR1cmluZyBhIG11bHRpY2FzdCBSVFAgc2Vzc2lvbiksIG9yIGZvciBwdXJlIGNyeXB0b2dyYXBoaWMKLSAgIHJlYXNvbnMgKGUuZy4sIHRoZSBrZXkgaXMgYXQgdGhlIGVuZCBvZiBpdHMgbGlmZXRpbWUpLiAgV2hlbiB1c2luZwotICAgU1JUUCBkZWZhdWx0IHRyYW5zZm9ybXMsIHRoZSBtYXN0ZXIga2V5IE1VU1QgYmUgcmVwbGFjZWQgYmVmb3JlIGFueQotICAgb2YgdGhlIGluZGV4IHNwYWNlcyBhcmUgZXhoYXVzdGVkIGZvciBhbnkgb2YgdGhlIHN0cmVhbXMgcHJvdGVjdGVkIGJ5Ci0gICBvbmUgYW5kIHRoZSBzYW1lIG1hc3RlciBrZXkuCi0KLSAgIEhvdyBrZXkgbWFuYWdlbWVudCByZS1rZXlzIFNSVFAgaW1wbGVtZW50YXRpb25zIGlzIG91dCBvZiBzY29wZSwgYnV0Ci0gICBpdCBpcyBjbGVhciB0aGF0IHRoZXJlIGFyZSBzdHJhaWdodGZvcndhcmQgd2F5cyB0byBtYW5hZ2Uga2V5cyBmb3IgYQotICAgbXVsdGljYXN0IGdyb3VwLiAgSW4gb25lLXNlbmRlciBtdWx0aWNhc3QsIGZvciBleGFtcGxlLCBpdCBpcwotICAgdHlwaWNhbGx5IHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgc2VuZGVyIHRvIGRldGVybWluZSB3aGVuIGEgbmV3Ci0gICBrZXkgaXMgbmVlZGVkLiAgVGhlIHNlbmRlciBpcyB0aGUgb25lIGVudGl0eSB0aGF0IGNhbiBrZWVwIHRyYWNrIG9mCi0gICB3aGVuIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXRzIGhhcyBiZWVuIHNlbnQsIGFzIHJlY2VpdmVycyBtYXkKLSAgIGpvaW4gYW5kIGxlYXZlIHRoZSBzZXNzaW9uIGF0IGFueSB0aW1lLCB0aGVyZSBtYXkgYmUgcGFja2V0IGxvc3MgYW5kCi0gICBkZWxheSBldGMuICBJbiBzY2VuYXJpb3Mgb3RoZXIgdGhhbiBvbmUtc2VuZGVyIG11bHRpY2FzdCwgb3RoZXIKLSAgIG1ldGhvZHMgY2FuIGJlIHVzZWQuICBIZXJlLCBvbmUgbXVzdCB0YWtlIGludG8gY29uc2lkZXJhdGlvbiB0aGF0IGtleQotICAgZXhjaGFuZ2UgY2FuIGJlIGEgY29zdGx5IG9wZXJhdGlvbiwgdGFraW5nIHNldmVyYWwgc2Vjb25kcyBmb3IgYQotICAgc2luZ2xlIGV4Y2hhbmdlLiAgSGVuY2UsIHNvbWUgdGltZSBiZWZvcmUgdGhlIG1hc3RlciBrZXkgaXMKLSAgIGV4aGF1c3RlZC9leHBpcmVzLCBvdXQtb2YtYmFuZCBrZXkgbWFuYWdlbWVudCBpcyBpbml0aWF0ZWQsIHJlc3VsdGluZwotCi0KLQotQmF1Z2hlciwgZXQgYWwuICAgICAgICAgICAgIFN0YW5kYXJkcyBUcmFjayAgICAgICAgICAgICAgICAgICAgW1BhZ2UgNDVdCi0MCi1SRkMgMzcxMSAgICAgICAgICAgICAgICAgICAgICAgICAgU1JUUCAgICAgICAgICAgICAgICAgICAgICAgIE1hcmNoIDIwMDQKLQotCi0gICBpbiBhIG5ldyBtYXN0ZXIga2V5IHRoYXQgaXMgc2hhcmVkIHdpdGggdGhlIHJlY2VpdmVyKHMpLiAgSW4gYW55Ci0gICBldmVudCwgdG8gbWFpbnRhaW4gc3luY2hyb25pemF0aW9uIHdoZW4gc3dpdGNoaW5nIHRvIHRoZSBuZXcga2V5LAotICAgZ3JvdXAgcG9saWN5IG1pZ2h0IGNob29zZSBiZXR3ZWVuIHVzaW5nIHRoZSBNS0kgYW5kIHRoZSA8RnJvbSwgVG8+LAotICAgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gOC4xLgotCi0gICBGb3IgYWNjZXNzIGNvbnRyb2wgcHVycG9zZXMsIHRoZSA8RnJvbSwgVG8+IHBlcmlvZHMgYXJlIHNldCBhdCB0aGUKLSAgIGRlc2lyZWQgZ3JhbnVsYXJpdHksIGRlcGVuZGVudCBvbiB0aGUgcGFja2V0IHJhdGUuICBIaWdoIHJhdGUgcmUtCi0gICBrZXlpbmcgY2FuIGJlIHByb2JsZW1hdGljIGZvciBTUlRDUCBpbiBzb21lIGxhcmdlLWdyb3VwIHNjZW5hcmlvcy4KLSAgIEFzIG1lbnRpb25lZCwgdGhlcmUgYXJlIHBvdGVudGlhbCBwcm9ibGVtcyBpbiB1c2luZyB0aGUgU1JUUCBpbmRleCwKLSAgIHJhdGhlciB0aGFuIHRoZSBTUlRDUCBpbmRleCwgZm9yIGRldGVybWluaW5nIHRoZSBtYXN0ZXIga2V5LiAgSW4KLSAgIHBhcnRpY3VsYXIsIGZvciBzaG9ydCBwZXJpb2RzIGR1cmluZyBzd2l0Y2hpbmcgb2YgbWFzdGVyIGtleXMsIGl0IG1heQotICAgYmUgdGhlIGNhc2UgdGhhdCBTUlRDUCBwYWNrZXRzIGFyZSBub3QgdW5kZXIgdGhlIGN1cnJlbnQgbWFzdGVyIGtleQotICAgb2YgdGhlIGNvcnJlc3BvbmRlbnQgU1JUUC4gIFRoZXJlZm9yZSwgdXNpbmcgdGhlIE1LSSBmb3IgcmUta2V5aW5nIGluCi0gICBzdWNoIHNjZW5hcmlvcyB3aWxsIHByb2R1Y2UgYmV0dGVyIHJlc3VsdHMuCi0KLTExLjQuICBTdW1tYXJ5IG9mIGJhc2ljIHNjZW5hcmlvcwotCi0gICBUaGUgZGVzY3JpcHRpb24gb2YgdGhlc2Ugc2NlbmFyaW9zIGhpZ2hsaWdodHMgc29tZSByZWNvbW1lbmRhdGlvbnMgb24KLSAgIHRoZSB1c2Ugb2YgU1JUUCwgbWFpbmx5IHJlbGF0ZWQgdG8gcmUta2V5aW5nIGFuZCBsYXJnZSBzY2FsZQotICAgbXVsdGljYXN0OgotCi0gICAtIERvIG5vdCB1c2UgZmFzdCByZS1rZXlpbmcgd2l0aCB0aGUgPEZyb20sIFRvPiBmZWF0dXJlLiAgSXQgbWF5LCBpbgotICAgICBwYXJ0aWN1bGFyLCBnaXZlIHByb2JsZW1zIGluIHJldHJpZXZpbmcgdGhlIGNvcnJlY3QgU1JUQ1Aga2V5LCBpZgotICAgICBhbiBTUlRDUCBwYWNrZXQgYXJyaXZlcyBjbG9zZSB0byB0aGUgcmUta2V5aW5nIHRpbWUuICBUaGUgTUtJCi0gICAgIFNIT1VMRCBiZSB1c2VkIGluIHRoaXMgY2FzZS4KLQotICAgLSBJZiBtdWx0aXBsZSBTUlRQIHN0cmVhbXMgaW4gdGhlIHNhbWUgUlRQIHNlc3Npb24gc2hhcmUgdGhlIHNhbWUKLSAgICAgbWFzdGVyIGtleSwgYWxzbyBtb2RlcmF0ZSByYXRlIHJlLWtleWluZyBNQVkgaGF2ZSB0aGUgc2FtZQotICAgICBwcm9ibGVtcywgYW5kIHRoZSBNS0kgU0hPVUxEIGJlIHVzZWQuCi0KLSAgIC0gVGhvdWdoIG9mZmVyaW5nIGluY3JlYXNlZCBzZWN1cml0eSwgYSBub24temVybyBrZXlfZGVyaXZhdGlvbl9yYXRlCi0gICAgIGlzIE5PVCBSRUNPTU1FTkRFRCB3aGVuIHRyeWluZyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGtleXMgaW4KLSAgICAgdXNlIHdpdGggbXVsdGlwbGUgc3RyZWFtcy4KLQotMTIuICBJQU5BIENvbnNpZGVyYXRpb25zCi0KLSAgIFRoZSBSVFAgc3BlY2lmaWNhdGlvbiBlc3RhYmxpc2hlcyBhIHJlZ2lzdHJ5IG9mIHByb2ZpbGUgbmFtZXMgZm9yIHVzZQotICAgYnkgaGlnaGVyLWxldmVsIGNvbnRyb2wgcHJvdG9jb2xzLCBzdWNoIGFzIHRoZSBTZXNzaW9uIERlc2NyaXB0aW9uCi0gICBQcm90b2NvbCAoU0RQKSwgdG8gcmVmZXIgdG8gdHJhbnNwb3J0IG1ldGhvZHMuICBUaGlzIHByb2ZpbGUKLSAgIHJlZ2lzdGVycyB0aGUgbmFtZSAiUlRQL1NBVlAiLgotCi0gICBTUlRQIHVzZXMgY3J5cHRvZ3JhcGhpYyB0cmFuc2Zvcm1zIHdoaWNoIGEga2V5IG1hbmFnZW1lbnQgcHJvdG9jb2wKLSAgIHNpZ25hbHMuICBJdCBpcyB0aGUgdGFzayBvZiBlYWNoIHBhcnRpY3VsYXIga2V5IG1hbmFnZW1lbnQgcHJvdG9jb2wKLSAgIHRvIHJlZ2lzdGVyIHRoZSBjcnlwdG9ncmFwaGljIHRyYW5zZm9ybXMgb3Igc3VpdGVzIG9mIHRyYW5zZm9ybXMgd2l0aAotICAgSUFOQS4gIFRoZSBrZXkgbWFuYWdlbWVudCBwcm90b2NvbCBjb252ZXlzIHRoZXNlIHByb3RvY29sIG51bWJlcnMsCi0gICBub3QgU1JUUCwgYW5kIGVhY2gga2V5IG1hbmFnZW1lbnQgcHJvdG9jb2wgY2hvb3NlcyB0aGUgbnVtYmVyaW5nCi0gICBzY2hlbWUgYW5kIHN5bnRheCB0aGF0IGl0IHJlcXVpcmVzLgotCi0KLQotCi1CYXVnaGVyLCBldCBhbC4gICAgICAgICAgICAgU3RhbmRhcmRzIFRyYWNrICAgICAgICAgICAgICAgICAgICBbUGFnZSA0Nl0KLQwKLVJGQyAzNzExICAgICAgICAgICAgICAgICAgICAgICAgICBTUlRQICAgICAgICAgICAgICAgICAgICAgICAgTWFyY2ggMjAwNAotCi0KLSAgIFNwZWNpZmljYXRpb24gb2YgYSBrZXkgbWFuYWdlbWVudCBwcm90b2NvbCBmb3IgU1JUUCBpcyBvdXQgb2Ygc2NvcGUKLSAgIGhlcmUuICBTZWN0aW9uIDguMiwgaG93ZXZlciwgcHJvdmlkZXMgZ3VpZGFuY2Ugb24gdGhlIHBhcmFtZXRlcnMgdGhhdAotICAgbmVlZCB0byBiZSBkZWZpbmVkIGZvciB0aGUgZGVmYXVsdCBhbmQgbWFuZGF0b3J5IHRyYW5zZm9ybXMuCi0KLTEzLiAgQWNrbm93bGVkZ2VtZW50cwotCi0gICBEYXZpZCBPcmFuIChDaXNjbykgYW5kIFJvbGYgQmxvbSAoRXJpY3Nzb24pIGFyZSBjby1hdXRob3JzIG9mIHRoaXMKLSAgIGRvY3VtZW50IGJ1dCB0aGVpciB2YWx1YWJsZSBjb250cmlidXRpb25zIGFyZSBhY2tub3dsZWRnZWQgaGVyZSB0bwotICAga2VlcCB0aGUgbGVuZ3RoIG9mIHRoZSBhdXRob3IgbGlzdCBkb3duLgotCi0gICBUaGUgYXV0aG9ycyB3b3VsZCBpbiBhZGRpdGlvbiBsaWtlIHRvIHRoYW5rIE1hZ251cyBXZXN0ZXJsdW5kLCBCcmlhbgotICAgV2VpcywgR2h5c2xhaW4gUGVsbGV0aWVyLCBNb3JnYW4gTGluZHF2aXN0LCBSb2JlcnQgRmFpcmxpZS0KLSAgIEN1bmluZ2hhbWUsIEFkcmlhbiBQZXJyaWcsIHRoZSBBVlQgV0cgYW5kIGluIHBhcnRpY3VsYXIgdGhlIGNoYWlybWVuCi0gICBDb2xpbiBQZXJraW5zIGFuZCBTdGVwaGVuIENhc25lciwgdGhlIFRyYW5zcG9ydCBhbmQgU2VjdXJpdHkgQXJlYQotICAgRGlyZWN0b3JzLCBhbmQgRXJpYyBSZXNjb3JsYSBmb3IgdGhlaXIgcmV2aWV3cyBhbmQgc3VwcG9ydC4KLQotMTQuICBSZWZlcmVuY2VzCi0KLTE0LjEuICBOb3JtYXRpdmUgUmVmZXJlbmNlcwotCi0gICBbQUVTXSAgICAgTklTVCwgIkFkdmFuY2VkIEVuY3J5cHRpb24gU3RhbmRhcmQgKEFFUykiLCBGSVBTIFBVQiAxOTcsCi0gICAgICAgICAgICAgaHR0cDovL3d3dy5uaXN0Lmdvdi9hZXMvCi0KLSAgIFtSRkMyMTA0XSBLcmF3Y3p5aywgSC4sIEJlbGxhcmUsIE0uIGFuZCBSLiBDYW5ldHRpLCAiSE1BQzogIEtleWVkLQotICAgICAgICAgICAgIEhhc2hpbmcgZm9yIE1lc3NhZ2UgQXV0aGVudGljYXRpb24iLCBSRkMgMjEwNCwgRmVicnVhcnkKLSAgICAgICAgICAgICAxOTk3LgotCi0gICBbUkZDMjExOV0gQnJhZG5lciwgUy4sICJLZXkgd29yZHMgZm9yIHVzZSBpbiBSRkNzIHRvIEluZGljYXRlCi0gICAgICAgICAgICAgUmVxdWlyZW1lbnQgTGV2ZWxzIiwgQkNQIDE0LCBSRkMgMjExOSwgTWFyY2ggMTk5Ny4KLQotICAgW1JGQzI0MDFdIEtlbnQsIFMuIGFuZCBSLiBBdGtpbnNvbiwgIlNlY3VyaXR5IEFyY2hpdGVjdHVyZSBmb3IKLSAgICAgICAgICAgICBJbnRlcm5ldCBQcm90b2NvbCIsIFJGQyAyNDAxLCBOb3ZlbWJlciAxOTk4LgotCi0gICBbUkZDMjgyOF0gU2hpcmV5LCBSLiwgIkludGVybmV0IFNlY3VyaXR5IEdsb3NzYXJ5IiwgRllJIDM2LCBSRkMgMjgyOCwKLSAgICAgICAgICAgICBNYXkgMjAwMC4KLQotICAgW1JGQzM1NTBdIFNjaHVsenJpbm5lLCBILiwgQ2FzbmVyLCBTLiwgRnJlZGVyaWNrLCBSLiBhbmQgVi4gSmFjb2Jzb24sCi0gICAgICAgICAgICAgIlJUUDogQSBUcmFuc3BvcnQgUHJvdG9jb2wgZm9yIFJlYWwtdGltZSBBcHBsaWNhdGlvbnMiLCBSRkMKLSAgICAgICAgICAgICAzNTUwLCBKdWx5IDIwMDMuCi0KLSAgIFtSRkMzNTUxXSBTY2h1bHpyaW5uZSwgSC4gYW5kIFMuIENhc25lciwgIlJUUCBQcm9maWxlIGZvciBBdWRpbyBhbmQKLSAgICAgICAgICAgICBWaWRlbyBDb25mZXJlbmNlcyB3aXRoIE1pbmltYWwgQ29udHJvbCIsICBSRkMgMzU1MSwgSnVseQotICAgICAgICAgICAgIDIwMDMuCi0KLQotCi0KLQotCi0KLQotQmF1Z2hlciwgZXQgYWwuICAgICAgICAgICAgIFN0YW5kYXJkcyBUcmFjayAgICAgICAgICAgICAgICAgICAgW1BhZ2UgNDddCi0MCi1SRkMgMzcxMSAgICAgICAgICAgICAgICAgICAgICAgICAgU1JUUCAgICAgICAgICAgICAgICAgICAgICAgIE1hcmNoIDIwMDQKLQotCi0xNC4yLiAgSW5mb3JtYXRpdmUgUmVmZXJlbmNlcwotCi0gICBbQUVTLUNUUl0gTGlwbWFhLCBILiwgUm9nYXdheSwgUC4gYW5kIEQuIFdhZ25lciwgIkNUUi1Nb2RlCi0gICAgICAgICAgICAgRW5jcnlwdGlvbiIsIE5JU1QsIGh0dHA6Ly9jc3JjLm5pc3QuZ292L2VuY3J5cHRpb24vbW9kZXMvCi0gICAgICAgICAgICAgd29ya3Nob3AxL3BhcGVycy9saXBtYWEtY3RyLnBkZgotCi0gICBbQjk2XSAgICAgQmVsbG92aW4sIFMuLCAiUHJvYmxlbSBBcmVhcyBmb3IgdGhlIElQIFNlY3VyaXR5Ci0gICAgICAgICAgICAgUHJvdG9jb2xzLCIgaW4gUHJvY2VlZGluZ3Mgb2YgdGhlIFNpeHRoIFVzZW5peCBVbml4Ci0gICAgICAgICAgICAgU2VjdXJpdHkgU3ltcG9zaXVtLCBwcC4gMS0xNiwgU2FuIEpvc2UsIENBLCBKdWx5IDE5OTYKLSAgICAgICAgICAgICAoaHR0cDovL3d3dy5yZXNlYXJjaC5hdHQuY29tL35zbWIvcGFwZXJzL2luZGV4Lmh0bWwpLgotCi0gICBbQkRKUl0gICAgQmVsbGFyZSwgTS4sIERlc2FpLCBBLiwgSm9raXBpaSwgRS4gYW5kIFAuIFJvZ2F3YXksICJBCi0gICAgICAgICAgICAgQ29uY3JldGUgVHJlYXRtZW50IG9mIFN5bW1ldHJpYyBFbmNyeXB0aW9uOiBBbmFseXNpcyBvZiBERVMKLSAgICAgICAgICAgICBNb2RlcyBvZiBPcGVyYXRpb24iLCBQcm9jZWVkaW5ncyAzOHRoIElFRUUgRk9DUywgcHAuIDM5NC0KLSAgICAgICAgICAgICA0MDMsIDE5OTcuCi0KLSAgIFtCUzAwXSAgICBCaXJ5dWtvdiwgQS4gYW5kIEEuIFNoYW1pciwgIkNyeXB0YW5hbHl0aWMgVGltZS9NZW1vcnkvRGF0YQotICAgICAgICAgICAgIFRyYWRlb2ZmcyBmb3IgU3RyZWFtIENpcGhlcnMiLCBQcm9jZWVkaW5ncywgQVNJQUNSWVBUIDIwMDAsCi0gICAgICAgICAgICAgTE5DUyAxOTc2LCBwcC4gMS0xMywgU3ByaW5nZXIgVmVybGFnLgotCi0gICBbQzk5XSAgICAgQ3Jvd2VsbCwgVy4gUC4sICJJbnRyb2R1Y3Rpb24gdG8gdGhlIFZFTk9OQSBQcm9qZWN0IiwKLSAgICAgICAgICAgICBodHRwOi8vd3d3Lm5zYS5nb3Y6ODA4MC9kb2NzL3Zlbm9uYS9pbmRleC5odG1sLgotCi0gICBbQ1RSXSAgICAgRHdvcmtpbiwgTS4sIE5JU1QgU3BlY2lhbCBQdWJsaWNhdGlvbiA4MDAtMzhBLAotICAgICAgICAgICAgICJSZWNvbW1lbmRhdGlvbiBmb3IgQmxvY2sgQ2lwaGVyIE1vZGVzIG9mIE9wZXJhdGlvbjoKLSAgICAgICAgICAgICBNZXRob2RzIGFuZCBUZWNobmlxdWVzIiwgMjAwMS4KLSAgICAgICAgICAgICBodHRwOi8vY3NyYy5uaXN0Lmdvdi9wdWJsaWNhdGlvbnMvbmlzdHB1YnMvODAwLTM4YS9zcDgwMC0KLSAgICAgICAgICAgICAzOGEucGRmLgotCi0gICBbZjgtYV0gICAgM0dQUCBUUyAzNS4yMDEgVjQuMS4wICgyMDAxLTEyKSBUZWNobmljYWwgU3BlY2lmaWNhdGlvbiAzcmQKLSAgICAgICAgICAgICBHZW5lcmF0aW9uIFBhcnRuZXJzaGlwIFByb2plY3Q7IFRlY2huaWNhbCBTcGVjaWZpY2F0aW9uCi0gICAgICAgICAgICAgR3JvdXAgU2VydmljZXMgYW5kIFN5c3RlbSBBc3BlY3RzOyAzRyBTZWN1cml0eTsKLSAgICAgICAgICAgICBTcGVjaWZpY2F0aW9uIG9mIHRoZSAzR1BQIENvbmZpZGVudGlhbGl0eSBhbmQgSW50ZWdyaXR5Ci0gICAgICAgICAgICAgQWxnb3JpdGhtczsgRG9jdW1lbnQgMTogZjggYW5kIGY5IFNwZWNpZmljYXRpb24gKFJlbGVhc2UKLSAgICAgICAgICAgICA0KS4KLQotICAgW2Y4LWJdICAgIDNHUFAgVFIgMzMuOTA4IFY0LjAuMCAoMjAwMS0wOSkgVGVjaG5pY2FsIFJlcG9ydCAzcmQKLSAgICAgICAgICAgICBHZW5lcmF0aW9uIFBhcnRuZXJzaGlwIFByb2plY3Q7IFRlY2huaWNhbCBTcGVjaWZpY2F0aW9uCi0gICAgICAgICAgICAgR3JvdXAgU2VydmljZXMgYW5kIFN5c3RlbSBBc3BlY3RzOyAzRyBTZWN1cml0eTsgR2VuZXJhbAotICAgICAgICAgICAgIFJlcG9ydCBvbiB0aGUgRGVzaWduLCBTcGVjaWZpY2F0aW9uIGFuZCBFdmFsdWF0aW9uIG9mIDNHUFAKLSAgICAgICAgICAgICBTdGFuZGFyZCBDb25maWRlbnRpYWxpdHkgYW5kIEludGVncml0eSBBbGdvcml0aG1zIChSZWxlYXNlCi0gICAgICAgICAgICAgNCkuCi0KLSAgIFtHRE9JXSAgICBCYXVnaGVyLCBNLiwgV2VpcywgQi4sIEhhcmRqb25vLCBULiBhbmQgSC4gSGFybmV5LCAiVGhlCi0gICAgICAgICAgICAgR3JvdXAgRG9tYWluIG9mIEludGVycHJldGF0aW9uLCBSRkMgMzU0NywgSnVseSAyMDAzLgotCi0KLQotCi0KLQotQmF1Z2hlciwgZXQgYWwuICAgICAgICAgICAgIFN0YW5kYXJkcyBUcmFjayAgICAgICAgICAgICAgICAgICAgW1BhZ2UgNDhdCi0MCi1SRkMgMzcxMSAgICAgICAgICAgICAgICAgICAgICAgICAgU1JUUCAgICAgICAgICAgICAgICAgICAgICAgIE1hcmNoIDIwMDQKLQotCi0gICBbSEFDXSAgICAgTWVuZXplcywgQS4sIFZhbiBPb3JzY2hvdCwgUC4gYW5kICBTLiBWYW5zdG9uZSwgIkhhbmRib29rCi0gICAgICAgICAgICAgb2YgQXBwbGllZCBDcnlwdG9ncmFwaHkiLCBDUkMgUHJlc3MsIDE5OTcsIElTQk4gMC04NDkzLQotICAgICAgICAgICAgIDg1MjMtNy4KLQotICAgW0g4MF0gICAgIEhlbGxtYW4sIE0uIEUuLCAiQSBjcnlwdGFuYWx5dGljIHRpbWUtbWVtb3J5IHRyYWRlLW9mZiIsCi0gICAgICAgICAgICAgSUVFRSBUcmFuc2FjdGlvbnMgb24gSW5mb3JtYXRpb24gVGhlb3J5LCBKdWx5IDE5ODAsIHBwLgotICAgICAgICAgICAgIDQwMS00MDYuCi0KLSAgIFtJS10gICAgICBULiBJd2F0YSBhbmQgVC4gS29obm86ICJOZXcgU2VjdXJpdHkgUHJvb2ZzIGZvciB0aGUgM0dQUAotICAgICAgICAgICAgIENvbmZpZGVudGlhbGl0eSBhbmQgSW50ZWdyaXR5IEFsZ29yaXRobXMiLCBQcm9jZWVkaW5ncyBvZgotICAgICAgICAgICAgIEZTRSAyMDA0LgotCi0gICBbS0lOS10gICAgVGhvbWFzLCBNLiBhbmQgSi4gVmlsaHViZXIsICJLZXJiZXJpemVkIEludGVybmV0Ci0gICAgICAgICAgICAgTmVnb3RpYXRpb24gb2YgS2V5cyAoS0lOSykiLCBXb3JrIGluIFByb2dyZXNzLgotCi0gICBbS0VZTUdUXSAgQXJya28sIEouLCBldCBhbC4sICJLZXkgTWFuYWdlbWVudCBFeHRlbnNpb25zIGZvciBTZXNzaW9uCi0gICAgICAgICAgICAgRGVzY3JpcHRpb24gUHJvdG9jb2wgKFNEUCkgYW5kIFJlYWwgVGltZSBTdHJlYW1pbmcgUHJvdG9jb2wKLSAgICAgICAgICAgICAoUlRTUCkiLCBXb3JrIGluIFByb2dyZXNzLgotCi0gICBbS1NZSF0gICAgS2FuZywgSi1TLiwgU2hpbiwgUy1VLiwgSG9uZywgRC4gYW5kIE8uIFlpLCAiUHJvdmFibGUKLSAgICAgICAgICAgICBTZWN1cml0eSBvZiBLQVNVTUkgYW5kIDNHUFAgRW5jcnlwdGlvbiBNb2RlIGY4IiwKLSAgICAgICAgICAgICBQcm9jZWVkaW5ncyBBc2lhY3J5cHQgMjAwMSwgU3ByaW5nZXIgVmVybGFnIExOQ1MgMjI0OCwgcHAuCi0gICAgICAgICAgICAgMjU1LTI3MSwgMjAwMS4KLQotICAgW01JS0VZXSAgIEFycmtvLCBKLiwgZXQuIGFsLiwgIk1JS0VZOiBNdWx0aW1lZGlhIEludGVybmV0IEtFWWluZyIsCi0gICAgICAgICAgICAgV29yayBpbiBQcm9ncmVzcy4KLQotICAgW01GMDBdICAgIE1jR3JldywgRC4gYW5kIFMuIEZsdWhyZXIsICJBdHRhY2tzIG9uIEVuY3J5cHRpb24gb2YKLSAgICAgICAgICAgICBSZWR1bmRhbnQgUGxhaW50ZXh0IGFuZCBJbXBsaWNhdGlvbnMgb24gSW50ZXJuZXQgU2VjdXJpdHkiLAotICAgICAgICAgICAgIHRoZSBQcm9jZWVkaW5ncyBvZiB0aGUgU2V2ZW50aCBBbm51YWwgV29ya3Nob3Agb24gU2VsZWN0ZWQKLSAgICAgICAgICAgICBBcmVhcyBpbiBDcnlwdG9ncmFwaHkgKFNBQyAyMDAwKSwgU3ByaW5nZXItVmVybGFnLgotCi0gICBbUENTVDFdICAgUGVycmlnLCBBLiwgQ2FuZXR0aSwgUi4sIFR5Z2FyLCBELiBhbmQgRC4gIFNvbmcsICJFZmZpY2llbnQKLSAgICAgICAgICAgICBhbmQgU2VjdXJlIFNvdXJjZSBBdXRoZW50aWNhdGlvbiBmb3IgTXVsdGljYXN0IiwgaW4gUHJvYy4KLSAgICAgICAgICAgICBvZiBOZXR3b3JrIGFuZCBEaXN0cmlidXRlZCBTeXN0ZW0gU2VjdXJpdHkgU3ltcG9zaXVtIE5EU1MKLSAgICAgICAgICAgICAyMDAxLCBwcC4gMzUtNDYsIDIwMDEuCi0KLSAgIFtQQ1NUMl0gICBQZXJyaWcsIEEuLCBDYW5ldHRpLCBSLiwgVHlnYXIsIEQuIGFuZCBELiBTb25nLCAiRWZmaWNpZW50Ci0gICAgICAgICAgICAgQXV0aGVudGljYXRpb24gYW5kIFNpZ25pbmcgb2YgTXVsdGljYXN0IFN0cmVhbXMgb3ZlciBMb3NzeQotICAgICAgICAgICAgIENoYW5uZWxzIiwgaW4gUHJvYy4gb2YgSUVFRSBTZWN1cml0eSBhbmQgUHJpdmFjeSBTeW1wb3NpdW0KLSAgICAgICAgICAgICBTJlAyMDAwLCBwcC4gNTYtNzMsIDIwMDAuCi0KLSAgIFtSRkMxNzUwXSBFYXN0bGFrZSwgRC4sIENyb2NrZXIsIFMuIGFuZCBKLiBTY2hpbGxlciwgIlJhbmRvbW5lc3MKLSAgICAgICAgICAgICBSZWNvbW1lbmRhdGlvbnMgZm9yIFNlY3VyaXR5IiwgUkZDIDE3NTAsIERlY2VtYmVyIDE5OTQuCi0KLSAgIFtSRkMyNjc1XSBCb3JtYW4sIEQuLCBEZWVyaW5nLCBTLiBhbmQgUi4gSGluZGVuLCAiSVB2NiBKdW1ib2dyYW1zIiwKLSAgICAgICAgICAgICBSRkMgMjY3NSwgQXVndXN0IDE5OTkuCi0KLQotCi0KLUJhdWdoZXIsIGV0IGFsLiAgICAgICAgICAgICBTdGFuZGFyZHMgVHJhY2sgICAgICAgICAgICAgICAgICAgIFtQYWdlIDQ5XQotDAotUkZDIDM3MTEgICAgICAgICAgICAgICAgICAgICAgICAgIFNSVFAgICAgICAgICAgICAgICAgICAgICAgICBNYXJjaCAyMDA0Ci0KLQotICAgW1JGQzMwOTVdIEJvcm1hbm4sIEMuLCBCdXJtZWlzdGVyLCBDLiwgRGVnZXJtYXJrLCBNLiwgRnVrdWhzaW1hLCBILiwKLSAgICAgICAgICAgICBIYW5udSwgSC4sIEpvbnNzb24sIEwtRS4sIEhha2VuYmVyZywgUi4sIEtvcmVuLCBULiwgTGUsIEsuLAotICAgICAgICAgICAgIExpdSwgWi4sIE1hcnRlbnNzb24sIEEuLCBNaXlhemFraSwgQS4sIFN2YW5icm8sIEsuLCBXaWVia2UsCi0gICAgICAgICAgICAgVC4sIFlvc2hpbXVyYSwgVC4gYW5kIEguIFpoZW5nLCAiUk9idXN0IEhlYWRlciBDb21wcmVzc2lvbjoKLSAgICAgICAgICAgICBGcmFtZXdvcmsgYW5kIEZvdXIgUHJvZmlsZXM6IFJUUCwgVURQLCBFU1AsIGFuZAotICAgICAgICAgICAgIHVuY29tcHJlc3NlZCAoUk9IQykiLCBSRkMgMzA5NSwgSnVseSAyMDAxLgotCi0gICBbUkZDMzI0Ml0gSm9uc3NvbiwgTC1FLiBhbmQgRy4gUGVsbGV0aWVyLCAiUk9idXN0IEhlYWRlciBDb21wcmVzc2lvbgotICAgICAgICAgICAgIChST0hDKTogQSBMaW5rLUxheWVyIEFzc2lzdGVkIFByb2ZpbGUgZm9yIElQL1VEUC9SVFAgIiwgUkZDCi0gICAgICAgICAgICAgMzI0MiwgQXByaWwgMjAwMi4KLQotICAgW1NETVNdICAgIEFuZHJlYXNlbiwgRi4sIEJhdWdoZXIsIE0uIGFuZCBELiBXaW5nLCAiU2Vzc2lvbgotICAgICAgICAgICAgIERlc2NyaXB0aW9uIFByb3RvY29sIFNlY3VyaXR5IERlc2NyaXB0aW9ucyBmb3IgTWVkaWEKLSAgICAgICAgICAgICBTdHJlYW1zIiwgV29yayBpbiBQcm9ncmVzcy4KLQotICAgW1NXT10gICAgIFN2YW5icm8sIEsuLCBXaW9yZWssIEouIGFuZCBCLiBPbGluLCAiVm9pY2Utb3Zlci1JUC1vdmVyLQotICAgICAgICAgICAgIHdpcmVsZXNzIiwgUHJvYy4gIFBJTVJDIDIwMDAsIExvbmRvbiwgU2VwdC4gMjAwMC4KLQotICAgW1YwMl0gICAgIFZhdWRlbmF5LCBTLiwgIlNlY3VyaXR5IEZsYXdzIEluZHVjZWQgYnkgQ0JDIFBhZGRpbmcgLQotICAgICAgICAgICAgIEFwcGxpY2F0aW9uIHRvIFNTTCwgSVBzZWMsIFdUTFMuLi4iLCBBZHZhbmNlcyBpbgotICAgICAgICAgICAgIENyeXB0b2xvZ3ksIEVVUk9DUllQVCcwMiwgTE5DUyAyMzMyLCBwcC4gNTM0LTU0NS4KLQotICAgW1dDODFdICAgIFdlZ21hbiwgTS4gTi4sIGFuZCAgSi5MLiBDYXJ0ZXIsICJOZXcgSGFzaCBGdW5jdGlvbnMgYW5kCi0gICAgICAgICAgICAgVGhlaXIgVXNlIGluIEF1dGhlbnRpY2F0aW9uIGFuZCBTZXQgRXF1YWxpdHkiLCBKQ1NTIDIyLAotICAgICAgICAgICAgIDI2NS0yNzksIDE5ODEuCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotQmF1Z2hlciwgZXQgYWwuICAgICAgICAgICAgIFN0YW5kYXJkcyBUcmFjayAgICAgICAgICAgICAgICAgICAgW1BhZ2UgNTBdCi0MCi1SRkMgMzcxMSAgICAgICAgICAgICAgICAgICAgICAgICAgU1JUUCAgICAgICAgICAgICAgICAgICAgICAgIE1hcmNoIDIwMDQKLQotCi1BcHBlbmRpeCBBOiBQc2V1ZG9jb2RlIGZvciBJbmRleCBEZXRlcm1pbmF0aW9uCi0KLSAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBwc2V1ZG8tY29kZSBmb3IgdGhlIGFsZ29yaXRobSB0bwotICAgZGV0ZXJtaW5lIHRoZSBpbmRleCBpIG9mIGFuIFNSVFAgcGFja2V0IHdpdGggc2VxdWVuY2UgbnVtYmVyIFNFUS4gIEluCi0gICB0aGUgZm9sbG93aW5nLCBzaWduZWQgYXJpdGhtZXRpYyBpcyBhc3N1bWVkLgotCi0gICAgICAgICBpZiAoc19sIDwgMzIsNzY4KQotICAgICAgICAgICAgaWYgKFNFUSAtIHNfbCA+IDMyLDc2OCkKLSAgICAgICAgICAgICAgIHNldCB2IHRvIChST0MtMSkgbW9kIDJeMzIKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgIHNldCB2IHRvIFJPQwotICAgICAgICAgICAgZW5kaWYKLSAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGlmIChzX2wgLSAzMiw3NjggPiBTRVEpCi0gICAgICAgICAgICAgICBzZXQgdiB0byAoUk9DKzEpIG1vZCAyXjMyCi0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICBzZXQgdiB0byBST0MKLSAgICAgICAgICAgIGVuZGlmCi0gICAgICAgICBlbmRpZgotICAgICAgICAgcmV0dXJuIFNFUSArIHYqNjUsNTM2Ci0KLUFwcGVuZGl4IEI6IFRlc3QgVmVjdG9ycwotCi0gICBBbGwgdmFsdWVzIGFyZSBpbiBoZXhhZGVjaW1hbC4KLQotQi4xLiAgQUVTLWY4IFRlc3QgVmVjdG9ycwotCi0gICBTUlRQIFBSRUZJWCBMRU5HVEggIDogICAwCi0KLSAgIFJUUCBwYWNrZXQgaGVhZGVyICAgOiAgIDgwNmU1Y2JhNTA2ODFkZTU1YzYyMTU5OQotCi0gICBSVFAgcGFja2V0IHBheWxvYWQgIDogICA3MDczNjU3NTY0NmY3MjYxNmU2NDZmNmQ2ZTY1NzM3MwotICAgICAgICAgICAgICAgICAgICAgICAgICAgMjA2OTczMjA3NDY4NjUyMDZlNjU3ODc0MjA2MjY1NzMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDc0MjA3NDY4Njk2ZTY3Ci0KLSAgIFJPQyAgICAgICAgICAgICAgICAgOiAgIGQ0NjI1NjRhCi0gICBrZXkgICAgICAgICAgICAgICAgIDogICAyMzQ4MjkwMDg0NjdiZTE4NmMzZGUxNGFhZTcyZDYyYwotICAgc2FsdCBrZXkgICAgICAgICAgICA6ICAgMzJmMjg3MGQKLSAgIGtleS1tYXNrIChtKSAgICAgICAgOiAgIDMyZjI4NzBkNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1Ci0gICBrZXkgWE9SIGtleS1tYXNrICAgIDogICAxMWJhYWUwZGQxMzJlYjRkMzk2OGI0MWZmYjI3ODM3OQotCi0gICBJViAgICAgICAgICAgICAgICAgIDogICAwMDZlNWNiYTUwNjgxZGU1NWM2MjE1OTlkNDYyNTY0YQotICAgSVYnICAgICAgICAgICAgICAgICA6ICAgNTk1YjY5OWJiZDNiYzBkZjI2MDYyMDkzYzFhZDhmNzMKLQotCi0KLQotCi0KLQotCi1CYXVnaGVyLCBldCBhbC4gICAgICAgICAgICAgU3RhbmRhcmRzIFRyYWNrICAgICAgICAgICAgICAgICAgICBbUGFnZSA1MV0KLQwKLVJGQyAzNzExICAgICAgICAgICAgICAgICAgICAgICAgICBTUlRQICAgICAgICAgICAgICAgICAgICAgICAgTWFyY2ggMjAwNAotCi0KLSAgIGogPSAwCi0gICBJVicgeG9yIGogICAgICAgICAgIDogICA1OTViNjk5YmJkM2JjMGRmMjYwNjIwOTNjMWFkOGY3MwotICAgUygtMSkgICAgICAgICAgICAgICA6ICAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgIElWJyB4b3IgUygtMSkgeG9yIGogOiAgIDU5NWI2OTliYmQzYmMwZGYyNjA2MjA5M2MxYWQ4ZjczCi0gICBTKDApICAgICAgICAgICAgICAgIDogICA3MWVmODJkNzBhMTcyNjYwMjQwNzA5YzdmYmIxOWQ4ZQotICAgcGxhaW50ZXh0ICAgICAgICAgICA6ICAgNzA3MzY1NzU2NDZmNzI2MTZlNjQ2ZjZkNmU2NTczNzMKLSAgIGNpcGhlcnRleHQgICAgICAgICAgOiAgIDAxOWNlN2EyNmU3ODU0MDE0YTYzNjZhYTk1ZDRlZWZkCi0KLSAgIGogPSAxCi0gICBJVicgeG9yIGogICAgICAgICAgIDogICA1OTViNjk5YmJkM2JjMGRmMjYwNjIwOTNjMWFkOGY3MgotICAgUygwKSAgICAgICAgICAgICAgICA6ICAgNzFlZjgyZDcwYTE3MjY2MDI0MDcwOWM3ZmJiMTlkOGUKLSAgIElWJyB4b3IgUygwKSB4b3IgaiAgOiAgIDI4YjRlYjRjYjcyY2U2YmYwMjAxMjk1NDNhMWMxMmZjCi0gICBTKDEpICAgICAgICAgICAgICAgIDogICAzYWJkNjQwYTYwOTE5ZmQ0M2JkMjg5YTA5NjQ5YjVmYwotICAgcGxhaW50ZXh0ICAgICAgICAgICA6ICAgMjA2OTczMjA3NDY4NjUyMDZlNjU3ODc0MjA2MjY1NzMKLSAgIGNpcGhlcnRleHQgICAgICAgICAgOiAgIDFhZDQxNzJhMTRmOWZhZjQ1NWI3ZjFkNGI2MmJkMDhmCi0KLSAgIGogPSAyCi0gICBJVicgeG9yIGogICAgICAgICAgIDogICA1OTViNjk5YmJkM2JjMGRmMjYwNjIwOTNjMWFkOGY3MQotICAgUygxKSAgICAgICAgICAgICAgICA6ICAgM2FiZDY0MGE2MDkxOWZkNDNiZDI4OWEwOTY0OWI1ZmMKLSAgIElWJyB4b3IgUygxKSB4b3IgaiAgOiAgIDYzZTYwZDkxZGRhYTVmMGIxZGQ0YTkzMzU3ZTQzYThkCi0gICBTKDIpICAgICAgICAgICAgICAgIDogICAyMjBjN2E4NzE1MjY2NTY1YjA5ZWNjOGEyYTYyYjExYgotICAgcGxhaW50ZXh0ICAgICAgICAgICA6ICAgNzQyMDc0Njg2OTZlNjcKLSAgIGNpcGhlcnRleHQgICAgICAgICAgOiAgIDU2MmMwZWVmN2M0ODAyCi0KLUIuMi4gIEFFUy1DTSBUZXN0IFZlY3RvcnMKLQotICAgIEtleXN0cmVhbSBzZWdtZW50IGxlbmd0aDogMTA0NDUxMiBvY3RldHMgKDY1MjgyIEFFUyBibG9ja3MpCi0gICAgU2Vzc2lvbiBLZXk6ICAgICAgMkI3RTE1MTYyOEFFRDJBNkFCRjcxNTg4MDlDRjRGM0MKLSAgICBSb2xsb3ZlciBDb3VudGVyOiAwMDAwMDAwMAotICAgIFNlcXVlbmNlIE51bWJlcjogIDAwMDAKLSAgICBTU1JDOiAgICAgICAgICAgICAwMDAwMDAwMAotICAgIFNlc3Npb24gU2FsdDogICAgIEYwRjFGMkYzRjRGNUY2RjdGOEY5RkFGQkZDRkQwMDAwIChhbHJlYWR5IHNoaWZ0ZWQpCi0gICAgT2Zmc2V0OiAgICAgICAgICAgRjBGMUYyRjNGNEY1RjZGN0Y4RjlGQUZCRkNGRDAwMDAKLQotICAgIENvdW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2V5c3RyZWFtCi0KLSAgICBGMEYxRjJGM0Y0RjVGNkY3RjhGOUZBRkJGQ0ZEMDAwMCAgIEUwM0VBRDA5MzVDOTVFODBFMTY2QjE2REQ5MkI0RUI0Ci0gICAgRjBGMUYyRjNGNEY1RjZGN0Y4RjlGQUZCRkNGRDAwMDEgICBEMjM1MTMxNjJCMDJEMEY3MkE0M0EyRkU0QTVGOTdBQgotICAgIEYwRjFGMkYzRjRGNUY2RjdGOEY5RkFGQkZDRkQwMDAyICAgNDFFOTVCM0JCMEEyRThERDQ3NzkwMUU0RkNBODk0QzAKLSAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgotICAgIEYwRjFGMkYzRjRGNUY2RjdGOEY5RkFGQkZDRkRGRUZGICAgRUM4Q0RGNzM5ODYwN0NCMEYyRDIxNjc1RUE5RUExRTQKLSAgICBGMEYxRjJGM0Y0RjVGNkY3RjhGOUZBRkJGQ0ZERkYwMCAgIDM2MkI3QzNDNjc3MzUxNjMxOEEwNzdEN0ZDNTA3M0FFCi0gICAgRjBGMUYyRjNGNEY1RjZGN0Y4RjlGQUZCRkNGREZGMDEgICA2QTJDQzM3ODc4ODkzNzRGQkVCNEM4MUIxN0JBNkM0NAotCi0gICBOb3RhIEJlbmU6IHRoaXMgdGVzdCBjYXNlIGlzIGNvbnRyaXZlZCBzbyB0aGF0IHRoZSBsYXR0ZXIgcGFydCBvZiB0aGUKLSAgIGtleXN0cmVhbSBzZWdtZW50IGNvaW5jaWRlcyB3aXRoIHRoZSB0ZXN0IGNhc2UgaW4gU2VjdGlvbiBGLjUuMSBvZgotICAgW0NUUl0uCi0KLQotCi0KLUJhdWdoZXIsIGV0IGFsLiAgICAgICAgICAgICBTdGFuZGFyZHMgVHJhY2sgICAgICAgICAgICAgICAgICAgIFtQYWdlIDUyXQotDAotUkZDIDM3MTEgICAgICAgICAgICAgICAgICAgICAgICAgIFNSVFAgICAgICAgICAgICAgICAgICAgICAgICBNYXJjaCAyMDA0Ci0KLQotQi4zLiAgS2V5IERlcml2YXRpb24gVGVzdCBWZWN0b3JzCi0KLSAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyB0ZXN0IGRhdGEgZm9yIHRoZSBkZWZhdWx0IGtleSBkZXJpdmF0aW9uCi0gICBmdW5jdGlvbiwgd2hpY2ggdXNlcyBBRVMtMTI4IGluIENvdW50ZXIgTW9kZS4gIEluIHRoZSBmb2xsb3dpbmcsIHdlCi0gICB3YWxrIHRocm91Z2ggdGhlIGluaXRpYWwga2V5IGRlcml2YXRpb24gZm9yIHRoZSBBRVMtMTI4IENvdW50ZXIgTW9kZQotICAgY2lwaGVyLCB3aGljaCByZXF1aXJlcyBhIDE2IG9jdGV0IHNlc3Npb24gZW5jcnlwdGlvbiBrZXkgYW5kIGEgMTQKLSAgIG9jdGV0IHNlc3Npb24gc2FsdCwgYW5kIGFuIGF1dGhlbnRpY2F0aW9uIGZ1bmN0aW9uIHdoaWNoIHJlcXVpcmVzIGEKLSAgIDk0LW9jdGV0IHNlc3Npb24gYXV0aGVudGljYXRpb24ga2V5LiAgVGhlc2UgdmFsdWVzIGFyZSBjYWxsZWQgdGhlCi0gICBjaXBoZXIga2V5LCB0aGUgY2lwaGVyIHNhbHQsIGFuZCB0aGUgYXV0aCBrZXkgaW4gdGhlIGZvbGxvd2luZy4KLSAgIFNpbmNlIHRoaXMgaXMgdGhlIGluaXRpYWwga2V5IGRlcml2YXRpb24gYW5kIHRoZSBrZXkgZGVyaXZhdGlvbiByYXRlCi0gICBpcyBlcXVhbCB0byB6ZXJvLCB0aGUgdmFsdWUgb2YgKGluZGV4IERJViBrZXlfZGVyaXZhdGlvbl9yYXRlKSBpcwotICAgemVybyAoYWN0dWFsbHksIGEgc2l4LW9jdGV0IHN0cmluZyBvZiB6ZXJvcykuICBJbiB0aGUgZm9sbG93aW5nLCB3ZQotICAgc2hvcnRlbiBrZXlfZGVyaXZhdGlvbl9yYXRlIHRvIGtkci4KLQotICAgVGhlIGlucHV0cyB0byB0aGUga2V5IGRlcml2YXRpb24gZnVuY3Rpb24gYXJlIHRoZSAxNiBvY3RldCBtYXN0ZXIga2V5Ci0gICBhbmQgdGhlIDE0IG9jdGV0IG1hc3RlciBzYWx0OgotCi0gICAgICBtYXN0ZXIga2V5OiAgRTFGOTdBMEQzRTAxOEJFMEQ2NEZBMzJDMDZERTQxMzkKLSAgICAgIG1hc3RlciBzYWx0OiAwRUM2NzVBRDQ5OEFGRUVCQjY5NjBCM0FBQkU2Ci0KLSAgIFdlIGZpcnN0IHNob3cgaG93IHRoZSBjaXBoZXIga2V5IGlzIGdlbmVyYXRlZC4gIFRoZSBpbnB1dCBibG9jayBmb3IKLSAgIEFFUy1DTSBpcyBnZW5lcmF0ZWQgYnkgZXhjbHVzaXZlLW9yaW5nIHRoZSBtYXN0ZXIgc2FsdCB3aXRoIHRoZQotICAgY29uY2F0ZW5hdGlvbiBvZiB0aGUgZW5jcnlwdGlvbiBrZXkgbGFiZWwgMHgwMCB3aXRoIChpbmRleCBESVYga2RyKSwKLSAgIHRoZW4gcGFkZGluZyBvbiB0aGUgcmlnaHQgd2l0aCB0d28gbnVsbCBvY3RldHMgKHdoaWNoIGltcGxlbWVudHMgdGhlCi0gICBtdWx0aXBseS1ieS0yXjE2IG9wZXJhdGlvbiwgc2VlIFNlY3Rpb24gNC4zLjMpLiAgVGhlIHJlc3VsdGluZyB2YWx1ZQotICAgaXMgdGhlbiBBRVMtQ00tIGVuY3J5cHRlZCB1c2luZyB0aGUgbWFzdGVyIGtleSB0byBnZXQgdGhlIGNpcGhlciBrZXkuCi0KLSAgICAgIGluZGV4IERJViBrZHI6ICAgICAgICAgICAgICAgICAwMDAwMDAwMDAwMDAKLSAgICAgIGxhYmVsOiAgICAgICAgICAgICAgICAgICAgICAgMDAKLSAgICAgIG1hc3RlciBzYWx0OiAgIDBFQzY3NUFENDk4QUZFRUJCNjk2MEIzQUFCRTYKLSAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICB4b3I6ICAgICAgICAgICAwRUM2NzVBRDQ5OEFGRUVCQjY5NjBCM0FBQkU2ICAgICAoeCwgUFJGIGlucHV0KQotCi0gICAgICB4KjJeMTY6ICAgICAgICAwRUM2NzVBRDQ5OEFGRUVCQjY5NjBCM0FBQkU2MDAwMCAoQUVTLUNNIGlucHV0KQotCi0gICAgICBjaXBoZXIga2V5OiAgICBDNjFFN0E5Mzc0NEYzOUVFMTA3MzRBRkUzRkY3QTA4NyAoQUVTLUNNIG91dHB1dCkKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLUJhdWdoZXIsIGV0IGFsLiAgICAgICAgICAgICBTdGFuZGFyZHMgVHJhY2sgICAgICAgICAgICAgICAgICAgIFtQYWdlIDUzXQotDAotUkZDIDM3MTEgICAgICAgICAgICAgICAgICAgICAgICAgIFNSVFAgICAgICAgICAgICAgICAgICAgICAgICBNYXJjaCAyMDA0Ci0KLQotICAgTmV4dCwgd2Ugc2hvdyBob3cgdGhlIGNpcGhlciBzYWx0IGlzIGdlbmVyYXRlZC4gIFRoZSBpbnB1dCBibG9jayBmb3IKLSAgIEFFUy1DTSBpcyBnZW5lcmF0ZWQgYnkgZXhjbHVzaXZlLW9yaW5nIHRoZSBtYXN0ZXIgc2FsdCB3aXRoIHRoZQotICAgY29uY2F0ZW5hdGlvbiBvZiB0aGUgZW5jcnlwdGlvbiBzYWx0IGxhYmVsLiAgVGhhdCB2YWx1ZSBpcyBwYWRkZWQgYW5kCi0gICBlbmNyeXB0ZWQgYXMgYWJvdmUuCi0KLSAgICAgIGluZGV4IERJViBrZHI6ICAgICAgICAgICAgICAgICAwMDAwMDAwMDAwMDAKLSAgICAgIGxhYmVsOiAgICAgICAgICAgICAgICAgICAgICAgMDIKLSAgICAgIG1hc3RlciBzYWx0OiAgIDBFQzY3NUFENDk4QUZFRUJCNjk2MEIzQUFCRTYKLQotICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgeG9yOiAgICAgICAgICAgMEVDNjc1QUQ0OThBRkVFOUI2OTYwQjNBQUJFNiAgICAgKHgsIFBSRiBpbnB1dCkKLQotICAgICAgeCoyXjE2OiAgICAgICAgMEVDNjc1QUQ0OThBRkVFOUI2OTYwQjNBQUJFNjAwMDAgKEFFUy1DTSBpbnB1dCkKLQotICAgICAgICAgICAgICAgICAgICAgMzBDQkJDMDg4NjNEOEM4NUQ0OURCMzRBOUFFMTdBQzYgKEFFUy1DTSBvdXB0dXQpCi0KLSAgICAgIGNpcGhlciBzYWx0OiAgIDMwQ0JCQzA4ODYzRDhDODVENDlEQjM0QTlBRTEKLQotICAgV2Ugbm93IHNob3cgaG93IHRoZSBhdXRoIGtleSBpcyBnZW5lcmF0ZWQuICBUaGUgaW5wdXQgYmxvY2sgZm9yIEFFUy0KLSAgIENNIGlzIGdlbmVyYXRlZCBhcyBhYm92ZSwgYnV0IHVzaW5nIHRoZSBhdXRoZW50aWNhdGlvbiBrZXkgbGFiZWwuCi0KLSAgICAgIGluZGV4IERJViBrZHI6ICAgICAgICAgICAgICAgICAgIDAwMDAwMDAwMDAwMAotICAgICAgbGFiZWw6ICAgICAgICAgICAgICAgICAgICAgICAgIDAxCi0gICAgICBtYXN0ZXIgc2FsdDogICAgIDBFQzY3NUFENDk4QUZFRUJCNjk2MEIzQUFCRTYKLSAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICB4b3I6ICAgICAgICAgICAgIDBFQzY3NUFENDk4QUZFRUFCNjk2MEIzQUFCRTYgICAgICh4LCBQUkYgaW5wdXQpCi0KLSAgICAgIHgqMl4xNjogICAgICAgICAgMEVDNjc1QUQ0OThBRkVFQUI2OTYwQjNBQUJFNjAwMDAgKEFFUy1DTSBpbnB1dCkKLQotICAgQmVsb3csIHRoZSBhdXRoIGtleSBpcyBzaG93biBvbiB0aGUgbGVmdCwgd2hpbGUgdGhlIGNvcnJlc3BvbmRpbmcgQUVTCi0gICBpbnB1dCBibG9ja3MgYXJlIHNob3duIG9uIHRoZSByaWdodC4KLQotICAgYXV0aCBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICBBRVMgaW5wdXQgYmxvY2tzCi0gICBDRUJFMzIxRjZGRjc3MTZCNkZENEFCNDlBRjI1NkExNSAgIDBFQzY3NUFENDk4QUZFRUFCNjk2MEIzQUFCRTYwMDAwCi0gICA2RDM4QkFBNDhGMEEwQUNGM0MzNEUyMzU5RTZDREJDRSAgIDBFQzY3NUFENDk4QUZFRUFCNjk2MEIzQUFCRTYwMDAxCi0gICBFMDQ5NjQ2QzQzRDkzMjdBRDE3NTU3OEVGNzIyNzA5OCAgIDBFQzY3NUFENDk4QUZFRUFCNjk2MEIzQUFCRTYwMDAyCi0gICA2MzcxQzEwQzlBMzY5QUMyRjk0QThDNUZCQ0REREMyNSAgIDBFQzY3NUFENDk4QUZFRUFCNjk2MEIzQUFCRTYwMDAzCi0gICA2RDZFOTE5QTQ4QjYxMEVGMTdDMjA0MUU0NzQwMzU3NiAgIDBFQzY3NUFENDk4QUZFRUFCNjk2MEIzQUFCRTYwMDA0Ci0gICA2QjY4NjQyQzU5QkJGQzJGMzREQjYwREJERkIyICAgICAgIDBFQzY3NUFENDk4QUZFRUFCNjk2MEIzQUFCRTYwMDA1Ci0KLQotCi0KLQotCi0KLQotCi0KLQotCi1CYXVnaGVyLCBldCBhbC4gICAgICAgICAgICAgU3RhbmRhcmRzIFRyYWNrICAgICAgICAgICAgICAgICAgICBbUGFnZSA1NF0KLQwKLVJGQyAzNzExICAgICAgICAgICAgICAgICAgICAgICAgICBTUlRQICAgICAgICAgICAgICAgICAgICAgICAgTWFyY2ggMjAwNAotCi0KLUF1dGhvcnMnIEFkZHJlc3NlcwotCi0gICBRdWVzdGlvbnMgYW5kIGNvbW1lbnRzIHNob3VsZCBiZSBkaXJlY3RlZCB0byB0aGUgYXV0aG9ycyBhbmQKLSAgIGF2dEBpZXRmLm9yZzoKLQotICAgTWFyayBCYXVnaGVyCi0gICBDaXNjbyBTeXN0ZW1zLCBJbmMuCi0gICA1NTEwIFNXIE9yY2hpZCBTdHJlZXQKLSAgIFBvcnRsYW5kLCBPUiA5NzIxOSBVU0EKLQotICAgUGhvbmU6ICArMSA0MDgtODUzLTQ0MTgKLSAgIEVNYWlsOiAgbWJhdWdoZXJAY2lzY28uY29tCi0KLQotICAgRWxpc2FiZXR0YSBDYXJyYXJhCi0gICBFcmljc3NvbiBSZXNlYXJjaAotICAgU0UtMTY0ODAgU3RvY2tob2xtCi0gICBTd2VkZW4KLQotICAgUGhvbmU6ICArNDYgOCA1MDg3NzA0MAotICAgRU1haWw6ICBlbGlzYWJldHRhLmNhcnJhcmFAZXJpY3Nzb24uY29tCi0KLQotICAgRGF2aWQgQS4gTWNHcmV3Ci0gICBDaXNjbyBTeXN0ZW1zLCBJbmMuCi0gICBTYW4gSm9zZSwgQ0EgOTUxMzQtMTcwNgotICAgVVNBCi0KLSAgIFBob25lOiAgKzEgMzAxLTM0OS01ODE1Ci0gICBFTWFpbDogIG1jZ3Jld0BjaXNjby5jb20KLQotCi0gICBNYXRzIE5hc2x1bmQKLSAgIEVyaWNzc29uIFJlc2VhcmNoCi0gICBTRS0xNjQ4MCBTdG9ja2hvbG0KLSAgIFN3ZWRlbgotCi0gICBQaG9uZTogICs0NiA4IDU4NTMzNzM5Ci0gICBFTWFpbDogIG1hdHMubmFzbHVuZEBlcmljc3Nvbi5jb20KLQotCi0gICBLYXJsIE5vcnJtYW4KLSAgIEVyaWNzc29uIFJlc2VhcmNoCi0gICBTRS0xNjQ4MCBTdG9ja2hvbG0KLSAgIFN3ZWRlbgotCi0gICBQaG9uZTogICs0NiA4IDQwNDQ1MDIKLSAgIEVNYWlsOiAga2FybC5ub3JybWFuQGVyaWNzc29uLmNvbQotCi0KLQotQmF1Z2hlciwgZXQgYWwuICAgICAgICAgICAgIFN0YW5kYXJkcyBUcmFjayAgICAgICAgICAgICAgICAgICAgW1BhZ2UgNTVdCi0MCi1SRkMgMzcxMSAgICAgICAgICAgICAgICAgICAgICAgICAgU1JUUCAgICAgICAgICAgICAgICAgICAgICAgIE1hcmNoIDIwMDQKLQotCi1GdWxsIENvcHlyaWdodCBTdGF0ZW1lbnQKLQotICAgQ29weXJpZ2h0IChDKSBUaGUgSW50ZXJuZXQgU29jaWV0eSAoMjAwNCkuICBUaGlzIGRvY3VtZW50IGlzIHN1YmplY3QKLSAgIHRvIHRoZSByaWdodHMsIGxpY2Vuc2VzIGFuZCByZXN0cmljdGlvbnMgY29udGFpbmVkIGluIEJDUCA3OCBhbmQKLSAgIGV4Y2VwdCBhcyBzZXQgZm9ydGggdGhlcmVpbiwgdGhlIGF1dGhvcnMgcmV0YWluIGFsbCB0aGVpciByaWdodHMuCi0KLSAgIFRoaXMgZG9jdW1lbnQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaGVyZWluIGFyZSBwcm92aWRlZCBvbiBhbgotICAgIkFTIElTIiBiYXNpcyBhbmQgVEhFIENPTlRSSUJVVE9SLCBUSEUgT1JHQU5JWkFUSU9OIEhFL1NIRSBSRVBSRVNFTlRTCi0gICBPUiBJUyBTUE9OU09SRUQgQlkgKElGIEFOWSksIFRIRSBJTlRFUk5FVCBTT0NJRVRZIEFORCBUSEUgSU5URVJORVQKLSAgIEVOR0lORUVSSU5HIFRBU0sgRk9SQ0UgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRCwKLSAgIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gQU5ZIFdBUlJBTlRZIFRIQVQgVEhFIFVTRSBPRiBUSEUKLSAgIElORk9STUFUSU9OIEhFUkVJTiBXSUxMIE5PVCBJTkZSSU5HRSBBTlkgUklHSFRTIE9SIEFOWSBJTVBMSUVECi0gICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotSW50ZWxsZWN0dWFsIFByb3BlcnR5Ci0KLSAgIFRoZSBJRVRGIHRha2VzIG5vIHBvc2l0aW9uIHJlZ2FyZGluZyB0aGUgdmFsaWRpdHkgb3Igc2NvcGUgb2YgYW55Ci0gICBJbnRlbGxlY3R1YWwgUHJvcGVydHkgUmlnaHRzIG9yIG90aGVyIHJpZ2h0cyB0aGF0IG1pZ2h0IGJlIGNsYWltZWQgdG8KLSAgIHBlcnRhaW4gdG8gdGhlIGltcGxlbWVudGF0aW9uIG9yIHVzZSBvZiB0aGUgdGVjaG5vbG9neSBkZXNjcmliZWQgaW4KLSAgIHRoaXMgZG9jdW1lbnQgb3IgdGhlIGV4dGVudCB0byB3aGljaCBhbnkgbGljZW5zZSB1bmRlciBzdWNoIHJpZ2h0cwotICAgbWlnaHQgb3IgbWlnaHQgbm90IGJlIGF2YWlsYWJsZTsgbm9yIGRvZXMgaXQgcmVwcmVzZW50IHRoYXQgaXQgaGFzCi0gICBtYWRlIGFueSBpbmRlcGVuZGVudCBlZmZvcnQgdG8gaWRlbnRpZnkgYW55IHN1Y2ggcmlnaHRzLiAgSW5mb3JtYXRpb24KLSAgIG9uIHRoZSBwcm9jZWR1cmVzIHdpdGggcmVzcGVjdCB0byByaWdodHMgaW4gUkZDIGRvY3VtZW50cyBjYW4gYmUKLSAgIGZvdW5kIGluIEJDUCA3OCBhbmQgQkNQIDc5LgotCi0gICBDb3BpZXMgb2YgSVBSIGRpc2Nsb3N1cmVzIG1hZGUgdG8gdGhlIElFVEYgU2VjcmV0YXJpYXQgYW5kIGFueQotICAgYXNzdXJhbmNlcyBvZiBsaWNlbnNlcyB0byBiZSBtYWRlIGF2YWlsYWJsZSwgb3IgdGhlIHJlc3VsdCBvZiBhbgotICAgYXR0ZW1wdCBtYWRlIHRvIG9idGFpbiBhIGdlbmVyYWwgbGljZW5zZSBvciBwZXJtaXNzaW9uIGZvciB0aGUgdXNlIG9mCi0gICBzdWNoIHByb3ByaWV0YXJ5IHJpZ2h0cyBieSBpbXBsZW1lbnRlcnMgb3IgdXNlcnMgb2YgdGhpcwotICAgc3BlY2lmaWNhdGlvbiBjYW4gYmUgb2J0YWluZWQgZnJvbSB0aGUgSUVURiBvbi1saW5lIElQUiByZXBvc2l0b3J5IGF0Ci0gICBodHRwOi8vd3d3LmlldGYub3JnL2lwci4KLQotICAgVGhlIElFVEYgaW52aXRlcyBhbnkgaW50ZXJlc3RlZCBwYXJ0eSB0byBicmluZyB0byBpdHMgYXR0ZW50aW9uIGFueQotICAgY29weXJpZ2h0cywgcGF0ZW50cyBvciBwYXRlbnQgYXBwbGljYXRpb25zLCBvciBvdGhlciBwcm9wcmlldGFyeQotICAgcmlnaHRzIHRoYXQgbWF5IGNvdmVyIHRlY2hub2xvZ3kgdGhhdCBtYXkgYmUgcmVxdWlyZWQgdG8gaW1wbGVtZW50Ci0gICB0aGlzIHN0YW5kYXJkLiAgUGxlYXNlIGFkZHJlc3MgdGhlIGluZm9ybWF0aW9uIHRvIHRoZSBJRVRGIGF0IGlldGYtCi0gICBpcHJAaWV0Zi5vcmcuCi0KLUFja25vd2xlZGdlbWVudAotCi0gICBGdW5kaW5nIGZvciB0aGUgUkZDIEVkaXRvciBmdW5jdGlvbiBpcyBjdXJyZW50bHkgcHJvdmlkZWQgYnkgdGhlCi0gICBJbnRlcm5ldCBTb2NpZXR5LgotCi0KLQotCi0KLQotCi0KLQotQmF1Z2hlciwgZXQgYWwuICAgICAgICAgICAgIFN0YW5kYXJkcyBUcmFjayAgICAgICAgICAgICAgICAgICAgW1BhZ2UgNTZdCi0MCmRpZmYgLS1naXQgYS9leHBvcnRlZF9pbmNsdWRlL3NydHAyIGIvZXhwb3J0ZWRfaW5jbHVkZS9zcnRwMgpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi5mNTAzMGZlCi0tLSAvZGV2L251bGwKKysrIGIvZXhwb3J0ZWRfaW5jbHVkZS9zcnRwMgpAQCAtMCwwICsxIEBACisuLi9pbmNsdWRlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZm9ybWF0LnNoIGIvZm9ybWF0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZkZjIzZWYKLS0tIC9kZXYvbnVsbAorKysgYi9mb3JtYXQuc2gKQEAgLTAsMCArMSwzNSBAQAorIyEvYmluL3NoCisjCisjIGZvcm1hdC5zaAorIworIyBydW4gY2xhbmctZm9ybWF0IG9uIGVhY2ggLmMgJiAuaCBmaWxlCisjCisjIGFzc3VtZXMgZ2l0IHRyZWUgaXMgY2xlYW4gd2hlbiByZXBvcnRpbmcgc3RhdHVzCisKK2lmIFsgLXogIiR7Q0xBTkdfRk9STUFUfSIgXTsgdGhlbgorICAgIENMQU5HX0ZPUk1BVD1jbGFuZy1mb3JtYXQKK2ZpCisKK2E9YGdpdCBscy1maWxlcyAnKi5oJyAnKi5jJ2AKK2ZvciB4IGluICRhOyBkbworICAgIGlmIFsgJHggIT0gImNvbmZpZ19pbi5oIiBdOyB0aGVuCisgICAgICAgICRDTEFOR19GT1JNQVQgLWkgLXN0eWxlPWZpbGUgJHgKKyAgICBmaQorZG9uZQorCittPWBnaXQgbHMtZmlsZXMgLW1gCitpZiBbIC1uICIkbSIgXTsgdGhlbgorICAgIHY9YCRDTEFOR19GT1JNQVQgLXZlcnNpb25gCisgICAgZWNobyAiRnJvbWF0dGluZyByZXF1aXJlZCB3aGVuIGNoZWNraW5nIHdpdGggJHYiCisgICAgZWNobworICAgIGVjaG8gIlRoZSBmb2xsb3dpbmcgZmlsZXMgcmVxdWlyZWQgZm9ybWF0dGluZzoiCisgICAgZm9yIGYgaW4gJG07IGRvCisgICAgICAgIGVjaG8gJGYKKyAgICBkb25lCisgICAgaWYgWyAiJDEiID0gIi1kIiBdOyB0aGVuCisgICAgICAgIGVjaG8KKyAgICAgICAgZ2l0IGRpZmYKKyAgICBmaQorICAgIGV4aXQgMQorZmkKK2V4aXQgMApkaWZmIC0tZ2l0IGEvZnV6emVyL01ha2VmaWxlLmluIGIvZnV6emVyL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMTA3ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwzNCBAQAorIyBNYWtlZmlsZSBmb3IgbGliU1JUUCBmdXp6ZXIKKworc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACitWUEFUSCA9IEBzcmNkaXJACisKK0NDCT0gQENDQAorQ1hYCT0gQENYWEAKK0lOQ0RJUgk9IC1JaW5jbHVkZSAtSSQoc3JjZGlyKS9pbmNsdWRlIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIC1JJCh0b3Bfc3JjZGlyKS9jcnlwdG8vaW5jbHVkZS8KK0RFRlMJPSBAREVGU0AKK0NQUEZMQUdTPSBAQ1BQRkxBR1NAIC1nCitDWFhGTEFHUz0gQENYWEZMQUdTQCAtZworQ0ZMQUdTCT0gQENGTEFHU0AgLWcKK0xJQlMJPSBATElCU0AKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoSU5DRElSKSAkKENQUEZMQUdTKSAkKENGTEFHUykKK0NPTVBJTEVDWFggPSAkKENYWCkgJChERUZTKSAkKElOQ0RJUikgJChDUFBGTEFHUykgJChDWFhGTEFHUykKK0NSWVBUT0xJQiA9IC1sc3J0cDIKKworLlBIT05ZOiBjbGVhbgorCithbGwgOiBzcnRwLWZ1enplcgorCittdDE5OTM3Lm86IG10MTk5MzcuY3BwCisJJChDT01QSUxFQ1hYKSAtYyAtc3RkPWMrKzExIG10MTk5MzcuY3BwIC1vIG10MTk5MzcubworZnV6emVyLm86IGZ1enplci5jIGZ1enplci5oIHRlc3RtZW0uaAorCSQoQ09NUElMRSkgZnV6emVyLmMgLWMgLW8gZnV6emVyLm8KK3Rlc3RtZW0ubzogdGVzdG1lbS5jCisJJChDT01QSUxFKSAtTzAgdGVzdG1lbS5jIC1jIC1vIHRlc3RtZW0ubworc3J0cC1mdXp6ZXI6IGZ1enplci5vIG10MTk5MzcubyB0ZXN0bWVtLm8KKwkkKENPTVBJTEVDWFgpIC1MLiAtTC4uIGZ1enplci5vIG10MTk5MzcubyB0ZXN0bWVtLm8gJChMSUJGVVpaRVIpICQoQ1JZUFRPTElCKSAkKExJQlMpIC1vIHNydHAtZnV6emVyCisKK2NsZWFuOgorCXJtIC1yZiBzcnRwLWZ1enplciAqLm8KZGlmZiAtLWdpdCBhL2Z1enplci9SRUFETUUubWQgYi9mdXp6ZXIvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZTk1NzkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvUkVBRE1FLm1kCkBAIC0wLDAgKzEsODggQEAKKyMgbGlic3J0IGZ1enplcgorCitCeSBHdWlkbyBWcmFua2VuIDxndWlkb3ZyYW5rZW5AZ21haWwuY29tPiAtLSBodHRwczovL2d1aWRvdnJhbmtlbi53b3JkcHJlc3MuY29tLworCitUaGlzIGlzIGFuIGFkdmFuY2VkIGZ1enplciBmb3IgbGliU1JUUCAoaHR0cHM6Ly9naXRodWIuY29tL2Npc2NvL2xpYnNydHApLiBJdCBpbXBsZW1lbnRzIHNldmVyYWwgc3BlY2lhbCB0ZWNobmlxdWVzLCBkZXNjcmliZWQgYmVsb3csIHRoYXQgYXJlIG5vdCBvZnRlbiBmb3VuZCBpbiBmdXp6ZXJzIG9yIGVsc2V3aGVyZS4gQWxsIGFyZSBlbmNvdXJhZ2VkIHRvIHRyYW5zcG9zZSB0aGVzZSBpZGVhcyB0byB0aGVpciBvd24gZnV6emVycyBmb3IgdGhlIGJldHRlcm1lbnQgb2Ygc29mdHdhcmUgc2VjdXJpdHkuCisKK0ZlZWwgZnJlZSB0byBjb250YWN0IG1lIGZvciBidXNpbmVzcyBlbnF1aXJpZXMuCisKKyMjIEJ1aWxkaW5nCisKK0Zyb20gdGhlIHJlcG9zaXRvcnkncyByb290IGRpcmVjdG9yeToKKworYGBgc2gKK0NDPWNsYW5nIENYWD1jbGFuZysrIENYWEZMQUdTPSItZnNhbml0aXplPWZ1enplci1uby1saW5rLGFkZHJlc3MsdW5kZWZpbmVkIC1nIC1PMyIgQ0ZMQUdTPSItZnNhbml0aXplPWZ1enplci1uby1saW5rLGFkZHJlc3MsdW5kZWZpbmVkIC1nIC1PMyIgTERGTEFHUz0iLWZzYW5pdGl6ZT1mdXp6ZXItbm8tbGluayxhZGRyZXNzLHVuZGVmaW5lZCIgLi9jb25maWd1cmUKK0xJQkZVWlpFUj0iLWZzYW5pdGl6ZT1mdXp6ZXIiIG1ha2Ugc3J0cC1mdXp6ZXIKK2BgYAorCisjIyBGZWF0dXJlcworCisjIyMgUG9ydGFibGUgUFJORworCitgYGBtdDE5OTM3LmNgYGAgZXhwb3J0cyB0aGUgQysrMTEgTWVyc2VubmUgVHdpc3RlciBpbXBsZW1lbnRhdG9uLiBIZW5jZSwgYSBtb2Rlcm4gQysrIGNvbXBpbGVyIGlzIHJlcXVpcmVkIHRvIGNvbXBpbGUgdGhpcyBmaWxlLgorCitUaGlzIGFwcHJvYWNoIGhhcyB0aGUgZm9sbG93aW5nIGFkdmFudGFnZXM6CisKKy0gcmFuZCgpIGlzIGZpY2tsZSAtLSBpdHMgYmVoYXZpb3IgZWcuIHRoZSBzZXF1ZW5jZSBvZiBudW1iZXJzIHRoYXQgaXQgZ2VuZXJhdGVzIGZvciBhIGdpdmVuIHNlZWQsIG1heSBkaWZmZXIgYWNyb3NzIHN5c3RlbXMgYW5kIGxpYmMncy4KKy0gQysrMTEgbXQxOTkzNyBpcyBwb3J0YWJsZSwgbWVhbmluZyB0aGF0IGl0cyBiZWhhdmlvciB3aWxsIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHBsYXRmb3Jtcy4gVGhpcyBpcyBpbXBvcnRhbnQgdG8ga2VlcCB0aGUgZnV6emluZyBjb3JwdXMgcG9ydGFibGUuCistIE5vIG5lZWQgdG8gaW1wbGVtZW50IGEgcG9ydGFibGUgUFJORyBvdXJzZWx2ZXMsIG9yIHJpc2sgbGljZW5zZSBpbmNvbXBhdGFiaWxpdHkgYnkgaW1wb3J0aW5nIGl0IGZyb20gb3RoZXIgcHJvamVjdHMuCisKKyMjIyBTaXplIDAgYWxsb2NhdGlvbnMKKworVG8gdGVzdCB3aGV0aGVyIGFsbG9jYXRpb25zIG9mIHNpemUgMCBlZy4gYGBgbWFsbG9jKDApYGBgIGFyZSBldmVyIGRlcmVmZXJlbmNlZCBhbmQgd3JpdHRlbiB0bywgdGhlIGN1c3RvbSBhbGxvY2F0ZXIgd2lsbCByZXR1cm4gYW4gaW50ZW50aW9uYWxseSBpbnZhbGlkIHBvaW50ZXIgcG9pbnRlciBhZGRyZXNzIGZvciB0aGVzZSByZXF1ZXN0cy4KKworRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgY29tbWVudHMgaW4gYGBgZnV6el9hbGxvYygpYGBgLgorCisjIyMgUmFuZG9tIGFsbG9jYXRpb24gZmFpbHVyZXMKKworVGhlIGN1c3RvbSBhbGxvY2F0b3Igd2lsbCBwZXJpb2RpY2FsbHkgcmV0dXJuIGBgYE5VTExgYGAgZm9yIGhlYXAgcmVxdWVzdHMuIFRoaXMgdGVzdHMgdGhlIGxpYnJhcnkncyByZXNpbGllbmNlIGFuZCBjb3JyZWN0IG9wZXJhdGlvbiBpbiB0aGUgZXZlbnQgb2YgZ2xvYmFsIG1lbW9yeSBzaG9ydGFnZXMuCisKK1RoZSBpbnRlcnZhbCBvZiBgYGBOVUxMYGBgIHJldHVybiB2YWx1ZXMgaXMgZGV0ZXJtaW5pc3RpYyBhcyBpdCByZWxpZXMgb24gdGhlIFBSTkcsIHNvIGZvciBhIGdpdmVuIGZ1enplciBpbnB1dCAodGhhdCBlbmNvZGVzIHRoZSBQUk5HIHNlZWQgYXMgd2VsbCksIGJlaGF2aW9yIG9mIHRoYXQgaW5wdXQgd2l0aCByZWdhcmRzIHRvIGFsbG9jYXRvciBiZWhhdmlvdXIgaXMgY29uc2lzdGVudCwgYWxsb3dpbmcgZm9yIHJlbGlhYmxlIHJlcHJvZHVjdGlvbiBvZiBidWdzLgorCisjIyMgRGV0ZWN0aW5nIGluYWRlcXVhdGUgcG9pbnRlciBhcml0aG1ldGljCisKK1RoaXMgZmVhdHVyZSBpcyBvbmx5IGF2YWlsYWJsZSBvbiAzMiBiaXQgYnVpbGRzLgorCitVbmxlc3MgdGhlIGBgYC0tbm9fbW1hcGBgYCBmbGFnIGlzIGdpdmVuLCB0aGUgZnV6emVyIHdpbGwgdXNlIGEgc3BlY2lhbCBhbGxvY2F0aW9uIHRlY2huaXF1ZSBmb3Igc29tZSBvZiB0aGUgYWxsb2NhdGlvbiByZXF1ZXN0cy4gSXQgd2lsbCB1c2UgYGBgbW1hcCgpYGBgIHRvIHJlc2VydmUgbWVtb3J5IGF0IHRoZSBleHRyZW1pdGllcyBvZiB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIC0tIHNvbWV0aW1lcyBhdCAweDAwMDEwMDAwIGFuZCBzb21ldGltZXMgYXQgMHhGRkZGMDAwMC4gVGhpcyBhcHByb2FjaCBjYW4gYXNzaXN0IGluIGRldGVjdGluZyBpbnZhbGlkIG9yIGluYWRlcXVhdGUgcG9pbnRlciBhcml0aG1ldGljLiBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBjb2RlOgorCitgYGBjCitpZiAoIHN0YXJ0ICsgbiA8IGVuZCApIHsKKyAgICBtZW1zZXQoc3RhcnQsIDAsIG4pOworfQorYGBgCisKK3doZXJlIGBgYHN0YXJ0YGBgIGFuZCBgYGBlbmRgYGAgZGVtYXJjYXRlIGEgbWVtb3J5IHJlZ2lvbiwgYW5kIGBgYG5gYGAgaXMgc29tZSBwb3NpdGl2ZSBpbnRlZ2VyLgorSWYgYGBgbmBgYCBpcyBhIHN1ZmZpY2llbnRseSBsYXJnZSB2YWx1ZSwgYSBwb2ludGVyIGFkZGl0aW9uIG92ZXJmbG93IHdpbGwgb2NjdXIsIGxlYWRpbmcgdG8gYSBwYWdlIGZhdWx0LiBCeSByb3V0aW5lbHkgcGxhY2luZyBhbGxvY2F0aW9ucyBhdCB0aGUgaGlnaCB2aXJ0dWFsIGFkZHJlc3MgYGBgMHhGRkZGMDAwMGBgYCwgdGhlIGNoYW5jZXMgb2YgZGV0ZWN0aW5nIHRoaXMgYnVnIGFyZSBpbmNyZWFzZWQuIFNvIGxldCdzIHNheSBgYGBzdGFydGBgYCB3YXMgcHJldmlvdXNseSBhbGxvY2F0ZWQgYXQgYGBgMHhGRkZGMDAwMGBgYCwgYW5kIGBgYGVuZGBgYCBpcyBgYGAweEZGRkYxMDAwYGBgLCBhbmQgYGBgbmBgYCBpcyAweEZGRkZGLiBUaGVuIHRoZSBleHByZXNzaW9uIGVmZmVjdGl2ZWx5IGJlY29tZXM6CisKK2BgYGMKK2lmICggMHhGRkZGMDAwMCArIDB4MDAwRkZGRkYgPCAweEZGRkYxMDAwICkgeworICAgIG1lbXNldCgweEZGRkYwMDAwLCAwLCAweDAwMEZGRkYpOworfQorYGBgCisKK1RoZSBhZGRpdGlvbiBgYGAweEZGRkYwMDAwICsgMHgwMDBGRkZGRmBgYCBvdmVyZmxvd3Mgc28gdGhlIHJlc3VsdCBpcyBgYGAweDAwMEVGRkZGYGBgLiBIZW5jZToKKworYGBgYworaWYgKCAweDAwMEVGRkZGIDwgMHhGRkZGMTAwMCApIHsgLy8gRXhwcmVzc2lvbiByZXNvbHZlcyBhcyB0cnVlICEKK2BgYAorCitUaGUgc3Vic2VxdWVudCBgYGBtZW1zZXRgYGAgaXMgZXhlY3V0ZWQgY29udHJhcnkgdG8gdGhlIHByb2dyYW1tZXIncyBpbnRlbnRpb25zLCBhbmQgYSBzZWdtZW50YXRpb24gZmF1bHQgd2lsbCBvY2N1ci4KKworV2hpbGUgdGhpcyBpcyBhIGNvcm5lciBjYXNlLCBpdCBjYW4gbm90IGJlIHJ1bGVkIG91dCB0aGF0IGl0IG1pZ2h0IG9jY3VyIGluIGEgcHJvZHVjdGlvbiBlbnZpcm9ubWVudC4gV2hhdCdzIG1vcmUsIHRoZSBhbmFseXN0IGV4YW1pbmluZyB0aGUgY3Jhc2ggY2FuIHJlYXNvbiBhYm91dCBob3cgdGhlIHZhbHVlIG9mIGBgYG5gYGAgY29tZXMgYWJvdXQgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgY29uY29jdCBhIGNyYWZ0ZWQgaW5wdXQgdGhhdCBsZWFkcyB0byBhIHZlcnkgaGlnaCBgYGBuYGBgIHZhbHVlLCBtYWtpbmcgdGhlICJleHBsb2l0IiBzdWNjZWVkIGV2ZW4gd2l0aCBhdmVyYWdlIHZpcnR1YWwgYWRkcmVzc2VzLgorCitBc2lkZSBmcm9tIHVzaW5nIGBgYG1tYXBgYGAgdG8gYWxsb2NhdGUgYXQgYWRkcmVzcyBgYGAweEZGRkYwMDAwYGBgLCB0aGUgZnV6emVyIHdpbGwgYWxzbyBwbGFjZSBhbGxvY2F0aW9ucyBhdCB0aGUgbG93IHZpcnR1YWwgYWRkcmVzcyBgYGAweDAwMDEwMDAwYGBgIHRvIGRldGVjdCBpbnZhbGlkIHBvaW50ZXIgYXJpdGhtZXRpYyBpbnZvbHZpbmcgc3VidHJhY3Rpb246CisKK2BgYGMKK2lmICggZW5kIC0gbiA+IHN0YXJ0ICkgeworYGBgCisKKyMjIyBPdXRwdXQgbWVtb3J5IHRlc3RpbmcKKworYGBgdGVzdG1lbS5jYGBgIGV4cG9ydHMgYGBgZnV6el90ZXN0bWVtYGBgLiBBbGwgdGhpcyBmdW5jdGlvbiBkb2VzIGlzIGNvcHkgdGhlIGlucHV0IGJ1ZmZlciB0byBhIG5ld2x5IGFsbG9jYXRlZCBoZWFwIHJlZ2lvbiwgYW5kIHRoZW4gZnJlZSB0aGF0IGhlYXAgcmVnaW9uLiBJZiBBZGRyZXNzU2FuaXRpemVyIGlzIGVuYWJsZWQsIHRoaXMgZW5zdXJlcyB0aGF0IHRoZSBpbnB1dCBidWZmZXIgdG8gYGBgZnV6el90ZXN0bWVtYGBgIGlzIGEgbGVnYWwgbWVtb3J5IHJlZ2lvbi4KK0lmIE1lbW9yeVNhbml0aXplciBpcyBlbmFibGVkLCB0aGVuIGBgZnV6el90ZXN0bWVtYGBgIGNhbGxzIGBgYGZ1enpfdGVzdG1lbV9tc2FuYGBgYC4gVGhlIGxhdHRlciBmdW5jdGlvbiB3cml0ZXMgdGhlIGRhdGEgYXQgaGFuZCB0byBgYGAvZGV2L251bGxgYGAuIFRoaXMgaXMgYW4gbmljZSB0cmljayB0byBtYWtlIE1lbW9yeVNhbml0aXplciBldmFsdWF0ZSB0aGlzIGRhdGEsIGFuZCBjcmFzaCBpZiBpdCBjb250YWlucyB1bmluaXRpYWxpemVkIGJ5dGVzLgorVGhpcyBmdW5jdGlvbiBoYXMgYmVlbiBpbXBsZW1lbnRlZCBpbiBhIHNlcGFyYXRlIGZpbGUgZm9yIGEgcmVhc29uOiBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBhbiBvcHRpbWl6aW5nIGNvbXBpbGVyLCB0aGlzIGlzIGEgbWVhbmluZ2xlc3Mgb3BlcmF0aW9uLCBhbmQgYXMgc3VjaCBpdCBtaWdodCBiZSBvcHRpbWl6ZWQgYXdheS4gSGVuY2UsIHRoaXMgZmlsZSBtdXN0IGJlIGNvbXBpbGVkIHdpdGhvdXQgb3B0aW1pemF0aW9ucyAoYGBgLU8wYGBgIGZsYWcpLgorCisjIyBDb250cmlidXRpbmcKKworV2hlbiBleHRlbmRpbmcgdGhlIGN1cnJlbnQgZnV6emVyLCB1c2UgdmFyaWFibGUgdHlwZXMgd2hvc2Ugd2lkdGggaXMgY29uc2lzdGVudCBhY3Jvc3Mgc3lzdGVtcyB3aGVyZSBwb3NzaWJsZS4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gcmV0YWluIGNvcnB1cyBwb3J0YWJpbGl0eS4gRm9yIGV4YW1wbGUsIHVzZSBgYGB1aW50NjRfdGBgYCByYXRoZXIgdGhhbiBgYGB1bnNpZ25lZCBsb25nYGBgLgorCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAwMjQ3OGU4NTI4YjcwNTcwMTgxMDYzMDhhMDMzODJmOWM2MGRkNjIgYi9mdXp6ZXIvY29ycHVzLzAwMjQ3OGU4NTI4YjcwNTcwMTgxMDYzMDhhMDMzODJmOWM2MGRkNjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVlN2Y4NwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDAyNDc4ZTg1MjhiNzA1NzAxODEwNjMwOGEwMzM4MmY5YzYwZGQ2MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAwMzU3M2JmYTQ4OTM5ZGQxYzJiM2U4NzVmMTkwNmIwODI2NjJlYTcgYi9mdXp6ZXIvY29ycHVzLzAwMzU3M2JmYTQ4OTM5ZGQxYzJiM2U4NzVmMTkwNmIwODI2NjJlYTcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVhZGUwNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDAzNTczYmZhNDg5MzlkZDFjMmIzZTg3NWYxOTA2YjA4MjY2MmVhNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAwNjM1ODRkOTllNTU5ZDk1Zjc1NzQzMDNlZmFhYTdkNjZhYTEwNDMgYi9mdXp6ZXIvY29ycHVzLzAwNjM1ODRkOTllNTU5ZDk1Zjc1NzQzMDNlZmFhYTdkNjZhYTEwNDMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JjOGU0MAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDA2MzU4NGQ5OWU1NTlkOTVmNzU3NDMwM2VmYWFhN2Q2NmFhMTA0MwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAwNjgyMDllYzQ0YjViY2M3NmRmNWZkMzkwYmVlMzQ1MWE5MzFmNzUgYi9mdXp6ZXIvY29ycHVzLzAwNjgyMDllYzQ0YjViY2M3NmRmNWZkMzkwYmVlMzQ1MWE5MzFmNzUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQwM2UzMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDA2ODIwOWVjNDRiNWJjYzc2ZGY1ZmQzOTBiZWUzNDUxYTkzMWY3NQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAwYWJhNjhlMGI0OWE3MGE1ZDliZDRlZTM2M2VhY2YxMDY1MTk1ODYgYi9mdXp6ZXIvY29ycHVzLzAwYWJhNjhlMGI0OWE3MGE1ZDliZDRlZTM2M2VhY2YxMDY1MTk1ODYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNiZGFkMQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDBhYmE2OGUwYjQ5YTcwYTVkOWJkNGVlMzYzZWFjZjEwNjUxOTU4NgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAwZjY1NDYxODk5ZGIxZTIwYmNmYmMyN2E5ZjZhMGMyZTU2M2E3MGYgYi9mdXp6ZXIvY29ycHVzLzAwZjY1NDYxODk5ZGIxZTIwYmNmYmMyN2E5ZjZhMGMyZTU2M2E3MGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRiOGE3OQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDBmNjU0NjE4OTlkYjFlMjBiY2ZiYzI3YTlmNmEwYzJlNTYzYTcwZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAxMDkzNTExY2UyMWJhMjE0MzM0OGYxZWI2Y2RjMzkwYjlkOTAwY2UgYi9mdXp6ZXIvY29ycHVzLzAxMDkzNTExY2UyMWJhMjE0MzM0OGYxZWI2Y2RjMzkwYjlkOTAwY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkxZTU3ZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDEwOTM1MTFjZTIxYmEyMTQzMzQ4ZjFlYjZjZGMzOTBiOWQ5MDBjZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAxOTFhOTU2MTQ2YzJiNmVlYThiMDA5ZWZiMGYxNjU4OWQ0NGE4NTYgYi9mdXp6ZXIvY29ycHVzLzAxOTFhOTU2MTQ2YzJiNmVlYThiMDA5ZWZiMGYxNjU4OWQ0NGE4NTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUzZmQ2NQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDE5MWE5NTYxNDZjMmI2ZWVhOGIwMDllZmIwZjE2NTg5ZDQ0YTg1NgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAxOTgwZGVhNWEwMTAxODdmMzFlYTUwNWZkZjFiM2Y3ZTNlMmM1NTkgYi9mdXp6ZXIvY29ycHVzLzAxOTgwZGVhNWEwMTAxODdmMzFlYTUwNWZkZjFiM2Y3ZTNlMmM1NTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUzY2M2YwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDE5ODBkZWE1YTAxMDE4N2YzMWVhNTA1ZmRmMWIzZjdlM2UyYzU1OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAxYjk1MTc3NWJjNmNkNGY1NDQ2MTU5N2U2NWI4NGU0NGMyOTI0MDIgYi9mdXp6ZXIvY29ycHVzLzAxYjk1MTc3NWJjNmNkNGY1NDQ2MTU5N2U2NWI4NGU0NGMyOTI0MDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVlMjM0MgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDFiOTUxNzc1YmM2Y2Q0ZjU0NDYxNTk3ZTY1Yjg0ZTQ0YzI5MjQwMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAxY2YzZjM5YWNkOTU0NzI2OTVlN2E5MmIyN2I2OWU3Y2YxYWZmODggYi9mdXp6ZXIvY29ycHVzLzAxY2YzZjM5YWNkOTU0NzI2OTVlN2E5MmIyN2I2OWU3Y2YxYWZmODgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUzMjAyZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDFjZjNmMzlhY2Q5NTQ3MjY5NWU3YTkyYjI3YjY5ZTdjZjFhZmY4OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAyMTM3ZGRjNmQ0YzhhMDNjY2U1ODdmMGYyOTVmOGExNGRjMGU5NjAgYi9mdXp6ZXIvY29ycHVzLzAyMTM3ZGRjNmQ0YzhhMDNjY2U1ODdmMGYyOTVmOGExNGRjMGU5NjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ0OTQzOQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDIxMzdkZGM2ZDRjOGEwM2NjZTU4N2YwZjI5NWY4YTE0ZGMwZTk2MApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAyMjVhZWRhYWJhMDYyMjQ2MzBlOGM3YjY0MWY5Zjk4N2QzOGMyOWQgYi9mdXp6ZXIvY29ycHVzLzAyMjVhZWRhYWJhMDYyMjQ2MzBlOGM3YjY0MWY5Zjk4N2QzOGMyOWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA4OTlkYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDIyNWFlZGFhYmEwNjIyNDYzMGU4YzdiNjQxZjlmOTg3ZDM4YzI5ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAyMjc0ZDQ5Mjg2MzQwNWYxNzg4NjAxODU1MjBlMzgwYjkyNTNkZDEgYi9mdXp6ZXIvY29ycHVzLzAyMjc0ZDQ5Mjg2MzQwNWYxNzg4NjAxODU1MjBlMzgwYjkyNTNkZDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE0MjI3YwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDIyNzRkNDkyODYzNDA1ZjE3ODg2MDE4NTUyMGUzODBiOTI1M2RkMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAyMzI5MTI5ZWIxYjM2NDdmY2M2NWI2NzA0MTNlMzZmYTZmZmFjZDkgYi9mdXp6ZXIvY29ycHVzLzAyMzI5MTI5ZWIxYjM2NDdmY2M2NWI2NzA0MTNlMzZmYTZmZmFjZDkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThiYjJhNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDIzMjkxMjllYjFiMzY0N2ZjYzY1YjY3MDQxM2UzNmZhNmZmYWNkOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAyNDJjMTg0MDI5NzgwNjA4YmQ1MmM0OTg4M2ExODhmMzMzYjkwZjUgYi9mdXp6ZXIvY29ycHVzLzAyNDJjMTg0MDI5NzgwNjA4YmQ1MmM0OTg4M2ExODhmMzMzYjkwZjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJlNGU1NAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDI0MmMxODQwMjk3ODA2MDhiZDUyYzQ5ODgzYTE4OGYzMzNiOTBmNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAyOWMxYmMzOGVlM2E2YTllNmQxY2Y5NWI0MjFmMDZlODY4YThjYzAgYi9mdXp6ZXIvY29ycHVzLzAyOWMxYmMzOGVlM2E2YTllNmQxY2Y5NWI0MjFmMDZlODY4YThjYzAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJkM2M1ZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDI5YzFiYzM4ZWUzYTZhOWU2ZDFjZjk1YjQyMWYwNmU4NjhhOGNjMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAyYmVkN2QxYjQ4MmQ3YjYyYmU1MzFlZWQ3MTU3NjNiMDg3MmQ2YTUgYi9mdXp6ZXIvY29ycHVzLzAyYmVkN2QxYjQ4MmQ3YjYyYmU1MzFlZWQ3MTU3NjNiMDg3MmQ2YTUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE5MjBkOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDJiZWQ3ZDFiNDgyZDdiNjJiZTUzMWVlZDcxNTc2M2IwODcyZDZhNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAyYzcwNWY5M2MxZjA3NWI1ZTQ3MzkwOWYzNWI2NTJhMWZlNWJmODAgYi9mdXp6ZXIvY29ycHVzLzAyYzcwNWY5M2MxZjA3NWI1ZTQ3MzkwOWYzNWI2NTJhMWZlNWJmODAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYwMzUwMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDJjNzA1ZjkzYzFmMDc1YjVlNDczOTA5ZjM1YjY1MmExZmU1YmY4MApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAyZTQzODM1YzM4NzRkNzI0YjE4NmIwZDAyNGFkZDY4MWIxZjkyMTkgYi9mdXp6ZXIvY29ycHVzLzAyZTQzODM1YzM4NzRkNzI0YjE4NmIwZDAyNGFkZDY4MWIxZjkyMTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc2M2UyMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDJlNDM4MzVjMzg3NGQ3MjRiMTg2YjBkMDI0YWRkNjgxYjFmOTIxOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAyZmI2MmNlODY0Yjc2MzdmMTQ4MThjNDExMzQ4Y2FlMzAzOTJhOWUgYi9mdXp6ZXIvY29ycHVzLzAyZmI2MmNlODY0Yjc2MzdmMTQ4MThjNDExMzQ4Y2FlMzAzOTJhOWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFiNmM4YgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDJmYjYyY2U4NjRiNzYzN2YxNDgxOGM0MTEzNDhjYWUzMDM5MmE5ZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAzMDQ4MWFmY2ZlMDQ3Zjg1ODQzOTFkYzY0YjkzMDcyNzM1OTBiNmYgYi9mdXp6ZXIvY29ycHVzLzAzMDQ4MWFmY2ZlMDQ3Zjg1ODQzOTFkYzY0YjkzMDcyNzM1OTBiNmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJmODMzNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDMwNDgxYWZjZmUwNDdmODU4NDM5MWRjNjRiOTMwNzI3MzU5MGI2ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAzMWUzMTE4MDBmZjRlNjAzODJmMThmODU0NDE4ODcwZmQ0YWVmMTMgYi9mdXp6ZXIvY29ycHVzLzAzMWUzMTE4MDBmZjRlNjAzODJmMThmODU0NDE4ODcwZmQ0YWVmMTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcwNWI2ZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDMxZTMxMTgwMGZmNGU2MDM4MmYxOGY4NTQ0MTg4NzBmZDRhZWYxMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAzMjA1NTE2NzQ5NTZjZjEzZDk4MjdmOTk0OTBiMDMzOWQ1OWU2NzIgYi9mdXp6ZXIvY29ycHVzLzAzMjA1NTE2NzQ5NTZjZjEzZDk4MjdmOTk0OTBiMDMzOWQ1OWU2NzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZjMDQyMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDMyMDU1MTY3NDk1NmNmMTNkOTgyN2Y5OTQ5MGIwMzM5ZDU5ZTY3MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAzMzliZTdlZTZjMGEyNTlkNjJiZDUzM2NjNmJjMWQ5NDYxMmQ1YWUgYi9mdXp6ZXIvY29ycHVzLzAzMzliZTdlZTZjMGEyNTlkNjJiZDUzM2NjNmJjMWQ5NDYxMmQ1YWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ExMzdkNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDMzOWJlN2VlNmMwYTI1OWQ2MmJkNTMzY2M2YmMxZDk0NjEyZDVhZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAzNDI3Njc4MWIxNzMzMzhjNjcwZDgxOWFmMGFiNDMyMWQ2YWE1MGQgYi9mdXp6ZXIvY29ycHVzLzAzNDI3Njc4MWIxNzMzMzhjNjcwZDgxOWFmMGFiNDMyMWQ2YWE1MGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNhMTA5YwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDM0Mjc2NzgxYjE3MzMzOGM2NzBkODE5YWYwYWI0MzIxZDZhYTUwZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAzNDU0ZTE1ZGJjNTFkN2RlMTEyNmQxZGZiYWJhMTAxYjQ4MzMwOWMgYi9mdXp6ZXIvY29ycHVzLzAzNDU0ZTE1ZGJjNTFkN2RlMTEyNmQxZGZiYWJhMTAxYjQ4MzMwOWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ3ZTMzMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDM0NTRlMTVkYmM1MWQ3ZGUxMTI2ZDFkZmJhYmExMDFiNDgzMzA5YwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAzODVhM2ZmZTJlNWM3OTllNDc5NDAwNjY5YmUyYzI5ZDYyNzY1MzEgYi9mdXp6ZXIvY29ycHVzLzAzODVhM2ZmZTJlNWM3OTllNDc5NDAwNjY5YmUyYzI5ZDYyNzY1MzEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDliNmFmNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDM4NWEzZmZlMmU1Yzc5OWU0Nzk0MDA2NjliZTJjMjlkNjI3NjUzMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAzOWQ2MmZjYzE4ZWNkOGE5MWU4YmE2MzFjMTc5OTExYThkYjM0MGUgYi9mdXp6ZXIvY29ycHVzLzAzOWQ2MmZjYzE4ZWNkOGE5MWU4YmE2MzFjMTc5OTExYThkYjM0MGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMxYzJhZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDM5ZDYyZmNjMThlY2Q4YTkxZThiYTYzMWMxNzk5MTFhOGRiMzQwZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAzYjMxMGY4ZTFjMTZjNTdlOGYyNjNjM2QyMDQ0OGE5YzBhMWQwMGUgYi9mdXp6ZXIvY29ycHVzLzAzYjMxMGY4ZTFjMTZjNTdlOGYyNjNjM2QyMDQ0OGE5YzBhMWQwMGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAzMDEzOQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDNiMzEwZjhlMWMxNmM1N2U4ZjI2M2MzZDIwNDQ4YTljMGExZDAwZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzAzYjdiYzBlZjg2NDY1N2RmNzc1NmUyZjM4ZmM5YzEwOGY0ZWRmYTAgYi9mdXp6ZXIvY29ycHVzLzAzYjdiYzBlZjg2NDY1N2RmNzc1NmUyZjM4ZmM5YzEwOGY0ZWRmYTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGViMzkxZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDNiN2JjMGVmODY0NjU3ZGY3NzU2ZTJmMzhmYzljMTA4ZjRlZGZhMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA0ZGZlOTAzMDQ5ZGYzZWIwNzAxYTQ3ODVmNTYxN2E3YTJkNDczNWMgYi9mdXp6ZXIvY29ycHVzLzA0ZGZlOTAzMDQ5ZGYzZWIwNzAxYTQ3ODVmNTYxN2E3YTJkNDczNWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UzY2YyNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDRkZmU5MDMwNDlkZjNlYjA3MDFhNDc4NWY1NjE3YTdhMmQ0NzM1YwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA0ZTZkZDVhODg4NjY3YmMyMjVlN2Q5ZWFjNGU1OGI2NTA0NWI0MmIgYi9mdXp6ZXIvY29ycHVzLzA0ZTZkZDVhODg4NjY3YmMyMjVlN2Q5ZWFjNGU1OGI2NTA0NWI0MmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjViN2U0ZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDRlNmRkNWE4ODg2NjdiYzIyNWU3ZDllYWM0ZTU4YjY1MDQ1YjQyYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA1MDBjZDMyYWUzMTVhZjFiZjUzOGVlY2Q0NTcyY2M3NGFiOTQ5MDUgYi9mdXp6ZXIvY29ycHVzLzA1MDBjZDMyYWUzMTVhZjFiZjUzOGVlY2Q0NTcyY2M3NGFiOTQ5MDUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM3ZWY1MQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDUwMGNkMzJhZTMxNWFmMWJmNTM4ZWVjZDQ1NzJjYzc0YWI5NDkwNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA1MGU5MTMwNmNlYmM4ZjExYjAzMmViOWU5ZDY2MmU4NjJlOTJhM2MgYi9mdXp6ZXIvY29ycHVzLzA1MGU5MTMwNmNlYmM4ZjExYjAzMmViOWU5ZDY2MmU4NjJlOTJhM2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMyMDNkZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDUwZTkxMzA2Y2ViYzhmMTFiMDMyZWI5ZTlkNjYyZTg2MmU5MmEzYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA1MTc4MTQxOGMzYjRjOTFjM2U4NGZlMWMyNjJkMmE3ZTVhZWRmMWIgYi9mdXp6ZXIvY29ycHVzLzA1MTc4MTQxOGMzYjRjOTFjM2U4NGZlMWMyNjJkMmE3ZTVhZWRmMWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM5MTU4OAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDUxNzgxNDE4YzNiNGM5MWMzZTg0ZmUxYzI2MmQyYTdlNWFlZGYxYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA1MWRmOThkNTZlMTY2NGNhMjE3OWI1MTQ4NWJjYjQ5NzI4Y2QzYmUgYi9mdXp6ZXIvY29ycHVzLzA1MWRmOThkNTZlMTY2NGNhMjE3OWI1MTQ4NWJjYjQ5NzI4Y2QzYmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZiNDg1YgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDUxZGY5OGQ1NmUxNjY0Y2EyMTc5YjUxNDg1YmNiNDk3MjhjZDNiZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA1MWYyZTU0YmM4MDRjYzUwZmU5YzIyNjJlOWQ1ZWM2NzA2MWFlNjUgYi9mdXp6ZXIvY29ycHVzLzA1MWYyZTU0YmM4MDRjYzUwZmU5YzIyNjJlOWQ1ZWM2NzA2MWFlNjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU5YzRiNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDUxZjJlNTRiYzgwNGNjNTBmZTljMjI2MmU5ZDVlYzY3MDYxYWU2NQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA1NTM5ZDcyMTY5MmFjZDBkYjAxNTY5ODk4MWQzMWI5MjM0ODVhM2QgYi9mdXp6ZXIvY29ycHVzLzA1NTM5ZDcyMTY5MmFjZDBkYjAxNTY5ODk4MWQzMWI5MjM0ODVhM2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFjZTQwNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDU1MzlkNzIxNjkyYWNkMGRiMDE1Njk4OTgxZDMxYjkyMzQ4NWEzZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA1NWEzMDlmNzk1Y2MwZDE4ZmE5MzZhNzBkYzNmYmRiMjBmMTZhMGEgYi9mdXp6ZXIvY29ycHVzLzA1NWEzMDlmNzk1Y2MwZDE4ZmE5MzZhNzBkYzNmYmRiMjBmMTZhMGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZmZGI0MwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDU1YTMwOWY3OTVjYzBkMThmYTkzNmE3MGRjM2ZiZGIyMGYxNmEwYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA1NmZlOWFjY2MxOGQ3MDJmNzQ5NDdhMDQxZGZhMzUyODU5NWEyOGUgYi9mdXp6ZXIvY29ycHVzLzA1NmZlOWFjY2MxOGQ3MDJmNzQ5NDdhMDQxZGZhMzUyODU5NWEyOGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNlYzFiNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDU2ZmU5YWNjYzE4ZDcwMmY3NDk0N2EwNDFkZmEzNTI4NTk1YTI4ZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA1OGQyZmZiNzA3YWE5YTI1NmY4YTI3YjQ4MmMzNTFkYzU5ZDk1NjIgYi9mdXp6ZXIvY29ycHVzLzA1OGQyZmZiNzA3YWE5YTI1NmY4YTI3YjQ4MmMzNTFkYzU5ZDk1NjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUzZGJkYQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDU4ZDJmZmI3MDdhYTlhMjU2ZjhhMjdiNDgyYzM1MWRjNTlkOTU2MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA1OTI3NzNjNzY5M2ZjYjc0NmZjY2NhZTM2ZTAxOGM4MTZkNzI1NDggYi9mdXp6ZXIvY29ycHVzLzA1OTI3NzNjNzY5M2ZjYjc0NmZjY2NhZTM2ZTAxOGM4MTZkNzI1NDgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQyN2VmYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDU5Mjc3M2M3NjkzZmNiNzQ2ZmNjY2FlMzZlMDE4YzgxNmQ3MjU0OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA1OTM5MzBjOTMzYTczYjBhZTc0N2QxYzU3ZjNlOGNlMTk5MGQ2NmMgYi9mdXp6ZXIvY29ycHVzLzA1OTM5MzBjOTMzYTczYjBhZTc0N2QxYzU3ZjNlOGNlMTk5MGQ2NmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZmMDI2ZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDU5MzkzMGM5MzNhNzNiMGFlNzQ3ZDFjNTdmM2U4Y2UxOTkwZDY2YwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA1OWM0MTY4YzQ1NjdkOGRkYWNlOTA1NjNhZTNkNGZhYWQ4YzVhYWQgYi9mdXp6ZXIvY29ycHVzLzA1OWM0MTY4YzQ1NjdkOGRkYWNlOTA1NjNhZTNkNGZhYWQ4YzVhYWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVlYjA3NgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDU5YzQxNjhjNDU2N2Q4ZGRhY2U5MDU2M2FlM2Q0ZmFhZDhjNWFhZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA1YTUzZWE2NTU2ODIyZWUwYmE1MGNmMTE0NzdjZGM4MmJjYTA0MmIgYi9mdXp6ZXIvY29ycHVzLzA1YTUzZWE2NTU2ODIyZWUwYmE1MGNmMTE0NzdjZGM4MmJjYTA0MmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzliZjQ2ZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDVhNTNlYTY1NTY4MjJlZTBiYTUwY2YxMTQ3N2NkYzgyYmNhMDQyYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA1YWMyYjI5NWY0NTdlNmQ4MmFmNzBlMDMxOTcwNThlMjQzMzMwYTUgYi9mdXp6ZXIvY29ycHVzLzA1YWMyYjI5NWY0NTdlNmQ4MmFmNzBlMDMxOTcwNThlMjQzMzMwYTUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVjMjQwZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDVhYzJiMjk1ZjQ1N2U2ZDgyYWY3MGUwMzE5NzA1OGUyNDMzMzBhNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA1YmE2ZWVkM2FhZjFlMTE4ODFmMTA4ZTM2MzcwNWVhNjY4NGI1ZWUgYi9mdXp6ZXIvY29ycHVzLzA1YmE2ZWVkM2FhZjFlMTE4ODFmMTA4ZTM2MzcwNWVhNjY4NGI1ZWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM0ZDM5OQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDViYTZlZWQzYWFmMWUxMTg4MWYxMDhlMzYzNzA1ZWE2Njg0YjVlZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA1ZGU0Mjc4NzExNGJkMjMwYzAwYmMyODk3NGMyZTBhYmM1Mjc2Y2QgYi9mdXp6ZXIvY29ycHVzLzA1ZGU0Mjc4NzExNGJkMjMwYzAwYmMyODk3NGMyZTBhYmM1Mjc2Y2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJmNmQzZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDVkZTQyNzg3MTE0YmQyMzBjMDBiYzI4OTc0YzJlMGFiYzUyNzZjZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA1ZTQxODQxNjk0MDhiZGRlZjRlM2VkOTM5NWIyNWIzMzA3YzBkYzQgYi9mdXp6ZXIvY29ycHVzLzA1ZTQxODQxNjk0MDhiZGRlZjRlM2VkOTM5NWIyNWIzMzA3YzBkYzQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQxMDE4MAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDVlNDE4NDE2OTQwOGJkZGVmNGUzZWQ5Mzk1YjI1YjMzMDdjMGRjNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA1ZmQyNWM5ZTcxODZhMDQ4ZTRiMDQ4MzE2NzI1ZDdkOGUyOTU3ZjIgYi9mdXp6ZXIvY29ycHVzLzA1ZmQyNWM5ZTcxODZhMDQ4ZTRiMDQ4MzE2NzI1ZDdkOGUyOTU3ZjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRhNjFjOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDVmZDI1YzllNzE4NmEwNDhlNGIwNDgzMTY3MjVkN2Q4ZTI5NTdmMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA2MzU2MWJhYmM3ZGQxMjVjMDE5OWNlOTg4YjJkOWUzZWNmNWIxNjYgYi9mdXp6ZXIvY29ycHVzLzA2MzU2MWJhYmM3ZGQxMjVjMDE5OWNlOTg4YjJkOWUzZWNmNWIxNjYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA5MmM3MQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDYzNTYxYmFiYzdkZDEyNWMwMTk5Y2U5ODhiMmQ5ZTNlY2Y1YjE2NgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA2NWU5NDBmYTVjZWM4YjMxOTg0NjFhY2Y4ZjUyODRlYzQ1ZjU4OGIgYi9mdXp6ZXIvY29ycHVzLzA2NWU5NDBmYTVjZWM4YjMxOTg0NjFhY2Y4ZjUyODRlYzQ1ZjU4OGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdiOTJlMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDY1ZTk0MGZhNWNlYzhiMzE5ODQ2MWFjZjhmNTI4NGVjNDVmNTg4YgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA2NzY2MDk0NTIyNzYyZThmNGMxNzk1M2E3YTQzN2U1ZmYwY2UyZjUgYi9mdXp6ZXIvY29ycHVzLzA2NzY2MDk0NTIyNzYyZThmNGMxNzk1M2E3YTQzN2U1ZmYwY2UyZjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdjNjdhMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDY3NjYwOTQ1MjI3NjJlOGY0YzE3OTUzYTdhNDM3ZTVmZjBjZTJmNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA2N2NjNDg0MTFhYWVhNDkzYTE0MDUyZWIxOTc0Y2EyYjM0Nzc4NDYgYi9mdXp6ZXIvY29ycHVzLzA2N2NjNDg0MTFhYWVhNDkzYTE0MDUyZWIxOTc0Y2EyYjM0Nzc4NDYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk3Y2RkZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDY3Y2M0ODQxMWFhZWE0OTNhMTQwNTJlYjE5NzRjYTJiMzQ3Nzg0NgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA2OWUzNTZhZWI0NGMzMzg0YWMyMjMwOWQ2NjAxZDc1MzM3Y2UyZDAgYi9mdXp6ZXIvY29ycHVzLzA2OWUzNTZhZWI0NGMzMzg0YWMyMjMwOWQ2NjAxZDc1MzM3Y2UyZDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZiYTljYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDY5ZTM1NmFlYjQ0YzMzODRhYzIyMzA5ZDY2MDFkNzUzMzdjZTJkMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA2YThlMDJkMGEyZmEyOWNlZTQ5YjQ0YjFhZTlhNGMzZmI0ZTI0MDUgYi9mdXp6ZXIvY29ycHVzLzA2YThlMDJkMGEyZmEyOWNlZTQ5YjQ0YjFhZTlhNGMzZmI0ZTI0MDUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAzZWFjZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDZhOGUwMmQwYTJmYTI5Y2VlNDliNDRiMWFlOWE0YzNmYjRlMjQwNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA2YjhhZWVkMTg3OWQyODZiM2U0MjM0MTMyZmRkMjE2OWM2OTNhZTIgYi9mdXp6ZXIvY29ycHVzLzA2YjhhZWVkMTg3OWQyODZiM2U0MjM0MTMyZmRkMjE2OWM2OTNhZTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUxN2MzNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDZiOGFlZWQxODc5ZDI4NmIzZTQyMzQxMzJmZGQyMTY5YzY5M2FlMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA2YjlhODQ2NGM1NjI1N2IyZjdkNTEyMTFkYTg0Y2VhZDJhNWUxNzEgYi9mdXp6ZXIvY29ycHVzLzA2YjlhODQ2NGM1NjI1N2IyZjdkNTEyMTFkYTg0Y2VhZDJhNWUxNzEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWViY2NjOQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDZiOWE4NDY0YzU2MjU3YjJmN2Q1MTIxMWRhODRjZWFkMmE1ZTE3MQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA2YzhlNzU3MDM0YmRhYzM1MjVlMTE1NTA4OWI0ZGZjMDEzODZiYjIgYi9mdXp6ZXIvY29ycHVzLzA2YzhlNzU3MDM0YmRhYzM1MjVlMTE1NTA4OWI0ZGZjMDEzODZiYjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI1YmIyNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDZjOGU3NTcwMzRiZGFjMzUyNWUxMTU1MDg5YjRkZmMwMTM4NmJiMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA3MDYwODc1NDgyNTEwMDIxZTdlNzIzZTAzZDE1YjU4Yjg5ZDIzYmEgYi9mdXp6ZXIvY29ycHVzLzA3MDYwODc1NDgyNTEwMDIxZTdlNzIzZTAzZDE1YjU4Yjg5ZDIzYmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2YWI0ZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDcwNjA4NzU0ODI1MTAwMjFlN2U3MjNlMDNkMTViNThiODlkMjNiYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA3MGViYWFlNTJlZjMwOGYzOWQzYjZkMmFlYzlkNDk4NzY0NWRiZmUgYi9mdXp6ZXIvY29ycHVzLzA3MGViYWFlNTJlZjMwOGYzOWQzYjZkMmFlYzlkNDk4NzY0NWRiZmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQxOTc4NAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDcwZWJhYWU1MmVmMzA4ZjM5ZDNiNmQyYWVjOWQ0OTg3NjQ1ZGJmZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA3MTMwNDZlZTViODU2OWY2ZDY4ZTQ0ODkyYTI4NGNiOGQwN2YxZTYgYi9mdXp6ZXIvY29ycHVzLzA3MTMwNDZlZTViODU2OWY2ZDY4ZTQ0ODkyYTI4NGNiOGQwN2YxZTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgyZTIzNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDcxMzA0NmVlNWI4NTY5ZjZkNjhlNDQ4OTJhMjg0Y2I4ZDA3ZjFlNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA3MmQzZTY5NDE5ZmFlMzBiYjRkMDZmNWIzYjY4Mjk5OGI0MTNkZjMgYi9mdXp6ZXIvY29ycHVzLzA3MmQzZTY5NDE5ZmFlMzBiYjRkMDZmNWIzYjY4Mjk5OGI0MTNkZjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgzZmNiYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDcyZDNlNjk0MTlmYWUzMGJiNGQwNmY1YjNiNjgyOTk4YjQxM2RmMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA3NDVmYmYyMDc2ZGQzNmU3MWQ1MTc0ODZjNTFmYmIyOTI3NWZiOTkgYi9mdXp6ZXIvY29ycHVzLzA3NDVmYmYyMDc2ZGQzNmU3MWQ1MTc0ODZjNTFmYmIyOTI3NWZiOTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMzN2EzNgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDc0NWZiZjIwNzZkZDM2ZTcxZDUxNzQ4NmM1MWZiYjI5Mjc1ZmI5OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA3N2JmZTc5YjZiOGUyZjA3ZTUxNDJjYjBmZjdmMmFmMTA2Yzk4MWQgYi9mdXp6ZXIvY29ycHVzLzA3N2JmZTc5YjZiOGUyZjA3ZTUxNDJjYjBmZjdmMmFmMTA2Yzk4MWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE5MTAwYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDc3YmZlNzliNmI4ZTJmMDdlNTE0MmNiMGZmN2YyYWYxMDZjOTgxZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA3ODE0Y2JjYjI0ZTBiNTU0NmU5YWE4NjRlN2Y3YWE5YTE2OGM1NjQgYi9mdXp6ZXIvY29ycHVzLzA3ODE0Y2JjYjI0ZTBiNTU0NmU5YWE4NjRlN2Y3YWE5YTE2OGM1NjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAwN2NmMQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDc4MTRjYmNiMjRlMGI1NTQ2ZTlhYTg2NGU3ZjdhYTlhMTY4YzU2NApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA3OThjZjcxNjdiNjFlZDJjZmIxODAwMDExODAxYmM2OGM2NTIxNGQgYi9mdXp6ZXIvY29ycHVzLzA3OThjZjcxNjdiNjFlZDJjZmIxODAwMDExODAxYmM2OGM2NTIxNGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI4NjU2YQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDc5OGNmNzE2N2I2MWVkMmNmYjE4MDAwMTE4MDFiYzY4YzY1MjE0ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA3ZjZjNjkyOWVmZjc3YmQwZDU2ZTgyZWE0NzM2ZWMyOGY3YWVhM2EgYi9mdXp6ZXIvY29ycHVzLzA3ZjZjNjkyOWVmZjc3YmQwZDU2ZTgyZWE0NzM2ZWMyOGY3YWVhM2EKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRlMjdmOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDdmNmM2OTI5ZWZmNzdiZDBkNTZlODJlYTQ3MzZlYzI4ZjdhZWEzYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA4MWVhNDIzMmFlN2ZkZWNjMDE5ZWMxMzA4OGMyMjRhNzNiMGI0NTEgYi9mdXp6ZXIvY29ycHVzLzA4MWVhNDIzMmFlN2ZkZWNjMDE5ZWMxMzA4OGMyMjRhNzNiMGI0NTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg5YzU0ZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDgxZWE0MjMyYWU3ZmRlY2MwMTllYzEzMDg4YzIyNGE3M2IwYjQ1MQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA4NDBlNjA4NzA0NmZjMjNlODZlMmMzMzFhZWRmYTY4MTIzMTA4ZTIgYi9mdXp6ZXIvY29ycHVzLzA4NDBlNjA4NzA0NmZjMjNlODZlMmMzMzFhZWRmYTY4MTIzMTA4ZTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM2OWVjNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDg0MGU2MDg3MDQ2ZmMyM2U4NmUyYzMzMWFlZGZhNjgxMjMxMDhlMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA4NDJkN2QwYzVmNTFkNzU2NThhOGQwNjBjZThiNjlkYzVkZjYxZDUgYi9mdXp6ZXIvY29ycHVzLzA4NDJkN2QwYzVmNTFkNzU2NThhOGQwNjBjZThiNjlkYzVkZjYxZDUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlkNzlhZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDg0MmQ3ZDBjNWY1MWQ3NTY1OGE4ZDA2MGNlOGI2OWRjNWRmNjFkNQpAQCAtMCwwICsxIEBACiv///////////////////91KmX///////////////////////8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA4ODc2NGMxMTYyYjI3Yjg3ZDA0OWJkMmI0MTIxYWFhOGY0OWQ2ZTkgYi9mdXp6ZXIvY29ycHVzLzA4ODc2NGMxMTYyYjI3Yjg3ZDA0OWJkMmI0MTIxYWFhOGY0OWQ2ZTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdkYjhhOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDg4NzY0YzExNjJiMjdiODdkMDQ5YmQyYjQxMjFhYWE4ZjQ5ZDZlOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA4ODk4MzAxYWIzNjQ3NGIzZGZiNjQ2MmE2OTliMTkwMGI3ZmU2YTMgYi9mdXp6ZXIvY29ycHVzLzA4ODk4MzAxYWIzNjQ3NGIzZGZiNjQ2MmE2OTliMTkwMGI3ZmU2YTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ5ZDlmZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDg4OTgzMDFhYjM2NDc0YjNkZmI2NDYyYTY5OWIxOTAwYjdmZTZhMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA4OTAyMjcyZGFmMDhlNmJmMWI1NDczM2ZmOTU5YjJkNmExNWJhNzkgYi9mdXp6ZXIvY29ycHVzLzA4OTAyMjcyZGFmMDhlNmJmMWI1NDczM2ZmOTU5YjJkNmExNWJhNzkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY5M2RlOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDg5MDIyNzJkYWYwOGU2YmYxYjU0NzMzZmY5NTliMmQ2YTE1YmE3OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA4OWUxMzg3YThlYTczYWZkODdmMDFiZmE3NWFmOTMyN2RkZmUzYzUgYi9mdXp6ZXIvY29ycHVzLzA4OWUxMzg3YThlYTczYWZkODdmMDFiZmE3NWFmOTMyN2RkZmUzYzUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAwZjRiZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDg5ZTEzODdhOGVhNzNhZmQ4N2YwMWJmYTc1YWY5MzI3ZGRmZTNjNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA4YmEyMDViYzM4OWVlM2E3ZTQyYTQ3YTgwNDg5YTZmYzY4YjU5MjIgYi9mdXp6ZXIvY29ycHVzLzA4YmEyMDViYzM4OWVlM2E3ZTQyYTQ3YTgwNDg5YTZmYzY4YjU5MjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc4YzlhMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDhiYTIwNWJjMzg5ZWUzYTdlNDJhNDdhODA0ODlhNmZjNjhiNTkyMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA4YzRiMTUwNzllMGM1YTJlZWQ0NjA0NTM1Mjk5ZDE0NWEyM2MxNmMgYi9mdXp6ZXIvY29ycHVzLzA4YzRiMTUwNzllMGM1YTJlZWQ0NjA0NTM1Mjk5ZDE0NWEyM2MxNmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM5MDMyNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDhjNGIxNTA3OWUwYzVhMmVlZDQ2MDQ1MzUyOTlkMTQ1YTIzYzE2YwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA4YzRmNmY0YWJmYTZmYmRmMDQ0Nzc1ZmM5MWRlYTk5N2VjYThkYTEgYi9mdXp6ZXIvY29ycHVzLzA4YzRmNmY0YWJmYTZmYmRmMDQ0Nzc1ZmM5MWRlYTk5N2VjYThkYTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE4YTVhYQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDhjNGY2ZjRhYmZhNmZiZGYwNDQ3NzVmYzkxZGVhOTk3ZWNhOGRhMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA4ZjE1ZmM1MGQ4NGRjNjI2YTg3NDM3ZTNiNjgzM2Q3YjA0ZDczZTIgYi9mdXp6ZXIvY29ycHVzLzA4ZjE1ZmM1MGQ4NGRjNjI2YTg3NDM3ZTNiNjgzM2Q3YjA0ZDczZTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlhNmM2OQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDhmMTVmYzUwZDg0ZGM2MjZhODc0MzdlM2I2ODMzZDdiMDRkNzNlMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA4ZjcwMTFkZGEyZThkZjU0ZWQ0YTRjNzkzMjY0OGYwNjdkNzRiODggYi9mdXp6ZXIvY29ycHVzLzA4ZjcwMTFkZGEyZThkZjU0ZWQ0YTRjNzkzMjY0OGYwNjdkNzRiODgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg0Mzg3NwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDhmNzAxMWRkYTJlOGRmNTRlZDRhNGM3OTMyNjQ4ZjA2N2Q3NGI4OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA5MmQ1YWNkNDgyZTE2OWYxYTM1MjE1ODU2ZjhmYmQ1YTFlYmMzNTggYi9mdXp6ZXIvY29ycHVzLzA5MmQ1YWNkNDgyZTE2OWYxYTM1MjE1ODU2ZjhmYmQ1YTFlYmMzNTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFiZmJmZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDkyZDVhY2Q0ODJlMTY5ZjFhMzUyMTU4NTZmOGZiZDVhMWViYzM1OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA5MzQ4YTQzOGY0NGI5YmJkMmE5NDMyYmY4ODc4ZDk4YWMyZGQ5ZWYgYi9mdXp6ZXIvY29ycHVzLzA5MzQ4YTQzOGY0NGI5YmJkMmE5NDMyYmY4ODc4ZDk4YWMyZGQ5ZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRhNWUyOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDkzNDhhNDM4ZjQ0YjliYmQyYTk0MzJiZjg4NzhkOThhYzJkZDllZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA5M2M0OWJiOWJjY2RhYzg5OGZmYjJkNTljNmE2OGIyZTg5ZjJmOTYgYi9mdXp6ZXIvY29ycHVzLzA5M2M0OWJiOWJjY2RhYzg5OGZmYjJkNTljNmE2OGIyZTg5ZjJmOTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJhMzIzNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDkzYzQ5YmI5YmNjZGFjODk4ZmZiMmQ1OWM2YTY4YjJlODlmMmY5NgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA5NDA4YTMyMmJlZGY1MTlhM2M1ZDgyMTEzM2Q3MjJkODhiMjFjNTggYi9mdXp6ZXIvY29ycHVzLzA5NDA4YTMyMmJlZGY1MTlhM2M1ZDgyMTEzM2Q3MjJkODhiMjFjNTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IxYmJhNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDk0MDhhMzIyYmVkZjUxOWEzYzVkODIxMTMzZDcyMmQ4OGIyMWM1OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA5NDE1MzFlMjE1ZGNhMmQyNWQzMjA2YWU0NThhYzRmNGQyZDhkODggYi9mdXp6ZXIvY29ycHVzLzA5NDE1MzFlMjE1ZGNhMmQyNWQzMjA2YWU0NThhYzRmNGQyZDhkODgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjczNzE5ZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDk0MTUzMWUyMTVkY2EyZDI1ZDMyMDZhZTQ1OGFjNGY0ZDJkOGQ4OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA5NGFlZmUyMTBhYjA0MWYwMWQ5M2YyNWU3NzQ4MGVjMTEwNzg0M2YgYi9mdXp6ZXIvY29ycHVzLzA5NGFlZmUyMTBhYjA0MWYwMWQ5M2YyNWU3NzQ4MGVjMTEwNzg0M2YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI5NjI4YwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDk0YWVmZTIxMGFiMDQxZjAxZDkzZjI1ZTc3NDgwZWMxMTA3ODQzZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA5NmVkZTU2NTY4MThhOWIzMzMyOWFlYjFhNmJmNzI2NTYyN2I2NDAgYi9mdXp6ZXIvY29ycHVzLzA5NmVkZTU2NTY4MThhOWIzMzMyOWFlYjFhNmJmNzI2NTYyN2I2NDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QyNzRkZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDk2ZWRlNTY1NjgxOGE5YjMzMzI5YWViMWE2YmY3MjY1NjI3YjY0MApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA5ODJjNzEzNWM4YWQzOTBiNGY4OWMxNjA4MjViNmQ5OGFiODAzYTYgYi9mdXp6ZXIvY29ycHVzLzA5ODJjNzEzNWM4YWQzOTBiNGY4OWMxNjA4MjViNmQ5OGFiODAzYTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA0NTA0ZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDk4MmM3MTM1YzhhZDM5MGI0Zjg5YzE2MDgyNWI2ZDk4YWI4MDNhNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA5OGM3NjZlZDg0ODcxZTFmZTBkNTVlMzQyMTc2MTQxYjg4YzZlMTggYi9mdXp6ZXIvY29ycHVzLzA5OGM3NjZlZDg0ODcxZTFmZTBkNTVlMzQyMTc2MTQxYjg4YzZlMTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhmMTk1ZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDk4Yzc2NmVkODQ4NzFlMWZlMGQ1NWUzNDIxNzYxNDFiODhjNmUxOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA5OWExOTI0M2NhZDIyNmI4NGZlZDFiOGRiMWJmYzNlNTExM2M0NWYgYi9mdXp6ZXIvY29ycHVzLzA5OWExOTI0M2NhZDIyNmI4NGZlZDFiOGRiMWJmYzNlNTExM2M0NWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA4ZThiNgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDk5YTE5MjQzY2FkMjI2Yjg0ZmVkMWI4ZGIxYmZjM2U1MTEzYzQ1ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzA5ZmYzMjhiMzdlNzIzZDZhNTJkNmM1Y2FkMTVlMzI4YTQ2ZDY3Y2MgYi9mdXp6ZXIvY29ycHVzLzA5ZmYzMjhiMzdlNzIzZDZhNTJkNmM1Y2FkMTVlMzI4YTQ2ZDY3Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdhNThjNgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMDlmZjMyOGIzN2U3MjNkNmE1MmQ2YzVjYWQxNWUzMjhhNDZkNjdjYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBhMDhiZGRlNTk3ZDk1YmVmMzFiM2YyZjY3OWRkY2IxYjgxNmYxMWIgYi9mdXp6ZXIvY29ycHVzLzBhMDhiZGRlNTk3ZDk1YmVmMzFiM2YyZjY3OWRkY2IxYjgxNmYxMWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM0NTlhOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGEwOGJkZGU1OTdkOTViZWYzMWIzZjJmNjc5ZGRjYjFiODE2ZjExYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBhMWYyMWY3YmNlZTVhMTUzYzJiYjBlNWY5YzE5NGE5OTdhOTA0MjYgYi9mdXp6ZXIvY29ycHVzLzBhMWYyMWY3YmNlZTVhMTUzYzJiYjBlNWY5YzE5NGE5OTdhOTA0MjYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMxOTMxMQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGExZjIxZjdiY2VlNWExNTNjMmJiMGU1ZjljMTk0YTk5N2E5MDQyNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBhMjMzMTVmZjYyYzBlYzhhNDhjOGU0NWRlMmU2NDA5MzIxZTRmZjUgYi9mdXp6ZXIvY29ycHVzLzBhMjMzMTVmZjYyYzBlYzhhNDhjOGU0NWRlMmU2NDA5MzIxZTRmZjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVjNjQwMQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGEyMzMxNWZmNjJjMGVjOGE0OGM4ZTQ1ZGUyZTY0MDkzMjFlNGZmNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBhNDg1YzA5YjliNzExNmMxMmIwYzA5ZDc2ZjM0YzQzYWFlMTM2YWEgYi9mdXp6ZXIvY29ycHVzLzBhNDg1YzA5YjliNzExNmMxMmIwYzA5ZDc2ZjM0YzQzYWFlMTM2YWEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFlMDE0ZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGE0ODVjMDliOWI3MTE2YzEyYjBjMDlkNzZmMzRjNDNhYWUxMzZhYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBhNWY2MTI0YzcxNWY5NGRkNTgzNGI3ZjAxMTdjOGEzNjcxNzYxMTcgYi9mdXp6ZXIvY29ycHVzLzBhNWY2MTI0YzcxNWY5NGRkNTgzNGI3ZjAxMTdjOGEzNjcxNzYxMTcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFkZjExYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGE1ZjYxMjRjNzE1Zjk0ZGQ1ODM0YjdmMDExN2M4YTM2NzE3NjExNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBhODNiZTcwMjc5MDk2N2U5MmE2ODFhZTUyMWUzNGY5ZGNiNzAzMmUgYi9mdXp6ZXIvY29ycHVzLzBhODNiZTcwMjc5MDk2N2U5MmE2ODFhZTUyMWUzNGY5ZGNiNzAzMmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI1NzZlNgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGE4M2JlNzAyNzkwOTY3ZTkyYTY4MWFlNTIxZTM0ZjlkY2I3MDMyZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBhOWNhZmE5ZGY3YTVmNmVkYjE4MjNlN2Q4NTRhYzQ2YTliMjQ0ZDIgYi9mdXp6ZXIvY29ycHVzLzBhOWNhZmE5ZGY3YTVmNmVkYjE4MjNlN2Q4NTRhYzQ2YTliMjQ0ZDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc1MDAwNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGE5Y2FmYTlkZjdhNWY2ZWRiMTgyM2U3ZDg1NGFjNDZhOWIyNDRkMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBhOWNmMzM0MzRlMjNmNmY0ZGI0ZTQ1ZGYzMTVjNGVjNzNjMmEyNjAgYi9mdXp6ZXIvY29ycHVzLzBhOWNmMzM0MzRlMjNmNmY0ZGI0ZTQ1ZGYzMTVjNGVjNzNjMmEyNjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJlYzhhZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGE5Y2YzMzQzNGUyM2Y2ZjRkYjRlNDVkZjMxNWM0ZWM3M2MyYTI2MApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBhYjQwZmJmMmI3NmRjYTgzNmZhNGZhMTIxY2EzOTM2NjNjYzJlN2IgYi9mdXp6ZXIvY29ycHVzLzBhYjQwZmJmMmI3NmRjYTgzNmZhNGZhMTIxY2EzOTM2NjNjYzJlN2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmExMDk1MgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGFiNDBmYmYyYjc2ZGNhODM2ZmE0ZmExMjFjYTM5MzY2M2NjMmU3YgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBiMGE3ZDE2Nzg0YWViYmQwNWNmNWE3YjJhZjkyZjM2NTcwMDRkOGIgYi9mdXp6ZXIvY29ycHVzLzBiMGE3ZDE2Nzg0YWViYmQwNWNmNWE3YjJhZjkyZjM2NTcwMDRkOGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVhYTliYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGIwYTdkMTY3ODRhZWJiZDA1Y2Y1YTdiMmFmOTJmMzY1NzAwNGQ4YgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBiMGUwZmE5Y2ZkZDMwY2FlNzgyM2QxZGNmNjIyYTJmNTA0ODg0ZjQgYi9mdXp6ZXIvY29ycHVzLzBiMGUwZmE5Y2ZkZDMwY2FlNzgyM2QxZGNmNjIyYTJmNTA0ODg0ZjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVmMmY3OAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGIwZTBmYTljZmRkMzBjYWU3ODIzZDFkY2Y2MjJhMmY1MDQ4ODRmNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBiNDVlYWY5Y2E2ZDkyOWM0MDlkMzQ0YjU1ZTkxZjVlNmUzNjk0MmYgYi9mdXp6ZXIvY29ycHVzLzBiNDVlYWY5Y2E2ZDkyOWM0MDlkMzQ0YjU1ZTkxZjVlNmUzNjk0MmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUwZWI1OQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGI0NWVhZjljYTZkOTI5YzQwOWQzNDRiNTVlOTFmNWU2ZTM2OTQyZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBiNDdmNzg3MDdjZjAwNTA1ODM4NGNkMWU3ZTAzNDg0NWIzMzJmZDcgYi9mdXp6ZXIvY29ycHVzLzBiNDdmNzg3MDdjZjAwNTA1ODM4NGNkMWU3ZTAzNDg0NWIzMzJmZDcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NjYmFhNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGI0N2Y3ODcwN2NmMDA1MDU4Mzg0Y2QxZTdlMDM0ODQ1YjMzMmZkNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBiNTNkNzgwZTk0NmYyOGQ4MjdlMzVhYzc3NzhkMTdmOGJiMTMwZmYgYi9mdXp6ZXIvY29ycHVzLzBiNTNkNzgwZTk0NmYyOGQ4MjdlMzVhYzc3NzhkMTdmOGJiMTMwZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIwMWMwMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGI1M2Q3ODBlOTQ2ZjI4ZDgyN2UzNWFjNzc3OGQxN2Y4YmIxMzBmZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBiNjg3OGQyODllZWFkMTZlOGZmNzg3ZmIwYmI2MzBmODM0YzlhY2MgYi9mdXp6ZXIvY29ycHVzLzBiNjg3OGQyODllZWFkMTZlOGZmNzg3ZmIwYmI2MzBmODM0YzlhY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhkYjQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGI2ODc4ZDI4OWVlYWQxNmU4ZmY3ODdmYjBiYjYzMGY4MzRjOWFjYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBiNzE5NzRhZjkxNWIyZjBjNmZkMzhiZDI3MDgyYzk5MjYyZTdiOGUgYi9mdXp6ZXIvY29ycHVzLzBiNzE5NzRhZjkxNWIyZjBjNmZkMzhiZDI3MDgyYzk5MjYyZTdiOGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU4OGJmOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGI3MTk3NGFmOTE1YjJmMGM2ZmQzOGJkMjcwODJjOTkyNjJlN2I4ZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBiNzNhZDVlMzYwYTU1YmVkYzhiZDNmOTA4NjkyYWExOTA4MmYxNjMgYi9mdXp6ZXIvY29ycHVzLzBiNzNhZDVlMzYwYTU1YmVkYzhiZDNmOTA4NjkyYWExOTA4MmYxNjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQxNzM0OQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGI3M2FkNWUzNjBhNTViZWRjOGJkM2Y5MDg2OTJhYTE5MDgyZjE2MwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBiOTUyNTI5MTZlMzc4OGI0ZTQ5NjAwZDM2NDZlMDY5ZmFkOGUzOTIgYi9mdXp6ZXIvY29ycHVzLzBiOTUyNTI5MTZlMzc4OGI0ZTQ5NjAwZDM2NDZlMDY5ZmFkOGUzOTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM5NjU4MgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGI5NTI1MjkxNmUzNzg4YjRlNDk2MDBkMzY0NmUwNjlmYWQ4ZTM5MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBiYTRjZmQ2N2MwOGVhYjIxZjFhNGVmMDJlOTY2YjdkOGE5ZWFiMjUgYi9mdXp6ZXIvY29ycHVzLzBiYTRjZmQ2N2MwOGVhYjIxZjFhNGVmMDJlOTY2YjdkOGE5ZWFiMjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA4NWIyMQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGJhNGNmZDY3YzA4ZWFiMjFmMWE0ZWYwMmU5NjZiN2Q4YTllYWIyNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBiYjUzMmI4MTBhMGIwZjEzZDQ3MzgzOGQ0Zjc2NzZiMjA2YmZjZjAgYi9mdXp6ZXIvY29ycHVzLzBiYjUzMmI4MTBhMGIwZjEzZDQ3MzgzOGQ0Zjc2NzZiMjA2YmZjZjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc1N2VhZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGJiNTMyYjgxMGEwYjBmMTNkNDczODM4ZDRmNzY3NmIyMDZiZmNmMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBiY2Q2ZTdkM2M1ZTFjZTNkMzE4NGJjNjRmYjM3ZWFkOGRlNDNhMTYgYi9mdXp6ZXIvY29ycHVzLzBiY2Q2ZTdkM2M1ZTFjZTNkMzE4NGJjNjRmYjM3ZWFkOGRlNDNhMTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlhNzI0ZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGJjZDZlN2QzYzVlMWNlM2QzMTg0YmM2NGZiMzdlYWQ4ZGU0M2ExNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBiZTA3YTg2YzBkZjUyNThlYmQ3MDQ0MmM0NmJiYmE1MDA5OTI3ZGMgYi9mdXp6ZXIvY29ycHVzLzBiZTA3YTg2YzBkZjUyNThlYmQ3MDQ0MmM0NmJiYmE1MDA5OTI3ZGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA5NzBkMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGJlMDdhODZjMGRmNTI1OGViZDcwNDQyYzQ2YmJiYTUwMDk5MjdkYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBjMmU5NmM0MGFlN2MyNDNmZmZjOTgyNWE0NGIwMGQyMDY0NDRiNTYgYi9mdXp6ZXIvY29ycHVzLzBjMmU5NmM0MGFlN2MyNDNmZmZjOTgyNWE0NGIwMGQyMDY0NDRiNTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU5MTE1MgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGMyZTk2YzQwYWU3YzI0M2ZmZmM5ODI1YTQ0YjAwZDIwNjQ0NGI1NgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBjM2I4MjllZmQ2YzFkZjQ3ZDRjZjkwM2M3ZWE5NmYxZThiNTRjZWUgYi9mdXp6ZXIvY29ycHVzLzBjM2I4MjllZmQ2YzFkZjQ3ZDRjZjkwM2M3ZWE5NmYxZThiNTRjZWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM5NWFiMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGMzYjgyOWVmZDZjMWRmNDdkNGNmOTAzYzdlYTk2ZjFlOGI1NGNlZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBjNzhmODU3YWNlYzE2MDkyY2Y5OThkOGM0NDg5NGViMWRkY2U3N2MgYi9mdXp6ZXIvY29ycHVzLzBjNzhmODU3YWNlYzE2MDkyY2Y5OThkOGM0NDg5NGViMWRkY2U3N2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZhZDRjZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGM3OGY4NTdhY2VjMTYwOTJjZjk5OGQ4YzQ0ODk0ZWIxZGRjZTc3YwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBjOWNkOWI4ZDNkYmYzZDMxYmUyODcyNWY2MzVhNGVmNTk5MDFjOTkgYi9mdXp6ZXIvY29ycHVzLzBjOWNkOWI4ZDNkYmYzZDMxYmUyODcyNWY2MzVhNGVmNTk5MDFjOTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkwODkxOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGM5Y2Q5YjhkM2RiZjNkMzFiZTI4NzI1ZjYzNWE0ZWY1OTkwMWM5OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBjYjMwY2M4YmIyOWU5ZWNiMjYzZjg2YzhmYjY1YjM0NjIyNzRkOTkgYi9mdXp6ZXIvY29ycHVzLzBjYjMwY2M4YmIyOWU5ZWNiMjYzZjg2YzhmYjY1YjM0NjIyNzRkOTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIxYTA4NwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGNiMzBjYzhiYjI5ZTllY2IyNjNmODZjOGZiNjViMzQ2MjI3NGQ5OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBjYzQ1NTk5ZjJiZGNlMjY5YTQyNWNlYTk2Zjc4NzNmZmJhOTY0MzkgYi9mdXp6ZXIvY29ycHVzLzBjYzQ1NTk5ZjJiZGNlMjY5YTQyNWNlYTk2Zjc4NzNmZmJhOTY0MzkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA2N2VjNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGNjNDU1OTlmMmJkY2UyNjlhNDI1Y2VhOTZmNzg3M2ZmYmE5NjQzOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBjZTMzYjA4NWY3ZmQwN2UzNWEyNTUwMTQyNThjNDNlZDZhZWFjNWUgYi9mdXp6ZXIvY29ycHVzLzBjZTMzYjA4NWY3ZmQwN2UzNWEyNTUwMTQyNThjNDNlZDZhZWFjNWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNiODEwMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGNlMzNiMDg1ZjdmZDA3ZTM1YTI1NTAxNDI1OGM0M2VkNmFlYWM1ZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBjZjJjNzQ3NzI4ZmZmMjliMWY1ZjU4YzZjMGUwNWUwN2UyMWNhZTcgYi9mdXp6ZXIvY29ycHVzLzBjZjJjNzQ3NzI4ZmZmMjliMWY1ZjU4YzZjMGUwNWUwN2UyMWNhZTcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk3MmRjZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGNmMmM3NDc3MjhmZmYyOWIxZjVmNThjNmMwZTA1ZTA3ZTIxY2FlNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBkMDRjZTFhMmMyMGJjYjU0OTkyZjM0NWY0MjU3MTU1ZDBlMDcxOWQgYi9mdXp6ZXIvY29ycHVzLzBkMDRjZTFhMmMyMGJjYjU0OTkyZjM0NWY0MjU3MTU1ZDBlMDcxOWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA1OWU0NQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGQwNGNlMWEyYzIwYmNiNTQ5OTJmMzQ1ZjQyNTcxNTVkMGUwNzE5ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBkNTc5NDkwNjc4ODNkYzM1NDc3ZTZlYzgxMDk0N2VmNDQ0NTBlNjQgYi9mdXp6ZXIvY29ycHVzLzBkNTc5NDkwNjc4ODNkYzM1NDc3ZTZlYzgxMDk0N2VmNDQ0NTBlNjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ViMzFiNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGQ1Nzk0OTA2Nzg4M2RjMzU0NzdlNmVjODEwOTQ3ZWY0NDQ1MGU2NApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBkNmE1ZTI1YzExZDdmNTY5ZWY1NzlkM2E0ZDBmM2RlN2JjMjFiZjcgYi9mdXp6ZXIvY29ycHVzLzBkNmE1ZTI1YzExZDdmNTY5ZWY1NzlkM2E0ZDBmM2RlN2JjMjFiZjcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQwOGI5YgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGQ2YTVlMjVjMTFkN2Y1NjllZjU3OWQzYTRkMGYzZGU3YmMyMWJmNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBkNmNmMzJmYzZlZTNjZWM3YjA4MDdmMzMxNmM2Y2EyZjVlOWUwY2IgYi9mdXp6ZXIvY29ycHVzLzBkNmNmMzJmYzZlZTNjZWM3YjA4MDdmMzMxNmM2Y2EyZjVlOWUwY2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAwOTUxZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGQ2Y2YzMmZjNmVlM2NlYzdiMDgwN2YzMzE2YzZjYTJmNWU5ZTBjYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBkODEzYmMwMDJmYTUyZGUwMmRlZWJlMGJiMGZhNDI4YTFlZTRjYWQgYi9mdXp6ZXIvY29ycHVzLzBkODEzYmMwMDJmYTUyZGUwMmRlZWJlMGJiMGZhNDI4YTFlZTRjYWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBkYjAyMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGQ4MTNiYzAwMmZhNTJkZTAyZGVlYmUwYmIwZmE0MjhhMWVlNGNhZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBkYTVmMWUxZGUxNzI3Y2Q3NTU1ZGNiOWNhMWEwYzcyNWVlNjJlM2YgYi9mdXp6ZXIvY29ycHVzLzBkYTVmMWUxZGUxNzI3Y2Q3NTU1ZGNiOWNhMWEwYzcyNWVlNjJlM2YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RiYmE1ZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGRhNWYxZTFkZTE3MjdjZDc1NTVkY2I5Y2ExYTBjNzI1ZWU2MmUzZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBkZjU4ZDMyMGY3NTFkMmRjZjU1OWY4ZmFmZWRiNDI5OTQwMzVkZDggYi9mdXp6ZXIvY29ycHVzLzBkZjU4ZDMyMGY3NTFkMmRjZjU1OWY4ZmFmZWRiNDI5OTQwMzVkZDgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIwY2I5ZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGRmNThkMzIwZjc1MWQyZGNmNTU5ZjhmYWZlZGI0Mjk5NDAzNWRkOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBkZjkzNTRjYjY4OWU1Mzc3MGIxM2M3YjMxMjE5YmNmMzRkMDE2M2IgYi9mdXp6ZXIvY29ycHVzLzBkZjkzNTRjYjY4OWU1Mzc3MGIxM2M3YjMxMjE5YmNmMzRkMDE2M2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE5YTc5MwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGRmOTM1NGNiNjg5ZTUzNzcwYjEzYzdiMzEyMTliY2YzNGQwMTYzYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBlMTUxZDcxYmNmNGRmNjI3OTBjYzE5NjA5NmViNmQwZTE2MDE2ODggYi9mdXp6ZXIvY29ycHVzLzBlMTUxZDcxYmNmNGRmNjI3OTBjYzE5NjA5NmViNmQwZTE2MDE2ODgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZmZDQ4ZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGUxNTFkNzFiY2Y0ZGY2Mjc5MGNjMTk2MDk2ZWI2ZDBlMTYwMTY4OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBlMTYzNjdlY2ViNGY1YjU1MjZlMDZiYzdhNWI1NWQxYjUzZmNhNzMgYi9mdXp6ZXIvY29ycHVzLzBlMTYzNjdlY2ViNGY1YjU1MjZlMDZiYzdhNWI1NWQxYjUzZmNhNzMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYzMzY2YQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGUxNjM2N2VjZWI0ZjViNTUyNmUwNmJjN2E1YjU1ZDFiNTNmY2E3MwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBlMWYzOGQyZjZjNTUwNjRjMjI1MjVkNmQxNDNmNDJmYTE3NGJjMTkgYi9mdXp6ZXIvY29ycHVzLzBlMWYzOGQyZjZjNTUwNjRjMjI1MjVkNmQxNDNmNDJmYTE3NGJjMTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdjN2FhYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGUxZjM4ZDJmNmM1NTA2NGMyMjUyNWQ2ZDE0M2Y0MmZhMTc0YmMxOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBlMjRlNzcyOTI5ZjhmNjM1NjY4NmQzNjJhNWM2ZDgxMDAwYTViMmYgYi9mdXp6ZXIvY29ycHVzLzBlMjRlNzcyOTI5ZjhmNjM1NjY4NmQzNjJhNWM2ZDgxMDAwYTViMmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc4ODdhZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGUyNGU3NzI5MjlmOGY2MzU2Njg2ZDM2MmE1YzZkODEwMDBhNWIyZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBlMjc1MDVkZWQxYjEzYWY0YzlhNjA0NTJlYTFlNWM4Njg5YTNhNjggYi9mdXp6ZXIvY29ycHVzLzBlMjc1MDVkZWQxYjEzYWY0YzlhNjA0NTJlYTFlNWM4Njg5YTNhNjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY5MmU5ZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGUyNzUwNWRlZDFiMTNhZjRjOWE2MDQ1MmVhMWU1Yzg2ODlhM2E2OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBlMmQzMmI0YjMwMjYxMDdkZmJmNjI3MWI0YzI5ZWRhNWRkYzgyMjUgYi9mdXp6ZXIvY29ycHVzLzBlMmQzMmI0YjMwMjYxMDdkZmJmNjI3MWI0YzI5ZWRhNWRkYzgyMjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdkYzAwNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGUyZDMyYjRiMzAyNjEwN2RmYmY2MjcxYjRjMjllZGE1ZGRjODIyNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBlOGZlNGZlYWNmZTI2MmIyZTgxZWNjYjAyOGUyNmYzMGEwYWU5YTkgYi9mdXp6ZXIvY29ycHVzLzBlOGZlNGZlYWNmZTI2MmIyZTgxZWNjYjAyOGUyNmYzMGEwYWU5YTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFhM2ZiZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGU4ZmU0ZmVhY2ZlMjYyYjJlODFlY2NiMDI4ZTI2ZjMwYTBhZTlhOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBlOTAzMDk4NjYzZGRlYWEwYThjZmZiNGNiMDc5NDY4N2Q0NDMzODcgYi9mdXp6ZXIvY29ycHVzLzBlOTAzMDk4NjYzZGRlYWEwYThjZmZiNGNiMDc5NDY4N2Q0NDMzODcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg0MDUwZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGU5MDMwOTg2NjNkZGVhYTBhOGNmZmI0Y2IwNzk0Njg3ZDQ0MzM4NwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBlYTk0YTQzMjliNzdhYzU1NDI1YWNjYzNmNDVlMDA4MzVjYWJjYWIgYi9mdXp6ZXIvY29ycHVzLzBlYTk0YTQzMjliNzdhYzU1NDI1YWNjYzNmNDVlMDA4MzVjYWJjYWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBjZGIxYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGVhOTRhNDMyOWI3N2FjNTU0MjVhY2NjM2Y0NWUwMDgzNWNhYmNhYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBlYWRjMTk3MzZmNzgxNjM2YzUwYTlhMGFjNmIyNWJkNDQxNGM5NmUgYi9mdXp6ZXIvY29ycHVzLzBlYWRjMTk3MzZmNzgxNjM2YzUwYTlhMGFjNmIyNWJkNDQxNGM5NmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg0NzRmOQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGVhZGMxOTczNmY3ODE2MzZjNTBhOWEwYWM2YjI1YmQ0NDE0Yzk2ZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBlZDVkM2UyZGY4N2RmOTYxY2QyZGViMzQxYjhlOWE2NzIwOWM2ZTEgYi9mdXp6ZXIvY29ycHVzLzBlZDVkM2UyZGY4N2RmOTYxY2QyZGViMzQxYjhlOWE2NzIwOWM2ZTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUyYWViNgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGVkNWQzZTJkZjg3ZGY5NjFjZDJkZWIzNDFiOGU5YTY3MjA5YzZlMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBlZjE5NjExOTEyNzkwNWQwOTI1NjhlMmY0ZGZmNGNhOTgxOWY5OTQgYi9mdXp6ZXIvY29ycHVzLzBlZjE5NjExOTEyNzkwNWQwOTI1NjhlMmY0ZGZmNGNhOTgxOWY5OTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY0NjQ5OAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGVmMTk2MTE5MTI3OTA1ZDA5MjU2OGUyZjRkZmY0Y2E5ODE5Zjk5NApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBmMDI5NzQ2MmZiNjQxMGNlNDI4Y2M3NWNiM2ZmOTZmMWMzZWQwYjggYi9mdXp6ZXIvY29ycHVzLzBmMDI5NzQ2MmZiNjQxMGNlNDI4Y2M3NWNiM2ZmOTZmMWMzZWQwYjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEzYmRjYQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGYwMjk3NDYyZmI2NDEwY2U0MjhjYzc1Y2IzZmY5NmYxYzNlZDBiOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBmMTJmYWY1ZDhmYmVkYWZiZTAxYWFjMGI0YmJjOGYzNTY3NTFlMmIgYi9mdXp6ZXIvY29ycHVzLzBmMTJmYWY1ZDhmYmVkYWZiZTAxYWFjMGI0YmJjOGYzNTY3NTFlMmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ1NmM2OQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGYxMmZhZjVkOGZiZWRhZmJlMDFhYWMwYjRiYmM4ZjM1Njc1MWUyYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBmMTVmNDA3YTFhYzI3YTliMTg5Y2IxOTg1MjI3MDIyZDIyN2YwMWYgYi9mdXp6ZXIvY29ycHVzLzBmMTVmNDA3YTFhYzI3YTliMTg5Y2IxOTg1MjI3MDIyZDIyN2YwMWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUzMGJkOQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGYxNWY0MDdhMWFjMjdhOWIxODljYjE5ODUyMjcwMjJkMjI3ZjAxZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBmNDU3ZGRmZDQyZmQ1ZGQyMGZjNTllYWU5YzEzNzFkOWYyNzRjNzAgYi9mdXp6ZXIvY29ycHVzLzBmNDU3ZGRmZDQyZmQ1ZGQyMGZjNTllYWU5YzEzNzFkOWYyNzRjNzAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IwNzYwYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGY0NTdkZGZkNDJmZDVkZDIwZmM1OWVhZTljMTM3MWQ5ZjI3NGM3MApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBmODk3Y2YwZjVmNjMxMmViMjRiZGQ2ZjcwMjk4Nzg0M2RmMGI1ZmMgYi9mdXp6ZXIvY29ycHVzLzBmODk3Y2YwZjVmNjMxMmViMjRiZGQ2ZjcwMjk4Nzg0M2RmMGI1ZmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYxZDcxMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGY4OTdjZjBmNWY2MzEyZWIyNGJkZDZmNzAyOTg3ODQzZGYwYjVmYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBmYWVjM2M3YmJlMjc2NjRkNThmZmRiNjU0ZGQ1NjUwZTU2YTAxMGIgYi9mdXp6ZXIvY29ycHVzLzBmYWVjM2M3YmJlMjc2NjRkNThmZmRiNjU0ZGQ1NjUwZTU2YTAxMGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFkZTY1NwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGZhZWMzYzdiYmUyNzY2NGQ1OGZmZGI2NTRkZDU2NTBlNTZhMDEwYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBmZjJlODA2YjhlMDU1N2YzMzZkZmNkOWEyYzNmMTFhZjcxZDIwYzEgYi9mdXp6ZXIvY29ycHVzLzBmZjJlODA2YjhlMDU1N2YzMzZkZmNkOWEyYzNmMTFhZjcxZDIwYzEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIwYWFmZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGZmMmU4MDZiOGUwNTU3ZjMzNmRmY2Q5YTJjM2YxMWFmNzFkMjBjMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzBmZmVkODcwM2Y2ZGIwYWFmMWZiZGVlNjc0MjZmMTk4NjgzNTk4NzMgYi9mdXp6ZXIvY29ycHVzLzBmZmVkODcwM2Y2ZGIwYWFmMWZiZGVlNjc0MjZmMTk4NjgzNTk4NzMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkzMWE4NQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMGZmZWQ4NzAzZjZkYjBhYWYxZmJkZWU2NzQyNmYxOTg2ODM1OTg3MwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzEwMDIwZmRjZGI2OWQwYjRiNTYwMGMxZTQ3NmQzYzdkZWUwYTQ5N2MgYi9mdXp6ZXIvY29ycHVzLzEwMDIwZmRjZGI2OWQwYjRiNTYwMGMxZTQ3NmQzYzdkZWUwYTQ5N2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJkYTJiYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTAwMjBmZGNkYjY5ZDBiNGI1NjAwYzFlNDc2ZDNjN2RlZTBhNDk3YwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzEwMzUzMzU5MjYxZjkwZDM3OGQ4ODVlMTM2Yzg4MjJkYTU1OWUyNzcgYi9mdXp6ZXIvY29ycHVzLzEwMzUzMzU5MjYxZjkwZDM3OGQ4ODVlMTM2Yzg4MjJkYTU1OWUyNzcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQxMDczNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTAzNTMzNTkyNjFmOTBkMzc4ZDg4NWUxMzZjODgyMmRhNTU5ZTI3NwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzEwNjg5OWZmYjMwNmM4NDE0YTAxNzYzZDM2NDFlYTNkNDlmMTVmNjkgYi9mdXp6ZXIvY29ycHVzLzEwNjg5OWZmYjMwNmM4NDE0YTAxNzYzZDM2NDFlYTNkNDlmMTVmNjkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUxMzgxOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTA2ODk5ZmZiMzA2Yzg0MTRhMDE3NjNkMzY0MWVhM2Q0OWYxNWY2OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzEwNmQ5MzdhNmUwMzk4MDUyMWY1Y2I1Y2ExZGEwOWY2NjgzNjFlNDUgYi9mdXp6ZXIvY29ycHVzLzEwNmQ5MzdhNmUwMzk4MDUyMWY1Y2I1Y2ExZGEwOWY2NjgzNjFlNDUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODViOGYzNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTA2ZDkzN2E2ZTAzOTgwNTIxZjVjYjVjYTFkYTA5ZjY2ODM2MWU0NQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzEwODZmYmJmZDZiMzBjMTliNmRjNTQxNmI3ZTkwMjQyZTk1ZmZiNTkgYi9mdXp6ZXIvY29ycHVzLzEwODZmYmJmZDZiMzBjMTliNmRjNTQxNmI3ZTkwMjQyZTk1ZmZiNTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY1NmJjMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTA4NmZiYmZkNmIzMGMxOWI2ZGM1NDE2YjdlOTAyNDJlOTVmZmI1OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzEwOGIwNjRiNTFjNzYzYjRhZDA3NDZiMzZkYzM3MWNlZDJhMWRmNTMgYi9mdXp6ZXIvY29ycHVzLzEwOGIwNjRiNTFjNzYzYjRhZDA3NDZiMzZkYzM3MWNlZDJhMWRmNTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZhZGQ5MgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTA4YjA2NGI1MWM3NjNiNGFkMDc0NmIzNmRjMzcxY2VkMmExZGY1MwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzEwYzJjMWEzNzUzN2IwYTYxMDY1ZDczMGVhMDVkODAxMmRhNzAxYWEgYi9mdXp6ZXIvY29ycHVzLzEwYzJjMWEzNzUzN2IwYTYxMDY1ZDczMGVhMDVkODAxMmRhNzAxYWEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYxZWNlOQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTBjMmMxYTM3NTM3YjBhNjEwNjVkNzMwZWEwNWQ4MDEyZGE3MDFhYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzEwZjg1YzNkMmVlNDlhNTMxNGY3NTRkMmYzNmIxYjliYjEwYzYzOWMgYi9mdXp6ZXIvY29ycHVzLzEwZjg1YzNkMmVlNDlhNTMxNGY3NTRkMmYzNmIxYjliYjEwYzYzOWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcwZGJkNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTBmODVjM2QyZWU0OWE1MzE0Zjc1NGQyZjM2YjFiOWJiMTBjNjM5YwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzExMmJmODJmNDJmNzU2NWMwNzhjMTBjYmFjZDg1N2NlNzcxOTM5MGMgYi9mdXp6ZXIvY29ycHVzLzExMmJmODJmNDJmNzU2NWMwNzhjMTBjYmFjZDg1N2NlNzcxOTM5MGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNhNmFjMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTEyYmY4MmY0MmY3NTY1YzA3OGMxMGNiYWNkODU3Y2U3NzE5MzkwYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzExM2NjMzlkYmU0ZTk2ZTY4MWQwNTJhNzk3NDdhZDI5MjdhYTY3MzAgYi9mdXp6ZXIvY29ycHVzLzExM2NjMzlkYmU0ZTk2ZTY4MWQwNTJhNzk3NDdhZDI5MjdhYTY3MzAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU2NTdjZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTEzY2MzOWRiZTRlOTZlNjgxZDA1MmE3OTc0N2FkMjkyN2FhNjczMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzExNjEwZmVkY2JiYTBlMzQ0ZTI4ZTE1N2U5YWVmNTY3ZjVkMTYzNDUgYi9mdXp6ZXIvY29ycHVzLzExNjEwZmVkY2JiYTBlMzQ0ZTI4ZTE1N2U5YWVmNTY3ZjVkMTYzNDUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ2MTM1NQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTE2MTBmZWRjYmJhMGUzNDRlMjhlMTU3ZTlhZWY1NjdmNWQxNjM0NQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzExOGYwNmJkYmViNTkxMDQzMTQ4ZDRlNWQxY2UyN2IwYTljOWY4ZjMgYi9mdXp6ZXIvY29ycHVzLzExOGYwNmJkYmViNTkxMDQzMTQ4ZDRlNWQxY2UyN2IwYTljOWY4ZjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU1MzVhOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTE4ZjA2YmRiZWI1OTEwNDMxNDhkNGU1ZDFjZTI3YjBhOWM5ZjhmMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzExYTQ5ZDUwYmM3NjZlOTliZjBkY2VjNTIwODZmNDY5YTJmNWYxMDMgYi9mdXp6ZXIvY29ycHVzLzExYTQ5ZDUwYmM3NjZlOTliZjBkY2VjNTIwODZmNDY5YTJmNWYxMDMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdjZDdkZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTFhNDlkNTBiYzc2NmU5OWJmMGRjZWM1MjA4NmY0NjlhMmY1ZjEwMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzExYmM2ODBjYzY3OGJiNmJiYjVlNjgwYTk5MDI2NWU2MTVkYzRiZmIgYi9mdXp6ZXIvY29ycHVzLzExYmM2ODBjYzY3OGJiNmJiYjVlNjgwYTk5MDI2NWU2MTVkYzRiZmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEzN2M2NwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTFiYzY4MGNjNjc4YmI2YmJiNWU2ODBhOTkwMjY1ZTYxNWRjNGJmYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzExYzI1MTMyNjFmNzgwMjg2NWZhMmMyZDA1MGI0NmIzOTI4YjJhZDIgYi9mdXp6ZXIvY29ycHVzLzExYzI1MTMyNjFmNzgwMjg2NWZhMmMyZDA1MGI0NmIzOTI4YjJhZDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk2YjU1OAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTFjMjUxMzI2MWY3ODAyODY1ZmEyYzJkMDUwYjQ2YjM5MjhiMmFkMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzExY2U4ZTAxNzFhMWYwNTNhOTI0NTBmMjYxOGUyMDJlMzNjMGUwN2QgYi9mdXp6ZXIvY29ycHVzLzExY2U4ZTAxNzFhMWYwNTNhOTI0NTBmMjYxOGUyMDJlMzNjMGUwN2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzllNzM5NgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTFjZThlMDE3MWExZjA1M2E5MjQ1MGYyNjE4ZTIwMmUzM2MwZTA3ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzExZDNkMDFmMmMyZTgyOTRhN2QxYmFmZjc2ODE5Y2Y1NThiNTc1MDAgYi9mdXp6ZXIvY29ycHVzLzExZDNkMDFmMmMyZTgyOTRhN2QxYmFmZjc2ODE5Y2Y1NThiNTc1MDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQxNTk2ZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTFkM2QwMWYyYzJlODI5NGE3ZDFiYWZmNzY4MTljZjU1OGI1NzUwMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzExZDc4NGYxOTI5ZDBhNDU2NDliYjViZTlkMDA3ZTM3NzBhNjdiNzUgYi9mdXp6ZXIvY29ycHVzLzExZDc4NGYxOTI5ZDBhNDU2NDliYjViZTlkMDA3ZTM3NzBhNjdiNzUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk0ZDZkYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTFkNzg0ZjE5MjlkMGE0NTY0OWJiNWJlOWQwMDdlMzc3MGE2N2I3NQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzExZjcxMWRlMWZlYTUyOWVkYTAyOGQ3MmJlYzRmYmFmNTIxNDI5NTUgYi9mdXp6ZXIvY29ycHVzLzExZjcxMWRlMWZlYTUyOWVkYTAyOGQ3MmJlYzRmYmFmNTIxNDI5NTUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI2MWQwNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTFmNzExZGUxZmVhNTI5ZWRhMDI4ZDcyYmVjNGZiYWY1MjE0Mjk1NQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzEyNWVjNzQ3NmRlMDJkZjkxYTFiN2ZmZmNhZTdhZjAyNTM1YjRhN2UgYi9mdXp6ZXIvY29ycHVzLzEyNWVjNzQ3NmRlMDJkZjkxYTFiN2ZmZmNhZTdhZjAyNTM1YjRhN2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUzZmMxMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTI1ZWM3NDc2ZGUwMmRmOTFhMWI3ZmZmY2FlN2FmMDI1MzViNGE3ZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzEyOTcxM2ZmZGUzNzVlMmE3MGEzM2MzMzVlZjEyMTIzODE1YTZmMDggYi9mdXp6ZXIvY29ycHVzLzEyOTcxM2ZmZGUzNzVlMmE3MGEzM2MzMzVlZjEyMTIzODE1YTZmMDgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI4YTJkNgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTI5NzEzZmZkZTM3NWUyYTcwYTMzYzMzNWVmMTIxMjM4MTVhNmYwOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzEyYjg0MWI2OTM4ZjZiYzRhZDZmOTI4MDQxNGRjMDU5ZTM2ZTQ2MjggYi9mdXp6ZXIvY29ycHVzLzEyYjg0MWI2OTM4ZjZiYzRhZDZmOTI4MDQxNGRjMDU5ZTM2ZTQ2MjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAwMWUzOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTJiODQxYjY5MzhmNmJjNGFkNmY5MjgwNDE0ZGMwNTllMzZlNDYyOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzEyYzQ4ODdkNGY3N2NlMWY4OGRhNTFjNDIzNzNjMTY3N2Y1ZmIyY2UgYi9mdXp6ZXIvY29ycHVzLzEyYzQ4ODdkNGY3N2NlMWY4OGRhNTFjNDIzNzNjMTY3N2Y1ZmIyY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkyZThmMQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTJjNDg4N2Q0Zjc3Y2UxZjg4ZGE1MWM0MjM3M2MxNjc3ZjVmYjJjZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzEyY2I5MDdiNDg4ODRmNGFlZTQ0YTBkMWJhYjYxZDI3NTU2NjU5ZmMgYi9mdXp6ZXIvY29ycHVzLzEyY2I5MDdiNDg4ODRmNGFlZTQ0YTBkMWJhYjYxZDI3NTU2NjU5ZmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk0NWI2OQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTJjYjkwN2I0ODg4NGY0YWVlNDRhMGQxYmFiNjFkMjc1NTY2NTlmYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzEzMzJkNGJlZGI5NDgyYTk1OGU0YTllZTg4ZjBiMjgyNGVmNGFjNGMgYi9mdXp6ZXIvY29ycHVzLzEzMzJkNGJlZGI5NDgyYTk1OGU0YTllZTg4ZjBiMjgyNGVmNGFjNGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1NWVjMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTMzMmQ0YmVkYjk0ODJhOTU4ZTRhOWVlODhmMGIyODI0ZWY0YWM0YwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzEzNDdiN2UzYzE2YmE0OWVjZDUyM2M2NDA1ZDMzZmVlOGU5MTAyZDMgYi9mdXp6ZXIvY29ycHVzLzEzNDdiN2UzYzE2YmE0OWVjZDUyM2M2NDA1ZDMzZmVlOGU5MTAyZDMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhmNjFlMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTM0N2I3ZTNjMTZiYTQ5ZWNkNTIzYzY0MDVkMzNmZWU4ZTkxMDJkMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzEzNzc4NmE1YWRkOWFlMTY1NjZkMzYzYzc0YTk4MzM5YmY5NTA2OWMgYi9mdXp6ZXIvY29ycHVzLzEzNzc4NmE1YWRkOWFlMTY1NjZkMzYzYzc0YTk4MzM5YmY5NTA2OWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI3MDYzMQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTM3Nzg2YTVhZGQ5YWUxNjU2NmQzNjNjNzRhOTgzMzliZjk1MDY5YwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzEzOWQ1ZTAwMjU3OWY1OTM3ZjIxOGNmMTBhNzNkODllOGVkZjk0MTEgYi9mdXp6ZXIvY29ycHVzLzEzOWQ1ZTAwMjU3OWY1OTM3ZjIxOGNmMTBhNzNkODllOGVkZjk0MTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzczMDFiNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTM5ZDVlMDAyNTc5ZjU5MzdmMjE4Y2YxMGE3M2Q4OWU4ZWRmOTQxMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzEzY2IyZTZkNGYyMDAzMGE3ZGZlOTcyNTZkYTFmYmI2ZjA2YWVjNDMgYi9mdXp6ZXIvY29ycHVzLzEzY2IyZTZkNGYyMDAzMGE3ZGZlOTcyNTZkYTFmYmI2ZjA2YWVjNDMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZkZDg4OAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTNjYjJlNmQ0ZjIwMDMwYTdkZmU5NzI1NmRhMWZiYjZmMDZhZWM0MwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzEzZDJjN2VmYzYwODMzM2M4MGFkMzc3ZjAwODU0Y2MxZWI0NzdhYzggYi9mdXp6ZXIvY29ycHVzLzEzZDJjN2VmYzYwODMzM2M4MGFkMzc3ZjAwODU0Y2MxZWI0NzdhYzgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNmZTA3YQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTNkMmM3ZWZjNjA4MzMzYzgwYWQzNzdmMDA4NTRjYzFlYjQ3N2FjOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzEzZjJjY2FlMDQzNmY0NjI1ZmJiZWExYjQ2N2FmYTk0NzA4Y2Y2NzcgYi9mdXp6ZXIvY29ycHVzLzEzZjJjY2FlMDQzNmY0NjI1ZmJiZWExYjQ2N2FmYTk0NzA4Y2Y2NzcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFlMmFiMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTNmMmNjYWUwNDM2ZjQ2MjVmYmJlYTFiNDY3YWZhOTQ3MDhjZjY3NwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzEzZjljZWMxYWFiY2Q2MDczMGE3OTJlZTc5ZDQzY2QxMzA0MDcyMWEgYi9mdXp6ZXIvY29ycHVzLzEzZjljZWMxYWFiY2Q2MDczMGE3OTJlZTc5ZDQzY2QxMzA0MDcyMWEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ViNTE5MAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTNmOWNlYzFhYWJjZDYwNzMwYTc5MmVlNzlkNDNjZDEzMDQwNzIxYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzE0MTE2NjhiMDVmMWViZWExNWI4OTQzMTdhYTAxM2VlMjNlMGRiODEgYi9mdXp6ZXIvY29ycHVzLzE0MTE2NjhiMDVmMWViZWExNWI4OTQzMTdhYTAxM2VlMjNlMGRiODEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M0MTU1YwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTQxMTY2OGIwNWYxZWJlYTE1Yjg5NDMxN2FhMDEzZWUyM2UwZGI4MQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzE0MjUwZGYwZGNlNDA3YzljYTE3NjJkMDQyZjNjMjIzYmY0N2JlYTIgYi9mdXp6ZXIvY29ycHVzLzE0MjUwZGYwZGNlNDA3YzljYTE3NjJkMDQyZjNjMjIzYmY0N2JlYTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk5ZDBlMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTQyNTBkZjBkY2U0MDdjOWNhMTc2MmQwNDJmM2MyMjNiZjQ3YmVhMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzE0YWRhMzkyNDU1Y2NlNGUwNzhhYzkwMTFkNjVhMWEwNTExZTYwMjMgYi9mdXp6ZXIvY29ycHVzLzE0YWRhMzkyNDU1Y2NlNGUwNzhhYzkwMTFkNjVhMWEwNTExZTYwMjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg3NWM2NwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTRhZGEzOTI0NTVjY2U0ZTA3OGFjOTAxMWQ2NWExYTA1MTFlNjAyMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzE0ZmIyZjY3NzY1YTU2MjAyM2JkMThlNGQyNjQwODhjZDlhNWE0ZWMgYi9mdXp6ZXIvY29ycHVzLzE0ZmIyZjY3NzY1YTU2MjAyM2JkMThlNGQyNjQwODhjZDlhNWE0ZWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I0MmVjYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTRmYjJmNjc3NjVhNTYyMDIzYmQxOGU0ZDI2NDA4OGNkOWE1YTRlYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzE1MmQzMzk1OTRiNWFmOWEwYTI4ZTA0NWNmOWI1ZWI4NDUwMTdjOTkgYi9mdXp6ZXIvY29ycHVzLzE1MmQzMzk1OTRiNWFmOWEwYTI4ZTA0NWNmOWI1ZWI4NDUwMTdjOTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZhMGMyMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTUyZDMzOTU5NGI1YWY5YTBhMjhlMDQ1Y2Y5YjVlYjg0NTAxN2M5OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzLzE1MzBmZDdlZGJlZWM3ODY5YzcyNWExOGVkNjc5ZTQxYzYyNGFlM2QgYi9mdXp6ZXIvY29ycHVzLzE1MzBmZDdlZGJlZWM3ODY5YzcyNWExOGVkNjc5ZTQxYzYyNGFlM2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRiMDQzNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvMTUzMGZkN2VkYmVlYzc4NjljNzI1YTE4ZWQ2NzllNDFjNjI0YWUzZApAQCAtMCwwICsxIEBACiv///////////////////91KmVeClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xNTNmY2NjNzA2ZTVjNDdiNzQzNmVhODE0OTljOGE2Zjk4NmIzMWY5IGIvZnV6emVyL2NvcnB1cy8xNTNmY2NjNzA2ZTVjNDdiNzQzNmVhODE0OTljOGE2Zjk4NmIzMWY5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiY2JjYjcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE1M2ZjY2M3MDZlNWM0N2I3NDM2ZWE4MTQ5OWM4YTZmOTg2YjMxZjkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xNTUwOTE3NDE2NmM5YTkyNGE1ZTQ4ZTEyMTU0MDc0Nzc1YjVmYzM3IGIvZnV6emVyL2NvcnB1cy8xNTUwOTE3NDE2NmM5YTkyNGE1ZTQ4ZTEyMTU0MDc0Nzc1YjVmYzM3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMzdmOGEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE1NTA5MTc0MTY2YzlhOTI0YTVlNDhlMTIxNTQwNzQ3NzViNWZjMzcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xNTY4YWU1N2E3ZjEyZjU2OGY3NmI4ZjAwNTc0NzNhOWI0Yjc1MTliIGIvZnV6emVyL2NvcnB1cy8xNTY4YWU1N2E3ZjEyZjU2OGY3NmI4ZjAwNTc0NzNhOWI0Yjc1MTliCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMjgxNDYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE1NjhhZTU3YTdmMTJmNTY4Zjc2YjhmMDA1NzQ3M2E5YjRiNzUxOWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xNThlOTU4M2JlMmY3OWFiZjgwZjcyODJmMjRjNzIzYTc2ZmRlODQ1IGIvZnV6emVyL2NvcnB1cy8xNThlOTU4M2JlMmY3OWFiZjgwZjcyODJmMjRjNzIzYTc2ZmRlODQ1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NmFhMTgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE1OGU5NTgzYmUyZjc5YWJmODBmNzI4MmYyNGM3MjNhNzZmZGU4NDUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xNWIzMjkwZjQ4MTFmNTIwOTVmNTNiOGRiZTViZmRhMDcyODBjNjU2IGIvZnV6emVyL2NvcnB1cy8xNWIzMjkwZjQ4MTFmNTIwOTVmNTNiOGRiZTViZmRhMDcyODBjNjU2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNDAyZTgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE1YjMyOTBmNDgxMWY1MjA5NWY1M2I4ZGJlNWJmZGEwNzI4MGM2NTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xNWJmODY3NTBhOTU5M2MzMGFkMWJjNmMwZGUwMjdjMDIyYjQ4ZDFmIGIvZnV6emVyL2NvcnB1cy8xNWJmODY3NTBhOTU5M2MzMGFkMWJjNmMwZGUwMjdjMDIyYjQ4ZDFmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MmIwNzEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE1YmY4Njc1MGE5NTkzYzMwYWQxYmM2YzBkZTAyN2MwMjJiNDhkMWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xNWQzNTE4NGE2NzUwMmEwY2JjNDViOGRlMTljMDU1NzBhYTk5YTdkIGIvZnV6emVyL2NvcnB1cy8xNWQzNTE4NGE2NzUwMmEwY2JjNDViOGRlMTljMDU1NzBhYTk5YTdkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNTdlMzQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE1ZDM1MTg0YTY3NTAyYTBjYmM0NWI4ZGUxOWMwNTU3MGFhOTlhN2QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xNWQ3YThmNzhiMTQ0MjJlMWE3OWQ1YmRkOTM2Zjc4ZDQ4MTAxY2ZkIGIvZnV6emVyL2NvcnB1cy8xNWQ3YThmNzhiMTQ0MjJlMWE3OWQ1YmRkOTM2Zjc4ZDQ4MTAxY2ZkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYjVkNWUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE1ZDdhOGY3OGIxNDQyMmUxYTc5ZDViZGQ5MzZmNzhkNDgxMDFjZmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xNWVlZmJlOWZjYzFmY2Y0OGQ1NDQ4MTZkNGZlNTE3YjYzMzYzYTA2IGIvZnV6emVyL2NvcnB1cy8xNWVlZmJlOWZjYzFmY2Y0OGQ1NDQ4MTZkNGZlNTE3YjYzMzYzYTA2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMDE5YmIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE1ZWVmYmU5ZmNjMWZjZjQ4ZDU0NDgxNmQ0ZmU1MTdiNjMzNjNhMDYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xNWVmNDM5MDc1YTJjM2U1ODlhYTdhYTUyN2FlOWY1Njk3MzA0Yzg4IGIvZnV6emVyL2NvcnB1cy8xNWVmNDM5MDc1YTJjM2U1ODlhYTdhYTUyN2FlOWY1Njk3MzA0Yzg4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZGQ2ODkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE1ZWY0MzkwNzVhMmMzZTU4OWFhN2FhNTI3YWU5ZjU2OTczMDRjODgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xNjJmN2ZkYWE2MzE1OTI4MTY0MWEwZjUyOWI4NjU5OGVjZWNjYmExIGIvZnV6emVyL2NvcnB1cy8xNjJmN2ZkYWE2MzE1OTI4MTY0MWEwZjUyOWI4NjU5OGVjZWNjYmExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MTJmM2UKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE2MmY3ZmRhYTYzMTU5MjgxNjQxYTBmNTI5Yjg2NTk4ZWNlY2NiYTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xNjRmYjc3ZTkyMjI0MGEyZGQ5MWE1M2Q5ZTRkYmFlZWJlZmFiYTc0IGIvZnV6emVyL2NvcnB1cy8xNjRmYjc3ZTkyMjI0MGEyZGQ5MWE1M2Q5ZTRkYmFlZWJlZmFiYTc0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNzM2OGQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE2NGZiNzdlOTIyMjQwYTJkZDkxYTUzZDllNGRiYWVlYmVmYWJhNzQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xNjU1ZDQ3MDllYjI4ZWUzZjRkMDQ3NWM4ZGU5MGEwY2Q5MzMxMTkxIGIvZnV6emVyL2NvcnB1cy8xNjU1ZDQ3MDllYjI4ZWUzZjRkMDQ3NWM4ZGU5MGEwY2Q5MzMxMTkxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MzU2MjgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE2NTVkNDcwOWViMjhlZTNmNGQwNDc1YzhkZTkwYTBjZDkzMzExOTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xNjkwZDEyMjI4OTA4Mzk1YTBkYmVlMjA1N2FmOWMxMGYzMzg5NTdmIGIvZnV6emVyL2NvcnB1cy8xNjkwZDEyMjI4OTA4Mzk1YTBkYmVlMjA1N2FmOWMxMGYzMzg5NTdmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNTRkMTAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE2OTBkMTIyMjg5MDgzOTVhMGRiZWUyMDU3YWY5YzEwZjMzODk1N2YKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xNmI4YmNjNGQ4ZWM5MzA1MDU1MzI0MDNkOWVmODJhYzRjZGRjNzU2IGIvZnV6emVyL2NvcnB1cy8xNmI4YmNjNGQ4ZWM5MzA1MDU1MzI0MDNkOWVmODJhYzRjZGRjNzU2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZDhiYzkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE2YjhiY2M0ZDhlYzkzMDUwNTUzMjQwM2Q5ZWY4MmFjNGNkZGM3NTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xNmMwZTYyODQwYzM2M2Q0NDU0MDNjOGMzODRhOTY4ZGY0YWI2MTI5IGIvZnV6emVyL2NvcnB1cy8xNmMwZTYyODQwYzM2M2Q0NDU0MDNjOGMzODRhOTY4ZGY0YWI2MTI5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NzM0NWIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE2YzBlNjI4NDBjMzYzZDQ0NTQwM2M4YzM4NGE5NjhkZjRhYjYxMjkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xNmM3YjY2OGE0NjFiNDkxODgxNjEzOWE5YWQzY2NlNDY5YTRlMzQ3IGIvZnV6emVyL2NvcnB1cy8xNmM3YjY2OGE0NjFiNDkxODgxNjEzOWE5YWQzY2NlNDY5YTRlMzQ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhOTU3MmIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE2YzdiNjY4YTQ2MWI0OTE4ODE2MTM5YTlhZDNjY2U0NjlhNGUzNDcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xNmNhNWNkZTFlNTBhZDZiMDkwOWI1YmJlN2I2OWQ4ODgwMTQxMDAwIGIvZnV6emVyL2NvcnB1cy8xNmNhNWNkZTFlNTBhZDZiMDkwOWI1YmJlN2I2OWQ4ODgwMTQxMDAwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMGMxY2QKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE2Y2E1Y2RlMWU1MGFkNmIwOTA5YjViYmU3YjY5ZDg4ODAxNDEwMDAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xNmQ3NThiMjZjOWE5MGY4NTIyM2NjNWUwMjM1MzA0NzE2MDg4MjgzIGIvZnV6emVyL2NvcnB1cy8xNmQ3NThiMjZjOWE5MGY4NTIyM2NjNWUwMjM1MzA0NzE2MDg4MjgzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NWUxOTUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE2ZDc1OGIyNmM5YTkwZjg1MjIzY2M1ZTAyMzUzMDQ3MTYwODgyODMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xNmUyZjFjMGQwZGI2MzBkOTJhN2FhY2M2NzljMDgyZjgwNGQyMmJkIGIvZnV6emVyL2NvcnB1cy8xNmUyZjFjMGQwZGI2MzBkOTJhN2FhY2M2NzljMDgyZjgwNGQyMmJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZWQ2ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE2ZTJmMWMwZDBkYjYzMGQ5MmE3YWFjYzY3OWMwODJmODA0ZDIyYmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xNmVhMjVhMDE5MDYzYmIxY2NmN2I4MDZjNWM5ZjVlMTg5M2ZjNzEwIGIvZnV6emVyL2NvcnB1cy8xNmVhMjVhMDE5MDYzYmIxY2NmN2I4MDZjNWM5ZjVlMTg5M2ZjNzEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjOWIyMTQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE2ZWEyNWEwMTkwNjNiYjFjY2Y3YjgwNmM1YzlmNWUxODkzZmM3MTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xNmVmMTg1YzVkYTNkMTA2MzRhYmRkMGQyYjM3ZmM1NzY1ZTU4Y2JmIGIvZnV6emVyL2NvcnB1cy8xNmVmMTg1YzVkYTNkMTA2MzRhYmRkMGQyYjM3ZmM1NzY1ZTU4Y2JmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlODdiNjQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE2ZWYxODVjNWRhM2QxMDYzNGFiZGQwZDJiMzdmYzU3NjVlNThjYmYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xNzI4OTc3MzM5MGE5OTg4MDlmODdkZjRjMGFkODI4YjMwNGIxN2EyIGIvZnV6emVyL2NvcnB1cy8xNzI4OTc3MzM5MGE5OTg4MDlmODdkZjRjMGFkODI4YjMwNGIxN2EyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYTBhMTEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE3Mjg5NzczMzkwYTk5ODgwOWY4N2RmNGMwYWQ4MjhiMzA0YjE3YTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xNzQ4ZTE5ZWQxZDcxNTM1Y2MxMWU3ZDRkM2UyYjk1NjAxZGFhMTUyIGIvZnV6emVyL2NvcnB1cy8xNzQ4ZTE5ZWQxZDcxNTM1Y2MxMWU3ZDRkM2UyYjk1NjAxZGFhMTUyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZmRjMjkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE3NDhlMTllZDFkNzE1MzVjYzExZTdkNGQzZTJiOTU2MDFkYWExNTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xODBiNWQ4ZTQ2N2VhYTE3Yzk3ZjgzNTRjOTc2NDI5N2Q1ZmQyYzY5IGIvZnV6emVyL2NvcnB1cy8xODBiNWQ4ZTQ2N2VhYTE3Yzk3ZjgzNTRjOTc2NDI5N2Q1ZmQyYzY5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3OGE1ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE4MGI1ZDhlNDY3ZWFhMTdjOTdmODM1NGM5NzY0Mjk3ZDVmZDJjNjkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xODBjYmIxNjU5YjlkMTM2MzQ1ODA3MTRhZmViNTFkNjQ3MTJlMTgwIGIvZnV6emVyL2NvcnB1cy8xODBjYmIxNjU5YjlkMTM2MzQ1ODA3MTRhZmViNTFkNjQ3MTJlMTgwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZDZiODIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE4MGNiYjE2NTliOWQxMzYzNDU4MDcxNGFmZWI1MWQ2NDcxMmUxODAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xODMzZTE3MDBkOThmZmExNjVlYzA1NDkxZTFkNTFlNDUxY2ViMWI5IGIvZnV6emVyL2NvcnB1cy8xODMzZTE3MDBkOThmZmExNjVlYzA1NDkxZTFkNTFlNDUxY2ViMWI5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZDM2NDEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE4MzNlMTcwMGQ5OGZmYTE2NWVjMDU0OTFlMWQ1MWU0NTFjZWIxYjkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xODM0MjBlNGEyNDRlYzcwZjM1YjM1ZjViZWI0N2QwOTIyNWViZmI2IGIvZnV6emVyL2NvcnB1cy8xODM0MjBlNGEyNDRlYzcwZjM1YjM1ZjViZWI0N2QwOTIyNWViZmI2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYWQ4ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE4MzQyMGU0YTI0NGVjNzBmMzViMzVmNWJlYjQ3ZDA5MjI1ZWJmYjYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xODVlZGIyNjQ4ZWUyOTU1ZThiZTAwOTJiNWNmZTM1MzhhNzlhNDA5IGIvZnV6emVyL2NvcnB1cy8xODVlZGIyNjQ4ZWUyOTU1ZThiZTAwOTJiNWNmZTM1MzhhNzlhNDA5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNzgyOTEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE4NWVkYjI2NDhlZTI5NTVlOGJlMDA5MmI1Y2ZlMzUzOGE3OWE0MDkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xODkwMzRkYTUxZDA1Mzg2ZTA0MjhmZjk3NDMzYWVmNDEzNzY0MDI2IGIvZnV6emVyL2NvcnB1cy8xODkwMzRkYTUxZDA1Mzg2ZTA0MjhmZjk3NDMzYWVmNDEzNzY0MDI2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYTE0NTYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE4OTAzNGRhNTFkMDUzODZlMDQyOGZmOTc0MzNhZWY0MTM3NjQwMjYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xOGIxZTc3YmQwYjM3ZDE0NzMxYWFhYWZjNWIzM2QxMDhkNjgwYTE2IGIvZnV6emVyL2NvcnB1cy8xOGIxZTc3YmQwYjM3ZDE0NzMxYWFhYWZjNWIzM2QxMDhkNjgwYTE2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMGZmYWEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE4YjFlNzdiZDBiMzdkMTQ3MzFhYWFhZmM1YjMzZDEwOGQ2ODBhMTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xOGJhZmRlNWE4MDAyMDk3NWFjNTFmYzYxY2U0MzA4Yjg0M2NhZjgxIGIvZnV6emVyL2NvcnB1cy8xOGJhZmRlNWE4MDAyMDk3NWFjNTFmYzYxY2U0MzA4Yjg0M2NhZjgxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMGY1Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE4YmFmZGU1YTgwMDIwOTc1YWM1MWZjNjFjZTQzMDhiODQzY2FmODEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xOGJiOTg3YjJiNTZkMmE4NDI4OTNiNjk0ODJhODFkNTkzYTgzYmRhIGIvZnV6emVyL2NvcnB1cy8xOGJiOTg3YjJiNTZkMmE4NDI4OTNiNjk0ODJhODFkNTkzYTgzYmRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMmJmNzUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE4YmI5ODdiMmI1NmQyYTg0Mjg5M2I2OTQ4MmE4MWQ1OTNhODNiZGEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xOGMxZmM5NzI2NTc5YmNiMTlkZjI1MWI0MWEzNWM5OTM0ZjFjYjQ1IGIvZnV6emVyL2NvcnB1cy8xOGMxZmM5NzI2NTc5YmNiMTlkZjI1MWI0MWEzNWM5OTM0ZjFjYjQ1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMDZhZWEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE4YzFmYzk3MjY1NzliY2IxOWRmMjUxYjQxYTM1Yzk5MzRmMWNiNDUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xOGVlNTgwZjAwMzY2MzVlODY3NzdmY2FlMTg5ODQxM2NiODViNWYxIGIvZnV6emVyL2NvcnB1cy8xOGVlNTgwZjAwMzY2MzVlODY3NzdmY2FlMTg5ODQxM2NiODViNWYxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MGExOTUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE4ZWU1ODBmMDAzNjYzNWU4Njc3N2ZjYWUxODk4NDEzY2I4NWI1ZjEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xOTBkZDc4MzNiMjY3YzhkOTJkMzQ3OTI2NmUzMjEzZDUxYmZjYjU0IGIvZnV6emVyL2NvcnB1cy8xOTBkZDc4MzNiMjY3YzhkOTJkMzQ3OTI2NmUzMjEzZDUxYmZjYjU0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZDY5N2YKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE5MGRkNzgzM2IyNjdjOGQ5MmQzNDc5MjY2ZTMyMTNkNTFiZmNiNTQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xOTBmNmNiOTk5ZjEzYThiYTI3OGIwMDVhMzNmYzk4MDkzNDc2MzNiIGIvZnV6emVyL2NvcnB1cy8xOTBmNmNiOTk5ZjEzYThiYTI3OGIwMDVhMzNmYzk4MDkzNDc2MzNiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZmQ5ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE5MGY2Y2I5OTlmMTNhOGJhMjc4YjAwNWEzM2ZjOTgwOTM0NzYzM2IKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xOTEwNDgyNTFmMmMyZTA5YjE3NzQ1YWI3MTlmNmUyYmQ4MzhmMjZlIGIvZnV6emVyL2NvcnB1cy8xOTEwNDgyNTFmMmMyZTA5YjE3NzQ1YWI3MTlmNmUyYmQ4MzhmMjZlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNzQ1ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE5MTA0ODI1MWYyYzJlMDliMTc3NDVhYjcxOWY2ZTJiZDgzOGYyNmUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xOTE4MWRjZDk5MmUxYTdkMWQzM2FiNTkxZDIxYmE2MGE2OTNiOGFkIGIvZnV6emVyL2NvcnB1cy8xOTE4MWRjZDk5MmUxYTdkMWQzM2FiNTkxZDIxYmE2MGE2OTNiOGFkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOTNjY2YKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE5MTgxZGNkOTkyZTFhN2QxZDMzYWI1OTFkMjFiYTYwYTY5M2I4YWQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xOTJhMTdkNTJhODNlYWEyNzBhY2Y1ODJlOWU2MWNiNmFmNjkwNTQxIGIvZnV6emVyL2NvcnB1cy8xOTJhMTdkNTJhODNlYWEyNzBhY2Y1ODJlOWU2MWNiNmFmNjkwNTQxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZjA5ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE5MmExN2Q1MmE4M2VhYTI3MGFjZjU4MmU5ZTYxY2I2YWY2OTA1NDEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xOTM4OWY3NDU2MzA2MWQxYjYxNTdmMWY4OWFiNGQxNjA5M2RlNWUzIGIvZnV6emVyL2NvcnB1cy8xOTM4OWY3NDU2MzA2MWQxYjYxNTdmMWY4OWFiNGQxNjA5M2RlNWUzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3YzAyNjAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE5Mzg5Zjc0NTYzMDYxZDFiNjE1N2YxZjg5YWI0ZDE2MDkzZGU1ZTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xOTNhYjJkNjc1NjNlZmJlMzUwZjE3Y2U5Y2Y0NzNhMGUwYzdkYzg4IGIvZnV6emVyL2NvcnB1cy8xOTNhYjJkNjc1NjNlZmJlMzUwZjE3Y2U5Y2Y0NzNhMGUwYzdkYzg4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNmJmZjMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE5M2FiMmQ2NzU2M2VmYmUzNTBmMTdjZTljZjQ3M2EwZTBjN2RjODgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xOTRkYWI0MjUzYTQzMDBjYTc3NzZlMTMwOWY5MzE1MjlkMWQ1ZmY5IGIvZnV6emVyL2NvcnB1cy8xOTRkYWI0MjUzYTQzMDBjYTc3NzZlMTMwOWY5MzE1MjlkMWQ1ZmY5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3YmZkM2YKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE5NGRhYjQyNTNhNDMwMGNhNzc3NmUxMzA5ZjkzMTUyOWQxZDVmZjkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xOTUyZjg0N2U1NDhkYjFkNDIyYWQ5YWI4MGYxYTlmZjUyOWM3YTBmIGIvZnV6emVyL2NvcnB1cy8xOTUyZjg0N2U1NDhkYjFkNDIyYWQ5YWI4MGYxYTlmZjUyOWM3YTBmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZjNkMWQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE5NTJmODQ3ZTU0OGRiMWQ0MjJhZDlhYjgwZjFhOWZmNTI5YzdhMGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xOTViNDEyZjhjOTc5YTM5YzVhMjBmYTZlMzhmNjA2NGU0YzEzNWM4IGIvZnV6emVyL2NvcnB1cy8xOTViNDEyZjhjOTc5YTM5YzVhMjBmYTZlMzhmNjA2NGU0YzEzNWM4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZWIwMTcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE5NWI0MTJmOGM5NzlhMzljNWEyMGZhNmUzOGY2MDY0ZTRjMTM1YzgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xOTlmMTIzNDZjODYyYWM1MzRkMzNjZGZhMTI2ZTI0NDlmMmZiMzA0IGIvZnV6emVyL2NvcnB1cy8xOTlmMTIzNDZjODYyYWM1MzRkMzNjZGZhMTI2ZTI0NDlmMmZiMzA0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNDA1NjMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE5OWYxMjM0NmM4NjJhYzUzNGQzM2NkZmExMjZlMjQ0OWYyZmIzMDQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xOWE2ODVhYWM5ZGM0ZjY0ODBlZWIwNGVlOGNmYTE3ZDM4NjJjZTYwIGIvZnV6emVyL2NvcnB1cy8xOWE2ODVhYWM5ZGM0ZjY0ODBlZWIwNGVlOGNmYTE3ZDM4NjJjZTYwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YzM3YzEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE5YTY4NWFhYzlkYzRmNjQ4MGVlYjA0ZWU4Y2ZhMTdkMzg2MmNlNjAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xOWIxOGY4NWU0YzEzYjFjMmM0YWZmMGU3NzAwN2E5Zjk2MDc3NmFiIGIvZnV6emVyL2NvcnB1cy8xOWIxOGY4NWU0YzEzYjFjMmM0YWZmMGU3NzAwN2E5Zjk2MDc3NmFiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NjAwMWMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE5YjE4Zjg1ZTRjMTNiMWMyYzRhZmYwZTc3MDA3YTlmOTYwNzc2YWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xOWI5NWY4OGM2YmM5YWVlN2M3M2FkMmNiMzE0ZGY1MDc2ZWI5M2YzIGIvZnV6emVyL2NvcnB1cy8xOWI5NWY4OGM2YmM5YWVlN2M3M2FkMmNiMzE0ZGY1MDc2ZWI5M2YzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNTVkZDUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE5Yjk1Zjg4YzZiYzlhZWU3YzczYWQyY2IzMTRkZjUwNzZlYjkzZjMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xOWJiMzcyMDQyOTIwOGJiZjNiMGY4MTBkZjFjMmU2NmYwMmJlYjI2IGIvZnV6emVyL2NvcnB1cy8xOWJiMzcyMDQyOTIwOGJiZjNiMGY4MTBkZjFjMmU2NmYwMmJlYjI2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNjE2NzQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE5YmIzNzIwNDI5MjA4YmJmM2IwZjgxMGRmMWMyZTY2ZjAyYmViMjYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xOWJlNDNmZjI3MTNiOTJhMzI4YjA0M2QzY2Q0ZGJlNGJjMjk2NDE2IGIvZnV6emVyL2NvcnB1cy8xOWJlNDNmZjI3MTNiOTJhMzI4YjA0M2QzY2Q0ZGJlNGJjMjk2NDE2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxODE0MWYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE5YmU0M2ZmMjcxM2I5MmEzMjhiMDQzZDNjZDRkYmU0YmMyOTY0MTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xOWM4M2JiOTI4NzIwOGFjOTZjZTNhYmEwNDQ3OTE2OTdhNTZhNzkyIGIvZnV6emVyL2NvcnB1cy8xOWM4M2JiOTI4NzIwOGFjOTZjZTNhYmEwNDQ3OTE2OTdhNTZhNzkyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlOWI5MzcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE5YzgzYmI5Mjg3MjA4YWM5NmNlM2FiYTA0NDc5MTY5N2E1NmE3OTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xOWU3Y2ZkYTNkYWQ3ZjAzMjAzODUyYjViM2ViYTY5ZGQ3YTcyODhiIGIvZnV6emVyL2NvcnB1cy8xOWU3Y2ZkYTNkYWQ3ZjAzMjAzODUyYjViM2ViYTY5ZGQ3YTcyODhiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2N2Y5N2EKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE5ZTdjZmRhM2RhZDdmMDMyMDM4NTJiNWIzZWJhNjlkZDdhNzI4OGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xOWU4ZmRmN2NkZTYwYWFhZDVhZGZiZGU4MGRkZDYzZGM0MjBlN2YzIGIvZnV6emVyL2NvcnB1cy8xOWU4ZmRmN2NkZTYwYWFhZDVhZGZiZGU4MGRkZDYzZGM0MjBlN2YzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYjY1YTgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE5ZThmZGY3Y2RlNjBhYWFkNWFkZmJkZTgwZGRkNjNkYzQyMGU3ZjMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xOWVhYjRmNWUzOTQ4MDZlNTczYzAxYzhiYWMzNjdmZGZmZWU2OTc1IGIvZnV6emVyL2NvcnB1cy8xOWVhYjRmNWUzOTQ4MDZlNTczYzAxYzhiYWMzNjdmZGZmZWU2OTc1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNDY1NTkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzE5ZWFiNGY1ZTM5NDgwNmU1NzNjMDFjOGJhYzM2N2ZkZmZlZTY5NzUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xYTFiODJmNWJjNjNjYzE3MjY2MzJhYWJkMzQyMDAxYTZlM2E5Zjk5IGIvZnV6emVyL2NvcnB1cy8xYTFiODJmNWJjNjNjYzE3MjY2MzJhYWJkMzQyMDAxYTZlM2E5Zjk5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZTBiNWYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzFhMWI4MmY1YmM2M2NjMTcyNjYzMmFhYmQzNDIwMDFhNmUzYTlmOTkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xYTJiNGQ0ODdmNWNlMDFkZDQ3ZjM0ZjZmZjljNWEzOWU2ODAxMGU2IGIvZnV6emVyL2NvcnB1cy8xYTJiNGQ0ODdmNWNlMDFkZDQ3ZjM0ZjZmZjljNWEzOWU2ODAxMGU2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNzU4ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzFhMmI0ZDQ4N2Y1Y2UwMWRkNDdmMzRmNmZmOWM1YTM5ZTY4MDEwZTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xYTRlMjY0MjkxNjQ3YmE5YWY4ZTY1ODAzYzAzYzc0ZjJmNDExYTMyIGIvZnV6emVyL2NvcnB1cy8xYTRlMjY0MjkxNjQ3YmE5YWY4ZTY1ODAzYzAzYzc0ZjJmNDExYTMyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmY2NlNzQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzFhNGUyNjQyOTE2NDdiYTlhZjhlNjU4MDNjMDNjNzRmMmY0MTFhMzIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xYWM1OTZlZTgzNzQ2MmExY2I5N2M1MDVhZTExNjQzMGE4M2ZmZTNjIGIvZnV6emVyL2NvcnB1cy8xYWM1OTZlZTgzNzQ2MmExY2I5N2M1MDVhZTExNjQzMGE4M2ZmZTNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjN2Q3YmQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzFhYzU5NmVlODM3NDYyYTFjYjk3YzUwNWFlMTE2NDMwYTgzZmZlM2MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8xYWQyMGQ0YzM4ZTI2YTBiOWU0NjcyYzJlNGQxYWViZTM5ZTlmM2QzIGIvZnV6emVyL2NvcnB1cy8xYWQyMGQ0YzM4ZTI2YTBiOWU0NjcyYzJlNGQxYWViZTM5ZTlmM2QzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMWZkMmEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzFhZDIwZDRjMzhlMjZhMGI5ZTQ2NzJjMmU0ZDFhZWJlMzllOWYzZDMKQEAgLTAsMCArMSBAQAorc18waV8waQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWFlOTYzMzcwZDY2NWU0OGE2OTYxZDllODg0MjQ5OThjMGZiODhjMyBiL2Z1enplci9jb3JwdXMvMWFlOTYzMzcwZDY2NWU0OGE2OTYxZDllODg0MjQ5OThjMGZiODhjMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk3NzE2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xYWU5NjMzNzBkNjY1ZTQ4YTY5NjFkOWU4ODQyNDk5OGMwZmI4OGMzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWIwYjdjZWFiYzFhNWZkNmE0MjM2YjU3ODc0MmY1ZGU3YWE0OWViYiBiL2Z1enplci9jb3JwdXMvMWIwYjdjZWFiYzFhNWZkNmE0MjM2YjU3ODc0MmY1ZGU3YWE0OWViYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGEyMDgyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xYjBiN2NlYWJjMWE1ZmQ2YTQyMzZiNTc4NzQyZjVkZTdhYTQ5ZWJiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWIzZDQ4Y2ZmNTZhMDMzNTg5MWJiNGI2MTYyMWMzZDcwZTdhN2Q1MSBiL2Z1enplci9jb3JwdXMvMWIzZDQ4Y2ZmNTZhMDMzNTg5MWJiNGI2MTYyMWMzZDcwZTdhN2Q1MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmJmOTE1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xYjNkNDhjZmY1NmEwMzM1ODkxYmI0YjYxNjIxYzNkNzBlN2E3ZDUxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWI1NDgxYjY2ZGRlNmVlMzVjODBiY2U5MDNkNjMwY2MzYzJiNTg1MSBiL2Z1enplci9jb3JwdXMvMWI1NDgxYjY2ZGRlNmVlMzVjODBiY2U5MDNkNjMwY2MzYzJiNTg1MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDZiZWQxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xYjU0ODFiNjZkZGU2ZWUzNWM4MGJjZTkwM2Q2MzBjYzNjMmI1ODUxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWI2NWRmNjYxY2ZlMTIxZDU0NmJhOTM2MjI1M2UxMGIyNjk2NjMyYiBiL2Z1enplci9jb3JwdXMvMWI2NWRmNjYxY2ZlMTIxZDU0NmJhOTM2MjI1M2UxMGIyNjk2NjMyYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWM2NjAyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xYjY1ZGY2NjFjZmUxMjFkNTQ2YmE5MzYyMjUzZTEwYjI2OTY2MzJiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWI3NmZkMGFkMTM2NjA0M2ExZjU2Yjc1ZjZjODdmZjRmNTFkNDZkYyBiL2Z1enplci9jb3JwdXMvMWI3NmZkMGFkMTM2NjA0M2ExZjU2Yjc1ZjZjODdmZjRmNTFkNDZkYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGQwYWFjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xYjc2ZmQwYWQxMzY2MDQzYTFmNTZiNzVmNmM4N2ZmNGY1MWQ0NmRjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWI3ZDM2YWM1NmI4MDgyOTZhZDRiY2YxZmE2NWVlZjdiOGQyNTZmMCBiL2Z1enplci9jb3JwdXMvMWI3ZDM2YWM1NmI4MDgyOTZhZDRiY2YxZmE2NWVlZjdiOGQyNTZmMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmMwMWYxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xYjdkMzZhYzU2YjgwODI5NmFkNGJjZjFmYTY1ZWVmN2I4ZDI1NmYwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWJjOWI2YzQxODI1YWM0MmNlMjE3MTdhZDRhZmJjNTM2ODM0NjViYyBiL2Z1enplci9jb3JwdXMvMWJjOWI2YzQxODI1YWM0MmNlMjE3MTdhZDRhZmJjNTM2ODM0NjViYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTFiMzNjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xYmM5YjZjNDE4MjVhYzQyY2UyMTcxN2FkNGFmYmM1MzY4MzQ2NWJjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWJlMWI1MTdkOTJiNGQ0OTVlY2Q0N2M4ODdkMGQ3YzI2OGM2ZGI0OSBiL2Z1enplci9jb3JwdXMvMWJlMWI1MTdkOTJiNGQ0OTVlY2Q0N2M4ODdkMGQ3YzI2OGM2ZGI0OQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTY5NWZlCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xYmUxYjUxN2Q5MmI0ZDQ5NWVjZDQ3Yzg4N2QwZDdjMjY4YzZkYjQ5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWM1OTZhM2EwYjAzM2IyMGRlMjBmOGRlYmE0YWQ4M2M4ZDg0YTZmNiBiL2Z1enplci9jb3JwdXMvMWM1OTZhM2EwYjAzM2IyMGRlMjBmOGRlYmE0YWQ4M2M4ZDg0YTZmNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODIwMTM0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xYzU5NmEzYTBiMDMzYjIwZGUyMGY4ZGViYTRhZDgzYzhkODRhNmY2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWM3MjZlNWZmN2IwMzdiMjAxNjQ4ZTJkZDQwMzMyNzU5N2I1YTM3NSBiL2Z1enplci9jb3JwdXMvMWM3MjZlNWZmN2IwMzdiMjAxNjQ4ZTJkZDQwMzMyNzU5N2I1YTM3NQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTRmNDM0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xYzcyNmU1ZmY3YjAzN2IyMDE2NDhlMmRkNDAzMzI3NTk3YjVhMzc1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWM3OTI4YjIyZTczN2VhNWZkOTcyMGM2MzZmZThjM2EwNmYxZTExOCBiL2Z1enplci9jb3JwdXMvMWM3OTI4YjIyZTczN2VhNWZkOTcyMGM2MzZmZThjM2EwNmYxZTExOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzc4NDM4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xYzc5MjhiMjJlNzM3ZWE1ZmQ5NzIwYzYzNmZlOGMzYTA2ZjFlMTE4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWM4MmRiNmJhMGNkNjQ2ODlhMmY0ZGFhMzEyODkwODUyOTI1M2EzMSBiL2Z1enplci9jb3JwdXMvMWM4MmRiNmJhMGNkNjQ2ODlhMmY0ZGFhMzEyODkwODUyOTI1M2EzMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWQ1YmQzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xYzgyZGI2YmEwY2Q2NDY4OWEyZjRkYWEzMTI4OTA4NTI5MjUzYTMxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWNhYjMxNGVkNDA3ODg2MDJhOWFiYmIwZjMxODBlNzA0YzY3OWQwMiBiL2Z1enplci9jb3JwdXMvMWNhYjMxNGVkNDA3ODg2MDJhOWFiYmIwZjMxODBlNzA0YzY3OWQwMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDliNzI4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xY2FiMzE0ZWQ0MDc4ODYwMmE5YWJiYjBmMzE4MGU3MDRjNjc5ZDAyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWNiNTc4MTM3NjI0ODk4NGUxMDI4NTEyYzVjZGI1Nzc3ZDRmYzZhNCBiL2Z1enplci9jb3JwdXMvMWNiNTc4MTM3NjI0ODk4NGUxMDI4NTEyYzVjZGI1Nzc3ZDRmYzZhNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODUwMjU0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xY2I1NzgxMzc2MjQ4OTg0ZTEwMjg1MTJjNWNkYjU3NzdkNGZjNmE0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWNkZTRjMjFkODg2Y2NlYzU4NzQ4YzBkN2RmOTkzYTZlOGM3MDFkYSBiL2Z1enplci9jb3JwdXMvMWNkZTRjMjFkODg2Y2NlYzU4NzQ4YzBkN2RmOTkzYTZlOGM3MDFkYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjcyYWZjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xY2RlNGMyMWQ4ODZjY2VjNTg3NDhjMGQ3ZGY5OTNhNmU4YzcwMWRhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWNlMjExZjBlNzhkZTc5ODc4YzFjMmYyNjc0NGFhOTQ2MGU4MWQzNSBiL2Z1enplci9jb3JwdXMvMWNlMjExZjBlNzhkZTc5ODc4YzFjMmYyNjc0NGFhOTQ2MGU4MWQzNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTQ2ZGVmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xY2UyMTFmMGU3OGRlNzk4NzhjMWMyZjI2NzQ0YWE5NDYwZTgxZDM1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWQyMDcyMGIyMDAxNzdmZDBhZjU2Y2YzNmQ0OTI1MDlhNzYxYWJmNCBiL2Z1enplci9jb3JwdXMvMWQyMDcyMGIyMDAxNzdmZDBhZjU2Y2YzNmQ0OTI1MDlhNzYxYWJmNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDZlNWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xZDIwNzIwYjIwMDE3N2ZkMGFmNTZjZjM2ZDQ5MjUwOWE3NjFhYmY0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWQzYjc5YjZiMDA0MGMzZWI1MjlkMDgxOWI1NWIwYzhiODkxNGRkYSBiL2Z1enplci9jb3JwdXMvMWQzYjc5YjZiMDA0MGMzZWI1MjlkMDgxOWI1NWIwYzhiODkxNGRkYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzQ2Y2M0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xZDNiNzliNmIwMDQwYzNlYjUyOWQwODE5YjU1YjBjOGI4OTE0ZGRhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWQ0YmNlZmUzOWE4MTVhNGYzMjNhNWU1ZGYzMDA5YWNjMmMzZTFiMyBiL2Z1enplci9jb3JwdXMvMWQ0YmNlZmUzOWE4MTVhNGYzMjNhNWU1ZGYzMDA5YWNjMmMzZTFiMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzg3YjUxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xZDRiY2VmZTM5YTgxNWE0ZjMyM2E1ZTVkZjMwMDlhY2MyYzNlMWIzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWQ4YWNjNTdlZWE2ODcwYWQ3MzdkZWQ4NWQ0ZTA3NzRiOTYxNTU3YyBiL2Z1enplci9jb3JwdXMvMWQ4YWNjNTdlZWE2ODcwYWQ3MzdkZWQ4NWQ0ZTA3NzRiOTYxNTU3YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDJlMTA0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xZDhhY2M1N2VlYTY4NzBhZDczN2RlZDg1ZDRlMDc3NGI5NjE1NTdjCkBAIC0wLDAgKzEgQEAKK3Nlfn97e3tzZV9f/HNfW3t7e3t7e3t7e3stLf///////19faQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWQ5MmExODkwYjBhYWM0MzVhYTBlYjYzNjk3Y2RjNGFhZmY3NzE4MSBiL2Z1enplci9jb3JwdXMvMWQ5MmExODkwYjBhYWM0MzVhYTBlYjYzNjk3Y2RjNGFhZmY3NzE4MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTUyOTE1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xZDkyYTE4OTBiMGFhYzQzNWFhMGViNjM2OTdjZGM0YWFmZjc3MTgxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWRjYTE2ZDJlMjllMmJmYjI0NzZkMTUzNDAxZGVkOGEwZjUwYjljMSBiL2Z1enplci9jb3JwdXMvMWRjYTE2ZDJlMjllMmJmYjI0NzZkMTUzNDAxZGVkOGEwZjUwYjljMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2FlODAyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xZGNhMTZkMmUyOWUyYmZiMjQ3NmQxNTM0MDFkZWQ4YTBmNTBiOWMxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWRlMjhmMWUxYjZkOGY3MDNjOTlhMjg0NjcxMmQ5ZTYzYTFlNjE1NSBiL2Z1enplci9jb3JwdXMvMWRlMjhmMWUxYjZkOGY3MDNjOTlhMjg0NjcxMmQ5ZTYzYTFlNjE1NQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjA1NjhhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xZGUyOGYxZTFiNmQ4ZjcwM2M5OWEyODQ2NzEyZDllNjNhMWU2MTU1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWRmMDhhNTUyYWNjYTljYWFiNWVmNzJjMWIzOTE4NGMyNjk4MWE1MCBiL2Z1enplci9jb3JwdXMvMWRmMDhhNTUyYWNjYTljYWFiNWVmNzJjMWIzOTE4NGMyNjk4MWE1MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2RiYzJhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xZGYwOGE1NTJhY2NhOWNhYWI1ZWY3MmMxYjM5MTg0YzI2OTgxYTUwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWRmNjQ4MmRiZWM5MmU2MDU0MWRiYjU4ZDY4MTljZjUxOWMwMGNkYSBiL2Z1enplci9jb3JwdXMvMWRmNjQ4MmRiZWM5MmU2MDU0MWRiYjU4ZDY4MTljZjUxOWMwMGNkYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTQ1YjNiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xZGY2NDgyZGJlYzkyZTYwNTQxZGJiNThkNjgxOWNmNTE5YzAwY2RhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWUwMDFiMDU4Y2JmOGE1NTE5NjE5NTEzODRkNDJkYTQxOTcxZmI3MiBiL2Z1enplci9jb3JwdXMvMWUwMDFiMDU4Y2JmOGE1NTE5NjE5NTEzODRkNDJkYTQxOTcxZmI3MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Yzg5NDcyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xZTAwMWIwNThjYmY4YTU1MTk2MTk1MTM4NGQ0MmRhNDE5NzFmYjcyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWUxZGUwNGQ2OGI3NWUzYTE0MTVjY2VmMzM3MWU5YmI3MmI5OWY5YSBiL2Z1enplci9jb3JwdXMvMWUxZGUwNGQ2OGI3NWUzYTE0MTVjY2VmMzM3MWU5YmI3MmI5OWY5YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzc0MTIwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xZTFkZTA0ZDY4Yjc1ZTNhMTQxNWNjZWYzMzcxZTliYjcyYjk5ZjlhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWUyNTdhOWFjYTJjZTM0MzlhNmU4MzE4OGU1NmM5YzY0MTZmOTY5YiBiL2Z1enplci9jb3JwdXMvMWUyNTdhOWFjYTJjZTM0MzlhNmU4MzE4OGU1NmM5YzY0MTZmOTY5YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWY4YTQxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xZTI1N2E5YWNhMmNlMzQzOWE2ZTgzMTg4ZTU2YzljNjQxNmY5NjliCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWUzYmEwODE5ODBjNzQ3NGEzMDBiNTYwOGZkMGM1YWJmOWQ0NWRiMCBiL2Z1enplci9jb3JwdXMvMWUzYmEwODE5ODBjNzQ3NGEzMDBiNTYwOGZkMGM1YWJmOWQ0NWRiMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGFkOTIxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xZTNiYTA4MTk4MGM3NDc0YTMwMGI1NjA4ZmQwYzVhYmY5ZDQ1ZGIwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWU1YmRkYTg1YTUwNTY0ODQzOWZmNDFhYzIzYzMzZDVjZjZiMGVmNyBiL2Z1enplci9jb3JwdXMvMWU1YmRkYTg1YTUwNTY0ODQzOWZmNDFhYzIzYzMzZDVjZjZiMGVmNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDQ1MzI1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xZTViZGRhODVhNTA1NjQ4NDM5ZmY0MWFjMjNjMzNkNWNmNmIwZWY3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWU1ZTQ3NzRmYmE4OGJmNWQyOGYyYTZlMDhiMTFhZDJlYmRlNDdmNSBiL2Z1enplci9jb3JwdXMvMWU1ZTQ3NzRmYmE4OGJmNWQyOGYyYTZlMDhiMTFhZDJlYmRlNDdmNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTJmZDg0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xZTVlNDc3NGZiYTg4YmY1ZDI4ZjJhNmUwOGIxMWFkMmViZGU0N2Y1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWU3NWYwOGM4ZmRmZGQ1ZWM0YmI3MGVlYzRmMjM2ZTc3YjNmM2M0OSBiL2Z1enplci9jb3JwdXMvMWU3NWYwOGM4ZmRmZGQ1ZWM0YmI3MGVlYzRmMjM2ZTc3YjNmM2M0OQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDRkMTRlCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xZTc1ZjA4YzhmZGZkZDVlYzRiYjcwZWVjNGYyMzZlNzdiM2YzYzQ5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWYwOWNkYjJmMzZhMjdmYWEzMjE1YTQ4MjkyMmQwZGRkMTcxZmIzMCBiL2Z1enplci9jb3JwdXMvMWYwOWNkYjJmMzZhMjdmYWEzMjE1YTQ4MjkyMmQwZGRkMTcxZmIzMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjRiYzllCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xZjA5Y2RiMmYzNmEyN2ZhYTMyMTVhNDgyOTIyZDBkZGQxNzFmYjMwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWYyNDNkZTYwMzAyMzcwNmIzNTZhMWMyMDIzOTZjODkwYjkzMWQ1YSBiL2Z1enplci9jb3JwdXMvMWYyNDNkZTYwMzAyMzcwNmIzNTZhMWMyMDIzOTZjODkwYjkzMWQ1YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzkzYWIyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xZjI0M2RlNjAzMDIzNzA2YjM1NmExYzIwMjM5NmM4OTBiOTMxZDVhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWY0N2FiMGU4Yzg5YzQ1MDVmYWY2MzQ5NTk0NjhiODFlNTgxMDdkMyBiL2Z1enplci9jb3JwdXMvMWY0N2FiMGU4Yzg5YzQ1MDVmYWY2MzQ5NTk0NjhiODFlNTgxMDdkMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDNmZmViCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xZjQ3YWIwZThjODljNDUwNWZhZjYzNDk1OTQ2OGI4MWU1ODEwN2QzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWY0OTFiNjIxNzBhNjQ2ZDk4YTBkNTc0NzkzOWI0NmYyNzcyZmU3MSBiL2Z1enplci9jb3JwdXMvMWY0OTFiNjIxNzBhNjQ2ZDk4YTBkNTc0NzkzOWI0NmYyNzcyZmU3MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTUyYjY0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xZjQ5MWI2MjE3MGE2NDZkOThhMGQ1NzQ3OTM5YjQ2ZjI3NzJmZTcxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWY0ZTg1MzBkYTc0MzdmYWUxMjY2MDIwZjZmZTQ4ZmViZjAwMDdjZCBiL2Z1enplci9jb3JwdXMvMWY0ZTg1MzBkYTc0MzdmYWUxMjY2MDIwZjZmZTQ4ZmViZjAwMDdjZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWVkMDk3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xZjRlODUzMGRhNzQzN2ZhZTEyNjYwMjBmNmZlNDhmZWJmMDAwN2NkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWY3MjE3ZTk4YWZmMjhhZGJjMjJhZTE1ZGE1MTliNDY4ODA2ZDljZSBiL2Z1enplci9jb3JwdXMvMWY3MjE3ZTk4YWZmMjhhZGJjMjJhZTE1ZGE1MTliNDY4ODA2ZDljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTE1ZmIyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xZjcyMTdlOThhZmYyOGFkYmMyMmFlMTVkYTUxOWI0Njg4MDZkOWNlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWY5MDY1ZTFmYTllYzk4ZmU0YmEwYjNmNDhjNDkzNjY4N2E2OWU0ZiBiL2Z1enplci9jb3JwdXMvMWY5MDY1ZTFmYTllYzk4ZmU0YmEwYjNmNDhjNDkzNjY4N2E2OWU0ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGQ2M2IzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xZjkwNjVlMWZhOWVjOThmZTRiYTBiM2Y0OGM0OTM2Njg3YTY5ZTRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWZhNTdmOWY0MDRiMDMxNDc1YjY3OGFkYjhkNWI1OGFjOTNiZWZmYyBiL2Z1enplci9jb3JwdXMvMWZhNTdmOWY0MDRiMDMxNDc1YjY3OGFkYjhkNWI1OGFjOTNiZWZmYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWIxZWFmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xZmE1N2Y5ZjQwNGIwMzE0NzViNjc4YWRiOGQ1YjU4YWM5M2JlZmZjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWZiNGFhM2EwNTdhMDA4ZDkyYjlhNDJkZTBiMDgxZTAwOWY3ZGNhYiBiL2Z1enplci9jb3JwdXMvMWZiNGFhM2EwNTdhMDA4ZDkyYjlhNDJkZTBiMDgxZTAwOWY3ZGNhYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjU0YTBiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xZmI0YWEzYTA1N2EwMDhkOTJiOWE0MmRlMGIwODFlMDA5ZjdkY2FiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWZjNzYwNzZjMjgzODIxYWNkMDZjYjUxZDJiZWMwY2I0MDg0MTc3NSBiL2Z1enplci9jb3JwdXMvMWZjNzYwNzZjMjgzODIxYWNkMDZjYjUxZDJiZWMwY2I0MDg0MTc3NQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTAwZGU4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xZmM3NjA3NmMyODM4MjFhY2QwNmNiNTFkMmJlYzBjYjQwODQxNzc1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMWZlNTJiNzE2YzVkMWYxMjA2NDk3NmJlYWZiM2Y0YzcwZmVmY2NjZiBiL2Z1enplci9jb3JwdXMvMWZlNTJiNzE2YzVkMWYxMjA2NDk3NmJlYWZiM2Y0YzcwZmVmY2NjZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTg1M2YwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8xZmU1MmI3MTZjNWQxZjEyMDY0OTc2YmVhZmIzZjRjNzBmZWZjY2NmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjAyNGVmZmZiOWM0OTQzNGQ4ODkzYmE2NDRkNDVkZDc3OTMxMzYzZSBiL2Z1enplci9jb3JwdXMvMjAyNGVmZmZiOWM0OTQzNGQ4ODkzYmE2NDRkNDVkZDc3OTMxMzYzZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmM5ODkxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMDI0ZWZmZmI5YzQ5NDM0ZDg4OTNiYTY0NGQ0NWRkNzc5MzEzNjNlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjAzMTY3Y2Y2YTBhYjU0NmY5Mzc2YWJlOTBhYWI3ODQzNjAwZWUyMiBiL2Z1enplci9jb3JwdXMvMjAzMTY3Y2Y2YTBhYjU0NmY5Mzc2YWJlOTBhYWI3ODQzNjAwZWUyMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTc3Y2ZiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMDMxNjdjZjZhMGFiNTQ2ZjkzNzZhYmU5MGFhYjc4NDM2MDBlZTIyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjA1N2E3MGM0YmI1MzM2OTljNDY5ZDMzYWI0OTUzMjAwYmYzOTE4MyBiL2Z1enplci9jb3JwdXMvMjA1N2E3MGM0YmI1MzM2OTljNDY5ZDMzYWI0OTUzMjAwYmYzOTE4MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDI5ZTJmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMDU3YTcwYzRiYjUzMzY5OWM0NjlkMzNhYjQ5NTMyMDBiZjM5MTgzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjA2NGZhMDQ0NTFhMjcwODM2Y2U4NDcxN2I3NTYwZDliNDYxOTFlNyBiL2Z1enplci9jb3JwdXMvMjA2NGZhMDQ0NTFhMjcwODM2Y2U4NDcxN2I3NTYwZDliNDYxOTFlNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWM4NzdlCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMDY0ZmEwNDQ1MWEyNzA4MzZjZTg0NzE3Yjc1NjBkOWI0NjE5MWU3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjBhNmE1YjAyZjg2NWJjYmNmOTkxN2JkODQzODRjMThjYjYzNzBjNyBiL2Z1enplci9jb3JwdXMvMjBhNmE1YjAyZjg2NWJjYmNmOTkxN2JkODQzODRjMThjYjYzNzBjNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmIwZTZhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMGE2YTViMDJmODY1YmNiY2Y5OTE3YmQ4NDM4NGMxOGNiNjM3MGM3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjBiMjk4NDgyYzU5MjhjM2RlMGQ5ZWUyY2MwNDVlZWMyZmM5ODgxMCBiL2Z1enplci9jb3JwdXMvMjBiMjk4NDgyYzU5MjhjM2RlMGQ5ZWUyY2MwNDVlZWMyZmM5ODgxMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGFmZDBmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMGIyOTg0ODJjNTkyOGMzZGUwZDllZTJjYzA0NWVlYzJmYzk4ODEwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjBiMzRmNzQ1YWU0OTFkZjQ1NTk0OTAzMWI1MzRlNGFmN2E4ZmEzYyBiL2Z1enplci9jb3JwdXMvMjBiMzRmNzQ1YWU0OTFkZjQ1NTk0OTAzMWI1MzRlNGFmN2E4ZmEzYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWFmNjhjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMGIzNGY3NDVhZTQ5MWRmNDU1OTQ5MDMxYjUzNGU0YWY3YThmYTNjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjBkNDg0ZjMxMzlhYzI1NGM5MmI0MGI2ZjMzNzViM2E1NDUyZWFkNCBiL2Z1enplci9jb3JwdXMvMjBkNDg0ZjMxMzlhYzI1NGM5MmI0MGI2ZjMzNzViM2E1NDUyZWFkNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjViOTJiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMGQ0ODRmMzEzOWFjMjU0YzkyYjQwYjZmMzM3NWIzYTU0NTJlYWQ0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjBkYjI0MzA0YzVkZTI4YmI2ODEwOWMwMzY1ZDdjNjkwZDBkYTk4OSBiL2Z1enplci9jb3JwdXMvMjBkYjI0MzA0YzVkZTI4YmI2ODEwOWMwMzY1ZDdjNjkwZDBkYTk4OQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmYzMTc3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMGRiMjQzMDRjNWRlMjhiYjY4MTA5YzAzNjVkN2M2OTBkMGRhOTg5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjEzMThjMWEyYjhjNzM2NWIxYmY3NjQ5YzllYzBmM2I3OWU1MGEyNyBiL2Z1enplci9jb3JwdXMvMjEzMThjMWEyYjhjNzM2NWIxYmY3NjQ5YzllYzBmM2I3OWU1MGEyNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjQ2MDhjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMTMxOGMxYTJiOGM3MzY1YjFiZjc2NDljOWVjMGYzYjc5ZTUwYTI3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjE1NTBhMzViOWIwMDI1ZmRiNTJlODc4ZjM4OWQ3OWNhYWNhZTMzZSBiL2Z1enplci9jb3JwdXMvMjE1NTBhMzViOWIwMDI1ZmRiNTJlODc4ZjM4OWQ3OWNhYWNhZTMzZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDc0NTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMTU1MGEzNWI5YjAwMjVmZGI1MmU4NzhmMzg5ZDc5Y2FhY2FlMzNlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjE2ODRlNWUyZDY4MjQ2ZTRlNjc0ZGI5MjU0NGEzMWM3NzhhNjNjZiBiL2Z1enplci9jb3JwdXMvMjE2ODRlNWUyZDY4MjQ2ZTRlNjc0ZGI5MjU0NGEzMWM3NzhhNjNjZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDMxOTA4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMTY4NGU1ZTJkNjgyNDZlNGU2NzRkYjkyNTQ0YTMxYzc3OGE2M2NmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjE3MTZlMzNiNGVlM2FiNTUxNTRiNzJlMWNmYTBlMjE0NWUzYzU2MSBiL2Z1enplci9jb3JwdXMvMjE3MTZlMzNiNGVlM2FiNTUxNTRiNzJlMWNmYTBlMjE0NWUzYzU2MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODQ5OTM2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMTcxNmUzM2I0ZWUzYWI1NTE1NGI3MmUxY2ZhMGUyMTQ1ZTNjNTYxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjIwZTk0ZDkyZmY4NDliYWI1Y2U5M2IyNTFlMzRhMjM3N2I1MDNlMSBiL2Z1enplci9jb3JwdXMvMjIwZTk0ZDkyZmY4NDliYWI1Y2U5M2IyNTFlMzRhMjM3N2I1MDNlMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTRmYzUwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMjBlOTRkOTJmZjg0OWJhYjVjZTkzYjI1MWUzNGEyMzc3YjUwM2UxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjIzMTljZDZmNTVkNzZmNWJkMmFkNTU3ZDUzYzM4YTE4MTE4NTUxMCBiL2Z1enplci9jb3JwdXMvMjIzMTljZDZmNTVkNzZmNWJkMmFkNTU3ZDUzYzM4YTE4MTE4NTUxMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDVjNGYwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMjMxOWNkNmY1NWQ3NmY1YmQyYWQ1NTdkNTNjMzhhMTgxMTg1NTEwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjIzZWRkMzIxNjA1YjJhODE0YTQyZWY3YmNmZGRiZGM3ZDZkZTZiMSBiL2Z1enplci9jb3JwdXMvMjIzZWRkMzIxNjA1YjJhODE0YTQyZWY3YmNmZGRiZGM3ZDZkZTZiMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDBiODhjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMjNlZGQzMjE2MDViMmE4MTRhNDJlZjdiY2ZkZGJkYzdkNmRlNmIxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjI4MjBhYWFjNzNmODNiYmQyZTUxYTQ0NjY3N2E2ODIxMGNkMmFiZSBiL2Z1enplci9jb3JwdXMvMjI4MjBhYWFjNzNmODNiYmQyZTUxYTQ0NjY3N2E2ODIxMGNkMmFiZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTZiYmRiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMjgyMGFhYWM3M2Y4M2JiZDJlNTFhNDQ2Njc3YTY4MjEwY2QyYWJlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjI5NjRmZmNjYTU5NTA2NjY0MWVjMDhjYTc5N2JhNGZiNjFiMjYyNiBiL2Z1enplci9jb3JwdXMvMjI5NjRmZmNjYTU5NTA2NjY0MWVjMDhjYTc5N2JhNGZiNjFiMjYyNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjIwMjUzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMjk2NGZmY2NhNTk1MDY2NjQxZWMwOGNhNzk3YmE0ZmI2MWIyNjI2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjJiYTA2NjQ0NzQyMjA1Yjg0YzVlZGI2NGE4MjhjNmMyZmY5ZmU1MyBiL2Z1enplci9jb3JwdXMvMjJiYTA2NjQ0NzQyMjA1Yjg0YzVlZGI2NGE4MjhjNmMyZmY5ZmU1MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2M4N2M2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMmJhMDY2NDQ3NDIyMDViODRjNWVkYjY0YTgyOGM2YzJmZjlmZTUzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjJjZjk4OTQ2MDJlZGExYTM5OTAyN2UyYzM2OTg2YWE1ZjM3ZjU0MSBiL2Z1enplci9jb3JwdXMvMjJjZjk4OTQ2MDJlZGExYTM5OTAyN2UyYzM2OTg2YWE1ZjM3ZjU0MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjgyYjVhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMmNmOTg5NDYwMmVkYTFhMzk5MDI3ZTJjMzY5ODZhYTVmMzdmNTQxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjJkMjc2ODk4YWNjMmVmNmZlMDNmOGU5MmQzOTcwZDhjNWE5YzBmYSBiL2Z1enplci9jb3JwdXMvMjJkMjc2ODk4YWNjMmVmNmZlMDNmOGU5MmQzOTcwZDhjNWE5YzBmYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDFhZGE1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMmQyNzY4OThhY2MyZWY2ZmUwM2Y4ZTkyZDM5NzBkOGM1YTljMGZhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjJkODhmMzgzNzdmNWEyOTYyNGRlOTVhZDI0MTg3ZDBiN2YyZjgyMiBiL2Z1enplci9jb3JwdXMvMjJkODhmMzgzNzdmNWEyOTYyNGRlOTVhZDI0MTg3ZDBiN2YyZjgyMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTU0MGI2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMmQ4OGYzODM3N2Y1YTI5NjI0ZGU5NWFkMjQxODdkMGI3ZjJmODIyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjJlNzA2YjYxNTk5YjYzMDEyZGFmMjg1NzZmYmJmOTUxYzA2ZmIyZiBiL2Z1enplci9jb3JwdXMvMjJlNzA2YjYxNTk5YjYzMDEyZGFmMjg1NzZmYmJmOTUxYzA2ZmIyZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWQyNGJhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMmU3MDZiNjE1OTliNjMwMTJkYWYyODU3NmZiYmY5NTFjMDZmYjJmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjJlODMyOGFjNjM4MTZhYmVkODVkMWMzMGUxMjk5OWNmYmYwYjJhOSBiL2Z1enplci9jb3JwdXMvMjJlODMyOGFjNjM4MTZhYmVkODVkMWMzMGUxMjk5OWNmYmYwYjJhOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGJhNzYyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMmU4MzI4YWM2MzgxNmFiZWQ4NWQxYzMwZTEyOTk5Y2ZiZjBiMmE5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjJlYjQwNzE3MzViYTI2NDI1YjBlZDllN2U5ZWNkOWMzYjZiMzZlZiBiL2Z1enplci9jb3JwdXMvMjJlYjQwNzE3MzViYTI2NDI1YjBlZDllN2U5ZWNkOWMzYjZiMzZlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWIwOWU3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMmViNDA3MTczNWJhMjY0MjViMGVkOWU3ZTllY2Q5YzNiNmIzNmVmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjJmM2QyMWYxZGUzNTUzOThmYjI4ZTYwYWYzMDVlYWEwZDNkZWYxYyBiL2Z1enplci9jb3JwdXMvMjJmM2QyMWYxZGUzNTUzOThmYjI4ZTYwYWYzMDVlYWEwZDNkZWYxYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWQwYzk3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMmYzZDIxZjFkZTM1NTM5OGZiMjhlNjBhZjMwNWVhYTBkM2RlZjFjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjMxM2U0OTI4ZGRlOGM1MGE2OWY1ZTk4YzkxZGQ4MmY2MjY3OTM1NCBiL2Z1enplci9jb3JwdXMvMjMxM2U0OTI4ZGRlOGM1MGE2OWY1ZTk4YzkxZGQ4MmY2MjY3OTM1NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2Y4OGJjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMzEzZTQ5MjhkZGU4YzUwYTY5ZjVlOThjOTFkZDgyZjYyNjc5MzU0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjM0OGE3MTc3Yzc0OWE1OGM4MmM0MGRiNTFmZWU1ZGNmYzliMmJmZCBiL2Z1enplci9jb3JwdXMvMjM0OGE3MTc3Yzc0OWE1OGM4MmM0MGRiNTFmZWU1ZGNmYzliMmJmZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjNhMDExCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMzQ4YTcxNzdjNzQ5YTU4YzgyYzQwZGI1MWZlZTVkY2ZjOWIyYmZkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjM5YTQ1M2FhMWRmNDc2YTgzYjhiMzQ0ODBiYThhNzQxZjBiYjZhYyBiL2Z1enplci9jb3JwdXMvMjM5YTQ1M2FhMWRmNDc2YTgzYjhiMzQ0ODBiYThhNzQxZjBiYjZhYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWJmNThkCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yMzlhNDUzYWExZGY0NzZhODNiOGIzNDQ4MGJhOGE3NDFmMGJiNmFjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjNhZjk3M2YwYTE5MDEwZmUzZTM0MTA1MmM2YzY5NThlYmM3ODhkNiBiL2Z1enplci9jb3JwdXMvMjNhZjk3M2YwYTE5MDEwZmUzZTM0MTA1MmM2YzY5NThlYmM3ODhkNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmVmYWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yM2FmOTczZjBhMTkwMTBmZTNlMzQxMDUyYzZjNjk1OGViYzc4OGQ2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjNiNWJhMTgzN2E5ZTgwMzNiYmZhZTc1YTlmMDAzNWNkZDMwMDViOCBiL2Z1enplci9jb3JwdXMvMjNiNWJhMTgzN2E5ZTgwMzNiYmZhZTc1YTlmMDAzNWNkZDMwMDViOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzNkMmE2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yM2I1YmExODM3YTllODAzM2JiZmFlNzVhOWYwMDM1Y2RkMzAwNWI4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjNiZjRlMGI1ZDc1OGY5MjBmZDExMTA2ZTU1NDM2MzliYmY4NjVlNCBiL2Z1enplci9jb3JwdXMvMjNiZjRlMGI1ZDc1OGY5MjBmZDExMTA2ZTU1NDM2MzliYmY4NjVlNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2YwNzBlCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yM2JmNGUwYjVkNzU4ZjkyMGZkMTExMDZlNTU0MzYzOWJiZjg2NWU0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjNkN2Y2Y2YwZTg1ZWEwNmFmOGIzOTE0YzhkZDJmZjQxYmIzOGIyNCBiL2Z1enplci9jb3JwdXMvMjNkN2Y2Y2YwZTg1ZWEwNmFmOGIzOTE0YzhkZDJmZjQxYmIzOGIyNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDljMmZhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yM2Q3ZjZjZjBlODVlYTA2YWY4YjM5MTRjOGRkMmZmNDFiYjM4YjI0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjNlYjMzNTczNzU0NmNiY2ZiYjEyZDBiYWQ5N2FmNGFiYzMxZDRhNCBiL2Z1enplci9jb3JwdXMvMjNlYjMzNTczNzU0NmNiY2ZiYjEyZDBiYWQ5N2FmNGFiYzMxZDRhNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWVkYTJhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yM2ViMzM1NzM3NTQ2Y2JjZmJiMTJkMGJhZDk3YWY0YWJjMzFkNGE0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjNmMGRjMWEyZDJlOTUzMWJkZjJiNTBiOGUzZjRjYzY1NjRmZjExZiBiL2Z1enplci9jb3JwdXMvMjNmMGRjMWEyZDJlOTUzMWJkZjJiNTBiOGUzZjRjYzY1NjRmZjExZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTEwOGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yM2YwZGMxYTJkMmU5NTMxYmRmMmI1MGI4ZTNmNGNjNjU2NGZmMTFmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjQwNjZlOWRlOTZiZDQ2NjMwZDA3NjA2YWMxMmI4YWNjM2E1YTA1MCBiL2Z1enplci9jb3JwdXMvMjQwNjZlOWRlOTZiZDQ2NjMwZDA3NjA2YWMxMmI4YWNjM2E1YTA1MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGExYTEwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yNDA2NmU5ZGU5NmJkNDY2MzBkMDc2MDZhYzEyYjhhY2MzYTVhMDUwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjQxYmUyMjFmMDlkMGE2OWU5MjlkYTU4Y2MxMTk4ZGM3ZjdkODQ0NiBiL2Z1enplci9jb3JwdXMvMjQxYmUyMjFmMDlkMGE2OWU5MjlkYTU4Y2MxMTk4ZGM3ZjdkODQ0NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTczMmZiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yNDFiZTIyMWYwOWQwYTY5ZTkyOWRhNThjYzExOThkYzdmN2Q4NDQ2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjQyM2UwY2VlMzg5Yjc0MDExMmEwNGE5MzVhMjhiNWRhNjY0ZGM2NiBiL2Z1enplci9jb3JwdXMvMjQyM2UwY2VlMzg5Yjc0MDExMmEwNGE5MzVhMjhiNWRhNjY0ZGM2NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDJlMTc1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yNDIzZTBjZWUzODliNzQwMTEyYTA0YTkzNWEyOGI1ZGE2NjRkYzY2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjQ0ZmE5ZjVjODBlNzhhM2IzYjJiMmY0MjU5ZGZjODM4YWJkODAzZiBiL2Z1enplci9jb3JwdXMvMjQ0ZmE5ZjVjODBlNzhhM2IzYjJiMmY0MjU5ZGZjODM4YWJkODAzZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjM2ZjIwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yNDRmYTlmNWM4MGU3OGEzYjNiMmIyZjQyNTlkZmM4MzhhYmQ4MDNmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjQ2Njk4YzA0ZDg4NDlkYzE5ZThhMTAzOTI4YTUzZjUwMDZhMDQ0ZiBiL2Z1enplci9jb3JwdXMvMjQ2Njk4YzA0ZDg4NDlkYzE5ZThhMTAzOTI4YTUzZjUwMDZhMDQ0ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWNhZmIzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yNDY2OThjMDRkODg0OWRjMTllOGExMDM5MjhhNTNmNTAwNmEwNDRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjQ2ZGFmMDQ1ODRiMWIzYTNiMzA2OTIxNWYyZTNiMzg2ZWVkNzYzMCBiL2Z1enplci9jb3JwdXMvMjQ2ZGFmMDQ1ODRiMWIzYTNiMzA2OTIxNWYyZTNiMzg2ZWVkNzYzMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmM0NGI0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yNDZkYWYwNDU4NGIxYjNhM2IzMDY5MjE1ZjJlM2IzODZlZWQ3NjMwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjQ3YzY4MmYzNzA2MzU0MWVlYmQwNWU0NWY4YjU5MGYwZDJkODQ0MiBiL2Z1enplci9jb3JwdXMvMjQ3YzY4MmYzNzA2MzU0MWVlYmQwNWU0NWY4YjU5MGYwZDJkODQ0MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmZjMDIyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yNDdjNjgyZjM3MDYzNTQxZWViZDA1ZTQ1ZjhiNTkwZjBkMmQ4NDQyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjQ4NWFiMmNkZDYzMzdkN2UzMTU3ZWQ1YTQ3ODBkZDc2MzA0NjRmYSBiL2Z1enplci9jb3JwdXMvMjQ4NWFiMmNkZDYzMzdkN2UzMTU3ZWQ1YTQ3ODBkZDc2MzA0NjRmYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODRmNTY2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yNDg1YWIyY2RkNjMzN2Q3ZTMxNTdlZDVhNDc4MGRkNzYzMDQ2NGZhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjRlNWU4OTEzMTcyNzU5NWJiYTNhZDdhYmQxMGE3MzVmMDc5MTY4MyBiL2Z1enplci9jb3JwdXMvMjRlNWU4OTEzMTcyNzU5NWJiYTNhZDdhYmQxMGE3MzVmMDc5MTY4MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTFhZDc4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yNGU1ZTg5MTMxNzI3NTk1YmJhM2FkN2FiZDEwYTczNWYwNzkxNjgzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjUwNTVmOTJhOGFhYWEyMjMxNTBhYjRlZGE2NzU0ZWFkMjNmZWM2ZiBiL2Z1enplci9jb3JwdXMvMjUwNTVmOTJhOGFhYWEyMjMxNTBhYjRlZGE2NzU0ZWFkMjNmZWM2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDEzYzRhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yNTA1NWY5MmE4YWFhYTIyMzE1MGFiNGVkYTY3NTRlYWQyM2ZlYzZmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjUyOTdjZTIxNjc4MDQyYjAzZDU1YjMxNjIzMjZmMzQwOTkwM2VlOSBiL2Z1enplci9jb3JwdXMvMjUyOTdjZTIxNjc4MDQyYjAzZDU1YjMxNjIzMjZmMzQwOTkwM2VlOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTgxYzI0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yNTI5N2NlMjE2NzgwNDJiMDNkNTViMzE2MjMyNmYzNDA5OTAzZWU5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjU5NmI2MDdlN2YzZTJjMzUzMzFhNmJhZTE2Y2NiZjQzNmQ4ZWI5ZCBiL2Z1enplci9jb3JwdXMvMjU5NmI2MDdlN2YzZTJjMzUzMzFhNmJhZTE2Y2NiZjQzNmQ4ZWI5ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzAyNmIwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yNTk2YjYwN2U3ZjNlMmMzNTMzMWE2YmFlMTZjY2JmNDM2ZDhlYjlkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjU5YzRlNWUwNzkzMDBiOGIzYTA1OWM0ZWE1YTljM2U4YTZmNTUxMyBiL2Z1enplci9jb3JwdXMvMjU5YzRlNWUwNzkzMDBiOGIzYTA1OWM0ZWE1YTljM2U4YTZmNTUxMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDkyMzUxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yNTljNGU1ZTA3OTMwMGI4YjNhMDU5YzRlYTVhOWMzZThhNmY1NTEzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjViMGMwYjRhZThkYmNhN2UzNDU1NDAxYmU5ZjUzNGUwYWZkODcxNyBiL2Z1enplci9jb3JwdXMvMjViMGMwYjRhZThkYmNhN2UzNDU1NDAxYmU5ZjUzNGUwYWZkODcxNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjA1ZTAxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yNWIwYzBiNGFlOGRiY2E3ZTM0NTU0MDFiZTlmNTM0ZTBhZmQ4NzE3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjVjM2QyYWFmZGFmNTNkNWNmZTQ1YTM2YmY5MjdjNThmNzk4NmE2OSBiL2Z1enplci9jb3JwdXMvMjVjM2QyYWFmZGFmNTNkNWNmZTQ1YTM2YmY5MjdjNThmNzk4NmE2OQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjU2YTRiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yNWMzZDJhYWZkYWY1M2Q1Y2ZlNDVhMzZiZjkyN2M1OGY3OTg2YTY5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjVjNTg2MmQyZDdmYzBhZTFmZTQ3MDQ2MTNiOWY2ZTBhYzhkMWIwZSBiL2Z1enplci9jb3JwdXMvMjVjNTg2MmQyZDdmYzBhZTFmZTQ3MDQ2MTNiOWY2ZTBhYzhkMWIwZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDkxNDZhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yNWM1ODYyZDJkN2ZjMGFlMWZlNDcwNDYxM2I5ZjZlMGFjOGQxYjBlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjVjYjZkNTdjZmU1OGQ4M2VmNGJjYzRkNTMyN2YxODVkNWM1MDk3MSBiL2Z1enplci9jb3JwdXMvMjVjYjZkNTdjZmU1OGQ4M2VmNGJjYzRkNTMyN2YxODVkNWM1MDk3MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGFmYWM4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yNWNiNmQ1N2NmZTU4ZDgzZWY0YmNjNGQ1MzI3ZjE4NWQ1YzUwOTcxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjVmNjNkNDFmNWFhMzBiZWEyMzM3NGQyZjk4YmQyZmI1YmM2ZTMzMCBiL2Z1enplci9jb3JwdXMvMjVmNjNkNDFmNWFhMzBiZWEyMzM3NGQyZjk4YmQyZmI1YmM2ZTMzMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjQ5NjJiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yNWY2M2Q0MWY1YWEzMGJlYTIzMzc0ZDJmOThiZDJmYjViYzZlMzMwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjVmNzFjMDc1NDQ1ZjJjYTMyZjM3OGQ5YjczYTk5MDQzZmI3Mjk5YyBiL2Z1enplci9jb3JwdXMvMjVmNzFjMDc1NDQ1ZjJjYTMyZjM3OGQ5YjczYTk5MDQzZmI3Mjk5YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmY5ZTU4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yNWY3MWMwNzU0NDVmMmNhMzJmMzc4ZDliNzNhOTkwNDNmYjcyOTljCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjYxYWJkMzkyMGM5ODQ4YmI3ZTI3ZDEzMmY1NjM5NmFjNzFlODFlYiBiL2Z1enplci9jb3JwdXMvMjYxYWJkMzkyMGM5ODQ4YmI3ZTI3ZDEzMmY1NjM5NmFjNzFlODFlYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWZmZjNjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yNjFhYmQzOTIwYzk4NDhiYjdlMjdkMTMyZjU2Mzk2YWM3MWU4MWViCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjY2ZDRkODQ1NmZiZTZlOTQ5MmVmMTMxZWRjMThmMDhlOTJhZDk2OSBiL2Z1enplci9jb3JwdXMvMjY2ZDRkODQ1NmZiZTZlOTQ5MmVmMTMxZWRjMThmMDhlOTJhZDk2OQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjA1M2QyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yNjZkNGQ4NDU2ZmJlNmU5NDkyZWYxMzFlZGMxOGYwOGU5MmFkOTY5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjZiZDI0MTQ0M2M2Y2E2M2ZiMDI1ODdlOTZlN2Y1NjgyMWY2MTZiZSBiL2Z1enplci9jb3JwdXMvMjZiZDI0MTQ0M2M2Y2E2M2ZiMDI1ODdlOTZlN2Y1NjgyMWY2MTZiZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjRlNzk3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yNmJkMjQxNDQzYzZjYTYzZmIwMjU4N2U5NmU3ZjU2ODIxZjYxNmJlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjZlNWQ5OWMyNmNlNDNmYzQzMjg4M2M1MGZmNzVmY2RkOGYwZTlhYiBiL2Z1enplci9jb3JwdXMvMjZlNWQ5OWMyNmNlNDNmYzQzMjg4M2M1MGZmNzVmY2RkOGYwZTlhYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OThmY2M5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yNmU1ZDk5YzI2Y2U0M2ZjNDMyODgzYzUwZmY3NWZjZGQ4ZjBlOWFiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjc2YzE0OGNlODg2YWIwNTNkNTVkYzdhNDViMWJhMjA4OTYwODQ4OCBiL2Z1enplci9jb3JwdXMvMjc2YzE0OGNlODg2YWIwNTNkNTVkYzdhNDViMWJhMjA4OTYwODQ4OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDY3MTk2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yNzZjMTQ4Y2U4ODZhYjA1M2Q1NWRjN2E0NWIxYmEyMDg5NjA4NDg4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjc2Y2QzNTZkZjk2ODUxNDRiYzQxZWQ3OGQ4MTNlNjQyMWZkOTZhNCBiL2Z1enplci9jb3JwdXMvMjc2Y2QzNTZkZjk2ODUxNDRiYzQxZWQ3OGQ4MTNlNjQyMWZkOTZhNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjVhMDRhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yNzZjZDM1NmRmOTY4NTE0NGJjNDFlZDc4ZDgxM2U2NDIxZmQ5NmE0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjc4ODgwZjcwOGU4NTRmOWI3NjY5YWU3NmRmYTQyMjFmOThlZTljYiBiL2Z1enplci9jb3JwdXMvMjc4ODgwZjcwOGU4NTRmOWI3NjY5YWU3NmRmYTQyMjFmOThlZTljYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTg1MTExCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yNzg4ODBmNzA4ZTg1NGY5Yjc2NjlhZTc2ZGZhNDIyMWY5OGVlOWNiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjdiMjQ3Yjc1ZmVhYjk3NjU0MTRhMTZlN2U5NGRlN2JiZjczOTdjMyBiL2Z1enplci9jb3JwdXMvMjdiMjQ3Yjc1ZmVhYjk3NjU0MTRhMTZlN2U5NGRlN2JiZjczOTdjMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2YwMTM4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yN2IyNDdiNzVmZWFiOTc2NTQxNGExNmU3ZTk0ZGU3YmJmNzM5N2MzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjdlOWViNTA1YWM4NDAxOTA0ZWU3ZmY0ZDlhMzRlYjNmODczYWZlNSBiL2Z1enplci9jb3JwdXMvMjdlOWViNTA1YWM4NDAxOTA0ZWU3ZmY0ZDlhMzRlYjNmODczYWZlNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2UwODMyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yN2U5ZWI1MDVhYzg0MDE5MDRlZTdmZjRkOWEzNGViM2Y4NzNhZmU1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjgxMjcxN2Q3OWQ2NjAzNzkzMWMwZDhiMzA5MmE4OTI4NDJkZGFhNyBiL2Z1enplci9jb3JwdXMvMjgxMjcxN2Q3OWQ2NjAzNzkzMWMwZDhiMzA5MmE4OTI4NDJkZGFhNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmFhMzRmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yODEyNzE3ZDc5ZDY2MDM3OTMxYzBkOGIzMDkyYTg5Mjg0MmRkYWE3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjg0ODVhZTc5YjJmZjVjYTNkYmQzMWU1MTRhMGNlZDk1ZTgwNDVmZiBiL2Z1enplci9jb3JwdXMvMjg0ODVhZTc5YjJmZjVjYTNkYmQzMWU1MTRhMGNlZDk1ZTgwNDVmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjQ5ODdlCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yODQ4NWFlNzliMmZmNWNhM2RiZDMxZTUxNGEwY2VkOTVlODA0NWZmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjg0ZjMwMDBhNzI1ZDEyNWNmMWQ2NWRiMmQxNWNjMmQ5Mjg2MGYxNCBiL2Z1enplci9jb3JwdXMvMjg0ZjMwMDBhNzI1ZDEyNWNmMWQ2NWRiMmQxNWNjMmQ5Mjg2MGYxNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mzg1ZWU3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yODRmMzAwMGE3MjVkMTI1Y2YxZDY1ZGIyZDE1Y2MyZDkyODYwZjE0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjg1Y2NjNWFjZjhjMDE2ZGE2NGZkMzNlZDkxMGMyMzIwZDM4NTA1MCBiL2Z1enplci9jb3JwdXMvMjg1Y2NjNWFjZjhjMDE2ZGE2NGZkMzNlZDkxMGMyMzIwZDM4NTA1MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzYyNzNjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yODVjY2M1YWNmOGMwMTZkYTY0ZmQzM2VkOTEwYzIzMjBkMzg1MDUwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjg3MGJiNjU5Mjc4YjA5MDdlYTYyZmQzOGRkMWZmZjVkZjU4MDY5YyBiL2Z1enplci9jb3JwdXMvMjg3MGJiNjU5Mjc4YjA5MDdlYTYyZmQzOGRkMWZmZjVkZjU4MDY5YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTAxODYyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yODcwYmI2NTkyNzhiMDkwN2VhNjJmZDM4ZGQxZmZmNWRmNTgwNjljCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjg3OTM0YWM1M2UyMjk3MDhmNWNhYTQ2N2NmOTA1YWU2ZGNmZmY3NiBiL2Z1enplci9jb3JwdXMvMjg3OTM0YWM1M2UyMjk3MDhmNWNhYTQ2N2NmOTA1YWU2ZGNmZmY3NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWJjNWE3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yODc5MzRhYzUzZTIyOTcwOGY1Y2FhNDY3Y2Y5MDVhZTZkY2ZmZjc2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjg4MDExZWVhNmFlMzVmZTkwMTdmYWRhMGQyMzVhNjYxMjBhZGIzNSBiL2Z1enplci9jb3JwdXMvMjg4MDExZWVhNmFlMzVmZTkwMTdmYWRhMGQyMzVhNjYxMjBhZGIzNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTIyZDE4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yODgwMTFlZWE2YWUzNWZlOTAxN2ZhZGEwZDIzNWE2NjEyMGFkYjM1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjhhNjg2NTc2OGE3YjQzZWM1OTNiMWQ4ZWU0OTMzYzc4ZTA1NjJlOSBiL2Z1enplci9jb3JwdXMvMjhhNjg2NTc2OGE3YjQzZWM1OTNiMWQ4ZWU0OTMzYzc4ZTA1NjJlOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzVhOGZhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yOGE2ODY1NzY4YTdiNDNlYzU5M2IxZDhlZTQ5MzNjNzhlMDU2MmU5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjhhYThkZTRhMDEzMTdkYjk5ZDRiYWY1N2U0MWY1ODI0MjRlOWE5MCBiL2Z1enplci9jb3JwdXMvMjhhYThkZTRhMDEzMTdkYjk5ZDRiYWY1N2U0MWY1ODI0MjRlOWE5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGNhZGMzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yOGFhOGRlNGEwMTMxN2RiOTlkNGJhZjU3ZTQxZjU4MjQyNGU5YTkwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjhiMDgwZjU0YjFkNDMyM2UyYmNiMmQ0ZDY0ZGJlNjhjNzRiZjg0MCBiL2Z1enplci9jb3JwdXMvMjhiMDgwZjU0YjFkNDMyM2UyYmNiMmQ0ZDY0ZGJlNjhjNzRiZjg0MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzkyZDk0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yOGIwODBmNTRiMWQ0MzIzZTJiY2IyZDRkNjRkYmU2OGM3NGJmODQwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjhiNGI3NWQwZmJhOTYyMDUxZDI1ZTljYTZkYjFhMmM4NzBlMzlkYSBiL2Z1enplci9jb3JwdXMvMjhiNGI3NWQwZmJhOTYyMDUxZDI1ZTljYTZkYjFhMmM4NzBlMzlkYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2JmM2E1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yOGI0Yjc1ZDBmYmE5NjIwNTFkMjVlOWNhNmRiMWEyYzg3MGUzOWRhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjhjMzA0ZjA0Y2MzNWMxZDY3ZDk3MjEwZmM2NWZhOTljNmIwYzNhYyBiL2Z1enplci9jb3JwdXMvMjhjMzA0ZjA0Y2MzNWMxZDY3ZDk3MjEwZmM2NWZhOTljNmIwYzNhYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2YzYTQzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yOGMzMDRmMDRjYzM1YzFkNjdkOTcyMTBmYzY1ZmE5OWM2YjBjM2FjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjhkNjNlOTgwYzMzNDExOWFlZmUyZWE5MjhiM2U0YmFiNDgzNGVjMSBiL2Z1enplci9jb3JwdXMvMjhkNjNlOTgwYzMzNDExOWFlZmUyZWE5MjhiM2U0YmFiNDgzNGVjMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDg2ODZmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yOGQ2M2U5ODBjMzM0MTE5YWVmZTJlYTkyOGIzZTRiYWI0ODM0ZWMxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjkxZTk1OGY4MjQ2NTE0NjgxNmNmZTg2ZDc5NjQ3OTY4OTM5MTFhMyBiL2Z1enplci9jb3JwdXMvMjkxZTk1OGY4MjQ2NTE0NjgxNmNmZTg2ZDc5NjQ3OTY4OTM5MTFhMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWI3OWI0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yOTFlOTU4ZjgyNDY1MTQ2ODE2Y2ZlODZkNzk2NDc5Njg5MzkxMWEzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjk2ZjFhYWY2M2MxZWQyMDk5ZGEzNjNlNzE4YmU2OGEyZDY3ZjFkMSBiL2Z1enplci9jb3JwdXMvMjk2ZjFhYWY2M2MxZWQyMDk5ZGEzNjNlNzE4YmU2OGEyZDY3ZjFkMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjM4YzhjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yOTZmMWFhZjYzYzFlZDIwOTlkYTM2M2U3MThiZTY4YTJkNjdmMWQxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjk3MDRiM2Q5YjljMDY0NWMxMzIwZDg1MmFiMWJlZWE4NzFhMWNhMyBiL2Z1enplci9jb3JwdXMvMjk3MDRiM2Q5YjljMDY0NWMxMzIwZDg1MmFiMWJlZWE4NzFhMWNhMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWI3NjEwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yOTcwNGIzZDliOWMwNjQ1YzEzMjBkODUyYWIxYmVlYTg3MWExY2EzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjk4NWQ1MDhjMGY4ZjM3NDUwNGRkZmM2Nzg2ZWIyMTkzNGFhZTMyYiBiL2Z1enplci9jb3JwdXMvMjk4NWQ1MDhjMGY4ZjM3NDUwNGRkZmM2Nzg2ZWIyMTkzNGFhZTMyYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDhlY2RmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yOTg1ZDUwOGMwZjhmMzc0NTA0ZGRmYzY3ODZlYjIxOTM0YWFlMzJiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvMjk4ZjY5Yjc0Nzg4Y2Y5MjgxN2I5ZjIzOTVmNTM4M2ExOGIxNDhkMSBiL2Z1enplci9jb3JwdXMvMjk4ZjY5Yjc0Nzg4Y2Y5MjgxN2I5ZjIzOTVmNTM4M2ExOGIxNDhkMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDZjN2E3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy8yOThmNjliNzQ3ODhjZjkyODE3YjlmMjM5NWY1MzgzYTE4YjE0OGQxCkBAIC0wLDAgKzEgQEAKK3NlX1/8ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yOTkyMTgwMjZjMGUzZjI0YmI4ZjdlZTdhM2U1YmJhYjQwMTNhNDM4IGIvZnV6emVyL2NvcnB1cy8yOTkyMTgwMjZjMGUzZjI0YmI4ZjdlZTdhM2U1YmJhYjQwMTNhNDM4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMzE1Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzI5OTIxODAyNmMwZTNmMjRiYjhmN2VlN2EzZTViYmFiNDAxM2E0MzgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yOTk4ZTI5Mjk5MWZjNWMyYWJkN2RmY2NiMmY0OTdiNmYyYWNhMGJkIGIvZnV6emVyL2NvcnB1cy8yOTk4ZTI5Mjk5MWZjNWMyYWJkN2RmY2NiMmY0OTdiNmYyYWNhMGJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNTYyMjUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzI5OThlMjkyOTkxZmM1YzJhYmQ3ZGZjY2IyZjQ5N2I2ZjJhY2EwYmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yOWExMzAyMWFjNWJlN2YwOTIzZjI1YjFmZmZjMzdhNWQzM2UxY2JmIGIvZnV6emVyL2NvcnB1cy8yOWExMzAyMWFjNWJlN2YwOTIzZjI1YjFmZmZjMzdhNWQzM2UxY2JmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MDQzMGEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzI5YTEzMDIxYWM1YmU3ZjA5MjNmMjViMWZmZmMzN2E1ZDMzZTFjYmYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yOWE2MmQxNThjNmJhNGY5NzM2MjE5YmZmY2I3ZDEwMzAxOTQwNmNiIGIvZnV6emVyL2NvcnB1cy8yOWE2MmQxNThjNmJhNGY5NzM2MjE5YmZmY2I3ZDEwMzAxOTQwNmNiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNGVhYTAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzI5YTYyZDE1OGM2YmE0Zjk3MzYyMTliZmZjYjdkMTAzMDE5NDA2Y2IKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yOWM5YjFjMzdlMTZiOWZhYjc4OTM2NmE1N2VmYWVhNGI2OTRhM2RhIGIvZnV6emVyL2NvcnB1cy8yOWM5YjFjMzdlMTZiOWZhYjc4OTM2NmE1N2VmYWVhNGI2OTRhM2RhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMjgzY2QKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzI5YzliMWMzN2UxNmI5ZmFiNzg5MzY2YTU3ZWZhZWE0YjY5NGEzZGEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yOWZkNTU3MDg4ODAwNjkzOWU3MWE4NmJiYzAyMDE3NDI3ODNhZGNhIGIvZnV6emVyL2NvcnB1cy8yOWZkNTU3MDg4ODAwNjkzOWU3MWE4NmJiYzAyMDE3NDI3ODNhZGNhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZTc1NzYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzI5ZmQ1NTcwODg4MDA2OTM5ZTcxYTg2YmJjMDIwMTc0Mjc4M2FkY2EKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yYTA5NzllOGQ1ODM1NDFkMTQzN2ZmM2Y2ZjEwMzM0NjA2YTI0NTg4IGIvZnV6emVyL2NvcnB1cy8yYTA5NzllOGQ1ODM1NDFkMTQzN2ZmM2Y2ZjEwMzM0NjA2YTI0NTg4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYjYyN2YKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJhMDk3OWU4ZDU4MzU0MWQxNDM3ZmYzZjZmMTAzMzQ2MDZhMjQ1ODgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yYTU3NjU5ZGIwYjU5YzIyMjUxMjU3YWJjNzVlMDdmM2FkNzFiNzQ2IGIvZnV6emVyL2NvcnB1cy8yYTU3NjU5ZGIwYjU5YzIyMjUxMjU3YWJjNzVlMDdmM2FkNzFiNzQ2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYTFlNjYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJhNTc2NTlkYjBiNTljMjIyNTEyNTdhYmM3NWUwN2YzYWQ3MWI3NDYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yYTkxMzdkOGJiZDg0MWU0OWMwOWNmODM1YzM3MjVmNDQ0NjVmYTZhIGIvZnV6emVyL2NvcnB1cy8yYTkxMzdkOGJiZDg0MWU0OWMwOWNmODM1YzM3MjVmNDQ0NjVmYTZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZmRiYTYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJhOTEzN2Q4YmJkODQxZTQ5YzA5Y2Y4MzVjMzcyNWY0NDQ2NWZhNmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yYWEwOGFlNjQwNDFiMGFmZTI0YTA3MjJmOWI5MDUzZWQyYTVjZGMwIGIvZnV6emVyL2NvcnB1cy8yYWEwOGFlNjQwNDFiMGFmZTI0YTA3MjJmOWI5MDUzZWQyYTVjZGMwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZTcwMjUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJhYTA4YWU2NDA0MWIwYWZlMjRhMDcyMmY5YjkwNTNlZDJhNWNkYzAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yYWNiM2RmYzZkNzg1NzQyOWQzYTI3N2FlNDEzYWY1NWFmZWZkZWU5IGIvZnV6emVyL2NvcnB1cy8yYWNiM2RmYzZkNzg1NzQyOWQzYTI3N2FlNDEzYWY1NWFmZWZkZWU5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNjYxOWYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJhY2IzZGZjNmQ3ODU3NDI5ZDNhMjc3YWU0MTNhZjU1YWZlZmRlZTkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yYWYwZGFiMWYzMzU1MWY3MDIyZTZkYTdhZjc5NzBjZjczYzJhMmIxIGIvZnV6emVyL2NvcnB1cy8yYWYwZGFiMWYzMzU1MWY3MDIyZTZkYTdhZjc5NzBjZjczYzJhMmIxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZDEwN2EKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJhZjBkYWIxZjMzNTUxZjcwMjJlNmRhN2FmNzk3MGNmNzNjMmEyYjEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yYWYxYzVkMGQ1MzQ3YzhkNTQwZjcyNmQ0MDI4MTYxNTNjY2M5OTgxIGIvZnV6emVyL2NvcnB1cy8yYWYxYzVkMGQ1MzQ3YzhkNTQwZjcyNmQ0MDI4MTYxNTNjY2M5OTgxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkODdlNmMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJhZjFjNWQwZDUzNDdjOGQ1NDBmNzI2ZDQwMjgxNjE1M2NjYzk5ODEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yYjBlZWFiYTE5NGI4MDM3ODNiMzExYzBhZDc3NDAzMTYyYzM5ZDUxIGIvZnV6emVyL2NvcnB1cy8yYjBlZWFiYTE5NGI4MDM3ODNiMzExYzBhZDc3NDAzMTYyYzM5ZDUxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNDBhNzEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJiMGVlYWJhMTk0YjgwMzc4M2IzMTFjMGFkNzc0MDMxNjJjMzlkNTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yYjM0NDRhOGU4NjhhMmQyMjY0YTA3NWU5ZGVhMjNjNDJkYjcyM2JlIGIvZnV6emVyL2NvcnB1cy8yYjM0NDRhOGU4NjhhMmQyMjY0YTA3NWU5ZGVhMjNjNDJkYjcyM2JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MDE0MDUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJiMzQ0NGE4ZTg2OGEyZDIyNjRhMDc1ZTlkZWEyM2M0MmRiNzIzYmUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yYjcwM2MwZTk3NGM3ZWVkNzY0MGQ0YWJjNzBmNDBkOTM1NTkxYTMzIGIvZnV6emVyL2NvcnB1cy8yYjcwM2MwZTk3NGM3ZWVkNzY0MGQ0YWJjNzBmNDBkOTM1NTkxYTMzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNDUyNTcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJiNzAzYzBlOTc0YzdlZWQ3NjQwZDRhYmM3MGY0MGQ5MzU1OTFhMzMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yYmE4MzliZjA0MzI3NzY4MTQwNzQ4YjhiZmNjY2Y5YzcyMTAwZWJmIGIvZnV6emVyL2NvcnB1cy8yYmE4MzliZjA0MzI3NzY4MTQwNzQ4YjhiZmNjY2Y5YzcyMTAwZWJmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MGRiOTAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJiYTgzOWJmMDQzMjc3NjgxNDA3NDhiOGJmY2NjZjljNzIxMDBlYmYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yYmIyOThkMWYwMjIzOTk4ODIwNTgyZWM3YjY3ZmJmZDBmNjA0MGM2IGIvZnV6emVyL2NvcnB1cy8yYmIyOThkMWYwMjIzOTk4ODIwNTgyZWM3YjY3ZmJmZDBmNjA0MGM2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMmQ0OTUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJiYjI5OGQxZjAyMjM5OTg4MjA1ODJlYzdiNjdmYmZkMGY2MDQwYzYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yYmIzNjk3ZGMxYzQxOWI1ZTk0MGViNWFjZjI5NTFmNDkwMDZmYWQ0IGIvZnV6emVyL2NvcnB1cy8yYmIzNjk3ZGMxYzQxOWI1ZTk0MGViNWFjZjI5NTFmNDkwMDZmYWQ0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1Zjc4NzQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJiYjM2OTdkYzFjNDE5YjVlOTQwZWI1YWNmMjk1MWY0OTAwNmZhZDQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yYmU3Yzc1ZmE2ZWY3MWExZDc1OTA3ZTRjNjhkYmRjOGI5Yzk4NTAxIGIvZnV6emVyL2NvcnB1cy8yYmU3Yzc1ZmE2ZWY3MWExZDc1OTA3ZTRjNjhkYmRjOGI5Yzk4NTAxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ODdlMWMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJiZTdjNzVmYTZlZjcxYTFkNzU5MDdlNGM2OGRiZGM4YjljOTg1MDEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yYmVlMzVjNDdkZjQ2ZWEwMjE3ZDBjNjAxMWFkMjRlOGZjYTRlMTI0IGIvZnV6emVyL2NvcnB1cy8yYmVlMzVjNDdkZjQ2ZWEwMjE3ZDBjNjAxMWFkMjRlOGZjYTRlMTI0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMzY2YTcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJiZWUzNWM0N2RmNDZlYTAyMTdkMGM2MDExYWQyNGU4ZmNhNGUxMjQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yYzExOGJmMjY5Njg4ZTc1NjI5ODdlMjA5NjRkNTg2MWRlOWJiNTE3IGIvZnV6emVyL2NvcnB1cy8yYzExOGJmMjY5Njg4ZTc1NjI5ODdlMjA5NjRkNTg2MWRlOWJiNTE3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMGVlYTUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJjMTE4YmYyNjk2ODhlNzU2Mjk4N2UyMDk2NGQ1ODYxZGU5YmI1MTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yYzIyYWE5M2ZkNjQwY2ZhNGVkNTVlNDhmOTNhZjYwOGY5Nzg2OTFiIGIvZnV6emVyL2NvcnB1cy8yYzIyYWE5M2ZkNjQwY2ZhNGVkNTVlNDhmOTNhZjYwOGY5Nzg2OTFiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNzIxMmQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJjMjJhYTkzZmQ2NDBjZmE0ZWQ1NWU0OGY5M2FmNjA4Zjk3ODY5MWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yYzJhNGJjZDNjYTRkYjE4YjM1Yzg2MDhhNzRhNGIwMmMyNDc2YzI3IGIvZnV6emVyL2NvcnB1cy8yYzJhNGJjZDNjYTRkYjE4YjM1Yzg2MDhhNzRhNGIwMmMyNDc2YzI3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NGI4ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJjMmE0YmNkM2NhNGRiMThiMzVjODYwOGE3NGE0YjAyYzI0NzZjMjcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yY2E1YjVlYTIzNzI0YTlhYWU0OGRjZjU4N2JiZGI5M2Y1NjQ3YmQ4IGIvZnV6emVyL2NvcnB1cy8yY2E1YjVlYTIzNzI0YTlhYWU0OGRjZjU4N2JiZGI5M2Y1NjQ3YmQ4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZGNkMzkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJjYTViNWVhMjM3MjRhOWFhZTQ4ZGNmNTg3YmJkYjkzZjU2NDdiZDgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yY2E3OTA2M2M0OTEyMmUwZjQ3ZTM5N2MzZDllNzljOTkzZDY2NmM3IGIvZnV6emVyL2NvcnB1cy8yY2E3OTA2M2M0OTEyMmUwZjQ3ZTM5N2MzZDllNzljOTkzZDY2NmM3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMWQ0ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJjYTc5MDYzYzQ5MTIyZTBmNDdlMzk3YzNkOWU3OWM5OTNkNjY2YzcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yY2VkMmY2MDkzZDVlNDMzMTczMGNiZjlkODhkNzY2MjI5ZjljZDNiIGIvZnV6emVyL2NvcnB1cy8yY2VkMmY2MDkzZDVlNDMzMTczMGNiZjlkODhkNzY2MjI5ZjljZDNiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4Y2Q3ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJjZWQyZjYwOTNkNWU0MzMxNzMwY2JmOWQ4OGQ3NjYyMjlmOWNkM2IKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZDFhMjNmMzg2MmQ5MjgwZmY2NzFmYmEyMDcwOTIzYWQ2ZTE5NDdhIGIvZnV6emVyL2NvcnB1cy8yZDFhMjNmMzg2MmQ5MjgwZmY2NzFmYmEyMDcwOTIzYWQ2ZTE5NDdhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZjhkZWIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJkMWEyM2YzODYyZDkyODBmZjY3MWZiYTIwNzA5MjNhZDZlMTk0N2EKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZDQyNDJhZmE0OWI5M2E2MjI1MjI1NjkyY2ExNTRjM2U0NTcyNGQ1IGIvZnV6emVyL2NvcnB1cy8yZDQyNDJhZmE0OWI5M2E2MjI1MjI1NjkyY2ExNTRjM2U0NTcyNGQ1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YTFlYTMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJkNDI0MmFmYTQ5YjkzYTYyMjUyMjU2OTJjYTE1NGMzZTQ1NzI0ZDUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZDU4MWJiN2MwYTM2MTgyMDMyNTMyOTIyZjdlNTY5OTc5MzMzN2NhIGIvZnV6emVyL2NvcnB1cy8yZDU4MWJiN2MwYTM2MTgyMDMyNTMyOTIyZjdlNTY5OTc5MzMzN2NhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMzgwMzEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJkNTgxYmI3YzBhMzYxODIwMzI1MzI5MjJmN2U1Njk5NzkzMzM3Y2EKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZDY2YWM5NTA0NTYxYzZhMGY4NDQxMzhlMmI0ZDUyNDE4YzY3ZjgwIGIvZnV6emVyL2NvcnB1cy8yZDY2YWM5NTA0NTYxYzZhMGY4NDQxMzhlMmI0ZDUyNDE4YzY3ZjgwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjM2Q4ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJkNjZhYzk1MDQ1NjFjNmEwZjg0NDEzOGUyYjRkNTI0MThjNjdmODAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZDcxYWFhMjQ0NDQ4YjlmNGNjNWQwNTU5NTM4NTVkMGQ4NWZhZTNmIGIvZnV6emVyL2NvcnB1cy8yZDcxYWFhMjQ0NDQ4YjlmNGNjNWQwNTU5NTM4NTVkMGQ4NWZhZTNmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYTY3ODUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJkNzFhYWEyNDQ0NDhiOWY0Y2M1ZDA1NTk1Mzg1NWQwZDg1ZmFlM2YKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZDg0M2U4M2NmZWZkNmE4YTdiYTg3MmQ0MDYyZjk3NDIzOWNhZmVlIGIvZnV6emVyL2NvcnB1cy8yZDg0M2U4M2NmZWZkNmE4YTdiYTg3MmQ0MDYyZjk3NDIzOWNhZmVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmOWM0ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJkODQzZTgzY2ZlZmQ2YThhN2JhODcyZDQwNjJmOTc0MjM5Y2FmZWUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZGE2ZmU5OTY2Yzk4MTE0NGE5ZGQ1ZDM5ZTViZmM3ZjMwMDQ3NmVkIGIvZnV6emVyL2NvcnB1cy8yZGE2ZmU5OTY2Yzk4MTE0NGE5ZGQ1ZDM5ZTViZmM3ZjMwMDQ3NmVkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3N2Q0ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJkYTZmZTk5NjZjOTgxMTQ0YTlkZDVkMzllNWJmYzdmMzAwNDc2ZWQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZGFlN2UwMjVmZjZjZGIxMzMzMTk1OGVjNzkyYmNjODVlMDBmMmU1IGIvZnV6emVyL2NvcnB1cy8yZGFlN2UwMjVmZjZjZGIxMzMzMTk1OGVjNzkyYmNjODVlMDBmMmU1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZDU2OWIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJkYWU3ZTAyNWZmNmNkYjEzMzMxOTU4ZWM3OTJiY2M4NWUwMGYyZTUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZGI5ZGM2YTU0ZTZhMTEyOWQ5MDkyZWIzMjQ0MDE3NDFiOWQyNGViIGIvZnV6emVyL2NvcnB1cy8yZGI5ZGM2YTU0ZTZhMTEyOWQ5MDkyZWIzMjQ0MDE3NDFiOWQyNGViCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MmQ0ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJkYjlkYzZhNTRlNmExMTI5ZDkwOTJlYjMyNDQwMTc0MWI5ZDI0ZWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZGM3NWE3NGJmNTlmZDM2ZTFkMTdmNGVhYjYzOWI0MTE4MzY1MTE0IGIvZnV6emVyL2NvcnB1cy8yZGM3NWE3NGJmNTlmZDM2ZTFkMTdmNGVhYjYzOWI0MTE4MzY1MTE0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMmE2MDMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJkYzc1YTc0YmY1OWZkMzZlMWQxN2Y0ZWFiNjM5YjQxMTgzNjUxMTQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZGUzMWY5YjZkMDJjMzAxNDQ5YTc5ZTUzODRiNDg1ZDlkMjI1MjIzIGIvZnV6emVyL2NvcnB1cy8yZGUzMWY5YjZkMDJjMzAxNDQ5YTc5ZTUzODRiNDg1ZDlkMjI1MjIzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2OTg4YmUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJkZTMxZjliNmQwMmMzMDE0NDlhNzllNTM4NGI0ODVkOWQyMjUyMjMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZTMyZGVlNzI3Mzg1ODU5Y2I1MGZkOTllOGY1MzUyYzgwMTZjMmM1IGIvZnV6emVyL2NvcnB1cy8yZTMyZGVlNzI3Mzg1ODU5Y2I1MGZkOTllOGY1MzUyYzgwMTZjMmM1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZjQ5NDcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJlMzJkZWU3MjczODU4NTljYjUwZmQ5OWU4ZjUzNTJjODAxNmMyYzUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZTRkZDU3MDk1ZTBhYWIwYjI3NWRlNjQ3MDJjNjlhNDBkYjk2YzUwIGIvZnV6emVyL2NvcnB1cy8yZTRkZDU3MDk1ZTBhYWIwYjI3NWRlNjQ3MDJjNjlhNDBkYjk2YzUwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNjlmN2UKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJlNGRkNTcwOTVlMGFhYjBiMjc1ZGU2NDcwMmM2OWE0MGRiOTZjNTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZTUwZDBkYjRiZWZiZDlkY2MzZmJjOGQxY2YyMDhlNmNjMjAzM2FjIGIvZnV6emVyL2NvcnB1cy8yZTUwZDBkYjRiZWZiZDlkY2MzZmJjOGQxY2YyMDhlNmNjMjAzM2FjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYWM0YmYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJlNTBkMGRiNGJlZmJkOWRjYzNmYmM4ZDFjZjIwOGU2Y2MyMDMzYWMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZTVlNjQ1Mjg1OTFhNDEzNDc4NzhkOTkyNWQxZmQyNDFhYWE0MTM5IGIvZnV6emVyL2NvcnB1cy8yZTVlNjQ1Mjg1OTFhNDEzNDc4NzhkOTkyNWQxZmQyNDFhYWE0MTM5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNmFiZDIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJlNWU2NDUyODU5MWE0MTM0Nzg3OGQ5OTI1ZDFmZDI0MWFhYTQxMzkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZTYwODhjMjQxZDRhMzdmNWE5NWY1YjlkNjA2NWM2MGU0NDkwMGVlIGIvZnV6emVyL2NvcnB1cy8yZTYwODhjMjQxZDRhMzdmNWE5NWY1YjlkNjA2NWM2MGU0NDkwMGVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNzk5OTAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJlNjA4OGMyNDFkNGEzN2Y1YTk1ZjViOWQ2MDY1YzYwZTQ0OTAwZWUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZTc1MGY5MzA5MGFlZTBiZDRmMzFiZmMzNGUzOWY1MDBkZTczNDQzIGIvZnV6emVyL2NvcnB1cy8yZTc1MGY5MzA5MGFlZTBiZDRmMzFiZmMzNGUzOWY1MDBkZTczNDQzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMjA1NGUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJlNzUwZjkzMDkwYWVlMGJkNGYzMWJmYzM0ZTM5ZjUwMGRlNzM0NDMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZWEyNmEwYzk1YmI4NzVjNDA4YWExN2UwZjUzYjdjODhjMmIyN2ZlIGIvZnV6emVyL2NvcnB1cy8yZWEyNmEwYzk1YmI4NzVjNDA4YWExN2UwZjUzYjdjODhjMmIyN2ZlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZGJmYjYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJlYTI2YTBjOTViYjg3NWM0MDhhYTE3ZTBmNTNiN2M4OGMyYjI3ZmUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZWQwMzJiOTYzYmI1MGU4YTg0YTg4MjAzMzliNDQ1MzkyZDA4ZDQ2IGIvZnV6emVyL2NvcnB1cy8yZWQwMzJiOTYzYmI1MGU4YTg0YTg4MjAzMzliNDQ1MzkyZDA4ZDQ2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5N2QxMzEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJlZDAzMmI5NjNiYjUwZThhODRhODgyMDMzOWI0NDUzOTJkMDhkNDYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZWQwMzhmNTkzODgyNWI0MWFmNWUwNDRiNGE0OWQxNzZlZDFmNDlmIGIvZnV6emVyL2NvcnB1cy8yZWQwMzhmNTkzODgyNWI0MWFmNWUwNDRiNGE0OWQxNzZlZDFmNDlmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNzE4YWUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJlZDAzOGY1OTM4ODI1YjQxYWY1ZTA0NGI0YTQ5ZDE3NmVkMWY0OWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZWRhNWQ5ODIyMGZiY2UzOTYxNTczNTM0YTQ2ZjYyYmEwMmM3YTQ3IGIvZnV6emVyL2NvcnB1cy8yZWRhNWQ5ODIyMGZiY2UzOTYxNTczNTM0YTQ2ZjYyYmEwMmM3YTQ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MDA0YzUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJlZGE1ZDk4MjIwZmJjZTM5NjE1NzM1MzRhNDZmNjJiYTAyYzdhNDcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZjE5OTVkMWU1N2JmMWMzMjQ3YmNmZTc1ZTU4YjZjYzRjYTRhNzhkIGIvZnV6emVyL2NvcnB1cy8yZjE5OTVkMWU1N2JmMWMzMjQ3YmNmZTc1ZTU4YjZjYzRjYTRhNzhkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NWI4YWMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJmMTk5NWQxZTU3YmYxYzMyNDdiY2ZlNzVlNThiNmNjNGNhNGE3OGQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZjFkMzcwMzI1YzAzZjNkNGFiNTNiNzVhZTZlNjc1MTZlNmY5ODdhIGIvZnV6emVyL2NvcnB1cy8yZjFkMzcwMzI1YzAzZjNkNGFiNTNiNzVhZTZlNjc1MTZlNmY5ODdhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZWIyYjAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJmMWQzNzAzMjVjMDNmM2Q0YWI1M2I3NWFlNmU2NzUxNmU2Zjk4N2EKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZjI0ZDU5ZTRhZmE0MDRkNzk5NzBiNTJlNTI1MzA2MTViMDgxYzRiIGIvZnV6emVyL2NvcnB1cy8yZjI0ZDU5ZTRhZmE0MDRkNzk5NzBiNTJlNTI1MzA2MTViMDgxYzRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYzRiODkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJmMjRkNTllNGFmYTQwNGQ3OTk3MGI1MmU1MjUzMDYxNWIwODFjNGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZjNjODM4MWUyNDJlOWI1ZjhhMjQwYWI0ZjNkZDRmMzAxZjY4MzYzIGIvZnV6emVyL2NvcnB1cy8yZjNjODM4MWUyNDJlOWI1ZjhhMjQwYWI0ZjNkZDRmMzAxZjY4MzYzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMTFjYmIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJmM2M4MzgxZTI0MmU5YjVmOGEyNDBhYjRmM2RkNGYzMDFmNjgzNjMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZjdhNGJkZDkzOWZkMjI3Mzk1ZThiMmU4YTcxOWZjODM1YzA4MDkzIGIvZnV6emVyL2NvcnB1cy8yZjdhNGJkZDkzOWZkMjI3Mzk1ZThiMmU4YTcxOWZjODM1YzA4MDkzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MDNlZTgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJmN2E0YmRkOTM5ZmQyMjczOTVlOGIyZThhNzE5ZmM4MzVjMDgwOTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZjdkM2U3Y2E4MmQ5YzMxZmEzNjI5NzBjNzNmMDYxMDY3NzExMTY1IGIvZnV6emVyL2NvcnB1cy8yZjdkM2U3Y2E4MmQ5YzMxZmEzNjI5NzBjNzNmMDYxMDY3NzExMTY1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZDhjZTcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJmN2QzZTdjYTgyZDljMzFmYTM2Mjk3MGM3M2YwNjEwNjc3MTExNjUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZjg5NWFlY2Y3MmY0YzkyMjdlY2ZiNzQ1MWQ2ZjI5NTljMDU2YTIzIGIvZnV6emVyL2NvcnB1cy8yZjg5NWFlY2Y3MmY0YzkyMjdlY2ZiNzQ1MWQ2ZjI5NTljMDU2YTIzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZmNmYTUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJmODk1YWVjZjcyZjRjOTIyN2VjZmI3NDUxZDZmMjk1OWMwNTZhMjMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8yZjllOWUzZjJhNzRhYWVmOTc4YjUxZmE1MGIyYjM4YWYwZDc4ZGEyIGIvZnV6emVyL2NvcnB1cy8yZjllOWUzZjJhNzRhYWVmOTc4YjUxZmE1MGIyYjM4YWYwZDc4ZGEyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZjgxZjEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzJmOWU5ZTNmMmE3NGFhZWY5NzhiNTFmYTUwYjJiMzhhZjBkNzhkYTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMDBjNTQ1Zjk3ZjE2MGQzMmFjNWMzYzE3YjJjYmEwYjc1OTQyYzBiIGIvZnV6emVyL2NvcnB1cy8zMDBjNTQ1Zjk3ZjE2MGQzMmFjNWMzYzE3YjJjYmEwYjc1OTQyYzBiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMGU3NTYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMwMGM1NDVmOTdmMTYwZDMyYWM1YzNjMTdiMmNiYTBiNzU5NDJjMGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMDFjNWQ2NjI5ZTBhNTk1NjkwZjQ1OWVlYWFmMzcyNjBlOGQ5NDk5IGIvZnV6emVyL2NvcnB1cy8zMDFjNWQ2NjI5ZTBhNTk1NjkwZjQ1OWVlYWFmMzcyNjBlOGQ5NDk5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZTIyOTcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMwMWM1ZDY2MjllMGE1OTU2OTBmNDU5ZWVhYWYzNzI2MGU4ZDk0OTkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMDdhMzM3NDJlZTIxN2ZmZTZjNDQzNTFkMWRmMThhOTEwNTUzY2Q0IGIvZnV6emVyL2NvcnB1cy8zMDdhMzM3NDJlZTIxN2ZmZTZjNDQzNTFkMWRmMThhOTEwNTUzY2Q0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YWExYjUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMwN2EzMzc0MmVlMjE3ZmZlNmM0NDM1MWQxZGYxOGE5MTA1NTNjZDQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMGU0ODk2MTBlM2U3MWNiNDUzNGI5ZWQ2MmEzMzc1YzIwM2U5NDc4IGIvZnV6emVyL2NvcnB1cy8zMGU0ODk2MTBlM2U3MWNiNDUzNGI5ZWQ2MmEzMzc1YzIwM2U5NDc4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZTViYTEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMwZTQ4OTYxMGUzZTcxY2I0NTM0YjllZDYyYTMzNzVjMjAzZTk0NzgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMGU5ZWU4NjkwNjZmN2E3OWRjMGZiZWZjZjBmYzE4YzM3NDIzODEzIGIvZnV6emVyL2NvcnB1cy8zMGU5ZWU4NjkwNjZmN2E3OWRjMGZiZWZjZjBmYzE4YzM3NDIzODEzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNTUwZDQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMwZTllZTg2OTA2NmY3YTc5ZGMwZmJlZmNmMGZjMThjMzc0MjM4MTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMGY0MWFjODNlMDQyODIwZTM3MzhhNDQ0NjRmODJkMmZkN2RmYjQ4IGIvZnV6emVyL2NvcnB1cy8zMGY0MWFjODNlMDQyODIwZTM3MzhhNDQ0NjRmODJkMmZkN2RmYjQ4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMDFiMTIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMwZjQxYWM4M2UwNDI4MjBlMzczOGE0NDQ2NGY4MmQyZmQ3ZGZiNDgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMGY5MDI0NDE4YmY4ZmM5ZDAzYTMzMGExZmZhMjcxY2Q1Nzg0MmMxIGIvZnV6emVyL2NvcnB1cy8zMGY5MDI0NDE4YmY4ZmM5ZDAzYTMzMGExZmZhMjcxY2Q1Nzg0MmMxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZTA0NDYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMwZjkwMjQ0MThiZjhmYzlkMDNhMzMwYTFmZmEyNzFjZDU3ODQyYzEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMTE1OTY1N2M4NDk3MDk5ZmRiOGRlOWMzNDY0NjkxZmFhYWJjYzJlIGIvZnV6emVyL2NvcnB1cy8zMTE1OTY1N2M4NDk3MDk5ZmRiOGRlOWMzNDY0NjkxZmFhYWJjYzJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNzU1MzYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMxMTU5NjU3Yzg0OTcwOTlmZGI4ZGU5YzM0NjQ2OTFmYWFhYmNjMmUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMTFlYjg0ZTZlODMxYTM2MWM3YmQ2ZmMyYzY4M2Q2ZmVmYjNlN2Q5IGIvZnV6emVyL2NvcnB1cy8zMTFlYjg0ZTZlODMxYTM2MWM3YmQ2ZmMyYzY4M2Q2ZmVmYjNlN2Q5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMmRlMTkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMxMWViODRlNmU4MzFhMzYxYzdiZDZmYzJjNjgzZDZmZWZiM2U3ZDkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMTYzOTkzMTQ1MWM1NTlhOWY4YjVmYTVhMDY4NjliMGVmYzlmYWJiIGIvZnV6emVyL2NvcnB1cy8zMTYzOTkzMTQ1MWM1NTlhOWY4YjVmYTVhMDY4NjliMGVmYzlmYWJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYzlhZGMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMxNjM5OTMxNDUxYzU1OWE5ZjhiNWZhNWEwNjg2OWIwZWZjOWZhYmIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMTY4N2I0NDA1NzA3Y2NkMTUxMzk0Nzk5YWQwY2U1NmVjZGVlMmY0IGIvZnV6emVyL2NvcnB1cy8zMTY4N2I0NDA1NzA3Y2NkMTUxMzk0Nzk5YWQwY2U1NmVjZGVlMmY0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MWM5ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMxNjg3YjQ0MDU3MDdjY2QxNTEzOTQ3OTlhZDBjZTU2ZWNkZWUyZjQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMTZlYzVhZWViYjE2ZjkwZjNiM2VjYTQxZmVhMzA3M2QxMDBjNTg4IGIvZnV6emVyL2NvcnB1cy8zMTZlYzVhZWViYjE2ZjkwZjNiM2VjYTQxZmVhMzA3M2QxMDBjNTg4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZGRjOWQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMxNmVjNWFlZWJiMTZmOTBmM2IzZWNhNDFmZWEzMDczZDEwMGM1ODgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMTk1ZThhNGYxNDFhODJmZjRiYTNjNTM0ZDAyMmUxNWQzODk5Nzk5IGIvZnV6emVyL2NvcnB1cy8zMTk1ZThhNGYxNDFhODJmZjRiYTNjNTM0ZDAyMmUxNWQzODk5Nzk5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MzNiY2MKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMxOTVlOGE0ZjE0MWE4MmZmNGJhM2M1MzRkMDIyZTE1ZDM4OTk3OTkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMWNkMTFiOTE0MjMzZGM0MWUyYThmMDk0Yjc3ODA2ZDM4ODZhODk4IGIvZnV6emVyL2NvcnB1cy8zMWNkMTFiOTE0MjMzZGM0MWUyYThmMDk0Yjc3ODA2ZDM4ODZhODk4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3M2NiMTIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMxY2QxMWI5MTQyMzNkYzQxZTJhOGYwOTRiNzc4MDZkMzg4NmE4OTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMWZiZjcyM2NhYTRiNWFiOGMxM2VlZjFhYjI4YTVhZjlhMTFiMjUyIGIvZnV6emVyL2NvcnB1cy8zMWZiZjcyM2NhYTRiNWFiOGMxM2VlZjFhYjI4YTVhZjlhMTFiMjUyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YjE5MzYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMxZmJmNzIzY2FhNGI1YWI4YzEzZWVmMWFiMjhhNWFmOWExMWIyNTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMjFkMGU5ZmZkYTYxYmE0ZTdmNjAyYjU1Y2U4OGJjYWFkNGJmZTRjIGIvZnV6emVyL2NvcnB1cy8zMjFkMGU5ZmZkYTYxYmE0ZTdmNjAyYjU1Y2U4OGJjYWFkNGJmZTRjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MWRhMDMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMyMWQwZTlmZmRhNjFiYTRlN2Y2MDJiNTVjZTg4YmNhYWQ0YmZlNGMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMjJiYWI0ZWUxMjkwYzA4OGFmMDkxNjk1ZjA5ZGRhOGY0YTljOWYxIGIvZnV6emVyL2NvcnB1cy8zMjJiYWI0ZWUxMjkwYzA4OGFmMDkxNjk1ZjA5ZGRhOGY0YTljOWYxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0OWNlZDkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMyMmJhYjRlZTEyOTBjMDg4YWYwOTE2OTVmMDlkZGE4ZjRhOWM5ZjEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMjNhODFmZjg3NTliY2U1OTk3MTdmNmM2NmFiZDA4ZWM0N2ZiODYyIGIvZnV6emVyL2NvcnB1cy8zMjNhODFmZjg3NTliY2U1OTk3MTdmNmM2NmFiZDA4ZWM0N2ZiODYyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMTJiYjQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMyM2E4MWZmODc1OWJjZTU5OTcxN2Y2YzY2YWJkMDhlYzQ3ZmI4NjIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMjYzOTQ5ZTFmYWUxNWY1Y2UzNDJkYjlhNzg2ODZkZGYxNTE1MWM1IGIvZnV6emVyL2NvcnB1cy8zMjYzOTQ5ZTFmYWUxNWY1Y2UzNDJkYjlhNzg2ODZkZGYxNTE1MWM1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2M2Q1ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMyNjM5NDllMWZhZTE1ZjVjZTM0MmRiOWE3ODY4NmRkZjE1MTUxYzUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMjY3MjhhNTQ2YWM2OWFkYWRkMTY1MzVmYTUwMmE4NjhjNzNlNjk3IGIvZnV6emVyL2NvcnB1cy8zMjY3MjhhNTQ2YWM2OWFkYWRkMTY1MzVmYTUwMmE4NjhjNzNlNjk3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZTg3OGUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMyNjcyOGE1NDZhYzY5YWRhZGQxNjUzNWZhNTAyYTg2OGM3M2U2OTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMjhjZjExNWJjYjVlMGFiYmFhNWZmMTllMGYzZjc2NjQ2NzVkOWNjIGIvZnV6emVyL2NvcnB1cy8zMjhjZjExNWJjYjVlMGFiYmFhNWZmMTllMGYzZjc2NjQ2NzVkOWNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYjk3OTcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMyOGNmMTE1YmNiNWUwYWJiYWE1ZmYxOWUwZjNmNzY2NDY3NWQ5Y2MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMjk2ZTQ2MjBhZGY0NjhhZmEzMGIwMmFiMDZmOGI4NWU0YzRiYTdjIGIvZnV6emVyL2NvcnB1cy8zMjk2ZTQ2MjBhZGY0NjhhZmEzMGIwMmFiMDZmOGI4NWU0YzRiYTdjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyODRkNWUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMyOTZlNDYyMGFkZjQ2OGFmYTMwYjAyYWIwNmY4Yjg1ZTRjNGJhN2MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMmU1ZGZiNWIwYzMzOTE4NzIyZjczODdiNmYwNzE3NWJkOTRhMmE4IGIvZnV6emVyL2NvcnB1cy8zMmU1ZGZiNWIwYzMzOTE4NzIyZjczODdiNmYwNzE3NWJkOTRhMmE4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZWI0OTEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMyZTVkZmI1YjBjMzM5MTg3MjJmNzM4N2I2ZjA3MTc1YmQ5NGEyYTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMzAyNGMyZDRjM2IxNmRiNmJhMDY5ZjQ5N2MyMGQxZmU0YzkxZmJjIGIvZnV6emVyL2NvcnB1cy8zMzAyNGMyZDRjM2IxNmRiNmJhMDY5ZjQ5N2MyMGQxZmU0YzkxZmJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxODhiMDQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMzMDI0YzJkNGMzYjE2ZGI2YmEwNjlmNDk3YzIwZDFmZTRjOTFmYmMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMzQwMjdiNzIxNTc2YTc0M2I2N2U5ODQ0OGNlM2M1YmFhMjg4OTdlIGIvZnV6emVyL2NvcnB1cy8zMzQwMjdiNzIxNTc2YTc0M2I2N2U5ODQ0OGNlM2M1YmFhMjg4OTdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NTYzZTYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMzNDAyN2I3MjE1NzZhNzQzYjY3ZTk4NDQ4Y2UzYzViYWEyODg5N2UKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMzU0N2EzZWMxYzhjMmE5MDNjMDE3ZjVlNjA2YmFkYjFjNzA5NmQ5IGIvZnV6emVyL2NvcnB1cy8zMzU0N2EzZWMxYzhjMmE5MDNjMDE3ZjVlNjA2YmFkYjFjNzA5NmQ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMDdlOWIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMzNTQ3YTNlYzFjOGMyYTkwM2MwMTdmNWU2MDZiYWRiMWM3MDk2ZDkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMzVkZGRkZGU4ZWIxZDI0M2U5YWI4ZGYzNWVkZTRmOGY4MzQ1MzJhIGIvZnV6emVyL2NvcnB1cy8zMzVkZGRkZGU4ZWIxZDI0M2U5YWI4ZGYzNWVkZTRmOGY4MzQ1MzJhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYTgxYjkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMzNWRkZGRkZThlYjFkMjQzZTlhYjhkZjM1ZWRlNGY4ZjgzNDUzMmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMzY3NWU0MzEyNTBhNThkYzU4ODBmYmQ2NTk1OWQ1Mzk4MDhiODFjIGIvZnV6emVyL2NvcnB1cy8zMzY3NWU0MzEyNTBhNThkYzU4ODBmYmQ2NTk1OWQ1Mzk4MDhiODFjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYjk1M2IKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMzNjc1ZTQzMTI1MGE1OGRjNTg4MGZiZDY1OTU5ZDUzOTgwOGI4MWMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMzkyZDViNDcxNTI4OGJkYmI4Zjc5Nzk5MzRiZWI0NjY2YzUwMzJkIGIvZnV6emVyL2NvcnB1cy8zMzkyZDViNDcxNTI4OGJkYmI4Zjc5Nzk5MzRiZWI0NjY2YzUwMzJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMGVhYTUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMzOTJkNWI0NzE1Mjg4YmRiYjhmNzk3OTkzNGJlYjQ2NjZjNTAzMmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMzk1NTk1YWZmYzY1ZDA4OTcwN2Q0NDFlMmUyNWJkNTljZDYwOTRmIGIvZnV6emVyL2NvcnB1cy8zMzk1NTk1YWZmYzY1ZDA4OTcwN2Q0NDFlMmUyNWJkNTljZDYwOTRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZGFjNDIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMzOTU1OTVhZmZjNjVkMDg5NzA3ZDQ0MWUyZTI1YmQ1OWNkNjA5NGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zMzk4MDdlMjMyZDA4YmM0MDI4M2MzYjg2Mzc4ZWUyY2MxMzk1NzJmIGIvZnV6emVyL2NvcnB1cy8zMzk4MDdlMjMyZDA4YmM0MDI4M2MzYjg2Mzc4ZWUyY2MxMzk1NzJmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZDFjZDAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMzOTgwN2UyMzJkMDhiYzQwMjgzYzNiODYzNzhlZTJjYzEzOTU3MmYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zM2FhNTA4Y2RlNGMxMWYwZTRiNzFlZjBjZmFiZThlY2VhMGJjOTZlIGIvZnV6emVyL2NvcnB1cy8zM2FhNTA4Y2RlNGMxMWYwZTRiNzFlZjBjZmFiZThlY2VhMGJjOTZlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMGFjZjcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMzYWE1MDhjZGU0YzExZjBlNGI3MWVmMGNmYWJlOGVjZWEwYmM5NmUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zM2ZlMDFlYzI0MDRkNTRkMGJhYzFiMmZiMjI2MjIxZTk0NTY1YjY3IGIvZnV6emVyL2NvcnB1cy8zM2ZlMDFlYzI0MDRkNTRkMGJhYzFiMmZiMjI2MjIxZTk0NTY1YjY3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNTY1MDYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzMzZmUwMWVjMjQwNGQ1NGQwYmFjMWIyZmIyMjYyMjFlOTQ1NjViNjcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zNDU0OGNjYjI2ZTY4ZjYxYzViYmFhZDQ4MjgzMDRmZGJjYjk3MmM5IGIvZnV6emVyL2NvcnB1cy8zNDU0OGNjYjI2ZTY4ZjYxYzViYmFhZDQ4MjgzMDRmZGJjYjk3MmM5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNmE5YzYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM0NTQ4Y2NiMjZlNjhmNjFjNWJiYWFkNDgyODMwNGZkYmNiOTcyYzkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zNDU3ZDU3N2JjNDZjNDg4ODZlYmMxZDg5OTFjNjY1OTE4NTJkNWViIGIvZnV6emVyL2NvcnB1cy8zNDU3ZDU3N2JjNDZjNDg4ODZlYmMxZDg5OTFjNjY1OTE4NTJkNWViCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMWNhZDQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM0NTdkNTc3YmM0NmM0ODg4NmViYzFkODk5MWM2NjU5MTg1MmQ1ZWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zNDU5Yzg2YzhhZGUzYjVkYzdlNTJkMzc3N2RhMzIzNjBhYTczZDg2IGIvZnV6emVyL2NvcnB1cy8zNDU5Yzg2YzhhZGUzYjVkYzdlNTJkMzc3N2RhMzIzNjBhYTczZDg2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMzc0YTEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM0NTljODZjOGFkZTNiNWRjN2U1MmQzNzc3ZGEzMjM2MGFhNzNkODYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zNGRkMTA0MzY2Yzc5ZWFhNjNlZjg2YzY1NWU0ZDk5MzYwNzAxNjM3IGIvZnV6emVyL2NvcnB1cy8zNGRkMTA0MzY2Yzc5ZWFhNjNlZjg2YzY1NWU0ZDk5MzYwNzAxNjM3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZTc5Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM0ZGQxMDQzNjZjNzllYWE2M2VmODZjNjU1ZTRkOTkzNjA3MDE2MzcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zNGUyZTQ3NDhhN2FhZjhkMTBmODUzNzUyNWEwNmIwY2JjZjBmMjczIGIvZnV6emVyL2NvcnB1cy8zNGUyZTQ3NDhhN2FhZjhkMTBmODUzNzUyNWEwNmIwY2JjZjBmMjczCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZDE4ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM0ZTJlNDc0OGE3YWFmOGQxMGY4NTM3NTI1YTA2YjBjYmNmMGYyNzMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zNGY2Y2M5MmFkNWFkNzhkOGVhMzY2NjNlZjA4Yzc2MGQwODBhYzlhIGIvZnV6emVyL2NvcnB1cy8zNGY2Y2M5MmFkNWFkNzhkOGVhMzY2NjNlZjA4Yzc2MGQwODBhYzlhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMjlmZDUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM0ZjZjYzkyYWQ1YWQ3OGQ4ZWEzNjY2M2VmMDhjNzYwZDA4MGFjOWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zNTRmOGNiZTYwOTM4Zjg3YzhjNjk5MDY3M2VhY2I4MTgzNmVkNjY3IGIvZnV6emVyL2NvcnB1cy8zNTRmOGNiZTYwOTM4Zjg3YzhjNjk5MDY3M2VhY2I4MTgzNmVkNjY3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NzU3YWEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM1NGY4Y2JlNjA5MzhmODdjOGM2OTkwNjczZWFjYjgxODM2ZWQ2NjcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zNTgyMjQ2Y2EwNTdjNmE1Yzc3MzdlZWMwNzE1Mzc3ZWFjMWUxNGQ4IGIvZnV6emVyL2NvcnB1cy8zNTgyMjQ2Y2EwNTdjNmE1Yzc3MzdlZWMwNzE1Mzc3ZWFjMWUxNGQ4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNjRjODEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM1ODIyNDZjYTA1N2M2YTVjNzczN2VlYzA3MTUzNzdlYWMxZTE0ZDgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zNTkyNGNiNmJhMGRiZTIwZWQ5NmY2MTU5Zjk0OTZjNjA1NGE4NmJlIGIvZnV6emVyL2NvcnB1cy8zNTkyNGNiNmJhMGRiZTIwZWQ5NmY2MTU5Zjk0OTZjNjA1NGE4NmJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNmQxNzAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM1OTI0Y2I2YmEwZGJlMjBlZDk2ZjYxNTlmOTQ5NmM2MDU0YTg2YmUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zNWMzNGFiMjE2NDEyZWE5N2M4OWE4ZDU2MTgyNDg2MDFhOGZiNWM5IGIvZnV6emVyL2NvcnB1cy8zNWMzNGFiMjE2NDEyZWE5N2M4OWE4ZDU2MTgyNDg2MDFhOGZiNWM5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkN2U1ODIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM1YzM0YWIyMTY0MTJlYTk3Yzg5YThkNTYxODI0ODYwMWE4ZmI1YzkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zNWQyNTAyMzI3YzY4NDRiYTRiOTYyNmIyOWE0MmRhYjFjYTI2M2ZiIGIvZnV6emVyL2NvcnB1cy8zNWQyNTAyMzI3YzY4NDRiYTRiOTYyNmIyOWE0MmRhYjFjYTI2M2ZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYzdlZTYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM1ZDI1MDIzMjdjNjg0NGJhNGI5NjI2YjI5YTQyZGFiMWNhMjYzZmIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zNWRmYjFlOGNjYjNhZWQxMzU1YjNjZjNhODhjOTYwMDA3YjM0YmJkIGIvZnV6emVyL2NvcnB1cy8zNWRmYjFlOGNjYjNhZWQxMzU1YjNjZjNhODhjOTYwMDA3YjM0YmJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNzI4ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM1ZGZiMWU4Y2NiM2FlZDEzNTViM2NmM2E4OGM5NjAwMDdiMzRiYmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zNjNhMTdlZTBlYTg3ZWQ0YTY4YTFiZmYyM2E1YzE3MGJiNmJjMGQ3IGIvZnV6emVyL2NvcnB1cy8zNjNhMTdlZTBlYTg3ZWQ0YTY4YTFiZmYyM2E1YzE3MGJiNmJjMGQ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMjZhYTcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM2M2ExN2VlMGVhODdlZDRhNjhhMWJmZjIzYTVjMTcwYmI2YmMwZDcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zNjQyYmZmM2ZiZmQ5MWQwZTc1NmI0NGFkYjc3MmY2NDFkZTAwZDhhIGIvZnV6emVyL2NvcnB1cy8zNjQyYmZmM2ZiZmQ5MWQwZTc1NmI0NGFkYjc3MmY2NDFkZTAwZDhhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MTg4OWUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM2NDJiZmYzZmJmZDkxZDBlNzU2YjQ0YWRiNzcyZjY0MWRlMDBkOGEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zNjY4NjRlMWM3NGI2NjQxZDIzNWUzMTNmODE3YTg1YzEwYzMxNTc5IGIvZnV6emVyL2NvcnB1cy8zNjY4NjRlMWM3NGI2NjQxZDIzNWUzMTNmODE3YTg1YzEwYzMxNTc5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNTI2ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM2Njg2NGUxYzc0YjY2NDFkMjM1ZTMxM2Y4MTdhODVjMTBjMzE1NzkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zNmU4MWY0NzgxMDFjYzkwMjY3Y2U2Y2QzYmJkOThkYmQwMWU4NDIwIGIvZnV6emVyL2NvcnB1cy8zNmU4MWY0NzgxMDFjYzkwMjY3Y2U2Y2QzYmJkOThkYmQwMWU4NDIwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyODNmYTYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM2ZTgxZjQ3ODEwMWNjOTAyNjdjZTZjZDNiYmQ5OGRiZDAxZTg0MjAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zNmU5NDZhOTY0ZGQ4Njg4MWFkOWI1ZjY1ZWRjYjM2ZGQ5ZDk2MjFlIGIvZnV6emVyL2NvcnB1cy8zNmU5NDZhOTY0ZGQ4Njg4MWFkOWI1ZjY1ZWRjYjM2ZGQ5ZDk2MjFlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MjI1YmUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM2ZTk0NmE5NjRkZDg2ODgxYWQ5YjVmNjVlZGNiMzZkZDlkOTYyMWUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zNmVjZDVlNmM0OGQwMmQ5ZDc4YTkzM2I3NmQxY2M5YmFkMGU1NWIwIGIvZnV6emVyL2NvcnB1cy8zNmVjZDVlNmM0OGQwMmQ5ZDc4YTkzM2I3NmQxY2M5YmFkMGU1NWIwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyOThjN2YKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM2ZWNkNWU2YzQ4ZDAyZDlkNzhhOTMzYjc2ZDFjYzliYWQwZTU1YjAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zNmYyYzJmNjA4YjRlMzQ4YjYxYWZhYTJlYjMzNjcxNjg4NTQ5ZDZiIGIvZnV6emVyL2NvcnB1cy8zNmYyYzJmNjA4YjRlMzQ4YjYxYWZhYTJlYjMzNjcxNjg4NTQ5ZDZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZjkxM2EKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM2ZjJjMmY2MDhiNGUzNDhiNjFhZmFhMmViMzM2NzE2ODg1NDlkNmIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zNmYzZmEzZWY5ZTc5MTQ0MjBjNDk3MWM2M2FjYzAwYTI4ZTYxYzdiIGIvZnV6emVyL2NvcnB1cy8zNmYzZmEzZWY5ZTc5MTQ0MjBjNDk3MWM2M2FjYzAwYTI4ZTYxYzdiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZmZmMWIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM2ZjNmYTNlZjllNzkxNDQyMGM0OTcxYzYzYWNjMDBhMjhlNjFjN2IKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zNmY5OGU3NjRmYjcwYTMwYWE2ZmU3ZTQ0OTE5MGY5OTMzYTllZjZmIGIvZnV6emVyL2NvcnB1cy8zNmY5OGU3NjRmYjcwYTMwYWE2ZmU3ZTQ0OTE5MGY5OTMzYTllZjZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZWUwMDAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM2Zjk4ZTc2NGZiNzBhMzBhYTZmZTdlNDQ5MTkwZjk5MzNhOWVmNmYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zNmZmMDg1MjUyNWVjOGY3YThkM2FjMTgyYmQ3MmQ2YjE0ZGNiOGQzIGIvZnV6emVyL2NvcnB1cy8zNmZmMDg1MjUyNWVjOGY3YThkM2FjMTgyYmQ3MmQ2YjE0ZGNiOGQzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMjRiZGQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM2ZmYwODUyNTI1ZWM4ZjdhOGQzYWMxODJiZDcyZDZiMTRkY2I4ZDMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zNzMxMzk5YTJiMDBhOTM2MmZhOTM5NWRjYWFmYmEzOGRiOGQxYTExIGIvZnV6emVyL2NvcnB1cy8zNzMxMzk5YTJiMDBhOTM2MmZhOTM5NWRjYWFmYmEzOGRiOGQxYTExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMWIyYjQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM3MzEzOTlhMmIwMGE5MzYyZmE5Mzk1ZGNhYWZiYTM4ZGI4ZDFhMTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zNzZmZTNkMzMxOWE4MWU0NTBjYzgzNmE4ZWNmMjI2YjZmYzg5ODEzIGIvZnV6emVyL2NvcnB1cy8zNzZmZTNkMzMxOWE4MWU0NTBjYzgzNmE4ZWNmMjI2YjZmYzg5ODEzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YjJkNzMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM3NmZlM2QzMzE5YTgxZTQ1MGNjODM2YThlY2YyMjZiNmZjODk4MTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zNzc3ZmZhN2Y1ZjZkMGE2MjE0ZjBjNDkxNGY0OGQxNmYzZDFmYWZjIGIvZnV6emVyL2NvcnB1cy8zNzc3ZmZhN2Y1ZjZkMGE2MjE0ZjBjNDkxNGY0OGQxNmYzZDFmYWZjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4Y2U5MjcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM3NzdmZmE3ZjVmNmQwYTYyMTRmMGM0OTE0ZjQ4ZDE2ZjNkMWZhZmMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zNzllY2M4MDNjOTZjMDFjZDY2NmQ1YWUwMTFkNjgwYTQwNjg5MDIyIGIvZnV6emVyL2NvcnB1cy8zNzllY2M4MDNjOTZjMDFjZDY2NmQ1YWUwMTFkNjgwYTQwNjg5MDIyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZGQxYzAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM3OWVjYzgwM2M5NmMwMWNkNjY2ZDVhZTAxMWQ2ODBhNDA2ODkwMjIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zN2M5ZjEyYjBkYWNhZTQ1ZGQwODljNTY3YjgzZDgxMDgzNTMzZGE5IGIvZnV6emVyL2NvcnB1cy8zN2M5ZjEyYjBkYWNhZTQ1ZGQwODljNTY3YjgzZDgxMDgzNTMzZGE5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MWIxZDYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM3YzlmMTJiMGRhY2FlNDVkZDA4OWM1NjdiODNkODEwODM1MzNkYTkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zN2NjYzk1NmZjOThhYmMyYmRmZDFjODk4OTE3YzdkMWJkMTI2ZDZmIGIvZnV6emVyL2NvcnB1cy8zN2NjYzk1NmZjOThhYmMyYmRmZDFjODk4OTE3YzdkMWJkMTI2ZDZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZTY5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM3Y2NjOTU2ZmM5OGFiYzJiZGZkMWM4OTg5MTdjN2QxYmQxMjZkNmYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zN2RjNzBjNzgzNWE2ODc0OTBhZjgxYzliN2FjNjVhYWFhNjllYTc5IGIvZnV6emVyL2NvcnB1cy8zN2RjNzBjNzgzNWE2ODc0OTBhZjgxYzliN2FjNjVhYWFhNjllYTc5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MzU4NjMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM3ZGM3MGM3ODM1YTY4NzQ5MGFmODFjOWI3YWM2NWFhYWE2OWVhNzkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zN2RmODNlOGM2MTA1ZDllMTlmNzY3MGE3MzFlODlkMWI4OTI2NzMwIGIvZnV6emVyL2NvcnB1cy8zN2RmODNlOGM2MTA1ZDllMTlmNzY3MGE3MzFlODlkMWI4OTI2NzMwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYmU2MWYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM3ZGY4M2U4YzYxMDVkOWUxOWY3NjcwYTczMWU4OWQxYjg5MjY3MzAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zN2Y0NjAwNmUzYmRiNzg5MzNiZWI0Mzg1N2ViOTFiNmIyZjgyMmM3IGIvZnV6emVyL2NvcnB1cy8zN2Y0NjAwNmUzYmRiNzg5MzNiZWI0Mzg1N2ViOTFiNmIyZjgyMmM3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ODIwYWIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM3ZjQ2MDA2ZTNiZGI3ODkzM2JlYjQzODU3ZWI5MWI2YjJmODIyYzcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zODQ3MjJiMzlkMGNiYzQ5ODI1N2Q3MWFjY2QwMGJmMzc3MTk4N2JkIGIvZnV6emVyL2NvcnB1cy8zODQ3MjJiMzlkMGNiYzQ5ODI1N2Q3MWFjY2QwMGJmMzc3MTk4N2JkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMDY4MDAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM4NDcyMmIzOWQwY2JjNDk4MjU3ZDcxYWNjZDAwYmYzNzcxOTg3YmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zODQ3NGQ3M2M3NDhiZjhhM2U2YjdjNDk0MjcxNWJiZTJhYzBjZmQ1IGIvZnV6emVyL2NvcnB1cy8zODQ3NGQ3M2M3NDhiZjhhM2U2YjdjNDk0MjcxNWJiZTJhYzBjZmQ1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MDAwZmQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM4NDc0ZDczYzc0OGJmOGEzZTZiN2M0OTQyNzE1YmJlMmFjMGNmZDUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zODUxZWNjMjIyODM4NmE5ZjIzOTdjZTRhNmIxMDYyZjdlOTY4MDEyIGIvZnV6emVyL2NvcnB1cy8zODUxZWNjMjIyODM4NmE5ZjIzOTdjZTRhNmIxMDYyZjdlOTY4MDEyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMjMwMGQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM4NTFlY2MyMjI4Mzg2YTlmMjM5N2NlNGE2YjEwNjJmN2U5NjgwMTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zODhhM2Q0YTE0YWIyOTg4MTAwZWJlYmM1NWI5ZmEwMWYyNWVhZWY4IGIvZnV6emVyL2NvcnB1cy8zODhhM2Q0YTE0YWIyOTg4MTAwZWJlYmM1NWI5ZmEwMWYyNWVhZWY4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYzE1MDYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM4OGEzZDRhMTRhYjI5ODgxMDBlYmViYzU1YjlmYTAxZjI1ZWFlZjgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zODllNzRiYThkMzMzNTZlMTFiYzE1NmZkY2ZiNzhlOGFiODc0MjVjIGIvZnV6emVyL2NvcnB1cy8zODllNzRiYThkMzMzNTZlMTFiYzE1NmZkY2ZiNzhlOGFiODc0MjVjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1OWFkYWEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM4OWU3NGJhOGQzMzM1NmUxMWJjMTU2ZmRjZmI3OGU4YWI4NzQyNWMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zOGEyYmUwNzc3OWEzOWViYWExNmI2NzZhOWRkMDc1YzFhYzRiZTM1IGIvZnV6emVyL2NvcnB1cy8zOGEyYmUwNzc3OWEzOWViYWExNmI2NzZhOWRkMDc1YzFhYzRiZTM1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYzJjOWUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM4YTJiZTA3Nzc5YTM5ZWJhYTE2YjY3NmE5ZGQwNzVjMWFjNGJlMzUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zOGI4Y2M5NGU1YjdiMDU3OWRiNjBhYjMyZmMzNzlkOTYwZWQ5YzkzIGIvZnV6emVyL2NvcnB1cy8zOGI4Y2M5NGU1YjdiMDU3OWRiNjBhYjMyZmMzNzlkOTYwZWQ5YzkzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZjAwNGIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM4YjhjYzk0ZTViN2IwNTc5ZGI2MGFiMzJmYzM3OWQ5NjBlZDljOTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zOGU0OTU0MzdiMDQ4OTA3NGRmNjJhYzBlOWM4MGZiOGFlMjBiOTAyIGIvZnV6emVyL2NvcnB1cy8zOGU0OTU0MzdiMDQ4OTA3NGRmNjJhYzBlOWM4MGZiOGFlMjBiOTAyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NWYxY2MKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM4ZTQ5NTQzN2IwNDg5MDc0ZGY2MmFjMGU5YzgwZmI4YWUyMGI5MDIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zOGY5YWIyM2VhZmEzMTcyZjVkOTk3YzA3MDkxMTVhOTgxOWYzMGQ1IGIvZnV6emVyL2NvcnB1cy8zOGY5YWIyM2VhZmEzMTcyZjVkOTk3YzA3MDkxMTVhOTgxOWYzMGQ1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNDQ4NzEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM4ZjlhYjIzZWFmYTMxNzJmNWQ5OTdjMDcwOTExNWE5ODE5ZjMwZDUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zOTE1YmE1NGVmOWNiMzc2YzNkZTljM2E2NjQzYjEwNGRkYmRhYzUxIGIvZnV6emVyL2NvcnB1cy8zOTE1YmE1NGVmOWNiMzc2YzNkZTljM2E2NjQzYjEwNGRkYmRhYzUxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwOGZlYjkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM5MTViYTU0ZWY5Y2IzNzZjM2RlOWMzYTY2NDNiMTA0ZGRiZGFjNTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zOTQyNzcxZjY4ZjQzMmY3MDRkM2I1NzE3MTgwOWE0YTE2MzczYjFkIGIvZnV6emVyL2NvcnB1cy8zOTQyNzcxZjY4ZjQzMmY3MDRkM2I1NzE3MTgwOWE0YTE2MzczYjFkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NTNhYjcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM5NDI3NzFmNjhmNDMyZjcwNGQzYjU3MTcxODA5YTRhMTYzNzNiMWQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zOTVkZWIzN2I1N2JhMGJmMjdlNjVhNDcwNmQ5YWU5MTJmODg3OTg0IGIvZnV6emVyL2NvcnB1cy8zOTVkZWIzN2I1N2JhMGJmMjdlNjVhNDcwNmQ5YWU5MTJmODg3OTg0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNGJlMTMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM5NWRlYjM3YjU3YmEwYmYyN2U2NWE0NzA2ZDlhZTkxMmY4ODc5ODQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zOTcwOGVkNjhkMGQ5YjgwMjFmN2ZiMzI5ZTVlODQ4MWZjNDI1YjFmIGIvZnV6emVyL2NvcnB1cy8zOTcwOGVkNjhkMGQ5YjgwMjFmN2ZiMzI5ZTVlODQ4MWZjNDI1YjFmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NmU0YTgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM5NzA4ZWQ2OGQwZDliODAyMWY3ZmIzMjllNWU4NDgxZmM0MjViMWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zOTcyMjc5NGZmMTkzZTQ1OTA5NzE4ZWIyYTQ3OGFjM2UzMjc0ODk4IGIvZnV6emVyL2NvcnB1cy8zOTcyMjc5NGZmMTkzZTQ1OTA5NzE4ZWIyYTQ3OGFjM2UzMjc0ODk4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYTIzZjUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM5NzIyNzk0ZmYxOTNlNDU5MDk3MThlYjJhNDc4YWMzZTMyNzQ4OTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zOTk4ZWQ4NWM0MzYxYTIwYmUxYTk4ZDA3YjA3MjIyMzE5NGJkZGI2IGIvZnV6emVyL2NvcnB1cy8zOTk4ZWQ4NWM0MzYxYTIwYmUxYTk4ZDA3YjA3MjIyMzE5NGJkZGI2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5OWRiMGUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM5OThlZDg1YzQzNjFhMjBiZTFhOThkMDdiMDcyMjIzMTk0YmRkYjYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zOWE1ZGM4NTZjYWViOTMzZTE4ZmNlZTIzYjg5YzJjNjk0OTI4N2MzIGIvZnV6emVyL2NvcnB1cy8zOWE1ZGM4NTZjYWViOTMzZTE4ZmNlZTIzYjg5YzJjNjk0OTI4N2MzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MTJjMDcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM5YTVkYzg1NmNhZWI5MzNlMThmY2VlMjNiODljMmM2OTQ5Mjg3YzMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zOWFjNjNiYmMzMjYyMTU3ZWUyNTE0MDk2MWRlM2QwMjdkZmQ0NjBiIGIvZnV6emVyL2NvcnB1cy8zOWFjNjNiYmMzMjYyMTU3ZWUyNTE0MDk2MWRlM2QwMjdkZmQ0NjBiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYjBiOGIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM5YWM2M2JiYzMyNjIxNTdlZTI1MTQwOTYxZGUzZDAyN2RmZDQ2MGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zOWNkNDE4NGZlOTFiNmUwOTQwNzhjYzQyZjYyNTFjYzJiMDFlMDk3IGIvZnV6emVyL2NvcnB1cy8zOWNkNDE4NGZlOTFiNmUwOTQwNzhjYzQyZjYyNTFjYzJiMDFlMDk3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MTcwZTYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM5Y2Q0MTg0ZmU5MWI2ZTA5NDA3OGNjNDJmNjI1MWNjMmIwMWUwOTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zOWRmODdjZTE4YTk2MzA4MGUxZmY2YTE5ZGZhNTMwNmM4ZTdjMjUxIGIvZnV6emVyL2NvcnB1cy8zOWRmODdjZTE4YTk2MzA4MGUxZmY2YTE5ZGZhNTMwNmM4ZTdjMjUxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4OGJlOWIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzM5ZGY4N2NlMThhOTYzMDgwZTFmZjZhMTlkZmE1MzA2YzhlN2MyNTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zYTEzYmMwYzEyZDFmNWU0ODVlMGRkY2ExNzZlM2E1ODdlMmExZmFiIGIvZnV6emVyL2NvcnB1cy8zYTEzYmMwYzEyZDFmNWU0ODVlMGRkY2ExNzZlM2E1ODdlMmExZmFiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNmY4OWQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNhMTNiYzBjMTJkMWY1ZTQ4NWUwZGRjYTE3NmUzYTU4N2UyYTFmYWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zYTNjMDhiZDRlMWJiNTEwN2E0YWM0ZWM2NDU4Zjg3NjY5OWZkZmQ1IGIvZnV6emVyL2NvcnB1cy8zYTNjMDhiZDRlMWJiNTEwN2E0YWM0ZWM2NDU4Zjg3NjY5OWZkZmQ1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MjMwYzYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNhM2MwOGJkNGUxYmI1MTA3YTRhYzRlYzY0NThmODc2Njk5ZmRmZDUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zYTRhYzkxZDEwYjcyNThjNTNjNTQ3YTUzZDAwMjExZDU1MDc4MDU5IGIvZnV6emVyL2NvcnB1cy8zYTRhYzkxZDEwYjcyNThjNTNjNTQ3YTUzZDAwMjExZDU1MDc4MDU5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyODk4NmIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNhNGFjOTFkMTBiNzI1OGM1M2M1NDdhNTNkMDAyMTFkNTUwNzgwNTkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zYTc4MzYzZmYyZTg2YjUwNWFmZTExZjhlNjY0MzNhZmEwNmI3ZjQwIGIvZnV6emVyL2NvcnB1cy8zYTc4MzYzZmYyZTg2YjUwNWFmZTExZjhlNjY0MzNhZmEwNmI3ZjQwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMGQ2MWUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNhNzgzNjNmZjJlODZiNTA1YWZlMTFmOGU2NjQzM2FmYTA2YjdmNDAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zYTk0MzNkOTlhOTg1ZWFjODM4M2E4M2ZlYTA3Y2I1YjY0MjU3MDcwIGIvZnV6emVyL2NvcnB1cy8zYTk0MzNkOTlhOTg1ZWFjODM4M2E4M2ZlYTA3Y2I1YjY0MjU3MDcwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZmQyN2YKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNhOTQzM2Q5OWE5ODVlYWM4MzgzYTgzZmVhMDdjYjViNjQyNTcwNzAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zYTk1ZTZkOTkwOTkwMDM2NTIzMzBmM2UwMmJjZTM4MDE2MjI0YmViIGIvZnV6emVyL2NvcnB1cy8zYTk1ZTZkOTkwOTkwMDM2NTIzMzBmM2UwMmJjZTM4MDE2MjI0YmViCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MTZmZGUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNhOTVlNmQ5OTA5OTAwMzY1MjMzMGYzZTAyYmNlMzgwMTYyMjRiZWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zYTk3MDMxNjEwNmY2YzFiMzVkOGY5ZDVmM2UxNDZjMjExMmYxNGE1IGIvZnV6emVyL2NvcnB1cy8zYTk3MDMxNjEwNmY2YzFiMzVkOGY5ZDVmM2UxNDZjMjExMmYxNGE1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMjU5OTUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNhOTcwMzE2MTA2ZjZjMWIzNWQ4ZjlkNWYzZTE0NmMyMTEyZjE0YTUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zYWJlNjgzOTg3YTdkMzg1ZWQ0OTc2ZDVjMjczM2Y1MGJjYThkNWEyIGIvZnV6emVyL2NvcnB1cy8zYWJlNjgzOTg3YTdkMzg1ZWQ0OTc2ZDVjMjczM2Y1MGJjYThkNWEyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMGFkYmIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNhYmU2ODM5ODdhN2QzODVlZDQ5NzZkNWMyNzMzZjUwYmNhOGQ1YTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zYWY4NmFmYTBjZWExZGMxODE1OWI2YTMwOTBkMTViMTc4NzkxNGY2IGIvZnV6emVyL2NvcnB1cy8zYWY4NmFmYTBjZWExZGMxODE1OWI2YTMwOTBkMTViMTc4NzkxNGY2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMTJiNTAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNhZjg2YWZhMGNlYTFkYzE4MTU5YjZhMzA5MGQxNWIxNzg3OTE0ZjYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zYjEwZTA5ZDNmZDIzZGVlYTY5YjBhZDAyNDIzNzcyYjQxYTdlZWEwIGIvZnV6emVyL2NvcnB1cy8zYjEwZTA5ZDNmZDIzZGVlYTY5YjBhZDAyNDIzNzcyYjQxYTdlZWEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNDQ5MzQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNiMTBlMDlkM2ZkMjNkZWVhNjliMGFkMDI0MjM3NzJiNDFhN2VlYTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zYjNlYzkxOTNkOThkZGM1YjY4ZjkwODBlNDY0NGE1N2NkYzM0MzRiIGIvZnV6emVyL2NvcnB1cy8zYjNlYzkxOTNkOThkZGM1YjY4ZjkwODBlNDY0NGE1N2NkYzM0MzRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5Zjc5MjcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNiM2VjOTE5M2Q5OGRkYzViNjhmOTA4MGU0NjQ0YTU3Y2RjMzQzNGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zYjQwZmEyNmVmOGQyZWZkODljNzQ4NWE3MTY5ZjhjYWExNTNjYjgxIGIvZnV6emVyL2NvcnB1cy8zYjQwZmEyNmVmOGQyZWZkODljNzQ4NWE3MTY5ZjhjYWExNTNjYjgxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmY2I2MTUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNiNDBmYTI2ZWY4ZDJlZmQ4OWM3NDg1YTcxNjlmOGNhYTE1M2NiODEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zYmE2ZWJjMmQ1NzUzMTE4YzRlODYyM2FhNzEzODQ3MGZmY2NmN2YyIGIvZnV6emVyL2NvcnB1cy8zYmE2ZWJjMmQ1NzUzMTE4YzRlODYyM2FhNzEzODQ3MGZmY2NmN2YyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYzlhMzgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNiYTZlYmMyZDU3NTMxMThjNGU4NjIzYWE3MTM4NDcwZmZjY2Y3ZjIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zYmMxZWUzNGE0M2YyMmQ3OTU1MzYyNGJlMDE5OGI5NDUwMjBkYjAxIGIvZnV6emVyL2NvcnB1cy8zYmMxZWUzNGE0M2YyMmQ3OTU1MzYyNGJlMDE5OGI5NDUwMjBkYjAxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMzVmOTMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNiYzFlZTM0YTQzZjIyZDc5NTUzNjI0YmUwMTk4Yjk0NTAyMGRiMDEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zYmQxMjBjOWM1NDNjODM4NzM5YTdhMTFlNzIwM2JlMjljZDVmNmQ1IGIvZnV6emVyL2NvcnB1cy8zYmQxMjBjOWM1NDNjODM4NzM5YTdhMTFlNzIwM2JlMjljZDVmNmQ1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ODAxZDYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNiZDEyMGM5YzU0M2M4Mzg3MzlhN2ExMWU3MjAzYmUyOWNkNWY2ZDUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zYmRkMGIzOTVjZjRlODViOWY5MTI2YWM0NDljODAxOWQyZWQwNWIyIGIvZnV6emVyL2NvcnB1cy8zYmRkMGIzOTVjZjRlODViOWY5MTI2YWM0NDljODAxOWQyZWQwNWIyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ODBmYjcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNiZGQwYjM5NWNmNGU4NWI5ZjkxMjZhYzQ0OWM4MDE5ZDJlZDA1YjIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zYzExMGMyYWRhNDkzZWFhNGEzYWE0YmU1YzY2ZjllM2Y5OGFlZTVhIGIvZnV6emVyL2NvcnB1cy8zYzExMGMyYWRhNDkzZWFhNGEzYWE0YmU1YzY2ZjllM2Y5OGFlZTVhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MGRiNjAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNjMTEwYzJhZGE0OTNlYWE0YTNhYTRiZTVjNjZmOWUzZjk4YWVlNWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zYzRiY2EyZGNiN2VjMzdjNzk1YmU4OTc0NDk1NmRjMDk4NDI0ZTJiIGIvZnV6emVyL2NvcnB1cy8zYzRiY2EyZGNiN2VjMzdjNzk1YmU4OTc0NDk1NmRjMDk4NDI0ZTJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZTMzMmUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNjNGJjYTJkY2I3ZWMzN2M3OTViZTg5NzQ0OTU2ZGMwOTg0MjRlMmIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zYzUzY2E3ZjE1MTViZmE2YWM0ZGEyNzU4MzQyZjAxOTQzZDg1ZGMxIGIvZnV6emVyL2NvcnB1cy8zYzUzY2E3ZjE1MTViZmE2YWM0ZGEyNzU4MzQyZjAxOTQzZDg1ZGMxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZDA5MWQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNjNTNjYTdmMTUxNWJmYTZhYzRkYTI3NTgzNDJmMDE5NDNkODVkYzEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zYzY2YzZjYzVhYWRhNmUzMzU2M2ZjMTRhZjNhNTJlMTg2MjQ2MmJjIGIvZnV6emVyL2NvcnB1cy8zYzY2YzZjYzVhYWRhNmUzMzU2M2ZjMTRhZjNhNTJlMTg2MjQ2MmJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5Yzc3YTUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNjNjZjNmNjNWFhZGE2ZTMzNTYzZmMxNGFmM2E1MmUxODYyNDYyYmMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zY2NiZjZmYzNjYmM4YTgzMjMyMDAxMWIxZDY2MTVmYWY2YzJiODMyIGIvZnV6emVyL2NvcnB1cy8zY2NiZjZmYzNjYmM4YTgzMjMyMDAxMWIxZDY2MTVmYWY2YzJiODMyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZjI2NWEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNjY2JmNmZjM2NiYzhhODMyMzIwMDExYjFkNjYxNWZhZjZjMmI4MzIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zY2RhYWQxNGJmMTIyOGNkMTE0ZTc4ZmQ0YzhkOWFiZGIxYjBiOGEzIGIvZnV6emVyL2NvcnB1cy8zY2RhYWQxNGJmMTIyOGNkMTE0ZTc4ZmQ0YzhkOWFiZGIxYjBiOGEzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NDc0NDkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNjZGFhZDE0YmYxMjI4Y2QxMTRlNzhmZDRjOGQ5YWJkYjFiMGI4YTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZDBiNzQxMTIzYTljMTU1NzE4YWQyMzg3OTFlMTc3YjNlNzM0NDU2IGIvZnV6emVyL2NvcnB1cy8zZDBiNzQxMTIzYTljMTU1NzE4YWQyMzg3OTFlMTc3YjNlNzM0NDU2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1M2M1YmYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNkMGI3NDExMjNhOWMxNTU3MThhZDIzODc5MWUxNzdiM2U3MzQ0NTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZDE4ZGVjZmRkMmFhN2M2MDg5NjlmM2IxMTdjMGRkYjNhNTE2Y2ZhIGIvZnV6emVyL2NvcnB1cy8zZDE4ZGVjZmRkMmFhN2M2MDg5NjlmM2IxMTdjMGRkYjNhNTE2Y2ZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYmIwMWMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNkMThkZWNmZGQyYWE3YzYwODk2OWYzYjExN2MwZGRiM2E1MTZjZmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZDIyM2NiMDFmMzQ2M2NkM2UzZWQ3YjQyMmIxZGE1MjJhMTdiMjlkIGIvZnV6emVyL2NvcnB1cy8zZDIyM2NiMDFmMzQ2M2NkM2UzZWQ3YjQyMmIxZGE1MjJhMTdiMjlkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkM2FkZDYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNkMjIzY2IwMWYzNDYzY2QzZTNlZDdiNDIyYjFkYTUyMmExN2IyOWQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZDI3NWNiYzNhOWQ4NDgzYzVhM2M5MzQ0ZWU5MmFkNjYyNGYyNThhIGIvZnV6emVyL2NvcnB1cy8zZDI3NWNiYzNhOWQ4NDgzYzVhM2M5MzQ0ZWU5MmFkNjYyNGYyNThhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YTE3MDcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNkMjc1Y2JjM2E5ZDg0ODNjNWEzYzkzNDRlZTkyYWQ2NjI0ZjI1OGEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZDczYTg3OWE3OGEwNzRjNjUxNjA5YjhlZWVkNjkxMzNjMzUxYmYxIGIvZnV6emVyL2NvcnB1cy8zZDczYTg3OWE3OGEwNzRjNjUxNjA5YjhlZWVkNjkxMzNjMzUxYmYxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NDU1ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNkNzNhODc5YTc4YTA3NGM2NTE2MDliOGVlZWQ2OTEzM2MzNTFiZjEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZDc2MTVjMmMxZDA1OGVhZWM4OGIyNmRiMTVjNmE2NDAwYjhlMTJkIGIvZnV6emVyL2NvcnB1cy8zZDc2MTVjMmMxZDA1OGVhZWM4OGIyNmRiMTVjNmE2NDAwYjhlMTJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMzFlYzYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNkNzYxNWMyYzFkMDU4ZWFlYzg4YjI2ZGIxNWM2YTY0MDBiOGUxMmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZDgyY2U4NTNiNmNjM2VhNjJlMmVkYmI2OWJiOGFmMzM0MGExOGJhIGIvZnV6emVyL2NvcnB1cy8zZDgyY2U4NTNiNmNjM2VhNjJlMmVkYmI2OWJiOGFmMzM0MGExOGJhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MjJmNTQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNkODJjZTg1M2I2Y2MzZWE2MmUyZWRiYjY5YmI4YWYzMzQwYTE4YmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZDllNzNmOTk5MTFiNTNhNjVjY2MwYWYwMDY5OWE5YzFhNjBiMTAzIGIvZnV6emVyL2NvcnB1cy8zZDllNzNmOTk5MTFiNTNhNjVjY2MwYWYwMDY5OWE5YzFhNjBiMTAzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMWFmYzYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNkOWU3M2Y5OTkxMWI1M2E2NWNjYzBhZjAwNjk5YTljMWE2MGIxMDMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZDlmOGM3NWUzYWEyYTc5ZjliNTZhZWQ0NmVjM2M0ZWI2OTViY2QzIGIvZnV6emVyL2NvcnB1cy8zZDlmOGM3NWUzYWEyYTc5ZjliNTZhZWQ0NmVjM2M0ZWI2OTViY2QzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYWU2MGQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNkOWY4Yzc1ZTNhYTJhNzlmOWI1NmFlZDQ2ZWMzYzRlYjY5NWJjZDMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZGFjOWM3ZTlkOWRmM2UzZGY2MGEyYTA0NWY3NjI5ZTdlYTE5YmQ5IGIvZnV6emVyL2NvcnB1cy8zZGFjOWM3ZTlkOWRmM2UzZGY2MGEyYTA0NWY3NjI5ZTdlYTE5YmQ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1OTYwYTcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNkYWM5YzdlOWQ5ZGYzZTNkZjYwYTJhMDQ1Zjc2MjllN2VhMTliZDkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZGM2NGE1M2M1ODg4MjE3Y2U0MGZkZjY1OWNmNGQzOTI1ZGM5MWY0IGIvZnV6emVyL2NvcnB1cy8zZGM2NGE1M2M1ODg4MjE3Y2U0MGZkZjY1OWNmNGQzOTI1ZGM5MWY0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4OGQ5NDEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNkYzY0YTUzYzU4ODgyMTdjZTQwZmRmNjU5Y2Y0ZDM5MjVkYzkxZjQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZGRhOGE2OGQzZmZmMzNkMTQxYTdlYmZkNTEwMWUyZmQ3ZjE5NDg5IGIvZnV6emVyL2NvcnB1cy8zZGRhOGE2OGQzZmZmMzNkMTQxYTdlYmZkNTEwMWUyZmQ3ZjE5NDg5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NmFiNzcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNkZGE4YTY4ZDNmZmYzM2QxNDFhN2ViZmQ1MTAxZTJmZDdmMTk0ODkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZTFhMzk0ZmExOGZlNThhNTIyYjg3NGNhY2Y5YWZhMDkzMzQ1ODc5IGIvZnV6emVyL2NvcnB1cy8zZTFhMzk0ZmExOGZlNThhNTIyYjg3NGNhY2Y5YWZhMDkzMzQ1ODc5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZjNhYWQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNlMWEzOTRmYTE4ZmU1OGE1MjJiODc0Y2FjZjlhZmEwOTMzNDU4NzkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZTMzNGU1OGY3YzBhNjE5MzEyMjA4OGNmYzNkNDVkODdmNDgxZDY0IGIvZnV6emVyL2NvcnB1cy8zZTMzNGU1OGY3YzBhNjE5MzEyMjA4OGNmYzNkNDVkODdmNDgxZDY0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YzQ4OWEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNlMzM0ZTU4ZjdjMGE2MTkzMTIyMDg4Y2ZjM2Q0NWQ4N2Y0ODFkNjQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZTQ0ZmY4ZjM1ZTE5M2Y3YjdmYTBlMTgzMWRjMzdjZWZhYTRkZTAyIGIvZnV6emVyL2NvcnB1cy8zZTQ0ZmY4ZjM1ZTE5M2Y3YjdmYTBlMTgzMWRjMzdjZWZhYTRkZTAyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NzUyNmQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNlNDRmZjhmMzVlMTkzZjdiN2ZhMGUxODMxZGMzN2NlZmFhNGRlMDIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZThiMWM1YTMwODgyNTcxNDllMjhhOWU0ODVlMGJhODJhYjYyOGRiIGIvZnV6emVyL2NvcnB1cy8zZThiMWM1YTMwODgyNTcxNDllMjhhOWU0ODVlMGJhODJhYjYyOGRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZGY5ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNlOGIxYzVhMzA4ODI1NzE0OWUyOGE5ZTQ4NWUwYmE4MmFiNjI4ZGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZTllOGVjMjUxZGM3YmE3YzI1NWU4ZDIzYzk5YzA2NDM0NjgyMzNkIGIvZnV6emVyL2NvcnB1cy8zZTllOGVjMjUxZGM3YmE3YzI1NWU4ZDIzYzk5YzA2NDM0NjgyMzNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NjcwMjAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNlOWU4ZWMyNTFkYzdiYTdjMjU1ZThkMjNjOTljMDY0MzQ2ODIzM2QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZWIwNzU5YWRkYTc3YzUzYWNjZTM1NzIyMmZkY2YyMDUzMzEzMDk0IGIvZnV6emVyL2NvcnB1cy8zZWIwNzU5YWRkYTc3YzUzYWNjZTM1NzIyMmZkY2YyMDUzMzEzMDk0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNzYzNDYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNlYjA3NTlhZGRhNzdjNTNhY2NlMzU3MjIyZmRjZjIwNTMzMTMwOTQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZjBkNGRiNmU4ZjFiNjUyZGZjODdhYWE3YWRlZjE5ODI2NTVjY2MwIGIvZnV6emVyL2NvcnB1cy8zZjBkNGRiNmU4ZjFiNjUyZGZjODdhYWE3YWRlZjE5ODI2NTVjY2MwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OWIzODEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNmMGQ0ZGI2ZThmMWI2NTJkZmM4N2FhYTdhZGVmMTk4MjY1NWNjYzAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZjEzNDlkZjRhMTRjYzRkMTAyYjI1ODNmZWNkZDkwODJjZTc2MDgxIGIvZnV6emVyL2NvcnB1cy8zZjEzNDlkZjRhMTRjYzRkMTAyYjI1ODNmZWNkZDkwODJjZTc2MDgxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYmFlZjgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNmMTM0OWRmNGExNGNjNGQxMDJiMjU4M2ZlY2RkOTA4MmNlNzYwODEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZjY4N2QyZTk0NTM3NTExN2QwYTJiMWNhZWNkNGY4YzZlNmQ4M2NhIGIvZnV6emVyL2NvcnB1cy8zZjY4N2QyZTk0NTM3NTExN2QwYTJiMWNhZWNkNGY4YzZlNmQ4M2NhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczN2E1MGQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNmNjg3ZDJlOTQ1Mzc1MTE3ZDBhMmIxY2FlY2Q0ZjhjNmU2ZDgzY2EKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZjZkZGM1MWMzNjE5NDA0YjllNzVmNzJmZDExMmVjNWE3NmZjNjRkIGIvZnV6emVyL2NvcnB1cy8zZjZkZGM1MWMzNjE5NDA0YjllNzVmNzJmZDExMmVjNWE3NmZjNjRkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNmJlN2QKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNmNmRkYzUxYzM2MTk0MDRiOWU3NWY3MmZkMTEyZWM1YTc2ZmM2NGQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZjlhYzgwYTI3YTVjZGM1MzM1OTJmMjQzNTM4NGYxMWZlY2EyN2I3IGIvZnV6emVyL2NvcnB1cy8zZjlhYzgwYTI3YTVjZGM1MzM1OTJmMjQzNTM4NGYxMWZlY2EyN2I3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYWE1ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNmOWFjODBhMjdhNWNkYzUzMzU5MmYyNDM1Mzg0ZjExZmVjYTI3YjcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZjlmNzNjZTM2NDc4ODY3YTQ2MDVhOTY2OTRhZDFhYzU4NTY4YjhkIGIvZnV6emVyL2NvcnB1cy8zZjlmNzNjZTM2NDc4ODY3YTQ2MDVhOTY2OTRhZDFhYzU4NTY4YjhkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNDFjNmIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNmOWY3M2NlMzY0Nzg4NjdhNDYwNWE5NjY5NGFkMWFjNTg1NjhiOGQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZmI1NDY4MTJiZDg3YjUzZmU5YzhiZDJmYjhkNGZlNWY1NWIwODhjIGIvZnV6emVyL2NvcnB1cy8zZmI1NDY4MTJiZDg3YjUzZmU5YzhiZDJmYjhkNGZlNWY1NWIwODhjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYjRmMzQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNmYjU0NjgxMmJkODdiNTNmZTljOGJkMmZiOGQ0ZmU1ZjU1YjA4OGMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZmMwZGYwMTVmZmM5ZDY0NWQ4ZThhMjE3YTBiOTdlMDY3MGNiYTIxIGIvZnV6emVyL2NvcnB1cy8zZmMwZGYwMTVmZmM5ZDY0NWQ4ZThhMjE3YTBiOTdlMDY3MGNiYTIxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MmJkMTIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNmYzBkZjAxNWZmYzlkNjQ1ZDhlOGEyMTdhMGI5N2UwNjcwY2JhMjEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZmQ1MTkzYTcxODdjYjE4NDYzYmY4ZGE0ZjRjODQyZjMxNGQ1OTk1IGIvZnV6emVyL2NvcnB1cy8zZmQ1MTkzYTcxODdjYjE4NDYzYmY4ZGE0ZjRjODQyZjMxNGQ1OTk1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OWQ3YjUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNmZDUxOTNhNzE4N2NiMTg0NjNiZjhkYTRmNGM4NDJmMzE0ZDU5OTUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZmQ3OGNlMzNiNWIyMDkwMzViYTQ1Y2ExOWU4NjQ0MmJmNTBlY2Y2IGIvZnV6emVyL2NvcnB1cy8zZmQ3OGNlMzNiNWIyMDkwMzViYTQ1Y2ExOWU4NjQ0MmJmNTBlY2Y2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NWZjYTgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNmZDc4Y2UzM2I1YjIwOTAzNWJhNDVjYTE5ZTg2NDQyYmY1MGVjZjYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZmYxOWM1N2NhMWYzY2MwMTg3NjQ5OGIwYTk1MzI3MzkwNmRiYmRjIGIvZnV6emVyL2NvcnB1cy8zZmYxOWM1N2NhMWYzY2MwMTg3NjQ5OGIwYTk1MzI3MzkwNmRiYmRjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNDhlNGEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNmZjE5YzU3Y2ExZjNjYzAxODc2NDk4YjBhOTUzMjczOTA2ZGJiZGMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZmY1MTk0OGQzZDRkNDVmNGViZDA2ZjM1OGVkYWJiYzViN2I5NTkxIGIvZnV6emVyL2NvcnB1cy8zZmY1MTk0OGQzZDRkNDVmNGViZDA2ZjM1OGVkYWJiYzViN2I5NTkxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlY2ExNWUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNmZjUxOTQ4ZDNkNGQ0NWY0ZWJkMDZmMzU4ZWRhYmJjNWI3Yjk1OTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy8zZmZiYzI5Y2E2YjA1YTgwN2Y0N2UzZmU4YjgwMWYwMjRhZjZiYWE3IGIvZnV6emVyL2NvcnB1cy8zZmZiYzI5Y2E2YjA1YTgwN2Y0N2UzZmU4YjgwMWYwMjRhZjZiYWE3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNmRhMGQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzNmZmJjMjljYTZiMDVhODA3ZjQ3ZTNmZThiODAxZjAyNGFmNmJhYTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MDMyOWMyZGZkMGI1NTU3ZGRhZDE0MjZiYjk3OGExZjZhYzVkM2Q0IGIvZnV6emVyL2NvcnB1cy80MDMyOWMyZGZkMGI1NTU3ZGRhZDE0MjZiYjk3OGExZjZhYzVkM2Q0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMmZjNzcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQwMzI5YzJkZmQwYjU1NTdkZGFkMTQyNmJiOTc4YTFmNmFjNWQzZDQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MDQ0ZjAyYWUxNTJiNTU4Njg0N2Y5MDU3MmZkMDIxM2EwZTAyMjczIGIvZnV6emVyL2NvcnB1cy80MDQ0ZjAyYWUxNTJiNTU4Njg0N2Y5MDU3MmZkMDIxM2EwZTAyMjczCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMGE5MmQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQwNDRmMDJhZTE1MmI1NTg2ODQ3ZjkwNTcyZmQwMjEzYTBlMDIyNzMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MDQ1ODU0ODE1N2M4YmQwY2Y2ZjQzNzNkM2UwODRhOWI2ZTRmZDVlIGIvZnV6emVyL2NvcnB1cy80MDQ1ODU0ODE1N2M4YmQwY2Y2ZjQzNzNkM2UwODRhOWI2ZTRmZDVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZTY4ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQwNDU4NTQ4MTU3YzhiZDBjZjZmNDM3M2QzZTA4NGE5YjZlNGZkNWUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MDU1ZDQxODBkMmI1MjA5ZTA0YTExMWRmYmU2MjA2YzZiMzI3Nzk3IGIvZnV6emVyL2NvcnB1cy80MDU1ZDQxODBkMmI1MjA5ZTA0YTExMWRmYmU2MjA2YzZiMzI3Nzk3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZTk2MTUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQwNTVkNDE4MGQyYjUyMDllMDRhMTExZGZiZTYyMDZjNmIzMjc3OTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MDVlZDQzZGRhYWY0OWY4ODNkMjZmZmM0NjJkYmM3NDI5Y2U4YjAwIGIvZnV6emVyL2NvcnB1cy80MDVlZDQzZGRhYWY0OWY4ODNkMjZmZmM0NjJkYmM3NDI5Y2U4YjAwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5N2NhMjkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQwNWVkNDNkZGFhZjQ5Zjg4M2QyNmZmYzQ2MmRiYzc0MjljZThiMDAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MDhkNDBiNjRiM2M1NGQ3ZDFhYjdjNTEwYjU1NzcwMDdlYTQ5YjFiIGIvZnV6emVyL2NvcnB1cy80MDhkNDBiNjRiM2M1NGQ3ZDFhYjdjNTEwYjU1NzcwMDdlYTQ5YjFiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiYWE5YWUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQwOGQ0MGI2NGIzYzU0ZDdkMWFiN2M1MTBiNTU3NzAwN2VhNDliMWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MDkxZjI3NjViNjE5OGUzNTRkODk5MzRhYTEwYTVhMDEyMzYzOWU3IGIvZnV6emVyL2NvcnB1cy80MDkxZjI3NjViNjE5OGUzNTRkODk5MzRhYTEwYTVhMDEyMzYzOWU3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNzFiZDEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQwOTFmMjc2NWI2MTk4ZTM1NGQ4OTkzNGFhMTBhNWEwMTIzNjM5ZTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MGFlY2RjODhiOTkyMjFmNzJiMjNlOWUyZWI0M2JkYzcxN2U0NWQ1IGIvZnV6emVyL2NvcnB1cy80MGFlY2RjODhiOTkyMjFmNzJiMjNlOWUyZWI0M2JkYzcxN2U0NWQ1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZTY2MDEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQwYWVjZGM4OGI5OTIyMWY3MmIyM2U5ZTJlYjQzYmRjNzE3ZTQ1ZDUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MGM5NjBkN2E4MDdlMDFiYWM1NDExZGM4NTg0ODQyZTUwYWNhM2JlIGIvZnV6emVyL2NvcnB1cy80MGM5NjBkN2E4MDdlMDFiYWM1NDExZGM4NTg0ODQyZTUwYWNhM2JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0Nzg2OGQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQwYzk2MGQ3YTgwN2UwMWJhYzU0MTFkYzg1ODQ4NDJlNTBhY2EzYmUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MGNhNTZlOWJiYmE5MjY1N2E3YmQ4MDg0ZGU0M2UyOWJmZjJlYTM3IGIvZnV6emVyL2NvcnB1cy80MGNhNTZlOWJiYmE5MjY1N2E3YmQ4MDg0ZGU0M2UyOWJmZjJlYTM3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMWU3OWEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQwY2E1NmU5YmJiYTkyNjU3YTdiZDgwODRkZTQzZTI5YmZmMmVhMzcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MGRmYmYxMDIyNGQzMzVhMjgwMjZlMGVlZjE2NTZkNGE0MDUwNWFkIGIvZnV6emVyL2NvcnB1cy80MGRmYmYxMDIyNGQzMzVhMjgwMjZlMGVlZjE2NTZkNGE0MDUwNWFkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMjE3NjcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQwZGZiZjEwMjI0ZDMzNWEyODAyNmUwZWVmMTY1NmQ0YTQwNTA1YWQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MGYyODZjMmZiZjU4ZWZkNTQ2NmYyZGI0MzBmYmY3NDk0NjE0YmU5IGIvZnV6emVyL2NvcnB1cy80MGYyODZjMmZiZjU4ZWZkNTQ2NmYyZGI0MzBmYmY3NDk0NjE0YmU5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYzA3ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQwZjI4NmMyZmJmNThlZmQ1NDY2ZjJkYjQzMGZiZjc0OTQ2MTRiZTkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MTI3MjA1NDhhNjkzY2RkOTcwYzUwZDJhNDRlNWNjYzc2MDJkYjljIGIvZnV6emVyL2NvcnB1cy80MTI3MjA1NDhhNjkzY2RkOTcwYzUwZDJhNDRlNWNjYzc2MDJkYjljCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhYzc1MDEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQxMjcyMDU0OGE2OTNjZGQ5NzBjNTBkMmE0NGU1Y2NjNzYwMmRiOWMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MTMxMDZiOWRjNzNjYTMxYmRmZWNkMjMwNTdlNDY4ZTM3NGMyZjMxIGIvZnV6emVyL2NvcnB1cy80MTMxMDZiOWRjNzNjYTMxYmRmZWNkMjMwNTdlNDY4ZTM3NGMyZjMxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMGU4ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQxMzEwNmI5ZGM3M2NhMzFiZGZlY2QyMzA1N2U0NjhlMzc0YzJmMzEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MTMzNWUwYzgyYmI5NmE5NTJiMWJiZmEwYzFmMDBkZjEwZmRhODA5IGIvZnV6emVyL2NvcnB1cy80MTMzNWUwYzgyYmI5NmE5NTJiMWJiZmEwYzFmMDBkZjEwZmRhODA5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMjBiZjkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQxMzM1ZTBjODJiYjk2YTk1MmIxYmJmYTBjMWYwMGRmMTBmZGE4MDkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MTM0ZmNmOTBlN2NmOTk0NjY5ZGM2YWNlYTRlY2MxYmQ1MDNkMmNkIGIvZnV6emVyL2NvcnB1cy80MTM0ZmNmOTBlN2NmOTk0NjY5ZGM2YWNlYTRlY2MxYmQ1MDNkMmNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MGQ1NmQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQxMzRmY2Y5MGU3Y2Y5OTQ2NjlkYzZhY2VhNGVjYzFiZDUwM2QyY2QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MTU4NGUzNDI3YWM2MjIxZjk1ZTA1ZDBhNGE0ZDdlMzA1NWEyNDBkIGIvZnV6emVyL2NvcnB1cy80MTU4NGUzNDI3YWM2MjIxZjk1ZTA1ZDBhNGE0ZDdlMzA1NWEyNDBkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZGZhNDEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQxNTg0ZTM0MjdhYzYyMjFmOTVlMDVkMGE0YTRkN2UzMDU1YTI0MGQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MTg2Yjg1YzQ1MDZiYmEyNTY4MDdjMjEyZDNlMTgyNzQzYzkzMTgxIGIvZnV6emVyL2NvcnB1cy80MTg2Yjg1YzQ1MDZiYmEyNTY4MDdjMjEyZDNlMTgyNzQzYzkzMTgxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NmFlYzYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQxODZiODVjNDUwNmJiYTI1NjgwN2MyMTJkM2UxODI3NDNjOTMxODEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MTk0ZDRmMGJmNTM0NTMzYWFhMTdmMjZiMDljZGY3ZjEyNTUzZmI2IGIvZnV6emVyL2NvcnB1cy80MTk0ZDRmMGJmNTM0NTMzYWFhMTdmMjZiMDljZGY3ZjEyNTUzZmI2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNDM5YzUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQxOTRkNGYwYmY1MzQ1MzNhYWExN2YyNmIwOWNkZjdmMTI1NTNmYjYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MTk2YzUwOGQxNGZlNjk0ZGYzMmY4MjA0ZTNkMjk5OWY2NjVkYTZhIGIvZnV6emVyL2NvcnB1cy80MTk2YzUwOGQxNGZlNjk0ZGYzMmY4MjA0ZTNkMjk5OWY2NjVkYTZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmOTM0MTIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQxOTZjNTA4ZDE0ZmU2OTRkZjMyZjgyMDRlM2QyOTk5ZjY2NWRhNmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MWExMDdlZDQ3Y2ExY2YwZmNjZDZiZTQyOTBkODQwZDZmZjU2Njg0IGIvZnV6emVyL2NvcnB1cy80MWExMDdlZDQ3Y2ExY2YwZmNjZDZiZTQyOTBkODQwZDZmZjU2Njg0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOTdmNzIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQxYTEwN2VkNDdjYTFjZjBmY2NkNmJlNDI5MGQ4NDBkNmZmNTY2ODQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MWJiYTc2ODQwNmRlMzMxMTQ1YmM3MzE4NDYxNjI4M2E2YzIxNDM1IGIvZnV6emVyL2NvcnB1cy80MWJiYTc2ODQwNmRlMzMxMTQ1YmM3MzE4NDYxNjI4M2E2YzIxNDM1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NGY2MzgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQxYmJhNzY4NDA2ZGUzMzExNDViYzczMTg0NjE2MjgzYTZjMjE0MzUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MWViMzhmMTRlOGI1NzRhODg0MzYwODk0MGFkMzhhMjYxZjA1MTY4IGIvZnV6emVyL2NvcnB1cy80MWViMzhmMTRlOGI1NzRhODg0MzYwODk0MGFkMzhhMjYxZjA1MTY4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YmI2ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQxZWIzOGYxNGU4YjU3NGE4ODQzNjA4OTQwYWQzOGEyNjFmMDUxNjgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MWVjOTI3ODcwNjM5MjZkZjg5NDRmZGVjZWZhZjUzZmUxYTdiNWU1IGIvZnV6emVyL2NvcnB1cy80MWVjOTI3ODcwNjM5MjZkZjg5NDRmZGVjZWZhZjUzZmUxYTdiNWU1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzY2M5Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQxZWM5Mjc4NzA2MzkyNmRmODk0NGZkZWNlZmFmNTNmZTFhN2I1ZTUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MWVlZmJiNzg5Njc5YjUzYTY0ZjY2MjY0OTRkMjE5ZjE0MzBmODc5IGIvZnV6emVyL2NvcnB1cy80MWVlZmJiNzg5Njc5YjUzYTY0ZjY2MjY0OTRkMjE5ZjE0MzBmODc5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MmIyMjEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQxZWVmYmI3ODk2NzliNTNhNjRmNjYyNjQ5NGQyMTlmMTQzMGY4NzkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MjA2ODA2ZjJkMDBjNDU3ZWE1ZGU5N2U2NmU1NWM2ZGU2ZmZiODllIGIvZnV6emVyL2NvcnB1cy80MjA2ODA2ZjJkMDBjNDU3ZWE1ZGU5N2U2NmU1NWM2ZGU2ZmZiODllCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NDUxZGMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQyMDY4MDZmMmQwMGM0NTdlYTVkZTk3ZTY2ZTU1YzZkZTZmZmI4OWUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MjI0ODgwNThiOTY4YTMwY2Y3NzY0ZDI4ZDBkZWQ4YzFiZjg0NDlhIGIvZnV6emVyL2NvcnB1cy80MjI0ODgwNThiOTY4YTMwY2Y3NzY0ZDI4ZDBkZWQ4YzFiZjg0NDlhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ODEyYzIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQyMjQ4ODA1OGI5NjhhMzBjZjc3NjRkMjhkMGRlZDhjMWJmODQ0OWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MjRiOTY0ZmI2YTRkOTJlNDQzN2QzMTEwYWU3Njk4YTdjOTY4OGZhIGIvZnV6emVyL2NvcnB1cy80MjRiOTY0ZmI2YTRkOTJlNDQzN2QzMTEwYWU3Njk4YTdjOTY4OGZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZjllMzEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQyNGI5NjRmYjZhNGQ5MmU0NDM3ZDMxMTBhZTc2OThhN2M5Njg4ZmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MjU2ZTcwNWEzODVjMzhmMjc4NDY5NWEyMDBkMTZjNTQyYWM0YTRmIGIvZnV6emVyL2NvcnB1cy80MjU2ZTcwNWEzODVjMzhmMjc4NDY5NWEyMDBkMTZjNTQyYWM0YTRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZTVjNzQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQyNTZlNzA1YTM4NWMzOGYyNzg0Njk1YTIwMGQxNmM1NDJhYzRhNGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MjZmNWE2ZDFhZmJlNGNlNThhOTFjYWZhMDUyOTAyNWNjYmQwNzVlIGIvZnV6emVyL2NvcnB1cy80MjZmNWE2ZDFhZmJlNGNlNThhOTFjYWZhMDUyOTAyNWNjYmQwNzVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZWQyZGEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQyNmY1YTZkMWFmYmU0Y2U1OGE5MWNhZmEwNTI5MDI1Y2NiZDA3NWUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MjkxNDg4M2UxZTQxYzA4MzVlNDM5Y2JlYzQwN2E4YzgxMTUzZmVjIGIvZnV6emVyL2NvcnB1cy80MjkxNDg4M2UxZTQxYzA4MzVlNDM5Y2JlYzQwN2E4YzgxMTUzZmVjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNjhlMmUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQyOTE0ODgzZTFlNDFjMDgzNWU0MzljYmVjNDA3YThjODExNTNmZWMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MmJhOWY1Y2RmYjRiYWM1ZmJjNDZiOTI5MGM0ZDM3OWRkYmViZmRhIGIvZnV6emVyL2NvcnB1cy80MmJhOWY1Y2RmYjRiYWM1ZmJjNDZiOTI5MGM0ZDM3OWRkYmViZmRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NGVkMmIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQyYmE5ZjVjZGZiNGJhYzVmYmM0NmI5MjkwYzRkMzc5ZGRiZWJmZGEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MmMwNGY0OTQ5ZjZhY2NkYjQyNWU4MDkwMjRiMGZhMzRmOTFmMzJjIGIvZnV6emVyL2NvcnB1cy80MmMwNGY0OTQ5ZjZhY2NkYjQyNWU4MDkwMjRiMGZhMzRmOTFmMzJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNTFkZDEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQyYzA0ZjQ5NDlmNmFjY2RiNDI1ZTgwOTAyNGIwZmEzNGY5MWYzMmMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MmNjOWEzNTBiOWQwMzAzNTRlOGYzNGIyMTcwNjJjYjdkNmExMmI1IGIvZnV6emVyL2NvcnB1cy80MmNjOWEzNTBiOWQwMzAzNTRlOGYzNGIyMTcwNjJjYjdkNmExMmI1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYmI5M2UKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQyY2M5YTM1MGI5ZDAzMDM1NGU4ZjM0YjIxNzA2MmNiN2Q2YTEyYjUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MmY4NTQ5ZTIxNmQ0ZmM0ZmI4M2VjMzdmNGVmODJlOGQxODA0MjcwIGIvZnV6emVyL2NvcnB1cy80MmY4NTQ5ZTIxNmQ0ZmM0ZmI4M2VjMzdmNGVmODJlOGQxODA0MjcwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMmVmZWQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQyZjg1NDllMjE2ZDRmYzRmYjgzZWMzN2Y0ZWY4MmU4ZDE4MDQyNzAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MmZmNTU4ZTYxMmQzMjgwNTI5MmUxMGUwZDU1ODhhZmY5ZWJmZGI0IGIvZnV6emVyL2NvcnB1cy80MmZmNTU4ZTYxMmQzMjgwNTI5MmUxMGUwZDU1ODhhZmY5ZWJmZGI0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMzMwNzYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQyZmY1NThlNjEyZDMyODA1MjkyZTEwZTBkNTU4OGFmZjllYmZkYjQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MzExZDUzYWI1ODMyNTMwMDM3NjJkNWM2ZGYyNDhkOWFkMGI5NjBkIGIvZnV6emVyL2NvcnB1cy80MzExZDUzYWI1ODMyNTMwMDM3NjJkNWM2ZGYyNDhkOWFkMGI5NjBkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYTU0YzQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQzMTFkNTNhYjU4MzI1MzAwMzc2MmQ1YzZkZjI0OGQ5YWQwYjk2MGQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MzFmNjY5MmQ1ZDNiNTljZDdhNGFiZjNmODVlNTE2MzA5ZmFhZjIzIGIvZnV6emVyL2NvcnB1cy80MzFmNjY5MmQ1ZDNiNTljZDdhNGFiZjNmODVlNTE2MzA5ZmFhZjIzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYmVjMjYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQzMWY2NjkyZDVkM2I1OWNkN2E0YWJmM2Y4NWU1MTYzMDlmYWFmMjMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MzRiM2FiYTRmYjIzYjBhMWRkZTcyNTNiYTZjZTJlNWI5NDEyODBiIGIvZnV6emVyL2NvcnB1cy80MzRiM2FiYTRmYjIzYjBhMWRkZTcyNTNiYTZjZTJlNWI5NDEyODBiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNzQzZWMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQzNGIzYWJhNGZiMjNiMGExZGRlNzI1M2JhNmNlMmU1Yjk0MTI4MGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MzYyMGI0OGJkYzM4YzI1ZDMzMDFiMWVlNWY0MmFhYTlmYTIyNDU4IGIvZnV6emVyL2NvcnB1cy80MzYyMGI0OGJkYzM4YzI1ZDMzMDFiMWVlNWY0MmFhYTlmYTIyNDU4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MTk2NjMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQzNjIwYjQ4YmRjMzhjMjVkMzMwMWIxZWU1ZjQyYWFhOWZhMjI0NTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80MzhhMDBmMmJkNmZlNjJmZDdlY2FmMWQwMWFkZDU3ZGQyNDliNWQ4IGIvZnV6emVyL2NvcnB1cy80MzhhMDBmMmJkNmZlNjJmZDdlY2FmMWQwMWFkZDU3ZGQyNDliNWQ4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MmUzN2QKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQzOGEwMGYyYmQ2ZmU2MmZkN2VjYWYxZDAxYWRkNTdkZDI0OWI1ZDgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80M2EwNGRlNDI4ZGMzNDczNzU5MTVhYmQxZjMyYzk1YjE0ZTA3YjljIGIvZnV6emVyL2NvcnB1cy80M2EwNGRlNDI4ZGMzNDczNzU5MTVhYmQxZjMyYzk1YjE0ZTA3YjljCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NjFmOTAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQzYTA0ZGU0MjhkYzM0NzM3NTkxNWFiZDFmMzJjOTViMTRlMDdiOWMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80M2E3ZGFjMmYyMmVkNThkMTUxZDM3OWYxYTY5NDkyZDE1YzRlNGVjIGIvZnV6emVyL2NvcnB1cy80M2E3ZGFjMmYyMmVkNThkMTUxZDM3OWYxYTY5NDkyZDE1YzRlNGVjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MzFlMTgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQzYTdkYWMyZjIyZWQ1OGQxNTFkMzc5ZjFhNjk0OTJkMTVjNGU0ZWMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80M2FiNzRjYzRmNWVjYWNmM2EzODU3MmY5NTRlZDAzODhlY2ZkODNjIGIvZnV6emVyL2NvcnB1cy80M2FiNzRjYzRmNWVjYWNmM2EzODU3MmY5NTRlZDAzODhlY2ZkODNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNjY4MTMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQzYWI3NGNjNGY1ZWNhY2YzYTM4NTcyZjk1NGVkMDM4OGVjZmQ4M2MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80M2IxNjUzMjgxMWJhM2NlODRiZDA2MTEzMTI2YThlNjIzMGJjNGU2IGIvZnV6emVyL2NvcnB1cy80M2IxNjUzMjgxMWJhM2NlODRiZDA2MTEzMTI2YThlNjIzMGJjNGU2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NDViODUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQzYjE2NTMyODExYmEzY2U4NGJkMDYxMTMxMjZhOGU2MjMwYmM0ZTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80M2M2NWJjMTVmNGM5M2FkYmI2YmMyMTg2ZDAyZDZkOTY5NDZhZTRiIGIvZnV6emVyL2NvcnB1cy80M2M2NWJjMTVmNGM5M2FkYmI2YmMyMTg2ZDAyZDZkOTY5NDZhZTRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNGVlMDAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQzYzY1YmMxNWY0YzkzYWRiYjZiYzIxODZkMDJkNmQ5Njk0NmFlNGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80M2NjZDRiMDA0YjhlYmExMGI3OTgxYjY0OWY0MWMyMTJjN2FlZjE0IGIvZnV6emVyL2NvcnB1cy80M2NjZDRiMDA0YjhlYmExMGI3OTgxYjY0OWY0MWMyMTJjN2FlZjE0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YjQyNWYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQzY2NkNGIwMDRiOGViYTEwYjc5ODFiNjQ5ZjQxYzIxMmM3YWVmMTQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80M2QwNDYyNjg5ZDIwNjk0MmM1MGIxMDAxOGM1ZjI2NjdhZmNhZjliIGIvZnV6emVyL2NvcnB1cy80M2QwNDYyNjg5ZDIwNjk0MmM1MGIxMDAxOGM1ZjI2NjdhZmNhZjliCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MjE4NGEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQzZDA0NjI2ODlkMjA2OTQyYzUwYjEwMDE4YzVmMjY2N2FmY2FmOWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NDI2ODYyNzA3MmIyNzNiMzE4NjY4NTVlM2Q4OWE0NmRiNGM1OTkzIGIvZnV6emVyL2NvcnB1cy80NDI2ODYyNzA3MmIyNzNiMzE4NjY4NTVlM2Q4OWE0NmRiNGM1OTkzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZDgyMTAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ0MjY4NjI3MDcyYjI3M2IzMTg2Njg1NWUzZDg5YTQ2ZGI0YzU5OTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NDJlN2JhMDZhZWQ0YTQ0YzZjNjA3NDNlZDYyNjNhNGMxNTRkY2M4IGIvZnV6emVyL2NvcnB1cy80NDJlN2JhMDZhZWQ0YTQ0YzZjNjA3NDNlZDYyNjNhNGMxNTRkY2M4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwY2I1MTYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ0MmU3YmEwNmFlZDRhNDRjNmM2MDc0M2VkNjI2M2E0YzE1NGRjYzgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NDZmYmFjMjdlYTY1NmRlYzRhMjFjNjE2ZGI3OWE2YzQ1NDg3ZWUzIGIvZnV6emVyL2NvcnB1cy80NDZmYmFjMjdlYTY1NmRlYzRhMjFjNjE2ZGI3OWE2YzQ1NDg3ZWUzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNDY5YWMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ0NmZiYWMyN2VhNjU2ZGVjNGEyMWM2MTZkYjc5YTZjNDU0ODdlZTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NDg0ODg5OTU0YzcyY2RjY2FlYTdhNjRhZjJhNjMzZDZlZmQ5ZTgyIGIvZnV6emVyL2NvcnB1cy80NDg0ODg5OTU0YzcyY2RjY2FlYTdhNjRhZjJhNjMzZDZlZmQ5ZTgyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmOGM5OTkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ0ODQ4ODk5NTRjNzJjZGNjYWVhN2E2NGFmMmE2MzNkNmVmZDllODIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NGJlOGYyYWU1NWZkZTE3NGFjMDI0Y2FhN2FiODUwMzdjNGM2NzAwIGIvZnV6emVyL2NvcnB1cy80NGJlOGYyYWU1NWZkZTE3NGFjMDI0Y2FhN2FiODUwMzdjNGM2NzAwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YzY5NWYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ0YmU4ZjJhZTU1ZmRlMTc0YWMwMjRjYWE3YWI4NTAzN2M0YzY3MDAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NGVmMzUzY2Q2NDg0NzBlNDM4Y2UzNDA1NDE2ZDgzNGRkNzVlZWNlIGIvZnV6emVyL2NvcnB1cy80NGVmMzUzY2Q2NDg0NzBlNDM4Y2UzNDA1NDE2ZDgzNGRkNzVlZWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ODllMGYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ0ZWYzNTNjZDY0ODQ3MGU0MzhjZTM0MDU0MTZkODM0ZGQ3NWVlY2UKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NGYwOGIzZDBmN2VkYjc0OTc1NDI2ZTRjZDA2NDAyN2E4ODVjNTc2IGIvZnV6emVyL2NvcnB1cy80NGYwOGIzZDBmN2VkYjc0OTc1NDI2ZTRjZDA2NDAyN2E4ODVjNTc2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZDE0N2UKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ0ZjA4YjNkMGY3ZWRiNzQ5NzU0MjZlNGNkMDY0MDI3YTg4NWM1NzYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NTJmODk4ZTEzZjFiMWE3MDk2ZjdiNzM1NmJhODA1ZmQ0NGUwYTE2IGIvZnV6emVyL2NvcnB1cy80NTJmODk4ZTEzZjFiMWE3MDk2ZjdiNzM1NmJhODA1ZmQ0NGUwYTE2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZDE4ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ1MmY4OThlMTNmMWIxYTcwOTZmN2I3MzU2YmE4MDVmZDQ0ZTBhMTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NTZhNGI4NGFmZDFlODdkZDI5NDlhODBlNmI3ZGU1NTMyMzY5ZGFhIGIvZnV6emVyL2NvcnB1cy80NTZhNGI4NGFmZDFlODdkZDI5NDlhODBlNmI3ZGU1NTMyMzY5ZGFhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYzNiYTgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ1NmE0Yjg0YWZkMWU4N2RkMjk0OWE4MGU2YjdkZTU1MzIzNjlkYWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NTZlNWFiYTQ4MWU5NDk0NDgwZGZlMGUzMDEwM2Q3YTM3MWMzNmYwIGIvZnV6emVyL2NvcnB1cy80NTZlNWFiYTQ4MWU5NDk0NDgwZGZlMGUzMDEwM2Q3YTM3MWMzNmYwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZjI2OTYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ1NmU1YWJhNDgxZTk0OTQ0ODBkZmUwZTMwMTAzZDdhMzcxYzM2ZjAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NTczNTM5Y2QxMDIzMDlhNjM5ZDZlZmE3ZmIzNzJkYjEwOWYxYzQ3IGIvZnV6emVyL2NvcnB1cy80NTczNTM5Y2QxMDIzMDlhNjM5ZDZlZmE3ZmIzNzJkYjEwOWYxYzQ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYTFlZmIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ1NzM1MzljZDEwMjMwOWE2MzlkNmVmYTdmYjM3MmRiMTA5ZjFjNDcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NTgwYWJkOGU4MjA5OTBiY2I2YzliYTc4YmZjYTBhYTNhMDMxOWVmIGIvZnV6emVyL2NvcnB1cy80NTgwYWJkOGU4MjA5OTBiY2I2YzliYTc4YmZjYTBhYTNhMDMxOWVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYjE4OGEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ1ODBhYmQ4ZTgyMDk5MGJjYjZjOWJhNzhiZmNhMGFhM2EwMzE5ZWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NTgwZTM3MWU4ZmJkNjllNDdlMDJmYTE5ZTY3NTc4NWM1MDFjOTg5IGIvZnV6emVyL2NvcnB1cy80NTgwZTM3MWU4ZmJkNjllNDdlMDJmYTE5ZTY3NTc4NWM1MDFjOTg5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYjcxMzkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ1ODBlMzcxZThmYmQ2OWU0N2UwMmZhMTllNjc1Nzg1YzUwMWM5ODkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NTk2YjNlMTI1Mzg0ZmQ2NjE2ZmU5YTIxYzJkODRhOWU5MTQ2YjAyIGIvZnV6emVyL2NvcnB1cy80NTk2YjNlMTI1Mzg0ZmQ2NjE2ZmU5YTIxYzJkODRhOWU5MTQ2YjAyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZGE3MjgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ1OTZiM2UxMjUzODRmZDY2MTZmZTlhMjFjMmQ4NGE5ZTkxNDZiMDIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NWFkMzk1NzQ1NGI3NWM1ZmZkNGIzOGU0MmY4MzBhM2NlMmRkYjU4IGIvZnV6emVyL2NvcnB1cy80NWFkMzk1NzQ1NGI3NWM1ZmZkNGIzOGU0MmY4MzBhM2NlMmRkYjU4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0YjVlY2IKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ1YWQzOTU3NDU0Yjc1YzVmZmQ0YjM4ZTQyZjgzMGEzY2UyZGRiNTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NWIxYmIzZjdlMTdhMDQ0OWQwNjMyYzMwMTQxOTZjZTU3YWNkZjRiIGIvZnV6emVyL2NvcnB1cy80NWIxYmIzZjdlMTdhMDQ0OWQwNjMyYzMwMTQxOTZjZTU3YWNkZjRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YTgwMTMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ1YjFiYjNmN2UxN2EwNDQ5ZDA2MzJjMzAxNDE5NmNlNTdhY2RmNGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NWQzMDg2M2QzNGQwNTI1NDQ2YTkyZGExN2RiNDY0ZTA4ZjE0NzQyIGIvZnV6emVyL2NvcnB1cy80NWQzMDg2M2QzNGQwNTI1NDQ2YTkyZGExN2RiNDY0ZTA4ZjE0NzQyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YzM2YzkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ1ZDMwODYzZDM0ZDA1MjU0NDZhOTJkYTE3ZGI0NjRlMDhmMTQ3NDIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NWU1MzEzZmVlYzZlNGY3MmJiYjcxMTU3Mjk1NzE0MDI5MjJkOTMxIGIvZnV6emVyL2NvcnB1cy80NWU1MzEzZmVlYzZlNGY3MmJiYjcxMTU3Mjk1NzE0MDI5MjJkOTMxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkN2RjNGQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ1ZTUzMTNmZWVjNmU0ZjcyYmJiNzExNTcyOTU3MTQwMjkyMmQ5MzEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NWZhNmYzOTFjYTQxYzc4Y2UzNmQ0NjI2YzZiMWFjNzAxNmUzYzEzIGIvZnV6emVyL2NvcnB1cy80NWZhNmYzOTFjYTQxYzc4Y2UzNmQ0NjI2YzZiMWFjNzAxNmUzYzEzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZmE2NmMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ1ZmE2ZjM5MWNhNDFjNzhjZTM2ZDQ2MjZjNmIxYWM3MDE2ZTNjMTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NWZiODhlM2YzNTQ1ODkxZjc1ZTNlZjljMTZlM2NlNGUxZGUzMzFkIGIvZnV6emVyL2NvcnB1cy80NWZiODhlM2YzNTQ1ODkxZjc1ZTNlZjljMTZlM2NlNGUxZGUzMzFkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MzlmNjIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ1ZmI4OGUzZjM1NDU4OTFmNzVlM2VmOWMxNmUzY2U0ZTFkZTMzMWQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NjA1OGVjODYwOGFkYWQwZWNkNTQ5NWViMTllNTJjY2JmOTYwNThlIGIvZnV6emVyL2NvcnB1cy80NjA1OGVjODYwOGFkYWQwZWNkNTQ5NWViMTllNTJjY2JmOTYwNThlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5OWNmYmQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ2MDU4ZWM4NjA4YWRhZDBlY2Q1NDk1ZWIxOWU1MmNjYmY5NjA1OGUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NjI2MjliMjExYzlhMjBhZDdkMDc2YjlmZTFjOGYyMjNjMDJiOTgwIGIvZnV6emVyL2NvcnB1cy80NjI2MjliMjExYzlhMjBhZDdkMDc2YjlmZTFjOGYyMjNjMDJiOTgwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYjM4ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ2MjYyOWIyMTFjOWEyMGFkN2QwNzZiOWZlMWM4ZjIyM2MwMmI5ODAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NjM5Yjc4ZTczNGJhNDE5Mjk2NzdiNjk0OTM4MDRiOGJiYzdkMmU3IGIvZnV6emVyL2NvcnB1cy80NjM5Yjc4ZTczNGJhNDE5Mjk2NzdiNjk0OTM4MDRiOGJiYzdkMmU3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMmM4ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ2MzliNzhlNzM0YmE0MTkyOTY3N2I2OTQ5MzgwNGI4YmJjN2QyZTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NjQ4NDA3MjRmMGI2Yzg1OTBkYmMwN2VjNmM1NTkxMjQ4MzUxZWMyIGIvZnV6emVyL2NvcnB1cy80NjQ4NDA3MjRmMGI2Yzg1OTBkYmMwN2VjNmM1NTkxMjQ4MzUxZWMyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NGQxMzQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ2NDg0MDcyNGYwYjZjODU5MGRiYzA3ZWM2YzU1OTEyNDgzNTFlYzIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NjUzMDE4NjZkNTQ3Y2YwYzU4OWZjYjNlNzU3MDNjZTU5MTNkZTQ3IGIvZnV6emVyL2NvcnB1cy80NjUzMDE4NjZkNTQ3Y2YwYzU4OWZjYjNlNzU3MDNjZTU5MTNkZTQ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYTcyZDMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ2NTMwMTg2NmQ1NDdjZjBjNTg5ZmNiM2U3NTcwM2NlNTkxM2RlNDcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NmE5MTFiNTc3NmMzZWIyOGNkZmYwZDZjZDcyZGY5MjM4NzUyOGIwIGIvZnV6emVyL2NvcnB1cy80NmE5MTFiNTc3NmMzZWIyOGNkZmYwZDZjZDcyZGY5MjM4NzUyOGIwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YTQzNWQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ2YTkxMWI1Nzc2YzNlYjI4Y2RmZjBkNmNkNzJkZjkyMzg3NTI4YjAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NzAyNzg5ZmMwNDA0NjYzNmYzMmQzMjZmOTI2ZGMyOWI3ZDQwN2Y2IGIvZnV6emVyL2NvcnB1cy80NzAyNzg5ZmMwNDA0NjYzNmYzMmQzMjZmOTI2ZGMyOWI3ZDQwN2Y2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZTQ1MzYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ3MDI3ODlmYzA0MDQ2NjM2ZjMyZDMyNmY5MjZkYzI5YjdkNDA3ZjYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NzA0YTlhZTM4NGZmN2FhNzg4Mzg5ODY2MGU2NTA0YWUxZGNlYWJlIGIvZnV6emVyL2NvcnB1cy80NzA0YTlhZTM4NGZmN2FhNzg4Mzg5ODY2MGU2NTA0YWUxZGNlYWJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYTFhNDEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ3MDRhOWFlMzg0ZmY3YWE3ODgzODk4NjYwZTY1MDRhZTFkY2VhYmUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NzJiMDI5Zjc4MDVmYzg5ZTA2YmU5MTIzOWIzZmFkZDc0NjAzZTUyIGIvZnV6emVyL2NvcnB1cy80NzJiMDI5Zjc4MDVmYzg5ZTA2YmU5MTIzOWIzZmFkZDc0NjAzZTUyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYjI5MTUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ3MmIwMjlmNzgwNWZjODllMDZiZTkxMjM5YjNmYWRkNzQ2MDNlNTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NzRhYTQxYTNkMGVhYjM1MGQ3NWY3YTZiMTEyZjBjNzhjMGQwZDIxIGIvZnV6emVyL2NvcnB1cy80NzRhYTQxYTNkMGVhYjM1MGQ3NWY3YTZiMTEyZjBjNzhjMGQwZDIxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3Y2RhZmQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ3NGFhNDFhM2QwZWFiMzUwZDc1ZjdhNmIxMTJmMGM3OGMwZDBkMjEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NzVlOTY4MDExNmZhZDdlMGIzMWQzMWZmYWUyNWJhY2U3ZDBjNWMyIGIvZnV6emVyL2NvcnB1cy80NzVlOTY4MDExNmZhZDdlMGIzMWQzMWZmYWUyNWJhY2U3ZDBjNWMyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMmE2MDYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ3NWU5NjgwMTE2ZmFkN2UwYjMxZDMxZmZhZTI1YmFjZTdkMGM1YzIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NzYxYmFmNzdjMDZlZDYwZjQzY2UzNzQyYmEzZWNhNjBjZDNiYjdiIGIvZnV6emVyL2NvcnB1cy80NzYxYmFmNzdjMDZlZDYwZjQzY2UzNzQyYmEzZWNhNjBjZDNiYjdiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZmFiNGQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ3NjFiYWY3N2MwNmVkNjBmNDNjZTM3NDJiYTNlY2E2MGNkM2JiN2IKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80NzY2ZTcxMWJlMTdjMThhNGM2ZDgzOThkMmM4MzM3YzI3MGE5MGE0IGIvZnV6emVyL2NvcnB1cy80NzY2ZTcxMWJlMTdjMThhNGM2ZDgzOThkMmM4MzM3YzI3MGE5MGE0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YzBiNDAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ3NjZlNzExYmUxN2MxOGE0YzZkODM5OGQyYzgzMzdjMjcwYTkwYTQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80N2ExMjgyZWNiM2QzNTIzN2U3YzdmZDhkYzE0Mjk2OThhZjExYjM5IGIvZnV6emVyL2NvcnB1cy80N2ExMjgyZWNiM2QzNTIzN2U3YzdmZDhkYzE0Mjk2OThhZjExYjM5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1OTMwY2EKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ3YTEyODJlY2IzZDM1MjM3ZTdjN2ZkOGRjMTQyOTY5OGFmMTFiMzkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80N2NhZWQxODE5MDNjODk0NTMxZWIyZTE5YzQ0YzJkMmI3NmZkNmZkIGIvZnV6emVyL2NvcnB1cy80N2NhZWQxODE5MDNjODk0NTMxZWIyZTE5YzQ0YzJkMmI3NmZkNmZkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwN2U0NjkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ3Y2FlZDE4MTkwM2M4OTQ1MzFlYjJlMTljNDRjMmQyYjc2ZmQ2ZmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80N2Q4ZGEzMDY4MzQ1OWE4YTIwZjNiZWY5YWIyOGJlZTYyN2VlYWMxIGIvZnV6emVyL2NvcnB1cy80N2Q4ZGEzMDY4MzQ1OWE4YTIwZjNiZWY5YWIyOGJlZTYyN2VlYWMxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4OWE3MTYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ3ZDhkYTMwNjgzNDU5YThhMjBmM2JlZjlhYjI4YmVlNjI3ZWVhYzEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80ODFmZTU4YmZhNjg0ZWQzZTAxMDU5ZDJmNmI2MTNhYjBlZGY3YzE3IGIvZnV6emVyL2NvcnB1cy80ODFmZTU4YmZhNjg0ZWQzZTAxMDU5ZDJmNmI2MTNhYjBlZGY3YzE3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZGIxZjQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ4MWZlNThiZmE2ODRlZDNlMDEwNTlkMmY2YjYxM2FiMGVkZjdjMTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80ODkzNmVjNWZkY2NhNmUyZDU0MDUxZDJiNWUyOTQzZTI4OTRmMmVmIGIvZnV6emVyL2NvcnB1cy80ODkzNmVjNWZkY2NhNmUyZDU0MDUxZDJiNWUyOTQzZTI4OTRmMmVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYTBjNGEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ4OTM2ZWM1ZmRjY2E2ZTJkNTQwNTFkMmI1ZTI5NDNlMjg5NGYyZWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80ODk1NzY4ZjkyN2FjMTA1NzJkOWVkZTVkM2JkZDMwMWZmZGM4ZmY0IGIvZnV6emVyL2NvcnB1cy80ODk1NzY4ZjkyN2FjMTA1NzJkOWVkZTVkM2JkZDMwMWZmZGM4ZmY0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YTJjMDIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ4OTU3NjhmOTI3YWMxMDU3MmQ5ZWRlNWQzYmRkMzAxZmZkYzhmZjQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80OGVjOWVlMWRhMjE4ZDQ4YzA3NzkxMTQ1YTcwODJkNjE5YThlOTFlIGIvZnV6emVyL2NvcnB1cy80OGVjOWVlMWRhMjE4ZDQ4YzA3NzkxMTQ1YTcwODJkNjE5YThlOTFlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNzY1OWMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ4ZWM5ZWUxZGEyMThkNDhjMDc3OTExNDVhNzA4MmQ2MTlhOGU5MWUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80OTJjNGNjNTk5MjNkMzMyM2MzNGQ2MjA3NTVmNDlkYjA4YTEyODdiIGIvZnV6emVyL2NvcnB1cy80OTJjNGNjNTk5MjNkMzMyM2MzNGQ2MjA3NTVmNDlkYjA4YTEyODdiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYmYxZWEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ5MmM0Y2M1OTkyM2QzMzIzYzM0ZDYyMDc1NWY0OWRiMDhhMTI4N2IKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80OTJkYjY4MDg4NmE1ZjY1OTY4MDhkYTI5NGU0ZjU1NzkzYzNkNzhiIGIvZnV6emVyL2NvcnB1cy80OTJkYjY4MDg4NmE1ZjY1OTY4MDhkYTI5NGU0ZjU1NzkzYzNkNzhiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiODc4MDUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ5MmRiNjgwODg2YTVmNjU5NjgwOGRhMjk0ZTRmNTU3OTNjM2Q3OGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80OTRmODhhYWY0YjViOGFmMjY4ZDY1NDRiNDUzZWQ0NmJkNjU2ZTdkIGIvZnV6emVyL2NvcnB1cy80OTRmODhhYWY0YjViOGFmMjY4ZDY1NDRiNDUzZWQ0NmJkNjU2ZTdkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4Njk0Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ5NGY4OGFhZjRiNWI4YWYyNjhkNjU0NGI0NTNlZDQ2YmQ2NTZlN2QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80OTY2MzA5YTcwMjc3YjljNTU4OGI1NmMwY2QxNjAwMzlhMTdiM2YyIGIvZnV6emVyL2NvcnB1cy80OTY2MzA5YTcwMjc3YjljNTU4OGI1NmMwY2QxNjAwMzlhMTdiM2YyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYTEzZDgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ5NjYzMDlhNzAyNzdiOWM1NTg4YjU2YzBjZDE2MDAzOWExN2IzZjIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80OTgwOGUwZjYxNGJlMjJlZWEzMWUwNTJmMjM3NDFlMGQyOGZlMWU0IGIvZnV6emVyL2NvcnB1cy80OTgwOGUwZjYxNGJlMjJlZWEzMWUwNTJmMjM3NDFlMGQyOGZlMWU0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhZGIyMzIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ5ODA4ZTBmNjE0YmUyMmVlYTMxZTA1MmYyMzc0MWUwZDI4ZmUxZTQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80OWE1OWVlYTczN2UxMzFjYjRkNzA2YjMwODQzZDhlOGEwMjVkMmQxIGIvZnV6emVyL2NvcnB1cy80OWE1OWVlYTczN2UxMzFjYjRkNzA2YjMwODQzZDhlOGEwMjVkMmQxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZTVkM2IKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ5YTU5ZWVhNzM3ZTEzMWNiNGQ3MDZiMzA4NDNkOGU4YTAyNWQyZDEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80OWFkNjYwNjIzOGU2YTU4YWQ4ZDc5MDg4NDkyYWFlYWQ2YzMyZTZiIGIvZnV6emVyL2NvcnB1cy80OWFkNjYwNjIzOGU2YTU4YWQ4ZDc5MDg4NDkyYWFlYWQ2YzMyZTZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MTY2NWYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ5YWQ2NjA2MjM4ZTZhNThhZDhkNzkwODg0OTJhYWVhZDZjMzJlNmIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80OWI0OTg3NDEzOGFkYThiZTlmNmNlNGJlNDllZjM3ZTRmYzJjNTBhIGIvZnV6emVyL2NvcnB1cy80OWI0OTg3NDEzOGFkYThiZTlmNmNlNGJlNDllZjM3ZTRmYzJjNTBhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNzVmMTgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzQ5YjQ5ODc0MTM4YWRhOGJlOWY2Y2U0YmU0OWVmMzdlNGZjMmM1MGEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80YTBiNWVkOWI5MTg0Njg3ZjAzNTA1ODRhYmI4OWJhM2NkM2I2MjYwIGIvZnV6emVyL2NvcnB1cy80YTBiNWVkOWI5MTg0Njg3ZjAzNTA1ODRhYmI4OWJhM2NkM2I2MjYwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MTcyNDIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRhMGI1ZWQ5YjkxODQ2ODdmMDM1MDU4NGFiYjg5YmEzY2QzYjYyNjAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80YTNjOTk5MmNlYjUxNTFlMjU4NjcwNDNjZmYzYjcwYjA2MTU5NzVhIGIvZnV6emVyL2NvcnB1cy80YTNjOTk5MmNlYjUxNTFlMjU4NjcwNDNjZmYzYjcwYjA2MTU5NzVhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZTcxMGMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRhM2M5OTkyY2ViNTE1MWUyNTg2NzA0M2NmZjNiNzBiMDYxNTk3NWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80YTVkNTliOWJiZjQ1NGUyNmU1YjhkYTM1OTM0ZmJlNWU1NmNkNWUzIGIvZnV6emVyL2NvcnB1cy80YTVkNTliOWJiZjQ1NGUyNmU1YjhkYTM1OTM0ZmJlNWU1NmNkNWUzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0YTA1MWEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRhNWQ1OWI5YmJmNDU0ZTI2ZTViOGRhMzU5MzRmYmU1ZTU2Y2Q1ZTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80YTZiZjc4Y2Y4NDg3YWFmNGRjOTUwNGY1ODAyOTBjNThjZDM4NjVkIGIvZnV6emVyL2NvcnB1cy80YTZiZjc4Y2Y4NDg3YWFmNGRjOTUwNGY1ODAyOTBjNThjZDM4NjVkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZDJjZTAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRhNmJmNzhjZjg0ODdhYWY0ZGM5NTA0ZjU4MDI5MGM1OGNkMzg2NWQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80YThiNmM4MGI2NGZhOTc0YjdhNWY1MTRlYTc4MjkxYWZmNzI2N2M5IGIvZnV6emVyL2NvcnB1cy80YThiNmM4MGI2NGZhOTc0YjdhNWY1MTRlYTc4MjkxYWZmNzI2N2M5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYTFmNmQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRhOGI2YzgwYjY0ZmE5NzRiN2E1ZjUxNGVhNzgyOTFhZmY3MjY3YzkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80YWNlNjI2Y2MzZTMxMTVkZjc3ZDg1YTVjMzEzYjI0ZTNhMmQyNjk1IGIvZnV6emVyL2NvcnB1cy80YWNlNjI2Y2MzZTMxMTVkZjc3ZDg1YTVjMzEzYjI0ZTNhMmQyNjk1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNjJkZDMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRhY2U2MjZjYzNlMzExNWRmNzdkODVhNWMzMTNiMjRlM2EyZDI2OTUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80YjEwODczMWJiNDFlNjcyYWQ1Yzk4NzEzZjAyNTBlMDI2NjE2ZDJjIGIvZnV6emVyL2NvcnB1cy80YjEwODczMWJiNDFlNjcyYWQ1Yzk4NzEzZjAyNTBlMDI2NjE2ZDJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMWQ0OWYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRiMTA4NzMxYmI0MWU2NzJhZDVjOTg3MTNmMDI1MGUwMjY2MTZkMmMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80YjFlMDk1ZjNmZWM1OWIyMWQ3MWY5MzgwMGU2YjU3ZTNmNzBjZjM1IGIvZnV6emVyL2NvcnB1cy80YjFlMDk1ZjNmZWM1OWIyMWQ3MWY5MzgwMGU2YjU3ZTNmNzBjZjM1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiY2JjYzcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRiMWUwOTVmM2ZlYzU5YjIxZDcxZjkzODAwZTZiNTdlM2Y3MGNmMzUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80YjZkNjkxNGY3OGUyMmI2NDU5NzU4M2E5MjI2YmU3NTI2ZTczMzk3IGIvZnV6emVyL2NvcnB1cy80YjZkNjkxNGY3OGUyMmI2NDU5NzU4M2E5MjI2YmU3NTI2ZTczMzk3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZjgwMDYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRiNmQ2OTE0Zjc4ZTIyYjY0NTk3NTgzYTkyMjZiZTc1MjZlNzMzOTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80YjhhZmEyYjU1OTJlZjUzNDkxOTc3NmZiNDU0MzA5NjdkOTM5Nzc1IGIvZnV6emVyL2NvcnB1cy80YjhhZmEyYjU1OTJlZjUzNDkxOTc3NmZiNDU0MzA5NjdkOTM5Nzc1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNmFlOWMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRiOGFmYTJiNTU5MmVmNTM0OTE5Nzc2ZmI0NTQzMDk2N2Q5Mzk3NzUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80YjhlOGI0NTE0NDUxMjM4N2U0YzZhM2ZhNmIxMzExNzA1NjRjYTU3IGIvZnV6emVyL2NvcnB1cy80YjhlOGI0NTE0NDUxMjM4N2U0YzZhM2ZhNmIxMzExNzA1NjRjYTU3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYTdhYzMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRiOGU4YjQ1MTQ0NTEyMzg3ZTRjNmEzZmE2YjEzMTE3MDU2NGNhNTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80YjlmODM0YjQ4YjdmYzQyNTJjYmYyN2M3YTg2ZTc0MzhiMTFmZTk4IGIvZnV6emVyL2NvcnB1cy80YjlmODM0YjQ4YjdmYzQyNTJjYmYyN2M3YTg2ZTc0MzhiMTFmZTk4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYWM0MDcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRiOWY4MzRiNDhiN2ZjNDI1MmNiZjI3YzdhODZlNzQzOGIxMWZlOTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80YmIyOGFhZjMwZTI0NGM2MjcwZTMzOGYwNDBkNWYwMzI4NjgwYmU2IGIvZnV6emVyL2NvcnB1cy80YmIyOGFhZjMwZTI0NGM2MjcwZTMzOGYwNDBkNWYwMzI4NjgwYmU2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjODgwYmEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRiYjI4YWFmMzBlMjQ0YzYyNzBlMzM4ZjA0MGQ1ZjAzMjg2ODBiZTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80YmMzNWE3OWRjNjU5OWZjMGNmYmNkNzc3MTJkN2M5OGMyNTMyMjJjIGIvZnV6emVyL2NvcnB1cy80YmMzNWE3OWRjNjU5OWZjMGNmYmNkNzc3MTJkN2M5OGMyNTMyMjJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MGRmYzcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRiYzM1YTc5ZGM2NTk5ZmMwY2ZiY2Q3NzcxMmQ3Yzk4YzI1MzIyMmMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80YmYxMzhmOWViNjgxMTAwYWVhNzE1ZWExNzQzMWY3Mzc4NTc3NDNjIGIvZnV6emVyL2NvcnB1cy80YmYxMzhmOWViNjgxMTAwYWVhNzE1ZWExNzQzMWY3Mzc4NTc3NDNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYTViMmQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRiZjEzOGY5ZWI2ODExMDBhZWE3MTVlYTE3NDMxZjczNzg1Nzc0M2MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80YmY0M2NhYzkwM2I1NzI2MDk4OWU1ZmEyZmUwNjgxMmVhYmJjOTMyIGIvZnV6emVyL2NvcnB1cy80YmY0M2NhYzkwM2I1NzI2MDk4OWU1ZmEyZmUwNjgxMmVhYmJjOTMyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZTMyMTAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRiZjQzY2FjOTAzYjU3MjYwOTg5ZTVmYTJmZTA2ODEyZWFiYmM5MzIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80YmZjN2Y1NmRjZDY4MWM0Y2IwYWM3NTY0YzkyMDJlY2I5NTdjNDExIGIvZnV6emVyL2NvcnB1cy80YmZjN2Y1NmRjZDY4MWM0Y2IwYWM3NTY0YzkyMDJlY2I5NTdjNDExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZDhlZGUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRiZmM3ZjU2ZGNkNjgxYzRjYjBhYzc1NjRjOTIwMmVjYjk1N2M0MTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80YzJlZmNkMWJhM2E2YzViNDM2M2NjYmY4ZWY0YjViOWIxNzAzYTlhIGIvZnV6emVyL2NvcnB1cy80YzJlZmNkMWJhM2E2YzViNDM2M2NjYmY4ZWY0YjViOWIxNzAzYTlhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MDQ0OTIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRjMmVmY2QxYmEzYTZjNWI0MzYzY2NiZjhlZjRiNWI5YjE3MDNhOWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80YzRiMGJjMDc0OTEyZjRjN2I1NmI4ZTQxMGUxODJmMjMzNzA2MWQ1IGIvZnV6emVyL2NvcnB1cy80YzRiMGJjMDc0OTEyZjRjN2I1NmI4ZTQxMGUxODJmMjMzNzA2MWQ1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNjliMjAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRjNGIwYmMwNzQ5MTJmNGM3YjU2YjhlNDEwZTE4MmYyMzM3MDYxZDUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80YzU0MjZjMDMxZmNkNWFlYmQ2MGM1NTljY2E3OGQ3MjUyMjJiNGQxIGIvZnV6emVyL2NvcnB1cy80YzU0MjZjMDMxZmNkNWFlYmQ2MGM1NTljY2E3OGQ3MjUyMjJiNGQxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZDIyOGYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRjNTQyNmMwMzFmY2Q1YWViZDYwYzU1OWNjYTc4ZDcyNTIyMmI0ZDEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80YzYzYzUyMzI3ZTUzY2I3ZWM2OWUzMjJjM2U1ZTRkMTZkMTI3YzEzIGIvZnV6emVyL2NvcnB1cy80YzYzYzUyMzI3ZTUzY2I3ZWM2OWUzMjJjM2U1ZTRkMTZkMTI3YzEzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MGIzNzkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRjNjNjNTIzMjdlNTNjYjdlYzY5ZTMyMmMzZTVlNGQxNmQxMjdjMTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80YzZlNzNiODQ0YjcyNTg0ZDNmZDQ5NTUzZGI2MGU5YThjOGFmMjJmIGIvZnV6emVyL2NvcnB1cy80YzZlNzNiODQ0YjcyNTg0ZDNmZDQ5NTUzZGI2MGU5YThjOGFmMjJmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4Zjk0NDEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRjNmU3M2I4NDRiNzI1ODRkM2ZkNDk1NTNkYjYwZTlhOGM4YWYyMmYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80Yzg0MjZlMWM3OTE3NDExYjkxNTE2YzYwMWIxNWMzNDRjNWFkYmY2IGIvZnV6emVyL2NvcnB1cy80Yzg0MjZlMWM3OTE3NDExYjkxNTE2YzYwMWIxNWMzNDRjNWFkYmY2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyOTQ0ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRjODQyNmUxYzc5MTc0MTFiOTE1MTZjNjAxYjE1YzM0NGM1YWRiZjYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80YzhjNTE2NDk1ZDBlYmY4MmJhMmU5Y2YxM2U1MGJmMTg3MGRhZDJhIGIvZnV6emVyL2NvcnB1cy80YzhjNTE2NDk1ZDBlYmY4MmJhMmU5Y2YxM2U1MGJmMTg3MGRhZDJhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MDhkNjMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRjOGM1MTY0OTVkMGViZjgyYmEyZTljZjEzZTUwYmYxODcwZGFkMmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80YzkxYWNkODk5NmUyMjBiZDU2YmQzNWY4OGZlODU1MmMyMzNkZGNmIGIvZnV6emVyL2NvcnB1cy80YzkxYWNkODk5NmUyMjBiZDU2YmQzNWY4OGZlODU1MmMyMzNkZGNmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMjFiOTYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRjOTFhY2Q4OTk2ZTIyMGJkNTZiZDM1Zjg4ZmU4NTUyYzIzM2RkY2YKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80Y2FmNjExNTg3ZTk0OWIxMWQyODczYTI2ZWQwOWI5NDgyYjNmODkzIGIvZnV6emVyL2NvcnB1cy80Y2FmNjExNTg3ZTk0OWIxMWQyODczYTI2ZWQwOWI5NDgyYjNmODkzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMDM0NzkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRjYWY2MTE1ODdlOTQ5YjExZDI4NzNhMjZlZDA5Yjk0ODJiM2Y4OTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80Y2Q2ZjFlNDRiODE0ZDc0YmM1NjI4YTA5NzczNjI5NWY3ZGI0NWIyIGIvZnV6emVyL2NvcnB1cy80Y2Q2ZjFlNDRiODE0ZDc0YmM1NjI4YTA5NzczNjI5NWY3ZGI0NWIyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZDkyNzEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRjZDZmMWU0NGI4MTRkNzRiYzU2MjhhMDk3NzM2Mjk1ZjdkYjQ1YjIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80Y2VlNGYzZDJkNWNkY2EyNjczNDBmNjJhYmE2OTZkMmUyYjhmYmM0IGIvZnV6emVyL2NvcnB1cy80Y2VlNGYzZDJkNWNkY2EyNjczNDBmNjJhYmE2OTZkMmUyYjhmYmM0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZmU0NjQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRjZWU0ZjNkMmQ1Y2RjYTI2NzM0MGY2MmFiYTY5NmQyZTJiOGZiYzQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80Y2VlNWU0ZTlmOTFiYmI3Mzc4ZjgzZGE4N2UzY2JjZGMxOThhNzkwIGIvZnV6emVyL2NvcnB1cy80Y2VlNWU0ZTlmOTFiYmI3Mzc4ZjgzZGE4N2UzY2JjZGMxOThhNzkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZTZhZTYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRjZWU1ZTRlOWY5MWJiYjczNzhmODNkYTg3ZTNjYmNkYzE5OGE3OTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80Y2VlYjkyNDU5YTgyY2U0YTYwNDVkZDUyZjdhOTUyM2YzOGFlYTgwIGIvZnV6emVyL2NvcnB1cy80Y2VlYjkyNDU5YTgyY2U0YTYwNDVkZDUyZjdhOTUyM2YzOGFlYTgwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NWI2M2UKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRjZWViOTI0NTlhODJjZTRhNjA0NWRkNTJmN2E5NTIzZjM4YWVhODAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80ZDA1NGU3MTBmNTFiOGM5N2M3YTIyY2QxYWFjODQ4YWEyMDA2NjEyIGIvZnV6emVyL2NvcnB1cy80ZDA1NGU3MTBmNTFiOGM5N2M3YTIyY2QxYWFjODQ4YWEyMDA2NjEyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYzU1ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRkMDU0ZTcxMGY1MWI4Yzk3YzdhMjJjZDFhYWM4NDhhYTIwMDY2MTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80ZDFjNDc3NTM0YzQyNjQxYzliMGI5YTQ5ZjZjMDU3ZTFjZGU3ZGI0IGIvZnV6emVyL2NvcnB1cy80ZDFjNDc3NTM0YzQyNjQxYzliMGI5YTQ5ZjZjMDU3ZTFjZGU3ZGI0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMzA3NmUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRkMWM0Nzc1MzRjNDI2NDFjOWIwYjlhNDlmNmMwNTdlMWNkZTdkYjQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80ZDQ5NTQxZjY3YzEzNGQ5MmEyNzAzZmMxZTM2MzdhMzViZTgxMzViIGIvZnV6emVyL2NvcnB1cy80ZDQ5NTQxZjY3YzEzNGQ5MmEyNzAzZmMxZTM2MzdhMzViZTgxMzViCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMWY2YTMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRkNDk1NDFmNjdjMTM0ZDkyYTI3MDNmYzFlMzYzN2EzNWJlODEzNWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80ZGFlMzQ3MzRhOWUxZjE5Mzc4YjgzNDQxMTBiNTgzZWU0MGY0ZTgzIGIvZnV6emVyL2NvcnB1cy80ZGFlMzQ3MzRhOWUxZjE5Mzc4YjgzNDQxMTBiNTgzZWU0MGY0ZTgzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwODAyMjkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRkYWUzNDczNGE5ZTFmMTkzNzhiODM0NDExMGI1ODNlZTQwZjRlODMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80ZGMzMTQxMDRmYmNkZDFlMDViODFkOGE3NmRiMTQ1MTIxYjFiNDY0IGIvZnV6emVyL2NvcnB1cy80ZGMzMTQxMDRmYmNkZDFlMDViODFkOGE3NmRiMTQ1MTIxYjFiNDY0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5Njg0Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRkYzMxNDEwNGZiY2RkMWUwNWI4MWQ4YTc2ZGIxNDUxMjFiMWI0NjQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80ZTE5MmEzNDcwOWM0MWVjMGZmODk5NTJkMjlkNzcxNDM1NjNmM2YxIGIvZnV6emVyL2NvcnB1cy80ZTE5MmEzNDcwOWM0MWVjMGZmODk5NTJkMjlkNzcxNDM1NjNmM2YxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZjQwYmIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRlMTkyYTM0NzA5YzQxZWMwZmY4OTk1MmQyOWQ3NzE0MzU2M2YzZjEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80ZTg3MjkyYzIyOGY4NzM4Y2JiYTZlMDhlNzMwOWFhN2JlNzkwM2U1IGIvZnV6emVyL2NvcnB1cy80ZTg3MjkyYzIyOGY4NzM4Y2JiYTZlMDhlNzMwOWFhN2JlNzkwM2U1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZTI5MGEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRlODcyOTJjMjI4Zjg3MzhjYmJhNmUwOGU3MzA5YWE3YmU3OTAzZTUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80ZTkxMDg0YTU3MjQxYjBhNzlhMWUxMDE3ZTQ2OTYzNTI4NWM4ZmQ2IGIvZnV6emVyL2NvcnB1cy80ZTkxMDg0YTU3MjQxYjBhNzlhMWUxMDE3ZTQ2OTYzNTI4NWM4ZmQ2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNmEzNjkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRlOTEwODRhNTcyNDFiMGE3OWExZTEwMTdlNDY5NjM1Mjg1YzhmZDYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80ZWIxM2FhYjZkMTEwYmEwMzFjZjU4NTc5YTNhYTY1ZDE5NmExNzdkIGIvZnV6emVyL2NvcnB1cy80ZWIxM2FhYjZkMTEwYmEwMzFjZjU4NTc5YTNhYTY1ZDE5NmExNzdkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMTVkMmEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRlYjEzYWFiNmQxMTBiYTAzMWNmNTg1NzlhM2FhNjVkMTk2YTE3N2QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80ZjBkMmRlZDJlYTFmYjA5Mzk5ZDViYWY4ZDA0MjZmZWY1ZWU5MzJhIGIvZnV6emVyL2NvcnB1cy80ZjBkMmRlZDJlYTFmYjA5Mzk5ZDViYWY4ZDA0MjZmZWY1ZWU5MzJhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhYWMzZmYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRmMGQyZGVkMmVhMWZiMDkzOTlkNWJhZjhkMDQyNmZlZjVlZTkzMmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80ZjBlM2Y4M2M5ODFiYTdiNzUzMzQwZDIzZjdmNTU0M2RkYjM2ZWU1IGIvZnV6emVyL2NvcnB1cy80ZjBlM2Y4M2M5ODFiYTdiNzUzMzQwZDIzZjdmNTU0M2RkYjM2ZWU1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZGVkNWUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRmMGUzZjgzYzk4MWJhN2I3NTMzNDBkMjNmN2Y1NTQzZGRiMzZlZTUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80ZjMxMDAwZjUxMDFmMDE2OGUwMWEzYzBmOThkNWJjYjEyMzAwZTY2IGIvZnV6emVyL2NvcnB1cy80ZjMxMDAwZjUxMDFmMDE2OGUwMWEzYzBmOThkNWJjYjEyMzAwZTY2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMTUyMTMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRmMzEwMDBmNTEwMWYwMTY4ZTAxYTNjMGY5OGQ1YmNiMTIzMDBlNjYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80ZjUwMjExNjhlMDYzYzM2N2EzMmJhODIzMDRjMDlmZDgxNDQwNjVlIGIvZnV6emVyL2NvcnB1cy80ZjUwMjExNjhlMDYzYzM2N2EzMmJhODIzMDRjMDlmZDgxNDQwNjVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMmQyMjMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRmNTAyMTE2OGUwNjNjMzY3YTMyYmE4MjMwNGMwOWZkODE0NDA2NWUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80ZjUxNmYwNDhjZjU3YmMyN2FiZGE3NGQ1ZWQ3ZWQ4NWVhNDM4MDZkIGIvZnV6emVyL2NvcnB1cy80ZjUxNmYwNDhjZjU3YmMyN2FiZGE3NGQ1ZWQ3ZWQ4NWVhNDM4MDZkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYTM1MzgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRmNTE2ZjA0OGNmNTdiYzI3YWJkYTc0ZDVlZDdlZDg1ZWE0MzgwNmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80ZjZjMGQ4Y2MxMmI1MGUzNWIwMDA3ZDZkMjRhNzMyMGMyMmM5MmU3IGIvZnV6emVyL2NvcnB1cy80ZjZjMGQ4Y2MxMmI1MGUzNWIwMDA3ZDZkMjRhNzMyMGMyMmM5MmU3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNWQzYzcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRmNmMwZDhjYzEyYjUwZTM1YjAwMDdkNmQyNGE3MzIwYzIyYzkyZTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80ZmE4YjI3YTMwOTY0MWYyMDZlMTQ5YjEzNzk4OGVmOTJiNTdhZjE1IGIvZnV6emVyL2NvcnB1cy80ZmE4YjI3YTMwOTY0MWYyMDZlMTQ5YjEzNzk4OGVmOTJiNTdhZjE1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNjg3MzgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRmYThiMjdhMzA5NjQxZjIwNmUxNDliMTM3OTg4ZWY5MmI1N2FmMTUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80ZmI4ODdhYzNiNWJlYjVjZWIyNTJlNDIxMzRmMDY0ZmJjNjQ1MjM0IGIvZnV6emVyL2NvcnB1cy80ZmI4ODdhYzNiNWJlYjVjZWIyNTJlNDIxMzRmMDY0ZmJjNjQ1MjM0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5Y2I2ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRmYjg4N2FjM2I1YmViNWNlYjI1MmU0MjEzNGYwNjRmYmM2NDUyMzQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80ZmI4YWNjZDJkOTc2NjYxZjYzZmQyNjE0MGEzZjZiODI5MzRhMjUzIGIvZnV6emVyL2NvcnB1cy80ZmI4YWNjZDJkOTc2NjYxZjYzZmQyNjE0MGEzZjZiODI5MzRhMjUzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMzdjOWYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRmYjhhY2NkMmQ5NzY2NjFmNjNmZDI2MTQwYTNmNmI4MjkzNGEyNTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80ZmJhMzAyZTVhYjAwMDZjNzliYzE4N2Y0MTRjMWYyNTA4YzIxYmNjIGIvZnV6emVyL2NvcnB1cy80ZmJhMzAyZTVhYjAwMDZjNzliYzE4N2Y0MTRjMWYyNTA4YzIxYmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhM2FjNjEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRmYmEzMDJlNWFiMDAwNmM3OWJjMTg3ZjQxNGMxZjI1MDhjMjFiY2MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80ZmMwNTFhMTljZWJjZTBhOWZhNDZmZDMwODZkMjk2ZDFjZTRmNzY4IGIvZnV6emVyL2NvcnB1cy80ZmMwNTFhMTljZWJjZTBhOWZhNDZmZDMwODZkMjk2ZDFjZTRmNzY4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MmZkYjEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRmYzA1MWExOWNlYmNlMGE5ZmE0NmZkMzA4NmQyOTZkMWNlNGY3NjgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80ZmMwYzk3MTI2ZDIwMTczNTM1YTkzMzcyMTUyYjhjY2MzNTM5MjNiIGIvZnV6emVyL2NvcnB1cy80ZmMwYzk3MTI2ZDIwMTczNTM1YTkzMzcyMTUyYjhjY2MzNTM5MjNiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNzg5N2EKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRmYzBjOTcxMjZkMjAxNzM1MzVhOTMzNzIxNTJiOGNjYzM1MzkyM2IKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy80ZmZhODc5NjMwMTM2ZTU5Y2M1MmMxYmRmOTgzZGM4MjYyN2E2YWI1IGIvZnV6emVyL2NvcnB1cy80ZmZhODc5NjMwMTM2ZTU5Y2M1MmMxYmRmOTgzZGM4MjYyN2E2YWI1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZGE0MWYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzRmZmE4Nzk2MzAxMzZlNTljYzUyYzFiZGY5ODNkYzgyNjI3YTZhYjUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81MDNmYTg1MWQ1YmZlNDBmNWEzMGFkNTljMjYxMTg3OTBjYWQ1ZTAxIGIvZnV6emVyL2NvcnB1cy81MDNmYTg1MWQ1YmZlNDBmNWEzMGFkNTljMjYxMTg3OTBjYWQ1ZTAxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYzkxN2EKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzUwM2ZhODUxZDViZmU0MGY1YTMwYWQ1OWMyNjExODc5MGNhZDVlMDEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81MDY2MTY2YWIxMTk2ZGE1MTIyNmI5YzEzMmE2ZjBjN2MxY2JlMjJiIGIvZnV6emVyL2NvcnB1cy81MDY2MTY2YWIxMTk2ZGE1MTIyNmI5YzEzMmE2ZjBjN2MxY2JlMjJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNDJiODMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzUwNjYxNjZhYjExOTZkYTUxMjI2YjljMTMyYTZmMGM3YzFjYmUyMmIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81MDcwMjFhMzE3NWNhZGQ2Njk3MGJhMDcwYTI5ODc4ZWQ2NTIwZjIzIGIvZnV6emVyL2NvcnB1cy81MDcwMjFhMzE3NWNhZGQ2Njk3MGJhMDcwYTI5ODc4ZWQ2NTIwZjIzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMTQzZDQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzUwNzAyMWEzMTc1Y2FkZDY2OTcwYmEwNzBhMjk4NzhlZDY1MjBmMjMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81MGJkMzFmOGE0MWM1YzcwNTU5NDExMmI5MzI5YjZlYzNlYWI2ZjEwIGIvZnV6emVyL2NvcnB1cy81MGJkMzFmOGE0MWM1YzcwNTU5NDExMmI5MzI5YjZlYzNlYWI2ZjEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlOWExMjkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzUwYmQzMWY4YTQxYzVjNzA1NTk0MTEyYjkzMjliNmVjM2VhYjZmMTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81MGMxNTI4MjdlNjc1NzNhMDJkZWI5ZDlhMzAzMjllMmQ1NWZiNzRkIGIvZnV6emVyL2NvcnB1cy81MGMxNTI4MjdlNjc1NzNhMDJkZWI5ZDlhMzAzMjllMmQ1NWZiNzRkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNjNlZGUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzUwYzE1MjgyN2U2NzU3M2EwMmRlYjlkOWEzMDMyOWUyZDU1ZmI3NGQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81MGYzOTdkNTg0OTY1Y2NkZjVhYjcwYTZiZDc1YmY3NDBmN2EzNThlIGIvZnV6emVyL2NvcnB1cy81MGYzOTdkNTg0OTY1Y2NkZjVhYjcwYTZiZDc1YmY3NDBmN2EzNThlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZjljY2UKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzUwZjM5N2Q1ODQ5NjVjY2RmNWFiNzBhNmJkNzViZjc0MGY3YTM1OGUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81MThlMmIyN2RiNjEyN2QyNGQyYzA2NjM2YjlmYjE0NWRiNDQ1MmViIGIvZnV6emVyL2NvcnB1cy81MThlMmIyN2RiNjEyN2QyNGQyYzA2NjM2YjlmYjE0NWRiNDQ1MmViCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZDAxNGUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzUxOGUyYjI3ZGI2MTI3ZDI0ZDJjMDY2MzZiOWZiMTQ1ZGI0NDUyZWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81MTkxYTAzNTdhMzM1OGRkMzI5MGY2MWNkZGNkNTYzMDIxNTA1MDEyIGIvZnV6emVyL2NvcnB1cy81MTkxYTAzNTdhMzM1OGRkMzI5MGY2MWNkZGNkNTYzMDIxNTA1MDEyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NTMxZDQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzUxOTFhMDM1N2EzMzU4ZGQzMjkwZjYxY2RkY2Q1NjMwMjE1MDUwMTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81MWM0Yjc3MzI4NTJjMDcwOWIwNDM4YTBmMzc3MTdjZDc0OTliMjRkIGIvZnV6emVyL2NvcnB1cy81MWM0Yjc3MzI4NTJjMDcwOWIwNDM4YTBmMzc3MTdjZDc0OTliMjRkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZGY5N2YKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzUxYzRiNzczMjg1MmMwNzA5YjA0MzhhMGYzNzcxN2NkNzQ5OWIyNGQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81MWNhMmQzMTQ2M2M0NzNiM2FiYWMwZTI3NWUzZmRiY2ZhMzJiYzg1IGIvZnV6emVyL2NvcnB1cy81MWNhMmQzMTQ2M2M0NzNiM2FiYWMwZTI3NWUzZmRiY2ZhMzJiYzg1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YjQzNzIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzUxY2EyZDMxNDYzYzQ3M2IzYWJhYzBlMjc1ZTNmZGJjZmEzMmJjODUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81MWU1MmE4MDVkY2Y2Nzc0YWZlM2M0ODc2ZjU0MDM0ZjMyYWFlNDk1IGIvZnV6emVyL2NvcnB1cy81MWU1MmE4MDVkY2Y2Nzc0YWZlM2M0ODc2ZjU0MDM0ZjMyYWFlNDk1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZGUzYjYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzUxZTUyYTgwNWRjZjY3NzRhZmUzYzQ4NzZmNTQwMzRmMzJhYWU0OTUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81MWU1YWVmYjEzODQwYjM0ZGIyYTg3NjEyM2Y1NmYzZDI4MTBjYzhkIGIvZnV6emVyL2NvcnB1cy81MWU1YWVmYjEzODQwYjM0ZGIyYTg3NjEyM2Y1NmYzZDI4MTBjYzhkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMzExNWMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzUxZTVhZWZiMTM4NDBiMzRkYjJhODc2MTIzZjU2ZjNkMjgxMGNjOGQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81MjBiODJmZmRjZTk2NDNhZjQxZmI0MTEzYWU3NmExMjFmNmEzM2ExIGIvZnV6emVyL2NvcnB1cy81MjBiODJmZmRjZTk2NDNhZjQxZmI0MTEzYWU3NmExMjFmNmEzM2ExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNTVlZmMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzUyMGI4MmZmZGNlOTY0M2FmNDFmYjQxMTNhZTc2YTEyMWY2YTMzYTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81MjIyOGQwMjkxYzhiYTRhMGY5NzQ5ZGQ5YTgwMzM2MmQ2YWQwZWZhIGIvZnV6emVyL2NvcnB1cy81MjIyOGQwMjkxYzhiYTRhMGY5NzQ5ZGQ5YTgwMzM2MmQ2YWQwZWZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OWRiZTMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzUyMjI4ZDAyOTFjOGJhNGEwZjk3NDlkZDlhODAzMzYyZDZhZDBlZmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81MjM5ODU4ODZmMDlhNjYzOTU2MTZmMGZjMjhmNjhlNmNlYTBlMzhmIGIvZnV6emVyL2NvcnB1cy81MjM5ODU4ODZmMDlhNjYzOTU2MTZmMGZjMjhmNjhlNmNlYTBlMzhmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMThkZWEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzUyMzk4NTg4NmYwOWE2NjM5NTYxNmYwZmMyOGY2OGU2Y2VhMGUzOGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81MjZmMTU2NGNjMGVhMGExOWNhNzhkOTMyNGM4NjM4ZmY3MjQ3N2U5IGIvZnV6emVyL2NvcnB1cy81MjZmMTU2NGNjMGVhMGExOWNhNzhkOTMyNGM4NjM4ZmY3MjQ3N2U5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMTI0MzYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzUyNmYxNTY0Y2MwZWEwYTE5Y2E3OGQ5MzI0Yzg2MzhmZjcyNDc3ZTkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81MzJjMzZiOTc5YWY4YjEwMDNmZmJlMTI0ZjRmMWUxZGNhMjEyNTE2IGIvZnV6emVyL2NvcnB1cy81MzJjMzZiOTc5YWY4YjEwMDNmZmJlMTI0ZjRmMWUxZGNhMjEyNTE2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYjA4MDMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzUzMmMzNmI5NzlhZjhiMTAwM2ZmYmUxMjRmNGYxZTFkY2EyMTI1MTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81M2I2MjE2NGFlMTFmZDNjNDVlMjA2MmQ5ODA2YzZiYjUxYTliYmVlIGIvZnV6emVyL2NvcnB1cy81M2I2MjE2NGFlMTFmZDNjNDVlMjA2MmQ5ODA2YzZiYjUxYTliYmVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MDAxOTkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzUzYjYyMTY0YWUxMWZkM2M0NWUyMDYyZDk4MDZjNmJiNTFhOWJiZWUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81M2ZmZWIwNzkxZjgxMTFjYmY2YzEyODBhMmY4ODE1YjY2ZDM3YTk2IGIvZnV6emVyL2NvcnB1cy81M2ZmZWIwNzkxZjgxMTFjYmY2YzEyODBhMmY4ODE1YjY2ZDM3YTk2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYTk4ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzUzZmZlYjA3OTFmODExMWNiZjZjMTI4MGEyZjg4MTViNjZkMzdhOTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81NDI4NmRjNThlMzRiMTM2YjM1OGJmMzU5Mzg4MmVkNzhhMWI5OWU3IGIvZnV6emVyL2NvcnB1cy81NDI4NmRjNThlMzRiMTM2YjM1OGJmMzU5Mzg4MmVkNzhhMWI5OWU3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZGZlNzYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU0Mjg2ZGM1OGUzNGIxMzZiMzU4YmYzNTkzODgyZWQ3OGExYjk5ZTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81NDU1M2FlZDliYzZmMjQyN2FlY2YxYjdmYzU0Nzg5OGNjMjEyMzBiIGIvZnV6emVyL2NvcnB1cy81NDU1M2FlZDliYzZmMjQyN2FlY2YxYjdmYzU0Nzg5OGNjMjEyMzBiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZGFjNTAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU0NTUzYWVkOWJjNmYyNDI3YWVjZjFiN2ZjNTQ3ODk4Y2MyMTIzMGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81NDU2ZTQ4MWQzMzkyODU5MGY2MTUxZTM0NjkzY2IxY2M0OTdjMmQyIGIvZnV6emVyL2NvcnB1cy81NDU2ZTQ4MWQzMzkyODU5MGY2MTUxZTM0NjkzY2IxY2M0OTdjMmQyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZTBjY2YKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU0NTZlNDgxZDMzOTI4NTkwZjYxNTFlMzQ2OTNjYjFjYzQ5N2MyZDIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81NDdkYzNlYmRkODc3NjI4MWY5OTZiZmNiM2U5ZjY5YWQ5Nzk3NGQ2IGIvZnV6emVyL2NvcnB1cy81NDdkYzNlYmRkODc3NjI4MWY5OTZiZmNiM2U5ZjY5YWQ5Nzk3NGQ2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NTQ3YmUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU0N2RjM2ViZGQ4Nzc2MjgxZjk5NmJmY2IzZTlmNjlhZDk3OTc0ZDYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81NDlmOTc3M2I5YmM3ZWNjMGIwYmE3ZjI2YzBiZGQ4ZDNiMGFiZjU0IGIvZnV6emVyL2NvcnB1cy81NDlmOTc3M2I5YmM3ZWNjMGIwYmE3ZjI2YzBiZGQ4ZDNiMGFiZjU0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNjY0ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU0OWY5NzczYjliYzdlY2MwYjBiYTdmMjZjMGJkZDhkM2IwYWJmNTQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81NGI2Njk1YjgwOGU1YmY2NTY1YjI5MzliM2JhNmIyMTIzMjM0YTZkIGIvZnV6emVyL2NvcnB1cy81NGI2Njk1YjgwOGU1YmY2NTY1YjI5MzliM2JhNmIyMTIzMjM0YTZkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NmEzODMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU0YjY2OTViODA4ZTViZjY1NjViMjkzOWIzYmE2YjIxMjMyMzRhNmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81NGI4MTNhMjRlMDFlODM1N2M0M2Y1Mjc1YWE4ZjViOWJkOGIwNmQ1IGIvZnV6emVyL2NvcnB1cy81NGI4MTNhMjRlMDFlODM1N2M0M2Y1Mjc1YWE4ZjViOWJkOGIwNmQ1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NzdjNGYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU0YjgxM2EyNGUwMWU4MzU3YzQzZjUyNzVhYThmNWI5YmQ4YjA2ZDUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81NGM2YjBmZjk3ZmRmNDUyMTE0ZjkzNTliNGQ4YTA3Y2VlMTBhMGY0IGIvZnV6emVyL2NvcnB1cy81NGM2YjBmZjk3ZmRmNDUyMTE0ZjkzNTliNGQ4YTA3Y2VlMTBhMGY0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MjBhZWQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU0YzZiMGZmOTdmZGY0NTIxMTRmOTM1OWI0ZDhhMDdjZWUxMGEwZjQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81NGM3NjdmNzUyZDViODQ1ZjI5MDYyMDEyZGQzMGM1OGY5MGViMTcwIGIvZnV6emVyL2NvcnB1cy81NGM3NjdmNzUyZDViODQ1ZjI5MDYyMDEyZGQzMGM1OGY5MGViMTcwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MGZhN2YKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU0Yzc2N2Y3NTJkNWI4NDVmMjkwNjIwMTJkZDMwYzU4ZjkwZWIxNzAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81NGVhYmNkZjI0YmFkM2Q4MDI5MjAzYTc1NDk4OGRlZjlkMmY0ZDhmIGIvZnV6emVyL2NvcnB1cy81NGVhYmNkZjI0YmFkM2Q4MDI5MjAzYTc1NDk4OGRlZjlkMmY0ZDhmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2M2Y3ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU0ZWFiY2RmMjRiYWQzZDgwMjkyMDNhNzU0OTg4ZGVmOWQyZjRkOGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81NTAyMmJkZWEwNGJlZjBkNDc3MGYyNDk2YzlkYmIwYzBjOGQ5MmM4IGIvZnV6emVyL2NvcnB1cy81NTAyMmJkZWEwNGJlZjBkNDc3MGYyNDk2YzlkYmIwYzBjOGQ5MmM4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhN2Q3YTkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU1MDIyYmRlYTA0YmVmMGQ0NzcwZjI0OTZjOWRiYjBjMGM4ZDkyYzgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81NTIwZTAyMzFhOTAyNjI2OGU3MzczOWY1MDA2YzNhN2EzNjA1NzAxIGIvZnV6emVyL2NvcnB1cy81NTIwZTAyMzFhOTAyNjI2OGU3MzczOWY1MDA2YzNhN2EzNjA1NzAxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MGUzMDQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU1MjBlMDIzMWE5MDI2MjY4ZTczNzM5ZjUwMDZjM2E3YTM2MDU3MDEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81NTM0MDJhMmEzMTliYTZjODNiZjYwMmY5OTNiNzcyOGI1YjAwMjczIGIvZnV6emVyL2NvcnB1cy81NTM0MDJhMmEzMTliYTZjODNiZjYwMmY5OTNiNzcyOGI1YjAwMjczCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NzQzOTYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU1MzQwMmEyYTMxOWJhNmM4M2JmNjAyZjk5M2I3NzI4YjViMDAyNzMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81NTQ4ODRjZTk2MWE4MjYwOGNjMTQ2NzlmYThmOTNkZmEzNzA3YmNhIGIvZnV6emVyL2NvcnB1cy81NTQ4ODRjZTk2MWE4MjYwOGNjMTQ2NzlmYThmOTNkZmEzNzA3YmNhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMWY0MWQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU1NDg4NGNlOTYxYTgyNjA4Y2MxNDY3OWZhOGY5M2RmYTM3MDdiY2EKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81NThkNTllYmExYmVlNjMzMzJmYTc4N2FkMzFhNjYwMzBhYzg5MGJjIGIvZnV6emVyL2NvcnB1cy81NThkNTllYmExYmVlNjMzMzJmYTc4N2FkMzFhNjYwMzBhYzg5MGJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyOGIwYTkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU1OGQ1OWViYTFiZWU2MzMzMmZhNzg3YWQzMWE2NjAzMGFjODkwYmMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81NWQxMDVkYWNlODVlMDJjYjk1ZWNiOWUxYzhkYzc4YjNhY2U4YmI1IGIvZnV6emVyL2NvcnB1cy81NWQxMDVkYWNlODVlMDJjYjk1ZWNiOWUxYzhkYzc4YjNhY2U4YmI1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZDIwZDEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU1ZDEwNWRhY2U4NWUwMmNiOTVlY2I5ZTFjOGRjNzhiM2FjZThiYjUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81NWRjMWUzOGE0ZmRiMWIxYWVmNzFiNjVhMDg1MjMzNzYxNzFkOGViIGIvZnV6emVyL2NvcnB1cy81NWRjMWUzOGE0ZmRiMWIxYWVmNzFiNjVhMDg1MjMzNzYxNzFkOGViCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYjc4MzQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU1ZGMxZTM4YTRmZGIxYjFhZWY3MWI2NWEwODUyMzM3NjE3MWQ4ZWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81NWY1NTkyYjhjNjgwNmExZWY5ZjhjNDM4Y2EwNmUzZjMwYjVlMWYzIGIvZnV6emVyL2NvcnB1cy81NWY1NTkyYjhjNjgwNmExZWY5ZjhjNDM4Y2EwNmUzZjMwYjVlMWYzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMzU3YzMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU1ZjU1OTJiOGM2ODA2YTFlZjlmOGM0MzhjYTA2ZTNmMzBiNWUxZjMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81NjAzZGE4N2JhMDNiMTM2Njc1MDE2MzhhMWQ5Nzg4MDM2YzQ2MzRjIGIvZnV6emVyL2NvcnB1cy81NjAzZGE4N2JhMDNiMTM2Njc1MDE2MzhhMWQ5Nzg4MDM2YzQ2MzRjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NTU0MWMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU2MDNkYTg3YmEwM2IxMzY2NzUwMTYzOGExZDk3ODgwMzZjNDYzNGMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81NjJlYmJlODEyNmQ0MzQ0ZGE5MGQzNWM3MjQ5Mjk0YjUyZDRhNmFlIGIvZnV6emVyL2NvcnB1cy81NjJlYmJlODEyNmQ0MzQ0ZGE5MGQzNWM3MjQ5Mjk0YjUyZDRhNmFlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjYWQyNjYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU2MmViYmU4MTI2ZDQzNDRkYTkwZDM1YzcyNDkyOTRiNTJkNGE2YWUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81NjNhOTQ3NWI1YjQ0OWZkNjI2MzRmMWRmNWJiM2UwMDkwN2JlOTI1IGIvZnV6emVyL2NvcnB1cy81NjNhOTQ3NWI1YjQ0OWZkNjI2MzRmMWRmNWJiM2UwMDkwN2JlOTI1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZTM2ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU2M2E5NDc1YjViNDQ5ZmQ2MjYzNGYxZGY1YmIzZTAwOTA3YmU5MjUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81NjZjYjRkMzFhNmZjYzMwYzkwZjk4YzA4YWZkMWRjZTg4NDY0OWNjIGIvZnV6emVyL2NvcnB1cy81NjZjYjRkMzFhNmZjYzMwYzkwZjk4YzA4YWZkMWRjZTg4NDY0OWNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MWUwOGEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU2NmNiNGQzMWE2ZmNjMzBjOTBmOThjMDhhZmQxZGNlODg0NjQ5Y2MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81NmQ4ZmIzZDI5ZjA1NWRkYWUxNmI4MjljYjA5NGJiMGVkNzU0YTE4IGIvZnV6emVyL2NvcnB1cy81NmQ4ZmIzZDI5ZjA1NWRkYWUxNmI4MjljYjA5NGJiMGVkNzU0YTE4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YzVmNDIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU2ZDhmYjNkMjlmMDU1ZGRhZTE2YjgyOWNiMDk0YmIwZWQ3NTRhMTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81NzQxOTVmNGM1NjM1N2Q2ZTNhYjJjNjg4YWNlOWY3YzU1MjY4NzJkIGIvZnV6emVyL2NvcnB1cy81NzQxOTVmNGM1NjM1N2Q2ZTNhYjJjNjg4YWNlOWY3YzU1MjY4NzJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxY2MxMzAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU3NDE5NWY0YzU2MzU3ZDZlM2FiMmM2ODhhY2U5ZjdjNTUyNjg3MmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81NzQ3NTRhMTA3NTU0ZTU0MTI4YTg4NmFlNGVlNDZlOGRmNTI3ODI3IGIvZnV6emVyL2NvcnB1cy81NzQ3NTRhMTA3NTU0ZTU0MTI4YTg4NmFlNGVlNDZlOGRmNTI3ODI3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMDFjZDAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU3NDc1NGExMDc1NTRlNTQxMjhhODg2YWU0ZWU0NmU4ZGY1Mjc4MjcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81NzU0ZDE0ZDgwM2Y5MjY4ZjZjYmI2Y2YzMDVkMGU4ZGNjMmJmNGUwIGIvZnV6emVyL2NvcnB1cy81NzU0ZDE0ZDgwM2Y5MjY4ZjZjYmI2Y2YzMDVkMGU4ZGNjMmJmNGUwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMzQ2ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU3NTRkMTRkODAzZjkyNjhmNmNiYjZjZjMwNWQwZThkY2MyYmY0ZTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81N2RlNTM4MGRiNDkwMDJiNWY1ODFiMzE4Y2EzMzdmN2M2YmE3YjBkIGIvZnV6emVyL2NvcnB1cy81N2RlNTM4MGRiNDkwMDJiNWY1ODFiMzE4Y2EzMzdmN2M2YmE3YjBkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MTA2MzkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU3ZGU1MzgwZGI0OTAwMmI1ZjU4MWIzMThjYTMzN2Y3YzZiYTdiMGQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81N2UwMGRkY2Q2MjM2ZjJjMjgyYjFiNTdkOGQ2N2IzZmQ0YTI4ZWIxIGIvZnV6emVyL2NvcnB1cy81N2UwMGRkY2Q2MjM2ZjJjMjgyYjFiNTdkOGQ2N2IzZmQ0YTI4ZWIxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMDQ4N2UKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU3ZTAwZGRjZDYyMzZmMmMyODJiMWI1N2Q4ZDY3YjNmZDRhMjhlYjEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81N2U1N2RlYmY0ZGUzODUwZjc0N2Y5ODViZWQ5Nzg0MTI0MDQ3YzBkIGIvZnV6emVyL2NvcnB1cy81N2U1N2RlYmY0ZGUzODUwZjc0N2Y5ODViZWQ5Nzg0MTI0MDQ3YzBkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNmNlNzMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU3ZTU3ZGViZjRkZTM4NTBmNzQ3Zjk4NWJlZDk3ODQxMjQwNDdjMGQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ODNiNWY0N2Y0YWFmMDYxMWZiMGQzYzUxMDM2YTUzOWUyZTRhNjI5IGIvZnV6emVyL2NvcnB1cy81ODNiNWY0N2Y0YWFmMDYxMWZiMGQzYzUxMDM2YTUzOWUyZTRhNjI5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZTdhZDMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU4M2I1ZjQ3ZjRhYWYwNjExZmIwZDNjNTEwMzZhNTM5ZTJlNGE2MjkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ODc3ZWQ1MDNlYjgzODljODFiYzA2OTJlMjM2MmY5NzljMWViMDc1IGIvZnV6emVyL2NvcnB1cy81ODc3ZWQ1MDNlYjgzODljODFiYzA2OTJlMjM2MmY5NzljMWViMDc1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNmQ1NjQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU4NzdlZDUwM2ViODM4OWM4MWJjMDY5MmUyMzYyZjk3OWMxZWIwNzUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ODllMDM0MTIxYTI1MmQ0NDVlNzIxMDRkYWNjMDU3YzM4N2M3ZDRlIGIvZnV6emVyL2NvcnB1cy81ODllMDM0MTIxYTI1MmQ0NDVlNzIxMDRkYWNjMDU3YzM4N2M3ZDRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNDU0OWIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU4OWUwMzQxMjFhMjUyZDQ0NWU3MjEwNGRhY2MwNTdjMzg3YzdkNGUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81OGEzMTk1YjlkYWQzYjM1YjQ4ZjY4YjllZTJiZDVmOGE0ZDE4N2E4IGIvZnV6emVyL2NvcnB1cy81OGEzMTk1YjlkYWQzYjM1YjQ4ZjY4YjllZTJiZDVmOGE0ZDE4N2E4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5M2Q0NGYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU4YTMxOTViOWRhZDNiMzViNDhmNjhiOWVlMmJkNWY4YTRkMTg3YTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81OGEzZGM5MThiOWZkNjAwNDI2MzkyOWM1NGI4MWI4ODBkMjA2OWQ3IGIvZnV6emVyL2NvcnB1cy81OGEzZGM5MThiOWZkNjAwNDI2MzkyOWM1NGI4MWI4ODBkMjA2OWQ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MTQzZGQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU4YTNkYzkxOGI5ZmQ2MDA0MjYzOTI5YzU0YjgxYjg4MGQyMDY5ZDcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81OGE5NjZiNDVhYzc0ZWJmMDE1YTQ3NzcwNjg2Y2E0ZDYxZjM3MmQ4IGIvZnV6emVyL2NvcnB1cy81OGE5NjZiNDVhYzc0ZWJmMDE1YTQ3NzcwNjg2Y2E0ZDYxZjM3MmQ4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MzBlMGQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU4YTk2NmI0NWFjNzRlYmYwMTVhNDc3NzA2ODZjYTRkNjFmMzcyZDgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81OGMzNGY2NWE4ZmM5OGU1MmUyMDM5ZGRlZDNmMjMwYzNiZmRmMDk5IGIvZnV6emVyL2NvcnB1cy81OGMzNGY2NWE4ZmM5OGU1MmUyMDM5ZGRlZDNmMjMwYzNiZmRmMDk5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YTFiMTgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU4YzM0ZjY1YThmYzk4ZTUyZTIwMzlkZGVkM2YyMzBjM2JmZGYwOTkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81OGM0NDBjMTkwNjE5MzMwYTEwZWEzYTg4YzQ1M2FiZWUxOTU2YmZkIGIvZnV6emVyL2NvcnB1cy81OGM0NDBjMTkwNjE5MzMwYTEwZWEzYTg4YzQ1M2FiZWUxOTU2YmZkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NzJkZDAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU4YzQ0MGMxOTA2MTkzMzBhMTBlYTNhODhjNDUzYWJlZTE5NTZiZmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81OGM2MWY2MTI0NDI3YzJlNDVlYjBhZDY3NjFlNzAyNjE4Zjk2OWM0IGIvZnV6emVyL2NvcnB1cy81OGM2MWY2MTI0NDI3YzJlNDVlYjBhZDY3NjFlNzAyNjE4Zjk2OWM0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZThjOWMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU4YzYxZjYxMjQ0MjdjMmU0NWViMGFkNjc2MWU3MDI2MThmOTY5YzQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81OGY3ZDYxMWU3MDJkYTgxNDBlYTNjZmJhOGZmNjlhYmZlNmQyZDQ2IGIvZnV6emVyL2NvcnB1cy81OGY3ZDYxMWU3MDJkYTgxNDBlYTNjZmJhOGZmNjlhYmZlNmQyZDQ2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkYTA3ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU4ZjdkNjExZTcwMmRhODE0MGVhM2NmYmE4ZmY2OWFiZmU2ZDJkNDYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81OGY5ZTAxMTFhNjgzMzYyNzkzOGUwZGZiYWFkNGM5MDFkMTA3ZGY4IGIvZnV6emVyL2NvcnB1cy81OGY5ZTAxMTFhNjgzMzYyNzkzOGUwZGZiYWFkNGM5MDFkMTA3ZGY4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZTY1MGUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU4ZjllMDExMWE2ODMzNjI3OTM4ZTBkZmJhYWQ0YzkwMWQxMDdkZjgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81OTBlM2IzMDIxNWI3ZDAzNzkxM2QwYzI2YjhhZTI0YzA4NDNhNDUyIGIvZnV6emVyL2NvcnB1cy81OTBlM2IzMDIxNWI3ZDAzNzkxM2QwYzI2YjhhZTI0YzA4NDNhNDUyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYWFmYzAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU5MGUzYjMwMjE1YjdkMDM3OTEzZDBjMjZiOGFlMjRjMDg0M2E0NTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81OTM0YzgxMWZjYWU4M2RiOGE4YTU3NmVmYzFhMjQ3MmMwOGVlYTFkIGIvZnV6emVyL2NvcnB1cy81OTM0YzgxMWZjYWU4M2RiOGE4YTU3NmVmYzFhMjQ3MmMwOGVlYTFkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlY2Q2OWYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU5MzRjODExZmNhZTgzZGI4YThhNTc2ZWZjMWEyNDcyYzA4ZWVhMWQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81OTUxYjQ2MDgyY2I4NGU0NWM4YmViZjlkNWVhM2Y2YTEwMTg3MzNmIGIvZnV6emVyL2NvcnB1cy81OTUxYjQ2MDgyY2I4NGU0NWM4YmViZjlkNWVhM2Y2YTEwMTg3MzNmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMWYyNGEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU5NTFiNDYwODJjYjg0ZTQ1YzhiZWJmOWQ1ZWEzZjZhMTAxODczM2YKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81OTc3ZjhkMzRmNDU3NDVmNjNmZjYxZTI3MTYyMzQyN2Q0MWRhMGMyIGIvZnV6emVyL2NvcnB1cy81OTc3ZjhkMzRmNDU3NDVmNjNmZjYxZTI3MTYyMzQyN2Q0MWRhMGMyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZmE5OGEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU5NzdmOGQzNGY0NTc0NWY2M2ZmNjFlMjcxNjIzNDI3ZDQxZGEwYzIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81OTk4M2ZhMDNhNjY3NWZkZDIzYjQwYjFjZmQ1MWRlYmMyMDcyNmVlIGIvZnV6emVyL2NvcnB1cy81OTk4M2ZhMDNhNjY3NWZkZDIzYjQwYjFjZmQ1MWRlYmMyMDcyNmVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZjY2MDcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU5OTgzZmEwM2E2Njc1ZmRkMjNiNDBiMWNmZDUxZGViYzIwNzI2ZWUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81OTlhNmI5NWM4MmViYzdiOWYwMDA1MGVjZWJiMTQzOTJhYmU1MWMzIGIvZnV6emVyL2NvcnB1cy81OTlhNmI5NWM4MmViYzdiOWYwMDA1MGVjZWJiMTQzOTJhYmU1MWMzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZDEzZDcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU5OWE2Yjk1YzgyZWJjN2I5ZjAwMDUwZWNlYmIxNDM5MmFiZTUxYzMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81OWI0YTlmNDgwYTFjOTk1ZjVkOWM1ZmNhMTlkMWVhYzVjMzY3MDE3IGIvZnV6emVyL2NvcnB1cy81OWI0YTlmNDgwYTFjOTk1ZjVkOWM1ZmNhMTlkMWVhYzVjMzY3MDE3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MjI5MWIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzU5YjRhOWY0ODBhMWM5OTVmNWQ5YzVmY2ExOWQxZWFjNWMzNjcwMTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81YTA2NjdlNzc4ZTI5NTAxMTIwYjM1YTYxYzc5ZWI2ZDY3NjZhY2YxIGIvZnV6emVyL2NvcnB1cy81YTA2NjdlNzc4ZTI5NTAxMTIwYjM1YTYxYzc5ZWI2ZDY3NjZhY2YxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNjlkNWYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVhMDY2N2U3NzhlMjk1MDExMjBiMzVhNjFjNzllYjZkNjc2NmFjZjEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81YTBhZGJiOWQ0NWY2MjZlOGZiMDhlMDNkMWZhYzM3YjMzYmY2YWRhIGIvZnV6emVyL2NvcnB1cy81YTBhZGJiOWQ0NWY2MjZlOGZiMDhlMDNkMWZhYzM3YjMzYmY2YWRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMzQwNGQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVhMGFkYmI5ZDQ1ZjYyNmU4ZmIwOGUwM2QxZmFjMzdiMzNiZjZhZGEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81YTNlYzMwNTFjMWUwODI4OWM4MjFhM2JhOWRlMzFjOTRjYzA3Nzg3IGIvZnV6emVyL2NvcnB1cy81YTNlYzMwNTFjMWUwODI4OWM4MjFhM2JhOWRlMzFjOTRjYzA3Nzg3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYzA2MzUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVhM2VjMzA1MWMxZTA4Mjg5YzgyMWEzYmE5ZGUzMWM5NGNjMDc3ODcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81YTc5MzBhOTQ4NTUwZDA5YmFhNmVlMDE1YjMyOWUwNzI1ODFmYWRlIGIvZnV6emVyL2NvcnB1cy81YTc5MzBhOTQ4NTUwZDA5YmFhNmVlMDE1YjMyOWUwNzI1ODFmYWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYmM5ODgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVhNzkzMGE5NDg1NTBkMDliYWE2ZWUwMTViMzI5ZTA3MjU4MWZhZGUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81YWE5Yjk3NmMxNGQ3MmY0MzY0ODczODFlZmYyYjU1NTM3MWNjMmYzIGIvZnV6emVyL2NvcnB1cy81YWE5Yjk3NmMxNGQ3MmY0MzY0ODczODFlZmYyYjU1NTM3MWNjMmYzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYWZkNmUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVhYTliOTc2YzE0ZDcyZjQzNjQ4NzM4MWVmZjJiNTU1MzcxY2MyZjMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81YWFhZmUwNmExNDA4NDljYmM2ZTE0NjQ3YjIxOTI0MWI4NWNkODY3IGIvZnV6emVyL2NvcnB1cy81YWFhZmUwNmExNDA4NDljYmM2ZTE0NjQ3YjIxOTI0MWI4NWNkODY3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YmI1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVhYWFmZTA2YTE0MDg0OWNiYzZlMTQ2NDdiMjE5MjQxYjg1Y2Q4NjcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81YWI0ZjRjNjIxMjM2MjI2YmY1NTkwNDFlODY5MjU3ZjI4MTMxZWNiIGIvZnV6emVyL2NvcnB1cy81YWI0ZjRjNjIxMjM2MjI2YmY1NTkwNDFlODY5MjU3ZjI4MTMxZWNiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlY2UxMzIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVhYjRmNGM2MjEyMzYyMjZiZjU1OTA0MWU4NjkyNTdmMjgxMzFlY2IKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81YWRkNTQ2OWQ3ZTg2N2ZlNDMyZDY5NTgxNzhlNjg2M2JlNWFmNmM5IGIvZnV6emVyL2NvcnB1cy81YWRkNTQ2OWQ3ZTg2N2ZlNDMyZDY5NTgxNzhlNjg2M2JlNWFmNmM5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZGMyMjAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVhZGQ1NDY5ZDdlODY3ZmU0MzJkNjk1ODE3OGU2ODYzYmU1YWY2YzkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81YjAxMGE4YjdkY2FhM2U5OTVmOTAzMjg5MzAxMGViNGQwZTRlYmU5IGIvZnV6emVyL2NvcnB1cy81YjAxMGE4YjdkY2FhM2U5OTVmOTAzMjg5MzAxMGViNGQwZTRlYmU5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMTVmZjQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzViMDEwYThiN2RjYWEzZTk5NWY5MDMyODkzMDEwZWI0ZDBlNGViZTkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81YjM1MDE3NzUwNTQwYTViMWNkZDQwMDg1NTgzNDc3MDhiNTY4YTg0IGIvZnV6emVyL2NvcnB1cy81YjM1MDE3NzUwNTQwYTViMWNkZDQwMDg1NTgzNDc3MDhiNTY4YTg0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NTJiZDAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzViMzUwMTc3NTA1NDBhNWIxY2RkNDAwODU1ODM0NzcwOGI1NjhhODQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81YjUzZDBhNGU2ZWU2YmM3M2EyOTM5MWFkNWY0Y2Q2ZmEyZDMwMTdlIGIvZnV6emVyL2NvcnB1cy81YjUzZDBhNGU2ZWU2YmM3M2EyOTM5MWFkNWY0Y2Q2ZmEyZDMwMTdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZDdkZDgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzViNTNkMGE0ZTZlZTZiYzczYTI5MzkxYWQ1ZjRjZDZmYTJkMzAxN2UKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81YjdlYTNiYmExM2QxN2Q4ZmE0MTc2ZmZhNWNlYTBiYzdhN2Y2YzQ0IGIvZnV6emVyL2NvcnB1cy81YjdlYTNiYmExM2QxN2Q4ZmE0MTc2ZmZhNWNlYTBiYzdhN2Y2YzQ0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZGU2ODUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzViN2VhM2JiYTEzZDE3ZDhmYTQxNzZmZmE1Y2VhMGJjN2E3ZjZjNDQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81YjlkNDhiNjFjN2M2YzlhYmMyNjY5YWQ0MTdjYjE0ODdiOTkzNGFhIGIvZnV6emVyL2NvcnB1cy81YjlkNDhiNjFjN2M2YzlhYmMyNjY5YWQ0MTdjYjE0ODdiOTkzNGFhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZGUxYTQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzViOWQ0OGI2MWM3YzZjOWFiYzI2NjlhZDQxN2NiMTQ4N2I5OTM0YWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81YmEwYjI5OGViNDI4NzVmMzNiYThlNWUwNDcxZmFhZmE3YjQ5ZTdkIGIvZnV6emVyL2NvcnB1cy81YmEwYjI5OGViNDI4NzVmMzNiYThlNWUwNDcxZmFhZmE3YjQ5ZTdkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ODFlYTcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzViYTBiMjk4ZWI0Mjg3NWYzM2JhOGU1ZTA0NzFmYWFmYTdiNDllN2QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81YmQzNTIwNDg4NzNmNmQyYWM4ZmJjMDM1NmVhN2U3ZDA1OTE4ZGRkIGIvZnV6emVyL2NvcnB1cy81YmQzNTIwNDg4NzNmNmQyYWM4ZmJjMDM1NmVhN2U3ZDA1OTE4ZGRkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2OGU0M2MKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzViZDM1MjA0ODg3M2Y2ZDJhYzhmYmMwMzU2ZWE3ZTdkMDU5MThkZGQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81YmY4MzIyMWY0NGQzMjAyMmM1YzNhZGY0MjQxZjcxNWYwNzk0NDYxIGIvZnV6emVyL2NvcnB1cy81YmY4MzIyMWY0NGQzMjAyMmM1YzNhZGY0MjQxZjcxNWYwNzk0NDYxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZWU5YWQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzViZjgzMjIxZjQ0ZDMyMDIyYzVjM2FkZjQyNDFmNzE1ZjA3OTQ0NjEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81YmZmZDkwMGQxZDM0M2MyNjhhN2NkZmEwOGM4ZmFmMDAwMzE5OTc0IGIvZnV6emVyL2NvcnB1cy81YmZmZDkwMGQxZDM0M2MyNjhhN2NkZmEwOGM4ZmFmMDAwMzE5OTc0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYTAzYzgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzViZmZkOTAwZDFkMzQzYzI2OGE3Y2RmYTA4YzhmYWYwMDAzMTk5NzQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81YzFhYjdjZTlkZmVmZTU1MjQ5ZTg4M2QzMzU5YWRlN2U3NmU1Y2UwIGIvZnV6emVyL2NvcnB1cy81YzFhYjdjZTlkZmVmZTU1MjQ5ZTg4M2QzMzU5YWRlN2U3NmU1Y2UwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0Yjc5NmEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVjMWFiN2NlOWRmZWZlNTUyNDllODgzZDMzNTlhZGU3ZTc2ZTVjZTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81YzUwNDU3YThhMTgzYTFiMjg2MzI3Yzc4YjUyYTgzYThjNWU0YzYwIGIvZnV6emVyL2NvcnB1cy81YzUwNDU3YThhMTgzYTFiMjg2MzI3Yzc4YjUyYTgzYThjNWU0YzYwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NWFmYWQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVjNTA0NTdhOGExODNhMWIyODYzMjdjNzhiNTJhODNhOGM1ZTRjNjAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81YzY1YTdiM2Q3ZGY4YjlhOTYyZmM4MmRmNzViMGQ3YjkzMGE4MWIwIGIvZnV6emVyL2NvcnB1cy81YzY1YTdiM2Q3ZGY4YjlhOTYyZmM4MmRmNzViMGQ3YjkzMGE4MWIwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZTY3MWYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVjNjVhN2IzZDdkZjhiOWE5NjJmYzgyZGY3NWIwZDdiOTMwYTgxYjAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81YzdiODZlYTQ3NjJiZjc2M2MzMTM0ZWMwYWEzNTgwZjgyY2M3MGY5IGIvZnV6emVyL2NvcnB1cy81YzdiODZlYTQ3NjJiZjc2M2MzMTM0ZWMwYWEzNTgwZjgyY2M3MGY5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZjA0ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVjN2I4NmVhNDc2MmJmNzYzYzMxMzRlYzBhYTM1ODBmODJjYzcwZjkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81YzgxOGUyODBjOTAwNzhiMzg1YWMxY2Q5MzE2YmQ0NDY1MTQ0NTA4IGIvZnV6emVyL2NvcnB1cy81YzgxOGUyODBjOTAwNzhiMzg1YWMxY2Q5MzE2YmQ0NDY1MTQ0NTA4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YTk5ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVjODE4ZTI4MGM5MDA3OGIzODVhYzFjZDkzMTZiZDQ0NjUxNDQ1MDgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81Y2FlZWE0MWRhNDM3MmNhMDViMGUyOGExNWM0NTMzZDc1MTdiMjAzIGIvZnV6emVyL2NvcnB1cy81Y2FlZWE0MWRhNDM3MmNhMDViMGUyOGExNWM0NTMzZDc1MTdiMjAzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZWM5OWQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVjYWVlYTQxZGE0MzcyY2EwNWIwZTI4YTE1YzQ1MzNkNzUxN2IyMDMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81Y2JkOTU3NTM3NDQyYmNmMjY3Njg3YzllM2ZhZTE3NWE5M2RhM2E5IGIvZnV6emVyL2NvcnB1cy81Y2JkOTU3NTM3NDQyYmNmMjY3Njg3YzllM2ZhZTE3NWE5M2RhM2E5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YzNlYWYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVjYmQ5NTc1Mzc0NDJiY2YyNjc2ODdjOWUzZmFlMTc1YTkzZGEzYTkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81Y2YzNjNiYWFkZjAzN2Y2YjJkOWJhNmJjNDMyNzQ2ODVhZWJmN2JkIGIvZnV6emVyL2NvcnB1cy81Y2YzNjNiYWFkZjAzN2Y2YjJkOWJhNmJjNDMyNzQ2ODVhZWJmN2JkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNmQwNTcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVjZjM2M2JhYWRmMDM3ZjZiMmQ5YmE2YmM0MzI3NDY4NWFlYmY3YmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81Y2ZkMGUwNDJkNjIzN2QwNDM2YTNjYTEyZDhjMWRmYjUzNmY4YmUzIGIvZnV6emVyL2NvcnB1cy81Y2ZkMGUwNDJkNjIzN2QwNDM2YTNjYTEyZDhjMWRmYjUzNmY4YmUzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlOTFhMzgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVjZmQwZTA0MmQ2MjM3ZDA0MzZhM2NhMTJkOGMxZGZiNTM2ZjhiZTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ZDAxZjVhOTU0NGFkNjNmMTU2ZWMyYjllOWEzMDMyNmUzNWQ2N2IwIGIvZnV6emVyL2NvcnB1cy81ZDAxZjVhOTU0NGFkNjNmMTU2ZWMyYjllOWEzMDMyNmUzNWQ2N2IwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlODgyNDIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVkMDFmNWE5NTQ0YWQ2M2YxNTZlYzJiOWU5YTMwMzI2ZTM1ZDY3YjAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ZDBhMmI4ZTVhYjRjNjIyMGY3MGI0MDhkNWQ4MmJmMDhhNzIzNzMyIGIvZnV6emVyL2NvcnB1cy81ZDBhMmI4ZTVhYjRjNjIyMGY3MGI0MDhkNWQ4MmJmMDhhNzIzNzMyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNzkyMWUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVkMGEyYjhlNWFiNGM2MjIwZjcwYjQwOGQ1ZDgyYmYwOGE3MjM3MzIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ZDdhMzhjYjkzOTllZWRhNDQ4YmM4NGUxNDQ5ZTdhNWJhYjBmNWU2IGIvZnV6emVyL2NvcnB1cy81ZDdhMzhjYjkzOTllZWRhNDQ4YmM4NGUxNDQ5ZTdhNWJhYjBmNWU2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMGViZjYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVkN2EzOGNiOTM5OWVlZGE0NDhiYzg0ZTE0NDllN2E1YmFiMGY1ZTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ZDgxM2M0NDY1YTQyNjk0MDkwODVhMDcyZjM5Y2RmNDIzNGVmNmZhIGIvZnV6emVyL2NvcnB1cy81ZDgxM2M0NDY1YTQyNjk0MDkwODVhMDcyZjM5Y2RmNDIzNGVmNmZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYTlkZDIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVkODEzYzQ0NjVhNDI2OTQwOTA4NWEwNzJmMzljZGY0MjM0ZWY2ZmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ZDljMmJhM2JmNzg1YWZhOTMzOTQ5NGQyNGUwYzM2ZmJlYTAzZmY2IGIvZnV6emVyL2NvcnB1cy81ZDljMmJhM2JmNzg1YWZhOTMzOTQ5NGQyNGUwYzM2ZmJlYTAzZmY2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3Yjc3ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVkOWMyYmEzYmY3ODVhZmE5MzM5NDk0ZDI0ZTBjMzZmYmVhMDNmZjYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ZDllNDYyYTUxNTFlNjMxYTEzODlmNTJmZDdmMjIwZmQ4YzZhM2Q2IGIvZnV6emVyL2NvcnB1cy81ZDllNDYyYTUxNTFlNjMxYTEzODlmNTJmZDdmMjIwZmQ4YzZhM2Q2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ZjA1YjAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVkOWU0NjJhNTE1MWU2MzFhMTM4OWY1MmZkN2YyMjBmZDhjNmEzZDYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ZGQxMjQ4NjFiNTYxOGNhZGUxODBjYjI0MGNhZjM2NzhiNDJjNTkxIGIvZnV6emVyL2NvcnB1cy81ZGQxMjQ4NjFiNTYxOGNhZGUxODBjYjI0MGNhZjM2NzhiNDJjNTkxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYWE0M2QKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVkZDEyNDg2MWI1NjE4Y2FkZTE4MGNiMjQwY2FmMzY3OGI0MmM1OTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ZTA2NWJjNmI1ODU3NGIzYzgzNDg0ZTdkYzZlMWZhZjNmYTVkMTYxIGIvZnV6emVyL2NvcnB1cy81ZTA2NWJjNmI1ODU3NGIzYzgzNDg0ZTdkYzZlMWZhZjNmYTVkMTYxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZjk3NjYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVlMDY1YmM2YjU4NTc0YjNjODM0ODRlN2RjNmUxZmFmM2ZhNWQxNjEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ZTFhNTUwZTcwMjE4NjViZmNjOTU5OTUyYTg0NGQzYjZhNmJkYTI0IGIvZnV6emVyL2NvcnB1cy81ZTFhNTUwZTcwMjE4NjViZmNjOTU5OTUyYTg0NGQzYjZhNmJkYTI0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZmZjYWQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVlMWE1NTBlNzAyMTg2NWJmY2M5NTk5NTJhODQ0ZDNiNmE2YmRhMjQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ZTFhNWI3YWQ0ZDc4NWRkY2IxODQ5NDY1YWRhMTVkNGQzYmVhZjgzIGIvZnV6emVyL2NvcnB1cy81ZTFhNWI3YWQ0ZDc4NWRkY2IxODQ5NDY1YWRhMTVkNGQzYmVhZjgzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMjNlYmQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVlMWE1YjdhZDRkNzg1ZGRjYjE4NDk0NjVhZGExNWQ0ZDNiZWFmODMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ZTFmMGZiMzEyZDg4N2YxMTRjMGZhZjg0N2M5NWVlMzIxOWE3NTdmIGIvZnV6emVyL2NvcnB1cy81ZTFmMGZiMzEyZDg4N2YxMTRjMGZhZjg0N2M5NWVlMzIxOWE3NTdmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMzJmNjMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVlMWYwZmIzMTJkODg3ZjExNGMwZmFmODQ3Yzk1ZWUzMjE5YTc1N2YKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ZTQ3YTI1ZDIzMDg3Mjg5OTQ1ZjkyMjZjMGEzN2Y5NjY4ZGMxOTQyIGIvZnV6emVyL2NvcnB1cy81ZTQ3YTI1ZDIzMDg3Mjg5OTQ1ZjkyMjZjMGEzN2Y5NjY4ZGMxOTQyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNzhiMzQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVlNDdhMjVkMjMwODcyODk5NDVmOTIyNmMwYTM3Zjk2NjhkYzE5NDIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ZTYyNTA3MWY1MjlkYWQ2ODc3N2Y3YTFmNjc1NzQzYTUyOGQzNjZjIGIvZnV6emVyL2NvcnB1cy81ZTYyNTA3MWY1MjlkYWQ2ODc3N2Y3YTFmNjc1NzQzYTUyOGQzNjZjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3Zjc2MGYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVlNjI1MDcxZjUyOWRhZDY4Nzc3ZjdhMWY2NzU3NDNhNTI4ZDM2NmMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ZTczOWM5ZWI5ZDllNGNiZDBlY2JhZWYxYmRlYjk5OWQyOGEyZDQ4IGIvZnV6emVyL2NvcnB1cy81ZTczOWM5ZWI5ZDllNGNiZDBlY2JhZWYxYmRlYjk5OWQyOGEyZDQ4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjOTU1NmQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVlNzM5YzllYjlkOWU0Y2JkMGVjYmFlZjFiZGViOTk5ZDI4YTJkNDgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ZThhODRkZGY2NjdmMjFhOWI0MjNhZTFjMDhmYzhmZWI3ZTVjZThmIGIvZnV6emVyL2NvcnB1cy81ZThhODRkZGY2NjdmMjFhOWI0MjNhZTFjMDhmYzhmZWI3ZTVjZThmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MjE4MGQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVlOGE4NGRkZjY2N2YyMWE5YjQyM2FlMWMwOGZjOGZlYjdlNWNlOGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ZWFlMjVhNDljYWViNTQ4ZTU0YTNlZjNjOTg0ZmFiOGQ5OTAyNjIyIGIvZnV6emVyL2NvcnB1cy81ZWFlMjVhNDljYWViNTQ4ZTU0YTNlZjNjOTg0ZmFiOGQ5OTAyNjIyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNzkxZGMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVlYWUyNWE0OWNhZWI1NDhlNTRhM2VmM2M5ODRmYWI4ZDk5MDI2MjIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ZWI3MWJkN2FkNjI0NTQ1OTA1NTA4ZDU1MmI2ZGMxMGEyZjg0N2JiIGIvZnV6emVyL2NvcnB1cy81ZWI3MWJkN2FkNjI0NTQ1OTA1NTA4ZDU1MmI2ZGMxMGEyZjg0N2JiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNzRmMGMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVlYjcxYmQ3YWQ2MjQ1NDU5MDU1MDhkNTUyYjZkYzEwYTJmODQ3YmIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ZWJjZmZhY2RhYmQ3NWExNzg2NzNlZmNiZGVlZmIxZjc5ZWQzOTRiIGIvZnV6emVyL2NvcnB1cy81ZWJjZmZhY2RhYmQ3NWExNzg2NzNlZmNiZGVlZmIxZjc5ZWQzOTRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZWVhYWIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVlYmNmZmFjZGFiZDc1YTE3ODY3M2VmY2JkZWVmYjFmNzllZDM5NGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ZWMxNTc1NWQxMTI1NmIyNjMwMDUwNWYzODk5MzY3NTJmZmUzMWM3IGIvZnV6emVyL2NvcnB1cy81ZWMxNTc1NWQxMTI1NmIyNjMwMDUwNWYzODk5MzY3NTJmZmUzMWM3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YTVlZjQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVlYzE1NzU1ZDExMjU2YjI2MzAwNTA1ZjM4OTkzNjc1MmZmZTMxYzcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ZWU2M2ZlYzQ3NGZiODY4M2JhODkyNjIxOGFlM2RlMjg0ZTA3MjgyIGIvZnV6emVyL2NvcnB1cy81ZWU2M2ZlYzQ3NGZiODY4M2JhODkyNjIxOGFlM2RlMjg0ZTA3MjgyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMmVjZWMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVlZTYzZmVjNDc0ZmI4NjgzYmE4OTI2MjE4YWUzZGUyODRlMDcyODIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ZjE0MDQ0NmM5OTIzN2RmMjVlNDA4ZDIxYzU1MzA2OWY1Yzg5MWJhIGIvZnV6emVyL2NvcnB1cy81ZjE0MDQ0NmM5OTIzN2RmMjVlNDA4ZDIxYzU1MzA2OWY1Yzg5MWJhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNGJhNDQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVmMTQwNDQ2Yzk5MjM3ZGYyNWU0MDhkMjFjNTUzMDY5ZjVjODkxYmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ZjQxMzU4YTdlY2VlN2MzMzAwMjc0NTUzYWE2YzJiODc2MWU0NWVjIGIvZnV6emVyL2NvcnB1cy81ZjQxMzU4YTdlY2VlN2MzMzAwMjc0NTUzYWE2YzJiODc2MWU0NWVjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNmI0MDAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVmNDEzNThhN2VjZWU3YzMzMDAyNzQ1NTNhYTZjMmI4NzYxZTQ1ZWMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ZjQ1NmJlNGE4ODgxZWY3NjEyOTdiNGVlMmIyMzk2YmU5Y2QwNmY4IGIvZnV6emVyL2NvcnB1cy81ZjQ1NmJlNGE4ODgxZWY3NjEyOTdiNGVlMmIyMzk2YmU5Y2QwNmY4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMzRhOWMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVmNDU2YmU0YTg4ODFlZjc2MTI5N2I0ZWUyYjIzOTZiZTljZDA2ZjgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ZjRhNzhmYWU5MmU2ZDRlM2NkYzk5ZTgzYWQxMjVhMmY3ODE4YzhmIGIvZnV6emVyL2NvcnB1cy81ZjRhNzhmYWU5MmU2ZDRlM2NkYzk5ZTgzYWQxMjVhMmY3ODE4YzhmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YmVlMWMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVmNGE3OGZhZTkyZTZkNGUzY2RjOTllODNhZDEyNWEyZjc4MThjOGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ZmI2ZjVjNzQwYmMxN2QzYjI3OWFiNzE1ZmQwOGZhODE2ODZkNWIxIGIvZnV6emVyL2NvcnB1cy81ZmI2ZjVjNzQwYmMxN2QzYjI3OWFiNzE1ZmQwOGZhODE2ODZkNWIxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwN2Q4NzIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVmYjZmNWM3NDBiYzE3ZDNiMjc5YWI3MTVmZDA4ZmE4MTY4NmQ1YjEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ZmNiZjQ4ZDE5MjIzMTgwYWNlMTczMWIyM2IyYzIzZTM4NmQ1NzZiIGIvZnV6emVyL2NvcnB1cy81ZmNiZjQ4ZDE5MjIzMTgwYWNlMTczMWIyM2IyYzIzZTM4NmQ1NzZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YWNiNzcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVmY2JmNDhkMTkyMjMxODBhY2UxNzMxYjIzYjJjMjNlMzg2ZDU3NmIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ZmUyZDc4MmQyOTRmNTZlMTM5MTYwMGU0MTRlZTJlZWZmODQ0ZjA4IGIvZnV6emVyL2NvcnB1cy81ZmUyZDc4MmQyOTRmNTZlMTM5MTYwMGU0MTRlZTJlZWZmODQ0ZjA4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMWRiZWUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVmZTJkNzgyZDI5NGY1NmUxMzkxNjAwZTQxNGVlMmVlZmY4NDRmMDgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy81ZmZkOGNhMmJkYTYyYjkzZjA1MzAxZmMwYTA2YzdlNzNhNDE2YmM4IGIvZnV6emVyL2NvcnB1cy81ZmZkOGNhMmJkYTYyYjkzZjA1MzAxZmMwYTA2YzdlNzNhNDE2YmM4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MTAzOTAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzVmZmQ4Y2EyYmRhNjJiOTNmMDUzMDFmYzBhMDZjN2U3M2E0MTZiYzgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MDMzNjdkMjhhYjhiOTA0NTY0OGNiNjRiYmM1MDMwZDFkMTVlNWQ5IGIvZnV6emVyL2NvcnB1cy82MDMzNjdkMjhhYjhiOTA0NTY0OGNiNjRiYmM1MDMwZDFkMTVlNWQ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YWNlM2MKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYwMzM2N2QyOGFiOGI5MDQ1NjQ4Y2I2NGJiYzUwMzBkMWQxNWU1ZDkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MDQyYmZiNWExMmYwN2VlOWViMDcwZTVlMmRmZjg2OTdjYWQzOTA4IGIvZnV6emVyL2NvcnB1cy82MDQyYmZiNWExMmYwN2VlOWViMDcwZTVlMmRmZjg2OTdjYWQzOTA4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NzYxYWMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYwNDJiZmI1YTEyZjA3ZWU5ZWIwNzBlNWUyZGZmODY5N2NhZDM5MDgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MDQzODUzYTgwOWEyZTgzMjg5N2FkNjE0MTMzZjU1ZTE0ZTI0NTVhIGIvZnV6emVyL2NvcnB1cy82MDQzODUzYTgwOWEyZTgzMjg5N2FkNjE0MTMzZjU1ZTE0ZTI0NTVhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMzQ5MmQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYwNDM4NTNhODA5YTJlODMyODk3YWQ2MTQxMzNmNTVlMTRlMjQ1NWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MDczZTcxMzBlNGY5NmExNmU5NzM5NWUwNmUyMjJhODEzNjZjYzNhIGIvZnV6emVyL2NvcnB1cy82MDczZTcxMzBlNGY5NmExNmU5NzM5NWUwNmUyMjJhODEzNjZjYzNhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNTljYTIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYwNzNlNzEzMGU0Zjk2YTE2ZTk3Mzk1ZTA2ZTIyMmE4MTM2NmNjM2EKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MDlhNjliODZlNWVmZGUyZGUxMDJjMzM3YTE2MWIwM2U5Yzg4NzZlIGIvZnV6emVyL2NvcnB1cy82MDlhNjliODZlNWVmZGUyZGUxMDJjMzM3YTE2MWIwM2U5Yzg4NzZlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyN2Y1ODcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYwOWE2OWI4NmU1ZWZkZTJkZTEwMmMzMzdhMTYxYjAzZTljODg3NmUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MGIwYzM2YjNmMTkyYjVmNjMxNmU1ZTBiOWE0MTdkZjA5MWIzN2Q1IGIvZnV6emVyL2NvcnB1cy82MGIwYzM2YjNmMTkyYjVmNjMxNmU1ZTBiOWE0MTdkZjA5MWIzN2Q1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MGViZTgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYwYjBjMzZiM2YxOTJiNWY2MzE2ZTVlMGI5YTQxN2RmMDkxYjM3ZDUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MGI3NjVjOTRhZWQ4MTVlMGY3NTNkMWFmYmRlNWVlOTdiZmI3MmZmIGIvZnV6emVyL2NvcnB1cy82MGI3NjVjOTRhZWQ4MTVlMGY3NTNkMWFmYmRlNWVlOTdiZmI3MmZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkOTY3MjgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYwYjc2NWM5NGFlZDgxNWUwZjc1M2QxYWZiZGU1ZWU5N2JmYjcyZmYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MGM2YmFiZjYyOThkYmFiN2M5MGM3NjI4MGQ1YTk0Yzg4ZWE5MjIyIGIvZnV6emVyL2NvcnB1cy82MGM2YmFiZjYyOThkYmFiN2M5MGM3NjI4MGQ1YTk0Yzg4ZWE5MjIyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZGU2YmUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYwYzZiYWJmNjI5OGRiYWI3YzkwYzc2MjgwZDVhOTRjODhlYTkyMjIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MGM5MTI4ZTc2MTUzZDE2ZmU4ZTdiYTJhZGJiOWFiN2JiYjIyMGNjIGIvZnV6emVyL2NvcnB1cy82MGM5MTI4ZTc2MTUzZDE2ZmU4ZTdiYTJhZGJiOWFiN2JiYjIyMGNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYzJkNWIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYwYzkxMjhlNzYxNTNkMTZmZThlN2JhMmFkYmI5YWI3YmJiMjIwY2MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MGQwYjkyOWFmMWRhMzJhMGU1NGE3MmQyN2VlNDQwNzI4NGExMGYyIGIvZnV6emVyL2NvcnB1cy82MGQwYjkyOWFmMWRhMzJhMGU1NGE3MmQyN2VlNDQwNzI4NGExMGYyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMGRhOTkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYwZDBiOTI5YWYxZGEzMmEwZTU0YTcyZDI3ZWU0NDA3Mjg0YTEwZjIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MGU0ZTliNTg1YzdlNDFhNWJlY2FiMWRjYmMwMjI1ZTY4ZDU2M2QwIGIvZnV6emVyL2NvcnB1cy82MGU0ZTliNTg1YzdlNDFhNWJlY2FiMWRjYmMwMjI1ZTY4ZDU2M2QwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0OWM4NzUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYwZTRlOWI1ODVjN2U0MWE1YmVjYWIxZGNiYzAyMjVlNjhkNTYzZDAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MGU3MjIzYzRiNTMwNGE5ODU4N2IyNDc4YWZkZWFkODEyNWMyMmFhIGIvZnV6emVyL2NvcnB1cy82MGU3MjIzYzRiNTMwNGE5ODU4N2IyNDc4YWZkZWFkODEyNWMyMmFhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYjg4ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYwZTcyMjNjNGI1MzA0YTk4NTg3YjI0NzhhZmRlYWQ4MTI1YzIyYWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MGYzNjM4ZDdjNThlMWQ1MmUyNjM4Y2Y1MGU2OGZhMGNmMzQ5MWRiIGIvZnV6emVyL2NvcnB1cy82MGYzNjM4ZDdjNThlMWQ1MmUyNjM4Y2Y1MGU2OGZhMGNmMzQ5MWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NGE2YmEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYwZjM2MzhkN2M1OGUxZDUyZTI2MzhjZjUwZTY4ZmEwY2YzNDkxZGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MTE3N2EwZjRhMGM5ZWUwODljYjkzODhkMTNlZjU2MmJlODgzMWJkIGIvZnV6emVyL2NvcnB1cy82MTE3N2EwZjRhMGM5ZWUwODljYjkzODhkMTNlZjU2MmJlODgzMWJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjM2M2ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYxMTc3YTBmNGEwYzllZTA4OWNiOTM4OGQxM2VmNTYyYmU4ODMxYmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MTM0MTM3ODdiYzc2MTI5NmY2NjNjYjhkNDVhNDQ3MTE4YjAwMWNjIGIvZnV6emVyL2NvcnB1cy82MTM0MTM3ODdiYzc2MTI5NmY2NjNjYjhkNDVhNDQ3MTE4YjAwMWNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZTlmMzcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYxMzQxMzc4N2JjNzYxMjk2ZjY2M2NiOGQ0NWE0NDcxMThiMDAxY2MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MTM4YWEwNDNjODk2MTExNTJkY2RmMzYwYzY4N2YwMTRjYTJhMjE5IGIvZnV6emVyL2NvcnB1cy82MTM4YWEwNDNjODk2MTExNTJkY2RmMzYwYzY4N2YwMTRjYTJhMjE5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NjlkNjUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYxMzhhYTA0M2M4OTYxMTE1MmRjZGYzNjBjNjg3ZjAxNGNhMmEyMTkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MTRlNjNiYjEzNzUwNTU4OWY0NDg2ZDY0NmFkMjU1YmY2MmQzOWRhIGIvZnV6emVyL2NvcnB1cy82MTRlNjNiYjEzNzUwNTU4OWY0NDg2ZDY0NmFkMjU1YmY2MmQzOWRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZDMyNGIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYxNGU2M2JiMTM3NTA1NTg5ZjQ0ODZkNjQ2YWQyNTViZjYyZDM5ZGEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MTc5NjIyMTZlYTlhM2U3ZDZiMjkzZmFiNWRmNzA3NzNjMTBjNTUyIGIvZnV6emVyL2NvcnB1cy82MTc5NjIyMTZlYTlhM2U3ZDZiMjkzZmFiNWRmNzA3NzNjMTBjNTUyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzY2NkYjEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYxNzk2MjIxNmVhOWEzZTdkNmIyOTNmYWI1ZGY3MDc3M2MxMGM1NTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MTgyMjFjZTA4Y2U3NDIyODA4ZGM2NTdiN2FlZGViNzYyYjMxYjA5IGIvZnV6emVyL2NvcnB1cy82MTgyMjFjZTA4Y2U3NDIyODA4ZGM2NTdiN2FlZGViNzYyYjMxYjA5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYTZmYzYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYxODIyMWNlMDhjZTc0MjI4MDhkYzY1N2I3YWVkZWI3NjJiMzFiMDkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MWEwZjQ3MDhjYWM0NDMzZjU2Yjk5OTk4NTk1MGZmYmY2MTBkYzkyIGIvZnV6emVyL2NvcnB1cy82MWEwZjQ3MDhjYWM0NDMzZjU2Yjk5OTk4NTk1MGZmYmY2MTBkYzkyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3YTBkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYxYTBmNDcwOGNhYzQ0MzNmNTZiOTk5OTg1OTUwZmZiZjYxMGRjOTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MWFiMDg0ZGM3YWE5OWU4MzdlMDMwOWZjZDYzZjJlMTk5Y2YwYWFlIGIvZnV6emVyL2NvcnB1cy82MWFiMDg0ZGM3YWE5OWU4MzdlMDMwOWZjZDYzZjJlMTk5Y2YwYWFlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMTU4NWQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYxYWIwODRkYzdhYTk5ZTgzN2UwMzA5ZmNkNjNmMmUxOTljZjBhYWUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MWYzOWM1NTdmZGUwYjQwZDVlMmZlN2ZiYjM3NDdkNWM4YjgyMmE3IGIvZnV6emVyL2NvcnB1cy82MWYzOWM1NTdmZGUwYjQwZDVlMmZlN2ZiYjM3NDdkNWM4YjgyMmE3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZGNhYjQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYxZjM5YzU1N2ZkZTBiNDBkNWUyZmU3ZmJiMzc0N2Q1YzhiODIyYTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MjI0ODIwMjRiYmEwOTBhM2ZkY2YxNjgzZTZlODJmMzM4MmQ4MDg2IGIvZnV6emVyL2NvcnB1cy82MjI0ODIwMjRiYmEwOTBhM2ZkY2YxNjgzZTZlODJmMzM4MmQ4MDg2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMzVjMDgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYyMjQ4MjAyNGJiYTA5MGEzZmRjZjE2ODNlNmU4MmYzMzgyZDgwODYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MjNhMTA3NGMwOTY5YjFjMDJkYzVmMTFmYzdlZmMxMmZlYTUyZDI0IGIvZnV6emVyL2NvcnB1cy82MjNhMTA3NGMwOTY5YjFjMDJkYzVmMTFmYzdlZmMxMmZlYTUyZDI0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZDlhZmEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYyM2ExMDc0YzA5NjliMWMwMmRjNWYxMWZjN2VmYzEyZmVhNTJkMjQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MjQwNTkyZDM3OTBmZGYxNWZiZDYwMzIxYjA2ZGQ1MDdjZjIyODMxIGIvZnV6emVyL2NvcnB1cy82MjQwNTkyZDM3OTBmZGYxNWZiZDYwMzIxYjA2ZGQ1MDdjZjIyODMxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NmU2ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYyNDA1OTJkMzc5MGZkZjE1ZmJkNjAzMjFiMDZkZDUwN2NmMjI4MzEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MjZiNzQ0OThlMDVlYzZiYzVkNDQ1ZjYwZjRkYzYwZGJhNzYzMzZhIGIvZnV6emVyL2NvcnB1cy82MjZiNzQ0OThlMDVlYzZiYzVkNDQ1ZjYwZjRkYzYwZGJhNzYzMzZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYzY5NzMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYyNmI3NDQ5OGUwNWVjNmJjNWQ0NDVmNjBmNGRjNjBkYmE3NjMzNmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MjdkOTBmY2M2MGYwYmYxZjcwZDc1YzlhMzFkODQxMzkyMTZlNDg4IGIvZnV6emVyL2NvcnB1cy82MjdkOTBmY2M2MGYwYmYxZjcwZDc1YzlhMzFkODQxMzkyMTZlNDg4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNzk2NjUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYyN2Q5MGZjYzYwZjBiZjFmNzBkNzVjOWEzMWQ4NDEzOTIxNmU0ODgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MjkzODJjYTc1NjIxMjMxNjFhMDkxZDVmMGQ3OTVhMjM1YjVjYTk1IGIvZnV6emVyL2NvcnB1cy82MjkzODJjYTc1NjIxMjMxNjFhMDkxZDVmMGQ3OTVhMjM1YjVjYTk1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmODA2OGQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYyOTM4MmNhNzU2MjEyMzE2MWEwOTFkNWYwZDc5NWEyMzViNWNhOTUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82Mjk1OTQzNTYzNTEwN2RkY2E3ZDllNDEyNmE2ZjVkMGM3NmZiMWZkIGIvZnV6emVyL2NvcnB1cy82Mjk1OTQzNTYzNTEwN2RkY2E3ZDllNDEyNmE2ZjVkMGM3NmZiMWZkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NGY3ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYyOTU5NDM1NjM1MTA3ZGRjYTdkOWU0MTI2YTZmNWQwYzc2ZmIxZmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MmFhNzE0M2UwZTMyOThjNjg3NmE1ZjRkZDcyNDY4NDdmNmFmM2M3IGIvZnV6emVyL2NvcnB1cy82MmFhNzE0M2UwZTMyOThjNjg3NmE1ZjRkZDcyNDY4NDdmNmFmM2M3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNTYyY2QKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYyYWE3MTQzZTBlMzI5OGM2ODc2YTVmNGRkNzI0Njg0N2Y2YWYzYzcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MmIyM2M0Y2QwNTY2MmE4NGQ5MzM4OWU5NzNhNmRhNmEyYjhiNDEwIGIvZnV6emVyL2NvcnB1cy82MmIyM2M0Y2QwNTY2MmE4NGQ5MzM4OWU5NzNhNmRhNmEyYjhiNDEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NDAxOTAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYyYjIzYzRjZDA1NjYyYTg0ZDkzMzg5ZTk3M2E2ZGE2YTJiOGI0MTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MzAwNzE2ZjAyM2U2YzU5NjNhYWUxZDRhNDU2ZGUzNDBlMDk5NzE3IGIvZnV6emVyL2NvcnB1cy82MzAwNzE2ZjAyM2U2YzU5NjNhYWUxZDRhNDU2ZGUzNDBlMDk5NzE3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NjczNWUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYzMDA3MTZmMDIzZTZjNTk2M2FhZTFkNGE0NTZkZTM0MGUwOTk3MTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MzBkNGRlMzNmNzg0MDk0MDc3MzU1ZDBkNzA3YTc3YTI1OGQ3ODQ4IGIvZnV6emVyL2NvcnB1cy82MzBkNGRlMzNmNzg0MDk0MDc3MzU1ZDBkNzA3YTc3YTI1OGQ3ODQ4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmN2I2ODQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYzMGQ0ZGUzM2Y3ODQwOTQwNzczNTVkMGQ3MDdhNzdhMjU4ZDc4NDgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MzE0YzM4MDhlYzdlODU3NTFiNGQ3Yjc0MmNkZWZkYjFkNmU1ODU2IGIvZnV6emVyL2NvcnB1cy82MzE0YzM4MDhlYzdlODU3NTFiNGQ3Yjc0MmNkZWZkYjFkNmU1ODU2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYzk3ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYzMTRjMzgwOGVjN2U4NTc1MWI0ZDdiNzQyY2RlZmRiMWQ2ZTU4NTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MzE3ZjZhNDkzMDk1Y2FjMGNhMTY5YTY5NGY2NjBkODc4OTE5YjAxIGIvZnV6emVyL2NvcnB1cy82MzE3ZjZhNDkzMDk1Y2FjMGNhMTY5YTY5NGY2NjBkODc4OTE5YjAxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmOGE5NWQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYzMTdmNmE0OTMwOTVjYWMwY2ExNjlhNjk0ZjY2MGQ4Nzg5MTliMDEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82MzY0ZTg0ZjQwNzA4MGNmZTk1NzIyZmUzNzE1OTVmY2UzMGVkZTFlIGIvZnV6emVyL2NvcnB1cy82MzY0ZTg0ZjQwNzA4MGNmZTk1NzIyZmUzNzE1OTVmY2UzMGVkZTFlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzODhmZDMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYzNjRlODRmNDA3MDgwY2ZlOTU3MjJmZTM3MTU5NWZjZTMwZWRlMWUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82Mzc0NTQxYmI5ZjcwZjc4ZmZhNTk0MzQyZWE1OTU3ODMzN2I4YjE4IGIvZnV6emVyL2NvcnB1cy82Mzc0NTQxYmI5ZjcwZjc4ZmZhNTk0MzQyZWE1OTU3ODMzN2I4YjE4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmM2VmMzIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYzNzQ1NDFiYjlmNzBmNzhmZmE1OTQzNDJlYTU5NTc4MzM3YjhiMTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82Mzk2MWU3MGRlMWI2MjZhMjY5YzFkYTA3YjIyZTEyZDFiZGJjMDgwIGIvZnV6emVyL2NvcnB1cy82Mzk2MWU3MGRlMWI2MjZhMjY5YzFkYTA3YjIyZTEyZDFiZGJjMDgwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NjcwYjIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYzOTYxZTcwZGUxYjYyNmEyNjljMWRhMDdiMjJlMTJkMWJkYmMwODAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82M2JmMzM4ZGM1ZDQ3ZGZmYWIwZjAwM2ExYzVhN2M1NjIxY2NhOWFkIGIvZnV6emVyL2NvcnB1cy82M2JmMzM4ZGM1ZDQ3ZGZmYWIwZjAwM2ExYzVhN2M1NjIxY2NhOWFkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwY2M2ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYzYmYzMzhkYzVkNDdkZmZhYjBmMDAzYTFjNWE3YzU2MjFjY2E5YWQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82M2NhMzg5YjgyYjc3MjJkNmE1N2QxN2NjZjg4N2U5NGRjMzc4ZjY4IGIvZnV6emVyL2NvcnB1cy82M2NhMzg5YjgyYjc3MjJkNmE1N2QxN2NjZjg4N2U5NGRjMzc4ZjY4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNzYzYjAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYzY2EzODliODJiNzcyMmQ2YTU3ZDE3Y2NmODg3ZTk0ZGMzNzhmNjgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82M2U0ZTM4NTU5YmVjNmU2ZjgzNGQyZWYzNDQ5MjlkMGNhZDYwMGJhIGIvZnV6emVyL2NvcnB1cy82M2U0ZTM4NTU5YmVjNmU2ZjgzNGQyZWYzNDQ5MjlkMGNhZDYwMGJhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZmZmMWMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYzZTRlMzg1NTliZWM2ZTZmODM0ZDJlZjM0NDkyOWQwY2FkNjAwYmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82M2U2OTg3MTcxOTY3OWNlMDg2MTVkMWRlNTY2YTYxNDM3MWNiNGUzIGIvZnV6emVyL2NvcnB1cy82M2U2OTg3MTcxOTY3OWNlMDg2MTVkMWRlNTY2YTYxNDM3MWNiNGUzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNGFlZjkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzYzZTY5ODcxNzE5Njc5Y2UwODYxNWQxZGU1NjZhNjE0MzcxY2I0ZTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NDA1ODBjOWZkMTRmZjcwNzc0ZjkzMzk0YjVjYTc2Y2QyZTgzNTI5IGIvZnV6emVyL2NvcnB1cy82NDA1ODBjOWZkMTRmZjcwNzc0ZjkzMzk0YjVjYTc2Y2QyZTgzNTI5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYzIzMmEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY0MDU4MGM5ZmQxNGZmNzA3NzRmOTMzOTRiNWNhNzZjZDJlODM1MjkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NDJhNmIxNTMzZjRlNzY1YjMwYjc1YjExNTY3MmE4NWQwMWU0MzY1IGIvZnV6emVyL2NvcnB1cy82NDJhNmIxNTMzZjRlNzY1YjMwYjc1YjExNTY3MmE4NWQwMWU0MzY1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNjhkNmMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY0MmE2YjE1MzNmNGU3NjViMzBiNzViMTE1NjcyYTg1ZDAxZTQzNjUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NDc3N2IxZTRjOGE0NTI3OTg5ZWZiMTQ0ZTIyMjZmMmZkYTg5Yzc4IGIvZnV6emVyL2NvcnB1cy82NDc3N2IxZTRjOGE0NTI3OTg5ZWZiMTQ0ZTIyMjZmMmZkYTg5Yzc4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NzZmNzIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY0Nzc3YjFlNGM4YTQ1Mjc5ODllZmIxNDRlMjIyNmYyZmRhODljNzgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NDhlNDJhNDgwNTE2ZWI1NDE3MTJiNTQzMTcwOWQ3MTExNjdiNjMzIGIvZnV6emVyL2NvcnB1cy82NDhlNDJhNDgwNTE2ZWI1NDE3MTJiNTQzMTcwOWQ3MTExNjdiNjMzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNTZhNjAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY0OGU0MmE0ODA1MTZlYjU0MTcxMmI1NDMxNzA5ZDcxMTE2N2I2MzMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NDkxM2Q0ZDgzZjc3MmU0ZmUwNDIzODAzZTI4NTJiMzBkMGZlZmIwIGIvZnV6emVyL2NvcnB1cy82NDkxM2Q0ZDgzZjc3MmU0ZmUwNDIzODAzZTI4NTJiMzBkMGZlZmIwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYWY2YmUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY0OTEzZDRkODNmNzcyZTRmZTA0MjM4MDNlMjg1MmIzMGQwZmVmYjAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NDk2NjZhODJhNmU1NDEzNWM2OWMwNTcwZDM5YWYwNzVjNzJiNzRkIGIvZnV6emVyL2NvcnB1cy82NDk2NjZhODJhNmU1NDEzNWM2OWMwNTcwZDM5YWYwNzVjNzJiNzRkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YjdmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY0OTY2NmE4MmE2ZTU0MTM1YzY5YzA1NzBkMzlhZjA3NWM3MmI3NGQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NGEwNDcxMDE4YjA2NjQwNjg4NmVlMjE4MDJmYzQ2ZWFjNzdjOGI0IGIvZnV6emVyL2NvcnB1cy82NGEwNDcxMDE4YjA2NjQwNjg4NmVlMjE4MDJmYzQ2ZWFjNzdjOGI0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYmFlM2EKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY0YTA0NzEwMThiMDY2NDA2ODg2ZWUyMTgwMmZjNDZlYWM3N2M4YjQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NGI0OWI1YmQyZDIwYmE2NGJlYTQ4ZDBkNzc2NmFkMmM3OTQwOGE2IGIvZnV6emVyL2NvcnB1cy82NGI0OWI1YmQyZDIwYmE2NGJlYTQ4ZDBkNzc2NmFkMmM3OTQwOGE2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MGIyY2UKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY0YjQ5YjViZDJkMjBiYTY0YmVhNDhkMGQ3NzY2YWQyYzc5NDA4YTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NGI1NDlmOTY1OGZmM2IxZDFhYjU2NDliNzA1Zjc3ZjcyMTIwODk4IGIvZnV6emVyL2NvcnB1cy82NGI1NDlmOTY1OGZmM2IxZDFhYjU2NDliNzA1Zjc3ZjcyMTIwODk4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4Y2U4MmMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY0YjU0OWY5NjU4ZmYzYjFkMWFiNTY0OWI3MDVmNzdmNzIxMjA4OTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NGJjMjkzNzdiZDAxMmM3ZGYxYjhhN2JkYzdmNTQ3NWE0ZjA2NDNkIGIvZnV6emVyL2NvcnB1cy82NGJjMjkzNzdiZDAxMmM3ZGYxYjhhN2JkYzdmNTQ3NWE0ZjA2NDNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNjc2ODYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY0YmMyOTM3N2JkMDEyYzdkZjFiOGE3YmRjN2Y1NDc1YTRmMDY0M2QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NGM0YTY2ZGE3ODVkNDZkMjVhNjhmNTcxMjYxZTA3ZDY2OTAxOWEzIGIvZnV6emVyL2NvcnB1cy82NGM0YTY2ZGE3ODVkNDZkMjVhNjhmNTcxMjYxZTA3ZDY2OTAxOWEzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzOWMxNmQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY0YzRhNjZkYTc4NWQ0NmQyNWE2OGY1NzEyNjFlMDdkNjY5MDE5YTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NGRjNjQzNGNkNTE1NGRiY2E1OGE0OTkyMTRhMTgwYzAwNjY2MmNlIGIvZnV6emVyL2NvcnB1cy82NGRjNjQzNGNkNTE1NGRiY2E1OGE0OTkyMTRhMTgwYzAwNjY2MmNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2OWU3OGEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY0ZGM2NDM0Y2Q1MTU0ZGJjYTU4YTQ5OTIxNGExODBjMDA2NjYyY2UKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NTE2OTc4NWMwNTEzMmY2MWNiMGZlN2E0Y2FjNGQ4M2VjY2ZjMjYxIGIvZnV6emVyL2NvcnB1cy82NTE2OTc4NWMwNTEzMmY2MWNiMGZlN2E0Y2FjNGQ4M2VjY2ZjMjYxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMmZlN2EKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY1MTY5Nzg1YzA1MTMyZjYxY2IwZmU3YTRjYWM0ZDgzZWNjZmMyNjEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NTE5YjAxN2NjZjA4MmNlMGIxYTc2NzA5MjllMWU3MzU0N2MxNmY1IGIvZnV6emVyL2NvcnB1cy82NTE5YjAxN2NjZjA4MmNlMGIxYTc2NzA5MjllMWU3MzU0N2MxNmY1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1Nzc5YTIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY1MTliMDE3Y2NmMDgyY2UwYjFhNzY3MDkyOWUxZTczNTQ3YzE2ZjUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NTQwNDFjZTEwMjIxNDE3MTlhOTc3Y2Y1MGU3MDJkMjY4NmFmYjJkIGIvZnV6emVyL2NvcnB1cy82NTQwNDFjZTEwMjIxNDE3MTlhOTc3Y2Y1MGU3MDJkMjY4NmFmYjJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4OWMwOTUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY1NDA0MWNlMTAyMjE0MTcxOWE5NzdjZjUwZTcwMmQyNjg2YWZiMmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NTQ2MzhiN2Q0OWU1NzQ0MDFhMjUzMTc1NTMxNDkwZWRjNGJkNzg4IGIvZnV6emVyL2NvcnB1cy82NTQ2MzhiN2Q0OWU1NzQ0MDFhMjUzMTc1NTMxNDkwZWRjNGJkNzg4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYzY5NmIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY1NDYzOGI3ZDQ5ZTU3NDQwMWEyNTMxNzU1MzE0OTBlZGM0YmQ3ODgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NTUwNWEyMjM3MDczZjczZGJmOWNmODI3ZTc0M2FkZWY0NmU5N2MwIGIvZnV6emVyL2NvcnB1cy82NTUwNWEyMjM3MDczZjczZGJmOWNmODI3ZTc0M2FkZWY0NmU5N2MwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2YTQ2NDgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY1NTA1YTIyMzcwNzNmNzNkYmY5Y2Y4MjdlNzQzYWRlZjQ2ZTk3YzAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NTUyNjYyYjI3M2YxN2I1YzA0ZDI4ZTE1ZGFhMzM0ZTdkZDFlMjgzIGIvZnV6emVyL2NvcnB1cy82NTUyNjYyYjI3M2YxN2I1YzA0ZDI4ZTE1ZGFhMzM0ZTdkZDFlMjgzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YTQ1NGUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY1NTI2NjJiMjczZjE3YjVjMDRkMjhlMTVkYWEzMzRlN2RkMWUyODMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NTVlNWZhMDE3OTBkZGM1YzEyMWYzYzQxZTBhMDZjNmQzZGZiNDFhIGIvZnV6emVyL2NvcnB1cy82NTVlNWZhMDE3OTBkZGM1YzEyMWYzYzQxZTBhMDZjNmQzZGZiNDFhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4Zjg3ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY1NWU1ZmEwMTc5MGRkYzVjMTIxZjNjNDFlMGEwNmM2ZDNkZmI0MWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NTY4MTdkMDM4NGFkYzQ1YzE4NDZmNTgwMDFkNGEyODE3ZDZkZmU4IGIvZnV6emVyL2NvcnB1cy82NTY4MTdkMDM4NGFkYzQ1YzE4NDZmNTgwMDFkNGEyODE3ZDZkZmU4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjOTgwMTIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY1NjgxN2QwMzg0YWRjNDVjMTg0NmY1ODAwMWQ0YTI4MTdkNmRmZTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NTY4NmE4ODc4ODY4MjllMGVkYzQxZDlkMzRjYWZlY2VhMDllYjExIGIvZnV6emVyL2NvcnB1cy82NTY4NmE4ODc4ODY4MjllMGVkYzQxZDlkMzRjYWZlY2VhMDllYjExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYTk2YzMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY1Njg2YTg4Nzg4NjgyOWUwZWRjNDFkOWQzNGNhZmVjZWEwOWViMTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NTY5MGJlZTFkMDJiOGMyYTJjNWI3YjAyYjBlNGQ1ZTc5ZDI1OTM0IGIvZnV6emVyL2NvcnB1cy82NTY5MGJlZTFkMDJiOGMyYTJjNWI3YjAyYjBlNGQ1ZTc5ZDI1OTM0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0OTBiOTkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY1NjkwYmVlMWQwMmI4YzJhMmM1YjdiMDJiMGU0ZDVlNzlkMjU5MzQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NWEyNDU4MWQwMWI1MTBkMTAyYzliNWEyOWI0OGRkMDgxZjlmYmY4IGIvZnV6emVyL2NvcnB1cy82NWEyNDU4MWQwMWI1MTBkMTAyYzliNWEyOWI0OGRkMDgxZjlmYmY4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1Y2ExZmYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY1YTI0NTgxZDAxYjUxMGQxMDJjOWI1YTI5YjQ4ZGQwODFmOWZiZjgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NWJhNTVmOGU0MTg5NDcwMmM4ZDJlOWRmMzViOGIxNzE5NzM0NWQxIGIvZnV6emVyL2NvcnB1cy82NWJhNTVmOGU0MTg5NDcwMmM4ZDJlOWRmMzViOGIxNzE5NzM0NWQxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0YmIwOGYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY1YmE1NWY4ZTQxODk0NzAyYzhkMmU5ZGYzNWI4YjE3MTk3MzQ1ZDEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NWRkYTY0MzhlN2Q2MDZjYzE0OTQzM2FkZDVkZjU3ZGI0ZTJkYzYyIGIvZnV6emVyL2NvcnB1cy82NWRkYTY0MzhlN2Q2MDZjYzE0OTQzM2FkZDVkZjU3ZGI0ZTJkYzYyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MGFjMDEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY1ZGRhNjQzOGU3ZDYwNmNjMTQ5NDMzYWRkNWRmNTdkYjRlMmRjNjIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NWZkYTcwNGJiOGUzOTQ0NmFkMmFhMTAzMDA0MzA1YWQxZWFmYWJmIGIvZnV6emVyL2NvcnB1cy82NWZkYTcwNGJiOGUzOTQ0NmFkMmFhMTAzMDA0MzA1YWQxZWFmYWJmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYzI5OGEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY1ZmRhNzA0YmI4ZTM5NDQ2YWQyYWExMDMwMDQzMDVhZDFlYWZhYmYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NjFmNzhhZWFjZDNiYTc3ZDg0OTU5ZTU4MjRmYjU4NDJkMzc1ZGE4IGIvZnV6emVyL2NvcnB1cy82NjFmNzhhZWFjZDNiYTc3ZDg0OTU5ZTU4MjRmYjU4NDJkMzc1ZGE4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZTQ2MGIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY2MWY3OGFlYWNkM2JhNzdkODQ5NTllNTgyNGZiNTg0MmQzNzVkYTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NjIyYjA0YjZjNjUzOWQxNzBhNmMyMDNmN2M4MDQ3YTI2MjdlZjFhIGIvZnV6emVyL2NvcnB1cy82NjIyYjA0YjZjNjUzOWQxNzBhNmMyMDNmN2M4MDQ3YTI2MjdlZjFhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNzliNjAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY2MjJiMDRiNmM2NTM5ZDE3MGE2YzIwM2Y3YzgwNDdhMjYyN2VmMWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NjZjMmY2ZDQ0NjgzMjgxNWI0MTQyZjIzYzQxZjk0NmM3NDRhNTA2IGIvZnV6emVyL2NvcnB1cy82NjZjMmY2ZDQ0NjgzMjgxNWI0MTQyZjIzYzQxZjk0NmM3NDRhNTA2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMWYyYjYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY2NmMyZjZkNDQ2ODMyODE1YjQxNDJmMjNjNDFmOTQ2Yzc0NGE1MDYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NjcwMWE4NDNiNWRmZmJhNzhhZDdlMWU2YzQ0Y2ZjODA2YWIzMWZmIGIvZnV6emVyL2NvcnB1cy82NjcwMWE4NDNiNWRmZmJhNzhhZDdlMWU2YzQ0Y2ZjODA2YWIzMWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNGMzYWEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY2NzAxYTg0M2I1ZGZmYmE3OGFkN2UxZTZjNDRjZmM4MDZhYjMxZmYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NjhkMWE4Nzg0ZmM3ZGUyMGMyZWI4N2Y2MTNhNTE3Y2JmNDJkMDgwIGIvZnV6emVyL2NvcnB1cy82NjhkMWE4Nzg0ZmM3ZGUyMGMyZWI4N2Y2MTNhNTE3Y2JmNDJkMDgwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YzRjMmUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY2OGQxYTg3ODRmYzdkZTIwYzJlYjg3ZjYxM2E1MTdjYmY0MmQwODAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NmIyN2I1N2Q0ZDdkZTFjOTBkN2VlODliYmQ0M2M1NDY4ZjIxZjUyIGIvZnV6emVyL2NvcnB1cy82NmIyN2I1N2Q0ZDdkZTFjOTBkN2VlODliYmQ0M2M1NDY4ZjIxZjUyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNDRjNWEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY2YjI3YjU3ZDRkN2RlMWM5MGQ3ZWU4OWJiZDQzYzU0NjhmMjFmNTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NmI1ODZmMzgxZjYxMzAyZjJlNzA1OGE1YjUzMzYxZTdiODEzNWYyIGIvZnV6emVyL2NvcnB1cy82NmI1ODZmMzgxZjYxMzAyZjJlNzA1OGE1YjUzMzYxZTdiODEzNWYyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNTZmYTIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY2YjU4NmYzODFmNjEzMDJmMmU3MDU4YTViNTMzNjFlN2I4MTM1ZjIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NmI4N2I1OWI3MjMzYjBjNjI4YzEwNjFiNjA1ODMzNjE1N2Y1MGNmIGIvZnV6emVyL2NvcnB1cy82NmI4N2I1OWI3MjMzYjBjNjI4YzEwNjFiNjA1ODMzNjE1N2Y1MGNmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZDAzMWYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY2Yjg3YjU5YjcyMzNiMGM2MjhjMTA2MWI2MDU4MzM2MTU3ZjUwY2YKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NmJhMDYxMjM5N2I4OTFlMGQ1ZWM5YTk4NWI4MjQ2NTBiYTUzNmM0IGIvZnV6emVyL2NvcnB1cy82NmJhMDYxMjM5N2I4OTFlMGQ1ZWM5YTk4NWI4MjQ2NTBiYTUzNmM0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwOGQyNDkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY2YmEwNjEyMzk3Yjg5MWUwZDVlYzlhOTg1YjgyNDY1MGJhNTM2YzQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NmU1NjIxYzQzZmM5NDAzZDNlMDkzZDIwMDE4Mzc5NDU1OTMyMzQzIGIvZnV6emVyL2NvcnB1cy82NmU1NjIxYzQzZmM5NDAzZDNlMDkzZDIwMDE4Mzc5NDU1OTMyMzQzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwM2YxMzkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY2ZTU2MjFjNDNmYzk0MDNkM2UwOTNkMjAwMTgzNzk0NTU5MzIzNDMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NzI3OGI5MjhlY2UwOGI2NDliYjQxZGQxMGE0NzdmMjBmOTY1NTcwIGIvZnV6emVyL2NvcnB1cy82NzI3OGI5MjhlY2UwOGI2NDliYjQxZGQxMGE0NzdmMjBmOTY1NTcwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMTBhODEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY3Mjc4YjkyOGVjZTA4YjY0OWJiNDFkZDEwYTQ3N2YyMGY5NjU1NzAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NzQ1YmJlYjE3YzQyODFiOTdjZWU5YmUyZjA0YjI1ZjliMGJmZmU4IGIvZnV6emVyL2NvcnB1cy82NzQ1YmJlYjE3YzQyODFiOTdjZWU5YmUyZjA0YjI1ZjliMGJmZmU4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YTU5MjQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY3NDViYmViMTdjNDI4MWI5N2NlZTliZTJmMDRiMjVmOWIwYmZmZTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NzU2NDQ0YjBhNmZlZDc0ODE4YTdlZTRlN2Y1NmMyMzU3N2NhNTIwIGIvZnV6emVyL2NvcnB1cy82NzU2NDQ0YjBhNmZlZDc0ODE4YTdlZTRlN2Y1NmMyMzU3N2NhNTIwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YjgzZmQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY3NTY0NDRiMGE2ZmVkNzQ4MThhN2VlNGU3ZjU2YzIzNTc3Y2E1MjAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82NzYzMGY1YTk4MDU2MzcxODE2NGE0MDRlZThlMjQxNDhjMTIwYmI4IGIvZnV6emVyL2NvcnB1cy82NzYzMGY1YTk4MDU2MzcxODE2NGE0MDRlZThlMjQxNDhjMTIwYmI4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZjcxMmUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY3NjMwZjVhOTgwNTYzNzE4MTY0YTQwNGVlOGUyNDE0OGMxMjBiYjgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ODBhYzYyNDg4OTA4NWEwNGMwMTMyNWIxOWRjYTJlYmRkYjliZWRhIGIvZnV6emVyL2NvcnB1cy82ODBhYzYyNDg4OTA4NWEwNGMwMTMyNWIxOWRjYTJlYmRkYjliZWRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZGVlZTcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY4MGFjNjI0ODg5MDg1YTA0YzAxMzI1YjE5ZGNhMmViZGRiOWJlZGEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ODUyYzBhYjMwNGE0YjA1MDNkYTVhYjNjNGMzYmIyY2I0N2ZiOTY0IGIvZnV6emVyL2NvcnB1cy82ODUyYzBhYjMwNGE0YjA1MDNkYTVhYjNjNGMzYmIyY2I0N2ZiOTY0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MGIwN2IKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY4NTJjMGFiMzA0YTRiMDUwM2RhNWFiM2M0YzNiYjJjYjQ3ZmI5NjQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ODY1NTE4NWUzN2E5NDhmMTRkNWUyMjc0ODU3NmNiNGQ4YWI3Y2M1IGIvZnV6emVyL2NvcnB1cy82ODY1NTE4NWUzN2E5NDhmMTRkNWUyMjc0ODU3NmNiNGQ4YWI3Y2M1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllODAzNTYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY4NjU1MTg1ZTM3YTk0OGYxNGQ1ZTIyNzQ4NTc2Y2I0ZDhhYjdjYzUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ODczNzVmNjIzMTgzYjNmOTFkNGRiYmM2ZDgxMWQzNzcyYTk0ZmU0IGIvZnV6emVyL2NvcnB1cy82ODczNzVmNjIzMTgzYjNmOTFkNGRiYmM2ZDgxMWQzNzcyYTk0ZmU0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlN2ZjMzIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY4NzM3NWY2MjMxODNiM2Y5MWQ0ZGJiYzZkODExZDM3NzJhOTRmZTQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ODgzYjc1YzkwZGYzMGQ2NjBlNmQ3Yjk2NmMxZWM1MTZkZjAxNzFlIGIvZnV6emVyL2NvcnB1cy82ODgzYjc1YzkwZGYzMGQ2NjBlNmQ3Yjk2NmMxZWM1MTZkZjAxNzFlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNGE2ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY4ODNiNzVjOTBkZjMwZDY2MGU2ZDdiOTY2YzFlYzUxNmRmMDE3MWUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ODk2ZjQwZGYwNGJmMWJkZmNmYTAzZGYyMjJiNmU5OWJiYjdhYWRkIGIvZnV6emVyL2NvcnB1cy82ODk2ZjQwZGYwNGJmMWJkZmNmYTAzZGYyMjJiNmU5OWJiYjdhYWRkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1Zjg4ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY4OTZmNDBkZjA0YmYxYmRmY2ZhMDNkZjIyMmI2ZTk5YmJiN2FhZGQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ODliNWE1OWE3ODJiOTVjNzJmMTFkYTU2MGM2ZTZhMTMyNTllZWEwIGIvZnV6emVyL2NvcnB1cy82ODliNWE1OWE3ODJiOTVjNzJmMTFkYTU2MGM2ZTZhMTMyNTllZWEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkN2JmMjMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY4OWI1YTU5YTc4MmI5NWM3MmYxMWRhNTYwYzZlNmExMzI1OWVlYTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82OGFmZDgxMTNiMWY1ZGM3OGM2ZTM2M2ZhN2IzMjM1YmI5ZjNlOTk4IGIvZnV6emVyL2NvcnB1cy82OGFmZDgxMTNiMWY1ZGM3OGM2ZTM2M2ZhN2IzMjM1YmI5ZjNlOTk4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYTgzMWEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY4YWZkODExM2IxZjVkYzc4YzZlMzYzZmE3YjMyMzViYjlmM2U5OTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82OGNkMDc3MmYzYjhiNjk3YmYwODgzYTZiMzMyNGVjY2ViODIwOTYyIGIvZnV6emVyL2NvcnB1cy82OGNkMDc3MmYzYjhiNjk3YmYwODgzYTZiMzMyNGVjY2ViODIwOTYyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MzY3NmMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY4Y2QwNzcyZjNiOGI2OTdiZjA4ODNhNmIzMzI0ZWNjZWI4MjA5NjIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82OGY3ZDQxNjIwYTBjN2RkZWMxMzI0OTI2MTFiYWRmNzIwZjZiNWNkIGIvZnV6emVyL2NvcnB1cy82OGY3ZDQxNjIwYTBjN2RkZWMxMzI0OTI2MTFiYWRmNzIwZjZiNWNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMjY4MDgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY4ZjdkNDE2MjBhMGM3ZGRlYzEzMjQ5MjYxMWJhZGY3MjBmNmI1Y2QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82OTFmODVmZDEzMDBiZDJlNTc0NmZkYzliZWY3NTc2ODA0MGVjZTBiIGIvZnV6emVyL2NvcnB1cy82OTFmODVmZDEzMDBiZDJlNTc0NmZkYzliZWY3NTc2ODA0MGVjZTBiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MDY2ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY5MWY4NWZkMTMwMGJkMmU1NzQ2ZmRjOWJlZjc1NzY4MDQwZWNlMGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82OTIxN2QxZTUyODI5ZTkxNTg3OGQ5ODg2ZDIyMTkzMTc0MDBhNGZiIGIvZnV6emVyL2NvcnB1cy82OTIxN2QxZTUyODI5ZTkxNTg3OGQ5ODg2ZDIyMTkzMTc0MDBhNGZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYzBlZTMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY5MjE3ZDFlNTI4MjllOTE1ODc4ZDk4ODZkMjIxOTMxNzQwMGE0ZmIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82OTY3ZDQ3MGZmOTk3YjYzOThiZTcyM2RjM2QzY2U5MzY0YTU2ODg1IGIvZnV6emVyL2NvcnB1cy82OTY3ZDQ3MGZmOTk3YjYzOThiZTcyM2RjM2QzY2U5MzY0YTU2ODg1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZThkNzMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY5NjdkNDcwZmY5OTdiNjM5OGJlNzIzZGMzZDNjZTkzNjRhNTY4ODUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82OWMyNTE2NjlhZTQ0ZTNlY2VkNzQ4ZDIxOTliMWRjNDMxMTk2YjZjIGIvZnV6emVyL2NvcnB1cy82OWMyNTE2NjlhZTQ0ZTNlY2VkNzQ4ZDIxOTliMWRjNDMxMTk2YjZjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NTkxN2YKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY5YzI1MTY2OWFlNDRlM2VjZWQ3NDhkMjE5OWIxZGM0MzExOTZiNmMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82OWMzZTA1ZGU3ZDAzM2FlZmRlN2Y4MDQ0YzllZTI5OTg4YzIwNDZkIGIvZnV6emVyL2NvcnB1cy82OWMzZTA1ZGU3ZDAzM2FlZmRlN2Y4MDQ0YzllZTI5OTg4YzIwNDZkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MzlkNGYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY5YzNlMDVkZTdkMDMzYWVmZGU3ZjgwNDRjOWVlMjk5ODhjMjA0NmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82OWMzZmRlNWVmZmYxOWU5MjVkOWRkZDFkM2VhMTIxMTFhNjAzYWFjIGIvZnV6emVyL2NvcnB1cy82OWMzZmRlNWVmZmYxOWU5MjVkOWRkZDFkM2VhMTIxMTFhNjAzYWFjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNDhhYjQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY5YzNmZGU1ZWZmZjE5ZTkyNWQ5ZGRkMWQzZWExMjExMWE2MDNhYWMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82OWNhZTk4ZDkzY2YxYTc4YWYwNWFlYzg5YjM0M2ZmNjkzNDQ1Mzc4IGIvZnV6emVyL2NvcnB1cy82OWNhZTk4ZDkzY2YxYTc4YWYwNWFlYzg5YjM0M2ZmNjkzNDQ1Mzc4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMjY2NTgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzY5Y2FlOThkOTNjZjFhNzhhZjA1YWVjODliMzQzZmY2OTM0NDUzNzgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82YTA1OTJhOWI2MDNlOTE2NTdkN2VmODQyZmUwMzQzMjg3NTc3ZDgzIGIvZnV6emVyL2NvcnB1cy82YTA1OTJhOWI2MDNlOTE2NTdkN2VmODQyZmUwMzQzMjg3NTc3ZDgzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YmM4NDMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZhMDU5MmE5YjYwM2U5MTY1N2Q3ZWY4NDJmZTAzNDMyODc1NzdkODMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82YTIzN2M3ZGI3ZGQwNGFmYjQwN2ViYjM3OWY1Y2VjMDM2YzZmNmFkIGIvZnV6emVyL2NvcnB1cy82YTIzN2M3ZGI3ZGQwNGFmYjQwN2ViYjM3OWY1Y2VjMDM2YzZmNmFkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MTRmZDkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZhMjM3YzdkYjdkZDA0YWZiNDA3ZWJiMzc5ZjVjZWMwMzZjNmY2YWQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82YTJlNDAzNDAxYzU3ZDQ1MTc0Nzg4ZWY1MGI3MjBhZmRkOWI5ZDRiIGIvZnV6emVyL2NvcnB1cy82YTJlNDAzNDAxYzU3ZDQ1MTc0Nzg4ZWY1MGI3MjBhZmRkOWI5ZDRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliY2E4YmQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZhMmU0MDM0MDFjNTdkNDUxNzQ3ODhlZjUwYjcyMGFmZGQ5YjlkNGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82YTcxNmU2ZTE5ZGVkMzNiZjhhMTIyYzMzNGQ4NmU0YjI0YmUyOWZhIGIvZnV6emVyL2NvcnB1cy82YTcxNmU2ZTE5ZGVkMzNiZjhhMTIyYzMzNGQ4NmU0YjI0YmUyOWZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NDI0YjQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZhNzE2ZTZlMTlkZWQzM2JmOGExMjJjMzM0ZDg2ZTRiMjRiZTI5ZmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82YTc0NjBkMmFmY2IyODgxMTI3OWFjZTU1NzZhMTFmOGIzMDhiN2VjIGIvZnV6emVyL2NvcnB1cy82YTc0NjBkMmFmY2IyODgxMTI3OWFjZTU1NzZhMTFmOGIzMDhiN2VjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3OTFhYjUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZhNzQ2MGQyYWZjYjI4ODExMjc5YWNlNTU3NmExMWY4YjMwOGI3ZWMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82YTliOTFhN2JhYWFmOTVlOGYzMzU5M2Q5MmEwOGZiZmU5NTVkMjU2IGIvZnV6emVyL2NvcnB1cy82YTliOTFhN2JhYWFmOTVlOGYzMzU5M2Q5MmEwOGZiZmU5NTVkMjU2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNjhmZGYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZhOWI5MWE3YmFhYWY5NWU4ZjMzNTkzZDkyYTA4ZmJmZTk1NWQyNTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82YWJiYTdmODU0YWQ2OTIyMDJhOWNkMmY0NzBhNTQ4ZjQxYzdjNTg3IGIvZnV6emVyL2NvcnB1cy82YWJiYTdmODU0YWQ2OTIyMDJhOWNkMmY0NzBhNTQ4ZjQxYzdjNTg3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZGFiYzkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZhYmJhN2Y4NTRhZDY5MjIwMmE5Y2QyZjQ3MGE1NDhmNDFjN2M1ODcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82YWMxZjJhZGYwYTI3NmI5MzBhYzMzM2YzMGU2MTAwOWQzOTMyYmEwIGIvZnV6emVyL2NvcnB1cy82YWMxZjJhZGYwYTI3NmI5MzBhYzMzM2YzMGU2MTAwOWQzOTMyYmEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZjQ1YmIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZhYzFmMmFkZjBhMjc2YjkzMGFjMzMzZjMwZTYxMDA5ZDM5MzJiYTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82YWZlNTM4NGMzOThlODI1NTk1ZDEyNGUxNzRmNWU0MDMxNTNlMWI4IGIvZnV6emVyL2NvcnB1cy82YWZlNTM4NGMzOThlODI1NTk1ZDEyNGUxNzRmNWU0MDMxNTNlMWI4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNmRjNjAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZhZmU1Mzg0YzM5OGU4MjU1OTVkMTI0ZTE3NGY1ZTQwMzE1M2UxYjgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82YjEzOTNmNjEzNjZlNmFiMjdkNjE4ZTA5NWRiNTY1MmRkNjQwODUzIGIvZnV6emVyL2NvcnB1cy82YjEzOTNmNjEzNjZlNmFiMjdkNjE4ZTA5NWRiNTY1MmRkNjQwODUzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZjIwOWUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZiMTM5M2Y2MTM2NmU2YWIyN2Q2MThlMDk1ZGI1NjUyZGQ2NDA4NTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82YjI4NWQ0NjBlNTMwOWFkOWQyZTE0MWMzN2VlNmU1MDQzMmYwNmExIGIvZnV6emVyL2NvcnB1cy82YjI4NWQ0NjBlNTMwOWFkOWQyZTE0MWMzN2VlNmU1MDQzMmYwNmExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NDQ0NmUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZiMjg1ZDQ2MGU1MzA5YWQ5ZDJlMTQxYzM3ZWU2ZTUwNDMyZjA2YTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82YjI5NmIxOGRjNmY4NTk3NjczODVhN2ExYWZiNGU4NzNiNzU4Mjg1IGIvZnV6emVyL2NvcnB1cy82YjI5NmIxOGRjNmY4NTk3NjczODVhN2ExYWZiNGU4NzNiNzU4Mjg1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZmE2ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZiMjk2YjE4ZGM2Zjg1OTc2NzM4NWE3YTFhZmI0ZTg3M2I3NTgyODUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82YjRlMTk3Y2E0MjM4YTQ4MDA4YzU0ZmFhOGU2YTQ0YTM0NDdjZDc0IGIvZnV6emVyL2NvcnB1cy82YjRlMTk3Y2E0MjM4YTQ4MDA4YzU0ZmFhOGU2YTQ0YTM0NDdjZDc0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2YmUzMjYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZiNGUxOTdjYTQyMzhhNDgwMDhjNTRmYWE4ZTZhNDRhMzQ0N2NkNzQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82YjVmNjFhNDdiYmU5YzEwNThlMmQ3YjYyNDhmMmM0YTUzMmFlMGMyIGIvZnV6emVyL2NvcnB1cy82YjVmNjFhNDdiYmU5YzEwNThlMmQ3YjYyNDhmMmM0YTUzMmFlMGMyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYTA5NmQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZiNWY2MWE0N2JiZTljMTA1OGUyZDdiNjI0OGYyYzRhNTMyYWUwYzIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82YmE1ZjQwNGUxZjRjMWE2MTIwNWNhODgxOTY4NmMxOWI4YTdlNzJkIGIvZnV6emVyL2NvcnB1cy82YmE1ZjQwNGUxZjRjMWE2MTIwNWNhODgxOTY4NmMxOWI4YTdlNzJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZTkxZGMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZiYTVmNDA0ZTFmNGMxYTYxMjA1Y2E4ODE5Njg2YzE5YjhhN2U3MmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82YmMyM2E2NjZhOWEzOTY0YTA0NTQ2MmIzNmQ0YWMxOWYwMzU1MzIzIGIvZnV6emVyL2NvcnB1cy82YmMyM2E2NjZhOWEzOTY0YTA0NTQ2MmIzNmQ0YWMxOWYwMzU1MzIzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxOThjNDUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZiYzIzYTY2NmE5YTM5NjRhMDQ1NDYyYjM2ZDRhYzE5ZjAzNTUzMjMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82YmM4ZjBkNzY4YzFiODFiZDIyODBkYTQyOTAyMTAzZjhmZWI2NGM3IGIvZnV6emVyL2NvcnB1cy82YmM4ZjBkNzY4YzFiODFiZDIyODBkYTQyOTAyMTAzZjhmZWI2NGM3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNWFkY2QKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZiYzhmMGQ3NjhjMWI4MWJkMjI4MGRhNDI5MDIxMDNmOGZlYjY0YzcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82YmRkZTlmNTEzZWU0ZjQ0MmI0YTNiMWVlYThiM2NjNDdkODEyZTVlIGIvZnV6emVyL2NvcnB1cy82YmRkZTlmNTEzZWU0ZjQ0MmI0YTNiMWVlYThiM2NjNDdkODEyZTVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMmQ0MmMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZiZGRlOWY1MTNlZTRmNDQyYjRhM2IxZWVhOGIzY2M0N2Q4MTJlNWUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82YzE2NWYxNzE3ZDUzMjI0OWNkZjQzNzIwZmQ3NDY4ODMzOTZkMDIwIGIvZnV6emVyL2NvcnB1cy82YzE2NWYxNzE3ZDUzMjI0OWNkZjQzNzIwZmQ3NDY4ODMzOTZkMDIwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NzZjMjgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZjMTY1ZjE3MTdkNTMyMjQ5Y2RmNDM3MjBmZDc0Njg4MzM5NmQwMjAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82YzFjYzAzMjlmZDIwZjU2YThkOTE4OTczNDhjZjVmYWE1Zjk1M2MzIGIvZnV6emVyL2NvcnB1cy82YzFjYzAzMjlmZDIwZjU2YThkOTE4OTczNDhjZjVmYWE1Zjk1M2MzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZTBmYTQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZjMWNjMDMyOWZkMjBmNTZhOGQ5MTg5NzM0OGNmNWZhYTVmOTUzYzMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82YzIzMmEyMDY2Nzg1ZGFmYjBiNTE3MDA5ZWUxYzkwMzgwYzVmZTI0IGIvZnV6emVyL2NvcnB1cy82YzIzMmEyMDY2Nzg1ZGFmYjBiNTE3MDA5ZWUxYzkwMzgwYzVmZTI0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNGU0YTcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZjMjMyYTIwNjY3ODVkYWZiMGI1MTcwMDllZTFjOTAzODBjNWZlMjQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82YzQ2NGZmNzU4ZmM1ZGEzMmY1NjQxNWVhNGQzMTJlYTA3ODdmZTUyIGIvZnV6emVyL2NvcnB1cy82YzQ2NGZmNzU4ZmM1ZGEzMmY1NjQxNWVhNGQzMTJlYTA3ODdmZTUyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNTA5YWIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZjNDY0ZmY3NThmYzVkYTMyZjU2NDE1ZWE0ZDMxMmVhMDc4N2ZlNTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82YzUwNmVhZDA1ZjY1MWQ4MGUxYWU4YmQwZDQ1MTBlYTY4MTc0OTcyIGIvZnV6emVyL2NvcnB1cy82YzUwNmVhZDA1ZjY1MWQ4MGUxYWU4YmQwZDQ1MTBlYTY4MTc0OTcyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYjIwNmEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZjNTA2ZWFkMDVmNjUxZDgwZTFhZThiZDBkNDUxMGVhNjgxNzQ5NzIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82YzUzMjhiMGM2MjRmNDRmOGNjZjQ5ZWEwYzgxOWU5NGQ0YWZlYmZkIGIvZnV6emVyL2NvcnB1cy82YzUzMjhiMGM2MjRmNDRmOGNjZjQ5ZWEwYzgxOWU5NGQ0YWZlYmZkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmOTI4YzYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZjNTMyOGIwYzYyNGY0NGY4Y2NmNDllYTBjODE5ZTk0ZDRhZmViZmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82YzYxZWViNzIxNzc5ZmVkYTFlYTBlOWM3MDZhYzRjYjg1OGU1ZDZkIGIvZnV6emVyL2NvcnB1cy82YzYxZWViNzIxNzc5ZmVkYTFlYTBlOWM3MDZhYzRjYjg1OGU1ZDZkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYmE5MGEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZjNjFlZWI3MjE3NzlmZWRhMWVhMGU5YzcwNmFjNGNiODU4ZTVkNmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82Y2FiZmJmODI2ODNiMjM3ODc1ODIxNTk1OWE3MWZhMGFmYTdiYjJiIGIvZnV6emVyL2NvcnB1cy82Y2FiZmJmODI2ODNiMjM3ODc1ODIxNTk1OWE3MWZhMGFmYTdiYjJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMzE4MmQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZjYWJmYmY4MjY4M2IyMzc4NzU4MjE1OTU5YTcxZmEwYWZhN2JiMmIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82Y2Y0OWUxZWRiZTM2NjJhOWY5YzNlZGE2YzIyMWVkZmMxYWUxZGUzIGIvZnV6emVyL2NvcnB1cy82Y2Y0OWUxZWRiZTM2NjJhOWY5YzNlZGE2YzIyMWVkZmMxYWUxZGUzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZDE5YjQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZjZjQ5ZTFlZGJlMzY2MmE5ZjljM2VkYTZjMjIxZWRmYzFhZTFkZTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZDYzYTM1Zjc4YzUxNTBjZWI0Y2UxY2E5OGVjOGZmOTVmNDY4NGU2IGIvZnV6emVyL2NvcnB1cy82ZDYzYTM1Zjc4YzUxNTBjZWI0Y2UxY2E5OGVjOGZmOTVmNDY4NGU2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YjNmMDUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZkNjNhMzVmNzhjNTE1MGNlYjRjZTFjYTk4ZWM4ZmY5NWY0Njg0ZTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZDZjOTNiNTU4MmNkYzdmZGFkM2QxZGQ3NzhjNjFjNmUxOTkwYjlhIGIvZnV6emVyL2NvcnB1cy82ZDZjOTNiNTU4MmNkYzdmZGFkM2QxZGQ3NzhjNjFjNmUxOTkwYjlhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNDU5ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZkNmM5M2I1NTgyY2RjN2ZkYWQzZDFkZDc3OGM2MWM2ZTE5OTBiOWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZDhlMDUzNjc1MmRkYmIzMDVhZGZkNjVmMWJlOTEzNThmZjdhYTk5IGIvZnV6emVyL2NvcnB1cy82ZDhlMDUzNjc1MmRkYmIzMDVhZGZkNjVmMWJlOTEzNThmZjdhYTk5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNDMzODkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZkOGUwNTM2NzUyZGRiYjMwNWFkZmQ2NWYxYmU5MTM1OGZmN2FhOTkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZDhlNWE2YmE0OWU2ZmIzOTM2OTRiYzdmZGNkZjQwMzRhYTU5NTgzIGIvZnV6emVyL2NvcnB1cy82ZDhlNWE2YmE0OWU2ZmIzOTM2OTRiYzdmZGNkZjQwMzRhYTU5NTgzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NDUxY2UKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZkOGU1YTZiYTQ5ZTZmYjM5MzY5NGJjN2ZkY2RmNDAzNGFhNTk1ODMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZDliY2VmMDE5M2QyOThiNTRkN2QwMzYzNWYyYTVkNzU1ZTNhZDJjIGIvZnV6emVyL2NvcnB1cy82ZDliY2VmMDE5M2QyOThiNTRkN2QwMzYzNWYyYTVkNzU1ZTNhZDJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MDdiMDIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZkOWJjZWYwMTkzZDI5OGI1NGQ3ZDAzNjM1ZjJhNWQ3NTVlM2FkMmMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZGEzZjg2NjE5OTM0YTY4NzQ0ZjFmOTBiZDU2OWNjOGQ1M2U5N2Q1IGIvZnV6emVyL2NvcnB1cy82ZGEzZjg2NjE5OTM0YTY4NzQ0ZjFmOTBiZDU2OWNjOGQ1M2U5N2Q1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZGI0YmEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZkYTNmODY2MTk5MzRhNjg3NDRmMWY5MGJkNTY5Y2M4ZDUzZTk3ZDUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZGE3NDIxMGRlYWM3ZWVlZDkwM2NhNmMwNTlkMmIwYWRiOTQyYThlIGIvZnV6emVyL2NvcnB1cy82ZGE3NDIxMGRlYWM3ZWVlZDkwM2NhNmMwNTlkMmIwYWRiOTQyYThlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MGYyYzgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZkYTc0MjEwZGVhYzdlZWVkOTAzY2E2YzA1OWQyYjBhZGI5NDJhOGUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZGMwMTNiNjJjMzVmNzI5YTllYjcxMDA4MjE1ZDRjNjQ0NTdhMGY2IGIvZnV6emVyL2NvcnB1cy82ZGMwMTNiNjJjMzVmNzI5YTllYjcxMDA4MjE1ZDRjNjQ0NTdhMGY2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYjA5MDkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZkYzAxM2I2MmMzNWY3MjlhOWViNzEwMDgyMTVkNGM2NDQ1N2EwZjYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZGRkZDJjOTNjOTdlYzZiN2RmYzZlNzNkZDc2MDJiZDQwOTlmMzg0IGIvZnV6emVyL2NvcnB1cy82ZGRkZDJjOTNjOTdlYzZiN2RmYzZlNzNkZDc2MDJiZDQwOTlmMzg0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZmYxMzIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZkZGRkMmM5M2M5N2VjNmI3ZGZjNmU3M2RkNzYwMmJkNDA5OWYzODQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZGVlNTg2NzdhYjFkZGE0ODZmZWFhMmQ3MmRkNzg5NjA1YTRkN2U4IGIvZnV6emVyL2NvcnB1cy82ZGVlNTg2NzdhYjFkZGE0ODZmZWFhMmQ3MmRkNzg5NjA1YTRkN2U4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkY2U3ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZkZWU1ODY3N2FiMWRkYTQ4NmZlYWEyZDcyZGQ3ODk2MDVhNGQ3ZTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZTIyNDk1YmE0OTBlMGVlODc1Mjg0Nzg4YmFkYjljMTRlYWEwZTY5IGIvZnV6emVyL2NvcnB1cy82ZTIyNDk1YmE0OTBlMGVlODc1Mjg0Nzg4YmFkYjljMTRlYWEwZTY5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMmQxYjEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZlMjI0OTViYTQ5MGUwZWU4NzUyODQ3ODhiYWRiOWMxNGVhYTBlNjkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZTIzYzFmMzBlZmUwZDk1NmNiNzQyZTUwM2VhNzY1OGUwN2NmYTAyIGIvZnV6emVyL2NvcnB1cy82ZTIzYzFmMzBlZmUwZDk1NmNiNzQyZTUwM2VhNzY1OGUwN2NmYTAyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNjNhYTgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZlMjNjMWYzMGVmZTBkOTU2Y2I3NDJlNTAzZWE3NjU4ZTA3Y2ZhMDIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZTM4ZjJhMTgwNGEzNmI1NjY3YjYwZjZhMTczMWFlZDI1NDk4NzNmIGIvZnV6emVyL2NvcnB1cy82ZTM4ZjJhMTgwNGEzNmI1NjY3YjYwZjZhMTczMWFlZDI1NDk4NzNmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczN2ZmOTQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZlMzhmMmExODA0YTM2YjU2NjdiNjBmNmExNzMxYWVkMjU0OTg3M2YKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZTM5NzI2ZGNkY2ZlNmJiNjk1ZmQ5MDJhNTAyOGY0ZmI4YTZmYjlhIGIvZnV6emVyL2NvcnB1cy82ZTM5NzI2ZGNkY2ZlNmJiNjk1ZmQ5MDJhNTAyOGY0ZmI4YTZmYjlhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNjliZTcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZlMzk3MjZkY2RjZmU2YmI2OTVmZDkwMmE1MDI4ZjRmYjhhNmZiOWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZTQyZDczNjVjMmYyMWQ1YmM0ZWIxZjczMTM1NjcwNTE5NTk3ZjIwIGIvZnV6emVyL2NvcnB1cy82ZTQyZDczNjVjMmYyMWQ1YmM0ZWIxZjczMTM1NjcwNTE5NTk3ZjIwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZTkyZmMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZlNDJkNzM2NWMyZjIxZDViYzRlYjFmNzMxMzU2NzA1MTk1OTdmMjAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZTVlM2U3MzdhOWZiMDkxNDdhNzcxYjUyOTBiZmQ4Y2QxZjc2YWEzIGIvZnV6emVyL2NvcnB1cy82ZTVlM2U3MzdhOWZiMDkxNDdhNzcxYjUyOTBiZmQ4Y2QxZjc2YWEzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2M2UyN2QKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZlNWUzZTczN2E5ZmIwOTE0N2E3NzFiNTI5MGJmZDhjZDFmNzZhYTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZTVmYTA3M2RlNjFhNTE1ZjRmZGQwMTE3YzUwOWZjMWJhOGVkYWIzIGIvZnV6emVyL2NvcnB1cy82ZTVmYTA3M2RlNjFhNTE1ZjRmZGQwMTE3YzUwOWZjMWJhOGVkYWIzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NDRlNmMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZlNWZhMDczZGU2MWE1MTVmNGZkZDAxMTdjNTA5ZmMxYmE4ZWRhYjMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZTg5YzBiZDJjNjI0ZWFmM2FhNTY2OWMyNjYwZWNhYTQ5OWJlNGFjIGIvZnV6emVyL2NvcnB1cy82ZTg5YzBiZDJjNjI0ZWFmM2FhNTY2OWMyNjYwZWNhYTQ5OWJlNGFjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZGM5YTIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZlODljMGJkMmM2MjRlYWYzYWE1NjY5YzI2NjBlY2FhNDk5YmU0YWMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZWJiMDg2MmRlYjU4NGJhOTIxOWRiZGZkYzRiNGQ3NDEwOTg0M2RkIGIvZnV6emVyL2NvcnB1cy82ZWJiMDg2MmRlYjU4NGJhOTIxOWRiZGZkYzRiNGQ3NDEwOTg0M2RkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhODNmNjEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZlYmIwODYyZGViNTg0YmE5MjE5ZGJkZmRjNGI0ZDc0MTA5ODQzZGQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZWJiM2IyZTkzNTY0NmQzZTJmMDJlZWM4ZjEzMjE5ZGI3NDc3MzJkIGIvZnV6emVyL2NvcnB1cy82ZWJiM2IyZTkzNTY0NmQzZTJmMDJlZWM4ZjEzMjE5ZGI3NDc3MzJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NjFhYjcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZlYmIzYjJlOTM1NjQ2ZDNlMmYwMmVlYzhmMTMyMTlkYjc0NzczMmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZWRkZTU5MmI1ODhkOTAxMzY2N2E5OGNhNTZhZjljZDE5YWYzODZiIGIvZnV6emVyL2NvcnB1cy82ZWRkZTU5MmI1ODhkOTAxMzY2N2E5OGNhNTZhZjljZDE5YWYzODZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZDlkZTIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZlZGRlNTkyYjU4OGQ5MDEzNjY3YTk4Y2E1NmFmOWNkMTlhZjM4NmIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZWUwZWEwOTExZmU2Y2U3MzMxNjI1NWIwYjViMmJiM2JkMTAzZTZjIGIvZnV6emVyL2NvcnB1cy82ZWUwZWEwOTExZmU2Y2U3MzMxNjI1NWIwYjViMmJiM2JkMTAzZTZjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNzVkNWIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZlZTBlYTA5MTFmZTZjZTczMzE2MjU1YjBiNWIyYmIzYmQxMDNlNmMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZjE1ZDlmNGY4MzMwYmVlOGJjODllNGI0NWM4NjQ1ZmU5NGRjMDJhIGIvZnV6emVyL2NvcnB1cy82ZjE1ZDlmNGY4MzMwYmVlOGJjODllNGI0NWM4NjQ1ZmU5NGRjMDJhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmOGM0NDIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZmMTVkOWY0ZjgzMzBiZWU4YmM4OWU0YjQ1Yzg2NDVmZTk0ZGMwMmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZjE2MmNlYTEzMGM4OWEwMDU5ZWUzNDM1MDEzNDNkZTNkMDE4NTVhIGIvZnV6emVyL2NvcnB1cy82ZjE2MmNlYTEzMGM4OWEwMDU5ZWUzNDM1MDEzNDNkZTNkMDE4NTVhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZTZhYjkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZmMTYyY2VhMTMwYzg5YTAwNTllZTM0MzUwMTM0M2RlM2QwMTg1NWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZjJkMjk3MjBmNjg5NDY0NDI0ZGFlZTI4NGIyMGIwNzhjMmMyOTQ4IGIvZnV6emVyL2NvcnB1cy82ZjJkMjk3MjBmNjg5NDY0NDI0ZGFlZTI4NGIyMGIwNzhjMmMyOTQ4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZWQxNGQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZmMmQyOTcyMGY2ODk0NjQ0MjRkYWVlMjg0YjIwYjA3OGMyYzI5NDgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZjcyNTI0Y2E2MzlhYTk0NmE2ZmJmMjY2NjYxYzYwZmE5YTEyYTEyIGIvZnV6emVyL2NvcnB1cy82ZjcyNTI0Y2E2MzlhYTk0NmE2ZmJmMjY2NjYxYzYwZmE5YTEyYTEyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMjBiNTcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZmNzI1MjRjYTYzOWFhOTQ2YTZmYmYyNjY2NjFjNjBmYTlhMTJhMTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82Zjk5YWVkNmEyZDdkZWJlMmNmNDkwZjRjZWE4OTdiMjUwYTU3Mzk4IGIvZnV6emVyL2NvcnB1cy82Zjk5YWVkNmEyZDdkZWJlMmNmNDkwZjRjZWE4OTdiMjUwYTU3Mzk4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYjc3MzEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZmOTlhZWQ2YTJkN2RlYmUyY2Y0OTBmNGNlYTg5N2IyNTBhNTczOTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZjlmMzVkZTU1ZGIyODVhZjU3NThkMmFiYWJmMzIyMjU1YWM0YmU0IGIvZnV6emVyL2NvcnB1cy82ZjlmMzVkZTU1ZGIyODVhZjU3NThkMmFiYWJmMzIyMjU1YWM0YmU0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlN2MwMWIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZmOWYzNWRlNTVkYjI4NWFmNTc1OGQyYWJhYmYzMjIyNTVhYzRiZTQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZmE3MjJmYzljODdkMzkyOGQ4ZWY2MDI2YjAyNTFhMjJiOWU3NTVkIGIvZnV6emVyL2NvcnB1cy82ZmE3MjJmYzljODdkMzkyOGQ4ZWY2MDI2YjAyNTFhMjJiOWU3NTVkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZjlmZjYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZmYTcyMmZjOWM4N2QzOTI4ZDhlZjYwMjZiMDI1MWEyMmI5ZTc1NWQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZmE3YzA1Y2IyMzhlYzM3MjYyNGExNjI2Y2I5ZDAxMmYxNjM5NDkxIGIvZnV6emVyL2NvcnB1cy82ZmE3YzA1Y2IyMzhlYzM3MjYyNGExNjI2Y2I5ZDAxMmYxNjM5NDkxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYzk1MzMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZmYTdjMDVjYjIzOGVjMzcyNjI0YTE2MjZjYjlkMDEyZjE2Mzk0OTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZmI1YzdiNjI3MzFlMDEyODM1MDViNzQ2N2U1ZTc2ZTFmNzRkMGZkIGIvZnV6emVyL2NvcnB1cy82ZmI1YzdiNjI3MzFlMDEyODM1MDViNzQ2N2U1ZTc2ZTFmNzRkMGZkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZDkxOGUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZmYjVjN2I2MjczMWUwMTI4MzUwNWI3NDY3ZTVlNzZlMWY3NGQwZmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy82ZmI2OWI1ZjA1NjU0NTAxNTlkNDZlZTU5NmI5ZWM5MjMyYTBiNzk3IGIvZnV6emVyL2NvcnB1cy82ZmI2OWI1ZjA1NjU0NTAxNTlkNDZlZTU5NmI5ZWM5MjMyYTBiNzk3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MjA1OTMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzZmYjY5YjVmMDU2NTQ1MDE1OWQ0NmVlNTk2YjllYzkyMzJhMGI3OTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MDMzZWQyNThkOTRjMzA3YmZiZWEwYTc0NGIxN2UxNzBhYjU1NzcwIGIvZnV6emVyL2NvcnB1cy83MDMzZWQyNThkOTRjMzA3YmZiZWEwYTc0NGIxN2UxNzBhYjU1NzcwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3M2M5MjEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcwMzNlZDI1OGQ5NGMzMDdiZmJlYTBhNzQ0YjE3ZTE3MGFiNTU3NzAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MDQ5ZjVkNzE0ZDkwNmY0YjkxYjYxNThlZGFkMTUyYWVlYzM2YWZiIGIvZnV6emVyL2NvcnB1cy83MDQ5ZjVkNzE0ZDkwNmY0YjkxYjYxNThlZGFkMTUyYWVlYzM2YWZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNTU4YzEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcwNDlmNWQ3MTRkOTA2ZjRiOTFiNjE1OGVkYWQxNTJhZWVjMzZhZmIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MDZlOTliNTIwMGEzM2Q5MmZlMTg3NzA2MjFmOGFmZmRjNmE0MThjIGIvZnV6emVyL2NvcnB1cy83MDZlOTliNTIwMGEzM2Q5MmZlMTg3NzA2MjFmOGFmZmRjNmE0MThjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NjA5ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcwNmU5OWI1MjAwYTMzZDkyZmUxODc3MDYyMWY4YWZmZGM2YTQxOGMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MDc1YjNlYTBiNmE5MmJmMGE4NGQ3NmZiZDUyZDUyNmVjMGI1NWU3IGIvZnV6emVyL2NvcnB1cy83MDc1YjNlYTBiNmE5MmJmMGE4NGQ3NmZiZDUyZDUyNmVjMGI1NWU3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZWFjNjEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcwNzViM2VhMGI2YTkyYmYwYTg0ZDc2ZmJkNTJkNTI2ZWMwYjU1ZTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MGE3NzJhZjg3ZWU0OTRkYzgyNGU0NDE2MmY5NWY1ZjgzMTEzZTFhIGIvZnV6emVyL2NvcnB1cy83MGE3NzJhZjg3ZWU0OTRkYzgyNGU0NDE2MmY5NWY1ZjgzMTEzZTFhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NzExY2QKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcwYTc3MmFmODdlZTQ5NGRjODI0ZTQ0MTYyZjk1ZjVmODMxMTNlMWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MGFjZTZhYjRjNzQ4YmFjOGNkNmYwZDE1M2ViYjhkYWJlYjI0ZDIwIGIvZnV6emVyL2NvcnB1cy83MGFjZTZhYjRjNzQ4YmFjOGNkNmYwZDE1M2ViYjhkYWJlYjI0ZDIwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NjAyZmMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcwYWNlNmFiNGM3NDhiYWM4Y2Q2ZjBkMTUzZWJiOGRhYmViMjRkMjAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MGIyYWQ0NTA5NjZhNzllZTIyMmZhZmNlNWQ3NjA4ZjcyNjcyYmYyIGIvZnV6emVyL2NvcnB1cy83MGIyYWQ0NTA5NjZhNzllZTIyMmZhZmNlNWQ3NjA4ZjcyNjcyYmYyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MmNkZjMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcwYjJhZDQ1MDk2NmE3OWVlMjIyZmFmY2U1ZDc2MDhmNzI2NzJiZjIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MGI2OGRhODJkNzJmOWQ5ZjU2YzhmNTYzZWE3NTFiYmM3YTA4NzEzIGIvZnV6emVyL2NvcnB1cy83MGI2OGRhODJkNzJmOWQ5ZjU2YzhmNTYzZWE3NTFiYmM3YTA4NzEzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmODliNTYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcwYjY4ZGE4MmQ3MmY5ZDlmNTZjOGY1NjNlYTc1MWJiYzdhMDg3MTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MGJmZTBjNDVkOTRhOWMwZmIxMTU4NDEyN2UxYzM3MThhMjE1MzkyIGIvZnV6emVyL2NvcnB1cy83MGJmZTBjNDVkOTRhOWMwZmIxMTU4NDEyN2UxYzM3MThhMjE1MzkyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMmNlNjUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcwYmZlMGM0NWQ5NGE5YzBmYjExNTg0MTI3ZTFjMzcxOGEyMTUzOTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MGQ1YzUyZjYzMjI1ZTYwMjgzNTk0NmRjYjM4NmQxYWE3MDAwNzhiIGIvZnV6emVyL2NvcnB1cy83MGQ1YzUyZjYzMjI1ZTYwMjgzNTk0NmRjYjM4NmQxYWE3MDAwNzhiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MzI1ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcwZDVjNTJmNjMyMjVlNjAyODM1OTQ2ZGNiMzg2ZDFhYTcwMDA3OGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MTBiNDY0OGJhNTRiMTIxZjQ0ODk4MDA2Yjc2YjY5YmQ4YjY2Y2JkIGIvZnV6emVyL2NvcnB1cy83MTBiNDY0OGJhNTRiMTIxZjQ0ODk4MDA2Yjc2YjY5YmQ4YjY2Y2JkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNjg0MWIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcxMGI0NjQ4YmE1NGIxMjFmNDQ4OTgwMDZiNzZiNjliZDhiNjZjYmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MTI0ZjhkZWMwMGE1MWJhYmMxZGIyNTk1YzI3ZTJiZjA5OGMwMmY0IGIvZnV6emVyL2NvcnB1cy83MTI0ZjhkZWMwMGE1MWJhYmMxZGIyNTk1YzI3ZTJiZjA5OGMwMmY0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMTRiOWUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcxMjRmOGRlYzAwYTUxYmFiYzFkYjI1OTVjMjdlMmJmMDk4YzAyZjQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MTJlMzA2Y2NlMjM1ZmQ3YzA3YWNjNGY5NTQyZTNlOGQxNzZiNGYwIGIvZnV6emVyL2NvcnB1cy83MTJlMzA2Y2NlMjM1ZmQ3YzA3YWNjNGY5NTQyZTNlOGQxNzZiNGYwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZTEwMWIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcxMmUzMDZjY2UyMzVmZDdjMDdhY2M0Zjk1NDJlM2U4ZDE3NmI0ZjAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MTc3NDNmYjg4M2IzMzA3MDZiYmVhMGU5YTQ5YWZiZTNkYzkwN2FhIGIvZnV6emVyL2NvcnB1cy83MTc3NDNmYjg4M2IzMzA3MDZiYmVhMGU5YTQ5YWZiZTNkYzkwN2FhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNmIzZGQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcxNzc0M2ZiODgzYjMzMDcwNmJiZWEwZTlhNDlhZmJlM2RjOTA3YWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MTdjNTAxOWJmYTVkOWQ5MmU5NTRjNDA3MDg0ZWUzNmEwN2YxZDQ4IGIvZnV6emVyL2NvcnB1cy83MTdjNTAxOWJmYTVkOWQ5MmU5NTRjNDA3MDg0ZWUzNmEwN2YxZDQ4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5OWFiNzMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcxN2M1MDE5YmZhNWQ5ZDkyZTk1NGM0MDcwODRlZTM2YTA3ZjFkNDgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MTlmOWIzNmJhZmMyMjU5MjZiMThkNWIzMWVhMTExYzBkMjA1NzFlIGIvZnV6emVyL2NvcnB1cy83MTlmOWIzNmJhZmMyMjU5MjZiMThkNWIzMWVhMTExYzBkMjA1NzFlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NjZlODAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcxOWY5YjM2YmFmYzIyNTkyNmIxOGQ1YjMxZWExMTFjMGQyMDU3MWUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MWNkMWMyNWU4YjZhZmZhZjIyODZkMzE3MzBmNjQxYjRkMTIwM2Q4IGIvZnV6emVyL2NvcnB1cy83MWNkMWMyNWU4YjZhZmZhZjIyODZkMzE3MzBmNjQxYjRkMTIwM2Q4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZTdhYTMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcxY2QxYzI1ZThiNmFmZmFmMjI4NmQzMTczMGY2NDFiNGQxMjAzZDgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MWVjNWFiMGU3NmQxYjMwZGVlZWZkNTMwNGIzNzMzYTQ1OTdlYmU3IGIvZnV6emVyL2NvcnB1cy83MWVjNWFiMGU3NmQxYjMwZGVlZWZkNTMwNGIzNzMzYTQ1OTdlYmU3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YWRhZTMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcxZWM1YWIwZTc2ZDFiMzBkZWVlZmQ1MzA0YjM3MzNhNDU5N2ViZTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MjA5OTAxMTJmZGY4Y2QyNmMxMzJkM2FhY2UzZTU2NTNmMGM0NzU2IGIvZnV6emVyL2NvcnB1cy83MjA5OTAxMTJmZGY4Y2QyNmMxMzJkM2FhY2UzZTU2NTNmMGM0NzU2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmN2Q1MTQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcyMDk5MDExMmZkZjhjZDI2YzEzMmQzYWFjZTNlNTY1M2YwYzQ3NTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MjFmZDQxNDc5MWUzZjBlODUwOTc1MmNlODU3ZTU3NDNlMTEwMTZkIGIvZnV6emVyL2NvcnB1cy83MjFmZDQxNDc5MWUzZjBlODUwOTc1MmNlODU3ZTU3NDNlMTEwMTZkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5OTczZDIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcyMWZkNDE0NzkxZTNmMGU4NTA5NzUyY2U4NTdlNTc0M2UxMTAxNmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MjRkMzRiM2QzMmU3ODc0NGI5NzU3YzhlNzI4MmUyNjM4OWRkZDRlIGIvZnV6emVyL2NvcnB1cy83MjRkMzRiM2QzMmU3ODc0NGI5NzU3YzhlNzI4MmUyNjM4OWRkZDRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NzMyOTcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcyNGQzNGIzZDMyZTc4NzQ0Yjk3NTdjOGU3MjgyZTI2Mzg5ZGRkNGUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MjU2ODUxYWUxMDJjOTAxMTE4MTc4MjQ3ZDA2MDhkZDJiZWRlNjFjIGIvZnV6emVyL2NvcnB1cy83MjU2ODUxYWUxMDJjOTAxMTE4MTc4MjQ3ZDA2MDhkZDJiZWRlNjFjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZmY1OTgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcyNTY4NTFhZTEwMmM5MDExMTgxNzgyNDdkMDYwOGRkMmJlZGU2MWMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MjU4MTY2ZmZiODI3ZGIwZjI5NGFkM2YxNjlhNzJjMjNmMjE5NWI3IGIvZnV6emVyL2NvcnB1cy83MjU4MTY2ZmZiODI3ZGIwZjI5NGFkM2YxNjlhNzJjMjNmMjE5NWI3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNjk1MjAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcyNTgxNjZmZmI4MjdkYjBmMjk0YWQzZjE2OWE3MmMyM2YyMTk1YjcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MjVmMWY1M2ZiNmM1YmU3YWI1ODE1ZWRjNGFkNzI4ODAxYzhmOWFmIGIvZnV6emVyL2NvcnB1cy83MjVmMWY1M2ZiNmM1YmU3YWI1ODE1ZWRjNGFkNzI4ODAxYzhmOWFmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNjdjMjgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcyNWYxZjUzZmI2YzViZTdhYjU4MTVlZGM0YWQ3Mjg4MDFjOGY5YWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MmE0MWYzNTI0NGJkNDdkZjIyY2ZmOGNiOTdkN2EwYzFjYmIwYzgzIGIvZnV6emVyL2NvcnB1cy83MmE0MWYzNTI0NGJkNDdkZjIyY2ZmOGNiOTdkN2EwYzFjYmIwYzgzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5Yzc0ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcyYTQxZjM1MjQ0YmQ0N2RmMjJjZmY4Y2I5N2Q3YTBjMWNiYjBjODMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MmJhYThhNDdjYjI4MWYwNTNjMzlmYjQ4M2Q0YWY4ZjQ1YjQ4ZWUxIGIvZnV6emVyL2NvcnB1cy83MmJhYThhNDdjYjI4MWYwNTNjMzlmYjQ4M2Q0YWY4ZjQ1YjQ4ZWUxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYTVkZjYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcyYmFhOGE0N2NiMjgxZjA1M2MzOWZiNDgzZDRhZjhmNDViNDhlZTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MmM4M2Q3YzM1ZmZiMDFiOWRhYTA0NWE5YTViNWI3NmJkODA2NTdiIGIvZnV6emVyL2NvcnB1cy83MmM4M2Q3YzM1ZmZiMDFiOWRhYTA0NWE5YTViNWI3NmJkODA2NTdiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhOWE3YzQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcyYzgzZDdjMzVmZmIwMWI5ZGFhMDQ1YTlhNWI1Yjc2YmQ4MDY1N2IKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MmUxMmFiZGIzMGI0MDUxZDU4YzIzMzZkMTI0NTVkYTg4YmM3NGJmIGIvZnV6emVyL2NvcnB1cy83MmUxMmFiZGIzMGI0MDUxZDU4YzIzMzZkMTI0NTVkYTg4YmM3NGJmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxM2I3NTkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcyZTEyYWJkYjMwYjQwNTFkNThjMjMzNmQxMjQ1NWRhODhiYzc0YmYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MmY2NjE5NDEyZmI3ODg5ZGIyMjJhYzNhZmNjZjUyNTg2NGI1NzU1IGIvZnV6emVyL2NvcnB1cy83MmY2NjE5NDEyZmI3ODg5ZGIyMjJhYzNhZmNjZjUyNTg2NGI1NzU1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2OTljY2IKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcyZjY2MTk0MTJmYjc4ODlkYjIyMmFjM2FmY2NmNTI1ODY0YjU3NTUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MmY2OTQyNzI2MjYyOGJjN2I1NTg4NGNhNDI3ODI4ODVjZTc0OWJjIGIvZnV6emVyL2NvcnB1cy83MmY2OTQyNzI2MjYyOGJjN2I1NTg4NGNhNDI3ODI4ODVjZTc0OWJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMWZiMzEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzcyZjY5NDI3MjYyNjI4YmM3YjU1ODg0Y2E0Mjc4Mjg4NWNlNzQ5YmMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MzAwZDU0OTE5NzRjZjcwMDhiYjMwNmY2Y2UwZjI4Mjk0YzNmNGFkIGIvZnV6emVyL2NvcnB1cy83MzAwZDU0OTE5NzRjZjcwMDhiYjMwNmY2Y2UwZjI4Mjk0YzNmNGFkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ODFjMTUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzczMDBkNTQ5MTk3NGNmNzAwOGJiMzA2ZjZjZTBmMjgyOTRjM2Y0YWQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MzA5ZDgzYjFmMTc4ZDdhYzUyNzcxODkxZDBmODc5MjFjZDJmMjgyIGIvZnV6emVyL2NvcnB1cy83MzA5ZDgzYjFmMTc4ZDdhYzUyNzcxODkxZDBmODc5MjFjZDJmMjgyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZmIxYmYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzczMDlkODNiMWYxNzhkN2FjNTI3NzE4OTFkMGY4NzkyMWNkMmYyODIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MzRjNDhiN2I2ZjVjMmU0MTJhYTgwMzZjNmJjY2Q4NDljNzZkZmNhIGIvZnV6emVyL2NvcnB1cy83MzRjNDhiN2I2ZjVjMmU0MTJhYTgwMzZjNmJjY2Q4NDljNzZkZmNhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNTM4MzAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzczNGM0OGI3YjZmNWMyZTQxMmFhODAzNmM2YmNjZDg0OWM3NmRmY2EKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MzUwYzM3ODgxMDQ2MzRlMmJlNzdlYWYwMjU1NmJhZGQ4NmYxM2RlIGIvZnV6emVyL2NvcnB1cy83MzUwYzM3ODgxMDQ2MzRlMmJlNzdlYWYwMjU1NmJhZGQ4NmYxM2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMzBkOWEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzczNTBjMzc4ODEwNDYzNGUyYmU3N2VhZjAyNTU2YmFkZDg2ZjEzZGUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MzVhZGQ3ZjRiNDI3Y2U4M2RhNDJhZTBiNTY0MDk1ZjRjZWEzZGNlIGIvZnV6emVyL2NvcnB1cy83MzVhZGQ3ZjRiNDI3Y2U4M2RhNDJhZTBiNTY0MDk1ZjRjZWEzZGNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NjBiYTkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzczNWFkZDdmNGI0MjdjZTgzZGE0MmFlMGI1NjQwOTVmNGNlYTNkY2UKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MzViNDc1ZTc0NDY0M2ExZTQ5M2U5YTg5YWMzYTZjNDFlOGUwNWE2IGIvZnV6emVyL2NvcnB1cy83MzViNDc1ZTc0NDY0M2ExZTQ5M2U5YTg5YWMzYTZjNDFlOGUwNWE2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YTYzMmUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzczNWI0NzVlNzQ0NjQzYTFlNDkzZTlhODlhYzNhNmM0MWU4ZTA1YTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83Mzc3ZWZmY2QxODhkNzM3ZjUyMzVkNDY5M2RiNzk1YjlkMTUzMTY3IGIvZnV6emVyL2NvcnB1cy83Mzc3ZWZmY2QxODhkNzM3ZjUyMzVkNDY5M2RiNzk1YjlkMTUzMTY3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMTQ5YWYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzczNzdlZmZjZDE4OGQ3MzdmNTIzNWQ0NjkzZGI3OTViOWQxNTMxNjcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83MzdkMWEwODIyN2U0Y2U0NDI0OTk5ZjdjODg0ZjE4NjA3YTBhM2E4IGIvZnV6emVyL2NvcnB1cy83MzdkMWEwODIyN2U0Y2U0NDI0OTk5ZjdjODg0ZjE4NjA3YTBhM2E4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3YTMxMTUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzczN2QxYTA4MjI3ZTRjZTQ0MjQ5OTlmN2M4ODRmMTg2MDdhMGEzYTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83Mzk5ZGE5YjFkNzVmMmQ0ODQ1NzkxMDllOTI5MTJhZDMzMjUzOWMyIGIvZnV6emVyL2NvcnB1cy83Mzk5ZGE5YjFkNzVmMmQ0ODQ1NzkxMDllOTI5MTJhZDMzMjUzOWMyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZTMzMzAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzczOTlkYTliMWQ3NWYyZDQ4NDU3OTEwOWU5MjkxMmFkMzMyNTM5YzIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83M2IyZjYyYzRjYzJkYmRlZjFlNGZhNTRhYzgyOTViODk4ODYyZDYyIGIvZnV6emVyL2NvcnB1cy83M2IyZjYyYzRjYzJkYmRlZjFlNGZhNTRhYzgyOTViODk4ODYyZDYyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYWJjYWEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzczYjJmNjJjNGNjMmRiZGVmMWU0ZmE1NGFjODI5NWI4OTg4NjJkNjIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83M2UwZWVhNjc1NGU3MGVmZmY5MmUyZGZlZTY4OTk5MjIwYTlmNmFjIGIvZnV6emVyL2NvcnB1cy83M2UwZWVhNjc1NGU3MGVmZmY5MmUyZGZlZTY4OTk5MjIwYTlmNmFjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYmZiNDQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzczZTBlZWE2NzU0ZTcwZWZmZjkyZTJkZmVlNjg5OTkyMjBhOWY2YWMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83M2ZhMTRlNzJhNDFjODNmOWE4ODRmMDU1YjkxZTBkNTczYWRkN2I1IGIvZnV6emVyL2NvcnB1cy83M2ZhMTRlNzJhNDFjODNmOWE4ODRmMDU1YjkxZTBkNTczYWRkN2I1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZGRjNzgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzczZmExNGU3MmE0MWM4M2Y5YTg4NGYwNTViOTFlMGQ1NzNhZGQ3YjUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NDAwYWI2MDhlZThhZjkwMGNiNzI2M2I0NDQzODdkNjJiMjEzNzIyIGIvZnV6emVyL2NvcnB1cy83NDAwYWI2MDhlZThhZjkwMGNiNzI2M2I0NDQzODdkNjJiMjEzNzIyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MzUxZGYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc0MDBhYjYwOGVlOGFmOTAwY2I3MjYzYjQ0NDM4N2Q2MmIyMTM3MjIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NDA3MzMyNjJiMDU5NGMyZmRiMGMwNDRhMjY0NWE2YTk1OGQ4OWQwIGIvZnV6emVyL2NvcnB1cy83NDA3MzMyNjJiMDU5NGMyZmRiMGMwNDRhMjY0NWE2YTk1OGQ4OWQwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MDc1NGEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc0MDczMzI2MmIwNTk0YzJmZGIwYzA0NGEyNjQ1YTZhOTU4ZDg5ZDAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NDA4ZjZkNDlkMTEyYWVlMzhjOWZlM2Q3YmFkYTg2N2M5N2Y0M2M0IGIvZnV6emVyL2NvcnB1cy83NDA4ZjZkNDlkMTEyYWVlMzhjOWZlM2Q3YmFkYTg2N2M5N2Y0M2M0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMDU2MWEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc0MDhmNmQ0OWQxMTJhZWUzOGM5ZmUzZDdiYWRhODY3Yzk3ZjQzYzQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NDE4YjQ4MjM5NjNmMDAyZjE3ZjQ1MDA0ZjY5ZTI4YTU0ODI2MGM1IGIvZnV6emVyL2NvcnB1cy83NDE4YjQ4MjM5NjNmMDAyZjE3ZjQ1MDA0ZjY5ZTI4YTU0ODI2MGM1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMzE0YmYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc0MThiNDgyMzk2M2YwMDJmMTdmNDUwMDRmNjllMjhhNTQ4MjYwYzUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NDFhYzYwNzU3NjdkN2NkOGEwODBjZjU0ZWNkZTU1YzNkMjg3ZTkzIGIvZnV6emVyL2NvcnB1cy83NDFhYzYwNzU3NjdkN2NkOGEwODBjZjU0ZWNkZTU1YzNkMjg3ZTkzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNjMxYjMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc0MWFjNjA3NTc2N2Q3Y2Q4YTA4MGNmNTRlY2RlNTVjM2QyODdlOTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NDJmODQxZTY1YTAxYjVmNDg0ZWFjNGE5NWM0YjhiMzA4MTQzNThjIGIvZnV6emVyL2NvcnB1cy83NDJmODQxZTY1YTAxYjVmNDg0ZWFjNGE5NWM0YjhiMzA4MTQzNThjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NjRmNTgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc0MmY4NDFlNjVhMDFiNWY0ODRlYWM0YTk1YzRiOGIzMDgxNDM1OGMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NDM3YTk2ZmFiNzU5ZjQzZTI1ODI2YzgwZGE2NjE4NmZkY2RkZDNkIGIvZnV6emVyL2NvcnB1cy83NDM3YTk2ZmFiNzU5ZjQzZTI1ODI2YzgwZGE2NjE4NmZkY2RkZDNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNTAzMGYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc0MzdhOTZmYWI3NTlmNDNlMjU4MjZjODBkYTY2MTg2ZmRjZGRkM2QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NDQ1NDJiMzZhZmJmMTQwZWI1ZTg2OGJiYTBhNTZlYzU1YTEzZmQzIGIvZnV6emVyL2NvcnB1cy83NDQ1NDJiMzZhZmJmMTQwZWI1ZTg2OGJiYTBhNTZlYzU1YTEzZmQzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4N2FlZTYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc0NDU0MmIzNmFmYmYxNDBlYjVlODY4YmJhMGE1NmVjNTVhMTNmZDMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NDU3OGZhZDZhMWU2NDlhNTI3NjgyMTM0NTA3YWMxMTg4YzQ0MjdkIGIvZnV6emVyL2NvcnB1cy83NDU3OGZhZDZhMWU2NDlhNTI3NjgyMTM0NTA3YWMxMTg4YzQ0MjdkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZjU5MWIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc0NTc4ZmFkNmExZTY0OWE1Mjc2ODIxMzQ1MDdhYzExODhjNDQyN2QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NDczN2YzYmE2ZmVjMDg2MjRjMGFkYWI4OGViODI3YTQwYWJkZDRhIGIvZnV6emVyL2NvcnB1cy83NDczN2YzYmE2ZmVjMDg2MjRjMGFkYWI4OGViODI3YTQwYWJkZDRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYmM0ODcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc0NzM3ZjNiYTZmZWMwODYyNGMwYWRhYjg4ZWI4MjdhNDBhYmRkNGEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NDc4NDFlYjMzZDI1YjEzNWI2NDczZjNkMzhkNTdkYTRjODJiNGZhIGIvZnV6emVyL2NvcnB1cy83NDc4NDFlYjMzZDI1YjEzNWI2NDczZjNkMzhkNTdkYTRjODJiNGZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YmMyNDAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc0Nzg0MWViMzNkMjViMTM1YjY0NzNmM2QzOGQ1N2RhNGM4MmI0ZmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NDhhZTNiYzk4NTg2NDZmYTdmZjI1MGFhZTNkNDJjODA0NTM3ODZkIGIvZnV6emVyL2NvcnB1cy83NDhhZTNiYzk4NTg2NDZmYTdmZjI1MGFhZTNkNDJjODA0NTM3ODZkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZjE2ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc0OGFlM2JjOTg1ODY0NmZhN2ZmMjUwYWFlM2Q0MmM4MDQ1Mzc4NmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NGE0MTk5ZDlhNDZlNzc0YTliZTc4YTc5M2ExNzk2NTU0MzExYzI2IGIvZnV6emVyL2NvcnB1cy83NGE0MTk5ZDlhNDZlNzc0YTliZTc4YTc5M2ExNzk2NTU0MzExYzI2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MDkwMTkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc0YTQxOTlkOWE0NmU3NzRhOWJlNzhhNzkzYTE3OTY1NTQzMTFjMjYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NGI2N2EyMjM1OWY1OTFiNjEzMjlkODc4M2IzMTJjYzM1OWY4YWE1IGIvZnV6emVyL2NvcnB1cy83NGI2N2EyMjM1OWY1OTFiNjEzMjlkODc4M2IzMTJjYzM1OWY4YWE1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMjY0MzQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc0YjY3YTIyMzU5ZjU5MWI2MTMyOWQ4NzgzYjMxMmNjMzU5ZjhhYTUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NGRmOGE1YWUwNDU4Mzk4YzgxZjBiZTJhMGM1M2QzYjIwZGY3MjJmIGIvZnV6emVyL2NvcnB1cy83NGRmOGE1YWUwNDU4Mzk4YzgxZjBiZTJhMGM1M2QzYjIwZGY3MjJmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMjBkMzMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc0ZGY4YTVhZTA0NTgzOThjODFmMGJlMmEwYzUzZDNiMjBkZjcyMmYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NTA0ZGUwZjQ3YTM1N2IzYTVkYmQzZWRkMDljZDc5MmM1ZDg0ZWQ3IGIvZnV6emVyL2NvcnB1cy83NTA0ZGUwZjQ3YTM1N2IzYTVkYmQzZWRkMDljZDc5MmM1ZDg0ZWQ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZGUxYjkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc1MDRkZTBmNDdhMzU3YjNhNWRiZDNlZGQwOWNkNzkyYzVkODRlZDcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NTA2NDMyMzM2NTYyMzc3Y2ZlZDU4MzczZDFlNDZlNmExZjZmMmQ0IGIvZnV6emVyL2NvcnB1cy83NTA2NDMyMzM2NTYyMzc3Y2ZlZDU4MzczZDFlNDZlNmExZjZmMmQ0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiN2Y2YzMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc1MDY0MzIzMzY1NjIzNzdjZmVkNTgzNzNkMWU0NmU2YTFmNmYyZDQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NTJkNGFlN2E4NGUxMGZjNDFkMDc5MTlmYWQ1MmRiNDE1MjE0NTM1IGIvZnV6emVyL2NvcnB1cy83NTJkNGFlN2E4NGUxMGZjNDFkMDc5MTlmYWQ1MmRiNDE1MjE0NTM1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3N2MwMmQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc1MmQ0YWU3YTg0ZTEwZmM0MWQwNzkxOWZhZDUyZGI0MTUyMTQ1MzUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NTM1MTMzMjdlZmM2ZGRlZThmMjgxNWIxNDM3NDhkYzBmODhiN2U4IGIvZnV6emVyL2NvcnB1cy83NTM1MTMzMjdlZmM2ZGRlZThmMjgxNWIxNDM3NDhkYzBmODhiN2U4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZTc4Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc1MzUxMzMyN2VmYzZkZGVlOGYyODE1YjE0Mzc0OGRjMGY4OGI3ZTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NTVlYzM2MzA1OGIzZDUzMjYwMjljMzVmYWZiNTlmZDEzYmRhZmNmIGIvZnV6emVyL2NvcnB1cy83NTVlYzM2MzA1OGIzZDUzMjYwMjljMzVmYWZiNTlmZDEzYmRhZmNmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MjYzNjAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc1NWVjMzYzMDU4YjNkNTMyNjAyOWMzNWZhZmI1OWZkMTNiZGFmY2YKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NTYxNTk5OGY5ZGFkNmFmNDdhMTZiOTQ5ZTBmNTk5OWFmYzZlYzJjIGIvZnV6emVyL2NvcnB1cy83NTYxNTk5OGY5ZGFkNmFmNDdhMTZiOTQ5ZTBmNTk5OWFmYzZlYzJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZGNmY2QKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc1NjE1OTk4ZjlkYWQ2YWY0N2ExNmI5NDllMGY1OTk5YWZjNmVjMmMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NTdmNGFhYzFjYjczMWIxZGIxYWE5MzNlMWI4ZjQ2OTVhMjM5NTUwIGIvZnV6emVyL2NvcnB1cy83NTdmNGFhYzFjYjczMWIxZGIxYWE5MzNlMWI4ZjQ2OTVhMjM5NTUwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlODYyMzQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc1N2Y0YWFjMWNiNzMxYjFkYjFhYTkzM2UxYjhmNDY5NWEyMzk1NTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NWFkNDBkZjlmYjEzNTY5MTY1YzQ1ODdhNjg2Yjg2MjRmNGY5MDJlIGIvZnV6emVyL2NvcnB1cy83NWFkNDBkZjlmYjEzNTY5MTY1YzQ1ODdhNjg2Yjg2MjRmNGY5MDJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNDBlMjMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc1YWQ0MGRmOWZiMTM1NjkxNjVjNDU4N2E2ODZiODYyNGY0ZjkwMmUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NWI5NmZlODc0NWIxZjgwZGJlM2E5MDljOGI4N2QwNzgwMjc5ZmU1IGIvZnV6emVyL2NvcnB1cy83NWI5NmZlODc0NWIxZjgwZGJlM2E5MDljOGI4N2QwNzgwMjc5ZmU1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNjAxNjAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc1Yjk2ZmU4NzQ1YjFmODBkYmUzYTkwOWM4Yjg3ZDA3ODAyNzlmZTUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NWQ0NWI5ZDlkM2U3YTVhNjAwMmIwMzAwY2ExNjBkMmRhNmY0NjVhIGIvZnV6emVyL2NvcnB1cy83NWQ0NWI5ZDlkM2U3YTVhNjAwMmIwMzAwY2ExNjBkMmRhNmY0NjVhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMDBmYmEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc1ZDQ1YjlkOWQzZTdhNWE2MDAyYjAzMDBjYTE2MGQyZGE2ZjQ2NWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NjE0OGNjZTRmMDJlNGU4ZjFkNWNlZDdlMzJlOTMyOTNmMjJiNjMxIGIvZnV6emVyL2NvcnB1cy83NjE0OGNjZTRmMDJlNGU4ZjFkNWNlZDdlMzJlOTMyOTNmMjJiNjMxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNTI3YWYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc2MTQ4Y2NlNGYwMmU0ZThmMWQ1Y2VkN2UzMmU5MzI5M2YyMmI2MzEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NjU2N2I5ODI5NmJmZDFhOWUwNDNhOGU3YWNmOGNmY2E1YTZkZTkwIGIvZnV6emVyL2NvcnB1cy83NjU2N2I5ODI5NmJmZDFhOWUwNDNhOGU3YWNmOGNmY2E1YTZkZTkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMjRlOTgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc2NTY3Yjk4Mjk2YmZkMWE5ZTA0M2E4ZTdhY2Y4Y2ZjYTVhNmRlOTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NjcyOTdhY2UwODlkM2VhMmJhZWVjNzdiOTgwMTg4MzU5NTQ5NDAxIGIvZnV6emVyL2NvcnB1cy83NjcyOTdhY2UwODlkM2VhMmJhZWVjNzdiOTgwMTg4MzU5NTQ5NDAxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNTQwOTMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc2NzI5N2FjZTA4OWQzZWEyYmFlZWM3N2I5ODAxODgzNTk1NDk0MDEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NmE0NTJjZTk5NWI4NDFkNDQxYzFhYWNjMWQzMWJlYjE1NzFmZDExIGIvZnV6emVyL2NvcnB1cy83NmE0NTJjZTk5NWI4NDFkNDQxYzFhYWNjMWQzMWJlYjE1NzFmZDExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzM2E1ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc2YTQ1MmNlOTk1Yjg0MWQ0NDFjMWFhY2MxZDMxYmViMTU3MWZkMTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NmMwNTEzMzBmZTMyZjQxYjJiNmNkNTgxNzhkMzVkN2I5MmM3NTk2IGIvZnV6emVyL2NvcnB1cy83NmMwNTEzMzBmZTMyZjQxYjJiNmNkNTgxNzhkMzVkN2I5MmM3NTk2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMTllZWQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc2YzA1MTMzMGZlMzJmNDFiMmI2Y2Q1ODE3OGQzNWQ3YjkyYzc1OTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NmNhMDg4NWI1MWQzMzBjMTRlNmI4ZTkxODhiMDY0Yjg4MWIxM2I1IGIvZnV6emVyL2NvcnB1cy83NmNhMDg4NWI1MWQzMzBjMTRlNmI4ZTkxODhiMDY0Yjg4MWIxM2I1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOTc3YzQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc2Y2EwODg1YjUxZDMzMGMxNGU2YjhlOTE4OGIwNjRiODgxYjEzYjUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NmNlMjUzYmFiMGRmNDAyNGY1OWI0ZmIzYjBmZGYxOTMyODVkOTk0IGIvZnV6emVyL2NvcnB1cy83NmNlMjUzYmFiMGRmNDAyNGY1OWI0ZmIzYjBmZGYxOTMyODVkOTk0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3Mjk5ODQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc2Y2UyNTNiYWIwZGY0MDI0ZjU5YjRmYjNiMGZkZjE5MzI4NWQ5OTQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NmZlMjRlODFkMGU1M2FjNWQ5NmM3NDYwMzA1MDYwOWIwNGUyZjRkIGIvZnV6emVyL2NvcnB1cy83NmZlMjRlODFkMGU1M2FjNWQ5NmM3NDYwMzA1MDYwOWIwNGUyZjRkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMWU0MTUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc2ZmUyNGU4MWQwZTUzYWM1ZDk2Yzc0NjAzMDUwNjA5YjA0ZTJmNGQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NmZmZGJmY2I4NTZmMWMwZTY3MGFjYTE4ZTdmNmExN2MyNjQ4NmVlIGIvZnV6emVyL2NvcnB1cy83NmZmZGJmY2I4NTZmMWMwZTY3MGFjYTE4ZTdmNmExN2MyNjQ4NmVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYWU0M2YKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc2ZmZkYmZjYjg1NmYxYzBlNjcwYWNhMThlN2Y2YTE3YzI2NDg2ZWUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NzBiNDU0N2YxMTExMWIzZGMxMjRkMGZiYmJhMjc3NTQ1Mzc4ZmZhIGIvZnV6emVyL2NvcnB1cy83NzBiNDU0N2YxMTExMWIzZGMxMjRkMGZiYmJhMjc3NTQ1Mzc4ZmZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMjg1YWIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc3MGI0NTQ3ZjExMTExYjNkYzEyNGQwZmJiYmEyNzc1NDUzNzhmZmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NzNlYjYzYzM2NzE0NTNhMDRkYjczNTY4YTI2OWIyMTRkOTgzYjFkIGIvZnV6emVyL2NvcnB1cy83NzNlYjYzYzM2NzE0NTNhMDRkYjczNTY4YTI2OWIyMTRkOTgzYjFkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkM2FlMGMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc3M2ViNjNjMzY3MTQ1M2EwNGRiNzM1NjhhMjY5YjIxNGQ5ODNiMWQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83NzUzMTAxZDliMjQ1NGZjNzI3ZjU5OWU0YzE2ZGUyOTQ5MGE1ZGEwIGIvZnV6emVyL2NvcnB1cy83NzUzMTAxZDliMjQ1NGZjNzI3ZjU5OWU0YzE2ZGUyOTQ5MGE1ZGEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMjk4YmIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc3NTMxMDFkOWIyNDU0ZmM3MjdmNTk5ZTRjMTZkZTI5NDkwYTVkYTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83Nzc5Njk5MDliYjE2ZTc0MjQwYzZjYTJjYTJkZWEyMTcwY2JhMTVjIGIvZnV6emVyL2NvcnB1cy83Nzc5Njk5MDliYjE2ZTc0MjQwYzZjYTJjYTJkZWEyMTcwY2JhMTVjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NGU5NDMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc3Nzk2OTkwOWJiMTZlNzQyNDBjNmNhMmNhMmRlYTIxNzBjYmExNWMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83Nzg2NTRmYzgyMGIxZGZhNGU0NWMyNzM4ZTc3NjJmYmM2YTMzYTU1IGIvZnV6emVyL2NvcnB1cy83Nzg2NTRmYzgyMGIxZGZhNGU0NWMyNzM4ZTc3NjJmYmM2YTMzYTU1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NzcwNmQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc3ODY1NGZjODIwYjFkZmE0ZTQ1YzI3MzhlNzc2MmZiYzZhMzNhNTUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83Nzg4MTdkMWE0NGMzZmJmYmY2MzZiOTlmNDNiMWMzOGVlNGZlMGFjIGIvZnV6emVyL2NvcnB1cy83Nzg4MTdkMWE0NGMzZmJmYmY2MzZiOTlmNDNiMWMzOGVlNGZlMGFjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MjY4YTUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc3ODgxN2QxYTQ0YzNmYmZiZjYzNmI5OWY0M2IxYzM4ZWU0ZmUwYWMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83N2E4ZTI5NzQ3MmFkMjgwNGQ2OWQwZWExZjhjMTkwMzhlMmY3YzAzIGIvZnV6emVyL2NvcnB1cy83N2E4ZTI5NzQ3MmFkMjgwNGQ2OWQwZWExZjhjMTkwMzhlMmY3YzAzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YWE1ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc3YThlMjk3NDcyYWQyODA0ZDY5ZDBlYTFmOGMxOTAzOGUyZjdjMDMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83N2RiNGNiODJmNjhmMWZiNjIwNGNmN2Y2MWE3OWU5MmE1MzJiNzUzIGIvZnV6emVyL2NvcnB1cy83N2RiNGNiODJmNjhmMWZiNjIwNGNmN2Y2MWE3OWU5MmE1MzJiNzUzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MWQyYjUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc3ZGI0Y2I4MmY2OGYxZmI2MjA0Y2Y3ZjYxYTc5ZTkyYTUzMmI3NTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83N2ZiMDA0ODg2NTVmYjM5ZjgxM2I3MDIxOTg2NmQ1ODQ5OTdhOTU3IGIvZnV6emVyL2NvcnB1cy83N2ZiMDA0ODg2NTVmYjM5ZjgxM2I3MDIxOTg2NmQ1ODQ5OTdhOTU3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYjA4ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc3ZmIwMDQ4ODY1NWZiMzlmODEzYjcwMjE5ODY2ZDU4NDk5N2E5NTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ODM5ZWYwMWVjY2Q5OTBjY2U3YWM0MWRjMWUxN2QyYTUzZmU1YjU1IGIvZnV6emVyL2NvcnB1cy83ODM5ZWYwMWVjY2Q5OTBjY2U3YWM0MWRjMWUxN2QyYTUzZmU1YjU1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5M2I3MTcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc4MzllZjAxZWNjZDk5MGNjZTdhYzQxZGMxZTE3ZDJhNTNmZTViNTUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ODUxMjY3YTkyMjM2ZDRiOGE1NmZmMzhlNDk0N2U0M2U1MzAwNWJhIGIvZnV6emVyL2NvcnB1cy83ODUxMjY3YTkyMjM2ZDRiOGE1NmZmMzhlNDk0N2U0M2U1MzAwNWJhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZDc3MTIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc4NTEyNjdhOTIyMzZkNGI4YTU2ZmYzOGU0OTQ3ZTQzZTUzMDA1YmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83OGU1NTczZDAyMjZiNjU5NjZkZjQ0OWVjNWE1ODZjMjY4MDg1NmU5IGIvZnV6emVyL2NvcnB1cy83OGU1NTczZDAyMjZiNjU5NjZkZjQ0OWVjNWE1ODZjMjY4MDg1NmU5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNWE2ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc4ZTU1NzNkMDIyNmI2NTk2NmRmNDQ5ZWM1YTU4NmMyNjgwODU2ZTkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83OGVmNDFiZDE5MDNmYjNkZjNmMjliYzZlNjRmM2FiNjhlOGQwYzBiIGIvZnV6emVyL2NvcnB1cy83OGVmNDFiZDE5MDNmYjNkZjNmMjliYzZlNjRmM2FiNjhlOGQwYzBiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NTI0NDYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc4ZWY0MWJkMTkwM2ZiM2RmM2YyOWJjNmU2NGYzYWI2OGU4ZDBjMGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83OTExYzhkZWY2YzUzNzUxZTkwZWYwMjJiNWU4MjYxMDQ0MzY2Yzk3IGIvZnV6emVyL2NvcnB1cy83OTExYzhkZWY2YzUzNzUxZTkwZWYwMjJiNWU4MjYxMDQ0MzY2Yzk3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmODA1MjUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc5MTFjOGRlZjZjNTM3NTFlOTBlZjAyMmI1ZTgyNjEwNDQzNjZjOTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83OTIxNjcxMzU2YTZhZmIwZmQ4MWQ0ZmE4NTU1ZjJhMGU0OTlhZjA4IGIvZnV6emVyL2NvcnB1cy83OTIxNjcxMzU2YTZhZmIwZmQ4MWQ0ZmE4NTU1ZjJhMGU0OTlhZjA4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMzNmZTAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc5MjE2NzEzNTZhNmFmYjBmZDgxZDRmYTg1NTVmMmEwZTQ5OWFmMDgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83OTYxM2FhMTZhZWEwNjdjNzdlMTc5ZWM0YzgzMDIyMDI3MDkwYmRjIGIvZnV6emVyL2NvcnB1cy83OTYxM2FhMTZhZWEwNjdjNzdlMTc5ZWM0YzgzMDIyMDI3MDkwYmRjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOTIyMzQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc5NjEzYWExNmFlYTA2N2M3N2UxNzllYzRjODMwMjIwMjcwOTBiZGMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83OTY5NWMwNzk5MDZhZTRlMzFiNDUxZGRhYjUyNTE2MWEyNTg2MzgwIGIvZnV6emVyL2NvcnB1cy83OTY5NWMwNzk5MDZhZTRlMzFiNDUxZGRhYjUyNTE2MWEyNTg2MzgwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNjA3ODAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc5Njk1YzA3OTkwNmFlNGUzMWI0NTFkZGFiNTI1MTYxYTI1ODYzODAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83OTdlMDZlNDQxNTZlZDExNzk3NTIwMTQwOGNhNjE0NmQyMDA0NDA1IGIvZnV6emVyL2NvcnB1cy83OTdlMDZlNDQxNTZlZDExNzk3NTIwMTQwOGNhNjE0NmQyMDA0NDA1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YzUxOGYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc5N2UwNmU0NDE1NmVkMTE3OTc1MjAxNDA4Y2E2MTQ2ZDIwMDQ0MDUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83OWEzMzc4ODAwNjI3NzJiMmU5NTA2YWY3YjE2YWQ1OTZiNzQ4NDkyIGIvZnV6emVyL2NvcnB1cy83OWEzMzc4ODAwNjI3NzJiMmU5NTA2YWY3YjE2YWQ1OTZiNzQ4NDkyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0N2FlMGYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc5YTMzNzg4MDA2Mjc3MmIyZTk1MDZhZjdiMTZhZDU5NmI3NDg0OTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83OWFkOTM3ZGM2M2FmM2E4NjYyZGM0ZDY2YzZiMThhMWMzYjg0MmU5IGIvZnV6emVyL2NvcnB1cy83OWFkOTM3ZGM2M2FmM2E4NjYyZGM0ZDY2YzZiMThhMWMzYjg0MmU5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZjc3YWEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc5YWQ5MzdkYzYzYWYzYTg2NjJkYzRkNjZjNmIxOGExYzNiODQyZTkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83OWM5YmNiMWQwY2M1NzAxMjUzNzA3MGE5MzgwMTg5ZWI2MWQ2YTdhIGIvZnV6emVyL2NvcnB1cy83OWM5YmNiMWQwY2M1NzAxMjUzNzA3MGE5MzgwMTg5ZWI2MWQ2YTdhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZDViMjkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc5YzliY2IxZDBjYzU3MDEyNTM3MDcwYTkzODAxODllYjYxZDZhN2EKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83OWQxYzNjOTgyYWYwMjNlYzkwMWU0OGJmNWZjY2VlZmZjNTI0OWRiIGIvZnV6emVyL2NvcnB1cy83OWQxYzNjOTgyYWYwMjNlYzkwMWU0OGJmNWZjY2VlZmZjNTI0OWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNWEzOTcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc5ZDFjM2M5ODJhZjAyM2VjOTAxZTQ4YmY1ZmNjZWVmZmM1MjQ5ZGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83OWQ1ZDhlOThkOWUzNzc3OGUyMDBmNWNlMzQ0M2RkZGY1ZDFlMDRkIGIvZnV6emVyL2NvcnB1cy83OWQ1ZDhlOThkOWUzNzc3OGUyMDBmNWNlMzQ0M2RkZGY1ZDFlMDRkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YWE2ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc5ZDVkOGU5OGQ5ZTM3Nzc4ZTIwMGY1Y2UzNDQzZGRkZjVkMWUwNGQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83OWVlZmRlZjQ2ZjIwMDE4MjIxNjBmYWIyYjMzMzA3Y2UyNDUxZWIyIGIvZnV6emVyL2NvcnB1cy83OWVlZmRlZjQ2ZjIwMDE4MjIxNjBmYWIyYjMzMzA3Y2UyNDUxZWIyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNTM1NmYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc5ZWVmZGVmNDZmMjAwMTgyMjE2MGZhYjJiMzMzMDdjZTI0NTFlYjIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83OWY4OWNkZjA0ODM4N2IzN2MyYzEwY2ViOTg4NWY2M2Y4MzA0ODg5IGIvZnV6emVyL2NvcnB1cy83OWY4OWNkZjA0ODM4N2IzN2MyYzEwY2ViOTg4NWY2M2Y4MzA0ODg5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NDg4OWQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzc5Zjg5Y2RmMDQ4Mzg3YjM3YzJjMTBjZWI5ODg1ZjYzZjgzMDQ4ODkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83YTA0NTZmNTZhZDA1NGQ5YmZlYzc5YzYzNTE2YjM4ZmIyODIyOWUzIGIvZnV6emVyL2NvcnB1cy83YTA0NTZmNTZhZDA1NGQ5YmZlYzc5YzYzNTE2YjM4ZmIyODIyOWUzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNTFjYTkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdhMDQ1NmY1NmFkMDU0ZDliZmVjNzljNjM1MTZiMzhmYjI4MjI5ZTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83YTE0ZThkZDVhNTdlM2UxYzNiMThiNmYyY2M3Y2E0NmFhYjBhMWViIGIvZnV6emVyL2NvcnB1cy83YTE0ZThkZDVhNTdlM2UxYzNiMThiNmYyY2M3Y2E0NmFhYjBhMWViCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YmRjZTgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdhMTRlOGRkNWE1N2UzZTFjM2IxOGI2ZjJjYzdjYTQ2YWFiMGExZWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83YTE2ZDIyOTBkODdlZmEyM2EwZDUwMDdkYmFkYTIwNGYxNmFjODQ0IGIvZnV6emVyL2NvcnB1cy83YTE2ZDIyOTBkODdlZmEyM2EwZDUwMDdkYmFkYTIwNGYxNmFjODQ0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZWQyNTQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdhMTZkMjI5MGQ4N2VmYTIzYTBkNTAwN2RiYWRhMjA0ZjE2YWM4NDQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83YTMyMTJhM2NjOTNiNDI1ZTZjNjBkMzAyNGUzMTkyMDZiNjViY2U0IGIvZnV6emVyL2NvcnB1cy83YTMyMTJhM2NjOTNiNDI1ZTZjNjBkMzAyNGUzMTkyMDZiNjViY2U0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzOWI5MTIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdhMzIxMmEzY2M5M2I0MjVlNmM2MGQzMDI0ZTMxOTIwNmI2NWJjZTQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83YTUyNWM4MGYyNjA2OTY3YmU2MDYzZDAzMThhODIzZGZlZDlmZTU2IGIvZnV6emVyL2NvcnB1cy83YTUyNWM4MGYyNjA2OTY3YmU2MDYzZDAzMThhODIzZGZlZDlmZTU2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNDE5YTUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdhNTI1YzgwZjI2MDY5NjdiZTYwNjNkMDMxOGE4MjNkZmVkOWZlNTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83YTg0Yzg4MTM5OTFjZTc5MDc0ZWI5YjNhMDY0NWY1NzViYzZmNjBjIGIvZnV6emVyL2NvcnB1cy83YTg0Yzg4MTM5OTFjZTc5MDc0ZWI5YjNhMDY0NWY1NzViYzZmNjBjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZjExMTcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdhODRjODgxMzk5MWNlNzkwNzRlYjliM2EwNjQ1ZjU3NWJjNmY2MGMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83YTg3NjhmNDg2NjgyMDdlYTVmYjQyZmQ2NDdkM2ZmNzY3YTk1NzM3IGIvZnV6emVyL2NvcnB1cy83YTg3NjhmNDg2NjgyMDdlYTVmYjQyZmQ2NDdkM2ZmNzY3YTk1NzM3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYjQ4OGIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdhODc2OGY0ODY2ODIwN2VhNWZiNDJmZDY0N2QzZmY3NjdhOTU3MzcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83YWEzOTllMjJjYjgwZTVmMjhmNDczMjQzYzk1NDhhOGYzMjVlOThlIGIvZnV6emVyL2NvcnB1cy83YWEzOTllMjJjYjgwZTVmMjhmNDczMjQzYzk1NDhhOGYzMjVlOThlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YTAwZjkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdhYTM5OWUyMmNiODBlNWYyOGY0NzMyNDNjOTU0OGE4ZjMyNWU5OGUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83YWE0YTEwZmE5MTE4Zjk0OWI5NDk1ZjM2YjVjNzAyNjYzM2IyN2MxIGIvZnV6emVyL2NvcnB1cy83YWE0YTEwZmE5MTE4Zjk0OWI5NDk1ZjM2YjVjNzAyNjYzM2IyN2MxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZGY2ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdhYTRhMTBmYTkxMThmOTQ5Yjk0OTVmMzZiNWM3MDI2NjMzYjI3YzEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83YWM1Y2ViNGFlZGEzODdiMGE3Y2MzZDEwZDE5NmExYjM4ZTA0MTg5IGIvZnV6emVyL2NvcnB1cy83YWM1Y2ViNGFlZGEzODdiMGE3Y2MzZDEwZDE5NmExYjM4ZTA0MTg5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZTIzYWUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdhYzVjZWI0YWVkYTM4N2IwYTdjYzNkMTBkMTk2YTFiMzhlMDQxODkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83YjAxNzNiOTRkMWFlNDNlMjkxZWY0MTI1OGFkNWJlMzNhOTQ2NThhIGIvZnV6emVyL2NvcnB1cy83YjAxNzNiOTRkMWFlNDNlMjkxZWY0MTI1OGFkNWJlMzNhOTQ2NThhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YjY4NWUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdiMDE3M2I5NGQxYWU0M2UyOTFlZjQxMjU4YWQ1YmUzM2E5NDY1OGEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83YjA5MmY1NTA1NWVjMzBkNjQxMGRiMDMzNDhkYjM5NGRlNDFkZjMzIGIvZnV6emVyL2NvcnB1cy83YjA5MmY1NTA1NWVjMzBkNjQxMGRiMDMzNDhkYjM5NGRlNDFkZjMzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ODYyNDQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdiMDkyZjU1MDU1ZWMzMGQ2NDEwZGIwMzM0OGRiMzk0ZGU0MWRmMzMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83YjE1MTczMWM3NjE2ZjRlMzk3MjNmZjZhNGY3MzM4ODQwOWZhNWVkIGIvZnV6emVyL2NvcnB1cy83YjE1MTczMWM3NjE2ZjRlMzk3MjNmZjZhNGY3MzM4ODQwOWZhNWVkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiN2JmYjMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdiMTUxNzMxYzc2MTZmNGUzOTcyM2ZmNmE0ZjczMzg4NDA5ZmE1ZWQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83YjE3Mjg2YTFhNWE2YWFhYTIyYjdiYWE1ZjE0NDcwZTI1Mjc1MjU5IGIvZnV6emVyL2NvcnB1cy83YjE3Mjg2YTFhNWE2YWFhYTIyYjdiYWE1ZjE0NDcwZTI1Mjc1MjU5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZmQxYmEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdiMTcyODZhMWE1YTZhYWFhMjJiN2JhYTVmMTQ0NzBlMjUyNzUyNTkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83YjNiNTI4ODY3OGQ0ZGM5NjhmNGZmMTgyNzY3MjIyMzc5ZmNhOTRkIGIvZnV6emVyL2NvcnB1cy83YjNiNTI4ODY3OGQ0ZGM5NjhmNGZmMTgyNzY3MjIyMzc5ZmNhOTRkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxODBjYWMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdiM2I1Mjg4Njc4ZDRkYzk2OGY0ZmYxODI3NjcyMjIzNzlmY2E5NGQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83YjNiYzA0YWFhMWZiYWIwNmI4NzgwYjIzMDA5ZWI5MTM0Mzg1YjU1IGIvZnV6emVyL2NvcnB1cy83YjNiYzA0YWFhMWZiYWIwNmI4NzgwYjIzMDA5ZWI5MTM0Mzg1YjU1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZTVkZTUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdiM2JjMDRhYWExZmJhYjA2Yjg3ODBiMjMwMDllYjkxMzQzODViNTUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83YjgyYWYxNjM3ZDliZjA4NWJmNDY5MWE0YzJmNjkzNTEwOWQ3MDYwIGIvZnV6emVyL2NvcnB1cy83YjgyYWYxNjM3ZDliZjA4NWJmNDY5MWE0YzJmNjkzNTEwOWQ3MDYwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NDA2ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdiODJhZjE2MzdkOWJmMDg1YmY0NjkxYTRjMmY2OTM1MTA5ZDcwNjAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83YjkwYzQ2ZmE5MjBmYjZlMzRmMzhkMjgwZjhhODE0ZDVmNzU1MmQzIGIvZnV6emVyL2NvcnB1cy83YjkwYzQ2ZmE5MjBmYjZlMzRmMzhkMjgwZjhhODE0ZDVmNzU1MmQzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNGMzMzQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdiOTBjNDZmYTkyMGZiNmUzNGYzOGQyODBmOGE4MTRkNWY3NTUyZDMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83YjkzNjhhZDg2ZjAzZmE5NjFiNzQ5ZTJhMmM0YTQ5NDg4ZWU4MDBmIGIvZnV6emVyL2NvcnB1cy83YjkzNjhhZDg2ZjAzZmE5NjFiNzQ5ZTJhMmM0YTQ5NDg4ZWU4MDBmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MTg2YzUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdiOTM2OGFkODZmMDNmYTk2MWI3NDllMmEyYzRhNDk0ODhlZTgwMGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83YmU4NmRhN2IwOTg4M2U5NThiNDMyNTE2OWJkNmE0NjgxNzI1ODFhIGIvZnV6emVyL2NvcnB1cy83YmU4NmRhN2IwOTg4M2U5NThiNDMyNTE2OWJkNmE0NjgxNzI1ODFhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxODU4OWUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdiZTg2ZGE3YjA5ODgzZTk1OGI0MzI1MTY5YmQ2YTQ2ODE3MjU4MWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83YzU1OWM3YTBhNzIzMzhiNjQyMTc2ZTA0NWE2OWEzZTE0YmNmMmIwIGIvZnV6emVyL2NvcnB1cy83YzU1OWM3YTBhNzIzMzhiNjQyMTc2ZTA0NWE2OWEzZTE0YmNmMmIwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MTY3ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdjNTU5YzdhMGE3MjMzOGI2NDIxNzZlMDQ1YTY5YTNlMTRiY2YyYjAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83YzZlZDgzNjRkMjQzYjQxNTBjYzU1MWI1OWZkYTU5MTNiYTQ1OWIxIGIvZnV6emVyL2NvcnB1cy83YzZlZDgzNjRkMjQzYjQxNTBjYzU1MWI1OWZkYTU5MTNiYTQ1OWIxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZGMyZmYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdjNmVkODM2NGQyNDNiNDE1MGNjNTUxYjU5ZmRhNTkxM2JhNDU5YjEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83Yzc4YTFhOTU5ZWU1OTM5Yzc0YTRiNzI0ZWYxMjBiNTY2ZTFkOWY5IGIvZnV6emVyL2NvcnB1cy83Yzc4YTFhOTU5ZWU1OTM5Yzc0YTRiNzI0ZWYxMjBiNTY2ZTFkOWY5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NzI3ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdjNzhhMWE5NTllZTU5MzljNzRhNGI3MjRlZjEyMGI1NjZlMWQ5ZjkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83YzlmMzE2ODhmM2FhYjEwZDVlZTI1MjAxMTJhZTRjNjQzZTlhOGYxIGIvZnV6emVyL2NvcnB1cy83YzlmMzE2ODhmM2FhYjEwZDVlZTI1MjAxMTJhZTRjNjQzZTlhOGYxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYTBhNTkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdjOWYzMTY4OGYzYWFiMTBkNWVlMjUyMDExMmFlNGM2NDNlOWE4ZjEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83Y2EzYmY1NjcxOThmNjNmN2ZlYWViNmU2ZjljZjM1YTY2YjI2MGNkIGIvZnV6emVyL2NvcnB1cy83Y2EzYmY1NjcxOThmNjNmN2ZlYWViNmU2ZjljZjM1YTY2YjI2MGNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMzU1N2UKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdjYTNiZjU2NzE5OGY2M2Y3ZmVhZWI2ZTZmOWNmMzVhNjZiMjYwY2QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83Y2IzY2NkZTllN2M2OWM2MTNmNmJjMDM5MDRmYjI3NDJmZWZkODVkIGIvZnV6emVyL2NvcnB1cy83Y2IzY2NkZTllN2M2OWM2MTNmNmJjMDM5MDRmYjI3NDJmZWZkODVkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMmE4ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdjYjNjY2RlOWU3YzY5YzYxM2Y2YmMwMzkwNGZiMjc0MmZlZmQ4NWQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83Y2YzZTgwMWIxZWJiYTBlNGViNmZjYTAwZWZjZmNhZmY2MTBlY2JkIGIvZnV6emVyL2NvcnB1cy83Y2YzZTgwMWIxZWJiYTBlNGViNmZjYTAwZWZjZmNhZmY2MTBlY2JkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYTNjNmQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdjZjNlODAxYjFlYmJhMGU0ZWI2ZmNhMDBlZmNmY2FmZjYxMGVjYmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZDE4ZWQzNmY1YjMxNjJjMTVjZmIzNTY0YTJmMWI5NmRhZDIxMzFlIGIvZnV6emVyL2NvcnB1cy83ZDE4ZWQzNmY1YjMxNjJjMTVjZmIzNTY0YTJmMWI5NmRhZDIxMzFlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YTFkYmEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdkMThlZDM2ZjViMzE2MmMxNWNmYjM1NjRhMmYxYjk2ZGFkMjEzMWUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZDcwMzg3YzgxNzk1NzNjMGYxMDQzNDYwMzIwZThlODRjNDU2NDBlIGIvZnV6emVyL2NvcnB1cy83ZDcwMzg3YzgxNzk1NzNjMGYxMDQzNDYwMzIwZThlODRjNDU2NDBlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZjAyMjgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdkNzAzODdjODE3OTU3M2MwZjEwNDM0NjAzMjBlOGU4NGM0NTY0MGUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZDdkYTZjYjkxMDJjMGVkODlmZjhlYzlkNTk1ZWQzYjI2MDFlYjA1IGIvZnV6emVyL2NvcnB1cy83ZDdkYTZjYjkxMDJjMGVkODlmZjhlYzlkNTk1ZWQzYjI2MDFlYjA1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MGMyOTIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdkN2RhNmNiOTEwMmMwZWQ4OWZmOGVjOWQ1OTVlZDNiMjYwMWViMDUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZDliZmNhYWRhMmIxNzAyNTViY2QwZWYyZTRiODkyMWFiYjQxNzc5IGIvZnV6emVyL2NvcnB1cy83ZDliZmNhYWRhMmIxNzAyNTViY2QwZWYyZTRiODkyMWFiYjQxNzc5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2OTdmNzIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdkOWJmY2FhZGEyYjE3MDI1NWJjZDBlZjJlNGI4OTIxYWJiNDE3NzkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZGI0ZjU1OTE4MDFhNDhjOWI4YTE1NzVhZTBjZGE1NGVhYWVlYjQ3IGIvZnV6emVyL2NvcnB1cy83ZGI0ZjU1OTE4MDFhNDhjOWI4YTE1NzVhZTBjZGE1NGVhYWVlYjQ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YjIwNzMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdkYjRmNTU5MTgwMWE0OGM5YjhhMTU3NWFlMGNkYTU0ZWFhZWViNDcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZGJmZjMyYmUzZDNkZmRmNGNjNjg5M2M2Mzk2OWE2YzMxNTg3ZDZjIGIvZnV6emVyL2NvcnB1cy83ZGJmZjMyYmUzZDNkZmRmNGNjNjg5M2M2Mzk2OWE2YzMxNTg3ZDZjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYzM2ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdkYmZmMzJiZTNkM2RmZGY0Y2M2ODkzYzYzOTY5YTZjMzE1ODdkNmMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZGM0NDI4M2NmOWNkMmZhYjIwOGVlNGEyZDg1M2Q0NTFiYTM0Yzk2IGIvZnV6emVyL2NvcnB1cy83ZGM0NDI4M2NmOWNkMmZhYjIwOGVlNGEyZDg1M2Q0NTFiYTM0Yzk2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMTlhNzgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdkYzQ0MjgzY2Y5Y2QyZmFiMjA4ZWU0YTJkODUzZDQ1MWJhMzRjOTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZGQzN2MzYWNkNWE5MzBiYzU1MTA3NWYzNmYxN2Y3M2M0YTBjNThhIGIvZnV6emVyL2NvcnB1cy83ZGQzN2MzYWNkNWE5MzBiYzU1MTA3NWYzNmYxN2Y3M2M0YTBjNThhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYWU3YWUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdkZDM3YzNhY2Q1YTkzMGJjNTUxMDc1ZjM2ZjE3ZjczYzRhMGM1OGEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZGRhNDNlODZhMmNjNmVjM2FkNTczODAzNjg1YjZmNjk5ZjY4ZTU4IGIvZnV6emVyL2NvcnB1cy83ZGRhNDNlODZhMmNjNmVjM2FkNTczODAzNjg1YjZmNjk5ZjY4ZTU4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4YzkwNTgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdkZGE0M2U4NmEyY2M2ZWMzYWQ1NzM4MDM2ODViNmY2OTlmNjhlNTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZGU0NWUyMGNkMzg0YWQzYzk5OWYwMTJhYjY5MGQxOTBiNGI5OWM3IGIvZnV6emVyL2NvcnB1cy83ZGU0NWUyMGNkMzg0YWQzYzk5OWYwMTJhYjY5MGQxOTBiNGI5OWM3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZGI2MGUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdkZTQ1ZTIwY2QzODRhZDNjOTk5ZjAxMmFiNjkwZDE5MGI0Yjk5YzcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZGVkNDk2ZmQ1MzEyODdkM2FhZTVkYmI1MzcyZTcwMDg4MDlhZWZmIGIvZnV6emVyL2NvcnB1cy83ZGVkNDk2ZmQ1MzEyODdkM2FhZTVkYmI1MzcyZTcwMDg4MDlhZWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYTFhNmUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdkZWQ0OTZmZDUzMTI4N2QzYWFlNWRiYjUzNzJlNzAwODgwOWFlZmYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZGZjMWIyYzVjOWM2Mzk1YTcyZDZmMzMyMjczZTE5OThkMzI0ZGM4IGIvZnV6emVyL2NvcnB1cy83ZGZjMWIyYzVjOWM2Mzk1YTcyZDZmMzMyMjczZTE5OThkMzI0ZGM4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MWNiNTUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdkZmMxYjJjNWM5YzYzOTVhNzJkNmYzMzIyNzNlMTk5OGQzMjRkYzgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZTBjMjZmZmEwOTBiOGMxZjZiN2I1NGQwNjkxZjIwY2YzMTIwMDY1IGIvZnV6emVyL2NvcnB1cy83ZTBjMjZmZmEwOTBiOGMxZjZiN2I1NGQwNjkxZjIwY2YzMTIwMDY1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NzNmMGQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdlMGMyNmZmYTA5MGI4YzFmNmI3YjU0ZDA2OTFmMjBjZjMxMjAwNjUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZTFkOGM5Y2VhYjY4NjkzNzAwZWQ4N2M3NjZkODJiZWYxNjI5ZDlkIGIvZnV6emVyL2NvcnB1cy83ZTFkOGM5Y2VhYjY4NjkzNzAwZWQ4N2M3NjZkODJiZWYxNjI5ZDlkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMWY5MDMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdlMWQ4YzljZWFiNjg2OTM3MDBlZDg3Yzc2NmQ4MmJlZjE2MjlkOWQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZTQyMWZjODAyMzQyMzJkZjYxNTI2NjJhMDc2Y2FiMDlhZWVjNjc3IGIvZnV6emVyL2NvcnB1cy83ZTQyMWZjODAyMzQyMzJkZjYxNTI2NjJhMDc2Y2FiMDlhZWVjNjc3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYmM4MDQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdlNDIxZmM4MDIzNDIzMmRmNjE1MjY2MmEwNzZjYWIwOWFlZWM2NzcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZTRhYmRkMTFiZWNiMzNhMGRlNWJmOGIzNTQxZjA2MjMyNTI4ZGMyIGIvZnV6emVyL2NvcnB1cy83ZTRhYmRkMTFiZWNiMzNhMGRlNWJmOGIzNTQxZjA2MjMyNTI4ZGMyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NDJmZTcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdlNGFiZGQxMWJlY2IzM2EwZGU1YmY4YjM1NDFmMDYyMzI1MjhkYzIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZTRlOGZkMDhlODRmZTg1OGY0YjQyODU4NTBlOTc1OTI2MWE2OGNiIGIvZnV6emVyL2NvcnB1cy83ZTRlOGZkMDhlODRmZTg1OGY0YjQyODU4NTBlOTc1OTI2MWE2OGNiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2OTFmNzYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdlNGU4ZmQwOGU4NGZlODU4ZjRiNDI4NTg1MGU5NzU5MjYxYTY4Y2IKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZTYyNmM1ODI4YmY4Nzc5MGRhMTljMzIyYmI4NDkyY2U0NWNlOGUwIGIvZnV6emVyL2NvcnB1cy83ZTYyNmM1ODI4YmY4Nzc5MGRhMTljMzIyYmI4NDkyY2U0NWNlOGUwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZjIzMmUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdlNjI2YzU4MjhiZjg3NzkwZGExOWMzMjJiYjg0OTJjZTQ1Y2U4ZTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZThmZWNmNWFmMmU4YzAwYzc5ZjE0YzEzNmE5MTIxNGI0NDA2YmEzIGIvZnV6emVyL2NvcnB1cy83ZThmZWNmNWFmMmU4YzAwYzc5ZjE0YzEzNmE5MTIxNGI0NDA2YmEzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZTk3MjgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdlOGZlY2Y1YWYyZThjMDBjNzlmMTRjMTM2YTkxMjE0YjQ0MDZiYTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZWEyZjczMjI1ZmJiY2NkMjliNWY2YmFlNGI3OTNkNzNmNzQwMjFlIGIvZnV6emVyL2NvcnB1cy83ZWEyZjczMjI1ZmJiY2NkMjliNWY2YmFlNGI3OTNkNzNmNzQwMjFlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNmRlMDQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdlYTJmNzMyMjVmYmJjY2QyOWI1ZjZiYWU0Yjc5M2Q3M2Y3NDAyMWUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZWM3NGU1YmNkMWU4Mzg5MGNhOTZhNGQwYTQ2NTkxMGZjODg3NWM1IGIvZnV6emVyL2NvcnB1cy83ZWM3NGU1YmNkMWU4Mzg5MGNhOTZhNGQwYTQ2NTkxMGZjODg3NWM1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYTJmMzMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdlYzc0ZTViY2QxZTgzODkwY2E5NmE0ZDBhNDY1OTEwZmM4ODc1YzUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZWQyZTg1ZDY1Mzk5M2MwNmFiZDQ2Y2VhNzlkYmY1OGMxZWQ3YzkyIGIvZnV6emVyL2NvcnB1cy83ZWQyZTg1ZDY1Mzk5M2MwNmFiZDQ2Y2VhNzlkYmY1OGMxZWQ3YzkyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYzQ0NzEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdlZDJlODVkNjUzOTkzYzA2YWJkNDZjZWE3OWRiZjU4YzFlZDdjOTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZWU3NGUxZDI3YWQ4MmQ5ODZhODdjMGIwZTE4YjNhNjJkOGNiN2NmIGIvZnV6emVyL2NvcnB1cy83ZWU3NGUxZDI3YWQ4MmQ5ODZhODdjMGIwZTE4YjNhNjJkOGNiN2NmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlODM1ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdlZTc0ZTFkMjdhZDgyZDk4NmE4N2MwYjBlMThiM2E2MmQ4Y2I3Y2YKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZjFiNDQ5NzA3MjRjZmI1ZTAxM2I1ZGUxOTBhZDg5ODA2OTQ0N2VmIGIvZnV6emVyL2NvcnB1cy83ZjFiNDQ5NzA3MjRjZmI1ZTAxM2I1ZGUxOTBhZDg5ODA2OTQ0N2VmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNWYwZjUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdmMWI0NDk3MDcyNGNmYjVlMDEzYjVkZTE5MGFkODk4MDY5NDQ3ZWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZjIxZDc5MmI4NGZlYjk2OWE1ODhhYjg3MDFjM2M0NDYwMjU2MzljIGIvZnV6emVyL2NvcnB1cy83ZjIxZDc5MmI4NGZlYjk2OWE1ODhhYjg3MDFjM2M0NDYwMjU2MzljCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZDU4YjQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdmMjFkNzkyYjg0ZmViOTY5YTU4OGFiODcwMWMzYzQ0NjAyNTYzOWMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZjM2NDQzOGUyODY3OTUxZGMxNDQ2Mzk1NjRiYWM5ODhlMjEwOTJmIGIvZnV6emVyL2NvcnB1cy83ZjM2NDQzOGUyODY3OTUxZGMxNDQ2Mzk1NjRiYWM5ODhlMjEwOTJmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjYmUyMzAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdmMzY0NDM4ZTI4Njc5NTFkYzE0NDYzOTU2NGJhYzk4OGUyMTA5MmYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZjRiN2IwNDJhNTcxNjljZDFhZTFiMjg5ZDhjMmJlOGMwZTE4YjkxIGIvZnV6emVyL2NvcnB1cy83ZjRiN2IwNDJhNTcxNjljZDFhZTFiMjg5ZDhjMmJlOGMwZTE4YjkxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MzE0ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdmNGI3YjA0MmE1NzE2OWNkMWFlMWIyODlkOGMyYmU4YzBlMThiOTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZjVlOWNmZjNjNzBiYjc0NDM0YjlhNmRlMDUwZTMyMGRhMzQxYWJjIGIvZnV6emVyL2NvcnB1cy83ZjVlOWNmZjNjNzBiYjc0NDM0YjlhNmRlMDUwZTMyMGRhMzQxYWJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZTIyOTEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdmNWU5Y2ZmM2M3MGJiNzQ0MzRiOWE2ZGUwNTBlMzIwZGEzNDFhYmMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZjY1MTUxMjYzYzIxYjkyODI5YWZiYzQ4NzIwYjM5NjczNWM2MjVjIGIvZnV6emVyL2NvcnB1cy83ZjY1MTUxMjYzYzIxYjkyODI5YWZiYzQ4NzIwYjM5NjczNWM2MjVjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNGI3MGMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdmNjUxNTEyNjNjMjFiOTI4MjlhZmJjNDg3MjBiMzk2NzM1YzYyNWMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83Zjk0ZGIzNzk3OGUzZDFjYmExNWY2YjM0MDg0OWM4MTVhZTEyZjdhIGIvZnV6emVyL2NvcnB1cy83Zjk0ZGIzNzk3OGUzZDFjYmExNWY2YjM0MDg0OWM4MTVhZTEyZjdhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMmExODUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdmOTRkYjM3OTc4ZTNkMWNiYTE1ZjZiMzQwODQ5YzgxNWFlMTJmN2EKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZmU1YjgzM2E2MDAyZGNjMGEzM2Y5YWU2NmE4YjRjNzRmODdlZWFmIGIvZnV6emVyL2NvcnB1cy83ZmU1YjgzM2E2MDAyZGNjMGEzM2Y5YWU2NmE4YjRjNzRmODdlZWFmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MjRmMmMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdmZTViODMzYTYwMDJkY2MwYTMzZjlhZTY2YThiNGM3NGY4N2VlYWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZmY2OTJmNDE2NmQ5ZGJmOTJlMzgzMDMyNGVlNTRiNTJkYmEyY2ZkIGIvZnV6emVyL2NvcnB1cy83ZmY2OTJmNDE2NmQ5ZGJmOTJlMzgzMDMyNGVlNTRiNTJkYmEyY2ZkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5Yzk0ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdmZjY5MmY0MTY2ZDlkYmY5MmUzODMwMzI0ZWU1NGI1MmRiYTJjZmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy83ZmY3Nzk1NmEzMTYwZDFhZDgwYTAzOWRkOTgxNTUzYTgyZTA5ZTZiIGIvZnV6emVyL2NvcnB1cy83ZmY3Nzk1NmEzMTYwZDFhZDgwYTAzOWRkOTgxNTUzYTgyZTA5ZTZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4OWM3NTcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzdmZjc3OTU2YTMxNjBkMWFkODBhMDM5ZGQ5ODE1NTNhODJlMDllNmIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84MDFlOWNjZDEzNTczNjQwY2NkYzhmMGIzNmI3NWI1MTAxOWZiOTUwIGIvZnV6emVyL2NvcnB1cy84MDFlOWNjZDEzNTczNjQwY2NkYzhmMGIzNmI3NWI1MTAxOWZiOTUwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNGIxM2YKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgwMWU5Y2NkMTM1NzM2NDBjY2RjOGYwYjM2Yjc1YjUxMDE5ZmI5NTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84MDIxMmM3MWU4YzZmOGVmZTg2YzQzOTM0MTRhYWViNjc3YzdkY2EyIGIvZnV6emVyL2NvcnB1cy84MDIxMmM3MWU4YzZmOGVmZTg2YzQzOTM0MTRhYWViNjc3YzdkY2EyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2OTk1YzkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgwMjEyYzcxZThjNmY4ZWZlODZjNDM5MzQxNGFhZWI2NzdjN2RjYTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84MDQ1YzFjNDY4Mzg3ZjUyZGZiYzliY2YyNGJlNTY5MjYyN2NkZDViIGIvZnV6emVyL2NvcnB1cy84MDQ1YzFjNDY4Mzg3ZjUyZGZiYzliY2YyNGJlNTY5MjYyN2NkZDViCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4Y2U1MTMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgwNDVjMWM0NjgzODdmNTJkZmJjOWJjZjI0YmU1NjkyNjI3Y2RkNWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84MDZmMjk2YTJjOTFhZjViYTA3NDcxNGVlY2YyMWU2ZDg1MGIxYWZjIGIvZnV6emVyL2NvcnB1cy84MDZmMjk2YTJjOTFhZjViYTA3NDcxNGVlY2YyMWU2ZDg1MGIxYWZjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NGFlMDUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgwNmYyOTZhMmM5MWFmNWJhMDc0NzE0ZWVjZjIxZTZkODUwYjFhZmMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84MDhjZjU2YmQzMDZmZjNjMWU4ODZhNTk1MGY5NTNlZGEzNTE0Nzc3IGIvZnV6emVyL2NvcnB1cy84MDhjZjU2YmQzMDZmZjNjMWU4ODZhNTk1MGY5NTNlZGEzNTE0Nzc3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNTk4OGYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgwOGNmNTZiZDMwNmZmM2MxZTg4NmE1OTUwZjk1M2VkYTM1MTQ3NzcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84MTNjNzhmY2Q1YzM4YmM2Zjc3MDYxNmEzM2U3NmY3ZWYwOGQzMjMxIGIvZnV6emVyL2NvcnB1cy84MTNjNzhmY2Q1YzM4YmM2Zjc3MDYxNmEzM2U3NmY3ZWYwOGQzMjMxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZGRhNzMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgxM2M3OGZjZDVjMzhiYzZmNzcwNjE2YTMzZTc2ZjdlZjA4ZDMyMzEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84MTU2NTZkMDczZGRlYWVkNGI5NTE1NDFhYjU5ZTA1NGEyNDhhYTA0IGIvZnV6emVyL2NvcnB1cy84MTU2NTZkMDczZGRlYWVkNGI5NTE1NDFhYjU5ZTA1NGEyNDhhYTA0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NzY2MDcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgxNTY1NmQwNzNkZGVhZWQ0Yjk1MTU0MWFiNTllMDU0YTI0OGFhMDQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84MTczNzAxNWQwYThjMzc5NGNiNTljMjE0NzgxNDVjOTc2NDhjYmM3IGIvZnV6emVyL2NvcnB1cy84MTczNzAxNWQwYThjMzc5NGNiNTljMjE0NzgxNDVjOTc2NDhjYmM3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNDIwNjgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgxNzM3MDE1ZDBhOGMzNzk0Y2I1OWMyMTQ3ODE0NWM5NzY0OGNiYzcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84MTdhOGNhMTk3ZmRiNjY0NzU5ZDFmMjdkMjAwMTg3NTkyNmY2ODJiIGIvZnV6emVyL2NvcnB1cy84MTdhOGNhMTk3ZmRiNjY0NzU5ZDFmMjdkMjAwMTg3NTkyNmY2ODJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYjdkNjUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgxN2E4Y2ExOTdmZGI2NjQ3NTlkMWYyN2QyMDAxODc1OTI2ZjY4MmIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84MWEyMjkyMTM0ZWZiYTA1OWQzNzFlNzgzYTc3N2QxYmU0MjFjNjM4IGIvZnV6emVyL2NvcnB1cy84MWEyMjkyMTM0ZWZiYTA1OWQzNzFlNzgzYTc3N2QxYmU0MjFjNjM4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MGYwZmIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgxYTIyOTIxMzRlZmJhMDU5ZDM3MWU3ODNhNzc3ZDFiZTQyMWM2MzgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84MWE1NjAxY2NkYTIxZjI1YmFiNjVjYTM3MGFiNmNhZDMyNjcwNjBlIGIvZnV6emVyL2NvcnB1cy84MWE1NjAxY2NkYTIxZjI1YmFiNjVjYTM3MGFiNmNhZDMyNjcwNjBlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZWZkYzkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgxYTU2MDFjY2RhMjFmMjViYWI2NWNhMzcwYWI2Y2FkMzI2NzA2MGUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84MWMxNDc2OWIxNjg3ZTMxMWNhNjgxN2UwZTg4NGZiNWU3YWE0ZjAwIGIvZnV6emVyL2NvcnB1cy84MWMxNDc2OWIxNjg3ZTMxMWNhNjgxN2UwZTg4NGZiNWU3YWE0ZjAwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMzQwOWEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgxYzE0NzY5YjE2ODdlMzExY2E2ODE3ZTBlODg0ZmI1ZTdhYTRmMDAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84MWQyNjRmOTliYTE1MjM1ZmI0MWFmMDc3NDMzZWUwZTVjYmNmY2U5IGIvZnV6emVyL2NvcnB1cy84MWQyNjRmOTliYTE1MjM1ZmI0MWFmMDc3NDMzZWUwZTVjYmNmY2U5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MTI3MjQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgxZDI2NGY5OWJhMTUyMzVmYjQxYWYwNzc0MzNlZTBlNWNiY2ZjZTkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84MWQyYTIwZWFlNGQ2MzlkZDViYTI1ZTUyZTZkYTA0ZTg1ZGEyNDE2IGIvZnV6emVyL2NvcnB1cy84MWQyYTIwZWFlNGQ2MzlkZDViYTI1ZTUyZTZkYTA0ZTg1ZGEyNDE2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMWQzNGIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgxZDJhMjBlYWU0ZDYzOWRkNWJhMjVlNTJlNmRhMDRlODVkYTI0MTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84MWQ3NGUyMjg5MzZjYWJiYzZjNDc0NjdlNDY0MGM3N2M1ZDQ5MDZmIGIvZnV6emVyL2NvcnB1cy84MWQ3NGUyMjg5MzZjYWJiYzZjNDc0NjdlNDY0MGM3N2M1ZDQ5MDZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMGMyZjcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgxZDc0ZTIyODkzNmNhYmJjNmM0NzQ2N2U0NjQwYzc3YzVkNDkwNmYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84MjJmMDAxZGMzNDhkNDQ4ZWU1M2FlOTkxYjk0ZmM5YzRiNDU3MGZiIGIvZnV6emVyL2NvcnB1cy84MjJmMDAxZGMzNDhkNDQ4ZWU1M2FlOTkxYjk0ZmM5YzRiNDU3MGZiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0N2NhYTgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgyMmYwMDFkYzM0OGQ0NDhlZTUzYWU5OTFiOTRmYzljNGI0NTcwZmIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84MjNkYzY0NDliYjBlMzVhOWNiZTU3ZjRmZGRkZTVmMTUwZTA0MzFjIGIvZnV6emVyL2NvcnB1cy84MjNkYzY0NDliYjBlMzVhOWNiZTU3ZjRmZGRkZTVmMTUwZTA0MzFjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NDA1ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgyM2RjNjQ0OWJiMGUzNWE5Y2JlNTdmNGZkZGRlNWYxNTBlMDQzMWMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84MjcyNjQ1ODNiYzlkOGNiYmU0NDU5MzA2ZjI5NTVhODkyNGExYjE2IGIvZnV6emVyL2NvcnB1cy84MjcyNjQ1ODNiYzlkOGNiYmU0NDU5MzA2ZjI5NTVhODkyNGExYjE2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMDUwYmMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgyNzI2NDU4M2JjOWQ4Y2JiZTQ0NTkzMDZmMjk1NWE4OTI0YTFiMTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84MjkxOTRmZDFmZTY3NGI0ZWYyMWFmN2MyZGU2OWRiYmM1NDE5ZTJiIGIvZnV6emVyL2NvcnB1cy84MjkxOTRmZDFmZTY3NGI0ZWYyMWFmN2MyZGU2OWRiYmM1NDE5ZTJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMzNmOTkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgyOTE5NGZkMWZlNjc0YjRlZjIxYWY3YzJkZTY5ZGJiYzU0MTllMmIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84MzI5NWU5YmViOTY1ZDUxYmNhNDM0OTk5ZjkwYjRkZDMwODhlYTkwIGIvZnV6emVyL2NvcnB1cy84MzI5NWU5YmViOTY1ZDUxYmNhNDM0OTk5ZjkwYjRkZDMwODhlYTkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZDY0NzIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgzMjk1ZTliZWI5NjVkNTFiY2E0MzQ5OTlmOTBiNGRkMzA4OGVhOTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84MzJjZTQ4ZDNhYzFjOWQxODdlOTM3NmUyMDNlMmFiZjNjMmJmZTgzIGIvZnV6emVyL2NvcnB1cy84MzJjZTQ4ZDNhYzFjOWQxODdlOTM3NmUyMDNlMmFiZjNjMmJmZTgzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMmRjOWUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgzMmNlNDhkM2FjMWM5ZDE4N2U5Mzc2ZTIwM2UyYWJmM2MyYmZlODMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84MzQzZjMwODg2N2E1MTBjODA2NjNhMWNjNWQ2ZDlmNWZhYWEyZTRmIGIvZnV6emVyL2NvcnB1cy84MzQzZjMwODg2N2E1MTBjODA2NjNhMWNjNWQ2ZDlmNWZhYWEyZTRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZTczMTEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgzNDNmMzA4ODY3YTUxMGM4MDY2M2ExY2M1ZDZkOWY1ZmFhYTJlNGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84MzU3YzY1ZGZhNzIzZjk5M2E3YWRjNDQzNWRhYjJlODY5ZmI2Mzg1IGIvZnV6emVyL2NvcnB1cy84MzU3YzY1ZGZhNzIzZjk5M2E3YWRjNDQzNWRhYjJlODY5ZmI2Mzg1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZTAwMTQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgzNTdjNjVkZmE3MjNmOTkzYTdhZGM0NDM1ZGFiMmU4NjlmYjYzODUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84MzY4MTI4YmU3Mjk5NDk5ZDQ3ZmQ4MjBhMzNlMjJiYTAzZjBmMzQ2IGIvZnV6emVyL2NvcnB1cy84MzY4MTI4YmU3Mjk5NDk5ZDQ3ZmQ4MjBhMzNlMjJiYTAzZjBmMzQ2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZTQ2N2IKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgzNjgxMjhiZTcyOTk0OTlkNDdmZDgyMGEzM2UyMmJhMDNmMGYzNDYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84MzZlOGE4NmI3NGQ5ODNmMmViZGY0NGNjZjg5YWFmYjQzYmU2NzI4IGIvZnV6emVyL2NvcnB1cy84MzZlOGE4NmI3NGQ5ODNmMmViZGY0NGNjZjg5YWFmYjQzYmU2NzI4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMjJkMWMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgzNmU4YTg2Yjc0ZDk4M2YyZWJkZjQ0Y2NmODlhYWZiNDNiZTY3MjgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84MzhmYjc1MTVjNDJjYzk5MDExN2ZjNGNkOWFlZTRlNWU1OTAyOTAxIGIvZnV6emVyL2NvcnB1cy84MzhmYjc1MTVjNDJjYzk5MDExN2ZjNGNkOWFlZTRlNWU1OTAyOTAxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMmQ1NWMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgzOGZiNzUxNWM0MmNjOTkwMTE3ZmM0Y2Q5YWVlNGU1ZTU5MDI5MDEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84MzliZDdmMzA4N2I2ZWY5N2ViNDAzYWQ4ZjljNTBkZGU2MTEzMDMzIGIvZnV6emVyL2NvcnB1cy84MzliZDdmMzA4N2I2ZWY5N2ViNDAzYWQ4ZjljNTBkZGU2MTEzMDMzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMDY1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgzOWJkN2YzMDg3YjZlZjk3ZWI0MDNhZDhmOWM1MGRkZTYxMTMwMzMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84M2FhZjY1NmM5Y2VjMzFhYmYxZGYxOGU1OTAxYTRjMWVjNTE0ZDFkIGIvZnV6emVyL2NvcnB1cy84M2FhZjY1NmM5Y2VjMzFhYmYxZGYxOGU1OTAxYTRjMWVjNTE0ZDFkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YmFiZWMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgzYWFmNjU2YzljZWMzMWFiZjFkZjE4ZTU5MDFhNGMxZWM1MTRkMWQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84M2FjM2JmODI3MWYwNmU2OTkwZDk3MTJlMzJjNjJjMDE0YzkxYWFkIGIvZnV6emVyL2NvcnB1cy84M2FjM2JmODI3MWYwNmU2OTkwZDk3MTJlMzJjNjJjMDE0YzkxYWFkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2OWMyNzcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgzYWMzYmY4MjcxZjA2ZTY5OTBkOTcxMmUzMmM2MmMwMTRjOTFhYWQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84M2MyYzhlOGQyZGFiMzU4NzEwN2I1NjRiZTJiZmRmNzcyMzk0MzllIGIvZnV6emVyL2NvcnB1cy84M2MyYzhlOGQyZGFiMzU4NzEwN2I1NjRiZTJiZmRmNzcyMzk0MzllCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZmVlZjAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgzYzJjOGU4ZDJkYWIzNTg3MTA3YjU2NGJlMmJmZGY3NzIzOTQzOWUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84M2NlYjM3ZTA5MTFjMWVhMzQwY2ZlMDZhYWU5NmM5NzkyYzBlZTJkIGIvZnV6emVyL2NvcnB1cy84M2NlYjM3ZTA5MTFjMWVhMzQwY2ZlMDZhYWU5NmM5NzkyYzBlZTJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNTM5Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgzY2ViMzdlMDkxMWMxZWEzNDBjZmUwNmFhZTk2Yzk3OTJjMGVlMmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84M2ZmNmE5N2E3NjM3OWRiYzcwNWNiMmE2NDlkY2FmZDNlYzU4MDBlIGIvZnV6emVyL2NvcnB1cy84M2ZmNmE5N2E3NjM3OWRiYzcwNWNiMmE2NDlkY2FmZDNlYzU4MDBlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMTkyMDIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzgzZmY2YTk3YTc2Mzc5ZGJjNzA1Y2IyYTY0OWRjYWZkM2VjNTgwMGUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NDE2OTU0MWRlYTQyYTllYWQ0OGEwNTQ2N2M4N2U0NzZkYTVhNDIzIGIvZnV6emVyL2NvcnB1cy84NDE2OTU0MWRlYTQyYTllYWQ0OGEwNTQ2N2M4N2U0NzZkYTVhNDIzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMWUzYWYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg0MTY5NTQxZGVhNDJhOWVhZDQ4YTA1NDY3Yzg3ZTQ3NmRhNWE0MjMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NDI2OWVmMTIyMzAwYWZmOTE0ZDQ0ZTg3NGZkMjg5ZDcxOTUyNTM3IGIvZnV6emVyL2NvcnB1cy84NDI2OWVmMTIyMzAwYWZmOTE0ZDQ0ZTg3NGZkMjg5ZDcxOTUyNTM3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNDU0MWEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg0MjY5ZWYxMjIzMDBhZmY5MTRkNDRlODc0ZmQyODlkNzE5NTI1MzcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NDNhZDIxOGY1NmIyNWE5YTY1ZTkxMmM1YWU1MDg3YzA1MTgyMGVjIGIvZnV6emVyL2NvcnB1cy84NDNhZDIxOGY1NmIyNWE5YTY1ZTkxMmM1YWU1MDg3YzA1MTgyMGVjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ODRlMDAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg0M2FkMjE4ZjU2YjI1YTlhNjVlOTEyYzVhZTUwODdjMDUxODIwZWMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NDNjMzk1ZDYzMmE0YTdkMmVmNTdkM2NkZDJmNTZkMjZmN2U0Zjk5IGIvZnV6emVyL2NvcnB1cy84NDNjMzk1ZDYzMmE0YTdkMmVmNTdkM2NkZDJmNTZkMjZmN2U0Zjk5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNDUxN2IKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg0M2MzOTVkNjMyYTRhN2QyZWY1N2QzY2RkMmY1NmQyNmY3ZTRmOTkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NDY5N2FhY2M1YjlkMTcyMTFiMzIwOWMxZDJhMWZmY2NmNjYxMDRkIGIvZnV6emVyL2NvcnB1cy84NDY5N2FhY2M1YjlkMTcyMTFiMzIwOWMxZDJhMWZmY2NmNjYxMDRkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMGYyMjIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg0Njk3YWFjYzViOWQxNzIxMWIzMjA5YzFkMmExZmZjY2Y2NjEwNGQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NGFhMjlkOWYxYzA3ZWQwZmNlMjc0OWIwZDZjM2FkOTFkMDkxZDcyIGIvZnV6emVyL2NvcnB1cy84NGFhMjlkOWYxYzA3ZWQwZmNlMjc0OWIwZDZjM2FkOTFkMDkxZDcyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYmFiY2MKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg0YWEyOWQ5ZjFjMDdlZDBmY2UyNzQ5YjBkNmMzYWQ5MWQwOTFkNzIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NGMzYjdjMWJlZDVlN2JlYzcwNmQxYmM5NDkxZWMzMzNjZGMxNGNmIGIvZnV6emVyL2NvcnB1cy84NGMzYjdjMWJlZDVlN2JlYzcwNmQxYmM5NDkxZWMzMzNjZGMxNGNmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNzBjOWEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg0YzNiN2MxYmVkNWU3YmVjNzA2ZDFiYzk0OTFlYzMzM2NkYzE0Y2YKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NGQ5ZWU5N2U4MDc5MmY3MjJjZjM3NTJhMDUwZTM1N2EyYzczZmQ5IGIvZnV6emVyL2NvcnB1cy84NGQ5ZWU5N2U4MDc5MmY3MjJjZjM3NTJhMDUwZTM1N2EyYzczZmQ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ODgxM2MKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg0ZDllZTk3ZTgwNzkyZjcyMmNmMzc1MmEwNTBlMzU3YTJjNzNmZDkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NGUwOTcyYjBkYTc2OGEyM2ZkNDNkMDEzMjJlYzU1MmMxNjM1YWQ0IGIvZnV6emVyL2NvcnB1cy84NGUwOTcyYjBkYTc2OGEyM2ZkNDNkMDEzMjJlYzU1MmMxNjM1YWQ0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MTcyMTcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg0ZTA5NzJiMGRhNzY4YTIzZmQ0M2QwMTMyMmVjNTUyYzE2MzVhZDQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NGUxZmU2NzM5MjIyOWY2YzU2NjgwM2JhODhjZDY1YzA1MzE1NzM1IGIvZnV6emVyL2NvcnB1cy84NGUxZmU2NzM5MjIyOWY2YzU2NjgwM2JhODhjZDY1YzA1MzE1NzM1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZjUwYjYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg0ZTFmZTY3MzkyMjI5ZjZjNTY2ODAzYmE4OGNkNjVjMDUzMTU3MzUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NGY4YjVmNWI5YzVhN2MzNGE0MGY0ZWFiYjMzM2YyZDkwOGVlNjc4IGIvZnV6emVyL2NvcnB1cy84NGY4YjVmNWI5YzVhN2MzNGE0MGY0ZWFiYjMzM2YyZDkwOGVlNjc4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YmFlMmYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg0ZjhiNWY1YjljNWE3YzM0YTQwZjRlYWJiMzMzZjJkOTA4ZWU2NzgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NTA1NTdlNGI3OGM2YmIzMWM2N2U1MWJmYWU2MjM1YmZjYzliMmYzIGIvZnV6emVyL2NvcnB1cy84NTA1NTdlNGI3OGM2YmIzMWM2N2U1MWJmYWU2MjM1YmZjYzliMmYzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZWEwN2MKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg1MDU1N2U0Yjc4YzZiYjMxYzY3ZTUxYmZhZTYyMzViZmNjOWIyZjMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NTFiZWViMzI5NWQxOTk3Y2FkY2QyMjZkOGFlMDVjOTI5NGRmOWYwIGIvZnV6emVyL2NvcnB1cy84NTFiZWViMzI5NWQxOTk3Y2FkY2QyMjZkOGFlMDVjOTI5NGRmOWYwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlY2U1NGEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg1MWJlZWIzMjk1ZDE5OTdjYWRjZDIyNmQ4YWUwNWM5Mjk0ZGY5ZjAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NTI2MTJlOTQ0MjgxZWM4MTM5NTczODEzZGFiMjM1YWViNmE2Y2M5IGIvZnV6emVyL2NvcnB1cy84NTI2MTJlOTQ0MjgxZWM4MTM5NTczODEzZGFiMjM1YWViNmE2Y2M5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZjIzMTkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg1MjYxMmU5NDQyODFlYzgxMzk1NzM4MTNkYWIyMzVhZWI2YTZjYzkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NTMzMDY4M2RjODg2Yzk1MjllOTc1ZTQ3Y2U0OTljYTVlYTkzZDA0IGIvZnV6emVyL2NvcnB1cy84NTMzMDY4M2RjODg2Yzk1MjllOTc1ZTQ3Y2U0OTljYTVlYTkzZDA0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZDJhZjgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg1MzMwNjgzZGM4ODZjOTUyOWU5NzVlNDdjZTQ5OWNhNWVhOTNkMDQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NTNiZWU4MDM0Y2RhZjU1MDg0NDIzOTJmZDFkZGJhOTc4Y2UyNzdhIGIvZnV6emVyL2NvcnB1cy84NTNiZWU4MDM0Y2RhZjU1MDg0NDIzOTJmZDFkZGJhOTc4Y2UyNzdhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzY2U3N2QKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg1M2JlZTgwMzRjZGFmNTUwODQ0MjM5MmZkMWRkYmE5NzhjZTI3N2EKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NTZmMjkwYTRlNjEzOTc2ZjUwYjBjMWFlOTQ0OWNkZjYwOTY0MTEwIGIvZnV6emVyL2NvcnB1cy84NTZmMjkwYTRlNjEzOTc2ZjUwYjBjMWFlOTQ0OWNkZjYwOTY0MTEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMzQyY2YKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg1NmYyOTBhNGU2MTM5NzZmNTBiMGMxYWU5NDQ5Y2RmNjA5NjQxMTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NWMyMTE3YWI3YjljMThmNmUyMWViNDJiYjJkNWFiOTM2ZmE1YzNlIGIvZnV6emVyL2NvcnB1cy84NWMyMTE3YWI3YjljMThmNmUyMWViNDJiYjJkNWFiOTM2ZmE1YzNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZjFmMmYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg1YzIxMTdhYjdiOWMxOGY2ZTIxZWI0MmJiMmQ1YWI5MzZmYTVjM2UKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NWM2NjMzZjFjNGJlMzBhMzNjODRmYmEwYTRkOTc0NDc4OTY4OTUwIGIvZnV6emVyL2NvcnB1cy84NWM2NjMzZjFjNGJlMzBhMzNjODRmYmEwYTRkOTc0NDc4OTY4OTUwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMDg2MDgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg1YzY2MzNmMWM0YmUzMGEzM2M4NGZiYTBhNGQ5NzQ0Nzg5Njg5NTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NWNkNDkxZGI5YjNlMzBmOGRlMTM3ZmU0MTcyMTBlNDQzYzdlZDhhIGIvZnV6emVyL2NvcnB1cy84NWNkNDkxZGI5YjNlMzBmOGRlMTM3ZmU0MTcyMTBlNDQzYzdlZDhhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZGU2NTkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg1Y2Q0OTFkYjliM2UzMGY4ZGUxMzdmZTQxNzIxMGU0NDNjN2VkOGEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NWUzNzg1NTVjYTViMjgzZjdkMmU5NDcyZGMzMzBkOThhZDNjZDUyIGIvZnV6emVyL2NvcnB1cy84NWUzNzg1NTVjYTViMjgzZjdkMmU5NDcyZGMzMzBkOThhZDNjZDUyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMDZlMGUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg1ZTM3ODU1NWNhNWIyODNmN2QyZTk0NzJkYzMzMGQ5OGFkM2NkNTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NjAwZjdmMjc5M2E5OGQ1NmUzZDAzMjk3NzJmNDYyZDlhYWE4MTBlIGIvZnV6emVyL2NvcnB1cy84NjAwZjdmMjc5M2E5OGQ1NmUzZDAzMjk3NzJmNDYyZDlhYWE4MTBlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZThiMDQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg2MDBmN2YyNzkzYTk4ZDU2ZTNkMDMyOTc3MmY0NjJkOWFhYTgxMGUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NjAyODU0YzI1MzdkMTBkNzFmMGExZmVlZDlhNDk5NzZkMGExN2JkIGIvZnV6emVyL2NvcnB1cy84NjAyODU0YzI1MzdkMTBkNzFmMGExZmVlZDlhNDk5NzZkMGExN2JkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YmJhOWMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg2MDI4NTRjMjUzN2QxMGQ3MWYwYTFmZWVkOWE0OTk3NmQwYTE3YmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NjAyYzhmNWMyZjNlMDUwZDk4MjViMjY2MWViZWI5MGFjYTU1MjBiIGIvZnV6emVyL2NvcnB1cy84NjAyYzhmNWMyZjNlMDUwZDk4MjViMjY2MWViZWI5MGFjYTU1MjBiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYWVjNGUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg2MDJjOGY1YzJmM2UwNTBkOTgyNWIyNjYxZWJlYjkwYWNhNTUyMGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NjIxNDAwY2RlMmY0MjQyMTlkMWRiOTQ3ODMzZTZkNzhiOTZhNzUwIGIvZnV6emVyL2NvcnB1cy84NjIxNDAwY2RlMmY0MjQyMTlkMWRiOTQ3ODMzZTZkNzhiOTZhNzUwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNGFjYzkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg2MjE0MDBjZGUyZjQyNDIxOWQxZGI5NDc4MzNlNmQ3OGI5NmE3NTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NjNkNTgwM2ExZDE2NzJkMWE0OWFmODY3YWNhYzA0NTU5OWUyYTU3IGIvZnV6emVyL2NvcnB1cy84NjNkNTgwM2ExZDE2NzJkMWE0OWFmODY3YWNhYzA0NTU5OWUyYTU3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNjVhYmQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg2M2Q1ODAzYTFkMTY3MmQxYTQ5YWY4NjdhY2FjMDQ1NTk5ZTJhNTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NjgwOWE2OWZmNjgzN2U4ZWQ3YTc3N2FhODcxMmY2Y2U0ODE0Y2M0IGIvZnV6emVyL2NvcnB1cy84NjgwOWE2OWZmNjgzN2U4ZWQ3YTc3N2FhODcxMmY2Y2U0ODE0Y2M0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMGZlOTQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg2ODA5YTY5ZmY2ODM3ZThlZDdhNzc3YWE4NzEyZjZjZTQ4MTRjYzQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NjkzZGRiMTkxOWY3ZDg1NTI2OTQ3NGQ3ZGQ0ZDZjMmQ2MmYyYzZkIGIvZnV6emVyL2NvcnB1cy84NjkzZGRiMTkxOWY3ZDg1NTI2OTQ3NGQ3ZGQ0ZDZjMmQ2MmYyYzZkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ODdjNzMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg2OTNkZGIxOTE5ZjdkODU1MjY5NDc0ZDdkZDRkNmMyZDYyZjJjNmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NjljNjdlMzkyY2VjODllNDM4NWM3NDU4NmYyNzQ1YWM3MzIyN2QxIGIvZnV6emVyL2NvcnB1cy84NjljNjdlMzkyY2VjODllNDM4NWM3NDU4NmYyNzQ1YWM3MzIyN2QxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4Mjc4YjMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg2OWM2N2UzOTJjZWM4OWU0Mzg1Yzc0NTg2ZjI3NDVhYzczMjI3ZDEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NmMyMzFkMDZkZTgyYzdiOTMyMzM4MWM4OTBjMDg3ODFjZmZjOTIwIGIvZnV6emVyL2NvcnB1cy84NmMyMzFkMDZkZTgyYzdiOTMyMzM4MWM4OTBjMDg3ODFjZmZjOTIwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNzliMWIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg2YzIzMWQwNmRlODJjN2I5MzIzMzgxYzg5MGMwODc4MWNmZmM5MjAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NzA5ZTA2NGE3NWU2NjYzNDFiZDEzOGNmMDFlYTAwYzJiYWE4ODM4IGIvZnV6emVyL2NvcnB1cy84NzA5ZTA2NGE3NWU2NjYzNDFiZDEzOGNmMDFlYTAwYzJiYWE4ODM4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NDU2MTkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg3MDllMDY0YTc1ZTY2NjM0MWJkMTM4Y2YwMWVhMDBjMmJhYTg4MzgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NzBhYjExN2NkYWNkN2M1MzM1NzYxOTRlYzgzYWU0YzRmMDIxMzYxIGIvZnV6emVyL2NvcnB1cy84NzBhYjExN2NkYWNkN2M1MzM1NzYxOTRlYzgzYWU0YzRmMDIxMzYxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMGNhNTMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg3MGFiMTE3Y2RhY2Q3YzUzMzU3NjE5NGVjODNhZTRjNGYwMjEzNjEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NzFhMzkzYTZhMTY2MjEzODkwNjUwNzQxNzcxNzZlYmU2MDVlMzhkIGIvZnV6emVyL2NvcnB1cy84NzFhMzkzYTZhMTY2MjEzODkwNjUwNzQxNzcxNzZlYmU2MDVlMzhkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0N2Q1NDgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg3MWEzOTNhNmExNjYyMTM4OTA2NTA3NDE3NzE3NmViZTYwNWUzOGQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NzFlODljYWQzZDk0MjhlNGY5YjQzNGVlOTc3ZmQ2MTE1YmZmNGJlIGIvZnV6emVyL2NvcnB1cy84NzFlODljYWQzZDk0MjhlNGY5YjQzNGVlOTc3ZmQ2MTE1YmZmNGJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZDBmZWYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg3MWU4OWNhZDNkOTQyOGU0ZjliNDM0ZWU5NzdmZDYxMTViZmY0YmUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NzMxMjc2MTE5MGE2ZDdjOTVkOWNhMzhiZGEwMzEyMzM0YjBiZTliIGIvZnV6emVyL2NvcnB1cy84NzMxMjc2MTE5MGE2ZDdjOTVkOWNhMzhiZGEwMzEyMzM0YjBiZTliCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMGU1NWUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg3MzEyNzYxMTkwYTZkN2M5NWQ5Y2EzOGJkYTAzMTIzMzRiMGJlOWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NzVhY2Y5MDU2ODhlNjQ4ZGE4ZWY5Y2Q2OTczMGRiYmQ1NGU4NmI3IGIvZnV6emVyL2NvcnB1cy84NzVhY2Y5MDU2ODhlNjQ4ZGE4ZWY5Y2Q2OTczMGRiYmQ1NGU4NmI3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNWUxNDkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg3NWFjZjkwNTY4OGU2NDhkYThlZjljZDY5NzMwZGJiZDU0ZTg2YjcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NzZhNDAyYzk4MTQxM2M5MmI3YTJiNjljZWM1NTU0MDVmMzFkNWY4IGIvZnV6emVyL2NvcnB1cy84NzZhNDAyYzk4MTQxM2M5MmI3YTJiNjljZWM1NTU0MDVmMzFkNWY4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliY2Y0NzUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg3NmE0MDJjOTgxNDEzYzkyYjdhMmI2OWNlYzU1NTQwNWYzMWQ1ZjgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NzZhOGRjOTdhZTBkOTk1MjE0YzhjNzI0ZTNmNDkzOGE2ZmUwODRmIGIvZnV6emVyL2NvcnB1cy84NzZhOGRjOTdhZTBkOTk1MjE0YzhjNzI0ZTNmNDkzOGE2ZmUwODRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1N2QxNjEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg3NmE4ZGM5N2FlMGQ5OTUyMTRjOGM3MjRlM2Y0OTM4YTZmZTA4NGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84Nzc3NmQ2MDM4N2IzY2U4MTcxOTlkNGNkODdmNzdlMzBiYzlhMGNlIGIvZnV6emVyL2NvcnB1cy84Nzc3NmQ2MDM4N2IzY2U4MTcxOTlkNGNkODdmNzdlMzBiYzlhMGNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZDliNzIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg3Nzc2ZDYwMzg3YjNjZTgxNzE5OWQ0Y2Q4N2Y3N2UzMGJjOWEwY2UKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84NzlmOTU2MDE3MTg2MGMxZWJhZTdiZTZjZWJmYzMwOGNhOGUxYzE3IGIvZnV6emVyL2NvcnB1cy84NzlmOTU2MDE3MTg2MGMxZWJhZTdiZTZjZWJmYzMwOGNhOGUxYzE3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZTI4NDIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg3OWY5NTYwMTcxODYwYzFlYmFlN2JlNmNlYmZjMzA4Y2E4ZTFjMTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84N2EwZDc2Mzc0NzllNjIwZWZlOTYzZDJkZWMwODU5MTZmYTgxMGZhIGIvZnV6emVyL2NvcnB1cy84N2EwZDc2Mzc0NzllNjIwZWZlOTYzZDJkZWMwODU5MTZmYTgxMGZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMzkwYzQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg3YTBkNzYzNzQ3OWU2MjBlZmU5NjNkMmRlYzA4NTkxNmZhODEwZmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84ODM2ZjQ1MTQ1NGZmOTc0MTg3N2IwZjg1NmM0MmUyZGFiYjBlZTBlIGIvZnV6emVyL2NvcnB1cy84ODM2ZjQ1MTQ1NGZmOTc0MTg3N2IwZjg1NmM0MmUyZGFiYjBlZTBlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZDQ4ODYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg4MzZmNDUxNDU0ZmY5NzQxODc3YjBmODU2YzQyZTJkYWJiMGVlMGUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84ODcxNTY0YmEwYWRkMjhiZTIxZmZlMDA4ZjExY2U5MWZkMzgxNDdhIGIvZnV6emVyL2NvcnB1cy84ODcxNTY0YmEwYWRkMjhiZTIxZmZlMDA4ZjExY2U5MWZkMzgxNDdhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MzhhODgKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg4NzE1NjRiYTBhZGQyOGJlMjFmZmUwMDhmMTFjZTkxZmQzODE0N2EKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84ODdmZDUzMzAyOTE3ZTI3YjAyZmEyY2M4NWVjMzViOWI1ZDQzMDQxIGIvZnV6emVyL2NvcnB1cy84ODdmZDUzMzAyOTE3ZTI3YjAyZmEyY2M4NWVjMzViOWI1ZDQzMDQxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYjBkYzQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg4N2ZkNTMzMDI5MTdlMjdiMDJmYTJjYzg1ZWMzNWI5YjVkNDMwNDEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84ODlkOWMxMTk3NzQ2NmYwOTUyY2Y1MWQ3MjY5MzBlYWY4ODBmMmM1IGIvZnV6emVyL2NvcnB1cy84ODlkOWMxMTk3NzQ2NmYwOTUyY2Y1MWQ3MjY5MzBlYWY4ODBmMmM1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYTdhOTMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg4OWQ5YzExOTc3NDY2ZjA5NTJjZjUxZDcyNjkzMGVhZjg4MGYyYzUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84OGUzMzE0MzBiYmFlMGVlYTM3Yjk2ODZiMjBmYjM3YmU4NzQyMTdkIGIvZnV6emVyL2NvcnB1cy84OGUzMzE0MzBiYmFlMGVlYTM3Yjk2ODZiMjBmYjM3YmU4NzQyMTdkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5OTY4MWQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg4ZTMzMTQzMGJiYWUwZWVhMzdiOTY4NmIyMGZiMzdiZTg3NDIxN2QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84OGY5NzQxNDQyNWU2ZmIyZWE0MDlhNzIxNDFlNjhiY2E5M2ZkNTZkIGIvZnV6emVyL2NvcnB1cy84OGY5NzQxNDQyNWU2ZmIyZWE0MDlhNzIxNDFlNjhiY2E5M2ZkNTZkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMDA4ODcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg4Zjk3NDE0NDI1ZTZmYjJlYTQwOWE3MjE0MWU2OGJjYTkzZmQ1NmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84OTBjN2Q5YjkxMTJiODZlYTI2ODIwNzE4ZjJmODU0MGYxNGM0MTMyIGIvZnV6emVyL2NvcnB1cy84OTBjN2Q5YjkxMTJiODZlYTI2ODIwNzE4ZjJmODU0MGYxNGM0MTMyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MDdjYzkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg5MGM3ZDliOTExMmI4NmVhMjY4MjA3MThmMmY4NTQwZjE0YzQxMzIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84OTJjNDM2YTUyMThkNzE0ZjBiNzcyYmE2MDExY2ZjZDBiNzc3MDZkIGIvZnV6emVyL2NvcnB1cy84OTJjNDM2YTUyMThkNzE0ZjBiNzcyYmE2MDExY2ZjZDBiNzc3MDZkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYmE0ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg5MmM0MzZhNTIxOGQ3MTRmMGI3NzJiYTYwMTFjZmNkMGI3NzcwNmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84OTM5YTg5M2IxMmM1YTc5MjkzMGQ3ZDhjMzUzNDA4MzE0MTgyMzkxIGIvZnV6emVyL2NvcnB1cy84OTM5YTg5M2IxMmM1YTc5MjkzMGQ3ZDhjMzUzNDA4MzE0MTgyMzkxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMDE2YWQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg5MzlhODkzYjEyYzVhNzkyOTMwZDdkOGMzNTM0MDgzMTQxODIzOTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84OTQzMWRmN2ExZTFmMGI3YThmNTg0ZjAzODRiZGMyYTdhNTExY2M0IGIvZnV6emVyL2NvcnB1cy84OTQzMWRmN2ExZTFmMGI3YThmNTg0ZjAzODRiZGMyYTdhNTExY2M0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkODU4NjcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg5NDMxZGY3YTFlMWYwYjdhOGY1ODRmMDM4NGJkYzJhN2E1MTFjYzQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84OThhYWMwYzgxMGYyZTJjNzRmNzg5MzY1NDAyNjA1NjFmZThiM2U0IGIvZnV6emVyL2NvcnB1cy84OThhYWMwYzgxMGYyZTJjNzRmNzg5MzY1NDAyNjA1NjFmZThiM2U0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZGExZmUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg5OGFhYzBjODEwZjJlMmM3NGY3ODkzNjU0MDI2MDU2MWZlOGIzZTQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84OWIwOTRjNTdjNzQxZTdiODRjYjE1ZTkwMDA4NTE2NWI2YTU0MjAxIGIvZnV6emVyL2NvcnB1cy84OWIwOTRjNTdjNzQxZTdiODRjYjE1ZTkwMDA4NTE2NWI2YTU0MjAxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ODZkNWQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg5YjA5NGM1N2M3NDFlN2I4NGNiMTVlOTAwMDg1MTY1YjZhNTQyMDEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84OWUzZDU3MGEyMjJjMThiYzk0NTQwOGI3MWJkM2YwOGUxNDNjMDYzIGIvZnV6emVyL2NvcnB1cy84OWUzZDU3MGEyMjJjMThiYzk0NTQwOGI3MWJkM2YwOGUxNDNjMDYzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwODg1NDIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzg5ZTNkNTcwYTIyMmMxOGJjOTQ1NDA4YjcxYmQzZjA4ZTE0M2MwNjMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84YTBiM2VjY2IwNzY3ZmFiYzNmNDZiYTdiZjYzZTMxY2NjZTNiMDJiIGIvZnV6emVyL2NvcnB1cy84YTBiM2VjY2IwNzY3ZmFiYzNmNDZiYTdiZjYzZTMxY2NjZTNiMDJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNjkxYWYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhhMGIzZWNjYjA3NjdmYWJjM2Y0NmJhN2JmNjNlMzFjY2NlM2IwMmIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84YTBmNDAxZjc5ODIwN2RiNmM4YjAxOTEzMjIwZTRmZjQwNDljYzVlIGIvZnV6emVyL2NvcnB1cy84YTBmNDAxZjc5ODIwN2RiNmM4YjAxOTEzMjIwZTRmZjQwNDljYzVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNzNkNzYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhhMGY0MDFmNzk4MjA3ZGI2YzhiMDE5MTMyMjBlNGZmNDA0OWNjNWUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84YTIyMTg4YzI5MjExZjdlNjkwNmUzN2Y0M2M0NDYwZTI4MTJhODMyIGIvZnV6emVyL2NvcnB1cy84YTIyMTg4YzI5MjExZjdlNjkwNmUzN2Y0M2M0NDYwZTI4MTJhODMyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2OWNmYWEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhhMjIxODhjMjkyMTFmN2U2OTA2ZTM3ZjQzYzQ0NjBlMjgxMmE4MzIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84YTMzNDE3ZTQ1NWVlNDFiNjg0ZDkwZTJkMzJjZjg4MDZlNjI5ZmE1IGIvZnV6emVyL2NvcnB1cy84YTMzNDE3ZTQ1NWVlNDFiNjg0ZDkwZTJkMzJjZjg4MDZlNjI5ZmE1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ODg3ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhhMzM0MTdlNDU1ZWU0MWI2ODRkOTBlMmQzMmNmODgwNmU2MjlmYTUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84YTViODVjNzE3Yzg5YzY1ZGM2M2ZhYzc1YjAxNzgxYzExOGM3YzEyIGIvZnV6emVyL2NvcnB1cy84YTViODVjNzE3Yzg5YzY1ZGM2M2ZhYzc1YjAxNzgxYzExOGM3YzEyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZjI2YTYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhhNWI4NWM3MTdjODljNjVkYzYzZmFjNzViMDE3ODFjMTE4YzdjMTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84YTcxNDIxZGFmMTNlYWNkZGNiMGQ4Y2ZkNDkwNzAzOTE2NTU3NzgwIGIvZnV6emVyL2NvcnB1cy84YTcxNDIxZGFmMTNlYWNkZGNiMGQ4Y2ZkNDkwNzAzOTE2NTU3NzgwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZjI0OGQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhhNzE0MjFkYWYxM2VhY2RkY2IwZDhjZmQ0OTA3MDM5MTY1NTc3ODAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84YTczNjRmNjhiZGE5ZjZmYTM3ZDdjZDk0NWY4OTMwOGYyMjIwYzZjIGIvZnV6emVyL2NvcnB1cy84YTczNjRmNjhiZGE5ZjZmYTM3ZDdjZDk0NWY4OTMwOGYyMjIwYzZjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjlhYjEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhhNzM2NGY2OGJkYTlmNmZhMzdkN2NkOTQ1Zjg5MzA4ZjIyMjBjNmMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84YTdiZmZmNWQzOGYzNDYyZTg3NmU3MTJkMDgxOGU0ZjAwOWUwZDUzIGIvZnV6emVyL2NvcnB1cy84YTdiZmZmNWQzOGYzNDYyZTg3NmU3MTJkMDgxOGU0ZjAwOWUwZDUzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMzdhZmMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhhN2JmZmY1ZDM4ZjM0NjJlODc2ZTcxMmQwODE4ZTRmMDA5ZTBkNTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84YThlODcxODY0NGVhZWMyM2MwYzI3ZTJhNzczN2ZkZTU1ZGY4YjFiIGIvZnV6emVyL2NvcnB1cy84YThlODcxODY0NGVhZWMyM2MwYzI3ZTJhNzczN2ZkZTU1ZGY4YjFiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NzIxZGEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhhOGU4NzE4NjQ0ZWFlYzIzYzBjMjdlMmE3NzM3ZmRlNTVkZjhiMWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84YWM2OWVjNjY5YTZjZDBmOGQ2OGM0NDE5MTU5NzA1OTFmMWM4OTM5IGIvZnV6emVyL2NvcnB1cy84YWM2OWVjNjY5YTZjZDBmOGQ2OGM0NDE5MTU5NzA1OTFmMWM4OTM5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNzE0NWYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhhYzY5ZWM2NjlhNmNkMGY4ZDY4YzQ0MTkxNTk3MDU5MWYxYzg5MzkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84YWNmY2YwZmU4YjAwMDk4ZGRiNmEyN2EyZTA5NmIwZTA2YjQ3ZTUxIGIvZnV6emVyL2NvcnB1cy84YWNmY2YwZmU4YjAwMDk4ZGRiNmEyN2EyZTA5NmIwZTA2YjQ3ZTUxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZmFmY2UKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhhY2ZjZjBmZThiMDAwOThkZGI2YTI3YTJlMDk2YjBlMDZiNDdlNTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84YWQwMmEwZWQ0YjdiYTQ3NWM5YWI0ZWMzZTc2M2RkNDc2MDYwZmM4IGIvZnV6emVyL2NvcnB1cy84YWQwMmEwZWQ0YjdiYTQ3NWM5YWI0ZWMzZTc2M2RkNDc2MDYwZmM4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMTA0MjYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhhZDAyYTBlZDRiN2JhNDc1YzlhYjRlYzNlNzYzZGQ0NzYwNjBmYzgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84YWQ5M2ZkMGQxOTYyNTc0YjZjMTFlYWJiZDJmMTA5MjZmOGZlNzYxIGIvZnV6emVyL2NvcnB1cy84YWQ5M2ZkMGQxOTYyNTc0YjZjMTFlYWJiZDJmMTA5MjZmOGZlNzYxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZDk0NzYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhhZDkzZmQwZDE5NjI1NzRiNmMxMWVhYmJkMmYxMDkyNmY4ZmU3NjEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84YWU0MzM1MWYwNWExZjRmN2M3ODBiYTFiMjBlZmJhMGYwOTQ5MjNjIGIvZnV6emVyL2NvcnB1cy84YWU0MzM1MWYwNWExZjRmN2M3ODBiYTFiMjBlZmJhMGYwOTQ5MjNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZmViOTQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhhZTQzMzUxZjA1YTFmNGY3Yzc4MGJhMWIyMGVmYmEwZjA5NDkyM2MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84YWU4YWFmNTk4NTBmYjdkOTY3ZThlYmE4ZTNlYjBlNWQ0YWNiYzJiIGIvZnV6emVyL2NvcnB1cy84YWU4YWFmNTk4NTBmYjdkOTY3ZThlYmE4ZTNlYjBlNWQ0YWNiYzJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MGFlYjEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhhZThhYWY1OTg1MGZiN2Q5NjdlOGViYThlM2ViMGU1ZDRhY2JjMmIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84YWY3YjgyYWQyN2Q2NWUwY2RlODYwOWU0MDU3ODA3MGIzZTI5OTgyIGIvZnV6emVyL2NvcnB1cy84YWY3YjgyYWQyN2Q2NWUwY2RlODYwOWU0MDU3ODA3MGIzZTI5OTgyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYTNlZDMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhhZjdiODJhZDI3ZDY1ZTBjZGU4NjA5ZTQwNTc4MDcwYjNlMjk5ODIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84YjIyNmY4NGMxNTkzYTMyM2MxYTEzODdiNWY3NmNlMmQyNzA1M2RmIGIvZnV6emVyL2NvcnB1cy84YjIyNmY4NGMxNTkzYTMyM2MxYTEzODdiNWY3NmNlMmQyNzA1M2RmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMTQ5YmUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhiMjI2Zjg0YzE1OTNhMzIzYzFhMTM4N2I1Zjc2Y2UyZDI3MDUzZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84YjJlMGRkYTY4YzU0MGFiMjY3MGYwYTRhMDMyNjViOGU1Nzg5OTAyIGIvZnV6emVyL2NvcnB1cy84YjJlMGRkYTY4YzU0MGFiMjY3MGYwYTRhMDMyNjViOGU1Nzg5OTAyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNWMwYTEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhiMmUwZGRhNjhjNTQwYWIyNjcwZjBhNGEwMzI2NWI4ZTU3ODk5MDIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84YjQ2ZGMzYTc0YzFmMDBlYzJkNzk3ZDQ3MjViZjc3YmIyNmI4NjE4IGIvZnV6emVyL2NvcnB1cy84YjQ2ZGMzYTc0YzFmMDBlYzJkNzk3ZDQ3MjViZjc3YmIyNmI4NjE4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NjA5ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhiNDZkYzNhNzRjMWYwMGVjMmQ3OTdkNDcyNWJmNzdiYjI2Yjg2MTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84YjlkYzgwODZlNjgwMzI2NGYzMzkxNTNkOGQ1MDFjZjBiMzA0ZmQ5IGIvZnV6emVyL2NvcnB1cy84YjlkYzgwODZlNjgwMzI2NGYzMzkxNTNkOGQ1MDFjZjBiMzA0ZmQ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MTA5MmYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhiOWRjODA4NmU2ODAzMjY0ZjMzOTE1M2Q4ZDUwMWNmMGIzMDRmZDkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84YmEwYjk2MDE1OTAyYWMxNGYzYTIwNjZmNTE3MzAyZmUyOGM2ZWRmIGIvZnV6emVyL2NvcnB1cy84YmEwYjk2MDE1OTAyYWMxNGYzYTIwNjZmNTE3MzAyZmUyOGM2ZWRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZjQ4MzMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhiYTBiOTYwMTU5MDJhYzE0ZjNhMjA2NmY1MTczMDJmZTI4YzZlZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84YmI1OTEzMzkxZDkwN2IzODI5ZTQ3NWEwZDk4MmU5ODIxNzIzMGZlIGIvZnV6emVyL2NvcnB1cy84YmI1OTEzMzkxZDkwN2IzODI5ZTQ3NWEwZDk4MmU5ODIxNzIzMGZlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NDJiNTAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhiYjU5MTMzOTFkOTA3YjM4MjllNDc1YTBkOTgyZTk4MjE3MjMwZmUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84YmRhNjFkMGQ0OTcyMTZiZGU2ZDI4NjViN2Y4YzI2ZGYwNzAyOTU0IGIvZnV6emVyL2NvcnB1cy84YmRhNjFkMGQ0OTcyMTZiZGU2ZDI4NjViN2Y4YzI2ZGYwNzAyOTU0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiY2YzZDIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhiZGE2MWQwZDQ5NzIxNmJkZTZkMjg2NWI3ZjhjMjZkZjA3MDI5NTQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84YmVkNmYzMDU4OThkZGNmYWYxNGFjNGM0ZDNmZWJiMWI2OWU1NmRjIGIvZnV6emVyL2NvcnB1cy84YmVkNmYzMDU4OThkZGNmYWYxNGFjNGM0ZDNmZWJiMWI2OWU1NmRjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZWU5MGIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhiZWQ2ZjMwNTg5OGRkY2ZhZjE0YWM0YzRkM2ZlYmIxYjY5ZTU2ZGMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84YzQ3NTNhMTMwZjYyNjgyNThhYzFjYzM5MTA4Yjg0M2E0MjEwZGY0IGIvZnV6emVyL2NvcnB1cy84YzQ3NTNhMTMwZjYyNjgyNThhYzFjYzM5MTA4Yjg0M2E0MjEwZGY0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYmYzOTkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhjNDc1M2ExMzBmNjI2ODI1OGFjMWNjMzkxMDhiODQzYTQyMTBkZjQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84Yzg0YmQ0M2MxMTNiOWYxZmE5ODg3OTYzMDdmZTVlZDc3YjkyM2M4IGIvZnV6emVyL2NvcnB1cy84Yzg0YmQ0M2MxMTNiOWYxZmE5ODg3OTYzMDdmZTVlZDc3YjkyM2M4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNWE3OTYKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhjODRiZDQzYzExM2I5ZjFmYTk4ODc5NjMwN2ZlNWVkNzdiOTIzYzgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84Yzg5ZTI5ZGQxZDU3ZDdlNTYxNmEzYjY4ZDM5Njc4MjY3ZGY2MGQyIGIvZnV6emVyL2NvcnB1cy84Yzg5ZTI5ZGQxZDU3ZDdlNTYxNmEzYjY4ZDM5Njc4MjY3ZGY2MGQyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MWMxNDQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhjODllMjlkZDFkNTdkN2U1NjE2YTNiNjhkMzk2NzgyNjdkZjYwZDIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84Y2IwMDNiMjBhZDM2MWY3MTFhNjE2MzRhMWUyODBkY2Y3Y2E0OTEwIGIvZnV6emVyL2NvcnB1cy84Y2IwMDNiMjBhZDM2MWY3MTFhNjE2MzRhMWUyODBkY2Y3Y2E0OTEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczN2I1M2IKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhjYjAwM2IyMGFkMzYxZjcxMWE2MTYzNGExZTI4MGRjZjdjYTQ5MTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84Y2JlNTBlNTg2ODUwN2RiZmE2NDM2MGFiODkzNTY4OWFjMDA1ZjQyIGIvZnV6emVyL2NvcnB1cy84Y2JlNTBlNTg2ODUwN2RiZmE2NDM2MGFiODkzNTY4OWFjMDA1ZjQyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNzdhZGUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhjYmU1MGU1ODY4NTA3ZGJmYTY0MzYwYWI4OTM1Njg5YWMwMDVmNDIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84Y2VkOGY3ZmM0MjQyMWNlNmQ0OTIwYzYyNjg4YjYyMWZhYmJiZjYwIGIvZnV6emVyL2NvcnB1cy84Y2VkOGY3ZmM0MjQyMWNlNmQ0OTIwYzYyNjg4YjYyMWZhYmJiZjYwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMmRkOTcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhjZWQ4ZjdmYzQyNDIxY2U2ZDQ5MjBjNjI2ODhiNjIxZmFiYmJmNjAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84ZDA5Yjg4MzlmNjBkNzI4OWMzMWZjNzNhNDc3NjdkZWYyNzExMGFiIGIvZnV6emVyL2NvcnB1cy84ZDA5Yjg4MzlmNjBkNzI4OWMzMWZjNzNhNDc3NjdkZWYyNzExMGFiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4OGQ0ODcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhkMDliODgzOWY2MGQ3Mjg5YzMxZmM3M2E0Nzc2N2RlZjI3MTEwYWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84ZDJhODFmMmI3OTc3OGI2MWU4NGI5NmNlMTExMDgzYjkxOGQxMmIxIGIvZnV6emVyL2NvcnB1cy84ZDJhODFmMmI3OTc3OGI2MWU4NGI5NmNlMTExMDgzYjkxOGQxMmIxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NDRlN2UKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhkMmE4MWYyYjc5Nzc4YjYxZTg0Yjk2Y2UxMTEwODNiOTE4ZDEyYjEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84ZDM3Y2ZjNGJjMWIwZDYwN2U5NjdhNzc0NzEyZGUwY2ZkYzFkMGQ2IGIvZnV6emVyL2NvcnB1cy84ZDM3Y2ZjNGJjMWIwZDYwN2U5NjdhNzc0NzEyZGUwY2ZkYzFkMGQ2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3OTg1YTMKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhkMzdjZmM0YmMxYjBkNjA3ZTk2N2E3NzQ3MTJkZTBjZmRjMWQwZDYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84ZDQ1YWQxZGM0M2I4N2JkNWU4N2FjMjEwYTEzMjIyMTM1ZWU4ZTJmIGIvZnV6emVyL2NvcnB1cy84ZDQ1YWQxZGM0M2I4N2JkNWU4N2FjMjEwYTEzMjIyMTM1ZWU4ZTJmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MWI5YzAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhkNDVhZDFkYzQzYjg3YmQ1ZTg3YWMyMTBhMTMyMjIxMzVlZThlMmYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84ZDU4NWUzMzA4MDgwMWQzMjkwMDdjZGQ5NDVhMWNmOTVlOWRkMWVhIGIvZnV6emVyL2NvcnB1cy84ZDU4NWUzMzA4MDgwMWQzMjkwMDdjZGQ5NDVhMWNmOTVlOWRkMWVhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1N2FlMTIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhkNTg1ZTMzMDgwODAxZDMyOTAwN2NkZDk0NWExY2Y5NWU5ZGQxZWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84ZDlhYzVmNjY3MzcxMjcyY2QzMDQ0ZjMyMWMwMmMyOGE0MmMyNWRjIGIvZnV6emVyL2NvcnB1cy84ZDlhYzVmNjY3MzcxMjcyY2QzMDQ0ZjMyMWMwMmMyOGE0MmMyNWRjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2OWMwNGUKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhkOWFjNWY2NjczNzEyNzJjZDMwNDRmMzIxYzAyYzI4YTQyYzI1ZGMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84ZGNhM2ZhNzQ4YTJlY2VhYWQ2N2QzMmU0ZWMyMTFmZGI2ODU1MGZjIGIvZnV6emVyL2NvcnB1cy84ZGNhM2ZhNzQ4YTJlY2VhYWQ2N2QzMmU0ZWMyMTFmZGI2ODU1MGZjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNjk2MzIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhkY2EzZmE3NDhhMmVjZWFhZDY3ZDMyZTRlYzIxMWZkYjY4NTUwZmMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84ZTJkNTE5ZjM4NDFjOGQ1MjIwNzc4ZTQwOTEzYjFhNDYyYzk3YjEyIGIvZnV6emVyL2NvcnB1cy84ZTJkNTE5ZjM4NDFjOGQ1MjIwNzc4ZTQwOTEzYjFhNDYyYzk3YjEyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMGU0MjkKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhlMmQ1MTlmMzg0MWM4ZDUyMjA3NzhlNDA5MTNiMWE0NjJjOTdiMTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84ZTUzNjI1NTIzNDgwNzRjNzlhNThhNzcwNWJjODczNGFkN2ZlMzczIGIvZnV6emVyL2NvcnB1cy84ZTUzNjI1NTIzNDgwNzRjNzlhNThhNzcwNWJjODczNGFkN2ZlMzczCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOTFmNTQKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhlNTM2MjU1MjM0ODA3NGM3OWE1OGE3NzA1YmM4NzM0YWQ3ZmUzNzMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84ZTY0MGQ5NDhlMWRmZjQ4YzRmNDg4ZDQyOTE3ZDk1NzgzNWM3Nzk1IGIvZnV6emVyL2NvcnB1cy84ZTY0MGQ5NDhlMWRmZjQ4YzRmNDg4ZDQyOTE3ZDk1NzgzNWM3Nzk1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNjQyZDAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhlNjQwZDk0OGUxZGZmNDhjNGY0ODhkNDI5MTdkOTU3ODM1Yzc3OTUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZnV6emVyL2NvcnB1cy84ZTY5ODkzN2I1ZWJlMWJmN2FhZDI1NmQ4MzQwYjdhZDAxM2YyYWRiIGIvZnV6emVyL2NvcnB1cy84ZTY5ODkzN2I1ZWJlMWJmN2FhZDI1NmQ4MzQwYjdhZDAxM2YyYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNDY0NzIKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvY29ycHVzLzhlNjk4OTM3YjVlYmUxYmY3YWFkMjU2ZDgzNDBiN2FkMDEzZjJhZGIKQEAgLTAsMCArMSBAQAorc2UwZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOGU3MzY1MzIyMmY0YmM1MjRkM2I1ZmE5NjIyMWRhYWQwYWM5NDFlOSBiL2Z1enplci9jb3JwdXMvOGU3MzY1MzIyMmY0YmM1MjRkM2I1ZmE5NjIyMWRhYWQwYWM5NDFlOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWU3Y2M0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy84ZTczNjUzMjIyZjRiYzUyNGQzYjVmYTk2MjIxZGFhZDBhYzk0MWU5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOGVkNDRmOWQyNjUyOWU3OWM1ZjFlYzc4MzgxZDMzZjczMmU4ZWYxNyBiL2Z1enplci9jb3JwdXMvOGVkNDRmOWQyNjUyOWU3OWM1ZjFlYzc4MzgxZDMzZjczMmU4ZWYxNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmIwZjdjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy84ZWQ0NGY5ZDI2NTI5ZTc5YzVmMWVjNzgzODFkMzNmNzMyZThlZjE3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOGVkZjgwMGMwM2E4YWFkNDUyM2MzZDhkZTQ4YmY0NTk5YTQyZTZmZCBiL2Z1enplci9jb3JwdXMvOGVkZjgwMGMwM2E4YWFkNDUyM2MzZDhkZTQ4YmY0NTk5YTQyZTZmZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWUxYzUwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy84ZWRmODAwYzAzYThhYWQ0NTIzYzNkOGRlNDhiZjQ1OTlhNDJlNmZkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOGVmYTkxODdkNmEwZTI3YTI0NDA4ZTkxYjY4NjA2ZmE2YjQ1OWYwZSBiL2Z1enplci9jb3JwdXMvOGVmYTkxODdkNmEwZTI3YTI0NDA4ZTkxYjY4NjA2ZmE2YjQ1OWYwZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2E5OTNhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy84ZWZhOTE4N2Q2YTBlMjdhMjQ0MDhlOTFiNjg2MDZmYTZiNDU5ZjBlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOGYwMWI2MWRjYjVjMzM3Yjk5NWRjZjBlNTc2NGYzNGU1ZGUxMTlhYSBiL2Z1enplci9jb3JwdXMvOGYwMWI2MWRjYjVjMzM3Yjk5NWRjZjBlNTc2NGYzNGU1ZGUxMTlhYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWE4NzQwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy84ZjAxYjYxZGNiNWMzMzdiOTk1ZGNmMGU1NzY0ZjM0ZTVkZTExOWFhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOGYxYTU1ZDk5ZGUzMDcxYWUwZjZlNTkxMDA0NTBlYzViNjkyYTQ0NyBiL2Z1enplci9jb3JwdXMvOGYxYTU1ZDk5ZGUzMDcxYWUwZjZlNTkxMDA0NTBlYzViNjkyYTQ0NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjliZWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy84ZjFhNTVkOTlkZTMwNzFhZTBmNmU1OTEwMDQ1MGVjNWI2OTJhNDQ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOGYzMzExNTJkMDhjYzE5NmRlYzRhMWQwNTY3ODhkNGRlMDg1ZWFlZSBiL2Z1enplci9jb3JwdXMvOGYzMzExNTJkMDhjYzE5NmRlYzRhMWQwNTY3ODhkNGRlMDg1ZWFlZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2IxM2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy84ZjMzMTE1MmQwOGNjMTk2ZGVjNGExZDA1Njc4OGQ0ZGUwODVlYWVlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOGYzNmZmODhiZjRiMzM4YWI0OTQ3ZTRjMDIzOWY5ZWIzNTc1ZmNmOSBiL2Z1enplci9jb3JwdXMvOGYzNmZmODhiZjRiMzM4YWI0OTQ3ZTRjMDIzOWY5ZWIzNTc1ZmNmOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWIyNmViCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy84ZjM2ZmY4OGJmNGIzMzhhYjQ5NDdlNGMwMjM5ZjllYjM1NzVmY2Y5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOGYzOTMzOWNjMTRiZDkxOTM1MTRjNDEwMDE0MDgxYmZhMzQ0YzgwOCBiL2Z1enplci9jb3JwdXMvOGYzOTMzOWNjMTRiZDkxOTM1MTRjNDEwMDE0MDgxYmZhMzQ0YzgwOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDExNzUwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy84ZjM5MzM5Y2MxNGJkOTE5MzUxNGM0MTAwMTQwODFiZmEzNDRjODA4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOGY0MGQ4MzNkMjY1NzFmZDhjMjVhMzAxNjMwOTNjNzFiOGVjMTRlMSBiL2Z1enplci9jb3JwdXMvOGY0MGQ4MzNkMjY1NzFmZDhjMjVhMzAxNjMwOTNjNzFiOGVjMTRlMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTY5YTE1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy84ZjQwZDgzM2QyNjU3MWZkOGMyNWEzMDE2MzA5M2M3MWI4ZWMxNGUxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOGY0YTdmMTkzZmRjYjRlOGQ5MzA0YTc0MzE3YTlmYTY5MjFjM2ZmYiBiL2Z1enplci9jb3JwdXMvOGY0YTdmMTkzZmRjYjRlOGQ5MzA0YTc0MzE3YTlmYTY5MjFjM2ZmYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGUxYzRkCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy84ZjRhN2YxOTNmZGNiNGU4ZDkzMDRhNzQzMTdhOWZhNjkyMWMzZmZiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOGY1MmEzNzIxZDQwMmM1NGQ0ZjM2MDRiYzFkZjI4YTE3OTZkM2YzMiBiL2Z1enplci9jb3JwdXMvOGY1MmEzNzIxZDQwMmM1NGQ0ZjM2MDRiYzFkZjI4YTE3OTZkM2YzMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDI0MDFhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy84ZjUyYTM3MjFkNDAyYzU0ZDRmMzYwNGJjMWRmMjhhMTc5NmQzZjMyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOGY1N2M2NzQ0ZDQ5OTI2ZWI4ZDZjMGEzNmI4MDk5MWM1MDk5NjM0NCBiL2Z1enplci9jb3JwdXMvOGY1N2M2NzQ0ZDQ5OTI2ZWI4ZDZjMGEzNmI4MDk5MWM1MDk5NjM0NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTY0ODhkCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy84ZjU3YzY3NDRkNDk5MjZlYjhkNmMwYTM2YjgwOTkxYzUwOTk2MzQ0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOGY4NzQ4YWQzNzk0YzcwM2Q3Njc2NjZiOTE4NDdiOTc0N2ViMzhjNCBiL2Z1enplci9jb3JwdXMvOGY4NzQ4YWQzNzk0YzcwM2Q3Njc2NjZiOTE4NDdiOTc0N2ViMzhjNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mjc2MzZmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy84Zjg3NDhhZDM3OTRjNzAzZDc2NzY2NmI5MTg0N2I5NzQ3ZWIzOGM0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOGZiYzhiMDg5YWEwMTFmZmVmMGE3MDhjZGM3YjFkOWI5NjhlN2FjNCBiL2Z1enplci9jb3JwdXMvOGZiYzhiMDg5YWEwMTFmZmVmMGE3MDhjZGM3YjFkOWI5NjhlN2FjNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWYzMWYzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy84ZmJjOGIwODlhYTAxMWZmZWYwYTcwOGNkYzdiMWQ5Yjk2OGU3YWM0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOGZjMWZjNmViNjExNDJmMWY4ZGIzOTcyYjgzNTViOGQyMzUxYWYxNyBiL2Z1enplci9jb3JwdXMvOGZjMWZjNmViNjExNDJmMWY4ZGIzOTcyYjgzNTViOGQyMzUxYWYxNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGU4MDYxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy84ZmMxZmM2ZWI2MTE0MmYxZjhkYjM5NzJiODM1NWI4ZDIzNTFhZjE3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTAyZTk1NDU0OTZmNGJkNTI2NzU5MjNiMDkyNTZiZGIzZDI4NWU0MCBiL2Z1enplci9jb3JwdXMvOTAyZTk1NDU0OTZmNGJkNTI2NzU5MjNiMDkyNTZiZGIzZDI4NWU0MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGUxNWUxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MDJlOTU0NTQ5NmY0YmQ1MjY3NTkyM2IwOTI1NmJkYjNkMjg1ZTQwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTA0MjE5ZTRmNTZjOGU2NzlkNjQzODlhOWYxNmE4N2Y4NzZjYjljYyBiL2Z1enplci9jb3JwdXMvOTA0MjE5ZTRmNTZjOGU2NzlkNjQzODlhOWYxNmE4N2Y4NzZjYjljYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWQ3MTFkCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MDQyMTllNGY1NmM4ZTY3OWQ2NDM4OWE5ZjE2YTg3Zjg3NmNiOWNjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTA3YzgxNGViZTVhMjE3YzU3YjE1MzIxOTg0MjhkMDAxY2ZmMGJmOCBiL2Z1enplci9jb3JwdXMvOTA3YzgxNGViZTVhMjE3YzU3YjE1MzIxOTg0MjhkMDAxY2ZmMGJmOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGFkMWM1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MDdjODE0ZWJlNWEyMTdjNTdiMTUzMjE5ODQyOGQwMDFjZmYwYmY4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTA4MzllMmYyYmMwMzJkMGU2ODhkMDRkMDZlMDBkYTFlNWI2NzY5YiBiL2Z1enplci9jb3JwdXMvOTA4MzllMmYyYmMwMzJkMGU2ODhkMDRkMDZlMDBkYTFlNWI2NzY5YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYThmNGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MDgzOWUyZjJiYzAzMmQwZTY4OGQwNGQwNmUwMGRhMWU1YjY3NjliCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTA5ZGY5MzQxNzRjZDM0OTYyOTRlNjY4ZWNhNWIxYmE2ZGQyMmU2MCBiL2Z1enplci9jb3JwdXMvOTA5ZGY5MzQxNzRjZDM0OTYyOTRlNjY4ZWNhNWIxYmE2ZGQyMmU2MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTVkYzNiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MDlkZjkzNDE3NGNkMzQ5NjI5NGU2NjhlY2E1YjFiYTZkZDIyZTYwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTBiYjZmYzQyNmIxMzI0ODQ4YTYzOWM3YmI0MTRlNWQxNDM1NjU1MCBiL2Z1enplci9jb3JwdXMvOTBiYjZmYzQyNmIxMzI0ODQ4YTYzOWM3YmI0MTRlNWQxNDM1NjU1MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTljZDI0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MGJiNmZjNDI2YjEzMjQ4NDhhNjM5YzdiYjQxNGU1ZDE0MzU2NTUwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTBjN2NiMzBiNTliMDJiMjNjZmY0NTczOWNiYzk2NGZkZmY0YjNmOSBiL2Z1enplci9jb3JwdXMvOTBjN2NiMzBiNTliMDJiMjNjZmY0NTczOWNiYzk2NGZkZmY0YjNmOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTc5YzM1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MGM3Y2IzMGI1OWIwMmIyM2NmZjQ1NzM5Y2JjOTY0ZmRmZjRiM2Y5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTBkNGMyZDk1ZDI1YWExZTY3YWI3OGYxNTUzMTQ4ZGU0M2Y0MmNlYiBiL2Z1enplci9jb3JwdXMvOTBkNGMyZDk1ZDI1YWExZTY3YWI3OGYxNTUzMTQ4ZGU0M2Y0MmNlYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDNlNGVmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MGQ0YzJkOTVkMjVhYTFlNjdhYjc4ZjE1NTMxNDhkZTQzZjQyY2ViCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTBkZmFjODgxYWNiNjI3ODdmZDk0NzlmOGMyYzkwYWNhMDk3OTg2NiBiL2Z1enplci9jb3JwdXMvOTBkZmFjODgxYWNiNjI3ODdmZDk0NzlmOGMyYzkwYWNhMDk3OTg2NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTMyMWU4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MGRmYWM4ODFhY2I2Mjc4N2ZkOTQ3OWY4YzJjOTBhY2EwOTc5ODY2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTBmMmQ4YzZhOTczYTMwNDRiYjNkOWY3YjJiNTA1ZmU4YjczNTQ2NyBiL2Z1enplci9jb3JwdXMvOTBmMmQ4YzZhOTczYTMwNDRiYjNkOWY3YjJiNTA1ZmU4YjczNTQ2NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWFkNDU2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MGYyZDhjNmE5NzNhMzA0NGJiM2Q5ZjdiMmI1MDVmZThiNzM1NDY3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTBmZDVjNTlmNjNmNjQwNGJkZWVjMzU3MWE3YzIyZGQ0NzFmMmE3NiBiL2Z1enplci9jb3JwdXMvOTBmZDVjNTlmNjNmNjQwNGJkZWVjMzU3MWE3YzIyZGQ0NzFmMmE3NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDMyZWY2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MGZkNWM1OWY2M2Y2NDA0YmRlZWMzNTcxYTdjMjJkZDQ3MWYyYTc2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTBmZmQwNGE5NTQ3ZmQ0NGI1NzRlMjM0Njc2NDYwNTQzNmI0OTRkZCBiL2Z1enplci9jb3JwdXMvOTBmZmQwNGE5NTQ3ZmQ0NGI1NzRlMjM0Njc2NDYwNTQzNmI0OTRkZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTViM2QyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MGZmZDA0YTk1NDdmZDQ0YjU3NGUyMzQ2NzY0NjA1NDM2YjQ5NGRkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTEwYmIzY2E3MmE3NjUwOGEwYTAzNjgzMGYwYjA2NzhkMWNlOGNmNiBiL2Z1enplci9jb3JwdXMvOTEwYmIzY2E3MmE3NjUwOGEwYTAzNjgzMGYwYjA2NzhkMWNlOGNmNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWI3NDEyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MTBiYjNjYTcyYTc2NTA4YTBhMDM2ODMwZjBiMDY3OGQxY2U4Y2Y2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTExM2RjNjFmZDU4NmZjYWNhYWU5ZWQzY2YzN2VhMDg0ZWNlODk5MCBiL2Z1enplci9jb3JwdXMvOTExM2RjNjFmZDU4NmZjYWNhYWU5ZWQzY2YzN2VhMDg0ZWNlODk5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmU2ZTI4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MTEzZGM2MWZkNTg2ZmNhY2FhZTllZDNjZjM3ZWEwODRlY2U4OTkwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTExNDYyMGU4N2ZhMDg0MjQzMTU3YjRmMDM2ODRlMmFiYjcyZWEwYiBiL2Z1enplci9jb3JwdXMvOTExNDYyMGU4N2ZhMDg0MjQzMTU3YjRmMDM2ODRlMmFiYjcyZWEwYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGFhY2E4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MTE0NjIwZTg3ZmEwODQyNDMxNTdiNGYwMzY4NGUyYWJiNzJlYTBiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTEyNjdkMjdlNDYzZWY2MjhiZTYzY2FkNDNiMzhhNjI0M2VlYmU5MCBiL2Z1enplci9jb3JwdXMvOTEyNjdkMjdlNDYzZWY2MjhiZTYzY2FkNDNiMzhhNjI0M2VlYmU5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDY4OTVhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MTI2N2QyN2U0NjNlZjYyOGJlNjNjYWQ0M2IzOGE2MjQzZWViZTkwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTEzZDQzYWU2NDU5MmM4YjRjNTViY2NiZmNhZjFlMzRkOWI2Yzc4YyBiL2Z1enplci9jb3JwdXMvOTEzZDQzYWU2NDU5MmM4YjRjNTViY2NiZmNhZjFlMzRkOWI2Yzc4YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDhkYTNiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MTNkNDNhZTY0NTkyYzhiNGM1NWJjY2JmY2FmMWUzNGQ5YjZjNzhjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTE0OGI0NTEyMmQwZWNhZGY1MTQ1OGRlMzM5OThmZjI3Y2U5NmU1NSBiL2Z1enplci9jb3JwdXMvOTE0OGI0NTEyMmQwZWNhZGY1MTQ1OGRlMzM5OThmZjI3Y2U5NmU1NQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWI1ODE3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MTQ4YjQ1MTIyZDBlY2FkZjUxNDU4ZGUzMzk5OGZmMjdjZTk2ZTU1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTE0ZmY1ZDcyZjJjMzVjNWRkNTI0NmY1NmNlYjI2ZjEzNTA0M2NhNyBiL2Z1enplci9jb3JwdXMvOTE0ZmY1ZDcyZjJjMzVjNWRkNTI0NmY1NmNlYjI2ZjEzNTA0M2NhNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTIyY2U0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MTRmZjVkNzJmMmMzNWM1ZGQ1MjQ2ZjU2Y2ViMjZmMTM1MDQzY2E3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTE2NmRkNWM3MTkxMGJjMmE1Yzg4YzZiNjEwYzgyMjUxOGY0N2I0OSBiL2Z1enplci9jb3JwdXMvOTE2NmRkNWM3MTkxMGJjMmE1Yzg4YzZiNjEwYzgyMjUxOGY0N2I0OQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjA0ZjY2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MTY2ZGQ1YzcxOTEwYmMyYTVjODhjNmI2MTBjODIyNTE4ZjQ3YjQ5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTE5MjNmMTg5YzY4MTNiNDZiYWE1MmEzMGY3MmJlYTlkYWI0Y2VjMyBiL2Z1enplci9jb3JwdXMvOTE5MjNmMTg5YzY4MTNiNDZiYWE1MmEzMGY3MmJlYTlkYWI0Y2VjMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjg3ZDdhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MTkyM2YxODljNjgxM2I0NmJhYTUyYTMwZjcyYmVhOWRhYjRjZWMzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTFhOGUzN2IzYTFmNDRiZGE2YWM0MDk5ODBlNmEyZDRhOTE1NmExMSBiL2Z1enplci9jb3JwdXMvOTFhOGUzN2IzYTFmNDRiZGE2YWM0MDk5ODBlNmEyZDRhOTE1NmExMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDM5MzU2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MWE4ZTM3YjNhMWY0NGJkYTZhYzQwOTk4MGU2YTJkNGE5MTU2YTExCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTFmNzk4NWMzZTZkM2Q4YTE3NTgwYTlkMjkzZDY0M2U1MmQ1YzUzNCBiL2Z1enplci9jb3JwdXMvOTFmNzk4NWMzZTZkM2Q4YTE3NTgwYTlkMjkzZDY0M2U1MmQ1YzUzNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTAwNjY5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MWY3OTg1YzNlNmQzZDhhMTc1ODBhOWQyOTNkNjQzZTUyZDVjNTM0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTIxNDgyNTlmOTQ5NTQwMTI4YjM2NDg2YmNiOWU2ZDNhYjhlYzEyNCBiL2Z1enplci9jb3JwdXMvOTIxNDgyNTlmOTQ5NTQwMTI4YjM2NDg2YmNiOWU2ZDNhYjhlYzEyNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDU1M2E0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MjE0ODI1OWY5NDk1NDAxMjhiMzY0ODZiY2I5ZTZkM2FiOGVjMTI0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTIzY2VhZWU0MGM4MmM5ZmE1NDkxYmE4NWI0OTcyYjg1ODJhMmM2OSBiL2Z1enplci9jb3JwdXMvOTIzY2VhZWU0MGM4MmM5ZmE1NDkxYmE4NWI0OTcyYjg1ODJhMmM2OQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWZmZmEyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MjNjZWFlZTQwYzgyYzlmYTU0OTFiYTg1YjQ5NzJiODU4MmEyYzY5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTI3Y2FhYWQzN2JlNGM3YzNmZjY5ZWFmM2ZjY2VhNGEwYTJjM2M2ZSBiL2Z1enplci9jb3JwdXMvOTI3Y2FhYWQzN2JlNGM3YzNmZjY5ZWFmM2ZjY2VhNGEwYTJjM2M2ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzE0MTFmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MjdjYWFhZDM3YmU0YzdjM2ZmNjllYWYzZmNjZWE0YTBhMmMzYzZlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTI4YWVkNGJlOWM2MzM1Y2ZkZWM0ZTA0YTM2NDRkMzZiMTYyZTU5ZiBiL2Z1enplci9jb3JwdXMvOTI4YWVkNGJlOWM2MzM1Y2ZkZWM0ZTA0YTM2NDRkMzZiMTYyZTU5ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDVlOWE2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MjhhZWQ0YmU5YzYzMzVjZmRlYzRlMDRhMzY0NGQzNmIxNjJlNTlmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTI4ZTVlYThhODJiZDE3MDE1Y2IxYjJiODI4ZGNjYmFlMDVlZDgxYyBiL2Z1enplci9jb3JwdXMvOTI4ZTVlYThhODJiZDE3MDE1Y2IxYjJiODI4ZGNjYmFlMDVlZDgxYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2E3MWE4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MjhlNWVhOGE4MmJkMTcwMTVjYjFiMmI4MjhkY2NiYWUwNWVkODFjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTJkNDlmYTYwYTA1MzVkOWEyOTkzZDgxZTcxYmNkODkzYjk2NzQ0ZCBiL2Z1enplci9jb3JwdXMvOTJkNDlmYTYwYTA1MzVkOWEyOTkzZDgxZTcxYmNkODkzYjk2NzQ0ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTljNzMwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MmQ0OWZhNjBhMDUzNWQ5YTI5OTNkODFlNzFiY2Q4OTNiOTY3NDRkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTJlNGI4MDhjY2Q3NzE4ZmE0NDk0ZWZlMjgwMzgyMmIzNzc1OTZlYSBiL2Z1enplci9jb3JwdXMvOTJlNGI4MDhjY2Q3NzE4ZmE0NDk0ZWZlMjgwMzgyMmIzNzc1OTZlYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTE5Y2EwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MmU0YjgwOGNjZDc3MThmYTQ0OTRlZmUyODAzODIyYjM3NzU5NmVhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTJlNmZjYTliYjUyMjNmZWNmMTU3YmMyZmRhMmEzYjAyMTgxYjNlNyBiL2Z1enplci9jb3JwdXMvOTJlNmZjYTliYjUyMjNmZWNmMTU3YmMyZmRhMmEzYjAyMTgxYjNlNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmZlMmIzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MmU2ZmNhOWJiNTIyM2ZlY2YxNTdiYzJmZGEyYTNiMDIxODFiM2U3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTMyMzU5Nzc4YTdkZGFmNzE5ZmM4NzhhNGUyMzA5M2UxNDI5NDhjNiBiL2Z1enplci9jb3JwdXMvOTMyMzU5Nzc4YTdkZGFmNzE5ZmM4NzhhNGUyMzA5M2UxNDI5NDhjNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzk5YjJjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MzIzNTk3NzhhN2RkYWY3MTlmYzg3OGE0ZTIzMDkzZTE0Mjk0OGM2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTMzYjk3ZjIxYzgxZDY4ZTMyODU3Y2E2NGRmMjhjZDk3YTA0MDc3YSBiL2Z1enplci9jb3JwdXMvOTMzYjk3ZjIxYzgxZDY4ZTMyODU3Y2E2NGRmMjhjZDk3YTA0MDc3YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTAxZmY2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MzNiOTdmMjFjODFkNjhlMzI4NTdjYTY0ZGYyOGNkOTdhMDQwNzdhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTM2MDhjOWNkMzA2ZWEwODE4ZGVkYjFlMWZkODZhMzk5NTIxMjNhYyBiL2Z1enplci9jb3JwdXMvOTM2MDhjOWNkMzA2ZWEwODE4ZGVkYjFlMWZkODZhMzk5NTIxMjNhYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDE2MWU0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85MzYwOGM5Y2QzMDZlYTA4MThkZWRiMWUxZmQ4NmEzOTk1MjEyM2FjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTM4OTAwYmJhZjRhMWExZWVjNzVkMTZlYzNlNGJjNDUyNTZkZTZjZiBiL2Z1enplci9jb3JwdXMvOTM4OTAwYmJhZjRhMWExZWVjNzVkMTZlYzNlNGJjNDUyNTZkZTZjZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzNlYmM2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85Mzg5MDBiYmFmNGExYTFlZWM3NWQxNmVjM2U0YmM0NTI1NmRlNmNmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTNkNTZkNTM5YWY2YWM1YTY5ZTY5NWFkNTY1ZWE2ZDAyZGExNTdjZCBiL2Z1enplci9jb3JwdXMvOTNkNTZkNTM5YWY2YWM1YTY5ZTY5NWFkNTY1ZWE2ZDAyZGExNTdjZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDQyYzNhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85M2Q1NmQ1MzlhZjZhYzVhNjllNjk1YWQ1NjVlYTZkMDJkYTE1N2NkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTNmYTA0YTE1YTIwMzIyNWFjZTYyMmFmZmZkOTU1ZWYyYzUwZDQ2YyBiL2Z1enplci9jb3JwdXMvOTNmYTA0YTE1YTIwMzIyNWFjZTYyMmFmZmZkOTU1ZWYyYzUwZDQ2YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDJlN2ZiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85M2ZhMDRhMTVhMjAzMjI1YWNlNjIyYWZmZmQ5NTVlZjJjNTBkNDZjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTQyOTY5MTNkMTFjZTc1M2ZlNmVkOTUxNzE0MTBjZjVmOGQwMWMzNiBiL2Z1enplci9jb3JwdXMvOTQyOTY5MTNkMTFjZTc1M2ZlNmVkOTUxNzE0MTBjZjVmOGQwMWMzNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTgzMTE0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NDI5NjkxM2QxMWNlNzUzZmU2ZWQ5NTE3MTQxMGNmNWY4ZDAxYzM2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTQzNjhjOTEzMWRkMWVkOGRkNzllOGZmN2NhOThhYTQwYjMwZDdkYiBiL2Z1enplci9jb3JwdXMvOTQzNjhjOTEzMWRkMWVkOGRkNzllOGZmN2NhOThhYTQwYjMwZDdkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTNhOTE3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NDM2OGM5MTMxZGQxZWQ4ZGQ3OWU4ZmY3Y2E5OGFhNDBiMzBkN2RiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTQzZTc5MGE5ZWYxOGVjYWU1NjYxMDgwZGVkNDIxYzNkYTRlOTY3YSBiL2Z1enplci9jb3JwdXMvOTQzZTc5MGE5ZWYxOGVjYWU1NjYxMDgwZGVkNDIxYzNkYTRlOTY3YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2Q4MTRjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NDNlNzkwYTllZjE4ZWNhZTU2NjEwODBkZWQ0MjFjM2RhNGU5NjdhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTQ1YjlhMTJhMWIyOTNlY2QzYWYwYjRiYzRhZDExYTgxMTgzZDJlNyBiL2Z1enplci9jb3JwdXMvOTQ1YjlhMTJhMWIyOTNlY2QzYWYwYjRiYzRhZDExYTgxMTgzZDJlNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzc2MzViCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NDViOWExMmExYjI5M2VjZDNhZjBiNGJjNGFkMTFhODExODNkMmU3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTQ2ODg1MDMwMWNlOTE3MGFhODY5ODZiYTRmMTA0NjFiNzExMzQ5ZSBiL2Z1enplci9jb3JwdXMvOTQ2ODg1MDMwMWNlOTE3MGFhODY5ODZiYTRmMTA0NjFiNzExMzQ5ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDA4ZGE5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NDY4ODUwMzAxY2U5MTcwYWE4Njk4NmJhNGYxMDQ2MWI3MTEzNDllCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTRiMzQ0MjdiZTVkN2M2MmVlNzY0NTU5NDA2YTBjNTYxMTg0YjY2MCBiL2Z1enplci9jb3JwdXMvOTRiMzQ0MjdiZTVkN2M2MmVlNzY0NTU5NDA2YTBjNTYxMTg0YjY2MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzliZTFlCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NGIzNDQyN2JlNWQ3YzYyZWU3NjQ1NTk0MDZhMGM1NjExODRiNjYwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTRjNTI2ZDA3NmI4MTJlNzY4YmE5MzNlZjFlMzczYzRlYzA5MTJkNyBiL2Z1enplci9jb3JwdXMvOTRjNTI2ZDA3NmI4MTJlNzY4YmE5MzNlZjFlMzczYzRlYzA5MTJkNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWNjNTk3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NGM1MjZkMDc2YjgxMmU3NjhiYTkzM2VmMWUzNzNjNGVjMDkxMmQ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTRkMTI0ZGJiNmM1YzQxOGZkNWVkZDA5OTI3ZGUzZmQzOTUyYzQ0OCBiL2Z1enplci9jb3JwdXMvOTRkMTI0ZGJiNmM1YzQxOGZkNWVkZDA5OTI3ZGUzZmQzOTUyYzQ0OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTA2NTgxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NGQxMjRkYmI2YzVjNDE4ZmQ1ZWRkMDk5MjdkZTNmZDM5NTJjNDQ4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTRlM2Y0NmQwMzU0MmNiMDgwMzA1MTE0NDFhN2IwZTE1MDJjOTMzNiBiL2Z1enplci9jb3JwdXMvOTRlM2Y0NmQwMzU0MmNiMDgwMzA1MTE0NDFhN2IwZTE1MDJjOTMzNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjFlNGEyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NGUzZjQ2ZDAzNTQyY2IwODAzMDUxMTQ0MWE3YjBlMTUwMmM5MzM2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTRmZjliZDViYjRkZmI0ZDA3NGMxMTVlMDIwMTM2NzI0N2U2ZjQwZiBiL2Z1enplci9jb3JwdXMvOTRmZjliZDViYjRkZmI0ZDA3NGMxMTVlMDIwMTM2NzI0N2U2ZjQwZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2E0YmU5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NGZmOWJkNWJiNGRmYjRkMDc0YzExNWUwMjAxMzY3MjQ3ZTZmNDBmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTUyNDE4Yjg2YjY5YzZjNTk1NTQ4MGRiZjQ5MzI5NjVjMGVkYWYyMSBiL2Z1enplci9jb3JwdXMvOTUyNDE4Yjg2YjY5YzZjNTk1NTQ4MGRiZjQ5MzI5NjVjMGVkYWYyMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2Q2YzgxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NTI0MThiODZiNjljNmM1OTU1NDgwZGJmNDkzMjk2NWMwZWRhZjIxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTU0ZGE3NGE0MzYyYWM4YjAwZWEzOGExY2JiNWQwYzg0ZTkyZTY0YSBiL2Z1enplci9jb3JwdXMvOTU0ZGE3NGE0MzYyYWM4YjAwZWEzOGExY2JiNWQwYzg0ZTkyZTY0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2Y0YTE3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NTRkYTc0YTQzNjJhYzhiMDBlYTM4YTFjYmI1ZDBjODRlOTJlNjRhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTU4OTMxYzBhZjRmZGUxMmFmOTFiMmI0YjJjZjMzZGQzZWEzNzA2MSBiL2Z1enplci9jb3JwdXMvOTU4OTMxYzBhZjRmZGUxMmFmOTFiMmI0YjJjZjMzZGQzZWEzNzA2MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTE2MzYyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NTg5MzFjMGFmNGZkZTEyYWY5MWIyYjRiMmNmMzNkZDNlYTM3MDYxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTVhMWY0YzdjYzExMmM4OGFhYzk2N2I2ZmViYTg0ZDlkOGNlODAxMyBiL2Z1enplci9jb3JwdXMvOTVhMWY0YzdjYzExMmM4OGFhYzk2N2I2ZmViYTg0ZDlkOGNlODAxMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2I3MGI0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NWExZjRjN2NjMTEyYzg4YWFjOTY3YjZmZWJhODRkOWQ4Y2U4MDEzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTVjYmE0MGE2YWQwZDFmMDQ2MDgxNTUyZmIxYmE3NTYxNTgwZGUyNCBiL2Z1enplci9jb3JwdXMvOTVjYmE0MGE2YWQwZDFmMDQ2MDgxNTUyZmIxYmE3NTYxNTgwZGUyNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mzg1N2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NWNiYTQwYTZhZDBkMWYwNDYwODE1NTJmYjFiYTc1NjE1ODBkZTI0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTVlY2EzNGYyN2E2YTUxZWY1ZGRiZDQ1ZTIxODFjNDY0NjAzM2UzNSBiL2Z1enplci9jb3JwdXMvOTVlY2EzNGYyN2E2YTUxZWY1ZGRiZDQ1ZTIxODFjNDY0NjAzM2UzNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTE5YzhmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NWVjYTM0ZjI3YTZhNTFlZjVkZGJkNDVlMjE4MWM0NjQ2MDMzZTM1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTY1MGE5ODg1ZTJiNWZmNjNlMTA2ZTMzZDI2MTk3OTk2MWRkYmRjZSBiL2Z1enplci9jb3JwdXMvOTY1MGE5ODg1ZTJiNWZmNjNlMTA2ZTMzZDI2MTk3OTk2MWRkYmRjZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGNhOTFmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NjUwYTk4ODVlMmI1ZmY2M2UxMDZlMzNkMjYxOTc5OTYxZGRiZGNlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTY1MGZkMjJiNjg5MzhlOWM3OTJjZTZkYjg5ZWM5NTcyNDE4M2MxZiBiL2Z1enplci9jb3JwdXMvOTY1MGZkMjJiNjg5MzhlOWM3OTJjZTZkYjg5ZWM5NTcyNDE4M2MxZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzg4MjNmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NjUwZmQyMmI2ODkzOGU5Yzc5MmNlNmRiODllYzk1NzI0MTgzYzFmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTY1MzBkY2E1OTMwOTdiNzBjNjVkMzM5ZTNlZWM3ZGUxNTc5MzA3YyBiL2Z1enplci9jb3JwdXMvOTY1MzBkY2E1OTMwOTdiNzBjNjVkMzM5ZTNlZWM3ZGUxNTc5MzA3YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTZjYzkxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NjUzMGRjYTU5MzA5N2I3MGM2NWQzMzllM2VlYzdkZTE1NzkzMDdjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTY2MGMwOTg4ZDVkZDU3MWYxMzliNjA0NjJlMmMzYjZiOGE5OTIwMSBiL2Z1enplci9jb3JwdXMvOTY2MGMwOTg4ZDVkZDU3MWYxMzliNjA0NjJlMmMzYjZiOGE5OTIwMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDAwMWMzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NjYwYzA5ODhkNWRkNTcxZjEzOWI2MDQ2MmUyYzNiNmI4YTk5MjAxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTY3ZTIzZjY3N2IxMjcyNDJlZGY2ZTM5ODMxOGM3YjBiZTVkMmUxYyBiL2Z1enplci9jb3JwdXMvOTY3ZTIzZjY3N2IxMjcyNDJlZGY2ZTM5ODMxOGM3YjBiZTVkMmUxYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2IyOGUxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NjdlMjNmNjc3YjEyNzI0MmVkZjZlMzk4MzE4YzdiMGJlNWQyZTFjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTY5MTg3NTRjMWQ4NDc2YjAwNjM4ODczOTk2OGRjZTkwNzIwYzJjNyBiL2Z1enplci9jb3JwdXMvOTY5MTg3NTRjMWQ4NDc2YjAwNjM4ODczOTk2OGRjZTkwNzIwYzJjNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzYyMDUxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NjkxODc1NGMxZDg0NzZiMDA2Mzg4NzM5OTY4ZGNlOTA3MjBjMmM3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTZiNDA2YzkxMzJjMDgyODZmYmE0MDAyZDdkMjYxNDIxNzFmNDRjYiBiL2Z1enplci9jb3JwdXMvOTZiNDA2YzkxMzJjMDgyODZmYmE0MDAyZDdkMjYxNDIxNzFmNDRjYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDZkYzIxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NmI0MDZjOTEzMmMwODI4NmZiYTQwMDJkN2QyNjE0MjE3MWY0NGNiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTZkNTc2N2M3MmVjNzhkNmZhMTZjMDk3ZDk1NTU5YjBiNDQ5ZTEzNSBiL2Z1enplci9jb3JwdXMvOTZkNTc2N2M3MmVjNzhkNmZhMTZjMDk3ZDk1NTU5YjBiNDQ5ZTEzNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTNhMTE1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NmQ1NzY3YzcyZWM3OGQ2ZmExNmMwOTdkOTU1NTliMGI0NDllMTM1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTZkYWMzZjY2NGRmMDY5ZjM3M2E1ZjAyYWZlZWQ4MDVmOGQwMDkxOCBiL2Z1enplci9jb3JwdXMvOTZkYWMzZjY2NGRmMDY5ZjM3M2E1ZjAyYWZlZWQ4MDVmOGQwMDkxOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDEyMDUwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NmRhYzNmNjY0ZGYwNjlmMzczYTVmMDJhZmVlZDgwNWY4ZDAwOTE4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTZlMTZjYTY5YzY4YzY4MTJjMzRiM2Y3ZDg3MzgxYjRmNTU4OTM2MSBiL2Z1enplci9jb3JwdXMvOTZlMTZjYTY5YzY4YzY4MTJjMzRiM2Y3ZDg3MzgxYjRmNTU4OTM2MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzg2MmFmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NmUxNmNhNjljNjhjNjgxMmMzNGIzZjdkODczODFiNGY1NTg5MzYxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTcwMWVhYzI3ZTM4YjRkMTk4ZTI2MjI4MTEzZmZkYzc2ZmRlYTU4OSBiL2Z1enplci9jb3JwdXMvOTcwMWVhYzI3ZTM4YjRkMTk4ZTI2MjI4MTEzZmZkYzc2ZmRlYTU4OQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2Y4YzJiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NzAxZWFjMjdlMzhiNGQxOThlMjYyMjgxMTNmZmRjNzZmZGVhNTg5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTcxYjE1NjBhYjkyZTc4NDBhZmYwMDM0Yjg5ODMzY2U0ZTYyZDhjYSBiL2Z1enplci9jb3JwdXMvOTcxYjE1NjBhYjkyZTc4NDBhZmYwMDM0Yjg5ODMzY2U0ZTYyZDhjYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzJhYzA2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NzFiMTU2MGFiOTJlNzg0MGFmZjAwMzRiODk4MzNjZTRlNjJkOGNhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTcxZWMxOTVkNTAxMWExNzJlYzU3YzEwODYzZWNlYzZkMDM2NjI4ZiBiL2Z1enplci9jb3JwdXMvOTcxZWMxOTVkNTAxMWExNzJlYzU3YzEwODYzZWNlYzZkMDM2NjI4ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDM3MTVjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NzFlYzE5NWQ1MDExYTE3MmVjNTdjMTA4NjNlY2VjNmQwMzY2MjhmCkBAIC0wLDAgKzEgQEAKK3Nfe3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3t7e3swaQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTcyMThhMGIyNTliMjBkM2UwNzc3ZWM1MTkzMTQ2YzBmMjBjMTUwZSBiL2Z1enplci9jb3JwdXMvOTcyMThhMGIyNTliMjBkM2UwNzc3ZWM1MTkzMTQ2YzBmMjBjMTUwZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2JkY2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NzIxOGEwYjI1OWIyMGQzZTA3NzdlYzUxOTMxNDZjMGYyMGMxNTBlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTcyYmZiNzFlMTdhYWI1OTFhNTM3MTM2MjRiOWQzODUxMzgwMGYyZSBiL2Z1enplci9jb3JwdXMvOTcyYmZiNzFlMTdhYWI1OTFhNTM3MTM2MjRiOWQzODUxMzgwMGYyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWFjMmMzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NzJiZmI3MWUxN2FhYjU5MWE1MzcxMzYyNGI5ZDM4NTEzODAwZjJlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTc2NDEyMDNjNzU5M2M0YmFmZmIzNWE2MWY3MDU0YTliMDA0OWE0ZiBiL2Z1enplci9jb3JwdXMvOTc2NDEyMDNjNzU5M2M0YmFmZmIzNWE2MWY3MDU0YTliMDA0OWE0ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjcwODdlCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NzY0MTIwM2M3NTkzYzRiYWZmYjM1YTYxZjcwNTRhOWIwMDQ5YTRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTc3ZWU3MzE5ZjY2ZDVkNGRhMmQ5YTM3ODQ1YTlkMzY2ZmQ3NTJiZSBiL2Z1enplci9jb3JwdXMvOTc3ZWU3MzE5ZjY2ZDVkNGRhMmQ5YTM3ODQ1YTlkMzY2ZmQ3NTJiZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzlhMWQyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NzdlZTczMTlmNjZkNWQ0ZGEyZDlhMzc4NDVhOWQzNjZmZDc1MmJlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTc3ZmQ0NmYyNzYyMDE5OGZlOGVlYjA3YWUwN2Q2ZmI4MDVlMzEyOSBiL2Z1enplci9jb3JwdXMvOTc3ZmQ0NmYyNzYyMDE5OGZlOGVlYjA3YWUwN2Q2ZmI4MDVlMzEyOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2NlZDBhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NzdmZDQ2ZjI3NjIwMTk4ZmU4ZWViMDdhZTA3ZDZmYjgwNWUzMTI5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTc3ZmY2ZTAyNzA3YWRlZmY4NjUyMWU3MWVkYjhmZjMyYTc2ZTMwZCBiL2Z1enplci9jb3JwdXMvOTc3ZmY2ZTAyNzA3YWRlZmY4NjUyMWU3MWVkYjhmZjMyYTc2ZTMwZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODM4MDMwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85NzdmZjZlMDI3MDdhZGVmZjg2NTIxZTcxZWRiOGZmMzJhNzZlMzBkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTdmYjViM2M1YjU4NjczNzRiZjZmNDIwMGFhZjY3NWIxZjA1M2U1NCBiL2Z1enplci9jb3JwdXMvOTdmYjViM2M1YjU4NjczNzRiZjZmNDIwMGFhZjY3NWIxZjA1M2U1NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmI4ZDZiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85N2ZiNWIzYzViNTg2NzM3NGJmNmY0MjAwYWFmNjc1YjFmMDUzZTU0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTgwYjM5YmU2ZDQyZTI5NGFiNTRhMDJjZDk2YjgzMjVmZmM0Zjk4MiBiL2Z1enplci9jb3JwdXMvOTgwYjM5YmU2ZDQyZTI5NGFiNTRhMDJjZDk2YjgzMjVmZmM0Zjk4MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDc5YjIzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ODBiMzliZTZkNDJlMjk0YWI1NGEwMmNkOTZiODMyNWZmYzRmOTgyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTgxMDU3YmJkNGVlYjBkMjRlNzU2MmZlYWY2MWU2MjVjNmRjODhiZCBiL2Z1enplci9jb3JwdXMvOTgxMDU3YmJkNGVlYjBkMjRlNzU2MmZlYWY2MWU2MjVjNmRjODhiZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmRkZTk4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ODEwNTdiYmQ0ZWViMGQyNGU3NTYyZmVhZjYxZTYyNWM2ZGM4OGJkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTgxYTZhNTYwMDA2OWJkZjQwNjY1YzY3YmRlYzE4NmIyZGY1NWE4MyBiL2Z1enplci9jb3JwdXMvOTgxYTZhNTYwMDA2OWJkZjQwNjY1YzY3YmRlYzE4NmIyZGY1NWE4MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWQxZTI4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ODFhNmE1NjAwMDY5YmRmNDA2NjVjNjdiZGVjMTg2YjJkZjU1YTgzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTgyZjg2NWIxNWUwODFhMjU2NDljODQxY2IwM2U5NWExZTQ5YjA5YiBiL2Z1enplci9jb3JwdXMvOTgyZjg2NWIxNWUwODFhMjU2NDljODQxY2IwM2U5NWExZTQ5YjA5YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGQwYTRlCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ODJmODY1YjE1ZTA4MWEyNTY0OWM4NDFjYjAzZTk1YTFlNDliMDliCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTg1NTkzYmM2Zjc5MjM2MGNlOGI4YTRiNWExNjM0NmVjMjljNmEzOCBiL2Z1enplci9jb3JwdXMvOTg1NTkzYmM2Zjc5MjM2MGNlOGI4YTRiNWExNjM0NmVjMjljNmEzOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTAwZDE4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ODU1OTNiYzZmNzkyMzYwY2U4YjhhNGI1YTE2MzQ2ZWMyOWM2YTM4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTg1Y2ZiNzgzZWQyYzhhNmEzZTM4NWQyNjY5ZDdiYWI0MjAxZTJiNCBiL2Z1enplci9jb3JwdXMvOTg1Y2ZiNzgzZWQyYzhhNmEzZTM4NWQyNjY5ZDdiYWI0MjAxZTJiNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDk0MWMwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ODVjZmI3ODNlZDJjOGE2YTNlMzg1ZDI2NjlkN2JhYjQyMDFlMmI0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTg2OTNkMDQ1NjlkMzRlYmNhMjdmOTU0MjVhMzhiYmUxMDg4ZWNhNyBiL2Z1enplci9jb3JwdXMvOTg2OTNkMDQ1NjlkMzRlYmNhMjdmOTU0MjVhMzhiYmUxMDg4ZWNhNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjUyNzJlCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ODY5M2QwNDU2OWQzNGViY2EyN2Y5NTQyNWEzOGJiZTEwODhlY2E3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTg2ZmM1YTI4YTQ4NjdhNGRjYjZiZDI5MTEyMjhlMDg3ZjUzYjM5MSBiL2Z1enplci9jb3JwdXMvOTg2ZmM1YTI4YTQ4NjdhNGRjYjZiZDI5MTEyMjhlMDg3ZjUzYjM5MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjNjMmMwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ODZmYzVhMjhhNDg2N2E0ZGNiNmJkMjkxMTIyOGUwODdmNTNiMzkxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTg3MmM4OTVkYmZmZjUxNWQ5ZGNjMTJhNjgxNWYwYjdhNTdmOWJkOSBiL2Z1enplci9jb3JwdXMvOTg3MmM4OTVkYmZmZjUxNWQ5ZGNjMTJhNjgxNWYwYjdhNTdmOWJkOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWI3N2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ODcyYzg5NWRiZmZmNTE1ZDlkY2MxMmE2ODE1ZjBiN2E1N2Y5YmQ5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOThiNWNlMDBjOThkYjA0ZjBjMjViYTQwMWNlMWMzNDczNjY1YzNkMSBiL2Z1enplci9jb3JwdXMvOThiNWNlMDBjOThkYjA0ZjBjMjViYTQwMWNlMWMzNDczNjY1YzNkMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzBkYTBhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85OGI1Y2UwMGM5OGRiMDRmMGMyNWJhNDAxY2UxYzM0NzM2NjVjM2QxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOThmOGJmNWE1Nzg3NjhjOTY4N2FjNjZjZWQyMjIyY2U5ODljNTc1YSBiL2Z1enplci9jb3JwdXMvOThmOGJmNWE1Nzg3NjhjOTY4N2FjNjZjZWQyMjIyY2U5ODljNTc1YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWJiMzkyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85OGY4YmY1YTU3ODc2OGM5Njg3YWM2NmNlZDIyMjJjZTk4OWM1NzVhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTkxMzc0MWQxZmMwNTk5ZTliYzA0MGU3NDNiNDlkMDkxMDk2MmIwZSBiL2Z1enplci9jb3JwdXMvOTkxMzc0MWQxZmMwNTk5ZTliYzA0MGU3NDNiNDlkMDkxMDk2MmIwZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGM5YjY0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85OTEzNzQxZDFmYzA1OTllOWJjMDQwZTc0M2I0OWQwOTEwOTYyYjBlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTk1MjgyNDk5NzNkZTc2NWU0NjUwODk1NTgwZDE1MzU1NDQzZTY3ZiBiL2Z1enplci9jb3JwdXMvOTk1MjgyNDk5NzNkZTc2NWU0NjUwODk1NTgwZDE1MzU1NDQzZTY3ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2IwMmFlCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85OTUyODI0OTk3M2RlNzY1ZTQ2NTA4OTU1ODBkMTUzNTU0NDNlNjdmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTk2ZjkwZWVmOWZiZTUxYjU3ODY3NWIzOTA3YjM3OTNkMGNhNjRmNiBiL2Z1enplci9jb3JwdXMvOTk2ZjkwZWVmOWZiZTUxYjU3ODY3NWIzOTA3YjM3OTNkMGNhNjRmNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTA3OGFlCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85OTZmOTBlZWY5ZmJlNTFiNTc4Njc1YjM5MDdiMzc5M2QwY2E2NGY2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTk4YjcyNDk3MmQyMWY0MTEyMTQ3NzEzOTRjMDhhMDlhOGU3YmI3OSBiL2Z1enplci9jb3JwdXMvOTk4YjcyNDk3MmQyMWY0MTEyMTQ3NzEzOTRjMDhhMDlhOGU3YmI3OQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzJlYmQxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85OThiNzI0OTcyZDIxZjQxMTIxNDc3MTM5NGMwOGEwOWE4ZTdiYjc5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTlhZDdkY2I1YTM3MWNmODI4NWU0OGQ3Y2RmNjc0OTAyN2ZlYTNkNCBiL2Z1enplci9jb3JwdXMvOTlhZDdkY2I1YTM3MWNmODI4NWU0OGQ3Y2RmNjc0OTAyN2ZlYTNkNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmRlZDI4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85OWFkN2RjYjVhMzcxY2Y4Mjg1ZTQ4ZDdjZGY2NzQ5MDI3ZmVhM2Q0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTljMDIwNDc4YmI2ODgwOGE2YzRkMzc1N2JmZGRkYmVmYWZkMjBhZSBiL2Z1enplci9jb3JwdXMvOTljMDIwNDc4YmI2ODgwOGE2YzRkMzc1N2JmZGRkYmVmYWZkMjBhZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGNmYmI0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85OWMwMjA0NzhiYjY4ODA4YTZjNGQzNzU3YmZkZGRiZWZhZmQyMGFlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTlmMzg3MGVkN2I2MTlhOTU5NDYxNTdlNmZmODZjM2Q0NjZlMzkzNSBiL2Z1enplci9jb3JwdXMvOTlmMzg3MGVkN2I2MTlhOTU5NDYxNTdlNmZmODZjM2Q0NjZlMzkzNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2EzZDJkCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85OWYzODcwZWQ3YjYxOWE5NTk0NjE1N2U2ZmY4NmMzZDQ2NmUzOTM1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOTlmNmVmMGZhNTBjZmI0ZjE2NDJmNzU4YzUyODIwYTY4Yzk2NDQ5NiBiL2Z1enplci9jb3JwdXMvOTlmNmVmMGZhNTBjZmI0ZjE2NDJmNzU4YzUyODIwYTY4Yzk2NDQ5NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjI3YzQwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85OWY2ZWYwZmE1MGNmYjRmMTY0MmY3NThjNTI4MjBhNjhjOTY0NDk2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWE2ZWQxYmUwNjA2ODg5ZTMxMjRmYWY3N2Y5ZjI2ODIxYTMwODA1NiBiL2Z1enplci9jb3JwdXMvOWE2ZWQxYmUwNjA2ODg5ZTMxMjRmYWY3N2Y5ZjI2ODIxYTMwODA1NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTU3YjdiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85YTZlZDFiZTA2MDY4ODllMzEyNGZhZjc3ZjlmMjY4MjFhMzA4MDU2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWE5MzE1OGNkNWNkYWY4ZDE5Y2JmNTRlZjhmYjQ1MWE1Mzk2NzMzOSBiL2Z1enplci9jb3JwdXMvOWE5MzE1OGNkNWNkYWY4ZDE5Y2JmNTRlZjhmYjQ1MWE1Mzk2NzMzOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmE0NjI1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85YTkzMTU4Y2Q1Y2RhZjhkMTljYmY1NGVmOGZiNDUxYTUzOTY3MzM5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWFhYWNkZDAzNGE0YjY3MjAzMjI1NDVjZTY4NjcyYTRjYTMyMDYxYyBiL2Z1enplci9jb3JwdXMvOWFhYWNkZDAzNGE0YjY3MjAzMjI1NDVjZTY4NjcyYTRjYTMyMDYxYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2ViOTUxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85YWFhY2RkMDM0YTRiNjcyMDMyMjU0NWNlNjg2NzJhNGNhMzIwNjFjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWFhZDU2MDc5NDAzNzBmNzIyNGM3YWFjNzUzYTIyNDk1OTg0YTlkNiBiL2Z1enplci9jb3JwdXMvOWFhZDU2MDc5NDAzNzBmNzIyNGM3YWFjNzUzYTIyNDk1OTg0YTlkNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2FiNjBlCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85YWFkNTYwNzk0MDM3MGY3MjI0YzdhYWM3NTNhMjI0OTU5ODRhOWQ2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWFiYmQ2ZjYxZjEyZGFjMmYwZGFhY2EyOTFhMzI5YjhhMjk5MWQ4MiBiL2Z1enplci9jb3JwdXMvOWFiYmQ2ZjYxZjEyZGFjMmYwZGFhY2EyOTFhMzI5YjhhMjk5MWQ4MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTZjOWZiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85YWJiZDZmNjFmMTJkYWMyZjBkYWFjYTI5MWEzMjliOGEyOTkxZDgyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWFlYWMwYjg5YmU5YTVkMDE3NWIzYjdhYmM2YmQ4MGQzYzRmMTQxMiBiL2Z1enplci9jb3JwdXMvOWFlYWMwYjg5YmU5YTVkMDE3NWIzYjdhYmM2YmQ4MGQzYzRmMTQxMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDlkZGQxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85YWVhYzBiODliZTlhNWQwMTc1YjNiN2FiYzZiZDgwZDNjNGYxNDEyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWIwYmU5NjBiMTEyOWZjZjcyZDJjZTNlMWRhMGZlNzc5NmUwZGJkMyBiL2Z1enplci9jb3JwdXMvOWIwYmU5NjBiMTEyOWZjZjcyZDJjZTNlMWRhMGZlNzc5NmUwZGJkMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmU4M2E2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85YjBiZTk2MGIxMTI5ZmNmNzJkMmNlM2UxZGEwZmU3Nzk2ZTBkYmQzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWIxN2JhNTExMmVhZDE4ZjMyYzY5ZDY4MGNmMWI0YzY4NjAwMzU4NiBiL2Z1enplci9jb3JwdXMvOWIxN2JhNTExMmVhZDE4ZjMyYzY5ZDY4MGNmMWI0YzY4NjAwMzU4NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yjk3OGU5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85YjE3YmE1MTEyZWFkMThmMzJjNjlkNjgwY2YxYjRjNjg2MDAzNTg2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWIyOGI3Y2VlZjYyN2I5MzEwZjBjYzM1ZjYxZDc4ZTQ2MTQxNTc5NyBiL2Z1enplci9jb3JwdXMvOWIyOGI3Y2VlZjYyN2I5MzEwZjBjYzM1ZjYxZDc4ZTQ2MTQxNTc5NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTMzMjU0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85YjI4YjdjZWVmNjI3YjkzMTBmMGNjMzVmNjFkNzhlNDYxNDE1Nzk3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWIzMGQ0Mjk2YzI3MmZkZDQ4ODc2ZTRkNTE3ZDhjZDQ4ZTdlMjNjOCBiL2Z1enplci9jb3JwdXMvOWIzMGQ0Mjk2YzI3MmZkZDQ4ODc2ZTRkNTE3ZDhjZDQ4ZTdlMjNjOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGE1YThiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85YjMwZDQyOTZjMjcyZmRkNDg4NzZlNGQ1MTdkOGNkNDhlN2UyM2M4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWI0YmUzMDM1MDlkMDRjY2RlZDEzOTA2MmQxYzg2OTQ5ZjEzYTc0OSBiL2Z1enplci9jb3JwdXMvOWI0YmUzMDM1MDlkMDRjY2RlZDEzOTA2MmQxYzg2OTQ5ZjEzYTc0OQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjcyMTc1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85YjRiZTMwMzUwOWQwNGNjZGVkMTM5MDYyZDFjODY5NDlmMTNhNzQ5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWI1NGNmM2EzZTVhYmFjMWYxNzk4ZTYyY2Y1NTdlYjUzNzg1Y2Q3MSBiL2Z1enplci9jb3JwdXMvOWI1NGNmM2EzZTVhYmFjMWYxNzk4ZTYyY2Y1NTdlYjUzNzg1Y2Q3MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGRkMzIyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85YjU0Y2YzYTNlNWFiYWMxZjE3OThlNjJjZjU1N2ViNTM3ODVjZDcxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWI3Yzk1YjJlZTcyYWI2MzQ3NDg0YTY2Nzk1NDhiNzY3MWZlYzQwZCBiL2Z1enplci9jb3JwdXMvOWI3Yzk1YjJlZTcyYWI2MzQ3NDg0YTY2Nzk1NDhiNzY3MWZlYzQwZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGMwNWYxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85YjdjOTViMmVlNzJhYjYzNDc0ODRhNjY3OTU0OGI3NjcxZmVjNDBkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWJhOGJlNWYwMWU2YzU5NTIzMzYwZTI0NmJmMzIxNzA3MTk1YzY0ZSBiL2Z1enplci9jb3JwdXMvOWJhOGJlNWYwMWU2YzU5NTIzMzYwZTI0NmJmMzIxNzA3MTk1YzY0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDVjNzg5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85YmE4YmU1ZjAxZTZjNTk1MjMzNjBlMjQ2YmYzMjE3MDcxOTVjNjRlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWMxZTA3MWNkNDBlZjQ1NmM4MGRiMTRhYjYyNzkxOTE5MDg4MDRlNiBiL2Z1enplci9jb3JwdXMvOWMxZTA3MWNkNDBlZjQ1NmM4MGRiMTRhYjYyNzkxOTE5MDg4MDRlNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2Y5NTE1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85YzFlMDcxY2Q0MGVmNDU2YzgwZGIxNGFiNjI3OTE5MTkwODgwNGU2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWMyNDEyNjBlMTg2NzNlNWE5MDdmYjExMGM4YWI3NTc4YmJlODJlNyBiL2Z1enplci9jb3JwdXMvOWMyNDEyNjBlMTg2NzNlNWE5MDdmYjExMGM4YWI3NTc4YmJlODJlNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWIwNjE0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85YzI0MTI2MGUxODY3M2U1YTkwN2ZiMTEwYzhhYjc1NzhiYmU4MmU3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWM0N2UwNTQ4ZTc5NWQ5OTMyZDEzOGJlY2ZlYWI3NzhjMDE4MGExZCBiL2Z1enplci9jb3JwdXMvOWM0N2UwNTQ4ZTc5NWQ5OTMyZDEzOGJlY2ZlYWI3NzhjMDE4MGExZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTExMjhkCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85YzQ3ZTA1NDhlNzk1ZDk5MzJkMTM4YmVjZmVhYjc3OGMwMTgwYTFkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWM2MGQ5NDY3M2E3OGU5N2I4NjhlYWJkYjNkMjBiZWFmYWQ4NmI3ZCBiL2Z1enplci9jb3JwdXMvOWM2MGQ5NDY3M2E3OGU5N2I4NjhlYWJkYjNkMjBiZWFmYWQ4NmI3ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDJhZjUyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85YzYwZDk0NjczYTc4ZTk3Yjg2OGVhYmRiM2QyMGJlYWZhZDg2YjdkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWM3OGI5MDc1ZmJhM2M1NWZlMzIyYmVjZDJjMTRkZTE1MzU3YWI1ZSBiL2Z1enplci9jb3JwdXMvOWM3OGI5MDc1ZmJhM2M1NWZlMzIyYmVjZDJjMTRkZTE1MzU3YWI1ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzMzZGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85Yzc4YjkwNzVmYmEzYzU1ZmUzMjJiZWNkMmMxNGRlMTUzNTdhYjVlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWNkNmRiZDA2YzRkMTY4ZjlmOTFmM2VhM2FhZGE2OGUzYmRjZDNlZSBiL2Z1enplci9jb3JwdXMvOWNkNmRiZDA2YzRkMTY4ZjlmOTFmM2VhM2FhZGE2OGUzYmRjZDNlZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTlhNjg2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85Y2Q2ZGJkMDZjNGQxNjhmOWY5MWYzZWEzYWFkYTY4ZTNiZGNkM2VlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWNlYzEzMGI0MTkwZTAwNjRjNjY1NGZkZmM3MmU0Yzg0NmYwNmFiMyBiL2Z1enplci9jb3JwdXMvOWNlYzEzMGI0MTkwZTAwNjRjNjY1NGZkZmM3MmU0Yzg0NmYwNmFiMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjc2NWUwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85Y2VjMTMwYjQxOTBlMDA2NGM2NjU0ZmRmYzcyZTRjODQ2ZjA2YWIzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWNmZTY1OTY2Mjg3ODhmNTQ0MmM3YjZkMzJkZGRkNDZiMmU5MzIyZiBiL2Z1enplci9jb3JwdXMvOWNmZTY1OTY2Mjg3ODhmNTQ0MmM3YjZkMzJkZGRkNDZiMmU5MzIyZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWRjOGMwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85Y2ZlNjU5NjYyODc4OGY1NDQyYzdiNmQzMmRkZGQ0NmIyZTkzMjJmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWQzZjhjNDM0MWRjNTI3NjVhZTU1Njg4MjE0MzlkNzliMmZmNDQ4NiBiL2Z1enplci9jb3JwdXMvOWQzZjhjNDM0MWRjNTI3NjVhZTU1Njg4MjE0MzlkNzliMmZmNDQ4NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzUxN2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ZDNmOGM0MzQxZGM1Mjc2NWFlNTU2ODgyMTQzOWQ3OWIyZmY0NDg2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWQ3YmFiNjZlNmE1YzAzMjI4OWI1YmY4ZjQxMzE4NDMyNjg5ZjY5MSBiL2Z1enplci9jb3JwdXMvOWQ3YmFiNjZlNmE1YzAzMjI4OWI1YmY4ZjQxMzE4NDMyNjg5ZjY5MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODNiNjZmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ZDdiYWI2NmU2YTVjMDMyMjg5YjViZjhmNDEzMTg0MzI2ODlmNjkxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWQ5NGQ1N2QyYTg3NmQzYzk3NDI4MGEwNTRmNmI4NjFlOGI4ZWU4ZiBiL2Z1enplci9jb3JwdXMvOWQ5NGQ1N2QyYTg3NmQzYzk3NDI4MGEwNTRmNmI4NjFlOGI4ZWU4ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDdjNTEzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ZDk0ZDU3ZDJhODc2ZDNjOTc0MjgwYTA1NGY2Yjg2MWU4YjhlZThmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWRhMDE2ZTE4MzZiZjU4ZDllMDFiZDc4YjQwNzIzNGU4YTYzZDViNiBiL2Z1enplci9jb3JwdXMvOWRhMDE2ZTE4MzZiZjU4ZDllMDFiZDc4YjQwNzIzNGU4YTYzZDViNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGFmNzUxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ZGEwMTZlMTgzNmJmNThkOWUwMWJkNzhiNDA3MjM0ZThhNjNkNWI2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWRlMjU2MzAyZGRlNTcxMjRkNmUxYTU4OTM4NGIyMmNiYjY3NDRkNCBiL2Z1enplci9jb3JwdXMvOWRlMjU2MzAyZGRlNTcxMjRkNmUxYTU4OTM4NGIyMmNiYjY3NDRkNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODI5N2U0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ZGUyNTYzMDJkZGU1NzEyNGQ2ZTFhNTg5Mzg0YjIyY2JiNjc0NGQ0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWRlZGMyZWIzNDFhMzk4MzIwY2ZjMDg1YTU5NDAzOGI5MDU5ZWEwNiBiL2Z1enplci9jb3JwdXMvOWRlZGMyZWIzNDFhMzk4MzIwY2ZjMDg1YTU5NDAzOGI5MDU5ZWEwNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yzk0ZTIxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ZGVkYzJlYjM0MWEzOTgzMjBjZmMwODVhNTk0MDM4YjkwNTllYTA2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWUyYWU3MDM4MGFjMTk3ODhmYzc4OTViMzQxYmRiYWIxNjNhODdlOCBiL2Z1enplci9jb3JwdXMvOWUyYWU3MDM4MGFjMTk3ODhmYzc4OTViMzQxYmRiYWIxNjNhODdlOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTY3NWRlCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ZTJhZTcwMzgwYWMxOTc4OGZjNzg5NWIzNDFiZGJhYjE2M2E4N2U4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWUzMDk3OWJiMjFkZGZkYWExN2JlZDI4ZjYwNmY0NzJkZmYwZjE5ZSBiL2Z1enplci9jb3JwdXMvOWUzMDk3OWJiMjFkZGZkYWExN2JlZDI4ZjYwNmY0NzJkZmYwZjE5ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTQ1ZDBkCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ZTMwOTc5YmIyMWRkZmRhYTE3YmVkMjhmNjA2ZjQ3MmRmZjBmMTllCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWUzY2EwNjBmMmY2NTAzOWRjZDllMTZkMWFkMzk4NWFiNDQzODJiMiBiL2Z1enplci9jb3JwdXMvOWUzY2EwNjBmMmY2NTAzOWRjZDllMTZkMWFkMzk4NWFiNDQzODJiMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGRjMmM3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ZTNjYTA2MGYyZjY1MDM5ZGNkOWUxNmQxYWQzOTg1YWI0NDM4MmIyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWU0NDliYWExMDQ4NzM4ZDgxMzgwZTFjODkxYzA3ZGQ0M2UxYTliMiBiL2Z1enplci9jb3JwdXMvOWU0NDliYWExMDQ4NzM4ZDgxMzgwZTFjODkxYzA3ZGQ0M2UxYTliMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2QzYTY1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ZTQ0OWJhYTEwNDg3MzhkODEzODBlMWM4OTFjMDdkZDQzZTFhOWIyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWU1YjhhYTRjNDVlMzYxOWQ4NWExNDczMjI5ZTFkNjZmNGFkNDhlNyBiL2Z1enplci9jb3JwdXMvOWU1YjhhYTRjNDVlMzYxOWQ4NWExNDczMjI5ZTFkNjZmNGFkNDhlNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWU0OTQxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ZTViOGFhNGM0NWUzNjE5ZDg1YTE0NzMyMjllMWQ2NmY0YWQ0OGU3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWU4MDNmNTdkZWZkOGU5MTJkYzc5N2I5ZGJmZDNhYWMyN2I5YWNlOSBiL2Z1enplci9jb3JwdXMvOWU4MDNmNTdkZWZkOGU5MTJkYzc5N2I5ZGJmZDNhYWMyN2I5YWNlOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTUyMmRlCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ZTgwM2Y1N2RlZmQ4ZTkxMmRjNzk3YjlkYmZkM2FhYzI3YjlhY2U5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWVjMmVkZTIzYjZjNzNkMDBjYjJmNjAxOGI2NGY0OTNkYmNkOGVmYSBiL2Z1enplci9jb3JwdXMvOWVjMmVkZTIzYjZjNzNkMDBjYjJmNjAxOGI2NGY0OTNkYmNkOGVmYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmUxMTZjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ZWMyZWRlMjNiNmM3M2QwMGNiMmY2MDE4YjY0ZjQ5M2RiY2Q4ZWZhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWVjZjY2YTNlYmQzYTY3ZmQ0MzY5OTNkNGJkYjNmODQ3ZGFhMzY5NyBiL2Z1enplci9jb3JwdXMvOWVjZjY2YTNlYmQzYTY3ZmQ0MzY5OTNkNGJkYjNmODQ3ZGFhMzY5NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTQyZmZjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ZWNmNjZhM2ViZDNhNjdmZDQzNjk5M2Q0YmRiM2Y4NDdkYWEzNjk3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWVlZTNkMDFiNmYxNWUxZGQ0ZjYzOTMxMDMxMDE5NDY4YjM1NTVhMCBiL2Z1enplci9jb3JwdXMvOWVlZTNkMDFiNmYxNWUxZGQ0ZjYzOTMxMDMxMDE5NDY4YjM1NTVhMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODljNGE3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ZWVlM2QwMWI2ZjE1ZTFkZDRmNjM5MzEwMzEwMTk0NjhiMzU1NWEwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWVmNDFlMDhkZWU4YTExOTlkMGExM2EwMzg2YzY3YjcxNjY3YWQ2YiBiL2Z1enplci9jb3JwdXMvOWVmNDFlMDhkZWU4YTExOTlkMGExM2EwMzg2YzY3YjcxNjY3YWQ2YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGE2ZjdjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ZWY0MWUwOGRlZThhMTE5OWQwYTEzYTAzODZjNjdiNzE2NjdhZDZiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWYzMzBkMWMwODYzMTM1ZmVlNzBiZDU2YzlmNzE2ZDNhOWJiZWZiYSBiL2Z1enplci9jb3JwdXMvOWYzMzBkMWMwODYzMTM1ZmVlNzBiZDU2YzlmNzE2ZDNhOWJiZWZiYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzU1NWM5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ZjMzMGQxYzA4NjMxMzVmZWU3MGJkNTZjOWY3MTZkM2E5YmJlZmJhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWY0ZjVjYzI1ZjdlOWY0YWU0YzU1YTUyYzFiMWYwMWM3MDM1MGQ5NCBiL2Z1enplci9jb3JwdXMvOWY0ZjVjYzI1ZjdlOWY0YWU0YzU1YTUyYzFiMWYwMWM3MDM1MGQ5NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2Y0Y2RjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ZjRmNWNjMjVmN2U5ZjRhZTRjNTVhNTJjMWIxZjAxYzcwMzUwZDk0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWY1MmYxMTNjZjZiMDdmOGZhNDM1ODJmN2E2NTFlM2IxYTI0MDgyZSBiL2Z1enplci9jb3JwdXMvOWY1MmYxMTNjZjZiMDdmOGZhNDM1ODJmN2E2NTFlM2IxYTI0MDgyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWY5ODU1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ZjUyZjExM2NmNmIwN2Y4ZmE0MzU4MmY3YTY1MWUzYjFhMjQwODJlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWY1OWFlMWE2NzlkMGRiN2I5ODI0NzUzM2JiZGJhYzUwMjVlYjI4YSBiL2Z1enplci9jb3JwdXMvOWY1OWFlMWE2NzlkMGRiN2I5ODI0NzUzM2JiZGJhYzUwMjVlYjI4YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWM0YjFiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ZjU5YWUxYTY3OWQwZGI3Yjk4MjQ3NTMzYmJkYmFjNTAyNWViMjhhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWY2ZWNlYThhYjA4MTAyMGVlMjliMGY2OTk3MGNmY2IxYjQ3MGIyMyBiL2Z1enplci9jb3JwdXMvOWY2ZWNlYThhYjA4MTAyMGVlMjliMGY2OTk3MGNmY2IxYjQ3MGIyMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2I5YzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ZjZlY2VhOGFiMDgxMDIwZWUyOWIwZjY5OTcwY2ZjYjFiNDcwYjIzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWY4NWJjYTkzODkwZDRhYjY1MmUwZjc4OTIxNTkwYjcxYWQzOTkyMiBiL2Z1enplci9jb3JwdXMvOWY4NWJjYTkzODkwZDRhYjY1MmUwZjc4OTIxNTkwYjcxYWQzOTkyMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzY4OGU5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85Zjg1YmNhOTM4OTBkNGFiNjUyZTBmNzg5MjE1OTBiNzFhZDM5OTIyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWZhOTE5OGQ3ZWMxYTBlMGYyOWJmOGUzODQzYjRlMzMxYjJiZThmOSBiL2Z1enplci9jb3JwdXMvOWZhOTE5OGQ3ZWMxYTBlMGYyOWJmOGUzODQzYjRlMzMxYjJiZThmOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWQzMDcxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ZmE5MTk4ZDdlYzFhMGUwZjI5YmY4ZTM4NDNiNGUzMzFiMmJlOGY5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvOWZiN2E2MDQ5YjYzMWI3YTliMDBkYzgxNTZiYTEwYzc2ZGMyMzRhMSBiL2Z1enplci9jb3JwdXMvOWZiN2E2MDQ5YjYzMWI3YTliMDBkYzgxNTZiYTEwYzc2ZGMyMzRhMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDVmOTEwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy85ZmI3YTYwNDliNjMxYjdhOWIwMGRjODE1NmJhMTBjNzZkYzIzNGExCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTAwY2U2NzIxZjRlM2I2YzhiYmRlMDM1N2FhOWI2ZWQzZGNkMjY1MyBiL2Z1enplci9jb3JwdXMvYTAwY2U2NzIxZjRlM2I2YzhiYmRlMDM1N2FhOWI2ZWQzZGNkMjY1MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmYyYzUxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMDBjZTY3MjFmNGUzYjZjOGJiZGUwMzU3YWE5YjZlZDNkY2QyNjUzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTA0MDJlN2E3Yjk2MDJkNDRlMWRhMjY3YTc4NWRlNWI1N2EwOTY2OCBiL2Z1enplci9jb3JwdXMvYTA0MDJlN2E3Yjk2MDJkNDRlMWRhMjY3YTc4NWRlNWI1N2EwOTY2OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzAwYzViCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMDQwMmU3YTdiOTYwMmQ0NGUxZGEyNjdhNzg1ZGU1YjU3YTA5NjY4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTA0ZWM5NjgyYTA0NjI0OGU0MDBhYzY2YTA5YzY5Yzk2OGRhODAwOSBiL2Z1enplci9jb3JwdXMvYTA0ZWM5NjgyYTA0NjI0OGU0MDBhYzY2YTA5YzY5Yzk2OGRhODAwOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDYxZTJhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMDRlYzk2ODJhMDQ2MjQ4ZTQwMGFjNjZhMDljNjljOTY4ZGE4MDA5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTA1ZjQ0YjdhZTNmZTI1MmFlNTZlNTMyNTk1ZmYwMzJmMmVjZTYyZSBiL2Z1enplci9jb3JwdXMvYTA1ZjQ0YjdhZTNmZTI1MmFlNTZlNTMyNTk1ZmYwMzJmMmVjZTYyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzhjMzliCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMDVmNDRiN2FlM2ZlMjUyYWU1NmU1MzI1OTVmZjAzMmYyZWNlNjJlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTA2ZTVkODdmMjNjNmRhYmJhMjYyYTZiMzAxYTQyNTYzNmI0MzRlZiBiL2Z1enplci9jb3JwdXMvYTA2ZTVkODdmMjNjNmRhYmJhMjYyYTZiMzAxYTQyNTYzNmI0MzRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDEyZTA3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMDZlNWQ4N2YyM2M2ZGFiYmEyNjJhNmIzMDFhNDI1NjM2YjQzNGVmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTA3MjRlZjlkMmE0NjdkNzQzZjk5NjkzN2JhM2VmNzIyMjU4NjBlMiBiL2Z1enplci9jb3JwdXMvYTA3MjRlZjlkMmE0NjdkNzQzZjk5NjkzN2JhM2VmNzIyMjU4NjBlMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGM3ZDVmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMDcyNGVmOWQyYTQ2N2Q3NDNmOTk2OTM3YmEzZWY3MjIyNTg2MGUyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTA3YmVjMDkxOTlmOTdmYmU2ODY3OWQ5ZWYxYjNmODE4MDA4NDMzNiBiL2Z1enplci9jb3JwdXMvYTA3YmVjMDkxOTlmOTdmYmU2ODY3OWQ5ZWYxYjNmODE4MDA4NDMzNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODU2ZjNmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMDdiZWMwOTE5OWY5N2ZiZTY4Njc5ZDllZjFiM2Y4MTgwMDg0MzM2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTA3ZGUzODUwMzhmMzcxOTM3YmJkYzA0MWQxNjk4YTNlZWViMGUzYSBiL2Z1enplci9jb3JwdXMvYTA3ZGUzODUwMzhmMzcxOTM3YmJkYzA0MWQxNjk4YTNlZWViMGUzYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWVlMTg4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMDdkZTM4NTAzOGYzNzE5MzdiYmRjMDQxZDE2OThhM2VlZWIwZTNhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTBhNWU2MGFkN2M1MGE4YWRjZTVkOWE3MDZkMTk5MDE5NDgxNjMyMiBiL2Z1enplci9jb3JwdXMvYTBhNWU2MGFkN2M1MGE4YWRjZTVkOWE3MDZkMTk5MDE5NDgxNjMyMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmUwZTM4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMGE1ZTYwYWQ3YzUwYThhZGNlNWQ5YTcwNmQxOTkwMTk0ODE2MzIyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTBiNzRmMTVjYzEzNjc3OWMzMDM2ODM2ZDc0YzdmODMzYWU5NjU1ZiBiL2Z1enplci9jb3JwdXMvYTBiNzRmMTVjYzEzNjc3OWMzMDM2ODM2ZDc0YzdmODMzYWU5NjU1ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGMwNzVjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMGI3NGYxNWNjMTM2Nzc5YzMwMzY4MzZkNzRjN2Y4MzNhZTk2NTVmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTEyNGE2YWVhNjYwMzc3NmIzYTcxY2Q4MTM5MDNkNDE5MWVjODJjMCBiL2Z1enplci9jb3JwdXMvYTEyNGE2YWVhNjYwMzc3NmIzYTcxY2Q4MTM5MDNkNDE5MWVjODJjMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDI1ODFkCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMTI0YTZhZWE2NjAzNzc2YjNhNzFjZDgxMzkwM2Q0MTkxZWM4MmMwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTEzMWFiOWQ0NDBhNjBkNmViM2Y3N2FjMzY2ZDkxYTQ1ODk3NDRiNiBiL2Z1enplci9jb3JwdXMvYTEzMWFiOWQ0NDBhNjBkNmViM2Y3N2FjMzY2ZDkxYTQ1ODk3NDRiNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDZkOWY3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMTMxYWI5ZDQ0MGE2MGQ2ZWIzZjc3YWMzNjZkOTFhNDU4OTc0NGI2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTE0MGYzYTg2MGI5NDk5NWMxMjRlM2ViZTI2MTU5OGEyMGIyYTM5MCBiL2Z1enplci9jb3JwdXMvYTE0MGYzYTg2MGI5NDk5NWMxMjRlM2ViZTI2MTU5OGEyMGIyYTM5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDJjNDFmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMTQwZjNhODYwYjk0OTk1YzEyNGUzZWJlMjYxNTk4YTIwYjJhMzkwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTE3YzUxYjJmYTlmMjNmZjIxMGQwZTg5OTE3YjI2ZmIxNGRhZjhhMSBiL2Z1enplci9jb3JwdXMvYTE3YzUxYjJmYTlmMjNmZjIxMGQwZTg5OTE3YjI2ZmIxNGRhZjhhMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmRiY2VjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMTdjNTFiMmZhOWYyM2ZmMjEwZDBlODk5MTdiMjZmYjE0ZGFmOGExCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTE5N2Q3MTRiOWI3OTcwMGE5NmRmNzAyOGFmMDkxMTZmMzYwYmE3MiBiL2Z1enplci9jb3JwdXMvYTE5N2Q3MTRiOWI3OTcwMGE5NmRmNzAyOGFmMDkxMTZmMzYwYmE3MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTU4YjExCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMTk3ZDcxNGI5Yjc5NzAwYTk2ZGY3MDI4YWYwOTExNmYzNjBiYTcyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTE5ZTA4NDhiNmFlMzdhODMzNGYxNzRlYjM1NzI1ZGYxODgyZGM2MiBiL2Z1enplci9jb3JwdXMvYTE5ZTA4NDhiNmFlMzdhODMzNGYxNzRlYjM1NzI1ZGYxODgyZGM2MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGM0ZmQzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMTllMDg0OGI2YWUzN2E4MzM0ZjE3NGViMzU3MjVkZjE4ODJkYzYyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTFjNmZmNTZmZjFmODgwZjc5MzUwZWNiYzc2MTJlN2Y2OTAyM2E2YyBiL2Z1enplci9jb3JwdXMvYTFjNmZmNTZmZjFmODgwZjc5MzUwZWNiYzc2MTJlN2Y2OTAyM2E2YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzYwZTdiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMWM2ZmY1NmZmMWY4ODBmNzkzNTBlY2JjNzYxMmU3ZjY5MDIzYTZjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTIzYjBmNGQyNTUzNDQwZTE1MWNlOWNmOGEyNGZmZmM2ZWZhZDljMCBiL2Z1enplci9jb3JwdXMvYTIzYjBmNGQyNTUzNDQwZTE1MWNlOWNmOGEyNGZmZmM2ZWZhZDljMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmUxYzcyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMjNiMGY0ZDI1NTM0NDBlMTUxY2U5Y2Y4YTI0ZmZmYzZlZmFkOWMwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTI1MmU3MDQ3NmMwNjM1Y2NhZmIyNzhmNGEzNWZiNDhlODgxOGMzMCBiL2Z1enplci9jb3JwdXMvYTI1MmU3MDQ3NmMwNjM1Y2NhZmIyNzhmNGEzNWZiNDhlODgxOGMzMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmE2MzM5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMjUyZTcwNDc2YzA2MzVjY2FmYjI3OGY0YTM1ZmI0OGU4ODE4YzMwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTI1ZTE5NzEwZmNkNDE5ZDE5ZjU0ZjBhNTcyNDQ5YTAwNTZmOWQyMCBiL2Z1enplci9jb3JwdXMvYTI1ZTE5NzEwZmNkNDE5ZDE5ZjU0ZjBhNTcyNDQ5YTAwNTZmOWQyMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDQzOWQzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMjVlMTk3MTBmY2Q0MTlkMTlmNTRmMGE1NzI0NDlhMDA1NmY5ZDIwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTI3Nzg0OTU0NTJmODllMjY1NjQ0ZTBmYzY2OTY0YWYwZjdkOWU2MCBiL2Z1enplci9jb3JwdXMvYTI3Nzg0OTU0NTJmODllMjY1NjQ0ZTBmYzY2OTY0YWYwZjdkOWU2MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzdkNzIzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMjc3ODQ5NTQ1MmY4OWUyNjU2NDRlMGZjNjY5NjRhZjBmN2Q5ZTYwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTJhNmI2Y2JjMTI1YzZiOTI4MTgyY2M1ZWE4YWFlN2EyMDQyNWUwZCBiL2Z1enplci9jb3JwdXMvYTJhNmI2Y2JjMTI1YzZiOTI4MTgyY2M1ZWE4YWFlN2EyMDQyNWUwZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2I3ZmJiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMmE2YjZjYmMxMjVjNmI5MjgxODJjYzVlYThhYWU3YTIwNDI1ZTBkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTJiZGJkZDcyOTc4Zjk5NmU5ZDA5YWZlMzI2OGM2OGI1M2I3ODc4MyBiL2Z1enplci9jb3JwdXMvYTJiZGJkZDcyOTc4Zjk5NmU5ZDA5YWZlMzI2OGM2OGI1M2I3ODc4MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDdlMzU1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMmJkYmRkNzI5NzhmOTk2ZTlkMDlhZmUzMjY4YzY4YjUzYjc4NzgzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTJlYzcyYzk3NTBmMDcwOWIxOTI0MDA3NDViZTA0NmQzZGE3NzY4NSBiL2Z1enplci9jb3JwdXMvYTJlYzcyYzk3NTBmMDcwOWIxOTI0MDA3NDViZTA0NmQzZGE3NzY4NQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTQ4NzExCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMmVjNzJjOTc1MGYwNzA5YjE5MjQwMDc0NWJlMDQ2ZDNkYTc3Njg1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTMwMDc1YzU5MTE5NmZmMGFjODYzNzZhZjI4YTdiZTc0ZGU3N2FkMSBiL2Z1enplci9jb3JwdXMvYTMwMDc1YzU5MTE5NmZmMGFjODYzNzZhZjI4YTdiZTc0ZGU3N2FkMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjJiNDM4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMzAwNzVjNTkxMTk2ZmYwYWM4NjM3NmFmMjhhN2JlNzRkZTc3YWQxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTMxZTU4OWU2ZGVhNjU2ZmQyMmQ3ZDAxZTQ2ZDk4ZTVlZjhiMjhkOCBiL2Z1enplci9jb3JwdXMvYTMxZTU4OWU2ZGVhNjU2ZmQyMmQ3ZDAxZTQ2ZDk4ZTVlZjhiMjhkOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzFjMTEwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMzFlNTg5ZTZkZWE2NTZmZDIyZDdkMDFlNDZkOThlNWVmOGIyOGQ4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTM0ZTI4YjE1ZTUxZWUwZmJjNDBmMDM4NjM5NWQ5OGZhMmFkMzM5YyBiL2Z1enplci9jb3JwdXMvYTM0ZTI4YjE1ZTUxZWUwZmJjNDBmMDM4NjM5NWQ5OGZhMmFkMzM5YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDJjNTNjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMzRlMjhiMTVlNTFlZTBmYmM0MGYwMzg2Mzk1ZDk4ZmEyYWQzMzljCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTM5MzZmYmYyYTAwY2E4NDc3ZTgzZDJhMGNiYjZjNGUxNjJmNjI5ZSBiL2Z1enplci9jb3JwdXMvYTM5MzZmYmYyYTAwY2E4NDc3ZTgzZDJhMGNiYjZjNGUxNjJmNjI5ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODZkYmMxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMzkzNmZiZjJhMDBjYTg0NzdlODNkMmEwY2JiNmM0ZTE2MmY2MjllCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTM5ODI4NzQ5Nzc1YjI2NDUzYTJkNThjNWE3ODY5MjI0MDNkYWZjNCBiL2Z1enplci9jb3JwdXMvYTM5ODI4NzQ5Nzc1YjI2NDUzYTJkNThjNWE3ODY5MjI0MDNkYWZjNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWU0M2ViCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hMzk4Mjg3NDk3NzViMjY0NTNhMmQ1OGM1YTc4NjkyMjQwM2RhZmM0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTNjYTZmODJkMjQ5YzBhYjhmNzlhYjRiNThlZGMwYjlkMDU1ZDE0MiBiL2Z1enplci9jb3JwdXMvYTNjYTZmODJkMjQ5YzBhYjhmNzlhYjRiNThlZGMwYjlkMDU1ZDE0MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjNmYzFkCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hM2NhNmY4MmQyNDljMGFiOGY3OWFiNGI1OGVkYzBiOWQwNTVkMTQyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTQwZGI0M2E2MTk1Y2NlNmRmNWZmMDA3N2M3ZmNhMWZiZTAxNmZiMyBiL2Z1enplci9jb3JwdXMvYTQwZGI0M2E2MTk1Y2NlNmRmNWZmMDA3N2M3ZmNhMWZiZTAxNmZiMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGNlYWE2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNDBkYjQzYTYxOTVjY2U2ZGY1ZmYwMDc3YzdmY2ExZmJlMDE2ZmIzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTQxYzI5YjM0NGY3YTMyMjAzZjRjNmZiYjMzNDFkNjZhNzZlMGY4ZCBiL2Z1enplci9jb3JwdXMvYTQxYzI5YjM0NGY3YTMyMjAzZjRjNmZiYjMzNDFkNjZhNzZlMGY4ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmUyYTczCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNDFjMjliMzQ0ZjdhMzIyMDNmNGM2ZmJiMzM0MWQ2NmE3NmUwZjhkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTQ0MzFjNjJmYjhlZjA2NjU2ODZhNzhjZDgxODI4Mjk0NmJhOWFhYSBiL2Z1enplci9jb3JwdXMvYTQ0MzFjNjJmYjhlZjA2NjU2ODZhNzhjZDgxODI4Mjk0NmJhOWFhYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODVjZjU2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNDQzMWM2MmZiOGVmMDY2NTY4NmE3OGNkODE4MjgyOTQ2YmE5YWFhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTQ0OGE5ZDdlNjc2NWFmZDZkMTAyOGRlYzNjZmNhNThlMTdiNTgxYiBiL2Z1enplci9jb3JwdXMvYTQ0OGE5ZDdlNjc2NWFmZDZkMTAyOGRlYzNjZmNhNThlMTdiNTgxYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGY3NTVmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNDQ4YTlkN2U2NzY1YWZkNmQxMDI4ZGVjM2NmY2E1OGUxN2I1ODFiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTQ2ZmZlMGUxOTQyOTQxN2FiMDcwZjJjM2NlMzRhNmZhYzJjNTgyYyBiL2Z1enplci9jb3JwdXMvYTQ2ZmZlMGUxOTQyOTQxN2FiMDcwZjJjM2NlMzRhNmZhYzJjNTgyYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWZlN2QyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNDZmZmUwZTE5NDI5NDE3YWIwNzBmMmMzY2UzNGE2ZmFjMmM1ODJjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTQ3MmU3YzM0ZjY1MGJmYTliNjY0MmMxNGQ0OTNhMzJjMTBkNTQ5MiBiL2Z1enplci9jb3JwdXMvYTQ3MmU3YzM0ZjY1MGJmYTliNjY0MmMxNGQ0OTNhMzJjMTBkNTQ5MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDA0ZjUxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNDcyZTdjMzRmNjUwYmZhOWI2NjQyYzE0ZDQ5M2EzMmMxMGQ1NDkyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTRiNzhhYzZiMmQ5Y2JiNGFhYzVkYjE1YTgwODIzNmM0N2M4MTY0OCBiL2Z1enplci9jb3JwdXMvYTRiNzhhYzZiMmQ5Y2JiNGFhYzVkYjE1YTgwODIzNmM0N2M4MTY0OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDQ2MDJjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNGI3OGFjNmIyZDljYmI0YWFjNWRiMTVhODA4MjM2YzQ3YzgxNjQ4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTRkZTdjYmMzZDM4ZDA4YmExNDVhMWVhN2NhYjY3MmE1ZTc4MzljMCBiL2Z1enplci9jb3JwdXMvYTRkZTdjYmMzZDM4ZDA4YmExNDVhMWVhN2NhYjY3MmE1ZTc4MzljMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGVlYWYyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNGRlN2NiYzNkMzhkMDhiYTE0NWExZWE3Y2FiNjcyYTVlNzgzOWMwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTRlYjk5MDQ1YjQzMzY1YzBjMDdkMDg1NzNjZTgwMjkzZTY2MmY1YiBiL2Z1enplci9jb3JwdXMvYTRlYjk5MDQ1YjQzMzY1YzBjMDdkMDg1NzNjZTgwMjkzZTY2MmY1YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGQ2ZmY3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNGViOTkwNDViNDMzNjVjMGMwN2QwODU3M2NlODAyOTNlNjYyZjViCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTRmNjRiYzEwYzBkMDhmM2JlMDIyYWFiYWQxNDFhNjg0MTRmZjVlMyBiL2Z1enplci9jb3JwdXMvYTRmNjRiYzEwYzBkMDhmM2JlMDIyYWFiYWQxNDFhNjg0MTRmZjVlMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTM1NDY5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNGY2NGJjMTBjMGQwOGYzYmUwMjJhYWJhZDE0MWE2ODQxNGZmNWUzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTU1NTIzNGY1ZGEzYWRkZGNlMjEzNzE5MDcxODQ1MGRiYTM3N2U1NiBiL2Z1enplci9jb3JwdXMvYTU1NTIzNGY1ZGEzYWRkZGNlMjEzNzE5MDcxODQ1MGRiYTM3N2U1NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjkxMTNlCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNTU1MjM0ZjVkYTNhZGRkY2UyMTM3MTkwNzE4NDUwZGJhMzc3ZTU2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTU2OGFlODQ5ZGI5YmEzYzMxNmM3YzNkZGI0OGM1Zjg4YjZiMWMyNSBiL2Z1enplci9jb3JwdXMvYTU2OGFlODQ5ZGI5YmEzYzMxNmM3YzNkZGI0OGM1Zjg4YjZiMWMyNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2JiZTMzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNTY4YWU4NDlkYjliYTNjMzE2YzdjM2RkYjQ4YzVmODhiNmIxYzI1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTU3YmRiYzZlYTQ2NjlhMTc3MDRjYTVkZTcwYWEyYjFkMWIwOWJkNCBiL2Z1enplci9jb3JwdXMvYTU3YmRiYzZlYTQ2NjlhMTc3MDRjYTVkZTcwYWEyYjFkMWIwOWJkNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWFkZWU4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNTdiZGJjNmVhNDY2OWExNzcwNGNhNWRlNzBhYTJiMWQxYjA5YmQ0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTU4MTY0MzI4YTlkYjAzMGYzNmE4ZmM3ZjExZGNjZGRmYTFjYTA1MCBiL2Z1enplci9jb3JwdXMvYTU4MTY0MzI4YTlkYjAzMGYzNmE4ZmM3ZjExZGNjZGRmYTFjYTA1MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzU4NzY4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNTgxNjQzMjhhOWRiMDMwZjM2YThmYzdmMTFkY2NkZGZhMWNhMDUwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTVhMWE5ZWM5ZGI4NTEwMzc0YjdkNjI4ODMxNTRjOTVlMTNhZmRjMSBiL2Z1enplci9jb3JwdXMvYTVhMWE5ZWM5ZGI4NTEwMzc0YjdkNjI4ODMxNTRjOTVlMTNhZmRjMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDM3ZTA2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNWExYTllYzlkYjg1MTAzNzRiN2Q2Mjg4MzE1NGM5NWUxM2FmZGMxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTViNzE1ODgxYjdlNDEyNDZiYjM0MjA1YWNmOGE5OWNmNmFkNWIxNSBiL2Z1enplci9jb3JwdXMvYTViNzE1ODgxYjdlNDEyNDZiYjM0MjA1YWNmOGE5OWNmNmFkNWIxNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWU4NTU0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNWI3MTU4ODFiN2U0MTI0NmJiMzQyMDVhY2Y4YTk5Y2Y2YWQ1YjE1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTVkYjQ5ZWVlYTBlZGI3NTdiMDhlMzc4ZGVkNTYzMDA0ZDMzZmI3MSBiL2Z1enplci9jb3JwdXMvYTVkYjQ5ZWVlYTBlZGI3NTdiMDhlMzc4ZGVkNTYzMDA0ZDMzZmI3MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2M0ZGI1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNWRiNDllZWVhMGVkYjc1N2IwOGUzNzhkZWQ1NjMwMDRkMzNmYjcxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTVlNzJiM2IwNzhkMWQ4ZjliMTIwMDdhYWFlYjU3YmZmY2ZmMjY4NCBiL2Z1enplci9jb3JwdXMvYTVlNzJiM2IwNzhkMWQ4ZjliMTIwMDdhYWFlYjU3YmZmY2ZmMjY4NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODI0ZjQzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNWU3MmIzYjA3OGQxZDhmOWIxMjAwN2FhYWViNTdiZmZjZmYyNjg0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTYwYjJjODUzYTllM2IzYmU5ZjMxYTNiMTlkOTRlNmRjYjk1N2U4MyBiL2Z1enplci9jb3JwdXMvYTYwYjJjODUzYTllM2IzYmU5ZjMxYTNiMTlkOTRlNmRjYjk1N2U4MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDZlYTMyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNjBiMmM4NTNhOWUzYjNiZTlmMzFhM2IxOWQ5NGU2ZGNiOTU3ZTgzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTYyMDg1ZTE0MjBmNmJjODU4N2ZhMTUwMTQ3ZDg5MjU2ODkzMGFlYiBiL2Z1enplci9jb3JwdXMvYTYyMDg1ZTE0MjBmNmJjODU4N2ZhMTUwMTQ3ZDg5MjU2ODkzMGFlYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2Y5OGZiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNjIwODVlMTQyMGY2YmM4NTg3ZmExNTAxNDdkODkyNTY4OTMwYWViCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTYzYjEzNGQ2OGZjZDQxMmE4MzdkN2E2ODRkYTFkYTI0ZDNmYWViZSBiL2Z1enplci9jb3JwdXMvYTYzYjEzNGQ2OGZjZDQxMmE4MzdkN2E2ODRkYTFkYTI0ZDNmYWViZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGMzYjUyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNjNiMTM0ZDY4ZmNkNDEyYTgzN2Q3YTY4NGRhMWRhMjRkM2ZhZWJlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTY0OGZmZDA4OTAwNmM3Njc1NTIwMjE2MjM0MTk3NGRmYTA4NWYwYiBiL2Z1enplci9jb3JwdXMvYTY0OGZmZDA4OTAwNmM3Njc1NTIwMjE2MjM0MTk3NGRmYTA4NWYwYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjMxMTUxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNjQ4ZmZkMDg5MDA2Yzc2NzU1MjAyMTYyMzQxOTc0ZGZhMDg1ZjBiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTY0ZjJiZWZlYTIxYWZmYzcyMTViNzcxMGM4ZjY5OGVmZjQ2ZjZmMSBiL2Z1enplci9jb3JwdXMvYTY0ZjJiZWZlYTIxYWZmYzcyMTViNzcxMGM4ZjY5OGVmZjQ2ZjZmMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzhkYjIyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNjRmMmJlZmVhMjFhZmZjNzIxNWI3NzEwYzhmNjk4ZWZmNDZmNmYxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTY2ZTY4NDNmYTk4Y2ZmZGMxYTYxZDM4MjdiMGE1ZTdkNDY3ZTM5OSBiL2Z1enplci9jb3JwdXMvYTY2ZTY4NDNmYTk4Y2ZmZGMxYTYxZDM4MjdiMGE1ZTdkNDY3ZTM5OQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWVmZWIzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNjZlNjg0M2ZhOThjZmZkYzFhNjFkMzgyN2IwYTVlN2Q0NjdlMzk5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTY3MWE4YmNlMGQxOWRhMjdhNDc5ZjYzZDY2MmQxMDkzMjFkN2MxYyBiL2Z1enplci9jb3JwdXMvYTY3MWE4YmNlMGQxOWRhMjdhNDc5ZjYzZDY2MmQxMDkzMjFkN2MxYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2EzYzVhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNjcxYThiY2UwZDE5ZGEyN2E0NzlmNjNkNjYyZDEwOTMyMWQ3YzFjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTY4Y2ZhOWI0OTk0MTE4MWQwNTM2Y2JlNTdjMGZmODc1NjgyYmU1ZiBiL2Z1enplci9jb3JwdXMvYTY4Y2ZhOWI0OTk0MTE4MWQwNTM2Y2JlNTdjMGZmODc1NjgyYmU1ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzdiZjEwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNjhjZmE5YjQ5OTQxMTgxZDA1MzZjYmU1N2MwZmY4NzU2ODJiZTVmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTY4ZjkzOWU3NWYzMTA3NTQ1ZjQzNDE0MmJlYTNmNzdkZTVhZjJhYSBiL2Z1enplci9jb3JwdXMvYTY4ZjkzOWU3NWYzMTA3NTQ1ZjQzNDE0MmJlYTNmNzdkZTVhZjJhYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjliMjBjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNjhmOTM5ZTc1ZjMxMDc1NDVmNDM0MTQyYmVhM2Y3N2RlNWFmMmFhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTZhZjQ3YzlkMWFhOTYxMjhmYWY5MDk3NTQ3Njk4MTJhOTJlYTJjZCBiL2Z1enplci9jb3JwdXMvYTZhZjQ3YzlkMWFhOTYxMjhmYWY5MDk3NTQ3Njk4MTJhOTJlYTJjZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmVlNWFmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNmFmNDdjOWQxYWE5NjEyOGZhZjkwOTc1NDc2OTgxMmE5MmVhMmNkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTZiM2U2NjgwNjU0ZmRiYzdmOGFhNTBkYzFlMjAwYmJkYWNkMWI4NiBiL2Z1enplci9jb3JwdXMvYTZiM2U2NjgwNjU0ZmRiYzdmOGFhNTBkYzFlMjAwYmJkYWNkMWI4NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjljZDdhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNmIzZTY2ODA2NTRmZGJjN2Y4YWE1MGRjMWUyMDBiYmRhY2QxYjg2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTZiN2RjZmU5M2RlNDhhYTUwYWI2OTJmOWRkZTQ4NjU5Y2Y4YmI1MSBiL2Z1enplci9jb3JwdXMvYTZiN2RjZmU5M2RlNDhhYTUwYWI2OTJmOWRkZTQ4NjU5Y2Y4YmI1MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTczMDIxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNmI3ZGNmZTkzZGU0OGFhNTBhYjY5MmY5ZGRlNDg2NTljZjhiYjUxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTZiYjFhOWIxMDk1OWZlNTM5MzZhMWZhYzdlYjBiZGU0YmU0NDRhYSBiL2Z1enplci9jb3JwdXMvYTZiYjFhOWIxMDk1OWZlNTM5MzZhMWZhYzdlYjBiZGU0YmU0NDRhYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjBhNmRiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNmJiMWE5YjEwOTU5ZmU1MzkzNmExZmFjN2ViMGJkZTRiZTQ0NGFhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTZlMWNlN2NjODU3ZDc0NGZkNDdhMDhiOGE2NTlhMGFjMGE0ZDQ2NiBiL2Z1enplci9jb3JwdXMvYTZlMWNlN2NjODU3ZDc0NGZkNDdhMDhiOGE2NTlhMGFjMGE0ZDQ2NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjM0NmM3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNmUxY2U3Y2M4NTdkNzQ0ZmQ0N2EwOGI4YTY1OWEwYWMwYTRkNDY2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTZlMzNmM2RiNTJiNzE1NjZjNTBmNmVhZTljY2FiZWExMzA3MWIwNSBiL2Z1enplci9jb3JwdXMvYTZlMzNmM2RiNTJiNzE1NjZjNTBmNmVhZTljY2FiZWExMzA3MWIwNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWQ5ZGU3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNmUzM2YzZGI1MmI3MTU2NmM1MGY2ZWFlOWNjYWJlYTEzMDcxYjA1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTZmY2EwY2M1OWRkYjRlNjdkZTlhNjAzMzhjM2MwNDVmMWJmYWFmZSBiL2Z1enplci9jb3JwdXMvYTZmY2EwY2M1OWRkYjRlNjdkZTlhNjAzMzhjM2MwNDVmMWJmYWFmZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDk5YmMwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNmZjYTBjYzU5ZGRiNGU2N2RlOWE2MDMzOGMzYzA0NWYxYmZhYWZlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTcyY2E5Y2I0MGIyOWMxMjY0ZGY5MmFlYWU0MThlMzE3MjA0MjAxOCBiL2Z1enplci9jb3JwdXMvYTcyY2E5Y2I0MGIyOWMxMjY0ZGY5MmFlYWU0MThlMzE3MjA0MjAxOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTNjOWViCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNzJjYTljYjQwYjI5YzEyNjRkZjkyYWVhZTQxOGUzMTcyMDQyMDE4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTc1NTQ3MmE3MWVhMjJkNGY5ZjNiMDY0NWM0ZGEzMjI4MzgzODAwOCBiL2Z1enplci9jb3JwdXMvYTc1NTQ3MmE3MWVhMjJkNGY5ZjNiMDY0NWM0ZGEzMjI4MzgzODAwOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2QwYTY2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNzU1NDcyYTcxZWEyMmQ0ZjlmM2IwNjQ1YzRkYTMyMjgzODM4MDA4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTc3NTdjZDg3NzU5Njg5YmQ5MTlhNWRhNWNiYWZjNmQ3YWU1NTc1MyBiL2Z1enplci9jb3JwdXMvYTc3NTdjZDg3NzU5Njg5YmQ5MTlhNWRhNWNiYWZjNmQ3YWU1NTc1MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjg2MThkCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hNzc1N2NkODc3NTk2ODliZDkxOWE1ZGE1Y2JhZmM2ZDdhZTU1NzUzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTdiOGI1M2QxYjA0ZGRkOWMwNTdhY2E1MjA3NjI2ZGVmMDRmMjBmMyBiL2Z1enplci9jb3JwdXMvYTdiOGI1M2QxYjA0ZGRkOWMwNTdhY2E1MjA3NjI2ZGVmMDRmMjBmMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2YyMDBhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hN2I4YjUzZDFiMDRkZGQ5YzA1N2FjYTUyMDc2MjZkZWYwNGYyMGYzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTdiZmQ0OWJkZWYyZDQ4MWFiZTBiNjcyOTk0ZGJmYjUwOTFlNTA0MyBiL2Z1enplci9jb3JwdXMvYTdiZmQ0OWJkZWYyZDQ4MWFiZTBiNjcyOTk0ZGJmYjUwOTFlNTA0MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmY2MWJkCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hN2JmZDQ5YmRlZjJkNDgxYWJlMGI2NzI5OTRkYmZiNTA5MWU1MDQzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTdjMThhNmJmYzViMWQ2ZDVjMjkxMmUwOTI1ZjJhNjA0MzM1ZDU1OCBiL2Z1enplci9jb3JwdXMvYTdjMThhNmJmYzViMWQ2ZDVjMjkxMmUwOTI1ZjJhNjA0MzM1ZDU1OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjRjYTdmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hN2MxOGE2YmZjNWIxZDZkNWMyOTEyZTA5MjVmMmE2MDQzMzVkNTU4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTdjZjRlMTQ4MWJiYzI1ZDY5Y2RlMTIyM2QwY2ExZjU2NGY4MDRhMSBiL2Z1enplci9jb3JwdXMvYTdjZjRlMTQ4MWJiYzI1ZDY5Y2RlMTIyM2QwY2ExZjU2NGY4MDRhMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTVhNTI5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hN2NmNGUxNDgxYmJjMjVkNjljZGUxMjIzZDBjYTFmNTY0ZjgwNGExCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTdlNTgzZmZmNTgwMDcwNDQ0NjMyN2FmYTM4YmQ3NDY2ODliZmJlOSBiL2Z1enplci9jb3JwdXMvYTdlNTgzZmZmNTgwMDcwNDQ0NjMyN2FmYTM4YmQ3NDY2ODliZmJlOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzVmOTcxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hN2U1ODNmZmY1ODAwNzA0NDQ2MzI3YWZhMzhiZDc0NjY4OWJmYmU5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTgwNDY2YTJiMTkxYWZjYTJkOGE2MGRjYmI2MWZkN2I4YjM5MGIzNyBiL2Z1enplci9jb3JwdXMvYTgwNDY2YTJiMTkxYWZjYTJkOGE2MGRjYmI2MWZkN2I4YjM5MGIzNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmEwMmIxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hODA0NjZhMmIxOTFhZmNhMmQ4YTYwZGNiYjYxZmQ3YjhiMzkwYjM3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTgwN2JmNTA1NzdlOGM1MDgzZGVkOGU1YzRkMjI1ZGMwNWY0N2Y2YiBiL2Z1enplci9jb3JwdXMvYTgwN2JmNTA1NzdlOGM1MDgzZGVkOGU1YzRkMjI1ZGMwNWY0N2Y2YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGQ5MzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hODA3YmY1MDU3N2U4YzUwODNkZWQ4ZTVjNGQyMjVkYzA1ZjQ3ZjZiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTgwYjkxMWYxNTQyZDA5NTczMzA3ZTljODU3Nzg2MGZhOTgxNjI4NSBiL2Z1enplci9jb3JwdXMvYTgwYjkxMWYxNTQyZDA5NTczMzA3ZTljODU3Nzg2MGZhOTgxNjI4NQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDE4NDU1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hODBiOTExZjE1NDJkMDk1NzMzMDdlOWM4NTc3ODYwZmE5ODE2Mjg1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTgyZTI5M2VhNTJjZjhmYzU0ODQyN2ZhMjRkZDdhNTVjODFhZWQwYyBiL2Z1enplci9jb3JwdXMvYTgyZTI5M2VhNTJjZjhmYzU0ODQyN2ZhMjRkZDdhNTVjODFhZWQwYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzQ1NmJlCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hODJlMjkzZWE1MmNmOGZjNTQ4NDI3ZmEyNGRkN2E1NWM4MWFlZDBjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTg2MTBmN2M1MGU3NWJmYzFjYTM3YjU2ZGIzOWMzYjJmOTAyNTAwNCBiL2Z1enplci9jb3JwdXMvYTg2MTBmN2M1MGU3NWJmYzFjYTM3YjU2ZGIzOWMzYjJmOTAyNTAwNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmMwYzk4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hODYxMGY3YzUwZTc1YmZjMWNhMzdiNTZkYjM5YzNiMmY5MDI1MDA0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTg2MjFlMjcyYWU0MGMxMjFlN2ZhNjk1ZWQ2NjY4ZjIzN2NkNzg5MiBiL2Z1enplci9jb3JwdXMvYTg2MjFlMjcyYWU0MGMxMjFlN2ZhNjk1ZWQ2NjY4ZjIzN2NkNzg5MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDIxOGVjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hODYyMWUyNzJhZTQwYzEyMWU3ZmE2OTVlZDY2NjhmMjM3Y2Q3ODkyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTg3NjJhYWQzNWM1YjQ1YmUxMTEzMDllNzE5MTY1ZmY0ODc3M2EyYSBiL2Z1enplci9jb3JwdXMvYTg3NjJhYWQzNWM1YjQ1YmUxMTEzMDllNzE5MTY1ZmY0ODc3M2EyYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTZjOTM5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hODc2MmFhZDM1YzViNDViZTExMTMwOWU3MTkxNjVmZjQ4NzczYTJhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTg3OTBkOThkOGExMDdkNTkyZWViYjVmOTlkZWU3YjAxN2ZkZmYzYiBiL2Z1enplci9jb3JwdXMvYTg3OTBkOThkOGExMDdkNTkyZWViYjVmOTlkZWU3YjAxN2ZkZmYzYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDZjNWI5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hODc5MGQ5OGQ4YTEwN2Q1OTJlZWJiNWY5OWRlZTdiMDE3ZmRmZjNiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYThhZWQ1ZmFmYWVmOThhNmI5OTc0NzhiN2VkNjhiYmJmNjY2ZmJhNCBiL2Z1enplci9jb3JwdXMvYThhZWQ1ZmFmYWVmOThhNmI5OTc0NzhiN2VkNjhiYmJmNjY2ZmJhNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzhjNjY3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hOGFlZDVmYWZhZWY5OGE2Yjk5NzQ3OGI3ZWQ2OGJiYmY2NjZmYmE0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYThjMWMxOTNlN2VmZDgwMWY5ZTBhMWQ5MTBkYTcwZWU5ZDU4NDQzNyBiL2Z1enplci9jb3JwdXMvYThjMWMxOTNlN2VmZDgwMWY5ZTBhMWQ5MTBkYTcwZWU5ZDU4NDQzNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTZhYmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hOGMxYzE5M2U3ZWZkODAxZjllMGExZDkxMGRhNzBlZTlkNTg0NDM3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYThmNmJmYzNmMTgyYWEyMDBiYzUzOTA5YjllNDc2NGVmYWQxNjgwMiBiL2Z1enplci9jb3JwdXMvYThmNmJmYzNmMTgyYWEyMDBiYzUzOTA5YjllNDc2NGVmYWQxNjgwMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTY5YTIwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hOGY2YmZjM2YxODJhYTIwMGJjNTM5MDliOWU0NzY0ZWZhZDE2ODAyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTkwODVhMjRmYjFkNzMwMGRhMzBhNTMwMGY5NTRlMzY3MWE1MmQwMSBiL2Z1enplci9jb3JwdXMvYTkwODVhMjRmYjFkNzMwMGRhMzBhNTMwMGY5NTRlMzY3MWE1MmQwMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjJmYzE1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hOTA4NWEyNGZiMWQ3MzAwZGEzMGE1MzAwZjk1NGUzNjcxYTUyZDAxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTkyNmRlOWRkYjA0Y2RmYjMzZmYxNjgzYjg4ZjYyM2VjNjdiNTg0ZCBiL2Z1enplci9jb3JwdXMvYTkyNmRlOWRkYjA0Y2RmYjMzZmYxNjgzYjg4ZjYyM2VjNjdiNTg0ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmNiNTNiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hOTI2ZGU5ZGRiMDRjZGZiMzNmZjE2ODNiODhmNjIzZWM2N2I1ODRkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTkyNzNlYTU0MzUzN2RlYWY4ZGZkMjRmNmI2ZjYyMDEyMDZiOWFiZCBiL2Z1enplci9jb3JwdXMvYTkyNzNlYTU0MzUzN2RlYWY4ZGZkMjRmNmI2ZjYyMDEyMDZiOWFiZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2U0ZGRiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hOTI3M2VhNTQzNTM3ZGVhZjhkZmQyNGY2YjZmNjIwMTIwNmI5YWJkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTk2NGRkNjBhY2EzMDQ1ZDM5ZGJkYzBjOThhMDM3NTkzYzY3ZDhjMSBiL2Z1enplci9jb3JwdXMvYTk2NGRkNjBhY2EzMDQ1ZDM5ZGJkYzBjOThhMDM3NTkzYzY3ZDhjMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWQzNzUyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hOTY0ZGQ2MGFjYTMwNDVkMzlkYmRjMGM5OGEwMzc1OTNjNjdkOGMxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTk5ODA5OTk5Mzk4MDJkNDkyNjgxMzZkM2YwYTY2Mjk2ODZiNzIzYSBiL2Z1enplci9jb3JwdXMvYTk5ODA5OTk5Mzk4MDJkNDkyNjgxMzZkM2YwYTY2Mjk2ODZiNzIzYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGRkOTdmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hOTk4MDk5OTkzOTgwMmQ0OTI2ODEzNmQzZjBhNjYyOTY4NmI3MjNhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTk5ZDIyYjM5ZDRjOGQzNDFmM2VkM2RkY2I2Y2ZhNmQ4MmZmNmU4YyBiL2Z1enplci9jb3JwdXMvYTk5ZDIyYjM5ZDRjOGQzNDFmM2VkM2RkY2I2Y2ZhNmQ4MmZmNmU4YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTVjMTEzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hOTlkMjJiMzlkNGM4ZDM0MWYzZWQzZGRjYjZjZmE2ZDgyZmY2ZThjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTk5ZTVjYzBhYjMzZTQ0ZWFlYWIwNGJmNWRlNWJmYjUzM2E0ZTIzYiBiL2Z1enplci9jb3JwdXMvYTk5ZTVjYzBhYjMzZTQ0ZWFlYWIwNGJmNWRlNWJmYjUzM2E0ZTIzYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDg0NWJkCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hOTllNWNjMGFiMzNlNDRlYWVhYjA0YmY1ZGU1YmZiNTMzYTRlMjNiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTlkNzA0Y2Y5MGY4YTdjYTY0MmRlYjlkNmE0MzMzNDFlMGNhODhjZiBiL2Z1enplci9jb3JwdXMvYTlkNzA0Y2Y5MGY4YTdjYTY0MmRlYjlkNmE0MzMzNDFlMGNhODhjZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTY3ZjU5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hOWQ3MDRjZjkwZjhhN2NhNjQyZGViOWQ2YTQzMzM0MWUwY2E4OGNmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTlkYTMzYjQwYjJmYTY2NzBiYTBlNGRmZjk0MTg0NmVhZjM2NjNjMCBiL2Z1enplci9jb3JwdXMvYTlkYTMzYjQwYjJmYTY2NzBiYTBlNGRmZjk0MTg0NmVhZjM2NjNjMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Njc1ZjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hOWRhMzNiNDBiMmZhNjY3MGJhMGU0ZGZmOTQxODQ2ZWFmMzY2M2MwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTllMzdlYzNiOTU2NTUzM2ZjZjAxN2Y4YjE2NzM2ZmQ1OWI2MWQ5OSBiL2Z1enplci9jb3JwdXMvYTllMzdlYzNiOTU2NTUzM2ZjZjAxN2Y4YjE2NzM2ZmQ1OWI2MWQ5OQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODVmYzFjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hOWUzN2VjM2I5NTY1NTMzZmNmMDE3ZjhiMTY3MzZmZDU5YjYxZDk5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYTlmODQ0NzYwM2JmYzEyNDExOWU5Y2RlYTJkOGM4NzkxMTRlMjE3MSBiL2Z1enplci9jb3JwdXMvYTlmODQ0NzYwM2JmYzEyNDExOWU5Y2RlYTJkOGM4NzkxMTRlMjE3MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzRkMTBlCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hOWY4NDQ3NjAzYmZjMTI0MTE5ZTljZGVhMmQ4Yzg3OTExNGUyMTcxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWEyNjY4NWU4OTcwOGU4OTNmZWIzMTFmNTY2ZDRiNDBkMThkYWQ2NCBiL2Z1enplci9jb3JwdXMvYWEyNjY4NWU4OTcwOGU4OTNmZWIzMTFmNTY2ZDRiNDBkMThkYWQ2NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWIxYWVjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hYTI2Njg1ZTg5NzA4ZTg5M2ZlYjMxMWY1NjZkNGI0MGQxOGRhZDY0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWEzYjk1YWFjM2M3ZDFlZDg1MzBjNjY4MzI3OWIxODMxYWU4YTE0NiBiL2Z1enplci9jb3JwdXMvYWEzYjk1YWFjM2M3ZDFlZDg1MzBjNjY4MzI3OWIxODMxYWU4YTE0NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTgxZTJkCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hYTNiOTVhYWMzYzdkMWVkODUzMGM2NjgzMjc5YjE4MzFhZThhMTQ2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWEzZTQ4MGZlYTliYWM4M2I3YTYzNGJiZjcyNDhkMzNjNzcxY2VkYyBiL2Z1enplci9jb3JwdXMvYWEzZTQ4MGZlYTliYWM4M2I3YTYzNGJiZjcyNDhkMzNjNzcxY2VkYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjg4MDgwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hYTNlNDgwZmVhOWJhYzgzYjdhNjM0YmJmNzI0OGQzM2M3NzFjZWRjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWE1YzRkNWE1OTFlOGI5MjUyOTkyY2U1NWFlOGQ0YTQxNDA1ZmEyOCBiL2Z1enplci9jb3JwdXMvYWE1YzRkNWE1OTFlOGI5MjUyOTkyY2U1NWFlOGQ0YTQxNDA1ZmEyOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGY0ZWJmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hYTVjNGQ1YTU5MWU4YjkyNTI5OTJjZTU1YWU4ZDRhNDE0MDVmYTI4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWE3YTI4YmIyZDQ2OWJmMDJjZGZhYmUwMTI3NWE2MmI0NGM0OTlmMSBiL2Z1enplci9jb3JwdXMvYWE3YTI4YmIyZDQ2OWJmMDJjZGZhYmUwMTI3NWE2MmI0NGM0OTlmMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmI1Y2FiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hYTdhMjhiYjJkNDY5YmYwMmNkZmFiZTAxMjc1YTYyYjQ0YzQ5OWYxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWFhMWYwN2Q5NDE0ZWE5ZmU3YmU0N2NkNjUwM2U4ZTExYjMwYmMxMCBiL2Z1enplci9jb3JwdXMvYWFhMWYwN2Q5NDE0ZWE5ZmU3YmU0N2NkNjUwM2U4ZTExYjMwYmMxMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmZiMDkzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hYWExZjA3ZDk0MTRlYTlmZTdiZTQ3Y2Q2NTAzZThlMTFiMzBiYzEwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWIwZjM1ZjE3NGQxZDVlZTM2ZjdjODUwM2ZmMDFiMjllOTBiNjJjNiBiL2Z1enplci9jb3JwdXMvYWIwZjM1ZjE3NGQxZDVlZTM2ZjdjODUwM2ZmMDFiMjllOTBiNjJjNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDVmMTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hYjBmMzVmMTc0ZDFkNWVlMzZmN2M4NTAzZmYwMWIyOWU5MGI2MmM2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWIxNzllNGNlYTAyM2JkMTgxMWQzYWJmZWJlYjBlMTVkZjk3MzRhOSBiL2Z1enplci9jb3JwdXMvYWIxNzllNGNlYTAyM2JkMTgxMWQzYWJmZWJlYjBlMTVkZjk3MzRhOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjAyNDgyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hYjE3OWU0Y2VhMDIzYmQxODExZDNhYmZlYmViMGUxNWRmOTczNGE5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWI0NGE3YzNkZjBhNWY5MDQyOTBlZDcwYWExMmRjYjA2ZDdmNmNiYyBiL2Z1enplci9jb3JwdXMvYWI0NGE3YzNkZjBhNWY5MDQyOTBlZDcwYWExMmRjYjA2ZDdmNmNiYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWU3MTcyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hYjQ0YTdjM2RmMGE1ZjkwNDI5MGVkNzBhYTEyZGNiMDZkN2Y2Y2JjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWI3N2YxMDRhYTc5MDAyMWI5ODIwMDY0YTg2MzkxNWEyYjQyOGZmOCBiL2Z1enplci9jb3JwdXMvYWI3N2YxMDRhYTc5MDAyMWI5ODIwMDY0YTg2MzkxNWEyYjQyOGZmOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGRmNmQxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hYjc3ZjEwNGFhNzkwMDIxYjk4MjAwNjRhODYzOTE1YTJiNDI4ZmY4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWI5NTYyOTU0MmNjYjI1ODY2ZmE1MzJlYzJjYzIxMWM1NzU1YWNiMyBiL2Z1enplci9jb3JwdXMvYWI5NTYyOTU0MmNjYjI1ODY2ZmE1MzJlYzJjYzIxMWM1NzU1YWNiMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODEwYzhhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hYjk1NjI5NTQyY2NiMjU4NjZmYTUzMmVjMmNjMjExYzU3NTVhY2IzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWI5NWY3YjVhYzI5NzNmZDk4YzVmMDU0ODU2NDk3MDRlM2IzMjM4YiBiL2Z1enplci9jb3JwdXMvYWI5NWY3YjVhYzI5NzNmZDk4YzVmMDU0ODU2NDk3MDRlM2IzMjM4YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTAzY2ZkCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hYjk1ZjdiNWFjMjk3M2ZkOThjNWYwNTQ4NTY0OTcwNGUzYjMyMzhiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWI5OTg3NzE0MWI3ZDJhZjk4OTJmODhkZDJhZWUwZTIwY2QxMDdlOSBiL2Z1enplci9jb3JwdXMvYWI5OTg3NzE0MWI3ZDJhZjk4OTJmODhkZDJhZWUwZTIwY2QxMDdlOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTY0NTg3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hYjk5ODc3MTQxYjdkMmFmOTg5MmY4OGRkMmFlZTBlMjBjZDEwN2U5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWJhZmQwYmY4MDAwYTg0MTA2ZTNhYWYxZDVkYmNjOTk1ODRhOTM5ZSBiL2Z1enplci9jb3JwdXMvYWJhZmQwYmY4MDAwYTg0MTA2ZTNhYWYxZDVkYmNjOTk1ODRhOTM5ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGJmNTYzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hYmFmZDBiZjgwMDBhODQxMDZlM2FhZjFkNWRiY2M5OTU4NGE5MzllCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWJjOWE5MzNkMzYwNjdmMTZhNmUxNWE3Y2VjNjY1ZjdlM2E0YWZhOCBiL2Z1enplci9jb3JwdXMvYWJjOWE5MzNkMzYwNjdmMTZhNmUxNWE3Y2VjNjY1ZjdlM2E0YWZhOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTMzMWE5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hYmM5YTkzM2QzNjA2N2YxNmE2ZTE1YTdjZWM2NjVmN2UzYTRhZmE4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWJjZDM1MWUyYzRhY2NhMmQyMTdkODIyZmFmMTE5ZDc2ZGYzNGNkNSBiL2Z1enplci9jb3JwdXMvYWJjZDM1MWUyYzRhY2NhMmQyMTdkODIyZmFmMTE5ZDc2ZGYzNGNkNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGMwOTg3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hYmNkMzUxZTJjNGFjY2EyZDIxN2Q4MjJmYWYxMTlkNzZkZjM0Y2Q1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWMxYjA0NGNkYWQyNDZlNDdhNGJlYTk3MzRiN2NjOGE1ZThiMTQxMSBiL2Z1enplci9jb3JwdXMvYWMxYjA0NGNkYWQyNDZlNDdhNGJlYTk3MzRiN2NjOGE1ZThiMTQxMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjBhZjM3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hYzFiMDQ0Y2RhZDI0NmU0N2E0YmVhOTczNGI3Y2M4YTVlOGIxNDExCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWM1MmFlNzc4NGZmNWU0MDcxMjJiZDEwYzEzODJlYTNkYzcyYWRiMyBiL2Z1enplci9jb3JwdXMvYWM1MmFlNzc4NGZmNWU0MDcxMjJiZDEwYzEzODJlYTNkYzcyYWRiMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDc1ODdmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hYzUyYWU3Nzg0ZmY1ZTQwNzEyMmJkMTBjMTM4MmVhM2RjNzJhZGIzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWM1NzNmNTlkOGNiYzc2MjhkYzcwZmJlNjA3MjczZjdiNGE5MGUxNCBiL2Z1enplci9jb3JwdXMvYWM1NzNmNTlkOGNiYzc2MjhkYzcwZmJlNjA3MjczZjdiNGE5MGUxNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Nzc2MDEzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hYzU3M2Y1OWQ4Y2JjNzYyOGRjNzBmYmU2MDcyNzNmN2I0YTkwZTE0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWM2NmIyMWIwZDZlOGY4NmVmM2U0ZTBhY2I1N2YyNzdiYTU5NmIwMiBiL2Z1enplci9jb3JwdXMvYWM2NmIyMWIwZDZlOGY4NmVmM2U0ZTBhY2I1N2YyNzdiYTU5NmIwMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTM0Mjk2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hYzY2YjIxYjBkNmU4Zjg2ZWYzZTRlMGFjYjU3ZjI3N2JhNTk2YjAyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWNiMzJlNzE5MmI3OTRjOTI2YjkwZDA2OTYzZjk1ZTFjMGI2NmU3MiBiL2Z1enplci9jb3JwdXMvYWNiMzJlNzE5MmI3OTRjOTI2YjkwZDA2OTYzZjk1ZTFjMGI2NmU3MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGY4MjViCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hY2IzMmU3MTkyYjc5NGM5MjZiOTBkMDY5NjNmOTVlMWMwYjY2ZTcyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWNiNjA2ODUxYmRhYzE5ODYxMmFjNjI4MDFmN2ExYzczYjgyYmUyNyBiL2Z1enplci9jb3JwdXMvYWNiNjA2ODUxYmRhYzE5ODYxMmFjNjI4MDFmN2ExYzczYjgyYmUyNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWRmNmFkCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hY2I2MDY4NTFiZGFjMTk4NjEyYWM2MjgwMWY3YTFjNzNiODJiZTI3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWNjNzExNzMwZTIwZTE1MDg4MWFmMzQzYTFhYjU2YjQxNjA1NjM5OCBiL2Z1enplci9jb3JwdXMvYWNjNzExNzMwZTIwZTE1MDg4MWFmMzQzYTFhYjU2YjQxNjA1NjM5OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmJlMjg0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hY2M3MTE3MzBlMjBlMTUwODgxYWYzNDNhMWFiNTZiNDE2MDU2Mzk4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWNmNTNiODljZTJmMDhmMDUyNjAyYzQzOGVlMmFhNTJiNDYxZjNhMCBiL2Z1enplci9jb3JwdXMvYWNmNTNiODljZTJmMDhmMDUyNjAyYzQzOGVlMmFhNTJiNDYxZjNhMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjJjN2I5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hY2Y1M2I4OWNlMmYwOGYwNTI2MDJjNDM4ZWUyYWE1MmI0NjFmM2EwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWQwZGJkMWUxZGE5YTU4MzBjMDBjZGRjOWI4MDNlOThiNDIzNTM4ZSBiL2Z1enplci9jb3JwdXMvYWQwZGJkMWUxZGE5YTU4MzBjMDBjZGRjOWI4MDNlOThiNDIzNTM4ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDM4NTE0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hZDBkYmQxZTFkYTlhNTgzMGMwMGNkZGM5YjgwM2U5OGI0MjM1MzhlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWQzN2I2YWQ0NTQxYmExZTcwZThlZDA3MWRjZjg3YmNkZGRmZTgwYSBiL2Z1enplci9jb3JwdXMvYWQzN2I2YWQ0NTQxYmExZTcwZThlZDA3MWRjZjg3YmNkZGRmZTgwYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjY0OTZlCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hZDM3YjZhZDQ1NDFiYTFlNzBlOGVkMDcxZGNmODdiY2RkZGZlODBhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWQ0YjFhMWU1YjFkMTAxZDgwNWViYjc3MDFhZWRkZThhNzdiMmU5NSBiL2Z1enplci9jb3JwdXMvYWQ0YjFhMWU1YjFkMTAxZDgwNWViYjc3MDFhZWRkZThhNzdiMmU5NQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTQ5ODZhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hZDRiMWExZTViMWQxMDFkODA1ZWJiNzcwMWFlZGRlOGE3N2IyZTk1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWQ1NzZhYzljZjBiNjU0ODMwZWIwNjgwMGFkNDRjMjM4NzdjY2IyMCBiL2Z1enplci9jb3JwdXMvYWQ1NzZhYzljZjBiNjU0ODMwZWIwNjgwMGFkNDRjMjM4NzdjY2IyMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmFmZjFhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hZDU3NmFjOWNmMGI2NTQ4MzBlYjA2ODAwYWQ0NGMyMzg3N2NjYjIwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWQ4M2E0OWJkMDg3MzQ3MWIxY2E3YmU4YjQyYzYzMDRjNWExN2M0OCBiL2Z1enplci9jb3JwdXMvYWQ4M2E0OWJkMDg3MzQ3MWIxY2E3YmU4YjQyYzYzMDRjNWExN2M0OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGI5ZGVlCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hZDgzYTQ5YmQwODczNDcxYjFjYTdiZThiNDJjNjMwNGM1YTE3YzQ4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWUwMDRhMmI5NTBhYTVmM2E3YzM1YzFmYWJiZmIyN2YzZWJhY2FhMiBiL2Z1enplci9jb3JwdXMvYWUwMDRhMmI5NTBhYTVmM2E3YzM1YzFmYWJiZmIyN2YzZWJhY2FhMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzUxZGVjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hZTAwNGEyYjk1MGFhNWYzYTdjMzVjMWZhYmJmYjI3ZjNlYmFjYWEyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWUxMjJlNjU1ZTdmMDUxZThiZjYxMjgyZWQ5ODRjOWQ5YzlhYjYxNSBiL2Z1enplci9jb3JwdXMvYWUxMjJlNjU1ZTdmMDUxZThiZjYxMjgyZWQ5ODRjOWQ5YzlhYjYxNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjQ5ODVhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hZTEyMmU2NTVlN2YwNTFlOGJmNjEyODJlZDk4NGM5ZDljOWFiNjE1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWU5ODY1YThiMDNhMDcxNDAzMTBlNWIzYjRhZTgzOWVjMTk0ZjM1ZiBiL2Z1enplci9jb3JwdXMvYWU5ODY1YThiMDNhMDcxNDAzMTBlNWIzYjRhZTgzOWVjMTk0ZjM1ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWI2NDNjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hZTk4NjVhOGIwM2EwNzE0MDMxMGU1YjNiNGFlODM5ZWMxOTRmMzVmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWVhMzZhZTQxMjFjNzEyZjE0OTIwMTNjOGFiYzhjMmExNGJhMjQ4OCBiL2Z1enplci9jb3JwdXMvYWVhMzZhZTQxMjFjNzEyZjE0OTIwMTNjOGFiYzhjMmExNGJhMjQ4OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjU1ZmYwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hZWEzNmFlNDEyMWM3MTJmMTQ5MjAxM2M4YWJjOGMyYTE0YmEyNDg4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWViOTU5YWY4M2Q0NzljMThhNWRmMTBiZTExNWY2NDFkNzM5YTE0ZCBiL2Z1enplci9jb3JwdXMvYWViOTU5YWY4M2Q0NzljMThhNWRmMTBiZTExNWY2NDFkNzM5YTE0ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjQxYTBiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hZWI5NTlhZjgzZDQ3OWMxOGE1ZGYxMGJlMTE1ZjY0MWQ3MzlhMTRkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWVkNDU3Y2U5MGE3OTA2MDczZjU5MWUxYTkwODk5YzQ3ZTQwYzg3NyBiL2Z1enplci9jb3JwdXMvYWVkNDU3Y2U5MGE3OTA2MDczZjU5MWUxYTkwODk5YzQ3ZTQwYzg3NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDE1ZjVmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hZWQ0NTdjZTkwYTc5MDYwNzNmNTkxZTFhOTA4OTljNDdlNDBjODc3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWVmYWJjYTgwMzk2MWJkNWY4YzhkYTBmZTkzNjI5NDUwYzQ3NGZhYiBiL2Z1enplci9jb3JwdXMvYWVmYWJjYTgwMzk2MWJkNWY4YzhkYTBmZTkzNjI5NDUwYzQ3NGZhYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTNkYTY0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hZWZhYmNhODAzOTYxYmQ1ZjhjOGRhMGZlOTM2Mjk0NTBjNDc0ZmFiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWYwNDAyM2Q2YzBiOTQ2MDU5MzFlYjZjODk4YTVkZWNkNDA5NWQ0MSBiL2Z1enplci9jb3JwdXMvYWYwNDAyM2Q2YzBiOTQ2MDU5MzFlYjZjODk4YTVkZWNkNDA5NWQ0MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjk5ZjczCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hZjA0MDIzZDZjMGI5NDYwNTkzMWViNmM4OThhNWRlY2Q0MDk1ZDQxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWYxM2Q2Mzg0ZDQwMGU5ZWE3OWQ1MTgwYmU2OGJkYWI4MWIyODAwNiBiL2Z1enplci9jb3JwdXMvYWYxM2Q2Mzg0ZDQwMGU5ZWE3OWQ1MTgwYmU2OGJkYWI4MWIyODAwNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWFmYzU3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hZjEzZDYzODRkNDAwZTllYTc5ZDUxODBiZTY4YmRhYjgxYjI4MDA2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWYxNGRmNDlkMGRhZjYxYmZiMDk5NjI3Y2MwZTAzYzAxOThhZmI5NyBiL2Z1enplci9jb3JwdXMvYWYxNGRmNDlkMGRhZjYxYmZiMDk5NjI3Y2MwZTAzYzAxOThhZmI5NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTdhM2RhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hZjE0ZGY0OWQwZGFmNjFiZmIwOTk2MjdjYzBlMDNjMDE5OGFmYjk3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWYxNjBhYjA5NzI2YTQzMmYwY2QwYjI2YmJkMzVkNzY2OGE1ZDJiZSBiL2Z1enplci9jb3JwdXMvYWYxNjBhYjA5NzI2YTQzMmYwY2QwYjI2YmJkMzVkNzY2OGE1ZDJiZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTY5MjAwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hZjE2MGFiMDk3MjZhNDMyZjBjZDBiMjZiYmQzNWQ3NjY4YTVkMmJlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWY1Y2VkZDVhZWU3N2EyNDRmMGJmZDUzZTExZTE2ZGU5NjkxNjUyNSBiL2Z1enplci9jb3JwdXMvYWY1Y2VkZDVhZWU3N2EyNDRmMGJmZDUzZTExZTE2ZGU5NjkxNjUyNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2U5YzUwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hZjVjZWRkNWFlZTc3YTI0NGYwYmZkNTNlMTFlMTZkZTk2OTE2NTI1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWY2MjA0Mzc5NDFhN2QwODQ0ZGIwNDBiOTVlOWQ5NmVmMjMyMzZjZCBiL2Z1enplci9jb3JwdXMvYWY2MjA0Mzc5NDFhN2QwODQ0ZGIwNDBiOTVlOWQ5NmVmMjMyMzZjZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjRkNDVhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hZjYyMDQzNzk0MWE3ZDA4NDRkYjA0MGI5NWU5ZDk2ZWYyMzIzNmNkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWY4ZDYxYzQxZWIwM2Y3NTFjN2E0Y2RmODU0NDcyZGFlMmYxZDE0NCBiL2Z1enplci9jb3JwdXMvYWY4ZDYxYzQxZWIwM2Y3NTFjN2E0Y2RmODU0NDcyZGFlMmYxZDE0NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzQ1Nzc2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hZjhkNjFjNDFlYjAzZjc1MWM3YTRjZGY4NTQ0NzJkYWUyZjFkMTQ0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWZmYWM0ZWFlZDgzOTM0MjliN2YwNGQ2Mzg0MmFhMzc0OTBlODdmZSBiL2Z1enplci9jb3JwdXMvYWZmYWM0ZWFlZDgzOTM0MjliN2YwNGQ2Mzg0MmFhMzc0OTBlODdmZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmEyODkxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hZmZhYzRlYWVkODM5MzQyOWI3ZjA0ZDYzODQyYWEzNzQ5MGU4N2ZlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYWZmZTliMjlhYTE4M2MzMjI1NDA5Njg0YWU3YWY3NTkzZmJhNTZjNSBiL2Z1enplci9jb3JwdXMvYWZmZTliMjlhYTE4M2MzMjI1NDA5Njg0YWU3YWY3NTkzZmJhNTZjNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjE0NGViCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9hZmZlOWIyOWFhMTgzYzMyMjU0MDk2ODRhZTdhZjc1OTNmYmE1NmM1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjAyMjI5MDAxOWIzYWVkNGIyMWQxNzg4ZDc1ZWIzZWQzOGQ4NjQyZSBiL2Z1enplci9jb3JwdXMvYjAyMjI5MDAxOWIzYWVkNGIyMWQxNzg4ZDc1ZWIzZWQzOGQ4NjQyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWE0N2FjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iMDIyMjkwMDE5YjNhZWQ0YjIxZDE3ODhkNzVlYjNlZDM4ZDg2NDJlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjAyOGFjZWYwZWM5MjUzZjY2NDJhZGU3OTliNDFjZDU1ZTFhMzliYyBiL2Z1enplci9jb3JwdXMvYjAyOGFjZWYwZWM5MjUzZjY2NDJhZGU3OTliNDFjZDU1ZTFhMzliYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDFjNjZmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iMDI4YWNlZjBlYzkyNTNmNjY0MmFkZTc5OWI0MWNkNTVlMWEzOWJjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjAyZTIwODU0MGJjZjlhOGQyYzMyYWU1MTY0MGM5YWRmNjQ1ZTI4NCBiL2Z1enplci9jb3JwdXMvYjAyZTIwODU0MGJjZjlhOGQyYzMyYWU1MTY0MGM5YWRmNjQ1ZTI4NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGQ0MDY2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iMDJlMjA4NTQwYmNmOWE4ZDJjMzJhZTUxNjQwYzlhZGY2NDVlMjg0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjAzOGZiYjc0NTNjNDQ5ZjFjOTQ0ZDY2ZjdkNGVjNDQ4MWM5YjY0NSBiL2Z1enplci9jb3JwdXMvYjAzOGZiYjc0NTNjNDQ5ZjFjOTQ0ZDY2ZjdkNGVjNDQ4MWM5YjY0NQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTU5NDAzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iMDM4ZmJiNzQ1M2M0NDlmMWM5NDRkNjZmN2Q0ZWM0NDgxYzliNjQ1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjA1NDJjZDQ4MWRlOTBmOGRjY2FiNWVlOWFjM2JiMzhiOGMyMzdlNyBiL2Z1enplci9jb3JwdXMvYjA1NDJjZDQ4MWRlOTBmOGRjY2FiNWVlOWFjM2JiMzhiOGMyMzdlNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTdhYzNjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iMDU0MmNkNDgxZGU5MGY4ZGNjYWI1ZWU5YWMzYmIzOGI4YzIzN2U3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjBhM2MzMjY1N2YzNDJmOWQ4OWFiMDNhYWM1NzUxNzIwMmI3MWEwZiBiL2Z1enplci9jb3JwdXMvYjBhM2MzMjY1N2YzNDJmOWQ4OWFiMDNhYWM1NzUxNzIwMmI3MWEwZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmRjZmVmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iMGEzYzMyNjU3ZjM0MmY5ZDg5YWIwM2FhYzU3NTE3MjAyYjcxYTBmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjBhNzAyNjRhOWM1OWNiY2E0Zjg3Y2UzOTM4ZGVmOTJiMDQzNDc2MyBiL2Z1enplci9jb3JwdXMvYjBhNzAyNjRhOWM1OWNiY2E0Zjg3Y2UzOTM4ZGVmOTJiMDQzNDc2MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjZmMzA4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iMGE3MDI2NGE5YzU5Y2JjYTRmODdjZTM5MzhkZWY5MmIwNDM0NzYzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjBmYTVkNTNiYThkZDFhYWYzYjg2YzUyYzQ2ZWI0ZTg2OTBhYTVkZiBiL2Z1enplci9jb3JwdXMvYjBmYTVkNTNiYThkZDFhYWYzYjg2YzUyYzQ2ZWI0ZTg2OTBhYTVkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2M5ZjMyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iMGZhNWQ1M2JhOGRkMWFhZjNiODZjNTJjNDZlYjRlODY5MGFhNWRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjEwZjk1ZTE2NDQ4NTFiOTEzYTYwMDc4YzhjYjM0YTNiMGI4ZTI3ZiBiL2Z1enplci9jb3JwdXMvYjEwZjk1ZTE2NDQ4NTFiOTEzYTYwMDc4YzhjYjM0YTNiMGI4ZTI3ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjc2MWU5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iMTBmOTVlMTY0NDg1MWI5MTNhNjAwNzhjOGNiMzRhM2IwYjhlMjdmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjExMjViMGEyYzZmYWNlMWY1NWExNGEyY2I3NWQyZThmMTg4YmE0ZiBiL2Z1enplci9jb3JwdXMvYjExMjViMGEyYzZmYWNlMWY1NWExNGEyY2I3NWQyZThmMTg4YmE0ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTAxMjFhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iMTEyNWIwYTJjNmZhY2UxZjU1YTE0YTJjYjc1ZDJlOGYxODhiYTRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjEyZTUyYTg4MmY4MTRiZmU1OTAwMzM0NTA5MWUwMTc1M2NmNWVlMiBiL2Z1enplci9jb3JwdXMvYjEyZTUyYTg4MmY4MTRiZmU1OTAwMzM0NTA5MWUwMTc1M2NmNWVlMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTE3NTAxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iMTJlNTJhODgyZjgxNGJmZTU5MDAzMzQ1MDkxZTAxNzUzY2Y1ZWUyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjE2NTJiNjE0Y2YwYmVhYTNlMzZmNjc5MjViNDMwYzhkZDE1YjQ5YyBiL2Z1enplci9jb3JwdXMvYjE2NTJiNjE0Y2YwYmVhYTNlMzZmNjc5MjViNDMwYzhkZDE1YjQ5YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzUwN2FjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iMTY1MmI2MTRjZjBiZWFhM2UzNmY2NzkyNWI0MzBjOGRkMTViNDljCkBAIC0wLDAgKzEgQEAKKwQ7JgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjFiNzJkYTdmNTczYjg0NTYwMjY1YTU2MGI5MzZkMjA2NDc3NGJiOSBiL2Z1enplci9jb3JwdXMvYjFiNzJkYTdmNTczYjg0NTYwMjY1YTU2MGI5MzZkMjA2NDc3NGJiOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzkyZjc3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iMWI3MmRhN2Y1NzNiODQ1NjAyNjVhNTYwYjkzNmQyMDY0Nzc0YmI5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjFjMjkxNWFlYzk0NzgwMzJhOGJjNjU2M2E1NzVlZGU0Mzg5NGY2MSBiL2Z1enplci9jb3JwdXMvYjFjMjkxNWFlYzk0NzgwMzJhOGJjNjU2M2E1NzVlZGU0Mzg5NGY2MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjE3MGE3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iMWMyOTE1YWVjOTQ3ODAzMmE4YmM2NTYzYTU3NWVkZTQzODk0ZjYxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjFmMTJiNGJkMjBmYWI5MGJhZTk0YmViYjA1NjY5N2NhMDVhNWI2YyBiL2Z1enplci9jb3JwdXMvYjFmMTJiNGJkMjBmYWI5MGJhZTk0YmViYjA1NjY5N2NhMDVhNWI2YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzNmOTM0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iMWYxMmI0YmQyMGZhYjkwYmFlOTRiZWJiMDU2Njk3Y2EwNWE1YjZjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjFmMWIxOTZhZDI3NzI0OGJkMjJlOTYzNjU1NDA1Y2ZlZmZkNTk1MiBiL2Z1enplci9jb3JwdXMvYjFmMWIxOTZhZDI3NzI0OGJkMjJlOTYzNjU1NDA1Y2ZlZmZkNTk1MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzljYmU4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iMWYxYjE5NmFkMjc3MjQ4YmQyMmU5NjM2NTU0MDVjZmVmZmQ1OTUyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjFmNThmMjQwZjRhOTBkOWMxZjJjNmRhNzdlNDM2ODM1OGZhMjI2YSBiL2Z1enplci9jb3JwdXMvYjFmNThmMjQwZjRhOTBkOWMxZjJjNmRhNzdlNDM2ODM1OGZhMjI2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWYyZmE1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iMWY1OGYyNDBmNGE5MGQ5YzFmMmM2ZGE3N2U0MzY4MzU4ZmEyMjZhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjIzZTUwOTY2MDMwMjU4Mjg4NDYwNmEwYmM4YmU5YTQ3NjhmODA0ZSBiL2Z1enplci9jb3JwdXMvYjIzZTUwOTY2MDMwMjU4Mjg4NDYwNmEwYmM4YmU5YTQ3NjhmODA0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDM3ZjZkCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iMjNlNTA5NjYwMzAyNTgyODg0NjA2YTBiYzhiZTlhNDc2OGY4MDRlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjI5MWM4ODhiNzM1NDViOTI5ODBlMDJhNTM1YmU1NGU5NDllMzg5ZCBiL2Z1enplci9jb3JwdXMvYjI5MWM4ODhiNzM1NDViOTI5ODBlMDJhNTM1YmU1NGU5NDllMzg5ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDhkYTMzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iMjkxYzg4OGI3MzU0NWI5Mjk4MGUwMmE1MzViZTU0ZTk0OWUzODlkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjMyNzk2OGEyYTllZTYxZWNmZTRlMWRiMDBjMmFlNzdlOWJmZDZjNyBiL2Z1enplci9jb3JwdXMvYjMyNzk2OGEyYTllZTYxZWNmZTRlMWRiMDBjMmFlNzdlOWJmZDZjNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDZmOTI1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iMzI3OTY4YTJhOWVlNjFlY2ZlNGUxZGIwMGMyYWU3N2U5YmZkNmM3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjMzZmQ1M2VhYTJkMWEyMzUyZjg5OGYzNzhmZTM2NGY2MjFiNWJhZiBiL2Z1enplci9jb3JwdXMvYjMzZmQ1M2VhYTJkMWEyMzUyZjg5OGYzNzhmZTM2NGY2MjFiNWJhZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjRkYmU3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iMzNmZDUzZWFhMmQxYTIzNTJmODk4ZjM3OGZlMzY0ZjYyMWI1YmFmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjM2MjVmYTkwMjhhNDY1MzVkZDFhNDlhY2QxYjcwZTc1MmIwNzgwZSBiL2Z1enplci9jb3JwdXMvYjM2MjVmYTkwMjhhNDY1MzVkZDFhNDlhY2QxYjcwZTc1MmIwNzgwZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzgyMDVhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iMzYyNWZhOTAyOGE0NjUzNWRkMWE0OWFjZDFiNzBlNzUyYjA3ODBlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjM2MzM2ZDFkMjlkZDNmZjFjZWY0YjY3ODRlMzYzMWE1ZjU1NWI4ZCBiL2Z1enplci9jb3JwdXMvYjM2MzM2ZDFkMjlkZDNmZjFjZWY0YjY3ODRlMzYzMWE1ZjU1NWI4ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTQxNDJmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iMzYzMzZkMWQyOWRkM2ZmMWNlZjRiNjc4NGUzNjMxYTVmNTU1YjhkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjM2YWJlZmJhOGU1ODIzMDllMTViODEyMjJlZWMyNDQ0YWE1Zjk2OSBiL2Z1enplci9jb3JwdXMvYjM2YWJlZmJhOGU1ODIzMDllMTViODEyMjJlZWMyNDQ0YWE1Zjk2OQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTJkYmI0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iMzZhYmVmYmE4ZTU4MjMwOWUxNWI4MTIyMmVlYzI0NDRhYTVmOTY5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjNjMzhjZGM1NDEyMjc5ZDYyNTExMzMwZTA0YTAwYWQ5NWRjMWE5MyBiL2Z1enplci9jb3JwdXMvYjNjMzhjZGM1NDEyMjc5ZDYyNTExMzMwZTA0YTAwYWQ5NWRjMWE5MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGI0ZjM4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iM2MzOGNkYzU0MTIyNzlkNjI1MTEzMzBlMDRhMDBhZDk1ZGMxYTkzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjNjYmEwYWMwYzEzYmY3ZWU4NzNlMTEzNDNiYjBjOTkyMGQ5NjE1YiBiL2Z1enplci9jb3JwdXMvYjNjYmEwYWMwYzEzYmY3ZWU4NzNlMTEzNDNiYjBjOTkyMGQ5NjE1YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzhhZDI4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iM2NiYTBhYzBjMTNiZjdlZTg3M2UxMTM0M2JiMGM5OTIwZDk2MTViCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjNlMTc4NWU3ZGNhMDhiZjI3NTdmZWViYjlhMjY0OGYyOWEzYTFkYSBiL2Z1enplci9jb3JwdXMvYjNlMTc4NWU3ZGNhMDhiZjI3NTdmZWViYjlhMjY0OGYyOWEzYTFkYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTdiMWVhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iM2UxNzg1ZTdkY2EwOGJmMjc1N2ZlZWJiOWEyNjQ4ZjI5YTNhMWRhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjQwMDM1Y2UzYzRhODI1ODUxMTBhMGU0NzczYTI3NTQ5NWM1NjBkMCBiL2Z1enplci9jb3JwdXMvYjQwMDM1Y2UzYzRhODI1ODUxMTBhMGU0NzczYTI3NTQ5NWM1NjBkMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWVkODkwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNDAwMzVjZTNjNGE4MjU4NTExMGEwZTQ3NzNhMjc1NDk1YzU2MGQwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjQxNTEzZTM4YTQwYzExYWU3NzJmYjdhMWRjNDY4NDkzMDZmYTkyOSBiL2Z1enplci9jb3JwdXMvYjQxNTEzZTM4YTQwYzExYWU3NzJmYjdhMWRjNDY4NDkzMDZmYTkyOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjM3ZTE1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNDE1MTNlMzhhNDBjMTFhZTc3MmZiN2ExZGM0Njg0OTMwNmZhOTI5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjQ0MGM0YThlOTUzNmQyODMxMzdkNTY3ZmM4OWNkYjM5MjBkYzIwOSBiL2Z1enplci9jb3JwdXMvYjQ0MGM0YThlOTUzNmQyODMxMzdkNTY3ZmM4OWNkYjM5MjBkYzIwOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2QyNTkwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNDQwYzRhOGU5NTM2ZDI4MzEzN2Q1NjdmYzg5Y2RiMzkyMGRjMjA5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjQ0N2ZkOGUxZjEzMWY3Y2QzZjgyZTg3MDNhNWFkM2RkZGNjZjIwNSBiL2Z1enplci9jb3JwdXMvYjQ0N2ZkOGUxZjEzMWY3Y2QzZjgyZTg3MDNhNWFkM2RkZGNjZjIwNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWY4MWFjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNDQ3ZmQ4ZTFmMTMxZjdjZDNmODJlODcwM2E1YWQzZGRkY2NmMjA1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjQ3NWUzNWVmNjg5MzJlZjFhNzBlNjc0ODhiNTc2NzE0ZmMwNzNhYyBiL2Z1enplci9jb3JwdXMvYjQ3NWUzNWVmNjg5MzJlZjFhNzBlNjc0ODhiNTc2NzE0ZmMwNzNhYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzA1ZTMzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNDc1ZTM1ZWY2ODkzMmVmMWE3MGU2NzQ4OGI1NzY3MTRmYzA3M2FjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjQ3Yjg3MjQ5MDBkZDQxNWZhOTIwMWE3YjNiMjcyMDE0N2EwYmE1YiBiL2Z1enplci9jb3JwdXMvYjQ3Yjg3MjQ5MDBkZDQxNWZhOTIwMWE3YjNiMjcyMDE0N2EwYmE1YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWZkMGIzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNDdiODcyNDkwMGRkNDE1ZmE5MjAxYTdiM2IyNzIwMTQ3YTBiYTViCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjQ4NzAxNzA5NDI0YzA5ZTljMjYyYjAzNjdhNjY3MThkZjY0N2I4MCBiL2Z1enplci9jb3JwdXMvYjQ4NzAxNzA5NDI0YzA5ZTljMjYyYjAzNjdhNjY3MThkZjY0N2I4MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDdkNmIzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNDg3MDE3MDk0MjRjMDllOWMyNjJiMDM2N2E2NjcxOGRmNjQ3YjgwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjQ5OGQwZjZjZTM4M2FiNmFhNTJkN2I3ODY0MTlkZDgzOTc0N2JkOSBiL2Z1enplci9jb3JwdXMvYjQ5OGQwZjZjZTM4M2FiNmFhNTJkN2I3ODY0MTlkZDgzOTc0N2JkOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWVjY2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNDk4ZDBmNmNlMzgzYWI2YWE1MmQ3Yjc4NjQxOWRkODM5NzQ3YmQ5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjRiYmY1OTY0OTM2OTJmMzA2Yzg4ODM5MWU0MWFhZWI1OWQzZTQxNyBiL2Z1enplci9jb3JwdXMvYjRiYmY1OTY0OTM2OTJmMzA2Yzg4ODM5MWU0MWFhZWI1OWQzZTQxNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDUyMjEyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNGJiZjU5NjQ5MzY5MmYzMDZjODg4MzkxZTQxYWFlYjU5ZDNlNDE3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjRkNDkwZjFmMjk3ODBlZWU5MTU0NGQ3NDUxYTVjOTc3ZTBhY2I5MCBiL2Z1enplci9jb3JwdXMvYjRkNDkwZjFmMjk3ODBlZWU5MTU0NGQ3NDUxYTVjOTc3ZTBhY2I5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTA5ZjRmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNGQ0OTBmMWYyOTc4MGVlZTkxNTQ0ZDc0NTFhNWM5NzdlMGFjYjkwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjRlYjY2MzY4NWI1YTE3OWNmZmU2YTEyMTg0OWIxZjA2ZDEwMmYzZSBiL2Z1enplci9jb3JwdXMvYjRlYjY2MzY4NWI1YTE3OWNmZmU2YTEyMTg0OWIxZjA2ZDEwMmYzZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzA4NmRhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNGViNjYzNjg1YjVhMTc5Y2ZmZTZhMTIxODQ5YjFmMDZkMTAyZjNlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjRlZDhmYjUyMTM5MTNkN2RjZjBlNWE3MmEzYzFlMmFiMGY2MzVmMCBiL2Z1enplci9jb3JwdXMvYjRlZDhmYjUyMTM5MTNkN2RjZjBlNWE3MmEzYzFlMmFiMGY2MzVmMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmZiZjIxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNGVkOGZiNTIxMzkxM2Q3ZGNmMGU1YTcyYTNjMWUyYWIwZjYzNWYwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjU4MDMzZGM1NzhiYmY2OTliYmY0YzBkZmMwNzY3OGIwOGM3Njc4MyBiL2Z1enplci9jb3JwdXMvYjU4MDMzZGM1NzhiYmY2OTliYmY0YzBkZmMwNzY3OGIwOGM3Njc4MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzJjMzVkCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNTgwMzNkYzU3OGJiZjY5OWJiZjRjMGRmYzA3Njc4YjA4Yzc2NzgzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjU4MWQ4OTgwOWExZWJhZWRjNDJhYjYxNGE2MWQzY2JkNDBjNWFhYSBiL2Z1enplci9jb3JwdXMvYjU4MWQ4OTgwOWExZWJhZWRjNDJhYjYxNGE2MWQzY2JkNDBjNWFhYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGViMDU4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNTgxZDg5ODA5YTFlYmFlZGM0MmFiNjE0YTYxZDNjYmQ0MGM1YWFhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjU4MzE2MmIyOGZhNjI3ZjgwZWQyZDA2Y2ZkNGViMWFjZWYzOTU0MSBiL2Z1enplci9jb3JwdXMvYjU4MzE2MmIyOGZhNjI3ZjgwZWQyZDA2Y2ZkNGViMWFjZWYzOTU0MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWJkYzdhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNTgzMTYyYjI4ZmE2MjdmODBlZDJkMDZjZmQ0ZWIxYWNlZjM5NTQxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjU5ODcyNWM4MTVmMDY2ODZlM2M4NjkwNjk3ZjBmZjIwMWQwYjU3YyBiL2Z1enplci9jb3JwdXMvYjU5ODcyNWM4MTVmMDY2ODZlM2M4NjkwNjk3ZjBmZjIwMWQwYjU3YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTczNDMxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNTk4NzI1YzgxNWYwNjY4NmUzYzg2OTA2OTdmMGZmMjAxZDBiNTdjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjYwMzliZTFhMDI3NzEyOTRlYjk1YTU5ODI4ODNhZTg1NTQzM2EyYSBiL2Z1enplci9jb3JwdXMvYjYwMzliZTFhMDI3NzEyOTRlYjk1YTU5ODI4ODNhZTg1NTQzM2EyYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzljY2FmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNjAzOWJlMWEwMjc3MTI5NGViOTVhNTk4Mjg4M2FlODU1NDMzYTJhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjY0MWQzZmNmNjIzYmRkNjc2Zjk3YTg4MzNlODI5OTJhNDc0Mzc3OCBiL2Z1enplci9jb3JwdXMvYjY0MWQzZmNmNjIzYmRkNjc2Zjk3YTg4MzNlODI5OTJhNDc0Mzc3OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjQ5Y2RkCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNjQxZDNmY2Y2MjNiZGQ2NzZmOTdhODgzM2U4Mjk5MmE0NzQzNzc4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjY2Yjk0NWQ0YTFiOGQ2ZGM3MTllZDA4M2U0Zjk1NzU0ZDgzYzMxYSBiL2Z1enplci9jb3JwdXMvYjY2Yjk0NWQ0YTFiOGQ2ZGM3MTllZDA4M2U0Zjk1NzU0ZDgzYzMxYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzFmZmViCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNjZiOTQ1ZDRhMWI4ZDZkYzcxOWVkMDgzZTRmOTU3NTRkODNjMzFhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjZiNmViYmIyNGVmN2MzZWNkMWNkNGY3MDZjMWNhZmJlNzEwYzliMyBiL2Z1enplci9jb3JwdXMvYjZiNmViYmIyNGVmN2MzZWNkMWNkNGY3MDZjMWNhZmJlNzEwYzliMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjFmZGUxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNmI2ZWJiYjI0ZWY3YzNlY2QxY2Q0ZjcwNmMxY2FmYmU3MTBjOWIzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjZjYjg4NmVlNjk4ZmNkNTM0YWIzZGE2NjU0ZWY1Nzk1NDdiOGMxMSBiL2Z1enplci9jb3JwdXMvYjZjYjg4NmVlNjk4ZmNkNTM0YWIzZGE2NjU0ZWY1Nzk1NDdiOGMxMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjY4MTBkCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNmNiODg2ZWU2OThmY2Q1MzRhYjNkYTY2NTRlZjU3OTU0N2I4YzExCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjZkOGE1NmZjNWU4MmM4MjNiOWQ1M2I0NWYwODc4NzEzNGQ2N2RjNyBiL2Z1enplci9jb3JwdXMvYjZkOGE1NmZjNWU4MmM4MjNiOWQ1M2I0NWYwODc4NzEzNGQ2N2RjNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTQyOWU3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNmQ4YTU2ZmM1ZTgyYzgyM2I5ZDUzYjQ1ZjA4Nzg3MTM0ZDY3ZGM3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjZlOTZmYjNmY2M3M2JmMWE5ODRmMTQ3YTNmZDcwODJlZTYyZDVkZSBiL2Z1enplci9jb3JwdXMvYjZlOTZmYjNmY2M3M2JmMWE5ODRmMTQ3YTNmZDcwODJlZTYyZDVkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOThlMDFiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNmU5NmZiM2ZjYzczYmYxYTk4NGYxNDdhM2ZkNzA4MmVlNjJkNWRlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjcwMDEyNjVlMDU4N2E3YWNjMDI3OGY3NDhhODdiNTkxMjAyMWE2MyBiL2Z1enplci9jb3JwdXMvYjcwMDEyNjVlMDU4N2E3YWNjMDI3OGY3NDhhODdiNTkxMjAyMWE2MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGNjYTk4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNzAwMTI2NWUwNTg3YTdhY2MwMjc4Zjc0OGE4N2I1OTEyMDIxYTYzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjcyZmJkZDY4MGQyNWE4ZjNhMTk3OThhYmMwMzQ4Njk4ZDBjZDNjNyBiL2Z1enplci9jb3JwdXMvYjcyZmJkZDY4MGQyNWE4ZjNhMTk3OThhYmMwMzQ4Njk4ZDBjZDNjNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGUzM2QzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNzJmYmRkNjgwZDI1YThmM2ExOTc5OGFiYzAzNDg2OThkMGNkM2M3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjc0NTk4M2E3MmNlOTUwNjBhYTYyZDhlNTIwOWE0NjgxZjNlMTI3YyBiL2Z1enplci9jb3JwdXMvYjc0NTk4M2E3MmNlOTUwNjBhYTYyZDhlNTIwOWE0NjgxZjNlMTI3YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDgyY2I5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNzQ1OTgzYTcyY2U5NTA2MGFhNjJkOGU1MjA5YTQ2ODFmM2UxMjdjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjc0Y2JkNTE4OGY1ZGJhOTQ2YjgyNmNlNjVjMzYxMTlmYWUzZjI2NiBiL2Z1enplci9jb3JwdXMvYjc0Y2JkNTE4OGY1ZGJhOTQ2YjgyNmNlNjVjMzYxMTlmYWUzZjI2NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDgyZTNjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNzRjYmQ1MTg4ZjVkYmE5NDZiODI2Y2U2NWMzNjExOWZhZTNmMjY2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjc0ZjNkODhjMmJhODY3ZDQxZGQ2ZjNmMzY1Mjk5MzNlYjJkYzBiOSBiL2Z1enplci9jb3JwdXMvYjc0ZjNkODhjMmJhODY3ZDQxZGQ2ZjNmMzY1Mjk5MzNlYjJkYzBiOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDc2NGU3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNzRmM2Q4OGMyYmE4NjdkNDFkZDZmM2YzNjUyOTkzM2ViMmRjMGI5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjc1YjNhYTQzNzU1NWE3ZTZmNmVjZTIxOTgxMzYxMjg3ZmM2NjZiYiBiL2Z1enplci9jb3JwdXMvYjc1YjNhYTQzNzU1NWE3ZTZmNmVjZTIxOTgxMzYxMjg3ZmM2NjZiYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjZhNzVmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNzViM2FhNDM3NTU1YTdlNmY2ZWNlMjE5ODEzNjEyODdmYzY2NmJiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjc1YmNjNDU0OWUyZGU3OTdkNDFiY2I3MTYyOTVlMjBmMmRjNGNhZiBiL2Z1enplci9jb3JwdXMvYjc1YmNjNDU0OWUyZGU3OTdkNDFiY2I3MTYyOTVlMjBmMmRjNGNhZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDg5YzgxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNzViY2M0NTQ5ZTJkZTc5N2Q0MWJjYjcxNjI5NWUyMGYyZGM0Y2FmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjc3MWNjMjNjZWFjMjQ1YzQwYjVlN2RjM2M2M2Y3ZGMxYjM1MDczOSBiL2Z1enplci9jb3JwdXMvYjc3MWNjMjNjZWFjMjQ1YzQwYjVlN2RjM2M2M2Y3ZGMxYjM1MDczOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzllNjdjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNzcxY2MyM2NlYWMyNDVjNDBiNWU3ZGMzYzYzZjdkYzFiMzUwNzM5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjc4NjY3NDBkMjcxMmM5MmI3MjJlMGYzY2ZhNzQzMDBjNDhjNWI1ZSBiL2Z1enplci9jb3JwdXMvYjc4NjY3NDBkMjcxMmM5MmI3MjJlMGYzY2ZhNzQzMDBjNDhjNWI1ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzNkMTllCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNzg2Njc0MGQyNzEyYzkyYjcyMmUwZjNjZmE3NDMwMGM0OGM1YjVlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjc5NjBiOGZlNGMxZGI4NGIyZTBjODZjYjk1YzkzYzFlNDE0YjZjNCBiL2Z1enplci9jb3JwdXMvYjc5NjBiOGZlNGMxZGI4NGIyZTBjODZjYjk1YzkzYzFlNDE0YjZjNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGM0N2QxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iNzk2MGI4ZmU0YzFkYjg0YjJlMGM4NmNiOTVjOTNjMWU0MTRiNmM0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjdiNTkxYzRjNTgxYmFjZmY1MmY5ZmQ5YmY3MzA0ZWFjNGQxZjc0OCBiL2Z1enplci9jb3JwdXMvYjdiNTkxYzRjNTgxYmFjZmY1MmY5ZmQ5YmY3MzA0ZWFjNGQxZjc0OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzQ3YzI4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iN2I1OTFjNGM1ODFiYWNmZjUyZjlmZDliZjczMDRlYWM0ZDFmNzQ4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjdiN2M0MDhhNzE2NmY5MDNlOWNjNzU2ZjQ5MjBmNzliNDI2MzgxZSBiL2Z1enplci9jb3JwdXMvYjdiN2M0MDhhNzE2NmY5MDNlOWNjNzU2ZjQ5MjBmNzliNDI2MzgxZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWVkOTM3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iN2I3YzQwOGE3MTY2ZjkwM2U5Y2M3NTZmNDkyMGY3OWI0MjYzODFlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjdiYzI3NjRjZWJkZjUxYjkxM2RlM2JjMjIxZjljMDgzNzNmNTk2NiBiL2Z1enplci9jb3JwdXMvYjdiYzI3NjRjZWJkZjUxYjkxM2RlM2JjMjIxZjljMDgzNzNmNTk2NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODFkM2U1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iN2JjMjc2NGNlYmRmNTFiOTEzZGUzYmMyMjFmOWMwODM3M2Y1OTY2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjdmOWUxMmJhNDgxOThmNjMxMmM3Nzg5ZTQ5M2M0MWMwYmUyOTljOSBiL2Z1enplci9jb3JwdXMvYjdmOWUxMmJhNDgxOThmNjMxMmM3Nzg5ZTQ5M2M0MWMwYmUyOTljOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmJkN2M1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iN2Y5ZTEyYmE0ODE5OGY2MzEyYzc3ODllNDkzYzQxYzBiZTI5OWM5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjg1MGJhMTM4N2FjMzZlYjU4YzRhNDIxMzUxNTdiNDZkMTUyOWQ5ZCBiL2Z1enplci9jb3JwdXMvYjg1MGJhMTM4N2FjMzZlYjU4YzRhNDIxMzUxNTdiNDZkMTUyOWQ5ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzQ4ZTI2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iODUwYmExMzg3YWMzNmViNThjNGE0MjEzNTE1N2I0NmQxNTI5ZDlkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjg4ZjZmYjU0NzNhMDljNGQ3ZmE0NjU3YjYwNjEzMWU4ZGQyMTcxNSBiL2Z1enplci9jb3JwdXMvYjg4ZjZmYjU0NzNhMDljNGQ3ZmE0NjU3YjYwNjEzMWU4ZGQyMTcxNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODgzOTg2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iODhmNmZiNTQ3M2EwOWM0ZDdmYTQ2NTdiNjA2MTMxZThkZDIxNzE1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjg5NDJjZGYyNjRmY2ZiYjI2YzA1OWUxOTRiYWQwZWU4MWJhMzJkYSBiL2Z1enplci9jb3JwdXMvYjg5NDJjZGYyNjRmY2ZiYjI2YzA1OWUxOTRiYWQwZWU4MWJhMzJkYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWQwNDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iODk0MmNkZjI2NGZjZmJiMjZjMDU5ZTE5NGJhZDBlZTgxYmEzMmRhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjhlZWI0Y2NlNzM3ZmQyMmZkOGE2ZmFkZDZkMGIwODVkM2E2Yjk0MSBiL2Z1enplci9jb3JwdXMvYjhlZWI0Y2NlNzM3ZmQyMmZkOGE2ZmFkZDZkMGIwODVkM2E2Yjk0MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjI2YmRmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iOGVlYjRjY2U3MzdmZDIyZmQ4YTZmYWRkNmQwYjA4NWQzYTZiOTQxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjkwNTA0NDNjZjg2MTBlMWVkN2Y4OTNiZGZkODFhMjJlZWQwNWU2YSBiL2Z1enplci9jb3JwdXMvYjkwNTA0NDNjZjg2MTBlMWVkN2Y4OTNiZGZkODFhMjJlZWQwNWU2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODU2YTZjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iOTA1MDQ0M2NmODYxMGUxZWQ3Zjg5M2JkZmQ4MWEyMmVlZDA1ZTZhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjkzMmJiMmFhMjU5ODg3OGRlNjc4NmM5MGJkMWY5MTk5MjkwYTE0OCBiL2Z1enplci9jb3JwdXMvYjkzMmJiMmFhMjU5ODg3OGRlNjc4NmM5MGJkMWY5MTk5MjkwYTE0OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjY1MmFhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iOTMyYmIyYWEyNTk4ODc4ZGU2Nzg2YzkwYmQxZjkxOTkyOTBhMTQ4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjkzNjk0YTE2OGI2ZGIzODk4NTZhODU2OWE4MDYyOTI0MmQ1NmI5NSBiL2Z1enplci9jb3JwdXMvYjkzNjk0YTE2OGI2ZGIzODk4NTZhODU2OWE4MDYyOTI0MmQ1NmI5NQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmNlMThjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iOTM2OTRhMTY4YjZkYjM4OTg1NmE4NTY5YTgwNjI5MjQyZDU2Yjk1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjk0MWM4YThhMDI5NmEwODJhOGMyYzMzYzNjOTM3MzVkNDg2ZmRiNCBiL2Z1enplci9jb3JwdXMvYjk0MWM4YThhMDI5NmEwODJhOGMyYzMzYzNjOTM3MzVkNDg2ZmRiNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDA2Y2U3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iOTQxYzhhOGEwMjk2YTA4MmE4YzJjMzNjM2M5MzczNWQ0ODZmZGI0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjk1MDQ3M2RjMDc0YjBhMWQ1ZTA0MWVmODQyOThjZWFkNzBmMDZmMyBiL2Z1enplci9jb3JwdXMvYjk1MDQ3M2RjMDc0YjBhMWQ1ZTA0MWVmODQyOThjZWFkNzBmMDZmMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWY0OWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iOTUwNDczZGMwNzRiMGExZDVlMDQxZWY4NDI5OGNlYWQ3MGYwNmYzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjk1YWUwNGZhYTg4OTI2YmJjZTkxZTBhMGQ2NDc1MTI1ZTdmODg0ZSBiL2Z1enplci9jb3JwdXMvYjk1YWUwNGZhYTg4OTI2YmJjZTkxZTBhMGQ2NDc1MTI1ZTdmODg0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTM2YjIwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iOTVhZTA0ZmFhODg5MjZiYmNlOTFlMGEwZDY0NzUxMjVlN2Y4ODRlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjk4YjllMzEwOWZkOTZlMWE5MzNmYzE4NWI0NzU1NWIxNjJmNmI0NCBiL2Z1enplci9jb3JwdXMvYjk4YjllMzEwOWZkOTZlMWE5MzNmYzE4NWI0NzU1NWIxNjJmNmI0NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWUwZDZkCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iOThiOWUzMTA5ZmQ5NmUxYTkzM2ZjMTg1YjQ3NTU1YjE2MmY2YjQ0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjk5NWFjYjM3NTRiZmQyMDQ5NzUxM2VmMWIxOTAzMzFlYTczZTIyNCBiL2Z1enplci9jb3JwdXMvYjk5NWFjYjM3NTRiZmQyMDQ5NzUxM2VmMWIxOTAzMzFlYTczZTIyNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2U3OTI4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iOTk1YWNiMzc1NGJmZDIwNDk3NTEzZWYxYjE5MDMzMWVhNzNlMjI0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjk5ZjQ1ZDAzMzYyZjNmZDlhOGY1NGY2YmJkYmQwZDU3MzBkZmMxYyBiL2Z1enplci9jb3JwdXMvYjk5ZjQ1ZDAzMzYyZjNmZDlhOGY1NGY2YmJkYmQwZDU3MzBkZmMxYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTk2NGUxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iOTlmNDVkMDMzNjJmM2ZkOWE4ZjU0ZjZiYmRiZDBkNTczMGRmYzFjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjk5ZmJjZjUzM2VjMWEwOWY2ZTMxMzRhZGI1OWMxMDFlODM1MWM5MyBiL2Z1enplci9jb3JwdXMvYjk5ZmJjZjUzM2VjMWEwOWY2ZTMxMzRhZGI1OWMxMDFlODM1MWM5MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjUzMmE1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iOTlmYmNmNTMzZWMxYTA5ZjZlMzEzNGFkYjU5YzEwMWU4MzUxYzkzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjlhZWUzOWRlMTlkYzEwMzlhODJhZWViYjViYTA4MTNhMDFmNGM5ZSBiL2Z1enplci9jb3JwdXMvYjlhZWUzOWRlMTlkYzEwMzlhODJhZWViYjViYTA4MTNhMDFmNGM5ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmVlZTc3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iOWFlZTM5ZGUxOWRjMTAzOWE4MmFlZWJiNWJhMDgxM2EwMWY0YzllCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjljYWFhMzk0ZTE1OWEzYjNiYjEwZTE3YTFkZDQzNDMwZDAxYjk3ZSBiL2Z1enplci9jb3JwdXMvYjljYWFhMzk0ZTE1OWEzYjNiYjEwZTE3YTFkZDQzNDMwZDAxYjk3ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDYxYmFlCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iOWNhYWEzOTRlMTU5YTNiM2JiMTBlMTdhMWRkNDM0MzBkMDFiOTdlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjlkYjhhY2Q1Y2I3YWFiN2U1YWJlNTBmYzg4MWNjOGFhYWNmMzdlYyBiL2Z1enplci9jb3JwdXMvYjlkYjhhY2Q1Y2I3YWFiN2U1YWJlNTBmYzg4MWNjOGFhYWNmMzdlYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjQxM2RjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iOWRiOGFjZDVjYjdhYWI3ZTVhYmU1MGZjODgxY2M4YWFhY2YzN2VjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjllNjk5MjJhNzlkNjFiMzAwZTY1OWRhNWQyZTJlMWExNGY0Y2VkZCBiL2Z1enplci9jb3JwdXMvYjllNjk5MjJhNzlkNjFiMzAwZTY1OWRhNWQyZTJlMWExNGY0Y2VkZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzI1MzEzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iOWU2OTkyMmE3OWQ2MWIzMDBlNjU5ZGE1ZDJlMmUxYTE0ZjRjZWRkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYjllZTQzMDJjMTc5M2Y5ZTg5MGRhMTIwNmY5YTNiZTMyYTk2MTU4OCBiL2Z1enplci9jb3JwdXMvYjllZTQzMDJjMTc5M2Y5ZTg5MGRhMTIwNmY5YTNiZTMyYTk2MTU4OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWNmMTkzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iOWVlNDMwMmMxNzkzZjllODkwZGExMjA2ZjlhM2JlMzJhOTYxNTg4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmEyZDIwM2U3YmU0ZTBjMDZkZWQ4NTM4ZWJlMDVhMjczM2Q1M2E0NiBiL2Z1enplci9jb3JwdXMvYmEyZDIwM2U3YmU0ZTBjMDZkZWQ4NTM4ZWJlMDVhMjczM2Q1M2E0NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2JiZGRhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iYTJkMjAzZTdiZTRlMGMwNmRlZDg1MzhlYmUwNWEyNzMzZDUzYTQ2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmEzYTgzMjVhNmJhMTRhZDZmYWU2MWY3OGYzNjhlNjI3Y2RjYWFmZSBiL2Z1enplci9jb3JwdXMvYmEzYTgzMjVhNmJhMTRhZDZmYWU2MWY3OGYzNjhlNjI3Y2RjYWFmZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzE2MDUyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iYTNhODMyNWE2YmExNGFkNmZhZTYxZjc4ZjM2OGU2MjdjZGNhYWZlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmE1NzE1ZTg0ZjNmMmY2OTQ3NGRmOTFmODJhMTgyZTk2NDc5N2EwNiBiL2Z1enplci9jb3JwdXMvYmE1NzE1ZTg0ZjNmMmY2OTQ3NGRmOTFmODJhMTgyZTk2NDc5N2EwNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODZhOTBmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iYTU3MTVlODRmM2YyZjY5NDc0ZGY5MWY4MmExODJlOTY0Nzk3YTA2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmE4MTUzMWI3ZjRmN2U0MGI1ZGE4NWVhYTBlNTU2MmQzZTgwMjJjNSBiL2Z1enplci9jb3JwdXMvYmE4MTUzMWI3ZjRmN2U0MGI1ZGE4NWVhYTBlNTU2MmQzZTgwMjJjNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWIzMjFiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iYTgxNTMxYjdmNGY3ZTQwYjVkYTg1ZWFhMGU1NTYyZDNlODAyMmM1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmE5YTdmMzk0ODYxMGI5ZWI5MWI3MGI2OWFjMzkzODU0NTgwZGZhNSBiL2Z1enplci9jb3JwdXMvYmE5YTdmMzk0ODYxMGI5ZWI5MWI3MGI2OWFjMzkzODU0NTgwZGZhNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDE2YmVlCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iYTlhN2YzOTQ4NjEwYjllYjkxYjcwYjY5YWMzOTM4NTQ1ODBkZmE1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmFhM2MzZGUxZTUyZDBhZjJlNWQwYTQ4ODc1NzMyYjE4OWM2MzY5OCBiL2Z1enplci9jb3JwdXMvYmFhM2MzZGUxZTUyZDBhZjJlNWQwYTQ4ODc1NzMyYjE4OWM2MzY5OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTA0NzJkCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iYWEzYzNkZTFlNTJkMGFmMmU1ZDBhNDg4NzU3MzJiMTg5YzYzNjk4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmFjY2U1YWU5MDkwYmFhMDU4MjhkYjU1NzVjOGUxMzNmZTdmYjhiNSBiL2Z1enplci9jb3JwdXMvYmFjY2U1YWU5MDkwYmFhMDU4MjhkYjU1NzVjOGUxMzNmZTdmYjhiNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGIxYjdiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iYWNjZTVhZTkwOTBiYWEwNTgyOGRiNTU3NWM4ZTEzM2ZlN2ZiOGI1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmFkZjYwM2Y3MzgzNWY0MmRmY2ViZjE3NDY0OTNlMjBmNTg3M2I5MCBiL2Z1enplci9jb3JwdXMvYmFkZjYwM2Y3MzgzNWY0MmRmY2ViZjE3NDY0OTNlMjBmNTg3M2I5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjE5NTIwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iYWRmNjAzZjczODM1ZjQyZGZjZWJmMTc0NjQ5M2UyMGY1ODczYjkwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmFlNTIwYjUxM2ZkMThkZDE5NjQ3Yjg3N2NjMDRjYzVjYTNjYmJlNiBiL2Z1enplci9jb3JwdXMvYmFlNTIwYjUxM2ZkMThkZDE5NjQ3Yjg3N2NjMDRjYzVjYTNjYmJlNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzdmMTkwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iYWU1MjBiNTEzZmQxOGRkMTk2NDdiODc3Y2MwNGNjNWNhM2NiYmU2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmFmNDNhOTU4OGMwMGFkYzFmNGZmMjA0MjI4MzZmMTIzYTgyYWFkNSBiL2Z1enplci9jb3JwdXMvYmFmNDNhOTU4OGMwMGFkYzFmNGZmMjA0MjI4MzZmMTIzYTgyYWFkNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDRiZmZhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iYWY0M2E5NTg4YzAwYWRjMWY0ZmYyMDQyMjgzNmYxMjNhODJhYWQ1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmIxMjU0MmZiYmNiYTBhNmY0NWJkODNmYjQ2OGViNjdmNWMzYTA2OCBiL2Z1enplci9jb3JwdXMvYmIxMjU0MmZiYmNiYTBhNmY0NWJkODNmYjQ2OGViNjdmNWMzYTA2OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODlkMjM4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iYjEyNTQyZmJiY2JhMGE2ZjQ1YmQ4M2ZiNDY4ZWI2N2Y1YzNhMDY4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmI1NDIxODkxYzBmZTYzZmM2OGNjMGM1YjEwYjM4OTY0YjY0ODYyMSBiL2Z1enplci9jb3JwdXMvYmI1NDIxODkxYzBmZTYzZmM2OGNjMGM1YjEwYjM4OTY0YjY0ODYyMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzJjOWMwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iYjU0MjE4OTFjMGZlNjNmYzY4Y2MwYzViMTBiMzg5NjRiNjQ4NjIxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmI4ZDg2NjAwMzU4NThhYzMzMjcyYTNlYmNhNWVjNzVkMWNlNDE1MiBiL2Z1enplci9jb3JwdXMvYmI4ZDg2NjAwMzU4NThhYzMzMjcyYTNlYmNhNWVjNzVkMWNlNDE1MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWJhN2ViCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iYjhkODY2MDAzNTg1OGFjMzMyNzJhM2ViY2E1ZWM3NWQxY2U0MTUyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmI5NGI2OTAzMDlmMGU1MWY0NThkZDY5NWY2YTg4NjBlOWRmMzc5YSBiL2Z1enplci9jb3JwdXMvYmI5NGI2OTAzMDlmMGU1MWY0NThkZDY5NWY2YTg4NjBlOWRmMzc5YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTlhMTc3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iYjk0YjY5MDMwOWYwZTUxZjQ1OGRkNjk1ZjZhODg2MGU5ZGYzNzlhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmI5NzA4ODA3NGI1ODQ5NDRkMGM5YWNjZWQ2MDE3MmQ0YWRmYzRlNSBiL2Z1enplci9jb3JwdXMvYmI5NzA4ODA3NGI1ODQ5NDRkMGM5YWNjZWQ2MDE3MmQ0YWRmYzRlNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTgzYjZhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iYjk3MDg4MDc0YjU4NDk0NGQwYzlhY2NlZDYwMTcyZDRhZGZjNGU1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmI5Y2U0MmM0OGM3YmMwN2ZiMDA1ODVmYjdhNGU5MzgyN2IwYzU2MSBiL2Z1enplci9jb3JwdXMvYmI5Y2U0MmM0OGM3YmMwN2ZiMDA1ODVmYjdhNGU5MzgyN2IwYzU2MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzlkZmI0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iYjljZTQyYzQ4YzdiYzA3ZmIwMDU4NWZiN2E0ZTkzODI3YjBjNTYxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmJiZDQ1YWY0NGQyZTQxY2QyMjBlMzc0ODNhZWZlZjZiMmY1Mjk2MCBiL2Z1enplci9jb3JwdXMvYmJiZDQ1YWY0NGQyZTQxY2QyMjBlMzc0ODNhZWZlZjZiMmY1Mjk2MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmRlNmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iYmJkNDVhZjQ0ZDJlNDFjZDIyMGUzNzQ4M2FlZmVmNmIyZjUyOTYwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmJkNDI2ZDBiY2NkYjY5ZTQ2YTc0ODNlNTYxNWNiNGFiOTRkNjUwZCBiL2Z1enplci9jb3JwdXMvYmJkNDI2ZDBiY2NkYjY5ZTQ2YTc0ODNlNTYxNWNiNGFiOTRkNjUwZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTZiMjc5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iYmQ0MjZkMGJjY2RiNjllNDZhNzQ4M2U1NjE1Y2I0YWI5NGQ2NTBkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmMwZWJjMzZlMjhiMGYwYzY4ODkwMjA0MGY4ZTFlZDhiMmFiZDgxMSBiL2Z1enplci9jb3JwdXMvYmMwZWJjMzZlMjhiMGYwYzY4ODkwMjA0MGY4ZTFlZDhiMmFiZDgxMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDAxOGNlCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iYzBlYmMzNmUyOGIwZjBjNjg4OTAyMDQwZjhlMWVkOGIyYWJkODExCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmMzOWE5MjBhMzhhYThiNjRlN2E2ODVmMjdiNzk1MDZhZDBkMjNmMSBiL2Z1enplci9jb3JwdXMvYmMzOWE5MjBhMzhhYThiNjRlN2E2ODVmMjdiNzk1MDZhZDBkMjNmMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2U2N2EwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iYzM5YTkyMGEzOGFhOGI2NGU3YTY4NWYyN2I3OTUwNmFkMGQyM2YxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmM0OTUyZDg3MjY2MmZiYzI5MWEyNzdiYTEzYWUyMmQ0YWNlOTMwZCBiL2Z1enplci9jb3JwdXMvYmM0OTUyZDg3MjY2MmZiYzI5MWEyNzdiYTEzYWUyMmQ0YWNlOTMwZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGMxMjA3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iYzQ5NTJkODcyNjYyZmJjMjkxYTI3N2JhMTNhZTIyZDRhY2U5MzBkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmM3ODI2ZDU4MGQ0NDAyODNkZmY0MjlhYzljOTkwNTcxOGJmNzVkNiBiL2Z1enplci9jb3JwdXMvYmM3ODI2ZDU4MGQ0NDAyODNkZmY0MjlhYzljOTkwNTcxOGJmNzVkNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjEzZjI5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iYzc4MjZkNTgwZDQ0MDI4M2RmZjQyOWFjOWM5OTA1NzE4YmY3NWQ2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmM5NDI2MjgyZTMyMzEzYTljZDBhM2VjZTZjYzcxNWE1ZmZkMDZmZiBiL2Z1enplci9jb3JwdXMvYmM5NDI2MjgyZTMyMzEzYTljZDBhM2VjZTZjYzcxNWE1ZmZkMDZmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWUwYTg0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iYzk0MjYyODJlMzIzMTNhOWNkMGEzZWNlNmNjNzE1YTVmZmQwNmZmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmM5Y2Q3Mjg3YWU1OWJhMjJjNjNiNTEyMThhMGE5MWFlOTA4ODM4YSBiL2Z1enplci9jb3JwdXMvYmM5Y2Q3Mjg3YWU1OWJhMjJjNjNiNTEyMThhMGE5MWFlOTA4ODM4YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjllNjY2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iYzljZDcyODdhZTU5YmEyMmM2M2I1MTIxOGEwYTkxYWU5MDg4MzhhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmQ1YWIzODI4Y2JhYzIxNmY1ZDgzMjgwZDk3ODljZjQ3NjlhZDhmZiBiL2Z1enplci9jb3JwdXMvYmQ1YWIzODI4Y2JhYzIxNmY1ZDgzMjgwZDk3ODljZjQ3NjlhZDhmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWI0ZjI2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iZDVhYjM4MjhjYmFjMjE2ZjVkODMyODBkOTc4OWNmNDc2OWFkOGZmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmQ1ZTE1ODIyMDRiMDI4OTljNmQwZGM3Y2YwODI2ZDBiYjcyNGIzYyBiL2Z1enplci9jb3JwdXMvYmQ1ZTE1ODIyMDRiMDI4OTljNmQwZGM3Y2YwODI2ZDBiYjcyNGIzYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGIxOWFlCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iZDVlMTU4MjIwNGIwMjg5OWM2ZDBkYzdjZjA4MjZkMGJiNzI0YjNjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmQ2MzVlNmQ3YzllYmM2MjkzNzZhNjJlNmFmMWFhMDE0OGFmYzU2NiBiL2Z1enplci9jb3JwdXMvYmQ2MzVlNmQ3YzllYmM2MjkzNzZhNjJlNmFmMWFhMDE0OGFmYzU2NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzU2NWYxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iZDYzNWU2ZDdjOWViYzYyOTM3NmE2MmU2YWYxYWEwMTQ4YWZjNTY2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmQ3MmM0NTlkNWEwZWZlN2U4MmJmZTRmMWQzMmFjYTY2ODdmMmZlNSBiL2Z1enplci9jb3JwdXMvYmQ3MmM0NTlkNWEwZWZlN2U4MmJmZTRmMWQzMmFjYTY2ODdmMmZlNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTczNTM5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iZDcyYzQ1OWQ1YTBlZmU3ZTgyYmZlNGYxZDMyYWNhNjY4N2YyZmU1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmQ5ZTdmNDZlNmM1YjExNDJlYzljMDA5ZTVhODNiNTIzMjE1ZTIyZCBiL2Z1enplci9jb3JwdXMvYmQ5ZTdmNDZlNmM1YjExNDJlYzljMDA5ZTVhODNiNTIzMjE1ZTIyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWU3YzJlCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iZDllN2Y0NmU2YzViMTE0MmVjOWMwMDllNWE4M2I1MjMyMTVlMjJkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmRlYTNhY2M3MjZlM2JkNmQ5NzRmZWZiODc4MTk3ZDViZDdhNTQ4NSBiL2Z1enplci9jb3JwdXMvYmRlYTNhY2M3MjZlM2JkNmQ5NzRmZWZiODc4MTk3ZDViZDdhNTQ4NQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjQzOWIxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iZGVhM2FjYzcyNmUzYmQ2ZDk3NGZlZmI4NzgxOTdkNWJkN2E1NDg1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmUwOTU5MGNjNDFkYWFlN2VmMDI3N2E3NmMyMGJjNGZkOGIzNmE1NCBiL2Z1enplci9jb3JwdXMvYmUwOTU5MGNjNDFkYWFlN2VmMDI3N2E3NmMyMGJjNGZkOGIzNmE1NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWU2YTY3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iZTA5NTkwY2M0MWRhYWU3ZWYwMjc3YTc2YzIwYmM0ZmQ4YjM2YTU0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmUyM2E1OWE0NWZlMTI2YjY0MjM2MmM2ODI5OGZjNjNhYWYxM2JmOSBiL2Z1enplci9jb3JwdXMvYmUyM2E1OWE0NWZlMTI2YjY0MjM2MmM2ODI5OGZjNjNhYWYxM2JmOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjVhOTZmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iZTIzYTU5YTQ1ZmUxMjZiNjQyMzYyYzY4Mjk4ZmM2M2FhZjEzYmY5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmUyNjk5ZjE5OGQ2OGE4MTdkOWIwNWZhMWRiMzVjYWM3NzE0YTViYSBiL2Z1enplci9jb3JwdXMvYmUyNjk5ZjE5OGQ2OGE4MTdkOWIwNWZhMWRiMzVjYWM3NzE0YTViYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTgyNzU4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iZTI2OTlmMTk4ZDY4YTgxN2Q5YjA1ZmExZGIzNWNhYzc3MTRhNWJhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmUyZDc3NTFjYzIwZmVjM2Y0ZTZhZTQ2ZmM4M2FiNGUzMjYzODI5OCBiL2Z1enplci9jb3JwdXMvYmUyZDc3NTFjYzIwZmVjM2Y0ZTZhZTQ2ZmM4M2FiNGUzMjYzODI5OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWFmNmZiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iZTJkNzc1MWNjMjBmZWMzZjRlNmFlNDZmYzgzYWI0ZTMyNjM4Mjk4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmU1ZjY0ZjdjZjQ5ZTg1MjlkOWRmYmRiMzJiYzRiOGE1NGMxMWVlNSBiL2Z1enplci9jb3JwdXMvYmU1ZjY0ZjdjZjQ5ZTg1MjlkOWRmYmRiMzJiYzRiOGE1NGMxMWVlNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODhkNThjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iZTVmNjRmN2NmNDllODUyOWQ5ZGZiZGIzMmJjNGI4YTU0YzExZWU1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmVhZDdmZGIyM2VlOTkyY2YzNGVjNjE4YjcwNTZkMWJlMzFlYWRkYiBiL2Z1enplci9jb3JwdXMvYmVhZDdmZGIyM2VlOTkyY2YzNGVjNjE4YjcwNTZkMWJlMzFlYWRkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWE2Njk2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iZWFkN2ZkYjIzZWU5OTJjZjM0ZWM2MThiNzA1NmQxYmUzMWVhZGRiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmVhZjhlNjBlZDU1ODE4ZjM0MGZkZTA0MGE4MWMwMDMzNDU0NmZmOSBiL2Z1enplci9jb3JwdXMvYmVhZjhlNjBlZDU1ODE4ZjM0MGZkZTA0MGE4MWMwMDMzNDU0NmZmOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjI4YjE5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iZWFmOGU2MGVkNTU4MThmMzQwZmRlMDQwYTgxYzAwMzM0NTQ2ZmY5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmVlMDlkNWRkYWNjZTY2YTVkNTVjOTlkNmRjZDcxNjY2NDkzOTFjNCBiL2Z1enplci9jb3JwdXMvYmVlMDlkNWRkYWNjZTY2YTVkNTVjOTlkNmRjZDcxNjY2NDkzOTFjNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzcwNTdiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iZWUwOWQ1ZGRhY2NlNjZhNWQ1NWM5OWQ2ZGNkNzE2NjY0OTM5MWM0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmYyNWVkYTMzYTI3MTdlZGZmZTg1MjMyZDg3MzYxM2U0MTQyYWE2NCBiL2Z1enplci9jb3JwdXMvYmYyNWVkYTMzYTI3MTdlZGZmZTg1MjMyZDg3MzYxM2U0MTQyYWE2NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOThlMGJiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iZjI1ZWRhMzNhMjcxN2VkZmZlODUyMzJkODczNjEzZTQxNDJhYTY0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmYyOGQzYzY2NTYyYjcxN2I2MDYwMWU2OGU3ZmQ4YjRmMjY2ZTUyOCBiL2Z1enplci9jb3JwdXMvYmYyOGQzYzY2NTYyYjcxN2I2MDYwMWU2OGU3ZmQ4YjRmMjY2ZTUyOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWRhMTRkCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iZjI4ZDNjNjY1NjJiNzE3YjYwNjAxZTY4ZTdmZDhiNGYyNjZlNTI4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmY0Y2ExMGViYzFlOWRhYWMwNTg1ZDQ5ZjE2YzYzMmQ1ZGFkYjUxNSBiL2Z1enplci9jb3JwdXMvYmY0Y2ExMGViYzFlOWRhYWMwNTg1ZDQ5ZjE2YzYzMmQ1ZGFkYjUxNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODdiZDJiCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iZjRjYTEwZWJjMWU5ZGFhYzA1ODVkNDlmMTZjNjMyZDVkYWRiNTE1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmY1YzA4OTFlYWE3NTdmMTRmZmNkNTk3NzE2OGQ4MTRlOWUxOGMwNiBiL2Z1enplci9jb3JwdXMvYmY1YzA4OTFlYWE3NTdmMTRmZmNkNTk3NzE2OGQ4MTRlOWUxOGMwNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjQzYjFlCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iZjVjMDg5MWVhYTc1N2YxNGZmY2Q1OTc3MTY4ZDgxNGU5ZTE4YzA2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmY2YTgzMjQwM2EyMjU0OGFjNTg4ZGJmN2NkMzQwNDU1ZjI2YjRjZCBiL2Z1enplci9jb3JwdXMvYmY2YTgzMjQwM2EyMjU0OGFjNTg4ZGJmN2NkMzQwNDU1ZjI2YjRjZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2I0MTc5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iZjZhODMyNDAzYTIyNTQ4YWM1ODhkYmY3Y2QzNDA0NTVmMjZiNGNkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmY5YTlhMDg5ZGMzMTU1ZjViZDczZWNiMzg0MmE4YzVhNGU4OTYyOCBiL2Z1enplci9jb3JwdXMvYmY5YTlhMDg5ZGMzMTU1ZjViZDczZWNiMzg0MmE4YzVhNGU4OTYyOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjc0MDFhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iZjlhOWEwODlkYzMxNTVmNWJkNzNlY2IzODQyYThjNWE0ZTg5NjI4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmY5YmRjNWUzN2UxMTkxYzEwMDZjYzE3ZWRiOWMyNDkxZTEzNjc5NyBiL2Z1enplci9jb3JwdXMvYmY5YmRjNWUzN2UxMTkxYzEwMDZjYzE3ZWRiOWMyNDkxZTEzNjc5NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWEzZGNhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iZjliZGM1ZTM3ZTExOTFjMTAwNmNjMTdlZGI5YzI0OTFlMTM2Nzk3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmZiYTc5MWQ2ZGUyY2I2NGEyZmE1Zjg4YWRjMGI5MjlmOTQzNzQ3YSBiL2Z1enplci9jb3JwdXMvYmZiYTc5MWQ2ZGUyY2I2NGEyZmE1Zjg4YWRjMGI5MjlmOTQzNzQ3YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTdhNTliCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iZmJhNzkxZDZkZTJjYjY0YTJmYTVmODhhZGMwYjkyOWY5NDM3NDdhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmZjZDlkNmMxZDhhZjU3Nzk2YzQ5NmU3NDc0ZDIzMDY4M2Q1N2FhMCBiL2Z1enplci9jb3JwdXMvYmZjZDlkNmMxZDhhZjU3Nzk2YzQ5NmU3NDc0ZDIzMDY4M2Q1N2FhMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWM3YzJhCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iZmNkOWQ2YzFkOGFmNTc3OTZjNDk2ZTc0NzRkMjMwNjgzZDU3YWEwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmZlNjg0YWUyODAzZjZkYmZhYmY1MTY1N2ZiODE2ODdlYzBhZjI5ZSBiL2Z1enplci9jb3JwdXMvYmZlNjg0YWUyODAzZjZkYmZhYmY1MTY1N2ZiODE2ODdlYzBhZjI5ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWJhOTliCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iZmU2ODRhZTI4MDNmNmRiZmFiZjUxNjU3ZmI4MTY4N2VjMGFmMjllCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYmZlNzFlODQxNWM5NWM5Njk3OTg5ZjIyNGJjMWY3YWI5NGY0MzE2YSBiL2Z1enplci9jb3JwdXMvYmZlNzFlODQxNWM5NWM5Njk3OTg5ZjIyNGJjMWY3YWI5NGY0MzE2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTEyODU0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9iZmU3MWU4NDE1Yzk1Yzk2OTc5ODlmMjI0YmMxZjdhYjk0ZjQzMTZhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYzAzNmRlM2IxMmVlYmQwODcxOWU4M2JhMDE1ZDdmYzgxZTZjOTU2YSBiL2Z1enplci9jb3JwdXMvYzAzNmRlM2IxMmVlYmQwODcxOWU4M2JhMDE1ZDdmYzgxZTZjOTU2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWFlYjcwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9jMDM2ZGUzYjEyZWViZDA4NzE5ZTgzYmEwMTVkN2ZjODFlNmM5NTZhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYzA3ZjAwNzFlYjYyZDk2Y2Q2MzQwMjg1M2QwN2VmYjViNjU1ZmQwYSBiL2Z1enplci9jb3JwdXMvYzA3ZjAwNzFlYjYyZDk2Y2Q2MzQwMjg1M2QwN2VmYjViNjU1ZmQwYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzQ1NTQyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9jMDdmMDA3MWViNjJkOTZjZDYzNDAyODUzZDA3ZWZiNWI2NTVmZDBhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYzA5ZDE3M2Y5YWUwNjhhNDJkYTAyOGU2MDczMmJmMGE3MGZlMGZiZCBiL2Z1enplci9jb3JwdXMvYzA5ZDE3M2Y5YWUwNjhhNDJkYTAyOGU2MDczMmJmMGE3MGZlMGZiZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmRlMmRjCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9jMDlkMTczZjlhZTA2OGE0MmRhMDI4ZTYwNzMyYmYwYTcwZmUwZmJkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYzBmNDY1MDg4ZWM4M2Q3YzE5ODg1MGU3ZmUyMzhiZWZmNTc1ODU4OCBiL2Z1enplci9jb3JwdXMvYzBmNDY1MDg4ZWM4M2Q3YzE5ODg1MGU3ZmUyMzhiZWZmNTc1ODU4OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzMxMDAxCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9jMGY0NjUwODhlYzgzZDdjMTk4ODUwZTdmZTIzOGJlZmY1NzU4NTg4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYzEwNjlhNjVmNDU3NDM3YWZmZTFjZDA5MDBjYTExOTIxMWRiMmZlYiBiL2Z1enplci9jb3JwdXMvYzEwNjlhNjVmNDU3NDM3YWZmZTFjZDA5MDBjYTExOTIxMWRiMmZlYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Zjg4ZDIyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9jMTA2OWE2NWY0NTc0MzdhZmZlMWNkMDkwMGNhMTE5MjExZGIyZmViCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYzExMjM3NDI1OTAxZmNjMjUxNTRkZWRmZjk2ZmZlZDMxOTJjZWFkZiBiL2Z1enplci9jb3JwdXMvYzExMjM3NDI1OTAxZmNjMjUxNTRkZWRmZjk2ZmZlZDMxOTJjZWFkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDI4Y2EyCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9jMTEyMzc0MjU5MDFmY2MyNTE1NGRlZGZmOTZmZmVkMzE5MmNlYWRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYzEyYjkxZWUzYTY4ZjgyOTY1MzVjNTYxODA5ZDA2N2NjMDk1MjdlMyBiL2Z1enplci9jb3JwdXMvYzEyYjkxZWUzYTY4ZjgyOTY1MzVjNTYxODA5ZDA2N2NjMDk1MjdlMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTE5ZDdmCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9jMTJiOTFlZTNhNjhmODI5NjUzNWM1NjE4MDlkMDY3Y2MwOTUyN2UzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYzE0MTFiNjMwYmQ3ZTNhYTU5NmIzYTQwZTRlOTQ2YWJjNGFmODhjMSBiL2Z1enplci9jb3JwdXMvYzE0MTFiNjMwYmQ3ZTNhYTU5NmIzYTQwZTRlOTQ2YWJjNGFmODhjMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmFlNDE0Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9jMTQxMWI2MzBiZDdlM2FhNTk2YjNhNDBlNGU5NDZhYmM0YWY4OGMxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYzE2ZDNjOGFmYmMzY2E4MzYyNDY4M2Q4YzdlMTQ5MmI1YzkwN2EzMSBiL2Z1enplci9jb3JwdXMvYzE2ZDNjOGFmYmMzY2E4MzYyNDY4M2Q4YzdlMTQ5MmI1YzkwN2EzMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGVkODNlCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9jMTZkM2M4YWZiYzNjYTgzNjI0NjgzZDhjN2UxNDkyYjVjOTA3YTMxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYzFlMzkwN2VlMDNiNzY5NzQ5ZjE5YWIwMGNiMjhiZjMzZTk5YWIwOSBiL2Z1enplci9jb3JwdXMvYzFlMzkwN2VlMDNiNzY5NzQ5ZjE5YWIwMGNiMjhiZjMzZTk5YWIwOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTQ3OWQzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9jMWUzOTA3ZWUwM2I3Njk3NDlmMTlhYjAwY2IyOGJmMzNlOTlhYjA5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYzFlODlhYTNlNzNmZTkwOWY2MTYxN2JkYmY0Mzc2MzU5N2FkNmZjMyBiL2Z1enplci9jb3JwdXMvYzFlODlhYTNlNzNmZTkwOWY2MTYxN2JkYmY0Mzc2MzU5N2FkNmZjMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDcyMzU4Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9jMWU4OWFhM2U3M2ZlOTA5ZjYxNjE3YmRiZjQzNzYzNTk3YWQ2ZmMzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYzFlYjQ1OWNkMDNkMGE0ZDAzZTMxMTA2NTUxYzY5Y2E5NzEyNGI1NSBiL2Z1enplci9jb3JwdXMvYzFlYjQ1OWNkMDNkMGE0ZDAzZTMxMTA2NTUxYzY5Y2E5NzEyNGI1NQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWVmNWI5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9jMWViNDU5Y2QwM2QwYTRkMDNlMzExMDY1NTFjNjljYTk3MTI0YjU1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYzFmMzg1OTU1OTExMmY2YzMyYzU4ZDMyMjMyZmRkZmRiNTI2YjkyMiBiL2Z1enplci9jb3JwdXMvYzFmMzg1OTU1OTExMmY2YzMyYzU4ZDMyMjMyZmRkZmRiNTI2YjkyMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTIzNmU1Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9jMWYzODU5NTU5MTEyZjZjMzJjNThkMzIyMzJmZGRmZGI1MjZiOTIyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYzFmNTJjMjFkZTMwMGI1M2EyZTBjOGQ5ZDY1NDVlMDkwNTY5OGZhMSBiL2Z1enplci9jb3JwdXMvYzFmNTJjMjFkZTMwMGI1M2EyZTBjOGQ5ZDY1NDVlMDkwNTY5OGZhMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjMxODI5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9jMWY1MmMyMWRlMzAwYjUzYTJlMGM4ZDlkNjU0NWUwOTA1Njk4ZmExCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYzIwM2RiMDU1YTUwMDY4MWE5MjMzMTNjMmI5MmJjNzllNTc1NTI2ZiBiL2Z1enplci9jb3JwdXMvYzIwM2RiMDU1YTUwMDY4MWE5MjMzMTNjMmI5MmJjNzllNTc1NTI2ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTUyYjgzCi0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9jMjAzZGIwNTVhNTAwNjgxYTkyMzMxM2MyYjkyYmM3OWU1NzU1MjZmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Z1enplci9jb3JwdXMvYzIyNzk0ZjlmNDJmNjI4MGRiNzc5YmM2M2E5ZWJlOWM0M2JiY2UwNSBiL2Z1enplci9jb3JwdXMvYzIyNzk0ZjlmNDJmNjI4MGRiNzc5YmM2M2E5ZWJlOWM0M2JiY2UwNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDFhY2E2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2NvcnB1cy9jMjI3OTRmOWY0MmY2MjgwZGI3NzliYzYzYTllYmU5YzQzYmJjZTA1CkBAIC0wLDAgKzEgQEAKK3NfMGkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2MyNzU5YTUwMzQyN2Q0ZmZkOGUxNzIzYWZlNTZkMmJkYmExMDBkYzQgYi9mdXp6ZXIvY29ycHVzL2MyNzU5YTUwMzQyN2Q0ZmZkOGUxNzIzYWZlNTZkMmJkYmExMDBkYzQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJkYmJlMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzI3NTlhNTAzNDI3ZDRmZmQ4ZTE3MjNhZmU1NmQyYmRiYTEwMGRjNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2MyNzhkZmJhOWJmZDhhM2UwNDk1YTVmNzJlMzUwMTc0ZTExOTI4ODggYi9mdXp6ZXIvY29ycHVzL2MyNzhkZmJhOWJmZDhhM2UwNDk1YTVmNzJlMzUwMTc0ZTExOTI4ODgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcwZjQxZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzI3OGRmYmE5YmZkOGEzZTA0OTVhNWY3MmUzNTAxNzRlMTE5Mjg4OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2MyODUxMjdhMWEwYjgwOWFhMzEwMmUzMWEwOWM2MmM0MmMwZDc2MzEgYi9mdXp6ZXIvY29ycHVzL2MyODUxMjdhMWEwYjgwOWFhMzEwMmUzMWEwOWM2MmM0MmMwZDc2MzEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFlOGFlZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzI4NTEyN2ExYTBiODA5YWEzMTAyZTMxYTA5YzYyYzQyYzBkNzYzMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2MyOGU3Y2QxZDJiYjE4ZDY4NmRhMjBiOGY0MzVjNzZhMmU2NzNhMjYgYi9mdXp6ZXIvY29ycHVzL2MyOGU3Y2QxZDJiYjE4ZDY4NmRhMjBiOGY0MzVjNzZhMmU2NzNhMjYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcyNGE4MAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzI4ZTdjZDFkMmJiMThkNjg2ZGEyMGI4ZjQzNWM3NmEyZTY3M2EyNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2MyOGY0ZmVkNDM4YmZhZmU3MzA2OTY2YzM1Y2I3N2E2YmFiM2Y5MWIgYi9mdXp6ZXIvY29ycHVzL2MyOGY0ZmVkNDM4YmZhZmU3MzA2OTY2YzM1Y2I3N2E2YmFiM2Y5MWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMxOTk5OAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzI4ZjRmZWQ0MzhiZmFmZTczMDY5NjZjMzVjYjc3YTZiYWIzZjkxYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2MyOTkyOTgwMjgzYTUyYmU3MDExM2ZiN2YxMjc3ZjllMjczN2Y3ZDIgYi9mdXp6ZXIvY29ycHVzL2MyOTkyOTgwMjgzYTUyYmU3MDExM2ZiN2YxMjc3ZjllMjczN2Y3ZDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUwZDE4NAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzI5OTI5ODAyODNhNTJiZTcwMTEzZmI3ZjEyNzdmOWUyNzM3ZjdkMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2MyYTM3MjI1MDVkN2ZjMWUxNzQzZTNiOGMzZGE2NjRiOWU0ZmZkZmEgYi9mdXp6ZXIvY29ycHVzL2MyYTM3MjI1MDVkN2ZjMWUxNzQzZTNiOGMzZGE2NjRiOWU0ZmZkZmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2ZTA1NAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzJhMzcyMjUwNWQ3ZmMxZTE3NDNlM2I4YzNkYTY2NGI5ZTRmZmRmYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2MyYjdhYThlNTA2MTI1NDdlMjRkYWU1NjBjYjRjZmM4NjUzZTY0ZTggYi9mdXp6ZXIvY29ycHVzL2MyYjdhYThlNTA2MTI1NDdlMjRkYWU1NjBjYjRjZmM4NjUzZTY0ZTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgyODAxOQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzJiN2FhOGU1MDYxMjU0N2UyNGRhZTU2MGNiNGNmYzg2NTNlNjRlOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2MyY2VhNThmMjM4ZjliZjhjMTFhOTkyYTM3MDk5OGJkNDYzZTAwYjYgYi9mdXp6ZXIvY29ycHVzL2MyY2VhNThmMjM4ZjliZjhjMTFhOTkyYTM3MDk5OGJkNDYzZTAwYjYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VlYTk4YgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzJjZWE1OGYyMzhmOWJmOGMxMWE5OTJhMzcwOTk4YmQ0NjNlMDBiNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2MyZGFlZDlhMTY1MjBlZjE1YTdmZWEyNmE1MjgxMzg2ZmFjMjZjMDkgYi9mdXp6ZXIvY29ycHVzL2MyZGFlZDlhMTY1MjBlZjE1YTdmZWEyNmE1MjgxMzg2ZmFjMjZjMDkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1MzA2OQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzJkYWVkOWExNjUyMGVmMTVhN2ZlYTI2YTUyODEzODZmYWMyNmMwOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2MyZWVlZWNmODFkYzliNzA0MTQ5NTAwOWIxMjExZjZhM2NmNjMzMDAgYi9mdXp6ZXIvY29ycHVzL2MyZWVlZWNmODFkYzliNzA0MTQ5NTAwOWIxMjExZjZhM2NmNjMzMDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzczOTM4YwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzJlZWVlY2Y4MWRjOWI3MDQxNDk1MDA5YjEyMTFmNmEzY2Y2MzMwMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2MzMjBlYmNlNjQxNjQ0OTkyNDNiY2FkZjdkM2ZiZGMwNDg2NThlMzcgYi9mdXp6ZXIvY29ycHVzL2MzMjBlYmNlNjQxNjQ0OTkyNDNiY2FkZjdkM2ZiZGMwNDg2NThlMzcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU5NjA1YwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzMyMGViY2U2NDE2NDQ5OTI0M2JjYWRmN2QzZmJkYzA0ODY1OGUzNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2MzNTAyYzBjMTQ5YzJkODE1Y2FlYjU4ODdiNTA1YTAwYmQ4Y2MzZTEgYi9mdXp6ZXIvY29ycHVzL2MzNTAyYzBjMTQ5YzJkODE1Y2FlYjU4ODdiNTA1YTAwYmQ4Y2MzZTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgxYzJkYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzM1MDJjMGMxNDljMmQ4MTVjYWViNTg4N2I1MDVhMDBiZDhjYzNlMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2MzNWRiMGUwM2NmNWNlYjk4MzI5OGVjZjhlN2Y0M2Y2NTFiNGIwNTggYi9mdXp6ZXIvY29ycHVzL2MzNWRiMGUwM2NmNWNlYjk4MzI5OGVjZjhlN2Y0M2Y2NTFiNGIwNTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNhMzEwNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzM1ZGIwZTAzY2Y1Y2ViOTgzMjk4ZWNmOGU3ZjQzZjY1MWI0YjA1OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2MzNzNlMjA5NzFjOTFhZjk0YzZhZDI1OGYwMjYxZmMyMTAzN2EzYWYgYi9mdXp6ZXIvY29ycHVzL2MzNzNlMjA5NzFjOTFhZjk0YzZhZDI1OGYwMjYxZmMyMTAzN2EzYWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZjMTBmZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzM3M2UyMDk3MWM5MWFmOTRjNmFkMjU4ZjAyNjFmYzIxMDM3YTNhZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2MzN2ZkZGEwYTAxYmM2YmRiMjg1MGE3NTBlZWUzNzMzMzhlNWM0MGMgYi9mdXp6ZXIvY29ycHVzL2MzN2ZkZGEwYTAxYmM2YmRiMjg1MGE3NTBlZWUzNzMzMzhlNWM0MGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA3MWNhYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzM3ZmRkYTBhMDFiYzZiZGIyODUwYTc1MGVlZTM3MzMzOGU1YzQwYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2MzOWQwOGZhZjFhMTQxYzVjN2EzY2IyYWVmYTYyMzMzOWIyNTc5YjggYi9mdXp6ZXIvY29ycHVzL2MzOWQwOGZhZjFhMTQxYzVjN2EzY2IyYWVmYTYyMzMzOWIyNTc5YjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M4NjE3YgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzM5ZDA4ZmFmMWExNDFjNWM3YTNjYjJhZWZhNjIzMzM5YjI1NzliOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2MzOWY4NzE1NmNmYzM1ZWQ0NDQwNTA4Y2FhMDVjNGMzZjk1NmJjNTkgYi9mdXp6ZXIvY29ycHVzL2MzOWY4NzE1NmNmYzM1ZWQ0NDQwNTA4Y2FhMDVjNGMzZjk1NmJjNTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRjMDkwMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzM5Zjg3MTU2Y2ZjMzVlZDQ0NDA1MDhjYWEwNWM0YzNmOTU2YmM1OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2MzY2NhMTJiYjk3NjlhOGE0OWJkYTU4ZTNmMTExYTcwNjFmZWRiM2MgYi9mdXp6ZXIvY29ycHVzL2MzY2NhMTJiYjk3NjlhOGE0OWJkYTU4ZTNmMTExYTcwNjFmZWRiM2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQxNGFlMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzNjY2ExMmJiOTc2OWE4YTQ5YmRhNThlM2YxMTFhNzA2MWZlZGIzYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2MzZjEyZDdmMzVkN2QxN2ExYzEwNTU0N2VkODgwMGZmNGE3Njk0OTAgYi9mdXp6ZXIvY29ycHVzL2MzZjEyZDdmMzVkN2QxN2ExYzEwNTU0N2VkODgwMGZmNGE3Njk0OTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTllYWM3YQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzNmMTJkN2YzNWQ3ZDE3YTFjMTA1NTQ3ZWQ4ODAwZmY0YTc2OTQ5MApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M0MDZkM2JiN2U2YjVhZDQ1ZWE1ZWNmNGRhZGZlYzM5YjZhYjgzZGIgYi9mdXp6ZXIvY29ycHVzL2M0MDZkM2JiN2U2YjVhZDQ1ZWE1ZWNmNGRhZGZlYzM5YjZhYjgzZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVhOWEzNgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzQwNmQzYmI3ZTZiNWFkNDVlYTVlY2Y0ZGFkZmVjMzliNmFiODNkYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M0OTY4Y2E1MGRjZTdlYWZkODI3YjcwNWM4NmEzYzhjMjQzYzMxZDkgYi9mdXp6ZXIvY29ycHVzL2M0OTY4Y2E1MGRjZTdlYWZkODI3YjcwNWM4NmEzYzhjMjQzYzMxZDkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZmNGM3NwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzQ5NjhjYTUwZGNlN2VhZmQ4MjdiNzA1Yzg2YTNjOGMyNDNjMzFkOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M0YTE5NDEwOGZiN2FiNjE0OTYwYmFhNTI3ZWU2Mjg1MzdkOTVjOWMgYi9mdXp6ZXIvY29ycHVzL2M0YTE5NDEwOGZiN2FiNjE0OTYwYmFhNTI3ZWU2Mjg1MzdkOTVjOWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBmNzU0OAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzRhMTk0MTA4ZmI3YWI2MTQ5NjBiYWE1MjdlZTYyODUzN2Q5NWM5YwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M0YjAzN2JmMzZiOGE4ZTMyOWUxMDc2NTQ1ZjEzY2NjMDFmMjZjY2UgYi9mdXp6ZXIvY29ycHVzL2M0YjAzN2JmMzZiOGE4ZTMyOWUxMDc2NTQ1ZjEzY2NjMDFmMjZjY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMzMmIyZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzRiMDM3YmYzNmI4YThlMzI5ZTEwNzY1NDVmMTNjY2MwMWYyNmNjZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M0YzZhNjIyOTEyNTJhYmNkMjI4Y2U5N2NiZTQzOGVlYTAyNmVhNGMgYi9mdXp6ZXIvY29ycHVzL2M0YzZhNjIyOTEyNTJhYmNkMjI4Y2U5N2NiZTQzOGVlYTAyNmVhNGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE4NGE0ZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzRjNmE2MjI5MTI1MmFiY2QyMjhjZTk3Y2JlNDM4ZWVhMDI2ZWE0YwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M0Yzk5MTJlYTZiMjM3NGMxM2MwYWNlNjk3NmYyZjVmNjk5ZmZjNDMgYi9mdXp6ZXIvY29ycHVzL2M0Yzk5MTJlYTZiMjM3NGMxM2MwYWNlNjk3NmYyZjVmNjk5ZmZjNDMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE0MjAyMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzRjOTkxMmVhNmIyMzc0YzEzYzBhY2U2OTc2ZjJmNWY2OTlmZmM0MwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M0Y2MxN2NlOTIwOGQxZjJkNTBkNzRlMDZmYzI2ZGEyNmM5NDhhODAgYi9mdXp6ZXIvY29ycHVzL2M0Y2MxN2NlOTIwOGQxZjJkNTBkNzRlMDZmYzI2ZGEyNmM5NDhhODAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFkNjYzNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzRjYzE3Y2U5MjA4ZDFmMmQ1MGQ3NGUwNmZjMjZkYTI2Yzk0OGE4MApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M0ZTNiMjg1NzJhM2FmYTdhMzc5ZjMyNjdjZGFiNjQ1NjE5NDhlZmMgYi9mdXp6ZXIvY29ycHVzL2M0ZTNiMjg1NzJhM2FmYTdhMzc5ZjMyNjdjZGFiNjQ1NjE5NDhlZmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U1MTg4NAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzRlM2IyODU3MmEzYWZhN2EzNzlmMzI2N2NkYWI2NDU2MTk0OGVmYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M0ZjRjOGM4YTcyYjg3ODZmMDM2NDYzZWZiZWE4Y2Y5MzM2MjQwMmEgYi9mdXp6ZXIvY29ycHVzL2M0ZjRjOGM4YTcyYjg3ODZmMDM2NDYzZWZiZWE4Y2Y5MzM2MjQwMmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMyYzNhNgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzRmNGM4YzhhNzJiODc4NmYwMzY0NjNlZmJlYThjZjkzMzYyNDAyYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M1NjI1M2FlNDgxNTE4YzExODM2MmUzMmJhY2I4ZTU4OTU4M2VkNDUgYi9mdXp6ZXIvY29ycHVzL2M1NjI1M2FlNDgxNTE4YzExODM2MmUzMmJhY2I4ZTU4OTU4M2VkNDUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZhMjk4NAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzU2MjUzYWU0ODE1MThjMTE4MzYyZTMyYmFjYjhlNTg5NTgzZWQ0NQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M1NjY0NzI0ZmZmYjIxZmU0YWFlZGNjMmY0Y2NjYjdjNzM0YmFmNzQgYi9mdXp6ZXIvY29ycHVzL2M1NjY0NzI0ZmZmYjIxZmU0YWFlZGNjMmY0Y2NjYjdjNzM0YmFmNzQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA1MDNkNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzU2NjQ3MjRmZmZiMjFmZTRhYWVkY2MyZjRjY2NiN2M3MzRiYWY3NApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M1NmJlMzM2MTllMDUzMzNjNzJjZDZhOTYxMjJmNTA2NDk1YmFhM2EgYi9mdXp6ZXIvY29ycHVzL2M1NmJlMzM2MTllMDUzMzNjNzJjZDZhOTYxMjJmNTA2NDk1YmFhM2EKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU0YWJjNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzU2YmUzMzYxOWUwNTMzM2M3MmNkNmE5NjEyMmY1MDY0OTViYWEzYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M1YmUwYmQxODQyMjliY2RjMjA5ZDM4Yjc3MTdjMjAzZDU0MGI2MDkgYi9mdXp6ZXIvY29ycHVzL2M1YmUwYmQxODQyMjliY2RjMjA5ZDM4Yjc3MTdjMjAzZDU0MGI2MDkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI4ZDZlOQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzViZTBiZDE4NDIyOWJjZGMyMDlkMzhiNzcxN2MyMDNkNTQwYjYwOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M1YzVjNTMyOWM0MWZjN2Q5ZTEwODc1YWU0NzFlOTVhMWQyNTAwMGIgYi9mdXp6ZXIvY29ycHVzL2M1YzVjNTMyOWM0MWZjN2Q5ZTEwODc1YWU0NzFlOTVhMWQyNTAwMGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE4ODU2YgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzVjNWM1MzI5YzQxZmM3ZDllMTA4NzVhZTQ3MWU5NWExZDI1MDAwYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M1ZGFkZmI3NDY2YWYwMDM3NTkyNzZhZDNhNGRiMmEzMWJkM2ExZjggYi9mdXp6ZXIvY29ycHVzL2M1ZGFkZmI3NDY2YWYwMDM3NTkyNzZhZDNhNGRiMmEzMWJkM2ExZjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE5MjhlZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzVkYWRmYjc0NjZhZjAwMzc1OTI3NmFkM2E0ZGIyYTMxYmQzYTFmOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M1ZTc5MjUwM2ZhMzYzZTYyMGRmMGZmMWQ1M2MxMDQ3YTg5YTc4NTQgYi9mdXp6ZXIvY29ycHVzL2M1ZTc5MjUwM2ZhMzYzZTYyMGRmMGZmMWQ1M2MxMDQ3YTg5YTc4NTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IwZDFlNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzVlNzkyNTAzZmEzNjNlNjIwZGYwZmYxZDUzYzEwNDdhODlhNzg1NApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M2MDkyZDM3ZWQwMjA4OGIwY2Y4N2Q1YTA1NmFlZmY1ZjczYWZlNjAgYi9mdXp6ZXIvY29ycHVzL2M2MDkyZDM3ZWQwMjA4OGIwY2Y4N2Q1YTA1NmFlZmY1ZjczYWZlNjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEzY2FhYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzYwOTJkMzdlZDAyMDg4YjBjZjg3ZDVhMDU2YWVmZjVmNzNhZmU2MApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M2MTI1OTU0NDhhZjdjYmVjOTk5ZGVhMjNkZmM4MDI3Yzg1ZjVhMjQgYi9mdXp6ZXIvY29ycHVzL2M2MTI1OTU0NDhhZjdjYmVjOTk5ZGVhMjNkZmM4MDI3Yzg1ZjVhMjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MzZjQwNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzYxMjU5NTQ0OGFmN2NiZWM5OTlkZWEyM2RmYzgwMjdjODVmNWEyNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M2MjRhNDY5NzlmYzcyNjcxNjE2YzdhN2EzYjBhZjQzYTg1YjJkODEgYi9mdXp6ZXIvY29ycHVzL2M2MjRhNDY5NzlmYzcyNjcxNjE2YzdhN2EzYjBhZjQzYTg1YjJkODEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM0NDYxYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzYyNGE0Njk3OWZjNzI2NzE2MTZjN2E3YTNiMGFmNDNhODViMmQ4MQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M2Mjc0ODQ2ZTRjNjgxYmE3Yzc4NTkyZTAxY2UwNDkxZDQ4NmYyODYgYi9mdXp6ZXIvY29ycHVzL2M2Mjc0ODQ2ZTRjNjgxYmE3Yzc4NTkyZTAxY2UwNDkxZDQ4NmYyODYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVhNzYyZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzYyNzQ4NDZlNGM2ODFiYTdjNzg1OTJlMDFjZTA0OTFkNDg2ZjI4NgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M2NTRiMGQxZmYzMDhkYjVmNmZiYWMxMGYxZGJlYjRhOGIwN2FlOGMgYi9mdXp6ZXIvY29ycHVzL2M2NTRiMGQxZmYzMDhkYjVmNmZiYWMxMGYxZGJlYjRhOGIwN2FlOGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIxODYwMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzY1NGIwZDFmZjMwOGRiNWY2ZmJhYzEwZjFkYmViNGE4YjA3YWU4YwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M2NWI5NWI0NzU1YzUwZjJjYWRhMTkyOTY5MGJlY2U0MzE2MjgwZTggYi9mdXp6ZXIvY29ycHVzL2M2NWI5NWI0NzU1YzUwZjJjYWRhMTkyOTY5MGJlY2U0MzE2MjgwZTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg4MjQ3YgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzY1Yjk1YjQ3NTVjNTBmMmNhZGExOTI5NjkwYmVjZTQzMTYyODBlOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M2NWQ4OTg4ZDAyYjI2YmM3ODA0M2U2NjQ2ODc2NjNmYmQwNjBmN2QgYi9mdXp6ZXIvY29ycHVzL2M2NWQ4OTg4ZDAyYjI2YmM3ODA0M2U2NjQ2ODc2NjNmYmQwNjBmN2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMwMTQwYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzY1ZDg5ODhkMDJiMjZiYzc4MDQzZTY2NDY4NzY2M2ZiZDA2MGY3ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M2NzExZGYyMzRmNjQ5Y2RmNzQwNTI2NjVlNmFiMTg0ZjNiYmUxNTEgYi9mdXp6ZXIvY29ycHVzL2M2NzExZGYyMzRmNjQ5Y2RmNzQwNTI2NjVlNmFiMTg0ZjNiYmUxNTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIxM2QwMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzY3MTFkZjIzNGY2NDljZGY3NDA1MjY2NWU2YWIxODRmM2JiZTE1MQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M2NzI4NWM1YzNiNjQwYWUyMDY0ZWI2MTY2MTA0OWQ4YjE3ODY2MGIgYi9mdXp6ZXIvY29ycHVzL2M2NzI4NWM1YzNiNjQwYWUyMDY0ZWI2MTY2MTA0OWQ4YjE3ODY2MGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIzZDcxYQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzY3Mjg1YzVjM2I2NDBhZTIwNjRlYjYxNjYxMDQ5ZDhiMTc4NjYwYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M2OTFjZGRkNDE2OGE2ZWI4OWFhNzJhNjQwZGFjMTQ1ODk3MDUxOGUgYi9mdXp6ZXIvY29ycHVzL2M2OTFjZGRkNDE2OGE2ZWI4OWFhNzJhNjQwZGFjMTQ1ODk3MDUxOGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY4YTljZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzY5MWNkZGQ0MTY4YTZlYjg5YWE3MmE2NDBkYWMxNDU4OTcwNTE4ZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M2OTk2MTEwMDkyZGRmNjMzYzU3YTlkYTY4ODA0ZjFmYjAyNTNiYTcgYi9mdXp6ZXIvY29ycHVzL2M2OTk2MTEwMDkyZGRmNjMzYzU3YTlkYTY4ODA0ZjFmYjAyNTNiYTcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QxNmQ0NgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzY5OTYxMTAwOTJkZGY2MzNjNTdhOWRhNjg4MDRmMWZiMDI1M2JhNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M2OWJlM2ZhMzg3MmU3Y2MzNGVhMGNiNzJmYzE4Yzg4YTgxMWE5YzEgYi9mdXp6ZXIvY29ycHVzL2M2OWJlM2ZhMzg3MmU3Y2MzNGVhMGNiNzJmYzE4Yzg4YTgxMWE5YzEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE1ZGVmMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzY5YmUzZmEzODcyZTdjYzM0ZWEwY2I3MmZjMThjODhhODExYTljMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M2YTU3MWNlNWMzNWI2OGI4MmE0YzY3NjdmYzExYTlkNDkxNTRhMmQgYi9mdXp6ZXIvY29ycHVzL2M2YTU3MWNlNWMzNWI2OGI4MmE0YzY3NjdmYzExYTlkNDkxNTRhMmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlhNjBkNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzZhNTcxY2U1YzM1YjY4YjgyYTRjNjc2N2ZjMTFhOWQ0OTE1NGEyZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M2YjA2OWQyMzQyZjIzNTdjYzdmNjE1MzJlOGEzNTYwYTY3MjMyMDQgYi9mdXp6ZXIvY29ycHVzL2M2YjA2OWQyMzQyZjIzNTdjYzdmNjE1MzJlOGEzNTYwYTY3MjMyMDQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVhOGVhMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzZiMDY5ZDIzNDJmMjM1N2NjN2Y2MTUzMmU4YTM1NjBhNjcyMzIwNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M2YzljMWY5NzU1NTFlZWFhYjJmZjNlNTUxOWY3MjNhNzU0OTQwNzggYi9mdXp6ZXIvY29ycHVzL2M2YzljMWY5NzU1NTFlZWFhYjJmZjNlNTUxOWY3MjNhNzU0OTQwNzgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZkZmQ3YwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzZjOWMxZjk3NTU1MWVlYWFiMmZmM2U1NTE5ZjcyM2E3NTQ5NDA3OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M2ZTUxMGM3YjI5MjFkZWNjNDc1NTM4N2ViNmNhNGZjZmRhZjA3ZjggYi9mdXp6ZXIvY29ycHVzL2M2ZTUxMGM3YjI5MjFkZWNjNDc1NTM4N2ViNmNhNGZjZmRhZjA3ZjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIzY2M4ZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzZlNTEwYzdiMjkyMWRlY2M0NzU1Mzg3ZWI2Y2E0ZmNmZGFmMDdmOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M3MDZkOWY5NGY0ZTNkNGIxYzFlOWM5ODk2MmVkNzdkNjUzN2M1NGQgYi9mdXp6ZXIvY29ycHVzL2M3MDZkOWY5NGY0ZTNkNGIxYzFlOWM5ODk2MmVkNzdkNjUzN2M1NGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFiZTcyMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzcwNmQ5Zjk0ZjRlM2Q0YjFjMWU5Yzk4OTYyZWQ3N2Q2NTM3YzU0ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M3MGE3OWNkM2ZkYzdmZWU3YzdiMmQ5NmI2NWE0Njc4ZTI5ZmE2NTcgYi9mdXp6ZXIvY29ycHVzL2M3MGE3OWNkM2ZkYzdmZWU3YzdiMmQ5NmI2NWE0Njc4ZTI5ZmE2NTcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg5YmViZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzcwYTc5Y2QzZmRjN2ZlZTdjN2IyZDk2YjY1YTQ2NzhlMjlmYTY1NwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M3MmEyMzM4YmY1NDkzYmYxMGEwMDQ3ZjAwYWVhOTRkN2ExMGRjZDAgYi9mdXp6ZXIvY29ycHVzL2M3MmEyMzM4YmY1NDkzYmYxMGEwMDQ3ZjAwYWVhOTRkN2ExMGRjZDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJjYTBiOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzcyYTIzMzhiZjU0OTNiZjEwYTAwNDdmMDBhZWE5NGQ3YTEwZGNkMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M3MmFiZTlmNDE5NjcyMWRjYjYyYWRmNjYyYmI3ZGYxYjk5MDIzYTMgYi9mdXp6ZXIvY29ycHVzL2M3MmFiZTlmNDE5NjcyMWRjYjYyYWRmNjYyYmI3ZGYxYjk5MDIzYTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBiYjBiZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzcyYWJlOWY0MTk2NzIxZGNiNjJhZGY2NjJiYjdkZjFiOTkwMjNhMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M3NDE2MzQ4ZmVjMWQwOThjMDVkMGM4MDc3NTNjYjM3ODQzM2Q3MGQgYi9mdXp6ZXIvY29ycHVzL2M3NDE2MzQ4ZmVjMWQwOThjMDVkMGM4MDc3NTNjYjM3ODQzM2Q3MGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYzZGNmYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzc0MTYzNDhmZWMxZDA5OGMwNWQwYzgwNzc1M2NiMzc4NDMzZDcwZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M3NGZjZTU1ODk5MDczMWQxYjZjNGJjMTEyZDEyNGU0YjRiZTc2YjQgYi9mdXp6ZXIvY29ycHVzL2M3NGZjZTU1ODk5MDczMWQxYjZjNGJjMTEyZDEyNGU0YjRiZTc2YjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhkNDgyMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzc0ZmNlNTU4OTkwNzMxZDFiNmM0YmMxMTJkMTI0ZTRiNGJlNzZiNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M3NThlYzlmYTY1YTI0NTAxN2E0Y2JiNmUwYjgxYjA1ZDYyOTIwY2MgYi9mdXp6ZXIvY29ycHVzL2M3NThlYzlmYTY1YTI0NTAxN2E0Y2JiNmUwYjgxYjA1ZDYyOTIwY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM3YzViNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzc1OGVjOWZhNjVhMjQ1MDE3YTRjYmI2ZTBiODFiMDVkNjI5MjBjYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M3NzA2ZjMzYjhlYTUzMTY0NGI4NDY0MWNjOWY4MzA1NzJiNGRmODkgYi9mdXp6ZXIvY29ycHVzL2M3NzA2ZjMzYjhlYTUzMTY0NGI4NDY0MWNjOWY4MzA1NzJiNGRmODkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQwN2Y0NwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzc3MDZmMzNiOGVhNTMxNjQ0Yjg0NjQxY2M5ZjgzMDU3MmI0ZGY4OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M3NzhmNTM1MTFkY2QxN2U4YmYwZDRkNDQ1YTM5OTMwMWUzM2RlOTIgYi9mdXp6ZXIvY29ycHVzL2M3NzhmNTM1MTFkY2QxN2U4YmYwZDRkNDQ1YTM5OTMwMWUzM2RlOTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFiYWVhYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzc3OGY1MzUxMWRjZDE3ZThiZjBkNGQ0NDVhMzk5MzAxZTMzZGU5MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M3OGNmYWY0Y2U5NDJjMzgwNmVlOWU0N2MxYmEzYjM2Yjk3ODU2MGEgYi9mdXp6ZXIvY29ycHVzL2M3OGNmYWY0Y2U5NDJjMzgwNmVlOWU0N2MxYmEzYjM2Yjk3ODU2MGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IyNjhmMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzc4Y2ZhZjRjZTk0MmMzODA2ZWU5ZTQ3YzFiYTNiMzZiOTc4NTYwYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M3OWU5YmMzMTI1NzIyY2Y0ZjVkZTZlMDNmOGFiMWY0NjY0NGU5Y2MgYi9mdXp6ZXIvY29ycHVzL2M3OWU5YmMzMTI1NzIyY2Y0ZjVkZTZlMDNmOGFiMWY0NjY0NGU5Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc3OWNlYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzc5ZTliYzMxMjU3MjJjZjRmNWRlNmUwM2Y4YWIxZjQ2NjQ0ZTljYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M3OWZjYzdmM2Y1NDVjMDk0M2MyODE3YjZiMTExMTBkNjFjNzlhMjcgYi9mdXp6ZXIvY29ycHVzL2M3OWZjYzdmM2Y1NDVjMDk0M2MyODE3YjZiMTExMTBkNjFjNzlhMjcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU1YmRkYQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzc5ZmNjN2YzZjU0NWMwOTQzYzI4MTdiNmIxMTExMGQ2MWM3OWEyNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M3YWFlNzYxYTI4N2FmNGE3OWFhNjhlNjYwZjY5ZjQzMzg3OWUwZjMgYi9mdXp6ZXIvY29ycHVzL2M3YWFlNzYxYTI4N2FmNGE3OWFhNjhlNjYwZjY5ZjQzMzg3OWUwZjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJmMDQzOQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzdhYWU3NjFhMjg3YWY0YTc5YWE2OGU2NjBmNjlmNDMzODc5ZTBmMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M3ZTU0ZGNlZTA1NmM2ZGVhZjhmYTNiYTBlMWVmN2JhZmZmYjY4MGYgYi9mdXp6ZXIvY29ycHVzL2M3ZTU0ZGNlZTA1NmM2ZGVhZjhmYTNiYTBlMWVmN2JhZmZmYjY4MGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RiNjU0OQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzdlNTRkY2VlMDU2YzZkZWFmOGZhM2JhMGUxZWY3YmFmZmZiNjgwZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M3ZmQ4YTY1ODZmYmU2ZTNlNTEyNzcwMDUxNDI2MmQ1Mjg5ZDJlMGEgYi9mdXp6ZXIvY29ycHVzL2M3ZmQ4YTY1ODZmYmU2ZTNlNTEyNzcwMDUxNDI2MmQ1Mjg5ZDJlMGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA3YmU2YQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzdmZDhhNjU4NmZiZTZlM2U1MTI3NzAwNTE0MjYyZDUyODlkMmUwYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M4N2ZmZmQ2YmNlNTkzMjYwNTBhZjA2NDMzYWZkZWI1ZjU2NjQwYjcgYi9mdXp6ZXIvY29ycHVzL2M4N2ZmZmQ2YmNlNTkzMjYwNTBhZjA2NDMzYWZkZWI1ZjU2NjQwYjcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ3ZTgxMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzg3ZmZmZDZiY2U1OTMyNjA1MGFmMDY0MzNhZmRlYjVmNTY2NDBiNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M4ODVkNGU5MzRkZWQyN2I1OTViZTQ5YWRjYjY0YTJlZTkzMGUxZjYgYi9mdXp6ZXIvY29ycHVzL2M4ODVkNGU5MzRkZWQyN2I1OTViZTQ5YWRjYjY0YTJlZTkzMGUxZjYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ4OGRjOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzg4NWQ0ZTkzNGRlZDI3YjU5NWJlNDlhZGNiNjRhMmVlOTMwZTFmNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M4OWZjOGJlYzJhYWNkMTk2MGQxZGNmYjRmMGFmNDQyZjkwMzE3NTkgYi9mdXp6ZXIvY29ycHVzL2M4OWZjOGJlYzJhYWNkMTk2MGQxZGNmYjRmMGFmNDQyZjkwMzE3NTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY2ZGRlOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzg5ZmM4YmVjMmFhY2QxOTYwZDFkY2ZiNGYwYWY0NDJmOTAzMTc1OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M4YTMyNGM2ZjllNmFjZGE1ZTk4NjllNTM0NjE3NmNkZDBhYjE0NmYgYi9mdXp6ZXIvY29ycHVzL2M4YTMyNGM2ZjllNmFjZGE1ZTk4NjllNTM0NjE3NmNkZDBhYjE0NmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFkMmFhYQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzhhMzI0YzZmOWU2YWNkYTVlOTg2OWU1MzQ2MTc2Y2RkMGFiMTQ2ZgpAQCAtMCwwICsxIEBACiv//////////////////////////zVpXzD//////////////zVpX2kKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M4YzQ5NjQwYjUwMWQ5NTdiY2U0ZGYxNWJiNjEzYjY5ZGE3MWU5NmQgYi9mdXp6ZXIvY29ycHVzL2M4YzQ5NjQwYjUwMWQ5NTdiY2U0ZGYxNWJiNjEzYjY5ZGE3MWU5NmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I3MmNmMQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzhjNDk2NDBiNTAxZDk1N2JjZTRkZjE1YmI2MTNiNjlkYTcxZTk2ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M4ZjYzMzNmYmY4ZTc3MmVlMmZjMjgzMWVmNzI4NjE5OTMyMGMzMTUgYi9mdXp6ZXIvY29ycHVzL2M4ZjYzMzNmYmY4ZTc3MmVlMmZjMjgzMWVmNzI4NjE5OTMyMGMzMTUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFlOGQ3NAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzhmNjMzM2ZiZjhlNzcyZWUyZmMyODMxZWY3Mjg2MTk5MzIwYzMxNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M4ZmM2MzA1NmQzMmIyMTRlZWFlNDE1NTBlN2MxZTkyNTMyNzIwY2EgYi9mdXp6ZXIvY29ycHVzL2M4ZmM2MzA1NmQzMmIyMTRlZWFlNDE1NTBlN2MxZTkyNTMyNzIwY2EKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM2OWZjYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzhmYzYzMDU2ZDMyYjIxNGVlYWU0MTU1MGU3YzFlOTI1MzI3MjBjYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M5MmUyNmU4ZmViODA3NWYzMmQ2M2M4ODdmY2NmNTNmODAxYWU5ZGIgYi9mdXp6ZXIvY29ycHVzL2M5MmUyNmU4ZmViODA3NWYzMmQ2M2M4ODdmY2NmNTNmODAxYWU5ZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZhOGYwYQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzkyZTI2ZThmZWI4MDc1ZjMyZDYzYzg4N2ZjY2Y1M2Y4MDFhZTlkYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M5Njc0MWVhMTE5MjM5NWU5MGQyYTg2ZDU1MzdlZDZmMjA5MTRkZjUgYi9mdXp6ZXIvY29ycHVzL2M5Njc0MWVhMTE5MjM5NWU5MGQyYTg2ZDU1MzdlZDZmMjA5MTRkZjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE0NTVmMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzk2NzQxZWExMTkyMzk1ZTkwZDJhODZkNTUzN2VkNmYyMDkxNGRmNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M5ODJiZWQ0MDI0MjgzNWFkMjlhODMxMWY2NTc5MmY1ZTI3NDY4YjMgYi9mdXp6ZXIvY29ycHVzL2M5ODJiZWQ0MDI0MjgzNWFkMjlhODMxMWY2NTc5MmY1ZTI3NDY4YjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE1Yjc4YwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzk4MmJlZDQwMjQyODM1YWQyOWE4MzExZjY1NzkyZjVlMjc0NjhiMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M5ZTM5OTRkZDhjOWZjMzYzM2VkZDkwNThiYTBlODkxNDI4YjhmZWQgYi9mdXp6ZXIvY29ycHVzL2M5ZTM5OTRkZDhjOWZjMzYzM2VkZDkwNThiYTBlODkxNDI4YjhmZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA1NTlhNgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzllMzk5NGRkOGM5ZmMzNjMzZWRkOTA1OGJhMGU4OTE0MjhiOGZlZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2M5ZTVlZjIxMWEwZDM0NjE3OWI0YzU3ZWE2OGE2MGJhYjVmMDU1YzQgYi9mdXp6ZXIvY29ycHVzL2M5ZTVlZjIxMWEwZDM0NjE3OWI0YzU3ZWE2OGE2MGJhYjVmMDU1YzQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg1N2RmYQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvYzllNWVmMjExYTBkMzQ2MTc5YjRjNTdlYTY4YTYwYmFiNWYwNTVjNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NhMTEzMDRhOGM3MTQ3N2IxMmIyNDZkZWViZWRiOGU3YTQzNzc0NzggYi9mdXp6ZXIvY29ycHVzL2NhMTEzMDRhOGM3MTQ3N2IxMmIyNDZkZWViZWRiOGU3YTQzNzc0NzgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NhYmUyZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2ExMTMwNGE4YzcxNDc3YjEyYjI0NmRlZWJlZGI4ZTdhNDM3NzQ3OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NhMWNkMjg3NDUwY2Y0N2NkM2E1YTMyZTFlYzU0NWQ0MGIwZjUyMjIgYi9mdXp6ZXIvY29ycHVzL2NhMWNkMjg3NDUwY2Y0N2NkM2E1YTMyZTFlYzU0NWQ0MGIwZjUyMjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVkMjljMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2ExY2QyODc0NTBjZjQ3Y2QzYTVhMzJlMWVjNTQ1ZDQwYjBmNTIyMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NhMzdhMmYwODkxNWJkN2E5YWMxOTg4YjI5ODg3YjEwY2I5OGNhZGIgYi9mdXp6ZXIvY29ycHVzL2NhMzdhMmYwODkxNWJkN2E5YWMxOTg4YjI5ODg3YjEwY2I5OGNhZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZjMmJhMQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2EzN2EyZjA4OTE1YmQ3YTlhYzE5ODhiMjk4ODdiMTBjYjk4Y2FkYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NhNTQ0MTViMjE4MTY2M2FhOTc4MzU1ZWM3MmNmOTQzNWM0Y2NkOGMgYi9mdXp6ZXIvY29ycHVzL2NhNTQ0MTViMjE4MTY2M2FhOTc4MzU1ZWM3MmNmOTQzNWM0Y2NkOGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg5MzE4MwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2E1NDQxNWIyMTgxNjYzYWE5NzgzNTVlYzcyY2Y5NDM1YzRjY2Q4YwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NhOWJhOGZiNDk4NjdmYWE0YzI2ODI5ODY5ZDJjZjBiMmQwMGE2NTEgYi9mdXp6ZXIvY29ycHVzL2NhOWJhOGZiNDk4NjdmYWE0YzI2ODI5ODY5ZDJjZjBiMmQwMGE2NTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMxODA5YgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2E5YmE4ZmI0OTg2N2ZhYTRjMjY4Mjk4NjlkMmNmMGIyZDAwYTY1MQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NhYTFhMTZhODdjOGNiZjM5MzFkOGEzNGY4NGMzMzgxNjM1ZWQ1NmYgYi9mdXp6ZXIvY29ycHVzL2NhYTFhMTZhODdjOGNiZjM5MzFkOGEzNGY4NGMzMzgxNjM1ZWQ1NmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY3YTRkZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2FhMWExNmE4N2M4Y2JmMzkzMWQ4YTM0Zjg0YzMzODE2MzVlZDU2ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NhYTUzMDVjYTJkZTk0MzM5ZWQ3MzUxNWI3ZDNmNzVkZDY4NDc0MTQgYi9mdXp6ZXIvY29ycHVzL2NhYTUzMDVjYTJkZTk0MzM5ZWQ3MzUxNWI3ZDNmNzVkZDY4NDc0MTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIyMjFhZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2FhNTMwNWNhMmRlOTQzMzllZDczNTE1YjdkM2Y3NWRkNjg0NzQxNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NhYTdhMzQ2ODNmYTczY2UyMzNiNmI0OTY5YmNkMGM0MTRhMmY3NjQgYi9mdXp6ZXIvY29ycHVzL2NhYTdhMzQ2ODNmYTczY2UyMzNiNmI0OTY5YmNkMGM0MTRhMmY3NjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE2ZWM0MwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2FhN2EzNDY4M2ZhNzNjZTIzM2I2YjQ5NjliY2QwYzQxNGEyZjc2NApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NhYzAwODRlZjdlMzlhNjZkYWY4NDhiN2U5NmUwMmY5NTUyNGI0MGEgYi9mdXp6ZXIvY29ycHVzL2NhYzAwODRlZjdlMzlhNjZkYWY4NDhiN2U5NmUwMmY5NTUyNGI0MGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VkZmQ0YgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2FjMDA4NGVmN2UzOWE2NmRhZjg0OGI3ZTk2ZTAyZjk1NTI0YjQwYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NhZWQ2YWE0ZjM5NTVlOTQ3YjQ1NTMyYjhhYTdhODFlNmMxN2E0ZDUgYi9mdXp6ZXIvY29ycHVzL2NhZWQ2YWE0ZjM5NTVlOTQ3YjQ1NTMyYjhhYTdhODFlNmMxN2E0ZDUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZlMDhkZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2FlZDZhYTRmMzk1NWU5NDdiNDU1MzJiOGFhN2E4MWU2YzE3YTRkNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NiN2EzMmZkMDVmNGJjNzI1NDM5NmEyM2FhMjljYmZkYTY2MjE4MWYgYi9mdXp6ZXIvY29ycHVzL2NiN2EzMmZkMDVmNGJjNzI1NDM5NmEyM2FhMjljYmZkYTY2MjE4MWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmExNjAzYQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2I3YTMyZmQwNWY0YmM3MjU0Mzk2YTIzYWEyOWNiZmRhNjYyMTgxZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NiZDA3MTdjMTc0OTQyNzQzMTk3YjUxZjcwMTNmNGZkZGYwNGRmNmIgYi9mdXp6ZXIvY29ycHVzL2NiZDA3MTdjMTc0OTQyNzQzMTk3YjUxZjcwMTNmNGZkZGYwNGRmNmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJlM2M3MAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2JkMDcxN2MxNzQ5NDI3NDMxOTdiNTFmNzAxM2Y0ZmRkZjA0ZGY2YgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NiZTYzNDRkMDM5MWU5NjlmNWNkYjczNDI2Y2I1Yjg3NTIwNzcwNjggYi9mdXp6ZXIvY29ycHVzL2NiZTYzNDRkMDM5MWU5NjlmNWNkYjczNDI2Y2I1Yjg3NTIwNzcwNjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UyOTY0MQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2JlNjM0NGQwMzkxZTk2OWY1Y2RiNzM0MjZjYjViODc1MjA3NzA2OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NjMGZlYTljNjVjMjVlODMxY2EzZjc2YmQ4NjdlY2U2NTBjMDFlMjggYi9mdXp6ZXIvY29ycHVzL2NjMGZlYTljNjVjMjVlODMxY2EzZjc2YmQ4NjdlY2U2NTBjMDFlMjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU4OTM5MgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2MwZmVhOWM2NWMyNWU4MzFjYTNmNzZiZDg2N2VjZTY1MGMwMWUyOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NjMjdjMTEwNTZjZjQ1OTBiYmZhNzJiNDk4ZTJiMzUwNzEwYzAzZDkgYi9mdXp6ZXIvY29ycHVzL2NjMjdjMTEwNTZjZjQ1OTBiYmZhNzJiNDk4ZTJiMzUwNzEwYzAzZDkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVmYWEyNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2MyN2MxMTA1NmNmNDU5MGJiZmE3MmI0OThlMmIzNTA3MTBjMDNkOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NjMzhjYjY4YTgwMDcwMmViZTg5ZmRiMDgxNDE2Zjk1NWFkNTVmMGMgYi9mdXp6ZXIvY29ycHVzL2NjMzhjYjY4YTgwMDcwMmViZTg5ZmRiMDgxNDE2Zjk1NWFkNTVmMGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAwMGVlZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2MzOGNiNjhhODAwNzAyZWJlODlmZGIwODE0MTZmOTU1YWQ1NWYwYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NjYmJkNGQ0YzAzNGEwZDU3ZTA0NDcxNDY2YjczOWYyZTE0NmZhM2QgYi9mdXp6ZXIvY29ycHVzL2NjYmJkNGQ0YzAzNGEwZDU3ZTA0NDcxNDY2YjczOWYyZTE0NmZhM2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U2MWI5OAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2NiYmQ0ZDRjMDM0YTBkNTdlMDQ0NzE0NjZiNzM5ZjJlMTQ2ZmEzZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NjYmVmNjlkODI3ZGRhOGU2OGE3MGFjNDI2NzA3ODVlNjUzNjZjMWUgYi9mdXp6ZXIvY29ycHVzL2NjYmVmNjlkODI3ZGRhOGU2OGE3MGFjNDI2NzA3ODVlNjUzNjZjMWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFmMWIyYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2NiZWY2OWQ4MjdkZGE4ZTY4YTcwYWM0MjY3MDc4NWU2NTM2NmMxZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NjZTRlNjEzNWIwNTlhYzMxM2E1YmVmZWQxZGZkMGI3OWYyNzMyNGYgYi9mdXp6ZXIvY29ycHVzL2NjZTRlNjEzNWIwNTlhYzMxM2E1YmVmZWQxZGZkMGI3OWYyNzMyNGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY5YWE2YQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2NlNGU2MTM1YjA1OWFjMzEzYTViZWZlZDFkZmQwYjc5ZjI3MzI0ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NkMWYyNWM2NjI4MmVjZDk4ZThlNmQzZGVhMDMzYzM4MjUyMmM3YWQgYi9mdXp6ZXIvY29ycHVzL2NkMWYyNWM2NjI4MmVjZDk4ZThlNmQzZGVhMDMzYzM4MjUyMmM3YWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM3MjU3OAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2QxZjI1YzY2MjgyZWNkOThlOGU2ZDNkZWEwMzNjMzgyNTIyYzdhZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NkMjk2YTdkMmJhYTNkYWY1ZDk4M2YyY2IzMGFkNmNhM2NlNzRkZjQgYi9mdXp6ZXIvY29ycHVzL2NkMjk2YTdkMmJhYTNkYWY1ZDk4M2YyY2IzMGFkNmNhM2NlNzRkZjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA3OWRkNgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2QyOTZhN2QyYmFhM2RhZjVkOTgzZjJjYjMwYWQ2Y2EzY2U3NGRmNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NkNTRhNGIyMzViZGM5MzZhYjQ0NzFiYzM0YTJiNzRjN2Y3ODIxODQgYi9mdXp6ZXIvY29ycHVzL2NkNTRhNGIyMzViZGM5MzZhYjQ0NzFiYzM0YTJiNzRjN2Y3ODIxODQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdmYTJiNgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2Q1NGE0YjIzNWJkYzkzNmFiNDQ3MWJjMzRhMmI3NGM3Zjc4MjE4NApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NkNWNhMzY4Y2QwYTY3MDk3MWE0NTA4MmM3MWYxNDI3MDAzNDY3NDcgYi9mdXp6ZXIvY29ycHVzL2NkNWNhMzY4Y2QwYTY3MDk3MWE0NTA4MmM3MWYxNDI3MDAzNDY3NDcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNmMGEyZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2Q1Y2EzNjhjZDBhNjcwOTcxYTQ1MDgyYzcxZjE0MjcwMDM0Njc0NwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NkODkyOTE1ZjA5MmNmZGUzMzljZjVjYTliZDQxMWIyYjk0OTdlMWEgYi9mdXp6ZXIvY29ycHVzL2NkODkyOTE1ZjA5MmNmZGUzMzljZjVjYTliZDQxMWIyYjk0OTdlMWEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1NTdiNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2Q4OTI5MTVmMDkyY2ZkZTMzOWNmNWNhOWJkNDExYjJiOTQ5N2UxYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NkOWQ3YWJiMDQxOGFjOTJhZTBmNTI5YzRkOWU3ZDQyMGRhMTRiNTAgYi9mdXp6ZXIvY29ycHVzL2NkOWQ3YWJiMDQxOGFjOTJhZTBmNTI5YzRkOWU3ZDQyMGRhMTRiNTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY4YWQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2Q5ZDdhYmIwNDE4YWM5MmFlMGY1MjljNGQ5ZTdkNDIwZGExNGI1MApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NkYjBmNzEyNjM3NGQ5NWE0MTU1Y2JlYzZmMTc0MGE3MjdhZmY2NjYgYi9mdXp6ZXIvY29ycHVzL2NkYjBmNzEyNjM3NGQ5NWE0MTU1Y2JlYzZmMTc0MGE3MjdhZmY2NjYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU2ZTk1NwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2RiMGY3MTI2Mzc0ZDk1YTQxNTVjYmVjNmYxNzQwYTcyN2FmZjY2NgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NkYmNjZmQ4ZWE5MWU1ZjQ0YzEzZTdhZWJjNjQ5OGI0MjQxNDUxMjEgYi9mdXp6ZXIvY29ycHVzL2NkYmNjZmQ4ZWE5MWU1ZjQ0YzEzZTdhZWJjNjQ5OGI0MjQxNDUxMjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEzNzUwNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2RiY2NmZDhlYTkxZTVmNDRjMTNlN2FlYmM2NDk4YjQyNDE0NTEyMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NkY2MyNDg1MjVkMmM2MjliODNmNWE4MTVkN2RhYTA1MTA1ZTQ0YTIgYi9mdXp6ZXIvY29ycHVzL2NkY2MyNDg1MjVkMmM2MjliODNmNWE4MTVkN2RhYTA1MTA1ZTQ0YTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFkODM3ZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2RjYzI0ODUyNWQyYzYyOWI4M2Y1YTgxNWQ3ZGFhMDUxMDVlNDRhMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NkY2VmMDc4MWExMDhlZGVhNTUyM2RmZjU3NGI3ZDIyNTdjMzZiODEgYi9mdXp6ZXIvY29ycHVzL2NkY2VmMDc4MWExMDhlZGVhNTUyM2RmZjU3NGI3ZDIyNTdjMzZiODEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgxN2ViZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2RjZWYwNzgxYTEwOGVkZWE1NTIzZGZmNTc0YjdkMjI1N2MzNmI4MQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NlMTBiMTlkNzkzNThjODYwZDhhMTFmNjM5YTdiYmZiNTZhYmQxNzEgYi9mdXp6ZXIvY29ycHVzL2NlMTBiMTlkNzkzNThjODYwZDhhMTFmNjM5YTdiYmZiNTZhYmQxNzEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZkNjc0MQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2UxMGIxOWQ3OTM1OGM4NjBkOGExMWY2MzlhN2JiZmI1NmFiZDE3MQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NlMmQ1Nzg0ZGQwY2IxMTZhNzkwMzk3N2RhNTFkY2Q5YmQ2NjkxMjggYi9mdXp6ZXIvY29ycHVzL2NlMmQ1Nzg0ZGQwY2IxMTZhNzkwMzk3N2RhNTFkY2Q5YmQ2NjkxMjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA3MGE4YwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2UyZDU3ODRkZDBjYjExNmE3OTAzOTc3ZGE1MWRjZDliZDY2OTEyOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NlNDQ1MTU3OTYzYWNmMTZjZmI5NWMxODk0NzQyMTQwMDAyYjUyMDQgYi9mdXp6ZXIvY29ycHVzL2NlNDQ1MTU3OTYzYWNmMTZjZmI5NWMxODk0NzQyMTQwMDAyYjUyMDQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVmNzRjMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2U0NDUxNTc5NjNhY2YxNmNmYjk1YzE4OTQ3NDIxNDAwMDJiNTIwNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NlNTMzOWUwNDk2MjEzYzBlMTljMzI5NmFjOTZmMDU5MWFjNTAyODkgYi9mdXp6ZXIvY29ycHVzL2NlNTMzOWUwNDk2MjEzYzBlMTljMzI5NmFjOTZmMDU5MWFjNTAyODkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU5ZTY5YgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2U1MzM5ZTA0OTYyMTNjMGUxOWMzMjk2YWM5NmYwNTkxYWM1MDI4OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NlNWZjYzZmNjllNGNkYmM5ZjU2M2Q1YjA2ZmVjM2MyMjBkYjJhNjIgYi9mdXp6ZXIvY29ycHVzL2NlNWZjYzZmNjllNGNkYmM5ZjU2M2Q1YjA2ZmVjM2MyMjBkYjJhNjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA5YWJlYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2U1ZmNjNmY2OWU0Y2RiYzlmNTYzZDViMDZmZWMzYzIyMGRiMmE2MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NlOWI5YzRkNTA5NGE4NzRkZWQ2Y2FhM2UwYjNiZWEyYzY2YTY3MmMgYi9mdXp6ZXIvY29ycHVzL2NlOWI5YzRkNTA5NGE4NzRkZWQ2Y2FhM2UwYjNiZWEyYzY2YTY3MmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZhM2QwOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2U5YjljNGQ1MDk0YTg3NGRlZDZjYWEzZTBiM2JlYTJjNjZhNjcyYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NlYjNmN2FhMjNmOGEyMmZhZTdhOTM5NzUyZDNjNDY2NGI0ODNkZjMgYi9mdXp6ZXIvY29ycHVzL2NlYjNmN2FhMjNmOGEyMmZhZTdhOTM5NzUyZDNjNDY2NGI0ODNkZjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QxYmQ0MQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2ViM2Y3YWEyM2Y4YTIyZmFlN2E5Mzk3NTJkM2M0NjY0YjQ4M2RmMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NlYzIxNTJmZGZmYTVjZDE3NDU5Nzc1ODI0Mzc4ZGZjMzY5NzczYzcgYi9mdXp6ZXIvY29ycHVzL2NlYzIxNTJmZGZmYTVjZDE3NDU5Nzc1ODI0Mzc4ZGZjMzY5NzczYzcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRkMmU2MgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2VjMjE1MmZkZmZhNWNkMTc0NTk3NzU4MjQzNzhkZmMzNjk3NzNjNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NlZmMzOTQyYzM3N2JhZDU2ZTQ1Y2MzNzMwZjhmOTI0MjYyMWY3NTEgYi9mdXp6ZXIvY29ycHVzL2NlZmMzOTQyYzM3N2JhZDU2ZTQ1Y2MzNzMwZjhmOTI0MjYyMWY3NTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI2MWNhNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2VmYzM5NDJjMzc3YmFkNTZlNDVjYzM3MzBmOGY5MjQyNjIxZjc1MQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NmMGUwZWFkN2FhNDE0NzZiMDcyY2VmZTdjOWVhZDY2ZWMzMWM1NjIgYi9mdXp6ZXIvY29ycHVzL2NmMGUwZWFkN2FhNDE0NzZiMDcyY2VmZTdjOWVhZDY2ZWMzMWM1NjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQyNGRkMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2YwZTBlYWQ3YWE0MTQ3NmIwNzJjZWZlN2M5ZWFkNjZlYzMxYzU2MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NmMjc4Njc5NmIzZDA2MTE4MTllNjlkMDBjM2IyNzg1YzVkYWE5ODcgYi9mdXp6ZXIvY29ycHVzL2NmMjc4Njc5NmIzZDA2MTE4MTllNjlkMDBjM2IyNzg1YzVkYWE5ODcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNmYzQ3MwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2YyNzg2Nzk2YjNkMDYxMTgxOWU2OWQwMGMzYjI3ODVjNWRhYTk4NwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NmNDI2YjhiNmNlMzNjNDRhMjIxYzcwNDgyMDE5MWVmZGUwZmIyMjYgYi9mdXp6ZXIvY29ycHVzL2NmNDI2YjhiNmNlMzNjNDRhMjIxYzcwNDgyMDE5MWVmZGUwZmIyMjYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFhNDRkNgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2Y0MjZiOGI2Y2UzM2M0NGEyMjFjNzA0ODIwMTkxZWZkZTBmYjIyNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NmNDQ2NWFkMzUxZTYxMjllY2RhMjEyNmM4MDc4YTQ5ZDg4MmFkOWYgYi9mdXp6ZXIvY29ycHVzL2NmNDQ2NWFkMzUxZTYxMjllY2RhMjEyNmM4MDc4YTQ5ZDg4MmFkOWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZjM2QwOQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2Y0NDY1YWQzNTFlNjEyOWVjZGEyMTI2YzgwNzhhNDlkODgyYWQ5ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NmNTYzODgyYWM3ZWViNzFmMGZkZTFkZDM2ZjIyZjliZDFhNWEyZWYgYi9mdXp6ZXIvY29ycHVzL2NmNTYzODgyYWM3ZWViNzFmMGZkZTFkZDM2ZjIyZjliZDFhNWEyZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJmNzY5YgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2Y1NjM4ODJhYzdlZWI3MWYwZmRlMWRkMzZmMjJmOWJkMWE1YTJlZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NmOTRhODk1ZjFhODA5MDczNmU5YjYxODc0YTgyZmJkYTNiNmMzMDAgYi9mdXp6ZXIvY29ycHVzL2NmOTRhODk1ZjFhODA5MDczNmU5YjYxODc0YTgyZmJkYTNiNmMzMDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk4MDhjZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2Y5NGE4OTVmMWE4MDkwNzM2ZTliNjE4NzRhODJmYmRhM2I2YzMwMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NmYTU2ZWJkZTAwYTFmYWI1MTczZTBlZmY3YTBmMWY0YmQxYWY3N2MgYi9mdXp6ZXIvY29ycHVzL2NmYTU2ZWJkZTAwYTFmYWI1MTczZTBlZmY3YTBmMWY0YmQxYWY3N2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAxOTg4ZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2ZhNTZlYmRlMDBhMWZhYjUxNzNlMGVmZjdhMGYxZjRiZDFhZjc3YwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NmYzUxNmQyM2MyZGZiMGFlODUwOTQzMjNiOGIxNGQ0ZjIyMmJlYzMgYi9mdXp6ZXIvY29ycHVzL2NmYzUxNmQyM2MyZGZiMGFlODUwOTQzMjNiOGIxNGQ0ZjIyMmJlYzMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRmYmZkOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2ZjNTE2ZDIzYzJkZmIwYWU4NTA5NDMyM2I4YjE0ZDRmMjIyYmVjMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NmZDBkNmJjMWY3OGUwM2ZiYWE2OTkwZTc1MWNjYWU2NmY2NzQ2NDAgYi9mdXp6ZXIvY29ycHVzL2NmZDBkNmJjMWY3OGUwM2ZiYWE2OTkwZTc1MWNjYWU2NmY2NzQ2NDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzljYjEwNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2ZkMGQ2YmMxZjc4ZTAzZmJhYTY5OTBlNzUxY2NhZTY2ZjY3NDY0MApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2NmZDUyNTZjZWJjNWRkYmYwNDVhMDk5YWY5YzJhZWQ5ODRhMDZiMjIgYi9mdXp6ZXIvY29ycHVzL2NmZDUyNTZjZWJjNWRkYmYwNDVhMDk5YWY5YzJhZWQ5ODRhMDZiMjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM3NThkZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvY2ZkNTI1NmNlYmM1ZGRiZjA0NWEwOTlhZjljMmFlZDk4NGEwNmIyMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QwMjg2ODY3YTlhNDBlZWZlNDZjOTg3MjdjOWZkMDZhMmNmMWRmNTkgYi9mdXp6ZXIvY29ycHVzL2QwMjg2ODY3YTlhNDBlZWZlNDZjOTg3MjdjOWZkMDZhMmNmMWRmNTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhjZTk1YQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDAyODY4NjdhOWE0MGVlZmU0NmM5ODcyN2M5ZmQwNmEyY2YxZGY1OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QwMmQ4ZDkwZDk1YjcxYTg4YjYzNGY4ZWU0ZThiM2E5NDQwOWU5MmMgYi9mdXp6ZXIvY29ycHVzL2QwMmQ4ZDkwZDk1YjcxYTg4YjYzNGY4ZWU0ZThiM2E5NDQwOWU5MmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RlMTViYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDAyZDhkOTBkOTViNzFhODhiNjM0ZjhlZTRlOGIzYTk0NDA5ZTkyYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QwMmZmZTU5N2RiM2U1M2JkNDc4Y2UwZjc5OTg0NTgzNGZiMzc3NTggYi9mdXp6ZXIvY29ycHVzL2QwMmZmZTU5N2RiM2U1M2JkNDc4Y2UwZjc5OTg0NTgzNGZiMzc3NTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIyMGVkYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDAyZmZlNTk3ZGIzZTUzYmQ0NzhjZTBmNzk5ODQ1ODM0ZmIzNzc1OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QwMzFkMzQzYmE2NDVhNTJhYjgyMmI4YzVhZWZmMmMxYWRmNzgyNzEgYi9mdXp6ZXIvY29ycHVzL2QwMzFkMzQzYmE2NDVhNTJhYjgyMmI4YzVhZWZmMmMxYWRmNzgyNzEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY0ZTU3MQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDAzMWQzNDNiYTY0NWE1MmFiODIyYjhjNWFlZmYyYzFhZGY3ODI3MQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QwNDM1M2QwYjU4OGYyOGFlMjRlOWE4MDcwNTE3NzMzY2VjZWE2M2QgYi9mdXp6ZXIvY29ycHVzL2QwNDM1M2QwYjU4OGYyOGFlMjRlOWE4MDcwNTE3NzMzY2VjZWE2M2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRjOTk1MgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDA0MzUzZDBiNTg4ZjI4YWUyNGU5YTgwNzA1MTc3MzNjZWNlYTYzZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QwNTdmODdjZWFiNDQ1NjQxZWNhMmIyNDEwZjBjZjc3Nzc4MDQ2NmUgYi9mdXp6ZXIvY29ycHVzL2QwNTdmODdjZWFiNDQ1NjQxZWNhMmIyNDEwZjBjZjc3Nzc4MDQ2NmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ0NmFhYQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDA1N2Y4N2NlYWI0NDU2NDFlY2EyYjI0MTBmMGNmNzc3NzgwNDY2ZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QwNzllYzQ5ZjUyYTFiYjcxOGYzYmRkYmU0ZTIwZGFhNDUwYWMwMTAgYi9mdXp6ZXIvY29ycHVzL2QwNzllYzQ5ZjUyYTFiYjcxOGYzYmRkYmU0ZTIwZGFhNDUwYWMwMTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRjOWE0OQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDA3OWVjNDlmNTJhMWJiNzE4ZjNiZGRiZTRlMjBkYWE0NTBhYzAxMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QwN2JkYTM3NGU3ZTg4ZTRjYTAyNmZhNGMwMDQ0M2JlOGNiZDMxNjkgYi9mdXp6ZXIvY29ycHVzL2QwN2JkYTM3NGU3ZTg4ZTRjYTAyNmZhNGMwMDQ0M2JlOGNiZDMxNjkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNkYmQzOQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDA3YmRhMzc0ZTdlODhlNGNhMDI2ZmE0YzAwNDQzYmU4Y2JkMzE2OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QwYjBhMzAxNjU3ZGNmNDgwNWM2ZGNkM2Y0ZmMxNDQ3MDVlMDczODkgYi9mdXp6ZXIvY29ycHVzL2QwYjBhMzAxNjU3ZGNmNDgwNWM2ZGNkM2Y0ZmMxNDQ3MDVlMDczODkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIyYTVlMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDBiMGEzMDE2NTdkY2Y0ODA1YzZkY2QzZjRmYzE0NDcwNWUwNzM4OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QwYjkzZjhlMDBlOTBkMzZjNjYwNjgzOTNhZTBmYjBjNmE5NWRiZTEgYi9mdXp6ZXIvY29ycHVzL2QwYjkzZjhlMDBlOTBkMzZjNjYwNjgzOTNhZTBmYjBjNmE5NWRiZTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThkYTE5ZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDBiOTNmOGUwMGU5MGQzNmM2NjA2ODM5M2FlMGZiMGM2YTk1ZGJlMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QwY2UxZjVlNWVmY2E1NDdiMzc2OGFhMDI3MzVmMjc5ZDdjM2UwM2IgYi9mdXp6ZXIvY29ycHVzL2QwY2UxZjVlNWVmY2E1NDdiMzc2OGFhMDI3MzVmMjc5ZDdjM2UwM2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE0NzY0OQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDBjZTFmNWU1ZWZjYTU0N2IzNzY4YWEwMjczNWYyNzlkN2MzZTAzYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QwZDQ2ZTJkN2Q3YWY0ZDRkMjg1NGIzZTcwMjg3NGU5YWRjMzZmMGQgYi9mdXp6ZXIvY29ycHVzL2QwZDQ2ZTJkN2Q3YWY0ZDRkMjg1NGIzZTcwMjg3NGU5YWRjMzZmMGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VmMzJiMQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDBkNDZlMmQ3ZDdhZjRkNGQyODU0YjNlNzAyODc0ZTlhZGMzNmYwZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QwZjUwNzVmMTFkZjQyYWJhNzVjYzk0YjU4ZGU2ZWU5MjI0Y2UyZGQgYi9mdXp6ZXIvY29ycHVzL2QwZjUwNzVmMTFkZjQyYWJhNzVjYzk0YjU4ZGU2ZWU5MjI0Y2UyZGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI3Nzc5MQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDBmNTA3NWYxMWRmNDJhYmE3NWNjOTRiNThkZTZlZTkyMjRjZTJkZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QxMTQxZTJmMWVmZjMyY2FlYjkzYzJlODY0MjRmOWIzMmVjYWI2NTYgYi9mdXp6ZXIvY29ycHVzL2QxMTQxZTJmMWVmZjMyY2FlYjkzYzJlODY0MjRmOWIzMmVjYWI2NTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ExMDU0MQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDExNDFlMmYxZWZmMzJjYWViOTNjMmU4NjQyNGY5YjMyZWNhYjY1NgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QxMWFhYTNmNzYzOTQ0ZTY2NDYwYzVjOTVjOTk0MGJkNTcwMzY0MDYgYi9mdXp6ZXIvY29ycHVzL2QxMWFhYTNmNzYzOTQ0ZTY2NDYwYzVjOTVjOTk0MGJkNTcwMzY0MDYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJjYjZiMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDExYWFhM2Y3NjM5NDRlNjY0NjBjNWM5NWM5OTQwYmQ1NzAzNjQwNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QxZDgyZjI3NTRmZjAyMDczYmM5ODkwMjNkYjE3OWRmN2ZkNzk3ZjcgYi9mdXp6ZXIvY29ycHVzL2QxZDgyZjI3NTRmZjAyMDczYmM5ODkwMjNkYjE3OWRmN2ZkNzk3ZjcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcyYTk2MQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDFkODJmMjc1NGZmMDIwNzNiYzk4OTAyM2RiMTc5ZGY3ZmQ3OTdmNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QxZTMwMzVjOTQzY2Y1N2U5OTY1YTNhMzBhMmE1YWJiNzg3ZThkZDggYi9mdXp6ZXIvY29ycHVzL2QxZTMwMzVjOTQzY2Y1N2U5OTY1YTNhMzBhMmE1YWJiNzg3ZThkZDgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE5NmM4NAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDFlMzAzNWM5NDNjZjU3ZTk5NjVhM2EzMGEyYTVhYmI3ODdlOGRkOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QxZWQ4YjdiZjAwMjY0N2VkNTUyYzExNWYyYWNjMDQ5MGE4MjhmMzYgYi9mdXp6ZXIvY29ycHVzL2QxZWQ4YjdiZjAwMjY0N2VkNTUyYzExNWYyYWNjMDQ5MGE4MjhmMzYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVkOWE0MAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDFlZDhiN2JmMDAyNjQ3ZWQ1NTJjMTE1ZjJhY2MwNDkwYTgyOGYzNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QxZjEzODYzZTNlYjBhN2E4NWMxMmRiYTQ0YWIxNmM2NjZjY2EwMTkgYi9mdXp6ZXIvY29ycHVzL2QxZjEzODYzZTNlYjBhN2E4NWMxMmRiYTQ0YWIxNmM2NjZjY2EwMTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlhYWU2ZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDFmMTM4NjNlM2ViMGE3YTg1YzEyZGJhNDRhYjE2YzY2NmNjYTAxOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QyMGE0NGQ4MGVlMmJhMmM0ZDk3MzUyZTlmMGZlN2Y5NTBiNzA2ODcgYi9mdXp6ZXIvY29ycHVzL2QyMGE0NGQ4MGVlMmJhMmM0ZDk3MzUyZTlmMGZlN2Y5NTBiNzA2ODcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNjYWIzYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDIwYTQ0ZDgwZWUyYmEyYzRkOTczNTJlOWYwZmU3Zjk1MGI3MDY4NwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QyNDgyNjdjODE4NWVhZWE0NDI1NjkxYjk2ZWZjMzYwMjgyNzNhOWQgYi9mdXp6ZXIvY29ycHVzL2QyNDgyNjdjODE4NWVhZWE0NDI1NjkxYjk2ZWZjMzYwMjgyNzNhOWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM0NzMzYQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDI0ODI2N2M4MTg1ZWFlYTQ0MjU2OTFiOTZlZmMzNjAyODI3M2E5ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QyNGQ5ZWZmN2ZjZGY2ZjRhNDBmMGQ2ZjFlMTgwOGEzM2Y3OWUyMzcgYi9mdXp6ZXIvY29ycHVzL2QyNGQ5ZWZmN2ZjZGY2ZjRhNDBmMGQ2ZjFlMTgwOGEzM2Y3OWUyMzcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ1ZjBiZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDI0ZDllZmY3ZmNkZjZmNGE0MGYwZDZmMWUxODA4YTMzZjc5ZTIzNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QyNmMwZmNkMjYzN2FiYjMzYjc1ZDAzMDdlM2Y1MGIwMmE3ZjViOGEgYi9mdXp6ZXIvY29ycHVzL2QyNmMwZmNkMjYzN2FiYjMzYjc1ZDAzMDdlM2Y1MGIwMmE3ZjViOGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg4YThjYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDI2YzBmY2QyNjM3YWJiMzNiNzVkMDMwN2UzZjUwYjAyYTdmNWI4YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QyNzAyOTFkMTMxZDZiOGVjYmJjZmMxOTQyODk0ZGI5YmU1Yjc0ZTIgYi9mdXp6ZXIvY29ycHVzL2QyNzAyOTFkMTMxZDZiOGVjYmJjZmMxOTQyODk0ZGI5YmU1Yjc0ZTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg2ZTJjNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDI3MDI5MWQxMzFkNmI4ZWNiYmNmYzE5NDI4OTRkYjliZTViNzRlMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QyODMwYTZmOTY2NjVjZWJiOGI4Mzg5ZGM0NDAwZWMxOTIxZTgyOGMgYi9mdXp6ZXIvY29ycHVzL2QyODMwYTZmOTY2NjVjZWJiOGI4Mzg5ZGM0NDAwZWMxOTIxZTgyOGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhiNjE2NgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDI4MzBhNmY5NjY2NWNlYmI4YjgzODlkYzQ0MDBlYzE5MjFlODI4YwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QyYTExNGY2ZDZlNzIwOWRiYmUxNWE2MDMxNjRmYjBkZDBmODM1N2YgYi9mdXp6ZXIvY29ycHVzL2QyYTExNGY2ZDZlNzIwOWRiYmUxNWE2MDMxNjRmYjBkZDBmODM1N2YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDViNjdhZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDJhMTE0ZjZkNmU3MjA5ZGJiZTE1YTYwMzE2NGZiMGRkMGY4MzU3ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QyYTdlZGJlMjVhNzYxMWFlMWZhMTllZDAyMDBlNjdkMjBmMzA4NjkgYi9mdXp6ZXIvY29ycHVzL2QyYTdlZGJlMjVhNzYxMWFlMWZhMTllZDAyMDBlNjdkMjBmMzA4NjkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIzNDAzMQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDJhN2VkYmUyNWE3NjExYWUxZmExOWVkMDIwMGU2N2QyMGYzMDg2OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QyYjFlZjZjODk0NGYyZTg4MWQ4NDY3YWM4YmQ5OWRkZDgzYTk0NWEgYi9mdXp6ZXIvY29ycHVzL2QyYjFlZjZjODk0NGYyZTg4MWQ4NDY3YWM4YmQ5OWRkZDgzYTk0NWEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUwZjI4YQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDJiMWVmNmM4OTQ0ZjJlODgxZDg0NjdhYzhiZDk5ZGRkODNhOTQ1YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QzMGU0OTM1N2ZhMmRhNGZmZGY0NWFlYzEzOTY4YTFiZjAyOGVmM2QgYi9mdXp6ZXIvY29ycHVzL2QzMGU0OTM1N2ZhMmRhNGZmZGY0NWFlYzEzOTY4YTFiZjAyOGVmM2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VhNDkwZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDMwZTQ5MzU3ZmEyZGE0ZmZkZjQ1YWVjMTM5NjhhMWJmMDI4ZWYzZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QzMWMwMWI1ZDc5MTg0NGU1NjNiZjU5ZDg4YmViNDZhZGM1OTQ5OWYgYi9mdXp6ZXIvY29ycHVzL2QzMWMwMWI1ZDc5MTg0NGU1NjNiZjU5ZDg4YmViNDZhZGM1OTQ5OWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY0YTlkNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDMxYzAxYjVkNzkxODQ0ZTU2M2JmNTlkODhiZWI0NmFkYzU5NDk5ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QzMjU1ZjZkY2Y0NGZmM2ZjZTM4MzJlNjhiMDVkZjdlZDJlMmMwOTYgYi9mdXp6ZXIvY29ycHVzL2QzMjU1ZjZkY2Y0NGZmM2ZjZTM4MzJlNjhiMDVkZjdlZDJlMmMwOTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkxYWZmMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDMyNTVmNmRjZjQ0ZmYzZmNlMzgzMmU2OGIwNWRmN2VkMmUyYzA5NgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QzMjYwNzEzYjg2MDNiMzM3Yzc3NmU5NWJlMzgwZGY0ZTNiZjUxZDYgYi9mdXp6ZXIvY29ycHVzL2QzMjYwNzEzYjg2MDNiMzM3Yzc3NmU5NWJlMzgwZGY0ZTNiZjUxZDYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM0MmYzNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDMyNjA3MTNiODYwM2IzMzdjNzc2ZTk1YmUzODBkZjRlM2JmNTFkNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QzM2ZkYTAyNDdiMDI2OWQyMjNhNDU4MTdmNmE1ZmRmZWYyZTgzODAgYi9mdXp6ZXIvY29ycHVzL2QzM2ZkYTAyNDdiMDI2OWQyMjNhNDU4MTdmNmE1ZmRmZWYyZTgzODAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JiNzY3ZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDMzZmRhMDI0N2IwMjY5ZDIyM2E0NTgxN2Y2YTVmZGZlZjJlODM4MApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QzNGZkMzMyZDYxZTI4NjM2NzIzMDcwOTEyZTg3M2Q2ZjA4NmMxNzkgYi9mdXp6ZXIvY29ycHVzL2QzNGZkMzMyZDYxZTI4NjM2NzIzMDcwOTEyZTg3M2Q2ZjA4NmMxNzkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNiZmM5NgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDM0ZmQzMzJkNjFlMjg2MzY3MjMwNzA5MTJlODczZDZmMDg2YzE3OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QzNWU5Nzc4MWIxM2NlZGUyOGMyYzhhMmRmOTZiMmNhMjk5NTk5MDUgYi9mdXp6ZXIvY29ycHVzL2QzNWU5Nzc4MWIxM2NlZGUyOGMyYzhhMmRmOTZiMmNhMjk5NTk5MDUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIwYzdkYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDM1ZTk3NzgxYjEzY2VkZTI4YzJjOGEyZGY5NmIyY2EyOTk1OTkwNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QzOTQ1YTEwNDc2ODBkNTYwYTU3YjgzNzkyZTUyODM4ZjRjNzdlMjMgYi9mdXp6ZXIvY29ycHVzL2QzOTQ1YTEwNDc2ODBkNTYwYTU3YjgzNzkyZTUyODM4ZjRjNzdlMjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUwNzQ1NAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDM5NDVhMTA0NzY4MGQ1NjBhNTdiODM3OTJlNTI4MzhmNGM3N2UyMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QzYTI3NTFjODZiMjg1OTZjNWM4ZDVkOWM1NzIxM2YyYWFkZDJmMjQgYi9mdXp6ZXIvY29ycHVzL2QzYTI3NTFjODZiMjg1OTZjNWM4ZDVkOWM1NzIxM2YyYWFkZDJmMjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcyZTQ2MwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDNhMjc1MWM4NmIyODU5NmM1YzhkNWQ5YzU3MjEzZjJhYWRkMmYyNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QzYWIxNDllNWMxY2I2MDk4NDJmNTViNTY1Y2I1MTYxNDU2NzhjYWYgYi9mdXp6ZXIvY29ycHVzL2QzYWIxNDllNWMxY2I2MDk4NDJmNTViNTY1Y2I1MTYxNDU2NzhjYWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZhMGZhZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDNhYjE0OWU1YzFjYjYwOTg0MmY1NWI1NjVjYjUxNjE0NTY3OGNhZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QzYzlhYTBmN2VjYTU3N2FhNDFlNWNlN2QxMTg4OTBiZmIzM2FiZjcgYi9mdXp6ZXIvY29ycHVzL2QzYzlhYTBmN2VjYTU3N2FhNDFlNWNlN2QxMTg4OTBiZmIzM2FiZjcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg1ZWM4ZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDNjOWFhMGY3ZWNhNTc3YWE0MWU1Y2U3ZDExODg5MGJmYjMzYWJmNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2QzZDljNjQzNzhhZGRlYzYwNTJiM2UyMmQzYmZlMmNkYjU5ODIyZWYgYi9mdXp6ZXIvY29ycHVzL2QzZDljNjQzNzhhZGRlYzYwNTJiM2UyMmQzYmZlMmNkYjU5ODIyZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJhNDYxMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDNkOWM2NDM3OGFkZGVjNjA1MmIzZTIyZDNiZmUyY2RiNTk4MjJlZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q0MDQ4MzY2YjI1NjFhYmZlMmZlZDNjYjBlNGI2MjQ4NjA2ZTU5ZmIgYi9mdXp6ZXIvY29ycHVzL2Q0MDQ4MzY2YjI1NjFhYmZlMmZlZDNjYjBlNGI2MjQ4NjA2ZTU5ZmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk5MDQ0MQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDQwNDgzNjZiMjU2MWFiZmUyZmVkM2NiMGU0YjYyNDg2MDZlNTlmYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q0MGJlYWZiYTA4OGFhYTQ3ZWVlZTJlMTI1OTgzZjI1MzEwNGEzYTQgYi9mdXp6ZXIvY29ycHVzL2Q0MGJlYWZiYTA4OGFhYTQ3ZWVlZTJlMTI1OTgzZjI1MzEwNGEzYTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZkMDZlMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDQwYmVhZmJhMDg4YWFhNDdlZWVlMmUxMjU5ODNmMjUzMTA0YTNhNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q0MTRjY2YyMzc1OWVlZGVhYTJkNDJkYjI5YjIxNTE1OGVlMjM3NjQgYi9mdXp6ZXIvY29ycHVzL2Q0MTRjY2YyMzc1OWVlZGVhYTJkNDJkYjI5YjIxNTE1OGVlMjM3NjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EzYjQwYQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDQxNGNjZjIzNzU5ZWVkZWFhMmQ0MmRiMjliMjE1MTU4ZWUyMzc2NApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q0NTZjZWMyNTc1YWEyN2U1ZDRiODVmYjcwZjhhZmE5NzFkYjMzMzAgYi9mdXp6ZXIvY29ycHVzL2Q0NTZjZWMyNTc1YWEyN2U1ZDRiODVmYjcwZjhhZmE5NzFkYjMzMzAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNkNzVjYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDQ1NmNlYzI1NzVhYTI3ZTVkNGI4NWZiNzBmOGFmYTk3MWRiMzMzMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q0OWJiN2YzODU1ZDdmOTg3OGM5ODY0YjkxNjU1OGE0MzllNTNjZjYgYi9mdXp6ZXIvY29ycHVzL2Q0OWJiN2YzODU1ZDdmOTg3OGM5ODY0YjkxNjU1OGE0MzllNTNjZjYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhMGU4OQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDQ5YmI3ZjM4NTVkN2Y5ODc4Yzk4NjRiOTE2NTU4YTQzOWU1M2NmNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q0ZTYyMDMxMzAzNDQwNjFlY2JiZWViYTU2ZDUwMWU0NmU5ZjBjMDIgYi9mdXp6ZXIvY29ycHVzL2Q0ZTYyMDMxMzAzNDQwNjFlY2JiZWViYTU2ZDUwMWU0NmU5ZjBjMDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRmMzZmMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDRlNjIwMzEzMDM0NDA2MWVjYmJlZWJhNTZkNTAxZTQ2ZTlmMGMwMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q0ZWIzNjdhMzYwOGQyNzJlMWJjMTA1MzMwMGM4ZjVlMDA0NTg2MmYgYi9mdXp6ZXIvY29ycHVzL2Q0ZWIzNjdhMzYwOGQyNzJlMWJjMTA1MzMwMGM4ZjVlMDA0NTg2MmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdlMmNlNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDRlYjM2N2EzNjA4ZDI3MmUxYmMxMDUzMzAwYzhmNWUwMDQ1ODYyZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q0ZWViYTRkMTBkMGRmNmIzN2RmNzBkMTNiMzQ2ZDZlNjNjNTM4MDIgYi9mdXp6ZXIvY29ycHVzL2Q0ZWViYTRkMTBkMGRmNmIzN2RmNzBkMTNiMzQ2ZDZlNjNjNTM4MDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc1ZDQ4MgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDRlZWJhNGQxMGQwZGY2YjM3ZGY3MGQxM2IzNDZkNmU2M2M1MzgwMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q0ZWYyZDcyM2MyNjNkZDFmYWY2M2RlNmY2Y2VmNWI2ODBjNzA0MzUgYi9mdXp6ZXIvY29ycHVzL2Q0ZWYyZDcyM2MyNjNkZDFmYWY2M2RlNmY2Y2VmNWI2ODBjNzA0MzUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEwNWJmNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDRlZjJkNzIzYzI2M2RkMWZhZjYzZGU2ZjZjZWY1YjY4MGM3MDQzNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q1MzhlZDM4YTYwMjFlZTEzNGQ1MTI5MDYwNThmNjkyYTFmN2I0MDkgYi9mdXp6ZXIvY29ycHVzL2Q1MzhlZDM4YTYwMjFlZTEzNGQ1MTI5MDYwNThmNjkyYTFmN2I0MDkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YyNDBkMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDUzOGVkMzhhNjAyMWVlMTM0ZDUxMjkwNjA1OGY2OTJhMWY3YjQwOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q1M2Y4YjgwYjc2NjUxYzBhNzFmYzc4NmQ1OThhYjYwNTg5Y2EzMWUgYi9mdXp6ZXIvY29ycHVzL2Q1M2Y4YjgwYjc2NjUxYzBhNzFmYzc4NmQ1OThhYjYwNTg5Y2EzMWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNiY2RkMQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDUzZjhiODBiNzY2NTFjMGE3MWZjNzg2ZDU5OGFiNjA1ODljYTMxZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q1NjRlMDNkNmI4M2ZhNWFkZTVmZWU0NDk2ZmM2Y2JkNGJjZGM1MDMgYi9mdXp6ZXIvY29ycHVzL2Q1NjRlMDNkNmI4M2ZhNWFkZTVmZWU0NDk2ZmM2Y2JkNGJjZGM1MDMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ3NjBlNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDU2NGUwM2Q2YjgzZmE1YWRlNWZlZTQ0OTZmYzZjYmQ0YmNkYzUwMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q1ODRhMGQyNjk0ZjU4YWJlMWMyOTMxNjcyMDMxOWNiMzJhMzc0NWIgYi9mdXp6ZXIvY29ycHVzL2Q1ODRhMGQyNjk0ZjU4YWJlMWMyOTMxNjcyMDMxOWNiMzJhMzc0NWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg1MTFhMQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDU4NGEwZDI2OTRmNThhYmUxYzI5MzE2NzIwMzE5Y2IzMmEzNzQ1YgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q1OTI0MTA2ZmM4M2IwZGEwMWRmYzc2ZWFiM2NhMWE3ZjY5MzY4YzEgYi9mdXp6ZXIvY29ycHVzL2Q1OTI0MTA2ZmM4M2IwZGEwMWRmYzc2ZWFiM2NhMWE3ZjY5MzY4YzEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk5NGRjNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDU5MjQxMDZmYzgzYjBkYTAxZGZjNzZlYWIzY2ExYTdmNjkzNjhjMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q1YTA0ZTMwZjZkMGI0YzhiOTNhYmE0OGMwMzEyOGQ0OTBjOTMyOTkgYi9mdXp6ZXIvY29ycHVzL2Q1YTA0ZTMwZjZkMGI0YzhiOTNhYmE0OGMwMzEyOGQ0OTBjOTMyOTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM4NmIyNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDVhMDRlMzBmNmQwYjRjOGI5M2FiYTQ4YzAzMTI4ZDQ5MGM5MzI5OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q1YjYzYmJhOTc1NjM3ZTlhMDVkYzA3NzViMmEyNTI2MjcyMWEwMTMgYi9mdXp6ZXIvY29ycHVzL2Q1YjYzYmJhOTc1NjM3ZTlhMDVkYzA3NzViMmEyNTI2MjcyMWEwMTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIwZjZhOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDViNjNiYmE5NzU2MzdlOWEwNWRjMDc3NWIyYTI1MjYyNzIxYTAxMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q2MTdjMTU2ZjhhZGQxYWNhOWY5ZWQ5ZWNmNmYxNzg0MzQ4NDRjMWQgYi9mdXp6ZXIvY29ycHVzL2Q2MTdjMTU2ZjhhZGQxYWNhOWY5ZWQ5ZWNmNmYxNzg0MzQ4NDRjMWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNjNTcxYQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDYxN2MxNTZmOGFkZDFhY2E5ZjllZDllY2Y2ZjE3ODQzNDg0NGMxZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q2MjdhNWJmYTgwMzFhMTVmOTFiNGMxZTUzNTg0ZDkxMmY0OGVhNDEgYi9mdXp6ZXIvY29ycHVzL2Q2MjdhNWJmYTgwMzFhMTVmOTFiNGMxZTUzNTg0ZDkxMmY0OGVhNDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFiYmUxMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDYyN2E1YmZhODAzMWExNWY5MWI0YzFlNTM1ODRkOTEyZjQ4ZWE0MQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q2Mjk5ZDEwNjcxMzA5MGU3ZTAzMWY3OTkxMThiZTc4ZjFiOTdkOWMgYi9mdXp6ZXIvY29ycHVzL2Q2Mjk5ZDEwNjcxMzA5MGU3ZTAzMWY3OTkxMThiZTc4ZjFiOTdkOWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ1MjllNgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDYyOTlkMTA2NzEzMDkwZTdlMDMxZjc5OTExOGJlNzhmMWI5N2Q5YwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q2NmQ4YmE1MjA3MjQ5MDU1MGYzNWYyMmE4MzQ4OGM3YzI0MmYzMDQgYi9mdXp6ZXIvY29ycHVzL2Q2NmQ4YmE1MjA3MjQ5MDU1MGYzNWYyMmE4MzQ4OGM3YzI0MmYzMDQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg0MzdiNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDY2ZDhiYTUyMDcyNDkwNTUwZjM1ZjIyYTgzNDg4YzdjMjQyZjMwNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q2N2VlODQ3ZTYxNzBmNjNhNzExOTAzMzVkMjc0YjFjYWYxZDI5NDggYi9mdXp6ZXIvY29ycHVzL2Q2N2VlODQ3ZTYxNzBmNjNhNzExOTAzMzVkMjc0YjFjYWYxZDI5NDgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI5MmY1MAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDY3ZWU4NDdlNjE3MGY2M2E3MTE5MDMzNWQyNzRiMWNhZjFkMjk0OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q2ODA4N2I0NTM2NjljY2U0MTk1ZmJhMGI5NzIwMzhkN2ZjNThiMDggYi9mdXp6ZXIvY29ycHVzL2Q2ODA4N2I0NTM2NjljY2U0MTk1ZmJhMGI5NzIwMzhkN2ZjNThiMDgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg1N2E1YQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDY4MDg3YjQ1MzY2OWNjZTQxOTVmYmEwYjk3MjAzOGQ3ZmM1OGIwOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q2YjUzZDUzYTg4Yjc5NDJhYWE5NmUxNDA5MjliMDAwOWY5MDdkYjIgYi9mdXp6ZXIvY29ycHVzL2Q2YjUzZDUzYTg4Yjc5NDJhYWE5NmUxNDA5MjliMDAwOWY5MDdkYjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRmZWZiNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDZiNTNkNTNhODhiNzk0MmFhYTk2ZTE0MDkyOWIwMDA5ZjkwN2RiMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q2Y2U5MmMwY2VhY2E4NTIyZWY2NDY1MzEwM2YzZDhhMTZiNTBiYjcgYi9mdXp6ZXIvY29ycHVzL2Q2Y2U5MmMwY2VhY2E4NTIyZWY2NDY1MzEwM2YzZDhhMTZiNTBiYjcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc1MzMyNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDZjZTkyYzBjZWFjYTg1MjJlZjY0NjUzMTAzZjNkOGExNmI1MGJiNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q2ZGQyM2I0NzEwODhmODg4OWQ4NTA0ZjE1MzAxMWI2N2RjZDZkZTIgYi9mdXp6ZXIvY29ycHVzL2Q2ZGQyM2I0NzEwODhmODg4OWQ4NTA0ZjE1MzAxMWI2N2RjZDZkZTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUwZjVjMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDZkZDIzYjQ3MTA4OGY4ODg5ZDg1MDRmMTUzMDExYjY3ZGNkNmRlMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q2ZWIwY2E3MmJlYmQwZGIwZDQzNDM5ODg1YWQxNzJhYjJjOWI1YjggYi9mdXp6ZXIvY29ycHVzL2Q2ZWIwY2E3MmJlYmQwZGIwZDQzNDM5ODg1YWQxNzJhYjJjOWI1YjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYyMmJmNgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDZlYjBjYTcyYmViZDBkYjBkNDM0Mzk4ODVhZDE3MmFiMmM5YjViOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q2ZjRhOWFiYzc0Y2NiOGNkODdmMWU1OTIwNGY3ZGYzYTI1MzBmY2YgYi9mdXp6ZXIvY29ycHVzL2Q2ZjRhOWFiYzc0Y2NiOGNkODdmMWU1OTIwNGY3ZGYzYTI1MzBmY2YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUxNjRiOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDZmNGE5YWJjNzRjY2I4Y2Q4N2YxZTU5MjA0ZjdkZjNhMjUzMGZjZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q2ZmQwYmU3YTU2ZjI2N2M2YzFiYjNmMDA1NTFkMDY4ZTc1ZGNlMzEgYi9mdXp6ZXIvY29ycHVzL2Q2ZmQwYmU3YTU2ZjI2N2M2YzFiYjNmMDA1NTFkMDY4ZTc1ZGNlMzEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIwOGExMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDZmZDBiZTdhNTZmMjY3YzZjMWJiM2YwMDU1MWQwNjhlNzVkY2UzMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q3MTQ5NmE2Yzk3ZTEwNTc0YzBhNjM3ODMzNDIzN2MyNjkxN2IzZTYgYi9mdXp6ZXIvY29ycHVzL2Q3MTQ5NmE2Yzk3ZTEwNTc0YzBhNjM3ODMzNDIzN2MyNjkxN2IzZTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJmMjY1YQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDcxNDk2YTZjOTdlMTA1NzRjMGE2Mzc4MzM0MjM3YzI2OTE3YjNlNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q3MWFjODQ5MTkzNzhlMjYzZTdmOGRlMzYzZjA2ZTAxYTczYWQ2MTQgYi9mdXp6ZXIvY29ycHVzL2Q3MWFjODQ5MTkzNzhlMjYzZTdmOGRlMzYzZjA2ZTAxYTczYWQ2MTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ2OTQ1NQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDcxYWM4NDkxOTM3OGUyNjNlN2Y4ZGUzNjNmMDZlMDFhNzNhZDYxNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q3MWVkMDcwZGZhMWEyMzQ1MWZjY2M0NWJkMjg2YTY0MmQyZDBmMjUgYi9mdXp6ZXIvY29ycHVzL2Q3MWVkMDcwZGZhMWEyMzQ1MWZjY2M0NWJkMjg2YTY0MmQyZDBmMjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJlZTJmZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDcxZWQwNzBkZmExYTIzNDUxZmNjYzQ1YmQyODZhNjQyZDJkMGYyNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q3MjY1ZTNmNjlkNjk1Y2UxZmVmYzg5MzA3OGY2NjY1MTY2Njc0MTggYi9mdXp6ZXIvY29ycHVzL2Q3MjY1ZTNmNjlkNjk1Y2UxZmVmYzg5MzA3OGY2NjY1MTY2Njc0MTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFmYjVjMQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDcyNjVlM2Y2OWQ2OTVjZTFmZWZjODkzMDc4ZjY2NjUxNjY2NzQxOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q3Mjg4ODAzOWUxNzNmYjU5MTE2YjBiYWZlOWU1YWY2YWI0NmRiYjIgYi9mdXp6ZXIvY29ycHVzL2Q3Mjg4ODAzOWUxNzNmYjU5MTE2YjBiYWZlOWU1YWY2YWI0NmRiYjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFhY2RiZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDcyODg4MDM5ZTE3M2ZiNTkxMTZiMGJhZmU5ZTVhZjZhYjQ2ZGJiMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q3NWI5MjczNDE2MTgwOWU4MmVhNjJlMGJlZDI2YjI0ODFmMzAzZjggYi9mdXp6ZXIvY29ycHVzL2Q3NWI5MjczNDE2MTgwOWU4MmVhNjJlMGJlZDI2YjI0ODFmMzAzZjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEzNDkyNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDc1YjkyNzM0MTYxODA5ZTgyZWE2MmUwYmVkMjZiMjQ4MWYzMDNmOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q3NWUyNDA3NmM3MjE3ZjI5YzlmYjhmYzkxNjlkZmM5NWExMTllZGUgYi9mdXp6ZXIvY29ycHVzL2Q3NWUyNDA3NmM3MjE3ZjI5YzlmYjhmYzkxNjlkZmM5NWExMTllZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJhZmYwNgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDc1ZTI0MDc2YzcyMTdmMjljOWZiOGZjOTE2OWRmYzk1YTExOWVkZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q3ODFmY2VlYTc2MmY1YzcxNmRhZTUyZWI5NGY5ZGZiNjc1MTRlNjIgYi9mdXp6ZXIvY29ycHVzL2Q3ODFmY2VlYTc2MmY1YzcxNmRhZTUyZWI5NGY5ZGZiNjc1MTRlNjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U0ZmZlYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDc4MWZjZWVhNzYyZjVjNzE2ZGFlNTJlYjk0ZjlkZmI2NzUxNGU2MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q3ODllNGZmN2QwNTYxZDQ3MzU0MzEzYWQ1MzQ3NzhiM2FkODMyZTMgYi9mdXp6ZXIvY29ycHVzL2Q3ODllNGZmN2QwNTYxZDQ3MzU0MzEzYWQ1MzQ3NzhiM2FkODMyZTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ3NzgyOQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDc4OWU0ZmY3ZDA1NjFkNDczNTQzMTNhZDUzNDc3OGIzYWQ4MzJlMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q3OWE0Yjk2MjZiMzYzMTE5YTk5MGNjMjU5MzI4NjBjOGY5N2E3ZDYgYi9mdXp6ZXIvY29ycHVzL2Q3OWE0Yjk2MjZiMzYzMTE5YTk5MGNjMjU5MzI4NjBjOGY5N2E3ZDYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBhNzcyYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDc5YTRiOTYyNmIzNjMxMTlhOTkwY2MyNTkzMjg2MGM4Zjk3YTdkNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q3YjRiZGU3ODdkYWFjYTdjZmViZDg2MGUzNTc5NDA0YmNmZTAyMDcgYi9mdXp6ZXIvY29ycHVzL2Q3YjRiZGU3ODdkYWFjYTdjZmViZDg2MGUzNTc5NDA0YmNmZTAyMDcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQwZmI5OAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDdiNGJkZTc4N2RhYWNhN2NmZWJkODYwZTM1Nzk0MDRiY2ZlMDIwNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q3YzVkMTg1YmE5OGExZjc2ZGJkOTdkZTUwZWEyODE4NzdlY2JmNGEgYi9mdXp6ZXIvY29ycHVzL2Q3YzVkMTg1YmE5OGExZjc2ZGJkOTdkZTUwZWEyODE4NzdlY2JmNGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZkMzQ5NgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDdjNWQxODViYTk4YTFmNzZkYmQ5N2RlNTBlYTI4MTg3N2VjYmY0YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q4MDkzMTRjZWY5YzMyNjQ4NjhiYTYzMTgzZDgxODBiZDEyYzkzZGYgYi9mdXp6ZXIvY29ycHVzL2Q4MDkzMTRjZWY5YzMyNjQ4NjhiYTYzMTgzZDgxODBiZDEyYzkzZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFmMTY2ZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDgwOTMxNGNlZjljMzI2NDg2OGJhNjMxODNkODE4MGJkMTJjOTNkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q4NDhmYTFjY2Y4OWQ5OGRmNTdhMmUyYzZhNDA4NjlmODFiOTk3MWQgYi9mdXp6ZXIvY29ycHVzL2Q4NDhmYTFjY2Y4OWQ5OGRmNTdhMmUyYzZhNDA4NjlmODFiOTk3MWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA0NDBmYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDg0OGZhMWNjZjg5ZDk4ZGY1N2EyZTJjNmE0MDg2OWY4MWI5OTcxZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q4NTYxN2NmNjcyNmQ0NWM1YjlhNGM0NmYxYmI3ZTI1MmFjZWE0YjEgYi9mdXp6ZXIvY29ycHVzL2Q4NTYxN2NmNjcyNmQ0NWM1YjlhNGM0NmYxYmI3ZTI1MmFjZWE0YjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMzNjQ4NAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDg1NjE3Y2Y2NzI2ZDQ1YzViOWE0YzQ2ZjFiYjdlMjUyYWNlYTRiMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q4NWQwZGJjNmQ2N2VlMWI2OWJiOGYxMWZmZmVhMTM0NDQ5NWMzZmEgYi9mdXp6ZXIvY29ycHVzL2Q4NWQwZGJjNmQ2N2VlMWI2OWJiOGYxMWZmZmVhMTM0NDQ5NWMzZmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ5NTRiNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDg1ZDBkYmM2ZDY3ZWUxYjY5YmI4ZjExZmZmZWExMzQ0NDk1YzNmYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q4NjQ4NDZhNjVjMWJlNGEwYjA2OTg0NTE2YjI5Njg1ZWI5MDcwNzAgYi9mdXp6ZXIvY29ycHVzL2Q4NjQ4NDZhNjVjMWJlNGEwYjA2OTg0NTE2YjI5Njg1ZWI5MDcwNzAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU1NWI0ZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDg2NDg0NmE2NWMxYmU0YTBiMDY5ODQ1MTZiMjk2ODVlYjkwNzA3MApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q4NzUzNjhiY2RkNzVkNjYyYzkzZDJjNTM3YmZmYmRiNzI4MDRhOWEgYi9mdXp6ZXIvY29ycHVzL2Q4NzUzNjhiY2RkNzVkNjYyYzkzZDJjNTM3YmZmYmRiNzI4MDRhOWEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM0YzY1NQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDg3NTM2OGJjZGQ3NWQ2NjJjOTNkMmM1MzdiZmZiZGI3MjgwNGE5YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q4ODhhMzllZWM2YTc0ODQ0NDE2ZjgwZmU5NjY4MzIyYTJhOGEwZjggYi9mdXp6ZXIvY29ycHVzL2Q4ODhhMzllZWM2YTc0ODQ0NDE2ZjgwZmU5NjY4MzIyYTJhOGEwZjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk3ZDIwNgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDg4OGEzOWVlYzZhNzQ4NDQ0MTZmODBmZTk2NjgzMjJhMmE4YTBmOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q4YTVlMDZmNTNkYTYzMDA3ZjQxMDE5OGQ4NzAwZDZmM2IxNWM3NWYgYi9mdXp6ZXIvY29ycHVzL2Q4YTVlMDZmNTNkYTYzMDA3ZjQxMDE5OGQ4NzAwZDZmM2IxNWM3NWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIzNjQ3MwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDhhNWUwNmY1M2RhNjMwMDdmNDEwMTk4ZDg3MDBkNmYzYjE1Yzc1ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q4YWUxOTNmNGY2N2ViMmNkZGU2MzUyMjBjZmNhY2FiMGFlOGQwYjQgYi9mdXp6ZXIvY29ycHVzL2Q4YWUxOTNmNGY2N2ViMmNkZGU2MzUyMjBjZmNhY2FiMGFlOGQwYjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVkMmU1NwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDhhZTE5M2Y0ZjY3ZWIyY2RkZTYzNTIyMGNmY2FjYWIwYWU4ZDBiNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q4ZTQ0ZWQyODg3M2EzYTAyYzkyNjE5ODg5NDAyMjdhM2M4ZjU1ODQgYi9mdXp6ZXIvY29ycHVzL2Q4ZTQ0ZWQyODg3M2EzYTAyYzkyNjE5ODg5NDAyMjdhM2M4ZjU1ODQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM4NzlhYQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDhlNDRlZDI4ODczYTNhMDJjOTI2MTk4ODk0MDIyN2EzYzhmNTU4NApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q5M2ZkOTI5MWVlOWFhYzM5ZjNlMGFhOWEwZGY2YmJlZGM4MGY2OWYgYi9mdXp6ZXIvY29ycHVzL2Q5M2ZkOTI5MWVlOWFhYzM5ZjNlMGFhOWEwZGY2YmJlZGM4MGY2OWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFmOWMyNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDkzZmQ5MjkxZWU5YWFjMzlmM2UwYWE5YTBkZjZiYmVkYzgwZjY5ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q5NjBjMGVhYjhmZTA4YzA4ZmYyNDdjMTlhZDBjZDhiZDI2MzVjYTMgYi9mdXp6ZXIvY29ycHVzL2Q5NjBjMGVhYjhmZTA4YzA4ZmYyNDdjMTlhZDBjZDhiZDI2MzVjYTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgxODBmMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDk2MGMwZWFiOGZlMDhjMDhmZjI0N2MxOWFkMGNkOGJkMjYzNWNhMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q5ODU0YzQ2ZWJjNWI5OTA0OGFjOWZkOWIwYWE4MTBmNDE2ZGQ0M2QgYi9mdXp6ZXIvY29ycHVzL2Q5ODU0YzQ2ZWJjNWI5OTA0OGFjOWZkOWIwYWE4MTBmNDE2ZGQ0M2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI2NTA5MwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDk4NTRjNDZlYmM1Yjk5MDQ4YWM5ZmQ5YjBhYTgxMGY0MTZkZDQzZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q5YTQ4YjE0YWEwNTRlY2ZkZTRiOTNjNDMzY2Q4NGI1ODUzODcyNWUgYi9mdXp6ZXIvY29ycHVzL2Q5YTQ4YjE0YWEwNTRlY2ZkZTRiOTNjNDMzY2Q4NGI1ODUzODcyNWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg0NGNjNgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDlhNDhiMTRhYTA1NGVjZmRlNGI5M2M0MzNjZDg0YjU4NTM4NzI1ZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q5Y2FlOGQ3ZjE3OTEyZmE1N2VjNmM1MjE4NDI0ZjUwZjBmODMzMDQgYi9mdXp6ZXIvY29ycHVzL2Q5Y2FlOGQ3ZjE3OTEyZmE1N2VjNmM1MjE4NDI0ZjUwZjBmODMzMDQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI5MzU3MAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDljYWU4ZDdmMTc5MTJmYTU3ZWM2YzUyMTg0MjRmNTBmMGY4MzMwNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q5ZGExNWU4NjUyNjg3MGE1ZGUzZDM1OTZjODU3MDcwZGQxYTZhNzggYi9mdXp6ZXIvY29ycHVzL2Q5ZGExNWU4NjUyNjg3MGE1ZGUzZDM1OTZjODU3MDcwZGQxYTZhNzgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlmZmM4NgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDlkYTE1ZTg2NTI2ODcwYTVkZTNkMzU5NmM4NTcwNzBkZDFhNmE3OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q5ZjUxNjQ4MjAxNDdmYTZlMWI3Y2YyOGI5NDkwNTNhODIwOTUxMDcgYi9mdXp6ZXIvY29ycHVzL2Q5ZjUxNjQ4MjAxNDdmYTZlMWI3Y2YyOGI5NDkwNTNhODIwOTUxMDcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNiNjEzOQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDlmNTE2NDgyMDE0N2ZhNmUxYjdjZjI4Yjk0OTA1M2E4MjA5NTEwNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Q5ZmU5OTY1MDg0YWFkMDA4MWQ1ZmIxYmI4NThlODVlMmFkNmNiMTYgYi9mdXp6ZXIvY29ycHVzL2Q5ZmU5OTY1MDg0YWFkMDA4MWQ1ZmIxYmI4NThlODVlMmFkNmNiMTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNkZjUzZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZDlmZTk5NjUwODRhYWQwMDgxZDVmYjFiYjg1OGU4NWUyYWQ2Y2IxNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RhMDdhMTEzYjZiM2NmNzAxOTE5ODk1ZWQ2MjFkMjA5MzIyODUwNWEgYi9mdXp6ZXIvY29ycHVzL2RhMDdhMTEzYjZiM2NmNzAxOTE5ODk1ZWQ2MjFkMjA5MzIyODUwNWEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE4ZWVjOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGEwN2ExMTNiNmIzY2Y3MDE5MTk4OTVlZDYyMWQyMDkzMjI4NTA1YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RhMGRhNjhhODJjN2JkM2EwZjA5NzI2MDcwNGFlYTlmNjMwNDFmMDkgYi9mdXp6ZXIvY29ycHVzL2RhMGRhNjhhODJjN2JkM2EwZjA5NzI2MDcwNGFlYTlmNjMwNDFmMDkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVlYjk0OQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGEwZGE2OGE4MmM3YmQzYTBmMDk3MjYwNzA0YWVhOWY2MzA0MWYwOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RhMTAwMmQyOGMwZjFhNTE1NjVmNjRhNzllNjIzMTU0OTA4OTIyMmQgYi9mdXp6ZXIvY29ycHVzL2RhMTAwMmQyOGMwZjFhNTE1NjVmNjRhNzllNjIzMTU0OTA4OTIyMmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFhYTEzMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGExMDAyZDI4YzBmMWE1MTU2NWY2NGE3OWU2MjMxNTQ5MDg5MjIyZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RhMWJmZDQwNjUwMmVlODM2MWFjZWNhODkyNmM2OGY2ODFmNzJmY2MgYi9mdXp6ZXIvY29ycHVzL2RhMWJmZDQwNjUwMmVlODM2MWFjZWNhODkyNmM2OGY2ODFmNzJmY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEwNzBlOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGExYmZkNDA2NTAyZWU4MzYxYWNlY2E4OTI2YzY4ZjY4MWY3MmZjYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RhMmYxM2Y1MjYxYzhkNDllMzM4ZTllZGVlOGJkYTA4NTNiMWFjYzkgYi9mdXp6ZXIvY29ycHVzL2RhMmYxM2Y1MjYxYzhkNDllMzM4ZTllZGVlOGJkYTA4NTNiMWFjYzkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE5MWJhYQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGEyZjEzZjUyNjFjOGQ0OWUzMzhlOWVkZWU4YmRhMDg1M2IxYWNjOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RhN2VmYjhhYjc5YjY3ODJkMzY0ZmYyYWIwM2I1NTk0NGQxMTQ2MGMgYi9mdXp6ZXIvY29ycHVzL2RhN2VmYjhhYjc5YjY3ODJkMzY0ZmYyYWIwM2I1NTk0NGQxMTQ2MGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEzZmZhNgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGE3ZWZiOGFiNzliNjc4MmQzNjRmZjJhYjAzYjU1OTQ0ZDExNDYwYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RhOTUwYzMwNDgyOWI4YzBiNWY4OWNlYmQzZGMxN2E2MDBkMWUzNmIgYi9mdXp6ZXIvY29ycHVzL2RhOTUwYzMwNDgyOWI4YzBiNWY4OWNlYmQzZGMxN2E2MDBkMWUzNmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg2OWYwNgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGE5NTBjMzA0ODI5YjhjMGI1Zjg5Y2ViZDNkYzE3YTYwMGQxZTM2YgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RhOTlkYjI5ZmQ1M2QyMGNhODE1ZDRkZDYwODIyYWM1MmE3MDJjZGEgYi9mdXp6ZXIvY29ycHVzL2RhOTlkYjI5ZmQ1M2QyMGNhODE1ZDRkZDYwODIyYWM1MmE3MDJjZGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY5MTgzYQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGE5OWRiMjlmZDUzZDIwY2E4MTVkNGRkNjA4MjJhYzUyYTcwMmNkYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RhYTRmYTI4ODU5MDlhZDdmZmM5ODNjNjA2NDNhNDRhYzkwY2E0Y2MgYi9mdXp6ZXIvY29ycHVzL2RhYTRmYTI4ODU5MDlhZDdmZmM5ODNjNjA2NDNhNDRhYzkwY2E0Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMxMzczMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGFhNGZhMjg4NTkwOWFkN2ZmYzk4M2M2MDY0M2E0NGFjOTBjYTRjYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RhYTkyZWE0NjAwYTg3MzdlOWZkMzdmODNhOWM4NTJmNTQ1NTM3YzIgYi9mdXp6ZXIvY29ycHVzL2RhYTkyZWE0NjAwYTg3MzdlOWZkMzdmODNhOWM4NTJmNTQ1NTM3YzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg0MGZhOQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGFhOTJlYTQ2MDBhODczN2U5ZmQzN2Y4M2E5Yzg1MmY1NDU1MzdjMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RhY2MxOGU5MWM4MWE2YmZjYmEwMzQwZWNiNThiYmE2NTU2ZTU3ZWIgYi9mdXp6ZXIvY29ycHVzL2RhY2MxOGU5MWM4MWE2YmZjYmEwMzQwZWNiNThiYmE2NTU2ZTU3ZWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU2NDQwZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGFjYzE4ZTkxYzgxYTZiZmNiYTAzNDBlY2I1OGJiYTY1NTZlNTdlYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RiMWQxMjc5OGEyMGU5MDM1YjlhNWFiZjgwNTM5NGM4NTUwNTkzMTMgYi9mdXp6ZXIvY29ycHVzL2RiMWQxMjc5OGEyMGU5MDM1YjlhNWFiZjgwNTM5NGM4NTUwNTkzMTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA1OTQxMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGIxZDEyNzk4YTIwZTkwMzViOWE1YWJmODA1Mzk0Yzg1NTA1OTMxMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RiN2M4YjBkMzQ0NzY3ZDMwMWEzYjA3NjkxOWY2YzM2ZmE1MzE5M2QgYi9mdXp6ZXIvY29ycHVzL2RiN2M4YjBkMzQ0NzY3ZDMwMWEzYjA3NjkxOWY2YzM2ZmE1MzE5M2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I4ODkxZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGI3YzhiMGQzNDQ3NjdkMzAxYTNiMDc2OTE5ZjZjMzZmYTUzMTkzZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RiOTAzYWFmMTcxZjI2YWZhYTJmNjdiYjI0YzAwMGQ3YmVjNjIxZDggYi9mdXp6ZXIvY29ycHVzL2RiOTAzYWFmMTcxZjI2YWZhYTJmNjdiYjI0YzAwMGQ3YmVjNjIxZDgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRjYzhkNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGI5MDNhYWYxNzFmMjZhZmFhMmY2N2JiMjRjMDAwZDdiZWM2MjFkOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RiYWRkM2YxOGJhMmMzMDdjYTkxMTgwZmU0YWViMWI0NTgwYmNjYTcgYi9mdXp6ZXIvY29ycHVzL2RiYWRkM2YxOGJhMmMzMDdjYTkxMTgwZmU0YWViMWI0NTgwYmNjYTcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc3ZDM2NQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGJhZGQzZjE4YmEyYzMwN2NhOTExODBmZTRhZWIxYjQ1ODBiY2NhNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RiYjRmM2JjMGJiMDk3MjIyNjdlN2QwOTY5ZDJlYzBkOWIxZTA4NWEgYi9mdXp6ZXIvY29ycHVzL2RiYjRmM2JjMGJiMDk3MjIyNjdlN2QwOTY5ZDJlYzBkOWIxZTA4NWEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFkZTI0YwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGJiNGYzYmMwYmIwOTcyMjI2N2U3ZDA5NjlkMmVjMGQ5YjFlMDg1YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RiYzJiMjdlM2NiYjlmZWQ4ZDkyYzdjNjBiMjVmZDJhNjRiZGM5ZWUgYi9mdXp6ZXIvY29ycHVzL2RiYzJiMjdlM2NiYjlmZWQ4ZDkyYzdjNjBiMjVmZDJhNjRiZGM5ZWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgzZGQ2MQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGJjMmIyN2UzY2JiOWZlZDhkOTJjN2M2MGIyNWZkMmE2NGJkYzllZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RiZWVmZTAwNGQ2OGY5ZmZhOGU0NWI2NDM2MmM2NzM3YjIyZTNkZTUgYi9mdXp6ZXIvY29ycHVzL2RiZWVmZTAwNGQ2OGY5ZmZhOGU0NWI2NDM2MmM2NzM3YjIyZTNkZTUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZkNjZiYQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGJlZWZlMDA0ZDY4ZjlmZmE4ZTQ1YjY0MzYyYzY3MzdiMjJlM2RlNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RiZjUwY2JiYWQwMTBlNTdkMTEyZjA2OTkyOWU1MGE4ZTY4MDBiMjcgYi9mdXp6ZXIvY29ycHVzL2RiZjUwY2JiYWQwMTBlNTdkMTEyZjA2OTkyOWU1MGE4ZTY4MDBiMjcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkzNTU4NAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGJmNTBjYmJhZDAxMGU1N2QxMTJmMDY5OTI5ZTUwYThlNjgwMGIyNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RjMGNlNzE4YzM2NDhkZjk4MmI2NmE4ZDE3YmEwNzU1NGRhZDUyOGIgYi9mdXp6ZXIvY29ycHVzL2RjMGNlNzE4YzM2NDhkZjk4MmI2NmE4ZDE3YmEwNzU1NGRhZDUyOGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQxMTMxYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGMwY2U3MThjMzY0OGRmOTgyYjY2YThkMTdiYTA3NTU0ZGFkNTI4YgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RjNDgyODNmZDdlOWFjNGI2MWM3NDA0NTdmMjg4YTZlN2U0YjlmMzUgYi9mdXp6ZXIvY29ycHVzL2RjNDgyODNmZDdlOWFjNGI2MWM3NDA0NTdmMjg4YTZlN2U0YjlmMzUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYyOGM1YwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGM0ODI4M2ZkN2U5YWM0YjYxYzc0MDQ1N2YyODhhNmU3ZTRiOWYzNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RjNjg0MjUwNzVkZmVmOGMzMTQ2ZjU4MjQ3OWVhMjJhN2E1NzIzYWIgYi9mdXp6ZXIvY29ycHVzL2RjNjg0MjUwNzVkZmVmOGMzMTQ2ZjU4MjQ3OWVhMjJhN2E1NzIzYWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU0ZTY1ZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGM2ODQyNTA3NWRmZWY4YzMxNDZmNTgyNDc5ZWEyMmE3YTU3MjNhYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RjNmMzOTVhYTBkZWE4NmFjNmJhOGIzZmY0YTA3NmU5OWQ1MjhmMzIgYi9mdXp6ZXIvY29ycHVzL2RjNmMzOTVhYTBkZWE4NmFjNmJhOGIzZmY0YTA3NmU5OWQ1MjhmMzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ2ZmUyZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGM2YzM5NWFhMGRlYTg2YWM2YmE4YjNmZjRhMDc2ZTk5ZDUyOGYzMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RjNzI4N2I4M2EwODk0MmYwODVmZjgxYjVlNmUxNTVhOTMyN2U3NDkgYi9mdXp6ZXIvY29ycHVzL2RjNzI4N2I4M2EwODk0MmYwODVmZjgxYjVlNmUxNTVhOTMyN2U3NDkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZmM2ZjYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGM3Mjg3YjgzYTA4OTQyZjA4NWZmODFiNWU2ZTE1NWE5MzI3ZTc0OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RjODlmYjJiODE1ODc4OGJjYTI4NjMyNzQ4NTkzZTE0YzFmMTA1ODcgYi9mdXp6ZXIvY29ycHVzL2RjODlmYjJiODE1ODc4OGJjYTI4NjMyNzQ4NTkzZTE0YzFmMTA1ODcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVmYWU2NgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGM4OWZiMmI4MTU4Nzg4YmNhMjg2MzI3NDg1OTNlMTRjMWYxMDU4NwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RjOGNmZTIyMjFhZDkxMGUxNzBjZWRmMDk2NzFjOTI5MmEwOWJiZjAgYi9mdXp6ZXIvY29ycHVzL2RjOGNmZTIyMjFhZDkxMGUxNzBjZWRmMDk2NzFjOTI5MmEwOWJiZjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNjNTkwYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGM4Y2ZlMjIyMWFkOTEwZTE3MGNlZGYwOTY3MWM5MjkyYTA5YmJmMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RjOTA3NDY5ZjllMGZjNzljNGEwZWVjZmE4Y2ViZjVlM2VlYjg1MzQgYi9mdXp6ZXIvY29ycHVzL2RjOTA3NDY5ZjllMGZjNzljNGEwZWVjZmE4Y2ViZjVlM2VlYjg1MzQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBmZWY0NwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGM5MDc0NjlmOWUwZmM3OWM0YTBlZWNmYThjZWJmNWUzZWViODUzNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RjYTY1MDVkNjk1YzJhMGU3MjQ3ZmYyZGVlNzBmZmFlYTRiYzdjMGQgYi9mdXp6ZXIvY29ycHVzL2RjYTY1MDVkNjk1YzJhMGU3MjQ3ZmYyZGVlNzBmZmFlYTRiYzdjMGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ1ZGE3NAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGNhNjUwNWQ2OTVjMmEwZTcyNDdmZjJkZWU3MGZmYWVhNGJjN2MwZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RjYjUwMWZiYmI5NGMzMWUyYmU5NjBkYzQ4OThiM2FhMjUyMzEwYTcgYi9mdXp6ZXIvY29ycHVzL2RjYjUwMWZiYmI5NGMzMWUyYmU5NjBkYzQ4OThiM2FhMjUyMzEwYTcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIzOWU5OQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGNiNTAxZmJiYjk0YzMxZTJiZTk2MGRjNDg5OGIzYWEyNTIzMTBhNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RjZmY1NzUyZGYwMjBlYzAwZDk1ZjQ5ZjQ2M2Q2NmY5ZGM0OWQ3ZDUgYi9mdXp6ZXIvY29ycHVzL2RjZmY1NzUyZGYwMjBlYzAwZDk1ZjQ5ZjQ2M2Q2NmY5ZGM0OWQ3ZDUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU5NzU1ZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGNmZjU3NTJkZjAyMGVjMDBkOTVmNDlmNDYzZDY2ZjlkYzQ5ZDdkNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RkMDRjOTIwMGY2MDY4MTczNjcxZWVlYzkzMjQ0NGY4M2VmZDgwYWMgYi9mdXp6ZXIvY29ycHVzL2RkMDRjOTIwMGY2MDY4MTczNjcxZWVlYzkzMjQ0NGY4M2VmZDgwYWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUxMDg4MQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGQwNGM5MjAwZjYwNjgxNzM2NzFlZWVjOTMyNDQ0ZjgzZWZkODBhYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RkMGUxMmUxNzBkMzJjNmY3YWE4YzU3MjlkMjU4ZWQyZTAyYWNmNmEgYi9mdXp6ZXIvY29ycHVzL2RkMGUxMmUxNzBkMzJjNmY3YWE4YzU3MjlkMjU4ZWQyZTAyYWNmNmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE0OGE1MwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGQwZTEyZTE3MGQzMmM2ZjdhYThjNTcyOWQyNThlZDJlMDJhY2Y2YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RkNjU1MzcxYjNhZjc3ZTEyNGQ5OWQ0YzM0ZTU0NWIwMzU1YTBmMDIgYi9mdXp6ZXIvY29ycHVzL2RkNjU1MzcxYjNhZjc3ZTEyNGQ5OWQ0YzM0ZTU0NWIwMzU1YTBmMDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUzNTQ2OAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGQ2NTUzNzFiM2FmNzdlMTI0ZDk5ZDRjMzRlNTQ1YjAzNTVhMGYwMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RkNmI2YWE4OWYyZjFjNDZlNjBlODZlYTcwNTcyMGJjNWY0NGZjYzcgYi9mdXp6ZXIvY29ycHVzL2RkNmI2YWE4OWYyZjFjNDZlNjBlODZlYTcwNTcyMGJjNWY0NGZjYzcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMyMDBhNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGQ2YjZhYTg5ZjJmMWM0NmU2MGU4NmVhNzA1NzIwYmM1ZjQ0ZmNjNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RkYTBjZGFhYjEyYzM1NDUzNGQwMTVmY2Q3N2Q3YzBmMGY4YTlmZTMgYi9mdXp6ZXIvY29ycHVzL2RkYTBjZGFhYjEyYzM1NDUzNGQwMTVmY2Q3N2Q3YzBmMGY4YTlmZTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MzMTY3YgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGRhMGNkYWFiMTJjMzU0NTM0ZDAxNWZjZDc3ZDdjMGYwZjhhOWZlMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RkYjBiMDRjOWNlYWZkYzAyOTVmODQ4OTY2NWEzMmFiMGVhMTBmMjUgYi9mdXp6ZXIvY29ycHVzL2RkYjBiMDRjOWNlYWZkYzAyOTVmODQ4OTY2NWEzMmFiMGVhMTBmMjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBhY2VmMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGRiMGIwNGM5Y2VhZmRjMDI5NWY4NDg5NjY1YTMyYWIwZWExMGYyNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RkYjhiMmQ0MjRlY2U2M2NmNjQ2N2I5YTBmNjE2NzQ5YmYwOTE0NjkgYi9mdXp6ZXIvY29ycHVzL2RkYjhiMmQ0MjRlY2U2M2NmNjQ2N2I5YTBmNjE2NzQ5YmYwOTE0NjkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdiMDg0OAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGRiOGIyZDQyNGVjZTYzY2Y2NDY3YjlhMGY2MTY3NDliZjA5MTQ2OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RkY2ZhM2ZlMWUwYzU3NzkyZmMzYmI4ZGFlNDExNDJhOGExY2EyOWYgYi9mdXp6ZXIvY29ycHVzL2RkY2ZhM2ZlMWUwYzU3NzkyZmMzYmI4ZGFlNDExNDJhOGExY2EyOWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg5YWM1NAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGRjZmEzZmUxZTBjNTc3OTJmYzNiYjhkYWU0MTE0MmE4YTFjYTI5ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RlMTJlYTdhMGE0ZDZlY2E4OTNiOGI5OTBhNGE0ZjkzNDJkZWNjMGUgYi9mdXp6ZXIvY29ycHVzL2RlMTJlYTdhMGE0ZDZlY2E4OTNiOGI5OTBhNGE0ZjkzNDJkZWNjMGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdiYzA0MwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGUxMmVhN2EwYTRkNmVjYTg5M2I4Yjk5MGE0YTRmOTM0MmRlY2MwZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RlMjAwMDllNWRkNDQyOTY0YzA0MTU0ZDg1OTEwZTcwNTllMDg0YjkgYi9mdXp6ZXIvY29ycHVzL2RlMjAwMDllNWRkNDQyOTY0YzA0MTU0ZDg1OTEwZTcwNTllMDg0YjkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjczNjg1MAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGUyMDAwOWU1ZGQ0NDI5NjRjMDQxNTRkODU5MTBlNzA1OWUwODRiOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RlNWViMGQ2N2M0MzY4ODNhMDA4OWIxODlkZGFhMTFkZjkyYzk2NWMgYi9mdXp6ZXIvY29ycHVzL2RlNWViMGQ2N2M0MzY4ODNhMDA4OWIxODlkZGFhMTFkZjkyYzk2NWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZlYTllNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGU1ZWIwZDY3YzQzNjg4M2EwMDg5YjE4OWRkYWExMWRmOTJjOTY1YwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RlODRkMjYxNjU5M2RkZGNlMmYyODYxNWUyOGMwYzcyZjc0NmRlOWQgYi9mdXp6ZXIvY29ycHVzL2RlODRkMjYxNjU5M2RkZGNlMmYyODYxNWUyOGMwYzcyZjc0NmRlOWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE2MjVlZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGU4NGQyNjE2NTkzZGRkY2UyZjI4NjE1ZTI4YzBjNzJmNzQ2ZGU5ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RlOTI1OWI3M2E3OWI4NzViM2UyMGNlOWZkYTc2NDdhNDVkNmJhMjYgYi9mdXp6ZXIvY29ycHVzL2RlOTI1OWI3M2E3OWI4NzViM2UyMGNlOWZkYTc2NDdhNDVkNmJhMjYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBkZDFjMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGU5MjU5YjczYTc5Yjg3NWIzZTIwY2U5ZmRhNzY0N2E0NWQ2YmEyNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RlZDBlM2ZjZTRmNWExYzU1NzJjZTYzMmEyOWFkY2YzNzg5Nzg4MWYgYi9mdXp6ZXIvY29ycHVzL2RlZDBlM2ZjZTRmNWExYzU1NzJjZTYzMmEyOWFkY2YzNzg5Nzg4MWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJmMTQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGVkMGUzZmNlNGY1YTFjNTU3MmNlNjMyYTI5YWRjZjM3ODk3ODgxZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RlZTdjM2U3Y2FjM2ViZDYyYjBkZTU3Njc4OWMwZWQwMTI5ZTVkMmMgYi9mdXp6ZXIvY29ycHVzL2RlZTdjM2U3Y2FjM2ViZDYyYjBkZTU3Njc4OWMwZWQwMTI5ZTVkMmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNiYmU2YgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGVlN2MzZTdjYWMzZWJkNjJiMGRlNTc2Nzg5YzBlZDAxMjllNWQyYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RlZjRiYjBmMjg2ZjdjNDUyODFhMDM1YjU1ODU4MWIzMjdlNTA1ZjcgYi9mdXp6ZXIvY29ycHVzL2RlZjRiYjBmMjg2ZjdjNDUyODFhMDM1YjU1ODU4MWIzMjdlNTA1ZjcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFmMzU0MAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGVmNGJiMGYyODZmN2M0NTI4MWEwMzViNTU4NTgxYjMyN2U1MDVmNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RmMmNmZjNlMmQxODQ1YjA5ZTMxZTJlOTliNTBmZTNhZWY1ZGEyMjkgYi9mdXp6ZXIvY29ycHVzL2RmMmNmZjNlMmQxODQ1YjA5ZTMxZTJlOTliNTBmZTNhZWY1ZGEyMjkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ4YzNkYQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGYyY2ZmM2UyZDE4NDViMDllMzFlMmU5OWI1MGZlM2FlZjVkYTIyOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RmMmZhOGI5ZWZhMTFhOTUxMWRmZWIxNDY0NDZmNTk3YmQ4MmI2ZGQgYi9mdXp6ZXIvY29ycHVzL2RmMmZhOGI5ZWZhMTFhOTUxMWRmZWIxNDY0NDZmNTk3YmQ4MmI2ZGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQzYTZhYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGYyZmE4YjllZmExMWE5NTExZGZlYjE0NjQ0NmY1OTdiZDgyYjZkZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RmNGM3Yjg4MGFmOTQyN2M4NTRiNzZjMGQxMWY2MGMzNDBhMGE5MjIgYi9mdXp6ZXIvY29ycHVzL2RmNGM3Yjg4MGFmOTQyN2M4NTRiNzZjMGQxMWY2MGMzNDBhMGE5MjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI3ZTA5OAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGY0YzdiODgwYWY5NDI3Yzg1NGI3NmMwZDExZjYwYzM0MGEwYTkyMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RmNzQwNTc4NDZkYTYxOGUzMDhjNzViOTM4OTYxNmQxMjU4NDViYmEgYi9mdXp6ZXIvY29ycHVzL2RmNzQwNTc4NDZkYTYxOGUzMDhjNzViOTM4OTYxNmQxMjU4NDViYmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZjZjlhNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGY3NDA1Nzg0NmRhNjE4ZTMwOGM3NWI5Mzg5NjE2ZDEyNTg0NWJiYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RmODA4N2EyNDNhZTc4ZDU1MWExMjhkODEyZWE4MzM2YTMwNDJmNzUgYi9mdXp6ZXIvY29ycHVzL2RmODA4N2EyNDNhZTc4ZDU1MWExMjhkODEyZWE4MzM2YTMwNDJmNzUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ4Y2ZkMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGY4MDg3YTI0M2FlNzhkNTUxYTEyOGQ4MTJlYTgzMzZhMzA0MmY3NQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RmOWYwNGI0MTg3M2IwNWI3NDg1YjM3OWI0MGYxMjZlOTkxNWQ5ZjAgYi9mdXp6ZXIvY29ycHVzL2RmOWYwNGI0MTg3M2IwNWI3NDg1YjM3OWI0MGYxMjZlOTkxNWQ5ZjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMxMGFjOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGY5ZjA0YjQxODczYjA1Yjc0ODViMzc5YjQwZjEyNmU5OTE1ZDlmMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RmYWMwM2ZiMzc5ODA3MmE1NWQ4Y2NmMGYyOGVmNGY4MWMzY2EzNTUgYi9mdXp6ZXIvY29ycHVzL2RmYWMwM2ZiMzc5ODA3MmE1NWQ4Y2NmMGYyOGVmNGY4MWMzY2EzNTUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U0ZTg4NwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGZhYzAzZmIzNzk4MDcyYTU1ZDhjY2YwZjI4ZWY0ZjgxYzNjYTM1NQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RmYmNhM2I5MTYxNWUxMmNiZGZkZjJkMzAyYzI0MTExMzdlYWVjODYgYi9mdXp6ZXIvY29ycHVzL2RmYmNhM2I5MTYxNWUxMmNiZGZkZjJkMzAyYzI0MTExMzdlYWVjODYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhjOWRlMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGZiY2EzYjkxNjE1ZTEyY2JkZmRmMmQzMDJjMjQxMTEzN2VhZWM4NgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RmYmZmNmIxMzNkMDdiODRiNDhiMjA0MDJjMWRmYTI5NTczNWYxNDQgYi9mdXp6ZXIvY29ycHVzL2RmYmZmNmIxMzNkMDdiODRiNDhiMjA0MDJjMWRmYTI5NTczNWYxNDQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JjM2E1NwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGZiZmY2YjEzM2QwN2I4NGI0OGIyMDQwMmMxZGZhMjk1NzM1ZjE0NApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RmYzQ1OWI5OWQwZTkzMzE5MTYxNTgxN2U3MzUzOTVjYzJmOGI2YzEgYi9mdXp6ZXIvY29ycHVzL2RmYzQ1OWI5OWQwZTkzMzE5MTYxNTgxN2U3MzUzOTVjYzJmOGI2YzEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVhNjQ3MgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGZjNDU5Yjk5ZDBlOTMzMTkxNjE1ODE3ZTczNTM5NWNjMmY4YjZjMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RmY2E1NTJkMGEyZjZiNDU5ODRiMzFkODY0NGVlZDdhYTIwNWFmNzEgYi9mdXp6ZXIvY29ycHVzL2RmY2E1NTJkMGEyZjZiNDU5ODRiMzFkODY0NGVlZDdhYTIwNWFmNzEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjczYTZmNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGZjYTU1MmQwYTJmNmI0NTk4NGIzMWQ4NjQ0ZWVkN2FhMjA1YWY3MQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2RmZmVhMjU4MzYzNDM0MTRkZGY5NmU3NmQ4ODUzYzIxODE5YjVmZWUgYi9mdXp6ZXIvY29ycHVzL2RmZmVhMjU4MzYzNDM0MTRkZGY5NmU3NmQ4ODUzYzIxODE5YjVmZWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMzOTc0YQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZGZmZWEyNTgzNjM0MzQxNGRkZjk2ZTc2ZDg4NTNjMjE4MTliNWZlZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UwMmRhOTgwOTBkYWEwZDNlNzUwY2M4MzU4MWNiZTg4NDNkMjVhY2QgYi9mdXp6ZXIvY29ycHVzL2UwMmRhOTgwOTBkYWEwZDNlNzUwY2M4MzU4MWNiZTg4NDNkMjVhY2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQxZmE4MgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTAyZGE5ODA5MGRhYTBkM2U3NTBjYzgzNTgxY2JlODg0M2QyNWFjZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UwMzQ3MjYxY2ZiZGVlNTU2NmMxMTg4YjEwN2I0MDMyOTAzOWNkOGYgYi9mdXp6ZXIvY29ycHVzL2UwMzQ3MjYxY2ZiZGVlNTU2NmMxMTg4YjEwN2I0MDMyOTAzOWNkOGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYxOWFkNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTAzNDcyNjFjZmJkZWU1NTY2YzExODhiMTA3YjQwMzI5MDM5Y2Q4ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UwNTk1OWU2NWQyOWJkMjgzM2ZmODU0YjU0MjFkOGQ3ZDgwMmE0OWEgYi9mdXp6ZXIvY29ycHVzL2UwNTk1OWU2NWQyOWJkMjgzM2ZmODU0YjU0MjFkOGQ3ZDgwMmE0OWEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMyN2EzOQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTA1OTU5ZTY1ZDI5YmQyODMzZmY4NTRiNTQyMWQ4ZDdkODAyYTQ5YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UwNmJmMmRmY2YyZmExN2YwMzNmOWNjM2Y3NjMxMDdiOWUwN2M3MTUgYi9mdXp6ZXIvY29ycHVzL2UwNmJmMmRmY2YyZmExN2YwMzNmOWNjM2Y3NjMxMDdiOWUwN2M3MTUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUyYmM4YgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTA2YmYyZGZjZjJmYTE3ZjAzM2Y5Y2MzZjc2MzEwN2I5ZTA3YzcxNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UwNmQyNjRmZWI5MGExODIzMjA3NjFjYTkzNmZjMzU4ODdkYmE4NGEgYi9mdXp6ZXIvY29ycHVzL2UwNmQyNjRmZWI5MGExODIzMjA3NjFjYTkzNmZjMzU4ODdkYmE4NGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBjZWE2MQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTA2ZDI2NGZlYjkwYTE4MjMyMDc2MWNhOTM2ZmMzNTg4N2RiYTg0YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UwOWM1NzIxYjZjNTU2ODFlZWU1NDgxYTQ3NmY0ZDFmZmU4ZjU2YzMgYi9mdXp6ZXIvY29ycHVzL2UwOWM1NzIxYjZjNTU2ODFlZWU1NDgxYTQ3NmY0ZDFmZmU4ZjU2YzMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRlMGQ2YQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTA5YzU3MjFiNmM1NTY4MWVlZTU0ODFhNDc2ZjRkMWZmZThmNTZjMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UwYmEyMTc2N2UxMGZmMmJmZmFmYjFmZTkwZWJkNmZmZGQ4YmM2YjggYi9mdXp6ZXIvY29ycHVzL2UwYmEyMTc2N2UxMGZmMmJmZmFmYjFmZTkwZWJkNmZmZGQ4YmM2YjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJkOTgxMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTBiYTIxNzY3ZTEwZmYyYmZmYWZiMWZlOTBlYmQ2ZmZkZDhiYzZiOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UxMjYzZDRlMGUxZWQ2ODY4YTRlNDE2OGE2MjBlNmY4OTMzNTgyMTMgYi9mdXp6ZXIvY29ycHVzL2UxMjYzZDRlMGUxZWQ2ODY4YTRlNDE2OGE2MjBlNmY4OTMzNTgyMTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA2ZTkxYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTEyNjNkNGUwZTFlZDY4NjhhNGU0MTY4YTYyMGU2Zjg5MzM1ODIxMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UxNzI0YzhjYjI2N2M2ZWZkNzNkZGRlYTljZjZmYWNkNWM1NjFlNjggYi9mdXp6ZXIvY29ycHVzL2UxNzI0YzhjYjI2N2M2ZWZkNzNkZGRlYTljZjZmYWNkNWM1NjFlNjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMyYjk1OQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTE3MjRjOGNiMjY3YzZlZmQ3M2RkZGVhOWNmNmZhY2Q1YzU2MWU2OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UxODc1MzFkYWU5YTkwOTU3MDkzNTM4ODJlZDdkMjk4YjQzZjg1NTEgYi9mdXp6ZXIvY29ycHVzL2UxODc1MzFkYWU5YTkwOTU3MDkzNTM4ODJlZDdkMjk4YjQzZjg1NTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIyNjY5YgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTE4NzUzMWRhZTlhOTA5NTcwOTM1Mzg4MmVkN2QyOThiNDNmODU1MQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UxYmIxZTE0MGM5YzYzYzFjMzZjZjU0YTNhNjJkYTkzYzE0ZmJhZmIgYi9mdXp6ZXIvY29ycHVzL2UxYmIxZTE0MGM5YzYzYzFjMzZjZjU0YTNhNjJkYTkzYzE0ZmJhZmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FhMjM0YwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTFiYjFlMTQwYzljNjNjMWMzNmNmNTRhM2E2MmRhOTNjMTRmYmFmYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UxY2Y4OTY1OGI4MzZkM2Y2NjIwMTJkM2QyYTI4OGQ1ZGE5NzU5OTMgYi9mdXp6ZXIvY29ycHVzL2UxY2Y4OTY1OGI4MzZkM2Y2NjIwMTJkM2QyYTI4OGQ1ZGE5NzU5OTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAyNzg3MgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTFjZjg5NjU4YjgzNmQzZjY2MjAxMmQzZDJhMjg4ZDVkYTk3NTk5MwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UxZDdkODAxM2FmYmRhYjRkMzk4OWI4NmQ3ODFkYmY1MTNiZjU4MzkgYi9mdXp6ZXIvY29ycHVzL2UxZDdkODAxM2FmYmRhYjRkMzk4OWI4NmQ3ODFkYmY1MTNiZjU4MzkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ4ZDYxMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTFkN2Q4MDEzYWZiZGFiNGQzOTg5Yjg2ZDc4MWRiZjUxM2JmNTgzOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UyMjdmNDE4YmJjMTBiMDEyY2FiMTk3ZTQ2M2U4ZGFlNDU4NTMzNTYgYi9mdXp6ZXIvY29ycHVzL2UyMjdmNDE4YmJjMTBiMDEyY2FiMTk3ZTQ2M2U4ZGFlNDU4NTMzNTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY5ZDc0ZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTIyN2Y0MThiYmMxMGIwMTJjYWIxOTdlNDYzZThkYWU0NTg1MzM1NgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UyNTU0YjgwMGQ1ZDM3YzllNTA4MTU1ZWJjYmNlZWMzNzkzZmU2ZDAgYi9mdXp6ZXIvY29ycHVzL2UyNTU0YjgwMGQ1ZDM3YzllNTA4MTU1ZWJjYmNlZWMzNzkzZmU2ZDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGEyNzJlMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTI1NTRiODAwZDVkMzdjOWU1MDgxNTVlYmNiY2VlYzM3OTNmZTZkMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UyNjM3OThlNTlhNWQyNzBhYmY3M2VkYWE2MjRiZTA3MDAyNDJhNTMgYi9mdXp6ZXIvY29ycHVzL2UyNjM3OThlNTlhNWQyNzBhYmY3M2VkYWE2MjRiZTA3MDAyNDJhNTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE0NTYxOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTI2Mzc5OGU1OWE1ZDI3MGFiZjczZWRhYTYyNGJlMDcwMDI0MmE1MwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UyNmEzMzJmYzU4ZGIxYzM3MmZjYjY3Njk3YmNhZDBlYzZiMjY2NGYgYi9mdXp6ZXIvY29ycHVzL2UyNmEzMzJmYzU4ZGIxYzM3MmZjYjY3Njk3YmNhZDBlYzZiMjY2NGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcxMDMwZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTI2YTMzMmZjNThkYjFjMzcyZmNiNjc2OTdiY2FkMGVjNmIyNjY0ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UyN2I1OGY3MjY2MWRmMTIxNjFiMjVlYjIwOGEyZGQzODBlMDAwNTggYi9mdXp6ZXIvY29ycHVzL2UyN2I1OGY3MjY2MWRmMTIxNjFiMjVlYjIwOGEyZGQzODBlMDAwNTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YwZmQ1ZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTI3YjU4ZjcyNjYxZGYxMjE2MWIyNWViMjA4YTJkZDM4MGUwMDA1OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UyZTlkOWE3ZTQ1NzhhMzI5MjFhODcwNGQ2MzUyMDY3YTJhMWNmMTQgYi9mdXp6ZXIvY29ycHVzL2UyZTlkOWE3ZTQ1NzhhMzI5MjFhODcwNGQ2MzUyMDY3YTJhMWNmMTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVkYTUwNgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTJlOWQ5YTdlNDU3OGEzMjkyMWE4NzA0ZDYzNTIwNjdhMmExY2YxNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UyZmY5NDY2NThiMjUzZWYzNmVhMzZkYTRiNGM4NjliNDZlMDMwOGQgYi9mdXp6ZXIvY29ycHVzL2UyZmY5NDY2NThiMjUzZWYzNmVhMzZkYTRiNGM4NjliNDZlMDMwOGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg4YjJkNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTJmZjk0NjY1OGIyNTNlZjM2ZWEzNmRhNGI0Yzg2OWI0NmUwMzA4ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UzMDYyNTE5YzZiMGJmZTYwNWU0MjQ3ZDQ5M2M4ZWZhZGRlZTZiOTcgYi9mdXp6ZXIvY29ycHVzL2UzMDYyNTE5YzZiMGJmZTYwNWU0MjQ3ZDQ5M2M4ZWZhZGRlZTZiOTcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y4MmU2ZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTMwNjI1MTljNmIwYmZlNjA1ZTQyNDdkNDkzYzhlZmFkZGVlNmI5NwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UzMGQ0OWVlNmY3ZWFkN2I0ZjI0YjhmY2I4ODc5MmI0YzUyMWQ0YTEgYi9mdXp6ZXIvY29ycHVzL2UzMGQ0OWVlNmY3ZWFkN2I0ZjI0YjhmY2I4ODc5MmI0YzUyMWQ0YTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJkNDdlNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTMwZDQ5ZWU2ZjdlYWQ3YjRmMjRiOGZjYjg4NzkyYjRjNTIxZDRhMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UzMTNiNDcyYjhlMzc4MGIyZDc3YjEzOTRlYTFjYjE5MWYwMjg4OTYgYi9mdXp6ZXIvY29ycHVzL2UzMTNiNDcyYjhlMzc4MGIyZDc3YjEzOTRlYTFjYjE5MWYwMjg4OTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTliNTZhNgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTMxM2I0NzJiOGUzNzgwYjJkNzdiMTM5NGVhMWNiMTkxZjAyODg5NgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UzMTVmY2E0OTBlNDhiMmUzM2YwZmYzOTVmZDM1OWY5YmVmYzIxMzIgYi9mdXp6ZXIvY29ycHVzL2UzMTVmY2E0OTBlNDhiMmUzM2YwZmYzOTVmZDM1OWY5YmVmYzIxMzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdiMDA2ZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTMxNWZjYTQ5MGU0OGIyZTMzZjBmZjM5NWZkMzU5ZjliZWZjMjEzMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UzMjYxODU2ZTU1ZWM0MzI0MDc2YjI1OTMxNGRjZTI4MzczOWM0ZDQgYi9mdXp6ZXIvY29ycHVzL2UzMjYxODU2ZTU1ZWM0MzI0MDc2YjI1OTMxNGRjZTI4MzczOWM0ZDQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJjNzI1MgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTMyNjE4NTZlNTVlYzQzMjQwNzZiMjU5MzE0ZGNlMjgzNzM5YzRkNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UzM2M3OTg5ODQzNDI4YWEyN2JlYTgyZGYxZDcxNDQxMTIwMzRhMWQgYi9mdXp6ZXIvY29ycHVzL2UzM2M3OTg5ODQzNDI4YWEyN2JlYTgyZGYxZDcxNDQxMTIwMzRhMWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVmZGM2YwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTMzYzc5ODk4NDM0MjhhYTI3YmVhODJkZjFkNzE0NDExMjAzNGExZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UzNDJhM2U1OTU5MDY3MWM2ZDY0MzdjNDJjYjUzNzc1MTA4NWQwM2QgYi9mdXp6ZXIvY29ycHVzL2UzNDJhM2U1OTU5MDY3MWM2ZDY0MzdjNDJjYjUzNzc1MTA4NWQwM2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJhNTVkNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTM0MmEzZTU5NTkwNjcxYzZkNjQzN2M0MmNiNTM3NzUxMDg1ZDAzZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UzNjkyYmMzM2I4YTI1YTU0YjhjZjMxZDM3NDA1NmJiOTU4ZDZmOWMgYi9mdXp6ZXIvY29ycHVzL2UzNjkyYmMzM2I4YTI1YTU0YjhjZjMxZDM3NDA1NmJiOTU4ZDZmOWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcyZWQ1NAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTM2OTJiYzMzYjhhMjVhNTRiOGNmMzFkMzc0MDU2YmI5NThkNmY5YwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2UzODM3YzZkMmU0Y2Y0MDQxMDYxZTFjMTBmMWY4NzNmYzNlMTYyZjcgYi9mdXp6ZXIvY29ycHVzL2UzODM3YzZkMmU0Y2Y0MDQxMDYxZTFjMTBmMWY4NzNmYzNlMTYyZjcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM3NmQwYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTM4MzdjNmQyZTRjZjQwNDEwNjFlMWMxMGYxZjg3M2ZjM2UxNjJmNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U0MTg5MDA3YWY3MTNmOTgwYjUwYzQ3ZjFlNDc5NDcyNWM1N2ExZGUgYi9mdXp6ZXIvY29ycHVzL2U0MTg5MDA3YWY3MTNmOTgwYjUwYzQ3ZjFlNDc5NDcyNWM1N2ExZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNjZjgyNgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTQxODkwMDdhZjcxM2Y5ODBiNTBjNDdmMWU0Nzk0NzI1YzU3YTFkZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U0MzA5ZDRlZWZhNzRjNWYxZTMxOGUxNzcwN2QzMGNhNTZjZDFlN2IgYi9mdXp6ZXIvY29ycHVzL2U0MzA5ZDRlZWZhNzRjNWYxZTMxOGUxNzcwN2QzMGNhNTZjZDFlN2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTViMGZiMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTQzMDlkNGVlZmE3NGM1ZjFlMzE4ZTE3NzA3ZDMwY2E1NmNkMWU3YgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U0NTgyNzA0YzQzYmQ3MWRlY2ExNGQ2MzE0MjNkYTIzMmFiZDUxZDUgYi9mdXp6ZXIvY29ycHVzL2U0NTgyNzA0YzQzYmQ3MWRlY2ExNGQ2MzE0MjNkYTIzMmFiZDUxZDUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU4ODk4NwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTQ1ODI3MDRjNDNiZDcxZGVjYTE0ZDYzMTQyM2RhMjMyYWJkNTFkNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U0NTlmMGM0NzJkYzIwYjRkMGIwMWYzYjYzZTk1YmE5Y2M4ZTc1MTIgYi9mdXp6ZXIvY29ycHVzL2U0NTlmMGM0NzJkYzIwYjRkMGIwMWYzYjYzZTk1YmE5Y2M4ZTc1MTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIzZTI5YgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTQ1OWYwYzQ3MmRjMjBiNGQwYjAxZjNiNjNlOTViYTljYzhlNzUxMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U0NjI4MjM0MDJiMWJlMTk2NWI0OTJkOWRhMDA4YTJlYzhiOWQ4YmEgYi9mdXp6ZXIvY29ycHVzL2U0NjI4MjM0MDJiMWJlMTk2NWI0OTJkOWRhMDA4YTJlYzhiOWQ4YmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZjZWVmNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTQ2MjgyMzQwMmIxYmUxOTY1YjQ5MmQ5ZGEwMDhhMmVjOGI5ZDhiYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U0ODJiMzVhZjFjNjc4OTBjMTdkZGY1MzRmNTc5ZGMyZTE5NDA1NTcgYi9mdXp6ZXIvY29ycHVzL2U0ODJiMzVhZjFjNjc4OTBjMTdkZGY1MzRmNTc5ZGMyZTE5NDA1NTcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQyZjEzZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTQ4MmIzNWFmMWM2Nzg5MGMxN2RkZjUzNGY1NzlkYzJlMTk0MDU1NwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U0YWI1Y2VlZWQ3ZTc4MTI0YzBiMWIxM2RhN2FmN2NlMmFjYWMyNWQgYi9mdXp6ZXIvY29ycHVzL2U0YWI1Y2VlZWQ3ZTc4MTI0YzBiMWIxM2RhN2FmN2NlMmFjYWMyNWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVkMmIwNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTRhYjVjZWVlZDdlNzgxMjRjMGIxYjEzZGE3YWY3Y2UyYWNhYzI1ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U0ZWJlNTc4MDEzZTVhNTIzMGViMjkwZTI3YzIyNGJhMmZiN2YzZDEgYi9mdXp6ZXIvY29ycHVzL2U0ZWJlNTc4MDEzZTVhNTIzMGViMjkwZTI3YzIyNGJhMmZiN2YzZDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU1NWJiMQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTRlYmU1NzgwMTNlNWE1MjMwZWIyOTBlMjdjMjI0YmEyZmI3ZjNkMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U0ZjIyMTYyYjJkZDY1NWRjYTA3NGJmMjY3OWViZThiMDM5YjJjZjAgYi9mdXp6ZXIvY29ycHVzL2U0ZjIyMTYyYjJkZDY1NWRjYTA3NGJmMjY3OWViZThiMDM5YjJjZjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJmM2Y3OAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTRmMjIxNjJiMmRkNjU1ZGNhMDc0YmYyNjc5ZWJlOGIwMzliMmNmMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U0ZjdmMzk4NjM3YWY0ODAwMTI2MWUwMTMxZDJmNTYwNjAxYTFhNDEgYi9mdXp6ZXIvY29ycHVzL2U0ZjdmMzk4NjM3YWY0ODAwMTI2MWUwMTMxZDJmNTYwNjAxYTFhNDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYwN2FlYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTRmN2YzOTg2MzdhZjQ4MDAxMjYxZTAxMzFkMmY1NjA2MDFhMWE0MQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U1MGI2YjRmNDEyMTM3YjhkMjhmNmNjMmYzMDc0Y2M0ZTRjYTQ3NGYgYi9mdXp6ZXIvY29ycHVzL2U1MGI2YjRmNDEyMTM3YjhkMjhmNmNjMmYzMDc0Y2M0ZTRjYTQ3NGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ4ODdiNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTUwYjZiNGY0MTIxMzdiOGQyOGY2Y2MyZjMwNzRjYzRlNGNhNDc0ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U1MmMwNDE2OGU4ZTQxMDM0NjJjMmJiOWQwYmM5OTNmZTUzYmExM2IgYi9mdXp6ZXIvY29ycHVzL2U1MmMwNDE2OGU4ZTQxMDM0NjJjMmJiOWQwYmM5OTNmZTUzYmExM2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NkMDhjOQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTUyYzA0MTY4ZThlNDEwMzQ2MmMyYmI5ZDBiYzk5M2ZlNTNiYTEzYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U1NjUxMTA2Y2Q5M2JlMGFjNjhmN2MyZjgxZDZmMjc0YTcyN2ViYjMgYi9mdXp6ZXIvY29ycHVzL2U1NjUxMTA2Y2Q5M2JlMGFjNjhmN2MyZjgxZDZmMjc0YTcyN2ViYjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE0NzcwMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTU2NTExMDZjZDkzYmUwYWM2OGY3YzJmODFkNmYyNzRhNzI3ZWJiMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U1OWIzYTRiMmQwYjZiZGQ4YzI1NThlZTMyZWQwYWYwNGRmZmRhZDIgYi9mdXp6ZXIvY29ycHVzL2U1OWIzYTRiMmQwYjZiZGQ4YzI1NThlZTMyZWQwYWYwNGRmZmRhZDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU5M2IwMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTU5YjNhNGIyZDBiNmJkZDhjMjU1OGVlMzJlZDBhZjA0ZGZmZGFkMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U1YjM3ZmI1YjhiZTMzN2NhMGYwMWZlMzAzMzRlZDNkNGQ1YzY4NGEgYi9mdXp6ZXIvY29ycHVzL2U1YjM3ZmI1YjhiZTMzN2NhMGYwMWZlMzAzMzRlZDNkNGQ1YzY4NGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg0NzQ3OAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTViMzdmYjViOGJlMzM3Y2EwZjAxZmUzMDMzNGVkM2Q0ZDVjNjg0YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U1YzM0NjFjZjdjZmZmMzJhYzRmZDUyMzA3MjA3ZGVlZmY0NjI2MmUgYi9mdXp6ZXIvY29ycHVzL2U1YzM0NjFjZjdjZmZmMzJhYzRmZDUyMzA3MjA3ZGVlZmY0NjI2MmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JmNDY3YQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTVjMzQ2MWNmN2NmZmYzMmFjNGZkNTIzMDcyMDdkZWVmZjQ2MjYyZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U1ZGMwZWUyNmM4Y2I2ZmQwNzliNzUxY2YwYWMzZDMyMzIwMzU3NDkgYi9mdXp6ZXIvY29ycHVzL2U1ZGMwZWUyNmM4Y2I2ZmQwNzliNzUxY2YwYWMzZDMyMzIwMzU3NDkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU2MzY1YwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTVkYzBlZTI2YzhjYjZmZDA3OWI3NTFjZjBhYzNkMzIzMjAzNTc0OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U2MDkwZmQwNTdlYWJmNjYwZjkxZTNkMjM0MWVjM2M1ODQ5ZWUzMjQgYi9mdXp6ZXIvY29ycHVzL2U2MDkwZmQwNTdlYWJmNjYwZjkxZTNkMjM0MWVjM2M1ODQ5ZWUzMjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjN2IwZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTYwOTBmZDA1N2VhYmY2NjBmOTFlM2QyMzQxZWMzYzU4NDllZTMyNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U2MmUzOTVlYmE4ZWZkNTAyNmU3NDM1NDBmYTA2NTdhYWM3MWI3OTUgYi9mdXp6ZXIvY29ycHVzL2U2MmUzOTVlYmE4ZWZkNTAyNmU3NDM1NDBmYTA2NTdhYWM3MWI3OTUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJhODI2ZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTYyZTM5NWViYThlZmQ1MDI2ZTc0MzU0MGZhMDY1N2FhYzcxYjc5NQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U2MmZlNWI3ZTgzOWFiMDA1OGYwMWUwODA5YmI0OTI4MTNmNzM2OTEgYi9mdXp6ZXIvY29ycHVzL2U2MmZlNWI3ZTgzOWFiMDA1OGYwMWUwODA5YmI0OTI4MTNmNzM2OTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRhMWJlMQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTYyZmU1YjdlODM5YWIwMDU4ZjAxZTA4MDliYjQ5MjgxM2Y3MzY5MQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U2NzNiMGJjZTg3MGMzYWU3MmI1NTRiMDEzZmRhMzZjZmU1YmYyNDEgYi9mdXp6ZXIvY29ycHVzL2U2NzNiMGJjZTg3MGMzYWU3MmI1NTRiMDEzZmRhMzZjZmU1YmYyNDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ5ZjM5OAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTY3M2IwYmNlODcwYzNhZTcyYjU1NGIwMTNmZGEzNmNmZTViZjI0MQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U2OTBhYjRhYTE5MDI1ODVjMWYwMzE2M2ZhMmZkNDRiNWU1NTMwOWMgYi9mdXp6ZXIvY29ycHVzL2U2OTBhYjRhYTE5MDI1ODVjMWYwMzE2M2ZhMmZkNDRiNWU1NTMwOWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRkZTBlZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTY5MGFiNGFhMTkwMjU4NWMxZjAzMTYzZmEyZmQ0NGI1ZTU1MzA5YwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U2OWI3MmQyZTFjMTA0N2ZmMzEzMDgxNGE0NDUxNjY2ZDZlYTdlMjIgYi9mdXp6ZXIvY29ycHVzL2U2OWI3MmQyZTFjMTA0N2ZmMzEzMDgxNGE0NDUxNjY2ZDZlYTdlMjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjllZWRiMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTY5YjcyZDJlMWMxMDQ3ZmYzMTMwODE0YTQ0NTE2NjZkNmVhN2UyMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U2ZTIzMzk2ZmRlZjQ3NTBhMzgzMzI0N2JjNjNmZTU3NzQ0ODhjNDYgYi9mdXp6ZXIvY29ycHVzL2U2ZTIzMzk2ZmRlZjQ3NTBhMzgzMzI0N2JjNjNmZTU3NzQ0ODhjNDYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJmNjFlZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTZlMjMzOTZmZGVmNDc1MGEzODMzMjQ3YmM2M2ZlNTc3NDQ4OGM0NgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U2ZjU5ODIyNDc5NDc3ZGQ0Zjc4MDI2MjhiODU5MDQ3Mjk0ODYyMWIgYi9mdXp6ZXIvY29ycHVzL2U2ZjU5ODIyNDc5NDc3ZGQ0Zjc4MDI2MjhiODU5MDQ3Mjk0ODYyMWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBlMmZhMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTZmNTk4MjI0Nzk0NzdkZDRmNzgwMjYyOGI4NTkwNDcyOTQ4NjIxYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U3MDE0OWJmNDIzOTRhNjA2MWUyZDAwMDk1ZjU4MTczOWRkNDQ4MTggYi9mdXp6ZXIvY29ycHVzL2U3MDE0OWJmNDIzOTRhNjA2MWUyZDAwMDk1ZjU4MTczOWRkNDQ4MTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI4YWVhMQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTcwMTQ5YmY0MjM5NGE2MDYxZTJkMDAwOTVmNTgxNzM5ZGQ0NDgxOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U3MTk1ZGExMGQzODQ0ZGQ4YjBkOWFhM2QzNGZmYjI4YzlkYmZhYTYgYi9mdXp6ZXIvY29ycHVzL2U3MTk1ZGExMGQzODQ0ZGQ4YjBkOWFhM2QzNGZmYjI4YzlkYmZhYTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY1MTA2NAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTcxOTVkYTEwZDM4NDRkZDhiMGQ5YWEzZDM0ZmZiMjhjOWRiZmFhNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U3MjU0ZjU3MmZhOTI3Y2VjZDcwMGUyMmQ0MmEzMjdlNWVjOWU3NzcgYi9mdXp6ZXIvY29ycHVzL2U3MjU0ZjU3MmZhOTI3Y2VjZDcwMGUyMmQ0MmEzMjdlNWVjOWU3NzcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRhOGRiZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTcyNTRmNTcyZmE5MjdjZWNkNzAwZTIyZDQyYTMyN2U1ZWM5ZTc3NwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U3MmQ5ZjJmNWM4MjJhMTNjOTk3OThlZTBmYjgwYjY1MjFiNjFkM2YgYi9mdXp6ZXIvY29ycHVzL2U3MmQ5ZjJmNWM4MjJhMTNjOTk3OThlZTBmYjgwYjY1MjFiNjFkM2YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdkZTE1MwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTcyZDlmMmY1YzgyMmExM2M5OTc5OGVlMGZiODBiNjUyMWI2MWQzZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U3MmUxNDM1OWRlYWY3NjU3N2I2MzY4YjRjYTA1MTAyZGFhZTUzOGQgYi9mdXp6ZXIvY29ycHVzL2U3MmUxNDM1OWRlYWY3NjU3N2I2MzY4YjRjYTA1MTAyZGFhZTUzOGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEyOWRlZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTcyZTE0MzU5ZGVhZjc2NTc3YjYzNjhiNGNhMDUxMDJkYWFlNTM4ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U3NDQxZjU1MjFmMWI5YWQzM2NhYWE4Y2NlODgxNjFlNWJkZDgyNzUgYi9mdXp6ZXIvY29ycHVzL2U3NDQxZjU1MjFmMWI5YWQzM2NhYWE4Y2NlODgxNjFlNWJkZDgyNzUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjliYjU0MwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTc0NDFmNTUyMWYxYjlhZDMzY2FhYThjY2U4ODE2MWU1YmRkODI3NQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U3NmFiOGUwMzUzMmNkNWQyYmYwYzYzNDMyZTI5OTNiY2Q3NDY3YmEgYi9mdXp6ZXIvY29ycHVzL2U3NmFiOGUwMzUzMmNkNWQyYmYwYzYzNDMyZTI5OTNiY2Q3NDY3YmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM2M2MyYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTc2YWI4ZTAzNTMyY2Q1ZDJiZjBjNjM0MzJlMjk5M2JjZDc0NjdiYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U3NmNkOTU1MTA3ZmJiM2E1ZTY2ZWQ1NjZmODNhYzBmZDhjNmExOWEgYi9mdXp6ZXIvY29ycHVzL2U3NmNkOTU1MTA3ZmJiM2E1ZTY2ZWQ1NjZmODNhYzBmZDhjNmExOWEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEyOWYzMQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTc2Y2Q5NTUxMDdmYmIzYTVlNjZlZDU2NmY4M2FjMGZkOGM2YTE5YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U3NmZiZGRkZDUxN2Y3NGY0YzIzMWZiNWFjOTM2ZGY3MmM0N2NjZmYgYi9mdXp6ZXIvY29ycHVzL2U3NmZiZGRkZDUxN2Y3NGY0YzIzMWZiNWFjOTM2ZGY3MmM0N2NjZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUxNDVmZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTc2ZmJkZGRkNTE3Zjc0ZjRjMjMxZmI1YWM5MzZkZjcyYzQ3Y2NmZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U3ODc5ZDA3OGY1NDg0ZGU3NjM5NGJhNTFmYWM2ZTVhN2ZlM2FhZDIgYi9mdXp6ZXIvY29ycHVzL2U3ODc5ZDA3OGY1NDg0ZGU3NjM5NGJhNTFmYWM2ZTVhN2ZlM2FhZDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkwM2IxYQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTc4NzlkMDc4ZjU0ODRkZTc2Mzk0YmE1MWZhYzZlNWE3ZmUzYWFkMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U3YTliZGRkNjFjNDFhMzE4MmZlMjk5ZGMyNDZhMWMxMjllZGJjZDIgYi9mdXp6ZXIvY29ycHVzL2U3YTliZGRkNjFjNDFhMzE4MmZlMjk5ZGMyNDZhMWMxMjllZGJjZDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgxY2I5MAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTdhOWJkZGQ2MWM0MWEzMTgyZmUyOTlkYzI0NmExYzEyOWVkYmNkMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U4MjJjN2I3ODc0M2E3MTljNWM2ZDRlNTI4OGRjNmIzZmNjNDY1MWMgYi9mdXp6ZXIvY29ycHVzL2U4MjJjN2I3ODc0M2E3MTljNWM2ZDRlNTI4OGRjNmIzZmNjNDY1MWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYwYzQwMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTgyMmM3Yjc4NzQzYTcxOWM1YzZkNGU1Mjg4ZGM2YjNmY2M0NjUxYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U4NjY2MDM3ZjUyOTdkMzU3YmQ1NTc0OTViNjRhZDAyZDE1NTFkMDkgYi9mdXp6ZXIvY29ycHVzL2U4NjY2MDM3ZjUyOTdkMzU3YmQ1NTc0OTViNjRhZDAyZDE1NTFkMDkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRhZDNkOQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTg2NjYwMzdmNTI5N2QzNTdiZDU1NzQ5NWI2NGFkMDJkMTU1MWQwOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U4NmQ1OWQ3YjQ1ZDY4MGNmZjMxMzJkNmVhMzgzNDFkYzczYjUzNjQgYi9mdXp6ZXIvY29ycHVzL2U4NmQ1OWQ3YjQ1ZDY4MGNmZjMxMzJkNmVhMzgzNDFkYzczYjUzNjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU3YzVjMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTg2ZDU5ZDdiNDVkNjgwY2ZmMzEzMmQ2ZWEzODM0MWRjNzNiNTM2NApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U4OTQ1MWFhOGY5YjNkZTVmNTI5Y2EzMTZhMGQwZjMzMGE4NmY5M2IgYi9mdXp6ZXIvY29ycHVzL2U4OTQ1MWFhOGY5YjNkZTVmNTI5Y2EzMTZhMGQwZjMzMGE4NmY5M2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBmMmM5ZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTg5NDUxYWE4ZjliM2RlNWY1MjljYTMxNmEwZDBmMzMwYTg2ZjkzYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U4OWM0Y2I5ODJhYTI5YmFhOTZiMjUwZmU1MWVkMDQzYTk0MmU4OWQgYi9mdXp6ZXIvY29ycHVzL2U4OWM0Y2I5ODJhYTI5YmFhOTZiMjUwZmU1MWVkMDQzYTk0MmU4OWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E5N2JjMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTg5YzRjYjk4MmFhMjliYWE5NmIyNTBmZTUxZWQwNDNhOTQyZTg5ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U4YWJjNDJiNjU2OTkzZTMwNDkzMzJkMjM5YmMxYjZlMzk4YTc5MjAgYi9mdXp6ZXIvY29ycHVzL2U4YWJjNDJiNjU2OTkzZTMwNDkzMzJkMjM5YmMxYjZlMzk4YTc5MjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U5NGYyNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZThhYmM0MmI2NTY5OTNlMzA0OTMzMmQyMzliYzFiNmUzOThhNzkyMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U4YzU0ZmVhZWM3NWRjOTFkZDQ0YzdlYTExNzdjODMzMzNmNDc1YjMgYi9mdXp6ZXIvY29ycHVzL2U4YzU0ZmVhZWM3NWRjOTFkZDQ0YzdlYTExNzdjODMzMzNmNDc1YjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUxNGQxMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZThjNTRmZWFlYzc1ZGM5MWRkNDRjN2VhMTE3N2M4MzMzM2Y0NzViMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U4ZWMwZTdiZTc0NTdjYTY4OWRlNzZhNDVjZDQ3ZjUzNDRkNDY4ODggYi9mdXp6ZXIvY29ycHVzL2U4ZWMwZTdiZTc0NTdjYTY4OWRlNzZhNDVjZDQ3ZjUzNDRkNDY4ODgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlhY2U1ZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZThlYzBlN2JlNzQ1N2NhNjg5ZGU3NmE0NWNkNDdmNTM0NGQ0Njg4OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U5MGYyMzRkNjM0NjVlMzNjMzQxMjQxY2E5ZDJiMjU3MGYxZjU2NGEgYi9mdXp6ZXIvY29ycHVzL2U5MGYyMzRkNjM0NjVlMzNjMzQxMjQxY2E5ZDJiMjU3MGYxZjU2NGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM2ZTExOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTkwZjIzNGQ2MzQ2NWUzM2MzNDEyNDFjYTlkMmIyNTcwZjFmNTY0YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U5MzdlNzQwZmNlNmE0NjU5ZDcwZDE0NTgwYzZkYWRkMzg4NGE1NjYgYi9mdXp6ZXIvY29ycHVzL2U5MzdlNzQwZmNlNmE0NjU5ZDcwZDE0NTgwYzZkYWRkMzg4NGE1NjYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFlYzM3MwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTkzN2U3NDBmY2U2YTQ2NTlkNzBkMTQ1ODBjNmRhZGQzODg0YTU2NgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U5M2M4N2ViM2U5MWM1ZDBmYWI5ODFkMmUyNmI1YWI1ZDg2OGRiZTAgYi9mdXp6ZXIvY29ycHVzL2U5M2M4N2ViM2U5MWM1ZDBmYWI5ODFkMmUyNmI1YWI1ZDg2OGRiZTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE2MmRlOQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTkzYzg3ZWIzZTkxYzVkMGZhYjk4MWQyZTI2YjVhYjVkODY4ZGJlMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U5NGM0ZjZjNGVkZjEyZmJiZjU4ZTcwMTA5OWQ5N2VhOWEzMjg4MTggYi9mdXp6ZXIvY29ycHVzL2U5NGM0ZjZjNGVkZjEyZmJiZjU4ZTcwMTA5OWQ5N2VhOWEzMjg4MTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM4MzA2ZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTk0YzRmNmM0ZWRmMTJmYmJmNThlNzAxMDk5ZDk3ZWE5YTMyODgxOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U5OTJlMjhkNmMyYWMyNmJjMDE1MDdmYWY3ZWY2YmExMDgwN2Q1ZGUgYi9mdXp6ZXIvY29ycHVzL2U5OTJlMjhkNmMyYWMyNmJjMDE1MDdmYWY3ZWY2YmExMDgwN2Q1ZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQxYjAxOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTk5MmUyOGQ2YzJhYzI2YmMwMTUwN2ZhZjdlZjZiYTEwODA3ZDVkZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U5OTZmYjliNTNjMjgwNTNkZWIxNWI1ZGQxZWRlYTBkMWJkMGM1ZGEgYi9mdXp6ZXIvY29ycHVzL2U5OTZmYjliNTNjMjgwNTNkZWIxNWI1ZGQxZWRlYTBkMWJkMGM1ZGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RmNGI5NwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTk5NmZiOWI1M2MyODA1M2RlYjE1YjVkZDFlZGVhMGQxYmQwYzVkYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U5YzMwMTZjYjhlODQxZDI3N2I3YWNkYTRiMTAxYWFjYjVjYTY2ZmUgYi9mdXp6ZXIvY29ycHVzL2U5YzMwMTZjYjhlODQxZDI3N2I3YWNkYTRiMTAxYWFjYjVjYTY2ZmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWExYTAyOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTljMzAxNmNiOGU4NDFkMjc3YjdhY2RhNGIxMDFhYWNiNWNhNjZmZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U5Y2YyOTQ3NzliYTg0Yzk1NmU0ZDg2ZjcxZGQ3NTYyNWQwNzYyZjkgYi9mdXp6ZXIvY29ycHVzL2U5Y2YyOTQ3NzliYTg0Yzk1NmU0ZDg2ZjcxZGQ3NTYyNWQwNzYyZjkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFkYjRkZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTljZjI5NDc3OWJhODRjOTU2ZTRkODZmNzFkZDc1NjI1ZDA3NjJmOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U5ZGYwYmI0OTlkY2QzYzE5Mjg2ODM4N2I2MDM4NzUyMGYyOGNjMDggYi9mdXp6ZXIvY29ycHVzL2U5ZGYwYmI0OTlkY2QzYzE5Mjg2ODM4N2I2MDM4NzUyMGYyOGNjMDgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdhNzJhMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTlkZjBiYjQ5OWRjZDNjMTkyODY4Mzg3YjYwMzg3NTIwZjI4Y2MwOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2U5ZmYxMWIzZWIwYzdlZTJmYmNhMzhiNzQwNWQwODNiNjczNmVjZmUgYi9mdXp6ZXIvY29ycHVzL2U5ZmYxMWIzZWIwYzdlZTJmYmNhMzhiNzQwNWQwODNiNjczNmVjZmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhkNjFjYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZTlmZjExYjNlYjBjN2VlMmZiY2EzOGI3NDA1ZDA4M2I2NzM2ZWNmZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VhMDZlMDNkMDZlNjJiYmVlNDkwOWUxZjg5MzhlMDNhNTczNzBhZmEgYi9mdXp6ZXIvY29ycHVzL2VhMDZlMDNkMDZlNjJiYmVlNDkwOWUxZjg5MzhlMDNhNTczNzBhZmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAwNjQ1NAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWEwNmUwM2QwNmU2MmJiZWU0OTA5ZTFmODkzOGUwM2E1NzM3MGFmYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VhMTQ1NjlmNDVhNDE1M2IxOGMxY2FhNDhiNjk4ODM1ZDY3ZDgzMWEgYi9mdXp6ZXIvY29ycHVzL2VhMTQ1NjlmNDVhNDE1M2IxOGMxY2FhNDhiNjk4ODM1ZDY3ZDgzMWEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZhOGVkZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWExNDU2OWY0NWE0MTUzYjE4YzFjYWE0OGI2OTg4MzVkNjdkODMxYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VhMTU1YTljMzM5OGNhOWE4YWRiMzhhOGU4MGNhMjJhN2ZmYWI3YTQgYi9mdXp6ZXIvY29ycHVzL2VhMTU1YTljMzM5OGNhOWE4YWRiMzhhOGU4MGNhMjJhN2ZmYWI3YTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM2MWQxMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWExNTVhOWMzMzk4Y2E5YThhZGIzOGE4ZTgwY2EyMmE3ZmZhYjdhNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VhNDhiOTQ1Y2JjNzQ5NTY1NDllNzMxYTkwOTkxNDc0YjhiZDEwMmEgYi9mdXp6ZXIvY29ycHVzL2VhNDhiOTQ1Y2JjNzQ5NTY1NDllNzMxYTkwOTkxNDc0YjhiZDEwMmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQxNGU2YwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWE0OGI5NDVjYmM3NDk1NjU0OWU3MzFhOTA5OTE0NzRiOGJkMTAyYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VhOTM0MmUwMWNhODY0MWFmNjY5ODhiNGJhNGM2MDYxOTkzMmEwYTUgYi9mdXp6ZXIvY29ycHVzL2VhOTM0MmUwMWNhODY0MWFmNjY5ODhiNGJhNGM2MDYxOTkzMmEwYTUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk0NTQyZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWE5MzQyZTAxY2E4NjQxYWY2Njk4OGI0YmE0YzYwNjE5OTMyYTBhNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VhOTQ2MTUzZjZlZjQxYjdmNWM5N2VmNTAyNGQ4MmVjMGUyNjQwM2EgYi9mdXp6ZXIvY29ycHVzL2VhOTQ2MTUzZjZlZjQxYjdmNWM5N2VmNTAyNGQ4MmVjMGUyNjQwM2EKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgzN2Y5MAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWE5NDYxNTNmNmVmNDFiN2Y1Yzk3ZWY1MDI0ZDgyZWMwZTI2NDAzYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VhYzZmODg2Njg3MDMxNjhhYTMxYjI1NWU3ZTU4MTQyZGEwYTkxMzYgYi9mdXp6ZXIvY29ycHVzL2VhYzZmODg2Njg3MDMxNjhhYTMxYjI1NWU3ZTU4MTQyZGEwYTkxMzYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMyY2EyOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWFjNmY4ODY2ODcwMzE2OGFhMzFiMjU1ZTdlNTgxNDJkYTBhOTEzNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ViNDY2Njk0NjE2OWRhZDE3NWE1NzI3NzFkMmQxNTkyMzA4YjJmZjAgYi9mdXp6ZXIvY29ycHVzL2ViNDY2Njk0NjE2OWRhZDE3NWE1NzI3NzFkMmQxNTkyMzA4YjJmZjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZmODgyYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWI0NjY2OTQ2MTY5ZGFkMTc1YTU3Mjc3MWQyZDE1OTIzMDhiMmZmMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ViNWEzZGE2ZTUzNTFkOWZiYjhhNjdjODFjYjU5NTMyYzVmMjAwYzggYi9mdXp6ZXIvY29ycHVzL2ViNWEzZGE2ZTUzNTFkOWZiYjhhNjdjODFjYjU5NTMyYzVmMjAwYzgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJlNTVmZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWI1YTNkYTZlNTM1MWQ5ZmJiOGE2N2M4MWNiNTk1MzJjNWYyMDBjOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ViN2ZiZjQxYzc1MGYyNTkyNjkyNDgyZDdhMDY4M2Y1NWE5YzJjODAgYi9mdXp6ZXIvY29ycHVzL2ViN2ZiZjQxYzc1MGYyNTkyNjkyNDgyZDdhMDY4M2Y1NWE5YzJjODAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmViNDUxNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWI3ZmJmNDFjNzUwZjI1OTI2OTI0ODJkN2EwNjgzZjU1YTljMmM4MApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ViODYwNTJhZjE5MTIzMTQwNTkyZjRiMjFmZjA5NTM5NWU1Yzg1NzggYi9mdXp6ZXIvY29ycHVzL2ViODYwNTJhZjE5MTIzMTQwNTkyZjRiMjFmZjA5NTM5NWU1Yzg1NzgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ3OTI2NgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWI4NjA1MmFmMTkxMjMxNDA1OTJmNGIyMWZmMDk1Mzk1ZTVjODU3OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ViODhlMGZmNjc3MWVjMDRkZmFlM2E5NjRmZjYzOTk5NThlM2NiNzAgYi9mdXp6ZXIvY29ycHVzL2ViODhlMGZmNjc3MWVjMDRkZmFlM2E5NjRmZjYzOTk5NThlM2NiNzAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBiN2Q4YgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWI4OGUwZmY2NzcxZWMwNGRmYWUzYTk2NGZmNjM5OTk1OGUzY2I3MApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ViYTdkYTAxODg4MmFkOWIyZTMxZGY2ZmNmNDkzZDE1ZGUzZmJmN2UgYi9mdXp6ZXIvY29ycHVzL2ViYTdkYTAxODg4MmFkOWIyZTMxZGY2ZmNmNDkzZDE1ZGUzZmJmN2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA3MWY3OAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWJhN2RhMDE4ODgyYWQ5YjJlMzFkZjZmY2Y0OTNkMTVkZTNmYmY3ZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ViZjlhZTJkYjlkYjk4ZTc5NzMxMDA0ODM5OTBmOWY3ZWI2MjUyZjcgYi9mdXp6ZXIvY29ycHVzL2ViZjlhZTJkYjlkYjk4ZTc5NzMxMDA0ODM5OTBmOWY3ZWI2MjUyZjcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVhNGM4ZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWJmOWFlMmRiOWRiOThlNzk3MzEwMDQ4Mzk5MGY5ZjdlYjYyNTJmNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VjMjQ0NWMwMzc2MTg0NjRjMjIwMmM2N2VmNmE5OGE3OTQzZTJiYzggYi9mdXp6ZXIvY29ycHVzL2VjMjQ0NWMwMzc2MTg0NjRjMjIwMmM2N2VmNmE5OGE3OTQzZTJiYzgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE0OGY3NwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWMyNDQ1YzAzNzYxODQ2NGMyMjAyYzY3ZWY2YTk4YTc5NDNlMmJjOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VjMzM3MGI2MmFkNzIyZDNmNWRmMmQzZTFmMTRjZGM2Njc2ZmZhZjYgYi9mdXp6ZXIvY29ycHVzL2VjMzM3MGI2MmFkNzIyZDNmNWRmMmQzZTFmMTRjZGM2Njc2ZmZhZjYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkwM2IxZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWMzMzcwYjYyYWQ3MjJkM2Y1ZGYyZDNlMWYxNGNkYzY2NzZmZmFmNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VjYzZhYzYyYjllZTEzN2YyZGJkYWNmYTE3YTNmZTY5MWMyMTRjMzAgYi9mdXp6ZXIvY29ycHVzL2VjYzZhYzYyYjllZTEzN2YyZGJkYWNmYTE3YTNmZTY5MWMyMTRjMzAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBmYjQ5MwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWNjNmFjNjJiOWVlMTM3ZjJkYmRhY2ZhMTdhM2ZlNjkxYzIxNGMzMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VjZTEwMmQ3MjZjZWEwZjQ4NWNiMzBmM2IwYjY4ZWUxM2I4N2ExY2YgYi9mdXp6ZXIvY29ycHVzL2VjZTEwMmQ3MjZjZWEwZjQ4NWNiMzBmM2IwYjY4ZWUxM2I4N2ExY2YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY5MGE0NQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWNlMTAyZDcyNmNlYTBmNDg1Y2IzMGYzYjBiNjhlZTEzYjg3YTFjZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VjZWFiZTFhOTRjZDQyNjFkNTNiZTE2MTJiN2JjOTFkN2M4Mzg2Y2MgYi9mdXp6ZXIvY29ycHVzL2VjZWFiZTFhOTRjZDQyNjFkNTNiZTE2MTJiN2JjOTFkN2M4Mzg2Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkwMDBiMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWNlYWJlMWE5NGNkNDI2MWQ1M2JlMTYxMmI3YmM5MWQ3YzgzODZjYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VkMTA2NGRkY2IzYzExYjdmM2FkZTA0OTg0Njg4MmZmOGNjNmRlMTEgYi9mdXp6ZXIvY29ycHVzL2VkMTA2NGRkY2IzYzExYjdmM2FkZTA0OTg0Njg4MmZmOGNjNmRlMTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEyN2FjZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWQxMDY0ZGRjYjNjMTFiN2YzYWRlMDQ5ODQ2ODgyZmY4Y2M2ZGUxMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VkMmZmMGE5OTIzYzRmZmVkOWJkMzI3MGZiNTczZWUxMjg0MmYwNmMgYi9mdXp6ZXIvY29ycHVzL2VkMmZmMGE5OTIzYzRmZmVkOWJkMzI3MGZiNTczZWUxMjg0MmYwNmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE5MDIzNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWQyZmYwYTk5MjNjNGZmZWQ5YmQzMjcwZmI1NzNlZTEyODQyZjA2YwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VkM2YyNDU5OWFmNzk4ZGI2MzY3YzMzYzcyOGNhOGEyOTg0MzBjOTAgYi9mdXp6ZXIvY29ycHVzL2VkM2YyNDU5OWFmNzk4ZGI2MzY3YzMzYzcyOGNhOGEyOTg0MzBjOTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY3ZmZhMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWQzZjI0NTk5YWY3OThkYjYzNjdjMzNjNzI4Y2E4YTI5ODQzMGM5MApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VkN2U2ODExMTIxNDIyM2NmMGFjNTBmYjg1ZGVkNWViODc5MWM3NzUgYi9mdXp6ZXIvY29ycHVzL2VkN2U2ODExMTIxNDIyM2NmMGFjNTBmYjg1ZGVkNWViODc5MWM3NzUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFiOTVkMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWQ3ZTY4MTExMjE0MjIzY2YwYWM1MGZiODVkZWQ1ZWI4NzkxYzc3NQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VkODg3NThiMTcxM2IwNTNkNWJiYWUzOTA2NjgwYmMwMDkzOWNjNGMgYi9mdXp6ZXIvY29ycHVzL2VkODg3NThiMTcxM2IwNTNkNWJiYWUzOTA2NjgwYmMwMDkzOWNjNGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcxN2FlNgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWQ4ODc1OGIxNzEzYjA1M2Q1YmJhZTM5MDY2ODBiYzAwOTM5Y2M0YwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VkYTJiNGMzNDg1ZmNmNWZjOGU0MmJkNmNkNzEzZWM5MTM3YmI5OWYgYi9mdXp6ZXIvY29ycHVzL2VkYTJiNGMzNDg1ZmNmNWZjOGU0MmJkNmNkNzEzZWM5MTM3YmI5OWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZlMjdkMQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWRhMmI0YzM0ODVmY2Y1ZmM4ZTQyYmQ2Y2Q3MTNlYzkxMzdiYjk5ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VkYzEzMjM4ZThlYmFiOGRhM2VmMjZlNTk5OTkzYWFjZGRjNzBiZmEgYi9mdXp6ZXIvY29ycHVzL2VkYzEzMjM4ZThlYmFiOGRhM2VmMjZlNTk5OTkzYWFjZGRjNzBiZmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVhZGQzYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWRjMTMyMzhlOGViYWI4ZGEzZWYyNmU1OTk5OTNhYWNkZGM3MGJmYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VkZTE4N2IyMmRjM2M0ZGNkZWZlMjhiNTFiMjY3OWU4YTQ3ZGRjMGIgYi9mdXp6ZXIvY29ycHVzL2VkZTE4N2IyMmRjM2M0ZGNkZWZlMjhiNTFiMjY3OWU4YTQ3ZGRjMGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdiZDlkNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWRlMTg3YjIyZGMzYzRkY2RlZmUyOGI1MWIyNjc5ZThhNDdkZGMwYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VkZjg0MTI1ZjM2ODM5MzgzMjZjNzNhN2FjYjFjMjdhODdkYThhNTEgYi9mdXp6ZXIvY29ycHVzL2VkZjg0MTI1ZjM2ODM5MzgzMjZjNzNhN2FjYjFjMjdhODdkYThhNTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI0OWIyYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWRmODQxMjVmMzY4MzkzODMyNmM3M2E3YWNiMWMyN2E4N2RhOGE1MQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VkZjk1ZTNkOWZhNTZmZDI4MGY5OWUyMTFlMTM3MTVmOTQxNWQ3MDggYi9mdXp6ZXIvY29ycHVzL2VkZjk1ZTNkOWZhNTZmZDI4MGY5OWUyMTFlMTM3MTVmOTQxNWQ3MDgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2ZjlmNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWRmOTVlM2Q5ZmE1NmZkMjgwZjk5ZTIxMWUxMzcxNWY5NDE1ZDcwOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VlMjNiMmUwZTA5ODFiYTA3NjhjMGFmN2JlMjEyNTZhZDFjMzFhYjAgYi9mdXp6ZXIvY29ycHVzL2VlMjNiMmUwZTA5ODFiYTA3NjhjMGFmN2JlMjEyNTZhZDFjMzFhYjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYwZGNhMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWUyM2IyZTBlMDk4MWJhMDc2OGMwYWY3YmUyMTI1NmFkMWMzMWFiMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VlNDE0M2NiYTU2YTYyMzkyY2ZhOThmY2QwMTk4ODg3ZmQzNjBiMzMgYi9mdXp6ZXIvY29ycHVzL2VlNDE0M2NiYTU2YTYyMzkyY2ZhOThmY2QwMTk4ODg3ZmQzNjBiMzMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc1ZDJmOQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWU0MTQzY2JhNTZhNjIzOTJjZmE5OGZjZDAxOTg4ODdmZDM2MGIzMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VlNTliOWQyZDMwMmNkZjNiNTc2OGM3OGQ2NDM4ZGE2NTQzZWIzZWUgYi9mdXp6ZXIvY29ycHVzL2VlNTliOWQyZDMwMmNkZjNiNTc2OGM3OGQ2NDM4ZGE2NTQzZWIzZWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFmOWJlYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWU1OWI5ZDJkMzAyY2RmM2I1NzY4Yzc4ZDY0MzhkYTY1NDNlYjNlZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VlNjFmZjJlN2U0Yzg2NDBlNDQ1MWU3ODBhMjY0YjMxNzEwODg1NjkgYi9mdXp6ZXIvY29ycHVzL2VlNjFmZjJlN2U0Yzg2NDBlNDQ1MWU3ODBhMjY0YjMxNzEwODg1NjkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQyMGQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWU2MWZmMmU3ZTRjODY0MGU0NDUxZTc4MGEyNjRiMzE3MTA4ODU2OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VlNjI5OTQ1YWMxZDcxMjllYTVjYjQ1MTRjOTM4NWFjMzhhODQyM2QgYi9mdXp6ZXIvY29ycHVzL2VlNjI5OTQ1YWMxZDcxMjllYTVjYjQ1MTRjOTM4NWFjMzhhODQyM2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNmMDg5NQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWU2Mjk5NDVhYzFkNzEyOWVhNWNiNDUxNGM5Mzg1YWMzOGE4NDIzZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VlNzYxM2I5MzIwOTM5NGVlYTc1N2JhNjE0YTBiOTI3N2Y3OTJkOWIgYi9mdXp6ZXIvY29ycHVzL2VlNzYxM2I5MzIwOTM5NGVlYTc1N2JhNjE0YTBiOTI3N2Y3OTJkOWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJiNWUwNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWU3NjEzYjkzMjA5Mzk0ZWVhNzU3YmE2MTRhMGI5Mjc3Zjc5MmQ5YgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VlYjFhZDk4OTEyMmFiMzZhMGFlMmMzMTgyYjlmNTRlNjIwNTE5MjcgYi9mdXp6ZXIvY29ycHVzL2VlYjFhZDk4OTEyMmFiMzZhMGFlMmMzMTgyYjlmNTRlNjIwNTE5MjcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU3NmJjNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWViMWFkOTg5MTIyYWIzNmEwYWUyYzMxODJiOWY1NGU2MjA1MTkyNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VlYjJkOTlkNjMwZTk5OTA5OTZiNGI0YjIzYzFkYmY5N2ZkNzU3NDcgYi9mdXp6ZXIvY29ycHVzL2VlYjJkOTlkNjMwZTk5OTA5OTZiNGI0YjIzYzFkYmY5N2ZkNzU3NDcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVjZTk3MgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWViMmQ5OWQ2MzBlOTk5MDk5NmI0YjRiMjNjMWRiZjk3ZmQ3NTc0NwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VlZjcyZWU5YzRjMzVlZjcwN2FjYzk1OWM3Mjk0ZDVjZWQxMGZlNjggYi9mdXp6ZXIvY29ycHVzL2VlZjcyZWU5YzRjMzVlZjcwN2FjYzk1OWM3Mjk0ZDVjZWQxMGZlNjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZjZmM0YwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWVmNzJlZTljNGMzNWVmNzA3YWNjOTU5YzcyOTRkNWNlZDEwZmU2OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VmNDUzMTM5MzRjODcyNzMzNDhmZTM5NDllNDkwNTBkYmJmMjEzZTAgYi9mdXp6ZXIvY29ycHVzL2VmNDUzMTM5MzRjODcyNzMzNDhmZTM5NDllNDkwNTBkYmJmMjEzZTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZjMzJjNgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWY0NTMxMzkzNGM4NzI3MzM0OGZlMzk0OWU0OTA1MGRiYmYyMTNlMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VmNjgyYjlmNWEyMmFkNzU5Y2FhNGI1OThkNjdjOTMyMDI3OGY0ODggYi9mdXp6ZXIvY29ycHVzL2VmNjgyYjlmNWEyMmFkNzU5Y2FhNGI1OThkNjdjOTMyMDI3OGY0ODgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEzZTVlYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWY2ODJiOWY1YTIyYWQ3NTljYWE0YjU5OGQ2N2M5MzIwMjc4ZjQ4OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VmNzllN2MzMzQ1MThiZmRkMTI2NWRiNzQ4MGYwY2FlMDE5MzYwYjEgYi9mdXp6ZXIvY29ycHVzL2VmNzllN2MzMzQ1MThiZmRkMTI2NWRiNzQ4MGYwY2FlMDE5MzYwYjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI1NzE2YwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWY3OWU3YzMzNDUxOGJmZGQxMjY1ZGI3NDgwZjBjYWUwMTkzNjBiMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VmODc2ZWQ0NWFkN2M4NzkwMTg0ODAyNDFkZDViYTVmNzc3OGY0NjIgYi9mdXp6ZXIvY29ycHVzL2VmODc2ZWQ0NWFkN2M4NzkwMTg0ODAyNDFkZDViYTVmNzc3OGY0NjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYyNmU4MwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWY4NzZlZDQ1YWQ3Yzg3OTAxODQ4MDI0MWRkNWJhNWY3Nzc4ZjQ2MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VmYmQyMmMxMzg5MmExZWE0NzUyYjZjZmVlNmIzMTU5YzNkNWFjOWQgYi9mdXp6ZXIvY29ycHVzL2VmYmQyMmMxMzg5MmExZWE0NzUyYjZjZmVlNmIzMTU5YzNkNWFjOWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVlMGRkYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWZiZDIyYzEzODkyYTFlYTQ3NTJiNmNmZWU2YjMxNTljM2Q1YWM5ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VmZGE5YTJlYWI4YmJiMDFlNjJhYzAxNjI1YjhjZjQ5MDlhMTE5OGQgYi9mdXp6ZXIvY29ycHVzL2VmZGE5YTJlYWI4YmJiMDFlNjJhYzAxNjI1YjhjZjQ5MDlhMTE5OGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EzMDRmMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWZkYTlhMmVhYjhiYmIwMWU2MmFjMDE2MjViOGNmNDkwOWExMTk4ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2VmZjFiOWQxNWQ0YmQ2MGU0ODQyZmRlMzdkMDQ4YzkwNjYxZDYxMjEgYi9mdXp6ZXIvY29ycHVzL2VmZjFiOWQxNWQ0YmQ2MGU0ODQyZmRlMzdkMDQ4YzkwNjYxZDYxMjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E1Y2UwYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZWZmMWI5ZDE1ZDRiZDYwZTQ4NDJmZGUzN2QwNDhjOTA2NjFkNjEyMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YwMDNlYmUxNDUyODhiYzkxMWQ4ODQwZDQ3ODBhMGQ0ZGRjNTUzNzMgYi9mdXp6ZXIvY29ycHVzL2YwMDNlYmUxNDUyODhiYzkxMWQ4ODQwZDQ3ODBhMGQ0ZGRjNTUzNzMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE5MDJkNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjAwM2ViZTE0NTI4OGJjOTExZDg4NDBkNDc4MGEwZDRkZGM1NTM3MwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YwMDUyYzhkMjEyNmI5YjdiYTVjMjYzNjliNzhiMzZlZjI1ZmUwZjcgYi9mdXp6ZXIvY29ycHVzL2YwMDUyYzhkMjEyNmI5YjdiYTVjMjYzNjliNzhiMzZlZjI1ZmUwZjcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZiZjRjZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjAwNTJjOGQyMTI2YjliN2JhNWMyNjM2OWI3OGIzNmVmMjVmZTBmNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YwMDhiMjJmNDJjNWY2MWVkOTAzMjcwZDg1OWJjZmYyNDRjMzg5Y2MgYi9mdXp6ZXIvY29ycHVzL2YwMDhiMjJmNDJjNWY2MWVkOTAzMjcwZDg1OWJjZmYyNDRjMzg5Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNkMjdlYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjAwOGIyMmY0MmM1ZjYxZWQ5MDMyNzBkODU5YmNmZjI0NGMzODljYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YwNjE5MWQ5MThhZGIwOTRhMTQ2M2JjMWQzMjAzY2VjNzJhYWEzODQgYi9mdXp6ZXIvY29ycHVzL2YwNjE5MWQ5MThhZGIwOTRhMTQ2M2JjMWQzMjAzY2VjNzJhYWEzODQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgyOTkxMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjA2MTkxZDkxOGFkYjA5NGExNDYzYmMxZDMyMDNjZWM3MmFhYTM4NApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YwOGUxNzMzMDc0NzJjMDFhYjE4MjI5M2ZjZDdkNWJiOWM5ZDMwNWEgYi9mdXp6ZXIvY29ycHVzL2YwOGUxNzMzMDc0NzJjMDFhYjE4MjI5M2ZjZDdkNWJiOWM5ZDMwNWEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY2ZTM2ZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjA4ZTE3MzMwNzQ3MmMwMWFiMTgyMjkzZmNkN2Q1YmI5YzlkMzA1YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YwOTA0NjAxODhjMDJjNTg3YmRmYTEwNjM0NzRjODI0ZDk4OTRkY2MgYi9mdXp6ZXIvY29ycHVzL2YwOTA0NjAxODhjMDJjNTg3YmRmYTEwNjM0NzRjODI0ZDk4OTRkY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ4ZTIzNgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjA5MDQ2MDE4OGMwMmM1ODdiZGZhMTA2MzQ3NGM4MjRkOTg5NGRjYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YwOWIxMTEyZDA1NGUzYjJhYWUxYTc5NjQyNzk3MTZiYmVjYTQ3YjQgYi9mdXp6ZXIvY29ycHVzL2YwOWIxMTEyZDA1NGUzYjJhYWUxYTc5NjQyNzk3MTZiYmVjYTQ3YjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThjYzgzYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjA5YjExMTJkMDU0ZTNiMmFhZTFhNzk2NDI3OTcxNmJiZWNhNDdiNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YwYTBmZmMxNDY4ZWExMTczOTVhODA3ZGZlYmRhMjQ1MmQxNmM0OTkgYi9mdXp6ZXIvY29ycHVzL2YwYTBmZmMxNDY4ZWExMTczOTVhODA3ZGZlYmRhMjQ1MmQxNmM0OTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU3NjBkNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjBhMGZmYzE0NjhlYTExNzM5NWE4MDdkZmViZGEyNDUyZDE2YzQ5OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YwYjhlZjI3YzhlZTE2YjgxODcyYjExNTdlZTQ2MWI5NmM4YjdmNDUgYi9mdXp6ZXIvY29ycHVzL2YwYjhlZjI3YzhlZTE2YjgxODcyYjExNTdlZTQ2MWI5NmM4YjdmNDUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg2ZDQ2ZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjBiOGVmMjdjOGVlMTZiODE4NzJiMTE1N2VlNDYxYjk2YzhiN2Y0NQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YwY2NiYTU4ZjY3MGRjMmZkOTlkZjE3YzE0OTQ5NmMwNjQ5NzA3ZmEgYi9mdXp6ZXIvY29ycHVzL2YwY2NiYTU4ZjY3MGRjMmZkOTlkZjE3YzE0OTQ5NmMwNjQ5NzA3ZmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc0ZDc4NgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjBjY2JhNThmNjcwZGMyZmQ5OWRmMTdjMTQ5NDk2YzA2NDk3MDdmYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YwZDMwM2FhNmJlYjNjM2Y0YzU1MTU4YmRhZWFiZGZhNjM1YzI3ZjEgYi9mdXp6ZXIvY29ycHVzL2YwZDMwM2FhNmJlYjNjM2Y0YzU1MTU4YmRhZWFiZGZhNjM1YzI3ZjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I3MzFiOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjBkMzAzYWE2YmViM2MzZjRjNTUxNThiZGFlYWJkZmE2MzVjMjdmMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YxMjY3OGNmMmUxNjgxODg0OTRmMmU3YWFiNmIwNzBlYjQzOWQyYzIgYi9mdXp6ZXIvY29ycHVzL2YxMjY3OGNmMmUxNjgxODg0OTRmMmU3YWFiNmIwNzBlYjQzOWQyYzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlhMWNiMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjEyNjc4Y2YyZTE2ODE4ODQ5NGYyZTdhYWI2YjA3MGViNDM5ZDJjMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YxMmMyNjFkOTg4OTM2NjlhNzIxNTMzM2Y4OTIzYjBkMmVhMWE4MWYgYi9mdXp6ZXIvY29ycHVzL2YxMmMyNjFkOTg4OTM2NjlhNzIxNTMzM2Y4OTIzYjBkMmVhMWE4MWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YzZDZkYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjEyYzI2MWQ5ODg5MzY2OWE3MjE1MzMzZjg5MjNiMGQyZWExYTgxZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YxNjEwZGIwODFjMTgxYjI5MTIwMWZmNGNkZTZmZGMxODkzOTUyY2MgYi9mdXp6ZXIvY29ycHVzL2YxNjEwZGIwODFjMTgxYjI5MTIwMWZmNGNkZTZmZGMxODkzOTUyY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJjNWIwOQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjE2MTBkYjA4MWMxODFiMjkxMjAxZmY0Y2RlNmZkYzE4OTM5NTJjYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YxYTRiMjljZmZmNTU2OWZiOWI5ZGFhNjViMGUzNDQwYjAzOTYxNWQgYi9mdXp6ZXIvY29ycHVzL2YxYTRiMjljZmZmNTU2OWZiOWI5ZGFhNjViMGUzNDQwYjAzOTYxNWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY3N2JlNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjFhNGIyOWNmZmY1NTY5ZmI5YjlkYWE2NWIwZTM0NDBiMDM5NjE1ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YxYTYzMWVmNDE3M2Q4MDBmNzg1MDBhODY5MjExMDJmZjE5ZWM1ZjQgYi9mdXp6ZXIvY29ycHVzL2YxYTYzMWVmNDE3M2Q4MDBmNzg1MDBhODY5MjExMDJmZjE5ZWM1ZjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI2Yjk2NwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjFhNjMxZWY0MTczZDgwMGY3ODUwMGE4NjkyMTEwMmZmMTllYzVmNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YyM2NhOGMyZGIwOGM4M2Q4NmI3YWE5YTdiYzA0NGQwZDUzNjg2MjkgYi9mdXp6ZXIvY29ycHVzL2YyM2NhOGMyZGIwOGM4M2Q4NmI3YWE5YTdiYzA0NGQwZDUzNjg2MjkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRhMjliNgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjIzY2E4YzJkYjA4YzgzZDg2YjdhYTlhN2JjMDQ0ZDBkNTM2ODYyOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YyNDAwMGYwNTgzNzQyNzAwOGZjMjkwMzAzM2UzYWE5MWJkMjRlNGIgYi9mdXp6ZXIvY29ycHVzL2YyNDAwMGYwNTgzNzQyNzAwOGZjMjkwMzAzM2UzYWE5MWJkMjRlNGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM3YmQyZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjI0MDAwZjA1ODM3NDI3MDA4ZmMyOTAzMDMzZTNhYTkxYmQyNGU0YgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YyNzRlZGE1ZmQ1YWQxZWU2OWI1NWZiZGZiZjQwZGNjNTMyYjA4NDIgYi9mdXp6ZXIvY29ycHVzL2YyNzRlZGE1ZmQ1YWQxZWU2OWI1NWZiZGZiZjQwZGNjNTMyYjA4NDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZkMDk4OAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjI3NGVkYTVmZDVhZDFlZTY5YjU1ZmJkZmJmNDBkY2M1MzJiMDg0MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YyYThhMmU5NWIzNTViOTk1NDNkMmMxNjZkMzM3MWViNjRiNjVkNzIgYi9mdXp6ZXIvY29ycHVzL2YyYThhMmU5NWIzNTViOTk1NDNkMmMxNjZkMzM3MWViNjRiNjVkNzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUzODNhNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjJhOGEyZTk1YjM1NWI5OTU0M2QyYzE2NmQzMzcxZWI2NGI2NWQ3MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YyYWM5MGQ3ZTYyZWFjMGZhM2FjMzRmYzQ0MzlmNjNiMDEzMzNmNGYgYi9mdXp6ZXIvY29ycHVzL2YyYWM5MGQ3ZTYyZWFjMGZhM2FjMzRmYzQ0MzlmNjNiMDEzMzNmNGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc0OGVjNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjJhYzkwZDdlNjJlYWMwZmEzYWMzNGZjNDQzOWY2M2IwMTMzM2Y0ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YyYzFmMDIwNDhlOGVjYmZjYTQ3OTk1MjdmY2RjMjQ5N2I4YjdhZWQgYi9mdXp6ZXIvY29ycHVzL2YyYzFmMDIwNDhlOGVjYmZjYTQ3OTk1MjdmY2RjMjQ5N2I4YjdhZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkxZjRmYQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjJjMWYwMjA0OGU4ZWNiZmNhNDc5OTUyN2ZjZGMyNDk3YjhiN2FlZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YyYzc3NDU1M2RkZThhN2Q0OWE5ZWRlMjJlNzQ1YTNkNjVkNjQ5NGEgYi9mdXp6ZXIvY29ycHVzL2YyYzc3NDU1M2RkZThhN2Q0OWE5ZWRlMjJlNzQ1YTNkNjVkNjQ5NGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU3MDE5MAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjJjNzc0NTUzZGRlOGE3ZDQ5YTllZGUyMmU3NDVhM2Q2NWQ2NDk0YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YyZTdiOGJjZGY4NDBhODI2ZWNmZmZiMjFlZDU1OGU2N2RkYjIxMDIgYi9mdXp6ZXIvY29ycHVzL2YyZTdiOGJjZGY4NDBhODI2ZWNmZmZiMjFlZDU1OGU2N2RkYjIxMDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMzOGJhOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjJlN2I4YmNkZjg0MGE4MjZlY2ZmZmIyMWVkNTU4ZTY3ZGRiMjEwMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YyZTgxMGU1MDBlNTEzN2E1MzBmNjYzYjI4NWNlODRkYjc1NDMwZjkgYi9mdXp6ZXIvY29ycHVzL2YyZTgxMGU1MDBlNTEzN2E1MzBmNjYzYjI4NWNlODRkYjc1NDMwZjkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc4YTc3OAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjJlODEwZTUwMGU1MTM3YTUzMGY2NjNiMjg1Y2U4NGRiNzU0MzBmOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YyZjA3MzdlYTY2NDE2MTBhNjk0ZGRiZWMzMjA5MDczOTYzNjAxZDggYi9mdXp6ZXIvY29ycHVzL2YyZjA3MzdlYTY2NDE2MTBhNjk0ZGRiZWMzMjA5MDczOTYzNjAxZDgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc1Y2Y5YQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjJmMDczN2VhNjY0MTYxMGE2OTRkZGJlYzMyMDkwNzM5NjM2MDFkOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YyZjIxMGQ0MzQwNTZkY2UzODYxMjIzZTNiNzAyNGRkNjU4NDUyNmEgYi9mdXp6ZXIvY29ycHVzL2YyZjIxMGQ0MzQwNTZkY2UzODYxMjIzZTNiNzAyNGRkNjU4NDUyNmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI3NTU4MAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjJmMjEwZDQzNDA1NmRjZTM4NjEyMjNlM2I3MDI0ZGQ2NTg0NTI2YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YzYTgyZThiMzhmOTU0YzBiZTIyNDdkZTNiNmViMzkxMDgzOWY2M2QgYi9mdXp6ZXIvY29ycHVzL2YzYTgyZThiMzhmOTU0YzBiZTIyNDdkZTNiNmViMzkxMDgzOWY2M2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI0MGJlYQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjNhODJlOGIzOGY5NTRjMGJlMjI0N2RlM2I2ZWIzOTEwODM5ZjYzZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2YzYmNhZTQ0MGNiMDc1ZjBhZmMzZTNiNDBjZDQ5M2Q3YWY1YTMxY2EgYi9mdXp6ZXIvY29ycHVzL2YzYmNhZTQ0MGNiMDc1ZjBhZmMzZTNiNDBjZDQ5M2Q3YWY1YTMxY2EKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJiYjgwZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjNiY2FlNDQwY2IwNzVmMGFmYzNlM2I0MGNkNDkzZDdhZjVhMzFjYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y0MDlkYTc4OWFiYjA3YTQ3NDU3YmZkMTI1MzdhY2RkMjdiNGQyZmIgYi9mdXp6ZXIvY29ycHVzL2Y0MDlkYTc4OWFiYjA3YTQ3NDU3YmZkMTI1MzdhY2RkMjdiNGQyZmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAxMjFjNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjQwOWRhNzg5YWJiMDdhNDc0NTdiZmQxMjUzN2FjZGQyN2I0ZDJmYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y0MGUzYTU4NDE2NjczM2U3YzFmNzAyNjkwZmMxOGE5YjZkOGJkZGYgYi9mdXp6ZXIvY29ycHVzL2Y0MGUzYTU4NDE2NjczM2U3YzFmNzAyNjkwZmMxOGE5YjZkOGJkZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUyZjNlOQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjQwZTNhNTg0MTY2NzMzZTdjMWY3MDI2OTBmYzE4YTliNmQ4YmRkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y0MTA4YWVhZmQwNjIzM2U3YTNmNGZlNjNkNTU3MzY4YzhjZWI1MjggYi9mdXp6ZXIvY29ycHVzL2Y0MTA4YWVhZmQwNjIzM2U3YTNmNGZlNjNkNTU3MzY4YzhjZWI1MjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU0Y2IxYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjQxMDhhZWFmZDA2MjMzZTdhM2Y0ZmU2M2Q1NTczNjhjOGNlYjUyOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y0MjU2MDEzNGNiNmFmOGRmZGZiOGE5NTcwYzkzZWVhZDZiN2FjMzEgYi9mdXp6ZXIvY29ycHVzL2Y0MjU2MDEzNGNiNmFmOGRmZGZiOGE5NTcwYzkzZWVhZDZiN2FjMzEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkyYzc2MAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjQyNTYwMTM0Y2I2YWY4ZGZkZmI4YTk1NzBjOTNlZWFkNmI3YWMzMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y0Mjk4MTdkYzI5NjBlN2RhMWRiNTI2ODFjY2RkNzg0YWQxZGFiMWMgYi9mdXp6ZXIvY29ycHVzL2Y0Mjk4MTdkYzI5NjBlN2RhMWRiNTI2ODFjY2RkNzg0YWQxZGFiMWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQxZmZmYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjQyOTgxN2RjMjk2MGU3ZGExZGI1MjY4MWNjZGQ3ODRhZDFkYWIxYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y0NDEwNzBkMzcwMmM5ZGZkMzc0NWM2YjIxODcxMDQzMzMxMDM1MDQgYi9mdXp6ZXIvY29ycHVzL2Y0NDEwNzBkMzcwMmM5ZGZkMzc0NWM2YjIxODcxMDQzMzMxMDM1MDQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFkMGIxOQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjQ0MTA3MGQzNzAyYzlkZmQzNzQ1YzZiMjE4NzEwNDMzMzEwMzUwNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y0NDRjOGEzZTM2NmZjYmNjNWNkYmMwNTExZGMzYzNkM2YzYjUwODkgYi9mdXp6ZXIvY29ycHVzL2Y0NDRjOGEzZTM2NmZjYmNjNWNkYmMwNTExZGMzYzNkM2YzYjUwODkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM1YzMwMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjQ0NGM4YTNlMzY2ZmNiY2M1Y2RiYzA1MTFkYzNjM2QzZjNiNTA4OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y0NTk5MTdkYjM1NTQzMTUyNTFlZTk2NzM1MzkyZmJmODk3MTMwNjQgYi9mdXp6ZXIvY29ycHVzL2Y0NTk5MTdkYjM1NTQzMTUyNTFlZTk2NzM1MzkyZmJmODk3MTMwNjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFmOGQyOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjQ1OTkxN2RiMzU1NDMxNTI1MWVlOTY3MzUzOTJmYmY4OTcxMzA2NApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y0NzE1MzdmMGY4Y2Y2ZTRiNzNlNzM3ZjNiMThlYTVmZDZlYWI3MDIgYi9mdXp6ZXIvY29ycHVzL2Y0NzE1MzdmMGY4Y2Y2ZTRiNzNlNzM3ZjNiMThlYTVmZDZlYWI3MDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgwM2UzZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjQ3MTUzN2YwZjhjZjZlNGI3M2U3MzdmM2IxOGVhNWZkNmVhYjcwMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y0N2NiNTIzZjdhMzJmNDMwNmExYjlmNzg0ODYwMTgyOTlmNTE4ZjUgYi9mdXp6ZXIvY29ycHVzL2Y0N2NiNTIzZjdhMzJmNDMwNmExYjlmNzg0ODYwMTgyOTlmNTE4ZjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU0Nzg2ZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjQ3Y2I1MjNmN2EzMmY0MzA2YTFiOWY3ODQ4NjAxODI5OWY1MThmNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y0OGJjYTM4Njk4M2NkNDJiZTEwNjg2NGQxNjRjZmNhYjUzYWNlYjcgYi9mdXp6ZXIvY29ycHVzL2Y0OGJjYTM4Njk4M2NkNDJiZTEwNjg2NGQxNjRjZmNhYjUzYWNlYjcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMyZmQ1OAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjQ4YmNhMzg2OTgzY2Q0MmJlMTA2ODY0ZDE2NGNmY2FiNTNhY2ViNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y0OTYxMzQ4NzNjODNmMWFhYTcwY2YxYzMxNzU5ZDAzYmJlOWM0OTUgYi9mdXp6ZXIvY29ycHVzL2Y0OTYxMzQ4NzNjODNmMWFhYTcwY2YxYzMxNzU5ZDAzYmJlOWM0OTUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJkZGVlNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjQ5NjEzNDg3M2M4M2YxYWFhNzBjZjFjMzE3NTlkMDNiYmU5YzQ5NQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y0OWEzMmRkODY2YTc2N2I5Y2EyYzA2NDUxZjQ5ZDkyNmQ5NThkOTUgYi9mdXp6ZXIvY29ycHVzL2Y0OWEzMmRkODY2YTc2N2I5Y2EyYzA2NDUxZjQ5ZDkyNmQ5NThkOTUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVmOWIyMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjQ5YTMyZGQ4NjZhNzY3YjljYTJjMDY0NTFmNDlkOTI2ZDk1OGQ5NQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y0YThmYjdlYzc5MmM1ZTAxNmQxYjE3NTZkOWU2MmNjMjVjNGUxYTYgYi9mdXp6ZXIvY29ycHVzL2Y0YThmYjdlYzc5MmM1ZTAxNmQxYjE3NTZkOWU2MmNjMjVjNGUxYTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZlMzQ1MgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjRhOGZiN2VjNzkyYzVlMDE2ZDFiMTc1NmQ5ZTYyY2MyNWM0ZTFhNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y0YzNhZTZjMWIxNDlmZWNlNzE5YTI1YjY0ZjBmZmNmYTBlZjRmNzAgYi9mdXp6ZXIvY29ycHVzL2Y0YzNhZTZjMWIxNDlmZWNlNzE5YTI1YjY0ZjBmZmNmYTBlZjRmNzAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIyMWRhYQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjRjM2FlNmMxYjE0OWZlY2U3MTlhMjViNjRmMGZmY2ZhMGVmNGY3MApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y0ZDRiNThiZGNhNDkyYTZlZDAwM2MyYjQ5YTI2ZjNmNGVhNjgzZmUgYi9mdXp6ZXIvY29ycHVzL2Y0ZDRiNThiZGNhNDkyYTZlZDAwM2MyYjQ5YTI2ZjNmNGVhNjgzZmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg1NzUwNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjRkNGI1OGJkY2E0OTJhNmVkMDAzYzJiNDlhMjZmM2Y0ZWE2ODNmZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y0ZDg1MGE0OTEyMjQ3MzlhODcwYzU3ZDdjY2QzMmUyMmYyZWNiMjMgYi9mdXp6ZXIvY29ycHVzL2Y0ZDg1MGE0OTEyMjQ3MzlhODcwYzU3ZDdjY2QzMmUyMmYyZWNiMjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcyNmQyMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjRkODUwYTQ5MTIyNDczOWE4NzBjNTdkN2NjZDMyZTIyZjJlY2IyMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y1MjI4NDNmMGUxMWI2YzQ4M2E1N2M4ZTUyZWMwZDk3ZWRhNjgxNzUgYi9mdXp6ZXIvY29ycHVzL2Y1MjI4NDNmMGUxMWI2YzQ4M2E1N2M4ZTUyZWMwZDk3ZWRhNjgxNzUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE5NzhmMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjUyMjg0M2YwZTExYjZjNDgzYTU3YzhlNTJlYzBkOTdlZGE2ODE3NQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y1YTg1NGYxYmFkNTk5MzBiMmU4MGU1ZjZmNjM1MDk4OWZmNDQyZjggYi9mdXp6ZXIvY29ycHVzL2Y1YTg1NGYxYmFkNTk5MzBiMmU4MGU1ZjZmNjM1MDk4OWZmNDQyZjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgzZmI2YwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjVhODU0ZjFiYWQ1OTkzMGIyZTgwZTVmNmY2MzUwOTg5ZmY0NDJmOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y1YzM5MDc2Y2Q4ODgxNjBkYTkxZDc4MDU4MTM3YTQwOWZlZDAyZTIgYi9mdXp6ZXIvY29ycHVzL2Y1YzM5MDc2Y2Q4ODgxNjBkYTkxZDc4MDU4MTM3YTQwOWZlZDAyZTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU4ZTBlZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjVjMzkwNzZjZDg4ODE2MGRhOTFkNzgwNTgxMzdhNDA5ZmVkMDJlMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y1ZTkxMDc2ZDBkY2EzYjUzZDRmODVkZDU2NWYzNDZjZTdkYmEzMjIgYi9mdXp6ZXIvY29ycHVzL2Y1ZTkxMDc2ZDBkY2EzYjUzZDRmODVkZDU2NWYzNDZjZTdkYmEzMjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMxMjFjNgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjVlOTEwNzZkMGRjYTNiNTNkNGY4NWRkNTY1ZjM0NmNlN2RiYTMyMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y1ZjkwMTRmNWQ0YThlMjhkOTM5ZTMxM2FhZWUxNDQ1NzIwMDQ2ZTAgYi9mdXp6ZXIvY29ycHVzL2Y1ZjkwMTRmNWQ0YThlMjhkOTM5ZTMxM2FhZWUxNDQ1NzIwMDQ2ZTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM5MTA5ZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjVmOTAxNGY1ZDRhOGUyOGQ5MzllMzEzYWFlZTE0NDU3MjAwNDZlMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y2Mzk4N2JhODUwNmMzZmFkYzI1MWUwMDJlYWI5YmQxOGFhY2Y4M2YgYi9mdXp6ZXIvY29ycHVzL2Y2Mzk4N2JhODUwNmMzZmFkYzI1MWUwMDJlYWI5YmQxOGFhY2Y4M2YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYzNzc3YgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjYzOTg3YmE4NTA2YzNmYWRjMjUxZTAwMmVhYjliZDE4YWFjZjgzZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y2NTgxOWRhNzc5ZTFhMGY1MGEwMzQ5ZWRlNmQ2YTM0OTFjM2UyYWQgYi9mdXp6ZXIvY29ycHVzL2Y2NTgxOWRhNzc5ZTFhMGY1MGEwMzQ5ZWRlNmQ2YTM0OTFjM2UyYWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAyMTE4ZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjY1ODE5ZGE3NzllMWEwZjUwYTAzNDllZGU2ZDZhMzQ5MWMzZTJhZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y2YTY0YzRkNTcyMGJiNWM2ZDFkYmJiYjJiZTc3YTdkYjc2NTUxNjggYi9mdXp6ZXIvY29ycHVzL2Y2YTY0YzRkNTcyMGJiNWM2ZDFkYmJiYjJiZTc3YTdkYjc2NTUxNjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMxZjBjMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjZhNjRjNGQ1NzIwYmI1YzZkMWRiYmJiMmJlNzdhN2RiNzY1NTE2OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y2YzAyMjhhNzU2NGFkOWRhMjViN2Y4YWU0ODQyMTAzMzkxZWIzMjAgYi9mdXp6ZXIvY29ycHVzL2Y2YzAyMjhhNzU2NGFkOWRhMjViN2Y4YWU0ODQyMTAzMzkxZWIzMjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE2YWVlMwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjZjMDIyOGE3NTY0YWQ5ZGEyNWI3ZjhhZTQ4NDIxMDMzOTFlYjMyMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y3NTcxNmEwNTJmZWI0N2U0Nzk1ODQ5MWY2NjMxY2RkZDc0MThkY2UgYi9mdXp6ZXIvY29ycHVzL2Y3NTcxNmEwNTJmZWI0N2U0Nzk1ODQ5MWY2NjMxY2RkZDc0MThkY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVmYmQ4OAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjc1NzE2YTA1MmZlYjQ3ZTQ3OTU4NDkxZjY2MzFjZGRkNzQxOGRjZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y3NjBlNzQ1ODk1OWQxZDRlNjRlMTJhN2ZlNDI1NTI1MzE5NzJiYzkgYi9mdXp6ZXIvY29ycHVzL2Y3NjBlNzQ1ODk1OWQxZDRlNjRlMTJhN2ZlNDI1NTI1MzE5NzJiYzkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc1NzdhMQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjc2MGU3NDU4OTU5ZDFkNGU2NGUxMmE3ZmU0MjU1MjUzMTk3MmJjOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y3OTFkNTVkOWQ0YjI0NjJmYTE1YWY0NGNkMDAxMjJmN2M3OWRlMzYgYi9mdXp6ZXIvY29ycHVzL2Y3OTFkNTVkOWQ0YjI0NjJmYTE1YWY0NGNkMDAxMjJmN2M3OWRlMzYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBiNGEzZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjc5MWQ1NWQ5ZDRiMjQ2MmZhMTVhZjQ0Y2QwMDEyMmY3Yzc5ZGUzNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y3YmJiMmViMTNlMmVkODEwNzhiYWMxMGYzZDA1ZmRjM2YwNWE2ZGQgYi9mdXp6ZXIvY29ycHVzL2Y3YmJiMmViMTNlMmVkODEwNzhiYWMxMGYzZDA1ZmRjM2YwNWE2ZGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNiZDAxMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjdiYmIyZWIxM2UyZWQ4MTA3OGJhYzEwZjNkMDVmZGMzZjA1YTZkZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y4MDY2NDIyOGYzNWY3MDM5NGQwNTYzYTFlZWZhZjNhZGE4YmYwMTMgYi9mdXp6ZXIvY29ycHVzL2Y4MDY2NDIyOGYzNWY3MDM5NGQwNTYzYTFlZWZhZjNhZGE4YmYwMTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM3ZDgyOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjgwNjY0MjI4ZjM1ZjcwMzk0ZDA1NjNhMWVlZmFmM2FkYThiZjAxMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y4MDZjNzIyYjE5YWU2ZjRmZWNlYzRhNDZiMTlmZGJiMTQwNjgzMzMgYi9mdXp6ZXIvY29ycHVzL2Y4MDZjNzIyYjE5YWU2ZjRmZWNlYzRhNDZiMTlmZGJiMTQwNjgzMzMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc3Yjc5NQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjgwNmM3MjJiMTlhZTZmNGZlY2VjNGE0NmIxOWZkYmIxNDA2ODMzMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y4MTE5YmE3Y2E3OGM2NjA1MTcxNWY5ODFjOTdlMDUxM2Q5YzM4MjcgYi9mdXp6ZXIvY29ycHVzL2Y4MTE5YmE3Y2E3OGM2NjA1MTcxNWY5ODFjOTdlMDUxM2Q5YzM4MjcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYwY2NlNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjgxMTliYTdjYTc4YzY2MDUxNzE1Zjk4MWM5N2UwNTEzZDljMzgyNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y4MmEwM2Y0Y2ZhZjYwZjk5OGMwOWZjM2U2NWQ2ODQ5ZWIxNTY3MmYgYi9mdXp6ZXIvY29ycHVzL2Y4MmEwM2Y0Y2ZhZjYwZjk5OGMwOWZjM2U2NWQ2ODQ5ZWIxNTY3MmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU4YzFkOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjgyYTAzZjRjZmFmNjBmOTk4YzA5ZmMzZTY1ZDY4NDllYjE1NjcyZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y4NDYxMzVkYTAzOTZmNjEwMzVhMmFlMTJkMGI3MTMxOWY1ZGE0ZjAgYi9mdXp6ZXIvY29ycHVzL2Y4NDYxMzVkYTAzOTZmNjEwMzVhMmFlMTJkMGI3MTMxOWY1ZGE0ZjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFmMTJiZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjg0NjEzNWRhMDM5NmY2MTAzNWEyYWUxMmQwYjcxMzE5ZjVkYTRmMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y4NTUxZDIzNTViYWFjYmM4MWExNzdiNjhhMDkyNTdkMDAzYTFkNjMgYi9mdXp6ZXIvY29ycHVzL2Y4NTUxZDIzNTViYWFjYmM4MWExNzdiNjhhMDkyNTdkMDAzYTFkNjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlhNTExYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjg1NTFkMjM1NWJhYWNiYzgxYTE3N2I2OGEwOTI1N2QwMDNhMWQ2MwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y4OTJhNTMwODg5NWY1ZDQwZDBlZDc5YWY3NjZlNDE2NTU4OWMxOTcgYi9mdXp6ZXIvY29ycHVzL2Y4OTJhNTMwODg5NWY1ZDQwZDBlZDc5YWY3NjZlNDE2NTU4OWMxOTcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNkZDRkZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjg5MmE1MzA4ODk1ZjVkNDBkMGVkNzlhZjc2NmU0MTY1NTg5YzE5NwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y4YjY1NWE3NWM0NDM3ODc1YjI3NTYwYmE5NDFlMjMyZGM3OTM5MzQgYi9mdXp6ZXIvY29ycHVzL2Y4YjY1NWE3NWM0NDM3ODc1YjI3NTYwYmE5NDFlMjMyZGM3OTM5MzQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJhMTliNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjhiNjU1YTc1YzQ0Mzc4NzViMjc1NjBiYTk0MWUyMzJkYzc5MzkzNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y4YzBjMzAwZGY2MDNkMTgzNzNlOGE3MTBjOThjZmEwMjc5MTBiYmEgYi9mdXp6ZXIvY29ycHVzL2Y4YzBjMzAwZGY2MDNkMTgzNzNlOGE3MTBjOThjZmEwMjc5MTBiYmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkyOWZjOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjhjMGMzMDBkZjYwM2QxODM3M2U4YTcxMGM5OGNmYTAyNzkxMGJiYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y4YzUwZmEyMjdmNmIxZGRlNjE4MTY4ZDE1OWNhZWJiOTFjYWU1NGQgYi9mdXp6ZXIvY29ycHVzL2Y4YzUwZmEyMjdmNmIxZGRlNjE4MTY4ZDE1OWNhZWJiOTFjYWU1NGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY5MmNmZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjhjNTBmYTIyN2Y2YjFkZGU2MTgxNjhkMTU5Y2FlYmI5MWNhZTU0ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y4ZDM1NDE3OWMxMGQyMTkxMjdiNTMyNzNmZjQ3MTY0NGU3ODIxNzYgYi9mdXp6ZXIvY29ycHVzL2Y4ZDM1NDE3OWMxMGQyMTkxMjdiNTMyNzNmZjQ3MTY0NGU3ODIxNzYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVjMjg3OAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjhkMzU0MTc5YzEwZDIxOTEyN2I1MzI3M2ZmNDcxNjQ0ZTc4MjE3NgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y4ZjdhODAyYWE2Nzc4MGYzZDcwYjY4NmIwMTQ5ODQ2MmEwMTUzMjkgYi9mdXp6ZXIvY29ycHVzL2Y4ZjdhODAyYWE2Nzc4MGYzZDcwYjY4NmIwMTQ5ODQ2MmEwMTUzMjkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE1NDQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjhmN2E4MDJhYTY3NzgwZjNkNzBiNjg2YjAxNDk4NDYyYTAxNTMyOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y4ZmJmMGYzMGFhMWYyMDgxYzE1OGE1ZTVkMDI3YmI1NDBlMzQ0YWIgYi9mdXp6ZXIvY29ycHVzL2Y4ZmJmMGYzMGFhMWYyMDgxYzE1OGE1ZTVkMDI3YmI1NDBlMzQ0YWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE3ZGUzNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjhmYmYwZjMwYWExZjIwODFjMTU4YTVlNWQwMjdiYjU0MGUzNDRhYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y4ZmMzMGM0Y2NlNjNkMjJmYjQxMTM5ZTcwOGI0Zjk4ZDdmMzhlY2UgYi9mdXp6ZXIvY29ycHVzL2Y4ZmMzMGM0Y2NlNjNkMjJmYjQxMTM5ZTcwOGI0Zjk4ZDdmMzhlY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYwNDJkNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjhmYzMwYzRjY2U2M2QyMmZiNDExMzllNzA4YjRmOThkN2YzOGVjZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y5MGQ1NDUxYTEyMjY5ZTg3NDFjYTMwMDQwOTYyNWE0Nzc3YTExNTQgYi9mdXp6ZXIvY29ycHVzL2Y5MGQ1NDUxYTEyMjY5ZTg3NDFjYTMwMDQwOTYyNWE0Nzc3YTExNTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE0OWQ5MgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjkwZDU0NTFhMTIyNjllODc0MWNhMzAwNDA5NjI1YTQ3NzdhMTE1NApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y5NDdhNzRiNzU5ZGQ0MjEzOTEwNWFlNjE1MzBlOTYzZWY4MjBhNzMgYi9mdXp6ZXIvY29ycHVzL2Y5NDdhNzRiNzU5ZGQ0MjEzOTEwNWFlNjE1MzBlOTYzZWY4MjBhNzMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVkZDM5ZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjk0N2E3NGI3NTlkZDQyMTM5MTA1YWU2MTUzMGU5NjNlZjgyMGE3MwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y5NGUwNzFjZGE3MzM2MmFlOGMyODRjMTMyYjA1ZjRjMzJiMmYxMmEgYi9mdXp6ZXIvY29ycHVzL2Y5NGUwNzFjZGE3MzM2MmFlOGMyODRjMTMyYjA1ZjRjMzJiMmYxMmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRiMTAzMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjk0ZTA3MWNkYTczMzYyYWU4YzI4NGMxMzJiMDVmNGMzMmIyZjEyYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y5OTU5YzAxNmU5ZmJmZmZiMDUzZjdlNzkwM2U5MWIxYWJmNmExNTggYi9mdXp6ZXIvY29ycHVzL2Y5OTU5YzAxNmU5ZmJmZmZiMDUzZjdlNzkwM2U5MWIxYWJmNmExNTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg3NjY4OQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjk5NTljMDE2ZTlmYmZmZmIwNTNmN2U3OTAzZTkxYjFhYmY2YTE1OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2Y5ZjU4YjI4Yzk1Y2FiMGYyZGFjZGY3MGUyZjA1ZjY0ODUwZmVlYmEgYi9mdXp6ZXIvY29ycHVzL2Y5ZjU4YjI4Yzk1Y2FiMGYyZGFjZGY3MGUyZjA1ZjY0ODUwZmVlYmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQxZjI2NgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZjlmNThiMjhjOTVjYWIwZjJkYWNkZjcwZTJmMDVmNjQ4NTBmZWViYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZhNjI5NzdiZGRkYTA4OTIxNzY5MTI5Mzk2NGRiM2JkNWNhNmJlYzggYi9mdXp6ZXIvY29ycHVzL2ZhNjI5NzdiZGRkYTA4OTIxNzY5MTI5Mzk2NGRiM2JkNWNhNmJlYzgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI0MGQ4MgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmE2Mjk3N2JkZGRhMDg5MjE3NjkxMjkzOTY0ZGIzYmQ1Y2E2YmVjOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZhNjgxZmVkZDJjNmZhNzM0Y2UxYmQ5ZDdkOGZlZjcxMzhmZWExZGEgYi9mdXp6ZXIvY29ycHVzL2ZhNjgxZmVkZDJjNmZhNzM0Y2UxYmQ5ZDdkOGZlZjcxMzhmZWExZGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNmZGZiYwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmE2ODFmZWRkMmM2ZmE3MzRjZTFiZDlkN2Q4ZmVmNzEzOGZlYTFkYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZhOGM0MDE1YTdjMDNiZDJiMWFmNzEyYjE0OGZiNmE0Njk3NmFjMzAgYi9mdXp6ZXIvY29ycHVzL2ZhOGM0MDE1YTdjMDNiZDJiMWFmNzEyYjE0OGZiNmE0Njk3NmFjMzAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQyZTI3YQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmE4YzQwMTVhN2MwM2JkMmIxYWY3MTJiMTQ4ZmI2YTQ2OTc2YWMzMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZhYmIxZDY3N2I4YmU5ZDM0MzAyZjMyNzM3MGQxYTA2OWQ1Y2Q3MzIgYi9mdXp6ZXIvY29ycHVzL2ZhYmIxZDY3N2I4YmU5ZDM0MzAyZjMyNzM3MGQxYTA2OWQ1Y2Q3MzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFjOWMxNwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmFiYjFkNjc3YjhiZTlkMzQzMDJmMzI3MzcwZDFhMDY5ZDVjZDczMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZhZjkxZDQxYjg4ZTBlYmZkYmUxNmMxMzNmOGFlYzRmNTQ2NDM4NjcgYi9mdXp6ZXIvY29ycHVzL2ZhZjkxZDQxYjg4ZTBlYmZkYmUxNmMxMzNmOGFlYzRmNTQ2NDM4NjcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY0MTNmMQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmFmOTFkNDFiODhlMGViZmRiZTE2YzEzM2Y4YWVjNGY1NDY0Mzg2NwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZiMDVhZDg1MzNkYmVhMzdiODI1YzczNWE4ZjI3NTc0N2QzYzNkNjUgYi9mdXp6ZXIvY29ycHVzL2ZiMDVhZDg1MzNkYmVhMzdiODI1YzczNWE4ZjI3NTc0N2QzYzNkNjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQxOTRiNgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmIwNWFkODUzM2RiZWEzN2I4MjVjNzM1YThmMjc1NzQ3ZDNjM2Q2NQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZiMjY1Y2IzNmQwM2Y0MDJkZDA5YTFkODc0M2JmY2ZiNTI5NDhiMWIgYi9mdXp6ZXIvY29ycHVzL2ZiMjY1Y2IzNmQwM2Y0MDJkZDA5YTFkODc0M2JmY2ZiNTI5NDhiMWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGExNmQzMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmIyNjVjYjM2ZDAzZjQwMmRkMDlhMWQ4NzQzYmZjZmI1Mjk0OGIxYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZiM2U5ZjExOWFmODhhMTk0ZTRjYzQ2YTA3ZDA5ODBlMGQwODQ3MmQgYi9mdXp6ZXIvY29ycHVzL2ZiM2U5ZjExOWFmODhhMTk0ZTRjYzQ2YTA3ZDA5ODBlMGQwODQ3MmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMyNzQ1MgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmIzZTlmMTE5YWY4OGExOTRlNGNjNDZhMDdkMDk4MGUwZDA4NDcyZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZiNzBmZmQ1N2RlMDg0YTc5NzUwMGUyMTk4NmYwN2YxODVhYTU2YTIgYi9mdXp6ZXIvY29ycHVzL2ZiNzBmZmQ1N2RlMDg0YTc5NzUwMGUyMTk4NmYwN2YxODVhYTU2YTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk1YWFlMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmI3MGZmZDU3ZGUwODRhNzk3NTAwZTIxOTg2ZjA3ZjE4NWFhNTZhMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZiYTQyMWIzMzhiM2ViOWY3NzUyZDhjYzFlZWRhOGM3YjI4ZjhlYjggYi9mdXp6ZXIvY29ycHVzL2ZiYTQyMWIzMzhiM2ViOWY3NzUyZDhjYzFlZWRhOGM3YjI4ZjhlYjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNjM2Y0YwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmJhNDIxYjMzOGIzZWI5Zjc3NTJkOGNjMWVlZGE4YzdiMjhmOGViOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZiYjc3NzAwMTE0Y2IwYzBiYjY1ODRmZGIzYzZiOTA1MjVmYjNjNjkgYi9mdXp6ZXIvY29ycHVzL2ZiYjc3NzAwMTE0Y2IwYzBiYjY1ODRmZGIzYzZiOTA1MjVmYjNjNjkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQxNjMyZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmJiNzc3MDAxMTRjYjBjMGJiNjU4NGZkYjNjNmI5MDUyNWZiM2M2OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZiYmI0YThlMjgyZWNjY2JiNTA3ZTk3OWM0ZDViMjVhMTQ3NGE0MzIgYi9mdXp6ZXIvY29ycHVzL2ZiYmI0YThlMjgyZWNjY2JiNTA3ZTk3OWM0ZDViMjVhMTQ3NGE0MzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYyM2RlMQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmJiYjRhOGUyODJlY2NjYmI1MDdlOTc5YzRkNWIyNWExNDc0YTQzMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZiYzBlZDA3NGM3YTRlOTcwMWM3ZGQ1ZmIzZjIyZmFhZTgzYjcyZGMgYi9mdXp6ZXIvY29ycHVzL2ZiYzBlZDA3NGM3YTRlOTcwMWM3ZGQ1ZmIzZjIyZmFhZTgzYjcyZGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMwYTYxZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmJjMGVkMDc0YzdhNGU5NzAxYzdkZDVmYjNmMjJmYWFlODNiNzJkYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZiZDcyN2Y3MmIwNzVkZmQ4YjY1YTA2M2QyNTYxNmQ4OGJjNTVhNTggYi9mdXp6ZXIvY29ycHVzL2ZiZDcyN2Y3MmIwNzVkZmQ4YjY1YTA2M2QyNTYxNmQ4OGJjNTVhNTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYyMWY4ZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmJkNzI3ZjcyYjA3NWRmZDhiNjVhMDYzZDI1NjE2ZDg4YmM1NWE1OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZiZDc0NGM3NGFkZGQyNDQ2YmMzNDIxZWUyNTU3ODI3NDU5NDQ5MTIgYi9mdXp6ZXIvY29ycHVzL2ZiZDc0NGM3NGFkZGQyNDQ2YmMzNDIxZWUyNTU3ODI3NDU5NDQ5MTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY4OTc3OAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmJkNzQ0Yzc0YWRkZDI0NDZiYzM0MjFlZTI1NTc4Mjc0NTk0NDkxMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZiZTdkMmZlNzRlYzc2YzczMTViMTQzNmE4ZWIxZWYyYmQ3MTc5MGQgYi9mdXp6ZXIvY29ycHVzL2ZiZTdkMmZlNzRlYzc2YzczMTViMTQzNmE4ZWIxZWYyYmQ3MTc5MGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRjNmIyNQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmJlN2QyZmU3NGVjNzZjNzMxNWIxNDM2YThlYjFlZjJiZDcxNzkwZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZjMDc4NDY1OWYyZjJkYjE0Njc1YzA4MDkxYTcyNzQ4ZThiZjA2NTMgYi9mdXp6ZXIvY29ycHVzL2ZjMDc4NDY1OWYyZjJkYjE0Njc1YzA4MDkxYTcyNzQ4ZThiZjA2NTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThiMzA4MwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmMwNzg0NjU5ZjJmMmRiMTQ2NzVjMDgwOTFhNzI3NDhlOGJmMDY1MwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZjNzI2MjdlMWUxMThiMjdkODU3ZWNjODIxZDcyMzBhNGEzZTE5ZWEgYi9mdXp6ZXIvY29ycHVzL2ZjNzI2MjdlMWUxMThiMjdkODU3ZWNjODIxZDcyMzBhNGEzZTE5ZWEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM3NjE5MgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmM3MjYyN2UxZTExOGIyN2Q4NTdlY2M4MjFkNzIzMGE0YTNlMTllYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZjYmFhODBlZjQ2NWIwNGE5YjIzYWVkNWZkZWViOWJiYWU4YTJiZTMgYi9mdXp6ZXIvY29ycHVzL2ZjYmFhODBlZjQ2NWIwNGE5YjIzYWVkNWZkZWViOWJiYWU4YTJiZTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ4MzE0OAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmNiYWE4MGVmNDY1YjA0YTliMjNhZWQ1ZmRlZWI5YmJhZThhMmJlMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZjYmZjYzE0YjdjZTk1ZjNkNGM3OWQzZjBkMDEzZTI2ZmJiM2Y5MGUgYi9mdXp6ZXIvY29ycHVzL2ZjYmZjYzE0YjdjZTk1ZjNkNGM3OWQzZjBkMDEzZTI2ZmJiM2Y5MGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFlYzljMQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmNiZmNjMTRiN2NlOTVmM2Q0Yzc5ZDNmMGQwMTNlMjZmYmIzZjkwZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZjZGVjMzFhM2JjYjVlMDUwNTg3NDk3NDZlZGY5ZWM4NjBiNTRhODUgYi9mdXp6ZXIvY29ycHVzL2ZjZGVjMzFhM2JjYjVlMDUwNTg3NDk3NDZlZGY5ZWM4NjBiNTRhODUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NlMjE0YwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmNkZWMzMWEzYmNiNWUwNTA1ODc0OTc0NmVkZjllYzg2MGI1NGE4NQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZjZjk0ODg3ZGM3OTJkMTQ2MDFhMGIxZWRmN2JmMmJjMjllZjg3MjUgYi9mdXp6ZXIvY29ycHVzL2ZjZjk0ODg3ZGM3OTJkMTQ2MDFhMGIxZWRmN2JmMmJjMjllZjg3MjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JhYmY3NAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmNmOTQ4ODdkYzc5MmQxNDYwMWEwYjFlZGY3YmYyYmMyOWVmODcyNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZkNTY3NzgzYjhmODlmZjhmZmY0YjM2OGU4MjdjYmMxY2U0NzE4ZGIgYi9mdXp6ZXIvY29ycHVzL2ZkNTY3NzgzYjhmODlmZjhmZmY0YjM2OGU4MjdjYmMxY2U0NzE4ZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc4YzcxMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmQ1Njc3ODNiOGY4OWZmOGZmZjRiMzY4ZTgyN2NiYzFjZTQ3MThkYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZkNTljMDQ5NjZlNzAyZTY5YzFkMTU5MDQ0NGZjMTJjZjUxMmRhYzEgYi9mdXp6ZXIvY29ycHVzL2ZkNTljMDQ5NjZlNzAyZTY5YzFkMTU5MDQ0NGZjMTJjZjUxMmRhYzEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ4ZDkwMAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmQ1OWMwNDk2NmU3MDJlNjljMWQxNTkwNDQ0ZmMxMmNmNTEyZGFjMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZkNjU3Y2NhYWNhMDZkMGE0YWMzMGQ3OTY1YzQxY2MyYmVlNjk3OGUgYi9mdXp6ZXIvY29ycHVzL2ZkNjU3Y2NhYWNhMDZkMGE0YWMzMGQ3OTY1YzQxY2MyYmVlNjk3OGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk2ZDJiOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmQ2NTdjY2FhY2EwNmQwYTRhYzMwZDc5NjVjNDFjYzJiZWU2OTc4ZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZkNzY5NWM0ZTJhZWQzMTdjYjg2ZTljMTA3NGFlYjhhOTg5ZmRhMjkgYi9mdXp6ZXIvY29ycHVzL2ZkNzY5NWM0ZTJhZWQzMTdjYjg2ZTljMTA3NGFlYjhhOTg5ZmRhMjkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmExYTU3YwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmQ3Njk1YzRlMmFlZDMxN2NiODZlOWMxMDc0YWViOGE5ODlmZGEyOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZkOTVkOTM3ZDgyZGViYmI4NWFkMzA4ZTM0YzBiMTc1NmNhYjc1NmIgYi9mdXp6ZXIvY29ycHVzL2ZkOTVkOTM3ZDgyZGViYmI4NWFkMzA4ZTM0YzBiMTc1NmNhYjc1NmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZhN2NhZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmQ5NWQ5MzdkODJkZWJiYjg1YWQzMDhlMzRjMGIxNzU2Y2FiNzU2YgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZkZDZhODA4MDY2YTY3NWU5OTg0NTQyYmE2OWVkNzRhOTVmNDc4ZWIgYi9mdXp6ZXIvY29ycHVzL2ZkZDZhODA4MDY2YTY3NWU5OTg0NTQyYmE2OWVkNzRhOTVmNDc4ZWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYxOTUyMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmRkNmE4MDgwNjZhNjc1ZTk5ODQ1NDJiYTY5ZWQ3NGE5NWY0NzhlYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZlMTU5NDU5MjVlODliZTgyNDlkYjNiOTY4ZWY2YjhiY2ZkNzYyZjQgYi9mdXp6ZXIvY29ycHVzL2ZlMTU5NDU5MjVlODliZTgyNDlkYjNiOTY4ZWY2YjhiY2ZkNzYyZjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE2MGUxNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmUxNTk0NTkyNWU4OWJlODI0OWRiM2I5NjhlZjZiOGJjZmQ3NjJmNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZlMWY5OGI4ZTk1NTZhYjNlZDFkMWE0M2M5ODFiNTJmNmRmYTZiYjQgYi9mdXp6ZXIvY29ycHVzL2ZlMWY5OGI4ZTk1NTZhYjNlZDFkMWE0M2M5ODFiNTJmNmRmYTZiYjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MyODdhZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmUxZjk4YjhlOTU1NmFiM2VkMWQxYTQzYzk4MWI1MmY2ZGZhNmJiNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZlNjNmMjYxNzgwZDcyNzcxNTMzNzAxNTJlYWQxNzcwMGQ5MzliNjggYi9mdXp6ZXIvY29ycHVzL2ZlNjNmMjYxNzgwZDcyNzcxNTMzNzAxNTJlYWQxNzcwMGQ5MzliNjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUwZmVjOQotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmU2M2YyNjE3ODBkNzI3NzE1MzM3MDE1MmVhZDE3NzAwZDkzOWI2OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZlNzMxODhhZjczMzJkYmQ0MWUxM2YwZDZlYjY4ODEzY2ZlNjY2ZGQgYi9mdXp6ZXIvY29ycHVzL2ZlNzMxODhhZjczMzJkYmQ0MWUxM2YwZDZlYjY4ODEzY2ZlNjY2ZGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFjZWI5OAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmU3MzE4OGFmNzMzMmRiZDQxZTEzZjBkNmViNjg4MTNjZmU2NjZkZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZlOWZiNGE4ZWU4ZGY2NDU1ZTJmNThkZDVlMGZhMThkMjU4Yzg3NjcgYi9mdXp6ZXIvY29ycHVzL2ZlOWZiNGE4ZWU4ZGY2NDU1ZTJmNThkZDVlMGZhMThkMjU4Yzg3NjcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRkNjYyNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmU5ZmI0YThlZThkZjY0NTVlMmY1OGRkNWUwZmExOGQyNThjODc2NwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZlZjUzOTkwYTlkZmE2ODI5YzIzNmY2OGE1MWRkMjczMDU0MTg0ZmQgYi9mdXp6ZXIvY29ycHVzL2ZlZjUzOTkwYTlkZmE2ODI5YzIzNmY2OGE1MWRkMjczMDU0MTg0ZmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU0ZmEwOAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmVmNTM5OTBhOWRmYTY4MjljMjM2ZjY4YTUxZGQyNzMwNTQxODRmZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZmMmRmMjAzMjFhYzJiNDliNTEyZWY0NzM2ZmZmZDVlM2Q2OGFjMWMgYi9mdXp6ZXIvY29ycHVzL2ZmMmRmMjAzMjFhYzJiNDliNTEyZWY0NzM2ZmZmZDVlM2Q2OGFjMWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IzYzVhNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmYyZGYyMDMyMWFjMmI0OWI1MTJlZjQ3MzZmZmZkNWUzZDY4YWMxYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZmNTg1Nzk5MDFhOGE1ODI3NGJlY2ZhOTNiYzQ0MzY1YTMyMWQyMmIgYi9mdXp6ZXIvY29ycHVzL2ZmNTg1Nzk5MDFhOGE1ODI3NGJlY2ZhOTNiYzQ0MzY1YTMyMWQyMmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVkOWRmNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmY1ODU3OTkwMWE4YTU4Mjc0YmVjZmE5M2JjNDQzNjVhMzIxZDIyYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZmZDRhMzFkYzc0MTVkMzE0MzI0NjYxZGY3MTUzYWEzMTY0MGFmOTkgYi9mdXp6ZXIvY29ycHVzL2ZmZDRhMzFkYzc0MTVkMzE0MzI0NjYxZGY3MTUzYWEzMTY0MGFmOTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI0NzcwZgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmZkNGEzMWRjNzQxNWQzMTQzMjQ2NjFkZjcxNTNhYTMxNjQwYWY5OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZmZWRjYzA3YjAyNGE3NmY2ZTZiODU5ZDYxYzg3Y2MwMzUwMTIyMDEgYi9mdXp6ZXIvY29ycHVzL2ZmZWRjYzA3YjAyNGE3NmY2ZTZiODU5ZDYxYzg3Y2MwMzUwMTIyMDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMyMjkzMgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmZlZGNjMDdiMDI0YTc2ZjZlNmI4NTlkNjFjODdjYzAzNTAxMjIwMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZmZWY4YmViZjliYjcwN2E1Y2I3ZDliYjU1ZWIxYjNkOGY1NGQ3MDIgYi9mdXp6ZXIvY29ycHVzL2ZmZWY4YmViZjliYjcwN2E1Y2I3ZDliYjU1ZWIxYjNkOGY1NGQ3MDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJmNTg1NwotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmZlZjhiZWJmOWJiNzA3YTVjYjdkOWJiNTVlYjFiM2Q4ZjU0ZDcwMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZmZjczZmVhNjJlNzdlMTZkYTJhMTc3M2RlMjU5NDVmNDg2MGE5OTEgYi9mdXp6ZXIvY29ycHVzL2ZmZjczZmVhNjJlNzdlMTZkYTJhMTc3M2RlMjU5NDVmNDg2MGE5OTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNmZTRlNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmZmNzNmZWE2MmU3N2UxNmRhMmExNzczZGUyNTk0NWY0ODYwYTk5MQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvY29ycHVzL2ZmZmE2OWI4NzgxYjNkZjk3MTEwNTlhMTdkMzY1NjcwYzAzN2I0MTkgYi9mdXp6ZXIvY29ycHVzL2ZmZmE2OWI4NzgxYjNkZjk3MTEwNTlhMTdkMzY1NjcwYzAzN2I0MTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBkOTViZAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9jb3JwdXMvZmZmYTY5Yjg3ODFiM2RmOTcxMTA1OWExN2QzNjU2NzBjMDM3YjQxOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mdXp6ZXIvZnV6emVyLmMgYi9mdXp6ZXIvZnV6emVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg2M2UzNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9mdXp6ZXIuYwpAQCAtMCwwICsxLDkzNiBAQAorLyogQnkgR3VpZG8gVnJhbmtlbiA8Z3VpZG92cmFua2VuQGdtYWlsLmNvbT4gLS0KKyAqIGh0dHBzOi8vZ3VpZG92cmFua2VuLndvcmRwcmVzcy5jb20vICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlICJzcnRwLmgiCisjaW5jbHVkZSAic3J0cF9wcml2LmgiCisjaW5jbHVkZSAiZWt0LmgiCisjaW5jbHVkZSAiZnV6emVyLmgiCisjaW5jbHVkZSAibXQxOTkzNy5oIgorI2luY2x1ZGUgInRlc3RtZW0uaCIKKworLyogR2xvYmFsIHZhcmlhYmxlcyAqLworc3RhdGljIGJvb2wgZ19ub19hbGlnbiA9IGZhbHNlOyAvKiBDYW4gYmUgZW5hYmxlZCB3aXRoIC0tbm9fYWxpZ24gKi8KK3N0YXRpYyBib29sIGdfcG9zdF9pbml0ID0KKyAgICBmYWxzZTsgLyogU2V0IHRvIHRydWUgb25jZSBwYXN0IGluaXRpYWxpemF0aW9uIHBoYXNlICovCitzdGF0aWMgYm9vbCBnX3dyaXRlX2lucHV0ID0gZmFsc2U7CisKKyNpZmRlZiBGVVpaXzMyQklUCisjaW5jbHVkZSA8c3lzL21tYW4uaD4KK3N0YXRpYyBib29sIGdfbm9fbW1hcCA9IGZhbHNlOyAvKiBDYW4gYmUgZW5hYmxlZCB3aXRoIC0tbm9fbW1hcCAqLworc3RhdGljIHZvaWQgKmdfbW1hcF9hbGxvY2F0aW9uID0KKyAgICBOVUxMOyAvKiBLZWVwcyBjdXJyZW50IG1tYXAoKSBhbGxvY2F0aW9uIGFkZHJlc3MgKi8KK3N0YXRpYyBzaXplX3QgZ19tbWFwX2FsbG9jYXRpb25fc2l6ZSA9CisgICAgMDsgLyogS2VlcHMgY3VycmVudCBtbWFwKCkgYWxsb2NhdGlvbiBzaXplICovCisjZW5kaWYKKworLyogQ3VzdG9tIGFsbG9jYXRvciBmdW5jdGlvbnMgKi8KKworc3RhdGljIHZvaWQgKmZ1enpfYWxsb2MoY29uc3Qgc2l6ZV90IHNpemUsIGNvbnN0IGJvb2wgZG9femVybykKK3sKKyAgICB2b2lkICpyZXQgPSBOVUxMOworI2lmZGVmIEZVWlpfMzJCSVQKKyAgICBib29sIGRvX21hbGxvYyA9IHRydWU7CisjZW5kaWYKKyAgICBib29sIGRvX21tYXAsIG1tYXBfaGlnaCA9IHRydWU7CisKKyAgICBpZiAoc2l6ZSA9PSAwKSB7CisgICAgICAgIHNpemVfdCByZXQ7CisgICAgICAgIC8qIEFsbG9jYXRpb25zIG9mIHNpemUgMCBhcmUgbm90IGlsbGVnYWwsIGJ1dCBhcmUgYSBiYWQgcHJhY3RpY2UsIHNpbmNlCisgICAgICAgICAqIHdyaXRpbmcganVzdCBhIHNpbmdsZSBieXRlIHRvIHRoaXMgcmVnaW9uIGNvbnN0aXR1dGVzIHVuZGVmaW5lZAorICAgICAgICAgKiBiZWhhdmlvciBwZXIgdGhlIEMgc3BlYy4gZ2xpYmMgd2lsbCByZXR1cm4gYSBzbWFsbCwgdmFsaWQgbWVtb3J5CisgICAgICAgICAqIHJlZ2lvbgorICAgICAgICAgKiB3aGVyZWFzIE9wZW5CU0Qgd2lsbCBjcmFzaCB1cG9uIHdyaXRpbmcgdG8gaXQuCisgICAgICAgICAqIEludGVudGlvbmFsbHkgcmV0dXJuIGEgcG9pbnRlciB0byBhbiBpbnZhbGlkIHBhZ2UgdG8gZGV0ZWN0CisgICAgICAgICAqIHVuc291bmQgY29kZSBlZmZpY2llbnRseS4KKyAgICAgICAgICogZnV6el9mcmVlIGlzIGF3YXJlIG9mIHRoaXMgcG9pbnRlciByYW5nZSBhbmQgd2lsbCBub3QgYXR0ZW1wdAorICAgICAgICAgKiB0byBmcmVlKCkvbXVubWFwKCkgaXQuCisgICAgICAgICAqLworICAgICAgICByZXQgPSAweDAxICsgKGZ1enpfbXQxOTkzN19nZXQoKSAlIDEwMjQpOworICAgICAgICByZXR1cm4gKHZvaWQgKilyZXQ7CisgICAgfQorCisgICAgLyogRG9uJ3QgZG8gbW1hcCgpLWJhc2VkIGFsbG9jYXRpb25zIGR1cmluZyBpbml0aWFsaXphdGlvbiAqLworICAgIGlmIChnX3Bvc3RfaW5pdCA9PSB0cnVlKSB7CisgICAgICAgIC8qIEV2ZW4gZXh0cmFjdCB0aGVzZSB2YWx1ZXMgaWYgLS1ub19tbWFwIGlzIHNwZWNpZmllZC4KKyAgICAgICAgICogVGhpcyBrZWVwcyB0aGUgUFJORyBvdXRwdXQgc3RyZWFtIGNvbnNpc3RlbnQgYWNyb3NzCisgICAgICAgICAqIGZ1enplciBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICovCisgICAgICAgIGRvX21tYXAgPSAoZnV6el9tdDE5OTM3X2dldCgpICUgNjQpID09IDAgPyB0cnVlIDogZmFsc2U7CisgICAgICAgIGlmIChkb19tbWFwID09IHRydWUpIHsKKyAgICAgICAgICAgIG1tYXBfaGlnaCA9IChmdXp6X210MTk5MzdfZ2V0KCkgJSAyKSA9PSAwID8gdHJ1ZSA6IGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZG9fbW1hcCA9IGZhbHNlOworICAgIH0KKworI2lmZGVmIEZVWlpfMzJCSVQKKyAgICAvKiBnX21tYXBfYWxsb2NhdGlvbiBtdXN0IGJlIE5VTEwgYmVjYXVzZSB3ZSBvbmx5IHN1cHBvcnQgYSBzaW5nbGUKKyAgICAgKiBjb25jdXJyZW50IG1tYXAgYWxsb2NhdGlvbiBhdCBhIHRpbWUKKyAgICAgKi8KKyAgICBpZiAoZ19tbWFwX2FsbG9jYXRpb24gPT0gTlVMTCAmJiBnX25vX21tYXAgPT0gZmFsc2UgJiYgZG9fbW1hcCA9PSB0cnVlKSB7CisgICAgICAgIHZvaWQgKm1tYXBfYWRkcmVzczsKKyAgICAgICAgaWYgKG1tYXBfaGlnaCA9PSB0cnVlKSB7CisgICAgICAgICAgICBtbWFwX2FkZHJlc3MgPSAodm9pZCAqKTB4RkZGRjAwMDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtbWFwX2FkZHJlc3MgPSAodm9pZCAqKTB4MDAwMTAwMDA7CisgICAgICAgIH0KKyAgICAgICAgZ19tbWFwX2FsbG9jYXRpb25fc2l6ZSA9IHNpemU7CisKKyAgICAgICAgcmV0ID0gbW1hcChtbWFwX2FkZHJlc3MsIGdfbW1hcF9hbGxvY2F0aW9uX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7CisKKyAgICAgICAgaWYgKHJldCA9PSBNQVBfRkFJTEVEKSB7CisgICAgICAgICAgICAvKiBUaGF0J3Mgb2theSAtLSBqdXN0IHJldHVybiBOVUxMIHRvIHRoZSBjYWxsZXIgKi8KKworICAgICAgICAgICAgcmV0ID0gTlVMTDsKKworICAgICAgICAgICAgLyogUmVzZXQgdGhpcyBmb3IgdGhlIHNha2Ugb2YgY2xlYW5saW5lc3MgKi8KKyAgICAgICAgICAgIGdfbW1hcF9hbGxvY2F0aW9uX3NpemUgPSAwOworICAgICAgICB9CisgICAgICAgIC8qIHJldCBub3QgYmVpbmcgTUFQX0ZBSUxFRCBkb2VzIG5vdCBtZWFuIHRoYXQgcmV0IGlzIHRoZSByZXF1ZXN0ZWQKKyAgICAgICAgICogYWRkcmVzcyAobW1hcF9hZGRyZXNzKS4gVGhhdCdzIG9rYXkuIFdlJ3JlIG5vdCBnb2luZyB0byBwZXJmb3JtCisgICAgICAgICAqIGEgbXVubWFwKCkgb24gaXQgYW5kIGNhbGwgbWFsbG9jKCkgaW5zdGVhZC4gSXQgd29uJ3QgZ2FpbiB1cworICAgICAgICAgKiBhbnl0aGluZy4KKyAgICAgICAgICovCisKKyAgICAgICAgZ19tbWFwX2FsbG9jYXRpb24gPSByZXQ7CisgICAgICAgIGRvX21hbGxvYyA9IGZhbHNlOworICAgIH0KKworICAgIGlmIChkb19tYWxsb2MgPT0gdHJ1ZSkKKyNlbmRpZgorICAgIHsKKyAgICAgICAgcmV0ID0gbWFsbG9jKHNpemUpOworICAgIH0KKworICAgIC8qIE1pbWljIGNhbGxvYygpIGlmIHNvIHJlcXVlc3RlZCAqLworICAgIGlmIChyZXQgIT0gTlVMTCAmJiBkb196ZXJvKSB7CisgICAgICAgIG1lbXNldChyZXQsIDAsIHNpemUpOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKKy8qIEludGVybmFsIGFsbG9jYXRpb25zIGJ5IHRoaXMgZnV6emVyIG11c3Qgb24gb25lIGhhbmQgKHNvbWV0aW1lcykKKyAqIHJlY2VpdmUgbWVtb3J5IGZyb20gbW1hcCgpLCBidXQgb24gdGhlIG90aGVyIGhhbmQgdGhlc2UgcmVxdWVzdHMgZm9yCisgKiBtZW1vcnkgbWF5IG5vdCBmYWlsLiBCeSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHRoZSBhbGxvY2F0aW9uIGlzCisgKiBndWFyYW50ZWVkIHRvIHN1Y2NlZWQ7IGl0IGZpcnN0IHRyaWVzIHdpdGggZnV6el9hbGxvYygpLCB3aGljaCBtYXkKKyAqIGZhaWwgaWYgaXQgdXNlcyBtbWFwKCksIGFuZCBpZiB0aGF0IGlzIHRoZSBjYXNlLCBtZW1vcnkgaXMgYWxsb2NhdGVkCisgKiB2aWEgdGhlIGxpYmMgYWxsb2NhdG9yIChtYWxsb2MsIGNhbGxvYykgd2hpY2ggc2hvdWxkIGFsd2F5cyBzdWNjZWVkICovCitzdGF0aWMgdm9pZCAqZnV6el9hbGxvY19zdWNjZWVkKGNvbnN0IHNpemVfdCBzaXplLCBjb25zdCBib29sIGRvX3plcm8pCit7CisgICAgdm9pZCAqcmV0ID0gZnV6el9hbGxvYyhzaXplLCBkb196ZXJvKTsKKyAgICBpZiAocmV0ID09IE5VTEwpIHsKKyAgICAgICAgaWYgKGRvX3plcm8gPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIHJldCA9IG1hbGxvYyhzaXplKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldCA9IGNhbGxvYygxLCBzaXplKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK3ZvaWQgKmZ1enpfY2FsbG9jKGNvbnN0IHNpemVfdCBubWVtYiwgY29uc3Qgc2l6ZV90IHNpemUpCit7CisgICAgLyogV2UgbXVzdCBiZSBwYXN0IHNydHBfaW5pdCgpIHRvIHByZXZlbnQgdGhhdCB0aGF0IGZ1bmN0aW9uIGZhaWxzICovCisgICAgaWYgKGdfcG9zdF9pbml0ID09IHRydWUpIHsKKyAgICAgICAgLyogRmFpbCAxIGluIDY0IGFsbG9jYXRpb25zIG9uIGF2ZXJhZ2UgdG8gdGVzdCB3aGV0aGVyIHRoZSBsaWJyYXJ5CisgICAgICAgICAqIGNhbiBkZWFsIHdpdGggdGhpcyBwcm9wZXJseS4KKyAgICAgICAgICovCisgICAgICAgIGlmICgoZnV6el9tdDE5OTM3X2dldCgpICUgNjQpID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZ1enpfYWxsb2Mobm1lbWIgKiBzaXplLCB0cnVlKTsKK30KKworc3RhdGljIGJvb2wgZnV6el9pc19zcGVjaWFsX3BvaW50ZXIodm9pZCAqcHRyKQoreworICAgIC8qIFNwZWNpYWwsIGludmFsaWQgcG9pbnRlcnMgaW50cm9kdWNlZCB3aGVuIGNvZGUgYXR0ZW1wdGVkCisgICAgICogdG8gZG8gc2l6ZSA9IDAgYWxsb2NhdGlvbnMuCisgICAgICovCisgICAgaWYgKChzaXplX3QpcHRyID49IDB4MDEgJiYgKHNpemVfdClwdHIgPCAoMHgwMSArIDEwMjQpKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgZnV6el9mcmVlKHZvaWQgKnB0cikKK3sKKyAgICBpZiAoZnV6el9pc19zcGVjaWFsX3BvaW50ZXIocHRyKSA9PSB0cnVlKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZmRlZiBGVVpaXzMyQklUCisgICAgaWYgKGdfcG9zdF9pbml0ID09IHRydWUgJiYgcHRyICE9IE5VTEwgJiYgcHRyID09IGdfbW1hcF9hbGxvY2F0aW9uKSB7CisgICAgICAgIGlmIChtdW5tYXAoZ19tbWFwX2FsbG9jYXRpb24sIGdfbW1hcF9hbGxvY2F0aW9uX3NpemUpID09IC0xKSB7CisgICAgICAgICAgICAvKiBTaG91bGRuJ3QgaGFwcGVuICovCisgICAgICAgICAgICBhYm9ydCgpOworICAgICAgICB9CisgICAgICAgIGdfbW1hcF9hbGxvY2F0aW9uID0gTlVMTDsKKyAgICB9IGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgICAgZnJlZShwdHIpOworICAgIH0KK30KKworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IGZ1enpfc3J0cF9wcm90ZWN0KHNydHBfdCBzcnRwX3NlbmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpoZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCB1c2VfbWtpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBta2kpCit7CisgICAgcmV0dXJuIHNydHBfcHJvdGVjdChzcnRwX3NlbmRlciwgaGRyLCBsZW4pOworfQorCitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3QgZnV6el9zcnRwX3VucHJvdGVjdChzcnRwX3Qgc3J0cF9zZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpoZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdXNlX21raSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBta2kpCit7CisgICAgcmV0dXJuIHNydHBfdW5wcm90ZWN0KHNydHBfc2VuZGVyLCBoZHIsIGxlbik7Cit9CisKK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBmdXp6X3NydHBfcHJvdGVjdF9ydGNwKHNydHBfdCBzcnRwX3NlbmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmhkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCB1c2VfbWtpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1raSkKK3sKKyAgICByZXR1cm4gc3J0cF9wcm90ZWN0X3J0Y3Aoc3J0cF9zZW5kZXIsIGhkciwgbGVuKTsKK30KKworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IGZ1enpfc3J0cF91bnByb3RlY3RfcnRjcChzcnRwX3Qgc3J0cF9zZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmhkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdXNlX21raSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1raSkKK3sKKyAgICByZXR1cm4gc3J0cF91bnByb3RlY3RfcnRjcChzcnRwX3NlbmRlciwgaGRyLCBsZW4pOworfQorCitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3QgZnV6el9zcnRwX3Byb3RlY3RfbWtpKHNydHBfdCBzcnRwX3NlbmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqaGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCB1c2VfbWtpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWtpKQoreworICAgIHJldHVybiBzcnRwX3Byb3RlY3RfbWtpKHNydHBfc2VuZGVyLCBoZHIsIGxlbiwgdXNlX21raSwgbWtpKTsKK30KKworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IGZ1enpfc3J0cF9wcm90ZWN0X3J0Y3BfbWtpKHNydHBfdCBzcnRwX3NlbmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpoZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCB1c2VfbWtpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBta2kpCit7CisgICAgcmV0dXJuIHNydHBfcHJvdGVjdF9ydGNwX21raShzcnRwX3NlbmRlciwgaGRyLCBsZW4sIHVzZV9ta2ksIG1raSk7Cit9CisKK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBmdXp6X3NydHBfdW5wcm90ZWN0X21raShzcnRwX3Qgc3J0cF9zZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqaGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdXNlX21raSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWtpKQoreworICAgIHJldHVybiBzcnRwX3VucHJvdGVjdF9ta2koc3J0cF9zZW5kZXIsIGhkciwgbGVuLCB1c2VfbWtpKTsKK30KKworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IGZ1enpfc3J0cF91bnByb3RlY3RfcnRjcF9ta2koc3J0cF90IHNydHBfc2VuZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqaGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHVzZV9ta2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWtpKQoreworICAgIHJldHVybiBzcnRwX3VucHJvdGVjdF9ydGNwX21raShzcnRwX3NlbmRlciwgaGRyLCBsZW4sIHVzZV9ta2kpOworfQorCisvKiBHZXQgcHJvdGVjdCBsZW5ndGggZnVuY3Rpb25zICovCisKK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBmdXp6X3NydHBfZ2V0X3Byb3RlY3RfbGVuZ3RoKGNvbnN0IHNydHBfdCBzcnRwX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdXNlX21raSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBta2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqbGVuZ3RoKQoreworICAgIHJldHVybiBzcnRwX2dldF9wcm90ZWN0X3RyYWlsZXJfbGVuZ3RoKHNydHBfY3R4LCAwLCAwLCBsZW5ndGgpOworfQorCitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3QgZnV6el9zcnRwX2dldF9wcm90ZWN0X3J0Y3BfbGVuZ3RoKAorICAgIGNvbnN0IHNydHBfdCBzcnRwX2N0eCwKKyAgICB1aW50OF90IHVzZV9ta2ksCisgICAgdW5zaWduZWQgaW50IG1raSwKKyAgICB1aW50MzJfdCAqbGVuZ3RoKQoreworICAgIHJldHVybiBzcnRwX2dldF9wcm90ZWN0X3J0Y3BfdHJhaWxlcl9sZW5ndGgoc3J0cF9jdHgsIDAsIDAsIGxlbmd0aCk7Cit9CisKK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBmdXp6X3NydHBfZ2V0X3Byb3RlY3RfbWtpX2xlbmd0aChjb25zdCBzcnRwX3Qgc3J0cF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCB1c2VfbWtpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBta2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmxlbmd0aCkKK3sKKyAgICByZXR1cm4gc3J0cF9nZXRfcHJvdGVjdF90cmFpbGVyX2xlbmd0aChzcnRwX2N0eCwgdXNlX21raSwgbWtpLCBsZW5ndGgpOworfQorCitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3QgZnV6el9zcnRwX2dldF9wcm90ZWN0X3J0Y3BfbWtpX2xlbmd0aCgKKyAgICBjb25zdCBzcnRwX3Qgc3J0cF9jdHgsCisgICAgdWludDhfdCB1c2VfbWtpLAorICAgIHVuc2lnbmVkIGludCBta2ksCisgICAgdWludDMyX3QgKmxlbmd0aCkKK3sKKyAgICByZXR1cm4gc3J0cF9nZXRfcHJvdGVjdF9ydGNwX3RyYWlsZXJfbGVuZ3RoKHNydHBfY3R4LCB1c2VfbWtpLCBta2ksIGxlbmd0aCk7Cit9CisKK3N0YXRpYyB1aW50OF90ICpleHRyYWN0X2tleShjb25zdCB1aW50OF90ICoqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGtleV9zaXplKQoreworICAgIHVpbnQ4X3QgKnJldDsKKyAgICBpZiAoKnNpemUgPCBrZXlfc2l6ZSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXQgPSBmdXp6X2FsbG9jX3N1Y2NlZWQoa2V5X3NpemUsIGZhbHNlKTsKKyAgICBFWFRSQUNUKHJldCwgKmRhdGEsICpzaXplLCBrZXlfc2l6ZSk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3J0cF9tYXN0ZXJfa2V5X3QgKmV4dHJhY3RfbWFzdGVyX2tleShjb25zdCB1aW50OF90ICoqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBrZXlfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2ltdWxhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpzdWNjZXNzKQoreworICAgIHNydHBfbWFzdGVyX2tleV90ICpyZXQgPSBOVUxMOworICAgIHVpbnQxNl90IG1raV9pZF9zaXplOworCisgICAgaWYgKHNpbXVsYXRlID09IHRydWUpIHsKKyAgICAgICAgKnN1Y2Nlc3MgPSBmYWxzZTsKKyAgICB9CisKKyAgICBFWFRSQUNUX0lGKCZta2lfaWRfc2l6ZSwgKmRhdGEsICpzaXplLCBzaXplb2YobWtpX2lkX3NpemUpKTsKKworICAgIGlmICgqc2l6ZSA8IGtleV9zaXplICsgbWtpX2lkX3NpemUpIHsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgaWYgKHNpbXVsYXRlID09IHRydWUpIHsKKyAgICAgICAgKmRhdGEgKz0ga2V5X3NpemUgKyBta2lfaWRfc2l6ZTsKKyAgICAgICAgKnNpemUgLT0ga2V5X3NpemUgKyBta2lfaWRfc2l6ZTsKKyAgICAgICAgKnN1Y2Nlc3MgPSB0cnVlOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICByZXQgPSBmdXp6X2FsbG9jX3N1Y2NlZWQoc2l6ZW9mKHNydHBfbWFzdGVyX2tleV90KSwgZmFsc2UpOworICAgIHJldC0+a2V5ID0gZnV6el9hbGxvY19zdWNjZWVkKGtleV9zaXplLCBmYWxzZSk7CisKKyAgICByZXQtPm1raV9pZCA9IGZ1enpfYWxsb2Nfc3VjY2VlZChta2lfaWRfc2l6ZSwgZmFsc2UpOworCisgICAgRVhUUkFDVChyZXQtPmtleSwgKmRhdGEsICpzaXplLCBrZXlfc2l6ZSk7CisgICAgRVhUUkFDVChyZXQtPm1raV9pZCwgKmRhdGEsICpzaXplLCBta2lfaWRfc2l6ZSk7CisgICAgcmV0LT5ta2lfc2l6ZSA9IG1raV9pZF9zaXplOworZW5kOgorICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzcnRwX21hc3Rlcl9rZXlfdCAqKmV4dHJhY3RfbWFzdGVyX2tleXMoY29uc3QgdWludDhfdCAqKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGtleV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpudW1fbWFzdGVyX2tleXMpCit7CisgICAgY29uc3QgdWludDhfdCAqZGF0YV9vcmlnID0gKmRhdGE7CisgICAgc2l6ZV90IHNpemVfb3JpZyA9ICpzaXplOworICAgIHNpemVfdCBpID0gMDsKKworICAgIHNydHBfbWFzdGVyX2tleV90ICoqcmV0ID0gTlVMTDsKKworICAgICpudW1fbWFzdGVyX2tleXMgPSAwOworCisgICAgLyogRmlyc3QgcGFzcyAtLSBkcnkgcnVuLCBkZXRlcm1pbmUgaG93IG1hbnkga2V5cyB3ZSB3YW50IGFuZCBjYW4gZXh0cmFjdCAqLworICAgIHdoaWxlICgxKSB7CisgICAgICAgIHVpbnQ4X3QgZG9fZXh0cmFjdF9tYXN0ZXJfa2V5OworICAgICAgICBib29sIHN1Y2Nlc3M7CisgICAgICAgIGlmICgqc2l6ZSA8IHNpemVvZihkb19leHRyYWN0X21hc3Rlcl9rZXkpKSB7CisgICAgICAgICAgICBnb3RvIG5leHQ7CisgICAgICAgIH0KKyAgICAgICAgRVhUUkFDVCgmZG9fZXh0cmFjdF9tYXN0ZXJfa2V5LCAqZGF0YSwgKnNpemUsCisgICAgICAgICAgICAgICAgc2l6ZW9mKGRvX2V4dHJhY3RfbWFzdGVyX2tleSkpOworCisgICAgICAgIC8qIERlY2lkZSB3aGV0aGVyIHRvIGV4dHJhY3QgYW5vdGhlciBrZXkgKi8KKyAgICAgICAgaWYgKChkb19leHRyYWN0X21hc3Rlcl9rZXkgJSAyKSA9PSAwKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGV4dHJhY3RfbWFzdGVyX2tleShkYXRhLCBzaXplLCBrZXlfc2l6ZSwgdHJ1ZSwgJnN1Y2Nlc3MpOworCisgICAgICAgIGlmIChzdWNjZXNzID09IGZhbHNlKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgICgqbnVtX21hc3Rlcl9rZXlzKSsrOworICAgIH0KKworbmV4dDoKKyAgICAqZGF0YSA9IGRhdGFfb3JpZzsKKyAgICAqc2l6ZSA9IHNpemVfb3JpZzsKKworICAgIC8qIEFsbG9jYXRlIGFycmF5IG9mIHBvaW50ZXJzICovCisgICAgcmV0ID0gZnV6el9hbGxvY19zdWNjZWVkKCpudW1fbWFzdGVyX2tleXMgKiBzaXplb2Yoc3J0cF9tYXN0ZXJfa2V5X3QgKiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKworICAgIC8qIFNlY29uZCBwYXNzIC0tIHBlcmZvcm0gdGhlIGFjdHVhbCBleHRyYWN0aW9ucyAqLworICAgIGZvciAoaSA9IDA7IGkgPCAqbnVtX21hc3Rlcl9rZXlzOyBpKyspIHsKKyAgICAgICAgdWludDhfdCBkb19leHRyYWN0X21hc3Rlcl9rZXk7CisgICAgICAgIEVYVFJBQ1RfSUYoJmRvX2V4dHJhY3RfbWFzdGVyX2tleSwgKmRhdGEsICpzaXplLAorICAgICAgICAgICAgICAgICAgIHNpemVvZihkb19leHRyYWN0X21hc3Rlcl9rZXkpKTsKKworICAgICAgICBpZiAoKGRvX2V4dHJhY3RfbWFzdGVyX2tleSAlIDIpID09IDApIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmV0W2ldID0gZXh0cmFjdF9tYXN0ZXJfa2V5KGRhdGEsIHNpemUsIGtleV9zaXplLCBmYWxzZSwgTlVMTCk7CisKKyAgICAgICAgaWYgKHJldFtpXSA9PSBOVUxMKSB7CisgICAgICAgICAgICAvKiBTaG91bGRuJ3QgaGFwcGVuICovCisgICAgICAgICAgICBhYm9ydCgpOworICAgICAgICB9CisgICAgfQorCitlbmQ6CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNydHBfZWt0X3BvbGljeV90IGV4dHJhY3RfZWt0X3BvbGljeShjb25zdCB1aW50OF90ICoqZGF0YSwgc2l6ZV90ICpzaXplKQoreworICAgIHNydHBfZWt0X3BvbGljeV90IHJldCA9IE5VTEw7CisgICAgc3RydWN0IHsKKyAgICAgICAgc3J0cF9la3Rfc3BpX3Qgc3BpOworICAgICAgICB1aW50OF90IGtleVsxNl07CisKKyAgICB9IHBhcmFtczsKKworICAgIEVYVFJBQ1RfSUYoJnBhcmFtcywgKmRhdGEsICpzaXplLCBzaXplb2YocGFyYW1zKSk7CisKKyAgICByZXQgPSBmdXp6X2FsbG9jX3N1Y2NlZWQoc2l6ZW9mKHN0cnVjdCBzcnRwX2VrdF9wb2xpY3lfY3R4X3QpLCBmYWxzZSk7CisKKyAgICByZXQtPnNwaSA9IHBhcmFtcy5zcGk7CisKKyAgICAvKiBUaGUgb25seSBzdXBwb3J0ZWQgY2lwaGVyIHR5cGUgKi8KKyAgICByZXQtPmVrdF9jaXBoZXJfdHlwZSA9IFNSVFBfRUtUX0NJUEhFUl9BRVNfMTI4X0VDQjsKKworICAgIHJldC0+ZWt0X2tleSA9IGZ1enpfYWxsb2Nfc3VjY2VlZChzaXplb2YocGFyYW1zLmtleSksIGZhbHNlKTsKKyAgICBtZW1jcHkocmV0LT5la3Rfa2V5LCBwYXJhbXMua2V5LCBzaXplb2YocGFyYW1zLmtleSkpOworCisgICAgcmV0LT5uZXh0X2VrdF9wb2xpY3kgPSBOVUxMOworCitlbmQ6CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNydHBfcG9saWN5X3QgKmV4dHJhY3RfcG9saWN5KGNvbnN0IHVpbnQ4X3QgKipkYXRhLCBzaXplX3QgKnNpemUpCit7CisgICAgc3J0cF9wb2xpY3lfdCAqcG9saWN5ID0gTlVMTDsKKyAgICBzdHJ1Y3QgeworICAgICAgICB1aW50OF90IHNydHBfY3J5cHRvX3BvbGljeV9mdW5jOworICAgICAgICB1aW50NjRfdCB3aW5kb3dfc2l6ZTsKKyAgICAgICAgdWludDhfdCBhbGxvd19yZXBlYXRfdHg7CisgICAgICAgIHVpbnQ4X3Qgc3NyY190eXBlOworICAgICAgICB1aW50MzJfdCBzc3JjX3ZhbHVlOworICAgICAgICB1aW50OF90IG51bV94dG5faGRyOworICAgICAgICB1aW50OF90IHdpdGhfZWt0OworICAgICAgICBzcnRwX2VrdF9zcGlfdCBla3Rfc3BpOworICAgICAgICB1aW50OF90IGRvX2V4dHJhY3Rfa2V5OworICAgICAgICB1aW50OF90IGRvX2V4dHJhY3RfbWFzdGVyX2tleXM7CisgICAgfSBwYXJhbXM7CisKKyAgICBFWFRSQUNUX0lGKCZwYXJhbXMsICpkYXRhLCAqc2l6ZSwgc2l6ZW9mKHBhcmFtcykpOworCisgICAgcGFyYW1zLnNydHBfY3J5cHRvX3BvbGljeV9mdW5jICU9IHNpemVvZihmdXp6X3NydHBfY3J5cHRvX3BvbGljaWVzKSAvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihmdXp6X3NydHBfY3J5cHRvX3BvbGljaWVzWzBdKTsKKyAgICBwYXJhbXMuYWxsb3dfcmVwZWF0X3R4ICU9IDI7CisgICAgcGFyYW1zLnNzcmNfdHlwZSAlPQorICAgICAgICBzaXplb2YoZnV6el9zc3JjX3R5cGVfbWFwKSAvIHNpemVvZihmdXp6X3NzcmNfdHlwZV9tYXBbMF0pOworICAgIHBhcmFtcy53aXRoX2VrdCAlPSAyOworCisgICAgcG9saWN5ID0gZnV6el9hbGxvY19zdWNjZWVkKHNpemVvZigqcG9saWN5KSwgdHJ1ZSk7CisKKyAgICBmdXp6X3NydHBfY3J5cHRvX3BvbGljaWVzW3BhcmFtcy5zcnRwX2NyeXB0b19wb2xpY3lfZnVuY10KKyAgICAgICAgLmNyeXB0b19wb2xpY3lfZnVuYygmcG9saWN5LT5ydHApOworICAgIGZ1enpfc3J0cF9jcnlwdG9fcG9saWNpZXNbcGFyYW1zLnNydHBfY3J5cHRvX3BvbGljeV9mdW5jXQorICAgICAgICAuY3J5cHRvX3BvbGljeV9mdW5jKCZwb2xpY3ktPnJ0Y3ApOworCisgICAgaWYgKHBvbGljeS0+cnRwLmNpcGhlcl9rZXlfbGVuID4gTUFYX0tFWV9MRU4pIHsKKyAgICAgICAgLyogU2hvdWxkbid0IGhhcHBlbiAqLworICAgICAgICBhYm9ydCgpOworICAgIH0KKworICAgIHBvbGljeS0+c3NyYy50eXBlID0gZnV6el9zc3JjX3R5cGVfbWFwW3BhcmFtcy5zc3JjX3R5cGVdLnNydHBfc3NyY190eXBlOworICAgIHBvbGljeS0+c3NyYy52YWx1ZSA9IHBhcmFtcy5zc3JjX3ZhbHVlOworCisgICAgaWYgKChwYXJhbXMuZG9fZXh0cmFjdF9rZXkgJSAyKSA9PSAwKSB7CisgICAgICAgIHBvbGljeS0+a2V5ID0gZXh0cmFjdF9rZXkoZGF0YSwgc2l6ZSwgcG9saWN5LT5ydHAuY2lwaGVyX2tleV9sZW4pOworCisgICAgICAgIGlmIChwb2xpY3ktPmtleSA9PSBOVUxMKSB7CisgICAgICAgICAgICBmdXp6X2ZyZWUocG9saWN5KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHBhcmFtcy5udW1feHRuX2hkciAhPSAwKSB7CisgICAgICAgIGNvbnN0IHNpemVfdCB4dG5faGRyX3NpemUgPSBwYXJhbXMubnVtX3h0bl9oZHIgKiBzaXplb2YoaW50KTsKKyAgICAgICAgaWYgKCpzaXplIDwgeHRuX2hkcl9zaXplKSB7CisgICAgICAgICAgICBmdXp6X2ZyZWUocG9saWN5LT5rZXkpOworICAgICAgICAgICAgZnV6el9mcmVlKHBvbGljeSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBwb2xpY3ktPmVuY194dG5faGRyID0gZnV6el9hbGxvY19zdWNjZWVkKHh0bl9oZHJfc2l6ZSwgZmFsc2UpOworICAgICAgICBFWFRSQUNUKHBvbGljeS0+ZW5jX3h0bl9oZHIsICpkYXRhLCAqc2l6ZSwgeHRuX2hkcl9zaXplKTsKKyAgICAgICAgcG9saWN5LT5lbmNfeHRuX2hkcl9jb3VudCA9IHBhcmFtcy5udW1feHRuX2hkcjsKKyAgICB9CisKKyAgICBpZiAoKHBhcmFtcy5kb19leHRyYWN0X21hc3Rlcl9rZXlzICUgMikgPT0gMCkgeworICAgICAgICBwb2xpY3ktPmtleXMgPSBleHRyYWN0X21hc3Rlcl9rZXlzKAorICAgICAgICAgICAgZGF0YSwgc2l6ZSwgcG9saWN5LT5ydHAuY2lwaGVyX2tleV9sZW4sICZwb2xpY3ktPm51bV9tYXN0ZXJfa2V5cyk7CisgICAgICAgIGlmIChwb2xpY3ktPmtleXMgPT0gTlVMTCkgeworICAgICAgICAgICAgZnV6el9mcmVlKHBvbGljeS0+a2V5KTsKKyAgICAgICAgICAgIGZ1enpfZnJlZShwb2xpY3ktPmVuY194dG5faGRyKTsKKyAgICAgICAgICAgIGZ1enpfZnJlZShwb2xpY3kpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAocGFyYW1zLndpdGhfZWt0KSB7CisgICAgICAgIHBvbGljeS0+ZWt0ID0gZXh0cmFjdF9la3RfcG9saWN5KGRhdGEsIHNpemUpOworICAgIH0KKworICAgIHBvbGljeS0+d2luZG93X3NpemUgPSBwYXJhbXMud2luZG93X3NpemU7CisgICAgcG9saWN5LT5hbGxvd19yZXBlYXRfdHggPSBwYXJhbXMuYWxsb3dfcmVwZWF0X3R4OworICAgIHBvbGljeS0+bmV4dCA9IE5VTEw7CisKK2VuZDoKKyAgICByZXR1cm4gcG9saWN5OworfQorCitzdGF0aWMgc3J0cF9wb2xpY3lfdCAqZXh0cmFjdF9wb2xpY2llcyhjb25zdCB1aW50OF90ICoqZGF0YSwgc2l6ZV90ICpzaXplKQoreworICAgIHNydHBfcG9saWN5X3QgKmN1cnBvbGljeSA9IE5VTEwsICpwb2xpY3lfY2hhaW4gPSBOVUxMOworCisgICAgY3VycG9saWN5ID0gZXh0cmFjdF9wb2xpY3koZGF0YSwgc2l6ZSk7CisgICAgaWYgKGN1cnBvbGljeSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHBvbGljeV9jaGFpbiA9IGN1cnBvbGljeTsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIHVpbnQ4X3QgZG9fZXh0cmFjdF9wb2xpY3k7CisgICAgICAgIEVYVFJBQ1RfSUYoJmRvX2V4dHJhY3RfcG9saWN5LCAqZGF0YSwgKnNpemUsIHNpemVvZihkb19leHRyYWN0X3BvbGljeSkpOworCisgICAgICAgIC8qIERlY2lkZSB3aGV0aGVyIHRvIGV4dHJhY3QgYW5vdGhlciBwb2xpY3kgKi8KKyAgICAgICAgaWYgKChkb19leHRyYWN0X3BvbGljeSAlIDIpID09IDApIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY3VycG9saWN5LT5uZXh0ID0gZXh0cmFjdF9wb2xpY3koZGF0YSwgc2l6ZSk7CisgICAgICAgIGlmIChjdXJwb2xpY3ktPm5leHQgPT0gTlVMTCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY3VycG9saWN5ID0gY3VycG9saWN5LT5uZXh0OworICAgIH0KKworZW5kOgorICAgIHJldHVybiBwb2xpY3lfY2hhaW47Cit9CisKK3N0YXRpYyB1aW50MzJfdCAqZXh0cmFjdF9yZW1vdmVfc3RyZWFtX3NzcmMoY29uc3QgdWludDhfdCAqKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqbnVtX3JlbW92ZV9zdHJlYW0pCit7CisgICAgdWludDMyX3QgKnJldCA9IE5VTEw7CisgICAgdWludDhfdCBfbnVtX3JlbW92ZV9zdHJlYW07CisgICAgc2l6ZV90IHRvdGFsX3NpemU7CisKKyAgICAqbnVtX3JlbW92ZV9zdHJlYW0gPSAwOworCisgICAgRVhUUkFDVF9JRigmX251bV9yZW1vdmVfc3RyZWFtLCAqZGF0YSwgKnNpemUsIHNpemVvZihfbnVtX3JlbW92ZV9zdHJlYW0pKTsKKworICAgIGlmIChfbnVtX3JlbW92ZV9zdHJlYW0gPT0gMCkgeworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICB0b3RhbF9zaXplID0gX251bV9yZW1vdmVfc3RyZWFtICogc2l6ZW9mKHVpbnQzMl90KTsKKworICAgIGlmICgqc2l6ZSA8IHRvdGFsX3NpemUpIHsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgcmV0ID0gZnV6el9hbGxvY19zdWNjZWVkKHRvdGFsX3NpemUsIGZhbHNlKTsKKyAgICBFWFRSQUNUKHJldCwgKmRhdGEsICpzaXplLCB0b3RhbF9zaXplKTsKKworICAgICpudW1fcmVtb3ZlX3N0cmVhbSA9IF9udW1fcmVtb3ZlX3N0cmVhbTsKKworZW5kOgorICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1aW50MzJfdCAqZXh0cmFjdF9zZXRfcm9jKGNvbnN0IHVpbnQ4X3QgKipkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqbnVtX3NldF9yb2MpCit7CisgICAgdWludDMyX3QgKnJldCA9IE5VTEw7CisgICAgdWludDhfdCBfbnVtX3NldF9yb2M7CisgICAgc2l6ZV90IHRvdGFsX3NpemU7CisKKyAgICAqbnVtX3NldF9yb2MgPSAwOworICAgIEVYVFJBQ1RfSUYoJl9udW1fc2V0X3JvYywgKmRhdGEsICpzaXplLCBzaXplb2YoX251bV9zZXRfcm9jKSk7CisgICAgaWYgKF9udW1fc2V0X3JvYyA9PSAwKSB7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIC8qIFR1cGxlcyBvZiAyIHVpbnQzMl90J3MgKi8KKyAgICB0b3RhbF9zaXplID0gX251bV9zZXRfcm9jICogc2l6ZW9mKHVpbnQzMl90KSAqIDI7CisKKyAgICBpZiAoKnNpemUgPCB0b3RhbF9zaXplKSB7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIHJldCA9IGZ1enpfYWxsb2Nfc3VjY2VlZCh0b3RhbF9zaXplLCBmYWxzZSk7CisgICAgRVhUUkFDVChyZXQsICpkYXRhLCAqc2l6ZSwgdG90YWxfc2l6ZSk7CisKKyAgICAqbnVtX3NldF9yb2MgPSBfbnVtX3NldF9yb2M7CisKK2VuZDoKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBmcmVlX3BvbGljaWVzKHNydHBfcG9saWN5X3QgKmN1cnBvbGljeSkKK3sKKyAgICBzaXplX3QgaTsKKyAgICB3aGlsZSAoY3VycG9saWN5KSB7CisgICAgICAgIHNydHBfcG9saWN5X3QgKm5leHQgPSBjdXJwb2xpY3ktPm5leHQ7CisKKyAgICAgICAgZnV6el9mcmVlKGN1cnBvbGljeS0+a2V5KTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3VycG9saWN5LT5udW1fbWFzdGVyX2tleXM7IGkrKykgeworICAgICAgICAgICAgZnV6el9mcmVlKGN1cnBvbGljeS0+a2V5c1tpXS0+a2V5KTsKKyAgICAgICAgICAgIGZ1enpfZnJlZShjdXJwb2xpY3ktPmtleXNbaV0tPm1raV9pZCk7CisgICAgICAgICAgICBmdXp6X2ZyZWUoY3VycG9saWN5LT5rZXlzW2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1enpfZnJlZShjdXJwb2xpY3ktPmtleXMpOworICAgICAgICBmdXp6X2ZyZWUoY3VycG9saWN5LT5lbmNfeHRuX2hkcik7CisKKyAgICAgICAgaWYgKGN1cnBvbGljeS0+ZWt0KSB7CisgICAgICAgICAgICBmdXp6X2ZyZWUoY3VycG9saWN5LT5la3QtPmVrdF9rZXkpOworICAgICAgICAgICAgZnV6el9mcmVlKGN1cnBvbGljeS0+ZWt0KTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1enpfZnJlZShjdXJwb2xpY3kpOworCisgICAgICAgIGN1cnBvbGljeSA9IG5leHQ7CisgICAgfQorfQorCitzdGF0aWMgdWludDhfdCAqcnVuX3NydHBfZnVuYyhjb25zdCBzcnRwX3Qgc3J0cF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICoqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqc2l6ZSkKK3sKKyAgICB1aW50OF90ICpyZXQgPSBOVUxMOworICAgIHVpbnQ4X3QgKmNvcHkgPSBOVUxMLCAqY29weV8yID0gTlVMTDsKKworICAgIHN0cnVjdCB7CisgICAgICAgIHVpbnQxNl90IHNpemU7CisgICAgICAgIHVpbnQ4X3Qgc3J0cF9mdW5jOworICAgICAgICB1aW50OF90IHVzZV9ta2k7CisgICAgICAgIHVpbnQzMl90IG1raTsKKyAgICAgICAgdWludDhfdCBzdHJldGNoOworICAgIH0gcGFyYW1zXzE7CisKKyAgICBzdHJ1Y3QgeworICAgICAgICB1aW50OF90IHNydHBfZnVuYzsKKyAgICAgICAgdWludDhfdCB1c2VfbWtpOworICAgICAgICB1aW50MzJfdCBta2k7CisgICAgfSBwYXJhbXNfMjsKKyAgICBpbnQgcmV0X3NpemU7CisKKyAgICBFWFRSQUNUX0lGKCZwYXJhbXNfMSwgKmRhdGEsICpzaXplLCBzaXplb2YocGFyYW1zXzEpKTsKKyAgICBwYXJhbXNfMS5zcnRwX2Z1bmMgJT0gc2l6ZW9mKHNydHBfZnVuY3MpIC8gc2l6ZW9mKHNydHBfZnVuY3NbMF0pOworICAgIHBhcmFtc18xLnVzZV9ta2kgJT0gMjsKKworICAgIGlmICgqc2l6ZSA8IHBhcmFtc18xLnNpemUpIHsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgLyogRW5mb3JjZSA0IGJ5dGUgYWxpZ25tZW50ICovCisgICAgaWYgKGdfbm9fYWxpZ24gPT0gZmFsc2UpIHsKKyAgICAgICAgcGFyYW1zXzEuc2l6ZSAtPSBwYXJhbXNfMS5zaXplICUgNDsKKyAgICB9CisKKyAgICBpZiAocGFyYW1zXzEuc2l6ZSA9PSAwKSB7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIHJldF9zaXplID0gcGFyYW1zXzEuc2l6ZTsKKyAgICBpZiAoc3J0cF9mdW5jc1twYXJhbXNfMS5zcnRwX2Z1bmNdLnByb3RlY3QgPT0gdHJ1ZSkgeworICAgICAgICAvKiBJbnRlbnRpb25hbGx5IG5vdCBpbml0aWFsaXplZCB0byB0cmlnZ2VyIE1lbW9yeVNhbml0aXplciwgaWYKKyAgICAgICAgICogYXBwbGljYWJsZSAqLworICAgICAgICB1aW50MzJfdCBhbGxvY19zaXplOworCisgICAgICAgIGlmIChzcnRwX2Z1bmNzW3BhcmFtc18xLnNydHBfZnVuY10uZ2V0X2xlbmd0aCgKKyAgICAgICAgICAgICAgICBzcnRwX2N0eCwgcGFyYW1zXzEudXNlX21raSwgcGFyYW1zXzEubWtpLCAmYWxsb2Nfc2l6ZSkgIT0KKyAgICAgICAgICAgIHNydHBfZXJyX3N0YXR1c19vaykgeworICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIH0KKworICAgICAgICBjb3B5ID0gZnV6el9hbGxvY19zdWNjZWVkKHJldF9zaXplICsgYWxsb2Nfc2l6ZSwgZmFsc2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvcHkgPSBmdXp6X2FsbG9jX3N1Y2NlZWQocmV0X3NpemUsIGZhbHNlKTsKKyAgICB9CisKKyAgICBFWFRSQUNUKGNvcHksICpkYXRhLCAqc2l6ZSwgcGFyYW1zXzEuc2l6ZSk7CisKKyAgICBpZiAoc3J0cF9mdW5jc1twYXJhbXNfMS5zcnRwX2Z1bmNdLnNydHBfZnVuYygKKyAgICAgICAgICAgIHNydHBfY3R4LCBjb3B5LCAmcmV0X3NpemUsIHBhcmFtc18xLnVzZV9ta2ksIHBhcmFtc18xLm1raSkgIT0KKyAgICAgICAgc3J0cF9lcnJfc3RhdHVzX29rKSB7CisgICAgICAgIGZ1enpfZnJlZShjb3B5KTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorICAgIC8vIGZ1enpfZnJlZShjb3B5KTsKKworICAgIGZ1enpfdGVzdG1lbShjb3B5LCByZXRfc2l6ZSk7CisKKyAgICByZXQgPSBjb3B5OworCisgICAgRVhUUkFDVF9JRigmcGFyYW1zXzIsICpkYXRhLCAqc2l6ZSwgc2l6ZW9mKHBhcmFtc18yKSk7CisgICAgcGFyYW1zXzIuc3J0cF9mdW5jICU9IHNpemVvZihzcnRwX2Z1bmNzKSAvIHNpemVvZihzcnRwX2Z1bmNzWzBdKTsKKyAgICBwYXJhbXNfMi51c2VfbWtpICU9IDI7CisKKyAgICBpZiAocmV0X3NpemUgPT0gMCkgeworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICBpZiAoc3J0cF9mdW5jc1twYXJhbXNfMi5zcnRwX2Z1bmNdLnByb3RlY3QgPT0gdHJ1ZSkgeworICAgICAgICAvKiBJbnRlbnRpb25hbGx5IG5vdCBpbml0aWFsaXplZCB0byB0cmlnZ2VyIE1lbW9yeVNhbml0aXplciwgaWYKKyAgICAgICAgICogYXBwbGljYWJsZSAqLworICAgICAgICB1aW50MzJfdCBhbGxvY19zaXplOworCisgICAgICAgIGlmIChzcnRwX2Z1bmNzW3BhcmFtc18yLnNydHBfZnVuY10uZ2V0X2xlbmd0aCgKKyAgICAgICAgICAgICAgICBzcnRwX2N0eCwgcGFyYW1zXzIudXNlX21raSwgcGFyYW1zXzIubWtpLCAmYWxsb2Nfc2l6ZSkgIT0KKyAgICAgICAgICAgIHNydHBfZXJyX3N0YXR1c19vaykgeworICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIH0KKworICAgICAgICBjb3B5XzIgPSBmdXp6X2FsbG9jX3N1Y2NlZWQocmV0X3NpemUgKyBhbGxvY19zaXplLCBmYWxzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29weV8yID0gZnV6el9hbGxvY19zdWNjZWVkKHJldF9zaXplLCBmYWxzZSk7CisgICAgfQorCisgICAgbWVtY3B5KGNvcHlfMiwgY29weSwgcmV0X3NpemUpOworICAgIGZ1enpfZnJlZShjb3B5KTsKKyAgICBjb3B5ID0gY29weV8yOworCisgICAgaWYgKHNydHBfZnVuY3NbcGFyYW1zXzIuc3J0cF9mdW5jXS5zcnRwX2Z1bmMoCisgICAgICAgICAgICBzcnRwX2N0eCwgY29weSwgJnJldF9zaXplLCBwYXJhbXNfMi51c2VfbWtpLCBwYXJhbXNfMi5ta2kpICE9CisgICAgICAgIHNydHBfZXJyX3N0YXR1c19vaykgeworICAgICAgICBmdXp6X2ZyZWUoY29weSk7CisgICAgICAgIHJldCA9IE5VTEw7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIGZ1enpfdGVzdG1lbShjb3B5LCByZXRfc2l6ZSk7CisKKyAgICByZXQgPSBjb3B5OworCitlbmQ6CisgICAgcmV0dXJuIHJldDsKK30KKwordm9pZCBmdXp6X3NydHBfZXZlbnRfaGFuZGxlcihzcnRwX2V2ZW50X2RhdGFfdCAqZGF0YSkKK3sKKyAgICBmdXp6X3Rlc3RtZW0oZGF0YSwgc2l6ZW9mKHNydHBfZXZlbnRfZGF0YV90KSk7CisgICAgaWYgKGRhdGEtPnNlc3Npb24gIT0gTlVMTCkgeworICAgICAgICBmdXp6X3Rlc3RtZW0oZGF0YS0+c2Vzc2lvbiwgc2l6ZW9mKCpkYXRhLT5zZXNzaW9uKSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBmdXp6X3dyaXRlX2lucHV0KGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBzaXplKQoreworICAgIEZJTEUgKmZwID0gZm9wZW4oImlucHV0LmJpbiIsICJ3YiIpOworCisgICAgaWYgKGZwID09IE5VTEwpIHsKKyAgICAgICAgLyogU2hvdWxkbid0IGhhcHBlbiAqLworICAgICAgICBhYm9ydCgpOworICAgIH0KKworICAgIGlmIChzaXplICE9IDAgJiYgZndyaXRlKGRhdGEsIHNpemUsIDEsIGZwKSAhPSAxKSB7CisgICAgICAgIHByaW50ZigiQ2Fubm90IHdyaXRlXG4iKTsKKyAgICAgICAgLyogU2hvdWxkbid0IGhhcHBlbiAqLworICAgICAgICBhYm9ydCgpOworICAgIH0KKworICAgIGZjbG9zZShmcCk7Cit9CisKK2ludCBMTFZNRnV6emVySW5pdGlhbGl6ZShpbnQgKmFyZ2MsIGNoYXIgKioqYXJndikKK3sKKyAgICBjaGFyICoqX2FyZ3YgPSAqYXJndjsKKyAgICBpbnQgaTsKKyAgICBib29sIG5vX2N1c3RvbV9ldmVudF9oYW5kbGVyID0gZmFsc2U7CisKKyAgICBpZiAoc3J0cF9pbml0KCkgIT0gc3J0cF9lcnJfc3RhdHVzX29rKSB7CisgICAgICAgIC8qIFNob3VsZG4ndCBoYXBwZW4gKi8KKyAgICAgICAgYWJvcnQoKTsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgKmFyZ2M7IGkrKykgeworICAgICAgICBpZiAoc3RyY21wKCItLW5vX2FsaWduIiwgX2FyZ3ZbaV0pID09IDApIHsKKyAgICAgICAgICAgIGdfbm9fYWxpZ24gPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcCgiLS1ub19jdXN0b21fZXZlbnRfaGFuZGxlciIsIF9hcmd2W2ldKSA9PSAwKSB7CisgICAgICAgICAgICBub19jdXN0b21fZXZlbnRfaGFuZGxlciA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKCItLXdyaXRlX2lucHV0IiwgX2FyZ3ZbaV0pID09IDApIHsKKyAgICAgICAgICAgIGdfd3JpdGVfaW5wdXQgPSB0cnVlOworICAgICAgICB9CisjaWZkZWYgRlVaWl8zMkJJVAorICAgICAgICBlbHNlIGlmIChzdHJjbXAoIi0tbm9fbW1hcCIsIF9hcmd2W2ldKSA9PSAwKSB7CisgICAgICAgICAgICBnX25vX21tYXAgPSB0cnVlOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgZWxzZSBpZiAoc3RybmNtcCgiLS0iLCBfYXJndltpXSwgMikgPT0gMCkgeworICAgICAgICAgICAgcHJpbnRmKCJJbnZhbGlkIGFyZ3VtZW50OiAlc1xuIiwgX2FyZ3ZbaV0pOworICAgICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChub19jdXN0b21fZXZlbnRfaGFuZGxlciA9PSBmYWxzZSkgeworICAgICAgICBpZiAoc3J0cF9pbnN0YWxsX2V2ZW50X2hhbmRsZXIoZnV6el9zcnRwX2V2ZW50X2hhbmRsZXIpICE9CisgICAgICAgICAgICBzcnRwX2Vycl9zdGF0dXNfb2spIHsKKyAgICAgICAgICAgIC8qIFNob3VsZG4ndCBoYXBwZW4gKi8KKyAgICAgICAgICAgIGFib3J0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBGdWxseSBpbml0aWFsaXplZCAtLSBwYXN0IHRoaXMgcG9pbnQsIHNpbXVsYXRlZCBhbGxvY2F0aW9uIGZhaWx1cmVzCisgICAgICogYXJlIGFsbG93ZWQgdG8gb2NjdXIgKi8KKyAgICBnX3Bvc3RfaW5pdCA9IHRydWU7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IExMVk1GdXp6ZXJUZXN0T25lSW5wdXQoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgdWludDhfdCBudW1fcmVtb3ZlX3N0cmVhbTsKKyAgICB1aW50MzJfdCAqcmVtb3ZlX3N0cmVhbV9zc3JjID0gTlVMTDsKKyAgICB1aW50OF90IG51bV9zZXRfcm9jOworICAgIHVpbnQzMl90ICpzZXRfcm9jID0gTlVMTDsKKyAgICBzcnRwX3Qgc3J0cF9jdHggPSBOVUxMOworICAgIHNydHBfcG9saWN5X3QgKnBvbGljeV9jaGFpbiA9IE5VTEwsICpwb2xpY3lfY2hhaW5fMiA9IE5VTEw7CisgICAgdWludDMyX3QgcmFuZHNlZWQ7CisgICAgc3RhdGljIGJvb2wgZmlyc3RydW4gPSB0cnVlOworCisgICAgaWYgKGZpcnN0cnVuID09IHRydWUpIHsKKyAgICAgICAgLyogVE9ETyB2ZXJzaW9uIGNoZWNrIGV0YyBhbmQgc2VuZCBpdCB0byBNU0FOICovCisgICAgfQorCisjaWZkZWYgRlVaWl8zMkJJVAorICAgIC8qIEZyZWUgdGhlIG1tYXAgYWxsb2NhdGlvbiBtYWRlIGR1cmluZyB0aGUgcHJldmlvdXMgaXRlcmF0aW9uLCBpZgorICAgICAqIGFwcGxpY2FibGUgKi8KKyAgICBmdXp6X2ZyZWUoZ19tbWFwX2FsbG9jYXRpb24pOworI2VuZGlmCisKKyAgICBpZiAoZ193cml0ZV9pbnB1dCA9PSB0cnVlKSB7CisgICAgICAgIGZ1enpfd3JpdGVfaW5wdXQoZGF0YSwgc2l6ZSk7CisgICAgfQorCisgICAgRVhUUkFDVF9JRigmcmFuZHNlZWQsIGRhdGEsIHNpemUsIHNpemVvZihyYW5kc2VlZCkpOworICAgIGZ1enpfbXQxOTkzN19pbml0KHJhbmRzZWVkKTsKKyAgICBzcmFuZChyYW5kc2VlZCk7CisKKyAgICAvKiBwb2xpY3lfY2hhaW4gaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBzcnRwIGNvbnRleHQgd2l0aCAqLworICAgIGlmICgocG9saWN5X2NoYWluID0gZXh0cmFjdF9wb2xpY2llcygmZGF0YSwgJnNpemUpKSA9PSBOVUxMKSB7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKyAgICAvKiBwb2xpY3lfY2hhaW5fMiBpcyB1c2VkIGFzIGFuIGFyZ3VtZW50IHRvIHNydHBfdXBkYXRlIGxhdGVyIG9uICovCisgICAgaWYgKChwb2xpY3lfY2hhaW5fMiA9IGV4dHJhY3RfcG9saWNpZXMoJmRhdGEsICZzaXplKSkgPT0gTlVMTCkgeworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICAvKiBDcmVhdGUgY29udGV4dCAqLworICAgIGlmIChzcnRwX2NyZWF0ZSgmc3J0cF9jdHgsIHBvbGljeV9jaGFpbikgIT0gc3J0cF9lcnJfc3RhdHVzX29rKSB7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIC8vIGZyZWVfcG9saWNpZXMocG9saWN5X2NoYWluKTsKKyAgICAvLyBwb2xpY3lfY2hhaW4gPSBOVUxMOworCisgICAgLyogRG9uJ3QgY2hlY2sgZm9yIE5VTEwgcmVzdWx0IC0tIG5vIGV4dHJhY3Rpb25zIGlzIGZpbmUgKi8KKyAgICByZW1vdmVfc3RyZWFtX3NzcmMgPQorICAgICAgICBleHRyYWN0X3JlbW92ZV9zdHJlYW1fc3NyYygmZGF0YSwgJnNpemUsICZudW1fcmVtb3ZlX3N0cmVhbSk7CisKKyAgICAvKiBEb24ndCBjaGVjayBmb3IgTlVMTCByZXN1bHQgLS0gbm8gZXh0cmFjdGlvbnMgaXMgZmluZSAqLworICAgIHNldF9yb2MgPSBleHRyYWN0X3NldF9yb2MoJmRhdGEsICZzaXplLCAmbnVtX3NldF9yb2MpOworCisgICAgeworICAgICAgICB1aW50OF90ICpyZXQ7CisgICAgICAgIGludCBpID0gMCwgaiA9IDA7CisKKyAgICAgICAgd2hpbGUgKChyZXQgPSBydW5fc3J0cF9mdW5jKHNydHBfY3R4LCAmZGF0YSwgJnNpemUpKSAhPSBOVUxMKSB7CisgICAgICAgICAgICBmdXp6X2ZyZWUocmV0KTsKKworICAgICAgICAgICAgLyogS2VlcCByZW1vdmluZyBzdHJlYW1zIHVudGlsIHRoZSBzZXQgb2YgU1NSQ3MgZXh0cmFjdGVkIGZyb20gdGhlCisgICAgICAgICAgICAgKiBmdXp6ZXIgaW5wdXQgaXMgZXhoYXVzdGVkICovCisgICAgICAgICAgICBpZiAoaSA8IG51bV9yZW1vdmVfc3RyZWFtKSB7CisgICAgICAgICAgICAgICAgaWYgKHNydHBfcmVtb3ZlX3N0cmVhbShzcnRwX2N0eCwgcmVtb3ZlX3N0cmVhbV9zc3JjW2ldKSAhPQorICAgICAgICAgICAgICAgICAgICBzcnRwX2Vycl9zdGF0dXNfb2spIHsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogS2VlcCBzZXR0aW5nIGFuZCBnZXR0aW5nIFJPQ3MgdW50aWwgdGhlIHNldCBvZiBTU1JDL1JPQyB0dXBsZXMKKyAgICAgICAgICAgICAqIGV4dHJhY3RlZCBmcm9tIHRoZSBmdXp6ZXIgaW5wdXQgaXMgZXhoYXVzdGVkICovCisgICAgICAgICAgICBpZiAoaiA8IG51bV9zZXRfcm9jICogMikgeworICAgICAgICAgICAgICAgIHVpbnQzMl90IHJvYzsKKyAgICAgICAgICAgICAgICBpZiAoc3J0cF9zZXRfc3RyZWFtX3JvYyhzcnRwX2N0eCwgc2V0X3JvY1tqXSwgc2V0X3JvY1tqICsgMV0pICE9CisgICAgICAgICAgICAgICAgICAgIHNydHBfZXJyX3N0YXR1c19vaykgeworICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNydHBfZ2V0X3N0cmVhbV9yb2Moc3J0cF9jdHgsIHNldF9yb2NbaiArIDFdLCAmcm9jKSAhPQorICAgICAgICAgICAgICAgICAgICBzcnRwX2Vycl9zdGF0dXNfb2spIHsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGogKz0gMjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHBvbGljeV9jaGFpbl8yICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAvKiBUT0RPIHNydHBfdXBkYXRlKHNydHBfY3R4LCBwb2xpY3lfY2hhaW5fMik7ICovCisKKyAgICAgICAgICAgICAgICAvKiBEaXNjYXJkIGFmdGVyIHVzaW5nIG9uY2UgKi8KKyAgICAgICAgICAgICAgICBmcmVlX3BvbGljaWVzKHBvbGljeV9jaGFpbl8yKTsKKyAgICAgICAgICAgICAgICBwb2xpY3lfY2hhaW5fMiA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKK2VuZDoKKyAgICBmcmVlX3BvbGljaWVzKHBvbGljeV9jaGFpbik7CisgICAgZnJlZV9wb2xpY2llcyhwb2xpY3lfY2hhaW5fMik7CisgICAgZnV6el9mcmVlKHJlbW92ZV9zdHJlYW1fc3NyYyk7CisgICAgZnV6el9mcmVlKHNldF9yb2MpOworICAgIGlmIChzcnRwX2N0eCAhPSBOVUxMKSB7CisgICAgICAgIHNydHBfZGVhbGxvYyhzcnRwX2N0eCk7CisgICAgfQorICAgIGZ1enpfbXQxOTkzN19kZXN0cm95KCk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2Z1enplci9mdXp6ZXIuaCBiL2Z1enplci9mdXp6ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTFmOGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL2Z1enplci5oCkBAIC0wLDAgKzEsMTc2IEBACisjZGVmaW5lIE1BWF9LRVlfTEVOIDQ2CisjZGVmaW5lIEVYVFJBQ1QoZGVzdCwgc3JjLCBzcmNzaXplLCBjb3B5c2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbWVtY3B5KChkZXN0KSwgKHNyYyksIChjb3B5c2l6ZSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChzcmMpICs9IChjb3B5c2l6ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoc3Jjc2l6ZSkgLT0gKGNvcHlzaXplKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKKy8qIEV4dHJhY3QgZGF0YSBpZiBzcmMgY29udGFpbnMgc3VmZmljaWVudCBieXRlcywgb3RoZXJ3aXNlIGdvIHRvIGVuZCAqLworI2RlZmluZSBFWFRSQUNUX0lGKGRlc3QsIHNyYywgc3Jjc2l6ZSwgY29weXNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICgoc3Jjc2l6ZSkgPCAoY29weXNpemUpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZ290byBlbmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBFWFRSQUNUKChkZXN0KSwgKHNyYyksIChzcmNzaXplKSwgKGNvcHlzaXplKSk7ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaWYgVUlOVFBUUl9NQVggPT0gMHhmZmZmZmZmZgorI2RlZmluZSBGVVpaXzMyQklUCisjZWxpZiBVSU5UUFRSX01BWCA9PSAweGZmZmZmZmZmZmZmZmZmZmYKKyNlbHNlCisjZXJyb3IgIkNhbm5vdCBkZXRlY3Qgd29yZCBzaXplIgorI2VuZGlmCisKK3R5cGVkZWYgc3J0cF9lcnJfc3RhdHVzX3QgKAorICAgICpmdXp6X3NydHBfZnVuYykoc3J0cF90LCB2b2lkICosIGludCAqLCB1aW50OF90LCB1bnNpZ25lZCBpbnQpOwordHlwZWRlZiB2b2lkICgqZnV6el9zcnRwX2NyeXB0b19wb2xpY3lfZnVuYykoc3J0cF9jcnlwdG9fcG9saWN5X3QgKik7Cit0eXBlZGVmIHNydHBfZXJyX3N0YXR1c190ICgqZnV6el9zcnRwX2dldF9sZW5ndGhfZnVuYykoY29uc3Qgc3J0cF90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICopOworCitzdHJ1Y3QgZnV6el9zcnRwX3BhcmFtcyB7CisgICAgdWludDhfdCBzcnRwX2Z1bmM7CisgICAgdWludDhfdCBzcnRwX2NyeXB0b19wb2xpY3lfZnVuYzsKKyAgICB1aW50MTZfdCB3aW5kb3dfc2l6ZTsKKyAgICB1aW50OF90IGFsbG93X3JlcGVhdF90eDsKKyAgICB1aW50OF90IHNzcmNfdHlwZTsKKyAgICB1bnNpZ25lZCBpbnQgc3NyY192YWx1ZTsKKyAgICB1aW50OF90IGtleVtNQVhfS0VZX0xFTl07CisgICAgdWludDhfdCBta2k7Cit9OworCitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3QgZnV6el9zcnRwX3Byb3RlY3Qoc3J0cF90IHNydHBfc2VuZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmhkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHVzZV9ta2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1raSk7CitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3QgZnV6el9zcnRwX3VucHJvdGVjdChzcnRwX3Qgc3J0cF9zZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpoZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdXNlX21raSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBta2kpOworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IGZ1enpfc3J0cF9wcm90ZWN0X3J0Y3Aoc3J0cF90IHNydHBfc2VuZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqaGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHVzZV9ta2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWtpKTsKK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBmdXp6X3NydHBfdW5wcm90ZWN0X3J0Y3Aoc3J0cF90IHNydHBfc2VuZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpoZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHVzZV9ta2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBta2kpOworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IGZ1enpfc3J0cF9wcm90ZWN0X21raShzcnRwX3Qgc3J0cF9zZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmhkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdXNlX21raSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1raSk7CitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3QgZnV6el9zcnRwX3Byb3RlY3RfcnRjcF9ta2koc3J0cF90IHNydHBfc2VuZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmhkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHVzZV9ta2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1raSk7CitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3QgZnV6el9zcnRwX3VucHJvdGVjdF9ta2koc3J0cF90IHNydHBfc2VuZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmhkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHVzZV9ta2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1raSk7CitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3QgZnV6el9zcnRwX3VucHJvdGVjdF9ydGNwX21raShzcnRwX3Qgc3J0cF9zZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpoZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdXNlX21raSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBta2kpOworCitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3QgZnV6el9zcnRwX2dldF9wcm90ZWN0X2xlbmd0aChjb25zdCBzcnRwX3Qgc3J0cF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHVzZV9ta2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWtpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmxlbmd0aCk7CitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3QgZnV6el9zcnRwX2dldF9wcm90ZWN0X21raV9sZW5ndGgoY29uc3Qgc3J0cF90IHNydHBfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdXNlX21raSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWtpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpsZW5ndGgpOworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IGZ1enpfc3J0cF9nZXRfcHJvdGVjdF9ydGNwX2xlbmd0aCgKKyAgICBjb25zdCBzcnRwX3Qgc3J0cF9jdHgsCisgICAgdWludDhfdCB1c2VfbWtpLAorICAgIHVuc2lnbmVkIGludCBta2ksCisgICAgdWludDMyX3QgKmxlbmd0aCk7CitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3QgZnV6el9zcnRwX2dldF9wcm90ZWN0X3J0Y3BfbWtpX2xlbmd0aCgKKyAgICBjb25zdCBzcnRwX3Qgc3J0cF9jdHgsCisgICAgdWludDhfdCB1c2VfbWtpLAorICAgIHVuc2lnbmVkIGludCBta2ksCisgICAgdWludDMyX3QgKmxlbmd0aCk7CisKK3N0cnVjdCBmdXp6X3NydHBfZnVuY19leHQgeworICAgIGZ1enpfc3J0cF9mdW5jIHNydHBfZnVuYzsKKyAgICBib29sIHByb3RlY3Q7CisgICAgZnV6el9zcnRwX2dldF9sZW5ndGhfZnVuYyBnZXRfbGVuZ3RoOworfTsKKworY29uc3Qgc3RydWN0IGZ1enpfc3J0cF9mdW5jX2V4dCBzcnRwX2Z1bmNzW10gPSB7CisgICAgeyBmdXp6X3NydHBfcHJvdGVjdCwgdHJ1ZSwgZnV6el9zcnRwX2dldF9wcm90ZWN0X2xlbmd0aCB9LAorICAgIHsgZnV6el9zcnRwX3VucHJvdGVjdCwgZmFsc2UsIE5VTEwgfSwKKyAgICB7IGZ1enpfc3J0cF9wcm90ZWN0X3J0Y3AsIHRydWUsIGZ1enpfc3J0cF9nZXRfcHJvdGVjdF9ydGNwX2xlbmd0aCB9LAorICAgIHsgZnV6el9zcnRwX3VucHJvdGVjdF9ydGNwLCBmYWxzZSwgTlVMTCB9LAorICAgIHsgZnV6el9zcnRwX3Byb3RlY3RfbWtpLCB0cnVlLCBmdXp6X3NydHBfZ2V0X3Byb3RlY3RfbWtpX2xlbmd0aCB9LAorICAgIHsgZnV6el9zcnRwX3VucHJvdGVjdF9ta2ksIGZhbHNlLCBOVUxMIH0sCisgICAgeyBmdXp6X3NydHBfcHJvdGVjdF9ydGNwX21raSwgdHJ1ZSwgZnV6el9zcnRwX2dldF9wcm90ZWN0X3J0Y3BfbWtpX2xlbmd0aCB9LAorICAgIHsgZnV6el9zcnRwX3VucHJvdGVjdF9ydGNwX21raSwgZmFsc2UsIE5VTEwgfQorfTsKKworc3RydWN0IGZ1enpfc3J0cF9jcnlwdG9fcG9saWN5X2Z1bmNfZXh0IHsKKyAgICBmdXp6X3NydHBfY3J5cHRvX3BvbGljeV9mdW5jIGNyeXB0b19wb2xpY3lfZnVuYzsKKyAgICBjb25zdCBjaGFyICpuYW1lOworfTsKKworY29uc3Qgc3RydWN0IGZ1enpfc3J0cF9jcnlwdG9fcG9saWN5X2Z1bmNfZXh0IGZ1enpfc3J0cF9jcnlwdG9fcG9saWNpZXNbXSA9IHsKKyAgICB7IHNydHBfY3J5cHRvX3BvbGljeV9zZXRfcnRwX2RlZmF1bHQsICIiIH0sCisgICAgeyBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X3J0Y3BfZGVmYXVsdCwgIiIgfSwKKyAgICB7IHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2NtXzEyOF9obWFjX3NoYTFfMzIsCisgICAgICAic3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfY21fMTI4X2htYWNfc2hhMV8zMiIgfSwKKyAgICB7IHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2NtXzEyOF9udWxsX2F1dGgsCisgICAgICAic3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfY21fMTI4X251bGxfYXV0aCIgfSwKKyAgICB7IHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2NtXzI1Nl9obWFjX3NoYTFfMzIsCisgICAgICAic3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfY21fMjU2X2htYWNfc2hhMV8zMiIgfSwKKyAgICB7IHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2NtXzI1Nl9obWFjX3NoYTFfODAsCisgICAgICAic3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfY21fMjU2X2htYWNfc2hhMV84MCIgfSwKKyAgICB7IHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2NtXzI1Nl9udWxsX2F1dGgsCisgICAgICAic3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfY21fMjU2X251bGxfYXV0aCIgfSwKKyAgICB7IHNydHBfY3J5cHRvX3BvbGljeV9zZXRfbnVsbF9jaXBoZXJfaG1hY19udWxsLAorICAgICAgInNydHBfY3J5cHRvX3BvbGljeV9zZXRfbnVsbF9jaXBoZXJfaG1hY19udWxsIiB9LAorICAgIHsgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9udWxsX2NpcGhlcl9obWFjX3NoYTFfODAsCisgICAgICAic3J0cF9jcnlwdG9fcG9saWN5X3NldF9udWxsX2NpcGhlcl9obWFjX3NoYTFfODAiIH0sCisjaWZkZWYgT1BFTlNTTAorICAgIHsgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfY21fMTkyX2htYWNfc2hhMV8zMiwKKyAgICAgICJzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8xOTJfaG1hY19zaGExXzMyIiB9LAorICAgIHsgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfY21fMTkyX2htYWNfc2hhMV84MCwKKyAgICAgICJzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8xOTJfaG1hY19zaGExXzgwIiB9LAorICAgIHsgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfY21fMTkyX251bGxfYXV0aCwKKyAgICAgICJzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8xOTJfbnVsbF9hdXRoIiB9LAorICAgIHsgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzEyOF8xNl9hdXRoLAorICAgICAgInNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2djbV8xMjhfMTZfYXV0aCIgfSwKKyAgICB7IHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2djbV8xMjhfOF9hdXRoLAorICAgICAgInNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2djbV8xMjhfOF9hdXRoIiB9LAorICAgIHsgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzEyOF84X29ubHlfYXV0aCwKKyAgICAgICJzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19nY21fMTI4Xzhfb25seV9hdXRoIiB9LAorICAgIHsgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzI1Nl8xNl9hdXRoLAorICAgICAgInNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2djbV8yNTZfMTZfYXV0aCIgfSwKKyAgICB7IHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2djbV8yNTZfOF9hdXRoLAorICAgICAgInNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2djbV8yNTZfOF9hdXRoIiB9LAorICAgIHsgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzI1Nl84X29ubHlfYXV0aCwKKyAgICAgICJzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19nY21fMjU2Xzhfb25seV9hdXRoIiB9LAorI2VuZGlmCit9OworCitzdHJ1Y3QgZnV6el9zcnRwX3NzcmNfdHlwZV9leHQgeworICAgIHNydHBfc3NyY190eXBlX3Qgc3J0cF9zc3JjX3R5cGU7CisgICAgY29uc3QgY2hhciAqbmFtZTsKK307CisKK2NvbnN0IHN0cnVjdCBmdXp6X3NydHBfc3NyY190eXBlX2V4dCBmdXp6X3NzcmNfdHlwZV9tYXBbXSA9IHsKKyAgICB7IHNzcmNfdW5kZWZpbmVkLCAic3NyY191bmRlZmluZWQiIH0sCisgICAgeyBzc3JjX3NwZWNpZmljLCAic3NyY19zcGVjaWZpYyIgfSwKKyAgICB7IHNzcmNfYW55X2luYm91bmQsICJzc3JjX2FueV9pbmJvdW5kIiB9LAorICAgIHsgc3NyY19hbnlfb3V0Ym91bmQsICJzc3JjX2FueV9vdXRib3VuZCIgfSwKK307CmRpZmYgLS1naXQgYS9mdXp6ZXIvbXQxOTkzNy5jcHAgYi9mdXp6ZXIvbXQxOTkzNy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg0ZjFmYgotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci9tdDE5OTM3LmNwcApAQCAtMCwwICsxLDE3IEBACisjaW5jbHVkZSA8cmFuZG9tPgorI2luY2x1ZGUgPGNzdGRpbnQ+CisKK3N0ZDo6bXQxOTkzNyogbXRfcmFuZCA9IE5VTEw7CisKK2V4dGVybiAiQyIgdm9pZCBmdXp6X210MTk5MzdfaW5pdCh1aW50MzJfdCBzZWVkKSB7CisgICAgbXRfcmFuZCA9IG5ldyBzdGQ6Om10MTk5Mzcoc2VlZCk7Cit9CisKK2V4dGVybiAiQyIgdWludDMyX3QgZnV6el9tdDE5OTM3X2dldCh2b2lkKSB7CisgICAgcmV0dXJuICgqbXRfcmFuZCkoKTsKK30KKworZXh0ZXJuICJDIiB2b2lkIGZ1enpfbXQxOTkzN19kZXN0cm95KHZvaWQpIHsKKyAgICBkZWxldGUgbXRfcmFuZDsKKyAgICBtdF9yYW5kID0gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2Z1enplci9tdDE5OTM3LmggYi9mdXp6ZXIvbXQxOTkzNy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYTExODEKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6ZXIvbXQxOTkzNy5oCkBAIC0wLDAgKzEsNCBAQAorI2luY2x1ZGUgPHN0ZGludC5oPgordm9pZCBmdXp6X210MTk5MzdfaW5pdCh1aW50MzJfdCBzZWVkKTsKK3VpbnQzMl90IGZ1enpfbXQxOTkzN19nZXQodm9pZCk7Cit2b2lkIGZ1enpfbXQxOTkzN19kZXN0cm95KHZvaWQpOwpkaWZmIC0tZ2l0IGEvZnV6emVyL3Rlc3RtZW0uYyBiL2Z1enplci90ZXN0bWVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIzNzBhNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enplci90ZXN0bWVtLmMKQEAgLTAsMCArMSwyNSBAQAorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWZkZWYgRlVaWl9NU0FOCisjaW5jbHVkZSA8c3RkaW8uaD4KK3N0YXRpYyB2b2lkIGZ1enpfdGVzdG1lbV9tc2FuKHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKQoreworICAgIC8qIFRoaXMgaXMgYSB0cmljayB0byBmb3JjZSBNZW1vcnlTYW5pdGl6ZXIgdG8gZXZhbHVhdGUgdGhlIGRhdGEgYXQgaGFuZCAqLworICAgIEZJTEUgKmZwID0gZm9wZW4oIi9kZXYvbnVsbCIsICJ3YiIpOworICAgIGZ3cml0ZShkYXRhLCBzaXplLCAxLCBmcCk7CisgICAgZmNsb3NlKGZwKTsKK30KKyNlbmRpZgorCit2b2lkIGZ1enpfdGVzdG1lbSh2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKyNpZmRlZiBGVVpaX01TQU4KKyAgICBmdXp6X3Rlc3RtZW1fbXNhbihkYXRhLCBzaXplKTsKKyNlbmRpZgorICAgIHVpbnQ4X3QgKmNvcHkgPSBtYWxsb2Moc2l6ZSk7CisgICAgbWVtY3B5KGNvcHksIGRhdGEsIHNpemUpOworICAgIGZyZWUoY29weSk7Cit9CmRpZmYgLS1naXQgYS9mdXp6ZXIvdGVzdG1lbS5oIGIvZnV6emVyL3Rlc3RtZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDBmMzA5Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6emVyL3Rlc3RtZW0uaApAQCAtMCwwICsxLDMgQEAKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KK3ZvaWQgZnV6el90ZXN0bWVtKHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZWt0LmggYi9pbmNsdWRlL2VrdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyODlhNTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2VrdC5oCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogZWt0LmgKKyAqCisgKiBpbnRlcmZhY2UgdG8gRW5jcnlwdGVkIEtleSBUcmFuc3BvcnQgZm9yIFNSVFAKKyAqCisgKiBEYXZpZCBNY0dyZXcKKyAqIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqLworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxNyBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKy8qCisgKiBFS1QgaW1wbGVtZW50YXRpb24gc3RyYXRlZ3kKKyAqCisgKiB1c2Ugc3RyZWFtX3RlbXBsYXRlIGFwcHJvYWNoCisgKgorICogaW4gc3J0cF91bnByb3RlY3QsIHdoZW4gYSBuZXcgc3RyZWFtIGFwcGVhcnMsIGNoZWNrIGlmIHRlbXBsYXRlIGhhcworICogRUtUIGRlZmluZWQsIGFuZCBpZiBpdCBkb2VzLCB0aGVuIGFwcGx5IEVLVCBwcm9jZXNzaW5nCisgKgorICogcXVlc3Rpb246IHdpbGwgd2Ugd2FudCB0byBhbGxvdyBrZXktc2hhcmluZyB0ZW1wbGF0ZXMgaW4gYWRkaXRpb24KKyAqIHRvIEVLVCB0ZW1wbGF0ZXM/ICBjb3VsZCBkZWZpbmUgYSBuZXcgc3NyY190eXBlX3QgdGhhdCdzIGFzc29jaWF0ZWQKKyAqIHdpdGggYW4gRUtULCBlLmcuICBzc3JjX2FueV9la3QuCisgKgorICoKKyAqLworCisjaWZuZGVmIFNSVFBfRUtUX0gKKyNkZWZpbmUgU1JUUF9FS1RfSAorCisvLyBsZWZ0IGluIGNvbW1lbnRlZCBvdXQgYXMgcmVtaW5kZXIgdG8gbm90IGluY2x1ZGUgcHJpdmF0ZSBoZWFkZXJzCisvLyNpbmNsdWRlICJzcnRwX3ByaXYuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjZGVmaW5lIFNSVFBfRUtUX0NJUEhFUl9ERUZBVUxUIDEKKyNkZWZpbmUgU1JUUF9FS1RfQ0lQSEVSX0FFU18xMjhfRUNCIDEKKyNkZWZpbmUgU1JUUF9FS1RfQ0lQSEVSX0FFU18xOTJfS0VZX1dSQVAgMgorI2RlZmluZSBTUlRQX0VLVF9DSVBIRVJfQUVTXzI1Nl9LRVlfV1JBUCAzCisKK3R5cGVkZWYgdWludDE2X3Qgc3J0cF9la3Rfc3BpX3Q7CisKK3Vuc2lnbmVkIHNydHBfZWt0X29jdGV0c19hZnRlcl9iYXNlX3RhZyhzcnRwX2VrdF9zdHJlYW1fdCBla3QpOworCisvKgorICogYW4gc3J0cF9wb2xpY3lfdCBzdHJ1Y3R1cmUgY2FuIGNvbnRhaW4gYSBwb2ludGVyIHRvIGFuCisgKiBzcnRwX2VrdF9wb2xpY3lfdCBzdHJ1Y3R1cmUKKyAqCisgKiB0aGlzIHN0cnVjdHVyZSBob2xkcyBhbGwgb2YgdGhlIGhpZ2ggbGV2ZWwgRUtUIGluZm9ybWF0aW9uLCBhbmQgaXQKKyAqIGlzIHBhc3NlZCBpbnRvIGxpYnNydHAgdG8gaW5kaWNhdGUgd2hhdCBwb2xpY3kgc2hvdWxkIGJlIGluIGVmZmVjdAorICovCisKK3R5cGVkZWYgc3RydWN0IHNydHBfZWt0X3BvbGljeV9jdHhfdCB7CisgICAgc3J0cF9la3Rfc3BpX3Qgc3BpOyAvKiBzZWN1cml0eSBwYXJhbWV0ZXIgaW5kZXggKi8KKyAgICB1aW50OF90IGVrdF9jaXBoZXJfdHlwZTsKKyAgICB1aW50OF90ICpla3Rfa2V5OworICAgIHN0cnVjdCBzcnRwX2VrdF9wb2xpY3lfY3R4X3QgKm5leHRfZWt0X3BvbGljeTsKK30gc3J0cF9la3RfcG9saWN5X2N0eF90OworCisvKgorICogYW4gc3J0cF9la3RfZGF0YV90IHN0cnVjdHVyZSBob2xkcyB0aGUgZGF0YSBjb3JyZXNwb25kaW5nIHRvIGFuIGVrdCBrZXksCisgKiBzcGksIGFuZCBzbyBvbgorICovCisKK3R5cGVkZWYgc3RydWN0IHNydHBfZWt0X2RhdGFfdCB7CisgICAgc3J0cF9la3Rfc3BpX3Qgc3BpOworICAgIHVpbnQ4X3QgZWt0X2NpcGhlcl90eXBlOworICAgIHNydHBfYWVzX2V4cGFuZGVkX2tleV90IGVrdF9lbmNfa2V5OworICAgIHNydHBfYWVzX2V4cGFuZGVkX2tleV90IGVrdF9kZWNfa2V5OworICAgIHN0cnVjdCBla3RfZGF0YV90ICpuZXh0X2VrdF9kYXRhOworfSBzcnRwX2VrdF9kYXRhX3Q7CisKKy8qCisgKiBhbiBzcnRwX3N0cmVhbV9jdHhfdCBjYW4gY29udGFpbiBhbiBzcnRwX2VrdF9zdHJlYW1fY3R4X3QKKyAqCisgKiBhbiBzcnRwX2VrdF9zdHJlYW1fY3R4X3Qgc3RydWN0dXJlIGhvbGRzIGFsbCBvZiB0aGUgRUtUIGluZm9ybWF0aW9uIGZvcgorICogYSBzcGVjaWZpYyBTUlRQIHN0cmVhbQorICovCisKK3R5cGVkZWYgc3RydWN0IHNydHBfZWt0X3N0cmVhbV9jdHhfdCB7CisgICAgc3J0cF9la3RfZGF0YV90ICpkYXRhOworICAgIHVpbnQxNl90IGlzbjsgLyogaW5pdGlhbCBzZXF1ZW5jZSBudW1iZXIgICovCisgICAgdWludDhfdCBlbmNyeXB0ZWRfbWFzdGVyX2tleVtTUlRQX01BWF9LRVlfTEVOXTsKK30gc3J0cF9la3Rfc3RyZWFtX2N0eF90OworCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2VrdF9hbGxvYyhzcnRwX2VrdF9zdHJlYW1fdCAqc3RyZWFtX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX2VrdF9wb2xpY3lfdCBwb2xpY3kpOworCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2VrdF9zdHJlYW1faW5pdChzcnRwX2VrdF9zdHJlYW1fdCBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9la3Rfc3BpX3Qgc3BpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZWt0X2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGVrdF9jaXBoZXJfdHlwZSk7CisKK3NydHBfZXJyX3N0YXR1c190IHNydHBfZWt0X3N0cmVhbV9pbml0X2Zyb21fcG9saWN5KHNydHBfZWt0X3N0cmVhbV90IGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX2VrdF9wb2xpY3lfdCBwKTsKKworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9zdHJlYW1faW5pdF9mcm9tX2VrdChzcnRwX3N0cmVhbV90IHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqc3J0Y3BfaGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwa3Rfb2N0ZXRfbGVuKTsKKwordm9pZCBzcnRwX2VrdF93cml0ZV9kYXRhKHNydHBfZWt0X3N0cmVhbV90IGVrdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpiYXNlX3RhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBiYXNlX3RhZ19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpwYWNrZXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfeHRkX3NlcV9udW1fdCBwa3RfaW5kZXgpOworCisvKgorICogV2UgaGFuZGxlIEVLVCBieSBwZXJmb3JtaW5nIHNvbWUgYWRkaXRpb25hbCBzdGVwcyBiZWZvcmUKKyAqIGF1dGhlbnRpY2F0aW9uIChjb3B5aW5nIHRoZSBhdXRoIHRhZyBpbnRvIGEgdGVtcG9yYXJ5IGxvY2F0aW9uLAorICogemVyb2l6aW5nIHRoZSAiYmFzZSB0YWciIGZpZWxkIGluIHRoZSBwYWNrZXQpCisgKgorICogV2l0aCBFS1QsIHRoZSB0YWdfbGVuIHBhcmFtZXRlciBpcyBhY3R1YWxseSB0aGUgYmFzZSB0YWcKKyAqIGxlbmd0aAorICovCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2VrdF90YWdfdmVyaWZpY2F0aW9uX3ByZXByb2Nlcyh1aW50OF90ICpwa3RfdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGt0X3RhZ19jb3B5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgdGFnX2xlbik7CisKK3NydHBfZXJyX3N0YXR1c190IHNydHBfZWt0X3RhZ192ZXJpZmljYXRpb25fcG9zdHByb2Nlcyh1aW50OF90ICpwa3RfdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBrdF90YWdfY29weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB0YWdfbGVuKTsKKworLyoKKyAqIEBicmllZiBFS1QgcHJlLXByb2Nlc3NpbmcgZm9yIHNydGNwIHRhZyBnZW5lcmF0aW9uCisgKgorICogVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBwcmUtcHJvY2Vzc2luZyBvZiB0aGUgU1JUQ1AgYXV0aGVudGljYXRpb24KKyAqIHRhZyBmb3JtYXQuICBXaGVuIEVLVCBpcyB1c2VkLCBpdCBjb25zaXN0cyBvZiB3cml0aW5nIHRoZSBFbmNyeXB0ZWQKKyAqIE1hc3RlciBLZXksIHRoZSBTUlRQIFJPQywgdGhlIEluaXRpYWwgU2VxdWVuY2UgTnVtYmVyLCBhbmQgU1BJCisgKiBmaWVsZHMuICBUaGUgQmFzZSBBdXRoZW50aWNhdGlvbiBUYWcgZmllbGQgaXMgc2V0IHRvIHRoZSBhbGwtemVybworICogdmFsdWUKKyAqCisgKiBXaGVuIEVLVCBpcyBub3QgdXNlZCwgdGhpcyBmdW5jdGlvbiBpcyBhIG5vLW9wLgorICoKKyAqLworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9zdHJlYW1fc3J0Y3BfYXV0aF90YWdfZ2VuZXJhdGlvbl9wcmVwcm9jZXNzKAorICAgIGNvbnN0IHNydHBfc3RyZWFtX3QgKnMsCisgICAgdWludDhfdCAqcGt0X3RhZywKKyAgICB1bnNpZ25lZCBwa3Rfb2N0ZXRfbGVuKTsKKworLyogaXQncyBub3QgY2xlYXIgdGhhdCBhIHRhZ19nZW5lcmF0aW9uX3Bvc3Rwcm9jZXNzIGZ1bmN0aW9uIGlzIG5lZWRlZCAqLworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0Y3BfYXV0aF90YWdfZ2VuZXJhdGlvbl9wb3N0cHJvY2Vzcyh2b2lkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIFNSVFBfRUtUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZXJyLmggYi9pbmNsdWRlL2Vyci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGQ0NmZiLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvZXJyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODQgKzAsMCBAQAotLyoKLSAqIGVyci5oCi0gKiAKLSAqIGVycm9yIHN0YXR1cyBjb2RlcwotICoKLSAqIERhdmlkIEEuIE1jR3JldwotICogQ2lzY28gU3lzdGVtcywgSW5jLgotICovCi0vKgotICoJCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSwgQ2lzY28gU3lzdGVtcywgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAKLSAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogCi0gKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICovCi0KLQotI2lmbmRlZiBFUlJfSAotI2RlZmluZSBFUlJfSAotCi0jaW5jbHVkZSAiY29uZmlnLmgiICAgICAgICAgICAgIC8qIGNoZWNrIGZvciBFUlJfUkVQT1JUSU5HX1NZU0xPRyAqLwotCi0jaWZkZWYgRVJSX1JFUE9SVElOR19GSUxFCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0KLS8qKgotICogQGRlZmdyb3VwIEVycm9yIEVycm9yIENvZGVzCi0gKiAKLSAqIEVycm9yIHN0YXR1cyBjb2RlcyBhcmUgcmVwcmVzZW50ZWQgYnkgdGhlIGVudW1lcmF0aW9uIGVycl9zdGF0dXNfdC4KLSAqIAotICogQHsKLSAqLwotCi0KLS8qCi0gKiBAYnJpZWYgZXJyX3N0YXR1c190IGRlZmluZXMgZXJyb3IgY29kZXMuCi0gKgotICogVGhlIGVudW1lcmF0aW9uIGVycl9zdGF0dXNfdCBkZWZpbmVzIGVycm9yIGNvZGVzLiAgTm90ZSB0aGF0IHRoZQotICogdmFsdWUgb2YgZXJyX3N0YXR1c19vayBpcyBlcXVhbCB0byB6ZXJvLCB3aGljaCBjYW4gc2ltcGxpZnkgZXJyb3IKLSAqIGNoZWNraW5nIHNvbWV3aGF0LgotICoKLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgZXJyX3N0YXR1c19vayAgICAgICAgICAgPSAwLCAgLyoqPCBub3RoaW5nIHRvIHJlcG9ydCAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19mYWlsICAgICAgICAgPSAxLCAgLyoqPCB1bnNwZWNpZmllZCBmYWlsdXJlICAgICAgICAgICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19iYWRfcGFyYW0gICAgPSAyLCAgLyoqPCB1bnN1cHBvcnRlZCBwYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19hbGxvY19mYWlsICAgPSAzLCAgLyoqPCBjb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgICAgICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19kZWFsbG9jX2ZhaWwgPSA0LCAgLyoqPCBjb3VsZG4ndCBkZWFsbG9jYXRlIHByb3Blcmx5ICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19pbml0X2ZhaWwgICAgPSA1LCAgLyoqPCBjb3VsZG4ndCBpbml0aWFsaXplICAgICAgICAgICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c190ZXJtaW51cyAgICAgPSA2LCAgLyoqPCBjYW4ndCBwcm9jZXNzIGFzIG11Y2ggZGF0YSBhcyByZXF1ZXN0ZWQgKi8KLSAgZXJyX3N0YXR1c19hdXRoX2ZhaWwgICAgPSA3LCAgLyoqPCBhdXRoZW50aWNhdGlvbiBmYWlsdXJlICAgICAgICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19jaXBoZXJfZmFpbCAgPSA4LCAgLyoqPCBjaXBoZXIgZmFpbHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19yZXBsYXlfZmFpbCAgPSA5LCAgLyoqPCByZXBsYXkgY2hlY2sgZmFpbGVkIChiYWQgaW5kZXgpICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19yZXBsYXlfb2xkICAgPSAxMCwgLyoqPCByZXBsYXkgY2hlY2sgZmFpbGVkIChpbmRleCB0b28gb2xkKSAgICAgKi8KLSAgZXJyX3N0YXR1c19hbGdvX2ZhaWwgICAgPSAxMSwgLyoqPCBhbGdvcml0aG0gZmFpbGVkIHRlc3Qgcm91dGluZSAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19ub19zdWNoX29wICAgPSAxMiwgLyoqPCB1bnN1cHBvcnRlZCBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19ub19jdHggICAgICAgPSAxMywgLyoqPCBubyBhcHByb3ByaWF0ZSBjb250ZXh0IGZvdW5kICAgICAgICAgICAgKi8KLSAgZXJyX3N0YXR1c19jYW50X2NoZWNrICAgPSAxNCwgLyoqPCB1bmFibGUgdG8gcGVyZm9ybSBkZXNpcmVkIHZhbGlkYXRpb24gICAgKi8KLSAgZXJyX3N0YXR1c19rZXlfZXhwaXJlZCAgPSAxNSAgLyoqPCBjYW4ndCB1c2Uga2V5IGFueSBtb3JlICAgICAgICAgICAgICAgICAgKi8KLX0gZXJyX3N0YXR1c190OwotCi0vKioKLSAqIEB9Ci0gKi8KLQotI2lmIChFUlJfUkVQT1JUSU5HX1NZU0xPRykgCi0KLSNpbmNsdWRlIDxzeXNsb2cuaD4KLQotdHlwZWRlZiBlbnVtIHsKLSAgZXJyX2xldmVsX2VtZXJnZW5jeSA9IExPR19FTUVSRywKLSAgZXJyX2xldmVsX2FsZXJ0ICAgICA9IExPR19BTEVSVCwgIAotICBlcnJfbGV2ZWxfY3JpdGljYWwgID0gTE9HX0NSSVQsICAKLSAgZXJyX2xldmVsX2Vycm9yICAgICA9IExPR19FUlIsICAKLSAgZXJyX2xldmVsX3dhcm5pbmcgICA9IExPR19XQVJOSU5HLAotICBlcnJfbGV2ZWxfbm90aWNlICAgID0gTE9HX05PVElDRSwgIAotICBlcnJfbGV2ZWxfaW5mbyAgICAgID0gTE9HX0lORk8sICAKLSAgZXJyX2xldmVsX2RlYnVnICAgICA9IExPR19ERUJVRywgIAotICBlcnJfbGV2ZWxfbm9uZQotfSBlcnJfcmVwb3J0aW5nX2xldmVsX3Q7Ci0KLSNlbHNlCi0KLXR5cGVkZWYgZW51bSB7Ci0gIGVycl9sZXZlbF9lbWVyZ2VuY3ksIAotICBlcnJfbGV2ZWxfYWxlcnQsICAgICAKLSAgZXJyX2xldmVsX2NyaXRpY2FsLCAgCi0gIGVycl9sZXZlbF9lcnJvciwgICAgIAotICBlcnJfbGV2ZWxfd2FybmluZywgICAKLSAgZXJyX2xldmVsX25vdGljZSwgICAgIAotICBlcnJfbGV2ZWxfaW5mbywgICAgICAKLSAgZXJyX2xldmVsX2RlYnVnLAotICBlcnJfbGV2ZWxfbm9uZQotfSBlcnJfcmVwb3J0aW5nX2xldmVsX3Q7Ci0KLSNlbmRpZgotCi0vKgotICogZXJyX3JlcG9ydGluZ19pbml0IHByZXBhcmVzIHRoZSBlcnJvciBzeXN0ZW0uICBJZgotICogRVJSX1JFUE9SVElOR19TWVNMT0cgaXMgZGVmaW5lZCwgaXQgd2lsbCBvcGVuIHN5c2xvZy4KLSAqCi0gKiBUaGUgaWRlbnQgYXJndW1lbnQgaXMgYSBzdHJpbmcgdGhhdCB3aWxsIGJlIHByZXBlbmRlZCB0bwotICogYWxsIHN5c2xvZyBtZXNzYWdlcy4gIEl0IGlzIGNvbnZlbnRpb25hbGx5IGFyZ3ZbMF0uICAKLSAqLwotCi1lcnJfc3RhdHVzX3QKLWVycl9yZXBvcnRpbmdfaW5pdChjaGFyICppZGVudCk7Ci0gIAotLyoKLSAqIGtleWRhZW1vbl9yZXBvcnRfZXJyb3IgcmVwb3J0cyBhICdwcmludGYnIGZvcm1hdHRlZCBlcnJvcgotICogc3RyaW5nLCBmb2xsb3dlZCBieSBhIGFuIGFyZyBsaXN0LiAgVGhlIHByaW9yaXR5IGFyZ3VtZW50Ci0gKiBpcyBlcXVpdmFsZW50IHRvIHRoYXQgZGVmaW5lZCBmb3Igc3lzbG9nLgotICoKLSAqIEVycm9ycyB3aWxsIGJlIHJlcG9ydGVkIHRvIEVSUl9SRVBPUlRJTkdfRklMRSwgaWYgZGVmaW5lZCwgYW5kIHRvCi0gKiBzeXNsb2csIGlmIEVSUl9SRVBPUlRJTkdfU1lTTE9HIGlzIGRlZmluZWQuCi0gKgotICovCi0KLXZvaWQKLWVycl9yZXBvcnQoaW50IHByaW9yaXR5LCBjaGFyICpmb3JtYXQsIC4uLik7Ci0KLQotLyoKLSAqIGRlYnVnX21vZHVsZV90IGRlZmluZXMgYSBkZWJ1ZyBtb2R1bGUgCi0gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgeyAKLSAgdW5zaWduZWQgaW50ICAgb247ICAgICAgICAgIC8qIDEgaWYgZGVidWdnaW5nIGlzIG9uLCAwIGlmIGl0IGlzIG9mZiAqLwotICB1bnNpZ25lZCBjaGFyICpuYW1lOyAgICAgICAgLyogcHJpbnRhYmxlIG5hbWUgZm9yIGRlYnVnIG1vZHVsZSAgICAgICovCi19IGRlYnVnX21vZHVsZV90OwotCi0jaWYgRU5BQkxFX0RFQlVHR0lORyAKLQotI2RlZmluZSBkZWJ1Z19vbihtb2QpICAobW9kKS5vbiA9IDEKLQotI2RlZmluZSBkZWJ1Z19vZmYobW9kKSAobW9kKS5vbiA9IDAKLQotLyogdXNlIGVycl9yZXBvcnQoKSB0byByZXBvcnQgZGVidWcgbWVzc2FnZSAqLwotI2RlZmluZSBkZWJ1Z19wcmludChtb2QsIGZvcm1hdCwgYXJnKSAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKG1vZC5vbikgZXJyX3JlcG9ydChlcnJfbGV2ZWxfZGVidWcsICgiJXM6ICIgZm9ybWF0KSwgbW9kLm5hbWUsIGFyZykKLQotI2Vsc2UKLQotLyogZGVmaW5lIG1hY3JvcyB0byBkbyBub3RoaW5nICovCi0jZGVmaW5lIGRlYnVnX3ByaW50KG1vZCwgZm9ybWF0LCBhcmcpIAotCi0jZGVmaW5lIGRlYnVnX29uKG1vZCkgIAotCi0jZGVmaW5lIGRlYnVnX29mZihtb2QpIAotCi0jZW5kaWYKLQotI2VuZGlmIC8qIEVSUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dldG9wdF9zLmggYi9pbmNsdWRlL2dldG9wdF9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNmYjI1YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZ2V0b3B0X3MuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogZ2V0b3B0LmgKKyAqCisgKiBpbnRlcmZhY2UgdG8gYSBtaW5pbWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBnZXRvcHQoKSBmdW5jdGlvbiwKKyAqIHdyaXR0ZW4gc28gdGhhdCB0ZXN0IGFwcGxpY2F0aW9ucyB0aGF0IHVzZSB0aGF0IGZ1bmN0aW9uIGNhbiBydW4gb24KKyAqIG5vbi1QT1NJWCBwbGF0Zm9ybXMKKyAqCisgKi8KKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMTcgQ2lzY28gU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIEdFVE9QVF9TX0gKKyNkZWZpbmUgR0VUT1BUX1NfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qCisgKiBnZXRvcHRfcygpLCBvcHRhcmdfcywgYW5kIG9wdGluZF9zIGFyZSBzbWFsbCwgbG9jYWxseSBkZWZpbmVkCisgKiB2ZXJzaW9ucyBvZiB0aGUgUE9TSVggc3RhbmRhcmQgZ2V0b3B0KCkgaW50ZXJmYWNlLgorICovCisKK2ludCBnZXRvcHRfcyhpbnQgYXJnYywgY2hhciAqY29uc3QgYXJndltdLCBjb25zdCBjaGFyICpvcHRzdHJpbmcpOworCitleHRlcm4gY2hhciAqb3B0YXJnX3M7IC8qIGRlZmluZWQgaW4gZ2V0b3B0LmMgKi8KKworZXh0ZXJuIGludCBvcHRpbmRfczsgLyogZGVmaW5lZCBpbiBnZXRvcHQuYyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogR0VUT1BUX1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZGIuaCBiL2luY2x1ZGUvcmRiLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMjZjNWUuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9yZGIuaAorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qCi0gKiByZXBsYXktZGF0YWJhc2UuaAotICoKLSAqIGludGVyZmFjZSBmb3IgYSByZXBsYXkgZGF0YWJhc2UgZm9yIHBhY2tldCBzZWN1cml0eQotICoKLSAqIERhdmlkIEEuIE1jR3JldwotICogQ2lzY28gU3lzdGVtcywgSW5jLgotICovCi0KLQotI2lmbmRlZiBSRVBMQVlfREJfSAotI2RlZmluZSBSRVBMQVlfREJfSAotCi0jaW5jbHVkZSAiaW50ZWdlcnMuaCIgICAgICAgICAvKiBmb3IgdWludDMyX3QgICAgICovCi0jaW5jbHVkZSAiZGF0YXR5cGVzLmgiICAgICAgICAvKiBmb3IgdjEyOF90ICAgICAgICovCi0jaW5jbHVkZSAiZXJyLmgiICAgICAgICAgICAgICAvKiBmb3IgZXJyX3N0YXR1c190ICovCi0KLS8qCi0gKiBpZiB0aGUgaXRoIGxlYXN0IHNpZ25pZmljYW50IGJpdCBpcyBvbmUsIHRoZW4gdGhlIHBhY2tldCBpbmRleAotICogd2luZG93X2VuZC1pIGlzIGluIHRoZSBkYXRhYmFzZQotICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgdWludDMyX3Qgd2luZG93X3N0YXJ0OyAgIC8qIHBhY2tldCBpbmRleCBvZiB0aGUgZmlyc3QgYml0IGluIGJpdG1hc2sgKi8KLSAgdjEyOF90IGJpdG1hc2s7ICAKLX0gcmRiX3Q7Ci0KLSNkZWZpbmUgcmRiX2JpdHNfaW5fYml0bWFzayAoOCpzaXplb2YodjEyOF90KSkgICAKLQotLyoKLSAqIHJkYiBpbml0Ci0gKgotICogaW5pdGFsaXplcyByZGIKLSAqCi0gKiByZXR1cm5zIGVycl9zdGF0dXNfb2sgb24gc3VjY2VzcywgZXJyX3N0YXR1c190X2ZhaWwgb3RoZXJ3aXNlCi0gKi8KLQotZXJyX3N0YXR1c190Ci1yZGJfaW5pdChyZGJfdCAqcmRiKTsKLQotCi0vKgotICogcmRiX2NoZWNrCi0gKgotICogY2hlY2tzIHRvIHNlZSBpZiBpbmRleCBhcHBlYXJzIGluIHJkYgotICoKLSAqIHJldHVybnMgZXJyX3N0YXR1c19mYWlsIGlmIHRoZSBpbmRleCBhbHJlYWR5IGFwcGVhcnMgaW4gcmRiLAotICogcmV0dXJucyBlcnJfc3RhdHVzX29rIG90aGVyd2lzZQotICovCi0KLWVycl9zdGF0dXNfdAotcmRiX2NoZWNrKGNvbnN0IHJkYl90ICpyZGIsIHVpbnQzMl90IGluZGV4KTsgIAotCi0vKgotICogcmRiX2FkZF9pbmRleAotICoKLSAqIGFkZHMgaW5kZXggdG8gcmRiX3QgKGFuZCBkb2VzICpub3QqIGNoZWNrIGlmIGluZGV4IGFwcGVhcnMgaW4gZGIpCi0gKgotICogcmV0dXJucyBlcnJfc3RhdHVzX29rIG9uIHN1Y2Nlc3MsIGVycl9zdGF0dXNfZmFpbCBvdGhlcndpc2UKLSAqCi0gKi8KLQotZXJyX3N0YXR1c190Ci1yZGJfYWRkX2luZGV4KHJkYl90ICpyZGIsIHVpbnQzMl90IGluZGV4KTsKLQotLyoKLSAqIHRoZSBmdW5jdGlvbnMgcmRiX2luY3JlbWVudCgpIGFuZCByZGJfZ2V0X3ZhbHVlKCkgYXJlIGZvciB1c2UgYnkgCi0gKiBzZW5kZXJzLCBub3QgcmVjZWl2ZXJzIC0gRE8gTk9UIHVzZSB0aGVzZSBmdW5jdGlvbnMgb24gdGhlIHNhbWUKLSAqIHJkYl90IHVwb24gd2hpY2ggcmRiX2FkZF9pbmRleCBpcyB1c2VkIQotICovCi0KLQotLyoKLSAqIHJkYl9pbmNyZW1lbnQoZGIpIGluY3JlbWVudHMgdGhlIHNlcXVlbmNlIG51bWJlciBpbiBkYiwgaWYgaXQgaXMgCi0gKiBub3QgdG9vIGhpZ2gKLSAqCi0gKiByZXR1cm4gdmFsdWVzOgotICogCi0gKiAgICBlcnJfc3RhdHVzX29rICAgICAgICAgICAgbm8gcHJvYmxlbQotICogICAgZXJyX3N0YXR1c19rZXlfZXhwaXJlZCAgIHNlcXVlbmNlIG51bWJlciB0b28gaGlnaAotICoKLSAqLwotZXJyX3N0YXR1c190Ci1yZGJfaW5jcmVtZW50KHJkYl90ICpyZGIpOwotCi0vKgotICogcmRiX2dldF92YWx1ZShkYikgcmV0dXJucyB0aGUgY3VycmVudCBzZXF1ZW5jZSBudW1iZXIgb2YgZGIKLSAqLwotCi11aW50MzJfdAotcmRiX2dldF92YWx1ZShjb25zdCByZGJfdCAqcmRiKTsKLQotCi0jZW5kaWYgLyogUkVQTEFZX0RCX0ggKi8gCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkYnguaCBiL2luY2x1ZGUvcmRieC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjBiNjU1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvcmRieC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ2ICswLDAgQEAKLS8qCi0gKiByZGJ4LmgKLSAqCi0gKiByZXBsYXkgZGF0YWJhc2Ugd2l0aCBleHRlbmRlZCBwYWNrZXQgaW5kaWNlcywgdXNpbmcgYSByb2xsb3ZlciBjb3VudGVyCi0gKgotICogRGF2aWQgQS4gTWNHcmV3Ci0gKiBDaXNjbyBTeXN0ZW1zLCBJbmMuCi0gKgotICovCi0KLSNpZm5kZWYgUkRCWF9ICi0jZGVmaW5lIFJEQlhfSAotCi0jaW5jbHVkZSAiZGF0YXR5cGVzLmgiCi0jaW5jbHVkZSAiZXJyLmgiCi0KLS8qICNkZWZpbmUgUk9DX1RFU1QgKi8gIAotCi0jaWZuZGVmIFJPQ19URVNUCi0KLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHNlcXVlbmNlX251bWJlcl90OyAgIC8qIDE2IGJpdCBzZXF1ZW5jZSBudW1iZXIgICovCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHJvbGxvdmVyX2NvdW50ZXJfdDsgICAvKiAzMiBiaXQgcm9sbG92ZXIgY291bnRlciAqLwotCi0jZWxzZSAgLyogdXNlIHNtYWxsIHNlcV9udW0gYW5kIHJvYyBkYXRhdHlwZXMgZm9yIHRlc3RpbmcgcHVycG9zZXMgKi8KLQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHNlcXVlbmNlX251bWJlcl90OyAgICAgICAgIC8qIDggYml0IHNlcXVlbmNlIG51bWJlciAgICovCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCByb2xsb3Zlcl9jb3VudGVyX3Q7ICAgLyogMTYgYml0IHJvbGxvdmVyIGNvdW50ZXIgKi8KLQotI2VuZGlmCi0KLSNkZWZpbmUgc2VxX251bV9tZWRpYW4gKDEgPDwgKDgqc2l6ZW9mKHNlcXVlbmNlX251bWJlcl90KSAtIDEpKQotI2RlZmluZSBzZXFfbnVtX21heCAgICAoMSA8PCAoOCpzaXplb2Yoc2VxdWVuY2VfbnVtYmVyX3QpKSkKLQotLyoKLSAqIEFuIHh0ZF9zZXFfbnVtX3QgaXMgYSA2NC1iaXQgdW5zaWduZWQgaW50ZWdlciB1c2VkIGFzIGFuICdleHRlbmRlZCcKLSAqIHNlcXVlbmNlIG51bWJlci4gIAotICovCi0KLXR5cGVkZWYgdWludDY0X3QgeHRkX3NlcV9udW1fdDsKLQotCi0vKgotICogQW4gcmRieF90IGlzIGEgcmVwbGF5IGRhdGFiYXNlIHdpdGggZXh0ZW5kZWQgcmFuZ2U7IGl0IHVzZXMgYW4KLSAqIHh0ZF9zZXFfbnVtX3QgYW5kIGEgYml0bWFzayBvZiByZWNlbnRseSByZWNlaXZlZCBpbmRpY2VzLgotICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgeHRkX3NlcV9udW1fdCBpbmRleDsKLSAgdjEyOF90IGJpdG1hc2s7Ci19IHJkYnhfdDsKLQotCi0vKgotICogcmRieF9pbml0KHJkYnhfcHRyKQotICoKLSAqIGluaXRpYWxpemVzIHRoZSByZGJ4IHBvaW50ZWQgdG8gYnkgaXRzIGFyZ3VtZW50LCBzZXR0aW5nIHRoZQotICogcm9sbG92ZXIgY291bnRlciBhbmQgc2VxdWVuY2UgbnVtYmVyIHRvIHplcm8KLSAqLwotCi1lcnJfc3RhdHVzX3QKLXJkYnhfaW5pdChyZGJ4X3QgKnJkYngpOwotCi0KLS8qCi0gKiByZGJ4X2VzdGltYXRlX2luZGV4KHJkYngsIGd1ZXNzLCBzKQotICogCi0gKiBnaXZlbiBhbiByZGJ4IGFuZCBhIHNlcXVlbmNlIG51bWJlciBzIChmcm9tIGEgbmV3bHkgYXJyaXZlZCBwYWNrZXQpLAotICogc2V0cyB0aGUgY29udGVudHMgb2YgKmd1ZXNzIHRvIGNvbnRhaW4gdGhlIGJlc3QgZ3Vlc3Mgb2YgdGhlIHBhY2tldAotICogaW5kZXggdG8gd2hpY2ggcyBjb3JyZXNwb25kcywgYW5kIHJldHVybnMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbgotICogKmd1ZXNzIGFuZCB0aGUgbG9jYWxseSBzdG9yZWQgc3luY2ggaW5mbwotICovCi0KLWlubGluZSBpbnQKLXJkYnhfZXN0aW1hdGVfaW5kZXgoY29uc3QgcmRieF90ICpyZGJ4LAotCQkgICAgeHRkX3NlcV9udW1fdCAqZ3Vlc3MsCi0JCSAgICBzZXF1ZW5jZV9udW1iZXJfdCBzKTsKLQotLyoKLSAqIHJkYnhfY2hlY2socmRieCwgZGVsdGEpOwotICoKLSAqIHJkYnhfY2hlY2soJnIsIGRlbHRhKSBjaGVja3MgdG8gc2VlIGlmIHRoZSB4dGRfc2VxX251bV90Ci0gKiB3aGljaCBpcyBhdCByZGJ4LT53aW5kb3dfc3RhcnQgKyBkZWx0YSBpcyBpbiB0aGUgcmRiCi0gKgotICovCi0KLWlubGluZSBlcnJfc3RhdHVzX3QKLXJkYnhfY2hlY2soY29uc3QgcmRieF90ICpyZGJ4LCBpbnQgZGlmZmVyZW5jZSk7Ci0KLS8qCi0gKiByZXBsYXlfYWRkX2luZGV4KHJkYngsIGRlbHRhKQotICogCi0gKiBhZGRzIHRoZSB4dGRfc2VxX251bV90IGF0IHJkYngtPndpbmRvd19zdGFydCArIGRlbHRhIHRvIHJlcGxheV9kYgotICogKGFuZCBkb2VzICpub3QqIGNoZWNrIGlmIHRoYXQgeHRkX3NlcV9udW1fdCBhcHBlYXJzIGluIGRiKQotICoKLSAqIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCAqb25seSogYWZ0ZXIgcmVwbGF5X2NoZWNrIGhhcwotICogaW5kaWNhdGVkIHRoYXQgdGhlIGluZGV4IGRvZXMgbm90IGFwcGVhciBpbiB0aGUgcmRieCwgYW5kIGEgbXV0ZXgKLSAqIHNob3VsZCBwcm90ZWN0IHRoZSByZGJ4IGJldHdlZW4gdGhlc2UgY2FsbHMgaWYgbmVjZXNzYXJ5LgotICovCi0KLWlubGluZSBlcnJfc3RhdHVzX3QKLXJkYnhfYWRkX2luZGV4KHJkYnhfdCAqcmRieCwgaW50IGRlbHRhKTsKLQotLyoKLSAqIHh0ZF9zZXFfbnVtX3QgZnVuY3Rpb25zIC0gdGhlc2UgYXJlICppbnRlcm5hbCogZnVuY3Rpb25zIG9mIHJkYngsIGFuZAotICogc2hvdWxkbid0IGJlIHVzZWQgdG8gbWFuaXB1bGF0ZSByZGJ4IGludGVybmFsIHZhbHVlcy4gIHVzZSB0aGUgcmRieAotICogYXBpIGluc3RlYWQhCi0gKi8KLQotCi0vKiBpbmRleF9pbml0KCZwaSkgaW5pdGlhbGl6ZXMgYSBwYWNrZXQgaW5kZXggcGkgKHNldHMgaXQgdG8gemVybykgKi8KLQotdm9pZAotaW5kZXhfaW5pdCh4dGRfc2VxX251bV90ICpwaSk7Ci0KLS8qIGluZGV4X2FkdmFuY2UoJnBpLCBzKSBhZHZhbmNlcyBhIHh0ZF9zZXFfbnVtX3QgZm9yd2FyZCBieSBzICovCi0KLXZvaWQKLWluZGV4X2FkdmFuY2UoeHRkX3NlcV9udW1fdCAqcGksIHNlcXVlbmNlX251bWJlcl90IHMpOwotCi0KLS8qCi0gKiBpbmRleF9ndWVzcyhsb2NhbCwgZ3Vlc3MsIHMpCi0gKiAKLSAqIGdpdmVuIGEgeHRkX3NlcV9udW1fdCBsb2NhbCAod2hpY2ggcmVwcmVzZW50cyB0aGUgaGlnaGVzdAotICoga25vd24tdG8tYmUtZ29vZCBpbmRleCkgYW5kIGEgc2VxdWVuY2UgbnVtYmVyIHMgKGZyb20gYSBuZXdseQotICogYXJyaXZlZCBwYWNrZXQpLCBzZXRzIHRoZSBjb250ZW50cyBvZiAqZ3Vlc3MgdG8gY29udGFpbiB0aGUgYmVzdAotICogZ3Vlc3Mgb2YgdGhlIHBhY2tldCBpbmRleCB0byB3aGljaCBzIGNvcnJlc3BvbmRzLCBhbmQgcmV0dXJucyB0aGUKLSAqIGRpZmZlcmVuY2UgYmV0d2VlbiAqZ3Vlc3MgYW5kICpsb2NhbAotICovCi0KLWludAotaW5kZXhfZ3Vlc3MoY29uc3QgeHRkX3NlcV9udW1fdCAqbG9jYWwsCi0JCSAgIHh0ZF9zZXFfbnVtX3QgKmd1ZXNzLAotCQkgICBzZXF1ZW5jZV9udW1iZXJfdCBzKTsKLQotCi0jZW5kaWYgLyogUkRCWF9IICovCi0KLQotCi0KLQotCi0KLQotCmRpZmYgLS1naXQgYS9pbmNsdWRlL3J0cC5oIGIvaW5jbHVkZS9ydHAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhlZDNkNi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL3J0cC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLS8qCi0gKiBydHAuaAotICogCi0gKiBydHAgaW50ZXJmYWNlIGZvciBzcnRwIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbgotICoKLSAqIERhdmlkIEEuIE1jR3JldwotICogQ2lzY28gU3lzdGVtcywgSW5jLgotICoKLSAqIGRhdGEgdHlwZXM6Ci0gKgotICogcnRwX21zZ190ICAgICAgIGFuIHJ0cCBtZXNzYWdlICh0aGUgZGF0YSB0aGF0IGdvZXMgb24gdGhlIHdpcmUpCi0gKiBydHBfc2VuZGVyX3QgICAgc2VuZGVyIHNpZGUgc29ja2V0IGFuZCBydHAgaW5mbwotICogcnRwX3JlY2VpdmVyX3QgIHJlY2VpdmVyIHNpZGUgc29ja2V0IGFuZCBydHAgaW5mbwotICoKLSAqLwotCi0vKgotICoJCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSwgQ2lzY28gU3lzdGVtcywgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAKLSAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogCi0gKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICovCi0KLQotI2lmbmRlZiBSVFBfSAotI2RlZmluZSBSVFBfSAotCi0jaW5jbHVkZSAic3J0cC5oIiAgICAKLQotI2RlZmluZSBydHBfaGVhZGVyX2xlbiAxMgotCi10eXBlZGVmIHNydHBfaGRyX3QgcnRwX2hkcl90OwotCi0jZGVmaW5lIFJUUF9NQVhfQlVGX0xFTiAxNjM4NAotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIHNydHBfaGRyX3QgaGVhZGVyOyAgICAgICAgCi0gIGNoYXIgYm9keVtSVFBfTUFYX0JVRl9MRU5dOyAgCi19IHJ0cF9tc2dfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICBydHBfbXNnX3QgbWVzc2FnZTsgICAgICAgICAKLSAgaW50IHNvY2tldDsKLSAgc3J0cF9jdHhfdCAqc3J0cF9jdHg7Ci0gIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOyAgIC8qIHJlY2lldmVyJ3MgYWRkcmVzcyAqLwotfSBydHBfc2VuZGVyX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgcnRwX21zZ190IG1lc3NhZ2U7Ci0gIGludCBzb2NrZXQ7Ci0gIHNydHBfY3R4X3QgKnNydHBfY3R4OwotICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsgICAvKiByZWNlaXZlcidzIGFkZHJlc3MgKi8KLX0gcnRwX3JlY2VpdmVyX3Q7Ci0KLQotc3NpemVfdAotcnRwX3NlbmR0byhydHBfc2VuZGVyX3QgKnNlbmRlciwgY29uc3Qgdm9pZCogbXNnLCBpbnQgbGVuKTsKLQotc3NpemVfdAotcnRwX3JlY3Zmcm9tKHJ0cF9yZWNlaXZlcl90ICpyZWNlaXZlciwgdm9pZCAqbXNnLCBpbnQgKmxlbik7Ci0KLWludAotcnRwX3JlY2VpdmVyX2luaXQocnRwX3JlY2VpdmVyX3QgKnJjdnIsIGludCBzb2NrZXQsIAotCQkgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyLCB1aW50MzJfdCBzc3JjKTsKLQotaW50Ci1ydHBfc2VuZGVyX2luaXQocnRwX3NlbmRlcl90ICpzZW5kZXIsIGludCBzb2NrZXQsIAotCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkciwgdWludDMyX3Qgc3NyYyk7Ci0KLS8qCi0gKiBzcnRwX3NlbmRlcl9pbml0KC4uLikgaW5pdGlhbGl6ZXMgYW4gcnRwX3NlbmRlcl90Ci0gKgotICovCi0KLWludAotc3J0cF9zZW5kZXJfaW5pdChydHBfc2VuZGVyX3QgKnJ0cF9jdHgsICAgICAgICAgLyogc3RydWN0dXJlIHRvIGJlIGluaXQnZWQgKi8KLQkJIHN0cnVjdCBzb2NrYWRkcl9pbiBuYW1lLCAgICAgICAvKiBzb2NrZXQgbmFtZSAgICAgICAgICAgICAqLwotCQkgc2VjX3NlcnZfdCBzZWN1cml0eV9zZXJ2aWNlcywgIC8qIHNlYy4gc2VydnMuIHRvIGJlIHVzZWQgICovCi0JCSB1bnNpZ25lZCBjaGFyICppbnB1dF9rZXkgICAgICAgLyogbWFzdGVyIGtleS9zYWx0IGluIGhleCAgKi8KLQkJICk7Ci0KLWludAotc3J0cF9yZWNlaXZlcl9pbml0KHJ0cF9yZWNlaXZlcl90ICpydHBfY3R4LCAgICAgIC8qIHN0cnVjdHVyZSB0byBiZSBpbml0J2VkICovCi0JCSAgIHN0cnVjdCBzb2NrYWRkcl9pbiBuYW1lLCAJIC8qIHNvY2tldCBuYW1lICAgICAgICAgICAgICovCi0JCSAgIHNlY19zZXJ2X3Qgc2VjdXJpdHlfc2VydmljZXMsIC8qIHNlYy4gc2VydnMuIHRvIGJlIHVzZWQgICovCi0JCSAgIHVuc2lnbmVkIGNoYXIgKmlucHV0X2tleQkgLyogbWFzdGVyIGtleS9zYWx0IGluIGhleCAgKi8KLQkJICAgKTsKLQotCi0jZW5kaWYgLyogUlRQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc3J0cC5oIGIvaW5jbHVkZS9zcnRwLmgKaW5kZXggMmNjYjU1My4uYzg2YjllZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zcnRwLmgKKysrIGIvaW5jbHVkZS9zcnRwLmgKQEAgLTcsMjYgKzcsMjYgQEAKICAqIENpc2NvIFN5c3RlbXMsIEluYy4KICAqLwogLyoKLSAqCQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUsIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxNywgQ2lzY28gU3lzdGVtcywgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAorICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgotICogCisgKgogICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKICAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKICAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCiAgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAorICoKICAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKICAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCkBAIC00MiwxNCArNDIsMTQgQEAKICAqCiAgKi8KIAorI2lmbmRlZiBTUlRQX1NSVFBfSAorI2RlZmluZSBTUlRQX1NSVFBfSAogCi0jaWZuZGVmIFNSVFBfSAotI2RlZmluZSBTUlRQX0gKKyNpbmNsdWRlIDxzdGRpbnQuaD4KIAotI2luY2x1ZGUgImNyeXB0b19rZXJuZWwuaCIKLSNpbmNsdWRlICJyZGJ4LmgiCi0jaW5jbHVkZSAicmRiLmgiCi0jaW5jbHVkZSAiaW50ZWdlcnMuaCIKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKIAogLyoqCiAgKiBAZGVmZ3JvdXAgU1JUUCBTZWN1cmUgUlRQCkBAIC02OSwxMDYgKzY5LDIzMSBAQAogLyoKICAqIFNSVFBfTUFYX0tFWV9MRU4gaXMgdGhlIG1heGltdW0ga2V5IGxlbmd0aCBzdXBwb3J0ZWQgYnkgbGliU1JUUAogICovCi0jZGVmaW5lIFNSVFBfTUFYX0tFWV9MRU4gICAgICA2NAorI2RlZmluZSBTUlRQX01BWF9LRVlfTEVOIDY0CiAKIC8qCiAgKiBTUlRQX01BWF9UQUdfTEVOIGlzIHRoZSBtYXhpbXVtIHRhZyBsZW5ndGggc3VwcG9ydGVkIGJ5IGxpYlNSVFAKICAqLwogCi0jZGVmaW5lIFNSVFBfTUFYX1RBR19MRU4gMTIgCisjZGVmaW5lIFNSVFBfTUFYX1RBR19MRU4gMTYKKworLyoqCisgKiBTUlRQX01BWF9NS0lfTEVOIGlzIHRoZSBtYXhpbXVtIHNpemUgdGhlIE1LSSBjb3VsZCBiZSB3aGljaCBpcworICogMTI4IGJ5dGVzCisgKi8KKyNkZWZpbmUgU1JUUF9NQVhfTUtJX0xFTiAxMjgKIAogLyoqCiAgKiBTUlRQX01BWF9UUkFJTEVSX0xFTiBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIFNSVFAgdHJhaWxlcgogICogKGF1dGhlbnRpY2F0aW9uIHRhZyBhbmQgTUtJKSBzdXBwb3J0ZWQgYnkgbGliU1JUUC4gIFRoaXMgdmFsdWUgaXMKLSAqIHRoZSBtYXhpbXVtIG51bWJlciBvZiBvY3RldHMgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIGFuIFJUUCBwYWNrZXQgYnkKKyAqIHRoZSBtYWl4bXVtIG51bWJlciBvZiBvY3RldHMgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIGFuIFJUUCBwYWNrZXQgYnkKICAqIHNydHBfcHJvdGVjdCgpLgogICoKICAqIEBicmllZiB0aGUgbWF4aW11bSBudW1iZXIgb2Ygb2N0ZXRzIGFkZGVkIGJ5IHNydHBfcHJvdGVjdCgpLgogICovCi0jZGVmaW5lIFNSVFBfTUFYX1RSQUlMRVJfTEVOIFNSVFBfTUFYX1RBR19MRU4gCi0KLS8qIAotICogbm90YSBiZW5lOiBzaW5jZSBsaWJTUlRQIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgdXNlIG9mIHRoZSBNS0ksIHRoZQotICogU1JUUF9NQVhfVFJBSUxFUl9MRU4gdmFsdWUgaXMganVzdCB0aGUgbWF4aW11bSB0YWcgbGVuZ3RoCi0gKi8KKyNkZWZpbmUgU1JUUF9NQVhfVFJBSUxFUl9MRU4gKFNSVFBfTUFYX1RBR19MRU4gKyBTUlRQX01BWF9NS0lfTEVOKQogCiAvKioKLSAqIEBicmllZiBzZWNfc2Vydl90IGRlc2NyaWJlcyBhIHNldCBvZiBzZWN1cml0eSBzZXJ2aWNlcy4gCisgKiBTUlRQX01BWF9OVU1fTUFTVEVSX0tFWVMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIE1hc3RlciBrZXlzIGZvcgorICogTUtJIHN1cHBvcnRlZCBieSBsaWJTUlRQLgogICoKLSAqIEEgc2VjX3NlcnZfdCBlbnVtZXJhdGlvbiBpcyB1c2VkIHRvIGRlc2NyaWJlIHRoZSBwYXJ0aWN1bGFyCi0gKiBzZWN1cml0eSBzZXJ2aWNlcyB0aGF0IHdpbGwgYmUgYXBwbGllZCBieSBhIHBhcnRpY3VsYXIgY3J5cHRvCi0gKiBwb2xpY3kgKG9yIG90aGVyIG1lY2hhbmlzbSkuICAKICAqLworI2RlZmluZSBTUlRQX01BWF9OVU1fTUFTVEVSX0tFWVMgMTYKIAorI2RlZmluZSBTUlRQX1NBTFRfTEVOIDE0CisKKy8qCisgKiBTUlRQX0FFQURfU0FMVF9MRU4gaXMgdGhlIGxlbmd0aCBvZiB0aGUgU0FMVCB2YWx1ZXMgdXNlZCB3aXRoCisgKiBHQ00gbW9kZS4gIEdDTSBtb2RlIHJlcXVpcmVzIGFuIElWLiAgVGhlIFNBTFQgdmFsdWUgaXMgdXNlZAorICogYXMgcGFydCBvZiB0aGUgSVYgZm9ybWF0aW9uIGxvZ2ljIGFwcGxpZWQgdG8gZWFjaCBSVFAgcGFja2V0LgorICovCisjZGVmaW5lIFNSVFBfQUVBRF9TQUxUX0xFTiAxMgorCisjZGVmaW5lIFNSVFBfQUVTXzEyOF9LRVlfTEVOIDE2CisjZGVmaW5lIFNSVFBfQUVTXzE5Ml9LRVlfTEVOIDI0CisjZGVmaW5lIFNSVFBfQUVTXzI1Nl9LRVlfTEVOIDMyCisKKyNkZWZpbmUgU1JUUF9BRVNfSUNNXzEyOF9LRVlfTEVOX1dTQUxUIChTUlRQX1NBTFRfTEVOICsgU1JUUF9BRVNfMTI4X0tFWV9MRU4pCisjZGVmaW5lIFNSVFBfQUVTX0lDTV8xOTJfS0VZX0xFTl9XU0FMVCAoU1JUUF9TQUxUX0xFTiArIFNSVFBfQUVTXzE5Ml9LRVlfTEVOKQorI2RlZmluZSBTUlRQX0FFU19JQ01fMjU2X0tFWV9MRU5fV1NBTFQgKFNSVFBfU0FMVF9MRU4gKyBTUlRQX0FFU18yNTZfS0VZX0xFTikKKworI2RlZmluZSBTUlRQX0FFU19HQ01fMTI4X0tFWV9MRU5fV1NBTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoU1JUUF9BRUFEX1NBTFRfTEVOICsgU1JUUF9BRVNfMTI4X0tFWV9MRU4pCisjZGVmaW5lIFNSVFBfQUVTX0dDTV8xOTJfS0VZX0xFTl9XU0FMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChTUlRQX0FFQURfU0FMVF9MRU4gKyBTUlRQX0FFU18xOTJfS0VZX0xFTikKKyNkZWZpbmUgU1JUUF9BRVNfR0NNXzI1Nl9LRVlfTEVOX1dTQUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKFNSVFBfQUVBRF9TQUxUX0xFTiArIFNSVFBfQUVTXzI1Nl9LRVlfTEVOKQorCisvKioKKyAqICBAYnJpZWYgQSBzcnRwX2NpcGhlcl90eXBlX2lkX3QgaXMgYW4gaWRlbnRpZmllciBmb3IgYSBwYXJ0aWN1bGFyIGNpcGhlcgorICogIHR5cGUuCisgKgorICogIEEgc3J0cF9jaXBoZXJfdHlwZV9pZF90IGlzIGFuIGludGVnZXIgdGhhdCByZXByZXNlbnRzIGEgcGFydGljdWxhcgorICogIGNpcGhlciB0eXBlLCBlLmcuIHRoZSBBZHZhbmNlZCBFbmNyeXB0aW9uIFN0YW5kYXJkIChBRVMpLiAgQQorICogIFNSVFBfTlVMTF9DSVBIRVIgaXMgYXZhbGlhYmxlOyB0aGlzIGNpcGhlciBsZWF2ZXMgdGhlIGRhdGEgdW5jaGFuZ2VkLAorICogIGFuZCBjYW4gYmUgc2VsZWN0ZWQgdG8gaW5kaWNhdGUgdGhhdCBubyBlbmNyeXB0aW9uIGlzIHRvIHRha2UKKyAqICBwbGFjZS4KKyAqCisgKiAgQGluZ3JvdXAgQ2lwaGVycworICovCit0eXBlZGVmIHVpbnQzMl90IHNydHBfY2lwaGVyX3R5cGVfaWRfdDsKKworLyoqCisgKiAgQGJyaWVmIEFuIHNydHBfYXV0aF90eXBlX2lkX3QgaXMgYW4gaWRlbnRpZmllciBmb3IgYSBwYXJ0aWN1bGFyCisgKiBhdXRoZW50aWNhdGlvbgorICogICBmdW5jdGlvbi4KKyAqCisgKiAgQW4gc3J0cF9hdXRoX3R5cGVfaWRfdCBpcyBhbiBpbnRlZ2VyIHRoYXQgcmVwcmVzZW50cyBhIHBhcnRpY3VsYXIKKyAqICBhdXRoZW50aWNhdGlvbiBmdW5jdGlvbiB0eXBlLCBlLmcuIEhNQUMtU0hBMS4gIEEgU1JUUF9OVUxMX0FVVEggaXMKKyAqICBhdmFsaWFibGU7IHRoaXMgYXV0aGVudGljYXRpb24gZnVuY3Rpb24gcGVyZm9ybXMgbm8gY29tcHV0YXRpb24sCisgKiAgYW5kIGNhbiBiZSBzZWxlY3RlZCB0byBpbmRpY2F0ZSB0aGF0IG5vIGF1dGhlbnRpY2F0aW9uIGlzIHRvIHRha2UKKyAqICBwbGFjZS4KKyAqCisgKiAgQGluZ3JvdXAgQXV0aGVudGljYXRpb24KKyAqLwordHlwZWRlZiB1aW50MzJfdCBzcnRwX2F1dGhfdHlwZV9pZF90OworCisvKioKKyAqIEBicmllZiBzcnRwX2Vycl9zdGF0dXNfdCBkZWZpbmVzIGVycm9yIGNvZGVzLgorICoKKyAqIFRoZSBlbnVtZXJhdGlvbiBzcnRwX2Vycl9zdGF0dXNfdCBkZWZpbmVzIGVycm9yIGNvZGVzLiAgTm90ZSB0aGF0IHRoZQorICogdmFsdWUgb2Ygc3J0cF9lcnJfc3RhdHVzX29rIGlzIGVxdWFsIHRvIHplcm8sIHdoaWNoIGNhbiBzaW1wbGlmeSBlcnJvcgorICogY2hlY2tpbmcgc29tZXdoYXQuCisgKgorICovCiB0eXBlZGVmIGVudW0gewotICBzZWNfc2Vydl9ub25lICAgICAgICAgID0gMCwgLyoqPCBubyBzZXJ2aWNlcyAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHNlY19zZXJ2X2NvbmYgICAgICAgICAgPSAxLCAvKio8IGNvbmZpZGVudGlhbGl0eSAgICAgICAgICAgICAgICAgICAgKi8KLSAgc2VjX3NlcnZfYXV0aCAgICAgICAgICA9IDIsIC8qKjwgYXV0aGVudGljYXRpb24gICAgICAgICAgICAgICAgICAgICAqLwotICBzZWNfc2Vydl9jb25mX2FuZF9hdXRoID0gMyAgLyoqPCBjb25maWRlbnRpYWxpdHkgYW5kIGF1dGhlbnRpY2F0aW9uICovCi19IHNlY19zZXJ2X3Q7CisgICAgc3J0cF9lcnJfc3RhdHVzX29rID0gMCwgICAgICAgICAgICAgLyoqPCBub3RoaW5nIHRvIHJlcG9ydCAgICAgICAgICAgICAgICovCisgICAgc3J0cF9lcnJfc3RhdHVzX2ZhaWwgPSAxLCAgICAgICAgICAgLyoqPCB1bnNwZWNpZmllZCBmYWlsdXJlICAgICAgICAgICAgICovCisgICAgc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbSA9IDIsICAgICAgLyoqPCB1bnN1cHBvcnRlZCBwYXJhbWV0ZXIgICAgICAgICAgICovCisgICAgc3J0cF9lcnJfc3RhdHVzX2FsbG9jX2ZhaWwgPSAzLCAgICAgLyoqPCBjb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgICAgICAgICovCisgICAgc3J0cF9lcnJfc3RhdHVzX2RlYWxsb2NfZmFpbCA9IDQsICAgLyoqPCBjb3VsZG4ndCBkZWFsbG9jYXRlIHByb3Blcmx5ICAgICovCisgICAgc3J0cF9lcnJfc3RhdHVzX2luaXRfZmFpbCA9IDUsICAgICAgLyoqPCBjb3VsZG4ndCBpbml0aWFsaXplICAgICAgICAgICAgICovCisgICAgc3J0cF9lcnJfc3RhdHVzX3Rlcm1pbnVzID0gNiwgICAgICAgLyoqPCBjYW4ndCBwcm9jZXNzIGFzIG11Y2ggZGF0YSBhcyAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCByZXF1ZXN0ZWQgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgc3J0cF9lcnJfc3RhdHVzX2F1dGhfZmFpbCA9IDcsICAgICAgLyoqPCBhdXRoZW50aWNhdGlvbiBmYWlsdXJlICAgICAgICAgICovCisgICAgc3J0cF9lcnJfc3RhdHVzX2NpcGhlcl9mYWlsID0gOCwgICAgLyoqPCBjaXBoZXIgZmFpbHVyZSAgICAgICAgICAgICAgICAgICovCisgICAgc3J0cF9lcnJfc3RhdHVzX3JlcGxheV9mYWlsID0gOSwgICAgLyoqPCByZXBsYXkgY2hlY2sgZmFpbGVkIChiYWQgaW5kZXgpICovCisgICAgc3J0cF9lcnJfc3RhdHVzX3JlcGxheV9vbGQgPSAxMCwgICAgLyoqPCByZXBsYXkgY2hlY2sgZmFpbGVkIChpbmRleCB0b28gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBvbGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgc3J0cF9lcnJfc3RhdHVzX2FsZ29fZmFpbCA9IDExLCAgICAgLyoqPCBhbGdvcml0aG0gZmFpbGVkIHRlc3Qgcm91dGluZSAgICovCisgICAgc3J0cF9lcnJfc3RhdHVzX25vX3N1Y2hfb3AgPSAxMiwgICAgLyoqPCB1bnN1cHBvcnRlZCBvcGVyYXRpb24gICAgICAgICAgICovCisgICAgc3J0cF9lcnJfc3RhdHVzX25vX2N0eCA9IDEzLCAgICAgICAgLyoqPCBubyBhcHByb3ByaWF0ZSBjb250ZXh0IGZvdW5kICAgICovCisgICAgc3J0cF9lcnJfc3RhdHVzX2NhbnRfY2hlY2sgPSAxNCwgICAgLyoqPCB1bmFibGUgdG8gcGVyZm9ybSBkZXNpcmVkICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCB2YWxpZGF0aW9uICAgICAgICAgICAgICAgICAgICAgICovCisgICAgc3J0cF9lcnJfc3RhdHVzX2tleV9leHBpcmVkID0gMTUsICAgLyoqPCBjYW4ndCB1c2Uga2V5IGFueSBtb3JlICAgICAgICAgICovCisgICAgc3J0cF9lcnJfc3RhdHVzX3NvY2tldF9lcnIgPSAxNiwgICAgLyoqPCBlcnJvciBpbiB1c2Ugb2Ygc29ja2V0ICAgICAgICAgICovCisgICAgc3J0cF9lcnJfc3RhdHVzX3NpZ25hbF9lcnIgPSAxNywgICAgLyoqPCBlcnJvciBpbiB1c2UgUE9TSVggc2lnbmFscyAgICAgICovCisgICAgc3J0cF9lcnJfc3RhdHVzX25vbmNlX2JhZCA9IDE4LCAgICAgLyoqPCBub25jZSBjaGVjayBmYWlsZWQgICAgICAgICAgICAgICovCisgICAgc3J0cF9lcnJfc3RhdHVzX3JlYWRfZmFpbCA9IDE5LCAgICAgLyoqPCBjb3VsZG4ndCByZWFkIGRhdGEgICAgICAgICAgICAgICovCisgICAgc3J0cF9lcnJfc3RhdHVzX3dyaXRlX2ZhaWwgPSAyMCwgICAgLyoqPCBjb3VsZG4ndCB3cml0ZSBkYXRhICAgICAgICAgICAgICovCisgICAgc3J0cF9lcnJfc3RhdHVzX3BhcnNlX2VyciA9IDIxLCAgICAgLyoqPCBlcnJvciBwYXJzaW5nIGRhdGEgICAgICAgICAgICAgICovCisgICAgc3J0cF9lcnJfc3RhdHVzX2VuY29kZV9lcnIgPSAyMiwgICAgLyoqPCBlcnJvciBlbmNvZGluZyBkYXRhICAgICAgICAgICAgICovCisgICAgc3J0cF9lcnJfc3RhdHVzX3NlbWFwaG9yZV9lcnIgPSAyMywgLyoqPCBlcnJvciB3aGlsZSB1c2luZyBzZW1hcGhvcmVzICAgICovCisgICAgc3J0cF9lcnJfc3RhdHVzX3Bma2V5X2VyciA9IDI0LCAgICAgLyoqPCBlcnJvciB3aGlsZSB1c2luZyBwZmtleSAgICAgICAgICovCisgICAgc3J0cF9lcnJfc3RhdHVzX2JhZF9ta2kgPSAyNSwgICAgICAgLyoqPCBlcnJvciBNS0kgcHJlc2VudCBpbiBwYWNrZXQgaXMgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBpbnZhbGlkICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgc3J0cF9lcnJfc3RhdHVzX3BrdF9pZHhfb2xkID0gMjYsICAgLyoqPCBwYWNrZXQgaW5kZXggaXMgdG9vIG9sZCB0byAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBjb25zaWRlciAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgc3J0cF9lcnJfc3RhdHVzX3BrdF9pZHhfYWR2ID0gMjcgICAgLyoqPCBwYWNrZXQgaW5kZXggYWR2YW5jZWQsIHJlc2V0ICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBuZWVkZWQgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IHNydHBfZXJyX3N0YXR1c190OwogCi0vKiogCi0gKiBAYnJpZWYgY3J5cHRvX3BvbGljeV90IGRlc2NyaWJlcyBhIHBhcnRpY3VsYXIgY3J5cHRvIHBvbGljeSB0aGF0Cit0eXBlZGVmIHN0cnVjdCBzcnRwX2N0eF90XyBzcnRwX2N0eF90OworCisvKioKKyAqIEBicmllZiBzcnRwX3NlY19zZXJ2X3QgZGVzY3JpYmVzIGEgc2V0IG9mIHNlY3VyaXR5IHNlcnZpY2VzLgorICoKKyAqIEEgc3J0cF9zZWNfc2Vydl90IGVudW1lcmF0aW9uIGlzIHVzZWQgdG8gZGVzY3JpYmUgdGhlIHBhcnRpY3VsYXIKKyAqIHNlY3VyaXR5IHNlcnZpY2VzIHRoYXQgd2lsbCBiZSBhcHBsaWVkIGJ5IGEgcGFydGljdWxhciBjcnlwdG8KKyAqIHBvbGljeSAob3Igb3RoZXIgbWVjaGFuaXNtKS4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBzZWNfc2Vydl9ub25lID0gMCwgICAgICAgICAvKio8IG5vIHNlcnZpY2VzICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBzZWNfc2Vydl9jb25mID0gMSwgICAgICAgICAvKio8IGNvbmZpZGVudGlhbGl0eSAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBzZWNfc2Vydl9hdXRoID0gMiwgICAgICAgICAvKio8IGF1dGhlbnRpY2F0aW9uICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBzZWNfc2Vydl9jb25mX2FuZF9hdXRoID0gMyAvKio8IGNvbmZpZGVudGlhbGl0eSBhbmQgYXV0aGVudGljYXRpb24gKi8KK30gc3J0cF9zZWNfc2Vydl90OworCisvKioKKyAqIEBicmllZiBzcnRwX2NyeXB0b19wb2xpY3lfdCBkZXNjcmliZXMgYSBwYXJ0aWN1bGFyIGNyeXB0byBwb2xpY3kgdGhhdAogICogY2FuIGJlIGFwcGxpZWQgdG8gYW4gU1JUUCBzdHJlYW0uCiAgKgotICogQSBjcnlwdG9fcG9saWN5X3QgZGVzY3JpYmVzIGEgcGFydGljdWxhciBjcnlwdG9ncmFwaGljIHBvbGljeSB0aGF0CisgKiBBIHNydHBfY3J5cHRvX3BvbGljeV90IGRlc2NyaWJlcyBhIHBhcnRpY3VsYXIgY3J5cHRvZ3JhcGhpYyBwb2xpY3kgdGhhdAogICogY2FuIGJlIGFwcGxpZWQgdG8gYW4gU1JUUCBvciBTUlRDUCBzdHJlYW0uICBBbiBTUlRQIHNlc3Npb24gcG9saWN5Ci0gKiBjb25zaXN0cyBvZiBhIGxpc3Qgb2YgdGhlc2UgcG9saWNpZXMsIG9uZSBmb3IgZWFjaCBTUlRQIHN0cmVhbSAKKyAqIGNvbnNpc3RzIG9mIGEgbGlzdCBvZiB0aGVzZSBwb2xpY2llcywgb25lIGZvciBlYWNoIFNSVFAgc3RyZWFtCiAgKiBpbiB0aGUgc2Vzc2lvbi4KICAqLwotCi10eXBlZGVmIHN0cnVjdCBjcnlwdG9fcG9saWN5X3QgewotICBjaXBoZXJfdHlwZV9pZF90IGNpcGhlcl90eXBlOyAgICAvKio8IEFuIGludGVnZXIgcmVwcmVzZW50aW5nCi0JCQkJICAgICogICB0aGUgdHlwZSBvZiBjaXBoZXIuICAqLwotICBpbnQgICAgICAgICAgICAgIGNpcGhlcl9rZXlfbGVuOyAvKio8IFRoZSBsZW5ndGggb2YgdGhlIGNpcGhlciBrZXkKLQkJCQkgICAgKiAgIGluIG9jdGV0cy4gICAgICAgICAgICAgICAgICAgICAgICovCi0gIGF1dGhfdHlwZV9pZF90ICAgYXV0aF90eXBlOyAgICAgIC8qKjwgQW4gaW50ZWdlciByZXByZXNlbnRpbmcgdGhlCi0JCQkJICAgICogICBhdXRoZW50aWNhdGlvbiBmdW5jdGlvbi4gICAgICAgICAqLwotICBpbnQgICAgICAgICAgICAgIGF1dGhfa2V5X2xlbjsgICAvKio8IFRoZSBsZW5ndGggb2YgdGhlIGF1dGhlbnRpY2F0aW9uIAotCQkJCSAgICAqICAgZnVuY3Rpb24ga2V5IGluIG9jdGV0cy4gICAgICAgICAgKi8KLSAgaW50ICAgICAgICAgICAgICBhdXRoX3RhZ19sZW47ICAgLyoqPCBUaGUgbGVuZ3RoIG9mIHRoZSBhdXRoZW50aWNhdGlvbiAKLQkJCQkgICAgKiAgIHRhZyBpbiBvY3RldHMuICAgICAgICAgICAgICAgICAgICovCi0gIHNlY19zZXJ2X3QgICAgICAgc2VjX3NlcnY7ICAgICAgIC8qKjwgVGhlIGZsYWcgaW5kaWNhdGluZyB0aGUgc2VjdXJpdHkKLQkJCQkgICAgKiAgIHNlcnZpY2VzIHRvIGJlIGFwcGxpZWQuICAgICAgICAgICovCi19IGNyeXB0b19wb2xpY3lfdDsKLQotCi0vKiogCi0gKiBAYnJpZWYgc3NyY190eXBlX3QgZGVzY3JpYmVzIHRoZSB0eXBlIG9mIGFuIFNTUkMuCi0gKiAKLSAqIEFuIHNzcmNfdHlwZV90IGVudW1lcmF0aW9uIGlzIHVzZWQgdG8gaW5kaWNhdGUgYSB0eXBlIG9mIFNTUkMuICBTZWUKLSAqIEByZWYgc3J0cF9wb2xpY3lfdCBmb3IgbW9yZSBpbmZvcm1hdGFpb24uCi0gKi8KLQotdHlwZWRlZiBlbnVtIHsgCi0gIHNzcmNfdW5kZWZpbmVkICAgID0gMCwgIC8qKjwgSW5kaWNhdGVzIGFuIHVuZGVmaW5lZCBTU1JDIHR5cGUuICovCi0gIHNzcmNfc3BlY2lmaWMgICAgID0gMSwgIC8qKjwgSW5kaWNhdGVzIGEgc3BlY2lmaWMgU1NSQyB2YWx1ZSAgICovCi0gIHNzcmNfYW55X2luYm91bmQgID0gMiwgLyoqPCBJbmRpY2F0ZXMgYW55IGluYm91bmQgU1NSQyB2YWx1ZSAKLQkJCSAgICAoaS5lLiBhIHZhbHVlIHRoYXQgaXMgdXNlZCBpbiB0aGUKLQkJCSAgICBmdW5jdGlvbiBzcnRwX3VucHJvdGVjdCgpKSAgICAgICAgICAgICAgKi8KLSAgc3NyY19hbnlfb3V0Ym91bmQgPSAzICAvKio8IEluZGljYXRlcyBhbnkgb3V0Ym91bmQgU1NSQyB2YWx1ZSAKLQkJCSAgICAoaS5lLiBhIHZhbHVlIHRoYXQgaXMgdXNlZCBpbiB0aGUgCi0JCQkgICAgZnVuY3Rpb24gc3J0cF9wcm90ZWN0KCkpCQkgICovCi19IHNzcmNfdHlwZV90OwordHlwZWRlZiBzdHJ1Y3Qgc3J0cF9jcnlwdG9fcG9saWN5X3QgeworICAgIHNydHBfY2lwaGVyX3R5cGVfaWRfdCBjaXBoZXJfdHlwZTsgLyoqPCBBbiBpbnRlZ2VyIHJlcHJlc2VudGluZyAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCB0aGUgdHlwZSBvZiBjaXBoZXIuICAgICAgICAgICAgICAqLworICAgIGludCBjaXBoZXJfa2V5X2xlbjsgICAgICAgICAgICAgICAgLyoqPCBUaGUgbGVuZ3RoIG9mIHRoZSBjaXBoZXIga2V5ICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBpbiBvY3RldHMuICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHNydHBfYXV0aF90eXBlX2lkX3QgYXV0aF90eXBlOyAgICAgLyoqPCBBbiBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBhdXRoZW50aWNhdGlvbiBmdW5jdGlvbi4gICAgICAgICAqLworICAgIGludCBhdXRoX2tleV9sZW47ICAgICAgICAgICAgICAgICAgLyoqPCBUaGUgbGVuZ3RoIG9mIHRoZSBhdXRoZW50aWNhdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBmdW5jdGlvbiBrZXkgaW4gb2N0ZXRzLiAgICAgICAgICAqLworICAgIGludCBhdXRoX3RhZ19sZW47ICAgICAgICAgICAgICAgICAgLyoqPCBUaGUgbGVuZ3RoIG9mIHRoZSBhdXRoZW50aWNhdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCB0YWcgaW4gb2N0ZXRzLiAgICAgICAgICAgICAgICAgICAqLworICAgIHNydHBfc2VjX3NlcnZfdCBzZWNfc2VydjsgICAgICAgICAgLyoqPCBUaGUgZmxhZyBpbmRpY2F0aW5nIHRoZSBzZWN1cml0eSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBzZXJ2aWNlcyB0byBiZSBhcHBsaWVkLiAgICAgICAgICAqLworfSBzcnRwX2NyeXB0b19wb2xpY3lfdDsKIAogLyoqCi0gKiBAYnJpZWYgQW4gc3NyY190IHJlcHJlc2VudHMgYSBwYXJ0aWN1bGFyIFNTUkMgdmFsdWUsIG9yIGEgYHdpbGRjYXJkJyBTU1JDLgotICogCi0gKiBBbiBzc3JjX3QgcmVwcmVzZW50cyBhIHBhcnRpY3VsYXIgU1NSQyB2YWx1ZSAoaWYgaXRzIHR5cGUgaXMKKyAqIEBicmllZiBzcnRwX3NzcmNfdHlwZV90IGRlc2NyaWJlcyB0aGUgdHlwZSBvZiBhbiBTU1JDLgorICoKKyAqIEFuIHNydHBfc3NyY190eXBlX3QgZW51bWVyYXRpb24gaXMgdXNlZCB0byBpbmRpY2F0ZSBhIHR5cGUgb2YgU1NSQy4gIFNlZQorICogQHJlZiBzcnRwX3BvbGljeV90IGZvciBtb3JlIGluZm9ybWF0YWlvbi4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBzc3JjX3VuZGVmaW5lZCA9IDAsICAgLyoqPCBJbmRpY2F0ZXMgYW4gdW5kZWZpbmVkIFNTUkMgdHlwZS4gICAgKi8KKyAgICBzc3JjX3NwZWNpZmljID0gMSwgICAgLyoqPCBJbmRpY2F0ZXMgYSBzcGVjaWZpYyBTU1JDIHZhbHVlICAgICAgKi8KKyAgICBzc3JjX2FueV9pbmJvdW5kID0gMiwgLyoqPCBJbmRpY2F0ZXMgYW55IGluYm91bmQgU1NSQyB2YWx1ZSAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCAoaS5lLiBhIHZhbHVlIHRoYXQgaXMgdXNlZCBpbiB0aGUgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBmdW5jdGlvbiBzcnRwX3VucHJvdGVjdCgpKSAgICAgICAgICAgKi8KKyAgICBzc3JjX2FueV9vdXRib3VuZCA9IDMgLyoqPCBJbmRpY2F0ZXMgYW55IG91dGJvdW5kIFNTUkMgdmFsdWUgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCAoaS5lLiBhIHZhbHVlIHRoYXQgaXMgdXNlZCBpbiB0aGUgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBmdW5jdGlvbiBzcnRwX3Byb3RlY3QoKSkgICAgICAgICAgICAgKi8KK30gc3J0cF9zc3JjX3R5cGVfdDsKKworLyoqCisgKiBAYnJpZWYgQW4gc3J0cF9zc3JjX3QgcmVwcmVzZW50cyBhIHBhcnRpY3VsYXIgU1NSQyB2YWx1ZSwgb3IgYSBgd2lsZGNhcmQnCisgKiBTU1JDLgorICoKKyAqIEFuIHNydHBfc3NyY190IHJlcHJlc2VudHMgYSBwYXJ0aWN1bGFyIFNTUkMgdmFsdWUgKGlmIGl0cyB0eXBlIGlzCiAgKiBzc3JjX3NwZWNpZmljKSwgb3IgYSB3aWxkY2FyZCBTU1JDIHZhbHVlIHRoYXQgd2lsbCBtYXRjaCBhbGwKICAqIG91dGJvdW5kIFNTUkNzIChpZiBpdHMgdHlwZSBpcyBzc3JjX2FueV9vdXRib3VuZCkgb3IgYWxsIGluYm91bmQKLSAqIFNTUkNzIChpZiBpdHMgdHlwZSBpcyBzc3JjX2FueV9pbmJvdW5kKS4gIAotICoKKyAqIFNTUkNzIChpZiBpdHMgdHlwZSBpcyBzc3JjX2FueV9pbmJvdW5kKS4KICAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHNydHBfc3NyY190eXBlX3QgdHlwZTsgLyoqPCBUaGUgdHlwZSBvZiB0aGlzIHBhcnRpY3VsYXIgU1NSQyAqLworICAgIHVuc2lnbmVkIGludCB2YWx1ZTsgICAgLyoqPCBUaGUgdmFsdWUgb2YgdGhpcyBTU1JDLCBpZiBpdCBpcyBub3QgYSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCB3aWxkY2FyZCAqLworfSBzcnRwX3NzcmNfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgeyAKLSAgc3NyY190eXBlX3QgdHlwZTsgICAvKio8IFRoZSB0eXBlIG9mIHRoaXMgcGFydGljdWxhciBTU1JDICovCi0gIHVpbnQzMl90IHZhbHVlOyAgICAgLyoqPCBUaGUgdmFsdWUgb2YgdGhpcyBTU1JDLCBpZiBpdCBpcyBub3QgYSB3aWxkY2FyZCAqLwotfSBzc3JjX3Q7CisvKioKKyAqIEBicmllZiBwb2ludHMgdG8gYW4gRUtUIHBvbGljeQorICovCit0eXBlZGVmIHN0cnVjdCBzcnRwX2VrdF9wb2xpY3lfY3R4X3QgKnNydHBfZWt0X3BvbGljeV90OwogCisvKioKKyAqIEBicmllZiBwb2ludHMgdG8gRUtUIHN0cmVhbSBkYXRhCisgKi8KK3R5cGVkZWYgc3RydWN0IHNydHBfZWt0X3N0cmVhbV9jdHhfdCAqc3J0cF9la3Rfc3RyZWFtX3Q7CiAKLS8qKiAKLSAqIEBicmllZiByZXByZXNlbnRzIHRoZSBwb2xpY3kgZm9yIGFuIFNSVFAgc2Vzc2lvbi4gIAorLyoqCisgKiBAYnJpZWYgc3J0cF9tYXN0ZXJfa2V5X3QgcmVwcmVzZW50cyBhIG1hc3RlciBrZXkuICBUaGVyZSB3aWxsCisgKiBiZSBhIE1hc3RlciBLZXkgSW5kZXggYW5kIHRoZSBNYXN0ZXIgS2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAqIE1hc3RlciBLZXkgSW5kZXguICBOZWVkIHRvIGFsc28ga2VlcCB0cmFjayBvZiB0aGUgTWFzdGVyIEtleQorICogSW5kZXggU2l6ZSB0byBjb3JyZWN0bHkgcmVhZCBpdCBmcm9tIGEgcGFja2V0LgorICovCit0eXBlZGVmIHN0cnVjdCBzcnRwX21hc3Rlcl9rZXlfdCB7CisgICAgdW5zaWduZWQgY2hhciAqa2V5OworICAgIHVuc2lnbmVkIGNoYXIgKm1raV9pZDsKKyAgICB1bnNpZ25lZCBpbnQgbWtpX3NpemU7Cit9IHNydHBfbWFzdGVyX2tleV90OworCisvKioKKyAqIEBicmllZiByZXByZXNlbnRzIHRoZSBwb2xpY3kgZm9yIGFuIFNSVFAgc2Vzc2lvbi4KICAqCiAgKiBBIHNpbmdsZSBzcnRwX3BvbGljeV90IHN0cnVjdCByZXByZXNlbnRzIHRoZSBwb2xpY3kgZm9yIGEgc2luZ2xlCiAgKiBTUlRQIHN0cmVhbSwgYW5kIGEgbGlua2VkIGxpc3Qgb2YgdGhlc2UgZWxlbWVudHMgcmVwcmVzZW50cyB0aGUKQEAgLTE3Nyw3ICszMDIsNyBAQAogICogbWFzdGVyIGtleSBmb3IgdGhhdCBzdHJlYW0sIHRoZSBTU1JDIGRlc2NyaWJpbmcgdGhhdCBzdHJlYW0sIG9yIGEKICAqIGZsYWcgaW5kaWNhdGluZyBhIGB3aWxkY2FyZCcgU1NSQyB2YWx1ZSwgYW5kIGEgYG5leHQnIGZpZWxkIHRoYXQKICAqIGhvbGRzIGEgcG9pbnRlciB0byB0aGUgbmV4dCBlbGVtZW50IGluIHRoZSBsaXN0IG9mIHBvbGljeSBlbGVtZW50cywKLSAqIG9yIE5VTEwgaWYgaXQgaXMgdGhlIGxhc3QgZWxlbWVudC4gCisgKiBvciBOVUxMIGlmIGl0IGlzIHRoZSBsYXN0IGVsZW1lbnQuCiAgKgogICogVGhlIHdpbGRjYXJkIHZhbHVlIFNTUkNfQU5ZX0lOQk9VTkQgbWF0Y2hlcyBhbnkgU1NSQyBmcm9tIGFuCiAgKiBpbmJvdW5kIHN0cmVhbSB0aGF0IGZvciB3aGljaCB0aGVyZSBpcyBubyBleHBsaWNpdCBTU1JDIGVudHJ5IGluCkBAIC0xODgsMzMgKzMxMyw0NCBAQAogICogaXMgaW50ZW50aW9uYWwsIGFuZCBpdCBhbGxvd3MgbGliU1JUUCB0byBlbnN1cmUgdGhhdCBubyBzZWN1cml0eQogICogbGFwc2VzIHJlc3VsdCBmcm9tIGFjY2lkZW50YWwgcmUtdXNlIG9mIFNTUkMgdmFsdWVzIGR1cmluZyBrZXkKICAqIHNoYXJpbmcuCi0gKiAKLSAqIAorICoKICAqIEB3YXJuaW5nIFRoZSBmaW5hbCBlbGVtZW50IG9mIHRoZSBsaXN0IEBiIG11c3QgaGF2ZSBpdHMgYG5leHQnIHBvaW50ZXIKICAqICAgICAgICAgIHNldCB0byBOVUxMLgogICovCiAKIHR5cGVkZWYgc3RydWN0IHNydHBfcG9saWN5X3QgewotICBzc3JjX3QgICAgICAgIHNzcmM7ICAgICAgICAvKio8IFRoZSBTU1JDIHZhbHVlIG9mIHN0cmVhbSwgb3IgdGhlIAotCQkJICAgICAgKiAgIGZsYWdzIFNTUkNfQU5ZX0lOQk9VTkQgb3IgCi0JCQkgICAgICAqICAgU1NSQ19BTllfT1VUQk9VTkQgaWYga2V5IHNoYXJpbmcKLQkJCSAgICAgICogICBpcyB1c2VkIGZvciB0aGlzIHBvbGljeSBlbGVtZW50LgotCQkJICAgICAgKi8KLSAgY3J5cHRvX3BvbGljeV90IHJ0cDsgICAgICAgICAvKio8IFNSVFAgY3J5cHRvIHBvbGljeS4gICAgICAgICAgICAgICAgICAqLwotICBjcnlwdG9fcG9saWN5X3QgcnRjcDsgICAgICAgIC8qKjwgU1JUQ1AgY3J5cHRvIHBvbGljeS4gICAgICAgICAgICAgICAgICovCi0gIG9jdGV0X3QgKmtleTsgICAgICAgICAgICAgICAgLyoqPCBQb2ludGVyIHRvIHRoZSBTUlRQIG1hc3RlciBrZXkgZm9yCi0JCQkJKiAgICB0aGlzIHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICBzdHJ1Y3Qgc3J0cF9wb2xpY3lfdCAqbmV4dDsgIC8qKjwgUG9pbnRlciB0byBuZXh0IHN0cmVhbSBwb2xpY3kuICAgICAgICovCisgICAgc3J0cF9zc3JjX3Qgc3NyYzsgICAgICAgICAgICAgIC8qKjwgVGhlIFNTUkMgdmFsdWUgb2Ygc3RyZWFtLCBvciB0aGUgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBmbGFncyBTU1JDX0FOWV9JTkJPVU5EIG9yICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFNTUkNfQU5ZX09VVEJPVU5EIGlmIGtleSBzaGFyaW5nICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgaXMgdXNlZCBmb3IgdGhpcyBwb2xpY3kgZWxlbWVudC4gICAgKi8KKyAgICBzcnRwX2NyeXB0b19wb2xpY3lfdCBydHA7ICAgICAgLyoqPCBTUlRQIGNyeXB0byBwb2xpY3kuICAgICAgICAgICAgICAgICAqLworICAgIHNydHBfY3J5cHRvX3BvbGljeV90IHJ0Y3A7ICAgICAvKio8IFNSVENQIGNyeXB0byBwb2xpY3kuICAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciAqa2V5OyAgICAgICAgICAgIC8qKjwgUG9pbnRlciB0byB0aGUgU1JUUCBtYXN0ZXIga2V5IGZvciAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCB0aGlzIHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHNydHBfbWFzdGVyX2tleV90ICoqa2V5czsgICAgICAvKiogQXJyYXkgb2YgTWFzdGVyIEtleSBzdHJ1Y3R1cmVzICAgICAgICovCisgICAgdW5zaWduZWQgbG9uZyBudW1fbWFzdGVyX2tleXM7IC8qKiBOdW1iZXIgb2YgbWFzdGVyIGtleXMgICAgICAgICAgICAgICAgKi8KKyAgICBzcnRwX2VrdF9wb2xpY3lfdCBla3Q7ICAgICAgICAgLyoqPCBQb2ludGVyIHRvIHRoZSBFS1QgcG9saWN5IHN0cnVjdHVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IGZvciB0aGlzIHN0cmVhbSAoaWYgYW55KSAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgbG9uZyB3aW5kb3dfc2l6ZTsgICAgIC8qKjwgVGhlIHdpbmRvdyBzaXplIHRvIHVzZSBmb3IgcmVwbGF5ICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBwcm90ZWN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGludCBhbGxvd19yZXBlYXRfdHg7ICAgICAgICAgICAvKio8IFdoZXRoZXIgcmV0cmFuc21pc3Npb25zIG9mICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgcGFja2V0cyB3aXRoIHRoZSBzYW1lIHNlcXVlbmNlICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBudW1iZXIgYXJlIGFsbG93ZWQuICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IChOb3RlIHRoYXQgc3VjaCByZXBlYXRlZCAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgdHJhbnNtaXNzaW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSVFAgcGF5bG9hZCwgb3IgYSBzZXZlcmUgc2VjdXJpdHkgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IHdlYWtuZXNzIGlzIGludHJvZHVjZWQhKSAgICAgICAgICAgICovCisgICAgaW50ICplbmNfeHRuX2hkcjsgICAgICAgICAgICAgIC8qKjwgTGlzdCBvZiBoZWFkZXIgaWRzIHRvIGVuY3J5cHQuICAgICAgKi8KKyAgICBpbnQgZW5jX3h0bl9oZHJfY291bnQ7ICAgICAgICAgLyoqPCBOdW1iZXIgb2YgZW50cmllcyBpbiBsaXN0IG9mIGhlYWRlciAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8ICBpZHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgc3RydWN0IHNydHBfcG9saWN5X3QgKm5leHQ7ICAgIC8qKjwgUG9pbnRlciB0byBuZXh0IHN0cmVhbSBwb2xpY3kuICAgICAgKi8KIH0gc3J0cF9wb2xpY3lfdDsKIAotCi0KLQogLyoqCiAgKiBAYnJpZWYgQW4gc3J0cF90IHBvaW50cyB0byBhbiBTUlRQIHNlc3Npb24gc3RydWN0dXJlLgogICoKICAqIFRoZSB0eXBlZGVmIHNydHBfdCBpcyBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3R1cmUgdGhhdCByZXByZXNlbnRzCi0gKiBhbiBTUlRQIHNlc3Npb24uICBUaGlzIGRhdGF0eXBlIGlzIGludGVudGlhbGx5IG9wYXF1ZSBpbiAKKyAqIGFuIFNSVFAgc2Vzc2lvbi4gIFRoaXMgZGF0YXR5cGUgaXMgaW50ZW50aWFsbHkgb3BhcXVlIGluCiAgKiBvcmRlciB0byBzZXBhcmF0ZSB0aGUgaW50ZXJmYWNlIGZyb20gdGhlIGltcGxlbWVudGF0aW9uLgogICoKICAqIEFuIFNSVFAgc2Vzc2lvbiBjb25zaXN0cyBvZiBhbGwgb2YgdGhlIHRyYWZmaWMgc2VudCB0byB0aGUgUlRQIGFuZApAQCAtMjIyLDQ3ICszNTgsMzQgQEAKICAqIEF1ZGlvL1ZpZGVvIFByb2ZpbGUpLiAgQSBzZXNzaW9uIGNhbiBiZSB2aWV3ZWQgYXMgYSBzZXQgb2YgU1JUUAogICogc3RyZWFtcywgZWFjaCBvZiB3aGljaCBvcmlnaW5hdGVzIHdpdGggYSBkaWZmZXJlbnQgcGFydGljaXBhbnQuCiAgKi8KLQotdHlwZWRlZiBzdHJ1Y3Qgc3J0cF9jdHhfdCAqc3J0cF90OwotCit0eXBlZGVmIHNydHBfY3R4X3QgKnNydHBfdDsKIAogLyoqCi0gKiBAYnJpZWYgQW4gc3J0cF9zdHJlYW1fdCBwb2ludHMgdG8gYW4gU1JUUCBzdHJlYW0gc3RydWN0dXJlLgotICoKLSAqIFRoZSB0eXBlZGVmIHNydHBfc3RyZWFtX3QgaXMgYSBwb2ludGVyIHRvIGEgc3RydWN0dXJlIHRoYXQKLSAqIHJlcHJlc2VudHMgYW4gU1JUUCBzdHJlYW0uICBUaGlzIGRhdGF0eXBlIGlzIGludGVudGlvbmFsbHkKLSAqIG9wYXF1ZSBpbiBvcmRlciB0byBzZXBhcmF0ZSB0aGUgaW50ZXJmYWNlIGZyb20gdGhlIGltcGxlbWVudGF0aW9uLiAKLSAqIAotICogQW4gU1JUUCBzdHJlYW0gY29uc2lzdHMgb2YgYWxsIG9mIHRoZSB0cmFmZmljIHNlbnQgdG8gYW4gU1JUUAotICogc2Vzc2lvbiBieSBhIHNpbmdsZSBwYXJ0aWNpcGFudC4gIEEgc2Vzc2lvbiBjYW4gYmUgdmlld2VkIGFzCi0gKiBhIHNldCBvZiBzdHJlYW1zLiAgCi0gKgotICovCi10eXBlZGVmIHN0cnVjdCBzcnRwX3N0cmVhbV9jdHhfdCAqc3J0cF9zdHJlYW1fdDsKLQotCi0KLS8qKgotICogQGJyaWVmIHNydHBfaW5pdCgpIGluaXRpYWxpemVzIHRoZSBzcnRwIGxpYnJhcnkuICAKKyAqIEBicmllZiBzcnRwX2luaXQoKSBpbml0aWFsaXplcyB0aGUgc3J0cCBsaWJyYXJ5LgogICoKICAqIEB3YXJuaW5nIFRoaXMgZnVuY3Rpb24gQGIgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciBzcnRwCiAgKiBmdW5jdGlvbnMuCiAgKi8KK3NydHBfZXJyX3N0YXR1c190IHNydHBfaW5pdCh2b2lkKTsKIAotZXJyX3N0YXR1c190Ci1zcnRwX2luaXQoKTsKKy8qKgorICogQGJyaWVmIHNydHBfc2h1dGRvd24oKSBkZS1pbml0aWFsaXplcyB0aGUgc3J0cCBsaWJyYXJ5LgorICoKKyAqIEB3YXJuaW5nIE5vIHNydHAgZnVuY3Rpb25zIG1heSBiZSBjYWxsZWQgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICovCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX3NodXRkb3duKHZvaWQpOwogCiAvKioKICAqIEBicmllZiBzcnRwX3Byb3RlY3QoKSBpcyB0aGUgU2VjdXJlIFJUUCBzZW5kZXItc2lkZSBwYWNrZXQgcHJvY2Vzc2luZwogICogZnVuY3Rpb24uCi0gKiAKKyAqCiAgKiBUaGUgZnVuY3Rpb24gY2FsbCBzcnRwX3Byb3RlY3QoY3R4LCBydHBfaGRyLCBsZW5fcHRyKSBhcHBsaWVzIFNSVFAKICAqIHByb3RlY3Rpb24gdG8gdGhlIFJUUCBwYWNrZXQgcnRwX2hkciAod2hpY2ggaGFzIGxlbmd0aCAqbGVuX3B0cikgdXNpbmcKLSAqIHRoZSBTUlRQIGNvbnRleHQgY3R4LiAgSWYgZXJyX3N0YXR1c19vayBpcyByZXR1cm5lZCwgdGhlbiBydHBfaGRyCisgKiB0aGUgU1JUUCBjb250ZXh0IGN0eC4gIElmIHNydHBfZXJyX3N0YXR1c19vayBpcyByZXR1cm5lZCwgdGhlbiBydHBfaGRyCiAgKiBwb2ludHMgdG8gdGhlIHJlc3VsdGluZyBTUlRQIHBhY2tldCBhbmQgKmxlbl9wdHIgaXMgdGhlIG51bWJlciBvZgogICogb2N0ZXRzIGluIHRoYXQgcGFja2V0OyBvdGhlcndpc2UsIG5vIGFzc3VtcHRpb25zIHNob3VsZCBiZSBtYWRlCiAgKiBhYm91dCB0aGUgdmFsdWUgb2YgZWl0aGVyIGRhdGEgZWxlbWVudHMuCi0gKiAKKyAqCiAgKiBUaGUgc2VxdWVuY2UgbnVtYmVycyBvZiB0aGUgUlRQIHBhY2tldHMgcHJlc2VudGVkIHRvIHRoaXMgZnVuY3Rpb24KICAqIG5lZWQgbm90IGJlIGNvbnNlY3V0aXZlLCBidXQgdGhleSBAYiBtdXN0IGJlIG91dCBvZiBvcmRlciBieSBsZXNzCiAgKiB0aGFuIDJeMTUgPSAzMiw3NjggcGFja2V0cy4KQEAgLTI3Miw2ICszOTUsMTEgQEAKICAqIHBhY2tldCwgYW5kIGFzc3VtZXMgdGhhdCB0aGUgUlRQIHBhY2tldCBpcyBhbGlnbmVkIG9uIGEgMzItYml0CiAgKiBib3VuZGFyeS4KICAqCisgKiBAd2FybmluZyBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBpdCBjYW4gd3JpdGUgU1JUUF9NQVhfVFJBSUxFUl9MRU4KKyAqIGludG8gdGhlIGxvY2F0aW9uIGluIG1lbW9yeSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIFJUUCBwYWNrZXQuCisgKiBDYWxsZXJzIE1VU1QgZW5zdXJlIHRoYXQgdGhpcyBtdWNoIHdyaXRhYmxlIG1lbW9yeSBpcyBhdmFpbGFibGUgaW4KKyAqIHRoZSBidWZmZXIgdGhhdCBob2xkcyB0aGUgUlRQIHBhY2tldC4KKyAqCiAgKiBAcGFyYW0gY3R4IGlzIHRoZSBTUlRQIGNvbnRleHQgdG8gdXNlIGluIHByb2Nlc3NpbmcgdGhlIHBhY2tldC4KICAqCiAgKiBAcGFyYW0gcnRwX2hkciBpcyBhIHBvaW50ZXIgdG8gdGhlIFJUUCBwYWNrZXQgKGJlZm9yZSB0aGUgY2FsbCk7IGFmdGVyCkBAIC0yNzksMTggKzQwNyw3MCBAQAogICoKICAqIEBwYXJhbSBsZW5fcHRyIGlzIGEgcG9pbnRlciB0byB0aGUgbGVuZ3RoIGluIG9jdGV0cyBvZiB0aGUgY29tcGxldGUKICAqIFJUUCBwYWNrZXQgKGhlYWRlciBhbmQgYm9keSkgYmVmb3JlIHRoZSBmdW5jdGlvbiBjYWxsLCBhbmQgb2YgdGhlCi0gKiBjb21wbGV0ZSBTUlRQIHBhY2tldCBhZnRlciB0aGUgY2FsbCwgaWYgZXJyX3N0YXR1c19vayB3YXMgcmV0dXJuZWQuCisgKiBjb21wbGV0ZSBTUlRQIHBhY2tldCBhZnRlciB0aGUgY2FsbCwgaWYgc3J0cF9lcnJfc3RhdHVzX29rIHdhcyByZXR1cm5lZC4KICAqIE90aGVyd2lzZSwgdGhlIHZhbHVlIG9mIHRoZSBkYXRhIHRvIHdoaWNoIGl0IHBvaW50cyBpcyB1bmRlZmluZWQuCiAgKgotICogQHJldHVybiAKLSAqICAgIC0gZXJyX3N0YXR1c19vayAgICAgICAgICAgIG5vIHByb2JsZW1zCi0gKiAgICAtIGVycl9zdGF0dXNfcmVwbGF5X2ZhaWwgICBydHAgc2VxdWVuY2UgbnVtYmVyIHdhcyBub24taW5jcmVhc2luZworICogQHJldHVybgorICogICAgLSBzcnRwX2Vycl9zdGF0dXNfb2sgICAgICAgICAgICBubyBwcm9ibGVtcworICogICAgLSBzcnRwX2Vycl9zdGF0dXNfcmVwbGF5X2ZhaWwgICBydHAgc2VxdWVuY2UgbnVtYmVyIHdhcyBub24taW5jcmVhc2luZwogICogICAgLSBAZSBvdGhlciAgICAgICAgICAgICAgICAgZmFpbHVyZSBpbiBjcnlwdG9ncmFwaGljIG1lY2hhbmlzbXMKICAqLworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9wcm90ZWN0KHNydHBfdCBjdHgsIHZvaWQgKnJ0cF9oZHIsIGludCAqbGVuX3B0cik7CiAKLWVycl9zdGF0dXNfdAotc3J0cF9wcm90ZWN0KHNydHBfdCBjdHgsIHZvaWQgKnJ0cF9oZHIsIGludCAqbGVuX3B0cik7Ci0JICAgICAKKy8qKgorICogQGJyaWVmIHNydHBfcHJvdGVjdF9ta2koKSBpcyB0aGUgU2VjdXJlIFJUUCBzZW5kZXItc2lkZSBwYWNrZXQgcHJvY2Vzc2luZworICogZnVuY3Rpb24gdGhhdCBjYW4gdXRpbGl6ZSBNS0kuCisgKgorICogVGhlIGZ1bmN0aW9uIGNhbGwgc3J0cF9wcm90ZWN0KGN0eCwgcnRwX2hkciwgbGVuX3B0cikgYXBwbGllcyBTUlRQCisgKiBwcm90ZWN0aW9uIHRvIHRoZSBSVFAgcGFja2V0IHJ0cF9oZHIgKHdoaWNoIGhhcyBsZW5ndGggKmxlbl9wdHIpIHVzaW5nCisgKiB0aGUgU1JUUCBjb250ZXh0IGN0eC4gIElmIHNydHBfZXJyX3N0YXR1c19vayBpcyByZXR1cm5lZCwgdGhlbiBydHBfaGRyCisgKiBwb2ludHMgdG8gdGhlIHJlc3VsdGluZyBTUlRQIHBhY2tldCBhbmQgKmxlbl9wdHIgaXMgdGhlIG51bWJlciBvZgorICogb2N0ZXRzIGluIHRoYXQgcGFja2V0OyBvdGhlcndpc2UsIG5vIGFzc3VtcHRpb25zIHNob3VsZCBiZSBtYWRlCisgKiBhYm91dCB0aGUgdmFsdWUgb2YgZWl0aGVyIGRhdGEgZWxlbWVudHMuCisgKgorICogVGhlIHNlcXVlbmNlIG51bWJlcnMgb2YgdGhlIFJUUCBwYWNrZXRzIHByZXNlbnRlZCB0byB0aGlzIGZ1bmN0aW9uCisgKiBuZWVkIG5vdCBiZSBjb25zZWN1dGl2ZSwgYnV0IHRoZXkgQGIgbXVzdCBiZSBvdXQgb2Ygb3JkZXIgYnkgbGVzcworICogdGhhbiAyXjE1ID0gMzIsNzY4IHBhY2tldHMuCisgKgorICogQHdhcm5pbmcgVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgaXQgY2FuIHdyaXRlIHRoZSBhdXRoZW50aWNhdGlvbgorICogdGFnIGludG8gdGhlIGxvY2F0aW9uIGluIG1lbW9yeSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIFJUUAorICogcGFja2V0LCBhbmQgYXNzdW1lcyB0aGF0IHRoZSBSVFAgcGFja2V0IGlzIGFsaWduZWQgb24gYSAzMi1iaXQKKyAqIGJvdW5kYXJ5LgorICoKKyAqIEB3YXJuaW5nIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGl0IGNhbiB3cml0ZSBTUlRQX01BWF9UUkFJTEVSX0xFTgorICogaW50byB0aGUgbG9jYXRpb24gaW4gbWVtb3J5IGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgUlRQIHBhY2tldC4KKyAqIENhbGxlcnMgTVVTVCBlbnN1cmUgdGhhdCB0aGlzIG11Y2ggd3JpdGFibGUgbWVtb3J5IGlzIGF2YWlsYWJsZSBpbgorICogdGhlIGJ1ZmZlciB0aGF0IGhvbGRzIHRoZSBSVFAgcGFja2V0LgorICoKKyAqIEBwYXJhbSBjdHggaXMgdGhlIFNSVFAgY29udGV4dCB0byB1c2UgaW4gcHJvY2Vzc2luZyB0aGUgcGFja2V0LgorICoKKyAqIEBwYXJhbSBydHBfaGRyIGlzIGEgcG9pbnRlciB0byB0aGUgUlRQIHBhY2tldCAoYmVmb3JlIHRoZSBjYWxsKTsgYWZ0ZXIKKyAqIHRoZSBmdW5jdGlvbiByZXR1cm5zLCBpdCBwb2ludHMgdG8gdGhlIHNydHAgcGFja2V0LgorICoKKyAqIEBwYXJhbSBwa3Rfb2N0ZXRfbGVuIGlzIGEgcG9pbnRlciB0byB0aGUgbGVuZ3RoIGluIG9jdGV0cyBvZiB0aGUgY29tcGxldGUKKyAqIFJUUCBwYWNrZXQgKGhlYWRlciBhbmQgYm9keSkgYmVmb3JlIHRoZSBmdW5jdGlvbiBjYWxsLCBhbmQgb2YgdGhlCisgKiBjb21wbGV0ZSBTUlRQIHBhY2tldCBhZnRlciB0aGUgY2FsbCwgaWYgc3J0cF9lcnJfc3RhdHVzX29rIHdhcyByZXR1cm5lZC4KKyAqIE90aGVyd2lzZSwgdGhlIHZhbHVlIG9mIHRoZSBkYXRhIHRvIHdoaWNoIGl0IHBvaW50cyBpcyB1bmRlZmluZWQuCisgKgorICogQHBhcmFtIHVzZV9ta2kgaXMgYSBib29sZWFuIHRvIHRlbGwgdGhlIHN5c3RlbSBpZiBta2kgaXMgYmVpbmcgdXNlZC4gIElmCisgKiBzZXQgdG8gZmFsc2UgdGhlbiB3aWxsIHVzZSB0aGUgZmlyc3Qgc2V0IG9mIHNlc3Npb24ga2V5cy4gIElmIHNldCB0byB0cnVlCisgKiB3aWxsCisgKiB1c2UgdGhlIHNlc3Npb24ga2V5cyBpZGVudGlmaWVkIGJ5IHRoZSBta2lfaW5kZXgKKyAqCisgKiBAcGFyYW0gbWtpX2luZGV4IGludGVnZXIgdmFsdWUgc3BlY2lmeWluZyB3aGljaCBzZXQgb2Ygc2Vzc2lvbiBrZXlzIHNob3VsZCBiZQorICogdXNlZCBpZiB1c2VfbWtpIGlzIHNldCB0byB0cnVlLgorICoKKyAqIEByZXR1cm4KKyAqICAgIC0gc3J0cF9lcnJfc3RhdHVzX29rICAgICAgICAgICAgbm8gcHJvYmxlbXMKKyAqICAgIC0gc3J0cF9lcnJfc3RhdHVzX3JlcGxheV9mYWlsICAgcnRwIHNlcXVlbmNlIG51bWJlciB3YXMgbm9uLWluY3JlYXNpbmcKKyAqICAgIC0gQGUgb3RoZXIgICAgICAgICAgICAgICAgIGZhaWx1cmUgaW4gY3J5cHRvZ3JhcGhpYyBtZWNoYW5pc21zCisgKi8KK3NydHBfZXJyX3N0YXR1c190IHNydHBfcHJvdGVjdF9ta2koc3J0cF9jdHhfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpydHBfaGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnBrdF9vY3RldF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB1c2VfbWtpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWtpX2luZGV4KTsKKwogLyoqCiAgKiBAYnJpZWYgc3J0cF91bnByb3RlY3QoKSBpcyB0aGUgU2VjdXJlIFJUUCByZWNlaXZlci1zaWRlIHBhY2tldAogICogcHJvY2Vzc2luZyBmdW5jdGlvbi4KQEAgLTI5OCw5MyArNDc4LDEzNCBAQAogICogVGhlIGZ1bmN0aW9uIGNhbGwgc3J0cF91bnByb3RlY3QoY3R4LCBzcnRwX2hkciwgbGVuX3B0cikgdmVyaWZpZXMKICAqIHRoZSBTZWN1cmUgUlRQIHByb3RlY3Rpb24gb2YgdGhlIFNSVFAgcGFja2V0IHBvaW50ZWQgdG8gYnkgc3J0cF9oZHIKICAqICh3aGljaCBoYXMgbGVuZ3RoICpsZW5fcHRyKSwgdXNpbmcgdGhlIFNSVFAgY29udGV4dCBjdHguICBJZgotICogZXJyX3N0YXR1c19vayBpcyByZXR1cm5lZCwgdGhlbiBzcnRwX2hkciBwb2ludHMgdG8gdGhlIHJlc3VsdGluZworICogc3J0cF9lcnJfc3RhdHVzX29rIGlzIHJldHVybmVkLCB0aGVuIHNydHBfaGRyIHBvaW50cyB0byB0aGUgcmVzdWx0aW5nCiAgKiBSVFAgcGFja2V0IGFuZCAqbGVuX3B0ciBpcyB0aGUgbnVtYmVyIG9mIG9jdGV0cyBpbiB0aGF0IHBhY2tldDsKICAqIG90aGVyd2lzZSwgbm8gYXNzdW1wdGlvbnMgc2hvdWxkIGJlIG1hZGUgYWJvdXQgdGhlIHZhbHVlIG9mIGVpdGhlcgotICogZGF0YSBlbGVtZW50cy4gIAotICogCisgKiBkYXRhIGVsZW1lbnRzLgorICoKICAqIFRoZSBzZXF1ZW5jZSBudW1iZXJzIG9mIHRoZSBSVFAgcGFja2V0cyBwcmVzZW50ZWQgdG8gdGhpcyBmdW5jdGlvbgogICogbmVlZCBub3QgYmUgY29uc2VjdXRpdmUsIGJ1dCB0aGV5IEBiIG11c3QgYmUgb3V0IG9mIG9yZGVyIGJ5IGxlc3MKICAqIHRoYW4gMl4xNSA9IDMyLDc2OCBwYWNrZXRzLgotICogCisgKgogICogQHdhcm5pbmcgVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIFNSVFAgcGFja2V0IGlzIGFsaWduZWQgb24gYQogICogMzItYml0IGJvdW5kYXJ5LgogICoKLSAqIEBwYXJhbSBjdHggaXMgYSBwb2ludGVyIHRvIHRoZSBzcnRwX3Qgd2hpY2ggYXBwbGllcyB0byB0aGUKLSAqIHBhcnRpY3VsYXIgcGFja2V0LgorICogQHBhcmFtIGN0eCBpcyB0aGUgU1JUUCBzZXNzaW9uIHdoaWNoIGFwcGxpZXMgdG8gdGhlIHBhcnRpY3VsYXIgcGFja2V0LgogICoKICAqIEBwYXJhbSBzcnRwX2hkciBpcyBhIHBvaW50ZXIgdG8gdGhlIGhlYWRlciBvZiB0aGUgU1JUUCBwYWNrZXQKICAqIChiZWZvcmUgdGhlIGNhbGwpLiAgYWZ0ZXIgdGhlIGZ1bmN0aW9uIHJldHVybnMsIGl0IHBvaW50cyB0byB0aGUKLSAqIHJ0cCBwYWNrZXQgaWYgZXJyX3N0YXR1c19vayB3YXMgcmV0dXJuZWQ7IG90aGVyd2lzZSwgdGhlIHZhbHVlIG9mCisgKiBydHAgcGFja2V0IGlmIHNydHBfZXJyX3N0YXR1c19vayB3YXMgcmV0dXJuZWQ7IG90aGVyd2lzZSwgdGhlIHZhbHVlIG9mCiAgKiB0aGUgZGF0YSB0byB3aGljaCBpdCBwb2ludHMgaXMgdW5kZWZpbmVkLgogICoKICAqIEBwYXJhbSBsZW5fcHRyIGlzIGEgcG9pbnRlciB0byB0aGUgbGVuZ3RoIGluIG9jdGV0cyBvZiB0aGUgY29tcGxldGUKICAqIHNydHAgcGFja2V0IChoZWFkZXIgYW5kIGJvZHkpIGJlZm9yZSB0aGUgZnVuY3Rpb24gY2FsbCwgYW5kIG9mIHRoZQotICogY29tcGxldGUgcnRwIHBhY2tldCBhZnRlciB0aGUgY2FsbCwgaWYgZXJyX3N0YXR1c19vayB3YXMgcmV0dXJuZWQuCisgKiBjb21wbGV0ZSBydHAgcGFja2V0IGFmdGVyIHRoZSBjYWxsLCBpZiBzcnRwX2Vycl9zdGF0dXNfb2sgd2FzIHJldHVybmVkLgogICogT3RoZXJ3aXNlLCB0aGUgdmFsdWUgb2YgdGhlIGRhdGEgdG8gd2hpY2ggaXQgcG9pbnRzIGlzIHVuZGVmaW5lZC4KICAqCi0gKiBAcmV0dXJuIAotICogICAgLSBlcnJfc3RhdHVzX29rICAgICAgICAgIGlmIHRoZSBSVFAgcGFja2V0IGlzIHZhbGlkLgotICogICAgLSBlcnJfc3RhdHVzX2F1dGhfZmFpbCAgIGlmIHRoZSBTUlRQIHBhY2tldCBmYWlsZWQgdGhlIG1lc3NhZ2UgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb24gY2hlY2suCi0gKiAgICAtIGVycl9zdGF0dXNfcmVwbGF5X2ZhaWwgaWYgdGhlIFNSVFAgcGFja2V0IGlzIGEgcmVwbGF5IChlLmcuIHBhY2tldCBoYXMKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkIGFuZCBhY2NlcHRlZCkuCisgKiBAcmV0dXJuCisgKiAgICAtIHNydHBfZXJyX3N0YXR1c19vayAgICAgICAgICBpZiB0aGUgUlRQIHBhY2tldCBpcyB2YWxpZC4KKyAqICAgIC0gc3J0cF9lcnJfc3RhdHVzX2F1dGhfZmFpbCAgIGlmIHRoZSBTUlRQIHBhY2tldCBmYWlsZWQgdGhlIG1lc3NhZ2UKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uIGNoZWNrLgorICogICAgLSBzcnRwX2Vycl9zdGF0dXNfcmVwbGF5X2ZhaWwgaWYgdGhlIFNSVFAgcGFja2V0IGlzIGEgcmVwbGF5IChlLmcuIHBhY2tldAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQgYW5kIGFjY2VwdGVkKS4KICAqICAgIC0gW290aGVyXSAgaWYgdGhlcmUgaGFzIGJlZW4gYW4gZXJyb3IgaW4gdGhlIGNyeXB0b2dyYXBoaWMgbWVjaGFuaXNtcy4KICAqCiAgKi8KK3NydHBfZXJyX3N0YXR1c190IHNydHBfdW5wcm90ZWN0KHNydHBfdCBjdHgsIHZvaWQgKnNydHBfaGRyLCBpbnQgKmxlbl9wdHIpOwogCi1lcnJfc3RhdHVzX3QKLXNydHBfdW5wcm90ZWN0KHNydHBfdCBjdHgsIHZvaWQgKnNydHBfaGRyLCBpbnQgKmxlbl9wdHIpOwotCisvKioKKyAqIEBicmllZiBzcnRwX3VucHJvdGVjdF9ta2koKSBpcyB0aGUgU2VjdXJlIFJUUCByZWNlaXZlci1zaWRlIHBhY2tldAorICogcHJvY2Vzc2luZyBmdW5jdGlvbiB0aGF0IGNoZWNrcyBmb3IgTUtJLgorICoKKyAqIFRoZSBmdW5jdGlvbiBjYWxsIHNydHBfdW5wcm90ZWN0KGN0eCwgc3J0cF9oZHIsIGxlbl9wdHIpIHZlcmlmaWVzCisgKiB0aGUgU2VjdXJlIFJUUCBwcm90ZWN0aW9uIG9mIHRoZSBTUlRQIHBhY2tldCBwb2ludGVkIHRvIGJ5IHNydHBfaGRyCisgKiAod2hpY2ggaGFzIGxlbmd0aCAqbGVuX3B0ciksIHVzaW5nIHRoZSBTUlRQIGNvbnRleHQgY3R4LiAgSWYKKyAqIHNydHBfZXJyX3N0YXR1c19vayBpcyByZXR1cm5lZCwgdGhlbiBzcnRwX2hkciBwb2ludHMgdG8gdGhlIHJlc3VsdGluZworICogUlRQIHBhY2tldCBhbmQgKmxlbl9wdHIgaXMgdGhlIG51bWJlciBvZiBvY3RldHMgaW4gdGhhdCBwYWNrZXQ7CisgKiBvdGhlcndpc2UsIG5vIGFzc3VtcHRpb25zIHNob3VsZCBiZSBtYWRlIGFib3V0IHRoZSB2YWx1ZSBvZiBlaXRoZXIKKyAqIGRhdGEgZWxlbWVudHMuCisgKgorICogVGhlIHNlcXVlbmNlIG51bWJlcnMgb2YgdGhlIFJUUCBwYWNrZXRzIHByZXNlbnRlZCB0byB0aGlzIGZ1bmN0aW9uCisgKiBuZWVkIG5vdCBiZSBjb25zZWN1dGl2ZSwgYnV0IHRoZXkgQGIgbXVzdCBiZSBvdXQgb2Ygb3JkZXIgYnkgbGVzcworICogdGhhbiAyXjE1ID0gMzIsNzY4IHBhY2tldHMuCisgKgorICogQHdhcm5pbmcgVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIFNSVFAgcGFja2V0IGlzIGFsaWduZWQgb24gYQorICogMzItYml0IGJvdW5kYXJ5LgorICoKKyAqIEBwYXJhbSBjdHggaXMgdGhlIFNSVFAgc2Vzc2lvbiB3aGljaCBhcHBsaWVzIHRvIHRoZSBwYXJ0aWN1bGFyIHBhY2tldC4KKyAqCisgKiBAcGFyYW0gc3J0cF9oZHIgaXMgYSBwb2ludGVyIHRvIHRoZSBoZWFkZXIgb2YgdGhlIFNSVFAgcGFja2V0CisgKiAoYmVmb3JlIHRoZSBjYWxsKS4gIGFmdGVyIHRoZSBmdW5jdGlvbiByZXR1cm5zLCBpdCBwb2ludHMgdG8gdGhlCisgKiBydHAgcGFja2V0IGlmIHNydHBfZXJyX3N0YXR1c19vayB3YXMgcmV0dXJuZWQ7IG90aGVyd2lzZSwgdGhlIHZhbHVlIG9mCisgKiB0aGUgZGF0YSB0byB3aGljaCBpdCBwb2ludHMgaXMgdW5kZWZpbmVkLgorICoKKyAqIEBwYXJhbSBsZW5fcHRyIGlzIGEgcG9pbnRlciB0byB0aGUgbGVuZ3RoIGluIG9jdGV0cyBvZiB0aGUgY29tcGxldGUKKyAqIHNydHAgcGFja2V0IChoZWFkZXIgYW5kIGJvZHkpIGJlZm9yZSB0aGUgZnVuY3Rpb24gY2FsbCwgYW5kIG9mIHRoZQorICogY29tcGxldGUgcnRwIHBhY2tldCBhZnRlciB0aGUgY2FsbCwgaWYgc3J0cF9lcnJfc3RhdHVzX29rIHdhcyByZXR1cm5lZC4KKyAqIE90aGVyd2lzZSwgdGhlIHZhbHVlIG9mIHRoZSBkYXRhIHRvIHdoaWNoIGl0IHBvaW50cyBpcyB1bmRlZmluZWQuCisgKgorICogQHBhcmFtIHVzZV9ta2kgaXMgYSBib29sZWFuIHRvIHRlbGwgdGhlIHN5c3RlbSBpZiBta2kgaXMgYmVpbmcgdXNlZC4gIElmCisgKiBzZXQgdG8gZmFsc2UgdGhlbiB3aWxsIHVzZSB0aGUgZmlyc3Qgc2V0IG9mIHNlc3Npb24ga2V5cy4gIElmIHNldCB0byB0cnVlCisgKiB3aWxsCisgKiB1c2UgdGhlIHNlc3Npb24ga2V5cyBpZGVudGlmaWVkIGJ5IHRoZSBta2lfaW5kZXgKKyAqCisgKiBAcmV0dXJuCisgKiAgICAtIHNydHBfZXJyX3N0YXR1c19vayAgICAgICAgICBpZiB0aGUgUlRQIHBhY2tldCBpcyB2YWxpZC4KKyAqICAgIC0gc3J0cF9lcnJfc3RhdHVzX2F1dGhfZmFpbCAgIGlmIHRoZSBTUlRQIHBhY2tldCBmYWlsZWQgdGhlIG1lc3NhZ2UKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uIGNoZWNrLgorICogICAgLSBzcnRwX2Vycl9zdGF0dXNfcmVwbGF5X2ZhaWwgaWYgdGhlIFNSVFAgcGFja2V0IGlzIGEgcmVwbGF5IChlLmcuIHBhY2tldAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQgYW5kIGFjY2VwdGVkKS4KKyAqICAgIC0gc3J0cF9lcnJfc3RhdHVzX2JhZF9ta2kgaWYgdGhlIE1LSSBpbiB0aGUgcGFja2V0IGlzIG5vdCBhIGtub3duIE1LSSBpZAorICogICAgLSBbb3RoZXJdICBpZiB0aGVyZSBoYXMgYmVlbiBhbiBlcnJvciBpbiB0aGUgY3J5cHRvZ3JhcGhpYyBtZWNoYW5pc21zLgorICoKKyAqLworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF91bnByb3RlY3RfbWtpKHNydHBfdCBjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3J0cF9oZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpsZW5fcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB1c2VfbWtpKTsKIAogLyoqCiAgKiBAYnJpZWYgc3J0cF9jcmVhdGUoKSBhbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIGFuIFNSVFAgc2Vzc2lvbi4KIAotICogVGhlIGZ1bmN0aW9uIGNhbGwgc3J0cF9jcmVhdGUoc2Vzc2lvbiwgcG9saWN5LCBrZXkpIGFsbG9jYXRlcyBhbmQKLSAqIGluaXRpYWxpemVzIGFuIFNSVFAgc2Vzc2lvbiBjb250ZXh0LCBhcHBseWluZyB0aGUgZ2l2ZW4gcG9saWN5IGFuZAotICoga2V5LgorICogVGhlIGZ1bmN0aW9uIGNhbGwgc3J0cF9jcmVhdGUoc2Vzc2lvbiwgcG9saWN5KSBhbGxvY2F0ZXMgYW5kCisgKiBpbml0aWFsaXplcyBhbiBTUlRQIHNlc3Npb24gY29udGV4dCwgYXBwbHlpbmcgdGhlIGdpdmVuIHBvbGljeS4KICAqCi0gKiBAcGFyYW0gc2Vzc2lvbiBpcyB0aGUgU1JUUCBzZXNzaW9uIHRvIHdoaWNoIHRoZSBwb2xpY3kgaXMgdG8gYmUgYWRkZWQuCi0gKiAKKyAqIEBwYXJhbSBzZXNzaW9uIGlzIGEgcG9pbnRlciB0byB0aGUgU1JUUCBzZXNzaW9uIHRvIHdoaWNoIHRoZSBwb2xpY3kgaXMKKyAqIHRvIGJlIGFkZGVkLgorICoKICAqIEBwYXJhbSBwb2xpY3kgaXMgdGhlIHNydHBfcG9saWN5X3Qgc3RydWN0IHRoYXQgZGVzY3JpYmVzIHRoZSBwb2xpY3kKICAqIGZvciB0aGUgc2Vzc2lvbi4gIFRoZSBzdHJ1Y3QgbWF5IGJlIGEgc2luZ2xlIGVsZW1lbnQsIG9yIGl0IG1heSBiZQogICogdGhlIGhlYWQgb2YgYSBsaXN0LCBpbiB3aGljaCBjYXNlIGVhY2ggZWxlbWVudCBvZiB0aGUgbGlzdCBpcwotICogcHJvY2Vzc2VkLiAgVGhlIGZpbmFsIGVsZW1lbnQgb2YgdGhlIGxpc3QgQGIgbXVzdCBoYXZlIGl0cyBgbmV4dCcKLSAqIGZpZWxkIHNldCB0byB6ZXJvLgotICogCisgKiBwcm9jZXNzZWQuICBJdCBtYXkgYWxzbyBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIHN0cmVhbXMgc2hvdWxkIGJlIGFkZGVkCisgKiBsYXRlciB1c2luZyBzcnRwX2FkZF9zdHJlYW0oKS4gIFRoZSBmaW5hbCBlbGVtZW50IG9mIHRoZSBsaXN0IEBiIG11c3QKKyAqIGhhdmUgaXRzIGBuZXh0JyBmaWVsZCBzZXQgdG8gTlVMTC4KKyAqCiAgKiBAcmV0dXJuCi0gKiAgICAtIGVycl9zdGF0dXNfb2sgICAgICAgICAgIGlmIGNyZWF0aW9uIHN1Y2NlZGVkLgotICogICAgLSBlcnJfc3RhdHVzX2FsbG9jX2ZhaWwgICBpZiBhbGxvY2F0aW9uIGZhaWxlZC4KLSAqICAgIC0gZXJyX3N0YXR1c19pbml0X2ZhaWwgICAgaWYgaW5pdGlhbGl6YXRpb24gZmFpbGVkLgorICogICAgLSBzcnRwX2Vycl9zdGF0dXNfb2sgICAgICAgICAgIGlmIGNyZWF0aW9uIHN1Y2NlZGVkLgorICogICAgLSBzcnRwX2Vycl9zdGF0dXNfYWxsb2NfZmFpbCAgIGlmIGFsbG9jYXRpb24gZmFpbGVkLgorICogICAgLSBzcnRwX2Vycl9zdGF0dXNfaW5pdF9mYWlsICAgIGlmIGluaXRpYWxpemF0aW9uIGZhaWxlZC4KICAqLwotCi1lcnJfc3RhdHVzX3QKLXNydHBfY3JlYXRlKHNydHBfdCAqc2Vzc2lvbiwgY29uc3Qgc3J0cF9wb2xpY3lfdCAqcG9saWN5KTsKLQorc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9jcmVhdGUoc3J0cF90ICpzZXNzaW9uLCBjb25zdCBzcnRwX3BvbGljeV90ICpwb2xpY3kpOwogCiAvKioKICAqIEBicmllZiBzcnRwX2FkZF9zdHJlYW0oKSBhbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIGFuIFNSVFAgc3RyZWFtCiAgKiB3aXRoaW4gYSBnaXZlbiBTUlRQIHNlc3Npb24uCi0gKiAKKyAqCiAgKiBUaGUgZnVuY3Rpb24gY2FsbCBzcnRwX2FkZF9zdHJlYW0oc2Vzc2lvbiwgcG9saWN5KSBhbGxvY2F0ZXMgYW5kCiAgKiBpbml0aWFsaXplcyBhIG5ldyBTUlRQIHN0cmVhbSB3aXRoaW4gYSBnaXZlbiwgcHJldmlvdXNseSBjcmVhdGVkCiAgKiBzZXNzaW9uLCBhcHBseWluZyB0aGUgcG9saWN5IGdpdmVuIGFzIHRoZSBvdGhlciBhcmd1bWVudCB0byB0aGF0CiAgKiBzdHJlYW0uCiAgKgogICogQHJldHVybiB2YWx1ZXM6Ci0gKiAgICAtIGVycl9zdGF0dXNfb2sgICAgICAgICAgIGlmIHN0cmVhbSBjcmVhdGlvbiBzdWNjZWRlZC4KLSAqICAgIC0gZXJyX3N0YXR1c19hbGxvY19mYWlsICAgaWYgc3RyZWFtIGFsbG9jYXRpb24gZmFpbGVkCi0gKiAgICAtIGVycl9zdGF0dXNfaW5pdF9mYWlsICAgIGlmIHN0cmVhbSBpbml0aWFsaXphdGlvbiBmYWlsZWQuCisgKiAgICAtIHNydHBfZXJyX3N0YXR1c19vayAgICAgICAgICAgaWYgc3RyZWFtIGNyZWF0aW9uIHN1Y2NlZGVkLgorICogICAgLSBzcnRwX2Vycl9zdGF0dXNfYWxsb2NfZmFpbCAgIGlmIHN0cmVhbSBhbGxvY2F0aW9uIGZhaWxlZAorICogICAgLSBzcnRwX2Vycl9zdGF0dXNfaW5pdF9mYWlsICAgIGlmIHN0cmVhbSBpbml0aWFsaXphdGlvbiBmYWlsZWQuCiAgKi8KLQotZXJyX3N0YXR1c190Ci1zcnRwX2FkZF9zdHJlYW0oc3J0cF90IHNlc3Npb24sIAotCQljb25zdCBzcnRwX3BvbGljeV90ICpwb2xpY3kpOwotCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2FkZF9zdHJlYW0oc3J0cF90IHNlc3Npb24sIGNvbnN0IHNydHBfcG9saWN5X3QgKnBvbGljeSk7CiAKIC8qKgogICogQGJyaWVmIHNydHBfcmVtb3ZlX3N0cmVhbSgpIGRlYWxsb2NhdGVzIGFuIFNSVFAgc3RyZWFtLgotICogCisgKgogICogVGhlIGZ1bmN0aW9uIGNhbGwgc3J0cF9yZW1vdmVfc3RyZWFtKHNlc3Npb24sIHNzcmMpIHJlbW92ZXMKICAqIHRoZSBTUlRQIHN0cmVhbSB3aXRoIHRoZSBTU1JDIHZhbHVlIHNzcmMgZnJvbSB0aGUgU1JUUCBzZXNzaW9uCiAgKiBjb250ZXh0IGdpdmVuIGJ5IHRoZSBhcmd1bWVudCBzZXNzaW9uLgpAQCAtMzkyLDcwICs2MTMsNTQ0IEBACiAgKiBAcGFyYW0gc2Vzc2lvbiBpcyB0aGUgU1JUUCBzZXNzaW9uIGZyb20gd2hpY2ggdGhlIHN0cmVhbQogICogICAgICAgIHdpbGwgYmUgcmVtb3ZlZC4KICAqCi0gKiBAcGFyYW0gc3NyYyBpcyB0aGUgU1NSQyB2YWx1ZSBvZiB0aGUgc3RyZWFtIHRvIGJlIHJlbW92ZWQuCisgKiBAcGFyYW0gc3NyYyBpcyB0aGUgU1NSQyB2YWx1ZSBvZiB0aGUgc3RyZWFtIHRvIGJlIHJlbW92ZWQKKyAqICAgICAgICAgICAgIGluIG5ldHdvcmsgYnl0ZSBvcmRlci4KICAqCiAgKiBAd2FybmluZyBXaWxkY2FyZCBTU1JDIHZhbHVlcyBjYW5ub3QgYmUgcmVtb3ZlZCBmcm9tIGEKICAqICAgICAgICAgIHNlc3Npb24uCi0gKiAKKyAqCiAgKiBAcmV0dXJuCi0gKiAgICAtIGVycl9zdGF0dXNfb2sgICAgIGlmIHRoZSBzdHJlYW0gZGVhbGxvY2F0aW9uIHN1Y2NlZGVkLgorICogICAgLSBzcnRwX2Vycl9zdGF0dXNfb2sgICAgIGlmIHRoZSBzdHJlYW0gZGVhbGxvY2F0aW9uIHN1Y2NlZGVkLgogICogICAgLSBbb3RoZXJdICAgICAgICAgICBvdGhlcndpc2UuCiAgKgogICovCi0KLWVycl9zdGF0dXNfdAotc3J0cF9yZW1vdmVfc3RyZWFtKHNydHBfdCBzZXNzaW9uLCB1aW50MzJfdCBzc3JjKTsKK3NydHBfZXJyX3N0YXR1c190IHNydHBfcmVtb3ZlX3N0cmVhbShzcnRwX3Qgc2Vzc2lvbiwgdW5zaWduZWQgaW50IHNzcmMpOwogCiAvKioKLSAqIEBicmllZiBjcnlwdG9fcG9saWN5X3NldF9ydHBfZGVmYXVsdCgpIHNldHMgYSBjcnlwdG8gcG9saWN5CisgKiBAYnJpZWYgc3J0cF91cGRhdGUoKSB1ZHBhdGVzIGFsbCBzdHJlYW1zIGluIHRoZSBzZXNzaW9uLgorICoKKyAqIFRoZSBmdW5jdGlvbiBjYWxsIHNydHBfdXBkYXRlKHNlc3Npb24sIHBvbGljeSkgdXBkYXRlcworICogYWxsIHRoZSBzdHJlYW1zIGluIHRoZSBzZXNzaW9uIGFwcGx5aW5nIHRoZSBnaXZlbiBwb2xpY3kKKyAqIGFuZCBrZXkuIFRoZSBleHNpc3RpbmcgUk9DIHZhbHVlIG9mIGFsbCBzdHJlYW1zIHdpbGwgYmUKKyAqIHByZXNlcnZlZC4KKyAqCisgKiBAcGFyYW0gc2Vzc2lvbiBpcyB0aGUgU1JUUCBzZXNzaW9uIHRoYXQgY29udGFpbnMgdGhlIHN0cmVhbXMKKyAqICAgICAgICB0byBiZSB1cGRhdGVkLgorICoKKyAqIEBwYXJhbSBwb2xpY3kgaXMgdGhlIHNydHBfcG9saWN5X3Qgc3RydWN0IHRoYXQgZGVzY3JpYmVzIHRoZSBwb2xpY3kKKyAqIGZvciB0aGUgc2Vzc2lvbi4gIFRoZSBzdHJ1Y3QgbWF5IGJlIGEgc2luZ2xlIGVsZW1lbnQsIG9yIGl0IG1heSBiZQorICogdGhlIGhlYWQgb2YgYSBsaXN0LCBpbiB3aGljaCBjYXNlIGVhY2ggZWxlbWVudCBvZiB0aGUgbGlzdCBpcworICogcHJvY2Vzc2VkLiBUaGUgZmluYWwgZWxlbWVudCBvZiB0aGUgbGlzdCBAYiBtdXN0CisgKiBoYXZlIGl0cyBgbmV4dCcgZmllbGQgc2V0IHRvIE5VTEwuCisgKgorICogQHJldHVybgorICogICAgLSBzcnRwX2Vycl9zdGF0dXNfb2sgICAgICAgICAgIGlmIHN0cmVhbSBjcmVhdGlvbiBzdWNjZWRlZC4KKyAqICAgIC0gc3J0cF9lcnJfc3RhdHVzX2FsbG9jX2ZhaWwgICBpZiBzdHJlYW0gYWxsb2NhdGlvbiBmYWlsZWQKKyAqICAgIC0gc3J0cF9lcnJfc3RhdHVzX2luaXRfZmFpbCAgICBpZiBzdHJlYW0gaW5pdGlhbGl6YXRpb24gZmFpbGVkLgorICogICAgLSBbb3RoZXJdICAgICAgICAgICAgICAgICBvdGhlcndpc2UuCisgKgorICovCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX3VwZGF0ZShzcnRwX3Qgc2Vzc2lvbiwgY29uc3Qgc3J0cF9wb2xpY3lfdCAqcG9saWN5KTsKKworLyoqCisgKiBAYnJpZWYgc3J0cF91cGRhdGVfc3RyZWFtKCkgdWRwYXRlcyBhIFNSVFAgc3RyZWFtLgorICoKKyAqIFRoZSBmdW5jdGlvbiBjYWxsIHNydHBfdXBkYXRlX3N0cmVhbShzZXNzaW9uLCBwb2xpY3kpIHVwZGF0ZXMKKyAqIHRoZSBzdHJlYW0ocykgaW4gdGhlIHNlc3Npb24gdGhhdCBtYXRjaCBhcHBseWluZyB0aGUgZ2l2ZW4KKyAqIHBvbGljeSBhbmQga2V5LiBUaGUgZXhzaXN0aW5nIFJPQyB2YWx1ZSBvZiBhbGwgc3RyZWFtKHMpIHdpbGwKKyAqIGJlIHByZXNlcnZlZC4KKyAqCisgKiBAcGFyYW0gc2Vzc2lvbiBpcyB0aGUgU1JUUCBzZXNzaW9uIHRoYXQgY29udGFpbnMgdGhlIHN0cmVhbXMKKyAqICAgICAgICB0byBiZSB1cGRhdGVkLgorICoKKyAqIEBwYXJhbSBwb2xpY3kgaXMgdGhlIHNydHBfcG9saWN5X3Qgc3RydWN0IHRoYXQgZGVzY3JpYmVzIHRoZSBwb2xpY3kKKyAqIGZvciB0aGUgc2Vzc2lvbi4KKyAqCisgKiBAcmV0dXJuCisgKiAgICAtIHNydHBfZXJyX3N0YXR1c19vayAgICAgICAgICAgaWYgc3RyZWFtIGNyZWF0aW9uIHN1Y2NlZGVkLgorICogICAgLSBzcnRwX2Vycl9zdGF0dXNfYWxsb2NfZmFpbCAgIGlmIHN0cmVhbSBhbGxvY2F0aW9uIGZhaWxlZAorICogICAgLSBzcnRwX2Vycl9zdGF0dXNfaW5pdF9mYWlsICAgIGlmIHN0cmVhbSBpbml0aWFsaXphdGlvbiBmYWlsZWQuCisgKiAgICAtIFtvdGhlcl0gICAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlLgorICoKKyAqLworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF91cGRhdGVfc3RyZWFtKHNydHBfdCBzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNydHBfcG9saWN5X3QgKnBvbGljeSk7CisKKy8qKgorICogQGJyaWVmIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfcnRwX2RlZmF1bHQoKSBzZXRzIGEgY3J5cHRvIHBvbGljeQogICogc3RydWN0dXJlIHRvIHRoZSBTUlRQIGRlZmF1bHQgcG9saWN5IGZvciBSVFAgcHJvdGVjdGlvbi4KICAqCi0gKiBAcGFyYW0gcCBpcyBhIHBvaW50ZXIgdG8gdGhlIHBvbGljeSBzdHJ1Y3V0cmUgdG8gYmUgc2V0IHRvIHRoZQotICogZGVmYXVsdCBwb2xpY3kuCi0gKiAKLSAqIFRoZSBmdW5jdGlvbiBjYWxsIGNyeXB0b19wb2xpY3lfc2V0X3J0cF9kZWZhdWx0KCZwKSBzZXRzIHRoZQotICogY3J5cHRvX3BvbGljeV90IGF0IGxvY2F0aW9uIHAgdG8gdGhlIFNSVFAgZGVmYXVsdCBwb2xpY3kgZm9yIFJUUAorICogQHBhcmFtIHAgaXMgYSBwb2ludGVyIHRvIHRoZSBwb2xpY3kgc3RydWN0dXJlIHRvIGJlIHNldAorICoKKyAqIFRoZSBmdW5jdGlvbiBjYWxsIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfcnRwX2RlZmF1bHQoJnApIHNldHMgdGhlCisgKiBzcnRwX2NyeXB0b19wb2xpY3lfdCBhdCBsb2NhdGlvbiBwIHRvIHRoZSBTUlRQIGRlZmF1bHQgcG9saWN5IGZvciBSVFAKICAqIHByb3RlY3Rpb24sIGFzIGRlZmluZWQgaW4gdGhlIHNwZWNpZmljYXRpb24uICBUaGlzIGZ1bmN0aW9uIGlzIGEKICAqIGNvbnZlbmllbmNlIHRoYXQgaGVscHMgdG8gYXZvaWQgZGVhbGluZyBkaXJlY3RseSB3aXRoIHRoZSBwb2xpY3kKICAqIGRhdGEgc3RydWN0dXJlLiAgWW91IGFyZSBlbmNvdXJhZ2VkIHRvIGluaXRpYWxpemUgcG9saWN5IGVsZW1lbnRzCiAgKiB3aXRoIHRoaXMgZnVuY3Rpb24gY2FsbC4gIERvaW5nIHNvIG1heSBhbGxvdyB5b3VyIGNvZGUgdG8gYmUKICAqIGZvcndhcmQgY29tcGF0aWJsZSB3aXRoIGxhdGVyIHZlcnNpb25zIG9mIGxpYlNSVFAgdGhhdCBpbmNsdWRlIG1vcmUKLSAqIGVsZW1lbnRzIGluIHRoZSBjcnlwdG9fcG9saWN5X3QgZGF0YXR5cGUuCi0gKiAKKyAqIGVsZW1lbnRzIGluIHRoZSBzcnRwX2NyeXB0b19wb2xpY3lfdCBkYXRhdHlwZS4KKyAqCiAgKiBAcmV0dXJuIHZvaWQuCi0gKiAKKyAqCiAgKi8KLQotdm9pZAotY3J5cHRvX3BvbGljeV9zZXRfcnRwX2RlZmF1bHQoY3J5cHRvX3BvbGljeV90ICpwKTsKK3ZvaWQgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9ydHBfZGVmYXVsdChzcnRwX2NyeXB0b19wb2xpY3lfdCAqcCk7CiAKIC8qKgotICogQGJyaWVmIGNyeXB0b19wb2xpY3lfc2V0X3J0Y3BfZGVmYXVsdCgpIHNldHMgYSBjcnlwdG8gcG9saWN5CisgKiBAYnJpZWYgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9ydGNwX2RlZmF1bHQoKSBzZXRzIGEgY3J5cHRvIHBvbGljeQogICogc3RydWN0dXJlIHRvIHRoZSBTUlRQIGRlZmF1bHQgcG9saWN5IGZvciBSVENQIHByb3RlY3Rpb24uCiAgKgotICogQHBhcmFtIHAgaXMgYSBwb2ludGVyIHRvIHRoZSBwb2xpY3kgc3RydWN1dHJlIHRvIGJlIHNldCB0byB0aGUKLSAqIGRlZmF1bHQgcG9saWN5LgotICogCi0gKiBUaGUgZnVuY3Rpb24gY2FsbCBjcnlwdG9fcG9saWN5X3NldF9ydGNwX2RlZmF1bHQoJnApIHNldHMgdGhlCi0gKiBjcnlwdG9fcG9saWN5X3QgYXQgbG9jYXRpb24gcCB0byB0aGUgU1JUUCBkZWZhdWx0IHBvbGljeSBmb3IgUlRDUAorICogQHBhcmFtIHAgaXMgYSBwb2ludGVyIHRvIHRoZSBwb2xpY3kgc3RydWN0dXJlIHRvIGJlIHNldAorICoKKyAqIFRoZSBmdW5jdGlvbiBjYWxsIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfcnRjcF9kZWZhdWx0KCZwKSBzZXRzIHRoZQorICogc3J0cF9jcnlwdG9fcG9saWN5X3QgYXQgbG9jYXRpb24gcCB0byB0aGUgU1JUUCBkZWZhdWx0IHBvbGljeSBmb3IgUlRDUAogICogcHJvdGVjdGlvbiwgYXMgZGVmaW5lZCBpbiB0aGUgc3BlY2lmaWNhdGlvbi4gIFRoaXMgZnVuY3Rpb24gaXMgYQogICogY29udmVuaWVuY2UgdGhhdCBoZWxwcyB0byBhdm9pZCBkZWFsaW5nIGRpcmVjdGx5IHdpdGggdGhlIHBvbGljeQogICogZGF0YSBzdHJ1Y3R1cmUuICBZb3UgYXJlIGVuY291cmFnZWQgdG8gaW5pdGlhbGl6ZSBwb2xpY3kgZWxlbWVudHMKICAqIHdpdGggdGhpcyBmdW5jdGlvbiBjYWxsLiAgRG9pbmcgc28gbWF5IGFsbG93IHlvdXIgY29kZSB0byBiZQogICogZm9yd2FyZCBjb21wYXRpYmxlIHdpdGggbGF0ZXIgdmVyc2lvbnMgb2YgbGliU1JUUCB0aGF0IGluY2x1ZGUgbW9yZQotICogZWxlbWVudHMgaW4gdGhlIGNyeXB0b19wb2xpY3lfdCBkYXRhdHlwZS4KLSAqIAorICogZWxlbWVudHMgaW4gdGhlIHNydHBfY3J5cHRvX3BvbGljeV90IGRhdGF0eXBlLgorICoKICAqIEByZXR1cm4gdm9pZC4KLSAqIAorICoKICAqLwordm9pZCBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X3J0Y3BfZGVmYXVsdChzcnRwX2NyeXB0b19wb2xpY3lfdCAqcCk7CiAKLXZvaWQKLWNyeXB0b19wb2xpY3lfc2V0X3J0Y3BfZGVmYXVsdChjcnlwdG9fcG9saWN5X3QgKnApOworLyoqCisgKiBAYnJpZWYgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfY21fMTI4X2htYWNfc2hhMV84MCgpIHNldHMgYSBjcnlwdG8KKyAqIHBvbGljeSBzdHJ1Y3R1cmUgdG8gdGhlIFNSVFAgZGVmYXVsdCBwb2xpY3kgZm9yIFJUUCBwcm90ZWN0aW9uLgorICoKKyAqIEBwYXJhbSBwIGlzIGEgcG9pbnRlciB0byB0aGUgcG9saWN5IHN0cnVjdHVyZSB0byBiZSBzZXQKKyAqCisgKiBUaGUgZnVuY3Rpb24gc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfY21fMTI4X2htYWNfc2hhMV84MCgpIGlzIGEKKyAqIHN5bm9ueW0gZm9yIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfcnRwX2RlZmF1bHQoKS4gIEl0IGNvbmZvcm1zIHRvIHRoZQorICogbmFtaW5nIGNvbnZlbnRpb24gdXNlZCBpbiBSRkMgNDU2OCAoU0RQIFNlY3VyaXR5IERlc2NyaXB0aW9ucyBmb3IKKyAqIE1lZGlhIFN0cmVhbXMpLgorICoKKyAqIEByZXR1cm4gdm9pZC4KKyAqCisgKi8KKyNkZWZpbmUgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfY21fMTI4X2htYWNfc2hhMV84MChwKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9ydHBfZGVmYXVsdChwKQorCisvKioKKyAqIEBicmllZiBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8xMjhfaG1hY19zaGExXzMyKCkgc2V0cyBhIGNyeXB0bworICogcG9saWN5IHN0cnVjdHVyZSB0byBhIHNob3J0LWF1dGhlbnRpY2F0aW9uIHRhZyBwb2xpY3kKKyAqCisgKiBAcGFyYW0gcCBpcyBhIHBvaW50ZXIgdG8gdGhlIHBvbGljeSBzdHJ1Y3R1cmUgdG8gYmUgc2V0CisgKgorICogVGhlIGZ1bmN0aW9uIGNhbGwgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfY21fMTI4X2htYWNfc2hhMV8zMigmcCkKKyAqIHNldHMgdGhlIHNydHBfY3J5cHRvX3BvbGljeV90IGF0IGxvY2F0aW9uIHAgdG8gdXNlIHBvbGljeQorICogQUVTX0NNXzEyOF9ITUFDX1NIQTFfMzIgYXMgZGVmaW5lZCBpbiBSRkMgNDU2OC4KKyAqIFRoaXMgcG9saWN5IHVzZXMgQUVTLTEyOAorICogQ291bnRlciBNb2RlIGVuY3J5cHRpb24gYW5kIEhNQUMtU0hBMSBhdXRoZW50aWNhdGlvbiwgd2l0aCBhbgorICogYXV0aGVudGljYXRpb24gdGFnIHRoYXQgaXMgb25seSAzMiBiaXRzIGxvbmcuICBUaGlzIGxlbmd0aCBpcworICogY29uc2lkZXJlZCBhZGVxdWF0ZSBvbmx5IGZvciBwcm90ZWN0aW5nIGF1ZGlvIGFuZCB2aWRlbyBtZWRpYSB0aGF0CisgKiB1c2UgYSBzdGF0ZWxlc3MgcGxheWJhY2sgZnVuY3Rpb24uICBTZWUgU2VjdGlvbiA3LjUgb2YgUkZDIDM3MTEKKyAqIChodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMzNzExLnR4dCkuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBhIGNvbnZlbmllbmNlIHRoYXQgaGVscHMgdG8gYXZvaWQgZGVhbGluZyBkaXJlY3RseQorICogd2l0aCB0aGUgcG9saWN5IGRhdGEgc3RydWN0dXJlLiAgWW91IGFyZSBlbmNvdXJhZ2VkIHRvIGluaXRpYWxpemUKKyAqIHBvbGljeSBlbGVtZW50cyB3aXRoIHRoaXMgZnVuY3Rpb24gY2FsbC4gIERvaW5nIHNvIG1heSBhbGxvdyB5b3VyCisgKiBjb2RlIHRvIGJlIGZvcndhcmQgY29tcGF0aWJsZSB3aXRoIGxhdGVyIHZlcnNpb25zIG9mIGxpYlNSVFAgdGhhdAorICogaW5jbHVkZSBtb3JlIGVsZW1lbnRzIGluIHRoZSBzcnRwX2NyeXB0b19wb2xpY3lfdCBkYXRhdHlwZS4KKyAqCisgKiBAd2FybmluZyBUaGlzIGNyeXB0byBwb2xpY3kgaXMgaW50ZW5kZWQgZm9yIHVzZSBpbiBTUlRQLCBidXQgbm90IGluCisgKiBTUlRDUC4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgYSBwb2xpY3kgdGhhdCB1c2VzIGxvbmdlcgorICogYXV0aGVudGljYXRpb24gdGFncyBiZSB1c2VkIGZvciBTUlRDUC4gIFNlZSBTZWN0aW9uIDcuNSBvZiBSRkMgMzcxMQorICogKGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzM3MTEudHh0KS4KKyAqCisgKiBAcmV0dXJuIHZvaWQuCisgKgorICovCit2b2lkIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2NtXzEyOF9obWFjX3NoYTFfMzIoc3J0cF9jcnlwdG9fcG9saWN5X3QgKnApOworCisvKioKKyAqIEBicmllZiBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8xMjhfbnVsbF9hdXRoKCkgc2V0cyBhIGNyeXB0bworICogcG9saWN5IHN0cnVjdHVyZSB0byBhbiBlbmNyeXB0aW9uLW9ubHkgcG9saWN5CisgKgorICogQHBhcmFtIHAgaXMgYSBwb2ludGVyIHRvIHRoZSBwb2xpY3kgc3RydWN0dXJlIHRvIGJlIHNldAorICoKKyAqIFRoZSBmdW5jdGlvbiBjYWxsIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2NtXzEyOF9udWxsX2F1dGgoJnApIHNldHMKKyAqIHRoZSBzcnRwX2NyeXB0b19wb2xpY3lfdCBhdCBsb2NhdGlvbiBwIHRvIHVzZSB0aGUgU1JUUCBkZWZhdWx0IGNpcGhlcgorICogKEFFUy0xMjggQ291bnRlciBNb2RlKSwgYnV0IHRvIHVzZSBubyBhdXRoZW50aWNhdGlvbiBtZXRob2QuICBUaGlzCisgKiBwb2xpY3kgaXMgTk9UIFJFQ09NTUVOREVEIHVubGVzcyBpdCBpcyB1bmF2b2lkYWJsZTsgc2VlIFNlY3Rpb24gNy41CisgKiBvZiBSRkMgMzcxMSAoaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzcxMS50eHQpLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgYSBjb252ZW5pZW5jZSB0aGF0IGhlbHBzIHRvIGF2b2lkIGRlYWxpbmcgZGlyZWN0bHkKKyAqIHdpdGggdGhlIHBvbGljeSBkYXRhIHN0cnVjdHVyZS4gIFlvdSBhcmUgZW5jb3VyYWdlZCB0byBpbml0aWFsaXplCisgKiBwb2xpY3kgZWxlbWVudHMgd2l0aCB0aGlzIGZ1bmN0aW9uIGNhbGwuICBEb2luZyBzbyBtYXkgYWxsb3cgeW91cgorICogY29kZSB0byBiZSBmb3J3YXJkIGNvbXBhdGlibGUgd2l0aCBsYXRlciB2ZXJzaW9ucyBvZiBsaWJTUlRQIHRoYXQKKyAqIGluY2x1ZGUgbW9yZSBlbGVtZW50cyBpbiB0aGUgc3J0cF9jcnlwdG9fcG9saWN5X3QgZGF0YXR5cGUuCisgKgorICogQHdhcm5pbmcgVGhpcyBwb2xpY3kgaXMgTk9UIFJFQ09NTUVOREVEIGZvciBTUlRQIHVubGVzcyBpdCBpcworICogdW5hdm9pZGFibGUsIGFuZCBpdCBpcyBOT1QgUkVDT01NRU5ERUQgYXQgYWxsIGZvciBTUlRDUDsgc2VlCisgKiBTZWN0aW9uIDcuNSBvZiBSRkMgMzcxMSAoaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzcxMS50eHQpLgorICoKKyAqIEByZXR1cm4gdm9pZC4KKyAqCisgKi8KK3ZvaWQgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfY21fMTI4X251bGxfYXV0aChzcnRwX2NyeXB0b19wb2xpY3lfdCAqcCk7CisKKy8qKgorICogQGJyaWVmIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfbnVsbF9jaXBoZXJfaG1hY19zaGExXzgwKCkgc2V0cyBhIGNyeXB0bworICogcG9saWN5IHN0cnVjdHVyZSB0byBhbiBhdXRoZW50aWNhdGlvbi1vbmx5IHBvbGljeQorICoKKyAqIEBwYXJhbSBwIGlzIGEgcG9pbnRlciB0byB0aGUgcG9saWN5IHN0cnVjdHVyZSB0byBiZSBzZXQKKyAqCisgKiBUaGUgZnVuY3Rpb24gY2FsbCBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X251bGxfY2lwaGVyX2htYWNfc2hhMV84MCgmcCkKKyAqIHNldHMgdGhlIHNydHBfY3J5cHRvX3BvbGljeV90IGF0IGxvY2F0aW9uIHAgdG8gdXNlIEhNQUMtU0hBMSB3aXRoIGFuIDgwCisgKiBiaXQgYXV0aGVudGljYXRpb24gdGFnIHRvIHByb3ZpZGUgbWVzc2FnZSBhdXRoZW50aWNhdGlvbiwgYnV0IHRvCisgKiB1c2Ugbm8gZW5jcnlwdGlvbi4gIFRoaXMgcG9saWN5IGlzIE5PVCBSRUNPTU1FTkRFRCBmb3IgU1JUUCB1bmxlc3MKKyAqIHRoZXJlIGlzIGEgcmVxdWlyZW1lbnQgdG8gZm9yZWdvIGVuY3J5cHRpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBhIGNvbnZlbmllbmNlIHRoYXQgaGVscHMgdG8gYXZvaWQgZGVhbGluZyBkaXJlY3RseQorICogd2l0aCB0aGUgcG9saWN5IGRhdGEgc3RydWN0dXJlLiAgWW91IGFyZSBlbmNvdXJhZ2VkIHRvIGluaXRpYWxpemUKKyAqIHBvbGljeSBlbGVtZW50cyB3aXRoIHRoaXMgZnVuY3Rpb24gY2FsbC4gIERvaW5nIHNvIG1heSBhbGxvdyB5b3VyCisgKiBjb2RlIHRvIGJlIGZvcndhcmQgY29tcGF0aWJsZSB3aXRoIGxhdGVyIHZlcnNpb25zIG9mIGxpYlNSVFAgdGhhdAorICogaW5jbHVkZSBtb3JlIGVsZW1lbnRzIGluIHRoZSBzcnRwX2NyeXB0b19wb2xpY3lfdCBkYXRhdHlwZS4KKyAqCisgKiBAd2FybmluZyBUaGlzIHBvbGljeSBpcyBOT1QgUkVDT01NRU5ERUQgZm9yIFNSVFAgdW5sZXNzIHRoZXJlIGlzIGEKKyAqIHJlcXVpcmVtZW50IHRvIGZvcmVnbyBlbmNyeXB0aW9uLgorICoKKyAqIEByZXR1cm4gdm9pZC4KKyAqCisgKi8KK3ZvaWQgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9udWxsX2NpcGhlcl9obWFjX3NoYTFfODAoc3J0cF9jcnlwdG9fcG9saWN5X3QgKnApOworCisvKioKKyAqIEBicmllZiBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X251bGxfY2lwaGVyX2htYWNfbnVsbCgpIHNldHMgYSBjcnlwdG8KKyAqIHBvbGljeSBzdHJ1Y3R1cmUgdG8gdXNlIG5vIGVuY3J5cHRpb24gb3IgYXV0aGVudGljYXRpb24uCisgKgorICogQHBhcmFtIHAgaXMgYSBwb2ludGVyIHRvIHRoZSBwb2xpY3kgc3RydWN0dXJlIHRvIGJlIHNldAorICoKKyAqIFRoZSBmdW5jdGlvbiBjYWxsIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfbnVsbF9jaXBoZXJfaG1hY19udWxsKCZwKQorICogc2V0cyB0aGUgc3J0cF9jcnlwdG9fcG9saWN5X3QgYXQgbG9jYXRpb24gcCB0byB1c2Ugbm8gZW5jcnlwdGlvbiBhbmQKKyAqIG5vIGF1dGhlbnRpY2F0aW9uLiAgVGhpcyBwb2xpY3kgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgdGVzdGluZyBhbmQKKyAqIHRyb3VibGVzaG9vdGluZ2wuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBhIGNvbnZlbmllbmNlIHRoYXQgaGVscHMgdG8gYXZvaWQgZGVhbGluZyBkaXJlY3RseQorICogd2l0aCB0aGUgcG9saWN5IGRhdGEgc3RydWN0dXJlLiAgWW91IGFyZSBlbmNvdXJhZ2VkIHRvIGluaXRpYWxpemUKKyAqIHBvbGljeSBlbGVtZW50cyB3aXRoIHRoaXMgZnVuY3Rpb24gY2FsbC4gIERvaW5nIHNvIG1heSBhbGxvdyB5b3VyCisgKiBjb2RlIHRvIGJlIGZvcndhcmQgY29tcGF0aWJsZSB3aXRoIGxhdGVyIHZlcnNpb25zIG9mIGxpYlNSVFAgdGhhdAorICogaW5jbHVkZSBtb3JlIGVsZW1lbnRzIGluIHRoZSBzcnRwX2NyeXB0b19wb2xpY3lfdCBkYXRhdHlwZS4KKyAqCisgKiBAd2FybmluZyBUaGlzIHBvbGljeSBpcyBOT1QgUkVDT01NRU5ERUQgZm9yIFNSVFAgdW5sZXNzIHRoZXJlIGlzIGEKKyAqIHJlcXVpcmVtZW50IHRvIGZvcmVnbyBlbmNyeXB0aW9uIGFuZCBhdXRoZW50aWNhdGlvbi4KKyAqCisgKiBAcmV0dXJuIHZvaWQuCisgKgorICovCit2b2lkIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfbnVsbF9jaXBoZXJfaG1hY19udWxsKHNydHBfY3J5cHRvX3BvbGljeV90ICpwKTsKKworLyoqCisgKiBAYnJpZWYgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfY21fMjU2X2htYWNfc2hhMV84MCgpIHNldHMgYSBjcnlwdG8KKyAqIHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBlbmNyeXB0aW9uIGFuZCBhdXRoZW50aWNhdGlvbiBwb2xpY3kgdXNpbmcgQUVTLTI1NgorICogZm9yIFJUUCBwcm90ZWN0aW9uLgorICoKKyAqIEBwYXJhbSBwIGlzIGEgcG9pbnRlciB0byB0aGUgcG9saWN5IHN0cnVjdHVyZSB0byBiZSBzZXQKKyAqCisgKiBUaGUgZnVuY3Rpb24gY2FsbCBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8yNTZfaG1hY19zaGExXzgwKCZwKQorICogc2V0cyB0aGUgc3J0cF9jcnlwdG9fcG9saWN5X3QgYXQgbG9jYXRpb24gcCB0byB1c2UgcG9saWN5CisgKiBBRVNfQ01fMjU2X0hNQUNfU0hBMV84MCBhcyBkZWZpbmVkIGluIFJGQyA2MTg4LiAgVGhpcyBwb2xpY3kgdXNlcyBBRVMtMjU2CisgKiBDb3VudGVyIE1vZGUgZW5jcnlwdGlvbiBhbmQgSE1BQy1TSEExIGF1dGhlbnRpY2F0aW9uLCB3aXRoIGFuIDgwIGJpdAorICogYXV0aGVudGljYXRpb24gdGFnLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgYSBjb252ZW5pZW5jZSB0aGF0IGhlbHBzIHRvIGF2b2lkIGRlYWxpbmcgZGlyZWN0bHkKKyAqIHdpdGggdGhlIHBvbGljeSBkYXRhIHN0cnVjdHVyZS4gIFlvdSBhcmUgZW5jb3VyYWdlZCB0byBpbml0aWFsaXplCisgKiBwb2xpY3kgZWxlbWVudHMgd2l0aCB0aGlzIGZ1bmN0aW9uIGNhbGwuICBEb2luZyBzbyBtYXkgYWxsb3cgeW91cgorICogY29kZSB0byBiZSBmb3J3YXJkIGNvbXBhdGlibGUgd2l0aCBsYXRlciB2ZXJzaW9ucyBvZiBsaWJTUlRQIHRoYXQKKyAqIGluY2x1ZGUgbW9yZSBlbGVtZW50cyBpbiB0aGUgc3J0cF9jcnlwdG9fcG9saWN5X3QgZGF0YXR5cGUuCisgKgorICogQHJldHVybiB2b2lkLgorICoKKyAqLwordm9pZCBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8yNTZfaG1hY19zaGExXzgwKHNydHBfY3J5cHRvX3BvbGljeV90ICpwKTsKKworLyoqCisgKiBAYnJpZWYgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfY21fMjU2X2htYWNfc2hhMV8zMigpIHNldHMgYSBjcnlwdG8KKyAqIHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBzaG9ydC1hdXRoZW50aWNhdGlvbiB0YWcgcG9saWN5IHVzaW5nIEFFUy0yNTYKKyAqIGVuY3J5cHRpb24uCisgKgorICogQHBhcmFtIHAgaXMgYSBwb2ludGVyIHRvIHRoZSBwb2xpY3kgc3RydWN0dXJlIHRvIGJlIHNldAorICoKKyAqIFRoZSBmdW5jdGlvbiBjYWxsIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2NtXzI1Nl9obWFjX3NoYTFfMzIoJnApCisgKiBzZXRzIHRoZSBzcnRwX2NyeXB0b19wb2xpY3lfdCBhdCBsb2NhdGlvbiBwIHRvIHVzZSBwb2xpY3kKKyAqIEFFU19DTV8yNTZfSE1BQ19TSEExXzMyIGFzIGRlZmluZWQgaW4gUkZDIDYxODguICBUaGlzIHBvbGljeSB1c2VzIEFFUy0yNTYKKyAqIENvdW50ZXIgTW9kZSBlbmNyeXB0aW9uIGFuZCBITUFDLVNIQTEgYXV0aGVudGljYXRpb24sIHdpdGggYW4KKyAqIGF1dGhlbnRpY2F0aW9uIHRhZyB0aGF0IGlzIG9ubHkgMzIgYml0cyBsb25nLiAgVGhpcyBsZW5ndGggaXMKKyAqIGNvbnNpZGVyZWQgYWRlcXVhdGUgb25seSBmb3IgcHJvdGVjdGluZyBhdWRpbyBhbmQgdmlkZW8gbWVkaWEgdGhhdAorICogdXNlIGEgc3RhdGVsZXNzIHBsYXliYWNrIGZ1bmN0aW9uLiAgU2VlIFNlY3Rpb24gNy41IG9mIFJGQyAzNzExCisgKiAoaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzcxMS50eHQpLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgYSBjb252ZW5pZW5jZSB0aGF0IGhlbHBzIHRvIGF2b2lkIGRlYWxpbmcgZGlyZWN0bHkKKyAqIHdpdGggdGhlIHBvbGljeSBkYXRhIHN0cnVjdHVyZS4gIFlvdSBhcmUgZW5jb3VyYWdlZCB0byBpbml0aWFsaXplCisgKiBwb2xpY3kgZWxlbWVudHMgd2l0aCB0aGlzIGZ1bmN0aW9uIGNhbGwuICBEb2luZyBzbyBtYXkgYWxsb3cgeW91cgorICogY29kZSB0byBiZSBmb3J3YXJkIGNvbXBhdGlibGUgd2l0aCBsYXRlciB2ZXJzaW9ucyBvZiBsaWJTUlRQIHRoYXQKKyAqIGluY2x1ZGUgbW9yZSBlbGVtZW50cyBpbiB0aGUgc3J0cF9jcnlwdG9fcG9saWN5X3QgZGF0YXR5cGUuCisgKgorICogQHdhcm5pbmcgVGhpcyBjcnlwdG8gcG9saWN5IGlzIGludGVuZGVkIGZvciB1c2UgaW4gU1JUUCwgYnV0IG5vdCBpbgorICogU1JUQ1AuICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGEgcG9saWN5IHRoYXQgdXNlcyBsb25nZXIKKyAqIGF1dGhlbnRpY2F0aW9uIHRhZ3MgYmUgdXNlZCBmb3IgU1JUQ1AuICBTZWUgU2VjdGlvbiA3LjUgb2YgUkZDIDM3MTEKKyAqIChodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMzNzExLnR4dCkuCisgKgorICogQHJldHVybiB2b2lkLgorICoKKyAqLwordm9pZCBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8yNTZfaG1hY19zaGExXzMyKHNydHBfY3J5cHRvX3BvbGljeV90ICpwKTsKKworLyoqCisgKiBAYnJpZWYgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfY21fMjU2X251bGxfYXV0aCgpIHNldHMgYSBjcnlwdG8KKyAqIHBvbGljeSBzdHJ1Y3R1cmUgdG8gYW4gZW5jcnlwdGlvbi1vbmx5IHBvbGljeQorICoKKyAqIEBwYXJhbSBwIGlzIGEgcG9pbnRlciB0byB0aGUgcG9saWN5IHN0cnVjdHVyZSB0byBiZSBzZXQKKyAqCisgKiBUaGUgZnVuY3Rpb24gY2FsbCBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8yNTZfbnVsbF9hdXRoKCZwKSBzZXRzCisgKiB0aGUgc3J0cF9jcnlwdG9fcG9saWN5X3QgYXQgbG9jYXRpb24gcCB0byB1c2UgdGhlIFNSVFAgZGVmYXVsdCBjaXBoZXIKKyAqIChBRVMtMjU2IENvdW50ZXIgTW9kZSksIGJ1dCB0byB1c2Ugbm8gYXV0aGVudGljYXRpb24gbWV0aG9kLiAgVGhpcworICogcG9saWN5IGlzIE5PVCBSRUNPTU1FTkRFRCB1bmxlc3MgaXQgaXMgdW5hdm9pZGFibGU7IHNlZSBTZWN0aW9uIDcuNQorICogb2YgUkZDIDM3MTEgKGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzM3MTEudHh0KS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGEgY29udmVuaWVuY2UgdGhhdCBoZWxwcyB0byBhdm9pZCBkZWFsaW5nIGRpcmVjdGx5CisgKiB3aXRoIHRoZSBwb2xpY3kgZGF0YSBzdHJ1Y3R1cmUuICBZb3UgYXJlIGVuY291cmFnZWQgdG8gaW5pdGlhbGl6ZQorICogcG9saWN5IGVsZW1lbnRzIHdpdGggdGhpcyBmdW5jdGlvbiBjYWxsLiAgRG9pbmcgc28gbWF5IGFsbG93IHlvdXIKKyAqIGNvZGUgdG8gYmUgZm9yd2FyZCBjb21wYXRpYmxlIHdpdGggbGF0ZXIgdmVyc2lvbnMgb2YgbGliU1JUUCB0aGF0CisgKiBpbmNsdWRlIG1vcmUgZWxlbWVudHMgaW4gdGhlIHNydHBfY3J5cHRvX3BvbGljeV90IGRhdGF0eXBlLgorICoKKyAqIEB3YXJuaW5nIFRoaXMgcG9saWN5IGlzIE5PVCBSRUNPTU1FTkRFRCBmb3IgU1JUUCB1bmxlc3MgaXQgaXMKKyAqIHVuYXZvaWRhYmxlLCBhbmQgaXQgaXMgTk9UIFJFQ09NTUVOREVEIGF0IGFsbCBmb3IgU1JUQ1A7IHNlZQorICogU2VjdGlvbiA3LjUgb2YgUkZDIDM3MTEgKGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzM3MTEudHh0KS4KKyAqCisgKiBAcmV0dXJuIHZvaWQuCisgKgorICovCit2b2lkIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2NtXzI1Nl9udWxsX2F1dGgoc3J0cF9jcnlwdG9fcG9saWN5X3QgKnApOworCisvKioKKyAqIEBicmllZiBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8xOTJfaG1hY19zaGExXzgwKCkgc2V0cyBhIGNyeXB0bworICogcG9saWN5IHN0cnVjdHVyZSB0byBhIGVuY3J5cHRpb24gYW5kIGF1dGhlbnRpY2F0aW9uIHBvbGljeSB1c2luZyBBRVMtMTkyCisgKiBmb3IgUlRQIHByb3RlY3Rpb24uCisgKgorICogQHBhcmFtIHAgaXMgYSBwb2ludGVyIHRvIHRoZSBwb2xpY3kgc3RydWN0dXJlIHRvIGJlIHNldAorICoKKyAqIFRoZSBmdW5jdGlvbiBjYWxsIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2NtXzE5Ml9obWFjX3NoYTFfODAoJnApCisgKiBzZXRzIHRoZSBzcnRwX2NyeXB0b19wb2xpY3lfdCBhdCBsb2NhdGlvbiBwIHRvIHVzZSBwb2xpY3kKKyAqIEFFU19DTV8xOTJfSE1BQ19TSEExXzgwIGFzIGRlZmluZWQgaW4gUkZDIDYxODguICBUaGlzIHBvbGljeSB1c2VzIEFFUy0xOTIKKyAqIENvdW50ZXIgTW9kZSBlbmNyeXB0aW9uIGFuZCBITUFDLVNIQTEgYXV0aGVudGljYXRpb24sIHdpdGggYW4gODAgYml0CisgKiBhdXRoZW50aWNhdGlvbiB0YWcuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBhIGNvbnZlbmllbmNlIHRoYXQgaGVscHMgdG8gYXZvaWQgZGVhbGluZyBkaXJlY3RseQorICogd2l0aCB0aGUgcG9saWN5IGRhdGEgc3RydWN0dXJlLiAgWW91IGFyZSBlbmNvdXJhZ2VkIHRvIGluaXRpYWxpemUKKyAqIHBvbGljeSBlbGVtZW50cyB3aXRoIHRoaXMgZnVuY3Rpb24gY2FsbC4gIERvaW5nIHNvIG1heSBhbGxvdyB5b3VyCisgKiBjb2RlIHRvIGJlIGZvcndhcmQgY29tcGF0aWJsZSB3aXRoIGxhdGVyIHZlcnNpb25zIG9mIGxpYlNSVFAgdGhhdAorICogaW5jbHVkZSBtb3JlIGVsZW1lbnRzIGluIHRoZSBzcnRwX2NyeXB0b19wb2xpY3lfdCBkYXRhdHlwZS4KKyAqCisgKiBAcmV0dXJuIHZvaWQuCisgKgorICovCit2b2lkIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2NtXzE5Ml9obWFjX3NoYTFfODAoc3J0cF9jcnlwdG9fcG9saWN5X3QgKnApOworCisvKioKKyAqIEBicmllZiBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8xOTJfaG1hY19zaGExXzMyKCkgc2V0cyBhIGNyeXB0bworICogcG9saWN5IHN0cnVjdHVyZSB0byBhIHNob3J0LWF1dGhlbnRpY2F0aW9uIHRhZyBwb2xpY3kgdXNpbmcgQUVTLTE5MgorICogZW5jcnlwdGlvbi4KKyAqCisgKiBAcGFyYW0gcCBpcyBhIHBvaW50ZXIgdG8gdGhlIHBvbGljeSBzdHJ1Y3R1cmUgdG8gYmUgc2V0CisgKgorICogVGhlIGZ1bmN0aW9uIGNhbGwgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfY21fMTkyX2htYWNfc2hhMV8zMigmcCkKKyAqIHNldHMgdGhlIHNydHBfY3J5cHRvX3BvbGljeV90IGF0IGxvY2F0aW9uIHAgdG8gdXNlIHBvbGljeQorICogQUVTX0NNXzE5Ml9ITUFDX1NIQTFfMzIgYXMgZGVmaW5lZCBpbiBSRkMgNjE4OC4gIFRoaXMgcG9saWN5IHVzZXMgQUVTLTE5MgorICogQ291bnRlciBNb2RlIGVuY3J5cHRpb24gYW5kIEhNQUMtU0hBMSBhdXRoZW50aWNhdGlvbiwgd2l0aCBhbgorICogYXV0aGVudGljYXRpb24gdGFnIHRoYXQgaXMgb25seSAzMiBiaXRzIGxvbmcuICBUaGlzIGxlbmd0aCBpcworICogY29uc2lkZXJlZCBhZGVxdWF0ZSBvbmx5IGZvciBwcm90ZWN0aW5nIGF1ZGlvIGFuZCB2aWRlbyBtZWRpYSB0aGF0CisgKiB1c2UgYSBzdGF0ZWxlc3MgcGxheWJhY2sgZnVuY3Rpb24uICBTZWUgU2VjdGlvbiA3LjUgb2YgUkZDIDM3MTEKKyAqIChodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMzNzExLnR4dCkuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBhIGNvbnZlbmllbmNlIHRoYXQgaGVscHMgdG8gYXZvaWQgZGVhbGluZyBkaXJlY3RseQorICogd2l0aCB0aGUgcG9saWN5IGRhdGEgc3RydWN0dXJlLiAgWW91IGFyZSBlbmNvdXJhZ2VkIHRvIGluaXRpYWxpemUKKyAqIHBvbGljeSBlbGVtZW50cyB3aXRoIHRoaXMgZnVuY3Rpb24gY2FsbC4gIERvaW5nIHNvIG1heSBhbGxvdyB5b3VyCisgKiBjb2RlIHRvIGJlIGZvcndhcmQgY29tcGF0aWJsZSB3aXRoIGxhdGVyIHZlcnNpb25zIG9mIGxpYlNSVFAgdGhhdAorICogaW5jbHVkZSBtb3JlIGVsZW1lbnRzIGluIHRoZSBzcnRwX2NyeXB0b19wb2xpY3lfdCBkYXRhdHlwZS4KKyAqCisgKiBAd2FybmluZyBUaGlzIGNyeXB0byBwb2xpY3kgaXMgaW50ZW5kZWQgZm9yIHVzZSBpbiBTUlRQLCBidXQgbm90IGluCisgKiBTUlRDUC4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgYSBwb2xpY3kgdGhhdCB1c2VzIGxvbmdlcgorICogYXV0aGVudGljYXRpb24gdGFncyBiZSB1c2VkIGZvciBTUlRDUC4gIFNlZSBTZWN0aW9uIDcuNSBvZiBSRkMgMzcxMQorICogKGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzM3MTEudHh0KS4KKyAqCisgKiBAcmV0dXJuIHZvaWQuCisgKgorICovCit2b2lkIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2NtXzE5Ml9obWFjX3NoYTFfMzIoc3J0cF9jcnlwdG9fcG9saWN5X3QgKnApOworCisvKioKKyAqIEBicmllZiBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8xOTJfbnVsbF9hdXRoKCkgc2V0cyBhIGNyeXB0bworICogcG9saWN5IHN0cnVjdHVyZSB0byBhbiBlbmNyeXB0aW9uLW9ubHkgcG9saWN5CisgKgorICogQHBhcmFtIHAgaXMgYSBwb2ludGVyIHRvIHRoZSBwb2xpY3kgc3RydWN0dXJlIHRvIGJlIHNldAorICoKKyAqIFRoZSBmdW5jdGlvbiBjYWxsIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2NtXzE5Ml9udWxsX2F1dGgoJnApIHNldHMKKyAqIHRoZSBzcnRwX2NyeXB0b19wb2xpY3lfdCBhdCBsb2NhdGlvbiBwIHRvIHVzZSB0aGUgU1JUUCBkZWZhdWx0IGNpcGhlcgorICogKEFFUy0xOTIgQ291bnRlciBNb2RlKSwgYnV0IHRvIHVzZSBubyBhdXRoZW50aWNhdGlvbiBtZXRob2QuICBUaGlzCisgKiBwb2xpY3kgaXMgTk9UIFJFQ09NTUVOREVEIHVubGVzcyBpdCBpcyB1bmF2b2lkYWJsZTsgc2VlIFNlY3Rpb24gNy41CisgKiBvZiBSRkMgMzcxMSAoaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzcxMS50eHQpLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgYSBjb252ZW5pZW5jZSB0aGF0IGhlbHBzIHRvIGF2b2lkIGRlYWxpbmcgZGlyZWN0bHkKKyAqIHdpdGggdGhlIHBvbGljeSBkYXRhIHN0cnVjdHVyZS4gIFlvdSBhcmUgZW5jb3VyYWdlZCB0byBpbml0aWFsaXplCisgKiBwb2xpY3kgZWxlbWVudHMgd2l0aCB0aGlzIGZ1bmN0aW9uIGNhbGwuICBEb2luZyBzbyBtYXkgYWxsb3cgeW91cgorICogY29kZSB0byBiZSBmb3J3YXJkIGNvbXBhdGlibGUgd2l0aCBsYXRlciB2ZXJzaW9ucyBvZiBsaWJTUlRQIHRoYXQKKyAqIGluY2x1ZGUgbW9yZSBlbGVtZW50cyBpbiB0aGUgc3J0cF9jcnlwdG9fcG9saWN5X3QgZGF0YXR5cGUuCisgKgorICogQHdhcm5pbmcgVGhpcyBwb2xpY3kgaXMgTk9UIFJFQ09NTUVOREVEIGZvciBTUlRQIHVubGVzcyBpdCBpcworICogdW5hdm9pZGFibGUsIGFuZCBpdCBpcyBOT1QgUkVDT01NRU5ERUQgYXQgYWxsIGZvciBTUlRDUDsgc2VlCisgKiBTZWN0aW9uIDcuNSBvZiBSRkMgMzcxMSAoaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzcxMS50eHQpLgorICoKKyAqIEByZXR1cm4gdm9pZC4KKyAqCisgKi8KK3ZvaWQgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfY21fMTkyX251bGxfYXV0aChzcnRwX2NyeXB0b19wb2xpY3lfdCAqcCk7CisKKy8qKgorICogQGJyaWVmIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2djbV8xMjhfOF9hdXRoKCkgc2V0cyBhIGNyeXB0bworICogcG9saWN5IHN0cnVjdHVyZSB0byBhbiBBRUFEIGVuY3J5cHRpb24gcG9saWN5LgorICoKKyAqIEBwYXJhbSBwIGlzIGEgcG9pbnRlciB0byB0aGUgcG9saWN5IHN0cnVjdHVyZSB0byBiZSBzZXQKKyAqCisgKiBUaGUgZnVuY3Rpb24gY2FsbCBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19nY21fMTI4XzhfYXV0aCgmcCkgc2V0cworICogdGhlIHNydHBfY3J5cHRvX3BvbGljeV90IGF0IGxvY2F0aW9uIHAgdG8gdXNlIHRoZSBTUlRQIGRlZmF1bHQgY2lwaGVyCisgKiAoQUVTLTEyOCBHYWxvaXMgQ291bnRlciBNb2RlKSB3aXRoIDggb2N0ZXQgYXV0aCB0YWcuICBUaGlzCisgKiBwb2xpY3kgYXBwbGllcyBjb25maWRlbnRpYWxpdHkgYW5kIGF1dGhlbnRpY2F0aW9uIHRvIGJvdGggdGhlCisgKiBSVFAgYW5kIFJUQ1AgcGFja2V0cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGEgY29udmVuaWVuY2UgdGhhdCBoZWxwcyB0byBhdm9pZCBkZWFsaW5nIGRpcmVjdGx5CisgKiB3aXRoIHRoZSBwb2xpY3kgZGF0YSBzdHJ1Y3R1cmUuICBZb3UgYXJlIGVuY291cmFnZWQgdG8gaW5pdGlhbGl6ZQorICogcG9saWN5IGVsZW1lbnRzIHdpdGggdGhpcyBmdW5jdGlvbiBjYWxsLiAgRG9pbmcgc28gbWF5IGFsbG93IHlvdXIKKyAqIGNvZGUgdG8gYmUgZm9yd2FyZCBjb21wYXRpYmxlIHdpdGggbGF0ZXIgdmVyc2lvbnMgb2YgbGliU1JUUCB0aGF0CisgKiBpbmNsdWRlIG1vcmUgZWxlbWVudHMgaW4gdGhlIHNydHBfY3J5cHRvX3BvbGljeV90IGRhdGF0eXBlLgorICoKKyAqIEByZXR1cm4gdm9pZC4KKyAqCisgKi8KK3ZvaWQgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzEyOF84X2F1dGgoc3J0cF9jcnlwdG9fcG9saWN5X3QgKnApOworCisvKioKKyAqIEBicmllZiBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19nY21fMjU2XzhfYXV0aCgpIHNldHMgYSBjcnlwdG8KKyAqIHBvbGljeSBzdHJ1Y3R1cmUgdG8gYW4gQUVBRCBlbmNyeXB0aW9uIHBvbGljeQorICoKKyAqIEBwYXJhbSBwIGlzIGEgcG9pbnRlciB0byB0aGUgcG9saWN5IHN0cnVjdHVyZSB0byBiZSBzZXQKKyAqCisgKiBUaGUgZnVuY3Rpb24gY2FsbCBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19nY21fMjU2XzhfYXV0aCgmcCkgc2V0cworICogdGhlIHNydHBfY3J5cHRvX3BvbGljeV90IGF0IGxvY2F0aW9uIHAgdG8gdXNlIHRoZSBTUlRQIGRlZmF1bHQgY2lwaGVyCisgKiAoQUVTLTI1NiBHYWxvaXMgQ291bnRlciBNb2RlKSB3aXRoIDggb2N0ZXQgYXV0aCB0YWcuICBUaGlzCisgKiBwb2xpY3kgYXBwbGllcyBjb25maWRlbnRpYWxpdHkgYW5kIGF1dGhlbnRpY2F0aW9uIHRvIGJvdGggdGhlCisgKiBSVFAgYW5kIFJUQ1AgcGFja2V0cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGEgY29udmVuaWVuY2UgdGhhdCBoZWxwcyB0byBhdm9pZCBkZWFsaW5nIGRpcmVjdGx5CisgKiB3aXRoIHRoZSBwb2xpY3kgZGF0YSBzdHJ1Y3R1cmUuICBZb3UgYXJlIGVuY291cmFnZWQgdG8gaW5pdGlhbGl6ZQorICogcG9saWN5IGVsZW1lbnRzIHdpdGggdGhpcyBmdW5jdGlvbiBjYWxsLiAgRG9pbmcgc28gbWF5IGFsbG93IHlvdXIKKyAqIGNvZGUgdG8gYmUgZm9yd2FyZCBjb21wYXRpYmxlIHdpdGggbGF0ZXIgdmVyc2lvbnMgb2YgbGliU1JUUCB0aGF0CisgKiBpbmNsdWRlIG1vcmUgZWxlbWVudHMgaW4gdGhlIHNydHBfY3J5cHRvX3BvbGljeV90IGRhdGF0eXBlLgorICoKKyAqIEByZXR1cm4gdm9pZC4KKyAqCisgKi8KK3ZvaWQgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzI1Nl84X2F1dGgoc3J0cF9jcnlwdG9fcG9saWN5X3QgKnApOworCisvKioKKyAqIEBicmllZiBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19nY21fMTI4Xzhfb25seV9hdXRoKCkgc2V0cyBhIGNyeXB0bworICogcG9saWN5IHN0cnVjdHVyZSB0byBhbiBBRUFEIGF1dGhlbnRpY2F0aW9uLW9ubHkgcG9saWN5CisgKgorICogQHBhcmFtIHAgaXMgYSBwb2ludGVyIHRvIHRoZSBwb2xpY3kgc3RydWN0dXJlIHRvIGJlIHNldAorICoKKyAqIFRoZSBmdW5jdGlvbiBjYWxsIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2djbV8xMjhfOF9vbmx5X2F1dGgoJnApIHNldHMKKyAqIHRoZSBzcnRwX2NyeXB0b19wb2xpY3lfdCBhdCBsb2NhdGlvbiBwIHRvIHVzZSB0aGUgU1JUUCBkZWZhdWx0IGNpcGhlcgorICogKEFFUy0xMjggR2Fsb2lzIENvdW50ZXIgTW9kZSkgd2l0aCA4IG9jdGV0IGF1dGggdGFnLiAgVGhpcyBwb2xpY3kKKyAqIGFwcGxpZXMgY29uZmlkZW50aWFsaXR5IGFuZCBhdXRoZW50aWNhdGlvbiB0byB0aGUgUlRQIHBhY2tldHMsCisgKiBidXQgb25seSBhdXRoZW50aWNhdGlvbiB0byB0aGUgUlRDUCBwYWNrZXRzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgYSBjb252ZW5pZW5jZSB0aGF0IGhlbHBzIHRvIGF2b2lkIGRlYWxpbmcgZGlyZWN0bHkKKyAqIHdpdGggdGhlIHBvbGljeSBkYXRhIHN0cnVjdHVyZS4gIFlvdSBhcmUgZW5jb3VyYWdlZCB0byBpbml0aWFsaXplCisgKiBwb2xpY3kgZWxlbWVudHMgd2l0aCB0aGlzIGZ1bmN0aW9uIGNhbGwuICBEb2luZyBzbyBtYXkgYWxsb3cgeW91cgorICogY29kZSB0byBiZSBmb3J3YXJkIGNvbXBhdGlibGUgd2l0aCBsYXRlciB2ZXJzaW9ucyBvZiBsaWJTUlRQIHRoYXQKKyAqIGluY2x1ZGUgbW9yZSBlbGVtZW50cyBpbiB0aGUgc3J0cF9jcnlwdG9fcG9saWN5X3QgZGF0YXR5cGUuCisgKgorICogQHJldHVybiB2b2lkLgorICoKKyAqLwordm9pZCBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19nY21fMTI4Xzhfb25seV9hdXRoKHNydHBfY3J5cHRvX3BvbGljeV90ICpwKTsKKworLyoqCisgKiBAYnJpZWYgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzI1Nl84X29ubHlfYXV0aCgpIHNldHMgYSBjcnlwdG8KKyAqIHBvbGljeSBzdHJ1Y3R1cmUgdG8gYW4gQUVBRCBhdXRoZW50aWNhdGlvbi1vbmx5IHBvbGljeQorICoKKyAqIEBwYXJhbSBwIGlzIGEgcG9pbnRlciB0byB0aGUgcG9saWN5IHN0cnVjdHVyZSB0byBiZSBzZXQKKyAqCisgKiBUaGUgZnVuY3Rpb24gY2FsbCBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19nY21fMjU2Xzhfb25seV9hdXRoKCZwKSBzZXRzCisgKiB0aGUgc3J0cF9jcnlwdG9fcG9saWN5X3QgYXQgbG9jYXRpb24gcCB0byB1c2UgdGhlIFNSVFAgZGVmYXVsdCBjaXBoZXIKKyAqIChBRVMtMjU2IEdhbG9pcyBDb3VudGVyIE1vZGUpIHdpdGggOCBvY3RldCBhdXRoIHRhZy4gIFRoaXMgcG9saWN5CisgKiBhcHBsaWVzIGNvbmZpZGVudGlhbGl0eSBhbmQgYXV0aGVudGljYXRpb24gdG8gdGhlIFJUUCBwYWNrZXRzLAorICogYnV0IG9ubHkgYXV0aGVudGljYXRpb24gdG8gdGhlIFJUQ1AgcGFja2V0cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGEgY29udmVuaWVuY2UgdGhhdCBoZWxwcyB0byBhdm9pZCBkZWFsaW5nIGRpcmVjdGx5CisgKiB3aXRoIHRoZSBwb2xpY3kgZGF0YSBzdHJ1Y3R1cmUuICBZb3UgYXJlIGVuY291cmFnZWQgdG8gaW5pdGlhbGl6ZQorICogcG9saWN5IGVsZW1lbnRzIHdpdGggdGhpcyBmdW5jdGlvbiBjYWxsLiAgRG9pbmcgc28gbWF5IGFsbG93IHlvdXIKKyAqIGNvZGUgdG8gYmUgZm9yd2FyZCBjb21wYXRpYmxlIHdpdGggbGF0ZXIgdmVyc2lvbnMgb2YgbGliU1JUUCB0aGF0CisgKiBpbmNsdWRlIG1vcmUgZWxlbWVudHMgaW4gdGhlIHNydHBfY3J5cHRvX3BvbGljeV90IGRhdGF0eXBlLgorICoKKyAqIEByZXR1cm4gdm9pZC4KKyAqCisgKi8KK3ZvaWQgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzI1Nl84X29ubHlfYXV0aChzcnRwX2NyeXB0b19wb2xpY3lfdCAqcCk7CisKKy8qKgorICogQGJyaWVmIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2djbV8xMjhfMTZfYXV0aCgpIHNldHMgYSBjcnlwdG8KKyAqIHBvbGljeSBzdHJ1Y3R1cmUgdG8gYW4gQUVBRCBlbmNyeXB0aW9uIHBvbGljeS4KKyAqCisgKiBAcGFyYW0gcCBpcyBhIHBvaW50ZXIgdG8gdGhlIHBvbGljeSBzdHJ1Y3R1cmUgdG8gYmUgc2V0CisgKgorICogVGhlIGZ1bmN0aW9uIGNhbGwgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzEyOF8xNl9hdXRoKCZwKSBzZXRzCisgKiB0aGUgc3J0cF9jcnlwdG9fcG9saWN5X3QgYXQgbG9jYXRpb24gcCB0byB1c2UgdGhlIFNSVFAgZGVmYXVsdCBjaXBoZXIKKyAqIChBRVMtMTI4IEdhbG9pcyBDb3VudGVyIE1vZGUpIHdpdGggMTYgb2N0ZXQgYXV0aCB0YWcuICBUaGlzCisgKiBwb2xpY3kgYXBwbGllcyBjb25maWRlbnRpYWxpdHkgYW5kIGF1dGhlbnRpY2F0aW9uIHRvIGJvdGggdGhlCisgKiBSVFAgYW5kIFJUQ1AgcGFja2V0cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGEgY29udmVuaWVuY2UgdGhhdCBoZWxwcyB0byBhdm9pZCBkZWFsaW5nIGRpcmVjdGx5CisgKiB3aXRoIHRoZSBwb2xpY3kgZGF0YSBzdHJ1Y3R1cmUuICBZb3UgYXJlIGVuY291cmFnZWQgdG8gaW5pdGlhbGl6ZQorICogcG9saWN5IGVsZW1lbnRzIHdpdGggdGhpcyBmdW5jdGlvbiBjYWxsLiAgRG9pbmcgc28gbWF5IGFsbG93IHlvdXIKKyAqIGNvZGUgdG8gYmUgZm9yd2FyZCBjb21wYXRpYmxlIHdpdGggbGF0ZXIgdmVyc2lvbnMgb2YgbGliU1JUUCB0aGF0CisgKiBpbmNsdWRlIG1vcmUgZWxlbWVudHMgaW4gdGhlIHNydHBfY3J5cHRvX3BvbGljeV90IGRhdGF0eXBlLgorICoKKyAqIEByZXR1cm4gdm9pZC4KKyAqCisgKi8KK3ZvaWQgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzEyOF8xNl9hdXRoKHNydHBfY3J5cHRvX3BvbGljeV90ICpwKTsKKworLyoqCisgKiBAYnJpZWYgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzI1Nl8xNl9hdXRoKCkgc2V0cyBhIGNyeXB0bworICogcG9saWN5IHN0cnVjdHVyZSB0byBhbiBBRUFEIGVuY3J5cHRpb24gcG9saWN5CisgKgorICogQHBhcmFtIHAgaXMgYSBwb2ludGVyIHRvIHRoZSBwb2xpY3kgc3RydWN0dXJlIHRvIGJlIHNldAorICoKKyAqIFRoZSBmdW5jdGlvbiBjYWxsIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2djbV8yNTZfMTZfYXV0aCgmcCkgc2V0cworICogdGhlIHNydHBfY3J5cHRvX3BvbGljeV90IGF0IGxvY2F0aW9uIHAgdG8gdXNlIHRoZSBTUlRQIGRlZmF1bHQgY2lwaGVyCisgKiAoQUVTLTI1NiBHYWxvaXMgQ291bnRlciBNb2RlKSB3aXRoIDE2IG9jdGV0IGF1dGggdGFnLiAgVGhpcworICogcG9saWN5IGFwcGxpZXMgY29uZmlkZW50aWFsaXR5IGFuZCBhdXRoZW50aWNhdGlvbiB0byBib3RoIHRoZQorICogUlRQIGFuZCBSVENQIHBhY2tldHMuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBhIGNvbnZlbmllbmNlIHRoYXQgaGVscHMgdG8gYXZvaWQgZGVhbGluZyBkaXJlY3RseQorICogd2l0aCB0aGUgcG9saWN5IGRhdGEgc3RydWN0dXJlLiAgWW91IGFyZSBlbmNvdXJhZ2VkIHRvIGluaXRpYWxpemUKKyAqIHBvbGljeSBlbGVtZW50cyB3aXRoIHRoaXMgZnVuY3Rpb24gY2FsbC4gIERvaW5nIHNvIG1heSBhbGxvdyB5b3VyCisgKiBjb2RlIHRvIGJlIGZvcndhcmQgY29tcGF0aWJsZSB3aXRoIGxhdGVyIHZlcnNpb25zIG9mIGxpYlNSVFAgdGhhdAorICogaW5jbHVkZSBtb3JlIGVsZW1lbnRzIGluIHRoZSBzcnRwX2NyeXB0b19wb2xpY3lfdCBkYXRhdHlwZS4KKyAqCisgKiBAcmV0dXJuIHZvaWQuCisgKgorICovCit2b2lkIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2djbV8yNTZfMTZfYXV0aChzcnRwX2NyeXB0b19wb2xpY3lfdCAqcCk7CiAKIC8qKgogICogQGJyaWVmIHNydHBfZGVhbGxvYygpIGRlYWxsb2NhdGVzIHN0b3JhZ2UgZm9yIGFuIFNSVFAgc2Vzc2lvbgogICogY29udGV4dC4KLSAqIAorICoKICAqIFRoZSBmdW5jdGlvbiBjYWxsIHNydHBfZGVhbGxvYyhzKSBkZWFsbG9jYXRlcyBzdG9yYWdlIGZvciB0aGUKICAqIFNSVFAgc2Vzc2lvbiBjb250ZXh0IHMuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgbm8gbW9yZQogICogdGhhbiBvbmUgdGltZSBmb3IgZWFjaCBvZiB0aGUgY29udGV4dHMgYWxsb2NhdGVkIGJ5IHRoZSBmdW5jdGlvbgpAQCAtNDY0LDcxICsxMTU5LDExNiBAQAogICogQHBhcmFtIHMgaXMgdGhlIHNydHBfdCBmb3IgdGhlIHNlc3Npb24gdG8gYmUgZGVhbGxvY2F0ZWQuCiAgKgogICogQHJldHVybgotICogICAgLSBlcnJfc3RhdHVzX29rICAgICAgICAgICAgIGlmIHRoZXJlIG5vIHByb2JsZW1zLgotICogICAgLSBlcnJfc3RhdHVzX2RlYWxsb2NfZmFpbCAgIGEgbWVtb3J5IGRlYWxsb2NhdGlvbiBmYWlsdXJlIG9jY3VyZWQuCisgKiAgICAtIHNydHBfZXJyX3N0YXR1c19vayAgICAgICAgICAgICBpZiB0aGVyZSBubyBwcm9ibGVtcy4KKyAqICAgIC0gc3J0cF9lcnJfc3RhdHVzX2RlYWxsb2NfZmFpbCAgIGEgbWVtb3J5IGRlYWxsb2NhdGlvbiBmYWlsdXJlIG9jY3VyZWQuCiAgKi8KK3NydHBfZXJyX3N0YXR1c190IHNydHBfZGVhbGxvYyhzcnRwX3Qgcyk7CiAKLWVycl9zdGF0dXNfdAotc3J0cF9kZWFsbG9jKHNydHBfdCBzKTsKKy8qCisgKiBAYnJpZWYgaWRlbnRpZmllcyBhIHBhcnRpY3VsYXIgU1JUUCBwcm9maWxlCisgKgorICogQW4gc3J0cF9wcm9maWxlX3QgZW51bWVyYXRpb24gaXMgdXNlZCB0byBpZGVudGlmeSBhIHBhcnRpY3VsYXIgU1JUUAorICogcHJvZmlsZSAodGhhdCBpcywgYSBzZXQgb2YgYWxnb3JpdGhtcyBhbmQgcGFyYW1ldGVycykuIFRoZXNlIHByb2ZpbGVzCisgKiBhcmUgZGVmaW5lZCBmb3IgRFRMUy1TUlRQOgorICogaHR0cHM6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvc3J0cC1wcm90ZWN0aW9uL3NydHAtcHJvdGVjdGlvbi54aHRtbAorICovCit0eXBlZGVmIGVudW0geworICAgIHNydHBfcHJvZmlsZV9yZXNlcnZlZCA9IDAsCisgICAgc3J0cF9wcm9maWxlX2FlczEyOF9jbV9zaGExXzgwID0gMSwKKyAgICBzcnRwX3Byb2ZpbGVfYWVzMTI4X2NtX3NoYTFfMzIgPSAyLAorICAgIHNydHBfcHJvZmlsZV9udWxsX3NoYTFfODAgPSA1LAorICAgIHNydHBfcHJvZmlsZV9udWxsX3NoYTFfMzIgPSA2LAorICAgIHNydHBfcHJvZmlsZV9hZWFkX2Flc18xMjhfZ2NtID0gNywKKyAgICBzcnRwX3Byb2ZpbGVfYWVhZF9hZXNfMjU2X2djbSA9IDgsCit9IHNydHBfcHJvZmlsZV90OwogCisvKioKKyAqIEBicmllZiBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Zyb21fcHJvZmlsZV9mb3JfcnRwKCkgc2V0cyBhIGNyeXB0byBwb2xpY3kKKyAqIHN0cnVjdHVyZSB0byB0aGUgYXBwcm9wcmlhdGUgdmFsdWUgZm9yIFJUUCBiYXNlZCBvbiBhbiBzcnRwX3Byb2ZpbGVfdAorICoKKyAqIEBwYXJhbSBwb2xpY3kgaXMgYSBwb2ludGVyIHRvIHRoZSBwb2xpY3kgc3RydWN0dXJlIHRvIGJlIHNldAorICoKKyAqIEBwYXJhbSBwcm9maWxlIGlzIGFuIGVudW1lcmF0aW9uIGZvciB0aGUgcG9saWN5IHRvIGJlIHNldAorICoKKyAqIFRoZSBmdW5jdGlvbiBjYWxsIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfcnRwX2RlZmF1bHQoJnBvbGljeSwgcHJvZmlsZSkKKyAqIHNldHMgdGhlIHNydHBfY3J5cHRvX3BvbGljeV90IGF0IGxvY2F0aW9uIHBvbGljeSB0byB0aGUgcG9saWN5IGZvciBSVFAKKyAqIHByb3RlY3Rpb24sIGFzIGRlZmluZWQgYnkgdGhlIHNydHBfcHJvZmlsZV90IHByb2ZpbGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBhIGNvbnZlbmllbmNlIHRoYXQgaGVscHMgdG8gYXZvaWQgZGVhbGluZyBkaXJlY3RseQorICogd2l0aCB0aGUgcG9saWN5IGRhdGEgc3RydWN0dXJlLiAgWW91IGFyZSBlbmNvdXJhZ2VkIHRvIGluaXRpYWxpemUKKyAqIHBvbGljeSBlbGVtZW50cyB3aXRoIHRoaXMgZnVuY3Rpb24gY2FsbC4gIERvaW5nIHNvIG1heSBhbGxvdyB5b3VyCisgKiBjb2RlIHRvIGJlIGZvcndhcmQgY29tcGF0aWJsZSB3aXRoIGxhdGVyIHZlcnNpb25zIG9mIGxpYlNSVFAgdGhhdAorICogaW5jbHVkZSBtb3JlIGVsZW1lbnRzIGluIHRoZSBzcnRwX2NyeXB0b19wb2xpY3lfdCBkYXRhdHlwZS4KKyAqCisgKiBAcmV0dXJuIHZhbHVlcworICogICAgIC0gc3J0cF9lcnJfc3RhdHVzX29rICAgICAgICAgbm8gcHJvYmxlbXMgd2VyZSBlbmNvdW50ZXJlZAorICogICAgIC0gc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbSAgdGhlIHByb2ZpbGUgaXMgbm90IHN1cHBvcnRlZAorICoKKyAqLworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9mcm9tX3Byb2ZpbGVfZm9yX3J0cCgKKyAgICBzcnRwX2NyeXB0b19wb2xpY3lfdCAqcG9saWN5LAorICAgIHNydHBfcHJvZmlsZV90IHByb2ZpbGUpOwogCisvKioKKyAqIEBicmllZiBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Zyb21fcHJvZmlsZV9mb3JfcnRjcCgpIHNldHMgYSBjcnlwdG8gcG9saWN5CisgKiBzdHJ1Y3R1cmUgdG8gdGhlIGFwcHJvcHJpYXRlIHZhbHVlIGZvciBSVENQIGJhc2VkIG9uIGFuIHNydHBfcHJvZmlsZV90CisgKgorICogQHBhcmFtIHBvbGljeSBpcyBhIHBvaW50ZXIgdG8gdGhlIHBvbGljeSBzdHJ1Y3R1cmUgdG8gYmUgc2V0CisgKgorICogQHBhcmFtIHByb2ZpbGUgaXMgYW4gZW51bWVyYXRpb24gZm9yIHRoZSBwb2xpY3kgdG8gYmUgc2V0CisgKgorICogVGhlIGZ1bmN0aW9uIGNhbGwgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9ydGNwX2RlZmF1bHQoJnBvbGljeSwgcHJvZmlsZSkKKyAqIHNldHMgdGhlIHNydHBfY3J5cHRvX3BvbGljeV90IGF0IGxvY2F0aW9uIHBvbGljeSB0byB0aGUgcG9saWN5IGZvciBSVENQCisgKiBwcm90ZWN0aW9uLCBhcyBkZWZpbmVkIGJ5IHRoZSBzcnRwX3Byb2ZpbGVfdCBwcm9maWxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgYSBjb252ZW5pZW5jZSB0aGF0IGhlbHBzIHRvIGF2b2lkIGRlYWxpbmcgZGlyZWN0bHkKKyAqIHdpdGggdGhlIHBvbGljeSBkYXRhIHN0cnVjdHVyZS4gIFlvdSBhcmUgZW5jb3VyYWdlZCB0byBpbml0aWFsaXplCisgKiBwb2xpY3kgZWxlbWVudHMgd2l0aCB0aGlzIGZ1bmN0aW9uIGNhbGwuICBEb2luZyBzbyBtYXkgYWxsb3cgeW91cgorICogY29kZSB0byBiZSBmb3J3YXJkIGNvbXBhdGlibGUgd2l0aCBsYXRlciB2ZXJzaW9ucyBvZiBsaWJTUlRQIHRoYXQKKyAqIGluY2x1ZGUgbW9yZSBlbGVtZW50cyBpbiB0aGUgc3J0cF9jcnlwdG9fcG9saWN5X3QgZGF0YXR5cGUuCisgKgorICogQHJldHVybiB2YWx1ZXMKKyAqICAgICAtIHNydHBfZXJyX3N0YXR1c19vayAgICAgICAgIG5vIHByb2JsZW1zIHdlcmUgZW5jb3VudGVyZWQKKyAqICAgICAtIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW0gIHRoZSBwcm9maWxlIGlzIG5vdCBzdXBwb3J0ZWQKKyAqCisgKi8KK3NydHBfZXJyX3N0YXR1c190IHNydHBfY3J5cHRvX3BvbGljeV9zZXRfZnJvbV9wcm9maWxlX2Zvcl9ydGNwKAorICAgIHNydHBfY3J5cHRvX3BvbGljeV90ICpwb2xpY3ksCisgICAgc3J0cF9wcm9maWxlX3QgcHJvZmlsZSk7CisKKy8qKgorICogQGJyaWVmIHJldHVybnMgdGhlIG1hc3RlciBrZXkgbGVuZ3RoIGZvciBhIGdpdmVuIFNSVFAgcHJvZmlsZQorICovCit1bnNpZ25lZCBpbnQgc3J0cF9wcm9maWxlX2dldF9tYXN0ZXJfa2V5X2xlbmd0aChzcnRwX3Byb2ZpbGVfdCBwcm9maWxlKTsKKworLyoqCisgKiBAYnJpZWYgcmV0dXJucyB0aGUgbWFzdGVyIHNhbHQgbGVuZ3RoIGZvciBhIGdpdmVuIFNSVFAgcHJvZmlsZQorICovCit1bnNpZ25lZCBpbnQgc3J0cF9wcm9maWxlX2dldF9tYXN0ZXJfc2FsdF9sZW5ndGgoc3J0cF9wcm9maWxlX3QgcHJvZmlsZSk7CisKKy8qKgorICogQGJyaWVmIGFwcGVuZHMgdGhlIHNhbHQgdG8gdGhlIGtleQorICoKKyAqIFRoZSBmdW5jdGlvbiBjYWxsIHNydHBfYXBwZW5kX3NhbHRfdG9fa2V5KGssIGtsZW4sIHMsIHNsZW4pCisgKiBjb3BpZXMgdGhlIHN0cmluZyBzIHRvIHRoZSBsb2NhdGlvbiBhdCBrbGVuIGJ5dGVzIGZvbGxvd2luZworICogdGhlIGxvY2F0aW9uIGsuCisgKgorICogQHdhcm5pbmcgVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBieXRlc19pbl9zYWx0ICsgYnl0ZXNfaW5fa2V5IGJ5dGVzCisgKiAgICAgICAgICBhdmFpbGFibGUgYXQgdGhlIGxvY2F0aW9uIHBvaW50ZWQgdG8gYnkga2V5LgorICoKKyAqLwordm9pZCBzcnRwX2FwcGVuZF9zYWx0X3RvX2tleSh1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBieXRlc19pbl9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNhbHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBieXRlc19pbl9zYWx0KTsKIAogLyoqCiAgKiBAfQogICovCiAKLQotCi0KLQotLyoKLSAqIGxpYnNydHAgaW50ZXJuYWwgZGF0YXR5cGVzIAotICovCi0KLXR5cGVkZWYgZW51bSBkaXJlY3Rpb25fdCB7IAotICBkaXJfdW5rbm93biAgICAgICA9IDAsCi0gIGRpcl9zcnRwX3NlbmRlciAgID0gMSwgCi0gIGRpcl9zcnRwX3JlY2VpdmVyID0gMgotfSBkaXJlY3Rpb25fdDsKLQotLyogCi0gKiBhbiBzcnRwX3N0cmVhbV90IGhhcyBpdHMgb3duIFNTUkMsIGVuY3J5cHRpb24ga2V5LCBhdXRoZW50aWNhdGlvbgotICoga2V5LCBzZXF1ZW5jZSBudW1iZXIsIGFuZCByZXBsYXkgZGF0YWJhc2UKLSAqIAotICogbm90ZSB0aGF0IHRoZSBrZXlzIG1pZ2h0IG5vdCBhY3R1YWxseSBiZSB1bmlxdWUsIGluIHdoaWNoIGNhc2UgdGhlCi0gKiBjaXBoZXJfdCBhbmQgYXV0aF90IHBvaW50ZXJzIHdpbGwgcG9pbnQgdG8gdGhlIHNhbWUgc3RydWN0dXJlcwotICovCi0KLXR5cGVkZWYgc3RydWN0IHNydHBfc3RyZWFtX2N0eF90IHsKLSAgdWludDMyX3QgICBzc3JjOwotICBjaXBoZXJfdCAgKnJ0cF9jaXBoZXI7Ci0gIGF1dGhfdCAgICAqcnRwX2F1dGg7Ci0gIHJkYnhfdCAgICAgcnRwX3JkYng7Ci0gIHNlY19zZXJ2X3QgcnRwX3NlcnZpY2VzOwotICBjaXBoZXJfdCAgKnJ0Y3BfY2lwaGVyOwotICBhdXRoX3QgICAgKnJ0Y3BfYXV0aDsKLSAgcmRiX3QgICAgICBydGNwX3JkYjsKLSAgc2VjX3NlcnZfdCBydGNwX3NlcnZpY2VzOwotICBrZXlfbGltaXRfY3R4X3QgKmxpbWl0OwotICBkaXJlY3Rpb25fdCBkaXJlY3Rpb247Ci0gIHN0cnVjdCBzcnRwX3N0cmVhbV9jdHhfdCAqbmV4dDsgICAvKiBsaW5rZWQgbGlzdCBvZiBzdHJlYW1zICovCi19IHNydHBfc3RyZWFtX2N0eF90OwotCi0KLS8qCi0gKiBhbiBzcnRwX2N0eF90IGhvbGRzIGEgc3RyZWFtIGxpc3QgYW5kIGEgc2VydmljZSBkZXNjcmlwdGlvbgotICovCi0KLXR5cGVkZWYgc3RydWN0IHNydHBfY3R4X3QgewotICBzcnRwX3N0cmVhbV9jdHhfdCAqc3RyZWFtX2xpc3Q7ICAgICAvKiBsaW5rZWQgbGlzdCBvZiBzdHJlYW1zICAgICAgICAgICAgKi8KLSAgc3J0cF9zdHJlYW1fY3R4X3QgKnN0cmVhbV90ZW1wbGF0ZTsgLyogYWN0IGFzIHRlbXBsYXRlIGZvciBvdGhlciBzdHJlYW1zICovCi19IHNydHBfY3R4X3Q7Ci0KLQotCiAvKioKICAqIEBkZWZncm91cCBTUlRDUCBTZWN1cmUgUlRDUAotICogQGluZ3JvdXAgIFNSVFAgCisgKiBAaW5ncm91cCAgU1JUUAogICoKICAqIEBicmllZiBTZWN1cmUgUlRDUCBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gcHJvdGVjdCBSVENQIHRyYWZmaWMuCiAgKgpAQCAtNTM2LDMxICsxMjc2LDM2IEBACiAgKiB0cmFmZmljIGluIG11Y2ggdGhlIHNhbWUgd2F5IGFzIGl0IGRvZXMgUlRQIHRyYWZmaWMuICBUaGUgZnVuY3Rpb24KICAqIHNydHBfcHJvdGVjdF9ydGNwKCkgYXBwbGllcyBjcnlwdG9ncmFwaGljIHByb3RlY3Rpb25zIHRvIG91dGJvdW5kCiAgKiBSVENQIHBhY2tldHMsIGFuZCBzcnRwX3VucHJvdGVjdF9ydGNwKCkgdmVyaWZpZXMgdGhlIHByb3RlY3Rpb25zIG9uCi0gKiBpbmJvdW5kIFJUQ1AgcGFja2V0cy4gIAorICogaW5ib3VuZCBSVENQIHBhY2tldHMuCiAgKgogICogQSBub3RlIG9uIHRoZSBuYW1pbmcgY29udmVudGlvbjogc3J0cF9wcm90ZWN0X3J0Y3AoKSBoYXMgYW4gc3J0cF90CiAgKiBhcyBpdHMgZmlyc3QgYXJndW1lbnQsIGFuZCB0aHVzIGhhcyBgc3J0cF8nIGFzIGl0cyBwcmVmaXguICBUaGUKLSAqIHRyYWlsaW5nIGBfcnRjcCcgaW5kaWNhdGVzIHRoZSBwcm90b2NvbCBvbiB3aGljaCBpdCBhY3RzLiAgCi0gKiAKKyAqIHRyYWlsaW5nIGBfcnRjcCcgaW5kaWNhdGVzIHRoZSBwcm90b2NvbCBvbiB3aGljaCBpdCBhY3RzLgorICoKICAqIEB7CiAgKi8KIAogLyoqCiAgKiBAYnJpZWYgc3J0cF9wcm90ZWN0X3J0Y3AoKSBpcyB0aGUgU2VjdXJlIFJUQ1Agc2VuZGVyLXNpZGUgcGFja2V0CiAgKiBwcm9jZXNzaW5nIGZ1bmN0aW9uLgotICogCisgKgogICogVGhlIGZ1bmN0aW9uIGNhbGwgc3J0cF9wcm90ZWN0X3J0Y3AoY3R4LCBydHBfaGRyLCBsZW5fcHRyKSBhcHBsaWVzCiAgKiBTUlRDUCBwcm90ZWN0aW9uIHRvIHRoZSBSVENQIHBhY2tldCBydGNwX2hkciAod2hpY2ggaGFzIGxlbmd0aAotICogKmxlbl9wdHIpIHVzaW5nIHRoZSBTUlRQIHNlc3Npb24gY29udGV4dCBjdHguICBJZiBlcnJfc3RhdHVzX29rIGlzCisgKiAqbGVuX3B0cikgdXNpbmcgdGhlIFNSVFAgc2Vzc2lvbiBjb250ZXh0IGN0eC4gIElmIHNydHBfZXJyX3N0YXR1c19vayBpcwogICogcmV0dXJuZWQsIHRoZW4gcnRwX2hkciBwb2ludHMgdG8gdGhlIHJlc3VsdGluZyBTUlRDUCBwYWNrZXQgYW5kCiAgKiAqbGVuX3B0ciBpcyB0aGUgbnVtYmVyIG9mIG9jdGV0cyBpbiB0aGF0IHBhY2tldDsgb3RoZXJ3aXNlLCBubwogICogYXNzdW1wdGlvbnMgc2hvdWxkIGJlIG1hZGUgYWJvdXQgdGhlIHZhbHVlIG9mIGVpdGhlciBkYXRhIGVsZW1lbnRzLgotICogCisgKgogICogQHdhcm5pbmcgVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgaXQgY2FuIHdyaXRlIHRoZSBhdXRoZW50aWNhdGlvbgogICogdGFnIGludG8gdGhlIGxvY2F0aW9uIGluIG1lbW9yeSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIFJUQ1AKICAqIHBhY2tldCwgYW5kIGFzc3VtZXMgdGhhdCB0aGUgUlRDUCBwYWNrZXQgaXMgYWxpZ25lZCBvbiBhIDMyLWJpdAogICogYm91bmRhcnkuCiAgKgorICogQHdhcm5pbmcgVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgaXQgY2FuIHdyaXRlIFNSVFBfTUFYX1RSQUlMRVJfTEVOKzQKKyAqIGludG8gdGhlIGxvY2F0aW9uIGluIG1lbW9yeSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIFJUQ1AgcGFja2V0LgorICogQ2FsbGVycyBNVVNUIGVuc3VyZSB0aGF0IHRoaXMgbXVjaCB3cml0YWJsZSBtZW1vcnkgaXMgYXZhaWxhYmxlIGluCisgKiB0aGUgYnVmZmVyIHRoYXQgaG9sZHMgdGhlIFJUQ1AgcGFja2V0LgorICoKICAqIEBwYXJhbSBjdHggaXMgdGhlIFNSVFAgY29udGV4dCB0byB1c2UgaW4gcHJvY2Vzc2luZyB0aGUgcGFja2V0LgogICoKICAqIEBwYXJhbSBydGNwX2hkciBpcyBhIHBvaW50ZXIgdG8gdGhlIFJUQ1AgcGFja2V0IChiZWZvcmUgdGhlIGNhbGwpOyBhZnRlcgpAQCAtNTY4LDE5ICsxMzEzLDY5IEBACiAgKgogICogQHBhcmFtIHBrdF9vY3RldF9sZW4gaXMgYSBwb2ludGVyIHRvIHRoZSBsZW5ndGggaW4gb2N0ZXRzIG9mIHRoZQogICogY29tcGxldGUgUlRDUCBwYWNrZXQgKGhlYWRlciBhbmQgYm9keSkgYmVmb3JlIHRoZSBmdW5jdGlvbiBjYWxsLAotICogYW5kIG9mIHRoZSBjb21wbGV0ZSBTUlRDUCBwYWNrZXQgYWZ0ZXIgdGhlIGNhbGwsIGlmIGVycl9zdGF0dXNfb2sKKyAqIGFuZCBvZiB0aGUgY29tcGxldGUgU1JUQ1AgcGFja2V0IGFmdGVyIHRoZSBjYWxsLCBpZiBzcnRwX2Vycl9zdGF0dXNfb2sKICAqIHdhcyByZXR1cm5lZC4gIE90aGVyd2lzZSwgdGhlIHZhbHVlIG9mIHRoZSBkYXRhIHRvIHdoaWNoIGl0IHBvaW50cwogICogaXMgdW5kZWZpbmVkLgogICoKLSAqIEByZXR1cm4gCi0gKiAgICAtIGVycl9zdGF0dXNfb2sgICAgICAgICAgICBpZiB0aGVyZSB3ZXJlIG5vIHByb2JsZW1zLgotICogICAgLSBbb3RoZXJdICAgICAgICAgICAgICAgICAgaWYgdGhlcmUgd2FzIGEgZmFpbHVyZSBpbiAKKyAqIEByZXR1cm4KKyAqICAgIC0gc3J0cF9lcnJfc3RhdHVzX29rICAgICAgICAgICAgaWYgdGhlcmUgd2VyZSBubyBwcm9ibGVtcy4KKyAqICAgIC0gW290aGVyXSAgICAgICAgICAgICAgICAgIGlmIHRoZXJlIHdhcyBhIGZhaWx1cmUgaW4KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjcnlwdG9ncmFwaGljIG1lY2hhbmlzbXMuCiAgKi8KLQkgICAgIAorc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9wcm90ZWN0X3J0Y3Aoc3J0cF90IGN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnJ0Y3BfaGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpwa3Rfb2N0ZXRfbGVuKTsKIAotZXJyX3N0YXR1c190IAotc3J0cF9wcm90ZWN0X3J0Y3Aoc3J0cF90IGN0eCwgdm9pZCAqcnRjcF9oZHIsIGludCAqcGt0X29jdGV0X2xlbik7CisvKioKKyAqIEBicmllZiBzcnRwX3Byb3RlY3RfcnRjcF9ta2koKSBpcyB0aGUgU2VjdXJlIFJUQ1Agc2VuZGVyLXNpZGUgcGFja2V0CisgKiBwcm9jZXNzaW5nIGZ1bmN0aW9uIHRoYXQgY2FuIHV0aWxpemUgbWtpLgorICoKKyAqIFRoZSBmdW5jdGlvbiBjYWxsIHNydHBfcHJvdGVjdF9ydGNwKGN0eCwgcnRwX2hkciwgbGVuX3B0cikgYXBwbGllcworICogU1JUQ1AgcHJvdGVjdGlvbiB0byB0aGUgUlRDUCBwYWNrZXQgcnRjcF9oZHIgKHdoaWNoIGhhcyBsZW5ndGgKKyAqICpsZW5fcHRyKSB1c2luZyB0aGUgU1JUUCBzZXNzaW9uIGNvbnRleHQgY3R4LiAgSWYgc3J0cF9lcnJfc3RhdHVzX29rIGlzCisgKiByZXR1cm5lZCwgdGhlbiBydHBfaGRyIHBvaW50cyB0byB0aGUgcmVzdWx0aW5nIFNSVENQIHBhY2tldCBhbmQKKyAqICpsZW5fcHRyIGlzIHRoZSBudW1iZXIgb2Ygb2N0ZXRzIGluIHRoYXQgcGFja2V0OyBvdGhlcndpc2UsIG5vCisgKiBhc3N1bXB0aW9ucyBzaG91bGQgYmUgbWFkZSBhYm91dCB0aGUgdmFsdWUgb2YgZWl0aGVyIGRhdGEgZWxlbWVudHMuCisgKgorICogQHdhcm5pbmcgVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgaXQgY2FuIHdyaXRlIHRoZSBhdXRoZW50aWNhdGlvbgorICogdGFnIGludG8gdGhlIGxvY2F0aW9uIGluIG1lbW9yeSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIFJUQ1AKKyAqIHBhY2tldCwgYW5kIGFzc3VtZXMgdGhhdCB0aGUgUlRDUCBwYWNrZXQgaXMgYWxpZ25lZCBvbiBhIDMyLWJpdAorICogYm91bmRhcnkuCisgKgorICogQHdhcm5pbmcgVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgaXQgY2FuIHdyaXRlIFNSVFBfTUFYX1RSQUlMRVJfTEVOKzQKKyAqIGludG8gdGhlIGxvY2F0aW9uIGluIG1lbW9yeSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIFJUQ1AgcGFja2V0LgorICogQ2FsbGVycyBNVVNUIGVuc3VyZSB0aGF0IHRoaXMgbXVjaCB3cml0YWJsZSBtZW1vcnkgaXMgYXZhaWxhYmxlIGluCisgKiB0aGUgYnVmZmVyIHRoYXQgaG9sZHMgdGhlIFJUQ1AgcGFja2V0LgorICoKKyAqIEBwYXJhbSBjdHggaXMgdGhlIFNSVFAgY29udGV4dCB0byB1c2UgaW4gcHJvY2Vzc2luZyB0aGUgcGFja2V0LgorICoKKyAqIEBwYXJhbSBydGNwX2hkciBpcyBhIHBvaW50ZXIgdG8gdGhlIFJUQ1AgcGFja2V0IChiZWZvcmUgdGhlIGNhbGwpOyBhZnRlcgorICogdGhlIGZ1bmN0aW9uIHJldHVybnMsIGl0IHBvaW50cyB0byB0aGUgc3J0cCBwYWNrZXQuCisgKgorICogQHBhcmFtIHBrdF9vY3RldF9sZW4gaXMgYSBwb2ludGVyIHRvIHRoZSBsZW5ndGggaW4gb2N0ZXRzIG9mIHRoZQorICogY29tcGxldGUgUlRDUCBwYWNrZXQgKGhlYWRlciBhbmQgYm9keSkgYmVmb3JlIHRoZSBmdW5jdGlvbiBjYWxsLAorICogYW5kIG9mIHRoZSBjb21wbGV0ZSBTUlRDUCBwYWNrZXQgYWZ0ZXIgdGhlIGNhbGwsIGlmIHNydHBfZXJyX3N0YXR1c19vaworICogd2FzIHJldHVybmVkLiAgT3RoZXJ3aXNlLCB0aGUgdmFsdWUgb2YgdGhlIGRhdGEgdG8gd2hpY2ggaXQgcG9pbnRzCisgKiBpcyB1bmRlZmluZWQuCisgKgorICogQHBhcmFtIHVzZV9ta2kgaXMgYSBib29sZWFuIHRvIHRlbGwgdGhlIHN5c3RlbSBpZiBta2kgaXMgYmVpbmcgdXNlZC4gIElmCisgKiBzZXQgdG8gZmFsc2UgdGhlbiB3aWxsIHVzZSB0aGUgZmlyc3Qgc2V0IG9mIHNlc3Npb24ga2V5cy4gIElmIHNldCB0byB0cnVlCisgKiB3aWxsCisgKiB1c2UgdGhlIHNlc3Npb24ga2V5cyBpZGVudGlmaWVkIGJ5IHRoZSBta2lfaW5kZXgKKyAqCisgKiBAcGFyYW0gbWtpX2luZGV4IGludGVnZXIgdmFsdWUgc3BlY2lmeWluZyB3aGljaCBzZXQgb2Ygc2Vzc2lvbiBrZXN5IHNob3VsZCBiZQorICogdXNlZCBpZiB1c2VfbWtpIGlzIHNldCB0byB0cnVlLgorICoKKyAqIEByZXR1cm4KKyAqICAgIC0gc3J0cF9lcnJfc3RhdHVzX29rICAgICAgICAgICAgaWYgdGhlcmUgd2VyZSBubyBwcm9ibGVtcy4KKyAqICAgIC0gW290aGVyXSAgICAgICAgICAgICAgICAgIGlmIHRoZXJlIHdhcyBhIGZhaWx1cmUgaW4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjcnlwdG9ncmFwaGljIG1lY2hhbmlzbXMuCisgKi8KK3NydHBfZXJyX3N0YXR1c190IHNydHBfcHJvdGVjdF9ydGNwX21raShzcnRwX3QgY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnJ0Y3BfaGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqcGt0X29jdGV0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdXNlX21raSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWtpX2luZGV4KTsKIAogLyoqCiAgKiBAYnJpZWYgc3J0cF91bnByb3RlY3RfcnRjcCgpIGlzIHRoZSBTZWN1cmUgUlRDUCByZWNlaXZlci1zaWRlIHBhY2tldApAQCAtNTg5LDExICsxMzg0LDExIEBACiAgKiBUaGUgZnVuY3Rpb24gY2FsbCBzcnRwX3VucHJvdGVjdF9ydGNwKGN0eCwgc3J0cF9oZHIsIGxlbl9wdHIpCiAgKiB2ZXJpZmllcyB0aGUgU2VjdXJlIFJUQ1AgcHJvdGVjdGlvbiBvZiB0aGUgU1JUQ1AgcGFja2V0IHBvaW50ZWQgdG8KICAqIGJ5IHNydGNwX2hkciAod2hpY2ggaGFzIGxlbmd0aCAqbGVuX3B0ciksIHVzaW5nIHRoZSBTUlRQIHNlc3Npb24KLSAqIGNvbnRleHQgY3R4LiAgSWYgZXJyX3N0YXR1c19vayBpcyByZXR1cm5lZCwgdGhlbiBzcnRjcF9oZHIgcG9pbnRzCisgKiBjb250ZXh0IGN0eC4gIElmIHNydHBfZXJyX3N0YXR1c19vayBpcyByZXR1cm5lZCwgdGhlbiBzcnRjcF9oZHIgcG9pbnRzCiAgKiB0byB0aGUgcmVzdWx0aW5nIFJUQ1AgcGFja2V0IGFuZCAqbGVuX3B0ciBpcyB0aGUgbnVtYmVyIG9mIG9jdGV0cwogICogaW4gdGhhdCBwYWNrZXQ7IG90aGVyd2lzZSwgbm8gYXNzdW1wdGlvbnMgc2hvdWxkIGJlIG1hZGUgYWJvdXQgdGhlCiAgKiB2YWx1ZSBvZiBlaXRoZXIgZGF0YSBlbGVtZW50cy4KLSAqIAorICoKICAqIEB3YXJuaW5nIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBTUlRDUCBwYWNrZXQgaXMgYWxpZ25lZCBvbiBhCiAgKiAzMi1iaXQgYm91bmRhcnkuCiAgKgpAQCAtNjAyLDI3ICsxMzk3LDEyMiBAQAogICoKICAqIEBwYXJhbSBzcnRjcF9oZHIgaXMgYSBwb2ludGVyIHRvIHRoZSBoZWFkZXIgb2YgdGhlIFNSVENQIHBhY2tldAogICogKGJlZm9yZSB0aGUgY2FsbCkuICBBZnRlciB0aGUgZnVuY3Rpb24gcmV0dXJucywgaXQgcG9pbnRzIHRvIHRoZQotICogcnRwIHBhY2tldCBpZiBlcnJfc3RhdHVzX29rIHdhcyByZXR1cm5lZDsgb3RoZXJ3aXNlLCB0aGUgdmFsdWUgb2YKKyAqIHJ0cCBwYWNrZXQgaWYgc3J0cF9lcnJfc3RhdHVzX29rIHdhcyByZXR1cm5lZDsgb3RoZXJ3aXNlLCB0aGUgdmFsdWUgb2YKICAqIHRoZSBkYXRhIHRvIHdoaWNoIGl0IHBvaW50cyBpcyB1bmRlZmluZWQuCiAgKgogICogQHBhcmFtIHBrdF9vY3RldF9sZW4gaXMgYSBwb2ludGVyIHRvIHRoZSBsZW5ndGggaW4gb2N0ZXRzIG9mIHRoZQogICogY29tcGxldGUgU1JUQ1AgcGFja2V0IChoZWFkZXIgYW5kIGJvZHkpIGJlZm9yZSB0aGUgZnVuY3Rpb24gY2FsbCwKLSAqIGFuZCBvZiB0aGUgY29tcGxldGUgcnRwIHBhY2tldCBhZnRlciB0aGUgY2FsbCwgaWYgZXJyX3N0YXR1c19vayB3YXMKKyAqIGFuZCBvZiB0aGUgY29tcGxldGUgcnRwIHBhY2tldCBhZnRlciB0aGUgY2FsbCwgaWYgc3J0cF9lcnJfc3RhdHVzX29rIHdhcwogICogcmV0dXJuZWQuICBPdGhlcndpc2UsIHRoZSB2YWx1ZSBvZiB0aGUgZGF0YSB0byB3aGljaCBpdCBwb2ludHMgaXMKICAqIHVuZGVmaW5lZC4KICAqCi0gKiBAcmV0dXJuIAotICogICAgLSBlcnJfc3RhdHVzX29rICAgICAgICAgIGlmIHRoZSBSVENQIHBhY2tldCBpcyB2YWxpZC4KLSAqICAgIC0gZXJyX3N0YXR1c19hdXRoX2ZhaWwgICBpZiB0aGUgU1JUQ1AgcGFja2V0IGZhaWxlZCB0aGUgbWVzc2FnZSAKKyAqIEByZXR1cm4KKyAqICAgIC0gc3J0cF9lcnJfc3RhdHVzX29rICAgICAgICAgIGlmIHRoZSBSVENQIHBhY2tldCBpcyB2YWxpZC4KKyAqICAgIC0gc3J0cF9lcnJfc3RhdHVzX2F1dGhfZmFpbCAgIGlmIHRoZSBTUlRDUCBwYWNrZXQgZmFpbGVkIHRoZSBtZXNzYWdlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb24gY2hlY2suCi0gKiAgICAtIGVycl9zdGF0dXNfcmVwbGF5X2ZhaWwgaWYgdGhlIFNSVENQIHBhY2tldCBpcyBhIHJlcGxheSAoZS5nLiBoYXMKKyAqICAgIC0gc3J0cF9lcnJfc3RhdHVzX3JlcGxheV9mYWlsIGlmIHRoZSBTUlRDUCBwYWNrZXQgaXMgYSByZXBsYXkgKGUuZy4gaGFzCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCBhbmQgYWNjZXB0ZWQpLgogICogICAgLSBbb3RoZXJdICBpZiB0aGVyZSBoYXMgYmVlbiBhbiBlcnJvciBpbiB0aGUgY3J5cHRvZ3JhcGhpYyBtZWNoYW5pc21zLgogICoKICAqLworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF91bnByb3RlY3RfcnRjcChzcnRwX3QgY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzcnRjcF9oZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqcGt0X29jdGV0X2xlbik7CiAKLWVycl9zdGF0dXNfdCAKLXNydHBfdW5wcm90ZWN0X3J0Y3Aoc3J0cF90IGN0eCwgdm9pZCAqc3J0Y3BfaGRyLCBpbnQgKnBrdF9vY3RldF9sZW4pOworLyoqCisgKiBAYnJpZWYgc3J0cF91bnByb3RlY3RfcnRjcCgpIGlzIHRoZSBTZWN1cmUgUlRDUCByZWNlaXZlci1zaWRlIHBhY2tldAorICogcHJvY2Vzc2luZyBmdW5jdGlvbi4KKyAqCisgKiBUaGUgZnVuY3Rpb24gY2FsbCBzcnRwX3VucHJvdGVjdF9ydGNwKGN0eCwgc3J0cF9oZHIsIGxlbl9wdHIpCisgKiB2ZXJpZmllcyB0aGUgU2VjdXJlIFJUQ1AgcHJvdGVjdGlvbiBvZiB0aGUgU1JUQ1AgcGFja2V0IHBvaW50ZWQgdG8KKyAqIGJ5IHNydGNwX2hkciAod2hpY2ggaGFzIGxlbmd0aCAqbGVuX3B0ciksIHVzaW5nIHRoZSBTUlRQIHNlc3Npb24KKyAqIGNvbnRleHQgY3R4LiAgSWYgc3J0cF9lcnJfc3RhdHVzX29rIGlzIHJldHVybmVkLCB0aGVuIHNydGNwX2hkciBwb2ludHMKKyAqIHRvIHRoZSByZXN1bHRpbmcgUlRDUCBwYWNrZXQgYW5kICpsZW5fcHRyIGlzIHRoZSBudW1iZXIgb2Ygb2N0ZXRzCisgKiBpbiB0aGF0IHBhY2tldDsgb3RoZXJ3aXNlLCBubyBhc3N1bXB0aW9ucyBzaG91bGQgYmUgbWFkZSBhYm91dCB0aGUKKyAqIHZhbHVlIG9mIGVpdGhlciBkYXRhIGVsZW1lbnRzLgorICoKKyAqIEB3YXJuaW5nIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBTUlRDUCBwYWNrZXQgaXMgYWxpZ25lZCBvbiBhCisgKiAzMi1iaXQgYm91bmRhcnkuCisgKgorICogQHBhcmFtIGN0eCBpcyBhIHBvaW50ZXIgdG8gdGhlIHNydHBfdCB3aGljaCBhcHBsaWVzIHRvIHRoZQorICogcGFydGljdWxhciBwYWNrZXQuCisgKgorICogQHBhcmFtIHNydGNwX2hkciBpcyBhIHBvaW50ZXIgdG8gdGhlIGhlYWRlciBvZiB0aGUgU1JUQ1AgcGFja2V0CisgKiAoYmVmb3JlIHRoZSBjYWxsKS4gIEFmdGVyIHRoZSBmdW5jdGlvbiByZXR1cm5zLCBpdCBwb2ludHMgdG8gdGhlCisgKiBydHAgcGFja2V0IGlmIHNydHBfZXJyX3N0YXR1c19vayB3YXMgcmV0dXJuZWQ7IG90aGVyd2lzZSwgdGhlIHZhbHVlIG9mCisgKiB0aGUgZGF0YSB0byB3aGljaCBpdCBwb2ludHMgaXMgdW5kZWZpbmVkLgorICoKKyAqIEBwYXJhbSBwa3Rfb2N0ZXRfbGVuIGlzIGEgcG9pbnRlciB0byB0aGUgbGVuZ3RoIGluIG9jdGV0cyBvZiB0aGUKKyAqIGNvbXBsZXRlIFNSVENQIHBhY2tldCAoaGVhZGVyIGFuZCBib2R5KSBiZWZvcmUgdGhlIGZ1bmN0aW9uIGNhbGwsCisgKiBhbmQgb2YgdGhlIGNvbXBsZXRlIHJ0cCBwYWNrZXQgYWZ0ZXIgdGhlIGNhbGwsIGlmIHNydHBfZXJyX3N0YXR1c19vayB3YXMKKyAqIHJldHVybmVkLiAgT3RoZXJ3aXNlLCB0aGUgdmFsdWUgb2YgdGhlIGRhdGEgdG8gd2hpY2ggaXQgcG9pbnRzIGlzCisgKiB1bmRlZmluZWQuCisgKgorICogQHBhcmFtIHVzZV9ta2kgaXMgYSBib29sZWFuIHRvIHRlbGwgdGhlIHN5c3RlbSBpZiBta2kgaXMgYmVpbmcgdXNlZC4gIElmCisgKiBzZXQgdG8gZmFsc2UgdGhlbiB3aWxsIHVzZSB0aGUgZmlyc3Qgc2V0IG9mIHNlc3Npb24ga2V5cy4gIElmIHNldCB0byB0cnVlCisgKiB3aWxsIHVzZSB0aGUgc2Vzc2lvbiBrZXlzIGlkZW50aWZpZWQgYnkgdGhlIG1raV9pbmRleAorICoKKyAqIEByZXR1cm4KKyAqICAgIC0gc3J0cF9lcnJfc3RhdHVzX29rICAgICAgICAgIGlmIHRoZSBSVENQIHBhY2tldCBpcyB2YWxpZC4KKyAqICAgIC0gc3J0cF9lcnJfc3RhdHVzX2F1dGhfZmFpbCAgIGlmIHRoZSBTUlRDUCBwYWNrZXQgZmFpbGVkIHRoZSBtZXNzYWdlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbiBjaGVjay4KKyAqICAgIC0gc3J0cF9lcnJfc3RhdHVzX3JlcGxheV9mYWlsIGlmIHRoZSBTUlRDUCBwYWNrZXQgaXMgYSByZXBsYXkgKGUuZy4gaGFzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkIGFuZCBhY2NlcHRlZCkuCisgKiAgICAtIHNydHBfZXJyX3N0YXR1c19iYWRfbWtpICAgICBpZiB0aGUgTUtJIGluIHRoZSBwYWNrZXQgaXMgbm90IGEga25vd24gTUtJCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZAorICogICAgLSBbb3RoZXJdICAgICAgICAgICAgICAgICAgICAgaWYgdGhlcmUgaGFzIGJlZW4gYW4gZXJyb3IgaW4gdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcnlwdG9ncmFwaGljIG1lY2hhbmlzbXMuCisgKgorICovCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX3VucHJvdGVjdF9ydGNwX21raShzcnRwX3QgY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3J0Y3BfaGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpwa3Rfb2N0ZXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHVzZV9ta2kpOworCisvKioKKyAqIEB9CisgKi8KKworLyoqCisgKiBAZGVmZ3JvdXAgVXNlciBkYXRhIGFzc29jaWF0ZWQgdG8gYSBTUlRQIHNlc3Npb24uCisgKiBAaW5ncm91cCAgU1JUUAorICoKKyAqIEBicmllZiBTdG9yZSBjdXN0b20gdXNlciBkYXRhIHdpdGhpbiBhIFNSVFAgc2Vzc2lvbi4KKyAqCisgKiBAeworICovCisKKy8qKgorICogQGJyaWVmIHNydHBfc2V0X3VzZXJfZGF0YSgpIHN0b3JlcyB0aGUgZ2l2ZW4gcG9pbnRlciBpbnRvIHRoZSBTUlRQCisgKiBzZXNzaW9uIGZvciBsYXRlciByZXRyaWV2YWwuCisgKgorICogQHBhcmFtIGN0eCBpcyB0aGUgc3J0cF90IGNvbnRleHQgaW4gd2hpY2ggdGhlIGdpdmVuIGRhdGEgcG9pbnRlciBpcworICogc3RvcmVkLgorICoKKyAqIEBwYXJhbSBkYXRhIGlzIGEgcG9pbnRlciB0byB0aGUgY3VzdG9tIGluZm9ybWF0aW9uIChzdHJ1Y3QsIGZ1bmN0aW9uLAorICogZXRjKSBhc3NvY2lhdGVkIHdpdGggdGhlIFNSVFAgc2Vzc2lvbi4KKyAqCisgKiBAcmV0dXJuIHZvaWQuCisgKgorICovCit2b2lkIHNydHBfc2V0X3VzZXJfZGF0YShzcnRwX3QgY3R4LCB2b2lkICpkYXRhKTsKKworLyoqCisgKiBAYnJpZWYgc3J0cF9nZXRfdXNlcl9kYXRhKCkgcmV0cmlldmVzIHRoZSBwb2ludGVyIHRvIHRoZSBjdXN0b20gZGF0YQorICogcHJldmlvdXNseSBzdG9yZWQgd2l0aCBzcnRwX3NldF91c2VyX2RhdGEoKS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG1vc3RseSB1c2VmdWwgZm9yIHJldHJpZXZpbmcgZGF0YSBhc3NvY2lhdGVkIHRvIGEKKyAqIFNSVFAgc2Vzc2lvbiB3aGVuIGFuIGV2ZW50IGZpcmVzLiBUaGUgdXNlciBjYW4gdGhlbiBnZXQgc3VjaCBhIGN1c3RvbQorICogZGF0YSBieSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCB0aGUgc2Vzc2lvbiBmaWVsZCBvZiB0aGUKKyAqIHNydHBfZXZlbnRfZGF0YV90IHN0cnVjdCBhcyBhcmd1bWVudC4KKyAqCisgKiBAcGFyYW0gY3R4IGlzIHRoZSBzcnRwX3QgY29udGV4dCBpbiB3aGljaCB0aGUgZ2l2ZW4gZGF0YSBwb2ludGVyIHdhcworICogc3RvcmVkLgorICoKKyAqIEByZXR1cm4gdm9pZCogcG9pbnRlciB0byB0aGUgdXNlciBkYXRhLgorICoKKyAqLwordm9pZCAqc3J0cF9nZXRfdXNlcl9kYXRhKHNydHBfdCBjdHgpOwogCiAvKioKICAqIEB9CkBAIC02MzIsMTAgKzE1MjIsMTAgQEAKICAqIEBkZWZncm91cCBTUlRQZXZlbnRzIFNSVFAgZXZlbnRzIGFuZCBjYWxsYmFja3MKICAqIEBpbmdyb3VwICBTUlRQCiAgKgotICogQGJyaWVmIGxpYlNSVFAgY2FuIHVzZSBhIHVzZXItcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gdG8gCisgKiBAYnJpZWYgbGliU1JUUCBjYW4gdXNlIGEgdXNlci1wcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiB0bwogICogaGFuZGxlIGV2ZW50cy4KICAqCi0gKiAKKyAqCiAgKiBsaWJTUlRQIGFsbG93cyBhIHVzZXIgdG8gcHJvdmlkZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZQogICogZXZlbnRzIHRoYXQgbmVlZCB0byBiZSBkZWFsdCB3aXRoIG91dHNpZGUgb2YgdGhlIGRhdGEgcGxhbmUgKHNlZQogICogdGhlIGVudW0gc3J0cF9ldmVudF90IGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZXNlIGV2ZW50cykuICBEZWFsaW5nCkBAIC02NTYsNDcgKzE1NDYsNDEgQEAKICAqIEBicmllZiBzcnRwX2V2ZW50X3QgZGVmaW5lcyBldmVudHMgdGhhdCBuZWVkIHRvIGJlIGhhbmRsZWQKICAqCiAgKiBUaGUgZW51bSBzcnRwX2V2ZW50X3QgZGVmaW5lcyBldmVudHMgdGhhdCBuZWVkIHRvIGJlIGhhbmRsZWQKLSAqIG91dHNpZGUgdGhlIGBkYXRhIHBsYW5lJywgc3VjaCBhcyBTU1JDIGNvbGxpc2lvbnMgYW5kIAotICoga2V5IGV4cGlyYXRpb25zLiAgCisgKiBvdXRzaWRlIHRoZSBgZGF0YSBwbGFuZScsIHN1Y2ggYXMgU1NSQyBjb2xsaXNpb25zIGFuZAorICoga2V5IGV4cGlyYXRpb25zLgogICoKICAqIFdoZW4gYSBrZXkgZXhwaXJlcyBvciB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyBoYXMgYmVlbgogICogcmVhY2hlZCwgYW4gU1JUUCBzdHJlYW0gd2lsbCBlbnRlciBhbiBgZXhwaXJlZCcgc3RhdGUgaW4gd2hpY2ggbm8KICAqIG1vcmUgcGFja2V0cyBjYW4gYmUgcHJvdGVjdGVkIG9yIHVucHJvdGVjdGVkLiAgV2hlbiB0aGlzIGhhcHBlbnMsCiAgKiBpdCBpcyBsaWtlbHkgdGhhdCB5b3Ugd2lsbCB3YW50IHRvIGVpdGhlciBkZWFsbG9jYXRlIHRoZSBzdHJlYW0KLSAqICh1c2luZyBzcnRwX3N0cmVhbV9kZWFsbG9jKCkpLCBhbmQgcG9zc2libHkgYWxsb2NhdGUgYSBuZXcgb25lLgorICogKHVzaW5nIHNydHBfcmVtb3ZlX3N0cmVhbSgpKSwgYW5kIHBvc3NpYmx5IGFsbG9jYXRlIGEgbmV3IG9uZS4KICAqCiAgKiBXaGVuIGFuIFNSVFAgc3RyZWFtIGV4cGlyZXMsIHRoZSBvdGhlciBzdHJlYW1zIGluIHRoZSBzYW1lIHNlc3Npb24KICAqIGFyZSB1bmFmZmVjdGVkLCB1bmxlc3Mga2V5IHNoYXJpbmcgaXMgdXNlZCBieSB0aGF0IHN0cmVhbS4gIEluIHRoZQogICogbGF0dGVyIGNhc2UsIGFsbCBvZiB0aGUgc3RyZWFtcyBpbiB0aGUgc2Vzc2lvbiB3aWxsIGV4cGlyZS4KICAqLwotCi10eXBlZGVmIGVudW0geyAKLSAgZXZlbnRfc3NyY19jb2xsaXNpb24sICAgIC8qKjwKLQkJCSAgICAqIEFuIFNTUkMgY29sbGlzaW9uIG9jY3VyZWQuICAgICAgICAgICAgIAotCQkJICAgICovCi0gIGV2ZW50X2tleV9zb2Z0X2xpbWl0LCAgICAvKio8IEFuIFNSVFAgc3RyZWFtIHJlYWNoZWQgdGhlIHNvZnQga2V5Ci0JCQkgICAgKiAgIHVzYWdlIGxpbWl0IGFuZCB3aWxsIGV4cGlyZSBzb29uLgkgICAKLQkJCSAgICAqLwotICBldmVudF9rZXlfaGFyZF9saW1pdCwgICAgLyoqPCBBbiBTUlRQIHN0cmVhbSByZWFjaGVkIHRoZSBoYXJkIAotCQkJICAgICogICBrZXkgdXNhZ2UgbGltaXQgYW5kIGhhcyBleHBpcmVkLgotCQkJICAgICovCi0gIGV2ZW50X3BhY2tldF9pbmRleF9saW1pdCAvKio8IEFuIFNSVFAgc3RyZWFtIHJlYWNoZWQgdGhlIGhhcmQgCi0JCQkgICAgKiBwYWNrZXQgbGltaXQgKDJeNDggcGFja2V0cykuICAgICAgICAgICAgIAotCQkJICAgICovCit0eXBlZGVmIGVudW0geworICAgIGV2ZW50X3NzcmNfY29sbGlzaW9uLCAgICAvKio8IEFuIFNTUkMgY29sbGlzaW9uIG9jY3VyZWQuICAgICAgICAgICAgKi8KKyAgICBldmVudF9rZXlfc29mdF9saW1pdCwgICAgLyoqPCBBbiBTUlRQIHN0cmVhbSByZWFjaGVkIHRoZSBzb2Z0IGtleSAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgdXNhZ2UgbGltaXQgYW5kIHdpbGwgZXhwaXJlIHNvb24uICAgICAqLworICAgIGV2ZW50X2tleV9oYXJkX2xpbWl0LCAgICAvKio8IEFuIFNSVFAgc3RyZWFtIHJlYWNoZWQgdGhlIGhhcmQgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBrZXkgdXNhZ2UgbGltaXQgYW5kIGhhcyBleHBpcmVkLiAgICAgICovCisgICAgZXZlbnRfcGFja2V0X2luZGV4X2xpbWl0IC8qKjwgQW4gU1JUUCBzdHJlYW0gcmVhY2hlZCB0aGUgaGFyZCAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IHBhY2tldCBsaW1pdCAoMl40OCBwYWNrZXRzKS4gICAgICAgICAgKi8KIH0gc3J0cF9ldmVudF90OwogCiAvKioKLSAqIEBicmllZiBzcnRwX2V2ZW50X2RhdGFfdCBpcyB0aGUgc3RydWN0dXJlIHBhc3NlZCBhcyBhIGNhbGxiYWNrIHRvIAorICogQGJyaWVmIHNydHBfZXZlbnRfZGF0YV90IGlzIHRoZSBzdHJ1Y3R1cmUgcGFzc2VkIGFzIGEgY2FsbGJhY2sgdG8KICAqIHRoZSBldmVudCBoYW5kbGVyIGZ1bmN0aW9uCiAgKgogICogVGhlIHN0cnVjdCBzcnRwX2V2ZW50X2RhdGFfdCBob2xkcyB0aGUgZGF0YSBwYXNzZWQgdG8gdGhlIGV2ZW50Ci0gKiBoYW5kbGVyIGZ1bmN0aW9uLiAgCisgKiBoYW5kbGVyIGZ1bmN0aW9uLgogICovCi0KIHR5cGVkZWYgc3RydWN0IHNydHBfZXZlbnRfZGF0YV90IHsKLSAgc3J0cF90ICAgICAgICBzZXNzaW9uOyAgLyoqPCBUaGUgc2Vzc2lvbiBpbiB3aGljaCB0aGUgZXZlbnQgaGFwcGVuZC4gKi8KLSAgc3J0cF9zdHJlYW1fdCBzdHJlYW07ICAgLyoqPCBUaGUgc3RyZWFtIGluIHdoaWNoIHRoZSBldmVudCBoYXBwZW5kLiAgKi8KLSAgc3J0cF9ldmVudF90ICBldmVudDsgICAgLyoqPCBBbiBlbnVtIGluZGljYXRpbmcgdGhlIHR5cGUgb2YgZXZlbnQuICAgKi8KKyAgICBzcnRwX3Qgc2Vzc2lvbjsgICAgIC8qKjwgVGhlIHNlc3Npb24gaW4gd2hpY2ggdGhlIGV2ZW50IGhhcHBlbmQuICAgICAgICAqLworICAgIHVpbnQzMl90IHNzcmM7ICAgICAgLyoqPCBUaGUgc3NyYyBpbiBob3N0IG9yZGVyIG9mIHRoZSBzdHJlYW0gaW4gd2hpY2ggICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKio8IHRoZSBldmVudCBoYXBwZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBzcnRwX2V2ZW50X3QgZXZlbnQ7IC8qKjwgQW4gZW51bSBpbmRpY2F0aW5nIHRoZSB0eXBlIG9mIGV2ZW50LiAgICAgICAgICAqLwogfSBzcnRwX2V2ZW50X2RhdGFfdDsKIAogLyoqCkBAIC03MDksMTIgKzE1OTMsMTEgQEAKICAqIFRoZXJlIGNhbiBvbmx5IGJlIGEgc2luZ2xlLCBnbG9iYWwgaGFuZGxlciBmb3IgYWxsIGV2ZW50cyBpbgogICogbGliU1JUUC4KICAqLwotCi10eXBlZGVmIHZvaWQgKHNydHBfZXZlbnRfaGFuZGxlcl9mdW5jX3QpKHNydHBfZXZlbnRfZGF0YV90ICpkYXRhKTsKK3R5cGVkZWYgdm9pZChzcnRwX2V2ZW50X2hhbmRsZXJfZnVuY190KShzcnRwX2V2ZW50X2RhdGFfdCAqZGF0YSk7CiAKIC8qKgogICogQGJyaWVmIHNldHMgdGhlIGV2ZW50IGhhbmRsZXIgdG8gdGhlIGZ1bmN0aW9uIHN1cHBsaWVkIGJ5IHRoZSBjYWxsZXIuCi0gKiAKKyAqCiAgKiBUaGUgZnVuY3Rpb24gY2FsbCBzcnRwX2luc3RhbGxfZXZlbnRfaGFuZGxlcihmdW5jKSBzZXRzIHRoZSBldmVudAogICogaGFuZGxlciBmdW5jdGlvbiB0byB0aGUgdmFsdWUgZnVuYy4gIFRoZSB2YWx1ZSBOVUxMIGlzIGFjY2VwdGFibGUKICAqIGFzIGFuIGFyZ3VtZW50OyBpbiB0aGlzIGNhc2UsIGV2ZW50cyB3aWxsIGJlIGlnbm9yZWQgcmF0aGVyIHRoYW4KQEAgLTcyNCwxMzQgKzE2MDcsMTUzIEBACiAgKiAgICAgICAgICAgICBwb2ludGVyIGFzIGFuIGFyZ3VtZW50IGFuZCByZXR1cm5zIHZvaWQuICBUaGlzIGZ1bmN0aW9uCiAgKiAgICAgICAgICAgICB3aWxsIGJlIHVzZWQgYnkgbGliU1JUUCB0byBoYW5kbGUgZXZlbnRzLgogICovCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2luc3RhbGxfZXZlbnRfaGFuZGxlcihzcnRwX2V2ZW50X2hhbmRsZXJfZnVuY190IGZ1bmMpOwogCi1lcnJfc3RhdHVzX3QKLXNydHBfaW5zdGFsbF9ldmVudF9oYW5kbGVyKHNydHBfZXZlbnRfaGFuZGxlcl9mdW5jX3QgZnVuYyk7CisvKioKKyAqIEBicmllZiBSZXR1cm5zIHRoZSB2ZXJzaW9uIHN0cmluZyBvZiB0aGUgbGlicmFyeS4KKyAqCisgKi8KK2NvbnN0IGNoYXIgKnNydHBfZ2V0X3ZlcnNpb25fc3RyaW5nKHZvaWQpOworCisvKioKKyAqIEBicmllZiBSZXR1cm5zIHRoZSBudW1lcmljIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBsaWJyYXJ5IHZlcnNpb24uCisgKgorICovCit1bnNpZ25lZCBpbnQgc3J0cF9nZXRfdmVyc2lvbih2b2lkKTsKKworLyoqCisgKiBAYnJpZWYgc3J0cF9zZXRfZGVidWdfbW9kdWxlKG1vZF9uYW1lLCB2KQorICoKKyAqIHNldHMgZHluYW1pYyBkZWJ1Z2dpbmcgdG8gdGhlIHZhbHVlIHYgKDAgZm9yIG9mZiwgMSBmb3Igb24pIGZvciB0aGUKKyAqIGRlYnVnIG1vZHVsZSB3aXRoIHRoZSBuYW1lIG1vZF9uYW1lCisgKgorICogcmV0dXJucyBlcnJfc3RhdHVzX29rIG9uIHN1Y2Nlc3MsIGVycl9zdGF0dXNfZmFpbCBvdGhlcndpc2UKKyAqLworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9zZXRfZGVidWdfbW9kdWxlKGNvbnN0IGNoYXIgKm1vZF9uYW1lLCBpbnQgdik7CisKKy8qKgorICogQGJyaWVmIHNydHBfbGlzdF9kZWJ1Z19tb2R1bGVzKCkgb3V0cHV0cyBhIGxpc3Qgb2YgZGVidWdnaW5nIG1vZHVsZXMKKyAqCisgKi8KK3NydHBfZXJyX3N0YXR1c190IHNydHBfbGlzdF9kZWJ1Z19tb2R1bGVzKHZvaWQpOworCisvKioKKyAqIEBicmllZiBzcnRwX2xvZ19sZXZlbF90IGRlZmluZXMgbG9nIGxldmVscy4KKyAqCisgKiBUaGUgZW51bWVyYXRpb24gc3J0cF9sb2dfbGV2ZWxfdCBkZWZpbmVzIGxvZyBsZXZlbHMgcmVwb3J0ZWQKKyAqIGluIHRoZSBzcnRwX2xvZ19oYW5kbGVyX2Z1bmNfdC4KKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgc3J0cF9sb2dfbGV2ZWxfZXJyb3IsICAgLyoqPCBsb2cgbGV2ZWwgaXMgcmVwb3J0aW5nIGFuIGVycm9yIG1lc3NhZ2UgICovCisgICAgc3J0cF9sb2dfbGV2ZWxfd2FybmluZywgLyoqPCBsb2cgbGV2ZWwgaXMgcmVwb3J0aW5nIGEgd2FybmluZyBtZXNzYWdlICovCisgICAgc3J0cF9sb2dfbGV2ZWxfaW5mbywgICAgLyoqPCBsb2cgbGV2ZWwgaXMgcmVwb3J0aW5nIGFuIGluZm8gbWVzc2FnZSAgICovCisgICAgc3J0cF9sb2dfbGV2ZWxfZGVidWcgICAgLyoqPCBsb2cgbGV2ZWwgaXMgcmVwb3J0aW5nIGEgZGVidWcgbWVzc2FnZSAgICovCit9IHNydHBfbG9nX2xldmVsX3Q7CisKKy8qKgorICogQGJyaWVmIHNydHBfbG9nX2hhbmRsZXJfZnVuY190IGlzIHRoZSBmdW5jdGlvbiBwcm90b3R5cGUgZm9yCisgKiB0aGUgbG9nIGhhbmRsZXIuCisgKgorICogVGhlIHR5cGVkZWYgc3J0cF9ldmVudF9oYW5kbGVyX2Z1bmNfdCBpcyB0aGUgcHJvdG90eXBlIGZvciB0aGUKKyAqIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24uICBJdCBoYXMgYXMgc3J0cF9sb2dfbGV2ZWxfdCwgbG9nCisgKiBtZXNzYWdlIGFuZCBkYXRhIGFzIGFyZ3VtZW50cy4KKyAqIFRoZXJlIGNhbiBvbmx5IGJlIGEgc2luZ2xlLCBnbG9iYWwgaGFuZGxlciBmb3IgYWxsIGxvZyBtZXNzYWdlcyBpbgorICogbGliU1JUUC4KKyAqLwordHlwZWRlZiB2b2lkKHNydHBfbG9nX2hhbmRsZXJfZnVuY190KShzcnRwX2xvZ19sZXZlbF90IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpOworCisvKioKKyAqIEBicmllZiBzZXRzIHRoZSBsb2cgaGFuZGxlciB0byB0aGUgZnVuY3Rpb24gc3VwcGxpZWQgYnkgdGhlIGNhbGxlci4KKyAqCisgKiBUaGUgZnVuY3Rpb24gY2FsbCBzcnRwX2luc3RhbGxfbG9nX2hhbmRsZXIoZnVuYykgc2V0cyB0aGUgbG9nCisgKiBoYW5kbGVyIGZ1bmN0aW9uIHRvIHRoZSB2YWx1ZSBmdW5jLiAgVGhlIHZhbHVlIE5VTEwgaXMgYWNjZXB0YWJsZQorICogYXMgYW4gYXJndW1lbnQ7IGluIHRoaXMgY2FzZSwgbG9nIG1lc3NhZ2VzIHdpbGwgYmUgaWdub3JlZC4KKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBiZWZvcmUgc3J0cF9pbml0KCkgaW5vcmRlciB0byBjYXB0dXJlCisgKiBhbnkgbG9nZ2luZyBkdXJpbmcgc3RhcnQgdXAuCisgKgorICogQHBhcmFtIGZ1bmMgaXMgYSBwb2ludGVyIHRvIGEgZnVjdGlvbiBvZiB0eXBlIHNydHBfbG9nX2hhbmRsZXJfZnVuY190LgorICogICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgYnkgbGliU1JUUCB0byBvdXRwdXQgbG9nIG1lc3NhZ2VzLgorICogQHBhcmFtIGRhdGEgaXMgYSB1c2VyIHBvaW50ZXIgdGhhdCB3aWxsIGJlIHJldHVybmVkIGFzIHRoZSBkYXRhIGFyZ3VtZW50IGluCisgKiBmdW5jLgorICovCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2luc3RhbGxfbG9nX2hhbmRsZXIoc3J0cF9sb2dfaGFuZGxlcl9mdW5jX3QgZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKTsKKworLyoqCisgKiBAYnJpZWYgc3J0cF9nZXRfcHJvdGVjdF90cmFpbGVyX2xlbmd0aChzZXNzaW9uLCB1c2VfbWtpLCBta2lfaW5kZXgsIGxlbmd0aCkKKyAqCisgKiBEZXRlcm1pbmVzIHRoZSBsZW5ndGggb2YgdGhlIGFtb3VudCBvZiBkYXRhIExpYiBTUlRQIHdpbGwgYWRkIHRvIHRoZQorICogcGFja2V0IGR1cmluZyB0aGUgcHJvdGVjdCBwcm9jZXNzLiBUaGUgbGVuZ3RoIGlzIHJldHVybmVkIGluIHRoZSBsZW5ndGgKKyAqIHBhcmFtZXRlcgorICoKKyAqIHJldHVybnMgZXJyX3N0YXR1c19vayBvbiBzdWNjZXNzLCBlcnJfc3RhdHVzX2JhZF9ta2kgaWYgdGhlIE1LSSBpbmRleCBpcworICogaW52YWxpZAorICoKKyAqLworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9nZXRfcHJvdGVjdF90cmFpbGVyX2xlbmd0aChzcnRwX3Qgc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdXNlX21raSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbWtpX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqbGVuZ3RoKTsKKworLyoqCisgKiBAYnJpZWYgc3J0cF9nZXRfcHJvdGVjdF9ydGNwX3RyYWlsZXJfbGVuZ3RoKHNlc3Npb24sIHVzZV9ta2ksIG1raV9pbmRleCwKKyAqIGxlbmd0aCkKKyAqCisgKiBEZXRlcm1pbmVzIHRoZSBsZW5ndGggb2YgdGhlIGFtb3VudCBvZiBkYXRhIExpYiBTUlRQIHdpbGwgYWRkIHRvIHRoZQorICogcGFja2V0IGR1cmluZyB0aGUgcHJvdGVjdCBwcm9jZXNzLiBUaGUgbGVuZ3RoIGlzIHJldHVybmVkIGluIHRoZSBsZW5ndGgKKyAqIHBhcmFtZXRlcgorICoKKyAqIHJldHVybnMgZXJyX3N0YXR1c19vayBvbiBzdWNjZXNzLCBlcnJfc3RhdHVzX2JhZF9ta2kgaWYgdGhlIE1LSSBpbmRleCBpcworICogaW52YWxpZAorICoKKyAqLworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9nZXRfcHJvdGVjdF9ydGNwX3RyYWlsZXJfbGVuZ3RoKHNydHBfdCBzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVzZV9ta2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbWtpX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpsZW5ndGgpOworCisvKioKKyAqIEBicmllZiBzcnRwX3NldF9zdHJlYW1fcm9jKHNlc3Npb24sIHNzcmMsIHJvYykKKyAqCisgKiBTZXQgdGhlIHJvbGwtb3Zlci1jb3VudGVyIG9uIGEgc2Vzc2lvbiBmb3IgYSBnaXZlbiBTU1JDCisgKgorICogcmV0dXJucyBlcnJfc3RhdHVzX29rIG9uIHN1Y2Nlc3MsIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW0gaWYgdGhlcmUgaXMgbm8KKyAqIHN0cmVhbSBmb3VuZAorICoKKyAqLworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9zZXRfc3RyZWFtX3JvYyhzcnRwX3Qgc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3NyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgcm9jKTsKKworLyoqCisgKiBAYnJpZWYgc3J0cF9nZXRfc3RyZWFtX3JvYyhzZXNzaW9uLCBzc3JjLCByb2MpCisgKgorICogR2V0IHRoZSByb2xsLW92ZXItY291bnRlciBvbiBhIHNlc3Npb24gZm9yIGEgZ2l2ZW4gU1NSQworICoKKyAqIHJldHVybnMgZXJyX3N0YXR1c19vayBvbiBzdWNjZXNzLCBzcnRwX2Vycl9zdGF0dXNfYmFkX3BhcmFtIGlmIHRoZXJlIGlzIG5vCisgKiBzdHJlYW0gZm91bmQKKyAqCisgKi8KK3NydHBfZXJyX3N0YXR1c190IHNydHBfZ2V0X3N0cmVhbV9yb2Moc3J0cF90IHNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpyb2MpOwogCiAvKioKICAqIEB9CiAgKi8KIAotLyoKLSAqIHNydHBfaGFuZGxlX2V2ZW50KHNydHAsIHNydG0sIGV2bnQpIGNhbGxzIHRoZSBldmVudCBoYW5kbGluZwotICogZnVuY3Rpb24sIGlmIHRoZXJlIGlzIG9uZS4KLSAqCi0gKiBUaGlzIG1hY3JvIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhcyBpdCBpcyAKLSAqIGFuIGludGVybmFsLW9ubHkgZnVuY3Rpb24uCi0gKi8KLQotI2RlZmluZSBzcnRwX2hhbmRsZV9ldmVudChzcnRwLCBzdHJtLCBldm50KSAgICAgICAgIFwKLSAgIGlmKHNydHBfZXZlbnRfaGFuZGxlcikgeyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBzcnRwX2V2ZW50X2RhdGFfdCBkYXRhOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZGF0YS5zZXNzaW9uID0gc3J0cDsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGRhdGEuc3RyZWFtICA9IHN0cm07ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBkYXRhLmV2ZW50ICAgPSBldm50OyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgc3J0cF9ldmVudF9oYW5kbGVyKCZkYXRhKTsgICAgICAgICAgICAgICAgICAgIFwKLX0gICAKLQotLyoKLSAqIGFuIHNydHBfaGRyX3QgcmVwcmVzZW50cyB0aGUgc3J0cCBoZWFkZXIKLSAqCi0gKiBpbiB0aGlzIGltcGxlbWVudGF0aW9uLCBhbiBzcnRwX2hkcl90IGlzIGFzc3VtZWQgdG8gYmUgMzItYml0IGFsaWduZWQKLSAqIAotICogKG5vdGUgdGhhdCB0aGlzIGRlZmluaXRpb24gZm9sbG93cyB0aGF0IG9mIFJGQyAxODg5IEFwcGVuZGl4IEEsIGJ1dAotICogaXMgbm90IGlkZW50aWNhbCkKLSAqLwotIAotI2lmIChXT1JEU19CSUdFTkRJQU4gPT0gMCkgLyogYXNzdW1lIExJVFRMRV9FTkRJQU4gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewotICB1bnNpZ25lZCBjaGFyIGNjOjQ7CQkvKiBDU1JDIGNvdW50ICAgICAgICAgICAgICovCi0gIHVuc2lnbmVkIGNoYXIgeDoxOwkJLyogaGVhZGVyIGV4dGVuc2lvbiBmbGFnICAqLwotICB1bnNpZ25lZCBjaGFyIHA6MTsJCS8qIHBhZGRpbmcgZmxhZyAgICAgICAgICAgKi8KLSAgdW5zaWduZWQgY2hhciB2ZXJzaW9uOjI7CS8qIHByb3RvY29sIHZlcnNpb24gICAgICAgKi8KLSAgdW5zaWduZWQgY2hhciBwdDo3OwkJLyogcGF5bG9hZCB0eXBlICAgICAgICAgICAqLwotICB1bnNpZ25lZCBjaGFyIG06MTsJCS8qIG1hcmtlciBiaXQgICAgICAgICAgICAgKi8KLSAgdWludDE2X3Qgc2VxOwkJCS8qIHNlcXVlbmNlIG51bWJlciAgICAgICAgKi8KLSAgdWludDMyX3QgdHM7CQkJLyogdGltZXN0YW1wICAgICAgICAgICAgICAqLwotICB1aW50MzJfdCBzc3JjOwkgICAgICAgCS8qIHN5bmNocm9uaXphdGlvbiBzb3VyY2UgKi8KLX0gc3J0cF9oZHJfdDsKLQotI2Vsc2UgLyogIEJJR19FTkRJQU4gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewotICB1bnNpZ25lZCBjaGFyIHZlcnNpb246MjsJLyogcHJvdG9jb2wgdmVyc2lvbiAgICAgICAqLwotICB1bnNpZ25lZCBjaGFyIHA6MTsJCS8qIHBhZGRpbmcgZmxhZyAgICAgICAgICAgKi8KLSAgdW5zaWduZWQgY2hhciB4OjE7CQkvKiBoZWFkZXIgZXh0ZW5zaW9uIGZsYWcgICovCi0gIHVuc2lnbmVkIGNoYXIgY2M6NDsJCS8qIENTUkMgY291bnQgICAgICAgICAgICAgKi8KLSAgdW5zaWduZWQgY2hhciBtOjE7CQkvKiBtYXJrZXIgYml0ICAgICAgICAgICAgICovCi0gIHVuc2lnbmVkIGNoYXIgcHQ6NzsJCS8qIHBheWxvYWQgdHlwZSAgICAgICAgICAgKi8KLSAgdWludDE2X3Qgc2VxOwkJCS8qIHNlcXVlbmNlIG51bWJlciAgICAgICAgKi8KLSAgdWludDMyX3QgdHM7CQkJLyogdGltZXN0YW1wICAgICAgICAgICAgICAqLwotICB1aW50MzJfdCBzc3JjOwkgICAgICAgCS8qIHN5bmNocm9uaXphdGlvbiBzb3VyY2UgKi8KLX0gc3J0cF9oZHJfdDsKLQotI2VuZGlmCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgdWludDE2X3QgcHJvZmlsZV9zcGVjaWZpYzsgICAgLyogcHJvZmlsZS1zcGVjaWZpYyBpbmZvICAgICAgICAgICAgICAgKi8KLSAgdWludDE2X3QgbGVuZ3RoOyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIDMyLWJpdCB3b3JkcyBpbiBleHRlbnNpb24gKi8KLX0gc3J0cF9oZHJfeHRuZF90OwotCi0KLS8qCi0gKiBzcnRjcF9oZHJfdCByZXByZXNlbnRzIGEgc2VjdXJlIHJ0Y3AgaGVhZGVyIAotICoKLSAqIGluIHRoaXMgaW1wbGVtZW50YXRpb24sIGFuIHNydGNwIGhlYWRlciBpcyBhc3N1bWVkIHRvIGJlIDMyLWJpdAotICogYWxpbmdlZAotICovCi0KLSNpZiAoV09SRFNfQklHRU5ESUFOID09IDApIC8qIGFzc3VtZSBMSVRUTEVfRU5ESUFOICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgdW5zaWduZWQgY2hhciByYzo1OwkJLyogcmVjZXB0aW9uIHJlcG9ydCBjb3VudCAqLwotICB1bnNpZ25lZCBjaGFyIHA6MTsJCS8qIHBhZGRpbmcgZmxhZyAgICAgICAgICAgKi8KLSAgdW5zaWduZWQgY2hhciB2ZXJzaW9uOjI7CS8qIHByb3RvY29sIHZlcnNpb24gICAgICAgKi8KLSAgdW5zaWduZWQgY2hhciBwdDo4OwkJLyogcGF5bG9hZCB0eXBlICAgICAgICAgICAqLwotICB1aW50MTZfdCBsZW47CQkJLyogbGVuZ3RoICAgICAgICAgICAgICAgICAqLwotICB1aW50MzJfdCBzc3JjOwkgICAgICAgCS8qIHN5bmNocm9uaXphdGlvbiBzb3VyY2UgKi8KLX0gc3J0Y3BfaGRyX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgdW5zaWduZWQgaW50IGluZGV4OjMxOyAgICAvKiBzcnRjcCBwYWNrZXQgaW5kZXggaW4gbmV0d29yayBvcmRlciEgKi8KLSAgdW5zaWduZWQgaW50IGU6MTsgICAgICAgICAvKiBlbmNyeXB0ZWQ/IDE9eWVzICovCi0gIC8qIG9wdGlvbmFsIG1pa2V5L2V0YyBnbyBoZXJlICovCi0gIC8qIGFuZCB0aGVuIHRoZSB2YXJpYWJsZS1sZW5ndGggYXV0aCB0YWcgKi8KLX0gc3J0Y3BfdHJhaWxlcl90OwotCi0KLSNlbHNlIC8qICBCSUdfRU5ESUFOICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgdW5zaWduZWQgY2hhciB2ZXJzaW9uOjI7CS8qIHByb3RvY29sIHZlcnNpb24gICAgICAgKi8KLSAgdW5zaWduZWQgY2hhciBwOjE7CQkvKiBwYWRkaW5nIGZsYWcgICAgICAgICAgICovCi0gIHVuc2lnbmVkIGNoYXIgcmM6NTsJCS8qIHJlY2VwdGlvbiByZXBvcnQgY291bnQgKi8KLSAgdW5zaWduZWQgY2hhciBwdDo4OwkJLyogcGF5bG9hZCB0eXBlICAgICAgICAgICAqLwotICB1aW50MTZfdCBsZW47CQkJLyogbGVuZ3RoICAgICAgICAgICAgICAgICAqLwotICB1aW50MzJfdCBzc3JjOwkgICAgICAgCS8qIHN5bmNocm9uaXphdGlvbiBzb3VyY2UgKi8KLX0gc3J0Y3BfaGRyX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgdW5zaWduZWQgaW50IHZlcnNpb246MjsgIC8qIHByb3RvY29sIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAqLwotICB1bnNpZ25lZCBpbnQgcDoxOyAgICAgICAgLyogcGFkZGluZyBmbGFnICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHVuc2lnbmVkIGludCBjb3VudDo1OyAgICAvKiB2YXJpZXMgYnkgcGFja2V0IHR5cGUgICAgICAgICAgICAgICAgKi8KLSAgdW5zaWduZWQgaW50IHB0Ojg7ICAgICAgIC8qIHBheWxvYWQgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICB1aW50MTZfdCBsZW5ndGg7ICAgICAgICAgLyogbGVuIG9mIHVpbnQzMnMgb2YgcGFja2V0IGxlc3MgaGVhZGVyICovCi19IHJ0Y3BfY29tbW9uX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgdW5zaWduZWQgaW50IGU6MTsgICAgICAgICAvKiBlbmNyeXB0ZWQ/IDE9eWVzICovCi0gIHVuc2lnbmVkIGludCBpbmRleDozMTsgICAgLyogc3J0Y3AgcGFja2V0IGluZGV4ICovCi0gIC8qIG9wdGlvbmFsIG1pa2V5L2V0YyBnbyBoZXJlICovCi0gIC8qIGFuZCB0aGVuIHRoZSB2YXJpYWJsZS1sZW5ndGggYXV0aCB0YWcgKi8KLX0gc3J0Y3BfdHJhaWxlcl90OwotCi0jZW5kaWYKLQogLyogaW4gaG9zdCBvcmRlciwgc28gb3V0c2lkZSB0aGUgI2lmICovCi0jZGVmaW5lIFNSVENQX0VfQklUICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBTUlRDUF9FX0JJVCAweDgwMDAwMDAwCisKIC8qIGZvciBieXRlLWFjY2VzcyAqLwogI2RlZmluZSBTUlRDUF9FX0JZVEVfQklUIDB4ODAKICNkZWZpbmUgU1JUQ1BfSU5ERVhfTUFTSyAweDdmZmZmZmZmCiAKLSNlbmRpZiAvKiBTUlRQX0ggKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBTUlRQX1NSVFBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zcnRwX3ByaXYuaCBiL2luY2x1ZGUvc3J0cF9wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg4ZWZjNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc3J0cF9wcml2LmgKQEAgLTAsMCArMSwyODAgQEAKKy8qCisgKiBzcnRwX3ByaXYuaAorICoKKyAqIHByaXZhdGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgZm9yIGxpYlNSVFAKKyAqCisgKiBEYXZpZCBBLiBNY0dyZXcKKyAqIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqLworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxNyBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgU1JUUF9QUklWX0gKKyNkZWZpbmUgU1JUUF9QUklWX0gKKworLy8gTGVhdmUgdGhpcyBhcyB0aGUgdG9wIGxldmVsIGltcG9ydC4gRW5zdXJlcyB0aGUgZXhpc3RlbmNlIG9mIGRlZmluZXMKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgInNydHAuaCIKKyNpbmNsdWRlICJyZGJ4LmgiCisjaW5jbHVkZSAicmRiLmgiCisjaW5jbHVkZSAiaW50ZWdlcnMuaCIKKyNpbmNsdWRlICJjaXBoZXIuaCIKKyNpbmNsdWRlICJhdXRoLmgiCisjaW5jbHVkZSAiYWVzLmgiCisjaW5jbHVkZSAia2V5LmgiCisjaW5jbHVkZSAiY3J5cHRvX2tlcm5lbC5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNkZWZpbmUgU1JUUF9WRVJfU1RSSU5HIFBBQ0tBR0VfU1RSSU5HCisjZGVmaW5lIFNSVFBfVkVSU0lPTiBQQUNLQUdFX1ZFUlNJT04KKwordHlwZWRlZiBzdHJ1Y3Qgc3J0cF9zdHJlYW1fY3R4X3RfIHNydHBfc3RyZWFtX2N0eF90OwordHlwZWRlZiBzcnRwX3N0cmVhbV9jdHhfdCAqc3J0cF9zdHJlYW1fdDsKKworLyoKKyAqIHRoZSBmb2xsb3dpbmcgZGVjbGFyYXRpb25zIGFyZSBsaWJTUlRQIGludGVybmFsIGZ1bmN0aW9ucworICovCisKKy8qCisgKiBzcnRwX2dldF9zdHJlYW0oc3NyYykgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHN0cmVhbSBjb3JyZXNwb25kaW5nCisgKiB0byBzc3JjLCBvciBOVUxMIGlmIG5vIHN0cmVhbSBleGlzdHMgZm9yIHRoYXQgc3NyYworICovCitzcnRwX3N0cmVhbV90IHNydHBfZ2V0X3N0cmVhbShzcnRwX3Qgc3J0cCwgdWludDMyX3Qgc3NyYyk7CisKKy8qCisgKiBzcnRwX3N0cmVhbV9pbml0X2tleXMocywgaykgKHJlKWluaXRpYWxpemVzIHRoZSBzcnRwX3N0cmVhbV90IHMgYnkKKyAqIGRlcml2aW5nIGFsbCBvZiB0aGUgbmVlZGVkIGtleXMgdXNpbmcgdGhlIEtERiBhbmQgdGhlIGtleSBrLgorICovCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX3N0cmVhbV9pbml0X2tleXMoc3J0cF9zdHJlYW1fY3R4X3QgKnNydHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9tYXN0ZXJfa2V5X3QgKm1hc3Rlcl9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGN1cnJlbnRfbWtpX2luZGV4KTsKKworLyoKKyAqIHNydHBfc3RyZWFtX2luaXRfYWxsX21hc3Rlcl9rZXlzKHMsIGssIG0pIChyZSlpbml0aWFsaXplcyB0aGUgc3J0cF9zdHJlYW1fdCBzCisgKiBieSBkZXJpdmluZyBhbGwgb2YgdGhlIG5lZWRlZCBrZXlzIGZvciBhbGwgdGhlIG1hc3RlciBrZXlzIHVzaW5nIHRoZSBLREYgYW5kCisgKiB0aGUga2V5cyBmcm9tIGsuCisgKi8KK3NydHBfZXJyX3N0YXR1c190IHNydHBfc3RlYW1faW5pdF9hbGxfbWFzdGVyX2tleXMoCisgICAgc3J0cF9zdHJlYW1fY3R4X3QgKnNydHAsCisgICAgdW5zaWduZWQgY2hhciAqa2V5LAorICAgIHNydHBfbWFzdGVyX2tleV90ICoqa2V5cywKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWF4X21hc3Rlcl9rZXlzKTsKKworLyoKKyAqIHNydHBfc3RyZWFtX2luaXQocywgcCkgaW5pdGlhbGl6ZXMgdGhlIHNydHBfc3RyZWFtX3QgcyB0bworICogdXNlIHRoZSBwb2xpY3kgYXQgdGhlIGxvY2F0aW9uIHAKKyAqLworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9zdHJlYW1faW5pdChzcnRwX3N0cmVhbV90IHNydHAsIGNvbnN0IHNydHBfcG9saWN5X3QgKnApOworCisvKgorICogbGlic3J0cCBpbnRlcm5hbCBkYXRhdHlwZXMKKyAqLwordHlwZWRlZiBlbnVtIGRpcmVjdGlvbl90IHsKKyAgICBkaXJfdW5rbm93biA9IDAsCisgICAgZGlyX3NydHBfc2VuZGVyID0gMSwKKyAgICBkaXJfc3J0cF9yZWNlaXZlciA9IDIKK30gZGlyZWN0aW9uX3Q7CisKKy8qCisgKiBzcnRwX3Nlc3Npb25fa2V5c190IHdpbGwgY29udGFpbiB0aGUgZW5jcnlwdGlvbiwgaG1hYywgc2FsdCBrZXlzCisgKiBmb3IgYm90aCBTUlRQIGFuZCBTUlRDUC4gIFRoZSBzZXNzaW9uIGtleXMgd2lsbCBhbHNvIGNvbnRhaW4gdGhlCisgKiBNS0kgSUQgd2hpY2ggaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgc2Vzc2lvbiBrZXlzLgorICovCit0eXBlZGVmIHN0cnVjdCBzcnRwX3Nlc3Npb25fa2V5c190IHsKKyAgICBzcnRwX2NpcGhlcl90ICpydHBfY2lwaGVyOworICAgIHNydHBfY2lwaGVyX3QgKnJ0cF94dG5faGRyX2NpcGhlcjsKKyAgICBzcnRwX2F1dGhfdCAqcnRwX2F1dGg7CisgICAgc3J0cF9jaXBoZXJfdCAqcnRjcF9jaXBoZXI7CisgICAgc3J0cF9hdXRoX3QgKnJ0Y3BfYXV0aDsKKyAgICB1aW50OF90IHNhbHRbU1JUUF9BRUFEX1NBTFRfTEVOXTsKKyAgICB1aW50OF90IGNfc2FsdFtTUlRQX0FFQURfU0FMVF9MRU5dOworICAgIHVpbnQ4X3QgKm1raV9pZDsKKyAgICB1bnNpZ25lZCBpbnQgbWtpX3NpemU7CisgICAgc3J0cF9rZXlfbGltaXRfY3R4X3QgKmxpbWl0OworfSBzcnRwX3Nlc3Npb25fa2V5c190OworCisvKgorICogYW4gc3J0cF9zdHJlYW1fdCBoYXMgaXRzIG93biBTU1JDLCBlbmNyeXB0aW9uIGtleSwgYXV0aGVudGljYXRpb24KKyAqIGtleSwgc2VxdWVuY2UgbnVtYmVyLCBhbmQgcmVwbGF5IGRhdGFiYXNlCisgKgorICogbm90ZSB0aGF0IHRoZSBrZXlzIG1pZ2h0IG5vdCBhY3R1YWxseSBiZSB1bmlxdWUsIGluIHdoaWNoIGNhc2UgdGhlCisgKiBzcnRwX2NpcGhlcl90IGFuZCBzcnRwX2F1dGhfdCBwb2ludGVycyB3aWxsIHBvaW50IHRvIHRoZSBzYW1lIHN0cnVjdHVyZXMKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgc3J0cF9zdHJlYW1fY3R4X3RfIHsKKyAgICB1aW50MzJfdCBzc3JjOworICAgIHNydHBfc2Vzc2lvbl9rZXlzX3QgKnNlc3Npb25fa2V5czsKKyAgICB1bnNpZ25lZCBpbnQgbnVtX21hc3Rlcl9rZXlzOworICAgIHNydHBfcmRieF90IHJ0cF9yZGJ4OworICAgIHNydHBfc2VjX3NlcnZfdCBydHBfc2VydmljZXM7CisgICAgc3J0cF9yZGJfdCBydGNwX3JkYjsKKyAgICBzcnRwX3NlY19zZXJ2X3QgcnRjcF9zZXJ2aWNlczsKKyAgICBkaXJlY3Rpb25fdCBkaXJlY3Rpb247CisgICAgaW50IGFsbG93X3JlcGVhdF90eDsKKyAgICBzcnRwX2VrdF9zdHJlYW1fdCBla3Q7CisgICAgaW50ICplbmNfeHRuX2hkcjsKKyAgICBpbnQgZW5jX3h0bl9oZHJfY291bnQ7CisgICAgdWludDMyX3QgcGVuZGluZ19yb2M7CisgICAgc3RydWN0IHNydHBfc3RyZWFtX2N0eF90XyAqbmV4dDsgLyogbGlua2VkIGxpc3Qgb2Ygc3RyZWFtcyAqLworfSBzdHJwX3N0cmVhbV9jdHhfdF87CisKKy8qCisgKiBhbiBzcnRwX2N0eF90IGhvbGRzIGEgc3RyZWFtIGxpc3QgYW5kIGEgc2VydmljZSBkZXNjcmlwdGlvbgorICovCit0eXBlZGVmIHN0cnVjdCBzcnRwX2N0eF90XyB7CisgICAgc3RydWN0IHNydHBfc3RyZWFtX2N0eF90XyAqc3RyZWFtX2xpc3Q7ICAgICAvKiBsaW5rZWQgbGlzdCBvZiBzdHJlYW1zICAgICAqLworICAgIHN0cnVjdCBzcnRwX3N0cmVhbV9jdHhfdF8gKnN0cmVhbV90ZW1wbGF0ZTsgLyogYWN0IGFzIHRlbXBsYXRlIGZvciBvdGhlciAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0cmVhbXMgICAgICAgICAgICAgICAgICAgICovCisgICAgdm9pZCAqdXNlcl9kYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1c2VyIGN1c3RvbSBkYXRhICAgICAgICAgICAqLworfSBzcnRwX2N0eF90XzsKKworLyoKKyAqIHNydHBfaGRyX3QgcmVwcmVzZW50cyBhbiBSVFAgb3IgU1JUUCBoZWFkZXIuICBUaGUgYml0LWZpZWxkcyBpbgorICogdGhpcyBzdHJ1Y3R1cmUgc2hvdWxkIGJlIGRlY2xhcmVkICJ1bnNpZ25lZCBpbnQiIGluc3RlYWQgb2YKKyAqICJ1bnNpZ25lZCBjaGFyIiwgYnV0IGRvaW5nIHNvIGNhdXNlcyB0aGUgTVMgY29tcGlsZXIgdG8gbm90CisgKiBmdWxseSBwYWNrIHRoZSBiaXQgZmllbGRzLgorICoKKyAqIEluIHRoaXMgaW1wbGVtZW50YXRpb24sIGFuIHNydHBfaGRyX3QgaXMgYXNzdW1lZCB0byBiZSAzMi1iaXQgYWxpZ25lZAorICoKKyAqIChub3RlIHRoYXQgdGhpcyBkZWZpbml0aW9uIGZvbGxvd3MgdGhhdCBvZiBSRkMgMTg4OSBBcHBlbmRpeCBBLCBidXQKKyAqIGlzIG5vdCBpZGVudGljYWwpCisgKi8KKworI2lmbmRlZiBXT1JEU19CSUdFTkRJQU4KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGNoYXIgY2MgOiA0OyAgICAgIC8qIENTUkMgY291bnQgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIHggOiAxOyAgICAgICAvKiBoZWFkZXIgZXh0ZW5zaW9uIGZsYWcgICovCisgICAgdW5zaWduZWQgY2hhciBwIDogMTsgICAgICAgLyogcGFkZGluZyBmbGFnICAgICAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgdmVyc2lvbiA6IDI7IC8qIHByb3RvY29sIHZlcnNpb24gICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIHB0IDogNzsgICAgICAvKiBwYXlsb2FkIHR5cGUgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciBtIDogMTsgICAgICAgLyogbWFya2VyIGJpdCAgICAgICAgICAgICAqLworICAgIHVpbnQxNl90IHNlcTsgICAgICAgICAgICAgIC8qIHNlcXVlbmNlIG51bWJlciAgICAgICAgKi8KKyAgICB1aW50MzJfdCB0czsgICAgICAgICAgICAgICAvKiB0aW1lc3RhbXAgICAgICAgICAgICAgICovCisgICAgdWludDMyX3Qgc3NyYzsgICAgICAgICAgICAgLyogc3luY2hyb25pemF0aW9uIHNvdXJjZSAqLworfSBzcnRwX2hkcl90OworCisjZWxzZSAvKiAgQklHX0VORElBTiAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdW5zaWduZWQgY2hhciB2ZXJzaW9uIDogMjsgLyogcHJvdG9jb2wgdmVyc2lvbiAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgcCA6IDE7ICAgICAgIC8qIHBhZGRpbmcgZmxhZyAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIHggOiAxOyAgICAgICAvKiBoZWFkZXIgZXh0ZW5zaW9uIGZsYWcgICovCisgICAgdW5zaWduZWQgY2hhciBjYyA6IDQ7ICAgICAgLyogQ1NSQyBjb3VudCAgICAgICAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgbSA6IDE7ICAgICAgIC8qIG1hcmtlciBiaXQgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIHB0IDogNzsgICAgICAvKiBwYXlsb2FkIHR5cGUgICAgICAgICAgICovCisgICAgdWludDE2X3Qgc2VxOyAgICAgICAgICAgICAgLyogc2VxdWVuY2UgbnVtYmVyICAgICAgICAqLworICAgIHVpbnQzMl90IHRzOyAgICAgICAgICAgICAgIC8qIHRpbWVzdGFtcCAgICAgICAgICAgICAgKi8KKyAgICB1aW50MzJfdCBzc3JjOyAgICAgICAgICAgICAvKiBzeW5jaHJvbml6YXRpb24gc291cmNlICovCit9IHNydHBfaGRyX3Q7CisKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdWludDE2X3QgcHJvZmlsZV9zcGVjaWZpYzsgLyogcHJvZmlsZS1zcGVjaWZpYyBpbmZvICAgICAgICAgICAgICAgKi8KKyAgICB1aW50MTZfdCBsZW5ndGg7ICAgICAgICAgICAvKiBudW1iZXIgb2YgMzItYml0IHdvcmRzIGluIGV4dGVuc2lvbiAqLworfSBzcnRwX2hkcl94dG5kX3Q7CisKKy8qCisgKiBzcnRjcF9oZHJfdCByZXByZXNlbnRzIGEgc2VjdXJlIHJ0Y3AgaGVhZGVyCisgKgorICogaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwgYW4gc3J0Y3AgaGVhZGVyIGlzIGFzc3VtZWQgdG8gYmUgMzItYml0CisgKiBhbGluZ2VkCisgKi8KKworI2lmbmRlZiBXT1JEU19CSUdFTkRJQU4KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGNoYXIgcmMgOiA1OyAgICAgIC8qIHJlY2VwdGlvbiByZXBvcnQgY291bnQgKi8KKyAgICB1bnNpZ25lZCBjaGFyIHAgOiAxOyAgICAgICAvKiBwYWRkaW5nIGZsYWcgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciB2ZXJzaW9uIDogMjsgLyogcHJvdG9jb2wgdmVyc2lvbiAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgcHQgOiA4OyAgICAgIC8qIHBheWxvYWQgdHlwZSAgICAgICAgICAgKi8KKyAgICB1aW50MTZfdCBsZW47ICAgICAgICAgICAgICAvKiBsZW5ndGggICAgICAgICAgICAgICAgICovCisgICAgdWludDMyX3Qgc3NyYzsgICAgICAgICAgICAgLyogc3luY2hyb25pemF0aW9uIHNvdXJjZSAqLworfSBzcnRjcF9oZHJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGludCBpbmRleCA6IDMxOyAvKiBzcnRjcCBwYWNrZXQgaW5kZXggaW4gbmV0d29yayBvcmRlciEgICovCisgICAgdW5zaWduZWQgaW50IGUgOiAxOyAgICAgIC8qIGVuY3J5cHRlZD8gMT15ZXMgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3B0aW9uYWwgbWlrZXkvZXRjIGdvIGhlcmUgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgdGhlbiB0aGUgdmFyaWFibGUtbGVuZ3RoIGF1dGggdGFnICovCit9IHNydGNwX3RyYWlsZXJfdDsKKworI2Vsc2UgLyogIEJJR19FTkRJQU4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGNoYXIgdmVyc2lvbiA6IDI7IC8qIHByb3RvY29sIHZlcnNpb24gICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIHAgOiAxOyAgICAgICAvKiBwYWRkaW5nIGZsYWcgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciByYyA6IDU7ICAgICAgLyogcmVjZXB0aW9uIHJlcG9ydCBjb3VudCAqLworICAgIHVuc2lnbmVkIGNoYXIgcHQgOiA4OyAgICAgIC8qIHBheWxvYWQgdHlwZSAgICAgICAgICAgKi8KKyAgICB1aW50MTZfdCBsZW47ICAgICAgICAgICAgICAvKiBsZW5ndGggICAgICAgICAgICAgICAgICovCisgICAgdWludDMyX3Qgc3NyYzsgICAgICAgICAgICAgLyogc3luY2hyb25pemF0aW9uIHNvdXJjZSAqLworfSBzcnRjcF9oZHJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGludCBlIDogMTsgICAgICAvKiBlbmNyeXB0ZWQ/IDE9eWVzICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgaW50IGluZGV4IDogMzE7IC8qIHNydGNwIHBhY2tldCBpbmRleCAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3B0aW9uYWwgbWlrZXkvZXRjIGdvIGhlcmUgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgdGhlbiB0aGUgdmFyaWFibGUtbGVuZ3RoIGF1dGggdGFnICovCit9IHNydGNwX3RyYWlsZXJfdDsKKworI2VuZGlmCisKKy8qCisgKiBzcnRwX2hhbmRsZV9ldmVudChzcnRwLCBzcnRtLCBldm50KSBjYWxscyB0aGUgZXZlbnQgaGFuZGxpbmcKKyAqIGZ1bmN0aW9uLCBpZiB0aGVyZSBpcyBvbmUuCisgKgorICogVGhpcyBtYWNybyBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gYXMgaXQgaXMKKyAqIGFuIGludGVybmFsLW9ubHkgZnVuY3Rpb24uCisgKi8KKworI2RlZmluZSBzcnRwX2hhbmRsZV9ldmVudChzcnRwLCBzdHJtLCBldm50KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoc3J0cF9ldmVudF9oYW5kbGVyKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHNydHBfZXZlbnRfZGF0YV90IGRhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBkYXRhLnNlc3Npb24gPSBzcnRwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZGF0YS5zc3JjID0gbnRvaGwoc3RybS0+c3NyYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGRhdGEuZXZlbnQgPSBldm50OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzcnRwX2V2ZW50X2hhbmRsZXIoJmRhdGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBTUlRQX1BSSVZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zcnRwX3VzdC5oIGIvaW5jbHVkZS9zcnRwX3VzdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzkyMTgzLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvc3J0cF91c3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDI5MyArMCwwIEBACi0vKgotICogc3J0cC5oCi0gKgotICogaW50ZXJmYWNlIHRvIGxpYnNydHAKLSAqCi0gKiBEYXZpZCBBLiBNY0dyZXcKLSAqIENpc2NvIFN5c3RlbXMsIEluYy4KLSAqLwotCi0vKgotICoJCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSwgQ2lzY28gU3lzdGVtcywgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAKLSAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogCi0gKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICovCi0KLQotI2lmbmRlZiBTUlRQX0gKLSNkZWZpbmUgU1JUUF9ICi0KLSNpbmNsdWRlICJjcnlwdG9fa2VybmVsLmgiCi0jaW5jbHVkZSAicmRieC5oIgotI2luY2x1ZGUgImludGVnZXJzLmgiCi0KLS8qIGEgc2VjX3NlcnZfdCBkZXNjcmliZXMgYSBzZXQgb2Ygc2VjdXJpdHkgc2VydmljZXMgKi8KLQotdHlwZWRlZiBlbnVtIHsKLSAgc2VjX3NlcnZfbm9uZSAgICAgICAgICA9IDAsCi0gIHNlY19zZXJ2X2NvbmYgICAgICAgICAgPSAxLAotICBzZWNfc2Vydl9hdXRoICAgICAgICAgID0gMiwKLSAgc2VjX3NlcnZfY29uZl9hbmRfYXV0aCA9IDMKLX0gc2VjX3NlcnZfdDsKLQotLyogc3J0cF9jdHhfdCBzdG9yZXMgYWxsIG9mIHRoZSBzdGF0ZSBuZWVkZWQgZm9yIGFuIHNydHAgc2Vzc2lvbiAqLwotCi0jaW5jbHVkZSAidXN0LmgiCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgdXN0X2N0eF90ICB1c3Q7Ci0gIHNlY19zZXJ2X3Qgc2VydmljZXM7Ci0gIHVpbnQzMl90ICAgc3NyYzsKLX0gc3J0cF9jdHhfdDsKLQotCi0vKgotICogYW4gc3J0cF9oZHJfdCByZXByZXNlbnRzIHRoZSBzcnRwIGhlYWRlcgotICoKLSAqIGluIHRoaXMgaW1wbGVtZW50YXRpb24sIGFuIHNydHBfaGRyX3QgaXMgYXNzdW1lZCB0byBiZSAzMi1iaXQgYWxpZ25lZAotICogCi0gKiAobm90ZSB0aGF0IHRoaXMgZGVmaW5pdGlvbiBmb2xsb3dzIHRoYXQgb2YgUkZDIDE4ODkgQXBwZW5kaXggQSwgYnV0Ci0gKiBpcyBub3QgaWRlbnRpY2FsKQotICovCi0KLSNpZiAoV09SRFNfQklHRU5ESUFOID09IDApIC8qIGFzc3VtZSBMSVRUTEVfRU5ESUFOICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgdW5zaWduZWQgY2hhciBjYzo0OwkJLyogQ1NSQyBjb3VudCAqLwotICB1bnNpZ25lZCBjaGFyIHg6MTsJCS8qIGhlYWRlciBleHRlbnNpb24gZmxhZyAqLwotICB1bnNpZ25lZCBjaGFyIHA6MTsJCS8qIHBhZGRpbmcgZmxhZyAqLwotICB1bnNpZ25lZCBjaGFyIHZlcnNpb246MjsJLyogcHJvdG9jb2wgdmVyc2lvbiAqLwotICB1bnNpZ25lZCBjaGFyIHB0Ojc7CQkvKiBwYXlsb2FkIHR5cGUgKi8KLSAgdW5zaWduZWQgY2hhciBtOjE7CQkvKiBtYXJrZXIgYml0ICovCi0gIHVpbnQxNl90IHNlcTsJCQkvKiBzZXF1ZW5jZSBudW1iZXIgKi8KLSAgdWludDMyX3QgdHM7CQkJLyogdGltZXN0YW1wICovCi0gIHVpbnQzMl90IHNzcmM7CSAgICAgICAJLyogc3luY2hyb25pemF0aW9uIHNvdXJjZSAqLwotfSBzcnRwX2hkcl90OwotCi0jZWxzZSAvKiAgQklHX0VORElBTiAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIHVuc2lnbmVkIGNoYXIgdmVyc2lvbjoyOwkvKiBwcm90b2NvbCB2ZXJzaW9uICovCi0gIHVuc2lnbmVkIGNoYXIgcDoxOwkJLyogcGFkZGluZyBmbGFnICovCi0gIHVuc2lnbmVkIGNoYXIgeDoxOwkJLyogaGVhZGVyIGV4dGVuc2lvbiBmbGFnICovCi0gIHVuc2lnbmVkIGNoYXIgY2M6NDsJCS8qIENTUkMgY291bnQgKi8KLSAgdW5zaWduZWQgY2hhciBtOjE7CQkvKiBtYXJrZXIgYml0ICovCi0gIHVuc2lnbmVkIGNoYXIgcHQ6NzsJCS8qIHBheWxvYWQgdHlwZSAqLwotICB1aW50MTZfdCBzZXE7CQkJLyogc2VxdWVuY2UgbnVtYmVyICovCi0gIHVpbnQzMl90IHRzOwkJCS8qIHRpbWVzdGFtcCAqLwotICB1aW50MzJfdCBzc3JjOwkgICAgICAgCS8qIHN5bmNocm9uaXphdGlvbiBzb3VyY2UgKi8KLX0gc3J0cF9oZHJfdDsKLQotI2VuZGlmCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgdWludDE2X3QgcHJvZmlsZV9zcGVjaWZpYzsgICAgLyogcHJvZmlsZS1zcGVjaWZpYyBpbmZvICovCi0gIHVpbnQxNl90IGxlbmd0aDsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiAzMi1iaXQgd29yZHMgaW4gZXh0ZW5zaW9uICovCi19IHNydHBfaGRyX3h0bmRfdDsKLQotCi0KLS8qCi0gKiBhbiBzcnRwX3QgaXMgYSBwb2ludGVyIHRvIGFuIHNydHBfY3R4X3QgLSB3ZSBkZWZpbmUgdGhpcyB0byAKLSAqIGltcHJvdmUgZW5jYXBzdWFsdGlvbgotICoKLSAqLwotCi10eXBlZGVmIHNydHBfY3R4X3QgKnNydHBfdDsKLQotCi0vKgotICogc3J0cF9wcm90ZWN0KGN0eCwgcGt0LCBsZW4pIGFwcGxpZXMgc2VjdXJlIHJ0cCBwcm90ZWN0aW9uIHRvIHRoZQotICogcGFja2V0IHBrdCAod2hpY2ggaGFzIGxlbmd0aCAqbGVuKSB1c2luZyB0aGUgc3J0cCBjb250ZXh0IGN0eC4gIHRoaXMKLSAqIGlzIHRoZSBzcnRwIHNlbmRlci1zaWRlIHBhY2tldCBwcm9jZXNzaW5nIGZ1bmN0aW9uLgotICogCi0gKiAgICBub3RhIGJlbmU6IHRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGl0IGNhbiB3cml0ZSB0aGUgYXV0aCB0YWcKLSAqICAgIHRvIHRoZSBlbmQgb2YgdGhlIHBhY2tldAotICoKLSAqIGN0eCBpcyBhIHBvaW50ZXIgdG8gdGhlIHNydHBfY3R4X3Qgd2hpY2ggYXBwbGllcyB0bwotICogdGhlIHBhcnRpY3VsYXIgcGFja2V0Ci0gKgotICogcGt0IGlzIGEgcG9pbnRlciB0byB0aGUgcnRwIHBhY2tldCAoYmVmb3JlIHRoZSBjYWxsKTsgYWZ0ZXIKLSAqIHRoZSBmdW5jdGlvbiByZXR1cm5zLCBpdCBwb2ludHMgdG8gdGhlIHNydHAgcGFja2V0Ci0gKgotICogcGt0X29jdGV0X2xlbiBpcyBhIHBvaW50ZXIgdG8gdGhlIGxlbmd0aCBpbiBvY3RldHMgb2YgdGhlIGNvbXBsZXRlCi0gKiBSVFAgcGFja2V0IChoZWFkZXIgYW5kIGJvZHkpIGJlZm9yZSB0aGUgZnVuY3Rpb24gY2FsbCwgYW5kIG9mIHRoZQotICogY29tcGxldGUgU1JUUCBwYWNrZXQgYWZ0ZXIgdGhlIGNhbGwKLSAqCi0gKiByZXR1cm4gdmFsdWVzOgotICoKLSAqICAgIGVycl9zdGF0dXNfb2sgICAgICAgICAgICBubyBwcm9ibGVtcwotICogICAgZXJyX3N0YXR1c19yZXBsYXlfZmFpbCAgIHJ0cCBzZXF1ZW5jZSBudW1iZXIgd2FzIG5vbi1pbmNyZWFzaW5nCi0gKiAgICA8b3RoZXI+ICAgICAgICAgICAgICAgICAgZmFpbHVyZSBpbiBjcnlwdG9ncmFwaGljIG1lY2hhbmlzbXMKLSAqLwotCi1lcnJfc3RhdHVzX3QKLXNydHBfcHJvdGVjdChzcnRwX3QgY3R4LCBzcnRwX2hkcl90ICpwa3QsIGludCAqcGt0X29jdGV0X2xlbik7Ci0JICAgICAKLS8qCi0gKiBzcnRwX3VucHJvdGVjdChjdHgsIHBrdCwgbGVuKSBhcHBsaWVzIHNlY3VyZSBydHAgcHJvdGVjdGlvbiB0byB0aGUKLSAqIHNydHAgcGFja2V0IHBvaW50ZWQgdG8gYnkgcGt0ICh3aGljaCBoYXMgbGVuZ3RoICpsZW4pLCB1c2luZyB0aGUKLSAqIHNydHAgY29udGV0IHBvaW50ZWQgdG8gYnkgY3R4LiAgdGhpcyBpcyB0aGUgc2VjdXJlIHJ0cCByZWNlaXZlci1zaWRlCi0gKiBwYWNrZXQgcHJvY2Vzc2luZyBmdW5jdGlvbi4KLSAqCi0gKiBjdHggaXMgYSBwb2ludGVyIHRvIHRoZSBzcnRwX2N0eF90IHdoaWNoIGFwcGxpZXMgdG8KLSAqIHRoZSBwYXJ0aWN1bGFyIHBhY2tldAotICoKLSAqIHBrdCBpcyBhIHBvaW50ZXIgdG8gdGhlIHNydHAgcGFja2V0IChiZWZvcmUgdGhlIGNhbGwpLiAgYWZ0ZXIgdGhlCi0gKiBmdW5jdGlvbiByZXR1cm5zLCBpdCBwb2ludHMgdG8gdGhlIHJ0cCBwYWNrZXQgaWYgZXJyX3N0YXR1c19vayB3YXMKLSAqIHJldHVybmVkOyBvdGhlcndpc2UsIHRoZSB2YWx1ZSBvZiB0aGUgZGF0YSB0byB3aGljaCBpdCBwb2ludHMgaXMKLSAqIHVuZGVmaW5lZC4KLSAqCi0gKiBwa3Rfb2N0ZXRfbGVuIGlzIGEgcG9pbnRlciB0byB0aGUgbGVuZ3RoIGluIG9jdGV0cyBvZiB0aGUgY29tcGxldGUKLSAqIHNydHAgcGFja2V0IChoZWFkZXIgYW5kIGJvZHkpIGJlZm9yZSB0aGUgZnVuY3Rpb24gY2FsbCwgYW5kIG9mIHRoZQotICogY29tcGxldGUgcnRwIHBhY2tldCBhZnRlciB0aGUgY2FsbCwgaWYgZXJyX3N0YXR1c19vayB3YXMgcmV0dXJuZWQuCi0gKiBvdGhlcndpc2UsIHRoZSB2YWx1ZSBvZiB0aGUgZGF0YSB0byB3aGljaCBpdCBwb2ludHMgaXMgdW5kZWZpbmVkLgotICoKLSAqIHJldHVybiB2YWx1ZXM6Ci0gKiAKLSAqICAgIGVycl9zdGF0dXNfb2sgICAgICAgICAgIHRoZSBydHAgcGFja2V0IGlzIHZhbGlkCi0gKiAgICBlcnJfc3RhdHVzX2F1dGhfZmFpbCAgICB0aGUgc3J0cCBwYWNrZXQgZmFpbGVkIG1lc3NhZ2UgYXV0aGVudGljYXRpb24KLSAqICAgIGVycl9zdGF0dXNfcmVwbGF5X2ZhaWwgIHRoZSBzcnRwIHBhY2tldCBpcyBhIHJlcGxheSAodGhpcyBwYWNrZXQgaGFzCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkKQotICogICAgPG90aGVyPiAgICAgICAgICAgICAgICAgZmFpbHVyZSBpbiBjcnlwdG9ncmFwaGljIG1lY2hhbmlzbXMKLSAqIAotICogaWYgZXJyX3N0YXR1c19vayBpcyByZXR1cm5lZCwgdGhlbiBwa3QgcG9pbnRzIHRvIHRoZSBSVFAgcGFja2V0Ci0gKiBhbmQgcGt0X29jdGV0X2xlbiBpcyB0aGUgbnVtYmVyIG9mIG9jdGV0cyBpbiB0aGF0IHBhY2tldDsgIG90aGVyd2lzZSwKLSAqIG5vIGFzc3VtcHRpb25zIHNob3VsZCBiZSBtYWRlIGFib3V0IGVpdGhlciBkYXRhIGVsZW1lbnRzLgotICovCi0KLWVycl9zdGF0dXNfdAotc3J0cF91bnByb3RlY3Qoc3J0cF90IGN0eCwgc3J0cF9oZHJfdCAqcGt0LCBpbnQgKnBrdF9vY3RldF9sZW4pOwotCi0vKgotICogc3J0cF9hbGxvYyhjdHgsIC4uLikgYWxsb2NhdGVzIGEgc2VjdXJlIHJ0cCBjb250ZXh0IChzcnRwX2N0eF90KSBhbmQgCi0gKiBzZXRzIGN0eCB0byBwb2ludCB0byB0aGF0IHZhbHVlLi4gIHRoZSBvdGhlciBhcmd1bWVudHMgYXJlIHRoZSBwYXJhbWV0ZXIKLSAqIHZhbHVlcyBmb3IgdGhlIHNydHAgY29udGV4dDsgc2VlIHRoZSBjb21tZW50cyBpbiB0aGUgZGVjbGFyYXRpb24uCi0gKiAKLSAqIGFmdGVyIGFuIHNydHBfY3R4X3QgaXMgYWxsb2NhdGVkLCBpdCBtdXN0IGJlIGluaXRpYWxpemVkIGJ5IGNhbGxpbmcKLSAqIHRoZSBzcnRwX2luaXRfYWVzXzEyOF9wcmYoLi4uKSBmdW5jdGlvbiAoc2VlIGJlbG93KS4gIGFuCi0gKiBhbHRlcm5hdGl2ZSBidXQgdW5yZWNvbW1lbmRlZCBtZXRob2QgaXMgdG8gaW5pdGlhbGl6ZSB0aGUgY2lwaGVyX3QKLSAqIGFuZCBhdXRoX3QgdXNpbmcgdGhlIGNpcGhlciBhbmQgYXV0aCBhcGlzLgotICoKLSAqIHJldHVybiB2YWx1ZXM6Ci0gKiAKLSAqICAgZXJyX3N0YXR1c19vayAgICAgICAgICAgIG5vIHByb2JsZW1zCi0gKiAgIGVycl9zdGF0dXNfYWxsb2NfZmFpbCAgICBhIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgb2NjdXJlZAotICovCi0KLWVycl9zdGF0dXNfdAotc3J0cF9hbGxvYyhzcnRwX3QgKmN0eCwgICAgICAgICAgICAgICAgLyogc3J0cCBjb250ZXh0ICAgICAgICAgICAgICAgICovCi0JICAgY2lwaGVyX3R5cGVfaWRfdCBjX2lkLCAgICAgIC8qIGNpcGhlciB0eXBlICAgICAgICAgICAgICAgICAqLwotCSAgIGludCBjaXBoZXJfa2V5X2xlbiwgICAgICAgICAvKiBjaXBoZXIga2V5IGxlbmd0aCBpbiBvY3RldHMgKi8KLQkgICBhdXRoX3R5cGVfaWRfdCBhX2lkLCAgICAgICAgLyogYXV0aGVudGljYXRpb24gZnVuYyB0eXBlICAgICovCi0JICAgaW50IGF1dGhfa2V5X2xlbiwgICAgICAgICAgIC8qIGF1dGgga2V5IGxlbmd0aCBpbiBvY3RldHMgICAqLwotCSAgIGludCBhdXRoX3RhZ19sZW4sICAgICAgICAgICAvKiBhdXRoIHRhZyBsZW5ndGggaW4gb2N0ZXRzICAgKi8KLQkgICBzZWNfc2Vydl90IHNlY19zZXJ2ICAgICAgICAgLyogc2VjdXJpdHkgc2VydmljZXMgZmxhZyAgICAgICovCi0JICAgKTsgCi0KLQotLyoKLSAqIHNydHBfZGVhbGxvYyhjdHgpIGRlYWxsb2NhdGVzIHN0b3JhZ2UgZm9yIGFuIHNydHBfY3R4X3QuICB0aGlzCi0gKiBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSB0byBkZWFsbG9jYXRlIHRoZSBzdG9yYWdlCi0gKiBhbGxvY2F0ZWQgYnkgdGhlIGZ1bmN0aW9uIGNhbGwgc3J0cF9hbGxvYyhjdHgpLgotICoKLSAqIHJldHVybiB2YWx1ZXM6Ci0gKgotICogICAgZXJyX3N0YXR1c19vayAgICAgICAgICAgICBubyBwcm9ibGVtcwotICogICAgZXJyX3N0YXR1c19kZWFsbG9jX2ZhaWwgICBhIG1lbW9yeSBkZWFsbG9jYXRpb24gZmFpbHVyZSBvY2N1cmVkCi0gKi8KLQotZXJyX3N0YXR1c190Ci1zcnRwX2RlYWxsb2Moc3J0cF90IGN0eCk7Ci0KLS8qCi0gKiBzcnRwX2luaXRfYWVzXzEyOF9wcmYoY3R4LCBrZXksIHNhbHQpIGluaXRpYWxpemVzIGFuIHNydHBfY3R4X3QKLSAqIHdpdGggYSBnaXZlbiBtYXN0ZXIga2V5IGFuZCBtYXN0ZXIgc2FsdC4KLSAqIAotICogdGhlIGtleSBNVVNUIGJlIHNpeHRlZW4gb2N0ZXRzIGxvbmcKLSAqIAotICogdGhlIHNhbHQgTVVTVCBiZSBmb3VydGVlbiBvY3RldHMgbG9uZwotICoKLSAqIFRoZSBQUkYgdXNlZCBmb3Iga2V5IGRlcml2YXRpb24gaGVyZSBpcyB0aGF0IGRlZmluZWQgaW4gdGhlIHNlY3VyZQotICogcnRwIHNwZWNpZmljYXRpb24sIHRob3VnaCBpbiB0aGVvcnkgb3RoZXIgUFJGcyBjYW4gYmUgdXNlZC4gIFRoZQotICogY2lwaGVyIGlzIGhhcmR3aXJlZCB0byBBRVMtMTI4IENvdW50ZXIgTW9kZSB3aXRoIDExMiBiaXRzIG9mIHNhbHQuCi0gKgotICovCi0KLWVycl9zdGF0dXNfdAotc3J0cF9pbml0X2Flc18xMjhfcHJmKHNydHBfdCBzcnRwLCBjb25zdCBvY3RldF90IGtleVsxNl0pOwotCi0KLQotLyoKLSAqIHNydHBfZ2V0X3RyYWlsZXJfbGVuZ3RoKCZhKSByZXR1cm5zIHRoZSBudW1iZXIgb2Ygb2N0ZXRzIHRoYXQgd2lsbAotICogYmUgYWRkZWQgdG8gYW4gUlRQIHBhY2tldCBieSB0aGUgU1JUUCBwcm9jZXNzaW5nLiAgVGhpcyB2YWx1ZQotICogaXMgY29uc3RhbnQgZm9yIGEgZ2l2ZW4gc3J0cF9jdHhfdCAoaS5lLiBiZXR3ZWVuIGluaXRpYWxpemF0aW9ucykuCi0gKi8KLQotaW50Ci1zcnRwX2dldF90cmFpbGVyX2xlbmd0aChjb25zdCBzcnRwX3QgYSk7Ci0KLQotLyoKLSAqIGZ1bmN0aW9ucyBiZWxvdyBhcmUgaW50ZXJuYWwgdG8gbGlic3J0cCwgYW5kIGFyZSBub3QgcGFydCBvZiB0aGUKLSAqIGRvY3VtZW50ZWQgZXh0ZXJuYWwgYXBpIC0gY2F2ZWF0IGVtcHRvciEKLSAqLwotCi0vKiBmb3IgZGVidWdnaW5nIG9ubHkgLSBzcnRwX3ByaW50X3BhY2tldCBkdW1wcyBsb3RzIG9mIGluZm8gdG8gc3Rkb3V0ICovCi0KLXZvaWQKLXNydHBfcHJpbnRfcGFja2V0KHNydHBfaGRyX3QgKmhkciwgaW50IHBrdF9vY3RldF9sZW4pOwotCi0KLS8qCi0gKiBzcnRwX3NldF9yb2xsb3Zlcl9jb3VudGVyKGN0eCwgcikKLSAqCi0gKiBzZXRzIHRoZSByb2xsb3Zlcl9jb3VudGVyIGluIGN0eCB0byByLiAgZmFpbHMgYW5kIHJldHVybnMKLSAqIGVycl9zdGF0dXNfZXJyIGlmIHIgaXMgbGVzcyB0aGFuIHRoZSBjdXJyZW50IHJvbGxvdmVyCi0gKiBjb3VudGVyIHZhbHVlOyBvdGhlcndpc2UsIHJldHVybnMgZXJyX3N0YXR1c19vawotICoKLSAqIHRoaXMgZnVuY3Rpb24gc2hvdWxkICpvbmx5KiBiZSBjYWxsZWQgaWYgdHJ1c3R3b3J0aHkgZXh0ZXJuYWwKLSAqIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSwgZS5nLiBmcm9tIFJUQ1AKLSAqCi0gKiBmdXR1cmUgdmVyc2lvbnMgb2YgdGhpcyBpbXBsZW1lbnRhdGlvbiBtYXkgZ2V0IHJpZCBvZiB0aGlzIGZ1bmN0aW9uCi0gKiBhbmQgaW5zdGVhZCByZWFkIHRoZSBjb3JyZWN0IHJvbGxvdmVyIGNvdW50ZXIgdmFsdWUgZGlyZWN0bHkgZnJvbQotICogdGhlIHJ0Y3AgcGFja2V0cyBpbW1lZGlhdGVseSBhZnRlciB0aGV5IGhhdmUgYmVlbiBhdXRoZW50aWNhdGVkCi0gKgotICovCi0KLWVycl9zdGF0dXNfdAotc3J0cF9zZXRfcm9sbG92ZXJfY291bnRlcihzcnRwX3QgY3R4LCByb2xsb3Zlcl9jb3VudGVyX3Qgcik7Ci0KLQotI2VuZGlmIC8qIFNSVFBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zdGF0LmggYi9pbmNsdWRlL3N0YXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ1ZTRhNC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL3N0YXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBzdGF0cy5oCi0gKiAKLSAqIGludGVyZmFjZSB0byBzdGF0aXN0aWNhbCB0ZXN0IGZ1bmN0aW9ucwotICoKLSAqIERhdmlkIEEuIE1jR3JldwotICogQ2lzY28gU3lzdGVtcywgSW5jLgotICovCi0KLS8qCi0gKgkKLSAqIENvcHlyaWdodChjKSAyMDAxLTIwMDUsIENpc2NvIFN5c3RlbXMsIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogCi0gKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIAotICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAotICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqLwotCi0KLSNpZm5kZWYgU1RBVF9ICi0jZGVmaW5lIFNUQVRfSAotCi0jaW5jbHVkZSAiZGF0YXR5cGVzLmgiICAgICAgIC8qIGZvciBvY3RldF90ICAgICAgICAgICAgICAgICAgICAgICAqLwotI2luY2x1ZGUgImVyci5oIiAgICAgICAgICAgICAvKiBmb3IgZXJyX3N0YXR1c190ICAgICAgICAgICAgICAgICAgKi8KLSNpbmNsdWRlICJyYW5kX3NvdXJjZS5oIiAgICAgLyogZm9yIHJhbmRfc291cmNlX2Z1bmNfdCBkZWZpbml0aW9uICovCi0KLWVycl9zdGF0dXNfdAotc3RhdF90ZXN0X21vbm9iaXQob2N0ZXRfdCAqZGF0YSk7Ci0KLWVycl9zdGF0dXNfdAotc3RhdF90ZXN0X3Bva2VyKG9jdGV0X3QgKmRhdGEpOwotCi1lcnJfc3RhdHVzX3QKLXN0YXRfdGVzdF9ydW5zKG9jdGV0X3QgKmRhdGEpOwotCi1lcnJfc3RhdHVzX3QKLXN0YXRfdGVzdF9yYW5kX3NvdXJjZShyYW5kX3NvdXJjZV9mdW5jX3QgcnMpOwotCi0jZW5kaWYgLyogU1RBVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3V0X3NpbS5oIGIvaW5jbHVkZS91dF9zaW0uaAppbmRleCA0MGRjNGUyLi5lNjc4YjVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3V0X3NpbS5oCisrKyBiL2luY2x1ZGUvdXRfc2ltLmgKQEAgLTksMjYgKzksMjYgQEAKICAqLwogCiAvKgotICoJCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSwgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDE3LCBDaXNjbyBTeXN0ZW1zLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwogICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKICAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCisgKgogICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAogICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKKyAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKQEAgLTQ0LDM4ICs0NCw0MCBAQAogICoKICAqLwogCi0KLQogI2lmbmRlZiBVVF9TSU1fSAogI2RlZmluZSBVVF9TSU1fSAogCi0jaW5jbHVkZSAiaW50ZWdlcnMuaCIgIC8qIGZvciB1aW50MzJfdCAqLwotI2luY2x1ZGUgPHN0ZGxpYi5oPiAgIC8qIGZvciByYW5kb20oKSAqLworI2luY2x1ZGUgImludGVnZXJzLmgiIC8qIGZvciB1aW50MzJfdCAqLwogCi0jZGVmaW5lIFVUX0JVRiA0ICAgICAgLyogbWF4aW11bSBhbW91bnQgb2YgcGFja2V0IHJlb3JkZXIgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2RlZmluZSBVVF9CVUYgMTYwIC8qIG1heGltdW0gYW1vdW50IG9mIHBhY2tldCByZW9yZGVyICovCiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgdWludDMyX3QgaW5kZXg7Ci0gIHVpbnQzMl90IGJ1ZmZlcltVVF9CVUZdOworICAgIHVpbnQzMl90IGluZGV4OworICAgIHVpbnQzMl90IGJ1ZmZlcltVVF9CVUZdOwogfSB1dF9jb25uZWN0aW9uOwogCiAvKgotICogdXRfaW5pdCgmdSkgaW5pdGlhbGl6ZXMgdGhlIHV0X2Nvbm5lY3Rpb24gCisgKiB1dF9pbml0KCZ1KSBpbml0aWFsaXplcyB0aGUgdXRfY29ubmVjdGlvbgogICoKICAqIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyBiZSB0aGUgZmlyc3Qgb25lIGNhbGxlZCBvbiBhIG5ldwogICogdXRfY29ubmVjdGlvbgogICovCiAKLXZvaWQKLXV0X2luaXQodXRfY29ubmVjdGlvbiAqdXRjKTsKK3ZvaWQgdXRfaW5pdCh1dF9jb25uZWN0aW9uICp1dGMpOwogCiAvKgogICogdXRfbmV4dF9pbmRleCgmdSkgcmV0dXJucyB0aGUgbmV4dCBpbmRleCBmcm9tIHRoZSBzaW11bGF0ZWQKICAqIHVucmVsaWFibGUgY29ubmVjdGlvbgogICovCiAKLXVpbnQzMl90Ci11dF9uZXh0X2luZGV4KHV0X2Nvbm5lY3Rpb24gKnV0Yyk7Cit1aW50MzJfdCB1dF9uZXh0X2luZGV4KHV0X2Nvbm5lY3Rpb24gKnV0Yyk7CiAKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCiAKICNlbmRpZiAvKiBVVF9TSU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5zdGFsbC1zaCBiL2luc3RhbGwtc2gKaW5kZXggZTlkZTIzOC4uMGIwZmRjYiAxMDA3NTUKLS0tIGEvaW5zdGFsbC1zaAorKysgYi9pbnN0YWxsLXNoCkBAIC0xLDI1MSArMSw1MDEgQEAKICMhL2Jpbi9zaAotIwogIyBpbnN0YWxsIC0gaW5zdGFsbCBhIHByb2dyYW0sIHNjcmlwdCwgb3IgZGF0YWZpbGUKLSMgVGhpcyBjb21lcyBmcm9tIFgxMVI1IChtaXQvdXRpbC9zY3JpcHRzL2luc3RhbGwuc2gpLgorCitzY3JpcHR2ZXJzaW9uPTIwMTMtMTItMjUuMjM7ICMgVVRDCisKKyMgVGhpcyBvcmlnaW5hdGVzIGZyb20gWDExUjUgKG1pdC91dGlsL3NjcmlwdHMvaW5zdGFsbC5zaCksIHdoaWNoIHdhcworIyBsYXRlciByZWxlYXNlZCBpbiBYMTFSNiAoeGMvY29uZmlnL3V0aWwvaW5zdGFsbC5zaCkgd2l0aCB0aGUKKyMgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQgbGljZW5zZS4KICMKLSMgQ29weXJpZ2h0IDE5OTEgYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kKKyMgQ29weXJpZ2h0IChDKSAxOTk0IFggQ29uc29ydGl1bQogIwotIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKLSMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQKLSMgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0Ci0jIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKLSMgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCi0jIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywKLSMgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUKLSMgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCi0jIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisjIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bworIyBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZQorIyByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyMgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisjIFggQ09OU09SVElVTSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDLQorIyBUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiB0aGUgWCBDb25zb3J0aXVtIHNoYWxsIG5vdAorIyBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbC0KKyMgaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gdGhlIFggQ29uc29yLQorIyB0aXVtLgorIworIworIyBGU0YgY2hhbmdlcyB0byB0aGlzIGZpbGUgYXJlIGluIHRoZSBwdWJsaWMgZG9tYWluLgogIwogIyBDYWxsaW5nIHRoaXMgc2NyaXB0IGluc3RhbGwtc2ggaXMgcHJlZmVycmVkIG92ZXIgaW5zdGFsbC5zaCwgdG8gcHJldmVudAotIyBgbWFrZScgaW1wbGljaXQgcnVsZXMgZnJvbSBjcmVhdGluZyBhIGZpbGUgY2FsbGVkIGluc3RhbGwgZnJvbSBpdAorIyAnbWFrZScgaW1wbGljaXQgcnVsZXMgZnJvbSBjcmVhdGluZyBhIGZpbGUgY2FsbGVkIGluc3RhbGwgZnJvbSBpdAogIyB3aGVuIHRoZXJlIGlzIG5vIE1ha2VmaWxlLgogIwogIyBUaGlzIHNjcmlwdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIEJTRCBpbnN0YWxsIHNjcmlwdCwgYnV0IHdhcyB3cml0dGVuCi0jIGZyb20gc2NyYXRjaC4gIEl0IGNhbiBvbmx5IGluc3RhbGwgb25lIGZpbGUgYXQgYSB0aW1lLCBhIHJlc3RyaWN0aW9uCi0jIHNoYXJlZCB3aXRoIG1hbnkgT1MncyBpbnN0YWxsIHByb2dyYW1zLgorIyBmcm9tIHNjcmF0Y2guCiAKLQotIyBzZXQgRE9JVFBST0cgdG8gZWNobyB0byB0ZXN0IHRoaXMgc2NyaXB0Ci0KLSMgRG9uJ3QgdXNlIDotIHNpbmNlIDQuM0JTRCBhbmQgZWFybGllciBzaGVsbHMgZG9uJ3QgbGlrZSBpdC4KLWRvaXQ9IiR7RE9JVFBST0ctfSIKLQotCi0jIHB1dCBpbiBhYnNvbHV0ZSBwYXRocyBpZiB5b3UgZG9uJ3QgaGF2ZSB0aGVtIGluIHlvdXIgcGF0aDsgb3IgdXNlIGVudi4gdmFycy4KLQotbXZwcm9nPSIke01WUFJPRy1tdn0iCi1jcHByb2c9IiR7Q1BQUk9HLWNwfSIKLWNobW9kcHJvZz0iJHtDSE1PRFBST0ctY2htb2R9IgotY2hvd25wcm9nPSIke0NIT1dOUFJPRy1jaG93bn0iCi1jaGdycHByb2c9IiR7Q0hHUlBQUk9HLWNoZ3JwfSIKLXN0cmlwcHJvZz0iJHtTVFJJUFBST0ctc3RyaXB9Igotcm1wcm9nPSIke1JNUFJPRy1ybX0iCi1ta2RpcnByb2c9IiR7TUtESVJQUk9HLW1rZGlyfSIKLQotdHJhbnNmb3JtYmFzZW5hbWU9IiIKLXRyYW5zZm9ybV9hcmc9IiIKLWluc3RjbWQ9IiRtdnByb2ciCi1jaG1vZGNtZD0iJGNobW9kcHJvZyAwNzU1IgotY2hvd25jbWQ9IiIKLWNoZ3JwY21kPSIiCi1zdHJpcGNtZD0iIgotcm1jbWQ9IiRybXByb2cgLWYiCi1tdmNtZD0iJG12cHJvZyIKLXNyYz0iIgotZHN0PSIiCi1kaXJfYXJnPSIiCi0KLXdoaWxlIFsgeCIkMSIgIT0geCBdOyBkbwotICAgIGNhc2UgJDEgaW4KLQktYykgaW5zdGNtZD0iJGNwcHJvZyIKLQkgICAgc2hpZnQKLQkgICAgY29udGludWU7OwotCi0JLWQpIGRpcl9hcmc9dHJ1ZQotCSAgICBzaGlmdAotCSAgICBjb250aW51ZTs7Ci0KLQktbSkgY2htb2RjbWQ9IiRjaG1vZHByb2cgJDIiCi0JICAgIHNoaWZ0Ci0JICAgIHNoaWZ0Ci0JICAgIGNvbnRpbnVlOzsKLQotCS1vKSBjaG93bmNtZD0iJGNob3ducHJvZyAkMiIKLQkgICAgc2hpZnQKLQkgICAgc2hpZnQKLQkgICAgY29udGludWU7OwotCi0JLWcpIGNoZ3JwY21kPSIkY2hncnBwcm9nICQyIgotCSAgICBzaGlmdAotCSAgICBzaGlmdAotCSAgICBjb250aW51ZTs7Ci0KLQktcykgc3RyaXBjbWQ9IiRzdHJpcHByb2ciCi0JICAgIHNoaWZ0Ci0JICAgIGNvbnRpbnVlOzsKLQotCS10PSopIHRyYW5zZm9ybWFyZz1gZWNobyAkMSB8IHNlZCAncy8tdD0vLydgCi0JICAgIHNoaWZ0Ci0JICAgIGNvbnRpbnVlOzsKLQotCS1iPSopIHRyYW5zZm9ybWJhc2VuYW1lPWBlY2hvICQxIHwgc2VkICdzLy1iPS8vJ2AKLQkgICAgc2hpZnQKLQkgICAgY29udGludWU7OwotCi0JKikgIGlmIFsgeCIkc3JjIiA9IHggXQotCSAgICB0aGVuCi0JCXNyYz0kMQotCSAgICBlbHNlCi0JCSMgdGhpcyBjb2xvbiBpcyB0byB3b3JrIGFyb3VuZCBhIDM4NkJTRCAvYmluL3NoIGJ1ZwotCQk6Ci0JCWRzdD0kMQotCSAgICBmaQotCSAgICBzaGlmdAotCSAgICBjb250aW51ZTs7Ci0gICAgZXNhYwotZG9uZQotCi1pZiBbIHgiJHNyYyIgPSB4IF0KLXRoZW4KLQllY2hvICJpbnN0YWxsOglubyBpbnB1dCBmaWxlIHNwZWNpZmllZCIKLQlleGl0IDEKLWVsc2UKLQl0cnVlCi1maQotCi1pZiBbIHgiJGRpcl9hcmciICE9IHggXTsgdGhlbgotCWRzdD0kc3JjCi0Jc3JjPSIiCi0JCi0JaWYgWyAtZCAkZHN0IF07IHRoZW4KLQkJaW5zdGNtZD06Ci0JCWNobW9kY21kPSIiCi0JZWxzZQotCQlpbnN0Y21kPW1rZGlyCi0JZmkKLWVsc2UKLQotIyBXYWl0aW5nIGZvciB0aGlzIHRvIGJlIGRldGVjdGVkIGJ5IHRoZSAiJGluc3RjbWQgJHNyYyAkZHN0dG1wIiBjb21tYW5kCi0jIG1pZ2h0IGNhdXNlIGRpcmVjdG9yaWVzIHRvIGJlIGNyZWF0ZWQsIHdoaWNoIHdvdWxkIGJlIGVzcGVjaWFsbHkgYmFkIAotIyBpZiAkc3JjIChhbmQgdGh1cyAkZHN0dG1wKSBjb250YWlucyAnKicuCi0KLQlpZiBbIC1mICRzcmMgLW8gLWQgJHNyYyBdCi0JdGhlbgotCQl0cnVlCi0JZWxzZQotCQllY2hvICJpbnN0YWxsOiAgJHNyYyBkb2VzIG5vdCBleGlzdCIKLQkJZXhpdCAxCi0JZmkKLQkKLQlpZiBbIHgiJGRzdCIgPSB4IF0KLQl0aGVuCi0JCWVjaG8gImluc3RhbGw6CW5vIGRlc3RpbmF0aW9uIHNwZWNpZmllZCIKLQkJZXhpdCAxCi0JZWxzZQotCQl0cnVlCi0JZmkKLQotIyBJZiBkZXN0aW5hdGlvbiBpcyBhIGRpcmVjdG9yeSwgYXBwZW5kIHRoZSBpbnB1dCBmaWxlbmFtZTsgaWYgeW91ciBzeXN0ZW0KLSMgZG9lcyBub3QgbGlrZSBkb3VibGUgc2xhc2hlcyBpbiBmaWxlbmFtZXMsIHlvdSBtYXkgbmVlZCB0byBhZGQgc29tZSBsb2dpYwotCi0JaWYgWyAtZCAkZHN0IF0KLQl0aGVuCi0JCWRzdD0iJGRzdCIvYGJhc2VuYW1lICRzcmNgCi0JZWxzZQotCQl0cnVlCi0JZmkKLWZpCi0KLSMjIHRoaXMgc2VkIGNvbW1hbmQgZW11bGF0ZXMgdGhlIGRpcm5hbWUgY29tbWFuZAotZHN0ZGlyPWBlY2hvICRkc3QgfCBzZWQgLWUgJ3MsW14vXSokLCw7cywvJCwsO3MsXiQsLiwnYAotCi0jIE1ha2Ugc3VyZSB0aGF0IHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZXhpc3RzLgotIyAgdGhpcyBwYXJ0IGlzIHRha2VuIGZyb20gTm9haCBGcmllZG1hbidzIG1raW5zdGFsbGRpcnMgc2NyaXB0Ci0KLSMgU2tpcCBsb3RzIG9mIHN0YXQgY2FsbHMgaW4gdGhlIHVzdWFsIGNhc2UuCi1pZiBbICEgLWQgIiRkc3RkaXIiIF07IHRoZW4KLWRlZmF1bHRJRlM9JwkKK3RhYj0nCScKK25sPScKICcKLUlGUz0iJHtJRlMtJHtkZWZhdWx0SUZTfX0iCitJRlM9IiAkdGFiJG5sIgogCi1vSUZTPSIke0lGU30iCi0jIFNvbWUgc2gncyBjYW4ndCBoYW5kbGUgSUZTPS8gZm9yIHNvbWUgcmVhc29uLgotSUZTPSclJwotc2V0IC0gYGVjaG8gJHtkc3RkaXJ9IHwgc2VkIC1lICdzQC9AJUBnJyAtZSAnc0BeJUAvQCdgCi1JRlM9IiR7b0lGU30iCisjIFNldCBET0lUUFJPRyB0byAiZWNobyIgdG8gdGVzdCB0aGlzIHNjcmlwdC4KIAotcGF0aGNvbXA9JycKK2RvaXQ9JHtET0lUUFJPRy19Citkb2l0X2V4ZWM9JHtkb2l0Oi1leGVjfQogCi13aGlsZSBbICQjIC1uZSAwIF0gOyBkbwotCXBhdGhjb21wPSIke3BhdGhjb21wfSR7MX0iCi0Jc2hpZnQKKyMgUHV0IGluIGFic29sdXRlIGZpbGUgbmFtZXMgaWYgeW91IGRvbid0IGhhdmUgdGhlbSBpbiB5b3VyIHBhdGg7CisjIG9yIHVzZSBlbnZpcm9ubWVudCB2YXJzLgogCi0JaWYgWyAhIC1kICIke3BhdGhjb21wfSIgXSA7Ci0gICAgICAgIHRoZW4KLQkJJG1rZGlycHJvZyAiJHtwYXRoY29tcH0iCi0JZWxzZQotCQl0cnVlCi0JZmkKK2NoZ3JwcHJvZz0ke0NIR1JQUFJPRy1jaGdycH0KK2NobW9kcHJvZz0ke0NITU9EUFJPRy1jaG1vZH0KK2Nob3ducHJvZz0ke0NIT1dOUFJPRy1jaG93bn0KK2NtcHByb2c9JHtDTVBQUk9HLWNtcH0KK2NwcHJvZz0ke0NQUFJPRy1jcH0KK21rZGlycHJvZz0ke01LRElSUFJPRy1ta2Rpcn0KK212cHJvZz0ke01WUFJPRy1tdn0KK3JtcHJvZz0ke1JNUFJPRy1ybX0KK3N0cmlwcHJvZz0ke1NUUklQUFJPRy1zdHJpcH0KIAotCXBhdGhjb21wPSIke3BhdGhjb21wfS8iCitwb3NpeF9ta2Rpcj0KKworIyBEZXNpcmVkIG1vZGUgb2YgaW5zdGFsbGVkIGZpbGUuCittb2RlPTA3NTUKKworY2hncnBjbWQ9CitjaG1vZGNtZD0kY2htb2Rwcm9nCitjaG93bmNtZD0KK212Y21kPSRtdnByb2cKK3JtY21kPSIkcm1wcm9nIC1mIgorc3RyaXBjbWQ9CisKK3NyYz0KK2RzdD0KK2Rpcl9hcmc9Citkc3RfYXJnPQorCitjb3B5X29uX2NoYW5nZT1mYWxzZQoraXNfdGFyZ2V0X2FfZGlyZWN0b3J5PXBvc3NpYmx5CisKK3VzYWdlPSJcCitVc2FnZTogJDAgW09QVElPTl0uLi4gWy1UXSBTUkNGSUxFIERTVEZJTEUKKyAgIG9yOiAkMCBbT1BUSU9OXS4uLiBTUkNGSUxFUy4uLiBESVJFQ1RPUlkKKyAgIG9yOiAkMCBbT1BUSU9OXS4uLiAtdCBESVJFQ1RPUlkgU1JDRklMRVMuLi4KKyAgIG9yOiAkMCBbT1BUSU9OXS4uLiAtZCBESVJFQ1RPUklFUy4uLgorCitJbiB0aGUgMXN0IGZvcm0sIGNvcHkgU1JDRklMRSB0byBEU1RGSUxFLgorSW4gdGhlIDJuZCBhbmQgM3JkLCBjb3B5IGFsbCBTUkNGSUxFUyB0byBESVJFQ1RPUlkuCitJbiB0aGUgNHRoLCBjcmVhdGUgRElSRUNUT1JJRVMuCisKK09wdGlvbnM6CisgICAgIC0taGVscCAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQuCisgICAgIC0tdmVyc2lvbiAgZGlzcGxheSB2ZXJzaW9uIGluZm8gYW5kIGV4aXQuCisKKyAgLWMgICAgICAgICAgICAoaWdub3JlZCkKKyAgLUMgICAgICAgICAgICBpbnN0YWxsIG9ubHkgaWYgZGlmZmVyZW50IChwcmVzZXJ2ZSB0aGUgbGFzdCBkYXRhIG1vZGlmaWNhdGlvbiB0aW1lKQorICAtZCAgICAgICAgICAgIGNyZWF0ZSBkaXJlY3RvcmllcyBpbnN0ZWFkIG9mIGluc3RhbGxpbmcgZmlsZXMuCisgIC1nIEdST1VQICAgICAgJGNoZ3JwcHJvZyBpbnN0YWxsZWQgZmlsZXMgdG8gR1JPVVAuCisgIC1tIE1PREUgICAgICAgJGNobW9kcHJvZyBpbnN0YWxsZWQgZmlsZXMgdG8gTU9ERS4KKyAgLW8gVVNFUiAgICAgICAkY2hvd25wcm9nIGluc3RhbGxlZCBmaWxlcyB0byBVU0VSLgorICAtcyAgICAgICAgICAgICRzdHJpcHByb2cgaW5zdGFsbGVkIGZpbGVzLgorICAtdCBESVJFQ1RPUlkgIGluc3RhbGwgaW50byBESVJFQ1RPUlkuCisgIC1UICAgICAgICAgICAgcmVwb3J0IGFuIGVycm9yIGlmIERTVEZJTEUgaXMgYSBkaXJlY3RvcnkuCisKK0Vudmlyb25tZW50IHZhcmlhYmxlcyBvdmVycmlkZSB0aGUgZGVmYXVsdCBjb21tYW5kczoKKyAgQ0hHUlBQUk9HIENITU9EUFJPRyBDSE9XTlBST0cgQ01QUFJPRyBDUFBST0cgTUtESVJQUk9HIE1WUFJPRworICBSTVBST0cgU1RSSVBQUk9HCisiCisKK3doaWxlIHRlc3QgJCMgLW5lIDA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtYykgOzsKKworICAgIC1DKSBjb3B5X29uX2NoYW5nZT10cnVlOzsKKworICAgIC1kKSBkaXJfYXJnPXRydWU7OworCisgICAgLWcpIGNoZ3JwY21kPSIkY2hncnBwcm9nICQyIgorICAgICAgICBzaGlmdDs7CisKKyAgICAtLWhlbHApIGVjaG8gIiR1c2FnZSI7IGV4aXQgJD87OworCisgICAgLW0pIG1vZGU9JDIKKyAgICAgICAgY2FzZSAkbW9kZSBpbgorICAgICAgICAgIConICcqIHwgKiIkdGFiIiogfCAqIiRubCIqIHwgKicqJyogfCAqJz8nKiB8IConWycqKQorICAgICAgICAgICAgZWNobyAiJDA6IGludmFsaWQgbW9kZTogJG1vZGUiID4mMgorICAgICAgICAgICAgZXhpdCAxOzsKKyAgICAgICAgZXNhYworICAgICAgICBzaGlmdDs7CisKKyAgICAtbykgY2hvd25jbWQ9IiRjaG93bnByb2cgJDIiCisgICAgICAgIHNoaWZ0OzsKKworICAgIC1zKSBzdHJpcGNtZD0kc3RyaXBwcm9nOzsKKworICAgIC10KQorICAgICAgICBpc190YXJnZXRfYV9kaXJlY3Rvcnk9YWx3YXlzCisgICAgICAgIGRzdF9hcmc9JDIKKyAgICAgICAgIyBQcm90ZWN0IG5hbWVzIHByb2JsZW1hdGljIGZvciAndGVzdCcgYW5kIG90aGVyIHV0aWxpdGllcy4KKyAgICAgICAgY2FzZSAkZHN0X2FyZyBpbgorICAgICAgICAgIC0qIHwgWz1cKFwpIV0pIGRzdF9hcmc9Li8kZHN0X2FyZzs7CisgICAgICAgIGVzYWMKKyAgICAgICAgc2hpZnQ7OworCisgICAgLVQpIGlzX3RhcmdldF9hX2RpcmVjdG9yeT1uZXZlcjs7CisKKyAgICAtLXZlcnNpb24pIGVjaG8gIiQwICRzY3JpcHR2ZXJzaW9uIjsgZXhpdCAkPzs7CisKKyAgICAtLSkgc2hpZnQKKyAgICAgICAgYnJlYWs7OworCisgICAgLSopIGVjaG8gIiQwOiBpbnZhbGlkIG9wdGlvbjogJDEiID4mMgorICAgICAgICBleGl0IDE7OworCisgICAgKikgIGJyZWFrOzsKKyAgZXNhYworICBzaGlmdAogZG9uZQorCisjIFdlIGFsbG93IHRoZSB1c2Ugb2Ygb3B0aW9ucyAtZCBhbmQgLVQgdG9nZXRoZXIsIGJ5IG1ha2luZyAtZAorIyB0YWtlIHRoZSBwcmVjZWRlbmNlOyB0aGlzIGlzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggR05VIGluc3RhbGwuCisKK2lmIHRlc3QgLW4gIiRkaXJfYXJnIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkZHN0X2FyZyI7IHRoZW4KKyAgICBlY2hvICIkMDogdGFyZ2V0IGRpcmVjdG9yeSBub3QgYWxsb3dlZCB3aGVuIGluc3RhbGxpbmcgYSBkaXJlY3RvcnkuIiA+JjIKKyAgICBleGl0IDEKKyAgZmkKIGZpCiAKLWlmIFsgeCIkZGlyX2FyZyIgIT0geCBdCi10aGVuCi0JJGRvaXQgJGluc3RjbWQgJGRzdCAmJgoraWYgdGVzdCAkIyAtbmUgMCAmJiB0ZXN0IC16ICIkZGlyX2FyZyRkc3RfYXJnIjsgdGhlbgorICAjIFdoZW4gLWQgaXMgdXNlZCwgYWxsIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIGRpcmVjdG9yaWVzIHRvIGNyZWF0ZS4KKyAgIyBXaGVuIC10IGlzIHVzZWQsIHRoZSBkZXN0aW5hdGlvbiBpcyBhbHJlYWR5IHNwZWNpZmllZC4KKyAgIyBPdGhlcndpc2UsIHRoZSBsYXN0IGFyZ3VtZW50IGlzIHRoZSBkZXN0aW5hdGlvbi4gIFJlbW92ZSBpdCBmcm9tICRALgorICBmb3IgYXJnCisgIGRvCisgICAgaWYgdGVzdCAtbiAiJGRzdF9hcmciOyB0aGVuCisgICAgICAjICRAIGlzIG5vdCBlbXB0eTogaXQgY29udGFpbnMgYXQgbGVhc3QgJGFyZy4KKyAgICAgIHNldCBmbm9yZCAiJEAiICIkZHN0X2FyZyIKKyAgICAgIHNoaWZ0ICMgZm5vcmQKKyAgICBmaQorICAgIHNoaWZ0ICMgYXJnCisgICAgZHN0X2FyZz0kYXJnCisgICAgIyBQcm90ZWN0IG5hbWVzIHByb2JsZW1hdGljIGZvciAndGVzdCcgYW5kIG90aGVyIHV0aWxpdGllcy4KKyAgICBjYXNlICRkc3RfYXJnIGluCisgICAgICAtKiB8IFs9XChcKSFdKSBkc3RfYXJnPS4vJGRzdF9hcmc7OworICAgIGVzYWMKKyAgZG9uZQorZmkKIAotCWlmIFsgeCIkY2hvd25jbWQiICE9IHggXTsgdGhlbiAkZG9pdCAkY2hvd25jbWQgJGRzdDsgZWxzZSB0cnVlIDsgZmkgJiYKLQlpZiBbIHgiJGNoZ3JwY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJGNoZ3JwY21kICRkc3Q7IGVsc2UgdHJ1ZSA7IGZpICYmCi0JaWYgWyB4IiRzdHJpcGNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRzdHJpcGNtZCAkZHN0OyBlbHNlIHRydWUgOyBmaSAmJgotCWlmIFsgeCIkY2htb2RjbWQiICE9IHggXTsgdGhlbiAkZG9pdCAkY2htb2RjbWQgJGRzdDsgZWxzZSB0cnVlIDsgZmkKLWVsc2UKK2lmIHRlc3QgJCMgLWVxIDA7IHRoZW4KKyAgaWYgdGVzdCAteiAiJGRpcl9hcmciOyB0aGVuCisgICAgZWNobyAiJDA6IG5vIGlucHV0IGZpbGUgc3BlY2lmaWVkLiIgPiYyCisgICAgZXhpdCAxCisgIGZpCisgICMgSXQncyBPSyB0byBjYWxsICdpbnN0YWxsLXNoIC1kJyB3aXRob3V0IGFyZ3VtZW50LgorICAjIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGNyZWF0aW5nIGNvbmRpdGlvbmFsIGRpcmVjdG9yaWVzLgorICBleGl0IDAKK2ZpCiAKLSMgSWYgd2UncmUgZ29pbmcgdG8gcmVuYW1lIHRoZSBmaW5hbCBleGVjdXRhYmxlLCBkZXRlcm1pbmUgdGhlIG5hbWUgbm93LgoraWYgdGVzdCAteiAiJGRpcl9hcmciOyB0aGVuCisgIGlmIHRlc3QgJCMgLWd0IDEgfHwgdGVzdCAiJGlzX3RhcmdldF9hX2RpcmVjdG9yeSIgPSBhbHdheXM7IHRoZW4KKyAgICBpZiB0ZXN0ICEgLWQgIiRkc3RfYXJnIjsgdGhlbgorICAgICAgZWNobyAiJDA6ICRkc3RfYXJnOiBJcyBub3QgYSBkaXJlY3RvcnkuIiA+JjIKKyAgICAgIGV4aXQgMQorICAgIGZpCisgIGZpCitmaQogCi0JaWYgWyB4IiR0cmFuc2Zvcm1hcmciID0geCBdIAotCXRoZW4KLQkJZHN0ZmlsZT1gYmFzZW5hbWUgJGRzdGAKLQllbHNlCi0JCWRzdGZpbGU9YGJhc2VuYW1lICRkc3QgJHRyYW5zZm9ybWJhc2VuYW1lIHwgCi0JCQlzZWQgJHRyYW5zZm9ybWFyZ2AkdHJhbnNmb3JtYmFzZW5hbWUKLQlmaQoraWYgdGVzdCAteiAiJGRpcl9hcmciOyB0aGVuCisgIGRvX2V4aXQ9JyhleGl0ICRyZXQpOyBleGl0ICRyZXQnCisgIHRyYXAgInJldD0xMjk7ICRkb19leGl0IiAxCisgIHRyYXAgInJldD0xMzA7ICRkb19leGl0IiAyCisgIHRyYXAgInJldD0xNDE7ICRkb19leGl0IiAxMworICB0cmFwICJyZXQ9MTQzOyAkZG9fZXhpdCIgMTUKIAotIyBkb24ndCBhbGxvdyB0aGUgc2VkIGNvbW1hbmQgdG8gY29tcGxldGVseSBlbGltaW5hdGUgdGhlIGZpbGVuYW1lCisgICMgU2V0IHVtYXNrIHNvIGFzIG5vdCB0byBjcmVhdGUgdGVtcHMgd2l0aCB0b28tZ2VuZXJvdXMgbW9kZXMuCisgICMgSG93ZXZlciwgJ3N0cmlwJyByZXF1aXJlcyBib3RoIHJlYWQgYW5kIHdyaXRlIGFjY2VzcyB0byB0ZW1wcy4KKyAgY2FzZSAkbW9kZSBpbgorICAgICMgT3B0aW1pemUgY29tbW9uIGNhc2VzLgorICAgICo2NDQpIGNwX3VtYXNrPTEzMzs7CisgICAgKjc1NSkgY3BfdW1hc2s9MjI7OwogCi0JaWYgWyB4IiRkc3RmaWxlIiA9IHggXSAKLQl0aGVuCi0JCWRzdGZpbGU9YGJhc2VuYW1lICRkc3RgCi0JZWxzZQotCQl0cnVlCi0JZmkKKyAgICAqWzAtN10pCisgICAgICBpZiB0ZXN0IC16ICIkc3RyaXBjbWQiOyB0aGVuCisgICAgICAgIHVfcGx1c19ydz0KKyAgICAgIGVsc2UKKyAgICAgICAgdV9wbHVzX3J3PSclIDIwMCcKKyAgICAgIGZpCisgICAgICBjcF91bWFzaz1gZXhwciAnKCcgNzc3IC0gJG1vZGUgJSAxMDAwICcpJyAkdV9wbHVzX3J3YDs7CisgICAgKikKKyAgICAgIGlmIHRlc3QgLXogIiRzdHJpcGNtZCI7IHRoZW4KKyAgICAgICAgdV9wbHVzX3J3PQorICAgICAgZWxzZQorICAgICAgICB1X3BsdXNfcnc9LHUrcncKKyAgICAgIGZpCisgICAgICBjcF91bWFzaz0kbW9kZSR1X3BsdXNfcnc7OworICBlc2FjCitmaQogCi0jIE1ha2UgYSB0ZW1wIGZpbGUgbmFtZSBpbiB0aGUgcHJvcGVyIGRpcmVjdG9yeS4KK2ZvciBzcmMKK2RvCisgICMgUHJvdGVjdCBuYW1lcyBwcm9ibGVtYXRpYyBmb3IgJ3Rlc3QnIGFuZCBvdGhlciB1dGlsaXRpZXMuCisgIGNhc2UgJHNyYyBpbgorICAgIC0qIHwgWz1cKFwpIV0pIHNyYz0uLyRzcmM7OworICBlc2FjCiAKLQlkc3R0bXA9JGRzdGRpci8jaW5zdC4kJCMKKyAgaWYgdGVzdCAtbiAiJGRpcl9hcmciOyB0aGVuCisgICAgZHN0PSRzcmMKKyAgICBkc3RkaXI9JGRzdAorICAgIHRlc3QgLWQgIiRkc3RkaXIiCisgICAgZHN0ZGlyX3N0YXR1cz0kPworICBlbHNlCiAKLSMgTW92ZSBvciBjb3B5IHRoZSBmaWxlIG5hbWUgdG8gdGhlIHRlbXAgbmFtZQorICAgICMgV2FpdGluZyBmb3IgdGhpcyB0byBiZSBkZXRlY3RlZCBieSB0aGUgIiRjcHByb2cgJHNyYyAkZHN0dG1wIiBjb21tYW5kCisgICAgIyBtaWdodCBjYXVzZSBkaXJlY3RvcmllcyB0byBiZSBjcmVhdGVkLCB3aGljaCB3b3VsZCBiZSBlc3BlY2lhbGx5IGJhZAorICAgICMgaWYgJHNyYyAoYW5kIHRodXMgJGRzdHRtcCkgY29udGFpbnMgJyonLgorICAgIGlmIHRlc3QgISAtZiAiJHNyYyIgJiYgdGVzdCAhIC1kICIkc3JjIjsgdGhlbgorICAgICAgZWNobyAiJDA6ICRzcmMgZG9lcyBub3QgZXhpc3QuIiA+JjIKKyAgICAgIGV4aXQgMQorICAgIGZpCiAKLQkkZG9pdCAkaW5zdGNtZCAkc3JjICRkc3R0bXAgJiYKKyAgICBpZiB0ZXN0IC16ICIkZHN0X2FyZyI7IHRoZW4KKyAgICAgIGVjaG8gIiQwOiBubyBkZXN0aW5hdGlvbiBzcGVjaWZpZWQuIiA+JjIKKyAgICAgIGV4aXQgMQorICAgIGZpCisgICAgZHN0PSRkc3RfYXJnCiAKLQl0cmFwICJybSAtZiAke2RzdHRtcH0iIDAgJiYKKyAgICAjIElmIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LCBhcHBlbmQgdGhlIGlucHV0IGZpbGVuYW1lOyB3b24ndCB3b3JrCisgICAgIyBpZiBkb3VibGUgc2xhc2hlcyBhcmVuJ3QgaWdub3JlZC4KKyAgICBpZiB0ZXN0IC1kICIkZHN0IjsgdGhlbgorICAgICAgaWYgdGVzdCAiJGlzX3RhcmdldF9hX2RpcmVjdG9yeSIgPSBuZXZlcjsgdGhlbgorICAgICAgICBlY2hvICIkMDogJGRzdF9hcmc6IElzIGEgZGlyZWN0b3J5IiA+JjIKKyAgICAgICAgZXhpdCAxCisgICAgICBmaQorICAgICAgZHN0ZGlyPSRkc3QKKyAgICAgIGRzdD0kZHN0ZGlyL2BiYXNlbmFtZSAiJHNyYyJgCisgICAgICBkc3RkaXJfc3RhdHVzPTAKKyAgICBlbHNlCisgICAgICBkc3RkaXI9YGRpcm5hbWUgIiRkc3QiYAorICAgICAgdGVzdCAtZCAiJGRzdGRpciIKKyAgICAgIGRzdGRpcl9zdGF0dXM9JD8KKyAgICBmaQorICBmaQogCi0jIGFuZCBzZXQgYW55IG9wdGlvbnM7IGRvIGNobW9kIGxhc3QgdG8gcHJlc2VydmUgc2V0dWlkIGJpdHMKKyAgb2Jzb2xldGVfbWtkaXJfdXNlZD1mYWxzZQogCi0jIElmIGFueSBvZiB0aGVzZSBmYWlsLCB3ZSBhYm9ydCB0aGUgd2hvbGUgdGhpbmcuICBJZiB3ZSB3YW50IHRvCi0jIGlnbm9yZSBlcnJvcnMgZnJvbSBhbnkgb2YgdGhlc2UsIGp1c3QgbWFrZSBzdXJlIG5vdCB0byBpZ25vcmUKLSMgZXJyb3JzIGZyb20gdGhlIGFib3ZlICIkZG9pdCAkaW5zdGNtZCAkc3JjICRkc3R0bXAiIGNvbW1hbmQuCisgIGlmIHRlc3QgJGRzdGRpcl9zdGF0dXMgIT0gMDsgdGhlbgorICAgIGNhc2UgJHBvc2l4X21rZGlyIGluCisgICAgICAnJykKKyAgICAgICAgIyBDcmVhdGUgaW50ZXJtZWRpYXRlIGRpcnMgdXNpbmcgbW9kZSA3NTUgYXMgbW9kaWZpZWQgYnkgdGhlIHVtYXNrLgorICAgICAgICAjIFRoaXMgaXMgbGlrZSBGcmVlQlNEICdpbnN0YWxsJyBhcyBvZiAxOTk3LTEwLTI4LgorICAgICAgICB1bWFzaz1gdW1hc2tgCisgICAgICAgIGNhc2UgJHN0cmlwY21kLiR1bWFzayBpbgorICAgICAgICAgICMgT3B0aW1pemUgY29tbW9uIGNhc2VzLgorICAgICAgICAgICpbMjM2N11bMjM2N10pIG1rZGlyX3VtYXNrPSR1bWFzazs7CisgICAgICAgICAgLiowWzAyXVswMl0gfCAuWzAyXVswMl0gfCAuWzAyXSkgbWtkaXJfdW1hc2s9MjI7OwogCi0JaWYgWyB4IiRjaG93bmNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaG93bmNtZCAkZHN0dG1wOyBlbHNlIHRydWU7ZmkgJiYKLQlpZiBbIHgiJGNoZ3JwY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJGNoZ3JwY21kICRkc3R0bXA7IGVsc2UgdHJ1ZTtmaSAmJgotCWlmIFsgeCIkc3RyaXBjbWQiICE9IHggXTsgdGhlbiAkZG9pdCAkc3RyaXBjbWQgJGRzdHRtcDsgZWxzZSB0cnVlO2ZpICYmCi0JaWYgWyB4IiRjaG1vZGNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaG1vZGNtZCAkZHN0dG1wOyBlbHNlIHRydWU7ZmkgJiYKKyAgICAgICAgICAqWzAtN10pCisgICAgICAgICAgICBta2Rpcl91bWFzaz1gZXhwciAkdW1hc2sgKyAyMiBcCisgICAgICAgICAgICAgIC0gJHVtYXNrICUgMTAwICUgNDAgKyAkdW1hc2sgJSAyMCBcCisgICAgICAgICAgICAgIC0gJHVtYXNrICUgMTAgJSA0ICsgJHVtYXNrICUgMgorICAgICAgICAgICAgYDs7CisgICAgICAgICAgKikgbWtkaXJfdW1hc2s9JHVtYXNrLGdvLXc7OworICAgICAgICBlc2FjCiAKLSMgTm93IHJlbmFtZSB0aGUgZmlsZSB0byB0aGUgcmVhbCBkZXN0aW5hdGlvbi4KKyAgICAgICAgIyBXaXRoIC1kLCBjcmVhdGUgdGhlIG5ldyBkaXJlY3Rvcnkgd2l0aCB0aGUgdXNlci1zcGVjaWZpZWQgbW9kZS4KKyAgICAgICAgIyBPdGhlcndpc2UsIHJlbHkgb24gJG1rZGlyX3VtYXNrLgorICAgICAgICBpZiB0ZXN0IC1uICIkZGlyX2FyZyI7IHRoZW4KKyAgICAgICAgICBta2Rpcl9tb2RlPS1tJG1vZGUKKyAgICAgICAgZWxzZQorICAgICAgICAgIG1rZGlyX21vZGU9CisgICAgICAgIGZpCiAKLQkkZG9pdCAkcm1jbWQgLWYgJGRzdGRpci8kZHN0ZmlsZSAmJgotCSRkb2l0ICRtdmNtZCAkZHN0dG1wICRkc3RkaXIvJGRzdGZpbGUgCisgICAgICAgIHBvc2l4X21rZGlyPWZhbHNlCisgICAgICAgIGNhc2UgJHVtYXNrIGluCisgICAgICAgICAgKlsxMjM1NjddWzAtN11bMC03XSkKKyAgICAgICAgICAgICMgUE9TSVggbWtkaXIgLXAgc2V0cyB1K3d4IGJpdHMgcmVnYXJkbGVzcyBvZiB1bWFzaywgd2hpY2gKKyAgICAgICAgICAgICMgaXMgaW5jb21wYXRpYmxlIHdpdGggRnJlZUJTRCAnaW5zdGFsbCcgd2hlbiAodW1hc2sgJiAzMDApICE9IDAuCisgICAgICAgICAgICA7OworICAgICAgICAgICopCisgICAgICAgICAgICB0bXBkaXI9JHtUTVBESVItL3RtcH0vaW5zJFJBTkRPTS0kJAorICAgICAgICAgICAgdHJhcCAncmV0PSQ/OyBybWRpciAiJHRtcGRpci9kIiAiJHRtcGRpciIgMj4vZGV2L251bGw7IGV4aXQgJHJldCcgMAogCi1maSAmJgorICAgICAgICAgICAgaWYgKHVtYXNrICRta2Rpcl91bWFzayAmJgorICAgICAgICAgICAgICAgIGV4ZWMgJG1rZGlycHJvZyAkbWtkaXJfbW9kZSAtcCAtLSAiJHRtcGRpci9kIikgPi9kZXYvbnVsbCAyPiYxCisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRkaXJfYXJnIiB8fCB7CisgICAgICAgICAgICAgICAgICAgIyBDaGVjayBmb3IgUE9TSVggaW5jb21wYXRpYmlsaXRpZXMgd2l0aCAtbS4KKyAgICAgICAgICAgICAgICAgICAjIEhQLVVYIDExLjIzIGFuZCBJUklYIDYuNSBta2RpciAtbSAtcCBzZXRzIGdyb3VwLSBvcgorICAgICAgICAgICAgICAgICAgICMgb3RoZXItd3JpdGFibGUgYml0IG9mIHBhcmVudCBkaXJlY3Rvcnkgd2hlbiBpdCBzaG91bGRuJ3QuCisgICAgICAgICAgICAgICAgICAgIyBGcmVlQlNEIDYuMSBta2RpciAtbSAtcCBzZXRzIG1vZGUgb2YgZXhpc3RpbmcgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgIGxzX2xkX3RtcGRpcj1gbHMgLWxkICIkdG1wZGlyImAKKyAgICAgICAgICAgICAgICAgICBjYXNlICRsc19sZF90bXBkaXIgaW4KKyAgICAgICAgICAgICAgICAgICAgIGQ/Pz8/LT9yLSopIGRpZmZlcmVudF9tb2RlPTcwMDs7CisgICAgICAgICAgICAgICAgICAgICBkPz8/Py0/LS0qKSBkaWZmZXJlbnRfbW9kZT03NTU7OworICAgICAgICAgICAgICAgICAgICAgKikgZmFsc2U7OworICAgICAgICAgICAgICAgICAgIGVzYWMgJiYKKyAgICAgICAgICAgICAgICAgICAkbWtkaXJwcm9nIC1tJGRpZmZlcmVudF9tb2RlIC1wIC0tICIkdG1wZGlyIiAmJiB7CisgICAgICAgICAgICAgICAgICAgICBsc19sZF90bXBkaXJfMT1gbHMgLWxkICIkdG1wZGlyImAKKyAgICAgICAgICAgICAgICAgICAgIHRlc3QgIiRsc19sZF90bXBkaXIiID0gIiRsc19sZF90bXBkaXJfMSIKKyAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgdGhlbiBwb3NpeF9ta2Rpcj06CisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIHJtZGlyICIkdG1wZGlyL2QiICIkdG1wZGlyIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAjIFJlbW92ZSBhbnkgZGlycyBsZWZ0IGJlaGluZCBieSBhbmNpZW50IG1rZGlyIGltcGxlbWVudGF0aW9ucy4KKyAgICAgICAgICAgICAgcm1kaXIgLi8kbWtkaXJfbW9kZSAuLy1wIC4vLS0gMj4vZGV2L251bGwKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICB0cmFwICcnIDA7OworICAgICAgICBlc2FjOzsKKyAgICBlc2FjCiAKKyAgICBpZgorICAgICAgJHBvc2l4X21rZGlyICYmICgKKyAgICAgICAgdW1hc2sgJG1rZGlyX3VtYXNrICYmCisgICAgICAgICRkb2l0X2V4ZWMgJG1rZGlycHJvZyAkbWtkaXJfbW9kZSAtcCAtLSAiJGRzdGRpciIKKyAgICAgICkKKyAgICB0aGVuIDoKKyAgICBlbHNlCiAKLWV4aXQgMAorICAgICAgIyBUaGUgdW1hc2sgaXMgcmlkaWN1bG91cywgb3IgbWtkaXIgZG9lcyBub3QgY29uZm9ybSB0byBQT1NJWCwKKyAgICAgICMgb3IgaXQgZmFpbGVkIHBvc3NpYmx5IGR1ZSB0byBhIHJhY2UgY29uZGl0aW9uLiAgQ3JlYXRlIHRoZQorICAgICAgIyBkaXJlY3RvcnkgdGhlIHNsb3cgd2F5LCBzdGVwIGJ5IHN0ZXAsIGNoZWNraW5nIGZvciByYWNlcyBhcyB3ZSBnby4KKworICAgICAgY2FzZSAkZHN0ZGlyIGluCisgICAgICAgIC8qKSBwcmVmaXg9Jy8nOzsKKyAgICAgICAgWy09XChcKSFdKikgcHJlZml4PScuLyc7OworICAgICAgICAqKSAgcHJlZml4PScnOzsKKyAgICAgIGVzYWMKKworICAgICAgb0lGUz0kSUZTCisgICAgICBJRlM9LworICAgICAgc2V0IC1mCisgICAgICBzZXQgZm5vcmQgJGRzdGRpcgorICAgICAgc2hpZnQKKyAgICAgIHNldCArZgorICAgICAgSUZTPSRvSUZTCisKKyAgICAgIHByZWZpeGVzPQorCisgICAgICBmb3IgZAorICAgICAgZG8KKyAgICAgICAgdGVzdCBYIiRkIiA9IFggJiYgY29udGludWUKKworICAgICAgICBwcmVmaXg9JHByZWZpeCRkCisgICAgICAgIGlmIHRlc3QgLWQgIiRwcmVmaXgiOyB0aGVuCisgICAgICAgICAgcHJlZml4ZXM9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBpZiAkcG9zaXhfbWtkaXI7IHRoZW4KKyAgICAgICAgICAgICh1bWFzaz0kbWtkaXJfdW1hc2sgJiYKKyAgICAgICAgICAgICAkZG9pdF9leGVjICRta2RpcnByb2cgJG1rZGlyX21vZGUgLXAgLS0gIiRkc3RkaXIiKSAmJiBicmVhaworICAgICAgICAgICAgIyBEb24ndCBmYWlsIGlmIHR3byBpbnN0YW5jZXMgYXJlIHJ1bm5pbmcgY29uY3VycmVudGx5LgorICAgICAgICAgICAgdGVzdCAtZCAiJHByZWZpeCIgfHwgZXhpdCAxCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FzZSAkcHJlZml4IGluCisgICAgICAgICAgICAgICpcJyopIHFwcmVmaXg9YGVjaG8gIiRwcmVmaXgiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsKKyAgICAgICAgICAgICAgKikgcXByZWZpeD0kcHJlZml4OzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIHByZWZpeGVzPSIkcHJlZml4ZXMgJyRxcHJlZml4JyIKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICBwcmVmaXg9JHByZWZpeC8KKyAgICAgIGRvbmUKKworICAgICAgaWYgdGVzdCAtbiAiJHByZWZpeGVzIjsgdGhlbgorICAgICAgICAjIERvbid0IGZhaWwgaWYgdHdvIGluc3RhbmNlcyBhcmUgcnVubmluZyBjb25jdXJyZW50bHkuCisgICAgICAgICh1bWFzayAkbWtkaXJfdW1hc2sgJiYKKyAgICAgICAgIGV2YWwgIlwkZG9pdF9leGVjIFwkbWtkaXJwcm9nICRwcmVmaXhlcyIpIHx8CisgICAgICAgICAgdGVzdCAtZCAiJGRzdGRpciIgfHwgZXhpdCAxCisgICAgICAgIG9ic29sZXRlX21rZGlyX3VzZWQ9dHJ1ZQorICAgICAgZmkKKyAgICBmaQorICBmaQorCisgIGlmIHRlc3QgLW4gIiRkaXJfYXJnIjsgdGhlbgorICAgIHsgdGVzdCAteiAiJGNob3duY21kIiB8fCAkZG9pdCAkY2hvd25jbWQgIiRkc3QiOyB9ICYmCisgICAgeyB0ZXN0IC16ICIkY2hncnBjbWQiIHx8ICRkb2l0ICRjaGdycGNtZCAiJGRzdCI7IH0gJiYKKyAgICB7IHRlc3QgIiRvYnNvbGV0ZV9ta2Rpcl91c2VkJGNob3duY21kJGNoZ3JwY21kIiA9IGZhbHNlIHx8CisgICAgICB0ZXN0IC16ICIkY2htb2RjbWQiIHx8ICRkb2l0ICRjaG1vZGNtZCAkbW9kZSAiJGRzdCI7IH0gfHwgZXhpdCAxCisgIGVsc2UKKworICAgICMgTWFrZSBhIGNvdXBsZSBvZiB0ZW1wIGZpbGUgbmFtZXMgaW4gdGhlIHByb3BlciBkaXJlY3RvcnkuCisgICAgZHN0dG1wPSRkc3RkaXIvX2luc3QuJCRfCisgICAgcm10bXA9JGRzdGRpci9fcm0uJCRfCisKKyAgICAjIFRyYXAgdG8gY2xlYW4gdXAgdGhvc2UgdGVtcCBmaWxlcyBhdCBleGl0LgorICAgIHRyYXAgJ3JldD0kPzsgcm0gLWYgIiRkc3R0bXAiICIkcm10bXAiICYmIGV4aXQgJHJldCcgMAorCisgICAgIyBDb3B5IHRoZSBmaWxlIG5hbWUgdG8gdGhlIHRlbXAgbmFtZS4KKyAgICAodW1hc2sgJGNwX3VtYXNrICYmICRkb2l0X2V4ZWMgJGNwcHJvZyAiJHNyYyIgIiRkc3R0bXAiKSAmJgorCisgICAgIyBhbmQgc2V0IGFueSBvcHRpb25zOyBkbyBjaG1vZCBsYXN0IHRvIHByZXNlcnZlIHNldHVpZCBiaXRzLgorICAgICMKKyAgICAjIElmIGFueSBvZiB0aGVzZSBmYWlsLCB3ZSBhYm9ydCB0aGUgd2hvbGUgdGhpbmcuICBJZiB3ZSB3YW50IHRvCisgICAgIyBpZ25vcmUgZXJyb3JzIGZyb20gYW55IG9mIHRoZXNlLCBqdXN0IG1ha2Ugc3VyZSBub3QgdG8gaWdub3JlCisgICAgIyBlcnJvcnMgZnJvbSB0aGUgYWJvdmUgIiRkb2l0ICRjcHByb2cgJHNyYyAkZHN0dG1wIiBjb21tYW5kLgorICAgICMKKyAgICB7IHRlc3QgLXogIiRjaG93bmNtZCIgfHwgJGRvaXQgJGNob3duY21kICIkZHN0dG1wIjsgfSAmJgorICAgIHsgdGVzdCAteiAiJGNoZ3JwY21kIiB8fCAkZG9pdCAkY2hncnBjbWQgIiRkc3R0bXAiOyB9ICYmCisgICAgeyB0ZXN0IC16ICIkc3RyaXBjbWQiIHx8ICRkb2l0ICRzdHJpcGNtZCAiJGRzdHRtcCI7IH0gJiYKKyAgICB7IHRlc3QgLXogIiRjaG1vZGNtZCIgfHwgJGRvaXQgJGNobW9kY21kICRtb2RlICIkZHN0dG1wIjsgfSAmJgorCisgICAgIyBJZiAtQywgZG9uJ3QgYm90aGVyIHRvIGNvcHkgaWYgaXQgd291bGRuJ3QgY2hhbmdlIHRoZSBmaWxlLgorICAgIGlmICRjb3B5X29uX2NoYW5nZSAmJgorICAgICAgIG9sZD1gTENfQUxMPUMgbHMgLWRsTCAiJGRzdCIgICAgIDI+L2Rldi9udWxsYCAmJgorICAgICAgIG5ldz1gTENfQUxMPUMgbHMgLWRsTCAiJGRzdHRtcCIgIDI+L2Rldi9udWxsYCAmJgorICAgICAgIHNldCAtZiAmJgorICAgICAgIHNldCBYICRvbGQgJiYgb2xkPTokMjokNDokNTokNiAmJgorICAgICAgIHNldCBYICRuZXcgJiYgbmV3PTokMjokNDokNTokNiAmJgorICAgICAgIHNldCArZiAmJgorICAgICAgIHRlc3QgIiRvbGQiID0gIiRuZXciICYmCisgICAgICAgJGNtcHByb2cgIiRkc3QiICIkZHN0dG1wIiA+L2Rldi9udWxsIDI+JjEKKyAgICB0aGVuCisgICAgICBybSAtZiAiJGRzdHRtcCIKKyAgICBlbHNlCisgICAgICAjIFJlbmFtZSB0aGUgZmlsZSB0byB0aGUgcmVhbCBkZXN0aW5hdGlvbi4KKyAgICAgICRkb2l0ICRtdmNtZCAtZiAiJGRzdHRtcCIgIiRkc3QiIDI+L2Rldi9udWxsIHx8CisKKyAgICAgICMgVGhlIHJlbmFtZSBmYWlsZWQsIHBlcmhhcHMgYmVjYXVzZSBtdiBjYW4ndCByZW5hbWUgc29tZXRoaW5nIGVsc2UKKyAgICAgICMgdG8gaXRzZWxmLCBvciBwZXJoYXBzIGJlY2F1c2UgbXYgaXMgc28gYW5jaWVudCB0aGF0IGl0IGRvZXMgbm90CisgICAgICAjIHN1cHBvcnQgLWYuCisgICAgICB7CisgICAgICAgICMgTm93IHJlbW92ZSBvciBtb3ZlIGFzaWRlIGFueSBvbGQgZmlsZSBhdCBkZXN0aW5hdGlvbiBsb2NhdGlvbi4KKyAgICAgICAgIyBXZSB0cnkgdGhpcyB0d28gd2F5cyBzaW5jZSBybSBjYW4ndCB1bmxpbmsgaXRzZWxmIG9uIHNvbWUKKyAgICAgICAgIyBzeXN0ZW1zIGFuZCB0aGUgZGVzdGluYXRpb24gZmlsZSBtaWdodCBiZSBidXN5IGZvciBvdGhlcgorICAgICAgICAjIHJlYXNvbnMuICBJbiB0aGlzIGNhc2UsIHRoZSBmaW5hbCBjbGVhbnVwIG1pZ2h0IGZhaWwgYnV0IHRoZSBuZXcKKyAgICAgICAgIyBmaWxlIHNob3VsZCBzdGlsbCBpbnN0YWxsIHN1Y2Nlc3NmdWxseS4KKyAgICAgICAgeworICAgICAgICAgIHRlc3QgISAtZiAiJGRzdCIgfHwKKyAgICAgICAgICAkZG9pdCAkcm1jbWQgLWYgIiRkc3QiIDI+L2Rldi9udWxsIHx8CisgICAgICAgICAgeyAkZG9pdCAkbXZjbWQgLWYgIiRkc3QiICIkcm10bXAiIDI+L2Rldi9udWxsICYmCisgICAgICAgICAgICB7ICRkb2l0ICRybWNtZCAtZiAiJHJtdG1wIiAyPi9kZXYvbnVsbDsgOjsgfQorICAgICAgICAgIH0gfHwKKyAgICAgICAgICB7IGVjaG8gIiQwOiBjYW5ub3QgdW5saW5rIG9yIHJlbmFtZSAkZHN0IiA+JjIKKyAgICAgICAgICAgIChleGl0IDEpOyBleGl0IDEKKyAgICAgICAgICB9CisgICAgICAgIH0gJiYKKworICAgICAgICAjIE5vdyByZW5hbWUgdGhlIGZpbGUgdG8gdGhlIHJlYWwgZGVzdGluYXRpb24uCisgICAgICAgICRkb2l0ICRtdmNtZCAiJGRzdHRtcCIgIiRkc3QiCisgICAgICB9CisgICAgZmkgfHwgZXhpdCAxCisKKyAgICB0cmFwICcnIDAKKyAgZmkKK2RvbmUKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisjIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvaW5zdGFsbC13aW4uYmF0IGIvaW5zdGFsbC13aW4uYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZmMwZWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbnN0YWxsLXdpbi5iYXQKQEAgLTAsMCArMSwzNSBAQAorOjogSW5zdGFsbHMgZnJvbSBzcnRwIHdpbmRvd3MgYnVpbGQgZGlyZWN0b3J5IHRvIGRpcmVjdG9yeSBzcGVjaWZpZWQgb24KKzo6IGNvbW1hbmQgbGluZQorCisKK0BpZiAiJTEiPT0iIiAoCisJZWNobyAiVXNhZ2U6ICV+bngwIGRlc3RkaXIiCisJZXhpdCAvYiAxCispIGVsc2UgKAorCXNldCBkZXN0ZGlyPSUxCispCisKK0BpZiBub3QgZXhpc3QgJWRlc3RkaXIlICgKKyAgIGVjaG8gJWRlc3RkaXIlIG5vdCBmb3VuZAorICAgZXhpdCAvYiAxCispCisKK0Bmb3IgJSVkIGluIChpbmNsdWRlXHNydHAuaCBjcnlwdG9caW5jbHVkZVxjaXBoZXIuaCBEZWJ1Z1xzcnRwMi5saWIgUmVsZWFzZVxzcnRwMi5saWIgeDY0XERlYnVnXHNydHAyLmxpYiB4NjRcUmVsZWFzZVxzcnRwMi5saWIpIGRvICgKKwlpZiBub3QgZXhpc3QgIiUlZCIgKAorCSAgIGVjaG8gIiUlZCBub3QgZm91bmQ6IGFyZSB5b3UgaW4gdGhlIHJpZ2h0IGRpcmVjdG9yeT8iCisJICAgZXhpdCAvYiAxCisJKQorKQorCitta2RpciAlZGVzdGRpciVcaW5jbHVkZQorbWtkaXIgJWRlc3RkaXIlXGluY2x1ZGVcc3J0cDIKK21rZGlyICVkZXN0ZGlyJVxsaWIKK21rZGlyICVkZXN0ZGlyJVxsaWJceDY0CisKK0Bmb3IgJSVkIGluIChpbmNsdWRlXHNydHAuaCBpbmNsdWRlXGVrdC5oIGNyeXB0b1xpbmNsdWRlXGNpcGhlci5oIGNyeXB0b1xpbmNsdWRlXGF1dGguaCBjcnlwdG9caW5jbHVkZVxjcnlwdG9fdHlwZXMuaCkgZG8gKAorCSBjb3B5ICUlZCAlZGVzdGRpciVcaW5jbHVkZVxzcnRwMgorKQorY29weSBSZWxlYXNlXHNydHAyLmxpYiAlZGVzdGRpciVcbGliXHNydHAyLmxpYgorY29weSBEZWJ1Z1xzcnRwMi5saWIgJWRlc3RkaXIlXGxpYlxzcnRwMmQubGliCitjb3B5IHg2NFxSZWxlYXNlXHNydHAyLmxpYiAlZGVzdGRpciVcbGliXHg2NFxzcnRwMi5saWIKK2NvcHkgeDY0XERlYnVnXHNydHAyLmxpYiAlZGVzdGRpciVcbGliXHg2NFxzcnRwMmQubGliCmRpZmYgLS1naXQgYS9saWJzcnRwMi5wYy5pbiBiL2xpYnNydHAyLnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYjg2NTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzcnRwMi5wYy5pbgpAQCAtMCwwICsxLDExIEBACitwcmVmaXg9QHByZWZpeEAKK2V4ZWNfcHJlZml4PUBwcmVmaXhACitsaWJkaXI9QGxpYmRpckAKK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisKK05hbWU6IEBQQUNLQUdFX05BTUVACitWZXJzaW9uOiBAUEFDS0FHRV9WRVJTSU9OQAorRGVzY3JpcHRpb246IExpYnJhcnkgZm9yIFNSVFAgKFNlY3VyZSBSZWFsdGltZSBUcmFuc3BvcnQgUHJvdG9jb2wpCisKK0xpYnM6IC1MJHtsaWJkaXJ9IC1sc3J0cDIgQExJQlNACitDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQpkaWZmIC0tZ2l0IGEvc3J0cC5kZWYgYi9zcnRwLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDE4YjE0Ci0tLSAvZGV2L251bGwKKysrIGIvc3J0cC5kZWYKQEAgLTAsMCArMSw3NSBAQAorRVhQT1JUUworc3J0cF9pbml0CitzcnRwX3NodXRkb3duCitzcnRwX3Byb3RlY3QKK3NydHBfcHJvdGVjdF9ta2kKK3NydHBfdW5wcm90ZWN0CitzcnRwX3VucHJvdGVjdF9ta2kKK3NydHBfY3JlYXRlCitzcnRwX2FkZF9zdHJlYW0KK3NydHBfcmVtb3ZlX3N0cmVhbQorc3J0cF91cGRhdGUKK3NydHBfdXBkYXRlX3N0cmVhbQorc3J0cF9nZXRfc3RyZWFtCitzcnRwX2NyeXB0b19wb2xpY3lfc2V0X3J0cF9kZWZhdWx0CitzcnRwX2NyeXB0b19wb2xpY3lfc2V0X3J0Y3BfZGVmYXVsdAorc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfY21fMTI4X2htYWNfc2hhMV8zMgorc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfY21fMTI4X251bGxfYXV0aAorc3J0cF9jcnlwdG9fcG9saWN5X3NldF9udWxsX2NpcGhlcl9obWFjX3NoYTFfODAKK3NydHBfY3J5cHRvX3BvbGljeV9zZXRfbnVsbF9jaXBoZXJfaG1hY19udWxsCitzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8yNTZfaG1hY19zaGExXzgwCitzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8yNTZfaG1hY19zaGExXzMyCitzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8yNTZfbnVsbF9hdXRoCitzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19nY21fMTI4XzhfYXV0aAorc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzI1Nl84X2F1dGgKK3NydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2djbV8xMjhfOF9vbmx5X2F1dGgKK3NydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2djbV8yNTZfOF9vbmx5X2F1dGgKK3NydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2djbV8xMjhfMTZfYXV0aAorc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzI1Nl8xNl9hdXRoCitzcnRwX2RlYWxsb2MKK3NydHBfY3J5cHRvX3BvbGljeV9zZXRfZnJvbV9wcm9maWxlX2Zvcl9ydHAKK3NydHBfY3J5cHRvX3BvbGljeV9zZXRfZnJvbV9wcm9maWxlX2Zvcl9ydGNwCitzcnRwX3Byb2ZpbGVfZ2V0X21hc3Rlcl9rZXlfbGVuZ3RoCitzcnRwX3Byb2ZpbGVfZ2V0X21hc3Rlcl9zYWx0X2xlbmd0aAorc3J0cF9hcHBlbmRfc2FsdF90b19rZXkKK3NydHBfZ2V0X3Byb3RlY3RfdHJhaWxlcl9sZW5ndGgKK3NydHBfZ2V0X3Byb3RlY3RfcnRjcF90cmFpbGVyX2xlbmd0aAorc3J0cF9wcm90ZWN0X3J0Y3AKK3NydHBfcHJvdGVjdF9ydGNwX21raQorc3J0cF91bnByb3RlY3RfcnRjcAorc3J0cF91bnByb3RlY3RfcnRjcF9ta2kKK3NydHBfc2V0X3N0cmVhbV9yb2MKK3NydHBfc2V0X3VzZXJfZGF0YQorc3J0cF9nZXRfc3RyZWFtX3JvYworc3J0cF9nZXRfdXNlcl9kYXRhCitzcnRwX2luc3RhbGxfZXZlbnRfaGFuZGxlcgorc3J0cF9nZXRfdmVyc2lvbl9zdHJpbmcKK3NydHBfZ2V0X3ZlcnNpb24KK3NydHBfc2V0X2RlYnVnX21vZHVsZQorc3J0cF9saXN0X2RlYnVnX21vZHVsZXMKK3NydHBfaW5zdGFsbF9sb2dfaGFuZGxlcgorc3J0cF9lcnJfcmVwb3J0CitzcnRwX2NyeXB0b19rZXJuZWxfbG9hZF9kZWJ1Z19tb2R1bGUKK3NydHBfY2lwaGVyX2dldF9rZXlfbGVuZ3RoCitzcnRwX2NpcGhlcl90eXBlX3NlbGZfdGVzdAorc3J0cF9jaXBoZXJfdHlwZV90ZXN0CitzcnRwX2NpcGhlcl9iaXRzX3Blcl9zZWNvbmQKK3NydHBfY2lwaGVyX3R5cGVfYWxsb2MKK3NydHBfY2lwaGVyX2RlYWxsb2MKK3NydHBfY2lwaGVyX2luaXQKK3NydHBfY2lwaGVyX3NldF9pdgorc3J0cF9jaXBoZXJfb3V0cHV0CitzcnRwX2NpcGhlcl9lbmNyeXB0CitzcnRwX2NpcGhlcl9kZWNyeXB0CitzcnRwX2NpcGhlcl9nZXRfdGFnCitzcnRwX2NpcGhlcl9zZXRfYWFkCitzcnRwX3JlcGxhY2VfY2lwaGVyX3R5cGUKK3NydHBfYXV0aF9nZXRfa2V5X2xlbmd0aAorc3J0cF9hdXRoX2dldF90YWdfbGVuZ3RoCitzcnRwX2F1dGhfZ2V0X3ByZWZpeF9sZW5ndGgKK3NydHBfYXV0aF90eXBlX3NlbGZfdGVzdAorc3J0cF9hdXRoX3R5cGVfdGVzdAorc3J0cF9yZXBsYWNlX2F1dGhfdHlwZQorc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZworc3J0cF9vY3RldF9zdHJpbmdfaXNfZXEKK3NydHBfcmRieF9nZXRfd2luZG93X3NpemUKZGlmZiAtLWdpdCBhL3NydHAuc2xuIGIvc3J0cC5zbG4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNkZDZkMwotLS0gL2Rldi9udWxsCisrKyBiL3NydHAuc2xuCkBAIC0wLDAgKzEsNDAgQEAKK++7vworTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gU29sdXRpb24gRmlsZSwgRm9ybWF0IFZlcnNpb24gMTIuMDAKKyMgVmlzdWFsIFN0dWRpbyBFeHByZXNzIDE0IGZvciBXaW5kb3dzIERlc2t0b3AKK1Zpc3VhbFN0dWRpb1ZlcnNpb24gPSAxNC4wLjI1MTIzLjAKK01pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uID0gMTAuMC40MDIxOS4xCitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInNydHAyIiwgInNydHAyLnZjeHByb2oiLCAie0VFRjAzMUNCLUZFRDgtNDUxRS1BNDcxLTkxRUM4RDRGNjc1MH0iCitFbmRQcm9qZWN0CitHbG9iYWwKKwlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uQ29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwcmVTb2x1dGlvbgorCQlEZWJ1ZyBEbGx8V2luMzIgPSBEZWJ1ZyBEbGx8V2luMzIKKwkJRGVidWcgRGxsfHg2NCA9IERlYnVnIERsbHx4NjQKKwkJRGVidWd8V2luMzIgPSBEZWJ1Z3xXaW4zMgorCQlEZWJ1Z3x4NjQgPSBEZWJ1Z3x4NjQKKwkJUmVsZWFzZSBEbGx8V2luMzIgPSBSZWxlYXNlIERsbHxXaW4zMgorCQlSZWxlYXNlIERsbHx4NjQgPSBSZWxlYXNlIERsbHx4NjQKKwkJUmVsZWFzZXxXaW4zMiA9IFJlbGVhc2V8V2luMzIKKwkJUmVsZWFzZXx4NjQgPSBSZWxlYXNlfHg2NAorCUVuZEdsb2JhbFNlY3Rpb24KKwlHbG9iYWxTZWN0aW9uKFByb2plY3RDb25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHBvc3RTb2x1dGlvbgorCQl7RUVGMDMxQ0ItRkVEOC00NTFFLUE0NzEtOTFFQzhENEY2NzUwfS5EZWJ1ZyBEbGx8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWcgRGxsfFdpbjMyCisJCXtFRUYwMzFDQi1GRUQ4LTQ1MUUtQTQ3MS05MUVDOEQ0RjY3NTB9LkRlYnVnIERsbHxXaW4zMi5CdWlsZC4wID0gRGVidWcgRGxsfFdpbjMyCisJCXtFRUYwMzFDQi1GRUQ4LTQ1MUUtQTQ3MS05MUVDOEQ0RjY3NTB9LkRlYnVnIERsbHx4NjQuQWN0aXZlQ2ZnID0gRGVidWcgRGxsfHg2NAorCQl7RUVGMDMxQ0ItRkVEOC00NTFFLUE0NzEtOTFFQzhENEY2NzUwfS5EZWJ1ZyBEbGx8eDY0LkJ1aWxkLjAgPSBEZWJ1ZyBEbGx8eDY0CisJCXtFRUYwMzFDQi1GRUQ4LTQ1MUUtQTQ3MS05MUVDOEQ0RjY3NTB9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtFRUYwMzFDQi1GRUQ4LTQ1MUUtQTQ3MS05MUVDOEQ0RjY3NTB9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7RUVGMDMxQ0ItRkVEOC00NTFFLUE0NzEtOTFFQzhENEY2NzUwfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXtFRUYwMzFDQi1GRUQ4LTQ1MUUtQTQ3MS05MUVDOEQ0RjY3NTB9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXtFRUYwMzFDQi1GRUQ4LTQ1MUUtQTQ3MS05MUVDOEQ0RjY3NTB9LlJlbGVhc2UgRGxsfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2UgRGxsfFdpbjMyCisJCXtFRUYwMzFDQi1GRUQ4LTQ1MUUtQTQ3MS05MUVDOEQ0RjY3NTB9LlJlbGVhc2UgRGxsfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlIERsbHxXaW4zMgorCQl7RUVGMDMxQ0ItRkVEOC00NTFFLUE0NzEtOTFFQzhENEY2NzUwfS5SZWxlYXNlIERsbHx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZSBEbGx8eDY0CisJCXtFRUYwMzFDQi1GRUQ4LTQ1MUUtQTQ3MS05MUVDOEQ0RjY3NTB9LlJlbGVhc2UgRGxsfHg2NC5CdWlsZC4wID0gUmVsZWFzZSBEbGx8eDY0CisJCXtFRUYwMzFDQi1GRUQ4LTQ1MUUtQTQ3MS05MUVDOEQ0RjY3NTB9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7RUVGMDMxQ0ItRkVEOC00NTFFLUE0NzEtOTFFQzhENEY2NzUwfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXtFRUYwMzFDQi1GRUQ4LTQ1MUUtQTQ3MS05MUVDOEQ0RjY3NTB9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtFRUYwMzFDQi1GRUQ4LTQ1MUUtQTQ3MS05MUVDOEQ0RjY3NTB9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCUVuZEdsb2JhbFNlY3Rpb24KKwlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uUHJvcGVydGllcykgPSBwcmVTb2x1dGlvbgorCQlIaWRlU29sdXRpb25Ob2RlID0gRkFMU0UKKwlFbmRHbG9iYWxTZWN0aW9uCitFbmRHbG9iYWwKZGlmZiAtLWdpdCBhL3NydHAvZWt0LmMgYi9zcnRwL2VrdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwOWRjNTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcnRwL2VrdC5jCkBAIC0wLDAgKzEsMjgxIEBACisvKgorICogZWt0LmMKKyAqCisgKiBFbmNyeXB0ZWQgS2V5IFRyYW5zcG9ydCBmb3IgU1JUUAorICoKKyAqIERhdmlkIE1jR3JldworICogQ2lzY28gU3lzdGVtcywgSW5jLgorICovCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDE3IENpc2NvIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgInNydHBfcHJpdi5oIgorI2luY2x1ZGUgImVyci5oIgorI2luY2x1ZGUgImVrdC5oIgorCitleHRlcm4gc3J0cF9kZWJ1Z19tb2R1bGVfdCBtb2Rfc3J0cDsKKworLyoKKyAqICBUaGUgRUtUIEF1dGhlbnRpY2F0aW9uIFRhZyBmb3JtYXQuCisgKgorICogICAgMCAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMworICogICAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCisgKiAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiAgIDogICAgICAgICAgICAgICAgICAgQmFzZSBBdXRoZW50aWNhdGlvbiBUYWcgICAgICAgICAgICAgICAgICAgICA6CisgKiAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiAgIDogICAgICAgICAgICAgICAgICAgICBFbmNyeXB0ZWQgTWFzdGVyIEtleSAgICAgICAgICAgICAgICAgICAgICA6CisgKiAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiAgIHwgICAgICAgICAgICAgICAgICAgICAgIFJvbGxvdmVyIENvdW50ZXIgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiAgIHwgICAgSW5pdGlhbCBTZXF1ZW5jZSBOdW1iZXIgICAgfCAgIFNlY3VyaXR5IFBhcmFtZXRlciBJbmRleCAgICB8CisgKiAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKgorICovCisKKyNkZWZpbmUgRUtUX09DVEVUU19BRlRFUl9CQVNFX1RBRyAyNAorI2RlZmluZSBFS1RfT0NURVRTX0FGVEVSX0VNSyA4CisjZGVmaW5lIEVLVF9PQ1RFVFNfQUZURVJfUk9DIDQKKyNkZWZpbmUgRUtUX1NQSV9MRU4gMgorCit1bnNpZ25lZCBzcnRwX2VrdF9vY3RldHNfYWZ0ZXJfYmFzZV90YWcoc3J0cF9la3Rfc3RyZWFtX3QgZWt0KQoreworICAgIC8qCisgICAgICogaWYgdGhlIHBvaW50ZXIgZWt0IGlzIE5VTEwsIHRoZW4gRUtUIGlzIG5vdCBpbiBlZmZlY3QsIHNvIHdlCisgICAgICogaW5kaWNhdGUgdGhpcyBieSByZXR1cm5pbmcgemVybworICAgICAqLworICAgIGlmICghZWt0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHN3aXRjaCAoZWt0LT5kYXRhLT5la3RfY2lwaGVyX3R5cGUpIHsKKyAgICBjYXNlIFNSVFBfRUtUX0NJUEhFUl9BRVNfMTI4X0VDQjoKKyAgICAgICAgcmV0dXJuIDE2ICsgRUtUX09DVEVUU19BRlRFUl9FTUs7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBzcnRwX2VrdF9zcGlfdCBzcnRjcF9wYWNrZXRfZ2V0X2VrdF9zcGkoCisgICAgY29uc3QgdWludDhfdCAqcGFja2V0X3N0YXJ0LAorICAgIHVuc2lnbmVkIHBrdF9vY3RldF9sZW4pCit7CisgICAgY29uc3QgdWludDhfdCAqc3BpX2xvY2F0aW9uOworCisgICAgc3BpX2xvY2F0aW9uID0gcGFja2V0X3N0YXJ0ICsgKHBrdF9vY3RldF9sZW4gLSBFS1RfU1BJX0xFTik7CisKKyAgICByZXR1cm4gKigoY29uc3Qgc3J0cF9la3Rfc3BpX3QgKilzcGlfbG9jYXRpb24pOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IHNydGNwX3BhY2tldF9nZXRfZWt0X3JvYyhjb25zdCB1aW50OF90ICpwYWNrZXRfc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwa3Rfb2N0ZXRfbGVuKQoreworICAgIGNvbnN0IHVpbnQ4X3QgKnJvY19sb2NhdGlvbjsKKworICAgIHJvY19sb2NhdGlvbiA9IHBhY2tldF9zdGFydCArIChwa3Rfb2N0ZXRfbGVuIC0gRUtUX09DVEVUU19BRlRFUl9ST0MpOworCisgICAgcmV0dXJuICooKGNvbnN0IHVpbnQzMl90ICopcm9jX2xvY2F0aW9uKTsKK30KKworc3RhdGljIGlubGluZSBjb25zdCB1aW50OF90ICpzcnRjcF9wYWNrZXRfZ2V0X2Vta19sb2NhdGlvbigKKyAgICBjb25zdCB1aW50OF90ICpwYWNrZXRfc3RhcnQsCisgICAgdW5zaWduZWQgcGt0X29jdGV0X2xlbikKK3sKKyAgICBjb25zdCB1aW50OF90ICpsb2NhdGlvbjsKKworICAgIGxvY2F0aW9uID0gcGFja2V0X3N0YXJ0ICsgKHBrdF9vY3RldF9sZW4gLSBFS1RfT0NURVRTX0FGVEVSX0JBU0VfVEFHKTsKKworICAgIHJldHVybiBsb2NhdGlvbjsKK30KKworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9la3RfYWxsb2Moc3J0cF9la3Rfc3RyZWFtX3QgKnN0cmVhbV9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9la3RfcG9saWN5X3QgcG9saWN5KQoreworICAgIC8qCisgICAgICogaWYgdGhlIHBvbGljeSBwb2ludGVyIGlzIE5VTEwsIHRoZW4gRUtUIGlzIG5vdCBpbiB1c2UKKyAgICAgKiBzbyB3ZSBqdXN0IHNldCB0aGUgRUtUIHN0cmVhbSBkYXRhIHBvaW50ZXIgdG8gTlVMTAorICAgICAqLworICAgIGlmICghcG9saWN5KSB7CisgICAgICAgICpzdHJlYW1fZGF0YSA9IE5VTEw7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7CisgICAgfQorCisgICAgLyogVE9ETyAqLworICAgICpzdHJlYW1fZGF0YSA9IE5VTEw7CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOworfQorCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2VrdF9zdHJlYW1faW5pdF9mcm9tX3BvbGljeSgKKyAgICBzcnRwX2VrdF9zdHJlYW1fdCBzdHJlYW1fZGF0YSwKKyAgICBzcnRwX2VrdF9wb2xpY3lfdCBwb2xpY3kpCit7CisgICAgaWYgKCFzdHJlYW1fZGF0YSkKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7Cit9CisKK3ZvaWQgYWVzX2RlY3J5cHRfd2l0aF9yYXdfa2V5KHZvaWQgKmNpcGhlcnRleHQsIGNvbnN0IHZvaWQgKmtleSwgaW50IGtleV9sZW4pCit7CisjaWZuZGVmIEdDTQorICAgIC8vIEZJWE1FOiBuZWVkIHRvIGdldCB0aGlzIHdvcmtpbmcgdGhyb3VnaCB0aGUgY3J5cHRvIG1vZHVsZSBpbnRlcmZhY2UKKyAgICBzcnRwX2Flc19leHBhbmRlZF9rZXlfdCBleHBhbmRlZF9rZXk7CisKKyAgICBzcnRwX2Flc19leHBhbmRfZGVjcnlwdGlvbl9rZXkoa2V5LCBrZXlfbGVuLCAmZXhwYW5kZWRfa2V5KTsKKyAgICBzcnRwX2Flc19kZWNyeXB0KGNpcGhlcnRleHQsICZleHBhbmRlZF9rZXkpOworI2VuZGlmCit9CisKKy8qCisgKiBUaGUgZnVuY3Rpb24gc3J0cF9zdHJlYW1faW5pdF9mcm9tX2VrdCgpIGluaXRpYWxpemVzIGEgc3RyZWFtIHVzaW5nCisgKiB0aGUgRUtUIGRhdGEgZnJvbSBhbiBTUlRDUCB0cmFpbGVyLgorICovCisKK3NydHBfZXJyX3N0YXR1c190IHNydHBfc3RyZWFtX2luaXRfZnJvbV9la3Qoc3J0cF9zdHJlYW1fdCBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnNydGNwX2hkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcGt0X29jdGV0X2xlbikKK3sKKyAgICBzcnRwX2Vycl9zdGF0dXNfdCBlcnI7CisgICAgY29uc3QgdWludDhfdCAqbWFzdGVyX2tleTsKKyAgICBzcnRwX3BvbGljeV90IHNydHBfcG9saWN5OworICAgIHVpbnQzMl90IHJvYzsKKworICAgIC8qCisgICAgICogTk9URTogYXQgcHJlc2VudCwgd2Ugb25seSBzdXBwb3J0IGEgc2luZ2xlIGVrdF9wb2xpY3kgYXQgYSB0aW1lLgorICAgICAqLworICAgIGlmIChzdHJlYW0tPmVrdC0+ZGF0YS0+c3BpICE9CisgICAgICAgIHNydGNwX3BhY2tldF9nZXRfZWt0X3NwaShzcnRjcF9oZHIsIHBrdF9vY3RldF9sZW4pKQorICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX25vX2N0eDsKKworICAgIGlmIChzdHJlYW0tPmVrdC0+ZGF0YS0+ZWt0X2NpcGhlcl90eXBlICE9IFNSVFBfRUtUX0NJUEhFUl9BRVNfMTI4X0VDQikKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisKKyAgICAvKiBkZWNyeXB0IHRoZSBFbmNyeXB0ZWQgTWFzdGVyIEtleSBmaWVsZCAqLworICAgIG1hc3Rlcl9rZXkgPSBzcnRjcF9wYWNrZXRfZ2V0X2Vta19sb2NhdGlvbihzcnRjcF9oZHIsIHBrdF9vY3RldF9sZW4pOworICAgIC8qIEZJWCE/IFRoaXMgZGVjcnlwdHMgdGhlIG1hc3RlciBrZXkgaW4tcGxhY2UsIGFuZCBuZXZlciB1c2VzIGl0ICovCisgICAgLyogRklYIT8gSXQncyBhbHNvIHBhc3NpbmcgdG8gZWt0X2RlY19rZXkgKHdoaWNoIGlzIGFuIGFlc19leHBhbmRlZF9rZXlfdCkKKyAgICAgKiB0byBhIGZ1bmN0aW9uIHdoaWNoIGV4cGVjdHMgYSByYXcgKHVuZXhwYW5kZWQpIGtleSAqLworICAgIGFlc19kZWNyeXB0X3dpdGhfcmF3X2tleSgodm9pZCAqKW1hc3Rlcl9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJlYW0tPmVrdC0+ZGF0YS0+ZWt0X2RlY19rZXksIDE2KTsKKworICAgIC8qIHNldCB0aGUgU1JUUCBST0MgKi8KKyAgICByb2MgPSBzcnRjcF9wYWNrZXRfZ2V0X2VrdF9yb2Moc3J0Y3BfaGRyLCBwa3Rfb2N0ZXRfbGVuKTsKKyAgICBlcnIgPSBzcnRwX3JkYnhfc2V0X3JvYygmc3RyZWFtLT5ydHBfcmRieCwgcm9jKTsKKyAgICBpZiAoZXJyKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgZXJyID0gc3J0cF9zdHJlYW1faW5pdChzdHJlYW0sICZzcnRwX3BvbGljeSk7CisgICAgaWYgKGVycikKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7Cit9CisKK3ZvaWQgc3J0cF9la3Rfd3JpdGVfZGF0YShzcnRwX2VrdF9zdHJlYW1fdCBla3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYmFzZV90YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYmFzZV90YWdfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqcGFja2V0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX3h0ZF9zZXFfbnVtX3QgcGt0X2luZGV4KQoreworICAgIHVpbnQzMl90IHJvYzsKKyAgICB1aW50MTZfdCBpc247CisgICAgdW5zaWduZWQgZW1rX2xlbjsKKyAgICB1aW50OF90ICpwYWNrZXQ7CisKKyAgICAvKiBpZiB0aGUgcG9pbnRlciBla3QgaXMgTlVMTCwgdGhlbiBFS1QgaXMgbm90IGluIGVmZmVjdCAqLworICAgIGlmICghZWt0KSB7CisgICAgICAgIGRlYnVnX3ByaW50KG1vZF9zcnRwLCAiRUtUIG5vdCBpbiB1c2UiLCBOVUxMKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIHdyaXRlIHplcm9zIGludG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBiYXNlIHRhZyAqLworICAgIG9jdGV0X3N0cmluZ19zZXRfdG9femVybyhiYXNlX3RhZywgYmFzZV90YWdfbGVuKTsKKyAgICBwYWNrZXQgPSBiYXNlX3RhZyArIGJhc2VfdGFnX2xlbjsKKworICAgIC8qIGNvcHkgZW5jcnlwdGVkIG1hc3RlciBrZXkgaW50byBwYWNrZXQgKi8KKyAgICBlbWtfbGVuID0gc3J0cF9la3Rfb2N0ZXRzX2FmdGVyX2Jhc2VfdGFnKGVrdCk7CisgICAgbWVtY3B5KHBhY2tldCwgZWt0LT5lbmNyeXB0ZWRfbWFzdGVyX2tleSwgZW1rX2xlbik7CisgICAgZGVidWdfcHJpbnQobW9kX3NydHAsICJ3cml0aW5nIEVLVCBFTUs6ICVzLCIsCisgICAgICAgICAgICAgICAgc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZyhwYWNrZXQsIGVta19sZW4pKTsKKyAgICBwYWNrZXQgKz0gZW1rX2xlbjsKKworICAgIC8qIGNvcHkgUk9DIGludG8gcGFja2V0ICovCisgICAgcm9jID0gKHVpbnQzMl90KShwa3RfaW5kZXggPj4gMTYpOworICAgICooKHVpbnQzMl90ICopcGFja2V0KSA9IGJlMzJfdG9fY3B1KHJvYyk7CisgICAgZGVidWdfcHJpbnQobW9kX3NydHAsICJ3cml0aW5nIEVLVCBST0M6ICVzLCIsCisgICAgICAgICAgICAgICAgc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZyhwYWNrZXQsIHNpemVvZihyb2MpKSk7CisgICAgcGFja2V0ICs9IHNpemVvZihyb2MpOworCisgICAgLyogY29weSBJU04gaW50byBwYWNrZXQgKi8KKyAgICBpc24gPSAodWludDE2X3QpcGt0X2luZGV4OworICAgICooKHVpbnQxNl90ICopcGFja2V0KSA9IGh0b25zKGlzbik7CisgICAgZGVidWdfcHJpbnQobW9kX3NydHAsICJ3cml0aW5nIEVLVCBJU046ICVzLCIsCisgICAgICAgICAgICAgICAgc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZyhwYWNrZXQsIHNpemVvZihpc24pKSk7CisgICAgcGFja2V0ICs9IHNpemVvZihpc24pOworCisgICAgLyogY29weSBTUEkgaW50byBwYWNrZXQgKi8KKyAgICAqKCh1aW50MTZfdCAqKXBhY2tldCkgPSBodG9ucyhla3QtPmRhdGEtPnNwaSk7CisgICAgZGVidWdfcHJpbnQobW9kX3NydHAsICJ3cml0aW5nIEVLVCBTUEk6ICVzLCIsCisgICAgICAgICAgICAgICAgc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZyhwYWNrZXQsIHNpemVvZihla3QtPmRhdGEtPnNwaSkpKTsKKworICAgIC8qIGluY3JlYXNlIHBhY2tldCBsZW5ndGggYXBwcm9wcmlhdGVseSAqLworICAgICpwYWNrZXRfbGVuICs9IEVLVF9PQ1RFVFNfQUZURVJfRU1LICsgZW1rX2xlbjsKK30KKworLyoKKyAqIFRoZSBmdW5jdGlvbiBjYWxsIHNydGNwX2VrdF90cmFpbGVyKGVrdCwgYXV0aF9sZW4sIGF1dGhfdGFnICAgKQorICoKKyAqIElmIHRoZSBwb2ludGVyIGVrdCBpcyBOVUxMLCB0aGVuIHRoZSBvdGhlciBpbnB1dHMgYXJlIHVuYWZmZWN0ZWQuCisgKgorICogYXV0aF90YWcgaXMgYSBwb2ludGVyIHRvIHRoZSBwb2ludGVyIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUKKyAqIGF1dGhlbnRpY2F0aW9uIHRhZyBpbiB0aGUgcGFja2V0LiAgSWYgRUtUIGlzIGluIGVmZmVjdCwgdGhlbiB0aGUKKyAqIGF1dGhfdGFnIHBvaW50ZXIgaXMgc2V0IHRvIHRoZSBsb2NhdGlvbgorICovCisKK3ZvaWQgc3J0Y3BfZWt0X3RyYWlsZXIoc3J0cF9la3Rfc3RyZWFtX3QgZWt0LAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqYXV0aF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiphdXRoX3RhZywKKyAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdGFnX2NvcHkpCit7CisgICAgLyoKKyAgICAgKiBpZiB0aGVyZSBpcyBubyBFS1QgcG9saWN5LCB0aGVuIHRoZSBvdGhlciBpbnB1dHMgYXJlIHVuYWZmZWN0ZWQKKyAgICAgKi8KKyAgICBpZiAoIWVrdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLyogY29weSBhdXRoX3RhZyBpbnRvIHRlbXBvcmFyeSBsb2NhdGlvbiAqLworfQpkaWZmIC0tZ2l0IGEvc3J0cC9zcnRwLmMgYi9zcnRwL3NydHAuYwppbmRleCA4YjA1ZjZmLi5iZDMzYTRkIDEwMDY0NAotLS0gYS9zcnRwL3NydHAuYworKysgYi9zcnRwL3NydHAuYwpAQCAtNywyNiArNywyNiBAQAogICogQ2lzY28gU3lzdGVtcywgSW5jLgogICovCiAvKgotICoJCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSwgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDE3LCBDaXNjbyBTeXN0ZW1zLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwogICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKICAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCisgKgogICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAogICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKKyAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKQEAgLTQyLDEwNTIgKzQyLDI3MjEgQEAKICAqCiAgKi8KIAorLy8gTGVhdmUgdGhpcyBhcyB0aGUgdG9wIGxldmVsIGltcG9ydC4gRW5zdXJlcyB0aGUgZXhpc3RlbmNlIG9mIGRlZmluZXMKKyNpbmNsdWRlICJjb25maWcuaCIKIAotI2luY2x1ZGUgInNydHAuaCIKLSNpbmNsdWRlICJhZXNfaWNtLmgiICAgICAgICAgLyogYWVzX2ljbSBpcyB1c2VkIGluIHRoZSBLREYgICovCi0jaW5jbHVkZSAiYWxsb2MuaCIgICAgICAgICAgIC8qIGZvciBjcnlwdG9fYWxsb2MoKSAgICAgICAgICAqLwotI2luY2x1ZGUgImxpbWl0cy5oIgorI2luY2x1ZGUgInNydHBfcHJpdi5oIgorI2luY2x1ZGUgImNyeXB0b190eXBlcy5oIgorI2luY2x1ZGUgImVyci5oIgorI2luY2x1ZGUgImVrdC5oIiAgIC8qIGZvciBTUlRQIEVuY3J5cHRlZCBLZXkgVHJhbnNwb3J0ICovCisjaW5jbHVkZSAiYWxsb2MuaCIgLyogZm9yIHNydHBfY3J5cHRvX2FsbG9jKCkgKi8KIAotZXh0ZXJuIGNpcGhlcl90eXBlX3QgYWVzX2ljbTsKLWV4dGVybiBhdXRoX3R5cGVfdCAgIHRtbWh2MjsKKyNpZmRlZiBHQ00KKyNpbmNsdWRlICJhZXNfZ2NtLmgiIC8qIGZvciBBRVMgR0NNIG1vZGUgKi8KKyNlbmRpZgorCisjaWZkZWYgT1BFTlNTTF9LREYKKyNpbmNsdWRlIDxvcGVuc3NsL2tkZi5oPgorI2luY2x1ZGUgImFlc19pY21fZXh0LmgiCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VsaWYgZGVmaW5lZChIQVZFX1dJTlNPQ0syX0gpCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbmRpZgogCiAvKiB0aGUgZGVidWcgbW9kdWxlIGZvciBzcnRwICovCi0KLWRlYnVnX21vZHVsZV90IG1vZF9zcnRwID0gewotICAwLCAgICAgICAgICAgICAgICAgIC8qIGRlYnVnZ2luZyBpcyBvZmYgYnkgZGVmYXVsdCAqLwotICAic3J0cCIgICAgICAgICAgICAgIC8qIHByaW50YWJsZSBuYW1lIGZvciBtb2R1bGUgICAqLworc3J0cF9kZWJ1Z19tb2R1bGVfdCBtb2Rfc3J0cCA9IHsKKyAgICAwLCAgICAgLyogZGVidWdnaW5nIGlzIG9mZiBieSBkZWZhdWx0ICovCisgICAgInNydHAiIC8qIHByaW50YWJsZSBuYW1lIGZvciBtb2R1bGUgKi8KIH07CiAKLSNkZWZpbmUgb2N0ZXRzX2luX3J0cF9oZWFkZXIgICAxMgotI2RlZmluZSB1aW50MzJzX2luX3J0cF9oZWFkZXIgIDMKLSNkZWZpbmUgb2N0ZXRzX2luX3J0Y3BfaGVhZGVyICA4CisjZGVmaW5lIG9jdGV0c19pbl9ydHBfaGVhZGVyIDEyCisjZGVmaW5lIHVpbnQzMnNfaW5fcnRwX2hlYWRlciAzCisjZGVmaW5lIG9jdGV0c19pbl9ydGNwX2hlYWRlciA4CiAjZGVmaW5lIHVpbnQzMnNfaW5fcnRjcF9oZWFkZXIgMgorI2RlZmluZSBvY3RldHNfaW5fcnRwX2V4dG5faGRyIDQKIAotLyoKLSAqIHRoZSBmb2xsb3dpbmcgZGVjbGFyYXRpb25zIGFyZSBsaWJTUlRQIGludGVybmFsIGZ1bmN0aW9ucyAKLSAqLworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IHNydHBfdmFsaWRhdGVfcnRwX2hlYWRlcih2b2lkICpydHBfaGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnBrdF9vY3RldF9sZW4pCit7CisgICAgc3J0cF9oZHJfdCAqaGRyID0gKHNydHBfaGRyX3QgKilydHBfaGRyOworICAgIGludCBydHBfaGVhZGVyX2xlbjsKIAotLyoKLSAqIHNydHBfZ2V0X3N0cmVhbShzc3JjKSByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgc3RyZWFtIGNvcnJlc3BvbmRpbmcKLSAqIHRvIHNzcmMsIG9yIE5VTEwgaWYgbm8gc3RyZWFtIGV4aXN0cyBmb3IgdGhhdCBzc3JjCi0gKi8KKyAgICBpZiAoKnBrdF9vY3RldF9sZW4gPCBvY3RldHNfaW5fcnRwX2hlYWRlcikKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CiAKLXNydHBfc3RyZWFtX3QgCi1zcnRwX2dldF9zdHJlYW0oc3J0cF90IHNydHAsIHVpbnQzMl90IHNzcmMpOworICAgIC8qIENoZWNrIFJUUCBoZWFkZXIgbGVuZ3RoICovCisgICAgcnRwX2hlYWRlcl9sZW4gPSBvY3RldHNfaW5fcnRwX2hlYWRlciArIDQgKiBoZHItPmNjOworICAgIGlmIChoZHItPnggPT0gMSkKKyAgICAgICAgcnRwX2hlYWRlcl9sZW4gKz0gb2N0ZXRzX2luX3J0cF9leHRuX2hkcjsKIAotZXJyX3N0YXR1c190Ci1zcnRwX3Nlc3Npb25fYWxsb2Moc3J0cF90ICpjdHhfcHRyLCBjb25zdCBjcnlwdG9fcG9saWN5X3QgKnApOworICAgIGlmICgqcGt0X29jdGV0X2xlbiA8IHJ0cF9oZWFkZXJfbGVuKQorICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbTsKIAotCi1lcnJfc3RhdHVzX3QKLXNydHBfc3RyZWFtX2FsbG9jKHNydHBfc3RyZWFtX2N0eF90ICoqc3RyX3B0ciwKLQkJICBjb25zdCBzcnRwX3BvbGljeV90ICpwKSB7Ci0gIHNydHBfc3RyZWFtX2N0eF90ICpzdHI7Ci0gIGVycl9zdGF0dXNfdCBzdGF0OwotCi0gIC8qCi0gICAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIHRoZSBzdHJlYW0gY29udGV4dCwgcnRwIGFuZCBydGNwIGNpcGhlcnMKLSAgICogYW5kIGF1dGggZnVuY3Rpb25zLCBhbmQga2V5IGxpbWl0IHN0cnVjdHVyZS4gIElmIHRoZXJlIGlzIGEKLSAgICogZmFpbHVyZSBkdXJpbmcgYWxsb2NhdGlvbiwgd2UgZnJlZSBhbGwgcHJldmlvdXNseSBhbGxvY2F0ZWQKLSAgICogbWVtb3J5IGFuZCByZXR1cm4gYSBmYWlsdXJlIGNvZGUuICBUaGUgY29kZSBjb3VsZCBwcm9iYWJseSAKLSAgICogYmUgaW1wcm92ZWQsIGJ1dCBpdCB3b3JrcyBhbmQgc2hvdWxkIGJlIGNsZWFyLgotICAgKi8KLQotICAvKiBhbGxvY2F0ZSBzcnRwIHN0cmVhbSBhbmQgc2V0IHN0cl9wdHIgKi8KLSAgc3RyID0gKHNydHBfc3RyZWFtX2N0eF90ICopIGNyeXB0b19hbGxvYyhzaXplb2Yoc3J0cF9zdHJlYW1fY3R4X3QpKTsKLSAgaWYgKHN0ciA9PSBOVUxMKQotICAgIHJldHVybiBlcnJfc3RhdHVzX2FsbG9jX2ZhaWw7Ci0gICpzdHJfcHRyID0gc3RyOyAgCi0gIAotICAvKiBhbGxvY2F0ZSBjaXBoZXIgKi8KLSAgc3RhdCA9IGNyeXB0b19rZXJuZWxfYWxsb2NfY2lwaGVyKHAtPnJ0cC5jaXBoZXJfdHlwZSwgCi0JCQkJICAgICZzdHItPnJ0cF9jaXBoZXIsIAotCQkJCSAgICBwLT5ydHAuY2lwaGVyX2tleV9sZW4pOyAKLSAgaWYgKHN0YXQpIHsKLSAgICBjcnlwdG9fZnJlZShzdHIpOwotICAgIHJldHVybiBzdGF0OwotICB9Ci0KLSAgLyogYWxsb2NhdGUgYXV0aCBmdW5jdGlvbiAqLwotICBzdGF0ID0gY3J5cHRvX2tlcm5lbF9hbGxvY19hdXRoKHAtPnJ0cC5hdXRoX3R5cGUsIAotCQkJCSAgJnN0ci0+cnRwX2F1dGgsCi0JCQkJICBwLT5ydHAuYXV0aF9rZXlfbGVuLCAKLQkJCQkgIHAtPnJ0cC5hdXRoX3RhZ19sZW4pOyAKLSAgaWYgKHN0YXQpIHsKLSAgICBjaXBoZXJfZGVhbGxvYyhzdHItPnJ0cF9jaXBoZXIpOwotICAgIGNyeXB0b19mcmVlKHN0cik7Ci0gICAgcmV0dXJuIHN0YXQ7Ci0gIH0KLSAgCi0gIC8qIGFsbG9jYXRlIGtleSBsaW1pdCBzdHJ1Y3R1cmUgKi8KLSAgc3RyLT5saW1pdCA9IGNyeXB0b19hbGxvYyhzaXplb2Yoa2V5X2xpbWl0X2N0eF90KSk7Ci0gIGlmIChzdHItPmxpbWl0ID09IE5VTEwpIHsKLSAgICBhdXRoX2RlYWxsb2Moc3RyLT5ydHBfYXV0aCk7Ci0gICAgY2lwaGVyX2RlYWxsb2Moc3RyLT5ydHBfY2lwaGVyKTsKLSAgICBjcnlwdG9fZnJlZShzdHIpOyAKLSAgICByZXR1cm4gZXJyX3N0YXR1c19hbGxvY19mYWlsOwotICB9Ci0KLSAgLyoKLSAgICogLi4uYW5kIG5vdyB0aGUgUlRDUC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiAtIGZpcnN0LCBhbGxvY2F0ZQotICAgKiB0aGUgY2lwaGVyIAotICAgKi8KLSAgc3RhdCA9IGNyeXB0b19rZXJuZWxfYWxsb2NfY2lwaGVyKHAtPnJ0Y3AuY2lwaGVyX3R5cGUsIAotCQkJCSAgICAmc3RyLT5ydGNwX2NpcGhlciwgCi0JCQkJICAgIHAtPnJ0Y3AuY2lwaGVyX2tleV9sZW4pOyAKLSAgaWYgKHN0YXQpIHsKLSAgICBhdXRoX2RlYWxsb2Moc3RyLT5ydHBfYXV0aCk7Ci0gICAgY2lwaGVyX2RlYWxsb2Moc3RyLT5ydHBfY2lwaGVyKTsKLSAgICBjcnlwdG9fZnJlZShzdHItPmxpbWl0KTsKLSAgICBjcnlwdG9fZnJlZShzdHIpOwotICAgIHJldHVybiBzdGF0OwotICB9Ci0KLSAgLyogYWxsb2NhdGUgYXV0aCBmdW5jdGlvbiAqLwotICBzdGF0ID0gY3J5cHRvX2tlcm5lbF9hbGxvY19hdXRoKHAtPnJ0Y3AuYXV0aF90eXBlLCAKLQkJCQkgICZzdHItPnJ0Y3BfYXV0aCwKLQkJCQkgIHAtPnJ0Y3AuYXV0aF9rZXlfbGVuLCAKLQkJCQkgIHAtPnJ0Y3AuYXV0aF90YWdfbGVuKTsgCi0gIGlmIChzdGF0KSB7Ci0gICAgY2lwaGVyX2RlYWxsb2Moc3RyLT5ydGNwX2NpcGhlcik7Ci0gICAgYXV0aF9kZWFsbG9jKHN0ci0+cnRwX2F1dGgpOwotICAgIGNpcGhlcl9kZWFsbG9jKHN0ci0+cnRwX2NpcGhlcik7Ci0gICAgY3J5cHRvX2ZyZWUoc3RyLT5saW1pdCk7Ci0gICAgY3J5cHRvX2ZyZWUoc3RyKTsKLSAgIHJldHVybiBzdGF0OwotICB9ICAKLQotICByZXR1cm4gZXJyX3N0YXR1c19vazsKKyAgICAvKiBWZXJpZmluZyBwcm9maWxlIGxlbmd0aC4gKi8KKyAgICBpZiAoaGRyLT54ID09IDEpIHsKKyAgICAgICAgc3J0cF9oZHJfeHRuZF90ICp4dG5faGRyID0KKyAgICAgICAgICAgIChzcnRwX2hkcl94dG5kX3QgKikoKHVpbnQzMl90ICopaGRyICsgdWludDMyc19pbl9ydHBfaGVhZGVyICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGRyLT5jYyk7CisgICAgICAgIGludCBwcm9maWxlX2xlbiA9IG50b2hzKHh0bl9oZHItPmxlbmd0aCk7CisgICAgICAgIHJ0cF9oZWFkZXJfbGVuICs9IHByb2ZpbGVfbGVuICogNDsKKyAgICAgICAgLyogcHJvZmlsZSBsZW5ndGggY291bnRzIHRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzICovCisgICAgICAgIGlmICgqcGt0X29jdGV0X2xlbiA8IHJ0cF9oZWFkZXJfbGVuKQorICAgICAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisgICAgfQorICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7CiB9CiAKLWVycl9zdGF0dXNfdAotc3J0cF9zdHJlYW1fZGVhbGxvYyhzcnRwX3Qgc2Vzc2lvbiwgc3J0cF9zdHJlYW1fY3R4X3QgKnN0cmVhbSkgeyAKLSAgZXJyX3N0YXR1c190IHN0YXR1czsKLSAgCi0gIC8qCi0gICAqIHdlIHVzZSBhIGNvbnNlcnZhdGl2ZSBkZWFsbG9jYXRpb24gc3RyYXRlZ3kgLSBpZiBhbnkgZGVhbGxvY2F0aW9uCi0gICAqIGZhaWxzLCB0aGVuIHdlIHJlcG9ydCB0aGF0IGZhY3Qgd2l0aG91dCB0cnlpbmcgdG8gZGVhbGxvY2F0ZQotICAgKiBhbnl0aGluZyBlbHNlCi0gICAqLwotCi0gIC8qIGRlYWxsb2NhdGUgY2lwaGVyLCBpZiBpdCBpcyBub3QgdGhlIHNhbWUgYXMgdGhhdCBpbiB0ZW1wbGF0ZSAqLwotICBpZiAoc2Vzc2lvbi0+c3RyZWFtX3RlbXBsYXRlIAotICAgICAgJiYgc3RyZWFtLT5ydHBfY2lwaGVyID09IHNlc3Npb24tPnN0cmVhbV90ZW1wbGF0ZS0+cnRwX2NpcGhlcikgewotICAgIC8qIGRvIG5vdGhpbmcgKi8KLSAgfSBlbHNlIHsKLSAgICBzdGF0dXMgPSBjaXBoZXJfZGVhbGxvYyhzdHJlYW0tPnJ0cF9jaXBoZXIpOyAKLSAgICBpZiAoc3RhdHVzKSAKLSAgICAgIHJldHVybiBzdGF0dXM7ICAgIAotICB9Ci0KLSAgLyogZGVhbGxvY2F0ZSBhdXRoIGZ1bmN0aW9uLCBpZiBpdCBpcyBub3QgdGhlIHNhbWUgYXMgdGhhdCBpbiB0ZW1wbGF0ZSAqLwotICBpZiAoc2Vzc2lvbi0+c3RyZWFtX3RlbXBsYXRlCi0gICAgICAmJiBzdHJlYW0tPnJ0cF9hdXRoID09IHNlc3Npb24tPnN0cmVhbV90ZW1wbGF0ZS0+cnRwX2F1dGgpIHsKLSAgICAvKiBkbyBub3RoaW5nICovCi0gIH0gZWxzZSB7Ci0gICAgc3RhdHVzID0gYXV0aF9kZWFsbG9jKHN0cmVhbS0+cnRwX2F1dGgpOwotICAgIGlmIChzdGF0dXMpCi0gICAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0KLSAgLyogaWYgdGhlIGtleSB1c2FnZSBsaW1pdCBzdHJ1Y3V0cmUgaXMgcHJlc2VudCwgZGVhbGxvY2F0ZSBpdCAqLwotICBpZiAoc3RyZWFtLT5saW1pdCAhPSBOVUxMCi0gICAgICAmJiAoc2Vzc2lvbi0+c3RyZWFtX3RlbXBsYXRlID09IE5VTEwgfHwgc3RyZWFtLT5uZXh0ID09IE5VTEwpKQotICAgIGNyeXB0b19mcmVlKHN0cmVhbS0+bGltaXQpOwotCi0gIC8qIAotICAgKiBkZWFsbG9jYXRlIHJ0Y3AgY2lwaGVyLCBpZiBpdCBpcyBub3QgdGhlIHNhbWUgYXMgdGhhdCBpbgotICAgKiB0ZW1wbGF0ZSAKLSAgICovCi0gIGlmIChzZXNzaW9uLT5zdHJlYW1fdGVtcGxhdGUKLSAgICAgICYmIHN0cmVhbS0+cnRjcF9jaXBoZXIgPT0gc2Vzc2lvbi0+c3RyZWFtX3RlbXBsYXRlLT5ydGNwX2NpcGhlcikgewotICAgIC8qIGRvIG5vdGhpbmcgKi8KLSAgfSBlbHNlIHsKLSAgICBzdGF0dXMgPSBjaXBoZXJfZGVhbGxvYyhzdHJlYW0tPnJ0Y3BfY2lwaGVyKTsgCi0gICAgaWYgKHN0YXR1cykgCi0gICAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0KLSAgLyoKLSAgICogZGVhbGxvY2F0ZSBydGNwIGF1dGggZnVuY3Rpb24sIGlmIGl0IGlzIG5vdCB0aGUgc2FtZSBhcyB0aGF0IGluCi0gICAqIHRlbXBsYXRlIAotICAgKi8KLSAgaWYgKHNlc3Npb24tPnN0cmVhbV90ZW1wbGF0ZQotICAgICAgJiYgc3RyZWFtLT5ydGNwX2F1dGggPT0gc2Vzc2lvbi0+c3RyZWFtX3RlbXBsYXRlLT5ydGNwX2F1dGgpIHsKLSAgICAvKiBkbyBub3RoaW5nICovCi0gIH0gZWxzZSB7Ci0gICAgc3RhdHVzID0gYXV0aF9kZWFsbG9jKHN0cmVhbS0+cnRjcF9hdXRoKTsKLSAgICBpZiAoc3RhdHVzKQotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgfQotICAKLSAgLyogZGVhbGxvY2F0ZSBzcnRwIHN0cmVhbSBjb250ZXh0ICovCi0gIGNyeXB0b19mcmVlKHN0cmVhbSk7Ci0KLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7Citjb25zdCBjaGFyICpzcnRwX2dldF92ZXJzaW9uX3N0cmluZygpCit7CisgICAgLyoKKyAgICAgKiBTaW1wbHkgcmV0dXJuIHRoZSBhdXRvdG9vbHMgZ2VuZXJhdGVkIHN0cmluZworICAgICAqLworICAgIHJldHVybiBTUlRQX1ZFUl9TVFJJTkc7CiB9CiAKK3Vuc2lnbmVkIGludCBzcnRwX2dldF92ZXJzaW9uKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgbWFqb3IgPSAwLCBtaW5vciA9IDAsIG1pY3JvID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgcnYgPSAwOworICAgIGludCBwYXJzZV9ydjsKKworICAgIC8qCisgICAgICogUGFyc2UgdGhlIGF1dG90b29scyBnZW5lcmF0ZWQgdmVyc2lvbgorICAgICAqLworICAgIHBhcnNlX3J2ID0gc3NjYW5mKFNSVFBfVkVSU0lPTiwgIiV1LiV1LiV1IiwgJm1ham9yLCAmbWlub3IsICZtaWNybyk7CisgICAgaWYgKHBhcnNlX3J2ICE9IDMpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogV2UncmUgZXhwZWN0ZWQgdG8gcGFyc2UgYWxsIDMgdmVyc2lvbiBsZXZlbHMuCisgICAgICAgICAqIElmIG5vdCwgdGhlbiB0aGlzIG11c3Qgbm90IGJlIGFuIG9mZmljaWFsIHJlbGVhc2UuCisgICAgICAgICAqIFJldHVybiBhbGwgemVyb3Mgb24gdGhlIHZlcnNpb24KKyAgICAgICAgICovCisgICAgICAgIHJldHVybiAoMCk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBXZSBhbGxvdyA4IGJpdHMgZm9yIHRoZSBtYWpvciBhbmQgbWlub3IsIHdoaWxlCisgICAgICogYWxsb3dpbmcgMTYgYml0cyBmb3IgdGhlIG1pY3JvLiAgMTYgYml0cyBmb3IgdGhlIG1pY3JvCisgICAgICogbWF5IGJlIGJlbmVmaWNpYWwgZm9yIGEgY29udGludW91cyBkZWxpdmVyeSBtb2RlbAorICAgICAqIGluIHRoZSBmdXR1cmUuCisgICAgICovCisgICAgcnYgfD0gKG1ham9yICYgMHhGRikgPDwgMjQ7CisgICAgcnYgfD0gKG1pbm9yICYgMHhGRikgPDwgMTY7CisgICAgcnYgfD0gbWljcm8gJiAweEZGOworICAgIHJldHVybiBydjsKK30KKworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9zdHJlYW1fZGVhbGxvYyhzcnRwX3N0cmVhbV9jdHhfdCAqc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcnRwX3N0cmVhbV9jdHhfdCAqc3RyZWFtX3RlbXBsYXRlKQoreworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKKyAgICB1bnNpZ25lZCBpbnQgaSA9IDA7CisgICAgc3J0cF9zZXNzaW9uX2tleXNfdCAqc2Vzc2lvbl9rZXlzID0gTlVMTDsKKyAgICBzcnRwX3Nlc3Npb25fa2V5c190ICp0ZW1wbGF0ZV9zZXNzaW9uX2tleXMgPSBOVUxMOworCisgICAgLyoKKyAgICAgKiB3ZSB1c2UgYSBjb25zZXJ2YXRpdmUgZGVhbGxvY2F0aW9uIHN0cmF0ZWd5IC0gaWYgYW55IGRlYWxsb2NhdGlvbgorICAgICAqIGZhaWxzLCB0aGVuIHdlIHJlcG9ydCB0aGF0IGZhY3Qgd2l0aG91dCB0cnlpbmcgdG8gZGVhbGxvY2F0ZQorICAgICAqIGFueXRoaW5nIGVsc2UKKyAgICAgKi8KKyAgICBpZiAoc3RyZWFtLT5zZXNzaW9uX2tleXMpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0cmVhbS0+bnVtX21hc3Rlcl9rZXlzOyBpKyspIHsKKyAgICAgICAgICAgIHNlc3Npb25fa2V5cyA9ICZzdHJlYW0tPnNlc3Npb25fa2V5c1tpXTsKKworICAgICAgICAgICAgaWYgKHN0cmVhbV90ZW1wbGF0ZSAmJgorICAgICAgICAgICAgICAgIHN0cmVhbS0+bnVtX21hc3Rlcl9rZXlzID09IHN0cmVhbV90ZW1wbGF0ZS0+bnVtX21hc3Rlcl9rZXlzKSB7CisgICAgICAgICAgICAgICAgdGVtcGxhdGVfc2Vzc2lvbl9rZXlzID0gJnN0cmVhbV90ZW1wbGF0ZS0+c2Vzc2lvbl9rZXlzW2ldOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0ZW1wbGF0ZV9zZXNzaW9uX2tleXMgPSBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgKiBkZWFsbG9jYXRlIGNpcGhlciwgaWYgaXQgaXMgbm90IHRoZSBzYW1lIGFzIHRoYXQgaW4gdGVtcGxhdGUKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAodGVtcGxhdGVfc2Vzc2lvbl9rZXlzICYmCisgICAgICAgICAgICAgICAgc2Vzc2lvbl9rZXlzLT5ydHBfY2lwaGVyID09IHRlbXBsYXRlX3Nlc3Npb25fa2V5cy0+cnRwX2NpcGhlcikgeworICAgICAgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi8KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Vzc2lvbl9rZXlzLT5ydHBfY2lwaGVyKSB7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfZGVhbGxvYyhzZXNzaW9uX2tleXMtPnJ0cF9jaXBoZXIpOworICAgICAgICAgICAgICAgIGlmIChzdGF0dXMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBkZWFsbG9jYXRlIGF1dGggZnVuY3Rpb24sIGlmIGl0IGlzIG5vdCB0aGUgc2FtZSBhcyB0aGF0IGluCisgICAgICAgICAgICAgKiB0ZW1wbGF0ZQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAodGVtcGxhdGVfc2Vzc2lvbl9rZXlzICYmCisgICAgICAgICAgICAgICAgc2Vzc2lvbl9rZXlzLT5ydHBfYXV0aCA9PSB0ZW1wbGF0ZV9zZXNzaW9uX2tleXMtPnJ0cF9hdXRoKSB7CisgICAgICAgICAgICAgICAgLyogZG8gbm90aGluZyAqLworICAgICAgICAgICAgfSBlbHNlIGlmIChzZXNzaW9uX2tleXMtPnJ0cF9hdXRoKSB7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gc3J0cF9hdXRoX2RlYWxsb2Moc2Vzc2lvbl9rZXlzLT5ydHBfYXV0aCk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRlbXBsYXRlX3Nlc3Npb25fa2V5cyAmJgorICAgICAgICAgICAgICAgIHNlc3Npb25fa2V5cy0+cnRwX3h0bl9oZHJfY2lwaGVyID09CisgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlX3Nlc3Npb25fa2V5cy0+cnRwX3h0bl9oZHJfY2lwaGVyKSB7CisgICAgICAgICAgICAgICAgLyogZG8gbm90aGluZyAqLworICAgICAgICAgICAgfSBlbHNlIGlmIChzZXNzaW9uX2tleXMtPnJ0cF94dG5faGRyX2NpcGhlcikgeworICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX2RlYWxsb2Moc2Vzc2lvbl9rZXlzLT5ydHBfeHRuX2hkcl9jaXBoZXIpOworICAgICAgICAgICAgICAgIGlmIChzdGF0dXMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBkZWFsbG9jYXRlIHJ0Y3AgY2lwaGVyLCBpZiBpdCBpcyBub3QgdGhlIHNhbWUgYXMgdGhhdCBpbgorICAgICAgICAgICAgICogdGVtcGxhdGUKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKHRlbXBsYXRlX3Nlc3Npb25fa2V5cyAmJgorICAgICAgICAgICAgICAgIHNlc3Npb25fa2V5cy0+cnRjcF9jaXBoZXIgPT0KKyAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVfc2Vzc2lvbl9rZXlzLT5ydGNwX2NpcGhlcikgeworICAgICAgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi8KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Vzc2lvbl9rZXlzLT5ydGNwX2NpcGhlcikgeworICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX2RlYWxsb2Moc2Vzc2lvbl9rZXlzLT5ydGNwX2NpcGhlcik7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIGRlYWxsb2NhdGUgcnRjcCBhdXRoIGZ1bmN0aW9uLCBpZiBpdCBpcyBub3QgdGhlIHNhbWUgYXMgdGhhdCBpbgorICAgICAgICAgICAgICogdGVtcGxhdGUKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKHRlbXBsYXRlX3Nlc3Npb25fa2V5cyAmJgorICAgICAgICAgICAgICAgIHNlc3Npb25fa2V5cy0+cnRjcF9hdXRoID09IHRlbXBsYXRlX3Nlc3Npb25fa2V5cy0+cnRjcF9hdXRoKSB7CisgICAgICAgICAgICAgICAgLyogZG8gbm90aGluZyAqLworICAgICAgICAgICAgfSBlbHNlIGlmIChzZXNzaW9uX2tleXMtPnJ0Y3BfYXV0aCkgeworICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNydHBfYXV0aF9kZWFsbG9jKHNlc3Npb25fa2V5cy0+cnRjcF9hdXRoKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogemVyb2l6ZSB0aGUgc2FsdCB2YWx1ZQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBvY3RldF9zdHJpbmdfc2V0X3RvX3plcm8oc2Vzc2lvbl9rZXlzLT5zYWx0LCBTUlRQX0FFQURfU0FMVF9MRU4pOworICAgICAgICAgICAgb2N0ZXRfc3RyaW5nX3NldF90b196ZXJvKHNlc3Npb25fa2V5cy0+Y19zYWx0LCBTUlRQX0FFQURfU0FMVF9MRU4pOworCisgICAgICAgICAgICBpZiAoc2Vzc2lvbl9rZXlzLT5ta2lfaWQpIHsKKyAgICAgICAgICAgICAgICBvY3RldF9zdHJpbmdfc2V0X3RvX3plcm8oc2Vzc2lvbl9rZXlzLT5ta2lfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25fa2V5cy0+bWtpX3NpemUpOworICAgICAgICAgICAgICAgIHNydHBfY3J5cHRvX2ZyZWUoc2Vzc2lvbl9rZXlzLT5ta2lfaWQpOworICAgICAgICAgICAgICAgIHNlc3Npb25fa2V5cy0+bWtpX2lkID0gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIGRlYWxsb2NhdGUga2V5IHVzYWdlIGxpbWl0LCBpZiBpdCBpcyBub3QgdGhlIHNhbWUgYXMgdGhhdCBpbgorICAgICAgICAgICAgICogdGVtcGxhdGUKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKHRlbXBsYXRlX3Nlc3Npb25fa2V5cyAmJgorICAgICAgICAgICAgICAgIHNlc3Npb25fa2V5cy0+bGltaXQgPT0gdGVtcGxhdGVfc2Vzc2lvbl9rZXlzLT5saW1pdCkgeworICAgICAgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi8KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Vzc2lvbl9rZXlzLT5saW1pdCkgeworICAgICAgICAgICAgICAgIHNydHBfY3J5cHRvX2ZyZWUoc2Vzc2lvbl9rZXlzLT5saW1pdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3J0cF9jcnlwdG9fZnJlZShzdHJlYW0tPnNlc3Npb25fa2V5cyk7CisgICAgfQorCisgICAgc3RhdHVzID0gc3J0cF9yZGJ4X2RlYWxsb2MoJnN0cmVhbS0+cnRwX3JkYngpOworICAgIGlmIChzdGF0dXMpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICAvKiBEQU0gLSBuZWVkIHRvIGRlYWxsb2NhdGUgRUtUIGhlcmUgKi8KKworICAgIGlmIChzdHJlYW1fdGVtcGxhdGUgJiYKKyAgICAgICAgc3RyZWFtLT5lbmNfeHRuX2hkciA9PSBzdHJlYW1fdGVtcGxhdGUtPmVuY194dG5faGRyKSB7CisgICAgICAgIC8qIGRvIG5vdGhpbmcgKi8KKyAgICB9IGVsc2UgaWYgKHN0cmVhbS0+ZW5jX3h0bl9oZHIpIHsKKyAgICAgICAgc3J0cF9jcnlwdG9fZnJlZShzdHJlYW0tPmVuY194dG5faGRyKTsKKyAgICB9CisKKyAgICAvKiBkZWFsbG9jYXRlIHNydHAgc3RyZWFtIGNvbnRleHQgKi8KKyAgICBzcnRwX2NyeXB0b19mcmVlKHN0cmVhbSk7CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOworfQorCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX3N0cmVhbV9hbGxvYyhzcnRwX3N0cmVhbV9jdHhfdCAqKnN0cl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcnRwX3BvbGljeV90ICpwKQoreworICAgIHNydHBfc3RyZWFtX2N0eF90ICpzdHI7CisgICAgc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdDsKKyAgICB1bnNpZ25lZCBpbnQgaSA9IDA7CisgICAgc3J0cF9zZXNzaW9uX2tleXNfdCAqc2Vzc2lvbl9rZXlzID0gTlVMTDsKKworICAgIC8qCisgICAgICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgdGhlIHN0cmVhbSBjb250ZXh0LCBydHAgYW5kIHJ0Y3AgY2lwaGVycworICAgICAqIGFuZCBhdXRoIGZ1bmN0aW9ucywgYW5kIGtleSBsaW1pdCBzdHJ1Y3R1cmUuICBJZiB0aGVyZSBpcyBhCisgICAgICogZmFpbHVyZSBkdXJpbmcgYWxsb2NhdGlvbiwgd2UgZnJlZSBhbGwgcHJldmlvdXNseSBhbGxvY2F0ZWQKKyAgICAgKiBtZW1vcnkgYW5kIHJldHVybiBhIGZhaWx1cmUgY29kZS4gIFRoZSBjb2RlIGNvdWxkIHByb2JhYmx5CisgICAgICogYmUgaW1wcm92ZWQsIGJ1dCBpdCB3b3JrcyBhbmQgc2hvdWxkIGJlIGNsZWFyLgorICAgICAqLworCisgICAgLyogYWxsb2NhdGUgc3J0cCBzdHJlYW0gYW5kIHNldCBzdHJfcHRyICovCisgICAgc3RyID0gKHNydHBfc3RyZWFtX2N0eF90ICopc3J0cF9jcnlwdG9fYWxsb2Moc2l6ZW9mKHNydHBfc3RyZWFtX2N0eF90KSk7CisgICAgaWYgKHN0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2FsbG9jX2ZhaWw7CisKKyAgICAqc3RyX3B0ciA9IHN0cjsKKworICAgIC8qCisgICAgICpUbyBrZWVwIGJhY2t3YXJkcyBBUEkgY29tcGF0aWJsZSBpZiBzb21lb25lIGlzIHVzaW5nIG11bHRpcGxlIG1hc3RlcgorICAgICAqIGtleXMgdGhlbiBrZXkgc2hvdWxkIGJlIHNldCB0byBOVUxMCisgICAgICovCisgICAgaWYgKHAtPmtleSAhPSBOVUxMKSB7CisgICAgICAgIHN0ci0+bnVtX21hc3Rlcl9rZXlzID0gMTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdHItPm51bV9tYXN0ZXJfa2V5cyA9IHAtPm51bV9tYXN0ZXJfa2V5czsKKyAgICB9CisKKyAgICBzdHItPnNlc3Npb25fa2V5cyA9IChzcnRwX3Nlc3Npb25fa2V5c190ICopc3J0cF9jcnlwdG9fYWxsb2MoCisgICAgICAgIHNpemVvZihzcnRwX3Nlc3Npb25fa2V5c190KSAqIHN0ci0+bnVtX21hc3Rlcl9rZXlzKTsKKworICAgIGlmIChzdHItPnNlc3Npb25fa2V5cyA9PSBOVUxMKSB7CisgICAgICAgIHNydHBfc3RyZWFtX2RlYWxsb2Moc3RyLCBOVUxMKTsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19hbGxvY19mYWlsOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBzdHItPm51bV9tYXN0ZXJfa2V5czsgaSsrKSB7CisgICAgICAgIHNlc3Npb25fa2V5cyA9ICZzdHItPnNlc3Npb25fa2V5c1tpXTsKKworICAgICAgICAvKiBhbGxvY2F0ZSBjaXBoZXIgKi8KKyAgICAgICAgc3RhdCA9IHNydHBfY3J5cHRvX2tlcm5lbF9hbGxvY19jaXBoZXIoCisgICAgICAgICAgICBwLT5ydHAuY2lwaGVyX3R5cGUsICZzZXNzaW9uX2tleXMtPnJ0cF9jaXBoZXIsCisgICAgICAgICAgICBwLT5ydHAuY2lwaGVyX2tleV9sZW4sIHAtPnJ0cC5hdXRoX3RhZ19sZW4pOworICAgICAgICBpZiAoc3RhdCkgeworICAgICAgICAgICAgc3J0cF9zdHJlYW1fZGVhbGxvYyhzdHIsIE5VTEwpOworICAgICAgICAgICAgcmV0dXJuIHN0YXQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBhbGxvY2F0ZSBhdXRoIGZ1bmN0aW9uICovCisgICAgICAgIHN0YXQgPSBzcnRwX2NyeXB0b19rZXJuZWxfYWxsb2NfYXV0aCgKKyAgICAgICAgICAgIHAtPnJ0cC5hdXRoX3R5cGUsICZzZXNzaW9uX2tleXMtPnJ0cF9hdXRoLCBwLT5ydHAuYXV0aF9rZXlfbGVuLAorICAgICAgICAgICAgcC0+cnRwLmF1dGhfdGFnX2xlbik7CisgICAgICAgIGlmIChzdGF0KSB7CisgICAgICAgICAgICBzcnRwX3N0cmVhbV9kZWFsbG9jKHN0ciwgTlVMTCk7CisgICAgICAgICAgICByZXR1cm4gc3RhdDsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIC4uLmFuZCBub3cgdGhlIFJUQ1Atc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gLSBmaXJzdCwgYWxsb2NhdGUKKyAgICAgICAgICogdGhlIGNpcGhlcgorICAgICAgICAgKi8KKyAgICAgICAgc3RhdCA9IHNydHBfY3J5cHRvX2tlcm5lbF9hbGxvY19jaXBoZXIoCisgICAgICAgICAgICBwLT5ydGNwLmNpcGhlcl90eXBlLCAmc2Vzc2lvbl9rZXlzLT5ydGNwX2NpcGhlciwKKyAgICAgICAgICAgIHAtPnJ0Y3AuY2lwaGVyX2tleV9sZW4sIHAtPnJ0Y3AuYXV0aF90YWdfbGVuKTsKKyAgICAgICAgaWYgKHN0YXQpIHsKKyAgICAgICAgICAgIHNydHBfc3RyZWFtX2RlYWxsb2Moc3RyLCBOVUxMKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0OworICAgICAgICB9CisKKyAgICAgICAgLyogYWxsb2NhdGUgYXV0aCBmdW5jdGlvbiAqLworICAgICAgICBzdGF0ID0gc3J0cF9jcnlwdG9fa2VybmVsX2FsbG9jX2F1dGgoCisgICAgICAgICAgICBwLT5ydGNwLmF1dGhfdHlwZSwgJnNlc3Npb25fa2V5cy0+cnRjcF9hdXRoLCBwLT5ydGNwLmF1dGhfa2V5X2xlbiwKKyAgICAgICAgICAgIHAtPnJ0Y3AuYXV0aF90YWdfbGVuKTsKKyAgICAgICAgaWYgKHN0YXQpIHsKKyAgICAgICAgICAgIHNydHBfc3RyZWFtX2RlYWxsb2Moc3RyLCBOVUxMKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0OworICAgICAgICB9CisKKyAgICAgICAgc2Vzc2lvbl9rZXlzLT5ta2lfaWQgPSBOVUxMOworCisgICAgICAgIC8qIGFsbG9jYXRlIGtleSBsaW1pdCBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgc2Vzc2lvbl9rZXlzLT5saW1pdCA9IChzcnRwX2tleV9saW1pdF9jdHhfdCAqKXNydHBfY3J5cHRvX2FsbG9jKAorICAgICAgICAgICAgc2l6ZW9mKHNydHBfa2V5X2xpbWl0X2N0eF90KSk7CisgICAgICAgIGlmIChzZXNzaW9uX2tleXMtPmxpbWl0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIHNydHBfc3RyZWFtX2RlYWxsb2Moc3RyLCBOVUxMKTsKKyAgICAgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYWxsb2NfZmFpbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIGFsbG9jYXRlIGVrdCBkYXRhIGFzc29jaWF0ZWQgd2l0aCBzdHJlYW0gKi8KKyAgICBzdGF0ID0gc3J0cF9la3RfYWxsb2MoJnN0ci0+ZWt0LCBwLT5la3QpOworICAgIGlmIChzdGF0KSB7CisgICAgICAgIHNydHBfc3RyZWFtX2RlYWxsb2Moc3RyLCBOVUxMKTsKKyAgICAgICAgcmV0dXJuIHN0YXQ7CisgICAgfQorCisgICAgaWYgKHAtPmVuY194dG5faGRyICYmIHAtPmVuY194dG5faGRyX2NvdW50ID4gMCkgeworICAgICAgICBzcnRwX2NpcGhlcl90eXBlX2lkX3QgZW5jX3h0bl9oZHJfY2lwaGVyX3R5cGU7CisgICAgICAgIGludCBlbmNfeHRuX2hkcl9jaXBoZXJfa2V5X2xlbjsKKworICAgICAgICBzdHItPmVuY194dG5faGRyID0gKGludCAqKXNydHBfY3J5cHRvX2FsbG9jKHAtPmVuY194dG5faGRyX2NvdW50ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocC0+ZW5jX3h0bl9oZHJbMF0pKTsKKyAgICAgICAgaWYgKCFzdHItPmVuY194dG5faGRyKSB7CisgICAgICAgICAgICBzcnRwX3N0cmVhbV9kZWFsbG9jKHN0ciwgTlVMTCk7CisgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2FsbG9jX2ZhaWw7CisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KHN0ci0+ZW5jX3h0bl9oZHIsIHAtPmVuY194dG5faGRyLAorICAgICAgICAgICAgICAgcC0+ZW5jX3h0bl9oZHJfY291bnQgKiBzaXplb2YocC0+ZW5jX3h0bl9oZHJbMF0pKTsKKyAgICAgICAgc3RyLT5lbmNfeHRuX2hkcl9jb3VudCA9IHAtPmVuY194dG5faGRyX2NvdW50OworCisgICAgICAgIC8qCisgICAgICAgICAqIEZvciBHQ00gY2lwaGVycywgdGhlIGNvcnJlc3BvbmRpbmcgSUNNIGNpcGhlciBpcyB1c2VkIGZvciBoZWFkZXIKKyAgICAgICAgICogZXh0ZW5zaW9ucyBlbmNyeXB0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgc3dpdGNoIChwLT5ydHAuY2lwaGVyX3R5cGUpIHsKKyAgICAgICAgY2FzZSBTUlRQX0FFU19HQ01fMTI4OgorICAgICAgICAgICAgZW5jX3h0bl9oZHJfY2lwaGVyX3R5cGUgPSBTUlRQX0FFU19JQ01fMTI4OworICAgICAgICAgICAgZW5jX3h0bl9oZHJfY2lwaGVyX2tleV9sZW4gPSBTUlRQX0FFU19JQ01fMTI4X0tFWV9MRU5fV1NBTFQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTUlRQX0FFU19HQ01fMjU2OgorICAgICAgICAgICAgZW5jX3h0bl9oZHJfY2lwaGVyX3R5cGUgPSBTUlRQX0FFU19JQ01fMjU2OworICAgICAgICAgICAgZW5jX3h0bl9oZHJfY2lwaGVyX2tleV9sZW4gPSBTUlRQX0FFU19JQ01fMjU2X0tFWV9MRU5fV1NBTFQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGVuY194dG5faGRyX2NpcGhlcl90eXBlID0gcC0+cnRwLmNpcGhlcl90eXBlOworICAgICAgICAgICAgZW5jX3h0bl9oZHJfY2lwaGVyX2tleV9sZW4gPSBwLT5ydHAuY2lwaGVyX2tleV9sZW47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdHItPm51bV9tYXN0ZXJfa2V5czsgaSsrKSB7CisgICAgICAgICAgICBzZXNzaW9uX2tleXMgPSAmc3RyLT5zZXNzaW9uX2tleXNbaV07CisKKyAgICAgICAgICAgIC8qIGFsbG9jYXRlIGNpcGhlciBmb3IgZXh0ZW5zaW9ucyBoZWFkZXIgZW5jcnlwdGlvbiAqLworICAgICAgICAgICAgc3RhdCA9IHNydHBfY3J5cHRvX2tlcm5lbF9hbGxvY19jaXBoZXIoCisgICAgICAgICAgICAgICAgZW5jX3h0bl9oZHJfY2lwaGVyX3R5cGUsICZzZXNzaW9uX2tleXMtPnJ0cF94dG5faGRyX2NpcGhlciwKKyAgICAgICAgICAgICAgICBlbmNfeHRuX2hkcl9jaXBoZXJfa2V5X2xlbiwgMCk7CisgICAgICAgICAgICBpZiAoc3RhdCkgeworICAgICAgICAgICAgICAgIHNydHBfc3RyZWFtX2RlYWxsb2Moc3RyLCBOVUxMKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdHItPm51bV9tYXN0ZXJfa2V5czsgaSsrKSB7CisgICAgICAgICAgICBzZXNzaW9uX2tleXMgPSAmc3RyLT5zZXNzaW9uX2tleXNbaV07CisgICAgICAgICAgICBzZXNzaW9uX2tleXMtPnJ0cF94dG5faGRyX2NpcGhlciA9IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBzdHItPmVuY194dG5faGRyID0gTlVMTDsKKyAgICAgICAgc3RyLT5lbmNfeHRuX2hkcl9jb3VudCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KIAogLyoKICAqIHNydHBfc3RyZWFtX2Nsb25lKHN0cmVhbV90ZW1wbGF0ZSwgbmV3KSBhbGxvY2F0ZXMgYSBuZXcgc3RyZWFtIGFuZAogICogaW5pdGlhbGl6ZXMgaXQgdXNpbmcgdGhlIGNpcGhlciBhbmQgYXV0aCBvZiB0aGUgc3RyZWFtX3RlbXBsYXRlCi0gKiAKKyAqCiAgKiB0aGUgb25seSB1bmlxdWUgZGF0YSBpbiBhIGNsb25lZCBzdHJlYW0gaXMgdGhlIHJlcGxheSBkYXRhYmFzZSBhbmQKICAqIHRoZSBTU1JDCiAgKi8KIAotZXJyX3N0YXR1c190Ci1zcnRwX3N0cmVhbV9jbG9uZShjb25zdCBzcnRwX3N0cmVhbV9jdHhfdCAqc3RyZWFtX3RlbXBsYXRlLCAKLQkJICB1aW50MzJfdCBzc3JjLCAKLQkJICBzcnRwX3N0cmVhbV9jdHhfdCAqKnN0cl9wdHIpIHsKLSAgZXJyX3N0YXR1c190IHN0YXR1czsKLSAgc3J0cF9zdHJlYW1fY3R4X3QgKnN0cjsKK3NydHBfZXJyX3N0YXR1c190IHNydHBfc3RyZWFtX2Nsb25lKGNvbnN0IHNydHBfc3RyZWFtX2N0eF90ICpzdHJlYW1fdGVtcGxhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9zdHJlYW1fY3R4X3QgKipzdHJfcHRyKQoreworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKKyAgICBzcnRwX3N0cmVhbV9jdHhfdCAqc3RyOworICAgIHVuc2lnbmVkIGludCBpID0gMDsKKyAgICBzcnRwX3Nlc3Npb25fa2V5c190ICpzZXNzaW9uX2tleXMgPSBOVUxMOworICAgIGNvbnN0IHNydHBfc2Vzc2lvbl9rZXlzX3QgKnRlbXBsYXRlX3Nlc3Npb25fa2V5cyA9IE5VTEw7CiAKLSAgZGVidWdfcHJpbnQobW9kX3NydHAsICJjbG9uaW5nIHN0cmVhbSAoU1NSQzogMHglMDh4KSIsIHNzcmMpOworICAgIGRlYnVnX3ByaW50KG1vZF9zcnRwLCAiY2xvbmluZyBzdHJlYW0gKFNTUkM6IDB4JTA4eCkiLCBudG9obChzc3JjKSk7CiAKLSAgLyogYWxsb2NhdGUgc3J0cCBzdHJlYW0gYW5kIHNldCBzdHJfcHRyICovCi0gIHN0ciA9IChzcnRwX3N0cmVhbV9jdHhfdCAqKSBjcnlwdG9fYWxsb2Moc2l6ZW9mKHNydHBfc3RyZWFtX2N0eF90KSk7Ci0gIGlmIChzdHIgPT0gTlVMTCkKLSAgICByZXR1cm4gZXJyX3N0YXR1c19hbGxvY19mYWlsOwotICAqc3RyX3B0ciA9IHN0cjsgIAorICAgIC8qIGFsbG9jYXRlIHNydHAgc3RyZWFtIGFuZCBzZXQgc3RyX3B0ciAqLworICAgIHN0ciA9IChzcnRwX3N0cmVhbV9jdHhfdCAqKXNydHBfY3J5cHRvX2FsbG9jKHNpemVvZihzcnRwX3N0cmVhbV9jdHhfdCkpOworICAgIGlmIChzdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19hbGxvY19mYWlsOworICAgICpzdHJfcHRyID0gc3RyOwogCi0gIC8qIHNldCBjaXBoZXIgYW5kIGF1dGggcG9pbnRlcnMgdG8gdGhvc2Ugb2YgdGhlIHRlbXBsYXRlICovCi0gIHN0ci0+cnRwX2NpcGhlciAgPSBzdHJlYW1fdGVtcGxhdGUtPnJ0cF9jaXBoZXI7Ci0gIHN0ci0+cnRwX2F1dGggICAgPSBzdHJlYW1fdGVtcGxhdGUtPnJ0cF9hdXRoOwotICBzdHItPnJ0Y3BfY2lwaGVyID0gc3RyZWFtX3RlbXBsYXRlLT5ydGNwX2NpcGhlcjsKLSAgc3RyLT5ydGNwX2F1dGggICA9IHN0cmVhbV90ZW1wbGF0ZS0+cnRjcF9hdXRoOworICAgIHN0ci0+bnVtX21hc3Rlcl9rZXlzID0gc3RyZWFtX3RlbXBsYXRlLT5udW1fbWFzdGVyX2tleXM7CisgICAgc3RyLT5zZXNzaW9uX2tleXMgPSAoc3J0cF9zZXNzaW9uX2tleXNfdCAqKXNydHBfY3J5cHRvX2FsbG9jKAorICAgICAgICBzaXplb2Yoc3J0cF9zZXNzaW9uX2tleXNfdCkgKiBzdHItPm51bV9tYXN0ZXJfa2V5cyk7CiAKLSAgLyogc2V0IGtleSBsaW1pdCB0byBwb2ludCB0byB0aGF0IG9mIHRoZSB0ZW1wbGF0ZSAqLwotICBzdGF0dXMgPSBrZXlfbGltaXRfY2xvbmUoc3RyZWFtX3RlbXBsYXRlLT5saW1pdCwgJnN0ci0+bGltaXQpOwotICBpZiAoc3RhdHVzKSAKLSAgICByZXR1cm4gc3RhdHVzOworICAgIGlmIChzdHItPnNlc3Npb25fa2V5cyA9PSBOVUxMKSB7CisgICAgICAgIHNydHBfc3RyZWFtX2RlYWxsb2MoKnN0cl9wdHIsIHN0cmVhbV90ZW1wbGF0ZSk7CisgICAgICAgICpzdHJfcHRyID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19hbGxvY19mYWlsOworICAgIH0KIAotICAvKiBpbml0aWFsaXplIHJlcGxheSBkYXRhYmFzZXMgKi8KLSAgcmRieF9pbml0KCZzdHItPnJ0cF9yZGJ4KTsKLSAgcmRiX2luaXQoJnN0ci0+cnRjcF9yZGIpOwotICAKLSAgLyogc2V0IHNzcmMgdG8gdGhhdCBwcm92aWRlZCAqLwotICBzdHItPnNzcmMgPSBzc3JjOworICAgIGZvciAoaSA9IDA7IGkgPCBzdHJlYW1fdGVtcGxhdGUtPm51bV9tYXN0ZXJfa2V5czsgaSsrKSB7CisgICAgICAgIHNlc3Npb25fa2V5cyA9ICZzdHItPnNlc3Npb25fa2V5c1tpXTsKKyAgICAgICAgdGVtcGxhdGVfc2Vzc2lvbl9rZXlzID0gJnN0cmVhbV90ZW1wbGF0ZS0+c2Vzc2lvbl9rZXlzW2ldOwogCi0gIC8qIHNldCBkaXJlY3Rpb24gYW5kIHNlY3VyaXR5IHNlcnZpY2VzICovCi0gIHN0ci0+ZGlyZWN0aW9uICAgICA9IHN0cmVhbV90ZW1wbGF0ZS0+ZGlyZWN0aW9uOwotICBzdHItPnJ0cF9zZXJ2aWNlcyAgPSBzdHJlYW1fdGVtcGxhdGUtPnJ0cF9zZXJ2aWNlczsKLSAgc3RyLT5ydGNwX3NlcnZpY2VzID0gc3RyZWFtX3RlbXBsYXRlLT5ydGNwX3NlcnZpY2VzOworICAgICAgICAvKiBzZXQgY2lwaGVyIGFuZCBhdXRoIHBvaW50ZXJzIHRvIHRob3NlIG9mIHRoZSB0ZW1wbGF0ZSAqLworICAgICAgICBzZXNzaW9uX2tleXMtPnJ0cF9jaXBoZXIgPSB0ZW1wbGF0ZV9zZXNzaW9uX2tleXMtPnJ0cF9jaXBoZXI7CisgICAgICAgIHNlc3Npb25fa2V5cy0+cnRwX2F1dGggPSB0ZW1wbGF0ZV9zZXNzaW9uX2tleXMtPnJ0cF9hdXRoOworICAgICAgICBzZXNzaW9uX2tleXMtPnJ0cF94dG5faGRyX2NpcGhlciA9CisgICAgICAgICAgICB0ZW1wbGF0ZV9zZXNzaW9uX2tleXMtPnJ0cF94dG5faGRyX2NpcGhlcjsKKyAgICAgICAgc2Vzc2lvbl9rZXlzLT5ydGNwX2NpcGhlciA9IHRlbXBsYXRlX3Nlc3Npb25fa2V5cy0+cnRjcF9jaXBoZXI7CisgICAgICAgIHNlc3Npb25fa2V5cy0+cnRjcF9hdXRoID0gdGVtcGxhdGVfc2Vzc2lvbl9rZXlzLT5ydGNwX2F1dGg7CisgICAgICAgIHNlc3Npb25fa2V5cy0+bWtpX3NpemUgPSB0ZW1wbGF0ZV9zZXNzaW9uX2tleXMtPm1raV9zaXplOwogCi0gIC8qIGRlZmVuc2l2ZSBjb2RpbmcgKi8KLSAgc3RyLT5uZXh0ID0gTlVMTDsKKyAgICAgICAgaWYgKHRlbXBsYXRlX3Nlc3Npb25fa2V5cy0+bWtpX3NpemUgPT0gMCkgeworICAgICAgICAgICAgc2Vzc2lvbl9rZXlzLT5ta2lfaWQgPSBOVUxMOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2Vzc2lvbl9rZXlzLT5ta2lfaWQgPQorICAgICAgICAgICAgICAgIHNydHBfY3J5cHRvX2FsbG9jKHRlbXBsYXRlX3Nlc3Npb25fa2V5cy0+bWtpX3NpemUpOwogCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOworICAgICAgICAgICAgaWYgKHNlc3Npb25fa2V5cy0+bWtpX2lkID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBzcnRwX3N0cmVhbV9kZWFsbG9jKCpzdHJfcHRyLCBzdHJlYW1fdGVtcGxhdGUpOworICAgICAgICAgICAgICAgICpzdHJfcHRyID0gTlVMTDsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2luaXRfZmFpbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lbWNweShzZXNzaW9uX2tleXMtPm1raV9pZCwgdGVtcGxhdGVfc2Vzc2lvbl9rZXlzLT5ta2lfaWQsCisgICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9rZXlzLT5ta2lfc2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgLyogQ29weSB0aGUgc2FsdCB2YWx1ZXMgKi8KKyAgICAgICAgbWVtY3B5KHNlc3Npb25fa2V5cy0+c2FsdCwgdGVtcGxhdGVfc2Vzc2lvbl9rZXlzLT5zYWx0LAorICAgICAgICAgICAgICAgU1JUUF9BRUFEX1NBTFRfTEVOKTsKKyAgICAgICAgbWVtY3B5KHNlc3Npb25fa2V5cy0+Y19zYWx0LCB0ZW1wbGF0ZV9zZXNzaW9uX2tleXMtPmNfc2FsdCwKKyAgICAgICAgICAgICAgIFNSVFBfQUVBRF9TQUxUX0xFTik7CisKKyAgICAgICAgLyogc2V0IGtleSBsaW1pdCB0byBwb2ludCB0byB0aGF0IG9mIHRoZSB0ZW1wbGF0ZSAqLworICAgICAgICBzdGF0dXMgPSBzcnRwX2tleV9saW1pdF9jbG9uZSh0ZW1wbGF0ZV9zZXNzaW9uX2tleXMtPmxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2Vzc2lvbl9rZXlzLT5saW1pdCk7CisgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgICAgIHNydHBfc3RyZWFtX2RlYWxsb2MoKnN0cl9wdHIsIHN0cmVhbV90ZW1wbGF0ZSk7CisgICAgICAgICAgICAqc3RyX3B0ciA9IE5VTEw7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisgICAgfQorCisgICAgLyogaW5pdGlhbGl6ZSByZXBsYXkgZGF0YWJhc2VzICovCisgICAgc3RhdHVzID0gc3J0cF9yZGJ4X2luaXQoCisgICAgICAgICZzdHItPnJ0cF9yZGJ4LCBzcnRwX3JkYnhfZ2V0X3dpbmRvd19zaXplKCZzdHJlYW1fdGVtcGxhdGUtPnJ0cF9yZGJ4KSk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICBzcnRwX3N0cmVhbV9kZWFsbG9jKCpzdHJfcHRyLCBzdHJlYW1fdGVtcGxhdGUpOworICAgICAgICAqc3RyX3B0ciA9IE5VTEw7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorICAgIHNydHBfcmRiX2luaXQoJnN0ci0+cnRjcF9yZGIpOworICAgIHN0ci0+YWxsb3dfcmVwZWF0X3R4ID0gc3RyZWFtX3RlbXBsYXRlLT5hbGxvd19yZXBlYXRfdHg7CisKKyAgICAvKiBzZXQgc3NyYyB0byB0aGF0IHByb3ZpZGVkICovCisgICAgc3RyLT5zc3JjID0gc3NyYzsKKworICAgIC8qIHJlc2V0IHBlbmRpbmcgUk9DICovCisgICAgc3RyLT5wZW5kaW5nX3JvYyA9IDA7CisKKyAgICAvKiBzZXQgZGlyZWN0aW9uIGFuZCBzZWN1cml0eSBzZXJ2aWNlcyAqLworICAgIHN0ci0+ZGlyZWN0aW9uID0gc3RyZWFtX3RlbXBsYXRlLT5kaXJlY3Rpb247CisgICAgc3RyLT5ydHBfc2VydmljZXMgPSBzdHJlYW1fdGVtcGxhdGUtPnJ0cF9zZXJ2aWNlczsKKyAgICBzdHItPnJ0Y3Bfc2VydmljZXMgPSBzdHJlYW1fdGVtcGxhdGUtPnJ0Y3Bfc2VydmljZXM7CisKKyAgICAvKiBzZXQgcG9pbnRlciB0byBFS1QgZGF0YSBhc3NvY2lhdGVkIHdpdGggc3RyZWFtICovCisgICAgc3RyLT5la3QgPSBzdHJlYW1fdGVtcGxhdGUtPmVrdDsKKworICAgIC8qIGNvcHkgaW5mb3JtYXRpb24gYWJvdXQgZXh0ZW5zaW9ucyBoZWFkZXIgZW5jcnlwdGlvbiAqLworICAgIHN0ci0+ZW5jX3h0bl9oZHIgPSBzdHJlYW1fdGVtcGxhdGUtPmVuY194dG5faGRyOworICAgIHN0ci0+ZW5jX3h0bl9oZHJfY291bnQgPSBzdHJlYW1fdGVtcGxhdGUtPmVuY194dG5faGRyX2NvdW50OworCisgICAgLyogZGVmZW5zaXZlIGNvZGluZyAqLworICAgIHN0ci0+bmV4dCA9IE5VTEw7CisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKIH0KIAotCiAvKgogICoga2V5IGRlcml2YXRpb24gZnVuY3Rpb25zLCBpbnRlcm5hbCB0byBsaWJTUlRQCiAgKgogICogc3J0cF9rZGZfdCBpcyBhIGtleSBkZXJpdmF0aW9uIGNvbnRleHQKICAqCi0gKiBzcnRwX2tkZl9pbml0KCZrZGYsIGspIGluaXRpYWxpemVzIGtkZiB3aXRoIHRoZSBrZXkgawotICogCisgKiBzcnRwX2tkZl9pbml0KCZrZGYsIGNpcGhlcl9pZCwgaywga2V5bGVuKSBpbml0aWFsaXplcyBrZGYgdG8gdXNlIGNpcGhlcgorICogZGVzY3JpYmVkIGJ5IGNpcGhlcl9pZCwgd2l0aCB0aGUgbWFzdGVyIGtleSBrIHdpdGggbGVuZ3RoIGluIG9jdGV0cyBrZXlsZW4uCisgKgogICogc3J0cF9rZGZfZ2VuZXJhdGUoJmtkZiwgbCwga2wsIGtleWxlbikgZGVyaXZlcyB0aGUga2V5CiAgKiBjb3JyZXNwb25kaW5nIHRvIGxhYmVsIGwgYW5kIHB1dHMgaXQgaW50byBrbDsgdGhlIGxlbmd0aAogICogb2YgdGhlIGtleSBpbiBvY3RldHMgaXMgcHJvdmlkZWQgYXMga2V5bGVuLiAgdGhpcyBmdW5jdGlvbgogICogc2hvdWxkIGJlIGNhbGxlZCBvbmNlIGZvciBlYWNoIHN1YmtleSB0aGF0IGlzIGRlcml2ZWQuCiAgKgotICogc3J0cF9rZGZfY2xlYXIoJmtkZikgemVyb2l6ZXMgdGhlIGtkZiBzdGF0ZQorICogc3J0cF9rZGZfY2xlYXIoJmtkZikgemVyb2l6ZXMgYW5kIGRlYWxsb2NhdGVzIHRoZSBrZGYgc3RhdGUKICAqLwogCiB0eXBlZGVmIGVudW0gewotICBsYWJlbF9ydHBfZW5jcnlwdGlvbiAgPSAweDAwLAotICBsYWJlbF9ydHBfbXNnX2F1dGggICAgPSAweDAxLAotICBsYWJlbF9ydHBfc2FsdCAgICAgICAgPSAweDAyLAotICBsYWJlbF9ydGNwX2VuY3J5cHRpb24gPSAweDAzLAotICBsYWJlbF9ydGNwX21zZ19hdXRoICAgPSAweDA0LAotICBsYWJlbF9ydGNwX3NhbHQgICAgICAgPSAweDA1CisgICAgbGFiZWxfcnRwX2VuY3J5cHRpb24gPSAweDAwLAorICAgIGxhYmVsX3J0cF9tc2dfYXV0aCA9IDB4MDEsCisgICAgbGFiZWxfcnRwX3NhbHQgPSAweDAyLAorICAgIGxhYmVsX3J0Y3BfZW5jcnlwdGlvbiA9IDB4MDMsCisgICAgbGFiZWxfcnRjcF9tc2dfYXV0aCA9IDB4MDQsCisgICAgbGFiZWxfcnRjcF9zYWx0ID0gMHgwNSwKKyAgICBsYWJlbF9ydHBfaGVhZGVyX2VuY3J5cHRpb24gPSAweDA2LAorICAgIGxhYmVsX3J0cF9oZWFkZXJfc2FsdCA9IDB4MDcKIH0gc3J0cF9wcmZfbGFiZWw7CiAKKyNkZWZpbmUgTUFYX1NSVFBfS0VZX0xFTiAyNTYKKworI2lmIGRlZmluZWQoT1BFTlNTTCkgJiYgZGVmaW5lZChPUEVOU1NMX0tERikKKyNkZWZpbmUgTUFYX1NSVFBfQUVTS0VZX0xFTiAzMgorI2RlZmluZSBNQVhfU1JUUF9TQUxUX0xFTiAxNAogCiAvKgogICogc3J0cF9rZGZfdCByZXByZXNlbnRzIGEga2V5IGRlcml2YXRpb24gZnVuY3Rpb24uICBUaGUgU1JUUAogICogZGVmYXVsdCBLREYgaXMgdGhlIG9ubHkgb25lIGltcGxlbWVudGVkIGF0IHByZXNlbnQuCiAgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgeyAKLSAgYWVzX2ljbV9jdHhfdCBjOyAgICAvKiBjaXBoZXIgdXNlZCBmb3Iga2V5IGRlcml2YXRpb24gICovICAKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1aW50OF90IG1hc3Rlcl9rZXlbTUFYX1NSVFBfQUVTS0VZX0xFTl07CisgICAgdWludDhfdCBtYXN0ZXJfc2FsdFtNQVhfU1JUUF9TQUxUX0xFTl07CisgICAgY29uc3QgRVZQX0NJUEhFUiAqZXZwOwogfSBzcnRwX2tkZl90OwogCi1lcnJfc3RhdHVzX3QKLXNydHBfa2RmX2luaXQoc3J0cF9rZGZfdCAqa2RmLCBjb25zdCBvY3RldF90IGtleVszMF0pIHsKK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2tkZl9pbml0KHNydHBfa2RmX3QgKmtkZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXlfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNhbHRfbGVuKQoreworICAgIG1lbXNldChrZGYsIDB4MCwgc2l6ZW9mKHNydHBfa2RmX3QpKTsKIAotICBhZXNfaWNtX2NvbnRleHRfaW5pdCgma2RmLT5jLCBrZXkpOworICAgIC8qIFRoZSBOVUxMIGNpcGhlciBoYXMgemVybyBrZXkgbGVuZ3RoICovCisgICAgaWYgKGtleV9sZW4gPT0gMCkKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKIAotICByZXR1cm4gZXJyX3N0YXR1c19vazsKKyAgICBpZiAoKGtleV9sZW4gPiBNQVhfU1JUUF9BRVNLRVlfTEVOKSB8fCAoc2FsdF9sZW4gPiBNQVhfU1JUUF9TQUxUX0xFTikpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisgICAgfQorICAgIHN3aXRjaCAoa2V5X2xlbikgeworICAgIGNhc2UgU1JUUF9BRVNfMjU2X0tFWVNJWkU6CisgICAgICAgIGtkZi0+ZXZwID0gRVZQX2Flc18yNTZfY3RyKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU1JUUF9BRVNfMTkyX0tFWVNJWkU6CisgICAgICAgIGtkZi0+ZXZwID0gRVZQX2Flc18xOTJfY3RyKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU1JUUF9BRVNfMTI4X0tFWVNJWkU6CisgICAgICAgIGtkZi0+ZXZwID0gRVZQX2Flc18xMjhfY3RyKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYmFkX3BhcmFtOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgbWVtY3B5KGtkZi0+bWFzdGVyX2tleSwga2V5LCBrZXlfbGVuKTsKKyAgICBtZW1jcHkoa2RmLT5tYXN0ZXJfc2FsdCwga2V5ICsga2V5X2xlbiwgc2FsdF9sZW4pOworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7CiB9CiAKLWVycl9zdGF0dXNfdAotc3J0cF9rZGZfZ2VuZXJhdGUoc3J0cF9rZGZfdCAqa2RmLCBzcnRwX3ByZl9sYWJlbCBsYWJlbCwKLQkJICBvY3RldF90ICprZXksIGludCBsZW5ndGgpIHsKK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2tkZl9nZW5lcmF0ZShzcnRwX2tkZl90ICprZGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9wcmZfbGFiZWwgbGFiZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW5ndGgpCit7CisgICAgaW50IHJldDsKIAotICB2MTI4X3Qgbm9uY2U7Ci0gIAotICAvKiBzZXQgZWlndGggb2N0ZXQgb2Ygbm9uY2UgdG8gPGxhYmVsPiwgc2V0IHRoZSByZXN0IG9mIGl0IHRvIHplcm8gKi8KLSAgdjEyOF9zZXRfdG9femVybygmbm9uY2UpOwotICBub25jZS5vY3RldFs3XSA9IGxhYmVsOwotIAotICBhZXNfaWNtX3NldF9pdigma2RmLT5jLCAmbm9uY2UpOyAgCi0gIAotICAvKiBnZW5lcmF0ZSBrZXlzdHJlYW0gb3V0cHV0ICovCi0gIGFlc19pY21fb3V0cHV0KCZrZGYtPmMsIGtleSwgbGVuZ3RoKTsKKyAgICAvKiBUaGUgTlVMTCBjaXBoZXIgd2lsbCBub3QgaGF2ZSBhbiBFVlAgKi8KKyAgICBpZiAoIWtkZi0+ZXZwKQorICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOworICAgIG9jdGV0X3N0cmluZ19zZXRfdG9femVybyhrZXksIGxlbmd0aCk7CiAKLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7CisgICAgLyoKKyAgICAgKiBJbnZva2UgdGhlIE9wZW5TU0wgU1JUUCBLREYgZnVuY3Rpb24KKyAgICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiBPcGVuU1NMIGlzIGluIEZJUFMgbW9kZSBhbmQgRklQCisgICAgICogY29tcGxpYW5jZSBpcyByZXF1aXJlZCBmb3IgU1JUUC4KKyAgICAgKi8KKyAgICByZXQgPSBrZGZfc3J0cChrZGYtPmV2cCwgKGNoYXIgKikma2RmLT5tYXN0ZXJfa2V5LAorICAgICAgICAgICAgICAgICAgIChjaGFyICopJmtkZi0+bWFzdGVyX3NhbHQsIE5VTEwsIE5VTEwsIGxhYmVsLCAoY2hhciAqKWtleSk7CisgICAgaWYgKHJldCA9PSAtMSkgeworICAgICAgICByZXR1cm4gKHNydHBfZXJyX3N0YXR1c19hbGdvX2ZhaWwpOworICAgIH0KKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7CiB9CiAKLWVycl9zdGF0dXNfdAotc3J0cF9rZGZfY2xlYXIoc3J0cF9rZGZfdCAqa2RmKSB7Ci0gIAotICAvKiB6ZXJvaXplIGFlcyBjb250ZXh0ICovCi0gIG9jdGV0X3N0cmluZ19zZXRfdG9femVybygob2N0ZXRfdCAqKWtkZiwgc2l6ZW9mKHNydHBfa2RmX3QpKTsKK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2tkZl9jbGVhcihzcnRwX2tkZl90ICprZGYpCit7CisgICAgb2N0ZXRfc3RyaW5nX3NldF90b196ZXJvKGtkZi0+bWFzdGVyX2tleSwgTUFYX1NSVFBfQUVTS0VZX0xFTik7CisgICAgb2N0ZXRfc3RyaW5nX3NldF90b196ZXJvKGtkZi0+bWFzdGVyX3NhbHQsIE1BWF9TUlRQX1NBTFRfTEVOKTsKKyAgICBrZGYtPmV2cCA9IE5VTEw7CiAKLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7ICAKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOworfQorCisjZWxzZSAgLyogaWYgT1BFTlNTTF9LREYgKi8KKworLyoKKyAqIHNydHBfa2RmX3QgcmVwcmVzZW50cyBhIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uLiAgVGhlIFNSVFAKKyAqIGRlZmF1bHQgS0RGIGlzIHRoZSBvbmx5IG9uZSBpbXBsZW1lbnRlZCBhdCBwcmVzZW50LgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgc3J0cF9jaXBoZXJfdCAqY2lwaGVyOyAvKiBjaXBoZXIgdXNlZCBmb3Iga2V5IGRlcml2YXRpb24gICovCit9IHNydHBfa2RmX3Q7CisKK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2tkZl9pbml0KHNydHBfa2RmX3QgKmtkZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXlfbGVuKQoreworICAgIHNydHBfY2lwaGVyX3R5cGVfaWRfdCBjaXBoZXJfaWQ7CisgICAgc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdDsKKworICAgIHN3aXRjaCAoa2V5X2xlbikgeworICAgIGNhc2UgU1JUUF9BRVNfSUNNXzI1Nl9LRVlfTEVOX1dTQUxUOgorICAgICAgICBjaXBoZXJfaWQgPSBTUlRQX0FFU19JQ01fMjU2OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNSVFBfQUVTX0lDTV8xOTJfS0VZX0xFTl9XU0FMVDoKKyAgICAgICAgY2lwaGVyX2lkID0gU1JUUF9BRVNfSUNNXzE5MjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTUlRQX0FFU19JQ01fMTI4X0tFWV9MRU5fV1NBTFQ6CisgICAgICAgIGNpcGhlcl9pZCA9IFNSVFBfQUVTX0lDTV8xMjg7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYmFkX3BhcmFtOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzdGF0ID0gc3J0cF9jcnlwdG9fa2VybmVsX2FsbG9jX2NpcGhlcihjaXBoZXJfaWQsICZrZGYtPmNpcGhlciwga2V5X2xlbiwgMCk7CisgICAgaWYgKHN0YXQpCisgICAgICAgIHJldHVybiBzdGF0OworCisgICAgc3RhdCA9IHNydHBfY2lwaGVyX2luaXQoa2RmLT5jaXBoZXIsIGtleSk7CisgICAgaWYgKHN0YXQpIHsKKyAgICAgICAgc3J0cF9jaXBoZXJfZGVhbGxvYyhrZGYtPmNpcGhlcik7CisgICAgICAgIHJldHVybiBzdGF0OworICAgIH0KKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOworfQorCitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9rZGZfZ2VuZXJhdGUoc3J0cF9rZGZfdCAqa2RmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfcHJmX2xhYmVsIGxhYmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoKQoreworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKKyAgICB2MTI4X3Qgbm9uY2U7CisKKyAgICAvKiBzZXQgZWlndGggb2N0ZXQgb2Ygbm9uY2UgdG8gPGxhYmVsPiwgc2V0IHRoZSByZXN0IG9mIGl0IHRvIHplcm8gKi8KKyAgICB2MTI4X3NldF90b196ZXJvKCZub25jZSk7CisgICAgbm9uY2UudjhbN10gPSBsYWJlbDsKKworICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX3NldF9pdihrZGYtPmNpcGhlciwgKHVpbnQ4X3QgKikmbm9uY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfZGlyZWN0aW9uX2VuY3J5cHQpOworICAgIGlmIChzdGF0dXMpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICAvKiBnZW5lcmF0ZSBrZXlzdHJlYW0gb3V0cHV0ICovCisgICAgb2N0ZXRfc3RyaW5nX3NldF90b196ZXJvKGtleSwgbGVuZ3RoKTsKKyAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9lbmNyeXB0KGtkZi0+Y2lwaGVyLCBrZXksICZsZW5ndGgpOworICAgIGlmIChzdGF0dXMpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOworfQorCitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9rZGZfY2xlYXIoc3J0cF9rZGZfdCAqa2RmKQoreworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKKyAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9kZWFsbG9jKGtkZi0+Y2lwaGVyKTsKKyAgICBpZiAoc3RhdHVzKQorICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIGtkZi0+Y2lwaGVyID0gTlVMTDsKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOworfQorI2VuZGlmIC8qIGVsc2UgT1BFTlNTTF9LREYgKi8KKworLyoKKyAqICBlbmQgb2Yga2V5IGRlcml2YXRpb24gZnVuY3Rpb25zCisgKi8KKworLyogR2V0IHRoZSBiYXNlIGtleSBsZW5ndGggY29ycmVzcG9uZGluZyB0byBhIGdpdmVuIGNvbWJpbmVkIGtleStzYWx0CisgKiBsZW5ndGggZm9yIHRoZSBnaXZlbiBjaXBoZXIuCisgKiBUT0RPOiBrZXkgYW5kIHNhbHQgbGVuZ3RocyBzaG91bGQgYmUgc2VwYXJhdGUgZmllbGRzIGluIHRoZSBwb2xpY3kuICAqLworc3RhdGljIGlubGluZSBpbnQgYmFzZV9rZXlfbGVuZ3RoKGNvbnN0IHNydHBfY2lwaGVyX3R5cGVfdCAqY2lwaGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXlfbGVuZ3RoKQoreworICAgIHN3aXRjaCAoY2lwaGVyLT5pZCkgeworICAgIGNhc2UgU1JUUF9BRVNfSUNNXzEyODoKKyAgICBjYXNlIFNSVFBfQUVTX0lDTV8xOTI6CisgICAgY2FzZSBTUlRQX0FFU19JQ01fMjU2OgorICAgICAgICAvKiBUaGUgbGVnYWN5IG1vZGVzIGFyZSBkZXJpdmVkIGZyb20KKyAgICAgICAgICogdGhlIGNvbmZpZ3VyZWQga2V5IGxlbmd0aCBvbiB0aGUgcG9saWN5ICovCisgICAgICAgIHJldHVybiBrZXlfbGVuZ3RoIC0gU1JUUF9TQUxUX0xFTjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTUlRQX0FFU19HQ01fMTI4OgorICAgICAgICByZXR1cm4ga2V5X2xlbmd0aCAtIFNSVFBfQUVBRF9TQUxUX0xFTjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTUlRQX0FFU19HQ01fMjU2OgorICAgICAgICByZXR1cm4ga2V5X2xlbmd0aCAtIFNSVFBfQUVBRF9TQUxUX0xFTjsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGtleV9sZW5ndGg7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordW5zaWduZWQgaW50IHNydHBfdmFsaWRhdGVfcG9saWN5X21hc3Rlcl9rZXlzKGNvbnN0IHNydHBfcG9saWN5X3QgKnBvbGljeSkKK3sKKyAgICB1bnNpZ25lZCBsb25nIGkgPSAwOworCisgICAgaWYgKHBvbGljeS0+a2V5ID09IE5VTEwpIHsKKyAgICAgICAgaWYgKHBvbGljeS0+bnVtX21hc3Rlcl9rZXlzIDw9IDApCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBpZiAocG9saWN5LT5udW1fbWFzdGVyX2tleXMgPiBTUlRQX01BWF9OVU1fTUFTVEVSX0tFWVMpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcG9saWN5LT5udW1fbWFzdGVyX2tleXM7IGkrKykgeworICAgICAgICAgICAgaWYgKHBvbGljeS0+a2V5c1tpXS0+a2V5ID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBpZiAocG9saWN5LT5rZXlzW2ldLT5ta2lfc2l6ZSA+IFNSVFBfTUFYX01LSV9MRU4pCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMTsKK30KKworc3J0cF9zZXNzaW9uX2tleXNfdCAqc3J0cF9nZXRfc2Vzc2lvbl9rZXlzX3dpdGhfbWtpX2luZGV4KAorICAgIHNydHBfc3RyZWFtX2N0eF90ICpzdHJlYW0sCisgICAgdW5zaWduZWQgaW50IHVzZV9ta2ksCisgICAgdW5zaWduZWQgaW50IG1raV9pbmRleCkKK3sKKyAgICBpZiAodXNlX21raSkgeworICAgICAgICBpZiAobWtpX2luZGV4ID49IHN0cmVhbS0+bnVtX21hc3Rlcl9rZXlzKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gJnN0cmVhbS0+c2Vzc2lvbl9rZXlzW21raV9pbmRleF07CisgICAgfQorCisgICAgcmV0dXJuICZzdHJlYW0tPnNlc3Npb25fa2V5c1swXTsKK30KKwordW5zaWduZWQgaW50IHNydHBfaW5qZWN0X21raSh1aW50OF90ICpta2lfdGFnX2xvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX3Nlc3Npb25fa2V5c190ICpzZXNzaW9uX2tleXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB1c2VfbWtpKQoreworICAgIHVuc2lnbmVkIGludCBta2lfc2l6ZSA9IDA7CisKKyAgICBpZiAodXNlX21raSkgeworICAgICAgICBta2lfc2l6ZSA9IHNlc3Npb25fa2V5cy0+bWtpX3NpemU7CisKKyAgICAgICAgaWYgKG1raV9zaXplICE9IDApIHsKKyAgICAgICAgICAgIC8vIFdyaXRlIE1LSSBpbnRvIG1lbW9yeQorICAgICAgICAgICAgbWVtY3B5KG1raV90YWdfbG9jYXRpb24sIHNlc3Npb25fa2V5cy0+bWtpX2lkLCBta2lfc2l6ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbWtpX3NpemU7Cit9CisKK3NydHBfZXJyX3N0YXR1c190IHNydHBfc3RyZWFtX2luaXRfYWxsX21hc3Rlcl9rZXlzKAorICAgIHNydHBfc3RyZWFtX2N0eF90ICpzcnRwLAorICAgIHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICBzcnRwX21hc3Rlcl9rZXlfdCAqKmtleXMsCisgICAgY29uc3QgdW5zaWduZWQgaW50IG1heF9tYXN0ZXJfa2V5cykKK3sKKyAgICB1bnNpZ25lZCBpbnQgaSA9IDA7CisgICAgc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdHVzID0gc3J0cF9lcnJfc3RhdHVzX29rOworICAgIHNydHBfbWFzdGVyX2tleV90IHNpbmdsZV9tYXN0ZXJfa2V5OworCisgICAgaWYgKGtleSAhPSBOVUxMKSB7CisgICAgICAgIHNydHAtPm51bV9tYXN0ZXJfa2V5cyA9IDE7CisgICAgICAgIHNpbmdsZV9tYXN0ZXJfa2V5LmtleSA9IGtleTsKKyAgICAgICAgc2luZ2xlX21hc3Rlcl9rZXkubWtpX2lkID0gTlVMTDsKKyAgICAgICAgc2luZ2xlX21hc3Rlcl9rZXkubWtpX3NpemUgPSAwOworICAgICAgICBzdGF0dXMgPSBzcnRwX3N0cmVhbV9pbml0X2tleXMoc3J0cCwgJnNpbmdsZV9tYXN0ZXJfa2V5LCAwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzcnRwLT5udW1fbWFzdGVyX2tleXMgPSBtYXhfbWFzdGVyX2tleXM7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHNydHAtPm51bV9tYXN0ZXJfa2V5cyAmJiBpIDwgU1JUUF9NQVhfTlVNX01BU1RFUl9LRVlTOworICAgICAgICAgICAgIGkrKykgeworICAgICAgICAgICAgc3RhdHVzID0gc3J0cF9zdHJlYW1faW5pdF9rZXlzKHNydHAsIGtleXNbaV0sIGkpOworCisgICAgICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3NydHBfZXJyX3N0YXR1c190IHNydHBfc3RyZWFtX2luaXRfa2V5cyhzcnRwX3N0cmVhbV9jdHhfdCAqc3J0cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX21hc3Rlcl9rZXlfdCAqbWFzdGVyX2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgY3VycmVudF9ta2lfaW5kZXgpCit7CisgICAgc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdDsKKyAgICBzcnRwX2tkZl90IGtkZjsKKyAgICB1aW50OF90IHRtcF9rZXlbTUFYX1NSVFBfS0VZX0xFTl07CisgICAgaW50IGtkZl9rZXlsZW4gPSAzMCwgcnRwX2tleWxlbiwgcnRjcF9rZXlsZW47CisgICAgaW50IHJ0cF9iYXNlX2tleV9sZW4sIHJ0cF9zYWx0X2xlbjsKKyAgICBpbnQgcnRjcF9iYXNlX2tleV9sZW4sIHJ0Y3Bfc2FsdF9sZW47CisgICAgc3J0cF9zZXNzaW9uX2tleXNfdCAqc2Vzc2lvbl9rZXlzID0gTlVMTDsKKyAgICB1bnNpZ25lZCBjaGFyICprZXkgPSBtYXN0ZXJfa2V5LT5rZXk7CisKKyAgICAvKiBJZiBSVFAgb3IgUlRDUCBoYXZlIGEga2V5IGxlbmd0aCA+IEFFUy0xMjgsIGFzc3VtZSBtYXRjaGluZyBrZGYuICovCisgICAgLyogVE9ETzoga2RmIGFsZ29yaXRobSwgbWFzdGVyIGtleSBsZW5ndGgsIGFuZCBtYXN0ZXIgc2FsdCBsZW5ndGggc2hvdWxkCisgICAgICogYmUgcGFydCBvZiBzcnRwX3BvbGljeV90LgorICAgICovCisgICAgc2Vzc2lvbl9rZXlzID0gJnNydHAtPnNlc3Npb25fa2V5c1tjdXJyZW50X21raV9pbmRleF07CisKKy8qIGluaXRpYWxpemUga2V5IGxpbWl0IHRvIG1heGltdW0gdmFsdWUgKi8KKyNpZmRlZiBOT182NEJJVF9NQVRICisgICAgeworICAgICAgICB1aW50NjRfdCB0ZW1wOworICAgICAgICB0ZW1wID0gbWFrZTY0KFVJTlRfTUFYLCBVSU5UX01BWCk7CisgICAgICAgIHNydHBfa2V5X2xpbWl0X3NldChzZXNzaW9uX2tleXMtPmxpbWl0LCB0ZW1wKTsKKyAgICB9CisjZWxzZQorICAgIHNydHBfa2V5X2xpbWl0X3NldChzZXNzaW9uX2tleXMtPmxpbWl0LCAweGZmZmZmZmZmZmZmZkxMKTsKKyNlbmRpZgorCisgICAgaWYgKG1hc3Rlcl9rZXktPm1raV9zaXplICE9IDApIHsKKyAgICAgICAgc2Vzc2lvbl9rZXlzLT5ta2lfaWQgPSBzcnRwX2NyeXB0b19hbGxvYyhtYXN0ZXJfa2V5LT5ta2lfc2l6ZSk7CisKKyAgICAgICAgaWYgKHNlc3Npb25fa2V5cy0+bWtpX2lkID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfaW5pdF9mYWlsOworICAgICAgICB9CisgICAgICAgIG1lbWNweShzZXNzaW9uX2tleXMtPm1raV9pZCwgbWFzdGVyX2tleS0+bWtpX2lkLCBtYXN0ZXJfa2V5LT5ta2lfc2l6ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2Vzc2lvbl9rZXlzLT5ta2lfaWQgPSBOVUxMOworICAgIH0KKworICAgIHNlc3Npb25fa2V5cy0+bWtpX3NpemUgPSBtYXN0ZXJfa2V5LT5ta2lfc2l6ZTsKKworICAgIHJ0cF9rZXlsZW4gPSBzcnRwX2NpcGhlcl9nZXRfa2V5X2xlbmd0aChzZXNzaW9uX2tleXMtPnJ0cF9jaXBoZXIpOworICAgIHJ0Y3Bfa2V5bGVuID0gc3J0cF9jaXBoZXJfZ2V0X2tleV9sZW5ndGgoc2Vzc2lvbl9rZXlzLT5ydGNwX2NpcGhlcik7CisgICAgcnRwX2Jhc2Vfa2V5X2xlbiA9CisgICAgICAgIGJhc2Vfa2V5X2xlbmd0aChzZXNzaW9uX2tleXMtPnJ0cF9jaXBoZXItPnR5cGUsIHJ0cF9rZXlsZW4pOworICAgIHJ0cF9zYWx0X2xlbiA9IHJ0cF9rZXlsZW4gLSBydHBfYmFzZV9rZXlfbGVuOworCisgICAgaWYgKHJ0cF9rZXlsZW4gPiBrZGZfa2V5bGVuKSB7CisgICAgICAgIGtkZl9rZXlsZW4gPSA0NjsgLyogQUVTLUNUUiBtb2RlIGlzIGFsd2F5cyB1c2VkIGZvciBLREYgKi8KKyAgICB9CisKKyAgICBpZiAocnRjcF9rZXlsZW4gPiBrZGZfa2V5bGVuKSB7CisgICAgICAgIGtkZl9rZXlsZW4gPSA0NjsgLyogQUVTLUNUUiBtb2RlIGlzIGFsd2F5cyB1c2VkIGZvciBLREYgKi8KKyAgICB9CisKKyAgICBkZWJ1Z19wcmludChtb2Rfc3J0cCwgInNydHAga2V5IGxlbjogJWQiLCBydHBfa2V5bGVuKTsKKyAgICBkZWJ1Z19wcmludChtb2Rfc3J0cCwgInNydGNwIGtleSBsZW46ICVkIiwgcnRjcF9rZXlsZW4pOworICAgIGRlYnVnX3ByaW50KG1vZF9zcnRwLCAiYmFzZSBrZXkgbGVuOiAlZCIsIHJ0cF9iYXNlX2tleV9sZW4pOworICAgIGRlYnVnX3ByaW50KG1vZF9zcnRwLCAia2RmIGtleSBsZW46ICVkIiwga2RmX2tleWxlbik7CisgICAgZGVidWdfcHJpbnQobW9kX3NydHAsICJydHAgc2FsdCBsZW46ICVkIiwgcnRwX3NhbHRfbGVuKTsKKworICAgIC8qCisgICAgICogTWFrZSBzdXJlIHRoZSBrZXkgZ2l2ZW4gdG8gdXMgaXMgJ3plcm8nIGFwcGVuZGVkLiAgR0NNCisgICAgICogbW9kZSB1c2VzIGEgc2hvcnRlciBtYXN0ZXIgU0FMVCAoOTYgYml0cyksIGJ1dCBzdGlsbCByZWxpZXMgb24KKyAgICAgKiB0aGUgbGVnYWN5IENUUiBtb2RlIEtERiwgd2hpY2ggdXNlcyBhIDExMiBiaXQgbWFzdGVyIFNBTFQuCisgICAgICovCisgICAgbWVtc2V0KHRtcF9rZXksIDB4MCwgTUFYX1NSVFBfS0VZX0xFTik7CisgICAgbWVtY3B5KHRtcF9rZXksIGtleSwgKHJ0cF9iYXNlX2tleV9sZW4gKyBydHBfc2FsdF9sZW4pKTsKKworLyogaW5pdGlhbGl6ZSBLREYgc3RhdGUgICAgICovCisjaWYgZGVmaW5lZChPUEVOU1NMKSAmJiBkZWZpbmVkKE9QRU5TU0xfS0RGKQorICAgIHN0YXQgPSBzcnRwX2tkZl9pbml0KCZrZGYsIChjb25zdCB1aW50OF90ICopdG1wX2tleSwgcnRwX2Jhc2Vfa2V5X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBydHBfc2FsdF9sZW4pOworI2Vsc2UKKyAgICBzdGF0ID0gc3J0cF9rZGZfaW5pdCgma2RmLCAoY29uc3QgdWludDhfdCAqKXRtcF9rZXksIGtkZl9rZXlsZW4pOworI2VuZGlmCisgICAgaWYgKHN0YXQpIHsKKyAgICAgICAgLyogemVyb2l6ZSB0ZW1wIGJ1ZmZlciAqLworICAgICAgICBvY3RldF9zdHJpbmdfc2V0X3RvX3plcm8odG1wX2tleSwgTUFYX1NSVFBfS0VZX0xFTik7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfaW5pdF9mYWlsOworICAgIH0KKworICAgIC8qIGdlbmVyYXRlIGVuY3J5cHRpb24ga2V5ICAqLworICAgIHN0YXQgPSBzcnRwX2tkZl9nZW5lcmF0ZSgma2RmLCBsYWJlbF9ydHBfZW5jcnlwdGlvbiwgdG1wX2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRwX2Jhc2Vfa2V5X2xlbik7CisgICAgaWYgKHN0YXQpIHsKKyAgICAgICAgLyogemVyb2l6ZSB0ZW1wIGJ1ZmZlciAqLworICAgICAgICBvY3RldF9zdHJpbmdfc2V0X3RvX3plcm8odG1wX2tleSwgTUFYX1NSVFBfS0VZX0xFTik7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfaW5pdF9mYWlsOworICAgIH0KKyAgICBkZWJ1Z19wcmludChtb2Rfc3J0cCwgImNpcGhlciBrZXk6ICVzIiwKKyAgICAgICAgICAgICAgICBzcnRwX29jdGV0X3N0cmluZ19oZXhfc3RyaW5nKHRtcF9rZXksIHJ0cF9iYXNlX2tleV9sZW4pKTsKKworICAgIC8qCisgICAgICogaWYgdGhlIGNpcGhlciBpbiB0aGUgc3J0cCBjb250ZXh0IHVzZXMgYSBzYWx0LCB0aGVuIHdlIG5lZWQKKyAgICAgKiB0byBnZW5lcmF0ZSB0aGUgc2FsdCB2YWx1ZQorICAgICAqLworICAgIGlmIChydHBfc2FsdF9sZW4gPiAwKSB7CisgICAgICAgIGRlYnVnX3ByaW50KG1vZF9zcnRwLCAiZm91bmQgcnRwX3NhbHRfbGVuID4gMCwgZ2VuZXJhdGluZyBzYWx0IiwgTlVMTCk7CisKKyAgICAgICAgLyogZ2VuZXJhdGUgZW5jcnlwdGlvbiBzYWx0LCBwdXQgYWZ0ZXIgZW5jcnlwdGlvbiBrZXkgKi8KKyAgICAgICAgc3RhdCA9IHNydHBfa2RmX2dlbmVyYXRlKCZrZGYsIGxhYmVsX3J0cF9zYWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wX2tleSArIHJ0cF9iYXNlX2tleV9sZW4sIHJ0cF9zYWx0X2xlbik7CisgICAgICAgIGlmIChzdGF0KSB7CisgICAgICAgICAgICAvKiB6ZXJvaXplIHRlbXAgYnVmZmVyICovCisgICAgICAgICAgICBvY3RldF9zdHJpbmdfc2V0X3RvX3plcm8odG1wX2tleSwgTUFYX1NSVFBfS0VZX0xFTik7CisgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2luaXRfZmFpbDsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkoc2Vzc2lvbl9rZXlzLT5zYWx0LCB0bXBfa2V5ICsgcnRwX2Jhc2Vfa2V5X2xlbiwKKyAgICAgICAgICAgICAgIFNSVFBfQUVBRF9TQUxUX0xFTik7CisgICAgfQorICAgIGlmIChydHBfc2FsdF9sZW4gPiAwKSB7CisgICAgICAgIGRlYnVnX3ByaW50KG1vZF9zcnRwLCAiY2lwaGVyIHNhbHQ6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZyh0bXBfa2V5ICsgcnRwX2Jhc2Vfa2V5X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydHBfc2FsdF9sZW4pKTsKKyAgICB9CisKKyAgICAvKiBpbml0aWFsaXplIGNpcGhlciAqLworICAgIHN0YXQgPSBzcnRwX2NpcGhlcl9pbml0KHNlc3Npb25fa2V5cy0+cnRwX2NpcGhlciwgdG1wX2tleSk7CisgICAgaWYgKHN0YXQpIHsKKyAgICAgICAgLyogemVyb2l6ZSB0ZW1wIGJ1ZmZlciAqLworICAgICAgICBvY3RldF9zdHJpbmdfc2V0X3RvX3plcm8odG1wX2tleSwgTUFYX1NSVFBfS0VZX0xFTik7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfaW5pdF9mYWlsOworICAgIH0KKworICAgIGlmIChzZXNzaW9uX2tleXMtPnJ0cF94dG5faGRyX2NpcGhlcikgeworICAgICAgICAvKiBnZW5lcmF0ZSBleHRlbnNpb25zIGhlYWRlciBlbmNyeXB0aW9uIGtleSAgKi8KKyAgICAgICAgaW50IHJ0cF94dG5faGRyX2tleWxlbjsKKyAgICAgICAgaW50IHJ0cF94dG5faGRyX2Jhc2Vfa2V5X2xlbjsKKyAgICAgICAgaW50IHJ0cF94dG5faGRyX3NhbHRfbGVuOworICAgICAgICBzcnRwX2tkZl90IHRtcF9rZGY7CisgICAgICAgIHNydHBfa2RmX3QgKnh0bl9oZHJfa2RmOworCisgICAgICAgIGlmIChzZXNzaW9uX2tleXMtPnJ0cF94dG5faGRyX2NpcGhlci0+dHlwZSAhPQorICAgICAgICAgICAgc2Vzc2lvbl9rZXlzLT5ydHBfY2lwaGVyLT50eXBlKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogV2l0aCBHQ00gY2lwaGVycywgdGhlIGhlYWRlciBleHRlbnNpb25zIGFyZSBzdGlsbCBlbmNyeXB0ZWQgdXNpbmcKKyAgICAgICAgICAgICAqIHRoZSBjb3JyZXNwb25kaW5nIElDTSBjaXBoZXIuCisgICAgICAgICAgICAgKiBTZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc3MTQjc2VjdGlvbi04LjMKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgdWludDhfdCB0bXBfeHRuX2hkcl9rZXlbTUFYX1NSVFBfS0VZX0xFTl07CisgICAgICAgICAgICBydHBfeHRuX2hkcl9rZXlsZW4gPQorICAgICAgICAgICAgICAgIHNydHBfY2lwaGVyX2dldF9rZXlfbGVuZ3RoKHNlc3Npb25fa2V5cy0+cnRwX3h0bl9oZHJfY2lwaGVyKTsKKyAgICAgICAgICAgIHJ0cF94dG5faGRyX2Jhc2Vfa2V5X2xlbiA9IGJhc2Vfa2V5X2xlbmd0aCgKKyAgICAgICAgICAgICAgICBzZXNzaW9uX2tleXMtPnJ0cF94dG5faGRyX2NpcGhlci0+dHlwZSwgcnRwX3h0bl9oZHJfa2V5bGVuKTsKKyAgICAgICAgICAgIHJ0cF94dG5faGRyX3NhbHRfbGVuID0KKyAgICAgICAgICAgICAgICBydHBfeHRuX2hkcl9rZXlsZW4gLSBydHBfeHRuX2hkcl9iYXNlX2tleV9sZW47CisgICAgICAgICAgICBpZiAocnRwX3h0bl9oZHJfc2FsdF9sZW4gPiBydHBfc2FsdF9sZW4pIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHNlc3Npb25fa2V5cy0+cnRwX2NpcGhlci0+dHlwZS0+aWQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFNSVFBfQUVTX0dDTV8xMjg6CisgICAgICAgICAgICAgICAgY2FzZSBTUlRQX0FFU19HQ01fMjU2OgorICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgKiBUaGUgc2hvcnRlciBHQ00gc2FsdCBpcyBwYWRkZWQgdG8gdGhlIHJlcXVpcmVkIElDTSBzYWx0CisgICAgICAgICAgICAgICAgICAgICAqIGxlbmd0aC4KKyAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIHJ0cF94dG5faGRyX3NhbHRfbGVuID0gcnRwX3NhbHRfbGVuOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAvKiB6ZXJvaXplIHRlbXAgYnVmZmVyICovCisgICAgICAgICAgICAgICAgICAgIG9jdGV0X3N0cmluZ19zZXRfdG9femVybyh0bXBfa2V5LCBNQVhfU1JUUF9LRVlfTEVOKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbWVtc2V0KHRtcF94dG5faGRyX2tleSwgMHgwLCBNQVhfU1JUUF9LRVlfTEVOKTsKKyAgICAgICAgICAgIG1lbWNweSh0bXBfeHRuX2hkcl9rZXksIGtleSwKKyAgICAgICAgICAgICAgICAgICAocnRwX3h0bl9oZHJfYmFzZV9rZXlfbGVuICsgcnRwX3h0bl9oZHJfc2FsdF9sZW4pKTsKKyAgICAgICAgICAgIHh0bl9oZHJfa2RmID0gJnRtcF9rZGY7CisKKy8qIGluaXRpYWxpemUgS0RGIHN0YXRlICovCisjaWYgZGVmaW5lZChPUEVOU1NMKSAmJiBkZWZpbmVkKE9QRU5TU0xfS0RGKQorICAgICAgICAgICAgc3RhdCA9CisgICAgICAgICAgICAgICAgc3J0cF9rZGZfaW5pdCh4dG5faGRyX2tkZiwgKGNvbnN0IHVpbnQ4X3QgKil0bXBfeHRuX2hkcl9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydHBfeHRuX2hkcl9iYXNlX2tleV9sZW4sIHJ0cF94dG5faGRyX3NhbHRfbGVuKTsKKyNlbHNlCisgICAgICAgICAgICBzdGF0ID0gc3J0cF9rZGZfaW5pdCh4dG5faGRyX2tkZiwgKGNvbnN0IHVpbnQ4X3QgKil0bXBfeHRuX2hkcl9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZGZfa2V5bGVuKTsKKyNlbmRpZgorICAgICAgICAgICAgb2N0ZXRfc3RyaW5nX3NldF90b196ZXJvKHRtcF94dG5faGRyX2tleSwgTUFYX1NSVFBfS0VZX0xFTik7CisgICAgICAgICAgICBpZiAoc3RhdCkgeworICAgICAgICAgICAgICAgIC8qIHplcm9pemUgdGVtcCBidWZmZXIgKi8KKyAgICAgICAgICAgICAgICBvY3RldF9zdHJpbmdfc2V0X3RvX3plcm8odG1wX2tleSwgTUFYX1NSVFBfS0VZX0xFTik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19pbml0X2ZhaWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBSZXVzZSBtYWluIEtERi4gKi8KKyAgICAgICAgICAgIHJ0cF94dG5faGRyX2tleWxlbiA9IHJ0cF9rZXlsZW47CisgICAgICAgICAgICBydHBfeHRuX2hkcl9iYXNlX2tleV9sZW4gPSBydHBfYmFzZV9rZXlfbGVuOworICAgICAgICAgICAgcnRwX3h0bl9oZHJfc2FsdF9sZW4gPSBydHBfc2FsdF9sZW47CisgICAgICAgICAgICB4dG5faGRyX2tkZiA9ICZrZGY7CisgICAgICAgIH0KKworICAgICAgICBzdGF0ID0gc3J0cF9rZGZfZ2VuZXJhdGUoeHRuX2hkcl9rZGYsIGxhYmVsX3J0cF9oZWFkZXJfZW5jcnlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcF9rZXksIHJ0cF94dG5faGRyX2Jhc2Vfa2V5X2xlbik7CisgICAgICAgIGlmIChzdGF0KSB7CisgICAgICAgICAgICAvKiB6ZXJvaXplIHRlbXAgYnVmZmVyICovCisgICAgICAgICAgICBvY3RldF9zdHJpbmdfc2V0X3RvX3plcm8odG1wX2tleSwgTUFYX1NSVFBfS0VZX0xFTik7CisgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2luaXRfZmFpbDsKKyAgICAgICAgfQorICAgICAgICBkZWJ1Z19wcmludCgKKyAgICAgICAgICAgIG1vZF9zcnRwLCAiZXh0ZW5zaW9ucyBjaXBoZXIga2V5OiAlcyIsCisgICAgICAgICAgICBzcnRwX29jdGV0X3N0cmluZ19oZXhfc3RyaW5nKHRtcF9rZXksIHJ0cF94dG5faGRyX2Jhc2Vfa2V5X2xlbikpOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlmIHRoZSBjaXBoZXIgaW4gdGhlIHNydHAgY29udGV4dCB1c2VzIGEgc2FsdCwgdGhlbiB3ZSBuZWVkCisgICAgICAgICAqIHRvIGdlbmVyYXRlIHRoZSBzYWx0IHZhbHVlCisgICAgICAgICAqLworICAgICAgICBpZiAocnRwX3h0bl9oZHJfc2FsdF9sZW4gPiAwKSB7CisgICAgICAgICAgICBkZWJ1Z19wcmludChtb2Rfc3J0cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJmb3VuZCBydHBfeHRuX2hkcl9zYWx0X2xlbiA+IDAsIGdlbmVyYXRpbmcgc2FsdCIsCisgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgICAgICAgICAgLyogZ2VuZXJhdGUgZW5jcnlwdGlvbiBzYWx0LCBwdXQgYWZ0ZXIgZW5jcnlwdGlvbiBrZXkgKi8KKyAgICAgICAgICAgIHN0YXQgPSBzcnRwX2tkZl9nZW5lcmF0ZSh4dG5faGRyX2tkZiwgbGFiZWxfcnRwX2hlYWRlcl9zYWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcF9rZXkgKyBydHBfeHRuX2hkcl9iYXNlX2tleV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRwX3h0bl9oZHJfc2FsdF9sZW4pOworICAgICAgICAgICAgaWYgKHN0YXQpIHsKKyAgICAgICAgICAgICAgICAvKiB6ZXJvaXplIHRlbXAgYnVmZmVyICovCisgICAgICAgICAgICAgICAgb2N0ZXRfc3RyaW5nX3NldF90b196ZXJvKHRtcF9rZXksIE1BWF9TUlRQX0tFWV9MRU4pOworICAgICAgICAgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfaW5pdF9mYWlsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChydHBfeHRuX2hkcl9zYWx0X2xlbiA+IDApIHsKKyAgICAgICAgICAgIGRlYnVnX3ByaW50KAorICAgICAgICAgICAgICAgIG1vZF9zcnRwLCAiZXh0ZW5zaW9ucyBjaXBoZXIgc2FsdDogJXMiLAorICAgICAgICAgICAgICAgIHNydHBfb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcodG1wX2tleSArIHJ0cF94dG5faGRyX2Jhc2Vfa2V5X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0cF94dG5faGRyX3NhbHRfbGVuKSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBpbml0aWFsaXplIGV4dGVuc2lvbnMgaGVhZGVyIGNpcGhlciAqLworICAgICAgICBzdGF0ID0gc3J0cF9jaXBoZXJfaW5pdChzZXNzaW9uX2tleXMtPnJ0cF94dG5faGRyX2NpcGhlciwgdG1wX2tleSk7CisgICAgICAgIGlmIChzdGF0KSB7CisgICAgICAgICAgICAvKiB6ZXJvaXplIHRlbXAgYnVmZmVyICovCisgICAgICAgICAgICBvY3RldF9zdHJpbmdfc2V0X3RvX3plcm8odG1wX2tleSwgTUFYX1NSVFBfS0VZX0xFTik7CisgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2luaXRfZmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh4dG5faGRyX2tkZiAhPSAma2RmKSB7CisgICAgICAgICAgICAvKiByZWxlYXNlIG1lbW9yeSBmb3IgY3VzdG9tIGhlYWRlciBleHRlbnNpb24gZW5jcnlwdGlvbiBrZGYgKi8KKyAgICAgICAgICAgIHN0YXQgPSBzcnRwX2tkZl9jbGVhcih4dG5faGRyX2tkZik7CisgICAgICAgICAgICBpZiAoc3RhdCkgeworICAgICAgICAgICAgICAgIC8qIHplcm9pemUgdGVtcCBidWZmZXIgKi8KKyAgICAgICAgICAgICAgICBvY3RldF9zdHJpbmdfc2V0X3RvX3plcm8odG1wX2tleSwgTUFYX1NSVFBfS0VZX0xFTik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19pbml0X2ZhaWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBnZW5lcmF0ZSBhdXRoZW50aWNhdGlvbiBrZXkgKi8KKyAgICBzdGF0ID0gc3J0cF9rZGZfZ2VuZXJhdGUoJmtkZiwgbGFiZWxfcnRwX21zZ19hdXRoLCB0bXBfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX2F1dGhfZ2V0X2tleV9sZW5ndGgoc2Vzc2lvbl9rZXlzLT5ydHBfYXV0aCkpOworICAgIGlmIChzdGF0KSB7CisgICAgICAgIC8qIHplcm9pemUgdGVtcCBidWZmZXIgKi8KKyAgICAgICAgb2N0ZXRfc3RyaW5nX3NldF90b196ZXJvKHRtcF9rZXksIE1BWF9TUlRQX0tFWV9MRU4pOworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2luaXRfZmFpbDsKKyAgICB9CisgICAgZGVidWdfcHJpbnQobW9kX3NydHAsICJhdXRoIGtleTogICAlcyIsCisgICAgICAgICAgICAgICAgc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZygKKyAgICAgICAgICAgICAgICAgICAgdG1wX2tleSwgc3J0cF9hdXRoX2dldF9rZXlfbGVuZ3RoKHNlc3Npb25fa2V5cy0+cnRwX2F1dGgpKSk7CisKKyAgICAvKiBpbml0aWFsaXplIGF1dGggZnVuY3Rpb24gKi8KKyAgICBzdGF0ID0gc3J0cF9hdXRoX2luaXQoc2Vzc2lvbl9rZXlzLT5ydHBfYXV0aCwgdG1wX2tleSk7CisgICAgaWYgKHN0YXQpIHsKKyAgICAgICAgLyogemVyb2l6ZSB0ZW1wIGJ1ZmZlciAqLworICAgICAgICBvY3RldF9zdHJpbmdfc2V0X3RvX3plcm8odG1wX2tleSwgTUFYX1NSVFBfS0VZX0xFTik7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfaW5pdF9mYWlsOworICAgIH0KKworICAgIC8qCisgICAgICogLi4ubm93IGluaXRpYWxpemUgU1JUQ1Aga2V5cworICAgICAqLworCisgICAgcnRjcF9iYXNlX2tleV9sZW4gPQorICAgICAgICBiYXNlX2tleV9sZW5ndGgoc2Vzc2lvbl9rZXlzLT5ydGNwX2NpcGhlci0+dHlwZSwgcnRjcF9rZXlsZW4pOworICAgIHJ0Y3Bfc2FsdF9sZW4gPSBydGNwX2tleWxlbiAtIHJ0Y3BfYmFzZV9rZXlfbGVuOworICAgIGRlYnVnX3ByaW50KG1vZF9zcnRwLCAicnRjcCBzYWx0IGxlbjogJWQiLCBydGNwX3NhbHRfbGVuKTsKKworICAgIC8qIGdlbmVyYXRlIGVuY3J5cHRpb24ga2V5ICAqLworICAgIHN0YXQgPSBzcnRwX2tkZl9nZW5lcmF0ZSgma2RmLCBsYWJlbF9ydGNwX2VuY3J5cHRpb24sIHRtcF9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0Y3BfYmFzZV9rZXlfbGVuKTsKKyAgICBpZiAoc3RhdCkgeworICAgICAgICAvKiB6ZXJvaXplIHRlbXAgYnVmZmVyICovCisgICAgICAgIG9jdGV0X3N0cmluZ19zZXRfdG9femVybyh0bXBfa2V5LCBNQVhfU1JUUF9LRVlfTEVOKTsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19pbml0X2ZhaWw7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBpZiB0aGUgY2lwaGVyIGluIHRoZSBzcnRwIGNvbnRleHQgdXNlcyBhIHNhbHQsIHRoZW4gd2UgbmVlZAorICAgICAqIHRvIGdlbmVyYXRlIHRoZSBzYWx0IHZhbHVlCisgICAgICovCisgICAgaWYgKHJ0Y3Bfc2FsdF9sZW4gPiAwKSB7CisgICAgICAgIGRlYnVnX3ByaW50KG1vZF9zcnRwLCAiZm91bmQgcnRjcF9zYWx0X2xlbiA+IDAsIGdlbmVyYXRpbmcgcnRjcCBzYWx0IiwKKyAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICAgICAgLyogZ2VuZXJhdGUgZW5jcnlwdGlvbiBzYWx0LCBwdXQgYWZ0ZXIgZW5jcnlwdGlvbiBrZXkgKi8KKyAgICAgICAgc3RhdCA9IHNydHBfa2RmX2dlbmVyYXRlKCZrZGYsIGxhYmVsX3J0Y3Bfc2FsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcF9rZXkgKyBydGNwX2Jhc2Vfa2V5X2xlbiwgcnRjcF9zYWx0X2xlbik7CisgICAgICAgIGlmIChzdGF0KSB7CisgICAgICAgICAgICAvKiB6ZXJvaXplIHRlbXAgYnVmZmVyICovCisgICAgICAgICAgICBvY3RldF9zdHJpbmdfc2V0X3RvX3plcm8odG1wX2tleSwgTUFYX1NSVFBfS0VZX0xFTik7CisgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2luaXRfZmFpbDsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkoc2Vzc2lvbl9rZXlzLT5jX3NhbHQsIHRtcF9rZXkgKyBydGNwX2Jhc2Vfa2V5X2xlbiwKKyAgICAgICAgICAgICAgIFNSVFBfQUVBRF9TQUxUX0xFTik7CisgICAgfQorICAgIGRlYnVnX3ByaW50KG1vZF9zcnRwLCAicnRjcCBjaXBoZXIga2V5OiAlcyIsCisgICAgICAgICAgICAgICAgc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZyh0bXBfa2V5LCBydGNwX2Jhc2Vfa2V5X2xlbikpOworICAgIGlmIChydGNwX3NhbHRfbGVuID4gMCkgeworICAgICAgICBkZWJ1Z19wcmludChtb2Rfc3J0cCwgInJ0Y3AgY2lwaGVyIHNhbHQ6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZyh0bXBfa2V5ICsgcnRjcF9iYXNlX2tleV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRjcF9zYWx0X2xlbikpOworICAgIH0KKworICAgIC8qIGluaXRpYWxpemUgY2lwaGVyICovCisgICAgc3RhdCA9IHNydHBfY2lwaGVyX2luaXQoc2Vzc2lvbl9rZXlzLT5ydGNwX2NpcGhlciwgdG1wX2tleSk7CisgICAgaWYgKHN0YXQpIHsKKyAgICAgICAgLyogemVyb2l6ZSB0ZW1wIGJ1ZmZlciAqLworICAgICAgICBvY3RldF9zdHJpbmdfc2V0X3RvX3plcm8odG1wX2tleSwgTUFYX1NSVFBfS0VZX0xFTik7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfaW5pdF9mYWlsOworICAgIH0KKworICAgIC8qIGdlbmVyYXRlIGF1dGhlbnRpY2F0aW9uIGtleSAqLworICAgIHN0YXQgPSBzcnRwX2tkZl9nZW5lcmF0ZSgma2RmLCBsYWJlbF9ydGNwX21zZ19hdXRoLCB0bXBfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX2F1dGhfZ2V0X2tleV9sZW5ndGgoc2Vzc2lvbl9rZXlzLT5ydGNwX2F1dGgpKTsKKyAgICBpZiAoc3RhdCkgeworICAgICAgICAvKiB6ZXJvaXplIHRlbXAgYnVmZmVyICovCisgICAgICAgIG9jdGV0X3N0cmluZ19zZXRfdG9femVybyh0bXBfa2V5LCBNQVhfU1JUUF9LRVlfTEVOKTsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19pbml0X2ZhaWw7CisgICAgfQorCisgICAgZGVidWdfcHJpbnQoCisgICAgICAgIG1vZF9zcnRwLCAicnRjcCBhdXRoIGtleTogICAlcyIsCisgICAgICAgIHNydHBfb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoCisgICAgICAgICAgICB0bXBfa2V5LCBzcnRwX2F1dGhfZ2V0X2tleV9sZW5ndGgoc2Vzc2lvbl9rZXlzLT5ydGNwX2F1dGgpKSk7CisKKyAgICAvKiBpbml0aWFsaXplIGF1dGggZnVuY3Rpb24gKi8KKyAgICBzdGF0ID0gc3J0cF9hdXRoX2luaXQoc2Vzc2lvbl9rZXlzLT5ydGNwX2F1dGgsIHRtcF9rZXkpOworICAgIGlmIChzdGF0KSB7CisgICAgICAgIC8qIHplcm9pemUgdGVtcCBidWZmZXIgKi8KKyAgICAgICAgb2N0ZXRfc3RyaW5nX3NldF90b196ZXJvKHRtcF9rZXksIE1BWF9TUlRQX0tFWV9MRU4pOworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2luaXRfZmFpbDsKKyAgICB9CisKKyAgICAvKiBjbGVhciBtZW1vcnkgdGhlbiByZXR1cm4gKi8KKyAgICBzdGF0ID0gc3J0cF9rZGZfY2xlYXIoJmtkZik7CisgICAgb2N0ZXRfc3RyaW5nX3NldF90b196ZXJvKHRtcF9rZXksIE1BWF9TUlRQX0tFWV9MRU4pOworICAgIGlmIChzdGF0KQorICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2luaXRfZmFpbDsKKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7Cit9CisKK3NydHBfZXJyX3N0YXR1c190IHNydHBfc3RyZWFtX2luaXQoc3J0cF9zdHJlYW1fY3R4X3QgKnNydHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNydHBfcG9saWN5X3QgKnApCit7CisgICAgc3J0cF9lcnJfc3RhdHVzX3QgZXJyOworCisgICAgZGVidWdfcHJpbnQobW9kX3NydHAsICJpbml0aWFsaXppbmcgc3RyZWFtIChTU1JDOiAweCUwOHgpIiwgcC0+c3NyYy52YWx1ZSk7CisKKyAgICAvKiBpbml0aWFsaXplIHJlcGxheSBkYXRhYmFzZSAqLworICAgIC8qCisgICAgICogd2luZG93IHNpemUgTVVTVCBiZSBhdCBsZWFzdCA2NC4gIE1BWSBiZSBsYXJnZXIuICBWYWx1ZXMgbW9yZSB0aGFuCisgICAgICogMl4xNSBhcmVuJ3QgbWVhbmluZ2Z1bCBkdWUgdG8gaG93IGV4dGVuZGVkIHNlcXVlbmNlIG51bWJlcnMgYXJlCisgICAgICogY2FsY3VsYXRlZC4KKyAgICAgKiBMZXQgYSB3aW5kb3cgc2l6ZSBvZiAwIGltcGx5IHRoZSBkZWZhdWx0IHZhbHVlLgorICAgICAqLworCisgICAgaWYgKHAtPndpbmRvd19zaXplICE9IDAgJiYKKyAgICAgICAgKHAtPndpbmRvd19zaXplIDwgNjQgfHwgcC0+d2luZG93X3NpemUgPj0gMHg4MDAwKSkKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisKKyAgICBpZiAocC0+d2luZG93X3NpemUgIT0gMCkKKyAgICAgICAgZXJyID0gc3J0cF9yZGJ4X2luaXQoJnNydHAtPnJ0cF9yZGJ4LCBwLT53aW5kb3dfc2l6ZSk7CisgICAgZWxzZQorICAgICAgICBlcnIgPSBzcnRwX3JkYnhfaW5pdCgmc3J0cC0+cnRwX3JkYngsIDEyOCk7CisgICAgaWYgKGVycikKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIC8qIHNldCB0aGUgU1NSQyB2YWx1ZSAqLworICAgIHNydHAtPnNzcmMgPSBodG9ubChwLT5zc3JjLnZhbHVlKTsKKworICAgIC8qIHJlc2V0IHBlbmRpbmcgUk9DICovCisgICAgc3J0cC0+cGVuZGluZ19yb2MgPSAwOworCisgICAgLyogc2V0IHRoZSBzZWN1cml0eSBzZXJ2aWNlIGZsYWdzICovCisgICAgc3J0cC0+cnRwX3NlcnZpY2VzID0gcC0+cnRwLnNlY19zZXJ2OworICAgIHNydHAtPnJ0Y3Bfc2VydmljZXMgPSBwLT5ydGNwLnNlY19zZXJ2OworCisgICAgLyoKKyAgICAgKiBzZXQgZGlyZWN0aW9uIHRvIHVua25vd24gLSB0aGlzIGZsYWcgZ2V0cyBjaGVja2VkIGluIHNydHBfcHJvdGVjdCgpLAorICAgICAqIHNydHBfdW5wcm90ZWN0KCksIHNydHBfcHJvdGVjdF9ydGNwKCksIGFuZCBzcnRwX3VucHJvdGVjdF9ydGNwKCksIGFuZAorICAgICAqIGdldHMgc2V0IGFwcHJvcHJpYXRlbHkgaWYgaXQgaXMgc2V0IHRvIHVua25vd24uCisgICAgICovCisgICAgc3J0cC0+ZGlyZWN0aW9uID0gZGlyX3Vua25vd247CisKKyAgICAvKiBpbml0aWFsaXplIFNSVENQIHJlcGxheSBkYXRhYmFzZSAqLworICAgIHNydHBfcmRiX2luaXQoJnNydHAtPnJ0Y3BfcmRiKTsKKworICAgIC8qIGluaXRpYWxpemUgYWxsb3dfcmVwZWF0X3R4ICovCisgICAgLyogZ3VhcmQgYWdhaW5zdCB1bmluaXRpYWxpemVkIG1lbW9yeTogYWxsb3cgb25seSAwIG9yIDEgaGVyZSAqLworICAgIGlmIChwLT5hbGxvd19yZXBlYXRfdHggIT0gMCAmJiBwLT5hbGxvd19yZXBlYXRfdHggIT0gMSkgeworICAgICAgICBzcnRwX3JkYnhfZGVhbGxvYygmc3J0cC0+cnRwX3JkYngpOworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbTsKKyAgICB9CisgICAgc3J0cC0+YWxsb3dfcmVwZWF0X3R4ID0gcC0+YWxsb3dfcmVwZWF0X3R4OworCisgICAgLyogREFNIC0gbm8gUlRDUCBrZXkgbGltaXQgYXQgcHJlc2VudCAqLworCisgICAgLyogaW5pdGlhbGl6ZSBrZXlzICovCisgICAgZXJyID0gc3J0cF9zdHJlYW1faW5pdF9hbGxfbWFzdGVyX2tleXMoc3J0cCwgcC0+a2V5LCBwLT5rZXlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPm51bV9tYXN0ZXJfa2V5cyk7CisgICAgaWYgKGVycikgeworICAgICAgICBzcnRwX3JkYnhfZGVhbGxvYygmc3J0cC0+cnRwX3JkYngpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIC8qCisgICAgICogaWYgRUtUIGlzIGluIHVzZSwgdGhlbiBpbml0aWFsaXplIHRoZSBFS1QgZGF0YSBhc3NvY2lhdGVkIHdpdGgKKyAgICAgKiB0aGUgc3RyZWFtCisgICAgICovCisgICAgZXJyID0gc3J0cF9la3Rfc3RyZWFtX2luaXRfZnJvbV9wb2xpY3koc3J0cC0+ZWt0LCBwLT5la3QpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgc3J0cF9yZGJ4X2RlYWxsb2MoJnNydHAtPnJ0cF9yZGJ4KTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQogCiAvKgotICogIGVuZCBvZiBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbnMgCisgKiBzcnRwX2V2ZW50X3JlcG9ydGVyIGlzIGFuIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gdGhhdCBtZXJlbHkKKyAqIHJlcG9ydHMgdGhlIGV2ZW50cyB0aGF0IGFyZSByZXBvcnRlZCBieSB0aGUgY2FsbGJhY2tzCiAgKi8KIAotI2RlZmluZSBNQVhfU1JUUF9LRVlfTEVOIDI1NgotCi0KLQotZXJyX3N0YXR1c190Ci1zcnRwX3N0cmVhbV9pbml0KHNydHBfc3RyZWFtX2N0eF90ICpzcnRwLCAKLQkJICBjb25zdCBzcnRwX3BvbGljeV90ICpwKSB7Ci0gICBlcnJfc3RhdHVzX3Qgc3RhdDsKLSAgIHNydHBfa2RmX3Qga2RmOwotICAgb2N0ZXRfdCB0bXBfa2V5W01BWF9TUlRQX0tFWV9MRU5dOwotICAgb2N0ZXRfdCAqa2V5ID0gcC0+a2V5OwotCi0gICBkZWJ1Z19wcmludChtb2Rfc3J0cCwgImluaXRpYWxpemluZyBzdHJlYW0gKFNTUkM6IDB4JTA4eCkiLCAKLQkgICAgICAgcC0+c3NyYy52YWx1ZSk7Ci0KLSAgIC8qIGluaXRpYWxpemUgcmVwbGF5IGRhdGFiYXNlICovCi0gICByZGJ4X2luaXQoJnNydHAtPnJ0cF9yZGJ4KTsKLQotICAgLyogaW5pdGlhbGl6ZSBrZXkgbGltaXQgdG8gbWF4aW11bSB2YWx1ZSAqLwotI2lmZGVmIE5PXzY0QklUX01BVEgKK3ZvaWQgc3J0cF9ldmVudF9yZXBvcnRlcihzcnRwX2V2ZW50X2RhdGFfdCAqZGF0YSkKIHsKLQl1aW50NjRfdCB0ZW1wOwotCXRlbXAgPSBtYWtlNjQoVUlOVF9NQVgsVUlOVF9NQVgpOwotCWtleV9saW1pdF9zZXQoc3J0cC0+bGltaXQsIHRlbXApOwotfQotI2Vsc2UKLSAgIGtleV9saW1pdF9zZXQoc3J0cC0+bGltaXQsIDB4ZmZmZmZmZmZmZmZmTEwpOwotI2VuZGlmCisgICAgc3J0cF9lcnJfcmVwb3J0KHNydHBfZXJyX2xldmVsX3dhcm5pbmcsICJzcnRwOiBpbiBzdHJlYW0gMHgleDogIiwKKyAgICAgICAgICAgICAgICAgICAgZGF0YS0+c3NyYyk7CiAKLSAgIC8qIHNldCB0aGUgU1NSQyB2YWx1ZSAqLwotICAgc3J0cC0+c3NyYyA9IGh0b25sKHAtPnNzcmMudmFsdWUpOwotCi0gICAvKiBzZXQgdGhlIHNlY3VyaXR5IHNlcnZpY2UgZmxhZ3MgKi8KLSAgIHNydHAtPnJ0cF9zZXJ2aWNlcyAgPSBwLT5ydHAuc2VjX3NlcnY7Ci0gICBzcnRwLT5ydGNwX3NlcnZpY2VzID0gcC0+cnRjcC5zZWNfc2VydjsKLQotICAgLyoKLSAgICAqIHNldCBkaXJlY3Rpb24gdG8gdW5rbm93biAtIHRoaXMgZmxhZyBnZXRzIGNoZWNrZWQgaW4gc3J0cF9wcm90ZWN0KCksCi0gICAgKiBzcnRwX3VucHJvdGVjdCgpLCBzcnRwX3Byb3RlY3RfcnRjcCgpLCBhbmQgc3J0cF91bnByb3RlY3RfcnRjcCgpLCBhbmQgCi0gICAgKiBnZXRzIHNldCBhcHByb3ByaWF0ZWx5IGlmIGl0IGlzIHNldCB0byB1bmtub3duLgotICAgICovCi0gICBzcnRwLT5kaXJlY3Rpb24gPSBkaXJfdW5rbm93bjsKLQotICAgLyogaW5pdGlhbGl6ZSBLREYgc3RhdGUgICAgICovCi0gICBzcnRwX2tkZl9pbml0KCZrZGYsIGtleSk7Ci0KLSAgIC8qIGdlbmVyYXRlIGVuY3J5cHRpb24ga2V5ICAqLwotICAgc3J0cF9rZGZfZ2VuZXJhdGUoJmtkZiwgbGFiZWxfcnRwX2VuY3J5cHRpb24sIAotCQkgICAgIHRtcF9rZXksIGNpcGhlcl9nZXRfa2V5X2xlbmd0aChzcnRwLT5ydHBfY2lwaGVyKSk7Ci0gICAvKiAKLSAgICAqIGlmIHRoZSBjaXBoZXIgaW4gdGhlIHNydHAgY29udGV4dCBpcyBhZXNfaWNtLCB0aGVuIHdlIG5lZWQKLSAgICAqIHRvIGdlbmVyYXRlIHRoZSBzYWx0IHZhbHVlCi0gICAgKi8KLSAgIGlmIChzcnRwLT5ydHBfY2lwaGVyLT50eXBlID09ICZhZXNfaWNtKSB7Ci0JICAgLyogRklYISEhIHRoaXMgaXMgcmVhbGx5IHRoZSBjaXBoZXIga2V5IGxlbmd0aDsgcmVzdCBpcyBzYWx0ICovCi0gICAgIGludCBiYXNlX2tleV9sZW4gPSAxNjsKLSAgICAgaW50IHNhbHRfbGVuID0gY2lwaGVyX2dldF9rZXlfbGVuZ3RoKHNydHAtPnJ0cF9jaXBoZXIpIC0gYmFzZV9rZXlfbGVuOwotCi0gICAgIGRlYnVnX3ByaW50KG1vZF9zcnRwLCAiZm91bmQgYWVzX2ljbSwgZ2VuZXJhdGluZyBzYWx0IiwgTlVMTCk7Ci0KLSAgICAgLyogZ2VuZXJhdGUgZW5jcnlwdGlvbiBzYWx0LCBwdXQgYWZ0ZXIgZW5jcnlwdGlvbiBrZXkgKi8KLSAgICAgc3J0cF9rZGZfZ2VuZXJhdGUoJmtkZiwgbGFiZWxfcnRwX3NhbHQsIAotCQkgICAgICAgdG1wX2tleSArIGJhc2Vfa2V5X2xlbiwgc2FsdF9sZW4pOwotICAgfQotICAgZGVidWdfcHJpbnQobW9kX3NydHAsICJjaXBoZXIga2V5OiAlcyIsIAotCSAgICAgICBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyh0bXBfa2V5LCAKLQkJICAgIGNpcGhlcl9nZXRfa2V5X2xlbmd0aChzcnRwLT5ydHBfY2lwaGVyKSkpOyAgCi0KLSAgIC8qIGluaXRpYWxpemUgY2lwaGVyICovCi0gICBzdGF0ID0gY2lwaGVyX2luaXQoc3J0cC0+cnRwX2NpcGhlciwgdG1wX2tleSwgZGlyZWN0aW9uX2FueSk7Ci0gICBpZiAoc3RhdCkgewotICAgICAvKiB6ZXJvaXplIHRlbXAgYnVmZmVyICovCi0gICAgIG9jdGV0X3N0cmluZ19zZXRfdG9femVybyh0bXBfa2V5LCBNQVhfU1JUUF9LRVlfTEVOKTsKLSAgICAgcmV0dXJuIGVycl9zdGF0dXNfaW5pdF9mYWlsOwotICAgfQotCi0gICAvKiBnZW5lcmF0ZSBhdXRoZW50aWNhdGlvbiBrZXkgKi8KLSAgIHNydHBfa2RmX2dlbmVyYXRlKCZrZGYsIGxhYmVsX3J0cF9tc2dfYXV0aCwKLQkJICAgICB0bXBfa2V5LCBhdXRoX2dldF9rZXlfbGVuZ3RoKHNydHAtPnJ0cF9hdXRoKSk7Ci0gICBkZWJ1Z19wcmludChtb2Rfc3J0cCwgImF1dGgga2V5OiAgICVzIiwKLQkgICAgICAgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcodG1wX2tleSwgCi0JCSAgIGF1dGhfZ2V0X2tleV9sZW5ndGgoc3J0cC0+cnRwX2F1dGgpKSk7IAotCi0gICAvKiBpbml0aWFsaXplIGF1dGggZnVuY3Rpb24gKi8KLSAgIHN0YXQgPSBhdXRoX2luaXQoc3J0cC0+cnRwX2F1dGgsIHRtcF9rZXkpOwotICAgaWYgKHN0YXQpIHsKLSAgICAgLyogemVyb2l6ZSB0ZW1wIGJ1ZmZlciAqLwotICAgICBvY3RldF9zdHJpbmdfc2V0X3RvX3plcm8odG1wX2tleSwgTUFYX1NSVFBfS0VZX0xFTik7Ci0gICAgIHJldHVybiBlcnJfc3RhdHVzX2luaXRfZmFpbDsKLSAgIH0KLQotICAgLyoKLSAgICAqIC4uLm5vdyBpbml0aWFsaXplIFJUQ1Atc3BlY2lmaWMgc3RydWN0dXJlcyAgIAotICAgICovCi0KLSAgIC8qIGluaXRpYWxpemUgcmVwbGF5IGRhdGFiYXNlICovCi0gICByZGJfaW5pdCgmc3J0cC0+cnRjcF9yZGIpOwotCi0gICAvKiBEQU0gLSBubyBSVENQIGtleSBsaW1pdCBhdCBwcmVzZW50ICovCi0KLSAgIC8qIGdlbmVyYXRlIGVuY3J5cHRpb24ga2V5ICAqLwotICAgc3J0cF9rZGZfZ2VuZXJhdGUoJmtkZiwgbGFiZWxfcnRjcF9lbmNyeXB0aW9uLCAKLQkJICAgICB0bXBfa2V5LCBjaXBoZXJfZ2V0X2tleV9sZW5ndGgoc3J0cC0+cnRjcF9jaXBoZXIpKTsKLSAgIC8qIAotICAgICogaWYgdGhlIGNpcGhlciBpbiB0aGUgc3J0cCBjb250ZXh0IGlzIGFlc19pY20sIHRoZW4gd2UgbmVlZAotICAgICogdG8gZ2VuZXJhdGUgdGhlIHNhbHQgdmFsdWUKLSAgICAqLwotICAgaWYgKHNydHAtPnJ0Y3BfY2lwaGVyLT50eXBlID09ICZhZXNfaWNtKSB7Ci0JICAgLyogRklYISEhIHRoaXMgaXMgcmVhbGx5IHRoZSBjaXBoZXIga2V5IGxlbmd0aDsgcmVzdCBpcyBzYWx0ICovCi0gICAgIGludCBiYXNlX2tleV9sZW4gPSAxNjsKLSAgICAgaW50IHNhbHRfbGVuID0gY2lwaGVyX2dldF9rZXlfbGVuZ3RoKHNydHAtPnJ0Y3BfY2lwaGVyKSAtIGJhc2Vfa2V5X2xlbjsKLQotICAgICBkZWJ1Z19wcmludChtb2Rfc3J0cCwgImZvdW5kIGFlc19pY20sIGdlbmVyYXRpbmcgcnRjcCBzYWx0IiwgTlVMTCk7Ci0KLSAgICAgLyogZ2VuZXJhdGUgZW5jcnlwdGlvbiBzYWx0LCBwdXQgYWZ0ZXIgZW5jcnlwdGlvbiBrZXkgKi8KLSAgICAgc3J0cF9rZGZfZ2VuZXJhdGUoJmtkZiwgbGFiZWxfcnRjcF9zYWx0LCAKLQkJICAgICAgIHRtcF9rZXkgKyBiYXNlX2tleV9sZW4sIHNhbHRfbGVuKTsKLSAgIH0KLSAgIGRlYnVnX3ByaW50KG1vZF9zcnRwLCAicnRjcCBjaXBoZXIga2V5OiAlcyIsIAotCSAgICAgICBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyh0bXBfa2V5LCAKLQkJICAgIGNpcGhlcl9nZXRfa2V5X2xlbmd0aChzcnRwLT5ydGNwX2NpcGhlcikpKTsgIAotCi0gICAvKiBpbml0aWFsaXplIGNpcGhlciAqLwotICAgc3RhdCA9IGNpcGhlcl9pbml0KHNydHAtPnJ0Y3BfY2lwaGVyLCB0bXBfa2V5LCBkaXJlY3Rpb25fYW55KTsKLSAgIGlmIChzdGF0KSB7Ci0gICAgIC8qIHplcm9pemUgdGVtcCBidWZmZXIgKi8KLSAgICAgb2N0ZXRfc3RyaW5nX3NldF90b196ZXJvKHRtcF9rZXksIE1BWF9TUlRQX0tFWV9MRU4pOwotICAgICByZXR1cm4gZXJyX3N0YXR1c19pbml0X2ZhaWw7Ci0gICB9Ci0KLSAgIC8qIGdlbmVyYXRlIGF1dGhlbnRpY2F0aW9uIGtleSAqLwotICAgc3J0cF9rZGZfZ2VuZXJhdGUoJmtkZiwgbGFiZWxfcnRjcF9tc2dfYXV0aCwKLQkJICAgICB0bXBfa2V5LCBhdXRoX2dldF9rZXlfbGVuZ3RoKHNydHAtPnJ0Y3BfYXV0aCkpOwotICAgZGVidWdfcHJpbnQobW9kX3NydHAsICJydGNwIGF1dGgga2V5OiAgICVzIiwKLQkgICAgICAgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcodG1wX2tleSwgCi0JCSAgIGF1dGhfZ2V0X2tleV9sZW5ndGgoc3J0cC0+cnRjcF9hdXRoKSkpOyAKLQotICAgLyogaW5pdGlhbGl6ZSBhdXRoIGZ1bmN0aW9uICovCi0gICBzdGF0ID0gYXV0aF9pbml0KHNydHAtPnJ0Y3BfYXV0aCwgdG1wX2tleSk7Ci0gICBpZiAoc3RhdCkgewotICAgICAvKiB6ZXJvaXplIHRlbXAgYnVmZmVyICovCi0gICAgIG9jdGV0X3N0cmluZ19zZXRfdG9femVybyh0bXBfa2V5LCBNQVhfU1JUUF9LRVlfTEVOKTsKLSAgICAgcmV0dXJuIGVycl9zdGF0dXNfaW5pdF9mYWlsOwotICAgfQotCi0gICAvKiBjbGVhciBtZW1vcnkgdGhlbiByZXR1cm4gKi8KLSAgIHNydHBfa2RmX2NsZWFyKCZrZGYpOwotICAgb2N0ZXRfc3RyaW5nX3NldF90b196ZXJvKHRtcF9rZXksIE1BWF9TUlRQX0tFWV9MRU4pOwotICAgcmV0dXJuIGVycl9zdGF0dXNfb2s7ICAKLSB9Ci0KLQotIC8qCi0gICogc3J0cF9ldmVudF9yZXBvcnRlciBpcyBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIHRoYXQgbWVyZWx5Ci0gICogcmVwb3J0cyB0aGUgZXZlbnRzIHRoYXQgYXJlIHJlcG9ydGVkIGJ5IHRoZSBjYWxsYmFja3MKLSAgKi8KLQotIHZvaWQKLSBzcnRwX2V2ZW50X3JlcG9ydGVyKHNydHBfZXZlbnRfZGF0YV90ICpkYXRhKSB7Ci0KLSAgIGVycl9yZXBvcnQoZXJyX2xldmVsX3dhcm5pbmcsICJzcnRwOiBpbiBzdHJlYW0gMHgleDogIiwgCi0JICAgICAgZGF0YS0+c3RyZWFtLT5zc3JjKTsKLQotICAgc3dpdGNoKGRhdGEtPmV2ZW50KSB7Ci0gICBjYXNlIGV2ZW50X3NzcmNfY29sbGlzaW9uOgotICAgICBlcnJfcmVwb3J0KGVycl9sZXZlbF93YXJuaW5nLCAiXHRTU1JDIGNvbGxpc2lvblxuIik7Ci0gICAgIGJyZWFrOwotICAgY2FzZSBldmVudF9rZXlfc29mdF9saW1pdDoKLSAgICAgZXJyX3JlcG9ydChlcnJfbGV2ZWxfd2FybmluZywgIlx0a2V5IHVzYWdlIHNvZnQgbGltaXQgcmVhY2hlZFxuIik7Ci0gICAgIGJyZWFrOwotICAgY2FzZSBldmVudF9rZXlfaGFyZF9saW1pdDoKLSAgICAgZXJyX3JlcG9ydChlcnJfbGV2ZWxfd2FybmluZywgIlx0a2V5IHVzYWdlIGhhcmQgbGltaXQgcmVhY2hlZFxuIik7Ci0gICAgIGJyZWFrOwotICAgY2FzZSBldmVudF9wYWNrZXRfaW5kZXhfbGltaXQ6Ci0gICAgIGVycl9yZXBvcnQoZXJyX2xldmVsX3dhcm5pbmcsICJcdHBhY2tldCBpbmRleCBsaW1pdCByZWFjaGVkXG4iKTsKLSAgICAgYnJlYWs7Ci0gICBkZWZhdWx0OgotICAgICBlcnJfcmVwb3J0KGVycl9sZXZlbF93YXJuaW5nLCAiXHR1bmtub3duIGV2ZW50IHJlcG9ydGVkIHRvIGhhbmRsZXJcbiIpOwotICAgfQotIH0KLQotIC8qCi0gICogc3J0cF9ldmVudF9oYW5kbGVyIGlzIGEgZ2xvYmFsIHZhcmlhYmxlIGhvbGRpbmcgYSBwb2ludGVyIHRvIHRoZQotICAqIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb247IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBhbnkgdW5leHBlY3RlZAotICAqIGV2ZW50IHRoYXQgbmVlZHMgdG8gYmUgaGFuZGxlZCBvdXQgb2YgdGhlIFNSVFAgZGF0YSBwYXRoLiAgc2VlCi0gICogc3J0cF9ldmVudF90IGluIHNydHAuaCBmb3IgbW9yZSBpbmZvCi0gICoKLSAgKiBpdCBpcyBva2F5IHRvIHNldCBzcnRwX2V2ZW50X2hhbmRsZXIgdG8gTlVMTCwgYnV0IHdlIHNldCAKLSAgKiBpdCB0byB0aGUgc3J0cF9ldmVudF9yZXBvcnRlci4KLSAgKi8KLQotIHN0YXRpYyBzcnRwX2V2ZW50X2hhbmRsZXJfZnVuY190ICpzcnRwX2V2ZW50X2hhbmRsZXIgPSBzcnRwX2V2ZW50X3JlcG9ydGVyOwotCi0gZXJyX3N0YXR1c190Ci0gc3J0cF9pbnN0YWxsX2V2ZW50X2hhbmRsZXIoc3J0cF9ldmVudF9oYW5kbGVyX2Z1bmNfdCBmdW5jKSB7Ci0KLSAgIC8qIAotICAgICogbm90ZSB0aGF0IHdlIGFjY2VwdCBOVUxMIGFyZ3VtZW50cyBpbnRlbnRpb25hbGx5IC0gY2FsbGluZyB0aGlzCi0gICAgKiBmdW5jdGlvbiB3aXRoIGEgTlVMTCBhcmd1bWVudHMgcmVtb3ZlcyBhbiBldmVudCBoYW5kbGVyIHRoYXQncwotICAgICogYmVlbiBwcmV2aW91c2x5IGluc3RhbGxlZAotICAgICovCi0KLSAgIC8qIHNldCBnbG9iYWwgZXZlbnQgaGFuZGxpbmcgZnVuY3Rpb24gKi8KLSAgIHNydHBfZXZlbnRfaGFuZGxlciA9IGZ1bmM7Ci0gICByZXR1cm4gZXJyX3N0YXR1c19vazsKLSB9Ci0KLSBlcnJfc3RhdHVzX3QKLSBzcnRwX3Byb3RlY3Qoc3J0cF9jdHhfdCAqY3R4LCB2b2lkICpydHBfaGRyLCBpbnQgKnBrdF9vY3RldF9sZW4pIHsKLSAgIHNydHBfaGRyX3QgKmhkciA9IHJ0cF9oZHI7Ci0gICB1aW50MzJfdCAqZW5jX3N0YXJ0OyAgICAgICAgLyogcG9pbnRlciB0byBzdGFydCBvZiBlbmNyeXB0ZWQgcG9ydGlvbiAgKi8KLSAgIHVpbnQzMl90ICphdXRoX3N0YXJ0OyAgICAgICAvKiBwb2ludGVyIHRvIHN0YXJ0IG9mIGF1dGguIHBvcnRpb24gICAgICAqLwotICAgdW5zaWduZWQgZW5jX29jdGV0X2xlbiA9IDA7IC8qIG51bWJlciBvZiBvY3RldHMgaW4gZW5jcnlwdGVkIHBvcnRpb24gICovCi0gICB4dGRfc2VxX251bV90IGVzdDsgICAgICAgICAgLyogZXN0aW1hdGVkIHh0ZF9zZXFfbnVtX3Qgb2YgKmhkciAgICAgICAgKi8KLSAgIGludCBkZWx0YTsgICAgICAgICAgICAgICAgICAvKiBkZWx0YSBvZiBsb2NhbCBwa3QgaWR4IGFuZCB0aGF0IGluIGhkciAqLwotICAgb2N0ZXRfdCAqYXV0aF90YWcgPSBOVUxMOyAgIC8qIGxvY2F0aW9uIG9mIGF1dGhfdGFnIHdpdGhpbiBwYWNrZXQgICAgICovCi0gICBlcnJfc3RhdHVzX3Qgc3RhdHVzOyAgIAotICAgaW50IHRhZ19sZW47Ci0gICBzcnRwX3N0cmVhbV9jdHhfdCAqc3RyZWFtOwotICAgaW50IHByZWZpeF9sZW47Ci0KLSAgIGRlYnVnX3ByaW50KG1vZF9zcnRwLCAiZnVuY3Rpb24gc3J0cF9wcm90ZWN0IiwgTlVMTCk7Ci0KLSAgLyogd2UgYXNzdW1lIHRoZSBoZHIgaXMgMzItYml0IGFsaWduZWQgdG8gc3RhcnQgKi8KLQotICAgLyogY2hlY2sgdGhlIHBhY2tldCBsZW5ndGggLSBpdCBtdXN0IGF0IGxlYXN0IGNvbnRhaW4gYSBmdWxsIGhlYWRlciAqLwotICAgaWYgKCpwa3Rfb2N0ZXRfbGVuIDwgb2N0ZXRzX2luX3J0cF9oZWFkZXIpCi0gICAgIHJldHVybiBlcnJfc3RhdHVzX2JhZF9wYXJhbTsKLQotICAgLyoKLSAgICAqIGxvb2sgdXAgc3NyYyBpbiBzcnRwX3N0cmVhbSBsaXN0LCBhbmQgcHJvY2VzcyB0aGUgcGFja2V0IHdpdGgKLSAgICAqIHRoZSBhcHByb3ByaWF0ZSBzdHJlYW0uICBpZiB3ZSBoYXZlbid0IHNlZW4gdGhpcyBzdHJlYW0gYmVmb3JlLAotICAgICogdGhlcmUncyBhIHRlbXBsYXRlIGtleSBmb3IgdGhpcyBzcnRwX3Nlc3Npb24sIGFuZCB0aGUgY2lwaGVyCi0gICAgKiBzdXBwb3J0cyBrZXktc2hhcmluZywgdGhlbiB3ZSBhc3N1bWUgdGhhdCBhIG5ldyBzdHJlYW0gdXNpbmcKLSAgICAqIHRoYXQga2V5IGhhcyBqdXN0IHN0YXJ0ZWQgdXAKLSAgICAqLwotICAgc3RyZWFtID0gc3J0cF9nZXRfc3RyZWFtKGN0eCwgaGRyLT5zc3JjKTsKLSAgIGlmIChzdHJlYW0gPT0gTlVMTCkgewotICAgICBpZiAoY3R4LT5zdHJlYW1fdGVtcGxhdGUgIT0gTlVMTCkgewotICAgICAgIHNydHBfc3RyZWFtX2N0eF90ICpuZXdfc3RyZWFtOwotCi0gICAgICAgLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBuZXcgc3RyZWFtICovCi0gICAgICAgc3RhdHVzID0gc3J0cF9zdHJlYW1fY2xvbmUoY3R4LT5zdHJlYW1fdGVtcGxhdGUsIAotCQkJCSAgbnRvaGwoaGRyLT5zc3JjKSwgJm5ld19zdHJlYW0pOyAKLSAgICAgICBpZiAoc3RhdHVzKQotCSByZXR1cm4gc3RhdHVzOwotCi0gICAgICAgLyogYWRkIG5ldyBzdHJlYW0gdG8gdGhlIGhlYWQgb2YgdGhlIHN0cmVhbV9saXN0ICovCi0gICAgICAgbmV3X3N0cmVhbS0+bmV4dCA9IGN0eC0+c3RyZWFtX2xpc3Q7Ci0gICAgICAgY3R4LT5zdHJlYW1fbGlzdCA9IG5ld19zdHJlYW07Ci0KLSAgICAgICAvKiBzZXQgZGlyZWN0aW9uIHRvIG91dGJvdW5kICovCi0gICAgICAgbmV3X3N0cmVhbS0+ZGlyZWN0aW9uID0gZGlyX3NydHBfc2VuZGVyOwotCi0gICAgICAgLyogc2V0IHN0cmVhbSAodGhlIHBvaW50ZXIgdXNlZCBpbiB0aGlzIGZ1bmN0aW9uKSAqLwotICAgICAgIHN0cmVhbSA9IG5ld19zdHJlYW07Ci0gICAgIH0gZWxzZSB7Ci0gICAgICAgLyogbm8gdGVtcGxhdGUgc3RyZWFtLCBzbyB3ZSByZXR1cm4gYW4gZXJyb3IgKi8KLSAgICAgICByZXR1cm4gZXJyX3N0YXR1c19ub19jdHg7Ci0gICAgIH0gCi0gICB9Ci0KLSAgIC8qIAotICAgICogdmVyaWZ5IHRoYXQgc3RyZWFtIGlzIGZvciBzZW5kaW5nIHRyYWZmaWMgLSB0aGlzIGNoZWNrIHdpbGwKLSAgICAqIGRldGVjdCBTU1JDIGNvbGxpc2lvbnMsIHNpbmNlIGEgc3RyZWFtIHRoYXQgYXBwZWFycyBpbiBib3RoCi0gICAgKiBzcnRwX3Byb3RlY3QoKSBhbmQgc3J0cF91bnByb3RlY3QoKSB3aWxsIGZhaWwgdGhpcyB0ZXN0IGluIG9uZSBvZgotICAgICogdGhvc2UgZnVuY3Rpb25zLgotICAgICovCi0gICBpZiAoc3RyZWFtLT5kaXJlY3Rpb24gIT0gZGlyX3NydHBfc2VuZGVyKSB7Ci0gICAgIGlmIChzdHJlYW0tPmRpcmVjdGlvbiA9PSBkaXJfdW5rbm93bikgewotICAgICAgIHN0cmVhbS0+ZGlyZWN0aW9uID0gZGlyX3NydHBfc2VuZGVyOwotICAgICB9IGVsc2UgewotICAgICAgIHNydHBfaGFuZGxlX2V2ZW50KGN0eCwgc3RyZWFtLCBldmVudF9zc3JjX2NvbGxpc2lvbik7Ci0gICAgIH0KLSAgIH0KLQotICAvKiAKLSAgICogdXBkYXRlIHRoZSBrZXkgdXNhZ2UgbGltaXQsIGFuZCBjaGVjayBpdCB0byBtYWtlIHN1cmUgdGhhdCB3ZQotICAgKiBkaWRuJ3QganVzdCBoaXQgZWl0aGVyIHRoZSBzb2Z0IGxpbWl0IG9yIHRoZSBoYXJkIGxpbWl0LCBhbmQgY2FsbAotICAgKiB0aGUgZXZlbnQgaGFuZGxlciBpZiB3ZSBoaXQgZWl0aGVyLgotICAgKi8KLSAgc3dpdGNoKGtleV9saW1pdF91cGRhdGUoc3RyZWFtLT5saW1pdCkpIHsKLSAgY2FzZSBrZXlfZXZlbnRfbm9ybWFsOgotICAgIGJyZWFrOwotICBjYXNlIGtleV9ldmVudF9zb2Z0X2xpbWl0OiAKLSAgICBzcnRwX2hhbmRsZV9ldmVudChjdHgsIHN0cmVhbSwgZXZlbnRfa2V5X3NvZnRfbGltaXQpOwotICAgIGJyZWFrOyAKLSAgY2FzZSBrZXlfZXZlbnRfaGFyZF9saW1pdDoKLSAgICBzcnRwX2hhbmRsZV9ldmVudChjdHgsIHN0cmVhbSwgZXZlbnRfa2V5X2hhcmRfbGltaXQpOwotICAgIHJldHVybiBlcnJfc3RhdHVzX2tleV9leHBpcmVkOwotICBkZWZhdWx0OgotICAgIGJyZWFrOwotICB9Ci0KLSAgIC8qIGdldCB0YWcgbGVuZ3RoIGZyb20gc3RyZWFtICovCi0gICB0YWdfbGVuID0gYXV0aF9nZXRfdGFnX2xlbmd0aChzdHJlYW0tPnJ0cF9hdXRoKTsgCi0KLSAgIC8qCi0gICAgKiBmaW5kIHN0YXJ0aW5nIHBvaW50IGZvciBlbmNyeXB0aW9uIGFuZCBsZW5ndGggb2YgZGF0YSB0byBiZQotICAgICogZW5jcnlwdGVkIC0gdGhlIGVuY3J5cHRlZCBwb3J0aW9uIHN0YXJ0cyBhZnRlciB0aGUgcnRwIGhlYWRlcgotICAgICogZXh0ZW5zaW9uLCBpZiBwcmVzZW50OyBvdGhlcndpc2UsIGl0IHN0YXJ0cyBhZnRlciB0aGUgbGFzdCBjc3JjLAotICAgICogaWYgYW55IGFyZSBwcmVzZW50Ci0gICAgKgotICAgICogaWYgd2UncmUgbm90IHByb3ZpZGluZyBjb25maWRlbnRpYWxpdHksIHNldCBlbmNfc3RhcnQgdG8gTlVMTAotICAgICovCi0gICBpZiAoc3RyZWFtLT5ydHBfc2VydmljZXMgJiBzZWNfc2Vydl9jb25mKSB7Ci0gICAgIGVuY19zdGFydCA9ICh1aW50MzJfdCAqKWhkciArIHVpbnQzMnNfaW5fcnRwX2hlYWRlciArIGhkci0+Y2M7ICAKLSAgICAgaWYgKGhkci0+eCA9PSAxKSAKLSAgICAgICBlbmNfc3RhcnQgKz0gKChzcnRwX2hkcl94dG5kX3QgKillbmNfc3RhcnQpLT5sZW5ndGg7Ci0gICAgIGVuY19vY3RldF9sZW4gPSAqcGt0X29jdGV0X2xlbiAtICgoZW5jX3N0YXJ0IC0gKHVpbnQzMl90ICopaGRyKSA8PCAyKTsKLSAgIH0gZWxzZSB7Ci0gICAgIGVuY19zdGFydCA9IE5VTEw7Ci0gICB9Ci0KLSAgIC8qIAotICAgICogaWYgd2UncmUgcHJvdmlkaW5nIGF1dGhlbnRpY2F0aW9uLCBzZXQgdGhlIGF1dGhfc3RhcnQgYW5kIGF1dGhfdGFnCi0gICAgKiBwb2ludGVycyB0byB0aGUgcHJvcGVyIGxvY2F0aW9uczsgb3RoZXJ3aXNlLCBzZXQgYXV0aF9zdGFydCB0byBOVUxMCi0gICAgKiB0byBpbmRpY2F0ZSB0aGF0IG5vIGF1dGhlbnRpY2F0aW9uIGlzIG5lZWRlZAotICAgICovCi0gICBpZiAoc3RyZWFtLT5ydHBfc2VydmljZXMgJiBzZWNfc2Vydl9hdXRoKSB7Ci0gICAgIGF1dGhfc3RhcnQgPSAodWludDMyX3QgKiloZHI7Ci0gICAgIGF1dGhfdGFnID0gKG9jdGV0X3QgKiloZHIgKyAqcGt0X29jdGV0X2xlbjsKLSAgIH0gZWxzZSB7Ci0gICAgIGF1dGhfc3RhcnQgPSBOVUxMOwotICAgICBhdXRoX3RhZyA9IE5VTEw7Ci0gICB9Ci0KLSAgIC8qCi0gICAgKiBlc3RpbWF0ZSB0aGUgcGFja2V0IGluZGV4IHVzaW5nIHRoZSBzdGFydCBvZiB0aGUgcmVwbGF5IHdpbmRvdyAgIAotICAgICogYW5kIHRoZSBzZXF1ZW5jZSBudW1iZXIgZnJvbSB0aGUgaGVhZGVyCi0gICAgKi8KLSAgIGRlbHRhID0gcmRieF9lc3RpbWF0ZV9pbmRleCgmc3RyZWFtLT5ydHBfcmRieCwgJmVzdCwgbnRvaHMoaGRyLT5zZXEpKTsKLSAgIHN0YXR1cyA9IHJkYnhfY2hlY2soJnN0cmVhbS0+cnRwX3JkYngsIGRlbHRhKTsKLSAgIGlmIChzdGF0dXMpCi0gICAgIHJldHVybiBzdGF0dXM7ICAvKiB3ZSd2ZSBiZWVuIGFza2VkIHRvIHJldXNlIGFuIGluZGV4ICovCi0gICByZGJ4X2FkZF9pbmRleCgmc3RyZWFtLT5ydHBfcmRieCwgZGVsdGEpOwotCi0jaWZkZWYgTk9fNjRCSVRfTUFUSAotICAgZGVidWdfcHJpbnQyKG1vZF9zcnRwLCAiZXN0aW1hdGVkIHBhY2tldCBpbmRleDogJTA4eCUwOHgiLCAKLQkJaGlnaDMyKGVzdCksbG93MzIoZXN0KSk7Ci0jZWxzZQotICAgZGVidWdfcHJpbnQobW9kX3NydHAsICJlc3RpbWF0ZWQgcGFja2V0IGluZGV4OiAlMDE2bGx4IiwgZXN0KTsKLSNlbmRpZgotCi0gICAvKiAKLSAgICAqIGlmIHdlJ3JlIHVzaW5nIHJpbmRhZWwgY291bnRlciBtb2RlLCBzZXQgbm9uY2UgYW5kIHNlcSAKLSAgICAqLwotICAgaWYgKHN0cmVhbS0+cnRwX2NpcGhlci0+dHlwZSA9PSAmYWVzX2ljbSkgewotICAgICB2MTI4X3QgaXY7Ci0KLSAgICAgaXYudjMyWzBdID0gMDsKLSAgICAgaXYudjMyWzFdID0gaGRyLT5zc3JjOwotI2lmZGVmIE5PXzY0QklUX01BVEgKLSAgICAgaXYudjY0WzFdID0gYnN3YXBfNjQobWFrZTY0KChoaWdoMzIoZXN0KSA8PCAxNikgfCAobG93MzIoZXN0KSA+PiAxNiksCi0JCQkgIGxvdzMyKGVzdCkgPDwgMTYpKTsKLSNlbHNlCi0gICAgIGl2LnY2NFsxXSA9IGJzd2FwXzY0KGVzdCA8PCAxNik7Ci0jZW5kaWYKLSAgICAgc3RhdHVzID0gY2lwaGVyX3NldF9pdihzdHJlYW0tPnJ0cF9jaXBoZXIsICZpdik7Ci0KLSAgIH0gZWxzZSB7ICAKLSAgICAgdjEyOF90IGl2OwotCi0gICAgIC8qIG90aGVyd2lzZSwgc2V0IHRoZSBpbmRleCB0byBlc3QgKi8gIAotI2lmZGVmIE5PXzY0QklUX01BVEgKLSAgICAgaXYudjMyWzBdID0gMDsKLSAgICAgaXYudjMyWzFdID0gMDsKLSNlbHNlCi0gICAgIGl2LnY2NFswXSA9IDA7Ci0jZW5kaWYKLSAgICAgaXYudjY0WzFdID0gYnN3YXBfNjQoZXN0KTsKLSAgICAgc3RhdHVzID0gY2lwaGVyX3NldF9pdihzdHJlYW0tPnJ0cF9jaXBoZXIsICZpdik7Ci0gICB9Ci0gICBpZiAoc3RhdHVzKQotICAgICByZXR1cm4gZXJyX3N0YXR1c19jaXBoZXJfZmFpbDsKLQotICAgLyogc2hpZnQgZXN0LCBwdXQgaW50byBuZXR3b3JrIGJ5dGUgb3JkZXIgKi8KLSNpZmRlZiBOT182NEJJVF9NQVRICi0gICBlc3QgPSBic3dhcF82NChtYWtlNjQoKGhpZ2gzMihlc3QpIDw8IDE2KSB8Ci0JCQkJCQkgKGxvdzMyKGVzdCkgPj4gMTYpLAotCQkJCQkJIGxvMzIoZXN0KSA8PCAxNikpOwotI2Vsc2UKLSAgIGVzdCA9IGJzd2FwXzY0KGVzdCA8PCAxNik7Ci0jZW5kaWYKLSAgIAotICAgLyogCi0gICAgKiBpZiB3ZSdyZSBhdXRoZW50aWNhdGluZyB1c2luZyBhIHVuaXZlcnNhbCBoYXNoLCBwdXQgdGhlIGtleXN0cmVhbQotICAgICogcHJlZml4IGludG8gdGhlIGF1dGhlbnRpY2F0aW9uIHRhZwotICAgICovCi0gICBpZiAoYXV0aF9zdGFydCkgewotICAgICAKLSAgICBwcmVmaXhfbGVuID0gYXV0aF9nZXRfcHJlZml4X2xlbmd0aChzdHJlYW0tPnJ0cF9hdXRoKTsgICAgCi0gICAgaWYgKHByZWZpeF9sZW4pIHsKLSAgICAgIHN0YXR1cyA9IGNpcGhlcl9vdXRwdXQoc3RyZWFtLT5ydHBfY2lwaGVyLCBhdXRoX3RhZywgcHJlZml4X2xlbik7Ci0gICAgICBpZiAoc3RhdHVzKQotCXJldHVybiBlcnJfc3RhdHVzX2NpcGhlcl9mYWlsOwotICAgICAgZGVidWdfcHJpbnQobW9kX3NydHAsICJrZXlzdHJlYW0gcHJlZml4OiAlcyIsIAotCQkgIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKGF1dGhfdGFnLCBwcmVmaXhfbGVuKSk7CisgICAgc3dpdGNoIChkYXRhLT5ldmVudCkgeworICAgIGNhc2UgZXZlbnRfc3NyY19jb2xsaXNpb246CisgICAgICAgIHNydHBfZXJyX3JlcG9ydChzcnRwX2Vycl9sZXZlbF93YXJuaW5nLCAiXHRTU1JDIGNvbGxpc2lvblxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgZXZlbnRfa2V5X3NvZnRfbGltaXQ6CisgICAgICAgIHNydHBfZXJyX3JlcG9ydChzcnRwX2Vycl9sZXZlbF93YXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgIlx0a2V5IHVzYWdlIHNvZnQgbGltaXQgcmVhY2hlZFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgZXZlbnRfa2V5X2hhcmRfbGltaXQ6CisgICAgICAgIHNydHBfZXJyX3JlcG9ydChzcnRwX2Vycl9sZXZlbF93YXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgIlx0a2V5IHVzYWdlIGhhcmQgbGltaXQgcmVhY2hlZFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgZXZlbnRfcGFja2V0X2luZGV4X2xpbWl0OgorICAgICAgICBzcnRwX2Vycl9yZXBvcnQoc3J0cF9lcnJfbGV2ZWxfd2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICJcdHBhY2tldCBpbmRleCBsaW1pdCByZWFjaGVkXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3J0cF9lcnJfcmVwb3J0KHNydHBfZXJyX2xldmVsX3dhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAiXHR1bmtub3duIGV2ZW50IHJlcG9ydGVkIHRvIGhhbmRsZXJcbiIpOwogICAgIH0KLSAgfQorfQogCi0gIC8qIGlmIHdlJ3JlIGVuY3J5cHRpbmcsIGV4b3Iga2V5c3RyZWFtIGludG8gdGhlIG1lc3NhZ2UgKi8KLSAgaWYgKGVuY19zdGFydCkgewotICAgIHN0YXR1cyA9IGNpcGhlcl9lbmNyeXB0KHN0cmVhbS0+cnRwX2NpcGhlciwgCi0JCQkgICAgKG9jdGV0X3QgKillbmNfc3RhcnQsICZlbmNfb2N0ZXRfbGVuKTsKLSAgICBpZiAoc3RhdHVzKQotICAgICAgcmV0dXJuIGVycl9zdGF0dXNfY2lwaGVyX2ZhaWw7Ci0gIH0KKy8qCisgKiBzcnRwX2V2ZW50X2hhbmRsZXIgaXMgYSBnbG9iYWwgdmFyaWFibGUgaG9sZGluZyBhIHBvaW50ZXIgdG8gdGhlCisgKiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uOyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgYW55IHVuZXhwZWN0ZWQKKyAqIGV2ZW50IHRoYXQgbmVlZHMgdG8gYmUgaGFuZGxlZCBvdXQgb2YgdGhlIFNSVFAgZGF0YSBwYXRoLiAgc2VlCisgKiBzcnRwX2V2ZW50X3QgaW4gc3J0cC5oIGZvciBtb3JlIGluZm8KKyAqCisgKiBpdCBpcyBva2F5IHRvIHNldCBzcnRwX2V2ZW50X2hhbmRsZXIgdG8gTlVMTCwgYnV0IHdlIHNldAorICogaXQgdG8gdGhlIHNydHBfZXZlbnRfcmVwb3J0ZXIuCisgKi8KIAotICAvKgotICAgKiAgaWYgd2UncmUgYXV0aGVudGljYXRpbmcsIHJ1biBhdXRoZW50aWNhdGlvbiBmdW5jdGlvbiBhbmQgcHV0IHJlc3VsdAotICAgKiAgaW50byB0aGUgYXV0aF90YWcgCi0gICAqLwotICBpZiAoYXV0aF9zdGFydCkgeyAgICAgICAgCitzdGF0aWMgc3J0cF9ldmVudF9oYW5kbGVyX2Z1bmNfdCAqc3J0cF9ldmVudF9oYW5kbGVyID0gc3J0cF9ldmVudF9yZXBvcnRlcjsKIAotICAgIC8qIGluaXRpYWxpemUgYXV0aCBmdW5jIGNvbnRleHQgKi8KLSAgICBzdGF0dXMgPSBhdXRoX3N0YXJ0KHN0cmVhbS0+cnRwX2F1dGgpOwotICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7CitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2luc3RhbGxfZXZlbnRfaGFuZGxlcihzcnRwX2V2ZW50X2hhbmRsZXJfZnVuY190IGZ1bmMpCit7CisgICAgLyoKKyAgICAgKiBub3RlIHRoYXQgd2UgYWNjZXB0IE5VTEwgYXJndW1lbnRzIGludGVudGlvbmFsbHkgLSBjYWxsaW5nIHRoaXMKKyAgICAgKiBmdW5jdGlvbiB3aXRoIGEgTlVMTCBhcmd1bWVudHMgcmVtb3ZlcyBhbiBldmVudCBoYW5kbGVyIHRoYXQncworICAgICAqIGJlZW4gcHJldmlvdXNseSBpbnN0YWxsZWQKKyAgICAgKi8KIAotICAgIC8qIHJ1biBhdXRoIGZ1bmMgb3ZlciBwYWNrZXQgKi8KLSAgICBzdGF0dXMgPSBhdXRoX3VwZGF0ZShzdHJlYW0tPnJ0cF9hdXRoLCAKLQkJCSAob2N0ZXRfdCAqKWF1dGhfc3RhcnQsICpwa3Rfb2N0ZXRfbGVuKTsKLSAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOwotICAgIAotICAgIC8qIHJ1biBhdXRoIGZ1bmMgb3ZlciBST0MsIHB1dCByZXN1bHQgaW50byBhdXRoX3RhZyAqLwotICAgIHN0YXR1cyA9IGF1dGhfY29tcHV0ZShzdHJlYW0tPnJ0cF9hdXRoLCAob2N0ZXRfdCAqKSZlc3QsIDQsIGF1dGhfdGFnKTsgCi0gICAgZGVidWdfcHJpbnQobW9kX3NydHAsICJzcnRwIGF1dGggdGFnOiAgICAlcyIsIAotCQlvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhhdXRoX3RhZywgdGFnX2xlbikpOwotICAgIGlmIChzdGF0dXMpCi0gICAgICByZXR1cm4gZXJyX3N0YXR1c19hdXRoX2ZhaWw7ICAgCisgICAgLyogc2V0IGdsb2JhbCBldmVudCBoYW5kbGluZyBmdW5jdGlvbiAqLworICAgIHNydHBfZXZlbnRfaGFuZGxlciA9IGZ1bmM7CisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KIAotICB9CisvKgorICogQ2hlY2sgaWYgdGhlIGdpdmVuIGV4dGVuc2lvbiBoZWFkZXIgaWQgaXMgLyBzaG91bGQgYmUgZW5jcnlwdGVkLgorICogUmV0dXJucyAxIGlmIHllcywgb3RoZXJ3aXNlIDAuCisgKi8KK3N0YXRpYyBpbnQgc3J0cF9wcm90ZWN0X2V4dGVuc2lvbl9oZWFkZXIoc3J0cF9zdHJlYW1fY3R4X3QgKnN0cmVhbSwgaW50IGlkKQoreworICAgIGludCAqZW5jX3h0bl9oZHIgPSBzdHJlYW0tPmVuY194dG5faGRyOworICAgIGludCBjb3VudCA9IHN0cmVhbS0+ZW5jX3h0bl9oZHJfY291bnQ7CiAKLSAgaWYgKGF1dGhfdGFnKSB7CisgICAgaWYgKCFlbmNfeHRuX2hkciB8fCBjb3VudCA8PSAwKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHdoaWxlIChjb3VudCA+IDApIHsKKyAgICAgICAgaWYgKCplbmNfeHRuX2hkciA9PSBpZCkgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgICBlbmNfeHRuX2hkcisrOworICAgICAgICBjb3VudC0tOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIGV4dGVuc2lvbnMgaGVhZGVyIGVuY3J5cHRpb24gUkZDIDY5MDQKKyAqLworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IHNydHBfcHJvY2Vzc19oZWFkZXJfZW5jcnlwdGlvbigKKyAgICBzcnRwX3N0cmVhbV9jdHhfdCAqc3RyZWFtLAorICAgIHNydHBfaGRyX3h0bmRfdCAqeHRuX2hkciwKKyAgICBzcnRwX3Nlc3Npb25fa2V5c190ICpzZXNzaW9uX2tleXMpCit7CisgICAgc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdHVzOworICAgIHVpbnQ4X3Qga2V5c3RyZWFtWzI1N107IC8qIE1heGltdW0gMiBieXRlcyBoZWFkZXIgKyAyNTUgYnl0ZXMgZGF0YS4gKi8KKyAgICBpbnQga2V5c3RyZWFtX3BvczsKKyAgICB1aW50OF90ICp4dG5faGRyX2RhdGEgPSAoKHVpbnQ4X3QgKil4dG5faGRyKSArIG9jdGV0c19pbl9ydHBfZXh0bl9oZHI7CisgICAgdWludDhfdCAqeHRuX2hkcl9lbmQgPQorICAgICAgICB4dG5faGRyX2RhdGEgKyAobnRvaHMoeHRuX2hkci0+bGVuZ3RoKSAqIHNpemVvZih1aW50MzJfdCkpOworCisgICAgaWYgKG50b2hzKHh0bl9oZHItPnByb2ZpbGVfc3BlY2lmaWMpID09IDB4YmVkZSkgeworICAgICAgICAvKiBSRkMgNTI4NSwgc2VjdGlvbiA0LjIuIE9uZS1CeXRlIEhlYWRlciAqLworICAgICAgICB3aGlsZSAoeHRuX2hkcl9kYXRhIDwgeHRuX2hkcl9lbmQpIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgeGlkID0gKCp4dG5faGRyX2RhdGEgJiAweGYwKSA+PiA0OworICAgICAgICAgICAgdW5zaWduZWQgaW50IHhsZW4gPSAoKnh0bl9oZHJfZGF0YSAmIDB4MGYpICsgMTsKKyAgICAgICAgICAgIHVpbnQzMl90IHhsZW5fd2l0aF9oZWFkZXIgPSAxICsgeGxlbjsKKyAgICAgICAgICAgIHh0bl9oZHJfZGF0YSsrOworCisgICAgICAgICAgICBpZiAoeHRuX2hkcl9kYXRhICsgeGxlbiA+IHh0bl9oZHJfZW5kKQorICAgICAgICAgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfcGFyc2VfZXJyOworCisgICAgICAgICAgICBpZiAoeGlkID09IDE1KSB7CisgICAgICAgICAgICAgICAgLyogZm91bmQgaGVhZGVyIDE1LCBzdG9wIGZ1cnRoZXIgcHJvY2Vzc2luZy4gKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfb3V0cHV0KHNlc3Npb25fa2V5cy0+cnRwX3h0bl9oZHJfY2lwaGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXN0cmVhbSwgJnhsZW5fd2l0aF9oZWFkZXIpOworICAgICAgICAgICAgaWYgKHN0YXR1cykKKyAgICAgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2NpcGhlcl9mYWlsOworCisgICAgICAgICAgICBpZiAoc3J0cF9wcm90ZWN0X2V4dGVuc2lvbl9oZWFkZXIoc3RyZWFtLCB4aWQpKSB7CisgICAgICAgICAgICAgICAga2V5c3RyZWFtX3BvcyA9IDE7CisgICAgICAgICAgICAgICAgd2hpbGUgKHhsZW4gPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICp4dG5faGRyX2RhdGEgXj0ga2V5c3RyZWFtW2tleXN0cmVhbV9wb3MrK107CisgICAgICAgICAgICAgICAgICAgIHh0bl9oZHJfZGF0YSsrOworICAgICAgICAgICAgICAgICAgICB4bGVuLS07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB4dG5faGRyX2RhdGEgKz0geGxlbjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogc2tpcCBwYWRkaW5nIGJ5dGVzLiAqLworICAgICAgICAgICAgd2hpbGUgKHh0bl9oZHJfZGF0YSA8IHh0bl9oZHJfZW5kICYmICp4dG5faGRyX2RhdGEgPT0gMCkgeworICAgICAgICAgICAgICAgIHh0bl9oZHJfZGF0YSsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIGlmICgobnRvaHMoeHRuX2hkci0+cHJvZmlsZV9zcGVjaWZpYykgJiAweDFmZmYpID09IDB4MTAwKSB7CisgICAgICAgIC8qIFJGQyA1Mjg1LCBzZWN0aW9uIDQuMy4gVHdvLUJ5dGUgSGVhZGVyICovCisgICAgICAgIHdoaWxlICh4dG5faGRyX2RhdGEgKyAxIDwgeHRuX2hkcl9lbmQpIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgeGlkID0gKnh0bl9oZHJfZGF0YTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCB4bGVuID0gKih4dG5faGRyX2RhdGEgKyAxKTsKKyAgICAgICAgICAgIHVpbnQzMl90IHhsZW5fd2l0aF9oZWFkZXIgPSAyICsgeGxlbjsKKyAgICAgICAgICAgIHh0bl9oZHJfZGF0YSArPSAyOworCisgICAgICAgICAgICBpZiAoeHRuX2hkcl9kYXRhICsgeGxlbiA+IHh0bl9oZHJfZW5kKQorICAgICAgICAgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfcGFyc2VfZXJyOworCisgICAgICAgICAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9vdXRwdXQoc2Vzc2lvbl9rZXlzLT5ydHBfeHRuX2hkcl9jaXBoZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5c3RyZWFtLCAmeGxlbl93aXRoX2hlYWRlcik7CisgICAgICAgICAgICBpZiAoc3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfY2lwaGVyX2ZhaWw7CisKKyAgICAgICAgICAgIGlmICh4bGVuID4gMCAmJiBzcnRwX3Byb3RlY3RfZXh0ZW5zaW9uX2hlYWRlcihzdHJlYW0sIHhpZCkpIHsKKyAgICAgICAgICAgICAgICBrZXlzdHJlYW1fcG9zID0gMjsKKyAgICAgICAgICAgICAgICB3aGlsZSAoeGxlbiA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgKnh0bl9oZHJfZGF0YSBePSBrZXlzdHJlYW1ba2V5c3RyZWFtX3BvcysrXTsKKyAgICAgICAgICAgICAgICAgICAgeHRuX2hkcl9kYXRhKys7CisgICAgICAgICAgICAgICAgICAgIHhsZW4tLTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHh0bl9oZHJfZGF0YSArPSB4bGVuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBza2lwIHBhZGRpbmcgYnl0ZXMuICovCisgICAgICAgICAgICB3aGlsZSAoeHRuX2hkcl9kYXRhIDwgeHRuX2hkcl9lbmQgJiYgKnh0bl9oZHJfZGF0YSA9PSAwKSB7CisgICAgICAgICAgICAgICAgeHRuX2hkcl9kYXRhKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvKiB1bnN1cHBvcnRlZCBleHRlbnNpb24gaGVhZGVyIGZvcm1hdC4gKi8KKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19wYXJzZV9lcnI7CisgICAgfQorCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKworLyoKKyAqIEFFQUQgdXNlcyBhIG5ldyBJViBmb3JtYXRpb24gbWV0aG9kLiAgVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzCisgKiBzZWN0aW9uIDguMS4gKFNSVFAgSVYgRm9ybWF0aW9uIGZvciBBRVMtR0NNKSBvZiBSRkM3NzE0LgorICogVGhlIGNhbGN1bGF0aW9uIGlzIGRlZmluZWQgYXMsIHdoZXJlICgrKSBpcyB0aGUgeG9yIG9wZXJhdGlvbjoKKyAqCisgKgorICogICAgICAgICAgICAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDEgIDEKKyAqICAgICAgICAgICAgICAwICAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5ICAwICAxCisgKiAgICAgICAgICAgICstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSsKKyAqICAgICAgICAgICAgfDAwfDAwfCAgICBTU1JDICAgfCAgICAgUk9DICAgfCBTRVEgfC0tLSsKKyAqICAgICAgICAgICAgKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKyAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKyAgIHwKKyAqICAgICAgICAgICAgfCAgICAgICAgIEVuY3J5cHRpb24gU2FsdCAgICAgICAgICAgfC0+KCspCisgKiAgICAgICAgICAgICstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSsgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSsgICB8CisgKiAgICAgICAgICAgIHwgICAgICAgSW5pdGlhbGl6YXRpb24gVmVjdG9yICAgICAgIHw8LS0rCisgKiAgICAgICAgICAgICstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSsqCisgKgorICogSW5wdXQ6ICAqc2Vzc2lvbl9rZXlzIC0gcG9pbnRlciB0byBTUlRQIHN0cmVhbSBjb250ZXh0IHNlc3Npb24ga2V5cywKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgdG8gcmV0cmlldmUgdGhlIFNBTFQKKyAqICAgICAgICAgKml2ICAgICAtIFBvaW50ZXIgdG8gcmVjZWl2ZSB0aGUgY2FsY3VsYXRlZCBJVgorICogICAgICAgICAqc2VxICAgIC0gVGhlIFJPQyBhbmQgU0VRIHZhbHVlIHRvIHVzZSBmb3IgdGhlCisgKiAgICAgICAgICAgICAgICAgICBJViBjYWxjdWxhdGlvbi4KKyAqICAgICAgICAgKmhkciAgICAtIFRoZSBSVFAgaGVhZGVyLCB1c2VkIHRvIGdldCB0aGUgU1NSQyB2YWx1ZQorICoKKyAqLworCitzdGF0aWMgdm9pZCBzcnRwX2NhbGNfYWVhZF9pdihzcnRwX3Nlc3Npb25fa2V5c190ICpzZXNzaW9uX2tleXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2MTI4X3QgKml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF94dGRfc2VxX251bV90ICpzZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX2hkcl90ICpoZHIpCit7CisgICAgdjEyOF90IGluOworICAgIHYxMjhfdCBzYWx0OworCisjaWZkZWYgTk9fNjRCSVRfTUFUSAorICAgIHVpbnQzMl90IGxvY2FsX3JvYyA9ICgoaGlnaDMyKCpzZXEpIDw8IDE2KSB8IChsb3czMigqc2VxKSA+PiAxNikpOworICAgIHVpbnQxNl90IGxvY2FsX3NlcSA9ICh1aW50MTZfdCkobG93MzIoKnNlcSkpOworI2Vsc2UKKyAgICB1aW50MzJfdCBsb2NhbF9yb2MgPSAodWludDMyX3QpKCpzZXEgPj4gMTYpOworICAgIHVpbnQxNl90IGxvY2FsX3NlcSA9ICh1aW50MTZfdCkqc2VxOworI2VuZGlmCisKKyAgICBtZW1zZXQoJmluLCAwLCBzaXplb2YodjEyOF90KSk7CisgICAgbWVtc2V0KCZzYWx0LCAwLCBzaXplb2YodjEyOF90KSk7CisKKyAgICBpbi52MTZbNV0gPSBodG9ucyhsb2NhbF9zZXEpOworICAgIGxvY2FsX3JvYyA9IGh0b25sKGxvY2FsX3JvYyk7CisgICAgbWVtY3B5KCZpbi52MTZbM10sICZsb2NhbF9yb2MsIHNpemVvZihsb2NhbF9yb2MpKTsKKworICAgIC8qCisgICAgICogQ29weSBpbiB0aGUgUlRQIFNTUkMgdmFsdWUKKyAgICAgKi8KKyAgICBtZW1jcHkoJmluLnY4WzJdLCAmaGRyLT5zc3JjLCA0KTsKKyAgICBkZWJ1Z19wcmludChtb2Rfc3J0cCwgIlByZS1zYWx0ZWQgUlRQIElWID0gJXNcbiIsIHYxMjhfaGV4X3N0cmluZygmaW4pKTsKKworICAgIC8qCisgICAgICogR2V0IHRoZSBTQUxUIHZhbHVlIGZyb20gdGhlIGNvbnRleHQKKyAgICAgKi8KKyAgICBtZW1jcHkoc2FsdC52OCwgc2Vzc2lvbl9rZXlzLT5zYWx0LCBTUlRQX0FFQURfU0FMVF9MRU4pOworICAgIGRlYnVnX3ByaW50KG1vZF9zcnRwLCAiUlRQIFNBTFQgPSAlc1xuIiwgdjEyOF9oZXhfc3RyaW5nKCZzYWx0KSk7CisKKyAgICAvKgorICAgICAqIEZpbmFsbHksIGFwcGx5IHR5aGUgU0FMVCB0byB0aGUgaW5wdXQKKyAgICAgKi8KKyAgICB2MTI4X3hvcihpdiwgJmluLCAmc2FsdCk7Cit9CisKK3NydHBfc2Vzc2lvbl9rZXlzX3QgKnNydHBfZ2V0X3Nlc3Npb25fa2V5cyhzcnRwX3N0cmVhbV9jdHhfdCAqc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmhkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnBrdF9vY3RldF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpta2lfc2l6ZSkKK3sKKyAgICB1bnNpZ25lZCBpbnQgYmFzZV9ta2lfc3RhcnRfbG9jYXRpb24gPSAqcGt0X29jdGV0X2xlbjsKKyAgICB1bnNpZ25lZCBpbnQgbWtpX3N0YXJ0X2xvY2F0aW9uID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgdGFnX2xlbiA9IDA7CisgICAgdW5zaWduZWQgaW50IGkgPSAwOworCisgICAgLy8gRGV0ZXJtaW5lIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcgc2l6ZQorICAgIGlmIChzdHJlYW0tPnNlc3Npb25fa2V5c1swXS5ydHBfY2lwaGVyLT5hbGdvcml0aG0gPT0gU1JUUF9BRVNfR0NNXzEyOCB8fAorICAgICAgICBzdHJlYW0tPnNlc3Npb25fa2V5c1swXS5ydHBfY2lwaGVyLT5hbGdvcml0aG0gPT0gU1JUUF9BRVNfR0NNXzI1NikgeworICAgICAgICB0YWdfbGVuID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICB0YWdfbGVuID0gc3J0cF9hdXRoX2dldF90YWdfbGVuZ3RoKHN0cmVhbS0+c2Vzc2lvbl9rZXlzWzBdLnJ0cF9hdXRoKTsKKyAgICB9CisKKyAgICBpZiAodGFnX2xlbiA+IGJhc2VfbWtpX3N0YXJ0X2xvY2F0aW9uKSB7CisgICAgICAgICpta2lfc2l6ZSA9IDA7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGJhc2VfbWtpX3N0YXJ0X2xvY2F0aW9uIC09IHRhZ19sZW47CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgc3RyZWFtLT5udW1fbWFzdGVyX2tleXM7IGkrKykgeworICAgICAgICBpZiAoc3RyZWFtLT5zZXNzaW9uX2tleXNbaV0ubWtpX3NpemUgIT0gMCAmJgorICAgICAgICAgICAgc3RyZWFtLT5zZXNzaW9uX2tleXNbaV0ubWtpX3NpemUgPD0gYmFzZV9ta2lfc3RhcnRfbG9jYXRpb24pIHsKKyAgICAgICAgICAgICpta2lfc2l6ZSA9IHN0cmVhbS0+c2Vzc2lvbl9rZXlzW2ldLm1raV9zaXplOworICAgICAgICAgICAgbWtpX3N0YXJ0X2xvY2F0aW9uID0gYmFzZV9ta2lfc3RhcnRfbG9jYXRpb24gLSAqbWtpX3NpemU7CisKKyAgICAgICAgICAgIGlmIChtZW1jbXAoaGRyICsgbWtpX3N0YXJ0X2xvY2F0aW9uLCBzdHJlYW0tPnNlc3Npb25fa2V5c1tpXS5ta2lfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICpta2lfc2l6ZSkgPT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiAmc3RyZWFtLT5zZXNzaW9uX2tleXNbaV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqbWtpX3NpemUgPSAwOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9lc3RpbWF0ZV9pbmRleChzcnRwX3JkYnhfdCAqcmRieCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHJvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfeHRkX3NlcV9udW1fdCAqZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9zZXF1ZW5jZV9udW1iZXJfdCBzZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmRlbHRhKQoreworI2lmZGVmIE5PXzY0QklUX01BVEgKKyAgICB1aW50MzJfdCBpbnRlcm5hbF9wa3RfaWR4X3JlZHVjZWQ7CisgICAgdWludDMyX3QgZXh0ZXJuYWxfcGt0X2lkeF9yZWR1Y2VkOworICAgIHVpbnQzMl90IGludGVybmFsX3JvYzsKKyAgICB1aW50MzJfdCByb2NfZGlmZmVyZW5jZTsKKyNlbmRpZgorCisjaWZkZWYgTk9fNjRCSVRfTUFUSAorICAgICplc3QgPSAoc3J0cF94dGRfc2VxX251bV90KW1ha2U2NChyb2MgPj4gMTYsIChyb2MgPDwgMTYpIHwgc2VxKTsKKyAgICAqZGVsdGEgPSBsb3czMihlc3QpIC0gcmRieC0+aW5kZXg7CisjZWxzZQorICAgICplc3QgPSAoc3J0cF94dGRfc2VxX251bV90KSgoKHVpbnQ2NF90KXJvYykgPDwgMTYpIHwgc2VxOworICAgICpkZWx0YSA9IChpbnQpKCplc3QgLSByZGJ4LT5pbmRleCk7CisjZW5kaWYKKworICAgIGlmICgqZXN0ID4gcmRieC0+aW5kZXgpIHsKKyNpZmRlZiBOT182NEJJVF9NQVRICisgICAgICAgIGludGVybmFsX3JvYyA9ICh1aW50MzJfdCkocmRieC0+aW5kZXggPj4gMTYpOworICAgICAgICByb2NfZGlmZmVyZW5jZSA9IHJvYyAtIGludGVybmFsX3JvYzsKKyAgICAgICAgaWYgKHJvY19kaWZmZXJlbmNlID4gMSkgeworICAgICAgICAgICAgKmRlbHRhID0gMDsKKyAgICAgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfcGt0X2lkeF9hZHY7CisgICAgICAgIH0KKworICAgICAgICBpbnRlcm5hbF9wa3RfaWR4X3JlZHVjZWQgPSAodWludDMyX3QpKHJkYngtPmluZGV4ICYgMHhGRkZGKTsKKyAgICAgICAgZXh0ZXJuYWxfcGt0X2lkeF9yZWR1Y2VkID0gKHVpbnQzMl90KSgocm9jX2RpZmZlcmVuY2UgPDwgMTYpIHwgc2VxKTsKKworICAgICAgICBpZiAoZXh0ZXJuYWxfcGt0X2lkeF9yZWR1Y2VkIC0gaW50ZXJuYWxfcGt0X2lkeF9yZWR1Y2VkID4KKyAgICAgICAgICAgIHNlcV9udW1fbWVkaWFuKSB7CisgICAgICAgICAgICAqZGVsdGEgPSAwOworICAgICAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19wa3RfaWR4X2FkdjsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgaWYgKCplc3QgLSByZGJ4LT5pbmRleCA+IHNlcV9udW1fbWVkaWFuKSB7CisgICAgICAgICAgICAqZGVsdGEgPSAwOworICAgICAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19wa3RfaWR4X2FkdjsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfSBlbHNlIGlmICgqZXN0IDwgcmRieC0+aW5kZXgpIHsKKyNpZmRlZiBOT182NEJJVF9NQVRICisKKyAgICAgICAgaW50ZXJuYWxfcm9jID0gKHVpbnQzMl90KShyZGJ4LT5pbmRleCA+PiAxNik7CisgICAgICAgIHJvY19kaWZmZXJlbmNlID0gaW50ZXJuYWxfcm9jIC0gcm9jOworICAgICAgICBpZiAocm9jX2RpZmZlcmVuY2UgPiAxKSB7CisgICAgICAgICAgICAqZGVsdGEgPSAwOworICAgICAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19wa3RfaWR4X2FkdjsKKyAgICAgICAgfQorCisgICAgICAgIGludGVybmFsX3BrdF9pZHhfcmVkdWNlZCA9CisgICAgICAgICAgICAodWludDMyX3QpKChyb2NfZGlmZmVyZW5jZSA8PCAxNikgfCByZGJ4LT5pbmRleCAmIDB4RkZGRik7CisgICAgICAgIGV4dGVybmFsX3BrdF9pZHhfcmVkdWNlZCA9ICh1aW50MzJfdCkoc2VxKTsKKworICAgICAgICBpZiAoaW50ZXJuYWxfcGt0X2lkeF9yZWR1Y2VkIC0gZXh0ZXJuYWxfcGt0X2lkeF9yZWR1Y2VkID4KKyAgICAgICAgICAgIHNlcV9udW1fbWVkaWFuKSB7CisgICAgICAgICAgICAqZGVsdGEgPSAwOworICAgICAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19wa3RfaWR4X29sZDsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgaWYgKHJkYngtPmluZGV4IC0gKmVzdCA+IHNlcV9udW1fbWVkaWFuKSB7CisgICAgICAgICAgICAqZGVsdGEgPSAwOworICAgICAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19wa3RfaWR4X29sZDsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IHNydHBfZ2V0X2VzdF9wa3RfaW5kZXgoc3J0cF9oZHJfdCAqaGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9zdHJlYW1fY3R4X3QgKnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfeHRkX3NlcV9udW1fdCAqZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpkZWx0YSkKK3sKKyAgICBzcnRwX2Vycl9zdGF0dXNfdCByZXN1bHQgPSBzcnRwX2Vycl9zdGF0dXNfb2s7CisKKyAgICBpZiAoc3RyZWFtLT5wZW5kaW5nX3JvYykgeworICAgICAgICByZXN1bHQgPSBzcnRwX2VzdGltYXRlX2luZGV4KCZzdHJlYW0tPnJ0cF9yZGJ4LCBzdHJlYW0tPnBlbmRpbmdfcm9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzdCwgbnRvaHMoaGRyLT5zZXEpLCBkZWx0YSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogZXN0aW1hdGUgcGFja2V0IGluZGV4IGZyb20gc2VxLiBudW0uIGluIGhlYWRlciAqLworICAgICAgICAqZGVsdGEgPQorICAgICAgICAgICAgc3J0cF9yZGJ4X2VzdGltYXRlX2luZGV4KCZzdHJlYW0tPnJ0cF9yZGJ4LCBlc3QsIG50b2hzKGhkci0+c2VxKSk7CisgICAgfQorCisjaWZkZWYgTk9fNjRCSVRfTUFUSAorICAgIGRlYnVnX3ByaW50Mihtb2Rfc3J0cCwgImVzdGltYXRlZCB1X3BhY2tldCBpbmRleDogJTA4eCUwOHgiLCBoaWdoMzIoKmVzdCksCisgICAgICAgICAgICAgICAgIGxvdzMyKCplc3QpKTsKKyNlbHNlCisgICAgZGVidWdfcHJpbnQobW9kX3NydHAsICJlc3RpbWF0ZWQgdV9wYWNrZXQgaW5kZXg6ICUwMTZsbHgiLCAqZXN0KTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgb3V0Z29pbmcgU1JUUCBwYWNrZXRzIHdoaWxlIGluIEFFQUQgbW9kZSwKKyAqIHdoaWNoIGN1cnJlbnRseSBzdXBwb3J0cyBBRVMtR0NNIGVuY3J5cHRpb24uICBBbGwgcGFja2V0cyBhcmUKKyAqIGVuY3J5cHRlZCBhbmQgYXV0aGVudGljYXRlZC4KKyAqLworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IHNydHBfcHJvdGVjdF9hZWFkKHNydHBfY3R4X3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX3N0cmVhbV9jdHhfdCAqc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnJ0cF9oZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpwa3Rfb2N0ZXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfc2Vzc2lvbl9rZXlzX3QgKnNlc3Npb25fa2V5cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdXNlX21raSkKK3sKKyAgICBzcnRwX2hkcl90ICpoZHIgPSAoc3J0cF9oZHJfdCAqKXJ0cF9oZHI7CisgICAgdWludDMyX3QgKmVuY19zdGFydDsgICAgLyogcG9pbnRlciB0byBzdGFydCBvZiBlbmNyeXB0ZWQgcG9ydGlvbiAgKi8KKyAgICBpbnQgZW5jX29jdGV0X2xlbiA9IDA7ICAvKiBudW1iZXIgb2Ygb2N0ZXRzIGluIGVuY3J5cHRlZCBwb3J0aW9uICAqLworICAgIHNydHBfeHRkX3NlcV9udW1fdCBlc3Q7IC8qIGVzdGltYXRlZCB4dGRfc2VxX251bV90IG9mICpoZHIgICAgICAgICovCisgICAgaW50IGRlbHRhOyAgICAgICAgICAgICAgLyogZGVsdGEgb2YgbG9jYWwgcGt0IGlkeCBhbmQgdGhhdCBpbiBoZHIgKi8KKyAgICBzcnRwX2Vycl9zdGF0dXNfdCBzdGF0dXM7CisgICAgdWludDMyX3QgdGFnX2xlbjsKKyAgICB2MTI4X3QgaXY7CisgICAgdW5zaWduZWQgaW50IGFhZF9sZW47CisgICAgc3J0cF9oZHJfeHRuZF90ICp4dG5faGRyID0gTlVMTDsKKyAgICB1bnNpZ25lZCBpbnQgbWtpX3NpemUgPSAwOworICAgIHVpbnQ4X3QgKm1raV9sb2NhdGlvbiA9IE5VTEw7CisKKyAgICBkZWJ1Z19wcmludChtb2Rfc3J0cCwgImZ1bmN0aW9uIHNydHBfcHJvdGVjdF9hZWFkIiwgTlVMTCk7CisKKyAgICAvKgorICAgICAqIHVwZGF0ZSB0aGUga2V5IHVzYWdlIGxpbWl0LCBhbmQgY2hlY2sgaXQgdG8gbWFrZSBzdXJlIHRoYXQgd2UKKyAgICAgKiBkaWRuJ3QganVzdCBoaXQgZWl0aGVyIHRoZSBzb2Z0IGxpbWl0IG9yIHRoZSBoYXJkIGxpbWl0LCBhbmQgY2FsbAorICAgICAqIHRoZSBldmVudCBoYW5kbGVyIGlmIHdlIGhpdCBlaXRoZXIuCisgICAgICovCisgICAgc3dpdGNoIChzcnRwX2tleV9saW1pdF91cGRhdGUoc2Vzc2lvbl9rZXlzLT5saW1pdCkpIHsKKyAgICBjYXNlIHNydHBfa2V5X2V2ZW50X25vcm1hbDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBzcnRwX2tleV9ldmVudF9oYXJkX2xpbWl0OgorICAgICAgICBzcnRwX2hhbmRsZV9ldmVudChjdHgsIHN0cmVhbSwgZXZlbnRfa2V5X2hhcmRfbGltaXQpOworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2tleV9leHBpcmVkOworICAgIGNhc2Ugc3J0cF9rZXlfZXZlbnRfc29mdF9saW1pdDoKKyAgICBkZWZhdWx0OgorICAgICAgICBzcnRwX2hhbmRsZV9ldmVudChjdHgsIHN0cmVhbSwgZXZlbnRfa2V5X3NvZnRfbGltaXQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvKiBnZXQgdGFnIGxlbmd0aCBmcm9tIHN0cmVhbSAqLworICAgIHRhZ19sZW4gPSBzcnRwX2F1dGhfZ2V0X3RhZ19sZW5ndGgoc2Vzc2lvbl9rZXlzLT5ydHBfYXV0aCk7CisKKyAgICAvKgorICAgICAqIGZpbmQgc3RhcnRpbmcgcG9pbnQgZm9yIGVuY3J5cHRpb24gYW5kIGxlbmd0aCBvZiBkYXRhIHRvIGJlCisgICAgICogZW5jcnlwdGVkIC0gdGhlIGVuY3J5cHRlZCBwb3J0aW9uIHN0YXJ0cyBhZnRlciB0aGUgcnRwIGhlYWRlcgorICAgICAqIGV4dGVuc2lvbiwgaWYgcHJlc2VudDsgb3RoZXJ3aXNlLCBpdCBzdGFydHMgYWZ0ZXIgdGhlIGxhc3QgY3NyYywKKyAgICAgKiBpZiBhbnkgYXJlIHByZXNlbnQKKyAgICAgKi8KKyAgICBlbmNfc3RhcnQgPSAodWludDMyX3QgKiloZHIgKyB1aW50MzJzX2luX3J0cF9oZWFkZXIgKyBoZHItPmNjOworICAgIGlmIChoZHItPnggPT0gMSkgeworICAgICAgICB4dG5faGRyID0gKHNydHBfaGRyX3h0bmRfdCAqKWVuY19zdGFydDsKKyAgICAgICAgZW5jX3N0YXJ0ICs9IChudG9ocyh4dG5faGRyLT5sZW5ndGgpICsgMSk7CisgICAgfQorICAgIC8qIG5vdGU6IHRoZSBwYXNzZWQgc2l6ZSBpcyB3aXRob3V0IHRoZSBhdXRoIHRhZyAqLworICAgIGlmICghKCh1aW50OF90ICopZW5jX3N0YXJ0IDw9ICh1aW50OF90ICopaGRyICsgKnBrdF9vY3RldF9sZW4pKQorICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX3BhcnNlX2VycjsKKyAgICBlbmNfb2N0ZXRfbGVuID0KKyAgICAgICAgKGludCkoKnBrdF9vY3RldF9sZW4gLSAoKHVpbnQ4X3QgKillbmNfc3RhcnQgLSAodWludDhfdCAqKWhkcikpOworICAgIGlmIChlbmNfb2N0ZXRfbGVuIDwgMCkKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19wYXJzZV9lcnI7CisKKyAgICAvKgorICAgICAqIGVzdGltYXRlIHRoZSBwYWNrZXQgaW5kZXggdXNpbmcgdGhlIHN0YXJ0IG9mIHRoZSByZXBsYXkgd2luZG93CisgICAgICogYW5kIHRoZSBzZXF1ZW5jZSBudW1iZXIgZnJvbSB0aGUgaGVhZGVyCisgICAgICovCisgICAgZGVsdGEgPSBzcnRwX3JkYnhfZXN0aW1hdGVfaW5kZXgoJnN0cmVhbS0+cnRwX3JkYngsICZlc3QsIG50b2hzKGhkci0+c2VxKSk7CisgICAgc3RhdHVzID0gc3J0cF9yZGJ4X2NoZWNrKCZzdHJlYW0tPnJ0cF9yZGJ4LCBkZWx0YSk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICBpZiAoc3RhdHVzICE9IHNydHBfZXJyX3N0YXR1c19yZXBsYXlfZmFpbCB8fCAhc3RyZWFtLT5hbGxvd19yZXBlYXRfdHgpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7IC8qIHdlJ3ZlIGJlZW4gYXNrZWQgdG8gcmV1c2UgYW4gaW5kZXggKi8KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHNydHBfcmRieF9hZGRfaW5kZXgoJnN0cmVhbS0+cnRwX3JkYngsIGRlbHRhKTsKKyAgICB9CisKKyNpZmRlZiBOT182NEJJVF9NQVRICisgICAgZGVidWdfcHJpbnQyKG1vZF9zcnRwLCAiZXN0aW1hdGVkIHBhY2tldCBpbmRleDogJTA4eCUwOHgiLCBoaWdoMzIoZXN0KSwKKyAgICAgICAgICAgICAgICAgbG93MzIoZXN0KSk7CisjZWxzZQorICAgIGRlYnVnX3ByaW50KG1vZF9zcnRwLCAiZXN0aW1hdGVkIHBhY2tldCBpbmRleDogJTAxNmxseCIsIGVzdCk7CisjZW5kaWYKKworICAgIC8qCisgICAgICogQUVBRCB1c2VzIGEgbmV3IElWIGZvcm1hdGlvbiBtZXRob2QKKyAgICAgKi8KKyAgICBzcnRwX2NhbGNfYWVhZF9pdihzZXNzaW9uX2tleXMsICZpdiwgJmVzdCwgaGRyKTsKKy8qIHNoaWZ0IGVzdCwgcHV0IGludG8gbmV0d29yayBieXRlIG9yZGVyICovCisjaWZkZWYgTk9fNjRCSVRfTUFUSAorICAgIGVzdCA9IGJlNjRfdG9fY3B1KAorICAgICAgICBtYWtlNjQoKGhpZ2gzMihlc3QpIDw8IDE2KSB8IChsb3czMihlc3QpID4+IDE2KSwgbG93MzIoZXN0KSA8PCAxNikpOworI2Vsc2UKKyAgICBlc3QgPSBiZTY0X3RvX2NwdShlc3QgPDwgMTYpOworI2VuZGlmCisKKyAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9zZXRfaXYoc2Vzc2lvbl9rZXlzLT5ydHBfY2lwaGVyLCAodWludDhfdCAqKSZpdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9kaXJlY3Rpb25fZW5jcnlwdCk7CisgICAgaWYgKCFzdGF0dXMgJiYgc2Vzc2lvbl9rZXlzLT5ydHBfeHRuX2hkcl9jaXBoZXIpIHsKKyAgICAgICAgaXYudjMyWzBdID0gMDsKKyAgICAgICAgaXYudjMyWzFdID0gaGRyLT5zc3JjOworICAgICAgICBpdi52NjRbMV0gPSBlc3Q7CisgICAgICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX3NldF9pdihzZXNzaW9uX2tleXMtPnJ0cF94dG5faGRyX2NpcGhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90ICopJml2LCBzcnRwX2RpcmVjdGlvbl9lbmNyeXB0KTsKKyAgICB9CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2NpcGhlcl9mYWlsOworICAgIH0KKworICAgIGlmICh4dG5faGRyICYmIHNlc3Npb25fa2V5cy0+cnRwX3h0bl9oZHJfY2lwaGVyKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGV4dGVuc2lvbnMgaGVhZGVyIGVuY3J5cHRpb24gUkZDIDY5MDQKKyAgICAgICAgICovCisgICAgICAgIHN0YXR1cyA9IHNydHBfcHJvY2Vzc19oZWFkZXJfZW5jcnlwdGlvbihzdHJlYW0sIHh0bl9oZHIsIHNlc3Npb25fa2V5cyk7CisgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIFNldCB0aGUgQUFEIG92ZXIgdGhlIFJUUCBoZWFkZXIKKyAgICAgKi8KKyAgICBhYWRfbGVuID0gKHVpbnQ4X3QgKillbmNfc3RhcnQgLSAodWludDhfdCAqKWhkcjsKKyAgICBzdGF0dXMgPQorICAgICAgICBzcnRwX2NpcGhlcl9zZXRfYWFkKHNlc3Npb25fa2V5cy0+cnRwX2NpcGhlciwgKHVpbnQ4X3QgKiloZHIsIGFhZF9sZW4pOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIChzcnRwX2Vycl9zdGF0dXNfY2lwaGVyX2ZhaWwpOworICAgIH0KKworICAgIC8qIEVuY3J5cHQgdGhlIHBheWxvYWQgICovCisgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfZW5jcnlwdChzZXNzaW9uX2tleXMtPnJ0cF9jaXBoZXIsICh1aW50OF90ICopZW5jX3N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCAqKSZlbmNfb2N0ZXRfbGVuKTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfY2lwaGVyX2ZhaWw7CisgICAgfQorICAgIC8qCisgICAgICogSWYgd2UncmUgZG9pbmcgR0NNLCB3ZSBuZWVkIHRvIGdldCB0aGUgdGFnCisgICAgICogYW5kIGFwcGVuZCB0aGF0IHRvIHRoZSBvdXRwdXQKKyAgICAgKi8KKyAgICBzdGF0dXMgPQorICAgICAgICBzcnRwX2NpcGhlcl9nZXRfdGFnKHNlc3Npb25fa2V5cy0+cnRwX2NpcGhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKWVuY19zdGFydCArIGVuY19vY3RldF9sZW4sICZ0YWdfbGVuKTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHJldHVybiAoc3J0cF9lcnJfc3RhdHVzX2NpcGhlcl9mYWlsKTsKKyAgICB9CisKKyAgICBta2lfbG9jYXRpb24gPSAodWludDhfdCAqKWhkciArICpwa3Rfb2N0ZXRfbGVuICsgdGFnX2xlbjsKKyAgICBta2lfc2l6ZSA9IHNydHBfaW5qZWN0X21raShta2lfbG9jYXRpb24sIHNlc3Npb25fa2V5cywgdXNlX21raSk7CiAKICAgICAvKiBpbmNyZWFzZSB0aGUgcGFja2V0IGxlbmd0aCBieSB0aGUgbGVuZ3RoIG9mIHRoZSBhdXRoIHRhZyAqLwogICAgICpwa3Rfb2N0ZXRfbGVuICs9IHRhZ19sZW47Ci0gIH0KIAotICByZXR1cm4gZXJyX3N0YXR1c19vazsgIAorICAgIC8qIGluY3JlYXNlIHRoZSBwYWNrZXQgbGVuZ3RoIGJ5IHRoZSBsZW5ndGggb2YgdGhlIG1raV9zaXplICovCisgICAgKnBrdF9vY3RldF9sZW4gKz0gbWtpX3NpemU7CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQogCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIGluY29taW5nIFNSVFAgcGFja2V0cyB3aGlsZSBpbiBBRUFEIG1vZGUsCisgKiB3aGljaCBjdXJyZW50bHkgc3VwcG9ydHMgQUVTLUdDTSBlbmNyeXB0aW9uLiAgQWxsIHBhY2tldHMgYXJlCisgKiBlbmNyeXB0ZWQgYW5kIGF1dGhlbnRpY2F0ZWQuICBOb3RlLCB0aGUgYXV0aCB0YWcgaXMgYXQgdGhlIGVuZAorICogb2YgdGhlIHBhY2tldCBzdHJlYW0gYW5kIGlzIGF1dG9tYXRpY2FsbHkgY2hlY2tlZCBieSBHQ00KKyAqIHdoZW4gZGVjcnlwdGluZyB0aGUgcGF5bG9hZC4KKyAqLworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IHNydHBfdW5wcm90ZWN0X2FlYWQoc3J0cF9jdHhfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9zdHJlYW1fY3R4X3QgKnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZWx0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfeHRkX3NlcV9udW1fdCBlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzcnRwX2hkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqcGt0X29jdGV0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfc2Vzc2lvbl9rZXlzX3QgKnNlc3Npb25fa2V5cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBta2lfc2l6ZSkKK3sKKyAgICBzcnRwX2hkcl90ICpoZHIgPSAoc3J0cF9oZHJfdCAqKXNydHBfaGRyOworICAgIHVpbnQzMl90ICplbmNfc3RhcnQ7ICAgICAgICAgICAgLyogcG9pbnRlciB0byBzdGFydCBvZiBlbmNyeXB0ZWQgcG9ydGlvbiAgKi8KKyAgICB1bnNpZ25lZCBpbnQgZW5jX29jdGV0X2xlbiA9IDA7IC8qIG51bWJlciBvZiBvY3RldHMgaW4gZW5jcnlwdGVkIHBvcnRpb24gKi8KKyAgICB2MTI4X3QgaXY7CisgICAgc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdHVzOworICAgIGludCB0YWdfbGVuOworICAgIHVuc2lnbmVkIGludCBhYWRfbGVuOworICAgIHNydHBfaGRyX3h0bmRfdCAqeHRuX2hkciA9IE5VTEw7CiAKLWVycl9zdGF0dXNfdAotc3J0cF91bnByb3RlY3Qoc3J0cF9jdHhfdCAqY3R4LCB2b2lkICpzcnRwX2hkciwgaW50ICpwa3Rfb2N0ZXRfbGVuKSB7Ci0gIHNydHBfaGRyX3QgKmhkciA9IHNydHBfaGRyOwotICB1aW50MzJfdCAqZW5jX3N0YXJ0OyAgICAgIC8qIHBvaW50ZXIgdG8gc3RhcnQgb2YgZW5jcnlwdGVkIHBvcnRpb24gICovCi0gIHVpbnQzMl90ICphdXRoX3N0YXJ0OyAgICAgLyogcG9pbnRlciB0byBzdGFydCBvZiBhdXRoLiBwb3J0aW9uICAgICAgKi8KLSAgdWludDMyX3QgZW5jX29jdGV0X2xlbiA9IDA7LyogbnVtYmVyIG9mIG9jdGV0cyBpbiBlbmNyeXB0ZWQgcG9ydGlvbiAqLwotICBvY3RldF90ICphdXRoX3RhZyA9IE5VTEw7IC8qIGxvY2F0aW9uIG9mIGF1dGhfdGFnIHdpdGhpbiBwYWNrZXQgICAgICovCi0gIHh0ZF9zZXFfbnVtX3QgZXN0OyAgICAgICAgLyogZXN0aW1hdGVkIHh0ZF9zZXFfbnVtX3Qgb2YgKmhkciAgICAgICAgKi8KLSAgaW50IGRlbHRhOyAgICAgICAgICAgICAgICAvKiBkZWx0YSBvZiBsb2NhbCBwa3QgaWR4IGFuZCB0aGF0IGluIGhkciAqLwotICB2MTI4X3QgaXY7Ci0gIGVycl9zdGF0dXNfdCBzdGF0dXM7Ci0gIHNydHBfc3RyZWFtX2N0eF90ICpzdHJlYW07Ci0gIG9jdGV0X3QgdG1wX3RhZ1tTUlRQX01BWF9UQUdfTEVOXTsKLSAgaW50IHRhZ19sZW4sIHByZWZpeF9sZW47CisgICAgZGVidWdfcHJpbnQobW9kX3NydHAsICJmdW5jdGlvbiBzcnRwX3VucHJvdGVjdF9hZWFkIiwgTlVMTCk7CiAKLSAgZGVidWdfcHJpbnQobW9kX3NydHAsICJmdW5jdGlvbiBzcnRwX3VucHJvdGVjdCIsIE5VTEwpOwotCi0gIC8qIHdlIGFzc3VtZSB0aGUgaGRyIGlzIDMyLWJpdCBhbGlnbmVkIHRvIHN0YXJ0ICovCi0KLSAgLyogY2hlY2sgdGhlIHBhY2tldCBsZW5ndGggLSBpdCBtdXN0IGF0IGxlYXN0IGNvbnRhaW4gYSBmdWxsIGhlYWRlciAqLwotICBpZiAoKnBrdF9vY3RldF9sZW4gPCBvY3RldHNfaW5fcnRwX2hlYWRlcikKLSAgICByZXR1cm4gZXJyX3N0YXR1c19iYWRfcGFyYW07Ci0KLSAgLyoKLSAgICogbG9vayB1cCBzc3JjIGluIHNydHBfc3RyZWFtIGxpc3QsIGFuZCBwcm9jZXNzIHRoZSBwYWNrZXQgd2l0aCAKLSAgICogdGhlIGFwcHJvcHJpYXRlIHN0cmVhbS4gIGlmIHdlIGhhdmVuJ3Qgc2VlbiB0aGlzIHN0cmVhbSBiZWZvcmUsCi0gICAqIHRoZXJlJ3Mgb25seSBvbmUga2V5IGZvciB0aGlzIHNydHBfc2Vzc2lvbiwgYW5kIHRoZSBjaXBoZXIKLSAgICogc3VwcG9ydHMga2V5LXNoYXJpbmcsIHRoZW4gd2UgYXNzdW1lIHRoYXQgYSBuZXcgc3RyZWFtIHVzaW5nCi0gICAqIHRoYXQga2V5IGhhcyBqdXN0IHN0YXJ0ZWQgdXAKLSAgICovCi0gIHN0cmVhbSA9IHNydHBfZ2V0X3N0cmVhbShjdHgsIGhkci0+c3NyYyk7Ci0gIGlmIChzdHJlYW0gPT0gTlVMTCkgewotICAgIGlmIChjdHgtPnN0cmVhbV90ZW1wbGF0ZSAhPSBOVUxMKSB7Ci0gICAgICBzdHJlYW0gPSBjdHgtPnN0cmVhbV90ZW1wbGF0ZTsKLSAgICAgIGRlYnVnX3ByaW50KG1vZF9zcnRwLCAidXNpbmcgcHJvdmlzaW9uYWwgc3RyZWFtIChTU1JDOiAweCUwOHgpIiwKLQkJICBoZHItPnNzcmMpOwotICAgICAgCi0gICAgICAvKiAKLSAgICAgICAqIHNldCBlc3RpbWF0ZWQgcGFja2V0IGluZGV4IHRvIHNlcXVlbmNlIG51bWJlciBmcm9tIGhlYWRlciwKLSAgICAgICAqIGFuZCBzZXQgZGVsdGEgZXF1YWwgdG8gdGhlIHNhbWUgdmFsdWUKLSAgICAgICAqLwogI2lmZGVmIE5PXzY0QklUX01BVEgKLSAgICAgIGVzdCA9ICh4dGRfc2VxX251bV90KSBtYWtlNjQoMCxudG9ocyhoZHItPnNlcSkpOwotICAgICAgZGVsdGEgPSBsb3czMihlc3QpOworICAgIGRlYnVnX3ByaW50Mihtb2Rfc3J0cCwgImVzdGltYXRlZCB1X3BhY2tldCBpbmRleDogJTA4eCUwOHgiLCBoaWdoMzIoZXN0KSwKKyAgICAgICAgICAgICAgICAgbG93MzIoZXN0KSk7CiAjZWxzZQotICAgICAgZXN0ID0gKHh0ZF9zZXFfbnVtX3QpIG50b2hzKGhkci0+c2VxKTsKLSAgICAgIGRlbHRhID0gZXN0OwotI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgIAotICAgICAgLyoKLSAgICAgICAqIG5vIHN0cmVhbSBjb3JyZXNwb25kaW5nIHRvIFNTUkMgZm91bmQsIGFuZCB3ZSBkb24ndCBkbwotICAgICAgICoga2V5LXNoYXJpbmcsIHNvIHJldHVybiBhbiBlcnJvcgotICAgICAgICovCi0gICAgICByZXR1cm4gZXJyX3N0YXR1c19ub19jdHg7Ci0gICAgfQotICB9IGVsc2UgewotICAKLSAgICAvKiBlc3RpbWF0ZSBwYWNrZXQgaW5kZXggZnJvbSBzZXEuIG51bS4gaW4gaGVhZGVyICovCi0gICAgZGVsdGEgPSByZGJ4X2VzdGltYXRlX2luZGV4KCZzdHJlYW0tPnJ0cF9yZGJ4LCAmZXN0LCBudG9ocyhoZHItPnNlcSkpOwotICAgIAotICAgIC8qIGNoZWNrIHJlcGxheSBkYXRhYmFzZSAqLwotICAgIHN0YXR1cyA9IHJkYnhfY2hlY2soJnN0cmVhbS0+cnRwX3JkYngsIGRlbHRhKTsKLSAgICBpZiAoc3RhdHVzKQotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgfQotCi0gIGRlYnVnX3ByaW50KG1vZF9zcnRwLCAiZXN0aW1hdGVkIHBhY2tldCBpbmRleDogJTAxNmxseCIsIGVzdCk7Ci0KLSAgLyogCi0gICAqIHVwZGF0ZSB0aGUga2V5IHVzYWdlIGxpbWl0LCBhbmQgY2hlY2sgaXQgdG8gbWFrZSBzdXJlIHRoYXQgd2UKLSAgICogZGlkbid0IGp1c3QgaGl0IGVpdGhlciB0aGUgc29mdCBsaW1pdCBvciB0aGUgaGFyZCBsaW1pdCwgYW5kIGNhbGwKLSAgICogdGhlIGV2ZW50IGhhbmRsZXIgaWYgd2UgaGl0IGVpdGhlci4KLSAgICovCi0gIHN3aXRjaChrZXlfbGltaXRfdXBkYXRlKHN0cmVhbS0+bGltaXQpKSB7Ci0gIGNhc2Uga2V5X2V2ZW50X25vcm1hbDoKLSAgICBicmVhazsKLSAgY2FzZSBrZXlfZXZlbnRfc29mdF9saW1pdDogCi0gICAgc3J0cF9oYW5kbGVfZXZlbnQoY3R4LCBzdHJlYW0sIGV2ZW50X2tleV9zb2Z0X2xpbWl0KTsKLSAgICBicmVhazsgCi0gIGNhc2Uga2V5X2V2ZW50X2hhcmRfbGltaXQ6Ci0gICAgc3J0cF9oYW5kbGVfZXZlbnQoY3R4LCBzdHJlYW0sIGV2ZW50X2tleV9oYXJkX2xpbWl0KTsKLSAgICByZXR1cm4gZXJyX3N0YXR1c19rZXlfZXhwaXJlZDsKLSAgZGVmYXVsdDoKLSAgICBicmVhazsKLSAgfQotCi0gIC8qIGdldCB0YWcgbGVuZ3RoIGZyb20gc3RyZWFtICovCi0gIHRhZ19sZW4gPSBhdXRoX2dldF90YWdfbGVuZ3RoKHN0cmVhbS0+cnRwX2F1dGgpOyAKLQotICAvKiAKLSAgICogc2V0IHRoZSBjaXBoZXIncyBJViBwcm9wZXJseSwgZGVwZW5kaW5nIG9uIHdoYXRldmVyIGNpcGhlciB3ZQotICAgKiBoYXBwZW4gdG8gYmUgdXNpbmcKLSAgICovCi0gIGlmIChzdHJlYW0tPnJ0cF9jaXBoZXItPnR5cGUgPT0gJmFlc19pY20pIHsKLQotICAgIC8qIGFlcyBjb3VudGVyIG1vZGUgKi8KLSAgICBpdi52MzJbMF0gPSAwOwotICAgIGl2LnYzMlsxXSA9IGhkci0+c3NyYzsgIC8qIHN0aWxsIGluIG5ldHdvcmsgb3JkZXIgKi8KLSNpZmRlZiBOT182NEJJVF9NQVRICi0gICAgaXYudjY0WzFdID0gYnN3YXBfNjQobWFrZTY0KChoaWdoMzIoZXN0KSA8PCAxNikgfCAobG93MzIoZXN0KSA+PiAxNiksCi0JCQkgICAgICAgICBsb3czMihlc3QpIDw8IDE2KSk7Ci0jZWxzZQotICAgIGl2LnY2NFsxXSA9IGJzd2FwXzY0KGVzdCA8PCAxNik7Ci0jZW5kaWYKLSAgICBzdGF0dXMgPSBhZXNfaWNtX3NldF9pdihzdHJlYW0tPnJ0cF9jaXBoZXItPnN0YXRlLCAmaXYpOwotICB9IGVsc2UgeyAgCi0gICAgCi0gICAgLyogbm8gcGFydGljdWxhciBmb3JtYXQgLSBzZXQgdGhlIGl2IHRvIHRoZSBwYWtjZXQgaW5kZXggKi8gIAotI2lmZGVmIE5PXzY0QklUX01BVEgKLSAgICBpdi52MzJbMF0gPSAwOwotICAgIGl2LnYzMlsxXSA9IDA7Ci0jZWxzZQotICAgIGl2LnY2NFswXSA9IDA7Ci0jZW5kaWYKLSAgICBpdi52NjRbMV0gPSBic3dhcF82NChlc3QpOwotICAgIHN0YXR1cyA9IGNpcGhlcl9zZXRfaXYoc3RyZWFtLT5ydHBfY2lwaGVyLCAmaXYpOwotICB9Ci0gIGlmIChzdGF0dXMpCi0gICAgcmV0dXJuIGVycl9zdGF0dXNfY2lwaGVyX2ZhaWw7Ci0KLSAgLyogc2hpZnQgZXN0LCBwdXQgaW50byBuZXR3b3JrIGJ5dGUgb3JkZXIgKi8KLSNpZmRlZiBOT182NEJJVF9NQVRICi0gIGVzdCA9IGJzd2FwXzY0KG1ha2U2NCgoaGlnaDMyKGVzdCkgPDwgMTYpIHwKLQkJCQkJICAgIChsb3czMihlc3QpID4+IDE2KSwKLQkJCQkJICAgIGxvdzMyKGVzdCkgPDwgMTYpKTsKLSNlbHNlCi0gIGVzdCA9IGJzd2FwXzY0KGVzdCA8PCAxNik7CisgICAgZGVidWdfcHJpbnQobW9kX3NydHAsICJlc3RpbWF0ZWQgdV9wYWNrZXQgaW5kZXg6ICUwMTZsbHgiLCBlc3QpOwogI2VuZGlmCiAKLSAgLyoKLSAgICogZmluZCBzdGFydGluZyBwb2ludCBmb3IgZGVjcnlwdGlvbiBhbmQgbGVuZ3RoIG9mIGRhdGEgdG8gYmUKLSAgICogZGVjcnlwdGVkIC0gdGhlIGVuY3J5cHRlZCBwb3J0aW9uIHN0YXJ0cyBhZnRlciB0aGUgcnRwIGhlYWRlcgotICAgKiBleHRlbnNpb24sIGlmIHByZXNlbnQ7IG90aGVyd2lzZSwgaXQgc3RhcnRzIGFmdGVyIHRoZSBsYXN0IGNzcmMsCi0gICAqIGlmIGFueSBhcmUgcHJlc2VudAotICAgKgotICAgKiBpZiB3ZSdyZSBub3QgcHJvdmlkaW5nIGNvbmZpZGVudGlhbGl0eSwgc2V0IGVuY19zdGFydCB0byBOVUxMCi0gICAqLwotICBpZiAoc3RyZWFtLT5ydHBfc2VydmljZXMgJiBzZWNfc2Vydl9jb25mKSB7Ci0gICAgZW5jX3N0YXJ0ID0gKHVpbnQzMl90ICopaGRyICsgdWludDMyc19pbl9ydHBfaGVhZGVyICsgaGRyLT5jYzsgIAotICAgIGlmIChoZHItPnggPT0gMSkgCi0gICAgICBlbmNfc3RhcnQgKz0gKChzcnRwX2hkcl94dG5kX3QgKillbmNfc3RhcnQpLT5sZW5ndGg7Ci0gICAgZW5jX29jdGV0X2xlbiA9ICpwa3Rfb2N0ZXRfbGVuIC0gdGFnX2xlbgotICAgICAgLSAoKGVuY19zdGFydCAtICh1aW50MzJfdCAqKWhkcikgPDwgMik7Ci0gIH0gZWxzZSB7Ci0gICAgZW5jX3N0YXJ0ID0gTlVMTDsKLSAgfQorICAgIC8qIGdldCB0YWcgbGVuZ3RoIGZyb20gc3RyZWFtICovCisgICAgdGFnX2xlbiA9IHNydHBfYXV0aF9nZXRfdGFnX2xlbmd0aChzZXNzaW9uX2tleXMtPnJ0cF9hdXRoKTsKIAotICAvKiAKLSAgICogaWYgd2UncmUgcHJvdmlkaW5nIGF1dGhlbnRpY2F0aW9uLCBzZXQgdGhlIGF1dGhfc3RhcnQgYW5kIGF1dGhfdGFnCi0gICAqIHBvaW50ZXJzIHRvIHRoZSBwcm9wZXIgbG9jYXRpb25zOyBvdGhlcndpc2UsIHNldCBhdXRoX3N0YXJ0IHRvIE5VTEwKLSAgICogdG8gaW5kaWNhdGUgdGhhdCBubyBhdXRoZW50aWNhdGlvbiBpcyBuZWVkZWQKLSAgICovCi0gIGlmIChzdHJlYW0tPnJ0cF9zZXJ2aWNlcyAmIHNlY19zZXJ2X2F1dGgpIHsKLSAgICBhdXRoX3N0YXJ0ID0gKHVpbnQzMl90ICopaGRyOwotICAgIGF1dGhfdGFnID0gKG9jdGV0X3QgKiloZHIgKyAqcGt0X29jdGV0X2xlbiAtIHRhZ19sZW47Ci0gIH0gZWxzZSB7Ci0gICAgYXV0aF9zdGFydCA9IE5VTEw7Ci0gICAgYXV0aF90YWcgPSBOVUxMOwotICB9IAotCi0gIC8qCi0gICAqIGlmIHdlIGV4cGVjdCBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uLCBydW4gdGhlIGF1dGhlbnRpY2F0aW9uCi0gICAqIGZ1bmN0aW9uIGFuZCBjb21wYXJlIHRoZSByZXN1bHQgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIGF1dGhfdGFnCi0gICAqLwotICBpZiAoYXV0aF9zdGFydCkgeyAgICAgICAgCi0KLSAgICAvKiAKLSAgICAgKiBpZiB3ZSdyZSB1c2luZyBhIHVuaXZlcnNhbCBoYXNoLCB0aGVuIHdlIG5lZWQgdG8gY29tcHV0ZSB0aGUKLSAgICAgKiBrZXlzdHJlYW0gcHJlZml4IGZvciBlbmNyeXB0aW5nIHRoZSB1bml2ZXJzYWwgaGFzaCBvdXRwdXQKLSAgICAgKgotICAgICAqIGlmIHRoZSBrZXlzdHJlYW0gcHJlZml4IGxlbmd0aCBpcyB6ZXJvLCB0aGVuIHdlIGtub3cgdGhhdAotICAgICAqIHRoZSBhdXRoZW50aWNhdG9yIGlzbid0IHVzaW5nIGEgdW5pdmVyc2FsIGhhc2ggZnVuY3Rpb24KLSAgICAgKi8gIAotICAgIGlmIChzdHJlYW0tPnJ0cF9hdXRoLT5wcmVmaXhfbGVuICE9IDApIHsKLSAgICAgIAotICAgICAgcHJlZml4X2xlbiA9IGF1dGhfZ2V0X3ByZWZpeF9sZW5ndGgoc3RyZWFtLT5ydHBfYXV0aCk7ICAgIAotICAgICAgc3RhdHVzID0gY2lwaGVyX291dHB1dChzdHJlYW0tPnJ0cF9jaXBoZXIsIHRtcF90YWcsIHByZWZpeF9sZW4pOwotICAgICAgZGVidWdfcHJpbnQobW9kX3NydHAsICJrZXlzdHJlYW0gcHJlZml4OiAlcyIsIAotCQkgIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKHRtcF90YWcsIHByZWZpeF9sZW4pKTsKLSAgICAgIGlmIChzdGF0dXMpCi0JcmV0dXJuIGVycl9zdGF0dXNfY2lwaGVyX2ZhaWw7Ci0gICAgfSAKLQotICAgIC8qIGluaXRpYWxpemUgYXV0aCBmdW5jIGNvbnRleHQgKi8KLSAgICBzdGF0dXMgPSBhdXRoX3N0YXJ0KHN0cmVhbS0+cnRwX2F1dGgpOwotICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7Ci0KLSAgICAvKiBub3cgY29tcHV0ZSBhdXRoIGZ1bmN0aW9uIG92ZXIgcGFja2V0ICovCi0gICAgc3RhdHVzID0gYXV0aF91cGRhdGUoc3RyZWFtLT5ydHBfYXV0aCwgKG9jdGV0X3QgKilhdXRoX3N0YXJ0LCAgCi0JCQkgKnBrdF9vY3RldF9sZW4gLSB0YWdfbGVuKTsKLQotICAgIC8qIHJ1biBhdXRoIGZ1bmMgb3ZlciBST0MsIHRoZW4gd3JpdGUgdG1wIHRhZyAqLwotICAgIHN0YXR1cyA9IGF1dGhfY29tcHV0ZShzdHJlYW0tPnJ0cF9hdXRoLCAob2N0ZXRfdCAqKSZlc3QsIDQsIHRtcF90YWcpOyAgCi0KLSAgICBkZWJ1Z19wcmludChtb2Rfc3J0cCwgImNvbXB1dGVkIGF1dGggdGFnOiAgICAlcyIsIAotCQlvY3RldF9zdHJpbmdfaGV4X3N0cmluZyh0bXBfdGFnLCB0YWdfbGVuKSk7Ci0gICAgZGVidWdfcHJpbnQobW9kX3NydHAsICJwYWNrZXQgYXV0aCB0YWc6ICAgICAgJXMiLCAKLQkJb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoYXV0aF90YWcsIHRhZ19sZW4pKTsKLSAgICBpZiAoc3RhdHVzKQotICAgICAgcmV0dXJuIGVycl9zdGF0dXNfYXV0aF9mYWlsOyAgIAotCi0gICAgaWYgKG9jdGV0X3N0cmluZ19pc19lcSh0bXBfdGFnLCBhdXRoX3RhZywgdGFnX2xlbikpCi0gICAgICByZXR1cm4gZXJyX3N0YXR1c19hdXRoX2ZhaWw7Ci0gIH0KLQotICAvKiBpZiB3ZSdyZSBlbmNyeXB0aW5nLCBhZGQga2V5c3RyZWFtIGludG8gY2lwaGVydGV4dCAqLwotICBpZiAoZW5jX3N0YXJ0KSB7Ci0gICAgc3RhdHVzID0gY2lwaGVyX2VuY3J5cHQoc3RyZWFtLT5ydHBfY2lwaGVyLCAKLQkJCSAgICAob2N0ZXRfdCAqKWVuY19zdGFydCwgJmVuY19vY3RldF9sZW4pOwotICAgIGlmIChzdGF0dXMpCi0gICAgICByZXR1cm4gZXJyX3N0YXR1c19jaXBoZXJfZmFpbDsKLSAgfQotCi0gIC8qIAotICAgKiB2ZXJpZnkgdGhhdCBzdHJlYW0gaXMgZm9yIHJlY2VpdmVkIHRyYWZmaWMgLSB0aGlzIGNoZWNrIHdpbGwKLSAgICogZGV0ZWN0IFNTUkMgY29sbGlzaW9ucywgc2luY2UgYSBzdHJlYW0gdGhhdCBhcHBlYXJzIGluIGJvdGgKLSAgICogc3J0cF9wcm90ZWN0KCkgYW5kIHNydHBfdW5wcm90ZWN0KCkgd2lsbCBmYWlsIHRoaXMgdGVzdCBpbiBvbmUgb2YKLSAgICogdGhvc2UgZnVuY3Rpb25zLgotICAgKgotICAgKiB3ZSBkbyB0aGlzIGNoZWNrICphZnRlciogdGhlIGF1dGhlbnRpY2F0aW9uIGNoZWNrLCBzbyB0aGF0IHRoZQotICAgKiBsYXR0ZXIgY2hlY2sgd2lsbCBjYXRjaCBhbnkgYXR0ZW1wdHMgdG8gZm9vbCB1cyBpbnRvIHRoaW5raW5nCi0gICAqIHRoYXQgd2UndmUgZ290IGEgY29sbGlzaW9uCi0gICAqLwotICBpZiAoc3RyZWFtLT5kaXJlY3Rpb24gIT0gZGlyX3NydHBfcmVjZWl2ZXIpIHsKLSAgICBpZiAoc3RyZWFtLT5kaXJlY3Rpb24gPT0gZGlyX3Vua25vd24pIHsKLSAgICAgIHN0cmVhbS0+ZGlyZWN0aW9uID0gZGlyX3NydHBfcmVjZWl2ZXI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNydHBfaGFuZGxlX2V2ZW50KGN0eCwgc3RyZWFtLCBldmVudF9zc3JjX2NvbGxpc2lvbik7Ci0gICAgfQotICB9Ci0KLSAgLyogCi0gICAqIGlmIHRoZSBzdHJlYW0gaXMgYSAncHJvdmlzaW9uYWwnIG9uZSwgaW4gd2hpY2ggdGhlIHRlbXBsYXRlIGNvbnRleHQKLSAgICogaXMgdXNlZCwgdGhlbiB3ZSBuZWVkIHRvIGFsbG9jYXRlIGEgbmV3IHN0cmVhbSBhdCB0aGlzIHBvaW50LCBzaW5jZQotICAgKiB0aGUgYXV0aGVudGljYXRpb24gcGFzc2VkCi0gICAqLwotICBpZiAoc3RyZWFtID09IGN0eC0+c3RyZWFtX3RlbXBsYXRlKSB7ICAKLSAgICBzcnRwX3N0cmVhbV9jdHhfdCAqbmV3X3N0cmVhbTsKLQotICAgIC8qIAotICAgICAqIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3IHN0cmVhbSAKLSAgICAgKiAKLSAgICAgKiBub3RlIHRoYXQgd2UgaW5kaWNhdGUgZmFpbHVyZSBpZiB3ZSBjYW4ndCBhbGxvY2F0ZSB0aGUgbmV3Ci0gICAgICogc3RyZWFtLCBhbmQgc29tZSBpbXBsZW1lbnRhdGlvbnMgd2lsbCB3YW50IHRvIG5vdCByZXR1cm4KLSAgICAgKiBmYWlsdXJlIGhlcmUKKyAgICAvKgorICAgICAqIEFFQUQgdXNlcyBhIG5ldyBJViBmb3JtYXRpb24gbWV0aG9kCiAgICAgICovCi0gICAgc3RhdHVzID0gc3J0cF9zdHJlYW1fY2xvbmUoY3R4LT5zdHJlYW1fdGVtcGxhdGUsIGhkci0+c3NyYywgJm5ld19zdHJlYW0pOyAKKyAgICBzcnRwX2NhbGNfYWVhZF9pdihzZXNzaW9uX2tleXMsICZpdiwgJmVzdCwgaGRyKTsKKyAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9zZXRfaXYoc2Vzc2lvbl9rZXlzLT5ydHBfY2lwaGVyLCAodWludDhfdCAqKSZpdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9kaXJlY3Rpb25fZGVjcnlwdCk7CisgICAgaWYgKCFzdGF0dXMgJiYgc2Vzc2lvbl9rZXlzLT5ydHBfeHRuX2hkcl9jaXBoZXIpIHsKKyAgICAgICAgaXYudjMyWzBdID0gMDsKKyAgICAgICAgaXYudjMyWzFdID0gaGRyLT5zc3JjOworI2lmZGVmIE5PXzY0QklUX01BVEgKKyAgICAgICAgaXYudjY0WzFdID0gYmU2NF90b19jcHUoCisgICAgICAgICAgICBtYWtlNjQoKGhpZ2gzMihlc3QpIDw8IDE2KSB8IChsb3czMihlc3QpID4+IDE2KSwgbG93MzIoZXN0KSA8PCAxNikpOworI2Vsc2UKKyAgICAgICAgaXYudjY0WzFdID0gYmU2NF90b19jcHUoZXN0IDw8IDE2KTsKKyNlbmRpZgorICAgICAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9zZXRfaXYoc2Vzc2lvbl9rZXlzLT5ydHBfeHRuX2hkcl9jaXBoZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKSZpdiwgc3J0cF9kaXJlY3Rpb25fZW5jcnlwdCk7CisgICAgfQorICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19jaXBoZXJfZmFpbDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGZpbmQgc3RhcnRpbmcgcG9pbnQgZm9yIGRlY3J5cHRpb24gYW5kIGxlbmd0aCBvZiBkYXRhIHRvIGJlCisgICAgICogZGVjcnlwdGVkIC0gdGhlIGVuY3J5cHRlZCBwb3J0aW9uIHN0YXJ0cyBhZnRlciB0aGUgcnRwIGhlYWRlcgorICAgICAqIGV4dGVuc2lvbiwgaWYgcHJlc2VudDsgb3RoZXJ3aXNlLCBpdCBzdGFydHMgYWZ0ZXIgdGhlIGxhc3QgY3NyYywKKyAgICAgKiBpZiBhbnkgYXJlIHByZXNlbnQKKyAgICAgKi8KKyAgICBlbmNfc3RhcnQgPSAodWludDMyX3QgKiloZHIgKyB1aW50MzJzX2luX3J0cF9oZWFkZXIgKyBoZHItPmNjOworICAgIGlmIChoZHItPnggPT0gMSkgeworICAgICAgICB4dG5faGRyID0gKHNydHBfaGRyX3h0bmRfdCAqKWVuY19zdGFydDsKKyAgICAgICAgZW5jX3N0YXJ0ICs9IChudG9ocyh4dG5faGRyLT5sZW5ndGgpICsgMSk7CisgICAgfQorICAgIGlmICghKCh1aW50OF90ICopZW5jX3N0YXJ0IDw9CisgICAgICAgICAgKHVpbnQ4X3QgKiloZHIgKyAoKnBrdF9vY3RldF9sZW4gLSB0YWdfbGVuIC0gbWtpX3NpemUpKSkKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19wYXJzZV9lcnI7CisgICAgLyoKKyAgICAgKiBXZSBwYXNzIHRoZSB0YWcgZG93biB0byB0aGUgY2lwaGVyIHdoZW4gZG9pbmcgR0NNIG1vZGUKKyAgICAgKi8KKyAgICBlbmNfb2N0ZXRfbGVuID0gKHVuc2lnbmVkIGludCkoKnBrdF9vY3RldF9sZW4gLSBta2lfc2l6ZSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCAqKWVuY19zdGFydCAtICh1aW50OF90ICopaGRyKSk7CisKKyAgICAvKgorICAgICAqIFNhbml0eSBjaGVjayB0aGUgZW5jcnlwdGVkIHBheWxvYWQgbGVuZ3RoIGFnYWluc3QKKyAgICAgKiB0aGUgdGFnIHNpemUuICBJdCBtdXN0IGFsd2F5cyBiZSBhdCBsZWFzdCBhcyBsYXJnZQorICAgICAqIGFzIHRoZSB0YWcgbGVuZ3RoLgorICAgICAqLworICAgIGlmIChlbmNfb2N0ZXRfbGVuIDwgKHVuc2lnbmVkIGludCl0YWdfbGVuKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfY2lwaGVyX2ZhaWw7CisgICAgfQorCisgICAgLyoKKyAgICAgKiB1cGRhdGUgdGhlIGtleSB1c2FnZSBsaW1pdCwgYW5kIGNoZWNrIGl0IHRvIG1ha2Ugc3VyZSB0aGF0IHdlCisgICAgICogZGlkbid0IGp1c3QgaGl0IGVpdGhlciB0aGUgc29mdCBsaW1pdCBvciB0aGUgaGFyZCBsaW1pdCwgYW5kIGNhbGwKKyAgICAgKiB0aGUgZXZlbnQgaGFuZGxlciBpZiB3ZSBoaXQgZWl0aGVyLgorICAgICAqLworICAgIHN3aXRjaCAoc3J0cF9rZXlfbGltaXRfdXBkYXRlKHNlc3Npb25fa2V5cy0+bGltaXQpKSB7CisgICAgY2FzZSBzcnRwX2tleV9ldmVudF9ub3JtYWw6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugc3J0cF9rZXlfZXZlbnRfc29mdF9saW1pdDoKKyAgICAgICAgc3J0cF9oYW5kbGVfZXZlbnQoY3R4LCBzdHJlYW0sIGV2ZW50X2tleV9zb2Z0X2xpbWl0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBzcnRwX2tleV9ldmVudF9oYXJkX2xpbWl0OgorICAgICAgICBzcnRwX2hhbmRsZV9ldmVudChjdHgsIHN0cmVhbSwgZXZlbnRfa2V5X2hhcmRfbGltaXQpOworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2tleV9leHBpcmVkOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8qCisgICAgICogU2V0IHRoZSBBQUQgZm9yIEFFUy1HQ00sIHdoaWNoIGlzIHRoZSBSVFAgaGVhZGVyCisgICAgICovCisgICAgYWFkX2xlbiA9ICh1aW50OF90ICopZW5jX3N0YXJ0IC0gKHVpbnQ4X3QgKiloZHI7CisgICAgc3RhdHVzID0KKyAgICAgICAgc3J0cF9jaXBoZXJfc2V0X2FhZChzZXNzaW9uX2tleXMtPnJ0cF9jaXBoZXIsICh1aW50OF90ICopaGRyLCBhYWRfbGVuKTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHJldHVybiAoc3J0cF9lcnJfc3RhdHVzX2NpcGhlcl9mYWlsKTsKKyAgICB9CisKKyAgICAvKiBEZWNyeXB0IHRoZSBjaXBoZXJ0ZXh0LiAgVGhpcyBhbHNvIGNoZWNrcyB0aGUgYXV0aCB0YWcgYmFzZWQKKyAgICAgKiBvbiB0aGUgQUFEIHdlIGp1c3Qgc3BlY2lmaWVkIGFib3ZlICovCisgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfZGVjcnlwdChzZXNzaW9uX2tleXMtPnJ0cF9jaXBoZXIsICh1aW50OF90ICopZW5jX3N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVuY19vY3RldF9sZW4pOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBpZiAoeHRuX2hkciAmJiBzZXNzaW9uX2tleXMtPnJ0cF94dG5faGRyX2NpcGhlcikgeworICAgICAgICAvKgorICAgICAgICAgKiBleHRlbnNpb25zIGhlYWRlciBlbmNyeXB0aW9uIFJGQyA2OTA0CisgICAgICAgICAqLworICAgICAgICBzdGF0dXMgPSBzcnRwX3Byb2Nlc3NfaGVhZGVyX2VuY3J5cHRpb24oc3RyZWFtLCB4dG5faGRyLCBzZXNzaW9uX2tleXMpOworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAgKiB2ZXJpZnkgdGhhdCBzdHJlYW0gaXMgZm9yIHJlY2VpdmVkIHRyYWZmaWMgLSB0aGlzIGNoZWNrIHdpbGwKKyAgICAgKiBkZXRlY3QgU1NSQyBjb2xsaXNpb25zLCBzaW5jZSBhIHN0cmVhbSB0aGF0IGFwcGVhcnMgaW4gYm90aAorICAgICAqIHNydHBfcHJvdGVjdCgpIGFuZCBzcnRwX3VucHJvdGVjdCgpIHdpbGwgZmFpbCB0aGlzIHRlc3QgaW4gb25lIG9mCisgICAgICogdGhvc2UgZnVuY3Rpb25zLgorICAgICAqCisgICAgICogd2UgZG8gdGhpcyBjaGVjayAqYWZ0ZXIqIHRoZSBhdXRoZW50aWNhdGlvbiBjaGVjaywgc28gdGhhdCB0aGUKKyAgICAgKiBsYXR0ZXIgY2hlY2sgd2lsbCBjYXRjaCBhbnkgYXR0ZW1wdHMgdG8gZm9vbCB1cyBpbnRvIHRoaW5raW5nCisgICAgICogdGhhdCB3ZSd2ZSBnb3QgYSBjb2xsaXNpb24KKyAgICAgKi8KKyAgICBpZiAoc3RyZWFtLT5kaXJlY3Rpb24gIT0gZGlyX3NydHBfcmVjZWl2ZXIpIHsKKyAgICAgICAgaWYgKHN0cmVhbS0+ZGlyZWN0aW9uID09IGRpcl91bmtub3duKSB7CisgICAgICAgICAgICBzdHJlYW0tPmRpcmVjdGlvbiA9IGRpcl9zcnRwX3JlY2VpdmVyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3J0cF9oYW5kbGVfZXZlbnQoY3R4LCBzdHJlYW0sIGV2ZW50X3NzcmNfY29sbGlzaW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogaWYgdGhlIHN0cmVhbSBpcyBhICdwcm92aXNpb25hbCcgb25lLCBpbiB3aGljaCB0aGUgdGVtcGxhdGUgY29udGV4dAorICAgICAqIGlzIHVzZWQsIHRoZW4gd2UgbmVlZCB0byBhbGxvY2F0ZSBhIG5ldyBzdHJlYW0gYXQgdGhpcyBwb2ludCwgc2luY2UKKyAgICAgKiB0aGUgYXV0aGVudGljYXRpb24gcGFzc2VkCisgICAgICovCisgICAgaWYgKHN0cmVhbSA9PSBjdHgtPnN0cmVhbV90ZW1wbGF0ZSkgeworICAgICAgICBzcnRwX3N0cmVhbV9jdHhfdCAqbmV3X3N0cmVhbTsKKworICAgICAgICAvKgorICAgICAgICAgKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIG5ldyBzdHJlYW0KKyAgICAgICAgICoKKyAgICAgICAgICogbm90ZSB0aGF0IHdlIGluZGljYXRlIGZhaWx1cmUgaWYgd2UgY2FuJ3QgYWxsb2NhdGUgdGhlIG5ldworICAgICAgICAgKiBzdHJlYW0sIGFuZCBzb21lIGltcGxlbWVudGF0aW9ucyB3aWxsIHdhbnQgdG8gbm90IHJldHVybgorICAgICAgICAgKiBmYWlsdXJlIGhlcmUKKyAgICAgICAgICovCisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBzcnRwX3N0cmVhbV9jbG9uZShjdHgtPnN0cmVhbV90ZW1wbGF0ZSwgaGRyLT5zc3JjLCAmbmV3X3N0cmVhbSk7CisgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIH0KKworICAgICAgICAvKiBhZGQgbmV3IHN0cmVhbSB0byB0aGUgaGVhZCBvZiB0aGUgc3RyZWFtX2xpc3QgKi8KKyAgICAgICAgbmV3X3N0cmVhbS0+bmV4dCA9IGN0eC0+c3RyZWFtX2xpc3Q7CisgICAgICAgIGN0eC0+c3RyZWFtX2xpc3QgPSBuZXdfc3RyZWFtOworCisgICAgICAgIC8qIHNldCBzdHJlYW0gKHRoZSBwb2ludGVyIHVzZWQgaW4gdGhpcyBmdW5jdGlvbikgKi8KKyAgICAgICAgc3RyZWFtID0gbmV3X3N0cmVhbTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHRoZSBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGZ1bmN0aW9uIHBhc3NlZCwgc28gYWRkIHRoZSBwYWNrZXQKKyAgICAgKiBpbmRleCBpbnRvIHRoZSByZXBsYXkgZGF0YWJhc2UKKyAgICAgKi8KKyAgICBzcnRwX3JkYnhfYWRkX2luZGV4KCZzdHJlYW0tPnJ0cF9yZGJ4LCBkZWx0YSk7CisKKyAgICAvKiBkZWNyZWFzZSB0aGUgcGFja2V0IGxlbmd0aCBieSB0aGUgbGVuZ3RoIG9mIHRoZSBhdXRoIHRhZyAqLworICAgICpwa3Rfb2N0ZXRfbGVuIC09IHRhZ19sZW47CisKKyAgICAvKiBkZWNyZWFzZSB0aGUgcGFja2V0IGxlbmd0aCBieSB0aGUgbGVuZ3RoIG9mIHRoZSBta2lfc2l6ZSAqLworICAgICpwa3Rfb2N0ZXRfbGVuIC09IG1raV9zaXplOworCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9wcm90ZWN0KHNydHBfY3R4X3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpydHBfaGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqcGt0X29jdGV0X2xlbikKK3sKKyAgICByZXR1cm4gc3J0cF9wcm90ZWN0X21raShjdHgsIHJ0cF9oZHIsIHBrdF9vY3RldF9sZW4sIDAsIDApOworfQorCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX3Byb3RlY3RfbWtpKHNydHBfY3R4X3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcnRwX2hkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpwa3Rfb2N0ZXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdXNlX21raSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1raV9pbmRleCkKK3sKKyAgICBzcnRwX2hkcl90ICpoZHIgPSAoc3J0cF9oZHJfdCAqKXJ0cF9oZHI7CisgICAgdWludDMyX3QgKmVuY19zdGFydDsgICAgICAvKiBwb2ludGVyIHRvIHN0YXJ0IG9mIGVuY3J5cHRlZCBwb3J0aW9uICAqLworICAgIHVpbnQzMl90ICphdXRoX3N0YXJ0OyAgICAgLyogcG9pbnRlciB0byBzdGFydCBvZiBhdXRoLiBwb3J0aW9uICAgICAgKi8KKyAgICBpbnQgZW5jX29jdGV0X2xlbiA9IDA7ICAgIC8qIG51bWJlciBvZiBvY3RldHMgaW4gZW5jcnlwdGVkIHBvcnRpb24gICovCisgICAgc3J0cF94dGRfc2VxX251bV90IGVzdDsgICAvKiBlc3RpbWF0ZWQgeHRkX3NlcV9udW1fdCBvZiAqaGRyICAgICAgICAqLworICAgIGludCBkZWx0YTsgICAgICAgICAgICAgICAgLyogZGVsdGEgb2YgbG9jYWwgcGt0IGlkeCBhbmQgdGhhdCBpbiBoZHIgKi8KKyAgICB1aW50OF90ICphdXRoX3RhZyA9IE5VTEw7IC8qIGxvY2F0aW9uIG9mIGF1dGhfdGFnIHdpdGhpbiBwYWNrZXQgICAgICovCisgICAgc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdHVzOworICAgIGludCB0YWdfbGVuOworICAgIHNydHBfc3RyZWFtX2N0eF90ICpzdHJlYW07CisgICAgdWludDMyX3QgcHJlZml4X2xlbjsKKyAgICBzcnRwX2hkcl94dG5kX3QgKnh0bl9oZHIgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCBta2lfc2l6ZSA9IDA7CisgICAgc3J0cF9zZXNzaW9uX2tleXNfdCAqc2Vzc2lvbl9rZXlzID0gTlVMTDsKKyAgICB1aW50OF90ICpta2lfbG9jYXRpb24gPSBOVUxMOworICAgIGludCBhZHZhbmNlX3BhY2tldF9pbmRleCA9IDA7CisKKyAgICBkZWJ1Z19wcmludChtb2Rfc3J0cCwgImZ1bmN0aW9uIHNydHBfcHJvdGVjdCIsIE5VTEwpOworCisgICAgLyogd2UgYXNzdW1lIHRoZSBoZHIgaXMgMzItYml0IGFsaWduZWQgdG8gc3RhcnQgKi8KKworICAgIC8qIFZlcmlmeSBSVFAgaGVhZGVyICovCisgICAgc3RhdHVzID0gc3J0cF92YWxpZGF0ZV9ydHBfaGVhZGVyKHJ0cF9oZHIsIHBrdF9vY3RldF9sZW4pOwogICAgIGlmIChzdGF0dXMpCi0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIAotICAgIC8qIGFkZCBuZXcgc3RyZWFtIHRvIHRoZSBoZWFkIG9mIHRoZSBzdHJlYW1fbGlzdCAqLwotICAgIG5ld19zdHJlYW0tPm5leHQgPSBjdHgtPnN0cmVhbV9saXN0OwotICAgIGN0eC0+c3RyZWFtX2xpc3QgPSBuZXdfc3RyZWFtOwotICAgIAotICAgIC8qIHNldCBzdHJlYW0gKHRoZSBwb2ludGVyIHVzZWQgaW4gdGhpcyBmdW5jdGlvbikgKi8KLSAgICBzdHJlYW0gPSBuZXdfc3RyZWFtOwotICB9Ci0gIAotICAvKiAKLSAgICogdGhlIG1lc3NhZ2UgYXV0aGVudGljYXRpb24gZnVuY3Rpb24gcGFzc2VkLCBzbyBhZGQgdGhlIHBhY2tldAotICAgKiBpbmRleCBpbnRvIHRoZSByZXBsYXkgZGF0YWJhc2UgCi0gICAqLwotICByZGJ4X2FkZF9pbmRleCgmc3RyZWFtLT5ydHBfcmRieCwgZGVsdGEpOworICAgICAgICByZXR1cm4gc3RhdHVzOwogCi0gIC8qIGRlY3JlYXNlIHRoZSBwYWNrZXQgbGVuZ3RoIGJ5IHRoZSBsZW5ndGggb2YgdGhlIGF1dGggdGFnICovCi0gICpwa3Rfb2N0ZXRfbGVuIC09IHRhZ19sZW47CisgICAgLyogY2hlY2sgdGhlIHBhY2tldCBsZW5ndGggLSBpdCBtdXN0IGF0IGxlYXN0IGNvbnRhaW4gYSBmdWxsIGhlYWRlciAqLworICAgIGlmICgqcGt0X29jdGV0X2xlbiA8IG9jdGV0c19pbl9ydHBfaGVhZGVyKQorICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbTsKIAotICByZXR1cm4gZXJyX3N0YXR1c19vazsgIAorICAgIC8qCisgICAgICogbG9vayB1cCBzc3JjIGluIHNydHBfc3RyZWFtIGxpc3QsIGFuZCBwcm9jZXNzIHRoZSBwYWNrZXQgd2l0aAorICAgICAqIHRoZSBhcHByb3ByaWF0ZSBzdHJlYW0uICBpZiB3ZSBoYXZlbid0IHNlZW4gdGhpcyBzdHJlYW0gYmVmb3JlLAorICAgICAqIHRoZXJlJ3MgYSB0ZW1wbGF0ZSBrZXkgZm9yIHRoaXMgc3J0cF9zZXNzaW9uLCBhbmQgdGhlIGNpcGhlcgorICAgICAqIHN1cHBvcnRzIGtleS1zaGFyaW5nLCB0aGVuIHdlIGFzc3VtZSB0aGF0IGEgbmV3IHN0cmVhbSB1c2luZworICAgICAqIHRoYXQga2V5IGhhcyBqdXN0IHN0YXJ0ZWQgdXAKKyAgICAgKi8KKyAgICBzdHJlYW0gPSBzcnRwX2dldF9zdHJlYW0oY3R4LCBoZHItPnNzcmMpOworICAgIGlmIChzdHJlYW0gPT0gTlVMTCkgeworICAgICAgICBpZiAoY3R4LT5zdHJlYW1fdGVtcGxhdGUgIT0gTlVMTCkgeworICAgICAgICAgICAgc3J0cF9zdHJlYW1fY3R4X3QgKm5ld19zdHJlYW07CisKKyAgICAgICAgICAgIC8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3IHN0cmVhbSAqLworICAgICAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgICAgICBzcnRwX3N0cmVhbV9jbG9uZShjdHgtPnN0cmVhbV90ZW1wbGF0ZSwgaGRyLT5zc3JjLCAmbmV3X3N0cmVhbSk7CisgICAgICAgICAgICBpZiAoc3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICAgICAgICAgIC8qIGFkZCBuZXcgc3RyZWFtIHRvIHRoZSBoZWFkIG9mIHRoZSBzdHJlYW1fbGlzdCAqLworICAgICAgICAgICAgbmV3X3N0cmVhbS0+bmV4dCA9IGN0eC0+c3RyZWFtX2xpc3Q7CisgICAgICAgICAgICBjdHgtPnN0cmVhbV9saXN0ID0gbmV3X3N0cmVhbTsKKworICAgICAgICAgICAgLyogc2V0IGRpcmVjdGlvbiB0byBvdXRib3VuZCAqLworICAgICAgICAgICAgbmV3X3N0cmVhbS0+ZGlyZWN0aW9uID0gZGlyX3NydHBfc2VuZGVyOworCisgICAgICAgICAgICAvKiBzZXQgc3RyZWFtICh0aGUgcG9pbnRlciB1c2VkIGluIHRoaXMgZnVuY3Rpb24pICovCisgICAgICAgICAgICBzdHJlYW0gPSBuZXdfc3RyZWFtOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogbm8gdGVtcGxhdGUgc3RyZWFtLCBzbyB3ZSByZXR1cm4gYW4gZXJyb3IgKi8KKyAgICAgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfbm9fY3R4OworICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAgKiB2ZXJpZnkgdGhhdCBzdHJlYW0gaXMgZm9yIHNlbmRpbmcgdHJhZmZpYyAtIHRoaXMgY2hlY2sgd2lsbAorICAgICAqIGRldGVjdCBTU1JDIGNvbGxpc2lvbnMsIHNpbmNlIGEgc3RyZWFtIHRoYXQgYXBwZWFycyBpbiBib3RoCisgICAgICogc3J0cF9wcm90ZWN0KCkgYW5kIHNydHBfdW5wcm90ZWN0KCkgd2lsbCBmYWlsIHRoaXMgdGVzdCBpbiBvbmUgb2YKKyAgICAgKiB0aG9zZSBmdW5jdGlvbnMuCisgICAgICovCisKKyAgICBpZiAoc3RyZWFtLT5kaXJlY3Rpb24gIT0gZGlyX3NydHBfc2VuZGVyKSB7CisgICAgICAgIGlmIChzdHJlYW0tPmRpcmVjdGlvbiA9PSBkaXJfdW5rbm93bikgeworICAgICAgICAgICAgc3RyZWFtLT5kaXJlY3Rpb24gPSBkaXJfc3J0cF9zZW5kZXI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzcnRwX2hhbmRsZV9ldmVudChjdHgsIHN0cmVhbSwgZXZlbnRfc3NyY19jb2xsaXNpb24pOworICAgICAgICB9CisgICAgfQorCisgICAgc2Vzc2lvbl9rZXlzID0KKyAgICAgICAgc3J0cF9nZXRfc2Vzc2lvbl9rZXlzX3dpdGhfbWtpX2luZGV4KHN0cmVhbSwgdXNlX21raSwgbWtpX2luZGV4KTsKKworICAgIGlmIChzZXNzaW9uX2tleXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfbWtpOworCisgICAgLyoKKyAgICAgKiBDaGVjayBpZiB0aGlzIGlzIGFuIEFFQUQgc3RyZWFtIChHQ00gbW9kZSkuICBJZiBzbywgdGhlbiBkaXNwYXRjaAorICAgICAqIHRoZSByZXF1ZXN0IHRvIG91ciBBRUFEIGhhbmRsZXIuCisgICAgICovCisgICAgaWYgKHNlc3Npb25fa2V5cy0+cnRwX2NpcGhlci0+YWxnb3JpdGhtID09IFNSVFBfQUVTX0dDTV8xMjggfHwKKyAgICAgICAgc2Vzc2lvbl9rZXlzLT5ydHBfY2lwaGVyLT5hbGdvcml0aG0gPT0gU1JUUF9BRVNfR0NNXzI1NikgeworICAgICAgICByZXR1cm4gc3J0cF9wcm90ZWN0X2FlYWQoY3R4LCBzdHJlYW0sIHJ0cF9oZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50ICopcGt0X29jdGV0X2xlbiwgc2Vzc2lvbl9rZXlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlX21raSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiB1cGRhdGUgdGhlIGtleSB1c2FnZSBsaW1pdCwgYW5kIGNoZWNrIGl0IHRvIG1ha2Ugc3VyZSB0aGF0IHdlCisgICAgICogZGlkbid0IGp1c3QgaGl0IGVpdGhlciB0aGUgc29mdCBsaW1pdCBvciB0aGUgaGFyZCBsaW1pdCwgYW5kIGNhbGwKKyAgICAgKiB0aGUgZXZlbnQgaGFuZGxlciBpZiB3ZSBoaXQgZWl0aGVyLgorICAgICAqLworICAgIHN3aXRjaCAoc3J0cF9rZXlfbGltaXRfdXBkYXRlKHNlc3Npb25fa2V5cy0+bGltaXQpKSB7CisgICAgY2FzZSBzcnRwX2tleV9ldmVudF9ub3JtYWw6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugc3J0cF9rZXlfZXZlbnRfc29mdF9saW1pdDoKKyAgICAgICAgc3J0cF9oYW5kbGVfZXZlbnQoY3R4LCBzdHJlYW0sIGV2ZW50X2tleV9zb2Z0X2xpbWl0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBzcnRwX2tleV9ldmVudF9oYXJkX2xpbWl0OgorICAgICAgICBzcnRwX2hhbmRsZV9ldmVudChjdHgsIHN0cmVhbSwgZXZlbnRfa2V5X2hhcmRfbGltaXQpOworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2tleV9leHBpcmVkOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8qIGdldCB0YWcgbGVuZ3RoIGZyb20gc3RyZWFtICovCisgICAgdGFnX2xlbiA9IHNydHBfYXV0aF9nZXRfdGFnX2xlbmd0aChzZXNzaW9uX2tleXMtPnJ0cF9hdXRoKTsKKworICAgIC8qCisgICAgICogZmluZCBzdGFydGluZyBwb2ludCBmb3IgZW5jcnlwdGlvbiBhbmQgbGVuZ3RoIG9mIGRhdGEgdG8gYmUKKyAgICAgKiBlbmNyeXB0ZWQgLSB0aGUgZW5jcnlwdGVkIHBvcnRpb24gc3RhcnRzIGFmdGVyIHRoZSBydHAgaGVhZGVyCisgICAgICogZXh0ZW5zaW9uLCBpZiBwcmVzZW50OyBvdGhlcndpc2UsIGl0IHN0YXJ0cyBhZnRlciB0aGUgbGFzdCBjc3JjLAorICAgICAqIGlmIGFueSBhcmUgcHJlc2VudAorICAgICAqCisgICAgICogaWYgd2UncmUgbm90IHByb3ZpZGluZyBjb25maWRlbnRpYWxpdHksIHNldCBlbmNfc3RhcnQgdG8gTlVMTAorICAgICAqLworICAgIGlmIChzdHJlYW0tPnJ0cF9zZXJ2aWNlcyAmIHNlY19zZXJ2X2NvbmYpIHsKKyAgICAgICAgZW5jX3N0YXJ0ID0gKHVpbnQzMl90ICopaGRyICsgdWludDMyc19pbl9ydHBfaGVhZGVyICsgaGRyLT5jYzsKKyAgICAgICAgaWYgKGhkci0+eCA9PSAxKSB7CisgICAgICAgICAgICB4dG5faGRyID0gKHNydHBfaGRyX3h0bmRfdCAqKWVuY19zdGFydDsKKyAgICAgICAgICAgIGVuY19zdGFydCArPSAobnRvaHMoeHRuX2hkci0+bGVuZ3RoKSArIDEpOworICAgICAgICB9CisgICAgICAgIC8qIG5vdGU6IHRoZSBwYXNzZWQgc2l6ZSBpcyB3aXRob3V0IHRoZSBhdXRoIHRhZyAqLworICAgICAgICBpZiAoISgodWludDhfdCAqKWVuY19zdGFydCA8PSAodWludDhfdCAqKWhkciArICpwa3Rfb2N0ZXRfbGVuKSkKKyAgICAgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfcGFyc2VfZXJyOworICAgICAgICBlbmNfb2N0ZXRfbGVuID0KKyAgICAgICAgICAgIChpbnQpKCpwa3Rfb2N0ZXRfbGVuIC0gKCh1aW50OF90ICopZW5jX3N0YXJ0IC0gKHVpbnQ4X3QgKiloZHIpKTsKKyAgICAgICAgaWYgKGVuY19vY3RldF9sZW4gPCAwKQorICAgICAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19wYXJzZV9lcnI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW5jX3N0YXJ0ID0gTlVMTDsKKyAgICB9CisKKyAgICBta2lfbG9jYXRpb24gPSAodWludDhfdCAqKWhkciArICpwa3Rfb2N0ZXRfbGVuOworICAgIG1raV9zaXplID0gc3J0cF9pbmplY3RfbWtpKG1raV9sb2NhdGlvbiwgc2Vzc2lvbl9rZXlzLCB1c2VfbWtpKTsKKworICAgIC8qCisgICAgICogaWYgd2UncmUgcHJvdmlkaW5nIGF1dGhlbnRpY2F0aW9uLCBzZXQgdGhlIGF1dGhfc3RhcnQgYW5kIGF1dGhfdGFnCisgICAgICogcG9pbnRlcnMgdG8gdGhlIHByb3BlciBsb2NhdGlvbnM7IG90aGVyd2lzZSwgc2V0IGF1dGhfc3RhcnQgdG8gTlVMTAorICAgICAqIHRvIGluZGljYXRlIHRoYXQgbm8gYXV0aGVudGljYXRpb24gaXMgbmVlZGVkCisgICAgICovCisgICAgaWYgKHN0cmVhbS0+cnRwX3NlcnZpY2VzICYgc2VjX3NlcnZfYXV0aCkgeworICAgICAgICBhdXRoX3N0YXJ0ID0gKHVpbnQzMl90ICopaGRyOworICAgICAgICBhdXRoX3RhZyA9ICh1aW50OF90ICopaGRyICsgKnBrdF9vY3RldF9sZW4gKyBta2lfc2l6ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRoX3N0YXJ0ID0gTlVMTDsKKyAgICAgICAgYXV0aF90YWcgPSBOVUxMOworICAgIH0KKworICAgIC8qCisgICAgICogZXN0aW1hdGUgdGhlIHBhY2tldCBpbmRleCB1c2luZyB0aGUgc3RhcnQgb2YgdGhlIHJlcGxheSB3aW5kb3cKKyAgICAgKiBhbmQgdGhlIHNlcXVlbmNlIG51bWJlciBmcm9tIHRoZSBoZWFkZXIKKyAgICAgKi8KKyAgICBzdGF0dXMgPSBzcnRwX2dldF9lc3RfcGt0X2luZGV4KGhkciwgc3RyZWFtLCAmZXN0LCAmZGVsdGEpOworCisgICAgaWYgKHN0YXR1cyAmJiAoc3RhdHVzICE9IHNydHBfZXJyX3N0YXR1c19wa3RfaWR4X2FkdikpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICBpZiAoc3RhdHVzID09IHNydHBfZXJyX3N0YXR1c19wa3RfaWR4X2FkdikKKyAgICAgICAgYWR2YW5jZV9wYWNrZXRfaW5kZXggPSAxOworCisgICAgaWYgKGFkdmFuY2VfcGFja2V0X2luZGV4KSB7CisgICAgICAgIHNydHBfcmRieF9zZXRfcm9jX3NlcSgmc3RyZWFtLT5ydHBfcmRieCwgKHVpbnQzMl90KShlc3QgPj4gMTYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQxNl90KShlc3QgJiAweEZGRkYpKTsKKyAgICAgICAgc3RyZWFtLT5wZW5kaW5nX3JvYyA9IDA7CisgICAgICAgIHNydHBfcmRieF9hZGRfaW5kZXgoJnN0cmVhbS0+cnRwX3JkYngsIDApOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXR1cyA9IHNydHBfcmRieF9jaGVjaygmc3RyZWFtLT5ydHBfcmRieCwgZGVsdGEpOworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBpZiAoc3RhdHVzICE9IHNydHBfZXJyX3N0YXR1c19yZXBsYXlfZmFpbCB8fAorICAgICAgICAgICAgICAgICFzdHJlYW0tPmFsbG93X3JlcGVhdF90eCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOyAvKiB3ZSd2ZSBiZWVuIGFza2VkIHRvIHJldXNlIGFuIGluZGV4ICovCisgICAgICAgIH0KKyAgICAgICAgc3J0cF9yZGJ4X2FkZF9pbmRleCgmc3RyZWFtLT5ydHBfcmRieCwgZGVsdGEpOworICAgIH0KKworI2lmZGVmIE5PXzY0QklUX01BVEgKKyAgICBkZWJ1Z19wcmludDIobW9kX3NydHAsICJlc3RpbWF0ZWQgcGFja2V0IGluZGV4OiAlMDh4JTA4eCIsIGhpZ2gzMihlc3QpLAorICAgICAgICAgICAgICAgICBsb3czMihlc3QpKTsKKyNlbHNlCisgICAgZGVidWdfcHJpbnQobW9kX3NydHAsICJlc3RpbWF0ZWQgcGFja2V0IGluZGV4OiAlMDE2bGx4IiwgZXN0KTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBpZiB3ZSdyZSB1c2luZyByaW5kYWVsIGNvdW50ZXIgbW9kZSwgc2V0IG5vbmNlIGFuZCBzZXEKKyAgICAgKi8KKyAgICBpZiAoc2Vzc2lvbl9rZXlzLT5ydHBfY2lwaGVyLT50eXBlLT5pZCA9PSBTUlRQX0FFU19JQ01fMTI4IHx8CisgICAgICAgIHNlc3Npb25fa2V5cy0+cnRwX2NpcGhlci0+dHlwZS0+aWQgPT0gU1JUUF9BRVNfSUNNXzE5MiB8fAorICAgICAgICBzZXNzaW9uX2tleXMtPnJ0cF9jaXBoZXItPnR5cGUtPmlkID09IFNSVFBfQUVTX0lDTV8yNTYpIHsKKyAgICAgICAgdjEyOF90IGl2OworCisgICAgICAgIGl2LnYzMlswXSA9IDA7CisgICAgICAgIGl2LnYzMlsxXSA9IGhkci0+c3NyYzsKKyNpZmRlZiBOT182NEJJVF9NQVRICisgICAgICAgIGl2LnY2NFsxXSA9IGJlNjRfdG9fY3B1KAorICAgICAgICAgICAgbWFrZTY0KChoaWdoMzIoZXN0KSA8PCAxNikgfCAobG93MzIoZXN0KSA+PiAxNiksIGxvdzMyKGVzdCkgPDwgMTYpKTsKKyNlbHNlCisgICAgICAgIGl2LnY2NFsxXSA9IGJlNjRfdG9fY3B1KGVzdCA8PCAxNik7CisjZW5kaWYKKyAgICAgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfc2V0X2l2KHNlc3Npb25fa2V5cy0+cnRwX2NpcGhlciwgKHVpbnQ4X3QgKikmaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX2RpcmVjdGlvbl9lbmNyeXB0KTsKKyAgICAgICAgaWYgKCFzdGF0dXMgJiYgc2Vzc2lvbl9rZXlzLT5ydHBfeHRuX2hkcl9jaXBoZXIpIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX3NldF9pdihzZXNzaW9uX2tleXMtPnJ0cF94dG5faGRyX2NpcGhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKSZpdiwgc3J0cF9kaXJlY3Rpb25fZW5jcnlwdCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICB2MTI4X3QgaXY7CisKKy8qIG90aGVyd2lzZSwgc2V0IHRoZSBpbmRleCB0byBlc3QgKi8KKyNpZmRlZiBOT182NEJJVF9NQVRICisgICAgICAgIGl2LnYzMlswXSA9IDA7CisgICAgICAgIGl2LnYzMlsxXSA9IDA7CisjZWxzZQorICAgICAgICBpdi52NjRbMF0gPSAwOworI2VuZGlmCisgICAgICAgIGl2LnY2NFsxXSA9IGJlNjRfdG9fY3B1KGVzdCk7CisgICAgICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX3NldF9pdihzZXNzaW9uX2tleXMtPnJ0cF9jaXBoZXIsICh1aW50OF90ICopJml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9kaXJlY3Rpb25fZW5jcnlwdCk7CisgICAgICAgIGlmICghc3RhdHVzICYmIHNlc3Npb25fa2V5cy0+cnRwX3h0bl9oZHJfY2lwaGVyKSB7CisgICAgICAgICAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9zZXRfaXYoc2Vzc2lvbl9rZXlzLT5ydHBfeHRuX2hkcl9jaXBoZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QgKikmaXYsIHNydHBfZGlyZWN0aW9uX2VuY3J5cHQpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChzdGF0dXMpCisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfY2lwaGVyX2ZhaWw7CisKKy8qIHNoaWZ0IGVzdCwgcHV0IGludG8gbmV0d29yayBieXRlIG9yZGVyICovCisjaWZkZWYgTk9fNjRCSVRfTUFUSAorICAgIGVzdCA9IGJlNjRfdG9fY3B1KAorICAgICAgICBtYWtlNjQoKGhpZ2gzMihlc3QpIDw8IDE2KSB8IChsb3czMihlc3QpID4+IDE2KSwgbG93MzIoZXN0KSA8PCAxNikpOworI2Vsc2UKKyAgICBlc3QgPSBiZTY0X3RvX2NwdShlc3QgPDwgMTYpOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIGlmIHdlJ3JlIGF1dGhlbnRpY2F0aW5nIHVzaW5nIGEgdW5pdmVyc2FsIGhhc2gsIHB1dCB0aGUga2V5c3RyZWFtCisgICAgICogcHJlZml4IGludG8gdGhlIGF1dGhlbnRpY2F0aW9uIHRhZworICAgICAqLworICAgIGlmIChhdXRoX3N0YXJ0KSB7CisgICAgICAgIHByZWZpeF9sZW4gPSBzcnRwX2F1dGhfZ2V0X3ByZWZpeF9sZW5ndGgoc2Vzc2lvbl9rZXlzLT5ydHBfYXV0aCk7CisgICAgICAgIGlmIChwcmVmaXhfbGVuKSB7CisgICAgICAgICAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9vdXRwdXQoc2Vzc2lvbl9rZXlzLT5ydHBfY2lwaGVyLCBhdXRoX3RhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJlZml4X2xlbik7CisgICAgICAgICAgICBpZiAoc3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfY2lwaGVyX2ZhaWw7CisgICAgICAgICAgICBkZWJ1Z19wcmludChtb2Rfc3J0cCwgImtleXN0cmVhbSBwcmVmaXg6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoYXV0aF90YWcsIHByZWZpeF9sZW4pKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh4dG5faGRyICYmIHNlc3Npb25fa2V5cy0+cnRwX3h0bl9oZHJfY2lwaGVyKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGV4dGVuc2lvbnMgaGVhZGVyIGVuY3J5cHRpb24gUkZDIDY5MDQKKyAgICAgICAgICovCisgICAgICAgIHN0YXR1cyA9IHNydHBfcHJvY2Vzc19oZWFkZXJfZW5jcnlwdGlvbihzdHJlYW0sIHh0bl9oZHIsIHNlc3Npb25fa2V5cyk7CisgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBpZiB3ZSdyZSBlbmNyeXB0aW5nLCBleG9yIGtleXN0cmVhbSBpbnRvIHRoZSBtZXNzYWdlICovCisgICAgaWYgKGVuY19zdGFydCkgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgc3J0cF9jaXBoZXJfZW5jcnlwdChzZXNzaW9uX2tleXMtPnJ0cF9jaXBoZXIsICh1aW50OF90ICopZW5jX3N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50ICopJmVuY19vY3RldF9sZW4pOworICAgICAgICBpZiAoc3RhdHVzKQorICAgICAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19jaXBoZXJfZmFpbDsKKyAgICB9CisKKyAgICAvKgorICAgICAqICBpZiB3ZSdyZSBhdXRoZW50aWNhdGluZywgcnVuIGF1dGhlbnRpY2F0aW9uIGZ1bmN0aW9uIGFuZCBwdXQgcmVzdWx0CisgICAgICogIGludG8gdGhlIGF1dGhfdGFnCisgICAgICovCisgICAgaWYgKGF1dGhfc3RhcnQpIHsKKyAgICAgICAgLyogaW5pdGlhbGl6ZSBhdXRoIGZ1bmMgY29udGV4dCAqLworICAgICAgICBzdGF0dXMgPSBzcnRwX2F1dGhfc3RhcnQoc2Vzc2lvbl9rZXlzLT5ydHBfYXV0aCk7CisgICAgICAgIGlmIChzdGF0dXMpCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgICAgIC8qIHJ1biBhdXRoIGZ1bmMgb3ZlciBwYWNrZXQgKi8KKyAgICAgICAgc3RhdHVzID0gc3J0cF9hdXRoX3VwZGF0ZShzZXNzaW9uX2tleXMtPnJ0cF9hdXRoLCAodWludDhfdCAqKWF1dGhfc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBrdF9vY3RldF9sZW4pOworICAgICAgICBpZiAoc3RhdHVzKQorICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgICAgICAvKiBydW4gYXV0aCBmdW5jIG92ZXIgUk9DLCBwdXQgcmVzdWx0IGludG8gYXV0aF90YWcgKi8KKyAgICAgICAgZGVidWdfcHJpbnQobW9kX3NydHAsICJlc3RpbWF0ZWQgcGFja2V0IGluZGV4OiAlMDE2bGx4IiwgZXN0KTsKKyAgICAgICAgc3RhdHVzID0gc3J0cF9hdXRoX2NvbXB1dGUoc2Vzc2lvbl9rZXlzLT5ydHBfYXV0aCwgKHVpbnQ4X3QgKikmZXN0LCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX3RhZyk7CisgICAgICAgIGRlYnVnX3ByaW50KG1vZF9zcnRwLCAic3J0cCBhdXRoIHRhZzogICAgJXMiLAorICAgICAgICAgICAgICAgICAgICBzcnRwX29jdGV0X3N0cmluZ19oZXhfc3RyaW5nKGF1dGhfdGFnLCB0YWdfbGVuKSk7CisgICAgICAgIGlmIChzdGF0dXMpCisgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2F1dGhfZmFpbDsKKyAgICB9CisKKyAgICBpZiAoYXV0aF90YWcpIHsKKyAgICAgICAgLyogaW5jcmVhc2UgdGhlIHBhY2tldCBsZW5ndGggYnkgdGhlIGxlbmd0aCBvZiB0aGUgYXV0aCB0YWcgKi8KKyAgICAgICAgKnBrdF9vY3RldF9sZW4gKz0gdGFnX2xlbjsKKyAgICB9CisKKyAgICBpZiAodXNlX21raSkgeworICAgICAgICAvKiBpbmNyZWF0ZSB0aGUgcGFja2V0IGxlbmd0aCBieSB0aGUgbWtpIHNpemUgKi8KKyAgICAgICAgKnBrdF9vY3RldF9sZW4gKz0gbWtpX3NpemU7CisgICAgfQorCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKIH0KIAotZXJyX3N0YXR1c190Ci1zcnRwX2luaXQoKSB7Ci0gIGVycl9zdGF0dXNfdCBzdGF0dXM7Ci0KLSAgLyogaW5pdGlhbGl6ZSBjcnlwdG8ga2VybmVsICovCi0gIHN0YXR1cyA9IGNyeXB0b19rZXJuZWxfaW5pdCgpOwotICBpZiAoc3RhdHVzKSAKLSAgICByZXR1cm4gc3RhdHVzOwotCi0gIC8qIGxvYWQgc3J0cCBkZWJ1ZyBtb2R1bGUgaW50byB0aGUga2VybmVsICovCi0gIHN0YXR1cyA9IGNyeXB0b19rZXJuZWxfbG9hZF9kZWJ1Z19tb2R1bGUoJm1vZF9zcnRwKTsKLSAgaWYgKHN0YXR1cykKLSAgICByZXR1cm4gc3RhdHVzOwotCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF91bnByb3RlY3Qoc3J0cF9jdHhfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3J0cF9oZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnBrdF9vY3RldF9sZW4pCit7CisgICAgcmV0dXJuIHNydHBfdW5wcm90ZWN0X21raShjdHgsIHNydHBfaGRyLCBwa3Rfb2N0ZXRfbGVuLCAwKTsKIH0KIAotLyogCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX3VucHJvdGVjdF9ta2koc3J0cF9jdHhfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNydHBfaGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqcGt0X29jdGV0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdXNlX21raSkKK3sKKyAgICBzcnRwX2hkcl90ICpoZHIgPSAoc3J0cF9oZHJfdCAqKXNydHBfaGRyOworICAgIHVpbnQzMl90ICplbmNfc3RhcnQ7ICAgICAgICAgICAgLyogcG9pbnRlciB0byBzdGFydCBvZiBlbmNyeXB0ZWQgcG9ydGlvbiAgKi8KKyAgICB1aW50MzJfdCAqYXV0aF9zdGFydDsgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gc3RhcnQgb2YgYXV0aC4gcG9ydGlvbiAgICAgICovCisgICAgdW5zaWduZWQgaW50IGVuY19vY3RldF9sZW4gPSAwOyAvKiBudW1iZXIgb2Ygb2N0ZXRzIGluIGVuY3J5cHRlZCBwb3J0aW9uICovCisgICAgdWludDhfdCAqYXV0aF90YWcgPSBOVUxMOyAgICAgICAvKiBsb2NhdGlvbiBvZiBhdXRoX3RhZyB3aXRoaW4gcGFja2V0ICAgICAqLworICAgIHNydHBfeHRkX3NlcV9udW1fdCBlc3Q7ICAgICAgICAgLyogZXN0aW1hdGVkIHh0ZF9zZXFfbnVtX3Qgb2YgKmhkciAgICAgICAgKi8KKyAgICBpbnQgZGVsdGE7ICAgICAgICAgICAgICAgICAgICAgIC8qIGRlbHRhIG9mIGxvY2FsIHBrdCBpZHggYW5kIHRoYXQgaW4gaGRyICovCisgICAgdjEyOF90IGl2OworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKKyAgICBzcnRwX3N0cmVhbV9jdHhfdCAqc3RyZWFtOworICAgIHVpbnQ4X3QgdG1wX3RhZ1tTUlRQX01BWF9UQUdfTEVOXTsKKyAgICB1aW50MzJfdCB0YWdfbGVuLCBwcmVmaXhfbGVuOworICAgIHNydHBfaGRyX3h0bmRfdCAqeHRuX2hkciA9IE5VTEw7CisgICAgdW5zaWduZWQgaW50IG1raV9zaXplID0gMDsKKyAgICBzcnRwX3Nlc3Npb25fa2V5c190ICpzZXNzaW9uX2tleXMgPSBOVUxMOworICAgIGludCBhZHZhbmNlX3BhY2tldF9pbmRleCA9IDA7CisgICAgdWludDMyX3Qgcm9jX3RvX3NldCA9IDA7CisgICAgdWludDE2X3Qgc2VxX3RvX3NldCA9IDA7CisKKyAgICBkZWJ1Z19wcmludChtb2Rfc3J0cCwgImZ1bmN0aW9uIHNydHBfdW5wcm90ZWN0IiwgTlVMTCk7CisKKyAgICAvKiB3ZSBhc3N1bWUgdGhlIGhkciBpcyAzMi1iaXQgYWxpZ25lZCB0byBzdGFydCAqLworCisgICAgLyogVmVyaWZ5IFJUUCBoZWFkZXIgKi8KKyAgICBzdGF0dXMgPSBzcnRwX3ZhbGlkYXRlX3J0cF9oZWFkZXIoc3J0cF9oZHIsIHBrdF9vY3RldF9sZW4pOworICAgIGlmIChzdGF0dXMpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICAvKiBjaGVjayB0aGUgcGFja2V0IGxlbmd0aCAtIGl0IG11c3QgYXQgbGVhc3QgY29udGFpbiBhIGZ1bGwgaGVhZGVyICovCisgICAgaWYgKCpwa3Rfb2N0ZXRfbGVuIDwgb2N0ZXRzX2luX3J0cF9oZWFkZXIpCisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYmFkX3BhcmFtOworCisgICAgLyoKKyAgICAgKiBsb29rIHVwIHNzcmMgaW4gc3J0cF9zdHJlYW0gbGlzdCwgYW5kIHByb2Nlc3MgdGhlIHBhY2tldCB3aXRoCisgICAgICogdGhlIGFwcHJvcHJpYXRlIHN0cmVhbS4gIGlmIHdlIGhhdmVuJ3Qgc2VlbiB0aGlzIHN0cmVhbSBiZWZvcmUsCisgICAgICogdGhlcmUncyBvbmx5IG9uZSBrZXkgZm9yIHRoaXMgc3J0cF9zZXNzaW9uLCBhbmQgdGhlIGNpcGhlcgorICAgICAqIHN1cHBvcnRzIGtleS1zaGFyaW5nLCB0aGVuIHdlIGFzc3VtZSB0aGF0IGEgbmV3IHN0cmVhbSB1c2luZworICAgICAqIHRoYXQga2V5IGhhcyBqdXN0IHN0YXJ0ZWQgdXAKKyAgICAgKi8KKyAgICBzdHJlYW0gPSBzcnRwX2dldF9zdHJlYW0oY3R4LCBoZHItPnNzcmMpOworICAgIGlmIChzdHJlYW0gPT0gTlVMTCkgeworICAgICAgICBpZiAoY3R4LT5zdHJlYW1fdGVtcGxhdGUgIT0gTlVMTCkgeworICAgICAgICAgICAgc3RyZWFtID0gY3R4LT5zdHJlYW1fdGVtcGxhdGU7CisgICAgICAgICAgICBkZWJ1Z19wcmludChtb2Rfc3J0cCwgInVzaW5nIHByb3Zpc2lvbmFsIHN0cmVhbSAoU1NSQzogMHglMDh4KSIsCisgICAgICAgICAgICAgICAgICAgICAgICBudG9obChoZHItPnNzcmMpKTsKKworLyoKKyAqIHNldCBlc3RpbWF0ZWQgcGFja2V0IGluZGV4IHRvIHNlcXVlbmNlIG51bWJlciBmcm9tIGhlYWRlciwKKyAqIGFuZCBzZXQgZGVsdGEgZXF1YWwgdG8gdGhlIHNhbWUgdmFsdWUKKyAqLworI2lmZGVmIE5PXzY0QklUX01BVEgKKyAgICAgICAgICAgIGVzdCA9IChzcnRwX3h0ZF9zZXFfbnVtX3QpbWFrZTY0KDAsIG50b2hzKGhkci0+c2VxKSk7CisgICAgICAgICAgICBkZWx0YSA9IGxvdzMyKGVzdCk7CisjZWxzZQorICAgICAgICAgICAgZXN0ID0gKHNydHBfeHRkX3NlcV9udW1fdCludG9ocyhoZHItPnNlcSk7CisgICAgICAgICAgICBkZWx0YSA9IChpbnQpZXN0OworI2VuZGlmCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogbm8gc3RyZWFtIGNvcnJlc3BvbmRpbmcgdG8gU1NSQyBmb3VuZCwgYW5kIHdlIGRvbid0IGRvCisgICAgICAgICAgICAgKiBrZXktc2hhcmluZywgc28gcmV0dXJuIGFuIGVycm9yCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfbm9fY3R4OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdHVzID0gc3J0cF9nZXRfZXN0X3BrdF9pbmRleChoZHIsIHN0cmVhbSwgJmVzdCwgJmRlbHRhKTsKKworICAgICAgICBpZiAoc3RhdHVzICYmIChzdGF0dXMgIT0gc3J0cF9lcnJfc3RhdHVzX3BrdF9pZHhfYWR2KSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICAgICAgaWYgKHN0YXR1cyA9PSBzcnRwX2Vycl9zdGF0dXNfcGt0X2lkeF9hZHYpIHsKKyAgICAgICAgICAgIGFkdmFuY2VfcGFja2V0X2luZGV4ID0gMTsKKyAgICAgICAgICAgIHJvY190b19zZXQgPSAodWludDMyX3QpKGVzdCA+PiAxNik7CisgICAgICAgICAgICBzZXFfdG9fc2V0ID0gKHVpbnQxNl90KShlc3QgJiAweEZGRkYpOworICAgICAgICB9CisKKyAgICAgICAgLyogY2hlY2sgcmVwbGF5IGRhdGFiYXNlICovCisgICAgICAgIGlmICghYWR2YW5jZV9wYWNrZXRfaW5kZXgpIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IHNydHBfcmRieF9jaGVjaygmc3RyZWFtLT5ydHBfcmRieCwgZGVsdGEpOworICAgICAgICAgICAgaWYgKHN0YXR1cykKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisgICAgfQorCisjaWZkZWYgTk9fNjRCSVRfTUFUSAorICAgIGRlYnVnX3ByaW50Mihtb2Rfc3J0cCwgImVzdGltYXRlZCB1X3BhY2tldCBpbmRleDogJTA4eCUwOHgiLCBoaWdoMzIoZXN0KSwKKyAgICAgICAgICAgICAgICAgbG93MzIoZXN0KSk7CisjZWxzZQorICAgIGRlYnVnX3ByaW50KG1vZF9zcnRwLCAiZXN0aW1hdGVkIHVfcGFja2V0IGluZGV4OiAlMDE2bGx4IiwgZXN0KTsKKyNlbmRpZgorCisgICAgLyogRGV0ZXJtaW5lIGlmIE1LSSBpcyBiZWluZyB1c2VkIGFuZCB3aGF0IHNlc3Npb24ga2V5cyBzaG91bGQgYmUgdXNlZCAqLworICAgIGlmICh1c2VfbWtpKSB7CisgICAgICAgIHNlc3Npb25fa2V5cyA9IHNydHBfZ2V0X3Nlc3Npb25fa2V5cygKKyAgICAgICAgICAgIHN0cmVhbSwgKHVpbnQ4X3QgKiloZHIsIChjb25zdCB1bnNpZ25lZCBpbnQgKilwa3Rfb2N0ZXRfbGVuLAorICAgICAgICAgICAgJm1raV9zaXplKTsKKworICAgICAgICBpZiAoc2Vzc2lvbl9rZXlzID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2JhZF9ta2k7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2Vzc2lvbl9rZXlzID0gJnN0cmVhbS0+c2Vzc2lvbl9rZXlzWzBdOworICAgIH0KKworICAgIC8qCisgICAgICogQ2hlY2sgaWYgdGhpcyBpcyBhbiBBRUFEIHN0cmVhbSAoR0NNIG1vZGUpLiAgSWYgc28sIHRoZW4gZGlzcGF0Y2gKKyAgICAgKiB0aGUgcmVxdWVzdCB0byBvdXIgQUVBRCBoYW5kbGVyLgorICAgICAqLworICAgIGlmIChzZXNzaW9uX2tleXMtPnJ0cF9jaXBoZXItPmFsZ29yaXRobSA9PSBTUlRQX0FFU19HQ01fMTI4IHx8CisgICAgICAgIHNlc3Npb25fa2V5cy0+cnRwX2NpcGhlci0+YWxnb3JpdGhtID09IFNSVFBfQUVTX0dDTV8yNTYpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfdW5wcm90ZWN0X2FlYWQoY3R4LCBzdHJlYW0sIGRlbHRhLCBlc3QsIHNydHBfaGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50ICopcGt0X29jdGV0X2xlbiwgc2Vzc2lvbl9rZXlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBta2lfc2l6ZSk7CisgICAgfQorCisgICAgLyogZ2V0IHRhZyBsZW5ndGggZnJvbSBzdHJlYW0gKi8KKyAgICB0YWdfbGVuID0gc3J0cF9hdXRoX2dldF90YWdfbGVuZ3RoKHNlc3Npb25fa2V5cy0+cnRwX2F1dGgpOworCisgICAgLyoKKyAgICAgKiBzZXQgdGhlIGNpcGhlcidzIElWIHByb3Blcmx5LCBkZXBlbmRpbmcgb24gd2hhdGV2ZXIgY2lwaGVyIHdlCisgICAgICogaGFwcGVuIHRvIGJlIHVzaW5nCisgICAgICovCisgICAgaWYgKHNlc3Npb25fa2V5cy0+cnRwX2NpcGhlci0+dHlwZS0+aWQgPT0gU1JUUF9BRVNfSUNNXzEyOCB8fAorICAgICAgICBzZXNzaW9uX2tleXMtPnJ0cF9jaXBoZXItPnR5cGUtPmlkID09IFNSVFBfQUVTX0lDTV8xOTIgfHwKKyAgICAgICAgc2Vzc2lvbl9rZXlzLT5ydHBfY2lwaGVyLT50eXBlLT5pZCA9PSBTUlRQX0FFU19JQ01fMjU2KSB7CisgICAgICAgIC8qIGFlcyBjb3VudGVyIG1vZGUgKi8KKyAgICAgICAgaXYudjMyWzBdID0gMDsKKyAgICAgICAgaXYudjMyWzFdID0gaGRyLT5zc3JjOyAvKiBzdGlsbCBpbiBuZXR3b3JrIG9yZGVyICovCisjaWZkZWYgTk9fNjRCSVRfTUFUSAorICAgICAgICBpdi52NjRbMV0gPSBiZTY0X3RvX2NwdSgKKyAgICAgICAgICAgIG1ha2U2NCgoaGlnaDMyKGVzdCkgPDwgMTYpIHwgKGxvdzMyKGVzdCkgPj4gMTYpLCBsb3czMihlc3QpIDw8IDE2KSk7CisjZWxzZQorICAgICAgICBpdi52NjRbMV0gPSBiZTY0X3RvX2NwdShlc3QgPDwgMTYpOworI2VuZGlmCisgICAgICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX3NldF9pdihzZXNzaW9uX2tleXMtPnJ0cF9jaXBoZXIsICh1aW50OF90ICopJml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9kaXJlY3Rpb25fZGVjcnlwdCk7CisgICAgICAgIGlmICghc3RhdHVzICYmIHNlc3Npb25fa2V5cy0+cnRwX3h0bl9oZHJfY2lwaGVyKSB7CisgICAgICAgICAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9zZXRfaXYoc2Vzc2lvbl9rZXlzLT5ydHBfeHRuX2hkcl9jaXBoZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QgKikmaXYsIHNydHBfZGlyZWN0aW9uX2RlY3J5cHQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKy8qIG5vIHBhcnRpY3VsYXIgZm9ybWF0IC0gc2V0IHRoZSBpdiB0byB0aGUgcGFrY2V0IGluZGV4ICovCisjaWZkZWYgTk9fNjRCSVRfTUFUSAorICAgICAgICBpdi52MzJbMF0gPSAwOworICAgICAgICBpdi52MzJbMV0gPSAwOworI2Vsc2UKKyAgICAgICAgaXYudjY0WzBdID0gMDsKKyNlbmRpZgorICAgICAgICBpdi52NjRbMV0gPSBiZTY0X3RvX2NwdShlc3QpOworICAgICAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9zZXRfaXYoc2Vzc2lvbl9rZXlzLT5ydHBfY2lwaGVyLCAodWludDhfdCAqKSZpdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfZGlyZWN0aW9uX2RlY3J5cHQpOworICAgICAgICBpZiAoIXN0YXR1cyAmJiBzZXNzaW9uX2tleXMtPnJ0cF94dG5faGRyX2NpcGhlcikgeworICAgICAgICAgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfc2V0X2l2KHNlc3Npb25fa2V5cy0+cnRwX3h0bl9oZHJfY2lwaGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90ICopJml2LCBzcnRwX2RpcmVjdGlvbl9kZWNyeXB0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoc3RhdHVzKQorICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2NpcGhlcl9mYWlsOworCisvKiBzaGlmdCBlc3QsIHB1dCBpbnRvIG5ldHdvcmsgYnl0ZSBvcmRlciAqLworI2lmZGVmIE5PXzY0QklUX01BVEgKKyAgICBlc3QgPSBiZTY0X3RvX2NwdSgKKyAgICAgICAgbWFrZTY0KChoaWdoMzIoZXN0KSA8PCAxNikgfCAobG93MzIoZXN0KSA+PiAxNiksIGxvdzMyKGVzdCkgPDwgMTYpKTsKKyNlbHNlCisgICAgZXN0ID0gYmU2NF90b19jcHUoZXN0IDw8IDE2KTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBmaW5kIHN0YXJ0aW5nIHBvaW50IGZvciBkZWNyeXB0aW9uIGFuZCBsZW5ndGggb2YgZGF0YSB0byBiZQorICAgICAqIGRlY3J5cHRlZCAtIHRoZSBlbmNyeXB0ZWQgcG9ydGlvbiBzdGFydHMgYWZ0ZXIgdGhlIHJ0cCBoZWFkZXIKKyAgICAgKiBleHRlbnNpb24sIGlmIHByZXNlbnQ7IG90aGVyd2lzZSwgaXQgc3RhcnRzIGFmdGVyIHRoZSBsYXN0IGNzcmMsCisgICAgICogaWYgYW55IGFyZSBwcmVzZW50CisgICAgICoKKyAgICAgKiBpZiB3ZSdyZSBub3QgcHJvdmlkaW5nIGNvbmZpZGVudGlhbGl0eSwgc2V0IGVuY19zdGFydCB0byBOVUxMCisgICAgICovCisgICAgaWYgKHN0cmVhbS0+cnRwX3NlcnZpY2VzICYgc2VjX3NlcnZfY29uZikgeworICAgICAgICBlbmNfc3RhcnQgPSAodWludDMyX3QgKiloZHIgKyB1aW50MzJzX2luX3J0cF9oZWFkZXIgKyBoZHItPmNjOworICAgICAgICBpZiAoaGRyLT54ID09IDEpIHsKKyAgICAgICAgICAgIHh0bl9oZHIgPSAoc3J0cF9oZHJfeHRuZF90ICopZW5jX3N0YXJ0OworICAgICAgICAgICAgZW5jX3N0YXJ0ICs9IChudG9ocyh4dG5faGRyLT5sZW5ndGgpICsgMSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCEoKHVpbnQ4X3QgKillbmNfc3RhcnQgPD0KKyAgICAgICAgICAgICAgKHVpbnQ4X3QgKiloZHIgKyAoKnBrdF9vY3RldF9sZW4gLSB0YWdfbGVuIC0gbWtpX3NpemUpKSkKKyAgICAgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfcGFyc2VfZXJyOworICAgICAgICBlbmNfb2N0ZXRfbGVuID0gKHVpbnQzMl90KSgqcGt0X29jdGV0X2xlbiAtIHRhZ19sZW4gLSBta2lfc2l6ZSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCAqKWVuY19zdGFydCAtICh1aW50OF90ICopaGRyKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW5jX3N0YXJ0ID0gTlVMTDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGlmIHdlJ3JlIHByb3ZpZGluZyBhdXRoZW50aWNhdGlvbiwgc2V0IHRoZSBhdXRoX3N0YXJ0IGFuZCBhdXRoX3RhZworICAgICAqIHBvaW50ZXJzIHRvIHRoZSBwcm9wZXIgbG9jYXRpb25zOyBvdGhlcndpc2UsIHNldCBhdXRoX3N0YXJ0IHRvIE5VTEwKKyAgICAgKiB0byBpbmRpY2F0ZSB0aGF0IG5vIGF1dGhlbnRpY2F0aW9uIGlzIG5lZWRlZAorICAgICAqLworICAgIGlmIChzdHJlYW0tPnJ0cF9zZXJ2aWNlcyAmIHNlY19zZXJ2X2F1dGgpIHsKKyAgICAgICAgYXV0aF9zdGFydCA9ICh1aW50MzJfdCAqKWhkcjsKKyAgICAgICAgYXV0aF90YWcgPSAodWludDhfdCAqKWhkciArICpwa3Rfb2N0ZXRfbGVuIC0gdGFnX2xlbjsKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRoX3N0YXJ0ID0gTlVMTDsKKyAgICAgICAgYXV0aF90YWcgPSBOVUxMOworICAgIH0KKworICAgIC8qCisgICAgICogaWYgd2UgZXhwZWN0IG1lc3NhZ2UgYXV0aGVudGljYXRpb24sIHJ1biB0aGUgYXV0aGVudGljYXRpb24KKyAgICAgKiBmdW5jdGlvbiBhbmQgY29tcGFyZSB0aGUgcmVzdWx0IHdpdGggdGhlIHZhbHVlIG9mIHRoZSBhdXRoX3RhZworICAgICAqLworICAgIGlmIChhdXRoX3N0YXJ0KSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGlmIHdlJ3JlIHVzaW5nIGEgdW5pdmVyc2FsIGhhc2gsIHRoZW4gd2UgbmVlZCB0byBjb21wdXRlIHRoZQorICAgICAgICAgKiBrZXlzdHJlYW0gcHJlZml4IGZvciBlbmNyeXB0aW5nIHRoZSB1bml2ZXJzYWwgaGFzaCBvdXRwdXQKKyAgICAgICAgICoKKyAgICAgICAgICogaWYgdGhlIGtleXN0cmVhbSBwcmVmaXggbGVuZ3RoIGlzIHplcm8sIHRoZW4gd2Uga25vdyB0aGF0CisgICAgICAgICAqIHRoZSBhdXRoZW50aWNhdG9yIGlzbid0IHVzaW5nIGEgdW5pdmVyc2FsIGhhc2ggZnVuY3Rpb24KKyAgICAgICAgICovCisgICAgICAgIGlmIChzZXNzaW9uX2tleXMtPnJ0cF9hdXRoLT5wcmVmaXhfbGVuICE9IDApIHsKKyAgICAgICAgICAgIHByZWZpeF9sZW4gPSBzcnRwX2F1dGhfZ2V0X3ByZWZpeF9sZW5ndGgoc2Vzc2lvbl9rZXlzLT5ydHBfYXV0aCk7CisgICAgICAgICAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9vdXRwdXQoc2Vzc2lvbl9rZXlzLT5ydHBfY2lwaGVyLCB0bXBfdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmVmaXhfbGVuKTsKKyAgICAgICAgICAgIGRlYnVnX3ByaW50KG1vZF9zcnRwLCAia2V5c3RyZWFtIHByZWZpeDogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZyh0bXBfdGFnLCBwcmVmaXhfbGVuKSk7CisgICAgICAgICAgICBpZiAoc3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfY2lwaGVyX2ZhaWw7CisgICAgICAgIH0KKworICAgICAgICAvKiBpbml0aWFsaXplIGF1dGggZnVuYyBjb250ZXh0ICovCisgICAgICAgIHN0YXR1cyA9IHNydHBfYXV0aF9zdGFydChzZXNzaW9uX2tleXMtPnJ0cF9hdXRoKTsKKyAgICAgICAgaWYgKHN0YXR1cykKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICAgICAgLyogbm93IGNvbXB1dGUgYXV0aCBmdW5jdGlvbiBvdmVyIHBhY2tldCAqLworICAgICAgICBzdGF0dXMgPSBzcnRwX2F1dGhfdXBkYXRlKHNlc3Npb25fa2V5cy0+cnRwX2F1dGgsICh1aW50OF90ICopYXV0aF9zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGt0X29jdGV0X2xlbiAtIHRhZ19sZW4gLSBta2lfc2l6ZSk7CisKKyAgICAgICAgLyogcnVuIGF1dGggZnVuYyBvdmVyIFJPQywgdGhlbiB3cml0ZSB0bXAgdGFnICovCisgICAgICAgIHN0YXR1cyA9IHNydHBfYXV0aF9jb21wdXRlKHNlc3Npb25fa2V5cy0+cnRwX2F1dGgsICh1aW50OF90ICopJmVzdCwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wX3RhZyk7CisKKyAgICAgICAgZGVidWdfcHJpbnQobW9kX3NydHAsICJjb21wdXRlZCBhdXRoIHRhZzogICAgJXMiLAorICAgICAgICAgICAgICAgICAgICBzcnRwX29jdGV0X3N0cmluZ19oZXhfc3RyaW5nKHRtcF90YWcsIHRhZ19sZW4pKTsKKyAgICAgICAgZGVidWdfcHJpbnQobW9kX3NydHAsICJwYWNrZXQgYXV0aCB0YWc6ICAgICAgJXMiLAorICAgICAgICAgICAgICAgICAgICBzcnRwX29jdGV0X3N0cmluZ19oZXhfc3RyaW5nKGF1dGhfdGFnLCB0YWdfbGVuKSk7CisgICAgICAgIGlmIChzdGF0dXMpCisgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2F1dGhfZmFpbDsKKworICAgICAgICBpZiAoc3J0cF9vY3RldF9zdHJpbmdfaXNfZXEodG1wX3RhZywgYXV0aF90YWcsIHRhZ19sZW4pKQorICAgICAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19hdXRoX2ZhaWw7CisgICAgfQorCisgICAgLyoKKyAgICAgKiB1cGRhdGUgdGhlIGtleSB1c2FnZSBsaW1pdCwgYW5kIGNoZWNrIGl0IHRvIG1ha2Ugc3VyZSB0aGF0IHdlCisgICAgICogZGlkbid0IGp1c3QgaGl0IGVpdGhlciB0aGUgc29mdCBsaW1pdCBvciB0aGUgaGFyZCBsaW1pdCwgYW5kIGNhbGwKKyAgICAgKiB0aGUgZXZlbnQgaGFuZGxlciBpZiB3ZSBoaXQgZWl0aGVyLgorICAgICAqLworICAgIHN3aXRjaCAoc3J0cF9rZXlfbGltaXRfdXBkYXRlKHNlc3Npb25fa2V5cy0+bGltaXQpKSB7CisgICAgY2FzZSBzcnRwX2tleV9ldmVudF9ub3JtYWw6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugc3J0cF9rZXlfZXZlbnRfc29mdF9saW1pdDoKKyAgICAgICAgc3J0cF9oYW5kbGVfZXZlbnQoY3R4LCBzdHJlYW0sIGV2ZW50X2tleV9zb2Z0X2xpbWl0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBzcnRwX2tleV9ldmVudF9oYXJkX2xpbWl0OgorICAgICAgICBzcnRwX2hhbmRsZV9ldmVudChjdHgsIHN0cmVhbSwgZXZlbnRfa2V5X2hhcmRfbGltaXQpOworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2tleV9leHBpcmVkOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICh4dG5faGRyICYmIHNlc3Npb25fa2V5cy0+cnRwX3h0bl9oZHJfY2lwaGVyKSB7CisgICAgICAgIC8qIGV4dGVuc2lvbnMgaGVhZGVyIGVuY3J5cHRpb24gUkZDIDY5MDQgKi8KKyAgICAgICAgc3RhdHVzID0gc3J0cF9wcm9jZXNzX2hlYWRlcl9lbmNyeXB0aW9uKHN0cmVhbSwgeHRuX2hkciwgc2Vzc2lvbl9rZXlzKTsKKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIGlmIHdlJ3JlIGRlY3J5cHRpbmcsIGFkZCBrZXlzdHJlYW0gaW50byBjaXBoZXJ0ZXh0ICovCisgICAgaWYgKGVuY19zdGFydCkgeworICAgICAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9kZWNyeXB0KHNlc3Npb25fa2V5cy0+cnRwX2NpcGhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKWVuY19zdGFydCwgJmVuY19vY3RldF9sZW4pOworICAgICAgICBpZiAoc3RhdHVzKQorICAgICAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19jaXBoZXJfZmFpbDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHZlcmlmeSB0aGF0IHN0cmVhbSBpcyBmb3IgcmVjZWl2ZWQgdHJhZmZpYyAtIHRoaXMgY2hlY2sgd2lsbAorICAgICAqIGRldGVjdCBTU1JDIGNvbGxpc2lvbnMsIHNpbmNlIGEgc3RyZWFtIHRoYXQgYXBwZWFycyBpbiBib3RoCisgICAgICogc3J0cF9wcm90ZWN0KCkgYW5kIHNydHBfdW5wcm90ZWN0KCkgd2lsbCBmYWlsIHRoaXMgdGVzdCBpbiBvbmUgb2YKKyAgICAgKiB0aG9zZSBmdW5jdGlvbnMuCisgICAgICoKKyAgICAgKiB3ZSBkbyB0aGlzIGNoZWNrICphZnRlciogdGhlIGF1dGhlbnRpY2F0aW9uIGNoZWNrLCBzbyB0aGF0IHRoZQorICAgICAqIGxhdHRlciBjaGVjayB3aWxsIGNhdGNoIGFueSBhdHRlbXB0cyB0byBmb29sIHVzIGludG8gdGhpbmtpbmcKKyAgICAgKiB0aGF0IHdlJ3ZlIGdvdCBhIGNvbGxpc2lvbgorICAgICAqLworICAgIGlmIChzdHJlYW0tPmRpcmVjdGlvbiAhPSBkaXJfc3J0cF9yZWNlaXZlcikgeworICAgICAgICBpZiAoc3RyZWFtLT5kaXJlY3Rpb24gPT0gZGlyX3Vua25vd24pIHsKKyAgICAgICAgICAgIHN0cmVhbS0+ZGlyZWN0aW9uID0gZGlyX3NydHBfcmVjZWl2ZXI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzcnRwX2hhbmRsZV9ldmVudChjdHgsIHN0cmVhbSwgZXZlbnRfc3NyY19jb2xsaXNpb24pOworICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBpZiB0aGUgc3RyZWFtIGlzIGEgJ3Byb3Zpc2lvbmFsJyBvbmUsIGluIHdoaWNoIHRoZSB0ZW1wbGF0ZSBjb250ZXh0CisgICAgICogaXMgdXNlZCwgdGhlbiB3ZSBuZWVkIHRvIGFsbG9jYXRlIGEgbmV3IHN0cmVhbSBhdCB0aGlzIHBvaW50LCBzaW5jZQorICAgICAqIHRoZSBhdXRoZW50aWNhdGlvbiBwYXNzZWQKKyAgICAgKi8KKyAgICBpZiAoc3RyZWFtID09IGN0eC0+c3RyZWFtX3RlbXBsYXRlKSB7CisgICAgICAgIHNydHBfc3RyZWFtX2N0eF90ICpuZXdfc3RyZWFtOworCisgICAgICAgIC8qCisgICAgICAgICAqIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3IHN0cmVhbQorICAgICAgICAgKgorICAgICAgICAgKiBub3RlIHRoYXQgd2UgaW5kaWNhdGUgZmFpbHVyZSBpZiB3ZSBjYW4ndCBhbGxvY2F0ZSB0aGUgbmV3CisgICAgICAgICAqIHN0cmVhbSwgYW5kIHNvbWUgaW1wbGVtZW50YXRpb25zIHdpbGwgd2FudCB0byBub3QgcmV0dXJuCisgICAgICAgICAqIGZhaWx1cmUgaGVyZQorICAgICAgICAgKi8KKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIHNydHBfc3RyZWFtX2Nsb25lKGN0eC0+c3RyZWFtX3RlbXBsYXRlLCBoZHItPnNzcmMsICZuZXdfc3RyZWFtKTsKKyAgICAgICAgaWYgKHN0YXR1cykKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICAgICAgLyogYWRkIG5ldyBzdHJlYW0gdG8gdGhlIGhlYWQgb2YgdGhlIHN0cmVhbV9saXN0ICovCisgICAgICAgIG5ld19zdHJlYW0tPm5leHQgPSBjdHgtPnN0cmVhbV9saXN0OworICAgICAgICBjdHgtPnN0cmVhbV9saXN0ID0gbmV3X3N0cmVhbTsKKworICAgICAgICAvKiBzZXQgc3RyZWFtICh0aGUgcG9pbnRlciB1c2VkIGluIHRoaXMgZnVuY3Rpb24pICovCisgICAgICAgIHN0cmVhbSA9IG5ld19zdHJlYW07CisgICAgfQorCisgICAgLyoKKyAgICAgKiB0aGUgbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBmdW5jdGlvbiBwYXNzZWQsIHNvIGFkZCB0aGUgcGFja2V0CisgICAgICogaW5kZXggaW50byB0aGUgcmVwbGF5IGRhdGFiYXNlCisgICAgICovCisgICAgaWYgKGFkdmFuY2VfcGFja2V0X2luZGV4KSB7CisgICAgICAgIHNydHBfcmRieF9zZXRfcm9jX3NlcSgmc3RyZWFtLT5ydHBfcmRieCwgcm9jX3RvX3NldCwgc2VxX3RvX3NldCk7CisgICAgICAgIHN0cmVhbS0+cGVuZGluZ19yb2MgPSAwOworICAgICAgICBzcnRwX3JkYnhfYWRkX2luZGV4KCZzdHJlYW0tPnJ0cF9yZGJ4LCAwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzcnRwX3JkYnhfYWRkX2luZGV4KCZzdHJlYW0tPnJ0cF9yZGJ4LCBkZWx0YSk7CisgICAgfQorCisgICAgLyogZGVjcmVhc2UgdGhlIHBhY2tldCBsZW5ndGggYnkgdGhlIGxlbmd0aCBvZiB0aGUgYXV0aCB0YWcgKi8KKyAgICAqcGt0X29jdGV0X2xlbiAtPSB0YWdfbGVuOworCisgICAgLyogZGVjcmVhc2UgdGhlIHBhY2tldCBsZW5ndGggYnkgdGhlIG1raSBzaXplICovCisgICAgKnBrdF9vY3RldF9sZW4gLT0gbWtpX3NpemU7CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOworfQorCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2luaXQoKQoreworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKKworICAgIC8qIGluaXRpYWxpemUgY3J5cHRvIGtlcm5lbCAqLworICAgIHN0YXR1cyA9IHNydHBfY3J5cHRvX2tlcm5lbF9pbml0KCk7CisgICAgaWYgKHN0YXR1cykKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgIC8qIGxvYWQgc3J0cCBkZWJ1ZyBtb2R1bGUgaW50byB0aGUga2VybmVsICovCisgICAgc3RhdHVzID0gc3J0cF9jcnlwdG9fa2VybmVsX2xvYWRfZGVidWdfbW9kdWxlKCZtb2Rfc3J0cCk7CisgICAgaWYgKHN0YXR1cykKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7Cit9CisKK3NydHBfZXJyX3N0YXR1c190IHNydHBfc2h1dGRvd24oKQoreworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKKworICAgIC8qIHNodXQgZG93biBjcnlwdG8ga2VybmVsICovCisgICAgc3RhdHVzID0gc3J0cF9jcnlwdG9fa2VybmVsX3NodXRkb3duKCk7CisgICAgaWYgKHN0YXR1cykKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgIC8qIHNodXR0aW5nIGRvd24gY3J5cHRvIGtlcm5lbCBmcmVlcyB0aGUgc3J0cCBkZWJ1ZyBtb2R1bGUgYXMgd2VsbCAqLworCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKworLyoKICAqIFRoZSBmb2xsb3dpbmcgY29kZSBpcyB1bmRlciBjb25zaWRlcmF0aW9uIGZvciByZW1vdmFsLiAgU2VlCi0gKiBTUlRQX01BWF9UUkFJTEVSX0xFTiAKKyAqIFNSVFBfTUFYX1RSQUlMRVJfTEVOCiAgKi8KICNpZiAwCiAKQEAgLTEwOTksNyArMjc2OCw3IEBACiAKIGludAogc3J0cF9nZXRfdHJhaWxlcl9sZW5ndGgoY29uc3Qgc3J0cF9zdHJlYW1fdCBzKSB7Ci0gIHJldHVybiBhdXRoX2dldF90YWdfbGVuZ3RoKHMtPnJ0cF9hdXRoKTsKKyAgcmV0dXJuIHNydHBfYXV0aF9nZXRfdGFnX2xlbmd0aChzLT5ydHBfYXV0aCk7CiB9CiAKICNlbmRpZgpAQCAtMTEwOCw1OTggKzI3NzcsMTk1MyBAQAogICogc3J0cF9nZXRfc3RyZWFtKHNzcmMpIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBzdHJlYW0gY29ycmVzcG9uZGluZwogICogdG8gc3NyYywgb3IgTlVMTCBpZiBubyBzdHJlYW0gZXhpc3RzIGZvciB0aGF0IHNzcmMKICAqCi0gKiB0aGlzIGlzIGFuIGludGVybmFsIGZ1bmN0aW9uIAorICogdGhpcyBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbgogICovCiAKLXNydHBfc3RyZWFtX2N0eF90ICoKLXNydHBfZ2V0X3N0cmVhbShzcnRwX3Qgc3J0cCwgdWludDMyX3Qgc3NyYykgewotICBzcnRwX3N0cmVhbV9jdHhfdCAqc3RyZWFtOworc3J0cF9zdHJlYW1fY3R4X3QgKnNydHBfZ2V0X3N0cmVhbShzcnRwX3Qgc3J0cCwgdWludDMyX3Qgc3NyYykKK3sKKyAgICBzcnRwX3N0cmVhbV9jdHhfdCAqc3RyZWFtOwogCi0gIC8qIHdhbGsgZG93biBsaXN0IHVudGlsIHNzcmMgaXMgZm91bmQgKi8KLSAgc3RyZWFtID0gc3J0cC0+c3RyZWFtX2xpc3Q7Ci0gIHdoaWxlIChzdHJlYW0gIT0gTlVMTCkgewotICAgIGlmIChzdHJlYW0tPnNzcmMgPT0gc3NyYykKLSAgICAgIHJldHVybiBzdHJlYW07Ci0gICAgc3RyZWFtID0gc3RyZWFtLT5uZXh0OwotICB9Ci0gIAotICAvKiB3ZSBoYXZlbid0IGZvdW5kIG91ciBzc3JjLCBzbyByZXR1cm4gYSBudWxsICovCi0gIHJldHVybiBOVUxMOwotfQotCi1lcnJfc3RhdHVzX3QKLXNydHBfZGVhbGxvYyhzcnRwX3Qgc2Vzc2lvbikgewotICBzcnRwX3N0cmVhbV9jdHhfdCAqc3RyZWFtOwotICBlcnJfc3RhdHVzX3Qgc3RhdHVzOwotCi0gIC8qCi0gICAqIHdlIHRha2UgYSBjb25zZXJ2YXRpdmUgZGVhbGxvY2F0aW9uIHN0cmF0ZWd5IC0gaWYgd2UgZW5jb3VudGVyIGFuCi0gICAqIGVycm9yIGRlYWxsb2NhdGluZyBhIHN0cmVhbSwgdGhlbiB3ZSBzdG9wIHRyeWluZyB0byBkZWFsbG9jYXRlCi0gICAqIG1lbW9yeSBhbmQganVzdCByZXR1cm4gYW4gZXJyb3IKLSAgICovCi0KLSAgLyogd2FsayBsaXN0IG9mIHN0cmVhbXMsIGRlYWxsb2NhdGluZyBhcyB3ZSBnbyAqLwotICBzdHJlYW0gPSBzZXNzaW9uLT5zdHJlYW1fbGlzdDsKLSAgd2hpbGUgKHN0cmVhbSAhPSBOVUxMKSB7Ci0gICAgc3J0cF9zdHJlYW1fdCBuZXh0ID0gc3RyZWFtLT5uZXh0OwotICAgIHN0YXR1cyA9IHNydHBfc3RyZWFtX2RlYWxsb2Moc2Vzc2lvbiwgc3RyZWFtKTsKLSAgICBpZiAoc3RhdHVzKQotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICBzdHJlYW0gPSBuZXh0OwotICB9Ci0gIAotICAvKiBkZWFsbG9jYXRlIHN0cmVhbSB0ZW1wbGF0ZSwgaWYgdGhlcmUgaXMgb25lICovCi0gIGlmIChzZXNzaW9uLT5zdHJlYW1fdGVtcGxhdGUgIT0gTlVMTCkgewotICAgIHN0YXR1cyA9IGNpcGhlcl9kZWFsbG9jKHNlc3Npb24tPnN0cmVhbV90ZW1wbGF0ZS0+cnRwX2NpcGhlcik7IAotICAgIGlmIChzdGF0dXMpIAotICAgICAgcmV0dXJuIHN0YXR1czsgCi0gICAgc3RhdHVzID0gYXV0aF9kZWFsbG9jKHNlc3Npb24tPnN0cmVhbV90ZW1wbGF0ZS0+cnRwX2F1dGgpOwotICAgIGlmIChzdGF0dXMpCi0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIGNyeXB0b19mcmVlKHNlc3Npb24tPnN0cmVhbV90ZW1wbGF0ZSk7Ci0gIH0KLQotICAvKiBkZWFsbG9jYXRlIHNlc3Npb24gY29udGV4dCAqLwotICBjcnlwdG9fZnJlZShzZXNzaW9uKTsKLQotICByZXR1cm4gZXJyX3N0YXR1c19vazsKLX0KLQotCi1lcnJfc3RhdHVzX3QKLXNydHBfYWRkX3N0cmVhbShzcnRwX3Qgc2Vzc2lvbiwgCi0JCWNvbnN0IHNydHBfcG9saWN5X3QgKnBvbGljeSkgIHsKLSAgZXJyX3N0YXR1c190IHN0YXR1czsKLSAgc3J0cF9zdHJlYW1fdCB0bXA7Ci0KLSAgLyogYWxsb2NhdGUgc3RyZWFtICAqLwotICBzdGF0dXMgPSBzcnRwX3N0cmVhbV9hbGxvYygmdG1wLCBwb2xpY3kpOwotICBpZiAoc3RhdHVzKSB7Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotICAKLSAgLyogaW5pdGlhbGl6ZSBzdHJlYW0gICovCi0gIHN0YXR1cyA9IHNydHBfc3RyZWFtX2luaXQodG1wLCBwb2xpY3kpOwotICBpZiAoc3RhdHVzKSB7Ci0gICAgY3J5cHRvX2ZyZWUodG1wKTsKLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0gIAotICAvKiAKLSAgICogc2V0IHRoZSBoZWFkIG9mIHRoZSBzdHJlYW0gbGlzdCBvciB0aGUgdGVtcGxhdGUgdG8gcG9pbnQgdG8gdGhlCi0gICAqIHN0cmVhbSB0aGF0IHdlJ3ZlIGp1c3QgYWxsb2NlZCBhbmQgaW5pdCdlZCwgZGVwZW5kaW5nIG9uIHdoZXRoZXIKLSAgICogb3Igbm90IGl0IGhhcyBhIHdpbGRjYXJkIFNTUkMgdmFsdWUgb3Igbm90Ci0gICAqCi0gICAqIGlmIHRoZSB0ZW1wbGF0ZSBzdHJlYW0gaGFzIGFscmVhZHkgYmVlbiBzZXQsIHRoZW4gdGhlIHBvbGljeSBpcwotICAgKiBpbmNvbnNpc3RlbnQsIHNvIHdlIHJldHVybiBhIGJhZF9wYXJhbSBlcnJvciBjb2RlCi0gICAqLwotICBzd2l0Y2ggKHBvbGljeS0+c3NyYy50eXBlKSB7Ci0gIGNhc2UgKHNzcmNfYW55X291dGJvdW5kKToKLSAgICBpZiAoc2Vzc2lvbi0+c3RyZWFtX3RlbXBsYXRlKSB7Ci0gICAgICByZXR1cm4gZXJyX3N0YXR1c19iYWRfcGFyYW07CisgICAgLyogd2FsayBkb3duIGxpc3QgdW50aWwgc3NyYyBpcyBmb3VuZCAqLworICAgIHN0cmVhbSA9IHNydHAtPnN0cmVhbV9saXN0OworICAgIHdoaWxlIChzdHJlYW0gIT0gTlVMTCkgeworICAgICAgICBpZiAoc3RyZWFtLT5zc3JjID09IHNzcmMpCisgICAgICAgICAgICByZXR1cm4gc3RyZWFtOworICAgICAgICBzdHJlYW0gPSBzdHJlYW0tPm5leHQ7CiAgICAgfQotICAgIHNlc3Npb24tPnN0cmVhbV90ZW1wbGF0ZSA9IHRtcDsKLSAgICBzZXNzaW9uLT5zdHJlYW1fdGVtcGxhdGUtPmRpcmVjdGlvbiA9IGRpcl9zcnRwX3NlbmRlcjsKLSAgICBicmVhazsKLSAgY2FzZSAoc3NyY19hbnlfaW5ib3VuZCk6Ci0gICAgaWYgKHNlc3Npb24tPnN0cmVhbV90ZW1wbGF0ZSkgewotICAgICAgcmV0dXJuIGVycl9zdGF0dXNfYmFkX3BhcmFtOworCisgICAgLyogd2UgaGF2ZW4ndCBmb3VuZCBvdXIgc3NyYywgc28gcmV0dXJuIGEgbnVsbCAqLworICAgIHJldHVybiBOVUxMOworfQorCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2RlYWxsb2Moc3J0cF90IHNlc3Npb24pCit7CisgICAgc3J0cF9zdHJlYW1fY3R4X3QgKnN0cmVhbTsKKyAgICBzcnRwX2Vycl9zdGF0dXNfdCBzdGF0dXM7CisKKyAgICAvKgorICAgICAqIHdlIHRha2UgYSBjb25zZXJ2YXRpdmUgZGVhbGxvY2F0aW9uIHN0cmF0ZWd5IC0gaWYgd2UgZW5jb3VudGVyIGFuCisgICAgICogZXJyb3IgZGVhbGxvY2F0aW5nIGEgc3RyZWFtLCB0aGVuIHdlIHN0b3AgdHJ5aW5nIHRvIGRlYWxsb2NhdGUKKyAgICAgKiBtZW1vcnkgYW5kIGp1c3QgcmV0dXJuIGFuIGVycm9yCisgICAgICovCisKKyAgICAvKiB3YWxrIGxpc3Qgb2Ygc3RyZWFtcywgZGVhbGxvY2F0aW5nIGFzIHdlIGdvICovCisgICAgc3RyZWFtID0gc2Vzc2lvbi0+c3RyZWFtX2xpc3Q7CisgICAgd2hpbGUgKHN0cmVhbSAhPSBOVUxMKSB7CisgICAgICAgIHNydHBfc3RyZWFtX3QgbmV4dCA9IHN0cmVhbS0+bmV4dDsKKyAgICAgICAgc3RhdHVzID0gc3J0cF9zdHJlYW1fZGVhbGxvYyhzdHJlYW0sIHNlc3Npb24tPnN0cmVhbV90ZW1wbGF0ZSk7CisgICAgICAgIGlmIChzdGF0dXMpCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICBzdHJlYW0gPSBuZXh0OwogICAgIH0KLSAgICBzZXNzaW9uLT5zdHJlYW1fdGVtcGxhdGUgPSB0bXA7Ci0gICAgc2Vzc2lvbi0+c3RyZWFtX3RlbXBsYXRlLT5kaXJlY3Rpb24gPSBkaXJfc3J0cF9yZWNlaXZlcjsKLSAgICBicmVhazsKLSAgY2FzZSAoc3NyY19zcGVjaWZpYyk6Ci0gICAgdG1wLT5uZXh0ID0gc2Vzc2lvbi0+c3RyZWFtX2xpc3Q7Ci0gICAgc2Vzc2lvbi0+c3RyZWFtX2xpc3QgPSB0bXA7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgKHNzcmNfdW5kZWZpbmVkKToKLSAgZGVmYXVsdDoKLSAgICBjcnlwdG9fZnJlZSh0bXApOwotICAgIHJldHVybiBlcnJfc3RhdHVzX2JhZF9wYXJhbTsKLSAgfQotICAgIAotICByZXR1cm4gZXJyX3N0YXR1c19vazsKKworICAgIC8qIGRlYWxsb2NhdGUgc3RyZWFtIHRlbXBsYXRlLCBpZiB0aGVyZSBpcyBvbmUgKi8KKyAgICBpZiAoc2Vzc2lvbi0+c3RyZWFtX3RlbXBsYXRlICE9IE5VTEwpIHsKKyAgICAgICAgc3RhdHVzID0gc3J0cF9zdHJlYW1fZGVhbGxvYyhzZXNzaW9uLT5zdHJlYW1fdGVtcGxhdGUsIE5VTEwpOworICAgICAgICBpZiAoc3RhdHVzKQorICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICAvKiBkZWFsbG9jYXRlIHNlc3Npb24gY29udGV4dCAqLworICAgIHNydHBfY3J5cHRvX2ZyZWUoc2Vzc2lvbik7CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQogCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2FkZF9zdHJlYW0oc3J0cF90IHNlc3Npb24sIGNvbnN0IHNydHBfcG9saWN5X3QgKnBvbGljeSkKK3sKKyAgICBzcnRwX2Vycl9zdGF0dXNfdCBzdGF0dXM7CisgICAgc3J0cF9zdHJlYW1fdCB0bXA7CiAKLWVycl9zdGF0dXNfdAotc3J0cF9jcmVhdGUoc3J0cF90ICpzZXNzaW9uLCAgICAgICAgICAgICAgIC8qIGhhbmRsZSBmb3Igc2Vzc2lvbiAgICAgKi8gCi0JICAgIGNvbnN0IHNydHBfcG9saWN5X3QgKnBvbGljeSkgeyAvKiBTUlRQIHBvbGljeSAobGlzdCkgICAgICovCi0gIGVycl9zdGF0dXNfdCBzdGF0OwotICBzcnRwX2N0eF90ICpjdHg7CisgICAgLyogc2FuaXR5IGNoZWNrIGFyZ3VtZW50cyAqLworICAgIGlmICgoc2Vzc2lvbiA9PSBOVUxMKSB8fCAocG9saWN5ID09IE5VTEwpIHx8CisgICAgICAgICghc3J0cF92YWxpZGF0ZV9wb2xpY3lfbWFzdGVyX2tleXMocG9saWN5KSkpCisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYmFkX3BhcmFtOwogCi0gIC8qIHNhbml0eSBjaGVjayBhcmd1bWVudHMgKi8KLSAgaWYgKChzZXNzaW9uID09IE5VTEwpIHx8IChwb2xpY3kgPT0gTlVMTCkgfHwgKHBvbGljeS0+a2V5ID09IE5VTEwpKQotICAgIHJldHVybiBlcnJfc3RhdHVzX2JhZF9wYXJhbTsKKyAgICAvKiBhbGxvY2F0ZSBzdHJlYW0gICovCisgICAgc3RhdHVzID0gc3J0cF9zdHJlYW1fYWxsb2MoJnRtcCwgcG9saWN5KTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQogCi0gIC8qIGFsbG9jYXRlIHNydHAgY29udGV4dCBhbmQgc2V0IGN0eF9wdHIgKi8KLSAgY3R4ID0gKHNydHBfY3R4X3QgKikgY3J5cHRvX2FsbG9jKHNpemVvZihzcnRwX2N0eF90KSk7Ci0gIGlmIChjdHggPT0gTlVMTCkKLSAgICByZXR1cm4gZXJyX3N0YXR1c19hbGxvY19mYWlsOwotICAqc2Vzc2lvbiA9IGN0eDsKKyAgICAvKiBpbml0aWFsaXplIHN0cmVhbSAgKi8KKyAgICBzdGF0dXMgPSBzcnRwX3N0cmVhbV9pbml0KHRtcCwgcG9saWN5KTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHNydHBfc3RyZWFtX2RlYWxsb2ModG1wLCBOVUxMKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CiAKLSAgLyogCi0gICAqIGxvb3Agb3ZlciBlbGVtZW50cyBpbiB0aGUgcG9saWN5IGxpc3QsIGFsbG9jYXRpbmcgYW5kCi0gICAqIGluaXRpYWxpemluZyBhIHN0cmVhbSBmb3IgZWFjaCBlbGVtZW50Ci0gICAqLwotICBjdHgtPnN0cmVhbV90ZW1wbGF0ZSA9IE5VTEw7Ci0gIGN0eC0+c3RyZWFtX2xpc3QgPSBOVUxMOwotICB3aGlsZSAocG9saWN5ICE9IE5VTEwpIHsgICAgCisgICAgLyoKKyAgICAgKiBzZXQgdGhlIGhlYWQgb2YgdGhlIHN0cmVhbSBsaXN0IG9yIHRoZSB0ZW1wbGF0ZSB0byBwb2ludCB0byB0aGUKKyAgICAgKiBzdHJlYW0gdGhhdCB3ZSd2ZSBqdXN0IGFsbG9jZWQgYW5kIGluaXQnZWQsIGRlcGVuZGluZyBvbiB3aGV0aGVyCisgICAgICogb3Igbm90IGl0IGhhcyBhIHdpbGRjYXJkIFNTUkMgdmFsdWUgb3Igbm90CisgICAgICoKKyAgICAgKiBpZiB0aGUgdGVtcGxhdGUgc3RyZWFtIGhhcyBhbHJlYWR5IGJlZW4gc2V0LCB0aGVuIHRoZSBwb2xpY3kgaXMKKyAgICAgKiBpbmNvbnNpc3RlbnQsIHNvIHdlIHJldHVybiBhIGJhZF9wYXJhbSBlcnJvciBjb2RlCisgICAgICovCisgICAgc3dpdGNoIChwb2xpY3ktPnNzcmMudHlwZSkgeworICAgIGNhc2UgKHNzcmNfYW55X291dGJvdW5kKToKKyAgICAgICAgaWYgKHNlc3Npb24tPnN0cmVhbV90ZW1wbGF0ZSkgeworICAgICAgICAgICAgc3J0cF9zdHJlYW1fZGVhbGxvYyh0bXAsIE5VTEwpOworICAgICAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisgICAgICAgIH0KKyAgICAgICAgc2Vzc2lvbi0+c3RyZWFtX3RlbXBsYXRlID0gdG1wOworICAgICAgICBzZXNzaW9uLT5zdHJlYW1fdGVtcGxhdGUtPmRpcmVjdGlvbiA9IGRpcl9zcnRwX3NlbmRlcjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAoc3NyY19hbnlfaW5ib3VuZCk6CisgICAgICAgIGlmIChzZXNzaW9uLT5zdHJlYW1fdGVtcGxhdGUpIHsKKyAgICAgICAgICAgIHNydHBfc3RyZWFtX2RlYWxsb2ModG1wLCBOVUxMKTsKKyAgICAgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYmFkX3BhcmFtOworICAgICAgICB9CisgICAgICAgIHNlc3Npb24tPnN0cmVhbV90ZW1wbGF0ZSA9IHRtcDsKKyAgICAgICAgc2Vzc2lvbi0+c3RyZWFtX3RlbXBsYXRlLT5kaXJlY3Rpb24gPSBkaXJfc3J0cF9yZWNlaXZlcjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAoc3NyY19zcGVjaWZpYyk6CisgICAgICAgIHRtcC0+bmV4dCA9IHNlc3Npb24tPnN0cmVhbV9saXN0OworICAgICAgICBzZXNzaW9uLT5zdHJlYW1fbGlzdCA9IHRtcDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAoc3NyY191bmRlZmluZWQpOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHNydHBfc3RyZWFtX2RlYWxsb2ModG1wLCBOVUxMKTsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisgICAgfQogCi0gICAgc3RhdCA9IHNydHBfYWRkX3N0cmVhbShjdHgsIHBvbGljeSk7Ci0gICAgaWYgKHN0YXQpIHsKLSAgICAgIHJldHVybiBzdGF0OwotICAgIH0gICAgCi0KLSAgICAvKiBzZXQgcG9saWN5IHRvIG5leHQgaXRlbSBpbiBsaXN0ICAqLwotICAgIHBvbGljeSA9IHBvbGljeS0+bmV4dDsKLSAgfQotCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7CiB9CiAKK3NydHBfZXJyX3N0YXR1c190IHNydHBfY3JlYXRlKHNydHBfdCAqc2Vzc2lvbiwgLyogaGFuZGxlIGZvciBzZXNzaW9uICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3J0cF9wb2xpY3lfdCAqcG9saWN5KQoreyAvKiBTUlRQIHBvbGljeSAobGlzdCkgICAgICovCisgICAgc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdDsKKyAgICBzcnRwX2N0eF90ICpjdHg7CiAKLWVycl9zdGF0dXNfdAotc3J0cF9yZW1vdmVfc3RyZWFtKHNydHBfdCBzZXNzaW9uLCB1aW50MzJfdCBzc3JjKSB7Ci0gIHNydHBfc3RyZWFtX2N0eF90ICpzdHJlYW0sICpsYXN0X3N0cmVhbTsKLSAgZXJyX3N0YXR1c190IHN0YXR1czsKKyAgICAvKiBzYW5pdHkgY2hlY2sgYXJndW1lbnRzICovCisgICAgaWYgKHNlc3Npb24gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CiAKLSAgLyogc2FuaXR5IGNoZWNrIGFyZ3VtZW50cyAqLwotICBpZiAoc2Vzc2lvbiA9PSBOVUxMKQotICAgIHJldHVybiBlcnJfc3RhdHVzX2JhZF9wYXJhbTsKLSAgCi0gIC8qIGZpbmQgc3RyZWFtIGluIGxpc3Q7IGNvbXBsYWluIGlmIG5vdCBmb3VuZCAqLwotICBsYXN0X3N0cmVhbSA9IHN0cmVhbSA9IHNlc3Npb24tPnN0cmVhbV9saXN0OwotICB3aGlsZSAoKHN0cmVhbSAhPSBOVUxMKSAmJiAoc3NyYyAhPSBzdHJlYW0tPnNzcmMpKSB7Ci0gICAgbGFzdF9zdHJlYW0gPSBzdHJlYW07Ci0gICAgc3RyZWFtID0gc3RyZWFtLT5uZXh0OwotICB9Ci0gIGlmIChzdHJlYW0gPT0gTlVMTCkKLSAgICByZXR1cm4gZXJyX3N0YXR1c19ub19jdHg7CisgICAgLyogYWxsb2NhdGUgc3J0cCBjb250ZXh0IGFuZCBzZXQgY3R4X3B0ciAqLworICAgIGN0eCA9IChzcnRwX2N0eF90ICopc3J0cF9jcnlwdG9fYWxsb2Moc2l6ZW9mKHNydHBfY3R4X3QpKTsKKyAgICBpZiAoY3R4ID09IE5VTEwpCisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYWxsb2NfZmFpbDsKKyAgICAqc2Vzc2lvbiA9IGN0eDsKIAotICAvKiByZW1vdmUgc3RyZWFtIGZyb20gdGhlIGxpc3QgKi8KLSAgbGFzdF9zdHJlYW0tPm5leHQgPSBzdHJlYW0tPm5leHQ7CisgICAgLyoKKyAgICAgKiBsb29wIG92ZXIgZWxlbWVudHMgaW4gdGhlIHBvbGljeSBsaXN0LCBhbGxvY2F0aW5nIGFuZAorICAgICAqIGluaXRpYWxpemluZyBhIHN0cmVhbSBmb3IgZWFjaCBlbGVtZW50CisgICAgICovCisgICAgY3R4LT5zdHJlYW1fdGVtcGxhdGUgPSBOVUxMOworICAgIGN0eC0+c3RyZWFtX2xpc3QgPSBOVUxMOworICAgIGN0eC0+dXNlcl9kYXRhID0gTlVMTDsKKyAgICB3aGlsZSAocG9saWN5ICE9IE5VTEwpIHsKKyAgICAgICAgc3RhdCA9IHNydHBfYWRkX3N0cmVhbShjdHgsIHBvbGljeSk7CisgICAgICAgIGlmIChzdGF0KSB7CisgICAgICAgICAgICAvKiBjbGVhbiB1cCBldmVyeXRoaW5nICovCisgICAgICAgICAgICBzcnRwX2RlYWxsb2MoKnNlc3Npb24pOworICAgICAgICAgICAgKnNlc3Npb24gPSBOVUxMOworICAgICAgICAgICAgcmV0dXJuIHN0YXQ7CisgICAgICAgIH0KIAotICAvKiBkZWFsbG9jYXRlIHRoZSBzdHJlYW0gKi8KLSAgc3RhdHVzID0gc3J0cF9zdHJlYW1fZGVhbGxvYyhzZXNzaW9uLCBzdHJlYW0pOwotICBpZiAoc3RhdHVzKQorICAgICAgICAvKiBzZXQgcG9saWN5IHRvIG5leHQgaXRlbSBpbiBsaXN0ICAqLworICAgICAgICBwb2xpY3kgPSBwb2xpY3ktPm5leHQ7CisgICAgfQorCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9yZW1vdmVfc3RyZWFtKHNydHBfdCBzZXNzaW9uLCB1aW50MzJfdCBzc3JjKQoreworICAgIHNydHBfc3RyZWFtX2N0eF90ICpzdHJlYW0sICpsYXN0X3N0cmVhbTsKKyAgICBzcnRwX2Vycl9zdGF0dXNfdCBzdGF0dXM7CisKKyAgICAvKiBzYW5pdHkgY2hlY2sgYXJndW1lbnRzICovCisgICAgaWYgKHNlc3Npb24gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisKKyAgICAvKiBmaW5kIHN0cmVhbSBpbiBsaXN0OyBjb21wbGFpbiBpZiBub3QgZm91bmQgKi8KKyAgICBsYXN0X3N0cmVhbSA9IHN0cmVhbSA9IHNlc3Npb24tPnN0cmVhbV9saXN0OworICAgIHdoaWxlICgoc3RyZWFtICE9IE5VTEwpICYmIChzc3JjICE9IHN0cmVhbS0+c3NyYykpIHsKKyAgICAgICAgbGFzdF9zdHJlYW0gPSBzdHJlYW07CisgICAgICAgIHN0cmVhbSA9IHN0cmVhbS0+bmV4dDsKKyAgICB9CisgICAgaWYgKHN0cmVhbSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX25vX2N0eDsKKworICAgIC8qIHJlbW92ZSBzdHJlYW0gZnJvbSB0aGUgbGlzdCAqLworICAgIGlmIChsYXN0X3N0cmVhbSA9PSBzdHJlYW0pCisgICAgICAgIC8qIHN0cmVhbSB3YXMgZmlyc3QgaW4gbGlzdCAqLworICAgICAgICBzZXNzaW9uLT5zdHJlYW1fbGlzdCA9IHN0cmVhbS0+bmV4dDsKKyAgICBlbHNlCisgICAgICAgIGxhc3Rfc3RyZWFtLT5uZXh0ID0gc3RyZWFtLT5uZXh0OworCisgICAgLyogZGVhbGxvY2F0ZSB0aGUgc3RyZWFtICovCisgICAgc3RhdHVzID0gc3J0cF9zdHJlYW1fZGVhbGxvYyhzdHJlYW0sIHNlc3Npb24tPnN0cmVhbV90ZW1wbGF0ZSk7CisgICAgaWYgKHN0YXR1cykKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7Cit9CisKK3NydHBfZXJyX3N0YXR1c190IHNydHBfdXBkYXRlKHNydHBfdCBzZXNzaW9uLCBjb25zdCBzcnRwX3BvbGljeV90ICpwb2xpY3kpCit7CisgICAgc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdDsKKworICAgIC8qIHNhbml0eSBjaGVjayBhcmd1bWVudHMgKi8KKyAgICBpZiAoKHNlc3Npb24gPT0gTlVMTCkgfHwgKHBvbGljeSA9PSBOVUxMKSB8fAorICAgICAgICAoIXNydHBfdmFsaWRhdGVfcG9saWN5X21hc3Rlcl9rZXlzKHBvbGljeSkpKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYmFkX3BhcmFtOworICAgIH0KKworICAgIHdoaWxlIChwb2xpY3kgIT0gTlVMTCkgeworICAgICAgICBzdGF0ID0gc3J0cF91cGRhdGVfc3RyZWFtKHNlc3Npb24sIHBvbGljeSk7CisgICAgICAgIGlmIChzdGF0KSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHNldCBwb2xpY3kgdG8gbmV4dCBpdGVtIGluIGxpc3QgICovCisgICAgICAgIHBvbGljeSA9IHBvbGljeS0+bmV4dDsKKyAgICB9CisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IHVwZGF0ZV90ZW1wbGF0ZV9zdHJlYW1zKHNydHBfdCBzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNydHBfcG9saWN5X3QgKnBvbGljeSkKK3sKKyAgICBzcnRwX2Vycl9zdGF0dXNfdCBzdGF0dXM7CisgICAgc3J0cF9zdHJlYW1fdCBuZXdfc3RyZWFtX3RlbXBsYXRlOworICAgIHNydHBfc3RyZWFtX3QgbmV3X3N0cmVhbV9saXN0ID0gTlVMTDsKKworICAgIGlmIChzZXNzaW9uLT5zdHJlYW1fdGVtcGxhdGUgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbTsKKyAgICB9CisKKyAgICAvKiBhbGxvY2F0ZSBuZXcgdGVtcGxhdGUgc3RyZWFtICAqLworICAgIHN0YXR1cyA9IHNydHBfc3RyZWFtX2FsbG9jKCZuZXdfc3RyZWFtX3RlbXBsYXRlLCBwb2xpY3kpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICAvKiBpbml0aWFsaXplIG5ldyB0ZW1wbGF0ZSBzdHJlYW0gICovCisgICAgc3RhdHVzID0gc3J0cF9zdHJlYW1faW5pdChuZXdfc3RyZWFtX3RlbXBsYXRlLCBwb2xpY3kpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgc3J0cF9jcnlwdG9fZnJlZShuZXdfc3RyZWFtX3RlbXBsYXRlKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICAvKiBmb3IgYWxsIG9sZCB0ZW1wbGF0ZWQgc3RyZWFtcyAqLworICAgIGZvciAoOzspIHsKKyAgICAgICAgc3J0cF9zdHJlYW1fdCBzdHJlYW07CisgICAgICAgIHVpbnQzMl90IHNzcmM7CisgICAgICAgIHNydHBfeHRkX3NlcV9udW1fdCBvbGRfaW5kZXg7CisgICAgICAgIHNydHBfcmRiX3Qgb2xkX3J0Y3BfcmRiOworCisgICAgICAgIHN0cmVhbSA9IHNlc3Npb24tPnN0cmVhbV9saXN0OworICAgICAgICB3aGlsZSAoKHN0cmVhbSAhPSBOVUxMKSAmJgorICAgICAgICAgICAgICAgKHN0cmVhbS0+c2Vzc2lvbl9rZXlzWzBdLnJ0cF9hdXRoICE9CisgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c3RyZWFtX3RlbXBsYXRlLT5zZXNzaW9uX2tleXNbMF0ucnRwX2F1dGgpKSB7CisgICAgICAgICAgICBzdHJlYW0gPSBzdHJlYW0tPm5leHQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0cmVhbSA9PSBOVUxMKSB7CisgICAgICAgICAgICAvKiBubyBtb3JlIHRlbXBsYXRlZCBzdHJlYW1zICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHNhdmUgb2xkIGV4dGVuZGFyZCBzZXEgKi8KKyAgICAgICAgc3NyYyA9IHN0cmVhbS0+c3NyYzsKKyAgICAgICAgb2xkX2luZGV4ID0gc3RyZWFtLT5ydHBfcmRieC5pbmRleDsKKyAgICAgICAgb2xkX3J0Y3BfcmRiID0gc3RyZWFtLT5ydGNwX3JkYjsKKworICAgICAgICAvKiByZW1vdmUgc3RyZWFtICovCisgICAgICAgIHN0YXR1cyA9IHNydHBfcmVtb3ZlX3N0cmVhbShzZXNzaW9uLCBzc3JjKTsKKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgLyogZnJlZSBuZXcgYWxsb2NhdGlvbnMgKi8KKyAgICAgICAgICAgIHdoaWxlIChuZXdfc3RyZWFtX2xpc3QgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHNydHBfc3RyZWFtX3QgbmV4dCA9IG5ld19zdHJlYW1fbGlzdC0+bmV4dDsKKyAgICAgICAgICAgICAgICBzcnRwX3N0cmVhbV9kZWFsbG9jKG5ld19zdHJlYW1fbGlzdCwgbmV3X3N0cmVhbV90ZW1wbGF0ZSk7CisgICAgICAgICAgICAgICAgbmV3X3N0cmVhbV9saXN0ID0gbmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNydHBfc3RyZWFtX2RlYWxsb2MobmV3X3N0cmVhbV90ZW1wbGF0ZSwgTlVMTCk7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisKKyAgICAgICAgLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBuZXcgc3RyZWFtICovCisgICAgICAgIHN0YXR1cyA9IHNydHBfc3RyZWFtX2Nsb25lKG5ld19zdHJlYW1fdGVtcGxhdGUsIHNzcmMsICZzdHJlYW0pOworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICAvKiBmcmVlIG5ldyBhbGxvY2F0aW9ucyAqLworICAgICAgICAgICAgd2hpbGUgKG5ld19zdHJlYW1fbGlzdCAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgc3J0cF9zdHJlYW1fdCBuZXh0ID0gbmV3X3N0cmVhbV9saXN0LT5uZXh0OworICAgICAgICAgICAgICAgIHNydHBfc3RyZWFtX2RlYWxsb2MobmV3X3N0cmVhbV9saXN0LCBuZXdfc3RyZWFtX3RlbXBsYXRlKTsKKyAgICAgICAgICAgICAgICBuZXdfc3RyZWFtX2xpc3QgPSBuZXh0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3J0cF9zdHJlYW1fZGVhbGxvYyhuZXdfc3RyZWFtX3RlbXBsYXRlLCBOVUxMKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIH0KKworICAgICAgICAvKiBhZGQgbmV3IHN0cmVhbSB0byB0aGUgaGVhZCBvZiB0aGUgbmV3X3N0cmVhbV9saXN0ICovCisgICAgICAgIHN0cmVhbS0+bmV4dCA9IG5ld19zdHJlYW1fbGlzdDsKKyAgICAgICAgbmV3X3N0cmVhbV9saXN0ID0gc3RyZWFtOworCisgICAgICAgIC8qIHJlc3RvcmUgb2xkIGV4dGVuZGVkIHNlcSAqLworICAgICAgICBzdHJlYW0tPnJ0cF9yZGJ4LmluZGV4ID0gb2xkX2luZGV4OworICAgICAgICBzdHJlYW0tPnJ0Y3BfcmRiID0gb2xkX3J0Y3BfcmRiOworICAgIH0KKyAgICAvKiBkZWFsbG9jIG9sZCB0ZW1wbGF0ZSAqLworICAgIHNydHBfc3RyZWFtX2RlYWxsb2Moc2Vzc2lvbi0+c3RyZWFtX3RlbXBsYXRlLCBOVUxMKTsKKyAgICAvKiBzZXQgbmV3IHRlbXBsYXRlICovCisgICAgc2Vzc2lvbi0+c3RyZWFtX3RlbXBsYXRlID0gbmV3X3N0cmVhbV90ZW1wbGF0ZTsKKyAgICAvKiBhZGQgbmV3IGxpc3QgKi8KKyAgICBpZiAobmV3X3N0cmVhbV9saXN0KSB7CisgICAgICAgIHNydHBfc3RyZWFtX3QgdGFpbCA9IG5ld19zdHJlYW1fbGlzdDsKKyAgICAgICAgd2hpbGUgKHRhaWwtPm5leHQpIHsKKyAgICAgICAgICAgIHRhaWwgPSB0YWlsLT5uZXh0OworICAgICAgICB9CisgICAgICAgIHRhaWwtPm5leHQgPSBzZXNzaW9uLT5zdHJlYW1fbGlzdDsKKyAgICAgICAgc2Vzc2lvbi0+c3RyZWFtX2xpc3QgPSBuZXdfc3RyZWFtX2xpc3Q7CisgICAgfQogICAgIHJldHVybiBzdGF0dXM7Ci0KLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7CiB9CiAKK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCB1cGRhdGVfc3RyZWFtKHNydHBfdCBzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3J0cF9wb2xpY3lfdCAqcG9saWN5KQoreworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKKyAgICBzcnRwX3h0ZF9zZXFfbnVtX3Qgb2xkX2luZGV4OworICAgIHNydHBfcmRiX3Qgb2xkX3J0Y3BfcmRiOworICAgIHNydHBfc3RyZWFtX3Qgc3RyZWFtOworCisgICAgc3RyZWFtID0gc3J0cF9nZXRfc3RyZWFtKHNlc3Npb24sIGh0b25sKHBvbGljeS0+c3NyYy52YWx1ZSkpOworICAgIGlmIChzdHJlYW0gPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbTsKKyAgICB9CisKKyAgICAvKiBzYXZlIG9sZCBleHRlbmRhcmQgc2VxICovCisgICAgb2xkX2luZGV4ID0gc3RyZWFtLT5ydHBfcmRieC5pbmRleDsKKyAgICBvbGRfcnRjcF9yZGIgPSBzdHJlYW0tPnJ0Y3BfcmRiOworCisgICAgc3RhdHVzID0gc3J0cF9yZW1vdmVfc3RyZWFtKHNlc3Npb24sIGh0b25sKHBvbGljeS0+c3NyYy52YWx1ZSkpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBzcnRwX2FkZF9zdHJlYW0oc2Vzc2lvbiwgcG9saWN5KTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgc3RyZWFtID0gc3J0cF9nZXRfc3RyZWFtKHNlc3Npb24sIGh0b25sKHBvbGljeS0+c3NyYy52YWx1ZSkpOworICAgIGlmIChzdHJlYW0gPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2ZhaWw7CisgICAgfQorCisgICAgLyogcmVzdG9yZSBvbGQgZXh0ZW5kZWQgc2VxICovCisgICAgc3RyZWFtLT5ydHBfcmRieC5pbmRleCA9IG9sZF9pbmRleDsKKyAgICBzdHJlYW0tPnJ0Y3BfcmRiID0gb2xkX3J0Y3BfcmRiOworCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF91cGRhdGVfc3RyZWFtKHNydHBfdCBzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNydHBfcG9saWN5X3QgKnBvbGljeSkKK3sKKyAgICBzcnRwX2Vycl9zdGF0dXNfdCBzdGF0dXM7CisKKyAgICAvKiBzYW5pdHkgY2hlY2sgYXJndW1lbnRzICovCisgICAgaWYgKChzZXNzaW9uID09IE5VTEwpIHx8IChwb2xpY3kgPT0gTlVMTCkgfHwKKyAgICAgICAgKCFzcnRwX3ZhbGlkYXRlX3BvbGljeV9tYXN0ZXJfa2V5cyhwb2xpY3kpKSkKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisKKyAgICBzd2l0Y2ggKHBvbGljeS0+c3NyYy50eXBlKSB7CisgICAgY2FzZSAoc3NyY19hbnlfb3V0Ym91bmQpOgorICAgIGNhc2UgKHNzcmNfYW55X2luYm91bmQpOgorICAgICAgICBzdGF0dXMgPSB1cGRhdGVfdGVtcGxhdGVfc3RyZWFtcyhzZXNzaW9uLCBwb2xpY3kpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIChzc3JjX3NwZWNpZmljKToKKyAgICAgICAgc3RhdHVzID0gdXBkYXRlX3N0cmVhbShzZXNzaW9uLCBwb2xpY3kpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIChzc3JjX3VuZGVmaW5lZCk6CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KIAogLyoKLSAqIHRoZSBkZWZhdWx0IHBvbGljeSAtIHByb3ZpZGVzIGEgY29udmVuaWVudCB3YXkgZm9yIGNhbGxlcnMgdG8gdXNlCisgKiBUaGUgZGVmYXVsdCBwb2xpY3kgLSBwcm92aWRlcyBhIGNvbnZlbmllbnQgd2F5IGZvciBjYWxsZXJzIHRvIHVzZQogICogdGhlIGRlZmF1bHQgc2VjdXJpdHkgcG9saWN5Ci0gKiAKLSAqIHRoaXMgcG9saWN5IGlzIHRoYXQgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBTUlRQIGludGVybmV0IGRyYWZ0LgorICoKKyAqIFRoZSBkZWZhdWx0IHBvbGljeSBpcyBkZWZpbmVkIGluIFJGQyAzNzExCisgKiAoU2VjdGlvbiA1LiBEZWZhdWx0IGFuZCBtYW5kYXRvcnktdG8taW1wbGVtZW50IFRyYW5zZm9ybXMpCiAgKgogICovCiAKLS8qIAorLyoKICAqIE5PVEU6IGNpcGhlcl9rZXlfbGVuIGlzIHJlYWxseSBrZXkgbGVuICgxMjggYml0cykgcGx1cyBzYWx0IGxlbgogICogICgxMTIgYml0cykKICAqLwogLyogVGhlcmUgYXJlIGhhcmQtY29kZWQgMTYncyBmb3IgYmFzZV9rZXlfbGVuIGluIHRoZSBrZXkgZ2VuZXJhdGlvbiBjb2RlICovCiAKLXZvaWQKLWNyeXB0b19wb2xpY3lfc2V0X3J0cF9kZWZhdWx0KGNyeXB0b19wb2xpY3lfdCAqcCkgewotCi0gIHAtPmNpcGhlcl90eXBlICAgICA9IEFFU18xMjhfSUNNOyAgICAgICAgICAgCi0gIHAtPmNpcGhlcl9rZXlfbGVuICA9IDMwOyAgICAgICAgICAgICAgICAvKiBkZWZhdWx0IDEyOCBiaXRzIHBlciBSRkMgMzcxMSAqLwotICBwLT5hdXRoX3R5cGUgICAgICAgPSBITUFDX1NIQTE7ICAgICAgICAgICAgIAotICBwLT5hdXRoX2tleV9sZW4gICAgPSAyMDsgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAxNjAgYml0cyBwZXIgUkZDIDM3MTEgKi8KLSAgcC0+YXV0aF90YWdfbGVuICAgID0gMTA7ICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgODAgYml0cyBwZXIgUkZDIDM3MTEgKi8KLSAgcC0+c2VjX3NlcnYgICAgICAgID0gc2VjX3NlcnZfY29uZl9hbmRfYXV0aDsKLSAgCit2b2lkIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfcnRwX2RlZmF1bHQoc3J0cF9jcnlwdG9fcG9saWN5X3QgKnApCit7CisgICAgcC0+Y2lwaGVyX3R5cGUgPSBTUlRQX0FFU19JQ01fMTI4OworICAgIHAtPmNpcGhlcl9rZXlfbGVuID0KKyAgICAgICAgU1JUUF9BRVNfSUNNXzEyOF9LRVlfTEVOX1dTQUxUOyAvKiBkZWZhdWx0IDEyOCBiaXRzIHBlciBSRkMgMzcxMSAqLworICAgIHAtPmF1dGhfdHlwZSA9IFNSVFBfSE1BQ19TSEExOworICAgIHAtPmF1dGhfa2V5X2xlbiA9IDIwOyAvKiBkZWZhdWx0IDE2MCBiaXRzIHBlciBSRkMgMzcxMSAqLworICAgIHAtPmF1dGhfdGFnX2xlbiA9IDEwOyAvKiBkZWZhdWx0IDgwIGJpdHMgcGVyIFJGQyAzNzExICovCisgICAgcC0+c2VjX3NlcnYgPSBzZWNfc2Vydl9jb25mX2FuZF9hdXRoOwogfQogCi12b2lkCi1jcnlwdG9fcG9saWN5X3NldF9ydGNwX2RlZmF1bHQoY3J5cHRvX3BvbGljeV90ICpwKSB7Ci0KLSAgcC0+Y2lwaGVyX3R5cGUgICAgID0gQUVTXzEyOF9JQ007ICAgICAgICAgICAKLSAgcC0+Y2lwaGVyX2tleV9sZW4gID0gMzA7ICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0IDEyOCBiaXRzIHBlciBSRkMgMzcxMSAqLwotICBwLT5hdXRoX3R5cGUgICAgICAgPSBITUFDX1NIQTE7ICAgICAgICAgICAgIAotICBwLT5hdXRoX2tleV9sZW4gICAgPSAyMDsgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgMTYwIGJpdHMgcGVyIFJGQyAzNzExICovCi0gIHAtPmF1dGhfdGFnX2xlbiAgICA9IDEwOyAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCA4MCBiaXRzIHBlciBSRkMgMzcxMSAqLwotICBwLT5zZWNfc2VydiAgICAgICAgPSBzZWNfc2Vydl9jb25mX2FuZF9hdXRoOwotICAKK3ZvaWQgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9ydGNwX2RlZmF1bHQoc3J0cF9jcnlwdG9fcG9saWN5X3QgKnApCit7CisgICAgcC0+Y2lwaGVyX3R5cGUgPSBTUlRQX0FFU19JQ01fMTI4OworICAgIHAtPmNpcGhlcl9rZXlfbGVuID0KKyAgICAgICAgU1JUUF9BRVNfSUNNXzEyOF9LRVlfTEVOX1dTQUxUOyAvKiBkZWZhdWx0IDEyOCBiaXRzIHBlciBSRkMgMzcxMSAqLworICAgIHAtPmF1dGhfdHlwZSA9IFNSVFBfSE1BQ19TSEExOworICAgIHAtPmF1dGhfa2V5X2xlbiA9IDIwOyAvKiBkZWZhdWx0IDE2MCBiaXRzIHBlciBSRkMgMzcxMSAqLworICAgIHAtPmF1dGhfdGFnX2xlbiA9IDEwOyAvKiBkZWZhdWx0IDgwIGJpdHMgcGVyIFJGQyAzNzExICovCisgICAgcC0+c2VjX3NlcnYgPSBzZWNfc2Vydl9jb25mX2FuZF9hdXRoOwogfQogCi0vKiAKK3ZvaWQgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfY21fMTI4X2htYWNfc2hhMV8zMihzcnRwX2NyeXB0b19wb2xpY3lfdCAqcCkKK3sKKyAgICAvKgorICAgICAqIGNvcnJlc3BvbmRzIHRvIFJGQyA0NTY4CisgICAgICoKKyAgICAgKiBub3RlIHRoYXQgdGhpcyBjcnlwdG8gcG9saWN5IGlzIGludGVuZGVkIGZvciBTUlRQLCBidXQgbm90IFNSVENQCisgICAgICovCisKKyAgICBwLT5jaXBoZXJfdHlwZSA9IFNSVFBfQUVTX0lDTV8xMjg7CisgICAgcC0+Y2lwaGVyX2tleV9sZW4gPQorICAgICAgICBTUlRQX0FFU19JQ01fMTI4X0tFWV9MRU5fV1NBTFQ7IC8qIDEyOCBiaXQga2V5LCAxMTIgYml0IHNhbHQgKi8KKyAgICBwLT5hdXRoX3R5cGUgPSBTUlRQX0hNQUNfU0hBMTsKKyAgICBwLT5hdXRoX2tleV9sZW4gPSAyMDsgLyogMTYwIGJpdCBrZXkgICAgICAgICAgICAgICAqLworICAgIHAtPmF1dGhfdGFnX2xlbiA9IDQ7ICAvKiAzMiBiaXQgdGFnICAgICAgICAgICAgICAgICovCisgICAgcC0+c2VjX3NlcnYgPSBzZWNfc2Vydl9jb25mX2FuZF9hdXRoOworfQorCit2b2lkIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2NtXzEyOF9udWxsX2F1dGgoc3J0cF9jcnlwdG9fcG9saWN5X3QgKnApCit7CisgICAgLyoKKyAgICAgKiBjb3JyZXNwb25kcyB0byBSRkMgNDU2OAorICAgICAqCisgICAgICogbm90ZSB0aGF0IHRoaXMgY3J5cHRvIHBvbGljeSBpcyBpbnRlbmRlZCBmb3IgU1JUUCwgYnV0IG5vdCBTUlRDUAorICAgICAqLworCisgICAgcC0+Y2lwaGVyX3R5cGUgPSBTUlRQX0FFU19JQ01fMTI4OworICAgIHAtPmNpcGhlcl9rZXlfbGVuID0KKyAgICAgICAgU1JUUF9BRVNfSUNNXzEyOF9LRVlfTEVOX1dTQUxUOyAvKiAxMjggYml0IGtleSwgMTEyIGJpdCBzYWx0ICovCisgICAgcC0+YXV0aF90eXBlID0gU1JUUF9OVUxMX0FVVEg7CisgICAgcC0+YXV0aF9rZXlfbGVuID0gMDsKKyAgICBwLT5hdXRoX3RhZ19sZW4gPSAwOworICAgIHAtPnNlY19zZXJ2ID0gc2VjX3NlcnZfY29uZjsKK30KKwordm9pZCBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X251bGxfY2lwaGVyX2htYWNfc2hhMV84MChzcnRwX2NyeXB0b19wb2xpY3lfdCAqcCkKK3sKKyAgICAvKgorICAgICAqIGNvcnJlc3BvbmRzIHRvIFJGQyA0NTY4CisgICAgICovCisKKyAgICBwLT5jaXBoZXJfdHlwZSA9IFNSVFBfTlVMTF9DSVBIRVI7CisgICAgcC0+Y2lwaGVyX2tleV9sZW4gPSAwOworICAgIHAtPmF1dGhfdHlwZSA9IFNSVFBfSE1BQ19TSEExOworICAgIHAtPmF1dGhfa2V5X2xlbiA9IDIwOworICAgIHAtPmF1dGhfdGFnX2xlbiA9IDEwOworICAgIHAtPnNlY19zZXJ2ID0gc2VjX3NlcnZfYXV0aDsKK30KKwordm9pZCBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X251bGxfY2lwaGVyX2htYWNfbnVsbChzcnRwX2NyeXB0b19wb2xpY3lfdCAqcCkKK3sKKyAgICAvKgorICAgICAqIFNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHRlc3RpbmcKKyAgICAgKi8KKworICAgIHAtPmNpcGhlcl90eXBlID0gU1JUUF9OVUxMX0NJUEhFUjsKKyAgICBwLT5jaXBoZXJfa2V5X2xlbiA9IDA7CisgICAgcC0+YXV0aF90eXBlID0gU1JUUF9OVUxMX0FVVEg7CisgICAgcC0+YXV0aF9rZXlfbGVuID0gMDsKKyAgICBwLT5hdXRoX3RhZ19sZW4gPSAwOworICAgIHAtPnNlY19zZXJ2ID0gc2VjX3NlcnZfbm9uZTsKK30KKwordm9pZCBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8yNTZfaG1hY19zaGExXzgwKHNydHBfY3J5cHRvX3BvbGljeV90ICpwKQoreworICAgIC8qCisgICAgICogY29ycmVzcG9uZHMgdG8gUkZDIDYxODgKKyAgICAgKi8KKworICAgIHAtPmNpcGhlcl90eXBlID0gU1JUUF9BRVNfSUNNXzI1NjsKKyAgICBwLT5jaXBoZXJfa2V5X2xlbiA9IFNSVFBfQUVTX0lDTV8yNTZfS0VZX0xFTl9XU0FMVDsKKyAgICBwLT5hdXRoX3R5cGUgPSBTUlRQX0hNQUNfU0hBMTsKKyAgICBwLT5hdXRoX2tleV9sZW4gPSAyMDsgLyogZGVmYXVsdCAxNjAgYml0cyBwZXIgUkZDIDM3MTEgKi8KKyAgICBwLT5hdXRoX3RhZ19sZW4gPSAxMDsgLyogZGVmYXVsdCA4MCBiaXRzIHBlciBSRkMgMzcxMSAqLworICAgIHAtPnNlY19zZXJ2ID0gc2VjX3NlcnZfY29uZl9hbmRfYXV0aDsKK30KKwordm9pZCBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8yNTZfaG1hY19zaGExXzMyKHNydHBfY3J5cHRvX3BvbGljeV90ICpwKQoreworICAgIC8qCisgICAgICogY29ycmVzcG9uZHMgdG8gUkZDIDYxODgKKyAgICAgKgorICAgICAqIG5vdGUgdGhhdCB0aGlzIGNyeXB0byBwb2xpY3kgaXMgaW50ZW5kZWQgZm9yIFNSVFAsIGJ1dCBub3QgU1JUQ1AKKyAgICAgKi8KKworICAgIHAtPmNpcGhlcl90eXBlID0gU1JUUF9BRVNfSUNNXzI1NjsKKyAgICBwLT5jaXBoZXJfa2V5X2xlbiA9IFNSVFBfQUVTX0lDTV8yNTZfS0VZX0xFTl9XU0FMVDsKKyAgICBwLT5hdXRoX3R5cGUgPSBTUlRQX0hNQUNfU0hBMTsKKyAgICBwLT5hdXRoX2tleV9sZW4gPSAyMDsgLyogZGVmYXVsdCAxNjAgYml0cyBwZXIgUkZDIDM3MTEgKi8KKyAgICBwLT5hdXRoX3RhZ19sZW4gPSA0OyAgLyogZGVmYXVsdCA4MCBiaXRzIHBlciBSRkMgMzcxMSAqLworICAgIHAtPnNlY19zZXJ2ID0gc2VjX3NlcnZfY29uZl9hbmRfYXV0aDsKK30KKworLyoKKyAqIEFFUy0yNTYgd2l0aCBubyBhdXRoZW50aWNhdGlvbi4KKyAqLwordm9pZCBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8yNTZfbnVsbF9hdXRoKHNydHBfY3J5cHRvX3BvbGljeV90ICpwKQoreworICAgIHAtPmNpcGhlcl90eXBlID0gU1JUUF9BRVNfSUNNXzI1NjsKKyAgICBwLT5jaXBoZXJfa2V5X2xlbiA9IFNSVFBfQUVTX0lDTV8yNTZfS0VZX0xFTl9XU0FMVDsKKyAgICBwLT5hdXRoX3R5cGUgPSBTUlRQX05VTExfQVVUSDsKKyAgICBwLT5hdXRoX2tleV9sZW4gPSAwOworICAgIHAtPmF1dGhfdGFnX2xlbiA9IDA7CisgICAgcC0+c2VjX3NlcnYgPSBzZWNfc2Vydl9jb25mOworfQorCit2b2lkIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2NtXzE5Ml9obWFjX3NoYTFfODAoc3J0cF9jcnlwdG9fcG9saWN5X3QgKnApCit7CisgICAgLyoKKyAgICAgKiBjb3JyZXNwb25kcyB0byBSRkMgNjE4OAorICAgICAqLworCisgICAgcC0+Y2lwaGVyX3R5cGUgPSBTUlRQX0FFU19JQ01fMTkyOworICAgIHAtPmNpcGhlcl9rZXlfbGVuID0gU1JUUF9BRVNfSUNNXzE5Ml9LRVlfTEVOX1dTQUxUOworICAgIHAtPmF1dGhfdHlwZSA9IFNSVFBfSE1BQ19TSEExOworICAgIHAtPmF1dGhfa2V5X2xlbiA9IDIwOyAvKiBkZWZhdWx0IDE2MCBiaXRzIHBlciBSRkMgMzcxMSAqLworICAgIHAtPmF1dGhfdGFnX2xlbiA9IDEwOyAvKiBkZWZhdWx0IDgwIGJpdHMgcGVyIFJGQyAzNzExICovCisgICAgcC0+c2VjX3NlcnYgPSBzZWNfc2Vydl9jb25mX2FuZF9hdXRoOworfQorCit2b2lkIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2NtXzE5Ml9obWFjX3NoYTFfMzIoc3J0cF9jcnlwdG9fcG9saWN5X3QgKnApCit7CisgICAgLyoKKyAgICAgKiBjb3JyZXNwb25kcyB0byBSRkMgNjE4OAorICAgICAqCisgICAgICogbm90ZSB0aGF0IHRoaXMgY3J5cHRvIHBvbGljeSBpcyBpbnRlbmRlZCBmb3IgU1JUUCwgYnV0IG5vdCBTUlRDUAorICAgICAqLworCisgICAgcC0+Y2lwaGVyX3R5cGUgPSBTUlRQX0FFU19JQ01fMTkyOworICAgIHAtPmNpcGhlcl9rZXlfbGVuID0gU1JUUF9BRVNfSUNNXzE5Ml9LRVlfTEVOX1dTQUxUOworICAgIHAtPmF1dGhfdHlwZSA9IFNSVFBfSE1BQ19TSEExOworICAgIHAtPmF1dGhfa2V5X2xlbiA9IDIwOyAvKiBkZWZhdWx0IDE2MCBiaXRzIHBlciBSRkMgMzcxMSAqLworICAgIHAtPmF1dGhfdGFnX2xlbiA9IDQ7ICAvKiBkZWZhdWx0IDgwIGJpdHMgcGVyIFJGQyAzNzExICovCisgICAgcC0+c2VjX3NlcnYgPSBzZWNfc2Vydl9jb25mX2FuZF9hdXRoOworfQorCisvKgorICogQUVTLTE5MiB3aXRoIG5vIGF1dGhlbnRpY2F0aW9uLgorICovCit2b2lkIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2NtXzE5Ml9udWxsX2F1dGgoc3J0cF9jcnlwdG9fcG9saWN5X3QgKnApCit7CisgICAgcC0+Y2lwaGVyX3R5cGUgPSBTUlRQX0FFU19JQ01fMTkyOworICAgIHAtPmNpcGhlcl9rZXlfbGVuID0gU1JUUF9BRVNfSUNNXzE5Ml9LRVlfTEVOX1dTQUxUOworICAgIHAtPmF1dGhfdHlwZSA9IFNSVFBfTlVMTF9BVVRIOworICAgIHAtPmF1dGhfa2V5X2xlbiA9IDA7CisgICAgcC0+YXV0aF90YWdfbGVuID0gMDsKKyAgICBwLT5zZWNfc2VydiA9IHNlY19zZXJ2X2NvbmY7Cit9CisKKy8qCisgKiBBRVMtMTI4IEdDTSBtb2RlIHdpdGggOCBvY3RldCBhdXRoIHRhZy4KKyAqLwordm9pZCBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19nY21fMTI4XzhfYXV0aChzcnRwX2NyeXB0b19wb2xpY3lfdCAqcCkKK3sKKyAgICBwLT5jaXBoZXJfdHlwZSA9IFNSVFBfQUVTX0dDTV8xMjg7CisgICAgcC0+Y2lwaGVyX2tleV9sZW4gPSBTUlRQX0FFU19HQ01fMTI4X0tFWV9MRU5fV1NBTFQ7CisgICAgcC0+YXV0aF90eXBlID0gU1JUUF9OVUxMX0FVVEg7IC8qIEdDTSBoYW5kbGVzIHRoZSBhdXRoIGZvciB1cyAqLworICAgIHAtPmF1dGhfa2V5X2xlbiA9IDA7CisgICAgcC0+YXV0aF90YWdfbGVuID0gODsgLyogOCBvY3RldCB0YWcgbGVuZ3RoICovCisgICAgcC0+c2VjX3NlcnYgPSBzZWNfc2Vydl9jb25mX2FuZF9hdXRoOworfQorCisvKgorICogQUVTLTI1NiBHQ00gbW9kZSB3aXRoIDggb2N0ZXQgYXV0aCB0YWcuCisgKi8KK3ZvaWQgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzI1Nl84X2F1dGgoc3J0cF9jcnlwdG9fcG9saWN5X3QgKnApCit7CisgICAgcC0+Y2lwaGVyX3R5cGUgPSBTUlRQX0FFU19HQ01fMjU2OworICAgIHAtPmNpcGhlcl9rZXlfbGVuID0gU1JUUF9BRVNfR0NNXzI1Nl9LRVlfTEVOX1dTQUxUOworICAgIHAtPmF1dGhfdHlwZSA9IFNSVFBfTlVMTF9BVVRIOyAvKiBHQ00gaGFuZGxlcyB0aGUgYXV0aCBmb3IgdXMgKi8KKyAgICBwLT5hdXRoX2tleV9sZW4gPSAwOworICAgIHAtPmF1dGhfdGFnX2xlbiA9IDg7IC8qIDggb2N0ZXQgdGFnIGxlbmd0aCAqLworICAgIHAtPnNlY19zZXJ2ID0gc2VjX3NlcnZfY29uZl9hbmRfYXV0aDsKK30KKworLyoKKyAqIEFFUy0xMjggR0NNIG1vZGUgd2l0aCA4IG9jdGV0IGF1dGggdGFnLCBubyBSVENQIGVuY3J5cHRpb24uCisgKi8KK3ZvaWQgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzEyOF84X29ubHlfYXV0aChzcnRwX2NyeXB0b19wb2xpY3lfdCAqcCkKK3sKKyAgICBwLT5jaXBoZXJfdHlwZSA9IFNSVFBfQUVTX0dDTV8xMjg7CisgICAgcC0+Y2lwaGVyX2tleV9sZW4gPSBTUlRQX0FFU19HQ01fMTI4X0tFWV9MRU5fV1NBTFQ7CisgICAgcC0+YXV0aF90eXBlID0gU1JUUF9OVUxMX0FVVEg7IC8qIEdDTSBoYW5kbGVzIHRoZSBhdXRoIGZvciB1cyAqLworICAgIHAtPmF1dGhfa2V5X2xlbiA9IDA7CisgICAgcC0+YXV0aF90YWdfbGVuID0gODsgICAgICAgICAvKiA4IG9jdGV0IHRhZyBsZW5ndGggKi8KKyAgICBwLT5zZWNfc2VydiA9IHNlY19zZXJ2X2F1dGg7IC8qIFRoaXMgb25seSBhcHBsaWVzIHRvIFJUQ1AgKi8KK30KKworLyoKKyAqIEFFUy0yNTYgR0NNIG1vZGUgd2l0aCA4IG9jdGV0IGF1dGggdGFnLCBubyBSVENQIGVuY3J5cHRpb24uCisgKi8KK3ZvaWQgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzI1Nl84X29ubHlfYXV0aChzcnRwX2NyeXB0b19wb2xpY3lfdCAqcCkKK3sKKyAgICBwLT5jaXBoZXJfdHlwZSA9IFNSVFBfQUVTX0dDTV8yNTY7CisgICAgcC0+Y2lwaGVyX2tleV9sZW4gPSBTUlRQX0FFU19HQ01fMjU2X0tFWV9MRU5fV1NBTFQ7CisgICAgcC0+YXV0aF90eXBlID0gU1JUUF9OVUxMX0FVVEg7IC8qIEdDTSBoYW5kbGVzIHRoZSBhdXRoIGZvciB1cyAqLworICAgIHAtPmF1dGhfa2V5X2xlbiA9IDA7CisgICAgcC0+YXV0aF90YWdfbGVuID0gODsgICAgICAgICAvKiA4IG9jdGV0IHRhZyBsZW5ndGggKi8KKyAgICBwLT5zZWNfc2VydiA9IHNlY19zZXJ2X2F1dGg7IC8qIFRoaXMgb25seSBhcHBsaWVzIHRvIFJUQ1AgKi8KK30KKworLyoKKyAqIEFFUy0xMjggR0NNIG1vZGUgd2l0aCAxNiBvY3RldCBhdXRoIHRhZy4KKyAqLwordm9pZCBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19nY21fMTI4XzE2X2F1dGgoc3J0cF9jcnlwdG9fcG9saWN5X3QgKnApCit7CisgICAgcC0+Y2lwaGVyX3R5cGUgPSBTUlRQX0FFU19HQ01fMTI4OworICAgIHAtPmNpcGhlcl9rZXlfbGVuID0gU1JUUF9BRVNfR0NNXzEyOF9LRVlfTEVOX1dTQUxUOworICAgIHAtPmF1dGhfdHlwZSA9IFNSVFBfTlVMTF9BVVRIOyAvKiBHQ00gaGFuZGxlcyB0aGUgYXV0aCBmb3IgdXMgKi8KKyAgICBwLT5hdXRoX2tleV9sZW4gPSAwOworICAgIHAtPmF1dGhfdGFnX2xlbiA9IDE2OyAvKiAxNiBvY3RldCB0YWcgbGVuZ3RoICovCisgICAgcC0+c2VjX3NlcnYgPSBzZWNfc2Vydl9jb25mX2FuZF9hdXRoOworfQorCisvKgorICogQUVTLTI1NiBHQ00gbW9kZSB3aXRoIDE2IG9jdGV0IGF1dGggdGFnLgorICovCit2b2lkIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2djbV8yNTZfMTZfYXV0aChzcnRwX2NyeXB0b19wb2xpY3lfdCAqcCkKK3sKKyAgICBwLT5jaXBoZXJfdHlwZSA9IFNSVFBfQUVTX0dDTV8yNTY7CisgICAgcC0+Y2lwaGVyX2tleV9sZW4gPSBTUlRQX0FFU19HQ01fMjU2X0tFWV9MRU5fV1NBTFQ7CisgICAgcC0+YXV0aF90eXBlID0gU1JUUF9OVUxMX0FVVEg7IC8qIEdDTSBoYW5kbGVzIHRoZSBhdXRoIGZvciB1cyAqLworICAgIHAtPmF1dGhfa2V5X2xlbiA9IDA7CisgICAgcC0+YXV0aF90YWdfbGVuID0gMTY7IC8qIDE2IG9jdGV0IHRhZyBsZW5ndGggKi8KKyAgICBwLT5zZWNfc2VydiA9IHNlY19zZXJ2X2NvbmZfYW5kX2F1dGg7Cit9CisKKy8qCiAgKiBzZWN1cmUgcnRjcCBmdW5jdGlvbnMKICAqLwogCi1lcnJfc3RhdHVzX3QgCi1zcnRwX3Byb3RlY3RfcnRjcChzcnRwX3QgY3R4LCB2b2lkICpydGNwX2hkciwgaW50ICpwa3Rfb2N0ZXRfbGVuKSB7Ci0gIHNydGNwX2hkcl90ICpoZHIgPSBydGNwX2hkcjsKLSAgdWludDMyX3QgKmVuY19zdGFydDsgICAgICAvKiBwb2ludGVyIHRvIHN0YXJ0IG9mIGVuY3J5cHRlZCBwb3J0aW9uICAqLwotICB1aW50MzJfdCAqYXV0aF9zdGFydDsgICAgIC8qIHBvaW50ZXIgdG8gc3RhcnQgb2YgYXV0aC4gcG9ydGlvbiAgICAgICovCi0gIHVpbnQzMl90ICp0cmFpbGVyOyAgICAgICAgLyogcG9pbnRlciB0byBzdGFydCBvZiB0cmFpbGVyICAgICAgICAgICAgKi8KLSAgdWludDMyX3QgZW5jX29jdGV0X2xlbiA9IDA7LyogbnVtYmVyIG9mIG9jdGV0cyBpbiBlbmNyeXB0ZWQgcG9ydGlvbiAqLwotICBvY3RldF90ICphdXRoX3RhZyA9IE5VTEw7IC8qIGxvY2F0aW9uIG9mIGF1dGhfdGFnIHdpdGhpbiBwYWNrZXQgICAgICovCi0gIGVycl9zdGF0dXNfdCBzdGF0dXM7ICAgCi0gIGludCB0YWdfbGVuOwotICBzcnRwX3N0cmVhbV9jdHhfdCAqc3RyZWFtOwotICBpbnQgcHJlZml4X2xlbjsKLSAgdWludDMyX3Qgc2VxX251bTsKKy8qCisgKiBBRUFEIHVzZXMgYSBuZXcgSVYgZm9ybWF0aW9uIG1ldGhvZC4gIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cworICogc2VjdGlvbiA5LjEgKFNSVENQIElWIEZvcm1hdGlvbiBmb3IgQUVTLUdDTSkgZnJvbSBSRkM3NzE0LgorICogVGhlIGNhbGN1bGF0aW9uIGlzIGRlZmluZWQgYXMsIHdoZXJlICgrKSBpcyB0aGUgeG9yIG9wZXJhdGlvbjoKKyAqCisgKiAgICAgICAgICAgICAgICAwICAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5IDEwIDExCisgKiAgICAgICAgICAgICAgICstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSsKKyAqICAgICAgICAgICAgICAgfDAwfDAwfCAgICBTU1JDICAgfDAwfDAwfDArU1JUQ1AgSWR4fC0tLSsKKyAqICAgICAgICAgICAgICAgKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKyAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKyAgIHwKKyAqICAgICAgICAgICAgICAgfCAgICAgICAgIEVuY3J5cHRpb24gU2FsdCAgICAgICAgICAgfC0+KCspCisgKiAgICAgICAgICAgICAgICstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSsgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSsgICB8CisgKiAgICAgICAgICAgICAgIHwgICAgICAgSW5pdGlhbGl6YXRpb24gVmVjdG9yICAgICAgIHw8LS0rCisgKiAgICAgICAgICAgICAgICstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSsqCisgKgorICogSW5wdXQ6ICAqc2Vzc2lvbl9rZXlzIC0gcG9pbnRlciB0byBTUlRQIHN0cmVhbSBjb250ZXh0IHNlc3Npb24ga2V5cywKKyAqICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byByZXRyaWV2ZSB0aGUgU0FMVAorICogICAgICAgICAqaXYgICAgICAgICAgIC0gUG9pbnRlciB0byByZWNpZXZlIHRoZSBjYWxjdWxhdGVkIElWCisgKiAgICAgICAgIHNlcV9udW0gICAgICAgLSBUaGUgU0VRIHZhbHVlIHRvIHVzZSBmb3IgdGhlIElWIGNhbGN1bGF0aW9uLgorICogICAgICAgICAqaGRyICAgICAgICAgIC0gVGhlIFJUUCBoZWFkZXIsIHVzZWQgdG8gZ2V0IHRoZSBTU1JDIHZhbHVlCisgKgorICogUmV0dXJuczogc3J0cF9lcnJfc3RhdHVzX29rIGlmIG5vIGVycm9yIG9yIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW0KKyAqICAgICAgICAgIGlmIHNlcV9udW0gaXMgaW52YWxpZAorICoKKyAqLworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IHNydHBfY2FsY19hZWFkX2l2X3NydGNwKAorICAgIHNydHBfc2Vzc2lvbl9rZXlzX3QgKnNlc3Npb25fa2V5cywKKyAgICB2MTI4X3QgKml2LAorICAgIHVpbnQzMl90IHNlcV9udW0sCisgICAgc3J0Y3BfaGRyX3QgKmhkcikKK3sKKyAgICB2MTI4X3QgaW47CisgICAgdjEyOF90IHNhbHQ7CiAKLSAgLyogd2UgYXNzdW1lIHRoZSBoZHIgaXMgMzItYml0IGFsaWduZWQgdG8gc3RhcnQgKi8KLSAgLyoKLSAgICogbG9vayB1cCBzc3JjIGluIHNydHBfc3RyZWFtIGxpc3QsIGFuZCBwcm9jZXNzIHRoZSBwYWNrZXQgd2l0aCAKLSAgICogdGhlIGFwcHJvcHJpYXRlIHN0cmVhbS4gIGlmIHdlIGhhdmVuJ3Qgc2VlbiB0aGlzIHN0cmVhbSBiZWZvcmUsCi0gICAqIHRoZXJlJ3Mgb25seSBvbmUga2V5IGZvciB0aGlzIHNydHBfc2Vzc2lvbiwgYW5kIHRoZSBjaXBoZXIKLSAgICogc3VwcG9ydHMga2V5LXNoYXJpbmcsIHRoZW4gd2UgYXNzdW1lIHRoYXQgYSBuZXcgc3RyZWFtIHVzaW5nCi0gICAqIHRoYXQga2V5IGhhcyBqdXN0IHN0YXJ0ZWQgdXAKLSAgICovCi0gIHN0cmVhbSA9IHNydHBfZ2V0X3N0cmVhbShjdHgsIGhkci0+c3NyYyk7Ci0gIGlmIChzdHJlYW0gPT0gTlVMTCkgewotICAgIGlmIChjdHgtPnN0cmVhbV90ZW1wbGF0ZSAhPSBOVUxMKSB7Ci0gICAgICBzcnRwX3N0cmVhbV9jdHhfdCAqbmV3X3N0cmVhbTsKLSAgICAgIAotICAgICAgLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBuZXcgc3RyZWFtICovCi0gICAgICBzdGF0dXMgPSBzcnRwX3N0cmVhbV9jbG9uZShjdHgtPnN0cmVhbV90ZW1wbGF0ZSwKLQkJCQkgaGRyLT5zc3JjLCAmbmV3X3N0cmVhbSk7IAotICAgICAgaWYgKHN0YXR1cykKLQlyZXR1cm4gc3RhdHVzOwotICAgICAgCi0gICAgICAvKiBhZGQgbmV3IHN0cmVhbSB0byB0aGUgaGVhZCBvZiB0aGUgc3RyZWFtX2xpc3QgKi8KLSAgICAgIG5ld19zdHJlYW0tPm5leHQgPSBjdHgtPnN0cmVhbV9saXN0OwotICAgICAgY3R4LT5zdHJlYW1fbGlzdCA9IG5ld19zdHJlYW07Ci0gICAgICAKLSAgICAgIC8qIHNldCBzdHJlYW0gKHRoZSBwb2ludGVyIHVzZWQgaW4gdGhpcyBmdW5jdGlvbikgKi8KLSAgICAgIHN0cmVhbSA9IG5ld19zdHJlYW07Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIG5vIHRlbXBsYXRlIHN0cmVhbSwgc28gd2UgcmV0dXJuIGFuIGVycm9yICovCi0gICAgICByZXR1cm4gZXJyX3N0YXR1c19ub19jdHg7Ci0gICAgfSAKLSAgfQotICAKLSAgLyogCi0gICAqIHZlcmlmeSB0aGF0IHN0cmVhbSBpcyBmb3Igc2VuZGluZyB0cmFmZmljIC0gdGhpcyBjaGVjayB3aWxsCi0gICAqIGRldGVjdCBTU1JDIGNvbGxpc2lvbnMsIHNpbmNlIGEgc3RyZWFtIHRoYXQgYXBwZWFycyBpbiBib3RoCi0gICAqIHNydHBfcHJvdGVjdCgpIGFuZCBzcnRwX3VucHJvdGVjdCgpIHdpbGwgZmFpbCB0aGlzIHRlc3QgaW4gb25lIG9mCi0gICAqIHRob3NlIGZ1bmN0aW9ucy4KLSAgICovCi0gIGlmIChzdHJlYW0tPmRpcmVjdGlvbiAhPSBkaXJfc3J0cF9zZW5kZXIpIHsKLSAgICBpZiAoc3RyZWFtLT5kaXJlY3Rpb24gPT0gZGlyX3Vua25vd24pIHsKLSAgICAgIHN0cmVhbS0+ZGlyZWN0aW9uID0gZGlyX3NydHBfcmVjZWl2ZXI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNydHBfaGFuZGxlX2V2ZW50KGN0eCwgc3RyZWFtLCBldmVudF9zc3JjX2NvbGxpc2lvbik7CisgICAgbWVtc2V0KCZpbiwgMCwgc2l6ZW9mKHYxMjhfdCkpOworICAgIG1lbXNldCgmc2FsdCwgMCwgc2l6ZW9mKHYxMjhfdCkpOworCisgICAgaW4udjE2WzBdID0gMDsKKyAgICBtZW1jcHkoJmluLnYxNlsxXSwgJmhkci0+c3NyYywgNCk7IC8qIHN0aWxsIGluIG5ldHdvcmsgb3JkZXIhICovCisgICAgaW4udjE2WzNdID0gMDsKKworICAgIC8qCisgICAgICogIFRoZSBTUlRDUCBpbmRleCAoc2VxX251bSkgc3BhbnMgYml0cyAwIHRocm91Z2ggMzAgaW5jbHVzaXZlLgorICAgICAqICBUaGUgbW9zdCBzaWduaWZpY2FudCBiaXQgc2hvdWxkIGJlIHplcm8uCisgICAgICovCisgICAgaWYgKHNlcV9udW0gJiAweDgwMDAwMDAwVUwpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CiAgICAgfQotICB9ICAKKyAgICBpbi52MzJbMl0gPSBodG9ubChzZXFfbnVtKTsKIAotICAvKiBnZXQgdGFnIGxlbmd0aCBmcm9tIHN0cmVhbSBjb250ZXh0ICovCi0gIHRhZ19sZW4gPSBhdXRoX2dldF90YWdfbGVuZ3RoKHN0cmVhbS0+cnRjcF9hdXRoKTsgCisgICAgZGVidWdfcHJpbnQobW9kX3NydHAsICJQcmUtc2FsdGVkIFJUQ1AgSVYgPSAlc1xuIiwgdjEyOF9oZXhfc3RyaW5nKCZpbikpOwogCi0gIC8qCi0gICAqIHNldCBlbmNyeXB0aW9uIHN0YXJ0IGFuZCBlbmNyeXB0aW9uIGxlbmd0aCAtIGlmIHdlJ3JlIG5vdAotICAgKiBwcm92aWRpbmcgY29uZmlkZW50aWFsaXR5LCBzZXQgZW5jX3N0YXJ0IHRvIE5VTEwKLSAgICovCi0gIGVuY19zdGFydCA9ICh1aW50MzJfdCAqKWhkciArIHVpbnQzMnNfaW5fcnRjcF9oZWFkZXI7ICAKLSAgZW5jX29jdGV0X2xlbiA9ICpwa3Rfb2N0ZXRfbGVuIC0gb2N0ZXRzX2luX3J0Y3BfaGVhZGVyOworICAgIC8qCisgICAgICogR2V0IHRoZSBTQUxUIHZhbHVlIGZyb20gdGhlIGNvbnRleHQKKyAgICAgKi8KKyAgICBtZW1jcHkoc2FsdC52OCwgc2Vzc2lvbl9rZXlzLT5jX3NhbHQsIDEyKTsKKyAgICBkZWJ1Z19wcmludChtb2Rfc3J0cCwgIlJUQ1AgU0FMVCA9ICVzXG4iLCB2MTI4X2hleF9zdHJpbmcoJnNhbHQpKTsKIAotICAvKiBhbGwgb2YgdGhlIHBhY2tldCwgZXhjZXB0IHRoZSBoZWFkZXIsIGdldHMgZW5jcnlwdGVkICovCi0gIC8qIE5PVEU6IGhkci0+bGVuZ3RoIGlzIG5vdCB1c2FibGUgLSBpdCByZWZlcnMgdG8gb25seSB0aGUgZmlyc3QKLQkgUlRDUCByZXBvcnQgaW4gdGhlIGNvbXBvdW5kIHBhY2tldCEgKi8KLSAgLyogTk9URTogdHJhaWxlciBpcyAzMi1iaXQgYWxpZ25lZCBiZWNhdXNlIFJUQ1AgJ3BhY2tldHMnIGFyZSBhbHdheXMKLQkgbXVsdGlwbGVzIG9mIDMyLWJpdHMgKFJGQyAzNTUwIDYuMSkgKi8KLSAgdHJhaWxlciA9ICh1aW50MzJfdCAqKSAoKGNoYXIgKillbmNfc3RhcnQgKyBlbmNfb2N0ZXRfbGVuKTsKKyAgICAvKgorICAgICAqIEZpbmFsbHksIGFwcGx5IHRoZSBTQUxUIHRvIHRoZSBpbnB1dAorICAgICAqLworICAgIHYxMjhfeG9yKGl2LCAmaW4sICZzYWx0KTsKIAotICBpZiAoc3RyZWFtLT5ydGNwX3NlcnZpY2VzICYgc2VjX3NlcnZfY29uZikgewotICAgICp0cmFpbGVyID0gaHRvbmwoU1JUQ1BfRV9CSVQpOyAgICAgLyogc2V0IGVuY3J5cHQgYml0ICovICAgIAotICB9IGVsc2UgewotICAgIGVuY19zdGFydCA9IE5VTEw7Ci0gICAgZW5jX29jdGV0X2xlbiA9IDA7Ci0JLyogMCBpcyBuZXR3b3JrLW9yZGVyIGluZGVwZW5kYW50ICovCi0gICAgKnRyYWlsZXIgPSAweDAwMDAwMDAwOyAgICAgLyogc2V0IGVuY3J5cHQgYml0ICovICAgIAotICB9Ci0KLSAgLyogCi0gICAqIHNldCB0aGUgYXV0aF9zdGFydCBhbmQgYXV0aF90YWcgcG9pbnRlcnMgdG8gdGhlIHByb3BlciBsb2NhdGlvbnMKLSAgICogKG5vdGUgdGhhdCBzcnRwYyAqYWx3YXlzKiBwcm92aWRlcyBhdXRoZW50aWNhdGlvbiwgdW5saWtlIHNydHApCi0gICAqLwotICAvKiBOb3RlOiBUaGlzIHdvdWxkIG5lZWQgdG8gY2hhbmdlIGZvciBvcHRpb25hbCBtaWtleSBkYXRhICovCi0gIGF1dGhfc3RhcnQgPSAodWludDMyX3QgKiloZHI7Ci0gIGF1dGhfdGFnID0gKG9jdGV0X3QgKiloZHIgKyAqcGt0X29jdGV0X2xlbiArIHNpemVvZihzcnRjcF90cmFpbGVyX3QpOyAKLQotICAvKiAKLSAgICogY2hlY2sgc2VxdWVuY2UgbnVtYmVyIGZvciBvdmVycnVucywgYW5kIGNvcHkgaXQgaW50byB0aGUgcGFja2V0Ci0gICAqIGlmIGl0cyB2YWx1ZSBpc24ndCB0b28gYmlnCi0gICAqLwotICBzdGF0dXMgPSByZGJfaW5jcmVtZW50KCZzdHJlYW0tPnJ0Y3BfcmRiKTsKLSAgaWYgKHN0YXR1cykKLSAgICByZXR1cm4gc3RhdHVzOwotICBzZXFfbnVtID0gcmRiX2dldF92YWx1ZSgmc3RyZWFtLT5ydGNwX3JkYik7Ci0gICp0cmFpbGVyIHw9IGh0b25sKHNlcV9udW0pOwotICBkZWJ1Z19wcmludChtb2Rfc3J0cCwgInNydGNwIGluZGV4OiAleCIsIHNlcV9udW0pOwotCi0gIC8qIAotICAgKiBpZiB3ZSdyZSB1c2luZyByaW5kYWVsIGNvdW50ZXIgbW9kZSwgc2V0IG5vbmNlIGFuZCBzZXEgCi0gICAqLwotICBpZiAoc3RyZWFtLT5ydGNwX2NpcGhlci0+dHlwZSA9PSAmYWVzX2ljbSkgewotICAgIHYxMjhfdCBpdjsKLSAgICAKLSAgICBpdi52MzJbMF0gPSAwOwotICAgIGl2LnYzMlsxXSA9IGhkci0+c3NyYzsgIC8qIHN0aWxsIGluIG5ldHdvcmsgb3JkZXIhICovCi0gICAgaXYudjMyWzJdID0gaHRvbmwoc2VxX251bSA+PiAxNik7Ci0gICAgaXYudjMyWzNdID0gaHRvbmwoc2VxX251bSA8PCAxNik7Ci0gICAgc3RhdHVzID0gYWVzX2ljbV9zZXRfaXYoc3RyZWFtLT5ydGNwX2NpcGhlci0+c3RhdGUsICZpdik7Ci0KLSAgfSBlbHNlIHsgIAotICAgIHYxMjhfdCBpdjsKLSAgICAKLSAgICAvKiBvdGhlcndpc2UsIGp1c3Qgc2V0IHRoZSBpbmRleCB0byBzZXFfbnVtICovICAKLSAgICBpdi52MzJbMF0gPSAwOwotICAgIGl2LnYzMlsxXSA9IDA7Ci0gICAgaXYudjMyWzJdID0gMDsKLSAgICBpdi52MzJbM10gPSBodG9ubChzZXFfbnVtKTsKLSAgICBzdGF0dXMgPSBjaXBoZXJfc2V0X2l2KHN0cmVhbS0+cnRjcF9jaXBoZXIsICZpdik7Ci0gIH0KLSAgaWYgKHN0YXR1cykKLSAgICByZXR1cm4gZXJyX3N0YXR1c19jaXBoZXJfZmFpbDsKLQotICAvKiAKLSAgICogaWYgd2UncmUgYXV0aGVudGljYXRpbmcgdXNpbmcgYSB1bml2ZXJzYWwgaGFzaCwgcHV0IHRoZSBrZXlzdHJlYW0KLSAgICogcHJlZml4IGludG8gdGhlIGF1dGhlbnRpY2F0aW9uIHRhZwotICAgKi8KLSAgCi0gIC8qIGlmIGF1dGhfc3RhcnQgaXMgbm9uLW51bGwsIHRoZW4gcHV0IGtleXN0cmVhbSBpbnRvIHRhZyAgKi8KLSAgaWYgKGF1dGhfc3RhcnQpIHsKLQotICAgIC8qIHB1dCBrZXlzdHJlYW0gcHJlZml4IGludG8gYXV0aF90YWcgKi8KLSAgICBwcmVmaXhfbGVuID0gYXV0aF9nZXRfcHJlZml4X2xlbmd0aChzdHJlYW0tPnJ0Y3BfYXV0aCk7ICAgIAotICAgIHN0YXR1cyA9IGNpcGhlcl9vdXRwdXQoc3RyZWFtLT5ydGNwX2NpcGhlciwgYXV0aF90YWcsIHByZWZpeF9sZW4pOwotCi0gICAgZGVidWdfcHJpbnQobW9kX3NydHAsICJrZXlzdHJlYW0gcHJlZml4OiAlcyIsIAotCQlvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhhdXRoX3RhZywgcHJlZml4X2xlbikpOwotCi0gICAgaWYgKHN0YXR1cykKLSAgICAgIHJldHVybiBlcnJfc3RhdHVzX2NpcGhlcl9mYWlsOwotICB9Ci0KLSAgLyogaWYgd2UncmUgZW5jcnlwdGluZywgZXhvciBrZXlzdHJlYW0gaW50byB0aGUgbWVzc2FnZSAqLwotICBpZiAoZW5jX3N0YXJ0KSB7Ci0gICAgc3RhdHVzID0gY2lwaGVyX2VuY3J5cHQoc3RyZWFtLT5ydGNwX2NpcGhlciwgCi0JCQkgICAgKG9jdGV0X3QgKillbmNfc3RhcnQsICZlbmNfb2N0ZXRfbGVuKTsKLSAgICBpZiAoc3RhdHVzKQotICAgICAgcmV0dXJuIGVycl9zdGF0dXNfY2lwaGVyX2ZhaWw7Ci0gIH0KLQotICAvKiBpbml0aWFsaXplIGF1dGggZnVuYyBjb250ZXh0ICovCi0gIGF1dGhfc3RhcnQoc3RyZWFtLT5ydGNwX2F1dGgpOwotCi0gIC8qIHBlciBzcGVjLCBkbyBhdXRoIGFmdGVyIGVuY3J5cHRpb24gKi8KLSAgLyogcnVuIGF1dGggZnVuYyBvdmVyIHBhY2tldCwgcHV0IHJlc3VsdCBpbnRvIGF1dGhfdGFnICovCi0gIHN0YXR1cyA9IGF1dGhfY29tcHV0ZShzdHJlYW0tPnJ0Y3BfYXV0aCwgCi0JCQkob2N0ZXRfdCAqKWF1dGhfc3RhcnQsICAqcGt0X29jdGV0X2xlbiwgYXV0aF90YWcpOwotICBkZWJ1Z19wcmludChtb2Rfc3J0cCwgInNydGNwIGF1dGggdGFnOiAgICAlcyIsIAotCSAgICAgIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKGF1dGhfdGFnLCB0YWdfbGVuKSk7Ci0gIGlmIChzdGF0dXMpCi0gICAgcmV0dXJuIGVycl9zdGF0dXNfYXV0aF9mYWlsOyAgIAotICAgIAotICAvKiBpbmNyZWFzZSB0aGUgcGFja2V0IGxlbmd0aCBieSB0aGUgbGVuZ3RoIG9mIHRoZSBhdXRoIHRhZyBhbmQgc2VxX251bSovCi0gICpwa3Rfb2N0ZXRfbGVuICs9ICh0YWdfbGVuICsgc2l6ZW9mKHNydGNwX3RyYWlsZXJfdCkpOwotICAgIAotICByZXR1cm4gZXJyX3N0YXR1c19vazsgIAorICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7CiB9CiAKLQotZXJyX3N0YXR1c190IAotc3J0cF91bnByb3RlY3RfcnRjcChzcnRwX3QgY3R4LCB2b2lkICpzcnRjcF9oZHIsIGludCAqcGt0X29jdGV0X2xlbikgewotICBzcnRjcF9oZHJfdCAqaGRyID0gc3J0Y3BfaGRyOwotICB1aW50MzJfdCAqZW5jX3N0YXJ0OyAgICAgIC8qIHBvaW50ZXIgdG8gc3RhcnQgb2YgZW5jcnlwdGVkIHBvcnRpb24gICovCi0gIHVpbnQzMl90ICphdXRoX3N0YXJ0OyAgICAgLyogcG9pbnRlciB0byBzdGFydCBvZiBhdXRoLiBwb3J0aW9uICAgICAgKi8KLSAgdWludDMyX3QgKnRyYWlsZXI7ICAgICAgICAvKiBwb2ludGVyIHRvIHN0YXJ0IG9mIHRyYWlsZXIgICAgICAgICAgICAqLwotICB1aW50MzJfdCBlbmNfb2N0ZXRfbGVuID0gMDsvKiBudW1iZXIgb2Ygb2N0ZXRzIGluIGVuY3J5cHRlZCBwb3J0aW9uICovCi0gIG9jdGV0X3QgKmF1dGhfdGFnID0gTlVMTDsgLyogbG9jYXRpb24gb2YgYXV0aF90YWcgd2l0aGluIHBhY2tldCAgICAgKi8KLSAgb2N0ZXRfdCB0bXBfdGFnW1NSVFBfTUFYX1RBR19MRU5dOwotICBlcnJfc3RhdHVzX3Qgc3RhdHVzOyAgIAotICBpbnQgdGFnX2xlbjsKLSAgc3J0cF9zdHJlYW1fY3R4X3QgKnN0cmVhbTsKLSAgaW50IHByZWZpeF9sZW47Ci0gIHVpbnQzMl90IHNlcV9udW07Ci0KLSAgLyogd2UgYXNzdW1lIHRoZSBoZHIgaXMgMzItYml0IGFsaWduZWQgdG8gc3RhcnQgKi8KLSAgLyoKLSAgICogbG9vayB1cCBzc3JjIGluIHNydHBfc3RyZWFtIGxpc3QsIGFuZCBwcm9jZXNzIHRoZSBwYWNrZXQgd2l0aCAKLSAgICogdGhlIGFwcHJvcHJpYXRlIHN0cmVhbS4gIGlmIHdlIGhhdmVuJ3Qgc2VlbiB0aGlzIHN0cmVhbSBiZWZvcmUsCi0gICAqIHRoZXJlJ3Mgb25seSBvbmUga2V5IGZvciB0aGlzIHNydHBfc2Vzc2lvbiwgYW5kIHRoZSBjaXBoZXIKLSAgICogc3VwcG9ydHMga2V5LXNoYXJpbmcsIHRoZW4gd2UgYXNzdW1lIHRoYXQgYSBuZXcgc3RyZWFtIHVzaW5nCi0gICAqIHRoYXQga2V5IGhhcyBqdXN0IHN0YXJ0ZWQgdXAKLSAgICovCi0gIHN0cmVhbSA9IHNydHBfZ2V0X3N0cmVhbShjdHgsIGhkci0+c3NyYyk7Ci0gIGlmIChzdHJlYW0gPT0gTlVMTCkgewotICAgIGlmIChjdHgtPnN0cmVhbV90ZW1wbGF0ZSAhPSBOVUxMKSB7Ci0gICAgICBzdHJlYW0gPSBjdHgtPnN0cmVhbV90ZW1wbGF0ZTsKLSAgICAgIGRlYnVnX3ByaW50KG1vZF9zcnRwLCAic3J0Y3AgdXNpbmcgcHJvdmlzaW9uYWwgc3RyZWFtIChTU1JDOiAweCUwOHgpIiwgCi0JCSAgaGRyLT5zc3JjKTsKLSAgICB9IGVsc2UgewotICAgICAgLyogbm8gdGVtcGxhdGUgc3RyZWFtLCBzbyB3ZSByZXR1cm4gYW4gZXJyb3IgKi8KLSAgICAgIHJldHVybiBlcnJfc3RhdHVzX25vX2N0eDsKLSAgICB9IAotICB9Ci0gIAotICAvKiBnZXQgdGFnIGxlbmd0aCBmcm9tIHN0cmVhbSBjb250ZXh0ICovCi0gIHRhZ19sZW4gPSBhdXRoX2dldF90YWdfbGVuZ3RoKHN0cmVhbS0+cnRjcF9hdXRoKTsgCi0KLSAgLyoKLSAgICogc2V0IGVuY3J5cHRpb24gc3RhcnQsIGVuY3J5cHRpb24gbGVuZ3RoLCBhbmQgdHJhaWxlcgotICAgKi8KLSAgZW5jX29jdGV0X2xlbiA9ICpwa3Rfb2N0ZXRfbGVuIC0gCi0gICAgICAgICAgICAgICAgICAob2N0ZXRzX2luX3J0Y3BfaGVhZGVyICsgdGFnX2xlbiArIHNpemVvZihzcnRjcF90cmFpbGVyX3QpKTsKLSAgLyogaW5kZXggJiBFIChlbmNyeXB0aW9uKSBiaXQgZm9sbG93IG5vcm1hbCBkYXRhLiAgaGRyLT5sZW4KLQkgaXMgdGhlIG51bWJlciBvZiB3b3JkcyAoMzItYml0KSBpbiB0aGUgbm9ybWFsIHBhY2tldCBtaW51cyAxICovCi0gIC8qIFRoaXMgc2hvdWxkIHBvaW50IHRyYWlsZXIgdG8gdGhlIHdvcmQgcGFzdCB0aGUgZW5kIG9mIHRoZQotCSBub3JtYWwgZGF0YS4gKi8KLSAgLyogVGhpcyB3b3VsZCBuZWVkIHRvIGJlIG1vZGlmaWVkIGZvciBvcHRpb25hbCBtaWtleSBkYXRhICovCi0gIC8qCi0gICAqIE5PVEU6IHRyYWlsZXIgaXMgMzItYml0IGFsaWduZWQgYmVjYXVzZSBSVENQICdwYWNrZXRzJyBhcmUgYWx3YXlzCi0gICAqCSBtdWx0aXBsZXMgb2YgMzItYml0cyAoUkZDIDM1NTAgNi4xKQotICAgKi8KLSAgdHJhaWxlciA9ICh1aW50MzJfdCAqKSAoKGNoYXIgKikgaGRyICsKLQkJICAgICAqcGt0X29jdGV0X2xlbiAtKHRhZ19sZW4gKyBzaXplb2Yoc3J0Y3BfdHJhaWxlcl90KSkpOwotICBpZiAoKigodW5zaWduZWQgY2hhciAqKSB0cmFpbGVyKSAmIFNSVENQX0VfQllURV9CSVQpIHsKLSAgICBlbmNfc3RhcnQgPSAodWludDMyX3QgKiloZHIgKyB1aW50MzJzX2luX3J0Y3BfaGVhZGVyOyAgCi0gIH0gZWxzZSB7Ci0gICAgZW5jX29jdGV0X2xlbiA9IDA7Ci0gICAgZW5jX3N0YXJ0ID0gTlVMTDsgLyogdGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGVyZSdzIG5vIGVuY3J5cHRpb24gKi8KLSAgfQotCi0gIC8qIAotICAgKiBzZXQgdGhlIGF1dGhfc3RhcnQgYW5kIGF1dGhfdGFnIHBvaW50ZXJzIHRvIHRoZSBwcm9wZXIgbG9jYXRpb25zCi0gICAqIChub3RlIHRoYXQgc3J0Y3AgKmFsd2F5cyogdXNlcyBhdXRoZW50aWNhdGlvbiwgdW5saWtlIHNydHApCi0gICAqLwotICBhdXRoX3N0YXJ0ID0gKHVpbnQzMl90ICopaGRyOwotICBhdXRoX3RhZyA9IChvY3RldF90ICopaGRyICsgKnBrdF9vY3RldF9sZW4gLSB0YWdfbGVuOwotCi0gIC8qIAotICAgKiBjaGVjayB0aGUgc2VxdWVuY2UgbnVtYmVyIGZvciByZXBsYXlzCi0gICAqLwotICAvKiB0aGlzIGlzIGVhc2llciB0aGFuIGRlYWxpbmcgd2l0aCBiaXRmaWVsZCBhY2Nlc3MgKi8KLSAgc2VxX251bSA9IG50b2hsKCp0cmFpbGVyKSAmIFNSVENQX0lOREVYX01BU0s7Ci0gIHN0YXR1cyA9IHJkYl9jaGVjaygmc3RyZWFtLT5ydGNwX3JkYiwgc2VxX251bSk7Ci0gIGlmIChzdGF0dXMpCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgZGVidWdfcHJpbnQobW9kX3NydHAsICJzcnRjcCBpbmRleDogJXgiLCBzZXFfbnVtKTsKLQotICAvKiAKLSAgICogaWYgd2UncmUgdXNpbmcgYWVzIGNvdW50ZXIgbW9kZSwgc2V0IG5vbmNlIGFuZCBzZXEgCi0gICAqLwotICBpZiAoc3RyZWFtLT5ydGNwX2NpcGhlci0+dHlwZSA9PSAmYWVzX2ljbSkgeworLyoKKyAqIFRoaXMgY29kZSBoYW5kbGVzIEFFQUQgY2lwaGVycyBmb3Igb3V0Z29pbmcgUlRDUC4gIFdlIGN1cnJlbnRseSBzdXBwb3J0CisgKiBBRVMtR0NNIG1vZGUgd2l0aCAxMjggb3IgMjU2IGJpdCBrZXlzLgorICovCitzdGF0aWMgc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9wcm90ZWN0X3J0Y3BfYWVhZCgKKyAgICBzcnRwX3QgY3R4LAorICAgIHNydHBfc3RyZWFtX2N0eF90ICpzdHJlYW0sCisgICAgdm9pZCAqcnRjcF9oZHIsCisgICAgdW5zaWduZWQgaW50ICpwa3Rfb2N0ZXRfbGVuLAorICAgIHNydHBfc2Vzc2lvbl9rZXlzX3QgKnNlc3Npb25fa2V5cywKKyAgICB1bnNpZ25lZCBpbnQgdXNlX21raSkKK3sKKyAgICBzcnRjcF9oZHJfdCAqaGRyID0gKHNydGNwX2hkcl90ICopcnRjcF9oZHI7CisgICAgdWludDMyX3QgKmVuY19zdGFydDsgICAgICAgICAgICAvKiBwb2ludGVyIHRvIHN0YXJ0IG9mIGVuY3J5cHRlZCBwb3J0aW9uICAqLworICAgIHVpbnQzMl90ICp0cmFpbGVyX3A7ICAgICAgICAgICAgLyogcG9pbnRlciB0byBzdGFydCBvZiB0cmFpbGVyICAgICAgICAgICAgKi8KKyAgICB1aW50MzJfdCB0cmFpbGVyOyAgICAgICAgICAgICAgIC8qIHRyYWlsZXIgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgaW50IGVuY19vY3RldF9sZW4gPSAwOyAvKiBudW1iZXIgb2Ygb2N0ZXRzIGluIGVuY3J5cHRlZCBwb3J0aW9uICovCisgICAgdWludDhfdCAqYXV0aF90YWcgPSBOVUxMOyAgICAgICAvKiBsb2NhdGlvbiBvZiBhdXRoX3RhZyB3aXRoaW4gcGFja2V0ICAgICAqLworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKKyAgICB1aW50MzJfdCB0YWdfbGVuOworICAgIHVpbnQzMl90IHNlcV9udW07CiAgICAgdjEyOF90IGl2OworICAgIHVpbnQzMl90IHRzZXE7CisgICAgdW5zaWduZWQgaW50IG1raV9zaXplID0gMDsKIAotICAgIGl2LnYzMlswXSA9IDA7Ci0gICAgaXYudjMyWzFdID0gaGRyLT5zc3JjOyAvKiBzdGlsbCBpbiBuZXR3b3JrIG9yZGVyISAqLwotICAgIGl2LnYzMlsyXSA9IGh0b25sKHNlcV9udW0gPj4gMTYpOwotICAgIGl2LnYzMlszXSA9IGh0b25sKHNlcV9udW0gPDwgMTYpOwotICAgIHN0YXR1cyA9IGFlc19pY21fc2V0X2l2KHN0cmVhbS0+cnRjcF9jaXBoZXItPnN0YXRlLCAmaXYpOworICAgIC8qIGdldCB0YWcgbGVuZ3RoIGZyb20gc3RyZWFtIGNvbnRleHQgKi8KKyAgICB0YWdfbGVuID0gc3J0cF9hdXRoX2dldF90YWdfbGVuZ3RoKHNlc3Npb25fa2V5cy0+cnRjcF9hdXRoKTsKIAotICB9IGVsc2UgeyAgCi0gICAgdjEyOF90IGl2OwotICAgIAotICAgIC8qIG90aGVyd2lzZSwganVzdCBzZXQgdGhlIGluZGV4IHRvIHNlcV9udW0gKi8gIAotICAgIGl2LnYzMlswXSA9IDA7Ci0gICAgaXYudjMyWzFdID0gMDsKLSAgICBpdi52MzJbMl0gPSAwOwotICAgIGl2LnYzMlszXSA9IGh0b25sKHNlcV9udW0pOwotICAgIHN0YXR1cyA9IGNpcGhlcl9zZXRfaXYoc3RyZWFtLT5ydGNwX2NpcGhlciwgJml2KTsKLQotICB9Ci0gIGlmIChzdGF0dXMpCi0gICAgcmV0dXJuIGVycl9zdGF0dXNfY2lwaGVyX2ZhaWw7Ci0KLSAgLyogaW5pdGlhbGl6ZSBhdXRoIGZ1bmMgY29udGV4dCAqLwotICBhdXRoX3N0YXJ0KHN0cmVhbS0+cnRjcF9hdXRoKTsKLQotICAvKiBydW4gYXV0aCBmdW5jIG92ZXIgcGFja2V0LCBwdXQgcmVzdWx0IGludG8gdG1wX3RhZyAqLwotICBzdGF0dXMgPSBhdXRoX2NvbXB1dGUoc3RyZWFtLT5ydGNwX2F1dGgsIChvY3RldF90ICopYXV0aF9zdGFydCwgIAotCQkJKnBrdF9vY3RldF9sZW4gLSAodGFnX2xlbiArIHNpemVvZihzcnRjcF90cmFpbGVyX3QpKSwKLQkJCXRtcF90YWcpOwotICBkZWJ1Z19wcmludChtb2Rfc3J0cCwgInNydGNwIGNvbXB1dGVkIHRhZzogICAgICAgJXMiLCAKLQkgICAgICBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyh0bXBfdGFnLCB0YWdfbGVuKSk7Ci0gIGlmIChzdGF0dXMpCi0gICAgcmV0dXJuIGVycl9zdGF0dXNfYXV0aF9mYWlsOyAgIAotICAKLSAgLyogY29tcGFyZSB0aGUgdGFnIGp1c3QgY29tcHV0ZWQgd2l0aCB0aGUgb25lIGluIHRoZSBwYWNrZXQgKi8KLSAgZGVidWdfcHJpbnQobW9kX3NydHAsICJzcnRjcCB0YWcgZnJvbSBwYWNrZXQ6ICAgICVzIiwgCi0JICAgICAgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoYXV0aF90YWcsIHRhZ19sZW4pKTsgIAotICBpZiAob2N0ZXRfc3RyaW5nX2lzX2VxKHRtcF90YWcsIGF1dGhfdGFnLCB0YWdfbGVuKSkKLSAgICByZXR1cm4gZXJyX3N0YXR1c19hdXRoX2ZhaWw7Ci0KLSAgLyogCi0gICAqIGlmIHdlJ3JlIGF1dGhlbnRpY2F0aW5nIHVzaW5nIGEgdW5pdmVyc2FsIGhhc2gsIHB1dCB0aGUga2V5c3RyZWFtCi0gICAqIHByZWZpeCBpbnRvIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcKLSAgICovCi0gIHByZWZpeF9sZW4gPSBhdXRoX2dldF9wcmVmaXhfbGVuZ3RoKHN0cmVhbS0+cnRjcF9hdXRoKTsgICAgCi0gIGlmIChwcmVmaXhfbGVuKSB7Ci0gICAgc3RhdHVzID0gY2lwaGVyX291dHB1dChzdHJlYW0tPnJ0Y3BfY2lwaGVyLCBhdXRoX3RhZywgcHJlZml4X2xlbik7Ci0gICAgZGVidWdfcHJpbnQobW9kX3NydHAsICJrZXlzdHJlYW0gcHJlZml4OiAlcyIsIAotCQlvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhhdXRoX3RhZywgcHJlZml4X2xlbikpOwotICAgIGlmIChzdGF0dXMpCi0gICAgICByZXR1cm4gZXJyX3N0YXR1c19jaXBoZXJfZmFpbDsKLSAgfQotCi0gIC8qIGlmIHdlJ3JlIGRlY3J5cHRpbmcsIGV4b3Iga2V5c3RyZWFtIGludG8gdGhlIG1lc3NhZ2UgKi8KLSAgaWYgKGVuY19zdGFydCkgewotICAgIHN0YXR1cyA9IGNpcGhlcl9lbmNyeXB0KHN0cmVhbS0+cnRjcF9jaXBoZXIsIAotCQkJICAgIChvY3RldF90ICopZW5jX3N0YXJ0LCAmZW5jX29jdGV0X2xlbik7Ci0gICAgaWYgKHN0YXR1cykKLSAgICAgIHJldHVybiBlcnJfc3RhdHVzX2NpcGhlcl9mYWlsOwotICB9Ci0KLSAgLyogZGVjcmVhc2UgdGhlIHBhY2tldCBsZW5ndGggYnkgdGhlIGxlbmd0aCBvZiB0aGUgYXV0aCB0YWcgYW5kIHNlcV9udW0qLwotICAqcGt0X29jdGV0X2xlbiAtPSAodGFnX2xlbiArIHNpemVvZihzcnRjcF90cmFpbGVyX3QpKTsKLQotICAvKiAKLSAgICogdmVyaWZ5IHRoYXQgc3RyZWFtIGlzIGZvciByZWNlaXZlZCB0cmFmZmljIC0gdGhpcyBjaGVjayB3aWxsCi0gICAqIGRldGVjdCBTU1JDIGNvbGxpc2lvbnMsIHNpbmNlIGEgc3RyZWFtIHRoYXQgYXBwZWFycyBpbiBib3RoCi0gICAqIHNydHBfcHJvdGVjdCgpIGFuZCBzcnRwX3VucHJvdGVjdCgpIHdpbGwgZmFpbCB0aGlzIHRlc3QgaW4gb25lIG9mCi0gICAqIHRob3NlIGZ1bmN0aW9ucy4KLSAgICoKLSAgICogd2UgZG8gdGhpcyBjaGVjayAqYWZ0ZXIqIHRoZSBhdXRoZW50aWNhdGlvbiBjaGVjaywgc28gdGhhdCB0aGUKLSAgICogbGF0dGVyIGNoZWNrIHdpbGwgY2F0Y2ggYW55IGF0dGVtcHRzIHRvIGZvb2wgdXMgaW50byB0aGlua2luZwotICAgKiB0aGF0IHdlJ3ZlIGdvdCBhIGNvbGxpc2lvbgotICAgKi8KLSAgaWYgKHN0cmVhbS0+ZGlyZWN0aW9uICE9IGRpcl9zcnRwX3JlY2VpdmVyKSB7Ci0gICAgaWYgKHN0cmVhbS0+ZGlyZWN0aW9uID09IGRpcl91bmtub3duKSB7Ci0gICAgICBzdHJlYW0tPmRpcmVjdGlvbiA9IGRpcl9zcnRwX3JlY2VpdmVyOwotICAgIH0gZWxzZSB7Ci0gICAgICBzcnRwX2hhbmRsZV9ldmVudChjdHgsIHN0cmVhbSwgZXZlbnRfc3NyY19jb2xsaXNpb24pOwotICAgIH0KLSAgfQotCi0gIC8qIAotICAgKiBpZiB0aGUgc3RyZWFtIGlzIGEgJ3Byb3Zpc2lvbmFsJyBvbmUsIGluIHdoaWNoIHRoZSB0ZW1wbGF0ZSBjb250ZXh0Ci0gICAqIGlzIHVzZWQsIHRoZW4gd2UgbmVlZCB0byBhbGxvY2F0ZSBhIG5ldyBzdHJlYW0gYXQgdGhpcyBwb2ludCwgc2luY2UKLSAgICogdGhlIGF1dGhlbnRpY2F0aW9uIHBhc3NlZAotICAgKi8KLSAgaWYgKHN0cmVhbSA9PSBjdHgtPnN0cmVhbV90ZW1wbGF0ZSkgeyAgCi0gICAgc3J0cF9zdHJlYW1fY3R4X3QgKm5ld19zdHJlYW07Ci0KLSAgICAvKiAKLSAgICAgKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIG5ldyBzdHJlYW0gCi0gICAgICogCi0gICAgICogbm90ZSB0aGF0IHdlIGluZGljYXRlIGZhaWx1cmUgaWYgd2UgY2FuJ3QgYWxsb2NhdGUgdGhlIG5ldwotICAgICAqIHN0cmVhbSwgYW5kIHNvbWUgaW1wbGVtZW50YXRpb25zIHdpbGwgd2FudCB0byBub3QgcmV0dXJuCi0gICAgICogZmFpbHVyZSBoZXJlCisgICAgLyoKKyAgICAgKiBzZXQgZW5jcnlwdGlvbiBzdGFydCBhbmQgZW5jcnlwdGlvbiBsZW5ndGggLSBpZiB3ZSdyZSBub3QKKyAgICAgKiBwcm92aWRpbmcgY29uZmlkZW50aWFsaXR5LCBzZXQgZW5jX3N0YXJ0IHRvIE5VTEwKICAgICAgKi8KLSAgICBzdGF0dXMgPSBzcnRwX3N0cmVhbV9jbG9uZShjdHgtPnN0cmVhbV90ZW1wbGF0ZSwgaGRyLT5zc3JjLCAmbmV3X3N0cmVhbSk7IAotICAgIGlmIChzdGF0dXMpCi0gICAgICByZXR1cm4gc3RhdHVzOwotICAgIAotICAgIC8qIGFkZCBuZXcgc3RyZWFtIHRvIHRoZSBoZWFkIG9mIHRoZSBzdHJlYW1fbGlzdCAqLwotICAgIG5ld19zdHJlYW0tPm5leHQgPSBjdHgtPnN0cmVhbV9saXN0OwotICAgIGN0eC0+c3RyZWFtX2xpc3QgPSBuZXdfc3RyZWFtOwotICAgIAotICAgIC8qIHNldCBzdHJlYW0gKHRoZSBwb2ludGVyIHVzZWQgaW4gdGhpcyBmdW5jdGlvbikgKi8KLSAgICBzdHJlYW0gPSBuZXdfc3RyZWFtOwotICB9CisgICAgZW5jX3N0YXJ0ID0gKHVpbnQzMl90ICopaGRyICsgdWludDMyc19pbl9ydGNwX2hlYWRlcjsKKyAgICBlbmNfb2N0ZXRfbGVuID0gKnBrdF9vY3RldF9sZW4gLSBvY3RldHNfaW5fcnRjcF9oZWFkZXI7CiAKLSAgLyogd2UndmUgcGFzc2VkIHRoZSBhdXRoZW50aWNhdGlvbiBjaGVjaywgc28gYWRkIHNlcV9udW0gdG8gdGhlIHJkYiAqLwotICByZGJfYWRkX2luZGV4KCZzdHJlYW0tPnJ0Y3BfcmRiLCBzZXFfbnVtKTsKLSAgICAKLSAgICAKLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7ICAKKyAgICAvKiBOT1RFOiBoZHItPmxlbmd0aCBpcyBub3QgdXNhYmxlIC0gaXQgcmVmZXJzIHRvIG9ubHkgdGhlIGZpcnN0CisgICAgICogUlRDUCByZXBvcnQgaW4gdGhlIGNvbXBvdW5kIHBhY2tldCEKKyAgICAgKi8KKyAgICB0cmFpbGVyX3AgPSAodWludDMyX3QgKikoKGNoYXIgKillbmNfc3RhcnQgKyBlbmNfb2N0ZXRfbGVuICsgdGFnX2xlbik7CisKKyAgICBpZiAoc3RyZWFtLT5ydGNwX3NlcnZpY2VzICYgc2VjX3NlcnZfY29uZikgeworICAgICAgICB0cmFpbGVyID0gaHRvbmwoU1JUQ1BfRV9CSVQpOyAvKiBzZXQgZW5jcnlwdCBiaXQgKi8KKyAgICB9IGVsc2UgeworICAgICAgICBlbmNfc3RhcnQgPSBOVUxMOworICAgICAgICBlbmNfb2N0ZXRfbGVuID0gMDsKKyAgICAgICAgLyogMCBpcyBuZXR3b3JrLW9yZGVyIGluZGVwZW5kYW50ICovCisgICAgICAgIHRyYWlsZXIgPSAweDAwMDAwMDAwOyAvKiBzZXQgZW5jcnlwdCBiaXQgKi8KKyAgICB9CisKKyAgICBta2lfc2l6ZSA9IHNydHBfaW5qZWN0X21raSgodWludDhfdCAqKWhkciArICpwa3Rfb2N0ZXRfbGVuICsgdGFnX2xlbiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzcnRjcF90cmFpbGVyX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25fa2V5cywgdXNlX21raSk7CisKKyAgICAvKgorICAgICAqIHNldCB0aGUgYXV0aF90YWcgcG9pbnRlciB0byB0aGUgcHJvcGVyIGxvY2F0aW9uLCB3aGljaCBpcyBhZnRlcgorICAgICAqIHRoZSBwYXlsb2FkLCBidXQgYmVmb3JlIHRoZSB0cmFpbGVyCisgICAgICogKG5vdGUgdGhhdCBzcnRwYyAqYWx3YXlzKiBwcm92aWRlcyBhdXRoZW50aWNhdGlvbiwgdW5saWtlIHNydHApCisgICAgICovCisgICAgLyogTm90ZTogVGhpcyB3b3VsZCBuZWVkIHRvIGNoYW5nZSBmb3Igb3B0aW9uYWwgbWlrZXkgZGF0YSAqLworICAgIGF1dGhfdGFnID0gKHVpbnQ4X3QgKiloZHIgKyAqcGt0X29jdGV0X2xlbjsKKworICAgIC8qCisgICAgICogY2hlY2sgc2VxdWVuY2UgbnVtYmVyIGZvciBvdmVycnVucywgYW5kIGNvcHkgaXQgaW50byB0aGUgcGFja2V0CisgICAgICogaWYgaXRzIHZhbHVlIGlzbid0IHRvbyBiaWcKKyAgICAgKi8KKyAgICBzdGF0dXMgPSBzcnRwX3JkYl9pbmNyZW1lbnQoJnN0cmVhbS0+cnRjcF9yZGIpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgc2VxX251bSA9IHNydHBfcmRiX2dldF92YWx1ZSgmc3RyZWFtLT5ydGNwX3JkYik7CisgICAgdHJhaWxlciB8PSBodG9ubChzZXFfbnVtKTsKKyAgICBkZWJ1Z19wcmludChtb2Rfc3J0cCwgInNydGNwIGluZGV4OiAleCIsIHNlcV9udW0pOworCisgICAgbWVtY3B5KHRyYWlsZXJfcCwgJnRyYWlsZXIsIHNpemVvZih0cmFpbGVyKSk7CisKKyAgICAvKgorICAgICAqIENhbGN1bGF0ZSBhbmQgc2V0IHRoZSBJVgorICAgICAqLworICAgIHN0YXR1cyA9IHNydHBfY2FsY19hZWFkX2l2X3NydGNwKHNlc3Npb25fa2V5cywgJml2LCBzZXFfbnVtLCBoZHIpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19jaXBoZXJfZmFpbDsKKyAgICB9CisgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfc2V0X2l2KHNlc3Npb25fa2V5cy0+cnRjcF9jaXBoZXIsICh1aW50OF90ICopJml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX2RpcmVjdGlvbl9lbmNyeXB0KTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfY2lwaGVyX2ZhaWw7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBTZXQgdGhlIEFBRCBmb3IgR0NNIG1vZGUKKyAgICAgKi8KKyAgICBpZiAoZW5jX3N0YXJ0KSB7CisgICAgICAgIC8qCisgICAgICAgICAqIElmIHBheWxvYWQgZW5jcnlwdGlvbiBpcyBlbmFibGVkLCB0aGVuIHRoZSBBQUQgY29uc2lzdCBvZgorICAgICAgICAgKiB0aGUgUlRDUCBoZWFkZXIgYW5kIHRoZSBzZXEjIGF0IHRoZSBlbmQgb2YgdGhlIHBhY2tldAorICAgICAgICAgKi8KKyAgICAgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfc2V0X2FhZChzZXNzaW9uX2tleXMtPnJ0Y3BfY2lwaGVyLCAodWludDhfdCAqKWhkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3RldHNfaW5fcnRjcF9oZWFkZXIpOworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICByZXR1cm4gKHNydHBfZXJyX3N0YXR1c19jaXBoZXJfZmFpbCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvKgorICAgICAgICAgKiBTaW5jZSBwYXlsb2FkIGVuY3J5cHRpb24gaXMgbm90IGVuYWJsZWQsIHdlIG11c3QgYXV0aGVudGljYXRlCisgICAgICAgICAqIHRoZSBlbnRpcmUgcGFja2V0IGFzIGRlc2NyaWJlZCBpbiBSRkMgNzcxNCAoU2VjdGlvbiA5LjMuIERhdGEKKyAgICAgICAgICogVHlwZXMgaW4gVW5lbmNyeXB0ZWQgU1JUQ1AgQ29tcG91bmQgUGFja2V0cykKKyAgICAgICAgICovCisgICAgICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX3NldF9hYWQoc2Vzc2lvbl9rZXlzLT5ydGNwX2NpcGhlciwgKHVpbnQ4X3QgKiloZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBrdF9vY3RldF9sZW4pOworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICByZXR1cm4gKHNydHBfZXJyX3N0YXR1c19jaXBoZXJfZmFpbCk7CisgICAgICAgIH0KKyAgICB9CisgICAgLyoKKyAgICAgKiBQcm9jZXNzIHRoZSBzZXF1ZW5jZSMgYXMgQUFECisgICAgICovCisgICAgdHNlcSA9IHRyYWlsZXI7CisgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfc2V0X2FhZChzZXNzaW9uX2tleXMtPnJ0Y3BfY2lwaGVyLCAodWludDhfdCAqKSZ0c2VxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHNydGNwX3RyYWlsZXJfdCkpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIChzcnRwX2Vycl9zdGF0dXNfY2lwaGVyX2ZhaWwpOworICAgIH0KKworICAgIC8qIGlmIHdlJ3JlIGVuY3J5cHRpbmcsIGV4b3Iga2V5c3RyZWFtIGludG8gdGhlIG1lc3NhZ2UgKi8KKyAgICBpZiAoZW5jX3N0YXJ0KSB7CisgICAgICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX2VuY3J5cHQoc2Vzc2lvbl9rZXlzLT5ydGNwX2NpcGhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKWVuY19zdGFydCwgJmVuY19vY3RldF9sZW4pOworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2NpcGhlcl9mYWlsOworICAgICAgICB9CisgICAgICAgIC8qCisgICAgICAgICAqIEdldCB0aGUgdGFnIGFuZCBhcHBlbmQgdGhhdCB0byB0aGUgb3V0cHV0CisgICAgICAgICAqLworICAgICAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9nZXRfdGFnKHNlc3Npb25fa2V5cy0+cnRjcF9jaXBoZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QgKilhdXRoX3RhZywgJnRhZ19sZW4pOworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICByZXR1cm4gKHNydHBfZXJyX3N0YXR1c19jaXBoZXJfZmFpbCk7CisgICAgICAgIH0KKyAgICAgICAgZW5jX29jdGV0X2xlbiArPSB0YWdfbGVuOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qCisgICAgICAgICAqIEV2ZW4gdGhvdWdoIHdlJ3JlIG5vdCBlbmNyeXB0aW5nIHRoZSBwYXlsb2FkLCB3ZSBuZWVkCisgICAgICAgICAqIHRvIHJ1biB0aGUgY2lwaGVyIHRvIGdldCB0aGUgYXV0aCB0YWcuCisgICAgICAgICAqLworICAgICAgICB1bnNpZ25lZCBpbnQgbm9sZW4gPSAwOworICAgICAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9lbmNyeXB0KHNlc3Npb25fa2V5cy0+cnRjcF9jaXBoZXIsIE5VTEwsICZub2xlbik7CisgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfY2lwaGVyX2ZhaWw7CisgICAgICAgIH0KKyAgICAgICAgLyoKKyAgICAgICAgICogR2V0IHRoZSB0YWcgYW5kIGFwcGVuZCB0aGF0IHRvIHRoZSBvdXRwdXQKKyAgICAgICAgICovCisgICAgICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX2dldF90YWcoc2Vzc2lvbl9rZXlzLT5ydGNwX2NpcGhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKWF1dGhfdGFnLCAmdGFnX2xlbik7CisgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgICAgIHJldHVybiAoc3J0cF9lcnJfc3RhdHVzX2NpcGhlcl9mYWlsKTsKKyAgICAgICAgfQorICAgICAgICBlbmNfb2N0ZXRfbGVuICs9IHRhZ19sZW47CisgICAgfQorCisgICAgLyogaW5jcmVhc2UgdGhlIHBhY2tldCBsZW5ndGggYnkgdGhlIGxlbmd0aCBvZiB0aGUgYXV0aCB0YWcgYW5kIHNlcV9udW0qLworICAgICpwa3Rfb2N0ZXRfbGVuICs9ICh0YWdfbGVuICsgc2l6ZW9mKHNydGNwX3RyYWlsZXJfdCkpOworCisgICAgLyogaW5jcmVhc2UgdGhlIHBhY2tldCBieSB0aGUgbWtpX3NpemUgKi8KKyAgICAqcGt0X29jdGV0X2xlbiArPSBta2lfc2l6ZTsKKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgaW5jb21pbmcgU1JUQ1AgcGFja2V0cyB3aGlsZSBpbiBBRUFEIG1vZGUsCisgKiB3aGljaCBjdXJyZW50bHkgc3VwcG9ydHMgQUVTLUdDTSBlbmNyeXB0aW9uLiAgTm90ZSwgdGhlIGF1dGggdGFnIGlzCisgKiBhdCB0aGUgZW5kIG9mIHRoZSBwYWNrZXQgc3RyZWFtIGFuZCBpcyBhdXRvbWF0aWNhbGx5IGNoZWNrZWQgYnkgR0NNCisgKiB3aGVuIGRlY3J5cHRpbmcgdGhlIHBheWxvYWQuCisgKi8KK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX3VucHJvdGVjdF9ydGNwX2FlYWQoCisgICAgc3J0cF90IGN0eCwKKyAgICBzcnRwX3N0cmVhbV9jdHhfdCAqc3RyZWFtLAorICAgIHZvaWQgKnNydGNwX2hkciwKKyAgICB1bnNpZ25lZCBpbnQgKnBrdF9vY3RldF9sZW4sCisgICAgc3J0cF9zZXNzaW9uX2tleXNfdCAqc2Vzc2lvbl9rZXlzLAorICAgIHVuc2lnbmVkIGludCB1c2VfbWtpKQoreworICAgIHNydGNwX2hkcl90ICpoZHIgPSAoc3J0Y3BfaGRyX3QgKilzcnRjcF9oZHI7CisgICAgdWludDMyX3QgKmVuY19zdGFydDsgICAgICAgICAgICAvKiBwb2ludGVyIHRvIHN0YXJ0IG9mIGVuY3J5cHRlZCBwb3J0aW9uICAqLworICAgIHVpbnQzMl90ICp0cmFpbGVyX3A7ICAgICAgICAgICAgLyogcG9pbnRlciB0byBzdGFydCBvZiB0cmFpbGVyICAgICAgICAgICAgKi8KKyAgICB1aW50MzJfdCB0cmFpbGVyOyAgICAgICAgICAgICAgIC8qIHRyYWlsZXIgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgaW50IGVuY19vY3RldF9sZW4gPSAwOyAvKiBudW1iZXIgb2Ygb2N0ZXRzIGluIGVuY3J5cHRlZCBwb3J0aW9uICovCisgICAgdWludDhfdCAqYXV0aF90YWcgPSBOVUxMOyAgICAgICAvKiBsb2NhdGlvbiBvZiBhdXRoX3RhZyB3aXRoaW4gcGFja2V0ICAgICAqLworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKKyAgICBpbnQgdGFnX2xlbjsKKyAgICB1bnNpZ25lZCBpbnQgdG1wX2xlbjsKKyAgICB1aW50MzJfdCBzZXFfbnVtOworICAgIHYxMjhfdCBpdjsKKyAgICB1aW50MzJfdCB0c2VxOworICAgIHVuc2lnbmVkIGludCBta2lfc2l6ZSA9IDA7CisKKyAgICAvKiBnZXQgdGFnIGxlbmd0aCBmcm9tIHN0cmVhbSBjb250ZXh0ICovCisgICAgdGFnX2xlbiA9IHNydHBfYXV0aF9nZXRfdGFnX2xlbmd0aChzZXNzaW9uX2tleXMtPnJ0Y3BfYXV0aCk7CisKKyAgICBpZiAodXNlX21raSkgeworICAgICAgICBta2lfc2l6ZSA9IHNlc3Npb25fa2V5cy0+bWtpX3NpemU7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBzZXQgZW5jcnlwdGlvbiBzdGFydCwgZW5jcnlwdGlvbiBsZW5ndGgsIGFuZCB0cmFpbGVyCisgICAgICovCisgICAgLyogaW5kZXggJiBFIChlbmNyeXB0aW9uKSBiaXQgZm9sbG93IG5vcm1hbCBkYXRhLiBoZHItPmxlbiBpcyB0aGUgbnVtYmVyIG9mCisgICAgICogd29yZHMgKDMyLWJpdCkgaW4gdGhlIG5vcm1hbCBwYWNrZXQgbWludXMgMQorICAgICAqLworICAgIC8qIFRoaXMgc2hvdWxkIHBvaW50IHRyYWlsZXIgdG8gdGhlIHdvcmQgcGFzdCB0aGUgZW5kIG9mIHRoZSBub3JtYWwgZGF0YS4gKi8KKyAgICAvKiBUaGlzIHdvdWxkIG5lZWQgdG8gYmUgbW9kaWZpZWQgZm9yIG9wdGlvbmFsIG1pa2V5IGRhdGEgKi8KKyAgICB0cmFpbGVyX3AgPSAodWludDMyX3QgKikoKGNoYXIgKiloZHIgKyAqcGt0X29jdGV0X2xlbiAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzcnRjcF90cmFpbGVyX3QpIC0gbWtpX3NpemUpOworICAgIG1lbWNweSgmdHJhaWxlciwgdHJhaWxlcl9wLCBzaXplb2YodHJhaWxlcikpOworCisgICAgLyoKKyAgICAgKiBXZSBwYXNzIHRoZSB0YWcgZG93biB0byB0aGUgY2lwaGVyIHdoZW4gZG9pbmcgR0NNIG1vZGUKKyAgICAgKi8KKyAgICBlbmNfb2N0ZXRfbGVuID0gKnBrdF9vY3RldF9sZW4gLSAob2N0ZXRzX2luX3J0Y3BfaGVhZGVyICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHNydGNwX3RyYWlsZXJfdCkgKyBta2lfc2l6ZSk7CisgICAgYXV0aF90YWcgPSAodWludDhfdCAqKWhkciArICpwa3Rfb2N0ZXRfbGVuIC0gdGFnX2xlbiAtIG1raV9zaXplIC0KKyAgICAgICAgICAgICAgIHNpemVvZihzcnRjcF90cmFpbGVyX3QpOworCisgICAgaWYgKCooKHVuc2lnbmVkIGNoYXIgKil0cmFpbGVyX3ApICYgU1JUQ1BfRV9CWVRFX0JJVCkgeworICAgICAgICBlbmNfc3RhcnQgPSAodWludDMyX3QgKiloZHIgKyB1aW50MzJzX2luX3J0Y3BfaGVhZGVyOworICAgIH0gZWxzZSB7CisgICAgICAgIGVuY19vY3RldF9sZW4gPSAwOworICAgICAgICBlbmNfc3RhcnQgPSBOVUxMOyAvKiB0aGlzIGluZGljYXRlcyB0aGF0IHRoZXJlJ3Mgbm8gZW5jcnlwdGlvbiAqLworICAgIH0KKworICAgIC8qCisgICAgICogY2hlY2sgdGhlIHNlcXVlbmNlIG51bWJlciBmb3IgcmVwbGF5cworICAgICAqLworICAgIC8qIHRoaXMgaXMgZWFzaWVyIHRoYW4gZGVhbGluZyB3aXRoIGJpdGZpZWxkIGFjY2VzcyAqLworICAgIHNlcV9udW0gPSBudG9obCh0cmFpbGVyKSAmIFNSVENQX0lOREVYX01BU0s7CisgICAgZGVidWdfcHJpbnQobW9kX3NydHAsICJzcnRjcCBpbmRleDogJXgiLCBzZXFfbnVtKTsKKyAgICBzdGF0dXMgPSBzcnRwX3JkYl9jaGVjaygmc3RyZWFtLT5ydGNwX3JkYiwgc2VxX251bSk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8qCisgICAgICogQ2FsY3VsYXRlIGFuZCBzZXQgdGhlIElWCisgICAgICovCisgICAgc3RhdHVzID0gc3J0cF9jYWxjX2FlYWRfaXZfc3J0Y3Aoc2Vzc2lvbl9rZXlzLCAmaXYsIHNlcV9udW0sIGhkcik7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2NpcGhlcl9mYWlsOworICAgIH0KKyAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9zZXRfaXYoc2Vzc2lvbl9rZXlzLT5ydGNwX2NpcGhlciwgKHVpbnQ4X3QgKikmaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfZGlyZWN0aW9uX2RlY3J5cHQpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19jaXBoZXJfZmFpbDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFNldCB0aGUgQUFEIGZvciBHQ00gbW9kZQorICAgICAqLworICAgIGlmIChlbmNfc3RhcnQpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogSWYgcGF5bG9hZCBlbmNyeXB0aW9uIGlzIGVuYWJsZWQsIHRoZW4gdGhlIEFBRCBjb25zaXN0IG9mCisgICAgICAgICAqIHRoZSBSVENQIGhlYWRlciBhbmQgdGhlIHNlcSMgYXQgdGhlIGVuZCBvZiB0aGUgcGFja2V0CisgICAgICAgICAqLworICAgICAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9zZXRfYWFkKHNlc3Npb25fa2V5cy0+cnRjcF9jaXBoZXIsICh1aW50OF90ICopaGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jdGV0c19pbl9ydGNwX2hlYWRlcik7CisgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgICAgIHJldHVybiAoc3J0cF9lcnJfc3RhdHVzX2NpcGhlcl9mYWlsKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8qCisgICAgICAgICAqIFNpbmNlIHBheWxvYWQgZW5jcnlwdGlvbiBpcyBub3QgZW5hYmxlZCwgd2UgbXVzdCBhdXRoZW50aWNhdGUKKyAgICAgICAgICogdGhlIGVudGlyZSBwYWNrZXQgYXMgZGVzY3JpYmVkIGluIFJGQyA3NzE0IChTZWN0aW9uIDkuMy4gRGF0YQorICAgICAgICAgKiBUeXBlcyBpbiBVbmVuY3J5cHRlZCBTUlRDUCBDb21wb3VuZCBQYWNrZXRzKQorICAgICAgICAgKi8KKyAgICAgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfc2V0X2FhZCgKKyAgICAgICAgICAgIHNlc3Npb25fa2V5cy0+cnRjcF9jaXBoZXIsICh1aW50OF90ICopaGRyLAorICAgICAgICAgICAgKCpwa3Rfb2N0ZXRfbGVuIC0gdGFnX2xlbiAtIHNpemVvZihzcnRjcF90cmFpbGVyX3QpIC0gbWtpX3NpemUpKTsKKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgcmV0dXJuIChzcnRwX2Vycl9zdGF0dXNfY2lwaGVyX2ZhaWwpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBQcm9jZXNzIHRoZSBzZXF1ZW5jZSMgYXMgQUFECisgICAgICovCisgICAgdHNlcSA9IHRyYWlsZXI7CisgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfc2V0X2FhZChzZXNzaW9uX2tleXMtPnJ0Y3BfY2lwaGVyLCAodWludDhfdCAqKSZ0c2VxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHNydGNwX3RyYWlsZXJfdCkpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIChzcnRwX2Vycl9zdGF0dXNfY2lwaGVyX2ZhaWwpOworICAgIH0KKworICAgIC8qIGlmIHdlJ3JlIGRlY3J5cHRpbmcsIGV4b3Iga2V5c3RyZWFtIGludG8gdGhlIG1lc3NhZ2UgKi8KKyAgICBpZiAoZW5jX3N0YXJ0KSB7CisgICAgICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX2RlY3J5cHQoc2Vzc2lvbl9rZXlzLT5ydGNwX2NpcGhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKWVuY19zdGFydCwgJmVuY19vY3RldF9sZW4pOworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogU3RpbGwgbmVlZCB0byBydW4gdGhlIGNpcGhlciB0byBjaGVjayB0aGUgdGFnCisgICAgICAgICAqLworICAgICAgICB0bXBfbGVuID0gdGFnX2xlbjsKKyAgICAgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfZGVjcnlwdChzZXNzaW9uX2tleXMtPnJ0Y3BfY2lwaGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90ICopYXV0aF90YWcsICZ0bXBfbGVuKTsKKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIGRlY3JlYXNlIHRoZSBwYWNrZXQgbGVuZ3RoIGJ5IHRoZSBsZW5ndGggb2YgdGhlIGF1dGggdGFnIGFuZCBzZXFfbnVtKi8KKyAgICAqcGt0X29jdGV0X2xlbiAtPSAodGFnX2xlbiArIHNpemVvZihzcnRjcF90cmFpbGVyX3QpICsgbWtpX3NpemUpOworCisgICAgLyoKKyAgICAgKiB2ZXJpZnkgdGhhdCBzdHJlYW0gaXMgZm9yIHJlY2VpdmVkIHRyYWZmaWMgLSB0aGlzIGNoZWNrIHdpbGwKKyAgICAgKiBkZXRlY3QgU1NSQyBjb2xsaXNpb25zLCBzaW5jZSBhIHN0cmVhbSB0aGF0IGFwcGVhcnMgaW4gYm90aAorICAgICAqIHNydHBfcHJvdGVjdCgpIGFuZCBzcnRwX3VucHJvdGVjdCgpIHdpbGwgZmFpbCB0aGlzIHRlc3QgaW4gb25lIG9mCisgICAgICogdGhvc2UgZnVuY3Rpb25zLgorICAgICAqCisgICAgICogd2UgZG8gdGhpcyBjaGVjayAqYWZ0ZXIqIHRoZSBhdXRoZW50aWNhdGlvbiBjaGVjaywgc28gdGhhdCB0aGUKKyAgICAgKiBsYXR0ZXIgY2hlY2sgd2lsbCBjYXRjaCBhbnkgYXR0ZW1wdHMgdG8gZm9vbCB1cyBpbnRvIHRoaW5raW5nCisgICAgICogdGhhdCB3ZSd2ZSBnb3QgYSBjb2xsaXNpb24KKyAgICAgKi8KKyAgICBpZiAoc3RyZWFtLT5kaXJlY3Rpb24gIT0gZGlyX3NydHBfcmVjZWl2ZXIpIHsKKyAgICAgICAgaWYgKHN0cmVhbS0+ZGlyZWN0aW9uID09IGRpcl91bmtub3duKSB7CisgICAgICAgICAgICBzdHJlYW0tPmRpcmVjdGlvbiA9IGRpcl9zcnRwX3JlY2VpdmVyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3J0cF9oYW5kbGVfZXZlbnQoY3R4LCBzdHJlYW0sIGV2ZW50X3NzcmNfY29sbGlzaW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogaWYgdGhlIHN0cmVhbSBpcyBhICdwcm92aXNpb25hbCcgb25lLCBpbiB3aGljaCB0aGUgdGVtcGxhdGUgY29udGV4dAorICAgICAqIGlzIHVzZWQsIHRoZW4gd2UgbmVlZCB0byBhbGxvY2F0ZSBhIG5ldyBzdHJlYW0gYXQgdGhpcyBwb2ludCwgc2luY2UKKyAgICAgKiB0aGUgYXV0aGVudGljYXRpb24gcGFzc2VkCisgICAgICovCisgICAgaWYgKHN0cmVhbSA9PSBjdHgtPnN0cmVhbV90ZW1wbGF0ZSkgeworICAgICAgICBzcnRwX3N0cmVhbV9jdHhfdCAqbmV3X3N0cmVhbTsKKworICAgICAgICAvKgorICAgICAgICAgKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIG5ldyBzdHJlYW0KKyAgICAgICAgICoKKyAgICAgICAgICogbm90ZSB0aGF0IHdlIGluZGljYXRlIGZhaWx1cmUgaWYgd2UgY2FuJ3QgYWxsb2NhdGUgdGhlIG5ldworICAgICAgICAgKiBzdHJlYW0sIGFuZCBzb21lIGltcGxlbWVudGF0aW9ucyB3aWxsIHdhbnQgdG8gbm90IHJldHVybgorICAgICAgICAgKiBmYWlsdXJlIGhlcmUKKyAgICAgICAgICovCisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBzcnRwX3N0cmVhbV9jbG9uZShjdHgtPnN0cmVhbV90ZW1wbGF0ZSwgaGRyLT5zc3JjLCAmbmV3X3N0cmVhbSk7CisgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIH0KKworICAgICAgICAvKiBhZGQgbmV3IHN0cmVhbSB0byB0aGUgaGVhZCBvZiB0aGUgc3RyZWFtX2xpc3QgKi8KKyAgICAgICAgbmV3X3N0cmVhbS0+bmV4dCA9IGN0eC0+c3RyZWFtX2xpc3Q7CisgICAgICAgIGN0eC0+c3RyZWFtX2xpc3QgPSBuZXdfc3RyZWFtOworCisgICAgICAgIC8qIHNldCBzdHJlYW0gKHRoZSBwb2ludGVyIHVzZWQgaW4gdGhpcyBmdW5jdGlvbikgKi8KKyAgICAgICAgc3RyZWFtID0gbmV3X3N0cmVhbTsKKyAgICB9CisKKyAgICAvKiB3ZSd2ZSBwYXNzZWQgdGhlIGF1dGhlbnRpY2F0aW9uIGNoZWNrLCBzbyBhZGQgc2VxX251bSB0byB0aGUgcmRiICovCisgICAgc3J0cF9yZGJfYWRkX2luZGV4KCZzdHJlYW0tPnJ0Y3BfcmRiLCBzZXFfbnVtKTsKKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7Cit9CisKK3NydHBfZXJyX3N0YXR1c190IHNydHBfcHJvdGVjdF9ydGNwKHNydHBfdCBjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpydGNwX2hkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqcGt0X29jdGV0X2xlbikKK3sKKyAgICByZXR1cm4gc3J0cF9wcm90ZWN0X3J0Y3BfbWtpKGN0eCwgcnRjcF9oZHIsIHBrdF9vY3RldF9sZW4sIDAsIDApOworfQorCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX3Byb3RlY3RfcnRjcF9ta2koc3J0cF90IGN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpydGNwX2hkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnBrdF9vY3RldF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHVzZV9ta2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1raV9pbmRleCkKK3sKKyAgICBzcnRjcF9oZHJfdCAqaGRyID0gKHNydGNwX2hkcl90ICopcnRjcF9oZHI7CisgICAgdWludDMyX3QgKmVuY19zdGFydDsgICAgICAgICAgICAvKiBwb2ludGVyIHRvIHN0YXJ0IG9mIGVuY3J5cHRlZCBwb3J0aW9uICAqLworICAgIHVpbnQzMl90ICphdXRoX3N0YXJ0OyAgICAgICAgICAgLyogcG9pbnRlciB0byBzdGFydCBvZiBhdXRoLiBwb3J0aW9uICAgICAgKi8KKyAgICB1aW50MzJfdCAqdHJhaWxlcl9wOyAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gc3RhcnQgb2YgdHJhaWxlciAgICAgICAgICAgICovCisgICAgdWludDMyX3QgdHJhaWxlcjsgICAgICAgICAgICAgICAvKiB0cmFpbGVyIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHVuc2lnbmVkIGludCBlbmNfb2N0ZXRfbGVuID0gMDsgLyogbnVtYmVyIG9mIG9jdGV0cyBpbiBlbmNyeXB0ZWQgcG9ydGlvbiAqLworICAgIHVpbnQ4X3QgKmF1dGhfdGFnID0gTlVMTDsgICAgICAgLyogbG9jYXRpb24gb2YgYXV0aF90YWcgd2l0aGluIHBhY2tldCAgICAgKi8KKyAgICBzcnRwX2Vycl9zdGF0dXNfdCBzdGF0dXM7CisgICAgaW50IHRhZ19sZW47CisgICAgc3J0cF9zdHJlYW1fY3R4X3QgKnN0cmVhbTsKKyAgICB1aW50MzJfdCBwcmVmaXhfbGVuOworICAgIHVpbnQzMl90IHNlcV9udW07CisgICAgdW5zaWduZWQgaW50IG1raV9zaXplID0gMDsKKyAgICBzcnRwX3Nlc3Npb25fa2V5c190ICpzZXNzaW9uX2tleXMgPSBOVUxMOworCisgICAgLyogd2UgYXNzdW1lIHRoZSBoZHIgaXMgMzItYml0IGFsaWduZWQgdG8gc3RhcnQgKi8KKworICAgIC8qIGNoZWNrIHRoZSBwYWNrZXQgbGVuZ3RoIC0gaXQgbXVzdCBhdCBsZWFzdCBjb250YWluIGEgZnVsbCBoZWFkZXIgKi8KKyAgICBpZiAoKnBrdF9vY3RldF9sZW4gPCBvY3RldHNfaW5fcnRjcF9oZWFkZXIpCisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYmFkX3BhcmFtOworCisgICAgLyoKKyAgICAgKiBsb29rIHVwIHNzcmMgaW4gc3J0cF9zdHJlYW0gbGlzdCwgYW5kIHByb2Nlc3MgdGhlIHBhY2tldCB3aXRoCisgICAgICogdGhlIGFwcHJvcHJpYXRlIHN0cmVhbS4gIGlmIHdlIGhhdmVuJ3Qgc2VlbiB0aGlzIHN0cmVhbSBiZWZvcmUsCisgICAgICogdGhlcmUncyBvbmx5IG9uZSBrZXkgZm9yIHRoaXMgc3J0cF9zZXNzaW9uLCBhbmQgdGhlIGNpcGhlcgorICAgICAqIHN1cHBvcnRzIGtleS1zaGFyaW5nLCB0aGVuIHdlIGFzc3VtZSB0aGF0IGEgbmV3IHN0cmVhbSB1c2luZworICAgICAqIHRoYXQga2V5IGhhcyBqdXN0IHN0YXJ0ZWQgdXAKKyAgICAgKi8KKyAgICBzdHJlYW0gPSBzcnRwX2dldF9zdHJlYW0oY3R4LCBoZHItPnNzcmMpOworICAgIGlmIChzdHJlYW0gPT0gTlVMTCkgeworICAgICAgICBpZiAoY3R4LT5zdHJlYW1fdGVtcGxhdGUgIT0gTlVMTCkgeworICAgICAgICAgICAgc3J0cF9zdHJlYW1fY3R4X3QgKm5ld19zdHJlYW07CisKKyAgICAgICAgICAgIC8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3IHN0cmVhbSAqLworICAgICAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgICAgICBzcnRwX3N0cmVhbV9jbG9uZShjdHgtPnN0cmVhbV90ZW1wbGF0ZSwgaGRyLT5zc3JjLCAmbmV3X3N0cmVhbSk7CisgICAgICAgICAgICBpZiAoc3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICAgICAgICAgIC8qIGFkZCBuZXcgc3RyZWFtIHRvIHRoZSBoZWFkIG9mIHRoZSBzdHJlYW1fbGlzdCAqLworICAgICAgICAgICAgbmV3X3N0cmVhbS0+bmV4dCA9IGN0eC0+c3RyZWFtX2xpc3Q7CisgICAgICAgICAgICBjdHgtPnN0cmVhbV9saXN0ID0gbmV3X3N0cmVhbTsKKworICAgICAgICAgICAgLyogc2V0IHN0cmVhbSAodGhlIHBvaW50ZXIgdXNlZCBpbiB0aGlzIGZ1bmN0aW9uKSAqLworICAgICAgICAgICAgc3RyZWFtID0gbmV3X3N0cmVhbTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIG5vIHRlbXBsYXRlIHN0cmVhbSwgc28gd2UgcmV0dXJuIGFuIGVycm9yICovCisgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX25vX2N0eDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogdmVyaWZ5IHRoYXQgc3RyZWFtIGlzIGZvciBzZW5kaW5nIHRyYWZmaWMgLSB0aGlzIGNoZWNrIHdpbGwKKyAgICAgKiBkZXRlY3QgU1NSQyBjb2xsaXNpb25zLCBzaW5jZSBhIHN0cmVhbSB0aGF0IGFwcGVhcnMgaW4gYm90aAorICAgICAqIHNydHBfcHJvdGVjdCgpIGFuZCBzcnRwX3VucHJvdGVjdCgpIHdpbGwgZmFpbCB0aGlzIHRlc3QgaW4gb25lIG9mCisgICAgICogdGhvc2UgZnVuY3Rpb25zLgorICAgICAqLworICAgIGlmIChzdHJlYW0tPmRpcmVjdGlvbiAhPSBkaXJfc3J0cF9zZW5kZXIpIHsKKyAgICAgICAgaWYgKHN0cmVhbS0+ZGlyZWN0aW9uID09IGRpcl91bmtub3duKSB7CisgICAgICAgICAgICBzdHJlYW0tPmRpcmVjdGlvbiA9IGRpcl9zcnRwX3NlbmRlcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNydHBfaGFuZGxlX2V2ZW50KGN0eCwgc3RyZWFtLCBldmVudF9zc3JjX2NvbGxpc2lvbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzZXNzaW9uX2tleXMgPQorICAgICAgICBzcnRwX2dldF9zZXNzaW9uX2tleXNfd2l0aF9ta2lfaW5kZXgoc3RyZWFtLCB1c2VfbWtpLCBta2lfaW5kZXgpOworCisgICAgaWYgKHNlc3Npb25fa2V5cyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2JhZF9ta2k7CisKKyAgICAvKgorICAgICAqIENoZWNrIGlmIHRoaXMgaXMgYW4gQUVBRCBzdHJlYW0gKEdDTSBtb2RlKS4gIElmIHNvLCB0aGVuIGRpc3BhdGNoCisgICAgICogdGhlIHJlcXVlc3QgdG8gb3VyIEFFQUQgaGFuZGxlci4KKyAgICAgKi8KKyAgICBpZiAoc2Vzc2lvbl9rZXlzLT5ydHBfY2lwaGVyLT5hbGdvcml0aG0gPT0gU1JUUF9BRVNfR0NNXzEyOCB8fAorICAgICAgICBzZXNzaW9uX2tleXMtPnJ0cF9jaXBoZXItPmFsZ29yaXRobSA9PSBTUlRQX0FFU19HQ01fMjU2KSB7CisgICAgICAgIHJldHVybiBzcnRwX3Byb3RlY3RfcnRjcF9hZWFkKGN0eCwgc3RyZWFtLCBydGNwX2hkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCAqKXBrdF9vY3RldF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25fa2V5cywgdXNlX21raSk7CisgICAgfQorCisgICAgLyogZ2V0IHRhZyBsZW5ndGggZnJvbSBzdHJlYW0gY29udGV4dCAqLworICAgIHRhZ19sZW4gPSBzcnRwX2F1dGhfZ2V0X3RhZ19sZW5ndGgoc2Vzc2lvbl9rZXlzLT5ydGNwX2F1dGgpOworCisgICAgLyoKKyAgICAgKiBzZXQgZW5jcnlwdGlvbiBzdGFydCBhbmQgZW5jcnlwdGlvbiBsZW5ndGggLSBpZiB3ZSdyZSBub3QKKyAgICAgKiBwcm92aWRpbmcgY29uZmlkZW50aWFsaXR5LCBzZXQgZW5jX3N0YXJ0IHRvIE5VTEwKKyAgICAgKi8KKyAgICBlbmNfc3RhcnQgPSAodWludDMyX3QgKiloZHIgKyB1aW50MzJzX2luX3J0Y3BfaGVhZGVyOworICAgIGVuY19vY3RldF9sZW4gPSAqcGt0X29jdGV0X2xlbiAtIG9jdGV0c19pbl9ydGNwX2hlYWRlcjsKKworICAgIC8qIGFsbCBvZiB0aGUgcGFja2V0LCBleGNlcHQgdGhlIGhlYWRlciwgZ2V0cyBlbmNyeXB0ZWQgKi8KKyAgICAvKgorICAgICAqIE5PVEU6IGhkci0+bGVuZ3RoIGlzIG5vdCB1c2FibGUgLSBpdCByZWZlcnMgdG8gb25seSB0aGUgZmlyc3QgUlRDUCByZXBvcnQKKyAgICAgKiBpbiB0aGUgY29tcG91bmQgcGFja2V0IQorICAgICAqLworICAgIHRyYWlsZXJfcCA9ICh1aW50MzJfdCAqKSgoY2hhciAqKWVuY19zdGFydCArIGVuY19vY3RldF9sZW4pOworCisgICAgaWYgKHN0cmVhbS0+cnRjcF9zZXJ2aWNlcyAmIHNlY19zZXJ2X2NvbmYpIHsKKyAgICAgICAgdHJhaWxlciA9IGh0b25sKFNSVENQX0VfQklUKTsgLyogc2V0IGVuY3J5cHQgYml0ICovCisgICAgfSBlbHNlIHsKKyAgICAgICAgZW5jX3N0YXJ0ID0gTlVMTDsKKyAgICAgICAgZW5jX29jdGV0X2xlbiA9IDA7CisgICAgICAgIC8qIDAgaXMgbmV0d29yay1vcmRlciBpbmRlcGVuZGFudCAqLworICAgICAgICB0cmFpbGVyID0gMHgwMDAwMDAwMDsgLyogc2V0IGVuY3J5cHQgYml0ICovCisgICAgfQorCisgICAgbWtpX3NpemUgPSBzcnRwX2luamVjdF9ta2koKHVpbnQ4X3QgKiloZHIgKyAqcGt0X29jdGV0X2xlbiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzcnRjcF90cmFpbGVyX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25fa2V5cywgdXNlX21raSk7CisKKyAgICAvKgorICAgICAqIHNldCB0aGUgYXV0aF9zdGFydCBhbmQgYXV0aF90YWcgcG9pbnRlcnMgdG8gdGhlIHByb3BlciBsb2NhdGlvbnMKKyAgICAgKiAobm90ZSB0aGF0IHNydHBjICphbHdheXMqIHByb3ZpZGVzIGF1dGhlbnRpY2F0aW9uLCB1bmxpa2Ugc3J0cCkKKyAgICAgKi8KKyAgICAvKiBOb3RlOiBUaGlzIHdvdWxkIG5lZWQgdG8gY2hhbmdlIGZvciBvcHRpb25hbCBtaWtleSBkYXRhICovCisgICAgYXV0aF9zdGFydCA9ICh1aW50MzJfdCAqKWhkcjsKKyAgICBhdXRoX3RhZyA9CisgICAgICAgICh1aW50OF90ICopaGRyICsgKnBrdF9vY3RldF9sZW4gKyBzaXplb2Yoc3J0Y3BfdHJhaWxlcl90KSArIG1raV9zaXplOworCisgICAgLyogcGVyZm9ybSBFS1QgcHJvY2Vzc2luZyBpZiBuZWVkZWQgKi8KKyAgICBzcnRwX2VrdF93cml0ZV9kYXRhKHN0cmVhbS0+ZWt0LCBhdXRoX3RhZywgdGFnX2xlbiwgcGt0X29jdGV0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfcmRieF9nZXRfcGFja2V0X2luZGV4KCZzdHJlYW0tPnJ0cF9yZGJ4KSk7CisKKyAgICAvKgorICAgICAqIGNoZWNrIHNlcXVlbmNlIG51bWJlciBmb3Igb3ZlcnJ1bnMsIGFuZCBjb3B5IGl0IGludG8gdGhlIHBhY2tldAorICAgICAqIGlmIGl0cyB2YWx1ZSBpc24ndCB0b28gYmlnCisgICAgICovCisgICAgc3RhdHVzID0gc3J0cF9yZGJfaW5jcmVtZW50KCZzdHJlYW0tPnJ0Y3BfcmRiKTsKKyAgICBpZiAoc3RhdHVzKQorICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIHNlcV9udW0gPSBzcnRwX3JkYl9nZXRfdmFsdWUoJnN0cmVhbS0+cnRjcF9yZGIpOworICAgIHRyYWlsZXIgfD0gaHRvbmwoc2VxX251bSk7CisgICAgZGVidWdfcHJpbnQobW9kX3NydHAsICJzcnRjcCBpbmRleDogJXgiLCBzZXFfbnVtKTsKKworICAgIG1lbWNweSh0cmFpbGVyX3AsICZ0cmFpbGVyLCBzaXplb2YodHJhaWxlcikpOworCisgICAgLyoKKyAgICAgKiBpZiB3ZSdyZSB1c2luZyByaW5kYWVsIGNvdW50ZXIgbW9kZSwgc2V0IG5vbmNlIGFuZCBzZXEKKyAgICAgKi8KKyAgICBpZiAoc2Vzc2lvbl9rZXlzLT5ydGNwX2NpcGhlci0+dHlwZS0+aWQgPT0gU1JUUF9BRVNfSUNNXzEyOCB8fAorICAgICAgICBzZXNzaW9uX2tleXMtPnJ0Y3BfY2lwaGVyLT50eXBlLT5pZCA9PSBTUlRQX0FFU19JQ01fMTkyIHx8CisgICAgICAgIHNlc3Npb25fa2V5cy0+cnRjcF9jaXBoZXItPnR5cGUtPmlkID09IFNSVFBfQUVTX0lDTV8yNTYpIHsKKyAgICAgICAgdjEyOF90IGl2OworCisgICAgICAgIGl2LnYzMlswXSA9IDA7CisgICAgICAgIGl2LnYzMlsxXSA9IGhkci0+c3NyYzsgLyogc3RpbGwgaW4gbmV0d29yayBvcmRlciEgKi8KKyAgICAgICAgaXYudjMyWzJdID0gaHRvbmwoc2VxX251bSA+PiAxNik7CisgICAgICAgIGl2LnYzMlszXSA9IGh0b25sKHNlcV9udW0gPDwgMTYpOworICAgICAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9zZXRfaXYoc2Vzc2lvbl9rZXlzLT5ydGNwX2NpcGhlciwgKHVpbnQ4X3QgKikmaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX2RpcmVjdGlvbl9lbmNyeXB0KTsKKworICAgIH0gZWxzZSB7CisgICAgICAgIHYxMjhfdCBpdjsKKworICAgICAgICAvKiBvdGhlcndpc2UsIGp1c3Qgc2V0IHRoZSBpbmRleCB0byBzZXFfbnVtICovCisgICAgICAgIGl2LnYzMlswXSA9IDA7CisgICAgICAgIGl2LnYzMlsxXSA9IDA7CisgICAgICAgIGl2LnYzMlsyXSA9IDA7CisgICAgICAgIGl2LnYzMlszXSA9IGh0b25sKHNlcV9udW0pOworICAgICAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9zZXRfaXYoc2Vzc2lvbl9rZXlzLT5ydGNwX2NpcGhlciwgKHVpbnQ4X3QgKikmaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX2RpcmVjdGlvbl9lbmNyeXB0KTsKKyAgICB9CisgICAgaWYgKHN0YXR1cykKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19jaXBoZXJfZmFpbDsKKworICAgIC8qCisgICAgICogaWYgd2UncmUgYXV0aGVudGljYXRpbmcgdXNpbmcgYSB1bml2ZXJzYWwgaGFzaCwgcHV0IHRoZSBrZXlzdHJlYW0KKyAgICAgKiBwcmVmaXggaW50byB0aGUgYXV0aGVudGljYXRpb24gdGFnCisgICAgICovCisKKyAgICAvKiBpZiBhdXRoX3N0YXJ0IGlzIG5vbi1udWxsLCB0aGVuIHB1dCBrZXlzdHJlYW0gaW50byB0YWcgICovCisgICAgaWYgKGF1dGhfc3RhcnQpIHsKKyAgICAgICAgLyogcHV0IGtleXN0cmVhbSBwcmVmaXggaW50byBhdXRoX3RhZyAqLworICAgICAgICBwcmVmaXhfbGVuID0gc3J0cF9hdXRoX2dldF9wcmVmaXhfbGVuZ3RoKHNlc3Npb25fa2V5cy0+cnRjcF9hdXRoKTsKKyAgICAgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfb3V0cHV0KHNlc3Npb25fa2V5cy0+cnRjcF9jaXBoZXIsIGF1dGhfdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZWZpeF9sZW4pOworCisgICAgICAgIGRlYnVnX3ByaW50KG1vZF9zcnRwLCAia2V5c3RyZWFtIHByZWZpeDogJXMiLAorICAgICAgICAgICAgICAgICAgICBzcnRwX29jdGV0X3N0cmluZ19oZXhfc3RyaW5nKGF1dGhfdGFnLCBwcmVmaXhfbGVuKSk7CisKKyAgICAgICAgaWYgKHN0YXR1cykKKyAgICAgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfY2lwaGVyX2ZhaWw7CisgICAgfQorCisgICAgLyogaWYgd2UncmUgZW5jcnlwdGluZywgZXhvciBrZXlzdHJlYW0gaW50byB0aGUgbWVzc2FnZSAqLworICAgIGlmIChlbmNfc3RhcnQpIHsKKyAgICAgICAgc3RhdHVzID0gc3J0cF9jaXBoZXJfZW5jcnlwdChzZXNzaW9uX2tleXMtPnJ0Y3BfY2lwaGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90ICopZW5jX3N0YXJ0LCAmZW5jX29jdGV0X2xlbik7CisgICAgICAgIGlmIChzdGF0dXMpCisgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2NpcGhlcl9mYWlsOworICAgIH0KKworICAgIC8qIGluaXRpYWxpemUgYXV0aCBmdW5jIGNvbnRleHQgKi8KKyAgICBzcnRwX2F1dGhfc3RhcnQoc2Vzc2lvbl9rZXlzLT5ydGNwX2F1dGgpOworCisgICAgLyoKKyAgICAgKiBydW4gYXV0aCBmdW5jIG92ZXIgcGFja2V0IChpbmNsdWRpbmcgdHJhaWxlciksIGFuZCB3cml0ZSB0aGUKKyAgICAgKiByZXN1bHQgYXQgYXV0aF90YWcKKyAgICAgKi8KKyAgICBzdGF0dXMgPQorICAgICAgICBzcnRwX2F1dGhfY29tcHV0ZShzZXNzaW9uX2tleXMtPnJ0Y3BfYXV0aCwgKHVpbnQ4X3QgKilhdXRoX3N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKnBrdF9vY3RldF9sZW4pICsgc2l6ZW9mKHNydGNwX3RyYWlsZXJfdCksIGF1dGhfdGFnKTsKKyAgICBkZWJ1Z19wcmludChtb2Rfc3J0cCwgInNydGNwIGF1dGggdGFnOiAgICAlcyIsCisgICAgICAgICAgICAgICAgc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZyhhdXRoX3RhZywgdGFnX2xlbikpOworICAgIGlmIChzdGF0dXMpCisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYXV0aF9mYWlsOworCisgICAgLyogaW5jcmVhc2UgdGhlIHBhY2tldCBsZW5ndGggYnkgdGhlIGxlbmd0aCBvZiB0aGUgYXV0aCB0YWcgYW5kIHNlcV9udW0qLworICAgICpwa3Rfb2N0ZXRfbGVuICs9ICh0YWdfbGVuICsgc2l6ZW9mKHNydGNwX3RyYWlsZXJfdCkpOworCisgICAgLyogaW5jcmVhc2UgdGhlIHBhY2tldCBieSB0aGUgbWtpX3NpemUgKi8KKyAgICAqcGt0X29jdGV0X2xlbiArPSBta2lfc2l6ZTsKKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7Cit9CisKK3NydHBfZXJyX3N0YXR1c190IHNydHBfdW5wcm90ZWN0X3J0Y3Aoc3J0cF90IGN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3J0Y3BfaGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnBrdF9vY3RldF9sZW4pCit7CisgICAgcmV0dXJuIHNydHBfdW5wcm90ZWN0X3J0Y3BfbWtpKGN0eCwgc3J0Y3BfaGRyLCBwa3Rfb2N0ZXRfbGVuLCAwKTsKK30KKworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF91bnByb3RlY3RfcnRjcF9ta2koc3J0cF90IGN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNydGNwX2hkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqcGt0X29jdGV0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB1c2VfbWtpKQoreworICAgIHNydGNwX2hkcl90ICpoZHIgPSAoc3J0Y3BfaGRyX3QgKilzcnRjcF9oZHI7CisgICAgdWludDMyX3QgKmVuY19zdGFydDsgICAgICAgICAgICAvKiBwb2ludGVyIHRvIHN0YXJ0IG9mIGVuY3J5cHRlZCBwb3J0aW9uICAqLworICAgIHVpbnQzMl90ICphdXRoX3N0YXJ0OyAgICAgICAgICAgLyogcG9pbnRlciB0byBzdGFydCBvZiBhdXRoLiBwb3J0aW9uICAgICAgKi8KKyAgICB1aW50MzJfdCAqdHJhaWxlcl9wOyAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gc3RhcnQgb2YgdHJhaWxlciAgICAgICAgICAgICovCisgICAgdWludDMyX3QgdHJhaWxlcjsgICAgICAgICAgICAgICAvKiB0cmFpbGVyIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHVuc2lnbmVkIGludCBlbmNfb2N0ZXRfbGVuID0gMDsgLyogbnVtYmVyIG9mIG9jdGV0cyBpbiBlbmNyeXB0ZWQgcG9ydGlvbiAqLworICAgIHVpbnQ4X3QgKmF1dGhfdGFnID0gTlVMTDsgICAgICAgLyogbG9jYXRpb24gb2YgYXV0aF90YWcgd2l0aGluIHBhY2tldCAgICAgKi8KKyAgICB1aW50OF90IHRtcF90YWdbU1JUUF9NQVhfVEFHX0xFTl07CisgICAgdWludDhfdCB0YWdfY29weVtTUlRQX01BWF9UQUdfTEVOXTsKKyAgICBzcnRwX2Vycl9zdGF0dXNfdCBzdGF0dXM7CisgICAgdW5zaWduZWQgaW50IGF1dGhfbGVuOworICAgIGludCB0YWdfbGVuOworICAgIHNydHBfc3RyZWFtX2N0eF90ICpzdHJlYW07CisgICAgdWludDMyX3QgcHJlZml4X2xlbjsKKyAgICB1aW50MzJfdCBzZXFfbnVtOworICAgIGludCBlX2JpdF9pbl9wYWNrZXQ7IC8qIHdoZXRoZXIgdGhlIEUtYml0IHdhcyBmb3VuZCBpbiB0aGUgcGFja2V0ICovCisgICAgaW50IHNlY19zZXJ2X2NvbmZpZGVudGlhbGl0eTsgLyogd2hldGhlciBjb25maWRlbnRpYWxpdHkgd2FzIHJlcXVlc3RlZCAqLworICAgIHVuc2lnbmVkIGludCBta2lfc2l6ZSA9IDA7CisgICAgc3J0cF9zZXNzaW9uX2tleXNfdCAqc2Vzc2lvbl9rZXlzID0gTlVMTDsKKworICAgIC8qIHdlIGFzc3VtZSB0aGUgaGRyIGlzIDMyLWJpdCBhbGlnbmVkIHRvIHN0YXJ0ICovCisKKyAgICBpZiAoKnBrdF9vY3RldF9sZW4gPCAwKQorICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbTsKKworICAgIC8qCisgICAgICogY2hlY2sgdGhhdCB0aGUgbGVuZ3RoIHZhbHVlIGlzIHNhbmU7IHdlJ2xsIGNoZWNrIGFnYWluIG9uY2Ugd2UKKyAgICAgKiBrbm93IHRoZSB0YWcgbGVuZ3RoLCBidXQgd2UgYXQgbGVhc3Qgd2FudCB0byBrbm93IHRoYXQgaXQgaXMKKyAgICAgKiBhIHBvc2l0aXZlIHZhbHVlCisgICAgICovCisgICAgaWYgKCh1bnNpZ25lZCBpbnQpKCpwa3Rfb2N0ZXRfbGVuKSA8CisgICAgICAgIG9jdGV0c19pbl9ydGNwX2hlYWRlciArIHNpemVvZihzcnRjcF90cmFpbGVyX3QpKQorICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbTsKKworICAgIC8qCisgICAgICogbG9vayB1cCBzc3JjIGluIHNydHBfc3RyZWFtIGxpc3QsIGFuZCBwcm9jZXNzIHRoZSBwYWNrZXQgd2l0aAorICAgICAqIHRoZSBhcHByb3ByaWF0ZSBzdHJlYW0uICBpZiB3ZSBoYXZlbid0IHNlZW4gdGhpcyBzdHJlYW0gYmVmb3JlLAorICAgICAqIHRoZXJlJ3Mgb25seSBvbmUga2V5IGZvciB0aGlzIHNydHBfc2Vzc2lvbiwgYW5kIHRoZSBjaXBoZXIKKyAgICAgKiBzdXBwb3J0cyBrZXktc2hhcmluZywgdGhlbiB3ZSBhc3N1bWUgdGhhdCBhIG5ldyBzdHJlYW0gdXNpbmcKKyAgICAgKiB0aGF0IGtleSBoYXMganVzdCBzdGFydGVkIHVwCisgICAgICovCisgICAgc3RyZWFtID0gc3J0cF9nZXRfc3RyZWFtKGN0eCwgaGRyLT5zc3JjKTsKKyAgICBpZiAoc3RyZWFtID09IE5VTEwpIHsKKyAgICAgICAgaWYgKGN0eC0+c3RyZWFtX3RlbXBsYXRlICE9IE5VTEwpIHsKKyAgICAgICAgICAgIHN0cmVhbSA9IGN0eC0+c3RyZWFtX3RlbXBsYXRlOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogY2hlY2sgdG8gc2VlIGlmIHN0cmVhbV90ZW1wbGF0ZSBoYXMgYW4gRUtUIGRhdGEgc3RydWN0dXJlLCBpbgorICAgICAgICAgICAgICogd2hpY2ggY2FzZSB3ZSBpbml0aWFsaXplIHRoZSB0ZW1wbGF0ZSB1c2luZyB0aGUgRUtUIHBvbGljeQorICAgICAgICAgICAgICogcmVmZXJlbmNlZCBieSB0aGF0IGRhdGEgKHdoaWNoIGNvbnNpc3RzIG9mIGRlY3J5cHRpbmcgdGhlCisgICAgICAgICAgICAgKiBtYXN0ZXIga2V5IGZyb20gdGhlIEVLVCBmaWVsZCkKKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiB0aGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGEgKnByb3Zpc2lvbmFsKiBzdHJlYW0sIGFuZCB0aGlzCisgICAgICAgICAgICAgKiBzdHJlYW0gc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCB1bnRpbCBhbmQgdW5sZXNzIHRoZSBwYWNrZXQKKyAgICAgICAgICAgICAqIHBhc3NlcyBpdHMgYXV0aGVudGljYXRpb24gY2hlY2sKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKHN0cmVhbS0+ZWt0ICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBzcnRwX3N0cmVhbV9pbml0X2Zyb21fZWt0KHN0cmVhbSwgc3J0Y3BfaGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBrdF9vY3RldF9sZW4pOworICAgICAgICAgICAgICAgIGlmIChzdGF0dXMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlYnVnX3ByaW50KG1vZF9zcnRwLAorICAgICAgICAgICAgICAgICAgICAgICAgInNydGNwIHVzaW5nIHByb3Zpc2lvbmFsIHN0cmVhbSAoU1NSQzogMHglMDh4KSIsCisgICAgICAgICAgICAgICAgICAgICAgICBudG9obChoZHItPnNzcmMpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIG5vIHRlbXBsYXRlIHN0cmVhbSwgc28gd2UgcmV0dXJuIGFuIGVycm9yICovCisgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX25vX2N0eDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogRGV0ZXJtaW5lIGlmIE1LSSBpcyBiZWluZyB1c2VkIGFuZCB3aGF0IHNlc3Npb24ga2V5cyBzaG91bGQgYmUgdXNlZAorICAgICAqLworICAgIGlmICh1c2VfbWtpKSB7CisgICAgICAgIHNlc3Npb25fa2V5cyA9IHNydHBfZ2V0X3Nlc3Npb25fa2V5cygKKyAgICAgICAgICAgIHN0cmVhbSwgKHVpbnQ4X3QgKiloZHIsIChjb25zdCB1bnNpZ25lZCBpbnQgKilwa3Rfb2N0ZXRfbGVuLAorICAgICAgICAgICAgJm1raV9zaXplKTsKKworICAgICAgICBpZiAoc2Vzc2lvbl9rZXlzID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2JhZF9ta2k7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2Vzc2lvbl9rZXlzID0gJnN0cmVhbS0+c2Vzc2lvbl9rZXlzWzBdOworICAgIH0KKworICAgIC8qIGdldCB0YWcgbGVuZ3RoIGZyb20gc3RyZWFtIGNvbnRleHQgKi8KKyAgICB0YWdfbGVuID0gc3J0cF9hdXRoX2dldF90YWdfbGVuZ3RoKHNlc3Npb25fa2V5cy0+cnRjcF9hdXRoKTsKKworICAgIC8qIGNoZWNrIHRoZSBwYWNrZXQgbGVuZ3RoIC0gaXQgbXVzdCBjb250YWluIGF0IGxlYXN0IGEgZnVsbCBSVENQCisgICAgICAgaGVhZGVyLCBhbiBhdXRoIHRhZyAoaWYgYXBwbGljYWJsZSksIGFuZCB0aGUgU1JUQ1AgZW5jcnlwdGVkIGZsYWcKKyAgICAgICBhbmQgMzEtYml0IGluZGV4IHZhbHVlICovCisgICAgaWYgKCpwa3Rfb2N0ZXRfbGVuIDwgKGludCkob2N0ZXRzX2luX3J0Y3BfaGVhZGVyICsgdGFnX2xlbiArIG1raV9zaXplICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3J0Y3BfdHJhaWxlcl90KSkpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisgICAgfQorCisgICAgLyoKKyAgICAgKiBDaGVjayBpZiB0aGlzIGlzIGFuIEFFQUQgc3RyZWFtIChHQ00gbW9kZSkuICBJZiBzbywgdGhlbiBkaXNwYXRjaAorICAgICAqIHRoZSByZXF1ZXN0IHRvIG91ciBBRUFEIGhhbmRsZXIuCisgICAgICovCisgICAgaWYgKHNlc3Npb25fa2V5cy0+cnRwX2NpcGhlci0+YWxnb3JpdGhtID09IFNSVFBfQUVTX0dDTV8xMjggfHwKKyAgICAgICAgc2Vzc2lvbl9rZXlzLT5ydHBfY2lwaGVyLT5hbGdvcml0aG0gPT0gU1JUUF9BRVNfR0NNXzI1NikgeworICAgICAgICByZXR1cm4gc3J0cF91bnByb3RlY3RfcnRjcF9hZWFkKGN0eCwgc3RyZWFtLCBzcnRjcF9oZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCAqKXBrdF9vY3RldF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9rZXlzLCBta2lfc2l6ZSk7CisgICAgfQorCisgICAgc2VjX3NlcnZfY29uZmlkZW50aWFsaXR5ID0gc3RyZWFtLT5ydGNwX3NlcnZpY2VzID09IHNlY19zZXJ2X2NvbmYgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPnJ0Y3Bfc2VydmljZXMgPT0gc2VjX3NlcnZfY29uZl9hbmRfYXV0aDsKKworICAgIC8qCisgICAgICogc2V0IGVuY3J5cHRpb24gc3RhcnQsIGVuY3J5cHRpb24gbGVuZ3RoLCBhbmQgdHJhaWxlcgorICAgICAqLworICAgIGVuY19vY3RldF9sZW4gPSAqcGt0X29jdGV0X2xlbiAtIChvY3RldHNfaW5fcnRjcF9oZWFkZXIgKyB0YWdfbGVuICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWtpX3NpemUgKyBzaXplb2Yoc3J0Y3BfdHJhaWxlcl90KSk7CisgICAgLyoKKyAgICAgKmluZGV4ICYgRSAoZW5jcnlwdGlvbikgYml0IGZvbGxvdyBub3JtYWwgZGF0YS4gaGRyLT5sZW4gaXMgdGhlIG51bWJlciBvZgorICAgICAqIHdvcmRzICgzMi1iaXQpIGluIHRoZSBub3JtYWwgcGFja2V0IG1pbnVzIDEKKyAgICAgKi8KKyAgICAvKiBUaGlzIHNob3VsZCBwb2ludCB0cmFpbGVyIHRvIHRoZSB3b3JkIHBhc3QgdGhlIGVuZCBvZiB0aGUgbm9ybWFsIGRhdGEuICovCisgICAgLyogVGhpcyB3b3VsZCBuZWVkIHRvIGJlIG1vZGlmaWVkIGZvciBvcHRpb25hbCBtaWtleSBkYXRhICovCisgICAgdHJhaWxlcl9wID0gKHVpbnQzMl90ICopKChjaGFyICopaGRyICsgKnBrdF9vY3RldF9sZW4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGFnX2xlbiArIG1raV9zaXplICsgc2l6ZW9mKHNydGNwX3RyYWlsZXJfdCkpKTsKKyAgICBtZW1jcHkoJnRyYWlsZXIsIHRyYWlsZXJfcCwgc2l6ZW9mKHRyYWlsZXIpKTsKKworICAgIGVfYml0X2luX3BhY2tldCA9CisgICAgICAgICgqKCh1bnNpZ25lZCBjaGFyICopdHJhaWxlcl9wKSAmIFNSVENQX0VfQllURV9CSVQpID09IFNSVENQX0VfQllURV9CSVQ7CisgICAgaWYgKGVfYml0X2luX3BhY2tldCAhPSBzZWNfc2Vydl9jb25maWRlbnRpYWxpdHkpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19jYW50X2NoZWNrOworICAgIH0KKyAgICBpZiAoc2VjX3NlcnZfY29uZmlkZW50aWFsaXR5KSB7CisgICAgICAgIGVuY19zdGFydCA9ICh1aW50MzJfdCAqKWhkciArIHVpbnQzMnNfaW5fcnRjcF9oZWFkZXI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW5jX29jdGV0X2xlbiA9IDA7CisgICAgICAgIGVuY19zdGFydCA9IE5VTEw7IC8qIHRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlcmUncyBubyBlbmNyeXB0aW9uICovCisgICAgfQorCisgICAgLyoKKyAgICAgKiBzZXQgdGhlIGF1dGhfc3RhcnQgYW5kIGF1dGhfdGFnIHBvaW50ZXJzIHRvIHRoZSBwcm9wZXIgbG9jYXRpb25zCisgICAgICogKG5vdGUgdGhhdCBzcnRjcCAqYWx3YXlzKiB1c2VzIGF1dGhlbnRpY2F0aW9uLCB1bmxpa2Ugc3J0cCkKKyAgICAgKi8KKyAgICBhdXRoX3N0YXJ0ID0gKHVpbnQzMl90ICopaGRyOworCisgICAgLyoKKyAgICAgKiBUaGUgbG9jYXRpb24gb2YgdGhlIGF1dGggdGFnIGluIHRoZSBwYWNrZXQgbmVlZHMgdG8ga25vdyBNS0kKKyAgICAgKiBjb3VsZCBiZSBwcmVzZW50LiAgVGhlIGRhdGEgbmVlZGVkIHRvIGNhbGN1bGF0ZSB0aGUgQXV0aCB0YWcKKyAgICAgKiBtdXN0IG5vdCBpbmNsdWRlIHRoZSBNS0kKKyAgICAgKi8KKyAgICBhdXRoX2xlbiA9ICpwa3Rfb2N0ZXRfbGVuIC0gdGFnX2xlbiAtIG1raV9zaXplOworICAgIGF1dGhfdGFnID0gKHVpbnQ4X3QgKiloZHIgKyBhdXRoX2xlbiArIG1raV9zaXplOworCisgICAgLyoKKyAgICAgKiBpZiBFS1QgaXMgaW4gdXNlLCB0aGVuIHdlIG1ha2UgYSBjb3B5IG9mIHRoZSB0YWcgZnJvbSB0aGUgcGFja2V0LAorICAgICAqIGFuZCB0aGVuIHplcm9pemUgdGhlIGxvY2F0aW9uIG9mIHRoZSBiYXNlIHRhZworICAgICAqCisgICAgICogd2UgZmlyc3QgcmUtcG9zaXRpb24gdGhlIGF1dGhfdGFnIHBvaW50ZXIgc28gdGhhdCBpdCBwb2ludHMgdG8KKyAgICAgKiB0aGUgYmFzZSB0YWcKKyAgICAgKi8KKyAgICBpZiAoc3RyZWFtLT5la3QpIHsKKyAgICAgICAgYXV0aF90YWcgLT0gc3J0cF9la3Rfb2N0ZXRzX2FmdGVyX2Jhc2VfdGFnKHN0cmVhbS0+ZWt0KTsKKyAgICAgICAgbWVtY3B5KHRhZ19jb3B5LCBhdXRoX3RhZywgdGFnX2xlbik7CisgICAgICAgIG9jdGV0X3N0cmluZ19zZXRfdG9femVybyhhdXRoX3RhZywgdGFnX2xlbik7CisgICAgICAgIGF1dGhfdGFnID0gdGFnX2NvcHk7CisgICAgICAgIGF1dGhfbGVuICs9IHRhZ19sZW47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBjaGVjayB0aGUgc2VxdWVuY2UgbnVtYmVyIGZvciByZXBsYXlzCisgICAgICovCisgICAgLyogdGhpcyBpcyBlYXNpZXIgdGhhbiBkZWFsaW5nIHdpdGggYml0ZmllbGQgYWNjZXNzICovCisgICAgc2VxX251bSA9IG50b2hsKHRyYWlsZXIpICYgU1JUQ1BfSU5ERVhfTUFTSzsKKyAgICBkZWJ1Z19wcmludChtb2Rfc3J0cCwgInNydGNwIGluZGV4OiAleCIsIHNlcV9udW0pOworICAgIHN0YXR1cyA9IHNydHBfcmRiX2NoZWNrKCZzdHJlYW0tPnJ0Y3BfcmRiLCBzZXFfbnVtKTsKKyAgICBpZiAoc3RhdHVzKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgLyoKKyAgICAgKiBpZiB3ZSdyZSB1c2luZyBhZXMgY291bnRlciBtb2RlLCBzZXQgbm9uY2UgYW5kIHNlcQorICAgICAqLworICAgIGlmIChzZXNzaW9uX2tleXMtPnJ0Y3BfY2lwaGVyLT50eXBlLT5pZCA9PSBTUlRQX0FFU19JQ01fMTI4IHx8CisgICAgICAgIHNlc3Npb25fa2V5cy0+cnRjcF9jaXBoZXItPnR5cGUtPmlkID09IFNSVFBfQUVTX0lDTV8xOTIgfHwKKyAgICAgICAgc2Vzc2lvbl9rZXlzLT5ydGNwX2NpcGhlci0+dHlwZS0+aWQgPT0gU1JUUF9BRVNfSUNNXzI1NikgeworICAgICAgICB2MTI4X3QgaXY7CisKKyAgICAgICAgaXYudjMyWzBdID0gMDsKKyAgICAgICAgaXYudjMyWzFdID0gaGRyLT5zc3JjOyAvKiBzdGlsbCBpbiBuZXR3b3JrIG9yZGVyISAqLworICAgICAgICBpdi52MzJbMl0gPSBodG9ubChzZXFfbnVtID4+IDE2KTsKKyAgICAgICAgaXYudjMyWzNdID0gaHRvbmwoc2VxX251bSA8PCAxNik7CisgICAgICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX3NldF9pdihzZXNzaW9uX2tleXMtPnJ0Y3BfY2lwaGVyLCAodWludDhfdCAqKSZpdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfZGlyZWN0aW9uX2RlY3J5cHQpOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgdjEyOF90IGl2OworCisgICAgICAgIC8qIG90aGVyd2lzZSwganVzdCBzZXQgdGhlIGluZGV4IHRvIHNlcV9udW0gKi8KKyAgICAgICAgaXYudjMyWzBdID0gMDsKKyAgICAgICAgaXYudjMyWzFdID0gMDsKKyAgICAgICAgaXYudjMyWzJdID0gMDsKKyAgICAgICAgaXYudjMyWzNdID0gaHRvbmwoc2VxX251bSk7CisgICAgICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX3NldF9pdihzZXNzaW9uX2tleXMtPnJ0Y3BfY2lwaGVyLCAodWludDhfdCAqKSZpdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfZGlyZWN0aW9uX2RlY3J5cHQpOworICAgIH0KKyAgICBpZiAoc3RhdHVzKQorICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2NpcGhlcl9mYWlsOworCisgICAgLyogaW5pdGlhbGl6ZSBhdXRoIGZ1bmMgY29udGV4dCAqLworICAgIHNydHBfYXV0aF9zdGFydChzZXNzaW9uX2tleXMtPnJ0Y3BfYXV0aCk7CisKKyAgICAvKiBydW4gYXV0aCBmdW5jIG92ZXIgcGFja2V0LCBwdXQgcmVzdWx0IGludG8gdG1wX3RhZyAqLworICAgIHN0YXR1cyA9IHNydHBfYXV0aF9jb21wdXRlKHNlc3Npb25fa2V5cy0+cnRjcF9hdXRoLCAodWludDhfdCAqKWF1dGhfc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9sZW4sIHRtcF90YWcpOworICAgIGRlYnVnX3ByaW50KG1vZF9zcnRwLCAic3J0Y3AgY29tcHV0ZWQgdGFnOiAgICAgICAlcyIsCisgICAgICAgICAgICAgICAgc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZyh0bXBfdGFnLCB0YWdfbGVuKSk7CisgICAgaWYgKHN0YXR1cykKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19hdXRoX2ZhaWw7CisKKyAgICAvKiBjb21wYXJlIHRoZSB0YWcganVzdCBjb21wdXRlZCB3aXRoIHRoZSBvbmUgaW4gdGhlIHBhY2tldCAqLworICAgIGRlYnVnX3ByaW50KG1vZF9zcnRwLCAic3J0Y3AgdGFnIGZyb20gcGFja2V0OiAgICAlcyIsCisgICAgICAgICAgICAgICAgc3J0cF9vY3RldF9zdHJpbmdfaGV4X3N0cmluZyhhdXRoX3RhZywgdGFnX2xlbikpOworICAgIGlmIChzcnRwX29jdGV0X3N0cmluZ19pc19lcSh0bXBfdGFnLCBhdXRoX3RhZywgdGFnX2xlbikpCisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYXV0aF9mYWlsOworCisgICAgLyoKKyAgICAgKiBpZiB3ZSdyZSBhdXRoZW50aWNhdGluZyB1c2luZyBhIHVuaXZlcnNhbCBoYXNoLCBwdXQgdGhlIGtleXN0cmVhbQorICAgICAqIHByZWZpeCBpbnRvIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcKKyAgICAgKi8KKyAgICBwcmVmaXhfbGVuID0gc3J0cF9hdXRoX2dldF9wcmVmaXhfbGVuZ3RoKHNlc3Npb25fa2V5cy0+cnRjcF9hdXRoKTsKKyAgICBpZiAocHJlZml4X2xlbikgeworICAgICAgICBzdGF0dXMgPSBzcnRwX2NpcGhlcl9vdXRwdXQoc2Vzc2lvbl9rZXlzLT5ydGNwX2NpcGhlciwgYXV0aF90YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJlZml4X2xlbik7CisgICAgICAgIGRlYnVnX3ByaW50KG1vZF9zcnRwLCAia2V5c3RyZWFtIHByZWZpeDogJXMiLAorICAgICAgICAgICAgICAgICAgICBzcnRwX29jdGV0X3N0cmluZ19oZXhfc3RyaW5nKGF1dGhfdGFnLCBwcmVmaXhfbGVuKSk7CisgICAgICAgIGlmIChzdGF0dXMpCisgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2NpcGhlcl9mYWlsOworICAgIH0KKworICAgIC8qIGlmIHdlJ3JlIGRlY3J5cHRpbmcsIGV4b3Iga2V5c3RyZWFtIGludG8gdGhlIG1lc3NhZ2UgKi8KKyAgICBpZiAoZW5jX3N0YXJ0KSB7CisgICAgICAgIHN0YXR1cyA9IHNydHBfY2lwaGVyX2RlY3J5cHQoc2Vzc2lvbl9rZXlzLT5ydGNwX2NpcGhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKWVuY19zdGFydCwgJmVuY19vY3RldF9sZW4pOworICAgICAgICBpZiAoc3RhdHVzKQorICAgICAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19jaXBoZXJfZmFpbDsKKyAgICB9CisKKyAgICAvKiBkZWNyZWFzZSB0aGUgcGFja2V0IGxlbmd0aCBieSB0aGUgbGVuZ3RoIG9mIHRoZSBhdXRoIHRhZyBhbmQgc2VxX251bSAqLworICAgICpwa3Rfb2N0ZXRfbGVuIC09ICh0YWdfbGVuICsgc2l6ZW9mKHNydGNwX3RyYWlsZXJfdCkpOworCisgICAgLyogZGVjcmVhc2UgdGhlIHBhY2tldCBsZW5ndGggYnkgdGhlIGxlbmd0aCBvZiB0aGUgbWtpX3NpemUgKi8KKyAgICAqcGt0X29jdGV0X2xlbiAtPSBta2lfc2l6ZTsKKworICAgIC8qCisgICAgICogaWYgRUtUIGlzIGluIGVmZmVjdCwgc3VidHJhY3QgdGhlIEVLVCBkYXRhIG91dCBvZiB0aGUgcGFja2V0CisgICAgICogbGVuZ3RoCisgICAgICovCisgICAgKnBrdF9vY3RldF9sZW4gLT0gc3J0cF9la3Rfb2N0ZXRzX2FmdGVyX2Jhc2VfdGFnKHN0cmVhbS0+ZWt0KTsKKworICAgIC8qCisgICAgICogdmVyaWZ5IHRoYXQgc3RyZWFtIGlzIGZvciByZWNlaXZlZCB0cmFmZmljIC0gdGhpcyBjaGVjayB3aWxsCisgICAgICogZGV0ZWN0IFNTUkMgY29sbGlzaW9ucywgc2luY2UgYSBzdHJlYW0gdGhhdCBhcHBlYXJzIGluIGJvdGgKKyAgICAgKiBzcnRwX3Byb3RlY3QoKSBhbmQgc3J0cF91bnByb3RlY3QoKSB3aWxsIGZhaWwgdGhpcyB0ZXN0IGluIG9uZSBvZgorICAgICAqIHRob3NlIGZ1bmN0aW9ucy4KKyAgICAgKgorICAgICAqIHdlIGRvIHRoaXMgY2hlY2sgKmFmdGVyKiB0aGUgYXV0aGVudGljYXRpb24gY2hlY2ssIHNvIHRoYXQgdGhlCisgICAgICogbGF0dGVyIGNoZWNrIHdpbGwgY2F0Y2ggYW55IGF0dGVtcHRzIHRvIGZvb2wgdXMgaW50byB0aGlua2luZworICAgICAqIHRoYXQgd2UndmUgZ290IGEgY29sbGlzaW9uCisgICAgICovCisgICAgaWYgKHN0cmVhbS0+ZGlyZWN0aW9uICE9IGRpcl9zcnRwX3JlY2VpdmVyKSB7CisgICAgICAgIGlmIChzdHJlYW0tPmRpcmVjdGlvbiA9PSBkaXJfdW5rbm93bikgeworICAgICAgICAgICAgc3RyZWFtLT5kaXJlY3Rpb24gPSBkaXJfc3J0cF9yZWNlaXZlcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNydHBfaGFuZGxlX2V2ZW50KGN0eCwgc3RyZWFtLCBldmVudF9zc3JjX2NvbGxpc2lvbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIGlmIHRoZSBzdHJlYW0gaXMgYSAncHJvdmlzaW9uYWwnIG9uZSwgaW4gd2hpY2ggdGhlIHRlbXBsYXRlIGNvbnRleHQKKyAgICAgKiBpcyB1c2VkLCB0aGVuIHdlIG5lZWQgdG8gYWxsb2NhdGUgYSBuZXcgc3RyZWFtIGF0IHRoaXMgcG9pbnQsIHNpbmNlCisgICAgICogdGhlIGF1dGhlbnRpY2F0aW9uIHBhc3NlZAorICAgICAqLworICAgIGlmIChzdHJlYW0gPT0gY3R4LT5zdHJlYW1fdGVtcGxhdGUpIHsKKyAgICAgICAgc3J0cF9zdHJlYW1fY3R4X3QgKm5ld19zdHJlYW07CisKKyAgICAgICAgLyoKKyAgICAgICAgICogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBuZXcgc3RyZWFtCisgICAgICAgICAqCisgICAgICAgICAqIG5vdGUgdGhhdCB3ZSBpbmRpY2F0ZSBmYWlsdXJlIGlmIHdlIGNhbid0IGFsbG9jYXRlIHRoZSBuZXcKKyAgICAgICAgICogc3RyZWFtLCBhbmQgc29tZSBpbXBsZW1lbnRhdGlvbnMgd2lsbCB3YW50IHRvIG5vdCByZXR1cm4KKyAgICAgICAgICogZmFpbHVyZSBoZXJlCisgICAgICAgICAqLworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgc3J0cF9zdHJlYW1fY2xvbmUoY3R4LT5zdHJlYW1fdGVtcGxhdGUsIGhkci0+c3NyYywgJm5ld19zdHJlYW0pOworICAgICAgICBpZiAoc3RhdHVzKQorICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgICAgICAvKiBhZGQgbmV3IHN0cmVhbSB0byB0aGUgaGVhZCBvZiB0aGUgc3RyZWFtX2xpc3QgKi8KKyAgICAgICAgbmV3X3N0cmVhbS0+bmV4dCA9IGN0eC0+c3RyZWFtX2xpc3Q7CisgICAgICAgIGN0eC0+c3RyZWFtX2xpc3QgPSBuZXdfc3RyZWFtOworCisgICAgICAgIC8qIHNldCBzdHJlYW0gKHRoZSBwb2ludGVyIHVzZWQgaW4gdGhpcyBmdW5jdGlvbikgKi8KKyAgICAgICAgc3RyZWFtID0gbmV3X3N0cmVhbTsKKyAgICB9CisKKyAgICAvKiB3ZSd2ZSBwYXNzZWQgdGhlIGF1dGhlbnRpY2F0aW9uIGNoZWNrLCBzbyBhZGQgc2VxX251bSB0byB0aGUgcmRiICovCisgICAgc3J0cF9yZGJfYWRkX2luZGV4KCZzdHJlYW0tPnJ0Y3BfcmRiLCBzZXFfbnVtKTsKKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7Cit9CisKKy8qCisgKiB1c2VyIGRhdGEgd2l0aGluIHNydHBfdCBjb250ZXh0CisgKi8KKwordm9pZCBzcnRwX3NldF91c2VyX2RhdGEoc3J0cF90IGN0eCwgdm9pZCAqZGF0YSkKK3sKKyAgICBjdHgtPnVzZXJfZGF0YSA9IGRhdGE7Cit9CisKK3ZvaWQgKnNydHBfZ2V0X3VzZXJfZGF0YShzcnRwX3QgY3R4KQoreworICAgIHJldHVybiBjdHgtPnVzZXJfZGF0YTsKK30KKworLyoKKyAqIGR0bHMga2V5aW5nIGZvciBzcnRwCisgKi8KKworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9mcm9tX3Byb2ZpbGVfZm9yX3J0cCgKKyAgICBzcnRwX2NyeXB0b19wb2xpY3lfdCAqcG9saWN5LAorICAgIHNydHBfcHJvZmlsZV90IHByb2ZpbGUpCit7CisgICAgLyogc2V0IFNSVFAgcG9saWN5IGZyb20gdGhlIFNSVFAgcHJvZmlsZSBpbiB0aGUga2V5IHNldCAqLworICAgIHN3aXRjaCAocHJvZmlsZSkgeworICAgIGNhc2Ugc3J0cF9wcm9maWxlX2FlczEyOF9jbV9zaGExXzgwOgorICAgICAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8xMjhfaG1hY19zaGExXzgwKHBvbGljeSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugc3J0cF9wcm9maWxlX2FlczEyOF9jbV9zaGExXzMyOgorICAgICAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8xMjhfaG1hY19zaGExXzMyKHBvbGljeSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugc3J0cF9wcm9maWxlX251bGxfc2hhMV84MDoKKyAgICAgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9udWxsX2NpcGhlcl9obWFjX3NoYTFfODAocG9saWN5KTsKKyAgICAgICAgYnJlYWs7CisjaWZkZWYgR0NNCisgICAgY2FzZSBzcnRwX3Byb2ZpbGVfYWVhZF9hZXNfMTI4X2djbToKKyAgICAgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzEyOF8xNl9hdXRoKHBvbGljeSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugc3J0cF9wcm9maWxlX2FlYWRfYWVzXzI1Nl9nY206CisgICAgICAgIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2djbV8yNTZfMTZfYXV0aChwb2xpY3kpOworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIC8qIHRoZSBmb2xsb3dpbmcgcHJvZmlsZXMgYXJlIG5vdCAoeWV0KSBzdXBwb3J0ZWQgKi8KKyAgICBjYXNlIHNydHBfcHJvZmlsZV9udWxsX3NoYTFfMzI6CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisgICAgfQorCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9mcm9tX3Byb2ZpbGVfZm9yX3J0Y3AoCisgICAgc3J0cF9jcnlwdG9fcG9saWN5X3QgKnBvbGljeSwKKyAgICBzcnRwX3Byb2ZpbGVfdCBwcm9maWxlKQoreworICAgIC8qIHNldCBTUlRQIHBvbGljeSBmcm9tIHRoZSBTUlRQIHByb2ZpbGUgaW4gdGhlIGtleSBzZXQgKi8KKyAgICBzd2l0Y2ggKHByb2ZpbGUpIHsKKyAgICBjYXNlIHNydHBfcHJvZmlsZV9hZXMxMjhfY21fc2hhMV84MDoKKyAgICAgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfY21fMTI4X2htYWNfc2hhMV84MChwb2xpY3kpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHNydHBfcHJvZmlsZV9hZXMxMjhfY21fc2hhMV8zMjoKKyAgICAgICAgLyogV2UgZG8gbm90IGhvbm9yIHRoZSAzMi1iaXQgYXV0aCB0YWcgcmVxdWVzdCBzaW5jZQorICAgICAgICAgKiB0aGlzIGlzIG5vdCBjb21wbGlhbnQgd2l0aCBSRkMgMzcxMSAqLworICAgICAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8xMjhfaG1hY19zaGExXzgwKHBvbGljeSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugc3J0cF9wcm9maWxlX251bGxfc2hhMV84MDoKKyAgICAgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9udWxsX2NpcGhlcl9obWFjX3NoYTFfODAocG9saWN5KTsKKyAgICAgICAgYnJlYWs7CisjaWZkZWYgR0NNCisgICAgY2FzZSBzcnRwX3Byb2ZpbGVfYWVhZF9hZXNfMTI4X2djbToKKyAgICAgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzEyOF8xNl9hdXRoKHBvbGljeSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugc3J0cF9wcm9maWxlX2FlYWRfYWVzXzI1Nl9nY206CisgICAgICAgIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2djbV8yNTZfMTZfYXV0aChwb2xpY3kpOworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIC8qIHRoZSBmb2xsb3dpbmcgcHJvZmlsZXMgYXJlIG5vdCAoeWV0KSBzdXBwb3J0ZWQgKi8KKyAgICBjYXNlIHNydHBfcHJvZmlsZV9udWxsX3NoYTFfMzI6CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisgICAgfQorCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKwordm9pZCBzcnRwX2FwcGVuZF9zYWx0X3RvX2tleSh1aW50OF90ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBieXRlc19pbl9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnNhbHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBieXRlc19pbl9zYWx0KQoreworICAgIG1lbWNweShrZXkgKyBieXRlc19pbl9rZXksIHNhbHQsIGJ5dGVzX2luX3NhbHQpOworfQorCit1bnNpZ25lZCBpbnQgc3J0cF9wcm9maWxlX2dldF9tYXN0ZXJfa2V5X2xlbmd0aChzcnRwX3Byb2ZpbGVfdCBwcm9maWxlKQoreworICAgIHN3aXRjaCAocHJvZmlsZSkgeworICAgIGNhc2Ugc3J0cF9wcm9maWxlX2FlczEyOF9jbV9zaGExXzgwOgorICAgICAgICByZXR1cm4gU1JUUF9BRVNfMTI4X0tFWV9MRU47CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugc3J0cF9wcm9maWxlX2FlczEyOF9jbV9zaGExXzMyOgorICAgICAgICByZXR1cm4gU1JUUF9BRVNfMTI4X0tFWV9MRU47CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugc3J0cF9wcm9maWxlX251bGxfc2hhMV84MDoKKyAgICAgICAgcmV0dXJuIFNSVFBfQUVTXzEyOF9LRVlfTEVOOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHNydHBfcHJvZmlsZV9hZWFkX2Flc18xMjhfZ2NtOgorICAgICAgICByZXR1cm4gU1JUUF9BRVNfMTI4X0tFWV9MRU47CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugc3J0cF9wcm9maWxlX2FlYWRfYWVzXzI1Nl9nY206CisgICAgICAgIHJldHVybiBTUlRQX0FFU18yNTZfS0VZX0xFTjsKKyAgICAgICAgYnJlYWs7CisgICAgLyogdGhlIGZvbGxvd2luZyBwcm9maWxlcyBhcmUgbm90ICh5ZXQpIHN1cHBvcnRlZCAqLworICAgIGNhc2Ugc3J0cF9wcm9maWxlX251bGxfc2hhMV8zMjoKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsgLyogaW5kaWNhdGUgZXJyb3IgYnkgcmV0dXJuaW5nIGEgemVybyAqLworICAgIH0KK30KKwordW5zaWduZWQgaW50IHNydHBfcHJvZmlsZV9nZXRfbWFzdGVyX3NhbHRfbGVuZ3RoKHNydHBfcHJvZmlsZV90IHByb2ZpbGUpCit7CisgICAgc3dpdGNoIChwcm9maWxlKSB7CisgICAgY2FzZSBzcnRwX3Byb2ZpbGVfYWVzMTI4X2NtX3NoYTFfODA6CisgICAgICAgIHJldHVybiBTUlRQX1NBTFRfTEVOOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHNydHBfcHJvZmlsZV9hZXMxMjhfY21fc2hhMV8zMjoKKyAgICAgICAgcmV0dXJuIFNSVFBfU0FMVF9MRU47CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugc3J0cF9wcm9maWxlX251bGxfc2hhMV84MDoKKyAgICAgICAgcmV0dXJuIFNSVFBfU0FMVF9MRU47CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugc3J0cF9wcm9maWxlX2FlYWRfYWVzXzEyOF9nY206CisgICAgICAgIHJldHVybiBTUlRQX0FFQURfU0FMVF9MRU47CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugc3J0cF9wcm9maWxlX2FlYWRfYWVzXzI1Nl9nY206CisgICAgICAgIHJldHVybiBTUlRQX0FFQURfU0FMVF9MRU47CisgICAgICAgIGJyZWFrOworICAgIC8qIHRoZSBmb2xsb3dpbmcgcHJvZmlsZXMgYXJlIG5vdCAoeWV0KSBzdXBwb3J0ZWQgKi8KKyAgICBjYXNlIHNydHBfcHJvZmlsZV9udWxsX3NoYTFfMzI6CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7IC8qIGluZGljYXRlIGVycm9yIGJ5IHJldHVybmluZyBhIHplcm8gKi8KKyAgICB9Cit9CisKK3NydHBfZXJyX3N0YXR1c190IHN0cmVhbV9nZXRfcHJvdGVjdF90cmFpbGVyX2xlbmd0aChzcnRwX3N0cmVhbV9jdHhfdCAqc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGlzX3J0cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1c2VfbWtpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG1raV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqbGVuZ3RoKQoreworICAgIHNydHBfc2Vzc2lvbl9rZXlzX3QgKnNlc3Npb25fa2V5OworCisgICAgKmxlbmd0aCA9IDA7CisKKyAgICBpZiAodXNlX21raSkgeworICAgICAgICBpZiAobWtpX2luZGV4ID49IHN0cmVhbS0+bnVtX21hc3Rlcl9rZXlzKSB7CisgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2JhZF9ta2k7CisgICAgICAgIH0KKyAgICAgICAgc2Vzc2lvbl9rZXkgPSAmc3RyZWFtLT5zZXNzaW9uX2tleXNbbWtpX2luZGV4XTsKKworICAgICAgICAqbGVuZ3RoICs9IHNlc3Npb25fa2V5LT5ta2lfc2l6ZTsKKworICAgIH0gZWxzZSB7CisgICAgICAgIHNlc3Npb25fa2V5ID0gJnN0cmVhbS0+c2Vzc2lvbl9rZXlzWzBdOworICAgIH0KKyAgICBpZiAoaXNfcnRwKSB7CisgICAgICAgICpsZW5ndGggKz0gc3J0cF9hdXRoX2dldF90YWdfbGVuZ3RoKHNlc3Npb25fa2V5LT5ydHBfYXV0aCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgKmxlbmd0aCArPSBzcnRwX2F1dGhfZ2V0X3RhZ19sZW5ndGgoc2Vzc2lvbl9rZXktPnJ0Y3BfYXV0aCk7CisgICAgICAgICpsZW5ndGggKz0gc2l6ZW9mKHNydGNwX3RyYWlsZXJfdCk7CisgICAgfQorCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKworc3J0cF9lcnJfc3RhdHVzX3QgZ2V0X3Byb3RlY3RfdHJhaWxlcl9sZW5ndGgoc3J0cF90IHNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpc19ydHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1c2VfbWtpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbWtpX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmxlbmd0aCkKK3sKKyAgICBzcnRwX3N0cmVhbV9jdHhfdCAqc3RyZWFtOworCisgICAgaWYgKHNlc3Npb24gPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbTsKKyAgICB9CisKKyAgICBpZiAoc2Vzc2lvbi0+c3RyZWFtX3RlbXBsYXRlID09IE5VTEwgJiYgc2Vzc2lvbi0+c3RyZWFtX2xpc3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbTsKKyAgICB9CisKKyAgICAqbGVuZ3RoID0gMDsKKworICAgIHN0cmVhbSA9IHNlc3Npb24tPnN0cmVhbV90ZW1wbGF0ZTsKKworICAgIGlmIChzdHJlYW0gIT0gTlVMTCkgeworICAgICAgICBzdHJlYW1fZ2V0X3Byb3RlY3RfdHJhaWxlcl9sZW5ndGgoc3RyZWFtLCBpc19ydHAsIHVzZV9ta2ksIG1raV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCk7CisgICAgfQorCisgICAgc3RyZWFtID0gc2Vzc2lvbi0+c3RyZWFtX2xpc3Q7CisKKyAgICB3aGlsZSAoc3RyZWFtICE9IE5VTEwpIHsKKyAgICAgICAgdWludDMyX3QgdGVtcF9sZW5ndGg7CisgICAgICAgIGlmIChzdHJlYW1fZ2V0X3Byb3RlY3RfdHJhaWxlcl9sZW5ndGgoc3RyZWFtLCBpc19ydHAsIHVzZV9ta2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWtpX2luZGV4LCAmdGVtcF9sZW5ndGgpID09CisgICAgICAgICAgICBzcnRwX2Vycl9zdGF0dXNfb2spIHsKKyAgICAgICAgICAgIGlmICh0ZW1wX2xlbmd0aCA+ICpsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAqbGVuZ3RoID0gdGVtcF9sZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3RyZWFtID0gc3RyZWFtLT5uZXh0OworICAgIH0KKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7Cit9CisKK3NydHBfZXJyX3N0YXR1c190IHNydHBfZ2V0X3Byb3RlY3RfdHJhaWxlcl9sZW5ndGgoc3J0cF90IHNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVzZV9ta2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG1raV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmxlbmd0aCkKK3sKKyAgICByZXR1cm4gZ2V0X3Byb3RlY3RfdHJhaWxlcl9sZW5ndGgoc2Vzc2lvbiwgMSwgdXNlX21raSwgbWtpX2luZGV4LCBsZW5ndGgpOworfQorCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2dldF9wcm90ZWN0X3J0Y3BfdHJhaWxlcl9sZW5ndGgoc3J0cF90IHNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdXNlX21raSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBta2lfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmxlbmd0aCkKK3sKKyAgICByZXR1cm4gZ2V0X3Byb3RlY3RfdHJhaWxlcl9sZW5ndGgoc2Vzc2lvbiwgMCwgdXNlX21raSwgbWtpX2luZGV4LCBsZW5ndGgpOworfQorCisvKgorICogU1JUUCBkZWJ1ZyBpbnRlcmZhY2UKKyAqLworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9zZXRfZGVidWdfbW9kdWxlKGNvbnN0IGNoYXIgKm1vZF9uYW1lLCBpbnQgdikKK3sKKyAgICByZXR1cm4gc3J0cF9jcnlwdG9fa2VybmVsX3NldF9kZWJ1Z19tb2R1bGUobW9kX25hbWUsIHYpOworfQorCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX2xpc3RfZGVidWdfbW9kdWxlcyh2b2lkKQoreworICAgIHJldHVybiBzcnRwX2NyeXB0b19rZXJuZWxfbGlzdF9kZWJ1Z19tb2R1bGVzKCk7Cit9CisKKy8qCisgKiBzcnRwX2xvZ19oYW5kbGVyIGlzIGEgZ2xvYmFsIHZhcmlhYmxlIGhvbGRpbmcgYSBwb2ludGVyIHRvIHRoZQorICogbG9nIGhhbmRsZXIgZnVuY3Rpb247IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBhbnkgbG9nCisgKiBvdXRwdXQuCisgKi8KKworc3RhdGljIHNydHBfbG9nX2hhbmRsZXJfZnVuY190ICpzcnRwX2xvZ19oYW5kbGVyID0gTlVMTDsKK3N0YXRpYyB2b2lkICpzcnRwX2xvZ19oYW5kbGVyX2RhdGEgPSBOVUxMOworCit2b2lkIHNydHBfZXJyX2hhbmRsZXIoc3J0cF9lcnJfcmVwb3J0aW5nX2xldmVsX3QgbGV2ZWwsIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgICBpZiAoc3J0cF9sb2dfaGFuZGxlcikgeworICAgICAgICBzcnRwX2xvZ19sZXZlbF90IGxvZ19sZXZlbCA9IHNydHBfbG9nX2xldmVsX2Vycm9yOworICAgICAgICBzd2l0Y2ggKGxldmVsKSB7CisgICAgICAgIGNhc2Ugc3J0cF9lcnJfbGV2ZWxfZXJyb3I6CisgICAgICAgICAgICBsb2dfbGV2ZWwgPSBzcnRwX2xvZ19sZXZlbF9lcnJvcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIHNydHBfZXJyX2xldmVsX3dhcm5pbmc6CisgICAgICAgICAgICBsb2dfbGV2ZWwgPSBzcnRwX2xvZ19sZXZlbF93YXJuaW5nOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ugc3J0cF9lcnJfbGV2ZWxfaW5mbzoKKyAgICAgICAgICAgIGxvZ19sZXZlbCA9IHNydHBfbG9nX2xldmVsX2luZm87CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBzcnRwX2Vycl9sZXZlbF9kZWJ1ZzoKKyAgICAgICAgICAgIGxvZ19sZXZlbCA9IHNydHBfbG9nX2xldmVsX2RlYnVnOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzcnRwX2xvZ19oYW5kbGVyKGxvZ19sZXZlbCwgbXNnLCBzcnRwX2xvZ19oYW5kbGVyX2RhdGEpOworICAgIH0KK30KKworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9pbnN0YWxsX2xvZ19oYW5kbGVyKHNydHBfbG9nX2hhbmRsZXJfZnVuY190IGZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSkKK3sKKyAgICAvKgorICAgICAqIG5vdGUgdGhhdCB3ZSBhY2NlcHQgTlVMTCBhcmd1bWVudHMgaW50ZW50aW9uYWxseSAtIGNhbGxpbmcgdGhpcworICAgICAqIGZ1bmN0aW9uIHdpdGggYSBOVUxMIGFyZ3VtZW50cyByZW1vdmVzIGEgbG9nIGhhbmRsZXIgdGhhdCdzCisgICAgICogYmVlbiBwcmV2aW91c2x5IGluc3RhbGxlZAorICAgICAqLworCisgICAgaWYgKHNydHBfbG9nX2hhbmRsZXIpIHsKKyAgICAgICAgc3J0cF9pbnN0YWxsX2Vycl9yZXBvcnRfaGFuZGxlcihOVUxMKTsKKyAgICB9CisgICAgc3J0cF9sb2dfaGFuZGxlciA9IGZ1bmM7CisgICAgc3J0cF9sb2dfaGFuZGxlcl9kYXRhID0gZGF0YTsKKyAgICBpZiAoc3J0cF9sb2dfaGFuZGxlcikgeworICAgICAgICBzcnRwX2luc3RhbGxfZXJyX3JlcG9ydF9oYW5kbGVyKHNydHBfZXJyX2hhbmRsZXIpOworICAgIH0KKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOworfQorCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX3NldF9zdHJlYW1fcm9jKHNydHBfdCBzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCByb2MpCit7CisgICAgc3J0cF9zdHJlYW1fdCBzdHJlYW07CisKKyAgICBzdHJlYW0gPSBzcnRwX2dldF9zdHJlYW0oc2Vzc2lvbiwgaHRvbmwoc3NyYykpOworICAgIGlmIChzdHJlYW0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisKKyAgICBzdHJlYW0tPnBlbmRpbmdfcm9jID0gcm9jOworCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9nZXRfc3RyZWFtX3JvYyhzcnRwX3Qgc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3NyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnJvYykKK3sKKyAgICBzcnRwX3N0cmVhbV90IHN0cmVhbTsKKworICAgIHN0cmVhbSA9IHNydHBfZ2V0X3N0cmVhbShzZXNzaW9uLCBodG9ubChzc3JjKSk7CisgICAgaWYgKHN0cmVhbSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbTsKKworICAgICpyb2MgPSBzcnRwX3JkYnhfZ2V0X3JvYygmc3RyZWFtLT5ydHBfcmRieCk7CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQpkaWZmIC0tZ2l0IGEvc3J0cC9zcnRwX3VzdC5jIGIvc3J0cC9zcnRwX3VzdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNWYwYzU3Li4wMDAwMDAwCi0tLSBhL3NydHAvc3J0cF91c3QuYworKysgL2Rldi9udWxsCkBAIC0xLDQ0MiArMCwwIEBACi0vKgotICogc3J0cC5jCi0gKgotICogIHRoZSBzZWN1cmUgcmVhbC10aW1lIHRyYW5zcG9ydCBwcm90b2NvbAotICoKLSAqIERhdmlkIEEuIE1jR3JldwotICogQ2lzY28gU3lzdGVtcywgSW5jLgotICovCi0vKgotICoJCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSwgQ2lzY28gU3lzdGVtcywgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAKLSAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogCi0gKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICovCi0KLQotI2luY2x1ZGUgImFsbG9jLmgiICAgICAgICAgICAvKiBmb3IgY3J5cHRvX2FsbG9jKCkgKi8KLSNpbmNsdWRlICJzcnRwLmgiCi0jaW5jbHVkZSAicmlqbmRhZWwtaWNtLmgiICAgIC8qIGZvciByaWpuZGFlbF9pY20gICAqLwotCi0KLWV4dGVybiBjaXBoZXJfdHlwZV90IHJpam5kYWVsX2ljbTsKLWV4dGVybiBhdXRoX3R5cGVfdCAgIHRtbWh2MjsKLQotLyogdGhlIGRlYnVnIG1vZHVsZSBmb3Igc3J0cCAqLwotCi1kZWJ1Z19tb2R1bGVfdCBtb2Rfc3J0cCA9IHsKLSAgMCwgICAgICAgICAgICAgICAgICAvKiBkZWJ1Z2dpbmcgaXMgb2ZmIGJ5IGRlZmF1bHQgKi8KLSAgInNydHAiICAgICAgICAgICAgICAvKiBwcmludGFibGUgbmFtZSBmb3IgbW9kdWxlICAgKi8KLX07Ci0KLSNkZWZpbmUgb2N0ZXRzX2luX3J0cF9oZWFkZXIgIDEyCi0jZGVmaW5lIHVpbnQzMnNfaW5fcnRwX2hlYWRlciAzCi0KLWVycl9zdGF0dXNfdAotc3J0cF9hbGxvYyhzcnRwX2N0eF90ICAgICoqY3R4X3B0ciwKLQkgICAgY2lwaGVyX3R5cGVfaWRfdCBjX2lkLAotCSAgICBpbnQgICAgICAgICAgICAgIGNpcGhlcl9rZXlfbGVuLCAKLQkgICAgYXV0aF90eXBlX2lkX3QgICBhX2lkLAotCSAgICBpbnQgICAgICAgICAgICAgIGF1dGhfa2V5X2xlbiwKLQkgICAgaW50ICAgICAgICAgICAgICBhdXRoX3RhZ19sZW4sCi0JICAgIHNlY19zZXJ2X3QgICAgICAgc2VjX3NlcnYpIHsKLQotICBlcnJfc3RhdHVzX3Qgc3RhdDsKLSAgc3J0cF9jdHhfdCAqY3R4OwotCi0gIC8qIGFsbG9jYXRlIHNydHAgY29udGV4dCBhbmQgc2V0IGN0eF9wdHIgKi8KLSAgY3R4ID0gKHNydHBfY3R4X3QgKikgY3J5cHRvX2FsbG9jKHNpemVvZihzcnRwX2N0eF90KSk7Ci0gIGlmIChjdHggPT0gTlVMTCkKLSAgICByZXR1cm4gZXJyX3N0YXR1c19hbGxvY19mYWlsOwotICAqY3R4X3B0ciA9IGN0eDsKLQotICAvKiBzZXQgc2VjdXJpdHkgc2VydmljZXMgZmxhZyAqLwotICBjdHgtPnNlcnZpY2VzID0gc2VjX3NlcnY7Ci0KLSAgLyogYWxsb2NhdGUgdXN0IGNvbnRleHQgKi8KLSAgc3RhdCA9IHVzdF9hbGxvYygmY3R4LT51c3QsICAgICAvKiB1c3QgY29udGV4dCAgICAgICAgICAgICAgICAgICAgICAgKi8KLQkJICAgY19pZCwgICAgICAgICAgLyoga2V5c3RyZWFtIGdlbmVyYXRvciBpZGVudGlmaWVyICAgICovCi0JCSAgIGNpcGhlcl9rZXlfbGVuLC8qIG51bWJlciBvZiBvY3RldHMgaW4gY2lwaGVyIGtleSAgICAqLwotCQkgICBhX2lkLCAgICAgICAgICAvKiBhdXRoIGFsZ29yaXRobSBzcGVjaWZpY2F0aW9uICAgICAgKi8KLQkJICAgYXV0aF9rZXlfbGVuLCAgLyogbnVtYmVyIG9mIG9jdGV0cyBpbiB0aGUgYXV0aCBrZXkgICovCi0JCSAgIGF1dGhfdGFnX2xlbiwgIC8qIG51bWJlciBvZiBvY3RldHMgaW4gdGhlIGF1dGggdGFnICAqLwotCQkgICAxMjggICAgICAgICAgICAvKiBiaXRzIGluIHJlcGxheSB3aW5kb3cgICAgICAgICAgICAgKi8KLQkJICAgKTsKLSAgCi0gIGlmIChzdGF0KSB7Ci0gICAgZnJlZShjdHgpOwotICAgIHJldHVybiBzdGF0OwotICB9Ci0gCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOwotfQotCi0vKgotICogc3J0cF9pbml0X2Flc18xMjhfcHJmKGN0eCwga2V5KSBpbml0aWFsaXplcyBhbiBzcnRwX2N0eF90Ci0gKiB3aXRoIGEgZ2l2ZW4gbWFzdGVyIGtleS4gIChUaGUgb2Zmc2V0IG9yIHNhbHQgdmFsdWUgaXMgYXNzdW1lZAotICogdG8gYmUgdGhlIHRyYWlsaW5nIG9jdGV0cyBvZiB0aGUga2V5LikKLSAqIAotICogdGhlIGtleSBNVVNUIGJlIDMwIG9jdGV0cyBsb25nCi0gKgotICogVGhlIFBSRiB1c2VkIGZvciBrZXkgZGVyaXZhdGlvbiBoZXJlIGlzIHRoYXQgZGVmaW5lZCBpbiB0aGUgc2VjdXJlCi0gKiBydHAgc3BlY2lmaWNhdGlvbiwgdGhvdWdoIGluIHRoZW9yeSwgb3RoZXIgUFJGcyBjYW4gYmUgdXNlZC4gIFRoZQotICogY2lwaGVyIGlzIGhhcmR3aXJlZCB0byBBRVMtMTI4IENvdW50ZXIgTW9kZSB3aXRoIDExMiBiaXRzIG9mIHNhbHQuCi0gKi8KLQotdHlwZWRlZiBlbnVtIHsKLSAgbGFiZWxfZW5jcnlwdGlvbiAgICAgICAgICAgICA9IDB4MDAsCi0gIGxhYmVsX21lc3NhZ2VfYXV0aGVudGljYXRpb24gPSAweDAxLAotICBsYWJlbF9zYWx0ICAgICAgICAgICAgICAgICAgID0gMHgwMgotfSBzcnRwX3ByZl9sYWJlbDsKLQotZXJyX3N0YXR1c190Ci1zcnRwX2luaXRfYWVzXzEyOF9wcmYoc3J0cF9jdHhfdCAqc3J0cCwgY29uc3Qgb2N0ZXRfdCBrZXlbMzBdKSB7Ci0gIGVycl9zdGF0dXNfdCBzdGF0OwotICByaWpuZGFlbF9pY21fY29udGV4dCBjOwotICB4dGRfc2VxX251bV90IGlkeCA9IDA7ICAgICAgICAgICAgICAgLyogZm9yIHNldHRpbmcgaWNtIHRvIHplcm8taW5kZXggICAqLyAgIAotICBvY3RldF90ICpidWZmZXI7ICAgICAgICAgICAgICAgICAgICAgLyogdGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGtleXN0cmVhbSAqLwotICBvY3RldF90ICplbmNfa2V5X2J1ZiwgKmVuY19zYWx0X2J1ZiwgKmF1dGhfa2V5X2J1ZjsgCi0gIGludCBidWZmZXJfc2l6ZTsKLQotICByZGJ4X2luaXQoJnNydHAtPnVzdC5yZGJ4KTsKLQotICBkZWJ1Z19wcmludChtb2Rfc3J0cCwgInNydHBfaW5pdF9hZXNfMTI4X3ByZigpIiwgTlVMTCk7Ci0KLSAgLyogYWxsb2NhdGUgdGVtcG9yYXJ5IHN0b3JhZ2UsIHNldCBwb2ludGVycywgYW5kIHplcm9pemUgYnVmZmVyICovCi0gIGJ1ZmZlcl9zaXplID0gY2lwaGVyX2dldF9rZXlfbGVuZ3RoKHNydHAtPnVzdC5jKQotICAgICsgYXV0aF9nZXRfa2V5X2xlbmd0aChzcnRwLT51c3QuaCk7Ci0KLSAgLyogaWYgd2UncmUgdXNpbmcgcmlqbmRhZWxfaWNtLCB3ZSBuZWVkIHRvIGFsbG9jYXRlIHJvb20gZm9yIHRoZSBzYWx0ICovCi0gIGlmIChzcnRwLT51c3QuYy0+dHlwZSA9PSAmcmlqbmRhZWxfaWNtKQotICAgIGJ1ZmZlcl9zaXplICs9IDE2OwotICBidWZmZXIgPSBjcnlwdG9fYWxsb2MoYnVmZmVyX3NpemUpOwotICBpZiAoYnVmZmVyID09IE5VTEwpCi0gICAgcmV0dXJuIGVycl9zdGF0dXNfYWxsb2NfZmFpbDsKLSAgZW5jX2tleV9idWYgPSBidWZmZXI7Ci0gIGVuY19zYWx0X2J1ZiA9IGJ1ZmZlciArIGNpcGhlcl9nZXRfa2V5X2xlbmd0aChzcnRwLT51c3QuYyk7Ci0gIGF1dGhfa2V5X2J1ZiA9IGVuY19zYWx0X2J1ZiArIDE2OyAgLyogREFNIC0gdGhpcyBzaG91bGQgZGVwZW5kIG9uIGNpcGhlciEgKi8KLSAgb2N0ZXRfc3RyaW5nX3NldF90b196ZXJvKGJ1ZmZlciwgYnVmZmVyX3NpemUpOwotICAgIAotICAvKiBnZW5lcmF0ZSBlbmNyeXB0aW9uIGtleSwgcHV0dGluZyBpdCBpbnRvIGVuY19rZXlfYnVmICAqLwotCi0gIC8qIG5vdGUgdGhhdCB3ZSBhc3N1bWUgdGhhdCBpbmRleCBESVYgdCA9PSAwIGluIHRoaXMgaW1wbGVtZW50YXRpb24gKi8KLSAgCi0gIHJpam5kYWVsX2ljbV9jb250ZXh0X2luaXQoJmMsIGtleSk7Ci0KLSAgLyogZXhvciA8bGFiZWw+IGludG8gdGhlIGVpZ3RoIG9jdGV0IG9mIHRoZSBzdGF0ZSAqLwotICByaWpuZGFlbF9pY21fc2V0X2Rpdl9wYXJhbSgmYywgKHVpbnQ2NF90KSBsYWJlbF9lbmNyeXB0aW9uKTsKLSAgcmlqbmRhZWxfaWNtX3NldF9zZWdtZW50KCZjLCBpZHgpOwotCi0gIGRlYnVnX3ByaW50KG1vZF9zcnRwLCAibWFzdGVyIGtleTogJXMiLCAKLQkgICAgICBvY3RldF9zdHJpbmdfaGV4X3N0cmluZygob2N0ZXRfdCAqKSZjLmV4cGFuZGVkX2tleVswXSwgNjApKTsKLSAgZGVidWdfcHJpbnQobW9kX3NydHAsICJnZW5lcmF0aW5nIGNpcGhlciBrZXkiLCBOVUxMKTsKLSAgZGVidWdfcHJpbnQobW9kX3NydHAsICJjaXBoZXIgY3RyOiAlcyIsIAotCSAgICAgIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKChvY3RldF90ICopJmMuY291bnRlciwgMzIpKTsgIAotCi0gIHJpam5kYWVsX2ljbV9lbmNyeXB0KCZjLCBlbmNfa2V5X2J1ZiwgCi0JCSAgICAgICBjaXBoZXJfZ2V0X2tleV9sZW5ndGgoc3J0cC0+dXN0LmMpKTsKLQotICBkZWJ1Z19wcmludChtb2Rfc3J0cCwgImNpcGhlciBrZXk6ICVzIiwgCi0JICAgICAgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoZW5jX2tleV9idWYsIDMyKSk7ICAKLQotICAvKiBnZW5lcmF0ZSBlbmNyeXB0aW9uIHNhbHQsIHB1dHRpbmcgaXQgaW50byBlbmNfc2FsdF9idWYgKi8KLSAgcmlqbmRhZWxfaWNtX2NvbnRleHRfaW5pdCgmYywga2V5KTsKLQotCi0gIC8qIAotICAgKiBpZiB0aGUgY2lwaGVyIGluIHRoZSBzcnRwIGNvbnRleHQgaXMgcmlqbmRhZWxfaWNtLCB0aGVuIHdlIG5lZWQKLSAgICogdG8gZ2VuZXJhdGUgdGhlIHNhbHQgdmFsdWUKLSAgICovCi0KLSAgaWYgKHNydHAtPnVzdC5jLT50eXBlID09ICZyaWpuZGFlbF9pY20pIHsKLQotLyogICAgIHByaW50ZigiZm91bmQgcmlqbmRhZWxfaWNtLCBnZW5lcmF0aW5nIHNhbHRcbiIpOyAqLwotCi0gICAgLyogZXhvciA8bGFiZWw+IGludG8gdGhlIGVpZ3RoIG9jdGV0IG9mIHRoZSBzdGF0ZSAqLwotICAgIHJpam5kYWVsX2ljbV9zZXRfZGl2X3BhcmFtKCZjLCAodWludDY0X3QpIGxhYmVsX3NhbHQpOyAKLSAgICByaWpuZGFlbF9pY21fc2V0X3NlZ21lbnQoJmMsIGlkeCk7Ci0gICAgCi0gICAgZGVidWdfcHJpbnQobW9kX3NydHAsICJnZW5lcmF0aW5nIGNpcGhlciBzYWx0IiwgTlVMTCk7Ci0gICAgZGVidWdfcHJpbnQobW9kX3NydHAsICJjciBzbHQgY3RyOiAlcyIsIAotCQlvY3RldF9zdHJpbmdfaGV4X3N0cmluZygob2N0ZXRfdCAqKSZjLmNvdW50ZXIsIDMyKSk7ICAKLQotICAgIHJpam5kYWVsX2ljbV9lbmNyeXB0KCZjLCBlbmNfc2FsdF9idWYsIDE0KTsKLQotICAgIGRlYnVnX3ByaW50KG1vZF9zcnRwLCAiY2lwaGVyIHNsdDogJXMiLCAKLQkJb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoZW5jX3NhbHRfYnVmLCAzMikpOyAgCi0KLSAgICAvKgotICAgICAqIHdlIGRvbid0IHlldCBrbm93IHRoZSBzc3JjIG9mIHRoZSBzZW5kZXIsIHNvIHdlIGRvbid0IGV4b3IgdGhlCi0gICAgICogc3NyYyB2YWx1ZSBpbnRvIHRoZSBlbmNfc2FsdF9idWYKLSAgICAgKi8KLSAgfQotICAKLSAgLyogZ2VuZXJhdGUgYXV0aGVudGljYXRpb24ga2V5LCBwdXR0aW5nIGl0IGludG8gYXV0aF9rZXlfYnVmICovCi0KLSAgcmlqbmRhZWxfaWNtX2NvbnRleHRfaW5pdCgmYywga2V5KTsKLQotICAvKiBleG9yIDxsYWJlbD4gaW50byB0aGUgZWlndGggb2N0ZXQgb2YgdGhlIHN0YXRlICovCi0gIHJpam5kYWVsX2ljbV9zZXRfZGl2X3BhcmFtKCZjLCAodWludDY0X3QpIGxhYmVsX21lc3NhZ2VfYXV0aGVudGljYXRpb24pOwotICByaWpuZGFlbF9pY21fc2V0X3NlZ21lbnQoJmMsIGlkeCk7Ci0KLSAgZGVidWdfcHJpbnQobW9kX3NydHAsICJnZW5lcmF0aW5nIGF1dGgga2V5IiwgTlVMTCk7Ci0gIGRlYnVnX3ByaW50KG1vZF9zcnRwLCAiYXV0aCBjdHI6ICAgJXMiLAotCSAgICAgIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKChvY3RldF90ICopJmMuY291bnRlciwgMzIpKTsgIAotCi0gIHJpam5kYWVsX2ljbV9lbmNyeXB0KCZjLCBhdXRoX2tleV9idWYsCi0JCSAgICAgICBhdXRoX2dldF9rZXlfbGVuZ3RoKHNydHAtPnVzdC5oKSk7Ci0gIAotICBkZWJ1Z19wcmludChtb2Rfc3J0cCwgImF1dGgga2V5OiAgICVzIiwKLQkgICAgICBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhhdXRoX2tleV9idWYsIAotCSAgICAgICAgICAyKmF1dGhfZ2V0X2tleV9sZW5ndGgoc3J0cC0+dXN0LmgpKSk7IAotICAKLSAgLyogaW5pdGlhbGl6ZSB1c3QgY29udGV4dCB3aXRoIGtleXMgKi8KLSAgc3RhdCA9IHVzdF9pbml0KCZzcnRwLT51c3QsIGVuY19rZXlfYnVmLCBhdXRoX2tleV9idWYpOyAgCi0gIGlmIChzdGF0KSB7Ci0gICAgZnJlZShidWZmZXIpOwotICAgIHJldHVybiBlcnJfc3RhdHVzX2luaXRfZmFpbDsKLSAgfSAgCi0KLSAgLyogZnJlZSBtZW1vcnkgdGhlbiByZXR1cm4gKi8KLSAgZnJlZShidWZmZXIpOwotICByZXR1cm4gZXJyX3N0YXR1c19vazsgIAotfQotCi0KLWVycl9zdGF0dXNfdAotc3J0cF9wcm90ZWN0KHNydHBfY3R4X3QgKmN0eCwgc3J0cF9oZHJfdCAqaGRyLCBpbnQgKnBrdF9vY3RldF9sZW4pIHsKLSAgdWludDMyX3QgKmVuY19zdGFydDsgICAgICAvKiBwb2ludGVyIHRvIHN0YXJ0IG9mIGVuY3J5cHRlZCBwb3J0aW9uICAqLwotICB1aW50MzJfdCAqYXV0aF9zdGFydDsgICAgIC8qIHBvaW50ZXIgdG8gc3RhcnQgb2YgYXV0aC4gcG9ydGlvbiAgICAgICovCi0gIGludCBlbmNfb2N0ZXRfbGVuID0gMDsgICAgLyogbnVtYmVyIG9mIG9jdGV0cyBpbiBlbmNyeXB0ZWQgcG9ydGlvbiAgKi8KLSAgeHRkX3NlcV9udW1fdCBlc3Q7ICAgICAgICAvKiBlc3RpbWF0ZWQgeHRkX3NlcV9udW1fdCBvZiAqaGRyICAgICAgICAqLwotICBpbnQgZGVsdGE7ICAgICAgICAgICAgICAgIC8qIGRlbHRhIG9mIGxvY2FsIHBrdCBpZHggYW5kIHRoYXQgaW4gaGRyICovCi0gIG9jdGV0X3QgKmF1dGhfdGFnID0gTlVMTDsgLyogbG9jYXRpb24gb2YgYXV0aF90YWcgd2l0aGluIHBhY2tldCAgICAgKi8KLSAgZXJyX3N0YXR1c190IHN0YXR1czsgICAKLSAgaW50IHRhZ19sZW4gPSB1c3RfZ2V0X3RhZ19sZW4oJmN0eC0+dXN0KTsgCi0gCi0gIC8qIGlmIHdlJ3JlIHVzaW5nIHJpbmRhZWwgY291bnRlciBtb2RlLCBleG9yIHRoZSBzc3JjIGludG8gdGhlIHNhbHQgKi8KLSAgaWYgKGN0eC0+dXN0LmMtPnR5cGUgPT0gJnJpam5kYWVsX2ljbSkgewotICAgIHVpbnQzMl90IHNzcmMgPSBudG9obChoZHItPnNzcmMpOwotICAgIHJpam5kYWVsX2ljbV9jb250ZXh0ICpjaXBoZXIgCi0gICAgICA9IChyaWpuZGFlbF9pY21fY29udGV4dCAqKWN0eC0+dXN0LmMtPnN0YXRlOwotCi0gICAgLyogZXhvciB0aGUgc3NyYyBpbnRvIGJ5dGVzIGZvdXIgdGhyb3VnaCBzZXZlbiBvZiB0aGUgc2FsdCAqLwotICAgIGNpcGhlci0+b2Zmc2V0Lm9jdGV0WzRdIF49IChzc3JjID4+IDI0KTsKLSAgICBjaXBoZXItPm9mZnNldC5vY3RldFs1XSBePSAoc3NyYyA+PiAxNikgJiAweGZmOwotICAgIGNpcGhlci0+b2Zmc2V0Lm9jdGV0WzZdIF49IChzc3JjID4+IDgpICYgMHhmZjsKLSAgICBjaXBoZXItPm9mZnNldC5vY3RldFs3XSBePSBzc3JjICYgMHhmZjsKLSAgfQotCi0gIC8qCi0gICAqIGZpbmQgc3RhcnRpbmcgcG9pbnQgZm9yIGVuY3J5cHRpb24gYW5kIGxlbmd0aCBvZiBkYXRhIHRvIGJlCi0gICAqIGVuY3J5cHRlZCAtIHRoZSBlbmNyeXB0ZWQgcG9ydGlvbiBzdGFydHMgYWZ0ZXIgdGhlIHJ0cCBoZWFkZXIKLSAgICogZXh0ZW5zaW9uLCBpZiBwcmVzZW50OyBvdGhlcndpc2UsIGl0IHN0YXJ0cyBhZnRlciB0aGUgbGFzdCBjc3JjLAotICAgKiBpZiBhbnkgYXJlIHByZXNlbnQKLSAgICoKLSAgICogaWYgd2UncmUgbm90IHByb3ZpZGluZyBjb25maWRlbnRpYWxpdHksIHNldCBlbmNfc3RhcnQgdG8gTlVMTAotICAgKi8KLSAgaWYgKGN0eC0+c2VydmljZXMgJiBzZWNfc2Vydl9jb25mKSB7Ci0gICAgZW5jX3N0YXJ0ID0gKHVpbnQzMl90ICopaGRyICsgdWludDMyc19pbl9ydHBfaGVhZGVyICsgaGRyLT5jYzsgIAotICAgIGlmIChoZHItPnggPT0gMSkgCi0gICAgICBlbmNfc3RhcnQgKz0gKChzcnRwX2hkcl94dG5kX3QgKillbmNfc3RhcnQpLT5sZW5ndGg7Ci0gICAgZW5jX29jdGV0X2xlbiA9ICpwa3Rfb2N0ZXRfbGVuIC0gKChlbmNfc3RhcnQgLSAodWludDMyX3QgKiloZHIpIDw8IDIpOwotICB9IGVsc2UgewotICAgIGVuY19zdGFydCA9IE5VTEw7Ci0gIH0KLQotICAvKiAKLSAgICogaWYgd2UncmUgcHJvdmlkaW5nIGF1dGhlbnRpY2F0aW9uLCBzZXQgdGhlIGF1dGhfc3RhcnQgYW5kIGF1dGhfdGFnCi0gICAqIHBvaW50ZXJzIHRvIHRoZSBwcm9wZXIgbG9jYXRpb25zOyBvdGhlcndpc2UsIHNldCBhdXRoX3N0YXJ0IHRvIE5VTEwKLSAgICogdG8gaW5kaWNhdGUgdGhhdCBubyBhdXRoZW50aWNhdGlvbiBpcyBuZWVkZWQKLSAgICovCi0gIGlmIChjdHgtPnNlcnZpY2VzICYgc2VjX3NlcnZfYXV0aCkgewotICAgIGF1dGhfc3RhcnQgPSAodWludDMyX3QgKiloZHI7Ci0gICAgYXV0aF90YWcgPSAob2N0ZXRfdCAqKWhkciArICpwa3Rfb2N0ZXRfbGVuOwotICB9IGVsc2UgewotICAgIGF1dGhfc3RhcnQgPSBOVUxMOwotICAgIGF1dGhfdGFnID0gTlVMTDsKLSAgfQotCi0gIC8qCi0gICAqIGVzdGltYXRlIHRoZSBwYWNrZXQgaW5kZXggdXNpbmcgdGhlIHN0YXJ0IG9mIHRoZSByZXBsYXkgd2luZG93ICAgCi0gICAqIGFuZCB0aGUgc2VxdWVuY2UgbnVtYmVyIGZyb20gdGhlIGhlYWRlcgotICAgKi8KLSAgZGVsdGEgPSByZGJ4X2VzdGltYXRlX2luZGV4KCZjdHgtPnVzdC5yZGJ4LCAmZXN0LCBudG9ocyhoZHItPnNlcSkpOwotICBpZiAocmRieF9jaGVjaygmY3R4LT51c3QucmRieCwgZGVsdGEpICE9IHJlcGxheV9jaGVja19vaykKLSAgICByZXR1cm4gZXJyX3N0YXR1c19yZXBsYXlfZmFpbDsgIC8qIHdlJ3ZlIGJlZW4gYXNrZWQgdG8gcmV1c2UgYW4gaW5kZXggKi8KLSAgcmRieF9hZGRfaW5kZXgoJmN0eC0+dXN0LnJkYngsIGRlbHRhKTsKLQotICBzdGF0dXMgPSAKLSAgdXN0X3hmbSgmY3R4LT51c3QsICAgICAgICAgICAvKiB1c3QgY29udGV4dCAgICAgICAgICAgICAgICAgICAgICAqLwotCSAgZXN0LCAgICAgICAgICAgICAgICAgLyogaW5kZXggICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQkgIChvY3RldF90ICopZW5jX3N0YXJ0LC8qIHBvaW50ZXIgdG8gZW5jcnlwdGlvbiBzdGFydCAgICAgICovCi0JICBlbmNfb2N0ZXRfbGVuLCAgICAgICAvKiBudW1iZXIgb2Ygb2N0ZXRzIHRvIGVuY3J5cHQgICAgICAqLwotCSAgKG9jdGV0X3QgKiloZHIsICAgICAgLyogcG9pbnRlciB0byBhdXRoZW50aWNhdGlvbiBzdGFydCAgKi8KLQkgICpwa3Rfb2N0ZXRfbGVuLCAgICAgIC8qIG51bWJlciBvZiBvY3RldHMgdG8gYXV0aGVudGljYXRlICovCi0JICBhdXRoX3RhZyk7ICAgICAgICAgICAvKiBhdXRoZW50aWNhdGlvbiB0YWcgICAgICAgICAgICAgICAqLwotCSAgCi0jaWYgMCAgCi0gIHN0YXR1cyA9IAotICB1c3RfeGZtX3UxNigmY3R4LT51c3QsICAgICAgICAgICAvKiB1c3QgY29udGV4dCAgICAgICAgICAgICAgICAgICAgICAqLwotCSAgICAgIG50b2hzKGhkci0+c2VxKSwgICAgIC8qIGluZGV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JICAgICAgKG9jdGV0X3QgKillbmNfc3RhcnQsLyogcG9pbnRlciB0byBlbmNyeXB0aW9uIHN0YXJ0ICAgICAgKi8KLQkgICAgICBlbmNfb2N0ZXRfbGVuLCAgICAgICAvKiBudW1iZXIgb2Ygb2N0ZXRzIHRvIGVuY3J5cHQgICAgICAqLwotCSAgICAgIChvY3RldF90ICopaGRyLCAgICAgIC8qIHBvaW50ZXIgdG8gYXV0aGVudGljYXRpb24gc3RhcnQgICovCi0JICAgICAgKnBrdF9vY3RldF9sZW4sICAgICAgLyogbnVtYmVyIG9mIG9jdGV0cyB0byBhdXRoZW50aWNhdGUgKi8KLQkgICAgICBhdXRoX3RhZyk7ICAgICAgICAgICAvKiBhdXRoZW50aWNhdGlvbiB0YWcgICAgICAgICAgICAgICAqLwotI2VuZGlmCi0gIAotICAvKiBpbmNyZWFzZSB0aGUgcGFja2V0IGxlbmd0aCBieSB0aGUgbGVuZ3RoIG9mIHRoZSBhdXRoIHRhZyAqLwotICAqcGt0X29jdGV0X2xlbiArPSB0YWdfbGVuOwotICAgIAotICByZXR1cm4gZXJyX3N0YXR1c19vazsgIAotfQotCi0KLWVycl9zdGF0dXNfdAotc3J0cF91bnByb3RlY3Qoc3J0cF9jdHhfdCAqY3R4LCBzcnRwX2hkcl90ICpoZHIsIGludCAqcGt0X29jdGV0X2xlbikgewotICB1aW50MzJfdCAqZW5jX3N0YXJ0OyAgICAgIC8qIHBvaW50ZXIgdG8gc3RhcnQgb2YgZW5jcnlwdGVkIHBvcnRpb24gICovCi0gIHVpbnQzMl90ICphdXRoX3N0YXJ0OyAgICAgLyogcG9pbnRlciB0byBzdGFydCBvZiBhdXRoLiBwb3J0aW9uICAgICAgKi8KLSAgaW50IGVuY19vY3RldF9sZW4gPSAwOyAgICAvKiBudW1iZXIgb2Ygb2N0ZXRzIGluIGVuY3J5cHRlZCBwb3J0aW9uICAqLwotICBvY3RldF90ICphdXRoX3RhZyA9IE5VTEw7IC8qIGxvY2F0aW9uIG9mIGF1dGhfdGFnIHdpdGhpbiBwYWNrZXQgICAgICovCi0gIGVycl9zdGF0dXNfdCBzdGF0dXM7ICAgCi0gIGludCB0YWdfbGVuID0gdXN0X2dldF90YWdfbGVuKCZjdHgtPnVzdCk7IAotCi0gIC8qCi0gICAqIGxvb2sgdXAgc3NyYyBpbiBzcnRwX3N0cmVhbSBsaXN0LCBhbmQgcHJvY2VzcyB0aGUgcGFja2V0IHdpdGggCi0gICAqIHRoZSBhcHByb3ByaWF0ZSBzdHJlYW0uICBpZiB3ZSBoYXZlbid0IHNlZW4gdGhpcyBzdHJlYW0gYmVmb3JlLAotICAgKiB0aGVyZSdzIG9ubHkgb25lIGtleSBmb3IgdGhpcyBzcnRwX3Nlc3Npb24sIGFuZCB0aGUgY2lwaGVyCi0gICAqIHN1cHBvcnRzIGtleS1zaGFyaW5nLCB0aGVuIHdlIGFzc3VtZSB0aGF0IGEgbmV3IHN0cmVhbSB1c2luZwotICAgKiB0aGF0IGtleSBoYXMganVzdCBzdGFydGVkIHVwCi0gICAqLwotI2lmIDAKLSAgc3RyZWFtID0gc3J0cF9zdHJlYW1fbG9va3VwKCZjdHgpOwotICBpZiAoc3RyZWFtID09IE5VTEwpCi0gICAgc3RyZWFtID0gdGVtcF9zdHJlYW07Ci0jZW5kaWYKLSAgLyogCi0gICAqIGFkZCBzc3JjIGludG8gY2lwaGVyIGNvbnRleHQgKCJkaXZlcnNpZmljYXRpb24iKSAtIG5vdGUgdGhhdCBpZgotICAgKiB0aGUgY2lwaGVyIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvcGVyYXRpb24sIGl0IHdpbGwgc2lsZW50bHkKLSAgICogZmFpbCwgd2hpY2ggaXMgYWN0dWFsbHkgd2hhdCB3ZSB3YW50IGhlcmUgCi0gICAqLwotICB1c3Rfc2V0X2RpdmVyc2lmaWVyKCZjdHgtPnVzdCwgbnRvaGwoaGRyLT5zc3JjKSk7Ci0KLSAgLyoKLSAgICogZmluZCBzdGFydGluZyBwb2ludCBmb3IgZGVjcnlwdGlvbiBhbmQgbGVuZ3RoIG9mIGRhdGEgdG8gYmUKLSAgICogZGVjcnlwdGVkIC0gdGhlIGVuY3J5cHRlZCBwb3J0aW9uIHN0YXJ0cyBhZnRlciB0aGUgcnRwIGhlYWRlcgotICAgKiBleHRlbnNpb24sIGlmIHByZXNlbnQ7IG90aGVyd2lzZSwgaXQgc3RhcnRzIGFmdGVyIHRoZSBsYXN0IGNzcmMsCi0gICAqIGlmIGFueSBhcmUgcHJlc2VudAotICAgKgotICAgKiBpZiB3ZSdyZSBub3QgcHJvdmlkaW5nIGNvbmZpZGVudGlhbGl0eSwgc2V0IGVuY19zdGFydCB0byBOVUxMCi0gICAqLwotICBpZiAoY3R4LT5zZXJ2aWNlcyAmIHNlY19zZXJ2X2NvbmYpIHsKLSAgICBlbmNfc3RhcnQgPSAodWludDMyX3QgKiloZHIgKyB1aW50MzJzX2luX3J0cF9oZWFkZXIgKyBoZHItPmNjOyAgCi0gICAgaWYgKGhkci0+eCA9PSAxKSAKLSAgICAgIGVuY19zdGFydCArPSAoKHNydHBfaGRyX3h0bmRfdCAqKWVuY19zdGFydCktPmxlbmd0aDsKLSAgICBlbmNfb2N0ZXRfbGVuID0gKnBrdF9vY3RldF9sZW4gLSB0YWdfbGVuCi0gICAgICAtICgoZW5jX3N0YXJ0IC0gKHVpbnQzMl90ICopaGRyKSA8PCAyKTsKLSAgfSBlbHNlIHsKLSAgICBlbmNfc3RhcnQgPSBOVUxMOwotICB9Ci0KLSAgLyogCi0gICAqIGlmIHdlJ3JlIHByb3ZpZGluZyBhdXRoZW50aWNhdGlvbiwgc2V0IHRoZSBhdXRoX3N0YXJ0IGFuZCBhdXRoX3RhZwotICAgKiBwb2ludGVycyB0byB0aGUgcHJvcGVyIGxvY2F0aW9uczsgb3RoZXJ3aXNlLCBzZXQgYXV0aF9zdGFydCB0byBOVUxMCi0gICAqIHRvIGluZGljYXRlIHRoYXQgbm8gYXV0aGVudGljYXRpb24gaXMgbmVlZGVkCi0gICAqLwotICBpZiAoY3R4LT5zZXJ2aWNlcyAmIHNlY19zZXJ2X2F1dGgpIHsKLSAgICBhdXRoX3N0YXJ0ID0gKHVpbnQzMl90ICopaGRyOwotICAgIGF1dGhfdGFnID0gKG9jdGV0X3QgKiloZHIgKyAqcGt0X29jdGV0X2xlbiAtIHRhZ19sZW47Ci0gIH0gZWxzZSB7Ci0gICAgYXV0aF9zdGFydCA9IE5VTEw7Ci0gICAgYXV0aF90YWcgPSBOVUxMOwotICB9Ci0KLSAgLyogYXQgdGhpcyBwb2ludCwgdGhlIHVzdCBjb250ZXh0IHNob3VsZCBsb29rIGludG8gdGhlIHN0cmVhbSAqLwotICBzdGF0dXMgPSAKLSAgdXN0X2ludl94Zm1fdTE2KAotCSAgICAgICZjdHgtPnVzdCwgICAgICAgICAgICAgICAgLyogdXN0IGNvbnRleHQgICAgICAgICAgICAgICAgICovCi0JICAgICAgbnRvaHMoaGRyLT5zZXEpLCAgICAgICAgICAvKiBpbmRleCAgICAgICAgICAgICAgICAgICAgICAgKi8KLQkgICAgICAob2N0ZXRfdCAqKWVuY19zdGFydCwgICAgIC8qIHBvaW50ZXIgdG8gZW5jcnlwdGlvbiBzdGFydCAqLwotCSAgICAgIGVuY19vY3RldF9sZW4sICAgICAgICAgICAgLyogbnVtYmVyIG9mIG9jdGV0cyB0byBlbmNyeXB0ICovCi0JICAgICAgKG9jdGV0X3QgKiloZHIsICAgICAgICAgICAvKiBwb2ludGVyIHRvIGF1dGggc3RhcnQgICAgICAgKi8KLQkgICAgICAqcGt0X29jdGV0X2xlbiAtIHRhZ19sZW4sIC8qIG51bSBvY3RldHMgdG8gYXV0aGVudGljYXRlICAqLwotCSAgICAgIGF1dGhfdGFnKTsgICAgICAgICAgICAgICAgLyogYXV0aGVudGljYXRpb24gdGFnICAgICAgICAgICovCi0KLSAgaWYgKHN0YXR1cykKLSAgICByZXR1cm4gc3RhdHVzOwotCi0gIC8qIGRlY3JlYXNlIHRoZSBwYWNrZXQgbGVuZ3RoIGJ5IHRoZSBsZW5ndGggb2YgdGhlIGF1dGggdGFnICovCi0gICpwa3Rfb2N0ZXRfbGVuIC09IHRhZ19sZW47Ci0gICAgCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOyAgCi19Ci0KLQotLyoKLSAqIHNydHBfZ2V0X3RyYWlsZXJfbGVuZ3RoKCZhKSByZXR1cm5zIHRoZSBudW1iZXIgb2Ygb2N0ZXRzIHRoYXQgd2lsbAotICogYmUgYWRkZWQgdG8gYW4gUlRQIHBhY2tldCBieSB0aGUgU1JUUCBwcm9jZXNzaW5nLiAgVGhpcyB2YWx1ZQotICogaXMgY29uc3RhbnQgZm9yIGEgZ2l2ZW4gc3J0cF9jdHhfdCAoaS5lLiBiZXR3ZWVuIGluaXRpYWxpemF0aW9ucykuCi0gKi8KLQotaW50Ci1zcnRwX2dldF90cmFpbGVyX2xlbmd0aChjb25zdCBzcnRwX3QgYSkgewotICByZXR1cm4gdXN0X2dldF90YWdfbGVuKCZhLT51c3QpOwotfQotCi0vKiAKLSAqIHNydHBfcHJpbnRfcGFja2V0KC4uLikgaXMgZm9yIGRlYnVnZ2luZyBvbmx5IAotICogaXQgcHJpbnRzIGFuIFJUUCBwYWNrZXQgdG8gdGhlIHN0ZG91dAotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotCi12b2lkCi1zcnRwX3ByaW50X3BhY2tldChzcnRwX2hkcl90ICpoZHIsIGludCBwa3Rfb2N0ZXRfbGVuKSB7Ci0gIG9jdGV0X3QgKmRhdGEgPSAoKG9jdGV0X3QgKiloZHIpK29jdGV0c19pbl9ydHBfaGVhZGVyOwotICBpbnQgaGV4X2xlbiA9IDIqKHBrdF9vY3RldF9sZW4tb2N0ZXRzX2luX3J0cF9oZWFkZXIpOwotCi0gIHByaW50ZigicnRwIHBhY2tldDoge1xuIik7Ci0gIHByaW50ZigiICAgdmVyc2lvbjpcdCVkXG4iLCBoZHItPnZlcnNpb24pOwotICBwcmludGYoIiAgIHA6XHRcdCVkXG4iLCBoZHItPnApOwotICBwcmludGYoIiAgIHg6XHRcdCVkXG4iLCBoZHItPngpOwotICBwcmludGYoIiAgIGNjOlx0XHQlZFxuIiwgaGRyLT5jYyk7Ci0gIHByaW50ZigiICAgbTpcdFx0JWRcbiIsIGhkci0+bSk7Ci0gIHByaW50ZigiICAgcHQ6XHRcdCV4XG4iLCBoZHItPnB0KTsKLSAgcHJpbnRmKCIgICBzZXE6XHRcdCV4XG4iLCBoZHItPnNlcSk7Ci0gIHByaW50ZigiICAgdHM6XHRcdCV4XG4iLCBoZHItPnRzKTsKLSAgcHJpbnRmKCIgICBzc3JjOlx0JXhcbiIsIGhkci0+c3NyYyk7Ci0gIHByaW50ZigiICAgZGF0YTpcdCVzXG4iLCBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhkYXRhLCBoZXhfbGVuKSk7Ci0gIHByaW50ZigifSAoJWQgb2N0ZXRzIGluIGRhdGEpXG4iLCBwa3Rfb2N0ZXRfbGVuLW9jdGV0c19pbl9ydHBfaGVhZGVyKTsKLQotfQotCmRpZmYgLS1naXQgYS9zcnRwMi52Y3hwcm9qIGIvc3J0cDIudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmFjNjQyCi0tLSAvZGV2L251bGwKKysrIGIvc3J0cDIudmN4cHJvagpAQCAtMCwwICsxLDQwNSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSIxNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWcgRGxsfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnIERsbDwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWcgRGxsfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZyBEbGw8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZSBEbGx8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZSBEbGw8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2UgRGxsfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlIERsbDwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntFRUYwMzFDQi1GRUQ4LTQ1MUUtQTQ3MS05MUVDOEQ0RjY3NTB9PC9Qcm9qZWN0R3VpZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5zcnRwMjwvUm9vdE5hbWVzcGFjZT4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIERsbHxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBEbGx8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBEbGx8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIERsbHx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgRGxsfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgRGxsfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBEbGx8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgRGxsfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTIuMC4zMDUwMS4wPC9fUHJvamVjdEZpbGVWZXJzaW9uPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8T3V0RGlyPiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyPiQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8T3V0RGlyPiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyPiQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgRGxsfFdpbjMyJyI+CisgICAgPE91dERpcj4kKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+CisgICAgPEludERpcj4kKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgRGxsfHg2NCciIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBEbGx8V2luMzInIj4KKyAgICA8T3V0RGlyPiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KKyAgICA8SW50RGlyPiQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIERsbHx4NjQnIiAvPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPFByZUJ1aWxkRXZlbnQ+CisgICAgICA8TWVzc2FnZT5DcmVhdGluZyBjb25maWcuaCBmcm9tIGNvbmZpZy5odzwvTWVzc2FnZT4KKyAgICAgIDxDb21tYW5kPmNvcHkgL1kgIiQoUHJvamVjdERpciljb25maWcuaHciICIkKFByb2plY3REaXIpY3J5cHRvXGluY2x1ZGVcY29uZmlnLmgiICZndDsgTlVMPC9Db21tYW5kPgorICAgIDwvUHJlQnVpbGRFdmVudD4KKyAgICA8Q3VzdG9tQnVpbGRTdGVwPgorICAgICAgPE1lc3NhZ2UgLz4KKyAgICAgIDxDb21tYW5kIC8+CisgICAgPC9DdXN0b21CdWlsZFN0ZXA+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPmNyeXB0by9pbmNsdWRlO2luY2x1ZGU7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0xJQjtIQVZFX0NPTkZJR19IOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxNaW5pbWFsUmVidWlsZD50cnVlPC9NaW5pbWFsUmVidWlsZD4KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+CisgICAgICA8U3RydWN0TWVtYmVyQWxpZ25tZW50PkRlZmF1bHQ8L1N0cnVjdE1lbWJlckFsaWdubWVudD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlciAvPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxQcmVCdWlsZEV2ZW50PgorICAgICAgPE1lc3NhZ2U+Q3JlYXRpbmcgY29uZmlnLmggZnJvbSBjb25maWcuaHc8L01lc3NhZ2U+CisgICAgICA8Q29tbWFuZD5jb3B5IC9ZICIkKFByb2plY3REaXIpY29uZmlnLmh3IiAiJChQcm9qZWN0RGlyKWNyeXB0b1xpbmNsdWRlXGNvbmZpZy5oIiAmZ3Q7IE5VTDwvQ29tbWFuZD4KKyAgICA8L1ByZUJ1aWxkRXZlbnQ+CisgICAgPEN1c3RvbUJ1aWxkU3RlcD4KKyAgICAgIDxNZXNzYWdlPgorICAgICAgPC9NZXNzYWdlPgorICAgICAgPENvbW1hbmQ+CisgICAgICA8L0NvbW1hbmQ+CisgICAgPC9DdXN0b21CdWlsZFN0ZXA+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPmNyeXB0by9pbmNsdWRlO2luY2x1ZGU7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0xJQjtIQVZFX0NPTkZJR19IOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+CisgICAgICA8U3RydWN0TWVtYmVyQWxpZ25tZW50PkRlZmF1bHQ8L1N0cnVjdE1lbWJlckFsaWdubWVudD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PgorICAgIDwvQ2xDb21waWxlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxQcmVCdWlsZEV2ZW50PgorICAgICAgPE1lc3NhZ2U+Q3JlYXRpbmcgY29uZmlnLmggZnJvbSBjb25maWcuaHc8L01lc3NhZ2U+CisgICAgICA8Q29tbWFuZD5jb3B5IC9ZICIkKFByb2plY3REaXIpY29uZmlnLmh3IiAiJChQcm9qZWN0RGlyKWNyeXB0b1xpbmNsdWRlXGNvbmZpZy5oIiAmZ3Q7IE5VTDwvQ29tbWFuZD4KKyAgICA8L1ByZUJ1aWxkRXZlbnQ+CisgICAgPEN1c3RvbUJ1aWxkU3RlcD4KKyAgICAgIDxNZXNzYWdlIC8+CisgICAgICA8Q29tbWFuZCAvPgorICAgIDwvQ3VzdG9tQnVpbGRTdGVwPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz5jcnlwdG8vaW5jbHVkZTtpbmNsdWRlOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19MSUI7SEFWRV9DT05GSUdfSDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8U3RydWN0TWVtYmVyQWxpZ25tZW50PkRlZmF1bHQ8L1N0cnVjdE1lbWJlckFsaWdubWVudD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlciAvPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPFByZUJ1aWxkRXZlbnQ+CisgICAgICA8TWVzc2FnZT5DcmVhdGluZyBjb25maWcuaCBmcm9tIGNvbmZpZy5odzwvTWVzc2FnZT4KKyAgICAgIDxDb21tYW5kPmNvcHkgL1kgIiQoUHJvamVjdERpciljb25maWcuaHciICIkKFByb2plY3REaXIpY3J5cHRvXGluY2x1ZGVcY29uZmlnLmgiICZndDsgTlVMPC9Db21tYW5kPgorICAgIDwvUHJlQnVpbGRFdmVudD4KKyAgICA8Q3VzdG9tQnVpbGRTdGVwPgorICAgICAgPE1lc3NhZ2U+CisgICAgICA8L01lc3NhZ2U+CisgICAgICA8Q29tbWFuZD4KKyAgICAgIDwvQ29tbWFuZD4KKyAgICA8L0N1c3RvbUJ1aWxkU3RlcD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Y3J5cHRvL2luY2x1ZGU7aW5jbHVkZTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfTElCO0hBVkVfQ09ORklHX0g7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPFN0cnVjdE1lbWJlckFsaWdubWVudD5EZWZhdWx0PC9TdHJ1Y3RNZW1iZXJBbGlnbm1lbnQ+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIERsbHxXaW4zMiciPgorICAgIDxQcmVCdWlsZEV2ZW50PgorICAgICAgPE1lc3NhZ2U+Q3JlYXRpbmcgY29uZmlnLmggZnJvbSBjb25maWcuaHc8L01lc3NhZ2U+CisgICAgICA8Q29tbWFuZD5jb3B5IC9ZICIkKFByb2plY3REaXIpY29uZmlnLmh3IiAiJChQcm9qZWN0RGlyKWNyeXB0b1xpbmNsdWRlXGNvbmZpZy5oIiAmZ3Q7IE5VTDwvQ29tbWFuZD4KKyAgICA8L1ByZUJ1aWxkRXZlbnQ+CisgICAgPEN1c3RvbUJ1aWxkU3RlcD4KKyAgICAgIDxNZXNzYWdlIC8+CisgICAgICA8Q29tbWFuZCAvPgorICAgIDwvQ3VzdG9tQnVpbGRTdGVwPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPmNyeXB0by9pbmNsdWRlO2luY2x1ZGU7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0xJQjtIQVZFX0NPTkZJR19IOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxNaW5pbWFsUmVidWlsZD50cnVlPC9NaW5pbWFsUmVidWlsZD4KKyAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8U3RydWN0TWVtYmVyQWxpZ25tZW50PkRlZmF1bHQ8L1N0cnVjdE1lbWJlckFsaWdubWVudD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlciAvPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PkVkaXRBbmRDb250aW51ZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPldzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxNb2R1bGVEZWZpbml0aW9uRmlsZT5zcnRwLmRlZjwvTW9kdWxlRGVmaW5pdGlvbkZpbGU+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPmZhbHNlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz5mYWxzZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxMaW5rVGltZUNvZGVHZW5lcmF0aW9uIC8+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgRGxsfHg2NCciPgorICAgIDxQcmVCdWlsZEV2ZW50PgorICAgICAgPE1lc3NhZ2U+Q3JlYXRpbmcgY29uZmlnLmggZnJvbSBjb25maWcuaHc8L01lc3NhZ2U+CisgICAgICA8Q29tbWFuZD5jb3B5IC9ZICIkKFByb2plY3REaXIpY29uZmlnLmh3IiAiJChQcm9qZWN0RGlyKWNyeXB0b1xpbmNsdWRlXGNvbmZpZy5oIiAmZ3Q7IE5VTDwvQ29tbWFuZD4KKyAgICA8L1ByZUJ1aWxkRXZlbnQ+CisgICAgPEN1c3RvbUJ1aWxkU3RlcD4KKyAgICAgIDxNZXNzYWdlPgorICAgICAgPC9NZXNzYWdlPgorICAgICAgPENvbW1hbmQ+CisgICAgICA8L0NvbW1hbmQ+CisgICAgPC9DdXN0b21CdWlsZFN0ZXA+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Y3J5cHRvL2luY2x1ZGU7aW5jbHVkZTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfTElCO0hBVkVfQ09ORklHX0g7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnRExMPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxTdHJ1Y3RNZW1iZXJBbGlnbm1lbnQ+RGVmYXVsdDwvU3RydWN0TWVtYmVyQWxpZ25tZW50PgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5XczJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8TW9kdWxlRGVmaW5pdGlvbkZpbGU+c3J0cC5kZWY8L01vZHVsZURlZmluaXRpb25GaWxlPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz5mYWxzZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+ZmFsc2U8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8TGlua1RpbWVDb2RlR2VuZXJhdGlvbj4KKyAgICAgIDwvTGlua1RpbWVDb2RlR2VuZXJhdGlvbj4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIERsbHxXaW4zMiciPgorICAgIDxQcmVCdWlsZEV2ZW50PgorICAgICAgPE1lc3NhZ2U+Q3JlYXRpbmcgY29uZmlnLmggZnJvbSBjb25maWcuaHc8L01lc3NhZ2U+CisgICAgICA8Q29tbWFuZD5jb3B5IC9ZICIkKFByb2plY3REaXIpY29uZmlnLmh3IiAiJChQcm9qZWN0RGlyKWNyeXB0b1xpbmNsdWRlXGNvbmZpZy5oIiAmZ3Q7IE5VTDwvQ29tbWFuZD4KKyAgICA8L1ByZUJ1aWxkRXZlbnQ+CisgICAgPEN1c3RvbUJ1aWxkU3RlcD4KKyAgICAgIDxNZXNzYWdlIC8+CisgICAgICA8Q29tbWFuZCAvPgorICAgIDwvQ3VzdG9tQnVpbGRTdGVwPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz5jcnlwdG8vaW5jbHVkZTtpbmNsdWRlOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19MSUI7SEFWRV9DT05GSUdfSDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8U3RydWN0TWVtYmVyQWxpZ25tZW50PkRlZmF1bHQ8L1N0cnVjdE1lbWJlckFsaWdubWVudD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlciAvPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPldzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxNb2R1bGVEZWZpbml0aW9uRmlsZT5zcnRwLmRlZjwvTW9kdWxlRGVmaW5pdGlvbkZpbGU+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBEbGx8eDY0JyI+CisgICAgPFByZUJ1aWxkRXZlbnQ+CisgICAgICA8TWVzc2FnZT5DcmVhdGluZyBjb25maWcuaCBmcm9tIGNvbmZpZy5odzwvTWVzc2FnZT4KKyAgICAgIDxDb21tYW5kPmNvcHkgL1kgIiQoUHJvamVjdERpciljb25maWcuaHciICIkKFByb2plY3REaXIpY3J5cHRvXGluY2x1ZGVcY29uZmlnLmgiICZndDsgTlVMPC9Db21tYW5kPgorICAgIDwvUHJlQnVpbGRFdmVudD4KKyAgICA8Q3VzdG9tQnVpbGRTdGVwPgorICAgICAgPE1lc3NhZ2U+CisgICAgICA8L01lc3NhZ2U+CisgICAgICA8Q29tbWFuZD4KKyAgICAgIDwvQ29tbWFuZD4KKyAgICA8L0N1c3RvbUJ1aWxkU3RlcD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Y3J5cHRvL2luY2x1ZGU7aW5jbHVkZTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfTElCO0hBVkVfQ09ORklHX0g7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgICAgPFN0cnVjdE1lbWJlckFsaWdubWVudD5EZWZhdWx0PC9TdHJ1Y3RNZW1iZXJBbGlnbm1lbnQ+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPldzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxNb2R1bGVEZWZpbml0aW9uRmlsZT5zcnRwLmRlZjwvTW9kdWxlRGVmaW5pdGlvbkZpbGU+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSJjcnlwdG9cY2lwaGVyXGFlcy5jIj4KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIERsbHxXaW4zMiciPkRlZmF1bHQ8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgorICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgRGxsfHg2NCciPkRlZmF1bHQ8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIERsbHxXaW4zMiciPmZhbHNlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgRGxsfHg2NCciPmZhbHNlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmcgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBEbGx8V2luMzInIj5mYWxzZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmcgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBEbGx8eDY0JyI+ZmFsc2U8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iY3J5cHRvXGNpcGhlclxhZXNfaWNtLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSJjcnlwdG9cY2lwaGVyXGNpcGhlci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iY3J5cHRvXGNpcGhlclxudWxsX2NpcGhlci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iY3J5cHRvXGhhc2hcYXV0aC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iY3J5cHRvXGhhc2hcaG1hYy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iY3J5cHRvXGhhc2hcbnVsbF9hdXRoLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSJjcnlwdG9caGFzaFxzaGExLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSJjcnlwdG9ca2VybmVsXGFsbG9jLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSJjcnlwdG9ca2VybmVsXGNyeXB0b19rZXJuZWwuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImNyeXB0b1xrZXJuZWxcZXJyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSJjcnlwdG9ca2VybmVsXGtleS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iY3J5cHRvXG1hdGhcZGF0YXR5cGVzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSJjcnlwdG9cbWF0aFxzdGF0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSJjcnlwdG9ccmVwbGF5XHJkYi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iY3J5cHRvXHJlcGxheVxyZGJ4LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSJjcnlwdG9ccmVwbGF5XHV0X3NpbS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0ic3J0cFxla3QuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9InNydHBcc3J0cC5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImNyeXB0b1xpbmNsdWRlXGFlcy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iY3J5cHRvXGluY2x1ZGVcYWVzX2NiYy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iY3J5cHRvXGluY2x1ZGVcYWVzX2ljbS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iY3J5cHRvXGluY2x1ZGVcYWxsb2MuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImNyeXB0b1xpbmNsdWRlXGF1dGguaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImNyeXB0b1xpbmNsdWRlXGNpcGhlci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iY3J5cHRvXGluY2x1ZGVcY2lwaGVyX3R5cGVzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSJjcnlwdG9caW5jbHVkZVxjb25maWcuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImNyeXB0b1xpbmNsdWRlXGNyeXB0by5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iY3J5cHRvXGluY2x1ZGVcY3J5cHRvYWxnLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSJjcnlwdG9caW5jbHVkZVxjcnlwdG9fa2VybmVsLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSJjcnlwdG9caW5jbHVkZVxjcnlwdG9fdHlwZXMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImNyeXB0b1xpbmNsdWRlXGRhdGF0eXBlcy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iY3J5cHRvXGluY2x1ZGVcZXJyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSJjcnlwdG9caW5jbHVkZVxnZjJfOC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iY3J5cHRvXGluY2x1ZGVcaG1hYy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iY3J5cHRvXGluY2x1ZGVcaW50ZWdlcnMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImNyeXB0b1xpbmNsdWRlXGtleS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iY3J5cHRvXGluY2x1ZGVcbnVsbF9hdXRoLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSJjcnlwdG9caW5jbHVkZVxudWxsX2NpcGhlci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iY3J5cHRvXGluY2x1ZGVccHJuZy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iY3J5cHRvXGluY2x1ZGVccmFuZF9zb3VyY2UuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImNyeXB0b1xpbmNsdWRlXHJkYi5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iY3J5cHRvXGluY2x1ZGVccmRieC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iY3J5cHRvXGluY2x1ZGVcc2hhMS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iY3J5cHRvXGluY2x1ZGVcc3RhdC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iaW5jbHVkZVxla3QuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImluY2x1ZGVcc3J0cC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iaW5jbHVkZVxzcnRwX3ByaXYuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImluY2x1ZGVcdXRfc2ltLmgiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxOb25lIEluY2x1ZGU9ImNvbmZpZy5odyIgLz4KKyAgICA8Tm9uZSBJbmNsdWRlPSJzcnRwLmRlZiIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9zcnRwMi52Y3hwcm9qLmZpbHRlcnMgYi9zcnRwMi52Y3hwcm9qLmZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRlMDQwZgotLS0gL2Rldi9udWxsCisrKyBiL3NydHAyLnZjeHByb2ouZmlsdGVycwpAQCAtMCwwICsxLDE4OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzXEtlcm5lbCI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57YzIzYzI3MDMtN2ExNS00YjdlLWJlMWMtMDU1NWI3ZDBmOGUxfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlc1xDaXBoZXJzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns0M2U0NWYzZi03OTVlLTRmMmEtODgwMS0zZTE5Yjc4MDFkMDd9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzXEhhc2hlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57MTFhN2JmMmEtNjcwNi00YzM1LThlOTEtZjU4YmVmMGY4NjY5fTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlc1xSZXBsYXkiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezIzNzUwMWNlLTcwNDMtNDRjNy1hODk1LWRmMmNlYWU2YzhjZH08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXNcTWF0aCI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57MmExMTU5MmEtZTQ3NC00YTUwLWJiM2EtZTRmMDM5NjMzMjU3fTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmg7aHBwO2h4eDtobTtpbmw7aW5jO3hzZDwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlJlc291cmNlIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns2N0RBNkFCNi1GODAwLTRjMDgtOEI3QS04M0JCMTIxQUFEMDF9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+cmM7aWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlO3Jlc3g7dGlmZjt0aWY7cG5nO3dhdjwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSJzcnRwXGVrdC5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSJzcnRwXHNydHAuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iY3J5cHRvXGtlcm5lbFxhbGxvYy5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXEtlcm5lbDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iY3J5cHRvXGtlcm5lbFxjcnlwdG9fa2VybmVsLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcS2VybmVsPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSJjcnlwdG9ca2VybmVsXGVyci5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXEtlcm5lbDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iY3J5cHRvXGtlcm5lbFxrZXkuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xLZXJuZWw8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImNyeXB0b1xjaXBoZXJcYWVzLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcQ2lwaGVyczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iY3J5cHRvXGNpcGhlclxhZXNfaWNtLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcQ2lwaGVyczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iY3J5cHRvXGNpcGhlclxjaXBoZXIuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xDaXBoZXJzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSJjcnlwdG9cY2lwaGVyXG51bGxfY2lwaGVyLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcQ2lwaGVyczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iY3J5cHRvXGhhc2hcYXV0aC5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXEhhc2hlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iY3J5cHRvXGhhc2hcaG1hYy5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXEhhc2hlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iY3J5cHRvXGhhc2hcbnVsbF9hdXRoLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcSGFzaGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSJjcnlwdG9caGFzaFxzaGExLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcSGFzaGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSJjcnlwdG9ccmVwbGF5XHJkYi5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlcGxheTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iY3J5cHRvXHJlcGxheVxyZGJ4LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcUmVwbGF5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSJjcnlwdG9ccmVwbGF5XHV0X3NpbS5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXFJlcGxheTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iY3J5cHRvXG1hdGhcZGF0YXR5cGVzLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcTWF0aDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iY3J5cHRvXG1hdGhcc3RhdC5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXE1hdGg8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSJjcnlwdG9caW5jbHVkZVxhZXMuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iY3J5cHRvXGluY2x1ZGVcYWVzX2NiYy5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSJjcnlwdG9caW5jbHVkZVxhZXNfaWNtLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImNyeXB0b1xpbmNsdWRlXGFsbG9jLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImNyeXB0b1xpbmNsdWRlXGF1dGguaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iY3J5cHRvXGluY2x1ZGVcY2lwaGVyLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImNyeXB0b1xpbmNsdWRlXGNpcGhlcl90eXBlcy5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSJjcnlwdG9caW5jbHVkZVxjb25maWcuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iY3J5cHRvXGluY2x1ZGVcY3J5cHRvLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImNyeXB0b1xpbmNsdWRlXGNyeXB0b19rZXJuZWwuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iY3J5cHRvXGluY2x1ZGVcY3J5cHRvX3R5cGVzLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImNyeXB0b1xpbmNsdWRlXGNyeXB0b2FsZy5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSJjcnlwdG9caW5jbHVkZVxkYXRhdHlwZXMuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iaW5jbHVkZVxla3QuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iY3J5cHRvXGluY2x1ZGVcZXJyLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImNyeXB0b1xpbmNsdWRlXGdmMl84LmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImNyeXB0b1xpbmNsdWRlXGhtYWMuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iY3J5cHRvXGluY2x1ZGVcaW50ZWdlcnMuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iY3J5cHRvXGluY2x1ZGVca2V5LmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImNyeXB0b1xpbmNsdWRlXG51bGxfYXV0aC5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSJjcnlwdG9caW5jbHVkZVxudWxsX2NpcGhlci5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSJjcnlwdG9caW5jbHVkZVxwcm5nLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImNyeXB0b1xpbmNsdWRlXHJhbmRfc291cmNlLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImNyeXB0b1xpbmNsdWRlXHJkYi5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSJjcnlwdG9caW5jbHVkZVxyZGJ4LmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImNyeXB0b1xpbmNsdWRlXHNoYTEuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iaW5jbHVkZVxzcnRwLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImluY2x1ZGVcc3J0cF9wcml2LmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImNyeXB0b1xpbmNsdWRlXHN0YXQuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iaW5jbHVkZVx1dF9zaW0uaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Tm9uZSBJbmNsdWRlPSJjb25maWcuaHciIC8+CisgICAgPE5vbmUgSW5jbHVkZT0ic3J0cC5kZWYiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L05vbmU+CisgIDwvSXRlbUdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGFibGVzL2Flc190YWJsZXMuYyBiL3RhYmxlcy9hZXNfdGFibGVzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhZTFhZTQuLjAwMDAwMDAKLS0tIGEvdGFibGVzL2Flc190YWJsZXMuYworKysgL2Rldi9udWxsCkBAIC0xLDM0NiArMCwwIEBACi0vKgotICogYWVzX3RhYmxlcy5jCi0gKiAKLSAqIGdlbmVyYXRlIHRhYmxlcyBmb3IgdGhlIEFFUyBjaXBoZXIKLSAqIAotICogRGF2aWQgQS4gTWNHcmV3Ci0gKiBDaXNjbyBTeXN0ZW1zLCBJbmMuCi0gKi8KLS8qCi0gKgkKLSAqIENvcHlyaWdodChjKSAyMDAxLTIwMDUgQ2lzY28gU3lzdGVtcywgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAKLSAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogCi0gKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgImdmMl84LmgiCi0jaW5jbHVkZSAibWF0aC5oIgotCi0KLXVuc2lnbmVkIGNoYXIgYWVzX3Nib3hbMjU2XTsKLQotdW5zaWduZWQgY2hhciBhZXNfaW52X3Nib3hbMjU2XTsKLQotdW5zaWduZWQgbG9uZyBUMFsyNTZdLCBUMVsyNTZdLCBUMlsyNTZdLCBUM1syNTZdLCBUNFsyNTZdOyAKLQotCi0jZGVmaW5lIEFFU19JTlZFUlNFX1RFU1QgMCAgLyogc2V0IHRvIDEgdG8gdGVzdCBmb3J3YXJkL2JhY2t3YXJkcyBhZXMgKi8KLQotLyogZnVuY3Rpb25zIGZvciBwcmVjb21wdXRpbmcgQUVTIHZhbHVlcyAqLwotCi0vKgotICogQVtdIGlzIHRoZSA4IHggOCBiaW5hcnkgbWF0cml4IChyZXByZXNlbnRlZCBhcyBhbiBhcnJheSBvZiBjb2x1bW5zLAotICogd2hlcmUgZWFjaCBjb2x1bW4gaXMgYW4gb2N0ZXQpIHdoaWNoIGRlZmluZXMgdGhlIGFmZmluZQotICogdHJhbnNmb3JtYXRpb24gdXNlZCBpbiB0aGUgQUVTIHN1YnN0aXR1dGlvbiB0YWJsZSAoU2VjdGlvbgotICogNC4yLjEgb2YgdGhlIHNwZWMpLgotICovCi0KLW9jdGV0X3QgQVs4XSA9IHsgMzEsIDYyLCAxMjQsIDI0OCwgMjQxLCAyMjcsIDE5OSwgMTQzIH07Ci0KLS8qCi0gKiBiIGlzIHRoZSA4IGJpdCB2ZWN0b3IgKHJlcHJlc2VudGVkIGFzIGFuIG9jdGV0KSB1c2VkIGluIHRoZSBhZmZpbmUKLSAqIHRyYW5zZm9ybSBkZXNjcmliZWQgYWJvdmUuCi0gKi8KLQotb2N0ZXRfdCBiID0gOTk7Ci0KLQotdm9pZAotYWVzX2luaXRfc2JveCgpIHsKLSAgdW5zaWduZWQgaW50IGk7Ci0gIG9jdGV0X3QgeDsKLSAgCi0gIGZvciAoaT0wOyBpIDwgMjU2OyBpKyspIHsKLSAgICB4ID0gZ2YyXzhfY29tcHV0ZV9pbnZlcnNlKChnZjJfOClpKTsKLSAgICB4ID0gQV90aW1lc194X3BsdXNfYihBLCB4LCBiKTsKLSAgICBhZXNfc2JveFtpXSA9IHg7Ci0gICAgYWVzX2ludl9zYm94W3hdID0gaTsKLSAgfQotfQotCi12b2lkCi1hZXNfY29tcHV0ZV90YWJsZXMoKSB7Ci0gIGludCBpOwotICB1aW50MzJfdCB4MSwgeDIsIHgzOwotICB2MzJfdCB0bXA7Ci0KLSAgLyogaW5pdGlhbGl6ZSBzdWJzdGl0dXRpb24gdGFibGUgKi8KLSAgYWVzX2luaXRfc2JveCgpOwotCi0gIC8qIGNvbWJpbmUgc2JveCB3aXRoIGxpbmVhciBvcGVyYXRpb25zIHRvIGZvcm0gOC1iaXQgdG8gMzItYml0IHRhYmxlcyAqLwotICBmb3IgKGk9MDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAgeDEgPSBhZXNfc2JveFtpXTsKLSAgICB4MiA9IGdmMl84X3NoaWZ0KHgxKTsKLSAgICB4MyA9IHgyIF4geDE7Ci0KLSAgICB0bXAub2N0ZXRbMF0gPSB4MjsKLSAgICB0bXAub2N0ZXRbMV0gPSB4MTsKLSAgICB0bXAub2N0ZXRbMl0gPSB4MTsKLSAgICB0bXAub2N0ZXRbM10gPSB4MzsKLSAgICBUMFtpXSA9IHRtcC52YWx1ZTsKLQotICAgIHRtcC5vY3RldFswXSA9IHgzOwotICAgIHRtcC5vY3RldFsxXSA9IHgyOwotICAgIHRtcC5vY3RldFsyXSA9IHgxOwotICAgIHRtcC5vY3RldFszXSA9IHgxOwotICAgIFQxW2ldID0gdG1wLnZhbHVlOwotICAgICAKLSAgICB0bXAub2N0ZXRbMF0gPSB4MTsKLSAgICB0bXAub2N0ZXRbMV0gPSB4MzsKLSAgICB0bXAub2N0ZXRbMl0gPSB4MjsKLSAgICB0bXAub2N0ZXRbM10gPSB4MTsKLSAgICBUMltpXSA9IHRtcC52YWx1ZTsKLQotICAgIHRtcC5vY3RldFswXSA9IHgxOwotICAgIHRtcC5vY3RldFsxXSA9IHgxOwotICAgIHRtcC5vY3RldFsyXSA9IHgzOwotICAgIHRtcC5vY3RldFszXSA9IHgyOwotICAgIFQzW2ldID0gdG1wLnZhbHVlOwotICAgICAKLSAgfQotfQotCi0KLS8qCi0gKiB0aGUgdGFibGVzIFUwLCBVMSwgVTIsIFUzIGltcGxlbWVudCB0aGUgYWVzIG9wZXJhdGlvbnMgaW52U3ViQnl0ZXMsCi0gKiBpbnZNaXhDb2x1bW5zLCBhbmQgaW52U2hpZnRSb3dzIAotICovCi0KLXVpbnQzMl90IFUwWzI1Nl0sIFUxWzI1Nl0sIFUyWzI1Nl0sIFUzWzI1Nl0sIFU0WzI1Nl07Ci0KLWV4dGVybiBvY3RldF90IGFlc19pbnZfc2JveFsyNTZdOwotCi12b2lkCi1hZXNfY29tcHV0ZV9pbnZfdGFibGVzKCkgewotICBpbnQgaTsKLSAgb2N0ZXRfdCB4LCB4ZSwgeDksIHhkLCB4YjsKLSAgdjMyX3QgdG1wOwotCi0gIC8qIGNvbWJpbmUgc2JveCB3aXRoIGxpbmVhciBvcGVyYXRpb25zIHRvIGZvcm0gOC1iaXQgdG8gMzItYml0IHRhYmxlcyAqLwotICBmb3IgKGk9MDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAgIHggPSBhZXNfaW52X3Nib3hbaV07Ci0KLSAgICAgeGUgPSBnZjJfOF9tdWx0aXBseSgweDBlLCB4KTsgICAgIAotICAgICB4OSA9IGdmMl84X211bHRpcGx5KDB4MDksIHgpOyAgICAgCi0gICAgIHhkID0gZ2YyXzhfbXVsdGlwbHkoMHgwZCwgeCk7ICAgICAKLSAgICAgeGIgPSBnZjJfOF9tdWx0aXBseSgweDBiLCB4KTsgICAgIAotCi0gICAgIHRtcC5vY3RldFswXSA9IHhlOwotICAgICB0bXAub2N0ZXRbMV0gPSB4OTsKLSAgICAgdG1wLm9jdGV0WzJdID0geGQ7Ci0gICAgIHRtcC5vY3RldFszXSA9IHhiOwotICAgICBVMFtpXSA9IHRtcC52YWx1ZTsKLQotICAgICB0bXAub2N0ZXRbMF0gPSB4YjsKLSAgICAgdG1wLm9jdGV0WzFdID0geGU7Ci0gICAgIHRtcC5vY3RldFsyXSA9IHg5OwotICAgICB0bXAub2N0ZXRbM10gPSB4ZDsKLSAgICAgVTFbaV0gPSB0bXAudmFsdWU7Ci0gICAgIAotICAgICB0bXAub2N0ZXRbMF0gPSB4ZDsKLSAgICAgdG1wLm9jdGV0WzFdID0geGI7Ci0gICAgIHRtcC5vY3RldFsyXSA9IHhlOwotICAgICB0bXAub2N0ZXRbM10gPSB4OTsKLSAgICAgVTJbaV0gPSB0bXAudmFsdWU7Ci0KLSAgICAgdG1wLm9jdGV0WzBdID0geDk7Ci0gICAgIHRtcC5vY3RldFsxXSA9IHhkOwotICAgICB0bXAub2N0ZXRbMl0gPSB4YjsKLSAgICAgdG1wLm9jdGV0WzNdID0geGU7Ci0gICAgIFUzW2ldID0gdG1wLnZhbHVlOwotCi0gICAgIHRtcC5vY3RldFswXSA9IHRtcC5vY3RldFsxXSA9IHRtcC5vY3RldFsyXSA9IHRtcC5vY3RldFszXSA9IHg7Ci0gICAgIFU0W2ldID0gdG1wLnZhbHVlOwotICAgfQotfQotCi0KLS8qCi0gKiBhZXNfdGVzdF9pbnZlcnNlKCkgcmV0dXJucyBlcnJfc3RhdHVzX29rIGlmIGFlcwotICogZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbiBhcmUgdHJ1ZSBpbnZlcnNlcyBvZiBlYWNoIG90aGVyLCBhbmQKLSAqIHJldHVybnMgZXJyX3N0YXR1c19hbGdvX2ZhaWwgb3RoZXJ3aXNlCi0gKi8KLQotI2luY2x1ZGUgImVyci5oIgotCi1lcnJfc3RhdHVzX3QKLWFlc190ZXN0X2ludmVyc2UoKTsKLQotI2RlZmluZSBUQUJMRVNfMzJCSVQgMQotCi1pbnQKLW1haW4oKSB7Ci0gIGludCBpOwotCi0gIGFlc19pbml0X3Nib3goKTsKLSAgYWVzX2NvbXB1dGVfaW52X3RhYmxlcygpOwotCi0jaWYgVEFCTEVTXzMyQklUCi0gIHByaW50ZigidWludDMyX3QgVTAgPSB7Iik7Ci0gIGZvciAoaT0wOyBpIDwgMjU2OyBpKyspIHsKLSAgICBpZiAoKGkgJSA0KSA9PSAwKQotICAgICAgcHJpbnRmKCJcbiIpOwotICAgIHByaW50ZigiMHglMGx4LCAiLCBVMFtpXSk7Ci0gIH0KLSAgcHJpbnRmKCJcbn1cbiIpOwotCi0gcHJpbnRmKCJ1aW50MzJfdCBVMSA9IHsiKTsKLSAgZm9yIChpPTA7IGkgPCAyNTY7IGkrKykgewotICAgIGlmICgoaSAlIDQpID09IDApCi0gICAgICBwcmludGYoIlxuIik7Ci0gICAgcHJpbnRmKCIweCVseCwgIiwgVTFbaV0pOwotICB9Ci0gIHByaW50ZigiXG59XG4iKTsKLQotIHByaW50ZigidWludDMyX3QgVTIgPSB7Iik7Ci0gIGZvciAoaT0wOyBpIDwgMjU2OyBpKyspIHsKLSAgICBpZiAoKGkgJSA0KSA9PSAwKQotICAgICAgcHJpbnRmKCJcbiIpOwotICAgIHByaW50ZigiMHglbHgsICIsIFUyW2ldKTsKLSAgfQotICBwcmludGYoIlxufVxuIik7Ci0KLSBwcmludGYoInVpbnQzMl90IFUzID0geyIpOwotICBmb3IgKGk9MDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAgaWYgKChpICUgNCkgPT0gMCkKLSAgICAgIHByaW50ZigiXG4iKTsKLSAgICBwcmludGYoIjB4JWx4LCAiLCBVM1tpXSk7Ci0gIH0KLSAgcHJpbnRmKCJcbn1cbiIpOwotCi0gcHJpbnRmKCJ1aW50MzJfdCBVNCA9IHsiKTsKLSBmb3IgKGk9MDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAgaWYgKChpICUgNCkgPT0gMCkKLSAgICAgIHByaW50ZigiXG4iKTsKLSAgICBwcmludGYoIjB4JWx4LCAiLCBVNFtpXSk7Ci0gIH0KLSAgcHJpbnRmKCJcbn1cbiIpOwotCi0jZWxzZQotCi0gIHByaW50ZigidWludDMyX3QgVTAgPSB7Iik7Ci0gIGZvciAoaT0wOyBpIDwgMjU2OyBpKyspIHsKLSAgICBpZiAoKGkgJSA0KSA9PSAwKQotICAgICAgcHJpbnRmKCJcbiIpOwotICAgIHByaW50ZigiMHglbHgsICIsIFUwW2ldKTsKLSAgfQotICBwcmludGYoIlxufVxuIik7Ci0KLSBwcmludGYoInVpbnQzMl90IFUxID0geyIpOwotICBmb3IgKGk9MDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAgaWYgKChpICUgNCkgPT0gMCkKLSAgICAgIHByaW50ZigiXG4iKTsKLSAgICBwcmludGYoIjB4JWx4LCAiLCBVMVtpXSk7Ci0gIH0KLSAgcHJpbnRmKCJcbn1cbiIpOwotCi0gcHJpbnRmKCJ1aW50MzJfdCBVMiA9IHsiKTsKLSAgZm9yIChpPTA7IGkgPCAyNTY7IGkrKykgewotICAgIGlmICgoaSAlIDQpID09IDApCi0gICAgICBwcmludGYoIlxuIik7Ci0gICAgcHJpbnRmKCIweCVseCwgIiwgVTJbaV0pOwotICB9Ci0gIHByaW50ZigiXG59XG4iKTsKLQotIHByaW50ZigidWludDMyX3QgVTMgPSB7Iik7Ci0gIGZvciAoaT0wOyBpIDwgMjU2OyBpKyspIHsKLSAgICBpZiAoKGkgJSA0KSA9PSAwKQotICAgICAgcHJpbnRmKCJcbiIpOwotICAgIHByaW50ZigiMHglbHgsICIsIFUzW2ldKTsKLSAgfQotICBwcmludGYoIlxufVxuIik7Ci0KLSBwcmludGYoInVpbnQzMl90IFU0ID0geyIpOwotIGZvciAoaT0wOyBpIDwgMjU2OyBpKyspIHsKLSAgICBpZiAoKGkgJSA0KSA9PSAwKQotICAgICAgcHJpbnRmKCJcbiIpOwotICAgIHByaW50ZigiMHglbHgsICIsIFU0W2ldKTsKLSAgfQotICBwcmludGYoIlxufVxuIik7Ci0KLQotI2VuZGlmIC8qIFRBQkxFU18zMkJJVCAqLwotCi0KLSNpZiBBRVNfSU5WRVJTRV9URVNUCi0gIC8qIAotICAgKiB0ZXN0IHRoYXQgYWVzX2VuY3J5cHQgYW5kIGFlc19kZWNyeXB0IGFyZSBhY3R1YWxseQotICAgKiBpbnZlcnNlcyBvZiBlYWNoIG90aGVyIAotICAgKi8KLSAgICAKLSAgcHJpbnRmKCJhZXMgaW52ZXJzZSB0ZXN0OiAiKTsKLSAgaWYgKGFlc190ZXN0X2ludmVyc2UoKSA9PSBlcnJfc3RhdHVzX29rKQotICAgIHByaW50ZigicGFzc2VkXG4iKTsKLSAgZWxzZSB7Ci0gICAgcHJpbnRmKCJmYWlsZWRcbiIpOwotICAgIGV4aXQoMSk7Ci0gIH0KLSNlbmRpZgotICAKLSAgcmV0dXJuIDA7Ci19Ci0KLSNpZiBBRVNfSU5WRVJTRV9URVNUCi0KLWVycl9zdGF0dXNfdAotYWVzX3Rlc3RfaW52ZXJzZSgpIHsKLSAgdjEyOF90IHgsIHk7Ci0gIGFlc19leHBhbmRlZF9rZXlfdCBleHBhbmRlZF9rZXksIGRlY3J5cHRfa2V5OwotICBvY3RldF90IHBsYWludGV4dFsxNl0gPSB7Ci0gICAgMHgwMCwgMHgxMSwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiwgMHg3NywKLSAgICAweDg4LCAweDk5LCAweGFhLCAweGJiLCAweGNjLCAweGRkLCAweGVlLCAweGZmIAotICB9OwotICBvY3RldF90IGtleVsxNl0gPSB7Ci0gICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgCi0gICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZgotICB9OwotICB2MTI4X3QgazsKLSAgdjEyOF9zZXRfdG9femVybygmeCk7Ci0gIAotICB2MTI4X2NvcHlfb2N0ZXRfc3RyaW5nKCZrLCBrZXkpOwotICB2MTI4X2NvcHlfb2N0ZXRfc3RyaW5nKCZ4LCBwbGFpbnRleHQpOwotICBhZXNfZXhwYW5kX2VuY3J5cHRpb25fa2V5KGssIGV4cGFuZGVkX2tleSk7Ci0gIGFlc19leHBhbmRfZGVjcnlwdGlvbl9rZXkoaywgZGVjcnlwdF9rZXkpOwotICBhZXNfZW5jcnlwdCgmeCwgZXhwYW5kZWRfa2V5KTsKLSAgYWVzX2RlY3J5cHQoJngsIGRlY3J5cHRfa2V5KTsKLSAgCi0gIC8qIGNvbXBhcmUgdG8gZXhwZWN0ZWQgdmFsdWUgdGhlbiByZXBvcnQgKi8KLSAgdjEyOF9jb3B5X29jdGV0X3N0cmluZygmeSwgcGxhaW50ZXh0KTsKLQotICBpZiAodjEyOF9pc19lcSgmeCwgJnkpKQotICAgIHJldHVybiBlcnJfc3RhdHVzX29rOwotICByZXR1cm4gZXJyX3N0YXR1c19hbGdvX2ZhaWw7Ci0gIAotfQotIAotI2VuZGlmIApkaWZmIC0tZ2l0IGEvdGVzdC9hZXNfY2FsYy5jIGIvdGVzdC9hZXNfY2FsYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmIwMzIzLi4wMDAwMDAwCi0tLSBhL3Rlc3QvYWVzX2NhbGMuYworKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKgotICogYWVzX2NhbGMuYwotICogCi0gKiBBIHNpbXBsZSBBRVMgY2FsY3VsYXRvciBmb3IgZ2VuZXJhdGluZyBBRVMgZW5jcnlwdGlvbiB2YWx1ZXMKLSAqCi0gKiBEYXZpZCBBLiBNY0dyZXcKLSAqIENpc2NvIFN5c3RlbXMsIEluYy4KLSAqLwotCi0vKgotICAKLSBFeGFtcGxlIHVzYWdlICh3aXRoIGZpcnN0IE5JU1QgRklQUyAxOTcgdGVzdCBjYXNlKToKLSAKLVtzaF0kIHRlc3QvYWVzX2NhbGMgMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYgMDAxMTIyMzM0NDU1NjY3Nzg4OTlhYWJiY2NkZGVlZmYgLXYKLSBwbGFpbnRleHQ6ICAgICAgMDAxMTIyMzM0NDU1NjY3Nzg4OTlhYWJiY2NkZGVlZmYKLSBrZXk6ICAgICAgICAgICAgMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYKLSBjaXBoZXJ0ZXh0OiAgICAgNjljNGUwZDg2YTdiMDQzMGQ4Y2RiNzgwNzBiNGM1NWEKLQotICovCi0KLSNpbmNsdWRlICJhZXMuaCIKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi12b2lkCi11c2FnZShjaGFyICpwcm9nX25hbWUpIHsKLSAgcHJpbnRmKCJ1c2FnZTogJXMgPGtleT4gPHBsYWludGV4dD4gWy12XVxuIiwgcHJvZ19uYW1lKTsKLSAgZXhpdCgyNTUpOwotfQotCi0jZGVmaW5lIEFFU19LRVlfTEVOIDE2Ci0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgewotICB2MTI4X3QgZGF0YSwga2V5OwotICBhZXNfZXhwYW5kZWRfa2V5X3QgZXhwX2tleTsKLSAgaW50IGxlbjsKLSAgaW50IHZlcmJvc2U7Ci0KLSAgaWYgKGFyZ2MgPT0gMykgewotICAgIC8qIHdlJ3JlIG5vdCBpbiB2ZXJib3NlIG1vZGUgKi8KLSAgICB2ZXJib3NlID0gMDsKLSAgfSBlbHNlIGlmIChhcmdjID09IDQpIHsKLSAgICBpZiAoc3RybmNtcChhcmd2WzNdLCAiLXYiLCAyKSA9PSAwKSB7Ci0gICAgICAvKiB3ZSdyZSBpbiB2ZXJib3NlIG1vZGUgKi8KLSAgICAgIHZlcmJvc2UgPSAxOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiB1bnJlY29nbml6ZWQgZmxhZywgY29tcGxhaW4gYW5kIGV4aXQgKi8KLSAgICAgIHVzYWdlKGFyZ3ZbMF0pOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICAvKiB3ZSd2ZSBiZWVuIGZlZCB0aGUgd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyAtIGNvbXBhaW4gYW5kIGV4aXQgKi8KLSAgICB1c2FnZShhcmd2WzBdKTsKLSAgfQotICAKLSAgLyogcmVhZCBpbiBrZXksIGNoZWNraW5nIGxlbmd0aCAqLwotICBpZiAoc3RybGVuKGFyZ3ZbMV0pID4gQUVTX0tFWV9MRU4qMikgewotICAgIGZwcmludGYoc3RkZXJyLCAKLQkgICAgImVycm9yOiB0b28gbWFueSBkaWdpdHMgaW4ga2V5ICIKLQkgICAgIihzaG91bGQgYmUgJWQgaGV4YWRlY2ltYWwgZGlnaXRzLCBmb3VuZCAldSlcbiIsCi0JICAgIEFFU19LRVlfTEVOKjIsICh1bnNpZ25lZClzdHJsZW4oYXJndlsxXSkpOwotICAgIGV4aXQoMSk7ICAgIAotICB9Ci0gIGxlbiA9IGhleF9zdHJpbmdfdG9fb2N0ZXRfc3RyaW5nKChvY3RldF90ICopJmtleSwgYXJndlsxXSwgQUVTX0tFWV9MRU4qMik7Ci0gIC8qIGNoZWNrIHRoYXQgaGV4IHN0cmluZyBpcyB0aGUgcmlnaHQgbGVuZ3RoICovCi0gIGlmIChsZW4gPCBBRVNfS0VZX0xFTioyKSB7Ci0gICAgZnByaW50ZihzdGRlcnIsIAotCSAgICAiZXJyb3I6IHRvbyBmZXcgZGlnaXRzIGluIGtleSAiCi0JICAgICIoc2hvdWxkIGJlICVkIGhleGFkZWNpbWFsIGRpZ2l0cywgZm91bmQgJWQpXG4iLAotCSAgICBBRVNfS0VZX0xFTioyLCBsZW4pOwotICAgIGV4aXQoMSk7ICAgIAotICB9IAotICAgICAgCi0gIC8qIHJlYWQgaW4gcGxhaW50ZXh0LCBjaGVja2luZyBsZW5ndGggKi8KLSAgaWYgKHN0cmxlbihhcmd2WzJdKSA+IDE2KjIpIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgCi0JICAgICJlcnJvcjogdG9vIG1hbnkgZGlnaXRzIGluIHBsYWludGV4dCAiCi0JICAgICIoc2hvdWxkIGJlICVkIGhleGFkZWNpbWFsIGRpZ2l0cywgZm91bmQgJXUpXG4iLAotCSAgICAxNioyLCAodW5zaWduZWQpc3RybGVuKGFyZ3ZbMl0pKTsKLSAgICBleGl0KDEpOyAgICAKLSAgfQotICBsZW4gPSBoZXhfc3RyaW5nX3RvX29jdGV0X3N0cmluZygob2N0ZXRfdCAqKSgmZGF0YSksIGFyZ3ZbMl0sIDE2KjIpOwotICAvKiBjaGVjayB0aGF0IGhleCBzdHJpbmcgaXMgdGhlIHJpZ2h0IGxlbmd0aCAqLwotICBpZiAobGVuIDwgMTYqMikgewotICAgIGZwcmludGYoc3RkZXJyLCAKLQkgICAgImVycm9yOiB0b28gZmV3IGRpZ2l0cyBpbiBwbGFpbnRleHQgIgotCSAgICAiKHNob3VsZCBiZSAlZCBoZXhhZGVjaW1hbCBkaWdpdHMsIGZvdW5kICVkKVxuIiwKLQkgICAgMTYqMiwgbGVuKTsKLSAgICBleGl0KDEpOyAgICAKLSAgfQotCi0gIGlmICh2ZXJib3NlKSB7Ci0gICAgLyogcHJpbnQgb3V0IHBsYWludGV4dCAqLwotICAgIHByaW50ZigicGxhaW50ZXh0Olx0JXNcbiIsIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKChvY3RldF90ICopJmRhdGEsIDE2KSk7Ci0gIH0KLQotICAvKiBlbmNyeXB0IHBsYWludGV4dCAqLwotICBhZXNfZXhwYW5kX2VuY3J5cHRpb25fa2V5KGtleSwgZXhwX2tleSk7Ci0KLSAgYWVzX2VuY3J5cHQoJmRhdGEsIGV4cF9rZXkpOwotCi0gIC8qIHdyaXRlIGNpcGhlcnRleHQgdG8gb3V0cHV0ICovCi0gIGlmICh2ZXJib3NlKSB7Ci0gICAgcHJpbnRmKCJrZXk6XHRcdCVzXG4iLCB2MTI4X2hleF9zdHJpbmcoJmtleSkpOwotICAgIHByaW50ZigiY2lwaGVydGV4dDpcdCIpOwotICB9Ci0gIHByaW50ZigiJXNcbiIsIHYxMjhfaGV4X3N0cmluZygmZGF0YSkpOwotCi0gIHJldHVybiAwOwotfQotCmRpZmYgLS1naXQgYS90ZXN0L2F1dGhfZHJpdmVyLmMgYi90ZXN0L2F1dGhfZHJpdmVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3MWYxMjcuLjAwMDAwMDAKLS0tIGEvdGVzdC9hdXRoX2RyaXZlci5jCisrKyAvZGV2L251bGwKQEAgLTEsMjAxICswLDAgQEAKLS8qCi0gKiBhdXRoX2RyaXZlci5jCi0gKgotICogYSBkcml2ZXIgZm9yIGF1dGggZnVuY3Rpb25zCi0gKgotICogRGF2aWQgQS4gTWNHcmV3Ci0gKiBDaXNjbyBTeXN0ZW1zLCBJbmMuCi0gKi8KLQotLyoKLSAqCQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUsIENpc2NvIFN5c3RlbXMsIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogCi0gKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIAotICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAotICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqLwotCi0KLSNpbmNsdWRlIDxzdGRpby5oPiAgICAvKiBmb3IgcHJpbnRmKCkgICAgICAgKi8KLSNpbmNsdWRlIDxzdGRsaWIuaD4gICAvKiBmb3IgY3J5cHRvX2FsbG9jKCkgKi8KLSNpbmNsdWRlIDx1bmlzdGQuaD4gICAvKiBmb3IgZ2V0b3B0KCkgICAgICAgKi8KLQotI2luY2x1ZGUgImF1dGguaCIKLSNpbmNsdWRlICJ0bW1odjIuaCIKLSNpbmNsdWRlICJudWxsX2F1dGguaCIKLQotI2RlZmluZSBQUklOVF9ERUJVR19EQVRBIDAKLQotZXh0ZXJuIGF1dGhfdHlwZV90IHRtbWh2MjsKLQotY29uc3QgdWludDE2X3QgbXNnMFs5XSA9IHsKLSAgMHg2MDE1LCAweGYxNDEsIDB4NWJhMSwgMHgyOWEwLCAweGY2MDQsIDB4ZDFjLCAweDJkOSwgMHhhYThhLCAweDc5MzEKLX07Ci0KLS8qIGtleTEgaXMgZm9yIFRBR19XT1JEUyA9IDIgKi8KLQotY29uc3QgdWludDE2X3Qga2V5MVs0N10gPSB7Ci0gIDB4ZTYyNywgMHg2YTAxLCAweDVlYTcsIDB4ZjI3YSwgMHhjNTM2LCAweDIxOTIsIDB4MTFiZSwgMHhlYTM1LAotICAweGRiOWQsIDB4NjNkNiwgMHhmYThhLCAweGZjNDUsIDB4ZTA4YiwgMHhkMjE2LCAweGNlZDIsIDB4Nzg1MywKLSAgMHgxYTgyLCAweDIyZjUsIDB4OTBmYiwgMHgxYzI5LCAweDcwOGUsIDB4ZDA2ZiwgMHg4MmMzLCAweGJlZTYsCi0gIDB4NGYyMSwgMHg2ZjMzLCAweDY1YzAsIDB4ZDIxMSwgMHhjMjVlLCAweDkxMzgsIDB4NGZhMywgMHg3YzFmLAotICAweDYxYWMsIDB4MzQ4OSwgMHgyOTc2LCAweDhjMTksIDB4ODI1MiwgMHhkZGJmLCAweGNhZDMsIDB4YzI4ZiwKLSAgMHg2OGQ2LCAweDU4ZGQsIDB4NTA0ZiwgMHgyYmJmLCAweDAyNzgsIDB4NzBiNywgMHhjZmNhCi19OwotCi1kb3VibGUKLWF1dGhfYml0c19wZXJfc2Vjb25kKGF1dGhfdCAqaCwgaW50IG1zZ19sZW4pOwotCi0KLXZvaWQKLXVzYWdlKGNoYXIgKnByb2dfbmFtZSkgewotICBwcmludGYoInVzYWdlOiAlcyBbIC10IHwgLXYgXVxuIiwgcHJvZ19uYW1lKTsKLSAgZXhpdCgyNTUpOwotfQotCi0jZGVmaW5lIE1BWF9NU0dfTEVOIDIwNDgKLQotaW50Ci1tYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7Ci0gIGF1dGhfdCAqYSA9IE5VTEw7Ci0gIGVycl9zdGF0dXNfdCBzdGF0dXM7Ci0gIGludCBpOwotICBjaGFyIGM7Ci0gIHVuc2lnbmVkIGRvX3RpbWluZ190ZXN0ID0gMDsKLSAgdW5zaWduZWQgZG9fdmFsaWRhdGlvbiA9IDA7Ci0KLSAgLyogcHJvY2VzcyBpbnB1dCBhcmd1bWVudHMgKi8KLSAgd2hpbGUgKDEpIHsKLSAgICBjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJ0diIpOwotICAgIGlmIChjID09IC0xKSAKLSAgICAgIGJyZWFrOwotICAgIHN3aXRjaCAoYykgewotICAgIGNhc2UgJ3QnOgotICAgICAgZG9fdGltaW5nX3Rlc3QgPSAxOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAndic6Ci0gICAgICBkb192YWxpZGF0aW9uID0gMTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICB1c2FnZShhcmd2WzBdKTsKLSAgICB9ICAgIAotICB9Ci0gIAotICBwcmludGYoImF1dGggZHJpdmVyXG5EYXZpZCBBLiBNY0dyZXdcbkNpc2NvIFN5c3RlbXMsIEluYy5cbiIpOwotCi0gIGlmICghZG9fdmFsaWRhdGlvbiAmJiAhZG9fdGltaW5nX3Rlc3QpCi0gICAgdXNhZ2UoYXJndlswXSk7Ci0KLSAgaWYgKGRvX3ZhbGlkYXRpb24pIHsKLSAgICBwcmludGYoInJ1bm5pbmcgc2VsZi10ZXN0IGZvciAlcy4uLiIsIHRtbWh2Mi5kZXNjcmlwdGlvbik7Ci0gICAgc3RhdHVzID0gdG1taHYyX2FkZF9iaWdfdGVzdCgpOwotICAgIGlmIChzdGF0dXMpIHsKLSAgICAgIHByaW50ZigidG1taHYyX2FkZF9iaWdfdGVzdCBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLCBzdGF0dXMpOwotICAgICAgZXhpdChzdGF0dXMpOwotICAgIH0gIAotICAgIHN0YXR1cyA9IGF1dGhfdHlwZV9zZWxmX3Rlc3QoJnRtbWh2Mik7Ci0gICAgaWYgKHN0YXR1cykgewotICAgICAgcHJpbnRmKCJmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLCBzdGF0dXMpOwotICAgICAgZXhpdChzdGF0dXMpOwotICAgIH0KLSAgICBwcmludGYoInBhc3NlZFxuIik7Ci0gIH0KLQotICBpZiAoZG9fdGltaW5nX3Rlc3QpIHsKLQotICAgIC8qIHRtbWh2MiB0aW1pbmcgdGVzdCAqLwotICAgIHN0YXR1cyA9IGF1dGhfdHlwZV9hbGxvYygmdG1taHYyLCAmYSwgOTQsIDQpOwotICAgIGlmIChzdGF0dXMpIHsKLSAgICAgIGZwcmludGYoc3RkZXJyLCAiY2FuJ3QgYWxsb2NhdGUgdG1taHYyXG4iKTsKLSAgICAgIGV4aXQoc3RhdHVzKTsKLSAgICB9Ci0gICAgc3RhdHVzID0gYXV0aF9pbml0KGEsIChvY3RldF90ICopa2V5MSk7Ci0gICAgaWYgKHN0YXR1cykgewotICAgICAgcHJpbnRmKCJlcnJvciBpbml0aWFsaXphaW5nIGF1dGggZnVuY3Rpb25cbiIpOwotICAgICAgZXhpdChzdGF0dXMpOwotICAgIH0KLSAgICAKLSAgICBwcmludGYoInRpbWluZyAlcyAodGFnIGxlbmd0aCAlZClcbiIsIAotCSAgIHRtbWh2Mi5kZXNjcmlwdGlvbiwgYXV0aF9nZXRfdGFnX2xlbmd0aChhKSk7Ci0gICAgZm9yIChpPTg7IGkgPD0gTUFYX01TR19MRU47IGkgKj0gMikKLSAgICAgIHByaW50ZigibXNnIGxlbjogJWRcdGdpZ2FiaXRzIHBlciBzZWNvbmQ6ICVmXG4iLAotCSAgICAgaSwgYXV0aF9iaXRzX3Blcl9zZWNvbmQoYSwgaSkgLyAxRTkpOwotCi0gICAgc3RhdHVzID0gYXV0aF9kZWFsbG9jKGEpOwotICAgIGlmIChzdGF0dXMpIHsKLSAgICAgIHByaW50ZigiZXJyb3IgZGVhbGxvY2F0aW5nIGF1dGggZnVuY3Rpb25cbiIpOwotICAgICAgZXhpdChzdGF0dXMpOwotICAgIH0KLSAgICAKLSAgfQotCi0gIHJldHVybiAwOwotfQotCi0jZGVmaW5lIE5VTV9UUklBTFMgMTAwMDAwCi0KLSNpbmNsdWRlIDx0aW1lLmg+Ci0KLWRvdWJsZQotYXV0aF9iaXRzX3Blcl9zZWNvbmQoYXV0aF90ICphLCBpbnQgbXNnX2xlbl9vY3RldHMpIHsKLSAgaW50IGk7Ci0gIGNsb2NrX3QgdGltZXI7Ci0gIG9jdGV0X3QgKnJlc3VsdDsKLSAgaW50IG1zZ19sZW4gPSAobXNnX2xlbl9vY3RldHMgKyAxKS8yOwotICB1aW50MTZfdCAqbXNnX3N0cmluZzsgCi0KLSAgLyogY3JlYXRlIHJhbmRvbSBtZXNzYWdlICovCi0gIG1zZ19zdHJpbmcgPSAodWludDE2X3QgKikgY3J5cHRvX2FsbG9jKG1zZ19sZW5fb2N0ZXRzKTsKLSAgaWYgKG1zZ19zdHJpbmcgPT0gTlVMTCkKLSAgICByZXR1cm4gMC4wOyAvKiBpbmRpY2F0ZSBmYWlsdXJlICovICAKLSAgZm9yIChpPTA7IGkgPCBtc2dfbGVuOyBpKyspIAotICAgIG1zZ19zdHJpbmdbaV0gPSAodWludDE2X3QpIHJhbmRvbSgpOwotCi0gIC8qIGFsbG9jYXRlIHRlbXBvcmFyeSBzdG9yYWdlIGZvciBhdXRoZW50aWNhdGlvbiB0YWcgKi8KLSAgcmVzdWx0ID0gY3J5cHRvX2FsbG9jKGF1dGhfZ2V0X3RhZ19sZW5ndGgoYSkpOwotICBpZiAocmVzdWx0ID09IE5VTEwpIHsKLSAgICBmcmVlKG1zZ19zdHJpbmcpOwotICAgIHJldHVybiAwLjA7IC8qIGluZGljYXRlIGZhaWx1cmUgKi8gIAotICB9Ci0gIAotICB0aW1lciA9IGNsb2NrKCk7Ci0gIGZvciAoaT0wOyBpIDwgTlVNX1RSSUFMUzsgaSsrKSB7Ci0gICAgYXV0aF9jb21wdXRlKGEsIChvY3RldF90ICopbXNnX3N0cmluZywgbXNnX2xlbl9vY3RldHMsIChvY3RldF90ICopcmVzdWx0KTsKLSAgfQotICB0aW1lciA9IGNsb2NrKCkgLSB0aW1lcjsKLQotICBmcmVlKG1zZ19zdHJpbmcpOwotICBmcmVlKHJlc3VsdCk7Ci0gIAotICByZXR1cm4gKGRvdWJsZSkgTlVNX1RSSUFMUyAqIDggKiBtc2dfbGVuX29jdGV0cyAqIENMT0NLU19QRVJfU0VDIC8gdGltZXI7Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvdGVzdC9jaXBoZXJfZHJpdmVyLmMgYi90ZXN0L2NpcGhlcl9kcml2ZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFhZWQyMS4uMDAwMDAwMAotLS0gYS90ZXN0L2NpcGhlcl9kcml2ZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDQ4NCArMCwwIEBACi0vKgotICogY2lwaGVyX2RyaXZlci5jCi0gKgotICogQSBkcml2ZXIgZm9yIHRoZSBnZW5lcmljIGNpcGhlciB0eXBlCi0gKgotICogRGF2aWQgQS4gTWNHcmV3Ci0gKiBDaXNjbyBTeXN0ZW1zLCBJbmMuCi0gKi8KLQotLyoKLSAqCQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUsIENpc2NvIFN5c3RlbXMsIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogCi0gKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIAotICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAotICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4gICAgICAgICAgIC8qIGZvciBwcmludGYoKSAqLwotI2luY2x1ZGUgPHN0ZGxpYi5oPiAgICAgICAgICAvKiBmb3IgcmFuZG9tKCkgKi8KLSNpbmNsdWRlIDxzdHJpbmcuaD4gICAgICAgICAgLyogZm9yIG1lbXNldCgpICovCi0jaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgICAgIC8qIGZvciBnZXRvcHQoKSAqLwotI2luY2x1ZGUgImNpcGhlci5oIgotI2luY2x1ZGUgImFlc19pY20uaCIKLSNpbmNsdWRlICJudWxsX2NpcGhlci5oIgotCi0jZGVmaW5lIFBSSU5UX0RFQlVHIDAKLQotdm9pZAotY2lwaGVyX2RyaXZlcl90ZXN0X3Rocm91Z2hwdXQoY2lwaGVyX3QgKmMpOwotCi1lcnJfc3RhdHVzX3QKLWNpcGhlcl9kcml2ZXJfc2VsZl90ZXN0KGNpcGhlcl90eXBlX3QgKmN0KTsKLQotCi0vKgotICogY2lwaGVyX2RyaXZlcl90ZXN0X2J1ZmZlcmluZyhjdCkgdGVzdHMgdGhlIGNpcGhlcidzIG91dHB1dAotICogYnVmZmVyaW5nIGZvciBjb3JyZWN0bmVzcyBieSBjaGVja2luZyB0aGUgY29uc2lzdGVuY3kgb2Ygc3VjY2VzaXZlCi0gKiBjYWxscwotICovCi0KLWVycl9zdGF0dXNfdAotY2lwaGVyX2RyaXZlcl90ZXN0X2J1ZmZlcmluZyhjaXBoZXJfdCAqYyk7Ci0KLQotLyoKLSAqIGZ1bmN0aW9ucyBmb3IgdGVzdGluZyBjaXBoZXIgY2FjaGUgdGhyYXNoCi0gKi8KLWVycl9zdGF0dXNfdAotY2lwaGVyX2RyaXZlcl90ZXN0X2FycmF5X3Rocm91Z2hwdXQoY2lwaGVyX3R5cGVfdCAqY3QsIAotCQkJCSAgICBpbnQga2xlbiwgaW50IG51bV9jaXBoZXIpOwotCi12b2lkCi1jaXBoZXJfYXJyYXlfdGVzdF90aHJvdWdocHV0KGNpcGhlcl90ICpjYVtdLCBpbnQgbnVtX2NpcGhlcik7Ci0KLWRvdWJsZQotY2lwaGVyX2FycmF5X2JpdHNfcGVyX3NlY29uZChjaXBoZXJfdCAqY2lwaGVyX2FycmF5W10sIGludCBudW1fY2lwaGVyLCAKLQkJCSAgICAgaW50IG9jdGV0c19pbl9idWZmZXIsIGludCBudW1fdHJpYWxzKTsKLQotZXJyX3N0YXR1c190Ci1jaXBoZXJfYXJyYXlfZGVsZXRlKGNpcGhlcl90ICpjaXBoZXJfYXJyYXlbXSwgaW50IG51bV9jaXBoZXIpOwotCi1lcnJfc3RhdHVzX3QKLWNpcGhlcl9hcnJheV9hbGxvY19pbml0KGNpcGhlcl90ICoqKmNpcGhlcl9hcnJheSwgaW50IG51bV9jaXBoZXJzLAotCQkJY2lwaGVyX3R5cGVfdCAqY3R5cGUsIGludCBrbGVuKTsKLQotdm9pZAotdXNhZ2UoY2hhciAqcHJvZ19uYW1lKSB7Ci0gIHByaW50ZigidXNhZ2U6ICVzIFsgLXQgfCAtdiB8IC1hIF1cbiIsIHByb2dfbmFtZSk7Ci0gIGV4aXQoMjU1KTsKLX0KLQotdm9pZAotY2hlY2tfc3RhdHVzKGVycl9zdGF0dXNfdCBzKSB7Ci0gIGlmIChzKSB7Ci0gICAgcHJpbnRmKCJlcnJvciAoY29kZSAlZClcbiIsIHMpOwotICAgIGV4aXQocyk7Ci0gIH0KLSAgcmV0dXJuOwotfQotCi0vKgotICogbnVsbF9jaXBoZXIgYW5kIGFlc19pY20gYXJlIHRoZSBjaXBoZXIgbWV0YS1vYmplY3RzIGRlZmluZWQKLSAqIGluIHRoZSBmaWxlcyBpbiBjcnlwdG8vY2lwaGVyIHN1YmRpcmVjdG9yeS4gIHRoZXNlIGFyZSBkZWNsYXJlZAotICogZXh0ZXJuYWwgc28gdGhhdCB3ZSBjYW4gdXNlIHRoZXNlIGNpcGhlciB0eXBlcyBoZXJlCi0gKi8KLQotZXh0ZXJuIGNpcGhlcl90eXBlX3QgbnVsbF9jaXBoZXI7Ci1leHRlcm4gY2lwaGVyX3R5cGVfdCBhZXNfaWNtOwotCi1pbnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgewotICBjaXBoZXJfdCAqYyA9IE5VTEw7Ci0gIGVycl9zdGF0dXNfdCBzdGF0dXM7Ci0gIHVuc2lnbmVkIGNoYXIgdGVzdF9rZXlbMjBdID0gewotICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0gICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwKLSAgICAweDEwLCAweDExLCAweDEyLCAweDEzCi0gIH07Ci0gIGNoYXIgcTsKLSAgdW5zaWduZWQgZG9fdGltaW5nX3Rlc3QgPSAwOwotICB1bnNpZ25lZCBkb192YWxpZGF0aW9uID0gMDsKLSAgdW5zaWduZWQgZG9fYXJyYXlfdGltaW5nX3Rlc3QgPSAwOwotCi0gIC8qIHByb2Nlc3MgaW5wdXQgYXJndW1lbnRzICovCi0gIHdoaWxlICgxKSB7Ci0gICAgcSA9IGdldG9wdChhcmdjLCBhcmd2LCAidHZhIik7Ci0gICAgaWYgKHEgPT0gLTEpIAotICAgICAgYnJlYWs7Ci0gICAgc3dpdGNoIChxKSB7Ci0gICAgY2FzZSAndCc6Ci0gICAgICBkb190aW1pbmdfdGVzdCA9IDE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICd2JzoKLSAgICAgIGRvX3ZhbGlkYXRpb24gPSAxOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnYSc6Ci0gICAgICBkb19hcnJheV90aW1pbmdfdGVzdCA9IDE7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgdXNhZ2UoYXJndlswXSk7Ci0gICAgfSAgICAKLSAgfQotICAgCi0gIHByaW50ZigiY2lwaGVyIHRlc3QgZHJpdmVyXG4iCi0JICJEYXZpZCBBLiBNY0dyZXdcbiIKLQkgIkNpc2NvIFN5c3RlbXMsIEluYy5cbiIpOwotCi0gIGlmICghZG9fdmFsaWRhdGlvbiAmJiAhZG9fdGltaW5nX3Rlc3QgJiYgIWRvX2FycmF5X3RpbWluZ190ZXN0KQotICAgIHVzYWdlKGFyZ3ZbMF0pOwotCi0gICAvKiBhcnJ5IHRpbWluZyAoY2FjaGUgdGhyYXNoKSB0ZXN0ICovCi0gIGlmIChkb19hcnJheV90aW1pbmdfdGVzdCkgewotICAgIGludCBtYXhfbnVtX2NpcGhlciA9IDEgPDwgMTY7ICAgLyogbnVtYmVyIG9mIGNpcGhlcnMgaW4gY2lwaGVyX2FycmF5ICovCi0gICAgaW50IG51bV9jaXBoZXI7Ci0gICAgCi0gICAgZm9yIChudW1fY2lwaGVyPTE7IG51bV9jaXBoZXIgPCBtYXhfbnVtX2NpcGhlcjsgbnVtX2NpcGhlciAqPTgpCi0gICAgICBjaXBoZXJfZHJpdmVyX3Rlc3RfYXJyYXlfdGhyb3VnaHB1dCgmbnVsbF9jaXBoZXIsIDAsIG51bV9jaXBoZXIpOyAKLQotICAgIGZvciAobnVtX2NpcGhlcj0xOyBudW1fY2lwaGVyIDwgbWF4X251bV9jaXBoZXI7IG51bV9jaXBoZXIgKj04KQotICAgICAgY2lwaGVyX2RyaXZlcl90ZXN0X2FycmF5X3Rocm91Z2hwdXQoJmFlc19pY20sIDMwLCBudW1fY2lwaGVyKTsgCi0gCi0gIH0KLQotICBpZiAoZG9fdmFsaWRhdGlvbikgewotICAgIGNpcGhlcl9kcml2ZXJfc2VsZl90ZXN0KCZudWxsX2NpcGhlcik7Ci0gICAgY2lwaGVyX2RyaXZlcl9zZWxmX3Rlc3QoJmFlc19pY20pOwotICB9Ci0KLSAgLyogZG8gdGltaW5nIGFuZC9vciBidWZmZXJfdGVzdCBvbiBudWxsX2NpcGhlciAqLwotICBzdGF0dXMgPSBjaXBoZXJfdHlwZV9hbGxvYygmbnVsbF9jaXBoZXIsICZjLCAwKTsgCi0gIGNoZWNrX3N0YXR1cyhzdGF0dXMpOwotCi0gIHN0YXR1cyA9IGNpcGhlcl9pbml0KGMsIE5VTEwsIGRpcmVjdGlvbl9hbnkpOwotICBjaGVja19zdGF0dXMoc3RhdHVzKTsKLQotICBpZiAoZG9fdGltaW5nX3Rlc3QpIAotICAgIGNpcGhlcl9kcml2ZXJfdGVzdF90aHJvdWdocHV0KGMpOwotICBpZiAoZG9fdmFsaWRhdGlvbikgewotICAgIHN0YXR1cyA9IGNpcGhlcl9kcml2ZXJfdGVzdF9idWZmZXJpbmcoYyk7Ci0gICAgY2hlY2tfc3RhdHVzKHN0YXR1cyk7Ci0gIH0KLSAgc3RhdHVzID0gY2lwaGVyX2RlYWxsb2MoYyk7Ci0gIGNoZWNrX3N0YXR1cyhzdGF0dXMpOwotICAKLQotICAvKiBydW4gdGhlIHRocm91Z2hwdXQgdGVzdCBvbiB0aGUgYWVzX2ljbSBjaXBoZXIgKi8KLSAgICBzdGF0dXMgPSBjaXBoZXJfdHlwZV9hbGxvYygmYWVzX2ljbSwgJmMsIDMwKTsgIAotICAgIGlmIChzdGF0dXMpIHsKLSAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3I6IGNhbid0IGFsbG9jYXRlIGNpcGhlclxuIik7Ci0gICAgICBleGl0KHN0YXR1cyk7Ci0gICAgfQotCi0gICAgc3RhdHVzID0gY2lwaGVyX2luaXQoYywgdGVzdF9rZXksIGRpcmVjdGlvbl9hbnkpOwotICAgIGNoZWNrX3N0YXR1cyhzdGF0dXMpOwotCi0gICAgaWYgKGRvX3RpbWluZ190ZXN0KQotICAgICAgY2lwaGVyX2RyaXZlcl90ZXN0X3Rocm91Z2hwdXQoYyk7Ci0gICAgCi0gICAgaWYgKGRvX3ZhbGlkYXRpb24pIHsKLSAgICAgIHN0YXR1cyA9IGNpcGhlcl9kcml2ZXJfdGVzdF9idWZmZXJpbmcoYyk7Ci0gICAgICBjaGVja19zdGF0dXMoc3RhdHVzKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdHVzID0gY2lwaGVyX2RlYWxsb2MoYyk7Ci0gICAgY2hlY2tfc3RhdHVzKHN0YXR1cyk7Ci0gIAotICByZXR1cm4gMDsKLX0KLQotdm9pZAotY2lwaGVyX2RyaXZlcl90ZXN0X3Rocm91Z2hwdXQoY2lwaGVyX3QgKmMpIHsKLSAgaW50IGk7Ci0gIGludCBtaW5fZW5jX2xlbiA9IDMyOyAgICAgCi0gIGludCBtYXhfZW5jX2xlbiA9IDIwNDg7ICAgLyogc2hvdWxkIGJlIGEgcG93ZXIgb2YgdHdvICovCi0gIGludCBudW1fdHJpYWxzID0gMTAwMDAwOyAgCi0gIAotICBwcmludGYoInRpbWluZyAlcyB0aHJvdWdocHV0OlxuIiwgYy0+dHlwZS0+ZGVzY3JpcHRpb24pOwotICBmZmx1c2goc3Rkb3V0KTsKLSAgZm9yIChpPW1pbl9lbmNfbGVuOyBpIDw9IG1heF9lbmNfbGVuOyBpID0gaSAqIDIpCi0gICAgcHJpbnRmKCJtc2cgbGVuOiAlZFx0Z2lnYWJpdHMgcGVyIHNlY29uZDogJWZcbiIsCi0JICAgaSwgY2lwaGVyX2JpdHNfcGVyX3NlY29uZChjLCBpLCBudW1fdHJpYWxzKSAvIDFlOSk7Ci0KLX0KLQotZXJyX3N0YXR1c190Ci1jaXBoZXJfZHJpdmVyX3NlbGZfdGVzdChjaXBoZXJfdHlwZV90ICpjdCkgewotICBlcnJfc3RhdHVzX3Qgc3RhdHVzOwotICAKLSAgcHJpbnRmKCJydW5uaW5nIGNpcGhlciBzZWxmLXRlc3QgZm9yICVzLi4uIiwgY3QtPmRlc2NyaXB0aW9uKTsKLSAgc3RhdHVzID0gY2lwaGVyX3R5cGVfc2VsZl90ZXN0KGN0KTsKLSAgaWYgKHN0YXR1cykgewotICAgIHByaW50ZigiZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgc3RhdHVzKTsKLSAgICBleGl0KHN0YXR1cyk7Ci0gIH0KLSAgcHJpbnRmKCJwYXNzZWRcbiIpOwotICAKLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7Ci19Ci0KLS8qCi0gKiBjaXBoZXJfZHJpdmVyX3Rlc3RfYnVmZmVyaW5nKGN0KSB0ZXN0cyB0aGUgY2lwaGVyJ3Mgb3V0cHV0Ci0gKiBidWZmZXJpbmcgZm9yIGNvcnJlY3RuZXNzIGJ5IGNoZWNraW5nIHRoZSBjb25zaXN0ZW5jeSBvZiBzdWNjZXNpdmUKLSAqIGNhbGxzCi0gKi8KLQotZXJyX3N0YXR1c190Ci1jaXBoZXJfZHJpdmVyX3Rlc3RfYnVmZmVyaW5nKGNpcGhlcl90ICpjKSB7Ci0gIGludCBpLCBqLCBsZW4sIG51bV90cmlhbHMgPSAxMDAwOwotICBpbnQgYnVmbGVuID0gMTAyNDsKLSAgb2N0ZXRfdCBidWZmZXIwW2J1Zmxlbl0sIGJ1ZmZlcjFbYnVmbGVuXSwgKmN1cnJlbnQsICplbmQ7Ci0gIG9jdGV0X3QgaWR4WzE2XSA9IHsgCi0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgCi0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgzNAotICB9OwotICBlcnJfc3RhdHVzX3Qgc3RhdHVzOwotICAKLSAgcHJpbnRmKCJ0ZXN0aW5nIG91dHB1dCBidWZmZXJpbmcgZm9yIGNpcGhlciAlcy4uLiIsCi0JIGMtPnR5cGUtPmRlc2NyaXB0aW9uKTsKLQotICBmb3IgKGk9MDsgaSA8IG51bV90cmlhbHM7IGkrKykgewotCi0gICAvKiBzZXQgYnVmZmVycyB0byB6ZXJvICovCi0gICAgZm9yIChqPTA7IGogPCBidWZsZW47IGorKykgCi0gICAgICBidWZmZXIwW2pdID0gYnVmZmVyMVtqXSA9IDA7Ci0gICAgCi0gICAgLyogaW5pdGlhbGl6ZSBjaXBoZXIgICovCi0gICAgc3RhdHVzID0gY2lwaGVyX3NldF9pdihjLCBpZHgpOwotICAgIGlmIChzdGF0dXMpCi0gICAgICByZXR1cm4gc3RhdHVzOwotCi0gICAgLyogZ2VuZXJhdGUgJ3JlZmVyZW5jZScgdmFsdWUgYnkgZW5jcnlwdGluZyBhbGwgYXQgb25jZSAqLwotICAgIHN0YXR1cyA9IGNpcGhlcl9lbmNyeXB0KGMsIGJ1ZmZlcjAsICZidWZsZW4pOwotICAgIGlmIChzdGF0dXMpCi0gICAgICByZXR1cm4gc3RhdHVzOwotCi0gICAgLyogcmUtaW5pdGlhbGl6ZSBjaXBoZXIgKi8KLSAgICBzdGF0dXMgPSBjaXBoZXJfc2V0X2l2KGMsIGlkeCk7Ci0gICAgaWYgKHN0YXR1cykKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgCi0gICAgLyogbm93IGxvb3Agb3ZlciBzaG9ydCBsZW5ndGhzIHVudGlsIGJ1ZmZlcjEgaXMgZW5jcnlwdGVkICovCi0gICAgY3VycmVudCA9IGJ1ZmZlcjE7Ci0gICAgZW5kID0gYnVmZmVyMSArIGJ1ZmxlbjsKLSAgICB3aGlsZSAoY3VycmVudCA8IGVuZCkgewotCi0gICAgICAvKiBjaG9vc2UgYSBzaG9ydCBsZW5ndGggKi8KLSAgICAgIGxlbiA9IHJhbmRvbSgpICYgMHgwMWY7Ci0KLSAgICAgIC8qIG1ha2Ugc3VyZSB0aGF0IGxlbiBkb2Vzbid0IGNhdXNlIHVzIHRvIG92ZXJyZWFjaCB0aGUgYnVmZmVyICovCi0gICAgICBpZiAoY3VycmVudCArIGxlbiA+IGVuZCkKLQlsZW4gPSBlbmQgLSBjdXJyZW50OwotCi0gICAgICBzdGF0dXMgPSBjaXBoZXJfZW5jcnlwdChjLCBjdXJyZW50LCAmbGVuKTsKLSAgICAgIGlmIChzdGF0dXMpIAotCXJldHVybiBzdGF0dXM7Ci0gICAgICAKLSAgICAgIC8qIGFkdmFuY2UgcG9pbnRlciBpbnRvIGJ1ZmZlcjEgdG8gcmVmbGVjdCBlbmNyeXB0aW9uICovCi0gICAgICBjdXJyZW50ICs9IGxlbjsKLSAgICAgIAotICAgICAgLyogaWYgYnVmZmVyMSBpcyBhbGwgZW5jcnlwdGVkLCBicmVhayBvdXQgb2YgbG9vcCAqLwotICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kKQotCWJyZWFrOwotICAgIH0KLQotICAgIC8qIGNvbXBhcmUgYnVmZmVycyAqLwotICAgIGZvciAoaj0wOyBqIDwgYnVmbGVuOyBqKyspCi0gICAgICBpZiAoYnVmZmVyMFtqXSAhPSBidWZmZXIxW2pdKSB7Ci0jaWYgUFJJTlRfREVCVUcKLQlwcmludGYoInRlc3QgY2FzZSAlZCBmYWlsZWQgYXQgYnl0ZSAlZFxuIiwgaSwgaik7Ci0JcHJpbnRmKCJjb21wdXRlZDogJXNcbiIsIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKGJ1ZmZlcjEsIGJ1ZmxlbikpOwotCXByaW50ZigiZXhwZWN0ZWQ6ICVzXG4iLCBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhidWZmZXIwLCBidWZsZW4pKTsKLSNlbmRpZiAKLQlyZXR1cm4gZXJyX3N0YXR1c19hbGdvX2ZhaWw7Ci0gICAgICB9Ci0gIH0KLSAgCi0gIHByaW50ZigicGFzc2VkXG4iKTsKLQotICByZXR1cm4gZXJyX3N0YXR1c19vazsKLX0KLQotCi0vKgotICogVGhlIGZ1bmN0aW9uIGNpcGhlcl90ZXN0X3Rocm91Z2hwdXRfYXJyYXkoKSB0ZXN0cyB0aGUgZWZmZWN0IG9mIENQVQotICogY2FjaGUgdGhyYXNoIG9uIGNpcGhlciB0aHJvdWdocHV0LiAgCi0gKgotICogY2lwaGVyX2FycmF5X2FsbG9jX2luaXQoY3R5cGUsIGFycmF5LCBudW1fY2lwaGVycykgY3JlYXRlcyBhbiBhcnJheQotICogb2YgY2lwaGVyX3Qgb2YgdHlwZSBjdHlwZQotICovCi0KLWVycl9zdGF0dXNfdAotY2lwaGVyX2FycmF5X2FsbG9jX2luaXQoY2lwaGVyX3QgKioqY2EsIGludCBudW1fY2lwaGVycywKLQkJCWNpcGhlcl90eXBlX3QgKmN0eXBlLCBpbnQga2xlbikgewotICBpbnQgaSwgajsKLSAgZXJyX3N0YXR1c190IHN0YXR1czsKLSAgb2N0ZXRfdCAqa2V5OwotICBjaXBoZXJfdCAqKmNpcGhlcl9hcnJheTsKLQotICAvKiBhbGxvY2F0ZSBhcnJheSBvZiBwb2ludGVycyB0byBjaXBoZXJzICovCi0gIGNpcGhlcl9hcnJheSA9IChjaXBoZXJfdCAqKikgbWFsbG9jKHNpemVvZihjaXBoZXJfdCAqKSAqIG51bV9jaXBoZXJzKTsKLSAgaWYgKGNpcGhlcl9hcnJheSA9PSBOVUxMKQotICAgIHJldHVybiBlcnJfc3RhdHVzX2FsbG9jX2ZhaWw7Ci0KLSAgLyogc2V0IGNhIHRvIGxvY2F0aW9uIG9mIGNpcGhlcl9hcnJheSAqLwotICAqY2EgPSBjaXBoZXJfYXJyYXk7Ci0KLSAgLyogYWxsb2NhdGUga2V5ICovCi0gIGtleSA9IGNyeXB0b19hbGxvYyhrbGVuKTsKLSAgaWYgKGtleSA9PSBOVUxMKSB7Ci0gICAgZnJlZShjaXBoZXJfYXJyYXkpOwotICAgIHJldHVybiBlcnJfc3RhdHVzX2FsbG9jX2ZhaWw7Ci0gIH0KLSAgCi0gIC8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGFycmF5IG9mIGNpcGhlcnMgKi8KLSAgZm9yIChpPTA7IGkgPCBudW1fY2lwaGVyczsgaSsrKSB7Ci0KLSAgICAvKiBhbGxvY2F0ZSBjaXBoZXIgKi8KLSAgICBzdGF0dXMgPSBjaXBoZXJfdHlwZV9hbGxvYyhjdHlwZSwgY2lwaGVyX2FycmF5LCBrbGVuKTsKLSAgICBpZiAoc3RhdHVzKQotICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAKLSAgICAvKiBnZW5lcmF0ZSByYW5kb20ga2V5IGFuZCBpbml0aWFsaXplIGNpcGhlciAqLwotICAgIGZvciAoaj0wOyBqIDwga2xlbjsgaisrKQotICAgICAga2V5W2pdID0gKG9jdGV0X3QpIHJhbmRvbSgpOwotICAgIHN0YXR1cyA9IGNpcGhlcl9pbml0KCpjaXBoZXJfYXJyYXksIGtleSwgZGlyZWN0aW9uX2FueSk7Ci0gICAgaWYgKHN0YXR1cykKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0KLS8qICAgICBwcmludGYoIiVkdGggY2lwaGVyIGlzIGF0ICVwXG4iLCBpLCAqY2lwaGVyX2FycmF5KTsgKi8KLS8qICAgICBwcmludGYoIiVkdGggY2lwaGVyIGRlc2NyaXB0aW9uOiAlc1xuIiwgaSwgICovCi0vKiAJICAgKCpjaXBoZXJfYXJyYXkpLT50eXBlLT5kZXNjcmlwdGlvbik7ICovCi0gICAgCi0gICAgLyogYWR2YW5jZSBjaXBoZXIgYXJyYXkgcG9pbnRlciAqLwotICAgIGNpcGhlcl9hcnJheSsrOwotICB9Ci0KLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7Ci19Ci0KLWVycl9zdGF0dXNfdAotY2lwaGVyX2FycmF5X2RlbGV0ZShjaXBoZXJfdCAqY2lwaGVyX2FycmF5W10sIGludCBudW1fY2lwaGVyKSB7Ci0gIGludCBpOwotICAKLSAgZm9yIChpPTA7IGkgPCBudW1fY2lwaGVyOyBpKyspIHsKLSAgICBjaXBoZXJfZGVhbGxvYyhjaXBoZXJfYXJyYXlbaV0pOwotICB9Ci0KLSAgZnJlZShjaXBoZXJfYXJyYXkpOwotICAKLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7Ci19Ci0KLQotLyoKLSAqIGNpcGhlcl9hcnJheV9iaXRzX3Blcl9zZWNvbmQoYywgbCwgdCkgY29tcHV0ZXMgKGFuIGVzdGltYXRlIG9mKSB0aGUKLSAqIG51bWJlciBvZiBiaXRzIHRoYXQgYSBjaXBoZXIgaW1wbGVtZW50YXRpb24gY2FuIGVuY3J5cHQgaW4gYSBzZWNvbmQKLSAqIHdoZW4gZGlzdGluY3Qga2V5cyBhcmUgdXNlZCB0byBlbmNyeXB0IGRpc3RpbmN0IG1lc3NhZ2VzCi0gKiAKLSAqIGMgaXMgYSBjaXBoZXIgKHdoaWNoIE1VU1QgYmUgYWxsb2NhdGVkIGFuIGluaXRpYWxpemVkIGFscmVhZHkpLCBsCi0gKiBpcyB0aGUgbGVuZ3RoIGluIG9jdGV0cyBvZiB0aGUgdGVzdCBkYXRhIHRvIGJlIGVuY3J5cHRlZCwgYW5kIHQgaXMKLSAqIHRoZSBudW1iZXIgb2YgdHJpYWxzCi0gKgotICogaWYgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQsIHRoZSB2YWx1ZSAwLjAgaXMgcmV0dXJuZWQKLSAqLwotCi0jaW5jbHVkZSA8dGltZS5oPgotCi1kb3VibGUKLWNpcGhlcl9hcnJheV9iaXRzX3Blcl9zZWNvbmQoY2lwaGVyX3QgKmNpcGhlcl9hcnJheVtdLCBpbnQgbnVtX2NpcGhlciwgCi0JCQkgICAgIGludCBvY3RldHNfaW5fYnVmZmVyLCBpbnQgbnVtX3RyaWFscykgewotICBpbnQgaTsKLSAgdjEyOF90IG5vbmNlOwotICBjbG9ja190IHRpbWVyOwotICB1bnNpZ25lZCBjaGFyICplbmNfYnVmOwotICBpbnQgY2lwaGVyX2luZGV4ID0gMDsKLQotCi0gIGVuY19idWYgPSBjcnlwdG9fYWxsb2Mob2N0ZXRzX2luX2J1ZmZlcik7Ci0gIGlmIChlbmNfYnVmID09IE5VTEwpCi0gICAgcmV0dXJuIDAuMDsgIC8qIGluZGljYXRlIGJhZCBwYXJhbWV0ZXJzIGJ5IHJldHVybmluZyBudWxsICovCi0gIAotICAvKiB0aW1lIHJlcGVhdGVkIHRyaWFscyAqLwotICB2MTI4X3NldF90b196ZXJvKCZub25jZSk7Ci0gIHRpbWVyID0gY2xvY2soKTsKLSAgZm9yKGk9MDsgaSA8IG51bV90cmlhbHM7IGkrKywgbm9uY2UudjMyWzNdID0gaSkgewotCi0gICAgLyogY2hvb3NlIGEgY2lwaGVyIGF0IHJhbmRvbSBmcm9tIHRoZSBhcnJheSovCi0gICAgY2lwaGVyX2luZGV4ID0gKCooKHVpbnQzMl90ICopZW5jX2J1ZikpICUgbnVtX2NpcGhlcjsKLQotICAgIC8qIGVuY3J5cHQgYnVmZmVyIHdpdGggY2lwaGVyICovCi0gICAgY2lwaGVyX3NldF9pdihjaXBoZXJfYXJyYXlbY2lwaGVyX2luZGV4XSwgJm5vbmNlKTsKLSAgICBjaXBoZXJfZW5jcnlwdChjaXBoZXJfYXJyYXlbY2lwaGVyX2luZGV4XSwgZW5jX2J1ZiwgJm9jdGV0c19pbl9idWZmZXIpOwotICB9Ci0gIHRpbWVyID0gY2xvY2soKSAtIHRpbWVyOwotCi0gIGZyZWUoZW5jX2J1Zik7Ci0gIAotICByZXR1cm4gKGRvdWJsZSkgQ0xPQ0tTX1BFUl9TRUMgKiBudW1fdHJpYWxzCi0gICAgKiA4ICogb2N0ZXRzX2luX2J1ZmZlciAvIHRpbWVyOwotfQotCi12b2lkCi1jaXBoZXJfYXJyYXlfdGVzdF90aHJvdWdocHV0KGNpcGhlcl90ICpjYVtdLCBpbnQgbnVtX2NpcGhlcikgewotICBpbnQgaTsKLSAgaW50IG1pbl9lbmNfbGVuID0gMTY7ICAgICAKLSAgaW50IG1heF9lbmNfbGVuID0gMjA0ODsgICAvKiBzaG91bGQgYmUgYSBwb3dlciBvZiB0d28gKi8KLSAgaW50IG51bV90cmlhbHMgPSAxMDAwMDsKLQotICBwcmludGYoInRpbWluZyAlcyB0aHJvdWdocHV0IHdpdGggYXJyYXkgc2l6ZSAlZDpcbiIsIAotCSAoY2FbMF0pLT50eXBlLT5kZXNjcmlwdGlvbiwgbnVtX2NpcGhlcik7Ci0gIGZmbHVzaChzdGRvdXQpOwotICBmb3IgKGk9bWluX2VuY19sZW47IGkgPD0gbWF4X2VuY19sZW47IGkgPSBpICogNCkKLSAgICBwcmludGYoIm1zZyBsZW46ICVkXHRnaWdhYml0cyBwZXIgc2Vjb25kOiAlZlxuIiwgaSwKLQkgICBjaXBoZXJfYXJyYXlfYml0c19wZXJfc2Vjb25kKGNhLCBudW1fY2lwaGVyLCBpLCBudW1fdHJpYWxzKSAvIDFlOSk7Ci0KLX0KLQotZXJyX3N0YXR1c190Ci1jaXBoZXJfZHJpdmVyX3Rlc3RfYXJyYXlfdGhyb3VnaHB1dChjaXBoZXJfdHlwZV90ICpjdCwgCi0JCQkJICAgIGludCBrbGVuLCBpbnQgbnVtX2NpcGhlcikgewotICBjaXBoZXJfdCAqKmNhID0gTlVMTDsKLSAgZXJyX3N0YXR1c190IHN0YXR1czsKLQotICBzdGF0dXMgPSBjaXBoZXJfYXJyYXlfYWxsb2NfaW5pdCgmY2EsIG51bV9jaXBoZXIsIGN0LCBrbGVuKTsKLSAgaWYgKHN0YXR1cykgewotICAgIHByaW50ZigiZXJyb3I6IGNpcGhlcl9hcnJheV9hbGxvY19pbml0KCkgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwKLQkgICBzdGF0dXMpOwotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAgCi0gIGNpcGhlcl9hcnJheV90ZXN0X3Rocm91Z2hwdXQoY2EsIG51bV9jaXBoZXIpOwotICAKLSAgY2lwaGVyX2FycmF5X2RlbGV0ZShjYSwgbnVtX2NpcGhlcik7ICAgIAotIAotICByZXR1cm4gZXJyX3N0YXR1c19vazsKLX0KZGlmZiAtLWdpdCBhL3Rlc3QvY3V0ZXN0LmggYi90ZXN0L2N1dGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NjYyNmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2N1dGVzdC5oCkBAIC0wLDAgKzEsNzEzIEBACisvKgorICogQ1VUZXN0IC0tIEMvQysrIFVuaXQgVGVzdCBmYWNpbGl0eQorICogPGh0dHA6Ly9naXRodWIuY29tL21pdHkvY3V0ZXN0PgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMy0yMDE3IE1hcnRpbiBNaXRhcworICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIENVVEVTVF9IX18KKyNkZWZpbmUgQ1VURVNUX0hfXworCisvKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqIFB1YmxpYyBpbnRlcmZhY2UgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBCeSBkZWZhdWx0LCA8Y3V0ZXN0Lmg+IHByb3ZpZGVzIHRoZSBtYWluIHByb2dyYW0gZW50cnkgcG9pbnQgKGZ1bmN0aW9uCisgKiBtYWluKCkpLiBIb3dldmVyLCBpZiB0aGUgdGVzdCBzdWl0ZSBpcyBjb21wb3NlZCBvZiBtdWx0aXBsZSBzb3VyY2UgZmlsZXMKKyAqIHdoaWNoIGluY2x1ZGUgPGN1dGVzdC5oPiwgdGhlbiB0aGlzIGNhdXNlcyBhIHByb2JsZW0gb2YgbXVsdGlwbGUgbWFpbigpCisgKiBkZWZpbml0aW9ucy4gVG8gYXZvaWQgdGhpcyBwcm9ibGVtLCAjZGVmaW5lIG1hY3JvIFRFU1RfTk9fTUFJTiBpbiBhbGwKKyAqIGNvbXBpbGF0aW9uIHVuaXRzIGJ1dCBvbmUuCisgKi8KKworLyogTWFjcm8gdG8gc3BlY2lmeSBsaXN0IG9mIHVuaXQgdGVzdHMgaW4gdGhlIHN1aXRlLgorICogVGhlIHVuaXQgdGVzdCBpbXBsZW1lbnRhdGlvbiBNVVNUIHByb3ZpZGUgbGlzdCBvZiB1bml0IHRlc3RzIGl0IGltcGxlbWVudHMKKyAqIHdpdGggdGhpcyBtYWNybzoKKyAqCisgKiAgIFRFU1RfTElTVCA9IHsKKyAqICAgICAgIHsgInRlc3QxX25hbWUiLCB0ZXN0MV9mdW5jX3B0ciB9LAorICogICAgICAgeyAidGVzdDJfbmFtZSIsIHRlc3QyX2Z1bmNfcHRyIH0sCisgKiAgICAgICAuLi4KKyAqICAgICAgIHsgMCB9CisgKiAgIH07CisgKgorICogVGhlIGxpc3Qgc3BlY2lmaWVzIG5hbWVzIG9mIGVhY2ggdGVzdCAobXVzdCBiZSB1bmlxdWUpIGFuZCBwb2ludGVyIHRvCisgKiBhIGZ1bmN0aW9uIGltcGxlbWVudGluZyBpdC4gVGhlIGZ1bmN0aW9uIGRvZXMgbm90IHRha2UgYW55IGFyZ3VtZW50cworICogYW5kIGhhcyBubyByZXR1cm4gdmFsdWVzLCBpLmUuIGV2ZXJ5IHRlc3QgZnVuY3Rpb24gaGFzIHRwIGJlIGNvbXBhdGlibGUKKyAqIHdpdGggdGhpcyBwcm90b3R5cGU6CisgKgorICogICB2b2lkIHRlc3RfZnVuYyh2b2lkKTsKKyAqLworI2RlZmluZSBURVNUX0xJU1QgY29uc3Qgc3RydWN0IHRlc3RfXyB0ZXN0X2xpc3RfX1tdCisKKy8qIE1hY3JvcyBmb3IgdGVzdGluZyB3aGV0aGVyIGFuIHVuaXQgdGVzdCBzdWNjZWVkcyBvciBmYWlscy4gVGhlc2UgbWFjcm9zCisgKiBjYW4gYmUgdXNlZCBhcmJpdHJhcmlseSBpbiBmdW5jdGlvbnMgaW1wbGVtZW50aW5nIHRoZSB1bml0IHRlc3RzLgorICoKKyAqIElmIGFueSBjb25kaXRpb24gZmFpbHMgdGhyb3VnaG91dCBleGVjdXRpb24gb2YgYSB0ZXN0LCB0aGUgdGVzdCBmYWlscy4KKyAqCisgKiBURVNUX0NIRUNLIHRha2VzIG9ubHkgb25lIGFyZ3VtZW50ICh0aGUgY29uZGl0aW9uKSwgVEVTVF9DSEVDS18gYWxsb3dzCisgKiBhbHNvIHRvIHNwZWNpZnkgYW4gZXJyb3IgbWVzc2FnZSB0byBwcmludCBvdXQgaWYgdGhlIGNvbmRpdGlvbiBmYWlscy4KKyAqIChJdCBleHBlY3RzIHByaW50Zi1saWtlIGZvcm1hdCBzdHJpbmcgYW5kIGl0cyBwYXJhbWV0ZXJzKS4gVGhlIG1hY3JvcworICogcmV0dXJuIG5vbi16ZXJvIChjb25kaXRpb24gcGFzc2VzKSBvciAwIChjb25kaXRpb24gZmFpbHMpLgorICoKKyAqIFRoYXQgY2FuIGJlIHVzZWZ1bCB3aGVuIG1vcmUgY29uZGl0aW9ucyBzaG91bGQgYmUgY2hlY2tlZCBvbmx5IGlmIHNvbWUKKyAqIHByZWNlZGluZyBjb25kaXRpb24gcGFzc2VzLCBhcyBpbGx1c3RyYXRlZCBpbiB0aGlzIGNvZGUgc25pcHBldDoKKyAqCisgKiAgIFNvbWVTdHJ1Y3QqIHB0ciA9IGFsbG9jYXRlX3NvbWVfc3RydWN0KCk7CisgKiAgIGlmKFRFU1RfQ0hFQ0socHRyICE9IE5VTEwpKSB7CisgKiAgICAgICBURVNUX0NIRUNLKHB0ci0+bWVtYmVyMSA8IDEwMCk7CisgKiAgICAgICBURVNUX0NIRUNLKHB0ci0+bWVtYmVyMiA+IDIwMCk7CisgKiAgIH0KKyAqLworI2RlZmluZSBURVNUX0NIRUNLXyhjb25kLCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0X2NoZWNrX18oKGNvbmQpLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fVkFfQVJHU19fKQorI2RlZmluZSBURVNUX0NIRUNLKGNvbmQpIHRlc3RfY2hlY2tfXygoY29uZCksIF9fRklMRV9fLCBfX0xJTkVfXywgIiVzIiwgI2NvbmQpCisKKy8qKioqKioqKioqKioqKioqKioqKioqCisgKioqIEltcGxlbWVudGF0aW9uICoqKgorICoqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoZSB1bml0IHRlc3QgZmlsZXMgc2hvdWxkIG5vdCByZWx5IG9uIGFueXRoaW5nIGJlbG93LiAqLworCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQodW5peCkgfHwgZGVmaW5lZChfX3VuaXhfXykgfHwgZGVmaW5lZChfX3VuaXgpIHx8IGRlZmluZWQoX19BUFBMRV9fKQorI2RlZmluZSBDVVRFU1RfVU5JWF9fIDEKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fV0lOMzJfXykgfHwgZGVmaW5lZChfX1dJTkRPV1NfXykKKyNkZWZpbmUgQ1VURVNUX1dJTl9fIDEKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8aW8uaD4KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyNpbmNsdWRlIDxleGNlcHRpb24+CisjZW5kaWYKKworLyogTm90ZSBvdXIgZ2xvYmFsIHByaXZhdGUgaWRlbnRpZmllcnMgZW5kIHdpdGggJ19fJyB0byBtaXRpZ2F0ZSByaXNrIG9mIGNsYXNoCisgKiB3aXRoIHRoZSB1bml0IHRlc3RzIGltcGxlbWVudGF0aW9uLiAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK3N0cnVjdCB0ZXN0X18geworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgdm9pZCAoKmZ1bmMpKHZvaWQpOworfTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCB0ZXN0X18gdGVzdF9saXN0X19bXTsKKworaW50IHRlc3RfY2hlY2tfXyhpbnQgY29uZCwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworI2lmbmRlZiBURVNUX05PX01BSU4KKworc3RhdGljIGNoYXIgKnRlc3RfYXJndjBfXyA9IE5VTEw7CitzdGF0aWMgaW50IHRlc3RfY291bnRfXyA9IDA7CitzdGF0aWMgaW50IHRlc3Rfbm9fZXhlY19fID0gMDsKK3N0YXRpYyBpbnQgdGVzdF9ub19zdW1tYXJ5X18gPSAwOworc3RhdGljIGludCB0ZXN0X3NraXBfbW9kZV9fID0gMDsKKworc3RhdGljIGludCB0ZXN0X3N0YXRfZmFpbGVkX3VuaXRzX18gPSAwOworc3RhdGljIGludCB0ZXN0X3N0YXRfcnVuX3VuaXRzX18gPSAwOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHRlc3RfXyAqdGVzdF9jdXJyZW50X3VuaXRfXyA9IE5VTEw7CitzdGF0aWMgaW50IHRlc3RfY3VycmVudF9hbHJlYWR5X2xvZ2dlZF9fID0gMDsKK3N0YXRpYyBpbnQgdGVzdF92ZXJib3NlX2xldmVsX18gPSAyOworc3RhdGljIGludCB0ZXN0X2N1cnJlbnRfZmFpbHVyZXNfXyA9IDA7CitzdGF0aWMgaW50IHRlc3RfY29sb3JpemVfXyA9IDA7CisKKyNkZWZpbmUgQ1VURVNUX0NPTE9SX0RFRkFVTFRfXyAwCisjZGVmaW5lIENVVEVTVF9DT0xPUl9HUkVFTl9fIDEKKyNkZWZpbmUgQ1VURVNUX0NPTE9SX1JFRF9fIDIKKyNkZWZpbmUgQ1VURVNUX0NPTE9SX0RFRkFVTFRfSU5URU5TSVZFX18gMworI2RlZmluZSBDVVRFU1RfQ09MT1JfR1JFRU5fSU5URU5TSVZFX18gNAorI2RlZmluZSBDVVRFU1RfQ09MT1JfUkVEX0lOVEVOU0lWRV9fIDUKKworc3RhdGljIHNpemVfdCB0ZXN0X3ByaW50X2luX2NvbG9yX18oaW50IGNvbG9yLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgY2hhciBidWZmZXJbMjU2XTsKKyAgICBzaXplX3QgbjsKKworICAgIHZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisgICAgdnNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGZtdCwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworICAgIGJ1ZmZlcltzaXplb2YoYnVmZmVyKSAtIDFdID0gJ1wwJzsKKworICAgIGlmICghdGVzdF9jb2xvcml6ZV9fKSB7CisgICAgICAgIHJldHVybiBwcmludGYoIiVzIiwgYnVmZmVyKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkIENVVEVTVF9VTklYX18KKyAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKmNvbF9zdHI7CisgICAgICAgIHN3aXRjaCAoY29sb3IpIHsKKyAgICAgICAgY2FzZSBDVVRFU1RfQ09MT1JfR1JFRU5fXzoKKyAgICAgICAgICAgIGNvbF9zdHIgPSAiXDAzM1swOzMybSI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDVVRFU1RfQ09MT1JfUkVEX186CisgICAgICAgICAgICBjb2xfc3RyID0gIlwwMzNbMDszMW0iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1VURVNUX0NPTE9SX0dSRUVOX0lOVEVOU0lWRV9fOgorICAgICAgICAgICAgY29sX3N0ciA9ICJcMDMzWzE7MzJtIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENVVEVTVF9DT0xPUl9SRURfSU5URU5TSVZFX186CisgICAgICAgICAgICBjb2xfc3RyID0gIlwwMzNbMTszMG0iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1VURVNUX0NPTE9SX0RFRkFVTFRfSU5URU5TSVZFX186CisgICAgICAgICAgICBjb2xfc3RyID0gIlwwMzNbMW0iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBjb2xfc3RyID0gIlwwMzNbMG0iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnRmKCIlcyIsIGNvbF9zdHIpOworICAgICAgICBuID0gcHJpbnRmKCIlcyIsIGJ1ZmZlcik7CisgICAgICAgIHByaW50ZigiXDAzM1swbSIpOworICAgICAgICByZXR1cm4gbjsKKyAgICB9CisjZWxpZiBkZWZpbmVkIENVVEVTVF9XSU5fXworICAgIHsKKyAgICAgICAgSEFORExFIGg7CisgICAgICAgIENPTlNPTEVfU0NSRUVOX0JVRkZFUl9JTkZPIGluZm87CisgICAgICAgIFdPUkQgYXR0cjsKKworICAgICAgICBoID0gR2V0U3RkSGFuZGxlKFNURF9PVVRQVVRfSEFORExFKTsKKyAgICAgICAgR2V0Q29uc29sZVNjcmVlbkJ1ZmZlckluZm8oaCwgJmluZm8pOworCisgICAgICAgIHN3aXRjaCAoY29sb3IpIHsKKyAgICAgICAgY2FzZSBDVVRFU1RfQ09MT1JfR1JFRU5fXzoKKyAgICAgICAgICAgIGF0dHIgPSBGT1JFR1JPVU5EX0dSRUVOOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1VURVNUX0NPTE9SX1JFRF9fOgorICAgICAgICAgICAgYXR0ciA9IEZPUkVHUk9VTkRfUkVEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1VURVNUX0NPTE9SX0dSRUVOX0lOVEVOU0lWRV9fOgorICAgICAgICAgICAgYXR0ciA9IEZPUkVHUk9VTkRfR1JFRU4gfCBGT1JFR1JPVU5EX0lOVEVOU0lUWTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENVVEVTVF9DT0xPUl9SRURfSU5URU5TSVZFX186CisgICAgICAgICAgICBhdHRyID0gRk9SRUdST1VORF9SRUQgfCBGT1JFR1JPVU5EX0lOVEVOU0lUWTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENVVEVTVF9DT0xPUl9ERUZBVUxUX0lOVEVOU0lWRV9fOgorICAgICAgICAgICAgYXR0ciA9IEZPUkVHUk9VTkRfQkxVRSB8IEZPUkVHUk9VTkRfR1JFRU4gfCBGT1JFR1JPVU5EX1JFRCB8CisgICAgICAgICAgICAgICAgICAgRk9SRUdST1VORF9JTlRFTlNJVFk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGF0dHIgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGF0dHIgIT0gMCkKKyAgICAgICAgICAgIFNldENvbnNvbGVUZXh0QXR0cmlidXRlKGgsIGF0dHIpOworICAgICAgICBuID0gcHJpbnRmKCIlcyIsIGJ1ZmZlcik7CisgICAgICAgIFNldENvbnNvbGVUZXh0QXR0cmlidXRlKGgsIGluZm8ud0F0dHJpYnV0ZXMpOworICAgICAgICByZXR1cm4gbjsKKyAgICB9CisjZWxzZQorICAgIG4gPSBwcmludGYoIiVzIiwgYnVmZmVyKTsKKyAgICByZXR1cm4gbjsKKyNlbmRpZgorfQorCitpbnQgdGVzdF9jaGVja19fKGludCBjb25kLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisgICAgY29uc3QgY2hhciAqcmVzdWx0X3N0cjsKKyAgICBpbnQgcmVzdWx0X2NvbG9yOworICAgIGludCB2ZXJib3NlX2xldmVsOworCisgICAgaWYgKGNvbmQpIHsKKyAgICAgICAgcmVzdWx0X3N0ciA9ICJvayI7CisgICAgICAgIHJlc3VsdF9jb2xvciA9IENVVEVTVF9DT0xPUl9HUkVFTl9fOworICAgICAgICB2ZXJib3NlX2xldmVsID0gMzsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIXRlc3RfY3VycmVudF9hbHJlYWR5X2xvZ2dlZF9fICYmIHRlc3RfY3VycmVudF91bml0X18gIT0gTlVMTCkgeworICAgICAgICAgICAgcHJpbnRmKCJbICIpOworICAgICAgICAgICAgdGVzdF9wcmludF9pbl9jb2xvcl9fKENVVEVTVF9DT0xPUl9SRURfSU5URU5TSVZFX18sICJGQUlMRUQiKTsKKyAgICAgICAgICAgIHByaW50ZigiIF1cbiIpOworICAgICAgICB9CisgICAgICAgIHJlc3VsdF9zdHIgPSAiZmFpbGVkIjsKKyAgICAgICAgcmVzdWx0X2NvbG9yID0gQ1VURVNUX0NPTE9SX1JFRF9fOworICAgICAgICB2ZXJib3NlX2xldmVsID0gMjsKKyAgICAgICAgdGVzdF9jdXJyZW50X2ZhaWx1cmVzX18rKzsKKyAgICAgICAgdGVzdF9jdXJyZW50X2FscmVhZHlfbG9nZ2VkX18rKzsKKyAgICB9CisKKyAgICBpZiAodGVzdF92ZXJib3NlX2xldmVsX18gPj0gdmVyYm9zZV9sZXZlbCkgeworICAgICAgICBzaXplX3QgbiA9IDA7CisgICAgICAgIHZhX2xpc3QgYXJnczsKKworICAgICAgICBwcmludGYoIiAgIik7CisKKyAgICAgICAgaWYgKGZpbGUgIT0gTlVMTCkKKyAgICAgICAgICAgIG4gKz0gcHJpbnRmKCIlczolZDogQ2hlY2sgIiwgZmlsZSwgbGluZSk7CisKKyAgICAgICAgdmFfc3RhcnQoYXJncywgZm10KTsKKyAgICAgICAgbiArPSB2cHJpbnRmKGZtdCwgYXJncyk7CisgICAgICAgIHZhX2VuZChhcmdzKTsKKworICAgICAgICBwcmludGYoIi4uLiAiKTsKKyAgICAgICAgdGVzdF9wcmludF9pbl9jb2xvcl9fKHJlc3VsdF9jb2xvciwgcmVzdWx0X3N0cik7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgdGVzdF9jdXJyZW50X2FscmVhZHlfbG9nZ2VkX18rKzsKKyAgICB9CisKKyAgICByZXR1cm4gKGNvbmQgIT0gMCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfbGlzdF9uYW1lc19fKHZvaWQpCit7CisgICAgY29uc3Qgc3RydWN0IHRlc3RfXyAqdGVzdDsKKworICAgIHByaW50ZigiVW5pdCB0ZXN0czpcbiIpOworICAgIGZvciAodGVzdCA9ICZ0ZXN0X2xpc3RfX1swXTsgdGVzdC0+ZnVuYyAhPSBOVUxMOyB0ZXN0KyspCisgICAgICAgIHByaW50ZigiICAlc1xuIiwgdGVzdC0+bmFtZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGVzdF9fICp0ZXN0X2J5X25hbWVfXyhjb25zdCBjaGFyICpuYW1lKQoreworICAgIGNvbnN0IHN0cnVjdCB0ZXN0X18gKnRlc3Q7CisKKyAgICBmb3IgKHRlc3QgPSAmdGVzdF9saXN0X19bMF07IHRlc3QtPmZ1bmMgIT0gTlVMTDsgdGVzdCsrKSB7CisgICAgICAgIGlmIChzdHJjbXAodGVzdC0+bmFtZSwgbmFtZSkgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0OworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCisvKiBDYWxsIGRpcmVjdGx5IHRoZSBnaXZlbiB0ZXN0IHVuaXQgZnVuY3Rpb24uICovCitzdGF0aWMgaW50IHRlc3RfZG9fcnVuX18oY29uc3Qgc3RydWN0IHRlc3RfXyAqdGVzdCkKK3sKKyAgICB0ZXN0X2N1cnJlbnRfdW5pdF9fID0gdGVzdDsKKyAgICB0ZXN0X2N1cnJlbnRfZmFpbHVyZXNfXyA9IDA7CisgICAgdGVzdF9jdXJyZW50X2FscmVhZHlfbG9nZ2VkX18gPSAwOworCisgICAgaWYgKHRlc3RfdmVyYm9zZV9sZXZlbF9fID49IDMpIHsKKyAgICAgICAgdGVzdF9wcmludF9pbl9jb2xvcl9fKENVVEVTVF9DT0xPUl9ERUZBVUxUX0lOVEVOU0lWRV9fLCAiVGVzdCAlczpcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0LT5uYW1lKTsKKyAgICAgICAgdGVzdF9jdXJyZW50X2FscmVhZHlfbG9nZ2VkX18rKzsKKyAgICB9IGVsc2UgaWYgKHRlc3RfdmVyYm9zZV9sZXZlbF9fID49IDEpIHsKKyAgICAgICAgc2l6ZV90IG47CisgICAgICAgIGNoYXIgc3BhY2VzWzMyXTsKKworICAgICAgICBuID0gdGVzdF9wcmludF9pbl9jb2xvcl9fKENVVEVTVF9DT0xPUl9ERUZBVUxUX0lOVEVOU0lWRV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0ICVzLi4uICIsIHRlc3QtPm5hbWUpOworICAgICAgICBtZW1zZXQoc3BhY2VzLCAnICcsIHNpemVvZihzcGFjZXMpKTsKKyAgICAgICAgaWYgKG4gPCBzaXplb2Yoc3BhY2VzKSkKKyAgICAgICAgICAgIHByaW50ZigiJS4qcyIsIChpbnQpKHNpemVvZihzcGFjZXMpIC0gbiksIHNwYWNlcyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdF9jdXJyZW50X2FscmVhZHlfbG9nZ2VkX18gPSAxOworICAgIH0KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgdHJ5IHsKKyNlbmRpZgorCisgICAgICAgIC8qIFRoaXMgaXMgZ29vZCB0byBkbyBmb3IgY2FzZSB0aGUgdGVzdCB1bml0IGUuZy4gY3Jhc2hlcy4gKi8KKyAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgICAgIGZmbHVzaChzdGRlcnIpOworCisgICAgICAgIHRlc3QtPmZ1bmMoKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgfSBjYXRjaCAoc3RkOjpleGNlcHRpb24gJmUpIHsKKyAgICAgICAgY29uc3QgY2hhciAqd2hhdCA9IGUud2hhdCgpOworICAgICAgICBpZiAod2hhdCAhPSBOVUxMKQorICAgICAgICAgICAgdGVzdF9jaGVja19fKDAsIE5VTEwsIDAsICJUaHJldyBzdGQ6OmV4Y2VwdGlvbjogJXMiLCB3aGF0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGVzdF9jaGVja19fKDAsIE5VTEwsIDAsICJUaHJldyBzdGQ6OmV4Y2VwdGlvbiIpOworICAgIH0gY2F0Y2ggKC4uLikgeworICAgICAgICB0ZXN0X2NoZWNrX18oMCwgTlVMTCwgMCwgIlRocmV3IGFuIGV4Y2VwdGlvbiIpOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKHRlc3RfdmVyYm9zZV9sZXZlbF9fID49IDMpIHsKKyAgICAgICAgc3dpdGNoICh0ZXN0X2N1cnJlbnRfZmFpbHVyZXNfXykgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICB0ZXN0X3ByaW50X2luX2NvbG9yX18oQ1VURVNUX0NPTE9SX0dSRUVOX0lOVEVOU0lWRV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIEFsbCBjb25kaXRpb25zIGhhdmUgcGFzc2VkLlxuXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICB0ZXN0X3ByaW50X2luX2NvbG9yX18oQ1VURVNUX0NPTE9SX1JFRF9JTlRFTlNJVkVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBPbmUgY29uZGl0aW9uIGhhcyBGQUlMRUQuXG5cbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB0ZXN0X3ByaW50X2luX2NvbG9yX18oQ1VURVNUX0NPTE9SX1JFRF9JTlRFTlNJVkVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAlZCBjb25kaXRpb25zIGhhdmUgRkFJTEVELlxuXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfY3VycmVudF9mYWlsdXJlc19fKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICh0ZXN0X3ZlcmJvc2VfbGV2ZWxfXyA+PSAxICYmIHRlc3RfY3VycmVudF9mYWlsdXJlc19fID09IDApIHsKKyAgICAgICAgcHJpbnRmKCJbICAgIik7CisgICAgICAgIHRlc3RfcHJpbnRfaW5fY29sb3JfXyhDVVRFU1RfQ09MT1JfR1JFRU5fSU5URU5TSVZFX18sICJPSyIpOworICAgICAgICBwcmludGYoIiAgIF1cbiIpOworICAgIH0KKworICAgIHRlc3RfY3VycmVudF91bml0X18gPSBOVUxMOworICAgIHJldHVybiAodGVzdF9jdXJyZW50X2ZhaWx1cmVzX18gPT0gMCkgPyAwIDogLTE7Cit9CisKKyNpZiBkZWZpbmVkKENVVEVTVF9VTklYX18pIHx8IGRlZmluZWQoQ1VURVNUX1dJTl9fKQorLyogQ2FsbGVkIGlmIGFueXRoaW5nIGdvZXMgYmFkIGluIGN1dGVzdCwgb3IgaWYgdGhlIHVuaXQgdGVzdCBlbmRzIGluIG90aGVyCisgKiB3YXkgdGhlbiBieSBub3JtYWwgcmV0dXJuaW5nIGZyb20gaXRzIGZ1bmN0aW9uIChlLmcuIGV4Y2VwdGlvbiBvciBzb21lCisgKiBhYm5vcm1hbCBjaGlsZCBwcm9jZXNzIHRlcm1pbmF0aW9uKS4gKi8KK3N0YXRpYyB2b2lkIHRlc3RfZXJyb3JfXyhjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3M7CisKKyAgICBpZiAodGVzdF92ZXJib3NlX2xldmVsX18gPT0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHRlc3RfdmVyYm9zZV9sZXZlbF9fIDw9IDIgJiYgIXRlc3RfY3VycmVudF9hbHJlYWR5X2xvZ2dlZF9fICYmCisgICAgICAgIHRlc3RfY3VycmVudF91bml0X18gIT0gTlVMTCkgeworICAgICAgICBwcmludGYoIlsgIik7CisgICAgICAgIHRlc3RfcHJpbnRfaW5fY29sb3JfXyhDVVRFU1RfQ09MT1JfUkVEX0lOVEVOU0lWRV9fLCAiRkFJTEVEIik7CisgICAgICAgIHByaW50ZigiIF1cbiIpOworICAgIH0KKworICAgIGlmICh0ZXN0X3ZlcmJvc2VfbGV2ZWxfXyA+PSAyKSB7CisgICAgICAgIHRlc3RfcHJpbnRfaW5fY29sb3JfXyhDVVRFU1RfQ09MT1JfUkVEX0lOVEVOU0lWRV9fLCAiICBFcnJvcjogIik7CisgICAgICAgIHZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisgICAgICAgIHZwcmludGYoZm10LCBhcmdzKTsKKyAgICAgICAgdmFfZW5kKGFyZ3MpOworICAgICAgICBwcmludGYoIlxuIik7CisgICAgfQorfQorI2VuZGlmCisKKy8qIFRyaWdnZXIgdGhlIHVuaXQgdGVzdC4gSWYgcG9zc2libGUgKGFuZCBub3Qgc3VwcHJlc3NlZCkgaXQgc3RhcnRzIGEgY2hpbGQKKyAqIHByb2Nlc3Mgd2hvIGNhbGxzIHRlc3RfZG9fcnVuX18oKSwgb3RoZXJ3aXNlIGl0IGNhbGxzIHRlc3RfZG9fcnVuX18oKQorICogZGlyZWN0bHkuICovCitzdGF0aWMgdm9pZCB0ZXN0X3J1bl9fKGNvbnN0IHN0cnVjdCB0ZXN0X18gKnRlc3QpCit7CisgICAgaW50IGZhaWxlZCA9IDE7CisKKyAgICB0ZXN0X2N1cnJlbnRfdW5pdF9fID0gdGVzdDsKKyAgICB0ZXN0X2N1cnJlbnRfYWxyZWFkeV9sb2dnZWRfXyA9IDA7CisKKyAgICBpZiAoIXRlc3Rfbm9fZXhlY19fKSB7CisjaWYgZGVmaW5lZChDVVRFU1RfVU5JWF9fKQorCisgICAgICAgIHBpZF90IHBpZDsKKyAgICAgICAgaW50IGV4aXRfY29kZTsKKworICAgICAgICBwaWQgPSBmb3JrKCk7CisgICAgICAgIGlmIChwaWQgPT0gKHBpZF90KS0xKSB7CisgICAgICAgICAgICB0ZXN0X2Vycm9yX18oIkNhbm5vdCBmb3JrLiAlcyBbJWRdIiwgc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7CisgICAgICAgICAgICBmYWlsZWQgPSAxOworICAgICAgICB9IGVsc2UgaWYgKHBpZCA9PSAwKSB7CisgICAgICAgICAgICAvKiBDaGlsZDogRG8gdGhlIHRlc3QuICovCisgICAgICAgICAgICBmYWlsZWQgPSAodGVzdF9kb19ydW5fXyh0ZXN0KSAhPSAwKTsKKyAgICAgICAgICAgIGV4aXQoZmFpbGVkID8gMSA6IDApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogUGFyZW50OiBXYWl0IHVudGlsIGNoaWxkIHRlcm1pbmF0ZXMgYW5kIGFuYWx5emUgaXRzIGV4aXQgY29kZS4gKi8KKyAgICAgICAgICAgIHdhaXRwaWQocGlkLCAmZXhpdF9jb2RlLCAwKTsKKyAgICAgICAgICAgIGlmIChXSUZFWElURUQoZXhpdF9jb2RlKSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoV0VYSVRTVEFUVVMoZXhpdF9jb2RlKSkgeworICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8qIHRlc3QgaGFzIHBhc3NlZC4gKi8KKyAgICAgICAgICAgICAgICBjYXNlIDE6ICAgIC8qIG5vb3AgKi8KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8qICJub3JtYWwiIGZhaWx1cmUuICovCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9lcnJvcl9fKCJVbmV4cGVjdGVkIGV4aXQgY29kZSBbJWRdIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFWElUU1RBVFVTKGV4aXRfY29kZSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoV0lGU0lHTkFMRUQoZXhpdF9jb2RlKSkgeworICAgICAgICAgICAgICAgIGNoYXIgdG1wWzMyXTsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzaWduYW1lOworICAgICAgICAgICAgICAgIHN3aXRjaCAoV1RFUk1TSUcoZXhpdF9jb2RlKSkgeworICAgICAgICAgICAgICAgIGNhc2UgU0lHSU5UOgorICAgICAgICAgICAgICAgICAgICBzaWduYW1lID0gIlNJR0lOVCI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgU0lHSFVQOgorICAgICAgICAgICAgICAgICAgICBzaWduYW1lID0gIlNJR0hVUCI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgU0lHUVVJVDoKKyAgICAgICAgICAgICAgICAgICAgc2lnbmFtZSA9ICJTSUdRVUlUIjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBTSUdBQlJUOgorICAgICAgICAgICAgICAgICAgICBzaWduYW1lID0gIlNJR0FCUlQiOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFNJR0tJTEw6CisgICAgICAgICAgICAgICAgICAgIHNpZ25hbWUgPSAiU0lHS0lMTCI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgU0lHU0VHVjoKKyAgICAgICAgICAgICAgICAgICAgc2lnbmFtZSA9ICJTSUdTRUdWIjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBTSUdJTEw6CisgICAgICAgICAgICAgICAgICAgIHNpZ25hbWUgPSAiU0lHSUxMIjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBTSUdURVJNOgorICAgICAgICAgICAgICAgICAgICBzaWduYW1lID0gIlNJR1RFUk0iOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHRtcCwgInNpZ25hbCAlZCIsIFdURVJNU0lHKGV4aXRfY29kZSkpOworICAgICAgICAgICAgICAgICAgICBzaWduYW1lID0gdG1wOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGVzdF9lcnJvcl9fKCJUZXN0IGludGVycnVwdGVkIGJ5ICVzIiwgc2lnbmFtZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRlc3RfZXJyb3JfXygiVGVzdCBlbmRlZCBpbiBhbiB1bmV4cGVjdGVkIHdheSBbJWRdIiwgZXhpdF9jb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisjZWxpZiBkZWZpbmVkKENVVEVTVF9XSU5fXykKKworICAgICAgICBjaGFyIGJ1ZmZlcls1MTJdID0geyAwIH07CisgICAgICAgIFNUQVJUVVBJTkZPQSBzdGFydHVwSW5mbyA9IHsgMCB9OworICAgICAgICBQUk9DRVNTX0lORk9STUFUSU9OIHByb2Nlc3NJbmZvOworICAgICAgICBEV09SRCBleGl0Q29kZTsKKworICAgICAgICAvKiBXaW5kb3dzIGhhcyBubyBmb3JrKCkuIFNvIHdlIHByb3BhZ2F0ZSBhbGwgaW5mbyBpbnRvIHRoZSBjaGlsZAorICAgICAgICAgKiB0aHJvdWdoIGEgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4gKi8KKyAgICAgICAgX3NucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikgLSAxLAorICAgICAgICAgICAgICAgICAgIiVzIC0tbm8tZXhlYyAtLW5vLXN1bW1hcnkgLS12ZXJib3NlPSVkIC0tY29sb3I9JXMgLS0gXCIlc1wiIiwKKyAgICAgICAgICAgICAgICAgIHRlc3RfYXJndjBfXywgdGVzdF92ZXJib3NlX2xldmVsX18sCisgICAgICAgICAgICAgICAgICB0ZXN0X2NvbG9yaXplX18gPyAiYWx3YXlzIiA6ICJuZXZlciIsIHRlc3QtPm5hbWUpOworICAgICAgICBzdGFydHVwSW5mby5jYiA9IHNpemVvZihTVEFSVFVQSU5GTyk7CisgICAgICAgIGlmIChDcmVhdGVQcm9jZXNzQShOVUxMLCBidWZmZXIsIE5VTEwsIE5VTEwsIEZBTFNFLCAwLCBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0dXBJbmZvLCAmcHJvY2Vzc0luZm8pKSB7CisgICAgICAgICAgICBXYWl0Rm9yU2luZ2xlT2JqZWN0KHByb2Nlc3NJbmZvLmhQcm9jZXNzLCBJTkZJTklURSk7CisgICAgICAgICAgICBHZXRFeGl0Q29kZVByb2Nlc3MocHJvY2Vzc0luZm8uaFByb2Nlc3MsICZleGl0Q29kZSk7CisgICAgICAgICAgICBDbG9zZUhhbmRsZShwcm9jZXNzSW5mby5oVGhyZWFkKTsKKyAgICAgICAgICAgIENsb3NlSGFuZGxlKHByb2Nlc3NJbmZvLmhQcm9jZXNzKTsKKyAgICAgICAgICAgIGZhaWxlZCA9IChleGl0Q29kZSAhPSAwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RfZXJyb3JfXygiQ2Fubm90IGNyZWF0ZSB1bml0IHRlc3Qgc3VicHJvY2VzcyBbJWxkXS4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIEdldExhc3RFcnJvcigpKTsKKyAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgIH0KKworI2Vsc2UKKworICAgICAgICAvKiBBIHBsYXRmb3JtIHdoZXJlIHdlIGRvbid0IGtub3cgaG93IHRvIHJ1biBjaGlsZCBwcm9jZXNzLiAqLworICAgICAgICBmYWlsZWQgPSAodGVzdF9kb19ydW5fXyh0ZXN0KSAhPSAwKTsKKworI2VuZGlmCisKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBDaGlsZCBwcm9jZXNzZXMgc3VwcHJlc3NlZCB0aHJvdWdoIC0tbm8tZXhlYy4gKi8KKyAgICAgICAgZmFpbGVkID0gKHRlc3RfZG9fcnVuX18odGVzdCkgIT0gMCk7CisgICAgfQorCisgICAgdGVzdF9jdXJyZW50X3VuaXRfXyA9IE5VTEw7CisKKyAgICB0ZXN0X3N0YXRfcnVuX3VuaXRzX18rKzsKKyAgICBpZiAoZmFpbGVkKQorICAgICAgICB0ZXN0X3N0YXRfZmFpbGVkX3VuaXRzX18rKzsKK30KKworI2lmIGRlZmluZWQoQ1VURVNUX1dJTl9fKQorLyogQ2FsbGJhY2sgZm9yIFNFSCBldmVudHMuICovCitzdGF0aWMgTE9ORyBDQUxMQkFDSyB0ZXN0X2V4Y2VwdGlvbl9maWx0ZXJfXyhFWENFUFRJT05fUE9JTlRFUlMgKnB0cnMpCit7CisgICAgdGVzdF9lcnJvcl9fKCJVbmhhbmRsZWQgU0VIIGV4Y2VwdGlvbiAlMDhseCBhdCAlcC4iLAorICAgICAgICAgICAgICAgICBwdHJzLT5FeGNlcHRpb25SZWNvcmQtPkV4Y2VwdGlvbkNvZGUsCisgICAgICAgICAgICAgICAgIHB0cnMtPkV4Y2VwdGlvblJlY29yZC0+RXhjZXB0aW9uQWRkcmVzcyk7CisgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgZmZsdXNoKHN0ZGVycik7CisgICAgcmV0dXJuIEVYQ0VQVElPTl9FWEVDVVRFX0hBTkRMRVI7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgdGVzdF9oZWxwX18odm9pZCkKK3sKKyAgICBwcmludGYoIlVzYWdlOiAlcyBbb3B0aW9uc10gW3Rlc3QuLi5dXG4iLCB0ZXN0X2FyZ3YwX18pOworICAgIHByaW50ZigiUnVuIHRoZSBzcGVjaWZpZWQgdW5pdCB0ZXN0czsgb3IgaWYgdGhlIG9wdGlvbiAnLS1za2lwJyBpcyB1c2VkLCAiCisgICAgICAgICAgICJydW4gYWxsXG4iKTsKKyAgICBwcmludGYoInRlc3RzIGluIHRoZSBzdWl0ZSBidXQgdGhvc2UgbGlzdGVkLiAgQnkgZGVmYXVsdCwgaWYgbm8gdGVzdHMgYXJlICIKKyAgICAgICAgICAgInNwZWNpZmllZFxuIik7CisgICAgcHJpbnRmKCJvbiB0aGUgY29tbWFuZCBsaW5lLCBhbGwgdW5pdCB0ZXN0cyBpbiB0aGUgc3VpdGUgYXJlIHJ1bi5cbiIpOworICAgIHByaW50ZigiXG4iKTsKKyAgICBwcmludGYoIk9wdGlvbnM6XG4iKTsKKyAgICBwcmludGYoCisgICAgICAgICIgIC1zLCAtLXNraXAgICAgICAgICAgICBFeGVjdXRlIGFsbCB1bml0IHRlc3RzIGJ1dCB0aGUgbGlzdGVkIG9uZXNcbiIpOworICAgIHByaW50ZigiICAgICAgLS1uby1leGVjICAgICAgICAgRG8gbm90IGV4ZWN1dGUgdW5pdCB0ZXN0cyBhcyBjaGlsZCAiCisgICAgICAgICAgICJwcm9jZXNzZXNcbiIpOworICAgIHByaW50ZigKKyAgICAgICAgIiAgICAgIC0tbm8tc3VtbWFyeSAgICAgIFN1cHByZXNzIHByaW50aW5nIG9mIHRlc3QgcmVzdWx0cyBzdW1tYXJ5XG4iKTsKKyAgICBwcmludGYoIiAgLWwsIC0tbGlzdCAgICAgICAgICAgIExpc3QgdW5pdCB0ZXN0cyBpbiB0aGUgc3VpdGUgYW5kIGV4aXRcbiIpOworICAgIHByaW50ZigiICAtdiwgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIG1vcmUgdmVyYm9zZSBvdXRwdXRcbiIpOworICAgIHByaW50ZigiICAgICAgLS12ZXJib3NlPUxFVkVMICAgU2V0IHZlcmJvc2UgbGV2ZWwgdG8gTEVWRUw6XG4iKTsKKyAgICBwcmludGYoIiAgICAgICAgICAgICAgICAgICAgICAgICAgMCAuLi4gQmUgc2lsZW50XG4iKTsKKyAgICBwcmludGYoIiAgICAgICAgICAgICAgICAgICAgICAgICAgMSAuLi4gT3V0cHV0IG9uZSBsaW5lIHBlciB0ZXN0IChhbmQgIgorICAgICAgICAgICAic3VtbWFyeSlcbiIpOworICAgIHByaW50ZigiICAgICAgICAgICAgICAgICAgICAgICAgICAyIC4uLiBBcyAxIGFuZCBmYWlsZWQgY29uZGl0aW9ucyAodGhpcyAiCisgICAgICAgICAgICJpcyBkZWZhdWx0KVxuIik7CisgICAgcHJpbnRmKCIgICAgICAgICAgICAgICAgICAgICAgICAgIDMgLi4uIEFzIDEgYW5kIGFsbCBjb25kaXRpb25zIChhbmQgIgorICAgICAgICAgICAiZXh0ZW5kZWQgc3VtbWFyeSlcbiIpOworICAgIHByaW50ZigiICAgICAgLS1jb2xvcj1XSEVOICAgICAgRW5hYmxlIGNvbG9yaXplZCBvdXRwdXQgKFdIRU4gaXMgb25lIG9mICIKKyAgICAgICAgICAgIidhdXRvJywgJ2Fsd2F5cycsICduZXZlcicpXG4iKTsKKyAgICBwcmludGYoIiAgLWgsIC0taGVscCAgICAgICAgICAgIERpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0XG4iKTsKKyAgICBwcmludGYoIlxuIik7CisgICAgdGVzdF9saXN0X25hbWVzX18oKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGNvbnN0IHN0cnVjdCB0ZXN0X18gKip0ZXN0cyA9IE5VTEw7CisgICAgaW50IGksIGosIG4gPSAwOworICAgIGludCBzZWVuX2RvdWJsZV9kYXNoID0gMDsKKworICAgIHRlc3RfYXJndjBfXyA9IGFyZ3ZbMF07CisKKyNpZiBkZWZpbmVkIENVVEVTVF9VTklYX18KKyAgICB0ZXN0X2NvbG9yaXplX18gPSBpc2F0dHkoU1RET1VUX0ZJTEVOTyk7CisjZWxpZiBkZWZpbmVkIENVVEVTVF9XSU5fXworICAgIHRlc3RfY29sb3JpemVfXyA9IF9pc2F0dHkoX2ZpbGVubyhzdGRvdXQpKTsKKyNlbHNlCisgICAgdGVzdF9jb2xvcml6ZV9fID0gMDsKKyNlbmRpZgorCisgICAgLyogUGFyc2Ugb3B0aW9ucyAqLworICAgIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKyAgICAgICAgaWYgKHNlZW5fZG91YmxlX2Rhc2ggfHwgYXJndltpXVswXSAhPSAnLScpIHsKKyAgICAgICAgICAgIHRlc3RzID0gKGNvbnN0IHN0cnVjdCB0ZXN0X18gKiopcmVhbGxvYygKKyAgICAgICAgICAgICAgICAodm9pZCAqKXRlc3RzLCAobiArIDEpICogc2l6ZW9mKGNvbnN0IHN0cnVjdCB0ZXN0X18gKikpOworICAgICAgICAgICAgaWYgKHRlc3RzID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk91dCBvZiBtZW1vcnkuXG4iKTsKKyAgICAgICAgICAgICAgICBleGl0KDIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGVzdHNbbl0gPSB0ZXN0X2J5X25hbWVfXyhhcmd2W2ldKTsKKyAgICAgICAgICAgIGlmICh0ZXN0c1tuXSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogVW5yZWNvZ25pemVkIHVuaXQgdGVzdCAnJXMnXG4iLCBhcmd2WzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJndltpXSk7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJUcnkgJyVzIC0tbGlzdCcgZm9yIGxpc3Qgb2YgdW5pdCB0ZXN0cy5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBhcmd2WzBdKTsKKyAgICAgICAgICAgICAgICBleGl0KDIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbisrOworICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChhcmd2W2ldLCAiLS0iKSA9PSAwKSB7CisgICAgICAgICAgICBzZWVuX2RvdWJsZV9kYXNoID0gMTsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoYXJndltpXSwgIi0taGVscCIpID09IDAgfHwKKyAgICAgICAgICAgICAgICAgICBzdHJjbXAoYXJndltpXSwgIi1oIikgPT0gMCkgeworICAgICAgICAgICAgdGVzdF9oZWxwX18oKTsKKyAgICAgICAgICAgIGV4aXQoMCk7CisgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaV0sICItLXZlcmJvc2UiKSA9PSAwIHx8CisgICAgICAgICAgICAgICAgICAgc3RyY21wKGFyZ3ZbaV0sICItdiIpID09IDApIHsKKyAgICAgICAgICAgIHRlc3RfdmVyYm9zZV9sZXZlbF9fKys7CisgICAgICAgIH0gZWxzZSBpZiAoc3RybmNtcChhcmd2W2ldLCAiLS12ZXJib3NlPSIsIDEwKSA9PSAwKSB7CisgICAgICAgICAgICB0ZXN0X3ZlcmJvc2VfbGV2ZWxfXyA9IGF0b2koYXJndltpXSArIDEwKTsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoYXJndltpXSwgIi0tY29sb3I9YXV0byIpID09IDApIHsKKyAgICAgICAgICAgIC8qIG5vb3AgKHNldCBmcm9tIGFib3ZlKSAqLworICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChhcmd2W2ldLCAiLS1jb2xvcj1hbHdheXMiKSA9PSAwIHx8CisgICAgICAgICAgICAgICAgICAgc3RyY21wKGFyZ3ZbaV0sICItLWNvbG9yIikgPT0gMCkgeworICAgICAgICAgICAgdGVzdF9jb2xvcml6ZV9fID0gMTsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoYXJndltpXSwgIi0tY29sb3I9bmV2ZXIiKSA9PSAwKSB7CisgICAgICAgICAgICB0ZXN0X2NvbG9yaXplX18gPSAwOworICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChhcmd2W2ldLCAiLS1za2lwIikgPT0gMCB8fAorICAgICAgICAgICAgICAgICAgIHN0cmNtcChhcmd2W2ldLCAiLXMiKSA9PSAwKSB7CisgICAgICAgICAgICB0ZXN0X3NraXBfbW9kZV9fID0gMTsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoYXJndltpXSwgIi0tbm8tZXhlYyIpID09IDApIHsKKyAgICAgICAgICAgIHRlc3Rfbm9fZXhlY19fID0gMTsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoYXJndltpXSwgIi0tbm8tc3VtbWFyeSIpID09IDApIHsKKyAgICAgICAgICAgIHRlc3Rfbm9fc3VtbWFyeV9fID0gMTsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoYXJndltpXSwgIi0tbGlzdCIpID09IDAgfHwKKyAgICAgICAgICAgICAgICAgICBzdHJjbXAoYXJndltpXSwgIi1sIikgPT0gMCkgeworICAgICAgICAgICAgdGVzdF9saXN0X25hbWVzX18oKTsKKyAgICAgICAgICAgIGV4aXQoMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBVbnJlY29nbml6ZWQgb3B0aW9uICclcydcbiIsIGFyZ3ZbMF0sIGFyZ3ZbaV0pOworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJUcnkgJyVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iLCBhcmd2WzBdKTsKKyAgICAgICAgICAgIGV4aXQoMik7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiBkZWZpbmVkKENVVEVTVF9XSU5fXykKKyAgICBTZXRVbmhhbmRsZWRFeGNlcHRpb25GaWx0ZXIodGVzdF9leGNlcHRpb25fZmlsdGVyX18pOworI2VuZGlmCisKKyAgICAvKiBDb3VudCBhbGwgdGVzdCB1bml0cyAqLworICAgIHRlc3RfY291bnRfXyA9IDA7CisgICAgZm9yIChpID0gMDsgdGVzdF9saXN0X19baV0uZnVuYyAhPSBOVUxMOyBpKyspCisgICAgICAgIHRlc3RfY291bnRfXysrOworCisgICAgLyogUnVuIHRoZSB0ZXN0cyAqLworICAgIGlmIChuID09IDApIHsKKyAgICAgICAgLyogUnVuIGFsbCB0ZXN0cyAqLworICAgICAgICBmb3IgKGkgPSAwOyB0ZXN0X2xpc3RfX1tpXS5mdW5jICE9IE5VTEw7IGkrKykKKyAgICAgICAgICAgIHRlc3RfcnVuX18oJnRlc3RfbGlzdF9fW2ldKTsKKyAgICB9IGVsc2UgaWYgKCF0ZXN0X3NraXBfbW9kZV9fKSB7CisgICAgICAgIC8qIFJ1biB0aGUgbGlzdGVkIHRlc3RzICovCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAgICAgICB0ZXN0X3J1bl9fKHRlc3RzW2ldKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBSdW4gYWxsIHRlc3RzIGV4Y2VwdCB0aG9zZSBsaXN0ZWQgKi8KKyAgICAgICAgZm9yIChpID0gMDsgdGVzdF9saXN0X19baV0uZnVuYyAhPSBOVUxMOyBpKyspIHsKKyAgICAgICAgICAgIGludCB3YW50X3NraXAgPSAwOworICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG47IGorKykgeworICAgICAgICAgICAgICAgIGlmICh0ZXN0c1tqXSA9PSAmdGVzdF9saXN0X19baV0pIHsKKyAgICAgICAgICAgICAgICAgICAgd2FudF9za2lwID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF3YW50X3NraXApCisgICAgICAgICAgICAgICAgdGVzdF9ydW5fXygmdGVzdF9saXN0X19baV0pOworICAgICAgICB9CisgICAgfQorCisgICAgLyogV3JpdGUgYSBzdW1tYXJ5ICovCisgICAgaWYgKCF0ZXN0X25vX3N1bW1hcnlfXyAmJiB0ZXN0X3ZlcmJvc2VfbGV2ZWxfXyA+PSAxKSB7CisgICAgICAgIHRlc3RfcHJpbnRfaW5fY29sb3JfXyhDVVRFU1RfQ09MT1JfREVGQVVMVF9JTlRFTlNJVkVfXywgIlxuU3VtbWFyeTpcbiIpOworCisgICAgICAgIGlmICh0ZXN0X3ZlcmJvc2VfbGV2ZWxfXyA+PSAzKSB7CisgICAgICAgICAgICBwcmludGYoIiAgQ291bnQgb2YgYWxsIHVuaXQgdGVzdHM6ICAgICAlNGRcbiIsIHRlc3RfY291bnRfXyk7CisgICAgICAgICAgICBwcmludGYoIiAgQ291bnQgb2YgcnVuIHVuaXQgdGVzdHM6ICAgICAlNGRcbiIsCisgICAgICAgICAgICAgICAgICAgdGVzdF9zdGF0X3J1bl91bml0c19fKTsKKyAgICAgICAgICAgIHByaW50ZigiICBDb3VudCBvZiBmYWlsZWQgdW5pdCB0ZXN0czogICU0ZFxuIiwKKyAgICAgICAgICAgICAgICAgICB0ZXN0X3N0YXRfZmFpbGVkX3VuaXRzX18pOworICAgICAgICAgICAgcHJpbnRmKCIgIENvdW50IG9mIHNraXBwZWQgdW5pdCB0ZXN0czogJTRkXG4iLAorICAgICAgICAgICAgICAgICAgIHRlc3RfY291bnRfXyAtIHRlc3Rfc3RhdF9ydW5fdW5pdHNfXyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodGVzdF9zdGF0X2ZhaWxlZF91bml0c19fID09IDApIHsKKyAgICAgICAgICAgIHRlc3RfcHJpbnRfaW5fY29sb3JfXyhDVVRFU1RfQ09MT1JfR1JFRU5fSU5URU5TSVZFX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgU1VDQ0VTUzogQWxsIHVuaXQgdGVzdHMgaGF2ZSBwYXNzZWQuXG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RfcHJpbnRfaW5fY29sb3JfXygKKyAgICAgICAgICAgICAgICBDVVRFU1RfQ09MT1JfUkVEX0lOVEVOU0lWRV9fLAorICAgICAgICAgICAgICAgICIgIEZBSUxFRDogJWQgb2YgJWQgdW5pdCB0ZXN0cyBoYXZlIGZhaWxlZC5cbiIsCisgICAgICAgICAgICAgICAgdGVzdF9zdGF0X2ZhaWxlZF91bml0c19fLCB0ZXN0X3N0YXRfcnVuX3VuaXRzX18pOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHRlc3RzICE9IE5VTEwpCisgICAgICAgIGZyZWUoKHZvaWQgKil0ZXN0cyk7CisKKyAgICByZXR1cm4gKHRlc3Rfc3RhdF9mYWlsZWRfdW5pdHNfXyA9PSAwKSA/IDAgOiAxOworfQorCisjZW5kaWYgLyogI2lmbmRlZiBURVNUX05PX01BSU4gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogI2lmbmRlZiBDVVRFU1RfSF9fICovCmRpZmYgLS1naXQgYS90ZXN0L2RhdGF0eXBlc19kcml2ZXIuYyBiL3Rlc3QvZGF0YXR5cGVzX2RyaXZlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTMxNWI2Li4wMDAwMDAwCi0tLSBhL3Rlc3QvZGF0YXR5cGVzX2RyaXZlci5jCisrKyAvZGV2L251bGwKQEAgLTEsMjM3ICswLDAgQEAKLS8qCi0gKiBkYXRhdHlwZXNfZHJpdmVyLmMKLSAqCi0gKiBhIHRlc3QgZHJpdmVyIGZvciBjcnlwdG8vbWF0aCBkYXRhdHlwZXMKLSAqCi0gKiBEYXZpZCBBLiBNY0dyZXcKLSAqIENpc2NvIFN5c3RlbXMsIEluYy4KLSAqLwotCi0vKgotICoJCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSwgQ2lzY28gU3lzdGVtcywgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAKLSAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogCi0gKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICovCi0KLQotI2luY2x1ZGUgPHN0ZGlvLmg+ICAgICAgICAgICAgLyogZm9yIHByaW50ZigpICovCi0jaW5jbHVkZSA8c3RyaW5nLmg+ICAgICAgICAgICAvKiBmb3Igc3RybGVuKCkgKi8KLSNpbmNsdWRlICJkYXRhdHlwZXMuaCIKLQotdm9pZAotYnl0ZV9vcmRlcigpOwotCi12b2lkCi10ZXN0X2hleF9zdHJpbmdfZnVuY3MoKTsKLQotdm9pZAotcHJpbnRfc3RyaW5nKG9jdGV0X3QgKnMpOwotCi12b2lkCi10ZXN0X2Jzd2FwKCk7Ci0KLWludAotbWFpbiAoKSB7Ci0gIAotICAvKgotICAgKiB0aGlzIHByb2dyYW0gaW5jbHVkZXMgdmFyaW91cyBhbmQgc3VuZHJ5IHRlc3RzIGZvciBmdW5kYW1lbnRhbAotICAgKiBkYXRhdHlwZXMuICBpdCdzIGEgZ3JhYi1iYWcgb2YgdGhyb3dhd2F5IGNvZGUsIHJldGFpbmVkIG9ubHkgaW4KLSAgICogY2FzZSBvZiBmdXR1cmUgcHJvYmxlbXMKLSAgICovCi0KLSAgaW50IGksIGo7Ci0gIHYxMjhfdCB4OwotICBvY3RldF90ICpyID0gCi0gICAgIlRoZSBNb3ZpbmcgRmluZ2VyIHdyaXRlczsgYW5kLCBoYXZpbmcgd3JpdCxcbiIKLSAgICAiTW92ZXMgb246IG5vciBhbGwgdGh5IFBpZXR5IG5vciBXaXRcbiIKLSAgICAiU2hhbGwgbHVyZSBpdCBiYWNrIHRvIGNhbmNlbCBoYWxmIGEgTGluZSxcbiIKLSAgICAiTm9yIGFsbCB0aHkgVGVhcnMgd2FzaCBvdXQgYSBXb3JkIG9mIGl0LiI7Ci0gIG9jdGV0X3QgKnMgPSAiaW5jb21wbGV0IjsgCi0gCi0gIHByaW50X3N0cmluZyhyKTsKLSAgcHJpbnRfc3RyaW5nKHMpOwotIAotICBieXRlX29yZGVyKCk7Ci0gIHRlc3RfaGV4X3N0cmluZ19mdW5jcygpOwotCi0gIGZvciAoaj0wOyBqIDwgMTI4OyBqKyspIHsKLSAgICB2MTI4X3NldF90b196ZXJvKCZ4KTsKLSAgICAvKiAgICAgIHgudjMyWzBdID0gKDEgPDwgaik7ICovCi0gICAgdjEyOF9zZXRfYml0KCZ4LCBqKTsKLSAgICBwcmludGYoIiVzXG4iLCB2MTI4X2JpdF9zdHJpbmcoJngpKTsgCi0gICAgdjEyOF9jbGVhcl9iaXQoJngsIGopOwotICAgIHByaW50ZigiJXNcbiIsIHYxMjhfYml0X3N0cmluZygmeCkpOyAKLSAgICAKLSAgfQotCi0gIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0gIHYxMjhfc2V0X3RvX3plcm8oJngpOwotICBmb3IgKGk9MDsgaSA8IDEyODsgaSsrKSB7Ci0gICAgdjEyOF9zZXRfYml0KCZ4LCBpKTsKLSAgfQotICBwcmludGYoIiVzXG4iLCB2MTI4X2JpdF9zdHJpbmcoJngpKTsgCi0KLSAgcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLSAgdjEyOF9zZXRfdG9femVybygmeCk7Ci0gIHYxMjhfc2V0X2JpdCgmeCwgMCk7Ci0gIGZvciAoaT0wOyBpIDwgMTI4OyBpKyspIHsKLSAgICAgIHByaW50ZigiJXNcbiIsIHYxMjhfYml0X3N0cmluZygmeCkpOyAKLSAgICB2MTI4X3JpZ2h0X3NoaWZ0KCZ4LCAxKTsKLSAgfQotICBwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICB2MTI4X3NldF90b196ZXJvKCZ4KTsKLSAgdjEyOF9zZXRfYml0KCZ4LCAxMjcpOwotICBmb3IgKGk9MDsgaSA8IDEyODsgaSsrKSB7Ci0gICAgICBwcmludGYoIiVzXG4iLCB2MTI4X2JpdF9zdHJpbmcoJngpKTsgCi0gICAgdjEyOF9sZWZ0X3NoaWZ0KCZ4LCAxKTsKLSAgfQotICBwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICBmb3IgKGk9MDsgaSA8IDEyODsgaSsrKSB7Ci0gICAgdjEyOF9zZXRfdG9femVybygmeCk7Ci0gICAgdjEyOF9zZXRfYml0KCZ4LCAxMjcpOwotICAgIHYxMjhfbGVmdF9zaGlmdCgmeCwgaSk7Ci0gICAgICBwcmludGYoIiVzXG4iLCB2MTI4X2JpdF9zdHJpbmcoJngpKTsgCi0gIH0KLSAgcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLSAgdjEyOF9zZXRfdG9femVybygmeCk7Ci0gIGZvciAoaT0wOyBpIDwgMTI4OyBpKz0yKSB7Ci0gICAgdjEyOF9zZXRfYml0KCZ4LCBpKTsKLSAgfQotICBwcmludGYoImJpdF9zdHJpbmc6IHsgJXMgfVxuIiwgdjEyOF9iaXRfc3RyaW5nKCZ4KSk7IAotICBwcmludGYoImdldF9iaXQ6ICAgIHsgIik7ICAgCi0gIGZvciAoaT0wOyBpIDwgMTI4OyBpKyspIHsKLSAgICBpZiAodjEyOF9nZXRfYml0KCZ4LCBpKSA9PSAxKQotICAgICAgcHJpbnRmKCIxIik7Ci0gICAgZWxzZQotICAgICAgcHJpbnRmKCIwIik7Ci0gIH0KLSAgcHJpbnRmKCIgfSBcbiIpOwotCi0gIHRlc3RfYnN3YXAoKTsKLQotICByZXR1cm4gMDsKLX0KLQotCi0vKiBieXRlX29yZGVyKCkgcHJpbnRzIG91dCBieXRlIG9yZGVyaW5nIG9mIGRhdGF0eXBlcyAqLwotCi12b2lkCi1ieXRlX29yZGVyKCkgewotICBpbnQgaTsKLSAgdjEyOF90IGU7Ci0jaWYgMAotICB2MTZfdCBiOwotICB2MzJfdCBjOwotICB2NjRfdCBkOwotCi0gIGZvciAoaT0wOyBpIDwgc2l6ZW9mKGIpOyBpKyspCi0gICAgYi5vY3RldFtpXSA9IGk7Ci0gIGZvciAoaT0wOyBpIDwgc2l6ZW9mKGMpOyBpKyspCi0gICAgYy5vY3RldFtpXSA9IGk7Ci0gIGZvciAoaT0wOyBpIDwgc2l6ZW9mKGQpOyBpKyspCi0gICAgZC5vY3RldFtpXSA9IGk7Ci0gIAotICBwcmludGYoInYxMjhfdDpcdCVzXG4iLCB2MTI4X2hleF9zdHJpbmcoJmUpKTsKLSAgcHJpbnRmKCJ2NjRfdDpcdCVzXG4iLCB2NjRfaGV4X3N0cmluZygmZCkpOwotICBwcmludGYoInYzMl90Olx0JXNcbiIsIHYzMl9oZXhfc3RyaW5nKGMpKTsKLSAgcHJpbnRmKCJ2MTZfdDpcdCVzXG4iLCB2MTZfaGV4X3N0cmluZyhiKSk7Ci0KLSAgYy52YWx1ZSA9IDB4MDEwMjAzMDQ7Ci0gIHByaW50ZigidjMyX3Q6XHQlc1xuIiwgdjMyX2hleF9zdHJpbmcoYykpOwotICBiLnZhbHVlID0gMHgwMTAyOwotICBwcmludGYoInYxNl90Olx0JXNcbiIsIHYxNl9oZXhfc3RyaW5nKGIpKTsKLQotICBwcmludGYoInVpbnQxNl90IG9yZGVyaW5nOlxuIik7Ci0KLSAgYy52YWx1ZSA9IDB4MDAwMTAwMDI7Ci0gIHByaW50ZigidjMyX3Q6XHQleCV4XG4iLCBjLnYxNlswXSwgYy52MTZbMV0pOwotI2VuZGlmIAotCi0gIHByaW50ZigiYnl0ZSBvcmRlcmluZyBvZiBjcnlwdG8vbWF0aCBkYXRhdHlwZXM6XG4iKTsKLSAgZm9yIChpPTA7IGkgPCBzaXplb2YoZSk7IGkrKykKLSAgICBlLm9jdGV0W2ldID0gaTsKLSAgcHJpbnRmKCJ2MTI4X3Q6ICVzXG4iLCB2MTI4X2hleF9zdHJpbmcoJmUpKTsKLSAgCi19Ci0KLXZvaWQKLXRlc3RfaGV4X3N0cmluZ19mdW5jcygpIHsKLSAgb2N0ZXRfdCBoZXgxW10gPSAiYWJhZGNhZmUiOwotICBvY3RldF90IGhleDJbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmcXFxcXEiOwotICBvY3RldF90IHJhd1sxMF07Ci0gIGludCBsZW47Ci0KLSAgbGVuID0gaGV4X3N0cmluZ190b19vY3RldF9zdHJpbmcocmF3LCBoZXgxLCBzdHJsZW4oaGV4MSkpOwotICBwcmludGYoImNvbXB1dGVkIGxlbmd0aDogJWRcdHN0cmluZzogJXNcbiIsIGxlbiwKLQkgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcocmF3LCBsZW4pKTsKLSAgcHJpbnRmKCJleHBlY3RlZCBsZW5ndGg6ICV1XHRzdHJpbmc6ICVzXG4iLCAodW5zaWduZWQpc3RybGVuKGhleDEpLCBoZXgxKTsKLQotICBsZW4gPSBoZXhfc3RyaW5nX3RvX29jdGV0X3N0cmluZyhyYXcsIGhleDIsIHN0cmxlbihoZXgyKSk7Ci0gIHByaW50ZigiY29tcHV0ZWQgbGVuZ3RoOiAlZFx0c3RyaW5nOiAlc1xuIiwgbGVuLAotCSBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhyYXcsIGxlbikpOwotICBwcmludGYoImV4cGVjdGVkIGxlbmd0aDogJWRcdHN0cmluZzogJXNcbiIsIDE2LCAiMDEyMzQ1Njc4OWFiY2RlZiIpOwotCi19Ci0KLXZvaWQKLXByaW50X3N0cmluZyhvY3RldF90ICpzKSB7Ci0gIGludCBpOyAgCi0gIHByaW50ZigiJXNcbiIsIHMpOwotICBwcmludGYoInN0cmxlbihzKSA9ICV1XG4iLCAodW5zaWduZWQpc3RybGVuKHMpKTsKLSAgcHJpbnRmKCJ7ICIpOwotICBmb3IgKGk9MDsgaSA8IHN0cmxlbihzKTsgaSsrKSB7Ci0gICAgcHJpbnRmKCIweCV4LCAiLCBzW2ldKTsKLSAgICBpZiAoKChpKzEpICUgOCkgPT0gMCkKLSAgICAgIHByaW50ZigiXG4gICAiKTsKLSAgfQotICBwcmludGYoIn1cbiIpOwotfQotCi12b2lkCi10ZXN0X2Jzd2FwKCkgewotICB1aW50MzJfdCB4ID0gMHgxMTIyMzM0NDsKLSAgdWludDY0X3QgeSA9IDB4MTEyMjMzNDQ1NTY2Nzc4OExMOwotCi0gIHByaW50ZigiYmVmb3JlOiAlMHhcbmFmdGVyOiAgJTB4XG4iLCB4LCBic3dhcF8zMih4KSk7Ci0gIHByaW50ZigiYmVmb3JlOiAlMGxseFxuYWZ0ZXI6ICAlMGxseFxuIiwgeSwgYnN3YXBfNjQoeSkpOwotCi0gIHkgPSAxMjM0OwotCi0gIHByaW50ZigiMTIzNDogJTBsbHhcbiIsIHkpOwotICBwcmludGYoImFzIG9jdGV0IHN0cmluZzogJXNcbiIsIAotCSBvY3RldF9zdHJpbmdfaGV4X3N0cmluZygob2N0ZXRfdCAqKSAmeSwgOCkpOwotICB5ID0gYnN3YXBfNjQoeSk7Ci0gIHByaW50ZigiYnN3YXBwZWQgb2N0ZXQgc3RyaW5nOiAlc1xuIiwgCi0JIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKChvY3RldF90ICopICZ5LCA4KSk7Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3QvZHRsc19zcnRwX2RyaXZlci5jIGIvdGVzdC9kdGxzX3NydHBfZHJpdmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY0ZDBhMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvZHRsc19zcnRwX2RyaXZlci5jCkBAIC0wLDAgKzEsMjYxIEBACisvKgorICogZHRsc19zcnRwX2RyaXZlci5jCisgKgorICogdGVzdCBkcml2ZXIgZm9yIERUTFMtU1JUUCBmdW5jdGlvbnMKKyAqCisgKiBEYXZpZCBNY0dyZXcKKyAqIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqLworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxNyBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPiAgICAvKiBmb3IgcHJpbnRmKCkgICAgICAgICAgKi8KKyNpbmNsdWRlICJnZXRvcHRfcy5oIiAvKiBmb3IgbG9jYWwgZ2V0b3B0KCkgICAgKi8KKyNpbmNsdWRlICJzcnRwX3ByaXYuaCIKKworc3J0cF9lcnJfc3RhdHVzX3QgdGVzdF9kdGxzX3NydHAodm9pZCk7CisKK3NydHBfaGRyX3QgKnNydHBfY3JlYXRlX3Rlc3RfcGFja2V0KGludCBwa3Rfb2N0ZXRfbGVuLCB1aW50MzJfdCBzc3JjKTsKKwordm9pZCB1c2FnZShjaGFyICpwcm9nX25hbWUpCit7CisgICAgcHJpbnRmKCJ1c2FnZTogJXMgWyAtdCBdWyAtYyBdWyAtdiBdWy1kIDxkZWJ1Z19tb2R1bGU+IF0qIFsgLWwgXVxuIgorICAgICAgICAgICAiICAtZCA8bW9kPiAgIHR1cm4gb24gZGVidWdnaW5nIG1vZHVsZSA8bW9kPlxuIgorICAgICAgICAgICAiICAtbCAgICAgICAgIGxpc3QgZGVidWdnaW5nIG1vZHVsZXNcbiIsCisgICAgICAgICAgIHByb2dfbmFtZSk7CisgICAgZXhpdCgxKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICB1bnNpZ25lZCBkb19saXN0X21vZHMgPSAwOworICAgIGludCBxOworICAgIHNydHBfZXJyX3N0YXR1c190IGVycjsKKworICAgIHByaW50ZigiZHRsc19zcnRwX2RyaXZlclxuIik7CisKKyAgICAvKiBpbml0aWFsaXplIHNydHAgbGlicmFyeSAqLworICAgIGVyciA9IHNydHBfaW5pdCgpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgcHJpbnRmKCJlcnJvcjogc3J0cCBpbml0IGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWRcbiIsIGVycik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgLyogcHJvY2VzcyBpbnB1dCBhcmd1bWVudHMgKi8KKyAgICB3aGlsZSAoMSkgeworICAgICAgICBxID0gZ2V0b3B0X3MoYXJnYywgYXJndiwgImxkOiIpOworICAgICAgICBpZiAocSA9PSAtMSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzd2l0Y2ggKHEpIHsKKyAgICAgICAgY2FzZSAnbCc6CisgICAgICAgICAgICBkb19saXN0X21vZHMgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2QnOgorICAgICAgICAgICAgZXJyID0gc3J0cF9jcnlwdG9fa2VybmVsX3NldF9kZWJ1Z19tb2R1bGUob3B0YXJnX3MsIDEpOworICAgICAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgICAgIHByaW50ZigiZXJyb3I6IHNldCBkZWJ1ZyBtb2R1bGUgKCVzKSBmYWlsZWRcbiIsIG9wdGFyZ19zKTsKKyAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB1c2FnZShhcmd2WzBdKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChkb19saXN0X21vZHMpIHsKKyAgICAgICAgZXJyID0gc3J0cF9jcnlwdG9fa2VybmVsX2xpc3RfZGVidWdfbW9kdWxlcygpOworICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICBwcmludGYoImVycm9yOiBsaXN0IG9mIGRlYnVnIG1vZHVsZXMgZmFpbGVkXG4iKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcmludGYoInRlc3RpbmcgZHRsc19zcnRwLi4uIik7CisgICAgZXJyID0gdGVzdF9kdGxzX3NydHAoKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIHByaW50ZigiXG5lcnJvciAoY29kZSAlZClcbiIsIGVycik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIHByaW50ZigicGFzc2VkXG4iKTsKKworICAgIC8qIHNodXQgZG93biBzcnRwIGxpYnJhcnkgKi8KKyAgICBlcnIgPSBzcnRwX3NodXRkb3duKCk7CisgICAgaWYgKGVycikgeworICAgICAgICBwcmludGYoImVycm9yOiBzcnRwIHNodXRkb3duIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWRcbiIsIGVycik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3NydHBfZXJyX3N0YXR1c190IHRlc3RfZHRsc19zcnRwKHZvaWQpCit7CisgICAgc3J0cF9oZHJfdCAqdGVzdF9wYWNrZXQ7CisgICAgaW50IHRlc3RfcGFja2V0X2xlbiA9IDgwOworICAgIHNydHBfdCBzOworICAgIHNydHBfcG9saWN5X3QgcG9saWN5OworICAgIHVpbnQ4X3Qga2V5W1NSVFBfTUFYX0tFWV9MRU5dOworICAgIHVpbnQ4X3Qgc2FsdFtTUlRQX01BWF9LRVlfTEVOXTsKKyAgICB1bnNpZ25lZCBpbnQga2V5X2xlbiwgc2FsdF9sZW47CisgICAgc3J0cF9wcm9maWxlX3QgcHJvZmlsZTsKKyAgICBzcnRwX2Vycl9zdGF0dXNfdCBlcnI7CisKKyAgICBtZW1zZXQoJnBvbGljeSwgMHgwLCBzaXplb2Yoc3J0cF9wb2xpY3lfdCkpOworCisgICAgLyogY3JlYXRlIGEgJ251bGwnIFNSVFAgc2Vzc2lvbiAqLworICAgIGVyciA9IHNydHBfY3JlYXRlKCZzLCBOVUxMKTsKKyAgICBpZiAoZXJyKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgLyoKKyAgICAgKiB2ZXJpZnkgdGhhdCBwYWNrZXQtcHJvY2Vzc2luZyBmdW5jdGlvbnMgYmVoYXZlIHByb3Blcmx5IC0gd2UKKyAgICAgKiBleHBlY3QgdGhhdCB0aGVzZSBmdW5jdGlvbnMgd2lsbCByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX25vX2N0eAorICAgICAqLworICAgIHRlc3RfcGFja2V0ID0gc3J0cF9jcmVhdGVfdGVzdF9wYWNrZXQoODAsIDB4YTVhNWE1YTUpOworICAgIGlmICh0ZXN0X3BhY2tldCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2FsbG9jX2ZhaWw7CisKKyAgICBlcnIgPSBzcnRwX3Byb3RlY3QocywgdGVzdF9wYWNrZXQsICZ0ZXN0X3BhY2tldF9sZW4pOworICAgIGlmIChlcnIgIT0gc3J0cF9lcnJfc3RhdHVzX25vX2N0eCkgeworICAgICAgICBwcmludGYoIndyb25nIHJldHVybiB2YWx1ZSBmcm9tIHNydHBfcHJvdGVjdCgpIChnb3QgY29kZSAlZClcbiIsIGVycik7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfZmFpbDsKKyAgICB9CisKKyAgICBlcnIgPSBzcnRwX3VucHJvdGVjdChzLCB0ZXN0X3BhY2tldCwgJnRlc3RfcGFja2V0X2xlbik7CisgICAgaWYgKGVyciAhPSBzcnRwX2Vycl9zdGF0dXNfbm9fY3R4KSB7CisgICAgICAgIHByaW50Zigid3JvbmcgcmV0dXJuIHZhbHVlIGZyb20gc3J0cF91bnByb3RlY3QoKSAoZ290IGNvZGUgJWQpXG4iLCBlcnIpOworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2ZhaWw7CisgICAgfQorCisgICAgZXJyID0gc3J0cF9wcm90ZWN0X3J0Y3AocywgdGVzdF9wYWNrZXQsICZ0ZXN0X3BhY2tldF9sZW4pOworICAgIGlmIChlcnIgIT0gc3J0cF9lcnJfc3RhdHVzX25vX2N0eCkgeworICAgICAgICBwcmludGYoIndyb25nIHJldHVybiB2YWx1ZSBmcm9tIHNydHBfcHJvdGVjdF9ydGNwKCkgKGdvdCBjb2RlICVkKVxuIiwKKyAgICAgICAgICAgICAgIGVycik7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfZmFpbDsKKyAgICB9CisKKyAgICBlcnIgPSBzcnRwX3VucHJvdGVjdF9ydGNwKHMsIHRlc3RfcGFja2V0LCAmdGVzdF9wYWNrZXRfbGVuKTsKKyAgICBpZiAoZXJyICE9IHNydHBfZXJyX3N0YXR1c19ub19jdHgpIHsKKyAgICAgICAgcHJpbnRmKCJ3cm9uZyByZXR1cm4gdmFsdWUgZnJvbSBzcnRwX3VucHJvdGVjdF9ydGNwKCkgKGdvdCBjb2RlICVkKVxuIiwKKyAgICAgICAgICAgICAgIGVycik7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfZmFpbDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHNldCBrZXlzIHRvIGtub3duIHZhbHVlcyBmb3IgdGVzdGluZworICAgICAqLworICAgIHByb2ZpbGUgPSBzcnRwX3Byb2ZpbGVfYWVzMTI4X2NtX3NoYTFfODA7CisgICAga2V5X2xlbiA9IHNydHBfcHJvZmlsZV9nZXRfbWFzdGVyX2tleV9sZW5ndGgocHJvZmlsZSk7CisgICAgc2FsdF9sZW4gPSBzcnRwX3Byb2ZpbGVfZ2V0X21hc3Rlcl9zYWx0X2xlbmd0aChwcm9maWxlKTsKKyAgICBtZW1zZXQoa2V5LCAweGZmLCBrZXlfbGVuKTsKKyAgICBtZW1zZXQoc2FsdCwgMHhlZSwgc2FsdF9sZW4pOworICAgIHNydHBfYXBwZW5kX3NhbHRfdG9fa2V5KGtleSwga2V5X2xlbiwgc2FsdCwgc2FsdF9sZW4pOworICAgIHBvbGljeS5rZXkgPSBrZXk7CisKKyAgICAvKiBpbml0aWFsaXplIFNSVFAgcG9saWN5IGZyb20gcHJvZmlsZSAgKi8KKyAgICBlcnIgPSBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Zyb21fcHJvZmlsZV9mb3JfcnRwKCZwb2xpY3kucnRwLCBwcm9maWxlKTsKKyAgICBpZiAoZXJyKQorICAgICAgICByZXR1cm4gZXJyOworICAgIGVyciA9IHNydHBfY3J5cHRvX3BvbGljeV9zZXRfZnJvbV9wcm9maWxlX2Zvcl9ydGNwKCZwb2xpY3kucnRjcCwgcHJvZmlsZSk7CisgICAgaWYgKGVycikKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICBwb2xpY3kuc3NyYy50eXBlID0gc3NyY19hbnlfaW5ib3VuZDsKKyAgICBwb2xpY3kuZWt0ID0gTlVMTDsKKyAgICBwb2xpY3kud2luZG93X3NpemUgPSAxMjg7CisgICAgcG9saWN5LmFsbG93X3JlcGVhdF90eCA9IDA7CisgICAgcG9saWN5Lm5leHQgPSBOVUxMOworCisgICAgZXJyID0gc3J0cF9hZGRfc3RyZWFtKHMsICZwb2xpY3kpOworICAgIGlmIChlcnIpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICBlcnIgPSBzcnRwX2RlYWxsb2Mocyk7CisgICAgaWYgKGVycikKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIGZyZWUodGVzdF9wYWNrZXQpOworCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKworLyoKKyAqIHNydHBfY3JlYXRlX3Rlc3RfcGFja2V0KGxlbiwgc3NyYykgcmV0dXJucyBhIHBvaW50ZXIgdG8gYQorICogKG1hbGxvY2VkKSBleGFtcGxlIFJUUCBwYWNrZXQgd2hvc2UgZGF0YSBmaWVsZCBoYXMgdGhlIGxlbmd0aCBnaXZlbgorICogYnkgcGt0X29jdGV0X2xlbiBhbmQgdGhlIFNTUkMgdmFsdWUgc3NyYy4gIFRoZSB0b3RhbCBsZW5ndGggb2YgdGhlCisgKiBwYWNrZXQgaXMgdHdlbHZlIG9jdGV0cyBsb25nZXIsIHNpbmNlIHRoZSBoZWFkZXIgaXMgYXQgdGhlCisgKiBiZWdpbm5pbmcuICBUaGVyZSBpcyByb29tIGF0IHRoZSBlbmQgb2YgdGhlIHBhY2tldCBmb3IgYSB0cmFpbGVyLAorICogYW5kIHRoZSBmb3VyIG9jdGV0cyBmb2xsb3dpbmcgdGhlIHBhY2tldCBhcmUgZmlsbGVkIHdpdGggMHhmZgorICogdmFsdWVzIHRvIGVuYWJsZSB0ZXN0aW5nIGZvciBvdmVyd3JpdGVzLgorICoKKyAqIG5vdGUgdGhhdCB0aGUgbG9jYXRpb24gb2YgdGhlIHRlc3QgcGFja2V0IGNhbiAoYW5kIHNob3VsZCkgYmUKKyAqIGRlYWxsb2NhdGVkIHdpdGggdGhlIGZyZWUoKSBjYWxsIG9uY2UgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKyAqLworCitzcnRwX2hkcl90ICpzcnRwX2NyZWF0ZV90ZXN0X3BhY2tldChpbnQgcGt0X29jdGV0X2xlbiwgdWludDMyX3Qgc3NyYykKK3sKKyAgICBpbnQgaTsKKyAgICB1aW50OF90ICpidWZmZXI7CisgICAgc3J0cF9oZHJfdCAqaGRyOworICAgIGludCBieXRlc19pbl9oZHIgPSAxMjsKKworICAgIC8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGVzdCBwYWNrZXQgKi8KKyAgICBoZHIgPSBtYWxsb2MocGt0X29jdGV0X2xlbiArIGJ5dGVzX2luX2hkciArIFNSVFBfTUFYX1RSQUlMRVJfTEVOICsgNCk7CisgICAgaWYgKCFoZHIpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaGRyLT52ZXJzaW9uID0gMjsgICAgICAgICAgICAvKiBSVFAgdmVyc2lvbiB0d28gICAgICovCisgICAgaGRyLT5wID0gMDsgICAgICAgICAgICAgICAgICAvKiBubyBwYWRkaW5nIG5lZWRlZCAgICovCisgICAgaGRyLT54ID0gMDsgICAgICAgICAgICAgICAgICAvKiBubyBoZWFkZXIgZXh0ZW5zaW9uICovCisgICAgaGRyLT5jYyA9IDA7ICAgICAgICAgICAgICAgICAvKiBubyBDU1JDcyAgICAgICAgICAgICovCisgICAgaGRyLT5tID0gMDsgICAgICAgICAgICAgICAgICAvKiBtYXJrZXIgYml0ICAgICAgICAgICovCisgICAgaGRyLT5wdCA9IDB4ZjsgICAgICAgICAgICAgICAvKiBwYXlsb2FkIHR5cGUgICAgICAgICovCisgICAgaGRyLT5zZXEgPSBodG9ucygweDEyMzQpOyAgICAvKiBzZXF1ZW5jZSBudW1iZXIgICAgICovCisgICAgaGRyLT50cyA9IGh0b25sKDB4ZGVjYWZiYWQpOyAvKiB0aW1lc3RhbXAgICAgICAgICAgICovCisgICAgaGRyLT5zc3JjID0gaHRvbmwoc3NyYyk7ICAgICAvKiBzeW5jaC4gc291cmNlICAgICAgICovCisKKyAgICBidWZmZXIgPSAodWludDhfdCAqKWhkcjsKKyAgICBidWZmZXIgKz0gYnl0ZXNfaW5faGRyOworCisgICAgLyogc2V0IFJUUCBkYXRhIHRvIDB4YWIgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgcGt0X29jdGV0X2xlbjsgaSsrKQorICAgICAgICAqYnVmZmVyKysgPSAweGFiOworCisgICAgLyogc2V0IHBvc3QtZGF0YSB2YWx1ZSB0byAweGZmZmYgdG8gZW5hYmxlIG92ZXJydW4gY2hlY2tpbmcgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgU1JUUF9NQVhfVFJBSUxFUl9MRU4gKyA0OyBpKyspCisgICAgICAgICpidWZmZXIrKyA9IDB4ZmY7CisKKyAgICByZXR1cm4gaGRyOworfQpkaWZmIC0tZ2l0IGEvdGVzdC9nZXRvcHRfcy5jIGIvdGVzdC9nZXRvcHRfcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYmQ3ZjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2dldG9wdF9zLmMKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBnZXRvcHQuYworICoKKyAqIGEgbWluaW1hbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZ2V0b3B0KCkgZnVuY3Rpb24sIHdyaXR0ZW4gc28gdGhhdAorICogdGVzdCBhcHBsaWNhdGlvbnMgdGhhdCB1c2UgdGhhdCBmdW5jdGlvbiBjYW4gcnVuIG9uIG5vbi1QT1NJWAorICogcGxhdGZvcm1zCisgKgorICovCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDE3IENpc2NvIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPiAvKiBmb3IgTlVMTCAqLworCitpbnQgb3B0aW5kX3MgPSAwOworCitjaGFyICpvcHRhcmdfczsKKworI2RlZmluZSBHRVRPUFRfRk9VTkRfV0lUSE9VVF9BUkdVTUVOVCAyCisjZGVmaW5lIEdFVE9QVF9GT1VORF9XSVRIX0FSR1VNRU5UIDEKKyNkZWZpbmUgR0VUT1BUX05PVF9GT1VORCAwCisKK3N0YXRpYyBpbnQgZ2V0b3B0X2NoZWNrX2NoYXJhY3RlcihjaGFyIGMsIGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKyAgICB1bnNpZ25lZCBpbnQgbWF4X3N0cmluZ19sZW4gPSAxMjg7CisKKyAgICB3aGlsZSAoKnN0cmluZyAhPSAwKSB7CisgICAgICAgIGlmIChtYXhfc3RyaW5nX2xlbiA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gR0VUT1BUX05PVF9GT1VORDsKKyAgICAgICAgfQorICAgICAgICBtYXhfc3RyaW5nX2xlbi0tOworICAgICAgICBpZiAoKnN0cmluZysrID09IGMpIHsKKyAgICAgICAgICAgIGlmICgqc3RyaW5nID09ICc6JykgeworICAgICAgICAgICAgICAgIHJldHVybiBHRVRPUFRfRk9VTkRfV0lUSF9BUkdVTUVOVDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdFVE9QVF9GT1VORF9XSVRIT1VUX0FSR1VNRU5UOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBHRVRPUFRfTk9UX0ZPVU5EOworfQorCitpbnQgZ2V0b3B0X3MoaW50IGFyZ2MsIGNoYXIgKmNvbnN0IGFyZ3ZbXSwgY29uc3QgY2hhciAqb3B0c3RyaW5nKQoreworICAgIHdoaWxlIChvcHRpbmRfcyArIDEgPCBhcmdjKSB7CisgICAgICAgIGNoYXIgKnN0cmluZzsKKworICAgICAgICAvKiBtb3ZlICdzdHJpbmcnIG9uIHRvIG5leHQgYXJndW1lbnQgKi8KKyAgICAgICAgb3B0aW5kX3MrKzsKKyAgICAgICAgc3RyaW5nID0gYXJndltvcHRpbmRfc107CisKKyAgICAgICAgaWYgKHN0cmluZyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuICc/JzsgLyogTlVMTCBhcmd1bWVudCBzdHJpbmcgKi8KKworICAgICAgICBpZiAoc3RyaW5nWzBdICE9ICctJykKKyAgICAgICAgICAgIHJldHVybiAtMTsgLyogZm91bmQgYW4gdW5leHBlY3RlZCBjaGFyYWN0ZXIgKi8KKworICAgICAgICBzd2l0Y2ggKGdldG9wdF9jaGVja19jaGFyYWN0ZXIoc3RyaW5nWzFdLCBvcHRzdHJpbmcpKSB7CisgICAgICAgIGNhc2UgR0VUT1BUX0ZPVU5EX1dJVEhfQVJHVU1FTlQ6CisgICAgICAgICAgICBpZiAob3B0aW5kX3MgKyAxIDwgYXJnYykgeworICAgICAgICAgICAgICAgIG9wdGluZF9zKys7CisgICAgICAgICAgICAgICAgb3B0YXJnX3MgPSBhcmd2W29wdGluZF9zXTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nWzFdOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gJz8nOyAvKiBhcmd1bWVudCBtaXNzaW5nICovCisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgR0VUT1BUX0ZPVU5EX1dJVEhPVVRfQVJHVU1FTlQ6CisgICAgICAgICAgICByZXR1cm4gc3RyaW5nWzFdOworICAgICAgICBjYXNlIEdFVE9QVF9OT1RfRk9VTkQ6CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gJz8nOyAvKiBkaWRuJ3QgZmluZCBleHBlY3RlZCBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQpkaWZmIC0tZ2l0IGEvdGVzdC9rZXJuZWxfZHJpdmVyLmMgYi90ZXN0L2tlcm5lbF9kcml2ZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI2ZDRjNS4uMDAwMDAwMAotLS0gYS90ZXN0L2tlcm5lbF9kcml2ZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0vKgotICoga2VybmVsX2RyaXZlci5jCi0gKgotICogYSB0ZXN0IGRyaXZlciBmb3IgdGhlIGNyeXB0b19rZXJuZWwKLSAqCi0gKiBEYXZpZCBBLiBNY0dyZXcKLSAqIENpc2NvIFN5c3RlbXMsIEluYy4KLSAqLwotLyoKLSAqCQotICogQ29weXJpZ2h0KGMpIDIwMDEtMjAwNSBDaXNjbyBTeXN0ZW1zLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIAotICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAKLSAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKLSAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKi8KLQotCi0jaW5jbHVkZSA8c3RkaW8uaD4gICAgICAgICAgIC8qIGZvciBwcmludGYoKSAqLwotI2luY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAgICAvKiBmb3IgZ2V0b3B0KCkgKi8KLSNpbmNsdWRlICJjcnlwdG9fa2VybmVsLmgiCi0KLXZvaWQKLXVzYWdlKGNoYXIgKnByb2dfbmFtZSkgewotICBwcmludGYoInVzYWdlOiAlcyBbIC12IF1bIC1kIGRlYnVnX21vZHVsZSBdKlxuIiwgcHJvZ19uYW1lKTsKLSAgZXhpdCgyNTUpOwotfQotCi1pbnQKLW1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKLSAgZXh0ZXJuIGNoYXIgKm9wdGFyZzsKLSAgY2hhciBxOwotICBpbnQgZG9fdmFsaWRhdGlvbiAgICAgID0gMDsKLSAgZXJyX3N0YXR1c190IHN0YXR1czsKLQotICBpZiAoYXJnYyA9PSAxKQotICAgIHVzYWdlKGFyZ3ZbMF0pOwotCi0gIC8qIGluaXRpYWxpemUga2VybmVsIC0gd2UgbmVlZCB0byBkbyB0aGlzIGJlZm9yZSBhbnl0aGluZyBlbHNlICovIAotICBzdGF0dXMgPSBjcnlwdG9fa2VybmVsX2luaXQoKTsKLSAgaWYgKHN0YXR1cykgewotICAgIHByaW50ZigiZXJyb3I6IGNyeXB0b19rZXJuZWwgaW5pdCBmYWlsZWRcbiIpOwotICAgIGV4aXQoMSk7Ci0gIH0KLSAgcHJpbnRmKCJjcnlwdG9fa2VybmVsIHN1Y2Nlc3NmdWxseSBpbml0YWxpemVkXG4iKTsKLQotICAvKiBwcm9jZXNzIGlucHV0IGFyZ3VtZW50cyAqLwotICB3aGlsZSAoMSkgewotICAgIHEgPSBnZXRvcHQoYXJnYywgYXJndiwgInZkOiIpOwotICAgIGlmIChxID09IC0xKSAKLSAgICAgIGJyZWFrOwotICAgIHN3aXRjaCAocSkgewotICAgIGNhc2UgJ3YnOgotICAgICAgZG9fdmFsaWRhdGlvbiA9IDE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICdkJzoKLSAgICAgIHN0YXR1cyA9IGNyeXB0b19rZXJuZWxfc2V0X2RlYnVnX21vZHVsZShvcHRhcmcsIDEpOwotICAgICAgaWYgKHN0YXR1cykgewotCXByaW50ZigiZXJyb3I6IHNldCBkZWJ1ZyBtb2R1bGUgKCVzKSBmYWlsZWRcbiIsIG9wdGFyZyk7Ci0JZXhpdCgxKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICB1c2FnZShhcmd2WzBdKTsKLSAgICB9ICAgIAotICB9Ci0KLSAgaWYgKGRvX3ZhbGlkYXRpb24pIHsKLSAgICBwcmludGYoImNoZWNraW5nIGNyeXB0b19rZXJuZWwgc3RhdHVzLi4uXG4iKTsKLSAgICBzdGF0dXMgPSBjcnlwdG9fa2VybmVsX3N0YXR1cygpOwotICAgIGlmIChzdGF0dXMpIHsKLSAgICAgIHByaW50ZigiZmFpbGVkXG4iKTsKLSAgICAgIGV4aXQoMSk7Ci0gICAgfQotICAgIHByaW50ZigiY3J5cHRvX2tlcm5lbCBwYXNzZWQgc2VsZi10ZXN0c1xuIik7Ci0gIH0KLQotICBzdGF0dXMgPSBjcnlwdG9fa2VybmVsX3NodXRkb3duKCk7Ci0gIGlmIChzdGF0dXMpIHsKLSAgICBwcmludGYoImVycm9yOiBjcnlwdG9fa2VybmVsIHNodXRkb3duIGZhaWxlZFxuIik7Ci0gICAgZXhpdCgxKTsKLSAgfQotICBwcmludGYoImNyeXB0b19rZXJuZWwgc3VjY2Vzc2Z1bGx5IHNodXQgZG93blxuIik7Ci0gIAotICByZXR1cm4gMDsKLX0KLQotLyoKLSAqIGNyeXB0b19rZXJuZWxfY2lwaGVyX3Rlc3QoKSBpcyBhIHRlc3Qgb2YgdGhlIGNpcGhlciBpbnRlcmZhY2UKLSAqIG9mIHRoZSBjcnlwdG9fa2VybmVsCi0gKi8KLQotZXJyX3N0YXR1c190Ci1jcnlwdG9fa2VybmVsX2NpcGhlcl90ZXN0KCkgewotCi0gIC8qIG5vdCBpbXBsZW1lbnRlZCB5ZXQhICovCi0KLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7Ci19CmRpZmYgLS1naXQgYS90ZXN0L2xmc3IuYyBiL3Rlc3QvbGZzci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOGVhMDJlLi4wMDAwMDAwCi0tLSBhL3Rlc3QvbGZzci5jCisrKyAvZGV2L251bGwKQEAgLTEsMzEwICswLDAgQEAKLS8qCi0gKiBsZnNyLmMKLSAqCi0gKi8KLQotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlICJkYXRhdHlwZXMuaCIKLQotdWludDMyX3QgCi1wYXJpdHkodWludDMyX3QgeCkgewotCi0gIHggXj0gKHggPj4gMTYpOwotICB4IF49ICh4ID4+IDgpOwotICB4IF49ICh4ID4+IDQpOwotICB4IF49ICh4ID4+IDIpOwotICB4IF49ICh4ID4+IDEpOwotCi0gIHJldHVybiB4ICYgMTsKLX0KLQotCi0vKiB0eXBlZGVmIHN0cnVjdCB7ICovCi0vKiAgIHVpbnQzMl90IHJlZ2lzdGVyWzhdOyAqLwotLyogfSBsZnNyX3Q7ICovCi0KLXZvaWQKLWNvbXB1dGVfcGVyaW9kKHVpbnQzMl90IGZlZWRiYWNrX3BvbHlub21pYWwpIHsKLSAgaW50IGk7Ci0gIHYzMl90IGxmc3I7Ci0gIHYzMl90IG1hc2s7Ci0KLSAgbWFzay52YWx1ZSA9IGZlZWRiYWNrX3BvbHlub21pYWw7Ci0gIGxmc3IudmFsdWUgPSAxOwotCi0gIHByaW50ZigicG9seW5vbWlhbDogJXNcdCIsIHYzMl9iaXRfc3RyaW5nKG1hc2spKTsKLQotICBmb3IgKGk9MDsgaSA8IDI1NjsgaSsrKSB7Ci0vKiAgICAgcHJpbnRmKCIlc1xuIiwgdjMyX2JpdF9zdHJpbmcobGZzcikpOyAqLwotICAgIGlmIChwYXJpdHkobWFzay52YWx1ZSAmIGxmc3IudmFsdWUpKQotICAgICAgbGZzci52YWx1ZSA9ICgobGZzci52YWx1ZSA8PCAxKSB8IDEpICYgMHhmZjsKLSAgICBlbHNlCi0gICAgICBsZnNyLnZhbHVlID0gKGxmc3IudmFsdWUgPDwgMSkgJiAweGZmOwotICAgIAotICAgIC8qIG5vdyBoYWx0IGlmIHdlJ3JlIGJhY2sgYXQgdGhlIGluaXRpYWwgc3RhdGUgKi8KLSAgICBpZiAobGZzci52YWx1ZSA9PSAxKSB7Ci0gICAgICBwcmludGYoInBlcmlvZDogJWRcbiIsIGkpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci19Ci0KLXVpbnQzMl90IHBvbHkwID0gMjIzOwotCi0KLXVpbnQzMl90IHBvbHlub21pYWxzWzM5XSA9IHsKLTMxLCAKLTQ3LAotNTUsCi01OSwKLTYxLAotNzksCi04NywKLTkxLAotMTAzLAotMTA3LAotMTA5LAotMTE1LAotMTE3LAotMTIxLAotMTQzLAotMTUxLAotMTU3LAotMTY3LAotMTcxLAotMTczLAotMTc5LAotMTgxLAotMTg1LAotMTk5LAotMjAzLAotMjA1LAotMjExLAotMjEzLAotMjI3LAotMjI5LAotMjMzLCAKLTI0MSwKLTEyNywKLTE5MSwKLTIyMywgCi0yMzksCi0yNDcsCi0yNTEsCi0yNTMgCi19OwotCi1jaGFyIGJpbmFyeV9zdHJpbmdbMzJdOwotCi1jaGFyICoKLXUzMl9iaXRfc3RyaW5nKHVpbnQzMl90IHgsIHVuc2lnbmVkIGludCBsZW5ndGgpIHsKLSAgdW5zaWduZWQgaW50IG1hc2s7Ci0gIGludCBpbmRleDsKLSAKLSAgbWFzayA9IDEgPDwgbGVuZ3RoOwotICBpbmRleCA9IDA7Ci0gIGZvciAoOyBtYXNrID4gMDsgbWFzayA+Pj0gMSkKLSAgICBpZiAoKHggJiBtYXNrKSA9PSAwKQotICAgICAgYmluYXJ5X3N0cmluZ1tpbmRleCsrXSA9ICcwJzsKLSAgICBlbHNlCi0gICAgICBiaW5hcnlfc3RyaW5nW2luZGV4KytdID0gJzEnOwotCi0gIGJpbmFyeV9zdHJpbmdbaW5kZXgrK10gPSAwOyAgLyogTlVMTCB0ZXJtaW5hdGUgc3RyaW5nICovCi0gIHJldHVybiBiaW5hcnlfc3RyaW5nOwotfQotCi1leHRlcm4gaW50IG9jdGV0X3dlaWdodFsyNTZdOwotCi11bnNpZ25lZCBpbnQgCi13ZWlnaHQodWludDMyX3QgcG9seSkgewotICBpbnQgd3QgPSAwOwotCi0gIC8qIG5vdGU6IGVuZGlhbi1uZXNzIG1ha2VzIG5vIGRpZmZlcmVuY2UgKi8KLSAgd3QgKz0gb2N0ZXRfd2VpZ2h0W3BvbHkgICAgICAgICYgMHhmZl07IAotICB3dCArPSBvY3RldF93ZWlnaHRbKHBvbHkgPj4gOCkgJiAweGZmXTsKLSAgd3QgKz0gb2N0ZXRfd2VpZ2h0Wyhwb2x5ID4+IDE2KSAmIDB4ZmZdOwotICB3dCArPSBvY3RldF93ZWlnaHRbKHBvbHkgPj4gMjQpXTsKLQotICByZXR1cm4gd3Q7Ci19Ci0KLSNkZWZpbmUgTUFYX1BFUklPRCA2NTUzNQotCi0jZGVmaW5lIGRlYnVnX3ByaW50IDAKLQotaW50Ci1wZXJpb2QodWludDMyX3QgcG9seSkgewotICBpbnQgaTsKLSAgdWludDMyX3QgeDsKLQotCi0gIC8qIHNldCBsZnNyIHRvIDEgKi8KLSAgeCA9IDE7Ci0jaWYgZGVidWdfcHJpbnQKLSAgcHJpbnRmKCIlZDpcdCVzXG4iLCAwLCB1MzJfYml0X3N0cmluZyh4LDgpKTsKLSNlbmRpZgotICBmb3IgKGk9MTsgaSA8IE1BWF9QRVJJT0Q7IGkrKykgewotICAgIGlmICh4ICYgMSkgCi0gICAgICB4ID0gKHggPj4gMSkgXiBwb2x5OwotICAgIGVsc2UKLSAgICAgIHggPSAoeCA+PiAxKTsKLQotI2lmIGRlYnVnX3ByaW50Ci0gICAgLyogcHJpbnQgZm9yIGEgc2FuaXR5IGNoZWNrICovCi0gICAgcHJpbnRmKCIlZDpcdCVzXG4iLCBpLCB1MzJfYml0X3N0cmluZyh4LDgpKTsKLSNlbmRpZgotCi0gICAgLyogY2hlY2sgZm9yIHJldHVybiB0byBvcmlnaW5hbCB2YWx1ZSAqLwotICAgIGlmICh4ID09IDEpCi0gICAgICByZXR1cm4gaTsKLSAgfQotICByZXR1cm4gaTsKLX0KLQotLyoKLSAqIHdlaWdodCBkaXN0cmlidXRpb24gY29tcHV0ZXMgdGhlIHdlaWdodCBkaXN0cmlidXRpb24gb2YgdGhlCi0gKiBjb2RlIGdlbmVyYXRlZCBieSB0aGUgcG9seW5vbWlhbCBwb2x5Ci0gKi8KLQotI2RlZmluZSBNQVhfTEVOICAgIDgKLSNkZWZpbmUgTUFYX1dFSUdIVCAoMSA8PCBNQVhfTEVOKQotCi1pbnQgQVtNQVhfV0VJR0hUKzFdOwotCi12b2lkCi13ZWlnaHRfZGlzdHJpYnV0aW9uMih1aW50MzJfdCBwb2x5LCBpbnQgKkEpIHsKLSAgaW50IGk7Ci0gIHVpbnQzMl90IHg7Ci0KLSAgLyogemVyb2l6ZSBhcnJheSAqLwotICBmb3IgKGk9MDsgaSA8IE1BWF9XRUlHSFQrMTsgaSsrKQotICAgIEFbaV0gPSAwOwotCi0gIC8qIGxvb3Agb3ZlciBhbGwgaW5wdXQgc2VxdWVuY2VzICovCi0gIAotICAKLSAgLyogc2V0IGxmc3IgdG8gMSAqLwotICB4ID0gMTsKLSNpZiBkZWJ1Z19wcmludAotICBwcmludGYoIiVkOlx0JXNcbiIsIDAsIHUzMl9iaXRfc3RyaW5nKHgsOCkpOwotI2VuZGlmCi0gIGZvciAoaT0xOyBpIDwgTUFYX1BFUklPRDsgaSsrKSB7Ci0gICAgaWYgKHggJiAxKSAKLSAgICAgIHggPSAoeCA+PiAxKSBeIHBvbHk7Ci0gICAgZWxzZQotICAgICAgeCA9ICh4ID4+IDEpOwotCi0jaWYgZGVidWdfcHJpbnQKLSAgICAvKiBwcmludCBmb3IgYSBzYW5pdHkgY2hlY2sgKi8KLSAgICBwcmludGYoIiVkOlx0JXNcbiIsIGksIHUzMl9iaXRfc3RyaW5nKHgsOCkpOwotI2VuZGlmCi0gICAgCi0gICAgLyogaW5jcmVtZW50IHdlaWdodCAqLwotICAgIHd0ICs9ICh4ICYgMSk7Ci0KLSAgICAvKiBjaGVjayBmb3IgcmV0dXJuIHRvIG9yaWdpbmFsIHZhbHVlICovCi0gICAgaWYgKHggPT0gMSkKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgLyogc2V0IHplcm8gKi8KLSAgQVswXSA9IDA7Ci19Ci0KLQotdm9pZAotd2VpZ2h0X2Rpc3RyaWJ1dGlvbih1aW50MzJfdCBwb2x5LCBpbnQgKkEpIHsKLSAgaW50IGk7Ci0gIHVpbnQzMl90IHg7Ci0KLSAgLyogemVyb2l6ZSBhcnJheSAqLwotICBmb3IgKGk9MDsgaSA8IE1BWF9XRUlHSFQrMTsgaSsrKQotICAgIEFbaV0gPSAwOwotCi0gIC8qIHNldCBsZnNyIHRvIDEgKi8KLSAgeCA9IDE7Ci0jaWYgZGVidWdfcHJpbnQKLSAgcHJpbnRmKCIlZDpcdCVzXG4iLCAwLCB1MzJfYml0X3N0cmluZyh4LDgpKTsKLSNlbmRpZgotICBmb3IgKGk9MTsgaSA8IE1BWF9QRVJJT0Q7IGkrKykgewotICAgIGlmICh4ICYgMSkgCi0gICAgICB4ID0gKHggPj4gMSkgXiBwb2x5OwotICAgIGVsc2UKLSAgICAgIHggPSAoeCA+PiAxKTsKLQotI2lmIGRlYnVnX3ByaW50Ci0gICAgLyogcHJpbnQgZm9yIGEgc2FuaXR5IGNoZWNrICovCi0gICAgcHJpbnRmKCIlZDpcdCVzXG4iLCBpLCB1MzJfYml0X3N0cmluZyh4LDgpKTsKLSNlbmRpZgotCi0gICAgLyogY29tcHV0ZSB3ZWlnaHQsIGluY3JlbWVudCBwcm9wZXIgZWxlbWVudCAqLwotICAgIEFbd2VpZ2h0KHgpXSsrOwotCi0gICAgLyogY2hlY2sgZm9yIHJldHVybiB0byBvcmlnaW5hbCB2YWx1ZSAqLwotICAgIGlmICh4ID09IDEpCi0gICAgICBicmVhazsKLSAgfQotCi0gIC8qIHNldCB6ZXJvICovCi0gIEFbMF0gPSAwOwotfQotCi0KLQotCi1pbnQKLW1haW4gKCkgewotCi0gIGludCBpLGo7Ci0gIHYzMl90IHg7Ci0gIHYzMl90IHA7Ci0KLSAgLyogb3JpZ2luYWxseSAweGFmICovCi0gIHAudmFsdWUgPSAweDk7Ci0KLSAgcHJpbnRmKCJwb2x5bm9taWFsOiAlc1x0cGVyaW9kOiAlZFxuIiwgIAotIAkgICB1MzJfYml0X3N0cmluZyhwLnZhbHVlLDgpLCBwZXJpb2QocC52YWx1ZSkpOyAKLSAKLSAgIC8qIGNvbXB1dGUgd2VpZ2h0IGRpc3RyaWJ1dGlvbiAqLwotICB3ZWlnaHRfZGlzdHJpYnV0aW9uKHAudmFsdWUsIEEpOwotICAKLSAgLyogcHJpbnQgd2VpZ2h0IGRpc3RyaWJ1dGlvbiAqLwotICBmb3IgKGk9MDsgaSA8PSA4OyBpKyspIHsKLSAgICBwcmludGYoIkFbJWRdOiAlZFxuIiwgaSwgQVtpXSk7Ci0gIH0KLSAgCi0jaWYgMAotICBmb3IgKGk9MDsgaSA8IDM5OyBpKyspIHsKLSAgICAgcHJpbnRmKCJwb2x5bm9taWFsOiAlc1x0cGVyaW9kOiAlZFxuIiwgIAotIAkgICB1MzJfYml0X3N0cmluZyhwb2x5bm9taWFsc1tpXSw4KSwgcGVyaW9kKHBvbHlub21pYWxzW2ldKSk7IAotICAgCi0gICAgIC8qIGNvbXB1dGUgd2VpZ2h0IGRpc3RyaWJ1dGlvbiAqLwotICAgICB3ZWlnaHRfZGlzdHJpYnV0aW9uKHAudmFsdWUsIEEpOwotICAgICAKLSAgICAgLyogcHJpbnQgd2VpZ2h0IGRpc3RyaWJ1dGlvbiAqLwotICAgICBmb3IgKGo9MDsgaiA8PSA4OyBqKyspIHsKLSAgICAgICBwcmludGYoIkFbJWRdOiAlZFxuIiwgaiwgQVtqXSk7Ci0gICAgIH0gICAKLSAgfQotI2VuZGlmCi0KLSAgeyAKLSAgICBpbnQgYml0cyA9IDg7Ci0gICAgdWludDMyX3QgeTsKLSAgICBmb3IgKHk9MDsgeSA8ICgxIDw8IGJpdHMpOyB5KyspIHsKLSAgICAgIHByaW50ZigicG9seW5vbWlhbDogJXNcdHdlaWdodDogJWRcdHBlcmlvZDogJWRcbiIsIAotCSAgICAgdTMyX2JpdF9zdHJpbmcoeSxiaXRzKSwgd2VpZ2h0KHkpLCBwZXJpb2QoeSkpOwotICAgICAgCi0gICAgICAvKiBjb21wdXRlIHdlaWdodCBkaXN0cmlidXRpb24gKi8KLSAgICAgIHdlaWdodF9kaXN0cmlidXRpb24oeSwgQSk7Ci0gICAgICAKLSAgICAgIC8qIHByaW50IHdlaWdodCBkaXN0cmlidXRpb24gKi8KLSAgICAgIGZvciAoaj0wOyBqIDw9IDg7IGorKykgewotCXByaW50ZigiQVslZF06ICVkXG4iLCBqLCBBW2pdKTsKLSAgICAgIH0gICAgIAotICAgIH0KLSAgfQotCi0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvdGVzdC9yYW5kX2dlbi5jIGIvdGVzdC9yYW5kX2dlbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGZjNGYzLi4wMDAwMDAwCi0tLSBhL3Rlc3QvcmFuZF9nZW4uYworKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vKgotICogcmFuZF9nZW4uYwotICoKLSAqIGEgcmFuZG9tIHNvdXJjZSAocmFuZG9tIG51bWJlciBnZW5lcmF0b3IpCi0gKgotICogRGF2aWQgQS4gTWNHcmV3Ci0gKiBDaXNjbyBTeXN0ZW1zLCBJbmMuCi0gKi8KLS8qCi0gKgkKLSAqIENvcHlyaWdodChjKSAyMDAxLTIwMDUgQ2lzY28gU3lzdGVtcywgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAKLSAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogCi0gKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICovCi0KLQotI2luY2x1ZGUgPHN0ZGlvLmg+ICAgICAgICAgICAvKiBmb3IgcHJpbnRmKCkgKi8KLSNpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgICAgLyogZm9yIGdldG9wdCgpICovCi0jaW5jbHVkZSAiY3J5cHRvX2tlcm5lbC5oIgotCi0vKgotICogTUFYX1BSSU5UX1NUUklOR19MRU4gaXMgZGVmaW5lZCBpbiBkYXRhdHlwZXMuaCwgYW5kIGlzIHRoZSBsZW5ndGgKLSAqIG9mIHRoZSBsYXJnZXN0IGhleGFkZWNpbWFsIHN0cmluZyB0aGF0IGNhbiBiZSBnZW5lcmF0ZWQgYnkgdGhlCi0gKiBmdW5jdGlvbiBvY3RldF9zdHJpbmdfaGV4X3N0cmluZygpLgotICovCi0KLSNkZWZpbmUgQlVGX0xFTiAoTUFYX1BSSU5UX1NUUklOR19MRU4vMikKLQotdm9pZAotdXNhZ2UoY2hhciAqcHJvZ19uYW1lKSB7Ci0gIHByaW50ZigidXNhZ2U6ICVzIC1uIDxudW1fYnl0ZXM+IFstbF1bIC1kIGRlYnVnX21vZHVsZSBdKlxuIgotCSAiICAgLW4gPG51bT4gICBvdXRwdXQgPG51bT4gcmFuZG9tIGJ5dGVzLCB3aGVyZSA8bnVtPiIKLQkgIiBpcyBiZXR3ZWVuIHplcm8gYW5kICVkXG4iCi0JICIgICAtbCAgICAgICAgIGxpc3QgdGhlIGF2YWxpYWJsZSBkZWJ1ZyBtb2R1bGVzXG4iCi0JICIgICAtZCA8bW9kPiAgIHR1cm4gb24gZGVidWdnaW5nIG1vZHVsZSA8bW9kPlxuIiwgCi0JIHByb2dfbmFtZSwgQlVGX0xFTik7Ci0gIGV4aXQoMjU1KTsKLX0KLQotaW50Ci1tYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7Ci0gIGV4dGVybiBjaGFyICpvcHRhcmc7Ci0gIGNoYXIgcTsKLSAgaW50IG51bV9vY3RldHMgPSAwOwotICB1bnNpZ25lZCBkb19saXN0X21vZHMgPSAwOwotICBlcnJfc3RhdHVzX3Qgc3RhdHVzOwotCi0gIGlmIChhcmdjID09IDEpCi0gICAgdXNhZ2UoYXJndlswXSk7Ci0KLSAgLyogaW5pdGlhbGl6ZSBrZXJuZWwgLSB3ZSBuZWVkIHRvIGRvIHRoaXMgYmVmb3JlIGFueXRoaW5nIGVsc2UgKi8gCi0gIHN0YXR1cyA9IGNyeXB0b19rZXJuZWxfaW5pdCgpOwotICBpZiAoc3RhdHVzKSB7Ci0gICAgcHJpbnRmKCJlcnJvcjogY3J5cHRvX2tlcm5lbCBpbml0IGZhaWxlZFxuIik7Ci0gICAgZXhpdCgxKTsKLSAgfQotCi0gIC8qIHByb2Nlc3MgaW5wdXQgYXJndW1lbnRzICovCi0gIHdoaWxlICgxKSB7Ci0gICAgcSA9IGdldG9wdChhcmdjLCBhcmd2LCAibGQ6bjoiKTsKLSAgICBpZiAocSA9PSAtMSkgCi0gICAgICBicmVhazsKLSAgICBzd2l0Y2ggKHEpIHsKLSAgICBjYXNlICdkJzoKLSAgICAgIHN0YXR1cyA9IGNyeXB0b19rZXJuZWxfc2V0X2RlYnVnX21vZHVsZShvcHRhcmcsIDEpOwotICAgICAgaWYgKHN0YXR1cykgewotCXByaW50ZigiZXJyb3I6IHNldCBkZWJ1ZyBtb2R1bGUgKCVzKSBmYWlsZWRcbiIsIG9wdGFyZyk7Ci0JZXhpdCgxKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgJ2wnOgotICAgICAgZG9fbGlzdF9tb2RzID0gMTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgJ24nOgotICAgICAgbnVtX29jdGV0cyA9IGF0b2kob3B0YXJnKTsKLSAgICAgIGlmIChudW1fb2N0ZXRzIDwgMCB8fCBudW1fb2N0ZXRzID4gQlVGX0xFTikKLQl1c2FnZShhcmd2WzBdKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICB1c2FnZShhcmd2WzBdKTsKLSAgICB9ICAgIAotICB9Ci0KLSAgaWYgKGRvX2xpc3RfbW9kcykgewotICAgIHN0YXR1cyA9IGNyeXB0b19rZXJuZWxfbGlzdF9kZWJ1Z19tb2R1bGVzKCk7Ci0gICAgaWYgKHN0YXR1cykgewotICAgICAgcHJpbnRmKCJlcnJvcjogbGlzdCBvZiBkZWJ1ZyBtb2R1bGVzIGZhaWxlZFxuIik7Ci0gICAgICBleGl0KDEpOwotICAgIH0KLSAgfQotCi0gIGlmIChudW1fb2N0ZXRzID4gMCkgewotICAgIG9jdGV0X3QgYnVmZmVyW0JVRl9MRU5dOwotICAgIAotICAgIHN0YXR1cyA9IGNyeXB0b19nZXRfcmFuZG9tKGJ1ZmZlciwgbnVtX29jdGV0cyk7Ci0gICAgaWYgKHN0YXR1cykgewotICAgICAgcHJpbnRmKCJlcnJvcjogZmFpbHVyZSBpbiByYW5kb20gc291cmNlXG4iKTsKLSAgICB9IGVsc2UgewotICAgICAgcHJpbnRmKCIlc1xuIiwgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoYnVmZmVyLCBudW1fb2N0ZXRzKSk7Ci0gICAgfQotICB9Ci0KLSAgc3RhdHVzID0gY3J5cHRvX2tlcm5lbF9zaHV0ZG93bigpOwotICBpZiAoc3RhdHVzKSB7Ci0gICAgcHJpbnRmKCJlcnJvcjogY3J5cHRvX2tlcm5lbCBzaHV0ZG93biBmYWlsZWRcbiIpOwotICAgIGV4aXQoMSk7Ci0gIH0KLSAgCi0gIHJldHVybiAwOwotfQotCmRpZmYgLS1naXQgYS90ZXN0L3JkYnhfZHJpdmVyLmMgYi90ZXN0L3JkYnhfZHJpdmVyLmMKaW5kZXggMzY2MzllYS4uZGY0MzRhMCAxMDA2NDQKLS0tIGEvdGVzdC9yZGJ4X2RyaXZlci5jCisrKyBiL3Rlc3QvcmRieF9kcml2ZXIuYwpAQCAtNiwyOCArNiwyNyBAQAogICogRGF2aWQgQS4gTWNHcmV3CiAgKiBDaXNjbyBTeXN0ZW1zLCBJbmMuCiAgKi8KLQogLyoKLSAqCQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUsIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxNywgQ2lzY28gU3lzdGVtcywgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAorICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgotICogCisgKgogICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKICAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKICAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCiAgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAorICoKICAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKICAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCkBAIC00MywyNjQgKzQyLDMxOSBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8c3RkaW8uaD4gICAgICAgIC8qIGZvciBwcmludGYoKSAqLwotI2luY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAvKiBmb3IgZ2V0b3B0KCkgKi8KKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+ICAgIC8qIGZvciBwcmludGYoKSAgICAgICAgICAqLworI2luY2x1ZGUgImdldG9wdF9zLmgiIC8qIGZvciBsb2NhbCBnZXRvcHQoKSAgICAqLwogCiAjaW5jbHVkZSAicmRieC5oIgorI2luY2x1ZGUgImNpcGhlcl9wcml2LmgiCiAKICNpZmRlZiBST0NfVEVTVAotI2Vycm9yICJyZGJ4X3Qgd29uJ3Qgd29yayB3aXRoIFJPQ19URVNUIC0gYml0bWFzayBzYW1lIHNpemUgYXMgc2VxX21lZGlhbiIKKyNlcnJvciAic3J0cF9yZGJ4X3Qgd29uJ3Qgd29yayB3aXRoIFJPQ19URVNUIC0gYml0bWFzayBzYW1lIHNpemUgYXMgc2VxX21lZGlhbiIKICNlbmRpZgogCiAjaW5jbHVkZSAidXRfc2ltLmgiCiAKLWVycl9zdGF0dXNfdCAKLXRlc3RfcmVwbGF5X2RieChpbnQgbnVtX3RyaWFscyk7CitzcnRwX2Vycl9zdGF0dXNfdCB0ZXN0X3JlcGxheV9kYngoaW50IG51bV90cmlhbHMsIHVuc2lnbmVkIGxvbmcgd3MpOwogCi1kb3VibGUKLXJkYnhfY2hlY2tfYWRkc19wZXJfc2Vjb25kKGludCBudW1fdHJpYWxzKTsKK2RvdWJsZSByZGJ4X2NoZWNrX2FkZHNfcGVyX3NlY29uZChpbnQgbnVtX3RyaWFscywgdW5zaWduZWQgbG9uZyB3cyk7CiAKLXZvaWQKLXVzYWdlKGNoYXIgKnByb2dfbmFtZSkgewotICBwcmludGYoInVzYWdlOiAlcyBbIC10IHwgLXYgXVxuIiwgcHJvZ19uYW1lKTsKLSAgZXhpdCgyNTUpOwordm9pZCB1c2FnZShjaGFyICpwcm9nX25hbWUpCit7CisgICAgcHJpbnRmKCJ1c2FnZTogJXMgWyAtdCB8IC12IF1cbiIsIHByb2dfbmFtZSk7CisgICAgZXhpdCgyNTUpOwogfQogCi1pbnQKLW1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKLSAgZG91YmxlIHJhdGU7Ci0gIGVycl9zdGF0dXNfdCBzdGF0dXM7Ci0gIGNoYXIgcTsKLSAgdW5zaWduZWQgZG9fdGltaW5nX3Rlc3QgPSAwOwotICB1bnNpZ25lZCBkb192YWxpZGF0aW9uID0gMDsKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgZG91YmxlIHJhdGU7CisgICAgc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdHVzOworICAgIGludCBxOworICAgIHVuc2lnbmVkIGRvX3RpbWluZ190ZXN0ID0gMDsKKyAgICB1bnNpZ25lZCBkb192YWxpZGF0aW9uID0gMDsKIAotICAvKiBwcm9jZXNzIGlucHV0IGFyZ3VtZW50cyAqLwotICB3aGlsZSAoMSkgewotICAgIHEgPSBnZXRvcHQoYXJnYywgYXJndiwgInR2Iik7Ci0gICAgaWYgKHEgPT0gLTEpIAotICAgICAgYnJlYWs7Ci0gICAgc3dpdGNoIChxKSB7Ci0gICAgY2FzZSAndCc6Ci0gICAgICBkb190aW1pbmdfdGVzdCA9IDE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICd2JzoKLSAgICAgIGRvX3ZhbGlkYXRpb24gPSAxOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHVzYWdlKGFyZ3ZbMF0pOwotICAgIH0gICAgCi0gIH0KLQotICBwcmludGYoInJkYnggKHJlcGxheSBkYXRhYmFzZSB3LyBleHRlbmRlZCByYW5nZSkgdGVzdCBkcml2ZXJcbiIKLQkgIkRhdmlkIEEuIE1jR3Jld1xuIgotCSAiQ2lzY28gU3lzdGVtcywgSW5jLlxuIik7Ci0KLSAgaWYgKCFkb192YWxpZGF0aW9uICYmICFkb190aW1pbmdfdGVzdCkKLSAgICB1c2FnZShhcmd2WzBdKTsKLQotICBpZiAoZG9fdmFsaWRhdGlvbikgewotICBwcmludGYoInRlc3RpbmcgcmRieF90Li4uXG4iKTsKLQotICAgIHN0YXR1cyA9IHRlc3RfcmVwbGF5X2RieCgxIDw8IDEyKTsKLSAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICBwcmludGYoImZhaWxlZFxuIik7Ci0gICAgICBleGl0KDEpOworICAgIC8qIHByb2Nlc3MgaW5wdXQgYXJndW1lbnRzICovCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgcSA9IGdldG9wdF9zKGFyZ2MsIGFyZ3YsICJ0diIpOworICAgICAgICBpZiAocSA9PSAtMSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzd2l0Y2ggKHEpIHsKKyAgICAgICAgY2FzZSAndCc6CisgICAgICAgICAgICBkb190aW1pbmdfdGVzdCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAndic6CisgICAgICAgICAgICBkb192YWxpZGF0aW9uID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdXNhZ2UoYXJndlswXSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgcHJpbnRmKCJwYXNzZWRcbiIpOwotICB9CiAKLSAgaWYgKGRvX3RpbWluZ190ZXN0KSB7Ci0gICAgcmF0ZSA9IHJkYnhfY2hlY2tfYWRkc19wZXJfc2Vjb25kKDEgPDwgMTgpOwotICAgIHByaW50ZigicmRieF9jaGVjay9yZXBsYXlfYWRkcyBwZXIgc2Vjb25kOiAlZVxuIiwgcmF0ZSk7Ci0gIH0KLSAgCi0gIHJldHVybiAwOworICAgIHByaW50ZigicmRieCAocmVwbGF5IGRhdGFiYXNlIHcvIGV4dGVuZGVkIHJhbmdlKSB0ZXN0IGRyaXZlclxuIgorICAgICAgICAgICAiRGF2aWQgQS4gTWNHcmV3XG4iCisgICAgICAgICAgICJDaXNjbyBTeXN0ZW1zLCBJbmMuXG4iKTsKKworICAgIGlmICghZG9fdmFsaWRhdGlvbiAmJiAhZG9fdGltaW5nX3Rlc3QpCisgICAgICAgIHVzYWdlKGFyZ3ZbMF0pOworCisgICAgaWYgKGRvX3ZhbGlkYXRpb24pIHsKKyAgICAgICAgcHJpbnRmKCJ0ZXN0aW5nIHNydHBfcmRieF90ICh3cz0xMjgpLi4uXG4iKTsKKworICAgICAgICBzdGF0dXMgPSB0ZXN0X3JlcGxheV9kYngoMSA8PCAxMiwgMTI4KTsKKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgcHJpbnRmKCJmYWlsZWRcbiIpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAgICBwcmludGYoInBhc3NlZFxuIik7CisKKyAgICAgICAgcHJpbnRmKCJ0ZXN0aW5nIHNydHBfcmRieF90ICh3cz0xMDI0KS4uLlxuIik7CisKKyAgICAgICAgc3RhdHVzID0gdGVzdF9yZXBsYXlfZGJ4KDEgPDwgMTIsIDEwMjQpOworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBwcmludGYoImZhaWxlZFxuIik7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisgICAgICAgIHByaW50ZigicGFzc2VkXG4iKTsKKyAgICB9CisKKyAgICBpZiAoZG9fdGltaW5nX3Rlc3QpIHsKKyAgICAgICAgcmF0ZSA9IHJkYnhfY2hlY2tfYWRkc19wZXJfc2Vjb25kKDEgPDwgMTgsIDEyOCk7CisgICAgICAgIHByaW50ZigicmRieF9jaGVjay9yZXBsYXlfYWRkcyBwZXIgc2Vjb25kICh3cz0xMjgpOiAlZVxuIiwgcmF0ZSk7CisgICAgICAgIHJhdGUgPSByZGJ4X2NoZWNrX2FkZHNfcGVyX3NlY29uZCgxIDw8IDE4LCAxMDI0KTsKKyAgICAgICAgcHJpbnRmKCJyZGJ4X2NoZWNrL3JlcGxheV9hZGRzIHBlciBzZWNvbmQgKHdzPTEwMjQpOiAlZVxuIiwgcmF0ZSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQKLXByaW50X3JkYngocmRieF90ICpyZGJ4KSB7Ci0gIHByaW50ZigicmRieDogeyVsbHUsICVzfVxuIiwKLQkgKHJkYngtPmluZGV4KSwgdjEyOF9iaXRfc3RyaW5nKCZyZGJ4LT5iaXRtYXNrKSk7Cit2b2lkIHByaW50X3JkYngoc3J0cF9yZGJ4X3QgKnJkYngpCit7CisgICAgY2hhciBidWZbMjA0OF07CisgICAgcHJpbnRmKCJyZGJ4OiB7JWxsdSwgJXN9XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKShyZGJ4LT5pbmRleCksCisgICAgICAgICAgIGJpdHZlY3Rvcl9iaXRfc3RyaW5nKCZyZGJ4LT5iaXRtYXNrLCBidWYsIHNpemVvZihidWYpKSk7CiB9CiAKLQogLyoKICAqIHJkYnhfY2hlY2tfYWRkKHJkYngsIGlkeCkgY2hlY2tzIGEga25vd24tdG8tYmUtZ29vZCBpZHggYWdhaW5zdAogICogcmRieCwgdGhlbiBhZGRzIGl0LiAgaWYgYSBmYWlsdXJlIGlzIGRldGVjdGVkIChpLmUuLCB0aGUgY2hlY2sKICAqIGluZGljYXRlcyB0aGF0IHRoZSB2YWx1ZSBpcyBhbHJlYWR5IGluIHJkYngpIHRoZW4KLSAqIGVycl9zdGF0dXNfYWxnb19mYWlsIGlzIHJldHVybmVkLgorICogc3J0cF9lcnJfc3RhdHVzX2FsZ29fZmFpbCBpcyByZXR1cm5lZC4KICAqCiAgKi8KIAotZXJyX3N0YXR1c190Ci1yZGJ4X2NoZWNrX2FkZChyZGJ4X3QgKnJkYngsIHVpbnQzMl90IGlkeCkgewotICBpbnQgZGVsdGE7Ci0gIHh0ZF9zZXFfbnVtX3QgZXN0OwotICAKLSAgZGVsdGEgPSBpbmRleF9ndWVzcygmcmRieC0+aW5kZXgsICZlc3QsIGlkeCk7Ci0gIAotICBpZiAocmRieF9jaGVjayhyZGJ4LCBkZWx0YSkgIT0gZXJyX3N0YXR1c19vaykgewotICAgIHByaW50ZigicmVwbGF5X2NoZWNrIGZhaWxlZCBhdCBpbmRleCAldVxuIiwgaWR4KTsKLSAgICByZXR1cm4gZXJyX3N0YXR1c19hbGdvX2ZhaWw7Ci0gIH0KK3NydHBfZXJyX3N0YXR1c190IHJkYnhfY2hlY2tfYWRkKHNydHBfcmRieF90ICpyZGJ4LCB1aW50MzJfdCBpZHgpCit7CisgICAgaW50IGRlbHRhOworICAgIHNydHBfeHRkX3NlcV9udW1fdCBlc3Q7CiAKLSAgLyoKLSAgICogaW4gcHJhY3RpY2UsIHdlJ2QgYXV0aGVudGljYXRlIHRoZSBwYWNrZXQgY29udGFpbmluZyBpZHgsIHVzaW5nCi0gICAqIHRoZSBlc3RpbWF0ZWQgdmFsdWUgZXN0LCBhdCB0aGlzIHBvaW50Ci0gICAqLwotICAKLSAgaWYgKHJkYnhfYWRkX2luZGV4KHJkYngsIGRlbHRhKSAhPSBlcnJfc3RhdHVzX29rKSB7Ci0gICAgcHJpbnRmKCJyZGJ4X2FkZF9pbmRleCBmYWlsZWQgYXQgaW5kZXggJXVcbiIsIGlkeCk7Ci0gICAgcmV0dXJuIGVycl9zdGF0dXNfYWxnb19mYWlsOwotICB9ICAKKyAgICBkZWx0YSA9IHNydHBfaW5kZXhfZ3Vlc3MoJnJkYngtPmluZGV4LCAmZXN0LCBpZHgpOwogCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOworICAgIGlmIChzcnRwX3JkYnhfY2hlY2socmRieCwgZGVsdGEpICE9IHNydHBfZXJyX3N0YXR1c19vaykgeworICAgICAgICBwcmludGYoInJlcGxheV9jaGVjayBmYWlsZWQgYXQgaW5kZXggJXVcbiIsIGlkeCk7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYWxnb19mYWlsOworICAgIH0KKworICAgIC8qCisgICAgICogaW4gcHJhY3RpY2UsIHdlJ2QgYXV0aGVudGljYXRlIHRoZSBwYWNrZXQgY29udGFpbmluZyBpZHgsIHVzaW5nCisgICAgICogdGhlIGVzdGltYXRlZCB2YWx1ZSBlc3QsIGF0IHRoaXMgcG9pbnQKKyAgICAgKi8KKworICAgIGlmIChzcnRwX3JkYnhfYWRkX2luZGV4KHJkYngsIGRlbHRhKSAhPSBzcnRwX2Vycl9zdGF0dXNfb2spIHsKKyAgICAgICAgcHJpbnRmKCJyZGJ4X2FkZF9pbmRleCBmYWlsZWQgYXQgaW5kZXggJXVcbiIsIGlkeCk7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYWxnb19mYWlsOworICAgIH0KKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7CiB9CiAKIC8qCi0gKiByZGJ4X2NoZWNrX2V4cGVjdF9mYWlsdXJlKHJkYnhfdCAqcmRieCwgdWludDMyX3QgaWR4KQotICogCisgKiByZGJ4X2NoZWNrX2V4cGVjdF9mYWlsdXJlKHNydHBfcmRieF90ICpyZGJ4LCB1aW50MzJfdCBpZHgpCisgKgogICogY2hlY2tzIHRoYXQgYSBzZXF1ZW5jZSBudW1iZXIgaWR4IGlzIGluIHRoZSByZXBsYXkgZGF0YWJhc2UKICAqIGFuZCB0aHVzIHdpbGwgYmUgcmVqZWN0ZWQKICAqLwogCi1lcnJfc3RhdHVzX3QKLXJkYnhfY2hlY2tfZXhwZWN0X2ZhaWx1cmUocmRieF90ICpyZGJ4LCB1aW50MzJfdCBpZHgpIHsKLSAgaW50IGRlbHRhOwotICB4dGRfc2VxX251bV90IGVzdDsKLSAgZXJyX3N0YXR1c190IHN0YXR1czsKK3NydHBfZXJyX3N0YXR1c190IHJkYnhfY2hlY2tfZXhwZWN0X2ZhaWx1cmUoc3J0cF9yZGJ4X3QgKnJkYngsIHVpbnQzMl90IGlkeCkKK3sKKyAgICBpbnQgZGVsdGE7CisgICAgc3J0cF94dGRfc2VxX251bV90IGVzdDsKKyAgICBzcnRwX2Vycl9zdGF0dXNfdCBzdGF0dXM7CiAKLSAgZGVsdGEgPSBpbmRleF9ndWVzcygmcmRieC0+aW5kZXgsICZlc3QsIGlkeCk7CisgICAgZGVsdGEgPSBzcnRwX2luZGV4X2d1ZXNzKCZyZGJ4LT5pbmRleCwgJmVzdCwgaWR4KTsKIAotICBzdGF0dXMgPSByZGJ4X2NoZWNrKHJkYngsIGRlbHRhKTsKLSAgaWYgKHN0YXR1cyA9PSBlcnJfc3RhdHVzX29rKSB7Ci0gICAgcHJpbnRmKCJkZWx0YTogJWQgIiwgZGVsdGEpOwotICAgIHByaW50ZigicmVwbGF5X2NoZWNrIGZhaWxlZCBhdCBpbmRleCAldSAoZmFsc2UgcG9zaXRpdmUpXG4iLCBpZHgpOwotICAgIHJldHVybiBlcnJfc3RhdHVzX2FsZ29fZmFpbDsgCi0gIH0KKyAgICBzdGF0dXMgPSBzcnRwX3JkYnhfY2hlY2socmRieCwgZGVsdGEpOworICAgIGlmIChzdGF0dXMgPT0gc3J0cF9lcnJfc3RhdHVzX29rKSB7CisgICAgICAgIHByaW50ZigiZGVsdGE6ICVkICIsIGRlbHRhKTsKKyAgICAgICAgcHJpbnRmKCJyZXBsYXlfY2hlY2sgZmFpbGVkIGF0IGluZGV4ICV1IChmYWxzZSBwb3NpdGl2ZSlcbiIsIGlkeCk7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYWxnb19mYWlsOworICAgIH0KIAotICByZXR1cm4gZXJyX3N0YXR1c19vazsKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQogCi1lcnJfc3RhdHVzX3QKLXJkYnhfY2hlY2tfdW5vcmRlcmVkKHJkYnhfdCAqcmRieCwgdWludDMyX3QgaWR4KSB7Ci0gIGVycl9zdGF0dXNfdCByc3RhdDsKK3NydHBfZXJyX3N0YXR1c190IHJkYnhfY2hlY2tfYWRkX3Vub3JkZXJlZChzcnRwX3JkYnhfdCAqcmRieCwgdWludDMyX3QgaWR4KQoreworICAgIGludCBkZWx0YTsKKyAgICBzcnRwX3h0ZF9zZXFfbnVtX3QgZXN0OworICAgIHNydHBfZXJyX3N0YXR1c190IHJzdGF0OwogCi0gIHJzdGF0ID0gcmRieF9jaGVjayhyZGJ4LCBpZHgpOwotICBpZiAoKHJzdGF0ICE9IGVycl9zdGF0dXNfb2spICYmIChyc3RhdCAhPSBlcnJfc3RhdHVzX3JlcGxheV9vbGQpKSB7Ci0gICAgcHJpbnRmKCJyZXBsYXlfY2hlY2tfdW5vcmRlcmVkIGZhaWxlZCBhdCBpbmRleCAldVxuIiwgaWR4KTsKLSAgICByZXR1cm4gZXJyX3N0YXR1c19hbGdvX2ZhaWw7Ci0gIH0KLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7CisgICAgZGVsdGEgPSBzcnRwX2luZGV4X2d1ZXNzKCZyZGJ4LT5pbmRleCwgJmVzdCwgaWR4KTsKKworICAgIHJzdGF0ID0gc3J0cF9yZGJ4X2NoZWNrKHJkYngsIGRlbHRhKTsKKyAgICBpZiAoKHJzdGF0ICE9IHNydHBfZXJyX3N0YXR1c19vaykgJiYKKyAgICAgICAgKHJzdGF0ICE9IHNydHBfZXJyX3N0YXR1c19yZXBsYXlfb2xkKSkgeworICAgICAgICBwcmludGYoInJlcGxheV9jaGVja19hZGRfdW5vcmRlcmVkIGZhaWxlZCBhdCBpbmRleCAldVxuIiwgaWR4KTsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19hbGdvX2ZhaWw7CisgICAgfQorICAgIGlmIChyc3RhdCA9PSBzcnRwX2Vycl9zdGF0dXNfcmVwbGF5X29sZCkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOworICAgIH0KKyAgICBpZiAoc3J0cF9yZGJ4X2FkZF9pbmRleChyZGJ4LCBkZWx0YSkgIT0gc3J0cF9lcnJfc3RhdHVzX29rKSB7CisgICAgICAgIHByaW50ZigicmRieF9hZGRfaW5kZXggZmFpbGVkIGF0IGluZGV4ICV1XG4iLCBpZHgpOworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2FsZ29fZmFpbDsKKyAgICB9CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQogCi0jZGVmaW5lIE1BWF9JRFggMTYwCitzcnRwX2Vycl9zdGF0dXNfdCB0ZXN0X3JlcGxheV9kYngoaW50IG51bV90cmlhbHMsIHVuc2lnbmVkIGxvbmcgd3MpCit7CisgICAgc3J0cF9yZGJ4X3QgcmRieDsKKyAgICB1aW50MzJfdCBpZHgsIGlyY3ZkOworICAgIHV0X2Nvbm5lY3Rpb24gdXRjOworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKKyAgICBpbnQgbnVtX2ZwX3RyaWFsczsKIAotZXJyX3N0YXR1c190Ci10ZXN0X3JlcGxheV9kYngoaW50IG51bV90cmlhbHMpIHsKLSAgcmRieF90IHJkYng7Ci0gIHVpbnQzMl90IGlkeCwgaXJjdmQ7Ci0gIHV0X2Nvbm5lY3Rpb24gdXRjOwotICBlcnJfc3RhdHVzX3Qgc3RhdHVzOwotICBpbnQgbnVtX2ZwX3RyaWFsczsKKyAgICBzdGF0dXMgPSBzcnRwX3JkYnhfaW5pdCgmcmRieCwgd3MpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcHJpbnRmKCJyZXBsYXlfaW5pdCBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLCBzdGF0dXMpOworICAgICAgICBleGl0KDEpOworICAgIH0KIAotICBzdGF0dXMgPSByZGJ4X2luaXQoJnJkYngpOwotICBpZiAoc3RhdHVzKSB7Ci0gICAgcHJpbnRmKCJyZXBsYXlfaW5pdCBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLCBzdGF0dXMpOwotICAgIGV4aXQoMSk7Ci0gIH0KKyAgICAvKgorICAgICAqICB0ZXN0IHNlcXVlbnRpYWwgaW5zZXJ0aW9uCisgICAgICovCisgICAgcHJpbnRmKCJcdHRlc3Rpbmcgc2VxdWVudGlhbCBpbnNlcnRpb24uLi4iKTsKKyAgICBmb3IgKGlkeCA9IDA7IChpbnQpaWR4IDwgbnVtX3RyaWFsczsgaWR4KyspIHsKKyAgICAgICAgc3RhdHVzID0gcmRieF9jaGVja19hZGQoJnJkYngsIGlkeCk7CisgICAgICAgIGlmIChzdGF0dXMpCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKyAgICBwcmludGYoInBhc3NlZFxuIik7CiAKLSAgLyoKLSAgICogIHRlc3Qgc2VxdWVudGlhbCBpbnNlcnRpb24gCi0gICAqLwotICBwcmludGYoIlx0dGVzdGluZyBzZXF1ZW50aWFsIGluc2VydGlvbi4uLiIpOwotICBmb3IgKGlkeD0wOyBpZHggPCBudW1fdHJpYWxzOyBpZHgrKykgewotICAgIHN0YXR1cyA9IHJkYnhfY2hlY2tfYWRkKCZyZGJ4LCBpZHgpOwotICAgIGlmIChzdGF0dXMpCi0gICAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0gIHByaW50ZigicGFzc2VkXG4iKTsKKyAgICAvKgorICAgICAqICB0ZXN0IGZvciBmYWxzZSBwb3NpdGl2ZXMgYnkgY2hlY2tpbmcgYWxsIG9mIHRoZSBpbmRleAorICAgICAqICB2YWx1ZXMgd2hpY2ggd2UndmUganVzdCBhZGRlZAorICAgICAqCisgICAgICogbm90ZSB0aGF0IHdlIGxpbWl0IHRoZSBudW1iZXIgb2YgdHJpYWxzIGhlcmUsIHNpbmNlIGFsbG93aW5nIHRoZQorICAgICAqIHJvbGxvdmVyIGNvdW50ZXIgdG8gcm9sbCBvdmVyIHdvdWxkIGRlZmVhdCB0aGlzIHRlc3QKKyAgICAgKi8KKyAgICBudW1fZnBfdHJpYWxzID0gbnVtX3RyaWFscyAlIDB4MTAwMDA7CisgICAgaWYgKG51bV9mcF90cmlhbHMgPT0gMCkgeworICAgICAgICBwcmludGYoIndhcm5pbmc6IG5vIGZhbHNlIHBvc2l0aXZlIHRlc3RzIHBlcmZvcm1lZFxuIik7CisgICAgfQorICAgIHByaW50ZigiXHR0ZXN0aW5nIGZvciBmYWxzZSBwb3NpdGl2ZXMuLi4iKTsKKyAgICBmb3IgKGlkeCA9IDA7IChpbnQpaWR4IDwgbnVtX2ZwX3RyaWFsczsgaWR4KyspIHsKKyAgICAgICAgc3RhdHVzID0gcmRieF9jaGVja19leHBlY3RfZmFpbHVyZSgmcmRieCwgaWR4KTsKKyAgICAgICAgaWYgKHN0YXR1cykKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorICAgIHByaW50ZigicGFzc2VkXG4iKTsKIAotICAvKgotICAgKiAgdGVzdCBmb3IgZmFsc2UgcG9zaXRpdmVzIGJ5IGNoZWNraW5nIGFsbCBvZiB0aGUgaW5kZXgKLSAgICogIHZhbHVlcyB3aGljaCB3ZSd2ZSBqdXN0IGFkZGVkCi0gICAqCi0gICAqIG5vdGUgdGhhdCB3ZSBsaW1pdCB0aGUgbnVtYmVyIG9mIHRyaWFscyBoZXJlLCBzaW5jZSBhbGxvd2luZyB0aGUKLSAgICogcm9sbG92ZXIgY291bnRlciB0byByb2xsIG92ZXIgd291bGQgZGVmZWF0IHRoaXMgdGVzdAotICAgKi8KLSAgbnVtX2ZwX3RyaWFscyA9IG51bV90cmlhbHMgJSAweDEwMDAwOwotICBpZiAobnVtX2ZwX3RyaWFscyA9PSAwKSB7Ci0gICAgcHJpbnRmKCJ3YXJuaW5nOiBubyBmYWxzZSBwb3NpdGl2ZSB0ZXN0cyBwZXJmb3JtZWRcbiIpOwotICB9Ci0gIHByaW50ZigiXHR0ZXN0aW5nIGZvciBmYWxzZSBwb3NpdGl2ZXMuLi4iKTsKLSAgZm9yIChpZHg9MDsgaWR4IDwgbnVtX2ZwX3RyaWFsczsgaWR4KyspIHsKLSAgICBzdGF0dXMgPSByZGJ4X2NoZWNrX2V4cGVjdF9mYWlsdXJlKCZyZGJ4LCBpZHgpOwotICAgIGlmIChzdGF0dXMpCi0gICAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0gIHByaW50ZigicGFzc2VkXG4iKTsKKyAgICAvKiByZS1pbml0aWFsaXplICovCisgICAgc3J0cF9yZGJ4X2RlYWxsb2MoJnJkYngpOwogCi0gIC8qIHJlLWluaXRpYWxpemUgKi8KLSAgaWYgKHJkYnhfaW5pdCgmcmRieCkgIT0gZXJyX3N0YXR1c19vaykgewotICAgIHByaW50ZigicmVwbGF5X2luaXQgZmFpbGVkXG4iKTsKLSAgICByZXR1cm4gZXJyX3N0YXR1c19pbml0X2ZhaWw7Ci0gIH0KKyAgICBpZiAoc3J0cF9yZGJ4X2luaXQoJnJkYngsIHdzKSAhPSBzcnRwX2Vycl9zdGF0dXNfb2spIHsKKyAgICAgICAgcHJpbnRmKCJyZXBsYXlfaW5pdCBmYWlsZWRcbiIpOworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2luaXRfZmFpbDsKKyAgICB9CiAKLSAgLyoKLSAgICogdGVzdCBub24tc2VxdWVudGlhbCBpbnNlcnRpb24gCi0gICAqCi0gICAqIHRoaXMgdGVzdCBjb3ZlcnMgb25seSBmYXNlIG5lZ2F0aXZlcywgc2luY2UgdGhlIHZhbHVlcyByZXR1cm5lZAotICAgKiBieSB1dF9uZXh0X2luZGV4KC4uLikgYXJlIGRpc3RpbmN0Ci0gICAqLwotICB1dF9pbml0KCZ1dGMpOworICAgIC8qCisgICAgICogdGVzdCBub24tc2VxdWVudGlhbCBpbnNlcnRpb24KKyAgICAgKgorICAgICAqIHRoaXMgdGVzdCBjb3ZlcnMgb25seSBmYXNlIG5lZ2F0aXZlcywgc2luY2UgdGhlIHZhbHVlcyByZXR1cm5lZAorICAgICAqIGJ5IHV0X25leHRfaW5kZXgoLi4uKSBhcmUgZGlzdGluY3QKKyAgICAgKi8KKyAgICB1dF9pbml0KCZ1dGMpOwogCi0gIHByaW50ZigiXHR0ZXN0aW5nIG5vbi1zZXF1ZW50aWFsIGluc2VydGlvbi4uLiIpOyAgCi0gIGZvciAoaWR4PTA7IGlkeCA8IG51bV90cmlhbHM7IGlkeCsrKSB7Ci0gICAgaXJjdmQgPSB1dF9uZXh0X2luZGV4KCZ1dGMpOwotICAgIHN0YXR1cyA9IHJkYnhfY2hlY2tfdW5vcmRlcmVkKCZyZGJ4LCBpcmN2ZCk7Ci0gICAgaWYgKHN0YXR1cykKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAgcHJpbnRmKCJwYXNzZWRcbiIpOworICAgIHByaW50ZigiXHR0ZXN0aW5nIG5vbi1zZXF1ZW50aWFsIGluc2VydGlvbi4uLiIpOworICAgIGZvciAoaWR4ID0gMDsgKGludClpZHggPCBudW1fdHJpYWxzOyBpZHgrKykgeworICAgICAgICBpcmN2ZCA9IHV0X25leHRfaW5kZXgoJnV0Yyk7CisgICAgICAgIHN0YXR1cyA9IHJkYnhfY2hlY2tfYWRkX3Vub3JkZXJlZCgmcmRieCwgaXJjdmQpOworICAgICAgICBpZiAoc3RhdHVzKQorICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgc3RhdHVzID0gcmRieF9jaGVja19leHBlY3RfZmFpbHVyZSgmcmRieCwgaXJjdmQpOworICAgICAgICBpZiAoc3RhdHVzKQorICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgcHJpbnRmKCJwYXNzZWRcbiIpOwogCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOworICAgIC8qIHJlLWluaXRpYWxpemUgKi8KKyAgICBzcnRwX3JkYnhfZGVhbGxvYygmcmRieCk7CisKKyAgICBpZiAoc3J0cF9yZGJ4X2luaXQoJnJkYngsIHdzKSAhPSBzcnRwX2Vycl9zdGF0dXNfb2spIHsKKyAgICAgICAgcHJpbnRmKCJyZXBsYXlfaW5pdCBmYWlsZWRcbiIpOworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2luaXRfZmFpbDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHRlc3QgaW5zZXJ0aW9uIHdpdGggbGFyZ2UgZ2Fwcy4KKyAgICAgKiBjaGVjayBmb3IgZmFsc2UgcG9zaXRpdmVzIGZvciBlYWNoIGluc2VydGlvbi4KKyAgICAgKi8KKyAgICBwcmludGYoIlx0dGVzdGluZyBpbnNlcnRpb24gd2l0aCBsYXJnZSBnYXBzLi4uIik7CisgICAgZm9yIChpZHggPSAwLCBpcmN2ZCA9IDA7IChpbnQpaWR4IDwgbnVtX3RyaWFsczsKKyAgICAgICAgIGlkeCsrLCBpcmN2ZCArPSAoMSA8PCAoc3J0cF9jaXBoZXJfcmFuZF91MzJfZm9yX3Rlc3RzKCkgJSAxMikpKSB7CisgICAgICAgIHN0YXR1cyA9IHJkYnhfY2hlY2tfYWRkKCZyZGJ4LCBpcmN2ZCk7CisgICAgICAgIGlmIChzdGF0dXMpCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICBzdGF0dXMgPSByZGJ4X2NoZWNrX2V4cGVjdF9mYWlsdXJlKCZyZGJ4LCBpcmN2ZCk7CisgICAgICAgIGlmIChzdGF0dXMpCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKyAgICBwcmludGYoInBhc3NlZFxuIik7CisKKyAgICBzcnRwX3JkYnhfZGVhbGxvYygmcmRieCk7CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQogCisjaW5jbHVkZSA8dGltZS5oPiAvKiBmb3IgY2xvY2soKSAgKi8KIAorZG91YmxlIHJkYnhfY2hlY2tfYWRkc19wZXJfc2Vjb25kKGludCBudW1fdHJpYWxzLCB1bnNpZ25lZCBsb25nIHdzKQoreworICAgIHVpbnQzMl90IGk7CisgICAgaW50IGRlbHRhOworICAgIHNydHBfcmRieF90IHJkYng7CisgICAgc3J0cF94dGRfc2VxX251bV90IGVzdDsKKyAgICBjbG9ja190IHRpbWVyOworICAgIGludCBmYWlsdXJlczsgLyogY291bnQgbnVtYmVyIG9mIGZhaWx1cmVzICovCiAKLSNpbmNsdWRlIDx0aW1lLmg+ICAgICAgIC8qIGZvciBjbG9jaygpICAqLwotI2luY2x1ZGUgPHN0ZGxpYi5oPiAgICAgLyogZm9yIHJhbmRvbSgpICovCisgICAgaWYgKHNydHBfcmRieF9pbml0KCZyZGJ4LCB3cykgIT0gc3J0cF9lcnJfc3RhdHVzX29rKSB7CisgICAgICAgIHByaW50ZigicmVwbGF5X2luaXQgZmFpbGVkXG4iKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CiAKLWRvdWJsZQotcmRieF9jaGVja19hZGRzX3Blcl9zZWNvbmQoaW50IG51bV90cmlhbHMpIHsKLSAgdWludDMyX3QgaTsKLSAgaW50IGRlbHRhOwotICByZGJ4X3QgcmRieDsKLSAgeHRkX3NlcV9udW1fdCBlc3Q7Ci0gIGNsb2NrX3QgdGltZXI7Ci0gIGludCBmYWlsdXJlczsgICAgICAgICAgICAgICAgICAgIC8qIGNvdW50IG51bWJlciBvZiBmYWlsdXJlcyAgICAgICAgKi8KLSAgCi0gIGlmIChyZGJ4X2luaXQoJnJkYngpICE9IGVycl9zdGF0dXNfb2spIHsKLSAgICBwcmludGYoInJlcGxheV9pbml0IGZhaWxlZFxuIik7Ci0gICAgZXhpdCgxKTsKLSAgfSAgCisgICAgZmFpbHVyZXMgPSAwOworICAgIHRpbWVyID0gY2xvY2soKTsKKyAgICBmb3IgKGkgPSAwOyAoaW50KWkgPCBudW1fdHJpYWxzOyBpKyspIHsKKyAgICAgICAgZGVsdGEgPSBzcnRwX2luZGV4X2d1ZXNzKCZyZGJ4LmluZGV4LCAmZXN0LCBpKTsKIAotICBmYWlsdXJlcyA9IDA7Ci0gIHRpbWVyID0gY2xvY2soKTsKLSAgZm9yKGk9MDsgaSA8IG51bV90cmlhbHM7IGkrKykgewotICAgIAotICAgIGRlbHRhID0gaW5kZXhfZ3Vlc3MoJnJkYnguaW5kZXgsICZlc3QsIGkpOwotICAgIAotICAgIGlmIChyZGJ4X2NoZWNrKCZyZGJ4LCBkZWx0YSkgIT0gZXJyX3N0YXR1c19vaykgCi0gICAgICArK2ZhaWx1cmVzOwotICAgIGVsc2UKLSAgICAgIGlmIChyZGJ4X2FkZF9pbmRleCgmcmRieCwgZGVsdGEpICE9IGVycl9zdGF0dXNfb2spCi0JKytmYWlsdXJlczsKLSAgfQotICB0aW1lciA9IGNsb2NrKCkgLSB0aW1lcjsKKyAgICAgICAgaWYgKHNydHBfcmRieF9jaGVjaygmcmRieCwgZGVsdGEpICE9IHNydHBfZXJyX3N0YXR1c19vaykKKyAgICAgICAgICAgICsrZmFpbHVyZXM7CisgICAgICAgIGVsc2UgaWYgKHNydHBfcmRieF9hZGRfaW5kZXgoJnJkYngsIGRlbHRhKSAhPSBzcnRwX2Vycl9zdGF0dXNfb2spCisgICAgICAgICAgICArK2ZhaWx1cmVzOworICAgIH0KKyAgICB0aW1lciA9IGNsb2NrKCkgLSB0aW1lcjsKKyAgICBpZiAodGltZXIgPCAxKSB7CisgICAgICAgIHRpbWVyID0gMTsKKyAgICB9CiAKLSAgcHJpbnRmKCJudW1iZXIgb2YgZmFpbHVyZXM6ICVkIFxuIiwgZmFpbHVyZXMpOworICAgIHByaW50ZigibnVtYmVyIG9mIGZhaWx1cmVzOiAlZCBcbiIsIGZhaWx1cmVzKTsKIAotICByZXR1cm4gKGRvdWJsZSkgQ0xPQ0tTX1BFUl9TRUMgKiBudW1fdHJpYWxzIC8gdGltZXI7CisgICAgc3J0cF9yZGJ4X2RlYWxsb2MoJnJkYngpOworCisgICAgcmV0dXJuIChkb3VibGUpQ0xPQ0tTX1BFUl9TRUMgKiBudW1fdHJpYWxzIC8gdGltZXI7CiB9Ci0KZGlmZiAtLWdpdCBhL3Rlc3QvcmVwbGF5X2RyaXZlci5jIGIvdGVzdC9yZXBsYXlfZHJpdmVyLmMKaW5kZXggZGM0MDNiMS4uZTA4MDhiNiAxMDA2NDQKLS0tIGEvdGVzdC9yZXBsYXlfZHJpdmVyLmMKKysrIGIvdGVzdC9yZXBsYXlfZHJpdmVyLmMKQEAgLTgsMjYgKzgsMjYgQEAKICAqLwogCiAvKgotICoJCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSwgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDE3LCBDaXNjbyBTeXN0ZW1zLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwogICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKICAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCisgKgogICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAogICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKKyAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKQEAgLTQzLDEzOSArNDMsMjQzIEBACiAgKgogICovCiAKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKICNpbmNsdWRlICJyZGIuaCIKICNpbmNsdWRlICJ1dF9zaW0uaCIKIAotdm9pZAotdGVzdF9yZGJfZGIoKTsKKyNpbmNsdWRlICJjaXBoZXJfcHJpdi5oIgogCi1kb3VibGUKLXJkYl9jaGVja19hZGRzX3Blcl9zZWNvbmQoKTsKKy8qCisgKiBudW1fdHJpYWxzIGRlZmluZXMgdGhlIG51bWJlciBvZiB0cmlhbHMgdGhhdCBhcmUgdXNlZCBpbiB0aGUKKyAqIHZhbGlkYXRpb24gZnVuY3Rpb25zIGJlbG93CisgKi8KIAotaW50Ci1tYWluICgpIHsKK3Vuc2lnbmVkIG51bV90cmlhbHMgPSAxIDw8IDE2OwogCi0gIHByaW50ZigidGVzdGluZyBhbnRpLXJlcGxheSBkYXRhYmFzZSAocmRiX3QpLi4uXG4iKTsKLSAgdGVzdF9yZGJfZGIoKTsKLSAgcHJpbnRmKCJkb25lXG4iKTsKK3NydHBfZXJyX3N0YXR1c190IHRlc3RfcmRiX2RiKHZvaWQpOwogCi0gIHByaW50ZigicmRiX2NoZWNrL3JkYl9hZGRzIHBlciBzZWNvbmQ6ICVlXG4iLAotCSByZGJfY2hlY2tfYWRkc19wZXJfc2Vjb25kKCkpOwotICAKLSAgcmV0dXJuIDA7Citkb3VibGUgcmRiX2NoZWNrX2FkZHNfcGVyX3NlY29uZCh2b2lkKTsKKworaW50IG1haW4odm9pZCkKK3sKKyAgICBzcnRwX2Vycl9zdGF0dXNfdCBlcnI7CisKKyAgICBwcmludGYoInRlc3RpbmcgYW50aS1yZXBsYXkgZGF0YWJhc2UgKHNydHBfcmRiX3QpLi4uXG4iKTsKKyAgICBlcnIgPSB0ZXN0X3JkYl9kYigpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgcHJpbnRmKCJmYWlsZWRcbiIpOworICAgICAgICBleGl0KDEpOworICAgIH0KKyAgICBwcmludGYoImRvbmVcbiIpOworCisgICAgcHJpbnRmKCJyZGJfY2hlY2svcmRiX2FkZHMgcGVyIHNlY29uZDogJWVcbiIsIHJkYl9jaGVja19hZGRzX3Blcl9zZWNvbmQoKSk7CisKKyAgICByZXR1cm4gMDsKIH0KIAotCi12b2lkCi1wcmludF9yZGIocmRiX3QgKnJkYikgewotICBwcmludGYoInJkYjogeyV1LCAlc31cbiIsIHJkYi0+d2luZG93X3N0YXJ0LCAKLQkgdjEyOF9iaXRfc3RyaW5nKCZyZGItPmJpdG1hc2spKTsKK3ZvaWQgcHJpbnRfcmRiKHNydHBfcmRiX3QgKnJkYikKK3sKKyAgICBwcmludGYoInJkYjogeyV1LCAlc31cbiIsIHJkYi0+d2luZG93X3N0YXJ0LAorICAgICAgICAgICB2MTI4X2JpdF9zdHJpbmcoJnJkYi0+Yml0bWFzaykpOwogfQogCi12b2lkCi1yZGJfY2hlY2tfYWRkKHJkYl90ICpyZGIsIHVpbnQzMl90IGlkeCkgeworc3J0cF9lcnJfc3RhdHVzX3QgcmRiX2NoZWNrX2FkZChzcnRwX3JkYl90ICpyZGIsIHVpbnQzMl90IGlkeCkKK3sKKyAgICBpZiAoc3J0cF9yZGJfY2hlY2socmRiLCBpZHgpICE9IHNydHBfZXJyX3N0YXR1c19vaykgeworICAgICAgICBwcmludGYoInJkYl9jaGVjayBmYWlsZWQgYXQgaW5kZXggJXVcbiIsIGlkeCk7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfZmFpbDsKKyAgICB9CisgICAgaWYgKHNydHBfcmRiX2FkZF9pbmRleChyZGIsIGlkeCkgIT0gc3J0cF9lcnJfc3RhdHVzX29rKSB7CisgICAgICAgIHByaW50ZigicmRiX2FkZF9pbmRleCBmYWlsZWQgYXQgaW5kZXggJXVcbiIsIGlkeCk7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfZmFpbDsKKyAgICB9CiAKLSAgaWYgKHJkYl9jaGVjayhyZGIsIGlkeCkgIT0gZXJyX3N0YXR1c19vaykgewotICAgIHByaW50ZigicmRiX2NoZWNrIGZhaWxlZCBhdCBpbmRleCAldVxuIiwgaWR4KTsKLSAgICByZXR1cm47Ci0gIH0KLSAgaWYgKHJkYl9hZGRfaW5kZXgocmRiLCBpZHgpICE9IGVycl9zdGF0dXNfb2spCi0gICAgcHJpbnRmKCJyZGJfYWRkX2luZGV4IGZhaWxlZCBhdCBpbmRleCAldVxuIiwgaWR4KTsKLQorICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7CiB9CiAKLXZvaWQKLXJkYl9jaGVja19leHBlY3RfZmFpbHVyZShyZGJfdCAqcmRiLCB1aW50MzJfdCBpZHgpIHsKK3NydHBfZXJyX3N0YXR1c190IHJkYl9jaGVja19leHBlY3RfZmFpbHVyZShzcnRwX3JkYl90ICpyZGIsIHVpbnQzMl90IGlkeCkKK3sKKyAgICBzcnRwX2Vycl9zdGF0dXNfdCBlcnI7CiAKLSAgaWYgKHJkYl9jaGVjayhyZGIsIGlkeCkgIT0gZXJyX3N0YXR1c19mYWlsKQotICAgIHByaW50ZigicmRiX2NoZWNrIGZhaWxlZCBhdCBpbmRleCAldSAoZmFsc2UgcG9zaXRpdmUpXG4iLCBpZHgpOworICAgIGVyciA9IHNydHBfcmRiX2NoZWNrKHJkYiwgaWR4KTsKKyAgICBpZiAoKGVyciAhPSBzcnRwX2Vycl9zdGF0dXNfcmVwbGF5X29sZCkgJiYKKyAgICAgICAgKGVyciAhPSBzcnRwX2Vycl9zdGF0dXNfcmVwbGF5X2ZhaWwpKSB7CisgICAgICAgIHByaW50ZigicmRiX2NoZWNrIGZhaWxlZCBhdCBpbmRleCAldSAoZmFsc2UgcG9zaXRpdmUpXG4iLCBpZHgpOworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2ZhaWw7CisgICAgfQorCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKIH0KIAotdm9pZAotcmRiX2NoZWNrX3Vub3JkZXJlZChyZGJfdCAqcmRiLCB1aW50MzJfdCBpZHgpIHsKLSAgZXJyX3N0YXR1c190IHJzdGF0Oworc3J0cF9lcnJfc3RhdHVzX3QgcmRiX2NoZWNrX2FkZF91bm9yZGVyZWQoc3J0cF9yZGJfdCAqcmRiLCB1aW50MzJfdCBpZHgpCit7CisgICAgc3J0cF9lcnJfc3RhdHVzX3QgcnN0YXQ7CiAKLSAgcnN0YXQgPSByZGJfY2hlY2socmRiLCBpZHgpOwotICBpZiAoKHJzdGF0ICE9IGVycl9zdGF0dXNfb2spICYmIChyc3RhdCAhPSBlcnJfc3RhdHVzX3JlcGxheV9vbGQpKQotICAgIHByaW50ZigicmRiX2NoZWNrX3Vub3JkZXJlZCBmYWlsZWQgYXQgaW5kZXggJXVcbiIsIGlkeCk7CisgICAgLyogcHJpbnRmKCJpbmRleDogJXVcbiIsIGlkeCk7ICovCisgICAgcnN0YXQgPSBzcnRwX3JkYl9jaGVjayhyZGIsIGlkeCk7CisgICAgaWYgKChyc3RhdCAhPSBzcnRwX2Vycl9zdGF0dXNfb2spICYmCisgICAgICAgIChyc3RhdCAhPSBzcnRwX2Vycl9zdGF0dXNfcmVwbGF5X29sZCkpIHsKKyAgICAgICAgcHJpbnRmKCJyZGJfY2hlY2tfYWRkX3Vub3JkZXJlZCBmYWlsZWQgYXQgaW5kZXggJXVcbiIsIGlkeCk7CisgICAgICAgIHJldHVybiByc3RhdDsKKyAgICB9CisgICAgaWYgKHJzdGF0ID09IHNydHBfZXJyX3N0YXR1c19yZXBsYXlfb2xkKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7CisgICAgfQorICAgIGlmIChzcnRwX3JkYl9hZGRfaW5kZXgocmRiLCBpZHgpICE9IHNydHBfZXJyX3N0YXR1c19vaykgeworICAgICAgICBwcmludGYoInJkYl9hZGRfaW5kZXggZmFpbGVkIGF0IGluZGV4ICV1XG4iLCBpZHgpOworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2ZhaWw7CisgICAgfQorCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKIH0KIAorc3J0cF9lcnJfc3RhdHVzX3QgdGVzdF9yZGJfZGIoKQoreworICAgIHNydHBfcmRiX3QgcmRiOworICAgIHVpbnQzMl90IGlkeCwgaXJjdmQ7CisgICAgdXRfY29ubmVjdGlvbiB1dGM7CisgICAgc3J0cF9lcnJfc3RhdHVzX3QgZXJyOwogCisgICAgaWYgKHNydHBfcmRiX2luaXQoJnJkYikgIT0gc3J0cF9lcnJfc3RhdHVzX29rKSB7CisgICAgICAgIHByaW50ZigicmRiX2luaXQgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19pbml0X2ZhaWw7CisgICAgfQogCi0jZGVmaW5lIE1BWF9JRFggMTYwCisgICAgLyogdGVzdCBzZXF1ZW50aWFsIGluc2VydGlvbiAqLworICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgbnVtX3RyaWFsczsgaWR4KyspIHsKKyAgICAgICAgZXJyID0gcmRiX2NoZWNrX2FkZCgmcmRiLCBpZHgpOworICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CiAKLXZvaWQKLXRlc3RfcmRiX2RiKCkgewotICByZGJfdCByZGI7Ci0gIHVpbnQzMl90IGlkeCwgaXJjdmQ7Ci0gIHV0X2Nvbm5lY3Rpb24gdXRjOwotICAKLSAgaWYgKHJkYl9pbml0KCZyZGIpICE9IGVycl9zdGF0dXNfb2spIHsKLSAgICBwcmludGYoInJkYl9pbml0IGZhaWxlZFxuIik7Ci0gICAgZXhpdCgxKTsKLSAgfQorICAgIC8qIHRlc3QgZm9yIGZhbHNlIHBvc2l0aXZlcyAqLworICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgbnVtX3RyaWFsczsgaWR4KyspIHsKKyAgICAgICAgZXJyID0gcmRiX2NoZWNrX2V4cGVjdF9mYWlsdXJlKCZyZGIsIGlkeCk7CisgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgIH0KIAotICAvKiB0ZXN0IHNlcXVlbnRpYWwgaW5zZXJ0aW9uICovCi0gIGZvciAoaWR4PTA7IGlkeCA8IE1BWF9JRFg7IGlkeCsrKSB7Ci0gICAgcmRiX2NoZWNrX2FkZCgmcmRiLCBpZHgpOwotICB9CisgICAgLyogcmUtaW5pdGlhbGl6ZSAqLworICAgIGlmIChzcnRwX3JkYl9pbml0KCZyZGIpICE9IHNydHBfZXJyX3N0YXR1c19vaykgeworICAgICAgICBwcmludGYoInJkYl9pbml0IGZhaWxlZFxuIik7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfZmFpbDsKKyAgICB9CiAKLSAgLyogdGVzdCBmb3IgZmFsc2UgcG9zaXRpdmVzICovCi0gIGZvciAoaWR4PTA7IGlkeCA8IE1BWF9JRFg7IGlkeCsrKSB7Ci0gICAgcmRiX2NoZWNrX2V4cGVjdF9mYWlsdXJlKCZyZGIsIGlkeCk7Ci0gIH0KKyAgICAvKiB0ZXN0IG5vbi1zZXF1ZW50aWFsIGluc2VydGlvbiAqLworICAgIHV0X2luaXQoJnV0Yyk7CiAKLSAgLyogcmUtaW5pdGlhbGl6ZSAqLwotICBpZiAocmRiX2luaXQoJnJkYikgIT0gZXJyX3N0YXR1c19vaykgewotICAgIHByaW50ZigicmRiX2luaXQgZmFpbGVkXG4iKTsKLSAgICBleGl0KDEpOwotICB9CisgICAgZm9yIChpZHggPSAwOyBpZHggPCBudW1fdHJpYWxzOyBpZHgrKykgeworICAgICAgICBpcmN2ZCA9IHV0X25leHRfaW5kZXgoJnV0Yyk7CisgICAgICAgIGVyciA9IHJkYl9jaGVja19hZGRfdW5vcmRlcmVkKCZyZGIsIGlyY3ZkKTsKKyAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIGVyciA9IHJkYl9jaGVja19leHBlY3RfZmFpbHVyZSgmcmRiLCBpcmN2ZCk7CisgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgIH0KIAotICAvKiB0ZXN0IG5vbi1zZXF1ZW50aWFsIGluc2VydGlvbiAqLwotICB1dF9pbml0KCZ1dGMpOwotICAKLSAgZm9yIChpZHg9MDsgaWR4IDwgTUFYX0lEWDsgaWR4KyspIHsKLSAgICBpcmN2ZCA9IHV0X25leHRfaW5kZXgoJnV0Yyk7Ci0gICAgcmRiX2NoZWNrX3Vub3JkZXJlZCgmcmRiLCBpcmN2ZCk7Ci0gIH0KLSAgCisgICAgLyogcmUtaW5pdGlhbGl6ZSAqLworICAgIGlmIChzcnRwX3JkYl9pbml0KCZyZGIpICE9IHNydHBfZXJyX3N0YXR1c19vaykgeworICAgICAgICBwcmludGYoInJkYl9pbml0IGZhaWxlZFxuIik7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfZmFpbDsKKyAgICB9CisKKyAgICAvKiB0ZXN0IGluc2VydGlvbiB3aXRoIGxhcmdlIGdhcHMgKi8KKyAgICBmb3IgKGlkeCA9IDAsIGlyY3ZkID0gMDsgaWR4IDwgbnVtX3RyaWFsczsKKyAgICAgICAgIGlkeCsrLCBpcmN2ZCArPSAoMSA8PCAoc3J0cF9jaXBoZXJfcmFuZF91MzJfZm9yX3Rlc3RzKCkgJSAxMCkpKSB7CisgICAgICAgIGVyciA9IHJkYl9jaGVja19hZGQoJnJkYiwgaXJjdmQpOworICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgZXJyID0gcmRiX2NoZWNrX2V4cGVjdF9mYWlsdXJlKCZyZGIsIGlyY3ZkKTsKKyAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgLyogcmUtaW5pdGlhbGl6ZSAqLworICAgIGlmIChzcnRwX3JkYl9pbml0KCZyZGIpICE9IHNydHBfZXJyX3N0YXR1c19vaykgeworICAgICAgICBwcmludGYoInJkYl9pbml0IGZhaWxlZFxuIik7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfZmFpbDsKKyAgICB9CisKKyAgICAvKiB0ZXN0IGxvc3Mgb2YgZmlyc3QgNTEzIHBhY2tldHMgKi8KKyAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IG51bV90cmlhbHM7IGlkeCsrKSB7CisgICAgICAgIGVyciA9IHJkYl9jaGVja19hZGQoJnJkYiwgaWR4ICsgNTEzKTsKKyAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgLyogdGVzdCBmb3IgZmFsc2UgcG9zaXRpdmVzICovCisgICAgZm9yIChpZHggPSAwOyBpZHggPCBudW1fdHJpYWxzICsgNTEzOyBpZHgrKykgeworICAgICAgICBlcnIgPSByZGJfY2hlY2tfZXhwZWN0X2ZhaWx1cmUoJnJkYiwgaWR4KTsKKyAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgLyogdGVzdCBmb3Iga2V5IGV4cGlyZWQgKi8KKyAgICBpZiAoc3J0cF9yZGJfaW5pdCgmcmRiKSAhPSBzcnRwX2Vycl9zdGF0dXNfb2spIHsKKyAgICAgICAgcHJpbnRmKCJyZGJfaW5pdCBmYWlsZWRcbiIpOworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2ZhaWw7CisgICAgfQorICAgIHJkYi53aW5kb3dfc3RhcnQgPSAweDdmZmZmZmZlOworICAgIGlmIChzcnRwX3JkYl9pbmNyZW1lbnQoJnJkYikgIT0gc3J0cF9lcnJfc3RhdHVzX29rKSB7CisgICAgICAgIHByaW50Zigic3J0cF9yZGJfaW5jcmVtZW50IG9mIDB4N2ZmZmZmZmUgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19mYWlsOworICAgIH0KKyAgICBpZiAoc3J0cF9yZGJfZ2V0X3ZhbHVlKCZyZGIpICE9IDB4N2ZmZmZmZmYpIHsKKyAgICAgICAgcHJpbnRmKCJyZGIgdmFsaXVlIHdhcyBub3QgMHg3ZmZmZmZmZlxuIik7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfZmFpbDsKKyAgICB9CisgICAgaWYgKHNydHBfcmRiX2luY3JlbWVudCgmcmRiKSAhPSBzcnRwX2Vycl9zdGF0dXNfa2V5X2V4cGlyZWQpIHsKKyAgICAgICAgcHJpbnRmKCJzcnRwX3JkYl9pbmNyZW1lbnQgb2YgMHg3ZmZmZmZmZiBkaWQgbm90IHJldHVybiAiCisgICAgICAgICAgICAgICAic3J0cF9lcnJfc3RhdHVzX2tleV9leHBpcmVkXG4iKTsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19mYWlsOworICAgIH0KKyAgICBpZiAoc3J0cF9yZGJfZ2V0X3ZhbHVlKCZyZGIpICE9IDB4N2ZmZmZmZmYpIHsKKyAgICAgICAgcHJpbnRmKCJyZGIgdmFsaXVlIHdhcyBub3QgMHg3ZmZmZmZmZlxuIik7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfZmFpbDsKKyAgICB9CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQogCi0jaW5jbHVkZSA8dGltZS5oPiAgICAgICAvKiBmb3IgY2xvY2soKSAgKi8KLSNpbmNsdWRlIDxzdGRsaWIuaD4gICAgIC8qIGZvciByYW5kb20oKSAqLworI2luY2x1ZGUgPHRpbWUuaD4gICAvKiBmb3IgY2xvY2soKSAgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4gLyogZm9yIHJhbmRvbSgpICovCiAKICNkZWZpbmUgUkVQTEFZX05VTV9UUklBTFMgMTAwMDAwMDAKIAotZG91YmxlCi1yZGJfY2hlY2tfYWRkc19wZXJfc2Vjb25kKCkgewotICB1aW50MzJfdCBpOwotICByZGJfdCByZGI7Ci0gIGNsb2NrX3QgdGltZXI7Ci0gIGludCBmYWlsdXJlczsgICAgICAgICAgICAgICAgICAgIC8qIGNvdW50IG51bWJlciBvZiBmYWlsdXJlcyAgICAgICAgKi8KLSAgCi0gIGlmIChyZGJfaW5pdCgmcmRiKSAhPSBlcnJfc3RhdHVzX29rKSB7Ci0gICAgcHJpbnRmKCJyZGJfaW5pdCBmYWlsZWRcbiIpOwotICAgIGV4aXQoMSk7Ci0gIH0gIAorZG91YmxlIHJkYl9jaGVja19hZGRzX3Blcl9zZWNvbmQodm9pZCkKK3sKKyAgICB1aW50MzJfdCBpOworICAgIHNydHBfcmRiX3QgcmRiOworICAgIGNsb2NrX3QgdGltZXI7CisgICAgaW50IGZhaWx1cmVzID0gMDsgLyogY291bnQgbnVtYmVyIG9mIGZhaWx1cmVzICAgICAgICAqLwogCi0gIHRpbWVyID0gY2xvY2soKTsKLSAgZm9yKGk9MDsgaSA8IFJFUExBWV9OVU1fVFJJQUxTOyBpKz0zKSB7Ci0gICAgaWYgKHJkYl9jaGVjaygmcmRiLCBpKzIpICE9IGVycl9zdGF0dXNfb2spCi0gICAgICArK2ZhaWx1cmVzOwotICAgIGlmIChyZGJfYWRkX2luZGV4KCZyZGIsIGkrMikgIT0gZXJyX3N0YXR1c19vaykKLSAgICAgICsrZmFpbHVyZXM7Ci0gICAgaWYgKHJkYl9jaGVjaygmcmRiLCBpKzEpICE9IGVycl9zdGF0dXNfb2spCi0gICAgICArK2ZhaWx1cmVzOwotICAgIGlmIChyZGJfYWRkX2luZGV4KCZyZGIsIGkrMSkgIT0gZXJyX3N0YXR1c19vaykKLSAgICAgICsrZmFpbHVyZXM7Ci0gICAgaWYgKHJkYl9jaGVjaygmcmRiLCBpKSAhPSBlcnJfc3RhdHVzX29rKQotICAgICAgKytmYWlsdXJlczsKLSAgICBpZiAocmRiX2FkZF9pbmRleCgmcmRiLCBpKSAhPSBlcnJfc3RhdHVzX29rKQotICAgICAgKytmYWlsdXJlczsKLSAgfQotICB0aW1lciA9IGNsb2NrKCkgLSB0aW1lcjsKKyAgICBpZiAoc3J0cF9yZGJfaW5pdCgmcmRiKSAhPSBzcnRwX2Vycl9zdGF0dXNfb2spIHsKKyAgICAgICAgcHJpbnRmKCJyZGJfaW5pdCBmYWlsZWRcbiIpOworICAgICAgICBleGl0KDEpOworICAgIH0KIAotICByZXR1cm4gKGRvdWJsZSkgQ0xPQ0tTX1BFUl9TRUMgKiBSRVBMQVlfTlVNX1RSSUFMUyAvIHRpbWVyOworICAgIHRpbWVyID0gY2xvY2soKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgUkVQTEFZX05VTV9UUklBTFM7IGkgKz0gMykgeworICAgICAgICBpZiAoc3J0cF9yZGJfY2hlY2soJnJkYiwgaSArIDIpICE9IHNydHBfZXJyX3N0YXR1c19vaykKKyAgICAgICAgICAgICsrZmFpbHVyZXM7CisgICAgICAgIGlmIChzcnRwX3JkYl9hZGRfaW5kZXgoJnJkYiwgaSArIDIpICE9IHNydHBfZXJyX3N0YXR1c19vaykKKyAgICAgICAgICAgICsrZmFpbHVyZXM7CisgICAgICAgIGlmIChzcnRwX3JkYl9jaGVjaygmcmRiLCBpICsgMSkgIT0gc3J0cF9lcnJfc3RhdHVzX29rKQorICAgICAgICAgICAgKytmYWlsdXJlczsKKyAgICAgICAgaWYgKHNydHBfcmRiX2FkZF9pbmRleCgmcmRiLCBpICsgMSkgIT0gc3J0cF9lcnJfc3RhdHVzX29rKQorICAgICAgICAgICAgKytmYWlsdXJlczsKKyAgICAgICAgaWYgKHNydHBfcmRiX2NoZWNrKCZyZGIsIGkpICE9IHNydHBfZXJyX3N0YXR1c19vaykKKyAgICAgICAgICAgICsrZmFpbHVyZXM7CisgICAgICAgIGlmIChzcnRwX3JkYl9hZGRfaW5kZXgoJnJkYiwgaSkgIT0gc3J0cF9lcnJfc3RhdHVzX29rKQorICAgICAgICAgICAgKytmYWlsdXJlczsKKyAgICB9CisgICAgdGltZXIgPSBjbG9jaygpIC0gdGltZXI7CisKKyAgICByZXR1cm4gKGRvdWJsZSlDTE9DS1NfUEVSX1NFQyAqIFJFUExBWV9OVU1fVFJJQUxTIC8gdGltZXI7CiB9CmRpZmYgLS1naXQgYS90ZXN0L3JvY19kcml2ZXIuYyBiL3Rlc3Qvcm9jX2RyaXZlci5jCmluZGV4IDEwZTU0ODguLjQzOTg2MjAgMTAwNjQ0Ci0tLSBhL3Rlc3Qvcm9jX2RyaXZlci5jCisrKyBiL3Rlc3Qvcm9jX2RyaXZlci5jCkBAIC04LDI2ICs4LDI2IEBACiAgKi8KIAogLyoKLSAqCQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUsIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxNywgQ2lzY28gU3lzdGVtcywgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAorICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgotICogCisgKgogICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKICAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKICAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCiAgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAorICoKICAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKICAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCkBAIC00MywxMjMgKzQzLDEyOCBAQAogICoKICAqLwogCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCiAKICNpbmNsdWRlIDxzdGRpby5oPgogCiAvKgogICogZGVmaW5pbmcgUk9DX1RFU1QgY2F1c2VzIHNtYWxsIGRhdGF0eXBlcyB0byBiZSB1c2VkIGluCi0gKiB4dGRfc2VxX251bV90IC0gdGhpcyBhbGxvd3MgdGhlIGZ1bmN0aW9ucyB0byBiZSBleGhhdXN0aXZlbHkgdGVzdGVkLgorICogc3J0cF94dGRfc2VxX251bV90IC0gdGhpcyBhbGxvd3MgdGhlIGZ1bmN0aW9ucyB0byBiZSBleGhhdXN0aXZlbHkgdGVzdGVkLgogICovCiAjaWYgUk9DX05FRURTX1RPX0JFX1RFU1RFRAotI2RlZmluZSBST0NfVEVTVCAgICAgCisjZGVmaW5lIFJPQ19URVNUCiAjZW5kaWYKIAogI2luY2x1ZGUgInJkYnguaCIKICNpbmNsdWRlICJ1dF9zaW0uaCIKIAotZXJyX3N0YXR1c190Ci1yb2NfdGVzdChpbnQgbnVtX3RyaWFscyk7CitzcnRwX2Vycl9zdGF0dXNfdCByb2NfdGVzdChpbnQgbnVtX3RyaWFscyk7CiAKLWludAotbWFpbiAoKSB7Ci0gIGVycl9zdGF0dXNfdCBzdGF0dXM7CitpbnQgbWFpbih2b2lkKQoreworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKIAotICBwcmludGYoInJvbGxvdmVyIGNvdW50ZXIgdGVzdCBkcml2ZXJcbiIKLQkgIkRhdmlkIEEuIE1jR3Jld1xuIgotCSAiQ2lzY28gU3lzdGVtcywgSW5jLlxuIik7Ci0gIAotICBwcmludGYoInRlc3RpbmcgaW5kZXggZnVuY3Rpb25zLi4uIik7Ci0gIHN0YXR1cyA9IHJvY190ZXN0KDEgPDwgMTgpOwotICBpZiAoc3RhdHVzKSB7Ci0gICAgcHJpbnRmKCJmYWlsZWRcbiIpOwotICAgIGV4aXQoc3RhdHVzKTsKLSAgfQotICBwcmludGYoInBhc3NlZFxuIik7Ci0gIHJldHVybiAwOworICAgIHByaW50Zigicm9sbG92ZXIgY291bnRlciB0ZXN0IGRyaXZlclxuIgorICAgICAgICAgICAiRGF2aWQgQS4gTWNHcmV3XG4iCisgICAgICAgICAgICJDaXNjbyBTeXN0ZW1zLCBJbmMuXG4iKTsKKworICAgIHByaW50ZigidGVzdGluZyBpbmRleCBmdW5jdGlvbnMuLi4iKTsKKyAgICBzdGF0dXMgPSByb2NfdGVzdCgxIDw8IDE4KTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHByaW50ZigiZmFpbGVkXG4iKTsKKyAgICAgICAgZXhpdChzdGF0dXMpOworICAgIH0KKyAgICBwcmludGYoInBhc3NlZFxuIik7CisgICAgcmV0dXJuIDA7CiB9CiAKLQogI2RlZmluZSBST0NfVkVSQk9TRSAwCiAKLWVycl9zdGF0dXNfdAotcm9jX3Rlc3QoaW50IG51bV90cmlhbHMpIHsKLSAgeHRkX3NlcV9udW1fdCBsb2NhbCwgZXN0LCByZWY7Ci0gIHV0X2Nvbm5lY3Rpb24gdXRjOwotICBpbnQgaSwgbnVtX2JhZF9lc3QgPSAwOwotICBpbnQgZGVsdGE7Ci0gIHVpbnQzMl90IGlyY3ZkOwotICBkb3VibGUgZmFpbHVyZV9yYXRlOworc3J0cF9lcnJfc3RhdHVzX3Qgcm9jX3Rlc3QoaW50IG51bV90cmlhbHMpCit7CisgICAgc3J0cF94dGRfc2VxX251bV90IGxvY2FsLCBlc3QsIHJlZjsKKyAgICB1dF9jb25uZWN0aW9uIHV0YzsKKyAgICBpbnQgaSwgbnVtX2JhZF9lc3QgPSAwOworICAgIGludCBkZWx0YTsKKyAgICB1aW50MzJfdCBpcmN2ZDsKKyAgICBkb3VibGUgZmFpbHVyZV9yYXRlOwogCi0gIGluZGV4X2luaXQoJmxvY2FsKTsKLSAgaW5kZXhfaW5pdCgmcmVmKTsKLSAgaW5kZXhfaW5pdCgmZXN0KTsKKyAgICBzcnRwX2luZGV4X2luaXQoJmxvY2FsKTsKKyAgICBzcnRwX2luZGV4X2luaXQoJnJlZik7CisgICAgc3J0cF9pbmRleF9pbml0KCZlc3QpOwogCi0gIHByaW50ZigiXG5cdHRlc3Rpbmcgc2VxdWVudGlhbCBpbnNlcnRpb24uLi4iKTsKLSAgZm9yIChpPTA7IGkgPCAyMDQ4OyBpKyspIHsKLSAgICBkZWx0YSA9IGluZGV4X2d1ZXNzKCZsb2NhbCwgJmVzdCwgKHVpbnQxNl90KSByZWYpOworICAgIHByaW50ZigiXG5cdHRlc3Rpbmcgc2VxdWVudGlhbCBpbnNlcnRpb24uLi4iKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgMjA0ODsgaSsrKSB7CisgICAgICAgIHNydHBfaW5kZXhfZ3Vlc3MoJmxvY2FsLCAmZXN0LCAodWludDE2X3QpcmVmKTsKICNpZiBST0NfVkVSQk9TRQotICAgIHByaW50ZigiJWxsZCwgJWxsZCwgJWRcbiIsIHJlZiwgZXN0LCAgaSk7CisgICAgICAgIHByaW50ZigiJWxsZCwgJWxsZCwgJWRcbiIsIHJlZiwgZXN0LCBpKTsKICNlbmRpZgotICAgIGlmIChyZWYgIT0gZXN0KSB7CisgICAgICAgIGlmIChyZWYgIT0gZXN0KSB7CiAjaWYgUk9DX1ZFUkJPU0UKLSAgICAgIHByaW50ZigiICpiYWQgZXN0aW1hdGUqXG4iKTsKKyAgICAgICAgICAgIHByaW50ZigiICpiYWQgZXN0aW1hdGUqXG4iKTsKICNlbmRpZgotICAgICAgKytudW1fYmFkX2VzdDsKKyAgICAgICAgICAgICsrbnVtX2JhZF9lc3Q7CisgICAgICAgIH0KKyAgICAgICAgc3J0cF9pbmRleF9hZHZhbmNlKCZyZWYsIDEpOwogICAgIH0KLSAgICBpbmRleF9hZHZhbmNlKCZyZWYsIDEpOwotICB9Ci0gIGZhaWx1cmVfcmF0ZSA9IChkb3VibGUpIG51bV9iYWRfZXN0IC8gbnVtX3RyaWFsczsKLSAgaWYgKGZhaWx1cmVfcmF0ZSA+IDAuMDEpIHsKLSAgICBwcmludGYoImVycm9yOiBmYWlsdXJlIHJhdGUgdG9vIGhpZ2ggKCVkIGJhZCBlc3RpbWF0ZXMgaW4gJWQgdHJpYWxzKVxuIiwgCi0JICAgbnVtX2JhZF9lc3QsIG51bV90cmlhbHMpOwotICAgIHJldHVybiBlcnJfc3RhdHVzX2FsZ29fZmFpbDsKLSAgfQotICBwcmludGYoImRvbmVcbiIpOwotCi0KLSAgcHJpbnRmKCJcdHRlc3Rpbmcgbm9uLXNlcXVlbnRpYWwgaW5zZXJ0aW9uLi4uIik7Ci0gIGluZGV4X2luaXQoJmxvY2FsKTsKLSAgaW5kZXhfaW5pdCgmcmVmKTsKLSAgaW5kZXhfaW5pdCgmZXN0KTsKLSAgdXRfaW5pdCgmdXRjKTsKLSAgCi0gIGZvciAoaT0wOyBpIDwgbnVtX3RyaWFsczsgaSsrKSB7Ci0gICAgCi0gICAgLyogZ2V0IG5leHQgc2VxIG51bSBmcm9tIHVucmVsaWFibGUgdHJhbnNwb3J0IHNpbXVsYXRvciAqLwotICAgIGlyY3ZkID0gdXRfbmV4dF9pbmRleCgmdXRjKTsKLSAgICAKLSAgICAvKiBzZXQgcmVmIHRvIHZhbHVlIG9mIGlyY3ZkICovCi0gICAgcmVmID0gaXJjdmQ7IAotCi0gICAgLyogZXN0aW1hdGUgaW5kZXggYmFzZWQgb24gbG93IGJpdHMgb2YgaXJjdmQgKi8KLSAgICBkZWx0YSA9IGluZGV4X2d1ZXNzKCZsb2NhbCwgJmVzdCwgKHVpbnQxNl90KSByZWYpOwotI2lmIFJPQ19WRVJCT1NFCi0gICAgcHJpbnRmKCJyZWY6ICVsbGQsIGxvY2FsOiAlbGxkLCBlc3Q6ICVsbGQsIGlyY3ZkOiAlZCwgZGVsdGE6ICVkXG4iLCAKLQkgICByZWYsIGxvY2FsLCBlc3QsIGlyY3ZkLCBkZWx0YSk7Ci0jZW5kaWYKLSAgICAKLSAgICAvKiBub3cgdXBkYXRlIGxvY2FsIHh0ZF9zZXFfbnVtX3QgYXMgbmVjZXNzYXJ5ICovCi0gICAgaWYgKGRlbHRhID4gMCkgCi0gICAgICBpbmRleF9hZHZhbmNlKCZsb2NhbCwgZGVsdGEpOwotCi0gICAgaWYgKHJlZiAhPSBlc3QpIHsKLSNpZiBST0NfVkVSQk9TRQotICAgICAgcHJpbnRmKCIgKmJhZCBlc3RpbWF0ZSpcbiIpOwotI2VuZGlmCi0gICAgICAvKiByZWNvcmQgZmFpbHVyZSBldmVudCAqLwotICAgICAgKytudW1fYmFkX2VzdDsKLSAgICAgIAotICAgICAgLyogcmVzZXQgbG9jYWwgdmFsdWUgdG8gY29ycmVjdCB2YWx1ZSAqLwotICAgICAgbG9jYWwgPSByZWY7CisgICAgZmFpbHVyZV9yYXRlID0gKGRvdWJsZSludW1fYmFkX2VzdCAvIG51bV90cmlhbHM7CisgICAgaWYgKGZhaWx1cmVfcmF0ZSA+IDAuMDEpIHsKKyAgICAgICAgcHJpbnRmKCJlcnJvcjogZmFpbHVyZSByYXRlIHRvbyBoaWdoICglZCBiYWQgZXN0aW1hdGVzIGluICVkIHRyaWFscylcbiIsCisgICAgICAgICAgICAgICBudW1fYmFkX2VzdCwgbnVtX3RyaWFscyk7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYWxnb19mYWlsOwogICAgIH0KLSAgfQotICBmYWlsdXJlX3JhdGUgPSAoZG91YmxlKSBudW1fYmFkX2VzdCAvIG51bV90cmlhbHM7Ci0gIGlmIChmYWlsdXJlX3JhdGUgPiAwLjAxKSB7Ci0gICAgcHJpbnRmKCJlcnJvcjogZmFpbHVyZSByYXRlIHRvbyBoaWdoICglZCBiYWQgZXN0aW1hdGVzIGluICVkIHRyaWFscylcbiIsIAotCSAgIG51bV9iYWRfZXN0LCBudW1fdHJpYWxzKTsKLSAgICByZXR1cm4gZXJyX3N0YXR1c19hbGdvX2ZhaWw7Ci0gIH0KLSAgcHJpbnRmKCJkb25lXG4iKTsKKyAgICBwcmludGYoImRvbmVcbiIpOwogCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOworICAgIHByaW50ZigiXHR0ZXN0aW5nIG5vbi1zZXF1ZW50aWFsIGluc2VydGlvbi4uLiIpOworICAgIHNydHBfaW5kZXhfaW5pdCgmbG9jYWwpOworICAgIHNydHBfaW5kZXhfaW5pdCgmcmVmKTsKKyAgICBzcnRwX2luZGV4X2luaXQoJmVzdCk7CisgICAgdXRfaW5pdCgmdXRjKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fdHJpYWxzOyBpKyspIHsKKyAgICAgICAgLyogZ2V0IG5leHQgc2VxIG51bSBmcm9tIHVucmVsaWFibGUgdHJhbnNwb3J0IHNpbXVsYXRvciAqLworICAgICAgICBpcmN2ZCA9IHV0X25leHRfaW5kZXgoJnV0Yyk7CisKKyAgICAgICAgLyogc2V0IHJlZiB0byB2YWx1ZSBvZiBpcmN2ZCAqLworICAgICAgICByZWYgPSBpcmN2ZDsKKworICAgICAgICAvKiBlc3RpbWF0ZSBpbmRleCBiYXNlZCBvbiBsb3cgYml0cyBvZiBpcmN2ZCAqLworICAgICAgICBkZWx0YSA9IHNydHBfaW5kZXhfZ3Vlc3MoJmxvY2FsLCAmZXN0LCAodWludDE2X3QpcmVmKTsKKyNpZiBST0NfVkVSQk9TRQorICAgICAgICBwcmludGYoInJlZjogJWxsZCwgbG9jYWw6ICVsbGQsIGVzdDogJWxsZCwgaXJjdmQ6ICVkLCBkZWx0YTogJWRcbiIsIHJlZiwKKyAgICAgICAgICAgICAgIGxvY2FsLCBlc3QsIGlyY3ZkLCBkZWx0YSk7CisjZW5kaWYKKworICAgICAgICBpZiAobG9jYWwgKyBkZWx0YSAhPSBlc3QpIHsKKyAgICAgICAgICAgIHByaW50ZigiICpiYWQgZGVsdGEqOiBsb2NhbCAlbGx1ICsgZGVsdGEgJWQgIT0gZXN0ICVsbHVcbiIsCisgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsb2NhbCwgZGVsdGEsICh1bnNpZ25lZCBsb25nIGxvbmcpZXN0KTsKKyAgICAgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYWxnb19mYWlsOworICAgICAgICB9CisKKyAgICAgICAgLyogbm93IHVwZGF0ZSBsb2NhbCBzcnRwX3h0ZF9zZXFfbnVtX3QgYXMgbmVjZXNzYXJ5ICovCisgICAgICAgIGlmIChkZWx0YSA+IDApCisgICAgICAgICAgICBzcnRwX2luZGV4X2FkdmFuY2UoJmxvY2FsLCBkZWx0YSk7CisKKyAgICAgICAgaWYgKHJlZiAhPSBlc3QpIHsKKyNpZiBST0NfVkVSQk9TRQorICAgICAgICAgICAgcHJpbnRmKCIgKmJhZCBlc3RpbWF0ZSpcbiIpOworI2VuZGlmCisgICAgICAgICAgICAvKiByZWNvcmQgZmFpbHVyZSBldmVudCAqLworICAgICAgICAgICAgKytudW1fYmFkX2VzdDsKKworICAgICAgICAgICAgLyogcmVzZXQgbG9jYWwgdmFsdWUgdG8gY29ycmVjdCB2YWx1ZSAqLworICAgICAgICAgICAgbG9jYWwgPSByZWY7CisgICAgICAgIH0KKyAgICB9CisgICAgZmFpbHVyZV9yYXRlID0gKGRvdWJsZSludW1fYmFkX2VzdCAvIG51bV90cmlhbHM7CisgICAgaWYgKGZhaWx1cmVfcmF0ZSA+IDAuMDEpIHsKKyAgICAgICAgcHJpbnRmKCJlcnJvcjogZmFpbHVyZSByYXRlIHRvbyBoaWdoICglZCBiYWQgZXN0aW1hdGVzIGluICVkIHRyaWFscylcbiIsCisgICAgICAgICAgICAgICBudW1fYmFkX2VzdCwgbnVtX3RyaWFscyk7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYWxnb19mYWlsOworICAgIH0KKyAgICBwcmludGYoImRvbmVcbiIpOworCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKIH0KZGlmZiAtLWdpdCBhL3Rlc3QvcnRwLmMgYi90ZXN0L3J0cC5jCmluZGV4IDk0NjI4ZTEuLjcwMjQ4ZWUgMTAwNjQ0Ci0tLSBhL3Rlc3QvcnRwLmMKKysrIGIvdGVzdC9ydHAuYwpAQCAtNyw2ICs3LDQxIEBACiAgKiBDaXNjbyBTeXN0ZW1zLCBJbmMuCiAgKi8KIAorLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxNywgQ2lzY28gU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLwogCiAjaW5jbHVkZSAicnRwLmgiCiAKQEAgLTE0LDEzOSArNDksMTgxIEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLQotI2RlZmluZSBQUklOVF9ERUJVRyAgICAwICAgIC8qIHNldCB0byAxIHRvIHByaW50IG91dCBkZWJ1Z2dpbmcgZGF0YSAqLwotI2RlZmluZSBWRVJCT1NFX0RFQlVHICAwICAgIC8qIHNldCB0byAxIHRvIHByaW50IG91dCBtb3JlIGRhdGEgICAgICAqLwotCi1zc2l6ZV90Ci1ydHBfc2VuZHRvKHJ0cF9zZW5kZXJfdCAqc2VuZGVyLCBjb25zdCB2b2lkKiBtc2csIGludCBsZW4pIHsKLSAgaW50IG9jdGV0c19zZW50OwotICBlcnJfc3RhdHVzX3Qgc3RhdDsKLSAgaW50IHBrdF9sZW4gPSBsZW4gKyBydHBfaGVhZGVyX2xlbjsKLQotICAvKiBtYXJzaGFsIGRhdGEgKi8KLSAgc3RybmNweShzZW5kZXItPm1lc3NhZ2UuYm9keSwgbXNnLCBsZW4pOwotICAKLSAgLyogdXBkYXRlIGhlYWRlciAqLwotICBzZW5kZXItPm1lc3NhZ2UuaGVhZGVyLnNlcSA9IG50b2hzKHNlbmRlci0+bWVzc2FnZS5oZWFkZXIuc2VxKSArIDE7Ci0gIHNlbmRlci0+bWVzc2FnZS5oZWFkZXIuc2VxID0gaHRvbnMoc2VuZGVyLT5tZXNzYWdlLmhlYWRlci5zZXEpOwotICBzZW5kZXItPm1lc3NhZ2UuaGVhZGVyLnRzID0gbnRvaGwoc2VuZGVyLT5tZXNzYWdlLmhlYWRlci50cykgKyAxOwotICBzZW5kZXItPm1lc3NhZ2UuaGVhZGVyLnRzID0gaHRvbmwoc2VuZGVyLT5tZXNzYWdlLmhlYWRlci50cyk7Ci0gIAotICAvKiBhcHBseSBzcnRwICovCi0gIHN0YXQgPSBzcnRwX3Byb3RlY3Qoc2VuZGVyLT5zcnRwX2N0eCwgJnNlbmRlci0+bWVzc2FnZS5oZWFkZXIsICZwa3RfbGVuKTsKLSAgaWYgKHN0YXQpIHsKLSNpZiBQUklOVF9ERUJVRwotICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3I6IHNydHAgcHJvdGVjdGlvbiBmYWlsZWQgd2l0aCBjb2RlICVkXG4iLCBzdGF0KTsKICNlbmRpZgotICAgIHJldHVybiAtMTsKLSAgfQorCisjaW5jbHVkZSAiY2lwaGVyX3ByaXYuaCIKKworI2RlZmluZSBQUklOVF9ERUJVRyAwICAgLyogc2V0IHRvIDEgdG8gcHJpbnQgb3V0IGRlYnVnZ2luZyBkYXRhICovCisjZGVmaW5lIFZFUkJPU0VfREVCVUcgMCAvKiBzZXQgdG8gMSB0byBwcmludCBvdXQgbW9yZSBkYXRhICAgICAgKi8KKworaW50IHJ0cF9zZW5kdG8ocnRwX3NlbmRlcl90IHNlbmRlciwgY29uc3Qgdm9pZCAqbXNnLCBpbnQgbGVuKQoreworICAgIGludCBvY3RldHNfc2VudDsKKyAgICBzcnRwX2Vycl9zdGF0dXNfdCBzdGF0OworICAgIGludCBwa3RfbGVuID0gbGVuICsgUlRQX0hFQURFUl9MRU47CisKKyAgICAvKiBtYXJzaGFsIGRhdGEgKi8KKyAgICBzdHJuY3B5KHNlbmRlci0+bWVzc2FnZS5ib2R5LCBtc2csIGxlbik7CisKKyAgICAvKiB1cGRhdGUgaGVhZGVyICovCisgICAgc2VuZGVyLT5tZXNzYWdlLmhlYWRlci5zZXEgPSBudG9ocyhzZW5kZXItPm1lc3NhZ2UuaGVhZGVyLnNlcSkgKyAxOworICAgIHNlbmRlci0+bWVzc2FnZS5oZWFkZXIuc2VxID0gaHRvbnMoc2VuZGVyLT5tZXNzYWdlLmhlYWRlci5zZXEpOworICAgIHNlbmRlci0+bWVzc2FnZS5oZWFkZXIudHMgPSBudG9obChzZW5kZXItPm1lc3NhZ2UuaGVhZGVyLnRzKSArIDE7CisgICAgc2VuZGVyLT5tZXNzYWdlLmhlYWRlci50cyA9IGh0b25sKHNlbmRlci0+bWVzc2FnZS5oZWFkZXIudHMpOworCisgICAgLyogYXBwbHkgc3J0cCAqLworICAgIHN0YXQgPSBzcnRwX3Byb3RlY3Qoc2VuZGVyLT5zcnRwX2N0eCwgJnNlbmRlci0+bWVzc2FnZS5oZWFkZXIsICZwa3RfbGVuKTsKKyAgICBpZiAoc3RhdCkgeworI2lmIFBSSU5UX0RFQlVHCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3I6IHNydHAgcHJvdGVjdGlvbiBmYWlsZWQgd2l0aCBjb2RlICVkXG4iLCBzdGF0KTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gLTE7CisgICAgfQogI2lmIFZFUkJPU0VfREVCVUcKLSAgc3J0cF9wcmludF9wYWNrZXQoJnNlbmRlci0+bWVzc2FnZS5oZWFkZXIsIHBrdF9sZW4pOworICAgIHNydHBfcHJpbnRfcGFja2V0KCZzZW5kZXItPm1lc3NhZ2UuaGVhZGVyLCBwa3RfbGVuKTsKICNlbmRpZgotICBvY3RldHNfc2VudCA9IHNlbmR0byhzZW5kZXItPnNvY2tldCwgJnNlbmRlci0+bWVzc2FnZSwKLQkJICAgICAgIHBrdF9sZW4sIDAsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2VuZGVyLT5hZGRyLAotCQkgICAgICAgc2l6ZW9mIChzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKyAgICBvY3RldHNfc2VudCA9CisgICAgICAgIHNlbmR0byhzZW5kZXItPnNvY2tldCwgKHZvaWQgKikmc2VuZGVyLT5tZXNzYWdlLCBwa3RfbGVuLCAwLAorICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzZW5kZXItPmFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKIAotICBpZiAob2N0ZXRzX3NlbnQgIT0gcGt0X2xlbikgeworICAgIGlmIChvY3RldHNfc2VudCAhPSBwa3RfbGVuKSB7CiAjaWYgUFJJTlRfREVCVUcKLSAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yOiBjb3VsZG4ndCBzZW5kIG1lc3NhZ2UgJXMiLCAoY2hhciAqKW1zZyk7Ci0gICAgcGVycm9yKCIiKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvcjogY291bGRuJ3Qgc2VuZCBtZXNzYWdlICVzIiwgKGNoYXIgKiltc2cpOworICAgICAgICBwZXJyb3IoIiIpOwogI2VuZGlmCi0gIH0KKyAgICB9CiAKLSAgcmV0dXJuIG9jdGV0c19zZW50OworICAgIHJldHVybiBvY3RldHNfc2VudDsKIH0KIAotc3NpemVfdAotcnRwX3JlY3Zmcm9tKHJ0cF9yZWNlaXZlcl90ICpyZWNlaXZlciwgdm9pZCAqbXNnLCBpbnQgKmxlbikgewotICBpbnQgb2N0ZXRzX3JlY3ZkOwotICBlcnJfc3RhdHVzX3Qgc3RhdDsKLSAgCi0gIG9jdGV0c19yZWN2ZCA9IHJlY3Zmcm9tKHJlY2VpdmVyLT5zb2NrZXQsICh2b2lkICopJnJlY2VpdmVyLT5tZXNzYWdlLAotCQkJICpsZW4sIDAsIChzdHJ1Y3Qgc29ja2FkZHIgKikgTlVMTCwgMCk7CitpbnQgcnRwX3JlY3Zmcm9tKHJ0cF9yZWNlaXZlcl90IHJlY2VpdmVyLCB2b2lkICptc2csIGludCAqbGVuKQoreworICAgIGludCBvY3RldHNfcmVjdmQ7CisgICAgc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdDsKIAotICAvKiB2ZXJpZnkgcnRwIGhlYWRlciAqLwotICBpZiAocmVjZWl2ZXItPm1lc3NhZ2UuaGVhZGVyLnZlcnNpb24gIT0gMikgewotICAgICpsZW4gPSAwOwotICAgIHJldHVybiAtMTsKLSAgfQorICAgIG9jdGV0c19yZWN2ZCA9IHJlY3Zmcm9tKHJlY2VpdmVyLT5zb2NrZXQsICh2b2lkICopJnJlY2VpdmVyLT5tZXNzYWdlLCAqbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIChzdHJ1Y3Qgc29ja2FkZHIgKilOVUxMLCAwKTsKKworICAgIGlmIChvY3RldHNfcmVjdmQgPT0gLTEpIHsKKyAgICAgICAgKmxlbiA9IDA7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiB2ZXJpZnkgcnRwIGhlYWRlciAqLworICAgIGlmIChyZWNlaXZlci0+bWVzc2FnZS5oZWFkZXIudmVyc2lvbiAhPSAyKSB7CisgICAgICAgICpsZW4gPSAwOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQogCiAjaWYgUFJJTlRfREVCVUcKLSAgZnByaW50ZihzdGRlcnIsICIlZCBvY3RldHMgcmVjZWl2ZWQgZnJvbSBTU1JDICV1IiwKLQkgIG9jdGV0c19yZWN2ZCwgcmVjZWl2ZXItPm1lc3NhZ2UuaGVhZGVyLnNzcmMpOworICAgIGZwcmludGYoc3RkZXJyLCAiJWQgb2N0ZXRzIHJlY2VpdmVkIGZyb20gU1NSQyAldVxuIiwgb2N0ZXRzX3JlY3ZkLAorICAgICAgICAgICAgcmVjZWl2ZXItPm1lc3NhZ2UuaGVhZGVyLnNzcmMpOwogI2VuZGlmCiAjaWYgVkVSQk9TRV9ERUJVRwotICBzcnRwX3ByaW50X3BhY2tldCgmcmVjZWl2ZXItPm1lc3NhZ2UuaGVhZGVyLCBvY3RldHNfcmVjdmQpOworICAgIHNydHBfcHJpbnRfcGFja2V0KCZyZWNlaXZlci0+bWVzc2FnZS5oZWFkZXIsIG9jdGV0c19yZWN2ZCk7CiAjZW5kaWYKIAotICAvKiBhcHBseSBzcnRwICovCi0gIHN0YXQgPSBzcnRwX3VucHJvdGVjdChyZWNlaXZlci0+c3J0cF9jdHgsCi0JCQkmcmVjZWl2ZXItPm1lc3NhZ2UuaGVhZGVyLCAmb2N0ZXRzX3JlY3ZkKTsKLSAgaWYgKHN0YXQpIHsKLSNpZiBQUklOVF9ERUJVRwotICAgIGZwcmludGYoc3RkZXJyLAotCSAgICAiXG5lcnJvcjogc3J0cCB1bnByb3RlY3Rpb24gZmFpbGVkIHdpdGggY29kZSAlZCIsIHN0YXQpOwotICAgIGlmIChzdGF0ID09IGVycl9zdGF0dXNfcmVwbGF5X2ZhaWwpCi0gICAgICBmcHJpbnRmKHN0ZGVyciwgIiAocmVwbGF5IGNoZWNrIGZhaWxlZClcbiIpOwotICAgIGlmIChzdGF0ID09IGVycl9zdGF0dXNfYXV0aF9mYWlsKQotICAgICAgZnByaW50ZihzdGRlcnIsICIgKGF1dGggY2hlY2sgZmFpbGVkKVxuIik7IAotI2VuZGlmCi0gICAgcmV0dXJuIC0xOwotICB9Ci0gIHN0cm5jcHkobXNnLCByZWNlaXZlci0+bWVzc2FnZS5ib2R5LCBvY3RldHNfcmVjdmQpOwotICAKLSAgcmV0dXJuIG9jdGV0c19yZWN2ZDsKKyAgICAvKiBhcHBseSBzcnRwICovCisgICAgc3RhdCA9IHNydHBfdW5wcm90ZWN0KHJlY2VpdmVyLT5zcnRwX2N0eCwgJnJlY2VpdmVyLT5tZXNzYWdlLmhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJm9jdGV0c19yZWN2ZCk7CisgICAgaWYgKHN0YXQpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvcjogc3J0cCB1bnByb3RlY3Rpb24gZmFpbGVkIHdpdGggY29kZSAlZCVzXG4iLAorICAgICAgICAgICAgICAgIHN0YXQsCisgICAgICAgICAgICAgICAgc3RhdCA9PSBzcnRwX2Vycl9zdGF0dXNfcmVwbGF5X2ZhaWwKKyAgICAgICAgICAgICAgICAgICAgPyAiIChyZXBsYXkgY2hlY2sgZmFpbGVkKSIKKyAgICAgICAgICAgICAgICAgICAgOiBzdGF0ID09IHNydHBfZXJyX3N0YXR1c19hdXRoX2ZhaWwgPyAiIChhdXRoIGNoZWNrIGZhaWxlZCkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHN0cm5jcHkobXNnLCByZWNlaXZlci0+bWVzc2FnZS5ib2R5LCBvY3RldHNfcmVjdmQpOworCisgICAgcmV0dXJuIG9jdGV0c19yZWN2ZDsKIH0KIAotaW50Ci1ydHBfc2VuZGVyX2luaXQocnRwX3NlbmRlcl90ICpzZW5kZXIsIAotCQlpbnQgc29ja2V0LCAKLQkJc3RydWN0IHNvY2thZGRyX2luIGFkZHIsCi0JCXVpbnQzMl90IHNzcmMpIHsKK2ludCBydHBfc2VuZGVyX2luaXQocnRwX3NlbmRlcl90IHNlbmRlciwKKyAgICAgICAgICAgICAgICAgICAgaW50IHNvY2ssCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3NyYykKK3sKKyAgICAvKiBzZXQgaGVhZGVyIHZhbHVlcyAqLworICAgIHNlbmRlci0+bWVzc2FnZS5oZWFkZXIuc3NyYyA9IGh0b25sKHNzcmMpOworICAgIHNlbmRlci0+bWVzc2FnZS5oZWFkZXIudHMgPSAwOworICAgIHNlbmRlci0+bWVzc2FnZS5oZWFkZXIuc2VxID0gKHVpbnQxNl90KXNydHBfY2lwaGVyX3JhbmRfdTMyX2Zvcl90ZXN0cygpOworICAgIHNlbmRlci0+bWVzc2FnZS5oZWFkZXIubSA9IDA7CisgICAgc2VuZGVyLT5tZXNzYWdlLmhlYWRlci5wdCA9IDB4MTsKKyAgICBzZW5kZXItPm1lc3NhZ2UuaGVhZGVyLnZlcnNpb24gPSAyOworICAgIHNlbmRlci0+bWVzc2FnZS5oZWFkZXIucCA9IDA7CisgICAgc2VuZGVyLT5tZXNzYWdlLmhlYWRlci54ID0gMDsKKyAgICBzZW5kZXItPm1lc3NhZ2UuaGVhZGVyLmNjID0gMDsKIAotICAvKiBzZXQgaGVhZGVyIHZhbHVlcyAqLwotICBzZW5kZXItPm1lc3NhZ2UuaGVhZGVyLnNzcmMgICAgPSBodG9ubChzc3JjKTsKLSAgc2VuZGVyLT5tZXNzYWdlLmhlYWRlci50cyAgICAgID0gMDsKLSAgc2VuZGVyLT5tZXNzYWdlLmhlYWRlci5zZXEgICAgID0gKHVpbnQxNl90KSByYW5kb20oKTsKLSAgc2VuZGVyLT5tZXNzYWdlLmhlYWRlci5tICAgICAgID0gMDsKLSAgc2VuZGVyLT5tZXNzYWdlLmhlYWRlci5wdCAgICAgID0gMHg4ZjsKLSAgc2VuZGVyLT5tZXNzYWdlLmhlYWRlci52ZXJzaW9uID0gMjsKLSAgc2VuZGVyLT5tZXNzYWdlLmhlYWRlci5wICAgICAgID0gMDsKLSAgc2VuZGVyLT5tZXNzYWdlLmhlYWRlci54ICAgICAgID0gMDsKLSAgc2VuZGVyLT5tZXNzYWdlLmhlYWRlci5jYyAgICAgID0gMDsKKyAgICAvKiBzZXQgb3RoZXIgc3R1ZmYgKi8KKyAgICBzZW5kZXItPnNvY2tldCA9IHNvY2s7CisgICAgc2VuZGVyLT5hZGRyID0gYWRkcjsKIAotICAvKiBzZXQgb3RoZXIgc3R1ZmYgKi8KLSAgc2VuZGVyLT5zb2NrZXQgPSBzb2NrZXQ7Ci0gIHNlbmRlci0+YWRkciA9IGFkZHI7Ci0KLSAgcmV0dXJuIDA7CisgICAgcmV0dXJuIDA7CiB9CiAKLWludAotcnRwX3JlY2VpdmVyX2luaXQocnRwX3JlY2VpdmVyX3QgKnJjdnIsIAotCQkgIGludCBzb2NrZXQsIAotCQkgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyLAotCQkgIHVpbnQzMl90IHNzcmMpIHsKLSAgCi0gIC8qIHNldCBoZWFkZXIgdmFsdWVzICovCi0gIHJjdnItPm1lc3NhZ2UuaGVhZGVyLnNzcmMgICAgPSBodG9ubChzc3JjKTsKLSAgcmN2ci0+bWVzc2FnZS5oZWFkZXIudHMgICAgICA9IDA7Ci0gIHJjdnItPm1lc3NhZ2UuaGVhZGVyLnNlcSAgICAgPSAwOwotICByY3ZyLT5tZXNzYWdlLmhlYWRlci5tICAgICAgID0gMDsKLSAgcmN2ci0+bWVzc2FnZS5oZWFkZXIucHQgICAgICA9IDB4OGY7Ci0gIHJjdnItPm1lc3NhZ2UuaGVhZGVyLnZlcnNpb24gPSAyOwotICByY3ZyLT5tZXNzYWdlLmhlYWRlci5wICAgICAgID0gMDsKLSAgcmN2ci0+bWVzc2FnZS5oZWFkZXIueCAgICAgICA9IDA7Ci0gIHJjdnItPm1lc3NhZ2UuaGVhZGVyLmNjICAgICAgPSAwOworaW50IHJ0cF9yZWNlaXZlcl9pbml0KHJ0cF9yZWNlaXZlcl90IHJjdnIsCisgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyX2luIGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNzcmMpCit7CisgICAgLyogc2V0IGhlYWRlciB2YWx1ZXMgKi8KKyAgICByY3ZyLT5tZXNzYWdlLmhlYWRlci5zc3JjID0gaHRvbmwoc3NyYyk7CisgICAgcmN2ci0+bWVzc2FnZS5oZWFkZXIudHMgPSAwOworICAgIHJjdnItPm1lc3NhZ2UuaGVhZGVyLnNlcSA9IDA7CisgICAgcmN2ci0+bWVzc2FnZS5oZWFkZXIubSA9IDA7CisgICAgcmN2ci0+bWVzc2FnZS5oZWFkZXIucHQgPSAweDE7CisgICAgcmN2ci0+bWVzc2FnZS5oZWFkZXIudmVyc2lvbiA9IDI7CisgICAgcmN2ci0+bWVzc2FnZS5oZWFkZXIucCA9IDA7CisgICAgcmN2ci0+bWVzc2FnZS5oZWFkZXIueCA9IDA7CisgICAgcmN2ci0+bWVzc2FnZS5oZWFkZXIuY2MgPSAwOwogCi0gIC8qIHNldCBvdGhlciBzdHVmZiAqLwotICByY3ZyLT5zb2NrZXQgPSBzb2NrZXQ7Ci0gIHJjdnItPmFkZHIgPSBhZGRyOworICAgIC8qIHNldCBvdGhlciBzdHVmZiAqLworICAgIHJjdnItPnNvY2tldCA9IHNvY2s7CisgICAgcmN2ci0+YWRkciA9IGFkZHI7CiAKLSAgcmV0dXJuIDA7CisgICAgcmV0dXJuIDA7CiB9CiAKK2ludCBydHBfc2VuZGVyX2luaXRfc3J0cChydHBfc2VuZGVyX3Qgc2VuZGVyLCBjb25zdCBzcnRwX3BvbGljeV90ICpwb2xpY3kpCit7CisgICAgcmV0dXJuIHNydHBfY3JlYXRlKCZzZW5kZXItPnNydHBfY3R4LCBwb2xpY3kpOworfQogCitpbnQgcnRwX3NlbmRlcl9kZWluaXRfc3J0cChydHBfc2VuZGVyX3Qgc2VuZGVyKQoreworICAgIHJldHVybiBzcnRwX2RlYWxsb2Moc2VuZGVyLT5zcnRwX2N0eCk7Cit9CiAKK2ludCBydHBfcmVjZWl2ZXJfaW5pdF9zcnRwKHJ0cF9yZWNlaXZlcl90IHNlbmRlciwgY29uc3Qgc3J0cF9wb2xpY3lfdCAqcG9saWN5KQoreworICAgIHJldHVybiBzcnRwX2NyZWF0ZSgmc2VuZGVyLT5zcnRwX2N0eCwgcG9saWN5KTsKK30KKworaW50IHJ0cF9yZWNlaXZlcl9kZWluaXRfc3J0cChydHBfcmVjZWl2ZXJfdCBzZW5kZXIpCit7CisgICAgcmV0dXJuIHNydHBfZGVhbGxvYyhzZW5kZXItPnNydHBfY3R4KTsKK30KKworcnRwX3NlbmRlcl90IHJ0cF9zZW5kZXJfYWxsb2Modm9pZCkKK3sKKyAgICByZXR1cm4gKHJ0cF9zZW5kZXJfdCltYWxsb2Moc2l6ZW9mKHJ0cF9zZW5kZXJfY3R4X3QpKTsKK30KKwordm9pZCBydHBfc2VuZGVyX2RlYWxsb2MocnRwX3NlbmRlcl90IHJ0cF9jdHgpCit7CisgICAgZnJlZShydHBfY3R4KTsKK30KKworcnRwX3JlY2VpdmVyX3QgcnRwX3JlY2VpdmVyX2FsbG9jKHZvaWQpCit7CisgICAgcmV0dXJuIChydHBfcmVjZWl2ZXJfdCltYWxsb2Moc2l6ZW9mKHJ0cF9yZWNlaXZlcl9jdHhfdCkpOworfQorCit2b2lkIHJ0cF9yZWNlaXZlcl9kZWFsbG9jKHJ0cF9yZWNlaXZlcl90IHJ0cF9jdHgpCit7CisgICAgZnJlZShydHBfY3R4KTsKK30KZGlmZiAtLWdpdCBhL3Rlc3QvcnRwLmggYi90ZXN0L3J0cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3OTIxYTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3J0cC5oCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogcnRwLmgKKyAqCisgKiBydHAgaW50ZXJmYWNlIGZvciBzcnRwIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbgorICoKKyAqIERhdmlkIEEuIE1jR3JldworICogQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqIGRhdGEgdHlwZXM6CisgKgorICogcnRwX21zZ190ICAgICAgIGFuIHJ0cCBtZXNzYWdlICh0aGUgZGF0YSB0aGF0IGdvZXMgb24gdGhlIHdpcmUpCisgKiBydHBfc2VuZGVyX3QgICAgc2VuZGVyIHNpZGUgc29ja2V0IGFuZCBydHAgaW5mbworICogcnRwX3JlY2VpdmVyX3QgIHJlY2VpdmVyIHNpZGUgc29ja2V0IGFuZCBydHAgaW5mbworICoKKyAqLworCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDE3LCBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgU1JUUF9SVFBfSAorI2RlZmluZSBTUlRQX1JUUF9ICisKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbGlmIGRlZmluZWQgSEFWRV9XSU5TT0NLMl9ICisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAic3J0cF9wcml2LmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoKKyAqIFJUUF9IRUFERVJfTEVOIGluZGljYXRlcyB0aGUgc2l6ZSBvZiBhbiBSVFAgaGVhZGVyCisgKi8KKyNkZWZpbmUgUlRQX0hFQURFUl9MRU4gMTIKKworLyoKKyAqIFJUUF9NQVhfQlVGX0xFTiBkZWZpbmVzIHRoZSBsYXJnZXN0IFJUUCBwYWNrZXQgaW4gdGhlIHJ0cC5jIGltcGxlbWVudGF0aW9uCisgKi8KKyNkZWZpbmUgUlRQX01BWF9CVUZfTEVOIDE2Mzg0CisKK3R5cGVkZWYgc3J0cF9oZHJfdCBydHBfaGRyX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBzcnRwX2hkcl90IGhlYWRlcjsKKyAgICBjaGFyIGJvZHlbUlRQX01BWF9CVUZfTEVOXTsKK30gcnRwX21zZ190OworCit0eXBlZGVmIHN0cnVjdCBydHBfc2VuZGVyX2N0eF90IHsKKyAgICBydHBfbXNnX3QgbWVzc2FnZTsKKyAgICBpbnQgc29ja2V0OworICAgIHNydHBfY3R4X3QgKnNydHBfY3R4OworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOyAvKiByZWNpZXZlcidzIGFkZHJlc3MgKi8KK30gcnRwX3NlbmRlcl9jdHhfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcnRwX3JlY2VpdmVyX2N0eF90IHsKKyAgICBydHBfbXNnX3QgbWVzc2FnZTsKKyAgICBpbnQgc29ja2V0OworICAgIHNydHBfY3R4X3QgKnNydHBfY3R4OworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOyAvKiByZWNlaXZlcidzIGFkZHJlc3MgKi8KK30gcnRwX3JlY2VpdmVyX2N0eF90OworCit0eXBlZGVmIHN0cnVjdCBydHBfc2VuZGVyX2N0eF90ICpydHBfc2VuZGVyX3Q7CisKK3R5cGVkZWYgc3RydWN0IHJ0cF9yZWNlaXZlcl9jdHhfdCAqcnRwX3JlY2VpdmVyX3Q7CisKK2ludCBydHBfc2VuZHRvKHJ0cF9zZW5kZXJfdCBzZW5kZXIsIGNvbnN0IHZvaWQgKm1zZywgaW50IGxlbik7CisKK2ludCBydHBfcmVjdmZyb20ocnRwX3JlY2VpdmVyX3QgcmVjZWl2ZXIsIHZvaWQgKm1zZywgaW50ICpsZW4pOworCitpbnQgcnRwX3JlY2VpdmVyX2luaXQocnRwX3JlY2VpdmVyX3QgcmN2ciwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgc29jaywKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3NyYyk7CisKK2ludCBydHBfc2VuZGVyX2luaXQocnRwX3NlbmRlcl90IHNlbmRlciwKKyAgICAgICAgICAgICAgICAgICAgaW50IHNvY2ssCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3NyYyk7CisKKy8qCisgKiBzcnRwX3NlbmRlcl9pbml0KC4uLikgaW5pdGlhbGl6ZXMgYW4gcnRwX3NlbmRlcl90CisgKi8KKworaW50IHNydHBfc2VuZGVyX2luaXQoCisgICAgcnRwX3NlbmRlcl90IHJ0cF9jdHgsICAgICAgICAgICAgICAvKiBzdHJ1Y3R1cmUgdG8gYmUgaW5pdCdlZCAqLworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBuYW1lLCAgICAgICAgICAgLyogc29ja2V0IG5hbWUgICAgICAgICAgICAgKi8KKyAgICBzcnRwX3NlY19zZXJ2X3Qgc2VjdXJpdHlfc2VydmljZXMsIC8qIHNlYy4gc2VydnMuIHRvIGJlIHVzZWQgICovCisgICAgdW5zaWduZWQgY2hhciAqaW5wdXRfa2V5ICAgICAgICAgICAvKiBtYXN0ZXIga2V5L3NhbHQgaW4gaGV4ICAqLworICAgICk7CisKK2ludCBzcnRwX3JlY2VpdmVyX2luaXQoCisgICAgcnRwX3JlY2VpdmVyX3QgcnRwX2N0eCwgICAgICAgICAgICAvKiBzdHJ1Y3R1cmUgdG8gYmUgaW5pdCdlZCAqLworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBuYW1lLCAgICAgICAgICAgLyogc29ja2V0IG5hbWUgICAgICAgICAgICAgKi8KKyAgICBzcnRwX3NlY19zZXJ2X3Qgc2VjdXJpdHlfc2VydmljZXMsIC8qIHNlYy4gc2VydnMuIHRvIGJlIHVzZWQgICovCisgICAgdW5zaWduZWQgY2hhciAqaW5wdXRfa2V5ICAgICAgICAgICAvKiBtYXN0ZXIga2V5L3NhbHQgaW4gaGV4ICAqLworICAgICk7CisKK2ludCBydHBfc2VuZGVyX2luaXRfc3J0cChydHBfc2VuZGVyX3Qgc2VuZGVyLCBjb25zdCBzcnRwX3BvbGljeV90ICpwb2xpY3kpOworCitpbnQgcnRwX3NlbmRlcl9kZWluaXRfc3J0cChydHBfc2VuZGVyX3Qgc2VuZGVyKTsKKworaW50IHJ0cF9yZWNlaXZlcl9pbml0X3NydHAocnRwX3JlY2VpdmVyX3Qgc2VuZGVyLCBjb25zdCBzcnRwX3BvbGljeV90ICpwb2xpY3kpOworCitpbnQgcnRwX3JlY2VpdmVyX2RlaW5pdF9zcnRwKHJ0cF9yZWNlaXZlcl90IHNlbmRlcik7CisKK3J0cF9zZW5kZXJfdCBydHBfc2VuZGVyX2FsbG9jKHZvaWQpOworCit2b2lkIHJ0cF9zZW5kZXJfZGVhbGxvYyhydHBfc2VuZGVyX3QgcnRwX2N0eCk7CisKK3J0cF9yZWNlaXZlcl90IHJ0cF9yZWNlaXZlcl9hbGxvYyh2b2lkKTsKKwordm9pZCBydHBfcmVjZWl2ZXJfZGVhbGxvYyhydHBfcmVjZWl2ZXJfdCBydHBfY3R4KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIFNSVFBfUlRQX0ggKi8KZGlmZiAtLWdpdCBhL3Rlc3QvcnRwX2RlY29kZXIuYyBiL3Rlc3QvcnRwX2RlY29kZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjRlZDA0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9ydHBfZGVjb2Rlci5jCkBAIC0wLDAgKzEsNzY0IEBACisvKgorICogcnRwX2RlY29kZXIuYworICoKKyAqIGRlY29kZXIgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIGZvciBTUlRQIHBjYXAgZGVjb2RlcgorICoKKyAqIEV4YW1wbGU6CisgKiAkIHdnZXQgLS1uby1jaGVjay1jZXJ0aWZpY2F0ZSBcCisgKiAgICAgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2d0ZWlzc2llci9zcnRwLWRlY3J5cHQvbWFzdGVyL21hcnNlaWxsYWlzZS1zcnRwLnBjYXAKKyAqICQgLi90ZXN0L3J0cF9kZWNvZGVyIC1hIC10IDEwIC1lIDEyOCAtYiBcCisgKiAgICAgYVNCcmJtOTNJR0ZzYkNCNWIzVnlJR3hwZEhSc1pTQnpaV055WlhSeiBcCisgKiAgICAgICAgIDwgfi9tYXJzZWlsbGFpc2Utc3J0cC5wY2FwIFwKKyAqICAgICAgICAgfCB0ZXh0MnBjYXAgLXQgIiVNOiVTLiIgLXUgMTAwMDAsMTAwMDAgLSAtIFwKKyAqICAgICAgICAgPiAuL21hcnNlaWxsYWlzZS1ydHAucGNhcAorICoKKyAqIFRoZXJlIGlzIGFsc28gYSBkaWZmZXJlbnQgd2F5IG9mIHNldHRpbmcgdXAga2V5IHNpemUgYW5kIHRhZyBzaXplCisgKiBiYXNlZCB1cG9uIFJGQyA0NTY4IGNyeXB0byBzdWl0ZSBzcGVjaWZpY2F0aW9uLCBpLmUuOgorICoKKyAqICQgLi90ZXN0L3J0cF9kZWNvZGVyIC1zIEFFU19DTV8xMjhfSE1BQ19TSEExXzgwIC1iIFwKKyAqICAgICBhU0JyYm05M0lHRnNiQ0I1YjNWeUlHeHBkSFJzWlNCelpXTnlaWFJ6IC4uLgorICoKKyAqIEF1ZGlvIGNhbiBiZSBleHRyYWN0ZWQgdXNpbmcgZXh0cmFjdGF1ZGlvIHV0aWxpdHkgZnJvbSB0aGUgUlRQcHJveHkKKyAqIHBhY2thZ2U6CisgKgorICogJCBleHRyYWN0YXVkaW8gLUEgLi9tYXJzZWlsbGFpc2UtcnRwLnBjYXAgLi9tYXJzZWlsbGFpc2Utb3V0LndhdgorICoKKyAqIEJlcm5hcmRvIFRvcnJlcyA8YmVybmFyZG9AdG9ycmVzYXV0b21hY2FvLmNvbS5icj4KKyAqCisgKiBTb21lIHN0cnVjdHVyZSBhbmQgY29kZSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ndGVpc3NpZXIvc3J0cC1kZWNyeXB0CisgKi8KKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMTcgQ2lzY28gU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworI2luY2x1ZGUgImdldG9wdF9zLmgiIC8qIGZvciBsb2NhbCBnZXRvcHQoKSAgKi8KKyNpbmNsdWRlIDxhc3NlcnQuaD4gICAvKiBmb3IgYXNzZXJ0KCkgICovCisKKyNpbmNsdWRlIDxwY2FwLmg+CisjaW5jbHVkZSAicnRwX2RlY29kZXIuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisKKyNpZm5kZWYgdGltZXJzdWIKKyNkZWZpbmUgdGltZXJzdWIoYSwgYiwgcmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAocmVzdWx0KS0+dHZfc2VjID0gKGEpLT50dl9zZWMgLSAoYiktPnR2X3NlYzsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKHJlc3VsdCktPnR2X3VzZWMgPSAoYSktPnR2X3VzZWMgLSAoYiktPnR2X3VzZWM7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICgocmVzdWx0KS0+dHZfdXNlYyA8IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgLS0ocmVzdWx0KS0+dHZfc2VjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIChyZXN1bHQpLT50dl91c2VjICs9IDEwMDAwMDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisjZW5kaWYKKworI2RlZmluZSBNQVhfS0VZX0xFTiA5NgorI2RlZmluZSBNQVhfRklMVEVSIDI1NgorCitzdHJ1Y3Qgc3J0cF9jcnlwdG9fc3VpdGUgeworICAgIGNvbnN0IGNoYXIgKmNhbl9uYW1lOworICAgIGludCBnY21fb247CisgICAgaW50IGtleV9zaXplOworICAgIGludCB0YWdfc2l6ZTsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3J0cF9jcnlwdG9fc3VpdGUgc3J0cF9jcnlwdG9fc3VpdGVzW10gPSB7CisjaWYgMAorICB7LmNhbl9uYW1lID0gIkY4XzEyOF9ITUFDX1NIQTFfMzIiLCAuZ2NtX29uID0gMCwgLmtleV9zaXplID0gMTI4LCAudGFnX3NpemUgPSA0fSwKKyNlbmRpZgorICAgIHsuY2FuX25hbWUgPSAiQUVTX0NNXzEyOF9ITUFDX1NIQTFfMzIiLAorICAgICAuZ2NtX29uID0gMCwKKyAgICAgLmtleV9zaXplID0gMTI4LAorICAgICAudGFnX3NpemUgPSA0IH0sCisgICAgey5jYW5fbmFtZSA9ICJBRVNfQ01fMTI4X0hNQUNfU0hBMV84MCIsCisgICAgIC5nY21fb24gPSAwLAorICAgICAua2V5X3NpemUgPSAxMjgsCisgICAgIC50YWdfc2l6ZSA9IDEwIH0sCisgICAgey5jYW5fbmFtZSA9ICJBRVNfMTkyX0NNX0hNQUNfU0hBMV8zMiIsCisgICAgIC5nY21fb24gPSAwLAorICAgICAua2V5X3NpemUgPSAxOTIsCisgICAgIC50YWdfc2l6ZSA9IDQgfSwKKyAgICB7LmNhbl9uYW1lID0gIkFFU18xOTJfQ01fSE1BQ19TSEExXzgwIiwKKyAgICAgLmdjbV9vbiA9IDAsCisgICAgIC5rZXlfc2l6ZSA9IDE5MiwKKyAgICAgLnRhZ19zaXplID0gMTAgfSwKKyAgICB7LmNhbl9uYW1lID0gIkFFU18yNTZfQ01fSE1BQ19TSEExXzMyIiwKKyAgICAgLmdjbV9vbiA9IDAsCisgICAgIC5rZXlfc2l6ZSA9IDI1NiwKKyAgICAgLnRhZ19zaXplID0gNCB9LAorICAgIHsuY2FuX25hbWUgPSAiQUVTXzI1Nl9DTV9ITUFDX1NIQTFfODAiLAorICAgICAuZ2NtX29uID0gMCwKKyAgICAgLmtleV9zaXplID0gMjU2LAorICAgICAudGFnX3NpemUgPSAxMCB9LAorICAgIHsuY2FuX25hbWUgPSAiQUVBRF9BRVNfMTI4X0dDTSIsCisgICAgIC5nY21fb24gPSAxLAorICAgICAua2V5X3NpemUgPSAxMjgsCisgICAgIC50YWdfc2l6ZSA9IDE2IH0sCisgICAgey5jYW5fbmFtZSA9ICJBRUFEX0FFU18yNTZfR0NNIiwKKyAgICAgLmdjbV9vbiA9IDEsCisgICAgIC5rZXlfc2l6ZSA9IDI1NiwKKyAgICAgLnRhZ19zaXplID0gMTYgfSwKKyAgICB7LmNhbl9uYW1lID0gTlVMTCB9Cit9OworCit2b2lkIHJ0cF9kZWNvZGVyX3NydHBfbG9nX2hhbmRsZXIoc3J0cF9sb2dfbGV2ZWxfdCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSkKK3sKKyAgICBjaGFyIGxldmVsX2NoYXIgPSAnPyc7CisgICAgc3dpdGNoIChsZXZlbCkgeworICAgIGNhc2Ugc3J0cF9sb2dfbGV2ZWxfZXJyb3I6CisgICAgICAgIGxldmVsX2NoYXIgPSAnZSc7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugc3J0cF9sb2dfbGV2ZWxfd2FybmluZzoKKyAgICAgICAgbGV2ZWxfY2hhciA9ICd3JzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBzcnRwX2xvZ19sZXZlbF9pbmZvOgorICAgICAgICBsZXZlbF9jaGFyID0gJ2knOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHNydHBfbG9nX2xldmVsX2RlYnVnOgorICAgICAgICBsZXZlbF9jaGFyID0gJ2QnOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZnByaW50ZihzdGRlcnIsICJTUlRQLUxPRyBbJWNdOiAlc1xuIiwgbGV2ZWxfY2hhciwgbXNnKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBjaGFyIGVycmJ1ZltQQ0FQX0VSUkJVRl9TSVpFXTsKKyAgICBicGZfdV9pbnQzMiBwY2FwX25ldCA9IDA7CisgICAgcGNhcF90ICpwY2FwX2hhbmRsZTsKKyNpZiBCRVcKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gbG9jYWw7CisjZW5kaWYKKyAgICBzcnRwX3NlY19zZXJ2X3Qgc2VjX3NlcnZzID0gc2VjX3NlcnZfbm9uZTsKKyAgICBpbnQgYzsKKyAgICBzdHJ1Y3Qgc3J0cF9jcnlwdG9fc3VpdGUgc2NzLCAqaV9zY3NwOworICAgIHNjcy5rZXlfc2l6ZSA9IDEyODsKKyAgICBzY3MudGFnX3NpemUgPSAwOworICAgIGludCBnY21fb24gPSAwOworICAgIGNoYXIgKmlucHV0X2tleSA9IE5VTEw7CisgICAgaW50IGI2NF9pbnB1dCA9IDA7CisgICAgY2hhciBrZXlbTUFYX0tFWV9MRU5dOworICAgIHN0cnVjdCBicGZfcHJvZ3JhbSBmcDsKKyAgICBjaGFyIGZpbHRlcl9leHBbTUFYX0ZJTFRFUl0gPSAiIjsKKyAgICBydHBfZGVjb2Rlcl90IGRlYzsKKyAgICBzcnRwX3BvbGljeV90IHBvbGljeSA9IHsgeyAwIH0gfTsKKyAgICBydHBfZGVjb2Rlcl9tb2RlX3QgbW9kZSA9IG1vZGVfcnRwOworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKKyAgICBpbnQgbGVuOworICAgIGludCBleHBlY3RlZF9sZW47CisgICAgaW50IGRvX2xpc3RfbW9kcyA9IDA7CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlVzaW5nICVzIFsweCV4XVxuIiwgc3J0cF9nZXRfdmVyc2lvbl9zdHJpbmcoKSwKKyAgICAgICAgICAgIHNydHBfZ2V0X3ZlcnNpb24oKSk7CisKKyAgICAvKiBpbml0aWFsaXplIHNydHAgbGlicmFyeSAqLworICAgIHN0YXR1cyA9IHNydHBfaW5pdCgpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgImVycm9yOiBzcnRwIGluaXRpYWxpemF0aW9uIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWRcbiIsCisgICAgICAgICAgICAgICAgc3RhdHVzKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBzcnRwX2luc3RhbGxfbG9nX2hhbmRsZXIocnRwX2RlY29kZXJfc3J0cF9sb2dfaGFuZGxlciwgTlVMTCk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yOiBpbnN0YWxsIGxvZyBoYW5kbGVyIGZhaWxlZFxuIik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgLyogY2hlY2sgYXJncyAqLworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGMgPSBnZXRvcHRfcyhhcmdjLCBhcmd2LCAiYjprOmd0OmFlOmxkOmY6czptOiIpOworICAgICAgICBpZiAoYyA9PSAtMSkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgIGNhc2UgJ2InOgorICAgICAgICAgICAgYjY0X2lucHV0ID0gMTsKKyAgICAgICAgLyogZmFsbCB0aHJ1ICovCisgICAgICAgIGNhc2UgJ2snOgorICAgICAgICAgICAgaW5wdXRfa2V5ID0gb3B0YXJnX3M7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnZSc6CisgICAgICAgICAgICBzY3Mua2V5X3NpemUgPSBhdG9pKG9wdGFyZ19zKTsKKyAgICAgICAgICAgIGlmIChzY3Mua2V5X3NpemUgIT0gMTI4ICYmIHNjcy5rZXlfc2l6ZSAhPSAxOTIgJiYKKyAgICAgICAgICAgICAgICBzY3Mua2V5X3NpemUgIT0gMjU2KSB7CisgICAgICAgICAgICAgICAgZnByaW50ZigKKyAgICAgICAgICAgICAgICAgICAgc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAiZXJyb3I6IGVuY3J5cHRpb24ga2V5IHNpemUgbXVzdCBiZSAxMjgsIDE5MiBvciAyNTYgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgc2NzLmtleV9zaXplKTsKKyAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5wdXRfa2V5ID0gbWFsbG9jKHNjcy5rZXlfc2l6ZSk7CisgICAgICAgICAgICBzZWNfc2VydnMgfD0gc2VjX3NlcnZfY29uZjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgIHNjcy50YWdfc2l6ZSA9IGF0b2kob3B0YXJnX3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2EnOgorICAgICAgICAgICAgc2VjX3NlcnZzIHw9IHNlY19zZXJ2X2F1dGg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnZyc6CisgICAgICAgICAgICBnY21fb24gPSAxOworICAgICAgICAgICAgc2VjX3NlcnZzIHw9IHNlY19zZXJ2X2F1dGg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnZCc6CisgICAgICAgICAgICBzdGF0dXMgPSBzcnRwX3NldF9kZWJ1Z19tb2R1bGUob3B0YXJnX3MsIDEpOworICAgICAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3I6IHNldCBkZWJ1ZyBtb2R1bGUgKCVzKSBmYWlsZWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRhcmdfcyk7CisgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdmJzoKKyAgICAgICAgICAgIGlmIChzdHJsZW4ob3B0YXJnX3MpID4gTUFYX0ZJTFRFUikgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3I6IGZpbHRlciBiaWdnZXIgdGhhbiAlZCBjaGFyYWN0ZXJzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgTUFYX0ZJTFRFUik7CisgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU2V0dGluZyBmaWx0ZXIgYXMgJXNcbiIsIG9wdGFyZ19zKTsKKyAgICAgICAgICAgIHN0cmNweShmaWx0ZXJfZXhwLCBvcHRhcmdfcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnbCc6CisgICAgICAgICAgICBkb19saXN0X21vZHMgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3MnOgorICAgICAgICAgICAgZm9yIChpX3Njc3AgPSAmc3J0cF9jcnlwdG9fc3VpdGVzWzBdOyBpX3Njc3AtPmNhbl9uYW1lICE9IE5VTEw7CisgICAgICAgICAgICAgICAgIGlfc2NzcCsrKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0cmNhc2VjbXAoaV9zY3NwLT5jYW5fbmFtZSwgb3B0YXJnX3MpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlfc2NzcC0+Y2FuX25hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93bi91bnN1cHBvcnRlZCBjcnlwdG8gc3VpdGUgbmFtZSAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGFyZ19zKTsKKyAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2NzID0gKmlfc2NzcDsKKyAgICAgICAgICAgIGlucHV0X2tleSA9IG1hbGxvYyhzY3Mua2V5X3NpemUpOworICAgICAgICAgICAgc2VjX3NlcnZzIHw9IHNlY19zZXJ2X2NvbmYgfCBzZWNfc2Vydl9hdXRoOworICAgICAgICAgICAgZ2NtX29uID0gc2NzLmdjbV9vbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdtJzoKKyAgICAgICAgICAgIGlmIChzdHJjYXNlY21wKCJydHAiLCBvcHRhcmdfcykgPT0gMCkgeworICAgICAgICAgICAgICAgIG1vZGUgPSBtb2RlX3J0cDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY2FzZWNtcCgicnRjcCIsIG9wdGFyZ19zKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgbW9kZSA9IG1vZGVfcnRjcDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY2FzZWNtcCgicnRjcC1tdXgiLCBvcHRhcmdfcykgPT0gMCkgeworICAgICAgICAgICAgICAgIG1vZGUgPSBtb2RlX3J0Y3BfbXV4OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVua25vd24vdW5zdXBwb3J0ZWQgbW9kZSAlc1xuIiwgb3B0YXJnX3MpOworICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHVzYWdlKGFyZ3ZbMF0pOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHNjcy50YWdfc2l6ZSA9PSAwKSB7CisgICAgICAgIGlmIChnY21fb24pIHsKKyAgICAgICAgICAgIHNjcy50YWdfc2l6ZSA9IDE2OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2NzLnRhZ19zaXplID0gMTA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZ2NtX29uICYmIHNjcy50YWdfc2l6ZSAhPSA4ICYmIHNjcy50YWdfc2l6ZSAhPSAxNikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yOiBHQ00gdGFnIHNpemUgbXVzdCBiZSA4IG9yIDE2ICglZClcbiIsCisgICAgICAgICAgICAgICAgc2NzLnRhZ19zaXplKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICBpZiAoIWdjbV9vbiAmJiBzY3MudGFnX3NpemUgIT0gNCAmJiBzY3MudGFnX3NpemUgIT0gMTApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvcjogbm9uIEdDTSB0YWcgc2l6ZSBtdXN0IGJlIDQgb3IgMTAgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICBzY3MudGFnX3NpemUpOworICAgICAgICBleGl0KDEpOworICAgIH0KKworICAgIGlmIChkb19saXN0X21vZHMpIHsKKyAgICAgICAgc3RhdHVzID0gc3J0cF9saXN0X2RlYnVnX21vZHVsZXMoKTsKKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvcjogbGlzdCBvZiBkZWJ1ZyBtb2R1bGVzIGZhaWxlZFxuIik7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICgoc2VjX3NlcnZzICYmICFpbnB1dF9rZXkpIHx8ICghc2VjX3NlcnZzICYmIGlucHV0X2tleSkpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogYSBrZXkgbXVzdCBiZSBwcm92aWRlZCBpZiBhbmQgb25seSBpZiBzZWN1cml0eSBzZXJ2aWNlcyBoYXZlCisgICAgICAgICAqIGJlZW4gcmVxdWVzdGVkCisgICAgICAgICAqLworICAgICAgICBpZiAoaW5wdXRfa2V5ID09IE5VTEwpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAia2V5IG5vdCBwcm92aWRlZFxuIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzZWNfc2VydnMpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAibm8gc2Vjc2VydnNcbiIpOworICAgICAgICB9CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAicHJvdmlkZWRcbiIpOworICAgICAgICB1c2FnZShhcmd2WzBdKTsKKyAgICB9CisKKyAgICAvKiByZXBvcnQgc2VjdXJpdHkgc2VydmljZXMgc2VsZWN0ZWQgb24gdGhlIGNvbW1hbmQgbGluZSAqLworICAgIGZwcmludGYoc3RkZXJyLCAic2VjdXJpdHkgc2VydmljZXM6ICIpOworICAgIGlmIChzZWNfc2VydnMgJiBzZWNfc2Vydl9jb25mKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImNvbmZpZGVudGlhbGl0eSAiKTsKKyAgICBpZiAoc2VjX3NlcnZzICYgc2VjX3NlcnZfYXV0aCkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIik7CisgICAgaWYgKHNlY19zZXJ2cyA9PSBzZWNfc2Vydl9ub25lKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm5vbmUiKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisKKyAgICAvKiBzZXQgdXAgdGhlIHNydHAgcG9saWN5IGFuZCBtYXN0ZXIga2V5ICovCisgICAgaWYgKHNlY19zZXJ2cykgeworICAgICAgICAvKgorICAgICAgICAgKiBjcmVhdGUgcG9saWN5IHN0cnVjdHVyZSwgdXNpbmcgdGhlIGRlZmF1bHQgbWVjaGFuaXNtcyBidXQKKyAgICAgICAgICogd2l0aCBvbmx5IHRoZSBzZWN1cml0eSBzZXJ2aWNlcyByZXF1ZXN0ZWQgb24gdGhlIGNvbW1hbmQgbGluZSwKKyAgICAgICAgICogdXNpbmcgdGhlIHJpZ2h0IFNTUkMgdmFsdWUKKyAgICAgICAgICovCisgICAgICAgIHN3aXRjaCAoc2VjX3NlcnZzKSB7CisgICAgICAgIGNhc2Ugc2VjX3NlcnZfY29uZl9hbmRfYXV0aDoKKyAgICAgICAgICAgIGlmIChnY21fb24pIHsKKyNpZmRlZiBPUEVOU1NMCisgICAgICAgICAgICAgICAgc3dpdGNoIChzY3Mua2V5X3NpemUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDEyODoKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNjcy50YWdfc2l6ZSA9PSAxNikgeworICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzEyOF8xNl9hdXRoKCZwb2xpY3kucnRwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2djbV8xMjhfMTZfYXV0aCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcG9saWN5LnJ0Y3ApOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzEyOF84X2F1dGgoJnBvbGljeS5ydHApOworICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzEyOF84X2F1dGgoJnBvbGljeS5ydGNwKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI1NjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNjcy50YWdfc2l6ZSA9PSAxNikgeworICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzI1Nl8xNl9hdXRoKCZwb2xpY3kucnRwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2djbV8yNTZfMTZfYXV0aCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcG9saWN5LnJ0Y3ApOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzI1Nl84X2F1dGgoJnBvbGljeS5ydHApOworICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzI1Nl84X2F1dGgoJnBvbGljeS5ydGNwKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3I6IEdDTSBtb2RlIG9ubHkgc3VwcG9ydGVkIHdoZW4gdXNpbmcgdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9wZW5TU0wgY3J5cHRvIGVuZ2luZS5cbiIpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworI2VuZGlmCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoc2NzLmtleV9zaXplKSB7CisgICAgICAgICAgICAgICAgY2FzZSAxMjg6CisgICAgICAgICAgICAgICAgICAgIGlmIChzY3MudGFnX3NpemUgPT0gNCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfY21fMTI4X2htYWNfc2hhMV8zMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcG9saWN5LnJ0cCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8xMjhfaG1hY19zaGExXzgwKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwb2xpY3kucnRjcCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8xMjhfaG1hY19zaGExXzgwKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwb2xpY3kucnRwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2NtXzEyOF9obWFjX3NoYTFfODAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBvbGljeS5ydGNwKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDE5MjoKKyNpZmRlZiBPUEVOU1NMCisgICAgICAgICAgICAgICAgICAgIGlmIChzY3MudGFnX3NpemUgPT0gNCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfY21fMTkyX2htYWNfc2hhMV8zMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcG9saWN5LnJ0cCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8xOTJfaG1hY19zaGExXzgwKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwb2xpY3kucnRjcCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8xOTJfaG1hY19zaGExXzgwKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwb2xpY3kucnRwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2NtXzE5Ml9obWFjX3NoYTFfODAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBvbGljeS5ydGNwKTsKKyAgICAgICAgICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yOiBBRVMgMTkyIG1vZGUgb25seSBzdXBwb3J0ZWQgd2hlbiB1c2luZyB0aGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPcGVuU1NMIGNyeXB0byBlbmdpbmUuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI1NjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNjcy50YWdfc2l6ZSA9PSA0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8yNTZfaG1hY19zaGExXzMyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwb2xpY3kucnRwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2NtXzI1Nl9obWFjX3NoYTFfODAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBvbGljeS5ydGNwKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2NtXzI1Nl9obWFjX3NoYTFfODAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBvbGljeS5ydHApOworICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfY21fMjU2X2htYWNfc2hhMV84MCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcG9saWN5LnJ0Y3ApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIHNlY19zZXJ2X2NvbmY6CisgICAgICAgICAgICBpZiAoZ2NtX29uKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZigKKyAgICAgICAgICAgICAgICAgICAgc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAiZXJyb3I6IEdDTSBtb2RlIG11c3QgYWx3YXlzIGJlIHVzZWQgd2l0aCBhdXRoIGVuYWJsZWRcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChzY3Mua2V5X3NpemUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDEyODoKKyAgICAgICAgICAgICAgICAgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfY21fMTI4X251bGxfYXV0aCgmcG9saWN5LnJ0cCk7CisgICAgICAgICAgICAgICAgICAgIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2NtXzEyOF9obWFjX3NoYTFfODAoCisgICAgICAgICAgICAgICAgICAgICAgICAmcG9saWN5LnJ0Y3ApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDE5MjoKKyNpZmRlZiBPUEVOU1NMCisgICAgICAgICAgICAgICAgICAgIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2NtXzE5Ml9udWxsX2F1dGgoJnBvbGljeS5ydHApOworICAgICAgICAgICAgICAgICAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8xOTJfaG1hY19zaGExXzgwKAorICAgICAgICAgICAgICAgICAgICAgICAgJnBvbGljeS5ydGNwKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvcjogQUVTIDE5MiBtb2RlIG9ubHkgc3VwcG9ydGVkIHdoZW4gdXNpbmcgdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT3BlblNTTCBjcnlwdG8gZW5naW5lLlxuIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyNTY6CisgICAgICAgICAgICAgICAgICAgIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2NtXzI1Nl9udWxsX2F1dGgoJnBvbGljeS5ydHApOworICAgICAgICAgICAgICAgICAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8yNTZfaG1hY19zaGExXzgwKAorICAgICAgICAgICAgICAgICAgICAgICAgJnBvbGljeS5ydGNwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ugc2VjX3NlcnZfYXV0aDoKKyAgICAgICAgICAgIGlmIChnY21fb24pIHsKKyNpZmRlZiBPUEVOU1NMCisgICAgICAgICAgICAgICAgc3dpdGNoIChzY3Mua2V5X3NpemUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDEyODoKKyAgICAgICAgICAgICAgICAgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzEyOF84X29ubHlfYXV0aCgmcG9saWN5LnJ0cCk7CisgICAgICAgICAgICAgICAgICAgIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2djbV8xMjhfOF9vbmx5X2F1dGgoCisgICAgICAgICAgICAgICAgICAgICAgICAmcG9saWN5LnJ0Y3ApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI1NjoKKyAgICAgICAgICAgICAgICAgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzI1Nl84X29ubHlfYXV0aCgmcG9saWN5LnJ0cCk7CisgICAgICAgICAgICAgICAgICAgIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2djbV8yNTZfOF9vbmx5X2F1dGgoCisgICAgICAgICAgICAgICAgICAgICAgICAmcG9saWN5LnJ0Y3ApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgICAgIHByaW50ZigiZXJyb3I6IEdDTSBtb2RlIG9ubHkgc3VwcG9ydGVkIHdoZW4gdXNpbmcgdGhlIE9wZW5TU0wgIgorICAgICAgICAgICAgICAgICAgICAgICAiY3J5cHRvIGVuZ2luZS5cbiIpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworI2VuZGlmCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfbnVsbF9jaXBoZXJfaG1hY19zaGExXzgwKCZwb2xpY3kucnRwKTsKKyAgICAgICAgICAgICAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X3J0Y3BfZGVmYXVsdCgmcG9saWN5LnJ0Y3ApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yOiB1bmtub3duIHNlY3VyaXR5IHNlcnZpY2UgcmVxdWVzdGVkXG4iKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIHBvbGljeS5rZXkgPSAodWludDhfdCAqKWtleTsKKyAgICAgICAgcG9saWN5LmVrdCA9IE5VTEw7CisgICAgICAgIHBvbGljeS5uZXh0ID0gTlVMTDsKKyAgICAgICAgcG9saWN5LndpbmRvd19zaXplID0gMTI4OworICAgICAgICBwb2xpY3kuYWxsb3dfcmVwZWF0X3R4ID0gMDsKKyAgICAgICAgcG9saWN5LnJ0cC5zZWNfc2VydiA9IHNlY19zZXJ2czsKKyAgICAgICAgcG9saWN5LnJ0Y3Auc2VjX3NlcnYgPQorICAgICAgICAgICAgc2VjX3NlcnZzOyAvLyBzZWNfc2Vydl9ub25lOyAgLyogd2UgZG9uJ3QgZG8gUlRDUCBhbnl3YXkgKi8KKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJzZXR0aW5nIHRhZyBsZW4gJWRcbiIsIHNjcy50YWdfc2l6ZSk7CisgICAgICAgIHBvbGljeS5ydHAuYXV0aF90YWdfbGVuID0gc2NzLnRhZ19zaXplOworCisgICAgICAgIGlmIChnY21fb24gJiYgc2NzLnRhZ19zaXplICE9IDgpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAic2V0dGVkIHRhZyBsZW4gJWRcbiIsIHNjcy50YWdfc2l6ZSk7CisgICAgICAgICAgICBwb2xpY3kucnRwLmF1dGhfdGFnX2xlbiA9IHNjcy50YWdfc2l6ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIHJlYWQga2V5IGZyb20gaGV4YWRlY2ltYWwgb3IgYmFzZTY0IG9uIGNvbW1hbmQgbGluZSBpbnRvIGFuIG9jdGV0CisgICAgICAgICAqIHN0cmluZworICAgICAgICAgKi8KKyAgICAgICAgaWYgKGI2NF9pbnB1dCkgeworICAgICAgICAgICAgaW50IHBhZDsKKyAgICAgICAgICAgIGV4cGVjdGVkX2xlbiA9IHBvbGljeS5ydHAuY2lwaGVyX2tleV9sZW4gKiA0IC8gMzsKKyAgICAgICAgICAgIGxlbiA9IGJhc2U2NF9zdHJpbmdfdG9fb2N0ZXRfc3RyaW5nKGtleSwgJnBhZCwgaW5wdXRfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKGlucHV0X2tleSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXhwZWN0ZWRfbGVuID0gcG9saWN5LnJ0cC5jaXBoZXJfa2V5X2xlbiAqIDI7CisgICAgICAgICAgICBsZW4gPSBoZXhfc3RyaW5nX3RvX29jdGV0X3N0cmluZyhrZXksIGlucHV0X2tleSwgZXhwZWN0ZWRfbGVuKTsKKyAgICAgICAgfQorICAgICAgICAvKiBjaGVjayB0aGF0IGhleCBzdHJpbmcgaXMgdGhlIHJpZ2h0IGxlbmd0aCAqLworICAgICAgICBpZiAobGVuIDwgZXhwZWN0ZWRfbGVuKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yOiB0b28gZmV3IGRpZ2l0cyBpbiBrZXkvc2FsdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihzaG91bGQgYmUgJWQgZGlnaXRzLCBmb3VuZCAlZClcbiIsCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2xlbiwgbGVuKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0cmxlbihpbnB1dF9rZXkpID4gcG9saWN5LnJ0cC5jaXBoZXJfa2V5X2xlbiAqIDIpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3I6IHRvbyBtYW55IGRpZ2l0cyBpbiBrZXkvc2FsdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihzaG91bGQgYmUgJWQgaGV4YWRlY2ltYWwgZGlnaXRzLCBmb3VuZCAldSlcbiIsCisgICAgICAgICAgICAgICAgICAgIHBvbGljeS5ydHAuY2lwaGVyX2tleV9sZW4gKiAyLCAodW5zaWduZWQpc3RybGVuKGlucHV0X2tleSkpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAic2V0IG1hc3RlciBrZXkvc2FsdCB0byAlcy8iLAorICAgICAgICAgICAgICAgIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKGtleSwgMTYpKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoa2V5ICsgMTYsIDE0KSk7CisKKyAgICB9IGVsc2UgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAiZXJyb3I6IG5laXRoZXIgZW5jcnlwdGlvbiBvciBhdXRoZW50aWNhdGlvbiB3ZXJlIHNlbGVjdGVkXG4iKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICBwY2FwX2hhbmRsZSA9IHBjYXBfb3Blbl9vZmZsaW5lKCItIiwgZXJyYnVmKTsKKworICAgIGlmICghcGNhcF9oYW5kbGUpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJsaWJwY2FwIGZhaWxlZCB0byBvcGVuIGZpbGUgJyVzJ1xuIiwgZXJyYnVmKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgYXNzZXJ0KHBjYXBfaGFuZGxlICE9IE5VTEwpOworICAgIGlmICgocGNhcF9jb21waWxlKHBjYXBfaGFuZGxlLCAmZnAsIGZpbHRlcl9leHAsIDEsIHBjYXBfbmV0KSkgPT0gLTEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBwYXJzZSBmaWx0ZXIgJXM6ICVzXG4iLCBmaWx0ZXJfZXhwLAorICAgICAgICAgICAgICAgIHBjYXBfZ2V0ZXJyKHBjYXBfaGFuZGxlKSk7CisgICAgICAgIHJldHVybiAoMik7CisgICAgfQorICAgIGlmIChwY2FwX3NldGZpbHRlcihwY2FwX2hhbmRsZSwgJmZwKSA9PSAtMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImNvdWxkbid0IGluc3RhbGwgZmlsdGVyICVzOiAlc1xuIiwgZmlsdGVyX2V4cCwKKyAgICAgICAgICAgICAgICBwY2FwX2dldGVycihwY2FwX2hhbmRsZSkpOworICAgICAgICByZXR1cm4gKDIpOworICAgIH0KKyAgICBkZWMgPSBydHBfZGVjb2Rlcl9hbGxvYygpOworICAgIGlmIChkZWMgPT0gTlVMTCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yOiBtYWxsb2MoKSBmYWlsZWRcbiIpOworICAgICAgICBleGl0KDEpOworICAgIH0KKyAgICBmcHJpbnRmKHN0ZGVyciwgIlN0YXJ0aW5nIGRlY29kZXJcbiIpOworICAgIGlmIChydHBfZGVjb2Rlcl9pbml0KGRlYywgcG9saWN5LCBtb2RlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yOiBpbml0IGZhaWxlZFxuIik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgcGNhcF9sb29wKHBjYXBfaGFuZGxlLCAwLCBydHBfZGVjb2Rlcl9oYW5kbGVfcGt0LCAodV9jaGFyICopZGVjKTsKKworICAgIGlmIChkZWMtPm1vZGUgPT0gbW9kZV9ydHAgfHwgZGVjLT5tb2RlID09IG1vZGVfcnRjcF9tdXgpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJSVFAgcGFja2V0cyBkZWNvZGVkOiAlZFxuIiwgZGVjLT5ydHBfY250KTsKKyAgICB9CisgICAgaWYgKGRlYy0+bW9kZSA9PSBtb2RlX3J0Y3AgfHwgZGVjLT5tb2RlID09IG1vZGVfcnRjcF9tdXgpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJSVENQIHBhY2tldHMgZGVjb2RlZDogJWRcbiIsIGRlYy0+cnRjcF9jbnQpOworICAgIH0KKyAgICBmcHJpbnRmKHN0ZGVyciwgIlBhY2tldCBkZWNvZGUgZXJyb3JzOiAlZFxuIiwgZGVjLT5lcnJvcl9jbnQpOworCisgICAgcnRwX2RlY29kZXJfZGVpbml0KGRlYyk7CisgICAgcnRwX2RlY29kZXJfZGVhbGxvYyhkZWMpOworCisgICAgc3RhdHVzID0gc3J0cF9zaHV0ZG93bigpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvcjogc3J0cCBzaHV0ZG93biBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLAorICAgICAgICAgICAgICAgIHN0YXR1cyk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgdXNhZ2UoY2hhciAqc3RyaW5nKQoreworICAgIGZwcmludGYoCisgICAgICAgIHN0ZGVyciwKKyAgICAgICAgInVzYWdlOiAlcyBbLWQgPGRlYnVnPl0qIFtbLWtdWy1iXSA8a2V5Pl0gWy1hXVstdF1bLWVdIFstcyAiCisgICAgICAgICI8c3J0cC1jcnlwdG8tc3VpdGU+XSBbLW0gPG1vZGU+XVxuIgorICAgICAgICAib3IgICAgICVzIC1sXG4iCisgICAgICAgICJ3aGVyZSAgLWEgdXNlIG1lc3NhZ2UgYXV0aGVudGljYXRpb25cbiIKKyAgICAgICAgIiAgICAgICAtZSA8a2V5IHNpemU+IHVzZSBlbmNyeXB0aW9uICh1c2UgMTI4IG9yIDI1NiBmb3Iga2V5IHNpemUpXG4iCisgICAgICAgICIgICAgICAgLWcgVXNlIEFFUy1HQ00gbW9kZSAobXVzdCBiZSB1c2VkIHdpdGggLWUpXG4iCisgICAgICAgICIgICAgICAgLXQgPHRhZyBzaXplPiBUYWcgc2l6ZSB0byB1c2UgKGluIEdDTSBtb2RlIHVzZSA4IG9yIDE2KVxuIgorICAgICAgICAiICAgICAgIC1rIDxrZXk+ICBzZXRzIHRoZSBzcnRwIG1hc3RlciBrZXkgZ2l2ZW4gaW4gaGV4YWRlY2ltYWxcbiIKKyAgICAgICAgIiAgICAgICAtYiA8a2V5PiAgc2V0cyB0aGUgc3J0cCBtYXN0ZXIga2V5IGdpdmVuIGluIGJhc2U2NFxuIgorICAgICAgICAiICAgICAgIC1sIGxpc3QgZGVidWcgbW9kdWxlc1xuIgorICAgICAgICAiICAgICAgIC1mIFwiPHBjYXAgZmlsdGVyPlwiIHRvIGZpbHRlciBvbmx5IHRoZSBkZXNpcmVkIFNSVFAgcGFja2V0c1xuIgorICAgICAgICAiICAgICAgIC1kIDxkZWJ1Zz4gdHVybiBvbiBkZWJ1Z2dpbmcgZm9yIG1vZHVsZSA8ZGVidWc+XG4iCisgICAgICAgICIgICAgICAgLXMgXCI8c3J0cC1jcnlwdG8tc3VpdGU+XCIgdG8gc2V0IGJvdGgga2V5IGFuZCB0YWcgc2l6ZSBiYXNlZFxuIgorICAgICAgICAiICAgICAgICAgIG9uIFJGQzQ1Njgtc3R5bGUgY3J5cHRvIHN1aXRlIHNwZWNpZmljYXRpb25cbiIKKyAgICAgICAgIiAgICAgICAtbSA8bW9kZT4gc2V0IHRoZSBtb2RlIHRvIGJlIG9uZSBvZiBbcnRwXXxydGNwfHJ0Y3AtbXV4XG4iLAorICAgICAgICBzdHJpbmcsIHN0cmluZyk7CisgICAgZXhpdCgxKTsKK30KKworcnRwX2RlY29kZXJfdCBydHBfZGVjb2Rlcl9hbGxvYyh2b2lkKQoreworICAgIHJldHVybiAocnRwX2RlY29kZXJfdCltYWxsb2Moc2l6ZW9mKHJ0cF9kZWNvZGVyX2N0eF90KSk7Cit9CisKK3ZvaWQgcnRwX2RlY29kZXJfZGVhbGxvYyhydHBfZGVjb2Rlcl90IHJ0cF9jdHgpCit7CisgICAgZnJlZShydHBfY3R4KTsKK30KKworaW50IHJ0cF9kZWNvZGVyX2RlaW5pdChydHBfZGVjb2Rlcl90IGRlY29kZXIpCit7CisgICAgaWYgKGRlY29kZXItPnNydHBfY3R4KSB7CisgICAgICAgIHJldHVybiBzcnRwX2RlYWxsb2MoZGVjb2Rlci0+c3J0cF9jdHgpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworaW50IHJ0cF9kZWNvZGVyX2luaXQocnRwX2RlY29kZXJfdCBkY2RyLAorICAgICAgICAgICAgICAgICAgICAgc3J0cF9wb2xpY3lfdCBwb2xpY3ksCisgICAgICAgICAgICAgICAgICAgICBydHBfZGVjb2Rlcl9tb2RlX3QgbW9kZSkKK3sKKyAgICBkY2RyLT5ydHBfb2Zmc2V0ID0gREVGQVVMVF9SVFBfT0ZGU0VUOworICAgIGRjZHItPnNydHBfY3R4ID0gTlVMTDsKKyAgICBkY2RyLT5zdGFydF90di50dl91c2VjID0gMDsKKyAgICBkY2RyLT5zdGFydF90di50dl9zZWMgPSAwOworICAgIGRjZHItPmZyYW1lX25yID0gLTE7CisgICAgZGNkci0+ZXJyb3JfY250ID0gMDsKKyAgICBkY2RyLT5ydHBfY250ID0gMDsKKyAgICBkY2RyLT5ydGNwX2NudCA9IDA7CisgICAgZGNkci0+bW9kZSA9IG1vZGU7CisgICAgZGNkci0+cG9saWN5ID0gcG9saWN5OworICAgIGRjZHItPnBvbGljeS5zc3JjLnR5cGUgPSBzc3JjX2FueV9pbmJvdW5kOworCisgICAgaWYgKHNydHBfY3JlYXRlKCZkY2RyLT5zcnRwX2N0eCwgJmRjZHItPnBvbGljeSkpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKgorICogZGVjb2RlcyBrZXkgYXMgYmFzZTY0CisgKi8KKwordm9pZCBoZXhkdW1wKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCit7CisgICAgaW50IGksIGo7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3B0ciA9IHB0cjsKKworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpICs9IDE2KSB7CisgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiJTA0eCAiLCBpKTsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IDE2ICYmIGkgKyBqIDwgc2l6ZTsgaisrKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIiUwMnggIiwgY3B0cltpICsgal0pOworICAgICAgICB9CisgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiXG4iKTsKKyAgICB9Cit9CisKK3ZvaWQgcnRwX2RlY29kZXJfaGFuZGxlX3BrdCh1X2NoYXIgKmFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcGNhcF9wa3RoZHIgKmhkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKmJ5dGVzKQoreworICAgIHJ0cF9kZWNvZGVyX3QgZGNkciA9IChydHBfZGVjb2Rlcl90KWFyZzsKKyAgICBydHBfbXNnX3QgbWVzc2FnZTsKKyAgICBpbnQgcnRwOworICAgIGludCBwa3RzaXplOworICAgIHN0cnVjdCB0aW1ldmFsIGRlbHRhOworICAgIGludCBvY3RldHNfcmVjdmQ7CisgICAgc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdHVzOworICAgIGRjZHItPmZyYW1lX25yKys7CisKKyAgICBpZiAoKGRjZHItPnN0YXJ0X3R2LnR2X3NlYyA9PSAwKSAmJiAoZGNkci0+c3RhcnRfdHYudHZfdXNlYyA9PSAwKSkgeworICAgICAgICBkY2RyLT5zdGFydF90diA9IGhkci0+dHM7CisgICAgfQorCisgICAgaWYgKGhkci0+Y2FwbGVuIDwgZGNkci0+cnRwX29mZnNldCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnN0IHZvaWQgKnJ0cF9wYWNrZXQgPSBieXRlcyArIGRjZHItPnJ0cF9vZmZzZXQ7CisKKyAgICBtZW1jcHkoKHZvaWQgKikmbWVzc2FnZSwgcnRwX3BhY2tldCwgaGRyLT5jYXBsZW4gLSBkY2RyLT5ydHBfb2Zmc2V0KTsKKyAgICBwa3RzaXplID0gaGRyLT5jYXBsZW4gLSBkY2RyLT5ydHBfb2Zmc2V0OworICAgIG9jdGV0c19yZWN2ZCA9IHBrdHNpemU7CisKKyAgICBpZiAob2N0ZXRzX3JlY3ZkID09IC0xKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZGNkci0+bW9kZSA9PSBtb2RlX3J0cCkgeworICAgICAgICBydHAgPSAxOworICAgIH0gZWxzZSBpZiAoZGNkci0+bW9kZSA9PSBtb2RlX3J0Y3ApIHsKKyAgICAgICAgcnRwID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBydHAgPSAxOworICAgICAgICBpZiAob2N0ZXRzX3JlY3ZkID49IDIpIHsKKyAgICAgICAgICAgIC8qIHJmYzU3NjEgKi8KKyAgICAgICAgICAgIHVfY2hhciBwYXlsb2FkX3R5cGUgPSAqKGJ5dGVzICsgZGNkci0+cnRwX29mZnNldCArIDEpICYgMHg3ZjsKKyAgICAgICAgICAgIHJ0cCA9IHBheWxvYWRfdHlwZSA8IDY0IHx8IHBheWxvYWRfdHlwZSA+IDk1OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHJ0cCkgeworICAgICAgICAvKiB2ZXJpZnkgcnRwIGhlYWRlciAqLworICAgICAgICBpZiAobWVzc2FnZS5oZWFkZXIudmVyc2lvbiAhPSAyKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBzdGF0dXMgPSBzcnRwX3VucHJvdGVjdChkY2RyLT5zcnRwX2N0eCwgJm1lc3NhZ2UsICZvY3RldHNfcmVjdmQpOworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBkY2RyLT5lcnJvcl9jbnQrKzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBkY2RyLT5ydHBfY250Kys7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdHVzID0gc3J0cF91bnByb3RlY3RfcnRjcChkY2RyLT5zcnRwX2N0eCwgJm1lc3NhZ2UsICZvY3RldHNfcmVjdmQpOworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBkY2RyLT5lcnJvcl9jbnQrKzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBkY2RyLT5ydGNwX2NudCsrOworICAgIH0KKyAgICB0aW1lcnN1YigmaGRyLT50cywgJmRjZHItPnN0YXJ0X3R2LCAmZGVsdGEpOworICAgIGZwcmludGYoc3Rkb3V0LCAiJTAybGQ6JTAybGQuJTA2bGRcbiIsIGRlbHRhLnR2X3NlYyAvIDYwLCBkZWx0YS50dl9zZWMgJSA2MCwKKyAgICAgICAgICAgIChsb25nKWRlbHRhLnR2X3VzZWMpOworICAgIGhleGR1bXAoJm1lc3NhZ2UsIG9jdGV0c19yZWN2ZCk7Cit9CisKK3ZvaWQgcnRwX3ByaW50X2Vycm9yKHNydHBfZXJyX3N0YXR1c190IHN0YXR1cywgY2hhciAqbWVzc2FnZSkKK3sKKyAgICAvLyBjbGFuZy1mb3JtYXQgb2ZmCisgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAiZXJyb3I6ICVzICVkJXNcbiIsIG1lc3NhZ2UsIHN0YXR1cywKKyAgICAgICAgICAgIHN0YXR1cyA9PSBzcnRwX2Vycl9zdGF0dXNfcmVwbGF5X2ZhaWwgPyAiIChyZXBsYXkgY2hlY2sgZmFpbGVkKSIgOgorICAgICAgICAgICAgc3RhdHVzID09IHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW0gPyAiIChiYWQgcGFyYW0pIiA6CisgICAgICAgICAgICBzdGF0dXMgPT0gc3J0cF9lcnJfc3RhdHVzX25vX2N0eCA/ICIgKG5vIGNvbnRleHQpIiA6CisgICAgICAgICAgICBzdGF0dXMgPT0gc3J0cF9lcnJfc3RhdHVzX2NpcGhlcl9mYWlsID8gIiAoY2lwaGVyIGZhaWxlZCkiIDoKKyAgICAgICAgICAgIHN0YXR1cyA9PSBzcnRwX2Vycl9zdGF0dXNfa2V5X2V4cGlyZWQgPyAiIChrZXkgZXhwaXJlZCkiIDoKKyAgICAgICAgICAgIHN0YXR1cyA9PSBzcnRwX2Vycl9zdGF0dXNfYXV0aF9mYWlsID8gIiAoYXV0aCBjaGVjayBmYWlsZWQpIiA6ICIiKTsKKyAgICAvLyBjbGFuZy1mb3JtYXQgb24KK30KZGlmZiAtLWdpdCBhL3Rlc3QvcnRwX2RlY29kZXIuaCBiL3Rlc3QvcnRwX2RlY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGE1MWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9ydHBfZGVjb2Rlci5oCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogcnRwX2RlY29kZXIuaAorICoKKyAqIGRlY29kZXIgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIGZvciBTUlRQIHBjYXAgZGVjb2RlcgorICoKKyAqIEJlcm5hcmRvIFRvcnJlcyA8YmVybmFyZG9AdG9ycmVzYXV0b21hY2FvLmNvbS5icj4KKyAqCisgKiBTb21lIHN0cnVjdHVyZSBhbmQgY29kZSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ndGVpc3NpZXIvc3J0cC1kZWNyeXB0CisgKgorICovCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDE3IENpc2NvIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBSVFBfREVDT0RFUl9ICisjZGVmaW5lIFJUUF9ERUNPREVSX0gKKworI2luY2x1ZGUgInNydHBfcHJpdi5oIgorI2luY2x1ZGUgInJ0cC5oIgorCisjZGVmaW5lIERFRkFVTFRfUlRQX09GRlNFVCA0MgorCit0eXBlZGVmIGVudW0geworICAgIG1vZGVfcnRwID0gMCwKKyAgICBtb2RlX3J0Y3AsCisgICAgbW9kZV9ydGNwX211eCwKK30gcnRwX2RlY29kZXJfbW9kZV90OworCit0eXBlZGVmIHN0cnVjdCBydHBfZGVjb2Rlcl9jdHhfdCB7CisgICAgc3J0cF9wb2xpY3lfdCBwb2xpY3k7CisgICAgc3J0cF9jdHhfdCAqc3J0cF9jdHg7CisgICAgcnRwX2RlY29kZXJfbW9kZV90IG1vZGU7CisgICAgaW50IHJ0cF9vZmZzZXQ7CisgICAgc3RydWN0IHRpbWV2YWwgc3RhcnRfdHY7CisgICAgaW50IGZyYW1lX25yOworICAgIGludCBlcnJvcl9jbnQ7CisgICAgaW50IHJ0cF9jbnQ7CisgICAgaW50IHJ0Y3BfY250OworfSBydHBfZGVjb2Rlcl9jdHhfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcnRwX2RlY29kZXJfY3R4X3QgKnJ0cF9kZWNvZGVyX3Q7CisKKy8qCisgKiBlcnJvciB0byBzdHJpbmcKKyAqLwordm9pZCBydHBfcHJpbnRfZXJyb3Ioc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdHVzLCBjaGFyICptZXNzYWdlKTsKKworLyoKKyAqIHByaW50cyB0aGUgb3V0cHV0IG9mIGEgcmFuZG9tIGJ1ZmZlciBpbiBoZXhhZGVjaW1hbAorICovCit2b2lkIGhleGR1bXAoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CisKKy8qCisgKiB0aGUgZnVuY3Rpb24gdXNhZ2UoKSBwcmludHMgYW4gZXJyb3IgbWVzc2FnZSBkZXNjcmliaW5nIGhvdyB0aGlzCisgKiBwcm9ncmFtIHNob3VsZCBiZSBjYWxsZWQsIHRoZW4gY2FsbHMgZXhpdCgpCisgKi8KK3ZvaWQgdXNhZ2UoY2hhciAqcHJvZ19uYW1lKTsKKworLyoKKyAqIHRyYW5zZm9ybXMgYmFzZTY0IGtleSBpbnRvIG9jdGV0CisgKi8KK2NoYXIgKmRlY29kZV9zZGVzKGNoYXIgKmluLCBjaGFyICpvdXQpOworCisvKgorICogcGNhcCBoYW5kbGluZworICovCit2b2lkIHJ0cF9kZWNvZGVyX2hhbmRsZV9wa3QodV9jaGFyICphcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHBjYXBfcGt0aGRyICpoZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICpieXRlcyk7CisKK3J0cF9kZWNvZGVyX3QgcnRwX2RlY29kZXJfYWxsb2Modm9pZCk7CisKK3ZvaWQgcnRwX2RlY29kZXJfZGVhbGxvYyhydHBfZGVjb2Rlcl90IHJ0cF9jdHgpOworCitpbnQgcnRwX2RlY29kZXJfaW5pdChydHBfZGVjb2Rlcl90IGRjZHIsCisgICAgICAgICAgICAgICAgICAgICBzcnRwX3BvbGljeV90IHBvbGljeSwKKyAgICAgICAgICAgICAgICAgICAgIHJ0cF9kZWNvZGVyX21vZGVfdCBtb2RlKTsKKworaW50IHJ0cF9kZWNvZGVyX2RlaW5pdChydHBfZGVjb2Rlcl90IGRlY29kZXIpOworCit2b2lkIHJ0cF9kZWNvZGVyX3NydHBfbG9nX2hhbmRsZXIoc3J0cF9sb2dfbGV2ZWxfdCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSk7CisKK3ZvaWQgcnRwX2RlY29kZXJfc3J0cF9sb2dfaGFuZGxlcihzcnRwX2xvZ19sZXZlbF90IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKTsKKworI2VuZGlmIC8qIFJUUF9ERUNPREVSX0ggKi8KZGlmZiAtLWdpdCBhL3Rlc3QvcnRwdyBiL3Rlc3QvcnRwdwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDg5NTBkZC4uMDAwMDAwMAotLS0gYS90ZXN0L3J0cHcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0L3J0cHcuYyBiL3Rlc3QvcnRwdy5jCmluZGV4IDYzNzM2ZmMuLjkwMTgxNmUgMTAwNjQ0Ci0tLSBhL3Rlc3QvcnRwdy5jCisrKyBiL3Rlc3QvcnRwdy5jCkBAIC03LDM0ICs3LDM0IEBACiAgKiBDaXNjbyBTeXN0ZW1zLCBJbmMuCiAgKgogICogVGhpcyBhcHAgaXMgYSBzaW1wbGUgUlRQIGFwcGxpY2F0aW9uIGludGVuZGVkIG9ubHkgZm9yIHRlc3RpbmcKLSAqIGxpYnNydHAuICBJdCByZWFkcyBvbmUgd29yZCBhdCBhIHRpbWUgZnJvbSAvdXNyL2RpY3Qvd29yZHMgKG9yCi0gKiB3aGF0ZXZlciBmaWxlIGlzIHNwZWNpZmllZCBhcyBESUNUX0ZJTEUpLCBhbmQgc2VuZHMgb25lIHdvcmQgb3V0CisgKiBsaWJzcnRwLiAgSXQgcmVhZHMgb25lIHdvcmQgYXQgYSB0aW1lIGZyb20gd29yZHMudHh0IChvcgorICogd2hhdGV2ZXIgZmlsZSBpcyBzcGVjaWZpZWQgYXMgRElDVF9GSUxFIG9yIHdpdGggLXcpLCBhbmQgc2VuZHMgb25lIHdvcmQgb3V0CiAgKiBlYWNoIFVTRUNfUkFURSBtaWNyb3NlY29uZHMuICBTZWN1cmUgUlRQIHByb3RlY3Rpb25zIGNhbiBiZQogICogYXBwbGllZC4gIFNlZSB0aGUgdXNhZ2UoKSBmdW5jdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgogICoKICAqLwogCiAvKgotICoJCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSwgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDE3LCBDaXNjbyBTeXN0ZW1zLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0gKiAKKyAqCiAgKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwogICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKICAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCisgKgogICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAogICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKKyAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKQEAgLTUwLDQzICs1MCw4MiBAQAogICoKICAqLwogCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCiAKLSNpbmNsdWRlIDxzdGRpby5oPiAgICAgICAgICAvKiBmb3IgcHJpbnRmLCBmcHJpbnRmICovCi0jaW5jbHVkZSA8c3RkbGliLmg+ICAgICAgICAgLyogZm9yIGF0b2koKSAgICAgICAgICAqLwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+ICAgICAvKiBvcGVuYnNkIHdhbnRzIHRoaXMgICovCi0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSAiZ2V0b3B0X3MuaCIgLyogZm9yIGxvY2FsIGdldG9wdCgpICAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4gIC8qIGZvciBwcmludGYsIGZwcmludGYgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4gLyogZm9yIGF0b2koKSAgICAgICAgICAqLwogI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgICAgLyogZm9yIGNsb3NlKCkgICAgICAgICAqLwotI2luY2x1ZGUgPHN0cmluZy5oPiAgICAgICAgIC8qIGZvciBzdHJuY3B5KCkgICAgICAgKi8KLSNpbmNsdWRlIDx0aW1lLmg+CSAgICAvKiBmb3IgdXNsZWVwKCkgICAgICAgICovCisjaW5jbHVkZSA8c2lnbmFsLmg+IC8qIGZvciBzaWduYWwoKSAgICAgICAgKi8KIAotI2luY2x1ZGUgInNydHAuaCIgICAgICAgICAgIAorI2luY2x1ZGUgPHN0cmluZy5oPiAvKiBmb3Igc3RybmNweSgpICAgICAgICovCisjaW5jbHVkZSA8dGltZS5oPiAgIC8qIGZvciB1c2xlZXAoKSAgICAgICAgKi8KKworI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4gLyogZm9yIGNsb3NlKCkgICAgICAgICAqLworI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNpbmNsdWRlIDxpby5oPiAvKiBmb3IgX2Nsb3NlKCkgICAgICAgICovCisjZGVmaW5lIGNsb3NlIF9jbG9zZQorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbGlmIGRlZmluZWQgSEFWRV9XSU5TT0NLMl9ICisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2RlZmluZSBSVFBXX1VTRV9XSU5TT0NLMiAxCisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgInNydHAuaCIKICNpbmNsdWRlICJydHAuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCiAKLSNkZWZpbmUgRElDVF9GSUxFICAgICAgICAiL3Vzci9zaGFyZS9kaWN0L3dvcmRzIgotI2RlZmluZSBVU0VDX1JBVEUgICAgICAgICg1ZTUpCi0jZGVmaW5lIE1BWF9XT1JEX0xFTiAgICAgMTI4ICAKKyNkZWZpbmUgRElDVF9GSUxFICJ3b3Jkcy50eHQiCisjZGVmaW5lIFVTRUNfUkFURSAoNWU1KQorI2RlZmluZSBNQVhfV09SRF9MRU4gMTI4CiAjZGVmaW5lIEFERFJfSVNfTVVMVElDQVNUKGEpIElOX01VTFRJQ0FTVChodG9ubChhKSkKLSNkZWZpbmUgTUFYX0tFWV9MRU4gICAgICA2NAotI2RlZmluZSBNQVNURVJfS0VZX0xFTiAgIDMwCisjZGVmaW5lIE1BWF9LRVlfTEVOIDk2CisKKyNpZm5kZWYgSEFWRV9VU0xFRVAKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorI2RlZmluZSB1c2xlZXAodXMpIFNsZWVwKCh1cykgLyAxMDAwKQorI2Vsc2UKKyNkZWZpbmUgdXNsZWVwKHVzKSBzbGVlcCgodXMpIC8gMTAwMDAwMCkKKyNlbmRpZgorI2VuZGlmCiAKIC8qCiAgKiB0aGUgZnVuY3Rpb24gdXNhZ2UoKSBwcmludHMgYW4gZXJyb3IgbWVzc2FnZSBkZXNjcmliaW5nIGhvdyB0aGlzCiAgKiBwcm9ncmFtIHNob3VsZCBiZSBjYWxsZWQsIHRoZW4gY2FsbHMgZXhpdCgpCiAgKi8KIAotdm9pZAotdXNhZ2UoY2hhciAqcHJvZ19uYW1lKTsKK3ZvaWQgdXNhZ2UoY2hhciAqcHJvZ19uYW1lKTsKIAogLyoKICAqIGxlYXZlX2dyb3VwKC4uLikgZGUtcmVnaXN0ZXJzIGZyb20gYSBtdWx0aWNhc3QgZ3JvdXAKICAqLwogCi12b2lkCi1sZWF2ZV9ncm91cChpbnQgc29jaywgc3RydWN0IGlwX21yZXEgbXJlcSwgY2hhciAqbmFtZSk7Cit2b2lkIGxlYXZlX2dyb3VwKGludCBzb2NrLCBzdHJ1Y3QgaXBfbXJlcSBtcmVxLCBjaGFyICpuYW1lKTsKIAorLyoKKyAqIHNldHVwX3NpZ25hbF9oYW5kbGVyKCkgc2V0cyB1cCBhIHNpZ25hbCBoYW5kbGVyIHRvIHRyaWdnZXIKKyAqIGNsZWFudXBzIGFmdGVyIGFuIGludGVycnVwdAorICovCitpbnQgc2V0dXBfc2lnbmFsX2hhbmRsZXIoY2hhciAqbmFtZSk7CisKKy8qCisgKiBoYW5kbGVfc2lnbmFsKC4uLikgaGFuZGxlcyBpbnRlcnJ1cHQgc2lnbmFsIHRvIHRyaWdnZXIgY2xlYW51cHMKKyAqLworCit2b2xhdGlsZSBpbnQgaW50ZXJydXB0ZWQgPSAwOwogCiAvKgogICogcHJvZ3JhbV90eXBlIGRpc3Rpbmd1aXNoZXMgdGhlIFtzXXJ0cCBzZW5kZXIgYW5kIHJlY2VpdmVyIGNhc2VzCkBAIC05NCwzNTIgKzEzMyw1NjkgQEAKIAogdHlwZWRlZiBlbnVtIHsgc2VuZGVyLCByZWNlaXZlciwgdW5rbm93biB9IHByb2dyYW1fdHlwZTsKIAotaW50Ci1tYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7Ci0gIGNoYXIgKmRpY3RmaWxlID0gRElDVF9GSUxFOwotICBGSUxFICpkaWN0OwotICBjaGFyIHdvcmRbTUFYX1dPUkRfTEVOXTsKLSAgaW50IHNvY2ssIHJldDsKLSAgc3RydWN0IGluX2FkZHIgcmN2cl9hZGRyOwotICBzdHJ1Y3Qgc29ja2FkZHJfaW4gbmFtZTsKLSAgc3RydWN0IGlwX21yZXEgbXJlcTsKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgY2hhciAqZGljdGZpbGUgPSBESUNUX0ZJTEU7CisgICAgRklMRSAqZGljdDsKKyAgICBjaGFyIHdvcmRbTUFYX1dPUkRfTEVOXTsKKyAgICBpbnQgc29jaywgcmV0OworICAgIHN0cnVjdCBpbl9hZGRyIHJjdnJfYWRkcjsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gbmFtZTsKKyAgICBzdHJ1Y3QgaXBfbXJlcSBtcmVxOwogI2lmIEJFVwotICBzdHJ1Y3Qgc29ja2FkZHJfaW4gbG9jYWw7Ci0jZW5kaWYgCi0gIHByb2dyYW1fdHlwZSBwcm9nX3R5cGUgPSB1bmtub3duOwotICBzZWNfc2Vydl90IHNlY19zZXJ2cyA9IHNlY19zZXJ2X25vbmU7Ci0gIHVuc2lnbmVkIGNoYXIgdHRsID0gNTsKLSAgaW50IGM7Ci0gIHVuc2lnbmVkIGNoYXIgKmlucHV0X2tleSA9IE5VTEw7Ci0gIHVuc2lnbmVkIGNoYXIgKmFkZHJlc3MgPSBOVUxMOwotICBvY3RldF90IGtleVtNQVhfS0VZX0xFTl07Ci0gIHVuc2lnbmVkIHNob3J0IHBvcnQgPSAwOwotICBydHBfc2VuZGVyX3Qgc25kOwotICBzcnRwX3BvbGljeV90IHBvbGljeTsKLSAgZXJyX3N0YXR1c190IHN0YXR1czsKLSAgaW50IGxlbjsKLSAgaW50IGRvX2xpc3RfbW9kcyA9IDA7Ci0gIHVpbnQzMl90IHNzcmMgPSAweGRlYWRiZWVmOyAvKiBzc3JjIHZhbHVlIGhhcmRjb2RlZCBmb3Igbm93ICovCisgICAgc3RydWN0IHNvY2thZGRyX2luIGxvY2FsOworI2VuZGlmCisgICAgcHJvZ3JhbV90eXBlIHByb2dfdHlwZSA9IHVua25vd247CisgICAgc3J0cF9zZWNfc2Vydl90IHNlY19zZXJ2cyA9IHNlY19zZXJ2X25vbmU7CisgICAgdW5zaWduZWQgY2hhciB0dGwgPSA1OworICAgIGludCBjOworICAgIGludCBrZXlfc2l6ZSA9IDEyODsKKyAgICBpbnQgdGFnX3NpemUgPSA4OworICAgIGludCBnY21fb24gPSAwOworICAgIGNoYXIgKmlucHV0X2tleSA9IE5VTEw7CisgICAgaW50IGI2NF9pbnB1dCA9IDA7CisgICAgY2hhciAqYWRkcmVzcyA9IE5VTEw7CisgICAgY2hhciBrZXlbTUFYX0tFWV9MRU5dOworICAgIHVuc2lnbmVkIHNob3J0IHBvcnQgPSAwOworICAgIHJ0cF9zZW5kZXJfdCBzbmQ7CisgICAgc3J0cF9wb2xpY3lfdCBwb2xpY3k7CisgICAgc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdHVzOworICAgIGludCBsZW47CisgICAgaW50IGV4cGVjdGVkX2xlbjsKKyAgICBpbnQgZG9fbGlzdF9tb2RzID0gMDsKKyAgICB1aW50MzJfdCBzc3JjID0gMHhkZWFkYmVlZjsgLyogc3NyYyB2YWx1ZSBoYXJkY29kZWQgZm9yIG5vdyAqLworI2lmZGVmIFJUUFdfVVNFX1dJTlNPQ0syCisgICAgV09SRCB3VmVyc2lvblJlcXVlc3RlZCA9IE1BS0VXT1JEKDIsIDApOworICAgIFdTQURBVEEgd3NhRGF0YTsKIAotICAvKiBpbml0aWFsaXplIHNydHAgbGlicmFyeSAqLwotICBzdGF0dXMgPSBzcnRwX2luaXQoKTsKLSAgaWYgKHN0YXR1cykgewotICAgIHByaW50ZigiZXJyb3I6IHNydHAgaW5pdGlhbGl6YXRpb24gZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgc3RhdHVzKTsKLSAgICBleGl0KDEpOwotICB9Ci0KLSAgLyogY2hlY2sgYXJncyAqLwotICB3aGlsZSAoMSkgewotICAgIGMgPSBnZXRvcHQoYXJnYywgYXJndiwgIms6cnNhZWxkOiIpOwotICAgIGlmIChjID09IC0xKSB7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgc3dpdGNoIChjKSB7Ci0gICAgY2FzZSAnayc6Ci0gICAgICBpbnB1dF9rZXkgPSBvcHRhcmc7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICdlJzoKLSAgICAgIHNlY19zZXJ2cyB8PSBzZWNfc2Vydl9jb25mOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnYSc6Ci0gICAgICBzZWNfc2VydnMgfD0gc2VjX3NlcnZfYXV0aDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgJ3InOgotICAgICAgcHJvZ190eXBlID0gcmVjZWl2ZXI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICdzJzoKLSAgICAgIHByb2dfdHlwZSA9IHNlbmRlcjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgJ2QnOgotICAgICAgc3RhdHVzID0gY3J5cHRvX2tlcm5lbF9zZXRfZGVidWdfbW9kdWxlKG9wdGFyZywgMSk7Ci0gICAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICAgIHByaW50ZigiZXJyb3I6IHNldCBkZWJ1ZyBtb2R1bGUgKCVzKSBmYWlsZWRcbiIsIG9wdGFyZyk7CisgICAgcmV0ID0gV1NBU3RhcnR1cCh3VmVyc2lvblJlcXVlc3RlZCwgJndzYURhdGEpOworICAgIGlmIChyZXQgIT0gMCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yOiBXU0FTdGFydHVwKCkgZmFpbGVkOiAlZFxuIiwgcmV0KTsKICAgICAgICAgZXhpdCgxKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgJ2wnOgotICAgICAgZG9fbGlzdF9tb2RzID0gMTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICB1c2FnZShhcmd2WzBdKTsKICAgICB9Ci0gIH0KLQotICBpZiAocHJvZ190eXBlID09IHVua25vd24pIHsKLSAgICBpZiAoZG9fbGlzdF9tb2RzKSB7Ci0gICAgICBzdGF0dXMgPSBjcnlwdG9fa2VybmVsX2xpc3RfZGVidWdfbW9kdWxlcygpOwotICAgICAgaWYgKHN0YXR1cykgewotCXByaW50ZigiZXJyb3I6IGxpc3Qgb2YgZGVidWcgbW9kdWxlcyBmYWlsZWRcbiIpOwotCWV4aXQoMSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gMDsKLSAgICB9IGVsc2UgewotICAgICAgcHJpbnRmKCJlcnJvcjogbmVpdGhlciBzZW5kZXIgWy1zXSBub3IgcmVjZWl2ZXIgWy1yXSBzcGVjaWZpZWRcbiIpOwotICAgICAgdXNhZ2UoYXJndlswXSk7Ci0gICAgfQotICB9Ci0gICAKLSAgaWYgKChzZWNfc2VydnMgJiYgIWlucHV0X2tleSkgfHwgKCFzZWNfc2VydnMgJiYgaW5wdXRfa2V5KSkgewotICAgIC8qIAotICAgICAqIGEga2V5IG11c3QgYmUgcHJvdmlkZWQgaWYgYW5kIG9ubHkgaWYgc2VjdXJpdHkgc2VydmljZXMgaGF2ZQotICAgICAqIGJlZW4gcmVxdWVzdGVkIAotICAgICAqLwotICAgIHVzYWdlKGFyZ3ZbMF0pOwotICB9Ci0gICAgCi0gIGlmIChhcmdjICE9IG9wdGluZCArIDIpIHsKLSAgICAvKiB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzICovCi0gICAgdXNhZ2UoYXJndlswXSk7Ci0gIH0KLQotICAvKiBnZXQgYWRkcmVzcyBmcm9tIGFyZyAqLwotICBhZGRyZXNzID0gYXJndltvcHRpbmQrK107Ci0KLSAgLyogZ2V0IHBvcnQgZnJvbSBhcmcgKi8KLSAgcG9ydCA9IGF0b2koYXJndltvcHRpbmQrK10pOwotCi0gIC8qIHNldCBhZGRyZXNzICovCi0jaWYgSEFWRV9JTkVUX0FUT04KLSAgaWYgKDAgPT0gaW5ldF9hdG9uKGFkZHJlc3MsICZyY3ZyX2FkZHIpKSB7Ci0gICAgZnByaW50ZihzdGRlcnIsICIlczogY2Fubm90IHBhcnNlIElQIHY0IGFkZHJlc3MgJXNcbiIsIGFyZ3ZbMF0sIGFkZHJlc3MpOwotICAgIGV4aXQoMSk7Ci0gIH0KLSAgaWYgKHJjdnJfYWRkci5zX2FkZHIgPT0gSU5BRERSX05PTkUpIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBhZGRyZXNzIGVycm9yIiwgYXJndlswXSk7Ci0gICAgZXhpdCgxKTsKLSAgfQotI2Vsc2UKLSAgcmN2cl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihhZGRyZXNzKTsKLSAgaWYgKDB4ZmZmZmZmZmYgPT0gcmN2cl9hZGRyLnNfYWRkcikgewotICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGNhbm5vdCBwYXJzZSBJUCB2NCBhZGRyZXNzICVzXG4iLCBhcmd2WzBdLCBhZGRyZXNzKTsKLSAgICBleGl0KDEpOwotICB9CiAjZW5kaWYKIAotICAvKiBvcGVuIHNvY2tldCAqLwotICBzb2NrID0gc29ja2V0KFBGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKTsKLSAgaWYgKHNvY2sgPCAwKSB7Ci0gICAgZnByaW50ZihzdGRlcnIsICIlczogY291bGRuJ3Qgb3BlbiBzb2NrZXRcbiIsIGFyZ3ZbMF0pOwotICAgIGV4aXQoMSk7Ci0gIH0KKyAgICBtZW1zZXQoJnBvbGljeSwgMHgwLCBzaXplb2Yoc3J0cF9wb2xpY3lfdCkpOwogCi0gIG5hbWUuc2luX2FkZHIgICA9IHJjdnJfYWRkcjsgICAgCi0gIG5hbWUuc2luX2ZhbWlseSA9IFBGX0lORVQ7Ci0gIG5hbWUuc2luX3BvcnQgICA9IGh0b25zKHBvcnQpOwotIAotICBpZiAoQUREUl9JU19NVUxUSUNBU1QocmN2cl9hZGRyLnNfYWRkcikpIHsKKyAgICBwcmludGYoIlVzaW5nICVzIFsweCV4XVxuIiwgc3J0cF9nZXRfdmVyc2lvbl9zdHJpbmcoKSwgc3J0cF9nZXRfdmVyc2lvbigpKTsKKworICAgIGlmIChzZXR1cF9zaWduYWxfaGFuZGxlcihhcmd2WzBdKSAhPSAwKSB7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgLyogaW5pdGlhbGl6ZSBzcnRwIGxpYnJhcnkgKi8KKyAgICBzdGF0dXMgPSBzcnRwX2luaXQoKTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHByaW50ZigiZXJyb3I6IHNydHAgaW5pdGlhbGl6YXRpb24gZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwKKyAgICAgICAgICAgICAgIHN0YXR1cyk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgLyogY2hlY2sgYXJncyAqLworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGMgPSBnZXRvcHRfcyhhcmdjLCBhcmd2LCAiYjprOnJzZ3Q6YWU6bGQ6dzoiKTsKKyAgICAgICAgaWYgKGMgPT0gLTEpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICBjYXNlICdiJzoKKyAgICAgICAgICAgIGI2NF9pbnB1dCA9IDE7CisgICAgICAgIC8qIGZhbGwgdGhydSAqLworICAgICAgICBjYXNlICdrJzoKKyAgICAgICAgICAgIGlucHV0X2tleSA9IG9wdGFyZ19zOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2UnOgorICAgICAgICAgICAga2V5X3NpemUgPSBhdG9pKG9wdGFyZ19zKTsKKyAgICAgICAgICAgIGlmIChrZXlfc2l6ZSAhPSAxMjggJiYga2V5X3NpemUgIT0gMjU2KSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJlcnJvcjogZW5jcnlwdGlvbiBrZXkgc2l6ZSBtdXN0IGJlIDEyOCBvciAyNTYgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAga2V5X3NpemUpOworICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZWNfc2VydnMgfD0gc2VjX3NlcnZfY29uZjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgIHRhZ19zaXplID0gYXRvaShvcHRhcmdfcyk7CisgICAgICAgICAgICBpZiAodGFnX3NpemUgIT0gOCAmJiB0YWdfc2l6ZSAhPSAxNikgeworICAgICAgICAgICAgICAgIHByaW50ZigiZXJyb3I6IEdDTSB0YWcgc2l6ZSBtdXN0IGJlIDggb3IgMTYgKCVkKVxuIiwgdGFnX3NpemUpOworICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnYSc6CisgICAgICAgICAgICBzZWNfc2VydnMgfD0gc2VjX3NlcnZfYXV0aDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdnJzoKKyAgICAgICAgICAgIGdjbV9vbiA9IDE7CisgICAgICAgICAgICBzZWNfc2VydnMgfD0gc2VjX3NlcnZfYXV0aDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdyJzoKKyAgICAgICAgICAgIHByb2dfdHlwZSA9IHJlY2VpdmVyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3MnOgorICAgICAgICAgICAgcHJvZ190eXBlID0gc2VuZGVyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2QnOgorICAgICAgICAgICAgc3RhdHVzID0gc3J0cF9zZXRfZGVidWdfbW9kdWxlKG9wdGFyZ19zLCAxKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoImVycm9yOiBzZXQgZGVidWcgbW9kdWxlICglcykgZmFpbGVkXG4iLCBvcHRhcmdfcyk7CisgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdsJzoKKyAgICAgICAgICAgIGRvX2xpc3RfbW9kcyA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAndyc6CisgICAgICAgICAgICBkaWN0ZmlsZSA9IG9wdGFyZ19zOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB1c2FnZShhcmd2WzBdKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChwcm9nX3R5cGUgPT0gdW5rbm93bikgeworICAgICAgICBpZiAoZG9fbGlzdF9tb2RzKSB7CisgICAgICAgICAgICBzdGF0dXMgPSBzcnRwX2xpc3RfZGVidWdfbW9kdWxlcygpOworICAgICAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgICAgIHByaW50ZigiZXJyb3I6IGxpc3Qgb2YgZGVidWcgbW9kdWxlcyBmYWlsZWRcbiIpOworICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50ZigiZXJyb3I6IG5laXRoZXIgc2VuZGVyIFstc10gbm9yIHJlY2VpdmVyIFstcl0gc3BlY2lmaWVkXG4iKTsKKyAgICAgICAgICAgIHVzYWdlKGFyZ3ZbMF0pOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKChzZWNfc2VydnMgJiYgIWlucHV0X2tleSkgfHwgKCFzZWNfc2VydnMgJiYgaW5wdXRfa2V5KSkgeworICAgICAgICAvKgorICAgICAgICAgKiBhIGtleSBtdXN0IGJlIHByb3ZpZGVkIGlmIGFuZCBvbmx5IGlmIHNlY3VyaXR5IHNlcnZpY2VzIGhhdmUKKyAgICAgICAgICogYmVlbiByZXF1ZXN0ZWQKKyAgICAgICAgICovCisgICAgICAgIHVzYWdlKGFyZ3ZbMF0pOworICAgIH0KKworICAgIGlmIChhcmdjICE9IG9wdGluZF9zICsgMikgeworICAgICAgICAvKiB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzICovCisgICAgICAgIHVzYWdlKGFyZ3ZbMF0pOworICAgIH0KKworICAgIC8qIGdldCBhZGRyZXNzIGZyb20gYXJnICovCisgICAgYWRkcmVzcyA9IGFyZ3Zbb3B0aW5kX3MrK107CisKKyAgICAvKiBnZXQgcG9ydCBmcm9tIGFyZyAqLworICAgIHBvcnQgPSBhdG9pKGFyZ3Zbb3B0aW5kX3MrK10pOworCisvKiBzZXQgYWRkcmVzcyAqLworI2lmZGVmIEhBVkVfSU5FVF9BVE9OCisgICAgaWYgKDAgPT0gaW5ldF9hdG9uKGFkZHJlc3MsICZyY3ZyX2FkZHIpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGNhbm5vdCBwYXJzZSBJUCB2NCBhZGRyZXNzICVzXG4iLCBhcmd2WzBdLAorICAgICAgICAgICAgICAgIGFkZHJlc3MpOworICAgICAgICBleGl0KDEpOworICAgIH0KKyAgICBpZiAocmN2cl9hZGRyLnNfYWRkciA9PSBJTkFERFJfTk9ORSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBhZGRyZXNzIGVycm9yIiwgYXJndlswXSk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorI2Vsc2UKKyAgICByY3ZyX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyKGFkZHJlc3MpOworICAgIGlmICgweGZmZmZmZmZmID09IHJjdnJfYWRkci5zX2FkZHIpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogY2Fubm90IHBhcnNlIElQIHY0IGFkZHJlc3MgJXNcbiIsIGFyZ3ZbMF0sCisgICAgICAgICAgICAgICAgYWRkcmVzcyk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorI2VuZGlmCisKKyAgICAvKiBvcGVuIHNvY2tldCAqLworICAgIHNvY2sgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApOworICAgIGlmIChzb2NrIDwgMCkgeworICAgICAgICBpbnQgZXJyOworI2lmZGVmIFJUUFdfVVNFX1dJTlNPQ0syCisgICAgICAgIGVyciA9IFdTQUdldExhc3RFcnJvcigpOworI2Vsc2UKKyAgICAgICAgZXJyID0gZXJybm87CisjZW5kaWYKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogY291bGRuJ3Qgb3BlbiBzb2NrZXQ6ICVkXG4iLCBhcmd2WzBdLCBlcnIpOworICAgICAgICBleGl0KDEpOworICAgIH0KKworICAgIG1lbXNldCgmbmFtZSwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworICAgIG5hbWUuc2luX2FkZHIgPSByY3ZyX2FkZHI7CisgICAgbmFtZS5zaW5fZmFtaWx5ID0gUEZfSU5FVDsKKyAgICBuYW1lLnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CisKKyAgICBpZiAoQUREUl9JU19NVUxUSUNBU1QocmN2cl9hZGRyLnNfYWRkcikpIHsKKyAgICAgICAgaWYgKHByb2dfdHlwZSA9PSBzZW5kZXIpIHsKKyAgICAgICAgICAgIHJldCA9IHNldHNvY2tvcHQoc29jaywgSVBQUk9UT19JUCwgSVBfTVVMVElDQVNUX1RUTCwgJnR0bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHR0bCkpOworICAgICAgICAgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBGYWlsZWQgdG8gc2V0IFRUTCBmb3IgbXVsdGljYXN0IGdyb3VwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3ZbMF0pOworICAgICAgICAgICAgICAgIHBlcnJvcigiIik7CisgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1yZXEuaW1yX211bHRpYWRkci5zX2FkZHIgPSByY3ZyX2FkZHIuc19hZGRyOworICAgICAgICBtcmVxLmltcl9pbnRlcmZhY2Uuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7CisgICAgICAgIHJldCA9IHNldHNvY2tvcHQoc29jaywgSVBQUk9UT19JUCwgSVBfQUREX01FTUJFUlNISVAsICh2b2lkICopJm1yZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG1yZXEpKTsKKyAgICAgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEZhaWxlZCB0byBqb2luIG11bHRpY2FzdCBncm91cCIsIGFyZ3ZbMF0pOworICAgICAgICAgICAgcGVycm9yKCIiKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiByZXBvcnQgc2VjdXJpdHkgc2VydmljZXMgc2VsZWN0ZWQgb24gdGhlIGNvbW1hbmQgbGluZSAqLworICAgIHByaW50Zigic2VjdXJpdHkgc2VydmljZXM6ICIpOworICAgIGlmIChzZWNfc2VydnMgJiBzZWNfc2Vydl9jb25mKQorICAgICAgICBwcmludGYoImNvbmZpZGVudGlhbGl0eSAiKTsKKyAgICBpZiAoc2VjX3NlcnZzICYgc2VjX3NlcnZfYXV0aCkKKyAgICAgICAgcHJpbnRmKCJtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIik7CisgICAgaWYgKHNlY19zZXJ2cyA9PSBzZWNfc2Vydl9ub25lKQorICAgICAgICBwcmludGYoIm5vbmUiKTsKKyAgICBwcmludGYoIlxuIik7CisKKyAgICAvKiBzZXQgdXAgdGhlIHNydHAgcG9saWN5IGFuZCBtYXN0ZXIga2V5ICovCisgICAgaWYgKHNlY19zZXJ2cykgeworICAgICAgICAvKgorICAgICAgICAgKiBjcmVhdGUgcG9saWN5IHN0cnVjdHVyZSwgdXNpbmcgdGhlIGRlZmF1bHQgbWVjaGFuaXNtcyBidXQKKyAgICAgICAgICogd2l0aCBvbmx5IHRoZSBzZWN1cml0eSBzZXJ2aWNlcyByZXF1ZXN0ZWQgb24gdGhlIGNvbW1hbmQgbGluZSwKKyAgICAgICAgICogdXNpbmcgdGhlIHJpZ2h0IFNTUkMgdmFsdWUKKyAgICAgICAgICovCisgICAgICAgIHN3aXRjaCAoc2VjX3NlcnZzKSB7CisgICAgICAgIGNhc2Ugc2VjX3NlcnZfY29uZl9hbmRfYXV0aDoKKyAgICAgICAgICAgIGlmIChnY21fb24pIHsKKyNpZmRlZiBHQ00KKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGtleV9zaXplKSB7CisgICAgICAgICAgICAgICAgY2FzZSAxMjg6CisgICAgICAgICAgICAgICAgICAgIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2djbV8xMjhfOF9hdXRoKCZwb2xpY3kucnRwKTsKKyAgICAgICAgICAgICAgICAgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzEyOF84X2F1dGgoJnBvbGljeS5ydGNwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyNTY6CisgICAgICAgICAgICAgICAgICAgIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2djbV8yNTZfOF9hdXRoKCZwb2xpY3kucnRwKTsKKyAgICAgICAgICAgICAgICAgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzI1Nl84X2F1dGgoJnBvbGljeS5ydGNwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgICAgICBwcmludGYoImVycm9yOiBHQ00gbW9kZSBvbmx5IHN1cHBvcnRlZCB3aGVuIHVzaW5nIHRoZSBPcGVuU1NMICIKKyAgICAgICAgICAgICAgICAgICAgICAgIm9yIE5TUyBjcnlwdG8gZW5naW5lLlxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChrZXlfc2l6ZSkgeworICAgICAgICAgICAgICAgIGNhc2UgMTI4OgorICAgICAgICAgICAgICAgICAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X3J0cF9kZWZhdWx0KCZwb2xpY3kucnRwKTsKKyAgICAgICAgICAgICAgICAgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9ydGNwX2RlZmF1bHQoJnBvbGljeS5ydGNwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyNTY6CisgICAgICAgICAgICAgICAgICAgIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2NtXzI1Nl9obWFjX3NoYTFfODAoJnBvbGljeS5ydHApOworICAgICAgICAgICAgICAgICAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X3J0Y3BfZGVmYXVsdCgmcG9saWN5LnJ0Y3ApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBzZWNfc2Vydl9jb25mOgorICAgICAgICAgICAgaWYgKGdjbV9vbikgeworICAgICAgICAgICAgICAgIHByaW50ZigKKyAgICAgICAgICAgICAgICAgICAgImVycm9yOiBHQ00gbW9kZSBtdXN0IGFsd2F5cyBiZSB1c2VkIHdpdGggYXV0aCBlbmFibGVkXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoa2V5X3NpemUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDEyODoKKyAgICAgICAgICAgICAgICAgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfY21fMTI4X251bGxfYXV0aCgmcG9saWN5LnJ0cCk7CisgICAgICAgICAgICAgICAgICAgIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfcnRjcF9kZWZhdWx0KCZwb2xpY3kucnRjcCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjU2OgorICAgICAgICAgICAgICAgICAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19jbV8yNTZfbnVsbF9hdXRoKCZwb2xpY3kucnRwKTsKKyAgICAgICAgICAgICAgICAgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9ydGNwX2RlZmF1bHQoJnBvbGljeS5ydGNwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ugc2VjX3NlcnZfYXV0aDoKKyAgICAgICAgICAgIGlmIChnY21fb24pIHsKKyNpZmRlZiBHQ00KKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGtleV9zaXplKSB7CisgICAgICAgICAgICAgICAgY2FzZSAxMjg6CisgICAgICAgICAgICAgICAgICAgIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2djbV8xMjhfOF9vbmx5X2F1dGgoJnBvbGljeS5ydHApOworICAgICAgICAgICAgICAgICAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19nY21fMTI4Xzhfb25seV9hdXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgJnBvbGljeS5ydGNwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyNTY6CisgICAgICAgICAgICAgICAgICAgIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2djbV8yNTZfOF9vbmx5X2F1dGgoJnBvbGljeS5ydHApOworICAgICAgICAgICAgICAgICAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19nY21fMjU2Xzhfb25seV9hdXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgJnBvbGljeS5ydGNwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgICAgICBwcmludGYoImVycm9yOiBHQ00gbW9kZSBvbmx5IHN1cHBvcnRlZCB3aGVuIHVzaW5nIHRoZSBPcGVuU1NMICIKKyAgICAgICAgICAgICAgICAgICAgICAgImNyeXB0byBlbmdpbmUuXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X251bGxfY2lwaGVyX2htYWNfc2hhMV84MCgmcG9saWN5LnJ0cCk7CisgICAgICAgICAgICAgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9ydGNwX2RlZmF1bHQoJnBvbGljeS5ydGNwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcHJpbnRmKCJlcnJvcjogdW5rbm93biBzZWN1cml0eSBzZXJ2aWNlIHJlcXVlc3RlZFxuIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgcG9saWN5LnNzcmMudHlwZSA9IHNzcmNfc3BlY2lmaWM7CisgICAgICAgIHBvbGljeS5zc3JjLnZhbHVlID0gc3NyYzsKKyAgICAgICAgcG9saWN5LmtleSA9ICh1aW50OF90ICopa2V5OworICAgICAgICBwb2xpY3kuZWt0ID0gTlVMTDsKKyAgICAgICAgcG9saWN5Lm5leHQgPSBOVUxMOworICAgICAgICBwb2xpY3kud2luZG93X3NpemUgPSAxMjg7CisgICAgICAgIHBvbGljeS5hbGxvd19yZXBlYXRfdHggPSAwOworICAgICAgICBwb2xpY3kucnRwLnNlY19zZXJ2ID0gc2VjX3NlcnZzOworICAgICAgICBwb2xpY3kucnRjcC5zZWNfc2VydiA9IHNlY19zZXJ2X25vbmU7IC8qIHdlIGRvbid0IGRvIFJUQ1AgYW55d2F5ICovCisKKyAgICAgICAgaWYgKGdjbV9vbiAmJiB0YWdfc2l6ZSAhPSA4KSB7CisgICAgICAgICAgICBwb2xpY3kucnRwLmF1dGhfdGFnX2xlbiA9IHRhZ19zaXplOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogcmVhZCBrZXkgZnJvbSBoZXhhZGVjaW1hbCBvciBiYXNlNjQgb24gY29tbWFuZCBsaW5lIGludG8gYW4gb2N0ZXQKKyAgICAgICAgICogc3RyaW5nCisgICAgICAgICAqLworICAgICAgICBpZiAoYjY0X2lucHV0KSB7CisgICAgICAgICAgICBpbnQgcGFkOworICAgICAgICAgICAgZXhwZWN0ZWRfbGVuID0gKHBvbGljeS5ydHAuY2lwaGVyX2tleV9sZW4gKiA0KSAvIDM7CisgICAgICAgICAgICBsZW4gPSBiYXNlNjRfc3RyaW5nX3RvX29jdGV0X3N0cmluZyhrZXksICZwYWQsIGlucHV0X2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2xlbik7CisgICAgICAgICAgICBpZiAocGFkICE9IDApIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yOiBwYWRkaW5nIGluIGJhc2U2NCB1bmV4cGVjdGVkXG4iKTsKKyAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXhwZWN0ZWRfbGVuID0gcG9saWN5LnJ0cC5jaXBoZXJfa2V5X2xlbiAqIDI7CisgICAgICAgICAgICBsZW4gPSBoZXhfc3RyaW5nX3RvX29jdGV0X3N0cmluZyhrZXksIGlucHV0X2tleSwgZXhwZWN0ZWRfbGVuKTsKKyAgICAgICAgfQorICAgICAgICAvKiBjaGVjayB0aGF0IGhleCBzdHJpbmcgaXMgdGhlIHJpZ2h0IGxlbmd0aCAqLworICAgICAgICBpZiAobGVuIDwgZXhwZWN0ZWRfbGVuKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yOiB0b28gZmV3IGRpZ2l0cyBpbiBrZXkvc2FsdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihzaG91bGQgYmUgJWQgZGlnaXRzLCBmb3VuZCAlZClcbiIsCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2xlbiwgbGVuKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChpbnQpc3RybGVuKGlucHV0X2tleSkgPiBwb2xpY3kucnRwLmNpcGhlcl9rZXlfbGVuICogMikgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvcjogdG9vIG1hbnkgZGlnaXRzIGluIGtleS9zYWx0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKHNob3VsZCBiZSAlZCBoZXhhZGVjaW1hbCBkaWdpdHMsIGZvdW5kICV1KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgcG9saWN5LnJ0cC5jaXBoZXJfa2V5X2xlbiAqIDIsICh1bnNpZ25lZClzdHJsZW4oaW5wdXRfa2V5KSk7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisKKyAgICAgICAgcHJpbnRmKCJzZXQgbWFzdGVyIGtleS9zYWx0IHRvICVzLyIsIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKGtleSwgMTYpKTsKKyAgICAgICAgcHJpbnRmKCIlc1xuIiwgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoa2V5ICsgMTYsIDE0KSk7CisKKyAgICB9IGVsc2UgeworICAgICAgICAvKgorICAgICAgICAgKiB3ZSdyZSBub3QgcHJvdmlkaW5nIHNlY3VyaXR5IHNlcnZpY2VzLCBzbyBzZXQgdGhlIHBvbGljeSB0byB0aGUKKyAgICAgICAgICogbnVsbCBwb2xpY3kKKyAgICAgICAgICoKKyAgICAgICAgICogTm90ZSB0aGF0IHRoaXMgcG9saWN5IGRvZXMgbm90IGNvbmZvcm0gdG8gdGhlIFNSVFAKKyAgICAgICAgICogc3BlY2lmaWNhdGlvbiwgc2luY2UgUlRDUCBhdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZC4gIEhvd2V2ZXIsCisgICAgICAgICAqIHRoZSBlZmZlY3Qgb2YgdGhpcyBwb2xpY3kgaXMgdG8gdHVybiBvZmYgU1JUUCwgc28gdGhhdCB0aGlzCisgICAgICAgICAqIGFwcGxpY2F0aW9uIGlzIG5vdyBhIHZhbmlsbGEtZmxhdm9yZWQgUlRQIGFwcGxpY2F0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9udWxsX2NpcGhlcl9obWFjX251bGwoJnBvbGljeS5ydHApOworICAgICAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X251bGxfY2lwaGVyX2htYWNfbnVsbCgmcG9saWN5LnJ0Y3ApOworICAgICAgICBwb2xpY3kua2V5ID0gKHVpbnQ4X3QgKilrZXk7CisgICAgICAgIHBvbGljeS5zc3JjLnR5cGUgPSBzc3JjX3NwZWNpZmljOworICAgICAgICBwb2xpY3kuc3NyYy52YWx1ZSA9IHNzcmM7CisgICAgICAgIHBvbGljeS53aW5kb3dfc2l6ZSA9IDA7CisgICAgICAgIHBvbGljeS5hbGxvd19yZXBlYXRfdHggPSAwOworICAgICAgICBwb2xpY3kuZWt0ID0gTlVMTDsKKyAgICAgICAgcG9saWN5Lm5leHQgPSBOVUxMOworICAgIH0KKwogICAgIGlmIChwcm9nX3R5cGUgPT0gc2VuZGVyKSB7Ci0gICAgICByZXQgPSBzZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fSVAsIElQX01VTFRJQ0FTVF9UVEwsICZ0dGwsIAotICAJICAgICAgICAgICAgICAgc2l6ZW9mKHR0bCkpOwotICAgICAgaWYgKHJldCA8IDApIHsKLQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBGYWlsZWQgdG8gc2V0IFRUTCBmb3IgbXVsdGljYXN0IGdyb3VwIiwgYXJndlswXSk7Ci0JcGVycm9yKCIiKTsKLQlleGl0KDEpOwotICAgICAgfQotICAgIH0KLQotICAgIG1yZXEuaW1yX211bHRpYWRkci5zX2FkZHIgPSByY3ZyX2FkZHIuc19hZGRyOwotICAgIG1yZXEuaW1yX2ludGVyZmFjZS5zX2FkZHIgPSBodG9ubChJTkFERFJfQU5ZKTsKLSAgICByZXQgPSBzZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fSVAsIElQX0FERF9NRU1CRVJTSElQLCAmbXJlcSwgc2l6ZW9mKG1yZXEpKTsKLSAgICBpZiAocmV0IDwgMCkgewotICAgICAgZnByaW50ZihzdGRlcnIsICIlczogRmFpbGVkIHRvIGpvaW4gbXVsdGljYXN0IGdyb3VwIiwgYXJndlswXSk7Ci0gICAgICBwZXJyb3IoIiIpOwotICAgICAgZXhpdCgxKTsKLSAgICB9Ci0gIH0KLQotICAvKiByZXBvcnQgc2VjdXJpdHkgc2VydmljZXMgc2VsZWN0ZWQgb24gdGhlIGNvbW1hbmQgbGluZSAqLwotICBwcmludGYoInNlY3VyaXR5IHNlcnZpY2VzOiAiKTsKLSAgaWYgKHNlY19zZXJ2cyAmIHNlY19zZXJ2X2NvbmYpCi0gICAgcHJpbnRmKCJjb25maWRlbnRpYWxpdHkgIik7Ci0gIGlmIChzZWNfc2VydnMgJiBzZWNfc2Vydl9hdXRoKQotICAgIHByaW50ZigibWVzc2FnZSBhdXRoZW50aWNhdGlvbiIpOwotICBpZiAoc2VjX3NlcnZzID09IHNlY19zZXJ2X25vbmUpCi0gICAgcHJpbnRmKCJub25lIik7Ci0gIHByaW50ZigiXG4iKTsKLSAgCi0gIC8qIHNldCB1cCB0aGUgc3J0cCBwb2xpY3kgYW5kIG1hc3RlciBrZXkgKi8gICAgCi0gIGlmIChzZWNfc2VydnMpIHsKLSAgICAvKiAKLSAgICAgKiBjcmVhdGUgcG9saWN5IHN0cnVjdHVyZSwgdXNpbmcgdGhlIGRlZmF1bHQgbWVjaGFuaXNtcyBidXQgCi0gICAgICogd2l0aCBvbmx5IHRoZSBzZWN1cml0eSBzZXJ2aWNlcyByZXF1ZXN0ZWQgb24gdGhlIGNvbW1hbmQgbGluZSwKLSAgICAgKiB1c2luZyB0aGUgcmlnaHQgU1NSQyB2YWx1ZQotICAgICAqLwotICAgIGNyeXB0b19wb2xpY3lfc2V0X3J0cF9kZWZhdWx0KCZwb2xpY3kucnRwKTsKLSAgICBjcnlwdG9fcG9saWN5X3NldF9ydGNwX2RlZmF1bHQoJnBvbGljeS5ydGNwKTsKLSAgICBwb2xpY3kuc3NyYy50eXBlICA9IHNzcmNfc3BlY2lmaWM7Ci0gICAgcG9saWN5LnNzcmMudmFsdWUgPSBzc3JjOwotICAgIHBvbGljeS5rZXkgID0ga2V5OwotICAgIHBvbGljeS5uZXh0ID0gTlVMTDsKLSAgICBwb2xpY3kucnRwLnNlY19zZXJ2ID0gc2VjX3NlcnZzOwotICAgIHBvbGljeS5ydGNwLnNlY19zZXJ2ID0gc2VjX3NlcnZfbm9uZTsgIC8qIHdlIGRvbid0IGRvIFJUQ1AgYW55d2F5ICovCi0KLSAgICAvKgotICAgICAqIHJlYWQga2V5IGZyb20gaGV4YWRlY2ltYWwgb24gY29tbWFuZCBsaW5lIGludG8gYW4gb2N0ZXQgc3RyaW5nCi0gICAgICovCi0gICAgbGVuID0gaGV4X3N0cmluZ190b19vY3RldF9zdHJpbmcoa2V5LCBpbnB1dF9rZXksIE1BU1RFUl9LRVlfTEVOKjIpOwotICAgIAotICAgIC8qIGNoZWNrIHRoYXQgaGV4IHN0cmluZyBpcyB0aGUgcmlnaHQgbGVuZ3RoICovCi0gICAgaWYgKGxlbiA8IE1BU1RFUl9LRVlfTEVOKjIpIHsKLSAgICAgIGZwcmludGYoc3RkZXJyLCAKLQkgICAgICAiZXJyb3I6IHRvbyBmZXcgZGlnaXRzIGluIGtleS9zYWx0ICIKLQkgICAgICAiKHNob3VsZCBiZSAlZCBoZXhhZGVjaW1hbCBkaWdpdHMsIGZvdW5kICVkKVxuIiwKLQkgICAgICBNQVNURVJfS0VZX0xFTioyLCBsZW4pOwotICAgICAgZXhpdCgxKTsgICAgCi0gICAgfSAKLSAgICBpZiAoc3RybGVuKGlucHV0X2tleSkgPiBNQVNURVJfS0VZX0xFTioyKSB7Ci0gICAgICBmcHJpbnRmKHN0ZGVyciwgCi0JICAgICAgImVycm9yOiB0b28gbWFueSBkaWdpdHMgaW4ga2V5L3NhbHQgIgotCSAgICAgICIoc2hvdWxkIGJlICVkIGhleGFkZWNpbWFsIGRpZ2l0cywgZm91bmQgJXUpXG4iLAotCSAgICAgIE1BU1RFUl9LRVlfTEVOKjIsICh1bnNpZ25lZClzdHJsZW4oaW5wdXRfa2V5KSk7Ci0gICAgICBleGl0KDEpOyAgICAKLSAgICB9Ci0gICAgCi0gICAgcHJpbnRmKCJzZXQgbWFzdGVyIGtleS9zYWx0IHRvICVzLyIsIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKGtleSwgMTYpKTsKLSAgICBwcmludGYoIiVzXG4iLCBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhrZXkrMTYsIDE0KSk7Ci0gIAotICB9IGVsc2UgewotICAgIC8qCi0gICAgICogd2UncmUgbm90IHByb3ZpZGluZyBzZWN1cml0eSBzZXJ2aWNlcywgc28gc2V0IHRoZSBwb2xpY3kgdG8gdGhlCi0gICAgICogbnVsbCBwb2xpY3kKLSAgICAgKgotICAgICAqIE5vdGUgdGhhdCB0aGlzIHBvbGljeSBkb2VzIG5vdCBjb25mb3JtIHRvIHRoZSBTUlRQCi0gICAgICogc3BlY2lmaWNhdGlvbiwgc2luY2UgUlRDUCBhdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZC4gIEhvd2V2ZXIsCi0gICAgICogdGhlIGVmZmVjdCBvZiB0aGlzIHBvbGljeSBpcyB0byB0dXJuIG9mZiBTUlRQLCBzbyB0aGF0IHRoaXMKLSAgICAgKiBhcHBsaWNhdGlvbiBpcyBub3cgYSB2YW5pbGxhLWZsYXZvcmVkIFJUUCBhcHBsaWNhdGlvbi4KLSAgICAgKi8KLSAgICBwb2xpY3kuc3NyYy50eXBlICAgICAgICAgICA9IHNzcmNfc3BlY2lmaWM7Ci0gICAgcG9saWN5LnNzcmMudmFsdWUgICAgICAgICAgPSBzc3JjOwotICAgIHBvbGljeS5ydHAuY2lwaGVyX3R5cGUgICAgID0gTlVMTF9DSVBIRVI7Ci0gICAgcG9saWN5LnJ0cC5jaXBoZXJfa2V5X2xlbiAgPSAwOyAKLSAgICBwb2xpY3kucnRwLmF1dGhfdHlwZSAgICAgICA9IE5VTExfQVVUSDsKLSAgICBwb2xpY3kucnRwLmF1dGhfa2V5X2xlbiAgICA9IDA7Ci0gICAgcG9saWN5LnJ0cC5hdXRoX3RhZ19sZW4gICAgPSAwOwotICAgIHBvbGljeS5ydHAuc2VjX3NlcnYgICAgICAgID0gc2VjX3NlcnZfbm9uZTsgICAKLSAgICBwb2xpY3kucnRjcC5jaXBoZXJfdHlwZSAgICA9IE5VTExfQ0lQSEVSOwotICAgIHBvbGljeS5ydGNwLmNpcGhlcl9rZXlfbGVuID0gMDsgCi0gICAgcG9saWN5LnJ0Y3AuYXV0aF90eXBlICAgICAgPSBOVUxMX0FVVEg7Ci0gICAgcG9saWN5LnJ0Y3AuYXV0aF9rZXlfbGVuICAgPSAwOwotICAgIHBvbGljeS5ydGNwLmF1dGhfdGFnX2xlbiAgID0gMDsKLSAgICBwb2xpY3kucnRjcC5zZWNfc2VydiAgICAgICA9IHNlY19zZXJ2X25vbmU7ICAgCi0gICAgcG9saWN5Lm5leHQgICAgICAgICAgICAgICAgPSBOVUxMOwotICB9Ci0KLSAgaWYgKHByb2dfdHlwZSA9PSBzZW5kZXIpIHsKLQogI2lmIEJFVwotICAgIC8qIGJpbmQgdG8gbG9jYWwgc29ja2V0ICh0byBtYXRjaCBjcnlwdG8gcG9saWN5LCBpZiBuZWVkIGJlKSAqLwotICAgIG1lbXNldCgmbG9jYWwsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLSAgICBsb2NhbC5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfQU5ZKTsKLSAgICBsb2NhbC5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOwotICAgIHJldCA9IGJpbmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmbG9jYWwsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLSAgICBpZiAocmV0IDwgMCkgewotICAgICAgZnByaW50ZihzdGRlcnIsICIlczogYmluZCBmYWlsZWRcbiIsIGFyZ3ZbMF0pOwotICAgICAgcGVycm9yKCIiKTsKLSAgICAgIGV4aXQoMSk7IAotICAgIH0KKyAgICAgICAgLyogYmluZCB0byBsb2NhbCBzb2NrZXQgKHRvIG1hdGNoIGNyeXB0byBwb2xpY3ksIGlmIG5lZWQgYmUpICovCisgICAgICAgIG1lbXNldCgmbG9jYWwsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKyAgICAgICAgbG9jYWwuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7CisgICAgICAgIGxvY2FsLnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CisgICAgICAgIHJldCA9IGJpbmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZsb2NhbCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworICAgICAgICBpZiAocmV0IDwgMCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogYmluZCBmYWlsZWRcbiIsIGFyZ3ZbMF0pOworICAgICAgICAgICAgcGVycm9yKCIiKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KICNlbmRpZiAvKiBCRVcgKi8KIAotICAgIC8qIGluaXRpYWxpemUgc2VuZGVyJ3MgcnRwIGFuZCBzcnRwIGNvbnRleHRzICovCi0gICAgcnRwX3NlbmRlcl9pbml0KCZzbmQsIHNvY2ssIG5hbWUsIHNzcmMpOyAKLSAgICBzdGF0dXMgPSBzcnRwX2NyZWF0ZSgmc25kLnNydHBfY3R4LCAmcG9saWN5KTsKKyAgICAgICAgLyogaW5pdGlhbGl6ZSBzZW5kZXIncyBydHAgYW5kIHNydHAgY29udGV4dHMgKi8KKyAgICAgICAgc25kID0gcnRwX3NlbmRlcl9hbGxvYygpOworICAgICAgICBpZiAoc25kID09IE5VTEwpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3I6IG1hbGxvYygpIGZhaWxlZFxuIik7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisgICAgICAgIHJ0cF9zZW5kZXJfaW5pdChzbmQsIHNvY2ssIG5hbWUsIHNzcmMpOworICAgICAgICBzdGF0dXMgPSBydHBfc2VuZGVyX2luaXRfc3J0cChzbmQsICZwb2xpY3kpOworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yOiBzcnRwX2NyZWF0ZSgpIGZhaWxlZCB3aXRoIGNvZGUgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyk7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisKKyAgICAgICAgLyogb3BlbiBkaWN0aW9uYXJ5ICovCisgICAgICAgIGRpY3QgPSBmb3BlbihkaWN0ZmlsZSwgInIiKTsKKyAgICAgICAgaWYgKGRpY3QgPT0gTlVMTCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogY291bGRuJ3Qgb3BlbiBmaWxlICVzXG4iLCBhcmd2WzBdLCBkaWN0ZmlsZSk7CisgICAgICAgICAgICBpZiAoQUREUl9JU19NVUxUSUNBU1QocmN2cl9hZGRyLnNfYWRkcikpIHsKKyAgICAgICAgICAgICAgICBsZWF2ZV9ncm91cChzb2NrLCBtcmVxLCBhcmd2WzBdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKworICAgICAgICAvKiByZWFkIHdvcmRzIGZyb20gZGljdGlvbmFyeSwgdGhlbiBzZW5kIHRoZW0gb2ZmICovCisgICAgICAgIHdoaWxlICghaW50ZXJydXB0ZWQgJiYgZmdldHMod29yZCwgTUFYX1dPUkRfTEVOLCBkaWN0KSAhPSBOVUxMKSB7CisgICAgICAgICAgICBsZW4gPSBzdHJsZW4od29yZCkgKyAxOyAvKiBwbHVzIG9uZSBmb3IgbnVsbCAqLworCisgICAgICAgICAgICBpZiAobGVuID4gTUFYX1dPUkRfTEVOKQorICAgICAgICAgICAgICAgIHByaW50ZigiZXJyb3I6IHdvcmQgJXMgdG9vIGxhcmdlIHRvIHNlbmRcbiIsIHdvcmQpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcnRwX3NlbmR0byhzbmQsIHdvcmQsIGxlbik7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJzZW5kaW5nIHdvcmQ6ICVzIiwgd29yZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1c2xlZXAoVVNFQ19SQVRFKTsKKyAgICAgICAgfQorCisgICAgICAgIHJ0cF9zZW5kZXJfZGVpbml0X3NydHAoc25kKTsKKyAgICAgICAgcnRwX3NlbmRlcl9kZWFsbG9jKHNuZCk7CisKKyAgICAgICAgZmNsb3NlKGRpY3QpOworICAgIH0gZWxzZSB7IC8qIHByb2dfdHlwZSA9PSByZWNlaXZlciAqLworICAgICAgICBydHBfcmVjZWl2ZXJfdCByY3ZyOworCisgICAgICAgIGlmIChiaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmbmFtZSwgc2l6ZW9mKG5hbWUpKSA8IDApIHsKKyAgICAgICAgICAgIGNsb3NlKHNvY2spOworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogc29ja2V0IGJpbmQgZXJyb3JcbiIsIGFyZ3ZbMF0pOworICAgICAgICAgICAgcGVycm9yKE5VTEwpOworICAgICAgICAgICAgaWYgKEFERFJfSVNfTVVMVElDQVNUKHJjdnJfYWRkci5zX2FkZHIpKSB7CisgICAgICAgICAgICAgICAgbGVhdmVfZ3JvdXAoc29jaywgbXJlcSwgYXJndlswXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisKKyAgICAgICAgcmN2ciA9IHJ0cF9yZWNlaXZlcl9hbGxvYygpOworICAgICAgICBpZiAocmN2ciA9PSBOVUxMKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yOiBtYWxsb2MoKSBmYWlsZWRcbiIpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAgICBydHBfcmVjZWl2ZXJfaW5pdChyY3ZyLCBzb2NrLCBuYW1lLCBzc3JjKTsKKyAgICAgICAgc3RhdHVzID0gcnRwX3JlY2VpdmVyX2luaXRfc3J0cChyY3ZyLCAmcG9saWN5KTsKKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvcjogc3J0cF9jcmVhdGUoKSBmYWlsZWQgd2l0aCBjb2RlICVkXG4iLAorICAgICAgICAgICAgICAgICAgICBzdGF0dXMpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGdldCBuZXh0IHdvcmQgYW5kIGxvb3AgKi8KKyAgICAgICAgd2hpbGUgKCFpbnRlcnJ1cHRlZCkgeworICAgICAgICAgICAgbGVuID0gTUFYX1dPUkRfTEVOOworICAgICAgICAgICAgaWYgKHJ0cF9yZWN2ZnJvbShyY3ZyLCB3b3JkLCAmbGVuKSA+IC0xKQorICAgICAgICAgICAgICAgIHByaW50ZigiXHR3b3JkOiAlc1xuIiwgd29yZCk7CisgICAgICAgIH0KKworICAgICAgICBydHBfcmVjZWl2ZXJfZGVpbml0X3NydHAocmN2cik7CisgICAgICAgIHJ0cF9yZWNlaXZlcl9kZWFsbG9jKHJjdnIpOworICAgIH0KKworICAgIGlmIChBRERSX0lTX01VTFRJQ0FTVChyY3ZyX2FkZHIuc19hZGRyKSkgeworICAgICAgICBsZWF2ZV9ncm91cChzb2NrLCBtcmVxLCBhcmd2WzBdKTsKKyAgICB9CisKKyNpZmRlZiBSVFBXX1VTRV9XSU5TT0NLMgorICAgIHJldCA9IGNsb3Nlc29ja2V0KHNvY2spOworI2Vsc2UKKyAgICByZXQgPSBjbG9zZShzb2NrKTsKKyNlbmRpZgorICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEZhaWxlZCB0byBjbG9zZSBzb2NrZXQiLCBhcmd2WzBdKTsKKyAgICAgICAgcGVycm9yKCIiKTsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBzcnRwX3NodXRkb3duKCk7CiAgICAgaWYgKHN0YXR1cykgewotICAgICAgZnByaW50ZihzdGRlcnIsIAotCSAgICAgICJlcnJvcjogc3J0cF9jcmVhdGUoKSBmYWlsZWQgd2l0aCBjb2RlICVkXG4iLCAKLQkgICAgICBzdGF0dXMpOwotICAgICAgZXhpdCgxKTsKLSAgICB9Ci0gCi0gICAgLyogb3BlbiBkaWN0aW9uYXJ5ICovCi0gICAgZGljdCA9IGZvcGVuIChkaWN0ZmlsZSwgInIiKTsKLSAgICBpZiAoZGljdCA9PSBOVUxMKSB7Ci0gICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBjb3VsZG4ndCBvcGVuIGZpbGUgJXNcbiIsIGFyZ3ZbMF0sIGRpY3RmaWxlKTsKLSAgICAgIGlmIChBRERSX0lTX01VTFRJQ0FTVChyY3ZyX2FkZHIuc19hZGRyKSkgewotICAJbGVhdmVfZ3JvdXAoc29jaywgbXJlcSwgYXJndlswXSk7Ci0gICAgICB9Ci0gICAgICBleGl0KDEpOwotICAgIH0KLSAgICAgICAgICAKLSAgICAvKiByZWFkIHdvcmRzIGZyb20gZGljdGlvbmFyeSwgdGhlbiBzZW5kIHRoZW0gb2ZmICovCi0gICAgd2hpbGUgKGZnZXRzKHdvcmQsIE1BWF9XT1JEX0xFTiwgZGljdCkgIT0gTlVMTCkgeyAKLSAgICAgIGxlbiA9IHN0cmxlbih3b3JkKSArIDE7ICAvKiBwbHVzIG9uZSBmb3IgbnVsbCAqLwotICAgICAgCi0gICAgICBpZiAobGVuID4gTUFYX1dPUkRfTEVOKSAKLQlwcmludGYoImVycm9yOiB3b3JkICVzIHRvbyBsYXJnZSB0byBzZW5kXG4iLCB3b3JkKTsKLSAgICAgIGVsc2UgewotCXJ0cF9zZW5kdG8oJnNuZCwgd29yZCwgbGVuKTsKLSAgICAgICAgcHJpbnRmKCJzZW5kaW5nIHdvcmQ6ICVzIiwgd29yZCk7Ci0gICAgICB9Ci0gICAgICB1c2xlZXAoVVNFQ19SQVRFKTsKLSAgICB9Ci0gICAgCi0gIH0gZWxzZSAgeyAvKiBwcm9nX3R5cGUgPT0gcmVjZWl2ZXIgKi8KLSAgICBydHBfcmVjZWl2ZXJfdCByY3ZyOwotICAgICAgICAKLSAgICBpZiAoYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJm5hbWUsIHNpemVvZihuYW1lKSkgPCAwKSB7Ci0gICAgICBjbG9zZShzb2NrKTsKLSAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHNvY2tldCBiaW5kIGVycm9yXG4iLCBhcmd2WzBdKTsKLSAgICAgIHBlcnJvcihOVUxMKTsKLSAgICAgIGlmIChBRERSX0lTX01VTFRJQ0FTVChyY3ZyX2FkZHIuc19hZGRyKSkgewotICAgIAlsZWF2ZV9ncm91cChzb2NrLCBtcmVxLCBhcmd2WzBdKTsKLSAgICAgIH0KLSAgICAgIGV4aXQoMSk7CisgICAgICAgIHByaW50ZigiZXJyb3I6IHNydHAgc2h1dGRvd24gZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgc3RhdHVzKTsKKyAgICAgICAgZXhpdCgxKTsKICAgICB9CiAKLSAgICBydHBfcmVjZWl2ZXJfaW5pdCgmcmN2ciwgc29jaywgbmFtZSwgc3NyYyk7Ci0gICAgc3RhdHVzID0gc3J0cF9jcmVhdGUoJnJjdnIuc3J0cF9jdHgsICZwb2xpY3kpOwotICAgIGlmIChzdGF0dXMpIHsKLSAgICAgIGZwcmludGYoc3RkZXJyLCAKLQkgICAgICAiZXJyb3I6IHNydHBfY3JlYXRlKCkgZmFpbGVkIHdpdGggY29kZSAlZFxuIiwgCi0JICAgICAgc3RhdHVzKTsKLSAgICAgIGV4aXQoMSk7Ci0gICAgfQorI2lmZGVmIFJUUFdfVVNFX1dJTlNPQ0syCisgICAgV1NBQ2xlYW51cCgpOworI2VuZGlmCiAKLSAgICAvKiBnZXQgbmV4dCB3b3JkIGFuZCBsb29wICovCi0gICAgd2hpbGUgKDEpIHsKLSAgICAgIGxlbiA9IE1BWF9XT1JEX0xFTjsKLSAgICAgIGlmIChydHBfcmVjdmZyb20oJnJjdnIsIHdvcmQsICZsZW4pID4gLTEpCi0JcHJpbnRmKCJcdHdvcmQ6ICVzIiwgd29yZCk7Ci0gICAgICBlbHNlCi0JcHJpbnRmKCJlcnJvciByZWNlaXZpbmcgZGF0YVxuIik7Ci0gICAgfQotICAgICAgCi0gIH0gCi0KLSAgaWYgKEFERFJfSVNfTVVMVElDQVNUKHJjdnJfYWRkci5zX2FkZHIpKSB7Ci0gICAgbGVhdmVfZ3JvdXAoc29jaywgbXJlcSwgYXJndlswXSk7Ci0gIH0KLSAgcmV0dXJuIDA7CisgICAgcmV0dXJuIDA7CiB9CiAKLQotdm9pZAotdXNhZ2UoY2hhciAqc3RyaW5nKSB7Ci0KLSAgcHJpbnRmKCJ1c2FnZTogJXMgWy1kIDxkZWJ1Zz5dKiBbLWsgPGtleT4gWy1hXVstZV1dICIKLQkgIlstcyB8IC1yXSBkZXN0X2lwIGRlc3RfcG9ydFxuIgotCSAib3IgICAgICVzIC1sXG4iCi0JICJ3aGVyZSAgLWEgdXNlIG1lc3NhZ2UgYXV0aGVudGljYXRpb25cbiIKLQkgIiAgICAgICAtZSB1c2UgZW5jcnlwdGlvblxuIgotCSAiICAgICAgIC1rIDxrZXk+ICBzZXRzIHRoZSBzcnRwIG1hc3RlciBrZXlcbiIKLQkgIiAgICAgICAtcyBhY3QgYXMgcnRwIHNlbmRlclxuIgotCSAiICAgICAgIC1yIGFjdCBhcyBydHAgcmVjZWl2ZXJcbiIKLQkgIiAgICAgICAtbCBsaXN0IGRlYnVnIG1vZHVsZXNcbiIKLQkgIiAgICAgICAtZCA8ZGVidWc+IHR1cm4gb24gZGVidWdnaW5nIGZvciBtb2R1bGUgPGRlYnVnPlxuIiwKLQkgc3RyaW5nLCBzdHJpbmcpOwotICBleGl0KDEpOwotICAKK3ZvaWQgdXNhZ2UoY2hhciAqc3RyaW5nKQoreworICAgIHByaW50ZigidXNhZ2U6ICVzIFstZCA8ZGVidWc+XSogWy1rIDxrZXk+IFstYV1bLWVdXSAiCisgICAgICAgICAgICJbLXMgfCAtcl0gZGVzdF9pcCBkZXN0X3BvcnRcbiIKKyAgICAgICAgICAgIm9yICAgICAlcyAtbFxuIgorICAgICAgICAgICAid2hlcmUgIC1hIHVzZSBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uXG4iCisgICAgICAgICAgICIgICAgICAgLWUgPGtleSBzaXplPiB1c2UgZW5jcnlwdGlvbiAodXNlIDEyOCBvciAyNTYgZm9yIGtleSBzaXplKVxuIgorICAgICAgICAgICAiICAgICAgIC1nIFVzZSBBRVMtR0NNIG1vZGUgKG11c3QgYmUgdXNlZCB3aXRoIC1lKVxuIgorICAgICAgICAgICAiICAgICAgIC10IDx0YWcgc2l6ZT4gVGFnIHNpemUgdG8gdXNlIGluIEdDTSBtb2RlICh1c2UgOCBvciAxNilcbiIKKyAgICAgICAgICAgIiAgICAgICAtayA8a2V5PiAgc2V0cyB0aGUgc3J0cCBtYXN0ZXIga2V5IGdpdmVuIGluIGhleGFkZWNpbWFsXG4iCisgICAgICAgICAgICIgICAgICAgLWIgPGtleT4gIHNldHMgdGhlIHNydHAgbWFzdGVyIGtleSBnaXZlbiBpbiBiYXNlNjRcbiIKKyAgICAgICAgICAgIiAgICAgICAtcyBhY3QgYXMgcnRwIHNlbmRlclxuIgorICAgICAgICAgICAiICAgICAgIC1yIGFjdCBhcyBydHAgcmVjZWl2ZXJcbiIKKyAgICAgICAgICAgIiAgICAgICAtbCBsaXN0IGRlYnVnIG1vZHVsZXNcbiIKKyAgICAgICAgICAgIiAgICAgICAtZCA8ZGVidWc+IHR1cm4gb24gZGVidWdnaW5nIGZvciBtb2R1bGUgPGRlYnVnPlxuIgorICAgICAgICAgICAiICAgICAgIC13IDx3b3Jkc2ZpbGU+IHVzZSA8d29yZHNmaWxlPiBmb3IgaW5wdXQsIHJhdGhlciB0aGFuICVzXG4iLAorICAgICAgICAgICBzdHJpbmcsIHN0cmluZywgRElDVF9GSUxFKTsKKyAgICBleGl0KDEpOwogfQogCit2b2lkIGxlYXZlX2dyb3VwKGludCBzb2NrLCBzdHJ1Y3QgaXBfbXJlcSBtcmVxLCBjaGFyICpuYW1lKQoreworICAgIGludCByZXQ7CiAKLXZvaWQKLWxlYXZlX2dyb3VwKGludCBzb2NrLCBzdHJ1Y3QgaXBfbXJlcSBtcmVxLCBjaGFyICpuYW1lKSB7Ci0gIGludCByZXQ7Ci0KLSAgcmV0ID0gc2V0c29ja29wdChzb2NrLCBJUFBST1RPX0lQLCBJUF9EUk9QX01FTUJFUlNISVAsICZtcmVxLCBzaXplb2YobXJlcSkpOwotICBpZiAocmV0IDwgMCkgewotCWZwcmludGYoc3RkZXJyLCAiJXM6IEZhaWxlZCB0byBsZWF2ZSBtdWx0aWNhc3QgZ3JvdXAiLCBuYW1lKTsKLQlwZXJyb3IoIiIpOwotICB9CisgICAgcmV0ID0gc2V0c29ja29wdChzb2NrLCBJUFBST1RPX0lQLCBJUF9EUk9QX01FTUJFUlNISVAsICh2b2lkICopJm1yZXEsCisgICAgICAgICAgICAgICAgICAgICBzaXplb2YobXJlcSkpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEZhaWxlZCB0byBsZWF2ZSBtdWx0aWNhc3QgZ3JvdXAiLCBuYW1lKTsKKyAgICAgICAgcGVycm9yKCIiKTsKKyAgICB9CiB9CiAKK3ZvaWQgaGFuZGxlX3NpZ25hbChpbnQgc2lnbnVtKQoreworICAgIGludGVycnVwdGVkID0gMTsKKyAgICAvKiBSZXNldCBoYW5kbGVyIGV4cGxpY2l0bHksIGluIGNhc2Ugd2UgZG9uJ3QgaGF2ZSBzaWdhY3Rpb24oKSAoYW5kIHNpZ25hbCgpCisgICAgICAgaGFzIEJTRCBzZW1hbnRpY3MpLCBvciB3ZSBkb24ndCBoYXZlIFNBX1JFU0VUSEFORCAqLworICAgIHNpZ25hbChzaWdudW0sIFNJR19ERkwpOworfQorCitpbnQgc2V0dXBfc2lnbmFsX2hhbmRsZXIoY2hhciAqbmFtZSkKK3sKKyNpZiBIQVZFX1NJR0FDVElPTgorICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0OworICAgIG1lbXNldCgmYWN0LCAwLCBzaXplb2YoYWN0KSk7CisKKyAgICBhY3Quc2FfaGFuZGxlciA9IGhhbmRsZV9zaWduYWw7CisgICAgc2lnZW1wdHlzZXQoJmFjdC5zYV9tYXNrKTsKKyNpZiBkZWZpbmVkKFNBX1JFU0VUSEFORCkKKyAgICBhY3Quc2FfZmxhZ3MgPSBTQV9SRVNFVEhBTkQ7CisjZWxzZQorICAgIGFjdC5zYV9mbGFncyA9IDA7CisjZW5kaWYKKyAgICAvKiBOb3RlIHRoYXQgd2UncmUgbm90IHNldHRpbmcgU0FfUkVTVEFSVDsgd2Ugd2FudCByZWN2ZnJvbSB0byByZXR1cm4KKyAgICAgKiBFSU5UUiB3aGVuIHdlIHNpZ25hbCB0aGUgcmVjZWl2ZXIuICovCisKKyAgICBpZiAoc2lnYWN0aW9uKFNJR1RFUk0sICZhY3QsIE5VTEwpICE9IDApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZXJyb3Igc2V0dGluZyB1cCBzaWduYWwgaGFuZGxlciIsIG5hbWUpOworICAgICAgICBwZXJyb3IoIiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorI2Vsc2UKKyAgICBpZiAoc2lnbmFsKFNJR1RFUk0sIGhhbmRsZV9zaWduYWwpID09IFNJR19FUlIpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZXJyb3Igc2V0dGluZyB1cCBzaWduYWwgaGFuZGxlciIsIG5hbWUpOworICAgICAgICBwZXJyb3IoIiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0L3J0cHdfdGVzdC5zaCBiL3Rlc3QvcnRwd190ZXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE1OGEzOTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3J0cHdfdGVzdC5zaApAQCAtMCwwICsxLDE3NiBAQAorIyEvYmluL3NoCisjIAorIyB1c2FnZTogcnRwd190ZXN0IDxydHB3X2NvbW1hbmRzPgorIyAKKyMgdGVzdHMgdGhlIHJ0cHcgc2VuZGVyIGFuZCByZWNlaXZlciBmdW5jdGlvbnMKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDAxLTIwMTcsIENpc2NvIFN5c3RlbXMsIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgCisjICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIAorIyAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworIyAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorIyAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgCisjICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorIyAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMgCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyMgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyMgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorIyBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyMgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitjYXNlICQodW5hbWUgLXMpIGluCisgICAgKkNZR1dJTip8Kk1JTkdXKikKKyAgICAgICAgRVhFPSIuZXhlIgorICAgICAgICA7OworICAgICpMaW51eCopCisgICAgICAgIEVYRT0iIgorICAgICAgICBleHBvcnQgTERfTElCUkFSWV9QQVRIPSRDUllQVE9fTElCRElSCisgICAgICAgIDs7CisgICAgKkRhcndpbiopCisgICAgICAgIEVYRT0iIgorICAgICAgICBleHBvcnQgRFlMRF9MSUJSQVJZX1BBVEg9JENSWVBUT19MSUJESVIKKyAgICAgICAgOzsKK2VzYWMKKworUlRQVz0uL3J0cHckRVhFCitERVNUX1BPUlQ9OTk5OQorRFVSQVRJT049MworCitrZXk9S3k3Y1VEVDJHbkkwWEtXWWJYdjlBWW1xYmNMc3F6TDltdmROOXQvRworCitBUkdTPSItYiAka2V5IC1hIC1lIDEyOCIKKworIyBGaXJzdCwgd2UgcnVuICJraWxsYWxsIiB0byBnZXQgcmlkIG9mIGFsbCBleGlzdGluZyBydHB3IHByb2Nlc3Nlcy4KKyMgVGhpcyBzdGVwIGFsc28gZW5hYmxlcyB0aGlzIHNjcmlwdCB0byBjbGVhbiB1cCBhZnRlciBpdHNlbGY7IGlmIHRoaXMKKyMgc2NyaXB0IGlzIGludGVycnVwdGVkIGFmdGVyIHRoZSBydHB3IHByb2Nlc3NlcyBhcmUgc3RhcnRlZCBidXQgYmVmb3JlCisjIHRoZXkgYXJlIGtpbGxlZCwgdGhvc2UgcHJvY2Vzc2VzIHdpbGwgbGluZ2VyLiAgUmUtcnVubmluZyB0aGUgc2NyaXB0CisjIHdpbGwgZ2V0IHJpZCBvZiB0aGVtLgorCitraWxsYWxsIHJ0cHcgMj4vZGV2L251bGwKKworaWYgdGVzdCAteCAkUlRQVzsgdGhlbgorCitlY2hvICAkMCAiOiBzdGFydGluZyBydHB3IHJlY2VpdmVyIHByb2Nlc3MuLi4gIgorCiskUlRQVyAkKiAkQVJHUyAtciAwLjAuMC4wICRERVNUX1BPUlQgICYKKworcmVjZWl2ZXJfcGlkPSQhCisKK2VjaG8gJDAgIjogcmVjZWl2ZXIgUElEID0gJHJlY2VpdmVyX3BpZCIKKworc2xlZXAgMSAKKworIyB2ZXJpZnkgdGhhdCB0aGUgYmFja2dyb3VuZCBqb2IgaXMgcnVubmluZworcHMgLWUgfCBncmVwIC1xICRyZWNlaXZlcl9waWQKK3JldHZhbD0kPworZWNobyAkcmV0dmFsCitpZiBbICRyZXR2YWwgIT0gMCBdOyB0aGVuCisgICAgZWNobyAkMCAiOiBlcnJvciIKKyAgICBleGl0IDI1NAorZmkKKworZWNobyAgJDAgIjogc3RhcnRpbmcgcnRwdyBzZW5kZXIgcHJvY2Vzcy4uLiIKKworJFJUUFcgJCogJEFSR1MgLXMgMTI3LjAuMC4xICRERVNUX1BPUlQgICYKKworc2VuZGVyX3BpZD0kIQorCitlY2hvICQwICI6IHNlbmRlciBQSUQgPSAkc2VuZGVyX3BpZCIKKworIyB2ZXJpZnkgdGhhdCB0aGUgYmFja2dyb3VuZCBqb2IgaXMgcnVubmluZworcHMgLWUgfCBncmVwIC1xICRzZW5kZXJfcGlkCityZXR2YWw9JD8KK2VjaG8gJHJldHZhbAoraWYgWyAkcmV0dmFsICE9IDAgXTsgdGhlbgorICAgIGVjaG8gJDAgIjogZXJyb3IiCisgICAgZXhpdCAyNTUKK2ZpCisKK3NsZWVwICREVVJBVElPTgorCitraWxsICRyZWNlaXZlcl9waWQKK2tpbGwgJHNlbmRlcl9waWQKKword2FpdCAkcmVjZWl2ZXJfcGlkIDI+L2Rldi9udWxsCit3YWl0ICRzZW5kZXJfcGlkIDI+L2Rldi9udWxsCisKKwora2V5PTAzMzQ5MGJhOWU4Mjk5NGZjMjEwMTMzOTU3MzkwMzg5OTJiMmVkYzUwMzRmNjFhNzIzNDVjYTU5OGQ3YmZkMDE4OWFhNmRjMmVjYWIzMmZkOWFmNzRkZjZkZmM2CisKK0FSR1M9Ii1rICRrZXkgLWEgLWUgMjU2IgorCitlY2hvICAkMCAiOiBzdGFydGluZyBydHB3IHJlY2VpdmVyIHByb2Nlc3MuLi4gIgorCiskUlRQVyAkKiAkQVJHUyAtciAwLjAuMC4wICRERVNUX1BPUlQgICYKKworcmVjZWl2ZXJfcGlkPSQhCisKK2VjaG8gJDAgIjogcmVjZWl2ZXIgUElEID0gJHJlY2VpdmVyX3BpZCIKKworc2xlZXAgMSAKKworIyB2ZXJpZnkgdGhhdCB0aGUgYmFja2dyb3VuZCBqb2IgaXMgcnVubmluZworcHMgLWUgfCBncmVwIC1xICRyZWNlaXZlcl9waWQKK3JldHZhbD0kPworZWNobyAkcmV0dmFsCitpZiBbICRyZXR2YWwgIT0gMCBdOyB0aGVuCisgICAgZWNobyAkMCAiOiBlcnJvciIKKyAgICBleGl0IDI1NAorZmkKKworZWNobyAgJDAgIjogc3RhcnRpbmcgcnRwdyBzZW5kZXIgcHJvY2Vzcy4uLiIKKworJFJUUFcgJCogJEFSR1MgLXMgMTI3LjAuMC4xICRERVNUX1BPUlQgICYKKworc2VuZGVyX3BpZD0kIQorCitlY2hvICQwICI6IHNlbmRlciBQSUQgPSAkc2VuZGVyX3BpZCIKKworIyB2ZXJpZnkgdGhhdCB0aGUgYmFja2dyb3VuZCBqb2IgaXMgcnVubmluZworcHMgLWUgfCBncmVwIC1xICRzZW5kZXJfcGlkCityZXR2YWw9JD8KK2VjaG8gJHJldHZhbAoraWYgWyAkcmV0dmFsICE9IDAgXTsgdGhlbgorICAgIGVjaG8gJDAgIjogZXJyb3IiCisgICAgZXhpdCAyNTUKK2ZpCisKK3NsZWVwICREVVJBVElPTgorCitraWxsICRyZWNlaXZlcl9waWQKK2tpbGwgJHNlbmRlcl9waWQKKword2FpdCAkcmVjZWl2ZXJfcGlkIDI+L2Rldi9udWxsCit3YWl0ICRzZW5kZXJfcGlkIDI+L2Rldi9udWxsCisKK2VjaG8gJDAgIjogZG9uZSAodGVzdCBwYXNzZWQpIgorCitlbHNlIAorCitlY2hvICJlcnJvcjogY2FuJ3QgZmluZCBleGVjdXRhYmxlIiAkUlRQVworZXhpdCAxCisKK2ZpCisKKyMgRU9GCisKKwpkaWZmIC0tZ2l0IGEvdGVzdC9ydHB3X3Rlc3RfZ2NtLnNoIGIvdGVzdC9ydHB3X3Rlc3RfZ2NtLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY0NDI1NWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3J0cHdfdGVzdF9nY20uc2gKQEAgLTAsMCArMSwyNjAgQEAKKyMhL2Jpbi9zaAorIyAKKyMgdXNhZ2U6IHJ0cHdfdGVzdCA8cnRwd19jb21tYW5kcz4KKyMgCisjIHRlc3RzIHRoZSBydHB3IHNlbmRlciBhbmQgcmVjZWl2ZXIgZnVuY3Rpb25zCisjCisjIENvcHlyaWdodCAoYykgMjAwMS0yMDE3LCBDaXNjbyBTeXN0ZW1zLCBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIAorIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIAorIyAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAKKyMgICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyMgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyMgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIAorIyAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyMgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjIAorIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisjIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisjIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisjIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisjIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyMgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisjIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworY2FzZSAkKHVuYW1lIC1zKSBpbgorICAgICpDWUdXSU4qfCpNSU5HVyopCisgICAgICAgIEVYRT0iLmV4ZSIKKyAgICAgICAgOzsKKyAgICAqTGludXgqKQorICAgICAgICBFWEU9IiIKKyAgICAgICAgZXhwb3J0IExEX0xJQlJBUllfUEFUSD0kQ1JZUFRPX0xJQkRJUgorICAgICAgICA7OworICAgICpEYXJ3aW4qKQorICAgICAgICBFWEU9IiIKKyAgICAgICAgZXhwb3J0IERZTERfTElCUkFSWV9QQVRIPSRDUllQVE9fTElCRElSCisgICAgICAgIDs7Citlc2FjCisKK1JUUFc9Li9ydHB3JEVYRQorREVTVF9QT1JUPTk5OTkKK0RVUkFUSU9OPTMKKworIyBGaXJzdCwgd2UgcnVuICJraWxsYWxsIiB0byBnZXQgcmlkIG9mIGFsbCBleGlzdGluZyBydHB3IHByb2Nlc3Nlcy4KKyMgVGhpcyBzdGVwIGFsc28gZW5hYmxlcyB0aGlzIHNjcmlwdCB0byBjbGVhbiB1cCBhZnRlciBpdHNlbGY7IGlmIHRoaXMKKyMgc2NyaXB0IGlzIGludGVycnVwdGVkIGFmdGVyIHRoZSBydHB3IHByb2Nlc3NlcyBhcmUgc3RhcnRlZCBidXQgYmVmb3JlCisjIHRoZXkgYXJlIGtpbGxlZCwgdGhvc2UgcHJvY2Vzc2VzIHdpbGwgbGluZ2VyLiAgUmUtcnVubmluZyB0aGUgc2NyaXB0CisjIHdpbGwgZ2V0IHJpZCBvZiB0aGVtLgorCitraWxsYWxsIHJ0cHcgMj4vZGV2L251bGwKKworaWYgdGVzdCAteCAkUlRQVzsgdGhlbgorCitHQ01BUkdTMTI4PSItayAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NSAtZyAtZSAxMjgiCitlY2hvICAkMCAiOiBzdGFydGluZyBHQ00gbW9kZSAxMjgtYml0IHJ0cHcgcmVjZWl2ZXIgcHJvY2Vzcy4uLiAiCisKK2V4ZWMgJFJUUFcgJCogJEdDTUFSR1MxMjggLXIgMTI3LjAuMC4xICRERVNUX1BPUlQgJgorCityZWNlaXZlcl9waWQ9JCEKKworZWNobyAkMCAiOiByZWNlaXZlciBQSUQgPSAkcmVjZWl2ZXJfcGlkIgorCitzbGVlcCAxIAorCisjIHZlcmlmeSB0aGF0IHRoZSBiYWNrZ3JvdW5kIGpvYiBpcyBydW5uaW5nCitwcyAtZSB8IGdyZXAgLXEgJHJlY2VpdmVyX3BpZAorcmV0dmFsPSQ/CitlY2hvICRyZXR2YWwKK2lmIFsgJHJldHZhbCAhPSAwIF07IHRoZW4KKyAgICBlY2hvICQwICI6IGVycm9yIgorICAgIGV4aXQgMjU0CitmaQorCitlY2hvICAkMCAiOiBzdGFydGluZyBHQ00gMTI4LWJpdCBydHB3IHNlbmRlciBwcm9jZXNzLi4uIgorCitleGVjICRSVFBXICQqICRHQ01BUkdTMTI4IC1zIDEyNy4wLjAuMSAkREVTVF9QT1JUICAmCisKK3NlbmRlcl9waWQ9JCEKKworZWNobyAkMCAiOiBzZW5kZXIgUElEID0gJHNlbmRlcl9waWQiCisKKyMgdmVyaWZ5IHRoYXQgdGhlIGJhY2tncm91bmQgam9iIGlzIHJ1bm5pbmcKK3BzIC1lIHwgZ3JlcCAtcSAkc2VuZGVyX3BpZAorcmV0dmFsPSQ/CitlY2hvICRyZXR2YWwKK2lmIFsgJHJldHZhbCAhPSAwIF07IHRoZW4KKyAgICBlY2hvICQwICI6IGVycm9yIgorICAgIGV4aXQgMjU1CitmaQorCitzbGVlcCAkRFVSQVRJT04KKwora2lsbCAkcmVjZWl2ZXJfcGlkCitraWxsICRzZW5kZXJfcGlkCisKK3dhaXQgJHJlY2VpdmVyX3BpZCAyPi9kZXYvbnVsbAord2FpdCAkc2VuZGVyX3BpZCAyPi9kZXYvbnVsbAorCitHQ01BUkdTMTI4PSItayAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NSAtZyAtdCAxNiAtZSAxMjgiCitlY2hvICAkMCAiOiBzdGFydGluZyBHQ00gbW9kZSAxMjgtYml0ICgxNiBieXRlIHRhZykgcnRwdyByZWNlaXZlciBwcm9jZXNzLi4uICIKKworZXhlYyAkUlRQVyAkKiAkR0NNQVJHUzEyOCAtciAxMjcuMC4wLjEgJERFU1RfUE9SVCAmCisKK3JlY2VpdmVyX3BpZD0kIQorCitlY2hvICQwICI6IHJlY2VpdmVyIFBJRCA9ICRyZWNlaXZlcl9waWQiCisKK3NsZWVwIDEgCisKKyMgdmVyaWZ5IHRoYXQgdGhlIGJhY2tncm91bmQgam9iIGlzIHJ1bm5pbmcKK3BzIC1lIHwgZ3JlcCAtcSAkcmVjZWl2ZXJfcGlkCityZXR2YWw9JD8KK2VjaG8gJHJldHZhbAoraWYgWyAkcmV0dmFsICE9IDAgXTsgdGhlbgorICAgIGVjaG8gJDAgIjogZXJyb3IiCisgICAgZXhpdCAyNTQKK2ZpCisKK2VjaG8gICQwICI6IHN0YXJ0aW5nIEdDTSAxMjgtYml0ICgxNiBieXRlIHRhZykgcnRwdyBzZW5kZXIgcHJvY2Vzcy4uLiIKKworZXhlYyAkUlRQVyAkKiAkR0NNQVJHUzEyOCAtcyAxMjcuMC4wLjEgJERFU1RfUE9SVCAgJgorCitzZW5kZXJfcGlkPSQhCisKK2VjaG8gJDAgIjogc2VuZGVyIFBJRCA9ICRzZW5kZXJfcGlkIgorCisjIHZlcmlmeSB0aGF0IHRoZSBiYWNrZ3JvdW5kIGpvYiBpcyBydW5uaW5nCitwcyAtZSB8IGdyZXAgLXEgJHNlbmRlcl9waWQKK3JldHZhbD0kPworZWNobyAkcmV0dmFsCitpZiBbICRyZXR2YWwgIT0gMCBdOyB0aGVuCisgICAgZWNobyAkMCAiOiBlcnJvciIKKyAgICBleGl0IDI1NQorZmkKKworc2xlZXAgJERVUkFUSU9OCisKK2tpbGwgJHJlY2VpdmVyX3BpZAora2lsbCAkc2VuZGVyX3BpZAorCit3YWl0ICRyZWNlaXZlcl9waWQgMj4vZGV2L251bGwKK3dhaXQgJHNlbmRlcl9waWQgMj4vZGV2L251bGwKKworCitHQ01BUkdTMjU2PSItayAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3IC1nIC1lIDI1NiIKK2VjaG8gICQwICI6IHN0YXJ0aW5nIEdDTSBtb2RlIDI1Ni1iaXQgcnRwdyByZWNlaXZlciBwcm9jZXNzLi4uICIKKworZXhlYyAkUlRQVyAkKiAkR0NNQVJHUzI1NiAtciAxMjcuMC4wLjEgJERFU1RfUE9SVCAmCisKK3JlY2VpdmVyX3BpZD0kIQorCitlY2hvICQwICI6IHJlY2VpdmVyIFBJRCA9ICRyZWNlaXZlcl9waWQiCisKK3NsZWVwIDEgCisKKyMgdmVyaWZ5IHRoYXQgdGhlIGJhY2tncm91bmQgam9iIGlzIHJ1bm5pbmcKK3BzIC1lIHwgZ3JlcCAtcSAkcmVjZWl2ZXJfcGlkCityZXR2YWw9JD8KK2VjaG8gJHJldHZhbAoraWYgWyAkcmV0dmFsICE9IDAgXTsgdGhlbgorICAgIGVjaG8gJDAgIjogZXJyb3IiCisgICAgZXhpdCAyNTQKK2ZpCisKK2VjaG8gICQwICI6IHN0YXJ0aW5nIEdDTSAyNTYtYml0IHJ0cHcgc2VuZGVyIHByb2Nlc3MuLi4iCisKK2V4ZWMgJFJUUFcgJCogJEdDTUFSR1MyNTYgLXMgMTI3LjAuMC4xICRERVNUX1BPUlQgICYKKworc2VuZGVyX3BpZD0kIQorCitlY2hvICQwICI6IHNlbmRlciBQSUQgPSAkc2VuZGVyX3BpZCIKKworIyB2ZXJpZnkgdGhhdCB0aGUgYmFja2dyb3VuZCBqb2IgaXMgcnVubmluZworcHMgLWUgfCBncmVwIC1xICRzZW5kZXJfcGlkCityZXR2YWw9JD8KK2VjaG8gJHJldHZhbAoraWYgWyAkcmV0dmFsICE9IDAgXTsgdGhlbgorICAgIGVjaG8gJDAgIjogZXJyb3IiCisgICAgZXhpdCAyNTUKK2ZpCisKK3NsZWVwICREVVJBVElPTgorCitraWxsICRyZWNlaXZlcl9waWQKK2tpbGwgJHNlbmRlcl9waWQKKword2FpdCAkcmVjZWl2ZXJfcGlkIDI+L2Rldi9udWxsCit3YWl0ICRzZW5kZXJfcGlkIDI+L2Rldi9udWxsCisKK0dDTUFSR1MyNTY9Ii1rIGExMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NjcgLWcgLXQgMTYgLWUgMjU2IgorZWNobyAgJDAgIjogc3RhcnRpbmcgR0NNIG1vZGUgMjU2LWJpdCAoMTYgYnl0ZSB0YWcpIHJ0cHcgcmVjZWl2ZXIgcHJvY2Vzcy4uLiAiCisKK2V4ZWMgJFJUUFcgJCogJEdDTUFSR1MyNTYgLXIgMTI3LjAuMC4xICRERVNUX1BPUlQgJgorCityZWNlaXZlcl9waWQ9JCEKKworZWNobyAkMCAiOiByZWNlaXZlciBQSUQgPSAkcmVjZWl2ZXJfcGlkIgorCitzbGVlcCAxIAorCisjIHZlcmlmeSB0aGF0IHRoZSBiYWNrZ3JvdW5kIGpvYiBpcyBydW5uaW5nCitwcyAtZSB8IGdyZXAgLXEgJHJlY2VpdmVyX3BpZAorcmV0dmFsPSQ/CitlY2hvICRyZXR2YWwKK2lmIFsgJHJldHZhbCAhPSAwIF07IHRoZW4KKyAgICBlY2hvICQwICI6IGVycm9yIgorICAgIGV4aXQgMjU0CitmaQorCitlY2hvICAkMCAiOiBzdGFydGluZyBHQ00gMjU2LWJpdCAoMTYgYnl0ZSB0YWcpIHJ0cHcgc2VuZGVyIHByb2Nlc3MuLi4iCisKK2V4ZWMgJFJUUFcgJCogJEdDTUFSR1MyNTYgLXMgMTI3LjAuMC4xICRERVNUX1BPUlQgICYKKworc2VuZGVyX3BpZD0kIQorCitlY2hvICQwICI6IHNlbmRlciBQSUQgPSAkc2VuZGVyX3BpZCIKKworIyB2ZXJpZnkgdGhhdCB0aGUgYmFja2dyb3VuZCBqb2IgaXMgcnVubmluZworcHMgLWUgfCBncmVwIC1xICRzZW5kZXJfcGlkCityZXR2YWw9JD8KK2VjaG8gJHJldHZhbAoraWYgWyAkcmV0dmFsICE9IDAgXTsgdGhlbgorICAgIGVjaG8gJDAgIjogZXJyb3IiCisgICAgZXhpdCAyNTUKK2ZpCisKK3NsZWVwICREVVJBVElPTgorCitraWxsICRyZWNlaXZlcl9waWQKK2tpbGwgJHNlbmRlcl9waWQKKword2FpdCAkcmVjZWl2ZXJfcGlkIDI+L2Rldi9udWxsCit3YWl0ICRzZW5kZXJfcGlkIDI+L2Rldi9udWxsCisKK2VjaG8gJDAgIjogZG9uZSAodGVzdCBwYXNzZWQpIgorCitlbHNlIAorCitlY2hvICJlcnJvcjogY2FuJ3QgZmluZCBleGVjdXRhYmxlIiAkUlRQVworZXhpdCAxCisKK2ZpCisKKyMgRU9GCisKKwpkaWZmIC0tZ2l0IGEvdGVzdC9zaGExX2RyaXZlci5jIGIvdGVzdC9zaGExX2RyaXZlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWJmYThiLi4wMDAwMDAwCi0tLSBhL3Rlc3Qvc2hhMV9kcml2ZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qCi0gKiBzaGExX2RyaXZlci5jCi0gKgotICogYSB0ZXN0IGRyaXZlciBmb3IgU0hBLTEKLSAqCi0gKiBEYXZpZCBBLiBNY0dyZXcKLSAqIENpc2NvIFN5c3RlbXMsIEluYy4KLSAqLwotCi0vKgotICoJCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSwgQ2lzY28gU3lzdGVtcywgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAKLSAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogCi0gKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgInNoYTEuaCIKLQotaW50Ci1obWFjX3NoYTFfdGVzdCgpOwotCi1pbnQKLW1haW4gKCkgewotICB1aW50MzJfdCBoYXNoX3ZhbHVlWzVdOwotICBvY3RldF90IG1zZ19yZWZbM10gPSB7IDB4NjEsIDB4NjIsIDB4NjMgfTsKLSAgb2N0ZXRfdCBoYXNoX3JlZlsyMF0gPSB7Ci0gICAgMHhhOSwgMHg5OSwgMHgzZSwgMHgzNiwgMHg0NywgMHgwNiwgMHg4MSwgMHg2YSwKLSAgICAweGJhLCAweDNlLCAweDI1LCAweDcxLCAweDc4LCAweDUwLCAweGMyLCAweDZjLCAKLSAgICAweDljLCAweGQwLCAweGQ4LCAweDlkIAotICB9OwotICBvY3RldF90IG1zZ19yZWYyWzU2XSA9IHsKLSAgICAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAKLSAgICAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY0LCAweDY1LCAweDY2LCAweDY3LAotICAgIDB4NjUsIDB4NjYsIDB4NjcsIDB4NjgsIDB4NjYsIDB4NjcsIDB4NjgsIDB4NjksIAotICAgIDB4NjcsIDB4NjgsIDB4NjksIDB4NmEsIDB4NjgsIDB4NjksIDB4NmEsIDB4NmIsCi0gICAgMHg2OSwgMHg2YSwgMHg2YiwgMHg2YywgMHg2YSwgMHg2YiwgMHg2YywgMHg2ZCwKLSAgICAweDZiLCAweDZjLCAweDZkLCAweDZlLCAweDZjLCAweDZkLCAweDZlLCAweDZmLAotICAgIDB4NmQsIDB4NmUsIDB4NmYsIDB4NzAsIDB4NmUsIDB4NmYsIDB4NzAsIDB4NzEKLSAgfTsKLSAgb2N0ZXRfdCBoYXNoX3JlZjJbMjBdID0gewotICAgIDB4ODQsIDB4OTgsIDB4M2UsIDB4NDQsIDB4MWMsIDB4M2IsIDB4ZDIsIDB4NmUsIAotICAgIDB4YmEsIDB4YWUsIDB4NGEsIDB4YTEsIDB4ZjksIDB4NTEsIDB4MjksIDB4ZTUsCi0gICAgMHhlNSwgMHg0NiwgMHg3MCwgMHhmMQotICB9OwotICBzaGExX2N0eF90IGN0eDsKLQotICBwcmludGYoInNoYTEgdGVzdCBkcml2ZXJcbiIKLSAgICAgICAgICJEYXZpZCBBLiBNY0dyZXdcbiIKLSAgICAgICAgICJDaXNjbyBTeXN0ZW1zLCBJbmMuXG4iKTsKLQotICBzaGExX2luaXQoJmN0eCk7Ci0gIHNoYTFfdXBkYXRlKCZjdHgsIG1zZ19yZWYsIDMpOwotICBzaGExX2ZpbmFsKCZjdHgsIGhhc2hfdmFsdWUpOwotICBwcmludGYoInJlZmVyZW5jZSB2YWx1ZTogJXNcbiIsIAotCSBvY3RldF9zdHJpbmdfaGV4X3N0cmluZygob2N0ZXRfdCAqKWhhc2hfcmVmLCAyMCkpOwotICBwcmludGYoImNvbXB1dGVkIHZhbHVlOiAgJXNcbiIsIAotCSBvY3RldF9zdHJpbmdfaGV4X3N0cmluZygob2N0ZXRfdCAqKWhhc2hfdmFsdWUsIDIwKSk7Ci0KLSAgc2hhMV9pbml0KCZjdHgpOwotICBzaGExX3VwZGF0ZSgmY3R4LCBtc2dfcmVmMiwgNTYpOwotICBzaGExX2ZpbmFsKCZjdHgsIGhhc2hfdmFsdWUpOwotICBwcmludGYoInJlZmVyZW5jZSB2YWx1ZTogJXNcbiIsIAotCSBvY3RldF9zdHJpbmdfaGV4X3N0cmluZygob2N0ZXRfdCAqKWhhc2hfcmVmMiwgMjApKTsKLSAgcHJpbnRmKCJjb21wdXRlZCB2YWx1ZTogICVzXG4iLCAKLQkgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoKG9jdGV0X3QgKiloYXNoX3ZhbHVlLCAyMCkpOwotCi0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvdGVzdC9zcnRwX2RyaXZlci5jIGIvdGVzdC9zcnRwX2RyaXZlci5jCmluZGV4IGE4YTE0ZTcuLjEzMzU1NDAgMTAwNjQ0Ci0tLSBhL3Rlc3Qvc3J0cF9kcml2ZXIuYworKysgYi90ZXN0L3NydHBfZHJpdmVyLmMKQEAgLTEsMzIgKzEsMzIgQEAKIC8qCiAgKiBzcnRwX2RyaXZlci5jCi0gKiAKKyAqCiAgKiBhIHRlc3QgZHJpdmVyIGZvciBsaWJTUlRQCiAgKgogICogRGF2aWQgQS4gTWNHcmV3CiAgKiBDaXNjbyBTeXN0ZW1zLCBJbmMuCiAgKi8KIC8qCi0gKgkKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA1LCBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMTcsIENpc2NvIFN5c3RlbXMsIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKLSAqIAorICoKICAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogCisgKgogICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCiAgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCiAgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAogICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKKyAqCiAgKiAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAgKiAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAorICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwpAQCAtNDIsNjUgKzQyLDE0MiBAQAogICoKICAqLwogCi0KICNpbmNsdWRlIDxzdHJpbmcuaD4gICAvKiBmb3IgbWVtY3B5KCkgICAgICAgICAgKi8KICNpbmNsdWRlIDx0aW1lLmg+ICAgICAvKiBmb3IgY2xvY2soKSAgICAgICAgICAgKi8KICNpbmNsdWRlIDxzdGRsaWIuaD4gICAvKiBmb3IgbWFsbG9jKCksIGZyZWUoKSAgKi8KICNpbmNsdWRlIDxzdGRpby5oPiAgICAvKiBmb3IgcHJpbnQoKSwgZmZsdXNoKCkgKi8KLSNpbmNsdWRlIDx1bmlzdGQuaD4gICAvKiBmb3IgZ2V0b3B0KCkgICAgICAgICAgKi8KKyNpbmNsdWRlICJnZXRvcHRfcy5oIiAvKiBmb3IgbG9jYWwgZ2V0b3B0KCkgICAgKi8KIAotI2luY2x1ZGUgInNydHAuaCIKKyNpbmNsdWRlICJzcnRwX3ByaXYuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbGlmIGRlZmluZWQgSEFWRV9XSU5TT0NLMl9ICisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbmRpZgogCiAjZGVmaW5lIFBSSU5UX1JFRkVSRU5DRV9QQUNLRVQgMQogCi1lcnJfc3RhdHVzX3QKLXNydHBfdmFsaWRhdGUoKTsKK3NydHBfZXJyX3N0YXR1c190IHNydHBfdmFsaWRhdGUodm9pZCk7CiAKLWVycl9zdGF0dXNfdAotc3J0cF9jcmVhdGVfYmlnX3BvbGljeShzcnRwX3BvbGljeV90ICoqbGlzdCk7CisjaWZkZWYgR0NNCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX3ZhbGlkYXRlX2djbSh2b2lkKTsKKyNlbmRpZgogCi1lcnJfc3RhdHVzX3QKLXNydHBfdGVzdF9yZW1vdmVfc3RyZWFtKCk7CitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX3ZhbGlkYXRlX2VuY3J5cHRlZF9leHRlbnNpb25zX2hlYWRlcnModm9pZCk7CiAKLWRvdWJsZQotc3J0cF9iaXRzX3Blcl9zZWNvbmQoaW50IG1zZ19sZW5fb2N0ZXRzLCBjb25zdCBzcnRwX3BvbGljeV90ICpwb2xpY3kpOworI2lmZGVmIEdDTQorc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF92YWxpZGF0ZV9lbmNyeXB0ZWRfZXh0ZW5zaW9uc19oZWFkZXJzX2djbSh2b2lkKTsKKyNlbmRpZgogCi1kb3VibGUKLXNydHBfcmVqZWN0aW9uc19wZXJfc2Vjb25kKGludCBtc2dfbGVuX29jdGV0cywgY29uc3Qgc3J0cF9wb2xpY3lfdCAqcG9saWN5KTsKK3NydHBfZXJyX3N0YXR1c190IHNydHBfdmFsaWRhdGVfYWVzXzI1Nih2b2lkKTsKIAotdm9pZAotc3J0cF9kb190aW1pbmcoY29uc3Qgc3J0cF9wb2xpY3lfdCAqcG9saWN5KTsKK3NydHBfZXJyX3N0YXR1c190IHNydHBfY3JlYXRlX2JpZ19wb2xpY3koc3J0cF9wb2xpY3lfdCAqKmxpc3QpOwogCi12b2lkCi1zcnRwX2RvX3JlamVjdGlvbl90aW1pbmcoY29uc3Qgc3J0cF9wb2xpY3lfdCAqcG9saWN5KTsKK3NydHBfZXJyX3N0YXR1c190IHNydHBfZGVhbGxvY19iaWdfcG9saWN5KHNydHBfcG9saWN5X3QgKmxpc3QpOwogCi1lcnJfc3RhdHVzX3QKLXNydHBfdGVzdCgpOworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF90ZXN0X2VtcHR5X3BheWxvYWQodm9pZCk7CiAKLWVycl9zdGF0dXNfdAotc3J0cF9zZXNzaW9uX3ByaW50X3BvbGljeShzcnRwX3Qgc3J0cCk7CisjaWZkZWYgR0NNCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX3Rlc3RfZW1wdHlfcGF5bG9hZF9nY20odm9pZCk7CisjZW5kaWYKIAotZXJyX3N0YXR1c190Ci1zcnRwX3ByaW50X3BvbGljeShjb25zdCBzcnRwX3BvbGljeV90ICpwb2xpY3kpOyAKK3NydHBfZXJyX3N0YXR1c190IHNydHBfdGVzdF9yZW1vdmVfc3RyZWFtKHZvaWQpOwogCi1jaGFyICoKLXNydHBfcGFja2V0X3RvX3N0cmluZyhzcnRwX2hkcl90ICpoZHIsIGludCBwYWNrZXRfbGVuKTsKK3NydHBfZXJyX3N0YXR1c190IHNydHBfdGVzdF91cGRhdGUodm9pZCk7CiAKLWRvdWJsZQotbWlwc19lc3RpbWF0ZShpbnQgbnVtX3RyaWFscywgaW50ICppZ25vcmUpOworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF90ZXN0X3Byb3RlY3RfdHJhaWxlcl9sZW5ndGgodm9pZCk7CiAKLWV4dGVybiBvY3RldF90IHRlc3Rfa2V5WzMwXTsKK3NydHBfZXJyX3N0YXR1c190IHNydHBfdGVzdF9wcm90ZWN0X3J0Y3BfdHJhaWxlcl9sZW5ndGgodm9pZCk7CiAKLXZvaWQKLXVzYWdlKGNoYXIgKnByb2dfbmFtZSkgewotICBwcmludGYoInVzYWdlOiAlcyBbIC10IF1bIC1jIF1bIC12IF1bLWQgPGRlYnVnX21vZHVsZT4gXSogWyAtbCBdXG4iCi0gICAgICAgICAiICAtdCAgICAgICAgIHJ1biB0aW1pbmcgdGVzdFxuIgotCSAiICAtciAgICAgICAgIHJ1biByZWplY3Rpb24gdGltaW5nIHRlc3RcbiIKLSAgICAgICAgICIgIC1jICAgICAgICAgcnVuIGNvZGVjIHRpbWluZyB0ZXN0XG4iCi0gICAgICAgICAiICAtdiAgICAgICAgIHJ1biB2YWxpZGF0aW9uIHRlc3RzXG4iCi0gICAgICAgICAiICAtZCA8bW9kPiAgIHR1cm4gb24gZGVidWdnaW5nIG1vZHVsZSA8bW9kPlxuIgotICAgICAgICAgIiAgLWwgICAgICAgICBsaXN0IGRlYnVnZ2luZyBtb2R1bGVzXG4iLCBwcm9nX25hbWUpOwotICBleGl0KDEpOworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF90ZXN0X2dldF9yb2Modm9pZCk7CisKK3NydHBfZXJyX3N0YXR1c190IHNydHBfdGVzdF9zZXRfcmVjZWl2ZXJfcm9jKHZvaWQpOworCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX3Rlc3Rfc2V0X3NlbmRlcl9yb2Modm9pZCk7CisKK2RvdWJsZSBzcnRwX2JpdHNfcGVyX3NlY29uZChpbnQgbXNnX2xlbl9vY3RldHMsIGNvbnN0IHNydHBfcG9saWN5X3QgKnBvbGljeSk7CisKK2RvdWJsZSBzcnRwX3JlamVjdGlvbnNfcGVyX3NlY29uZChpbnQgbXNnX2xlbl9vY3RldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3J0cF9wb2xpY3lfdCAqcG9saWN5KTsKKwordm9pZCBzcnRwX2RvX3RpbWluZyhjb25zdCBzcnRwX3BvbGljeV90ICpwb2xpY3kpOworCit2b2lkIHNydHBfZG9fcmVqZWN0aW9uX3RpbWluZyhjb25zdCBzcnRwX3BvbGljeV90ICpwb2xpY3kpOworCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX3Rlc3QoY29uc3Qgc3J0cF9wb2xpY3lfdCAqcG9saWN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHRlbnNpb25faGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBta2lfaW5kZXgpOworCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRjcF90ZXN0KGNvbnN0IHNydHBfcG9saWN5X3QgKnBvbGljeSwgaW50IG1raV9pbmRleCk7CisKK3NydHBfZXJyX3N0YXR1c190IHNydHBfc2Vzc2lvbl9wcmludF9wb2xpY3koc3J0cF90IHNydHApOworCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX3ByaW50X3BvbGljeShjb25zdCBzcnRwX3BvbGljeV90ICpwb2xpY3kpOworCitjaGFyICpzcnRwX3BhY2tldF90b19zdHJpbmcoc3J0cF9oZHJfdCAqaGRyLCBpbnQgcGFja2V0X2xlbik7CisKK2RvdWJsZSBtaXBzX2VzdGltYXRlKGludCBudW1fdHJpYWxzLCBpbnQgKmlnbm9yZSk7CisKKyNkZWZpbmUgVEVTVF9NS0lfSURfU0laRSA0CisKK2V4dGVybiB1aW50OF90IHRlc3Rfa2V5WzQ2XTsKK2V4dGVybiB1aW50OF90IHRlc3Rfa2V5XzJbNDZdOworZXh0ZXJuIHVpbnQ4X3QgdGVzdF9ta2lfaWRbVEVTVF9NS0lfSURfU0laRV07CitleHRlcm4gdWludDhfdCB0ZXN0X21raV9pZF8yW1RFU1RfTUtJX0lEX1NJWkVdOworCisvLyBjbGFuZy1mb3JtYXQgb2ZmCitzcnRwX21hc3Rlcl9rZXlfdCBtYXN0ZXJfa2V5XzEgPSB7CisgICAgdGVzdF9rZXksCisgICAgdGVzdF9ta2lfaWQsCisgICAgVEVTVF9NS0lfSURfU0laRQorfTsKKworc3J0cF9tYXN0ZXJfa2V5X3QgbWFzdGVyX2tleV8yID0geworICAgIHRlc3Rfa2V5XzIsCisgICAgdGVzdF9ta2lfaWRfMiwKKyAgICBURVNUX01LSV9JRF9TSVpFCit9OworCitzcnRwX21hc3Rlcl9rZXlfdCAqdGVzdF9rZXlzWzJdID0geworICAgICZtYXN0ZXJfa2V5XzEsCisgICAgJm1hc3Rlcl9rZXlfMgorfTsKKy8vIGNsYW5nLWZvcm1hdCBvbgorCit2b2lkIHVzYWdlKGNoYXIgKnByb2dfbmFtZSkKK3sKKyAgICBwcmludGYoInVzYWdlOiAlcyBbIC10IF1bIC1jIF1bIC12IF1bIC1vIF1bLWQgPGRlYnVnX21vZHVsZT4gXSogWyAtbCBdXG4iCisgICAgICAgICAgICIgIC10ICAgICAgICAgcnVuIHRpbWluZyB0ZXN0XG4iCisgICAgICAgICAgICIgIC1yICAgICAgICAgcnVuIHJlamVjdGlvbiB0aW1pbmcgdGVzdFxuIgorICAgICAgICAgICAiICAtYyAgICAgICAgIHJ1biBjb2RlYyB0aW1pbmcgdGVzdFxuIgorICAgICAgICAgICAiICAtdiAgICAgICAgIHJ1biB2YWxpZGF0aW9uIHRlc3RzXG4iCisgICAgICAgICAgICIgIC1vICAgICAgICAgb3V0cHV0IGxvZ2dpbmcgdG8gc3Rkb3V0XG4iCisgICAgICAgICAgICIgIC1kIDxtb2Q+ICAgdHVybiBvbiBkZWJ1Z2dpbmcgbW9kdWxlIDxtb2Q+XG4iCisgICAgICAgICAgICIgIC1sICAgICAgICAgbGlzdCBkZWJ1Z2dpbmcgbW9kdWxlc1xuIiwKKyAgICAgICAgICAgcHJvZ19uYW1lKTsKKyAgICBleGl0KDEpOworfQorCit2b2lkIGxvZ19oYW5kbGVyKHNydHBfbG9nX2xldmVsX3QgbGV2ZWwsIGNvbnN0IGNoYXIgKm1zZywgdm9pZCAqZGF0YSkKK3sKKyAgICBjaGFyIGxldmVsX2NoYXIgPSAnPyc7CisgICAgc3dpdGNoIChsZXZlbCkgeworICAgIGNhc2Ugc3J0cF9sb2dfbGV2ZWxfZXJyb3I6CisgICAgICAgIGxldmVsX2NoYXIgPSAnZSc7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugc3J0cF9sb2dfbGV2ZWxfd2FybmluZzoKKyAgICAgICAgbGV2ZWxfY2hhciA9ICd3JzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBzcnRwX2xvZ19sZXZlbF9pbmZvOgorICAgICAgICBsZXZlbF9jaGFyID0gJ2knOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHNydHBfbG9nX2xldmVsX2RlYnVnOgorICAgICAgICBsZXZlbF9jaGFyID0gJ2QnOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcHJpbnRmKCJTUlRQLUxPRyBbJWNdOiAlc1xuIiwgbGV2ZWxfY2hhciwgbXNnKTsKIH0KIAogLyoKQEAgLTExMCw3ICsxODcsNiBAQAogCiBleHRlcm4gY29uc3Qgc3J0cF9wb2xpY3lfdCAqcG9saWN5X2FycmF5W107CiAKLQogLyogdGhlIHdpbGRjYXJkX3BvbGljeSBpcyBkZWNsYXJlZCBiZWxvdzsgaXQgaGFzIGEgd2lsZGNhcmQgc3NyYyAqLwogCiBleHRlcm4gY29uc3Qgc3J0cF9wb2xpY3lfdCB3aWxkY2FyZF9wb2xpY3k7CkBAIC0xMTgsMjIyICsxOTQsNDQ1IEBACiAvKgogICogbW9kX2RyaXZlciBkZWJ1ZyBtb2R1bGUgLSBkZWJ1Z2dpbmcgbW9kdWxlIGZvciB0aGlzIHRlc3QgZHJpdmVyCiAgKgotICogd2UgdXNlIHRoZSBjcnlwdG9fa2VybmVsIGRlYnVnZ2luZyBzeXN0ZW0gaW4gdGhpcyBkcml2ZXIsIHdoaWNoIAorICogd2UgdXNlIHRoZSBjcnlwdG9fa2VybmVsIGRlYnVnZ2luZyBzeXN0ZW0gaW4gdGhpcyBkcml2ZXIsIHdoaWNoCiAgKiBtYWtlcyB0aGUgaW50ZXJmYWNlIHVuaWZvcm0gYW5kIGluY3JlYXNlcyBwb3J0YWJpbGl0eQotICovIAorICovCiAKLWRlYnVnX21vZHVsZV90IG1vZF9kcml2ZXIgPSB7Ci0gIDAsICAgICAgICAgICAgICAgICAgLyogZGVidWdnaW5nIGlzIG9mZiBieSBkZWZhdWx0ICovCi0gICJkcml2ZXIiICAgICAgICAgICAgLyogcHJpbnRhYmxlIG5hbWUgZm9yIG1vZHVsZSAgICovCitzcnRwX2RlYnVnX21vZHVsZV90IG1vZF9kcml2ZXIgPSB7CisgICAgMCwgICAgICAgLyogZGVidWdnaW5nIGlzIG9mZiBieSBkZWZhdWx0ICovCisgICAgImRyaXZlciIgLyogcHJpbnRhYmxlIG5hbWUgZm9yIG1vZHVsZSAgICovCiB9OwogCi1pbnQKLW1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKLSAgY2hhciBxOwotICB1bnNpZ25lZCBkb190aW1pbmdfdGVzdCAgICA9IDA7Ci0gIHVuc2lnbmVkIGRvX3JlamVjdGlvbl90ZXN0ID0gMDsKLSAgdW5zaWduZWQgZG9fY29kZWNfdGltaW5nICAgPSAwOwotICB1bnNpZ25lZCBkb192YWxpZGF0aW9uICAgICA9IDA7Ci0gIHVuc2lnbmVkIGRvX2xpc3RfbW9kcyAgICAgID0gMDsKLSAgZXJyX3N0YXR1c190IHN0YXR1czsKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgaW50IHE7CisgICAgdW5zaWduZWQgZG9fdGltaW5nX3Rlc3QgPSAwOworICAgIHVuc2lnbmVkIGRvX3JlamVjdGlvbl90ZXN0ID0gMDsKKyAgICB1bnNpZ25lZCBkb19jb2RlY190aW1pbmcgPSAwOworICAgIHVuc2lnbmVkIGRvX3ZhbGlkYXRpb24gPSAwOworICAgIHVuc2lnbmVkIGRvX2xpc3RfbW9kcyA9IDA7CisgICAgdW5zaWduZWQgZG9fbG9nX3N0ZG91dCA9IDA7CisgICAgc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdHVzOwogCi0gIC8qIAotICAgKiB2ZXJpZnkgdGhhdCB0aGUgY29tcGlsZXIgaGFzIGludGVycHJldGVkIHRoZSBoZWFkZXIgZGF0YQotICAgKiBzdHJ1Y3R1cmUgc3J0cF9oZHJfdCBjb3JyZWN0bHkKLSAgICovCi0gIGlmIChzaXplb2Yoc3J0cF9oZHJfdCkgIT0gMTIpIHsKLSAgICBwcmludGYoImVycm9yOiBzcnRwX2hkcl90IGhhcyBpbmNvcnJlY3Qgc2l6ZVxuIik7Ci0gICAgZXhpdCgxKTsKLSAgfQotCi0gIC8qIGluaXRpYWxpemUgc3J0cCBsaWJyYXJ5ICovCi0gIHN0YXR1cyA9IHNydHBfaW5pdCgpOwotICBpZiAoc3RhdHVzKSB7Ci0gICAgcHJpbnRmKCJlcnJvcjogc3J0cCBpbml0IGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWRcbiIsIHN0YXR1cyk7Ci0gICAgZXhpdCgxKTsKLSAgfQotCi0gIC8qICBsb2FkIHNydHBfZHJpdmVyIGRlYnVnIG1vZHVsZSAqLwotICBzdGF0dXMgPSBjcnlwdG9fa2VybmVsX2xvYWRfZGVidWdfbW9kdWxlKCZtb2RfZHJpdmVyKTsKLSAgICBpZiAoc3RhdHVzKSB7Ci0gICAgcHJpbnRmKCJlcnJvcjogbG9hZCBvZiBzcnRwX2RyaXZlciBkZWJ1ZyBtb2R1bGUgZmFpbGVkICIKLSAgICAgICAgICAgIndpdGggZXJyb3IgY29kZSAlZFxuIiwgc3RhdHVzKTsKLSAgICBleGl0KDEpOyAgIAotICB9Ci0KLSAgLyogcHJvY2VzcyBpbnB1dCBhcmd1bWVudHMgKi8KLSAgd2hpbGUgKDEpIHsKLSAgICBxID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJ0cmN2bGQ6Iik7Ci0gICAgaWYgKHEgPT0gLTEpIAotICAgICAgYnJlYWs7Ci0gICAgc3dpdGNoIChxKSB7Ci0gICAgY2FzZSAndCc6Ci0gICAgICBkb190aW1pbmdfdGVzdCA9IDE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICdyJzoKLSAgICAgIGRvX3JlamVjdGlvbl90ZXN0ID0gMTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgJ2MnOgotICAgICAgZG9fY29kZWNfdGltaW5nID0gMTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgJ3YnOgotICAgICAgZG9fdmFsaWRhdGlvbiA9IDE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICdsJzoKLSAgICAgIGRvX2xpc3RfbW9kcyA9IDE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICdkJzoKLSAgICAgIHN0YXR1cyA9IGNyeXB0b19rZXJuZWxfc2V0X2RlYnVnX21vZHVsZShvcHRhcmcsIDEpOwotICAgICAgaWYgKHN0YXR1cykgewotICAgICAgICBwcmludGYoImVycm9yOiBzZXQgZGVidWcgbW9kdWxlICglcykgZmFpbGVkXG4iLCBvcHRhcmcpOworICAgIC8qCisgICAgICogdmVyaWZ5IHRoYXQgdGhlIGNvbXBpbGVyIGhhcyBpbnRlcnByZXRlZCB0aGUgaGVhZGVyIGRhdGEKKyAgICAgKiBzdHJ1Y3R1cmUgc3J0cF9oZHJfdCBjb3JyZWN0bHkKKyAgICAgKi8KKyAgICBpZiAoc2l6ZW9mKHNydHBfaGRyX3QpICE9IDEyKSB7CisgICAgICAgIHByaW50ZigiZXJyb3I6IHNydHBfaGRyX3QgaGFzIGluY29ycmVjdCBzaXplIgorICAgICAgICAgICAgICAgIihzaXplIGlzICVsZCBieXRlcywgZXhwZWN0ZWQgMTIpXG4iLAorICAgICAgICAgICAgICAgKGxvbmcpc2l6ZW9mKHNydHBfaGRyX3QpKTsKICAgICAgICAgZXhpdCgxKTsKLSAgICAgIH0gIAotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHVzYWdlKGFyZ3ZbMF0pOwotICAgIH0gICAgCi0gIH0KKyAgICB9CiAKLSAgaWYgKCFkb192YWxpZGF0aW9uICYmICFkb190aW1pbmdfdGVzdCAmJiAhZG9fY29kZWNfdGltaW5nIAotICAgICAgJiYgIWRvX2xpc3RfbW9kcyAmJiAhZG9fcmVqZWN0aW9uX3Rlc3QpCi0gICAgdXNhZ2UoYXJndlswXSk7Ci0KLSAgaWYgKGRvX2xpc3RfbW9kcykgewotICAgIHN0YXR1cyA9IGNyeXB0b19rZXJuZWxfbGlzdF9kZWJ1Z19tb2R1bGVzKCk7CisgICAgLyogaW5pdGlhbGl6ZSBzcnRwIGxpYnJhcnkgKi8KKyAgICBzdGF0dXMgPSBzcnRwX2luaXQoKTsKICAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICBwcmludGYoImVycm9yOiBsaXN0IG9mIGRlYnVnIG1vZHVsZXMgZmFpbGVkXG4iKTsKLSAgICAgIGV4aXQoMSk7Ci0gICAgfQotICB9Ci0gIAotICBpZiAoZG9fdmFsaWRhdGlvbikgewotICAgIGNvbnN0IHNydHBfcG9saWN5X3QgKipwb2xpY3kgPSBwb2xpY3lfYXJyYXk7Ci0gICAgc3J0cF9wb2xpY3lfdCAqYmlnX3BvbGljeTsKLQotICAgIC8qIGxvb3Agb3ZlciBwb2xpY3kgYXJyYXksIHRlc3Rpbmcgc3J0cCBmb3IgZWFjaCBwb2xpY3kgKi8KLSAgICB3aGlsZSAoKnBvbGljeSAhPSBOVUxMKSB7Ci0gICAgICBwcmludGYoInRlc3Rpbmcgc3J0cF9wcm90ZWN0IGFuZCBzcnRwX3VucHJvdGVjdFxuIik7Ci0gICAgICBpZiAoc3J0cF90ZXN0KCpwb2xpY3kpID09IGVycl9zdGF0dXNfb2spCi0JcHJpbnRmKCJwYXNzZWRcblxuIik7Ci0gICAgICBlbHNlIHsKLQlwcmludGYoImZhaWxlZFxuIik7Ci0JZXhpdCgxKTsKLSAgICAgIH0KLSAgICAgIHBvbGljeSsrOworICAgICAgICBwcmludGYoImVycm9yOiBzcnRwIGluaXQgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgc3RhdHVzKTsKKyAgICAgICAgZXhpdCgxKTsKICAgICB9CiAKLSAgICAvKiBjcmVhdGUgYSBiaWcgcG9saWN5IGxpc3QgYW5kIHJ1biB0ZXN0cyBvbiBpdCAqLwotICAgIHN0YXR1cyA9IHNydHBfY3JlYXRlX2JpZ19wb2xpY3koJmJpZ19wb2xpY3kpOworICAgIC8qICBsb2FkIHNydHBfZHJpdmVyIGRlYnVnIG1vZHVsZSAqLworICAgIHN0YXR1cyA9IHNydHBfY3J5cHRvX2tlcm5lbF9sb2FkX2RlYnVnX21vZHVsZSgmbW9kX2RyaXZlcik7CiAgICAgaWYgKHN0YXR1cykgewotICAgICAgcHJpbnRmKCJ1bmV4cGVjdGVkIGZhaWx1cmUgd2l0aCBlcnJvciBjb2RlICVkXG4iLCBzdGF0dXMpOwotICAgICAgZXhpdCgxKTsKLSAgICB9Ci0gICAgcHJpbnRmKCJ0ZXN0aW5nIHNydHBfcHJvdGVjdCBhbmQgc3J0cF91bnByb3RlY3Qgd2l0aCBiaWcgcG9saWN5XG4iKTsKLSAgICBpZiAoc3J0cF90ZXN0KGJpZ19wb2xpY3kpID09IGVycl9zdGF0dXNfb2spCi0gICAgICBwcmludGYoInBhc3NlZFxuXG4iKTsKLSAgICBlbHNlIHsKLSAgICAgIHByaW50ZigiZmFpbGVkXG4iKTsKLSAgICAgIGV4aXQoMSk7CisgICAgICAgIHByaW50ZigiZXJyb3I6IGxvYWQgb2Ygc3J0cF9kcml2ZXIgZGVidWcgbW9kdWxlIGZhaWxlZCAiCisgICAgICAgICAgICAgICAid2l0aCBlcnJvciBjb2RlICVkXG4iLAorICAgICAgICAgICAgICAgc3RhdHVzKTsKKyAgICAgICAgZXhpdCgxKTsKICAgICB9CiAKLSAgICAvKiBydW4gdGVzdCBvbiB3aWxkY2FyZCBwb2xpY3kgKi8KLSAgICBwcmludGYoInRlc3Rpbmcgc3J0cF9wcm90ZWN0IGFuZCBzcnRwX3VucHJvdGVjdCBvbiAiCi0JICAgIndpbGRjYXJkIHNzcmMgcG9saWN5XG4iKTsKLSAgICBpZiAoc3J0cF90ZXN0KCZ3aWxkY2FyZF9wb2xpY3kpID09IGVycl9zdGF0dXNfb2spCi0gICAgICBwcmludGYoInBhc3NlZFxuXG4iKTsKLSAgICBlbHNlIHsKLSAgICAgIHByaW50ZigiZmFpbGVkXG4iKTsKLSAgICAgIGV4aXQoMSk7Ci0gICAgfSAgIAotCi0gICAgLyoKLSAgICAgKiBydW4gdmFsaWRhdGlvbiB0ZXN0IGFnYWluc3QgdGhlIHJlZmVyZW5jZSBwYWNrZXRzIC0gbm90ZSAKLSAgICAgKiB0aGF0IHRoaXMgdGVzdCBvbmx5IGNvdmVycyB0aGUgZGVmYXVsdCBwb2xpY3kKLSAgICAgKi8KLSAgICBwcmludGYoInRlc3Rpbmcgc3J0cF9wcm90ZWN0IGFuZCBzcnRwX3VucHJvdGVjdCBhZ2FpbnN0ICIKLQkgICAicmVmZXJlbmNlIHBhY2tldHNcbiIpOwotICAgIGlmIChzcnRwX3ZhbGlkYXRlKCkgPT0gZXJyX3N0YXR1c19vaykgCi0gICAgICBwcmludGYoInBhc3NlZFxuXG4iKTsKLSAgICBlbHNlIHsKLSAgICAgIHByaW50ZigiZmFpbGVkXG4iKTsKLSAgICAgICBleGl0KDEpOyAKKyAgICAvKiBwcm9jZXNzIGlucHV0IGFyZ3VtZW50cyAqLworICAgIHdoaWxlICgxKSB7CisgICAgICAgIHEgPSBnZXRvcHRfcyhhcmdjLCBhcmd2LCAidHJjdm9sZDoiKTsKKyAgICAgICAgaWYgKHEgPT0gLTEpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAocSkgeworICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgIGRvX3RpbWluZ190ZXN0ID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdyJzoKKyAgICAgICAgICAgIGRvX3JlamVjdGlvbl90ZXN0ID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdjJzoKKyAgICAgICAgICAgIGRvX2NvZGVjX3RpbWluZyA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAndic6CisgICAgICAgICAgICBkb192YWxpZGF0aW9uID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdvJzoKKyAgICAgICAgICAgIGRvX2xvZ19zdGRvdXQgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2wnOgorICAgICAgICAgICAgZG9fbGlzdF9tb2RzID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdkJzoKKyAgICAgICAgICAgIHN0YXR1cyA9IHNydHBfc2V0X2RlYnVnX21vZHVsZShvcHRhcmdfcywgMSk7CisgICAgICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJlcnJvcjogc2V0IGRlYnVnIG1vZHVsZSAoJXMpIGZhaWxlZFxuIiwgb3B0YXJnX3MpOworICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHVzYWdlKGFyZ3ZbMF0pOworICAgICAgICB9CiAgICAgfQogCi0gICAgLyoKLSAgICAgKiB0ZXN0IHRoZSBmdW5jdGlvbiBzcnRwX3JlbW92ZV9zdHJlYW0oKQotICAgICAqLwotICAgIHByaW50ZigidGVzdGluZyBzcnRwX3JlbW92ZV9zdHJlYW0oKS4uLiIpOwotICAgIGlmIChzcnRwX3Rlc3RfcmVtb3ZlX3N0cmVhbSgpID09IGVycl9zdGF0dXNfb2spCi0gICAgICBwcmludGYoInBhc3NlZFxuIik7Ci0gICAgZWxzZSB7Ci0gICAgICBwcmludGYoImZhaWxlZFxuIik7Ci0gICAgICBleGl0KDEpOworICAgIGlmICghZG9fdmFsaWRhdGlvbiAmJiAhZG9fdGltaW5nX3Rlc3QgJiYgIWRvX2NvZGVjX3RpbWluZyAmJgorICAgICAgICAhZG9fbGlzdF9tb2RzICYmICFkb19yZWplY3Rpb25fdGVzdCkgeworICAgICAgICB1c2FnZShhcmd2WzBdKTsKICAgICB9Ci0gIH0KLSAgCi0gIGlmIChkb190aW1pbmdfdGVzdCkgewotICAgIGNvbnN0IHNydHBfcG9saWN5X3QgKipwb2xpY3kgPSBwb2xpY3lfYXJyYXk7Ci0gICAgCi0gICAgLyogbG9vcCBvdmVyIHBvbGljaWVzLCBydW4gdGltaW5nIHRlc3QgZm9yIGVhY2ggKi8KLSAgICB3aGlsZSAoKnBvbGljeSAhPSBOVUxMKSB7Ci0gICAgICBzcnRwX3ByaW50X3BvbGljeSgqcG9saWN5KTsKLSAgICAgIHNydHBfZG9fdGltaW5nKCpwb2xpY3kpOwotICAgICAgcG9saWN5Kys7CisKKyAgICBpZiAoZG9fbG9nX3N0ZG91dCkgeworICAgICAgICBzdGF0dXMgPSBzcnRwX2luc3RhbGxfbG9nX2hhbmRsZXIobG9nX2hhbmRsZXIsIE5VTEwpOworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBwcmludGYoImVycm9yOiBpbnN0YWxsIGxvZyBoYW5kbGVyIGZhaWxlZFxuIik7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CiAgICAgfQotICB9CiAKLSAgaWYgKGRvX3JlamVjdGlvbl90ZXN0KSB7Ci0gICAgY29uc3Qgc3J0cF9wb2xpY3lfdCAqKnBvbGljeSA9IHBvbGljeV9hcnJheTsKLSAgICAKLSAgICAvKiBsb29wIG92ZXIgcG9saWNpZXMsIHJ1biByZWplY3Rpb24gdGltaW5nIHRlc3QgZm9yIGVhY2ggKi8KLSAgICB3aGlsZSAoKnBvbGljeSAhPSBOVUxMKSB7Ci0gICAgICBzcnRwX3ByaW50X3BvbGljeSgqcG9saWN5KTsKLSAgICAgIHNydHBfZG9fcmVqZWN0aW9uX3RpbWluZygqcG9saWN5KTsKLSAgICAgIHBvbGljeSsrOworICAgIGlmIChkb19saXN0X21vZHMpIHsKKyAgICAgICAgc3RhdHVzID0gc3J0cF9saXN0X2RlYnVnX21vZHVsZXMoKTsKKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgcHJpbnRmKCJlcnJvcjogbGlzdCBvZiBkZWJ1ZyBtb2R1bGVzIGZhaWxlZFxuIik7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CiAgICAgfQotICB9Ci0gIAotICBpZiAoZG9fY29kZWNfdGltaW5nKSB7Ci0gICAgc3J0cF9wb2xpY3lfdCBwb2xpY3k7Ci0gICAgaW50IGlnbm9yZTsKLSAgICBkb3VibGUgbWlwcyA9IG1pcHNfZXN0aW1hdGUoMTAwMDAwMDAwMCwgJmlnbm9yZSk7CiAKLSAgICBjcnlwdG9fcG9saWN5X3NldF9ydHBfZGVmYXVsdCgmcG9saWN5LnJ0cCk7Ci0gICAgY3J5cHRvX3BvbGljeV9zZXRfcnRjcF9kZWZhdWx0KCZwb2xpY3kucnRjcCk7Ci0gICAgcG9saWN5LnNzcmMudHlwZSAgPSBzc3JjX3NwZWNpZmljOwotICAgIHBvbGljeS5zc3JjLnZhbHVlID0gMHhkZWNhZmJhZDsKLSAgICBwb2xpY3kua2V5ICA9IHRlc3Rfa2V5OwotICAgIHBvbGljeS5uZXh0ID0gTlVMTDsKKyAgICBpZiAoZG9fdmFsaWRhdGlvbikgeworICAgICAgICBjb25zdCBzcnRwX3BvbGljeV90ICoqcG9saWN5ID0gcG9saWN5X2FycmF5OworICAgICAgICBzcnRwX3BvbGljeV90ICpiaWdfcG9saWN5OwogCi0gICAgcHJpbnRmKCJtaXBzIGVzdGltYXRlOiAlZVxuIiwgbWlwcyk7CisgICAgICAgIC8qIGxvb3Agb3ZlciBwb2xpY3kgYXJyYXksIHRlc3Rpbmcgc3J0cCBhbmQgc3J0Y3AgZm9yIGVhY2ggcG9saWN5ICovCisgICAgICAgIHdoaWxlICgqcG9saWN5ICE9IE5VTEwpIHsKKyAgICAgICAgICAgIHByaW50ZigidGVzdGluZyBzcnRwX3Byb3RlY3QgYW5kIHNydHBfdW5wcm90ZWN0XG4iKTsKKyAgICAgICAgICAgIGlmIChzcnRwX3Rlc3QoKnBvbGljeSwgMCwgLTEpID09IHNydHBfZXJyX3N0YXR1c19vaykgeworICAgICAgICAgICAgICAgIHByaW50ZigicGFzc2VkXG5cbiIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmludGYoImZhaWxlZFxuIik7CisgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgIH0KIAotICAgIHByaW50ZigidGVzdGluZyBzcnRwIHByb2Nlc3NpbmcgdGltZSBmb3Igdm9pY2UgY29kZWNzOlxuIik7Ci0gICAgcHJpbnRmKCJjb2RlY1x0XHRsZW5ndGggKG9jdGV0cylcdFx0c3J0cCBpbnN0cnVjdGlvbnMvc2Vjb25kXG4iKTsKLSAgICBwcmludGYoIkcuNzExXHRcdCVkXHRcdFx0JWVcbiIsIDgwLCAKLSAgICAgICAgICAgKGRvdWJsZSkgbWlwcyAqICg4MCAqIDgpIC8gCi0JICAgc3J0cF9iaXRzX3Blcl9zZWNvbmQoODAsICZwb2xpY3kpIC8gLjAxICk7Ci0gICAgcHJpbnRmKCJHLjcxMVx0XHQlZFx0XHRcdCVlXG4iLCAxNjAsIAotICAgICAgICAgICAoZG91YmxlKSBtaXBzICogKDE2MCAqIDgpIC8gCi0JICAgc3J0cF9iaXRzX3Blcl9zZWNvbmQoMTYwLCAmcG9saWN5KSAvIC4wMik7Ci0gICAgcHJpbnRmKCJHLjcyNi0zMlx0JWRcdFx0XHQlZVxuIiwgNDAsIAotICAgICAgICAgICAoZG91YmxlKSBtaXBzICogKDQwICogOCkgLyAKLQkgICBzcnRwX2JpdHNfcGVyX3NlY29uZCg0MCwgJnBvbGljeSkgLyAuMDEgKTsKLSAgICBwcmludGYoIkcuNzI2LTMyXHQlZFx0XHRcdCVlXG4iLCA4MCwgCi0gICAgICAgICAgIChkb3VibGUpIG1pcHMgKiAoODAgKiA4KSAvIAotCSAgIHNydHBfYml0c19wZXJfc2Vjb25kKDgwLCAmcG9saWN5KSAvIC4wMik7Ci0gICAgcHJpbnRmKCJHLjcyOVx0XHQlZFx0XHRcdCVlXG4iLCAxMCwgCi0gICAgICAgICAgIChkb3VibGUpIG1pcHMgKiAoMTAgKiA4KSAvIAotCSAgIHNydHBfYml0c19wZXJfc2Vjb25kKDEwLCAmcG9saWN5KSAvIC4wMSApOwotICAgIHByaW50ZigiRy43MjlcdFx0JWRcdFx0XHQlZVxuIiwgMjAsIAotICAgICAgICAgICAoZG91YmxlKSBtaXBzICogKDIwICogOCkgLwotCSAgIHNydHBfYml0c19wZXJfc2Vjb25kKDIwLCAmcG9saWN5KSAvIC4wMiApOwotICB9CisgICAgICAgICAgICBwcmludGYoInRlc3Rpbmcgc3J0cF9wcm90ZWN0IGFuZCBzcnRwX3VucHJvdGVjdCB3aXRoIGVuY3J5cHRlZCAiCisgICAgICAgICAgICAgICAgICAgImV4dGVuc2lvbnMgaGVhZGVyc1xuIik7CisgICAgICAgICAgICBpZiAoc3J0cF90ZXN0KCpwb2xpY3ksIDEsIC0xKSA9PSBzcnRwX2Vycl9zdGF0dXNfb2spIHsKKyAgICAgICAgICAgICAgICBwcmludGYoInBhc3NlZFxuXG4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJmYWlsZWRcbiIpOworICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcmludGYoInRlc3Rpbmcgc3J0cF9wcm90ZWN0X3J0Y3AgYW5kIHNydHBfdW5wcm90ZWN0X3J0Y3BcbiIpOworICAgICAgICAgICAgaWYgKHNydGNwX3Rlc3QoKnBvbGljeSwgLTEpID09IHNydHBfZXJyX3N0YXR1c19vaykgeworICAgICAgICAgICAgICAgIHByaW50ZigicGFzc2VkXG5cbiIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmludGYoImZhaWxlZFxuIik7CisgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByaW50ZigidGVzdGluZyBzcnRwX3Byb3RlY3RfcnRwIGFuZCBzcnRwX3VucHJvdGVjdF9ydHAgd2l0aCBNS0kgIgorICAgICAgICAgICAgICAgICAgICJpbmRleCBzZXQgdG8gMFxuIik7CisgICAgICAgICAgICBpZiAoc3J0cF90ZXN0KCpwb2xpY3ksIDAsIDApID09IHNydHBfZXJyX3N0YXR1c19vaykgeworICAgICAgICAgICAgICAgIHByaW50ZigicGFzc2VkXG5cbiIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmludGYoImZhaWxlZFxuIik7CisgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByaW50ZigidGVzdGluZyBzcnRwX3Byb3RlY3RfcnRwIGFuZCBzcnRwX3VucHJvdGVjdF9ydHAgd2l0aCBNS0kgIgorICAgICAgICAgICAgICAgICAgICJpbmRleCBzZXQgdG8gMVxuIik7CisgICAgICAgICAgICBpZiAoc3J0cF90ZXN0KCpwb2xpY3ksIDAsIDEpID09IHNydHBfZXJyX3N0YXR1c19vaykgeworICAgICAgICAgICAgICAgIHByaW50ZigicGFzc2VkXG5cbiIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmludGYoImZhaWxlZFxuIik7CisgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgIH0KIAotICByZXR1cm4gMDsgIAorICAgICAgICAgICAgcHJpbnRmKCJ0ZXN0aW5nIHNydHBfcHJvdGVjdF9ydGNwIGFuZCBzcnRwX3VucHJvdGVjdF9ydGNwIHdpdGggTUtJICIKKyAgICAgICAgICAgICAgICAgICAiaW5kZXggc2V0IHRvIDBcbiIpOworICAgICAgICAgICAgaWYgKHNydGNwX3Rlc3QoKnBvbGljeSwgMCkgPT0gc3J0cF9lcnJfc3RhdHVzX29rKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJwYXNzZWRcblxuIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByaW50ZigiZmFpbGVkXG4iKTsKKyAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJpbnRmKCJ0ZXN0aW5nIHNydHBfcHJvdGVjdF9ydGNwIGFuZCBzcnRwX3VucHJvdGVjdF9ydGNwIHdpdGggTUtJICIKKyAgICAgICAgICAgICAgICAgICAiaW5kZXggc2V0IHRvIDFcbiIpOworICAgICAgICAgICAgaWYgKHNydGNwX3Rlc3QoKnBvbGljeSwgMSkgPT0gc3J0cF9lcnJfc3RhdHVzX29rKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJwYXNzZWRcblxuIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByaW50ZigiZmFpbGVkXG4iKTsKKyAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcG9saWN5Kys7CisgICAgICAgIH0KKworICAgICAgICAvKiBjcmVhdGUgYSBiaWcgcG9saWN5IGxpc3QgYW5kIHJ1biB0ZXN0cyBvbiBpdCAqLworICAgICAgICBzdGF0dXMgPSBzcnRwX2NyZWF0ZV9iaWdfcG9saWN5KCZiaWdfcG9saWN5KTsKKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgcHJpbnRmKCJ1bmV4cGVjdGVkIGZhaWx1cmUgd2l0aCBlcnJvciBjb2RlICVkXG4iLCBzdGF0dXMpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAgICBwcmludGYoInRlc3Rpbmcgc3J0cF9wcm90ZWN0IGFuZCBzcnRwX3VucHJvdGVjdCB3aXRoIGJpZyBwb2xpY3lcbiIpOworICAgICAgICBpZiAoc3J0cF90ZXN0KGJpZ19wb2xpY3ksIDAsIC0xKSA9PSBzcnRwX2Vycl9zdGF0dXNfb2spIHsKKyAgICAgICAgICAgIHByaW50ZigicGFzc2VkXG5cbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnRmKCJmYWlsZWRcbiIpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAgICBwcmludGYoInRlc3Rpbmcgc3J0cF9wcm90ZWN0IGFuZCBzcnRwX3VucHJvdGVjdCB3aXRoIGJpZyBwb2xpY3kgYW5kICIKKyAgICAgICAgICAgICAgICJlbmNyeXB0ZWQgZXh0ZW5zaW9ucyBoZWFkZXJzXG4iKTsKKyAgICAgICAgaWYgKHNydHBfdGVzdChiaWdfcG9saWN5LCAxLCAtMSkgPT0gc3J0cF9lcnJfc3RhdHVzX29rKSB7CisgICAgICAgICAgICBwcmludGYoInBhc3NlZFxuXG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50ZigiZmFpbGVkXG4iKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdHVzID0gc3J0cF9kZWFsbG9jX2JpZ19wb2xpY3koYmlnX3BvbGljeSk7CisgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgICAgIHByaW50ZigidW5leHBlY3RlZCBmYWlsdXJlIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgc3RhdHVzKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBydW4gdGVzdCBvbiB3aWxkY2FyZCBwb2xpY3kgKi8KKyAgICAgICAgcHJpbnRmKCJ0ZXN0aW5nIHNydHBfcHJvdGVjdCBhbmQgc3J0cF91bnByb3RlY3Qgb24gIgorICAgICAgICAgICAgICAgIndpbGRjYXJkIHNzcmMgcG9saWN5XG4iKTsKKyAgICAgICAgaWYgKHNydHBfdGVzdCgmd2lsZGNhcmRfcG9saWN5LCAwLCAtMSkgPT0gc3J0cF9lcnJfc3RhdHVzX29rKSB7CisgICAgICAgICAgICBwcmludGYoInBhc3NlZFxuXG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50ZigiZmFpbGVkXG4iKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnRmKCJ0ZXN0aW5nIHNydHBfcHJvdGVjdCBhbmQgc3J0cF91bnByb3RlY3Qgb24gIgorICAgICAgICAgICAgICAgIndpbGRjYXJkIHNzcmMgcG9saWN5IGFuZCBlbmNyeXB0ZWQgZXh0ZW5zaW9ucyBoZWFkZXJzXG4iKTsKKyAgICAgICAgaWYgKHNydHBfdGVzdCgmd2lsZGNhcmRfcG9saWN5LCAxLCAtMSkgPT0gc3J0cF9lcnJfc3RhdHVzX29rKSB7CisgICAgICAgICAgICBwcmludGYoInBhc3NlZFxuXG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50ZigiZmFpbGVkXG4iKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBydW4gdmFsaWRhdGlvbiB0ZXN0IGFnYWluc3QgdGhlIHJlZmVyZW5jZSBwYWNrZXRzIC0gbm90ZQorICAgICAgICAgKiB0aGF0IHRoaXMgdGVzdCBvbmx5IGNvdmVycyB0aGUgZGVmYXVsdCBwb2xpY3kKKyAgICAgICAgICovCisgICAgICAgIHByaW50ZigidGVzdGluZyBzcnRwX3Byb3RlY3QgYW5kIHNydHBfdW5wcm90ZWN0IGFnYWluc3QgIgorICAgICAgICAgICAgICAgInJlZmVyZW5jZSBwYWNrZXRcbiIpOworICAgICAgICBpZiAoc3J0cF92YWxpZGF0ZSgpID09IHNydHBfZXJyX3N0YXR1c19vaykgeworICAgICAgICAgICAgcHJpbnRmKCJwYXNzZWRcblxuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmludGYoImZhaWxlZFxuIik7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisKKyNpZmRlZiBHQ00KKyAgICAgICAgcHJpbnRmKCJ0ZXN0aW5nIHNydHBfcHJvdGVjdCBhbmQgc3J0cF91bnByb3RlY3QgYWdhaW5zdCAiCisgICAgICAgICAgICAgICAicmVmZXJlbmNlIHBhY2tldCB1c2luZyBHQ01cbiIpOworICAgICAgICBpZiAoc3J0cF92YWxpZGF0ZV9nY20oKSA9PSBzcnRwX2Vycl9zdGF0dXNfb2spIHsKKyAgICAgICAgICAgIHByaW50ZigicGFzc2VkXG5cbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnRmKCJmYWlsZWRcbiIpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgcHJpbnRmKCJ0ZXN0aW5nIHNydHBfcHJvdGVjdCBhbmQgc3J0cF91bnByb3RlY3QgYWdhaW5zdCAiCisgICAgICAgICAgICAgICAicmVmZXJlbmNlIHBhY2tldCB3aXRoIGVuY3J5cHRlZCBleHRlbnNpb25zIGhlYWRlcnNcbiIpOworICAgICAgICBpZiAoc3J0cF92YWxpZGF0ZV9lbmNyeXB0ZWRfZXh0ZW5zaW9uc19oZWFkZXJzKCkgPT0gc3J0cF9lcnJfc3RhdHVzX29rKQorICAgICAgICAgICAgcHJpbnRmKCJwYXNzZWRcblxuIik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcHJpbnRmKCJmYWlsZWRcbiIpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorCisjaWZkZWYgR0NNCisgICAgICAgIHByaW50ZigidGVzdGluZyBzcnRwX3Byb3RlY3QgYW5kIHNydHBfdW5wcm90ZWN0IGFnYWluc3QgIgorICAgICAgICAgICAgICAgInJlZmVyZW5jZSBwYWNrZXQgd2l0aCBlbmNyeXB0ZWQgZXh0ZW5zaW9uIGhlYWRlcnMgKEdDTSlcbiIpOworICAgICAgICBpZiAoc3J0cF92YWxpZGF0ZV9lbmNyeXB0ZWRfZXh0ZW5zaW9uc19oZWFkZXJzX2djbSgpID09CisgICAgICAgICAgICBzcnRwX2Vycl9zdGF0dXNfb2spIHsKKyAgICAgICAgICAgIHByaW50ZigicGFzc2VkXG5cbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnRmKCJmYWlsZWRcbiIpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgLyoKKyAgICAgICAgICogcnVuIHZhbGlkYXRpb24gdGVzdCBhZ2FpbnN0IHRoZSByZWZlcmVuY2UgcGFja2V0cyBmb3IKKyAgICAgICAgICogQUVTLTI1NgorICAgICAgICAgKi8KKyAgICAgICAgcHJpbnRmKCJ0ZXN0aW5nIHNydHBfcHJvdGVjdCBhbmQgc3J0cF91bnByb3RlY3QgYWdhaW5zdCAiCisgICAgICAgICAgICAgICAicmVmZXJlbmNlIHBhY2tldCAoQUVTLTI1NilcbiIpOworICAgICAgICBpZiAoc3J0cF92YWxpZGF0ZV9hZXNfMjU2KCkgPT0gc3J0cF9lcnJfc3RhdHVzX29rKSB7CisgICAgICAgICAgICBwcmludGYoInBhc3NlZFxuXG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50ZigiZmFpbGVkXG4iKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiB0ZXN0IHBhY2tldHMgd2l0aCBlbXB0eSBwYXlsb2FkCisgICAgICAgICAqLworICAgICAgICBwcmludGYoInRlc3Rpbmcgc3J0cF9wcm90ZWN0IGFuZCBzcnRwX3VucHJvdGVjdCBhZ2FpbnN0ICIKKyAgICAgICAgICAgICAgICJwYWNrZXQgd2l0aCBlbXB0eSBwYXlsb2FkXG4iKTsKKyAgICAgICAgaWYgKHNydHBfdGVzdF9lbXB0eV9wYXlsb2FkKCkgPT0gc3J0cF9lcnJfc3RhdHVzX29rKSB7CisgICAgICAgICAgICBwcmludGYoInBhc3NlZFxuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmludGYoImZhaWxlZFxuIik7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisjaWZkZWYgR0NNCisgICAgICAgIHByaW50ZigidGVzdGluZyBzcnRwX3Byb3RlY3QgYW5kIHNydHBfdW5wcm90ZWN0IGFnYWluc3QgIgorICAgICAgICAgICAgICAgInBhY2tldCB3aXRoIGVtcHR5IHBheWxvYWQgKEdDTSlcbiIpOworICAgICAgICBpZiAoc3J0cF90ZXN0X2VtcHR5X3BheWxvYWRfZ2NtKCkgPT0gc3J0cF9lcnJfc3RhdHVzX29rKSB7CisgICAgICAgICAgICBwcmludGYoInBhc3NlZFxuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmludGYoImZhaWxlZFxuIik7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICAvKgorICAgICAgICAgKiB0ZXN0IHRoZSBmdW5jdGlvbiBzcnRwX3JlbW92ZV9zdHJlYW0oKQorICAgICAgICAgKi8KKyAgICAgICAgcHJpbnRmKCJ0ZXN0aW5nIHNydHBfcmVtb3ZlX3N0cmVhbSgpLi4uIik7CisgICAgICAgIGlmIChzcnRwX3Rlc3RfcmVtb3ZlX3N0cmVhbSgpID09IHNydHBfZXJyX3N0YXR1c19vaykgeworICAgICAgICAgICAgcHJpbnRmKCJwYXNzZWRcbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnRmKCJmYWlsZWRcbiIpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIHRlc3QgdGhlIGZ1bmN0aW9uIHNydHBfdXBkYXRlKCkKKyAgICAgICAgICovCisgICAgICAgIHByaW50ZigidGVzdGluZyBzcnRwX3VwZGF0ZSgpLi4uIik7CisgICAgICAgIGlmIChzcnRwX3Rlc3RfdXBkYXRlKCkgPT0gc3J0cF9lcnJfc3RhdHVzX29rKSB7CisgICAgICAgICAgICBwcmludGYoInBhc3NlZFxuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmludGYoImZhaWxlZFxuIik7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogdGVzdCB0aGUgZnVuY3Rpb25zIHNydHBfZ2V0X3Byb3RlY3RfdHJhaWxlcl9sZW5ndGgKKyAgICAgICAgICogYW5kIHNydHBfZ2V0X3Byb3RlY3RfcnRjcF90cmFpbGVyX2xlbmd0aAorICAgICAgICAgKi8KKyAgICAgICAgcHJpbnRmKCJ0ZXN0aW5nIHNydHBfZ2V0X3Byb3RlY3RfdHJhaWxlcl9sZW5ndGgoKS4uLiIpOworICAgICAgICBpZiAoc3J0cF90ZXN0X3Byb3RlY3RfdHJhaWxlcl9sZW5ndGgoKSA9PSBzcnRwX2Vycl9zdGF0dXNfb2spIHsKKyAgICAgICAgICAgIHByaW50ZigicGFzc2VkXG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50ZigiZmFpbGVkXG4iKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKworICAgICAgICBwcmludGYoInRlc3Rpbmcgc3J0cF9nZXRfcHJvdGVjdF9ydGNwX3RyYWlsZXJfbGVuZ3RoKCkuLi4iKTsKKyAgICAgICAgaWYgKHNydHBfdGVzdF9wcm90ZWN0X3J0Y3BfdHJhaWxlcl9sZW5ndGgoKSA9PSBzcnRwX2Vycl9zdGF0dXNfb2spIHsKKyAgICAgICAgICAgIHByaW50ZigicGFzc2VkXG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50ZigiZmFpbGVkXG4iKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKworICAgICAgICBwcmludGYoInRlc3Rpbmcgc3J0cF90ZXN0X2dldF9yb2MoKS4uLiIpOworICAgICAgICBpZiAoc3J0cF90ZXN0X2dldF9yb2MoKSA9PSBzcnRwX2Vycl9zdGF0dXNfb2spIHsKKyAgICAgICAgICAgIHByaW50ZigicGFzc2VkXG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50ZigiZmFpbGVkXG4iKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKworICAgICAgICBwcmludGYoInRlc3Rpbmcgc3J0cF90ZXN0X3NldF9yZWNlaXZlcl9yb2MoKS4uLiIpOworICAgICAgICBpZiAoc3J0cF90ZXN0X3NldF9yZWNlaXZlcl9yb2MoKSA9PSBzcnRwX2Vycl9zdGF0dXNfb2spIHsKKyAgICAgICAgICAgIHByaW50ZigicGFzc2VkXG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50ZigiZmFpbGVkXG4iKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKworICAgICAgICBwcmludGYoInRlc3Rpbmcgc3J0cF90ZXN0X3NldF9zZW5kZXJfcm9jKCkuLi4iKTsKKyAgICAgICAgaWYgKHNydHBfdGVzdF9zZXRfc2VuZGVyX3JvYygpID09IHNydHBfZXJyX3N0YXR1c19vaykgeworICAgICAgICAgICAgcHJpbnRmKCJwYXNzZWRcbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnRmKCJmYWlsZWRcbiIpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChkb190aW1pbmdfdGVzdCkgeworICAgICAgICBjb25zdCBzcnRwX3BvbGljeV90ICoqcG9saWN5ID0gcG9saWN5X2FycmF5OworCisgICAgICAgIC8qIGxvb3Agb3ZlciBwb2xpY2llcywgcnVuIHRpbWluZyB0ZXN0IGZvciBlYWNoICovCisgICAgICAgIHdoaWxlICgqcG9saWN5ICE9IE5VTEwpIHsKKyAgICAgICAgICAgIHNydHBfcHJpbnRfcG9saWN5KCpwb2xpY3kpOworICAgICAgICAgICAgc3J0cF9kb190aW1pbmcoKnBvbGljeSk7CisgICAgICAgICAgICBwb2xpY3krKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChkb19yZWplY3Rpb25fdGVzdCkgeworICAgICAgICBjb25zdCBzcnRwX3BvbGljeV90ICoqcG9saWN5ID0gcG9saWN5X2FycmF5OworCisgICAgICAgIC8qIGxvb3Agb3ZlciBwb2xpY2llcywgcnVuIHJlamVjdGlvbiB0aW1pbmcgdGVzdCBmb3IgZWFjaCAqLworICAgICAgICB3aGlsZSAoKnBvbGljeSAhPSBOVUxMKSB7CisgICAgICAgICAgICBzcnRwX3ByaW50X3BvbGljeSgqcG9saWN5KTsKKyAgICAgICAgICAgIHNydHBfZG9fcmVqZWN0aW9uX3RpbWluZygqcG9saWN5KTsKKyAgICAgICAgICAgIHBvbGljeSsrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGRvX2NvZGVjX3RpbWluZykgeworICAgICAgICBzcnRwX3BvbGljeV90IHBvbGljeTsKKyAgICAgICAgaW50IGlnbm9yZTsKKyAgICAgICAgZG91YmxlIG1pcHNfdmFsdWUgPSBtaXBzX2VzdGltYXRlKDEwMDAwMDAwMDAsICZpZ25vcmUpOworCisgICAgICAgIG1lbXNldCgmcG9saWN5LCAwLCBzaXplb2YocG9saWN5KSk7CisgICAgICAgIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfcnRwX2RlZmF1bHQoJnBvbGljeS5ydHApOworICAgICAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X3J0Y3BfZGVmYXVsdCgmcG9saWN5LnJ0Y3ApOworICAgICAgICBwb2xpY3kuc3NyYy50eXBlID0gc3NyY19zcGVjaWZpYzsKKyAgICAgICAgcG9saWN5LnNzcmMudmFsdWUgPSAweGRlY2FmYmFkOworICAgICAgICBwb2xpY3kua2V5ID0gdGVzdF9rZXk7CisgICAgICAgIHBvbGljeS5la3QgPSBOVUxMOworICAgICAgICBwb2xpY3kud2luZG93X3NpemUgPSAxMjg7CisgICAgICAgIHBvbGljeS5hbGxvd19yZXBlYXRfdHggPSAwOworICAgICAgICBwb2xpY3kubmV4dCA9IE5VTEw7CisKKyAgICAgICAgcHJpbnRmKCJtaXBzIGVzdGltYXRlOiAlZVxuIiwgbWlwc192YWx1ZSk7CisKKyAgICAgICAgcHJpbnRmKCJ0ZXN0aW5nIHNydHAgcHJvY2Vzc2luZyB0aW1lIGZvciB2b2ljZSBjb2RlY3M6XG4iKTsKKyAgICAgICAgcHJpbnRmKCJjb2RlY1x0XHRsZW5ndGggKG9jdGV0cylcdFx0c3J0cCBpbnN0cnVjdGlvbnMvc2Vjb25kXG4iKTsKKyAgICAgICAgcHJpbnRmKCJHLjcxMVx0XHQlZFx0XHRcdCVlXG4iLCA4MCwKKyAgICAgICAgICAgICAgIChkb3VibGUpbWlwc192YWx1ZSAqICg4MCAqIDgpIC8KKyAgICAgICAgICAgICAgICAgICBzcnRwX2JpdHNfcGVyX3NlY29uZCg4MCwgJnBvbGljeSkgLyAuMDEpOworICAgICAgICBwcmludGYoIkcuNzExXHRcdCVkXHRcdFx0JWVcbiIsIDE2MCwKKyAgICAgICAgICAgICAgIChkb3VibGUpbWlwc192YWx1ZSAqICgxNjAgKiA4KSAvCisgICAgICAgICAgICAgICAgICAgc3J0cF9iaXRzX3Blcl9zZWNvbmQoMTYwLCAmcG9saWN5KSAvIC4wMik7CisgICAgICAgIHByaW50ZigiRy43MjYtMzJcdCVkXHRcdFx0JWVcbiIsIDQwLAorICAgICAgICAgICAgICAgKGRvdWJsZSltaXBzX3ZhbHVlICogKDQwICogOCkgLworICAgICAgICAgICAgICAgICAgIHNydHBfYml0c19wZXJfc2Vjb25kKDQwLCAmcG9saWN5KSAvIC4wMSk7CisgICAgICAgIHByaW50ZigiRy43MjYtMzJcdCVkXHRcdFx0JWVcbiIsIDgwLAorICAgICAgICAgICAgICAgKGRvdWJsZSltaXBzX3ZhbHVlICogKDgwICogOCkgLworICAgICAgICAgICAgICAgICAgIHNydHBfYml0c19wZXJfc2Vjb25kKDgwLCAmcG9saWN5KSAvIC4wMik7CisgICAgICAgIHByaW50ZigiRy43MjlcdFx0JWRcdFx0XHQlZVxuIiwgMTAsCisgICAgICAgICAgICAgICAoZG91YmxlKW1pcHNfdmFsdWUgKiAoMTAgKiA4KSAvCisgICAgICAgICAgICAgICAgICAgc3J0cF9iaXRzX3Blcl9zZWNvbmQoMTAsICZwb2xpY3kpIC8gLjAxKTsKKyAgICAgICAgcHJpbnRmKCJHLjcyOVx0XHQlZFx0XHRcdCVlXG4iLCAyMCwKKyAgICAgICAgICAgICAgIChkb3VibGUpbWlwc192YWx1ZSAqICgyMCAqIDgpIC8KKyAgICAgICAgICAgICAgICAgICBzcnRwX2JpdHNfcGVyX3NlY29uZCgyMCwgJnBvbGljeSkgLyAuMDIpOworICAgICAgICBwcmludGYoIldpZGViYW5kXHQlZFx0XHRcdCVlXG4iLCAzMjAsCisgICAgICAgICAgICAgICAoZG91YmxlKW1pcHNfdmFsdWUgKiAoMzIwICogOCkgLworICAgICAgICAgICAgICAgICAgIHNydHBfYml0c19wZXJfc2Vjb25kKDMyMCwgJnBvbGljeSkgLyAuMDEpOworICAgICAgICBwcmludGYoIldpZGViYW5kXHQlZFx0XHRcdCVlXG4iLCA2NDAsCisgICAgICAgICAgICAgICAoZG91YmxlKW1pcHNfdmFsdWUgKiAoNjQwICogOCkgLworICAgICAgICAgICAgICAgICAgIHNydHBfYml0c19wZXJfc2Vjb25kKDY0MCwgJnBvbGljeSkgLyAuMDIpOworICAgIH0KKworICAgIHN0YXR1cyA9IHNydHBfc2h1dGRvd24oKTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHByaW50ZigiZXJyb3I6IHNydHAgc2h1dGRvd24gZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgc3RhdHVzKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKIH0KIAotCi0KIC8qCiAgKiBzcnRwX2NyZWF0ZV90ZXN0X3BhY2tldChsZW4sIHNzcmMpIHJldHVybnMgYSBwb2ludGVyIHRvIGEKICAqIChtYWxsb2NlZCkgZXhhbXBsZSBSVFAgcGFja2V0IHdob3NlIGRhdGEgZmllbGQgaGFzIHRoZSBsZW5ndGggZ2l2ZW4KQEAgLTM0Nyw0NzAgKzY0Niw5MDUgQEAKICAqIGRlYWxsb2NhdGVkIHdpdGggdGhlIGZyZWUoKSBjYWxsIG9uY2UgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KICAqLwogCi1zcnRwX2hkcl90ICoKLXNydHBfY3JlYXRlX3Rlc3RfcGFja2V0KGludCBwa3Rfb2N0ZXRfbGVuLCB1aW50MzJfdCBzc3JjKSB7Ci0gIGludCBpOwotICBvY3RldF90ICpidWZmZXI7Ci0gIHNydHBfaGRyX3QgKmhkcjsKLSAgaW50IGJ5dGVzX2luX2hkciA9IDEyOworc3J0cF9oZHJfdCAqc3J0cF9jcmVhdGVfdGVzdF9wYWNrZXQoaW50IHBrdF9vY3RldF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpwa3RfbGVuKQoreworICAgIGludCBpOworICAgIHVpbnQ4X3QgKmJ1ZmZlcjsKKyAgICBzcnRwX2hkcl90ICpoZHI7CisgICAgaW50IGJ5dGVzX2luX2hkciA9IDEyOwogCi0gIC8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGVzdCBwYWNrZXQgKi8KLSAgaGRyID0gbWFsbG9jKHBrdF9vY3RldF9sZW4gKyBieXRlc19pbl9oZHIKLQkgICAgICAgKyBTUlRQX01BWF9UUkFJTEVSX0xFTiArIDQpOwotICBpZiAoIWhkcikKLSAgICByZXR1cm4gTlVMTDsKLSAgCi0gIGhkci0+dmVyc2lvbiA9IDI7ICAgICAgICAgICAgICAvKiBSVFAgdmVyc2lvbiB0d28gICAgICovCi0gIGhkci0+cCAgICA9IDA7ICAgICAgICAgICAgICAgICAvKiBubyBwYWRkaW5nIG5lZWRlZCAgICovCi0gIGhkci0+eCAgICA9IDA7ICAgICAgICAgICAgICAgICAvKiBubyBoZWFkZXIgZXh0ZW5zaW9uICovCi0gIGhkci0+Y2MgICA9IDA7ICAgICAgICAgICAgICAgICAvKiBubyBDU1JDcyAgICAgICAgICAgICovCi0gIGhkci0+bSAgICA9IDA7ICAgICAgICAgICAgICAgICAvKiBtYXJrZXIgYml0ICAgICAgICAgICovCi0gIGhkci0+cHQgICA9IDB4ZjsgICAgICAgICAgICAgICAvKiBwYXlsb2FkIHR5cGUgICAgICAgICovCi0gIGhkci0+c2VxICA9IGh0b25zKDB4MTIzNCk7ICAgICAvKiBzZXF1ZW5jZSBudW1iZXIgICAgICovCi0gIGhkci0+dHMgICA9IGh0b25sKDB4ZGVjYWZiYWQpOyAvKiB0aW1lc3RhbXAgICAgICAgICAgICovCi0gIGhkci0+c3NyYyA9IGh0b25sKHNzcmMpOyAgICAgICAvKiBzeW5jaC4gc291cmNlICAgICAgICovCisgICAgLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0ZXN0IHBhY2tldCAqLworICAgIGhkciA9IChzcnRwX2hkcl90ICopbWFsbG9jKHBrdF9vY3RldF9sZW4gKyBieXRlc19pbl9oZHIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSVFBfTUFYX1RSQUlMRVJfTEVOICsgNCk7CisgICAgaWYgKCFoZHIpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gIGJ1ZmZlciA9IChvY3RldF90ICopaGRyOwotICBidWZmZXIgKz0gYnl0ZXNfaW5faGRyOworICAgIGhkci0+dmVyc2lvbiA9IDI7ICAgICAgICAgICAgLyogUlRQIHZlcnNpb24gdHdvICAgICAqLworICAgIGhkci0+cCA9IDA7ICAgICAgICAgICAgICAgICAgLyogbm8gcGFkZGluZyBuZWVkZWQgICAqLworICAgIGhkci0+eCA9IDA7ICAgICAgICAgICAgICAgICAgLyogbm8gaGVhZGVyIGV4dGVuc2lvbiAqLworICAgIGhkci0+Y2MgPSAwOyAgICAgICAgICAgICAgICAgLyogbm8gQ1NSQ3MgICAgICAgICAgICAqLworICAgIGhkci0+bSA9IDA7ICAgICAgICAgICAgICAgICAgLyogbWFya2VyIGJpdCAgICAgICAgICAqLworICAgIGhkci0+cHQgPSAweGY7ICAgICAgICAgICAgICAgLyogcGF5bG9hZCB0eXBlICAgICAgICAqLworICAgIGhkci0+c2VxID0gaHRvbnMoMHgxMjM0KTsgICAgLyogc2VxdWVuY2UgbnVtYmVyICAgICAqLworICAgIGhkci0+dHMgPSBodG9ubCgweGRlY2FmYmFkKTsgLyogdGltZXN0YW1wICAgICAgICAgICAqLworICAgIGhkci0+c3NyYyA9IGh0b25sKHNzcmMpOyAgICAgLyogc3luY2guIHNvdXJjZSAgICAgICAqLwogCi0gIC8qIHNldCBSVFAgZGF0YSB0byAweGFiICovCi0gIGZvciAoaT0wOyBpIDwgcGt0X29jdGV0X2xlbjsgaSsrKQotICAgICpidWZmZXIrKyA9IDB4YWI7CisgICAgYnVmZmVyID0gKHVpbnQ4X3QgKiloZHI7CisgICAgYnVmZmVyICs9IGJ5dGVzX2luX2hkcjsKIAotICAvKiBzZXQgcG9zdC1kYXRhIHZhbHVlIHRvIDB4ZmZmZiB0byBlbmFibGUgb3ZlcnJ1biBjaGVja2luZyAqLwotICBmb3IgKGk9MDsgaSA8IFNSVFBfTUFYX1RSQUlMRVJfTEVOKzQ7IGkrKykKLSAgICAqYnVmZmVyKysgPSAweGZmOworICAgIC8qIHNldCBSVFAgZGF0YSB0byAweGFiICovCisgICAgZm9yIChpID0gMDsgaSA8IHBrdF9vY3RldF9sZW47IGkrKykgeworICAgICAgICAqYnVmZmVyKysgPSAweGFiOworICAgIH0KIAotICByZXR1cm4gaGRyOworICAgIC8qIHNldCBwb3N0LWRhdGEgdmFsdWUgdG8gMHhmZmZmIHRvIGVuYWJsZSBvdmVycnVuIGNoZWNraW5nICovCisgICAgZm9yIChpID0gMDsgaSA8IFNSVFBfTUFYX1RSQUlMRVJfTEVOICsgNDsgaSsrKSB7CisgICAgICAgICpidWZmZXIrKyA9IDB4ZmY7CisgICAgfQorCisgICAgKnBrdF9sZW4gPSBieXRlc19pbl9oZHIgKyBwa3Rfb2N0ZXRfbGVuOworCisgICAgcmV0dXJuIGhkcjsKIH0KIAotdm9pZAotc3J0cF9kb190aW1pbmcoY29uc3Qgc3J0cF9wb2xpY3lfdCAqcG9saWN5KSB7Ci0gIGludCBsZW47CitzdGF0aWMgc3J0cF9oZHJfdCAqc3J0cF9jcmVhdGVfdGVzdF9wYWNrZXRfZXh0ZW5kZWQoaW50IHBrdF9vY3RldF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3NyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpwa3RfbGVuKQoreworICAgIHNydHBfaGRyX3QgKmhkcjsKIAotICAvKgotICAgKiBub3RlOiB0aGUgb3V0cHV0IG9mIHRoaXMgZnVuY3Rpb24gaXMgZm9ybWF0dGVkIHNvIHRoYXQgaXQKLSAgICogY2FuIGJlIHVzZWQgaW4gZ251cGxvdC4gICcjJyBpbmRpY2F0ZXMgYSBjb21tZW50LCBhbmQgIlxyXG4iCi0gICAqIHRlcm1pbmF0ZXMgYSByZWNvcmQKLSAgICovCi0gIAotICBwcmludGYoIiMgdGVzdGluZyBzcnRwIHRocm91Z2hwdXQ6XHJcbiIpOwotICBwcmludGYoIiMgbWVzZyBsZW5ndGggKG9jdGV0cylcdHRocm91Z2hwdXQgKG1lZ2FiaXRzIHBlciBzZWNvbmQpXHJcbiIpOwotICAKLSAgZm9yIChsZW49MTY7IGxlbiA8PSAyMDQ4OyBsZW4gKj0gMikKLSAgICBwcmludGYoIiVkXHRcdFx0JWZcclxuIiwgbGVuLCAKLQkgICBzcnRwX2JpdHNfcGVyX3NlY29uZChsZW4sIHBvbGljeSkgLyAxLjBFNik7Ci0gIAotICAvKiB0aGVzZSBleHRyYSBsaW5lZmVlZHMgbGV0IGdudXBsb3Qga25vdyB0aGF0IGEgZGF0YXNldCBpcyBkb25lICovCi0gIHByaW50ZigiXHJcblxyXG4iKTsgIAorICAgIGhkciA9IHNydHBfY3JlYXRlX3Rlc3RfcGFja2V0KHBrdF9vY3RldF9sZW4sIHNzcmMsIHBrdF9sZW4pOworICAgIGlmIChoZHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIGhkcjsKIAorICAgIGhkci0+c2VxID0gaHRvbnMoc2VxKTsKKyAgICBoZHItPnRzID0gaHRvbmwodHMpOworICAgIHJldHVybiBoZHI7CiB9CiAKLXZvaWQKLXNydHBfZG9fcmVqZWN0aW9uX3RpbWluZyhjb25zdCBzcnRwX3BvbGljeV90ICpwb2xpY3kpIHsKLSAgaW50IGxlbjsKK3NydHBfaGRyX3QgKnNydHBfY3JlYXRlX3Rlc3RfcGFja2V0X2V4dF9oZHIoaW50IHBrdF9vY3RldF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqcGt0X2xlbikKK3sKKyAgICBpbnQgaTsKKyAgICB1aW50OF90ICpidWZmZXI7CisgICAgc3J0cF9oZHJfdCAqaGRyOworICAgIGludCBieXRlc19pbl9oZHIgPSAxMjsKKyAgICB1aW50OF90IGV4dGVuc2lvbl9oZWFkZXJbMTJdID0geyAvKiBvbmUtYnl0ZSBoZWFkZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGJlLCAweGRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNpemUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlkIDEsIGxlbmd0aCAxIChpLmUuIDIgYnl0ZXMpICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwYXlsb2FkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjYSwgMHhmZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwYWRkaW5nICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZCAyLCBsZW5ndGggMCAoaS5lLiAxIGJ5dGUpICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwYXlsb2FkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhiYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwYWRkaW5nICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMAorICAgIH07CiAKLSAgLyoKLSAgICogbm90ZTogdGhlIG91dHB1dCBvZiB0aGlzIGZ1bmN0aW9uIGlzIGZvcm1hdHRlZCBzbyB0aGF0IGl0Ci0gICAqIGNhbiBiZSB1c2VkIGluIGdudXBsb3QuICAnIycgaW5kaWNhdGVzIGEgY29tbWVudCwgYW5kICJcclxuIgotICAgKiB0ZXJtaW5hdGVzIGEgcmVjb3JkCi0gICAqLwotICAKLSAgcHJpbnRmKCIjIHRlc3Rpbmcgc3J0cCByZWplY3Rpb24gdGhyb3VnaHB1dDpcclxuIik7Ci0gIHByaW50ZigiIyBtZXNnIGxlbmd0aCAob2N0ZXRzKVx0cmVqZWN0aW9ucyBwZXIgc2Vjb25kXHJcbiIpOwotICAKLSAgZm9yIChsZW49ODsgbGVuIDw9IDIwNDg7IGxlbiAqPSAyKQotICAgIHByaW50ZigiJWRcdFx0XHQlZVxyXG4iLCBsZW4sIHNydHBfcmVqZWN0aW9uc19wZXJfc2Vjb25kKGxlbiwgcG9saWN5KSk7Ci0gIAotICAvKiB0aGVzZSBleHRyYSBsaW5lZmVlZHMgbGV0IGdudXBsb3Qga25vdyB0aGF0IGEgZGF0YXNldCBpcyBkb25lICovCi0gIHByaW50ZigiXHJcblxyXG4iKTsgIAorICAgIC8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGVzdCBwYWNrZXQgKi8KKyAgICBoZHIgPSAoc3J0cF9oZHJfdCAqKW1hbGxvYyhwa3Rfb2N0ZXRfbGVuICsgYnl0ZXNfaW5faGRyICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZXh0ZW5zaW9uX2hlYWRlcikgKyBTUlRQX01BWF9UUkFJTEVSX0xFTiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCk7CisgICAgaWYgKCFoZHIpCisgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgaGRyLT52ZXJzaW9uID0gMjsgICAgICAgICAgICAvKiBSVFAgdmVyc2lvbiB0d28gICAgICovCisgICAgaGRyLT5wID0gMDsgICAgICAgICAgICAgICAgICAvKiBubyBwYWRkaW5nIG5lZWRlZCAgICovCisgICAgaGRyLT54ID0gMTsgICAgICAgICAgICAgICAgICAvKiBubyBoZWFkZXIgZXh0ZW5zaW9uICovCisgICAgaGRyLT5jYyA9IDA7ICAgICAgICAgICAgICAgICAvKiBubyBDU1JDcyAgICAgICAgICAgICovCisgICAgaGRyLT5tID0gMDsgICAgICAgICAgICAgICAgICAvKiBtYXJrZXIgYml0ICAgICAgICAgICovCisgICAgaGRyLT5wdCA9IDB4ZjsgICAgICAgICAgICAgICAvKiBwYXlsb2FkIHR5cGUgICAgICAgICovCisgICAgaGRyLT5zZXEgPSBodG9ucygweDEyMzQpOyAgICAvKiBzZXF1ZW5jZSBudW1iZXIgICAgICovCisgICAgaGRyLT50cyA9IGh0b25sKDB4ZGVjYWZiYWQpOyAvKiB0aW1lc3RhbXAgICAgICAgICAgICovCisgICAgaGRyLT5zc3JjID0gaHRvbmwoc3NyYyk7ICAgICAvKiBzeW5jaC4gc291cmNlICAgICAgICovCisKKyAgICBidWZmZXIgPSAodWludDhfdCAqKWhkcjsKKyAgICBidWZmZXIgKz0gYnl0ZXNfaW5faGRyOworCisgICAgbWVtY3B5KGJ1ZmZlciwgZXh0ZW5zaW9uX2hlYWRlciwgc2l6ZW9mKGV4dGVuc2lvbl9oZWFkZXIpKTsKKyAgICBidWZmZXIgKz0gc2l6ZW9mKGV4dGVuc2lvbl9oZWFkZXIpOworCisgICAgLyogc2V0IFJUUCBkYXRhIHRvIDB4YWIgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgcGt0X29jdGV0X2xlbjsgaSsrKQorICAgICAgICAqYnVmZmVyKysgPSAweGFiOworCisgICAgLyogc2V0IHBvc3QtZGF0YSB2YWx1ZSB0byAweGZmZmYgdG8gZW5hYmxlIG92ZXJydW4gY2hlY2tpbmcgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgU1JUUF9NQVhfVFJBSUxFUl9MRU4gKyA0OyBpKyspCisgICAgICAgICpidWZmZXIrKyA9IDB4ZmY7CisKKyAgICAqcGt0X2xlbiA9IGJ5dGVzX2luX2hkciArIHNpemVvZihleHRlbnNpb25faGVhZGVyKSArIHBrdF9vY3RldF9sZW47CisKKyAgICByZXR1cm4gaGRyOwogfQogCit2b2lkIHNydHBfZG9fdGltaW5nKGNvbnN0IHNydHBfcG9saWN5X3QgKnBvbGljeSkKK3sKKyAgICBpbnQgbGVuOworCisgICAgLyoKKyAgICAgKiBub3RlOiB0aGUgb3V0cHV0IG9mIHRoaXMgZnVuY3Rpb24gaXMgZm9ybWF0dGVkIHNvIHRoYXQgaXQKKyAgICAgKiBjYW4gYmUgdXNlZCBpbiBnbnVwbG90LiAgJyMnIGluZGljYXRlcyBhIGNvbW1lbnQsIGFuZCAiXHJcbiIKKyAgICAgKiB0ZXJtaW5hdGVzIGEgcmVjb3JkCisgICAgICovCisKKyAgICBwcmludGYoIiMgdGVzdGluZyBzcnRwIHRocm91Z2hwdXQ6XHJcbiIpOworICAgIHByaW50ZigiIyBtZXNnIGxlbmd0aCAob2N0ZXRzKVx0dGhyb3VnaHB1dCAobWVnYWJpdHMgcGVyIHNlY29uZClcclxuIik7CisKKyAgICBmb3IgKGxlbiA9IDE2OyBsZW4gPD0gMjA0ODsgbGVuICo9IDIpIHsKKyAgICAgICAgcHJpbnRmKCIlZFx0XHRcdCVmXHJcbiIsIGxlbiwKKyAgICAgICAgICAgICAgIHNydHBfYml0c19wZXJfc2Vjb25kKGxlbiwgcG9saWN5KSAvIDEuMEU2KTsKKyAgICB9CisKKyAgICAvKiB0aGVzZSBleHRyYSBsaW5lZmVlZHMgbGV0IGdudXBsb3Qga25vdyB0aGF0IGEgZGF0YXNldCBpcyBkb25lICovCisgICAgcHJpbnRmKCJcclxuXHJcbiIpOworfQorCit2b2lkIHNydHBfZG9fcmVqZWN0aW9uX3RpbWluZyhjb25zdCBzcnRwX3BvbGljeV90ICpwb2xpY3kpCit7CisgICAgaW50IGxlbjsKKworICAgIC8qCisgICAgICogbm90ZTogdGhlIG91dHB1dCBvZiB0aGlzIGZ1bmN0aW9uIGlzIGZvcm1hdHRlZCBzbyB0aGF0IGl0CisgICAgICogY2FuIGJlIHVzZWQgaW4gZ251cGxvdC4gICcjJyBpbmRpY2F0ZXMgYSBjb21tZW50LCBhbmQgIlxyXG4iCisgICAgICogdGVybWluYXRlcyBhIHJlY29yZAorICAgICAqLworCisgICAgcHJpbnRmKCIjIHRlc3Rpbmcgc3J0cCByZWplY3Rpb24gdGhyb3VnaHB1dDpcclxuIik7CisgICAgcHJpbnRmKCIjIG1lc2cgbGVuZ3RoIChvY3RldHMpXHRyZWplY3Rpb25zIHBlciBzZWNvbmRcclxuIik7CisKKyAgICBmb3IgKGxlbiA9IDg7IGxlbiA8PSAyMDQ4OyBsZW4gKj0gMikgeworICAgICAgICBwcmludGYoIiVkXHRcdFx0JWVcclxuIiwgbGVuLCBzcnRwX3JlamVjdGlvbnNfcGVyX3NlY29uZChsZW4sIHBvbGljeSkpOworICAgIH0KKworICAgIC8qIHRoZXNlIGV4dHJhIGxpbmVmZWVkcyBsZXQgZ251cGxvdCBrbm93IHRoYXQgYSBkYXRhc2V0IGlzIGRvbmUgKi8KKyAgICBwcmludGYoIlxyXG5cclxuIik7Cit9CiAKICNkZWZpbmUgTUFYX01TR19MRU4gMTAyNAogCi1kb3VibGUKLXNydHBfYml0c19wZXJfc2Vjb25kKGludCBtc2dfbGVuX29jdGV0cywgY29uc3Qgc3J0cF9wb2xpY3lfdCAqcG9saWN5KSB7Ci0gIHNydHBfdCBzcnRwOwotICBzcnRwX2hkcl90ICptZXNnOyAgCi0gIGludCBpOwotICBjbG9ja190IHRpbWVyOwotICBpbnQgbnVtX3RyaWFscyA9IDEwMDAwMDsKLSAgaW50IGxlbjsKLSAgdWludDMyX3Qgc3NyYzsKLSAgZXJyX3N0YXR1c190IHN0YXR1czsKK2RvdWJsZSBzcnRwX2JpdHNfcGVyX3NlY29uZChpbnQgbXNnX2xlbl9vY3RldHMsIGNvbnN0IHNydHBfcG9saWN5X3QgKnBvbGljeSkKK3sKKyAgICBzcnRwX3Qgc3J0cDsKKyAgICBzcnRwX2hkcl90ICptZXNnOworICAgIGludCBpOworICAgIGNsb2NrX3QgdGltZXI7CisgICAgaW50IG51bV90cmlhbHMgPSAxMDAwMDA7CisgICAgaW50IGlucHV0X2xlbiwgbGVuOworICAgIHVpbnQzMl90IHNzcmM7CisgICAgc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdHVzOwogCi0gIC8qCi0gICAqIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIHNydHAgc2Vzc2lvbgotICAgKi8KLSAgc3RhdHVzID0gc3J0cF9jcmVhdGUoJnNydHAsIHBvbGljeSk7Ci0gIGlmIChzdGF0dXMpIHsKLSAgICBwcmludGYoImVycm9yOiBzcnRwX2NyZWF0ZSgpIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWRcbiIsIHN0YXR1cyk7Ci0gICAgZXhpdCgxKTsKLSAgfQotCi0gIC8qCi0gICAqIGlmIHRoZSBzc3JjIGlzIHVuc3BlY2lmaWVkLCB1c2UgYSBwcmVkZXRlcm1pbmVkIG9uZQotICAgKi8KLSAgaWYgKHBvbGljeS0+c3NyYy50eXBlICE9IHNzcmNfc3BlY2lmaWMpIHsKLSAgICBzc3JjID0gMHhkZWFkYmVlZjsKLSAgfSBlbHNlIHsKLSAgICBzc3JjID0gcG9saWN5LT5zc3JjLnZhbHVlOwotICB9Ci0KLSAgLyoKLSAgICogY3JlYXRlIGEgdGVzdCBwYWNrZXQKLSAgICovCi0gIG1lc2cgPSBzcnRwX2NyZWF0ZV90ZXN0X3BhY2tldChtc2dfbGVuX29jdGV0cywgc3NyYyk7Ci0gIGlmIChtZXNnID09IE5VTEwpCi0gICAgcmV0dXJuIDAuMDsgICAvKiBpbmRpY2F0ZSBmYWlsdXJlIGJ5IHJldHVybmluZyB6ZXJvICovCi0gIAotICB0aW1lciA9IGNsb2NrKCk7Ci0gIGZvciAoaT0wOyBpIDwgbnVtX3RyaWFsczsgaSsrKSB7Ci0gICAgZXJyX3N0YXR1c190IHN0YXR1czsKLSAgICBsZW4gPSBtc2dfbGVuX29jdGV0czsKLSAgICAKLSAgICAvKiBzcnRwIHByb3RlY3QgbWVzc2FnZSAqLwotICAgIHN0YXR1cyA9IHNydHBfcHJvdGVjdChzcnRwLCBtZXNnLCAmbGVuKTsKKyAgICAvKgorICAgICAqIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIHNydHAgc2Vzc2lvbgorICAgICAqLworICAgIHN0YXR1cyA9IHNydHBfY3JlYXRlKCZzcnRwLCBwb2xpY3kpOwogICAgIGlmIChzdGF0dXMpIHsKLSAgICAgIHByaW50ZigiZXJyb3I6IHNydHBfcHJvdGVjdCgpIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWRcbiIsIHN0YXR1cyk7Ci0gICAgICBleGl0KDEpOworICAgICAgICBwcmludGYoImVycm9yOiBzcnRwX2NyZWF0ZSgpIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWRcbiIsIHN0YXR1cyk7CisgICAgICAgIGV4aXQoMSk7CiAgICAgfQogCi0gICAgLyogaW5jcmVtZW50IG1lc3NhZ2UgbnVtYmVyICovCi0gICAgbWVzZy0+c2VxID0gaHRvbnMobnRvaHMobWVzZy0+c2VxKSArIDEpOworICAgIC8qCisgICAgICogaWYgdGhlIHNzcmMgaXMgdW5zcGVjaWZpZWQsIHVzZSBhIHByZWRldGVybWluZWQgb25lCisgICAgICovCisgICAgaWYgKHBvbGljeS0+c3NyYy50eXBlICE9IHNzcmNfc3BlY2lmaWMpIHsKKyAgICAgICAgc3NyYyA9IDB4ZGVhZGJlZWY7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3NyYyA9IHBvbGljeS0+c3NyYy52YWx1ZTsKKyAgICB9CiAKLSAgfQotICB0aW1lciA9IGNsb2NrKCkgLSB0aW1lcjsKKyAgICAvKgorICAgICAqIGNyZWF0ZSBhIHRlc3QgcGFja2V0CisgICAgICovCisgICAgbWVzZyA9IHNydHBfY3JlYXRlX3Rlc3RfcGFja2V0KG1zZ19sZW5fb2N0ZXRzLCBzc3JjLCAmaW5wdXRfbGVuKTsKKyAgICBpZiAobWVzZyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAwLjA7IC8qIGluZGljYXRlIGZhaWx1cmUgYnkgcmV0dXJuaW5nIHplcm8gKi8KKyAgICB9CisgICAgdGltZXIgPSBjbG9jaygpOworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fdHJpYWxzOyBpKyspIHsKKyAgICAgICAgbGVuID0gaW5wdXRfbGVuOworICAgICAgICAvKiBzcnRwIHByb3RlY3QgbWVzc2FnZSAqLworICAgICAgICBzdGF0dXMgPSBzcnRwX3Byb3RlY3Qoc3J0cCwgbWVzZywgJmxlbik7CisgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgICAgIHByaW50ZigiZXJyb3I6IHNydHBfcHJvdGVjdCgpIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWRcbiIsIHN0YXR1cyk7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CiAKLSAgZnJlZShtZXNnKTsKLSAgCi0gIHJldHVybiAoZG91YmxlKSAobXNnX2xlbl9vY3RldHMpICogOCAqCi0gICAgICAgICAgICAgICAgICBudW1fdHJpYWxzICogQ0xPQ0tTX1BFUl9TRUMgLyB0aW1lcjsgICAKKyAgICAgICAgLyogaW5jcmVtZW50IG1lc3NhZ2UgbnVtYmVyICovCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIGhhY2sgc2VxdWVuY2UgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBtYWNyb3MgZm9yIGh0b25zL250b2hzIG9uCisgICAgICAgICAgICAgKiBzb21lIHN5c3RlbXMgKi8KKyAgICAgICAgICAgIHNob3J0IG5ld19zZXEgPSBudG9ocyhtZXNnLT5zZXEpICsgMTsKKyAgICAgICAgICAgIG1lc2ctPnNlcSA9IGh0b25zKG5ld19zZXEpOworICAgICAgICB9CisgICAgfQorICAgIHRpbWVyID0gY2xvY2soKSAtIHRpbWVyOworCisgICAgZnJlZShtZXNnKTsKKworICAgIHN0YXR1cyA9IHNydHBfZGVhbGxvYyhzcnRwKTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHByaW50ZigiZXJyb3I6IHNydHBfZGVhbGxvYygpIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWRcbiIsIHN0YXR1cyk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgcmV0dXJuIChkb3VibGUpKG1zZ19sZW5fb2N0ZXRzKSo4ICogbnVtX3RyaWFscyAqIENMT0NLU19QRVJfU0VDIC8gdGltZXI7CiB9CiAKLWRvdWJsZQotc3J0cF9yZWplY3Rpb25zX3Blcl9zZWNvbmQoaW50IG1zZ19sZW5fb2N0ZXRzLCBjb25zdCBzcnRwX3BvbGljeV90ICpwb2xpY3kpIHsKLSAgc3J0cF9jdHhfdCAqc3J0cDsKLSAgc3J0cF9oZHJfdCAqbWVzZzsgCi0gIGludCBpOwotICBpbnQgbGVuOwotICBjbG9ja190IHRpbWVyOwotICBpbnQgbnVtX3RyaWFscyA9IDEwMDAwMDA7Ci0gIHVpbnQzMl90IHNzcmMgPSBwb2xpY3ktPnNzcmMudmFsdWU7Ci0gIGVycl9zdGF0dXNfdCBzdGF0dXM7Citkb3VibGUgc3J0cF9yZWplY3Rpb25zX3Blcl9zZWNvbmQoaW50IG1zZ19sZW5fb2N0ZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNydHBfcG9saWN5X3QgKnBvbGljeSkKK3sKKyAgICBzcnRwX2N0eF90ICpzcnRwOworICAgIHNydHBfaGRyX3QgKm1lc2c7CisgICAgaW50IGk7CisgICAgaW50IGxlbjsKKyAgICBjbG9ja190IHRpbWVyOworICAgIGludCBudW1fdHJpYWxzID0gMTAwMDAwMDsKKyAgICB1aW50MzJfdCBzc3JjID0gcG9saWN5LT5zc3JjLnZhbHVlOworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKIAotICAvKgotICAgKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhbiBzcnRwIHNlc3Npb24KLSAgICovCi0gIHN0YXR1cyA9IHNydHBfY3JlYXRlKCZzcnRwLCBwb2xpY3kpOwotICBpZiAoc3RhdHVzKSB7Ci0gICAgcHJpbnRmKCJlcnJvcjogc3J0cF9jcmVhdGUoKSBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLCBzdGF0dXMpOworICAgIC8qCisgICAgICogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gc3J0cCBzZXNzaW9uCisgICAgICovCisgICAgc3RhdHVzID0gc3J0cF9jcmVhdGUoJnNydHAsIHBvbGljeSk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICBwcmludGYoImVycm9yOiBzcnRwX2NyZWF0ZSgpIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWRcbiIsIHN0YXR1cyk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgbWVzZyA9IHNydHBfY3JlYXRlX3Rlc3RfcGFja2V0KG1zZ19sZW5fb2N0ZXRzLCBzc3JjLCAmbGVuKTsKKyAgICBpZiAobWVzZyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAwLjA7IC8qIGluZGljYXRlIGZhaWx1cmUgYnkgcmV0dXJuaW5nIHplcm8gKi8KKyAgICB9CisgICAgc3J0cF9wcm90ZWN0KHNydHAsIChzcnRwX2hkcl90ICopbWVzZywgJmxlbik7CisKKyAgICB0aW1lciA9IGNsb2NrKCk7CisgICAgZm9yIChpID0gMDsgaSA8IG51bV90cmlhbHM7IGkrKykgeworICAgICAgICBsZW4gPSBtc2dfbGVuX29jdGV0czsKKyAgICAgICAgc3J0cF91bnByb3RlY3Qoc3J0cCwgKHNydHBfaGRyX3QgKiltZXNnLCAmbGVuKTsKKyAgICB9CisgICAgdGltZXIgPSBjbG9jaygpIC0gdGltZXI7CisKKyAgICBmcmVlKG1lc2cpOworCisgICAgc3RhdHVzID0gc3J0cF9kZWFsbG9jKHNydHApOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcHJpbnRmKCJlcnJvcjogc3J0cF9kZWFsbG9jKCkgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgc3RhdHVzKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICByZXR1cm4gKGRvdWJsZSludW1fdHJpYWxzICogQ0xPQ0tTX1BFUl9TRUMgLyB0aW1lcjsKK30KKwordm9pZCBlcnJfY2hlY2soc3J0cF9lcnJfc3RhdHVzX3QgcykKK3sKKyAgICBpZiAocyA9PSBzcnRwX2Vycl9zdGF0dXNfb2spIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3I6IHVuZXhwZWN0ZWQgc3J0cCBmYWlsdXJlIChjb2RlICVkKVxuIiwgcyk7CisgICAgfQogICAgIGV4aXQoMSk7Ci0gIH0gCi0KLSAgbWVzZyA9IHNydHBfY3JlYXRlX3Rlc3RfcGFja2V0KG1zZ19sZW5fb2N0ZXRzLCBzc3JjKTsKLSAgaWYgKG1lc2cgPT0gTlVMTCkKLSAgICByZXR1cm4gMC4wOyAgLyogaW5kaWNhdGUgZmFpbHVyZSBieSByZXR1cm5pbmcgemVybyAqLwotICAKLSAgbGVuID0gbXNnX2xlbl9vY3RldHM7ICAKLSAgc3J0cF9wcm90ZWN0KHNydHAsIChzcnRwX2hkcl90ICopbWVzZywgJmxlbik7Ci0gIAotICB0aW1lciA9IGNsb2NrKCk7Ci0gIGZvciAoaT0wOyBpIDwgbnVtX3RyaWFsczsgaSsrKSB7Ci0gICAgbGVuID0gbXNnX2xlbl9vY3RldHM7Ci0gICAgc3J0cF91bnByb3RlY3Qoc3J0cCwgKHNydHBfaGRyX3QgKiltZXNnLCAmbGVuKTsKLSAgfQotICB0aW1lciA9IGNsb2NrKCkgLSB0aW1lcjsKLQotICBmcmVlKG1lc2cpOwotICAKLSAgcmV0dXJuIChkb3VibGUpIG51bV90cmlhbHMgKiBDTE9DS1NfUEVSX1NFQyAvIHRpbWVyOyAgIAogfQogCi0KLXZvaWQKLWVycl9jaGVjayhlcnJfc3RhdHVzX3QgcykgewotICBpZiAocyA9PSBlcnJfc3RhdHVzX29rKSAKLSAgICByZXR1cm47Ci0gIGVsc2UKLSAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yOiB1bmV4cGVjdGVkIHNydHAgZmFpbHVyZSAoY29kZSAlZClcbiIsIHMpOwotICBleGl0ICgxKTsKK3NydHBfZXJyX3N0YXR1c190IHNydHBfdGVzdF9jYWxsX3Byb3RlY3Qoc3J0cF90IHNydHBfc2VuZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX2hkcl90ICpoZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWtpX2luZGV4KQoreworICAgIGlmIChta2lfaW5kZXggPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfcHJvdGVjdChzcnRwX3NlbmRlciwgaGRyLCBsZW4pOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBzcnRwX3Byb3RlY3RfbWtpKHNydHBfc2VuZGVyLCBoZHIsIGxlbiwgMSwgbWtpX2luZGV4KTsKKyAgICB9CiB9CiAKLWVycl9zdGF0dXNfdAotc3J0cF90ZXN0KGNvbnN0IHNydHBfcG9saWN5X3QgKnBvbGljeSkgewotICBpbnQgaTsKLSAgc3J0cF90IHNydHBfc2VuZGVyOwotICBzcnRwX3Qgc3J0cF9yY3ZyOwotICBlcnJfc3RhdHVzX3Qgc3RhdHVzID0gZXJyX3N0YXR1c19vazsKLSAgc3J0cF9oZHJfdCAqaGRyLCAqaGRyMjsKLSAgb2N0ZXRfdCAqcGt0X2VuZDsKLSAgaW50IG1zZ19sZW5fb2N0ZXRzOwotICBpbnQgbGVuOwotICBpbnQgdGFnX2xlbmd0aCA9IHBvbGljeS0+cnRwLmF1dGhfdGFnX2xlbjsgCi0gIHVpbnQzMl90IHNzcmM7Ci0gIHNydHBfcG9saWN5X3QgKnJjdnJfcG9saWN5Oworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF90ZXN0X2NhbGxfcHJvdGVjdF9ydGNwKHNydHBfdCBzcnRwX3NlbmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnRwX2hkcl90ICpoZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1raV9pbmRleCkKK3sKKyAgICBpZiAobWtpX2luZGV4ID09IC0xKSB7CisgICAgICAgIHJldHVybiBzcnRwX3Byb3RlY3RfcnRjcChzcnRwX3NlbmRlciwgaGRyLCBsZW4pOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBzcnRwX3Byb3RlY3RfcnRjcF9ta2koc3J0cF9zZW5kZXIsIGhkciwgbGVuLCAxLCBta2lfaW5kZXgpOworICAgIH0KK30KIAotICBlcnJfY2hlY2soc3J0cF9jcmVhdGUoJnNydHBfc2VuZGVyLCBwb2xpY3kpKTsKK3NydHBfZXJyX3N0YXR1c190IHNydHBfdGVzdF9jYWxsX3VucHJvdGVjdChzcnRwX3Qgc3J0cF9zZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J0cF9oZHJfdCAqaGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB1c2VfbWtpKQoreworICAgIGlmICh1c2VfbWtpID09IC0xKSB7CisgICAgICAgIHJldHVybiBzcnRwX3VucHJvdGVjdChzcnRwX3NlbmRlciwgaGRyLCBsZW4pOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBzcnRwX3VucHJvdGVjdF9ta2koc3J0cF9zZW5kZXIsIGhkciwgbGVuLCB1c2VfbWtpKTsKKyAgICB9Cit9CiAKLSAgLyogcHJpbnQgb3V0IHBvbGljeSAqLwotICBlcnJfY2hlY2soc3J0cF9zZXNzaW9uX3ByaW50X3BvbGljeShzcnRwX3NlbmRlcikpOyAKK3NydHBfZXJyX3N0YXR1c190IHNydHBfdGVzdF9jYWxsX3VucHJvdGVjdF9ydGNwKHNydHBfdCBzcnRwX3NlbmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNydHBfaGRyX3QgKmhkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHVzZV9ta2kpCit7CisgICAgaWYgKHVzZV9ta2kgPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfdW5wcm90ZWN0X3J0Y3Aoc3J0cF9zZW5kZXIsIGhkciwgbGVuKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gc3J0cF91bnByb3RlY3RfcnRjcF9ta2koc3J0cF9zZW5kZXIsIGhkciwgbGVuLCB1c2VfbWtpKTsKKyAgICB9Cit9CiAKLSAgLyoKLSAgICogaW5pdGlhbGl6ZSBkYXRhIGJ1ZmZlciwgdXNpbmcgdGhlIHNzcmMgaW4gdGhlIHBvbGljeSB1bmxlc3MgdGhhdAotICAgKiB2YWx1ZSBpcyBhIHdpbGRjYXJkLCBpbiB3aGljaCBjYXNlIHdlJ2xsIGp1c3QgdXNlIGFuIGFyYml0cmFyeQotICAgKiBvbmUKLSAgICovCi0gIGlmIChwb2xpY3ktPnNzcmMudHlwZSAhPSBzc3JjX3NwZWNpZmljKQotICAgIHNzcmMgPSAweGRlY2FmYmFkOwotICBlbHNlCi0gICAgc3NyYyA9IHBvbGljeS0+c3NyYy52YWx1ZTsKLSAgbXNnX2xlbl9vY3RldHMgPSAyODsKLSAgaGRyID0gc3J0cF9jcmVhdGVfdGVzdF9wYWNrZXQobXNnX2xlbl9vY3RldHMsIHNzcmMpOworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF90ZXN0KGNvbnN0IHNydHBfcG9saWN5X3QgKnBvbGljeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXh0ZW5zaW9uX2hlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWtpX2luZGV4KQoreworICAgIGludCBpOworICAgIHNydHBfdCBzcnRwX3NlbmRlcjsKKyAgICBzcnRwX3Qgc3J0cF9yY3ZyOworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1cyA9IHNydHBfZXJyX3N0YXR1c19vazsKKyAgICBzcnRwX2hkcl90ICpoZHIsICpoZHIyOworICAgIHVpbnQ4X3QgaGRyX2VuY1s2NF07CisgICAgdWludDhfdCAqcGt0X2VuZDsKKyAgICBpbnQgbXNnX2xlbl9vY3RldHMsIG1zZ19sZW5fZW5jLCBtc2dfbGVuOworICAgIGludCBsZW4sIGxlbjI7CisgICAgdWludDMyX3QgdGFnX2xlbmd0aDsKKyAgICB1aW50MzJfdCBzc3JjOworICAgIHNydHBfcG9saWN5X3QgKnJjdnJfcG9saWN5OworICAgIHNydHBfcG9saWN5X3QgdG1wX3BvbGljeTsKKyAgICBpbnQgaGVhZGVyID0gMTsKKyAgICBpbnQgdXNlX21raSA9IDA7CiAKLSAgaWYgKGhkciA9PSBOVUxMKQotICAgIHJldHVybiBlcnJfc3RhdHVzX2FsbG9jX2ZhaWw7Ci0gIGhkcjIgPSBzcnRwX2NyZWF0ZV90ZXN0X3BhY2tldChtc2dfbGVuX29jdGV0cywgc3NyYyk7Ci0gIGlmIChoZHIyID09IE5VTEwpIHsKLSAgICBmcmVlKGhkcik7Ci0gICAgcmV0dXJuIGVycl9zdGF0dXNfYWxsb2NfZmFpbDsKLSAgfQorICAgIGlmIChta2lfaW5kZXggPj0gMCkKKyAgICAgICAgdXNlX21raSA9IDE7CiAKLSAgLyogc2V0IG1lc3NhZ2UgbGVuZ3RoICovCi0gIGxlbiA9IG1zZ19sZW5fb2N0ZXRzOworICAgIGlmIChleHRlbnNpb25faGVhZGVyKSB7CisgICAgICAgIG1lbWNweSgmdG1wX3BvbGljeSwgcG9saWN5LCBzaXplb2Yoc3J0cF9wb2xpY3lfdCkpOworICAgICAgICB0bXBfcG9saWN5LmVuY194dG5faGRyID0gJmhlYWRlcjsKKyAgICAgICAgdG1wX3BvbGljeS5lbmNfeHRuX2hkcl9jb3VudCA9IDE7CisgICAgICAgIGVycl9jaGVjayhzcnRwX2NyZWF0ZSgmc3J0cF9zZW5kZXIsICZ0bXBfcG9saWN5KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZXJyX2NoZWNrKHNydHBfY3JlYXRlKCZzcnRwX3NlbmRlciwgcG9saWN5KSk7CisgICAgfQogCi0gIGRlYnVnX3ByaW50KG1vZF9kcml2ZXIsICJiZWZvcmUgcHJvdGVjdGlvbjpcbiVzIiwgCSAgICAgIAotCSAgICAgIHNydHBfcGFja2V0X3RvX3N0cmluZyhoZHIsIGxlbikpOworICAgIC8qIHByaW50IG91dCBwb2xpY3kgKi8KKyAgICBlcnJfY2hlY2soc3J0cF9zZXNzaW9uX3ByaW50X3BvbGljeShzcnRwX3NlbmRlcikpOworCisgICAgLyoKKyAgICAgKiBpbml0aWFsaXplIGRhdGEgYnVmZmVyLCB1c2luZyB0aGUgc3NyYyBpbiB0aGUgcG9saWN5IHVubGVzcyB0aGF0CisgICAgICogdmFsdWUgaXMgYSB3aWxkY2FyZCwgaW4gd2hpY2ggY2FzZSB3ZSdsbCBqdXN0IHVzZSBhbiBhcmJpdHJhcnkKKyAgICAgKiBvbmUKKyAgICAgKi8KKyAgICBpZiAocG9saWN5LT5zc3JjLnR5cGUgIT0gc3NyY19zcGVjaWZpYykgeworICAgICAgICBzc3JjID0gMHhkZWNhZmJhZDsKKyAgICB9IGVsc2UgeworICAgICAgICBzc3JjID0gcG9saWN5LT5zc3JjLnZhbHVlOworICAgIH0KKyAgICBtc2dfbGVuX29jdGV0cyA9IDI4OworICAgIGlmIChleHRlbnNpb25faGVhZGVyKSB7CisgICAgICAgIGhkciA9IHNydHBfY3JlYXRlX3Rlc3RfcGFja2V0X2V4dF9oZHIobXNnX2xlbl9vY3RldHMsIHNzcmMsICZsZW4pOworICAgICAgICBoZHIyID0gc3J0cF9jcmVhdGVfdGVzdF9wYWNrZXRfZXh0X2hkcihtc2dfbGVuX29jdGV0cywgc3NyYywgJmxlbjIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGhkciA9IHNydHBfY3JlYXRlX3Rlc3RfcGFja2V0KG1zZ19sZW5fb2N0ZXRzLCBzc3JjLCAmbGVuKTsKKyAgICAgICAgaGRyMiA9IHNydHBfY3JlYXRlX3Rlc3RfcGFja2V0KG1zZ19sZW5fb2N0ZXRzLCBzc3JjLCAmbGVuMik7CisgICAgfQorCisgICAgLyogc2F2ZSBvcmlnaW5hbCBtc2cgbGVuICovCisgICAgbXNnX2xlbiA9IGxlbjsKKworICAgIGlmIChoZHIgPT0gTlVMTCkgeworICAgICAgICBmcmVlKGhkcjIpOworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2FsbG9jX2ZhaWw7CisgICAgfQorICAgIGlmIChoZHIyID09IE5VTEwpIHsKKyAgICAgICAgZnJlZShoZHIpOworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2FsbG9jX2ZhaWw7CisgICAgfQorCisgICAgZGVidWdfcHJpbnQobW9kX2RyaXZlciwgImJlZm9yZSBwcm90ZWN0aW9uOlxuJXMiLAorICAgICAgICAgICAgICAgIHNydHBfcGFja2V0X3RvX3N0cmluZyhoZHIsIGxlbikpOwogCiAjaWYgUFJJTlRfUkVGRVJFTkNFX1BBQ0tFVAotICBkZWJ1Z19wcmludChtb2RfZHJpdmVyLCAicmVmZXJlbmNlIHBhY2tldCBiZWZvcmUgcHJvdGVjdGlvbjpcbiVzIiwgCSAgICAgIAotCSAgICAgIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKChvY3RldF90ICopaGRyLCBsZW4pKTsKKyAgICBkZWJ1Z19wcmludChtb2RfZHJpdmVyLCAicmVmZXJlbmNlIHBhY2tldCBiZWZvcmUgcHJvdGVjdGlvbjpcbiVzIiwKKyAgICAgICAgICAgICAgICBvY3RldF9zdHJpbmdfaGV4X3N0cmluZygodWludDhfdCAqKWhkciwgbGVuKSk7CiAjZW5kaWYKLSAgZXJyX2NoZWNrKHNydHBfcHJvdGVjdChzcnRwX3NlbmRlciwgaGRyLCAmbGVuKSk7CisgICAgZXJyX2NoZWNrKHNydHBfdGVzdF9jYWxsX3Byb3RlY3Qoc3J0cF9zZW5kZXIsIGhkciwgJmxlbiwgbWtpX2luZGV4KSk7CiAKLSAgZGVidWdfcHJpbnQobW9kX2RyaXZlciwgImFmdGVyIHByb3RlY3Rpb246XG4lcyIsIAkgICAgICAKLQkgICAgICBzcnRwX3BhY2tldF90b19zdHJpbmcoaGRyLCBsZW4pKTsKKyAgICBkZWJ1Z19wcmludChtb2RfZHJpdmVyLCAiYWZ0ZXIgcHJvdGVjdGlvbjpcbiVzIiwKKyAgICAgICAgICAgICAgICBzcnRwX3BhY2tldF90b19zdHJpbmcoaGRyLCBsZW4pKTsKICNpZiBQUklOVF9SRUZFUkVOQ0VfUEFDS0VUCi0gIGRlYnVnX3ByaW50KG1vZF9kcml2ZXIsICJhZnRlciBwcm90ZWN0aW9uOlxuJXMiLCAJICAgICAgCi0JICAgICAgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoKG9jdGV0X3QgKiloZHIsIGxlbikpOworICAgIGRlYnVnX3ByaW50KG1vZF9kcml2ZXIsICJhZnRlciBwcm90ZWN0aW9uOlxuJXMiLAorICAgICAgICAgICAgICAgIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKCh1aW50OF90ICopaGRyLCBsZW4pKTsKICNlbmRpZgogCi0gIC8qIAotICAgKiBjaGVjayBmb3Igb3ZlcnJ1biBvZiB0aGUgc3J0cF9wcm90ZWN0KCkgZnVuY3Rpb24KLSAgICoKLSAgICogVGhlIHBhY2tldCBpcyBmb2xsb3dlZCBieSBhIHZhbHVlIG9mIDB4ZmZmZmY7IGlmIHRoZSB2YWx1ZSBvZiB0aGUKLSAgICogZGF0YSBmb2xsb3dpbmcgdGhlIHBhY2tldCBpcyBkaWZmZXJlbnQsIHRoZW4gd2Uga25vdyB0aGF0IHRoZQotICAgKiBwcm90ZWN0IGZ1bmN0aW9uIGlzIG92ZXJ3cml0aW5nIHRoZSBlbmQgb2YgdGhlIHBhY2tldC4KLSAgICovCi0gIHBrdF9lbmQgPSAob2N0ZXRfdCAqKWhkciArIHNpemVvZihzcnRwX2hkcl90KSAKLSAgICArIG1zZ19sZW5fb2N0ZXRzICsgdGFnX2xlbmd0aDsKLSAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLSAgICBpZiAocGt0X2VuZFtpXSAhPSAweGZmKSB7Ci0gICAgICBmcHJpbnRmKHN0ZG91dCwgIm92ZXJ3cml0ZSBpbiBzcnRwX3Byb3RlY3QoKSBmdW5jdGlvbiAiCi0gICAgICAgICAgICAgICIoZXhwZWN0ZWQgJXgsIGZvdW5kICV4IGluIHRyYWlsaW5nIG9jdGV0ICVkKVxuIiwKLSAgICAgICAgICAgICAgMHhmZiwgKChvY3RldF90ICopaGRyKVtpXSwgaSk7Ci0gICAgICBmcmVlKGhkcik7Ci0gICAgICBmcmVlKGhkcjIpOwotICAgICAgcmV0dXJuIGVycl9zdGF0dXNfYWxnb19mYWlsOwotICAgIH0gIAorICAgIC8qIHNhdmUgcHJvdGVjdGVkIG1lc3NhZ2UgYW5kIGxlbmd0aCAqLworICAgIG1lbWNweShoZHJfZW5jLCBoZHIsIGxlbik7CisgICAgbXNnX2xlbl9lbmMgPSBsZW47CiAKLSAgLyoKLSAgICogaWYgdGhlIHBvbGljeSBpbmNsdWRlcyBjb25maWRlbnRpYWxpdHksIGNoZWNrIHRoYXQgY2lwaGVydGV4dCBpcwotICAgKiBkaWZmZXJlbnQgdGhhbiBwbGFpbnRleHQKLSAgICogCi0gICAqIE5vdGUgdGhhdCB0aGlzIGNoZWNrIHdpbGwgZ2l2ZSBmYWxzZSBuZWdhdGl2ZXMsIHdpdGggc29tZSBzbWFsbAotICAgKiBwcm9iYWJpbGl0eSwgZXNwZWNpYWxseSBpZiB0aGUgcGFja2V0cyBhcmUgc2hvcnQuICBGb3IgdGhhdAotICAgKiByZWFzb24sIHdlIHNraXAgdGhpcyBjaGVjayBpZiB0aGUgcGxhaW50ZXh0IGlzIGxlc3MgdGhhbiBmb3VyCi0gICAqIG9jdGV0cyBsb25nLgotICAgKi8KLSAgaWYgKChwb2xpY3ktPnJ0cC5zZWNfc2VydiAmIHNlY19zZXJ2X2NvbmYpICYmIChtc2dfbGVuX29jdGV0cyA+PSA0KSkgewotICAgIHByaW50ZigidGVzdGluZyB0aGF0IGNpcGhlcnRleHQgaXMgZGlzdGluY3QgZnJvbSBwbGFpbnRleHQuLi4iKTsKLSAgICBzdGF0dXMgPSBlcnJfc3RhdHVzX2FsZ29fZmFpbDsKLSAgICBmb3IgKGk9MTI7IGkgPCBtc2dfbGVuX29jdGV0cysxMjsgaSsrKQotICAgICAgaWYgKCgob2N0ZXRfdCAqKWhkcilbaV0gIT0gKChvY3RldF90ICopaGRyMilbaV0pIHsKLQlzdGF0dXMgPSBlcnJfc3RhdHVzX29rOwotICAgICAgfQorICAgIC8qCisgICAgICogY2hlY2sgZm9yIG92ZXJydW4gb2YgdGhlIHNydHBfcHJvdGVjdCgpIGZ1bmN0aW9uCisgICAgICoKKyAgICAgKiBUaGUgcGFja2V0IGlzIGZvbGxvd2VkIGJ5IGEgdmFsdWUgb2YgMHhmZmZmZjsgaWYgdGhlIHZhbHVlIG9mIHRoZQorICAgICAqIGRhdGEgZm9sbG93aW5nIHRoZSBwYWNrZXQgaXMgZGlmZmVyZW50LCB0aGVuIHdlIGtub3cgdGhhdCB0aGUKKyAgICAgKiBwcm90ZWN0IGZ1bmN0aW9uIGlzIG92ZXJ3cml0aW5nIHRoZSBlbmQgb2YgdGhlIHBhY2tldC4KKyAgICAgKi8KKyAgICBlcnJfY2hlY2soc3J0cF9nZXRfcHJvdGVjdF90cmFpbGVyX2xlbmd0aChzcnRwX3NlbmRlciwgdXNlX21raSwgbWtpX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWdfbGVuZ3RoKSk7CisgICAgcGt0X2VuZCA9ICh1aW50OF90ICopaGRyICsgbXNnX2xlbiArIHRhZ19sZW5ndGg7CisgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgICBpZiAocGt0X2VuZFtpXSAhPSAweGZmKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIm92ZXJ3cml0ZSBpbiBzcnRwX3Byb3RlY3QoKSBmdW5jdGlvbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihleHBlY3RlZCAleCwgZm91bmQgJXggaW4gdHJhaWxpbmcgb2N0ZXQgJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAweGZmLCAoKHVpbnQ4X3QgKiloZHIpW2ldLCBpKTsKKyAgICAgICAgICAgIGZyZWUoaGRyKTsKKyAgICAgICAgICAgIGZyZWUoaGRyMik7CisgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2FsZ29fZmFpbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogaWYgdGhlIHBvbGljeSBpbmNsdWRlcyBjb25maWRlbnRpYWxpdHksIGNoZWNrIHRoYXQgY2lwaGVydGV4dCBpcworICAgICAqIGRpZmZlcmVudCB0aGFuIHBsYWludGV4dAorICAgICAqCisgICAgICogTm90ZSB0aGF0IHRoaXMgY2hlY2sgd2lsbCBnaXZlIGZhbHNlIG5lZ2F0aXZlcywgd2l0aCBzb21lIHNtYWxsCisgICAgICogcHJvYmFiaWxpdHksIGVzcGVjaWFsbHkgaWYgdGhlIHBhY2tldHMgYXJlIHNob3J0LiAgRm9yIHRoYXQKKyAgICAgKiByZWFzb24sIHdlIHNraXAgdGhpcyBjaGVjayBpZiB0aGUgcGxhaW50ZXh0IGlzIGxlc3MgdGhhbiBmb3VyCisgICAgICogb2N0ZXRzIGxvbmcuCisgICAgICovCisgICAgaWYgKChwb2xpY3ktPnJ0cC5zZWNfc2VydiAmIHNlY19zZXJ2X2NvbmYpICYmIChtc2dfbGVuX29jdGV0cyA+PSA0KSkgeworICAgICAgICBwcmludGYoInRlc3RpbmcgdGhhdCBjaXBoZXJ0ZXh0IGlzIGRpc3RpbmN0IGZyb20gcGxhaW50ZXh0Li4uIik7CisgICAgICAgIHN0YXR1cyA9IHNydHBfZXJyX3N0YXR1c19hbGdvX2ZhaWw7CisgICAgICAgIGZvciAoaSA9IDEyOyBpIDwgbXNnX2xlbl9vY3RldHMgKyAxMjsgaSsrKSB7CisgICAgICAgICAgICBpZiAoKCh1aW50OF90ICopaGRyKVtpXSAhPSAoKHVpbnQ4X3QgKiloZHIyKVtpXSkgeworICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNydHBfZXJyX3N0YXR1c19vazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBwcmludGYoImZhaWxlZFxuIik7CisgICAgICAgICAgICBmcmVlKGhkcik7CisgICAgICAgICAgICBmcmVlKGhkcjIpOworICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgfQorICAgICAgICBwcmludGYoInBhc3NlZFxuIik7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBpZiB0aGUgcG9saWN5IHVzZXMgYSAnd2lsZGNhcmQnIHNzcmMsIHRoZW4gd2UgbmVlZCB0byBtYWtlIGEgY29weQorICAgICAqIG9mIHRoZSBwb2xpY3kgdGhhdCBjaGFuZ2VzIHRoZSBkaXJlY3Rpb24gdG8gaW5ib3VuZAorICAgICAqCisgICAgICogd2UgYWx3YXlzIGNvcHkgdGhlIHBvbGljeSBpbnRvIHRoZSByY3ZyX3BvbGljeSwgc2luY2Ugb3RoZXJ3aXNlCisgICAgICogdGhlIGNvbXBpbGVyIHdvdWxkIGZyZXQgYWJvdXQgdGhlIGNvbnN0bmVzcyBvZiB0aGUgcG9saWN5CisgICAgICovCisgICAgcmN2cl9wb2xpY3kgPSAoc3J0cF9wb2xpY3lfdCAqKW1hbGxvYyhzaXplb2Yoc3J0cF9wb2xpY3lfdCkpOworICAgIGlmIChyY3ZyX3BvbGljeSA9PSBOVUxMKSB7CisgICAgICAgIGZyZWUoaGRyKTsKKyAgICAgICAgZnJlZShoZHIyKTsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19hbGxvY19mYWlsOworICAgIH0KKyAgICBpZiAoZXh0ZW5zaW9uX2hlYWRlcikgeworICAgICAgICBtZW1jcHkocmN2cl9wb2xpY3ksICZ0bXBfcG9saWN5LCBzaXplb2Yoc3J0cF9wb2xpY3lfdCkpOworICAgICAgICBpZiAodG1wX3BvbGljeS5zc3JjLnR5cGUgPT0gc3NyY19hbnlfb3V0Ym91bmQpIHsKKyAgICAgICAgICAgIHJjdnJfcG9saWN5LT5zc3JjLnR5cGUgPSBzc3JjX2FueV9pbmJvdW5kOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgbWVtY3B5KHJjdnJfcG9saWN5LCBwb2xpY3ksIHNpemVvZihzcnRwX3BvbGljeV90KSk7CisgICAgICAgIGlmIChwb2xpY3ktPnNzcmMudHlwZSA9PSBzc3JjX2FueV9vdXRib3VuZCkgeworICAgICAgICAgICAgcmN2cl9wb2xpY3ktPnNzcmMudHlwZSA9IHNzcmNfYW55X2luYm91bmQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBlcnJfY2hlY2soc3J0cF9jcmVhdGUoJnNydHBfcmN2ciwgcmN2cl9wb2xpY3kpKTsKKworICAgIGVycl9jaGVjayhzcnRwX3Rlc3RfY2FsbF91bnByb3RlY3Qoc3J0cF9yY3ZyLCBoZHIsICZsZW4sIHVzZV9ta2kpKTsKKworICAgIGRlYnVnX3ByaW50KG1vZF9kcml2ZXIsICJhZnRlciB1bnByb3RlY3Rpb246XG4lcyIsCisgICAgICAgICAgICAgICAgc3J0cF9wYWNrZXRfdG9fc3RyaW5nKGhkciwgbGVuKSk7CisKKyAgICAvKiB2ZXJpZnkgdGhhdCB0aGUgdW5wcm90ZWN0ZWQgcGFja2V0IG1hdGNoZXMgdGhlIG9yaWdpYWwgb25lICovCisgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgIGlmICgoKHVpbnQ4X3QgKiloZHIpW2ldICE9ICgodWludDhfdCAqKWhkcjIpW2ldKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIm1pc21hdGNoIGF0IG9jdGV0ICVkXG4iLCBpKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IHNydHBfZXJyX3N0YXR1c19hbGdvX2ZhaWw7CisgICAgICAgIH0KKyAgICB9CiAgICAgaWYgKHN0YXR1cykgewotICAgICAgcHJpbnRmKCJmYWlsZWRcbiIpOwotICAgICAgZnJlZShoZHIpOwotICAgICAgZnJlZShoZHIyKTsKLSAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIGZyZWUoaGRyKTsKKyAgICAgICAgZnJlZShoZHIyKTsKKyAgICAgICAgZnJlZShyY3ZyX3BvbGljeSk7CisgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQotICAgIHByaW50ZigicGFzc2VkXG4iKTsKLSAgfQotICAKLSAgLyoKLSAgICogaWYgdGhlIHBvbGljeSB1c2VzIGEgJ3dpbGRjYXJkJyBzc3JjLCB0aGVuIHdlIG5lZWQgdG8gbWFrZSBhIGNvcHkKLSAgICogb2YgdGhlIHBvbGljeSB0aGF0IGNoYW5nZXMgdGhlIGRpcmVjdGlvbiB0byBpbmJvdW5kCi0gICAqCi0gICAqIHdlIGFsd2F5cyBjb3B5IHRoZSBwb2xpY3kgaW50byB0aGUgcmN2cl9wb2xpY3ksIHNpbmNlIG90aGVyd2lzZQotICAgKiB0aGUgY29tcGlsZXIgd291bGQgZnJldCBhYm91dCB0aGUgY29uc3RuZXNzIG9mIHRoZSBwb2xpY3kKLSAgICovCi0gIHJjdnJfcG9saWN5ID0gbWFsbG9jKHNpemVvZihzcnRwX3BvbGljeV90KSk7Ci0gIGlmIChyY3ZyX3BvbGljeSA9PSBOVUxMKQotICAgIHJldHVybiBlcnJfc3RhdHVzX2FsbG9jX2ZhaWw7Ci0gIG1lbWNweShyY3ZyX3BvbGljeSwgcG9saWN5LCBzaXplb2Yoc3J0cF9wb2xpY3lfdCkpOwotICBpZiAocG9saWN5LT5zc3JjLnR5cGUgPT0gc3NyY19hbnlfb3V0Ym91bmQpIHsKLSAgICByY3ZyX3BvbGljeS0+c3NyYy50eXBlID0gc3NyY19hbnlfaW5ib3VuZDsgICAgICAgCi0gIH0gCiAKLSAgZXJyX2NoZWNrKHNydHBfY3JlYXRlKCZzcnRwX3JjdnIsIHJjdnJfcG9saWN5KSk7Ci0gICAKLSAgZXJyX2NoZWNrKHNydHBfdW5wcm90ZWN0KHNydHBfcmN2ciwgaGRyLCAmbGVuKSk7CisgICAgLyoKKyAgICAgKiBpZiB0aGUgcG9saWN5IGluY2x1ZGVzIGF1dGhlbnRpY2F0aW9uLCB0aGVuIHRlc3QgZm9yIGZhbHNlIHBvc2l0aXZlcworICAgICAqLworICAgIGlmIChwb2xpY3ktPnJ0cC5zZWNfc2VydiAmIHNlY19zZXJ2X2F1dGgpIHsKKyAgICAgICAgY2hhciAqZGF0YSA9ICgoY2hhciAqKWhkcikgKyAoZXh0ZW5zaW9uX2hlYWRlciA/IDI0IDogMTIpOwogCi0gIGRlYnVnX3ByaW50KG1vZF9kcml2ZXIsICJhZnRlciB1bnByb3RlY3Rpb246XG4lcyIsIAkgICAgICAKLQkgICAgICBzcnRwX3BhY2tldF90b19zdHJpbmcoaGRyLCBsZW4pKTsKKyAgICAgICAgcHJpbnRmKCJ0ZXN0aW5nIGZvciBmYWxzZSBwb3NpdGl2ZXMgaW4gcmVwbGF5IGNoZWNrLi4uIik7CiAKLSAgLyogdmVyaWZ5IHRoYXQgdGhlIHVucHJvdGVjdGVkIHBhY2tldCBtYXRjaGVzIHRoZSBvcmlnaWFsIG9uZSAqLwotICBmb3IgKGk9MDsgaSA8IG1zZ19sZW5fb2N0ZXRzOyBpKyspCi0gICAgaWYgKCgob2N0ZXRfdCAqKWhkcilbaV0gIT0gKChvY3RldF90ICopaGRyMilbaV0pIHsKLSAgICAgIGZwcmludGYoc3Rkb3V0LCAibWlzbWF0Y2ggYXQgb2N0ZXQgJWRcbiIsIGkpOwotICAgICAgc3RhdHVzID0gZXJyX3N0YXR1c19hbGdvX2ZhaWw7CisgICAgICAgIC8qIHVucHJvdGVjdCBhIHNlY29uZCB0aW1lIC0gc2hvdWxkIGZhaWwgd2l0aCBhIHJlcGxheSBlcnJvciAqLworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgc3J0cF90ZXN0X2NhbGxfdW5wcm90ZWN0KHNydHBfcmN2ciwgaGRyLCAmbXNnX2xlbl9lbmMsIHVzZV9ta2kpOworICAgICAgICBpZiAoc3RhdHVzICE9IHNydHBfZXJyX3N0YXR1c19yZXBsYXlfZmFpbCkgeworICAgICAgICAgICAgcHJpbnRmKCJmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLCBzdGF0dXMpOworICAgICAgICAgICAgZnJlZShoZHIpOworICAgICAgICAgICAgZnJlZShoZHIyKTsKKyAgICAgICAgICAgIGZyZWUocmN2cl9wb2xpY3kpOworICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50ZigicGFzc2VkXG4iKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaW50ZigidGVzdGluZyBmb3IgZmFsc2UgcG9zaXRpdmVzIGluIGF1dGggY2hlY2suLi4iKTsKKworICAgICAgICAvKiBpbmNyZW1lbnQgc2VxdWVuY2UgbnVtYmVyIGluIGhlYWRlciAqLworICAgICAgICBoZHItPnNlcSsrOworCisgICAgICAgIC8qIGFwcGx5IHByb3RlY3Rpb24gKi8KKyAgICAgICAgZXJyX2NoZWNrKHNydHBfdGVzdF9jYWxsX3Byb3RlY3Qoc3J0cF9zZW5kZXIsIGhkciwgJmxlbiwgbWtpX2luZGV4KSk7CisKKyAgICAgICAgLyogZmxpcCBiaXRzIGluIHBhY2tldCAqLworICAgICAgICBkYXRhWzBdIF49IDB4ZmY7CisKKyAgICAgICAgLyogdW5wcm90ZWN0LCBhbmQgY2hlY2sgZm9yIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmUgKi8KKyAgICAgICAgc3RhdHVzID0gc3J0cF90ZXN0X2NhbGxfdW5wcm90ZWN0KHNydHBfcmN2ciwgaGRyLCAmbGVuLCB1c2VfbWtpKTsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBzcnRwX2Vycl9zdGF0dXNfYXV0aF9mYWlsKSB7CisgICAgICAgICAgICBwcmludGYoImZhaWxlZFxuIik7CisgICAgICAgICAgICBmcmVlKGhkcik7CisgICAgICAgICAgICBmcmVlKGhkcjIpOworICAgICAgICAgICAgZnJlZShyY3ZyX3BvbGljeSk7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnRmKCJwYXNzZWRcbiIpOworICAgICAgICB9CiAgICAgfQotICBpZiAoc3RhdHVzKSB7CisKKyAgICBlcnJfY2hlY2soc3J0cF9kZWFsbG9jKHNydHBfc2VuZGVyKSk7CisgICAgZXJyX2NoZWNrKHNydHBfZGVhbGxvYyhzcnRwX3JjdnIpKTsKKwogICAgIGZyZWUoaGRyKTsKICAgICBmcmVlKGhkcjIpOwotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KKyAgICBmcmVlKHJjdnJfcG9saWN5KTsKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOworfQogCi0gIC8qIAotICAgKiBpZiB0aGUgcG9saWN5IGluY2x1ZGVzIGF1dGhlbnRpY2F0aW9uLCB0aGVuIHRlc3QgZm9yIGZhbHNlIHBvc2l0aXZlcwotICAgKi8gIAotICBpZiAocG9saWN5LT5ydHAuc2VjX3NlcnYgJiBzZWNfc2Vydl9hdXRoKSB7Ci0gICAgY2hhciAqZGF0YSA9ICgoY2hhciAqKWhkcikgKyAxMjsKLSAgICAKLSAgICBwcmludGYoInRlc3RpbmcgZm9yIGZhbHNlIHBvc2l0aXZlcyBpbiByZXBsYXkgY2hlY2suLi4iKTsKK3NydHBfZXJyX3N0YXR1c190IHNydGNwX3Rlc3QoY29uc3Qgc3J0cF9wb2xpY3lfdCAqcG9saWN5LCBpbnQgbWtpX2luZGV4KQoreworICAgIGludCBpOworICAgIHNydHBfdCBzcnRjcF9zZW5kZXI7CisgICAgc3J0cF90IHNydGNwX3JjdnI7CisgICAgc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdHVzID0gc3J0cF9lcnJfc3RhdHVzX29rOworICAgIHNydHBfaGRyX3QgKmhkciwgKmhkcjI7CisgICAgdWludDhfdCBoZHJfZW5jWzY0XTsKKyAgICB1aW50OF90ICpwa3RfZW5kOworICAgIGludCBtc2dfbGVuX29jdGV0cywgbXNnX2xlbl9lbmMsIG1zZ19sZW47CisgICAgaW50IGxlbiwgbGVuMjsKKyAgICB1aW50MzJfdCB0YWdfbGVuZ3RoOworICAgIHVpbnQzMl90IHNzcmM7CisgICAgc3J0cF9wb2xpY3lfdCAqcmN2cl9wb2xpY3k7CisgICAgaW50IHVzZV9ta2kgPSAwOwogCi0gICAgLyogdW5wcm90ZWN0IGEgc2Vjb25kIHRpbWUgLSBzaG91bGQgZmFpbCB3aXRoIGEgcmVwbGF5IGVycm9yICovCi0gICAgc3RhdHVzID0gc3J0cF91bnByb3RlY3Qoc3J0cF9yY3ZyLCBoZHIsICZsZW4pOwotICAgIGlmIChzdGF0dXMgIT0gZXJyX3N0YXR1c19yZXBsYXlfZmFpbCkgewotICAgICAgcHJpbnRmKCJmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLCBzdGF0dXMpOwotICAgICAgZnJlZShoZHIpOyAKLSAgICAgIGZyZWUoaGRyMik7Ci0gICAgICByZXR1cm4gc3RhdHVzOworICAgIGlmIChta2lfaW5kZXggPj0gMCkKKyAgICAgICAgdXNlX21raSA9IDE7CisKKyAgICBlcnJfY2hlY2soc3J0cF9jcmVhdGUoJnNydGNwX3NlbmRlciwgcG9saWN5KSk7CisKKyAgICAvKiBwcmludCBvdXQgcG9saWN5ICovCisgICAgZXJyX2NoZWNrKHNydHBfc2Vzc2lvbl9wcmludF9wb2xpY3koc3J0Y3Bfc2VuZGVyKSk7CisKKyAgICAvKgorICAgICAqIGluaXRpYWxpemUgZGF0YSBidWZmZXIsIHVzaW5nIHRoZSBzc3JjIGluIHRoZSBwb2xpY3kgdW5sZXNzIHRoYXQKKyAgICAgKiB2YWx1ZSBpcyBhIHdpbGRjYXJkLCBpbiB3aGljaCBjYXNlIHdlJ2xsIGp1c3QgdXNlIGFuIGFyYml0cmFyeQorICAgICAqIG9uZQorICAgICAqLworICAgIGlmIChwb2xpY3ktPnNzcmMudHlwZSAhPSBzc3JjX3NwZWNpZmljKSB7CisgICAgICAgIHNzcmMgPSAweGRlY2FmYmFkOwogICAgIH0gZWxzZSB7Ci0gICAgICBwcmludGYoInBhc3NlZFxuIik7CisgICAgICAgIHNzcmMgPSBwb2xpY3ktPnNzcmMudmFsdWU7CisgICAgfQorICAgIG1zZ19sZW5fb2N0ZXRzID0gMjg7CisgICAgaGRyID0gc3J0cF9jcmVhdGVfdGVzdF9wYWNrZXQobXNnX2xlbl9vY3RldHMsIHNzcmMsICZsZW4pOworICAgIC8qIHNhdmUgbWVzc2FnZSBsZW4gKi8KKyAgICBtc2dfbGVuID0gbGVuOworCisgICAgaWYgKGhkciA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYWxsb2NfZmFpbDsKKyAgICB9CisgICAgaGRyMiA9IHNydHBfY3JlYXRlX3Rlc3RfcGFja2V0KG1zZ19sZW5fb2N0ZXRzLCBzc3JjLCAmbGVuMik7CisgICAgaWYgKGhkcjIgPT0gTlVMTCkgeworICAgICAgICBmcmVlKGhkcik7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYWxsb2NfZmFpbDsKICAgICB9CiAKLSAgICBwcmludGYoInRlc3RpbmcgZm9yIGZhbHNlIHBvc2l0aXZlcyBpbiBhdXRoIGNoZWNrLi4uIik7CisgICAgZGVidWdfcHJpbnQobW9kX2RyaXZlciwgImJlZm9yZSBwcm90ZWN0aW9uOlxuJXMiLAorICAgICAgICAgICAgICAgIHNydHBfcGFja2V0X3RvX3N0cmluZyhoZHIsIGxlbikpOwogCi0gICAgLyogaW5jcmVtZW50IHNlcXVlbmNlIG51bWJlciBpbiBoZWFkZXIgKi8KLSAgICBoZHItPnNlcSsrOyAKKyNpZiBQUklOVF9SRUZFUkVOQ0VfUEFDS0VUCisgICAgZGVidWdfcHJpbnQobW9kX2RyaXZlciwgInJlZmVyZW5jZSBwYWNrZXQgYmVmb3JlIHByb3RlY3Rpb246XG4lcyIsCisgICAgICAgICAgICAgICAgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoKHVpbnQ4X3QgKiloZHIsIGxlbikpOworI2VuZGlmCisgICAgZXJyX2NoZWNrKHNydHBfdGVzdF9jYWxsX3Byb3RlY3RfcnRjcChzcnRjcF9zZW5kZXIsIGhkciwgJmxlbiwgbWtpX2luZGV4KSk7CiAKLSAgICAvKiBhcHBseSBwcm90ZWN0aW9uICovCi0gICAgZXJyX2NoZWNrKHNydHBfcHJvdGVjdChzcnRwX3NlbmRlciwgaGRyLCAmbGVuKSk7Ci0gICAgCi0gICAgLyogZmxpcCBiaXRzIGluIHBhY2tldCAqLwotICAgIGRhdGFbMF0gXj0gMHhmZjsKKyAgICBkZWJ1Z19wcmludChtb2RfZHJpdmVyLCAiYWZ0ZXIgcHJvdGVjdGlvbjpcbiVzIiwKKyAgICAgICAgICAgICAgICBzcnRwX3BhY2tldF90b19zdHJpbmcoaGRyLCBsZW4pKTsKKyNpZiBQUklOVF9SRUZFUkVOQ0VfUEFDS0VUCisgICAgZGVidWdfcHJpbnQobW9kX2RyaXZlciwgImFmdGVyIHByb3RlY3Rpb246XG4lcyIsCisgICAgICAgICAgICAgICAgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoKHVpbnQ4X3QgKiloZHIsIGxlbikpOworI2VuZGlmCiAKLSAgICAvKiB1bnByb3RlY3QsIGFuZCBjaGVjayBmb3IgYXV0aGVudGljYXRpb24gZmFpbHVyZSAqLwotICAgIHN0YXR1cyA9IHNydHBfdW5wcm90ZWN0KHNydHBfcmN2ciwgaGRyLCAmbGVuKTsKLSAgICBpZiAoc3RhdHVzICE9IGVycl9zdGF0dXNfYXV0aF9mYWlsKSB7Ci0gICAgICBwcmludGYoImZhaWxlZFxuIik7Ci0gICAgICBmcmVlKGhkcik7IAotICAgICAgZnJlZShoZHIyKTsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHByaW50ZigicGFzc2VkXG4iKTsKKyAgICAvKiBzYXZlIHByb3RlY3RlZCBtZXNzYWdlIGFuZCBsZW5ndGggKi8KKyAgICBtZW1jcHkoaGRyX2VuYywgaGRyLCBsZW4pOworICAgIG1zZ19sZW5fZW5jID0gbGVuOworCisgICAgLyoKKyAgICAgKiBjaGVjayBmb3Igb3ZlcnJ1biBvZiB0aGUgc3J0cF9wcm90ZWN0KCkgZnVuY3Rpb24KKyAgICAgKgorICAgICAqIFRoZSBwYWNrZXQgaXMgZm9sbG93ZWQgYnkgYSB2YWx1ZSBvZiAweGZmZmZmOyBpZiB0aGUgdmFsdWUgb2YgdGhlCisgICAgICogZGF0YSBmb2xsb3dpbmcgdGhlIHBhY2tldCBpcyBkaWZmZXJlbnQsIHRoZW4gd2Uga25vdyB0aGF0IHRoZQorICAgICAqIHByb3RlY3QgZnVuY3Rpb24gaXMgb3ZlcndyaXRpbmcgdGhlIGVuZCBvZiB0aGUgcGFja2V0LgorICAgICAqLworICAgIHNydHBfZ2V0X3Byb3RlY3RfcnRjcF90cmFpbGVyX2xlbmd0aChzcnRjcF9zZW5kZXIsIHVzZV9ta2ksIG1raV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhZ19sZW5ndGgpOworICAgIHBrdF9lbmQgPSAodWludDhfdCAqKWhkciArIG1zZ19sZW4gKyB0YWdfbGVuZ3RoOworICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAgICAgaWYgKHBrdF9lbmRbaV0gIT0gMHhmZikgeworICAgICAgICAgICAgZnByaW50ZihzdGRvdXQsICJvdmVyd3JpdGUgaW4gc3J0cF9wcm90ZWN0X3J0Y3AoKSBmdW5jdGlvbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihleHBlY3RlZCAleCwgZm91bmQgJXggaW4gdHJhaWxpbmcgb2N0ZXQgJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAweGZmLCAoKHVpbnQ4X3QgKiloZHIpW2ldLCBpKTsKKyAgICAgICAgICAgIGZyZWUoaGRyKTsKKyAgICAgICAgICAgIGZyZWUoaGRyMik7CisgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2FsZ29fZmFpbDsKKyAgICAgICAgfQogICAgIH0KLSAgICAgICAgICAgIAotICB9CiAKLSAgZXJyX2NoZWNrKHNydHBfZGVhbGxvYyhzcnRwX3NlbmRlcikpOwotICBlcnJfY2hlY2soc3J0cF9kZWFsbG9jKHNydHBfcmN2cikpOworICAgIC8qCisgICAgICogaWYgdGhlIHBvbGljeSBpbmNsdWRlcyBjb25maWRlbnRpYWxpdHksIGNoZWNrIHRoYXQgY2lwaGVydGV4dCBpcworICAgICAqIGRpZmZlcmVudCB0aGFuIHBsYWludGV4dAorICAgICAqCisgICAgICogTm90ZSB0aGF0IHRoaXMgY2hlY2sgd2lsbCBnaXZlIGZhbHNlIG5lZ2F0aXZlcywgd2l0aCBzb21lIHNtYWxsCisgICAgICogcHJvYmFiaWxpdHksIGVzcGVjaWFsbHkgaWYgdGhlIHBhY2tldHMgYXJlIHNob3J0LiAgRm9yIHRoYXQKKyAgICAgKiByZWFzb24sIHdlIHNraXAgdGhpcyBjaGVjayBpZiB0aGUgcGxhaW50ZXh0IGlzIGxlc3MgdGhhbiBmb3VyCisgICAgICogb2N0ZXRzIGxvbmcuCisgICAgICovCisgICAgaWYgKChwb2xpY3ktPnJ0Y3Auc2VjX3NlcnYgJiBzZWNfc2Vydl9jb25mKSAmJiAobXNnX2xlbl9vY3RldHMgPj0gNCkpIHsKKyAgICAgICAgcHJpbnRmKCJ0ZXN0aW5nIHRoYXQgY2lwaGVydGV4dCBpcyBkaXN0aW5jdCBmcm9tIHBsYWludGV4dC4uLiIpOworICAgICAgICBzdGF0dXMgPSBzcnRwX2Vycl9zdGF0dXNfYWxnb19mYWlsOworICAgICAgICBmb3IgKGkgPSAxMjsgaSA8IG1zZ19sZW5fb2N0ZXRzICsgMTI7IGkrKykgeworICAgICAgICAgICAgaWYgKCgodWludDhfdCAqKWhkcilbaV0gIT0gKCh1aW50OF90ICopaGRyMilbaV0pIHsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBzcnRwX2Vycl9zdGF0dXNfb2s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgcHJpbnRmKCJmYWlsZWRcbiIpOworICAgICAgICAgICAgZnJlZShoZHIpOworICAgICAgICAgICAgZnJlZShoZHIyKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnRmKCJwYXNzZWRcbiIpOworICAgIH0KIAotICBmcmVlKGhkcik7Ci0gIGZyZWUoaGRyMik7Ci0gIHJldHVybiBlcnJfc3RhdHVzX29rOworICAgIC8qCisgICAgICogaWYgdGhlIHBvbGljeSB1c2VzIGEgJ3dpbGRjYXJkJyBzc3JjLCB0aGVuIHdlIG5lZWQgdG8gbWFrZSBhIGNvcHkKKyAgICAgKiBvZiB0aGUgcG9saWN5IHRoYXQgY2hhbmdlcyB0aGUgZGlyZWN0aW9uIHRvIGluYm91bmQKKyAgICAgKgorICAgICAqIHdlIGFsd2F5cyBjb3B5IHRoZSBwb2xpY3kgaW50byB0aGUgcmN2cl9wb2xpY3ksIHNpbmNlIG90aGVyd2lzZQorICAgICAqIHRoZSBjb21waWxlciB3b3VsZCBmcmV0IGFib3V0IHRoZSBjb25zdG5lc3Mgb2YgdGhlIHBvbGljeQorICAgICAqLworICAgIHJjdnJfcG9saWN5ID0gKHNydHBfcG9saWN5X3QgKiltYWxsb2Moc2l6ZW9mKHNydHBfcG9saWN5X3QpKTsKKyAgICBpZiAocmN2cl9wb2xpY3kgPT0gTlVMTCkgeworICAgICAgICBmcmVlKGhkcik7CisgICAgICAgIGZyZWUoaGRyMik7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYWxsb2NfZmFpbDsKKyAgICB9CisgICAgbWVtY3B5KHJjdnJfcG9saWN5LCBwb2xpY3ksIHNpemVvZihzcnRwX3BvbGljeV90KSk7CisgICAgaWYgKHBvbGljeS0+c3NyYy50eXBlID09IHNzcmNfYW55X291dGJvdW5kKSB7CisgICAgICAgIHJjdnJfcG9saWN5LT5zc3JjLnR5cGUgPSBzc3JjX2FueV9pbmJvdW5kOworICAgIH0KKworICAgIGVycl9jaGVjayhzcnRwX2NyZWF0ZSgmc3J0Y3BfcmN2ciwgcmN2cl9wb2xpY3kpKTsKKworICAgIGVycl9jaGVjayhzcnRwX3Rlc3RfY2FsbF91bnByb3RlY3RfcnRjcChzcnRjcF9yY3ZyLCBoZHIsICZsZW4sIHVzZV9ta2kpKTsKKworICAgIGRlYnVnX3ByaW50KG1vZF9kcml2ZXIsICJhZnRlciB1bnByb3RlY3Rpb246XG4lcyIsCisgICAgICAgICAgICAgICAgc3J0cF9wYWNrZXRfdG9fc3RyaW5nKGhkciwgbGVuKSk7CisKKyAgICAvKiB2ZXJpZnkgdGhhdCB0aGUgdW5wcm90ZWN0ZWQgcGFja2V0IG1hdGNoZXMgdGhlIG9yaWdpYWwgb25lICovCisgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgIGlmICgoKHVpbnQ4X3QgKiloZHIpW2ldICE9ICgodWludDhfdCAqKWhkcjIpW2ldKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIm1pc21hdGNoIGF0IG9jdGV0ICVkXG4iLCBpKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IHNydHBfZXJyX3N0YXR1c19hbGdvX2ZhaWw7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICBmcmVlKGhkcik7CisgICAgICAgIGZyZWUoaGRyMik7CisgICAgICAgIGZyZWUocmN2cl9wb2xpY3kpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8qCisgICAgICogaWYgdGhlIHBvbGljeSBpbmNsdWRlcyBhdXRoZW50aWNhdGlvbiwgdGhlbiB0ZXN0IGZvciBmYWxzZSBwb3NpdGl2ZXMKKyAgICAgKi8KKyAgICBpZiAocG9saWN5LT5ydHAuc2VjX3NlcnYgJiBzZWNfc2Vydl9hdXRoKSB7CisgICAgICAgIGNoYXIgKmRhdGEgPSAoKGNoYXIgKiloZHIpICsgMTI7CisKKyAgICAgICAgcHJpbnRmKCJ0ZXN0aW5nIGZvciBmYWxzZSBwb3NpdGl2ZXMgaW4gcmVwbGF5IGNoZWNrLi4uIik7CisKKyAgICAgICAgLyogdW5wcm90ZWN0IGEgc2Vjb25kIHRpbWUgLSBzaG91bGQgZmFpbCB3aXRoIGEgcmVwbGF5IGVycm9yICovCisgICAgICAgIHN0YXR1cyA9IHNydHBfdGVzdF9jYWxsX3VucHJvdGVjdF9ydGNwKHNydGNwX3JjdnIsIGhkciwgJm1zZ19sZW5fZW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VfbWtpKTsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBzcnRwX2Vycl9zdGF0dXNfcmVwbGF5X2ZhaWwpIHsKKyAgICAgICAgICAgIHByaW50ZigiZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgc3RhdHVzKTsKKyAgICAgICAgICAgIGZyZWUoaGRyKTsKKyAgICAgICAgICAgIGZyZWUoaGRyMik7CisgICAgICAgICAgICBmcmVlKHJjdnJfcG9saWN5KTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmludGYoInBhc3NlZFxuIik7CisgICAgICAgIH0KKworICAgICAgICBwcmludGYoInRlc3RpbmcgZm9yIGZhbHNlIHBvc2l0aXZlcyBpbiBhdXRoIGNoZWNrLi4uIik7CisKKyAgICAgICAgLyogaW5jcmVtZW50IHNlcXVlbmNlIG51bWJlciBpbiBoZWFkZXIgKi8KKyAgICAgICAgaGRyLT5zZXErKzsKKworICAgICAgICAvKiBhcHBseSBwcm90ZWN0aW9uICovCisgICAgICAgIGVycl9jaGVjaygKKyAgICAgICAgICAgIHNydHBfdGVzdF9jYWxsX3Byb3RlY3RfcnRjcChzcnRjcF9zZW5kZXIsIGhkciwgJmxlbiwgbWtpX2luZGV4KSk7CisKKyAgICAgICAgLyogZmxpcCBiaXRzIGluIHBhY2tldCAqLworICAgICAgICBkYXRhWzBdIF49IDB4ZmY7CisKKyAgICAgICAgLyogdW5wcm90ZWN0LCBhbmQgY2hlY2sgZm9yIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmUgKi8KKyAgICAgICAgc3RhdHVzID0gc3J0cF90ZXN0X2NhbGxfdW5wcm90ZWN0X3J0Y3Aoc3J0Y3BfcmN2ciwgaGRyLCAmbGVuLCB1c2VfbWtpKTsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBzcnRwX2Vycl9zdGF0dXNfYXV0aF9mYWlsKSB7CisgICAgICAgICAgICBwcmludGYoImZhaWxlZFxuIik7CisgICAgICAgICAgICBmcmVlKGhkcik7CisgICAgICAgICAgICBmcmVlKGhkcjIpOworICAgICAgICAgICAgZnJlZShyY3ZyX3BvbGljeSk7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnRmKCJwYXNzZWRcbiIpOworICAgICAgICB9CisgICAgfQorCisgICAgZXJyX2NoZWNrKHNydHBfZGVhbGxvYyhzcnRjcF9zZW5kZXIpKTsKKyAgICBlcnJfY2hlY2soc3J0cF9kZWFsbG9jKHNydGNwX3JjdnIpKTsKKworICAgIGZyZWUoaGRyKTsKKyAgICBmcmVlKGhkcjIpOworICAgIGZyZWUocmN2cl9wb2xpY3kpOworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7CiB9CiAKK3NydHBfZXJyX3N0YXR1c190IHNydHBfc2Vzc2lvbl9wcmludF9wb2xpY3koc3J0cF90IHNydHApCit7CisgICAgY2hhciAqc2Vydl9kZXNjcls0XSA9IHsgIm5vbmUiLCAiY29uZmlkZW50aWFsaXR5IiwgImF1dGhlbnRpY2F0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29uZmlkZW50aWFsaXR5IGFuZCBhdXRoZW50aWNhdGlvbiIgfTsKKyAgICBjaGFyICpkaXJlY3Rpb25bM10gPSB7ICJ1bmtub3duIiwgIm91dGJvdW5kIiwgImluYm91bmQiIH07CisgICAgc3J0cF9zdHJlYW1fdCBzdHJlYW07CisgICAgc3J0cF9zZXNzaW9uX2tleXNfdCAqc2Vzc2lvbl9rZXlzID0gTlVMTDsKIAotZXJyX3N0YXR1c190Ci1zcnRwX3Nlc3Npb25fcHJpbnRfcG9saWN5KHNydHBfdCBzcnRwKSB7Ci0gIGNoYXIgKnNlcnZfZGVzY3JbNF0gPSB7Ci0gICAgIm5vbmUiLAotICAgICJjb25maWRlbnRpYWxpdHkiLAotICAgICJhdXRoZW50aWNhdGlvbiIsCi0gICAgImNvbmZpZGVudGlhbGl0eSBhbmQgYXV0aGVudGljYXRpb24iCi0gIH07Ci0gIGNoYXIgKmRpcmVjdGlvblszXSA9IHsKLSAgICAidW5rbm93biIsCi0gICAgIm91dGJvdW5kIiwKLSAgICAiaW5ib3VuZCIKLSAgfTsKLSAgc3J0cF9zdHJlYW1fdCBzdHJlYW07CisgICAgLyogc2FuaXR5IGNoZWNraW5nICovCisgICAgaWYgKHNydHAgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2ZhaWw7CisgICAgfQogCi0gIC8qIHNhbml0eSBjaGVja2luZyAqLwotICBpZiAoc3J0cCA9PSBOVUxMKQotICAgIHJldHVybiBlcnJfc3RhdHVzX2ZhaWw7CisgICAgLyogaWYgdGhlcmUncyBhIHRlbXBsYXRlIHN0cmVhbSwgcHJpbnQgaXQgb3V0ICovCisgICAgaWYgKHNydHAtPnN0cmVhbV90ZW1wbGF0ZSAhPSBOVUxMKSB7CisgICAgICAgIHN0cmVhbSA9IHNydHAtPnN0cmVhbV90ZW1wbGF0ZTsKKyAgICAgICAgc2Vzc2lvbl9rZXlzID0gJnN0cmVhbS0+c2Vzc2lvbl9rZXlzWzBdOworICAgICAgICBwcmludGYoIiMgU1NSQzogICAgICAgICAgYW55ICVzXHJcbiIKKyAgICAgICAgICAgICAgICIjIHJ0cCBjaXBoZXI6ICAgICVzXHJcbiIKKyAgICAgICAgICAgICAgICIjIHJ0cCBhdXRoOiAgICAgICVzXHJcbiIKKyAgICAgICAgICAgICAgICIjIHJ0cCBzZXJ2aWNlczogICVzXHJcbiIKKyAgICAgICAgICAgICAgICIjIHJ0Y3AgY2lwaGVyOiAgICVzXHJcbiIKKyAgICAgICAgICAgICAgICIjIHJ0Y3AgYXV0aDogICAgICVzXHJcbiIKKyAgICAgICAgICAgICAgICIjIHJ0Y3Agc2VydmljZXM6ICVzXHJcbiIKKyAgICAgICAgICAgICAgICIjIHdpbmRvdyBzaXplOiAgICVsdVxyXG4iCisgICAgICAgICAgICAgICAiIyB0eCBydHggYWxsb3dlZDolc1xyXG4iLAorICAgICAgICAgICAgICAgZGlyZWN0aW9uW3N0cmVhbS0+ZGlyZWN0aW9uXSwKKyAgICAgICAgICAgICAgIHNlc3Npb25fa2V5cy0+cnRwX2NpcGhlci0+dHlwZS0+ZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICBzZXNzaW9uX2tleXMtPnJ0cF9hdXRoLT50eXBlLT5kZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgIHNlcnZfZGVzY3Jbc3RyZWFtLT5ydHBfc2VydmljZXNdLAorICAgICAgICAgICAgICAgc2Vzc2lvbl9rZXlzLT5ydGNwX2NpcGhlci0+dHlwZS0+ZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICBzZXNzaW9uX2tleXMtPnJ0Y3BfYXV0aC0+dHlwZS0+ZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICBzZXJ2X2Rlc2NyW3N0cmVhbS0+cnRjcF9zZXJ2aWNlc10sCisgICAgICAgICAgICAgICBzcnRwX3JkYnhfZ2V0X3dpbmRvd19zaXplKCZzdHJlYW0tPnJ0cF9yZGJ4KSwKKyAgICAgICAgICAgICAgIHN0cmVhbS0+YWxsb3dfcmVwZWF0X3R4ID8gInRydWUiIDogImZhbHNlIik7CiAKLSAgLyogaWYgdGhlcmUncyBhIHRlbXBsYXRlIHN0cmVhbSwgcHJpbnQgaXQgb3V0ICovCi0gIGlmIChzcnRwLT5zdHJlYW1fdGVtcGxhdGUgIT0gTlVMTCkgewotICAgIHN0cmVhbSA9IHNydHAtPnN0cmVhbV90ZW1wbGF0ZTsKLSAgICBwcmludGYoIiMgU1NSQzogICAgICAgICAgYW55ICVzXHJcbiIKLQkgICAiIyBydHAgY2lwaGVyOiAgICAlc1xyXG4iCi0JICAgIiMgcnRwIGF1dGg6ICAgICAgJXNcclxuIgotCSAgICIjIHJ0cCBzZXJ2aWNlczogICVzXHJcbiIgCi0gICAgICAgICAgICIjIHJ0Y3AgY2lwaGVyOiAgICVzXHJcbiIKLQkgICAiIyBydGNwIGF1dGg6ICAgICAlc1xyXG4iCi0JICAgIiMgcnRjcCBzZXJ2aWNlczogJXNcclxuIiwKLQkgICBkaXJlY3Rpb25bc3RyZWFtLT5kaXJlY3Rpb25dLAotCSAgIHN0cmVhbS0+cnRwX2NpcGhlci0+dHlwZS0+ZGVzY3JpcHRpb24sCi0JICAgc3RyZWFtLT5ydHBfYXV0aC0+dHlwZS0+ZGVzY3JpcHRpb24sCi0JICAgc2Vydl9kZXNjcltzdHJlYW0tPnJ0cF9zZXJ2aWNlc10sCi0JICAgc3RyZWFtLT5ydGNwX2NpcGhlci0+dHlwZS0+ZGVzY3JpcHRpb24sCi0JICAgc3RyZWFtLT5ydGNwX2F1dGgtPnR5cGUtPmRlc2NyaXB0aW9uLAotCSAgIHNlcnZfZGVzY3Jbc3RyZWFtLT5ydGNwX3NlcnZpY2VzXSk7Ci0gIH0KKyAgICAgICAgcHJpbnRmKCIjIEVuY3J5cHRlZCBleHRlbnNpb24gaGVhZGVyczogIik7CisgICAgICAgIGlmIChzdHJlYW0tPmVuY194dG5faGRyICYmIHN0cmVhbS0+ZW5jX3h0bl9oZHJfY291bnQgPiAwKSB7CisgICAgICAgICAgICBpbnQgKmVuY194dG5faGRyID0gc3RyZWFtLT5lbmNfeHRuX2hkcjsKKyAgICAgICAgICAgIGludCBjb3VudCA9IHN0cmVhbS0+ZW5jX3h0bl9oZHJfY291bnQ7CisgICAgICAgICAgICB3aGlsZSAoY291bnQgPiAwKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIlZCAiLCAqZW5jX3h0bl9oZHIpOworICAgICAgICAgICAgICAgIGVuY194dG5faGRyKys7CisgICAgICAgICAgICAgICAgY291bnQtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50Zigibm9uZVxuIik7CisgICAgICAgIH0KKyAgICB9CiAKLSAgLyogbG9vcCBvdmVyIHN0cmVhbXMgaW4gc2Vzc2lvbiwgcHJpbnRpbmcgdGhlIHBvbGljeSBvZiBlYWNoICovCi0gIHN0cmVhbSA9IHNydHAtPnN0cmVhbV9saXN0OwotICB3aGlsZSAoc3RyZWFtICE9IE5VTEwpIHsKLSAgICBpZiAoc3RyZWFtLT5ydHBfc2VydmljZXMgPiBzZWNfc2Vydl9jb25mX2FuZF9hdXRoKQotICAgICAgcmV0dXJuIGVycl9zdGF0dXNfYmFkX3BhcmFtOwotICAgIAotICAgIHByaW50ZigiIyBTU1JDOiAgICAgICAgICAweCUwOHhcclxuIgotCSAgICIjIHJ0cCBjaXBoZXI6ICAgICVzXHJcbiIKLQkgICAiIyBydHAgYXV0aDogICAgICAlc1xyXG4iCi0JICAgIiMgcnRwIHNlcnZpY2VzOiAgJXNcclxuIiAKLSAgICAgICAgICAgIiMgcnRjcCBjaXBoZXI6ICAgJXNcclxuIgotCSAgICIjIHJ0Y3AgYXV0aDogICAgICVzXHJcbiIKLQkgICAiIyBydGNwIHNlcnZpY2VzOiAlc1xyXG4iLAotCSAgIHN0cmVhbS0+c3NyYywKLQkgICBzdHJlYW0tPnJ0cF9jaXBoZXItPnR5cGUtPmRlc2NyaXB0aW9uLAotCSAgIHN0cmVhbS0+cnRwX2F1dGgtPnR5cGUtPmRlc2NyaXB0aW9uLAotCSAgIHNlcnZfZGVzY3Jbc3RyZWFtLT5ydHBfc2VydmljZXNdLAotCSAgIHN0cmVhbS0+cnRjcF9jaXBoZXItPnR5cGUtPmRlc2NyaXB0aW9uLAotCSAgIHN0cmVhbS0+cnRjcF9hdXRoLT50eXBlLT5kZXNjcmlwdGlvbiwKLQkgICBzZXJ2X2Rlc2NyW3N0cmVhbS0+cnRjcF9zZXJ2aWNlc10pOworICAgIC8qIGxvb3Agb3ZlciBzdHJlYW1zIGluIHNlc3Npb24sIHByaW50aW5nIHRoZSBwb2xpY3kgb2YgZWFjaCAqLworICAgIHN0cmVhbSA9IHNydHAtPnN0cmVhbV9saXN0OworICAgIHdoaWxlIChzdHJlYW0gIT0gTlVMTCkgeworICAgICAgICBpZiAoc3RyZWFtLT5ydHBfc2VydmljZXMgPiBzZWNfc2Vydl9jb25mX2FuZF9hdXRoKSB7CisgICAgICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2JhZF9wYXJhbTsKKyAgICAgICAgfQorICAgICAgICBzZXNzaW9uX2tleXMgPSAmc3RyZWFtLT5zZXNzaW9uX2tleXNbMF07CiAKLSAgICAvKiBhZHZhbmNlIHRvIG5leHQgc3RyZWFtIGluIHRoZSBsaXN0ICovCi0gICAgc3RyZWFtID0gc3RyZWFtLT5uZXh0OwotICB9IAotICByZXR1cm4gZXJyX3N0YXR1c19vazsKKyAgICAgICAgcHJpbnRmKCIjIFNTUkM6ICAgICAgICAgIDB4JTA4eFxyXG4iCisgICAgICAgICAgICAgICAiIyBydHAgY2lwaGVyOiAgICAlc1xyXG4iCisgICAgICAgICAgICAgICAiIyBydHAgYXV0aDogICAgICAlc1xyXG4iCisgICAgICAgICAgICAgICAiIyBydHAgc2VydmljZXM6ICAlc1xyXG4iCisgICAgICAgICAgICAgICAiIyBydGNwIGNpcGhlcjogICAlc1xyXG4iCisgICAgICAgICAgICAgICAiIyBydGNwIGF1dGg6ICAgICAlc1xyXG4iCisgICAgICAgICAgICAgICAiIyBydGNwIHNlcnZpY2VzOiAlc1xyXG4iCisgICAgICAgICAgICAgICAiIyB3aW5kb3cgc2l6ZTogICAlbHVcclxuIgorICAgICAgICAgICAgICAgIiMgdHggcnR4IGFsbG93ZWQ6JXNcclxuIiwKKyAgICAgICAgICAgICAgIHN0cmVhbS0+c3NyYywgc2Vzc2lvbl9rZXlzLT5ydHBfY2lwaGVyLT50eXBlLT5kZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgIHNlc3Npb25fa2V5cy0+cnRwX2F1dGgtPnR5cGUtPmRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgc2Vydl9kZXNjcltzdHJlYW0tPnJ0cF9zZXJ2aWNlc10sCisgICAgICAgICAgICAgICBzZXNzaW9uX2tleXMtPnJ0Y3BfY2lwaGVyLT50eXBlLT5kZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgIHNlc3Npb25fa2V5cy0+cnRjcF9hdXRoLT50eXBlLT5kZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgIHNlcnZfZGVzY3Jbc3RyZWFtLT5ydGNwX3NlcnZpY2VzXSwKKyAgICAgICAgICAgICAgIHNydHBfcmRieF9nZXRfd2luZG93X3NpemUoJnN0cmVhbS0+cnRwX3JkYngpLAorICAgICAgICAgICAgICAgc3RyZWFtLT5hbGxvd19yZXBlYXRfdHggPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKworICAgICAgICBwcmludGYoIiMgRW5jcnlwdGVkIGV4dGVuc2lvbiBoZWFkZXJzOiAiKTsKKyAgICAgICAgaWYgKHN0cmVhbS0+ZW5jX3h0bl9oZHIgJiYgc3RyZWFtLT5lbmNfeHRuX2hkcl9jb3VudCA+IDApIHsKKyAgICAgICAgICAgIGludCAqZW5jX3h0bl9oZHIgPSBzdHJlYW0tPmVuY194dG5faGRyOworICAgICAgICAgICAgaW50IGNvdW50ID0gc3RyZWFtLT5lbmNfeHRuX2hkcl9jb3VudDsKKyAgICAgICAgICAgIHdoaWxlIChjb3VudCA+IDApIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIiVkICIsICplbmNfeHRuX2hkcik7CisgICAgICAgICAgICAgICAgZW5jX3h0bl9oZHIrKzsKKyAgICAgICAgICAgICAgICBjb3VudC0tOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnRmKCJub25lXG4iKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGFkdmFuY2UgdG8gbmV4dCBzdHJlYW0gaW4gdGhlIGxpc3QgKi8KKyAgICAgICAgc3RyZWFtID0gc3RyZWFtLT5uZXh0OworICAgIH0KKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOwogfQogCi1lcnJfc3RhdHVzX3QKLXNydHBfcHJpbnRfcG9saWN5KGNvbnN0IHNydHBfcG9saWN5X3QgKnBvbGljeSkgewotICBlcnJfc3RhdHVzX3Qgc3RhdHVzOwotICBzcnRwX3Qgc2Vzc2lvbjsKK3NydHBfZXJyX3N0YXR1c190IHNydHBfcHJpbnRfcG9saWN5KGNvbnN0IHNydHBfcG9saWN5X3QgKnBvbGljeSkKK3sKKyAgICBzcnRwX2Vycl9zdGF0dXNfdCBzdGF0dXM7CisgICAgc3J0cF90IHNlc3Npb247CiAKLSAgc3RhdHVzID0gc3J0cF9jcmVhdGUoJnNlc3Npb24sIHBvbGljeSk7Ci0gIGlmIChzdGF0dXMpCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgc3RhdHVzID0gc3J0cF9zZXNzaW9uX3ByaW50X3BvbGljeShzZXNzaW9uKTsKLSAgaWYgKHN0YXR1cykKLSAgICByZXR1cm4gc3RhdHVzOwotICBzdGF0dXMgPSBzcnRwX2RlYWxsb2Moc2Vzc2lvbik7Ci0gIGlmIChzdGF0dXMpCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7CisgICAgc3RhdHVzID0gc3J0cF9jcmVhdGUoJnNlc3Npb24sIHBvbGljeSk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKyAgICBzdGF0dXMgPSBzcnRwX3Nlc3Npb25fcHJpbnRfcG9saWN5KHNlc3Npb24pOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgc3RhdHVzID0gc3J0cF9kZWFsbG9jKHNlc3Npb24pOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKIH0KIAotLyogCi0gKiBzcnRwX3ByaW50X3BhY2tldCguLi4pIGlzIGZvciBkZWJ1Z2dpbmcgb25seSAKKy8qCisgKiBzcnRwX3ByaW50X3BhY2tldCguLi4pIGlzIGZvciBkZWJ1Z2dpbmcgb25seQogICogaXQgcHJpbnRzIGFuIFJUUCBwYWNrZXQgdG8gdGhlIHN0ZG91dAogICoKICAqIG5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzICpub3QqIHRocmVhZHNhZmUKQEAgLTgyMiw0MyArMTU1NiwzNSBAQAogCiBjaGFyIHBhY2tldF9zdHJpbmdbTVRVXTsKIAotY2hhciAqCi1zcnRwX3BhY2tldF90b19zdHJpbmcoc3J0cF9oZHJfdCAqaGRyLCBpbnQgcGt0X29jdGV0X2xlbikgewotICBpbnQgb2N0ZXRzX2luX3J0cF9oZWFkZXIgPSAxMjsKLSAgb2N0ZXRfdCAqZGF0YSA9ICgob2N0ZXRfdCAqKWhkcikrb2N0ZXRzX2luX3J0cF9oZWFkZXI7Ci0gIGludCBoZXhfbGVuID0gcGt0X29jdGV0X2xlbi1vY3RldHNfaW5fcnRwX2hlYWRlcjsKK2NoYXIgKnNydHBfcGFja2V0X3RvX3N0cmluZyhzcnRwX2hkcl90ICpoZHIsIGludCBwa3Rfb2N0ZXRfbGVuKQoreworICAgIGludCBvY3RldHNfaW5fcnRwX2hlYWRlciA9IDEyOworICAgIHVpbnQ4X3QgKmRhdGEgPSAoKHVpbnQ4X3QgKiloZHIpICsgb2N0ZXRzX2luX3J0cF9oZWFkZXI7CisgICAgaW50IGhleF9sZW4gPSBwa3Rfb2N0ZXRfbGVuIC0gb2N0ZXRzX2luX3J0cF9oZWFkZXI7CiAKLSAgLyogc2FuaXR5IGNoZWNraW5nICovCi0gIGlmICgoaGRyID09IE5VTEwpIHx8IChwa3Rfb2N0ZXRfbGVuID4gTVRVKSkKLSAgICByZXR1cm4gTlVMTDsKKyAgICAvKiBzYW5pdHkgY2hlY2tpbmcgKi8KKyAgICBpZiAoKGhkciA9PSBOVUxMKSB8fCAocGt0X29jdGV0X2xlbiA+IE1UVSkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gIC8qIHdyaXRlIHBhY2tldCBpbnRvIHN0cmluZyAqLwotICBzcHJpbnRmKHBhY2tldF9zdHJpbmcsIAotCSAgIihzKXJ0cCBwYWNrZXQ6IHtcbiIKLQkgICIgICB2ZXJzaW9uOlx0JWRcbiIgCi0JICAiICAgcDpcdFx0JWRcbiIgICAgIAotCSAgIiAgIHg6XHRcdCVkXG4iICAgICAKLQkgICIgICBjYzpcdFx0JWRcbiIgICAgCi0JICAiICAgbTpcdFx0JWRcbiIgICAgIAotCSAgIiAgIHB0Olx0XHQleFxuIiAgICAKLQkgICIgICBzZXE6XHRcdCV4XG4iICAgCi0JICAiICAgdHM6XHRcdCV4XG4iICAgIAotCSAgIiAgIHNzcmM6XHQleFxuIiAgICAKLQkgICIgICBkYXRhOlx0JXNcbiIgICAgCi0JICAifSAoJWQgb2N0ZXRzIGluIHRvdGFsKVxuIiwgCi0JICBoZHItPnZlcnNpb24sICAKLQkgIGhkci0+cCwJICAgICAgIAotCSAgaGRyLT54LAkgICAgICAgCi0JICBoZHItPmNjLCAgICAgICAKLQkgIGhkci0+bSwJICAgICAgIAotCSAgaGRyLT5wdCwgICAgICAgCi0JICBoZHItPnNlcSwgICAgICAKLQkgIGhkci0+dHMsICAgICAgIAotCSAgaGRyLT5zc3JjLCAgICAgIAotICAJICBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhkYXRhLCBoZXhfbGVuKSwKLQkgIHBrdF9vY3RldF9sZW4pOworICAgIC8qIHdyaXRlIHBhY2tldCBpbnRvIHN0cmluZyAqLworICAgIHNwcmludGYocGFja2V0X3N0cmluZywgIihzKXJ0cCBwYWNrZXQ6IHtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICB2ZXJzaW9uOlx0JWRcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICBwOlx0XHQlZFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIHg6XHRcdCVkXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgY2M6XHRcdCVkXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgbTpcdFx0JWRcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICBwdDpcdFx0JXhcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICBzZXE6XHRcdCV4XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgdHM6XHRcdCV4XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgc3NyYzpcdCV4XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgZGF0YTpcdCVzXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAifSAoJWQgb2N0ZXRzIGluIHRvdGFsKVxuIiwKKyAgICAgICAgICAgIGhkci0+dmVyc2lvbiwgaGRyLT5wLCBoZHItPngsIGhkci0+Y2MsIGhkci0+bSwgaGRyLT5wdCwgaGRyLT5zZXEsCisgICAgICAgICAgICBoZHItPnRzLCBoZHItPnNzcmMsIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKGRhdGEsIGhleF9sZW4pLAorICAgICAgICAgICAgcGt0X29jdGV0X2xlbik7CiAKLSAgcmV0dXJuIHBhY2tldF9zdHJpbmc7CisgICAgcmV0dXJuIHBhY2tldF9zdHJpbmc7CiB9CiAKIC8qCkBAIC04NzEsMzQxICsxNTk3LDIxODUgQEAKICAqIG9wdGltaXplIGF3YXkgdGhlIGZ1bmN0aW9uCiAgKi8KIAotZG91YmxlCi1taXBzX2VzdGltYXRlKGludCBudW1fdHJpYWxzLCBpbnQgKmlnbm9yZSkgewotICBjbG9ja190IHQ7Ci0gIGludCBpLCBzdW07Citkb3VibGUgbWlwc19lc3RpbWF0ZShpbnQgbnVtX3RyaWFscywgaW50ICppZ25vcmUpCit7CisgICAgY2xvY2tfdCB0OworICAgIHZvbGF0aWxlIGludCBpLCBzdW07CiAKLSAgc3VtID0gMDsKLSAgdCA9IGNsb2NrKCk7Ci0gIGZvciAoaT0wOyBpPG51bV90cmlhbHM7IGkrKykKLSAgICBzdW0gKz0gaTsKLSAgdCA9IGNsb2NrKCkgLSB0OworICAgIHN1bSA9IDA7CisgICAgdCA9IGNsb2NrKCk7CisgICAgZm9yIChpID0gMDsgaSA8IG51bV90cmlhbHM7IGkrKykgeworICAgICAgICBzdW0gKz0gaTsKKyAgICB9CisgICAgdCA9IGNsb2NrKCkgLSB0OworICAgIGlmICh0IDwgMSkgeworICAgICAgICB0ID0gMTsKKyAgICB9CiAKLS8qICAgcHJpbnRmKCIlZFxuIiwgc3VtKTsgKi8KLSAgKmlnbm9yZSA9IHN1bTsKKyAgICAvKiAgIHByaW50ZigiJWRcbiIsIHN1bSk7ICovCisgICAgKmlnbm9yZSA9IHN1bTsKIAotICByZXR1cm4gKGRvdWJsZSkgbnVtX3RyaWFscyAqIENMT0NLU19QRVJfU0VDIC8gdDsKKyAgICByZXR1cm4gKGRvdWJsZSludW1fdHJpYWxzICogQ0xPQ0tTX1BFUl9TRUMgLyB0OwogfQogCi0KIC8qCiAgKiBzcnRwX3ZhbGlkYXRlKCkgdmVyaWZpZXMgdGhlIGNvcnJlY3RuZXNzIG9mIGxpYnNydHAgYnkgY29tcGFyaW5nCiAgKiBzb21lIGNvbXB1dGVkIHBhY2tldHMgYWdhaW5zdCBzb21lIHByZS1jb21wdXRlZCByZWZlcmVuY2UgdmFsdWVzLgogICogVGhlc2UgcGFja2V0cyB3ZXJlIG1hZGUgd2l0aCB0aGUgZGVmYXVsdCBTUlRQIHBvbGljeS4KICAqLwogCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX3ZhbGlkYXRlKCkKK3sKKyAgICAvLyBjbGFuZy1mb3JtYXQgb2ZmCisgICAgdWludDhfdCBzcnRwX3BsYWludGV4dF9yZWZbMjhdID0geworICAgICAgICAweDgwLCAweDBmLCAweDEyLCAweDM0LCAweGRlLCAweGNhLCAweGZiLCAweGFkLAorICAgICAgICAweGNhLCAweGZlLCAweGJhLCAweGJlLCAweGFiLCAweGFiLCAweGFiLCAweGFiLAorICAgICAgICAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLAorICAgICAgICAweGFiLCAweGFiLCAweGFiLCAweGFiCisgICAgfTsKKyAgICB1aW50OF90IHNydHBfcGxhaW50ZXh0WzM4XSA9IHsKKyAgICAgICAgMHg4MCwgMHgwZiwgMHgxMiwgMHgzNCwgMHhkZSwgMHhjYSwgMHhmYiwgMHhhZCwKKyAgICAgICAgMHhjYSwgMHhmZSwgMHhiYSwgMHhiZSwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwKKyAgICAgICAgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwKKyAgICAgICAgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorICAgIH07CisgICAgdWludDhfdCBzcnRwX2NpcGhlcnRleHRbMzhdID0geworICAgICAgICAweDgwLCAweDBmLCAweDEyLCAweDM0LCAweGRlLCAweGNhLCAweGZiLCAweGFkLAorICAgICAgICAweGNhLCAweGZlLCAweGJhLCAweGJlLCAweDRlLCAweDU1LCAweGRjLCAweDRjLAorICAgICAgICAweGU3LCAweDk5LCAweDc4LCAweGQ4LCAweDhjLCAweGE0LCAweGQyLCAweDE1LAorICAgICAgICAweDk0LCAweDlkLCAweDI0LCAweDAyLCAweGI3LCAweDhkLCAweDZhLCAweGNjLAorICAgICAgICAweDk5LCAweGVhLCAweDE3LCAweDliLCAweDhkLCAweGJiCisgICAgfTsKKyAgICB1aW50OF90IHJ0Y3BfcGxhaW50ZXh0X3JlZlsyNF0gPSB7CisgICAgICAgIDB4ODEsIDB4YzgsIDB4MDAsIDB4MGIsIDB4Y2EsIDB4ZmUsIDB4YmEsIDB4YmUsCisgICAgICAgIDB4YWIsIDB4YWIsIDB4YWIsIDB4YWIsIDB4YWIsIDB4YWIsIDB4YWIsIDB4YWIsCisgICAgICAgIDB4YWIsIDB4YWIsIDB4YWIsIDB4YWIsIDB4YWIsIDB4YWIsIDB4YWIsIDB4YWIsCisgICAgfTsKKyAgICB1aW50OF90IHJ0Y3BfcGxhaW50ZXh0WzM4XSA9IHsKKyAgICAgICAgMHg4MSwgMHhjOCwgMHgwMCwgMHgwYiwgMHhjYSwgMHhmZSwgMHhiYSwgMHhiZSwKKyAgICAgICAgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwKKyAgICAgICAgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwKKyAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorICAgIH07CisgICAgdWludDhfdCBzcnRjcF9jaXBoZXJ0ZXh0WzM4XSA9IHsKKyAgICAgICAgMHg4MSwgMHhjOCwgMHgwMCwgMHgwYiwgMHhjYSwgMHhmZSwgMHhiYSwgMHhiZSwKKyAgICAgICAgMHg3MSwgMHgyOCwgMHgwMywgMHg1YiwgMHhlNCwgMHg4NywgMHhiOSwgMHhiZCwKKyAgICAgICAgMHhiZSwgMHhmOCwgMHg5MCwgMHg0MSwgMHhmOSwgMHg3NywgMHhhNSwgMHhhOCwKKyAgICAgICAgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg5OSwgMHgzZSwgMHgwOCwgMHhjZCwKKyAgICAgICAgMHg1NCwgMHhkNiwgMHhjMSwgMHgyMywgMHgwNywgMHg5OAorICAgIH07CisgICAgLy8gY2xhbmctZm9ybWF0IG9uCiAKLWVycl9zdGF0dXNfdAotc3J0cF92YWxpZGF0ZSgpIHsKLSAgdW5zaWduZWQgY2hhciB0ZXN0X2tleVszMF0gPSB7Ci0gICAgMHhlMSwgMHhmOSwgMHg3YSwgMHgwZCwgMHgzZSwgMHgwMSwgMHg4YiwgMHhlMCwKLSAgICAweGQ2LCAweDRmLCAweGEzLCAweDJjLCAweDA2LCAweGRlLCAweDQxLCAweDM5LAotICAgIDB4MGUsIDB4YzYsIDB4NzUsIDB4YWQsIDB4NDksIDB4OGEsIDB4ZmUsIDB4ZWIsCi0gICAgMHhiNiwgMHg5NiwgMHgwYiwgMHgzYSwgMHhhYiwgMHhlNgotICB9OwotICBvY3RldF90IHNydHBfcGxhaW50ZXh0X3JlZlsyOF0gPSB7Ci0gICAgMHg4MCwgMHgwZiwgMHgxMiwgMHgzNCwgMHhkZSwgMHhjYSwgMHhmYiwgMHhhZCwgCi0gICAgMHhjYSwgMHhmZSwgMHhiYSwgMHhiZSwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwKLSAgICAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLCAKLSAgICAweGFiLCAweGFiLCAweGFiLCAweGFiCi0gIH07Ci0gIG9jdGV0X3Qgc3J0cF9wbGFpbnRleHRbMzhdID0gewotICAgIDB4ODAsIDB4MGYsIDB4MTIsIDB4MzQsIDB4ZGUsIDB4Y2EsIDB4ZmIsIDB4YWQsIAotICAgIDB4Y2EsIDB4ZmUsIDB4YmEsIDB4YmUsIDB4YWIsIDB4YWIsIDB4YWIsIDB4YWIsCi0gICAgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgCi0gICAgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgCi0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAotICB9OwotICBvY3RldF90IHNydHBfY2lwaGVydGV4dFszOF0gPSB7Ci0gICAgMHg4MCwgMHgwZiwgMHgxMiwgMHgzNCwgMHhkZSwgMHhjYSwgMHhmYiwgMHhhZCwgCi0gICAgMHhjYSwgMHhmZSwgMHhiYSwgMHhiZSwgMHg0ZSwgMHg1NSwgMHhkYywgMHg0YywKLSAgICAweGU3LCAweDk5LCAweDc4LCAweGQ4LCAweDhjLCAweGE0LCAweGQyLCAweDE1LCAKLSAgICAweDk0LCAweDlkLCAweDI0LCAweDAyLCAweGI3LCAweDhkLCAweDZhLCAweGNjLAotICAgIDB4OTksIDB4ZWEsIDB4MTcsIDB4OWIsIDB4OGQsIDB4YmIKLSAgfTsKLSAgc3J0cF90IHNydHBfc25kLCBzcnRwX3JlY3Y7Ci0gIGVycl9zdGF0dXNfdCBzdGF0dXM7Ci0gIGludCBsZW47Ci0gIHNydHBfcG9saWN5X3QgcG9saWN5OwotICAKLSAgLyoKLSAgICogY3JlYXRlIGEgc2Vzc2lvbiB3aXRoIGEgc2luZ2xlIHN0cmVhbSB1c2luZyB0aGUgZGVmYXVsdCBzcnRwCi0gICAqIHBvbGljeSBhbmQgd2l0aCB0aGUgU1NSQyB2YWx1ZSAweGNhZmViYWJlCi0gICAqLwotICBjcnlwdG9fcG9saWN5X3NldF9ydHBfZGVmYXVsdCgmcG9saWN5LnJ0cCk7Ci0gIGNyeXB0b19wb2xpY3lfc2V0X3J0Y3BfZGVmYXVsdCgmcG9saWN5LnJ0Y3ApOwotICBwb2xpY3kuc3NyYy50eXBlICA9IHNzcmNfc3BlY2lmaWM7Ci0gIHBvbGljeS5zc3JjLnZhbHVlID0gMHhjYWZlYmFiZTsKLSAgcG9saWN5LmtleSAgPSB0ZXN0X2tleTsKLSAgcG9saWN5Lm5leHQgPSBOVUxMOworICAgIHNydHBfdCBzcnRwX3NuZCwgc3J0cF9yZWN2OworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKKyAgICBpbnQgbGVuOworICAgIHNydHBfcG9saWN5X3QgcG9saWN5OwogCi0gIHN0YXR1cyA9IHNydHBfY3JlYXRlKCZzcnRwX3NuZCwgJnBvbGljeSk7Ci0gIGlmIChzdGF0dXMpCi0gICAgcmV0dXJuIHN0YXR1czsKLSAKLSAgLyogCi0gICAqIHByb3RlY3QgcGxhaW50ZXh0LCB0aGVuIGNvbXBhcmUgd2l0aCBjaXBoZXJ0ZXh0IAotICAgKi8KLSAgbGVuID0gMjg7Ci0gIHN0YXR1cyA9IHNydHBfcHJvdGVjdChzcnRwX3NuZCwgc3J0cF9wbGFpbnRleHQsICZsZW4pOwotICBpZiAoc3RhdHVzIHx8IChsZW4gIT0gMzgpKQotICAgIHJldHVybiBlcnJfc3RhdHVzX2ZhaWw7CisgICAgLyoKKyAgICAgKiBjcmVhdGUgYSBzZXNzaW9uIHdpdGggYSBzaW5nbGUgc3RyZWFtIHVzaW5nIHRoZSBkZWZhdWx0IHNydHAKKyAgICAgKiBwb2xpY3kgYW5kIHdpdGggdGhlIFNTUkMgdmFsdWUgMHhjYWZlYmFiZQorICAgICAqLworICAgIG1lbXNldCgmcG9saWN5LCAwLCBzaXplb2YocG9saWN5KSk7CisgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9ydHBfZGVmYXVsdCgmcG9saWN5LnJ0cCk7CisgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9ydGNwX2RlZmF1bHQoJnBvbGljeS5ydGNwKTsKKyAgICBwb2xpY3kuc3NyYy50eXBlID0gc3NyY19zcGVjaWZpYzsKKyAgICBwb2xpY3kuc3NyYy52YWx1ZSA9IDB4Y2FmZWJhYmU7CisgICAgcG9saWN5LmtleSA9IHRlc3Rfa2V5OworICAgIHBvbGljeS5la3QgPSBOVUxMOworICAgIHBvbGljeS53aW5kb3dfc2l6ZSA9IDEyODsKKyAgICBwb2xpY3kuYWxsb3dfcmVwZWF0X3R4ID0gMDsKKyAgICBwb2xpY3kubmV4dCA9IE5VTEw7CiAKLSAgZGVidWdfcHJpbnQobW9kX2RyaXZlciwgImNpcGhlcnRleHQ6XG4gICVzIiwgCSAgICAgIAotCSAgICAgIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKHNydHBfcGxhaW50ZXh0LCBsZW4pKTsKLSAgZGVidWdfcHJpbnQobW9kX2RyaXZlciwgImNpcGhlcnRleHQgcmVmZXJlbmNlOlxuICAlcyIsIAkgICAgICAKLQkgICAgICBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhzcnRwX2NpcGhlcnRleHQsIGxlbikpOworICAgIHN0YXR1cyA9IHNydHBfY3JlYXRlKCZzcnRwX3NuZCwgJnBvbGljeSk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KIAotICBpZiAob2N0ZXRfc3RyaW5nX2lzX2VxKHNydHBfcGxhaW50ZXh0LCBzcnRwX2NpcGhlcnRleHQsIGxlbikpCi0gICAgcmV0dXJuIGVycl9zdGF0dXNfZmFpbDsKLSAgCi0gIC8qCi0gICAqIGNyZWF0ZSBhIHJlY2VpdmVyIHNlc3Npb24gY29udGV4dCBjb21wYXJhYmxlIHRvIHRoZSBvbmUgY3JlYXRlZAotICAgKiBhYm92ZSAtIHdlIG5lZWQgdG8gZG8gdGhpcyBzbyB0aGF0IHRoZSByZXBsYXkgY2hlY2tpbmcgZG9lc24ndAotICAgKiBjb21wbGFpbgotICAgKi8KLSAgc3RhdHVzID0gc3J0cF9jcmVhdGUoJnNydHBfcmVjdiwgJnBvbGljeSk7Ci0gIGlmIChzdGF0dXMpCi0gICAgcmV0dXJuIHN0YXR1czsKKyAgICAvKgorICAgICAqIHByb3RlY3QgcGxhaW50ZXh0LCB0aGVuIGNvbXBhcmUgd2l0aCBjaXBoZXJ0ZXh0CisgICAgICovCisgICAgbGVuID0gMjg7CisgICAgc3RhdHVzID0gc3J0cF9wcm90ZWN0KHNydHBfc25kLCBzcnRwX3BsYWludGV4dCwgJmxlbik7CisgICAgaWYgKHN0YXR1cyB8fCAobGVuICE9IDM4KSkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2ZhaWw7CisgICAgfQogCi0gIC8qCi0gICAqIHVucHJvdGVjdCBjaXBoZXJ0ZXh0LCB0aGVuIGNvbXBhcmUgd2l0aCBwbGFpbnRleHQgCi0gICAqLwotICBzdGF0dXMgPSBzcnRwX3VucHJvdGVjdChzcnRwX3JlY3YsIHNydHBfY2lwaGVydGV4dCwgJmxlbik7Ci0gIGlmIChzdGF0dXMgfHwgKGxlbiAhPSAyOCkpCi0gICAgcmV0dXJuIHN0YXR1czsKLSAgCi0gIGlmIChvY3RldF9zdHJpbmdfaXNfZXEoc3J0cF9jaXBoZXJ0ZXh0LCBzcnRwX3BsYWludGV4dF9yZWYsIGxlbikpCi0gICAgcmV0dXJuIGVycl9zdGF0dXNfZmFpbDsKKyAgICBkZWJ1Z19wcmludChtb2RfZHJpdmVyLCAiY2lwaGVydGV4dDpcbiAgJXMiLAorICAgICAgICAgICAgICAgIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKHNydHBfcGxhaW50ZXh0LCBsZW4pKTsKKyAgICBkZWJ1Z19wcmludChtb2RfZHJpdmVyLCAiY2lwaGVydGV4dCByZWZlcmVuY2U6XG4gICVzIiwKKyAgICAgICAgICAgICAgICBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhzcnRwX2NpcGhlcnRleHQsIGxlbikpOwogCi0gIHJldHVybiBlcnJfc3RhdHVzX29rOworICAgIGlmIChzcnRwX29jdGV0X3N0cmluZ19pc19lcShzcnRwX3BsYWludGV4dCwgc3J0cF9jaXBoZXJ0ZXh0LCBsZW4pKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfZmFpbDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHByb3RlY3QgcGxhaW50ZXh0IHJ0Y3AsIHRoZW4gY29tcGFyZSB3aXRoIHNydGNwIGNpcGhlcnRleHQKKyAgICAgKi8KKyAgICBsZW4gPSAyNDsKKyAgICBzdGF0dXMgPSBzcnRwX3Byb3RlY3RfcnRjcChzcnRwX3NuZCwgcnRjcF9wbGFpbnRleHQsICZsZW4pOworICAgIGlmIChzdGF0dXMgfHwgKGxlbiAhPSAzOCkpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19mYWlsOworICAgIH0KKworICAgIGRlYnVnX3ByaW50KG1vZF9kcml2ZXIsICJzcnRjcCBjaXBoZXJ0ZXh0OlxuICAlcyIsCisgICAgICAgICAgICAgICAgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcocnRjcF9wbGFpbnRleHQsIGxlbikpOworICAgIGRlYnVnX3ByaW50KG1vZF9kcml2ZXIsICJzcnRjcCBjaXBoZXJ0ZXh0IHJlZmVyZW5jZTpcbiAgJXMiLAorICAgICAgICAgICAgICAgIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKHNydGNwX2NpcGhlcnRleHQsIGxlbikpOworCisgICAgaWYgKHNydHBfb2N0ZXRfc3RyaW5nX2lzX2VxKHJ0Y3BfcGxhaW50ZXh0LCBzcnRjcF9jaXBoZXJ0ZXh0LCBsZW4pKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfZmFpbDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGNyZWF0ZSBhIHJlY2VpdmVyIHNlc3Npb24gY29udGV4dCBjb21wYXJhYmxlIHRvIHRoZSBvbmUgY3JlYXRlZAorICAgICAqIGFib3ZlIC0gd2UgbmVlZCB0byBkbyB0aGlzIHNvIHRoYXQgdGhlIHJlcGxheSBjaGVja2luZyBkb2Vzbid0CisgICAgICogY29tcGxhaW4KKyAgICAgKi8KKyAgICBzdGF0dXMgPSBzcnRwX2NyZWF0ZSgmc3J0cF9yZWN2LCAmcG9saWN5KTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgLyoKKyAgICAgKiB1bnByb3RlY3QgY2lwaGVydGV4dCwgdGhlbiBjb21wYXJlIHdpdGggcGxhaW50ZXh0CisgICAgICovCisgICAgc3RhdHVzID0gc3J0cF91bnByb3RlY3Qoc3J0cF9yZWN2LCBzcnRwX2NpcGhlcnRleHQsICZsZW4pOworICAgIGlmIChzdGF0dXMgfHwgKGxlbiAhPSAyOCkpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBpZiAoc3J0cF9vY3RldF9zdHJpbmdfaXNfZXEoc3J0cF9jaXBoZXJ0ZXh0LCBzcnRwX3BsYWludGV4dF9yZWYsIGxlbikpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19mYWlsOworICAgIH0KKworICAgIC8qCisgICAgICogdW5wcm90ZWN0IHNydGNwIGNpcGhlcnRleHQsIHRoZW4gY29tcGFyZSB3aXRoIHJ0Y3AgcGxhaW50ZXh0CisgICAgICovCisgICAgbGVuID0gMzg7CisgICAgc3RhdHVzID0gc3J0cF91bnByb3RlY3RfcnRjcChzcnRwX3JlY3YsIHNydGNwX2NpcGhlcnRleHQsICZsZW4pOworICAgIGlmIChzdGF0dXMgfHwgKGxlbiAhPSAyNCkpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBpZiAoc3J0cF9vY3RldF9zdHJpbmdfaXNfZXEoc3J0Y3BfY2lwaGVydGV4dCwgcnRjcF9wbGFpbnRleHRfcmVmLCBsZW4pKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfZmFpbDsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBzcnRwX2RlYWxsb2Moc3J0cF9zbmQpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBzcnRwX2RlYWxsb2Moc3J0cF9yZWN2KTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKIH0KIAorI2lmZGVmIEdDTQorLyoKKyAqIHNydHBfdmFsaWRhdGVfZ2NtKCkgdmVyaWZpZXMgdGhlIGNvcnJlY3RuZXNzIG9mIGxpYnNydHAgYnkgY29tcGFyaW5nCisgKiBhbiBjb21wdXRlZCBwYWNrZXQgYWdhaW5zdCB0aGUga25vd24gY2lwaGVydGV4dCBmb3IgdGhlIHBsYWludGV4dC4KKyAqLworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF92YWxpZGF0ZV9nY20oKQoreworICAgIC8vIGNsYW5nLWZvcm1hdCBvZmYKKyAgICB1bnNpZ25lZCBjaGFyIHRlc3Rfa2V5X2djbVsyOF0gPSB7CisgICAgICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCisgICAgICAgIDB4YTAsIDB4YTEsIDB4YTIsIDB4YTMsIDB4YTQsIDB4YTUsIDB4YTYsIDB4YTcsCisgICAgICAgIDB4YTgsIDB4YTksIDB4YWEsIDB4YWIKKyAgICB9OworICAgIHVpbnQ4X3QgcnRwX3BsYWludGV4dF9yZWZbMjhdID0geworICAgICAgICAweDgwLCAweDBmLCAweDEyLCAweDM0LCAweGRlLCAweGNhLCAweGZiLCAweGFkLAorICAgICAgICAweGNhLCAweGZlLCAweGJhLCAweGJlLCAweGFiLCAweGFiLCAweGFiLCAweGFiLAorICAgICAgICAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLAorICAgICAgICAweGFiLCAweGFiLCAweGFiLCAweGFiCisgICAgfTsKKyAgICB1aW50OF90IHJ0cF9wbGFpbnRleHRbNDRdID0geworICAgICAgICAweDgwLCAweDBmLCAweDEyLCAweDM0LCAweGRlLCAweGNhLCAweGZiLCAweGFkLAorICAgICAgICAweGNhLCAweGZlLCAweGJhLCAweGJlLCAweGFiLCAweGFiLCAweGFiLCAweGFiLAorICAgICAgICAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLAorICAgICAgICAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwCisgICAgfTsKKyAgICB1aW50OF90IHNydHBfY2lwaGVydGV4dFs0NF0gPSB7CisgICAgICAgIDB4ODAsIDB4MGYsIDB4MTIsIDB4MzQsIDB4ZGUsIDB4Y2EsIDB4ZmIsIDB4YWQsCisgICAgICAgIDB4Y2EsIDB4ZmUsIDB4YmEsIDB4YmUsIDB4YzUsIDB4MDAsIDB4MmUsIDB4ZGUsCisgICAgICAgIDB4MDQsIDB4Y2YsIDB4ZGQsIDB4MmUsIDB4YjksIDB4MTEsIDB4NTksIDB4ZTAsCisgICAgICAgIDB4ODgsIDB4MGEsIDB4YTAsIDB4NmUsIDB4ZDIsIDB4OTcsIDB4NjgsIDB4MjYsCisgICAgICAgIDB4ZjcsIDB4OTYsIDB4YjIsIDB4MDEsIDB4ZGYsIDB4MzEsIDB4MzEsIDB4YTEsCisgICAgICAgIDB4MjcsIDB4ZTgsIDB4YTMsIDB4OTIKKyAgICB9OworICAgIHVpbnQ4X3QgcnRjcF9wbGFpbnRleHRfcmVmWzI0XSA9IHsKKyAgICAgICAgMHg4MSwgMHhjOCwgMHgwMCwgMHgwYiwgMHhjYSwgMHhmZSwgMHhiYSwgMHhiZSwKKyAgICAgICAgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwKKyAgICAgICAgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwKKyAgICB9OworICAgIHVpbnQ4X3QgcnRjcF9wbGFpbnRleHRbNDRdID0geworICAgICAgICAweDgxLCAweGM4LCAweDAwLCAweDBiLCAweGNhLCAweGZlLCAweGJhLCAweGJlLAorICAgICAgICAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLAorICAgICAgICAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLAorICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwCisgICAgfTsKKyAgICB1aW50OF90IHNydGNwX2NpcGhlcnRleHRbNDRdID0geworICAgICAgICAweDgxLCAweGM4LCAweDAwLCAweDBiLCAweGNhLCAweGZlLCAweGJhLCAweGJlLAorICAgICAgICAweGM5LCAweDhiLCAweDhiLCAweDVkLCAweGYwLCAweDM5LCAweDJhLCAweDU1LAorICAgICAgICAweDg1LCAweDJiLCAweDZjLCAweDIxLCAweGFjLCAweDhlLCAweDcwLCAweDI1LAorICAgICAgICAweGM1LCAweDJjLCAweDZmLCAweGJlLCAweGEyLCAweGIzLCAweGI0LCAweDQ2LAorICAgICAgICAweGVhLCAweDMxLCAweDEyLCAweDNiLCAweGE4LCAweDhjLCAweGU2LCAweDFlLAorICAgICAgICAweDgwLCAweDAwLCAweDAwLCAweDAxCisgICAgfTsKKyAgICAvLyBjbGFuZy1mb3JtYXQgb24KIAotZXJyX3N0YXR1c190Ci1zcnRwX2NyZWF0ZV9iaWdfcG9saWN5KHNydHBfcG9saWN5X3QgKipsaXN0KSB7Ci0gIGV4dGVybiBjb25zdCBzcnRwX3BvbGljeV90ICpwb2xpY3lfYXJyYXlbXTsKLSAgc3J0cF9wb2xpY3lfdCAqcCwgKnRtcDsKLSAgaW50IGkgPSAwOwotICB1aW50MzJfdCBzc3JjID0gMDsKKyAgICBzcnRwX3Qgc3J0cF9zbmQsIHNydHBfcmVjdjsKKyAgICBzcnRwX2Vycl9zdGF0dXNfdCBzdGF0dXM7CisgICAgaW50IGxlbjsKKyAgICBzcnRwX3BvbGljeV90IHBvbGljeTsKIAotICAvKiBzYW5pdHkgY2hlY2tpbmcgKi8KLSAgaWYgKChsaXN0ID09IE5VTEwpIHx8IChwb2xpY3lfYXJyYXlbMF0gPT0gTlVMTCkpCi0gICAgcmV0dXJuIGVycl9zdGF0dXNfYmFkX3BhcmFtOworICAgIC8qCisgICAgICogY3JlYXRlIGEgc2Vzc2lvbiB3aXRoIGEgc2luZ2xlIHN0cmVhbSB1c2luZyB0aGUgZGVmYXVsdCBzcnRwCisgICAgICogcG9saWN5IGFuZCB3aXRoIHRoZSBTU1JDIHZhbHVlIDB4Y2FmZWJhYmUKKyAgICAgKi8KKyAgICBtZW1zZXQoJnBvbGljeSwgMCwgc2l6ZW9mKHBvbGljeSkpOworICAgIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2djbV8xMjhfMTZfYXV0aCgmcG9saWN5LnJ0cCk7CisgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzEyOF8xNl9hdXRoKCZwb2xpY3kucnRjcCk7CisgICAgcG9saWN5LnNzcmMudHlwZSA9IHNzcmNfc3BlY2lmaWM7CisgICAgcG9saWN5LnNzcmMudmFsdWUgPSAweGNhZmViYWJlOworICAgIHBvbGljeS5rZXkgPSB0ZXN0X2tleV9nY207CisgICAgcG9saWN5LmVrdCA9IE5VTEw7CisgICAgcG9saWN5LndpbmRvd19zaXplID0gMTI4OworICAgIHBvbGljeS5hbGxvd19yZXBlYXRfdHggPSAwOworICAgIHBvbGljeS5uZXh0ID0gTlVMTDsKIAotICAvKiAKLSAgICogbG9vcCBvdmVyIHBvbGljeSBsaXN0LCBtYWxsb2NpbmcgYSBuZXcgbGlzdCBhbmQgY29weWluZyB2YWx1ZXMKLSAgICogaW50byBpdCAoYW5kIGluY3JlbWVudGluZyB0aGUgU1NSQyB2YWx1ZSBhcyB3ZSBnbyBhbG9uZykKLSAgICovCi0gIHRtcCA9IE5VTEw7Ci0gIHdoaWxlIChwb2xpY3lfYXJyYXlbaV0gIT0gTlVMTCkgewotICAgIHAgPSBtYWxsb2Moc2l6ZW9mKHNydHBfcG9saWN5X3QpKTsKLSAgICBpZiAocCA9PSBOVUxMKQotICAgICAgcmV0dXJuIGVycl9zdGF0dXNfYmFkX3BhcmFtOwotICAgIG1lbWNweShwLCBwb2xpY3lfYXJyYXlbaV0sIHNpemVvZihzcnRwX3BvbGljeV90KSk7Ci0gICAgcC0+c3NyYy50eXBlID0gc3NyY19zcGVjaWZpYzsKLSAgICBwLT5zc3JjLnZhbHVlID0gc3NyYysrOwotICAgIHAtPm5leHQgPSB0bXA7Ci0gICAgdG1wID0gcDsKLSAgICBpKys7Ci0gIH0KLSAgKmxpc3QgPSBwOwotIAotICByZXR1cm4gZXJyX3N0YXR1c19vazsKKyAgICBzdGF0dXMgPSBzcnRwX2NyZWF0ZSgmc3J0cF9zbmQsICZwb2xpY3kpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHByb3RlY3QgcGxhaW50ZXh0IHJ0cCwgdGhlbiBjb21wYXJlIHdpdGggc3J0cCBjaXBoZXJ0ZXh0CisgICAgICovCisgICAgbGVuID0gMjg7CisgICAgc3RhdHVzID0gc3J0cF9wcm90ZWN0KHNydHBfc25kLCBydHBfcGxhaW50ZXh0LCAmbGVuKTsKKyAgICBpZiAoc3RhdHVzIHx8IChsZW4gIT0gNDQpKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfZmFpbDsKKyAgICB9CisKKyAgICBkZWJ1Z19wcmludChtb2RfZHJpdmVyLCAic3J0cCBjaXBoZXJ0ZXh0OlxuICAlcyIsCisgICAgICAgICAgICAgICAgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcocnRwX3BsYWludGV4dCwgbGVuKSk7CisgICAgZGVidWdfcHJpbnQobW9kX2RyaXZlciwgInNydHAgY2lwaGVydGV4dCByZWZlcmVuY2U6XG4gICVzIiwKKyAgICAgICAgICAgICAgICBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhzcnRwX2NpcGhlcnRleHQsIGxlbikpOworCisgICAgaWYgKHNydHBfb2N0ZXRfc3RyaW5nX2lzX2VxKHJ0cF9wbGFpbnRleHQsIHNydHBfY2lwaGVydGV4dCwgbGVuKSkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2ZhaWw7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBwcm90ZWN0IHBsYWludGV4dCBydGNwLCB0aGVuIGNvbXBhcmUgd2l0aCBzcnRjcCBjaXBoZXJ0ZXh0CisgICAgICovCisgICAgbGVuID0gMjQ7CisgICAgc3RhdHVzID0gc3J0cF9wcm90ZWN0X3J0Y3Aoc3J0cF9zbmQsIHJ0Y3BfcGxhaW50ZXh0LCAmbGVuKTsKKyAgICBpZiAoc3RhdHVzIHx8IChsZW4gIT0gNDQpKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfZmFpbDsKKyAgICB9CisKKyAgICBkZWJ1Z19wcmludChtb2RfZHJpdmVyLCAic3J0Y3AgY2lwaGVydGV4dDpcbiAgJXMiLAorICAgICAgICAgICAgICAgIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKHJ0Y3BfcGxhaW50ZXh0LCBsZW4pKTsKKyAgICBkZWJ1Z19wcmludChtb2RfZHJpdmVyLCAic3J0Y3AgY2lwaGVydGV4dCByZWZlcmVuY2U6XG4gICVzIiwKKyAgICAgICAgICAgICAgICBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhzcnRjcF9jaXBoZXJ0ZXh0LCBsZW4pKTsKKworICAgIGlmIChzcnRwX29jdGV0X3N0cmluZ19pc19lcShydGNwX3BsYWludGV4dCwgc3J0Y3BfY2lwaGVydGV4dCwgbGVuKSkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2ZhaWw7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBjcmVhdGUgYSByZWNlaXZlciBzZXNzaW9uIGNvbnRleHQgY29tcGFyYWJsZSB0byB0aGUgb25lIGNyZWF0ZWQKKyAgICAgKiBhYm92ZSAtIHdlIG5lZWQgdG8gZG8gdGhpcyBzbyB0aGF0IHRoZSByZXBsYXkgY2hlY2tpbmcgZG9lc24ndAorICAgICAqIGNvbXBsYWluCisgICAgICovCisgICAgc3RhdHVzID0gc3J0cF9jcmVhdGUoJnNydHBfcmVjdiwgJnBvbGljeSk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8qCisgICAgICogdW5wcm90ZWN0IHNydHAgY2lwaGVydGV4dCwgdGhlbiBjb21wYXJlIHdpdGggcnRwIHBsYWludGV4dAorICAgICAqLworICAgIGxlbiA9IDQ0OworICAgIHN0YXR1cyA9IHNydHBfdW5wcm90ZWN0KHNydHBfcmVjdiwgc3J0cF9jaXBoZXJ0ZXh0LCAmbGVuKTsKKyAgICBpZiAoc3RhdHVzIHx8IChsZW4gIT0gMjgpKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgaWYgKHNydHBfb2N0ZXRfc3RyaW5nX2lzX2VxKHNydHBfY2lwaGVydGV4dCwgcnRwX3BsYWludGV4dF9yZWYsIGxlbikpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19mYWlsOworICAgIH0KKworICAgIC8qCisgICAgICogdW5wcm90ZWN0IHNydGNwIGNpcGhlcnRleHQsIHRoZW4gY29tcGFyZSB3aXRoIHJ0Y3AgcGxhaW50ZXh0CisgICAgICovCisgICAgbGVuID0gNDQ7CisgICAgc3RhdHVzID0gc3J0cF91bnByb3RlY3RfcnRjcChzcnRwX3JlY3YsIHNydGNwX2NpcGhlcnRleHQsICZsZW4pOworICAgIGlmIChzdGF0dXMgfHwgKGxlbiAhPSAyNCkpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBpZiAoc3J0cF9vY3RldF9zdHJpbmdfaXNfZXEoc3J0Y3BfY2lwaGVydGV4dCwgcnRjcF9wbGFpbnRleHRfcmVmLCBsZW4pKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfZmFpbDsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBzcnRwX2RlYWxsb2Moc3J0cF9zbmQpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBzcnRwX2RlYWxsb2Moc3J0cF9yZWN2KTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKyNlbmRpZgorCisvKgorICogVGVzdCB2ZWN0b3JzIHRha2VuIGZyb20gUkZDIDY5MDQsIEFwcGVuZGl4IEEKKyAqLworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF92YWxpZGF0ZV9lbmNyeXB0ZWRfZXh0ZW5zaW9uc19oZWFkZXJzKCkKK3sKKyAgICAvLyBjbGFuZy1mb3JtYXQgb2ZmCisgICAgdW5zaWduZWQgY2hhciB0ZXN0X2tleV9leHRfaGVhZGVyc1szMF0gPSB7CisgICAgICAgIDB4ZTEsIDB4ZjksIDB4N2EsIDB4MGQsIDB4M2UsIDB4MDEsIDB4OGIsIDB4ZTAsCisgICAgICAgIDB4ZDYsIDB4NGYsIDB4YTMsIDB4MmMsIDB4MDYsIDB4ZGUsIDB4NDEsIDB4MzksCisgICAgICAgIDB4MGUsIDB4YzYsIDB4NzUsIDB4YWQsIDB4NDksIDB4OGEsIDB4ZmUsIDB4ZWIsCisgICAgICAgIDB4YjYsIDB4OTYsIDB4MGIsIDB4M2EsIDB4YWIsIDB4ZTYKKyAgICB9OworICAgIHVpbnQ4X3Qgc3J0cF9wbGFpbnRleHRfcmVmWzU2XSA9IHsKKyAgICAgICAgMHg5MCwgMHgwZiwgMHgxMiwgMHgzNCwgMHhkZSwgMHhjYSwgMHhmYiwgMHhhZCwKKyAgICAgICAgMHhjYSwgMHhmZSwgMHhiYSwgMHhiZSwgMHhCRSwgMHhERSwgMHgwMCwgMHgwNiwKKyAgICAgICAgMHgxNywgMHg0MSwgMHg0MiwgMHg3MywgMHhBNCwgMHg3NSwgMHgyNiwgMHgyNywKKyAgICAgICAgMHg0OCwgMHgyMiwgMHgwMCwgMHgwMCwgMHhDOCwgMHgzMCwgMHg4RSwgMHg0NiwKKyAgICAgICAgMHg1NSwgMHg5OSwgMHg2MywgMHg4NiwgMHhCMywgMHg5NSwgMHhGQiwgMHgwMCwKKyAgICAgICAgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwKKyAgICAgICAgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYgorICAgIH07CisgICAgdWludDhfdCBzcnRwX3BsYWludGV4dFs2Nl0gPSB7CisgICAgICAgIDB4OTAsIDB4MGYsIDB4MTIsIDB4MzQsIDB4ZGUsIDB4Y2EsIDB4ZmIsIDB4YWQsCisgICAgICAgIDB4Y2EsIDB4ZmUsIDB4YmEsIDB4YmUsIDB4QkUsIDB4REUsIDB4MDAsIDB4MDYsCisgICAgICAgIDB4MTcsIDB4NDEsIDB4NDIsIDB4NzMsIDB4QTQsIDB4NzUsIDB4MjYsIDB4MjcsCisgICAgICAgIDB4NDgsIDB4MjIsIDB4MDAsIDB4MDAsIDB4QzgsIDB4MzAsIDB4OEUsIDB4NDYsCisgICAgICAgIDB4NTUsIDB4OTksIDB4NjMsIDB4ODYsIDB4QjMsIDB4OTUsIDB4RkIsIDB4MDAsCisgICAgICAgIDB4YWIsIDB4YWIsIDB4YWIsIDB4YWIsIDB4YWIsIDB4YWIsIDB4YWIsIDB4YWIsCisgICAgICAgIDB4YWIsIDB4YWIsIDB4YWIsIDB4YWIsIDB4YWIsIDB4YWIsIDB4YWIsIDB4YWIsCisgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgIDB4MDAsIDB4MDAKKyAgICB9OworICAgIHVpbnQ4X3Qgc3J0cF9jaXBoZXJ0ZXh0WzY2XSA9IHsKKyAgICAgICAgMHg5MCwgMHgwZiwgMHgxMiwgMHgzNCwgMHhkZSwgMHhjYSwgMHhmYiwgMHhhZCwKKyAgICAgICAgMHhjYSwgMHhmZSwgMHhiYSwgMHhiZSwgMHhCRSwgMHhERSwgMHgwMCwgMHgwNiwKKyAgICAgICAgMHgxNywgMHg1OCwgMHg4QSwgMHg5MiwgMHg3MCwgMHhGNCwgMHhFMSwgMHg1RSwKKyAgICAgICAgMHgxQywgMHgyMiwgMHgwMCwgMHgwMCwgMHhDOCwgMHgzMCwgMHg5NSwgMHg0NiwKKyAgICAgICAgMHhBOSwgMHg5NCwgMHhGMCwgMHhCQywgMHg1NCwgMHg3OCwgMHg5NywgMHgwMCwKKyAgICAgICAgMHg0ZSwgMHg1NSwgMHhkYywgMHg0YywgMHhlNywgMHg5OSwgMHg3OCwgMHhkOCwKKyAgICAgICAgMHg4YywgMHhhNCwgMHhkMiwgMHgxNSwgMHg5NCwgMHg5ZCwgMHgyNCwgMHgwMiwKKyAgICAgICAgMHg1YSwgMHg0NiwgMHhiMywgMHhjYSwgMHgzNSwgMHhjNSwgMHgzNSwgMHhhOCwKKyAgICAgICAgMHg5MSwgMHhjNworICAgIH07CisgICAgLy8gY2xhbmctZm9ybWF0IG9uCisKKyAgICBzcnRwX3Qgc3J0cF9zbmQsIHNydHBfcmVjdjsKKyAgICBzcnRwX2Vycl9zdGF0dXNfdCBzdGF0dXM7CisgICAgaW50IGxlbjsKKyAgICBzcnRwX3BvbGljeV90IHBvbGljeTsKKyAgICBpbnQgaGVhZGVyc1szXSA9IHsgMSwgMywgNCB9OworCisgICAgLyoKKyAgICAgKiBjcmVhdGUgYSBzZXNzaW9uIHdpdGggYSBzaW5nbGUgc3RyZWFtIHVzaW5nIHRoZSBkZWZhdWx0IHNydHAKKyAgICAgKiBwb2xpY3kgYW5kIHdpdGggdGhlIFNTUkMgdmFsdWUgMHhjYWZlYmFiZQorICAgICAqLworICAgIG1lbXNldCgmcG9saWN5LCAwLCBzaXplb2YocG9saWN5KSk7CisgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9ydHBfZGVmYXVsdCgmcG9saWN5LnJ0cCk7CisgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9ydGNwX2RlZmF1bHQoJnBvbGljeS5ydGNwKTsKKyAgICBwb2xpY3kuc3NyYy50eXBlID0gc3NyY19zcGVjaWZpYzsKKyAgICBwb2xpY3kuc3NyYy52YWx1ZSA9IDB4Y2FmZWJhYmU7CisgICAgcG9saWN5LmtleSA9IHRlc3Rfa2V5X2V4dF9oZWFkZXJzOworICAgIHBvbGljeS5la3QgPSBOVUxMOworICAgIHBvbGljeS53aW5kb3dfc2l6ZSA9IDEyODsKKyAgICBwb2xpY3kuYWxsb3dfcmVwZWF0X3R4ID0gMDsKKyAgICBwb2xpY3kuZW5jX3h0bl9oZHIgPSBoZWFkZXJzOworICAgIHBvbGljeS5lbmNfeHRuX2hkcl9jb3VudCA9IHNpemVvZihoZWFkZXJzKSAvIHNpemVvZihoZWFkZXJzWzBdKTsKKyAgICBwb2xpY3kubmV4dCA9IE5VTEw7CisKKyAgICBzdGF0dXMgPSBzcnRwX2NyZWF0ZSgmc3J0cF9zbmQsICZwb2xpY3kpOworICAgIGlmIChzdGF0dXMpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICAvKgorICAgICAqIHByb3RlY3QgcGxhaW50ZXh0LCB0aGVuIGNvbXBhcmUgd2l0aCBjaXBoZXJ0ZXh0CisgICAgICovCisgICAgbGVuID0gc2l6ZW9mKHNydHBfcGxhaW50ZXh0X3JlZik7CisgICAgc3RhdHVzID0gc3J0cF9wcm90ZWN0KHNydHBfc25kLCBzcnRwX3BsYWludGV4dCwgJmxlbik7CisgICAgaWYgKHN0YXR1cyB8fCAobGVuICE9IHNpemVvZihzcnRwX3BsYWludGV4dCkpKQorICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2ZhaWw7CisKKyAgICBkZWJ1Z19wcmludChtb2RfZHJpdmVyLCAiY2lwaGVydGV4dDpcbiAgJXMiLAorICAgICAgICAgICAgICAgIHNydHBfb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoc3J0cF9wbGFpbnRleHQsIGxlbikpOworICAgIGRlYnVnX3ByaW50KG1vZF9kcml2ZXIsICJjaXBoZXJ0ZXh0IHJlZmVyZW5jZTpcbiAgJXMiLAorICAgICAgICAgICAgICAgIHNydHBfb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoc3J0cF9jaXBoZXJ0ZXh0LCBsZW4pKTsKKworICAgIGlmIChzcnRwX29jdGV0X3N0cmluZ19pc19lcShzcnRwX3BsYWludGV4dCwgc3J0cF9jaXBoZXJ0ZXh0LCBsZW4pKQorICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2ZhaWw7CisKKyAgICAvKgorICAgICAqIGNyZWF0ZSBhIHJlY2VpdmVyIHNlc3Npb24gY29udGV4dCBjb21wYXJhYmxlIHRvIHRoZSBvbmUgY3JlYXRlZAorICAgICAqIGFib3ZlIC0gd2UgbmVlZCB0byBkbyB0aGlzIHNvIHRoYXQgdGhlIHJlcGxheSBjaGVja2luZyBkb2Vzbid0CisgICAgICogY29tcGxhaW4KKyAgICAgKi8KKyAgICBzdGF0dXMgPSBzcnRwX2NyZWF0ZSgmc3J0cF9yZWN2LCAmcG9saWN5KTsKKyAgICBpZiAoc3RhdHVzKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgLyoKKyAgICAgKiB1bnByb3RlY3QgY2lwaGVydGV4dCwgdGhlbiBjb21wYXJlIHdpdGggcGxhaW50ZXh0CisgICAgICovCisgICAgc3RhdHVzID0gc3J0cF91bnByb3RlY3Qoc3J0cF9yZWN2LCBzcnRwX2NpcGhlcnRleHQsICZsZW4pOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9IGVsc2UgaWYgKGxlbiAhPSBzaXplb2Yoc3J0cF9wbGFpbnRleHRfcmVmKSkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2ZhaWw7CisgICAgfQorCisgICAgaWYgKHNydHBfb2N0ZXRfc3RyaW5nX2lzX2VxKHNydHBfY2lwaGVydGV4dCwgc3J0cF9wbGFpbnRleHRfcmVmLCBsZW4pKQorICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2ZhaWw7CisKKyAgICBzdGF0dXMgPSBzcnRwX2RlYWxsb2Moc3J0cF9zbmQpOworICAgIGlmIChzdGF0dXMpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICBzdGF0dXMgPSBzcnRwX2RlYWxsb2Moc3J0cF9yZWN2KTsKKyAgICBpZiAoc3RhdHVzKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKIH0KIAotZXJyX3N0YXR1c190Ci1zcnRwX3Rlc3RfcmVtb3ZlX3N0cmVhbSgpIHsgCi0gIGVycl9zdGF0dXNfdCBzdGF0dXM7Ci0gIHNydHBfcG9saWN5X3QgKnBvbGljeV9saXN0OwotICBzcnRwX3Qgc2Vzc2lvbjsKLSAgc3J0cF9zdHJlYW1fdCBzdHJlYW07Ci0gIC8qIAotICAgKiBzcnRwX2dldF9zdHJlYW0oKSBpcyBhIGxpYlNSVFAgaW50ZXJuYWwgZnVuY3Rpb24gdGhhdCB3ZSBkZWNsYXJlCi0gICAqIGhlcmUgc28gdGhhdCB3ZSBjYW4gdXNlIGl0IHRvIHZlcmlmeSB0aGUgY29ycmVjdCBvcGVyYXRpb24gb2YgdGhlCi0gICAqIGxpYnJhcnkKLSAgICovIAotICBleHRlcm4gc3J0cF9zdHJlYW1fdCBzcnRwX2dldF9zdHJlYW0oc3J0cF90IHNydHAsIHVpbnQzMl90IHNzcmMpOwotICAKKyNpZmRlZiBHQ00KIAotICBzdGF0dXMgPSBzcnRwX2NyZWF0ZV9iaWdfcG9saWN5KCZwb2xpY3lfbGlzdCk7Ci0gIGlmIChzdGF0dXMpCi0gICAgcmV0dXJuIHN0YXR1czsKKy8qCisgKiBIZWFkZXJzIG9mIHRlc3QgdmVjdG9ycyB0YWtlbiBmcm9tIFJGQyA2OTA0LCBBcHBlbmRpeCBBCisgKi8KK3NydHBfZXJyX3N0YXR1c190IHNydHBfdmFsaWRhdGVfZW5jcnlwdGVkX2V4dGVuc2lvbnNfaGVhZGVyc19nY20oKQoreworICAgIC8vIGNsYW5nLWZvcm1hdCBvZmYKKyAgICB1bnNpZ25lZCBjaGFyIHRlc3Rfa2V5X2V4dF9oZWFkZXJzWzMwXSA9IHsKKyAgICAgICAgMHhlMSwgMHhmOSwgMHg3YSwgMHgwZCwgMHgzZSwgMHgwMSwgMHg4YiwgMHhlMCwKKyAgICAgICAgMHhkNiwgMHg0ZiwgMHhhMywgMHgyYywgMHgwNiwgMHhkZSwgMHg0MSwgMHgzOSwKKyAgICAgICAgMHgwZSwgMHhjNiwgMHg3NSwgMHhhZCwgMHg0OSwgMHg4YSwgMHhmZSwgMHhlYiwKKyAgICAgICAgMHhiNiwgMHg5NiwgMHgwYiwgMHgzYSwgMHhhYiwgMHhlNgorICAgIH07CisgICAgdWludDhfdCBzcnRwX3BsYWludGV4dF9yZWZbNTZdID0geworICAgICAgICAweDkwLCAweDBmLCAweDEyLCAweDM0LCAweGRlLCAweGNhLCAweGZiLCAweGFkLAorICAgICAgICAweGNhLCAweGZlLCAweGJhLCAweGJlLCAweEJFLCAweERFLCAweDAwLCAweDA2LAorICAgICAgICAweDE3LCAweDQxLCAweDQyLCAweDczLCAweEE0LCAweDc1LCAweDI2LCAweDI3LAorICAgICAgICAweDQ4LCAweDIyLCAweDAwLCAweDAwLCAweEM4LCAweDMwLCAweDhFLCAweDQ2LAorICAgICAgICAweDU1LCAweDk5LCAweDYzLCAweDg2LCAweEIzLCAweDk1LCAweEZCLCAweDAwLAorICAgICAgICAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLAorICAgICAgICAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiCisgICAgfTsKKyAgICB1aW50OF90IHNydHBfcGxhaW50ZXh0WzY0XSA9IHsKKyAgICAgICAgMHg5MCwgMHgwZiwgMHgxMiwgMHgzNCwgMHhkZSwgMHhjYSwgMHhmYiwgMHhhZCwKKyAgICAgICAgMHhjYSwgMHhmZSwgMHhiYSwgMHhiZSwgMHhCRSwgMHhERSwgMHgwMCwgMHgwNiwKKyAgICAgICAgMHgxNywgMHg0MSwgMHg0MiwgMHg3MywgMHhBNCwgMHg3NSwgMHgyNiwgMHgyNywKKyAgICAgICAgMHg0OCwgMHgyMiwgMHgwMCwgMHgwMCwgMHhDOCwgMHgzMCwgMHg4RSwgMHg0NiwKKyAgICAgICAgMHg1NSwgMHg5OSwgMHg2MywgMHg4NiwgMHhCMywgMHg5NSwgMHhGQiwgMHgwMCwKKyAgICAgICAgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwKKyAgICAgICAgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwKKyAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorICAgIH07CisgICAgdWludDhfdCBzcnRwX2NpcGhlcnRleHRbNjRdID0geworICAgICAgICAweDkwLCAweDBmLCAweDEyLCAweDM0LCAweGRlLCAweGNhLCAweGZiLCAweGFkLAorICAgICAgICAweGNhLCAweGZlLCAweGJhLCAweGJlLCAweEJFLCAweERFLCAweDAwLCAweDA2LAorICAgICAgICAweDE3LCAweDEyLCAweGUwLCAweDIwLCAweDViLCAweGZhLCAweDk0LCAweDliLAorICAgICAgICAweDFDLCAweDIyLCAweDAwLCAweDAwLCAweEM4LCAweDMwLCAweGJiLCAweDQ2LAorICAgICAgICAweDczLCAweDI3LCAweDc4LCAweGQ5LCAweDkyLCAweDlhLCAweGFiLCAweDAwLAorICAgICAgICAweDBlLCAweGNhLCAweDBjLCAweGY5LCAweDVlLCAweGU5LCAweDU1LCAweGIyLAorICAgICAgICAweDZjLCAweGQzLCAweGQyLCAweDg4LCAweGI0LCAweDlmLCAweDZjLCAweGE5LAorICAgICAgICAweGY0LCAweGIxLCAweGI3LCAweDU5LCAweDcxLCAweDllLCAweGI1LCAweGJjCisgICAgfTsKKyAgICAvLyBjbGFuZy1mb3JtYXQgb24KIAotICBzdGF0dXMgPSBzcnRwX2NyZWF0ZSgmc2Vzc2lvbiwgcG9saWN5X2xpc3QpOwotICBpZiAoc3RhdHVzKQotICAgIHJldHVybiBzdGF0dXM7CisgICAgc3J0cF90IHNydHBfc25kLCBzcnRwX3JlY3Y7CisgICAgc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdHVzOworICAgIGludCBsZW47CisgICAgc3J0cF9wb2xpY3lfdCBwb2xpY3k7CisgICAgaW50IGhlYWRlcnNbM10gPSB7IDEsIDMsIDQgfTsKIAotICAvKgotICAgKiBjaGVjayBmb3IgZmFsc2UgcG9zaXRpdmVzIGJ5IHRyeWluZyB0byByZW1vdmUgYSBzdHJlYW0gdGhhdCdzIG5vdAotICAgKiBpbiB0aGUgc2Vzc2lvbgotICAgKi8KLSAgc3RhdHVzID0gc3J0cF9yZW1vdmVfc3RyZWFtKHNlc3Npb24sIGh0b25sKDB4YWFhYWFhYWEpKTsKLSAgaWYgKHN0YXR1cyAhPSBlcnJfc3RhdHVzX25vX2N0eCkKLSAgICByZXR1cm4gZXJyX3N0YXR1c19mYWlsOwotICAKLSAgLyogCi0gICAqIGNoZWNrIGZvciBmYWxzZSBuZWdhdGl2ZXMgYnkgcmVtb3Zpbmcgc3RyZWFtIDB4MSwgdGhlbgotICAgKiBzZWFyY2hpbmcgZm9yIHN0cmVhbXMgMHgwIGFuZCAweDIKLSAgICovCi0gIHN0YXR1cyA9IHNydHBfcmVtb3ZlX3N0cmVhbShzZXNzaW9uLCBodG9ubCgweDEpKTsKLSAgaWYgKHN0YXR1cyAhPSBlcnJfc3RhdHVzX29rKQotICAgIHJldHVybiBlcnJfc3RhdHVzX2ZhaWw7Ci0gIHN0cmVhbSA9IHNydHBfZ2V0X3N0cmVhbShzZXNzaW9uLCBodG9ubCgweDApKTsKLSAgaWYgKHN0cmVhbSA9PSBOVUxMKQotICAgIHJldHVybiBlcnJfc3RhdHVzX2ZhaWw7Ci0gIHN0cmVhbSA9IHNydHBfZ2V0X3N0cmVhbShzZXNzaW9uLCBodG9ubCgweDIpKTsKLSAgaWYgKHN0cmVhbSA9PSBOVUxMKQotICAgIHJldHVybiBlcnJfc3RhdHVzX2ZhaWw7ICAKKyAgICAvKgorICAgICAqIGNyZWF0ZSBhIHNlc3Npb24gd2l0aCBhIHNpbmdsZSBzdHJlYW0gdXNpbmcgdGhlIGRlZmF1bHQgc3J0cAorICAgICAqIHBvbGljeSBhbmQgd2l0aCB0aGUgU1NSQyB2YWx1ZSAweGNhZmViYWJlCisgICAgICovCisgICAgbWVtc2V0KCZwb2xpY3ksIDAsIHNpemVvZihwb2xpY3kpKTsKKyAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19nY21fMTI4XzhfYXV0aCgmcG9saWN5LnJ0cCk7CisgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzEyOF84X2F1dGgoJnBvbGljeS5ydGNwKTsKKyAgICBwb2xpY3kuc3NyYy50eXBlID0gc3NyY19zcGVjaWZpYzsKKyAgICBwb2xpY3kuc3NyYy52YWx1ZSA9IDB4Y2FmZWJhYmU7CisgICAgcG9saWN5LmtleSA9IHRlc3Rfa2V5X2V4dF9oZWFkZXJzOworICAgIHBvbGljeS5la3QgPSBOVUxMOworICAgIHBvbGljeS53aW5kb3dfc2l6ZSA9IDEyODsKKyAgICBwb2xpY3kuYWxsb3dfcmVwZWF0X3R4ID0gMDsKKyAgICBwb2xpY3kuZW5jX3h0bl9oZHIgPSBoZWFkZXJzOworICAgIHBvbGljeS5lbmNfeHRuX2hkcl9jb3VudCA9IHNpemVvZihoZWFkZXJzKSAvIHNpemVvZihoZWFkZXJzWzBdKTsKKyAgICBwb2xpY3kubmV4dCA9IE5VTEw7CiAKLSAgcmV0dXJuIGVycl9zdGF0dXNfb2s7ICAKKyAgICBzdGF0dXMgPSBzcnRwX2NyZWF0ZSgmc3J0cF9zbmQsICZwb2xpY3kpOworICAgIGlmIChzdGF0dXMpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICAvKgorICAgICAqIHByb3RlY3QgcGxhaW50ZXh0LCB0aGVuIGNvbXBhcmUgd2l0aCBjaXBoZXJ0ZXh0CisgICAgICovCisgICAgbGVuID0gc2l6ZW9mKHNydHBfcGxhaW50ZXh0X3JlZik7CisgICAgc3RhdHVzID0gc3J0cF9wcm90ZWN0KHNydHBfc25kLCBzcnRwX3BsYWludGV4dCwgJmxlbik7CisgICAgaWYgKHN0YXR1cyB8fCAobGVuICE9IHNpemVvZihzcnRwX3BsYWludGV4dCkpKQorICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2ZhaWw7CisKKyAgICBkZWJ1Z19wcmludChtb2RfZHJpdmVyLCAiY2lwaGVydGV4dDpcbiAgJXMiLAorICAgICAgICAgICAgICAgIHNydHBfb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoc3J0cF9wbGFpbnRleHQsIGxlbikpOworICAgIGRlYnVnX3ByaW50KG1vZF9kcml2ZXIsICJjaXBoZXJ0ZXh0IHJlZmVyZW5jZTpcbiAgJXMiLAorICAgICAgICAgICAgICAgIHNydHBfb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoc3J0cF9jaXBoZXJ0ZXh0LCBsZW4pKTsKKworICAgIGlmIChzcnRwX29jdGV0X3N0cmluZ19pc19lcShzcnRwX3BsYWludGV4dCwgc3J0cF9jaXBoZXJ0ZXh0LCBsZW4pKQorICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2ZhaWw7CisKKyAgICAvKgorICAgICAqIGNyZWF0ZSBhIHJlY2VpdmVyIHNlc3Npb24gY29udGV4dCBjb21wYXJhYmxlIHRvIHRoZSBvbmUgY3JlYXRlZAorICAgICAqIGFib3ZlIC0gd2UgbmVlZCB0byBkbyB0aGlzIHNvIHRoYXQgdGhlIHJlcGxheSBjaGVja2luZyBkb2Vzbid0CisgICAgICogY29tcGxhaW4KKyAgICAgKi8KKyAgICBzdGF0dXMgPSBzcnRwX2NyZWF0ZSgmc3J0cF9yZWN2LCAmcG9saWN5KTsKKyAgICBpZiAoc3RhdHVzKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgLyoKKyAgICAgKiB1bnByb3RlY3QgY2lwaGVydGV4dCwgdGhlbiBjb21wYXJlIHdpdGggcGxhaW50ZXh0CisgICAgICovCisgICAgc3RhdHVzID0gc3J0cF91bnByb3RlY3Qoc3J0cF9yZWN2LCBzcnRwX2NpcGhlcnRleHQsICZsZW4pOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9IGVsc2UgaWYgKGxlbiAhPSBzaXplb2Yoc3J0cF9wbGFpbnRleHRfcmVmKSkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2ZhaWw7CisgICAgfQorCisgICAgaWYgKHNydHBfb2N0ZXRfc3RyaW5nX2lzX2VxKHNydHBfY2lwaGVydGV4dCwgc3J0cF9wbGFpbnRleHRfcmVmLCBsZW4pKQorICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2ZhaWw7CisKKyAgICBzdGF0dXMgPSBzcnRwX2RlYWxsb2Moc3J0cF9zbmQpOworICAgIGlmIChzdGF0dXMpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICBzdGF0dXMgPSBzcnRwX2RlYWxsb2Moc3J0cF9yZWN2KTsKKyAgICBpZiAoc3RhdHVzKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKyNlbmRpZgorCisvKgorICogc3J0cF92YWxpZGF0ZV9hZXNfMjU2KCkgdmVyaWZpZXMgdGhlIGNvcnJlY3RuZXNzIG9mIGxpYnNydHAgYnkgY29tcGFyaW5nCisgKiBzb21lIGNvbXB1dGVkIHBhY2tldHMgYWdhaW5zdCBzb21lIHByZS1jb21wdXRlZCByZWZlcmVuY2UgdmFsdWVzLgorICogVGhlc2UgcGFja2V0cyB3ZXJlIG1hZGUgd2l0aCB0aGUgQUVTLUNNLTI1Ni9ITUFDLVNIQS0xLTgwIHBvbGljeS4KKyAqLworCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX3ZhbGlkYXRlX2Flc18yNTYoKQoreworICAgIC8vIGNsYW5nLWZvcm1hdCBvZmYKKyAgICB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdGVzdF9rZXlbNDZdID0geworICAgICAgICAweGYwLCAweGYwLCAweDQ5LCAweDE0LCAweGI1LCAweDEzLCAweGYyLCAweDc2LAorICAgICAgICAweDNhLCAweDFiLCAweDFmLCAweGExLCAweDMwLCAweGYxLCAweDBlLCAweDI5LAorICAgICAgICAweDk4LCAweGY2LCAweGY2LCAweGU0LCAweDNlLCAweDQzLCAweDA5LCAweGQxLAorICAgICAgICAweGU2LCAweDIyLCAweGEwLCAweGUzLCAweDMyLCAweGI5LCAweGYxLCAweGI2LAorCisgICAgICAgIDB4M2IsIDB4MDQsIDB4ODAsIDB4M2QsIDB4ZTUsIDB4MWUsIDB4ZTcsIDB4YzksCisgICAgICAgIDB4NjQsIDB4MjMsIDB4YWIsIDB4NWIsIDB4NzgsIDB4ZDIKKyAgICB9OworICAgIHVpbnQ4X3Qgc3J0cF9wbGFpbnRleHRfcmVmWzI4XSA9IHsKKyAgICAgICAgMHg4MCwgMHgwZiwgMHgxMiwgMHgzNCwgMHhkZSwgMHhjYSwgMHhmYiwgMHhhZCwKKyAgICAgICAgMHhjYSwgMHhmZSwgMHhiYSwgMHhiZSwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwKKyAgICAgICAgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwKKyAgICAgICAgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYgorICAgIH07CisgICAgdWludDhfdCBzcnRwX3BsYWludGV4dFszOF0gPSB7CisgICAgICAgIDB4ODAsIDB4MGYsIDB4MTIsIDB4MzQsIDB4ZGUsIDB4Y2EsIDB4ZmIsIDB4YWQsCisgICAgICAgIDB4Y2EsIDB4ZmUsIDB4YmEsIDB4YmUsIDB4YWIsIDB4YWIsIDB4YWIsIDB4YWIsCisgICAgICAgIDB4YWIsIDB4YWIsIDB4YWIsIDB4YWIsIDB4YWIsIDB4YWIsIDB4YWIsIDB4YWIsCisgICAgICAgIDB4YWIsIDB4YWIsIDB4YWIsIDB4YWIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKKyAgICB9OworICAgIHVpbnQ4X3Qgc3J0cF9jaXBoZXJ0ZXh0WzM4XSA9IHsKKyAgICAgICAgMHg4MCwgMHgwZiwgMHgxMiwgMHgzNCwgMHhkZSwgMHhjYSwgMHhmYiwgMHhhZCwKKyAgICAgICAgMHhjYSwgMHhmZSwgMHhiYSwgMHhiZSwgMHhmMSwgMHhkOSwgMHhkZSwgMHgxNywKKyAgICAgICAgMHhmZiwgMHgyNSwgMHgxZiwgMHhmMSwgMHhhYSwgMHgwMCwgMHg3NywgMHg3NCwKKyAgICAgICAgMHhiMCwgMHhiNCwgMHhiNCwgMHgwZCwgMHhhMCwgMHg4ZCwgMHg5ZCwgMHg5YSwKKyAgICAgICAgMHg1YiwgMHgzYSwgMHg1NSwgMHhkOCwgMHg4NywgMHgzYgorICAgIH07CisgICAgLy8gY2xhbmctZm9ybWF0IG9uCisKKyAgICBzcnRwX3Qgc3J0cF9zbmQsIHNydHBfcmVjdjsKKyAgICBzcnRwX2Vycl9zdGF0dXNfdCBzdGF0dXM7CisgICAgaW50IGxlbjsKKyAgICBzcnRwX3BvbGljeV90IHBvbGljeTsKKworICAgIC8qCisgICAgICogY3JlYXRlIGEgc2Vzc2lvbiB3aXRoIGEgc2luZ2xlIHN0cmVhbSB1c2luZyB0aGUgZGVmYXVsdCBzcnRwCisgICAgICogcG9saWN5IGFuZCB3aXRoIHRoZSBTU1JDIHZhbHVlIDB4Y2FmZWJhYmUKKyAgICAgKi8KKyAgICBtZW1zZXQoJnBvbGljeSwgMCwgc2l6ZW9mKHBvbGljeSkpOworICAgIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2NtXzI1Nl9obWFjX3NoYTFfODAoJnBvbGljeS5ydHApOworICAgIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2NtXzI1Nl9obWFjX3NoYTFfODAoJnBvbGljeS5ydGNwKTsKKyAgICBwb2xpY3kuc3NyYy50eXBlID0gc3NyY19zcGVjaWZpYzsKKyAgICBwb2xpY3kuc3NyYy52YWx1ZSA9IDB4Y2FmZWJhYmU7CisgICAgcG9saWN5LmtleSA9IGFlc18yNTZfdGVzdF9rZXk7CisgICAgcG9saWN5LmVrdCA9IE5VTEw7CisgICAgcG9saWN5LndpbmRvd19zaXplID0gMTI4OworICAgIHBvbGljeS5hbGxvd19yZXBlYXRfdHggPSAwOworICAgIHBvbGljeS5uZXh0ID0gTlVMTDsKKworICAgIHN0YXR1cyA9IHNydHBfY3JlYXRlKCZzcnRwX3NuZCwgJnBvbGljeSk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8qCisgICAgICogcHJvdGVjdCBwbGFpbnRleHQsIHRoZW4gY29tcGFyZSB3aXRoIGNpcGhlcnRleHQKKyAgICAgKi8KKyAgICBsZW4gPSAyODsKKyAgICBzdGF0dXMgPSBzcnRwX3Byb3RlY3Qoc3J0cF9zbmQsIHNydHBfcGxhaW50ZXh0LCAmbGVuKTsKKyAgICBpZiAoc3RhdHVzIHx8IChsZW4gIT0gMzgpKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfZmFpbDsKKyAgICB9CisKKyAgICBkZWJ1Z19wcmludChtb2RfZHJpdmVyLCAiY2lwaGVydGV4dDpcbiAgJXMiLAorICAgICAgICAgICAgICAgIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKHNydHBfcGxhaW50ZXh0LCBsZW4pKTsKKyAgICBkZWJ1Z19wcmludChtb2RfZHJpdmVyLCAiY2lwaGVydGV4dCByZWZlcmVuY2U6XG4gICVzIiwKKyAgICAgICAgICAgICAgICBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhzcnRwX2NpcGhlcnRleHQsIGxlbikpOworCisgICAgaWYgKHNydHBfb2N0ZXRfc3RyaW5nX2lzX2VxKHNydHBfcGxhaW50ZXh0LCBzcnRwX2NpcGhlcnRleHQsIGxlbikpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19mYWlsOworICAgIH0KKworICAgIC8qCisgICAgICogY3JlYXRlIGEgcmVjZWl2ZXIgc2Vzc2lvbiBjb250ZXh0IGNvbXBhcmFibGUgdG8gdGhlIG9uZSBjcmVhdGVkCisgICAgICogYWJvdmUgLSB3ZSBuZWVkIHRvIGRvIHRoaXMgc28gdGhhdCB0aGUgcmVwbGF5IGNoZWNraW5nIGRvZXNuJ3QKKyAgICAgKiBjb21wbGFpbgorICAgICAqLworICAgIHN0YXR1cyA9IHNydHBfY3JlYXRlKCZzcnRwX3JlY3YsICZwb2xpY3kpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHVucHJvdGVjdCBjaXBoZXJ0ZXh0LCB0aGVuIGNvbXBhcmUgd2l0aCBwbGFpbnRleHQKKyAgICAgKi8KKyAgICBzdGF0dXMgPSBzcnRwX3VucHJvdGVjdChzcnRwX3JlY3YsIHNydHBfY2lwaGVydGV4dCwgJmxlbik7CisgICAgaWYgKHN0YXR1cyB8fCAobGVuICE9IDI4KSkgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIGlmIChzcnRwX29jdGV0X3N0cmluZ19pc19lcShzcnRwX2NpcGhlcnRleHQsIHNydHBfcGxhaW50ZXh0X3JlZiwgbGVuKSkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2ZhaWw7CisgICAgfQorCisgICAgc3RhdHVzID0gc3J0cF9kZWFsbG9jKHNydHBfc25kKTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgc3RhdHVzID0gc3J0cF9kZWFsbG9jKHNydHBfcmVjdik7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7Cit9CisKK3NydHBfZXJyX3N0YXR1c190IHNydHBfY3JlYXRlX2JpZ19wb2xpY3koc3J0cF9wb2xpY3lfdCAqKmxpc3QpCit7CisgICAgZXh0ZXJuIGNvbnN0IHNydHBfcG9saWN5X3QgKnBvbGljeV9hcnJheVtdOworICAgIHNydHBfcG9saWN5X3QgKnAsICp0bXA7CisgICAgaW50IGkgPSAwOworICAgIHVpbnQzMl90IHNzcmMgPSAwOworCisgICAgLyogc2FuaXR5IGNoZWNraW5nICovCisgICAgaWYgKChsaXN0ID09IE5VTEwpIHx8IChwb2xpY3lfYXJyYXlbMF0gPT0gTlVMTCkpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19iYWRfcGFyYW07CisgICAgfQorCisgICAgLyoKKyAgICAgKiBsb29wIG92ZXIgcG9saWN5IGxpc3QsIG1hbGxvY2luZyBhIG5ldyBsaXN0IGFuZCBjb3B5aW5nIHZhbHVlcworICAgICAqIGludG8gaXQgKGFuZCBpbmNyZW1lbnRpbmcgdGhlIFNTUkMgdmFsdWUgYXMgd2UgZ28gYWxvbmcpCisgICAgICovCisgICAgdG1wID0gTlVMTDsKKyAgICB3aGlsZSAocG9saWN5X2FycmF5W2ldICE9IE5VTEwpIHsKKyAgICAgICAgcCA9IChzcnRwX3BvbGljeV90ICopbWFsbG9jKHNpemVvZihzcnRwX3BvbGljeV90KSk7CisgICAgICAgIGlmIChwID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYmFkX3BhcmFtOworICAgICAgICB9CisgICAgICAgIG1lbWNweShwLCBwb2xpY3lfYXJyYXlbaV0sIHNpemVvZihzcnRwX3BvbGljeV90KSk7CisgICAgICAgIHAtPnNzcmMudHlwZSA9IHNzcmNfc3BlY2lmaWM7CisgICAgICAgIHAtPnNzcmMudmFsdWUgPSBzc3JjKys7CisgICAgICAgIHAtPm5leHQgPSB0bXA7CisgICAgICAgIHRtcCA9IHA7CisgICAgICAgIGkrKzsKKyAgICB9CisgICAgKmxpc3QgPSBwOworCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF9kZWFsbG9jX2JpZ19wb2xpY3koc3J0cF9wb2xpY3lfdCAqbGlzdCkKK3sKKyAgICBzcnRwX3BvbGljeV90ICpwLCAqbmV4dDsKKworICAgIGZvciAocCA9IGxpc3Q7IHAgIT0gTlVMTDsgcCA9IG5leHQpIHsKKyAgICAgICAgbmV4dCA9IHAtPm5leHQ7CisgICAgICAgIGZyZWUocCk7CisgICAgfQorCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF90ZXN0X2VtcHR5X3BheWxvYWQoKQoreworICAgIHNydHBfdCBzcnRwX3NuZCwgc3J0cF9yZWN2OworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKKyAgICBpbnQgbGVuOworICAgIHNydHBfcG9saWN5X3QgcG9saWN5OworICAgIHNydHBfaGRyX3QgKm1lc2c7CisKKyAgICAvKgorICAgICAqIGNyZWF0ZSBhIHNlc3Npb24gd2l0aCBhIHNpbmdsZSBzdHJlYW0gdXNpbmcgdGhlIGRlZmF1bHQgc3J0cAorICAgICAqIHBvbGljeSBhbmQgd2l0aCB0aGUgU1NSQyB2YWx1ZSAweGNhZmViYWJlCisgICAgICovCisgICAgbWVtc2V0KCZwb2xpY3ksIDAsIHNpemVvZihwb2xpY3kpKTsKKyAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X3J0cF9kZWZhdWx0KCZwb2xpY3kucnRwKTsKKyAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X3J0Y3BfZGVmYXVsdCgmcG9saWN5LnJ0Y3ApOworICAgIHBvbGljeS5zc3JjLnR5cGUgPSBzc3JjX3NwZWNpZmljOworICAgIHBvbGljeS5zc3JjLnZhbHVlID0gMHhjYWZlYmFiZTsKKyAgICBwb2xpY3kua2V5ID0gdGVzdF9rZXk7CisgICAgcG9saWN5LmVrdCA9IE5VTEw7CisgICAgcG9saWN5LndpbmRvd19zaXplID0gMTI4OworICAgIHBvbGljeS5hbGxvd19yZXBlYXRfdHggPSAwOworICAgIHBvbGljeS5uZXh0ID0gTlVMTDsKKworICAgIHN0YXR1cyA9IHNydHBfY3JlYXRlKCZzcnRwX3NuZCwgJnBvbGljeSk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIG1lc2cgPSBzcnRwX2NyZWF0ZV90ZXN0X3BhY2tldCgwLCBwb2xpY3kuc3NyYy52YWx1ZSwgJmxlbik7CisgICAgaWYgKG1lc2cgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2ZhaWw7CisgICAgfQorCisgICAgc3RhdHVzID0gc3J0cF9wcm90ZWN0KHNydHBfc25kLCBtZXNnLCAmbGVuKTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfSBlbHNlIGlmIChsZW4gIT0gMTIgKyAxMCkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2ZhaWw7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBjcmVhdGUgYSByZWNlaXZlciBzZXNzaW9uIGNvbnRleHQgY29tcGFyYWJsZSB0byB0aGUgb25lIGNyZWF0ZWQKKyAgICAgKiBhYm92ZSAtIHdlIG5lZWQgdG8gZG8gdGhpcyBzbyB0aGF0IHRoZSByZXBsYXkgY2hlY2tpbmcgZG9lc24ndAorICAgICAqIGNvbXBsYWluCisgICAgICovCisgICAgc3RhdHVzID0gc3J0cF9jcmVhdGUoJnNydHBfcmVjdiwgJnBvbGljeSk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8qCisgICAgICogdW5wcm90ZWN0IGNpcGhlcnRleHQsIHRoZW4gY29tcGFyZSB3aXRoIHBsYWludGV4dAorICAgICAqLworICAgIHN0YXR1cyA9IHNydHBfdW5wcm90ZWN0KHNydHBfcmVjdiwgbWVzZywgJmxlbik7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0gZWxzZSBpZiAobGVuICE9IDEyKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfZmFpbDsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBzcnRwX2RlYWxsb2Moc3J0cF9zbmQpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBzcnRwX2RlYWxsb2Moc3J0cF9yZWN2KTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgZnJlZShtZXNnKTsKKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7Cit9CisKKyNpZmRlZiBHQ00KK3NydHBfZXJyX3N0YXR1c190IHNydHBfdGVzdF9lbXB0eV9wYXlsb2FkX2djbSgpCit7CisgICAgc3J0cF90IHNydHBfc25kLCBzcnRwX3JlY3Y7CisgICAgc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdHVzOworICAgIGludCBsZW47CisgICAgc3J0cF9wb2xpY3lfdCBwb2xpY3k7CisgICAgc3J0cF9oZHJfdCAqbWVzZzsKKworICAgIC8qCisgICAgICogY3JlYXRlIGEgc2Vzc2lvbiB3aXRoIGEgc2luZ2xlIHN0cmVhbSB1c2luZyB0aGUgZGVmYXVsdCBzcnRwCisgICAgICogcG9saWN5IGFuZCB3aXRoIHRoZSBTU1JDIHZhbHVlIDB4Y2FmZWJhYmUKKyAgICAgKi8KKyAgICBtZW1zZXQoJnBvbGljeSwgMCwgc2l6ZW9mKHBvbGljeSkpOworICAgIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2djbV8xMjhfOF9hdXRoKCZwb2xpY3kucnRwKTsKKyAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19nY21fMTI4XzhfYXV0aCgmcG9saWN5LnJ0Y3ApOworICAgIHBvbGljeS5zc3JjLnR5cGUgPSBzc3JjX3NwZWNpZmljOworICAgIHBvbGljeS5zc3JjLnZhbHVlID0gMHhjYWZlYmFiZTsKKyAgICBwb2xpY3kua2V5ID0gdGVzdF9rZXk7CisgICAgcG9saWN5LmVrdCA9IE5VTEw7CisgICAgcG9saWN5LndpbmRvd19zaXplID0gMTI4OworICAgIHBvbGljeS5hbGxvd19yZXBlYXRfdHggPSAwOworICAgIHBvbGljeS5uZXh0ID0gTlVMTDsKKworICAgIHN0YXR1cyA9IHNydHBfY3JlYXRlKCZzcnRwX3NuZCwgJnBvbGljeSk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIG1lc2cgPSBzcnRwX2NyZWF0ZV90ZXN0X3BhY2tldCgwLCBwb2xpY3kuc3NyYy52YWx1ZSwgJmxlbik7CisgICAgaWYgKG1lc2cgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2ZhaWw7CisgICAgfQorCisgICAgc3RhdHVzID0gc3J0cF9wcm90ZWN0KHNydHBfc25kLCBtZXNnLCAmbGVuKTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfSBlbHNlIGlmIChsZW4gIT0gMTIgKyA4KSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfZmFpbDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGNyZWF0ZSBhIHJlY2VpdmVyIHNlc3Npb24gY29udGV4dCBjb21wYXJhYmxlIHRvIHRoZSBvbmUgY3JlYXRlZAorICAgICAqIGFib3ZlIC0gd2UgbmVlZCB0byBkbyB0aGlzIHNvIHRoYXQgdGhlIHJlcGxheSBjaGVja2luZyBkb2Vzbid0CisgICAgICogY29tcGxhaW4KKyAgICAgKi8KKyAgICBzdGF0dXMgPSBzcnRwX2NyZWF0ZSgmc3J0cF9yZWN2LCAmcG9saWN5KTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgLyoKKyAgICAgKiB1bnByb3RlY3QgY2lwaGVydGV4dCwgdGhlbiBjb21wYXJlIHdpdGggcGxhaW50ZXh0CisgICAgICovCisgICAgc3RhdHVzID0gc3J0cF91bnByb3RlY3Qoc3J0cF9yZWN2LCBtZXNnLCAmbGVuKTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfSBlbHNlIGlmIChsZW4gIT0gMTIpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19mYWlsOworICAgIH0KKworICAgIHN0YXR1cyA9IHNydHBfZGVhbGxvYyhzcnRwX3NuZCk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIHN0YXR1cyA9IHNydHBfZGVhbGxvYyhzcnRwX3JlY3YpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBmcmVlKG1lc2cpOworCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKyNlbmRpZiAvLyBHQ00KKworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF90ZXN0X3JlbW92ZV9zdHJlYW0oKQoreworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKKyAgICBzcnRwX3BvbGljeV90ICpwb2xpY3lfbGlzdCwgcG9saWN5OworICAgIHNydHBfdCBzZXNzaW9uOworICAgIHNydHBfc3RyZWFtX3Qgc3RyZWFtOworCisgICAgLyoKKyAgICAgKiBzcnRwX2dldF9zdHJlYW0oKSBpcyBhIGxpYlNSVFAgaW50ZXJuYWwgZnVuY3Rpb24gdGhhdCB3ZSBkZWNsYXJlCisgICAgICogaGVyZSBzbyB0aGF0IHdlIGNhbiB1c2UgaXQgdG8gdmVyaWZ5IHRoZSBjb3JyZWN0IG9wZXJhdGlvbiBvZiB0aGUKKyAgICAgKiBsaWJyYXJ5CisgICAgICovCisgICAgZXh0ZXJuIHNydHBfc3RyZWFtX3Qgc3J0cF9nZXRfc3RyZWFtKHNydHBfdCBzcnRwLCB1aW50MzJfdCBzc3JjKTsKKworICAgIHN0YXR1cyA9IHNydHBfY3JlYXRlX2JpZ19wb2xpY3koJnBvbGljeV9saXN0KTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgc3RhdHVzID0gc3J0cF9jcmVhdGUoJnNlc3Npb24sIHBvbGljeV9saXN0KTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBjaGVjayBmb3IgZmFsc2UgcG9zaXRpdmVzIGJ5IHRyeWluZyB0byByZW1vdmUgYSBzdHJlYW0gdGhhdCdzIG5vdAorICAgICAqIGluIHRoZSBzZXNzaW9uCisgICAgICovCisgICAgc3RhdHVzID0gc3J0cF9yZW1vdmVfc3RyZWFtKHNlc3Npb24sIGh0b25sKDB4YWFhYWFhYWEpKTsKKyAgICBpZiAoc3RhdHVzICE9IHNydHBfZXJyX3N0YXR1c19ub19jdHgpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19mYWlsOworICAgIH0KKworICAgIC8qCisgICAgICogY2hlY2sgZm9yIGZhbHNlIG5lZ2F0aXZlcyBieSByZW1vdmluZyBzdHJlYW0gMHgxLCB0aGVuCisgICAgICogc2VhcmNoaW5nIGZvciBzdHJlYW1zIDB4MCBhbmQgMHgyCisgICAgICovCisgICAgc3RhdHVzID0gc3J0cF9yZW1vdmVfc3RyZWFtKHNlc3Npb24sIGh0b25sKDB4MSkpOworICAgIGlmIChzdGF0dXMgIT0gc3J0cF9lcnJfc3RhdHVzX29rKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfZmFpbDsKKyAgICB9CisgICAgc3RyZWFtID0gc3J0cF9nZXRfc3RyZWFtKHNlc3Npb24sIGh0b25sKDB4MCkpOworICAgIGlmIChzdHJlYW0gPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2ZhaWw7CisgICAgfQorICAgIHN0cmVhbSA9IHNydHBfZ2V0X3N0cmVhbShzZXNzaW9uLCBodG9ubCgweDIpKTsKKyAgICBpZiAoc3RyZWFtID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19mYWlsOworICAgIH0KKworICAgIHN0YXR1cyA9IHNydHBfZGVhbGxvYyhzZXNzaW9uKTsKKyAgICBpZiAoc3RhdHVzICE9IHNydHBfZXJyX3N0YXR1c19vaykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIHN0YXR1cyA9IHNydHBfZGVhbGxvY19iaWdfcG9saWN5KHBvbGljeV9saXN0KTsKKyAgICBpZiAoc3RhdHVzICE9IHNydHBfZXJyX3N0YXR1c19vaykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8qIE5vdyB0ZXN0IGFkZGluZyBhbmQgcmVtb3ZpbmcgYSBzaW5nbGUgc3RyZWFtICovCisgICAgbWVtc2V0KCZwb2xpY3ksIDAsIHNpemVvZihwb2xpY3kpKTsKKyAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X3J0cF9kZWZhdWx0KCZwb2xpY3kucnRwKTsKKyAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X3J0Y3BfZGVmYXVsdCgmcG9saWN5LnJ0Y3ApOworICAgIHBvbGljeS5zc3JjLnR5cGUgPSBzc3JjX3NwZWNpZmljOworICAgIHBvbGljeS5zc3JjLnZhbHVlID0gMHhjYWZlYmFiZTsKKyAgICBwb2xpY3kua2V5ID0gdGVzdF9rZXk7CisgICAgcG9saWN5LmVrdCA9IE5VTEw7CisgICAgcG9saWN5LndpbmRvd19zaXplID0gMTI4OworICAgIHBvbGljeS5hbGxvd19yZXBlYXRfdHggPSAwOworICAgIHBvbGljeS5uZXh0ID0gTlVMTDsKKworICAgIHN0YXR1cyA9IHNydHBfY3JlYXRlKCZzZXNzaW9uLCBOVUxMKTsKKyAgICBpZiAoc3RhdHVzICE9IHNydHBfZXJyX3N0YXR1c19vaykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIHN0YXR1cyA9IHNydHBfYWRkX3N0cmVhbShzZXNzaW9uLCAmcG9saWN5KTsKKyAgICBpZiAoc3RhdHVzICE9IHNydHBfZXJyX3N0YXR1c19vaykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIHN0YXR1cyA9IHNydHBfcmVtb3ZlX3N0cmVhbShzZXNzaW9uLCBodG9ubCgweGNhZmViYWJlKSk7CisgICAgaWYgKHN0YXR1cyAhPSBzcnRwX2Vycl9zdGF0dXNfb2spIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBzcnRwX2RlYWxsb2Moc2Vzc2lvbik7CisgICAgaWYgKHN0YXR1cyAhPSBzcnRwX2Vycl9zdGF0dXNfb2spIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOworfQorCisvLyBjbGFuZy1mb3JtYXQgb2ZmCit1bnNpZ25lZCBjaGFyIHRlc3RfYWx0X2tleVs0Nl0gPSB7CisgIDB4ZTUsIDB4MTksIDB4NmYsIDB4MDEsIDB4NWUsIDB4ZjEsIDB4OWIsIDB4ZTEsCisgIDB4ZDcsIDB4NDcsIDB4YTcsIDB4MjcsIDB4MDcsIDB4ZDcsIDB4NDcsIDB4MzMsCisgIDB4MDEsIDB4YzIsIDB4MzUsIDB4NGQsIDB4NTksIDB4NmEsIDB4ZjcsIDB4ODQsCisgIDB4OTYsIDB4OTgsIDB4ZWIsIDB4YWEsIDB4YWMsIDB4ZjYsIDB4YTEsIDB4NDUsCisgIDB4YzcsIDB4MTUsIDB4ZTIsIDB4ZWEsIDB4ZmUsIDB4NTUsIDB4NjcsIDB4OTYsCisgIDB4YjYsIDB4OTYsIDB4MGIsIDB4M2EsIDB4YWIsIDB4ZTYKK307CisvLyBjbGFuZy1mb3JtYXQgb24KKworLyoKKyAqIHNydHBfdGVzdF91cGRhdGUoKSB2ZXJpZmllcyB1cGRhdGluZy9yZWtleWluZyBleHNpc3Rpbmcgc3RyZWFtcy4KKyAqIEFzIHN0YXRlZCBpbiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzcxMSNzZWN0aW9uLTMuMy4xCisgKiB0aGUgdmFsdWUgb2YgdGhlIFJPQyBtdXN0IG5vdCBiZSByZXNldCBhZnRlciBhIHJla2V5LCB0aGlzIHRlc3QKKyAqIGF0ZW1wdHMgdG8gcHJvdmUgdGhhdCBzcnRwX3VwZGF0ZSBkb2VzIG5vdCByZXNldCB0aGUgUk9DLgorICovCisKK3NydHBfZXJyX3N0YXR1c190IHNydHBfdGVzdF91cGRhdGUoKQoreworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKKyAgICB1aW50MzJfdCBzc3JjID0gMHgxMjEyMTIxMjsKKyAgICBpbnQgbXNnX2xlbl9vY3RldHMgPSAzMjsKKyAgICBpbnQgcHJvdGVjdGVkX21zZ19sZW5fb2N0ZXRzOworICAgIHNydHBfaGRyX3QgKm1zZzsKKyAgICBzcnRwX3Qgc3J0cF9zbmQsIHNydHBfcmVjdjsKKyAgICBzcnRwX3BvbGljeV90IHBvbGljeTsKKworICAgIG1lbXNldCgmcG9saWN5LCAwLCBzaXplb2YocG9saWN5KSk7CisgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9ydHBfZGVmYXVsdCgmcG9saWN5LnJ0cCk7CisgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9ydGNwX2RlZmF1bHQoJnBvbGljeS5ydGNwKTsKKyAgICBwb2xpY3kuZWt0ID0gTlVMTDsKKyAgICBwb2xpY3kud2luZG93X3NpemUgPSAxMjg7CisgICAgcG9saWN5LmFsbG93X3JlcGVhdF90eCA9IDA7CisgICAgcG9saWN5Lm5leHQgPSBOVUxMOworICAgIHBvbGljeS5zc3JjLnR5cGUgPSBzc3JjX2FueV9vdXRib3VuZDsKKyAgICBwb2xpY3kua2V5ID0gdGVzdF9rZXk7CisKKyAgICAvKiBjcmVhdGUgYSBzZW5kIGFuZCByZWNpdmUgY3R4IHdpdGggZGVmdWFsdCBwcm9maWxlIGFuZCB0ZXN0X2tleSAqLworICAgIHN0YXR1cyA9IHNydHBfY3JlYXRlKCZzcnRwX3JlY3YsICZwb2xpY3kpOworICAgIGlmIChzdGF0dXMpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICBwb2xpY3kuc3NyYy50eXBlID0gc3NyY19hbnlfaW5ib3VuZDsKKyAgICBzdGF0dXMgPSBzcnRwX2NyZWF0ZSgmc3J0cF9zbmQsICZwb2xpY3kpOworICAgIGlmIChzdGF0dXMpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICAvKiBwcm90ZWN0IGFuZCB1bnByb3RlY3QgdHdvIG1zZydzIHRoYXQgd2lsbCBjYXVzZSB0aGUgUk9DIHRvIGJlIGVxdWFsIHRvIDEKKyAgICAgKi8KKyAgICBtc2cgPSBzcnRwX2NyZWF0ZV90ZXN0X3BhY2tldChtc2dfbGVuX29jdGV0cywgc3NyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJvdGVjdGVkX21zZ19sZW5fb2N0ZXRzKTsKKyAgICBpZiAobXNnID09IE5VTEwpCisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfYWxsb2NfZmFpbDsKKyAgICBtc2ctPnNlcSA9IGh0b25zKDY1NTM1KTsKKworICAgIHN0YXR1cyA9IHNydHBfcHJvdGVjdChzcnRwX3NuZCwgbXNnLCAmcHJvdGVjdGVkX21zZ19sZW5fb2N0ZXRzKTsKKyAgICBpZiAoc3RhdHVzKQorICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2ZhaWw7CisKKyAgICBzdGF0dXMgPSBzcnRwX3VucHJvdGVjdChzcnRwX3JlY3YsIG1zZywgJnByb3RlY3RlZF9tc2dfbGVuX29jdGV0cyk7CisgICAgaWYgKHN0YXR1cykKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgIGZyZWUobXNnKTsKKworICAgIG1zZyA9IHNydHBfY3JlYXRlX3Rlc3RfcGFja2V0KG1zZ19sZW5fb2N0ZXRzLCBzc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm90ZWN0ZWRfbXNnX2xlbl9vY3RldHMpOworICAgIGlmIChtc2cgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19hbGxvY19mYWlsOworICAgIG1zZy0+c2VxID0gaHRvbnMoMSk7CisKKyAgICBzdGF0dXMgPSBzcnRwX3Byb3RlY3Qoc3J0cF9zbmQsIG1zZywgJnByb3RlY3RlZF9tc2dfbGVuX29jdGV0cyk7CisgICAgaWYgKHN0YXR1cykKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19mYWlsOworCisgICAgc3RhdHVzID0gc3J0cF91bnByb3RlY3Qoc3J0cF9yZWN2LCBtc2csICZwcm90ZWN0ZWRfbXNnX2xlbl9vY3RldHMpOworICAgIGlmIChzdGF0dXMpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICBmcmVlKG1zZyk7CisKKyAgICAvKiB1cGRhdGUgc2VuZCBjdHggd2l0aCBzYW1lIHRlc3Rfa2V5IHQgdmVyaWZ5IHVwZGF0ZSB3b3JrcyovCisgICAgcG9saWN5LnNzcmMudHlwZSA9IHNzcmNfYW55X291dGJvdW5kOworICAgIHBvbGljeS5rZXkgPSB0ZXN0X2tleTsKKyAgICBzdGF0dXMgPSBzcnRwX3VwZGF0ZShzcnRwX3NuZCwgJnBvbGljeSk7CisgICAgaWYgKHN0YXR1cykKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgIG1zZyA9IHNydHBfY3JlYXRlX3Rlc3RfcGFja2V0KG1zZ19sZW5fb2N0ZXRzLCBzc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm90ZWN0ZWRfbXNnX2xlbl9vY3RldHMpOworICAgIGlmIChtc2cgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19hbGxvY19mYWlsOworICAgIG1zZy0+c2VxID0gaHRvbnMoMik7CisKKyAgICBzdGF0dXMgPSBzcnRwX3Byb3RlY3Qoc3J0cF9zbmQsIG1zZywgJnByb3RlY3RlZF9tc2dfbGVuX29jdGV0cyk7CisgICAgaWYgKHN0YXR1cykKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19mYWlsOworCisgICAgc3RhdHVzID0gc3J0cF91bnByb3RlY3Qoc3J0cF9yZWN2LCBtc2csICZwcm90ZWN0ZWRfbXNnX2xlbl9vY3RldHMpOworICAgIGlmIChzdGF0dXMpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICBmcmVlKG1zZyk7CisKKyAgICAvKiB1cGRhdGUgc2VuZCBjdHggdG8gdXNlIHRlc3RfYWx0X2tleSAqLworICAgIHBvbGljeS5zc3JjLnR5cGUgPSBzc3JjX2FueV9vdXRib3VuZDsKKyAgICBwb2xpY3kua2V5ID0gdGVzdF9hbHRfa2V5OworICAgIHN0YXR1cyA9IHNydHBfdXBkYXRlKHNydHBfc25kLCAmcG9saWN5KTsKKyAgICBpZiAoc3RhdHVzKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgLyogY3JlYXRlIGFuZCBwcm90ZWN0IG1zZyB3aXRoIG5ldyBrZXkgYW5kIFJPQyBzdGlsbCBlcXVhbCB0byAxICovCisgICAgbXNnID0gc3J0cF9jcmVhdGVfdGVzdF9wYWNrZXQobXNnX2xlbl9vY3RldHMsIHNzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByb3RlY3RlZF9tc2dfbGVuX29jdGV0cyk7CisgICAgaWYgKG1zZyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2FsbG9jX2ZhaWw7CisgICAgbXNnLT5zZXEgPSBodG9ucygzKTsKKworICAgIHN0YXR1cyA9IHNydHBfcHJvdGVjdChzcnRwX3NuZCwgbXNnLCAmcHJvdGVjdGVkX21zZ19sZW5fb2N0ZXRzKTsKKyAgICBpZiAoc3RhdHVzKQorICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2ZhaWw7CisKKyAgICAvKiB2ZXJpZnkgdGhhdCByZWNpdmUgY3R4IHdpbGwgZmFpbCB0byB1bnByb3RlY3QgYXMgaXQgc3RpbGwgdXNlcyB0ZXN0X2tleQorICAgICAqLworICAgIHN0YXR1cyA9IHNydHBfdW5wcm90ZWN0KHNydHBfcmVjdiwgbXNnLCAmcHJvdGVjdGVkX21zZ19sZW5fb2N0ZXRzKTsKKyAgICBpZiAoc3RhdHVzID09IHNydHBfZXJyX3N0YXR1c19vaykKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19mYWlsOworCisgICAgLyogY3JlYXRlIGEgbmV3IHJlY3ZpZXZlIGN0eCB3aXRoIHRlc3RfYWx0X2tleSBidXQgc2luY2UgaXQgaXMgbmV3IGl0IHdpbGwKKyAgICAgKiBoYXZlIFJPQyBlcXVhbCB0byAxCisgICAgICogYW5kIHRoZXJlZm9yZSBzaG91bGQgZmFpbCB0byB1bnByb3RlY3RlZCAqLworICAgIHsKKyAgICAgICAgc3J0cF90IHNydHBfcmVjdl9yb2NfMDsKKworICAgICAgICBwb2xpY3kuc3NyYy50eXBlID0gc3NyY19hbnlfaW5ib3VuZDsKKyAgICAgICAgcG9saWN5LmtleSA9IHRlc3RfYWx0X2tleTsKKyAgICAgICAgc3RhdHVzID0gc3J0cF9jcmVhdGUoJnNydHBfcmVjdl9yb2NfMCwgJnBvbGljeSk7CisgICAgICAgIGlmIChzdGF0dXMpCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBzcnRwX3VucHJvdGVjdChzcnRwX3JlY3Zfcm9jXzAsIG1zZywgJnByb3RlY3RlZF9tc2dfbGVuX29jdGV0cyk7CisgICAgICAgIGlmIChzdGF0dXMgPT0gc3J0cF9lcnJfc3RhdHVzX29rKQorICAgICAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19mYWlsOworCisgICAgICAgIHN0YXR1cyA9IHNydHBfZGVhbGxvYyhzcnRwX3JlY3Zfcm9jXzApOworICAgICAgICBpZiAoc3RhdHVzKQorICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICAvKiB1cGRhdGUgcmVjaXZlIGN0eCB0byB1c2UgdGVzdF9hbHRfa2V5ICovCisgICAgcG9saWN5LnNzcmMudHlwZSA9IHNzcmNfYW55X2luYm91bmQ7CisgICAgcG9saWN5LmtleSA9IHRlc3RfYWx0X2tleTsKKyAgICBzdGF0dXMgPSBzcnRwX3VwZGF0ZShzcnRwX3JlY3YsICZwb2xpY3kpOworICAgIGlmIChzdGF0dXMpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICAvKiB2ZXJpZnkgdGhhdCBjYW4gc3RpbGwgdW5wcm90ZWN0LCB0aGVyZm9yZSBrZXkgaXMgdXBkYXRlZCBhbmQgUk9DIHZhbHVlIGlzCisgICAgICogcHJlc2VydmVkICovCisgICAgc3RhdHVzID0gc3J0cF91bnByb3RlY3Qoc3J0cF9yZWN2LCBtc2csICZwcm90ZWN0ZWRfbXNnX2xlbl9vY3RldHMpOworICAgIGlmIChzdGF0dXMpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICBmcmVlKG1zZyk7CisKKyAgICBzdGF0dXMgPSBzcnRwX2RlYWxsb2Moc3J0cF9zbmQpOworICAgIGlmIChzdGF0dXMpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICBzdGF0dXMgPSBzcnRwX2RlYWxsb2Moc3J0cF9yZWN2KTsKKyAgICBpZiAoc3RhdHVzKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKworc3J0cF9lcnJfc3RhdHVzX3Qgc3J0cF90ZXN0X3NldHVwX3Byb3RlY3RfdHJhaWxlcl9zdHJlYW1zKAorICAgIHNydHBfdCAqc3J0cF9zZW5kLAorICAgIHNydHBfdCAqc3J0cF9zZW5kX21raSwKKyAgICBzcnRwX3QgKnNydHBfc2VuZF9hZXNfZ2NtLAorICAgIHNydHBfdCAqc3J0cF9zZW5kX2Flc19nY21fbWtpKQoreworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKKyAgICBzcnRwX3BvbGljeV90IHBvbGljeTsKKyAgICBzcnRwX3BvbGljeV90IHBvbGljeV9ta2k7CisKKyNpZmRlZiBHQ00KKyAgICBzcnRwX3BvbGljeV90IHBvbGljeV9hZXNfZ2NtOworICAgIHNydHBfcG9saWN5X3QgcG9saWN5X2Flc19nY21fbWtpOworI2VuZGlmIC8vIEdDTQorCisgICAgbWVtc2V0KCZwb2xpY3ksIDAsIHNpemVvZihwb2xpY3kpKTsKKyAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X3J0cF9kZWZhdWx0KCZwb2xpY3kucnRwKTsKKyAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X3J0Y3BfZGVmYXVsdCgmcG9saWN5LnJ0Y3ApOworICAgIHBvbGljeS5la3QgPSBOVUxMOworICAgIHBvbGljeS53aW5kb3dfc2l6ZSA9IDEyODsKKyAgICBwb2xpY3kuYWxsb3dfcmVwZWF0X3R4ID0gMDsKKyAgICBwb2xpY3kubmV4dCA9IE5VTEw7CisgICAgcG9saWN5LnNzcmMudHlwZSA9IHNzcmNfYW55X291dGJvdW5kOworICAgIHBvbGljeS5rZXkgPSB0ZXN0X2tleTsKKworICAgIG1lbXNldCgmcG9saWN5X21raSwgMCwgc2l6ZW9mKHBvbGljeV9ta2kpKTsKKyAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X3J0cF9kZWZhdWx0KCZwb2xpY3lfbWtpLnJ0cCk7CisgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9ydGNwX2RlZmF1bHQoJnBvbGljeV9ta2kucnRjcCk7CisgICAgcG9saWN5X21raS5la3QgPSBOVUxMOworICAgIHBvbGljeV9ta2kud2luZG93X3NpemUgPSAxMjg7CisgICAgcG9saWN5X21raS5hbGxvd19yZXBlYXRfdHggPSAwOworICAgIHBvbGljeV9ta2kubmV4dCA9IE5VTEw7CisgICAgcG9saWN5X21raS5zc3JjLnR5cGUgPSBzc3JjX2FueV9vdXRib3VuZDsKKyAgICBwb2xpY3lfbWtpLmtleSA9IE5VTEw7CisgICAgcG9saWN5X21raS5rZXlzID0gdGVzdF9rZXlzOworICAgIHBvbGljeV9ta2kubnVtX21hc3Rlcl9rZXlzID0gMjsKKworI2lmZGVmIEdDTQorICAgIG1lbXNldCgmcG9saWN5X2Flc19nY20sIDAsIHNpemVvZihwb2xpY3lfYWVzX2djbSkpOworICAgIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfYWVzX2djbV8xMjhfMTZfYXV0aCgmcG9saWN5X2Flc19nY20ucnRwKTsKKyAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19nY21fMTI4XzE2X2F1dGgoJnBvbGljeV9hZXNfZ2NtLnJ0Y3ApOworICAgIHBvbGljeV9hZXNfZ2NtLmVrdCA9IE5VTEw7CisgICAgcG9saWN5X2Flc19nY20ud2luZG93X3NpemUgPSAxMjg7CisgICAgcG9saWN5X2Flc19nY20uYWxsb3dfcmVwZWF0X3R4ID0gMDsKKyAgICBwb2xpY3lfYWVzX2djbS5uZXh0ID0gTlVMTDsKKyAgICBwb2xpY3lfYWVzX2djbS5zc3JjLnR5cGUgPSBzc3JjX2FueV9vdXRib3VuZDsKKyAgICBwb2xpY3lfYWVzX2djbS5rZXkgPSB0ZXN0X2tleTsKKworICAgIG1lbXNldCgmcG9saWN5X2Flc19nY21fbWtpLCAwLCBzaXplb2YocG9saWN5X2Flc19nY21fbWtpKSk7CisgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9hZXNfZ2NtXzEyOF8xNl9hdXRoKCZwb2xpY3lfYWVzX2djbV9ta2kucnRwKTsKKyAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X2Flc19nY21fMTI4XzE2X2F1dGgoJnBvbGljeV9hZXNfZ2NtX21raS5ydGNwKTsKKyAgICBwb2xpY3lfYWVzX2djbV9ta2kuZWt0ID0gTlVMTDsKKyAgICBwb2xpY3lfYWVzX2djbV9ta2kud2luZG93X3NpemUgPSAxMjg7CisgICAgcG9saWN5X2Flc19nY21fbWtpLmFsbG93X3JlcGVhdF90eCA9IDA7CisgICAgcG9saWN5X2Flc19nY21fbWtpLm5leHQgPSBOVUxMOworICAgIHBvbGljeV9hZXNfZ2NtX21raS5zc3JjLnR5cGUgPSBzc3JjX2FueV9vdXRib3VuZDsKKyAgICBwb2xpY3lfYWVzX2djbV9ta2kua2V5ID0gTlVMTDsKKyAgICBwb2xpY3lfYWVzX2djbV9ta2kua2V5cyA9IHRlc3Rfa2V5czsKKyAgICBwb2xpY3lfYWVzX2djbV9ta2kubnVtX21hc3Rlcl9rZXlzID0gMjsKKyNlbmRpZiAvLyBHQ00KKworICAgIC8qIGNyZWF0ZSBhIHNlbmQgY3R4IHdpdGggZGVmdWFsdCBwcm9maWxlIGFuZCB0ZXN0X2tleSAqLworICAgIHN0YXR1cyA9IHNydHBfY3JlYXRlKHNydHBfc2VuZCwgJnBvbGljeSk7CisgICAgaWYgKHN0YXR1cykKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgIHN0YXR1cyA9IHNydHBfY3JlYXRlKHNydHBfc2VuZF9ta2ksICZwb2xpY3lfbWtpKTsKKyAgICBpZiAoc3RhdHVzKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisjaWZkZWYgR0NNCisgICAgc3RhdHVzID0gc3J0cF9jcmVhdGUoc3J0cF9zZW5kX2Flc19nY20sICZwb2xpY3lfYWVzX2djbSk7CisgICAgaWYgKHN0YXR1cykKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgIHN0YXR1cyA9IHNydHBfY3JlYXRlKHNydHBfc2VuZF9hZXNfZ2NtX21raSwgJnBvbGljeV9hZXNfZ2NtX21raSk7CisgICAgaWYgKHN0YXR1cykKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyNlbmRpZiAvLyBHQ00KKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7Cit9CisKK3NydHBfZXJyX3N0YXR1c190IHNydHBfdGVzdF9wcm90ZWN0X3RyYWlsZXJfbGVuZ3RoKCkKK3sKKyAgICBzcnRwX3Qgc3J0cF9zZW5kOworICAgIHNydHBfdCBzcnRwX3NlbmRfbWtpOworICAgIHNydHBfdCBzcnRwX3NlbmRfYWVzX2djbTsKKyAgICBzcnRwX3Qgc3J0cF9zZW5kX2Flc19nY21fbWtpOworICAgIHVpbnQzMl90IGxlbmd0aCA9IDA7CisgICAgc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdHVzOworCisgICAgc3J0cF90ZXN0X3NldHVwX3Byb3RlY3RfdHJhaWxlcl9zdHJlYW1zKAorICAgICAgICAmc3J0cF9zZW5kLCAmc3J0cF9zZW5kX21raSwgJnNydHBfc2VuZF9hZXNfZ2NtLCAmc3J0cF9zZW5kX2Flc19nY21fbWtpKTsKKworICAgIHN0YXR1cyA9IHNydHBfZ2V0X3Byb3RlY3RfdHJhaWxlcl9sZW5ndGgoc3J0cF9zZW5kLCAwLCAwLCAmbGVuZ3RoKTsKKyAgICBpZiAoc3RhdHVzKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgLyogIFRBRyBMZW5ndGg6IDEwIGJ5dGVzICovCisgICAgaWYgKGxlbmd0aCAhPSAxMCkKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19mYWlsOworCisgICAgc3RhdHVzID0gc3J0cF9nZXRfcHJvdGVjdF90cmFpbGVyX2xlbmd0aChzcnRwX3NlbmRfbWtpLCAxLCAxLCAmbGVuZ3RoKTsKKyAgICBpZiAoc3RhdHVzKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgLyogIFRBRyBMZW5ndGg6IDEwIGJ5dGVzICsgTUtJIGxlbmd0aDogNCBieXRlcyovCisgICAgaWYgKGxlbmd0aCAhPSAxNCkKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19mYWlsOworCisjaWZkZWYgR0NNCisgICAgc3RhdHVzID0gc3J0cF9nZXRfcHJvdGVjdF90cmFpbGVyX2xlbmd0aChzcnRwX3NlbmRfYWVzX2djbSwgMCwgMCwgJmxlbmd0aCk7CisgICAgaWYgKHN0YXR1cykKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgIC8qICBUQUcgTGVuZ3RoOiAxNiBieXRlcyAqLworICAgIGlmIChsZW5ndGggIT0gMTYpCisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfZmFpbDsKKworICAgIHN0YXR1cyA9CisgICAgICAgIHNydHBfZ2V0X3Byb3RlY3RfdHJhaWxlcl9sZW5ndGgoc3J0cF9zZW5kX2Flc19nY21fbWtpLCAxLCAxLCAmbGVuZ3RoKTsKKyAgICBpZiAoc3RhdHVzKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgLyogIFRBRyBMZW5ndGg6IDE2IGJ5dGVzICsgTUtJIGxlbmd0aDogNCBieXRlcyovCisgICAgaWYgKGxlbmd0aCAhPSAyMCkKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19mYWlsOworI2VuZGlmIC8vIEdDTQorCisgICAgc3J0cF9kZWFsbG9jKHNydHBfc2VuZCk7CisgICAgc3J0cF9kZWFsbG9jKHNydHBfc2VuZF9ta2kpOworI2lmZGVmIEdDTQorICAgIHNydHBfZGVhbGxvYyhzcnRwX3NlbmRfYWVzX2djbSk7CisgICAgc3J0cF9kZWFsbG9jKHNydHBfc2VuZF9hZXNfZ2NtX21raSk7CisjZW5kaWYKKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7Cit9CisKK3NydHBfZXJyX3N0YXR1c190IHNydHBfdGVzdF9wcm90ZWN0X3J0Y3BfdHJhaWxlcl9sZW5ndGgoKQoreworICAgIHNydHBfdCBzcnRwX3NlbmQ7CisgICAgc3J0cF90IHNydHBfc2VuZF9ta2k7CisgICAgc3J0cF90IHNydHBfc2VuZF9hZXNfZ2NtOworICAgIHNydHBfdCBzcnRwX3NlbmRfYWVzX2djbV9ta2k7CisgICAgdWludDMyX3QgbGVuZ3RoID0gMDsKKyAgICBzcnRwX2Vycl9zdGF0dXNfdCBzdGF0dXM7CisKKyAgICBzcnRwX3Rlc3Rfc2V0dXBfcHJvdGVjdF90cmFpbGVyX3N0cmVhbXMoCisgICAgICAgICZzcnRwX3NlbmQsICZzcnRwX3NlbmRfbWtpLCAmc3J0cF9zZW5kX2Flc19nY20sICZzcnRwX3NlbmRfYWVzX2djbV9ta2kpOworCisgICAgc3RhdHVzID0gc3J0cF9nZXRfcHJvdGVjdF9ydGNwX3RyYWlsZXJfbGVuZ3RoKHNydHBfc2VuZCwgMCwgMCwgJmxlbmd0aCk7CisgICAgaWYgKHN0YXR1cykKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgIC8qICBUQUcgTGVuZ3RoOiAxMCBieXRlcyArIFNSVENQIFRyYWlsZXIgNCBieXRlcyovCisgICAgaWYgKGxlbmd0aCAhPSAxNCkKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19mYWlsOworCisgICAgc3RhdHVzID0gc3J0cF9nZXRfcHJvdGVjdF9ydGNwX3RyYWlsZXJfbGVuZ3RoKHNydHBfc2VuZF9ta2ksIDEsIDEsICZsZW5ndGgpOworICAgIGlmIChzdGF0dXMpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICAvKiAgVEFHIExlbmd0aDogMTAgYnl0ZXMgKyBTUlRDUCBUcmFpbGVyIDQgYnl0ZXMgKyBNS0kgNCBieXRlcyovCisgICAgaWYgKGxlbmd0aCAhPSAxOCkKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19mYWlsOworCisjaWZkZWYgR0NNCisgICAgc3RhdHVzID0KKyAgICAgICAgc3J0cF9nZXRfcHJvdGVjdF9ydGNwX3RyYWlsZXJfbGVuZ3RoKHNydHBfc2VuZF9hZXNfZ2NtLCAwLCAwLCAmbGVuZ3RoKTsKKyAgICBpZiAoc3RhdHVzKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgLyogIFRBRyBMZW5ndGg6IDE2IGJ5dGVzICsgU1JUQ1AgVHJhaWxlciA0IGJ5dGVzKi8KKyAgICBpZiAobGVuZ3RoICE9IDIwKQorICAgICAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX2ZhaWw7CisKKyAgICBzdGF0dXMgPSBzcnRwX2dldF9wcm90ZWN0X3J0Y3BfdHJhaWxlcl9sZW5ndGgoc3J0cF9zZW5kX2Flc19nY21fbWtpLCAxLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGVuZ3RoKTsKKyAgICBpZiAoc3RhdHVzKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgLyogIFRBRyBMZW5ndGg6IDE2IGJ5dGVzICsgU1JUQ1AgVHJhaWxlciA0IGJ5dGVzICsgTUtJIDQgYnl0ZXMqLworICAgIGlmIChsZW5ndGggIT0gMjQpCisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfZmFpbDsKKyNlbmRpZiAvLyBHQ00KKworICAgIHNydHBfZGVhbGxvYyhzcnRwX3NlbmQpOworICAgIHNydHBfZGVhbGxvYyhzcnRwX3NlbmRfbWtpKTsKKyNpZmRlZiBHQ00KKyAgICBzcnRwX2RlYWxsb2Moc3J0cF9zZW5kX2Flc19nY20pOworICAgIHNydHBfZGVhbGxvYyhzcnRwX3NlbmRfYWVzX2djbV9ta2kpOworI2VuZGlmCisKKyAgICByZXR1cm4gc3J0cF9lcnJfc3RhdHVzX29rOworfQorCitzcnRwX2Vycl9zdGF0dXNfdCBzcnRwX3Rlc3RfZ2V0X3JvYygpCit7CisgICAgc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdHVzOworICAgIHNydHBfcG9saWN5X3QgcG9saWN5OworICAgIHNydHBfdCBzZXNzaW9uOworICAgIHNydHBfaGRyX3QgKnBrdDsKKyAgICB1aW50MzJfdCBpOworICAgIHVpbnQzMl90IHJvYzsKKyAgICB1aW50MzJfdCB0czsKKyAgICB1aW50MTZfdCBzZXE7CisKKyAgICBpbnQgbXNnX2xlbl9vY3RldHMgPSAzMjsKKyAgICBpbnQgcHJvdGVjdGVkX21zZ19sZW5fb2N0ZXRzOworCisgICAgbWVtc2V0KCZwb2xpY3ksIDAsIHNpemVvZihwb2xpY3kpKTsKKyAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X3J0cF9kZWZhdWx0KCZwb2xpY3kucnRwKTsKKyAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X3J0Y3BfZGVmYXVsdCgmcG9saWN5LnJ0Y3ApOworICAgIHBvbGljeS5zc3JjLnR5cGUgPSBzc3JjX3NwZWNpZmljOworICAgIHBvbGljeS5zc3JjLnZhbHVlID0gMHhjYWZlYmFiZTsKKyAgICBwb2xpY3kua2V5ID0gdGVzdF9rZXk7CisgICAgcG9saWN5LndpbmRvd19zaXplID0gMTI4OworCisgICAgLyogQ3JlYXRlIGEgc2VuZGVyIHNlc3Npb24gKi8KKyAgICBzdGF0dXMgPSBzcnRwX2NyZWF0ZSgmc2Vzc2lvbiwgJnBvbGljeSk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8qIFNldCBzdGFydCBzZXF1ZW5jZSBzbyB3ZSByb2xsIG92ZXIgKi8KKyAgICBzZXEgPSA2NTUzNTsKKyAgICB0cyA9IDA7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgICAgIHBrdCA9IHNydHBfY3JlYXRlX3Rlc3RfcGFja2V0X2V4dGVuZGVkKG1zZ19sZW5fb2N0ZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3kuc3NyYy52YWx1ZSwgc2VxLCB0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByb3RlY3RlZF9tc2dfbGVuX29jdGV0cyk7CisgICAgICAgIHN0YXR1cyA9IHNydHBfcHJvdGVjdChzZXNzaW9uLCBwa3QsICZwcm90ZWN0ZWRfbXNnX2xlbl9vY3RldHMpOworICAgICAgICBmcmVlKHBrdCk7CisgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIH0KKworICAgICAgICBzdGF0dXMgPSBzcnRwX2dldF9zdHJlYW1fcm9jKHNlc3Npb24sIHBvbGljeS5zc3JjLnZhbHVlLCAmcm9jKTsKKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyb2MgIT0gaSkgeworICAgICAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19mYWlsOworICAgICAgICB9CisKKyAgICAgICAgc2VxKys7CisgICAgICAgIHRzKys7CisgICAgfQorCisgICAgLyogQ2xlYW51cCAqLworICAgIHN0YXR1cyA9IHNydHBfZGVhbGxvYyhzZXNzaW9uKTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKK30KKworc3RhdGljIHNydHBfZXJyX3N0YXR1c190IHRlc3Rfc2V0X3JlY2VpdmVyX3JvYyh1aW50MzJfdCBwYWNrZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCByb2NfdG9fc2V0KQoreworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKKworICAgIHNydHBfcG9saWN5X3Qgc2VuZGVyX3BvbGljeTsKKyAgICBzcnRwX3Qgc2VuZGVyX3Nlc3Npb247CisKKyAgICBzcnRwX3BvbGljeV90IHJlY2VpdmVyX3BvbGljeTsKKyAgICBzcnRwX3QgcmVjZWl2ZXJfc2Vzc2lvbjsKKworICAgIHNydHBfaGRyX3QgKnBrdF8xOworICAgIHVuc2lnbmVkIGNoYXIgKnJlY3ZfcGt0XzE7CisKKyAgICBzcnRwX2hkcl90ICpwa3RfMjsKKyAgICB1bnNpZ25lZCBjaGFyICpyZWN2X3BrdF8yOworCisgICAgdWludDMyX3QgaTsKKyAgICB1aW50MzJfdCB0czsKKyAgICB1aW50MTZfdCBzZXE7CisKKyAgICBpbnQgbXNnX2xlbl9vY3RldHMgPSAzMjsKKyAgICBpbnQgcHJvdGVjdGVkX21zZ19sZW5fb2N0ZXRzXzE7CisgICAgaW50IHByb3RlY3RlZF9tc2dfbGVuX29jdGV0c18yOworCisgICAgLyogQ3JlYXRlIHNlbmRlciAqLworICAgIG1lbXNldCgmc2VuZGVyX3BvbGljeSwgMCwgc2l6ZW9mKHNlbmRlcl9wb2xpY3kpKTsKKyAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X3J0cF9kZWZhdWx0KCZzZW5kZXJfcG9saWN5LnJ0cCk7CisgICAgc3J0cF9jcnlwdG9fcG9saWN5X3NldF9ydGNwX2RlZmF1bHQoJnNlbmRlcl9wb2xpY3kucnRjcCk7CisgICAgc2VuZGVyX3BvbGljeS5zc3JjLnR5cGUgPSBzc3JjX3NwZWNpZmljOworICAgIHNlbmRlcl9wb2xpY3kuc3NyYy52YWx1ZSA9IDB4Y2FmZWJhYmU7CisgICAgc2VuZGVyX3BvbGljeS5rZXkgPSB0ZXN0X2tleTsKKyAgICBzZW5kZXJfcG9saWN5LndpbmRvd19zaXplID0gMTI4OworCisgICAgc3RhdHVzID0gc3J0cF9jcmVhdGUoJnNlbmRlcl9zZXNzaW9uLCAmc2VuZGVyX3BvbGljeSk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8qIENyZWF0ZSBhbmQgcHJvdGVjdCBwYWNrZXRzICovCisgICAgc2VxID0gMDsKKyAgICB0cyA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8IHBhY2tldHM7IGkrKykgeworICAgICAgICBzcnRwX2hkcl90ICp0bXBfcGt0OworICAgICAgICBpbnQgdG1wX2xlbjsKKworICAgICAgICB0bXBfcGt0ID0gc3J0cF9jcmVhdGVfdGVzdF9wYWNrZXRfZXh0ZW5kZWQoCisgICAgICAgICAgICBtc2dfbGVuX29jdGV0cywgc2VuZGVyX3BvbGljeS5zc3JjLnZhbHVlLCBzZXEsIHRzLCAmdG1wX2xlbik7CisgICAgICAgIHN0YXR1cyA9IHNydHBfcHJvdGVjdChzZW5kZXJfc2Vzc2lvbiwgdG1wX3BrdCwgJnRtcF9sZW4pOworICAgICAgICBmcmVlKHRtcF9wa3QpOworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisKKyAgICAgICAgc2VxKys7CisgICAgICAgIHRzKys7CisgICAgfQorCisgICAgLyogQ3JlYXRlIHRoZSBmaXJzdCBwYWNrZXQgdG8gZGVjcnlwdCBhbmQgdGVzdCBmb3IgUk9DIGNoYW5nZSAqLworICAgIHBrdF8xID0gc3J0cF9jcmVhdGVfdGVzdF9wYWNrZXRfZXh0ZW5kZWQobXNnX2xlbl9vY3RldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kZXJfcG9saWN5LnNzcmMudmFsdWUsIHNlcSwgdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJvdGVjdGVkX21zZ19sZW5fb2N0ZXRzXzEpOworICAgIHN0YXR1cyA9IHNydHBfcHJvdGVjdChzZW5kZXJfc2Vzc2lvbiwgcGt0XzEsICZwcm90ZWN0ZWRfbXNnX2xlbl9vY3RldHNfMSk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8qIENyZWF0ZSB0aGUgc2Vjb25kIHBhY2tldCB0byBkZWNyeXB0IGFuZCB0ZXN0IGZvciBST0MgY2hhbmdlICovCisgICAgc2VxKys7CisgICAgdHMrKzsKKyAgICBwa3RfMiA9IHNydHBfY3JlYXRlX3Rlc3RfcGFja2V0X2V4dGVuZGVkKG1zZ19sZW5fb2N0ZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZGVyX3BvbGljeS5zc3JjLnZhbHVlLCBzZXEsIHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByb3RlY3RlZF9tc2dfbGVuX29jdGV0c18yKTsKKyAgICBzdGF0dXMgPSBzcnRwX3Byb3RlY3Qoc2VuZGVyX3Nlc3Npb24sIHBrdF8yLCAmcHJvdGVjdGVkX21zZ19sZW5fb2N0ZXRzXzIpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICAvKiBDcmVhdGUgdGhlIHJlY2VpdmVyICovCisgICAgbWVtc2V0KCZyZWNlaXZlcl9wb2xpY3ksIDAsIHNpemVvZihyZWNlaXZlcl9wb2xpY3kpKTsKKyAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X3J0cF9kZWZhdWx0KCZyZWNlaXZlcl9wb2xpY3kucnRwKTsKKyAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X3J0Y3BfZGVmYXVsdCgmcmVjZWl2ZXJfcG9saWN5LnJ0Y3ApOworICAgIHJlY2VpdmVyX3BvbGljeS5zc3JjLnR5cGUgPSBzc3JjX3NwZWNpZmljOworICAgIHJlY2VpdmVyX3BvbGljeS5zc3JjLnZhbHVlID0gc2VuZGVyX3BvbGljeS5zc3JjLnZhbHVlOworICAgIHJlY2VpdmVyX3BvbGljeS5rZXkgPSB0ZXN0X2tleTsKKyAgICByZWNlaXZlcl9wb2xpY3kud2luZG93X3NpemUgPSAxMjg7CisKKyAgICBzdGF0dXMgPSBzcnRwX2NyZWF0ZSgmcmVjZWl2ZXJfc2Vzc2lvbiwgJnJlY2VpdmVyX3BvbGljeSk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8qIE1ha2UgYSBjb3B5IG9mIHRoZSBmaXJzdCBzZW50IHByb3RlY3RlZCBwYWNrZXQgKi8KKyAgICByZWN2X3BrdF8xID0gbWFsbG9jKHByb3RlY3RlZF9tc2dfbGVuX29jdGV0c18xKTsKKyAgICBpZiAocmVjdl9wa3RfMSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfZmFpbDsKKyAgICB9CisgICAgbWVtY3B5KHJlY3ZfcGt0XzEsIHBrdF8xLCBwcm90ZWN0ZWRfbXNnX2xlbl9vY3RldHNfMSk7CisKKyAgICAvKiBNYWtlIGEgY29weSBvZiB0aGUgc2Vjb25kIHNlbnQgcHJvdGVjdGVkIHBhY2tldCAqLworICAgIHJlY3ZfcGt0XzIgPSBtYWxsb2MocHJvdGVjdGVkX21zZ19sZW5fb2N0ZXRzXzIpOworICAgIGlmIChyZWN2X3BrdF8yID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19mYWlsOworICAgIH0KKyAgICBtZW1jcHkocmVjdl9wa3RfMiwgcGt0XzIsIHByb3RlY3RlZF9tc2dfbGVuX29jdGV0c18yKTsKKworICAgIC8qIFNldCB0aGUgUk9DIHRvIHRoZSB3YW50ZWQgdmFsdWUgKi8KKyAgICBzdGF0dXMgPSBzcnRwX3NldF9zdHJlYW1fcm9jKHJlY2VpdmVyX3Nlc3Npb24sIHJlY2VpdmVyX3BvbGljeS5zc3JjLnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9jX3RvX3NldCk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8qIFVucHJvdGVjdCB0aGUgZmlyc3QgcGFja2V0ICovCisgICAgc3RhdHVzID0gc3J0cF91bnByb3RlY3QocmVjZWl2ZXJfc2Vzc2lvbiwgcmVjdl9wa3RfMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJvdGVjdGVkX21zZ19sZW5fb2N0ZXRzXzEpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICAvKiBVbnByb3RlY3QgdGhlIHNlY29uZCBwYWNrZXQgKi8KKyAgICBzdGF0dXMgPSBzcnRwX3VucHJvdGVjdChyZWNlaXZlcl9zZXNzaW9uLCByZWN2X3BrdF8yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm90ZWN0ZWRfbXNnX2xlbl9vY3RldHNfMik7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8qIENsZWFudXAgKi8KKyAgICBzdGF0dXMgPSBzcnRwX2RlYWxsb2Moc2VuZGVyX3Nlc3Npb24pOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBzcnRwX2RlYWxsb2MocmVjZWl2ZXJfc2Vzc2lvbik7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIGZyZWUocGt0XzEpOworICAgIGZyZWUocmVjdl9wa3RfMSk7CisgICAgZnJlZShwa3RfMik7CisgICAgZnJlZShyZWN2X3BrdF8yKTsKKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7Cit9CisKK3N0YXRpYyBzcnRwX2Vycl9zdGF0dXNfdCB0ZXN0X3NldF9zZW5kZXJfcm9jKHVpbnQxNl90IHNlcSwgdWludDMyX3Qgcm9jX3RvX3NldCkKK3sKKyAgICBzcnRwX2Vycl9zdGF0dXNfdCBzdGF0dXM7CisKKyAgICBzcnRwX3BvbGljeV90IHNlbmRlcl9wb2xpY3k7CisgICAgc3J0cF90IHNlbmRlcl9zZXNzaW9uOworCisgICAgc3J0cF9wb2xpY3lfdCByZWNlaXZlcl9wb2xpY3k7CisgICAgc3J0cF90IHJlY2VpdmVyX3Nlc3Npb247CisKKyAgICBzcnRwX2hkcl90ICpwa3Q7CisgICAgdW5zaWduZWQgY2hhciAqcmVjdl9wa3Q7CisKKyAgICB1aW50MzJfdCB0czsKKworICAgIGludCBtc2dfbGVuX29jdGV0cyA9IDMyOworICAgIGludCBwcm90ZWN0ZWRfbXNnX2xlbl9vY3RldHM7CisKKyAgICAvKiBDcmVhdGUgc2VuZGVyICovCisgICAgbWVtc2V0KCZzZW5kZXJfcG9saWN5LCAwLCBzaXplb2Yoc2VuZGVyX3BvbGljeSkpOworICAgIHNydHBfY3J5cHRvX3BvbGljeV9zZXRfcnRwX2RlZmF1bHQoJnNlbmRlcl9wb2xpY3kucnRwKTsKKyAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X3J0Y3BfZGVmYXVsdCgmc2VuZGVyX3BvbGljeS5ydGNwKTsKKyAgICBzZW5kZXJfcG9saWN5LnNzcmMudHlwZSA9IHNzcmNfc3BlY2lmaWM7CisgICAgc2VuZGVyX3BvbGljeS5zc3JjLnZhbHVlID0gMHhjYWZlYmFiZTsKKyAgICBzZW5kZXJfcG9saWN5LmtleSA9IHRlc3Rfa2V5OworICAgIHNlbmRlcl9wb2xpY3kud2luZG93X3NpemUgPSAxMjg7CisKKyAgICBzdGF0dXMgPSBzcnRwX2NyZWF0ZSgmc2VuZGVyX3Nlc3Npb24sICZzZW5kZXJfcG9saWN5KTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgLyogU2V0IHRoZSBST0MgYmVmb3JlIGVuY3J5cHRpbmcgdGhlIGZpcnN0IHBhY2tldCAqLworICAgIHN0YXR1cyA9IHNydHBfc2V0X3N0cmVhbV9yb2Moc2VuZGVyX3Nlc3Npb24sIHNlbmRlcl9wb2xpY3kuc3NyYy52YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvY190b19zZXQpOworICAgIGlmIChzdGF0dXMgIT0gc3J0cF9lcnJfc3RhdHVzX29rKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgLyogQ3JlYXRlIHRoZSBwYWNrZXQgdG8gZGVjcnlwdCAqLworICAgIHRzID0gMDsKKyAgICBwa3QgPSBzcnRwX2NyZWF0ZV90ZXN0X3BhY2tldF9leHRlbmRlZChtc2dfbGVuX29jdGV0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kZXJfcG9saWN5LnNzcmMudmFsdWUsIHNlcSwgdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByb3RlY3RlZF9tc2dfbGVuX29jdGV0cyk7CisgICAgc3RhdHVzID0gc3J0cF9wcm90ZWN0KHNlbmRlcl9zZXNzaW9uLCBwa3QsICZwcm90ZWN0ZWRfbXNnX2xlbl9vY3RldHMpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICAvKiBDcmVhdGUgdGhlIHJlY2VpdmVyICovCisgICAgbWVtc2V0KCZyZWNlaXZlcl9wb2xpY3ksIDAsIHNpemVvZihyZWNlaXZlcl9wb2xpY3kpKTsKKyAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X3J0cF9kZWZhdWx0KCZyZWNlaXZlcl9wb2xpY3kucnRwKTsKKyAgICBzcnRwX2NyeXB0b19wb2xpY3lfc2V0X3J0Y3BfZGVmYXVsdCgmcmVjZWl2ZXJfcG9saWN5LnJ0Y3ApOworICAgIHJlY2VpdmVyX3BvbGljeS5zc3JjLnR5cGUgPSBzc3JjX3NwZWNpZmljOworICAgIHJlY2VpdmVyX3BvbGljeS5zc3JjLnZhbHVlID0gc2VuZGVyX3BvbGljeS5zc3JjLnZhbHVlOworICAgIHJlY2VpdmVyX3BvbGljeS5rZXkgPSB0ZXN0X2tleTsKKyAgICByZWNlaXZlcl9wb2xpY3kud2luZG93X3NpemUgPSAxMjg7CisKKyAgICBzdGF0dXMgPSBzcnRwX2NyZWF0ZSgmcmVjZWl2ZXJfc2Vzc2lvbiwgJnJlY2VpdmVyX3BvbGljeSk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8qIE1ha2UgYSBjb3B5IG9mIHRoZSBzZW50IHByb3RlY3RlZCBwYWNrZXQgKi8KKyAgICByZWN2X3BrdCA9IG1hbGxvYyhwcm90ZWN0ZWRfbXNnX2xlbl9vY3RldHMpOworICAgIGlmIChyZWN2X3BrdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfZmFpbDsKKyAgICB9CisgICAgbWVtY3B5KHJlY3ZfcGt0LCBwa3QsIHByb3RlY3RlZF9tc2dfbGVuX29jdGV0cyk7CisKKyAgICAvKiBTZXQgdGhlIFJPQyB0byB0aGUgd2FudGVkIHZhbHVlICovCisgICAgc3RhdHVzID0gc3J0cF9zZXRfc3RyZWFtX3JvYyhyZWNlaXZlcl9zZXNzaW9uLCByZWNlaXZlcl9wb2xpY3kuc3NyYy52YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvY190b19zZXQpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBzdGF0dXMgPQorICAgICAgICBzcnRwX3VucHJvdGVjdChyZWNlaXZlcl9zZXNzaW9uLCByZWN2X3BrdCwgJnByb3RlY3RlZF9tc2dfbGVuX29jdGV0cyk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8qIENsZWFudXAgKi8KKyAgICBzdGF0dXMgPSBzcnRwX2RlYWxsb2Moc2VuZGVyX3Nlc3Npb24pOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBzcnRwX2RlYWxsb2MocmVjZWl2ZXJfc2Vzc2lvbik7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIGZyZWUocGt0KTsKKyAgICBmcmVlKHJlY3ZfcGt0KTsKKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7Cit9CisKK3NydHBfZXJyX3N0YXR1c190IHNydHBfdGVzdF9zZXRfcmVjZWl2ZXJfcm9jKCkKK3sKKyAgICBpbnQgcGFja2V0czsKKyAgICB1aW50MzJfdCByb2M7CisgICAgc3J0cF9lcnJfc3RhdHVzX3Qgc3RhdHVzOworCisgICAgLyogRmlyc3QgdGVzdCBkb2VzIG5vdCByb2xsb3ZlciAqLworICAgIHBhY2tldHMgPSAxOworICAgIHJvYyA9IDA7CisKKyAgICBzdGF0dXMgPSB0ZXN0X3NldF9yZWNlaXZlcl9yb2MocGFja2V0cyAtIDEsIHJvYyk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIHN0YXR1cyA9IHRlc3Rfc2V0X3JlY2VpdmVyX3JvYyhwYWNrZXRzLCByb2MpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBzdGF0dXMgPSB0ZXN0X3NldF9yZWNlaXZlcl9yb2MocGFja2V0cyArIDEsIHJvYyk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIHN0YXR1cyA9IHRlc3Rfc2V0X3JlY2VpdmVyX3JvYyhwYWNrZXRzICsgNjAwMDAsIHJvYyk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8qIFNlY29uZCB0ZXN0IHNob3VsZCByb2xsb3ZlciAqLworICAgIHBhY2tldHMgPSA2NTUzNTsKKyAgICByb2MgPSAwOworCisgICAgc3RhdHVzID0gdGVzdF9zZXRfcmVjZWl2ZXJfcm9jKHBhY2tldHMgLSAxLCByb2MpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBzdGF0dXMgPSB0ZXN0X3NldF9yZWNlaXZlcl9yb2MocGFja2V0cywgcm9jKTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgLyogTm93IHRoZSByb2xsb3ZlciBjb3VudGVyIHNob3VsZCBiZSAxICovCisgICAgcm9jID0gMTsKKyAgICBzdGF0dXMgPSB0ZXN0X3NldF9yZWNlaXZlcl9yb2MocGFja2V0cyArIDEsIHJvYyk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIHN0YXR1cyA9IHRlc3Rfc2V0X3JlY2VpdmVyX3JvYyhwYWNrZXRzICsgNjAwMDAsIHJvYyk7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIHJldHVybiBzcnRwX2Vycl9zdGF0dXNfb2s7Cit9CisKK3NydHBfZXJyX3N0YXR1c190IHNydHBfdGVzdF9zZXRfc2VuZGVyX3JvYygpCit7CisgICAgdWludDMyX3Qgcm9jOworICAgIHVpbnQxNl90IHNlcTsKKyAgICBzcnRwX2Vycl9zdGF0dXNfdCBzdGF0dXM7CisKKyAgICBzZXEgPSA0MzIxMDsKKyAgICByb2MgPSAwOworICAgIHN0YXR1cyA9IHRlc3Rfc2V0X3NlbmRlcl9yb2Moc2VxLCByb2MpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICByb2MgPSA2NTUzNTsKKyAgICBzdGF0dXMgPSB0ZXN0X3NldF9zZW5kZXJfcm9jKHNlcSwgcm9jKTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgcm9jID0gMHhmZmZmOworICAgIHN0YXR1cyA9IHRlc3Rfc2V0X3NlbmRlcl9yb2Moc2VxLCByb2MpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICByb2MgPSAweGZmZmYwMDsKKyAgICBzdGF0dXMgPSB0ZXN0X3NldF9zZW5kZXJfcm9jKHNlcSwgcm9jKTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgcm9jID0gMHhmZmZmZmZmMDsKKyAgICBzdGF0dXMgPSB0ZXN0X3NldF9zZW5kZXJfcm9jKHNlcSwgcm9jKTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgcmV0dXJuIHNydHBfZXJyX3N0YXR1c19vazsKIH0KIAogLyoKICAqIHNydHAgcG9saWN5IGRlZmluaXRpb25zIC0gdGhlc2UgZGVmaW5pdGlvbnMgYXJlIHVzZWQgYWJvdmUKICAqLwogCi11bnNpZ25lZCBjaGFyIHRlc3Rfa2V5WzMwXSA9IHsKKy8vIGNsYW5nLWZvcm1hdCBvZmYKK3Vuc2lnbmVkIGNoYXIgdGVzdF9rZXlbNDZdID0gewogICAgIDB4ZTEsIDB4ZjksIDB4N2EsIDB4MGQsIDB4M2UsIDB4MDEsIDB4OGIsIDB4ZTAsCiAgICAgMHhkNiwgMHg0ZiwgMHhhMywgMHgyYywgMHgwNiwgMHhkZSwgMHg0MSwgMHgzOSwKICAgICAweDBlLCAweGM2LCAweDc1LCAweGFkLCAweDQ5LCAweDhhLCAweGZlLCAweGViLAorICAgIDB4YjYsIDB4OTYsIDB4MGIsIDB4M2EsIDB4YWIsIDB4ZTYsIDB4YzEsIDB4NzMsCisgICAgMHhjMywgMHgxNywgMHhmMiwgMHhkYSwgMHhiZSwgMHgzNSwgMHg3NywgMHg5MywKICAgICAweGI2LCAweDk2LCAweDBiLCAweDNhLCAweGFiLCAweGU2CiB9OwogCit1bnNpZ25lZCBjaGFyIHRlc3Rfa2V5XzJbNDZdID0geworICAgIDB4ZjAsIDB4ZjAsIDB4NDksIDB4MTQsIDB4YjUsIDB4MTMsIDB4ZjIsIDB4NzYsCisgICAgMHgzYSwgMHgxYiwgMHgxZiwgMHhhMSwgMHgzMCwgMHhmMSwgMHgwZSwgMHgyOSwKKyAgICAweDk4LCAweGY2LCAweGY2LCAweGU0LCAweDNlLCAweDQzLCAweDA5LCAweGQxLAorICAgIDB4ZTYsIDB4MjIsIDB4YTAsIDB4ZTMsIDB4MzIsIDB4YjksIDB4ZjEsIDB4YjYsCisgICAgMHhjMywgMHgxNywgMHhmMiwgMHhkYSwgMHhiZSwgMHgzNSwgMHg3NywgMHg5MywKKyAgICAweGI2LCAweDk2LCAweDBiLCAweDNhLCAweGFiLCAweGU2Cit9OworCit1bnNpZ25lZCBjaGFyIHRlc3RfbWtpX2lkW1RFU1RfTUtJX0lEX1NJWkVdID0geworICAgIDB4ZTEsIDB4ZjksIDB4N2EsIDB4MGQKK307CisKK3Vuc2lnbmVkIGNoYXIgdGVzdF9ta2lfaWRfMltURVNUX01LSV9JRF9TSVpFXSA9IHsKKyAgICAweGYzLCAweGExLCAweDQ2LCAweDcxCit9OworLy8gY2xhbmctZm9ybWF0IG9uCiAKIGNvbnN0IHNydHBfcG9saWN5X3QgZGVmYXVsdF9wb2xpY3kgPSB7Ci0gIHsgc3NyY19hbnlfb3V0Ym91bmQsIDAgfSwgIC8qIFNTUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICB7ICAgICAgICAgICAgICAgICAgICAgIC8qIFNSVFAgcG9saWN5ICAgICAgICAgICAgICAgICAgICAqLyAgICAgICAgICAgICAgICAgIAotICAgIEFFU18xMjhfSUNNLCAgICAgICAgICAgIC8qIGNpcGhlciB0eXBlICAgICAgICAgICAgICAgICAqLwotICAgIDMwLCAgICAgICAgICAgICAgICAgICAgIC8qIGNpcGhlciBrZXkgbGVuZ3RoIGluIG9jdGV0cyAqLwotICAgIEhNQUNfU0hBMSwgICAgICAgICAgICAgIC8qIGF1dGhlbnRpY2F0aW9uIGZ1bmMgdHlwZSAgICAqLwotICAgIDE2LCAgICAgICAgICAgICAgICAgICAgIC8qIGF1dGgga2V5IGxlbmd0aCBpbiBvY3RldHMgICAqLwotICAgIDEwLCAgICAgICAgICAgICAgICAgICAgIC8qIGF1dGggdGFnIGxlbmd0aCBpbiBvY3RldHMgICAqLwotICAgIHNlY19zZXJ2X2NvbmZfYW5kX2F1dGggIC8qIHNlY3VyaXR5IHNlcnZpY2VzIGZsYWcgICAgICAqLwotICB9LAotICB7ICAgICAgICAgICAgICAgICAgICAgIC8qIFNSVENQIHBvbGljeSAgICAgICAgICAgICAgICAgICAqLwotICAgIEFFU18xMjhfSUNNLCAgICAgICAgICAgIC8qIGNpcGhlciB0eXBlICAgICAgICAgICAgICAgICAqLwotICAgIDMwLCAgICAgICAgICAgICAgICAgICAgIC8qIGNpcGhlciBrZXkgbGVuZ3RoIGluIG9jdGV0cyAqLwotICAgIEhNQUNfU0hBMSwgICAgICAgICAgICAgIC8qIGF1dGhlbnRpY2F0aW9uIGZ1bmMgdHlwZSAgICAqLwotICAgIDE2LCAgICAgICAgICAgICAgICAgICAgIC8qIGF1dGgga2V5IGxlbmd0aCBpbiBvY3RldHMgICAqLwotICAgIDEwLCAgICAgICAgICAgICAgICAgICAgIC8qIGF1dGggdGFnIGxlbmd0aCBpbiBvY3RldHMgICAqLwotICAgIHNlY19zZXJ2X2NvbmZfYW5kX2F1dGggIC8qIHNlY3VyaXR5IHNlcnZpY2VzIGZsYWcgICAgICAqLwotICB9LAotICB0ZXN0X2tleSwKLSAgTlVMTAotfTsKLQotY29uc3Qgc3J0cF9wb2xpY3lfdCBhZXNfdG1taF9wb2xpY3kgPSB7Ci0gIHsgc3NyY19hbnlfb3V0Ym91bmQsIDAgfSwgICAgIC8qIFNTUkMgICAgICAgICAgICAgICAgICAgICAgICAqLwotICB7IAotICAgIEFFU18xMjhfSUNNLCAgICAgICAgICAgIC8qIGNpcGhlciB0eXBlICAgICAgICAgICAgICAgICAqLwotICAgIDMwLCAgICAgICAgICAgICAgICAgICAgIC8qIGNpcGhlciBrZXkgbGVuZ3RoIGluIG9jdGV0cyAqLwotICAgIFVTVF9UTU1IdjIsICAgICAgICAgICAgIC8qIGF1dGhlbnRpY2F0aW9uIGZ1bmMgdHlwZSAgICAqLwotICAgIDk0LCAgICAgICAgICAgICAgICAgICAgIC8qIGF1dGgga2V5IGxlbmd0aCBpbiBvY3RldHMgICAqLwotICAgIDQsICAgICAgICAgICAgICAgICAgICAgIC8qIGF1dGggdGFnIGxlbmd0aCBpbiBvY3RldHMgICAqLwotICAgIHNlY19zZXJ2X2NvbmZfYW5kX2F1dGggIC8qIHNlY3VyaXR5IHNlcnZpY2VzIGZsYWcgICAgICAqLwotICB9LAotICB7IAotICAgIEFFU18xMjhfSUNNLCAgICAgICAgICAgIC8qIGNpcGhlciB0eXBlICAgICAgICAgICAgICAgICAqLwotICAgIDMwLCAgICAgICAgICAgICAgICAgICAgIC8qIGNpcGhlciBrZXkgbGVuZ3RoIGluIG9jdGV0cyAqLwotICAgIFVTVF9UTU1IdjIsICAgICAgICAgICAgIC8qIGF1dGhlbnRpY2F0aW9uIGZ1bmMgdHlwZSAgICAqLwotICAgIDk0LCAgICAgICAgICAgICAgICAgICAgIC8qIGF1dGgga2V5IGxlbmd0aCBpbiBvY3RldHMgICAqLwotICAgIDQsICAgICAgICAgICAgICAgICAgICAgIC8qIGF1dGggdGFnIGxlbmd0aCBpbiBvY3RldHMgICAqLwotICAgIHNlY19zZXJ2X2NvbmZfYW5kX2F1dGggIC8qIHNlY3VyaXR5IHNlcnZpY2VzIGZsYWcgICAgICAqLwotICB9LAotICB0ZXN0X2tleSwKLSAgTlVMTAotfTsKLQotY29uc3Qgc3J0cF9wb2xpY3lfdCB0bW1oX29ubHlfcG9saWN5ID0gewotICB7IHNzcmNfYW55X291dGJvdW5kLCAwIH0sICAgICAvKiBTU1JDICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgewotICAgIEFFU18xMjhfSUNNLCAgICAgICAgICAgIC8qIGNpcGhlciB0eXBlICAgICAgICAgICAgICAgICAqLwotICAgIDMwLCAgICAgICAgICAgICAgICAgICAgIC8qIGNpcGhlciBrZXkgbGVuZ3RoIGluIG9jdGV0cyAqLwotICAgIFVTVF9UTU1IdjIsICAgICAgICAgICAgIC8qIGF1dGhlbnRpY2F0aW9uIGZ1bmMgdHlwZSAgICAqLwotICAgIDk0LCAgICAgICAgICAgICAgICAgICAgIC8qIGF1dGgga2V5IGxlbmd0aCBpbiBvY3RldHMgICAqLwotICAgIDQsICAgICAgICAgICAgICAgICAgICAgIC8qIGF1dGggdGFnIGxlbmd0aCBpbiBvY3RldHMgICAqLwotICAgIHNlY19zZXJ2X2F1dGggICAgICAgICAgIC8qIHNlY3VyaXR5IHNlcnZpY2VzIGZsYWcgICAgICAqLwotICB9LAotICB7Ci0gICAgQUVTXzEyOF9JQ00sICAgICAgICAgICAgLyogY2lwaGVyIHR5cGUgICAgICAgICAgICAgICAgICovCi0gICAgMzAsICAgICAgICAgICAgICAgICAgICAgLyogY2lwaGVyIGtleSBsZW5ndGggaW4gb2N0ZXRzICovCi0gICAgVVNUX1RNTUh2MiwgICAgICAgICAgICAgLyogYXV0aGVudGljYXRpb24gZnVuYyB0eXBlICAgICovCi0gICAgOTQsICAgICAgICAgICAgICAgICAgICAgLyogYXV0aCBrZXkgbGVuZ3RoIGluIG9jdGV0cyAgICovCi0gICAgNCwgICAgICAgICAgICAgICAgICAgICAgLyogYXV0aCB0YWcgbGVuZ3RoIGluIG9jdGV0cyAgICovCi0gICAgc2VjX3NlcnZfYXV0aCAgICAgICAgICAgLyogc2VjdXJpdHkgc2VydmljZXMgZmxhZyAgICAgICovCi0gIH0sCi0gIHRlc3Rfa2V5LAotICBOVUxMCisgICAgeyBzc3JjX2FueV9vdXRib3VuZCwgMCB9LCAvKiBTU1JDICovCisgICAgeworICAgICAgICAvKiBTUlRQIHBvbGljeSAqLworICAgICAgICBTUlRQX0FFU19JQ01fMTI4LCAgICAgICAgICAgICAgIC8qIGNpcGhlciB0eXBlICAgICAgICAgICAgICAgICAqLworICAgICAgICBTUlRQX0FFU19JQ01fMTI4X0tFWV9MRU5fV1NBTFQsIC8qIGNpcGhlciBrZXkgbGVuZ3RoIGluIG9jdGV0cyAqLworICAgICAgICBTUlRQX0hNQUNfU0hBMSwgICAgICAgICAgICAgICAgIC8qIGF1dGhlbnRpY2F0aW9uIGZ1bmMgdHlwZSAgICAqLworICAgICAgICAxNiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGF1dGgga2V5IGxlbmd0aCBpbiBvY3RldHMgICAqLworICAgICAgICAxMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGF1dGggdGFnIGxlbmd0aCBpbiBvY3RldHMgICAqLworICAgICAgICBzZWNfc2Vydl9jb25mX2FuZF9hdXRoICAgICAgICAgIC8qIHNlY3VyaXR5IHNlcnZpY2VzIGZsYWcgICAgICAqLworICAgIH0sCisgICAgeworICAgICAgICAvKiBTUlRDUCBwb2xpY3kgKi8KKyAgICAgICAgU1JUUF9BRVNfSUNNXzEyOCwgICAgICAgICAgICAgICAvKiBjaXBoZXIgdHlwZSAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgU1JUUF9BRVNfSUNNXzEyOF9LRVlfTEVOX1dTQUxULCAvKiBjaXBoZXIga2V5IGxlbmd0aCBpbiBvY3RldHMgKi8KKyAgICAgICAgU1JUUF9ITUFDX1NIQTEsICAgICAgICAgICAgICAgICAvKiBhdXRoZW50aWNhdGlvbiBmdW5jIHR5cGUgICAgKi8KKyAgICAgICAgMTYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhdXRoIGtleSBsZW5ndGggaW4gb2N0ZXRzICAgKi8KKyAgICAgICAgMTAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhdXRoIHRhZyBsZW5ndGggaW4gb2N0ZXRzICAgKi8KKyAgICAgICAgc2VjX3NlcnZfY29uZl9hbmRfYXV0aCAgICAgICAgICAvKiBzZWN1cml0eSBzZXJ2aWNlcyBmbGFnICAgICAgKi8KKyAgICB9LAorICAgIE5VTEwsCisgICAgKHNydHBfbWFzdGVyX2tleV90ICoqKXRlc3Rfa2V5cywKKyAgICAyLCAgICAvKiBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBNYXN0ZXIga2V5cyAgICAgICAgICAqLworICAgIE5VTEwsIC8qIGluZGljYXRlcyB0aGF0IEVLVCBpcyBub3QgaW4gdXNlICAgICAgICAgICAgICovCisgICAgMTI4LCAgLyogcmVwbGF5IHdpbmRvdyBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAwLCAgICAvKiByZXRyYW5zbWlzc2lvbiBub3QgYWxsb3dlZCAgICAgICAgICAgICAgICAgICAqLworICAgIE5VTEwsIC8qIG5vIGVuY3J5cHRlZCBleHRlbnNpb24gaGVhZGVycyAgICAgICAgICAgICAgICovCisgICAgMCwgICAgLyogbGlzdCBvZiBlbmNyeXB0ZWQgZXh0ZW5zaW9uIGhlYWRlcnMgaXMgZW1wdHkgKi8KKyAgICBOVUxMCiB9OwogCiBjb25zdCBzcnRwX3BvbGljeV90IGFlc19vbmx5X3BvbGljeSA9IHsKLSAgeyBzc3JjX2FueV9vdXRib3VuZCwgMCB9LCAgICAgLyogU1NSQyAgICAgICAgICAgICAgICAgICAgICAgICovIAotICB7Ci0gICAgQUVTXzEyOF9JQ00sICAgICAgICAgICAgLyogY2lwaGVyIHR5cGUgICAgICAgICAgICAgICAgICovCi0gICAgMzAsICAgICAgICAgICAgICAgICAgICAgLyogY2lwaGVyIGtleSBsZW5ndGggaW4gb2N0ZXRzICovCi0gICAgTlVMTF9BVVRILCAgICAgICAgICAgICAgLyogYXV0aGVudGljYXRpb24gZnVuYyB0eXBlICAgICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgLyogYXV0aCBrZXkgbGVuZ3RoIGluIG9jdGV0cyAgICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgLyogYXV0aCB0YWcgbGVuZ3RoIGluIG9jdGV0cyAgICovCi0gICAgc2VjX3NlcnZfY29uZiAgICAgICAgICAgLyogc2VjdXJpdHkgc2VydmljZXMgZmxhZyAgICAgICovCi0gIH0sCi0gIHsKLSAgICBBRVNfMTI4X0lDTSwgICAgICAgICAgICAvKiBjaXBoZXIgdHlwZSAgICAgICAgICAgICAgICAgKi8KLSAgICAzMCwgICAgICAgICAgICAgICAgICAgICAvKiBjaXBoZXIga2V5IGxlbmd0aCBpbiBvY3RldHMgKi8KLSAgICBOVUxMX0FVVEgsICAgICAgICAgICAgICAvKiBhdXRoZW50aWNhdGlvbiBmdW5jIHR5cGUgICAgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKiBhdXRoIGtleSBsZW5ndGggaW4gb2N0ZXRzICAgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKiBhdXRoIHRhZyBsZW5ndGggaW4gb2N0ZXRzICAgKi8KLSAgICBzZWNfc2Vydl9jb25mICAgICAgICAgICAvKiBzZWN1cml0eSBzZXJ2aWNlcyBmbGFnICAgICAgKi8KLSAgfSwKLSAgdGVzdF9rZXksCi0gIE5VTEwKKyAgICB7IHNzcmNfYW55X291dGJvdW5kLCAwIH0sIC8qIFNTUkMgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHsKKyAgICAgICAgU1JUUF9BRVNfSUNNXzEyOCwgICAgICAgICAgICAgICAvKiBjaXBoZXIgdHlwZSAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgU1JUUF9BRVNfSUNNXzEyOF9LRVlfTEVOX1dTQUxULCAvKiBjaXBoZXIga2V5IGxlbmd0aCBpbiBvY3RldHMgKi8KKyAgICAgICAgU1JUUF9OVUxMX0FVVEgsICAgICAgICAgICAgICAgICAvKiBhdXRoZW50aWNhdGlvbiBmdW5jIHR5cGUgICAgKi8KKyAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhdXRoIGtleSBsZW5ndGggaW4gb2N0ZXRzICAgKi8KKyAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhdXRoIHRhZyBsZW5ndGggaW4gb2N0ZXRzICAgKi8KKyAgICAgICAgc2VjX3NlcnZfY29uZiAgICAgICAgICAgICAgICAgICAvKiBzZWN1cml0eSBzZXJ2aWNlcyBmbGFnICAgICAgKi8KKyAgICB9LAorICAgIHsKKyAgICAgICAgU1JUUF9BRVNfSUNNXzEyOCwgICAgICAgICAgICAgICAvKiBjaXBoZXIgdHlwZSAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgU1JUUF9BRVNfSUNNXzEyOF9LRVlfTEVOX1dTQUxULCAvKiBjaXBoZXIga2V5IGxlbmd0aCBpbiBvY3RldHMgKi8KKyAgICAgICAgU1JUUF9OVUxMX0FVVEgsICAgICAgICAgICAgICAgICAvKiBhdXRoZW50aWNhdGlvbiBmdW5jIHR5cGUgICAgKi8KKyAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhdXRoIGtleSBsZW5ndGggaW4gb2N0ZXRzICAgKi8KKyAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhdXRoIHRhZyBsZW5ndGggaW4gb2N0ZXRzICAgKi8KKyAgICAgICAgc2VjX3NlcnZfY29uZiAgICAgICAgICAgICAgICAgICAvKiBzZWN1cml0eSBzZXJ2aWNlcyBmbGFnICAgICAgKi8KKyAgICB9LAorICAgIE5VTEwsCisgICAgKHNydHBfbWFzdGVyX2tleV90ICoqKXRlc3Rfa2V5cywKKyAgICAyLCAgICAvKiBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBNYXN0ZXIga2V5cyAgICAgICAgICAqLworICAgIE5VTEwsIC8qIGluZGljYXRlcyB0aGF0IEVLVCBpcyBub3QgaW4gdXNlICAgICAgICAgICAgICovCisgICAgMTI4LCAgLyogcmVwbGF5IHdpbmRvdyBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAwLCAgICAvKiByZXRyYW5zbWlzc2lvbiBub3QgYWxsb3dlZCAgICAgICAgICAgICAgICAgICAqLworICAgIE5VTEwsIC8qIG5vIGVuY3J5cHRlZCBleHRlbnNpb24gaGVhZGVycyAgICAgICAgICAgICAgICovCisgICAgMCwgICAgLyogbGlzdCBvZiBlbmNyeXB0ZWQgZXh0ZW5zaW9uIGhlYWRlcnMgaXMgZW1wdHkgKi8KKyAgICBOVUxMCiB9OwogCiBjb25zdCBzcnRwX3BvbGljeV90IGhtYWNfb25seV9wb2xpY3kgPSB7Ci0gIHsgc3NyY19hbnlfb3V0Ym91bmQsIDAgfSwgICAgIC8qIFNTUkMgICAgICAgICAgICAgICAgICAgICAgICAqLwotICB7Ci0gICAgTlVMTF9DSVBIRVIsICAgICAgICAgICAgLyogY2lwaGVyIHR5cGUgICAgICAgICAgICAgICAgICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgLyogY2lwaGVyIGtleSBsZW5ndGggaW4gb2N0ZXRzICovCi0gICAgSE1BQ19TSEExLCAgICAgICAgICAgICAgLyogYXV0aGVudGljYXRpb24gZnVuYyB0eXBlICAgICovCi0gICAgMjAsICAgICAgICAgICAgICAgICAgICAgLyogYXV0aCBrZXkgbGVuZ3RoIGluIG9jdGV0cyAgICovCi0gICAgNCwgICAgICAgICAgICAgICAgICAgICAgLyogYXV0aCB0YWcgbGVuZ3RoIGluIG9jdGV0cyAgICovCi0gICAgc2VjX3NlcnZfYXV0aCAgICAgICAgICAgLyogc2VjdXJpdHkgc2VydmljZXMgZmxhZyAgICAgICovCi0gIH0sICAKLSAgewotICAgIE5VTExfQ0lQSEVSLCAgICAgICAgICAgIC8qIGNpcGhlciB0eXBlICAgICAgICAgICAgICAgICAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qIGNpcGhlciBrZXkgbGVuZ3RoIGluIG9jdGV0cyAqLwotICAgIEhNQUNfU0hBMSwgICAgICAgICAgICAgIC8qIGF1dGhlbnRpY2F0aW9uIGZ1bmMgdHlwZSAgICAqLwotICAgIDIwLCAgICAgICAgICAgICAgICAgICAgIC8qIGF1dGgga2V5IGxlbmd0aCBpbiBvY3RldHMgICAqLwotICAgIDQsICAgICAgICAgICAgICAgICAgICAgIC8qIGF1dGggdGFnIGxlbmd0aCBpbiBvY3RldHMgICAqLwotICAgIHNlY19zZXJ2X2F1dGggICAgICAgICAgIC8qIHNlY3VyaXR5IHNlcnZpY2VzIGZsYWcgICAgICAqLwotICB9LAotICB0ZXN0X2tleSwKLSAgTlVMTAorICAgIHsgc3NyY19hbnlfb3V0Ym91bmQsIDAgfSwgLyogU1NSQyAqLworICAgIHsKKyAgICAgICAgU1JUUF9OVUxMX0NJUEhFUiwgLyogY2lwaGVyIHR5cGUgICAgICAgICAgICAgICAgICovCisgICAgICAgIDAsICAgICAgICAgICAgICAgIC8qIGNpcGhlciBrZXkgbGVuZ3RoIGluIG9jdGV0cyAqLworICAgICAgICBTUlRQX0hNQUNfU0hBMSwgICAvKiBhdXRoZW50aWNhdGlvbiBmdW5jIHR5cGUgICAgKi8KKyAgICAgICAgMjAsICAgICAgICAgICAgICAgLyogYXV0aCBrZXkgbGVuZ3RoIGluIG9jdGV0cyAgICovCisgICAgICAgIDQsICAgICAgICAgICAgICAgIC8qIGF1dGggdGFnIGxlbmd0aCBpbiBvY3RldHMgICAqLworICAgICAgICBzZWNfc2Vydl9hdXRoICAgICAvKiBzZWN1cml0eSBzZXJ2aWNlcyBmbGFnICAgICAgKi8KKyAgICB9LAorICAgIHsKKyAgICAgICAgU1JUUF9OVUxMX0NJUEhFUiwgLyogY2lwaGVyIHR5cGUgICAgICAgICAgICAgICAgICovCisgICAgICAgIDAsICAgICAgICAgICAgICAgIC8qIGNpcGhlciBrZXkgbGVuZ3RoIGluIG9jdGV0cyAqLworICAgICAgICBTUlRQX0hNQUNfU0hBMSwgICAvKiBhdXRoZW50aWNhdGlvbiBmdW5jIHR5cGUgICAgKi8KKyAgICAgICAgMjAsICAgICAgICAgICAgICAgLyogYXV0aCBrZXkgbGVuZ3RoIGluIG9jdGV0cyAgICovCisgICAgICAgIDQsICAgICAgICAgICAgICAgIC8qIGF1dGggdGFnIGxlbmd0aCBpbiBvY3RldHMgICAqLworICAgICAgICBzZWNfc2Vydl9hdXRoICAgICAvKiBzZWN1cml0eSBzZXJ2aWNlcyBmbGFnICAgICAgKi8KKyAgICB9LAorICAgIE5VTEwsCisgICAgKHNydHBfbWFzdGVyX2tleV90ICoqKXRlc3Rfa2V5cywKKyAgICAyLCAgICAvKiBOdW1iZXIgb2YgTWFzdGVyIGtleXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBwb2xpY3kgKi8KKyAgICBOVUxMLCAvKiBpbmRpY2F0ZXMgdGhhdCBFS1QgaXMgbm90IGluIHVzZSAgICAgICAgICAgICAgICAgKi8KKyAgICAxMjgsICAvKiByZXBsYXkgd2luZG93IHNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAwLCAgICAvKiByZXRyYW5zbWlzc2lvbiBub3QgYWxsb3dlZCAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBOVUxMLCAvKiBubyBlbmNyeXB0ZWQgZXh0ZW5zaW9uIGhlYWRlcnMgICAgICAgICAgICAgICAgICAgKi8KKyAgICAwLCAgICAvKiBsaXN0IG9mIGVuY3J5cHRlZCBleHRlbnNpb24gaGVhZGVycyBpcyBlbXB0eSAgICAgKi8KKyAgICBOVUxMCiB9OwogCisjaWZkZWYgR0NNCitjb25zdCBzcnRwX3BvbGljeV90IGFlczEyOF9nY21fOF9wb2xpY3kgPSB7CisgICAgeyBzc3JjX2FueV9vdXRib3VuZCwgMCB9LCAvKiBTU1JDICovCisgICAgeworICAgICAgICAvKiBTUlRQIHBvbGljeSAqLworICAgICAgICBTUlRQX0FFU19HQ01fMTI4LCAgICAgICAgICAgICAgIC8qIGNpcGhlciB0eXBlICAgICAgICAgICAgICAgICAqLworICAgICAgICBTUlRQX0FFU19HQ01fMTI4X0tFWV9MRU5fV1NBTFQsIC8qIGNpcGhlciBrZXkgbGVuZ3RoIGluIG9jdGV0cyAqLworICAgICAgICBTUlRQX05VTExfQVVUSCwgICAgICAgICAgICAgICAgIC8qIGF1dGhlbnRpY2F0aW9uIGZ1bmMgdHlwZSAgICAqLworICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGF1dGgga2V5IGxlbmd0aCBpbiBvY3RldHMgICAqLworICAgICAgICA4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGF1dGggdGFnIGxlbmd0aCBpbiBvY3RldHMgICAqLworICAgICAgICBzZWNfc2Vydl9jb25mX2FuZF9hdXRoICAgICAgICAgIC8qIHNlY3VyaXR5IHNlcnZpY2VzIGZsYWcgICAgICAqLworICAgIH0sCisgICAgeworICAgICAgICAvKiBTUlRDUCBwb2xpY3kgKi8KKyAgICAgICAgU1JUUF9BRVNfR0NNXzEyOCwgICAgICAgICAgICAgICAvKiBjaXBoZXIgdHlwZSAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgU1JUUF9BRVNfR0NNXzEyOF9LRVlfTEVOX1dTQUxULCAvKiBjaXBoZXIga2V5IGxlbmd0aCBpbiBvY3RldHMgKi8KKyAgICAgICAgU1JUUF9OVUxMX0FVVEgsICAgICAgICAgICAgICAgICAvKiBhdXRoZW50aWNhdGlvbiBmdW5jIHR5cGUgICAgKi8KKyAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhdXRoIGtleSBsZW5ndGggaW4gb2N0ZXRzICAgKi8KKyAgICAgICAgOCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhdXRoIHRhZyBsZW5ndGggaW4gb2N0ZXRzICAgKi8KKyAgICAgICAgc2VjX3NlcnZfY29uZl9hbmRfYXV0aCAgICAgICAgICAvKiBzZWN1cml0eSBzZXJ2aWNlcyBmbGFnICAgICAgKi8KKyAgICB9LAorICAgIE5VTEwsCisgICAgKHNydHBfbWFzdGVyX2tleV90ICoqKXRlc3Rfa2V5cywKKyAgICAyLCAgICAvKiBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBNYXN0ZXIga2V5cyAgICAgICAgICAqLworICAgIE5VTEwsIC8qIGluZGljYXRlcyB0aGF0IEVLVCBpcyBub3QgaW4gdXNlICAgICAgICAgICAgICovCisgICAgMTI4LCAgLyogcmVwbGF5IHdpbmRvdyBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAwLCAgICAvKiByZXRyYW5zbWlzc2lvbiBub3QgYWxsb3dlZCAgICAgICAgICAgICAgICAgICAqLworICAgIE5VTEwsIC8qIG5vIGVuY3J5cHRlZCBleHRlbnNpb24gaGVhZGVycyAgICAgICAgICAgICAgICovCisgICAgMCwgICAgLyogbGlzdCBvZiBlbmNyeXB0ZWQgZXh0ZW5zaW9uIGhlYWRlcnMgaXMgZW1wdHkgKi8KKyAgICBOVUxMCit9OworCitjb25zdCBzcnRwX3BvbGljeV90IGFlczEyOF9nY21fOF9jYXV0aF9wb2xpY3kgPSB7CisgICAgeyBzc3JjX2FueV9vdXRib3VuZCwgMCB9LCAvKiBTU1JDICovCisgICAgeworICAgICAgICAvKiBTUlRQIHBvbGljeSAqLworICAgICAgICBTUlRQX0FFU19HQ01fMTI4LCAgICAgICAgICAgICAgIC8qIGNpcGhlciB0eXBlICAgICAgICAgICAgICAgICAqLworICAgICAgICBTUlRQX0FFU19HQ01fMTI4X0tFWV9MRU5fV1NBTFQsIC8qIGNpcGhlciBrZXkgbGVuZ3RoIGluIG9jdGV0cyAqLworICAgICAgICBTUlRQX05VTExfQVVUSCwgICAgICAgICAgICAgICAgIC8qIGF1dGhlbnRpY2F0aW9uIGZ1bmMgdHlwZSAgICAqLworICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGF1dGgga2V5IGxlbmd0aCBpbiBvY3RldHMgICAqLworICAgICAgICA4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGF1dGggdGFnIGxlbmd0aCBpbiBvY3RldHMgICAqLworICAgICAgICBzZWNfc2Vydl9jb25mX2FuZF9hdXRoICAgICAgICAgIC8qIHNlY3VyaXR5IHNlcnZpY2VzIGZsYWcgICAgICAqLworICAgIH0sCisgICAgeworICAgICAgICAvKiBTUlRDUCBwb2xpY3kgKi8KKyAgICAgICAgU1JUUF9BRVNfR0NNXzEyOCwgICAgICAgICAgICAgICAvKiBjaXBoZXIgdHlwZSAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgU1JUUF9BRVNfR0NNXzEyOF9LRVlfTEVOX1dTQUxULCAvKiBjaXBoZXIga2V5IGxlbmd0aCBpbiBvY3RldHMgKi8KKyAgICAgICAgU1JUUF9OVUxMX0FVVEgsICAgICAgICAgICAgICAgICAvKiBhdXRoZW50aWNhdGlvbiBmdW5jIHR5cGUgICAgKi8KKyAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhdXRoIGtleSBsZW5ndGggaW4gb2N0ZXRzICAgKi8KKyAgICAgICAgOCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhdXRoIHRhZyBsZW5ndGggaW4gb2N0ZXRzICAgKi8KKyAgICAgICAgc2VjX3NlcnZfYXV0aCAgICAgICAgICAgICAgICAgICAvKiBzZWN1cml0eSBzZXJ2aWNlcyBmbGFnICAgICAgKi8KKyAgICB9LAorICAgIE5VTEwsCisgICAgKHNydHBfbWFzdGVyX2tleV90ICoqKXRlc3Rfa2V5cywKKyAgICAyLCAgICAvKiBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBNYXN0ZXIga2V5cyAgICAgICAgICAqLworICAgIE5VTEwsIC8qIGluZGljYXRlcyB0aGF0IEVLVCBpcyBub3QgaW4gdXNlICAgICAgICAgICAgICovCisgICAgMTI4LCAgLyogcmVwbGF5IHdpbmRvdyBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAwLCAgICAvKiByZXRyYW5zbWlzc2lvbiBub3QgYWxsb3dlZCAgICAgICAgICAgICAgICAgICAqLworICAgIE5VTEwsIC8qIG5vIGVuY3J5cHRlZCBleHRlbnNpb24gaGVhZGVycyAgICAgICAgICAgICAgICovCisgICAgMCwgICAgLyogbGlzdCBvZiBlbmNyeXB0ZWQgZXh0ZW5zaW9uIGhlYWRlcnMgaXMgZW1wdHkgKi8KKyAgICBOVUxMCit9OworCitjb25zdCBzcnRwX3BvbGljeV90IGFlczI1Nl9nY21fOF9wb2xpY3kgPSB7CisgICAgeyBzc3JjX2FueV9vdXRib3VuZCwgMCB9LCAvKiBTU1JDICovCisgICAgeworICAgICAgICAvKiBTUlRQIHBvbGljeSAqLworICAgICAgICBTUlRQX0FFU19HQ01fMjU2LCAgICAgICAgICAgICAgIC8qIGNpcGhlciB0eXBlICAgICAgICAgICAgICAgICAqLworICAgICAgICBTUlRQX0FFU19HQ01fMjU2X0tFWV9MRU5fV1NBTFQsIC8qIGNpcGhlciBrZXkgbGVuZ3RoIGluIG9jdGV0cyAqLworICAgICAgICBTUlRQX05VTExfQVVUSCwgICAgICAgICAgICAgICAgIC8qIGF1dGhlbnRpY2F0aW9uIGZ1bmMgdHlwZSAgICAqLworICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGF1dGgga2V5IGxlbmd0aCBpbiBvY3RldHMgICAqLworICAgICAgICA4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGF1dGggdGFnIGxlbmd0aCBpbiBvY3RldHMgICAqLworICAgICAgICBzZWNfc2Vydl9jb25mX2FuZF9hdXRoICAgICAgICAgIC8qIHNlY3VyaXR5IHNlcnZpY2VzIGZsYWcgICAgICAqLworICAgIH0sCisgICAgeworICAgICAgICAvKiBTUlRDUCBwb2xpY3kgKi8KKyAgICAgICAgU1JUUF9BRVNfR0NNXzI1NiwgICAgICAgICAgICAgICAvKiBjaXBoZXIgdHlwZSAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgU1JUUF9BRVNfR0NNXzI1Nl9LRVlfTEVOX1dTQUxULCAvKiBjaXBoZXIga2V5IGxlbmd0aCBpbiBvY3RldHMgKi8KKyAgICAgICAgU1JUUF9OVUxMX0FVVEgsICAgICAgICAgICAgICAgICAvKiBhdXRoZW50aWNhdGlvbiBmdW5jIHR5cGUgICAgKi8KKyAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhdXRoIGtleSBsZW5ndGggaW4gb2N0ZXRzICAgKi8KKyAgICAgICAgOCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhdXRoIHRhZyBsZW5ndGggaW4gb2N0ZXRzICAgKi8KKyAgICAgICAgc2VjX3NlcnZfY29uZl9hbmRfYXV0aCAgICAgICAgICAvKiBzZWN1cml0eSBzZXJ2aWNlcyBmbGFnICAgICAgKi8KKyAgICB9LAorICAgIE5VTEwsCisgICAgKHNydHBfbWFzdGVyX2tleV90ICoqKXRlc3Rfa2V5cywKKyAgICAyLCAgICAvKiBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBNYXN0ZXIga2V5cyAgICAgICAgICAqLworICAgIE5VTEwsIC8qIGluZGljYXRlcyB0aGF0IEVLVCBpcyBub3QgaW4gdXNlICAgICAgICAgICAgICovCisgICAgMTI4LCAgLyogcmVwbGF5IHdpbmRvdyBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAwLCAgICAvKiByZXRyYW5zbWlzc2lvbiBub3QgYWxsb3dlZCAgICAgICAgICAgICAgICAgICAqLworICAgIE5VTEwsIC8qIG5vIGVuY3J5cHRlZCBleHRlbnNpb24gaGVhZGVycyAgICAgICAgICAgICAgICovCisgICAgMCwgICAgLyogbGlzdCBvZiBlbmNyeXB0ZWQgZXh0ZW5zaW9uIGhlYWRlcnMgaXMgZW1wdHkgKi8KKyAgICBOVUxMCit9OworCitjb25zdCBzcnRwX3BvbGljeV90IGFlczI1Nl9nY21fOF9jYXV0aF9wb2xpY3kgPSB7CisgICAgeyBzc3JjX2FueV9vdXRib3VuZCwgMCB9LCAvKiBTU1JDICovCisgICAgeworICAgICAgICAvKiBTUlRQIHBvbGljeSAqLworICAgICAgICBTUlRQX0FFU19HQ01fMjU2LCAgICAgICAgICAgICAgIC8qIGNpcGhlciB0eXBlICAgICAgICAgICAgICAgICAqLworICAgICAgICBTUlRQX0FFU19HQ01fMjU2X0tFWV9MRU5fV1NBTFQsIC8qIGNpcGhlciBrZXkgbGVuZ3RoIGluIG9jdGV0cyAqLworICAgICAgICBTUlRQX05VTExfQVVUSCwgICAgICAgICAgICAgICAgIC8qIGF1dGhlbnRpY2F0aW9uIGZ1bmMgdHlwZSAgICAqLworICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGF1dGgga2V5IGxlbmd0aCBpbiBvY3RldHMgICAqLworICAgICAgICA4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGF1dGggdGFnIGxlbmd0aCBpbiBvY3RldHMgICAqLworICAgICAgICBzZWNfc2Vydl9jb25mX2FuZF9hdXRoICAgICAgICAgIC8qIHNlY3VyaXR5IHNlcnZpY2VzIGZsYWcgICAgICAqLworICAgIH0sCisgICAgeworICAgICAgICAvKiBTUlRDUCBwb2xpY3kgKi8KKyAgICAgICAgU1JUUF9BRVNfR0NNXzI1NiwgICAgICAgICAgICAgICAvKiBjaXBoZXIgdHlwZSAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgU1JUUF9BRVNfR0NNXzI1Nl9LRVlfTEVOX1dTQUxULCAvKiBjaXBoZXIga2V5IGxlbmd0aCBpbiBvY3RldHMgKi8KKyAgICAgICAgU1JUUF9OVUxMX0FVVEgsICAgICAgICAgICAgICAgICAvKiBhdXRoZW50aWNhdGlvbiBmdW5jIHR5cGUgICAgKi8KKyAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhdXRoIGtleSBsZW5ndGggaW4gb2N0ZXRzICAgKi8KKyAgICAgICAgOCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhdXRoIHRhZyBsZW5ndGggaW4gb2N0ZXRzICAgKi8KKyAgICAgICAgc2VjX3NlcnZfYXV0aCAgICAgICAgICAgICAgICAgICAvKiBzZWN1cml0eSBzZXJ2aWNlcyBmbGFnICAgICAgKi8KKyAgICB9LAorICAgIE5VTEwsCisgICAgKHNydHBfbWFzdGVyX2tleV90ICoqKXRlc3Rfa2V5cywKKyAgICAyLCAgICAvKiBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBNYXN0ZXIga2V5cyAgICAgICAgICAqLworICAgIE5VTEwsIC8qIGluZGljYXRlcyB0aGF0IEVLVCBpcyBub3QgaW4gdXNlICAgICAgICAgICAgICovCisgICAgMTI4LCAgLyogcmVwbGF5IHdpbmRvdyBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAwLCAgICAvKiByZXRyYW5zbWlzc2lvbiBub3QgYWxsb3dlZCAgICAgICAgICAgICAgICAgICAqLworICAgIE5VTEwsIC8qIG5vIGVuY3J5cHRlZCBleHRlbnNpb24gaGVhZGVycyAgICAgICAgICAgICAgICovCisgICAgMCwgICAgLyogbGlzdCBvZiBlbmNyeXB0ZWQgZXh0ZW5zaW9uIGhlYWRlcnMgaXMgZW1wdHkgKi8KKyAgICBOVUxMCit9OworI2VuZGlmCisKIGNvbnN0IHNydHBfcG9saWN5X3QgbnVsbF9wb2xpY3kgPSB7Ci0gIHsgc3NyY19hbnlfb3V0Ym91bmQsIDAgfSwgICAgIC8qIFNTUkMgICAgICAgICAgICAgICAgICAgICAgICAqLyAKLSAgewotICAgIE5VTExfQ0lQSEVSLCAgICAgICAgICAgIC8qIGNpcGhlciB0eXBlICAgICAgICAgICAgICAgICAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qIGNpcGhlciBrZXkgbGVuZ3RoIGluIG9jdGV0cyAqLwotICAgIE5VTExfQVVUSCwgICAgICAgICAgICAgIC8qIGF1dGhlbnRpY2F0aW9uIGZ1bmMgdHlwZSAgICAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qIGF1dGgga2V5IGxlbmd0aCBpbiBvY3RldHMgICAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qIGF1dGggdGFnIGxlbmd0aCBpbiBvY3RldHMgICAqLwotICAgIHNlY19zZXJ2X25vbmUgICAgICAgICAgIC8qIHNlY3VyaXR5IHNlcnZpY2VzIGZsYWcgICAgICAqLyAgCi0gIH0sCi0gIHsKLSAgICBOVUxMX0NJUEhFUiwgICAgICAgICAgICAvKiBjaXBoZXIgdHlwZSAgICAgICAgICAgICAgICAgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKiBjaXBoZXIga2V5IGxlbmd0aCBpbiBvY3RldHMgKi8KLSAgICBOVUxMX0FVVEgsICAgICAgICAgICAgICAvKiBhdXRoZW50aWNhdGlvbiBmdW5jIHR5cGUgICAgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKiBhdXRoIGtleSBsZW5ndGggaW4gb2N0ZXRzICAgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKiBhdXRoIHRhZyBsZW5ndGggaW4gb2N0ZXRzICAgKi8KLSAgICBzZWNfc2Vydl9ub25lICAgICAgICAgICAvKiBzZWN1cml0eSBzZXJ2aWNlcyBmbGFnICAgICAgKi8gIAotICB9LAotICB0ZXN0X2tleSwKLSAgTlVMTAorICAgIHsgc3NyY19hbnlfb3V0Ym91bmQsIDAgfSwgLyogU1NSQyAqLworICAgIHsKKyAgICAgICAgU1JUUF9OVUxMX0NJUEhFUiwgLyogY2lwaGVyIHR5cGUgICAgICAgICAgICAgICAgICovCisgICAgICAgIDAsICAgICAgICAgICAgICAgIC8qIGNpcGhlciBrZXkgbGVuZ3RoIGluIG9jdGV0cyAqLworICAgICAgICBTUlRQX05VTExfQVVUSCwgICAvKiBhdXRoZW50aWNhdGlvbiBmdW5jIHR5cGUgICAgKi8KKyAgICAgICAgMCwgICAgICAgICAgICAgICAgLyogYXV0aCBrZXkgbGVuZ3RoIGluIG9jdGV0cyAgICovCisgICAgICAgIDAsICAgICAgICAgICAgICAgIC8qIGF1dGggdGFnIGxlbmd0aCBpbiBvY3RldHMgICAqLworICAgICAgICBzZWNfc2Vydl9ub25lICAgICAvKiBzZWN1cml0eSBzZXJ2aWNlcyBmbGFnICAgICAgKi8KKyAgICB9LAorICAgIHsKKyAgICAgICAgU1JUUF9OVUxMX0NJUEhFUiwgLyogY2lwaGVyIHR5cGUgICAgICAgICAgICAgICAgICovCisgICAgICAgIDAsICAgICAgICAgICAgICAgIC8qIGNpcGhlciBrZXkgbGVuZ3RoIGluIG9jdGV0cyAqLworICAgICAgICBTUlRQX05VTExfQVVUSCwgICAvKiBhdXRoZW50aWNhdGlvbiBmdW5jIHR5cGUgICAgKi8KKyAgICAgICAgMCwgICAgICAgICAgICAgICAgLyogYXV0aCBrZXkgbGVuZ3RoIGluIG9jdGV0cyAgICovCisgICAgICAgIDAsICAgICAgICAgICAgICAgIC8qIGF1dGggdGFnIGxlbmd0aCBpbiBvY3RldHMgICAqLworICAgICAgICBzZWNfc2Vydl9ub25lICAgICAvKiBzZWN1cml0eSBzZXJ2aWNlcyBmbGFnICAgICAgKi8KKyAgICB9LAorICAgIE5VTEwsCisgICAgKHNydHBfbWFzdGVyX2tleV90ICoqKXRlc3Rfa2V5cywKKyAgICAyLCAgICAvKiBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBNYXN0ZXIga2V5cyAgICAgICAgICAqLworICAgIE5VTEwsIC8qIGluZGljYXRlcyB0aGF0IEVLVCBpcyBub3QgaW4gdXNlICAgICAgICAgICAgICovCisgICAgMTI4LCAgLyogcmVwbGF5IHdpbmRvdyBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAwLCAgICAvKiByZXRyYW5zbWlzc2lvbiBub3QgYWxsb3dlZCAgICAgICAgICAgICAgICAgICAqLworICAgIE5VTEwsIC8qIG5vIGVuY3J5cHRlZCBleHRlbnNpb24gaGVhZGVycyAgICAgICAgICAgICAgICovCisgICAgMCwgICAgLyogbGlzdCBvZiBlbmNyeXB0ZWQgZXh0ZW5zaW9uIGhlYWRlcnMgaXMgZW1wdHkgKi8KKyAgICBOVUxMCiB9OwogCisvLyBjbGFuZy1mb3JtYXQgb2ZmCit1bnNpZ25lZCBjaGFyIHRlc3RfMjU2X2tleVs0Nl0gPSB7CisgICAgMHhmMCwgMHhmMCwgMHg0OSwgMHgxNCwgMHhiNSwgMHgxMywgMHhmMiwgMHg3NiwKKyAgICAweDNhLCAweDFiLCAweDFmLCAweGExLCAweDMwLCAweGYxLCAweDBlLCAweDI5LAorICAgIDB4OTgsIDB4ZjYsIDB4ZjYsIDB4ZTQsIDB4M2UsIDB4NDMsIDB4MDksIDB4ZDEsCisgICAgMHhlNiwgMHgyMiwgMHhhMCwgMHhlMywgMHgzMiwgMHhiOSwgMHhmMSwgMHhiNiwKKworICAgIDB4M2IsIDB4MDQsIDB4ODAsIDB4M2QsIDB4ZTUsIDB4MWUsIDB4ZTcsIDB4YzksCisgICAgMHg2NCwgMHgyMywgMHhhYiwgMHg1YiwgMHg3OCwgMHhkMgorfTsKKwordW5zaWduZWQgY2hhciB0ZXN0XzI1Nl9rZXlfMls0Nl0gPSB7CisgICAgMHhlMSwgMHhmOSwgMHg3YSwgMHgwZCwgMHgzZSwgMHgwMSwgMHg4YiwgMHhlMCwKKyAgICAweGQ2LCAweDRmLCAweGEzLCAweDJjLCAweDA2LCAweGRlLCAweDQxLCAweDM5LAorICAgIDB4MGUsIDB4YzYsIDB4NzUsIDB4YWQsIDB4NDksIDB4OGEsIDB4ZmUsIDB4ZWIsCisgICAgMHhiNiwgMHg5NiwgMHgwYiwgMHgzYSwgMHhhYiwgMHhlNiwgMHhjMSwgMHg3MywKKyAgICAweDNiLCAweDA0LCAweDgwLCAweDNkLCAweGU1LCAweDFlLCAweGU3LCAweGM5LAorICAgIDB4NjQsIDB4MjMsIDB4YWIsIDB4NWIsIDB4NzgsIDB4ZDIKK307CisKK3NydHBfbWFzdGVyX2tleV90IG1hc3Rlcl8yNTZfa2V5XzEgPSB7CisgICAgdGVzdF8yNTZfa2V5LAorICAgIHRlc3RfbWtpX2lkLAorICAgIFRFU1RfTUtJX0lEX1NJWkUKK307CisKK3NydHBfbWFzdGVyX2tleV90IG1hc3Rlcl8yNTZfa2V5XzIgPSB7CisgICAgdGVzdF8yNTZfa2V5XzIsCisgICAgdGVzdF9ta2lfaWRfMiwKKyAgICBURVNUX01LSV9JRF9TSVpFCit9OworCitzcnRwX21hc3Rlcl9rZXlfdCAqdGVzdF8yNTZfa2V5c1syXSA9IHsKKyAgICAmbWFzdGVyX2tleV8xLAorICAgICZtYXN0ZXJfa2V5XzIKK307CisvLyBjbGFuZy1mb3JtYXQgb24KKworY29uc3Qgc3J0cF9wb2xpY3lfdCBhZXNfMjU2X2htYWNfcG9saWN5ID0geworICAgIHsgc3NyY19hbnlfb3V0Ym91bmQsIDAgfSwgLyogU1NSQyAqLworICAgIHsKKyAgICAgICAgLyogU1JUUCBwb2xpY3kgKi8KKyAgICAgICAgU1JUUF9BRVNfSUNNXzI1NiwgICAgICAgICAgICAgICAvKiBjaXBoZXIgdHlwZSAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgU1JUUF9BRVNfSUNNXzI1Nl9LRVlfTEVOX1dTQUxULCAvKiBjaXBoZXIga2V5IGxlbmd0aCBpbiBvY3RldHMgKi8KKyAgICAgICAgU1JUUF9ITUFDX1NIQTEsICAgICAgICAgICAgICAgICAvKiBhdXRoZW50aWNhdGlvbiBmdW5jIHR5cGUgICAgKi8KKyAgICAgICAgMjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhdXRoIGtleSBsZW5ndGggaW4gb2N0ZXRzICAgKi8KKyAgICAgICAgMTAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhdXRoIHRhZyBsZW5ndGggaW4gb2N0ZXRzICAgKi8KKyAgICAgICAgc2VjX3NlcnZfY29uZl9hbmRfYXV0aCAgICAgICAgICAvKiBzZWN1cml0eSBzZXJ2aWNlcyBmbGFnICAgICAgKi8KKyAgICB9LAorICAgIHsKKyAgICAgICAgLyogU1JUQ1AgcG9saWN5ICovCisgICAgICAgIFNSVFBfQUVTX0lDTV8yNTYsICAgICAgICAgICAgICAgLyogY2lwaGVyIHR5cGUgICAgICAgICAgICAgICAgICovCisgICAgICAgIFNSVFBfQUVTX0lDTV8yNTZfS0VZX0xFTl9XU0FMVCwgLyogY2lwaGVyIGtleSBsZW5ndGggaW4gb2N0ZXRzICovCisgICAgICAgIFNSVFBfSE1BQ19TSEExLCAgICAgICAgICAgICAgICAgLyogYXV0aGVudGljYXRpb24gZnVuYyB0eXBlICAgICovCisgICAgICAgIDIwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYXV0aCBrZXkgbGVuZ3RoIGluIG9jdGV0cyAgICovCisgICAgICAgIDEwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYXV0aCB0YWcgbGVuZ3RoIGluIG9jdGV0cyAgICovCisgICAgICAgIHNlY19zZXJ2X2NvbmZfYW5kX2F1dGggICAgICAgICAgLyogc2VjdXJpdHkgc2VydmljZXMgZmxhZyAgICAgICovCisgICAgfSwKKyAgICBOVUxMLAorICAgIChzcnRwX21hc3Rlcl9rZXlfdCAqKil0ZXN0XzI1Nl9rZXlzLAorICAgIDIsICAgIC8qIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIE1hc3RlciBrZXlzICAgICAgICAgICovCisgICAgTlVMTCwgLyogaW5kaWNhdGVzIHRoYXQgRUtUIGlzIG5vdCBpbiB1c2UgICAgICAgICAgICAgKi8KKyAgICAxMjgsICAvKiByZXBsYXkgd2luZG93IHNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIDAsICAgIC8qIHJldHJhbnNtaXNzaW9uIG5vdCBhbGxvd2VkICAgICAgICAgICAgICAgICAgICovCisgICAgTlVMTCwgLyogbm8gZW5jcnlwdGVkIGV4dGVuc2lvbiBoZWFkZXJzICAgICAgICAgICAgICAgKi8KKyAgICAwLCAgICAvKiBsaXN0IG9mIGVuY3J5cHRlZCBleHRlbnNpb24gaGVhZGVycyBpcyBlbXB0eSAqLworICAgIE5VTEwKK307CisKKy8vIGNsYW5nLWZvcm1hdCBvZmYKK3VpbnQ4X3QgZWt0X3Rlc3Rfa2V5WzE2XSA9IHsKKyAgICAweDc3LCAweDI2LCAweDlkLCAweGFjLCAweDE2LCAweGEzLCAweDI4LCAweGNhLAorICAgIDB4OGUsIDB4YzksIDB4NjgsIDB4NGIsIDB4Y2MsIDB4YzQsIDB4ZDIsIDB4MWIKK307CisvLyBjbGFuZy1mb3JtYXQgb24KKworI2luY2x1ZGUgImVrdC5oIgorCisvLyBjbGFuZy1mb3JtYXQgb2ZmCitzcnRwX2VrdF9wb2xpY3lfY3R4X3QgZWt0X3Rlc3RfcG9saWN5ID0geworICAgIDB4YTVhNSwgICAgICAgICAgICAgICAgICAgICAvKiBTUEkgKi8KKyAgICBTUlRQX0VLVF9DSVBIRVJfQUVTXzEyOF9FQ0IsCisgICAgZWt0X3Rlc3Rfa2V5LAorICAgIE5VTEwKK307CisvLyBjbGFuZy1mb3JtYXQgb24KKworY29uc3Qgc3J0cF9wb2xpY3lfdCBobWFjX29ubHlfd2l0aF9la3RfcG9saWN5ID0geworICAgIHsgc3NyY19hbnlfb3V0Ym91bmQsIDAgfSwgLyogU1NSQyAqLworICAgIHsKKyAgICAgICAgU1JUUF9OVUxMX0NJUEhFUiwgLyogY2lwaGVyIHR5cGUgICAgICAgICAgICAgICAgICovCisgICAgICAgIDAsICAgICAgICAgICAgICAgIC8qIGNpcGhlciBrZXkgbGVuZ3RoIGluIG9jdGV0cyAqLworICAgICAgICBTUlRQX0hNQUNfU0hBMSwgICAvKiBhdXRoZW50aWNhdGlvbiBmdW5jIHR5cGUgICAgKi8KKyAgICAgICAgMjAsICAgICAgICAgICAgICAgLyogYXV0aCBrZXkgbGVuZ3RoIGluIG9jdGV0cyAgICovCisgICAgICAgIDQsICAgICAgICAgICAgICAgIC8qIGF1dGggdGFnIGxlbmd0aCBpbiBvY3RldHMgICAqLworICAgICAgICBzZWNfc2Vydl9hdXRoICAgICAvKiBzZWN1cml0eSBzZXJ2aWNlcyBmbGFnICAgICAgKi8KKyAgICB9LAorICAgIHsKKyAgICAgICAgU1JUUF9OVUxMX0NJUEhFUiwgLyogY2lwaGVyIHR5cGUgICAgICAgICAgICAgICAgICovCisgICAgICAgIDAsICAgICAgICAgICAgICAgIC8qIGNpcGhlciBrZXkgbGVuZ3RoIGluIG9jdGV0cyAqLworICAgICAgICBTUlRQX0hNQUNfU0hBMSwgICAvKiBhdXRoZW50aWNhdGlvbiBmdW5jIHR5cGUgICAgKi8KKyAgICAgICAgMjAsICAgICAgICAgICAgICAgLyogYXV0aCBrZXkgbGVuZ3RoIGluIG9jdGV0cyAgICovCisgICAgICAgIDQsICAgICAgICAgICAgICAgIC8qIGF1dGggdGFnIGxlbmd0aCBpbiBvY3RldHMgICAqLworICAgICAgICBzZWNfc2Vydl9hdXRoICAgICAvKiBzZWN1cml0eSBzZXJ2aWNlcyBmbGFnICAgICAgKi8KKyAgICB9LAorICAgIE5VTEwsCisgICAgKHNydHBfbWFzdGVyX2tleV90ICoqKXRlc3Rfa2V5cywKKyAgICAyLCAgICAgICAgICAgICAgICAvKiBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBNYXN0ZXIga2V5cyAgICAgICAgICAqLworICAgICZla3RfdGVzdF9wb2xpY3ksIC8qIGluZGljYXRlcyB0aGF0IEVLVCBpcyBub3QgaW4gdXNlICAgICAgICAgICAgICovCisgICAgMTI4LCAgICAgICAgICAgICAgLyogcmVwbGF5IHdpbmRvdyBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAvKiByZXRyYW5zbWlzc2lvbiBub3QgYWxsb3dlZCAgICAgICAgICAgICAgICAgICAqLworICAgIE5VTEwsICAgICAgICAgICAgIC8qIG5vIGVuY3J5cHRlZCBleHRlbnNpb24gaGVhZGVycyAgICAgICAgICAgICAgICovCisgICAgMCwgICAgICAgICAgICAgICAgLyogbGlzdCBvZiBlbmNyeXB0ZWQgZXh0ZW5zaW9uIGhlYWRlcnMgaXMgZW1wdHkgKi8KKyAgICBOVUxMCit9OwogCiAvKgogICogYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gdGhlIHBvbGljaWVzIGxpc3RlZCBhYm92ZQpAQCAtMTIxMyw0NSArMzc4Myw1NSBAQAogICogVGhpcyBhcnJheSBpcyB1c2VkIHRvIHRlc3QgdmFyaW91cyBhc3BlY3RzIG9mIGxpYlNSVFAgZm9yCiAgKiBkaWZmZXJlbnQgY3J5cHRvZ3JhcGhpYyBwb2xpY2llcy4gIFRoZSBvcmRlciBvZiB0aGUgZWxlbWVudHMKICAqIG1hdHRlcnMgLSB0aGUgdGltaW5nIHRlc3QgZ2VuZXJhdGVzIG91dHB1dCB0aGF0IGNhbiBiZSB1c2VkCi0gKiBpbiBhIHBsb3QgKHNlZSB0aGUgZ251cGxvdCBzY3JpcHQgZmlsZSAndGltaW5nJykuICBJZiB5b3UgCisgKiBpbiBhIHBsb3QgKHNlZSB0aGUgZ251cGxvdCBzY3JpcHQgZmlsZSAndGltaW5nJykuICBJZiB5b3UKICAqIGFkZCB0byB0aGlzIGxpc3QsIHlvdSBzaG91bGQgZG8gaXQgYXQgdGhlIGVuZC4KICAqLwogCi0jZGVmaW5lIFVTRV9UTU1IIDAKLQotY29uc3Qgc3J0cF9wb2xpY3lfdCAqCi1wb2xpY3lfYXJyYXlbXSA9IHsKLSAgJmhtYWNfb25seV9wb2xpY3ksCi0jaWYgVVNFX1RNTUgKLSAgJnRtbWhfb25seV9wb2xpY3ksCisvLyBjbGFuZy1mb3JtYXQgb2ZmCitjb25zdCBzcnRwX3BvbGljeV90ICpwb2xpY3lfYXJyYXlbXSA9IHsKKyAgICAmaG1hY19vbmx5X3BvbGljeSwKKyAgICAmYWVzX29ubHlfcG9saWN5LAorICAgICZkZWZhdWx0X3BvbGljeSwKKyNpZmRlZiBHQ00KKyAgICAmYWVzMTI4X2djbV84X3BvbGljeSwKKyAgICAmYWVzMTI4X2djbV84X2NhdXRoX3BvbGljeSwKKyAgICAmYWVzMjU2X2djbV84X3BvbGljeSwKKyAgICAmYWVzMjU2X2djbV84X2NhdXRoX3BvbGljeSwKICNlbmRpZgotICAmYWVzX29ubHlfcG9saWN5LAotI2lmIFVTRV9UTU1ICi0gICZhZXNfdG1taF9wb2xpY3ksCi0jZW5kaWYKLSAgJmRlZmF1bHRfcG9saWN5LAotICAmbnVsbF9wb2xpY3ksCi0gIE5VTEwKKyAgICAmbnVsbF9wb2xpY3ksCisgICAgJmFlc18yNTZfaG1hY19wb2xpY3ksCisgICAgJmhtYWNfb25seV93aXRoX2VrdF9wb2xpY3ksCisgICAgTlVMTAogfTsKKy8vIGNsYW5nLWZvcm1hdCBvbgogCiBjb25zdCBzcnRwX3BvbGljeV90IHdpbGRjYXJkX3BvbGljeSA9IHsKLSAgeyBzc3JjX2FueV9vdXRib3VuZCwgMCB9LCAvKiBTU1JDICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgeyAgICAgICAgICAgICAgICAgICAgICAvKiBTUlRQIHBvbGljeSAgICAgICAgICAgICAgICAgICAgKi8gICAgICAgICAgICAgICAgICAKLSAgICBBRVNfMTI4X0lDTSwgICAgICAgICAgICAvKiBjaXBoZXIgdHlwZSAgICAgICAgICAgICAgICAgKi8KLSAgICAzMCwgICAgICAgICAgICAgICAgICAgICAvKiBjaXBoZXIga2V5IGxlbmd0aCBpbiBvY3RldHMgKi8KLSAgICBITUFDX1NIQTEsICAgICAgICAgICAgICAvKiBhdXRoZW50aWNhdGlvbiBmdW5jIHR5cGUgICAgKi8KLSAgICAxNiwgICAgICAgICAgICAgICAgICAgICAvKiBhdXRoIGtleSBsZW5ndGggaW4gb2N0ZXRzICAgKi8KLSAgICAxMCwgICAgICAgICAgICAgICAgICAgICAvKiBhdXRoIHRhZyBsZW5ndGggaW4gb2N0ZXRzICAgKi8KLSAgICBzZWNfc2Vydl9jb25mX2FuZF9hdXRoICAvKiBzZWN1cml0eSBzZXJ2aWNlcyBmbGFnICAgICAgKi8KLSAgfSwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAvKiBTUlRDUCBwb2xpY3kgICAgICAgICAgICAgICAgICAgKi8KLSAgICBBRVNfMTI4X0lDTSwgICAgICAgICAgICAvKiBjaXBoZXIgdHlwZSAgICAgICAgICAgICAgICAgKi8KLSAgICAzMCwgICAgICAgICAgICAgICAgICAgICAvKiBjaXBoZXIga2V5IGxlbmd0aCBpbiBvY3RldHMgKi8KLSAgICBITUFDX1NIQTEsICAgICAgICAgICAgICAvKiBhdXRoZW50aWNhdGlvbiBmdW5jIHR5cGUgICAgKi8KLSAgICAxNiwgICAgICAgICAgICAgICAgICAgICAvKiBhdXRoIGtleSBsZW5ndGggaW4gb2N0ZXRzICAgKi8KLSAgICAxMCwgICAgICAgICAgICAgICAgICAgICAvKiBhdXRoIHRhZyBsZW5ndGggaW4gb2N0ZXRzICAgKi8KLSAgICBzZWNfc2Vydl9jb25mX2FuZF9hdXRoICAvKiBzZWN1cml0eSBzZXJ2aWNlcyBmbGFnICAgICAgKi8KLSAgfSwKLSAgdGVzdF9rZXksCi0gIE5VTEwKKyAgICB7IHNzcmNfYW55X291dGJvdW5kLCAwIH0sIC8qIFNTUkMgKi8KKyAgICB7CisgICAgICAgIC8qIFNSVFAgcG9saWN5ICovCisgICAgICAgIFNSVFBfQUVTX0lDTV8xMjgsICAgICAgICAgICAgICAgLyogY2lwaGVyIHR5cGUgICAgICAgICAgICAgICAgICovCisgICAgICAgIFNSVFBfQUVTX0lDTV8xMjhfS0VZX0xFTl9XU0FMVCwgLyogY2lwaGVyIGtleSBsZW5ndGggaW4gb2N0ZXRzICovCisgICAgICAgIFNSVFBfSE1BQ19TSEExLCAgICAgICAgICAgICAgICAgLyogYXV0aGVudGljYXRpb24gZnVuYyB0eXBlICAgICovCisgICAgICAgIDE2LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYXV0aCBrZXkgbGVuZ3RoIGluIG9jdGV0cyAgICovCisgICAgICAgIDEwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYXV0aCB0YWcgbGVuZ3RoIGluIG9jdGV0cyAgICovCisgICAgICAgIHNlY19zZXJ2X2NvbmZfYW5kX2F1dGggICAgICAgICAgLyogc2VjdXJpdHkgc2VydmljZXMgZmxhZyAgICAgICovCisgICAgfSwKKyAgICB7CisgICAgICAgIC8qIFNSVENQIHBvbGljeSAqLworICAgICAgICBTUlRQX0FFU19JQ01fMTI4LCAgICAgICAgICAgICAgIC8qIGNpcGhlciB0eXBlICAgICAgICAgICAgICAgICAqLworICAgICAgICBTUlRQX0FFU19JQ01fMTI4X0tFWV9MRU5fV1NBTFQsIC8qIGNpcGhlciBrZXkgbGVuZ3RoIGluIG9jdGV0cyAqLworICAgICAgICBTUlRQX0hNQUNfU0hBMSwgICAgICAgICAgICAgICAgIC8qIGF1dGhlbnRpY2F0aW9uIGZ1bmMgdHlwZSAgICAqLworICAgICAgICAxNiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGF1dGgga2V5IGxlbmd0aCBpbiBvY3RldHMgICAqLworICAgICAgICAxMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGF1dGggdGFnIGxlbmd0aCBpbiBvY3RldHMgICAqLworICAgICAgICBzZWNfc2Vydl9jb25mX2FuZF9hdXRoICAgICAgICAgIC8qIHNlY3VyaXR5IHNlcnZpY2VzIGZsYWcgICAgICAqLworICAgIH0sCisgICAgdGVzdF9rZXksCisgICAgTlVMTCwKKyAgICAwLAorICAgIE5VTEwsCisgICAgMTI4LCAgLyogcmVwbGF5IHdpbmRvdyBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAwLCAgICAvKiByZXRyYW5zbWlzc2lvbiBub3QgYWxsb3dlZCAgICAgICAgICAgICAgICAgICAqLworICAgIE5VTEwsIC8qIG5vIGVuY3J5cHRlZCBleHRlbnNpb24gaGVhZGVycyAgICAgICAgICAgICAgICovCisgICAgMCwgICAgLyogbGlzdCBvZiBlbmNyeXB0ZWQgZXh0ZW5zaW9uIGhlYWRlcnMgaXMgZW1wdHkgKi8KKyAgICBOVUxMCiB9OwpkaWZmIC0tZ2l0IGEvdGVzdC9zdGF0X2RyaXZlci5jIGIvdGVzdC9zdGF0X2RyaXZlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWU1NWNlLi4wMDAwMDAwCi0tLSBhL3Rlc3Qvc3RhdF9kcml2ZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKgotICogc3RhdC1kcml2ZXIuYwotICoKLSAqIHRlc3QgZHJpdmVyIGZvciB0aGUgc3RhdF90ZXN0IGZ1bmN0aW9ucwotICoKLSAqIERhdmlkIEEuIE1jR3JldwotICogQ2lzY28gU3lzdGVtcywgSW5jLgotICovCi0KLQotI2luY2x1ZGUgPHN0ZGlvLmg+ICAgICAgICAgLyogZm9yIHByaW50ZigpICovCi0KLSNpbmNsdWRlICJlcnIuaCIKLSNpbmNsdWRlICJzdGF0LmgiCi0KLSNpbmNsdWRlICJjaXBoZXIuaCIKLQotdHlwZWRlZiBzdHJ1Y3QgewotICB2b2lkICpzdGF0ZTsKLX0gcmFuZG9tX3NvdXJjZV90OwotCi1lcnJfc3RhdHVzX3QKLXJhbmRvbV9zb3VyY2VfYWxsb2MoKTsKLQotdm9pZAotZXJyX2NoZWNrKGVycl9zdGF0dXNfdCBzKSB7Ci0gIGlmIChzKSB7Ci0gICAgcHJpbnRmKCJlcnJvciAoY29kZSAlZClcbiIsIHMpOwotICAgIGV4aXQoMSk7Ci0gIH0KLX0KLQotaW50Ci1tYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7Ci0gIG9jdGV0X3QgYnVmZmVyWzI1MDBdOwotICB1bnNpZ25lZCBpbnQgYnVmX2xlbiA9IDI1MDA7Ci0gIGludCBpLCBqOwotICBleHRlcm4gY2lwaGVyX3R5cGVfdCBhZXNfaWNtOwotICBjaXBoZXJfdCAqYzsKLSAgb2N0ZXRfdCBrZXlbMzBdID0gewotICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIAotICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIAotICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIAotICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUKLSAgICB9OwotICB2MTI4X3Qgbm9uY2U7Ci0gIGludCBudW1fdHJpYWxzID0gMTAwMDA7Ci0gIGludCBudW1fZmFpbDsKLQotICBwcmludGYoInN0YXRpc3RpY2FsIHRlc3RzIGRyaXZlclxuIik7Ci0KLSAgZm9yIChpPTA7IGkgPCAyNTAwOyBpKyspCi0gICAgYnVmZmVyW2ldID0gMDsKLQotICAvKiBydW4gdGVzdHMgKi8KLSAgcHJpbnRmKCJydW5uaW5nIHN0YXRfdGVzdHMgb24gYWxsLW51bGwgYnVmZmVyLCBleHBlY3RpbmcgZmFpbHVyZVxuIik7Ci0gIHByaW50ZigibW9ub2JpdCAlZFxuIiwgc3RhdF90ZXN0X21vbm9iaXQoYnVmZmVyKSk7Ci0gIHByaW50ZigicG9rZXIgICAlZFxuIiwgc3RhdF90ZXN0X3Bva2VyKGJ1ZmZlcikpOwotICBwcmludGYoInJ1bnMgICAgJWRcbiIsIHN0YXRfdGVzdF9ydW5zKGJ1ZmZlcikpOwotCi0gIGZvciAoaT0wOyBpIDwgMjUwMDsgaSsrKQotICAgIGJ1ZmZlcltpXSA9IHJhbmRvbSgpOwotICBwcmludGYoInJ1bm5pbmcgc3RhdF90ZXN0cyBvbiByYW5kb20oKSwgZXhwZWN0aW5nIHN1Y2Nlc3NcbiIpOwotICBwcmludGYoIm1vbm9iaXQgJWRcbiIsIHN0YXRfdGVzdF9tb25vYml0KGJ1ZmZlcikpOwotICBwcmludGYoInBva2VyICAgJWRcbiIsIHN0YXRfdGVzdF9wb2tlcihidWZmZXIpKTsKLSAgcHJpbnRmKCJydW5zICAgICVkXG4iLCBzdGF0X3Rlc3RfcnVucyhidWZmZXIpKTsKLQotICBwcmludGYoInJ1bm5pbmcgc3RhdF90ZXN0cyBvbiBBRVMtMTI4LUlDTSwgZXhwZWN0aW5nIHN1Y2Nlc3NcbiIpOwotICAvKiBzZXQgYnVmZmVyIHRvIGNpcGhlciBvdXRwdXQgKi8KLSAgZm9yIChpPTA7IGkgPCAyNTAwOyBpKyspCi0gICAgYnVmZmVyW2ldID0gMDsKLSAgZXJyX2NoZWNrKGNpcGhlcl90eXBlX2FsbG9jKCZhZXNfaWNtLCAmYywgMzApKTsKLSAgZXJyX2NoZWNrKGNpcGhlcl9pbml0KGMsIGtleSwgZGlyZWN0aW9uX2FueSkpOwotICBlcnJfY2hlY2soY2lwaGVyX3NldF9pdihjLCAmbm9uY2UpKTsKLSAgZXJyX2NoZWNrKGNpcGhlcl9lbmNyeXB0KGMsIGJ1ZmZlciwgJmJ1Zl9sZW4pKTsKLSAgLyogcnVuIHRlc3RzIG9uIGNpcGhlciBvdXRvdXQgKi8KLSAgcHJpbnRmKCJtb25vYml0ICVkXG4iLCBzdGF0X3Rlc3RfbW9ub2JpdChidWZmZXIpKTsKLSAgcHJpbnRmKCJwb2tlciAgICVkXG4iLCBzdGF0X3Rlc3RfcG9rZXIoYnVmZmVyKSk7Ci0gIHByaW50ZigicnVucyAgICAlZFxuIiwgc3RhdF90ZXN0X3J1bnMoYnVmZmVyKSk7Ci0KLSAgcHJpbnRmKCJydW5zIHRlc3QgKHBsZWFzZSBiZSBwYXRpZW50KTogIik7Ci0gIGZmbHVzaChzdGRvdXQpOwotICBudW1fZmFpbCA9IDA7Ci0gIHYxMjhfc2V0X3RvX3plcm8oJm5vbmNlKTsKLSAgZm9yKGo9MDsgaiA8IG51bV90cmlhbHM7IGorKykgewotICAgIGZvciAoaT0wOyBpIDwgMjUwMDsgaSsrKQotICAgICAgYnVmZmVyW2ldID0gMDsKLSAgICBub25jZS52MzJbM10gPSBpOwotICAgIGVycl9jaGVjayhjaXBoZXJfc2V0X2l2KGMsICZub25jZSkpOwotICAgIGVycl9jaGVjayhjaXBoZXJfZW5jcnlwdChjLCBidWZmZXIsICZidWZfbGVuKSk7Ci0gICAgaWYgKHN0YXRfdGVzdF9ydW5zKGJ1ZmZlcikpIHsKLSAgICAgIG51bV9mYWlsKys7Ci0gICAgfQotICB9Ci0KLSAgcHJpbnRmKCIlZCBmYWlsdXJlcyBpbiAlZCB0ZXN0c1xuIiwgbnVtX2ZhaWwsIG51bV90cmlhbHMpOwotICBwcmludGYoIihub3RhIGJlbmU6IGEgc21hbGwgZnJhY3Rpb24gb2Ygc3RhdF90ZXN0IGZhaWx1cmVzIGRvZXMgbm90IFxuIgotCSAiaW5kaWNhdGUgdGhhdCB0aGUgcmFuZG9tIHNvdXJjZSBpcyBpbnZhbGlkKVxuIik7Ci0KLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS90ZXN0L3Rlc3Rfc3J0cC5jIGIvdGVzdC90ZXN0X3NydHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2VhMWYzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC90ZXN0X3NydHAuYwpAQCAtMCwwICsxLDE4NSBAQAorLyoKKyAqIHRlc3Rfc3J0cC5jCisgKgorICogVW5pdCB0ZXN0cyBmb3IgaW50ZXJuYWwgc3J0cCBmdW5jdGlvbnMKKyAqCisgKiBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICovCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE3LCBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKy8qCisgKiBsaWJTUlRQIHNwZWNpZmljLgorICovCisjaW5jbHVkZSAiLi4vc3J0cC9zcnRwLmMiIC8vIEdldCBhY2Nlc3MgdG8gc3RhdGljIGZ1bmN0aW9ucworCisvKgorICogVGVzdCBzcGVjaWZpYy4KKyAqLworI2luY2x1ZGUgImN1dGVzdC5oIgorCisvKgorICogU3RhbmRhcmQgbGlicmFyeS4KKyAqLworCisvKgorICogRm9yd2FyZCBkZWNsYXJhdGlvbnMgZm9yIGFsbCB0ZXN0cy4KKyAqLworCit2b2lkIHNydHBfY2FsY19hZWFkX2l2X3NydGNwX2FsbF96ZXJvX2lucHV0X3lpZWxkX3plcm9fb3V0cHV0KHZvaWQpOwordm9pZCBzcnRwX2NhbGNfYWVhZF9pdl9zcnRjcF9zZXFfbnVtX292ZXJfMHg3RkZGRkZGRl9iYWRfcGFyYW0odm9pZCk7Cit2b2lkIHNydHBfY2FsY19hZWFkX2l2X3NydGNwX2Rpc3RpbmN0X2l2X3Blcl9zZXF1ZW5jZV9udW1iZXIodm9pZCk7CisKKy8qCisgKiBOVUxMIHRlcm1pbmF0ZWQgYXJyYXkgb2YgdGVzdHMuCisgKiBUaGUgZmlyc3QgaXRlbSBpbiB0aGUgYXJyYXkgaXMgYSBjaGFyW10gd2hpY2ggZ2l2ZSBzb21lIGluZm9ybWF0aW9uIGFib3V0CisgKiB3aGF0IGlzIGJlaW5nIHRlc3RlZCBhbmQgaXMgZGlzcGxheWVkIHRvIHRoZSB1c2VyIGR1cmluZyBydW50aW1lLCB0aGUgc2Vjb25kCisgKiBpdGVtIGlzIHRoZSB0ZXN0IGZ1bmN0aW9uLgorICovCisKK1RFU1RfTElTVCA9IHsgeyAic3J0cF9jYWxjX2FlYWRfaXZfc3J0Y3BfYWxsX3plcm9faW5wdXRfeWllbGRfemVyb19vdXRwdXQoKSIsCisgICAgICAgICAgICAgICAgc3J0cF9jYWxjX2FlYWRfaXZfc3J0Y3BfYWxsX3plcm9faW5wdXRfeWllbGRfemVyb19vdXRwdXQgfSwKKyAgICAgICAgICAgICAgeyAic3J0cF9jYWxjX2FlYWRfaXZfc3J0Y3Bfc2VxX251bV9vdmVyXzB4N0ZGRkZGRkZfYmFkX3BhcmFtKCkiLAorICAgICAgICAgICAgICAgIHNydHBfY2FsY19hZWFkX2l2X3NydGNwX3NlcV9udW1fb3Zlcl8weDdGRkZGRkZGX2JhZF9wYXJhbSB9LAorICAgICAgICAgICAgICB7ICJzcnRwX2NhbGNfYWVhZF9pdl9zcnRjcF9kaXN0aW5jdF9pdl9wZXJfc2VxdWVuY2VfbnVtYmVyKCkiLAorICAgICAgICAgICAgICAgIHNydHBfY2FsY19hZWFkX2l2X3NydGNwX2Rpc3RpbmN0X2l2X3Blcl9zZXF1ZW5jZV9udW1iZXIgfSwKKyAgICAgICAgICAgICAgeyBOVUxMIH0gLyogRW5kIG9mIHRlc3RzICovIH07CisKKy8qCisgKiBJbXBsZW1lbnRhdGlvbi4KKyAqLworCit2b2lkIHNydHBfY2FsY19hZWFkX2l2X3NydGNwX2FsbF96ZXJvX2lucHV0X3lpZWxkX3plcm9fb3V0cHV0KCkKK3sKKyAgICAvLyBQcmVjb25kaXRpb25zCisgICAgc3J0cF9zZXNzaW9uX2tleXNfdCBzZXNzaW9uX2tleXM7CisgICAgdjEyOF90IGluaXRfdmVjdG9yOworICAgIHNydGNwX2hkcl90IGhlYWRlcjsKKyAgICB1aW50MzJfdCBzZXF1ZW5jZV9udW07CisKKyAgICAvLyBQb3N0Y29uZGl0aW9ucworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKKyAgICBjb25zdCB2MTI4X3QgemVyb192ZWN0b3I7CisgICAgbWVtc2V0KCh2MTI4X3QgKikmemVyb192ZWN0b3IsIDAsIHNpemVvZih2MTI4X3QpKTsKKworICAgIC8vIEdpdmVuCisgICAgbWVtc2V0KCZzZXNzaW9uX2tleXMsIDAsIHNpemVvZihzcnRwX3Nlc3Npb25fa2V5c190KSk7CisgICAgbWVtc2V0KCZpbml0X3ZlY3RvciwgMCwgc2l6ZW9mKHYxMjhfdCkpOworICAgIG1lbXNldCgmaGVhZGVyLCAwLCBzaXplb2Yoc3J0Y3BfaGRyX3QpKTsKKyAgICBzZXF1ZW5jZV9udW0gPSAweDBVTDsKKworICAgIC8vIFdoZW4KKyAgICBzdGF0dXMgPSBzcnRwX2NhbGNfYWVhZF9pdl9zcnRjcCgmc2Vzc2lvbl9rZXlzLCAmaW5pdF92ZWN0b3IsIHNlcXVlbmNlX251bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGVhZGVyKTsKKworICAgIC8vIFRoZW4KKyAgICBURVNUX0NIRUNLKHN0YXR1cyA9PSBzcnRwX2Vycl9zdGF0dXNfb2spOworICAgIFRFU1RfQ0hFQ0sobWVtY21wKCZ6ZXJvX3ZlY3RvciwgJmluaXRfdmVjdG9yLCBzaXplb2YodjEyOF90KSkgPT0gMCk7Cit9CisKK3ZvaWQgc3J0cF9jYWxjX2FlYWRfaXZfc3J0Y3Bfc2VxX251bV9vdmVyXzB4N0ZGRkZGRkZfYmFkX3BhcmFtKCkKK3sKKyAgICAvLyBQcmVjb25kaXRpb25zCisgICAgc3J0cF9zZXNzaW9uX2tleXNfdCBzZXNzaW9uX2tleXM7CisgICAgdjEyOF90IGluaXRfdmVjdG9yOworICAgIHNydGNwX2hkcl90IGhlYWRlcjsKKyAgICB1aW50MzJfdCBzZXF1ZW5jZV9udW07CisKKyAgICAvLyBQb3N0Y29uZGl0aW9ucworICAgIHNydHBfZXJyX3N0YXR1c190IHN0YXR1czsKKworICAgIC8vIEdpdmVuCisgICAgbWVtc2V0KCZzZXNzaW9uX2tleXMsIDAsIHNpemVvZihzcnRwX3Nlc3Npb25fa2V5c190KSk7CisgICAgbWVtc2V0KCZpbml0X3ZlY3RvciwgMCwgc2l6ZW9mKHYxMjhfdCkpOworICAgIG1lbXNldCgmaGVhZGVyLCAwLCBzaXplb2Yoc3J0Y3BfaGRyX3QpKTsKKyAgICBzZXF1ZW5jZV9udW0gPSAweDdGRkZGRkZGVUwgKyAweDFVTDsKKworICAgIC8vIFdoZW4KKyAgICBzdGF0dXMgPSBzcnRwX2NhbGNfYWVhZF9pdl9zcnRjcCgmc2Vzc2lvbl9rZXlzLCAmaW5pdF92ZWN0b3IsIHNlcXVlbmNlX251bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGVhZGVyKTsKKworICAgIC8vIFRoZW4KKyAgICBURVNUX0NIRUNLKHN0YXR1cyA9PSBzcnRwX2Vycl9zdGF0dXNfYmFkX3BhcmFtKTsKK30KKworLyoKKyAqIFJlZ3Jlc3Npb24gdGVzdCBmb3IgaXNzdWUgIzI1NjoKKyAqIFNydGNwIElWIGNhbGN1bGF0aW9uIGluY29ycmVjdGx5IG1hc2tzIGhpZ2ggYml0IG9mIHNlcXVlbmNlIG51bWJlciBmb3IKKyAqIGxpdHRsZS1lbmRpYW4gcGxhdGZvcm1zLgorICogRW5zdXJlIHRoYXQgZm9yIGVhY2ggdmFsaWQgc2VxdWVuY2UgbnVtYmVyIHdoZXJlIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBpcworICogaGlnaCB0aGF0IHdlIGdldCBhbiBleHBlY3RlZCBhbmQgdW5pcXVlIElWLgorICovCit2b2lkIHNydHBfY2FsY19hZWFkX2l2X3NydGNwX2Rpc3RpbmN0X2l2X3Blcl9zZXF1ZW5jZV9udW1iZXIoKQoreworI2RlZmluZSBTQU1QTEVfQ09VTlQgKDMpCisgICAgLy8gUHJlY29uZGl0aW9ucworICAgIC8vIFRlc3QgZWFjaCBzaWduaWZpY2FudCBiaXQgaGlnaCBpbiBlYWNoIGZ1bGwgYnl0ZS4KKyAgICBzcnRwX3Nlc3Npb25fa2V5c190IHNlc3Npb25fa2V5czsKKyAgICBzcnRjcF9oZHJfdCBoZWFkZXI7CisgICAgdjEyOF90IG91dHB1dF9pdltTQU1QTEVfQ09VTlRdOworICAgIHVpbnQzMl90IHNlcXVlbmNlX251bVtTQU1QTEVfQ09VTlRdOworICAgIHYxMjhfdCBmaW5hbF9pdltTQU1QTEVfQ09VTlRdOworICAgIHNpemVfdCBpID0gMDsKKyAgICBtZW1zZXQoJm91dHB1dF9pdiwgMCwgU0FNUExFX0NPVU5UICogc2l6ZW9mKHYxMjhfdCkpOworICAgIHNlcXVlbmNlX251bVswXSA9IDB4RkY7CisgICAgc2VxdWVuY2VfbnVtWzFdID0gMHhGRjAwOworICAgIHNlcXVlbmNlX251bVsyXSA9IDB4RkYwMDAwOworCisgICAgLy8gUG9zdGNvbmRpdGlvbnMKKyAgICBtZW1zZXQoJmZpbmFsX2l2LCAwLCBTQU1QTEVfQ09VTlQgKiBzaXplb2YodjEyOF90KSk7CisgICAgZmluYWxfaXZbMF0udjhbMTFdID0gMHhGRjsKKyAgICBmaW5hbF9pdlsxXS52OFsxMF0gPSAweEZGOworICAgIGZpbmFsX2l2WzJdLnY4WzldID0gMHhGRjsKKworICAgIC8vIEdpdmVuCisgICAgbWVtc2V0KCZzZXNzaW9uX2tleXMsIDAsIHNpemVvZihzcnRwX3Nlc3Npb25fa2V5c190KSk7CisgICAgbWVtc2V0KCZoZWFkZXIsIDAsIHNpemVvZihzcnRjcF9oZHJfdCkpOworCisgICAgLy8gV2hlbgorICAgIGZvciAoaSA9IDA7IGkgPCBTQU1QTEVfQ09VTlQ7IGkrKykgeworICAgICAgICBURVNUX0NIRUNLKHNydHBfY2FsY19hZWFkX2l2X3NydGNwKCZzZXNzaW9uX2tleXMsICZvdXRwdXRfaXZbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VxdWVuY2VfbnVtW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoZWFkZXIpID09IHNydHBfZXJyX3N0YXR1c19vayk7CisgICAgfQorCisgICAgLy8gVGhlbiBhbGwgSVZzIGFyZSBhcyBleHBlY3RlZAorICAgIGZvciAoaSA9IDA7IGkgPCBTQU1QTEVfQ09VTlQ7IGkrKykgeworICAgICAgICBURVNUX0NIRUNLKG1lbWNtcCgmZmluYWxfaXZbaV0sICZvdXRwdXRfaXZbaV0sIHNpemVvZih2MTI4X3QpKSA9PSAwKTsKKyAgICB9CisjdW5kZWYgU0FNUExFX0NPVU5UCit9CmRpZmYgLS1naXQgYS90ZXN0L3V0aWwuYyBiL3Rlc3QvdXRpbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYmMyOGUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3V0aWwuYwpAQCAtMCwwICsxLDIxMiBAQAorLyoKKyAqIHV0aWwuYworICoKKyAqIFV0aWxpdGllcyB1c2VkIGJ5IHRoZSB0ZXN0IGFwcHMKKyAqCisgKiBKb2huIEEuIEZvbGV5CisgKiBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKi8KKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTcsIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInV0aWwuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisvKiBpbmNsdWRlIHNwYWNlIGZvciBudWxsIHRlcm1pbmF0b3IgKi8KK2NoYXIgYml0X3N0cmluZ1tNQVhfUFJJTlRfU1RSSU5HX0xFTiArIDFdOworCitzdGF0aWMgaW5saW5lIGludCBoZXhfY2hhcl90b19uaWJibGUodWludDhfdCBjKQoreworICAgIHN3aXRjaCAoYykgeworICAgIGNhc2UgKCcwJyk6CisgICAgICAgIHJldHVybiAweDA7CisgICAgY2FzZSAoJzEnKToKKyAgICAgICAgcmV0dXJuIDB4MTsKKyAgICBjYXNlICgnMicpOgorICAgICAgICByZXR1cm4gMHgyOworICAgIGNhc2UgKCczJyk6CisgICAgICAgIHJldHVybiAweDM7CisgICAgY2FzZSAoJzQnKToKKyAgICAgICAgcmV0dXJuIDB4NDsKKyAgICBjYXNlICgnNScpOgorICAgICAgICByZXR1cm4gMHg1OworICAgIGNhc2UgKCc2Jyk6CisgICAgICAgIHJldHVybiAweDY7CisgICAgY2FzZSAoJzcnKToKKyAgICAgICAgcmV0dXJuIDB4NzsKKyAgICBjYXNlICgnOCcpOgorICAgICAgICByZXR1cm4gMHg4OworICAgIGNhc2UgKCc5Jyk6CisgICAgICAgIHJldHVybiAweDk7CisgICAgY2FzZSAoJ2EnKToKKyAgICAgICAgcmV0dXJuIDB4YTsKKyAgICBjYXNlICgnQScpOgorICAgICAgICByZXR1cm4gMHhhOworICAgIGNhc2UgKCdiJyk6CisgICAgICAgIHJldHVybiAweGI7CisgICAgY2FzZSAoJ0InKToKKyAgICAgICAgcmV0dXJuIDB4YjsKKyAgICBjYXNlICgnYycpOgorICAgICAgICByZXR1cm4gMHhjOworICAgIGNhc2UgKCdDJyk6CisgICAgICAgIHJldHVybiAweGM7CisgICAgY2FzZSAoJ2QnKToKKyAgICAgICAgcmV0dXJuIDB4ZDsKKyAgICBjYXNlICgnRCcpOgorICAgICAgICByZXR1cm4gMHhkOworICAgIGNhc2UgKCdlJyk6CisgICAgICAgIHJldHVybiAweGU7CisgICAgY2FzZSAoJ0UnKToKKyAgICAgICAgcmV0dXJuIDB4ZTsKKyAgICBjYXNlICgnZicpOgorICAgICAgICByZXR1cm4gMHhmOworICAgIGNhc2UgKCdGJyk6CisgICAgICAgIHJldHVybiAweGY7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIC0xOyAvKiB0aGlzIGZsYWdzIGFuIGVycm9yICovCisgICAgfQorICAgIC8qIE5PVFJFQUNIRUQgKi8KKyAgICByZXR1cm4gLTE7IC8qIHRoaXMga2VlcHMgY29tcGlsZXJzIGZyb20gY29tcGxhaW5pbmcgKi8KK30KKwordWludDhfdCBuaWJibGVfdG9faGV4X2NoYXIodWludDhfdCBuaWJibGUpCit7CisgICAgY2hhciBidWZbMTZdID0geyAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywKKyAgICAgICAgICAgICAgICAgICAgICc4JywgJzknLCAnYScsICdiJywgJ2MnLCAnZCcsICdlJywgJ2YnIH07CisKKyAgICByZXR1cm4gYnVmW25pYmJsZSAmIDB4Rl07Cit9CisKKy8qCisgKiBoZXhfc3RyaW5nX3RvX29jdGV0X3N0cmluZyBjb252ZXJ0cyBhIGhleGFkZWNpbWFsIHN0cmluZworICogb2YgbGVuZ3RoIDIgKiBsZW4gdG8gYSByYXcgb2N0ZXQgc3RyaW5nIG9mIGxlbmd0aCBsZW4KKyAqLworaW50IGhleF9zdHJpbmdfdG9fb2N0ZXRfc3RyaW5nKGNoYXIgKnJhdywgY2hhciAqaGV4LCBpbnQgbGVuKQoreworICAgIHVpbnQ4X3QgeDsKKyAgICBpbnQgdG1wOworICAgIGludCBoZXhfbGVuOworCisgICAgaGV4X2xlbiA9IDA7CisgICAgd2hpbGUgKGhleF9sZW4gPCBsZW4pIHsKKyAgICAgICAgdG1wID0gaGV4X2NoYXJfdG9fbmliYmxlKGhleFswXSk7CisgICAgICAgIGlmICh0bXAgPT0gLTEpIHsKKyAgICAgICAgICAgIHJldHVybiBoZXhfbGVuOworICAgICAgICB9CisgICAgICAgIHggPSAodG1wIDw8IDQpOworICAgICAgICBoZXhfbGVuKys7CisgICAgICAgIHRtcCA9IGhleF9jaGFyX3RvX25pYmJsZShoZXhbMV0pOworICAgICAgICBpZiAodG1wID09IC0xKSB7CisgICAgICAgICAgICByZXR1cm4gaGV4X2xlbjsKKyAgICAgICAgfQorICAgICAgICB4IHw9ICh0bXAgJiAweGZmKTsKKyAgICAgICAgaGV4X2xlbisrOworICAgICAgICAqcmF3KysgPSB4OworICAgICAgICBoZXggKz0gMjsKKyAgICB9CisgICAgcmV0dXJuIGhleF9sZW47Cit9CisKK2NoYXIgKm9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKGNvbnN0IHZvaWQgKnMsIGludCBsZW5ndGgpCit7CisgICAgY29uc3QgdWludDhfdCAqc3RyID0gKGNvbnN0IHVpbnQ4X3QgKilzOworICAgIGludCBpOworCisgICAgLyogZG91YmxlIGxlbmd0aCwgc2luY2Ugb25lIG9jdGV0IHRha2VzIHR3byBoZXggY2hhcmFjdGVycyAqLworICAgIGxlbmd0aCAqPSAyOworCisgICAgLyogdHJ1bmNhdGUgc3RyaW5nIGlmIGl0IHdvdWxkIGJlIHRvbyBsb25nICovCisgICAgaWYgKGxlbmd0aCA+IE1BWF9QUklOVF9TVFJJTkdfTEVOKSB7CisgICAgICAgIGxlbmd0aCA9IE1BWF9QUklOVF9TVFJJTkdfTEVOOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMikgeworICAgICAgICBiaXRfc3RyaW5nW2ldID0gbmliYmxlX3RvX2hleF9jaGFyKCpzdHIgPj4gNCk7CisgICAgICAgIGJpdF9zdHJpbmdbaSArIDFdID0gbmliYmxlX3RvX2hleF9jaGFyKCpzdHIrKyAmIDB4Rik7CisgICAgfQorICAgIGJpdF9zdHJpbmdbaV0gPSAwOyAvKiBudWxsIHRlcm1pbmF0ZSBzdHJpbmcgKi8KKyAgICByZXR1cm4gYml0X3N0cmluZzsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgYjY0Y2hhcnNbXSA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iOworCitzdGF0aWMgaW50IGJhc2U2NF9ibG9ja190b19vY3RldF90cmlwbGUoY2hhciAqb3V0LCBjaGFyICppbikKK3sKKyAgICB1bnNpZ25lZCBjaGFyIHNleHRldHNbNF0gPSB7IDAgfTsKKyAgICBpbnQgaiA9IDA7CisgICAgaW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAgICAgIGNoYXIgKnAgPSBzdHJjaHIoYjY0Y2hhcnMsIGluW2ldKTsKKyAgICAgICAgaWYgKHAgIT0gTlVMTCkgeworICAgICAgICAgICAgc2V4dGV0c1tpXSA9IHAgLSBiNjRjaGFyczsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGorKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIG91dFswXSA9IChzZXh0ZXRzWzBdIDw8IDIpIHwgKHNleHRldHNbMV0gPj4gNCk7CisgICAgaWYgKGogPCAyKSB7CisgICAgICAgIG91dFsxXSA9IChzZXh0ZXRzWzFdIDw8IDQpIHwgKHNleHRldHNbMl0gPj4gMik7CisgICAgfQorICAgIGlmIChqIDwgMSkgeworICAgICAgICBvdXRbMl0gPSAoc2V4dGV0c1syXSA8PCA2KSB8IHNleHRldHNbM107CisgICAgfQorICAgIHJldHVybiBqOworfQorCitpbnQgYmFzZTY0X3N0cmluZ190b19vY3RldF9zdHJpbmcoY2hhciAqb3V0LCBpbnQgKnBhZCwgY2hhciAqaW4sIGludCBsZW4pCit7CisgICAgaW50IGsgPSAwOworICAgIGludCBpID0gMDsKKyAgICBpbnQgaiA9IDA7CisKKyAgICBpZiAobGVuICUgNCAhPSAwKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHdoaWxlIChpIDwgbGVuICYmIGogPT0gMCkgeworICAgICAgICBqID0gYmFzZTY0X2Jsb2NrX3RvX29jdGV0X3RyaXBsZShvdXQgKyBrLCBpbiArIGkpOworICAgICAgICBrICs9IDM7CisgICAgICAgIGkgKz0gNDsKKyAgICB9CisgICAgKnBhZCA9IGo7CisgICAgcmV0dXJuIGk7Cit9CmRpZmYgLS1naXQgYS90ZXN0L3V0aWwuaCBiL3Rlc3QvdXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNGIyNzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3V0aWwuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogdXRpbC5oCisgKgorICogVXRpbGl0aWVzIHVzZWQgYnkgdGhlIHRlc3QgYXBwcworICoKKyAqIEpvaG4gQS4gRm9sZXkKKyAqIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqLworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNywgQ2lzY28gU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworI2lmbmRlZiBTUlRQX1RFU1RfVVRJTF9ICisjZGVmaW5lIFNSVFBfVEVTVF9VVElMX0gKKworI2RlZmluZSBNQVhfUFJJTlRfU1RSSU5HX0xFTiAxMDI0CisKK2ludCBoZXhfc3RyaW5nX3RvX29jdGV0X3N0cmluZyhjaGFyICpyYXcsIGNoYXIgKmhleCwgaW50IGxlbik7CitjaGFyICpvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhjb25zdCB2b2lkICpzLCBpbnQgbGVuZ3RoKTsKK2ludCBiYXNlNjRfc3RyaW5nX3RvX29jdGV0X3N0cmluZyhjaGFyICpyYXcsIGludCAqcGFkLCBjaGFyICpiYXNlNjQsIGludCBsZW4pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3Qvd29yZHMudHh0IGIvdGVzdC93b3Jkcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU5OWMyZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3Qvd29yZHMudHh0CkBAIC0wLDAgKzEsMjUwIEBACithYmR1Y2luZworYWNpZGhlYWRzCithY2lkbmVzcworYWN0b25zCithZG1peHR1cmVzCithZmZpZGF2aXQKK2FnZWxhc3RpYworYWxhdGVkCithbGltZW50YXJ5CithbGxldmlhdGVkCithbGxzZWVkCithbm5leHVyZQorYXJyYWdvbml0ZQorYXRvbmVtZW50cworYXV0YWNvaWQKK2F4ZQorYXhvbgorYXlyZXMKK2JlYXRoaW5nCitibGF6b25yeQorYm90dG9tCiticmFpc2luZworYnJlaG9uCiticmluZGlzaQorYnJvYWRjYXN0cworYnVkcworYnVsbmJ1bG5zCitidXNoY3JhZnQKK2NhbGFtYW5kZXIKK2NhbGlwZWUKK2Nhc2luZworY2F2ZWF0CitjaGFmZmluZ3MKK2NpdGlmaWVzCitjbGFwcGVycworY2xhcXVlcworY2xhdmF0ZQorY29sb25pYWwKK2NvbG9uaWFscworY29tbW9uYWx0eQorY29tcGFyZXMKK2NvbnNlcXVlbnQKK2NvbnN1bWVkCitjb250YW5nbworY291cnRpZXJseQorY3JlYW1lcnkKK2NydWRkaWVzdAorY3VlCitjdWx0aXNoCitjdW1pbgorY3ljbHVzCitkYWhsaWFzCitkZW50aXRpb25zCitkZXJhaWxlcnMKK2Rldml0cmlmeQorZGlicworZGlwaHlzaXRlCitkaXNqdW5lcworZHJvbGxlcmllcworZHViaXRhdGVkCitkdXBpb24KK2VhcmxpbmVzcworZWR1Y3RvcgorZWxlbmN0aWMKK2VtcHJlc3NlcworZW50YW1lcworZXBhdWxldHRlcworZXBpY2FudGhpYworZXBvY2hhbAorZXN0YXRlZAorZXVyaHl0aG1pYworZXhmb2xpYXRlZAorZXh0cmVtaXR5CitmYXllbmNlCitmaWdnZXJ5CitmbGFtaW5nCitmb2VzCitmb3JlbGF5cworZm9yZXdpbmdzCitmb3JmZWl0cworZnJhdGNoZXMKK2dhcmRlbmVkCitnZW50aWxlCitnbHVtcGlzaAorZ2x5cGgKK2dvYXRoZXJkCitncm93CitndWxkZW4KK2d1bW1pbmcKK2hhY2tsaW5nCitoYW5hcGVycworaGFyZWQKK2hhdHRlcnMKK2hlY3RhcmUKK2hlZGdlcgoraGVlbAoraGV0ZXJvZG94CitoaWRkZW4KK2hpc3RvbG9naWMKK2hvd2UKK2luZ2xvYmUKK2lubGllcnMKK2ludXJlZG5lc3MKK2lvdGFjaXNtCitqYXBlZAoramVsbGVkCitqaWZmeQoram9sbGllcworanVkZ2VzaGlwCitrYXJpdGUKK2thcnQKK2tlbm9waG9iaWEKK2tpdHRlbnMKK2xhY3RhcmlhbgorbGFuY2V0cworbGVhc2FibGUKK2xlZXAKK2xlbWluZworbGljb3JpY2UKK2xpc3RpbmcKK2xpdmlkbHkKK2xvYmVjdG9teQorbHlzb3NvbWUKK21hZGRlcnMKK21hZGVyaXppbmcKK21hbmFjbGUKK21hbmdlbHMKK21hcnNoaWVzdAorbWF1bHN0aWNrCittZWxpb3JhdGVzCittZXJjeQorbWlrYWRvcworbW9uYXJjaGlzZQorbW91bHRpbmdzCittdWNybworbXVubmlvbnMKK215c3RpYworbXl4b2VkZW1pYworbm9pbnRpbmcKK25vbmcKK25vbnNlbnNlCitvY2hpZG9yZQorb2N0dW9yCitvZmZpY2VyaW5nCitvcGFxdWVkCitvcmFnaW91cworb3V0dGVsbAorb3hleWUKK3BhZHMKK3BhbGFtYWUKK3BhbnNvcGh5CitwYXJhem9hCitwZXBzaW5lcworcGVyaW1ldHJpYworcGhlYXNhbnQKK3Bob25vdHlweQorcGl0YXJhaAorcGxhaW50ZnVsCitwb2luZGVycworcG9rZQorcG9saXRlcgorcG9vbmNlcworcG9wdWxpc20KK3BvdXR5CitwcmFlZGlhbAorcHJlc2VuY2UKK3Byb21wdGVyCitwdW1tZWxsZWQKK3B1bmlzaGluZworcXVpcHBpc2gKK3JhZGljYWxpdHkKK3JhZGl1c2VzCityZWJ1ZmZpbmcKK3JlY29yZGVkCityZWRpcHMKK3JlZ3VsYXRvcnMKK3JlcGxheQorcmV0cm9jZWRlcworcmlnb3JzCityaXNlbgorcm9vdHN0b2Nrcworcm90ZW5vbmUKK3J1ZGVuZXNzZXMKK3J1Z2dlZGVzdAorcnVuYWJvdXQKK3J1dGhmdWxseQorc2FnYWNpb3VzCitzY2FwZXMKK3NjbGVyYQorc2NsZXJvdGl1bQorc2N1bWJlcmluZworc2Vjb25kaQorc2VyaWFsCitzaGFtcG9vCitzaG93ZWQKK3NpZ2h0cworc2lyZW5pc2VkCitzaXplZAorc2xhdmUKK3NvY2xlCitzb2xpZG5lc3MKK3NvbWUKK3NwZXRjaGVzCitzcGllbHMKK3NxdWlyaW5nCitzdGFtaW5vZGUKK3N0YXkKK3N0ZXdwb3QKK3N0dW5zYWlscworc3ViaHVtaWQKK3N1YnByb2dyYW0KK3N1cGF3bgorc3VycGx1c2FnZQorc3dpbW1pbmcKK3N3aW5laGVyZAordGFidW4KK3RhbGxpdGhzCit0YXJva3MKK3RlbnNlZAordGhpbm5pbmdzCit0aHJlZQordGlwcGVyCit0b2tvCit0b21haGF3a3MKK3RvbWJvbG9zCit0b3JwZWZ5Cit0b3J1bGFlCit0b3VucwordHJhdmFpbHMKK3RzYXJpc3QKK3VuYmVzZWVtcwordW5ibGFtYWJseQordW5ib29rZWQKK3VubmFpbGVkCit1cGRhdGVzCit2YWxvcmlzZQordmlhYmlsaXR5Cit2aXJ0dWUKK3Z1bHR1cm5zCit2dWx2YXRlCit3YXJyYW4KK3dlYWtuZXNzCit3ZXN0ZXJuaXNlCit3aGluZ2VpbmdzCit3cmVuY2hpbmcKK3dyaXR0ZW4KK3lhaworeWF0ZQoreWF1cG9uCit6ZW5kaWtzCmRpZmYgLS1naXQgYS91cGRhdGUuc2ggYi91cGRhdGUuc2gKaW5kZXggZDExNmY4Mi4uNTk1YjY0NyAxMDA3NTUKLS0tIGEvdXBkYXRlLnNoCisrKyBiL3VwZGF0ZS5zaApAQCAtNiw3ICs2LDcgQEAKIAogYT1gZmluZCAuIC1uYW1lICIqLltjaF0iYAogZm9yIHggaW4gJGE7IGRvIAotICAgIHNlZCAncy8oYykgMjAwMS0yMDA0LyhjKSAyMDAxLTIwMDUvJyAkeCA+ICR4LnRtcDsgCisgICAgc2VkICdzLyhjKSAyMDAxLTIwMDUvKGMpIDIwMDEtMjAwNi8nICR4ID4gJHgudG1wOyAKICAgICBtdiAkeC50bXAgJHg7IAogZG9uZQogCg==