ZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvTWFrZWZpbGUgYi92ZXJpbG9nL2R2L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZTM4ZjgKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L01ha2VmaWxlCkBAIC0wLDAgKzEsMzkgQEAKKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKworIyAtLS0tIFRlc3QgcGF0dGVybnMgZm9yIHByb2plY3Qgc3RyaVZlIC0tLS0KKworLlNVRkZJWEVTOgorLlNJTEVOVDogY2xlYW4gYWxsCisKK1BBVFRFUk5TID0gd2JfcG9ydCByaXNjX2Jvb3QgdXNlcl9yaXNjX2Jvb3QgdXNlcl91YXJ0IHVzZXJfc3BpIHVzZXJfaTJjbSByaXNjdl9yZWdyZXNzIHVzZXJfYmFzaWMgdXNlcl9tYmlzdF90ZXN0MSB1c2VyX3Jpc2Nfc29mdF9ib290IHVzZXJfdWFydF9tYXN0ZXIgdWFydF9tYXN0ZXIKKworYWxsOiAgJHtQQVRURVJOU30KKwlmb3IgaSBpbiAke1BBVFRFUk5TfTsgZG8gXAorCQkoIGNkICQkaSAmJiBtYWtlIC1mIE1ha2VmaWxlICQke2l9LnZjZCAmPiB2ZXJpZnkubG9nICYmIGdyZXAgTW9uaXRvciB2ZXJpZnkubG9nKSA7IFwKKwlkb25lCisKK0RWX1BBVFRFUk5TID0gJChmb3JlYWNoIGR2LCAkKFBBVFRFUk5TKSwgdmVyaWZ5LSQoZHYpKQorJChEVl9QQVRURVJOUyk6IHZlcmlmeS0lIDogCisJY2QgJCogJiYgbWFrZQorCitjbGVhbjogICR7UEFUVEVSTlN9CisJZm9yIGkgaW4gJHtQQVRURVJOU307IGRvIFwKKwkJKCBjZCAkJGkgJiYgbWFrZSBjbGVhbiApIDsgXAorCWRvbmUKKwlybSAtcmYgKi5sb2cKKwkKKy5QSE9OWTogY2xlYW4gYWxsCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L1JFQURNRS5tZCBiL3Zlcmlsb2cvZHYvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhODM0ZjcKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L1JFQURNRS5tZApAQCAtMCwwICsxLDIzNiBAQAorPCEtLS0KKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy0tPgorCisjIFNpbXVsYXRpb24gRW52aXJvbm1lbnQgU2V0dXAKKworVGhlcmUgYXJlIHR3byBvcHRpb25zIGZvciBzZXR0aW5nIHVwIHRoZSBzaW11bGF0aW9uIGVudmlyb25tZW50OiAKKworKiBQdWxsaW5nIGEgcHJlLWJ1aWx0IGRvY2tlciBpbWFnZSAKKyogSW5zdGFsbGluZyB0aGUgZGVwZW5kZWNpZXMgbG9jYWxseQorCisjIyAxLiBEb2NrZXIKKworVGhlcmUgaXMgYW4gYXZhaWxhYmxlIGRvY2tlciBzZXR1cCB3aXRoIHRoZSBuZWVkZWQgdG9vbHMgYXQgW2VmYWJsZXNzL2RvY2tlcml6ZWQtdmVyaWZpY2F0aW9uLXNldHVwXShodHRwczovL2dpdGh1Yi5jb20vZWZhYmxlc3MvZG9ja2VyaXplZC12ZXJpZmljYXRpb24tc2V0dXApIAorCitSdW4gdGhlIGZvbGxvd2luZyB0byBwdWxsIHRoZSBpbWFnZTogCisKK2BgYAorZG9ja2VyIHB1bGwgZWZhYmxlc3MvZHZfc2V0dXA6bGF0ZXN0CitgYGAKKworIyMgMi4gTG9jYWwgSW5zdGFsbGlvbiAoTGludXgpCisKK1lvdSB3aWxsIG5lZWQgdG8gZnVsbGZpbCB0aGVzZSBkZXBlbmRlY2llczogCisKKyogSWNhcnVzIFZlcmlsb2cgKDEwLjIrKQorKiBSVjMySSBUb29sY2hhaW4KKworVXNpbmcgYXB0LCB5b3UgY2FuIGluc3RhbGwgSWNhcnVzIFZlcmlsb2c6CisKK2BgYGJhc2gKK3N1ZG8gYXB0LWdldCBpbnN0YWxsIGl2ZXJpbG9nCitgYGAKKworTmV4dCwgeW91IHdpbGwgbmVlZCB0byBidWlsZCB0aGUgUlYzMkkgdG9vbGNoYWluLiBGaXJzdGx5LCBleHBvcnQgdGhlIGluc3RhbGxhdGlvbiBwYXRoIGZvciB0aGUgUlYzMkkgdG9vbGNoYWluLCAKKworYGBgYmFzaAorZXhwb3J0IEdDQ19QQVRIPTxnY2MtaW5zdGFsbGF0aW9uLXBhdGg+CitgYGAKKworVGhlbiwgcnVuIHRoZSBmb2xsb3dpbmc6IAorCitgYGBiYXNoCisjIHBhY2thZ2VzIG5lZWRlZDoKK3N1ZG8gYXB0LWdldCBpbnN0YWxsIGF1dG9jb25mIGF1dG9tYWtlIGF1dG90b29scy1kZXYgY3VybCBsaWJtcGMtZGV2IFwKKyAgICBsaWJtcGZyLWRldiBsaWJnbXAtZGV2IGdhd2sgYnVpbGQtZXNzZW50aWFsIGJpc29uIGZsZXggdGV4aW5mbyBcCisgICAgZ3BlcmYgbGlidG9vbCBwYXRjaHV0aWxzIGJjIHpsaWIxZy1kZXYgZ2l0IGxpYmV4cGF0MS1kZXYKKworc3VkbyBta2RpciAkR0NDX1BBVEgKK3N1ZG8gY2hvd24gJFVTRVIgJEdDQ19QQVRICisKK2dpdCBjbG9uZSBodHRwczovL2dpdGh1Yi5jb20vcmlzY3YvcmlzY3YtZ251LXRvb2xjaGFpbiByaXNjdi1nbnUtdG9vbGNoYWluLXJ2MzJpCitjZCByaXNjdi1nbnUtdG9vbGNoYWluLXJ2MzJpCitnaXQgY2hlY2tvdXQgNDExZDEzNAorZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlCisKK21rZGlyIGJ1aWxkOyBjZCBidWlsZAorLi4vY29uZmlndXJlIC0td2l0aC1hcmNoPXJ2MzJpIC0tcHJlZml4PSRHQ0NfUEFUSAorbWFrZSAtaiQobnByb2MpCitgYGAKKworIyBSdW5uaW5nIFNpbXVsYXRpb24KKworIyMgRG9ja2VyCisKK0ZpcnN0LCB5b3Ugd2lsbCBuZWVkIHRvIGV4cG9ydCBhIG51bWJlciBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXM6IAorCitgYGBiYXNoCitleHBvcnQgUERLX1BBVEg9PHBkay1sb2NhdGlvbi9za3kxMzBBPgorZXhwb3J0IENBUkFWRUxfUk9PVD08Y2FyYXZlbF9yb290PgorZXhwb3J0IFVQUkpfUk9PVD08dXNlcl9wcm9qZWN0X3Jvb3Q+CitgYGAKKworVGhlbiwgcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBzdGFydCB0aGUgZG9ja2VyIGNvbnRhaW5lciA6CisKK2BgYAorZG9ja2VyIHJ1biAtaXQgLXYgJENBUkFWRUxfUk9PVDokQ0FSQVZFTF9ST09UIC12ICRQREtfUEFUSDokUERLX1BBVEggLXYgJFVQUkpfUk9PVDokVVBSSl9ST09UIC1lIENBUkFWRUxfUk9PVD0kQ0FSQVZFTF9ST09UIC1lIFBES19QQVRIPSRQREtfUEFUSCAtZSBVUFJKX1JPT1Q9JFVQUkpfUk9PVCAtdSAkKGlkIC11ICRVU0VSKTokKGlkIC1nICRVU0VSKSBlZmFibGVzcy9kdl9zZXR1cDpsYXRlc3QKK2BgYAorCitUaGVuLCBuYXZpZ2F0ZSB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBEViB0ZXN0cyByZXNpZGUgOiAKKworYGBgYmFzaAorY2QgJFVQUkpfUk9PVC92ZXJpbG9nL2R2LworYGBgCisKK1RoZW4sIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGF0IFtCb3RoXSgjYm90aCkgdG8gcnVuIFJUTC9HTCBzaW11bGF0aW9uLgorCisjIyBMb2NhbAorCitZb3Ugd2lsbCBuZWVkIHRvIGV4cG9ydCB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXM6IAorCitgYGBiYXNoCitleHBvcnQgR0NDX1BBVEg9PGdjYy1pbnN0YWxsYXRpb24tcGF0aD4KK2V4cG9ydCBQREtfUEFUSD08cGRrLWxvY2F0aW9uL3NreTEzMEE+CitgYGAKKworVGhlbiwgZm9sbG93IHRoZSBpbnN0cnVjdGlvbiBhdCBbQm90aF0oI2JvdGgpIHRvIHJ1biBSVEwvR0wgc2ltdWxhdGlvbi4KKworIyMgQm90aAorCitUbyBydW4gUlRMIHNpbXVsYXRpb24gZm9yIG9uZSBvZiB0aGUgRFYgdGVzdHMsIAorCitgYGBiYXNoCitjZCA8ZHYtdGVzdD4KK21ha2UKK2BgYAorCitUbyBydW4gZ2F0ZSBsZXZlbCBzaW11bGF0aW9uIGZvciBvbmUgb2YgdGhlIERWIHRlc3RzLCAKKworYGBgYmFzaAorY2QgPGR2LXRlc3Q+CitTSU09R0wgbWFrZQorYGBgCisKKyMgVXNlciBQcm9qZWN0IEV4YW1wbGUgRFYKKworVGhlIGRpcmVjdG9yeSBpbmNsdWRlcyBmb3VyIHRlc3RzIGZvciB0aGUgY291bnRlciB1c2VyLXByb2plY3QgZXhhbXBsZTogCisKKyMjIyBJTyBQb3J0cyBUZXN0IAorCisqIFRoaXMgdGVzdCBpcyBtZWFudCB0byB2ZXJpZnkgdGhhdCB3ZSBjYW4gY29uZmlndXJlIHRoZSBwYWRzIGZvciB0aGUgdXNlciBwcm9qZWN0IGFyZWEuIFRoZSBmaXJtd2FyZSBjb25maWd1cmVzIHRoZSBsb3dlciA4IElPIHBhZHMgaW4gdGhlIHVzZXIgc3BhY2UgYXMgb3V0cHV0czoKKworCWBgYGMKKwlyZWdfbXByal9pb18wID0gIEdQSU9fTU9ERV9VU0VSX1NURF9PVVRQVVQ7CisJcmVnX21wcmpfaW9fMSA9ICBHUElPX01PREVfVVNFUl9TVERfT1VUUFVUOworCS4uLi4uCisJcmVnX21wcmpfaW9fNyA9ICBHUElPX01PREVfVVNFUl9TVERfT1VUUFVUOworCWBgYAorCisqIFRoZW4sIHRoZSBmaXJtd2FyZSBhcHBsaWVzIHRoZSBwYWQgY29uZmlndXJhdGlvbiBieSBlbmFibGluZyB0aGUgc2VyaWFsIHRyYW5zZmVyIG9uIHRoZSBzaGlmdCByZWdpc3RlciByZXNwb25zaWJsZSBmb3IgY29uZmlndXJpbmcgdGhlIHBhZHMgYW5kIHdhaXRzIHVudGlsIHRoZSB0cmFuc2ZlciBpcyBkb25lLiAKKwlgYGBjCisJcmVnX21wcmpfeGZlciA9IDE7CisJd2hpbGUgKHJlZ19tcHJqX3hmZXIgPT0gMSk7CisJYGBgCisKKyogVGhlIHRlc3RiZW5jaCBzdWNjZXNzIGNyaXRlcmlhIGlzIHRoYXQgd2UgY2FuIG9ic2VydmUgdGhlIGNvdW50ZXIgdmFsdWUgb24gdGhlIGxvd2VyIDggSS9PIHBhZHMuIFRoaXMgY3JpdGVyaWEgaXMgY2hlY2tlZCBieSB0aGUgdGVzdGJlbmNoIHRocm91Z2ggb2JzZXJ2aW5nIHRoZSB2YWx1ZXMgb24gdGhlIEkvTyBwYWRzIGFzIGZvbGxvd3M6IAorCisJYGBgdmVyaWxvZworCXdhaXQobXByal9pb18wID09IDgnaDAxKTsKKwl3YWl0KG1wcmpfaW9fMCA9PSA4J2gwMik7CisJd2FpdChtcHJqX2lvXzAgPT0gOCdoMDMpOworCS4uLi4KKwl3YWl0KG1wcmpfaW9fMCA9PSA4J2hGRik7CisJYGBgCisKKyogSWYgdGhlIHRlc3RiZW5jaCBmYWlscywgaXQgd2lsbCBwcmludCBhIHRpbWVvdXQgbWVzc2FnZSB0byB0aGUgdGVybWluYWwuIAorCisjIyMgTG9naWMgQW5hbHl6ZXIgVGVzdCAxCisgCisqIFRoaXMgdGVzdCBpcyBtZWFudCB0byB2ZXJpZnkgdGhhdCB3ZSBjYW4gdXNlIHRoZSBsb2dpYyBhbmFseXplciB0byBtb25pdG9yIGFuZCB3cml0ZSBzaWduYWxzIGluIHRoZSB1c2VyIHByb2plY3QgZnJvbSB0aGUgbWFuYWdlbWVudCBTb0MuIEZpcnN0bHksIHRoZSBmaXJtd2FyZSBjb25maWd1cmVzIHRoZSB1cHBlciAxNiBvZiB0aGUgZmlyc3QgMzIgR1BJTyBwYWRzIGFzIG91dHB1dHMgZnJvbSB0aGUgbWFuYWdlbnQgU29DLCBhcHBsaWVzIHRoZSBjb25maWd1cmF0aW9uIGJ5IGluaXRpYXRpbmcgdGhlIHNlcmlhbCB0cmFuc2ZlciBvbiB0aGUgc2hpZnQgcmVnaXN0ZXIsIGFuZCB3cml0ZXMgYSB2YWx1ZSBvbiB0aGUgcGFkcyB0byBpbmRpY2F0ZSB0aGUgZW5kIG9mIHBhZCBjb25maWd1cmF0aW9uIGFuZCB0aGUgc3RhcnQgb2YgdGhlIHRlc3QuIAorCisJYGBgYworCXJlZ19tcHJqX2lvXzMxID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKwlyZWdfbXByal9pb18zMCA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisJLi4uLi4KKwlyZWdfbXByal9pb18xNiA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisKKwlyZWdfbXByal94ZmVyID0gMTsKKwl3aGlsZSAocmVnX21wcmpfeGZlciA9PSAxKTsKKworCS8vIEZsYWcgc3RhcnQgb2YgdGhlIHRlc3QgCisJcmVnX21wcmpfZGF0YWwgPSAweEFCNDAwMDAwOworCWBgYAorCQorCVRoaXMgaXMgZG9uZSB0byBmbGFnIHRoZSBzdGFydC9zdWNjZXNzL2VuZCBvZiB0aGUgc2ltdWxhdGlvbiBieSB3cml0aW5nIGEgY2VydGFpbiB2YWx1ZSB0byB0aGUgSS9PcyB3aGljaCBpcyB0aGVuIGNoZWNrZWQgYnkgdGhlIHRlc3RiZW5jaCB0byBrbm93IHdoZXRoZXIgdGhlIHRlc3Qgc3RhcnRlZC9lbmRlZC9zdWNjZWVkZWQuIEZvciBleGFtcGxlLCB0aGUgdGVzdGJlbmNoIGNoZWNrcyBvbiB0aGUgdmFsdWUgb2YgdGhlIHVwcGVyIDE2IG9mIDMyIEkvT3MsIGlmIGl0IGlzIGVxdWFsIHRvIGAxNidoQUI0MGAsIHRoZW4gd2Uga25vdyB0aGF0IHRoZSB0ZXN0IHN0YXJ0ZWQuICAKKworCWBgYHZlcmlsb2cKKwl3YWl0KGNoZWNrYml0cyA9PSAxNidoQUI0MCk7CisJJGRpc3BsYXkoIkxBIFRlc3QgMSBzdGFydGVkIik7CisJYGBgCisJCisqIFRoZW4sIHRoZSBmaXJtd2FyZSBjb25maWd1cmVzIHRoZSBsb2dpYyBhbmFseXplciAoTEEpIHByb2JlcyBgWzMxOjBdYCBhcyBpbnB1dHMgdG8gdGhlIG1hbmFnZW1lbnQgU29DIHRvIG1vbml0b3IgdGhlIGNvdW50ZXIgdmFsdWUsIGFuZCBjb25maWd1cmUgdGhlIGxvZ2ljIGFuYWx5emVyIHByb2JlcyBgWzYzOjMyXWAgYXMgb3V0cHV0cyBmcm9tIHRoZSBtYW5hZ2VtZW50IFNvQyAoaW5wdXRzIHRvIHRoZSB1c2VyX3Byb2pfZXhhbXBsZSkgdG8gc2V0IHRoZSBjb3VudGVyIGluaXRpYWwgdmFsdWUuIFRoaXMgaXMgZG9uZSBieSB3cml0aW5nIHRvIHRoZSBMQSBwcm9iZXMgZW5hYmxlIHJlZ2lzdGVycy4gICBOb3RlIHRoYXQgdGhlIG91dHB1dCBlbmFibGUgaXMgYWN0aXZlIGxvdywgd2hpbGUgdGhlIGlucHV0IGVuYWJsZSBpcyBhY3RpdmUgaGlnaC4gIEV2ZXJ5IGNoYW5uZWwgY2FuIGJlIGNvbmZpZ3VyZWQgZm9yIGlucHV0LCBvdXRwdXQsIG9yIGJvdGggaW5kZXBlbmRlbnRseS4KKworIAorCWBgYGMKKwlyZWdfbGEwX29lbmIgPSByZWdfbGEwX2llbmEgPSAweEZGRkZGRkZGOyAgICAvLyBbMzE6MF0gaW5wdXRzIHRvIG1nbXRfc29jCisJcmVnX2xhMV9vZW5iID0gcmVnX2xhMV9pZW5hID0gMHgwMDAwMDAwMDsgICAgLy8gWzYzOjMyXSBvdXRwdXRzIGZyb20gbWdtdF9zb2MKKwlgYGAKKworKiBUaGVuLCB0aGUgZmlybXdhcmUgd3JpdGVzIGFuIGluaXRpYWwgdmFsdWUgdG8gdGhlIGNvdW50ZXIgdGhyb3VnaCB0aGUgTEExIGRhdGEgcmVnaXN0ZXIuIEFmdGUgd3JpdGluZyB0aGUgY291bnRlciB2YWx1ZSwgdGhlIExBIHByb2JlcyBhcmUgZGlzYWJsZWQgdG8gcHJldmVudCB0aGUgY291bnRlciB3cml0ZSBzaWduYWwgZnJvbSBiZWluZyBhbHdheXMgc2V0IHRvIG9uZS4gCisKKwlgYGBjCisJcmVnX2xhMV9kYXRhID0gMHgwMDAwMDAwMDsgICAgIC8vIFdyaXRlIHplcm8gdG8gY291bnQgcmVnaXN0ZXIKKwlyZWdfbGExX29lbmIgID0gcmVnX2xhMV9pZW5hID0gMHhGRkZGRkZGRjsgICAgIC8vIERpc2FibGUgcHJvYmVzCisJYGBgCisKKyogVGhlIGZpcm13YXJlIHRoZW4gd2FpdHMgdW50aWwgdGhlIGNvdW50IHZhbHVlIGV4Y2VlZHMgNTAwIGFuZCBmbGFncyB0aGUgc3VjY2VzcyBvZiB0aGUgdGVzdCBieSB3cml0aW5nIGAweEFCNDFgIHRvIHBhZHMgMTYgdG8gMzEuICBUaGUgZmlybXdhcmUgcmVhZHMgdGhlIGNvdW50IHZhbHVlIHRocm91Z2ggdGhlIGxvZ2ljIGFuYWx5emVyIHByb2JlcyBgWzMxOjBdYCAKKworCWBgYGMKKwlpZiAocmVnX2xhMF9kYXRhID4gMHgxRjQpIHsJICAgICAvLyBSZWFkIGN1cnJlbnQgY291bnQgdmFsdWUgdGhyb3VnaCBMQQorCQlyZWdfbXByal9kYXRhbCA9IDB4QUI0MTAwMDA7IC8vIEZsYWcgc3VjY2VzcyBvZiB0aGUgdGVzdAorCQlicmVhazsKKwl9CisJYGBgCisgIAorIyMjIExvZ2ljIEFuYWx5emVyIFRlc3QgMgorIAorKiBUaGlzIHRlc3QgaXMgbWVhbnQgdG8gdmVyaWZ5IHRoYXQgd2UgY2FuIGRyaXZlIHRoZSBjbG9jayBhbmQgcmVzZXQgc2lnbmFscyBmb3IgdGhlIHVzZXIgcHJvamVjdCBleGFtcGxlIHRocm91Z2ggdGhlIGxvZ2ljIGFuYWx5emVyLiBJbiB0aGUgW3VzZXJfcHJval9leGFtcGxlXSh2ZXJpbG9nL3J0bC91c2VyX3Byb2pfZXhhbXBsZS52KSBSVEwsIHRoZSBjbG9jayBjYW4gZWl0aGVyIGJlIHN1cHBsaWVkIGZyb20gdGhlIGB3Yl9jbGtfaWAgb3IgZnJvbSB0aGUgbG9naWMgYW5hbHl6ZXIgdGhyb3VnaCBiaXQgYFs2NF1gLiBTaW1pbGFybHksIHRoZSByZXNldCBzaWduYWwgY2FuIGJlIHN1cHBsaWVkIGZyb20gdGhlIGB3Yl9yc3RfaWAgb3IgdGhyb3VnaCBgTEFbNjVdYC4gIFRoZSBmaXJtd2FyZSBjb25maWd1cmVzIHRoZSBjbGsgYW5kIHJlc2V0IExBIHByb2JlcyBhcyBvdXRwdXRzIGZyb20gdGhlIG1hbmFnZW1lbnQgU29DIGJ5IHdyaXRpbmcgdG8gdGhlIExBMiBlbmFibGUgcmVnaXN0ZXIuIAorCisJYGBgYworCXJlZ19sYTJfb2VuYiAgPSByZWdfbGEyX2llbmEgPSAweEZGRkZGRkZDOyAJLy8gQ29uZmlndXJlIExBWzY0XSBMQVs2NV0gYXMgb3V0cHV0cyBmcm9tIHRoZSBjcHUKKwlgYGAKKworKiBUaGVuLCB0aGUgZmlybXdhcmUgc3VwcGxpZXMgYm90aCBjbG9jayByZXNldCBzaWduYWxzIHRocm91Z2ggTEEyIGRhdGEgcmVnaXN0ZXIuIEZpcnN0LCBib3RoIGFyZSBzZXQgdG8gb25lLiBUaGVuLCByZXNldCBpcyBkcml2ZW4gdG8gemVybyBhbmQgdGhlIGNsb2NrIGlzIHRvZ2dsZWQgZm9yIDYgY2xvY2sgY3ljbGVzLiAKKworCWBgYGMKKwlyZWdfbGEyX2RhdGEgPSAweDAwMDAwMDAzOwkvLyBXcml0ZSBvbmUgdG8gTEFbNjRdIGFuZCBMQVs2NV0KKwlmb3IgKGk9MDsgaTwxMTsgaT1pKzEpIHsgICAJLy8gVG9nZ2xlIGNsayAmIGRlLWFzc2VydCByZXNldAorCQljbGsgPSAhY2xrOyAgICAgICAgICAgICAgIAkKKwkJcmVnX2xhMl9kYXRhID0gMHgwMDAwMDAwMCB8IGNsazsKKwl9CisJYGBgCisqIFRoZSB0ZXN0YmVuY2ggc3VjY2VzcyBjcml0ZXJpYSBpcyB0aGF0IHRoZSBmaXJtd2FyZSByZWFkcyBhIGNvdW50IHZhbHVlIG9mIGZpdmUgdGhyb3VnaCB0aGUgTEEgcHJvYmVzLiAKKwlgYGBjCisJaWYgKHJlZ19sYTBfZGF0YSA9PSAweDA1KSB7CisJCXJlZ19tcHJqX2RhdGFsID0gMHhBQjYxMDAwMDsgICAvLyBGTGFnIHN1Y2Nlc3Mgb2YgdGhlIHRlc3QKKwl9CisJYGBgCisJCisjIyMgV2lzaGJvbmUgVGVzdAorCisqIFRoaXMgdGVzdCBpcyBtZWFudCB0byB2ZXJpZnkgdGhhdCB3ZSBjYW4gcmVhZCBhbmQgd3JpdGUgdG8gdGhlIGNvdW50IHJlZ2lzdGVyIHRocm91Z2ggdGhlIHdpc2hib25lIHBvcnQuIFRoZSBmaXJtd2FyZSB3cml0ZXMgYSB2YWx1ZSBvZiBgMHgyNzEwYCB0byB0aGUgY291bnQgcmVnaXN0ZXIsIHRoZW4gcmVhZHMgYmFjayB0aGUgY291bnQgdmFsdWUgYWZ0ZXIgc29tZSB0aW1lLiBUaGUgcmVhZCBhbmQgd3JpdGUgdHJhbnNhY3Rpb25zIGhhcHBlbiB0aHJvdWdoIHRoZSBtYW5hZ2VtZW50IFNvQyB3aXNoYm9uZSBidXMgYW5kIGFyZSBpbml0aWF0ZWQgYnkgZWl0aGVyIHdyaXRpbmcgb3IgcmVhZGluZyBmcm9tIHRoZSB1c2VyIHByb2plY3QgYWRkcmVzcyBvbiB0aGUgd2lzaGJvbmUgYnVzLiAKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYWdlbnRzL3VhcnRfYWdlbnQudiBiL3Zlcmlsb2cvZHYvYWdlbnRzL3VhcnRfYWdlbnQudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjEyMWU5Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9hZ2VudHMvdWFydF9hZ2VudC52CkBAIC0wLDAgKzEsNTI3IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAgMjAyMSAsIERpbmVzaCBBbm5heXlhCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBNb2RpZmllZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorbW9kdWxlIHVhcnRfYWdlbnQgKAorCW1jbGssCisJdHhkLAorCXJ4ZAorCSk7CisKK2lucHV0CW1jbGs7CitvdXRwdXQJdHhkOworCitpbnB1dAlyeGQ7CisKK2V2ZW50CXVhcnRfcmVhZF9kb25lLCB1YXJ0X3dyaXRlX2RvbmU7CitldmVudAllcnJvcl9kZXRlY3RlZCx1YXJ0X3Bhcml0eV9lcnJvciwgdWFydF9zdG9wX2Vycm9yMSwgdWFydF9zdG9wX2Vycm9yMjsKK2V2ZW50IAl1YXJ0X3RpbWVvdXRfZXJyb3I7CitldmVudAlhYm9ydDsKKworcmVnIFsxNTowXSByeF9jb3VudDsKK3JlZyBbMTU6MF0gdHhfY291bnQ7CityZWcgWzE1OjBdIHBhcl9lcnJfY291bnQ7CityZWcgWzE1OjBdIHN0b3BfZXJyMV9jbnQ7CityZWcgWzE1OjBdIHN0b3BfZXJyMl9jbnQ7CityZWcgWzE1OjBdIHRpbWVvdXRfZXJyX2NudDsKK3JlZyBbMTU6MF0gZXJyX2NudDsKKworcmVnIAkgICB0eGQsIHJlYWQsIHdyaXRlOword2lyZQkgICB1YXJ0X3J4X2NsazsKK3JlZwkgICB1YXJ0X2NsazsKK3JlZwkgICBzdG9wX2Vycl9jaGVjazsKKworaW50ZWdlciB0aW1lb3V0X2NvdW50OworaW50ZWdlciBkYXRhX2JpdF9udW1iZXI7CityZWcgWzE1OjBdIGNsa19jb3VudDsKK3JlZyAgICAgICAgZGVidWdfbW9kZTsKKworcmVnICAgICAgZXJyb3JfaW5kOyAvLyAxIGluZGljYXRlIGVycm9yCisKK2luaXRpYWwgCitiZWdpbgorCWRlYnVnX21vZGUgPSAxOyAvLyBLZWVwIGluIGRlYnVnIG1vZGUgYW5kIGVuYWJsZSBkaXNwbGF5CisJdHhkID0gMSdiMTsKKyAJdWFydF9jbGsgPSAwOworCWNsa19jb3VudCA9IDA7CisJc3RvcF9lcnJfY2hlY2sgPSAwOworICBlcnJvcl9pbmQgPSAwOworZW5kCisKK2Fsd2F5cyBAKHBvc2VkZ2UgbWNsaykKK2JlZ2luCisgICBpZiAoY2xrX2NvdW50ID09ICdoMCkgYmVnaW4KKyAgICAgIHVhcnRfY2xrICA9IH51YXJ0X2NsazsKKyAgICAgIGNsa19jb3VudCA9IGNvbnRyb2xfc2V0dXAuZGl2aXNvcjsJCisgICBlbmQgZWxzZSBiZWdpbgorICAgICAgY2xrX2NvdW50ID0gY2xrX2NvdW50IC0gMTsJCisgICBlbmQKK2VuZAorYXNzaWduIHVhcnRfcnhfY2xrID0gdWFydF9jbGs7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgbWNsaykKK2JlZ2luCisJdGltZW91dF9jb3VudCA9IHRpbWVvdXRfY291bnQgKyAxOworCWlmICh0aW1lb3V0X2NvdW50ID09IChjb250cm9sX3NldHVwLm1heHRpbWUgKiAxNikpCisJCS0+IGFib3J0OworZW5kCisKK2Fsd2F5cyBAdWFydF9yZWFkX2RvbmUKKyAgICByeF9jb3VudCA9IHJ4X2NvdW50ICsgMTsKKworYWx3YXlzIEB1YXJ0X3dyaXRlX2RvbmUKKyAgICB0eF9jb3VudCA9IHR4X2NvdW50ICsgMTsKKworYWx3YXlzIEB1YXJ0X3Bhcml0eV9lcnJvciBiZWdpbgorICAgIGVycm9yX2luZCA9IDE7CisgICAgcGFyX2Vycl9jb3VudCA9IHBhcl9lcnJfY291bnQgKyAxOworZW5kCisKK2Fsd2F5cyBAdWFydF9zdG9wX2Vycm9yMSBiZWdpbgorICAgIGVycm9yX2luZCA9IDE7CisgICAgc3RvcF9lcnIxX2NudCA9IHN0b3BfZXJyMV9jbnQgKyAxOworZW5kCisKK2Fsd2F5cyBAdWFydF9zdG9wX2Vycm9yMiBiZWdpbgorICAgIGVycm9yX2luZCA9IDE7CisgICAgc3RvcF9lcnIyX2NudCA9IHN0b3BfZXJyMl9jbnQgKyAxOworZW5kCisKK2Fsd2F5cyBAdWFydF90aW1lb3V0X2Vycm9yIGJlZ2luCisgICAgZXJyb3JfaW5kID0gMTsKKyAgICB0aW1lb3V0X2Vycl9jbnQgPSB0aW1lb3V0X2Vycl9jbnQgKyAxOworZW5kCisKKworYWx3YXlzIEBlcnJvcl9kZXRlY3RlZCBiZWdpbgorICAgIGVycm9yX2luZCA9IDE7CisgICAgZXJyX2NudCA9IGVycl9jbnQgKyAxOworZW5kCisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK3Rhc2sgdWFydF9pbml0OworYmVnaW4KKyAgcmVhZCA9IDA7CisgIHdyaXRlID0gMDsKKyAgdHhfY291bnQgPSAwOworICByeF9jb3VudCA9IDA7CisgIHN0b3BfZXJyX2NoZWNrID0gMDsKKyAgcGFyX2Vycl9jb3VudCA9IDA7CisgIHN0b3BfZXJyMV9jbnQgPSAwOworICBzdG9wX2VycjJfY250ID0gMDsKKyAgdGltZW91dF9lcnJfY250ID0gMDsKKyAgZXJyX2NudCA9IDA7CisgIGNsa19jb3VudCA9IDA7CisKK2VuZCAKK2VuZHRhc2sgCisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK3Rhc2sgcmVhZF9jaGFyX2NoazsKK2lucHV0IAlleHBlY3RlZF9kYXRhOworCitpbnRlZ2VyIGk7CityZWcJWzc6MF0gZXhwZWN0ZWRfZGF0YTsKK3JlZyAJWzc6MF0gZGF0YTsKK3JlZwlwYXJpdHk7CisKK2JlZ2luCisJZGF0YSA8PSA4J2gwOworCXBhcml0eSA8PSAxOworCXRpbWVvdXRfY291bnQgPSAwOworCitmb3JrCQorICAgYmVnaW4gOiBsb29wXzEKKyAgICAgICAgQChhYm9ydCkKKwlpZihkZWJ1Z19tb2RlKQorICAgICAgICAgJGRpc3BsYXkgKCIlbTogPj4+Pj4gRXhjZWVkIHRpbWUgbGltaXQsIHVhcnQgbm8gcmVzcG9uY2UuXG4iKTsKKyAgICAgICAgIC0+dWFydF90aW1lb3V0X2Vycm9yOworICAgICAgICAgZGlzYWJsZSBsb29wXzI7CisgICBlbmQKKworICAgYmVnaW4gOiBsb29wXzIKKworLy8gc3RhcnQgY3ljbGUKKwlAKG5lZ2VkZ2UgcnhkKSAKKwkgZGlzYWJsZSBsb29wXzE7CisJIHJlYWQgPD0gMTsKKworLy8gZGF0YSBjeWNsZQorCUAocG9zZWRnZSB1YXJ0X3J4X2Nsayk7CisJIGZvciAoaSA9IDA7IGkgPCBkYXRhX2JpdF9udW1iZXI7IGkgPSBpICsgMSkKKwkgIGJlZ2luCisJICAgIEAocG9zZWRnZSB1YXJ0X3J4X2NsaykKKwkgICAgZGF0YVtpXSA8PSAgcnhkOworCSAgICBwYXJpdHkgPD0gcGFyaXR5IF4gcnhkOworCSAgZW5kCQkKKworLy8gcGFyaXR5IGN5Y2xlCisJaWYoY29udHJvbF9zZXR1cC5wYXJpdHlfZW4pCisJYmVnaW4KKyAgICAgICAgICBAKHBvc2VkZ2UgdWFydF9yeF9jbGspOworCSAgaWYgKChjb250cm9sX3NldHVwLmV2ZW5fb2RkX3Bhcml0eSAmJiAocnhkID09IHBhcml0eSkpIHx8CisJICAgICAoIWNvbnRyb2xfc2V0dXAuZXZlbl9vZGRfcGFyaXR5ICYmIChyeGQgIT0gcGFyaXR5KSkpCisJICAgICBiZWdpbgorCQkgICAkZGlzcGxheSAoIiVtOiA+Pj4+PiAgUGFyaXR5IEVycm9yIik7CQorIAkJLT4gZXJyb3JfZGV0ZWN0ZWQ7CisJCS0+IHVhcnRfcGFyaXR5X2Vycm9yOworCSAgICAgZW5kCisJZW5kCisKKy8vIHN0b3AgY3ljbGUgMQorICAgICAgICBAKHBvc2VkZ2UgdWFydF9yeF9jbGspOwkKKwkgIGlmICghcnhkKQorCSAgICAgYmVnaW4KKwkJJGRpc3BsYXkgKCIlbTogPj4+Pj4gIFN0b3Agc2lnbmFsIDEgRXJyb3IiKTsJCisgCQktPiBlcnJvcl9kZXRlY3RlZDsKKwkJLT4gdWFydF9zdG9wX2Vycm9yMTsKKwkgICAgIGVuZAorCisvLyBzdG9wIGN5Y2xlIDIKKwlpZiAoY29udHJvbF9zZXR1cC5zdG9wX2JpdF9udW1iZXIpCisJYmVnaW4KKwkgICAgICBAKHBvc2VkZ2UgdWFydF9yeF9jbGspOwkvLyBzdG9wIGN5Y2xlIDIKKwkJaWYgKCFyeGQpCisJCSAgYmVnaW4KKwkJICAgICRkaXNwbGF5ICgiJW06ID4+Pj4+ICBTdG9wIHNpZ25hbCAyIEVycm9yIik7CQorIAkJICAgIC0+IGVycm9yX2RldGVjdGVkOworCQkgICAgLT4gdWFydF9zdG9wX2Vycm9yMjsKKwkJICBlbmQKKwllbmQKKworCXJlYWQgPD0gMDsKKwktPiB1YXJ0X3JlYWRfZG9uZTsKKworCWlmIChleHBlY3RlZF9kYXRhICE9IGRhdGEpCisJYmVnaW4KKwkJJGRpc3BsYXkgKCIlbTogRXJyb3IhIERhdGEgcmV0dXJuIGlzICVoLCBleHBlY3RpbmcgJWgiLCBkYXRhLCBleHBlY3RlZF9kYXRhKTsKKwkJLT4gZXJyb3JfZGV0ZWN0ZWQ7CisJZW5kCisJZWxzZSBiZWdpbgorCSAgICAgICAgaWYoZGVidWdfbW9kZSkKKwkJICAkZGlzcGxheSAoIiVtOiBEYXRhIG1hdGNoICAlaCIsIGV4cGVjdGVkX2RhdGEpOworCWVuZAorCisJaWYoZGVidWdfbW9kZSkKKwkgICAkZGlzcGxheSAoIiVtOi4uLiBSZWFkIERhdGEgZnJvbSBVQVJUIGRvbmUgY250IDolZC4uLiIscnhfY291bnQgKzEpOworICAgZW5kCitqb2luCisKK2VuZAorCitlbmR0YXNrCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCit0YXNrIHJlYWRfY2hhcjI7CitvdXRwdXQgWzc6MF0JcnhkX2RhdGE7CitvdXRwdXQgICAgICAgICAgdGltZW91dDsgLy8gMS0+IHRpbWVvdXQKK2ludGVnZXIgaTsKK3JlZwlbNzowXSByeGRfZGF0YTsKK3JlZyAJWzc6MF0gZGF0YTsKK3JlZwlwYXJpdHk7CisKK2JlZ2luCisJZGF0YSA8PSA4J2gwOworCXBhcml0eSA8PSAxOworCXRpbWVvdXRfY291bnQgPSAwOworCXRpbWVvdXQgPSAwOworCisgICBmb3JrCQorICAgYmVnaW4gCisgICAgICAgIEAoYWJvcnQpCisgICAgICAgICAvLyRkaXNwbGF5ICgiPj4+Pj4gIEV4Y2VlZCB0aW1lIGxpbWl0LCB1YXJ0IG5vIHJlc3BvbmNlLlxuIik7CisgICAgICAgICAvLy0+dWFydF90aW1lb3V0X2Vycm9yOworCSAgdGltZW91dCA9IDE7CisgICBlbmQKKworICAgYmVnaW4KKworLy8gc3RhcnQgY3ljbGUKKwlAKG5lZ2VkZ2UgcnhkKSAKKwkgcmVhZCA8PSAxOworCisvLyBkYXRhIGN5Y2xlCisJQChwb3NlZGdlIHVhcnRfcnhfY2xrICk7CisJIGZvciAoaSA9IDA7IGkgPCBkYXRhX2JpdF9udW1iZXI7IGkgPSBpICsgMSkKKwkgIGJlZ2luCisJICAgIEAocG9zZWRnZSB1YXJ0X3J4X2NsaykKKwkgICAgZGF0YVtpXSA8PSAgcnhkOworCSAgICBwYXJpdHkgPD0gcGFyaXR5IF4gcnhkOworCSAgZW5kCQkKKworLy8gcGFyaXR5IGN5Y2xlCisJaWYoY29udHJvbF9zZXR1cC5wYXJpdHlfZW4pCisJYmVnaW4KKyAgICAgICAgICBAKHBvc2VkZ2UgdWFydF9yeF9jbGspOworCSAgaWYgKChjb250cm9sX3NldHVwLmV2ZW5fb2RkX3Bhcml0eSAmJiAocnhkID09IHBhcml0eSkpIHx8CisJICAgICAoIWNvbnRyb2xfc2V0dXAuZXZlbl9vZGRfcGFyaXR5ICYmIChyeGQgIT0gcGFyaXR5KSkpCisJICAgICBiZWdpbgorCQkkZGlzcGxheSAoIj4+Pj4+ICBQYXJpdHkgRXJyb3IiKTsJCisgCQktPiBlcnJvcl9kZXRlY3RlZDsKKwkJLT4gdWFydF9wYXJpdHlfZXJyb3I7CisJICAgICBlbmQKKwllbmQKKworLy8gc3RvcCBjeWNsZSAxCisgICAgICAgIEAocG9zZWRnZSB1YXJ0X3J4X2Nsayk7CQorCSAgaWYgKCFyeGQpCisJICAgICBiZWdpbgorCQkkZGlzcGxheSAoIj4+Pj4+ICBTdG9wIHNpZ25hbCAxIEVycm9yIik7CQorIAkJLT4gZXJyb3JfZGV0ZWN0ZWQ7CisJCS0+IHVhcnRfc3RvcF9lcnJvcjE7CisJICAgICBlbmQKKworLy8gc3RvcCBjeWNsZSAyCisJaWYgKGNvbnRyb2xfc2V0dXAuc3RvcF9iaXRfbnVtYmVyKQorCWJlZ2luCisJICAgICAgQChwb3NlZGdlIHVhcnRfcnhfY2xrKTsJLy8gc3RvcCBjeWNsZSAyCisJCWlmICghcnhkKQorCQkgIGJlZ2luCisJCSAgICAkZGlzcGxheSAoIj4+Pj4+ICBTdG9wIHNpZ25hbCAyIEVycm9yIik7CQorIAkJICAgIC0+IGVycm9yX2RldGVjdGVkOworCQkgICAgLT4gdWFydF9zdG9wX2Vycm9yMjsKKwkJICBlbmQKKwllbmQKKworCXJlYWQgPD0gMDsKKwktPiB1YXJ0X3JlYWRfZG9uZTsKKworLy8gICAgICAkZGlzcGxheSAoIiglbSkgUmVjZWl2ZWQgRGF0YSAgJWMiLCBkYXRhKTsKKy8vCSRkaXNwbGF5ICgiLi4uIFJlYWQgRGF0YSBmcm9tIFVBUlQgZG9uZSBjbnQgOiVkLi4uIixyeF9jb3VudCArMSk7CisgICAgICAgICR3cml0ZSAoIiVjIixkYXRhKTsKKwlyeGRfZGF0YSA9IGRhdGE7CisgICBlbmQKKyAgIGpvaW5fYW55CisgICBkaXNhYmxlIGZvcms7IC8vZGlzYWJsZSBwZW5kaW5nIGZvcmsgYWN0aXZpdHkKKworZW5kCisKK2VuZHRhc2sKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwordGFzayByZWFkX2NoYXI7CitvdXRwdXQgWzc6MF0JcnhkX2RhdGE7CitvdXRwdXQgICAgICAgICAgdGltZW91dDsgLy8gMS0+IHRpbWVvdXQKKworcmVnCVs3OjBdIHJ4ZF9kYXRhOworCisKK2ludGVnZXIgaTsKK3JlZwlbNzowXSBleHBlY3RlZF9kYXRhOworcmVnIAlbNzowXSBkYXRhOworcmVnCXBhcml0eTsKKworYmVnaW4KKwlkYXRhIDw9IDgnaDA7CisJcGFyaXR5IDw9IDE7CisJdGltZW91dF9jb3VudCA9IDA7CisJdGltZW91dCA9IDA7CisKKworZm9yawkKKyAgIGJlZ2luIDogbG9vcF8xCisgICAgICAgIEAoYWJvcnQpCisJIGlmKGRlYnVnX21vZGUpCisgICAgICAgICAgICAgJGRpc3BsYXkgKCIlbTogPj4+Pj4gRXhjZWVkIHRpbWUgbGltaXQsIHVhcnQgbm8gcmVzcG9uY2UuXG4iKTsKKwkgdGltZW91dCA9IDE7CisgICAgICAgICAtPnVhcnRfdGltZW91dF9lcnJvcjsKKyAgICAgICAgIGRpc2FibGUgbG9vcF8yOworICAgZW5kCisKKyAgIGJlZ2luIDogbG9vcF8yCisKKy8vIHN0YXJ0IGN5Y2xlCisJQChuZWdlZGdlIHJ4ZCkgCisJIGRpc2FibGUgbG9vcF8xOworCSByZWFkIDw9IDE7CisKKy8vIGRhdGEgY3ljbGUKKwlAKHBvc2VkZ2UgdWFydF9yeF9jbGspOworCSBmb3IgKGkgPSAwOyBpIDwgZGF0YV9iaXRfbnVtYmVyOyBpID0gaSArIDEpCisJICBiZWdpbgorCSAgICBAKHBvc2VkZ2UgdWFydF9yeF9jbGspCisJICAgIGRhdGFbaV0gPD0gIHJ4ZDsKKwkgICAgcGFyaXR5IDw9IHBhcml0eSBeIHJ4ZDsKKwkgIGVuZAkJCisKKy8vIHBhcml0eSBjeWNsZQorCWlmKGNvbnRyb2xfc2V0dXAucGFyaXR5X2VuKQorCWJlZ2luCisgICAgICAgICAgQChwb3NlZGdlIHVhcnRfcnhfY2xrKTsKKwkgIGlmICgoY29udHJvbF9zZXR1cC5ldmVuX29kZF9wYXJpdHkgJiYgKHJ4ZCA9PSBwYXJpdHkpKSB8fAorCSAgICAgKCFjb250cm9sX3NldHVwLmV2ZW5fb2RkX3Bhcml0eSAmJiAocnhkICE9IHBhcml0eSkpKQorCSAgICAgYmVnaW4KKwkJJGRpc3BsYXkgKCIlbTogPj4+Pj4gIFBhcml0eSBFcnJvciIpOwkKKyAJCS0+IGVycm9yX2RldGVjdGVkOworCQktPiB1YXJ0X3Bhcml0eV9lcnJvcjsKKwkgICAgIGVuZAorCWVuZAorCisvLyBzdG9wIGN5Y2xlIDEKKyAgICAgICAgQChwb3NlZGdlIHVhcnRfcnhfY2xrKTsJCisJICBpZiAoIXJ4ZCkKKwkgICAgIGJlZ2luCisJCSRkaXNwbGF5ICgiJW06ID4+Pj4+ICBTdG9wIHNpZ25hbCAxIEVycm9yIik7CQorIAkJLT4gZXJyb3JfZGV0ZWN0ZWQ7CisJCS0+IHVhcnRfc3RvcF9lcnJvcjE7CisJICAgICBlbmQKKworLy8gc3RvcCBjeWNsZSAyCisJaWYgKGNvbnRyb2xfc2V0dXAuc3RvcF9iaXRfbnVtYmVyKQorCWJlZ2luCisJICAgICAgQChwb3NlZGdlIHVhcnRfcnhfY2xrKTsJLy8gc3RvcCBjeWNsZSAyCisJCWlmICghcnhkKQorCQkgIGJlZ2luCisJCSAgICAkZGlzcGxheSAoIiVtOiA+Pj4+PiAgU3RvcCBzaWduYWwgMiBFcnJvciIpOwkKKyAJCSAgICAtPiBlcnJvcl9kZXRlY3RlZDsKKwkJICAgIC0+IHVhcnRfc3RvcF9lcnJvcjI7CisJCSAgZW5kCisJZW5kCisKKwlyZWFkIDw9IDA7CisJLT4gdWFydF9yZWFkX2RvbmU7CisKKwlyeGRfZGF0YSA9IGRhdGE7CisKKworCWlmKGRlYnVnX21vZGUpIGJlZ2luCisJICAgJGRpc3BsYXkgKCIlbTogUmVjZWl2ZWQgRGF0YSAlaCIsIHJ4ZF9kYXRhKTsKKwkgICAkZGlzcGxheSAoIiVtOi4uLiBSZWFkIERhdGEgZnJvbSBVQVJUIGRvbmUgY250IDolZC4uLiIscnhfY291bnQgKzEpOworICAgICAgICBlbmQKKyAgIGVuZAoram9pbgorCitlbmQKKworZW5kdGFzaworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwordGFzayB3cml0ZV9jaGFyOworaW5wdXQgWzc6MF0gZGF0YTsKKworaW50ZWdlciBpOworcmVnIHBhcml0eTsJLy8gMDogb2RkIHBhcml0eSwgMTogZXZlbiBwYXJpdHkKKworYmVnaW4KKwlwYXJpdHkgPD0gICMxIDE7CisKKy8vIHN0YXJ0IGN5Y2xlCisJQChwb3NlZGdlIHVhcnRfY2xrKQorCSBiZWdpbgorCQl0eGQgPD0gIzEgMDsKKwkJd3JpdGUgPD0gIzEgMTsKKwkgZW5kCisKKy8vIGRhdGEgY3ljbGUKKwliZWdpbgorCSAgIGZvciAoaSA9IDA7IGkgPCBkYXRhX2JpdF9udW1iZXI7IGkgPSBpICsgMSkKKwkgICBiZWdpbgorCQlAKHBvc2VkZ2UgdWFydF9jbGspCisJCSAgICB0eGQgPD0gIzEgZGF0YVtpXTsKKwkJcGFyaXR5IDw9IHBhcml0eSBeIGRhdGFbaV07CisJICAgZW5kCisJZW5kCisKKy8vIHBhcml0eSBjeWNsZQorCWlmIChjb250cm9sX3NldHVwLnBhcml0eV9lbikKKwliZWdpbgorCQlAKHBvc2VkZ2UgdWFydF9jbGspCisJCQl0eGQgPD0gIzEgCisvLwkJCQljb250cm9sX3NldHVwLnN0aWNrX3Bhcml0eSA/IH5jb250cm9sX3NldHVwLmV2ZW5fb2RkX3Bhcml0eSA6IAorCQkJCWNvbnRyb2xfc2V0dXAuZXZlbl9vZGRfcGFyaXR5ID8gIXBhcml0eSA6IHBhcml0eTsKKwllbmQKKworLy8gc3RvcCBjeWNsZSAxCisJQChwb3NlZGdlIHVhcnRfY2xrKQorCQl0eGQgPD0gIzEgc3RvcF9lcnJfY2hlY2sgPyAwIDogMTsKKworLy8gc3RvcCBjeWNsZSAyCisJQChwb3NlZGdlIHVhcnRfY2xrKTsKKwkJdHhkIDw9ICMxIDE7CisJaWYgKGRhdGFfYml0X251bWJlciA9PSA1KQorCQlAKG5lZ2VkZ2UgdWFydF9jbGspOworCWVsc2UgaWYgKGNvbnRyb2xfc2V0dXAuc3RvcF9iaXRfbnVtYmVyKQorCQlAKHBvc2VkZ2UgdWFydF9jbGspOworCisJd3JpdGUgPD0gIzEgMDsKKwlpZihkZWJ1Z19tb2RlKQorCSAgICRkaXNwbGF5ICgiJW06Li4uIFdyaXRlIGRhdGEgJWggdG8gVUFSVCBkb25lIGNudCA6ICVkIC4uLlxuIiwgZGF0YSx0eF9jb3VudCsxKTsKKyAgICAgICAgZWxzZQorCSAgICR3cml0ZSAoIiVjIixkYXRhKTsKKwktPiB1YXJ0X3dyaXRlX2RvbmU7CitlbmQKK2VuZHRhc2sKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwordGFzayBjb250cm9sX3NldHVwOworaW5wdXQJICBbMTowXSBkYXRhX2JpdF9zZXQ7CQoraW5wdXQJCXN0b3BfYml0X251bWJlcjsKK2lucHV0CQlwYXJpdHlfZW47CitpbnB1dAkJZXZlbl9vZGRfcGFyaXR5OworaW5wdXQJCXN0aWNrX3Bhcml0eTsKK2lucHV0CSBbMTU6MF0gbWF4dGltZTsKK2lucHV0CSBbMTU6MF0gZGl2aXNvcjsKKworYmVnaW4KKyAgICAgICAgY2xrX2NvdW50ID0gZGl2aXNvcjsJCisJZGF0YV9iaXRfbnVtYmVyID0gZGF0YV9iaXRfc2V0ICsgNTsKK2VuZAorZW5kdGFzaworCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCit0YXNrIHJlcG9ydF9zdGF0dXM7CitvdXRwdXQgCVsxNTowXSByeF9udTsKK291dHB1dCAJWzE1OjBdIHR4X251OworYmVnaW4KKwkkZGlzcGxheSAoIi0tLS0tLS0tLS0tLS0tLS0tLS0tIFVBUlQgUmVwb3J0aW5nIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKwkkZGlzcGxheSAoIglEYXRhIGJpdCBudW1iZXIgc2V0dGluZyBpcyA6ICUwZCIsIGRhdGFfYml0X251bWJlcik7CisJJGRpc3BsYXkgKCIJU3RvcCBiaXQgbnVtYmVyIHNldHRpbmcgaXMgOiAlMGQiLCBjb250cm9sX3NldHVwLnN0b3BfYml0X251bWJlciArIDEpOworCSRkaXNwbGF5ICgiCURpdmlzb3Igb2YgVWFydCBjbG9jayAgIGlzIDogJTBkIiwgY29udHJvbF9zZXR1cC5kaXZpc29yKTsKKwlpZiAoY29udHJvbF9zZXR1cC5wYXJpdHlfZW4pIAorCSRkaXNwbGF5ICgiCVBhcml0eSBpcyBlbmFibGUiKTsKKwllbHNlCisJJGRpc3BsYXkgKCIJUGFyaXR5IGlzIGRpc2FibGUiKTsKKwkKKwlpZiAoY29udHJvbF9zZXR1cC5ldmVuX29kZF9wYXJpdHkpCisJJGRpc3BsYXkgKCIJRXZlbiBwYXJpdHkgc2V0dGluZyIpOworCWVsc2UJCisJJGRpc3BsYXkgKCIJT2RkIHBhcml0eSBzZXR0aW5nIik7CisKKworCSRkaXNwbGF5ICgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKworCSRkaXNwbGF5ICgiLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVwb3J0aW5nIFN0YXR1cyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJJGRpc3BsYXkgKCIJTnVtYmVyIG9mIGNoYXJhY3RlciByZWNlaXZlZCBpcyA6ICVkIiwgcnhfY291bnQpOworCSRkaXNwbGF5ICgiCU51bWJlciBvZiBjaGFyYWN0ZXIgc2VudCAgICAgaXMgOiAlZCIsIHR4X2NvdW50KTsKKwkkZGlzcGxheSAoIglOdW1iZXIgb2YgcGFyaXR5IGVycm9yIHJ4ZCAgIGlzIDogJWQiLCBwYXJfZXJyX2NvdW50KTsKKwkkZGlzcGxheSAoIglOdW1iZXIgb2Ygc3RvcDEgIGVycm9yIHJ4ZCAgIGlzIDogJWQiLCBzdG9wX2VycjFfY250KTsKKwkkZGlzcGxheSAoIglOdW1iZXIgb2Ygc3RvcDIgIGVycm9yIHJ4ZCAgIGlzIDogJWQiLCBzdG9wX2VycjJfY250KTsKKwkkZGlzcGxheSAoIglOdW1iZXIgb2YgdGltZW91dCBlcnJvciAgICAgIGlzIDogJWQiLCB0aW1lb3V0X2Vycl9jbnQpOworCSRkaXNwbGF5ICgiCU51bWJlciBvZiBlcnJvciAgICAgICAgICAgICAgaXMgOiAlZCIsIGVycl9jbnQpOworCSRkaXNwbGF5ICgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKworCXJ4X251ID0gcnhfY291bnQ7CisJdHhfbnUgPSB0eF9jb3VudDsKK2VuZAorZW5kdGFzaworCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYWdlbnRzL3VhcnRfbWFzdGVyX3Rhc2tzLnN2IGIvdmVyaWxvZy9kdi9hZ2VudHMvdWFydF9tYXN0ZXJfdGFza3Muc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBhMWE3ZAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvYWdlbnRzL3VhcnRfbWFzdGVyX3Rhc2tzLnN2CkBAIC0wLDAgKzEsMjAxIEBACisKK3Rhc2sgdWFydG1fcmVnX3dyaXRlOworaW5wdXQgWzMxOjBdIGFkZHI7CitpbnB1dCBbMzE6MF0gZGF0YTsKK3JlZyBbNzowXSByZWFkX2RhdGE7CityZWcgZmxhZzsKK2JlZ2luCisgICBmb3JrCisgICBiZWdpbiA6IGxvb3BfMQorICAgICAgIHRiX21hc3Rlcl91YXJ0LndyaXRlX2NoYXIoInciKTsKKyAgICAgICB0Yl9tYXN0ZXJfdWFydC53cml0ZV9jaGFyKCJtIik7CisgICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcigiICIpOworICAgICAgIHRiX21hc3Rlcl91YXJ0LndyaXRlX2NoYXIoaGV4MmNoYXIoYWRkclszMToyOF0pKTsKKyAgICAgICB0Yl9tYXN0ZXJfdWFydC53cml0ZV9jaGFyKGhleDJjaGFyKGFkZHJbMjc6MjRdKSk7CisgICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzIzOjIwXSkpOworICAgICAgIHRiX21hc3Rlcl91YXJ0LndyaXRlX2NoYXIoaGV4MmNoYXIoYWRkclsxOToxNl0pKTsKKyAgICAgICB0Yl9tYXN0ZXJfdWFydC53cml0ZV9jaGFyKGhleDJjaGFyKGFkZHJbMTU6MTJdKSk7CisgICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzExOjhdKSk7CisgICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzc6NF0pKTsKKyAgICAgICB0Yl9tYXN0ZXJfdWFydC53cml0ZV9jaGFyKGhleDJjaGFyKGFkZHJbMzowXSkpOworICAgICAgIHRiX21hc3Rlcl91YXJ0LndyaXRlX2NoYXIoIiAiKTsKKyAgICAgICB0Yl9tYXN0ZXJfdWFydC53cml0ZV9jaGFyKGhleDJjaGFyKGRhdGFbMzE6MjhdKSk7CisgICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihkYXRhWzI3OjI0XSkpOworICAgICAgIHRiX21hc3Rlcl91YXJ0LndyaXRlX2NoYXIoaGV4MmNoYXIoZGF0YVsyMzoyMF0pKTsKKyAgICAgICB0Yl9tYXN0ZXJfdWFydC53cml0ZV9jaGFyKGhleDJjaGFyKGRhdGFbMTk6MTZdKSk7CisgICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihkYXRhWzE1OjEyXSkpOworICAgICAgIHRiX21hc3Rlcl91YXJ0LndyaXRlX2NoYXIoaGV4MmNoYXIoZGF0YVsxMTo4XSkpOworICAgICAgIHRiX21hc3Rlcl91YXJ0LndyaXRlX2NoYXIoaGV4MmNoYXIoZGF0YVs3OjRdKSk7CisgICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihkYXRhWzM6MF0pKTsKKyAgICAgICB0Yl9tYXN0ZXJfdWFydC53cml0ZV9jaGFyKCJcbiIpOworICAgZW5kCisgICBiZWdpbiA6IGxvb3BfMgorICAgICAgIC8vIFdhaXQgZm9yIHN1Y2VzcyBjb21tYW5kCisgICAgICAgZmxhZyA9IDA7CisgICAgICAgd2hpbGUoZmxhZyA9PSAwKQorICAgICAgIGJlZ2luCisgICAgICAgICAgdGJfbWFzdGVyX3VhcnQucmVhZF9jaGFyMihyZWFkX2RhdGEsZmxhZyk7CisgICAgICAgICAgLy8kd3JpdGUgKCIlYyIscmVhZF9kYXRhKTsKKyAgICAgICBlbmQKKyAgIGVuZAorICAgam9pbgorZW5kCitlbmR0YXNrCisKK3Rhc2sgdWFydG1fcmVnX3JlYWQ7CitpbnB1dCBbMzE6MF0gYWRkcjsKK291dHB1dCBbMzE6MF0gZGF0YTsKK3JlZyBbNzowXSByZWFkX2RhdGE7CityZWcgZmxhZzsKK2ludGVnZXIgaTsKK2JlZ2luCisgICBmb3JrCisgICBiZWdpbiA6IGxvb3BfMQorICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcigiciIpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcigibSIpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcigiICIpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzMxOjI4XSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzI3OjI0XSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzIzOjIwXSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzE5OjE2XSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzE1OjEyXSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzExOjhdKSk7CisgICAgICB0Yl9tYXN0ZXJfdWFydC53cml0ZV9jaGFyKGhleDJjaGFyKGFkZHJbNzo0XSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzM6MF0pKTsKKyAgICAgIHRiX21hc3Rlcl91YXJ0LndyaXRlX2NoYXIoIlxuIik7CisgICBlbmQKKyAgIGJlZ2luIDogbG9vcF8yCisgICAgICAvLyBXYWl0IGZvciBzdWNlc3MgY29tbWFuZAorICAgICAgZmxhZyA9IDA7CisgICAgICBpID0gMDsKKyAgICAgIHdoaWxlKGZsYWcgPT0gMCkKKyAgICAgIGJlZ2luCisgICAgICAgICB0Yl9tYXN0ZXJfdWFydC5yZWFkX2NoYXIyKHJlYWRfZGF0YSxmbGFnKTsKKyAgICAgICAgIC8vJHdyaXRlICgiJWQ6JWMiLGkscmVhZF9kYXRhKTsKKyAgICAgICAgICAgY2FzZSAoaSkKKyAgICAgICAgICAgOCdkMTAgOiBkYXRhWzMxOjI4XSA9IGNoYXIyaGV4KHJlYWRfZGF0YSk7CisgICAgICAgICAgIDgnZDExIDogZGF0YVsyNzoyNF0gPSBjaGFyMmhleChyZWFkX2RhdGEpOworICAgICAgICAgICA4J2QxMiA6IGRhdGFbMjM6MjBdID0gY2hhcjJoZXgocmVhZF9kYXRhKTsKKyAgICAgICAgICAgOCdkMTMgOiBkYXRhWzE5OjE2XSA9IGNoYXIyaGV4KHJlYWRfZGF0YSk7CisgICAgICAgICAgIDgnZDE0IDogZGF0YVsxNToxMl0gPSBjaGFyMmhleChyZWFkX2RhdGEpOworICAgICAgICAgICA4J2QxNSA6IGRhdGFbMTE6OF0gID0gY2hhcjJoZXgocmVhZF9kYXRhKTsKKyAgICAgICAgICAgOCdkMTYgOiBkYXRhWzc6NF0gICA9IGNoYXIyaGV4KHJlYWRfZGF0YSk7CisgICAgICAgICAgIDgnZDE3IDogZGF0YVszOjBdICAgPSBjaGFyMmhleChyZWFkX2RhdGEpOworICAgICAgICAgICBlbmRjYXNlCisJICAgaSA9IGkrMTsKKyAgICAgIGVuZAorICAgZW5kCisgICBqb2luCisgICAkZGlzcGxheSgicmVjZWl2ZWQgRGF0YTogJXgiLGRhdGEpOworCitlbmQKK2VuZHRhc2sKKwordGFzayB1YXJ0bV9yZWdfcmVhZF9jaGVjazsKK2lucHV0IFszMTowXSBhZGRyOworaW5wdXQgWzMxOjBdIGV4cF9kYXRhOworcmVnIFszMTowXSByeGRfZGF0YTsKK3JlZyBbNzowXSByZWFkX2RhdGE7CityZWcgZmxhZzsKK2ludGVnZXIgaTsKK2JlZ2luCisgICBmb3JrCisgICBiZWdpbiA6IGxvb3BfMQorICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcigiciIpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcigibSIpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcigiICIpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzMxOjI4XSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzI3OjI0XSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzIzOjIwXSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzE5OjE2XSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzE1OjEyXSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzExOjhdKSk7CisgICAgICB0Yl9tYXN0ZXJfdWFydC53cml0ZV9jaGFyKGhleDJjaGFyKGFkZHJbNzo0XSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzM6MF0pKTsKKyAgICAgIHRiX21hc3Rlcl91YXJ0LndyaXRlX2NoYXIoIlxuIik7CisgICBlbmQKKyAgIGJlZ2luIDogbG9vcF8yCisgICAgICAvLyBXYWl0IGZvciBzdWNlc3MgY29tbWFuZAorICAgICAgZmxhZyA9IDA7CisgICAgICBpID0gMDsKKyAgICAgIHdoaWxlKGZsYWcgPT0gMCkKKyAgICAgIGJlZ2luCisgICAgICAgICB0Yl9tYXN0ZXJfdWFydC5yZWFkX2NoYXIyKHJlYWRfZGF0YSxmbGFnKTsKKyAgICAgICAgIC8vJHdyaXRlICgiJWQ6JWMiLGkscmVhZF9kYXRhKTsKKyAgICAgICAgICAgY2FzZSAoaSkKKyAgICAgICAgICAgOCdkMTAgOiByeGRfZGF0YVszMToyOF0gPSBjaGFyMmhleChyZWFkX2RhdGEpOworICAgICAgICAgICA4J2QxMSA6IHJ4ZF9kYXRhWzI3OjI0XSA9IGNoYXIyaGV4KHJlYWRfZGF0YSk7CisgICAgICAgICAgIDgnZDEyIDogcnhkX2RhdGFbMjM6MjBdID0gY2hhcjJoZXgocmVhZF9kYXRhKTsKKyAgICAgICAgICAgOCdkMTMgOiByeGRfZGF0YVsxOToxNl0gPSBjaGFyMmhleChyZWFkX2RhdGEpOworICAgICAgICAgICA4J2QxNCA6IHJ4ZF9kYXRhWzE1OjEyXSA9IGNoYXIyaGV4KHJlYWRfZGF0YSk7CisgICAgICAgICAgIDgnZDE1IDogcnhkX2RhdGFbMTE6OF0gID0gY2hhcjJoZXgocmVhZF9kYXRhKTsKKyAgICAgICAgICAgOCdkMTYgOiByeGRfZGF0YVs3OjRdICAgPSBjaGFyMmhleChyZWFkX2RhdGEpOworICAgICAgICAgICA4J2QxNyA6IHJ4ZF9kYXRhWzM6MF0gICA9IGNoYXIyaGV4KHJlYWRfZGF0YSk7CisgICAgICAgICAgIGVuZGNhc2UKKwkgICBpID0gaSsxOworICAgICAgZW5kCisgICBlbmQKKyAgIGpvaW4KKyAgIGlmKHJ4ZF9kYXRhID09IGV4cF9kYXRhKSBiZWdpbgorICAgICAgLy8gJGRpc3BsYXkoIlNUQVRVUzogQUREUkVTUzogJXggUlhEOiAleCIsIGFkZHIscnhkX2RhdGEpOworICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICRkaXNwbGF5KCJFUlJPUjogIEFERFJFU1M6ICV4IEVYUDogJXggUlhEOiAleCIsIGFkZHIsZXhwX2RhdGEscnhkX2RhdGEpOworICAgICAgdGVzdF9mYWlsID0gMTsKKyAgIGVuZAorCisKK2VuZAorZW5kdGFzaworCisvLyBDaGFyYWN0ZXIgdG8gaGV4IG51bWJlcgorZnVuY3Rpb24gWzM6MF0gY2hhcjJoZXg7CitpbnB1dCBbNzowXSBkYXRhX2luOworY2FzZSAoZGF0YV9pbikKKyAgICAgOCdoMzA6CWNoYXIyaGV4ID0gNCdoMDsgLy8gY2hhcmFjdGVyICcwJyAKKyAgICAgOCdoMzE6CWNoYXIyaGV4ID0gNCdoMTsgLy8gY2hhcmFjdGVyICcxJworICAgICA4J2gzMjoJY2hhcjJoZXggPSA0J2gyOyAvLyBjaGFyYWN0ZXIgJzInCisgICAgIDgnaDMzOgljaGFyMmhleCA9IDQnaDM7IC8vIGNoYXJhY3RlciAnMycKKyAgICAgOCdoMzQ6CWNoYXIyaGV4ID0gNCdoNDsgLy8gY2hhcmFjdGVyICc0JyAKKyAgICAgOCdoMzU6CWNoYXIyaGV4ID0gNCdoNTsgLy8gY2hhcmFjdGVyICc1JworICAgICA4J2gzNjoJY2hhcjJoZXggPSA0J2g2OyAvLyBjaGFyYWN0ZXIgJzYnCisgICAgIDgnaDM3OgljaGFyMmhleCA9IDQnaDc7IC8vIGNoYXJhY3RlciAnNycKKyAgICAgOCdoMzg6CWNoYXIyaGV4ID0gNCdoODsgLy8gY2hhcmFjdGVyICc4JworICAgICA4J2gzOToJY2hhcjJoZXggPSA0J2g5OyAvLyBjaGFyYWN0ZXIgJzknCisgICAgIDgnaDQxOgljaGFyMmhleCA9IDQnaEE7IC8vIGNoYXJhY3RlciAnQScKKyAgICAgOCdoNDI6CWNoYXIyaGV4ID0gNCdoQjsgLy8gY2hhcmFjdGVyICdCJworICAgICA4J2g0MzoJY2hhcjJoZXggPSA0J2hDOyAvLyBjaGFyYWN0ZXIgJ0MnCisgICAgIDgnaDQ0OgljaGFyMmhleCA9IDQnaEQ7IC8vIGNoYXJhY3RlciAnRCcKKyAgICAgOCdoNDU6CWNoYXIyaGV4ID0gNCdoRTsgLy8gY2hhcmFjdGVyICdFJworICAgICA4J2g0NjoJY2hhcjJoZXggPSA0J2hGOyAvLyBjaGFyYWN0ZXIgJ0YnCisgICAgIDgnaDYxOgljaGFyMmhleCA9IDQnaEE7IC8vIGNoYXJhY3RlciAnYScKKyAgICAgOCdoNjI6CWNoYXIyaGV4ID0gNCdoQjsgLy8gY2hhcmFjdGVyICdiJworICAgICA4J2g2MzoJY2hhcjJoZXggPSA0J2hDOyAvLyBjaGFyYWN0ZXIgJ2MnCisgICAgIDgnaDY0OgljaGFyMmhleCA9IDQnaEQ7IC8vIGNoYXJhY3RlciAnZCcKKyAgICAgOCdoNjU6CWNoYXIyaGV4ID0gNCdoRTsgLy8gY2hhcmFjdGVyICdlJworICAgICA4J2g2NjoJY2hhcjJoZXggPSA0J2hGOyAvLyBjaGFyYWN0ZXIgJ2YnCisgICAgICBkZWZhdWx0IDogIGNoYXIyaGV4ID0gNCdoRjsKKyAgIGVuZGNhc2UgCitlbmRmdW5jdGlvbgorCisvLyBIZXggdG8gQXNjaSBDaGFyYWN0ZXIgCitmdW5jdGlvbiBbNzowXSBoZXgyY2hhcjsKK2lucHV0IFszOjBdIGRhdGFfaW47CitjYXNlIChkYXRhX2luKQorICAgICA0J2gwOgloZXgyY2hhciA9IDgnaDMwOyAvLyBjaGFyYWN0ZXIgJzAnIAorICAgICA0J2gxOgloZXgyY2hhciA9IDgnaDMxOyAvLyBjaGFyYWN0ZXIgJzEnCisgICAgIDQnaDI6CWhleDJjaGFyID0gOCdoMzI7IC8vIGNoYXJhY3RlciAnMicKKyAgICAgNCdoMzoJaGV4MmNoYXIgPSA4J2gzMzsgLy8gY2hhcmFjdGVyICczJworICAgICA0J2g0OgloZXgyY2hhciA9IDgnaDM0OyAvLyBjaGFyYWN0ZXIgJzQnIAorICAgICA0J2g1OgloZXgyY2hhciA9IDgnaDM1OyAvLyBjaGFyYWN0ZXIgJzUnCisgICAgIDQnaDY6CWhleDJjaGFyID0gOCdoMzY7IC8vIGNoYXJhY3RlciAnNicKKyAgICAgNCdoNzoJaGV4MmNoYXIgPSA4J2gzNzsgLy8gY2hhcmFjdGVyICc3JworICAgICA0J2g4OgloZXgyY2hhciA9IDgnaDM4OyAvLyBjaGFyYWN0ZXIgJzgnCisgICAgIDQnaDk6CWhleDJjaGFyID0gOCdoMzk7IC8vIGNoYXJhY3RlciAnOScKKyAgICAgNCdoQToJaGV4MmNoYXIgPSA4J2g0MTsgLy8gY2hhcmFjdGVyICdBJworICAgICA0J2hCOgloZXgyY2hhciA9IDgnaDQyOyAvLyBjaGFyYWN0ZXIgJ0InCisgICAgIDQnaEM6CWhleDJjaGFyID0gOCdoNDM7IC8vIGNoYXJhY3RlciAnQycKKyAgICAgNCdoRDoJaGV4MmNoYXIgPSA4J2g0NDsgLy8gY2hhcmFjdGVyICdEJworICAgICA0J2hFOgloZXgyY2hhciA9IDgnaDQ1OyAvLyBjaGFyYWN0ZXIgJ0UnCisgICAgIDQnaEY6CWhleDJjaGFyID0gOCdoNDY7IC8vIGNoYXJhY3RlciAnRicKKyAgIGVuZGNhc2UgCitlbmRmdW5jdGlvbgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9maXJtd2FyZS9MSUNFTlNFIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZmU1MjIKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2Zpcm13YXJlL0xJQ0VOU0UKQEAgLTAsMCArMSwyNCBAQAorQ29weXJpZ2h0IChjKSAyMDEyLTIwMTUsIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgKFJlZ2VudHMpLgorQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFJlZ2VudHMgbm9yIHRoZQorICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitJTiBOTyBFVkVOVCBTSEFMTCBSRUdFTlRTIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SIERJUkVDVCwgSU5ESVJFQ1QsCitTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIElOQ0xVRElORyBMT1NUIFBST0ZJVFMsIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OLCBFVkVOIElGIFJFR0VOVFMgSEFTCitCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitSRUdFTlRTIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQU5ZIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRS4gVEhFIFNPRlRXQVJFIEFORCBBQ0NPTVBBTllJTkcgRE9DVU1FTlRBVElPTiwgSUYgQU5ZLCBQUk9WSURFRAorSEVSRVVOREVSIElTIFBST1ZJREVEICJBUyBJUyIuIFJFR0VOVFMgSEFTIE5PIE9CTElHQVRJT04gVE8gUFJPVklERQorTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvZmlybXdhcmUvY29tbW9uLm1rIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9jb21tb24ubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAyZDM0NgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvY29tbW9uLm1rCkBAIC0wLDAgKzEsNjYgQEAKKyMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjIC8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhCisjIC8vIAorIyAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgLy8KKyMgLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgLy8KKyMgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMgLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyMgLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisjIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK0FERF9BU01fTUFDUk8gPz0gLURfX0FTU0VNQkxZX189MQorCitGTEFHUyA9IC1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgJChBRERfRkxBR1MpCitGTEFHU19TVFIgPSAiJChGTEFHUykiCisKK0NGTEFHU19DT01NT04gPSAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0kKFRDTSkKK0NGTEFHU19BUkNIID0gLVdhLC1tYXJjaD1ydjMyJChBUkNIKSAtbWFyY2g9cnYzMiQoQVJDSCkgLW1hYmk9JChBQkkpCisKK0NGTEFHUyA6PSAkKEZMQUdTKSAkKEVYVF9DRkxBR1MpIFwKKyQoQ0ZMQUdTX0NPTU1PTikgXAorJChDRkxBR1NfQVJDSCkgXAorLURGTEFHU19TVFI9XCIkKEZMQUdTX1NUUilcIiBcCiskKEFERF9DRkxBR1MpCisKK0xERkxBR1MgICA/PSAtbm9zdGFydGZpbGVzIC1ub3N0ZGxpYiAtbGMgLWxnY2MgLW1hcmNoPXJ2MzIkKEFSQ0gpIC1tYWJpPSQoQUJJKQorCitpZmVxICgsJChmaW5kc3RyaW5nIDAsJChUQ00pKSkKK2xkX3NjcmlwdCA/PSAkKGluY19kaXIpL2xpbmtfdGNtLmxkCithc21fc3JjICAgPz0gY3J0X3RjbS5TCitlbHNlCitsZF9zY3JpcHQgPz0gJChpbmNfZGlyKS9saW5rLmxkCithc21fc3JjICAgPz0gY3J0LlMKK2VuZGlmCisKK1ZQQVRIICs9ICQoc3JjX2RpcikgJChpbmNfZGlyKSAkKEFERF9WUEFUSCkKK2luY3MgICs9IC1JJChzcmNfZGlyKSAtSSQoaW5jX2RpcikgJChBRERfaW5jcykKKworY19vYmpzICAgOj0gJChhZGRwcmVmaXggJChibGRfZGlyKS8sJChwYXRzdWJzdCAlLmMsICUubywgJChjX3NyYykpKQorYXNtX29ianMgOj0gJChhZGRwcmVmaXggJChibGRfZGlyKS8sJChwYXRzdWJzdCAlLlMsICUubywgJChhc21fc3JjKSkpCisKKyQoYmxkX2RpcikvJS5vOiAlLlMKKwkkKFJJU0NWX0dDQykgJChDRkxBR1MpICQoQUREX0FTTV9NQUNSTykgLWMgJChpbmNzKSAkPCAtbyAkQAorCiskKGJsZF9kaXIpLyUubzogJS5jCisJJChSSVNDVl9HQ0MpICQoQ0ZMQUdTKSAtYyAkKGluY3MpICQ8IC1vICRACisKKyQoYmxkX2RpcikvJS5lbGY6ICQobGRfc2NyaXB0KSAkKGNfb2JqcykgJChhc21fb2JqcykKKwkkKFJJU0NWX0dDQykgLW8gJEAgLVQgJF4gJChMREZMQUdTKQorCiskKGJsZF9kaXIpLyUuaGV4OiAkKGJsZF9kaXIpLyUuZWxmCisJJChSSVNDVl9ST01fT0JKQ09QWSkgJF4gJEAKKwkkKFJJU0NWX1JBTV9PQkpDT1BZKSAkXiAkQC5yYW0KKwkjYXNzaWduIDB4MDgwMF8weHh4ICB0byAweDAwMDBfMHh4eCB0byBtYXAgdG8gVENNIE1lbW9yeQorCXNlZCAtaSAncy9AMDgwMDAvQDAwMDAwL2cnICRALnJhbQorCisKKyQoYmxkX2RpcikvJS5kdW1wOiAkKGJsZF9kaXIpLyUuZWxmCisJJChSSVNDVl9PQkpEVU1QKSAkXiA+ICRACmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2Zpcm13YXJlL2NydC5TIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9jcnQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTBjYjZiCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9jcnQuUwpAQCAtMCwwICsxLDE2MCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7ICAgICAgICAvLy8vCisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuICAgICAgIC8vLy8KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAgICAvLy8vCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAgICAgIC8vLy8KKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLi8vLworLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAgICAvLy8vCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+ICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2luY2x1ZGUgInJpc2N2X2Nzcl9lbmNvZGluZy5oIgorI2luY2x1ZGUgInNjX3Rlc3QuaCIKKworIyBkZWZpbmUgTFJFRyBsdworIyBkZWZpbmUgU1JFRyBzdworIyBkZWZpbmUgUkVHQllURVMgNAorCisgICAgLmdsb2JsIF9zdGFydAorICAgIC5nbG9ibCBtYWluCisgICAgLmdsb2JsIHRyYXBfZW50cnkKKyAgICAuZ2xvYmwgaGFuZGxlX3RyYXAKKyAgICAuZ2xvYmwgc2NfZXhpdAorICAgIC53ZWFrIHRyYXBfZW50cnksIGhhbmRsZV90cmFwCisKKyAgICAudGV4dAorICAgIC5vcmcgKDY0KjMpCisgICAgLmJhbGlnbiA2NAorbWFjaGluZV90cmFwX2VudHJ5OgorICAgIGogdHJhcF9lbnRyeQorCisgICAgLmJhbGlnbiA2NAorCitfc3RhcnQ6CisjaWZuZGVmIF9fUlZFX0VYVAorICAgIHplcm9faW50X3JlZ3MgMSwgMzEKKyNlbHNlCisgICAgemVyb19pbnRfcmVncyAxLCAxNQorI2VuZGlmCisgICAgIyBHbG9iYWwgcG9pbnRlciBpbml0CisgICAgLm9wdGlvbiBwdXNoCisgICAgLm9wdGlvbiBub3JlbGF4CisgICAgbGEgICAgZ3AsIF9fZ2xvYmFsX3BvaW50ZXIkCisgICAgLm9wdGlvbiBwb3AKKyAgICAjIGNsZWFyIGJzcworICAgIGxhICAgICAgYTEsIF9fQlNTX1NUQVJUX18KKyAgICBsYSAgICAgIGEyLCBfX0JTU19FTkRfXworICAgIGogICAgICAgNGYKKzM6ICBzdyAgICAgIHplcm8sIDAoYTEpCisgICAgYWRkICAgICBhMSwgYTEsIDQKKzQ6ICBibmUgICAgIGExLCBhMiwgM2IKKyAgICBsYSAgICAgIHNwLCBfX0NfU1RBQ0tfVE9QX18KKworICAgIC8vIFRpbWVyIGluaXQKKyAgICBsaSAgICAgIHQwLCBtdGltZV9jdHJsCisgICAgbGkgICAgICB0MSwgKDEgPDwgWUNSMV9NVElNRV9DVFJMX0VOKSAgIC8vIGVuYWJsZSwgdXNlIGludGVybmFsIGNsb2NrCisgICAgc3cgICAgICB0MSwgKHQwKQorICAgIGxpICAgICAgdDAsIG10aW1lX2RpdgorICAgIGxpICAgICAgdDEsICgxMDAtMSkgICAgICAgICAgICAgICAgICAgICAvLyBkaXZpZGUgYnkgMTAwCisgICAgc3cgICAgICB0MSwgKHQwKQorICAgIGxpICAgICAgdDAsIG10aW1lY21wCisgICAgbGkgICAgICB0MSwgLTEKKyAgICBzdyAgICAgIHQxLCAodDApICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4IHZhbHVlIGZvciBtdGltZWNtcAorICAgIHN3ICAgICAgdDEsIDQodDApCisKKyAgICBsaSAgICAgIGEwLCAwCisgICAgbGkgICAgICBhMSwgMAorICAgIGphbCAgICAgbWFpbgorICAgIGogICAgICAgc2NfZXhpdAorCit0cmFwX2VudHJ5OgorICAgIGFkZGkgc3AsIHNwLCAtMjcyCisKKyAgICBTUkVHIHgxLCAxKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDIsIDIqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MywgMypSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHg0LCA0KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDUsIDUqUkVHQllURVMoc3ApCisgICAgU1JFRyB4NiwgNipSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHg3LCA3KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDgsIDgqUkVHQllURVMoc3ApCisgICAgU1JFRyB4OSwgOSpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgxMCwgMTAqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MTEsIDExKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDEyLCAxMipSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgxMywgMTMqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MTQsIDE0KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDE1LCAxNSpSRUdCWVRFUyhzcCkKKyNpZm5kZWYgX19SVkVfRVhUCisgICAgU1JFRyB4MTYsIDE2KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDE3LCAxNypSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgxOCwgMTgqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MTksIDE5KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDIwLCAyMCpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyMSwgMjEqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MjIsIDIyKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDIzLCAyMypSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyNCwgMjQqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MjUsIDI1KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDI2LCAyNipSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyNywgMjcqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MjgsIDI4KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDI5LCAyOSpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgzMCwgMzAqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MzEsIDMxKlJFR0JZVEVTKHNwKQorI2VuZGlmIC8vIF9fUlZFX0VYVAorCisgICAgY3NyciBhMCwgbWNhdXNlCisgICAgY3NyciBhMSwgbWVwYworICAgIG12IGEyLCBzcAorICAgIGphbCBoYW5kbGVfdHJhcAorCisgICAgTFJFRyB4MSwgMSpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyLCAyKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDMsIDMqUkVHQllURVMoc3ApCisgICAgTFJFRyB4NCwgNCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHg1LCA1KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDYsIDYqUkVHQllURVMoc3ApCisgICAgTFJFRyB4NywgNypSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHg4LCA4KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDksIDkqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MTAsIDEwKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDExLCAxMSpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgxMiwgMTIqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MTMsIDEzKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDE0LCAxNCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgxNSwgMTUqUkVHQllURVMoc3ApCisjaWZuZGVmIF9fUlZFX0VYVAorICAgIExSRUcgeDE2LCAxNipSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgxNywgMTcqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MTgsIDE4KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDE5LCAxOSpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyMCwgMjAqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MjEsIDIxKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDIyLCAyMipSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyMywgMjMqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MjQsIDI0KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDI1LCAyNSpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyNiwgMjYqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MjcsIDI3KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDI4LCAyOCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyOSwgMjkqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MzAsIDMwKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDMxLCAzMSpSRUdCWVRFUyhzcCkKKyNlbmRpZiAvLyBfX1JWRV9FWFQKKworICAgIGFkZGkgc3AsIHNwLCAyNzIKKyAgICBtcmV0CisKK2hhbmRsZV90cmFwOgorICAgIGogU0lNX0VYSVQKKworLy8gZW5kIG9mIGNydC5TCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2Zpcm13YXJlL2NydF90Y20uUyBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvY3J0X3RjbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYmNiNjUKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2Zpcm13YXJlL2NydF90Y20uUwpAQCAtMCwwICsxLDE3MSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7ICAgICAgICAvLy8vCisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuICAgICAgIC8vLy8KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAgICAvLy8vCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAgICAgIC8vLy8KKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLi8vLworLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAgICAvLy8vCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+ICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2luY2x1ZGUgInJpc2N2X2Nzcl9lbmNvZGluZy5oIgorI2luY2x1ZGUgInJlbG9jLmgiCisjaW5jbHVkZSAic2NfdGVzdC5oIgorCisjIGRlZmluZSBMUkVHIGx3CisjIGRlZmluZSBTUkVHIHN3CisjIGRlZmluZSBSRUdCWVRFUyA0CisKKyAgICAuZ2xvYmwgX3N0YXJ0CisgICAgLmdsb2JsIG1haW4KKyAgICAuZ2xvYmwgdHJhcF9lbnRyeQorICAgIC5nbG9ibCBoYW5kbGVfdHJhcAorICAgIC5nbG9ibCBzY19leGl0CisgICAgLndlYWsgdHJhcF9lbnRyeSwgaGFuZGxlX3RyYXAKKworICAgIC5zZWN0aW9uIC50ZXh0LmluaXQKKyAgICAub3JnICg2NCozKQorICAgIC5hbGlnbiA2OworbWFjaGluZV90cmFwX2VudHJ5OgorICAgIGogdHJhcF9lbnRyeQorCisgICAgLmFsaWduIDYKK19zdGFydDoKKyNpZm5kZWYgX19SVkVfRVhUCisgICAgemVyb19pbnRfcmVncyAxLCAzMQorI2Vsc2UKKyAgICB6ZXJvX2ludF9yZWdzIDEsIDE1CisjZW5kaWYKKyAgICAjIEdsb2JhbCBwb2ludGVyIGluaXQKKyAgICAub3B0aW9uIHB1c2gKKyAgICAub3B0aW9uIG5vcmVsYXgKKyAgICBsYSAgICBncCwgX19nbG9iYWxfcG9pbnRlciQKKyAgICAub3B0aW9uIHBvcAorCisgICAgUkVMT0NfUFJPQzsKKworICAgIC8vIGluaXQgdGRhdGEKKyAgICBtdiAgICBhMSwgdHAKKyAgICBsYSAgICBhMiwgX3RkYXRhX2VuZAorICAgIGogICAgIDZmCis1OiAgbHcgICAgYTMsIDAoYTApCisgICAgc3cgICAgYTMsIDAoYTEpCisgICAgYWRkICAgYTAsIGEwLCA0CisgICAgYWRkICAgYTEsIGExLCA0Cis2OiAgYm5lICAgYTAsIGEyLCA1YgorICAgIC8vIGNsZWFyIHRic3MKKyAgICBqICAgICA4ZgorNzogIHN3ICAgIHplcm8sIDAoYTEpCisgICAgYWRkICAgYTEsIGExLCA0Cis4OiAgYm5lICAgYTEsIGE0LCA3YgorCisgICAgLy8gVGltZXIgaW5pdAorICAgIGxpICAgIHQwLCBtdGltZV9jdHJsCisgICAgbGkgICAgdDEsICgxIDw8IFlDUjFfTVRJTUVfQ1RSTF9FTikgICAvLyBlbmFibGUsIHVzZSBpbnRlcm5hbCBjbG9jaworICAgIHN3ICAgIHQxLCAodDApCisgICAgbGkgICAgdDAsIG10aW1lX2RpdgorICAgIGxpICAgIHQxLCAoMTAwLTEpICAgICAgICAgICAgICAgICAgICAgLy8gZGl2aWRlIGJ5IDEwMAorICAgIHN3ICAgIHQxLCAodDApCisgICAgbGkgICAgdDAsIG10aW1lY21wCisgICAgbGkgICAgdDEsIC0xCisgICAgc3cgICAgdDEsICh0MCkgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXggdmFsdWUgZm9yIG10aW1lY21wCisgICAgc3cgICAgdDEsIDQodDApCisKKyAgICBsaSAgICBhMCwgMAorICAgIGxpICAgIGExLCAwCis5OiAgYXVpcGMgdDAsICVwY3JlbF9oaShtYWluKQorICAgIGphbHIgIHQwLCAlcGNyZWxfbG8oOWIpCisgICAgbGEgICAgdDAsIHNjX2V4aXQKKyAgICAvL2ogICAgIHNjX2V4aXQKKwordHJhcF9lbnRyeToKKyAgICBhZGRpIHNwLCBzcCwgLTI3MgorCisgICAgU1JFRyB4MSwgMSpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyLCAyKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDMsIDMqUkVHQllURVMoc3ApCisgICAgU1JFRyB4NCwgNCpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHg1LCA1KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDYsIDYqUkVHQllURVMoc3ApCisgICAgU1JFRyB4NywgNypSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHg4LCA4KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDksIDkqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MTAsIDEwKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDExLCAxMSpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgxMiwgMTIqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MTMsIDEzKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDE0LCAxNCpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgxNSwgMTUqUkVHQllURVMoc3ApCisjaWZuZGVmIF9fUlZFX0VYVAorICAgIFNSRUcgeDE2LCAxNipSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgxNywgMTcqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MTgsIDE4KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDE5LCAxOSpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyMCwgMjAqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MjEsIDIxKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDIyLCAyMipSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyMywgMjMqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MjQsIDI0KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDI1LCAyNSpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyNiwgMjYqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MjcsIDI3KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDI4LCAyOCpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyOSwgMjkqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MzAsIDMwKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDMxLCAzMSpSRUdCWVRFUyhzcCkKKyNlbmRpZiAvLyBfX1JWRV9FWFQKKworICAgIGNzcnIgYTAsIG1jYXVzZQorICAgIGNzcnIgYTEsIG1lcGMKKyAgICBtdiBhMiwgc3AKKyAgICBqYWwgaGFuZGxlX3RyYXAKKworICAgIExSRUcgeDEsIDEqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MiwgMipSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgzLCAzKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDQsIDQqUkVHQllURVMoc3ApCisgICAgTFJFRyB4NSwgNSpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHg2LCA2KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDcsIDcqUkVHQllURVMoc3ApCisgICAgTFJFRyB4OCwgOCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHg5LCA5KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDEwLCAxMCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgxMSwgMTEqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MTIsIDEyKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDEzLCAxMypSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgxNCwgMTQqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MTUsIDE1KlJFR0JZVEVTKHNwKQorI2lmbmRlZiBfX1JWRV9FWFQKKyAgICBMUkVHIHgxNiwgMTYqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MTcsIDE3KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDE4LCAxOCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgxOSwgMTkqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MjAsIDIwKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDIxLCAyMSpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyMiwgMjIqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MjMsIDIzKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDI0LCAyNCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyNSwgMjUqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MjYsIDI2KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDI3LCAyNypSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyOCwgMjgqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MjksIDI5KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDMwLCAzMCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgzMSwgMzEqUkVHQllURVMoc3ApCisjZW5kaWYgLy8gX19SVkVfRVhUCisKKyAgICBhZGRpIHNwLCBzcCwgMjcyCisgICAgbXJldAorCitoYW5kbGVfdHJhcDoKKyAgICBqIFNJTV9FWElUCisKKy8vIGVuZCBvZiBjcnQuUwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9maXJtd2FyZS9jc3IuaCBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvY3NyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc2ZjFmYwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvY3NyLmgKQEAgLTAsMCArMSwxMjggQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAgICAgICAgLy8vLworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAgICAgICAvLy8vCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgICAgLy8vLworLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgICAgICAvLy8vCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4vLy8KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgICAgLy8vLworLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPiAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8gQXJjaGl0ZWN0dXJlIHNwZWNpZmljIENTUidzIGRlZnMgYW5kIGlubGluZXMKKworI2lmbmRlZiBZQ1JfQ1NSX0gKKyNkZWZpbmUgWUNSX0NTUl9ICisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisKKyNkZWZpbmUgX194c3RyaW5naWZ5KHMpIF9fc3RyaW5naWZ5KHMpCisjZGVmaW5lIF9fc3RyaW5naWZ5KHMpICNzCisKKyNpZmRlZiByZWFkX2NzcgorI3VuZGVmIHJlYWRfY3NyCisjZW5kaWYKKworI2lmZGVmIHdyaXRlX2NzcgorI3VuZGVmIHdyaXRlX2NzcgorI2VuZGlmCisKKyNpZmRlZiBzd2FwX2NzcgorI3VuZGVmIHN3YXBfY3NyCisjZW5kaWYKKworI2lmZGVmIHNldF9jc3IKKyN1bmRlZiBzZXRfY3NyCisjZW5kaWYKKworI2lmZGVmIGNsZWFyX2NzcgorI3VuZGVmIGNsZWFyX2NzcgorI2VuZGlmCisKKyNpZmRlZiByZHRpbWUKKyN1bmRlZiByZHRpbWUKKyNlbmRpZgorCisjaWZkZWYgcmRjeWNsZQorI3VuZGVmIHJkY3ljbGUKKyNlbmRpZgorCisjaWZkZWYgcmRpbnN0cmV0CisjdW5kZWYgcmRpbnN0cmV0CisjZW5kaWYKKworI2RlZmluZSByZWFkX2NzcihyZWcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdW5zaWduZWQgbG9uZyBfX3RtcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBhc20gdm9sYXRpbGUgKCJjc3JyICUwLCAiIF9feHN0cmluZ2lmeShyZWcpIDogIj1yIihfX3RtcCkpOyBcCisgICAgICAgIF9fdG1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9KQorCisjZGVmaW5lIHdyaXRlX2NzcihyZWcsIHZhbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCh2YWwpICYmICh2YWwpID09IDApICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJjc3J3ICIgX194c3RyaW5naWZ5KHJlZykgIiwgemVybyIgOjopOyAgICAgICBcCisgICAgICAgIGVsc2UgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHZhbCkgJiYgKHVuc2lnbmVkIGxvbmcpKHZhbCkgPCAzMikgXAorICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY3NydyAiIF9feHN0cmluZ2lmeShyZWcpICIsICUwIiA6OiAiaSIodmFsKSk7IFwKKyAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGFzbSB2b2xhdGlsZSAoImNzcncgIiBfX3hzdHJpbmdpZnkocmVnKSAiLCAlMCIgOjogInIiKHZhbCkpOyBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBzd2FwX2NzcihyZWcsIHZhbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB1bnNpZ25lZCBsb25nIF9fdG1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AodmFsKSAmJiAodmFsKSA9PSAwKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY3NycncgJTAsICIgX194c3RyaW5naWZ5KHJlZykgIiwgemVybyIgOiAgIj1yIihfX3RtcCkgOik7IFwKKyAgICAgICAgZWxzZSBpZiAoX19idWlsdGluX2NvbnN0YW50X3AodmFsKSAmJiAodW5zaWduZWQgbG9uZykodmFsKSA8IDMyKSBcCisgICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJjc3JydyAlMCwgIiBfX3hzdHJpbmdpZnkocmVnKSAiLCAlMSIgOiAiPXIiKF9fdG1wKSA6ICJpIih2YWwpKTsgXAorICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY3NycncgJTAsICIgX194c3RyaW5naWZ5KHJlZykgIiwgJTEiIDogIj1yIihfX3RtcCkgOiAiciIodmFsKSk7IFwKKyAgICAgICAgX190bXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9KQorCisjZGVmaW5lIHNldF9jc3IocmVnLCBiaXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHVuc2lnbmVkIGxvbmcgX190bXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChiaXQpICYmIChiaXQpIDwgMzIpICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJjc3JycyAlMCwgIiBfX3hzdHJpbmdpZnkocmVnKSAiLCAlMSIgOiAiPXIiKF9fdG1wKSA6ICJpIihiaXQpKTsgXAorICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY3NycnMgJTAsICIgX194c3RyaW5naWZ5KHJlZykgIiwgJTEiIDogIj1yIihfX3RtcCkgOiAiciIoYml0KSk7IFwKKyAgICAgICAgX190bXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9KQorCisjZGVmaW5lIGNsZWFyX2NzcihyZWcsIGJpdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHVuc2lnbmVkIGxvbmcgX190bXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChiaXQpICYmIChiaXQpIDwgMzIpICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJjc3JyYyAlMCwgIiBfX3hzdHJpbmdpZnkocmVnKSAiLCAlMSIgOiAiPXIiKF9fdG1wKSA6ICJpIihiaXQpKTsgXAorICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY3NycmMgJTAsICIgX194c3RyaW5naWZ5KHJlZykgIiwgJTEiIDogIj1yIihfX3RtcCkgOiAiciIoYml0KSk7IFwKKyAgICAgICAgX190bXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9KQorCisjZGVmaW5lIHJkdGltZSgpIHJlYWRfY3NyKHRpbWUpCisjZGVmaW5lIHJkY3ljbGUoKSByZWFkX2NzcihjeWNsZSkKKyNkZWZpbmUgcmRpbnN0cmV0KCkgcmVhZF9jc3IoaW5zdHJldCkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fYXR0cmlidXRlX18oKGNvbnN0KSkgY3B1aWQoKQoreworICB1bnNpZ25lZCBsb25nIHJlczsKKyAgYXNtICgiY3NyciAlMCwgbWNwdWlkIiA6ICI9ciIocmVzKSk7CisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2F0dHJpYnV0ZV9fKChjb25zdCkpIGltcGlkKCkKK3sKKyAgdW5zaWduZWQgbG9uZyByZXM7CisgIGFzbSAoImNzcnIgJTAsIG1pbXBpZCIgOiAiPXIiKHJlcykpOworICByZXR1cm4gcmVzOworfQorCisjZW5kaWYgLy8gWUNSX0NTUl9ICmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2Zpcm13YXJlL2xpbmsubGQgYi92ZXJpbG9nL2R2L2Zpcm13YXJlL2xpbmsubGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIyMzYzZAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvbGluay5sZApAQCAtMCwwICsxLDExOCBAQAorLyoKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAgICAgICAgLy8vLworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAgICAgICAvLy8vCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgICAgLy8vLworLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgICAgICAvLy8vCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4vLy8KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgICAgLy8vLworLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPiAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisqKi8KKy8qCisqIEBicmllZiAgICAgIGJhcmUgbWV0YWwgdGVzdHMnIGxpbmtlciBzY3JpcHQKKyovCisKK09VVFBVVF9BUkNIKCAicmlzY3YiICkKK0VOVFJZKF9zdGFydCkKKworTUVNT1JZIHsKKyAgUk9NIChyeHgpIDogT1JJR0lOID0gMHgwLCBMRU5HVEggPSA2NEsKKyAgUkFNIChyd3gpIDogT1JJR0lOID0gMHgwODAwMDAwMCwgTEVOR1RIID0gNjRLCisgIFRDTSAocnd4KSA6IE9SSUdJTiA9IDB4MEM0ODAwMDAsIExFTkdUSCA9IDJLCit9CisKK1NUQUNLX1NJWkUgPSAxMDI0OworCitDTF9TSVpFID0gMzI7CisKK1NFQ1RJT05TIHsKKworICAvKiBjb2RlIHNlZ21lbnQgKi8KKyAgLnRleHQuaW5pdCAwIDogeyAKKyAgICBGSUxMKDApOworICAgIC4gPSAweDEwMCAtIDEyOworICAgIFNJTV9FWElUID0gLjsKKyAgICBMT05HKDB4MTMpOworICAgIFNJTV9TVE9QID0gLjsKKyAgICBMT05HKDB4NkYpOworICAgIExPTkcoLTEpOworICAgIC4gPSAweDEwMDsKKyAgICBQUk9WSURFKF9fVEVYVF9TVEFSVF9fID0gLik7CisgICAgKigudGV4dC5pbml0KSAKKyAgfSA+Uk9NCisKKyAgLnRleHQgIDogeworICAgICpjcnQubygudGV4dCAudGV4dC4qKQorICAgICooLnRleHQgLnRleHQuKikKKyAgICAqKHNjX3Rlc3Rfc2VjdGlvbikKKyAgICAuID0gQUxJR04oQ0xfU0laRSk7CisgICAgIFBST1ZJREUoX19URVhUX0VORF9fID0gLik7CisgIH0gPlJPTQorCisgIC8qIGRhdGEgc2VnbWVudCAqLworICAuZGF0YSA6IHsKKyAgICAqKC5kYXRhIC5kYXRhLiopCisgICAgLiA9IEFMSUdOKENMX1NJWkUpOworICB9ID5SQU0KKworICAuc2RhdGEgOiB7CisgICAgX19nbG9iYWxfcG9pbnRlciQgPSAuICsgMHg4MDA7CisgICAgKiguc3JvZGF0YS5jc3QxNikgKiguc3JvZGF0YS5jc3Q4KSAqKC5zcm9kYXRhLmNzdDQpICooLnNyb2RhdGEuY3N0MikgKiguc3JvZGF0YSopCisgICAgKiguc2RhdGEgLnNkYXRhLiogLmdudS5saW5rb25jZS5zLiopCisgICAgLiA9IEFMSUdOKENMX1NJWkUpOworICB9ID5SQU0KKworICAvKiB0aHJlYWQtbG9jYWwgZGF0YSBzZWdtZW50ICovCisgIC50ZGF0YSA6IHsKKyAgICBQUk9WSURFKF90bHNfZGF0YSA9IC4pOworICAgIFBST1ZJREUoX3RkYXRhX2JlZ2luID0gLik7CisgICAgKigudGRhdGEgLnRkYXRhLiopCisgICAgUFJPVklERShfdGRhdGFfZW5kID0gLik7CisgICAgLiA9IEFMSUdOKENMX1NJWkUpOworICB9ID5SQU0KKworICAudGJzcyA6IHsKKyAgICBQUk9WSURFKF9fQlNTX1NUQVJUX18gPSAuKTsKKyAgICAqKC50YnNzIC50YnNzLiopCisgICAgLiA9IEFMSUdOKENMX1NJWkUpOworICAgIFBST1ZJREUoX3Ric3NfZW5kID0gLik7CisgIH0gPlJBTQorCisgIC8qIGJzcyBzZWdtZW50ICovCisgIC5zYnNzIDogeworICAgICooLnNic3MgLnNic3MuKiAuZ251LmxpbmtvbmNlLnNiLiopCisgICAgKiguc2NvbW1vbikKKyAgfSA+UkFNCisKKyAgLmJzcyA6IHsKKyAgICAqKC5ic3MgLmJzcy4qKQorICAgIC4gPSBBTElHTihDTF9TSVpFKTsKKyAgICBQUk9WSURFKF9fQlNTX0VORF9fID0gLik7CisgIH0gPlJBTQorCisgIF9lbmQgPSAuOworICBQUk9WSURFKF9fZW5kID0gLik7CisKKyAgLyogRW5kIG9mIHVuaW5pdGFsaXplZCBkYXRhIHNlZ2VtZW50ICovCisKKyAgLnN0YWNrIE9SSUdJTihUQ00pICsgTEVOR1RIKFRDTSkgLSBTVEFDS19TSVpFIDogeworICAgIEZJTEwoMCk7CisgICAgUFJPVklERShfX1NUQUNLX1NUQVJUX18gPSAuKTsKKyAgICAuICs9IFNUQUNLX1NJWkU7CisgICAgUFJPVklERShfX0NfU1RBQ0tfVE9QX18gPSAuKTsKKyAgICBQUk9WSURFKF9fU1RBQ0tfRU5EX18gPSAuKTsKKyAgfSA+VENNCisKKyAgL0RJU0NBUkQvIDogeworICAgICooLmVoX2ZyYW1lIC5laF9mcmFtZS4qKQorICB9Cit9CmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2Zpcm13YXJlL2xpbmtfdGNtLmxkIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9saW5rX3RjbS5sZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjA5ODgxCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9saW5rX3RjbS5sZApAQCAtMCwwICsxLDEzMSBAQAorLyoqCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgICAgICAgIC8vLy8KKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gICAgICAgLy8vLworLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlICAgIC8vLy8KKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsICAgICAgLy8vLworLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuLy8vCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kICAgIC8vLy8KKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4gICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKi8KKy8qCisqIEBicmllZiAgICAgIGJhcmUgbWV0YWwgdGVzdHMnIGxpbmtlciBzY3JpcHQKKyovCisKK09VVFBVVF9BUkNIKCAicmlzY3YiICkKK0VOVFJZKF9zdGFydCkKKworTUVNT1JZIHsKKyAgUk9NIChyeHgpIDogT1JJR0lOID0gMHgwLCBMRU5HVEggPSA2NEsKKyAgVENNIChyd3gpIDogT1JJR0lOID0gMHgwMDQ4MDAwMCwgTEVOR1RIID0gNEsKK30KKworU1RBQ0tfU0laRSA9IDI1NjsKKworQ0xfU0laRSA9IDMyOworCitTRUNUSU9OUyB7CisKKyAgLyogY29kZSBzZWdtZW50ICovCisgIC50ZXh0LmluaXQgT1JJR0lOKFJPTSkgOiB7IAorICAgIEZJTEwoMCk7CisgICAgLiA9IDB4MTAwIC0gMTI7CisgICAgU0lNX0VYSVQgPSAuOworICAgIExPTkcoMHgxMyk7CisgICAgU0lNX1NUT1AgPSAuOworICAgIExPTkcoMHg2Rik7CisgICAgTE9ORygtMSk7CisgICAgLiA9IDB4MTAwOworICAgICpjcnRfdGNtLm8oLnRleHQgLnRleHQuKikKKyAgICAqKC50ZXh0LmluaXQpCisgICAgLiA9IEFMSUdOKENMX1NJWkUpOworICB9ID5ST00KKworICBfX3JlbG9jX3N0YXJ0ID0gLjsKKworICAudGV4dCA6IHsKKyAgICBQUk9WSURFKF9fVEVYVF9TVEFSVF9fID0gLik7CisgICAgKigudGV4dCAudGV4dC4qKQorICAgICooc2NfdGVzdF9zZWN0aW9uKQorICAgIC4gPSBBTElHTihDTF9TSVpFKTsKKyAgICAgUFJPVklERShfX1RFWFRfRU5EX18gPSAuKTsKKyAgfSA+VENNIEFUPlJPTQorCisKKyAgLnJvZGF0YSBBTElHTihDTF9TSVpFKSA6IHsKKyAgICBfX2dsb2JhbF9wb2ludGVyJCA9IC4gKyAweDgwMDsKKyAgICAqKC5yb2RhdGEpICooLnJvZGF0YS4qKSAqKC5nbnUubGlua29uY2Uuci4qKQorICAgIC4gPSBBTElHTihDTF9TSVpFKTsKKyAgICBMT05HKDB4MTMpOworICAgIC4gPSBBTElHTihDTF9TSVpFKTsKKyAgfSA+VENNIEFUPlJPTQorCisKKyAgLyogZGF0YSBzZWdtZW50ICovCisgIC5kYXRhIEFMSUdOKENMX1NJWkUpIDogeworICAgIFBST1ZJREUoX19EQVRBX1NUQVJUX18gPSAuKTsKKyAgICAqKC5kYXRhIC5kYXRhLiopCisgICAgLiA9IEFMSUdOKENMX1NJWkUpOworICB9ID5UQ00gCisgIAorICAuc2RhdGEgQUxJR04oQ0xfU0laRSkgOiB7CisgICAgKiguc2RhdGEgLnNkYXRhLiogLmdudS5saW5rb25jZS5zLiopCisgICAgLiA9IEFMSUdOKENMX1NJWkUpOworICAgIFBST1ZJREUoX19EQVRBX0VORF9fID0gLik7CisgIH0gPlRDTQorCisgIC8qIHRocmVhZC1sb2NhbCBkYXRhIHNlZ21lbnQgKi8KKyAgLnRkYXRhIEFMSUdOKENMX1NJWkUpIDogeworICAgIFBST1ZJREUoX3Rsc19kYXRhID0gLik7CisgICAgUFJPVklERShfdGRhdGFfYmVnaW4gPSAuKTsKKyAgICAqKC50ZGF0YSAudGRhdGEuKikKKyAgICBQUk9WSURFKF90ZGF0YV9lbmQgPSAuKTsKKyAgICAuID0gQUxJR04oQ0xfU0laRSk7CisgIH0gPlRDTQorCisgIC50YnNzIEFMSUdOKENMX1NJWkUpIDogeworICAgIFBST1ZJREUoX3Ric3NfYmVnaW4gPSAuKTsKKyAgICAqKC50YnNzIC50YnNzLiopCisgICAgLiA9IEFMSUdOKENMX1NJWkUpOworICAgIFBST1ZJREUoX3Ric3NfZW5kID0gLik7CisgIH0gPlRDTQorCisgIC8qIGJzcyBzZWdtZW50ICovCisgIC5zYnNzIEFMSUdOKENMX1NJWkUpIDogeworICAgIFBST1ZJREUoX19CU1NfU1RBUlRfXyA9IC4pOworICAgICooLnNic3MgLnNic3MuKiAuZ251LmxpbmtvbmNlLnNiLiopCisgICAgKiguc2NvbW1vbikKKyAgICAuID0gQUxJR04oQ0xfU0laRSk7CisgIH0gPlRDTQorCisgIC5ic3MgQUxJR04oQ0xfU0laRSkgOiB7CisgICAgKiguZHluYnNzKSAqKC5ic3MgLmJzcy4qIC5nbnUubGlua29uY2UuYi4qKSAqKENPTU1PTikKKyAgICAuID0gQUxJR04oQ0xfU0laRSk7CisgICAgUFJPVklERShfX0JTU19FTkRfXyA9IC4pOworICB9ID5UQ00KKworICBfZW5kID0gLjsKKyAgUFJPVklERShfX2VuZCA9IC4pOworCisgIC8qIEVuZCBvZiB1bmluaXRhbGl6ZWQgZGF0YSBzZWdlbWVudCAqLworCisgIC5zdGFjayBPUklHSU4oVENNKSArIExFTkdUSChUQ00pIC0gU1RBQ0tfU0laRSA6IHsKKyAgICBQUk9WSURFKF9fU1RBQ0tfU1RBUlRfXyA9IC4pOworICAgIC4gKz0gU1RBQ0tfU0laRTsKKyAgICBQUk9WSURFKF9fQ19TVEFDS19UT1BfXyA9IC4pOworICAgIFBST1ZJREUoX19TVEFDS19FTkRfXyA9IC4pOworICB9ID5UQ00KKworICAvRElTQ0FSRC8gOiB7CisgICAgKiguZWhfZnJhbWUgLmVoX2ZyYW1lLiopCisgIH0KK30KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvZmlybXdhcmUvcmVsb2MuaCBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvcmVsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzgxNjdlCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9yZWxvYy5oCkBAIC0wLDAgKzEsNTYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAgICAgICAgLy8vLworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAgICAgICAvLy8vCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgICAgLy8vLworLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgICAgICAvLy8vCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4vLy8KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgICAgLy8vLworLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPiAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKworI2lmbmRlZiBSRUxPQ19ICisjZGVmaW5lIFJFTE9DX0gKKworI2lmIChUQ00gPT0gMSkKKyNkZWZpbmUgUkVMT0NfUFJPQyAgICAgICAgICAgICAgXAorICAgIGxhICAgIGEwLCBfX3JlbG9jX3N0YXJ0OyAgICBcCisgICAgbGEgICAgYTEsIF9fVEVYVF9TVEFSVF9fOyAgIFwKKyAgICBsYSAgICBhMiwgX19EQVRBX0VORF9fOyAgICAgXAorICAgIGJlcSAgIGEwLCBhMSwgMjFmOyAgICAgICAgICBcCisgICAgaiAgICAgMmY7ICAgICAgICAgICAgICAgICAgIFwKKzE6ICBsdyAgICBhMywgMChhMCk7ICAgICAgICAgICAgXAorICAgIHN3ICAgIGEzLCAwKGExKTsgICAgICAgICAgICBcCisgICAgYWRkICAgYTAsIGEwLCA0OyAgICAgICAgICAgIFwKKyAgICBhZGQgICBhMSwgYTEsIDQ7ICAgICAgICAgICAgXAorMjogIGJuZSAgIGExLCBhMiwgMWI7ICAgICAgICAgICBcCisgICAgLyogY2xlYXIgYnNzICovICAgICAgICAgICAgIFwKKyAgICBsYSAgICBhMiwgX19CU1NfU1RBUlRfXzsgICAgXAorMjE6IGxhICAgIGExLCBfX0JTU19FTkRfXzsgICAgICBcCisgICAgaiAgICAgNGY7ICAgICAgICAgICAgICAgICAgIFwKKzM6ICBzdyAgICB6ZXJvLCAwKGEyKTsgICAgICAgICAgXAorICAgIGFkZCAgIGEyLCBhMiwgNDsgICAgICAgICAgICBcCis0OiAgYm5lICAgYTEsIGEyLCAzYjsgICAgICAgICAgIFwKKyAgICAvKiBpbml0IHN0YWNrICovICAgICAgICAgICAgXAorICAgIGxhICAgIHNwLCBfX0NfU1RBQ0tfVE9QX187ICBcCisgICAgLyogaW5pdCBoYXJ0MCBUTFMgKi8gICAgICAgIFwKKyAgICBsYSAgICBhMCwgX3RkYXRhX2JlZ2luOyAgICAgXAorICAgIGxhICAgIGEyLCBfdGJzc19lbmQ7ICAgICAgICBcCisgICAgc3ViICAgYTEsIGEyLCBhMDsgICAgICAgICAgIFwKKyAgICBsYSAgICBhNCwgX19TVEFDS19TVEFSVF9fOyAgXAorICAgIHN1YiAgIHRwLCBhNCwgYTE7ICAgCisjZWxzZSAgLy8gI2lmIFRDTQorCisjZGVmaW5lIFJFTE9DX1BST0MKKworI2VuZGlmICAvLyAjZWxzZSAjaWYgVENNCisKKyNlbmRpZiAgLy8gCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2Zpcm13YXJlL3Jpc2N2X2Nzcl9lbmNvZGluZy5oIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9yaXNjdl9jc3JfZW5jb2RpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWY1YWJiCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9yaXNjdl9jc3JfZW5jb2RpbmcuaApAQCAtMCwwICsxLDE0ODkgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAgICAgICAgLy8vLworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAgICAgICAvLy8vCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgICAgLy8vLworLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgICAgICAvLy8vCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4vLy8KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgICAgLy8vLworLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPiAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNpZm5kZWYgUklTQ1ZfQ1NSX0VOQ09ESU5HX0gKKyNkZWZpbmUgUklTQ1ZfQ1NSX0VOQ09ESU5HX0gKKworI2RlZmluZSBNU1RBVFVTX1VJRSAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTVNUQVRVU19TSUUgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIE1TVEFUVVNfSElFICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBNU1RBVFVTX01JRSAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgTVNUQVRVU19VUElFICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIE1TVEFUVVNfU1BJRSAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBNU1RBVFVTX0hQSUUgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgTVNUQVRVU19NUElFICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIE1TVEFUVVNfU1BQICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBNU1RBVFVTX0hQUCAgICAgICAgIDB4MDAwMDA2MDAKKyNkZWZpbmUgTVNUQVRVU19NUFAgICAgICAgICAweDAwMDAxODAwCisjZGVmaW5lIE1TVEFUVVNfRlMgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBNU1RBVFVTX1hTICAgICAgICAgIDB4MDAwMTgwMDAKKyNkZWZpbmUgTVNUQVRVU19NUFJWICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIE1TVEFUVVNfU1VNICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBNU1RBVFVTX01YUiAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgTVNUQVRVU19UVk0gICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIE1TVEFUVVNfVFcgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBNU1RBVFVTX1RTUiAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgTVNUQVRVUzMyX1NEICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIE1TVEFUVVNfVVhMICAgICAgICAgMHgwMDAwMDAwMzAwMDAwMDAwCisjZGVmaW5lIE1TVEFUVVNfU1hMICAgICAgICAgMHgwMDAwMDAwQzAwMDAwMDAwCisjZGVmaW5lIE1TVEFUVVM2NF9TRCAgICAgICAgMHg4MDAwMDAwMDAwMDAwMDAwCisKKyNkZWZpbmUgU1NUQVRVU19VSUUgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNTVEFUVVNfU0lFICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBTU1RBVFVTX1VQSUUgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgU1NUQVRVU19TUElFICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFNTVEFUVVNfU1BQICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBTU1RBVFVTX0ZTICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgU1NUQVRVU19YUyAgICAgICAgICAweDAwMDE4MDAwCisjZGVmaW5lIFNTVEFUVVNfU1VNICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBTU1RBVFVTX01YUiAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgU1NUQVRVUzMyX1NEICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFNTVEFUVVNfVVhMICAgICAgICAgMHgwMDAwMDAwMzAwMDAwMDAwCisjZGVmaW5lIFNTVEFUVVM2NF9TRCAgICAgICAgMHg4MDAwMDAwMDAwMDAwMDAwCisKKyNkZWZpbmUgRENTUl9YREVCVUdWRVIgICAgICAoM1U8PDMwKQorI2RlZmluZSBEQ1NSX05EUkVTRVQgICAgICAgICgxPDwyOSkKKyNkZWZpbmUgRENTUl9GVUxMUkVTRVQgICAgICAoMTw8MjgpCisjZGVmaW5lIERDU1JfRUJSRUFLTSAgICAgICAgKDE8PDE1KQorI2RlZmluZSBEQ1NSX0VCUkVBS0ggICAgICAgICgxPDwxNCkKKyNkZWZpbmUgRENTUl9FQlJFQUtTICAgICAgICAoMTw8MTMpCisjZGVmaW5lIERDU1JfRUJSRUFLVSAgICAgICAgKDE8PDEyKQorI2RlZmluZSBEQ1NSX1NUT1BDWUNMRSAgICAgICgxPDwxMCkKKyNkZWZpbmUgRENTUl9TVE9QVElNRSAgICAgICAoMTw8OSkKKyNkZWZpbmUgRENTUl9DQVVTRSAgICAgICAgICAoNzw8NikKKyNkZWZpbmUgRENTUl9ERUJVR0lOVCAgICAgICAoMTw8NSkKKyNkZWZpbmUgRENTUl9IQUxUICAgICAgICAgICAoMTw8MykKKyNkZWZpbmUgRENTUl9TVEVQICAgICAgICAgICAoMTw8MikKKyNkZWZpbmUgRENTUl9QUlYgICAgICAgICAgICAoMzw8MCkKKworI2RlZmluZSBEQ1NSX0NBVVNFX05PTkUgICAgIDAKKyNkZWZpbmUgRENTUl9DQVVTRV9TV0JQICAgICAxCisjZGVmaW5lIERDU1JfQ0FVU0VfSFdCUCAgICAgMgorI2RlZmluZSBEQ1NSX0NBVVNFX0RFQlVHSU5UIDMKKyNkZWZpbmUgRENTUl9DQVVTRV9TVEVQICAgICA0CisjZGVmaW5lIERDU1JfQ0FVU0VfSEFMVCAgICAgNQorCisjZGVmaW5lIE1DT05UUk9MX1RZUEUoeGxlbikgICAgKDB4ZlVMTDw8KCh4bGVuKS00KSkKKyNkZWZpbmUgTUNPTlRST0xfRE1PREUoeGxlbikgICAoMVVMTDw8KCh4bGVuKS01KSkKKyNkZWZpbmUgTUNPTlRST0xfTUFTS01BWCh4bGVuKSAoMHgzZlVMTDw8KCh4bGVuKS0xMSkpCisKKyNkZWZpbmUgTUNPTlRST0xfU0VMRUNUICAgICAoMTw8MTkpCisjZGVmaW5lIE1DT05UUk9MX1RJTUlORyAgICAgKDE8PDE4KQorI2RlZmluZSBNQ09OVFJPTF9BQ1RJT04gICAgICgweDNmPDwxMikKKyNkZWZpbmUgTUNPTlRST0xfQ0hBSU4gICAgICAoMTw8MTEpCisjZGVmaW5lIE1DT05UUk9MX01BVENIICAgICAgKDB4Zjw8NykKKyNkZWZpbmUgTUNPTlRST0xfTSAgICAgICAgICAoMTw8NikKKyNkZWZpbmUgTUNPTlRST0xfSCAgICAgICAgICAoMTw8NSkKKyNkZWZpbmUgTUNPTlRST0xfUyAgICAgICAgICAoMTw8NCkKKyNkZWZpbmUgTUNPTlRST0xfVSAgICAgICAgICAoMTw8MykKKyNkZWZpbmUgTUNPTlRST0xfRVhFQ1VURSAgICAoMTw8MikKKyNkZWZpbmUgTUNPTlRST0xfU1RPUkUgICAgICAoMTw8MSkKKyNkZWZpbmUgTUNPTlRST0xfTE9BRCAgICAgICAoMTw8MCkKKworI2RlZmluZSBNQ09OVFJPTF9UWVBFX05PTkUgICAgICAwCisjZGVmaW5lIE1DT05UUk9MX1RZUEVfTUFUQ0ggICAgIDIKKworI2RlZmluZSBNQ09OVFJPTF9BQ1RJT05fREVCVUdfRVhDRVBUSU9OICAgMAorI2RlZmluZSBNQ09OVFJPTF9BQ1RJT05fREVCVUdfTU9ERSAgICAgICAgMQorI2RlZmluZSBNQ09OVFJPTF9BQ1RJT05fVFJBQ0VfU1RBUlQgICAgICAgMgorI2RlZmluZSBNQ09OVFJPTF9BQ1RJT05fVFJBQ0VfU1RPUCAgICAgICAgMworI2RlZmluZSBNQ09OVFJPTF9BQ1RJT05fVFJBQ0VfRU1JVCAgICAgICAgNAorCisjZGVmaW5lIE1DT05UUk9MX01BVENIX0VRVUFMICAgICAwCisjZGVmaW5lIE1DT05UUk9MX01BVENIX05BUE9UICAgICAxCisjZGVmaW5lIE1DT05UUk9MX01BVENIX0dFICAgICAgICAyCisjZGVmaW5lIE1DT05UUk9MX01BVENIX0xUICAgICAgICAzCisjZGVmaW5lIE1DT05UUk9MX01BVENIX01BU0tfTE9XICA0CisjZGVmaW5lIE1DT05UUk9MX01BVENIX01BU0tfSElHSCA1CisKKyNkZWZpbmUgTUlQX1NTSVAgICAgICAgICAgICAoMSA8PCBJUlFfU19TT0ZUKQorI2RlZmluZSBNSVBfSFNJUCAgICAgICAgICAgICgxIDw8IElSUV9IX1NPRlQpCisjZGVmaW5lIE1JUF9NU0lQICAgICAgICAgICAgKDEgPDwgSVJRX01fU09GVCkKKyNkZWZpbmUgTUlQX1NUSVAgICAgICAgICAgICAoMSA8PCBJUlFfU19USU1FUikKKyNkZWZpbmUgTUlQX0hUSVAgICAgICAgICAgICAoMSA8PCBJUlFfSF9USU1FUikKKyNkZWZpbmUgTUlQX01USVAgICAgICAgICAgICAoMSA8PCBJUlFfTV9USU1FUikKKyNkZWZpbmUgTUlQX1NFSVAgICAgICAgICAgICAoMSA8PCBJUlFfU19FWFQpCisjZGVmaW5lIE1JUF9IRUlQICAgICAgICAgICAgKDEgPDwgSVJRX0hfRVhUKQorI2RlZmluZSBNSVBfTUVJUCAgICAgICAgICAgICgxIDw8IElSUV9NX0VYVCkKKworI2RlZmluZSBTSVBfU1NJUCBNSVBfU1NJUAorI2RlZmluZSBTSVBfU1RJUCBNSVBfU1RJUAorCisjZGVmaW5lIFBSVl9VIDAKKyNkZWZpbmUgUFJWX1MgMQorI2RlZmluZSBQUlZfSCAyCisjZGVmaW5lIFBSVl9NIDMKKworI2RlZmluZSBTUFRCUjMyX01PREUgMHg4MDAwMDAwMAorI2RlZmluZSBTUFRCUjMyX0FTSUQgMHg3RkMwMDAwMAorI2RlZmluZSBTUFRCUjMyX1BQTiAgMHgwMDNGRkZGRgorI2RlZmluZSBTUFRCUjY0X01PREUgMHhGMDAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIFNQVEJSNjRfQVNJRCAweDBGRkZGMDAwMDAwMDAwMDAKKyNkZWZpbmUgU1BUQlI2NF9QUE4gIDB4MDAwMDBGRkZGRkZGRkZGRgorCisjZGVmaW5lIFNQVEJSX01PREVfT0ZGICAwCisjZGVmaW5lIFNQVEJSX01PREVfU1YzMiAxCisjZGVmaW5lIFNQVEJSX01PREVfU1YzOSA4CisjZGVmaW5lIFNQVEJSX01PREVfU1Y0OCA5CisjZGVmaW5lIFNQVEJSX01PREVfU1Y1NyAxMAorI2RlZmluZSBTUFRCUl9NT0RFX1NWNjQgMTEKKworI2RlZmluZSBQTVBfUiAgICAgMHgwMQorI2RlZmluZSBQTVBfVyAgICAgMHgwMgorI2RlZmluZSBQTVBfWCAgICAgMHgwNAorI2RlZmluZSBQTVBfQSAgICAgMHgxOAorI2RlZmluZSBQTVBfTCAgICAgMHg4MAorI2RlZmluZSBQTVBfU0hJRlQgMgorCisjZGVmaW5lIFBNUF9UT1IgICAweDA4CisjZGVmaW5lIFBNUF9OQTQgICAweDEwCisjZGVmaW5lIFBNUF9OQVBPVCAweDE4CisKKyNkZWZpbmUgSVJRX1NfU09GVCAgIDEKKyNkZWZpbmUgSVJRX0hfU09GVCAgIDIKKyNkZWZpbmUgSVJRX01fU09GVCAgIDMKKyNkZWZpbmUgSVJRX1NfVElNRVIgIDUKKyNkZWZpbmUgSVJRX0hfVElNRVIgIDYKKyNkZWZpbmUgSVJRX01fVElNRVIgIDcKKyNkZWZpbmUgSVJRX1NfRVhUICAgIDkKKyNkZWZpbmUgSVJRX0hfRVhUICAgIDEwCisjZGVmaW5lIElSUV9NX0VYVCAgICAxMQorI2RlZmluZSBJUlFfQ09QICAgICAgMTIKKyNkZWZpbmUgSVJRX0hPU1QgICAgIDEzCisKKyNkZWZpbmUgREVGQVVMVF9SU1RWRUMgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQ0xJTlRfQkFTRSAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQ0xJTlRfU0laRSAgICAgICAgIDB4MDAwYzAwMDAKKyNkZWZpbmUgRVhUX0lPX0JBU0UgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgRFJBTV9CQVNFICAgICAgICAgIDB4ODAwMDAwMDAKKworLy8gcGFnZSB0YWJsZSBlbnRyeSAoUFRFKSBmaWVsZHMKKyNkZWZpbmUgUFRFX1YgICAgIDB4MDAxIC8vIFZhbGlkCisjZGVmaW5lIFBURV9SICAgICAweDAwMiAvLyBSZWFkCisjZGVmaW5lIFBURV9XICAgICAweDAwNCAvLyBXcml0ZQorI2RlZmluZSBQVEVfWCAgICAgMHgwMDggLy8gRXhlY3V0ZQorI2RlZmluZSBQVEVfVSAgICAgMHgwMTAgLy8gVXNlcgorI2RlZmluZSBQVEVfRyAgICAgMHgwMjAgLy8gR2xvYmFsCisjZGVmaW5lIFBURV9BICAgICAweDA0MCAvLyBBY2Nlc3NlZAorI2RlZmluZSBQVEVfRCAgICAgMHgwODAgLy8gRGlydHkKKyNkZWZpbmUgUFRFX1NPRlQgIDB4MzAwIC8vIFJlc2VydmVkIGZvciBTb2Z0d2FyZQorCisjZGVmaW5lIFBURV9QUE5fU0hJRlQgMTAKKworI2RlZmluZSBQVEVfVEFCTEUoUFRFKSAoKChQVEUpICYgKFBURV9WIHwgUFRFX1IgfCBQVEVfVyB8IFBURV9YKSkgPT0gUFRFX1YpCisKKyNpZmRlZiBfX3Jpc2N2CisKKyNpZiBfX3Jpc2N2X3hsZW4gPT0gNjQKKyMgZGVmaW5lIE1TVEFUVVNfU0QgTVNUQVRVUzY0X1NECisjIGRlZmluZSBTU1RBVFVTX1NEIFNTVEFUVVM2NF9TRAorIyBkZWZpbmUgUklTQ1ZfUEdMRVZFTF9CSVRTIDkKKyMgZGVmaW5lIFNQVEJSX01PREUgU1BUQlI2NF9NT0RFCisjZWxzZQorIyBkZWZpbmUgTVNUQVRVU19TRCBNU1RBVFVTMzJfU0QKKyMgZGVmaW5lIFNTVEFUVVNfU0QgU1NUQVRVUzMyX1NECisjIGRlZmluZSBSSVNDVl9QR0xFVkVMX0JJVFMgMTAKKyMgZGVmaW5lIFNQVEJSX01PREUgU1BUQlIzMl9NT0RFCisjZW5kaWYKKyNkZWZpbmUgUklTQ1ZfUEdTSElGVCAxMgorI2RlZmluZSBSSVNDVl9QR1NJWkUgKDEgPDwgUklTQ1ZfUEdTSElGVCkKKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCisKKyNpZmRlZiBfX0dOVUNfXworCisjZGVmaW5lIHJlYWRfY3NyKHJlZykgKHsgdW5zaWduZWQgbG9uZyBfX3RtcDsgXAorICBhc20gdm9sYXRpbGUgKCJjc3JyICUwLCAiICNyZWcgOiAiPXIiKF9fdG1wKSk7IFwKKyAgX190bXA7IH0pCisKKyNkZWZpbmUgd3JpdGVfY3NyKHJlZywgdmFsKSAoeyBcCisgIGFzbSB2b2xhdGlsZSAoImNzcncgIiAjcmVnICIsICUwIiA6OiAicksiKHZhbCkpOyB9KQorCisjZGVmaW5lIHN3YXBfY3NyKHJlZywgdmFsKSAoeyB1bnNpZ25lZCBsb25nIF9fdG1wOyBcCisgIGFzbSB2b2xhdGlsZSAoImNzcnJ3ICUwLCAiICNyZWcgIiwgJTEiIDogIj1yIihfX3RtcCkgOiAicksiKHZhbCkpOyBcCisgIF9fdG1wOyB9KQorCisjZGVmaW5lIHNldF9jc3IocmVnLCBiaXQpICh7IHVuc2lnbmVkIGxvbmcgX190bXA7IFwKKyAgYXNtIHZvbGF0aWxlICgiY3NycnMgJTAsICIgI3JlZyAiLCAlMSIgOiAiPXIiKF9fdG1wKSA6ICJySyIoYml0KSk7IFwKKyAgX190bXA7IH0pCisKKyNkZWZpbmUgY2xlYXJfY3NyKHJlZywgYml0KSAoeyB1bnNpZ25lZCBsb25nIF9fdG1wOyBcCisgIGFzbSB2b2xhdGlsZSAoImNzcnJjICUwLCAiICNyZWcgIiwgJTEiIDogIj1yIihfX3RtcCkgOiAicksiKGJpdCkpOyBcCisgIF9fdG1wOyB9KQorCisjZGVmaW5lIHJkdGltZSgpIHJlYWRfY3NyKHRpbWUpCisjZGVmaW5lIHJkY3ljbGUoKSByZWFkX2NzcihjeWNsZSkKKyNkZWZpbmUgcmRpbnN0cmV0KCkgcmVhZF9jc3IoaW5zdHJldCkKKworI2VuZGlmCisKKyNlbmRpZgorCisjZW5kaWYKKworI2VuZGlmCisvKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBwYXJzZS1vcGNvZGVzLiAgKi8KKyNpZm5kZWYgUklTQ1ZfRU5DT0RJTkdfSAorI2RlZmluZSBSSVNDVl9FTkNPRElOR19ICisjZGVmaW5lIE1BVENIX0JFUSAweDYzCisjZGVmaW5lIE1BU0tfQkVRICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQk5FIDB4MTA2MworI2RlZmluZSBNQVNLX0JORSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0JMVCAweDQwNjMKKyNkZWZpbmUgTUFTS19CTFQgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9CR0UgMHg1MDYzCisjZGVmaW5lIE1BU0tfQkdFICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQkxUVSAweDYwNjMKKyNkZWZpbmUgTUFTS19CTFRVICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQkdFVSAweDcwNjMKKyNkZWZpbmUgTUFTS19CR0VVICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfSkFMUiAweDY3CisjZGVmaW5lIE1BU0tfSkFMUiAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0pBTCAweDZmCisjZGVmaW5lIE1BU0tfSkFMICAweDdmCisjZGVmaW5lIE1BVENIX0xVSSAweDM3CisjZGVmaW5lIE1BU0tfTFVJICAweDdmCisjZGVmaW5lIE1BVENIX0FVSVBDIDB4MTcKKyNkZWZpbmUgTUFTS19BVUlQQyAgMHg3ZgorI2RlZmluZSBNQVRDSF9BRERJIDB4MTMKKyNkZWZpbmUgTUFTS19BRERJICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfU0xMSSAweDEwMTMKKyNkZWZpbmUgTUFTS19TTExJICAweGZjMDA3MDdmCisjZGVmaW5lIE1BVENIX1NMVEkgMHgyMDEzCisjZGVmaW5lIE1BU0tfU0xUSSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX1NMVElVIDB4MzAxMworI2RlZmluZSBNQVNLX1NMVElVICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfWE9SSSAweDQwMTMKKyNkZWZpbmUgTUFTS19YT1JJICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfU1JMSSAweDUwMTMKKyNkZWZpbmUgTUFTS19TUkxJICAweGZjMDA3MDdmCisjZGVmaW5lIE1BVENIX1NSQUkgMHg0MDAwNTAxMworI2RlZmluZSBNQVNLX1NSQUkgIDB4ZmMwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfT1JJIDB4NjAxMworI2RlZmluZSBNQVNLX09SSSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0FOREkgMHg3MDEzCisjZGVmaW5lIE1BU0tfQU5ESSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0FERCAweDMzCisjZGVmaW5lIE1BU0tfQUREICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX1NVQiAweDQwMDAwMDMzCisjZGVmaW5lIE1BU0tfU1VCICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX1NMTCAweDEwMzMKKyNkZWZpbmUgTUFTS19TTEwgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfU0xUIDB4MjAzMworI2RlZmluZSBNQVNLX1NMVCAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9TTFRVIDB4MzAzMworI2RlZmluZSBNQVNLX1NMVFUgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfWE9SIDB4NDAzMworI2RlZmluZSBNQVNLX1hPUiAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9TUkwgMHg1MDMzCisjZGVmaW5lIE1BU0tfU1JMICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX1NSQSAweDQwMDA1MDMzCisjZGVmaW5lIE1BU0tfU1JBICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX09SIDB4NjAzMworI2RlZmluZSBNQVNLX09SICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0FORCAweDcwMzMKKyNkZWZpbmUgTUFTS19BTkQgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQURESVcgMHgxYgorI2RlZmluZSBNQVNLX0FERElXICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfU0xMSVcgMHgxMDFiCisjZGVmaW5lIE1BU0tfU0xMSVcgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfU1JMSVcgMHg1MDFiCisjZGVmaW5lIE1BU0tfU1JMSVcgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfU1JBSVcgMHg0MDAwNTAxYgorI2RlZmluZSBNQVNLX1NSQUlXICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0FERFcgMHgzYgorI2RlZmluZSBNQVNLX0FERFcgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfU1VCVyAweDQwMDAwMDNiCisjZGVmaW5lIE1BU0tfU1VCVyAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9TTExXIDB4MTAzYgorI2RlZmluZSBNQVNLX1NMTFcgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfU1JMVyAweDUwM2IKKyNkZWZpbmUgTUFTS19TUkxXICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX1NSQVcgMHg0MDAwNTAzYgorI2RlZmluZSBNQVNLX1NSQVcgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfTEIgMHgzCisjZGVmaW5lIE1BU0tfTEIgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9MSCAweDEwMDMKKyNkZWZpbmUgTUFTS19MSCAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0xXIDB4MjAwMworI2RlZmluZSBNQVNLX0xXICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfTEQgMHgzMDAzCisjZGVmaW5lIE1BU0tfTEQgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9MQlUgMHg0MDAzCisjZGVmaW5lIE1BU0tfTEJVICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfTEhVIDB4NTAwMworI2RlZmluZSBNQVNLX0xIVSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0xXVSAweDYwMDMKKyNkZWZpbmUgTUFTS19MV1UgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9TQiAweDIzCisjZGVmaW5lIE1BU0tfU0IgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9TSCAweDEwMjMKKyNkZWZpbmUgTUFTS19TSCAgMHg3MDdmCisjZGVmaW5lIE1BVENIX1NXIDB4MjAyMworI2RlZmluZSBNQVNLX1NXICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfU0QgMHgzMDIzCisjZGVmaW5lIE1BU0tfU0QgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9GRU5DRSAweGYKKyNkZWZpbmUgTUFTS19GRU5DRSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0ZFTkNFX0kgMHgxMDBmCisjZGVmaW5lIE1BU0tfRkVOQ0VfSSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX01VTCAweDIwMDAwMzMKKyNkZWZpbmUgTUFTS19NVUwgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfTVVMSCAweDIwMDEwMzMKKyNkZWZpbmUgTUFTS19NVUxIICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX01VTEhTVSAweDIwMDIwMzMKKyNkZWZpbmUgTUFTS19NVUxIU1UgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfTVVMSFUgMHgyMDAzMDMzCisjZGVmaW5lIE1BU0tfTVVMSFUgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRElWIDB4MjAwNDAzMworI2RlZmluZSBNQVNLX0RJViAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9ESVZVIDB4MjAwNTAzMworI2RlZmluZSBNQVNLX0RJVlUgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfUkVNIDB4MjAwNjAzMworI2RlZmluZSBNQVNLX1JFTSAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9SRU1VIDB4MjAwNzAzMworI2RlZmluZSBNQVNLX1JFTVUgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfTVVMVyAweDIwMDAwM2IKKyNkZWZpbmUgTUFTS19NVUxXICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0RJVlcgMHgyMDA0MDNiCisjZGVmaW5lIE1BU0tfRElWVyAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9ESVZVVyAweDIwMDUwM2IKKyNkZWZpbmUgTUFTS19ESVZVVyAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9SRU1XIDB4MjAwNjAzYgorI2RlZmluZSBNQVNLX1JFTVcgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfUkVNVVcgMHgyMDA3MDNiCisjZGVmaW5lIE1BU0tfUkVNVVcgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PQUREX1cgMHgyMDJmCisjZGVmaW5lIE1BU0tfQU1PQUREX1cgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PWE9SX1cgMHgyMDAwMjAyZgorI2RlZmluZSBNQVNLX0FNT1hPUl9XICAweGY4MDA3MDdmCisjZGVmaW5lIE1BVENIX0FNT09SX1cgMHg0MDAwMjAyZgorI2RlZmluZSBNQVNLX0FNT09SX1cgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PQU5EX1cgMHg2MDAwMjAyZgorI2RlZmluZSBNQVNLX0FNT0FORF9XICAweGY4MDA3MDdmCisjZGVmaW5lIE1BVENIX0FNT01JTl9XIDB4ODAwMDIwMmYKKyNkZWZpbmUgTUFTS19BTU9NSU5fVyAgMHhmODAwNzA3ZgorI2RlZmluZSBNQVRDSF9BTU9NQVhfVyAweGEwMDAyMDJmCisjZGVmaW5lIE1BU0tfQU1PTUFYX1cgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PTUlOVV9XIDB4YzAwMDIwMmYKKyNkZWZpbmUgTUFTS19BTU9NSU5VX1cgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PTUFYVV9XIDB4ZTAwMDIwMmYKKyNkZWZpbmUgTUFTS19BTU9NQVhVX1cgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PU1dBUF9XIDB4ODAwMjAyZgorI2RlZmluZSBNQVNLX0FNT1NXQVBfVyAgMHhmODAwNzA3ZgorI2RlZmluZSBNQVRDSF9MUl9XIDB4MTAwMDIwMmYKKyNkZWZpbmUgTUFTS19MUl9XICAweGY5ZjA3MDdmCisjZGVmaW5lIE1BVENIX1NDX1cgMHgxODAwMjAyZgorI2RlZmluZSBNQVNLX1NDX1cgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PQUREX0QgMHgzMDJmCisjZGVmaW5lIE1BU0tfQU1PQUREX0QgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PWE9SX0QgMHgyMDAwMzAyZgorI2RlZmluZSBNQVNLX0FNT1hPUl9EICAweGY4MDA3MDdmCisjZGVmaW5lIE1BVENIX0FNT09SX0QgMHg0MDAwMzAyZgorI2RlZmluZSBNQVNLX0FNT09SX0QgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PQU5EX0QgMHg2MDAwMzAyZgorI2RlZmluZSBNQVNLX0FNT0FORF9EICAweGY4MDA3MDdmCisjZGVmaW5lIE1BVENIX0FNT01JTl9EIDB4ODAwMDMwMmYKKyNkZWZpbmUgTUFTS19BTU9NSU5fRCAgMHhmODAwNzA3ZgorI2RlZmluZSBNQVRDSF9BTU9NQVhfRCAweGEwMDAzMDJmCisjZGVmaW5lIE1BU0tfQU1PTUFYX0QgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PTUlOVV9EIDB4YzAwMDMwMmYKKyNkZWZpbmUgTUFTS19BTU9NSU5VX0QgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PTUFYVV9EIDB4ZTAwMDMwMmYKKyNkZWZpbmUgTUFTS19BTU9NQVhVX0QgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PU1dBUF9EIDB4ODAwMzAyZgorI2RlZmluZSBNQVNLX0FNT1NXQVBfRCAgMHhmODAwNzA3ZgorI2RlZmluZSBNQVRDSF9MUl9EIDB4MTAwMDMwMmYKKyNkZWZpbmUgTUFTS19MUl9EICAweGY5ZjA3MDdmCisjZGVmaW5lIE1BVENIX1NDX0QgMHgxODAwMzAyZgorI2RlZmluZSBNQVNLX1NDX0QgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRUNBTEwgMHg3MworI2RlZmluZSBNQVNLX0VDQUxMICAweGZmZmZmZmZmCisjZGVmaW5lIE1BVENIX0VCUkVBSyAweDEwMDA3MworI2RlZmluZSBNQVNLX0VCUkVBSyAgMHhmZmZmZmZmZgorI2RlZmluZSBNQVRDSF9VUkVUIDB4MjAwMDczCisjZGVmaW5lIE1BU0tfVVJFVCAgMHhmZmZmZmZmZgorI2RlZmluZSBNQVRDSF9TUkVUIDB4MTAyMDAwNzMKKyNkZWZpbmUgTUFTS19TUkVUICAweGZmZmZmZmZmCisjZGVmaW5lIE1BVENIX01SRVQgMHgzMDIwMDA3MworI2RlZmluZSBNQVNLX01SRVQgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgTUFUQ0hfRFJFVCAweDdiMjAwMDczCisjZGVmaW5lIE1BU0tfRFJFVCAgMHhmZmZmZmZmZgorI2RlZmluZSBNQVRDSF9TRkVOQ0VfVk1BIDB4MTIwMDAwNzMKKyNkZWZpbmUgTUFTS19TRkVOQ0VfVk1BICAweGZlMDA3ZmZmCisjZGVmaW5lIE1BVENIX1dGSSAweDEwNTAwMDczCisjZGVmaW5lIE1BU0tfV0ZJICAweGZmZmZmZmZmCisjZGVmaW5lIE1BVENIX0NTUlJXIDB4MTA3MworI2RlZmluZSBNQVNLX0NTUlJXICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1NSUlMgMHgyMDczCisjZGVmaW5lIE1BU0tfQ1NSUlMgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DU1JSQyAweDMwNzMKKyNkZWZpbmUgTUFTS19DU1JSQyAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NTUlJXSSAweDUwNzMKKyNkZWZpbmUgTUFTS19DU1JSV0kgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DU1JSU0kgMHg2MDczCisjZGVmaW5lIE1BU0tfQ1NSUlNJICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1NSUkNJIDB4NzA3MworI2RlZmluZSBNQVNLX0NTUlJDSSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0ZBRERfUyAweDUzCisjZGVmaW5lIE1BU0tfRkFERF9TICAweGZlMDAwMDdmCisjZGVmaW5lIE1BVENIX0ZTVUJfUyAweDgwMDAwNTMKKyNkZWZpbmUgTUFTS19GU1VCX1MgIDB4ZmUwMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRk1VTF9TIDB4MTAwMDAwNTMKKyNkZWZpbmUgTUFTS19GTVVMX1MgIDB4ZmUwMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkRJVl9TIDB4MTgwMDAwNTMKKyNkZWZpbmUgTUFTS19GRElWX1MgIDB4ZmUwMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRlNHTkpfUyAweDIwMDAwMDUzCisjZGVmaW5lIE1BU0tfRlNHTkpfUyAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GU0dOSk5fUyAweDIwMDAxMDUzCisjZGVmaW5lIE1BU0tfRlNHTkpOX1MgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRlNHTkpYX1MgMHgyMDAwMjA1MworI2RlZmluZSBNQVNLX0ZTR05KWF9TICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZNSU5fUyAweDI4MDAwMDUzCisjZGVmaW5lIE1BU0tfRk1JTl9TICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZNQVhfUyAweDI4MDAxMDUzCisjZGVmaW5lIE1BU0tfRk1BWF9TICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZTUVJUX1MgMHg1ODAwMDA1MworI2RlZmluZSBNQVNLX0ZTUVJUX1MgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkFERF9EIDB4MjAwMDA1MworI2RlZmluZSBNQVNLX0ZBRERfRCAgMHhmZTAwMDA3ZgorI2RlZmluZSBNQVRDSF9GU1VCX0QgMHhhMDAwMDUzCisjZGVmaW5lIE1BU0tfRlNVQl9EICAweGZlMDAwMDdmCisjZGVmaW5lIE1BVENIX0ZNVUxfRCAweDEyMDAwMDUzCisjZGVmaW5lIE1BU0tfRk1VTF9EICAweGZlMDAwMDdmCisjZGVmaW5lIE1BVENIX0ZESVZfRCAweDFhMDAwMDUzCisjZGVmaW5lIE1BU0tfRkRJVl9EICAweGZlMDAwMDdmCisjZGVmaW5lIE1BVENIX0ZTR05KX0QgMHgyMjAwMDA1MworI2RlZmluZSBNQVNLX0ZTR05KX0QgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRlNHTkpOX0QgMHgyMjAwMTA1MworI2RlZmluZSBNQVNLX0ZTR05KTl9EICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZTR05KWF9EIDB4MjIwMDIwNTMKKyNkZWZpbmUgTUFTS19GU0dOSlhfRCAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GTUlOX0QgMHgyYTAwMDA1MworI2RlZmluZSBNQVNLX0ZNSU5fRCAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GTUFYX0QgMHgyYTAwMTA1MworI2RlZmluZSBNQVNLX0ZNQVhfRCAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX1NfRCAweDQwMTAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9TX0QgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9EX1MgMHg0MjAwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfRF9TICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZTUVJUX0QgMHg1YTAwMDA1MworI2RlZmluZSBNQVNLX0ZTUVJUX0QgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkFERF9RIDB4NjAwMDA1MworI2RlZmluZSBNQVNLX0ZBRERfUSAgMHhmZTAwMDA3ZgorI2RlZmluZSBNQVRDSF9GU1VCX1EgMHhlMDAwMDUzCisjZGVmaW5lIE1BU0tfRlNVQl9RICAweGZlMDAwMDdmCisjZGVmaW5lIE1BVENIX0ZNVUxfUSAweDE2MDAwMDUzCisjZGVmaW5lIE1BU0tfRk1VTF9RICAweGZlMDAwMDdmCisjZGVmaW5lIE1BVENIX0ZESVZfUSAweDFlMDAwMDUzCisjZGVmaW5lIE1BU0tfRkRJVl9RICAweGZlMDAwMDdmCisjZGVmaW5lIE1BVENIX0ZTR05KX1EgMHgyNjAwMDA1MworI2RlZmluZSBNQVNLX0ZTR05KX1EgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRlNHTkpOX1EgMHgyNjAwMTA1MworI2RlZmluZSBNQVNLX0ZTR05KTl9RICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZTR05KWF9RIDB4MjYwMDIwNTMKKyNkZWZpbmUgTUFTS19GU0dOSlhfUSAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GTUlOX1EgMHgyZTAwMDA1MworI2RlZmluZSBNQVNLX0ZNSU5fUSAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GTUFYX1EgMHgyZTAwMTA1MworI2RlZmluZSBNQVNLX0ZNQVhfUSAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX1NfUSAweDQwMzAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9TX1EgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9RX1MgMHg0NjAwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfUV9TICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfRF9RIDB4NDIzMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX0RfUSAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX1FfRCAweDQ2MTAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9RX0QgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRlNRUlRfUSAweDVlMDAwMDUzCisjZGVmaW5lIE1BU0tfRlNRUlRfUSAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GTEVfUyAweGEwMDAwMDUzCisjZGVmaW5lIE1BU0tfRkxFX1MgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkxUX1MgMHhhMDAwMTA1MworI2RlZmluZSBNQVNLX0ZMVF9TICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZFUV9TIDB4YTAwMDIwNTMKKyNkZWZpbmUgTUFTS19GRVFfUyAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GTEVfRCAweGEyMDAwMDUzCisjZGVmaW5lIE1BU0tfRkxFX0QgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkxUX0QgMHhhMjAwMTA1MworI2RlZmluZSBNQVNLX0ZMVF9EICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZFUV9EIDB4YTIwMDIwNTMKKyNkZWZpbmUgTUFTS19GRVFfRCAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GTEVfUSAweGE2MDAwMDUzCisjZGVmaW5lIE1BU0tfRkxFX1EgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkxUX1EgMHhhNjAwMTA1MworI2RlZmluZSBNQVNLX0ZMVF9RICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZFUV9RIDB4YTYwMDIwNTMKKyNkZWZpbmUgTUFTS19GRVFfUSAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX1dfUyAweGMwMDAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9XX1MgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9XVV9TIDB4YzAxMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX1dVX1MgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9MX1MgMHhjMDIwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfTF9TICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfTFVfUyAweGMwMzAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9MVV9TICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZNVl9YX1cgMHhlMDAwMDA1MworI2RlZmluZSBNQVNLX0ZNVl9YX1cgIDB4ZmZmMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkNMQVNTX1MgMHhlMDAwMTA1MworI2RlZmluZSBNQVNLX0ZDTEFTU19TICAweGZmZjA3MDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfV19EIDB4YzIwMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX1dfRCAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX1dVX0QgMHhjMjEwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfV1VfRCAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX0xfRCAweGMyMjAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9MX0QgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9MVV9EIDB4YzIzMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX0xVX0QgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRk1WX1hfRCAweGUyMDAwMDUzCisjZGVmaW5lIE1BU0tfRk1WX1hfRCAgMHhmZmYwNzA3ZgorI2RlZmluZSBNQVRDSF9GQ0xBU1NfRCAweGUyMDAxMDUzCisjZGVmaW5lIE1BU0tfRkNMQVNTX0QgIDB4ZmZmMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9XX1EgMHhjNjAwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfV19RICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfV1VfUSAweGM2MTAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9XVV9RICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfTF9RIDB4YzYyMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX0xfUSAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX0xVX1EgMHhjNjMwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfTFVfUSAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GTVZfWF9RIDB4ZTYwMDAwNTMKKyNkZWZpbmUgTUFTS19GTVZfWF9RICAweGZmZjA3MDdmCisjZGVmaW5lIE1BVENIX0ZDTEFTU19RIDB4ZTYwMDEwNTMKKyNkZWZpbmUgTUFTS19GQ0xBU1NfUSAgMHhmZmYwNzA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX1NfVyAweGQwMDAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9TX1cgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9TX1dVIDB4ZDAxMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX1NfV1UgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9TX0wgMHhkMDIwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfU19MICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfU19MVSAweGQwMzAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9TX0xVICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZNVl9XX1ggMHhmMDAwMDA1MworI2RlZmluZSBNQVNLX0ZNVl9XX1ggIDB4ZmZmMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9EX1cgMHhkMjAwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfRF9XICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfRF9XVSAweGQyMTAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9EX1dVICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfRF9MIDB4ZDIyMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX0RfTCAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX0RfTFUgMHhkMjMwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfRF9MVSAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GTVZfRF9YIDB4ZjIwMDAwNTMKKyNkZWZpbmUgTUFTS19GTVZfRF9YICAweGZmZjA3MDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfUV9XIDB4ZDYwMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX1FfVyAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX1FfV1UgMHhkNjEwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfUV9XVSAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX1FfTCAweGQ2MjAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9RX0wgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9RX0xVIDB4ZDYzMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX1FfTFUgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRk1WX1FfWCAweGY2MDAwMDUzCisjZGVmaW5lIE1BU0tfRk1WX1FfWCAgMHhmZmYwNzA3ZgorI2RlZmluZSBNQVRDSF9GTFcgMHgyMDA3CisjZGVmaW5lIE1BU0tfRkxXICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkxEIDB4MzAwNworI2RlZmluZSBNQVNLX0ZMRCAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0ZMUSAweDQwMDcKKyNkZWZpbmUgTUFTS19GTFEgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9GU1cgMHgyMDI3CisjZGVmaW5lIE1BU0tfRlNXICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfRlNEIDB4MzAyNworI2RlZmluZSBNQVNLX0ZTRCAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0ZTUSAweDQwMjcKKyNkZWZpbmUgTUFTS19GU1EgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9GTUFERF9TIDB4NDMKKyNkZWZpbmUgTUFTS19GTUFERF9TICAweDYwMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRk1TVUJfUyAweDQ3CisjZGVmaW5lIE1BU0tfRk1TVUJfUyAgMHg2MDAwMDdmCisjZGVmaW5lIE1BVENIX0ZOTVNVQl9TIDB4NGIKKyNkZWZpbmUgTUFTS19GTk1TVUJfUyAgMHg2MDAwMDdmCisjZGVmaW5lIE1BVENIX0ZOTUFERF9TIDB4NGYKKyNkZWZpbmUgTUFTS19GTk1BRERfUyAgMHg2MDAwMDdmCisjZGVmaW5lIE1BVENIX0ZNQUREX0QgMHgyMDAwMDQzCisjZGVmaW5lIE1BU0tfRk1BRERfRCAgMHg2MDAwMDdmCisjZGVmaW5lIE1BVENIX0ZNU1VCX0QgMHgyMDAwMDQ3CisjZGVmaW5lIE1BU0tfRk1TVUJfRCAgMHg2MDAwMDdmCisjZGVmaW5lIE1BVENIX0ZOTVNVQl9EIDB4MjAwMDA0YgorI2RlZmluZSBNQVNLX0ZOTVNVQl9EICAweDYwMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRk5NQUREX0QgMHgyMDAwMDRmCisjZGVmaW5lIE1BU0tfRk5NQUREX0QgIDB4NjAwMDA3ZgorI2RlZmluZSBNQVRDSF9GTUFERF9RIDB4NjAwMDA0MworI2RlZmluZSBNQVNLX0ZNQUREX1EgIDB4NjAwMDA3ZgorI2RlZmluZSBNQVRDSF9GTVNVQl9RIDB4NjAwMDA0NworI2RlZmluZSBNQVNLX0ZNU1VCX1EgIDB4NjAwMDA3ZgorI2RlZmluZSBNQVRDSF9GTk1TVUJfUSAweDYwMDAwNGIKKyNkZWZpbmUgTUFTS19GTk1TVUJfUSAgMHg2MDAwMDdmCisjZGVmaW5lIE1BVENIX0ZOTUFERF9RIDB4NjAwMDA0ZgorI2RlZmluZSBNQVNLX0ZOTUFERF9RICAweDYwMDAwN2YKKyNkZWZpbmUgTUFUQ0hfQ19OT1AgMHgxCisjZGVmaW5lIE1BU0tfQ19OT1AgIDB4ZmZmZgorI2RlZmluZSBNQVRDSF9DX0FEREkxNlNQIDB4NjEwMQorI2RlZmluZSBNQVNLX0NfQURESTE2U1AgIDB4ZWY4MworI2RlZmluZSBNQVRDSF9DX0pSIDB4ODAwMgorI2RlZmluZSBNQVNLX0NfSlIgIDB4ZjA3ZgorI2RlZmluZSBNQVRDSF9DX0pBTFIgMHg5MDAyCisjZGVmaW5lIE1BU0tfQ19KQUxSICAweGYwN2YKKyNkZWZpbmUgTUFUQ0hfQ19FQlJFQUsgMHg5MDAyCisjZGVmaW5lIE1BU0tfQ19FQlJFQUsgIDB4ZmZmZgorI2RlZmluZSBNQVRDSF9DX0xEIDB4NjAwMAorI2RlZmluZSBNQVNLX0NfTEQgIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX1NEIDB4ZTAwMAorI2RlZmluZSBNQVNLX0NfU0QgIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX0FERElXIDB4MjAwMQorI2RlZmluZSBNQVNLX0NfQURESVcgIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX0xEU1AgMHg2MDAyCisjZGVmaW5lIE1BU0tfQ19MRFNQICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19TRFNQIDB4ZTAwMgorI2RlZmluZSBNQVNLX0NfU0RTUCAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NfQURESTRTUE4gMHgwCisjZGVmaW5lIE1BU0tfQ19BRERJNFNQTiAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NfRkxEIDB4MjAwMAorI2RlZmluZSBNQVNLX0NfRkxEICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19MVyAweDQwMDAKKyNkZWZpbmUgTUFTS19DX0xXICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19GTFcgMHg2MDAwCisjZGVmaW5lIE1BU0tfQ19GTFcgIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX0ZTRCAweGEwMDAKKyNkZWZpbmUgTUFTS19DX0ZTRCAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NfU1cgMHhjMDAwCisjZGVmaW5lIE1BU0tfQ19TVyAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NfRlNXIDB4ZTAwMAorI2RlZmluZSBNQVNLX0NfRlNXICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19BRERJIDB4MQorI2RlZmluZSBNQVNLX0NfQURESSAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NfSkFMIDB4MjAwMQorI2RlZmluZSBNQVNLX0NfSkFMICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19MSSAweDQwMDEKKyNkZWZpbmUgTUFTS19DX0xJICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19MVUkgMHg2MDAxCisjZGVmaW5lIE1BU0tfQ19MVUkgIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX1NSTEkgMHg4MDAxCisjZGVmaW5lIE1BU0tfQ19TUkxJICAweGVjMDMKKyNkZWZpbmUgTUFUQ0hfQ19TUkFJIDB4ODQwMQorI2RlZmluZSBNQVNLX0NfU1JBSSAgMHhlYzAzCisjZGVmaW5lIE1BVENIX0NfQU5ESSAweDg4MDEKKyNkZWZpbmUgTUFTS19DX0FOREkgIDB4ZWMwMworI2RlZmluZSBNQVRDSF9DX1NVQiAweDhjMDEKKyNkZWZpbmUgTUFTS19DX1NVQiAgMHhmYzYzCisjZGVmaW5lIE1BVENIX0NfWE9SIDB4OGMyMQorI2RlZmluZSBNQVNLX0NfWE9SICAweGZjNjMKKyNkZWZpbmUgTUFUQ0hfQ19PUiAweDhjNDEKKyNkZWZpbmUgTUFTS19DX09SICAweGZjNjMKKyNkZWZpbmUgTUFUQ0hfQ19BTkQgMHg4YzYxCisjZGVmaW5lIE1BU0tfQ19BTkQgIDB4ZmM2MworI2RlZmluZSBNQVRDSF9DX1NVQlcgMHg5YzAxCisjZGVmaW5lIE1BU0tfQ19TVUJXICAweGZjNjMKKyNkZWZpbmUgTUFUQ0hfQ19BRERXIDB4OWMyMQorI2RlZmluZSBNQVNLX0NfQUREVyAgMHhmYzYzCisjZGVmaW5lIE1BVENIX0NfSiAweGEwMDEKKyNkZWZpbmUgTUFTS19DX0ogIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX0JFUVogMHhjMDAxCisjZGVmaW5lIE1BU0tfQ19CRVFaICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19CTkVaIDB4ZTAwMQorI2RlZmluZSBNQVNLX0NfQk5FWiAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NfU0xMSSAweDIKKyNkZWZpbmUgTUFTS19DX1NMTEkgIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX0ZMRFNQIDB4MjAwMgorI2RlZmluZSBNQVNLX0NfRkxEU1AgIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX0xXU1AgMHg0MDAyCisjZGVmaW5lIE1BU0tfQ19MV1NQICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19GTFdTUCAweDYwMDIKKyNkZWZpbmUgTUFTS19DX0ZMV1NQICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19NViAweDgwMDIKKyNkZWZpbmUgTUFTS19DX01WICAweGYwMDMKKyNkZWZpbmUgTUFUQ0hfQ19BREQgMHg5MDAyCisjZGVmaW5lIE1BU0tfQ19BREQgIDB4ZjAwMworI2RlZmluZSBNQVRDSF9DX0ZTRFNQIDB4YTAwMgorI2RlZmluZSBNQVNLX0NfRlNEU1AgIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX1NXU1AgMHhjMDAyCisjZGVmaW5lIE1BU0tfQ19TV1NQICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19GU1dTUCAweGUwMDIKKyNkZWZpbmUgTUFTS19DX0ZTV1NQICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NMCAweGIKKyNkZWZpbmUgTUFTS19DVVNUT00wICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NMF9SUzEgMHgyMDBiCisjZGVmaW5lIE1BU0tfQ1VTVE9NMF9SUzEgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00wX1JTMV9SUzIgMHgzMDBiCisjZGVmaW5lIE1BU0tfQ1VTVE9NMF9SUzFfUlMyICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NMF9SRCAweDQwMGIKKyNkZWZpbmUgTUFTS19DVVNUT00wX1JEICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NMF9SRF9SUzEgMHg2MDBiCisjZGVmaW5lIE1BU0tfQ1VTVE9NMF9SRF9SUzEgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00wX1JEX1JTMV9SUzIgMHg3MDBiCisjZGVmaW5lIE1BU0tfQ1VTVE9NMF9SRF9SUzFfUlMyICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NMSAweDJiCisjZGVmaW5lIE1BU0tfQ1VTVE9NMSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NVU1RPTTFfUlMxIDB4MjAyYgorI2RlZmluZSBNQVNLX0NVU1RPTTFfUlMxICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NMV9SUzFfUlMyIDB4MzAyYgorI2RlZmluZSBNQVNLX0NVU1RPTTFfUlMxX1JTMiAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NVU1RPTTFfUkQgMHg0MDJiCisjZGVmaW5lIE1BU0tfQ1VTVE9NMV9SRCAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NVU1RPTTFfUkRfUlMxIDB4NjAyYgorI2RlZmluZSBNQVNLX0NVU1RPTTFfUkRfUlMxICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NMV9SRF9SUzFfUlMyIDB4NzAyYgorI2RlZmluZSBNQVNLX0NVU1RPTTFfUkRfUlMxX1JTMiAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NVU1RPTTIgMHg1YgorI2RlZmluZSBNQVNLX0NVU1RPTTIgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00yX1JTMSAweDIwNWIKKyNkZWZpbmUgTUFTS19DVVNUT00yX1JTMSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NVU1RPTTJfUlMxX1JTMiAweDMwNWIKKyNkZWZpbmUgTUFTS19DVVNUT00yX1JTMV9SUzIgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00yX1JEIDB4NDA1YgorI2RlZmluZSBNQVNLX0NVU1RPTTJfUkQgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00yX1JEX1JTMSAweDYwNWIKKyNkZWZpbmUgTUFTS19DVVNUT00yX1JEX1JTMSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NVU1RPTTJfUkRfUlMxX1JTMiAweDcwNWIKKyNkZWZpbmUgTUFTS19DVVNUT00yX1JEX1JTMV9SUzIgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00zIDB4N2IKKyNkZWZpbmUgTUFTS19DVVNUT00zICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NM19SUzEgMHgyMDdiCisjZGVmaW5lIE1BU0tfQ1VTVE9NM19SUzEgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00zX1JTMV9SUzIgMHgzMDdiCisjZGVmaW5lIE1BU0tfQ1VTVE9NM19SUzFfUlMyICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NM19SRCAweDQwN2IKKyNkZWZpbmUgTUFTS19DVVNUT00zX1JEICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NM19SRF9SUzEgMHg2MDdiCisjZGVmaW5lIE1BU0tfQ1VTVE9NM19SRF9SUzEgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00zX1JEX1JTMV9SUzIgMHg3MDdiCisjZGVmaW5lIE1BU0tfQ1VTVE9NM19SRF9SUzFfUlMyICAweDcwN2YKKyNkZWZpbmUgQ1NSX0ZGTEFHUyAweDEKKyNkZWZpbmUgQ1NSX0ZSTSAweDIKKyNkZWZpbmUgQ1NSX0ZDU1IgMHgzCisjZGVmaW5lIENTUl9DWUNMRSAweGMwMAorI2RlZmluZSBDU1JfVElNRSAweGMwMQorI2RlZmluZSBDU1JfSU5TVFJFVCAweGMwMgorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjMgMHhjMDMKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVI0IDB4YzA0CisjZGVmaW5lIENTUl9IUE1DT1VOVEVSNSAweGMwNQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjYgMHhjMDYKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVI3IDB4YzA3CisjZGVmaW5lIENTUl9IUE1DT1VOVEVSOCAweGMwOAorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjkgMHhjMDkKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxMCAweGMwYQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjExIDB4YzBiCisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMTIgMHhjMGMKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxMyAweGMwZAorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjE0IDB4YzBlCisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMTUgMHhjMGYKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxNiAweGMxMAorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjE3IDB4YzExCisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMTggMHhjMTIKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxOSAweGMxMworI2RlZmluZSBDU1JfSFBNQ09VTlRFUjIwIDB4YzE0CisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMjEgMHhjMTUKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyMiAweGMxNgorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjIzIDB4YzE3CisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMjQgMHhjMTgKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyNSAweGMxOQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjI2IDB4YzFhCisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMjcgMHhjMWIKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyOCAweGMxYworI2RlZmluZSBDU1JfSFBNQ09VTlRFUjI5IDB4YzFkCisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMzAgMHhjMWUKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIzMSAweGMxZgorI2RlZmluZSBDU1JfU1NUQVRVUyAweDEwMAorI2RlZmluZSBDU1JfU0lFIDB4MTA0CisjZGVmaW5lIENTUl9TVFZFQyAweDEwNQorI2RlZmluZSBDU1JfU0NPVU5URVJFTiAweDEwNgorI2RlZmluZSBDU1JfU1NDUkFUQ0ggMHgxNDAKKyNkZWZpbmUgQ1NSX1NFUEMgMHgxNDEKKyNkZWZpbmUgQ1NSX1NDQVVTRSAweDE0MgorI2RlZmluZSBDU1JfU0JBREFERFIgMHgxNDMKKyNkZWZpbmUgQ1NSX1NJUCAweDE0NAorI2RlZmluZSBDU1JfU1BUQlIgMHgxODAKKyNkZWZpbmUgQ1NSX01TVEFUVVMgMHgzMDAKKyNkZWZpbmUgQ1NSX01JU0EgMHgzMDEKKyNkZWZpbmUgQ1NSX01FREVMRUcgMHgzMDIKKyNkZWZpbmUgQ1NSX01JREVMRUcgMHgzMDMKKyNkZWZpbmUgQ1NSX01JRSAweDMwNAorI2RlZmluZSBDU1JfTVRWRUMgMHgzMDUKKyNkZWZpbmUgQ1NSX01DT1VOVEVSRU4gMHgzMDYKKyNkZWZpbmUgQ1NSX01TQ1JBVENIIDB4MzQwCisjZGVmaW5lIENTUl9NRVBDIDB4MzQxCisjZGVmaW5lIENTUl9NQ0FVU0UgMHgzNDIKKyNkZWZpbmUgQ1NSX01CQURBRERSIDB4MzQzCisjZGVmaW5lIENTUl9NSVAgMHgzNDQKKyNkZWZpbmUgQ1NSX1BNUENGRzAgMHgzYTAKKyNkZWZpbmUgQ1NSX1BNUENGRzEgMHgzYTEKKyNkZWZpbmUgQ1NSX1BNUENGRzIgMHgzYTIKKyNkZWZpbmUgQ1NSX1BNUENGRzMgMHgzYTMKKyNkZWZpbmUgQ1NSX1BNUEFERFIwIDB4M2IwCisjZGVmaW5lIENTUl9QTVBBRERSMSAweDNiMQorI2RlZmluZSBDU1JfUE1QQUREUjIgMHgzYjIKKyNkZWZpbmUgQ1NSX1BNUEFERFIzIDB4M2IzCisjZGVmaW5lIENTUl9QTVBBRERSNCAweDNiNAorI2RlZmluZSBDU1JfUE1QQUREUjUgMHgzYjUKKyNkZWZpbmUgQ1NSX1BNUEFERFI2IDB4M2I2CisjZGVmaW5lIENTUl9QTVBBRERSNyAweDNiNworI2RlZmluZSBDU1JfUE1QQUREUjggMHgzYjgKKyNkZWZpbmUgQ1NSX1BNUEFERFI5IDB4M2I5CisjZGVmaW5lIENTUl9QTVBBRERSMTAgMHgzYmEKKyNkZWZpbmUgQ1NSX1BNUEFERFIxMSAweDNiYgorI2RlZmluZSBDU1JfUE1QQUREUjEyIDB4M2JjCisjZGVmaW5lIENTUl9QTVBBRERSMTMgMHgzYmQKKyNkZWZpbmUgQ1NSX1BNUEFERFIxNCAweDNiZQorI2RlZmluZSBDU1JfUE1QQUREUjE1IDB4M2JmCisjZGVmaW5lIENTUl9UU0VMRUNUIDB4N2EwCisjZGVmaW5lIENTUl9UREFUQTEgMHg3YTEKKyNkZWZpbmUgQ1NSX1REQVRBMiAweDdhMgorI2RlZmluZSBDU1JfVERBVEEzIDB4N2EzCisjZGVmaW5lIENTUl9EQ1NSIDB4N2IwCisjZGVmaW5lIENTUl9EUEMgMHg3YjEKKyNkZWZpbmUgQ1NSX0RTQ1JBVENIIDB4N2IyCisjZGVmaW5lIENTUl9NQ1lDTEUgMHhiMDAKKyNkZWZpbmUgQ1NSX01JTlNUUkVUIDB4YjAyCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjMgMHhiMDMKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSNCAweGIwNAorI2RlZmluZSBDU1JfTUhQTUNPVU5URVI1IDB4YjA1CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjYgMHhiMDYKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSNyAweGIwNworI2RlZmluZSBDU1JfTUhQTUNPVU5URVI4IDB4YjA4CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjkgMHhiMDkKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTAgMHhiMGEKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTEgMHhiMGIKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTIgMHhiMGMKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTMgMHhiMGQKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTQgMHhiMGUKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTUgMHhiMGYKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTYgMHhiMTAKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTcgMHhiMTEKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTggMHhiMTIKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTkgMHhiMTMKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjAgMHhiMTQKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjEgMHhiMTUKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjIgMHhiMTYKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjMgMHhiMTcKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjQgMHhiMTgKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjUgMHhiMTkKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjYgMHhiMWEKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjcgMHhiMWIKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjggMHhiMWMKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjkgMHhiMWQKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMzAgMHhiMWUKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMzEgMHhiMWYKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDMgMHgzMjMKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDQgMHgzMjQKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDUgMHgzMjUKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDYgMHgzMjYKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDcgMHgzMjcKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDggMHgzMjgKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDkgMHgzMjkKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDEwIDB4MzJhCisjZGVmaW5lIENTUl9NSFBNRVZFTlQxMSAweDMyYgorI2RlZmluZSBDU1JfTUhQTUVWRU5UMTIgMHgzMmMKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDEzIDB4MzJkCisjZGVmaW5lIENTUl9NSFBNRVZFTlQxNCAweDMyZQorI2RlZmluZSBDU1JfTUhQTUVWRU5UMTUgMHgzMmYKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDE2IDB4MzMwCisjZGVmaW5lIENTUl9NSFBNRVZFTlQxNyAweDMzMQorI2RlZmluZSBDU1JfTUhQTUVWRU5UMTggMHgzMzIKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDE5IDB4MzMzCisjZGVmaW5lIENTUl9NSFBNRVZFTlQyMCAweDMzNAorI2RlZmluZSBDU1JfTUhQTUVWRU5UMjEgMHgzMzUKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDIyIDB4MzM2CisjZGVmaW5lIENTUl9NSFBNRVZFTlQyMyAweDMzNworI2RlZmluZSBDU1JfTUhQTUVWRU5UMjQgMHgzMzgKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDI1IDB4MzM5CisjZGVmaW5lIENTUl9NSFBNRVZFTlQyNiAweDMzYQorI2RlZmluZSBDU1JfTUhQTUVWRU5UMjcgMHgzM2IKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDI4IDB4MzNjCisjZGVmaW5lIENTUl9NSFBNRVZFTlQyOSAweDMzZAorI2RlZmluZSBDU1JfTUhQTUVWRU5UMzAgMHgzM2UKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDMxIDB4MzNmCisjZGVmaW5lIENTUl9NVkVORE9SSUQgMHhmMTEKKyNkZWZpbmUgQ1NSX01BUkNISUQgMHhmMTIKKyNkZWZpbmUgQ1NSX01JTVBJRCAweGYxMworI2RlZmluZSBDU1JfTUhBUlRJRCAweGYxNAorI2RlZmluZSBDU1JfQ1lDTEVIIDB4YzgwCisjZGVmaW5lIENTUl9USU1FSCAweGM4MQorI2RlZmluZSBDU1JfSU5TVFJFVEggMHhjODIKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIzSCAweGM4MworI2RlZmluZSBDU1JfSFBNQ09VTlRFUjRIIDB4Yzg0CisjZGVmaW5lIENTUl9IUE1DT1VOVEVSNUggMHhjODUKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVI2SCAweGM4NgorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjdIIDB4Yzg3CisjZGVmaW5lIENTUl9IUE1DT1VOVEVSOEggMHhjODgKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVI5SCAweGM4OQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjEwSCAweGM4YQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjExSCAweGM4YgorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjEySCAweGM4YworI2RlZmluZSBDU1JfSFBNQ09VTlRFUjEzSCAweGM4ZAorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjE0SCAweGM4ZQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjE1SCAweGM4ZgorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjE2SCAweGM5MAorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjE3SCAweGM5MQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjE4SCAweGM5MgorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjE5SCAweGM5MworI2RlZmluZSBDU1JfSFBNQ09VTlRFUjIwSCAweGM5NAorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjIxSCAweGM5NQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjIySCAweGM5NgorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjIzSCAweGM5NworI2RlZmluZSBDU1JfSFBNQ09VTlRFUjI0SCAweGM5OAorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjI1SCAweGM5OQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjI2SCAweGM5YQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjI3SCAweGM5YgorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjI4SCAweGM5YworI2RlZmluZSBDU1JfSFBNQ09VTlRFUjI5SCAweGM5ZAorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjMwSCAweGM5ZQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjMxSCAweGM5ZgorI2RlZmluZSBDU1JfTUNZQ0xFSCAweGI4MAorI2RlZmluZSBDU1JfTUlOU1RSRVRIIDB4YjgyCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjNIIDB4YjgzCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjRIIDB4Yjg0CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjVIIDB4Yjg1CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjZIIDB4Yjg2CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjdIIDB4Yjg3CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjhIIDB4Yjg4CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjlIIDB4Yjg5CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjEwSCAweGI4YQorI2RlZmluZSBDU1JfTUhQTUNPVU5URVIxMUggMHhiOGIKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTJIIDB4YjhjCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjEzSCAweGI4ZAorI2RlZmluZSBDU1JfTUhQTUNPVU5URVIxNEggMHhiOGUKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTVIIDB4YjhmCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjE2SCAweGI5MAorI2RlZmluZSBDU1JfTUhQTUNPVU5URVIxN0ggMHhiOTEKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMThIIDB4YjkyCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjE5SCAweGI5MworI2RlZmluZSBDU1JfTUhQTUNPVU5URVIyMEggMHhiOTQKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjFIIDB4Yjk1CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjIySCAweGI5NgorI2RlZmluZSBDU1JfTUhQTUNPVU5URVIyM0ggMHhiOTcKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjRIIDB4Yjk4CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjI1SCAweGI5OQorI2RlZmluZSBDU1JfTUhQTUNPVU5URVIyNkggMHhiOWEKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjdIIDB4YjliCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjI4SCAweGI5YworI2RlZmluZSBDU1JfTUhQTUNPVU5URVIyOUggMHhiOWQKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMzBIIDB4YjllCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjMxSCAweGI5ZgorI2RlZmluZSBDQVVTRV9NSVNBTElHTkVEX0ZFVENIIDB4MAorI2RlZmluZSBDQVVTRV9GRVRDSF9BQ0NFU1MgMHgxCisjZGVmaW5lIENBVVNFX0lMTEVHQUxfSU5TVFJVQ1RJT04gMHgyCisjZGVmaW5lIENBVVNFX0JSRUFLUE9JTlQgMHgzCisjZGVmaW5lIENBVVNFX01JU0FMSUdORURfTE9BRCAweDQKKyNkZWZpbmUgQ0FVU0VfTE9BRF9BQ0NFU1MgMHg1CisjZGVmaW5lIENBVVNFX01JU0FMSUdORURfU1RPUkUgMHg2CisjZGVmaW5lIENBVVNFX1NUT1JFX0FDQ0VTUyAweDcKKyNkZWZpbmUgQ0FVU0VfVVNFUl9FQ0FMTCAweDgKKyNkZWZpbmUgQ0FVU0VfU1VQRVJWSVNPUl9FQ0FMTCAweDkKKyNkZWZpbmUgQ0FVU0VfSFlQRVJWSVNPUl9FQ0FMTCAweGEKKyNkZWZpbmUgQ0FVU0VfTUFDSElORV9FQ0FMTCAweGIKKyNkZWZpbmUgQ0FVU0VfRkVUQ0hfUEFHRV9GQVVMVCAweGMKKyNkZWZpbmUgQ0FVU0VfTE9BRF9QQUdFX0ZBVUxUIDB4ZAorI2RlZmluZSBDQVVTRV9TVE9SRV9QQUdFX0ZBVUxUIDB4ZgorI2VuZGlmCisjaWZkZWYgREVDTEFSRV9JTlNOCitERUNMQVJFX0lOU04oYmVxLCBNQVRDSF9CRVEsIE1BU0tfQkVRKQorREVDTEFSRV9JTlNOKGJuZSwgTUFUQ0hfQk5FLCBNQVNLX0JORSkKK0RFQ0xBUkVfSU5TTihibHQsIE1BVENIX0JMVCwgTUFTS19CTFQpCitERUNMQVJFX0lOU04oYmdlLCBNQVRDSF9CR0UsIE1BU0tfQkdFKQorREVDTEFSRV9JTlNOKGJsdHUsIE1BVENIX0JMVFUsIE1BU0tfQkxUVSkKK0RFQ0xBUkVfSU5TTihiZ2V1LCBNQVRDSF9CR0VVLCBNQVNLX0JHRVUpCitERUNMQVJFX0lOU04oamFsciwgTUFUQ0hfSkFMUiwgTUFTS19KQUxSKQorREVDTEFSRV9JTlNOKGphbCwgTUFUQ0hfSkFMLCBNQVNLX0pBTCkKK0RFQ0xBUkVfSU5TTihsdWksIE1BVENIX0xVSSwgTUFTS19MVUkpCitERUNMQVJFX0lOU04oYXVpcGMsIE1BVENIX0FVSVBDLCBNQVNLX0FVSVBDKQorREVDTEFSRV9JTlNOKGFkZGksIE1BVENIX0FEREksIE1BU0tfQURESSkKK0RFQ0xBUkVfSU5TTihzbGxpLCBNQVRDSF9TTExJLCBNQVNLX1NMTEkpCitERUNMQVJFX0lOU04oc2x0aSwgTUFUQ0hfU0xUSSwgTUFTS19TTFRJKQorREVDTEFSRV9JTlNOKHNsdGl1LCBNQVRDSF9TTFRJVSwgTUFTS19TTFRJVSkKK0RFQ0xBUkVfSU5TTih4b3JpLCBNQVRDSF9YT1JJLCBNQVNLX1hPUkkpCitERUNMQVJFX0lOU04oc3JsaSwgTUFUQ0hfU1JMSSwgTUFTS19TUkxJKQorREVDTEFSRV9JTlNOKHNyYWksIE1BVENIX1NSQUksIE1BU0tfU1JBSSkKK0RFQ0xBUkVfSU5TTihvcmksIE1BVENIX09SSSwgTUFTS19PUkkpCitERUNMQVJFX0lOU04oYW5kaSwgTUFUQ0hfQU5ESSwgTUFTS19BTkRJKQorREVDTEFSRV9JTlNOKGFkZCwgTUFUQ0hfQURELCBNQVNLX0FERCkKK0RFQ0xBUkVfSU5TTihzdWIsIE1BVENIX1NVQiwgTUFTS19TVUIpCitERUNMQVJFX0lOU04oc2xsLCBNQVRDSF9TTEwsIE1BU0tfU0xMKQorREVDTEFSRV9JTlNOKHNsdCwgTUFUQ0hfU0xULCBNQVNLX1NMVCkKK0RFQ0xBUkVfSU5TTihzbHR1LCBNQVRDSF9TTFRVLCBNQVNLX1NMVFUpCitERUNMQVJFX0lOU04oeG9yLCBNQVRDSF9YT1IsIE1BU0tfWE9SKQorREVDTEFSRV9JTlNOKHNybCwgTUFUQ0hfU1JMLCBNQVNLX1NSTCkKK0RFQ0xBUkVfSU5TTihzcmEsIE1BVENIX1NSQSwgTUFTS19TUkEpCitERUNMQVJFX0lOU04ob3IsIE1BVENIX09SLCBNQVNLX09SKQorREVDTEFSRV9JTlNOKGFuZCwgTUFUQ0hfQU5ELCBNQVNLX0FORCkKK0RFQ0xBUkVfSU5TTihhZGRpdywgTUFUQ0hfQURESVcsIE1BU0tfQURESVcpCitERUNMQVJFX0lOU04oc2xsaXcsIE1BVENIX1NMTElXLCBNQVNLX1NMTElXKQorREVDTEFSRV9JTlNOKHNybGl3LCBNQVRDSF9TUkxJVywgTUFTS19TUkxJVykKK0RFQ0xBUkVfSU5TTihzcmFpdywgTUFUQ0hfU1JBSVcsIE1BU0tfU1JBSVcpCitERUNMQVJFX0lOU04oYWRkdywgTUFUQ0hfQUREVywgTUFTS19BRERXKQorREVDTEFSRV9JTlNOKHN1YncsIE1BVENIX1NVQlcsIE1BU0tfU1VCVykKK0RFQ0xBUkVfSU5TTihzbGx3LCBNQVRDSF9TTExXLCBNQVNLX1NMTFcpCitERUNMQVJFX0lOU04oc3JsdywgTUFUQ0hfU1JMVywgTUFTS19TUkxXKQorREVDTEFSRV9JTlNOKHNyYXcsIE1BVENIX1NSQVcsIE1BU0tfU1JBVykKK0RFQ0xBUkVfSU5TTihsYiwgTUFUQ0hfTEIsIE1BU0tfTEIpCitERUNMQVJFX0lOU04obGgsIE1BVENIX0xILCBNQVNLX0xIKQorREVDTEFSRV9JTlNOKGx3LCBNQVRDSF9MVywgTUFTS19MVykKK0RFQ0xBUkVfSU5TTihsZCwgTUFUQ0hfTEQsIE1BU0tfTEQpCitERUNMQVJFX0lOU04obGJ1LCBNQVRDSF9MQlUsIE1BU0tfTEJVKQorREVDTEFSRV9JTlNOKGxodSwgTUFUQ0hfTEhVLCBNQVNLX0xIVSkKK0RFQ0xBUkVfSU5TTihsd3UsIE1BVENIX0xXVSwgTUFTS19MV1UpCitERUNMQVJFX0lOU04oc2IsIE1BVENIX1NCLCBNQVNLX1NCKQorREVDTEFSRV9JTlNOKHNoLCBNQVRDSF9TSCwgTUFTS19TSCkKK0RFQ0xBUkVfSU5TTihzdywgTUFUQ0hfU1csIE1BU0tfU1cpCitERUNMQVJFX0lOU04oc2QsIE1BVENIX1NELCBNQVNLX1NEKQorREVDTEFSRV9JTlNOKGZlbmNlLCBNQVRDSF9GRU5DRSwgTUFTS19GRU5DRSkKK0RFQ0xBUkVfSU5TTihmZW5jZV9pLCBNQVRDSF9GRU5DRV9JLCBNQVNLX0ZFTkNFX0kpCitERUNMQVJFX0lOU04obXVsLCBNQVRDSF9NVUwsIE1BU0tfTVVMKQorREVDTEFSRV9JTlNOKG11bGgsIE1BVENIX01VTEgsIE1BU0tfTVVMSCkKK0RFQ0xBUkVfSU5TTihtdWxoc3UsIE1BVENIX01VTEhTVSwgTUFTS19NVUxIU1UpCitERUNMQVJFX0lOU04obXVsaHUsIE1BVENIX01VTEhVLCBNQVNLX01VTEhVKQorREVDTEFSRV9JTlNOKGRpdiwgTUFUQ0hfRElWLCBNQVNLX0RJVikKK0RFQ0xBUkVfSU5TTihkaXZ1LCBNQVRDSF9ESVZVLCBNQVNLX0RJVlUpCitERUNMQVJFX0lOU04ocmVtLCBNQVRDSF9SRU0sIE1BU0tfUkVNKQorREVDTEFSRV9JTlNOKHJlbXUsIE1BVENIX1JFTVUsIE1BU0tfUkVNVSkKK0RFQ0xBUkVfSU5TTihtdWx3LCBNQVRDSF9NVUxXLCBNQVNLX01VTFcpCitERUNMQVJFX0lOU04oZGl2dywgTUFUQ0hfRElWVywgTUFTS19ESVZXKQorREVDTEFSRV9JTlNOKGRpdnV3LCBNQVRDSF9ESVZVVywgTUFTS19ESVZVVykKK0RFQ0xBUkVfSU5TTihyZW13LCBNQVRDSF9SRU1XLCBNQVNLX1JFTVcpCitERUNMQVJFX0lOU04ocmVtdXcsIE1BVENIX1JFTVVXLCBNQVNLX1JFTVVXKQorREVDTEFSRV9JTlNOKGFtb2FkZF93LCBNQVRDSF9BTU9BRERfVywgTUFTS19BTU9BRERfVykKK0RFQ0xBUkVfSU5TTihhbW94b3JfdywgTUFUQ0hfQU1PWE9SX1csIE1BU0tfQU1PWE9SX1cpCitERUNMQVJFX0lOU04oYW1vb3JfdywgTUFUQ0hfQU1PT1JfVywgTUFTS19BTU9PUl9XKQorREVDTEFSRV9JTlNOKGFtb2FuZF93LCBNQVRDSF9BTU9BTkRfVywgTUFTS19BTU9BTkRfVykKK0RFQ0xBUkVfSU5TTihhbW9taW5fdywgTUFUQ0hfQU1PTUlOX1csIE1BU0tfQU1PTUlOX1cpCitERUNMQVJFX0lOU04oYW1vbWF4X3csIE1BVENIX0FNT01BWF9XLCBNQVNLX0FNT01BWF9XKQorREVDTEFSRV9JTlNOKGFtb21pbnVfdywgTUFUQ0hfQU1PTUlOVV9XLCBNQVNLX0FNT01JTlVfVykKK0RFQ0xBUkVfSU5TTihhbW9tYXh1X3csIE1BVENIX0FNT01BWFVfVywgTUFTS19BTU9NQVhVX1cpCitERUNMQVJFX0lOU04oYW1vc3dhcF93LCBNQVRDSF9BTU9TV0FQX1csIE1BU0tfQU1PU1dBUF9XKQorREVDTEFSRV9JTlNOKGxyX3csIE1BVENIX0xSX1csIE1BU0tfTFJfVykKK0RFQ0xBUkVfSU5TTihzY193LCBNQVRDSF9TQ19XLCBNQVNLX1NDX1cpCitERUNMQVJFX0lOU04oYW1vYWRkX2QsIE1BVENIX0FNT0FERF9ELCBNQVNLX0FNT0FERF9EKQorREVDTEFSRV9JTlNOKGFtb3hvcl9kLCBNQVRDSF9BTU9YT1JfRCwgTUFTS19BTU9YT1JfRCkKK0RFQ0xBUkVfSU5TTihhbW9vcl9kLCBNQVRDSF9BTU9PUl9ELCBNQVNLX0FNT09SX0QpCitERUNMQVJFX0lOU04oYW1vYW5kX2QsIE1BVENIX0FNT0FORF9ELCBNQVNLX0FNT0FORF9EKQorREVDTEFSRV9JTlNOKGFtb21pbl9kLCBNQVRDSF9BTU9NSU5fRCwgTUFTS19BTU9NSU5fRCkKK0RFQ0xBUkVfSU5TTihhbW9tYXhfZCwgTUFUQ0hfQU1PTUFYX0QsIE1BU0tfQU1PTUFYX0QpCitERUNMQVJFX0lOU04oYW1vbWludV9kLCBNQVRDSF9BTU9NSU5VX0QsIE1BU0tfQU1PTUlOVV9EKQorREVDTEFSRV9JTlNOKGFtb21heHVfZCwgTUFUQ0hfQU1PTUFYVV9ELCBNQVNLX0FNT01BWFVfRCkKK0RFQ0xBUkVfSU5TTihhbW9zd2FwX2QsIE1BVENIX0FNT1NXQVBfRCwgTUFTS19BTU9TV0FQX0QpCitERUNMQVJFX0lOU04obHJfZCwgTUFUQ0hfTFJfRCwgTUFTS19MUl9EKQorREVDTEFSRV9JTlNOKHNjX2QsIE1BVENIX1NDX0QsIE1BU0tfU0NfRCkKK0RFQ0xBUkVfSU5TTihlY2FsbCwgTUFUQ0hfRUNBTEwsIE1BU0tfRUNBTEwpCitERUNMQVJFX0lOU04oZWJyZWFrLCBNQVRDSF9FQlJFQUssIE1BU0tfRUJSRUFLKQorREVDTEFSRV9JTlNOKHVyZXQsIE1BVENIX1VSRVQsIE1BU0tfVVJFVCkKK0RFQ0xBUkVfSU5TTihzcmV0LCBNQVRDSF9TUkVULCBNQVNLX1NSRVQpCitERUNMQVJFX0lOU04obXJldCwgTUFUQ0hfTVJFVCwgTUFTS19NUkVUKQorREVDTEFSRV9JTlNOKGRyZXQsIE1BVENIX0RSRVQsIE1BU0tfRFJFVCkKK0RFQ0xBUkVfSU5TTihzZmVuY2Vfdm1hLCBNQVRDSF9TRkVOQ0VfVk1BLCBNQVNLX1NGRU5DRV9WTUEpCitERUNMQVJFX0lOU04od2ZpLCBNQVRDSF9XRkksIE1BU0tfV0ZJKQorREVDTEFSRV9JTlNOKGNzcnJ3LCBNQVRDSF9DU1JSVywgTUFTS19DU1JSVykKK0RFQ0xBUkVfSU5TTihjc3JycywgTUFUQ0hfQ1NSUlMsIE1BU0tfQ1NSUlMpCitERUNMQVJFX0lOU04oY3NycmMsIE1BVENIX0NTUlJDLCBNQVNLX0NTUlJDKQorREVDTEFSRV9JTlNOKGNzcnJ3aSwgTUFUQ0hfQ1NSUldJLCBNQVNLX0NTUlJXSSkKK0RFQ0xBUkVfSU5TTihjc3Jyc2ksIE1BVENIX0NTUlJTSSwgTUFTS19DU1JSU0kpCitERUNMQVJFX0lOU04oY3NycmNpLCBNQVRDSF9DU1JSQ0ksIE1BU0tfQ1NSUkNJKQorREVDTEFSRV9JTlNOKGZhZGRfcywgTUFUQ0hfRkFERF9TLCBNQVNLX0ZBRERfUykKK0RFQ0xBUkVfSU5TTihmc3ViX3MsIE1BVENIX0ZTVUJfUywgTUFTS19GU1VCX1MpCitERUNMQVJFX0lOU04oZm11bF9zLCBNQVRDSF9GTVVMX1MsIE1BU0tfRk1VTF9TKQorREVDTEFSRV9JTlNOKGZkaXZfcywgTUFUQ0hfRkRJVl9TLCBNQVNLX0ZESVZfUykKK0RFQ0xBUkVfSU5TTihmc2dual9zLCBNQVRDSF9GU0dOSl9TLCBNQVNLX0ZTR05KX1MpCitERUNMQVJFX0lOU04oZnNnbmpuX3MsIE1BVENIX0ZTR05KTl9TLCBNQVNLX0ZTR05KTl9TKQorREVDTEFSRV9JTlNOKGZzZ25qeF9zLCBNQVRDSF9GU0dOSlhfUywgTUFTS19GU0dOSlhfUykKK0RFQ0xBUkVfSU5TTihmbWluX3MsIE1BVENIX0ZNSU5fUywgTUFTS19GTUlOX1MpCitERUNMQVJFX0lOU04oZm1heF9zLCBNQVRDSF9GTUFYX1MsIE1BU0tfRk1BWF9TKQorREVDTEFSRV9JTlNOKGZzcXJ0X3MsIE1BVENIX0ZTUVJUX1MsIE1BU0tfRlNRUlRfUykKK0RFQ0xBUkVfSU5TTihmYWRkX2QsIE1BVENIX0ZBRERfRCwgTUFTS19GQUREX0QpCitERUNMQVJFX0lOU04oZnN1Yl9kLCBNQVRDSF9GU1VCX0QsIE1BU0tfRlNVQl9EKQorREVDTEFSRV9JTlNOKGZtdWxfZCwgTUFUQ0hfRk1VTF9ELCBNQVNLX0ZNVUxfRCkKK0RFQ0xBUkVfSU5TTihmZGl2X2QsIE1BVENIX0ZESVZfRCwgTUFTS19GRElWX0QpCitERUNMQVJFX0lOU04oZnNnbmpfZCwgTUFUQ0hfRlNHTkpfRCwgTUFTS19GU0dOSl9EKQorREVDTEFSRV9JTlNOKGZzZ25qbl9kLCBNQVRDSF9GU0dOSk5fRCwgTUFTS19GU0dOSk5fRCkKK0RFQ0xBUkVfSU5TTihmc2duanhfZCwgTUFUQ0hfRlNHTkpYX0QsIE1BU0tfRlNHTkpYX0QpCitERUNMQVJFX0lOU04oZm1pbl9kLCBNQVRDSF9GTUlOX0QsIE1BU0tfRk1JTl9EKQorREVDTEFSRV9JTlNOKGZtYXhfZCwgTUFUQ0hfRk1BWF9ELCBNQVNLX0ZNQVhfRCkKK0RFQ0xBUkVfSU5TTihmY3Z0X3NfZCwgTUFUQ0hfRkNWVF9TX0QsIE1BU0tfRkNWVF9TX0QpCitERUNMQVJFX0lOU04oZmN2dF9kX3MsIE1BVENIX0ZDVlRfRF9TLCBNQVNLX0ZDVlRfRF9TKQorREVDTEFSRV9JTlNOKGZzcXJ0X2QsIE1BVENIX0ZTUVJUX0QsIE1BU0tfRlNRUlRfRCkKK0RFQ0xBUkVfSU5TTihmYWRkX3EsIE1BVENIX0ZBRERfUSwgTUFTS19GQUREX1EpCitERUNMQVJFX0lOU04oZnN1Yl9xLCBNQVRDSF9GU1VCX1EsIE1BU0tfRlNVQl9RKQorREVDTEFSRV9JTlNOKGZtdWxfcSwgTUFUQ0hfRk1VTF9RLCBNQVNLX0ZNVUxfUSkKK0RFQ0xBUkVfSU5TTihmZGl2X3EsIE1BVENIX0ZESVZfUSwgTUFTS19GRElWX1EpCitERUNMQVJFX0lOU04oZnNnbmpfcSwgTUFUQ0hfRlNHTkpfUSwgTUFTS19GU0dOSl9RKQorREVDTEFSRV9JTlNOKGZzZ25qbl9xLCBNQVRDSF9GU0dOSk5fUSwgTUFTS19GU0dOSk5fUSkKK0RFQ0xBUkVfSU5TTihmc2duanhfcSwgTUFUQ0hfRlNHTkpYX1EsIE1BU0tfRlNHTkpYX1EpCitERUNMQVJFX0lOU04oZm1pbl9xLCBNQVRDSF9GTUlOX1EsIE1BU0tfRk1JTl9RKQorREVDTEFSRV9JTlNOKGZtYXhfcSwgTUFUQ0hfRk1BWF9RLCBNQVNLX0ZNQVhfUSkKK0RFQ0xBUkVfSU5TTihmY3Z0X3NfcSwgTUFUQ0hfRkNWVF9TX1EsIE1BU0tfRkNWVF9TX1EpCitERUNMQVJFX0lOU04oZmN2dF9xX3MsIE1BVENIX0ZDVlRfUV9TLCBNQVNLX0ZDVlRfUV9TKQorREVDTEFSRV9JTlNOKGZjdnRfZF9xLCBNQVRDSF9GQ1ZUX0RfUSwgTUFTS19GQ1ZUX0RfUSkKK0RFQ0xBUkVfSU5TTihmY3Z0X3FfZCwgTUFUQ0hfRkNWVF9RX0QsIE1BU0tfRkNWVF9RX0QpCitERUNMQVJFX0lOU04oZnNxcnRfcSwgTUFUQ0hfRlNRUlRfUSwgTUFTS19GU1FSVF9RKQorREVDTEFSRV9JTlNOKGZsZV9zLCBNQVRDSF9GTEVfUywgTUFTS19GTEVfUykKK0RFQ0xBUkVfSU5TTihmbHRfcywgTUFUQ0hfRkxUX1MsIE1BU0tfRkxUX1MpCitERUNMQVJFX0lOU04oZmVxX3MsIE1BVENIX0ZFUV9TLCBNQVNLX0ZFUV9TKQorREVDTEFSRV9JTlNOKGZsZV9kLCBNQVRDSF9GTEVfRCwgTUFTS19GTEVfRCkKK0RFQ0xBUkVfSU5TTihmbHRfZCwgTUFUQ0hfRkxUX0QsIE1BU0tfRkxUX0QpCitERUNMQVJFX0lOU04oZmVxX2QsIE1BVENIX0ZFUV9ELCBNQVNLX0ZFUV9EKQorREVDTEFSRV9JTlNOKGZsZV9xLCBNQVRDSF9GTEVfUSwgTUFTS19GTEVfUSkKK0RFQ0xBUkVfSU5TTihmbHRfcSwgTUFUQ0hfRkxUX1EsIE1BU0tfRkxUX1EpCitERUNMQVJFX0lOU04oZmVxX3EsIE1BVENIX0ZFUV9RLCBNQVNLX0ZFUV9RKQorREVDTEFSRV9JTlNOKGZjdnRfd19zLCBNQVRDSF9GQ1ZUX1dfUywgTUFTS19GQ1ZUX1dfUykKK0RFQ0xBUkVfSU5TTihmY3Z0X3d1X3MsIE1BVENIX0ZDVlRfV1VfUywgTUFTS19GQ1ZUX1dVX1MpCitERUNMQVJFX0lOU04oZmN2dF9sX3MsIE1BVENIX0ZDVlRfTF9TLCBNQVNLX0ZDVlRfTF9TKQorREVDTEFSRV9JTlNOKGZjdnRfbHVfcywgTUFUQ0hfRkNWVF9MVV9TLCBNQVNLX0ZDVlRfTFVfUykKK0RFQ0xBUkVfSU5TTihmbXZfeF93LCBNQVRDSF9GTVZfWF9XLCBNQVNLX0ZNVl9YX1cpCitERUNMQVJFX0lOU04oZmNsYXNzX3MsIE1BVENIX0ZDTEFTU19TLCBNQVNLX0ZDTEFTU19TKQorREVDTEFSRV9JTlNOKGZjdnRfd19kLCBNQVRDSF9GQ1ZUX1dfRCwgTUFTS19GQ1ZUX1dfRCkKK0RFQ0xBUkVfSU5TTihmY3Z0X3d1X2QsIE1BVENIX0ZDVlRfV1VfRCwgTUFTS19GQ1ZUX1dVX0QpCitERUNMQVJFX0lOU04oZmN2dF9sX2QsIE1BVENIX0ZDVlRfTF9ELCBNQVNLX0ZDVlRfTF9EKQorREVDTEFSRV9JTlNOKGZjdnRfbHVfZCwgTUFUQ0hfRkNWVF9MVV9ELCBNQVNLX0ZDVlRfTFVfRCkKK0RFQ0xBUkVfSU5TTihmbXZfeF9kLCBNQVRDSF9GTVZfWF9ELCBNQVNLX0ZNVl9YX0QpCitERUNMQVJFX0lOU04oZmNsYXNzX2QsIE1BVENIX0ZDTEFTU19ELCBNQVNLX0ZDTEFTU19EKQorREVDTEFSRV9JTlNOKGZjdnRfd19xLCBNQVRDSF9GQ1ZUX1dfUSwgTUFTS19GQ1ZUX1dfUSkKK0RFQ0xBUkVfSU5TTihmY3Z0X3d1X3EsIE1BVENIX0ZDVlRfV1VfUSwgTUFTS19GQ1ZUX1dVX1EpCitERUNMQVJFX0lOU04oZmN2dF9sX3EsIE1BVENIX0ZDVlRfTF9RLCBNQVNLX0ZDVlRfTF9RKQorREVDTEFSRV9JTlNOKGZjdnRfbHVfcSwgTUFUQ0hfRkNWVF9MVV9RLCBNQVNLX0ZDVlRfTFVfUSkKK0RFQ0xBUkVfSU5TTihmbXZfeF9xLCBNQVRDSF9GTVZfWF9RLCBNQVNLX0ZNVl9YX1EpCitERUNMQVJFX0lOU04oZmNsYXNzX3EsIE1BVENIX0ZDTEFTU19RLCBNQVNLX0ZDTEFTU19RKQorREVDTEFSRV9JTlNOKGZjdnRfc193LCBNQVRDSF9GQ1ZUX1NfVywgTUFTS19GQ1ZUX1NfVykKK0RFQ0xBUkVfSU5TTihmY3Z0X3Nfd3UsIE1BVENIX0ZDVlRfU19XVSwgTUFTS19GQ1ZUX1NfV1UpCitERUNMQVJFX0lOU04oZmN2dF9zX2wsIE1BVENIX0ZDVlRfU19MLCBNQVNLX0ZDVlRfU19MKQorREVDTEFSRV9JTlNOKGZjdnRfc19sdSwgTUFUQ0hfRkNWVF9TX0xVLCBNQVNLX0ZDVlRfU19MVSkKK0RFQ0xBUkVfSU5TTihmbXZfd194LCBNQVRDSF9GTVZfV19YLCBNQVNLX0ZNVl9XX1gpCitERUNMQVJFX0lOU04oZmN2dF9kX3csIE1BVENIX0ZDVlRfRF9XLCBNQVNLX0ZDVlRfRF9XKQorREVDTEFSRV9JTlNOKGZjdnRfZF93dSwgTUFUQ0hfRkNWVF9EX1dVLCBNQVNLX0ZDVlRfRF9XVSkKK0RFQ0xBUkVfSU5TTihmY3Z0X2RfbCwgTUFUQ0hfRkNWVF9EX0wsIE1BU0tfRkNWVF9EX0wpCitERUNMQVJFX0lOU04oZmN2dF9kX2x1LCBNQVRDSF9GQ1ZUX0RfTFUsIE1BU0tfRkNWVF9EX0xVKQorREVDTEFSRV9JTlNOKGZtdl9kX3gsIE1BVENIX0ZNVl9EX1gsIE1BU0tfRk1WX0RfWCkKK0RFQ0xBUkVfSU5TTihmY3Z0X3FfdywgTUFUQ0hfRkNWVF9RX1csIE1BU0tfRkNWVF9RX1cpCitERUNMQVJFX0lOU04oZmN2dF9xX3d1LCBNQVRDSF9GQ1ZUX1FfV1UsIE1BU0tfRkNWVF9RX1dVKQorREVDTEFSRV9JTlNOKGZjdnRfcV9sLCBNQVRDSF9GQ1ZUX1FfTCwgTUFTS19GQ1ZUX1FfTCkKK0RFQ0xBUkVfSU5TTihmY3Z0X3FfbHUsIE1BVENIX0ZDVlRfUV9MVSwgTUFTS19GQ1ZUX1FfTFUpCitERUNMQVJFX0lOU04oZm12X3FfeCwgTUFUQ0hfRk1WX1FfWCwgTUFTS19GTVZfUV9YKQorREVDTEFSRV9JTlNOKGZsdywgTUFUQ0hfRkxXLCBNQVNLX0ZMVykKK0RFQ0xBUkVfSU5TTihmbGQsIE1BVENIX0ZMRCwgTUFTS19GTEQpCitERUNMQVJFX0lOU04oZmxxLCBNQVRDSF9GTFEsIE1BU0tfRkxRKQorREVDTEFSRV9JTlNOKGZzdywgTUFUQ0hfRlNXLCBNQVNLX0ZTVykKK0RFQ0xBUkVfSU5TTihmc2QsIE1BVENIX0ZTRCwgTUFTS19GU0QpCitERUNMQVJFX0lOU04oZnNxLCBNQVRDSF9GU1EsIE1BU0tfRlNRKQorREVDTEFSRV9JTlNOKGZtYWRkX3MsIE1BVENIX0ZNQUREX1MsIE1BU0tfRk1BRERfUykKK0RFQ0xBUkVfSU5TTihmbXN1Yl9zLCBNQVRDSF9GTVNVQl9TLCBNQVNLX0ZNU1VCX1MpCitERUNMQVJFX0lOU04oZm5tc3ViX3MsIE1BVENIX0ZOTVNVQl9TLCBNQVNLX0ZOTVNVQl9TKQorREVDTEFSRV9JTlNOKGZubWFkZF9zLCBNQVRDSF9GTk1BRERfUywgTUFTS19GTk1BRERfUykKK0RFQ0xBUkVfSU5TTihmbWFkZF9kLCBNQVRDSF9GTUFERF9ELCBNQVNLX0ZNQUREX0QpCitERUNMQVJFX0lOU04oZm1zdWJfZCwgTUFUQ0hfRk1TVUJfRCwgTUFTS19GTVNVQl9EKQorREVDTEFSRV9JTlNOKGZubXN1Yl9kLCBNQVRDSF9GTk1TVUJfRCwgTUFTS19GTk1TVUJfRCkKK0RFQ0xBUkVfSU5TTihmbm1hZGRfZCwgTUFUQ0hfRk5NQUREX0QsIE1BU0tfRk5NQUREX0QpCitERUNMQVJFX0lOU04oZm1hZGRfcSwgTUFUQ0hfRk1BRERfUSwgTUFTS19GTUFERF9RKQorREVDTEFSRV9JTlNOKGZtc3ViX3EsIE1BVENIX0ZNU1VCX1EsIE1BU0tfRk1TVUJfUSkKK0RFQ0xBUkVfSU5TTihmbm1zdWJfcSwgTUFUQ0hfRk5NU1VCX1EsIE1BU0tfRk5NU1VCX1EpCitERUNMQVJFX0lOU04oZm5tYWRkX3EsIE1BVENIX0ZOTUFERF9RLCBNQVNLX0ZOTUFERF9RKQorREVDTEFSRV9JTlNOKGNfbm9wLCBNQVRDSF9DX05PUCwgTUFTS19DX05PUCkKK0RFQ0xBUkVfSU5TTihjX2FkZGkxNnNwLCBNQVRDSF9DX0FEREkxNlNQLCBNQVNLX0NfQURESTE2U1ApCitERUNMQVJFX0lOU04oY19qciwgTUFUQ0hfQ19KUiwgTUFTS19DX0pSKQorREVDTEFSRV9JTlNOKGNfamFsciwgTUFUQ0hfQ19KQUxSLCBNQVNLX0NfSkFMUikKK0RFQ0xBUkVfSU5TTihjX2VicmVhaywgTUFUQ0hfQ19FQlJFQUssIE1BU0tfQ19FQlJFQUspCitERUNMQVJFX0lOU04oY19sZCwgTUFUQ0hfQ19MRCwgTUFTS19DX0xEKQorREVDTEFSRV9JTlNOKGNfc2QsIE1BVENIX0NfU0QsIE1BU0tfQ19TRCkKK0RFQ0xBUkVfSU5TTihjX2FkZGl3LCBNQVRDSF9DX0FERElXLCBNQVNLX0NfQURESVcpCitERUNMQVJFX0lOU04oY19sZHNwLCBNQVRDSF9DX0xEU1AsIE1BU0tfQ19MRFNQKQorREVDTEFSRV9JTlNOKGNfc2RzcCwgTUFUQ0hfQ19TRFNQLCBNQVNLX0NfU0RTUCkKK0RFQ0xBUkVfSU5TTihjX2FkZGk0c3BuLCBNQVRDSF9DX0FEREk0U1BOLCBNQVNLX0NfQURESTRTUE4pCitERUNMQVJFX0lOU04oY19mbGQsIE1BVENIX0NfRkxELCBNQVNLX0NfRkxEKQorREVDTEFSRV9JTlNOKGNfbHcsIE1BVENIX0NfTFcsIE1BU0tfQ19MVykKK0RFQ0xBUkVfSU5TTihjX2ZsdywgTUFUQ0hfQ19GTFcsIE1BU0tfQ19GTFcpCitERUNMQVJFX0lOU04oY19mc2QsIE1BVENIX0NfRlNELCBNQVNLX0NfRlNEKQorREVDTEFSRV9JTlNOKGNfc3csIE1BVENIX0NfU1csIE1BU0tfQ19TVykKK0RFQ0xBUkVfSU5TTihjX2ZzdywgTUFUQ0hfQ19GU1csIE1BU0tfQ19GU1cpCitERUNMQVJFX0lOU04oY19hZGRpLCBNQVRDSF9DX0FEREksIE1BU0tfQ19BRERJKQorREVDTEFSRV9JTlNOKGNfamFsLCBNQVRDSF9DX0pBTCwgTUFTS19DX0pBTCkKK0RFQ0xBUkVfSU5TTihjX2xpLCBNQVRDSF9DX0xJLCBNQVNLX0NfTEkpCitERUNMQVJFX0lOU04oY19sdWksIE1BVENIX0NfTFVJLCBNQVNLX0NfTFVJKQorREVDTEFSRV9JTlNOKGNfc3JsaSwgTUFUQ0hfQ19TUkxJLCBNQVNLX0NfU1JMSSkKK0RFQ0xBUkVfSU5TTihjX3NyYWksIE1BVENIX0NfU1JBSSwgTUFTS19DX1NSQUkpCitERUNMQVJFX0lOU04oY19hbmRpLCBNQVRDSF9DX0FOREksIE1BU0tfQ19BTkRJKQorREVDTEFSRV9JTlNOKGNfc3ViLCBNQVRDSF9DX1NVQiwgTUFTS19DX1NVQikKK0RFQ0xBUkVfSU5TTihjX3hvciwgTUFUQ0hfQ19YT1IsIE1BU0tfQ19YT1IpCitERUNMQVJFX0lOU04oY19vciwgTUFUQ0hfQ19PUiwgTUFTS19DX09SKQorREVDTEFSRV9JTlNOKGNfYW5kLCBNQVRDSF9DX0FORCwgTUFTS19DX0FORCkKK0RFQ0xBUkVfSU5TTihjX3N1YncsIE1BVENIX0NfU1VCVywgTUFTS19DX1NVQlcpCitERUNMQVJFX0lOU04oY19hZGR3LCBNQVRDSF9DX0FERFcsIE1BU0tfQ19BRERXKQorREVDTEFSRV9JTlNOKGNfaiwgTUFUQ0hfQ19KLCBNQVNLX0NfSikKK0RFQ0xBUkVfSU5TTihjX2JlcXosIE1BVENIX0NfQkVRWiwgTUFTS19DX0JFUVopCitERUNMQVJFX0lOU04oY19ibmV6LCBNQVRDSF9DX0JORVosIE1BU0tfQ19CTkVaKQorREVDTEFSRV9JTlNOKGNfc2xsaSwgTUFUQ0hfQ19TTExJLCBNQVNLX0NfU0xMSSkKK0RFQ0xBUkVfSU5TTihjX2ZsZHNwLCBNQVRDSF9DX0ZMRFNQLCBNQVNLX0NfRkxEU1ApCitERUNMQVJFX0lOU04oY19sd3NwLCBNQVRDSF9DX0xXU1AsIE1BU0tfQ19MV1NQKQorREVDTEFSRV9JTlNOKGNfZmx3c3AsIE1BVENIX0NfRkxXU1AsIE1BU0tfQ19GTFdTUCkKK0RFQ0xBUkVfSU5TTihjX212LCBNQVRDSF9DX01WLCBNQVNLX0NfTVYpCitERUNMQVJFX0lOU04oY19hZGQsIE1BVENIX0NfQURELCBNQVNLX0NfQUREKQorREVDTEFSRV9JTlNOKGNfZnNkc3AsIE1BVENIX0NfRlNEU1AsIE1BU0tfQ19GU0RTUCkKK0RFQ0xBUkVfSU5TTihjX3N3c3AsIE1BVENIX0NfU1dTUCwgTUFTS19DX1NXU1ApCitERUNMQVJFX0lOU04oY19mc3dzcCwgTUFUQ0hfQ19GU1dTUCwgTUFTS19DX0ZTV1NQKQorREVDTEFSRV9JTlNOKGN1c3RvbTAsIE1BVENIX0NVU1RPTTAsIE1BU0tfQ1VTVE9NMCkKK0RFQ0xBUkVfSU5TTihjdXN0b20wX3JzMSwgTUFUQ0hfQ1VTVE9NMF9SUzEsIE1BU0tfQ1VTVE9NMF9SUzEpCitERUNMQVJFX0lOU04oY3VzdG9tMF9yczFfcnMyLCBNQVRDSF9DVVNUT00wX1JTMV9SUzIsIE1BU0tfQ1VTVE9NMF9SUzFfUlMyKQorREVDTEFSRV9JTlNOKGN1c3RvbTBfcmQsIE1BVENIX0NVU1RPTTBfUkQsIE1BU0tfQ1VTVE9NMF9SRCkKK0RFQ0xBUkVfSU5TTihjdXN0b20wX3JkX3JzMSwgTUFUQ0hfQ1VTVE9NMF9SRF9SUzEsIE1BU0tfQ1VTVE9NMF9SRF9SUzEpCitERUNMQVJFX0lOU04oY3VzdG9tMF9yZF9yczFfcnMyLCBNQVRDSF9DVVNUT00wX1JEX1JTMV9SUzIsIE1BU0tfQ1VTVE9NMF9SRF9SUzFfUlMyKQorREVDTEFSRV9JTlNOKGN1c3RvbTEsIE1BVENIX0NVU1RPTTEsIE1BU0tfQ1VTVE9NMSkKK0RFQ0xBUkVfSU5TTihjdXN0b20xX3JzMSwgTUFUQ0hfQ1VTVE9NMV9SUzEsIE1BU0tfQ1VTVE9NMV9SUzEpCitERUNMQVJFX0lOU04oY3VzdG9tMV9yczFfcnMyLCBNQVRDSF9DVVNUT00xX1JTMV9SUzIsIE1BU0tfQ1VTVE9NMV9SUzFfUlMyKQorREVDTEFSRV9JTlNOKGN1c3RvbTFfcmQsIE1BVENIX0NVU1RPTTFfUkQsIE1BU0tfQ1VTVE9NMV9SRCkKK0RFQ0xBUkVfSU5TTihjdXN0b20xX3JkX3JzMSwgTUFUQ0hfQ1VTVE9NMV9SRF9SUzEsIE1BU0tfQ1VTVE9NMV9SRF9SUzEpCitERUNMQVJFX0lOU04oY3VzdG9tMV9yZF9yczFfcnMyLCBNQVRDSF9DVVNUT00xX1JEX1JTMV9SUzIsIE1BU0tfQ1VTVE9NMV9SRF9SUzFfUlMyKQorREVDTEFSRV9JTlNOKGN1c3RvbTIsIE1BVENIX0NVU1RPTTIsIE1BU0tfQ1VTVE9NMikKK0RFQ0xBUkVfSU5TTihjdXN0b20yX3JzMSwgTUFUQ0hfQ1VTVE9NMl9SUzEsIE1BU0tfQ1VTVE9NMl9SUzEpCitERUNMQVJFX0lOU04oY3VzdG9tMl9yczFfcnMyLCBNQVRDSF9DVVNUT00yX1JTMV9SUzIsIE1BU0tfQ1VTVE9NMl9SUzFfUlMyKQorREVDTEFSRV9JTlNOKGN1c3RvbTJfcmQsIE1BVENIX0NVU1RPTTJfUkQsIE1BU0tfQ1VTVE9NMl9SRCkKK0RFQ0xBUkVfSU5TTihjdXN0b20yX3JkX3JzMSwgTUFUQ0hfQ1VTVE9NMl9SRF9SUzEsIE1BU0tfQ1VTVE9NMl9SRF9SUzEpCitERUNMQVJFX0lOU04oY3VzdG9tMl9yZF9yczFfcnMyLCBNQVRDSF9DVVNUT00yX1JEX1JTMV9SUzIsIE1BU0tfQ1VTVE9NMl9SRF9SUzFfUlMyKQorREVDTEFSRV9JTlNOKGN1c3RvbTMsIE1BVENIX0NVU1RPTTMsIE1BU0tfQ1VTVE9NMykKK0RFQ0xBUkVfSU5TTihjdXN0b20zX3JzMSwgTUFUQ0hfQ1VTVE9NM19SUzEsIE1BU0tfQ1VTVE9NM19SUzEpCitERUNMQVJFX0lOU04oY3VzdG9tM19yczFfcnMyLCBNQVRDSF9DVVNUT00zX1JTMV9SUzIsIE1BU0tfQ1VTVE9NM19SUzFfUlMyKQorREVDTEFSRV9JTlNOKGN1c3RvbTNfcmQsIE1BVENIX0NVU1RPTTNfUkQsIE1BU0tfQ1VTVE9NM19SRCkKK0RFQ0xBUkVfSU5TTihjdXN0b20zX3JkX3JzMSwgTUFUQ0hfQ1VTVE9NM19SRF9SUzEsIE1BU0tfQ1VTVE9NM19SRF9SUzEpCitERUNMQVJFX0lOU04oY3VzdG9tM19yZF9yczFfcnMyLCBNQVRDSF9DVVNUT00zX1JEX1JTMV9SUzIsIE1BU0tfQ1VTVE9NM19SRF9SUzFfUlMyKQorI2VuZGlmCisjaWZkZWYgREVDTEFSRV9DU1IKK0RFQ0xBUkVfQ1NSKGZmbGFncywgQ1NSX0ZGTEFHUykKK0RFQ0xBUkVfQ1NSKGZybSwgQ1NSX0ZSTSkKK0RFQ0xBUkVfQ1NSKGZjc3IsIENTUl9GQ1NSKQorREVDTEFSRV9DU1IoY3ljbGUsIENTUl9DWUNMRSkKK0RFQ0xBUkVfQ1NSKHRpbWUsIENTUl9USU1FKQorREVDTEFSRV9DU1IoaW5zdHJldCwgQ1NSX0lOU1RSRVQpCitERUNMQVJFX0NTUihocG1jb3VudGVyMywgQ1NSX0hQTUNPVU5URVIzKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjQsIENTUl9IUE1DT1VOVEVSNCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXI1LCBDU1JfSFBNQ09VTlRFUjUpCitERUNMQVJFX0NTUihocG1jb3VudGVyNiwgQ1NSX0hQTUNPVU5URVI2KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjcsIENTUl9IUE1DT1VOVEVSNykKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXI4LCBDU1JfSFBNQ09VTlRFUjgpCitERUNMQVJFX0NTUihocG1jb3VudGVyOSwgQ1NSX0hQTUNPVU5URVI5KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjEwLCBDU1JfSFBNQ09VTlRFUjEwKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjExLCBDU1JfSFBNQ09VTlRFUjExKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjEyLCBDU1JfSFBNQ09VTlRFUjEyKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjEzLCBDU1JfSFBNQ09VTlRFUjEzKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjE0LCBDU1JfSFBNQ09VTlRFUjE0KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjE1LCBDU1JfSFBNQ09VTlRFUjE1KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjE2LCBDU1JfSFBNQ09VTlRFUjE2KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjE3LCBDU1JfSFBNQ09VTlRFUjE3KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjE4LCBDU1JfSFBNQ09VTlRFUjE4KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjE5LCBDU1JfSFBNQ09VTlRFUjE5KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjIwLCBDU1JfSFBNQ09VTlRFUjIwKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjIxLCBDU1JfSFBNQ09VTlRFUjIxKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjIyLCBDU1JfSFBNQ09VTlRFUjIyKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjIzLCBDU1JfSFBNQ09VTlRFUjIzKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjI0LCBDU1JfSFBNQ09VTlRFUjI0KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjI1LCBDU1JfSFBNQ09VTlRFUjI1KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjI2LCBDU1JfSFBNQ09VTlRFUjI2KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjI3LCBDU1JfSFBNQ09VTlRFUjI3KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjI4LCBDU1JfSFBNQ09VTlRFUjI4KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjI5LCBDU1JfSFBNQ09VTlRFUjI5KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjMwLCBDU1JfSFBNQ09VTlRFUjMwKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjMxLCBDU1JfSFBNQ09VTlRFUjMxKQorREVDTEFSRV9DU1Ioc3N0YXR1cywgQ1NSX1NTVEFUVVMpCitERUNMQVJFX0NTUihzaWUsIENTUl9TSUUpCitERUNMQVJFX0NTUihzdHZlYywgQ1NSX1NUVkVDKQorREVDTEFSRV9DU1Ioc2NvdW50ZXJlbiwgQ1NSX1NDT1VOVEVSRU4pCitERUNMQVJFX0NTUihzc2NyYXRjaCwgQ1NSX1NTQ1JBVENIKQorREVDTEFSRV9DU1Ioc2VwYywgQ1NSX1NFUEMpCitERUNMQVJFX0NTUihzY2F1c2UsIENTUl9TQ0FVU0UpCitERUNMQVJFX0NTUihzYmFkYWRkciwgQ1NSX1NCQURBRERSKQorREVDTEFSRV9DU1Ioc2lwLCBDU1JfU0lQKQorREVDTEFSRV9DU1Ioc3B0YnIsIENTUl9TUFRCUikKK0RFQ0xBUkVfQ1NSKG1zdGF0dXMsIENTUl9NU1RBVFVTKQorREVDTEFSRV9DU1IobWlzYSwgQ1NSX01JU0EpCitERUNMQVJFX0NTUihtZWRlbGVnLCBDU1JfTUVERUxFRykKK0RFQ0xBUkVfQ1NSKG1pZGVsZWcsIENTUl9NSURFTEVHKQorREVDTEFSRV9DU1IobWllLCBDU1JfTUlFKQorREVDTEFSRV9DU1IobXR2ZWMsIENTUl9NVFZFQykKK0RFQ0xBUkVfQ1NSKG1jb3VudGVyZW4sIENTUl9NQ09VTlRFUkVOKQorREVDTEFSRV9DU1IobXNjcmF0Y2gsIENTUl9NU0NSQVRDSCkKK0RFQ0xBUkVfQ1NSKG1lcGMsIENTUl9NRVBDKQorREVDTEFSRV9DU1IobWNhdXNlLCBDU1JfTUNBVVNFKQorREVDTEFSRV9DU1IobWJhZGFkZHIsIENTUl9NQkFEQUREUikKK0RFQ0xBUkVfQ1NSKG1pcCwgQ1NSX01JUCkKK0RFQ0xBUkVfQ1NSKHBtcGNmZzAsIENTUl9QTVBDRkcwKQorREVDTEFSRV9DU1IocG1wY2ZnMSwgQ1NSX1BNUENGRzEpCitERUNMQVJFX0NTUihwbXBjZmcyLCBDU1JfUE1QQ0ZHMikKK0RFQ0xBUkVfQ1NSKHBtcGNmZzMsIENTUl9QTVBDRkczKQorREVDTEFSRV9DU1IocG1wYWRkcjAsIENTUl9QTVBBRERSMCkKK0RFQ0xBUkVfQ1NSKHBtcGFkZHIxLCBDU1JfUE1QQUREUjEpCitERUNMQVJFX0NTUihwbXBhZGRyMiwgQ1NSX1BNUEFERFIyKQorREVDTEFSRV9DU1IocG1wYWRkcjMsIENTUl9QTVBBRERSMykKK0RFQ0xBUkVfQ1NSKHBtcGFkZHI0LCBDU1JfUE1QQUREUjQpCitERUNMQVJFX0NTUihwbXBhZGRyNSwgQ1NSX1BNUEFERFI1KQorREVDTEFSRV9DU1IocG1wYWRkcjYsIENTUl9QTVBBRERSNikKK0RFQ0xBUkVfQ1NSKHBtcGFkZHI3LCBDU1JfUE1QQUREUjcpCitERUNMQVJFX0NTUihwbXBhZGRyOCwgQ1NSX1BNUEFERFI4KQorREVDTEFSRV9DU1IocG1wYWRkcjksIENTUl9QTVBBRERSOSkKK0RFQ0xBUkVfQ1NSKHBtcGFkZHIxMCwgQ1NSX1BNUEFERFIxMCkKK0RFQ0xBUkVfQ1NSKHBtcGFkZHIxMSwgQ1NSX1BNUEFERFIxMSkKK0RFQ0xBUkVfQ1NSKHBtcGFkZHIxMiwgQ1NSX1BNUEFERFIxMikKK0RFQ0xBUkVfQ1NSKHBtcGFkZHIxMywgQ1NSX1BNUEFERFIxMykKK0RFQ0xBUkVfQ1NSKHBtcGFkZHIxNCwgQ1NSX1BNUEFERFIxNCkKK0RFQ0xBUkVfQ1NSKHBtcGFkZHIxNSwgQ1NSX1BNUEFERFIxNSkKK0RFQ0xBUkVfQ1NSKHRzZWxlY3QsIENTUl9UU0VMRUNUKQorREVDTEFSRV9DU1IodGRhdGExLCBDU1JfVERBVEExKQorREVDTEFSRV9DU1IodGRhdGEyLCBDU1JfVERBVEEyKQorREVDTEFSRV9DU1IodGRhdGEzLCBDU1JfVERBVEEzKQorREVDTEFSRV9DU1IoZGNzciwgQ1NSX0RDU1IpCitERUNMQVJFX0NTUihkcGMsIENTUl9EUEMpCitERUNMQVJFX0NTUihkc2NyYXRjaCwgQ1NSX0RTQ1JBVENIKQorREVDTEFSRV9DU1IobWN5Y2xlLCBDU1JfTUNZQ0xFKQorREVDTEFSRV9DU1IobWluc3RyZXQsIENTUl9NSU5TVFJFVCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMywgQ1NSX01IUE1DT1VOVEVSMykKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyNCwgQ1NSX01IUE1DT1VOVEVSNCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyNSwgQ1NSX01IUE1DT1VOVEVSNSkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyNiwgQ1NSX01IUE1DT1VOVEVSNikKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyNywgQ1NSX01IUE1DT1VOVEVSNykKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyOCwgQ1NSX01IUE1DT1VOVEVSOCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyOSwgQ1NSX01IUE1DT1VOVEVSOSkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTAsIENTUl9NSFBNQ09VTlRFUjEwKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxMSwgQ1NSX01IUE1DT1VOVEVSMTEpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjEyLCBDU1JfTUhQTUNPVU5URVIxMikKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTMsIENTUl9NSFBNQ09VTlRFUjEzKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxNCwgQ1NSX01IUE1DT1VOVEVSMTQpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjE1LCBDU1JfTUhQTUNPVU5URVIxNSkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTYsIENTUl9NSFBNQ09VTlRFUjE2KQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxNywgQ1NSX01IUE1DT1VOVEVSMTcpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjE4LCBDU1JfTUhQTUNPVU5URVIxOCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTksIENTUl9NSFBNQ09VTlRFUjE5KQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyMCwgQ1NSX01IUE1DT1VOVEVSMjApCitERUNMQVJFX0NTUihtaHBtY291bnRlcjIxLCBDU1JfTUhQTUNPVU5URVIyMSkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjIsIENTUl9NSFBNQ09VTlRFUjIyKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyMywgQ1NSX01IUE1DT1VOVEVSMjMpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjI0LCBDU1JfTUhQTUNPVU5URVIyNCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjUsIENTUl9NSFBNQ09VTlRFUjI1KQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyNiwgQ1NSX01IUE1DT1VOVEVSMjYpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjI3LCBDU1JfTUhQTUNPVU5URVIyNykKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjgsIENTUl9NSFBNQ09VTlRFUjI4KQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyOSwgQ1NSX01IUE1DT1VOVEVSMjkpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjMwLCBDU1JfTUhQTUNPVU5URVIzMCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMzEsIENTUl9NSFBNQ09VTlRFUjMxKQorREVDTEFSRV9DU1IobWhwbWV2ZW50MywgQ1NSX01IUE1FVkVOVDMpCitERUNMQVJFX0NTUihtaHBtZXZlbnQ0LCBDU1JfTUhQTUVWRU5UNCkKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDUsIENTUl9NSFBNRVZFTlQ1KQorREVDTEFSRV9DU1IobWhwbWV2ZW50NiwgQ1NSX01IUE1FVkVOVDYpCitERUNMQVJFX0NTUihtaHBtZXZlbnQ3LCBDU1JfTUhQTUVWRU5UNykKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDgsIENTUl9NSFBNRVZFTlQ4KQorREVDTEFSRV9DU1IobWhwbWV2ZW50OSwgQ1NSX01IUE1FVkVOVDkpCitERUNMQVJFX0NTUihtaHBtZXZlbnQxMCwgQ1NSX01IUE1FVkVOVDEwKQorREVDTEFSRV9DU1IobWhwbWV2ZW50MTEsIENTUl9NSFBNRVZFTlQxMSkKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDEyLCBDU1JfTUhQTUVWRU5UMTIpCitERUNMQVJFX0NTUihtaHBtZXZlbnQxMywgQ1NSX01IUE1FVkVOVDEzKQorREVDTEFSRV9DU1IobWhwbWV2ZW50MTQsIENTUl9NSFBNRVZFTlQxNCkKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDE1LCBDU1JfTUhQTUVWRU5UMTUpCitERUNMQVJFX0NTUihtaHBtZXZlbnQxNiwgQ1NSX01IUE1FVkVOVDE2KQorREVDTEFSRV9DU1IobWhwbWV2ZW50MTcsIENTUl9NSFBNRVZFTlQxNykKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDE4LCBDU1JfTUhQTUVWRU5UMTgpCitERUNMQVJFX0NTUihtaHBtZXZlbnQxOSwgQ1NSX01IUE1FVkVOVDE5KQorREVDTEFSRV9DU1IobWhwbWV2ZW50MjAsIENTUl9NSFBNRVZFTlQyMCkKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDIxLCBDU1JfTUhQTUVWRU5UMjEpCitERUNMQVJFX0NTUihtaHBtZXZlbnQyMiwgQ1NSX01IUE1FVkVOVDIyKQorREVDTEFSRV9DU1IobWhwbWV2ZW50MjMsIENTUl9NSFBNRVZFTlQyMykKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDI0LCBDU1JfTUhQTUVWRU5UMjQpCitERUNMQVJFX0NTUihtaHBtZXZlbnQyNSwgQ1NSX01IUE1FVkVOVDI1KQorREVDTEFSRV9DU1IobWhwbWV2ZW50MjYsIENTUl9NSFBNRVZFTlQyNikKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDI3LCBDU1JfTUhQTUVWRU5UMjcpCitERUNMQVJFX0NTUihtaHBtZXZlbnQyOCwgQ1NSX01IUE1FVkVOVDI4KQorREVDTEFSRV9DU1IobWhwbWV2ZW50MjksIENTUl9NSFBNRVZFTlQyOSkKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDMwLCBDU1JfTUhQTUVWRU5UMzApCitERUNMQVJFX0NTUihtaHBtZXZlbnQzMSwgQ1NSX01IUE1FVkVOVDMxKQorREVDTEFSRV9DU1IobXZlbmRvcmlkLCBDU1JfTVZFTkRPUklEKQorREVDTEFSRV9DU1IobWFyY2hpZCwgQ1NSX01BUkNISUQpCitERUNMQVJFX0NTUihtaW1waWQsIENTUl9NSU1QSUQpCitERUNMQVJFX0NTUihtaGFydGlkLCBDU1JfTUhBUlRJRCkKK0RFQ0xBUkVfQ1NSKGN5Y2xlaCwgQ1NSX0NZQ0xFSCkKK0RFQ0xBUkVfQ1NSKHRpbWVoLCBDU1JfVElNRUgpCitERUNMQVJFX0NTUihpbnN0cmV0aCwgQ1NSX0lOU1RSRVRIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjNoLCBDU1JfSFBNQ09VTlRFUjNIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjRoLCBDU1JfSFBNQ09VTlRFUjRIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjVoLCBDU1JfSFBNQ09VTlRFUjVIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjZoLCBDU1JfSFBNQ09VTlRFUjZIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjdoLCBDU1JfSFBNQ09VTlRFUjdIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjhoLCBDU1JfSFBNQ09VTlRFUjhIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjloLCBDU1JfSFBNQ09VTlRFUjlIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjEwaCwgQ1NSX0hQTUNPVU5URVIxMEgpCitERUNMQVJFX0NTUihocG1jb3VudGVyMTFoLCBDU1JfSFBNQ09VTlRFUjExSCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxMmgsIENTUl9IUE1DT1VOVEVSMTJIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjEzaCwgQ1NSX0hQTUNPVU5URVIxM0gpCitERUNMQVJFX0NTUihocG1jb3VudGVyMTRoLCBDU1JfSFBNQ09VTlRFUjE0SCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxNWgsIENTUl9IUE1DT1VOVEVSMTVIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjE2aCwgQ1NSX0hQTUNPVU5URVIxNkgpCitERUNMQVJFX0NTUihocG1jb3VudGVyMTdoLCBDU1JfSFBNQ09VTlRFUjE3SCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxOGgsIENTUl9IUE1DT1VOVEVSMThIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjE5aCwgQ1NSX0hQTUNPVU5URVIxOUgpCitERUNMQVJFX0NTUihocG1jb3VudGVyMjBoLCBDU1JfSFBNQ09VTlRFUjIwSCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyMWgsIENTUl9IUE1DT1VOVEVSMjFIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjIyaCwgQ1NSX0hQTUNPVU5URVIyMkgpCitERUNMQVJFX0NTUihocG1jb3VudGVyMjNoLCBDU1JfSFBNQ09VTlRFUjIzSCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyNGgsIENTUl9IUE1DT1VOVEVSMjRIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjI1aCwgQ1NSX0hQTUNPVU5URVIyNUgpCitERUNMQVJFX0NTUihocG1jb3VudGVyMjZoLCBDU1JfSFBNQ09VTlRFUjI2SCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyN2gsIENTUl9IUE1DT1VOVEVSMjdIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjI4aCwgQ1NSX0hQTUNPVU5URVIyOEgpCitERUNMQVJFX0NTUihocG1jb3VudGVyMjloLCBDU1JfSFBNQ09VTlRFUjI5SCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIzMGgsIENTUl9IUE1DT1VOVEVSMzBIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjMxaCwgQ1NSX0hQTUNPVU5URVIzMUgpCitERUNMQVJFX0NTUihtY3ljbGVoLCBDU1JfTUNZQ0xFSCkKK0RFQ0xBUkVfQ1NSKG1pbnN0cmV0aCwgQ1NSX01JTlNUUkVUSCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyM2gsIENTUl9NSFBNQ09VTlRFUjNIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXI0aCwgQ1NSX01IUE1DT1VOVEVSNEgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjVoLCBDU1JfTUhQTUNPVU5URVI1SCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyNmgsIENTUl9NSFBNQ09VTlRFUjZIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXI3aCwgQ1NSX01IUE1DT1VOVEVSN0gpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjhoLCBDU1JfTUhQTUNPVU5URVI4SCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyOWgsIENTUl9NSFBNQ09VTlRFUjlIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxMGgsIENTUl9NSFBNQ09VTlRFUjEwSCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTFoLCBDU1JfTUhQTUNPVU5URVIxMUgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjEyaCwgQ1NSX01IUE1DT1VOVEVSMTJIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxM2gsIENTUl9NSFBNQ09VTlRFUjEzSCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTRoLCBDU1JfTUhQTUNPVU5URVIxNEgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjE1aCwgQ1NSX01IUE1DT1VOVEVSMTVIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxNmgsIENTUl9NSFBNQ09VTlRFUjE2SCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTdoLCBDU1JfTUhQTUNPVU5URVIxN0gpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjE4aCwgQ1NSX01IUE1DT1VOVEVSMThIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxOWgsIENTUl9NSFBNQ09VTlRFUjE5SCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjBoLCBDU1JfTUhQTUNPVU5URVIyMEgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjIxaCwgQ1NSX01IUE1DT1VOVEVSMjFIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyMmgsIENTUl9NSFBNQ09VTlRFUjIySCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjNoLCBDU1JfTUhQTUNPVU5URVIyM0gpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjI0aCwgQ1NSX01IUE1DT1VOVEVSMjRIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyNWgsIENTUl9NSFBNQ09VTlRFUjI1SCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjZoLCBDU1JfTUhQTUNPVU5URVIyNkgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjI3aCwgQ1NSX01IUE1DT1VOVEVSMjdIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyOGgsIENTUl9NSFBNQ09VTlRFUjI4SCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjloLCBDU1JfTUhQTUNPVU5URVIyOUgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjMwaCwgQ1NSX01IUE1DT1VOVEVSMzBIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIzMWgsIENTUl9NSFBNQ09VTlRFUjMxSCkKKyNlbmRpZgorI2lmZGVmIERFQ0xBUkVfQ0FVU0UKK0RFQ0xBUkVfQ0FVU0UoIm1pc2FsaWduZWQgZmV0Y2giLCBDQVVTRV9NSVNBTElHTkVEX0ZFVENIKQorREVDTEFSRV9DQVVTRSgiZmV0Y2ggYWNjZXNzIiwgQ0FVU0VfRkVUQ0hfQUNDRVNTKQorREVDTEFSRV9DQVVTRSgiaWxsZWdhbCBpbnN0cnVjdGlvbiIsIENBVVNFX0lMTEVHQUxfSU5TVFJVQ1RJT04pCitERUNMQVJFX0NBVVNFKCJicmVha3BvaW50IiwgQ0FVU0VfQlJFQUtQT0lOVCkKK0RFQ0xBUkVfQ0FVU0UoIm1pc2FsaWduZWQgbG9hZCIsIENBVVNFX01JU0FMSUdORURfTE9BRCkKK0RFQ0xBUkVfQ0FVU0UoImxvYWQgYWNjZXNzIiwgQ0FVU0VfTE9BRF9BQ0NFU1MpCitERUNMQVJFX0NBVVNFKCJtaXNhbGlnbmVkIHN0b3JlIiwgQ0FVU0VfTUlTQUxJR05FRF9TVE9SRSkKK0RFQ0xBUkVfQ0FVU0UoInN0b3JlIGFjY2VzcyIsIENBVVNFX1NUT1JFX0FDQ0VTUykKK0RFQ0xBUkVfQ0FVU0UoInVzZXJfZWNhbGwiLCBDQVVTRV9VU0VSX0VDQUxMKQorREVDTEFSRV9DQVVTRSgic3VwZXJ2aXNvcl9lY2FsbCIsIENBVVNFX1NVUEVSVklTT1JfRUNBTEwpCitERUNMQVJFX0NBVVNFKCJoeXBlcnZpc29yX2VjYWxsIiwgQ0FVU0VfSFlQRVJWSVNPUl9FQ0FMTCkKK0RFQ0xBUkVfQ0FVU0UoIm1hY2hpbmVfZWNhbGwiLCBDQVVTRV9NQUNISU5FX0VDQUxMKQorREVDTEFSRV9DQVVTRSgiZmV0Y2ggcGFnZSBmYXVsdCIsIENBVVNFX0ZFVENIX1BBR0VfRkFVTFQpCitERUNMQVJFX0NBVVNFKCJsb2FkIHBhZ2UgZmF1bHQiLCBDQVVTRV9MT0FEX1BBR0VfRkFVTFQpCitERUNMQVJFX0NBVVNFKCJzdG9yZSBwYWdlIGZhdWx0IiwgQ0FVU0VfU1RPUkVfUEFHRV9GQVVMVCkKKyNlbmRpZgorCisjaW5jbHVkZSAieWNyMV9zcGVjaWZpYy5oIgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9maXJtd2FyZS9yaXNjdl9tYWNyb3MuaCBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvcmlzY3ZfbWFjcm9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRmYzhjYgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvcmlzY3ZfbWFjcm9zLmgKQEAgLTAsMCArMSw4MzUgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAgICAgICAgLy8vLworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAgICAgICAvLy8vCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgICAgLy8vLworLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgICAgICAvLy8vCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4vLy8KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgICAgLy8vLworLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPiAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNpZm5kZWYgX19SSVNDVl9NQUNST1NfSAorI2RlZmluZSBfX1JJU0NWX01BQ1JPU19ICisKKyNpbmNsdWRlICJyaXNjdl9jc3JfZW5jb2RpbmcuaCIKKyNpbmNsdWRlICJzY190ZXN0LmgiCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEJlZ2luIE1hY3JvCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgUlZURVNUX1JWNjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLm1hY3JvIGluaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLmVuZG0KKworI2RlZmluZSBSVlRFU1RfUlY2NFVGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAubWFjcm8gaW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBSVlRFU1RfRlBfRU5BQkxFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAuZW5kbQorCisjZGVmaW5lIFJWVEVTVF9SVjMyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIC5tYWNybyBpbml0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIC5lbmRtCisKKyNkZWZpbmUgUlZURVNUX1JWMzJVRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLm1hY3JvIGluaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgUlZURVNUX0ZQX0VOQUJMRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLmVuZG0KKworI2RlZmluZSBSVlRFU1RfUlY2NE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAubWFjcm8gaW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBSVlRFU1RfRU5BQkxFX01BQ0hJTkU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAuZW5kbQorCisjZGVmaW5lIFJWVEVTVF9SVjY0UyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIC5tYWNybyBpbml0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIFJWVEVTVF9FTkFCTEVfU1VQRVJWSVNPUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIC5lbmRtCisKKyNkZWZpbmUgUlZURVNUX1JWMzJNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLm1hY3JvIGluaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgUlZURVNUX0VOQUJMRV9NQUNISU5FOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLmVuZG0KKworI2RlZmluZSBSVlRFU1RfUlYzMlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAubWFjcm8gaW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBSVlRFU1RfRU5BQkxFX1NVUEVSVklTT1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAuZW5kbQorCisjaWYgX19yaXNjdl94bGVuID09IDY0CisjIGRlZmluZSBDSEVDS19YTEVOIGxpIGEwLCAxOyBzbGxpIGEwLCBhMCwgMzE7IGJnZXogYTAsIDFmOyBSVlRFU1RfUEFTUzsgMToKKyNlbHNlCisjIGRlZmluZSBDSEVDS19YTEVOIGxpIGEwLCAxOyBzbGxpIGEwLCBhMCwgMzE7IGJsdHogYTAsIDFmOyBSVlRFU1RfUEFTUzsgMToKKyNlbmRpZgorCisjZGVmaW5lIElOSVRfUE1QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGxhIHQwLCAxZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGNzcncgbXR2ZWMsIHQwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGxpIHQwLCAtMTsgICAgICAgIC8qIFNldCB1cCBhIFBNUCB0byBwZXJtaXQgYWxsIGFjY2Vzc2VzICovICAgICAgICAgICBcCisgIGNzcncgcG1wYWRkcjAsIHQwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGxpIHQwLCBQTVBfTkFQT1QgfCBQTVBfUiB8IFBNUF9XIHwgUE1QX1g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGNzcncgcG1wY2ZnMCwgdDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIC5iYWxpZ24gNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorMToKKworI2RlZmluZSBJTklUX1NQVEJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBsYSB0MCwgMWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBjc3J3IG10dmVjLCB0MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBjc3J3aSBzcHRiciwgMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAuYmFsaWduIDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKzE6CisKKyNkZWZpbmUgREVMRUdBVEVfTk9fVFJBUFMKKworI2RlZmluZSBSVlRFU1RfRU5BQkxFX1NVUEVSVklTT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBsaSBhMCwgTVNUQVRVU19NUFAgJiAoTVNUQVRVU19NUFAgPj4gMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBjc3JzIG1zdGF0dXMsIGEwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBsaSBhMCwgU0lQX1NTSVAgfCBTSVBfU1RJUDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBjc3JzIG1pZGVsZWcsIGEwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCisjZGVmaW5lIFJWVEVTVF9FTkFCTEVfTUFDSElORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGxpIGEwLCBNU1RBVFVTX01QUDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGNzcnMgbXN0YXR1cywgYTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNkZWZpbmUgUlZURVNUX0ZQX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgbGkgYTAsIE1TVEFUVVNfRlMgJiAoTVNUQVRVU19GUyA+PiAxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgY3NycyBtc3RhdHVzLCBhMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgY3Nyd2kgZmNzciwgMAorCisjZGVmaW5lIFJJU0NWX01VTFRJQ09SRV9ESVNBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGNzcnIgYTAsIG1oYXJ0aWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIDE6IGJuZXogYTAsIDFiCisKKyNkZWZpbmUgRVhUUkFfVFZFQ19VU0VSCisjZGVmaW5lIEVYVFJBX1RWRUNfU1VQRVJWSVNPUgorI2RlZmluZSBFWFRSQV9UVkVDX0hZUEVSVklTT1IKKyNkZWZpbmUgRVhUUkFfVFZFQ19NQUNISU5FCisjZGVmaW5lIEVYVFJBX0lOSVQKKyNkZWZpbmUgRVhUUkFfSU5JVF9USU1FUgorCisjZGVmaW5lIElOVEVSUlVQVF9IQU5ETEVSIGogb3RoZXJfZXhjZXB0aW9uIC8qIE5vIGludGVycnVwdHMgc2hvdWxkIG9jY3VyICovCisKKyNkZWZpbmUgUlZURVNUX0NPREVfQkVHSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLnNlY3Rpb24gLnRleHQuaW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLm9yZyAweEMwLCAweDAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLmJhbGlnbiAgNjQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLndlYWsgc3R2ZWNfaGFuZGxlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLndlYWsgbXR2ZWNfaGFuZGxlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3RyYXBfdmVjdG9yOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLyogdGVzdCB3aGV0aGVyIHRoZSB0ZXN0IGNhbWUgZnJvbSBwYXNzL2ZhaWwgKi8gICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3NyciBhNCwgbWNhdXNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGkgYTUsIENBVVNFX1VTRVJfRUNBTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYmVxIGE0LCBhNSwgX3JlcG9ydDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGkgYTUsIENBVVNFX1NVUEVSVklTT1JfRUNBTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYmVxIGE0LCBhNSwgX3JlcG9ydDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGkgYTUsIENBVVNFX01BQ0hJTkVfRUNBTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYmVxIGE0LCBhNSwgX3JlcG9ydDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLyogaWYgYW4gbXR2ZWNfaGFuZGxlciBpcyBkZWZpbmVkLCBqdW1wIHRvIGl0ICovICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGEgYTQsIG10dmVjX2hhbmRsZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYmVxeiBhNCwgMWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAganIgYTQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLyogd2FzIGl0IGFuIGludGVycnVwdCBvciBhbiBleGNlcHRpb24/ICovICAgICAgICAgICAgICAgICAgICAgIFwKKzE6ICAgICAgY3NyciBhNCwgbWNhdXNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYmdleiBhNCwgaGFuZGxlX2V4Y2VwdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgSU5URVJSVVBUX0hBTkRMRVI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2hhbmRsZV9leGNlcHRpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLyogd2UgZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIHdoYXRldmVyIHRoZSBleGNlcHRpb24gd2FzICovICAgIFwKK290aGVyX2V4Y2VwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLyogc29tZSB1bmhhbmRsYWJsZSBleGNlcHRpb24gb2NjdXJyZWQgKi8gICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGkgICBhMCwgMHgxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK19yZXBvcnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaiBzY19leGl0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLmJhbGlnbiAgNjQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLmdsb2JsIF9zdGFydDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK19zdGFydDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUklTQ1ZfTVVMVElDT1JFX0RJU0FCTEU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLypJTklUX1NQVEJSOyovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLypJTklUX1BNUDsqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgREVMRUdBVEVfTk9fVFJBUFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGkgVEVTVE5VTSwgMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGEgdDAsIHRyYXBfdmVjdG9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3NydyBtdHZlYywgdDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgQ0hFQ0tfWExFTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLyogaWYgYW4gc3R2ZWNfaGFuZGxlciBpcyBkZWZpbmVkLCBkZWxlZ2F0ZSBleGNlcHRpb25zIHRvIGl0ICovIFwKKyAgICAgICAgbGEgdDAsIHN0dmVjX2hhbmRsZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYmVxeiB0MCwgMWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3NydyBzdHZlYywgdDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGkgdDAsICgxIDw8IENBVVNFX0xPQURfUEFHRV9GQVVMVCkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICgxIDw8IENBVVNFX1NUT1JFX1BBR0VfRkFVTFQpIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICgxIDw8IENBVVNFX0ZFVENIX1BBR0VfRkFVTFQpIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICgxIDw8IENBVVNFX01JU0FMSUdORURfRkVUQ0gpIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICgxIDw8IENBVVNFX1VTRVJfRUNBTEwpIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICgxIDw8IENBVVNFX0JSRUFLUE9JTlQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3NydyBtZWRlbGVnLCB0MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3NyciB0MSwgbWVkZWxlZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYm5lIHQwLCB0MSwgb3RoZXJfZXhjZXB0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKzE6ICAgICAgY3Nyd2kgbXN0YXR1cywgMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgRVhUUkFfSU5JVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgRVhUUkFfSU5JVF9USU1FUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGEgdDAsIF9ydW5fdGVzdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3NydyBtZXBjLCB0MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3NyciBhMCwgbWhhcnRpZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbXJldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLnNlY3Rpb24gLnRleHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK19ydW5fdGVzdDoKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRW5kIE1hY3JvCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgUlZURVNUX0NPREVfRU5EIGVjYWxsOiBlY2FsbAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQYXNzL0ZhaWwgTWFjcm8KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBSVlRFU1RfUEFTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmZW5jZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtdiBhMSwgVEVTVE5VTTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBsaSAgYTAsIDB4MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBlY2FsbAorCisjZGVmaW5lIFRFU1ROVU0geDI4CisjZGVmaW5lIFJWVEVTVF9GQUlMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGZlbmNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG12IGExLCBURVNUTlVNOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGxpICBhMCwgMHgxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGVjYWxsCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIERhdGEgU2VjdGlvbiBNYWNybworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjZGVmaW5lIEVYVFJBX0RBVEEKKworI2RlZmluZSBSVlRFU1RfREFUQV9CRUdJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIEVYVFJBX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLnB1c2hzZWN0aW9uIC50b2hvc3QsImF3IixAcHJvZ2JpdHM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAuYmFsaWduIDY0OyAuZ2xvYmFsIHRvaG9zdDsgdG9ob3N0OiAuZHdvcmQgMDsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC5iYWxpZ24gNjQ7IC5nbG9iYWwgZnJvbWhvc3Q7IGZyb21ob3N0OiAuZHdvcmQgMDsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLnBvcHNlY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAuYmFsaWduIDE2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC5nbG9iYWwgYmVnaW5fcmVnc3RhdGU7ICBiZWdpbl9yZWdzdGF0ZTogLmR3b3JkIDA7IC5kd29yZCAwOyAuZHdvcmQgMDsgIFwKKyAgICAgICAgLmJhbGlnbiAxNjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAuZ2xvYmFsIGJlZ2luX3NpZ25hdHVyZTsgYmVnaW5fc2lnbmF0dXJlOgorCisjZGVmaW5lIFJWVEVTVF9EQVRBX0VORCAuYmFsaWduIDE2OyAuZ2xvYmFsIGVuZF9zaWduYXR1cmU7IGVuZF9zaWduYXR1cmU6CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBIZWxwZXIgbWFjcm9zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBNQVNLX1hMRU4oeCkgKCh4KSAmICgoMSA8PCAoX19yaXNjdl94bGVuIC0gMSkgPDwgMSkgLSAxKSkKKworI2RlZmluZSBURVNUX0NBU0UoIHRlc3RudW0sIHRlc3RyZWcsIGNvcnJlY3R2YWwsIGNvZGUuLi4gKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgY29kZTsgXAorICAgIGxpICB4MjksIE1BU0tfWExFTihjb3JyZWN0dmFsKTsgXAorICAgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgICAgYm5lIHRlc3RyZWcsIHgyOSwgZmFpbDsKKworIyBXZSB1c2UgYSBtYWNybyBoYWNrIHRvIHNpbXBpZnkgY29kZSBnZW5lcmF0aW9uIGZvciB2YXJpb3VzIG51bWJlcnMKKyMgb2YgYnViYmxlIGN5Y2xlcy4KKworI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzAKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU18xICBub3A7IFRFU1RfSU5TRVJUX05PUFNfMAorI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzIgIG5vcDsgVEVTVF9JTlNFUlRfTk9QU18xCisjZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfMyAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzIKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU180ICBub3A7IFRFU1RfSU5TRVJUX05PUFNfMworI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzUgIG5vcDsgVEVTVF9JTlNFUlRfTk9QU180CisjZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfNiAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzUKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU183ICBub3A7IFRFU1RfSU5TRVJUX05PUFNfNgorI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzggIG5vcDsgVEVTVF9JTlNFUlRfTk9QU183CisjZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfOSAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzgKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU18xMCBub3A7IFRFU1RfSU5TRVJUX05PUFNfOQorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSVjY0VUkgTUFDUk9TCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIGZvciBpbnN0cnVjdGlvbnMgd2l0aCBpbW1lZGlhdGUgb3BlcmFuZAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgU0VYVF9JTU0oeCkgKCh4KSB8ICgtKCgoeCkgPj4gMTEpICYgMSkgPDwgMTEpKQorCisjZGVmaW5lIFRFU1RfSU1NX09QKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEsIGltbSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzLCByZXN1bHQsIFwKKyAgICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBpbnN0IHgzLCB4MSwgU0VYVF9JTU0oaW1tKTsgXAorICAgICkKKworI2RlZmluZSBURVNUX0lNTV9PUF9SVkMoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSwgaW1tICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgbGkgIHgxLCB2YWwxOyBcCisgICAgICBpbnN0IHgxLCBpbW07IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fU1JDMV9FUV9ERVNUKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEsIGltbSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgxLCByZXN1bHQsIFwKKyAgICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBpbnN0IHgxLCB4MSwgU0VYVF9JTU0oaW1tKTsgXAorICAgICkKKworI2RlZmluZSBURVNUX0lNTV9ERVNUX0JZUEFTUyggdGVzdG51bSwgbm9wX2N5Y2xlcywgaW5zdCwgcmVzdWx0LCB2YWwxLCBpbW0gKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4NiwgcmVzdWx0LCBcCisgICAgICBsaSAgeDQsIDA7IFwKKzE6ICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBpbnN0IHgzLCB4MSwgU0VYVF9JTU0oaW1tKTsgXAorICAgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgbm9wX2N5Y2xlcyBcCisgICAgICBhZGRpICB4NiwgeDMsIDA7IFwKKyAgICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgICAgbGkgIHg1LCAyOyBcCisgICAgICBibmUgeDQsIHg1LCAxYiBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX1NSQzFfQllQQVNTKCB0ZXN0bnVtLCBub3BfY3ljbGVzLCBpbnN0LCByZXN1bHQsIHZhbDEsIGltbSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzLCByZXN1bHQsIFwKKyAgICAgIGxpICB4NCwgMDsgXAorMTogICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIG5vcF9jeWNsZXMgXAorICAgICAgaW5zdCB4MywgeDEsIFNFWFRfSU1NKGltbSk7IFwKKyAgICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgICAgbGkgIHg1LCAyOyBcCisgICAgICBibmUgeDQsIHg1LCAxYiBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX1pFUk9TUkMxKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIGltbSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgxLCByZXN1bHQsIFwKKyAgICAgIGluc3QgeDEsIHgwLCBTRVhUX0lNTShpbW0pOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX1pFUk9ERVNUKCB0ZXN0bnVtLCBpbnN0LCB2YWwxLCBpbW0gKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MCwgMCwgXAorICAgICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGluc3QgeDAsIHgxLCBTRVhUX0lNTShpbW0pOyBcCisgICAgKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgZm9yIHZlY3RvciBjb25maWcgaW5zdHJ1Y3Rpb25zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBURVNUX1ZTRVRDRkdJVkwoIHRlc3RudW0sIG54cHIsIG5mcHIsIGJhbmssIHZsLCByZXN1bHQgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MSwgcmVzdWx0LCBcCisgICAgICBsaSB4MSwgKGJhbmsgPDwgMTIpOyBcCisgICAgICB2c2V0Y2ZnIHgxLG54cHIsbmZwcjsgXAorICAgICAgbGkgeDEsIHZsOyBcCisgICAgICB2c2V0dmwgeDEseDE7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9WVkNGRyggdGVzdG51bSwgbnhwciwgbmZwciwgYmFuaywgdmwsIHJlc3VsdCApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgxLCByZXN1bHQsIFwKKyAgICAgIGxpIHgxLCAoYmFuayA8PCAxMikgfCAobmZwciA8PCA2KSB8IG54cHI7IFwKKyAgICAgIHZzZXRjZmcgeDE7IFwKKyAgICAgIGxpIHgxLCB2bDsgXAorICAgICAgdnNldHZsIHgxLHgxOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfVlNFVFZMKCB0ZXN0bnVtLCBueHByLCBuZnByLCBiYW5rLCB2bCwgcmVzdWx0ICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgbGkgeDEsIChiYW5rIDw8IDEyKTsgXAorICAgICAgdnNldGNmZyB4MSxueHByLG5mcHI7IFwKKyAgICAgIGxpIHgxLCB2bDsgXAorICAgICAgdnNldHZsIHgxLCB4MTsgXAorICAgICkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIGZvciBhbiBpbnN0cnVjdGlvbiB3aXRoIHJlZ2lzdGVyIG9wZXJhbmRzCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBURVNUX1JfT1AoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzLCByZXN1bHQsIFwKKyAgICAgIGxpICB4MSwgdmFsMTsgXAorICAgICAgaW5zdCB4MywgeDE7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SX1NSQzFfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgbGkgIHgxLCB2YWwxOyBcCisgICAgICBpbnN0IHgxLCB4MTsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JfREVTVF9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QsIHJlc3VsdCwgdmFsMSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHg2LCByZXN1bHQsIFwKKyAgICAgIGxpICB4NCwgMDsgXAorMTogICAgbGkgIHgxLCB2YWwxOyBcCisgICAgICBpbnN0IHgzLCB4MTsgXAorICAgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgbm9wX2N5Y2xlcyBcCisgICAgICBhZGRpICB4NiwgeDMsIDA7IFwKKyAgICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgICAgbGkgIHg1LCAyOyBcCisgICAgICBibmUgeDQsIHg1LCAxYiBcCisgICAgKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgZm9yIGFuIGluc3RydWN0aW9uIHdpdGggcmVnaXN0ZXItcmVnaXN0ZXIgb3BlcmFuZHMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjZGVmaW5lIFRFU1RfUlJfT1AoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzLCByZXN1bHQsIFwKKyAgICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBsaSAgeDIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCB4MywgeDEsIHgyOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfU1JDMV9FUV9ERVNUKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEsIHZhbDIgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MSwgcmVzdWx0LCBcCisgICAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgbGkgIHgyLCBNQVNLX1hMRU4odmFsMik7IFwKKyAgICAgIGluc3QgeDEsIHgxLCB4MjsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzJfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDIsIHJlc3VsdCwgXAorICAgICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpICB4MiwgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IHgyLCB4MSwgeDI7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9TUkMxMl9FUV9ERVNUKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MSwgcmVzdWx0LCBcCisgICAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgaW5zdCB4MSwgeDEsIHgxOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfREVTVF9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHg2LCByZXN1bHQsIFwKKyAgICAgIGxpICB4NCwgMDsgXAorMTogICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpICB4MiwgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IHgzLCB4MSwgeDI7IFwKKyAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIG5vcF9jeWNsZXMgXAorICAgICAgYWRkaSAgeDYsIHgzLCAwOyBcCisgICAgICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICAgIGxpICB4NSwgMjsgXAorICAgICAgYm5lIHg0LCB4NSwgMWIgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzEyX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGluc3QsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzLCByZXN1bHQsIFwKKyAgICAgIGxpICB4NCwgMDsgXAorMTogICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzFfbm9wcyBcCisgICAgICBsaSAgeDIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMl9ub3BzIFwKKyAgICAgIGluc3QgeDMsIHgxLCB4MjsgXAorICAgICAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgICBsaSAgeDUsIDI7IFwKKyAgICAgIGJuZSB4NCwgeDUsIDFiIFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9TUkMyMV9CWVBBU1MoIHRlc3RudW0sIHNyYzFfbm9wcywgc3JjMl9ub3BzLCBpbnN0LCByZXN1bHQsIHZhbDEsIHZhbDIgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MywgcmVzdWx0LCBcCisgICAgICBsaSAgeDQsIDA7IFwKKzE6ICAgIGxpICB4MiwgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAorICAgICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzJfbm9wcyBcCisgICAgICBpbnN0IHgzLCB4MSwgeDI7IFwKKyAgICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgICAgbGkgIHg1LCAyOyBcCisgICAgICBibmUgeDQsIHg1LCAxYiBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfWkVST1NSQzEoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDIsIHJlc3VsdCwgXAorICAgICAgbGkgeDEsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICBpbnN0IHgyLCB4MCwgeDE7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9aRVJPU1JDMiggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MiwgcmVzdWx0LCBcCisgICAgICBsaSB4MSwgTUFTS19YTEVOKHZhbCk7IFwKKyAgICAgIGluc3QgeDIsIHgxLCB4MDsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1pFUk9TUkMxMiggdGVzdG51bSwgaW5zdCwgcmVzdWx0ICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgaW5zdCB4MSwgeDAsIHgwOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfWkVST0RFU1QoIHRlc3RudW0sIGluc3QsIHZhbDEsIHZhbDIgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MCwgMCwgXAorICAgICAgbGkgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgbGkgeDIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCB4MCwgeDEsIHgyOyBcCisgICAgKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdCBtZW1vcnkgaW5zdHJ1Y3Rpb25zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBURVNUX0xEX09QKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIG9mZnNldCwgYmFzZSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzLCByZXN1bHQsIFwKKyAgICAgIGxhICB4MSwgYmFzZTsgXAorICAgICAgaW5zdCB4Mywgb2Zmc2V0KHgxKTsgXAorICAgICkKKworI2RlZmluZSBURVNUX1NUX09QKCB0ZXN0bnVtLCBsb2FkX2luc3QsIHN0b3JlX2luc3QsIHJlc3VsdCwgb2Zmc2V0LCBiYXNlICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDMsIHJlc3VsdCwgXAorICAgICAgbGEgIHgxLCBiYXNlOyBcCisgICAgICBsaSAgeDIsIHJlc3VsdDsgXAorICAgICAgc3RvcmVfaW5zdCB4Miwgb2Zmc2V0KHgxKTsgXAorICAgICAgbG9hZF9pbnN0IHgzLCBvZmZzZXQoeDEpOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfTERfREVTVF9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QsIHJlc3VsdCwgb2Zmc2V0LCBiYXNlICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICAgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgICAgbGkgIHg0LCAwOyBcCisxOiAgbGEgIHgxLCBiYXNlOyBcCisgICAgaW5zdCB4Mywgb2Zmc2V0KHgxKTsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIG5vcF9jeWNsZXMgXAorICAgIGFkZGkgIHg2LCB4MywgMDsgXAorICAgIGxpICB4MjksIHJlc3VsdDsgXAorICAgIGJuZSB4NiwgeDI5LCBmYWlsOyBcCisgICAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgbGkgIHg1LCAyOyBcCisgICAgYm5lIHg0LCB4NSwgMWI7IFwKKworI2RlZmluZSBURVNUX0xEX1NSQzFfQllQQVNTKCB0ZXN0bnVtLCBub3BfY3ljbGVzLCBpbnN0LCByZXN1bHQsIG9mZnNldCwgYmFzZSApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgIGxpICB4NCwgMDsgXAorMTogIGxhICB4MSwgYmFzZTsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIG5vcF9jeWNsZXMgXAorICAgIGluc3QgeDMsIG9mZnNldCh4MSk7IFwKKyAgICBsaSAgeDI5LCByZXN1bHQ7IFwKKyAgICBibmUgeDMsIHgyOSwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworI2RlZmluZSBURVNUX1NUX1NSQzEyX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGxvYWRfaW5zdCwgc3RvcmVfaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsaSAgeDEsIHJlc3VsdDsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzFfbm9wcyBcCisgICAgbGEgIHgyLCBiYXNlOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMl9ub3BzIFwKKyAgICBzdG9yZV9pbnN0IHgxLCBvZmZzZXQoeDIpOyBcCisgICAgbG9hZF9pbnN0IHgzLCBvZmZzZXQoeDIpOyBcCisgICAgbGkgIHgyOSwgcmVzdWx0OyBcCisgICAgYm5lIHgzLCB4MjksIGZhaWw7IFwKKyAgICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICBsaSAgeDUsIDI7IFwKKyAgICBibmUgeDQsIHg1LCAxYiBcCisKKyNkZWZpbmUgVEVTVF9TVF9TUkMyMV9CWVBBU1MoIHRlc3RudW0sIHNyYzFfbm9wcywgc3JjMl9ub3BzLCBsb2FkX2luc3QsIHN0b3JlX2luc3QsIHJlc3VsdCwgb2Zmc2V0LCBiYXNlICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICAgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgICAgbGkgIHg0LCAwOyBcCisxOiAgbGEgIHgyLCBiYXNlOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMV9ub3BzIFwKKyAgICBsaSAgeDEsIHJlc3VsdDsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzJfbm9wcyBcCisgICAgc3RvcmVfaW5zdCB4MSwgb2Zmc2V0KHgyKTsgXAorICAgIGxvYWRfaW5zdCB4Mywgb2Zmc2V0KHgyKTsgXAorICAgIGxpICB4MjksIHJlc3VsdDsgXAorICAgIGJuZSB4MywgeDI5LCBmYWlsOyBcCisgICAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgbGkgIHg1LCAyOyBcCisgICAgYm5lIHg0LCB4NSwgMWIgXAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdCBicmFuY2ggaW5zdHJ1Y3Rpb25zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBURVNUX0JSMV9PUF9UQUtFTiggdGVzdG51bSwgaW5zdCwgdmFsMSApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgIGxpICB4MSwgdmFsMTsgXAorICAgIGluc3QgeDEsIDJmOyBcCisgICAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCisxOiAgYm5lIHgwLCBURVNUTlVNLCAzZjsgXAorMjogIGluc3QgeDEsIDFiOyBcCisgICAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCiszOgorCisjZGVmaW5lIFRFU1RfQlIxX09QX05PVFRBS0VOKCB0ZXN0bnVtLCBpbnN0LCB2YWwxICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICAgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgICAgbGkgIHgxLCB2YWwxOyBcCisgICAgaW5zdCB4MSwgMWY7IFwKKyAgICBibmUgeDAsIFRFU1ROVU0sIDJmOyBcCisxOiAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCisyOiAgaW5zdCB4MSwgMWI7IFwKKzM6CisKKyNkZWZpbmUgVEVTVF9CUjFfU1JDMV9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QsIHZhbDEgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsaSAgeDEsIHZhbDE7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKKyAgICBpbnN0IHgxLCBmYWlsOyBcCisgICAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgbGkgIHg1LCAyOyBcCisgICAgYm5lIHg0LCB4NSwgMWIgXAorCisjZGVmaW5lIFRFU1RfQlIyX09QX1RBS0VOKCB0ZXN0bnVtLCBpbnN0LCB2YWwxLCB2YWwyICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICAgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgICAgbGkgIHgxLCB2YWwxOyBcCisgICAgbGkgIHgyLCB2YWwyOyBcCisgICAgaW5zdCB4MSwgeDIsIDJmOyBcCisgICAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCisxOiAgYm5lIHgwLCBURVNUTlVNLCAzZjsgXAorMjogIGluc3QgeDEsIHgyLCAxYjsgXAorICAgIGJuZSB4MCwgVEVTVE5VTSwgZmFpbDsgXAorMzoKKworI2RlZmluZSBURVNUX0JSMl9PUF9OT1RUQUtFTiggdGVzdG51bSwgaW5zdCwgdmFsMSwgdmFsMiApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgIGxpICB4MSwgdmFsMTsgXAorICAgIGxpICB4MiwgdmFsMjsgXAorICAgIGluc3QgeDEsIHgyLCAxZjsgXAorICAgIGJuZSB4MCwgVEVTVE5VTSwgMmY7IFwKKzE6ICBibmUgeDAsIFRFU1ROVU0sIGZhaWw7IFwKKzI6ICBpbnN0IHgxLCB4MiwgMWI7IFwKKzM6CisKKyNkZWZpbmUgVEVTVF9CUjJfU1JDMTJfQllQQVNTKCB0ZXN0bnVtLCBzcmMxX25vcHMsIHNyYzJfbm9wcywgaW5zdCwgdmFsMSwgdmFsMiApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgIGxpICB4NCwgMDsgXAorMTogIGxpICB4MSwgdmFsMTsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzFfbm9wcyBcCisgICAgbGkgIHgyLCB2YWwyOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMl9ub3BzIFwKKyAgICBpbnN0IHgxLCB4MiwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworI2RlZmluZSBURVNUX0JSMl9TUkMyMV9CWVBBU1MoIHRlc3RudW0sIHNyYzFfbm9wcywgc3JjMl9ub3BzLCBpbnN0LCB2YWwxLCB2YWwyICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICAgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgICAgbGkgIHg0LCAwOyBcCisxOiAgbGkgIHgyLCB2YWwyOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMV9ub3BzIFwKKyAgICBsaSAgeDEsIHZhbDE7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMyX25vcHMgXAorICAgIGluc3QgeDEsIHgyLCBmYWlsOyBcCisgICAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgbGkgIHg1LCAyOyBcCisgICAgYm5lIHg0LCB4NSwgMWIgXAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdCBqdW1wIGluc3RydWN0aW9ucworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgVEVTVF9KUl9TUkMxX0JZUEFTUyggdGVzdG51bSwgbm9wX2N5Y2xlcywgaW5zdCApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgIGxpICB4NCwgMDsgXAorMTogIGxhICB4NiwgMmY7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKKyAgICBpbnN0IHg2OyBcCisgICAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCisyOiAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgbGkgIHg1LCAyOyBcCisgICAgYm5lIHg0LCB4NSwgMWIgXAorCisjZGVmaW5lIFRFU1RfSkFMUl9TUkMxX0JZUEFTUyggdGVzdG51bSwgbm9wX2N5Y2xlcywgaW5zdCApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgIGxpICB4NCwgMDsgXAorMTogIGxhICB4NiwgMmY7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKKyAgICBpbnN0IHgxOSwgeDYsIDA7IFwKKyAgICBibmUgeDAsIFRFU1ROVU0sIGZhaWw7IFwKKzI6ICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICBsaSAgeDUsIDI7IFwKKyAgICBibmUgeDQsIHg1LCAxYiBcCisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJWNjRVRiBNQUNST1MKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBxTmFOZiAwZjo3ZmMwMDAwMAorI2RlZmluZSBzTmFOZiAwZjo3ZjgwMDAwMQorI2RlZmluZSBxTmFOIDBkOjdmZjgwMDAwMDAwMDAwMDAKKyNkZWZpbmUgc05hTiAwZDo3ZmYwMDAwMDAwMDAwMDAxCisKKyNkZWZpbmUgVEVTVF9GUF9PUF9TX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzLCBjb2RlLi4uICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICBsYSAgYTAsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgO1wKKyAgZmx3IGYwLCAwKGEwKTsgXAorICBmbHcgZjEsIDQoYTApOyBcCisgIGZsdyBmMiwgOChhMCk7IFwKKyAgbHcgIGEzLCAxMihhMCk7IFwKKyAgY29kZTsgXAorICBmc2ZsYWdzIGExLCB4MDsgXAorICBsaSBhMiwgZmxhZ3M7IFwKKyAgYm5lIGEwLCBhMywgZmFpbDsgXAorICBibmUgYTEsIGEyLCBmYWlsOyBcCisgIGogMmY7IFwKKyAgLmJhbGlnbiA0OyBcCisgIC5kYXRhOyBcCisgIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKKyAgLmZsb2F0IHZhbDE7IFwKKyAgLmZsb2F0IHZhbDI7IFwKKyAgLmZsb2F0IHZhbDM7IFwKKyAgLnJlc3VsdDsgXAorICAudGV4dDsgXAorMjoKKworI2RlZmluZSBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCByZXN1bHQsIHZhbDEsIHZhbDIsIHZhbDMsIGNvZGUuLi4gKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgIGxhICBhMCwgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YSA7XAorICBmbGQgZjAsIDAoYTApOyBcCisgIGZsZCBmMSwgOChhMCk7IFwKKyAgZmxkIGYyLCAxNihhMCk7IFwKKyAgbGQgIGEzLCAyNChhMCk7IFwKKyAgY29kZTsgXAorICBmc2ZsYWdzIGExLCB4MDsgXAorICBsaSBhMiwgZmxhZ3M7IFwKKyAgYm5lIGEwLCBhMywgZmFpbDsgXAorICBibmUgYTEsIGEyLCBmYWlsOyBcCisgIGogMmY7IFwKKyAgLmRhdGE7IFwKKyAgLmJhbGlnbiA4OyBcCisgIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKKyAgLmRvdWJsZSB2YWwxOyBcCisgIC5kb3VibGUgdmFsMjsgXAorICAuZG91YmxlIHZhbDM7IFwKKyAgLnJlc3VsdDsgXAorICAudGV4dDsgXAorMjoKKworI2RlZmluZSBURVNUX0ZDVlRfU19EKCB0ZXN0bnVtLCByZXN1bHQsIHZhbDEgKSBcCisgIFRFU1RfRlBfT1BfRF9JTlRFUk5BTCggdGVzdG51bSwgMCwgZG91YmxlIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgZmN2dC5zLmQgZjMsIGYwOyBmY3Z0LmQucyBmMywgZjM7IGZtdi54LmQgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRkNWVF9EX1MoIHRlc3RudW0sIHJlc3VsdCwgdmFsMSApIFwKKyAgVEVTVF9GUF9PUF9TX0lOVEVSTkFMKCB0ZXN0bnVtLCAwLCBmbG9hdCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGZjdnQuZC5zIGYzLCBmMDsgZmN2dC5zLmQgZjMsIGYzOyBmbXYueC5zIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX09QMV9TKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBmbG9hdCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgZjMsIGYwOyBmbXYueC5zIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX09QMV9EKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMDsgZm12LnguZCBhMCwgZjMpCisKKyNkZWZpbmUgVEVTVF9GUF9PUDFfU19EV09SRF9SRVNVTFQoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEgKSBcCisgIFRFU1RfRlBfT1BfU19JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGR3b3JkIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjA7IGZtdi54LnMgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfT1AxX0RfRFdPUkRfUkVTVUxUKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkd29yZCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgZjMsIGYwOyBmbXYueC5kIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX09QMl9TKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBmbG9hdCByZXN1bHQsIHZhbDEsIHZhbDIsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMCwgZjE7IGZtdi54LnMgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfT1AyX0QoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEsIHZhbDIgKSBcCisgIFRFU1RfRlBfT1BfRF9JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGRvdWJsZSByZXN1bHQsIHZhbDEsIHZhbDIsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMCwgZjE7IGZtdi54LmQgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfT1AzX1MoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEsIHZhbDIsIHZhbDMgKSBcCisgIFRFU1RfRlBfT1BfU19JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGZsb2F0IHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMywgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMCwgZjEsIGYyOyBmbXYueC5zIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX09QM19EKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzICkgXAorICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgZjMsIGYwLCBmMSwgZjI7IGZtdi54LmQgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfSU5UX09QX1MoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEsIHJtICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCB3b3JkIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBhMCwgZjAsIHJtKQorCisjZGVmaW5lIFRFU1RfRlBfSU5UX09QX0QoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEsIHJtICkgXAorICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkd29yZCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgYTAsIGYwLCBybSkKKworI2RlZmluZSBURVNUX0ZQX0NNUF9PUF9TKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCB3b3JkIHJlc3VsdCwgdmFsMSwgdmFsMiwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgYTAsIGYwLCBmMSkKKworI2RlZmluZSBURVNUX0ZQX0NNUF9PUF9EKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkd29yZCByZXN1bHQsIHZhbDEsIHZhbDIsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGEwLCBmMCwgZjEpCisKKyNkZWZpbmUgVEVTVF9GQ0xBU1NfUyh0ZXN0bnVtLCBjb3JyZWN0LCBpbnB1dCkgXAorICBURVNUX0NBU0UodGVzdG51bSwgYTAsIGNvcnJlY3QsIGxpIGEwLCBpbnB1dDsgZm12LnMueCBmYTAsIGEwOyBcCisgICAgICAgICAgICAgICAgICAgIGZjbGFzcy5zIGEwLCBmYTApCisKKyNkZWZpbmUgVEVTVF9GQ0xBU1NfRCh0ZXN0bnVtLCBjb3JyZWN0LCBpbnB1dCkgXAorICBURVNUX0NBU0UodGVzdG51bSwgYTAsIGNvcnJlY3QsIGxpIGEwLCBpbnB1dDsgZm12LmQueCBmYTAsIGEwOyBcCisgICAgICAgICAgICAgICAgICAgIGZjbGFzcy5kIGEwLCBmYTApCisKKyNkZWZpbmUgVEVTVF9JTlRfRlBfT1BfUyggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICBsYSAgYTAsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgO1wKKyAgbHcgIGEzLCAwKGEwKTsgXAorICBsaSAgYTAsIHZhbDE7IFwKKyAgaW5zdCBmMCwgYTA7IFwKKyAgZnNmbGFncyB4MDsgXAorICBmbXYueC5zIGEwLCBmMDsgXAorICBibmUgYTAsIGEzLCBmYWlsOyBcCisgIGogMWY7IFwKKyAgLmJhbGlnbiA0OyBcCisgIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKKyAgLmZsb2F0IHJlc3VsdDsgXAorMToKKworI2RlZmluZSBURVNUX0lOVF9GUF9PUF9EKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgIGxhICBhMCwgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YSA7XAorICBsZCAgYTMsIDAoYTApOyBcCisgIGxpICBhMCwgdmFsMTsgXAorICBpbnN0IGYwLCBhMDsgXAorICBmc2ZsYWdzIHgwOyBcCisgIGZtdi54LmQgYTAsIGYwOyBcCisgIGJuZSBhMCwgYTMsIGZhaWw7IFwKKyAgaiAxZjsgXAorICAuYmFsaWduIDg7IFwKKyAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAorICAuZG91YmxlIHJlc3VsdDsgXAorMToKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBhc3MgYW5kIGZhaWwgY29kZSAoYXNzdW1lcyB0ZXN0IG51bSBpcyBpbiBURVNUTlVNKQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgVEVTVF9QQVNTRkFJTCBcCisgICAgICAgIGJuZSB4MCwgVEVTVE5VTSwgcGFzczsgXAorZmFpbDogXAorICAgICAgICBSVlRFU1RfRkFJTDsgXAorcGFzczogXAorICAgICAgICBSVlRFU1RfUEFTUyBcCisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QgZGF0YSBzZWN0aW9uCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBURVNUX0RBVEEKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvZmlybXdhcmUvc2NfcHJpbnQuYyBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvc2NfcHJpbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzM2ZDQyCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9zY19wcmludC5jCkBAIC0wLDAgKzEsMjk2IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgICAgICAgIC8vLy8KKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gICAgICAgLy8vLworLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlICAgIC8vLy8KKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsICAgICAgLy8vLworLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuLy8vCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kICAgIC8vLy8KKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4gICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSAic2NfcHJpbnQuaCIKKworI2RlZmluZSBTQ19TSU1fT1VUUE9SVCAoMHhmMDAwMDAwMCkKKyNkZWZpbmUgQ0hBUl9CSVQgKDgpCisKK3N0YXRpYyB2b2lkCitzY19wdXRzKGxvbmcgc3RyLCBsb25nIHN0cmxlbikgeworCXZvbGF0aWxlIGNoYXIgKm91dF9wdHIgPSAodm9sYXRpbGUgY2hhciopU0NfU0lNX09VVFBPUlQ7CisJY29uc3QgY2hhciAqaW5fcHRyID0gKGNvbnN0IGNoYXIqKXN0cjsKKwlmb3IgKGxvbmcgbGVuID0gc3RybGVuOyBsZW4gPiAwOyAtLWxlbikKKwkgICpvdXRfcHRyID0gKmluX3B0cisrOworfQorCisjdW5kZWYgcHV0Y2hhcgoraW50CitwdXRjaGFyKGludCBjaCkgeworCXN0YXRpYyBfX3RocmVhZCBjaGFyIGJ1Zls2NF0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg2NCkpKTsKKyAgICBzdGF0aWMgX190aHJlYWQgaW50IGJ1ZmxlbiA9IDA7CisKKyAgICBidWZbYnVmbGVuKytdID0gY2g7CisKKwlpZiAoIGNoID09ICdcbicgfHwgYnVmbGVuID09IHNpemVvZihidWYpICkgeworICAgICAgICBzY19wdXRzKChsb25nKWJ1ZiwgYnVmbGVuKTsKKyAgICAgICAgYnVmbGVuID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3ByaW50Zl9wdXRjaChpbnQgY2gsIHZvaWQqKiBkYXRhKQoreworICAgIHB1dGNoYXIoY2gpOworfQorCitzdGF0aWMgdm9pZAorcHJpbnQoY29uc3QgY2hhciAqc3RyKQoreworICBzY19wdXRzKChsb25nKXN0ciwgc3RybGVuKHN0cikpOworfQorCisKK3N0YXRpYyBsb25nIGxvbmcKK2dldGludCh2YV9saXN0ICphcCwgaW50IGxmbGFnKQoreworICAgIGlmICggbGZsYWcgPj0gMiApCisgICAgICAgIHJldHVybiB2YV9hcmcoKmFwLCBsb25nIGxvbmcpOworICAgIGVsc2UgaWYgKCBsZmxhZyApCisgICAgICAgIHJldHVybiB2YV9hcmcoKmFwLCBsb25nKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiB2YV9hcmcoKmFwLCBpbnQpOworfQorCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcKK2dldHVpbnQodmFfbGlzdCAqYXAsIGludCBsZmxhZykKK3sKKyAgICBpZiAoIGxmbGFnID49IDIgKQorICAgICAgICByZXR1cm4gdmFfYXJnKCphcCwgdW5zaWduZWQgbG9uZyBsb25nKTsKKyAgICBlbHNlIGlmICggbGZsYWcgKQorICAgICAgICByZXR1cm4gdmFfYXJnKCphcCwgdW5zaWduZWQgbG9uZyk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gdmFfYXJnKCphcCwgdW5zaWduZWQgaW50KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitwcmludG51bSh2b2lkKCpwdXRjaCkoaW50LCB2b2lkKiopLAordm9pZCAqKnB1dGRhdCwKK3Vuc2lnbmVkIGxvbmcgbG9uZyBudW0sCit1bnNpZ25lZCBiYXNlLAoraW50IHdpZHRoLAoraW50IHBhZGMsCitpbnQgaGV4X0EpCit7CisgICAgdW5zaWduZWQgZGlnc1tzaXplb2YobnVtKSAqIENIQVJfQklUXTsKKyAgICBpbnQgcG9zID0gMDsKKworICAgIGZvciAoIDs7ICkgeworICAgICAgICBkaWdzW3BvcysrXSA9IG51bSAlIGJhc2U7CisgICAgICAgIGlmICggbnVtIDwgYmFzZSApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgbnVtIC89IGJhc2U7CisgICAgfQorCisgICAgd2hpbGUgKCB3aWR0aC0tID4gcG9zICkKKyAgICAgICAgcHV0Y2gocGFkYywgcHV0ZGF0KTsKKworICAgIHdoaWxlICggcG9zLS0gPiAwICkKKyAgICAgICAgcHV0Y2goZGlnc1twb3NdICsgKGRpZ3NbcG9zXSA+PSAxMCA/IGhleF9BIC0gMTAgOiAnMCcpLCBwdXRkYXQpOworfQorCitzdGF0aWMgdm9pZAordnByaW50Zm10KHZvaWQoKnB1dGNoKShpbnQsIHZvaWQqKiksIHZvaWQgKipwdXRkYXQsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKK3sKKyAgICByZWdpc3RlciBjb25zdCBjaGFyKiBwOworICAgIGNvbnN0IGNoYXIqIGxhc3RfZm10OworICAgIHJlZ2lzdGVyIGludCBjaDsKKyAgICBpbnQgZXJyOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBudW07CisgICAgaW50IGJhc2U7CisgICAgaW50IGxmbGFnOworICAgIGludCB3aWR0aDsKKyAgICBpbnQgcHJlY2lzaW9uOworICAgIGludCBhbHRmbGFnOworICAgIGNoYXIgcGFkYzsKKyAgICBpbnQgaGV4X0EgPSAnYSc7CisgICAgZm9yICggOzsgKSB7CisgICAgICAgIHdoaWxlICggKGNoID0gKih1bnNpZ25lZCBjaGFyICopZm10KSAhPSAnJScgKSB7CisgICAgICAgICAgICBpZiAoIGNoID09ICdcMCcgKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICsrZm10OworICAgICAgICAgICAgcHV0Y2goY2gsIHB1dGRhdCk7CisgICAgICAgIH0KKyAgICAgICAgKytmbXQ7CisKKyAgICAgICAgLy8gUHJvY2VzcyBhICUtZXNjYXBlIHNlcXVlbmNlCisgICAgICAgIGxhc3RfZm10ID0gZm10OworICAgICAgICBwYWRjID0gJyAnOworICAgICAgICB3aWR0aCA9IC0xOworICAgICAgICBwcmVjaXNpb24gPSAtMTsKKyAgICAgICAgbGZsYWcgPSAwOworICAgICAgICBhbHRmbGFnID0gMDsKKworcmVzd2l0Y2g6CisgICAgICAgIHN3aXRjaCAoIGNoID0gKih1bnNpZ25lZCBjaGFyICopZm10KysgKSB7CisgICAgICAgICAgICAvLyBmbGFnIHRvIHBhZCBvbiB0aGUgcmlnaHQKKyAgICAgICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgICAgIHBhZGMgPSAnLSc7CisgICAgICAgICAgICAgICAgZ290byByZXN3aXRjaDsKKworICAgICAgICAgICAgICAgIC8vIGZsYWcgdG8gcGFkIHdpdGggMCdzIGluc3RlYWQgb2Ygc3BhY2VzCisgICAgICAgICAgICBjYXNlICcwJzoKKyAgICAgICAgICAgICAgICBwYWRjID0gJzAnOworICAgICAgICAgICAgICAgIGdvdG8gcmVzd2l0Y2g7CisKKyAgICAgICAgICAgICAgICAvLyB3aWR0aCBmaWVsZAorICAgICAgICAgICAgY2FzZSAnMSc6CisgICAgICAgICAgICBjYXNlICcyJzoKKyAgICAgICAgICAgIGNhc2UgJzMnOgorICAgICAgICAgICAgY2FzZSAnNCc6CisgICAgICAgICAgICBjYXNlICc1JzoKKyAgICAgICAgICAgIGNhc2UgJzYnOgorICAgICAgICAgICAgY2FzZSAnNyc6CisgICAgICAgICAgICBjYXNlICc4JzoKKyAgICAgICAgICAgIGNhc2UgJzknOgorICAgICAgICAgICAgICAgIGZvciAoIHByZWNpc2lvbiA9IDA7OyArK2ZtdCApIHsKKyAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uICogMTAgKyBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSAqZm10OworICAgICAgICAgICAgICAgICAgICBpZiAoIGNoIDwgJzAnIHx8IGNoID4gJzknICkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBnb3RvIHByb2Nlc3NfcHJlY2lzaW9uOworCisgICAgICAgICAgICBjYXNlICcqJzoKKyAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSB2YV9hcmcoYXAsIGludCk7CisgICAgICAgICAgICAgICAgZ290byBwcm9jZXNzX3ByZWNpc2lvbjsKKworICAgICAgICAgICAgY2FzZSAnLic6CisgICAgICAgICAgICAgICAgaWYgKCB3aWR0aCA8IDAgKQorICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IDA7CisgICAgICAgICAgICAgICAgZ290byByZXN3aXRjaDsKKworICAgICAgICAgICAgY2FzZSAnIyc6CisgICAgICAgICAgICAgICAgYWx0ZmxhZyA9IDE7CisgICAgICAgICAgICAgICAgZ290byByZXN3aXRjaDsKKworcHJvY2Vzc19wcmVjaXNpb246CisgICAgICAgICAgICAgICAgaWYgKCB3aWR0aCA8IDAgKSB7CisgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gcHJlY2lzaW9uOworICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZ290byByZXN3aXRjaDsKKworICAgICAgICAgICAgICAgIC8vIGxvbmcgZmxhZyAoZG91YmxlZCBmb3IgbG9uZyBsb25nKQorICAgICAgICAgICAgY2FzZSAnbCc6CisgICAgICAgICAgICAgICAgbGZsYWcrKzsKKyAgICAgICAgICAgICAgICBnb3RvIHJlc3dpdGNoOworCisgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVyCisgICAgICAgICAgICBjYXNlICdjJzoKKyAgICAgICAgICAgICAgICBwdXRjaCh2YV9hcmcoYXAsIGludCksIHB1dGRhdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAvLyBzdHJpbmcKKyAgICAgICAgICAgIGNhc2UgJ3MnOgorICAgICAgICAgICAgICAgIGlmICggKHAgPSB2YV9hcmcoYXAsIGNoYXIgKikpID09IE5VTEwgKQorICAgICAgICAgICAgICAgICAgICBwID0gIihudWxsKSI7CisgICAgICAgICAgICAgICAgaWYgKCB3aWR0aCA+IDAgJiYgcGFkYyAhPSAnLScgKQorICAgICAgICAgICAgICAgICAgICBmb3IgKCB3aWR0aCAtPSBzdHJubGVuKHAsIHByZWNpc2lvbik7IHdpZHRoID4gMDsgd2lkdGgtLSApCisgICAgICAgICAgICAgICAgICAgICAgICBwdXRjaChwYWRjLCBwdXRkYXQpOworICAgICAgICAgICAgICAgIGZvciAoIDsgKGNoID0gKnApICE9ICdcMCcgJiYgKHByZWNpc2lvbiA8IDAgfHwgLS1wcmVjaXNpb24gPj0gMCk7IHdpZHRoLS0gKSB7CisgICAgICAgICAgICAgICAgICAgIHB1dGNoKGNoLCBwdXRkYXQpOworICAgICAgICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoIDsgd2lkdGggPiAwOyB3aWR0aC0tICkKKyAgICAgICAgICAgICAgICAgICAgcHV0Y2goJyAnLCBwdXRkYXQpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgLy8gKHNpZ25lZCkgZGVjaW1hbAorICAgICAgICAgICAgY2FzZSAnZCc6CisgICAgICAgICAgICAgICAgbnVtID0gZ2V0aW50KCZhcCwgbGZsYWcpOworICAgICAgICAgICAgICAgIGlmICggKGxvbmcgbG9uZyludW0gPCAwICkgeworICAgICAgICAgICAgICAgICAgICBwdXRjaCgnLScsIHB1dGRhdCk7CisgICAgICAgICAgICAgICAgICAgIG51bSA9IC0obG9uZyBsb25nKW51bTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYmFzZSA9IDEwOworICAgICAgICAgICAgICAgIGdvdG8gc2lnbmVkX251bWJlcjsKKworICAgICAgICAgICAgY2FzZSAnZic6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyAjaWZuZGVmIG5vcGZsb2F0CisgICAgICAgICAgICAgICAgICAgIC8vIGRvdWJsZSBudW0gPSBnZXRkb3VibGUoJmFwLCBsZmxhZyk7CisgICAgICAgICAgICAgICAgICAgIC8vIHByaW50ZG91YmxlRihwdXRjaCwgcHV0ZGF0LCBudW0sIHdpZHRoLCBwcmVjaXNpb24sIHBhZGMpOworICAgICAgICAgICAgICAgICAgICAvLyAjZW5kaWYKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAvLyB1bnNpZ25lZCBkZWNpbWFsCisgICAgICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAgICAgICBiYXNlID0gMTA7CisgICAgICAgICAgICAgICAgZ290byB1bnNpZ25lZF9udW1iZXI7CisKKyAgICAgICAgICAgICAgICAvLyAodW5zaWduZWQpIG9jdGFsCisgICAgICAgICAgICBjYXNlICdvJzoKKyAgICAgICAgICAgICAgICAvLyBzaG91bGQgZG8gc29tZXRoaW5nIHdpdGggcGFkZGluZyBzbyBpdCdzIGFsd2F5cyAzIG9jdGl0cworICAgICAgICAgICAgICAgIGJhc2UgPSA4OworICAgICAgICAgICAgICAgIGdvdG8gdW5zaWduZWRfbnVtYmVyOworCisgICAgICAgICAgICAgICAgLy8gcG9pbnRlcgorICAgICAgICAgICAgY2FzZSAncCc6CisgICAgICAgICAgICAgICAgLy8gc3RhdGljX2Fzc2VydChzaXplb2YobG9uZykgPT0gc2l6ZW9mKHZvaWQqKSk7CisgICAgICAgICAgICAgICAgbGZsYWcgPSAxOworICAgICAgICAgICAgICAgIHB1dGNoKCcwJywgcHV0ZGF0KTsKKyAgICAgICAgICAgICAgICBwdXRjaCgneCcsIHB1dGRhdCk7CisgICAgICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoIHRvICd4JyAqLworCisgICAgICAgICAgICAgICAgLy8gKHVuc2lnbmVkKSBoZXhhZGVjaW1hbAorICAgICAgICAgICAgY2FzZSAneCc6CisgICAgICAgICAgICAgICAgaGV4X0EgPSAnYSc7CisgICAgICAgICAgICAgICAgYmFzZSA9IDE2OworICAgICAgICAgICAgICAgIGdvdG8gdW5zaWduZWRfbnVtYmVyOworCisgICAgICAgICAgICBjYXNlICdYJzoKKyAgICAgICAgICAgICAgICBoZXhfQSA9ICdBJzsKKyAgICAgICAgICAgICAgICBiYXNlID0gMTY7Cit1bnNpZ25lZF9udW1iZXI6CisgICAgICAgICAgICAgICAgbnVtID0gZ2V0dWludCgmYXAsIGxmbGFnKTsKK3NpZ25lZF9udW1iZXI6CisgICAgICAgICAgICAgICAgcHJpbnRudW0ocHV0Y2gsIHB1dGRhdCwgbnVtLCBiYXNlLCB3aWR0aCwgcGFkYywgaGV4X0EpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgLy8gZXNjYXBlZCAnJScgY2hhcmFjdGVyCisgICAgICAgICAgICBjYXNlICclJzoKKyAgICAgICAgICAgICAgICBwdXRjaChjaCwgcHV0ZGF0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIC8vIHVucmVjb2duaXplZCBlc2NhcGUgc2VxdWVuY2UgLSBqdXN0IHByaW50IGl0IGxpdGVyYWxseQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBwdXRjaCgnJScsIHB1dGRhdCk7CisgICAgICAgICAgICAgICAgZm10ID0gbGFzdF9mbXQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2ludAorc2NfcHJpbnRmKGNvbnN0IGNoYXIqIGZtdCwgLi4uKQoreworICAgIHZhX2xpc3QgYXA7CisgICAgdmFfc3RhcnQoYXAsIGZtdCk7CisKKyAgICB2cHJpbnRmbXQocHJpbnRmX3B1dGNoLCBOVUxMLCBmbXQsIGFwKTsKKworICAgIHZhX2VuZChhcCk7CisgICAgcmV0dXJuIDA7IC8vIGluY29ycmVjdCByZXR1cm4gdmFsdWUsIGJ1dCB3aG8gY2FyZXMsIGFueXdheT8KK30KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvZmlybXdhcmUvc2NfcHJpbnQuaCBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvc2NfcHJpbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWQ2YjYxCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9zY19wcmludC5oCkBAIC0wLDAgKzEsMjQgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAgICAgICAgLy8vLworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAgICAgICAvLy8vCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgICAgLy8vLworLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgICAgICAvLy8vCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4vLy8KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgICAgLy8vLworLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPiAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNpZm5kZWYgU0NfUFJJTlRfSAorI2RlZmluZSBTQ19QUklOVF9ICisKK2V4dGVybiBpbnQgc2NfcHJpbnRmKGNvbnN0IGNoYXIqIGZtdCwgLi4uKTsKKworI2VuZGlmIC8vIFNDX1BSSU5UX0gKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvZmlybXdhcmUvc2NfdGVzdC5oIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9zY190ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI2NDQ4YQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvc2NfdGVzdC5oCkBAIC0wLDAgKzEsNjIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAgICAgICAgLy8vLworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAgICAgICAvLy8vCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgICAgLy8vLworLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgICAgICAvLy8vCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4vLy8KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgICAgLy8vLworLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPiAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNpZm5kZWYgU0NfVEVTVF9ICisjZGVmaW5lIFNDX1RFU1RfSAorCisjaWYgZGVmaW5lZChfX0FTU0VNQkxFUl9fKQorLmFsdG1hY3JvCisKKy5tYWNybyB6ZXJvX2ludF9yZWcgcmVnbgorbXYgICB4XHJlZ24sIHplcm8KKy5lbmRtCisKKy5tYWNybyB6ZXJvX2ludF9yZWdzIHJlZ19maXJzdCwgcmVnX2xhc3QKKy5zZXQgcmVnbiwgXHJlZ19maXJzdAorLnJlcHQgXHJlZ19sYXN0IC0gXHJlZ19maXJzdCArIDEKK3plcm9faW50X3JlZyAlKHJlZ24pCisuc2V0IHJlZ24sIHJlZ24rMQorLmVuZHIKKy5lbmRtCisKKyNkZWZpbmUgcmVwb3J0X3Jlc3VsdHMocmVzdWx0KSBcCitsaSAgYTAsIHJlc3VsdDsgIFwKK2xhIHQwLCBzY19leGl0OyAgXAoranIJIHQwOworCisucHVzaHNlY3Rpb24gc2NfdGVzdF9zZWN0aW9uLCAiYXgiCitzY19leGl0OiBsYSB0MCwgU0lNX0VYSVQ7IGpyIHQwOworLmJhbGlnbiAzMgorLnBvcHNlY3Rpb24KKyNkZWZpbmUgc2NfcGFzcyByZXBvcnRfcmVzdWx0cygweDApCisjZGVmaW5lIHNjX2ZhaWwgcmVwb3J0X3Jlc3VsdHMoMHgxKQorCisjZWxzZQorCitleHRlcm4gdm9pZCBzY19leGl0KHVuc2lnbmVkIHJlc3VsdCwgdW5zaWduZWQgcmVzMCwgdW5zaWduZWQgcmVzMSwgdW5zaWduZWQgcmVzMiwgdW5zaWduZWQgcmVzMykKKyAgICBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUsIG5vcmV0dXJuKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSkKK3JlcG9ydF9yZXN1bHRzKHVuc2lnbmVkIHJlc3VsdCwgdW5zaWduZWQgcmVzMCwgdW5zaWduZWQgcmVzMSwgdW5zaWduZWQgcmVzMiwgdW5zaWduZWQgcmVzMykKK3sKKyAgICBzY19leGl0KHJlc3VsdCwgcmVzMCwgcmVzMSwgcmVzMiwgcmVzMyk7Cit9CisKKyNlbmRpZgorCisjZW5kaWYgLy8gU0NfVEVTVF9ICmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2Zpcm13YXJlL3ljcjFfc3BlY2lmaWMuaCBiL3Zlcmlsb2cvZHYvZmlybXdhcmUveWNyMV9zcGVjaWZpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOGM1ODMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2Zpcm13YXJlL3ljcjFfc3BlY2lmaWMuaApAQCAtMCwwICsxLDM4IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgICAgICAgIC8vLy8KKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gICAgICAgLy8vLworLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlICAgIC8vLy8KKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsICAgICAgLy8vLworLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuLy8vCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kICAgIC8vLy8KKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4gICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjaWZuZGVmIF9fWUNSMV9fU1BFQ0lGSUMKKyNkZWZpbmUgX19ZQ1IxX19TUEVDSUZJQworCisjZGVmaW5lIG1jb3VudGVuICAgICAgICAweDdFMAorCisvLyBNZW1vcnktbWFwcGVkIHJlZ2lzdGVycworI2RlZmluZSBtdGltZV9jdHJsICAgICAgMHgwQzQ5MDAwMAorI2RlZmluZSBtdGltZV9kaXYgICAgICAgMHgwQzQ5MDAwNAorI2RlZmluZSBtdGltZSAgICAgICAgICAgMHgwQzQ5MDAwOAorI2RlZmluZSBtdGltZWggICAgICAgICAgMHgwQzQ5MDAwQworI2RlZmluZSBtdGltZWNtcCAgICAgICAgMHgwQzQ5MDAxMAorI2RlZmluZSBtdGltZWNtcGggICAgICAgMHgwQzQ5MDAxNAorCisjZGVmaW5lIFlDUjFfTVRJTUVfQ1RSTF9FTiAgICAgICAgICAwCisjZGVmaW5lIFlDUjFfTVRJTUVfQ1RSTF9DTEtTUkMgICAgICAxCisKKyNkZWZpbmUgWUNSMV9NVElNRV9DVFJMX1dSX01BU0sgICAgIDB4MworI2RlZmluZSBZQ1IxX01USU1FX0RJVl9XUl9NQVNLICAgICAgMHgzRkYKKworI2VuZGlmIC8vIF9ZQ1IxX19TUEVDSUZJQwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9tb2RlbC9pMmNfc2xhdmVfbW9kZWwudiBiL3Zlcmlsb2cvZHYvbW9kZWwvaTJjX3NsYXZlX21vZGVsLnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODNiOGY4YgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvbW9kZWwvaTJjX3NsYXZlX21vZGVsLnYKQEAgLTAsMCArMSwzNzMgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIFJpY2hhcmQgSGVydmVpbGxlCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBXSVNIQk9ORSByZXYuQjIgY29tcGxpYW50IHN5bnRoZXNpemFibGUgSTJDIFNsYXZlIG1vZGVsICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3JzOiBSaWNoYXJkIEhlcnZlaWxsZSAocmljaGFyZEBhc2ljcy53cykgd3d3LmFzaWNzLndzIC8vLy8KKy8vLy8gICAgICAgICAgIEpvaG4gU2hlYWhhbiAoanJzaGVhaGFuQG9wdHVzaG9tZS5jb20uYXUpICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEb3dubG9hZGVkIGZyb206IGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9wcm9qZWN0cy9pMmMvICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAxLDIwMDIgUmljaGFyZCBIZXJ2ZWlsbGUgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICByaWNoYXJkQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgICAgIC8vLy8KKy8vLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEICAgLy8vLworLy8vLyBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgICAvLy8vCisvLy8vIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiAgICAgIC8vLy8KKy8vLy8gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsICAgICAgICAgLy8vLworLy8vLyBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgICAvLy8vCisvLy8vIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSAgIC8vLy8KKy8vLy8gR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiAgICAgICAgLy8vLworLy8vLyBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GICAvLy8vCisvLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgIC8vLy8KKy8vLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCAgLy8vLworLy8vLyBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgICAgICAgICAvLy8vCisvLy8vIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vICBDVlMgTG9nCisvLworLy8gICRJZDogaTJjX3NsYXZlX21vZGVsLnYsdiAxLjcgMjAwNi0wOS0wNCAwOTowODo1MSByaGVydmVpbGxlIEV4cCAkCisvLworLy8gICREYXRlOiAyMDA2LTA5LTA0IDA5OjA4OjUxICQKKy8vICAkUmV2aXNpb246IDEuNyAkCisvLyAgJEF1dGhvcjogcmhlcnZlaWxsZSAkCisvLyAgJExvY2tlcjogICQKKy8vICAkU3RhdGU6IEV4cCAkCisvLworLy8gQ2hhbmdlIEhpc3Rvcnk6CisvLyAgICAgICAgICAgICAgICRMb2c6IG5vdCBzdXBwb3J0ZWQgYnkgY3ZzMnN2biAkCisvLyAgICAgICAgICAgICAgIFJldmlzaW9uIDEuNiAgMjAwNS8wMi8yOCAxMTozMzo0OCAgcmhlcnZlaWxsZQorLy8gICAgICAgICAgICAgICBGaXhlZCBUc3U6c3RhIHRpbWluZyBjaGVjay4KKy8vICAgICAgICAgICAgICAgQWRkZWQgVGhkOnN0YSB0aW1pbmcgY2hlY2suCisvLworLy8gICAgICAgICAgICAgICBSZXZpc2lvbiAxLjUgIDIwMDMvMTIvMDUgMTE6MDU6MTkgIHJoZXJ2ZWlsbGUKKy8vICAgICAgICAgICAgICAgRml4ZWQgc2xhdmUgYWRkcmVzcyBNU0I9JzEnIGJ1ZworLy8KKy8vICAgICAgICAgICAgICAgUmV2aXNpb24gMS40ICAyMDAzLzA5LzExIDA4OjI1OjM3ICByaGVydmVpbGxlCisvLyAgICAgICAgICAgICAgIEZpeGVkIGEgYnVnIGluIHRoZSB0aW1pbmcgc2VjdGlvbi4gQ2hhbmdlZCAndHN0X3NjbCcgaW50byAndHN0X3N0bycuCisvLworLy8gICAgICAgICAgICAgICBSZXZpc2lvbiAxLjMgIDIwMDIvMTAvMzAgMTg6MTE6MDYgIHJoZXJ2ZWlsbGUKKy8vICAgICAgICAgICAgICAgQWRkZWQgdGltaW5nIHRlc3RzIHRvIGkyY19tb2RlbC4KKy8vICAgICAgICAgICAgICAgVXBkYXRlZCB0ZXN0YmVuY2guCisvLworLy8gICAgICAgICAgICAgICBSZXZpc2lvbiAxLjIgIDIwMDIvMDMvMTcgMTA6MjY6MzggIHJoZXJ2ZWlsbGUKKy8vICAgICAgICAgICAgICAgRml4ZWQgc29tZSByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIGkyYy1zbGF2ZSBtb2RlbC4KKy8vICAgICAgICAgICAgICAgQWRkZWQgZGVidWcgaW5mb3JtYXRpb24uCisvLyAgICAgICAgICAgICAgIEFkZGVkIGhlYWRlcnMuCisvLworCisKK21vZHVsZSBpMmNfc2xhdmVfbW9kZWwgKHNjbCwgc2RhKTsKKworCS8vCisJLy8gcGFyYW1ldGVycworCS8vCisJcGFyYW1ldGVyIEkyQ19BRFIgPSA3J2IwMDFfMDAwMDsKKworCS8vCisJLy8gaW5wdXQgJiYgb3V0cHVzCisJLy8KKwlpbnB1dCBzY2w7CisJaW5vdXQgc2RhOworCisJLy8KKwkvLyBWYXJpYWJsZSBkZWNsYXJhdGlvbgorCS8vCisJd2lyZSBkZWJ1ZyA9IDEnYjE7CisKKwlyZWcgWzc6MF0gbWVtIFsyNTU6MF07IC8vIGluaXRpYXRlIG1lbW9yeQorCXJlZyBbNzowXSBtZW1fYWRyOyAgIC8vIG1lbW9yeSBhZGRyZXNzCisJcmVnIFs3OjBdIG1lbV9kbzsgICAgLy8gbWVtb3J5IGRhdGEgb3V0cHV0CisKKwlyZWcgc3RhLCBkX3N0YTsKKwlyZWcgc3RvLCBkX3N0bzsKKworCXJlZyBbNzowXSBzcjsgICAgICAgIC8vIDhiaXQgc2hpZnQgcmVnaXN0ZXIKKwlyZWcgICAgICAgcnc7ICAgICAgICAvLyByZWFkL3dyaXRlIGRpcmVjdGlvbgorCisJd2lyZSAgICAgIG15X2FkcjsgICAgLy8gbXkgYWRkcmVzcyBjYWxsZWQgPz8KKwl3aXJlICAgICAgaTJjX3Jlc2V0OyAvLyBpMmMtc3RhdGVtYWNoaW5lIHJlc2V0CisJcmVnIFsyOjBdIGJpdF9jbnQ7ICAgLy8gM2JpdCBkb3duY291bnRlcgorCXdpcmUgICAgICBhY2NfZG9uZTsgIC8vIDhiaXRzIHRyYW5zZmVyZWQKKwlyZWcgICAgICAgbGQ7ICAgICAgICAvLyBsb2FkIGRvd25jb3VudGVyCisKKwlyZWcgICAgICAgc2RhX287ICAgICAvLyBzZGEtZHJpdmUgbGV2ZWwKKwl3aXJlICAgICAgc2RhX2RseTsgICAvLyBkZWxheWVkIHZlcnNpb24gb2Ygc2RhCisKKwkvLyBzdGF0ZW1hY2hpbmUgZGVjbGFyYXRpb24KKwlwYXJhbWV0ZXIgaWRsZSAgICAgICAgPSAzJ2IwMDA7CisJcGFyYW1ldGVyIHNsYXZlX2FjayAgID0gMydiMDAxOworCXBhcmFtZXRlciBnZXRfbWVtX2FkciA9IDMnYjAxMDsKKwlwYXJhbWV0ZXIgZ21hX2FjayAgICAgPSAzJ2IwMTE7CisJcGFyYW1ldGVyIGRhdGEgICAgICAgID0gMydiMTAwOworCXBhcmFtZXRlciBkYXRhX2FjayAgICA9IDMnYjEwMTsKKworCXJlZyBbMjowXSBzdGF0ZTsgLy8gc3lub3BzeXMgZW51bV9zdGF0ZQorCisJLy8KKwkvLyBtb2R1bGUgYm9keQorCS8vCisKKwlpbml0aWFsCisJYmVnaW4KKwkgICBzZGFfbyA9IDEnYjE7CisJICAgc3RhdGUgPSBpZGxlOworCWVuZAorCisJLy8gZ2VuZXJhdGUgc2hpZnQgcmVnaXN0ZXIKKwlhbHdheXMgQChwb3NlZGdlIHNjbCkKKwkgIHNyIDw9ICMxIHtzcls2OjBdLHNkYX07CisKKwkvL2RldGVjdCBteV9hZGRyZXNzCisJYXNzaWduIG15X2FkciA9IChzcls3OjFdID09IEkyQ19BRFIpOworCS8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgYmUgYSBnZW5lcmljIGFzc2lnbiwgYnV0IHJhdGhlcgorCS8vIHF1YWxpZmllZCBvbiBhZGRyZXNzIHRyYW5zZmVyIHBoYXNlIGFuZCBwcm9iYWJseSByZXNldCBieSBzdG9wCisKKwkvL2dlbmVyYXRlIGJpdC1jb3VudGVyCisJYWx3YXlzIEAocG9zZWRnZSBzY2wpCisJICBpZihsZCkKKwkgICAgYml0X2NudCA8PSAjMSAzJ2IxMTE7CisJICBlbHNlCisJICAgIGJpdF9jbnQgPD0gIzEgYml0X2NudCAtIDMnaDE7CisKKwkvL2dlbmVyYXRlIGFjY2VzcyBkb25lIHNpZ25hbAorCWFzc2lnbiBhY2NfZG9uZSA9ICEofGJpdF9jbnQpOworCisJLy8gZ2VuZXJhdGUgZGVsYXllZCB2ZXJzaW9uIG9mIHNkYQorCS8vIHRoaXMgbW9kZWwgYXNzdW1lcyBhIGhvbGQgdGltZSBmb3Igc2RhIGFmdGVyIHRoZSBmYWxsaW5nIGVkZ2Ugb2Ygc2NsLgorCS8vIEFjY29yZGluZyB0byB0aGUgUGhpbGxpcHMgaTJjIHNwZWMsIHRoZXJlIHMvYiBhIDAgbnMgaG9sZCB0aW1lIGZvciBzZGEKKwkvLyB3aXRoIHJlZ2FyZHMgdG8gc2NsLiBJZiB0aGUgZGF0YSBjaGFuZ2VzIGNvaW5jaWRlbnQgd2l0aCB0aGUgY2xvY2ssIHRoZQorCS8vIGFja25vd2xlZGdlIGlzIG1pc3NlZAorCS8vIEZpeCBieSBNaWNoYWVsIFNvc25vc2tpCisJYXNzaWduICMxIHNkYV9kbHkgPSBzZGE7CisKKworCS8vZGV0ZWN0IHN0YXJ0IGNvbmRpdGlvbgorCWFsd2F5cyBAKG5lZ2VkZ2Ugc2RhKQorCSAgaWYoc2NsKQorCSAgICBiZWdpbgorCSAgICAgICAgc3RhICAgPD0gIzEgMSdiMTsKKwkJZF9zdGEgPD0gIzEgMSdiMDsKKwkJc3RvICAgPD0gIzEgMSdiMDsKKworCSAgICAgICAgaWYoZGVidWcpCisJICAgICAgICAgICRkaXNwbGF5KCJERUJVRyBpMmNfc2xhdmU7IHN0YXJ0IGNvbmRpdGlvbiBkZXRlY3RlZCBhdCAldCIsICR0aW1lKTsKKwkgICAgZW5kCisJICBlbHNlCisJICAgIHN0YSA8PSAjMSAxJ2IwOworCisJYWx3YXlzIEAocG9zZWRnZSBzY2wpCisJICBkX3N0YSA8PSAjMSBzdGE7CisKKwkvLyBkZXRlY3Qgc3RvcCBjb25kaXRpb24KKwlhbHdheXMgQChwb3NlZGdlIHNkYSkKKwkgIGlmKHNjbCkKKwkgICAgYmVnaW4KKwkgICAgICAgc3RhIDw9ICMxIDEnYjA7CisJICAgICAgIHN0byA8PSAjMSAxJ2IxOworCisJICAgICAgIGlmKGRlYnVnKQorCSAgICAgICAgICRkaXNwbGF5KCJERUJVRyBpMmNfc2xhdmU7IHN0b3AgY29uZGl0aW9uIGRldGVjdGVkIGF0ICV0IiwgJHRpbWUpOworCSAgICBlbmQKKwkgIGVsc2UKKwkgICAgc3RvIDw9ICMxIDEnYjA7CisKKwkvL2dlbmVyYXRlIGkyY19yZXNldCBzaWduYWwKKwlhc3NpZ24gaTJjX3Jlc2V0ID0gc3RhIHx8IHN0bzsKKworCS8vIGdlbmVyYXRlIHN0YXRlbWFjaGluZQorCWFsd2F5cyBAKG5lZ2VkZ2Ugc2NsIG9yIHBvc2VkZ2Ugc3RvKQorCSAgaWYgKHN0byB8fCAoc3RhICYmICFkX3N0YSkgKQorCSAgICBiZWdpbgorCSAgICAgICAgc3RhdGUgPD0gIzEgaWRsZTsgLy8gcmVzZXQgc3RhdGVtYWNoaW5lCisKKwkgICAgICAgIHNkYV9vIDw9ICMxIDEnYjE7CisJICAgICAgICBsZCAgICA8PSAjMSAxJ2IxOworCSAgICBlbmQKKwkgIGVsc2UKKwkgICAgYmVnaW4KKwkgICAgICAgIC8vIGluaXRpYWwgc2V0dGluZ3MKKwkgICAgICAgIHNkYV9vIDw9ICMxIDEnYjE7CisJICAgICAgICBsZCAgICA8PSAjMSAxJ2IwOworCisJICAgICAgICBjYXNlKHN0YXRlKSAvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCSAgICAgICAgICAgIGlkbGU6IC8vIGlkbGUgc3RhdGUKKwkgICAgICAgICAgICAgIGlmIChhY2NfZG9uZSAmJiBteV9hZHIpCisJICAgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgICBzdGF0ZSA8PSAjMSBzbGF2ZV9hY2s7CisJICAgICAgICAgICAgICAgICAgICBydyA8PSAjMSBzclswXTsKKwkgICAgICAgICAgICAgICAgICAgIHNkYV9vIDw9ICMxIDEnYjA7IC8vIGdlbmVyYXRlIGkyY19hY2sKKworCSAgICAgICAgICAgICAgICAgICAgIzI7CisJICAgICAgICAgICAgICAgICAgICBpZihkZWJ1ZyAmJiBydykKKwkgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIkRFQlVHIGkyY19zbGF2ZTsgY29tbWFuZCBieXRlIHJlY2VpdmVkIChyZWFkKSBhdCAldCIsICR0aW1lKTsKKwkgICAgICAgICAgICAgICAgICAgIGlmKGRlYnVnICYmICFydykKKwkgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIkRFQlVHIGkyY19zbGF2ZTsgY29tbWFuZCBieXRlIHJlY2VpdmVkICh3cml0ZSkgYXQgJXQiLCAkdGltZSk7CisKKwkgICAgICAgICAgICAgICAgICAgIGlmKHJ3KQorCSAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtX2RvIDw9ICMxIG1lbVttZW1fYWRyXTsKKworCSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGVidWcpCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMiAkZGlzcGxheSgiREVCVUcgaTJjX3NsYXZlOyBkYXRhIGJsb2NrIHJlYWQgJXggZnJvbSBhZGRyZXNzICV4ICgxKSIsIG1lbV9kbywgbWVtX2Fkcik7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMiAkZGlzcGxheSgiREVCVUcgaTJjX3NsYXZlOyBtZW1jaGVjayBbJXhdPSV4IiwgbWVtX2FkciwgbWVtW21lbV9hZHJdKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisJICAgICAgICAgICAgICAgICAgICAgIGVuZAorCSAgICAgICAgICAgICAgICBlbmQKKworCSAgICAgICAgICAgIHNsYXZlX2FjazoKKwkgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgaWYocncpCisJICAgICAgICAgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlIDw9ICMxIGRhdGE7CisJICAgICAgICAgICAgICAgICAgICAgICAgc2RhX28gPD0gIzEgbWVtX2RvWzddOworCSAgICAgICAgICAgICAgICAgICAgZW5kCisJICAgICAgICAgICAgICAgICAgZWxzZQorCSAgICAgICAgICAgICAgICAgICAgc3RhdGUgPD0gIzEgZ2V0X21lbV9hZHI7CisKKwkgICAgICAgICAgICAgICAgICBsZCAgICA8PSAjMSAxJ2IxOworCSAgICAgICAgICAgICAgZW5kCisKKwkgICAgICAgICAgICBnZXRfbWVtX2FkcjogLy8gd2FpdCBmb3IgbWVtb3J5IGFkZHJlc3MKKwkgICAgICAgICAgICAgIGlmKGFjY19kb25lKQorCSAgICAgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgICAgICAgc3RhdGUgPD0gIzEgZ21hX2FjazsKKwkgICAgICAgICAgICAgICAgICAgIG1lbV9hZHIgPD0gIzEgc3I7IC8vIHN0b3JlIG1lbW9yeSBhZGRyZXNzCisJICAgICAgICAgICAgICAgICAgICBzZGFfbyA8PSAjMSAhKHNyIDw9IDI1NSk7IC8vIGdlbmVyYXRlIGkyY19hY2ssIGZvciB2YWxpZCBhZGRyZXNzCisKKwkgICAgICAgICAgICAgICAgICAgIGlmKGRlYnVnKQorCSAgICAgICAgICAgICAgICAgICAgICAjMSAkZGlzcGxheSgiREVCVUcgaTJjX3NsYXZlOyBhZGRyZXNzIHJlY2VpdmVkLiBhZHI9JXgsIGFjaz0lYiIsIHNyLCBzZGFfbyk7CisJICAgICAgICAgICAgICAgIGVuZAorCisJICAgICAgICAgICAgZ21hX2FjazoKKwkgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgc3RhdGUgPD0gIzEgZGF0YTsKKwkgICAgICAgICAgICAgICAgICBsZCAgICA8PSAjMSAxJ2IxOworCSAgICAgICAgICAgICAgZW5kCisKKwkgICAgICAgICAgICBkYXRhOiAvLyByZWNlaXZlIG9yIGRyaXZlIGRhdGEKKwkgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgaWYocncpCisJICAgICAgICAgICAgICAgICAgICBzZGFfbyA8PSAjMSBtZW1fZG9bN107CisKKwkgICAgICAgICAgICAgICAgICBpZihhY2NfZG9uZSkKKwkgICAgICAgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPD0gIzEgZGF0YV9hY2s7CisJICAgICAgICAgICAgICAgICAgICAgICAgbWVtX2FkciA8PSAjMiBtZW1fYWRyICsgOCdoMTsKKwkgICAgICAgICAgICAgICAgICAgICAgICBzZGFfbyA8PSAjMSAocncgJiYgKG1lbV9hZHIgPD0gMjU1KSApOyAvLyBzZW5kIGFjayBvbiB3cml0ZSwgcmVjZWl2ZSBhY2sgb24gcmVhZAorCisJICAgICAgICAgICAgICAgICAgICAgICAgaWYocncpCisJICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMzIG1lbV9kbyA8PSBtZW1bbWVtX2Fkcl07CisKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihkZWJ1ZykKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICM1ICRkaXNwbGF5KCJERUJVRyBpMmNfc2xhdmU7IGRhdGEgYmxvY2sgcmVhZCAleCBmcm9tIGFkZHJlc3MgJXggKDIpIiwgbWVtX2RvLCBtZW1fYWRyKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisJICAgICAgICAgICAgICAgICAgICAgICAgaWYoIXJ3KQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1bIG1lbV9hZHIgXSA8PSAjMSBzcjsgLy8gc3RvcmUgZGF0YSBpbiBtZW1vcnkKKworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRlYnVnKQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzIgJGRpc3BsYXkoIkRFQlVHIGkyY19zbGF2ZTsgZGF0YSBibG9jayB3cml0ZSAleCB0byBhZGRyZXNzICV4Iiwgc3IsIG1lbV9hZHIpOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisJICAgICAgICAgICAgICAgICAgICBlbmQKKwkgICAgICAgICAgICAgIGVuZAorCisJICAgICAgICAgICAgZGF0YV9hY2s6CisJICAgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgICAgIGxkIDw9ICMxIDEnYjE7CisKKwkgICAgICAgICAgICAgICAgICBpZihydykKKwkgICAgICAgICAgICAgICAgICAgIGlmKHNyWzBdKSAvLyByZWFkIG9wZXJhdGlvbiAmJiBtYXN0ZXIgc2VuZCBOQUNLCisJICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA8PSAjMSBpZGxlOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgc2RhX28gPD0gIzEgMSdiMTsKKwkgICAgICAgICAgICAgICAgICAgICAgZW5kCisJICAgICAgICAgICAgICAgICAgICBlbHNlCisJICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA8PSAjMSBkYXRhOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgc2RhX28gPD0gIzEgbWVtX2RvWzddOworCSAgICAgICAgICAgICAgICAgICAgICBlbmQKKwkgICAgICAgICAgICAgICAgICBlbHNlCisJICAgICAgICAgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlIDw9ICMxIGRhdGE7CisJICAgICAgICAgICAgICAgICAgICAgICAgc2RhX28gPD0gIzEgMSdiMTsKKwkgICAgICAgICAgICAgICAgICAgIGVuZAorCSAgICAgICAgICAgICAgZW5kCisKKwkgICAgICAgIGVuZGNhc2UKKwkgICAgZW5kCisKKwkvLyByZWFkIGRhdGEgZnJvbSBtZW1vcnkKKwlhbHdheXMgQChwb3NlZGdlIHNjbCkKKwkgIGlmKCFhY2NfZG9uZSAmJiBydykKKwkgICAgbWVtX2RvIDw9ICMxIHttZW1fZG9bNjowXSwgMSdiMX07IC8vIGluc2VydCAxJ2IxIGZvciBob3N0IGFjayBnZW5lcmF0aW9uCisKKwkvLyBnZW5lcmF0ZSB0cmktc3RhdGVzCisJYXNzaWduIHNkYSA9IHNkYV9vID8gMSdieiA6IDEnYjA7CisKKworCS8vCisJLy8gVGltaW5nIGNoZWNrcworCS8vCisKKwl3aXJlIHRzdF9zdG8gPSBzdG87CisJd2lyZSB0c3Rfc3RhID0gc3RhOworCisJc3BlY2lmeQorCSAgc3BlY3BhcmFtIG5vcm1hbF9zY2xfbG93ICA9IDQ3MDAsCisJICAgICAgICAgICAgbm9ybWFsX3NjbF9oaWdoID0gNDAwMCwKKwkgICAgICAgICAgICBub3JtYWxfdHN1X3N0YSAgPSA0NzAwLAorCSAgICAgICAgICAgIG5vcm1hbF90aGRfc3RhICA9IDQwMDAsCisJICAgICAgICAgICAgbm9ybWFsX3RzdV9zdG8gID0gNDAwMCwKKwkgICAgICAgICAgICBub3JtYWxfdGJ1ZiAgICAgPSA0NzAwLAorCisJICAgICAgICAgICAgZmFzdF9zY2xfbG93ICA9IDEzMDAsCisJICAgICAgICAgICAgZmFzdF9zY2xfaGlnaCA9ICA2MDAsCisJICAgICAgICAgICAgZmFzdF90c3Vfc3RhICA9IDEzMDAsCisJICAgICAgICAgICAgZmFzdF90aGRfc3RhICA9ICA2MDAsCisJICAgICAgICAgICAgZmFzdF90c3Vfc3RvICA9ICA2MDAsCisJICAgICAgICAgICAgZmFzdF90YnVmICAgICA9IDEzMDA7CisKKwkgICR3aWR0aChuZWdlZGdlIHNjbCwgbm9ybWFsX3NjbF9sb3cpOyAgLy8gc2NsIGxvdyB0aW1lCisJICAkd2lkdGgocG9zZWRnZSBzY2wsIG5vcm1hbF9zY2xfaGlnaCk7IC8vIHNjbCBoaWdoIHRpbWUKKworCSAgJHNldHVwKHBvc2VkZ2Ugc2NsLCBuZWdlZGdlIHNkYSAmJiYgc2NsLCBub3JtYWxfdHN1X3N0YSk7IC8vIHNldHVwIHN0YXJ0CisJICAkc2V0dXAobmVnZWRnZSBzZGEgJiYmIHNjbCwgbmVnZWRnZSBzY2wsIG5vcm1hbF90aGRfc3RhKTsgLy8gaG9sZCBzdGFydAorCSAgJHNldHVwKHBvc2VkZ2Ugc2NsLCBwb3NlZGdlIHNkYSAmJiYgc2NsLCBub3JtYWxfdHN1X3N0byk7IC8vIHNldHVwIHN0b3AKKworCSAgJHNldHVwKHBvc2VkZ2UgdHN0X3N0YSwgcG9zZWRnZSB0c3Rfc3RvLCBub3JtYWxfdGJ1Zik7IC8vIHN0b3AgdG8gc3RhcnQgdGltZQorCWVuZHNwZWNpZnkKKworZW5kbW9kdWxlCisKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9tb2RlbC9tdDQ4bGM4bThhMi52IGIvdmVyaWxvZy9kdi9tb2RlbC9tdDQ4bGM4bThhMi52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNmMzA5ZjEKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L21vZGVsL210NDhsYzhtOGEyLnYKQEAgLTAsMCArMSw5OTIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAxMiBNaWNyb24gVGVjaG5vbG9neSwgSW5jLgorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgIEZpbGUgTmFtZTogIE1UNDhMQzhNOEEyLlYgIAorKiAgICAgIFZlcnNpb246ICAwLjBmCisqICAgICAgICAgRGF0ZTogIEp1bHkgOHRoLCAxOTk5CisqICAgICAgICBNb2RlbDogIEJVUyBGdW5jdGlvbmFsCisqICAgIFNpbXVsYXRvcjogIE1vZGVsIFRlY2hub2xvZ3kgKFBDIHZlcnNpb24gNS4yZSBQRSkKKyoKKyogRGVwZW5kZW5jaWVzOiAgTm9uZQorKgorKiAgICAgICBBdXRob3I6ICBTb24gUC4gSHV5bmgKKyogICAgICAgIEVtYWlsOiAgc3BodXluaEBtaWNyb24uY29tCisqICAgICAgICBQaG9uZTogICgyMDgpIDM2OC0zODI1CisqICAgICAgQ29tcGFueTogIE1pY3JvbiBUZWNobm9sb2d5LCBJbmMuCisqICAgICAgICBNb2RlbDogIE1UNDhMQzhNMTZBMiAoMk1lZyB4IDggeCA0IEJhbmtzKQorKgorKiAgRGVzY3JpcHRpb246ICBNaWNyb24gMTI4TWIgU0RSQU0gVmVyaWxvZyBtb2RlbAorKgorKiAgIExpbWl0YXRpb246ICAtIERvZXNuJ3QgY2hlY2sgZm9yIDQwOTYgY3ljbGUgcmVmcmVzaAorKgorKiAgICAgICAgIE5vdGU6ICAtIFNldCBzaW11bGF0b3IgcmVzb2x1dGlvbiB0byAicHMiIGFjY3VyYWN5CisqICAgICAgICAgICAgICAgIC0gU2V0IERlYnVnID0gMCB0byBkaXNhYmxlICRkaXNwbGF5IG1lc3NhZ2VzCisqCisqICAgRGlzY2xhaW1lcjogIFRIRVNFIERFU0lHTlMgQVJFIFBST1ZJREVEICJBUyBJUyIgV0lUSCBOTyBXQVJSQU5UWSAKKyogICAgICAgICAgICAgICAgV0hBVFNPRVZFUiBBTkQgTUlDUk9OIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQU5ZIAorKiAgICAgICAgICAgICAgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUgorKiAgICAgICAgICAgICAgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgQUdBSU5TVCBJTkZSSU5HRU1FTlQuCisqCisqICAgICAgICAgICAgICAgIENvcHlyaWdodCCpIDE5OTggTWljcm9uIFNlbWljb25kdWN0b3IgUHJvZHVjdHMsIEluYy4KKyogICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlYXJ2ZWQKKyoKKyogUmV2ICAgQXV0aG9yICAgICAgICAgIFBob25lICAgICAgICAgRGF0ZSAgICAgICAgQ2hhbmdlcworKiAtLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogMC4wZiAgU29uIEh1eW5oICAgICAgIDIwOC0zNjgtMzgyNSAgMDcvMDgvMTk5OSAgLSBGaXggdFdSID0gMSBDbGsgKyA3LjUgbnMgKEF1dG8pCisqICAgICAgIE1pY3JvbiBUZWNobm9sb2d5IEluYy4gICAgICAgICAgICAgICAgICAgIC0gRml4IHRXUiA9IDE1IG5zIChNYW51YWwpCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRml4IHRSUCAoQXV0b3ByZWNoYXJnZSB0byBBdXRvUmVmcmVzaCkKKyoKKyogMC4wYSAgU29uIEh1eW5oICAgICAgIDIwOC0zNjgtMzgyNSAgMDUvMTMvMTk5OCAgLSBGaXJzdCBSZWxlYXNlIChmcm9tIDY0TWIgcmV2IDAuMGUpCisqICAgICAgIE1pY3JvbiBUZWNobm9sb2d5IEluYy4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2B0aW1lc2NhbGUgMW5zIC8gMTAwcHMKKworbW9kdWxlIG10NDhsYzhtOGEyIChEcSwgQWRkciwgQmEsIENsaywgQ2tlLCBDc19uLCBSYXNfbiwgQ2FzX24sIFdlX24sIERxbSk7CisKKyAgICBwYXJhbWV0ZXIgYWRkcl9iaXRzID0gICAgICAxMjsKKyAgICBwYXJhbWV0ZXIgZGF0YV9iaXRzID0gICAgICA4OworICAgIHBhcmFtZXRlciBjb2xfYml0cyAgPSAgICAgICA5OworICAgIHBhcmFtZXRlciBtZW1fc2l6ZXMgPSAyMDk3MTUxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAyIE1lZworCisgICAgaW5vdXQgICAgIFtkYXRhX2JpdHMgLSAxIDogMF0gRHE7CisgICAgaW5wdXQgICAgIFthZGRyX2JpdHMgLSAxIDogMF0gQWRkcjsKKyAgICBpbnB1dCAgICAgICAgICAgICAgICAgWzEgOiAwXSBCYTsKKyAgICBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICBDbGs7CisgICAgaW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgQ2tlOworICAgIGlucHV0ICAgICAgICAgICAgICAgICAgICAgICAgIENzX247CisgICAgaW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgUmFzX247CisgICAgaW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgQ2FzX247CisgICAgaW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgV2VfbjsKKyAgICBpbnB1dCAgICAgICAgICAgICAgICAgWzAgOiAwXSBEcW07CisKKyAgICByZWcgICAgICAgW2RhdGFfYml0cyAtIDEgOiAwXSBCYW5rMCBbMCA6IG1lbV9zaXplc107CisgICAgcmVnICAgICAgIFtkYXRhX2JpdHMgLSAxIDogMF0gQmFuazEgWzAgOiBtZW1fc2l6ZXNdOworICAgIHJlZyAgICAgICBbZGF0YV9iaXRzIC0gMSA6IDBdIEJhbmsyIFswIDogbWVtX3NpemVzXTsKKyAgICByZWcgICAgICAgW2RhdGFfYml0cyAtIDEgOiAwXSBCYW5rMyBbMCA6IG1lbV9zaXplc107CisKKyAgICByZWcgICAgICAgICAgICAgICAgICAgWzEgOiAwXSBCYW5rX2FkZHIgWzAgOiAzXTsgICAgICAgICAgICAgICAgLy8gQmFuayBBZGRyZXNzIFBpcGVsaW5lCisgICAgcmVnICAgICAgICBbY29sX2JpdHMgLSAxIDogMF0gQ29sX2FkZHIgWzAgOiAzXTsgICAgICAgICAgICAgICAgIC8vIENvbHVtbiBBZGRyZXNzIFBpcGVsaW5lCisgICAgcmVnICAgICAgICAgICAgICAgICAgIFszIDogMF0gQ29tbWFuZCBbMCA6IDNdOyAgICAgICAgICAgICAgICAgIC8vIENvbW1hbmQgT3BlcmF0aW9uIFBpcGVsaW5lCisgICAgcmVnICAgICAgICAgICAgICAgICAgIFswIDogMF0gRHFtX3JlZzAsIERxbV9yZWcxOyAgICAgICAgICAgICAgIC8vIERRTSBPcGVyYXRpb24gUGlwZWxpbmUKKyAgICByZWcgICAgICAgW2FkZHJfYml0cyAtIDEgOiAwXSBCMF9yb3dfYWRkciwgQjFfcm93X2FkZHIsIEIyX3Jvd19hZGRyLCBCM19yb3dfYWRkcjsKKworICAgIHJlZyAgICAgICBbYWRkcl9iaXRzIC0gMSA6IDBdIE1vZGVfcmVnOworICAgIHJlZyAgICAgICBbZGF0YV9iaXRzIC0gMSA6IDBdIERxX3JlZywgRHFfZHFtOworICAgIHJlZyAgICAgICAgW2NvbF9iaXRzIC0gMSA6IDBdIENvbF90ZW1wLCBCdXJzdF9jb3VudGVyOworCisgICAgcmVnICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0X2IwLCBBY3RfYjEsIEFjdF9iMiwgQWN0X2IzOyAgIC8vIEJhbmsgQWN0aXZhdGUKKyAgICByZWcgICAgICAgICAgICAgICAgICAgICAgICAgICBQY19iMCwgUGNfYjEsIFBjX2IyLCBQY19iMzsgICAgICAgLy8gQmFuayBQcmVjaGFyZ2UKKworICAgIHJlZyAgICAgICAgICAgICAgICAgICBbMSA6IDBdIEJhbmtfcHJlY2hhcmdlICAgICBbMCA6IDNdOyAgICAgICAvLyBQcmVjaGFyZ2UgQ29tbWFuZAorICAgIHJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgIEExMF9wcmVjaGFyZ2UgICAgICBbMCA6IDNdOyAgICAgICAvLyBBZGRyWzEwXSA9IDEgKEFsbCBiYW5rcykKKyAgICByZWcgICAgICAgICAgICAgICAgICAgICAgICAgICBBdXRvX3ByZWNoYXJnZSAgICAgWzAgOiAzXTsgICAgICAgLy8gUlcgQXV0b1ByZWNoYXJnZSAoQmFuaykKKyAgICByZWcgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkX3ByZWNoYXJnZSAgICAgWzAgOiAzXTsgICAgICAgLy8gUiAgQXV0b1ByZWNoYXJnZQorICAgIHJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlX3ByZWNoYXJnZSAgICBbMCA6IDNdOyAgICAgICAvLyAgVyBBdXRvUHJlY2hhcmdlCisgICAgaW50ZWdlciAgICAgICAgICAgICAgICAgICAgICAgQ291bnRfcHJlY2hhcmdlICAgIFswIDogM107ICAgICAgIC8vIFJXIEF1dG9QcmVjaGFyZ2UgKENvdW50ZXIpCisgICAgcmVnICAgICAgICAgICAgICAgICAgICAgICAgICAgUldfaW50ZXJydXB0X3JlYWQgIFswIDogM107ICAgICAgIC8vIFJXIEludGVycnVwdCBSZWFkIHdpdGggQXV0byBQcmVjaGFyZ2UKKyAgICByZWcgICAgICAgICAgICAgICAgICAgICAgICAgICBSV19pbnRlcnJ1cHRfd3JpdGUgWzAgOiAzXTsgICAgICAgLy8gUlcgSW50ZXJydXB0IFdyaXRlIHdpdGggQXV0byBQcmVjaGFyZ2UKKworICAgIHJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlOworICAgIHJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFfb3V0X2VuYWJsZTsKKworICAgIHJlZyAgICAgICAgICAgICAgICAgICBbMSA6IDBdIEJhbmssIFByZXZpb3VzX2Jhbms7CisgICAgcmVnICAgICAgIFthZGRyX2JpdHMgLSAxIDogMF0gUm93OworICAgIHJlZyAgICAgICAgW2NvbF9iaXRzIC0gMSA6IDBdIENvbCwgQ29sX2Jyc3Q7CisKKyAgICAvLyBJbnRlcm5hbCBzeXN0ZW0gY2xvY2sKKyAgICByZWcgICAgICAgICAgICAgICAgICAgICAgICAgICBDa2VaLCBTeXNfY2xrOworCisgICAgZXZlbnQgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfZGV0ZWN0ZWQ7CisKKyAgICAvLyBDb21tYW5kcyBEZWNvZGUKKyAgICB3aXJlICAgICAgQWN0aXZlX2VuYWJsZSAgICA9IH5Dc19uICYgflJhc19uICYgIENhc19uICYgIFdlX247CisgICAgd2lyZSAgICAgIEFyZWZfZW5hYmxlICAgICAgPSB+Q3NfbiAmIH5SYXNfbiAmIH5DYXNfbiAmICBXZV9uOworICAgIHdpcmUgICAgICBCdXJzdF90ZXJtICAgICAgID0gfkNzX24gJiAgUmFzX24gJiAgQ2FzX24gJiB+V2VfbjsKKyAgICB3aXJlICAgICAgTW9kZV9yZWdfZW5hYmxlICA9IH5Dc19uICYgflJhc19uICYgfkNhc19uICYgfldlX247CisgICAgd2lyZSAgICAgIFByZWNoX2VuYWJsZSAgICAgPSB+Q3NfbiAmIH5SYXNfbiAmICBDYXNfbiAmIH5XZV9uOworICAgIHdpcmUgICAgICBSZWFkX2VuYWJsZSAgICAgID0gfkNzX24gJiAgUmFzX24gJiB+Q2FzX24gJiAgV2VfbjsKKyAgICB3aXJlICAgICAgV3JpdGVfZW5hYmxlICAgICA9IH5Dc19uICYgIFJhc19uICYgfkNhc19uICYgfldlX247CisKKyAgICAvLyBCdXJzdCBMZW5ndGggRGVjb2RlCisgICAgd2lyZSAgICAgIEJ1cnN0X2xlbmd0aF8xICAgPSB+TW9kZV9yZWdbMl0gJiB+TW9kZV9yZWdbMV0gJiB+TW9kZV9yZWdbMF07CisgICAgd2lyZSAgICAgIEJ1cnN0X2xlbmd0aF8yICAgPSB+TW9kZV9yZWdbMl0gJiB+TW9kZV9yZWdbMV0gJiAgTW9kZV9yZWdbMF07CisgICAgd2lyZSAgICAgIEJ1cnN0X2xlbmd0aF80ICAgPSB+TW9kZV9yZWdbMl0gJiAgTW9kZV9yZWdbMV0gJiB+TW9kZV9yZWdbMF07CisgICAgd2lyZSAgICAgIEJ1cnN0X2xlbmd0aF84ICAgPSB+TW9kZV9yZWdbMl0gJiAgTW9kZV9yZWdbMV0gJiAgTW9kZV9yZWdbMF07CisKKyAgICAvLyBDQVMgTGF0ZW5jeSBEZWNvZGUKKyAgICB3aXJlICAgICAgQ2FzX2xhdGVuY3lfMiAgICA9IH5Nb2RlX3JlZ1s2XSAmICBNb2RlX3JlZ1s1XSAmIH5Nb2RlX3JlZ1s0XTsKKyAgICB3aXJlICAgICAgQ2FzX2xhdGVuY3lfMyAgICA9IH5Nb2RlX3JlZ1s2XSAmICBNb2RlX3JlZ1s1XSAmICBNb2RlX3JlZ1s0XTsKKworYGlmZGVmIFZFUkJPU0UKKyAgICB3aXJlICAgICAgRGVidWcgICAgICAgICAgICA9IDEnYjE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWJ1ZyBtZXNzYWdlcyA6IDEgPSBPbgorYGVsc2UKKyAgICB3aXJlICAgICAgRGVidWcgICAgICAgICAgICA9IDEnYjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWJ1ZyBtZXNzYWdlcyA6IDEgPSBPbgorYGVuZGlmCisgICAgLy8gV3JpdGUgQnVyc3QgTW9kZQorICAgIHdpcmUgICAgICBXcml0ZV9idXJzdF9tb2RlID0gTW9kZV9yZWdbOV07CisKKyAgICB3aXJlICAgICAgRHFfY2hrICAgICAgICAgICA9IFN5c19jbGsgJiBEYXRhX2luX2VuYWJsZTsgICAgICAvLyBDaGVjayBzZXR1cC9ob2xkIHRpbWUgZm9yIERRCisKKyAgICBhc3NpZ24gICAgRHEgICAgICAgICAgICAgICA9IERxX3JlZzsgICAgICAgICAgICAgICAgICAgICAgICAvLyBEUSBidWZmZXIKKworICAgIC8vIENvbW1hbmRzIE9wZXJhdGlvbgorICAgIGBkZWZpbmUgICBBQ1QgICAgICAgMAorICAgIGBkZWZpbmUgICBOT1AgICAgICAgMQorICAgIGBkZWZpbmUgICBSRUFEICAgICAgMgorICAgIGBkZWZpbmUgICBSRUFEX0EgICAgMworICAgIGBkZWZpbmUgICBTRFJBTV9XUklURSAgICAgNAorICAgIGBkZWZpbmUgICBXUklURV9BICAgNQorICAgIGBkZWZpbmUgICBTRFJBTV9QUkVDSCAgICAgNgorICAgIGBkZWZpbmUgICBTRFJBTV9BX1JFRiAgICAgNworICAgIGBkZWZpbmUgICBTRFJBTV9CU1QgICAgICAgOAorICAgIGBkZWZpbmUgICBTRFJBTV9MTVIgICAgICAgOQorCisgICAgLy8gVGltaW5nIFBhcmFtZXRlcnMgZm9yIC03NSAoUEMxMzMpIGFuZCBDQVMgTGF0ZW5jeSA9IDIKKyAgICBwYXJhbWV0ZXIgdEFDICA9ICAgNi4wOworICAgIHBhcmFtZXRlciB0SFogID0gICA3LjA7CisgICAgcGFyYW1ldGVyIHRPSCAgPSAgIDIuNzsKKyAgICBwYXJhbWV0ZXIgdE1SRCA9ICAgMi4wOyAgICAgLy8gMiBDbGsgQ3ljbGVzCisgICAgcGFyYW1ldGVyIHRSQVMgPSAgNDQuMDsKKyAgICBwYXJhbWV0ZXIgdFJDICA9ICA2Ni4wOworICAgIHBhcmFtZXRlciB0UkNEID0gIDIwLjA7CisgICAgcGFyYW1ldGVyIHRSUCAgPSAgMjAuMDsKKyAgICBwYXJhbWV0ZXIgdFJSRCA9ICAxNS4wOworICAgIHBhcmFtZXRlciB0V1JhID0gICA3LjU7ICAgICAvLyBBMiBWZXJzaW9uIC0gQXV0byBwcmVjaGFyZ2UgbW9kZSBvbmx5ICgxIENsayArIDcuNSBucykKKyAgICBwYXJhbWV0ZXIgdFdScCA9ICAxNS4wOyAgICAgLy8gQTIgVmVyc2lvbiAtIFByZWNoYXJnZSBtb2RlIG9ubHkgKDE1IG5zKQorCisgICAgLy8gVGltaW5nIENoZWNrIHZhcmlhYmxlCisgICAgaW50ZWdlciAgIE1SRF9jaGs7CisgICAgaW50ZWdlciAgIFdSX2NvdW50ZXIgWzAgOiAzXTsKKyAgICB0aW1lICAgICAgV1JfY2hrIFswIDogM107CisgICAgdGltZSAgICAgIFJDX2NoaywgUlJEX2NoazsKKyAgICB0aW1lICAgICAgUkFTX2NoazAsIFJBU19jaGsxLCBSQVNfY2hrMiwgUkFTX2NoazM7CisgICAgdGltZSAgICAgIFJDRF9jaGswLCBSQ0RfY2hrMSwgUkNEX2NoazIsIFJDRF9jaGszOworICAgIHRpbWUgICAgICBSUF9jaGswLCBSUF9jaGsxLCBSUF9jaGsyLCBSUF9jaGszOworCisgICAgaW5pdGlhbCBiZWdpbgorICAgICAgCisgICAgICAgIERxX3JlZyA9IHtkYXRhX2JpdHN7MSdien19OworICAgICAgICB7RGF0YV9pbl9lbmFibGUsIERhdGFfb3V0X2VuYWJsZX0gPSAwOworICAgICAgICB7QWN0X2IwLCBBY3RfYjEsIEFjdF9iMiwgQWN0X2IzfSA9IDQnYjAwMDA7CisgICAgICAgIHtQY19iMCwgUGNfYjEsIFBjX2IyLCBQY19iM30gPSA0J2IwMDAwOworICAgICAgICB7V1JfY2hrWzBdLCBXUl9jaGtbMV0sIFdSX2Noa1syXSwgV1JfY2hrWzNdfSA9IDA7CisgICAgICAgIHtXUl9jb3VudGVyWzBdLCBXUl9jb3VudGVyWzFdLCBXUl9jb3VudGVyWzJdLCBXUl9jb3VudGVyWzNdfSA9IDA7CisgICAgICAgIHtSV19pbnRlcnJ1cHRfcmVhZFswXSwgUldfaW50ZXJydXB0X3JlYWRbMV0sIFJXX2ludGVycnVwdF9yZWFkWzJdLCBSV19pbnRlcnJ1cHRfcmVhZFszXX0gPSAwOworICAgICAgICB7UldfaW50ZXJydXB0X3dyaXRlWzBdLCBSV19pbnRlcnJ1cHRfd3JpdGVbMV0sIFJXX2ludGVycnVwdF93cml0ZVsyXSwgUldfaW50ZXJydXB0X3dyaXRlWzNdfSA9IDA7CisgICAgICAgIHtNUkRfY2hrLCBSQ19jaGssIFJSRF9jaGt9ID0gMDsKKyAgICAgICAge1JBU19jaGswLCBSQVNfY2hrMSwgUkFTX2NoazIsIFJBU19jaGszfSA9IDA7CisgICAgICAgIHtSQ0RfY2hrMCwgUkNEX2NoazEsIFJDRF9jaGsyLCBSQ0RfY2hrM30gPSAwOworICAgICAgICB7UlBfY2hrMCwgUlBfY2hrMSwgUlBfY2hrMiwgUlBfY2hrM30gPSAwOworICAgICAgICAkdGltZWZvcm1hdCAoLTksIDAsICIgbnMiLCAxMik7CisgICAgICAgIC8vJHJlYWRtZW1oKCJiYW5rMC50eHQiLCBCYW5rMCk7CisgICAgICAgIC8vJHJlYWRtZW1oKCJiYW5rMS50eHQiLCBCYW5rMSk7CisgICAgICAgIC8vJHJlYWRtZW1oKCJiYW5rMi50eHQiLCBCYW5rMik7CisgICAgICAgIC8vJHJlYWRtZW1oKCJiYW5rMy50eHQiLCBCYW5rMyk7CisgICAgZW5kCisKKyAgICAvLyBTeXN0ZW0gY2xvY2sgZ2VuZXJhdG9yCisgICAgYWx3YXlzIGJlZ2luCisgICAgICAgIEAgKHBvc2VkZ2UgQ2xrKSBiZWdpbgorICAgICAgICAgICAgU3lzX2NsayA9IENrZVo7CisgICAgICAgICAgICBDa2VaID0gQ2tlOworICAgICAgICBlbmQKKyAgICAgICAgQCAobmVnZWRnZSBDbGspIGJlZ2luCisgICAgICAgICAgICBTeXNfY2xrID0gMSdiMDsKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBhbHdheXMgQCAocG9zZWRnZSBTeXNfY2xrKSBiZWdpbgorICAgICAgICAvLyBJbnRlcm5hbCBDb21tYW1kIFBpcGVsaW5lZAorICAgICAgICBDb21tYW5kWzBdID0gQ29tbWFuZFsxXTsKKyAgICAgICAgQ29tbWFuZFsxXSA9IENvbW1hbmRbMl07CisgICAgICAgIENvbW1hbmRbMl0gPSBDb21tYW5kWzNdOworICAgICAgICBDb21tYW5kWzNdID0gYE5PUDsKKworICAgICAgICBDb2xfYWRkclswXSA9IENvbF9hZGRyWzFdOworICAgICAgICBDb2xfYWRkclsxXSA9IENvbF9hZGRyWzJdOworICAgICAgICBDb2xfYWRkclsyXSA9IENvbF9hZGRyWzNdOworICAgICAgICBDb2xfYWRkclszXSA9IHtjb2xfYml0c3sxJ2IwfX07CisKKyAgICAgICAgQmFua19hZGRyWzBdID0gQmFua19hZGRyWzFdOworICAgICAgICBCYW5rX2FkZHJbMV0gPSBCYW5rX2FkZHJbMl07CisgICAgICAgIEJhbmtfYWRkclsyXSA9IEJhbmtfYWRkclszXTsKKyAgICAgICAgQmFua19hZGRyWzNdID0gMidiMDsKKworICAgICAgICBCYW5rX3ByZWNoYXJnZVswXSA9IEJhbmtfcHJlY2hhcmdlWzFdOworICAgICAgICBCYW5rX3ByZWNoYXJnZVsxXSA9IEJhbmtfcHJlY2hhcmdlWzJdOworICAgICAgICBCYW5rX3ByZWNoYXJnZVsyXSA9IEJhbmtfcHJlY2hhcmdlWzNdOworICAgICAgICBCYW5rX3ByZWNoYXJnZVszXSA9IDInYjA7CisKKyAgICAgICAgQTEwX3ByZWNoYXJnZVswXSA9IEExMF9wcmVjaGFyZ2VbMV07CisgICAgICAgIEExMF9wcmVjaGFyZ2VbMV0gPSBBMTBfcHJlY2hhcmdlWzJdOworICAgICAgICBBMTBfcHJlY2hhcmdlWzJdID0gQTEwX3ByZWNoYXJnZVszXTsKKyAgICAgICAgQTEwX3ByZWNoYXJnZVszXSA9IDEnYjA7CisKKyAgICAgICAgLy8gRHFtIHBpcGVsaW5lIGZvciBSZWFkCisgICAgICAgIERxbV9yZWcwID0gRHFtX3JlZzE7CisgICAgICAgIERxbV9yZWcxID0gRHFtOworCisgICAgICAgIC8vIFJlYWQgb3IgV3JpdGUgd2l0aCBBdXRvIFByZWNoYXJnZSBDb3VudGVyCisgICAgICAgIGlmIChBdXRvX3ByZWNoYXJnZVswXSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgQ291bnRfcHJlY2hhcmdlWzBdID0gQ291bnRfcHJlY2hhcmdlWzBdICsgMTsKKyAgICAgICAgZW5kCisgICAgICAgIGlmIChBdXRvX3ByZWNoYXJnZVsxXSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgQ291bnRfcHJlY2hhcmdlWzFdID0gQ291bnRfcHJlY2hhcmdlWzFdICsgMTsKKyAgICAgICAgZW5kCisgICAgICAgIGlmIChBdXRvX3ByZWNoYXJnZVsyXSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgQ291bnRfcHJlY2hhcmdlWzJdID0gQ291bnRfcHJlY2hhcmdlWzJdICsgMTsKKyAgICAgICAgZW5kCisgICAgICAgIGlmIChBdXRvX3ByZWNoYXJnZVszXSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgQ291bnRfcHJlY2hhcmdlWzNdID0gQ291bnRfcHJlY2hhcmdlWzNdICsgMTsKKyAgICAgICAgZW5kCisKKyAgICAgICAgLy8gdE1SRCBDb3VudGVyCisgICAgICAgIE1SRF9jaGsgPSBNUkRfY2hrICsgMTsKKworICAgICAgICAvLyB0V1IgQ291bnRlciBmb3IgV3JpdGUKKyAgICAgICAgV1JfY291bnRlclswXSA9IFdSX2NvdW50ZXJbMF0gKyAxOworICAgICAgICBXUl9jb3VudGVyWzFdID0gV1JfY291bnRlclsxXSArIDE7CisgICAgICAgIFdSX2NvdW50ZXJbMl0gPSBXUl9jb3VudGVyWzJdICsgMTsKKyAgICAgICAgV1JfY291bnRlclszXSA9IFdSX2NvdW50ZXJbM10gKyAxOworCisgICAgICAgIC8vIEF1dG8gUmVmcmVzaAorICAgICAgICBpZiAoQXJlZl9lbmFibGUgPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEFSRUYgOiBBdXRvIFJlZnJlc2giLCAkdGltZSk7CisgICAgICAgICAgICAvLyBBdXRvIFJlZnJlc2ggdG8gQXV0byBSZWZyZXNoCisgICAgICAgICAgICBpZiAoJHRpbWUgLSBSQ19jaGsgPCB0UkMpIGJlZ2luCisJICAgICAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0UkMgdmlvbGF0aW9uIGR1cmluZyBBdXRvIFJlZnJlc2giLCAkdGltZSk7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIC8vIFByZWNoYXJnZSB0byBBdXRvIFJlZnJlc2gKKyAgICAgICAgICAgIGlmICgkdGltZSAtIFJQX2NoazAgPCB0UlAgfHwgJHRpbWUgLSBSUF9jaGsxIDwgdFJQIHx8ICR0aW1lIC0gUlBfY2hrMiA8IHRSUCB8fCAkdGltZSAtIFJQX2NoazMgPCB0UlApIGJlZ2luCisJICAgICAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0UlAgdmlvbGF0aW9uIGR1cmluZyBBdXRvIFJlZnJlc2giLCAkdGltZSk7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIC8vIFByZWNoYXJnZSB0byBSZWZyZXNoCisgICAgICAgICAgICBpZiAoUGNfYjAgPT0gMSdiMCB8fCBQY19iMSA9PSAxJ2IwIHx8IFBjX2IyID09IDEnYjAgfHwgUGNfYjMgPT0gMSdiMCkgYmVnaW4KKwkgICAgICAgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IEFsbCBiYW5rcyBtdXN0IGJlIFByZWNoYXJnZSBiZWZvcmUgQXV0byBSZWZyZXNoIiwgJHRpbWUpOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAvLyBSZWNvcmQgQ3VycmVudCB0UkMgdGltZQorICAgICAgICAgICAgUkNfY2hrID0gJHRpbWU7CisgICAgICAgIGVuZAorICAgICAgICAKKyAgICAgICAgLy8gTG9hZCBNb2RlIFJlZ2lzdGVyCisgICAgICAgIGlmIChNb2RlX3JlZ19lbmFibGUgPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgIC8vIERlY29kZSBDQVMgTGF0ZW5jeSwgQnVyc3QgTGVuZ3RoLCBCdXJzdCBUeXBlLCBhbmQgV3JpdGUgQnVyc3QgTW9kZQorICAgICAgICAgICAgaWYgKFBjX2IwID09IDEnYjEgJiYgUGNfYjEgPT0gMSdiMSAmJiBQY19iMiA9PSAxJ2IxICYmIFBjX2IzID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgTW9kZV9yZWcgPSBBZGRyOworICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IExNUiAgOiBMb2FkIE1vZGUgUmVnaXN0ZXIiLCAkdGltZSk7CisgICAgICAgICAgICAgICAgICAgIC8vIENBUyBMYXRlbmN5CisgICAgICAgICAgICAgICAgICAgIGlmIChBZGRyWzYgOiA0XSA9PSAzJ2IwMTApCisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQVMgTGF0ZW5jeSAgICAgID0gMiIpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBZGRyWzYgOiA0XSA9PSAzJ2IwMTEpCisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQVMgTGF0ZW5jeSAgICAgID0gMyIpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQVMgTGF0ZW5jeSAgICAgID0gUmVzZXJ2ZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gQnVyc3QgTGVuZ3RoCisgICAgICAgICAgICAgICAgICAgIGlmIChBZGRyWzIgOiAwXSA9PSAzJ2IwMDApCisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXJzdCBMZW5ndGggICAgID0gMSIpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBZGRyWzIgOiAwXSA9PSAzJ2IwMDEpCisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXJzdCBMZW5ndGggICAgID0gMiIpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBZGRyWzIgOiAwXSA9PSAzJ2IwMTApCisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXJzdCBMZW5ndGggICAgID0gNCIpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBZGRyWzIgOiAwXSA9PSAzJ2IwMTEpCisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXJzdCBMZW5ndGggICAgID0gOCIpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBZGRyWzMgOiAwXSA9PSA0J2IwMTExKQorICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVyc3QgTGVuZ3RoICAgICA9IEZ1bGwiKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVyc3QgTGVuZ3RoICAgICA9IFJlc2VydmVkIik7CisgICAgICAgICAgICAgICAgICAgIC8vIEJ1cnN0IFR5cGUKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFkZHJbM10gPT0gMSdiMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1cnN0IFR5cGUgICAgICAgPSBTZXF1ZW50aWFsIik7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFkZHJbM10gPT0gMSdiMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1cnN0IFR5cGUgICAgICAgPSBJbnRlcmxlYXZlZCIpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXJzdCBUeXBlICAgICAgID0gUmVzZXJ2ZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gV3JpdGUgQnVyc3QgTW9kZQorICAgICAgICAgICAgICAgICAgICBpZiAoQWRkcls5XSA9PSAxJ2IwKQorICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUgQnVyc3QgTW9kZSA9IFByb2dyYW1tZWQgQnVyc3QgTGVuZ3RoIik7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFkZHJbOV0gPT0gMSdiMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlIEJ1cnN0IE1vZGUgPSBTaW5nbGUgTG9jYXRpb24gQWNjZXNzIik7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlIEJ1cnN0IE1vZGUgPSBSZXNlcnZlZCIpOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KKworCSAgICAgICAtPmVycm9yX2RldGVjdGVkOworICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogYWxsIGJhbmtzIG11c3QgYmUgUHJlY2hhcmdlIGJlZm9yZSBMb2FkIE1vZGUgUmVnaXN0ZXIiLCAkdGltZSk7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIC8vIFJFRiB0byBMTVIKKyAgICAgICAgICAgIGlmICgkdGltZSAtIFJDX2NoayA8IHRSQykgYmVnaW4KKworCSAgICAgICAtPmVycm9yX2RldGVjdGVkOworICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogdFJDIHZpb2xhdGlvbiBkdXJpbmcgTG9hZCBNb2RlIFJlZ2lzdGVyIiwgJHRpbWUpOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAvLyBMTVIgdG8gTE1SCisgICAgICAgICAgICBpZiAoTVJEX2NoayA8IHRNUkQpIGJlZ2luCisKKwkgICAgICAgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IHRNUkQgdmlvbGF0aW9uIGR1cmluZyBMb2FkIE1vZGUgUmVnaXN0ZXIiLCAkdGltZSk7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIE1SRF9jaGsgPSAwOworICAgICAgICBlbmQKKyAgICAgICAgCisgICAgICAgIC8vIEFjdGl2ZSBCbG9jayAoTGF0Y2ggQmFuayBBZGRyZXNzIGFuZCBSb3cgQWRkcmVzcykKKyAgICAgICAgaWYgKEFjdGl2ZV9lbmFibGUgPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgIGlmIChCYSA9PSAyJ2IwMCAmJiBQY19iMCA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIHtBY3RfYjAsIFBjX2IwfSA9IDInYjEwOworICAgICAgICAgICAgICAgIEIwX3Jvd19hZGRyID0gQWRkciBbYWRkcl9iaXRzIC0gMSA6IDBdOworICAgICAgICAgICAgICAgIFJDRF9jaGswID0gJHRpbWU7CisgICAgICAgICAgICAgICAgUkFTX2NoazAgPSAkdGltZTsKKyAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBBQ1QgIDogQmFuayA9IDAgUm93ID0gJWQiLCAkdGltZSwgQWRkcik7CisgICAgICAgICAgICAgICAgLy8gUHJlY2hhcmdlIHRvIEFjdGl2YXRlIEJhbmsgMAorICAgICAgICAgICAgICAgIGlmICgkdGltZSAtIFJQX2NoazAgPCB0UlApIGJlZ2luCisKKwkJICAgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IHRSUCB2aW9sYXRpb24gZHVyaW5nIEFjdGl2YXRlIGJhbmsgMCIsICR0aW1lKTsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCYSA9PSAyJ2IwMSAmJiBQY19iMSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIHtBY3RfYjEsIFBjX2IxfSA9IDInYjEwOworICAgICAgICAgICAgICAgIEIxX3Jvd19hZGRyID0gQWRkciBbYWRkcl9iaXRzIC0gMSA6IDBdOworICAgICAgICAgICAgICAgIFJDRF9jaGsxID0gJHRpbWU7CisgICAgICAgICAgICAgICAgUkFTX2NoazEgPSAkdGltZTsKKyAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBBQ1QgIDogQmFuayA9IDEgUm93ID0gJWQiLCAkdGltZSwgQWRkcik7CisgICAgICAgICAgICAgICAgLy8gUHJlY2hhcmdlIHRvIEFjdGl2YXRlIEJhbmsgMQorICAgICAgICAgICAgICAgIGlmICgkdGltZSAtIFJQX2NoazEgPCB0UlApIGJlZ2luCisKKwkJICAgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0UlAgdmlvbGF0aW9uIGR1cmluZyBBY3RpdmF0ZSBiYW5rIDEiLCAkdGltZSk7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQgZWxzZSBpZiAoQmEgPT0gMidiMTAgJiYgUGNfYjIgPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgICAgICB7QWN0X2IyLCBQY19iMn0gPSAyJ2IxMDsKKyAgICAgICAgICAgICAgICBCMl9yb3dfYWRkciA9IEFkZHIgW2FkZHJfYml0cyAtIDEgOiAwXTsKKyAgICAgICAgICAgICAgICBSQ0RfY2hrMiA9ICR0aW1lOworICAgICAgICAgICAgICAgIFJBU19jaGsyID0gJHRpbWU7CisgICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSAoImF0IHRpbWUgJXQgQUNUICA6IEJhbmsgPSAyIFJvdyA9ICVkIiwgJHRpbWUsIEFkZHIpOworICAgICAgICAgICAgICAgIC8vIFByZWNoYXJnZSB0byBBY3RpdmF0ZSBCYW5rIDIKKyAgICAgICAgICAgICAgICBpZiAoJHRpbWUgLSBSUF9jaGsyIDwgdFJQKSBiZWdpbgorCisJCSAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogdFJQIHZpb2xhdGlvbiBkdXJpbmcgQWN0aXZhdGUgYmFuayAyIiwgJHRpbWUpOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJhID09IDInYjExICYmIFBjX2IzID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAge0FjdF9iMywgUGNfYjN9ID0gMidiMTA7CisgICAgICAgICAgICAgICAgQjNfcm93X2FkZHIgPSBBZGRyIFthZGRyX2JpdHMgLSAxIDogMF07CisgICAgICAgICAgICAgICAgUkNEX2NoazMgPSAkdGltZTsKKyAgICAgICAgICAgICAgICBSQVNfY2hrMyA9ICR0aW1lOworICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEFDVCAgOiBCYW5rID0gMyBSb3cgPSAlZCIsICR0aW1lLCBBZGRyKTsKKyAgICAgICAgICAgICAgICAvLyBQcmVjaGFyZ2UgdG8gQWN0aXZhdGUgQmFuayAzCisgICAgICAgICAgICAgICAgaWYgKCR0aW1lIC0gUlBfY2hrMyA8IHRSUCkgYmVnaW4KKworCQkgICAtPmVycm9yX2RldGVjdGVkOworICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IHRSUCB2aW9sYXRpb24gZHVyaW5nIEFjdGl2YXRlIGJhbmsgMyIsICR0aW1lKTsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCYSA9PSAyJ2IwMCAmJiBQY19iMCA9PSAxJ2IwKSBiZWdpbgorCisJICAgICAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiBCYW5rIDAgaXMgbm90IFByZWNoYXJnZWQuIiwgJHRpbWUpOworICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJhID09IDInYjAxICYmIFBjX2IxID09IDEnYjApIGJlZ2luCisKKwkgICAgICAgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IEJhbmsgMSBpcyBub3QgUHJlY2hhcmdlZC4iLCAkdGltZSk7CisgICAgICAgICAgICBlbmQgZWxzZSBpZiAoQmEgPT0gMidiMTAgJiYgUGNfYjIgPT0gMSdiMCkgYmVnaW4KKworCSAgICAgICAtPmVycm9yX2RldGVjdGVkOworICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogQmFuayAyIGlzIG5vdCBQcmVjaGFyZ2VkLiIsICR0aW1lKTsKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCYSA9PSAyJ2IxMSAmJiBQY19iMyA9PSAxJ2IwKSBiZWdpbgorCisJICAgICAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiBCYW5rIDMgaXMgbm90IFByZWNoYXJnZWQuIiwgJHRpbWUpOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAvLyBBY3RpdmUgQmFuayBBIHRvIEFjdGl2ZSBCYW5rIEIKKyAgICAgICAgICAgIGlmICgoUHJldmlvdXNfYmFuayAhPSBCYSkgJiYgKCR0aW1lIC0gUlJEX2NoayA8IHRSUkQpKSBiZWdpbgorCisJICAgICAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0UlJEIHZpb2xhdGlvbiBkdXJpbmcgQWN0aXZhdGUgYmFuayA9ICVkIiwgJHRpbWUsIEJhKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgLy8gTG9hZCBNb2RlIFJlZ2lzdGVyIHRvIEFjdGl2ZQorICAgICAgICAgICAgaWYgKE1SRF9jaGsgPCB0TVJEICkgYmVnaW4KKworCSAgICAgICAtPmVycm9yX2RldGVjdGVkOworICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogdE1SRCB2aW9sYXRpb24gZHVyaW5nIEFjdGl2YXRlIGJhbmsgPSAlZCIsICR0aW1lLCBCYSk7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIC8vIEF1dG8gUmVmcmVzaCB0byBBY3RpdmF0ZQorICAgICAgICAgICAgaWYgKCR0aW1lIC0gUkNfY2hrIDwgdFJDKSBiZWdpbgorCisJICAgICAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0UkMgdmlvbGF0aW9uIGR1cmluZyBBY3RpdmF0ZSBiYW5rID0gJWQiLCAkdGltZSwgQmEpOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAvLyBSZWNvcmQgdmFyaWFibGVzIGZvciBjaGVja2luZyB2aW9sYXRpb24KKyAgICAgICAgICAgIFJSRF9jaGsgPSAkdGltZTsKKyAgICAgICAgICAgIFByZXZpb3VzX2JhbmsgPSBCYTsKKyAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICAvLyBQcmVjaGFyZ2UgQmxvY2sKKyAgICAgICAgaWYgKFByZWNoX2VuYWJsZSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgaWYgKEFkZHJbMTBdID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAge1BjX2IwLCBQY19iMSwgUGNfYjIsIFBjX2IzfSA9IDQnYjExMTE7CisgICAgICAgICAgICAgICAge0FjdF9iMCwgQWN0X2IxLCBBY3RfYjIsIEFjdF9iM30gPSA0J2IwMDAwOworICAgICAgICAgICAgICAgIFJQX2NoazAgPSAkdGltZTsKKyAgICAgICAgICAgICAgICBSUF9jaGsxID0gJHRpbWU7CisgICAgICAgICAgICAgICAgUlBfY2hrMiA9ICR0aW1lOworICAgICAgICAgICAgICAgIFJQX2NoazMgPSAkdGltZTsKKyAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBQUkUgIDogQmFuayA9IEFMTCIsJHRpbWUpOworICAgICAgICAgICAgICAgIC8vIEFjdGl2YXRlIHRvIFByZWNoYXJnZSBhbGwgYmFua3MKKyAgICAgICAgICAgICAgICBpZiAoKCR0aW1lIC0gUkFTX2NoazAgPCB0UkFTKSB8fCAoJHRpbWUgLSBSQVNfY2hrMSA8IHRSQVMpIHx8CisgICAgICAgICAgICAgICAgICAgICgkdGltZSAtIFJBU19jaGsyIDwgdFJBUykgfHwgKCR0aW1lIC0gUkFTX2NoazMgPCB0UkFTKSkgYmVnaW4KKworCQkgICAtPmVycm9yX2RldGVjdGVkOworICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IHRSQVMgdmlvbGF0aW9uIGR1cmluZyBQcmVjaGFyZ2UgYWxsIGJhbmsiLCAkdGltZSk7CisJCSAgICBpZigkdGltZSAtIFJBU19jaGswIDwgdFJBUykKKwkJCSAgICAkZGlzcGxheSgiRVJST1I6IFJBU19DSEswIFJ4cDogJXQgIEV4ZDogJXQiLCR0aW1lIC0gUkFTX2NoazAsdFJBUyk7CisJCSAgICBpZigkdGltZSAtIFJBU19jaGsxIDwgdFJBUykKKwkJCSAgICAkZGlzcGxheSgiRVJST1I6IFJBU19DSEsxIFJ4cDogJXQgIEV4ZDogJXQiLCR0aW1lIC0gUkFTX2NoazEsdFJBUyk7CisJCSAgICBpZigkdGltZSAtIFJBU19jaGsyIDwgdFJBUykKKwkJCSAgICAkZGlzcGxheSgiRVJST1I6IFJBU19DSEsyIFJ4cDogJXQgIEV4ZDogJXQiLCR0aW1lIC0gUkFTX2NoazIsdFJBUyk7CisJCSAgICBpZigkdGltZSAtIFJBU19jaGszIDwgdFJBUykKKwkJCSAgICAkZGlzcGxheSgiRVJST1I6IFJBU19DSEszIFJ4cDogJXQgIEV4ZDogJXQiLCR0aW1lIC0gUkFTX2NoazMsdFJBUyk7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgLy8gdFdSIHZpb2xhdGlvbiBjaGVjayBmb3Igd3JpdGUKKyAgICAgICAgICAgICAgICBpZiAoKCR0aW1lIC0gV1JfY2hrWzBdIDwgdFdScCkgfHwgKCR0aW1lIC0gV1JfY2hrWzFdIDwgdFdScCkgfHwKKyAgICAgICAgICAgICAgICAgICAgKCR0aW1lIC0gV1JfY2hrWzJdIDwgdFdScCkgfHwgKCR0aW1lIC0gV1JfY2hrWzNdIDwgdFdScCkpIGJlZ2luCisKKwkJICAgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0V1IgdmlvbGF0aW9uIGR1cmluZyBQcmVjaGFyZ2UgYWxsIGJhbmsiLCAkdGltZSk7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQgZWxzZSBpZiAoQWRkclsxMF0gPT0gMSdiMCkgYmVnaW4KKyAgICAgICAgICAgICAgICBpZiAoQmEgPT0gMidiMDApIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHtQY19iMCwgQWN0X2IwfSA9IDInYjEwOworICAgICAgICAgICAgICAgICAgICBSUF9jaGswID0gJHRpbWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IFBSRSAgOiBCYW5rID0gMCIsJHRpbWUpOworICAgICAgICAgICAgICAgICAgICAvLyBBY3RpdmF0ZSB0byBQcmVjaGFyZ2UgQmFuayAwCisgICAgICAgICAgICAgICAgICAgIGlmICgkdGltZSAtIFJBU19jaGswIDwgdFJBUykgYmVnaW4KKworCQkgICAgICAgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogdFJBUyB2aW9sYXRpb24gZHVyaW5nIFByZWNoYXJnZSBiYW5rIDAiLCAkdGltZSk7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCYSA9PSAyJ2IwMSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAge1BjX2IxLCBBY3RfYjF9ID0gMidiMTA7CisgICAgICAgICAgICAgICAgICAgIFJQX2NoazEgPSAkdGltZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSAoImF0IHRpbWUgJXQgUFJFICA6IEJhbmsgPSAxIiwkdGltZSk7CisgICAgICAgICAgICAgICAgICAgIC8vIEFjdGl2YXRlIHRvIFByZWNoYXJnZSBCYW5rIDEKKyAgICAgICAgICAgICAgICAgICAgaWYgKCR0aW1lIC0gUkFTX2NoazEgPCB0UkFTKSBiZWdpbgorCisJCSAgICAgICAtPmVycm9yX2RldGVjdGVkOworICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0UkFTIHZpb2xhdGlvbiBkdXJpbmcgUHJlY2hhcmdlIGJhbmsgMSIsICR0aW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJhID09IDInYjEwKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICB7UGNfYjIsIEFjdF9iMn0gPSAyJ2IxMDsKKyAgICAgICAgICAgICAgICAgICAgUlBfY2hrMiA9ICR0aW1lOworICAgICAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBQUkUgIDogQmFuayA9IDIiLCR0aW1lKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gQWN0aXZhdGUgdG8gUHJlY2hhcmdlIEJhbmsgMgorICAgICAgICAgICAgICAgICAgICBpZiAoJHRpbWUgLSBSQVNfY2hrMiA8IHRSQVMpIGJlZ2luCisKKwkJICAgICAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IHRSQVMgdmlvbGF0aW9uIGR1cmluZyBQcmVjaGFyZ2UgYmFuayAyIiwgJHRpbWUpOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQgZWxzZSBpZiAoQmEgPT0gMidiMTEpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHtQY19iMywgQWN0X2IzfSA9IDInYjEwOworICAgICAgICAgICAgICAgICAgICBSUF9jaGszID0gJHRpbWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IFBSRSAgOiBCYW5rID0gMyIsJHRpbWUpOworICAgICAgICAgICAgICAgICAgICAvLyBBY3RpdmF0ZSB0byBQcmVjaGFyZ2UgQmFuayAzCisgICAgICAgICAgICAgICAgICAgIGlmICgkdGltZSAtIFJBU19jaGszIDwgdFJBUykgYmVnaW4KKworCQkgICAgICAgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogdFJBUyB2aW9sYXRpb24gZHVyaW5nIFByZWNoYXJnZSBiYW5rIDMiLCAkdGltZSk7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIC8vIHRXUiB2aW9sYXRpb24gY2hlY2sgZm9yIHdyaXRlCisgICAgICAgICAgICAgICAgaWYgKCR0aW1lIC0gV1JfY2hrW0JhXSA8IHRXUnApIGJlZ2luCisKKwkJICAgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0V1IgdmlvbGF0aW9uIGR1cmluZyBQcmVjaGFyZ2UgYmFuayAlZCIsICR0aW1lLCBCYSk7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIC8vIFRlcm1pbmF0ZSBhIFdyaXRlIEltbWVkaWF0ZWx5IChpZiBzYW1lIGJhbmsgb3IgYWxsIGJhbmtzKQorICAgICAgICAgICAgaWYgKERhdGFfaW5fZW5hYmxlID09IDEnYjEgJiYgKEJhbmsgPT0gQmEgfHwgQWRkclsxMF0gPT0gMSdiMSkpIGJlZ2luCisgICAgICAgICAgICAgICAgRGF0YV9pbl9lbmFibGUgPSAxJ2IwOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAvLyBQcmVjaGFyZ2UgQ29tbWFuZCBQaXBlbGluZSBmb3IgUmVhZAorICAgICAgICAgICAgaWYgKENhc19sYXRlbmN5XzMgPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgICAgICBDb21tYW5kWzJdID0gYFNEUkFNX1BSRUNIOworICAgICAgICAgICAgICAgIEJhbmtfcHJlY2hhcmdlWzJdID0gQmE7CisgICAgICAgICAgICAgICAgQTEwX3ByZWNoYXJnZVsyXSA9IEFkZHJbMTBdOworICAgICAgICAgICAgZW5kIGVsc2UgaWYgKENhc19sYXRlbmN5XzIgPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgICAgICBDb21tYW5kWzFdID0gYFNEUkFNX1BSRUNIOworICAgICAgICAgICAgICAgIEJhbmtfcHJlY2hhcmdlWzFdID0gQmE7CisgICAgICAgICAgICAgICAgQTEwX3ByZWNoYXJnZVsxXSA9IEFkZHJbMTBdOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICAKKyAgICAgICAgLy8gQnVyc3QgdGVybWluYXRlCisgICAgICAgIGlmIChCdXJzdF90ZXJtID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAvLyBUZXJtaW5hdGUgYSBXcml0ZSBJbW1lZGlhdGVseQorICAgICAgICAgICAgaWYgKERhdGFfaW5fZW5hYmxlID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgRGF0YV9pbl9lbmFibGUgPSAxJ2IwOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAvLyBUZXJtaW5hdGUgYSBSZWFkIERlcGVuZCBvbiBDQVMgTGF0ZW5jeQorICAgICAgICAgICAgaWYgKENhc19sYXRlbmN5XzMgPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgICAgICBDb21tYW5kWzJdID0gYFNEUkFNX0JTVDsKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChDYXNfbGF0ZW5jeV8yID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgQ29tbWFuZFsxXSA9IGBTRFJBTV9CU1Q7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEJTVCAgOiBCdXJzdCBUZXJtaW5hdGUiLCR0aW1lKTsKKyAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICAvLyBSZWFkLCBXcml0ZSwgQ29sdW1uIExhdGNoCisgICAgICAgIGlmIChSZWFkX2VuYWJsZSA9PSAxJ2IxIHx8IFdyaXRlX2VuYWJsZSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGJhbmsgaXMgb3BlbiAoQUNUKQorICAgICAgICAgICAgaWYgKChCYSA9PSAyJ2IwMCAmJiBQY19iMCA9PSAxJ2IxKSB8fCAoQmEgPT0gMidiMDEgJiYgUGNfYjEgPT0gMSdiMSkgfHwKKyAgICAgICAgICAgICAgICAoQmEgPT0gMidiMTAgJiYgUGNfYjIgPT0gMSdiMSkgfHwgKEJhID09IDInYjExICYmIFBjX2IzID09IDEnYjEpKSBiZWdpbgorCisJICAgICAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgJGRpc3BsYXkoImF0IHRpbWUgJXQgRVJST1I6IENhbm5vdCBSZWFkIG9yIFdyaXRlIC0gQmFuayAlZCBpcyBub3QgQWN0aXZhdGVkIiwgJHRpbWUsIEJhKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgLy8gQWN0aXZhdGUgdG8gUmVhZCBvciBXcml0ZQorICAgICAgICAgICAgaWYgKChCYSA9PSAyJ2IwMCkgJiYgKCR0aW1lIC0gUkNEX2NoazAgPCB0UkNEKSkKKwkgICAgICBiZWdpbgorCQkgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAgJGRpc3BsYXkoImF0IHRpbWUgJXQgRVJST1I6IHRSQ0QgdmlvbGF0aW9uIGR1cmluZyBSZWFkIG9yIFdyaXRlIHRvIEJhbmsgMCIsICR0aW1lKTsKKwkgICAgICBlbmQKKwkgICAKKyAgICAgICAgICAgIGlmICgoQmEgPT0gMidiMDEpICYmICgkdGltZSAtIFJDRF9jaGsxIDwgdFJDRCkpCisJICAgICAgYmVnaW4KKwkJIC8vLT50Yi50ZXN0X2NvbnRyb2wuZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJhdCB0aW1lICV0IEVSUk9SOiB0UkNEIHZpb2xhdGlvbiBkdXJpbmcgUmVhZCBvciBXcml0ZSB0byBCYW5rIDEiLCAkdGltZSk7CisJICAgICAgZW5kCisgICAgICAgICAgICBpZiAoKEJhID09IDInYjEwKSAmJiAoJHRpbWUgLSBSQ0RfY2hrMiA8IHRSQ0QpKQorCSAgICAgIGJlZ2luCisJCSAvLy0+dGIudGVzdF9jb250cm9sLmVycm9yX2RldGVjdGVkOworICAgICAgICAgICAgICAgICAkZGlzcGxheSgiYXQgdGltZSAldCBFUlJPUjogdFJDRCB2aW9sYXRpb24gZHVyaW5nIFJlYWQgb3IgV3JpdGUgdG8gQmFuayAyIiwgJHRpbWUpOworCSAgICAgIGVuZAorICAgICAgICAgICAgaWYgKChCYSA9PSAyJ2IxMSkgJiYgKCR0aW1lIC0gUkNEX2NoazMgPCB0UkNEKSkKKwkgICAgICBiZWdpbgorCQkgLy8tPnRiLnRlc3RfY29udHJvbC5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAgJGRpc3BsYXkoImF0IHRpbWUgJXQgRVJST1I6IHRSQ0QgdmlvbGF0aW9uIGR1cmluZyBSZWFkIG9yIFdyaXRlIHRvIEJhbmsgMyIsICR0aW1lKTsKKwkgICAgICBlbmQKKyAgICAgICAgICAgIC8vIFJlYWQgQ29tbWFuZAorICAgICAgICAgICAgaWYgKFJlYWRfZW5hYmxlID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgLy8gQ0FTIExhdGVuY3kgcGlwZWxpbmUKKyAgICAgICAgICAgICAgICBpZiAoQ2FzX2xhdGVuY3lfMyA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoQWRkclsxMF0gPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRbMl0gPSBgUkVBRF9BOworICAgICAgICAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFsyXSA9IGBSRUFEOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgQ29sX2FkZHJbMl0gPSBBZGRyOworICAgICAgICAgICAgICAgICAgICBCYW5rX2FkZHJbMl0gPSBCYTsKKyAgICAgICAgICAgICAgICBlbmQgZWxzZSBpZiAoQ2FzX2xhdGVuY3lfMiA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoQWRkclsxMF0gPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRbMV0gPSBgUkVBRF9BOworICAgICAgICAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFsxXSA9IGBSRUFEOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgQ29sX2FkZHJbMV0gPSBBZGRyOworICAgICAgICAgICAgICAgICAgICBCYW5rX2FkZHJbMV0gPSBCYTsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIC8vIFJlYWQgaW50ZXJydXB0IFdyaXRlICh0ZXJtaW5hdGUgV3JpdGUgaW1tZWRpYXRlbHkpCisgICAgICAgICAgICAgICAgaWYgKERhdGFfaW5fZW5hYmxlID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgLy8gV3JpdGUgQ29tbWFuZAorICAgICAgICAgICAgZW5kIGVsc2UgaWYgKFdyaXRlX2VuYWJsZSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChBZGRyWzEwXSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICBDb21tYW5kWzBdID0gYFdSSVRFX0E7CisgICAgICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFswXSA9IGBTRFJBTV9XUklURTsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBDb2xfYWRkclswXSA9IEFkZHI7CisgICAgICAgICAgICAgICAgQmFua19hZGRyWzBdID0gQmE7CisKKyAgICAgICAgICAgICAgICAvLyBXcml0ZSBpbnRlcnJ1cHQgV3JpdGUgKHRlcm1pbmF0ZSBXcml0ZSBpbW1lZGlhdGVseSkKKyAgICAgICAgICAgICAgICBpZiAoRGF0YV9pbl9lbmFibGUgPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgRGF0YV9pbl9lbmFibGUgPSAxJ2IwOworICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgLy8gV3JpdGUgaW50ZXJydXB0IFJlYWQgKHRlcm1pbmF0ZSBSZWFkIGltbWVkaWF0ZWx5KQorICAgICAgICAgICAgICAgIGlmIChEYXRhX291dF9lbmFibGUgPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgRGF0YV9vdXRfZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAvLyBJbnRlcnJ1cHRpbmcgYSBXcml0ZSB3aXRoIEF1dG9wcmVjaGFyZ2UKKyAgICAgICAgICAgIGlmIChBdXRvX3ByZWNoYXJnZVtCYW5rXSA9PSAxJ2IxICYmIFdyaXRlX3ByZWNoYXJnZVtCYW5rXSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIFJXX2ludGVycnVwdF93cml0ZVtCYW5rXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSAoImF0IHRpbWUgJXQgTk9URSA6IFJlYWQvV3JpdGUgQmFuayAlZCBpbnRlcnJ1cHQgV3JpdGUgQmFuayAlZCB3aXRoIEF1dG9wcmVjaGFyZ2UiLCAkdGltZSwgQmEsIEJhbmspOworICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIC8vIEludGVycnVwdGluZyBhIFJlYWQgd2l0aCBBdXRvcHJlY2hhcmdlCisgICAgICAgICAgICBpZiAoQXV0b19wcmVjaGFyZ2VbQmFua10gPT0gMSdiMSAmJiBSZWFkX3ByZWNoYXJnZVtCYW5rXSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIFJXX2ludGVycnVwdF9yZWFkW0JhbmtdID0gMSdiMTsKKyAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBOT1RFIDogUmVhZC9Xcml0ZSBCYW5rICVkIGludGVycnVwdCBSZWFkIEJhbmsgJWQgd2l0aCBBdXRvcHJlY2hhcmdlIiwgJHRpbWUsIEJhLCBCYW5rKTsKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAvLyBSZWFkIG9yIFdyaXRlIHdpdGggQXV0byBQcmVjaGFyZ2UKKyAgICAgICAgICAgIGlmIChBZGRyWzEwXSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIEF1dG9fcHJlY2hhcmdlW0JhXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgQ291bnRfcHJlY2hhcmdlW0JhXSA9IDA7CisgICAgICAgICAgICAgICAgaWYgKFJlYWRfZW5hYmxlID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIFJlYWRfcHJlY2hhcmdlW0JhXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgZW5kIGVsc2UgaWYgKFdyaXRlX2VuYWJsZSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICBXcml0ZV9wcmVjaGFyZ2VbQmFdID0gMSdiMTsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKworICAgICAgICAvLyAgUmVhZCB3aXRoIEF1dG8gUHJlY2hhcmdlIENhbGN1bGF0aW9uCisgICAgICAgIC8vICAgICAgVGhlIGRldmljZSBzdGFydCBpbnRlcm5hbCBwcmVjaGFyZ2U6CisgICAgICAgIC8vICAgICAgICAgIDEuICBDQVMgTGF0ZW5jeSAtIDEgY3ljbGVzIGJlZm9yZSBsYXN0IGJ1cnN0CisgICAgICAgIC8vICAgICAgYW5kIDIuICBNZWV0IG1pbmltdW0gdFJBUyByZXF1aXJlbWVudAorICAgICAgICAvLyAgICAgICBvciAzLiAgSW50ZXJydXB0IGJ5IGEgUmVhZCBvciBXcml0ZSAod2l0aCBvciB3aXRob3V0IEF1dG9QcmVjaGFyZ2UpCisgICAgICAgIGlmICgoQXV0b19wcmVjaGFyZ2VbMF0gPT0gMSdiMSkgJiYgKFJlYWRfcHJlY2hhcmdlWzBdID09IDEnYjEpKSBiZWdpbgorICAgICAgICAgICAgaWYgKCgoJHRpbWUgLSBSQVNfY2hrMCA+PSB0UkFTKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhc2UgMgorICAgICAgICAgICAgICAgICgoQnVyc3RfbGVuZ3RoXzEgPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2VbMF0gPj0gMSkgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhc2UgMQorICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzIgPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2VbMF0gPj0gMikgfHwKKyAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF80ID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlWzBdID49IDQpIHx8CisgICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfOCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVswXSA+PSA4KSkpIHx8CisgICAgICAgICAgICAgICAgIChSV19pbnRlcnJ1cHRfcmVhZFswXSA9PSAxJ2IxKSkgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzZSAzCisgICAgICAgICAgICAgICAgICAgIFBjX2IwID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgQWN0X2IwID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUlBfY2hrMCA9ICR0aW1lOworICAgICAgICAgICAgICAgICAgICBBdXRvX3ByZWNoYXJnZVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFJlYWRfcHJlY2hhcmdlWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUldfaW50ZXJydXB0X3JlYWRbMF0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBOT1RFIDogU3RhcnQgSW50ZXJuYWwgQXV0byBQcmVjaGFyZ2UgZm9yIEJhbmsgMCIsICR0aW1lKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgaWYgKChBdXRvX3ByZWNoYXJnZVsxXSA9PSAxJ2IxKSAmJiAoUmVhZF9wcmVjaGFyZ2VbMV0gPT0gMSdiMSkpIGJlZ2luCisgICAgICAgICAgICBpZiAoKCgkdGltZSAtIFJBU19jaGsxID49IHRSQVMpICYmCisgICAgICAgICAgICAgICAgKChCdXJzdF9sZW5ndGhfMSA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVsxXSA+PSAxKSB8fCAKKyAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF8yID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlWzFdID49IDIpIHx8CisgICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfNCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVsxXSA+PSA0KSB8fAorICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzggPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2VbMV0gPj0gOCkpKSB8fAorICAgICAgICAgICAgICAgICAoUldfaW50ZXJydXB0X3JlYWRbMV0gPT0gMSdiMSkpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIFBjX2IxID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgQWN0X2IxID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUlBfY2hrMSA9ICR0aW1lOworICAgICAgICAgICAgICAgICAgICBBdXRvX3ByZWNoYXJnZVsxXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFJlYWRfcHJlY2hhcmdlWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUldfaW50ZXJydXB0X3JlYWRbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBOT1RFIDogU3RhcnQgSW50ZXJuYWwgQXV0byBQcmVjaGFyZ2UgZm9yIEJhbmsgMSIsICR0aW1lKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgaWYgKChBdXRvX3ByZWNoYXJnZVsyXSA9PSAxJ2IxKSAmJiAoUmVhZF9wcmVjaGFyZ2VbMl0gPT0gMSdiMSkpIGJlZ2luCisgICAgICAgICAgICBpZiAoKCgkdGltZSAtIFJBU19jaGsyID49IHRSQVMpICYmCisgICAgICAgICAgICAgICAgKChCdXJzdF9sZW5ndGhfMSA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVsyXSA+PSAxKSB8fCAKKyAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF8yID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlWzJdID49IDIpIHx8CisgICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfNCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVsyXSA+PSA0KSB8fAorICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzggPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2VbMl0gPj0gOCkpKSB8fAorICAgICAgICAgICAgICAgICAoUldfaW50ZXJydXB0X3JlYWRbMl0gPT0gMSdiMSkpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIFBjX2IyID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgQWN0X2IyID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUlBfY2hrMiA9ICR0aW1lOworICAgICAgICAgICAgICAgICAgICBBdXRvX3ByZWNoYXJnZVsyXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFJlYWRfcHJlY2hhcmdlWzJdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUldfaW50ZXJydXB0X3JlYWRbMl0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBOT1RFIDogU3RhcnQgSW50ZXJuYWwgQXV0byBQcmVjaGFyZ2UgZm9yIEJhbmsgMiIsICR0aW1lKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgaWYgKChBdXRvX3ByZWNoYXJnZVszXSA9PSAxJ2IxKSAmJiAoUmVhZF9wcmVjaGFyZ2VbM10gPT0gMSdiMSkpIGJlZ2luCisgICAgICAgICAgICBpZiAoKCgkdGltZSAtIFJBU19jaGszID49IHRSQVMpICYmCisgICAgICAgICAgICAgICAgKChCdXJzdF9sZW5ndGhfMSA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVszXSA+PSAxKSB8fCAKKyAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF8yID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlWzNdID49IDIpIHx8CisgICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfNCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVszXSA+PSA0KSB8fAorICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzggPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2VbM10gPj0gOCkpKSB8fAorICAgICAgICAgICAgICAgICAoUldfaW50ZXJydXB0X3JlYWRbM10gPT0gMSdiMSkpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIFBjX2IzID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgQWN0X2IzID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUlBfY2hrMyA9ICR0aW1lOworICAgICAgICAgICAgICAgICAgICBBdXRvX3ByZWNoYXJnZVszXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFJlYWRfcHJlY2hhcmdlWzNdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUldfaW50ZXJydXB0X3JlYWRbM10gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBOT1RFIDogU3RhcnQgSW50ZXJuYWwgQXV0byBQcmVjaGFyZ2UgZm9yIEJhbmsgMyIsICR0aW1lKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKworICAgICAgICAvLyBJbnRlcm5hbCBQcmVjaGFyZ2Ugb3IgQnN0CisgICAgICAgIGlmIChDb21tYW5kWzBdID09IGBTRFJBTV9QUkVDSCkgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlY2hhcmdlIHRlcm1pbmF0ZSBhIHJlYWQgd2l0aCBzYW1lIGJhbmsgb3IgYWxsIGJhbmtzCisgICAgICAgICAgICBpZiAoQmFua19wcmVjaGFyZ2VbMF0gPT0gQmFuayB8fCBBMTBfcHJlY2hhcmdlWzBdID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKERhdGFfb3V0X2VuYWJsZSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICBEYXRhX291dF9lbmFibGUgPSAxJ2IwOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZCBlbHNlIGlmIChDb21tYW5kWzBdID09IGBTRFJBTV9CU1QpIGJlZ2luICAgICAgICAgICAgICAgICAgLy8gQlNUIHRlcm1pbmF0ZSBhIHJlYWQgdG8gY3VycmVudCBiYW5rCisgICAgICAgICAgICBpZiAoRGF0YV9vdXRfZW5hYmxlID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgRGF0YV9vdXRfZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKworICAgICAgICBpZiAoRGF0YV9vdXRfZW5hYmxlID09IDEnYjApIGJlZ2luCisgICAgICAgICAgICBEcV9yZWcgPD0gI3RPSCB7ZGF0YV9iaXRzezEnYnp9fTsKKyAgICAgICAgZW5kCisKKyAgICAgICAgLy8gRGV0ZWN0IFJlYWQgb3IgV3JpdGUgY29tbWFuZAorICAgICAgICBpZiAoQ29tbWFuZFswXSA9PSBgUkVBRCB8fCBDb21tYW5kWzBdID09IGBSRUFEX0EpIGJlZ2luCisgICAgICAgICAgICBCYW5rID0gQmFua19hZGRyWzBdOworICAgICAgICAgICAgQ29sID0gQ29sX2FkZHJbMF07CisgICAgICAgICAgICBDb2xfYnJzdCA9IENvbF9hZGRyWzBdOworICAgICAgICAgICAgaWYgKEJhbmtfYWRkclswXSA9PSAyJ2IwMCkgYmVnaW4KKyAgICAgICAgICAgICAgICBSb3cgPSBCMF9yb3dfYWRkcjsKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCYW5rX2FkZHJbMF0gPT0gMidiMDEpIGJlZ2luCisgICAgICAgICAgICAgICAgUm93ID0gQjFfcm93X2FkZHI7CisgICAgICAgICAgICBlbmQgZWxzZSBpZiAoQmFua19hZGRyWzBdID09IDInYjEwKSBiZWdpbgorICAgICAgICAgICAgICAgIFJvdyA9IEIyX3Jvd19hZGRyOworICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJhbmtfYWRkclswXSA9PSAyJ2IxMSkgYmVnaW4KKyAgICAgICAgICAgICAgICBSb3cgPSBCM19yb3dfYWRkcjsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgQnVyc3RfY291bnRlciA9IDA7CisgICAgICAgICAgICBEYXRhX2luX2VuYWJsZSA9IDEnYjA7CisgICAgICAgICAgICBEYXRhX291dF9lbmFibGUgPSAxJ2IxOworICAgICAgICBlbmQgZWxzZSBpZiAoQ29tbWFuZFswXSA9PSBgU0RSQU1fV1JJVEUgfHwgQ29tbWFuZFswXSA9PSBgV1JJVEVfQSkgYmVnaW4KKyAgICAgICAgICAgIEJhbmsgPSBCYW5rX2FkZHJbMF07CisgICAgICAgICAgICBDb2wgPSBDb2xfYWRkclswXTsKKyAgICAgICAgICAgIENvbF9icnN0ID0gQ29sX2FkZHJbMF07CisgICAgICAgICAgICBpZiAoQmFua19hZGRyWzBdID09IDInYjAwKSBiZWdpbgorICAgICAgICAgICAgICAgIFJvdyA9IEIwX3Jvd19hZGRyOworICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJhbmtfYWRkclswXSA9PSAyJ2IwMSkgYmVnaW4KKyAgICAgICAgICAgICAgICBSb3cgPSBCMV9yb3dfYWRkcjsKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCYW5rX2FkZHJbMF0gPT0gMidiMTApIGJlZ2luCisgICAgICAgICAgICAgICAgUm93ID0gQjJfcm93X2FkZHI7CisgICAgICAgICAgICBlbmQgZWxzZSBpZiAoQmFua19hZGRyWzBdID09IDInYjExKSBiZWdpbgorICAgICAgICAgICAgICAgIFJvdyA9IEIzX3Jvd19hZGRyOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBCdXJzdF9jb3VudGVyID0gMDsKKyAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlID0gMSdiMTsKKyAgICAgICAgICAgIERhdGFfb3V0X2VuYWJsZSA9IDEnYjA7CisgICAgICAgIGVuZAorCisgICAgICAgIC8vIERRIGJ1ZmZlciAoRHJpdmVyL1JlY2VpdmVyKQorICAgICAgICBpZiAoRGF0YV9pbl9lbmFibGUgPT0gMSdiMSkgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdyaXRpbmcgRGF0YSB0byBNZW1vcnkKKyAgICAgICAgICAgIC8vIEFycmF5IGJ1ZmZlcgorICAgICAgICAgICAgaWYgKEJhbmsgPT0gMidiMDApIERxX2RxbSBbMTUgOiAwXSA9IEJhbmswIFt7Um93LCBDb2x9XTsKKyAgICAgICAgICAgIGlmIChCYW5rID09IDInYjAxKSBEcV9kcW0gWzE1IDogMF0gPSBCYW5rMSBbe1JvdywgQ29sfV07CisgICAgICAgICAgICBpZiAoQmFuayA9PSAyJ2IxMCkgRHFfZHFtIFsxNSA6IDBdID0gQmFuazIgW3tSb3csIENvbH1dOworICAgICAgICAgICAgaWYgKEJhbmsgPT0gMidiMTEpIERxX2RxbSBbMTUgOiAwXSA9IEJhbmszIFt7Um93LCBDb2x9XTsKKyAgICAgICAgICAgIC8vIERxbSBvcGVyYXRpb24KKyAgICAgICAgICAgIGlmIChEcW1bMF0gPT0gMSdiMCkgRHFfZHFtIFsgNyA6IDBdID0gRHEgWyA3IDogMF07CisgICAgICAgICAgICAvLyBXcml0ZSB0byBtZW1vcnkKKyAgICAgICAgICAgIGlmIChCYW5rID09IDInYjAwKSBCYW5rMCBbe1JvdywgQ29sfV0gPSBEcV9kcW0gWzE1IDogMF07CisgICAgICAgICAgICBpZiAoQmFuayA9PSAyJ2IwMSkgQmFuazEgW3tSb3csIENvbH1dID0gRHFfZHFtIFsxNSA6IDBdOworICAgICAgICAgICAgaWYgKEJhbmsgPT0gMidiMTApIEJhbmsyIFt7Um93LCBDb2x9XSA9IERxX2RxbSBbMTUgOiAwXTsKKyAgICAgICAgICAgIGlmIChCYW5rID09IDInYjExKSBCYW5rMyBbe1JvdywgQ29sfV0gPSBEcV9kcW0gWzE1IDogMF07CisgICAgICAgICAgICAvLyBPdXRwdXQgcmVzdWx0CisgICAgICAgICAgICBpZiAoRHFtID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSgiYXQgdGltZSAldCBXUklURTogQmFuayA9ICVkIFJvdyA9ICVkLCBDb2wgPSAlZCwgRGF0YSA9IEhpLVogZHVlIHRvIERRTSIsICR0aW1lLCBCYW5rLCBSb3csIENvbCk7CisgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkoImF0IHRpbWUgJXQgV1JJVEU6IEJhbmsgPSAlZCBSb3cgPSAlZCwgQ29sID0gJWQsIERhdGEgPSAlaCwgRHFtID0gJWIiLCAkdGltZSwgQmFuaywgUm93LCBDb2wsIERxX2RxbSwgRHFtKTsKKyAgICAgICAgICAgICAgICAvLyBSZWNvcmQgdFdSIHRpbWUgYW5kIHJlc2V0IGNvdW50ZXIKKyAgICAgICAgICAgICAgICBXUl9jaGsgW0JhbmtdID0gJHRpbWU7CisgICAgICAgICAgICAgICAgV1JfY291bnRlciBbQmFua10gPSAwOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAvLyBBZHZhbmNlIGJ1cnN0IGNvdW50ZXIgc3Vicm91dGluZQorICAgICAgICAgICAgI3RIWiBCdXJzdDsKKyAgICAgICAgZW5kIGVsc2UgaWYgKERhdGFfb3V0X2VuYWJsZSA9PSAxJ2IxKSBiZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWFkaW5nIERhdGEgZnJvbSBNZW1vcnkKKyAgICAgICAgICAgIC8vIEFycmF5IGJ1ZmZlcgorICAgICAgICAgICAgaWYgKEJhbmsgPT0gMidiMDApIERxX2RxbSBbMTUgOiAwXSA9IEJhbmswIFt7Um93LCBDb2x9XTsKKyAgICAgICAgICAgIGlmIChCYW5rID09IDInYjAxKSBEcV9kcW0gWzE1IDogMF0gPSBCYW5rMSBbe1JvdywgQ29sfV07CisgICAgICAgICAgICBpZiAoQmFuayA9PSAyJ2IxMCkgRHFfZHFtIFsxNSA6IDBdID0gQmFuazIgW3tSb3csIENvbH1dOworICAgICAgICAgICAgaWYgKEJhbmsgPT0gMidiMTEpIERxX2RxbSBbMTUgOiAwXSA9IEJhbmszIFt7Um93LCBDb2x9XTsKKyAgICAgICAgICAgIC8vIERxbSBvcGVyYXRpb24KKyAgICAgICAgICAgIGlmIChEcW1fcmVnMFswXSA9PSAxJ2IxKSBEcV9kcW0gWyA3IDogMF0gPSA4J2J6OworICAgICAgICAgICAgLy8gRGlzcGxheSByZXN1bHQKKyAgICAgICAgICAgIERxX3JlZyBbMTUgOiAwXSA9ICN0QUMgRHFfZHFtIFsxNSA6IDBdOworICAgICAgICAgICAgaWYgKERxbV9yZWcwID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSgiYXQgdGltZSAldCBSRUFEIDogQmFuayA9ICVkIFJvdyA9ICVkLCBDb2wgPSAlZCwgRGF0YSA9IEhpLVogZHVlIHRvIERRTSIsICR0aW1lLCBCYW5rLCBSb3csIENvbCk7CisgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkoImF0IHRpbWUgJXQgUkVBRCA6IEJhbmsgPSAlZCBSb3cgPSAlZCwgQ29sID0gJWQsIERhdGEgPSAlaCwgRHFtID0gJWIiLCAkdGltZSwgQmFuaywgUm93LCBDb2wsIERxX3JlZywgRHFtX3JlZzApOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAvLyBBZHZhbmNlIGJ1cnN0IGNvdW50ZXIgc3Vicm91dGluZQorICAgICAgICAgICAgQnVyc3Q7CisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgLy8gIFdyaXRlIHdpdGggQXV0byBQcmVjaGFyZ2UgQ2FsY3VsYXRpb24KKyAgICAvLyAgICAgIFRoZSBkZXZpY2Ugc3RhcnQgaW50ZXJuYWwgcHJlY2hhcmdlOgorICAgIC8vICAgICAgICAgIDEuICB0V1IgQ2xvY2sgYWZ0ZXIgbGFzdCBidXJzdAorICAgIC8vICAgICAgYW5kIDIuICBNZWV0IG1pbmltdW0gdFJBUyByZXF1aXJlbWVudAorICAgIC8vICAgICAgIG9yIDMuICBJbnRlcnJ1cHQgYnkgYSBSZWFkIG9yIFdyaXRlICh3aXRoIG9yIHdpdGhvdXQgQXV0b1ByZWNoYXJnZSkKKyAgICBhbHdheXMgQCAoV1JfY291bnRlclswXSkgYmVnaW4KKyAgICAgICAgaWYgKChBdXRvX3ByZWNoYXJnZVswXSA9PSAxJ2IxKSAmJiAoV3JpdGVfcHJlY2hhcmdlWzBdID09IDEnYjEpKSBiZWdpbgorICAgICAgICAgICAgaWYgKCgoJHRpbWUgLSBSQVNfY2hrMCA+PSB0UkFTKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXNlIDIKKyAgICAgICAgICAgICAgICgoKEJ1cnN0X2xlbmd0aF8xID09IDEnYjEgfHwgV3JpdGVfYnVyc3RfbW9kZSA9PSAxJ2IxKSAmJiBDb3VudF9wcmVjaGFyZ2UgWzBdID49IDEpIHx8ICAgLy8gQ2FzZSAxCisgICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfMiA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZSBbMF0gPj0gMikgfHwKKyAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF80ID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlIFswXSA+PSA0KSB8fAorICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzggPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2UgWzBdID49IDgpKSkgfHwKKyAgICAgICAgICAgICAgICAgKFJXX2ludGVycnVwdF93cml0ZVswXSA9PSAxJ2IxICYmIFdSX2NvdW50ZXJbMF0gPj0gMikpIGJlZ2luICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzZSAzIChzdG9wIGNvdW50IHdoZW4gaW50ZXJydXB0KQorICAgICAgICAgICAgICAgICAgICBBdXRvX3ByZWNoYXJnZVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFdyaXRlX3ByZWNoYXJnZVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFJXX2ludGVycnVwdF93cml0ZVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICN0V1JhOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgdFdSCisgICAgICAgICAgICAgICAgICAgIFBjX2IwID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgQWN0X2IwID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUlBfY2hrMCA9ICR0aW1lOworICAgICAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBOT1RFIDogU3RhcnQgSW50ZXJuYWwgQXV0byBQcmVjaGFyZ2UgZm9yIEJhbmsgMCIsICR0aW1lKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKyAgICBhbHdheXMgQCAoV1JfY291bnRlclsxXSkgYmVnaW4KKyAgICAgICAgaWYgKChBdXRvX3ByZWNoYXJnZVsxXSA9PSAxJ2IxKSAmJiAoV3JpdGVfcHJlY2hhcmdlWzFdID09IDEnYjEpKSBiZWdpbgorICAgICAgICAgICAgaWYgKCgoJHRpbWUgLSBSQVNfY2hrMSA+PSB0UkFTKSAmJgorICAgICAgICAgICAgICAgKCgoQnVyc3RfbGVuZ3RoXzEgPT0gMSdiMSB8fCBXcml0ZV9idXJzdF9tb2RlID09IDEnYjEpICYmIENvdW50X3ByZWNoYXJnZSBbMV0gPj0gMSkgfHwgCisgICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfMiA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZSBbMV0gPj0gMikgfHwKKyAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF80ID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlIFsxXSA+PSA0KSB8fAorICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzggPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2UgWzFdID49IDgpKSkgfHwKKyAgICAgICAgICAgICAgICAgKFJXX2ludGVycnVwdF93cml0ZVsxXSA9PSAxJ2IxICYmIFdSX2NvdW50ZXJbMV0gPj0gMikpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIEF1dG9fcHJlY2hhcmdlWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgV3JpdGVfcHJlY2hhcmdlWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUldfaW50ZXJydXB0X3dyaXRlWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgI3RXUmE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0V1IKKyAgICAgICAgICAgICAgICAgICAgUGNfYjEgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBBY3RfYjEgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBSUF9jaGsxID0gJHRpbWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IE5PVEUgOiBTdGFydCBJbnRlcm5hbCBBdXRvIFByZWNoYXJnZSBmb3IgQmFuayAxIiwgJHRpbWUpOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorICAgIGFsd2F5cyBAIChXUl9jb3VudGVyWzJdKSBiZWdpbgorICAgICAgICBpZiAoKEF1dG9fcHJlY2hhcmdlWzJdID09IDEnYjEpICYmIChXcml0ZV9wcmVjaGFyZ2VbMl0gPT0gMSdiMSkpIGJlZ2luCisgICAgICAgICAgICBpZiAoKCgkdGltZSAtIFJBU19jaGsyID49IHRSQVMpICYmCisgICAgICAgICAgICAgICAoKChCdXJzdF9sZW5ndGhfMSA9PSAxJ2IxIHx8IFdyaXRlX2J1cnN0X21vZGUgPT0gMSdiMSkgJiYgQ291bnRfcHJlY2hhcmdlIFsyXSA+PSAxKSB8fCAKKyAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF8yID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlIFsyXSA+PSAyKSB8fAorICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzQgPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2UgWzJdID49IDQpIHx8CisgICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfOCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZSBbMl0gPj0gOCkpKSB8fAorICAgICAgICAgICAgICAgICAoUldfaW50ZXJydXB0X3dyaXRlWzJdID09IDEnYjEgJiYgV1JfY291bnRlclsyXSA+PSAyKSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgQXV0b19wcmVjaGFyZ2VbMl0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBXcml0ZV9wcmVjaGFyZ2VbMl0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBSV19pbnRlcnJ1cHRfd3JpdGVbMl0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAjdFdSYTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRXUgorICAgICAgICAgICAgICAgICAgICBQY19iMiA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIEFjdF9iMiA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFJQX2NoazIgPSAkdGltZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSAoImF0IHRpbWUgJXQgTk9URSA6IFN0YXJ0IEludGVybmFsIEF1dG8gUHJlY2hhcmdlIGZvciBCYW5rIDIiLCAkdGltZSk7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgZW5kCisgICAgYWx3YXlzIEAgKFdSX2NvdW50ZXJbM10pIGJlZ2luCisgICAgICAgIGlmICgoQXV0b19wcmVjaGFyZ2VbM10gPT0gMSdiMSkgJiYgKFdyaXRlX3ByZWNoYXJnZVszXSA9PSAxJ2IxKSkgYmVnaW4KKyAgICAgICAgICAgIGlmICgoKCR0aW1lIC0gUkFTX2NoazMgPj0gdFJBUykgJiYKKyAgICAgICAgICAgICAgICgoKEJ1cnN0X2xlbmd0aF8xID09IDEnYjEgfHwgV3JpdGVfYnVyc3RfbW9kZSA9PSAxJ2IxKSAmJiBDb3VudF9wcmVjaGFyZ2UgWzNdID49IDEpIHx8IAorICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzIgPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2UgWzNdID49IDIpIHx8CisgICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfNCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZSBbM10gPj0gNCkgfHwKKyAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF84ID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlIFszXSA+PSA4KSkpIHx8CisgICAgICAgICAgICAgICAgIChSV19pbnRlcnJ1cHRfd3JpdGVbM10gPT0gMSdiMSAmJiBXUl9jb3VudGVyWzNdID49IDIpKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICBBdXRvX3ByZWNoYXJnZVszXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFdyaXRlX3ByZWNoYXJnZVszXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFJXX2ludGVycnVwdF93cml0ZVszXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICN0V1JhOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgdFdSCisgICAgICAgICAgICAgICAgICAgIFBjX2IzID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgQWN0X2IzID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUlBfY2hrMyA9ICR0aW1lOworICAgICAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBOT1RFIDogU3RhcnQgSW50ZXJuYWwgQXV0byBQcmVjaGFyZ2UgZm9yIEJhbmsgMyIsICR0aW1lKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIHRhc2sgQnVyc3Q7CisgICAgICAgIGJlZ2luCisgICAgICAgICAgICAvLyBBZHZhbmNlIEJ1cnN0IENvdW50ZXIKKyAgICAgICAgICAgIEJ1cnN0X2NvdW50ZXIgPSBCdXJzdF9jb3VudGVyICsgMTsKKworICAgICAgICAgICAgLy8gQnVyc3QgVHlwZQorICAgICAgICAgICAgaWYgKE1vZGVfcmVnWzNdID09IDEnYjApIGJlZ2luICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlcXVlbnRpYWwgQnVyc3QKKyAgICAgICAgICAgICAgICBDb2xfdGVtcCA9IENvbCArIDE7CisgICAgICAgICAgICBlbmQgZWxzZSBpZiAoTW9kZV9yZWdbM10gPT0gMSdiMSkgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW50ZXJsZWF2ZWQgQnVyc3QKKyAgICAgICAgICAgICAgICBDb2xfdGVtcFsyXSA9ICBCdXJzdF9jb3VudGVyWzJdIF4gIENvbF9icnN0WzJdOworICAgICAgICAgICAgICAgIENvbF90ZW1wWzFdID0gIEJ1cnN0X2NvdW50ZXJbMV0gXiAgQ29sX2Jyc3RbMV07CisgICAgICAgICAgICAgICAgQ29sX3RlbXBbMF0gPSAgQnVyc3RfY291bnRlclswXSBeICBDb2xfYnJzdFswXTsKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAvLyBCdXJzdCBMZW5ndGgKKyAgICAgICAgICAgIGlmIChCdXJzdF9sZW5ndGhfMikgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCdXJzdCBMZW5ndGggPSAyCisgICAgICAgICAgICAgICAgQ29sIFswXSA9IENvbF90ZW1wIFswXTsKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCdXJzdF9sZW5ndGhfNCkgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCdXJzdCBMZW5ndGggPSA0CisgICAgICAgICAgICAgICAgQ29sIFsxIDogMF0gPSBDb2xfdGVtcCBbMSA6IDBdOworICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJ1cnN0X2xlbmd0aF84KSBiZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1cnN0IExlbmd0aCA9IDgKKyAgICAgICAgICAgICAgICBDb2wgWzIgOiAwXSA9IENvbF90ZW1wIFsyIDogMF07CisgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnVyc3QgTGVuZ3RoID0gRlVMTAorICAgICAgICAgICAgICAgIENvbCA9IENvbF90ZW1wOworICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIC8vIEJ1cnN0IFJlYWQgU2luZ2xlIFdyaXRlICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoV3JpdGVfYnVyc3RfbW9kZSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAvLyBEYXRhIENvdW50ZXIKKyAgICAgICAgICAgIGlmIChCdXJzdF9sZW5ndGhfMSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChCdXJzdF9jb3VudGVyID49IDEpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgRGF0YV9vdXRfZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCdXJzdF9sZW5ndGhfMiA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChCdXJzdF9jb3VudGVyID49IDIpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgRGF0YV9vdXRfZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCdXJzdF9sZW5ndGhfNCA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChCdXJzdF9jb3VudGVyID49IDQpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgRGF0YV9vdXRfZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCdXJzdF9sZW5ndGhfOCA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChCdXJzdF9jb3VudGVyID49IDgpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgRGF0YV9vdXRfZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmR0YXNrCisKKyAgICAvLyBUaW1pbmcgUGFyYW1ldGVycyBmb3IgLTc1IChQQzEzMykgYW5kIENBUyBMYXRlbmN5ID0gMgorICAgIHNwZWNpZnkKKyAgICAgICAgc3BlY3BhcmFtCisgICAgICAgICAgICAgICAgICAgIHRBSCAgPSAgMC44LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGRyLCBCYSBIb2xkIFRpbWUKKyAgICAgICAgICAgICAgICAgICAgdEFTICA9ICAxLjUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZHIsIEJhIFNldHVwIFRpbWUKKyAgICAgICAgICAgICAgICAgICAgdENIICA9ICAyLjUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENsb2NrIEhpZ2gtTGV2ZWwgV2lkdGgKKyAgICAgICAgICAgICAgICAgICAgdENMICA9ICAyLjUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENsb2NrIExvdy1MZXZlbCBXaWR0aAorICAgICAgICAgICAgICAgICAgICB0Q0sgID0gMTAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2xvY2sgQ3ljbGUgVGltZQorICAgICAgICAgICAgICAgICAgICB0REggID0gIDAuOCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YS1pbiBIb2xkIFRpbWUKKyAgICAgICAgICAgICAgICAgICAgdERTICA9ICAxLjUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEtaW4gU2V0dXAgVGltZQorICAgICAgICAgICAgICAgICAgICB0Q0tIID0gIDAuOCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ0tFIEhvbGQgIFRpbWUKKyAgICAgICAgICAgICAgICAgICAgdENLUyA9ICAxLjUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENLRSBTZXR1cCBUaW1lCisgICAgICAgICAgICAgICAgICAgIHRDTUggPSAgMC44LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDUyMsIFJBUyMsIENBUyMsIFdFIywgRFFNIyBIb2xkICBUaW1lCisgICAgICAgICAgICAgICAgICAgIHRDTVMgPSAgMS41OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDUyMsIFJBUyMsIENBUyMsIFdFIywgRFFNIyBTZXR1cCBUaW1lCisgICAgICAgICR3aWR0aCAgICAocG9zZWRnZSBDbGssICAgICAgICAgICB0Q0gpOworICAgICAgICAkd2lkdGggICAgKG5lZ2VkZ2UgQ2xrLCAgICAgICAgICAgdENMKTsKKyAgICAgICAgJHBlcmlvZCAgIChuZWdlZGdlIENsaywgICAgICAgICAgIHRDSyk7CisgICAgICAgICRwZXJpb2QgICAocG9zZWRnZSBDbGssICAgICAgICAgICB0Q0spOworICAgICAgICAkc2V0dXBob2xkKHBvc2VkZ2UgQ2xrLCAgICBDa2UsICAgdENLUywgdENLSCk7CisgICAgICAgICRzZXR1cGhvbGQocG9zZWRnZSBDbGssICAgIENzX24sICB0Q01TLCB0Q01IKTsKKyAgICAgICAgJHNldHVwaG9sZChwb3NlZGdlIENsaywgICAgQ2FzX24sIHRDTVMsIHRDTUgpOworICAgICAgICAkc2V0dXBob2xkKHBvc2VkZ2UgQ2xrLCAgICBSYXNfbiwgdENNUywgdENNSCk7CisgICAgICAgICRzZXR1cGhvbGQocG9zZWRnZSBDbGssICAgIFdlX24sICB0Q01TLCB0Q01IKTsKKyAgICAgICAgJHNldHVwaG9sZChwb3NlZGdlIENsaywgICAgQWRkciwgIHRBUywgIHRBSCk7CisgICAgICAgICRzZXR1cGhvbGQocG9zZWRnZSBDbGssICAgIEJhLCAgICB0QVMsICB0QUgpOworICAgICAgICAkc2V0dXBob2xkKHBvc2VkZ2UgQ2xrLCAgICBEcW0sICAgdENNUywgdENNSCk7CisgICAgICAgICRzZXR1cGhvbGQocG9zZWRnZSBEcV9jaGssIERxLCAgICB0RFMsICB0REgpOworICAgIGVuZHNwZWNpZnkKKworZW5kbW9kdWxlCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvbW9kZWwvczI1ZmwyNTZzLnN2IGIvdmVyaWxvZy9kdi9tb2RlbC9zMjVmbDI1NnMuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUyMzBjZgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvbW9kZWwvczI1ZmwyNTZzLnN2CkBAIC0wLDAgKzEsODIwNiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDEyIFNwYW5zaW9uLCBMTEMuCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vICBGaWxlIG5hbWUgOiBzMjVmbDI1NnMudgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gIENvcHlyaWdodCAoQykgMjAxMiBTcGFuc2lvbiwgTExDLgorLy8KKy8vICBNT0RJRklDQVRJT04gSElTVE9SWSA6CisvLworLy8gIHZlcnNpb246IHwgYXV0aG9yOiAgICAgfCAgbW9kIGRhdGU6ICB8IGNoYW5nZXMgbWFkZToKKy8vICAgIFYxLjAgICAgICBWLk1hbmNldiAgICAgMTkgTm92IDA5ICAgICAgSW5pdGlhbAorLy8gICAgICAgICAgICBSLlByb2tvcG92aWMKKy8vICAgIFYxLjEgICAgICBWLk1hbmNldiAgICAgMDQgTWFyIDEwICAgIGFkZHJfY250IGZvciBzZWNvbmQgcmVhZCBpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaCBwZXJmb3JtYW5jZSByZWFkIGNvbnRpbnVvdXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgY2FuIGNoYW5nZSBpdHMgdmFsdWUgb25seQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBDU05lZyA9ICcwJworLy8gICAgVjEuMiAgICAgIFYuTWFuY2V2ICAgICAyMyBNYXIgMTAgICAgRHVyaW5nIHJlYWQgb3BlcmF0aW9ucyByZWFkX291dAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsIGNoYW5nZXMgaXRzIHZhbHVlIGluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydGVyIGludGVydmFsCisvLyAgICBWMS4zICAgICAgVi5NYW5jZXYgICAgIDEyIEFwciAxMCAgICBIT0xEIG1vZGUgY29ycmVjdGVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb24gZm9yIFBQIG9wZXJhdGlvbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVjdGVkCisvLyAgICBWMS40ICAgICAgVi5NYW5jZXYgICAgIDIwIE1heSAxMCAgICBTUldEIGJpdCBhc3NpZ25tZW50IGlzIGNvcnJlY3RlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uIGZvciBXUlIgY29tbWFuZCBpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVfY3ljbGUgX2RlY29kZSBzZWN0aW9uIGlzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZWN0ZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsb2NraW5nIGFzc2lnbm1lbnRzIGZvciBzaWduYWxzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXU1RBUlQgYW5kIFBTVEFSVCBhcmUgcmVwbGFjZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggbm9uYmxvY2tpbmcgYXNzaWdubWVudHMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbnMgaW4gUGFnZSBQcm9ncmFtCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGFyZSBmaXhlZAorLy8gICAgVjEuNSAgICAgIFYuTWFuY2V2ICAgICAyNSBNYXkgMTAgICAgQ29uZGl0aW9ucyBpbiBwcm9ncmFtbWluZworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnMgYXJlIGZpeGVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1pbmcgY29udHJvbCBzZWN0aW9ucyBmb3IKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2dyYW0gYW5kIEVyYXNlIG9wZXJhdGlvbiBhcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQKKy8vICAgIFYxLjYgICAgICBWLk1hbmNldiAgICAgMDMgSnVuZSAxMCAgIGJ1c19jeWNsZV9zdGF0ZSBzZWN0aW9uIGZvcgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEdTUCBjb21tYW5kIGlzIGZpeGVkCisvLyAgICBWMS43ICAgICAgVi5NYW5jZXYgICAgIDI4IEp1bHkgMTAgICBEdXJpbmcgdGhlIFFVQUQgbW9kZSBIT0xEIyBpbnB1dAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IG1vbml0b3JlZCBmb3IgaXRzIG5vcm1hbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlIGN5Y2xlIGRlY29kZSBzZWN0aW9uIGlzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkCisvLyAgICBWMS44ICAgICBCLkNvbGFrb3ZpYyAgIDI0IEF1ZyAxMCAgICBBbGwgcmVkdW5kYW50IHNpZ25hbHMgYXJlIHJlbW92ZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gQnVzQ3ljbGUgcHJvY2VzcworLy8gICAgVjEuOSAgICAgIFYuTWFuY2V2ICAgICAzMCBTZXAgMTAgICAgTGF0ZXN0IGRhdGFzaGVldCBhbGlnbmVkCisvLyAgICAgICAgICAgICBCLkNvbGFrb3ZpYworLy8KKy8vICAgIFYyLjAgICAgICBWLk1hbmNldiAgICAgMDUgTm92IDEwICAgIEh5YnJpZCBjb25maWd1cmF0aW9uIGFkZGVkCisvLworLy8gICAgVjIuMSAgICAgIFYuTWFuY2V2ICAgICAxMiBOb3YgMTAgICAgUVVBRCBQcm9ncmFtIG9wZXJhdGlvbiBkdXJpbmcgRXJhc2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1c3BlbmQgaXMgYWRkZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdhcm5pbmcgZm9yIFJlc3VtZSB0byBTdXNwZW5kIHRpbWUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFkZGVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEdXJpbmcgRXJhc2UgU3VzcGVuZCwgYWZ0ZXIgUHJvZ3JhbQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIGlzIGNvbXBsZXRlZCwgV0VMIGJpdCBpcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1wbGVtZXRhdGlvbiBvZiBTb2Z0d2FyZSBSZXNldCBpcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlZAorLy8gICAgVjIuMiAgICAgIFMuUGV0cm92aWMgICAxOCBBcHIgMTEgICAgQ29ycmVjdGVkIHRpbWluZyBpbiBhbHdheXMgYmxvY2sKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgZ2VuZXJhdGVzIHJpc2luZ19lZGdlX0NTTmVnX2lwZAorLy8gICAgVjIuMyAgICAgIEIuQ29sYWtvdmljICAwNSBKdWx5IDExICAgTGF0ZXN0IGRhdGFzaGVldCBhbGlnbmVkCisvLyAgICBWMi40ICAgICAgQi5Db2xha292aWMgIDE0IEp1bHkgMTEgICBPcHRpbWl6YXRpb24gaXNzdWUgaXMgZml4ZWQKKy8vICAgIFYyLjUgICAgICBWLk1hbmNldiAgICAgMTkgSnVseSAxMSAgIFRpbWluZyBjaGVjayBpc3N1ZSBpcyBmaXhlZAorLy8gICAgVjIuNiAgICAgIFYuIE1hbmNldiAgICAxOCBOb3YgMTEgICAgVGltZSB0SE8gaXMgY2hhbmdlZCB0byAxIG5zCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3VzdG9tZXIncyByZXF1ZXN0KQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlJXUiBpbnN0cnVjdGlvbiBpcyBjb3JyZWN0ZWQKKy8vICAgIFYyLjcgICAgICBTLlBldHJvdmljICAgMjggQXVnIDEyICAgIFFQUCBJbnN0cnVjdGlvbiBpcyBhbGxvd2VkIG9uCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c2x5IHByb2dyYW1tZWQgcGFnZQorLy8gICAgVjIuOCAgICAgIFYuIE1hbmNldiAgICAxMyBGZWIgMTMgICAgUmV2ZXJ0ZWQgcmVzdHJpY3Rpb24gZm9yIFFQUAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gcHJvZ3JhbW1lZCBwYWdlIGFuZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWQgY2xlYXJpbmcgd2l0aCBzZWN0b3IgZXJhc2UKKy8vICAgIFYyLjkgICAgICBTLlBldHJvdmljICAgMTMgTm92IDI4ICAgIENvcnJlY3RlZCBGU00gc3RhdGUgdHJhbnNpdGlvbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZCBvbiBQb3dlci1VcCBhbmQgSFcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2V0IGluIFN0YXRlR2VuIHByb2Nlc3MKKy8vICAgIFYyLjEwICAgICBWLiBNYW5jZXYgICAgMTMgRGVjIDIwICAgICBDb3JyZWN0ZWQgRExQIHJlYWQKKy8vICAgIFYyLjExICAgICBNLlN0b2phbm92aWMgMTUgTWF5IDE1ICAgIElnbm9yZWQgdXBwZXIgYWRkcmVzcyBiaXRzIGZvciBSRDQKKy8vICAgIFYyLjEyICAgICBNLlN0b2phbm92aWMgMTUgTWF5IDI5ICAgIElnbm9yZWQgdXBwZXIgYWRkcmVzcyBiaXRzIGZvciBhbGwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzIGluIFFVQUQgbW9kZQorLy8gICAgVjIuMTMgICAgIE0uU3RvamFub3ZpYyAxNiBNYXkgMTEgICAgRHVyaW5nIFFQUCBhbmQgUVBQNCBjb21tYW5kcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNhbWUgcGFnZSBtdXN0IG5vdCBiZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbW1lZCBtb3JlIHRoYW4gb25jZS4gSG93ZXZlcgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gbm90IGdlbmVyYXRlIFBfRVJSIGlmIHRoaXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jY3Vycy4KKy8vICAgIFYyLjE0ICAgICBNLktybmV0YSAgICAgMTkgTWF5IDA3ICAgIFVwZGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSByZXYgKlAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChRUFAgYW5kIFFQUDQgY29tbWFuZHMgY2hhbmdlZCwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVDQ1JEIGNvbW1hbmQgYWRkZWQsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMT0NLIGJpdCByZW1vdmVkKQorLy8gICAgVjIuMTUgICAgIEIuQmFyYWMgICAgICAyMCBKYW4gMjQgICAgQnVnIDQ5IGZpeGVkLCBpc3N1ZSB3aXRoIG5vdCBhc3NpZ25pbmcgCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0b3IgaW4gY29tbWFuZHMgUDRFNCBhbmQgUDRFCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gIFBBUlQgREVTQ1JJUFRJT046CisvLworLy8gIExpYnJhcnk6ICAgIEZMQVNICisvLyAgVGVjaG5vbG9neTogRkxBU0ggTUVNT1JZCisvLyAgUGFydDogICAgICAgUzI1RkwyNTZTCisvLworLy8gIERlc2NyaXB0aW9uOiAyNTYgTWVnYWJpdCBTZXJpYWwgRmxhc2ggTWVtb3J5CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgQ29tbWVudHMgOgorLy8gICAgICBGb3IgY29ycmVjdCBzaW11bGF0aW9uLCBzaW11bGF0b3IgcmVzb2x1dGlvbiBzaG91bGQgYmUgc2V0IHRvIDEgcHMKKy8vICAgICAgQSBkZXZpY2Ugb3JkZXJpbmcgKHRyaW0pIG9wdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgYSBmZWF0dXJlIGlzIGVuYWJsZWQKKy8vICAgICAgb3Igbm90LCBvciBwcm92aWRlIHJlbGV2YW50IHBhcmFtZXRlcnM6CisvLyAgICAgICAgLTE1dGggY2hhcmFjdGVyIGluIFRpbWluZ01vZGVsIGRldGVybWluZXMgaWYgZW5oYW5jZWQgaGlnaAorLy8gICAgICAgICBwZXJmb3JtYW5jZSBvcHRpb24gaXMgYXZhaWxhYmxlCisvLyAgICAgICAgICAgICgwLDIsMyxSLEEsQixDLEQpIEVIUExDCisvLyAgICAgICAgICAgIChZLFosUyxULEssTCkgICAgIFNlY3VyaXR5IEVIUExDCisvLyAgICAgICAgICAgICg0LDYsNyw4LDksUSkgICAgIEhQTEMKKy8vICAgICAgICAtMTV0aCBjaGFyYWN0ZXIgaW4gVGltaW5nTW9kZWwgZGV0ZXJtaW5lcyBpZiBSRVNFVCMgaW5wdXQKKy8vICAgICAgICAgaXMgYXZhaWxhYmxlCisvLyAgICAgICAgICAgIChSLEEsQixDLEQsUS42LDcsSyxMLFMsVCxNLE4sVSxWKSAgUkVTRVQjIGlzIGF2YWlsYWJsZQorLy8gICAgICAgICAgICAoMCwyLDMsNCw4LDksWS5aLlcsWCkgICAgICAgICAgICAgIFJFU0VUIyBpcyB0aWVkIHRvIHRoZSBpbmFjdGl2ZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLGluc2lkZSB0aGUgcGFja2FnZS4KKy8vICAgICAgICAtMTZ0aCBjaGFyYWN0ZXIgaW4gVGltaW5nTW9kZWwgZGV0ZXJtaW5lcyBTZWN0b3IgYW5kIFBhZ2UgU2l6ZToKKy8vICAgICAgICAgICAgKDApIFNlY3RvciBTaXplID0gNjQga0I7ICBQYWdlIFNpemUgPSAyNTYgYnl0ZXMKKy8vICAgICAgICAgICAgICAgIEh5YnJpZCBUb3AvQm90dG9tIHNlY3RvciBzaXplIGFyY2hpdGVjdHVyZQorLy8gICAgICAgICAgICAoMSkgU2VjdG9yIFNpemUgPSAyNTYga0I7IFBhZ2UgU2l6ZSA9IDUxMiBieXRlcworLy8gICAgICAgICAgICAgICAgVW5pZm9ybSBzZWN0b3Igc2l6ZSBhcmNoaXRlY3R1cmUKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gIEtub3duIEJ1Z3M6CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gTU9EVUxFIERFQ0xBUkFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2B0aW1lc2NhbGUgMSBwcy8xIHBzCisKK21vZHVsZSBzMjVmbDI1NnMKKyAgICAoCisgICAgICAgIC8vIERhdGEgSW5wdXRzL091dHB1dHMKKyAgICAgICAgU0kgICAgICwKKyAgICAgICAgU08gICAgICwKKyAgICAgICAgLy8gQ29udHJvbHMKKyAgICAgICAgU0NLICAgICwKKyAgICAgICAgQ1NOZWcgICwKKyAgICAgICAgUlNUTmVnICwKKyAgICAgICAgV1BOZWcgICwKKyAgICAgICAgSE9MRE5lZworCispOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBQb3J0IC8gUGFydCBQaW4gRGVjbGFyYXRpb25zCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBpbm91dCAgIFNJICAgICAgICAgICAgOworICAgIGlub3V0ICAgU08gICAgICAgICAgICA7CisKKyAgICBpbnB1dCAgIFNDSyAgICAgICAgICAgOworICAgIGlucHV0ICAgQ1NOZWcgICAgICAgICA7CisgICAgaW5wdXQgICBSU1ROZWcgICAgICAgIDsKKyAgICBpbm91dCAgIEhPTEROZWcgICAgICAgOworICAgIGlub3V0ICAgV1BOZWcgICAgICAgICA7CisKKyAgICAvLyBpbnRlcmNvbm5lY3QgcGF0aCBkZWxheSBzaWduYWxzCisgICAgd2lyZSAgIFNDS19pcGQgICAgICAgIDsKKyAgICB3aXJlICAgU0lfaXBkICAgICAgICAgOworICAgIHdpcmUgICBTT19pcGQgICAgICAgICA7CisKKyAgICB3aXJlIFNJX2luICAgICAgICAgICAgOworICAgIGFzc2lnbiBTSV9pbiA9IFNJX2lwZCA7CisKKyAgICB3aXJlIFNJX291dCAgICAgICAgICAgOworICAgIGFzc2lnbiBTSV9vdXQgPSBTSSAgICA7CisKKyAgICB3aXJlIFNPX2luICAgICAgICAgICAgOworICAgIGFzc2lnbiBTT19pbiA9IFNPX2lwZCA7CisKKyAgICB3aXJlIFNPX291dCAgICAgICAgICAgOworICAgIGFzc2lnbiBTT19vdXQgPSBTTyAgICA7CisKKyAgICB3aXJlICAgQ1NOZWdfaXBkICAgICAgOworICAgIHdpcmUgICBIT0xETmVnX2lwZCAgICA7CisgICAgd2lyZSAgIFdQTmVnX2lwZCAgICAgIDsKKyAgICB3aXJlICAgUlNUTmVnX2lwZCAgICAgOworCisgICAgd2lyZSBIT0xETmVnX2luICAgICAgICAgICAgICAgICA7CisgICAgLy9JbnRlcm5hbCBwdWxsLXVwCisgICAgYXNzaWduIEhPTEROZWdfaW4gPSAoSE9MRE5lZ19pcGQgPT09IDEnYngpID8gMSdiMSA6IEhPTEROZWdfaXBkOworCisgICAgd2lyZSBIT0xETmVnX291dCAgICAgICAgICAgICAgICA7CisgICAgYXNzaWduIEhPTEROZWdfb3V0ID0gSE9MRE5lZyAgICA7CisKKyAgICB3aXJlICAgV1BOZWdfaW4gICAgICAgICAgICAgICAgIDsKKyAgICAvL0ludGVybmFsIHB1bGwtdXAKKyAgICBhc3NpZ24gV1BOZWdfaW4gPSAoV1BOZWdfaXBkID09PSAxJ2J4KSA/IDEnYjEgOiBXUE5lZ19pcGQ7CisKKyAgICB3aXJlICAgV1BOZWdfb3V0ICAgICAgICAgICAgICAgIDsKKyAgICBhc3NpZ24gV1BOZWdfb3V0ID0gV1BOZWcgICAgICAgIDsKKworICAgIHdpcmUgICBSU1ROZWdfaW4gICAgICAgICAgICAgICAgIDsKKyAgICAvL0ludGVybmFsIHB1bGwtdXAKKyAgICBhc3NpZ24gUlNUTmVnX2luID0gKFJTVE5lZ19pcGQgPT09IDEnYngpID8gMSdiMSA6IFJTVE5lZ19pcGQ7CisKKyAgICAvLyBpbnRlcm5hbCBkZWxheXMKKyAgICByZWcgUFBfaW4gICAgICAgOworICAgIHJlZyBQUF9vdXQgICAgICA7CisgICAgcmVnIEJQX2luICAgICAgIDsKKyAgICByZWcgQlBfb3V0ICAgICAgOworICAgIHJlZyBTRV9pbiAgICAgICA7CisgICAgcmVnIFNFX291dCAgICAgIDsKKyAgICByZWcgQkVfaW4gICAgICAgOworICAgIHJlZyBCRV9vdXQgICAgICA7CisgICAgcmVnIFdSUl9pbiAgICAgIDsKKyAgICByZWcgV1JSX291dCAgICAgOworICAgIHJlZyBFUlNTVVNQX2luICA7CisgICAgcmVnIEVSU1NVU1Bfb3V0IDsKKyAgICByZWcgUFJHU1VTUF9pbiAgOworICAgIHJlZyBQUkdTVVNQX291dCA7CisgICAgcmVnIFBVX2luICAgICAgIDsKKyAgICByZWcgUFVfb3V0ICAgICAgOworICAgIHJlZyBSU1RfaW4gICAgICA7CisgICAgcmVnIFJTVF9vdXQgICAgIDsKKyAgICByZWcgUFBCRVJBU0VfaW4gOworICAgIHJlZyBQUEJFUkFTRV9vdXQ7CisgICAgcmVnIFBBU1NVTENLX2luIDsKKyAgICByZWcgUEFTU1VMQ0tfb3V0OworICAgIHJlZyBQQVNTQUNDX2luIDsKKyAgICByZWcgUEFTU0FDQ19vdXQ7CisKKyAgICAvLyBldmVudCBjb250cm9sIHJlZ2lzdGVycworICAgIHJlZyBQUkdTVVNQX291dF9ldmVudDsKKyAgICByZWcgRVJTU1VTUF9vdXRfZXZlbnQ7CisgICAgcmVnIFJlc2V0ZWRfZXZlbnQ7CisgICAgcmVnIFNDS19pcGRfZXZlbnQ7CisgICAgcmVnIG5leHRfc3RhdGVfZXZlbnQ7CisKKyAgICByZWcgcmlzaW5nX2VkZ2VfUG93ZXJlZFVwOworICAgIHJlZyByaXNpbmdfZWRnZV9SZXNldGVkOworICAgIHJlZyByaXNpbmdfZWRnZV9QQVNTVUxDS19pbjsKKyAgICByZWcgcmlzaW5nX2VkZ2VfUkVTX291dDsKKyAgICByZWcgcmlzaW5nX2VkZ2VfUFNUQVJUOworICAgIHJlZyByaXNpbmdfZWRnZV9XU1RBUlQ7CisgICAgcmVnIHJpc2luZ19lZGdlX0VTVEFSVDsKKyAgICByZWcgcmlzaW5nX2VkZ2VfUlNUTmVnOworICAgIHJlZyByaXNpbmdfZWRnZV9SU1Q7CisgICAgcmVnIGZhbGxpbmdfZWRnZV9SU1ROZWc7CisgICAgcmVnIGZhbGxpbmdfZWRnZV9SU1Q7CisgICAgcmVnIHJpc2luZ19lZGdlX1JTVF9vdXQ7CisgICAgcmVnIHJpc2luZ19lZGdlX0NTTmVnX2lwZCAgPSAxJ2IwOworICAgIHJlZyBmYWxsaW5nX2VkZ2VfQ1NOZWdfaXBkID0gMSdiMDsKKyAgICByZWcgcmlzaW5nX2VkZ2VfU0NLX2lwZCAgICA9IDEnYjA7CisgICAgcmVnIGZhbGxpbmdfZWRnZV9TQ0tfaXBkICAgPSAxJ2IwOworCisgICAgcmVnIFJTVCAgICAgICAgICAgICAgICA7CisKKyAgICByZWcgIFNPdXRfemQgPSAxJ2JaICAgICA7CisgICAgcmVnICBTT3V0X3ogID0gMSdiWiAgICAgOworCisgICAgd2lyZSBTSV96ICAgICAgICAgICAgICAgIDsKKyAgICB3aXJlIFNPX3ogICAgICAgICAgICAgICAgOworCisgICAgcmVnICBTSU91dF96ZCA9IDEnYlogICAgIDsKKyAgICByZWcgIFNJT3V0X3ogID0gMSdiWiAgICAgOworCisgICAgcmVnICBXUE5lZ091dF96ZCAgID0gMSdiWiAgOworICAgIHJlZyAgSE9MRE5lZ091dF96ZCA9IDEnYlogIDsKKworICAgIGFzc2lnbiBTSV96ID0gU0lPdXRfejsKKyAgICBhc3NpZ24gU09feiA9IFNPdXRfejsKKworICAgIHBhcmFtZXRlciBVc2VyUHJlbG9hZCAgICAgICA9IDE7CisgICAgcGFyYW1ldGVyIG1lbV9maWxlX25hbWUgICAgID0gIm5vbmUiOy8vInMyNWZsMjU2cy5tZW0iOworICAgIHBhcmFtZXRlciBvdHBfZmlsZV9uYW1lICAgICA9ICJzMjVmbDI1NnNPVFAubWVtIjsvLyJub25lIjsKKworICAgIHBhcmFtZXRlciBUaW1pbmdNb2RlbCAgICAgICA9ICJEZWZhdWx0VGltaW5nTW9kZWwiOworCisgICAgcGFyYW1ldGVyICBQYXJ0SUQgICAgICAgICAgID0gInMyNWZsMjU2cyI7CisgICAgcGFyYW1ldGVyICBNYXhEYXRhICAgICAgICAgID0gMjU1OworICAgIHBhcmFtZXRlciAgTWVtU2l6ZSAgICAgICAgICA9IDI4J2gxRkZGRkZGOworICAgIHBhcmFtZXRlciAgU2VjU2l6ZTI1NiAgICAgICA9IDIwJ2gzRkZGRjsKKyAgICBwYXJhbWV0ZXIgIFNlY1NpemU2NCAgICAgICAgPSAxNidoRkZGRjsKKyAgICBwYXJhbWV0ZXIgIFNlY1NpemU0ICAgICAgICAgPSAxMidoRkZGOworICAgIHBhcmFtZXRlciAgU2VjTnVtNjQgICAgICAgICA9IDU0MTsKKyAgICBwYXJhbWV0ZXIgIFNlY051bTI1NiAgICAgICAgPSAxMjc7CisgICAgcGFyYW1ldGVyICBQYWdlTnVtNjQgICAgICAgID0gMjAnaDNGRkZGOworICAgIHBhcmFtZXRlciAgUGFnZU51bTI1NiAgICAgICA9IDE2J2hGRkZGOworICAgIHBhcmFtZXRlciAgQWRkclJBTkdFICAgICAgICA9IDI4J2gxRkZGRkZGOworICAgIHBhcmFtZXRlciAgSGlBZGRyQml0ICAgICAgICA9IDMxOworICAgIHBhcmFtZXRlciAgT1RQU2l6ZSAgICAgICAgICA9IDEwMjM7CisgICAgcGFyYW1ldGVyICBPVFBMb0FkZHIgICAgICAgID0gMTInaDAwMDsKKyAgICBwYXJhbWV0ZXIgIE9UUEhpQWRkciAgICAgICAgPSAxMidoM0ZGOworICAgIHBhcmFtZXRlciAgQllURSAgICAgICAgICAgICA9IDg7CisKKyAgICAvLyBNYW51ZmFjdHVyZXIgSWRlbnRpZmljYXRpb24KKyAgICBwYXJhbWV0ZXIgIE1hbnVmX0lEICAgICAgID0gOCdoMDE7CisgICAgcGFyYW1ldGVyICBEZXZpY2VJRCAgICAgICA9IDgnaDE4OworICAgIC8vIEVsZWN0cm9uaWMgU2lnbmF0dXJlCisgICAgcGFyYW1ldGVyICBFU2lnbmF0dXJlICAgICA9IDgnaDE4OworICAgIC8vICBEZXZpY2UgSUQKKyAgICAvL01hbnVmYWN0dXJlciBJZGVudGlmaWNhdGlvbiAmJiBNZW1vcnkgVHlwZSAmJiBNZW1vcnkgQ2FwYWNpdHkKKyAgICBwYXJhbWV0ZXIgIEplZGVjX0lEICAgICAgID0gOCdoMDE7CisgICAgcGFyYW1ldGVyICBEZXZpY2VJRDEgICAgICA9IDgnaDAyOworICAgIHBhcmFtZXRlciAgRGV2aWNlSUQyICAgICAgPSA4J2gxOTsKKyAgICBwYXJhbWV0ZXIgIEV4dGVuZGVkQnl0ZXMgID0gOCdoNEQ7CisgICAgcGFyYW1ldGVyICBFeHRlbmRlZElENjQgICA9IDgnaDAxOworICAgIHBhcmFtZXRlciAgRXh0ZW5kZWRJRDI1NiAgPSA4J2gwMDsKKyAgICBwYXJhbWV0ZXIgIERpZVJldiAgICAgICAgID0gOCdoMDA7CisgICAgcGFyYW1ldGVyICBNYXNrUmV2ICAgICAgICA9IDgnaDAwOworCisgICAgaW50ZWdlciAgICBQYWdlU2l6ZTsKKyAgICBpbnRlZ2VyICAgIFBhZ2VOdW07CisgICAgaW50ZWdlciAgICBTZWNTaXplOworICAgIGludGVnZXIgICAgYl9hY3QgPSAwOworCisgICAgaW50ZWdlciAgICBBU1BfUHJvdFNFID0gMDsKKyAgICBpbnRlZ2VyICAgIFNlY19Qcm90U0UgPSAwOworCisgICAgaW50ZWdlciAgICBFSFA7IC8vRW5oYW5jZWQgSGlnaCBQZXJmb3JtYW5jZSBNb2RlIGFjdGl2ZQorCisgICAgaW50ZWdlciAgICBCQVJfQUNDID0gMDsgLy9CYW5rIFJlZ2lzdGVyIEFjY2VzcyBhY3RpdmUKKworICAgIC8vdmFyYWlibGVzIHRvIHJlc29sdmUgYXJjaGl0ZWN0dXJlIHVzZWQKKyAgICByZWcgWzI0KjgtMTowXSB0bXBfdGltaW5nOy8vc3RvcmVzIGNvcHkgb2YgVGltaW5nTW9kZWwKKyAgICByZWcgWzc6MF0gdG1wX2NoYXIxOy8vRGVmaW5lIEVIUExDIG9yIEhQTEMgTW9kZQorICAgIHJlZyBbNzowXSB0bXBfY2hhcjI7Ly9zdG9yZXMgIjAiIG9yICIxIiBjaGFyYWN0ZXIgZGVmaW5pbmcgc2VjdG9yL3BhZ2Ugc2l6ZQorICAgIGludGVnZXIgZm91bmQgPSAxJ2IwOworCisgICAgLy8gSWYgc3BlZWRzaW11bGF0aW9uIGlzIG5lZWRlZCB1bmNvbW1lbnQgZm9sbG93aW5nIGxpbmUKKworICAgICAgIGBkZWZpbmUgU1BFRURTSU07CisKKyAgICAvLyBwb3dlcnVwCisgICAgcmVnIFBvd2VyZWRVcDsKKworICAgIC8vIE1lbW9yeSBBcnJheSBDb25maWd1cmF0aW9uCisgICAgcmVnIEJvdHRvbUJvb3QgICAgICAgICAgPSAxJ2IwOworICAgIHJlZyBUb3BCb290ICAgICAgICAgICAgID0gMSdiMDsKKyAgICByZWcgVW5pZm9ybVNlYyAgICAgICAgICA9IDEnYjA7CisKKyAgICAvLyBGU00gY29udHJvbCBzaWduYWxzCisgICAgcmVnIFBET05FICAgICA7CisgICAgcmVnIFBTVEFSVCAgICA7CisgICAgcmVnIFBHU1VTUCAgICA7CisgICAgcmVnIFBHUkVTICAgICA7CisKKyAgICByZWcgVFNVICAgICAgIDsKKworICAgIHJlZyBSRVNfVE9fU1VTUF9NSU5fVElNRTsKKyAgICByZWcgUkVTX1RPX1NVU1BfVFlQX1RJTUU7CisKKyAgICByZWcgV0RPTkUgICAgIDsKKyAgICByZWcgV1NUQVJUICAgIDsKKworICAgIHJlZyBFRE9ORSAgICAgOworICAgIHJlZyBFU1RBUlQgICAgOworICAgIHJlZyBFU1VTUCAgICAgOworICAgIHJlZyBFUkVTICAgICAgOworCisgICAgcmVnIFJlc2V0ZWQgICA7CisKKyAgICByZWcgUEFSQU1fUkVHSU9OICAgICAgPSAxJ2IwOworCisgICAgLy8gTG9jayBCaXQgaXMgZW5hYmxlZCBmb3IgY3VzdG9tZXIgcHJvZ3JhbW1pbmcKKyAgICByZWcgV1JMT0NLRU5BQkxFICAgICAgPSAxJ2IxOworICAgIC8vIEZsYWcgdGhhdCBtYXJrIGlmIEFTUCBSZWdpc3RlciBpcyBhbGxyZWFkeSBwcm9ncmFtbWVkCisgICAgcmVnIEFTUE9UUEZMQUcgICAgICAgID0gMSdiMDsKKworICAgIC8vRmxhZyBmb3IgUGFzc3dvcmQgdW5sb2NrIGNvbW1hbmQKKyAgICByZWcgUEFTU19VTkxPQ0tFRCAgICAgPSAxJ2IwOworICAgIHJlZyBbNjM6MF0gUEFTU19URU1QICA9IDY0J2hGRkZGRkZGRkZGRkZGRkZGOworCisgICAgcmVnIFFVQURSRCAgICAgICAgICAgID0gMSdiMDsKKyAgICByZWcgSU5JVElBTF9DT05GSUcgICAgPSAxJ2IwOworICAgIHJlZyBDSEVDS19GUkVRICAgICAgICA9IDEnYjA7CisKKyAgICAvLyBQcm9ncmFtbWluZyBidWZmZXIKKyAgICBpbnRlZ2VyIFdCeXRlWzA6NTExXTsKKyAgICAvLyBDRkkgYXJyYXkKKyAgICBpbnRlZ2VyIENGSV9hcnJheVs4J2gwMDo4J2g1MF07CisgICAgLy8gT1RQIE1lbW9yeSBBcnJheQorICAgIGludGVnZXIgT1RQTWVtW09UUExvQWRkcjpPVFBIaUFkZHJdOworICAgIC8vIEZsYXNoIE1lbW9yeSBBcnJheQorICAgIGludGVnZXIgTWVtWzA6QWRkclJBTkdFXTsKKworICAgIC8vIFJlZ2lzdGVycworICAgIC8vIFZETFIgUmVnaXN0ZXIKKyAgICByZWdbNzowXSBWRExSX3JlZyAgICAgICAgICA9IDgnaDAwOworICAgIHJlZ1s3OjBdIFZETFJfcmVnX2luICAgICAgID0gOCdoMDA7CisgICAgLy8gTlZETFIgUmVnaXN0ZXIKKyAgICByZWdbNzowXSBOVkRMUl9yZWcgICAgICAgICA9IDgnaDAwOworICAgIHJlZ1s3OjBdIE5WRExSX3JlZ19pbiAgICAgID0gOCdoMDA7CisgICAgcmVnIHN0YXJ0X2RscCAgICAgICAgICAgICAgPSAxJ2IwOworCisgICAgLy8gU3RhdHVzIFJlZ2lzdGVyIDEKKyAgICByZWdbNzowXSBTdGF0dXNfcmVnMSAgICAgICA9IDgnaDAwOworICAgIHJlZ1s3OjBdIFN0YXR1c19yZWcxX2luICAgID0gOCdoMDA7CisKKyAgICB3aXJlIFNSV0QgOworICAgIHdpcmUgUF9FUlI7CisgICAgd2lyZSBFX0VSUjsKKyAgICB3aXJlIFsyOjBdQlA7CisgICAgd2lyZSBXRUw7CisgICAgd2lyZSBXSVA7CisgICAgYXNzaWduIFNSV0QgICA9IFN0YXR1c19yZWcxWzddOworICAgIGFzc2lnbiBQX0VSUiAgPSBTdGF0dXNfcmVnMVs2XTsKKyAgICBhc3NpZ24gRV9FUlIgID0gU3RhdHVzX3JlZzFbNV07CisgICAgYXNzaWduIEJQICAgICA9IFN0YXR1c19yZWcxWzQ6Ml07CisgICAgYXNzaWduIFdFTCAgICA9IFN0YXR1c19yZWcxWzFdOworICAgIGFzc2lnbiBXSVAgICAgPSBTdGF0dXNfcmVnMVswXTsKKworICAgIC8vIFN0YXR1cyBSZWdpc3RlciAyCisgICAgcmVnWzc6MF0gU3RhdHVzX3JlZzIgICAgICAgPSA4J2gwMDsKKyAgICByZWdbNzowXSBTdGF0dXNfcmVnMl9pbiAgICA9IDgnaDAwOworCisgICAgd2lyZSBFUyA7CisgICAgd2lyZSBQUyA7CisgICAgYXNzaWduIEVTICAgPSBTdGF0dXNfcmVnMlsxXTsKKyAgICBhc3NpZ24gUFMgICA9IFN0YXR1c19yZWcyWzBdOworCisgICAgLy8gQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisgICAgcmVnWzc6MF0gQ29uZmlnX3JlZzEgICAgICAgPSA4J2gwMDsKKyAgICByZWdbNzowXSBDb25maWdfcmVnMV9pbiAgICA9IDgnaDAwOworCisgICAgd2lyZSAgIExDMSAgICAgICAgICAgICAgICAgICAgIDsKKyAgICB3aXJlICAgTEMwICAgICAgICAgICAgICAgICAgICAgOworICAgIHdpcmUgICBUQlBST1QgICAgICAgICAgICAgICAgICA7CisvLyAgICAgd2lyZSAgIExPQ0sgICAgICAgICAgICAgICAgICAgIDsKKyAgICB3aXJlICAgQlBOViAgICAgICAgICAgICAgICAgICAgOworICAgIHdpcmUgICBUQlBBUk0gICAgICAgICAgICAgICAgICA7CisgICAgd2lyZSAgIFFVQUQgICAgICAgICAgICAgICAgICAgIDsKKyAgICB3aXJlICAgRlJFRVpFICAgICAgICAgICAgICAgICAgOworICAgIGFzc2lnbiBMQzEgICAgID0gQ29uZmlnX3JlZzFbN107CisgICAgYXNzaWduIExDMCAgICAgPSBDb25maWdfcmVnMVs2XTsKKyAgICBhc3NpZ24gVEJQUk9UICA9IENvbmZpZ19yZWcxWzVdOworLy8gICAgIGFzc2lnbiBMT0NLICAgID0gQ29uZmlnX3JlZzFbNF07CisgICAgYXNzaWduIEJQTlYgICAgPSBDb25maWdfcmVnMVszXTsKKyAgICBhc3NpZ24gVEJQQVJNICA9IENvbmZpZ19yZWcxWzJdOworICAgIGFzc2lnbiBRVUFEICAgID0gQ29uZmlnX3JlZzFbMV07CisgICAgYXNzaWduIEZSRUVaRSAgPSBDb25maWdfcmVnMVswXTsKKworICAgIC8vIEF1dG9ib290IFJlZ2lzdGVyCisgICAgcmVnWzMxOjBdIEF1dG9Cb290X3JlZyAgICAgPSAzMidoMDAwMDAwMDA7CisgICAgcmVnWzMxOjBdIEF1dG9Cb290X3JlZ19pbiAgPSAzMidoMDAwMDAwMDA7CisKKyAgICB3aXJlIEFCRTsKKyAgICBhc3NpZ24gQUJFICAgICA9IEF1dG9Cb290X3JlZ1swXTsKKworICAgIC8vIEJhbmsgQWRkcmVzcyBSZWdpc3RlcgorICAgIHJlZyBbNzowXSBCYW5rX0FkZHJfcmVnICAgID0gOCdoMDA7CisgICAgcmVnIFs3OjBdIEJhbmtfQWRkcl9yZWdfaW4gPSA4J2gwMDsKKworICAgIHdpcmUgICBFWFRBREQ7CisgICAgd2lyZSAgIEJBMjQ7CisKKyAgICBhc3NpZ24gRVhUQUREICA9IEJhbmtfQWRkcl9yZWdbN107CisgICAgYXNzaWduIEJBMjQgICAgPSBCYW5rX0FkZHJfcmVnWzBdOworICAgIAorICAgIC8vIEVDQyBTdGF0dXMgUmVnaXN0ZXIKKyAgICByZWdbNzowXSBFQ0NTUiAgICAgID0gOCdoMDA7CisgICAgCisgICAgd2lyZSAgIEVFQ0M7CisgICAgd2lyZSAgIEVFQ0NEOworICAgIHdpcmUgICBFQ0NESTsKKyAgICAKKyAgICBhc3NpZ24gRUVDQyAgID0gRUNDU1JbMl07CisgICAgYXNzaWduIEVFQ0NEICA9IEVDQ1NSWzFdOworICAgIGFzc2lnbiBFQ0NESSAgPSBFQ0NTUlswXTsKKworICAgIC8vIEFTUCBSZWdpc3RlcgorICAgIHJlZ1sxNTowXSBBU1BfcmVnICAgOworICAgIHJlZ1sxNTowXSBBU1BfcmVnX2luOworCisgICAgd2lyZSAgICBSUE1FICAgICAgICAgOworICAgIHdpcmUgICAgUFBCT1RQICAgICAgIDsKKyAgICB3aXJlICAgIFBXRE1MQiAgICAgICA7CisgICAgd2lyZSAgICBQU1RNTEIgICAgICAgOworICAgIGFzc2lnbiAgUlBNRSAgICAgPSBBU1BfcmVnWzVdOworICAgIGFzc2lnbiAgUFBCT1RQICAgPSBBU1BfcmVnWzNdOworICAgIGFzc2lnbiAgUFdETUxCICAgPSBBU1BfcmVnWzJdOworICAgIGFzc2lnbiAgUFNUTUxCICAgPSBBU1BfcmVnWzFdOworCisgICAgLy8gUGFzc3dvcmQgcmVnaXN0ZXIKKyAgICByZWdbNjM6MF0gUGFzc3dvcmRfcmVnICAgICA9IDY0J2hGRkZGRkZGRkZGRkZGRkZGOworICAgIHJlZ1s2MzowXSBQYXNzd29yZF9yZWdfaW4gID0gNjQnaEZGRkZGRkZGRkZGRkZGRkY7CisKKyAgICAvLyBQUEIgTG9jayBSZWdpc3RlcgorICAgIHJlZ1s3OjBdIFBQQkwgICAgICAgICAgICAgID0gOCdoMDA7CisgICAgcmVnWzc6MF0gUFBCTF9pbiAgICAgICAgICAgPSA4J2gwMDsKKworICAgIHdpcmUgICBQUEJfTE9DSyAgICAgICAgICAgICAgOworICAgIGFzc2lnbiBQUEJfTE9DSyAgICAgPSBQUEJMWzBdOworCisgICAgLy8gUFBCIEFjY2VzcyBSZWdpc3RlcgorICAgIHJlZ1s3OjBdIFBQQkFSICAgICAgICAgICAgID0gOCdoRkY7CisgICAgcmVnWzc6MF0gUFBCQVJfaW4gICAgICAgICAgPSA4J2hGRjsKKworICAgIHJlZ1tTZWNOdW02NDowXSBQUEJfYml0cyAgID0gezU0MnsxJ2IxfX07CisKKyAgICAvLyBEWUIgQWNjZXNzIFJlZ2lzdGVyCisgICAgcmVnWzc6MF0gRFlCQVIgICAgICAgICAgICAgPSA4J2hGRjsKKyAgICByZWdbNzowXSBEWUJBUl9pbiAgICAgICAgICA9IDgnaEZGOworCisgICAgcmVnW1NlY051bTY0OjBdIERZQl9iaXRzICAgPSB7NTQyezEnYjF9fTsKKworICAgIC8vVGhlIExvY2sgUHJvdGVjdGlvbiBSZWdpc3RlcnMgZm9yIE9UUCBNZW1vcnkgc3BhY2UKKyAgICByZWdbNzowXSBMT0NLX0JZVEUxOworICAgIHJlZ1s3OjBdIExPQ0tfQllURTI7CisgICAgcmVnWzc6MF0gTE9DS19CWVRFMzsKKyAgICByZWdbNzowXSBMT0NLX0JZVEU0OworCisgICAgLy8gQ29tbWFuZCBSZWdpc3RlcgorICAgIHJlZyB3cml0ZTsKKyAgICByZWcgY2ZnX3dyaXRlOworICAgIHJlZyByZWFkX291dDsKKyAgICByZWcgZHVhbCAgICAgICAgICA9IDEnYjA7CisgICAgcmVnIHJkX2Zhc3QgICAgICAgPSAxJ2IxOworICAgIHJlZyByZF9zbG93ICAgICAgID0gMSdiMDsKKyAgICByZWcgZGRyICAgICAgICAgICA9IDEnYjA7CisgICAgcmVnIGRkcjgwICAgICAgICAgPSAxJ2IwOworICAgIHJlZyBkZHJfZmFzdCAgICAgID0gMSdiMDsKKyAgICByZWcgaG9sZF9tb2RlICAgICA9IDEnYjA7CisgICAgcmVnIGFueV9yZWFkICAgICAgPSAxJ2IwOworICAgIHJlZyBxdWFkX3BnICAgICAgID0gMSdiMDsKKworICAgIHdpcmUgcmQgOworICAgIHdpcmUgZmFzdF9yZCA7CisgICAgd2lyZSBkZHJkIDsKKyAgICB3aXJlIGZhc3RfZGRyIDsKKyAgICB3aXJlIGRkcmQ4MCA7CisKKyAgICB3aXJlIHF1YWRwZyA7CisgICAgYXNzaWduIHF1YWRwZyA9IHF1YWRfcGc7CisKKyAgICB3aXJlIFJEX0VRVV8xOworICAgIGFzc2lnbiBSRF9FUVVfMSA9IGFueV9yZWFkOworCisgICAgd2lyZSBSRF9FUVVfMDsKKyAgICBhc3NpZ24gUkRfRVFVXzAgPSB+YW55X3JlYWQ7CisKKyAgICByZWcgIGNoYW5nZV9UQlBBUk0gPSAwOworCisgICAgcmVnICBjaGFuZ2VfQlAgPSAwOworICAgIHJlZyBbMjowXSBCUF9iaXRzICAgPSAzJ2IwOworCisgICAgcmVnIERPVUJMRSAgICAgICAgICA9IDEnYjA7IC8vRG91YmxlIERhdGEgUmF0ZSAoRERSKSBmbGFnCisKKyAgICByZWcgUmRQc3dkUHJvdE1vZGUgICAgPSAxJ2IwOy8vUmVhZCBQYXNzd29yZCBQcm90ZWN0aW9uIE1vZGUgQWN0aXZlIGZsYWcKKyAgICByZWcgUmRQc3dkUHJvdEVuYWJsZSAgPSAxJ2IwOy8vUmVhZCBQYXNzd29yZCBQcm90ZWN0aW9uIE1vZGUgU3VwcG9ydCBmbGFnCisKKyAgICBpbnRlZ2VyIEJ5dGVfbnVtYmVyID0gMDsKKworICAgIHJlZyBvZSAgID0gMSdiMDsKKyAgICByZWcgb2VfeiA9IDEnYjA7CisKKyAgICByZWcgWzY0NzowXSBDRklfYXJyYXlfdG1wIDsKKyAgICByZWcgWzc6MF0gQ0ZJX3RtcDsKKworICAgIGludGVnZXIgc3RhcnRfZGVsYXk7CisgICAgcmVnIHN0YXJ0X2F1dG9ib290OworICAgIGludGVnZXIgQUJTRDsKKworICAgIHJlZyAgY2hhbmdlX2FkZHIgOworICAgIGludGVnZXIgQWRkcmVzcyA9IDA7CisgICAgaW50ZWdlciBTZWN0b3JTdXNwZW5kID0gMDsKKworICAgIC8vU2VjdG9yIGFuZCBzdWJzZWN0b3IgYWRkcmVzc2VzCisgICAgaW50ZWdlciBTQSAgICAgICAgPSAwOworCisgICAgLy8gU2VjdG9yIGlzIHByb3RlY3QgaWYgU2VjX1Byb3QoU2VjTnVtKSA9ICcxJworICAgIHJlZyBbU2VjTnVtNjQ6MF0gU2VjX1Byb3QgID0gezU0MnsxJ2IwfX07CisKKyAgICAvLyB0aW1pbmcgY2hlY2sgdmlvbGF0aW9uCisgICAgcmVnIFZpb2wgPSAxJ2IwOworCisgICAgaW50ZWdlciBXT1RQQnl0ZTsKKyAgICBpbnRlZ2VyIEFkZHJMbzsKKyAgICBpbnRlZ2VyIEFkZHJIaTsKKworICAgIHJlZ1s3OjBdICBvbGRfYml0LCBuZXdfYml0OworICAgIGludGVnZXIgb2xkX2ludCwgbmV3X2ludDsKKyAgICByZWdbNjM6MF0gb2xkX3Bhc3M7CisgICAgcmVnWzYzOjBdIG5ld19wYXNzOworICAgIGludGVnZXIgd3JfY250OworICAgIGludGVnZXIgY250OworCisgICAgaW50ZWdlciByZWFkX2NudCA9IDA7CisgICAgaW50ZWdlciBieXRlX2NudCA9IDE7CisgICAgaW50ZWdlciByZWFkX2FkZHIgPSAwOworICAgIGludGVnZXIgcmVhZF9hZGRyX3RtcCA9IDA7CisgICAgaW50ZWdlciBTZWNfYWRkciA9IDA7CisgICAgaW50ZWdlciBTZWNBZGRyID0gMDsKKyAgICBpbnRlZ2VyIFBhZ2VfYWRkciA9IDA7CisgICAgaW50ZWdlciBwZ21fcGFnZSA9IDA7CisKKyAgICByZWdbNzowXSBkYXRhX291dDsKKyAgICByZWdbNjQ3OjBdIGlkZW50X291dDsKKworICAgIHRpbWUgU0NLX2N5Y2xlID0gMDsKKyAgICB0aW1lIHByZXZfU0NLOworICAgIHRpbWUgc3RhcnRfZGRyOworICAgIHRpbWUgb3V0X3RpbWU7CisgICAgdGltZSBTQ0tfU09fRERSOworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy9JbnRlcmNvbm5lY3QgUGF0aCBEZWxheSBTZWN0aW9uCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgYnVmICAgKFNDS19pcGQsIFNDSyk7CisgYnVmICAgKFNJX2lwZCwgU0kpOworCisgYnVmICAgKFNPX2lwZCwgU08pOworIGJ1ZiAgIChDU05lZ19pcGQsIENTTmVnKTsKKyBidWYgICAoSE9MRE5lZ19pcGQsIEhPTEROZWcpOworIGJ1ZiAgIChXUE5lZ19pcGQsIFdQTmVnKTsKKyBidWYgICAoUlNUTmVnX2lwZCwgUlNUTmVnKTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gUHJvcGFnYXRpb24gIGRlbGF5IFNlY3Rpb24KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICBubW9zICAgKFNJLCAgIFNJX3ogLCAxKTsKKworICAgIG5tb3MgICAoU08sICAgU09feiAsIDEpOworICAgIG5tb3MgICAoSE9MRE5lZywgICBIT0xETmVnT3V0X3pkICwgMSk7CisgICAgbm1vcyAgIChXUE5lZywgICBXUE5lZ091dF96ZCAsIDEpOworCisgICAgd2lyZSBkZWdfcGluOworICAgIHdpcmUgZGVnX3NpbjsKKyAgICB3aXJlIGRlZ19ob2xkaW47CisgICAgd2lyZSBkZWhfcGluOworICAgIHdpcmUgZGVoX3NvdXQ7CisgICAgd2lyZSBkZWhfZGRyX3NvdXQ7CisgICAgd2lyZSBkZWhfaG9sZGluOworICAgIC8vVkhETCBWSVRBTCBDaGVja0VuYWJsZSBlcXVpdmFsZW50cworICAgIHdpcmUgcXVhZF9yZDsKKyAgICBhc3NpZ24gcXVhZF9yZCA9IGRlZ19ob2xkaW4gJiYgflFVQUQgJiYgKFNJT3V0X3ogIT0gMSdieik7CisgICAgd2lyZSB3cl9wcm90OworICAgIGFzc2lnbiB3cl9wcm90ID0gU1JXRCAmJiBXRUwgJiYgflFVQUQ7CisgICAgd2lyZSBkdWFsX3JkOworICAgIGFzc2lnbiBkdWFsX3JkID0gZHVhbCA7CisgICAgd2lyZSBkZHJvOworICAgIGFzc2lnbiBkZHJvID0gZGRyICYmIH5kZHI4MCAmJiB+ZHVhbCA7CisgICAgd2lyZSBkZHJvODA7CisgICAgYXNzaWduIGRkcm84MCA9IGRkciAmJiBkZHI4MCAmJiB+ZHVhbCA7CisgICAgd2lyZSBkZHJfcmQ7CisgICAgYXNzaWduIGRkcl9yZCA9IFBvd2VyZWRVcCAmJiBkZHI7CisgICAgd2lyZSBzZHJfcmQ7CisgICAgYXNzaWduIHNkcl9yZCA9IFBvd2VyZWRVcCAmJiB+ZGRyOworCitzcGVjaWZ5CisgICAgICAgIC8vIHRpcGQgZGVsYXlzOiBpbnRlcmNvbm5lY3QgcGF0aCBkZWxheXMgLCBtYXBwZWQgdG8gaW5wdXQgcG9ydCBkZWxheXMuCisgICAgICAgIC8vIEluIFZlcmlsb2cgaXMgbm90IG5lY2Vzc2FyeSB0byBkZWNsYXJlIGFueSB0aXBkXyBkZWxheSB2YXJpYWJsZXMsCisgICAgICAgIC8vIHRoZXkgY2FuIGJlIHRha2VuIGZyb20gU0RGIGZpbGUKKyAgICAgICAgLy8gV2l0aCBhbGwgdGhlIG90aGVyIGRlbGF5cyByZWFsIGRlbGF5cyB3b3VsZCBiZSB0YWtlbiBmcm9tIFNERiBmaWxlCisKKyAgICAvLyB0cGQgZGVsYXlzCisgICAgc3BlY3BhcmFtICAgICAgICB0cGRfU0NLX1NPX25vcm1hbCAgICAgICAgICAgICA9MTsKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwZF9DU05lZ19TTyAgICAgICAgICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdHBkX0hPTEROZWdfU08gICAgICAgICAgICAgICAgPTE7CisgICAgc3BlY3BhcmFtICAgICAgICB0cGRfUlNUTmVnX1NPICAgICAgICAgICAgICAgICA9MTsKKyAgICAvL0REUiBvcGVyYXRpb24gdmFsdWVzCisgICAgc3BlY3BhcmFtICAgICAgICB0cGRfU0NLX1NPX0REUiAgICAgICAgICAgICAgICA9MTsKKworICAgIC8vdHNldHVwIHZhbHVlczogc2V0dXAgdGltZXMKKyAgICBzcGVjcGFyYW0gICAgICAgIHRzZXR1cF9DU05lZ19TQ0sgICAgICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdHNldHVwX1NJX1NDS19ub3JtYWwgICAgICAgICAgPTE7CisgICAgc3BlY3BhcmFtICAgICAgICB0c2V0dXBfV1BOZWdfQ1NOZWcgICAgICAgICAgICA9MTsKKyAgICBzcGVjcGFyYW0gICAgICAgIHRzZXR1cF9IT0xETmVnX1NDSyAgICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdHNldHVwX1JTVE5lZ19DU05lZyAgICAgICAgICAgPTE7CisgICAgLy8gRERSIG9wZXJhdGlvbiB2YWx1ZXMKKyAgICBzcGVjcGFyYW0gICAgICAgIHRzZXR1cF9TSV9TQ0tfRERSICAgICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdHNldHVwX1NJX1NDS19ERFJfZmFzdCAgICAgICAgPTE7CisgICAgc3BlY3BhcmFtICAgICAgICB0c2V0dXBfQ1NOZWdfU0NLX0REUiAgICAgICAgICA9MTsKKworICAgIC8vdGhvbGQgdmFsdWVzOiBob2xkIHRpbWVzCisgICAgc3BlY3BhcmFtICAgICAgICB0aG9sZF9DU05lZ19TQ0sgICAgICAgICAgICAgICA9MTsKKyAgICBzcGVjcGFyYW0gICAgICAgIHRob2xkX1NJX1NDS19ub3JtYWwgICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdGhvbGRfU09fU0NLX25vcm1hbCAgICAgICAgICAgPTE7CisgICAgc3BlY3BhcmFtICAgICAgICB0aG9sZF9XUE5lZ19DU05lZyAgICAgICAgICAgICA9MTsKKyAgICBzcGVjcGFyYW0gICAgICAgIHRob2xkX0hPTEROZWdfU0NLICAgICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdGhvbGRfQ1NOZWdfUlNUTmVnICAgICAgICAgICAgPTE7CisgICAgLy8gRERSIG9wZXJhdGlvbiB2YWx1ZXMKKyAgICBzcGVjcGFyYW0gICAgICAgIHRob2xkX1NJX1NDS19ERFIgICAgICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdGhvbGRfU0lfU0NLX0REUl9mYXN0ICAgICAgICAgPTE7CisgICAgc3BlY3BhcmFtICAgICAgICB0aG9sZF9DU05lZ19TQ0tfRERSICAgICAgICAgICA9MTsKKworICAgIC8vIHRwdyB2YWx1ZXM6IHB1bHNlIHdpZHRoCisgICAgc3BlY3BhcmFtICAgICAgICB0cHdfU0NLX3NlcmlhbF9wb3NlZGdlICAgICAgICA9MTsKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwd19TQ0tfZHVhbF9wb3NlZGdlICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdHB3X1NDS19mYXN0X3Bvc2VkZ2UgICAgICAgICAgPTE7CisgICAgc3BlY3BhcmFtICAgICAgICB0cHdfU0NLX3F1YWRwZ19wb3NlZGdlICAgICAgICA9MTsKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwd19TQ0tfc2VyaWFsX25lZ2VkZ2UgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdHB3X1NDS19kdWFsX25lZ2VkZ2UgICAgICAgICAgPTE7CisgICAgc3BlY3BhcmFtICAgICAgICB0cHdfU0NLX2Zhc3RfbmVnZWRnZSAgICAgICAgICA9MTsKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwd19TQ0tfcXVhZHBnX25lZ2VkZ2UgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdHB3X0NTTmVnX3JlYWRfcG9zZWRnZSAgICAgICAgPTE7CisgICAgc3BlY3BhcmFtICAgICAgICB0cHdfQ1NOZWdfcGdlcnNfcG9zZWRnZSAgICAgICA9MTsKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwd19SU1ROZWdfbmVnZWRnZSAgICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdHB3X1JTVE5lZ19wb3NlZGdlICAgICAgICAgICAgPTE7CisgICAgLy8gRERSIG9wZXJhdGlvbiB2YWx1ZXMKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwd19TQ0tfRERSX3Bvc2VkZ2UgICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdHB3X1NDS19ERFJfbmVnZWRnZSAgICAgICAgICAgPTE7CisgICAgc3BlY3BhcmFtICAgICAgICB0cHdfU0NLX0REUjgwX3Bvc2VkZ2UgICAgICAgICA9MTsKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwd19TQ0tfRERSODBfbmVnZWRnZSAgICAgICAgID0xOworCisgICAgLy8gdHBlcmlvZCBtaW4gKGNhbGN1bGF0ZWQgYXMgMS9tYXggZnJlcSkKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwZXJpb2RfU0NLX3NlcmlhbF9yZCAgICAgICAgID0xOy8vIDUwIE1IegorICAgIHNwZWNwYXJhbSAgICAgICAgdHBlcmlvZF9TQ0tfZmFzdF9yZCAgICAgICAgICAgPTE7Ly8xMzMgTUh6CisgICAgc3BlY3BhcmFtICAgICAgICB0cGVyaW9kX1NDS19kdWFsX3JkICAgICAgICAgICA9MTsvLzEwNCBNSHoKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwZXJpb2RfU0NLX3F1YWRwZyAgICAgICAgICAgID0xOy8vIDgwIE1IegorICAgIC8vIEREUiBvcGVyYXRpb24gdmFsdWVzCisgICAgc3BlY3BhcmFtICAgICAgICB0cGVyaW9kX1NDS19ERFJfcmQgICAgICAgICAgICA9MTsvLyA2NiBNSHoKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwZXJpb2RfU0NLX0REUjgwX3JkICAgICAgICAgID0xOy8vIDgwIE1IegorCisgICAgYGlmZGVmIFNQRUVEU0lNCisgICAgICAgIC8vIFBhZ2UgUHJvZ3JhbSBPcGVyYXRpb24KKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX1BQXzI1NiAgICAgICAgICAgID0gNzVlNzsvL3RQUAorICAgICAgICAvLyBQYWdlIFByb2dyYW0gT3BlcmF0aW9uCisgICAgICAgIHNwZWNwYXJhbSAgICAgICAgdGRldmljZV9QUF81MTIgICAgICAgICAgICA9IDc1ZTc7Ly90UFAKKyAgICAgICAgLy8gVHlwaWNhbCBCeXRlIFByb2dyYW1taW5nIFRpbWUKKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX0JQICAgICAgICAgICAgICAgID0gNGU4Oy8vdEJQCisgICAgICAgIC8vIFNlY3RvciBFcmFzZSBPcGVyYXRpb24KKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX1NFNjQgICAgICAgICAgICAgID0gMTBlNzsgLy8gNjUwZTc7Ly90U0UgRGluZXNoIEEKKyAgICAgICAgLy8gU2VjdG9yIEVyYXNlIE9wZXJhdGlvbgorICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfU0UyNTYgICAgICAgICAgICAgPSAxMGU3OyAvLyAxODc1ZTc7Ly90U0UgRGluZXNoIEEKKyAgICAgICAgLy8gQnVsayBFcmFzZSBPcGVyYXRpb24KKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX0JFICAgICAgICAgICAgICAgID0gMzMwZTk7Ly90QkUKKyAgICAgICAgLy8gV1JSIEN5Y2xlIFRpbWUKKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX1dSUiAgICAgICAgICAgICAgID0gMTsgLy8gMmU5Oy8vdFcgRGluZXNoIEEKKyAgICAgICAgLy8gRXJhc2UgU3VzcGVuZC9FcmFzZSBSZXN1bWUgVGltZQorICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfRVJTU1VTUCAgICAgICAgICAgPSA0NWU2Oy8vdEVTTAorICAgICAgICAvLyBQcm9ncmFtIFN1c3BlbmQvUHJvZ3JhbSBSZXN1bWUgVGltZQorICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfUFJHU1VTUCAgICAgICAgICAgPSAxOyAvLyA0MGU2Oy8vIERpbmVzaCBBCisgICAgICAgIC8vIFZDQyAobWluKSB0byBDUyMgTG93CisgICAgICAgIHNwZWNwYXJhbSAgICAgICAgdGRldmljZV9QVSAgICAgICAgICAgICAgICA9IDE7IC8vIDNlODsvL3RQVSBEaW5lc2ggQQorICAgICAgICAvLyBQUEIgRXJhc2UgVGltZQorICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfUFBCRVJBU0UgICAgICAgICAgPSAxOyAvLyAxNWU5Oy8vIERpbmVzaCBBCisgICAgICAgIC8vIFBhc3N3b3JkIFVubG9jayBUaW1lCisgICAgICAgIHNwZWNwYXJhbSAgICAgICAgdGRldmljZV9QQVNTVUxDSyAgICAgICAgICA9IDFlNjsvLworICAgICAgICAvLyBQYXNzd29yZCBVbmxvY2sgdG8gUGFzc3dvcmQgVW5sb2NrIFRpbWUKKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX1BBU1NBQ0MgICAgICAgICAgID0gMTAwZTY7CisgICAgICAgIC8vIERhdGEgSW4gU2V0dXAgTWF4IHRpbWUKKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX1RTVSAgICAgICAgICAgICAgID0gMzAwZTM7CisgICAgYGVsc2UKKyAgICAgICAgLy8gUGFnZSBQcm9ncmFtIE9wZXJhdGlvbgorICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfUFBfMjU2ICAgICAgICAgICAgPSA3NWU3Oy8vdFBQCisgICAgICAgIC8vIFBhZ2UgUHJvZ3JhbSBPcGVyYXRpb24KKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX1BQXzUxMiAgICAgICAgICAgID0gNzVlNzsvL3RQUAorICAgICAgICAvLyBUeXBpY2FsIEJ5dGUgUHJvZ3JhbW1pbmcgVGltZQorICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfQlAgICAgICAgICAgICAgICAgPSA0ZTg7Ly90QlAKKyAgICAgICAgLy8gU2VjdG9yIEVyYXNlIE9wZXJhdGlvbgorICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfU0U2NCAgICAgICAgICAgICAgPSA2NTBlOTsvL3RTRQorICAgICAgICAvLyBTZWN0b3IgRXJhc2UgT3BlcmF0aW9uCisgICAgICAgIHNwZWNwYXJhbSAgICAgICAgdGRldmljZV9TRTI1NiAgICAgICAgICAgICA9IDE4NzVlOTsvL3RTRQorICAgICAgICAvLyBCdWxrIEVyYXNlIE9wZXJhdGlvbgorICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfQkUgICAgICAgICAgICAgICAgPSAzMzBlMTI7Ly90QkUKKyAgICAgICAgLy8gV1JSIEN5Y2xlIFRpbWUKKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX1dSUiAgICAgICAgICAgICAgID0gMmUxMTsvL3RXCisgICAgICAgIC8vIEVyYXNlIFN1c3BlbmQvRXJhc2UgUmVzdW1lIFRpbWUKKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX0VSU1NVU1AgICAgICAgICAgID0gNDVlNjsvL3RFU0wKKyAgICAgICAgLy8gUHJvZ3JhbSBTdXNwZW5kL1Byb2dyYW0gUmVzdW1lIFRpbWUKKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX1BSR1NVU1AgICAgICAgICAgID0gNDBlNjsvLworICAgICAgICAvLyBWQ0MgKG1pbikgdG8gQ1MjIExvdworICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfUFUgICAgICAgICAgICAgICAgPSAzZTg7Ly90UFUKKyAgICAgICAgLy8gUFBCIEVyYXNlIFRpbWUKKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX1BQQkVSQVNFICAgICAgICAgID0gMTVlOTsvLworICAgICAgICAvLyBQYXNzd29yZCBVbmxvY2sgVGltZQorICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfUEFTU1VMQ0sgICAgICAgICAgPSAxZTY7Ly8KKyAgICAgICAgLy8gUGFzc3dvcmQgVW5sb2NrIHRvIFBhc3N3b3JkIFVubG9jayBUaW1lCisgICAgICAgIHNwZWNwYXJhbSAgICAgICAgdGRldmljZV9QQVNTQUNDICAgICAgICAgICA9IDEwMGU2OworICAgICAgICAvLyBEYXRhIEluIFNldHVwIE1heCB0aW1lCisgICAgICAgIHNwZWNwYXJhbSAgICAgICAgdGRldmljZV9UU1UgICAgICAgICAgICAgICA9IDMwMGUzOworICAgIGBlbmRpZiAvLyBTUEVFRFNJTQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBJbnB1dCBQb3J0ICBEZWxheXMgIGRvbid0IHJlcXVpcmUgVmVyaWxvZyBkZXNjcmlwdGlvbgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gUGF0aCBkZWxheXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICBpZiAofmRkcikgICAgICAgICAgIChTQ0sgPT4gU08pID0gdHBkX1NDS19TT19ub3JtYWw7CisgIGlmIChkZHIgfHwgcmRfZmFzdCkgKFNDSyA9PiBTTykgPSB0cGRfU0NLX1NPX0REUjsKKworICBpZiAofmRkciAmJiBkdWFsKSAoU0NLID0+IFNJKSA9IHRwZF9TQ0tfU09fbm9ybWFsOworICBpZiAoIGRkciAmJiBkdWFsKSAoU0NLID0+IFNJKSA9IHRwZF9TQ0tfU09fRERSOworCisgIGlmICh+ZGRyICYmIFFVQUQpKFNDSyA9PiBIT0xETmVnKSA9IHRwZF9TQ0tfU09fbm9ybWFsOworICBpZiAoIGRkciAmJiBRVUFEKShTQ0sgPT4gSE9MRE5lZykgPSB0cGRfU0NLX1NPX0REUjsKKyAgaWYgKH5kZHIgJiYgUVVBRCkoU0NLID0+IFdQTmVnKSAgID0gdHBkX1NDS19TT19ub3JtYWw7CisgIGlmICggZGRyICYmIFFVQUQpKFNDSyA9PiBXUE5lZykgICA9IHRwZF9TQ0tfU09fRERSOworCisgIGlmIChDU05lZykgICAgICAgICAoQ1NOZWcgPT4gU08pID0gdHBkX0NTTmVnX1NPOworICBpZiAoQ1NOZWcgJiYgZHVhbCkgKENTTmVnID0+IFNJKSA9IHRwZF9DU05lZ19TTzsKKworICBpZiAoQ1NOZWcgJiYgUVVBRCkgKENTTmVnID0+IEhPTEROZWcpID0gdHBkX0NTTmVnX1NPOworICBpZiAoQ1NOZWcgJiYgUVVBRCkgKENTTmVnID0+IFdQTmVnKSAgID0gdHBkX0NTTmVnX1NPOworCisgIGlmICh+UVVBRCkgICAgICAgICAgKEhPTEROZWcgPT4gU08pID0gdHBkX0hPTEROZWdfU087CisgIGlmICh+UVVBRCAmJiBkdWFsKSAgKEhPTEROZWcgPT4gU0kpID0gdHBkX0hPTEROZWdfU087CisKKyAgIChSU1ROZWcgPT4gU08pID0gdHBkX1JTVE5lZ19TTzsKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFRpbWluZyBWaW9sYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgJHNldHVwICggQ1NOZWcgICAgICAgICAgLCBwb3NlZGdlIFNDSyAmJiYgc2RyX3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNldHVwX0NTTmVnX1NDSywgICAgICAgVmlvbCk7CisgICAgICAgICRzZXR1cCAoIENTTmVnICAgICAgICAgICwgcG9zZWRnZSBTQ0sgJiYmIGRkcl9yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzZXR1cF9DU05lZ19TQ0tfRERSLCAgIFZpb2wpOworICAgICAgICAkc2V0dXAgKCBTSSAgICAgICAgICAgICAsIHBvc2VkZ2UgU0NLICYmJiBkZWdfc2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNldHVwX1NJX1NDS19ub3JtYWwsICAgVmlvbCk7CisgICAgICAgICRzZXR1cCAoIFdQTmVnICAgICAgICAgICwgbmVnZWRnZSBDU05lZyAmJiYgd3JfcHJvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzZXR1cF9XUE5lZ19DU05lZywgICAgIFZpb2wpOworICAgICAgICAkc2V0dXAgKCBIT0xETmVnICAgICAgICAsIHBvc2VkZ2UgU0NLICYmJiBxdWFkX3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNldHVwX0hPTEROZWdfU0NLLCAgICAgVmlvbCk7CisgICAgICAgICRzZXR1cCAoIFNJICAgICAgICAgICAgICwgcG9zZWRnZSBTQ0sgJiYmIGRkcm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c2V0dXBfU0lfU0NLX0REUiwgICAgICBWaW9sKTsKKyAgICAgICAgJHNldHVwICggU0kgICAgICAgICAgICAgLCBuZWdlZGdlIFNDSyAmJiYgZGRybywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzZXR1cF9TSV9TQ0tfRERSLCAgICAgIFZpb2wpOworICAgICAgICAkc2V0dXAgKCBTSSAgICAgICAgICAgICAsIHBvc2VkZ2UgU0NLICYmJiBkZHJvODAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c2V0dXBfU0lfU0NLX0REUiwgICAgICBWaW9sKTsKKyAgICAgICAgJHNldHVwICggU0kgICAgICAgICAgICAgLCBuZWdlZGdlIFNDSyAmJiYgZGRybzgwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNldHVwX1NJX1NDS19ERFIsICAgICAgVmlvbCk7CisKKyAgICAgICAgJHNldHVwICggUlNUTmVnICAgICAgICAgLCBuZWdlZGdlIENTTmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNldHVwX1JTVE5lZ19DU05lZywgICAgVmlvbCk7CisKKyAgICAgICAgJGhvbGQgICggcG9zZWRnZSBTQ0sgJiYmIHNkcl9yZCAgICwgQ1NOZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aG9sZF9DU05lZ19TQ0ssICAgICAgICBWaW9sKTsKKyAgICAgICAgJGhvbGQgICggcG9zZWRnZSBTQ0sgJiYmIGRkcl9yZCAgICwgQ1NOZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aG9sZF9DU05lZ19TQ0tfRERSLCAgICBWaW9sKTsKKyAgICAgICAgJGhvbGQgICggcG9zZWRnZSBTQ0sgJiYmIGRlZ19zaW4gICAgICwgU0kgLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhvbGRfU0lfU0NLX25vcm1hbCwgICAgVmlvbCk7CisgICAgICAgICRob2xkICAoIG5lZ2VkZ2UgU0NLICYmJiBkZWhfc291dCAgICAsIFNPICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRob2xkX1NPX1NDS19ub3JtYWwsICAgIFZpb2wpOworICAgICAgICAkaG9sZCAgKCBuZWdlZGdlIFNDSyAmJiYgZGVoX2Rkcl9zb3V0ICAgICAgICAsIFNPICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRob2xkX1NPX1NDS19ub3JtYWwsICAgIFZpb2wpOworICAgICAgICAkaG9sZCAgKCBwb3NlZGdlIFNDSyAmJiYgZGVoX2Rkcl9zb3V0ICAgICAgICAsIFNPICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRob2xkX1NPX1NDS19ub3JtYWwsICAgIFZpb2wpOworICAgICAgICAkaG9sZCAgKCBwb3NlZGdlIENTTmVnICYmJiB3cl9wcm90ICwgV1BOZWcgLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhvbGRfV1BOZWdfQ1NOZWcsICAgICAgVmlvbCk7CisgICAgICAgICRob2xkICAoIHBvc2VkZ2UgU0NLICAmJiYgcXVhZF9yZCAgLCBIT0xETmVnICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRob2xkX0hPTEROZWdfU0NLLCAgICAgIFZpb2wpOworICAgICAgICAkaG9sZCAgKCBwb3NlZGdlIFNDSyAmJiYgZGRybyAgICAgLCBTSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRob2xkX1NJX1NDS19ERFIsICAgICAgIFZpb2wpOworICAgICAgICAkaG9sZCAgKCBuZWdlZGdlIFNDSyAmJiYgZGRybyAgICAgLCBTSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRob2xkX1NJX1NDS19ERFIsICAgICAgIFZpb2wpOworICAgICAgICAkaG9sZCAgKCBwb3NlZGdlIFNDSyAmJiYgZGRybzgwICAgICAsIFNJLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhvbGRfU0lfU0NLX0REUiwgICAgICAgVmlvbCk7CisgICAgICAgICRob2xkICAoIG5lZ2VkZ2UgU0NLICYmJiBkZHJvODAgICAgICwgU0ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aG9sZF9TSV9TQ0tfRERSLCAgICAgICBWaW9sKTsKKworICAgICAgICAkaG9sZCAgKCBuZWdlZGdlIFJTVE5lZyAgLCBDU05lZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRob2xkX0NTTmVnX1JTVE5lZywgICAgIFZpb2wpOworCisgICAgICAgICR3aWR0aCAoIHBvc2VkZ2UgU0NLICYmJiByZCAgICAgICAgLCB0cHdfU0NLX3NlcmlhbF9wb3NlZGdlKTsKKyAgICAgICAgJHdpZHRoICggbmVnZWRnZSBTQ0sgJiYmIHJkICAgICAgICAsIHRwd19TQ0tfc2VyaWFsX25lZ2VkZ2UpOworICAgICAgICAkd2lkdGggKCBwb3NlZGdlIFNDSyAmJiYgZHVhbF9yZCAgICwgdHB3X1NDS19kdWFsX3Bvc2VkZ2UpOworICAgICAgICAkd2lkdGggKCBuZWdlZGdlIFNDSyAmJiYgZHVhbF9yZCAgICwgdHB3X1NDS19kdWFsX25lZ2VkZ2UpOworICAgICAgICAkd2lkdGggKCBwb3NlZGdlIFNDSyAmJiYgZmFzdF9yZCAgICwgdHB3X1NDS19mYXN0X3Bvc2VkZ2UpOworICAgICAgICAkd2lkdGggKCBuZWdlZGdlIFNDSyAmJiYgZmFzdF9yZCAgICwgdHB3X1NDS19mYXN0X25lZ2VkZ2UpOworICAgICAgICAkd2lkdGggKCBwb3NlZGdlIFNDSyAmJiYgZGRyZCAgICAgICwgdHB3X1NDS19ERFJfcG9zZWRnZSk7CisgICAgICAgICR3aWR0aCAoIG5lZ2VkZ2UgU0NLICYmJiBkZHJkICAgICAgLCB0cHdfU0NLX0REUl9uZWdlZGdlKTsKKyAgICAgICAgJHdpZHRoICggcG9zZWRnZSBTQ0sgJiYmIGRkcmQ4MCAgICAsIHRwd19TQ0tfRERSODBfcG9zZWRnZSk7CisgICAgICAgICR3aWR0aCAoIG5lZ2VkZ2UgU0NLICYmJiBkZHJkODAgICAgLCB0cHdfU0NLX0REUjgwX25lZ2VkZ2UpOworICAgICAgICAkd2lkdGggKCBwb3NlZGdlIFNDSyAmJiYgcXVhZHBnICAgICwgdHB3X1NDS19xdWFkcGdfcG9zZWRnZSk7CisgICAgICAgICR3aWR0aCAoIG5lZ2VkZ2UgU0NLICYmJiBxdWFkcGcgICAgLCB0cHdfU0NLX3F1YWRwZ19uZWdlZGdlKTsKKworICAgICAgICAkd2lkdGggKCBwb3NlZGdlIENTTmVnICYmJiBSRF9FUVVfMSwgdHB3X0NTTmVnX3JlYWRfcG9zZWRnZSk7CisgICAgICAgICR3aWR0aCAoIHBvc2VkZ2UgQ1NOZWcgJiYmIFJEX0VRVV8wLCB0cHdfQ1NOZWdfcGdlcnNfcG9zZWRnZSk7CisgICAgICAgICR3aWR0aCAoIG5lZ2VkZ2UgUlNUTmVnICAgICAgICAgICAgLCB0cHdfUlNUTmVnX25lZ2VkZ2UpOworICAgICAgICAkd2lkdGggKCBwb3NlZGdlIFJTVE5lZyAgICAgICAgICAgICwgdHB3X1JTVE5lZ19wb3NlZGdlKTsKKworICAgICAgICAkcGVyaW9kICggcG9zZWRnZSBTQ0sgJiYmIHJkICAgICAgICwgdHBlcmlvZF9TQ0tfc2VyaWFsX3JkKTsKKyAgICAgICAgJHBlcmlvZCAoIHBvc2VkZ2UgU0NLICYmJiBmYXN0X3JkICAsIHRwZXJpb2RfU0NLX2Zhc3RfcmQpOworICAgICAgICAkcGVyaW9kICggcG9zZWRnZSBTQ0sgJiYmIGR1YWxfcmQgICwgdHBlcmlvZF9TQ0tfZHVhbF9yZCk7CisgICAgICAgICRwZXJpb2QgKCBwb3NlZGdlIFNDSyAmJiYgcXVhZHBnICAgLCB0cGVyaW9kX1NDS19xdWFkcGcpOworICAgICAgICAkcGVyaW9kICggcG9zZWRnZSBTQ0sgJiYmIGRkcmQgICAgICwgdHBlcmlvZF9TQ0tfRERSX3JkKTsKKyAgICAgICAgJHBlcmlvZCAoIHBvc2VkZ2UgU0NLICYmJiBkZHJkODAgICAsIHRwZXJpb2RfU0NLX0REUjgwX3JkKTsKKworZW5kc3BlY2lmeQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBNYWluIEJlaGF2aW9yIEJsb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBGU00gc3RhdGVzCisgcGFyYW1ldGVyIElETEUgICAgICAgICAgICA9IDUnZDA7CisgcGFyYW1ldGVyIFJFU0VUX1NUQVRFICAgICA9IDUnZDE7CisgcGFyYW1ldGVyIEFVVE9CT09UICAgICAgICA9IDUnZDI7CisgcGFyYW1ldGVyIFdSSVRFX1NSICAgICAgICA9IDUnZDM7CisgcGFyYW1ldGVyIFBBR0VfUEcgICAgICAgICA9IDUnZDQ7CisgcGFyYW1ldGVyIE9UUF9QRyAgICAgICAgICA9IDUnZDU7CisgcGFyYW1ldGVyIFBHX1NVU1AgICAgICAgICA9IDUnZDY7CisgcGFyYW1ldGVyIFNFQ1RPUl9FUlMgICAgICA9IDUnZDc7CisgcGFyYW1ldGVyIEJVTEtfRVJTICAgICAgICA9IDUnZDg7CisgcGFyYW1ldGVyIEVSU19TVVNQICAgICAgICA9IDUnZDk7CisgcGFyYW1ldGVyIEVSU19TVVNQX1BHICAgICA9IDUnZDEwOworIHBhcmFtZXRlciBFUlNfU1VTUF9QR19TVVNQPSA1J2QxMTsKKyBwYXJhbWV0ZXIgUEFTU19QRyAgICAgICAgID0gNSdkMTI7CisgcGFyYW1ldGVyIFBBU1NfVU5MT0NLICAgICA9IDUnZDEzOworIHBhcmFtZXRlciBQUEJfUEcgICAgICAgICAgPSA1J2QxNDsKKyBwYXJhbWV0ZXIgUFBCX0VSUyAgICAgICAgID0gNSdkMTU7CisgcGFyYW1ldGVyIEFVVE9CT09UX1BHICAgICA9IDUnZDE2OworIHBhcmFtZXRlciBBU1BfUEcgICAgICAgICAgPSA1J2QxNzsKKyBwYXJhbWV0ZXIgUExCX1BHICAgICAgICAgID0gNSdkMTg7CisgcGFyYW1ldGVyIERZQl9QRyAgICAgICAgICA9IDUnZDE5OworIHBhcmFtZXRlciBOVkRMUl9QRyAgICAgICAgPSA1J2QyMDsKKworIHJlZyBbNDowXSBjdXJyZW50X3N0YXRlOworIHJlZyBbNDowXSBuZXh0X3N0YXRlOworCisvLyBJbnN0cnVjdGlvbiB0eXBlCisgcGFyYW1ldGVyIE5PTkUgICAgICAgICAgICA9IDcnZDA7CisgcGFyYW1ldGVyIFdSUiAgICAgICAgICAgICA9IDcnZDE7CisgcGFyYW1ldGVyIFBQICAgICAgICAgICAgICA9IDcnZDI7CisgcGFyYW1ldGVyIFJFQUQgICAgICAgICAgICA9IDcnZDM7CisgcGFyYW1ldGVyIFdSREkgICAgICAgICAgICA9IDcnZDQ7CisgcGFyYW1ldGVyIFJEU1IgICAgICAgICAgICA9IDcnZDU7CisgcGFyYW1ldGVyIFdSRU4gICAgICAgICAgICA9IDcnZDY7CisgcGFyYW1ldGVyIFJEU1IyICAgICAgICAgICA9IDcnZDc7CisgcGFyYW1ldGVyIEZTVFJEICAgICAgICAgICA9IDcnZDg7CisgcGFyYW1ldGVyIEZTVFJENCAgICAgICAgICA9IDcnZDk7CisgcGFyYW1ldGVyIEREUkZSICAgICAgICAgICA9IDcnZDEwOworIHBhcmFtZXRlciBERFJGUjQgICAgICAgICAgPSA3J2QxMTsKKyBwYXJhbWV0ZXIgUFA0ICAgICAgICAgICAgID0gNydkMTI7CisgcGFyYW1ldGVyIFJENCAgICAgICAgICAgICA9IDcnZDEzOworIHBhcmFtZXRlciBBQlJEICAgICAgICAgICAgPSA3J2QxNDsKKyBwYXJhbWV0ZXIgQUJXUiAgICAgICAgICAgID0gNydkMTU7CisgcGFyYW1ldGVyIEJSUkQgICAgICAgICAgICA9IDcnZDE2OworIHBhcmFtZXRlciBCUldSICAgICAgICAgICAgPSA3J2QxNzsKKyBwYXJhbWV0ZXIgUDRFICAgICAgICAgICAgID0gNydkMTk7CisgcGFyYW1ldGVyIFA0RTQgICAgICAgICAgICA9IDcnZDIwOworIHBhcmFtZXRlciBBU1BSRCAgICAgICAgICAgPSA3J2QyMTsKKyBwYXJhbWV0ZXIgQVNQUCAgICAgICAgICAgID0gNydkMjI7CisgcGFyYW1ldGVyIENMU1IgICAgICAgICAgICA9IDcnZDIzOworIHBhcmFtZXRlciBRUFAgICAgICAgICAgICAgPSA3J2QyNDsKKyBwYXJhbWV0ZXIgUVBQNCAgICAgICAgICAgID0gNydkMjU7CisgcGFyYW1ldGVyIFJEQ1IgICAgICAgICAgICA9IDcnZDI2OworIHBhcmFtZXRlciBET1IgICAgICAgICAgICAgPSA3J2QyNzsKKyBwYXJhbWV0ZXIgRE9SNCAgICAgICAgICAgID0gNydkMjg7CisgcGFyYW1ldGVyIERMUFJEICAgICAgICAgICA9IDcnZDI5OworIHBhcmFtZXRlciBPVFBQICAgICAgICAgICAgPSA3J2QzMDsKKyBwYXJhbWV0ZXIgUE5WRExSICAgICAgICAgID0gNydkMzE7CisgcGFyYW1ldGVyIE9UUFIgICAgICAgICAgICA9IDcnZDMyOworIHBhcmFtZXRlciBXVkRMUiAgICAgICAgICAgPSA3J2QzMzsKKyBwYXJhbWV0ZXIgQkUgICAgICAgICAgICAgID0gNydkMzQ7CisgcGFyYW1ldGVyIFFPUiAgICAgICAgICAgICA9IDcnZDM1OworIHBhcmFtZXRlciBRT1I0ICAgICAgICAgICAgPSA3J2QzNjsKKyBwYXJhbWV0ZXIgRVJTUCAgICAgICAgICAgID0gNydkMzc7CisgcGFyYW1ldGVyIEVSUlMgICAgICAgICAgICA9IDcnZDM4OworIHBhcmFtZXRlciBQR1NQICAgICAgICAgICAgPSA3J2QzOTsKKyBwYXJhbWV0ZXIgUEdSUyAgICAgICAgICAgID0gNydkNDA7CisgcGFyYW1ldGVyIFJFTVMgICAgICAgICAgICA9IDcnZDQxOworIHBhcmFtZXRlciBSRElEICAgICAgICAgICAgPSA3J2Q0MjsKKyBwYXJhbWV0ZXIgTVBNICAgICAgICAgICAgID0gNydkNDM7CisgcGFyYW1ldGVyIFBMQldSICAgICAgICAgICA9IDcnZDQ0OworIHBhcmFtZXRlciBQTEJSRCAgICAgICAgICAgPSA3J2Q0NTsKKyBwYXJhbWV0ZXIgUkVTICAgICAgICAgICAgID0gNydkNDY7CisgcGFyYW1ldGVyIERJT1IgICAgICAgICAgICA9IDcnZDQ3OworIHBhcmFtZXRlciBESU9SNCAgICAgICAgICAgPSA3J2Q0ODsKKyBwYXJhbWV0ZXIgRERSRElPUiAgICAgICAgID0gNydkNDk7CisgcGFyYW1ldGVyIEREUkRJT1I0ICAgICAgICA9IDcnZDUwOworIHBhcmFtZXRlciBTRSAgICAgICAgICAgICAgPSA3J2Q1MTsKKyBwYXJhbWV0ZXIgU0U0ICAgICAgICAgICAgID0gNydkNTI7CisgcGFyYW1ldGVyIERZQlJEICAgICAgICAgICA9IDcnZDUzOworIHBhcmFtZXRlciBEWUJXUiAgICAgICAgICAgPSA3J2Q1NDsKKyBwYXJhbWV0ZXIgUFBCUkQgICAgICAgICAgID0gNydkNTU7CisgcGFyYW1ldGVyIFBQQlAgICAgICAgICAgICA9IDcnZDU2OworIHBhcmFtZXRlciBQUEJFUlMgICAgICAgICAgPSA3J2Q1NzsKKyBwYXJhbWV0ZXIgUEFTU1JEICAgICAgICAgID0gNydkNTg7CisgcGFyYW1ldGVyIFBBU1NQICAgICAgICAgICA9IDcnZDU5OworIHBhcmFtZXRlciBQQVNTVSAgICAgICAgICAgPSA3J2Q2MDsKKyBwYXJhbWV0ZXIgUUlPUiAgICAgICAgICAgID0gNydkNjE7CisgcGFyYW1ldGVyIFFJT1I0ICAgICAgICAgICA9IDcnZDYyOworIHBhcmFtZXRlciBERFJRSU9SICAgICAgICAgPSA3J2Q2MzsKKyBwYXJhbWV0ZXIgRERSUUlPUjQgICAgICAgID0gNydkNjQ7CisgcGFyYW1ldGVyIFJFU0VUICAgICAgICAgICA9IDcnZDY1OworIHBhcmFtZXRlciBNQlIgICAgICAgICAgICAgPSA3J2Q2NjsKKyBwYXJhbWV0ZXIgQlJBQyAgICAgICAgICAgID0gNydkNjc7CisgcGFyYW1ldGVyIEVDQ1JEICAgICAgICAgICA9IDcnZDY4OworCisgcmVnIFs2OjBdIEluc3RydWN0OworCisvL0J1cyBjeWNsZSBzdGF0ZQorIHBhcmFtZXRlciBTVEFORF9CWSAgICAgICAgPSAzJ2QwOworIHBhcmFtZXRlciBPUENPREVfQllURSAgICAgPSAzJ2QxOworIHBhcmFtZXRlciBBRERSRVNTX0JZVEVTICAgPSAzJ2QyOworIHBhcmFtZXRlciBEVU1NWV9CWVRFUyAgICAgPSAzJ2QzOworIHBhcmFtZXRlciBNT0RFX0JZVEUgICAgICAgPSAzJ2Q0OworIHBhcmFtZXRlciBEQVRBX0JZVEVTICAgICAgPSAzJ2Q1OworCisgcmVnIFsyOjBdIGJ1c19jeWNsZV9zdGF0ZTsKKworIHJlZyBkZXFfcGluOworICAgIGFsd2F5cyBAKFNPX2luLCBTT196KQorICAgIGJlZ2luCisgICAgICBpZiAoU09faW49PVNPX3opCisgICAgICAgIGRlcV9waW49MSdiMDsKKyAgICAgIGVsc2UKKyAgICAgICAgZGVxX3Bpbj0xJ2IxOworICAgIGVuZAorICAgIC8vIGNoZWNrIHdoZW4gZGF0YSBpcyBnZW5lcmF0ZWQgZnJvbSBtb2RlbCB0byBhdm9pZCBzZXR1cGhvbGQgY2hlY2sgaW4KKyAgICAvLyB0aGlzIG9jY2FzaW9uCisgICAgYXNzaWduIGRlZ19waW4gPSBkZXFfcGluOworICAgIGFzc2lnbiBkZWhfcGluID0gKGRlcV9waW4gPT0gMSdiMCkgJiYgKFNPX3ogIT0gMSdieik7CisgcmVnIGRlcV9zaW47CisgICAgYWx3YXlzIEAoU0lfaW4sIFNJT3V0X3opCisgICAgYmVnaW4KKyAgICAgIGlmIChTSV9pbj09U0lPdXRfeikKKyAgICAgICAgZGVxX3Npbj0xJ2IwOworICAgICAgZWxzZQorICAgICAgICBkZXFfc2luPTEnYjE7CisgICAgZW5kCisgICAgLy8gY2hlY2sgd2hlbiBkYXRhIGlzIGdlbmVyYXRlZCBmcm9tIG1vZGVsIHRvIGF2b2lkIHNldHVwaG9sZCBjaGVjayBpbgorICAgIC8vIHRoaXMgb2NjYXNpb24KKyAgICBhc3NpZ24gZGVnX3Npbj1kZXFfc2luCisgICAgICAgICAgICYmIChkZHIgPT0gMSdiMCkgJiYgKEluc3RydWN0ICE9PSBERFJGUikKKyAgICAgICAgICAgJiYgKEluc3RydWN0ICE9PSBERFJGUjQpICYmIChJbnN0cnVjdCAhPT0gRERSRElPUikKKyAgICAgICAgICAgJiYgKEluc3RydWN0ICE9PSBERFJESU9SNCkgJiYgKEluc3RydWN0ICE9PSBERFJRSU9SKQorICAgICAgICAgICAmJiAoSW5zdHJ1Y3QgIT09IEREUlFJT1I0KSAmJiAoU0lPdXRfeiAhPSAxJ2J6KTsKKyByZWcgZGVxX3NvdXQ7CisgICAgYWx3YXlzIEAoU09fb3V0LCBTSU91dF96KQorICAgIGJlZ2luCisgICAgICBpZiAoU09fb3V0PT1TSU91dF96KQorICAgICAgICBkZXFfc291dD0xJ2IwOworICAgICAgZWxzZQorICAgICAgICBkZXFfc291dD0xJ2IxOworICAgIGVuZAorICAgIC8vIGNoZWNrIHdoZW4gZGF0YSBpcyBnZW5lcmF0ZWQgZnJvbSBtb2RlbAorICAgIGFzc2lnbiBkZWhfc291dD0gKGRlcV9zb3V0ID09IDEnYjApCisgICAgICAgICAgICYmIChkZHIgPT0gMSdiMCkgJiYgKFNPdXRfeiAhPSAxJ2J6KTsKKyAgICBhc3NpZ24gZGVoX2Rkcl9zb3V0PSAoZGVxX3NvdXQgPT0gMSdiMCkKKyAgICAgICAgICAgJiYgKGRkciA9PSAxJ2IxKSAmJiAoU091dF96ICE9IDEnYnopOworCisgcmVnIGRlcV9ob2xkaW47CisgICAgYWx3YXlzIEAoSE9MRE5lZ19pcGQsIEhPTEROZWdPdXRfemQpCisgICAgYmVnaW4KKyAgICAgIGlmIChIT0xETmVnX2lwZD09SE9MRE5lZ091dF96ZCkKKyAgICAgICAgZGVxX2hvbGRpbj0xJ2IwOworICAgICAgZWxzZQorICAgICAgICBkZXFfaG9sZGluPTEnYjE7CisgICAgZW5kCisgICAgLy8gY2hlY2sgd2hlbiBkYXRhIGlzIGdlbmVyYXRlZCBmcm9tIG1vZGVsIHRvIGF2b2lkIHNldHVwaG9sZCBjaGVjayBpbgorICAgIC8vIHRoaXMgb2NjYXNpb24KKyAgICBhc3NpZ24gZGVnX2hvbGRpbj1kZXFfaG9sZGluOworICAgIGFzc2lnbiBkZWhfaG9sZGluPShkZXFfaG9sZGluID09IDEnYjApICYmIChIT0xETmVnT3V0X3pkICE9IDEnYnopOworCisgICAgLy9Qb3dlciBVcCB0aW1lOworICAgIGluaXRpYWwKKyAgICBiZWdpbgorICAgICAgICBQb3dlcmVkVXAgPSAxJ2IwOworCSRkaXNwbGF5KCIlMHQ9PlNUQVRVUzogU1BJIEZMQVNIIFBPV0VSIFVQIFdhaXQgVGltZTogJTBkOiUwZCIsJHRpbWUsdGRldmljZV9QVSx0ZGV2aWNlX1BSR1NVU1ApOworICAgICAgICAjdGRldmljZV9QVSBQb3dlcmVkVXAgPSAxJ2IxOworCSRkaXNwbGF5KCIlMHQ9PlNUQVRVUzogU1BJIEZMQVNIIFBPV0VSIFVQIiwkdGltZSwpOworICAgIGVuZAorCisgICAgaW5pdGlhbAorICAgIGJlZ2luIDogSW5pdAorICAgICAgICB3cml0ZSAgICAgICA9IDEnYjA7CisgICAgICAgIGNmZ193cml0ZSAgID0gMSdiMDsKKyAgICAgICAgcmVhZF9vdXQgICAgPSAxJ2IwOworICAgICAgICBBZGRyZXNzICAgICA9IDA7CisgICAgICAgIGNoYW5nZV9hZGRyID0gMSdiMDsKKyAgICAgICAgY250ICAgICAgICAgPSAwOworICAgICAgICBSU1QgICAgICAgICA9IDEnYjA7CisgICAgICAgIFJTVF9pbiAgICAgID0gMSdiMDsKKyAgICAgICAgUlNUX291dCAgICAgPSAxJ2IxOworICAgICAgICBQRE9ORSAgICAgICA9IDEnYjE7CisgICAgICAgIFBTVEFSVCAgICAgID0gMSdiMDsKKyAgICAgICAgUEdTVVNQICAgICAgPSAxJ2IwOworICAgICAgICBQR1JFUyAgICAgICA9IDEnYjA7CisgICAgICAgIFBSR1NVU1BfaW4gID0gMSdiMDsKKyAgICAgICAgRVJTU1VTUF9pbiAgPSAxJ2IwOworICAgICAgICBSRVNfVE9fU1VTUF9NSU5fVElNRSAgPSAxJ2IwOworICAgICAgICBSRVNfVE9fU1VTUF9UWVBfVElNRSAgPSAxJ2IwOworCisgICAgICAgIEVET05FICAgICAgID0gMSdiMTsKKyAgICAgICAgRVNUQVJUICAgICAgPSAxJ2IwOworICAgICAgICBFU1VTUCAgICAgICA9IDEnYjA7CisgICAgICAgIEVSRVMgICAgICAgID0gMSdiMDsKKworICAgICAgICBXRE9ORSAgICAgICA9IDEnYjE7CisgICAgICAgIFdTVEFSVCAgICAgID0gMSdiMDsKKworICAgICAgICBSZXNldGVkICAgICA9IDEnYjA7CisKKyAgICAgICAgSW5zdHJ1Y3QgICAgICAgID0gTk9ORTsKKyAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gU1RBTkRfQlk7CisgICAgICAgIGN1cnJlbnRfc3RhdGUgICA9IFJFU0VUX1NUQVRFOworICAgICAgICBuZXh0X3N0YXRlICAgICAgPSBSRVNFVF9TVEFURTsKKyAgICBlbmQKKworICAgIC8vIGluaXRpYWxpemUgbWVtb3J5IGFuZCBsb2FkIHByZWxvYWQgZmlsZXMgaWYgYW55CisgICAgaW5pdGlhbAorICAgIGJlZ2luOiBJbml0TWVtb3J5CisgICAgICAgIGludGVnZXIgaTsKKworICAgICAgICBmb3IgKGk9MDtpPD1BZGRyUkFOR0U7aT1pKzEpCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBNZW1baV0gPSBNYXhEYXRhOworICAgICAgICBlbmQKKworICAgICAgICBpZiAoKFVzZXJQcmVsb2FkKSAmJiAhKG1lbV9maWxlX25hbWUgPT0gIm5vbmUiKSkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgLy8gTWVtb3J5IFByZWxvYWQKKyAgICAgICAgICAgLy9zMjVmbDI1NnMubWVtLCBtZW1vcnkgcHJlbG9hZCBmaWxlCisgICAgICAgICAgIC8vICBAYWFhYWFhIC0gPGFhYWFhYT4gc3RhbmRzIGZvciBhZGRyZXNzCisgICAgICAgICAgIC8vICBkZCAgICAgIC0gPGRkPiBpcyBieXRlIHRvIGJlIHdyaXR0ZW4gYXQgTWVtKGFhYWFhYSsrKQorICAgICAgICAgICAvLyAoYWFhYWFhIGlzIGluY3JlbWVudGVkIGF0IGV2ZXJ5IGxvYWQpCisJICAgJGRpc3BsYXkoIiVtOiBMb2FkaW5nIE1lbWZpbGUgOiAlcyIsbWVtX2ZpbGVfbmFtZSk7CisgICAgICAgICAgICRyZWFkbWVtaChtZW1fZmlsZV9uYW1lLE1lbSk7CisgICAgICAgIGVuZAorCisgICAgICAgIGZvciAoaT1PVFBMb0FkZHI7aTw9T1RQSGlBZGRyO2k9aSsxKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgT1RQTWVtW2ldID0gTWF4RGF0YTsKKyAgICAgICAgZW5kCisKKyAgICAgICAgaWYgKFVzZXJQcmVsb2FkICYmICEob3RwX2ZpbGVfbmFtZSA9PSAibm9uZSIpKQorICAgICAgICBiZWdpbgorICAgICAgICAvL3MyNWZsMjU2c19vdHAgbWVtb3J5IGZpbGUKKyAgICAgICAgLy8gICAvICAgICAgIC0gY29tbWVudAorICAgICAgICAvLyAgIEBhYWFhYWEgICAgIC0gPGFhYWFhYT4gc3RhbmRzIGZvciBhZGRyZXNzIHdpdGhpbiBsYXN0IGRlZmluZWQKKyAgICAgICAgLy8gICBzZWN0b3IKKyAgICAgICAgLy8gICBkZCAgICAgIC0gPGRkPiBpcyBieXRlIHRvIGJlIHdyaXR0ZW4gYXQgT1RQTWVtKGFhYSsrKQorICAgICAgICAvLyAgIChhYSBpcyBpbmNyZW1lbnRlZCBhdCBldmVyeSBsb2FkKQorICAgICAgICAvLyAgIG9ubHkgZmlyc3QgMS00IGNvbHVtbnMgYXJlIGxvYWRlZC4gTk8gZW1wdHkgbGluZXMgISEhISEhISEhISEhISEhIQorICAgICAgICAgICAkcmVhZG1lbWgob3RwX2ZpbGVfbmFtZSxPVFBNZW0pOworICAgICAgICBlbmQKKworICAgICAgICBMT0NLX0JZVEUxWzc6MF0gPSBPVFBNZW1bMTZdOworICAgICAgICBMT0NLX0JZVEUyWzc6MF0gPSBPVFBNZW1bMTddOworICAgICAgICBMT0NLX0JZVEUzWzc6MF0gPSBPVFBNZW1bMThdOworICAgICAgICBMT0NLX0JZVEU0Wzc6MF0gPSBPVFBNZW1bMTldOworICAgIGVuZAorCisgICAgLy8gaW5pdGlhbGl6ZSBtZW1vcnkgYW5kIGxvYWQgcHJlbG9hZCBmaWxlcyBpZiBhbnkKKyAgICBpbml0aWFsCisgICAgYmVnaW46IEluaXRUaW1pbmdNb2RlbAorICAgIGludGVnZXIgaTsKKyAgICBpbnRlZ2VyIGo7CisgICAgICAgIC8vVU5JRk9STSBPUiBIWUJSSUQgYXJjaCBtb2RlbCBpcyB1c2VkCisgICAgICAgIC8vYXNzdW1wdGlvbnM6CisgICAgICAgIC8vMS4gVGltaW5nTW9kZWwgaGFzIGZvcm1hdCBhcyBTMjVGTDEyOFNYWFhYWFhYWF9YX1hYcEYKKyAgICAgICAgLy9pdCBpcyBpbXBvcnRhbnQgdGhhdCAxNi10aCBjaGFyYWN0ZXIgZnJvbSBmaXJzdCBvbmUgaXMgIjAiIG9yICIxIgorICAgICAgICAvLzIuIFRpbWluZ01vZGVsIGRvZXMgbm90IGhhdmUgbW9yZSB0aGVuIDI0IGNoYXJhY3RlcnMKKyAgICAgICAgdG1wX3RpbWluZyA9IFRpbWluZ01vZGVsOy8vY29weSBvZiBUaW1pbmdNb2RlbAorCisgICAgICAgIGkgPSAyMzsKKyAgICAgICAgd2hpbGUgKChpID49IDApICYmIChmb3VuZCAhPSAxJ2IxKSkvL3NlYXJjaCBmb3IgZmlyc3Qgbm9uIG51bGwgY2hhcmFjdGVyCisgICAgICAgIGJlZ2luICAgICAgICAvL2kga2VlcHMgcG9zaXRpb24gb2YgZmlyc3Qgbm9uIG51bGwgY2hhcmFjdGVyCisgICAgICAgICAgICBqID0gNzsKKyAgICAgICAgICAgIHdoaWxlICgoaiA+PSAwKSAmJiAoZm91bmQgIT0gMSdiMSkpCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIGlmICh0bXBfdGltaW5nW2kqOCtqXSAhPSAxJ2QwKQorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IDEnYjE7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBqID0gai0xOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBpID0gaSAtIDE7CisgICAgICAgIGVuZAorICAgICAgICBpID0gaSArMTsKKyAgICAgICAgaWYgKGZvdW5kKS8vaWYgbm9uIG51bGwgY2hhcmFjdGVyIGlzIGZvdW5kCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBmb3IgKGo9MDtqPD03O2o9aisxKQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIC8vRUhQTEMvSFBMQyBjaGFyYWN0ZXIgaXMgMTUKKyAgICAgICAgICAgIHRtcF9jaGFyMVtqXSA9IFRpbWluZ01vZGVsWyhpLTE0KSo4K2pdOworICAgICAgICAgICAgLy8yNTZCLzUxMkIgUGFnZSBjaGFyYWN0ZXIgaXMgMTYKKyAgICAgICAgICAgIHRtcF9jaGFyMltqXSA9IFRpbWluZ01vZGVsWyhpLTE1KSo4K2pdOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICBpZiAodG1wX2NoYXIxID09ICIwIiB8fCB0bXBfY2hhcjEgPT0gIjIiIHx8IHRtcF9jaGFyMSA9PSAiMyIgfHwKKyAgICAgICAgICAgIHRtcF9jaGFyMSA9PSAiUiIgfHwgdG1wX2NoYXIxID09ICJBIiB8fCB0bXBfY2hhcjEgPT0gIkIiIHx8CisgICAgICAgICAgICB0bXBfY2hhcjEgPT0gIkMiIHx8IHRtcF9jaGFyMSA9PSAiRCIgfHwgdG1wX2NoYXIxID09ICJZIiB8fAorICAgICAgICAgICAgdG1wX2NoYXIxID09ICJaIiB8fCB0bXBfY2hhcjEgPT0gIlMiIHx8IHRtcF9jaGFyMSA9PSAiVCIgfHwKKyAgICAgICAgICAgIHRtcF9jaGFyMSA9PSAiSyIgfHwgdG1wX2NoYXIxID09ICJMIikKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIEVIUCA9IDE7CisgICAgICAgICAgICBpZih0bXBfY2hhcjEgPT0gIloiIHx8IHRtcF9jaGFyMSA9PSAiUyIgfHwgdG1wX2NoYXIxID09ICJUIiB8fAorICAgICAgICAgICAgICAgdG1wX2NoYXIxID09ICJLIiB8fCB0bXBfY2hhcjEgPT0gIkwiIHx8IHRtcF9jaGFyMSA9PSAiWSIpCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIFJkUHN3ZFByb3RFbmFibGUgPSAxOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICBlbHNlIGlmICh0bXBfY2hhcjEgPT0gIjQiIHx8IHRtcF9jaGFyMSA9PSAiNiIgfHwgdG1wX2NoYXIxID09ICI3IiB8fAorICAgICAgICAgICAgICAgICB0bXBfY2hhcjEgPT0gIjgiIHx8IHRtcF9jaGFyMSA9PSAiOSIgfHwgdG1wX2NoYXIxID09ICJRIikKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIEVIUCA9IDA7CisgICAgICAgIGVuZAorCisgICAgICAgIGlmICh0bXBfY2hhcjEgPT0gIjAiIHx8IHRtcF9jaGFyMSA9PSAiMiIgfHwgdG1wX2NoYXIxID09ICIzIiB8fAorICAgICAgICAgICAgdG1wX2NoYXIxID09ICJSIiB8fCB0bXBfY2hhcjEgPT0gIkEiIHx8IHRtcF9jaGFyMSA9PSAiQiIgfHwKKyAgICAgICAgICAgIHRtcF9jaGFyMSA9PSAiQyIgfHwgdG1wX2NoYXIxID09ICJEIiB8fCB0bXBfY2hhcjEgPT0gIjQiIHx8CisgICAgICAgICAgICB0bXBfY2hhcjEgPT0gIjYiIHx8IHRtcF9jaGFyMSA9PSAiNyIgfHwgdG1wX2NoYXIxID09ICI4IiB8fAorICAgICAgICAgICAgdG1wX2NoYXIxID09ICI5IiB8fCB0bXBfY2hhcjEgPT0gIlEiKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgQVNQX3JlZyAgICA9IDE2J2hGRTdGOworICAgICAgICAgICAgQVNQX3JlZ19pbiA9IDE2J2hGRTdGOworICAgICAgICBlbmQKKyAgICAgICAgZWxzZSBpZiAodG1wX2NoYXIxID09ICJZIiB8fCB0bXBfY2hhcjEgPT0gIloiIHx8IHRtcF9jaGFyMSA9PSAiUyIgfHwKKyAgICAgICAgICAgICAgICAgdG1wX2NoYXIxID09ICJUIiB8fCB0bXBfY2hhcjEgPT0gIksiIHx8IHRtcF9jaGFyMSA9PSAiTCIpCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBBU1BfcmVnICAgID0gMTYnaEZFNEY7CisgICAgICAgICAgICBBU1BfcmVnX2luID0gMTYnaEZFNEY7CisgICAgICAgIGVuZAorCisgICAgICAgIGlmICh0bXBfY2hhcjIgPT0gIjAiKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgUGFnZVNpemUgPSAyNTU7CisgICAgICAgICAgICBQYWdlTnVtICA9IFBhZ2VOdW02NDsKKyAgICAgICAgICAgIFNlY1NpemUgID0gU2VjU2l6ZTY0OworICAgICAgICBlbmQKKyAgICAgICAgZWxzZSBpZiAodG1wX2NoYXIyID09ICIxIikKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIFBhZ2VTaXplID0gNTExOworICAgICAgICAgICAgUGFnZU51bSAgPSBQYWdlTnVtMjU2OworICAgICAgICAgICAgU2VjU2l6ZSAgPSBTZWNTaXplMjU2OworICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIC8vQ0ZJCisgICAgaW5pdGlhbAorICAgIGJlZ2luOiBJbml0Q0ZJCisgICAgaW50ZWdlciBpOworICAgIGludGVnZXIgajsKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgLy8gSUQtQ0ZJIGFycmF5IGRhdGEKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgLy8gTWFudWZhY3R1cmVyIGFuZCBEZXZpY2UgSUQKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDAwXSA9IEplZGVjX0lEOworICAgICAgICBDRklfYXJyYXlbOCdoMDFdID0gRGV2aWNlSUQxOworICAgICAgICBDRklfYXJyYXlbOCdoMDJdID0gRGV2aWNlSUQyOworICAgICAgICBDRklfYXJyYXlbOCdoMDNdID0gOCdoMDA7CisgICAgICAgIGlmICh0bXBfY2hhcjIgPT0gIjAiKQorICAgICAgICAvLyBVbmlmb3JtIDY0a0Igc2VjdG9ycworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDA0XSA9IEV4dGVuZGVkSUQ2NDsKKyAgICAgICAgZWxzZSBpZiAodG1wX2NoYXIyID09ICIxIikKKyAgICAgICAgLy8gVW5pZm9ybSAyNTZrQiBzZWN0b3JzCisgICAgICAgICAgICBDRklfYXJyYXlbOCdoMDRdID0gRXh0ZW5kZWRJRDI1NjsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDA1XSA9IDgnaDgwOworICAgICAgICBDRklfYXJyYXlbOCdoMDZdID0gOCdoMDA7CisgICAgICAgIENGSV9hcnJheVs4J2gwN10gPSA4J2gwMDsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDA4XSA9IDgnaDAwOworICAgICAgICBDRklfYXJyYXlbOCdoMDldID0gOCdoMDA7CisgICAgICAgIENGSV9hcnJheVs4J2gwQV0gPSA4J2gwMDsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDBCXSA9IDgnaDAwOworICAgICAgICBDRklfYXJyYXlbOCdoMENdID0gOCdoMDA7CisgICAgICAgIENGSV9hcnJheVs4J2gwRF0gPSA4J2gwMDsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDBFXSA9IDgnaDAwOworICAgICAgICBDRklfYXJyYXlbOCdoMEZdID0gOCdoMDA7CisgICAgICAgIC8vIENGSSBRdWVyeSBJZGVudGlmaWNhdGlvbiBTdHJpbmcKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDEwXSA9IDgnaDUxOworICAgICAgICBDRklfYXJyYXlbOCdoMTFdID0gOCdoNTI7CisgICAgICAgIENGSV9hcnJheVs4J2gxMl0gPSA4J2g1OTsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDEzXSA9IDgnaDAyOworICAgICAgICBDRklfYXJyYXlbOCdoMTRdID0gOCdoMDA7CisgICAgICAgIENGSV9hcnJheVs4J2gxNV0gPSA4J2g0MDsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDE2XSA9IDgnaDAwOworICAgICAgICBDRklfYXJyYXlbOCdoMTddID0gOCdoNTM7CisgICAgICAgIENGSV9hcnJheVs4J2gxOF0gPSA4J2g0NjsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDE5XSA9IDgnaDUxOworICAgICAgICBDRklfYXJyYXlbOCdoMUFdID0gOCdoMDA7CisgICAgICAgIC8vQ0ZJIHN5c3RlbSBpbnRlcmZhY2Ugc3RyaW5nCisgICAgICAgIENGSV9hcnJheVs4J2gxQl0gPSA4J2gyNzsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDFDXSA9IDgnaDM2OworICAgICAgICBDRklfYXJyYXlbOCdoMURdID0gOCdoMDA7CisgICAgICAgIENGSV9hcnJheVs4J2gxRV0gPSA4J2gwMDsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDFGXSA9IDgnaDA2OworICAgICAgICBpZiAodG1wX2NoYXIyID09ICIwIikKKyAgICAgICAgYmVnaW4KKyAgICAgICAgLy8gNjRrQiBzZWN0b3IgYW5kIDI1NkIgcGFnZQorICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDIwXSA9IDgnaDA4OworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDIxXSA9IDgnaDA4OworICAgICAgICBlbmQKKyAgICAgICAgZWxzZSBpZiAodG1wX2NoYXIyID09ICIxIikKKyAgICAgICAgYmVnaW4KKyAgICAgICAgLy8gMjU2a0Igc2VjdG9yIGFuZCA1MTJCIHBhZ2UKKyAgICAgICAgICAgIENGSV9hcnJheVs4J2gyMF0gPSA4J2gwOTsKKyAgICAgICAgICAgIENGSV9hcnJheVs4J2gyMV0gPSA4J2gwOTsKKyAgICAgICAgZW5kCisgICAgICAgIENGSV9hcnJheVs4J2gyMl0gPSA4J2gxMDsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDIzXSA9IDgnaDAyOworICAgICAgICBDRklfYXJyYXlbOCdoMjRdID0gOCdoMDI7CisgICAgICAgIENGSV9hcnJheVs4J2gyNV0gPSA4J2gwMzsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDI2XSA9IDgnaDAzOworICAgICAgICAvLyBEZXZpY2UgR2VvbWV0cnkgRGVmaW5pdGlvbihVbmlmb3JtIFNlY3RvciBEZXZpY2VzKQorICAgICAgICBDRklfYXJyYXlbOCdoMjddID0gOCdoMTk7CisgICAgICAgIENGSV9hcnJheVs4J2gyOF0gPSA4J2gwMjsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDI5XSA9IDgnaDAxOworCisgICAgICAgIGlmICh0bXBfY2hhcjIgPT0gIjAiKQorICAgICAgICAvLyA2NGtCIHNlY3RvcnMKKyAgICAgICAgICAgIENGSV9hcnJheVs4J2gyQV0gPSA4J2gwODsKKyAgICAgICAgZWxzZSBpZiAodG1wX2NoYXIyID09ICIxIikKKyAgICAgICAgICAgIENGSV9hcnJheVs4J2gyQV0gPSA4J2gwOTsKKworICAgICAgICBDRklfYXJyYXlbOCdoMkJdID0gOCdoMDA7CisgICAgICAgIGlmICh0bXBfY2hhcjIgPT0gIjEiKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDJDXSA9IDgnaDAxOworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDJEXSA9IDgnaDdGOworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDJFXSA9IDgnaDAwOworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDJGXSA9IDgnaDAwOworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDMwXSA9IDgnaDA0OworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDMxXSA9IDgnaEZGOworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDMyXSA9IDgnaEZGOworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDMzXSA9IDgnaEZGOworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDM0XSA9IDgnaEZGOworICAgICAgICBlbmQKKyAgICAgICAgZWxzZQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDJDXSA9IDgnaDAyOworICAgICAgICAgICAgaWYgKFRCUEFSTSkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAvLyA0S0IgcGh5c2ljYWwgc2VjdG9ycyBhdCB0b3AKKyAgICAgICAgICAgICAgICBDRklfYXJyYXlbOCdoMkRdID0gOCdoRkQ7CisgICAgICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDJFXSA9IDgnaDAwOworICAgICAgICAgICAgICAgIENGSV9hcnJheVs4J2gyRl0gPSA4J2gwMDsKKyAgICAgICAgICAgICAgICBDRklfYXJyYXlbOCdoMzBdID0gOCdoMDE7CisgICAgICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDMxXSA9IDgnaDFGOworICAgICAgICAgICAgICAgIENGSV9hcnJheVs4J2gzMl0gPSA4J2gwMTsKKyAgICAgICAgICAgICAgICBDRklfYXJyYXlbOCdoMzNdID0gOCdoMTA7CisgICAgICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDM0XSA9IDgnaDAwOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgLy8gNEtCIHBoeXNpY2FsIHNlY3RvcnMgYXQgYm90dG9tCisgICAgICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDJEXSA9IDgnaDFGOworICAgICAgICAgICAgICAgIENGSV9hcnJheVs4J2gyRV0gPSA4J2gwMDsKKyAgICAgICAgICAgICAgICBDRklfYXJyYXlbOCdoMkZdID0gOCdoMTA7CisgICAgICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDMwXSA9IDgnaDAwOworICAgICAgICAgICAgICAgIENGSV9hcnJheVs4J2gzMV0gPSA4J2hGRDsKKyAgICAgICAgICAgICAgICBDRklfYXJyYXlbOCdoMzJdID0gOCdoMDE7CisgICAgICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDMzXSA9IDgnaDAwOworICAgICAgICAgICAgICAgIENGSV9hcnJheVs4J2gzNF0gPSA4J2gwMTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDM1XSA9IDgnaEZGOworICAgICAgICBDRklfYXJyYXlbOCdoMzZdID0gOCdoRkY7CisgICAgICAgIENGSV9hcnJheVs4J2gzN10gPSA4J2hGRjsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDM4XSA9IDgnaEZGOworICAgICAgICBDRklfYXJyYXlbOCdoMzldID0gOCdoRkY7CisgICAgICAgIENGSV9hcnJheVs4J2gzQV0gPSA4J2hGRjsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDNCXSA9IDgnaEZGOworICAgICAgICBDRklfYXJyYXlbOCdoM0NdID0gOCdoRkY7CisgICAgICAgIENGSV9hcnJheVs4J2gzRF0gPSA4J2hGRjsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDNFXSA9IDgnaEZGOworICAgICAgICBDRklfYXJyYXlbOCdoM0ZdID0gOCdoRkY7CisgICAgICAgIC8vIENGSSBQcmltYXJ5IFZlbmRvci1TcGVjaWZpYyBFeHRlbmRlZCBRdWVyeQorICAgICAgICBDRklfYXJyYXlbOCdoNDBdID0gOCdoNTA7CisgICAgICAgIENGSV9hcnJheVs4J2g0MV0gPSA4J2g1MjsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDQyXSA9IDgnaDQ5OworICAgICAgICBDRklfYXJyYXlbOCdoNDNdID0gOCdoMzE7CisgICAgICAgIENGSV9hcnJheVs4J2g0NF0gPSA4J2gzMzsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDQ1XSA9IDgnaDIxOworICAgICAgICBDRklfYXJyYXlbOCdoNDZdID0gOCdoMDI7CisgICAgICAgIENGSV9hcnJheVs4J2g0N10gPSA4J2gwMTsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDQ4XSA9IDgnaDAwOworICAgICAgICBDRklfYXJyYXlbOCdoNDldID0gOCdoMDg7CisgICAgICAgIENGSV9hcnJheVs4J2g0QV0gPSA4J2gwMDsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDRCXSA9IDgnaDAxOworICAgICAgICBDRklfYXJyYXlbOCdoNENdID0gOCdoMDA7CisgICAgICAgIENGSV9hcnJheVs4J2g0RF0gPSA4J2gwMDsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDRFXSA9IDgnaDAwOworICAgICAgICBDRklfYXJyYXlbOCdoNEZdID0gOCdoMDc7CisgICAgICAgIENGSV9hcnJheVs4J2g1MF0gPSA4J2gwMTsKKworICAgICAgICBiZWdpbgorICAgICAgICAgICAgZm9yKGk9ODA7aT49MDtpPWktMSkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgQ0ZJX3RtcCA9IENGSV9hcnJheVs4J2gwMC1pKzgwXTsKKyAgICAgICAgICAgICAgICBmb3Ioaj03O2o+PTA7aj1qLTEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgQ0ZJX2FycmF5X3RtcFs4Kmkral0gPSBDRklfdG1wW2pdOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorCisgICAgZW5kCisKKyAgICBhbHdheXMgQChuZXh0X3N0YXRlX2V2ZW50IG9yIFBvd2VyZWRVcCBvciBSU1Qgb3IgUlNUX291dCBvcgorICAgICAgICAgICAgUlNUTmVnX2luIG9yIHJpc2luZ19lZGdlX1JTVE5lZyBvciBmYWxsaW5nX2VkZ2VfUlNUKQorICAgIGJlZ2luOiBTdGF0ZVRyYW5zaXRpb24KKyAgICAgICAgaWYgKFBvd2VyZWRVcCkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGlmICgoUlNUTmVnX2luID09IDEnYjEpICYmIChSU1Rfb3V0ID09IDEnYjEpKQorICAgICAgICAgICAgICAgIGN1cnJlbnRfc3RhdGUgPSAjKDEwMDApIG5leHRfc3RhdGU7CisgICAgICAgICAgICBlbHNlIGlmICgoflJTVE5lZ19pbiB8fCByaXNpbmdfZWRnZV9SU1ROZWcpICYmIGZhbGxpbmdfZWRnZV9SU1QpCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgLy8gbm8gc3RhdGUgdHJhbnNpdGlvbiB3aGlsZSBSRVNFVCMgbG93CisgICAgICAgICAgICAgICAgY3VycmVudF9zdGF0ZSA9IFJFU0VUX1NUQVRFOworICAgICAgICAgICAgICAgIFJTVF9pbiA9IDEnYjE7CisgICAgICAgICAgICAgICAgIzEwMDAgUlNUX2luID0gMSdiMDsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHBvc2VkZ2UgUlNUX2luKQorICAgIGJlZ2luOlRocmVzZXQKKyAgICAgICAgUlNUX291dCA9IDEnYjA7CisgICAgICAgICMoMzUwMDAwMDAtMjAwMDAwKSBSU1Rfb3V0ID0gMSdiMTsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKG5lZ2VkZ2UgQ1NOZWdfaXBkKQorICAgIGJlZ2luOkNoZWNrQ0VPblBvd2VyVVAKKyAgICAgICAgaWYgKH5Qb3dlcmVkVXApCisgICAgICAgICAgICAkZGlzcGxheSAoIiUwdD0+IERldmljZSBpcyBzZWxlY3RlZCBkdXJpbmcgUG93ZXIgVXAiLCR0aW1lKTsKKyAgICBlbmQKKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vLy8gSW50ZXJuYWwgRGVsYXlzCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBhbHdheXMgQChwb3NlZGdlIFBSR1NVU1BfaW4pCisgICAgYmVnaW46UFJHU3VzcGVuZAorICAgICAgICBQUkdTVVNQX291dCA9IDEnYjA7CisgICAgICAgICN0ZGV2aWNlX1BSR1NVU1AgUFJHU1VTUF9vdXQgPSAxJ2IxOworICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSBQUEJFUkFTRV9pbikKKyAgICBiZWdpbjpQUEJFcnMKKyAgICAgICAgUFBCRVJBU0Vfb3V0ID0gMSdiMDsKKyAgICAgICAgI3RkZXZpY2VfUFBCRVJBU0UgUFBCRVJBU0Vfb3V0ID0gMSdiMTsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHBvc2VkZ2UgRVJTU1VTUF9pbikKKyAgICBiZWdpbjpFUlNTdXNwZW5kCisgICAgICAgIEVSU1NVU1Bfb3V0ID0gMSdiMDsKKyAgICAgICAgI3RkZXZpY2VfRVJTU1VTUCBFUlNTVVNQX291dCA9IDEnYjE7CisgICAgZW5kCisKKyAgICBhbHdheXMgQChwb3NlZGdlIFBBU1NVTENLX2luKQorICAgIGJlZ2luOlBBU1NVTG9jaworICAgICAgICBQQVNTVUxDS19vdXQgPSAxJ2IwOworICAgICAgICAjdGRldmljZV9QQVNTVUxDSyBQQVNTVUxDS19vdXQgPSAxJ2IxOworICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSBQQVNTQUNDX2luKQorICAgIGJlZ2luOlBBU1NBY2MKKyAgICAgICAgUEFTU0FDQ19vdXQgPSAxJ2IwOworICAgICAgICAjdGRldmljZV9QQVNTQUNDIFBBU1NBQ0Nfb3V0ID0gMSdiMTsKKyAgICBlbmQKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gd3JpdGUgY3ljbGUgZGVjb2RlCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgaW50ZWdlciBvcGNvZGVfY250ID0gMDsKKyAgICBpbnRlZ2VyIGFkZHJfY250ICAgPSAwOworICAgIGludGVnZXIgbW9kZV9jbnQgICA9IDA7CisgICAgaW50ZWdlciBkdW1teV9jbnQgID0gMDsKKyAgICBpbnRlZ2VyIGRhdGFfY250ICAgPSAwOworICAgIGludGVnZXIgYml0X2NudCAgICA9IDA7CisKKyAgICByZWcgWzQwOTU6MF0gRGF0YV9pbiA9IDQwOTYnYjA7CisgICAgcmVnIFs3OjBdIG9wY29kZTsKKyAgICByZWcgWzc6MF0gb3Bjb2RlX2luOworICAgIHJlZyBbNzowXSBvcGNvZGVfdG1wOworICAgIHJlZyBbMzE6MF0gYWRkcl9ieXRlczsKKyAgICByZWcgWzMxOjBdIGhpYWRkcl9ieXRlczsKKyAgICByZWcgWzMxOjBdIEFkZHJlc3NfaW47CisgICAgcmVnIFs3OjBdIG1vZGVfYnl0ZXM7CisgICAgcmVnIFs3OjBdIG1vZGVfaW47CisgICAgaW50ZWdlciBMYXRlbmN5X2NvZGU7CisgICAgaW50ZWdlciBxdWFkX2RhdGFfaW4gWzA6MTAyM107CisgICAgcmVnIFszOjBdIHF1YWRfbnliYmxlID0gNCdiMDsKKyAgICByZWcgWzM6MF0gUXVhZF9zbHY7CisgICAgcmVnIFs3OjBdIEJ5dGVfc2x2OworCisgICBhbHdheXMgQChyaXNpbmdfZWRnZV9DU05lZ19pcGQgb3IgZmFsbGluZ19lZGdlX0NTTmVnX2lwZCBvcgorICAgICAgICAgICAgcmlzaW5nX2VkZ2VfU0NLX2lwZCBvciBmYWxsaW5nX2VkZ2VfU0NLX2lwZCBvcgorICAgICAgICAgICAgY3VycmVudF9zdGF0ZSkKKyAgIGJlZ2luOiBCdXNjeWNsZQorICAgICAgICBpbnRlZ2VyIGk7CisgICAgICAgIGludGVnZXIgajsKKyAgICAgICAgaW50ZWdlciBrOworICAgICAgICB0aW1lIENMS19QRVI7CisgICAgICAgIHRpbWUgTEFTVF9DTEs7CisKKyAgICAgICAgaWYgKGN1cnJlbnRfc3RhdGUgPT0gUkVTRVRfU1RBVEUpCisgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBTVEFORF9CWTsKKyAgICAgICAgZWxzZQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgaWYgKGZhbGxpbmdfZWRnZV9DU05lZ19pcGQpCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChidXNfY3ljbGVfc3RhdGU9PVNUQU5EX0JZKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gTk9ORTsKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBjZmdfd3JpdGUgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ICAgPSAwOworICAgICAgICAgICAgICAgICAgICBtb2RlX2NudCAgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZHVtbXlfY250ICA9IDA7CisgICAgICAgICAgICAgICAgICAgIGRhdGFfY250ICAgPSAwOworICAgICAgICAgICAgICAgICAgICBvcGNvZGVfdG1wID0gMDsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRfZGxwICA9IDA7CisgICAgICAgICAgICAgICAgICAgIERPVUJMRSAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBRVUFEUkQgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgQ0xLX1BFUiAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIExBU1RfQ0xLICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudF9zdGF0ZSA9PSBBVVRPQk9PVCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBPUENPREVfQllURTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgaWYgKHJpc2luZ19lZGdlX1NDS19pcGQpIC8vIEluc3RydWN0aW9ucywgYWRkcmVzc2VzIG9yIGRhdGEgcHJlc2VudAorICAgICAgICAgICAgYmVnaW4gICAgICAgICAgICAgICAgICAgIC8vIGF0IFNJIGFyZSBsYXRjaGVkIG9uIHRoZSByaXNpbmcgZWRnZSBvZiBTQ0sKKworICAgICAgICAgICAgICAgIENMS19QRVIgPSAkdGltZSAtIExBU1RfQ0xLOworICAgICAgICAgICAgICAgIExBU1RfQ0xLID0gJHRpbWU7CisgICAgICAgICAgICAgICAgaWYgKENIRUNLX0ZSRVEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKChDTEtfUEVSIDwgMjAwMDAgJiYgTGF0ZW5jeV9jb2RlID09IDMpIHx8CisgICAgICAgICAgICAgICAgICAgIChDTEtfUEVSIDwgMTI1MDAgJiYgTGF0ZW5jeV9jb2RlID09IDApIHx8CisgICAgICAgICAgICAgICAgICAgIChDTEtfUEVSIDwgMTExMDAgJiYgTGF0ZW5jeV9jb2RlID09IDEpIHx8CisgICAgICAgICAgICAgICAgICAgIChDTEtfUEVSIDwgOTYwMCAmJiBMYXRlbmN5X2NvZGUgPT0gMikpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIk1vcmUgd2FpdCBzdGF0ZXMgYXJlIHJlcXVpcmVkIGZvciIpOworICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJ0aGlzIGNsb2NrIGZyZXF1ZW5jeSB2YWx1ZSIpOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IEREUkZSIHx8IEluc3RydWN0ID09IEREUkZSNCB8fCBJbnN0cnVjdCA9PSBERFJESU9SIHx8CisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBERFJESU9SNCB8fCBJbnN0cnVjdCA9PSBERFJRSU9SIHx8IEluc3RydWN0ID09IEREUlFJT1I0KQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICBpZiAgIChDTEtfUEVSIDwgMTI1MDApCisgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkZHI4MCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkZHI4MCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfRlJFUSA9IDA7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAofkNTTmVnX2lwZCkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBjYXNlIChidXNfY3ljbGVfc3RhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICBPUENPREVfQllURToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChIT0xETmVnX2luICYmIH5RVUFEKSB8fCBRVUFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZV9pbltvcGNvZGVfY250XSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNvZGVfY250ID0gb3Bjb2RlX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhdGVuY3lfY29kZSA9IENvbmZpZ19yZWcxWzc6Nl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGNvZGVfY250ID09IEJZVEUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT03O2k+PTA7aT1pLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZVtpXSA9IG9wY29kZV9pbls3LWldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIChvcGNvZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAwMDAxMTAgOiAvLyAwNmgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFdSRU47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAwMDAxMDAgOiAvLyAwNGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFdSREk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAwMDAwMDEgOiAvLyAwMWgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFdSUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IwMDAwMDAxMSA6IC8vIDAzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUkVBRDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IwMDAxMDAxMSA6IC8vIDEzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUkQ0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAxMDAxMDExIDogLy8gNEJoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBPVFBSOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAwMDAwMTAxIDogLy8gMDVoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBSRFNSOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAwMDAwMTExIDogLy8gMDdoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBSRFNSMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IwMDExMDEwMSA6IC8vIDM1aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUkRDUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMDAxMDAwMCA6IC8vIDkwaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUkVNUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMDAxMTExMSA6IC8vIDlGaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUkRJRDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMDEwMTAxMSA6IC8vIEFCaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUkVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEVU1NWV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IwMDAwMTAxMSA6IC8vIDBCaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gRlNUUkQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIRUNLX0ZSRVEgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAwMDAxMTAwIDogLy8gMENoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBGU1RSRDQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIRUNLX0ZSRVEgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAwMDAxMTAxIDogLy8gMERoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBERFJGUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfRlJFUSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAwMDExMTAgOiAvLyAwRWgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IEREUkZSNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfRlJFUSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAxMTEwMTEgOiAvLyAzQmgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IERPUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfRlJFUSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAxMTExMDAgOiAvLyAzQ2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IERPUjQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIRUNLX0ZSRVEgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjEwMTExMDExIDogLy8gQkJoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBESU9SOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEVDS19GUkVRID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMDExMTEwMCA6IC8vIEJDaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gRElPUjQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIRUNLX0ZSRVEgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjEwMTExMTAxIDogLy8gQkRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBERFJESU9SOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEVDS19GUkVRID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMDExMTExMCA6IC8vIEJFaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gRERSRElPUjQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIRUNLX0ZSRVEgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAxMTAxMDExIDogLy8gNkJoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBRT1I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIRUNLX0ZSRVEgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAxMTAxMTAwIDogLy8gNkNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBRT1I0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEVDS19GUkVRID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMTEwMTAxMSA6IC8vIEVCaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUUlPUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfRlJFUSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMTExMDExMDAgOiAvLyBFQ2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFFJT1I0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEVDS19GUkVRID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMTEwMTEwMSA6IC8vIEVEaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gRERSUUlPUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfRlJFUSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMTExMDExMTAgOiAvLyBFRWgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IEREUlFJT1I0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEVDS19GUkVRID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IwMDAwMDAxMCA6IC8vIDAyaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUFA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAwMTAwMTAgOiAvLyAxMmgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFBQNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IwMDExMDAxMDogLy8gMzJoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBRUFA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWRfcGcgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAwMTExMDAwOiAvLyAzOGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFFQUDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZF9wZyA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAxMTAxMDAgOiAvLyAzNGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFFQUDQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWRfcGcgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAxMDAwMDEwIDogLy8gNDJoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBPVFBQOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjEwMDAwMTAxIDogLy8gODVoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBQR1NQOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjEwMDAxMDEwIDogLy8gOEFoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBQR1JTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjExMDAwMTExIDogLy8gQzdoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBCRTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IwMTEwMDAwMCA6IC8vIDYwaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gQkU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMTEwMTEwMDAgOiAvLyBEOGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFNFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjExMDExMTAwIDogLy8gRENoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBTRTQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDExMTAxMDEgOiAvLyA3NWgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IEVSU1A7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDExMTEwMTAgOiAvLyA3QWgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IEVSUlM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAwMTAxMDAgOiAvLyAxNGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IEFCUkQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAwMTAxMDEgOiAvLyAxNWgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IEFCV1I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAwMTAxMTAgOiAvLyAxNmgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IEJSUkQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAwMTAxMTEgOiAvLyAxN2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IEJSV1I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAxMDEwMTEgOiAvLyAyQmgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IEFTUFJEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAwMTAxMTExIDogLy8gMkZoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBBU1BQOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjExMTAwMDAwIDogLy8gRTBoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBEWUJSRDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMTEwMDAwMSA6IC8vIEUxaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gRFlCV1I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMTExMDAwMTAgOiAvLyBFMmgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFBQQlJEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjExMTAwMDExIDogLy8gRTNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBQUEJQOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjExMTAwMTAwIDogLy8gRTRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBQUEJFUlM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMTAxMDAxMTAgOiAvLyBBNmgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFBMQldSOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjEwMTAwMTExIDogLy8gQTdoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBQTEJSRDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMTEwMDExMSA6IC8vIEU3aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUEFTU1JEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjExMTAxMDAwIDogLy8gRThoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBQQVNTUDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMTEwMTAwMSA6IC8vIEU5aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUEFTU1U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMTExMTAwMDAgOiAvLyBGMGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFJFU0VUOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAwMTEwMDAwIDogLy8gMzBoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBDTFNSOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAwMTAwMDAwIDogLy8gMjBoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBQNEU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAxMDAwMDEgOiAvLyAyMWgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFA0RTQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDEwMDAwMDEgOiAvLyA0MWgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IERMUFJEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAxMDAwMDExIDogLy8gNDNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBQTlZETFI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDEwMDEwMTAgOiAvLyA0QWgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFdWRExSOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjEwMTExMDAxIDogLy8gQjloCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBCUkFDOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjExMTExMTExIDogLy8gRkZoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBNQlI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IE1PREVfQllURTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IwMDAxMTAwMCA6IC8vIDE4aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gRUNDUkQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRjYXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kIC8vZW5kIG9mIE9QQ09ERSBCWVRFCisKKyAgICAgICAgICAgICAgICAgICAgICAgIEFERFJFU1NfQllURVMgOgorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUkZSKSAgfHwgKEluc3RydWN0ID09IEREUkZSNCkgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdCA9PSBERFJESU9SKSB8fCAoSW5zdHJ1Y3QgPT0gRERSRElPUjQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdCA9PSBERFJRSU9SKSB8fCAoSW5zdHJ1Y3QgPT0gRERSUUlPUjQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBET1VCTEUgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE9VQkxFID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IFFPUikgIHx8IChJbnN0cnVjdCA9PSBRT1I0KSAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0ID09IFFJT1IpIHx8IChJbnN0cnVjdCA9PSBRSU9SNCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0ID09IEREUlFJT1IpIHx8IChJbnN0cnVjdCA9PSBERFJRSU9SNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVQURSRCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUFEUkQgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChET1VCTEUgPT0gMSdiMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCgoKEluc3RydWN0ID09IEZTVFJEKSAmJiAofkVYVEFERCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSW5zdHJ1Y3QgPT0gRE9SKSAgJiYgKH5FWFRBREQpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSW5zdHJ1Y3QgPT0gT1RQUikpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSE9MRE5lZ19pbiAmJiB+UVVBRCkgfHwgUVVBRCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSW5zdHJ1Y3QgPT0gUU9SKSAmJiBRVUFEICYmICh+RVhUQUREKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSW5zdHJ1Y3Rpb24gKyAzIEJ5dGVzIEFkZHJlc3MgKyBEdW1teSBCeXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luW2FkZHJfY250XSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPSBhZGRyX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcl9jbnQgPT0gMypCWVRFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT0yMztpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfYnl0ZXNbMjMtaV0gPSBBZGRyZXNzX2luW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfYnl0ZXNbMzE6MjVdID0gNydiMDAwMDAwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzI0XSA9IEJhbmtfQWRkcl9yZWdbMF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyA9IGFkZHJfYnl0ZXMgOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9hZGRyID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSBjaGFuZ2VfYWRkciA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0PT1GU1RSRCB8fCBJbnN0cnVjdD09RE9SIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IFFPUikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTGF0ZW5jeV9jb2RlID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEVU1NWV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERVTU1ZX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdD09RUNDUkQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSW5zdHJ1Y3Rpb24gKyA0IEJ5dGVzIEFkZHJlc3MgKyBEdW1teSBCeXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luW2FkZHJfY250XSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPSBhZGRyX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcl9jbnQgPT0gNCpCWVRFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT0zMTtpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpYWRkcl9ieXRlc1szMS1pXSA9IEFkZHJlc3NfaW5baV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9IaWdoIG9yZGVyIGFkZHJlc3MgYml0cyBhcmUgaWdub3JlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MgPSB7aGlhZGRyX2J5dGVzWzMxOjRdLDQnYjAwMDB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9hZGRyID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSBjaGFuZ2VfYWRkciA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gRFVNTVlfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgoKEluc3RydWN0PT1GU1RSRDQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0PT1ET1I0KSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSW5zdHJ1Y3Q9PUZTVFJEKSAmJiBFWFRBREQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJbnN0cnVjdD09RE9SKSAmJiBFWFRBREQpKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSE9MRE5lZ19pbiAmJiB+UVVBRCkgfHwgUVVBRCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJbnN0cnVjdD09UU9SNCkgJiYgUVVBRCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEluc3RydWN0PT1RT1IpICYmIFFVQUQgJiYgRVhUQUREKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JbnN0cnVjdGlvbiArIDQgQnl0ZXMgQWRkcmVzcyArIER1bW15IEJ5dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bYWRkcl9jbnRdID0gU0lfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2NudCA9IGFkZHJfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGRyX2NudCA9PSA0KkJZVEUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTMxO2k+PTA7aT1pLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlhZGRyX2J5dGVzWzMxLWldID0gQWRkcmVzc19pbltpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0hpZ2ggb3JkZXIgYWRkcmVzcyBiaXRzIGFyZSBpZ25vcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyA9IHs3J2IwMDAwMDAwLGhpYWRkcl9ieXRlc1syNDowXX07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlX2FkZHIgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxIGNoYW5nZV9hZGRyID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTGF0ZW5jeV9jb2RlID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERVTU1ZX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoSW5zdHJ1Y3Q9PURJT1IpICYmICh+RVhUQUREKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0RVQUwgSS9PIEhpZ2ggUGVyZm9ybWFuY2UgUmVhZCgzIEJ5dGVzIEFkZHIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzIqYWRkcl9jbnRdICAgICA9IFNPX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pblsyKmFkZHJfY250ICsgMV0gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gYWRkcl9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJfY250ID09IDMqQllURS8yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MjM7aT49MDtpPWktMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzIzLWldPUFkZHJlc3NfaW5baV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9ieXRlc1szMToyNV0gPSA3J2IwMDAwMDAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfYnl0ZXNbMjRdID0gQmFua19BZGRyX3JlZ1swXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzID0gYWRkcl9ieXRlczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VfYWRkciA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzEgY2hhbmdlX2FkZHIgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChFSFApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IE1PREVfQllURTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERVTU1ZX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoKEluc3RydWN0PT1ESU9SNCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEluc3RydWN0PT1ESU9SKSAmJiBFWFRBREQpKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSE9MRE5lZ19pbiAmJiB+UVVBRCkgfHwgUVVBRCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luIC8vRFVBTCBJL08gSGlnaCBQZXJmb3JtYW5jZSBSZWFkKDRCeXRlcyBBZGRyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pblsyKmFkZHJfY250XSAgICAgPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bMiphZGRyX2NudCArIDFdID0gU0lfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2NudCA9IGFkZHJfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGRyX2NudCA9PSA0KkJZVEUvMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTMxO2k+PTA7aT1pLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9ieXRlc1szMS1pXSA9IEFkZHJlc3NfaW5baV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyA9IHs3J2IwMDAwMDAwLGFkZHJfYnl0ZXNbMjQ6MF19OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9hZGRyID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSBjaGFuZ2VfYWRkciA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVIUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gTU9ERV9CWVRFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gRFVNTVlfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdCA9PSBRSU9SKSAmJiAofkVYVEFERCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vUVVBRCBJL08gSGlnaCBQZXJmb3JtYW5jZSBSZWFkICgzQnl0ZXMgQWRkcmVzcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChRVUFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnRdID0gSE9MRE5lZ19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrMV0gPSBXUE5lZ19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrMl0gPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrM10gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPSBhZGRyX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJfY250ID09IDMqQllURS80KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MjM7aT49MDtpPWktMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfYnl0ZXNbMjMtaV0gPSBBZGRyZXNzX2luW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9ieXRlc1szMToyNV0gPSA3J2IwMDAwMDAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzI0XSA9IEJhbmtfQWRkcl9yZWdbMF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyA9IGFkZHJfYnl0ZXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9hZGRyID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzEgY2hhbmdlX2FkZHIgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBNT0RFX0JZVEU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBTVEFORF9CWTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdD09UUlPUjQpIHx8ICgoSW5zdHJ1Y3Q9PVFJT1IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgRVhUQUREKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vUVVBRCBJL08gSGlnaCBQZXJmb3JtYW5jZSBSZWFkICg0Qnl0ZXMgQWRkcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChRVUFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnRdID0gSE9MRE5lZ19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrMV0gPSBXUE5lZ19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrMl0gPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrM10gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPSBhZGRyX2NudCArMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcl9jbnQgPT0gNCpCWVRFLzQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTMxO2k+PTA7aT1pLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWFkZHJfYnl0ZXNbMzEtaV0gPSBBZGRyZXNzX2luW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9IaWdoIG9yZGVyIGFkZHJlc3MgYml0cyBhcmUgaWdub3JlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzID0gezcnYjAwMDAwMDAsaGlhZGRyX2J5dGVzWzI0OjBdfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlX2FkZHIgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSBjaGFuZ2VfYWRkciA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IE1PREVfQllURTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IFNUQU5EX0JZOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKCgoSW5zdHJ1Y3Q9PVJENCkgfHwgKEluc3RydWN0PT1QUDQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0PT1TRTQpIHx8KEluc3RydWN0PT1QUEJSRCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSW5zdHJ1Y3Q9PURZQlJEKSB8fChJbnN0cnVjdD09RFlCV1IpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0PT1QUEJQKSB8fCAoSW5zdHJ1Y3Q9PVA0RTQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJbnN0cnVjdD09UkVBRCkgJiYgRVhUQUREKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSW5zdHJ1Y3Q9PVBQKSAmJiBFWFRBREQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJbnN0cnVjdD09UDRFKSAmJiBFWFRBREQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJbnN0cnVjdD09U0UpICYmIEVYVEFERCkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChIT0xETmVnX2luICYmIH5RVUFEKSB8fCBRVUFEKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUVVBRCAmJiAoSW5zdHJ1Y3Q9PVFQUDQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEluc3RydWN0PT1RUFApICYmIEVYVEFERCkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bYWRkcl9jbnRdID0gU0lfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2NudCA9IGFkZHJfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGRyX2NudCA9PSA0KkJZVEUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTMxO2k+PTA7aT1pLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlhZGRyX2J5dGVzWzMxLWldID0gQWRkcmVzc19pbltpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0hpZ2ggb3JkZXIgYWRkcmVzcyBiaXRzIGFyZSBpZ25vcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyA9IHs3J2IwMDAwMDAwLGhpYWRkcl9ieXRlc1syNDowXX07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlX2FkZHIgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxIGNoYW5nZV9hZGRyID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKH5FWFRBREQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pblthZGRyX2NudF0gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gYWRkcl9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJfY250ID09IDMqQllURSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MjM7aT49MDtpPWktMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzIzLWldID0gQWRkcmVzc19pbltpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzMxOjI1XSA9IDcnYjAwMDAwMDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9ieXRlc1syNF0gPSBCYW5rX0FkZHJfcmVnWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MgPSBhZGRyX2J5dGVzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9hZGRyID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSBjaGFuZ2VfYWRkciA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChJbnN0cnVjdD09RERSRlIpICYmICh+RVhUQUREKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9GYXN0IEREUiBSZWFkIE1vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bYWRkcl9jbnRdID0gU0lfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGFkZHJfY250LzIpIDw9IDE2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNvZGVfdG1wW2FkZHJfY250LzJdID0gU0lfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gYWRkcl9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKEluc3RydWN0PT1ERFJGUjQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJbnN0cnVjdD09RERSRlIpICYmIEVYVEFERCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luW2FkZHJfY250XSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChhZGRyX2NudC8yKSA8PSAxNikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bjb2RlX3RtcFthZGRyX2NudC8yXSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2NudCA9IGFkZHJfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdCA9PSBERFJESU9SKSAmJiAofkVYVEFERCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luICAgIC8vRHVhbCBJL08gRERSIFJlYWQgTW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pblsyKmFkZHJfY250XSA9IFNPX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pblsyKmFkZHJfY250KzFdPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYWRkcl9jbnQvMikgPD0gMTYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZV90bXBbYWRkcl9jbnQvMl0gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPSBhZGRyX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoSW5zdHJ1Y3Q9PUREUkRJT1I0KSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSW5zdHJ1Y3Q9PUREUkRJT1IpICYmIEVYVEFERCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luICAgIC8vRHVhbCBJL08gRERSIFJlYWQgTW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pblsyKmFkZHJfY250XSAgID0gU09faW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzIqYWRkcl9jbnQrMV0gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYWRkcl9jbnQvMikgPD0gMTYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZV90bXBbYWRkcl9jbnQvMl0gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPSBhZGRyX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoSW5zdHJ1Y3Q9PUREUlFJT1IpICYmICh+RVhUQUREKSAmJiBRVUFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbiAgICAvL1F1YWQgSS9PIEREUiBSZWFkIE1vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bNCphZGRyX2NudF0gPSBIT0xETmVnX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pbls0KmFkZHJfY250KzFdID0gV1BOZWdfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrMl0gPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bNCphZGRyX2NudCszXSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bjb2RlX3RtcFthZGRyX2NudC8yXSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPSBhZGRyX2NudCArMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKFFVQUQgJiYgKChJbnN0cnVjdD09RERSUUlPUjQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJbnN0cnVjdD09RERSUUlPUikgJiYgRVhUQUREKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnRdID0gSE9MRE5lZ19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bNCphZGRyX2NudCsxXSA9IFdQTmVnX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pbls0KmFkZHJfY250KzJdID0gU09faW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrM10gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZV90bXBbYWRkcl9jbnQvMl0gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gYWRkcl9jbnQgKzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PREVfQllURSA6CisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKEluc3RydWN0PT1ESU9SKSB8fCAoSW5zdHJ1Y3QgPT0gRElPUjQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfaW5bMiptb2RlX2NudF0gPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9pblsyKm1vZGVfY250KzFdID0gU0lfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfY250ID0gbW9kZV9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kZV9jbnQgPT0gQllURS8yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9NztpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2J5dGVzW2ldID0gbW9kZV9pbls3LWldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTGF0ZW5jeV9jb2RlID09IDAgfHwgTGF0ZW5jeV9jb2RlID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEVU1NWV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKChJbnN0cnVjdD09UUlPUikgfHwgKEluc3RydWN0ID09IFFJT1I0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIFFVQUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9pbls0Km1vZGVfY250XSA9IEhPTEROZWdfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfaW5bNCptb2RlX2NudCsxXSA9IFdQTmVnX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2luWzQqbW9kZV9jbnQrMl0gPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9pbls0Km1vZGVfY250KzNdID0gU0lfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfY250ID0gbW9kZV9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kZV9jbnQgPT0gQllURS80KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9NztpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2J5dGVzW2ldID0gbW9kZV9pbls3LWldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEVU1NWV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKEluc3RydWN0ID09IEREUkZSKSB8fCAoSW5zdHJ1Y3QgPT0gRERSRlI0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9pblsyKm1vZGVfY250XSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdD09RERSRElPUikgfHwgKEluc3RydWN0PT1ERFJESU9SNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9pbls0Km1vZGVfY250XSAgID0gU09faW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfaW5bNCptb2RlX2NudCsxXSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgoSW5zdHJ1Y3Q9PUREUlFJT1IpIHx8IChJbnN0cnVjdCA9PSBERFJRSU9SNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBRVUFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfaW5bMF0gPSBIT0xETmVnX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2luWzFdID0gV1BOZWdfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfaW5bMl0gPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9pblszXSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bW15X2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICAgICAgRFVNTVlfQllURVMgOgorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5fRExQKEluc3RydWN0LCBFSFAsIExhdGVuY3lfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bW15X2NudCwgc3RhcnRfZGxwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRE9VQkxFID09IDEnYjEgJiYgKGhvbGRfbW9kZT09MCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVkRMUl9yZWcgIT0gOCdiMDAwMDAwMDApICYmIHN0YXJ0X2RscCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX291dCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxMCByZWFkX291dCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoKEluc3RydWN0PT1GU1RSRCkgfHwgKEluc3RydWN0PT1GU1RSRDQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0PT1ET1IpICB8fCAoSW5zdHJ1Y3Q9PURPUjQpICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdD09T1RQUikpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChIT0xETmVnX2luICYmIH5RVUFEKSB8fCBRVUFEKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChJbnN0cnVjdD09UU9SKXx8KEluc3RydWN0PT1RT1I0KSkgJiYgUVVBRCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtbXlfY250ID0gZHVtbXlfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGR1bW15X2NudCA9PSBCWVRFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoSW5zdHJ1Y3Q9PUREUkZSKSB8fCAoSW5zdHJ1Y3Q9PUREUkZSNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtbXlfY250ID0gZHVtbXlfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVIUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKExhdGVuY3lfY29kZSA9PSAzKSAmJiAoZHVtbXlfY250PT0xKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAwKSAmJiAoZHVtbXlfY250PT0yKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAxKSAmJiAoZHVtbXlfY250PT00KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAyKSAmJiAoZHVtbXlfY250PT01KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKExhdGVuY3lfY29kZSA9PSAzKSAmJiAoZHVtbXlfY250PT00KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAwKSAmJiAoZHVtbXlfY250PT01KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAxKSAmJiAoZHVtbXlfY250PT02KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAyKSAmJiAoZHVtbXlfY250PT03KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3Q9PVJFUykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1teV9jbnQgPSBkdW1teV9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHVtbXlfY250ID09IDMqQllURSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdD09RUNDUkQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtbXlfY250ID0gZHVtbXlfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGR1bW15X2NudCA9PSBCWVRFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdCA9PSBESU9SKSB8fCAoSW5zdHJ1Y3QgPT0gRElPUjQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bW15X2NudCA9IGR1bW15X2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChFSFApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChMYXRlbmN5X2NvZGUgPT0gMSkgJiYgKGR1bW15X2NudD09MSkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMYXRlbmN5X2NvZGUgPT0gMikgJiYgKGR1bW15X2NudD09MikpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChMYXRlbmN5X2NvZGUgPT0gMykgJiYgKGR1bW15X2NudD09NCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMYXRlbmN5X2NvZGUgPT0gMCkgJiYgKGR1bW15X2NudD09NCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMYXRlbmN5X2NvZGUgPT0gMSkgJiYgKGR1bW15X2NudD09NSkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMYXRlbmN5X2NvZGUgPT0gMikgJiYgKGR1bW15X2NudD09NikpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdD09RERSRElPUikgfHwgKEluc3RydWN0PT1ERFJESU9SNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtbXlfY250ID0gZHVtbXlfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVIUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKExhdGVuY3lfY29kZSA9PSAzKSAmJiAoZHVtbXlfY250PT0yKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAwKSAmJiAoZHVtbXlfY250PT00KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAxKSAmJiAoZHVtbXlfY250PT01KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAyKSAmJiAoZHVtbXlfY250PT02KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKExhdGVuY3lfY29kZSA9PSAzKSAmJiAoZHVtbXlfY250PT00KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAwKSAmJiAoZHVtbXlfY250PT02KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAxKSAmJiAoZHVtbXlfY250PT03KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAyKSAmJiAoZHVtbXlfY250PT04KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKChJbnN0cnVjdCA9PSBRSU9SKSB8fCAoSW5zdHJ1Y3QgPT0gUUlPUjQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgUVVBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1teV9jbnQgPSBkdW1teV9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChMYXRlbmN5X2NvZGUgPT0gMykgJiYgKGR1bW15X2NudD09MSkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAwKSAmJiAoZHVtbXlfY250PT00KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTGF0ZW5jeV9jb2RlID09IDEpICYmIChkdW1teV9jbnQ9PTQpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMYXRlbmN5X2NvZGUgPT0gMikgJiYgKGR1bW15X2NudD09NSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKChJbnN0cnVjdD09RERSUUlPUikgfHwgKEluc3RydWN0PT1ERFJRSU9SNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBRVUFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bW15X2NudCA9IGR1bW15X2NudCArIDE7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoTGF0ZW5jeV9jb2RlID09IDMpICYmIChkdW1teV9jbnQ9PTMpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMYXRlbmN5X2NvZGUgPT0gMCkgJiYgKGR1bW15X2NudD09NikpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAxKSAmJiAoZHVtbXlfY250PT03KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTGF0ZW5jeV9jb2RlID09IDIpICYmIChkdW1teV9jbnQ9PTgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgIERBVEFfQllURVMgOgorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChET1VCTEUgPT0gMSdiMSAmJiAoaG9sZF9tb2RlPT0wKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX291dCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxMCByZWFkX291dCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKFFVQUQpICYmICgoSW5zdHJ1Y3Q9PVFQUCkgfHwgKEluc3RydWN0ID09IFFQUDQpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFkX255YmJsZSA9IHtIT0xETmVnX2luLCBXUE5lZ19pbiwgU09faW4sIFNJX2lufTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFfY250ID4gKChQYWdlU2l6ZSsxKSoyLTEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0luIGNhc2Ugb2YgcXVhZCBtb2RlIGFuZCBRUFAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYgbW9yZSB0aGFuIDUxMiBieXRlcyBhcmUgc2VudCB0byB0aGUgZGV2aWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT0wO2k8PShQYWdlU2l6ZSoyLTEpO2k9aSsxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFkX2RhdGFfaW5baV0gPSBxdWFkX2RhdGFfaW5baSsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZF9kYXRhX2luWyhQYWdlU2l6ZSsxKSoyLTFdID0gcXVhZF9ueWJibGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2NudCA9IGRhdGFfY250ICsxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1YWRfbnliYmxlICE9PSA0J2JaWlpaKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFkX2RhdGFfaW5bZGF0YV9jbnRdID0gcXVhZF9ueWJibGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfY250ID0gZGF0YV9jbnQgKzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCh+UVVBRFJEKSAmJiAoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhX2NudCA+ICgoUGFnZVNpemUrMSkqOC0xKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JbiBjYXNlIG9mIHNlcmlhbCBtb2RlIGFuZCBQUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiBtb3JlIHRoYW4gUGFnZVNpemUgYXJlIHNlbnQgdG8gdGhlIGRldmljZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ByZXZpb3VzbHkgbGF0Y2hlZCBkYXRhIGFyZSBkaXNjYXJkZWQgYW5kIGxhc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8yNTYvNTEyIGRhdGEgYnl0ZXMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgcHJvZ3JhbW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NvcnJlY3RseSB3aXRoaW4gdGhlIHNhbWUgcGFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRfY250ID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTA7aTw9KFBhZ2VTaXplKkJZVEUtMSk7aT1pKzEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YV9pbltpXSA9IERhdGFfaW5baSs4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YV9pbltQYWdlU2l6ZSpCWVRFICsgYml0X2NudF0gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdF9jbnQgPSBiaXRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2NudCA9IGRhdGFfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFfaW5bZGF0YV9jbnRdID0gU0lfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2NudCA9IGRhdGFfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmRjYXNlCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgaWYgKGZhbGxpbmdfZWRnZV9TQ0tfaXBkKQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBpZiAofkNTTmVnX2lwZCkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBjYXNlIChidXNfY3ljbGVfc3RhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICBBRERSRVNTX0JZVEVTIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERPVUJMRSA9PSAxJ2IxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoSW5zdHJ1Y3Q9PUREUkZSKSAmJiAofkVYVEFERCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vRmFzdCBERFIgUmVhZCBNb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luW2FkZHJfY250XSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJfY250ICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gYWRkcl9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcl9jbnQgPT0gMypCWVRFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MjM7aT49MDtpPWktMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzIzLWldID0gQWRkcmVzc19pbltpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzMxOjI1XSA9IDcnYjAwMDAwMDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9ieXRlc1syNF0gPSBCYW5rX0FkZHJfcmVnWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MgPSBhZGRyX2J5dGVzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9hZGRyID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSBjaGFuZ2VfYWRkciA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVIUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gTU9ERV9CWVRFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gRFVNTVlfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdD09RERSRlI0KSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSW5zdHJ1Y3Q9PUREUkZSKSAmJiBFWFRBREQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pblthZGRyX2NudF0gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGRyX2NudCAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2NudCA9IGFkZHJfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJfY250ID09IDQqQllURSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTMxO2k+PTA7aT1pLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9ieXRlc1szMS1pXSA9IEFkZHJlc3NfaW5baV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyA9IHs3J2IwMDAwMDAwLGFkZHJfYnl0ZXNbMjQ6MF19OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9hZGRyID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSBjaGFuZ2VfYWRkciA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVIUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gTU9ERV9CWVRFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEVU1NWV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERPVUJMRSA9PSAxJ2IxICYmIChob2xkX21vZGU9PTApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIFZETFJfcmVnICE9IDgnYjAwMDAwMDAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9vdXQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzEwIHJlYWRfb3V0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdCA9PSBERFJESU9SKSAmJiAofkVYVEFERCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luICAgIC8vRHVhbCBJL08gRERSIFJlYWQgTW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pblsyKmFkZHJfY250XSA9IFNPX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pblsyKmFkZHJfY250KzFdPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGRyX2NudCAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2NudCA9IGFkZHJfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJfY250ID09IDMqQllURS8yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MjM7aT49MDtpPWktMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzIzLWldID0gQWRkcmVzc19pbltpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzMxOjI1XSA9IDcnYjAwMDAwMDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9ieXRlc1syNF0gPSBCYW5rX0FkZHJfcmVnWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MgPSBhZGRyX2J5dGVzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9hZGRyID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSBjaGFuZ2VfYWRkciA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVIUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gTU9ERV9CWVRFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gRFVNTVlfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdD09RERSRElPUjQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJbnN0cnVjdD09RERSRElPUikgJiYgRVhUQUREKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4gICAgLy9EdWFsIEkvTyBERFIgUmVhZCBNb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzIqYWRkcl9jbnRdICAgPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bMiphZGRyX2NudCsxXSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJfY250ICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gYWRkcl9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcl9jbnQgPT0gNCpCWVRFLzIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT0zMTtpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfYnl0ZXNbMzEtaV0gPSBBZGRyZXNzX2luW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MgPSB7NydiMDAwMDAwMCxhZGRyX2J5dGVzWzI0OjBdfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VfYWRkciA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzEgY2hhbmdlX2FkZHIgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChFSFApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IE1PREVfQllURTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gRFVNTVlfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChET1VCTEUgPT0gMSdiMSAmJiAoaG9sZF9tb2RlPT0wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBWRExSX3JlZyAhPSA4J2IwMDAwMDAwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfb3V0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxMCByZWFkX291dCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoSW5zdHJ1Y3Q9PUREUlFJT1IpICYmICh+RVhUQUREKSAmJiBRVUFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbiAgICAvL1F1YWQgSS9PIEREUiBSZWFkIE1vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bNCphZGRyX2NudF0gPSBIT0xETmVnX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pbls0KmFkZHJfY250KzFdID0gV1BOZWdfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrMl0gPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bNCphZGRyX2NudCszXSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJfY250ICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gYWRkcl9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcl9jbnQgPT0gMypCWVRFLzQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT0yMztpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfYnl0ZXNbMjMtaV0gPSBBZGRyZXNzX2luW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfYnl0ZXNbMzE6MjVdID0gNydiMDAwMDAwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzI0XSA9IEJhbmtfQWRkcl9yZWdbMF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyA9IGFkZHJfYnl0ZXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlX2FkZHIgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzEgY2hhbmdlX2FkZHIgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IE1PREVfQllURTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoUVVBRCAmJiAoKEluc3RydWN0PT1ERFJRSU9SNCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEluc3RydWN0PT1ERFJRSU9SKSAmJiBFWFRBREQpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bNCphZGRyX2NudF0gPSBIT0xETmVnX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pbls0KmFkZHJfY250KzFdID0gV1BOZWdfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrMl0gPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bNCphZGRyX2NudCszXSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJfY250ICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gYWRkcl9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcl9jbnQgPT0gNCpCWVRFLzQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT0zMTtpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfYnl0ZXNbMzEtaV0gPSBBZGRyZXNzX2luW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MgPSB7NydiMDAwMDAwMCxhZGRyX2J5dGVzWzI0OjBdfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VfYWRkciA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzEgY2hhbmdlX2FkZHIgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IE1PREVfQllURTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RFX0JZVEUgOgorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUkZSKSB8fCAoSW5zdHJ1Y3QgPT0gRERSRlI0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2luWzIqbW9kZV9jbnQrMV0gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9jbnQgPSBtb2RlX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2RlX2NudCA9PSBCWVRFLzIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT03O2k+PTA7aT1pLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfYnl0ZXNbaV0gPSBtb2RlX2luWzctaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERVTU1ZX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuX0RMUChJbnN0cnVjdCwgRUhQLCBMYXRlbmN5X2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bW15X2NudCwgc3RhcnRfZGxwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChET1VCTEUgPT0gMSdiMSAmJiAoaG9sZF9tb2RlPT0wKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFZETFJfcmVnICE9IDgnYjAwMDAwMDAwKSAmJiBzdGFydF9kbHApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfb3V0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMTAgcmVhZF9vdXQgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdD09RERSRElPUikgfHwgKEluc3RydWN0PT1ERFJESU9SNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9pbls0Km1vZGVfY250KzJdID0gU09faW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfaW5bNCptb2RlX2NudCszXSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2NudCA9IG1vZGVfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGVfY250ID09IEJZVEUvNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTc7aT49MDtpPWktMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9ieXRlc1tpXSA9IG1vZGVfaW5bNy1pXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gRFVNTVlfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5fRExQKEluc3RydWN0LCBFSFAsIExhdGVuY3lfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtbXlfY250LCBzdGFydF9kbHApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERPVUJMRSA9PSAxJ2IxICYmIChob2xkX21vZGU9PTApICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVkRMUl9yZWcgIT0gOCdiMDAwMDAwMDApICYmIHN0YXJ0X2RscCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9vdXQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxMCByZWFkX291dCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKEluc3RydWN0PT1ERFJRSU9SKSB8fCAoSW5zdHJ1Y3Q9PUREUlFJT1I0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2luWzRdID0gSE9MRE5lZ19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9pbls1XSA9IFdQTmVnX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2luWzZdID0gU09faW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfaW5bN10gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9NztpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9ieXRlc1tpXSA9IG1vZGVfaW5bNy1pXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERVTU1ZX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5fRExQKEluc3RydWN0LCBFSFAsIExhdGVuY3lfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtbXlfY250LCBzdGFydF9kbHApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRE9VQkxFID09IDEnYjEgJiYgKGhvbGRfbW9kZT09MCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChWRExSX3JlZyAhPSA4J2IwMDAwMDAwMCkgJiYgc3RhcnRfZGxwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX291dCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMTAgcmVhZF9vdXQgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICBEQVRBX0JZVEVTOgorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaG9sZF9tb2RlPT0wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChET1VCTEUgPT0gMSdiMSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX291dCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMTAgcmVhZF9vdXQgPSAxJ2IwOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0PT1SRUFEKSB8fCAoSW5zdHJ1Y3Q9PVJENCkgICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdD09RlNUUkQpfHwgKEluc3RydWN0PT1GU1RSRDQpfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSW5zdHJ1Y3Q9PVJEU1IpIHx8IChJbnN0cnVjdD09UkRTUjIpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0PT1SRENSKSB8fCAoSW5zdHJ1Y3Q9PU9UUFIpICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdD09RE9SKSB8fCAoSW5zdHJ1Y3Q9PURPUjQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0PT1ESU9SKXx8IChJbnN0cnVjdD09RElPUjQpfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSW5zdHJ1Y3Q9PUFCUkQpIHx8IChJbnN0cnVjdD09QlJSRCkgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0PT1BU1BSRCl8fCAoSW5zdHJ1Y3Q9PURZQlJEKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdD09UFBCUkQpfHwgKEluc3RydWN0ID09IEVDQ1JEKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdD09UEFTU1JEKXx8IChJbnN0cnVjdD09UkRJRCl8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdD09UkVTKSB8fCAoSW5zdHJ1Y3Q9PVJFTVMpICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdD09UExCUkQpfHwgKEluc3RydWN0PT1ETFBSRCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3VycmVudF9zdGF0ZSA9PSBBVVRPQk9PVCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RlbGF5ID09IDApIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoSW5zdHJ1Y3Q9PVFPUikgfHwgKEluc3RydWN0PT1RSU9SKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdD09UU9SNCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSW5zdHJ1Y3Q9PVFJT1I0KSkgJiYgUVVBRCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfb3V0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMTAgcmVhZF9vdXQgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgIERVTU1ZX0JZVEVTOgorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaG9sZF9tb2RlPT0wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHVybl9ETFAoSW5zdHJ1Y3QsIEVIUCwgTGF0ZW5jeV9jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bW15X2NudCwgc3RhcnRfZGxwKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRE9VQkxFID09IDEnYjEgJiYgVkRMUl9yZWcgIT0gOCdiMDAwMDAwMDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfb3V0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxMCByZWFkX291dCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgZW5kY2FzZQorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIGlmIChyaXNpbmdfZWRnZV9DU05lZ19pcGQpCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChidXNfY3ljbGVfc3RhdGUgIT0gREFUQV9CWVRFUykKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoYnVzX2N5Y2xlX3N0YXRlID09IEFERFJFU1NfQllURVMgJiYgb3Bjb2RlX3RtcCA9PSA4J2hGRikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gTUJSOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gU1RBTkRfQlk7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmIChidXNfY3ljbGVfc3RhdGUgPT0gREFUQV9CWVRFUykKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKG1vZGVfYnl0ZXNbNzo0XSA9PSA0J2IxMDEwKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdD09RElPUiB8fCBJbnN0cnVjdD09RElPUjQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdD09UUlPUiB8fCBJbnN0cnVjdD09UUlPUjQpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobW9kZV9ieXRlc1s3OjRdID09IH5tb2RlX2J5dGVzWzM6MF0pICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0ID09IEREUkZSICB8fCBJbnN0cnVjdCA9PSBERFJGUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gRERSRElPUiB8fCBJbnN0cnVjdCA9PSBERFJESU9SNCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IFNUQU5EX0JZOworCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIChJbnN0cnVjdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUkVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdSREksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0U0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFA0RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQNEU0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENMU1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlJBQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUEJFUlMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFBCUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTEJXUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQR1NQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBHUlMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVJTUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUlJTOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoSE9MRE5lZ19pbiAmJiB+UVVBRCkgfHwgUVVBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhX2NudCA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUlI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChIT0xETmVnX2luICYmIH5RVUFEKSB8fCBRVUFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lmIENTIyBpcyBkcml2ZW4gaGlnaCBhZnRlciBlaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jeWNsZSxvbmx5IHRoZSBTdGF0dXMgUmVnaXN0ZXIgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vd3JpdHRlbiB0by4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCQVJfQUNDID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MDtpPD03O2k9aSsxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFfaW5baV09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhX2luWzctaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUF9FUlIgPT0gMCAmJiBFX0VSUiA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MDtpPD03O2k9aSsxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYW5rX0FkZHJfcmVnX2luW2ldPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFfaW5bNy1pXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGF0YV9jbnQgPT0gMTYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0FmdGVyIHRoZSAxNnRoIGN5Y2xlIGJvdGggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1N0YXR1cyBhbmQgQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vYXJlIHdyaXR0ZW4gdG8uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQkFSX0FDQyA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZ193cml0ZSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTA7aTw9NztpPWkrMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxX2luW2ldPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YV9pbls3LWldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnX3JlZzFfaW5baV09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhX2luWzE1LWldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBfRVJSID09IDAgJiYgRV9FUlIgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTA7aTw9NztpPWkrMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFua19BZGRyX3JlZ19pbltpXT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhX2luWzctaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1RQUDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YV9jbnQgPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGRhdGFfY250ICUgOCkgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTA7aTw9UGFnZVNpemU7aT1pKzEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ioaj03O2o+PTA7aj1qLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoRGF0YV9pblsoaSo4KSsoNy1qKV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9PSAxJ2JYKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGVfc2x2W2pdID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YV9pblsoaSo4KSsoNy1qKV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdCeXRlW2ldID0gQnl0ZV9zbHY7CisJCQkJCQkvLyRkaXNwbGF5KCIlbTogTG9jOiAleCBCeXRlOiAleCIsaSxCeXRlX3Nsdik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhX2NudCA+IChQYWdlU2l6ZSsxKSpCWVRFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZV9udW1iZXIgPSBQYWdlU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZV9udW1iZXIgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZGF0YV9jbnQvOCkgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFQUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBRUFA0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhX2NudCA+MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZGF0YV9jbnQgJSAyKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZF9wZyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MDtpPD1QYWdlU2l6ZTtpPWkrMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ioaj0xO2o+PTA7aj1qLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRdWFkX3NsdiA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFkX2RhdGFfaW5bKGkqMikrKDEtaildOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGo9PTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZV9zbHZbNzo0XSA9IFF1YWRfc2x2OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaj09MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlX3NsdlszOjBdID0gUXVhZF9zbHY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXQnl0ZVtpXSA9IEJ5dGVfc2x2OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhX2NudCA+IChQYWdlU2l6ZSsxKSoyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlX251bWJlciA9IFBhZ2VTaXplOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZV9udW1iZXIgPSAoKGRhdGFfY250LzIpLTEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUJXUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YV9jbnQgPT0gMzIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ioaj0wO2o8PTMxO2o9aisxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dG9Cb290X3JlZ19pbltqXSA9IERhdGFfaW5bMzEtal07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCUldSOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoSE9MRE5lZ19pbiAmJiB+UVVBRCkgfHwgUVVBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGo9MDtqPD03O2o9aisxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhbmtfQWRkcl9yZWdfaW5bal0gPSBEYXRhX2luWzctal07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1BQOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoSE9MRE5lZ19pbiAmJiB+UVVBRCkgfHwgUVVBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhX2NudCA9PSAxNikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihqPTA7ajw9MTU7aj1qKzEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNQX3JlZ19pbltqXSA9IERhdGFfaW5bMTUtal07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEWUJXUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YV9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihqPTA7ajw9NztqPWorMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEWUJBUl9pbltqXSA9IERhdGFfaW5bNy1qXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBOVkRMUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YV9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihqPTA7ajw9NztqPWorMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVkRMUl9yZWdfaW5bal0gPSBEYXRhX2luWzctal07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXVkRMUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YV9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihqPTA7ajw9NztqPWorMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRExSX3JlZ19pbltqXSA9IERhdGFfaW5bNy1qXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBU1NQOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoSE9MRE5lZ19pbiAmJiB+UVVBRCkgfHwgUVVBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhX2NudCA9PSA2NCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihqPTE7ajw9ODtqPWorMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ioaz0xO2s8PTg7az1rKzEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzd29yZF9yZWdfaW5baio4LWtdID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFfaW5bOCooai0xKStrLTFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBU1NVOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoSE9MRE5lZ19pbiAmJiB+UVVBRCkgfHwgUVVBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhX2NudCA9PSA2NCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihqPTE7ajw9ODtqPWorMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ioaz0xO2s8PTg7az1rKzEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQVNTX1RFTVBbaio4LWtdID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFfaW5bOCooai0xKStrLTFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgZW5kCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFRpbWluZyBjb250cm9sIGZvciB0aGUgUGFnZSBQcm9ncmFtCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgdGltZSBwb2I7CisgICAgdGltZSBlbGFwc2VkX3BnbTsKKyAgICB0aW1lIGVsYXBzZWRfdHN1OworICAgIHRpbWUgc3RhcnRfcGdtOworICAgIHRpbWUgc3RhcnRfdHN1OworICAgIHRpbWUgZHVyYXRpb25fcGdtOworICAgIHRpbWUgZHVyYXRpb25fdHN1OworICAgIGV2ZW50IHBkb25lX2V2ZW50OworCisgICAgYWx3YXlzIEAocmlzaW5nX2VkZ2VfUFNUQVJUKQorICAgIGJlZ2luCisgICAgICAgIGlmICgoSW5zdHJ1Y3QgPT0gUFApIHx8IChJbnN0cnVjdCA9PSBQUDQpIHx8IChJbnN0cnVjdCA9PSBPVFBQKSB8fAorICAgICAgICAgICAoSW5zdHJ1Y3QgPT0gUVBQKSB8fCAoSW5zdHJ1Y3QgPT0gUVBQNCkpCisgICAgICAgICAgICBpZiAoUGFnZVNpemUgPT0gMjU1KQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBwb2IgPSB0ZGV2aWNlX1BQXzI1NjsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBwb2IgPSB0ZGV2aWNlX1BQXzUxMjsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbHNlCisgICAgICAgICAgICBwb2IgPSB0ZGV2aWNlX0JQOworICAgICAgICBpZiAoKHJpc2luZ19lZGdlX1BTVEFSVCkgJiYgUERPTkUpCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBlbGFwc2VkX3BnbSA9IDA7CisgICAgICAgICAgICBkdXJhdGlvbl9wZ20gPSBwb2I7CisgICAgICAgICAgICBQRE9ORSA9IDEnYjA7CisgICAgICAgICAgICAtPnBkb25lX2V2ZW50OworICAgICAgICAgICAgc3RhcnRfcGdtID0gJHRpbWU7CisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSBQR1NVU1ApCisgICAgYmVnaW4KKyAgICAgICAgaWYgKFBHU1VTUCAmJiAoflBET05FKSkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGRpc2FibGUgcGRvbmVfcHJvY2VzczsKKyAgICAgICAgICAgIGVsYXBzZWRfcGdtID0gJHRpbWUgLSBzdGFydF9wZ207CisgICAgICAgICAgICBkdXJhdGlvbl9wZ20gPSBwb2IgLSBlbGFwc2VkX3BnbTsKKyAgICAgICAgICAgIFBET05FID0gMSdiMDsKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBhbHdheXMgQChwb3NlZGdlIFBHUkVTKQorICAgIGJlZ2luCisgICAgICAgIHN0YXJ0X3BnbSA9ICR0aW1lOworICAgICAgICAtPnBkb25lX2V2ZW50OworICAgIGVuZAorCisgICAgYWx3YXlzIEAocGRvbmVfZXZlbnQpCisgICAgYmVnaW46cGRvbmVfcHJvY2VzcworICAgICAgICBQRE9ORSA9IDEnYjA7CisgICAgICAgICNkdXJhdGlvbl9wZ20gUERPTkUgPSAxJ2IxOworICAgIGVuZAorCisgICAgYWx3YXlzIEAoU0kpCisgICAgYmVnaW4KKyAgICAgICAgaWYgKChJbnN0cnVjdCA9PSBQR1NQKSB8fCAoSW5zdHJ1Y3QgPT0gUEdSUykgfHwKKyAgICAgICAgICAgKEluc3RydWN0ID09IEVSU1ApIHx8IChJbnN0cnVjdCA9PSBFUlJTKSkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIHN0YXJ0X3RzdSA9ICR0aW1lOworICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHBvc2VkZ2UgU0NLKQorICAgIGJlZ2luCisgICAgICAgIGlmICgoSW5zdHJ1Y3QgPT0gUEdTUCkgfHwgKEluc3RydWN0ID09IFBHUlMpIHx8CisgICAgICAgICAgIChJbnN0cnVjdCA9PSBFUlNQKSB8fCAoSW5zdHJ1Y3QgPT0gRVJSUykpCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBlbGFwc2VkX3RzdSA9ICR0aW1lIC0gc3RhcnRfdHN1OworICAgICAgICAgICAgZHVyYXRpb25fdHN1ID0gdGRldmljZV9UU1UgLSBlbGFwc2VkX3RzdTsKKyAgICAgICAgICAgIGlmIChkdXJhdGlvbl90c3UgPiAwKQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBUU1UgPSAxJ2IwOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIFRTVSA9IDEnYjE7CisgICAgICAgICAgICAgICAgJGRpc3BsYXkoIldhcm5pbmcgYXQiLCAkdGltZSk7CisgICAgICAgICAgICAgICAgJGRpc3BsYXkoInRTVSBtYXggdGltZSB2aW9sYXRpb24iKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFRpbWluZyBjb250cm9sIGZvciB0aGUgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgdGltZSB3b2I7CisgICAgYWx3YXlzIEAocG9zZWRnZSBXU1RBUlQpCisgICAgYmVnaW46d2RvbmVfcHJvY2VzcworICAgICAgICB3b2IgPSB0ZGV2aWNlX1dSUjsKKyAgICAgICAgaWYgKFdTVEFSVCAmJiBXRE9ORSkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIFdET05FID0gMSdiMDsKKyAgICAgICAgICAgICN3b2IgV0RPTkUgPSAxJ2IxOworICAgICAgICBlbmQKKyAgICBlbmQKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gUmVzZXQgVGltaW5nCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICB0aW1lIHN0YXJ0bG87CisgICAgdGltZSBzdGFydGhpOworICAgIHRpbWUgZHVyYXRpb25sbzsKKyAgICB0aW1lIGR1cmF0aW9uaGk7CisKKyAgICBhbHdheXMgQChuZWdlZGdlIFJTVE5lZ19pbiBvciBJbnN0cnVjdCkKKyAgICBiZWdpbgorICAgICAgICBpZiAoflJTVE5lZ19pbikKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIFJTVCA9IDEnYjE7CisgICAgICAgICAgICAjMjAwMDAwIFJTVCA9IDEnYjA7ICAvLyAyMDAgbnMKKyAgICAgICAgZW5kCisgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJFU0VUKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgUmVzZXRlZCA9IDEnYjA7CisgICAgICAgICAgICAjMTAwMDAgUmVzZXRlZCA9IDEnYjE7ICAgLy8gIDEwIG5zCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgYWx3YXlzIEAoUlNUX2luIG9yIHJpc2luZ19lZGdlX1Jlc2V0ZWQpIC8vIFJlc2V0IGRvbmUscHJvZ3JhbSB0ZXJtaW5hdGVkCisgICAgYmVnaW4KKyAgICAgICAgaWYgKChSU1RfaW4gJiYgflJTVCkgfHwgKHJpc2luZ19lZGdlX1Jlc2V0ZWQpKQorICAgICAgICAgICAgZGlzYWJsZSBwZG9uZV9wcm9jZXNzOworICAgICAgICAgICAgZGlzYWJsZSBlZG9uZV9wcm9jZXNzOworICAgICAgICAgICAgZGlzYWJsZSB3ZG9uZV9wcm9jZXNzOworICAgICAgICAgICAgUERPTkUgPSAxJ2IxOworICAgICAgICAgICAgRURPTkUgPSAxJ2IxOworICAgICAgICAgICAgV0RPTkUgPSAxJ2IxOworICAgIGVuZAorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBUaW1pbmcgY29udHJvbCBmb3IgdGhlIEJ1bGsgRXJhc2UKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICB0aW1lIHNlbzsKKyAgICB0aW1lIGJlbzsKKyAgICBldmVudCBlZG9uZV9ldmVudDsKKyAgICB0aW1lIGVsYXBzZWRfZXJzOworICAgIHRpbWUgc3RhcnRfZXJzOworICAgIHRpbWUgZHVyYXRpb25fZXJzOworCisgICAgYWx3YXlzIEAocmlzaW5nX2VkZ2VfRVNUQVJUKQorICAgIGJlZ2luCisgICAgICAgIGlmIChVbmlmb3JtU2VjKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgc2VvID0gdGRldmljZV9TRTI1NjsKKyAgICAgICAgZW5kCisgICAgICAgIGVsc2UKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIHNlbyA9IHRkZXZpY2VfU0U2NDsKKyAgICAgICAgZW5kCisgICAgICAgIGJlbyA9IHRkZXZpY2VfQkU7CisgICAgICAgIGlmICgocmlzaW5nX2VkZ2VfRVNUQVJUKSAmJiBFRE9ORSkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBCRSkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgZHVyYXRpb25fZXJzID0gYmVvOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIGR1cmF0aW9uX2VycyA9IHNlbzsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZWxhcHNlZF9lcnMgPSAwOworICAgICAgICAgICAgRURPTkUgPSAxJ2IwOworICAgICAgICAgICAgLT5lZG9uZV9ldmVudDsKKyAgICAgICAgICAgIHN0YXJ0X2VycyA9ICR0aW1lOworICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHBvc2VkZ2UgRVNVU1ApCisgICAgYmVnaW4KKyAgICAgICAgaWYgKEVTVVNQICYmICh+RURPTkUpKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgZGlzYWJsZSBlZG9uZV9wcm9jZXNzOworICAgICAgICAgICAgZWxhcHNlZF9lcnMgPSAkdGltZSAtIHN0YXJ0X2VyczsKKyAgICAgICAgICAgIGR1cmF0aW9uX2VycyA9IHNlbyAtIGVsYXBzZWRfZXJzOworICAgICAgICAgICAgRURPTkUgPSAxJ2IwOworICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHBvc2VkZ2UgRVJFUykKKyAgICBiZWdpbgorICAgICAgICBpZiAgKEVSRVMgJiYgKH5FRE9ORSkpCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBzdGFydF9lcnMgPSAkdGltZTsKKyAgICAgICAgICAgIC0+ZWRvbmVfZXZlbnQ7CisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgYWx3YXlzIEAoZWRvbmVfZXZlbnQpCisgICAgYmVnaW4gOiBlZG9uZV9wcm9jZXNzCisgICAgICAgIEVET05FID0gMSdiMDsKKyAgICAgICAgI2R1cmF0aW9uX2VycyBFRE9ORSA9IDEnYjE7CisgICAgZW5kCisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy8gUHJvY2VzcyBmb3IgY2xvY2sgZnJlcXVlbmN5IGRldGVybWluYXRpb24KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgYWx3YXlzIEAocG9zZWRnZSBTQ0tfaXBkKQorICAgIGJlZ2luIDogY2xvY2tfcGVyaW9kCisgICAgICAgIGlmIChTQ0tfaXBkKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgU0NLX2N5Y2xlID0gJHRpbWUgLSBwcmV2X1NDSzsKKyAgICAgICAgICAgIHByZXZfU0NLID0gJHRpbWU7CisgICAgICAgIGVuZAorICAgIGVuZAorCisvLyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgICAvLyBNYWluIEJlaGF2aW9yIFByb2Nlc3MKKy8vICAgIC8vIGNvbWJpbmF0aW9uYWwgcHJvY2VzcyBmb3IgbmV4dCBzdGF0ZSBnZW5lcmF0aW9uCisvLyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICByZWcgcmlzaW5nX2VkZ2VfUERPTkUgPSAxJ2IwOworICAgIHJlZyByaXNpbmdfZWRnZV9FRE9ORSA9IDEnYjA7CisgICAgcmVnIHJpc2luZ19lZGdlX1dET05FID0gMSdiMDsKKyAgICByZWcgZmFsbGluZ19lZGdlX3dyaXRlID0gMSdiMDsKKyAgICByZWcgZmFsbGluZ19lZGdlX1BQQkVSQVNFX2luID0gMSdiMDsKKyAgICByZWcgZmFsbGluZ19lZGdlX1BBU1NVTENLX2luID0gMSdiMDsKKworICAgIGludGVnZXIgaTsKKyAgICBpbnRlZ2VyIGo7CisKKyAgICBhbHdheXMgQChyaXNpbmdfZWRnZV9Qb3dlcmVkVXAgb3IgZmFsbGluZ19lZGdlX3dyaXRlIG9yCisgICAgICAgICAgICAgZmFsbGluZ19lZGdlX1JTVE5lZyBvciByaXNpbmdfZWRnZV9QRE9ORSBvciByaXNpbmdfZWRnZV9XRE9ORSBvcgorICAgICAgICAgICAgIHJpc2luZ19lZGdlX0VET05FIG9yIEVSU1NVU1Bfb3V0X2V2ZW50IG9yIHJpc2luZ19lZGdlX1JTVE5lZyBvcgorICAgICAgICAgICAgIFBSR1NVU1Bfb3V0X2V2ZW50IG9yIHJpc2luZ19lZGdlX0NTTmVnX2lwZCBvciByaXNpbmdfZWRnZV9SU1Rfb3V0CisgICAgICAgICAgICAgb3IgZmFsbGluZ19lZGdlX1BQQkVSQVNFX2luIG9yIGZhbGxpbmdfZWRnZV9QQVNTVUxDS19pbiBvciBSU1Rfb3V0KQorICAgIGJlZ2luOiBTdGF0ZUdlbjEKKworICAgICAgICBpbnRlZ2VyIHNlY3Q7CisKKyAgICAgICAgaWYgKHJpc2luZ19lZGdlX1Bvd2VyZWRVcCAmJiBSU1ROZWdfaW4gJiYgUlNUX291dCkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGlmIChBQkUgPT0gMSAmJiBSUE1FICE9PSAwICkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSAgICAgPSBBVVRPQk9PVDsKKyAgICAgICAgICAgICAgICByZWFkX2NudCAgICAgICA9IDA7CisgICAgICAgICAgICAgICAgYnl0ZV9jbnQgICAgICAgPSAxOworICAgICAgICAgICAgICAgIHJlYWRfYWRkciAgICAgID0ge0F1dG9Cb290X3JlZ1szMTo5XSwgOSdiMH07CisgICAgICAgICAgICAgICAgc3RhcnRfZGVsYXkgICAgPSBBdXRvQm9vdF9yZWdbODoxXTsKKyAgICAgICAgICAgICAgICBzdGFydF9hdXRvYm9vdCA9IDA7CisgICAgICAgICAgICAgICAgQUJTRCAgICAgICAgICAgPSBBdXRvQm9vdF9yZWdbODoxXTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICBlbmQKKyAgICAgICAgZWxzZSBpZiAoUG93ZXJlZFVwKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgaWYgKFJTVF9vdXQgPT0gMSdiMCkKKyAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gY3VycmVudF9zdGF0ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGZhbGxpbmdfZWRnZV93cml0ZSAmJiBJbnN0cnVjdCA9PSBSRVNFVCkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKEFCRSA9PSAxICYmIFJQTUUgIT09IDApCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgICAgICAgPSAwOworICAgICAgICAgICAgICAgICAgICBieXRlX2NudCAgICAgICA9IDE7CisgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciAgICAgID0ge0F1dG9Cb290X3JlZ1szMTo5XSwgOSdiMH07CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RlbGF5ICAgID0gQXV0b0Jvb3RfcmVnWzg6MV07CisgICAgICAgICAgICAgICAgICAgIEFCU0QgICAgICAgICAgID0gQXV0b0Jvb3RfcmVnWzg6MV07CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2F1dG9ib290ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSAgICAgPSBBVVRPQk9PVDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBjYXNlIChjdXJyZW50X3N0YXRlKQorICAgICAgICAgICAgICAgICAgICBSRVNFVF9TVEFURSA6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJpc2luZ19lZGdlX1JTVF9vdXQgJiYgUlNUTmVnX2luKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgKHJpc2luZ19lZGdlX1JTVE5lZyAmJiBSU1Rfb3V0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFCRSA9PSAxICYmIFJQTUUhPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gQVVUT0JPT1Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICAgICAgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZV9jbnQgICAgICAgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgICAgICA9IHtBdXRvQm9vdF9yZWdbMzE6OV0sOSdiMH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RlbGF5ICAgID0gQXV0b0Jvb3RfcmVnWzg6MV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2F1dG9ib290ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUJTRCAgICAgICAgICAgPSBBdXRvQm9vdF9yZWdbODoxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIElETEUgOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZhbGxpbmdfZWRnZV93cml0ZSAmJiBSZFBzd2RQcm90TW9kZSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gV1JSICYmIFdFTCA9PSAxICYmIEJBUl9BQ0MgPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICgoKH4oU1JXRCA9PSAxICYmIH5XUE5lZ19pbikpJiYgflFVQUQpIHx8IFFVQUQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbiBub3QgZXhlY3V0ZSBpZiBIUE0gaXMgZW50ZXJlZCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIFdFTCBiaXQgaXMgemVybworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChUQlBST1Q9PTEgJiYgQ29uZmlnX3JlZzFfaW5bNV09PTEnYjApIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRCUEFSTT09MSAmJiBDb25maWdfcmVnMV9pblsyXT09MSdiMCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQlBOViAgPT0xICYmIENvbmZpZ19yZWcxX2luWzNdPT0xJ2IwKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmdfd3JpdGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIldBUk5JTkc6IENoYW5naW5nIHZhbHVlIG9mICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJDb25maWd1cmF0aW9uIFJlZ2lzdGVyIE9UUCAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYml0IGZyb20gMSB0byAwIGlzIG5vdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhbGxvd2VkISEhIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gV1JJVEVfU1I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFdSUiAmJiBCQVJfQUNDID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXcml0ZSB0byB0aGUgbG93ZXIgYWRkcmVzcyBiaXRzIG9mIHRoZSBCQVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBfRVJSID09IDAgJiYgRV9FUlIgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoSW5zdHJ1Y3QgPT0gUFAgfHwgSW5zdHJ1Y3QgPT0gUVBQIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IFBQNCB8fCBJbnN0cnVjdCA9PSBRUFA0KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5TZWN0b3JJRChzZWN0LEFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ21fcGFnZSA9IEFkZHJlc3MgLyAoUGFnZVNpemUrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTZWNfUHJvdFtzZWN0XT09IDAgJiYgUFBCX2JpdHNbc2VjdF09PSAxICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEWUJfYml0c1tzZWN0XT09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gUEFHRV9QRzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3Q9PU9UUFAgJiYgV0VMPT0xICYmIEZSRUVaRT09MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCgoKEFkZHJlc3M+PTE2J2gwMDEwICYmIEFkZHJlc3M8PTE2J2gwMDEzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwoQWRkcmVzcz49MTYnaDAwMjAgJiYgQWRkcmVzczw9MTYnaDAwRkYpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgTE9DS19CWVRFMVtBZGRyZXNzLzMyXSA9PSAxKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBZGRyZXNzPj0xNidoMDEwMCAmJiBBZGRyZXNzPD0xNidoMDFGRikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIExPQ0tfQllURTJbKEFkZHJlc3MtMTYnaDAxMDApLzMyXT09MSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQWRkcmVzcz49MTYnaDAyMDAgJiYgQWRkcmVzczw9MTYnaDAyRkYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBMT0NLX0JZVEUzWyhBZGRyZXNzLTE2J2gwMjAwKS8zMl09PTEpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFkZHJlc3M+PTE2J2gwMzAwICYmIEFkZHJlc3M8PTE2J2gwM0ZGKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgTE9DS19CWVRFNFsoQWRkcmVzcy0xNidoMDMwMCkvMzJdID09IDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKEFkZHJlc3MgKyBCeXRlX251bWJlciA8PSBPVFBIaUFkZHIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gIE9UUF9QRzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoSW5zdHJ1Y3QgPT0gU0UgfHwgSW5zdHJ1Y3QgPT0gU0U0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgV0VMID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuU2VjdG9ySUQoc2VjdCxBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFVuaWZvcm1TZWMgfHwgKFRvcEJvb3QgJiYgc2VjdCA8IDUxMCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJvdHRvbUJvb3QgJiYgc2VjdCA+IDMxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTZWNfUHJvdFtzZWN0XT09IDAgJiYgUFBCX2JpdHNbc2VjdF09PSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIERZQl9iaXRzW3NlY3RdPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gIFNFQ1RPUl9FUlM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoVG9wQm9vdCAmJiBzZWN0ID49IDUxMCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQm90dG9tQm9vdCAmJiBzZWN0IDw9IDMxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTZWNfUHJvdFNFID09IDMyICYmIEFTUF9Qcm90U0UgPT0gMzIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1NlY3RvciBlcmFzZSBjb21tYW5kIGlzIGFwcGxpZWQgdG8gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy82NCBLQiByYW5nZSB0aGF0IGluY2x1ZGVzIDQgS0Igc2VjdG9ycy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gIFNFQ1RPUl9FUlM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdCA9PSBQNEUgfHwgSW5zdHJ1Y3QgPT0gUDRFNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIFdFTCA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHVyblNlY3RvcklEKHNlY3QsQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChVbmlmb3JtU2VjIHx8IChUb3BCb290ICYmIHNlY3QgPCA1MTApIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCb3R0b21Cb290ICYmIHNlY3QgPiAzMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSgiVGhlIGluc3RydWN0aW9uIGlzIGFwcGxpZWQgdG8iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJhIHNlY3RvciB0aGF0IGlzIGxhcmdlciB0aGFuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSgiNCBLQi4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJJbnN0cnVjdGlvbiBpcyBpZ25vcmVkISEhIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNlY19Qcm90W3NlY3RdPT0gMCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUEJfYml0c1tzZWN0XT09IDEgJiYgRFlCX2JpdHNbc2VjdF09PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSAgU0VDVE9SX0VSUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gQkUgJiYgV0VMID09IDEgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFN0YXR1c19yZWcxWzRdPT0gMCAmJiBTdGF0dXNfcmVnMVszXT09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzJdPT0gMCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBCVUxLX0VSUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBBQldSICYmIFdFTCA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0F1dG9ib290IFJlZ2lzdGVyIFdyaXRlIENvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IEFVVE9CT09UX1BHOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEJSV1IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQmFuayBSZWdpc3RlciBXcml0ZSBDb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEFTUFAgJiYgV0VMID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9BU1AgUmVnaXN0ZXIgUHJvZ3JhbSBDb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh+KEFTUE9UUEZMQUcpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IEFTUF9QRzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQTEJXUiAmJiBXRUwgPT0gMSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJkUHN3ZFByb3RFbmFibGUgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IFBMQl9QRzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQQVNTUCAmJiBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAofihQV0RNTEI9PSAwICYmIFBTVE1MQj09IDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IFBBU1NfUEc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUEFTU1UgJiYgV0VMICYmIH5XSVApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBQQVNTX1VOTE9DSzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQUEJQICYmIFdFTCA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlIDw9IFBQQl9QRzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQUEJFUlMgJiYgV0VMICYmIFBQQk9UUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA8PSBQUEJfRVJTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IERZQldSICYmIFdFTCA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gRFlCX1BHOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFBOVkRMUiAmJiBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IE5WRExSX1BHOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IElETEU7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmYWxsaW5nX2VkZ2Vfd3JpdGUgJiYgUmRQc3dkUHJvdE1vZGUgPT0gMSAmJiB+V0lQKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gUEFTU1UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBQQVNTX1VOTE9DSzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBBVVRPQk9PVCA6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmlzaW5nX2VkZ2VfQ1NOZWdfaXBkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBXUklURV9TUiA6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmlzaW5nX2VkZ2VfV0RPTkUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IElETEU7CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIFBBR0VfUEcgOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBSR1NVU1Bfb3V0X2V2ZW50ICYmIFBSR1NVU1Bfb3V0ID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IFBHX1NVU1A7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyaXNpbmdfZWRnZV9QRE9ORSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gSURMRTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgUEdfU1VTUCA6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmFsbGluZ19lZGdlX3dyaXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gQlJXUikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9CYW5rIFJlZ2lzdGVyIFdyaXRlIENvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IFBHX1NVU1A7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUEdSUykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IFBBR0VfUEc7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgT1RQX1BHIDoKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyaXNpbmdfZWRnZV9QRE9ORSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gSURMRTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgQlVMS19FUlMgOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJpc2luZ19lZGdlX0VET05FKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBTRUNUT1JfRVJTIDoKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChFUlNTVVNQX291dF9ldmVudCAmJiBFUlNTVVNQX291dCA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBFUlNfU1VTUDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJpc2luZ19lZGdlX0VET05FKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBFUlNfU1VTUCA6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmFsbGluZ19lZGdlX3dyaXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IFBQIHx8IEluc3RydWN0ID09IFFQUCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gUFA0IHx8IEluc3RydWN0ID09IFFQUDQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKFBBUkFNX1JFR0lPTiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY3RvclN1c3BlbmQgIT0gQWRkcmVzcy8oU2VjU2l6ZSsxKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKH5QQVJBTV9SRUdJT04gJiYgU2VjdG9yU3VzcGVuZCAhPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MvKFNlY1NpemUrMSkrMzAqYl9hY3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuU2VjdG9ySUQoc2VjdCxBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnbV9wYWdlID0gQWRkcmVzcyAvIChQYWdlU2l6ZSsxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQUEJfYml0c1tzZWN0XT09IDEgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEWUJfYml0c1tzZWN0XT09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBFUlNfU1VTUF9QRzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBCUldSKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQmFuayBSZWdpc3RlciBXcml0ZSBDb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBFUlNfU1VTUDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBEWUJXUiAmJiBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IERZQl9QRzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICAoSW5zdHJ1Y3QgPT0gRVJSUykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IFNFQ1RPUl9FUlM7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgRVJTX1NVU1BfUEcgOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJpc2luZ19lZGdlX1BET05FKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBFUlNfU1VTUDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKFBSR1NVU1Bfb3V0X2V2ZW50ICYmIFBSR1NVU1Bfb3V0ID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IEVSU19TVVNQX1BHX1NVU1A7CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIEVSU19TVVNQX1BHX1NVU1AgOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJpc2luZ19lZGdlX1BET05FKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBFUlNfU1VTUDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmYWxsaW5nX2VkZ2Vfd3JpdGUpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBCUldSKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSAgRVJTX1NVU1BfUEdfU1VTUDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQR1JTKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSAgRVJTX1NVU1BfUEc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgUEFTU19QRyA6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmIChyaXNpbmdfZWRnZV9QRE9ORSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBQQVNTX1VOTE9DSyA6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmIChmYWxsaW5nX2VkZ2VfUEFTU1VMQ0tfaW4pCisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gSURMRTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgUFBCX1BHIDoKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKHJpc2luZ19lZGdlX1BET05FKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IElETEU7CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIFBQQl9FUlMgOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoZmFsbGluZ19lZGdlX1BQQkVSQVNFX2luKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IElETEU7CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIEFVVE9CT09UX1BHIDoKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKHJpc2luZ19lZGdlX1BET05FKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IElETEU7CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIFBMQl9QRyA6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmIChyaXNpbmdfZWRnZV9QRE9ORSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBEWUJfUEcgOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAocmlzaW5nX2VkZ2VfUERPTkUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRVMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IEVSU19TVVNQOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBBU1BfUEcgOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAocmlzaW5nX2VkZ2VfUERPTkUpCisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gSURMRTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIE5WRExSX1BHIDoKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKHJpc2luZ19lZGdlX1BET05FKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IElETEU7CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgZW5kY2FzZQorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy9GU00gT3V0cHV0IGdlbmVyYXRpb24gYW5kIGdlbmVyYWwgZnVuY3Rpb25hbGl0eQorICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIHJlZyByaXNpbmdfZWRnZV9yZWFkX291dCA9IDEnYjA7CisgICAgcmVnIEluc3RydWN0X2V2ZW50ICAgICAgID0gMSdiMDsKKyAgICByZWcgY2hhbmdlX2FkZHJfZXZlbnQgICAgPSAxJ2IwOworICAgIHJlZyBjdXJyZW50X3N0YXRlX2V2ZW50ICA9IDEnYjA7CisgICAgcmVnIHJpc2luZ19lZGdlX0RQX291dCAgID0gMSdiMDsKKworICAgIGludGVnZXIgV0RhdGEgWzA6NTExXTsKKyAgICBpbnRlZ2VyIFdPVFBEYXRhOworICAgIGludGVnZXIgQWRkcjsKKyAgICBpbnRlZ2VyIEFkZHJfdG1wOworCisgICAgYWx3YXlzIEAoSW5zdHJ1Y3RfZXZlbnQpCisgICAgYmVnaW4KKyAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICBieXRlX2NudCA9IDE7CisgICAgICAgIHJkX2Zhc3QgID0gMSdiMTsKKyAgICAgICAgZHVhbCAgICAgPSAxJ2IwOworICAgICAgICByZF9zbG93ICA9IDEnYjA7CisgICAgICAgIGFueV9yZWFkID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHJpc2luZ19lZGdlX3JlYWRfb3V0KQorICAgIGJlZ2luCisgICAgICAgIGlmIChyaXNpbmdfZWRnZV9yZWFkX291dCA9PSAxJ2IxKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgaWYgKFBvd2VyZWRVcCA9PSAxJ2IxKQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBvZV96ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAjMTAwMCBvZV96ID0gMSdiMDsKKyAgICAgICAgICAgICAgICBvZSA9IDEnYjE7CisgICAgICAgICAgICAgICAgIzEwMDAgb2UgPSAxJ2IwOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgYWx3YXlzIEAoY2hhbmdlX2FkZHJfZXZlbnQpCisgICAgYmVnaW4KKyAgICAgICAgaWYgKGNoYW5nZV9hZGRyX2V2ZW50KQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgcmVhZF9hZGRyID0gQWRkcmVzczsKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBhbHdheXMgQChwb3NlZGdlIFBBU1NBQ0Nfb3V0KQorICAgIGJlZ2luCisgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsgLy9XSVAKKyAgICAgICAgUEFTU0FDQ19pbiA9IDEnYjA7CisgICAgZW5kCisKKyAgICBhbHdheXMgQChJbnN0cnVjdCBvciBwb3NlZGdlIHN0YXJ0X2F1dG9ib290IG9yIG9lIG9yIGN1cnJlbnRfc3RhdGVfZXZlbnQgb3IKKyAgICAgICAgICAgICBmYWxsaW5nX2VkZ2Vfd3JpdGUgb3IgcG9zZWRnZSBQRE9ORSBvciBwb3NlZGdlIFdET05FIG9yIG9lX3ogb3IKKyAgICAgICAgICAgICBwb3NlZGdlIEVET05FIG9yIEVSU1NVU1Bfb3V0IG9yIHJpc2luZ19lZGdlX1Jlc2V0ZWQgb3IKKyAgICAgICAgICAgICByaXNpbmdfZWRnZV9Qb3dlcmVkVXAgb3IgcmlzaW5nX2VkZ2VfQ1NOZWdfaXBkIG9yIFBSR1NVU1Bfb3V0IG9yCisgICAgICAgICAgICAgQWRkcmVzcykKKyAgICBiZWdpbjogRnVuY3Rpb25hbGl0eQorICAgIGludGVnZXIgaSxqOworICAgIGludGVnZXIgc2VjdDsKKworICAgICAgICBpZiAocmlzaW5nX2VkZ2VfUG93ZXJlZFVwKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgLy90aGUgZGVmYXVsdCBjb25kaXRpb24gYWZ0ZXIgcG93ZXItdXAKKyAgICAgICAgICAgIC8vVGhlIEJhbmsgQWRkcmVzcyBSZWdpc3RlciBpcyBsb2FkZWQgdG8gYWxsIHplcm9lcworICAgICAgICAgICAgQmFua19BZGRyX3JlZyA9IDgnaDA7CisgICAgICAgICAgICAvL1RoZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIEZSRUVaRSBiaXQgaXMgY2xlYXJlZC4KKyAgICAgICAgICAgIENvbmZpZ19yZWcxWzBdID0gMDsKKyAgICAgICAgICAgIC8vVGhlIFdFTCBiaXQgaXMgY2xlYXJlZC4KKyAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMDsKKyAgICAgICAgICAgIC8vV2hlbiBCUE5WIGlzIHNldCB0byAnMScuIHRoZSBCUDItMCBiaXRzIGluIFN0YXR1cyBSZWdpc3RlciBhcmUKKyAgICAgICAgICAgIC8vdm9sYXRpbGUgYW5kIHdpbGwgYmUgcmVzZXQgYmluYXJ5IDExMSBhZnRlciBwb3dlci1vbiByZXNldAorICAgICAgICAgICAgaWYgKEJQTlYgPT0gMSAgJiYgRlJFRVpFID09IDAgKSAvLyYmIExPQ0sgPT0gMAorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs0XSA9IDEnYjA7Ly8gQlAyCisgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbM10gPSAxJ2IwOy8vIEJQMQorICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzJdID0gMSdiMDsvLyBCUDAKKyAgICAgICAgICAgICAgICBCUF9iaXRzID0ge1N0YXR1c19yZWcxWzRdLFN0YXR1c19yZWcxWzNdLFN0YXR1c19yZWcxWzJdfTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VfQlAgPSAxJ2IxOworICAgICAgICAgICAgICAgICMxMDAwIGNoYW5nZV9CUCA9IDEnYjA7CisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgLy9BcyBzaGlwcGVkIGZyb20gdGhlIGZhY3RvcnksIGFsbCBkZXZpY2VzIGRlZmF1bHQgQVNQIHRvIHRoZQorICAgICAgICAgICAgLy9QZXJzaXN0ZW50IFByb3RlY3Rpb24gbW9kZSwgd2l0aCBhbGwgc2VjdG9ycyB1bnByb3RlY3RlZCwKKyAgICAgICAgICAgIC8vd2hlbiBwb3dlciBpcyBhcHBsaWVkLiBUaGUgZGV2aWNlIHByb2dyYW1tZXIgb3IgaG9zdCBzeXN0ZW0gbXVzdAorICAgICAgICAgICAgLy90aGVuIGNob29zZSB3aGljaCBzZWN0b3IgcHJvdGVjdGlvbiBtZXRob2QgdG8gdXNlLgorICAgICAgICAgICAgLy9Gb3IgUGVyc2lzdGVudCBQcm90ZWN0aW9uIG1vZGUsIFBQQkxPQ0sgZGVmYXVsdHMgdG8gIjEiCisgICAgICAgICAgICBQUEJMWzBdID0gMSdiMTsKKworICAgICAgICAgICAgLy9BbGwgdGhlIERZQiBwb3dlci11cCBpbiB0aGUgdW5wcm90ZWN0ZWQgc3RhdGUKKyAgICAgICAgICAgIERZQl9iaXRzID0gezU0MnsxJ2IxfX07CisKKyAgICAgICAgZW5kCisKKyAgICAgICAgaWYgKEluc3RydWN0ID09IFJFU0VUKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgLy9FWFRBREQgaXMgY2xlYXJlZCB0byDigJww4oCdCisgICAgICAgICAgICBCYW5rX0FkZHJfcmVnWzddID0gMSdiMDsKKyAgICAgICAgICAgIC8vUF9FUlIgYml0IGlzIGNsZWFyZWQKKyAgICAgICAgICAgIFN0YXR1c19yZWcxWzZdID0gMSdiMDsKKyAgICAgICAgICAgIC8vRV9FUlIgYml0IGlzIGNsZWFyZWQKKyAgICAgICAgICAgIFN0YXR1c19yZWcxWzVdID0gMSdiMDsKKyAgICAgICAgICAgIC8vVGhlIFdFTCBiaXQgaXMgY2xlYXJlZC4KKyAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgIC8vVGhlIFdJUCBiaXQgaXMgY2xlYXJlZC4KKyAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsKKyAgICAgICAgICAgIC8vVGhlIEVTIGJpdCBpcyBjbGVhcmVkLgorICAgICAgICAgICAgU3RhdHVzX3JlZzJbMV0gPSAxJ2IwOworICAgICAgICAgICAgLy9UaGUgUFMgYml0IGlzIGNsZWFyZWQuCisgICAgICAgICAgICBTdGF0dXNfcmVnMlswXSA9IDEnYjA7CisgICAgICAgICAgICAvL1doZW4gQlBOViBpcyBzZXQgdG8gJzEnLiB0aGUgQlAyLTAgYml0cyBpbiBTdGF0dXMKKyAgICAgICAgICAgIC8vUmVnaXN0ZXIgYXJlIHZvbGF0aWxlIGFuZCB3aWxsIGJlIHJlc2V0ZWQgYWZ0ZXIKKyAgICAgICAgICAgIC8vcmVzZXQgY29tbWFuZAorICAgICAgICAgICAgaWYgKEJQTlYgPT0gMSAgJiYgRlJFRVpFID09IDApIC8vJiYgTE9DSz09IDAKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNF0gPSAxJ2IxOworICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzNdID0gMSdiMTsKKyAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsyXSA9IDEnYjE7CisKKyAgICAgICAgICAgICAgICBCUF9iaXRzID0ge1N0YXR1c19yZWcxWzRdLFN0YXR1c19yZWcxWzNdLAorICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMl19OworICAgICAgICAgICAgICAgIGNoYW5nZV9CUCA9IDEnYjE7CisgICAgICAgICAgICAgICAgIzEwMDAgY2hhbmdlX0JQID0gMSdiMDsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKworICAgICAgICBjYXNlIChjdXJyZW50X3N0YXRlKQorICAgICAgICAgICAgSURMRSA6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIEFTUF9Qcm90U0UgPSAwOworICAgICAgICAgICAgICAgIFNlY19Qcm90U0UgPSAwOworCisgICAgICAgICAgICAgICAgaWYgKEJvdHRvbUJvb3QpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgZm9yIChqPTMxO2o+PTA7aj1qLTEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUFBCX2JpdHNbal0gPT0gMSAmJiBEWUJfYml0c1tqXSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1BfUHJvdFNFID0gQVNQX1Byb3RTRSArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTZWNfUHJvdFtqXSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFNFID0gU2VjX1Byb3RTRSArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoVG9wQm9vdCkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBmb3IgKGo9NTQxO2o+PTUxMDtqPWotMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQUEJfYml0c1tqXSA9PSAxICYmIERZQl9iaXRzW2pdID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTUF9Qcm90U0UgPSBBU1BfUHJvdFNFICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNlY19Qcm90W2pdID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90U0UgPSBTZWNfUHJvdFNFICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIChmYWxsaW5nX2VkZ2Vfd3JpdGUgJiYgUmRQc3dkUHJvdE1vZGUgPT0gMSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZihJbnN0cnVjdCA9PSBQQVNTVSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh+V0lQKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQVNTVUxDS19pbiA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gPSAxJ2IxOyAvL1dJUAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiVGhlIFBBU1NVIGNvbW1hbmQgY2Fubm90IGJlIGFjY2VwdGVkIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCIgYW55IGZhc3RlciB0aGFuIG9uY2UgZXZlcnkgMTAwdXMiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gQ0xTUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9UaGUgQ2xlYXIgU3RhdHVzIFJlZ2lzdGVyIENvbW1hbmQgcmVzZXRzIGJpdCBTUjFbNV0KKyAgICAgICAgICAgICAgICAgICAgLy8oRXJhc2UgRmFpbCBGbGFnKSBhbmQgYml0IFNSMVs2XSAoUHJvZ3JhbSBGYWlsIEZsYWcpCisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs1XSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs2XSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgKGZhbGxpbmdfZWRnZV93cml0ZSAmJiBSZFBzd2RQcm90TW9kZSA9PSAwKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnl0ZV9jbnQgPSAxOworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gV1JFTikKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gV1JESSkKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKEluc3RydWN0ID09IFdSUikgJiYgV0VMID09IDEgJiYgV0RPTkUgPT0gMSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkFSX0FDQyA9PSAwKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgofihTUldEID09IDEgJiYgfldQTmVnX2luKSkmJiB+UVVBRCkgfHwgUVVBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoVEJQUk9UPT0xICYmIENvbmZpZ19yZWcxX2luWzVdPT0xJ2IwKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRCUEFSTT09MSAmJiBDb25maWdfcmVnMV9pblsyXT09MSdiMCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCUE5WICA9PTEgJiYgQ29uZmlnX3JlZzFfaW5bM109PTEnYjApKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZnX3dyaXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBfRVJSIGJpdCBpcyBzZXQgdG8gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs2XSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FuIG5vdCBleGVjdXRlIGlmIEhhcmR3YXJlIFByb3RlY3Rpb24gTW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIGVudGVyZWQgb3IgaWYgV0VMIGJpdCBpcyB6ZXJvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdTVEFSVCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdTVEFSVCA8PSAjNSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoSW5zdHJ1Y3QgPT0gUFAgfHwgSW5zdHJ1Y3QgPT0gUFA0KSAmJiBXRUwgPT0xICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRE9ORSA9PSAxICkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJldHVyblNlY3RvcklEKHNlY3QsQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU2VjX1Byb3Rbc2VjdF0gPT0gMCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQQl9iaXRzW3NlY3RdPT0gMSAmJiBEWUJfYml0c1tzZWN0XT09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTVEFSVCAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTVEFSVCA8PSAjNSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBHU1VTUCAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBHUkVTICAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOSVRJQUxfQ09ORklHID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0EgICAgICA9IHNlY3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkciAgICA9IEFkZHJlc3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcl90bXA9IEFkZHJlc3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfY250ICA9IEJ5dGVfbnVtYmVyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaT13cl9jbnQ7aT49MDtpPWktMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVmlvbCAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0RhdGFbaV0gPSAtMTsKKwkJCSAgICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdEYXRhW2ldID0gV0J5dGVbaV07CisJCQkJCS8vJGRpc3BsYXkoIiVtOiBMb2M6ICV4IFdEYXRhOiAleCIsaSxXRGF0YVtpXSk7CisJCQkgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9QX0VSUiBiaXQgd2lsbCBiZSBzZXQgd2hlbiB0aGUgdXNlciBhdHRlbXB0cyB0bworICAgICAgICAgICAgICAgICAgICAgICAgLy90byBwcm9ncmFtIHdpdGhpbiBhIHByb3RlY3RlZCBtYWluIG1lbW9yeSBzZWN0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs2XSA9IDEnYjE7IC8vUF9FUlIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDEnYjA7IC8vV0VMCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdCA9PSBRUFAgfHwgSW5zdHJ1Y3QgPT0gUVBQNCkgJiYgV0VMID09MSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUERPTkUgPT0gMSApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5TZWN0b3JJRChzZWN0LEFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgcGdtX3BhZ2UgPSBBZGRyZXNzIC8gKFBhZ2VTaXplKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNlY19Qcm90W3NlY3RdID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUEJfYml0c1tzZWN0XT09IDEgJiYgRFlCX2JpdHNbc2VjdF09PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU1RBUlQgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU1RBUlQgPD0gIzUgMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQR1NVU1AgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQR1JFUyAgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTklUSUFMX0NPTkZJRyA9IDE7CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBRUFBfcGFnZVtwZ21fcGFnZV0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQSAgICAgID0gc2VjdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyICAgID0gQWRkcmVzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyX3RtcD0gQWRkcmVzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9jbnQgID0gQnl0ZV9udW1iZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpPXdyX2NudDtpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChWaW9sICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRGF0YVtpXSA9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRGF0YVtpXSA9IFdCeXRlW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9QX0VSUiBiaXQgd2lsbCBiZSBzZXQgd2hlbiB0aGUgdXNlciBhdHRlbXB0cyB0bworICAgICAgICAgICAgICAgICAgICAgICAgLy90byBwcm9ncmFtIHdpdGhpbiBhIHByb3RlY3RlZCBtYWluIG1lbW9yeSBzZWN0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs2XSA9IDEnYjE7IC8vUF9FUlIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDEnYjA7IC8vV0VMCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IE9UUFAgJiYgV0VMID09IDEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBBcyBsb25nIGFzIHRoZSBGUkVFWkUgYml0IHJlbWFpbnMgY2xlYXJlZCB0byBhIGxvZ2ljCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAnMCcgdGhlIE9UUCBhZGRyZXNzIHNwYWNlIGlzIHByb2dyYW1tYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChGUkVFWkUgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoKChBZGRyZXNzPj0gMTYnaDAwMTAgJiYgQWRkcmVzczw9IDE2J2gwMDEzKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQWRkcmVzcyA+PSAxNidoMDAyMCAmJiBBZGRyZXNzIDw9IDE2J2gwMEZGKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgTE9DS19CWVRFMVtBZGRyZXNzLzMyXSA9PSAxKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFkZHJlc3MgPj0gMTYnaDAxMDAgJiYgQWRkcmVzcyA8PSAxNidoMDFGRikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgTE9DS19CWVRFMlsoQWRkcmVzcy0xNidoMDEwMCkvMzJdID09IDEpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQWRkcmVzcyA+PSAxNidoMDIwMCAmJiBBZGRyZXNzIDw9IDE2J2gwMkZGKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBMT0NLX0JZVEUzWyhBZGRyZXNzLTE2J2gwMjAwKS8zMl0gPT0gMSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBZGRyZXNzID49IDE2J2gwMzAwICYmIEFkZHJlc3MgPD0gMTYnaDAzRkYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIExPQ0tfQllURTRbKEFkZHJlc3MtMTYnaDAzMDApLzMyXSA9PSAxKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFkZHJlc3MgKyBCeXRlX251bWJlciA8PSBPVFBIaUFkZHIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTVEFSVCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTVEFSVCA8PSAjNSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHIgICAgPSBBZGRyZXNzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyX3RtcD0gQWRkcmVzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfY250ICA9IEJ5dGVfbnVtYmVyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGk9d3JfY250O2k+PTA7aT1pLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVmlvbCAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdEYXRhW2ldID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0RhdGFbaV0gPSBXQnl0ZVtpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKEFkZHJlc3MgPCA4J2gxMCB8fCAoQWRkcmVzcyA+IDgnaDEzICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzIDwgOCdoMjApIHx8IEFkZHJlc3MgPiAxMidoM0ZGICkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNl0gPSAxJ2IxOy8vUF9FUlIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOy8vV0VMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBZGRyZXNzIDwgOCdoMjApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIkdpdmVuICBhZGRyZXNzIGlzICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJpbiByZXNlcnZlZCBhZGRyZXNzIHJhbmdlIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBZGRyZXNzID4gMTInaDNGRikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiR2l2ZW4gIGFkZHJlc3MgaXMgIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIm91dCBvZiBPVFAgYWRkcmVzcyByYW5nZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1BfRVJSIGJpdCB3aWxsIGJlIHNldCB3aGVuIHRoZSB1c2VyIGF0dGVtcHRzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gcHJvZ3JhbSB3aXRoaW4gbG9ja2VkIE9UUCByZWdpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNl0gPSAxJ2IxOy8vUF9FUlIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOy8vV0VMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1BfRVJSIGJpdCB3aWxsIGJlIHNldCB3aGVuIHRoZSB1c2VyIGF0dGVtcHRzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAvL3RvIHByb2dyYW0gd2l0aGluIGxvY2tlZCBPVFAgcmVnaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNl0gPSAxJ2IxOy8vUF9FUlIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDEnYjA7Ly9XRUwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKEluc3RydWN0ID09IFNFIHx8IEluc3RydWN0ID09IFNFNCkgJiYgV0VMID09IDEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5TZWN0b3JJRChzZWN0LEFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFVuaWZvcm1TZWMgfHwgKFRvcEJvb3QgJiYgc2VjdCA8IDUxMCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChCb3R0b21Cb290ICYmIHNlY3QgPiAzMSkpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY3RvclN1c3BlbmQgPSBzZWN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBUkFNX1JFR0lPTiAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTZWNfUHJvdFtzZWN0XSA9PSAwICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFBCX2JpdHNbc2VjdF09PSAxICYmIERZQl9iaXRzW3NlY3RdPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFU1RBUlQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFU1RBUlQgPD0gIzUgMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNVU1AgICAgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVJFUyAgICAgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5JVElBTF9DT05GSUcgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHIgPSBBZGRyZXNzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vRV9FUlIgYml0IHdpbGwgYmUgc2V0IHdoZW4gdGhlIHVzZXIgYXR0ZW1wdHMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2VyYXNlIGFuIGluZGl2aWR1YWwgcHJvdGVjdGVkIG1haW4gbWVtb3J5IHNlY3RvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs1XSA9IDEnYjE7Ly9FX0VSUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDEnYjA7Ly9XRUwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKFRvcEJvb3QgJiYgc2VjdCA+PSA1MTApIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCb3R0b21Cb290ICYmIHNlY3QgPD0gMzEpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU2VjX1Byb3RTRSA9PSAzMiAmJiBBU1BfUHJvdFNFID09IDMyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vU2VjdG9yIGVyYXNlIGNvbW1hbmQgaXMgYXBwbGllZCB0byBhIDY0IEtCIHJhbmdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90aGF0IGluY2x1ZGVzIDQgS0Igc2VjdG9ycworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUb3BCb290KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjdG9yU3VzcGVuZCA9IDUxMCArICg1NDEgLSBzZWN0KS8xNjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY3RvclN1c3BlbmQgPSBzZWN0LzE2OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFSQU1fUkVHSU9OICA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTVEFSVCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTVEFSVCA8PSAjNSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFU1VTUCAgICAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUkVTICAgICAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTklUSUFMX0NPTkZJRyA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkciA9IEFkZHJlc3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9FX0VSUiBiaXQgd2lsbCBiZSBzZXQgd2hlbiB0aGUgdXNlciBhdHRlbXB0cyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZXJhc2UgYW4gaW5kaXZpZHVhbCBwcm90ZWN0ZWQgbWFpbiBtZW1vcnkgc2VjdG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzVdID0gMSdiMTsvL0VfRVJSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsvL1dFTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoSW5zdHJ1Y3QgPT0gUDRFIHx8IEluc3RydWN0ID09IFA0RTQpICYmIFdFTCA9PSAxKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuU2VjdG9ySUQoc2VjdCxBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChVbmlmb3JtU2VjIHx8IChUb3BCb290ICYmIHNlY3QgPCA1MTApIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoQm90dG9tQm9vdCAmJiBzZWN0ID4gMzEpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDEnYjA7Ly9XRUwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU2VjX1Byb3Rbc2VjdF0gPT0gMCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUEJfYml0c1tzZWN0XT09IDEgJiYgRFlCX2JpdHNbc2VjdF09PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQSBQNEUgaW5zdHJ1Y3Rpb24gYXBwbGllZCB0byBhIHNlY3RvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhhdCBoYXMgYmVlbiBXcml0ZSBQcm90ZWN0ZWQgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0Jsb2NrIFByb3RlY3QgQml0cyBvciBBU1Agd2lsbCBub3QgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2V4ZWN1dGVkIGFuZCB3aWxsIHNldCB0aGUgRV9FUlIgc3RhdHVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNUQVJUID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTVVNQICAgICA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVSRVMgICAgICA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOSVRJQUxfQ09ORklHID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyID0gQWRkcmVzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0VfRVJSIGJpdCB3aWxsIGJlIHNldCB3aGVuIHRoZSB1c2VyIGF0dGVtcHRzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9lcmFzZSBhbiBpbmRpdmlkdWFsIHByb3RlY3RlZCBtYWluIG1lbW9yeSBzZWN0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNV0gPSAxJ2IxOy8vRV9FUlIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOy8vV0VMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEJFICYmIFdFTCA9PSAxKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFN0YXR1c19yZWcxWzRdPT0gMCAmJiBTdGF0dXNfcmVnMVszXT09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsyXT09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTVEFSVCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNVU1AgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUkVTICAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOSVRJQUxfQ09ORklHID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1RoZSBCdWxrIEVyYXNlIGNvbW1hbmQgd2lsbCBub3Qgc2V0IEVfRVJSIGlmIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJvdGVjdGVkIHNlY3RvciBpcyBmb3VuZCBkdXJpbmcgdGhlIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vZXhlY3V0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsvL1dFTAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQQVNTUCAmJiBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh+KFBXRE1MQj09IDAgJiYgUFNUTUxCPT0gMSkpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTVEFSVCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiUGFzc3dvcmQgcHJvZ3JhbW1pbmcgaXMgbm90IGFsbG93ZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiBpbiBQYXNzd29yZCBQcm90ZWN0aW9uIE1vZGUuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFBBU1NVICAmJiBXRUwpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAofldJUCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFTU1VMQ0tfaW4gPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMTsgLy9XSVAKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIlRoZSBQQVNTVSBjb21tYW5kIGNhbm5vdCBiZSBhY2NlcHRlZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiIGFueSBmYXN0ZXIgdGhhbiBvbmNlIGV2ZXJ5IDEwMHVzIik7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEJSV1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBCYW5rX0FkZHJfcmVnWzddID0gQmFua19BZGRyX3JlZ19pbls3XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhbmtfQWRkcl9yZWdbMF0gPSBCYW5rX0FkZHJfcmVnX2luWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoQmFua19BZGRyX3JlZ19pblsxXSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIldBUk5JTkc6IENoYW5naW5nIHZhbHVlcyBvZiAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIkJhbmsgQWRkcmVzcyBSZWdpc3RlciIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiQkEyNSBpcyBub3QgYWxsb3dlZCEhISIpOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBXUlIgJiYgQkFSX0FDQyA9PSAxKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvLyBXcml0ZSB0byB0aGUgbG93ZXIgYWRkcmVzcyBiaXRzIG9mIHRoZSBCQVIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQX0VSUiA9PSAwICYmIEVfRVJSID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhbmtfQWRkcl9yZWdbMF0gPSBCYW5rX0FkZHJfcmVnX2luWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEJhbmtfQWRkcl9yZWdfaW5bMV0gPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIldBUk5JTkc6IENoYW5naW5nIHZhbHVlcyBvZiAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJCYW5rIEFkZHJlc3MgUmVnaXN0ZXIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJCQTI1IGlzIG5vdCBhbGxvd2VkISEhIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEFTUFAgICYmIFdFTCA9PSAxKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH4oQVNQT1RQRkxBRykpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTVEFSVCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzZdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIk9uY2UgdGhlIFByb3RlY3Rpb24gTW9kZSBpcyBzZWxlY3RlZCwiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIm5vIGZ1cnRoZXIgY2hhbmdlcyB0byB0aGUgQVNQICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgicmVnaXN0ZXIgaXMgYWxsb3dlZC4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gQUJXUiAgJiYgV0VMID09IDEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBQU1RBUlQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQUEJQICAmJiBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJldHVyblNlY3RvcklEKHNlY3QsQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBQU1RBUlQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQUEJFUlMgICYmIFdFTCA9PSAxKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBQQk9UUCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFBCRVJBU0VfaW4gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNV0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQTEJXUiAgJiYgV0VMID09IDEgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmRQc3dkUHJvdEVuYWJsZSA9PSAwKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBTVEFSVCA8PSAjNSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gRFlCV1IgICYmIFdFTCA9PSAxKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuU2VjdG9ySUQoc2VjdCxBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBnbV9wYWdlID0gQWRkcmVzcyAvIChQYWdlU2l6ZSsxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBTVEFSVCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBQU1RBUlQgPD0gIzUgMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFBOVkRMUiAgJiYgV0VMID09IDEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBQU1RBUlQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBXVkRMUiAgJiYgV0VMID09IDEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBWRExSX3JlZyA9IFZETFJfcmVnX2luOworICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gQ0xTUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9UaGUgQ2xlYXIgU3RhdHVzIFJlZ2lzdGVyIENvbW1hbmQgcmVzZXRzIGJpdCBTUjFbNV0KKyAgICAgICAgICAgICAgICAgICAgLy8oRXJhc2UgRmFpbCBGbGFnKSBhbmQgYml0IFNSMVs2XSAoUHJvZ3JhbSBGYWlsIEZsYWcpCisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs1XSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs2XSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBCUkFDICYmIFBfRVJSID09IDAgJiYgRV9FUlIgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJBUl9BQ0MgPSAxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgQkFSX0FDQyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9lX3opCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJFQUQgfHwgSW5zdHJ1Y3QgPT0gUkQ0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBSRVMgIHx8CisgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdCA9PSBETFBSRCAmJiBSZFBzd2RQcm90TW9kZSA9PSAwKSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gRERSRlIgfHwgSW5zdHJ1Y3QgPT0gRERSRlI0KQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBERFJESU9SIHx8IEluc3RydWN0ID09IEREUkRJT1I0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIFFVQUQpKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBET1IgIHx8IEluc3RydWN0ID09IERPUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IERJT1IgfHwgSW5zdHJ1Y3QgPT0gRElPUjQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSW5zdHJ1Y3QgPT0gUU9SICB8fCBJbnN0cnVjdCA9PSBRT1I0ICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBRSU9SIHx8IEluc3RydWN0ID09IFFJT1I0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBRVUFEKSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChvZSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBhbnlfcmVhZCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBSRFNSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEU1IyKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzJbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEQ1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQ29uZmlnX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEVDQ1JEKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIEVDQyBSZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IEVDQ1NSWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRUFEIHx8IEluc3RydWN0ID09IFJENCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IEZTVFJEIHx8IEluc3RydWN0ID09IEZTVFJENCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IEREUkZSIHx8IEluc3RydWN0ID09IEREUkZSNCApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgTWVtb3J5IGFycmF5CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gUkVBRCB8fCBJbnN0cnVjdCA9PSBSRDQpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBERFJGUiB8fCBJbnN0cnVjdCA9PSBERFJGUjQpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUkZSIHx8IEluc3RydWN0ID09IEREUkZSNCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVkRMUl9yZWcgIT0gOCdiMDAwMDAwMDApICYmIHN0YXJ0X2RscCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YSBMZWFybmluZyBQYXR0ZXJuIChETFApIGlzIGVuYWJsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPcHRpb25hbCBETFAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX291dFs3OjBdID0gVkRMUl9yZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyX3RtcCA9IHJlYWRfYWRkcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWNBZGRyID0gcmVhZF9hZGRyLyhTZWNTaXplKzEpIDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWNfYWRkciA9IHJlYWRfYWRkciAtIFNlY0FkZHIqKFNlY1NpemUrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjQWRkciA9IFJldHVyblNlY3RvcklEUmRQc3dkTWQoVEJQUk9UKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSBTZWNfYWRkciArIFNlY0FkZHIqKFNlY1NpemUrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJkUHN3ZFByb3RNb2RlID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyX3RtcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTWVtW3JlYWRfYWRkcl0gIT09IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfb3V0Wzc6MF0gPSBNZW1bcmVhZF9hZGRyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgPSA4J2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfYWRkciA9PSBBZGRyUkFOR0UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSByZWFkX2FkZHIgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBET1IgIHx8IEluc3RydWN0ID09IERPUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gRElPUiB8fCBJbnN0cnVjdCA9PSBESU9SNCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IEREUkRJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSRElPUjQgKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIE1lbW9yeSBhcnJheQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IEREUkRJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSRElPUjQpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUkRJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSRElPUjQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFZETFJfcmVnICE9IDgnYjAwMDAwMDAwKSAmJiBzdGFydF9kbHApCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IFZETFJfcmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkcl90bXAgPSByZWFkX2FkZHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjQWRkciA9IHJlYWRfYWRkci8oU2VjU2l6ZSsxKSA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjX2FkZHIgPSByZWFkX2FkZHIgLSBTZWNBZGRyKihTZWNTaXplKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY0FkZHIgPSBSZXR1cm5TZWN0b3JJRFJkUHN3ZE1kKFRCUFJPVCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gU2VjX2FkZHIgKyBTZWNBZGRyKihTZWNTaXplKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSZFBzd2RQcm90TW9kZSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSByZWFkX2FkZHJfdG1wOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE1lbVtyZWFkX2FkZHJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBkYXRhX291dFs3LTIqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkID0gZGF0YV9vdXRbNi0yKnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2FkZHIgPT0gQWRkclJBTkdFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKEluc3RydWN0ID09IFFPUiAgfHwgSW5zdHJ1Y3QgPT0gUU9SNCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IFFJT1IgfHwgSW5zdHJ1Y3QgPT0gUUlPUjQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBERFJRSU9SIHx8IEluc3RydWN0ID09IEREUlFJT1I0ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBRVUFEKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIE1lbW9yeSBhcnJheQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFZETFJfcmVnICE9IDgnYjAwMDAwMDAwKSAmJiBzdGFydF9kbHApCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEgTGVhcm5pbmcgUGF0dGVybiAoRExQKSBpcyBlbmFibGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3B0aW9uYWwgRExQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IFZETFJfcmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPTEROZWdPdXRfemQgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUE5lZ091dF96ZCAgID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICA9IGRhdGFfb3V0WzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyX3RtcCA9IHJlYWRfYWRkcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWNBZGRyID0gcmVhZF9hZGRyLyhTZWNTaXplKzEpIDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWNfYWRkciA9IHJlYWRfYWRkciAtIFNlY0FkZHIqKFNlY1NpemUrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjQWRkciA9IFJldHVyblNlY3RvcklEUmRQc3dkTWQoVEJQUk9UKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSBTZWNfYWRkciArIFNlY0FkZHIqKFNlY1NpemUrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJkUHN3ZFByb3RNb2RlID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkcl90bXA7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX291dFs3OjBdID0gTWVtW3JlYWRfYWRkcl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IGRhdGFfb3V0WzctNCpyZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IGRhdGFfb3V0WzYtNCpyZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgID0gZGF0YV9vdXRbNS00KnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgID0gZGF0YV9vdXRbNC00KnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2FkZHIgPT0gQWRkclJBTkdFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gT1RQUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlYWRfYWRkcj49T1RQTG9BZGRyICYmIHJlYWRfYWRkcjw9T1RQSGlBZGRyCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBSZFBzd2RQcm90TW9kZSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBPVFAgTWVtb3J5IGFycmF5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE9UUE1lbVtyZWFkX2FkZHJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSByZWFkX2FkZHIgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgocmVhZF9hZGRyID4gT1RQSGlBZGRyKXx8KFJkUHN3ZFByb3RNb2RlPT0xKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL09UUCBSZWFkIG9wZXJhdGlvbiB3aWxsIG5vdCB3cmFwIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgLy9zdGFydGluZyBhZGRyZXNzIGFmdGVyIHRoZSBPVFAgYWRkcmVzcyBpcyBhdAorICAgICAgICAgICAgICAgICAgICAgICAgLy9pdHMgbWF4aW11bSBvciBSZWFkIFBhc3N3b3JkIFByb3RlY3Rpb24gTW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgLy9pcyBzZWxlY3RlZCBpbnN0ZWFkLCB0aGUgZGF0YSBiZXlvbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvL21heGltdW0gT1RQIGFkZHJlc3Mgd2lsbCBiZSB1bmRlZmluZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IDEnYlg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkVNUykKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBNYW51ZmFjdHVyZXIgYW5kIERldmljZSBJRAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfYWRkciAlIDIgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE1hbnVmX0lEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IERldmljZUlEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJESUQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZGVudF9vdXQgPSBDRklfYXJyYXlfdG1wOworICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVhZF9jbnQgPCA2NDgpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBpZGVudF9vdXRbNjQ3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCAgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL0NvbnRpbnVlZCBzaGlmdGluZyBvZiBvdXRwdXQgYmV5b25kIHRoZSBlbmQgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhlIGRlZmluZWQgSUQtQ0ZJIGFkZHJlc3Mgc3BhY2Ugd2lsbAorICAgICAgICAgICAgICAgICAgICAgICAgLy9wcm92aWRlIHVuZGVmaW5lZCBkYXRhLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSAxJ2JYOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRVMpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfb3V0ID0gRVNpZ25hdHVyZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gRExQUkQgJiYgUmRQc3dkUHJvdE1vZGUgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIERMUAorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gVkRMUl9yZWdbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEFCUkQgJiYgUmRQc3dkUHJvdE1vZGUgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIEF1dG9Cb290IHJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBBdXRvQm9vdF9yZWdfaW5bMzEtcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDMyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEJSUkQgJiYgUmRQc3dkUHJvdE1vZGUgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIEJhbmsgQWRkcmVzcyBSZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQmFua19BZGRyX3JlZ1s3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEFTUFJEICYmIFJkUHN3ZFByb3RNb2RlID09IDApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBBU1AgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IEFTUF9yZWdbMTUtcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDE2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFBBU1NSRCAmJiBSZFBzd2RQcm90TW9kZSA9PSAwKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgUGFzc3dvcmQgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh+KFBXRE1MQiA9PSAwICYmIFBTVE1MQiA9PSAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc3dvcmRfcmVnWyg4KmJ5dGVfY250LTEpLXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCAgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlX2NudCA9IGJ5dGVfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGVfY250ID09IDkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlX2NudCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFBMQlJEKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgUFBCIExvY2sgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFBQQkxbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCAgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBEWUJSRCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIERZQiBBY2Nlc3MgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIFJldHVyblNlY3RvcklEKHNlY3QsQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBwZ21fcGFnZSA9IEFkZHJlc3MgLyAoUGFnZVNpemUrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIERZQkFSWzc6MF0gPSA4J2JYWFhYWFhYWDsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJkUHN3ZFByb3RNb2RlID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEWUJfYml0c1tzZWN0XSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEWUJBUls3OjBdID0gOCdoRkY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERZQkFSWzc6MF0gPSA4J2gwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gRFlCQVJbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCAgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQUEJSRCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFBQQiBBY2Nlc3MgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIFJldHVyblNlY3RvcklEKHNlY3QsQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBQQkFSWzc6MF0gPSA4J2JYWFhYWFhYWDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSZFBzd2RQcm90TW9kZSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUFBCX2JpdHNbc2VjdF0gPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFBCQVJbNzowXSA9IDgnaEZGOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUEJBUls3OjBdID0gOCdoMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFBQQkFSWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBBVVRPQk9PVDoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKHN0YXJ0X2F1dG9ib290ID09IDEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG9lKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgYW55X3JlYWQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFFVQUQgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFCU0QgPiAwKSAgICAgIC8vSWYgQUJTRCA+IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4gICAgICAgICAgICAgIC8vbWF4IFNDSyBmcmVxdWVuY3kgaXMgMTA0TUh6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgLy8gSWYgQUJTRCA9IDAsIG1heCBTQ0sgZnJlcXVlbmN5IGlzIDUwIE1IegorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfb3V0Wzc6MF0gPSBNZW1bcmVhZF9hZGRyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gZGF0YV9vdXRbNy00KnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUE5lZ091dF96ZCAgID0gZGF0YV9vdXRbNi00KnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgPSBkYXRhX291dFs1LTQqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkICAgPSBkYXRhX291dFs0LTQqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQUJTRCA+IDApICAgICAgLy9JZiBBQlNEID4gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbiAgICAgICAgICAgICAgLy9tYXggU0NLIGZyZXF1ZW5jeSBpcyAxMzNNSHoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAvLyBJZiBBQlNEID0gMCwgbWF4IFNDSyBmcmVxdWVuY3kgaXMgNTAgTUh6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE1lbVtyZWFkX2FkZHJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9lX3opCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUVVBRCA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQUJTRCA+IDApICAgICAgLy9JZiBBQlNEID4gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbiAgICAgICAgICAgICAgLy9tYXggU0NLIGZyZXF1ZW5jeSBpcyAxMDRNSHoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAvLyBJZiBBQlNEID0gMCwgbWF4IFNDSyBmcmVxdWVuY3kgaXMgNTAgTUh6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFCU0QgPiAwKSAgICAgIC8vSWYgQUJTRCA+IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4gICAgICAgICAgICAgIC8vbWF4IFNDSyBmcmVxdWVuY3kgaXMgMTMzTUh6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgLy8gSWYgQUJTRCA9IDAsIG1heCBTQ0sgZnJlcXVlbmN5IGlzIDUwIE1IegorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgV1JJVEVfU1I6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGlmIChvZSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBhbnlfcmVhZCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBSRFNSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRTUjIpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMgorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcyWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRENSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IENvbmZpZ19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9lX3opCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAoV0RPTkUgPT0gMSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7IC8vV0lQCisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsgLy9XRUwKKyAgICAgICAgICAgICAgICAgICAgLy9TUldEIGJpdAorICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs3XSA9IFN0YXR1c19yZWcxX2luWzddOyAvL01TQiBmaXJzdAorCisvLyAgICAgICAgICAgICAgICAgICAgIGlmIChMT0NLID09IDApCisvLyAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRlJFRVpFID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAvL1RoZSBGcmVlemUgQml0LCB3aGVuIHNldCB0byAxLCBsb2NrcyB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgICAgICAgICAgLy9zdGF0ZSBvZiB0aGUgQlAyLTAgYml0cyBpbiBTdGF0dXMgUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAvL3RoZSBUQlBST1QgYW5kIFRCUEFSTSBiaXRzIGluIHRoZSBDb25maWcgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vQXMgbG9uZyBhcyB0aGUgRlJFRVpFIGJpdCByZW1haW5zIGNsZWFyZWQgdG8gbG9naWMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vJzAnLCB0aGUgb3RoZXIgYml0cyBvZiB0aGUgQ29uZmlndXJhdGlvbiByZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgLy9pbmNsdWRpbmcgRlJFRVpFIGFyZSB3cml0ZWFibGUuCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzRdID0gU3RhdHVzX3JlZzFfaW5bNF07Ly9CUDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVszXSA9IFN0YXR1c19yZWcxX2luWzNdOy8vQlAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMl0gPSBTdGF0dXNfcmVnMV9pblsyXTsvL0JQMAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlBfYml0cyA9IHtTdGF0dXNfcmVnMVs0XSxTdGF0dXNfcmVnMVszXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzJdfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVEJQUk9UID09IDEnYjAgJiYgSU5JVElBTF9DT05GSUcgPT0gMSdiMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25maWdfcmVnMVs1XSA9IENvbmZpZ19yZWcxX2luWzVdOy8vVEJQUk9UCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRCUEFSTSA9PSAxJ2IwICYmIElOSVRJQUxfQ09ORklHID09IDEnYjAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wX2NoYXIyID09ICIwIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25maWdfcmVnMVsyXSA9IENvbmZpZ19yZWcxX2luWzJdOy8vVEJQQVJNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9UQlBBUk0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMTAwMCBjaGFuZ2VfVEJQQVJNID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VfQlAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxMDAwIGNoYW5nZV9CUCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKy8vICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgQ29uZmlnX3JlZzFbN10gPSBDb25maWdfcmVnMV9pbls3XTsvL0xDMQorICAgICAgICAgICAgICAgICAgICBDb25maWdfcmVnMVs2XSA9IENvbmZpZ19yZWcxX2luWzZdOy8vTEMwCisgICAgICAgICAgICAgICAgICAgIENvbmZpZ19yZWcxWzFdID0gQ29uZmlnX3JlZzFfaW5bMV07Ly9RVUFECisKKyAgICAgICAgICAgICAgICAgICAgaWYgKEZSRUVaRSA9PSAxJ2IwKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnX3JlZzFbMF0gPSBDb25maWdfcmVnMV9pblswXTsvL0ZSRUVaRQorICAgICAgICAgICAgICAgICAgICBlbmQKKworLy8gICAgICAgICAgICAgICAgICAgICBpZiAoV1JMT0NLRU5BQkxFPT0gMSdiMSAmJiBMT0NLID09IDEnYjApCisvLyAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisvLyAgICAgICAgICAgICAgICAgICAgICAgICBDb25maWdfcmVnMVs0XSA9IENvbmZpZ19yZWcxX2luWzRdOy8vTE9DSworLy8gICAgICAgICAgICAgICAgICAgICAgICAgV1JMT0NLRU5BQkxFID0gMSdiMDsKKy8vICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGlmIChCUE5WID09IDEnYjApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBDb25maWdfcmVnMVszXSA9IENvbmZpZ19yZWcxX2luWzNdOy8vQlBOVgorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBQQUdFX1BHIDoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgaWYgKG9lKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGFueV9yZWFkID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJEU1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRFNSMikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlciAyCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzJbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEQ1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQ29uZmlnX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2VfeikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmKGN1cnJlbnRfc3RhdGVfZXZlbnQgJiYgY3VycmVudF9zdGF0ZSA9PSBQQUdFX1BHKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+UERPTkUpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBBRERSSElMT19QRyhBZGRyTG8sIEFkZHJIaSwgQWRkcik7CisgICAgICAgICAgICAgICAgICAgICAgICBjbnQgPSAwOworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MDtpPD13cl9jbnQ7aT1pKzEpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19pbnQgPSBXRGF0YVtpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfaW50ID0gTWVtW0FkZHIgKyBpIC0gY250XTsKKwkJCSAgICAvLyRkaXNwbGF5KCIlbTogTmV3IExvYzogJXggTmV3IERhdGE6ICV4IE9sZCBEYXRhOiAleCIsaSxuZXdfaW50LG9sZF9pbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdfaW50ID4gLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2JpdCA9IG5ld19pbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbGRfaW50ID4gLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfYml0ID0gb2xkX2ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihqPTA7ajw9NztqPWorMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH5vbGRfYml0W2pdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfYml0W2pdPTEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19pbnQ9bmV3X2JpdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdEYXRhW2ldPSBuZXdfaW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRGF0YVtpXSA9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVtW0FkZHIgKyBpIC0gY250XSA9IC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEFkZHIgKyBpKSA9PSBBZGRySGkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyID0gQWRkckxvOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbnQgPSBpICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgY250ID0gMDsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIChQRE9ORSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgcXVhZF9wZyAgICAgICAgPSAwOworICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MDtpPD13cl9jbnQ7aT1pKzEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBNZW1bQWRkcl90bXAgKyBpIC0gY250XSA9IFdEYXRhW2ldOworCQkJLy8kZGlzcGxheSgiJW0gPT4gU0ZMQVNIIFdSIEFkZHJlc3M6ICV4IERhdGE6ICV4IixBZGRyX3RtcCArIGkgLSBjbnQsIFdEYXRhW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoQWRkcl90bXAgKyBpKSA9PSBBZGRySGkpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJfdG1wID0gQWRkckxvOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNudCA9IGkgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0KQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBQR1NQICYmIH5QUkdTVVNQX2luKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH5SRVNfVE9fU1VTUF9NSU5fVElNRSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEdTVVNQID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQR1NVU1AgPD0gIzUgMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkdTVVNQX2luID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUkVTX1RPX1NVU1BfVFlQX1RJTUUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIlR5cGljYWwgcGVyaW9kcyBhcmUgbmVlZGVkIGZvciAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvZ3JhbSB0byBwcm9ncmVzcyB0byBjb21wbGV0aW9uIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIk1pbmltdW0gZm9yIHRQUlMgaXMgbm90IHNhdGlzZmllZCEgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEdTUCBjb21tYW5kIGlzIGlnbm9yZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBQR19TVVNQOgorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKworICAgICAgICAgICAgICAgIGlmIChQUkdTVVNQX291dCAmJiBQUkdTVVNQX2luKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIFBSR1NVU1BfaW4gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAvL1RoZSBSRFkvQlNZIGJpdCBpbiB0aGUgU3RhdHVzIFJlZ2lzdGVyIHdpbGwgaW5kaWNhdGUgdGhhdAorICAgICAgICAgICAgICAgICAgICAvL3RoZSBkZXZpY2UgaXMgcmVhZHkgZm9yIGFub3RoZXIgb3BlcmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIC8vVGhlIFByb2dyYW0gU3VzcGVuZCAoUFMpIGJpdCBpbiB0aGUgU3RhdHVzIFJlZ2lzdGVyIHdpbGwKKyAgICAgICAgICAgICAgICAgICAgLy9iZSBzZXQgdG8gdGhlIGxvZ2ljYWwg4oCcMeKAnSBzdGF0ZSB0byBpbmRpY2F0ZSB0aGF0IHRoZQorICAgICAgICAgICAgICAgICAgICAvL3Byb2dyYW0gb3BlcmF0aW9uIGhhcyBiZWVuIHN1c3BlbmRlZC4KKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzJbMF0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBQRE9ORSA9IDEnYjE7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAob2UpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgYW55X3JlYWQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gUkRTUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEU1IyKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyIDIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMls3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRDUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBDb25maWdfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gQlJSRCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIEJhbmsgQWRkcmVzcyBSZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQmFua19BZGRyX3JlZ1s3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBBcnJheSBPcGVyYXRpb25zCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJFQUQgfHwgSW5zdHJ1Y3QgPT0gUkQ0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gRlNUUkQgfHwgSW5zdHJ1Y3QgPT0gRlNUUkQ0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gRERSRlIgfHwgSW5zdHJ1Y3QgPT0gRERSRlI0ICkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBNZW1vcnkgYXJyYXkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBSRUFEIHx8IEluc3RydWN0ID09IFJENCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEREUkZSIHx8IEluc3RydWN0ID09IEREUkZSNCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZ21fcGFnZSAhPSByZWFkX2FkZHIgLyAoUGFnZVNpemUrMSkpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoSW5zdHJ1Y3QgPT0gRERSRlIgfHwgSW5zdHJ1Y3QgPT0gRERSRlI0KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVkRMUl9yZWcgIT0gOCdiMDAwMDAwMDApICYmIHN0YXJ0X2RscCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX291dFs3OjBdID0gVkRMUl9yZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE1lbVtyZWFkX2FkZHJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICA9IGRhdGFfb3V0WzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9hZGRyID09IEFkZHJSQU5HRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgPSA4J2J4eHh4eHh4eDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2FkZHIgPT0gQWRkclJBTkdFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gRE9SIHx8IEluc3RydWN0ID09IERPUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gRElPUiB8fCBJbnN0cnVjdCA9PSBESU9SNCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IEREUkRJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSRElPUjQgKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIE1lbW9yeSBhcnJheQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IEREUkRJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSRElPUjQpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGdtX3BhZ2UgIT0gcmVhZF9hZGRyIC8gKFBhZ2VTaXplKzEpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUkRJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSRElPUjQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFZETFJfcmVnICE9IDgnYjAwMDAwMDAwKSAmJiBzdGFydF9kbHApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IFZETFJfcmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE1lbVtyZWFkX2FkZHJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gZGF0YV9vdXRbNy0yKnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgPSBkYXRhX291dFs2LTIqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9hZGRyID09IEFkZHJSQU5HRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkID0gMSdieDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2FkZHIgPT0gQWRkclJBTkdFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUU9SIHx8IEluc3RydWN0ID09IFFPUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gUUlPUiB8fCBJbnN0cnVjdCA9PSBRSU9SNCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQgKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIE1lbW9yeSBhcnJheQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGdtX3BhZ2UgIT0gcmVhZF9hZGRyIC8gKFBhZ2VTaXplKzEpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChWRExSX3JlZyAhPSA4J2IwMDAwMDAwMCkgJiYgc3RhcnRfZGxwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEgTGVhcm5pbmcgUGF0dGVybiAoRExQKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyBlbmFibGVkIE9wdGlvbmFsIERMUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX291dFs3OjBdID0gVkRMUl9yZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPTEROZWdPdXRfemQ9IGRhdGFfb3V0WzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUE5lZ091dF96ZCAgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE1lbVtyZWFkX2FkZHJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gZGF0YV9vdXRbNy00KnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IGRhdGFfb3V0WzYtNCpyZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICA9IGRhdGFfb3V0WzUtNCpyZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkICAgPSBkYXRhX291dFs0LTQqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9hZGRyID09IEFkZHJSQU5HRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPTEROZWdPdXRfemQgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICA9IDEnYng7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICA9IDEnYng7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9hZGRyID09IEFkZHJSQU5HRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2VfeikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gUkVBRCB8fCBJbnN0cnVjdCA9PSBSRDQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEREUkZSIHx8IEluc3RydWN0ID09IEREUkZSNCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gRERSRElPUiB8fCBJbnN0cnVjdCA9PSBERFJESU9SNCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gRE9SIHx8IEluc3RydWN0ID09IERPUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IERJT1IgfHwgSW5zdHJ1Y3QgPT0gRElPUjQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gUU9SIHx8IEluc3RydWN0ID09IFFPUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IFFJT1IgfHwgSW5zdHJ1Y3QgPT0gUUlPUjQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAoZmFsbGluZ19lZGdlX3dyaXRlKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBCUldSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgQmFua19BZGRyX3JlZ1s3XSA9IEJhbmtfQWRkcl9yZWdfaW5bN107CisgICAgICAgICAgICAgICAgICAgICAgICBCYW5rX0FkZHJfcmVnWzBdID0gQmFua19BZGRyX3JlZ19pblswXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKEJhbmtfQWRkcl9yZWdfaW5bMV0gPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJXQVJOSU5HOiBDaGFuZ2luZyB2YWx1ZXMgb2YgIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJCYW5rIEFkZHJlc3MgUmVnaXN0ZXIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIkJBMjUgaXMgbm90IGFsbG93ZWQhISEiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gV1JSICYmIEJBUl9BQ0MgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy8gV3JpdGUgdG8gdGhlIGxvd2VyIGFkZHJlc3MgYml0cyBvZiB0aGUgQkFSCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUF9FUlIgPT0gMCAmJiBFX0VSUiA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYW5rX0FkZHJfcmVnWzBdID0gQmFua19BZGRyX3JlZ19pblswXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihCYW5rX0FkZHJfcmVnX2luWzFdID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJXQVJOSU5HOiBDaGFuZ2luZyB2YWx1ZXMgb2YgIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiQmFuayBBZGRyZXNzIFJlZ2lzdGVyIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiQkEyNSBpcyBub3QgYWxsb3dlZCEhISIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQR1JTKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzJbMF0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgUEdSRVMgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgUEdSRVMgPD0gIzUgMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFU19UT19TVVNQX01JTl9USU1FID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFU19UT19TVVNQX01JTl9USU1FIDw9ICM2MDAwMCAxJ2IwOy8vNjAgbnMKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFU19UT19TVVNQX1RZUF9USU1FID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFU19UT19TVVNQX1RZUF9USU1FIDw9ICMxMDAwMDAwMDAgMSdiMDsvLzEwMHVzCisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBCUkFDICYmIFBfRVJSID09IDAgJiYgRV9FUlIgPT0gMCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgUmRQc3dkUHJvdE1vZGUgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJBUl9BQ0MgPSAxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgQkFSX0FDQyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIEVSU19TVVNQX1BHX1NVU1A6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworCisgICAgICAgICAgICAgICAgaWYgKFBSR1NVU1Bfb3V0ICYmIFBSR1NVU1BfaW4pCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgUFJHU1VTUF9pbiA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIC8vVGhlIFJEWS9CU1kgYml0IGluIHRoZSBTdGF0dXMgUmVnaXN0ZXIgd2lsbCBpbmRpY2F0ZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIC8vdGhlIGRldmljZSBpcyByZWFkeSBmb3IgYW5vdGhlciBvcGVyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgLy9UaGUgUHJvZ3JhbSBTdXNwZW5kIChQUykgYml0IGluIHRoZSBTdGF0dXMgUmVnaXN0ZXIgd2lsbAorICAgICAgICAgICAgICAgICAgICAvL2JlIHNldCB0byB0aGUgbG9naWNhbCDigJwx4oCdIHN0YXRlIHRvIGluZGljYXRlIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vcHJvZ3JhbSBvcGVyYXRpb24gaGFzIGJlZW4gc3VzcGVuZGVkLgorICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMlswXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAob2UpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgYW55X3JlYWQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gUkRTUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEU1IyKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyIDIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMls3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRDUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBDb25maWdfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gQlJSRCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIEJhbmsgQWRkcmVzcyBSZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQmFua19BZGRyX3JlZ1s3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBBcnJheSBPcGVyYXRpb25zCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJFQUQgfHwgSW5zdHJ1Y3QgPT0gUkQ0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gRlNUUkQgfHwgSW5zdHJ1Y3QgPT0gRlNUUkQ0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gRERSRlIgfHwgSW5zdHJ1Y3QgPT0gRERSRlI0ICkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBNZW1vcnkgYXJyYXkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBSRUFEIHx8IEluc3RydWN0ID09IFJENCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEREUkZSIHx8IEluc3RydWN0ID09IEREUkZSNCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoU2VjdG9yU3VzcGVuZCAhPSByZWFkX2FkZHIvKFNlY1NpemUrMSkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAocGdtX3BhZ2UgIT0gcmVhZF9hZGRyIC8gKFBhZ2VTaXplKzEpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChJbnN0cnVjdCA9PSBERFJGUiB8fCBJbnN0cnVjdCA9PSBERFJGUjQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChWRExSX3JlZyAhPSA4J2IwMDAwMDAwMCkgJiYgc3RhcnRfZGxwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfb3V0Wzc6MF0gPSBWRExSX3JlZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX291dFs3OjBdID0gTWVtW3JlYWRfYWRkcl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2FkZHIgPT0gQWRkclJBTkdFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICA9IDgnYnh4eHh4eHh4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfYWRkciA9PSBBZGRyUkFOR0UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSByZWFkX2FkZHIgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBET1IgfHwgSW5zdHJ1Y3QgPT0gRE9SNCAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBESU9SIHx8IEluc3RydWN0ID09IERJT1I0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gRERSRElPUiB8fCBJbnN0cnVjdCA9PSBERFJESU9SNCApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgTWVtb3J5IGFycmF5CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gRERSRElPUiB8fCBJbnN0cnVjdCA9PSBERFJESU9SNCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoU2VjdG9yU3VzcGVuZCAhPSByZWFkX2FkZHIvKFNlY1NpemUrMSkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAocGdtX3BhZ2UgIT0gcmVhZF9hZGRyIC8gKFBhZ2VTaXplKzEpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChJbnN0cnVjdCA9PSBERFJESU9SIHx8IEluc3RydWN0ID09IEREUkRJT1I0KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVkRMUl9yZWcgIT0gOCdiMDAwMDAwMDApICYmIHN0YXJ0X2RscCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhIExlYXJuaW5nIFBhdHRlcm4gKERMUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgZW5hYmxlZCBPcHRpb25hbCBETFAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IFZETFJfcmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE1lbVtyZWFkX2FkZHJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gZGF0YV9vdXRbNy0yKnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgPSBkYXRhX291dFs2LTIqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9hZGRyID09IEFkZHJSQU5HRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkID0gMSdieDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2FkZHIgPT0gQWRkclJBTkdFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUU9SIHx8IEluc3RydWN0ID09IFFPUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gUUlPUiB8fCBJbnN0cnVjdCA9PSBRSU9SNCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQgKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIE1lbW9yeSBhcnJheQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKFNlY3RvclN1c3BlbmQgIT0gcmVhZF9hZGRyLyhTZWNTaXplKzEpKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKHBnbV9wYWdlICE9IHJlYWRfYWRkciAvIChQYWdlU2l6ZSsxKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoSW5zdHJ1Y3QgPT0gRERSUUlPUiB8fCBJbnN0cnVjdCA9PSBERFJRSU9SNCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFZETFJfcmVnICE9IDgnYjAwMDAwMDAwKSAmJiBzdGFydF9kbHApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YSBMZWFybmluZyBQYXR0ZXJuIChETFApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIGVuYWJsZWQgT3B0aW9uYWwgRExQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfb3V0Wzc6MF0gPSBWRExSX3JlZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9ZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfZGxwID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfb3V0Wzc6MF0gPSBNZW1bcmVhZF9hZGRyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IGRhdGFfb3V0WzctNCpyZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSBkYXRhX291dFs2LTQqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgPSBkYXRhX291dFs1LTQqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgID0gZGF0YV9vdXRbNC00KnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfYWRkciA9PSBBZGRyUkFOR0UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSByZWFkX2FkZHIgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdieDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUE5lZ091dF96ZCAgID0gMSdieDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkICAgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfYWRkciA9PSBBZGRyUkFOR0UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSByZWFkX2FkZHIgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9lX3opCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJFQUQgfHwgSW5zdHJ1Y3QgPT0gUkQ0KQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBERFJGUiB8fCBJbnN0cnVjdCA9PSBERFJGUjQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEREUkRJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSRElPUjQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IERPUiB8fCBJbnN0cnVjdCA9PSBET1I0ICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBESU9SIHx8IEluc3RydWN0ID09IERJT1I0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IFFPUiB8fCBJbnN0cnVjdCA9PSBRT1I0ICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBRSU9SIHx8IEluc3RydWN0ID09IFFJT1I0KQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBERFJRSU9SIHx8IEluc3RydWN0ID09IEREUlFJT1I0KQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIEhPTEROZWdPdXRfemQgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBXUE5lZ091dF96ZCAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgKGZhbGxpbmdfZWRnZV93cml0ZSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gQlJXUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJhbmtfQWRkcl9yZWdbN10gPSBCYW5rX0FkZHJfcmVnX2luWzddOworICAgICAgICAgICAgICAgICAgICAgICAgQmFua19BZGRyX3JlZ1swXSA9IEJhbmtfQWRkcl9yZWdfaW5bMF07CisgICAgICAgICAgICAgICAgICAgICAgICBpZihCYW5rX0FkZHJfcmVnX2luWzFdID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiV0FSTklORzogQ2hhbmdpbmcgdmFsdWVzIG9mICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiQmFuayBBZGRyZXNzIFJlZ2lzdGVyIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJCQTI1IGlzIG5vdCBhbGxvd2VkISEhIik7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFdSUiAmJiBCQVJfQUNDID09IDEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vIFdyaXRlIHRvIHRoZSBsb3dlciBhZGRyZXNzIGJpdHMgb2YgdGhlIEJBUgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBfRVJSID09IDAgJiYgRV9FUlIgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFua19BZGRyX3JlZ1swXSA9IEJhbmtfQWRkcl9yZWdfaW5bMF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQmFua19BZGRyX3JlZ19pblsxXSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiV0FSTklORzogQ2hhbmdpbmcgdmFsdWVzIG9mICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIkJhbmsgQWRkcmVzcyBSZWdpc3RlciIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIkJBMjUgaXMgbm90IGFsbG93ZWQhISEiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUEdSUykKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcyWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBHUkVTID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBHUkVTIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVNfVE9fU1VTUF9NSU5fVElNRSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVNfVE9fU1VTUF9NSU5fVElNRSA8PSAjNjAwMDAgMSdiMDsvLzYwIG5zCisgICAgICAgICAgICAgICAgICAgICAgICBSRVNfVE9fU1VTUF9UWVBfVElNRSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVNfVE9fU1VTUF9UWVBfVElNRSA8PSAjMTAwMDAwMDAwIDEnYjA7Ly8xMDB1cworICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gQlJBQyAmJiBQX0VSUiA9PSAwICYmIEVfRVJSID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIFJkUHN3ZFByb3RNb2RlID09IDApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBCQVJfQUNDID0gMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJBUl9BQ0MgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBPVFBfUEc6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGlmIChvZSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBhbnlfcmVhZCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBSRFNSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRTUjIpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMgorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcyWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRENSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IENvbmZpZ19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9lX3opCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZihjdXJyZW50X3N0YXRlX2V2ZW50ICYmIGN1cnJlbnRfc3RhdGUgPT0gT1RQX1BHKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+UERPTkUpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQWRkcmVzcyArIHdyX2NudCA8PSBPVFBIaUFkZHIpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaT0wO2k8PXdyX2NudDtpPWkrMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfaW50ID0gV0RhdGFbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9pbnQgPSBPVFBNZW1bQWRkciArIGldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3X2ludCA+IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2JpdCA9IG5ld19pbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2xkX2ludCA+IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfYml0ID0gb2xkX2ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ioaj0wO2o8PTc7aj1qKzEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH5vbGRfYml0W2pdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2JpdFtqXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2ludCA9IG5ld19iaXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdEYXRhW2ldID0gbmV3X2ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdEYXRhW2ldID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVFBNZW1bQWRkciArIGldID0gIC0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiUHJvZ3JhbW1pbmcgd2lsbCByZWFjaCBvdmVyICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYWRkcmVzcyBsaW1pdCBvZiBPVFAgYXJyYXkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIChQRE9ORSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpPTA7aTw9d3JfY250O2k9aSsxKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgT1RQTWVtW0FkZHIgKyBpXSA9IFdEYXRhW2ldOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgTE9DS19CWVRFMSA9IE9UUE1lbVsxNl07CisgICAgICAgICAgICAgICAgICAgIExPQ0tfQllURTIgPSBPVFBNZW1bMTddOworICAgICAgICAgICAgICAgICAgICBMT0NLX0JZVEUzID0gT1RQTWVtWzE4XTsKKyAgICAgICAgICAgICAgICAgICAgTE9DS19CWVRFNCA9IE9UUE1lbVsxOV07CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgU0VDVE9SX0VSUzoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgaWYgKG9lKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGFueV9yZWFkID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJEU1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRFNSMikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlciAyCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzJbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEQ1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQ29uZmlnX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2VfeikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmKGN1cnJlbnRfc3RhdGVfZXZlbnQgJiYgY3VycmVudF9zdGF0ZSA9PSBTRUNUT1JfRVJTKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+RURPTkUpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBBRERSSElMT19TRUMoQWRkckxvLCBBZGRySGksIEFkZHIpOworCQkJJGRpc3BsYXkoIiVtOiBTZWN0b3IgRXJhc2UgQWRkcmVzczogJXggU3RhcnQ6ICV4IEVuZDogJXgiLEFkZHIsQWRkckxvLEFkZHJIaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGk9QWRkckxvO2k8PUFkZHJIaTtpPWkrMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVtW2ldID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAoRURPTkUgPT0gMSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpPUFkZHJMbztpPD1BZGRySGk7aT1pKzEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBNZW1baV0gPSBNYXhEYXRhOworCisgICAgICAgICAgICAgICAgICAgICAgICBwZ21fcGFnZSA9IGkgLyAoUGFnZVNpemUrMSk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIFFQUF9wYWdlW3BnbV9wYWdlXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEVSU1AgJiYgfkVSU1NVU1BfaW4pCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgRVNVU1AgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBFU1VTUCA8PSAjNSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBFUlNTVVNQX2luID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFJFU19UT19TVVNQX1RZUF9USU1FKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIlR5cGljYWwgcGVyaW9kcyBhcmUgbmVlZGVkIGZvciAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb2dyYW0gdG8gcHJvZ3Jlc3MgdG8gY29tcGxldGlvbiIpOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBCVUxLX0VSUzoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgaWYgKG9lKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGFueV9yZWFkID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJEU1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRFNSMikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlciAyCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzJbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEQ1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQ29uZmlnX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2VfeikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmKGN1cnJlbnRfc3RhdGVfZXZlbnQgJiYgY3VycmVudF9zdGF0ZSA9PSBCVUxLX0VSUykKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAofkVET05FKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpPTA7aTw9QWRkclJBTkdFO2k9aSsxKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5TZWN0b3JJRChzZWN0LGkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQUEJfYml0c1tzZWN0XSA9PSAxICYmIERZQl9iaXRzW3NlY3RdID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVtW2ldID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIChFRE9ORSA9PSAxKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MDtpPD1BZGRyUkFOR0U7aT1pKzEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5TZWN0b3JJRChzZWN0LGkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBQQl9iaXRzW3NlY3RdID09IDEgJiYgRFlCX2JpdHNbc2VjdF0gPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVtW2ldID0gTWF4RGF0YTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnbV9wYWdlID0gaSAvIChQYWdlU2l6ZSsxKTsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFQUF9wYWdlW3BnbV9wYWdlXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgRVJTX1NVU1A6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGlmIChFUlNTVVNQX291dCA9PSAxKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIEVSU1NVU1BfaW4gPSAwOworICAgICAgICAgICAgICAgICAgICAvL1RoZSBFcmFzZSBTdXNwZW5kIChFUykgYml0IGluIHRoZSBTdGF0dXMgUmVnaXN0ZXIgd2lsbAorICAgICAgICAgICAgICAgICAgICAvL2JlIHNldCB0byB0aGUgbG9naWNhbCDigJwx4oCdIHN0YXRlIHRvIGluZGljYXRlIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vZXJhc2Ugb3BlcmF0aW9uIGhhcyBiZWVuIHN1c3BlbmRlZC4KKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzJbMV0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAvL1RoZSBXSVAgYml0IGluIHRoZSBTdGF0dXMgUmVnaXN0ZXIgd2lsbCBpbmRpY2F0ZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIC8vdGhlIGRldmljZSBpcyByZWFkeSBmb3IgYW5vdGhlciBvcGVyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIChvZSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBhbnlfcmVhZCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBSRFNSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRTUjIpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMgorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcyWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRENSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IENvbmZpZ19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBEWUJSRCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIERZQiBBY2Nlc3MgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIFJldHVyblNlY3RvcklEKHNlY3QsQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEWUJfYml0c1tzZWN0XSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERZQkFSWzc6MF0gPSA4J2hGRjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFlCQVJbNzowXSA9IDgnaDA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBEWUJBUls3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEJSUkQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBCYW5rIEFkZHJlc3MgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IEJhbmtfQWRkcl9yZWdbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCAgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQUEJSRCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFBQQiBBY2Nlc3MgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIFJldHVyblNlY3RvcklEKHNlY3QsQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBQQkFSWzc6MF0gPSA4J2JYWFhYWFhYWDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSZFBzd2RQcm90TW9kZSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUFBCX2JpdHNbc2VjdF0gPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFBCQVJbNzowXSA9IDgnaEZGOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUEJBUls3OjBdID0gOCdoMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFBQQkFSWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkVBRCB8fCBJbnN0cnVjdCA9PSBSRDQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBGU1RSRCB8fCBJbnN0cnVjdCA9PSBGU1RSRDQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBERFJGUiB8fCBJbnN0cnVjdCA9PSBERFJGUjQgKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIE1lbW9yeSBhcnJheQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJFQUQgfHwgSW5zdHJ1Y3QgPT0gUkQ0KQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gRERSRlIgfHwgSW5zdHJ1Y3QgPT0gRERSRlI0KQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChQQVJBTV9SRUdJT04gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjdG9yU3VzcGVuZCAhPSByZWFkX2FkZHIvKFNlY1NpemUrMSkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKH5QQVJBTV9SRUdJT04gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjdG9yU3VzcGVuZCAhPSByZWFkX2FkZHIvKFNlY1NpemUrMSkrMzAqYl9hY3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUkZSIHx8IEluc3RydWN0ID09IEREUkZSNCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFZETFJfcmVnICE9IDgnYjAwMDAwMDAwKSAmJiBzdGFydF9kbHApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YSBMZWFybmluZyBQYXR0ZXJuIChETFApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIGVuYWJsZWQgT3B0aW9uYWwgRExQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfb3V0Wzc6MF0gPSBWRExSX3JlZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX291dFs3OjBdID0gTWVtW3JlYWRfYWRkcl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2FkZHIgPT0gQWRkclJBTkdFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfYWRkciA9PSBBZGRyUkFOR0UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSByZWFkX2FkZHIgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBET1IgfHwgSW5zdHJ1Y3QgPT0gRE9SNCAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBESU9SIHx8IEluc3RydWN0ID09IERJT1I0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gRERSRElPUiB8fCBJbnN0cnVjdCA9PSBERFJESU9SNCApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgTWVtb3J5IGFycmF5CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gRERSRElPUiB8fCBJbnN0cnVjdCA9PSBERFJESU9SNCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoUEFSQU1fUkVHSU9OICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY3RvclN1c3BlbmQgIT0gcmVhZF9hZGRyLyhTZWNTaXplKzEpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh+UEFSQU1fUkVHSU9OICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY3RvclN1c3BlbmQgIT0gcmVhZF9hZGRyLyhTZWNTaXplKzEpKzMwKmJfYWN0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChJbnN0cnVjdCA9PSBERFJESU9SIHx8IEluc3RydWN0ID09IEREUkRJT1I0KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVkRMUl9yZWcgIT0gOCdiMDAwMDAwMDApICYmIHN0YXJ0X2RscCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhIExlYXJuaW5nIFBhdHRlcm4gKERMUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgZW5hYmxlZCBPcHRpb25hbCBETFAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IFZETFJfcmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE1lbVtyZWFkX2FkZHJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gZGF0YV9vdXRbNy0yKnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgPSBkYXRhX291dFs2LTIqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9hZGRyID09IEFkZHJSQU5HRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkID0gMSdieDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2FkZHIgPT0gQWRkclJBTkdFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUU9SICB8fCBJbnN0cnVjdCA9PSBRT1I0ICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IFFJT1IgfHwgSW5zdHJ1Y3QgPT0gUUlPUjQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBERFJRSU9SIHx8IEluc3RydWN0ID09IEREUlFJT1I0ICkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBNZW1vcnkgYXJyYXkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBERFJRSU9SIHx8IEluc3RydWN0ID09IEREUlFJT1I0KQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChQQVJBTV9SRUdJT04gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjdG9yU3VzcGVuZCAhPSByZWFkX2FkZHIvKFNlY1NpemUrMSkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKH5QQVJBTV9SRUdJT04gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjdG9yU3VzcGVuZCAhPSByZWFkX2FkZHIvKFNlY1NpemUrMSkrMzAqYl9hY3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChWRExSX3JlZyAhPSA4J2IwMDAwMDAwMCkgJiYgc3RhcnRfZGxwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEgTGVhcm5pbmcgUGF0dGVybiAoRExQKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyBlbmFibGVkIE9wdGlvbmFsIERMUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX291dFs3OjBdID0gVkRMUl9yZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPTEROZWdPdXRfemQ9IGRhdGFfb3V0WzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUE5lZ091dF96ZCAgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE1lbVtyZWFkX2FkZHJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gZGF0YV9vdXRbNy00KnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IGRhdGFfb3V0WzYtNCpyZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICA9IGRhdGFfb3V0WzUtNCpyZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkICAgPSBkYXRhX291dFs0LTQqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9hZGRyID09IEFkZHJSQU5HRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPTEROZWdPdXRfemQgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICA9IDEnYng7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICA9IDEnYng7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9hZGRyID09IEFkZHJSQU5HRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2VfeikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gUkVBRCB8fCBJbnN0cnVjdCA9PSBSRDQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEREUkZSIHx8IEluc3RydWN0ID09IEREUkZSNCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gRERSRElPUiB8fCBJbnN0cnVjdCA9PSBERFJESU9SNCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gRE9SIHx8IEluc3RydWN0ID09IERPUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IERJT1IgfHwgSW5zdHJ1Y3QgPT0gRElPUjQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gUU9SIHx8IEluc3RydWN0ID09IFFPUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IFFJT1IgfHwgSW5zdHJ1Y3QgPT0gUUlPUjQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAoZmFsbGluZ19lZGdlX3dyaXRlKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICgoSW5zdHJ1Y3QgPT0gUFAgfHwgSW5zdHJ1Y3QgPT0gUFA0KSAmJiBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoUEFSQU1fUkVHSU9OICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY3RvclN1c3BlbmQgIT0gQWRkcmVzcy8oU2VjU2l6ZSsxKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoflBBUkFNX1JFR0lPTiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWN0b3JTdXNwZW5kICE9IEFkZHJlc3MvKFNlY1NpemUrMSkrMzAqYl9hY3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5TZWN0b3JJRChzZWN0LEFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTZWNfUHJvdFtzZWN0XSA9PSAwICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQQl9iaXRzW3NlY3RdPT0gMSAmJiBEWUJfYml0c1tzZWN0XT09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBHU1VTUCAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQR1JFUyAgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQSAgICAgID0gc2VjdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkciAgICA9IEFkZHJlc3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJfdG1wPSBBZGRyZXNzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9jbnQgID0gQnl0ZV9udW1iZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaT13cl9jbnQ7aT49MDtpPWktMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChWaW9sICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0RhdGFbaV0gPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRGF0YVtpXSA9IFdCeXRlW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs2XSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzZdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKEluc3RydWN0ID09IFFQUCB8fCBJbnN0cnVjdCA9PSBRUFA0KSAmJiBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoUEFSQU1fUkVHSU9OICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY3RvclN1c3BlbmQgIT0gQWRkcmVzcy8oU2VjU2l6ZSsxKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoflBBUkFNX1JFR0lPTiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWN0b3JTdXNwZW5kICE9IEFkZHJlc3MvKFNlY1NpemUrMSkrMzAqYl9hY3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5TZWN0b3JJRChzZWN0LEFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnbV9wYWdlID0gQWRkcmVzcyAvIChQYWdlU2l6ZSsxKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTZWNfUHJvdFtzZWN0XSA9PSAwICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQQl9iaXRzW3NlY3RdPT0gMSAmJiBEWUJfYml0c1tzZWN0XT09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBHU1VTUCAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQR1JFUyAgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gPSAxJ2IxOworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFQUF9wYWdlW3BnbV9wYWdlXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNBICAgICAgPSBzZWN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyICAgID0gQWRkcmVzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcl90bXA9IEFkZHJlc3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2NudCAgPSBCeXRlX251bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpPXdyX2NudDtpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFZpb2wgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRGF0YVtpXSA9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdEYXRhW2ldID0gV0J5dGVbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzZdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNl0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBXUkVOKQorICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBDTFNSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1RoZSBDbGVhciBTdGF0dXMgUmVnaXN0ZXIgQ29tbWFuZCByZXNldHMgYml0IFNSMVs1XQorICAgICAgICAgICAgICAgICAgICAvLyhFcmFzZSBGYWlsIEZsYWcpIGFuZCBiaXQgU1IxWzZdIChQcm9ncmFtIEZhaWwgRmxhZykKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzVdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzZdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEJSV1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBCYW5rX0FkZHJfcmVnWzddID0gQmFua19BZGRyX3JlZ19pbls3XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhbmtfQWRkcl9yZWdbMF0gPSBCYW5rX0FkZHJfcmVnX2luWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoQmFua19BZGRyX3JlZ19pblsxXSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIldBUk5JTkc6IENoYW5naW5nIHZhbHVlcyBvZiAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIkJhbmsgQWRkcmVzcyBSZWdpc3RlciIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiQkEyNSBpcyBub3QgYWxsb3dlZCEhISIpOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBXUlIgJiYgQkFSX0FDQyA9PSAxKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvLyBXcml0ZSB0byB0aGUgbG93ZXIgYWRkcmVzcyBiaXRzIG9mIHRoZSBCQVIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQX0VSUiA9PSAwICYmIEVfRVJSID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhbmtfQWRkcl9yZWdbMF0gPSBCYW5rX0FkZHJfcmVnX2luWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEJhbmtfQWRkcl9yZWdfaW5bMV0gPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIldBUk5JTkc6IENoYW5naW5nIHZhbHVlcyBvZiAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJCYW5rIEFkZHJlc3MgUmVnaXN0ZXIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJCQTI1IGlzIG5vdCBhbGxvd2VkISEhIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IERZQldSICAmJiBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJldHVyblNlY3RvcklEKHNlY3QsQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBwZ21fcGFnZSA9IEFkZHJlc3MgLyAoUGFnZVNpemUrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQU1RBUlQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBFUlJTKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzJbMV0gID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCb3R0b21Cb290KQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUEFSQU1fUkVHSU9OKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHIgPSBTZWN0b3JTdXNwZW5kKihTZWNTaXplKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyID0gKFNlY3RvclN1c3BlbmQtMzApKihTZWNTaXplKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHIgPSBTZWN0b3JTdXNwZW5kKihTZWNTaXplKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBBRERSSElMT19TRUMoQWRkckxvLCBBZGRySGksIEFkZHIpOworICAgICAgICAgICAgICAgICAgICAgICAgRVJFUyA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBFUkVTIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVNfVE9fU1VTUF9UWVBfVElNRSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVNfVE9fU1VTUF9UWVBfVElNRSA8PSAjMTAwMDAwMDAwIDEnYjA7Ly8xMDB1cworICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gQlJBQyAmJiBQX0VSUiA9PSAwICYmIEVfRVJSID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIFJkUHN3ZFByb3RNb2RlID09IDApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBCQVJfQUNDID0gMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJBUl9BQ0MgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBFUlNfU1VTUF9QRzoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgaWYgKG9lKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGFueV9yZWFkID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJEU1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRFNSMikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlciAyCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzJbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEQ1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQ29uZmlnX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2VfeikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmKGN1cnJlbnRfc3RhdGVfZXZlbnQgJiYgY3VycmVudF9zdGF0ZSA9PSBFUlNfU1VTUF9QRykKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoflBET05FKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgQUREUkhJTE9fUEcoQWRkckxvLCBBZGRySGksIEFkZHIpOworICAgICAgICAgICAgICAgICAgICAgICAgY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaT0wO2k8PXdyX2NudDtpPWkrMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2ludCA9IFdEYXRhW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9pbnQgPSBNZW1bQWRkciArIGkgLSBjbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdfaW50ID4gLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2JpdCA9IG5ld19pbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbGRfaW50ID4gLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfYml0ID0gb2xkX2ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihqPTA7ajw9NztqPWorMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH5vbGRfYml0W2pdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfYml0W2pdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2ludCA9IG5ld19iaXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRGF0YVtpXSA9IG5ld19pbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdEYXRhW2ldID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEFkZHIgKyBpKSA9PSBBZGRySGkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkciA9IEFkZHJMbzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY250ID0gaSArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGNudCA9MDsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmKFBET05FID09IDEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gPSAxJ2IwOy8vV0lQCisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsvL1dFTAorICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MDtpPD13cl9jbnQ7aT1pKzEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBNZW1bQWRkcl90bXAgKyBpIC0gY250XSA9IFdEYXRhW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChBZGRyX3RtcCArIGkpID09IEFkZHJIaSApCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJfdG1wID0gQWRkckxvOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNudCA9IGkgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0KQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBQR1NQICYmIH5QUkdTVVNQX2luKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH5SRVNfVE9fU1VTUF9NSU5fVElNRSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEdTVVNQID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQR1NVU1AgPD0gIzUgMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkdTVVNQX2luID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUkVTX1RPX1NVU1BfVFlQX1RJTUUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIlR5cGljYWwgcGVyaW9kcyBhcmUgbmVlZGVkIGZvciAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvZ3JhbSB0byBwcm9ncmVzcyB0byBjb21wbGV0aW9uIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIk1pbmltdW0gZm9yIHRQUlMgaXMgbm90IHNhdGlzZmllZCEgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEdTUCBjb21tYW5kIGlzIGlnbm9yZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBQQVNTX1BHOgorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICBpZiAob2UpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgYW55X3JlYWQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gUkRTUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEU1IyKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzJbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEQ1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQ29uZmlnX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2VfeikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIG5ld19wYXNzID0gUGFzc3dvcmRfcmVnX2luOworICAgICAgICAgICAgICAgIG9sZF9wYXNzID0gUGFzc3dvcmRfcmVnOworICAgICAgICAgICAgICAgIGZvciAoaT0wO2k8PTYzO2k9aSsxKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmIChvbGRfcGFzc1tqXSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3Bhc3Nbal0gPSAwOworICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgKFBET05FID09IDEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgUGFzc3dvcmRfcmVnID0gbmV3X3Bhc3M7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIFBBU1NfVU5MT0NLOgorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICBpZiAob2UpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgYW55X3JlYWQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gUkRTUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEU1IyKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzJbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEQ1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQ29uZmlnX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2VfeikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIChQQVNTX1RFTVAgPT0gUGFzc3dvcmRfcmVnKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIFBBU1NfVU5MT0NLRUQgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBQQVNTX1VOTE9DS0VEID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBpZiAoUEFTU1VMQ0tfb3V0ID09IDEnYjEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKChQQVNTX1VOTE9DS0VEID09IDEnYjEpICYmICh+UFdETUxCKSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBQQkxbMF0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gPSAxJ2IwOyAvL1dJUAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNl0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJJbmNvcnJlY3QgUGFzc3dvcmQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBBU1NBQ0NfaW4gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBQQVNTVUxDS19pbiA9IDEnYjA7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgUFBCX1BHOgorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICBpZiAob2UpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgYW55X3JlYWQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gUkRTUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEU1IyKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzJbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEQ1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQ29uZmlnX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2VfeikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIChQRE9ORSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoUFBCX0xPQ0sgIT09IDApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBQUEJfYml0c1tzZWN0XT0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzVdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgUFBCX0VSUzoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgaWYgKG9lKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGFueV9yZWFkID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJEU1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRFNSMikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcyWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRENSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IENvbmZpZ19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9lX3opCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAoUFBCRVJBU0Vfb3V0ID09IDEnYjEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKChQUEJfTE9DSyAhPT0gMCkgJiYgUFBCT1RQKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgUFBCX2JpdHMgPSB7NTQyezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzVdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBQUEJFUkFTRV9pbiA9IDEnYjA7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgQVVUT0JPT1RfUEc6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGlmIChvZSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBhbnlfcmVhZCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBSRFNSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRTUjIpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMgorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcyWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRENSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IENvbmZpZ19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9lX3opCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAoUERPTkUpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgZm9yKGk9MDtpPD0zO2k9aSsxKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGo9MDtqPD03O2o9aisxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dG9Cb290X3JlZ1tpKjgral0gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dG9Cb290X3JlZ19pblsoMy1pKSo4K2pdOworICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBQTEJfUEc6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGlmIChvZSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBhbnlfcmVhZCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBSRFNSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRTUjIpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMls3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRDUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBDb25maWdfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChvZV96KQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIEhPTEROZWdPdXRfemQgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBXUE5lZ091dF96ZCAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgKFBET05FKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIFBQQkxbMF0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBEWUJfUEc6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGlmIChvZSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBhbnlfcmVhZCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBSRFNSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRTUjIpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMls3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRDUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBDb25maWdfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChvZV96KQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIEhPTEROZWdPdXRfemQgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBXUE5lZ091dF96ZCAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgKFBET05FKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIERZQkFSID0gRFlCQVJfaW47CisgICAgICAgICAgICAgICAgICAgIGlmIChEWUJBUiA9PSA4J2hGRikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIERZQl9iaXRzW3NlY3RdPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoRFlCQVIgPT0gOCdoMDApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBEWUJfYml0c1tzZWN0XT0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzZdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIEFTUF9QRzoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgaWYgKG9lKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGFueV9yZWFkID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJEU1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRFNSMikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcyWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRENSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IENvbmZpZ19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9lX3opCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAoUERPTkUpCisgICAgICAgICAgICAgICAgYmVnaW4KKworICAgICAgICAgICAgICAgICAgICBpZiAoUlBNRSA9PSAxJ2IwICYmIEFTUF9yZWdfaW5bNV0gPT0gMSdiMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNl0gPSAxJ2IxOyAvL1BfRVJSCisgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJSUE1FIGJpdCBpcyBhbGxyZWFkeSBwcm9ncmFtbWVkIik7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBBU1BfcmVnWzVdID0gQVNQX3JlZ19pbls1XTsvL1JQTUUKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgaWYgKFBQQk9UUCA9PSAxJ2IwICYmIEFTUF9yZWdfaW5bM10gPT0gMSdiMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNl0gPSAxJ2IxOyAvL1BfRVJSCisgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJQUEJPVFAgYml0IGlzIGFsbHJlYWR5IHByb2dyYW1tZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFTUF9yZWdbM10gPSBBU1BfcmVnX2luWzNdOy8vUFBCT1RQCisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIGlmIChQV0RNTEIgPT0gMSdiMSAmJiBQU1RNTEIgPT0gMSdiMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBU1BfcmVnX2luWzJdID09IDEnYjAgJiYgQVNQX3JlZ19pblsxXSA9PSAxJ2IwKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSgiQVNQUlsyOjFdID0gMDAgIElsbGVnYWwgY29uZGl0aW9uIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNl0gPSAxJ2IxOyAvL1BfRVJSCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFTUF9yZWdfaW5bMl0hPT0xJ2IxIHx8IEFTUF9yZWdfaW5bMV0hPT0xJ2IxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTUE9UUEZMQUcgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTUF9yZWdbMl0gPSBBU1BfcmVnX2luWzJdOy8vUFdETUxCCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNQX3JlZ1sxXSA9IEFTUF9yZWdfaW5bMV07Ly9QU1RNTEIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBOVkRMUl9QRzoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgaWYgKG9lKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGFueV9yZWFkID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJEU1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRFNSMikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcyWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRENSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IENvbmZpZ19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9lX3opCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAoUERPTkUpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKE5WRExSX3JlZyA9PSAwKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgTlZETFJfcmVnID0gTlZETFJfcmVnX2luOworICAgICAgICAgICAgICAgICAgICAgICAgVkRMUl9yZWcgPSBOVkRMUl9yZWdfaW47CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs2XSA9IDEnYjE7IC8vUF9FUlIKKyAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJOVkRMUiBiaXRzIGFsbHJlYWR5IHByb2dyYW1tZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgUkVTRVRfU1RBVEU6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgLy90aGUgZGVmYXVsdCBjb25kaXRpb24gaGFyZHdhcmUgcmVzZXQKKyAgICAgICAgICAgIC8vVGhlIEJhbmsgQWRkcmVzcyBSZWdpc3RlciBpcyBsb2FkZWQgdG8gYWxsIHplcm9lcworICAgICAgICAgICAgICAgIEJhbmtfQWRkcl9yZWcgPSA4J2gwOworICAgICAgICAgICAgICAgIGlmIChCUE5WICYmIH5GUkVFWkUpIC8vJiYgfkxPQ0sgCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMl0gPSAxJ2IxOy8vIEJQMAorICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVszXSA9IDEnYjE7Ly8gQlAxCisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzRdID0gMSdiMTsvLyBCUDIKKyAgICAgICAgICAgICAgICAgICAgQlBfYml0cyA9IDMnYjExMTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlX0JQID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgIzEwMDAgY2hhbmdlX0JQID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAvL1Jlc2V0cyB0aGUgdm9sYXRpbGUgYml0cyBpbiB0aGUgU3RhdHVzIHJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs2XSA9IDEnYjA7CisgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNV0gPSAxJ2IwOworICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgLy9SZXNldHMgdGhlIHZvbGF0aWxlIGJpdHMgaW4gdGhlIFN0YXR1cyByZWdpc3RlciAyCisgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzJbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgIFN0YXR1c19yZWcyWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAvL1Jlc2V0cyB0aGUgdm9sYXRpbGUgYml0cyBpbiB0aGUgQ29uZmlndXJhdGlvbiByZWdpc3RlciAxCisgICAgICAgICAgICAgICAgQ29uZmlnX3JlZzFbMF0gPSAxJ2IwOworICAgICAgICAgICAgICAgIC8vT24gcmVzZXQgY3ljbGVzIHRoZSBkYXRhIHBhdHRlcm4gcmV2ZXJ0cyBiYWNrCisgICAgICAgICAgICAgICAgLy90byB3aGF0IGlzIGluIHRoZSBOVkRMUgorICAgICAgICAgICAgICAgIFZETFJfcmVnID0gTlZETFJfcmVnOworICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjA7CisgICAgICAgICAgICAgICAgLy9Mb2FkcyB0aGUgUHJvZ3JhbSBCdWZmZXIgd2l0aCBhbGwgb25lcworICAgICAgICAgICAgICAgIGZvcihpPTA7aTw9NTExO2k9aSsxKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIFdEYXRhW2ldID0gTWF4RGF0YTsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBpZiAoflBXRE1MQikKKyAgICAgICAgICAgICAgICAgICAgUFBCTFswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBQUEJMWzBdID0gMSdiMTsKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgIGVuZGNhc2UKKworICAgICAgICAvL091dHB1dCBEaXNhYmxlIENvbnRyb2wKKyAgICAgICAgaWYgKENTTmVnX2lwZCApCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBTT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgIFNJT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgIEhPTEROZWdPdXRfemQgPSAxJ2JaOworICAgICAgICAgICAgV1BOZWdPdXRfemQgPSAxJ2JaOworICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGFzc2lnbiBmYXN0X3JkID0gcmRfZmFzdDsKKyAgICBhc3NpZ24gcmQgPSByZF9zbG93OworICAgIGFzc2lnbiBkZHJkID0gZGRyICYmIH5kZHI4MDsKKyAgICBhc3NpZ24gZGRyZDgwID0gZGRyICYmIGRkcjgwOworICAgIGFzc2lnbiBmYXN0X2RkciA9IGRkcl9mYXN0OworCisgICAgYWx3YXlzIEAoY2hhbmdlX1RCUEFSTSwgcG9zZWRnZSBQb3dlcmVkVXApCisgICAgYmVnaW4KKyAgICAgICAgaWYgKHRtcF9jaGFyMiA9PSAiMCIpCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBpZiAoVEJQQVJNID09IDApCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIEJvdHRvbUJvb3QgPSAxOworICAgICAgICAgICAgICAgIGJfYWN0ID0gMTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBUb3BCb290ICAgICA9IDE7CisgICAgICAgICAgICAgICAgQm90dG9tQm9vdCAgPSAwOworICAgICAgICAgICAgICAgIGJfYWN0ID0gMDsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgZWxzZSBpZiAodG1wX2NoYXIyID09ICIxIikKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIFVuaWZvcm1TZWMgPSAxOworICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHBvc2VkZ2UgY2hhbmdlX0JQKQorICAgIGJlZ2luCisgICAgICAgIGNhc2UgKFN0YXR1c19yZWcxWzQ6Ml0pCisKKyAgICAgICAgICAgIDMnYjAwMDoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgU2VjX1Byb3RbNTQxOjBdID0gezU0MnsxJ2IwfX07CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIDMnYjAwMToKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKHRtcF9jaGFyMiA9PSAiMSIpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5UQlBST1QpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW0yNTY6KFNlY051bTI1NisxKSo2My82NF0gPSAyJ2IxMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90WyhTZWNOdW0yNTYrMSkqNjMvNjQtMSA6IDBdID0gMTI2J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTI1NisxKS82NC0xIDogMF0gPSAyJ2IxMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90W1NlY051bTI1NiA6IChTZWNOdW0yNTYrMSkvNjRdID0gMTI2J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0bXBfY2hhcjIgPT0gIjAiICYmIFRCUEFSTSA9PSAxKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+VEJQUk9UKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQ6KFNlY051bTY0LTI5KSo2My82NF0gPSB7Mzh7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KSo2My82NC0xIDogMF0gICAgPSA1MDQnaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFsoU2VjTnVtNjQtMjkpLzY0LTEgOiAwXSA9IHs4ezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90W1NlY051bTY0IDogKFNlY051bTY0LTI5KS82NF0gPSA1MzQnaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoflRCUFJPVCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90W1NlY051bTY0OihTZWNOdW02NC0yOSkqNjMvNjQrMzBdID0gezh7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KSo2My82NCsyOSA6IDBdID0gNTM0J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KS82NCsyOSA6IDBdICAgICAgICA9IHszOHsxJ2IxfX07CisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW02NCA6IChTZWNOdW02NC0yOSkvNjQrMzBdID0gNTA0J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAzJ2IwMTA6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIGlmICh0bXBfY2hhcjIgPT0gIjEiKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+VEJQUk9UKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtMjU2IDogKFNlY051bTI1NisxKSozMS8zMl0gPSB7NHsxJ2IxfX07CisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFsoU2VjTnVtMjU2KzEpKjMxLzMyLTEgOiAwXSA9IDEyNCdoMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90WyhTZWNOdW0yNTYrMSkvMzItMSA6IDBdID0gezR7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtMjU2IDogKFNlY051bTI1NisxKS8zMl0gPSAxMjQnaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRtcF9jaGFyMiA9PSAiMCIgJiYgVEJQQVJNID09IDEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5UQlBST1QpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW02NCA6IChTZWNOdW02NC0yOSkqMzEvMzJdID0gezQ2ezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90WyhTZWNOdW02NC0yOSkqMzEvMzItMSA6IDBdID0gNDk2J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KS8zMi0xIDogMF0gPSB7MTZ7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQgOiAoU2VjTnVtNjQtMjkpLzMyXSA9IDUyNidoMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+VEJQUk9UKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQ6KFNlY051bTY0LTI5KSozMS8zMiszMF0gPSB7MTZ7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KSozMS8zMisyOSA6IDBdID0gNTI2J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KS8zMisyOSA6IDBdID0gezQ2ezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90W1NlY051bTY0IDogKFNlY051bTY0LTI5KS8zMiszMF0gPSA0OTYnaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIDMnYjAxMToKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKHRtcF9jaGFyMiA9PSAiMSIpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5UQlBST1QpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW0yNTYgOiAoU2VjTnVtMjU2KzEpKjE1LzE2XSA9IDgnaEZGOworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTI1NisxKSoxNS8xNi0xIDogMF0gPSAxMjAnaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFsoU2VjTnVtMjU2KzEpLzE2LTEgOiAwXSA9IDgnaEZGOworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtMjU2IDogKFNlY051bTI1NisxKS8xNl0gPSAxMjAnaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRtcF9jaGFyMiA9PSAiMCIgJiYgVEJQQVJNID09IDEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5UQlBST1QpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW02NCA6IChTZWNOdW02NC0yOSkqMTUvMTZdID0gezYyezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90WyhTZWNOdW02NC0yOSkqMTUvMTYtMSA6IDBdID0gNDgwJ2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KS8xNi0xIDogMF0gPSB7MzJ7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQgOiAoU2VjTnVtNjQtMjkpLzE2XSA9IDUxMCdoMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+VEJQUk9UKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQgOiAoU2VjTnVtNjQtMjkpKjE1LzE2KzMwXT17MzJ7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KSoxNS8xNisyOSA6IDBdID0gNTEwJ2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KS8xNisyOSA6IDBdID17NjJ7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQgOiAoU2VjTnVtNjQtMjkpLzE2KzMwXSA9IDQ4MCdoMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgMydiMTAwOgorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBpZiAodG1wX2NoYXIyID09ICIxIikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoflRCUFJPVCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90W1NlY051bTI1NiA6IChTZWNOdW0yNTYrMSkqNy84XSA9IHsxNnsxJ2IxfX07CisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFsoU2VjTnVtMjU2KzEpKjcvOC0xIDogMF0gPSAxMTInaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFsoU2VjTnVtMjU2KzEpLzgtMSA6IDBdID0gezE2ezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90W1NlY051bTI1NiA6IChTZWNOdW0yNTYrMSkvOF0gPSAxMTInaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRtcF9jaGFyMiA9PSAiMCIgJiYgVEJQQVJNID09IDEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5UQlBST1QpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW02NCA6IChTZWNOdW02NC0yOSkqNy84XSA9IHs5NHsxJ2IxfX07CisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFsoU2VjTnVtNjQtMjkpKjcvOC0xIDogMF0gPSA0NDgnaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFsoU2VjTnVtNjQtMjkpLzgtMSA6IDBdID0gezY0ezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90W1NlY051bTY0IDogKFNlY051bTY0LTI5KS84XSA9IDQ3OCdoMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+VEJQUk9UKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQgOiAoU2VjTnVtNjQtMjkpKjcvOCszMF0gPXs2NHsxJ2IxfX07CisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFsoU2VjTnVtNjQtMjkpKjcvOCsyOSA6IDBdID0gNDc4J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KS84KzI5IDogMF0gPSB7OTR7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQgOiAoU2VjTnVtNjQtMjkpLzgrMzBdID0gNDQ4J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAzJ2IxMDE6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIGlmICh0bXBfY2hhcjIgPT0gIjEiKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+VEJQUk9UKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtMjU2IDogKFNlY051bTI1NisxKSozLzRdID0gezMyezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90WyhTZWNOdW0yNTYrMSkqMy80LTEgOiAwXSA9IDk2J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTI1NisxKS80LTEgOiAwXSA9IHszMnsxJ2IxfX07CisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW0yNTYgOiAoU2VjTnVtMjU2KzEpLzRdID0gOTYnaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRtcF9jaGFyMiA9PSAiMCIgJiYgVEJQQVJNID09IDEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5UQlBST1QpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW02NCA6IChTZWNOdW02NC0yOSkqMy80XSA9IHsxNTh7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KSozLzQtMSA6IDBdID0gMzg0J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KS80LTEgOiAwXSA9IHsxMjh7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQgOiAoU2VjTnVtNjQtMjkpLzRdID0gNDE0J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5UQlBST1QpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW02NCA6IChTZWNOdW02NC0yOSkqMy80KzMwXSA9IHsxMjh7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KSozLzQrMjkgOiAwXSA9IDQxNCdoMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90WyhTZWNOdW02NC0yOSkvNCsyOSA6IDBdID0gezE1OHsxJ2IxfX07CisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW02NCA6IChTZWNOdW02NC0yOSkvNCszMF0gPSAzODQnaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIDMnYjExMDoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKHRtcF9jaGFyMiA9PSAiMSIpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5UQlBST1QpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW0yNTYgOiAoU2VjTnVtMjU2KzEpLzJdID0gezY0ezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90WyhTZWNOdW0yNTYrMSkvMi0xIDogMF0gPSA2NCdoMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90WyhTZWNOdW0yNTYrMSkvMi0xIDogMF0gPSB7NjR7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtMjU2IDogKFNlY051bTI1NisxKS8yXSA9IDY0J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0bXBfY2hhcjIgPT0gIjAiICYmIFRCUEFSTSA9PSAxKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+VEJQUk9UKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQgOiAoU2VjTnVtNjQtMjkpLzJdID0gezI4NnsxJ2IxfX07CisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFsoU2VjTnVtNjQtMjkpLzItMSA6IDBdID0gMjU2J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KS8yLTEgOiAwXSA9IHsyNTZ7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQgOiAoU2VjTnVtNjQtMjkpLzJdID0gMjg2J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5UQlBST1QpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW02NCA6IChTZWNOdW02NC0yOSkvMiszMF0gPSB7MjU2ezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90WyhTZWNOdW02NC0yOSkvMisyOSA6IDBdID0gMjg2J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KS8yKzI5IDogMF0gPSB7Mjg2ezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90W1NlY051bTY0IDogKFNlY051bTY0LTI5KS8yKzMwXSA9IDI1NidoMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgMydiMTExOgorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW02NDowXSA9ICB7NTQyezEnYjF9fTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmRjYXNlCisgICAgZW5kCisKKyAgICBhbHdheXMgQChTT3V0X3pkIG9yIEhPTEROZWdfaW4gb3IgU0lPdXRfemQpCisgICAgYmVnaW4KKyAgICAgICAgaWYgKEhPTEROZWdfaW4gPT0gMCAmJiB+UVVBRCkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGhvbGRfbW9kZSA9IDEnYjE7CisgICAgICAgICAgICBTSU91dF96ICAgPSAxJ2JaOworICAgICAgICAgICAgU091dF96ICAgID0gMSdiWjsKKyAgICAgICAgZW5kCisgICAgICAgIGVsc2UKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGlmIChob2xkX21vZGUgPT0gMSkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgU0lPdXRfeiA8PSAjKHRwZF9IT0xETmVnX1NPKSBTSU91dF96ZDsKKyAgICAgICAgICAgICAgICBTT3V0X3ogIDw9ICModHBkX0hPTEROZWdfU08pIFNPdXRfemQ7CisgICAgICAgICAgICAgICAgaG9sZF9tb2RlID0gIyh0cGRfSE9MRE5lZ19TTykgMSdiMDsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBTSU91dF96ID0gU0lPdXRfemQ7CisgICAgICAgICAgICAgICAgU091dF96ICA9IFNPdXRfemQ7CisgICAgICAgICAgICAgICAgaG9sZF9tb2RlID0gMSdiMDsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vIGF1dG9ib290IGNvbnRyb2wgbG9naWMKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICBhbHdheXMgQChyaXNpbmdfZWRnZV9TQ0tfaXBkIG9yIGN1cnJlbnRfc3RhdGVfZXZlbnQpCisgICAgYmVnaW4KKyAgICAgICAgaWYoY3VycmVudF9zdGF0ZSA9PSBBVVRPQk9PVCkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGlmIChyaXNpbmdfZWRnZV9TQ0tfaXBkKQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBpZiAoc3RhcnRfZGVsYXkgPiAwKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kZWxheSA9IHN0YXJ0X2RlbGF5IC0gMTsKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBpZiAoc3RhcnRfZGVsYXkgPT0gMCkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgc3RhcnRfYXV0b2Jvb3QgPSAxOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy8gZnVuY3Rpb25zICYgdGFza3MKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAvLyBQcm9jZWR1cmUgRkREUl9EUEwKK3Rhc2sgUmV0dXJuX0RMUDsKKyAgICBpbnB1dCBpbnRlZ2VyIEluc3RydWN0OworICAgIGlucHV0IGludGVnZXIgRUhQOworICAgIGlucHV0IGludGVnZXIgTGF0ZW5jeV9jb2RlOworICAgIGlucHV0IGludGVnZXIgZHVtbXlfY250OworICAgIGlub3V0IHN0YXJ0X2RscDsKKyAgICBiZWdpbgorICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gRERSRlIgfHwgSW5zdHJ1Y3QgPT0gRERSRlI0KQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgaWYgKEVIUCkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKExhdGVuY3lfY29kZSA9PSAxKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKExhdGVuY3lfY29kZSA9PSAyICYmIGR1bW15X2NudCA+PSAxKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYoTGF0ZW5jeV9jb2RlID09IDMgfHwgTGF0ZW5jeV9jb2RlID09IDApCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgc3RhcnRfZGxwID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIldhcm5pbmcgYXQiLCAkdGltZSk7CisgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJJbmFwcHJvcHJpYXRlIGxhdGVuY3kgaXMgc2V0IGR1cmluZyBEUEwgbW9kZSIpOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBiZWdpbgorCisgICAgICAgICAgICAgICAgaWYgKExhdGVuY3lfY29kZSA9PSAzKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKExhdGVuY3lfY29kZSA9PSAwICYmIGR1bW15X2NudCA+PSAxKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYoTGF0ZW5jeV9jb2RlID09IDEgJiYgZHVtbXlfY250ID49IDIpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjE7CisgICAgICAgICAgICAgICAgZWxzZSBpZihMYXRlbmN5X2NvZGUgPT0gMiAmJiBkdW1teV9jbnQgPj0gMykKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRfZGxwID0gMSdiMTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjA7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgICAgIGlmIChJbnN0cnVjdCA9PSBERFJESU9SIHx8IEluc3RydWN0ID09IEREUkRJT1I0KQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgaWYgKEVIUCkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKExhdGVuY3lfY29kZSA9PSAxICYmIGR1bW15X2NudCA+PSAxKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKExhdGVuY3lfY29kZSA9PSAyICYmIGR1bW15X2NudCA+PSAyKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYoIExhdGVuY3lfY29kZSA9PSAzIHx8IExhdGVuY3lfY29kZSA9PSAwKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJXYXJuaW5nIGF0IiwgJHRpbWUpOworICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSgiSW5hcHByb3ByaWF0ZSBsYXRlbmN5IGlzIHNldCBkdXJpbmcgRFBMIG1vZGUiKTsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjA7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKExhdGVuY3lfY29kZSA9PSAwICYmIGR1bW15X2NudCA+PSAyKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKExhdGVuY3lfY29kZSA9PSAxICYmIGR1bW15X2NudCA+PSAzKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYoTGF0ZW5jeV9jb2RlID09IDIgJiYgZHVtbXlfY250ID49IDQpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjE7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IwOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpICYmIFFVQUQpCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBpZiAoRUhQKQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBpZiAoTGF0ZW5jeV9jb2RlID09IDAgJiYgZHVtbXlfY250ID49IDIpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjE7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoTGF0ZW5jeV9jb2RlID09IDEgJiYgZHVtbXlfY250ID49IDMpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjE7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoTGF0ZW5jeV9jb2RlID09IDIgJiYgZHVtbXlfY250ID49IDQpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjE7CisgICAgICAgICAgICAgICAgZWxzZSBpZiggTGF0ZW5jeV9jb2RlID09IDMpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgc3RhcnRfZGxwID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIldhcm5pbmcgYXQiLCAkdGltZSk7CisgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJJbmFwcHJvcHJpYXRlIGxhdGVuY3kgaXMiKTsKKyAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoInNldCBkdXJpbmcgRFBMIG1vZGUiKTsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCAgPSAxJ2IwOworCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKExhdGVuY3lfY29kZSA9PSAwICYmIGR1bW15X2NudCA+PSAyKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKExhdGVuY3lfY29kZSA9PSAxICYmIGR1bW15X2NudCA+PSAzKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKExhdGVuY3lfY29kZSA9PSAyICYmIGR1bW15X2NudCA+PSA0KQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYoIExhdGVuY3lfY29kZSA9PSAzKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJXYXJuaW5nIGF0IiwgJHRpbWUpOworICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSgiSW5hcHByb3ByaWF0ZSBsYXRlbmN5IGlzIik7CisgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJzZXQgZHVyaW5nIERQTCBtb2RlIik7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IwOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorICAgIGVuZHRhc2sKKworICAgIGZ1bmN0aW9uIGludGVnZXIgUmV0dXJuU2VjdG9ySURSZFBzd2RNZDsKKyAgICAgICAgaW5wdXQgcmVnIFRCUFJPVDsKKyAgICBiZWdpbgorICAgICAgICBpZihUQlBST1QgPT0gMCkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIFJldHVyblNlY3RvcklEUmRQc3dkTWQgPSAwOworICAgICAgICBlbmQKKyAgICAgICAgZWxzZQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgaWYgKFVuaWZvcm1TZWMpCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIFJldHVyblNlY3RvcklEUmRQc3dkTWQgPSBTZWNOdW0yNTY7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgUmV0dXJuU2VjdG9ySURSZFBzd2RNZCA9IDUxMTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKyAgICBlbmRmdW5jdGlvbgorCisgICAgLy8gUHJvY2VkdXJlIEFERFJISUxPX1NFQworICAgIHRhc2sgQUREUkhJTE9fU0VDOworICAgIGlub3V0ICBBZGRyTE9XOworICAgIGlub3V0ICBBZGRySElHSDsKKyAgICBpbnB1dCAgIEFkZHI7CisgICAgaW50ZWdlciBBZGRyTE9XOworICAgIGludGVnZXIgQWRkckhJR0g7CisgICAgaW50ZWdlciBBZGRyOworICAgIGludGVnZXIgc2VjdG9yOworICAgIGJlZ2luCisgICAgICAgIGlmICh0bXBfY2hhcjIgPT0gIjAiKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgaWYgKFRCUEFSTSA9PSAwKQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBpZiAoQWRkci8oU2VjU2l6ZTY0KzEpIDw9IDEgJiYKKyAgICAgICAgICAgICAgICAgICAoSW5zdHJ1Y3QgPT0gUDRFIHx8IEluc3RydWN0ID09IFA0RTQpKSAgLy80S0IgU2VjdG9ycworICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHNlY3RvciAgID0gQWRkci8oU2VjU2l6ZTQrMSk7CisgICAgICAgICAgICAgICAgICAgIEFkZHJMT1cgID0gc2VjdG9yKihTZWNTaXplNCsxKTsKKyAgICAgICAgICAgICAgICAgICAgQWRkckhJR0ggPSBzZWN0b3IqKFNlY1NpemU0KzEpICsgU2VjU2l6ZTQ7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHNlY3RvciAgID0gQWRkci8oU2VjU2l6ZTY0KzEpOworICAgICAgICAgICAgICAgICAgICBBZGRyTE9XICA9IHNlY3RvciooU2VjU2l6ZTY0KzEpOworICAgICAgICAgICAgICAgICAgICBBZGRySElHSCA9IHNlY3RvciooU2VjU2l6ZTY0KzEpICsgU2VjU2l6ZTY0OworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChBZGRyLyhTZWNTaXplNjQrMSkgPj0gNTEwICYmCisgICAgICAgICAgICAgICAgICAgKEluc3RydWN0ID09IFA0RSB8fCBJbnN0cnVjdCA9PSBQNEU0KSkgLy80S0IgU2VjdG9ycworICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHNlY3RvciAgID0gNTEwICsgKEFkZHItKFNlY1NpemU2NCsxKSo1MTApLyhTZWNTaXplNCsxKTsKKyAgICAgICAgICAgICAgICAgICAgQWRkckxPVyAgPSA1MTAqKFNlY1NpemU2NCsxKSsoc2VjdG9yLTUxMCkqKFNlY1NpemU0KzEpOworICAgICAgICAgICAgICAgICAgICBBZGRySElHSCA9IDUxMCooU2VjU2l6ZTY0KzEpKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VjdG9yLTUxMCkqKFNlY1NpemU0KzEpICsgU2VjU2l6ZTQ7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHNlY3RvciAgID0gQWRkci8oU2VjU2l6ZTY0KzEpOworICAgICAgICAgICAgICAgICAgICBBZGRyTE9XICA9IHNlY3RvciooU2VjU2l6ZTY0KzEpOworICAgICAgICAgICAgICAgICAgICBBZGRySElHSCA9IHNlY3RvciooU2VjU2l6ZTY0KzEpICsgU2VjU2l6ZTY0OworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICBlbHNlIGlmICh0bXBfY2hhcjIgPT0gIjEiKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgc2VjdG9yICAgPSBBZGRyLyhTZWNTaXplMjU2KzEpOworICAgICAgICAgICAgQWRkckxPVyAgPSBzZWN0b3IqKFNlY1NpemUyNTYrMSk7CisgICAgICAgICAgICBBZGRySElHSCA9IHNlY3RvciooU2VjU2l6ZTI1NisxKSArIFNlY1NpemUyNTY7CisgICAgICAgIGVuZAorICAgIGVuZAorICAgIGVuZHRhc2sKKworICAgIC8vIFByb2NlZHVyZSBBRERSSElMT19QRworICAgIHRhc2sgQUREUkhJTE9fUEc7CisgICAgaW5vdXQgIEFkZHJMT1c7CisgICAgaW5vdXQgIEFkZHJISUdIOworICAgIGlucHV0ICAgQWRkcjsKKyAgICBpbnRlZ2VyIEFkZHJMT1c7CisgICAgaW50ZWdlciBBZGRySElHSDsKKyAgICBpbnRlZ2VyIEFkZHI7CisgICAgaW50ZWdlciBwYWdlOworICAgIGJlZ2luCisgICAgICAgIHBhZ2UgPSBBZGRyIC8gKFBhZ2VTaXplICsgMSk7CisgICAgICAgIEFkZHJMT1cgPSBwYWdlICogKFBhZ2VTaXplICsgMSk7CisgICAgICAgIEFkZHJISUdIID0gcGFnZSAqIChQYWdlU2l6ZSArIDEpICsgUGFnZVNpemUgOworICAgIGVuZAorICAgIGVuZHRhc2sKKworICAgIC8vIFByb2NlZHVyZSBSZXR1cm5TZWN0b3JJRAorICAgIHRhc2sgUmV0dXJuU2VjdG9ySUQ7CisgICAgaW5vdXQgICBzZWN0OworICAgIGlucHV0ICAgQWRkcmVzczsKKyAgICBpbnRlZ2VyIHNlY3Q7CisgICAgaW50ZWdlciBBZGRyZXNzOworICAgIGludGVnZXIgY29udjsKKyAgICBiZWdpbgorICAgICAgICBpZiAodG1wX2NoYXIyID09ICIwIikKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGNvbnYgPSBBZGRyZXNzIC8gKFNlY1NpemU2NCsxKTsKKyAgICAgICAgICAgIGlmIChCb3R0b21Cb290KQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBpZiAoY29udiA8PSAxKSAgICAgIC8vNEtCIFNlY3RvcnMKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBzZWN0ID0gQWRkcmVzcy8oU2VjU2l6ZTQrMSk7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHNlY3QgPSBjb252ICsgMzA7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVsc2UgaWYgKFRvcEJvb3QpCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChjb252ID49IDUxMCkgICAgICAgLy80S0IgU2VjdG9ycworICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHNlY3QgPSA1MTAgKyAoQWRkcmVzcy0oU2VjU2l6ZTY0KzEpKjUxMCkvKFNlY1NpemU0KzEpOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBzZWN0ID0gY29udjsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgZWxzZQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgc2VjdCA9IEFkZHJlc3MvKFNlY1NpemUyNTYrMSk7CisgICAgICAgIGVuZAorICAgIGVuZAorICAgIGVuZHRhc2sKKworICAgIGFsd2F5cyBAKFBQQkxbMF0sIEFTUF9yZWcpCisgICAgYmVnaW4KKyAgICAgICAgaWYgKFBQQkxbMF0gPT0gMCAmJiBQV0RNTEIgPT0gMCAmJiBSUE1FID09IDAgJiYgUmRQc3dkUHJvdEVuYWJsZSkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIFJkUHN3ZFByb3RNb2RlID0gMTsKKyAgICAgICAgICAgIEF1dG9Cb290X3JlZ1swXSA9IDA7Ly9BVVRPQk9PVCBpcyBkaXNhYmxlZCB3aGVuIFJlYWQgUGFzc3dvcmQKKyAgICAgICAgZW5kICAgICAgICAgICAgICAgICAgICAgLy9Qcm90ZWN0aW9uIGlzIGVuYWJsZWQKKyAgICAgICAgZWxzZQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgUmRQc3dkUHJvdE1vZGUgPSAwOworICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vIGVkZ2UgY29udHJvbGwgcHJvY2Vzc2VzCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBhbHdheXMgQChwb3NlZGdlIFBvd2VyZWRVcCkKKyAgICBiZWdpbgorICAgICAgICByaXNpbmdfZWRnZV9Qb3dlcmVkVXAgPSAxOworICAgICAgICAjMTAwMCByaXNpbmdfZWRnZV9Qb3dlcmVkVXAgPSAwOworICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSBTQ0tfaXBkKQorICAgIGJlZ2luCisgICAgICAgcmlzaW5nX2VkZ2VfU0NLX2lwZCA9IDEnYjE7CisgICAgICAgIzEwMDAgcmlzaW5nX2VkZ2VfU0NLX2lwZCA9IDEnYjA7CisgICAgZW5kCisKKyAgICBhbHdheXMgQChuZWdlZGdlIFNDS19pcGQpCisgICAgYmVnaW4KKyAgICAgICBmYWxsaW5nX2VkZ2VfU0NLX2lwZCA9IDEnYjE7CisgICAgICAgIzEwMDAgZmFsbGluZ19lZGdlX1NDS19pcGQgPSAxJ2IwOworICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSByZWFkX291dCkKKyAgICBiZWdpbgorICAgICAgICByaXNpbmdfZWRnZV9yZWFkX291dCA9IDEnYjE7CisgICAgICAgICMxMDAwIHJpc2luZ19lZGdlX3JlYWRfb3V0ID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKG5lZ2VkZ2Ugd3JpdGUpCisgICAgYmVnaW4KKyAgICAgICAgZmFsbGluZ19lZGdlX3dyaXRlID0gMTsKKyAgICAgICAgIzEwMDAgZmFsbGluZ19lZGdlX3dyaXRlID0gMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHBvc2VkZ2UgUFJHU1VTUF9vdXQpCisgICAgYmVnaW4KKyAgICAgICAgUFJHU1VTUF9vdXRfZXZlbnQgPSAxOworICAgICAgICAjMTAwMCBQUkdTVVNQX291dF9ldmVudCA9IDA7CisgICAgZW5kCisKKyAgICBhbHdheXMgQChwb3NlZGdlIEVSU1NVU1Bfb3V0KQorICAgIGJlZ2luCisgICAgICAgIEVSU1NVU1Bfb3V0X2V2ZW50ID0gMTsKKyAgICAgICAgIzEwMDAgRVJTU1VTUF9vdXRfZXZlbnQgPSAwOworICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSBDU05lZ19pcGQpCisgICAgYmVnaW4KKyAgICAgICAgcmlzaW5nX2VkZ2VfQ1NOZWdfaXBkID0gMSdiMTsKKyAgICAgICAgIzEwMDAgcmlzaW5nX2VkZ2VfQ1NOZWdfaXBkID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKG5lZ2VkZ2UgQ1NOZWdfaXBkKQorICAgIGJlZ2luCisgICAgICAgIGZhbGxpbmdfZWRnZV9DU05lZ19pcGQgPSAxJ2IxOworICAgICAgICAjMTAwMCBmYWxsaW5nX2VkZ2VfQ1NOZWdfaXBkID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKG5lZ2VkZ2UgUlNUTmVnX2luKQorICAgIGJlZ2luCisgICAgICAgIGZhbGxpbmdfZWRnZV9SU1ROZWcgPSAxJ2IxOworICAgICAgICAjNTAwMDAgZmFsbGluZ19lZGdlX1JTVE5lZyA9IDEnYjA7CisgICAgZW5kCisKKyAgICBhbHdheXMgQChwb3NlZGdlIFJTVE5lZ19pbikKKyAgICBiZWdpbgorICAgICAgICByaXNpbmdfZWRnZV9SU1ROZWcgPSAxJ2IxOworICAgICAgICAjMTAwMDAgcmlzaW5nX2VkZ2VfUlNUTmVnID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKG5lZ2VkZ2UgUlNUKQorICAgIGJlZ2luCisgICAgICAgIGZhbGxpbmdfZWRnZV9SU1QgPSAxJ2IxOworICAgICAgICAjMTAwMDAgZmFsbGluZ19lZGdlX1JTVCA9IDEnYjA7CisgICAgZW5kCisKKyAgICBhbHdheXMgQChwb3NlZGdlIFJTVCkKKyAgICBiZWdpbgorICAgICAgICByaXNpbmdfZWRnZV9SU1QgPSAxJ2IxOworICAgICAgICAjMTAwMCByaXNpbmdfZWRnZV9SU1QgPSAxJ2IwOworICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSBQRE9ORSkKKyAgICBiZWdpbgorICAgICAgICByaXNpbmdfZWRnZV9QRE9ORSA9IDEnYjE7CisgICAgICAgICMxMDAwIHJpc2luZ19lZGdlX1BET05FID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHBvc2VkZ2UgV0RPTkUpCisgICAgYmVnaW4KKyAgICAgICAgcmlzaW5nX2VkZ2VfV0RPTkUgPSAxJ2IxOworICAgICAgICAjMTAwMCByaXNpbmdfZWRnZV9XRE9ORSA9IDEnYjA7CisgICAgZW5kCisKKyAgICBhbHdheXMgQChwb3NlZGdlIFdTVEFSVCkKKyAgICBiZWdpbgorICAgICAgICByaXNpbmdfZWRnZV9XU1RBUlQgPSAxJ2IxOworICAgICAgICAjMTAwMCByaXNpbmdfZWRnZV9XU1RBUlQgPSAxJ2IwOworICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSBFRE9ORSkKKyAgICBiZWdpbgorICAgICAgICByaXNpbmdfZWRnZV9FRE9ORSA9IDEnYjE7CisgICAgICAgICMxMDAwIHJpc2luZ19lZGdlX0VET05FID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHBvc2VkZ2UgRVNUQVJUKQorICAgIGJlZ2luCisgICAgICAgIHJpc2luZ19lZGdlX0VTVEFSVCA9IDEnYjE7CisgICAgICAgICMxMDAwIHJpc2luZ19lZGdlX0VTVEFSVCA9IDEnYjA7CisgICAgZW5kCisKKyAgICBhbHdheXMgQChwb3NlZGdlIFBTVEFSVCkKKyAgICBiZWdpbgorICAgICAgICByaXNpbmdfZWRnZV9QU1RBUlQgPSAxJ2IxOworICAgICAgICAjMTAwMCByaXNpbmdfZWRnZV9QU1RBUlQgPSAxJ2IwOworICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSBSZXNldGVkKQorICAgIGJlZ2luCisgICAgICAgIHJpc2luZ19lZGdlX1Jlc2V0ZWQgPSAxJ2IxOworICAgICAgICAjMTAwMCByaXNpbmdfZWRnZV9SZXNldGVkID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKG5lZ2VkZ2UgUEFTU1VMQ0tfaW4pCisgICAgYmVnaW4KKyAgICAgICAgZmFsbGluZ19lZGdlX1BBU1NVTENLX2luID0gMSdiMTsKKyAgICAgICAgIzEwMDAgZmFsbGluZ19lZGdlX1BBU1NVTENLX2luID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKG5lZ2VkZ2UgUFBCRVJBU0VfaW4pCisgICAgYmVnaW4KKyAgICAgICAgZmFsbGluZ19lZGdlX1BQQkVSQVNFX2luID0gMSdiMTsKKyAgICAgICAgIzEwMDAgZmFsbGluZ19lZGdlX1BQQkVSQVNFX2luID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKEluc3RydWN0KQorICAgIGJlZ2luCisgICAgICAgIEluc3RydWN0X2V2ZW50ID0gMSdiMTsKKyAgICAgICAgIzEwMDAgSW5zdHJ1Y3RfZXZlbnQgPSAxJ2IwOworICAgIGVuZAorCisgICAgYWx3YXlzIEAoY2hhbmdlX2FkZHIpCisgICAgYmVnaW4KKyAgICAgICAgY2hhbmdlX2FkZHJfZXZlbnQgPSAxJ2IxOworICAgICAgICAjMTAwMCBjaGFuZ2VfYWRkcl9ldmVudCA9IDEnYjA7CisgICAgZW5kCisKKyAgICBhbHdheXMgQChuZXh0X3N0YXRlKQorICAgIGJlZ2luCisgICAgICAgIG5leHRfc3RhdGVfZXZlbnQgPSAxJ2IxOworICAgICAgICAjMTAwMCBuZXh0X3N0YXRlX2V2ZW50ID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKGN1cnJlbnRfc3RhdGUpCisgICAgYmVnaW4KKyAgICAgICAgY3VycmVudF9zdGF0ZV9ldmVudCA9IDEnYjE7CisgICAgICAgICMxMDAwIGN1cnJlbnRfc3RhdGVfZXZlbnQgPSAxJ2IwOworICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSBSU1Rfb3V0KQorICAgIGJlZ2luCisgICAgICAgIHJpc2luZ19lZGdlX1JTVF9vdXQgPSAxJ2IxOworICAgICAgICAjMTAwMCByaXNpbmdfZWRnZV9SU1Rfb3V0ID0gMSdiMDsKKyAgICBlbmQKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L21vZGVsL3NwaXJhbS52IGIvdmVyaWxvZy9kdi9tb2RlbC9zcGlyYW0udgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDMzYzExCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9tb2RlbC9zcGlyYW0udgpAQCAtMCwwICsxLDMyOSBAQAorYGRlZmF1bHRfbmV0dHlwZSBub25lCisvKgorICogIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjIgPERpbmVzaCBBbm5heXlhPgorICoKKyAqICBSaXNjZHVuaW8gCisgKgorICogIENvcHlyaWdodCAoQykgMjAyMiAgRGluZXNoIEFubmF5eWEgPGRpbmVzaGEub3BlbmNvcmUub3JnPgorICoKKyAqICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiAgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiAgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQworICovCisKK2B0aW1lc2NhbGUgMSBucyAvIDEgcHMKKworLy8KKy8vIFNpbXBsZSBTUEkgUmFtIHNpbXVsYXRpb24gbW9kZWwgZm9yIDEyOEt4OCBMT1cgVk9MVEFHRSwgRkFTVCBTRVJJQUwgU1JBTQorLy8gKElTNjIvNjVXVlMxMjg4R0FMTCkKKy8vCisvLyBUaGlzIG1vZGVsIHNhbXBsZXMgaW8gaW5wdXQgc2lnbmFscyAxbnMgYmVmb3JlIHRoZSBTUEkgY2xvY2sgZWRnZSBhbmQKKy8vIHVwZGF0ZXMgb3V0cHV0IHNpZ25hbHMgMW5zIGFmdGVyIHRoZSBTUEkgY2xvY2sgZWRnZS4KKy8vCisvLyBTdXBwb3J0ZWQgY29tbWFuZHM6CisvLyAgICAweDAzLCAweDAyLCAweDNCICwgMHgzOCwgMHhGRiwgMHgwNSAsIDB4MDEKKy8vICAgIEluc3RydWN0aW9uICAgSGV4ICAgICBEZXNjcmlwdGlvbgorLy8gICAgUkVBRCAgICAgICAgICAweDAzICAgIFJlYWQgZGF0YSBmcm9tIG1lbW9yeSBhcnJheSBiZWdpbm5pbmcgYXQgc2VsZWN0ZWQgYWRkcmVzcworLy8gICAgV1JJVEUgICAgICAgICAweDAyICAgIFdyaXRlIGRhdGEgdG8gbWVtb3J5IGFycmF5IGJlZ2lubmluZyBhdCBzZWxlY3RlZCBhZGRyZXNzCisvLyAgICBFU0RJICAgICAgICAgIDB4M0IgICAgRW50ZXIgU0RJIG1vZGUKKy8vICAgIEVTUUkgICAgICAgICAgMHgzOCAgICBFbnRlciBTUUkgbW9kZQorLy8gICAgUlNURFFJICAgICAgICAweEZGICAgIFJlc2V0IFNESS9TUUkgbW9kZQorLy8gICAgUkRNUiAgICAgICAgICAweDA1ICAgIFJlYWQgTW9kZSBSZWdpc3RlcgorLy8gICAgV1JNUiAgICAgICAgICAweDAxICAgIFdyaXRlIE1vZGUgUmVnaXN0ZXIKKy8vCisKK21vZHVsZSBzcGlyYW0gIygKKwlwYXJhbWV0ZXIgbWVtX2ZpbGVfbmFtZSA9ICJmaXJtd2FyZS5oZXgiCispKAorCWlucHV0IGNzYiwKKwlpbnB1dCBjbGssCisJaW5vdXQgaW8wLCAvLyBNT1NJCisJaW5vdXQgaW8xLCAvLyBNSVNPCisJaW5vdXQgaW8yLAorCWlub3V0IGlvMworKTsKKwlsb2NhbHBhcmFtIHZlcmJvc2UgPSAwOworCWxvY2FscGFyYW0gaW50ZWdlciBsYXRlbmN5ID0gODsKKwkKKwlyZWcgWzc6MF0gYnVmZmVyOworCXJlZyBbMzowXSByZXNldF9jb3VudCA9IDA7CisJcmVnIFszOjBdIHJlc2V0X21vbml0b3IgPSAwOworCWludGVnZXIgYml0Y291bnQgPSAwOworCWludGVnZXIgYnl0ZWNvdW50ID0gMDsKKwlpbnRlZ2VyIGR1bW15Y291bnQgPSAwOworCisJcmVnIFs3OjBdIHNwaV9jbWQ7CisJcmVnIFsyMzowXSBzcGlfYWRkcjsKKworCXJlZyBbNzowXSBzcGlfaW47CisJcmVnIFs3OjBdIHNwaV9vdXQ7CisJcmVnIHNwaV9pb192bGQ7CisKKworCWxvY2FscGFyYW0gWzE6MF0gc3NwaSAgICAgPSAxOworCWxvY2FscGFyYW0gWzE6MF0gZHNwaSAgICAgPSAyOworCWxvY2FscGFyYW0gWzE6MF0gcXNwaSAgICAgPSAzOworCisJbG9jYWxwYXJhbSBbMzowXSBtb2RlX3NzcGlfcmQgICAgID0gMTsKKwlsb2NhbHBhcmFtIFszOjBdIG1vZGVfc3NwaV93ciAgICAgPSAyOworCWxvY2FscGFyYW0gWzM6MF0gbW9kZV9kc3BpX3JkICAgICA9IDM7CisJbG9jYWxwYXJhbSBbMzowXSBtb2RlX2RzcGlfd3IgICAgID0gNDsKKwlsb2NhbHBhcmFtIFszOjBdIG1vZGVfcXNwaV9yZCAgICAgPSA1OworCWxvY2FscGFyYW0gWzM6MF0gbW9kZV9xc3BpX3dyICAgICA9IDY7CisKKwlyZWcgWzM6MF0gc3BpX3BoYXNlID0gbW9kZV9zc3BpX3JkOworCXJlZyBbMzowXSBzcGlfZGF0YV9waGFzZSA9IDA7CisJcmVnIFszOjBdIHNwaV9tb2RlID0gc3NwaTsKKworCXJlZyBpbzBfb2UgPSAwOworCXJlZyBpbzFfb2UgPSAwOworCXJlZyBpbzJfb2UgPSAwOworCXJlZyBpbzNfb2UgPSAwOworCisJcmVnIGlvMF9kb3V0ID0gMDsKKwlyZWcgaW8xX2RvdXQgPSAwOworCXJlZyBpbzJfZG91dCA9IDA7CisJcmVnIGlvM19kb3V0ID0gMDsKKworCWFzc2lnbiAjMSBpbzAgPSBpbzBfb2UgPyBpbzBfZG91dCA6IDEnYno7CisJYXNzaWduICMxIGlvMSA9IGlvMV9vZSA/IGlvMV9kb3V0IDogMSdiejsKKwlhc3NpZ24gIzEgaW8yID0gaW8yX29lID8gaW8yX2RvdXQgOiAxJ2J6OworCWFzc2lnbiAjMSBpbzMgPSBpbzNfb2UgPyBpbzNfZG91dCA6IDEnYno7CisKKwl3aXJlIGlvMF9kZWxheWVkOworCXdpcmUgaW8xX2RlbGF5ZWQ7CisJd2lyZSBpbzJfZGVsYXllZDsKKwl3aXJlIGlvM19kZWxheWVkOworCisJYXNzaWduICMxIGlvMF9kZWxheWVkID0gaW8wOworCWFzc2lnbiAjMSBpbzFfZGVsYXllZCA9IGlvMTsKKwlhc3NpZ24gIzEgaW8yX2RlbGF5ZWQgPSBpbzI7CisJYXNzaWduICMxIGlvM19kZWxheWVkID0gaW8zOworCisJLy8gMTI4S0IgUkFNCisJcmVnIFs3OjBdIG1lbW9yeSBbMDoxMjgqMTAyNC0xXTsKKworCWluaXRpYWwgYmVnaW4KKyAgICAgICAgICAgaWYgKCEobWVtX2ZpbGVfbmFtZSA9PSAibm9uZSIpKQorICAgICAgICAgICAgICAkcmVhZG1lbWgobWVtX2ZpbGVfbmFtZSxtZW1vcnkpOworCWVuZAorCisJdGFzayBzcGlfYWN0aW9uOworCQliZWdpbgorCQkgICBzcGlfaW4gPSBidWZmZXI7CisKKwkJICAgaWYgKGJ5dGVjb3VudCA9PSAxKSBiZWdpbgorCQkgICAJc3BpX2NtZCA9IGJ1ZmZlcjsKKworCQkJaWYgKHNwaV9jbWQgPT0gOCdoIDNiKSBiZWdpbgorCQkgICAJCXNwaV9tb2RlID0gZHNwaTsKKwkJCWVuZAorCisJCQlpZiAoc3BpX2NtZCA9PSA4J2ggMzgpIGJlZ2luCisJCSAgIAkJc3BpX21vZGUgPSBxc3BpOworCQkJZW5kCisKKwkJCWlmIChzcGlfY21kID09IDgnaCBmZikgYmVnaW4KKwkJICAgCQlzcGlfbW9kZSA9IHNzcGk7CisJCQllbmQKKworCQkJLy8gc3BpIHJlYWQKKwkJICAgCWlmIChzcGlfY21kID09IDgnaCAwMyAmJiBzcGlfbW9kZSA9PSBzc3BpKQorCQkJICAgc3BpX3BoYXNlID0gbW9kZV9zc3BpX3JkOworCisJCSAgICAgICAgLy8gc3BpIHdyaXRlCisJCSAgIAlpZiAoc3BpX2NtZCA9PSA4J2ggMDIgJiYgc3BpX21vZGUgPT0gc3NwaSkKKwkJCSAgIHNwaV9waGFzZSA9IG1vZGVfc3NwaV93cjsKKworCQkgICAgICAgIC8vIGR1YWwgc3BpIHJlYWQKKwkJICAgCWlmIChzcGlfY21kID09IDgnaCAwMyAmJiBzcGlfbW9kZSA9PSBkc3BpKQorCQkJICAgc3BpX3BoYXNlID0gbW9kZV9kc3BpX3JkOworCisJCSAgICAgICAgLy8gZHVhbCBzcGkgd3JpdGUKKwkJICAgCWlmIChzcGlfY21kID09IDgnaCAwMiAmJiBzcGlfbW9kZSA9PSBkc3BpKQorCQkJICAgc3BpX3BoYXNlID0gbW9kZV9kc3BpX3dyOworCisJCSAgICAgICAgLy8gcXVhZCBzcGkgcmVhZAorCQkgICAJaWYgKHNwaV9jbWQgPT0gOCdoIDAzICYmIHNwaV9tb2RlID09IHFzcGkpCisJCQkgICBzcGlfcGhhc2UgPSBtb2RlX3FzcGlfcmQ7CisKKwkJICAgICAgICAvLyBxdWFkIHNwaSB3cml0ZQorCQkgICAJaWYgKHNwaV9jbWQgPT0gOCdoIDAyICYmIHNwaV9tb2RlID09IHFzcGkpCisJCQkgICBzcGlfcGhhc2UgPSBtb2RlX3FzcGlfd3I7CisJCSAgIGVuZAorCisJCSAgIGlmIChzcGlfY21kID09ICdoIDAzIHx8IChzcGlfY21kID09ICdoIDAyKSkgYmVnaW4KKwkJICAgCWlmIChieXRlY291bnQgPT0gMikKKwkJICAgCQlzcGlfYWRkclsyMzoxNl0gPSBidWZmZXI7CisKKwkJICAgCWlmIChieXRlY291bnQgPT0gMykKKwkJICAgCQlzcGlfYWRkclsxNTo4XSA9IGJ1ZmZlcjsKKworCQkJaWYgKGJ5dGVjb3VudCA9PSA0KSBiZWdpbgorCQkgICAJICAgc3BpX2FkZHJbNzowXSA9IGJ1ZmZlcjsKKwkJCSAgIHNwaV9kYXRhX3BoYXNlID0gc3BpX3BoYXNlOworCQkJZW5kCisKKwkJCS8vIER1bW15IGJ5IHNlbGVjdGlvbiBhdCBlbmQgb2YgYWRkcmVzcyBwaGFzZSBmb3IgcmVhZAorCQkJLy8gbW9kZSBvbmx5CisJCSAgIAlpZiAoYnl0ZWNvdW50ID09IDQgJiYgc3BpX21vZGUgPT0gc3NwaSAmJiBzcGlfY21kID09OCdoMDMgKQorCQkJCWR1bW15Y291bnQgPSA4OworCQkgICAJaWYgKGJ5dGVjb3VudCA9PSA0ICYmIHNwaV9tb2RlID09IGRzcGkgJiYgc3BpX2NtZCA9PTgnaDAzKQorCQkJCWR1bW15Y291bnQgPSA0OworCQkgICAJaWYgKGJ5dGVjb3VudCA9PSA0ICYmIHNwaV9tb2RlID09IHFzcGkgJiYgc3BpX2NtZCA9PTgnaDAzKQorCQkJCWR1bW15Y291bnQgPSAyOworCisJCSAgIAlpZiAoYnl0ZWNvdW50ID49IDQgJiYgc3BpX2NtZCA9PTgnaDAzKSBiZWdpbiAvLyBEYXRhIFJlYWQgUGhhc2UKKwkJICAgCQlidWZmZXIgPSBtZW1vcnlbc3BpX2FkZHJdOworCQkJCS8vJGRpc3BsYXkoIiVtOiBSZWFkIE1lbW9yeSBBZGRyZXNzOiAleCBEYXRhOiAleCIsc3BpX2FkZHIsYnVmZmVyKTsKKwkJICAgCQlzcGlfYWRkciA9IHNwaV9hZGRyICsgMTsKKwkJICAgCWVuZAorCQkgICAJaWYgKGJ5dGVjb3VudCA+IDQgJiYgc3BpX2NtZCA9PTgnaDAyKSBiZWdpbiAvLyBEYXRhIFdyaXRlIFBoYXNlCisJCSAgIAkJbWVtb3J5W3NwaV9hZGRyXSA9IGJ1ZmZlcjsKKwkJCQkvLyRkaXNwbGF5KCIlbTogV3JpdGUgTWVtb3J5IEFkZHJlc3M6ICV4IERhdGE6ICV4IixzcGlfYWRkcixidWZmZXIpOworCQkgICAJCXNwaV9hZGRyID0gc3BpX2FkZHIgKyAxOworCQkgICAJZW5kCisJCSAgIGVuZAorCisJCQlzcGlfb3V0ID0gYnVmZmVyOworCQkJc3BpX2lvX3ZsZCA9IDE7CisKKwkJCWlmICh2ZXJib3NlKSBiZWdpbgorCQkJCWlmIChieXRlY291bnQgPT0gMSkKKwkJCQkJJHdyaXRlKCI8U1BJLVNUQVJUPiIpOworCQkJCSR3cml0ZSgiPFNQSTolMDJ4OiUwMng+Iiwgc3BpX2luLCBzcGlfb3V0KTsKKwkJCWVuZAorCisJCWVuZAorCWVuZHRhc2sKKworCisJYWx3YXlzIEAoY3NiKSBiZWdpbgorCQlpZiAoY3NiKSBiZWdpbgorCQkJaWYgKHZlcmJvc2UpIGJlZ2luCisJCQkJJGRpc3BsYXkoIiIpOworCQkJCSRmZmx1c2g7CisJCQllbmQKKwkJCWJ1ZmZlciA9IDA7CisJCQliaXRjb3VudCA9IDA7CisJCQlieXRlY291bnQgPSAwOworCQkJaW8wX29lID0gMDsKKwkJCWlvMV9vZSA9IDA7CisJCQlpbzJfb2UgPSAwOworCQkJaW8zX29lID0gMDsgCisJCQlzcGlfZGF0YV9waGFzZSA9IDA7CisKKwkJZW5kCisJZW5kCisKKworCWFsd2F5cyBAKGNzYiwgY2xrKSBiZWdpbgorCQlzcGlfaW9fdmxkID0gMDsKKwkJaWYgKCFjc2IgJiYgIWNsaykgYmVnaW4KKwkJCWlmIChkdW1teWNvdW50ID4gMCkgYmVnaW4KKwkJCQlpbzBfb2UgPSAwOworCQkJCWlvMV9vZSA9IDA7CisJCQkJaW8yX29lID0gMDsKKwkJCQlpbzNfb2UgPSAwOworCQkJZW5kIGVsc2UKKwkJCWNhc2UgKHNwaV9kYXRhX3BoYXNlKQorCQkJCW1vZGVfc3NwaV9yZDogYmVnaW4KKwkJCQkJaW8wX29lID0gMDsKKwkJCQkJaW8xX29lID0gMTsKKwkJCQkJaW8yX29lID0gMDsKKwkJCQkJaW8zX29lID0gMDsKKwkJCQkJaW8xX2RvdXQgPSBidWZmZXJbN107CisJCQkJZW5kCisJCQkJbW9kZV9zc3BpX3dyOiBiZWdpbgorCQkJCQlpbzBfb2UgPSAwOworCQkJCQlpbzFfb2UgPSAwOworCQkJCQlpbzJfb2UgPSAwOworCQkJCQlpbzNfb2UgPSAwOworCQkJCWVuZAorCQkJCW1vZGVfZHNwaV93cjogYmVnaW4KKwkJCQkJaW8wX29lID0gMDsKKwkJCQkJaW8xX29lID0gMDsKKwkJCQkJaW8yX29lID0gMDsKKwkJCQkJaW8zX29lID0gMDsKKwkJCQllbmQKKwkJCQltb2RlX2RzcGlfcmQ6IGJlZ2luCisJCQkJCWlvMF9vZSA9IDE7CisJCQkJCWlvMV9vZSA9IDE7CisJCQkJCWlvMl9vZSA9IDA7CisJCQkJCWlvM19vZSA9IDA7CisJCQkJCWlvMF9kb3V0ID0gYnVmZmVyWzZdOworCQkJCQlpbzFfZG91dCA9IGJ1ZmZlcls3XTsKKwkJCQllbmQKKwkJCQltb2RlX3FzcGlfd3I6IGJlZ2luCisJCQkJCWlvMF9vZSA9IDA7CisJCQkJCWlvMV9vZSA9IDA7CisJCQkJCWlvMl9vZSA9IDA7CisJCQkJCWlvM19vZSA9IDA7CisJCQkJZW5kCisJCQkJbW9kZV9xc3BpX3JkOiBiZWdpbgorCQkJCQlpbzBfb2UgPSAxOworCQkJCQlpbzFfb2UgPSAxOworCQkJCQlpbzJfb2UgPSAxOworCQkJCQlpbzNfb2UgPSAxOworCQkJCQlpbzBfZG91dCA9IGJ1ZmZlcls0XTsKKwkJCQkJaW8xX2RvdXQgPSBidWZmZXJbNV07CisJCQkJCWlvMl9kb3V0ID0gYnVmZmVyWzZdOworCQkJCQlpbzNfZG91dCA9IGJ1ZmZlcls3XTsKKwkJCQllbmQKKwkJCQlkZWZhdWx0OiBiZWdpbgorCQkJCQlpbzBfb2UgPSAwOworCQkJCQlpbzFfb2UgPSAwOworCQkJCQlpbzJfb2UgPSAwOworCQkJCQlpbzNfb2UgPSAwOworCQkJCWVuZAorCQkJZW5kY2FzZQorCQllbmQKKwllbmQKKworCWFsd2F5cyBAKHBvc2VkZ2UgY2xrKSBiZWdpbgorCQlpZiAoIWNzYikgYmVnaW4KKwkJCWlmIChkdW1teWNvdW50ID4gMCkgYmVnaW4KKwkJCQlkdW1teWNvdW50ID0gZHVtbXljb3VudCAtIDE7CisJCQllbmQgZWxzZQorCQkJY2FzZSAoc3BpX21vZGUpCisJCQkJc3NwaTogYmVnaW4KKwkJCQkJYnVmZmVyID0ge2J1ZmZlciwgaW8wfTsKKwkJCQkJYml0Y291bnQgPSBiaXRjb3VudCArIDE7CisJCQkJCWlmIChiaXRjb3VudCA9PSA4KSBiZWdpbgorCQkJCQkJYml0Y291bnQgPSAwOworCQkJCQkJYnl0ZWNvdW50ID0gYnl0ZWNvdW50ICsgMTsKKwkJCQkJCXNwaV9hY3Rpb247CisJCQkJCWVuZAorCQkJCWVuZAorCQkJCWRzcGk6IGJlZ2luCisJCQkJCWJ1ZmZlciA9IHtidWZmZXIsIGlvMSwgaW8wfTsKKwkJCQkJYml0Y291bnQgPSBiaXRjb3VudCArIDI7CisJCQkJCWlmIChiaXRjb3VudCA9PSA4KSBiZWdpbgorCQkJCQkJYml0Y291bnQgPSAwOworCQkJCQkJYnl0ZWNvdW50ID0gYnl0ZWNvdW50ICsgMTsKKwkJCQkJCXNwaV9hY3Rpb247CisJCQkJCWVuZAorCQkJCWVuZAorCQkJCXFzcGk6IGJlZ2luCisJCQkJCWJ1ZmZlciA9IHtidWZmZXIsIGlvMywgaW8yLCBpbzEsIGlvMH07CisJCQkJCWJpdGNvdW50ID0gYml0Y291bnQgKyA0OworCQkJCQlpZiAoYml0Y291bnQgPT0gOCkgYmVnaW4KKwkJCQkJCWJpdGNvdW50ID0gMDsKKwkJCQkJCWJ5dGVjb3VudCA9IGJ5dGVjb3VudCArIDE7CisJCQkJCQlzcGlfYWN0aW9uOworCQkJCQllbmQKKwkJCQllbmQKKwkJCWVuZGNhc2UKKwkJZW5kCisJZW5kCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY19ib290L01ha2VmaWxlIGIvdmVyaWxvZy9kdi9yaXNjX2Jvb3QvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhjODM4YwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY19ib290L01ha2VmaWxlCkBAIC0wLDAgKzEsMTEzIEBACisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKKyMjIFBESyAKK1BES19QQVRIID0gJChQREtfUk9PVCkvc2t5MTMwQQorCisjIyBDYXJhdmVsIFBvaW50ZXJzCitDQVJBVkVMX1JPT1QgPz0gLi4vLi4vLi4vY2FyYXZlbAorQ0FSQVZFTF9QQVRIID89ICQoQ0FSQVZFTF9ST09UKQorQ0FSQVZFTF9GSVJNV0FSRV9QQVRIID0gJChDQVJBVkVMX1BBVEgpL3Zlcmlsb2cvZHYvY2FyYXZlbAorQ0FSQVZFTF9WRVJJTE9HX1BBVEggID0gJChDQVJBVkVMX1BBVEgpL3Zlcmlsb2cKK0NBUkFWRUxfUlRMX1BBVEggPSAkKENBUkFWRUxfVkVSSUxPR19QQVRIKS9ydGwKK0NBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTID0gJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkvZHYvY2FyYXZlbAorCisjIyBVc2VyIFByb2plY3QgUG9pbnRlcnMKK1VQUkpfVkVSSUxPR19QQVRIID89IC4uLy4uLy4uL3Zlcmlsb2cKK1VQUkpfUlRMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9ydGwKK1VQUkpfQkVIQVZJT1VSQUxfTU9ERUxTID0gLi4vbW9kZWwKK1VQUkpfQkVIQVZJT1VSQUxfQUdFTlRTID0gLi4vYWdlbnRzCitVUFJKX0lOQ0xVREVfUEFUSDEgPSAkKFVQUkpfUlRMX1BBVEgpL3lpZml2ZS95Y3IxYy9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRIMiA9ICQoVVBSSl9SVExfUEFUSCkvc2RyYW1fY3RybC9zcmMvZGVmcworVVBSSl9JTkNMVURFX1BBVEgzID0gJChVUFJKX1JUTF9QQVRIKS9pMmNtL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEg0ID0gJChVUFJKX1JUTF9QQVRIKS91c2IxX2hvc3Qvc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDUgPSAkKFVQUkpfUlRMX1BBVEgpL21iaXN0L2luY2x1ZGUKKworIyMgWUlGSVZFIEZJUk1XQVJFCitZSUZJVkVfRklSTVdBUkVfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2R2L2Zpcm13YXJlCisjIyBSSVNDViBHQ0MgCitHQ0NfUEFUSD89L2VmL2FwcHMvYmluCitHQ0NfUFJFRklYPz1yaXNjdjMyLXVua25vd24tZWxmCitHQ0M2NF9QUkVGSVg/PXJpc2N2NjQtdW5rbm93bi1lbGYKKworIyMgU2ltdWxhdGlvbiBtb2RlOiBSVEwvR0wKK1NJTV9ERUZJTkVTID0gLURGVU5DVElPTkFMIC1EU0lNCitTSU0/PVJUTAorRFVNUD89T0ZGCisKKy5TVUZGSVhFUzoKKworUEFUVEVSTiA9IHJpc2NfYm9vdAorCithbGw6ICAke1BBVFRFUk46PS52Y2R9CisKK2hleDogICR7UEFUVEVSTjo9LmhleH0KKwordnZwOiAgJHtQQVRURVJOOj0udnZwfQorCislLnZ2cDogJV90Yi52ICUuaGV4CisJJHtHQ0M2NF9QUkVGSVh9LWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0wIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSSQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpICB1c2VyX3VhcnQuYyAtbyB1c2VyX3VhcnQubworCSR7R0NDNjRfUFJFRklYfS1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MCAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1EX19BU1NFTUJMWV9fPTEgLWMgLUkuLyAtSSQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpICAkKFlJRklWRV9GSVJNV0FSRV9QQVRIKS9jcnQuUyAtbyBjcnQubworCSR7R0NDNjRfUFJFRklYfS1nY2MgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLVQgJChZSUZJVkVfRklSTVdBUkVfUEFUSCkvbGluay5sZCB1c2VyX3VhcnQubyBjcnQubyAtbm9zdGFydGZpbGVzIC1ub3N0ZGxpYiAtbGMgLWxnY2MgLW8gdXNlcl91YXJ0LmVsZiAtTgorCSR7R0NDNjRfUFJFRklYfS1vYmpjb3B5IC1PIHZlcmlsb2cgdXNlcl91YXJ0LmVsZiB1c2VyX3VhcnQuaGV4CisJJHtHQ0M2NF9QUkVGSVh9LW9iamR1bXAgLUQgdXNlcl91YXJ0LmVsZiA+IHVzZXJfdWFydC5kdW1wCisJcm0gY3J0Lm8gdXNlcl91YXJ0Lm8KK2lmZXEgKCQoU0lNKSxSVEwpCisgICBpZmVxICgkKERVTVApLE9GRikKKwlpdmVyaWxvZyAtZzIwMTIgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpICBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEgxKSAgICAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMikgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDMpIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRINCkgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDUpIFwKKwkkPCAtbyAkQCAKKyAgIGVsc2UKKwlpdmVyaWxvZyAtZzIwMTIgLURXRkRVTVAgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpICBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEgxKSAgICAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMikgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDMpIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRINCkgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDUpIFwKKwkkPCAtbyAkQCAKKyAgIGVuZGlmCitlbHNlICAKKwlpdmVyaWxvZyAkKFNJTV9ERUZJTkVTKSAtREdMIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIC1JICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSQoVVBSSl9SVExfUEFUSCkgICAtSSAkKFVQUkpfVkVSSUxPR19QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgXAorCSQ8IC1vICRAIAorZW5kaWYKKworJS52Y2Q6ICUudnZwCisJdnZwICQ8CisKKyUuZWxmOiAlLmMgJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3NlY3Rpb25zLmxkcyAkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc3RhcnQucworCSR7R0NDNjRfUFJFRklYfS1nY2MgLUkgJChDQVJBVkVMX1BBVEgpIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1XbCwtQnN0YXRpYywtVCwkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc2VjdGlvbnMubGRzLC0tc3RyaXAtZGVidWcgLWZmcmVlc3RhbmRpbmcgLW5vc3RkbGliIC1vICRAICQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zdGFydC5zICQ8CisKKyUuaGV4OiAlLmVsZgorCSR7R0NDNjRfUFJFRklYfS1vYmpjb3B5IC1PIHZlcmlsb2cgJDwgJEAgCisJIyB0byBmaXggZmxhc2ggYmFzZSBhZGRyZXNzCisJc2VkIC1pICdzL0AxMDAwMDAwMC9AMDAwMDAwMDAvZycgJEAKKworJS5iaW46ICUuZWxmCisJJHtHQ0NfUEFUSH0vJHtHQ0NfUFJFRklYfS1vYmpjb3B5IC1PIGJpbmFyeSAkPCAvZGV2L3N0ZG91dCB8IHRhaWwgLWMgKzEwNDg1NzcgPiAkQAorCisjIC0tLS0gQ2xlYW4gLS0tLQorCitjbGVhbjoKKwlybSAtZiAqLmVsZiAqLmhleCAqLmJpbiAqLnZ2cCAqLnZjZCAqLmxvZyAqLmR1bXAKKworLlBIT05ZOiBjbGVhbiBoZXggYWxsCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2NfYm9vdC9yaXNjX2Jvb3QuYyBiL3Zlcmlsb2cvZHYvcmlzY19ib290L3Jpc2NfYm9vdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZTU0ZjAKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2NfYm9vdC9yaXNjX2Jvb3QuYwpAQCAtMCwwICsxLDE5MCBAQAorLyoKKyAqIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICovCisKKy8vIFRoaXMgaW5jbHVkZSBpcyByZWxhdGl2ZSB0byAkQ0FSQVZFTF9QQVRIIChzZWUgTWFrZWZpbGUpCisjaW5jbHVkZSAidmVyaWxvZy9kdi9jYXJhdmVsL2RlZnMuaCIKKyNpbmNsdWRlICJ2ZXJpbG9nL2R2L2NhcmF2ZWwvc3R1Yi5jIgorCisvLyBVc2VyIFByb2plY3QgU2xhdmVzICgweDMwMDBfMDAwMCkKKworI2RlZmluZSByZWdfbXByal93Ymhvc3RfcmVnMCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDgwMDAwMCkKKworI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcwICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAwMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMSAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMDQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDA4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWczICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAwQykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNCAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMTApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzUgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDE0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc2ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAxOCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNyAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMUMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzggICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDIwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc5ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAyNCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMjgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzExICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDJDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxMiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAzMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTMgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMzQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE0ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDM4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxNSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAzQykKKworI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMTAwMDApCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnMSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAxMDAwNCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWcyICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDEwMDA4KQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzMgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMTAwMEMpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnNCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAxMDAxMCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc1ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDEwMDE0KQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzYgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMTAwMTgpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnNyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAxMDAxQykKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc4ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDEwMDIwKQorCisjZGVmaW5lIEdQSU9fTU9ERV9VU0VSX1NURF9CSURJUkVDVElPTkFMX1BVTExVUCAgIDB4MUMwMAorCisjZGVmaW5lIFNDX1NJTV9PVVRQT1JUICgweGYwMDAwMDAwKQorCisvKgorICAgICAgICAgUmlzY1YgSGVsbG8gV29ybGQgdGVzdC4KKwkgICAgICAgIC0gV2FrZSB1cCB0aGUgUmlzYyBWCisJCS0gQm9vdCBmcm9tIFNQSSBGbGFzaAorCQktIFJpc2N2IFdyaXRlIEhlbGxvIFdvcmxkIHRvIFNEUkFNLAorCQktIEV4dGVybmFsIFdpc2hib25lIHJlYWQgYmFjayB2YWxpZGF0aW9uIHRoZSBkYXRhCisqLworaW50IGkgPSAwOyAKK2ludCBjbGsgPSAwOworCit2b2lkIG1haW4oKQoreworCisJaW50IGJGYWlsID0gMDsKKwkvKiAKKwlJTyBDb250cm9sIFJlZ2lzdGVycworCXwgRE0gICAgIHwgVlRSSVAgfCBTTE9XICB8IEFOX1BPTCB8IEFOX1NFTCB8IEFOX0VOIHwgTU9EX1NFTCB8IElOUF9ESVMgfCBIT0xESCB8IE9FQl9OIHwgTUdNVF9FTiB8CisJfCAzLWJpdHMgfCAxLWJpdCB8IDEtYml0IHwgMS1iaXQgIHwgMS1iaXQgIHwgMS1iaXQgfCAxLWJpdCAgIHwgMS1iaXQgICB8IDEtYml0IHwgMS1iaXQgfCAxLWJpdCAgIHwKKwlPdXRwdXQ6IDAwMDBfMDExMF8wMDAwXzExMTAgICgweDE4MDgpID0gR1BJT19NT0RFX1VTRVJfU1REX09VVFBVVAorCXwgRE0gICAgIHwgVlRSSVAgfCBTTE9XICB8IEFOX1BPTCB8IEFOX1NFTCB8IEFOX0VOIHwgTU9EX1NFTCB8IElOUF9ESVMgfCBIT0xESCB8IE9FQl9OIHwgTUdNVF9FTiB8CisJfCAxMTAgICAgfCAwICAgICB8IDAgICAgIHwgMCAgICAgIHwgMCAgICAgIHwgMCAgICAgfCAwICAgICAgIHwgMSAgICAgICB8IDAgICAgIHwgMCAgICAgfCAwICAgICAgIHwKKwkKKwkgCisJSW5wdXQ6IDAwMDBfMDAwMV8wMDAwXzExMTEgKDB4MDQwMikgPSBHUElPX01PREVfVVNFUl9TVERfSU5QVVRfTk9QVUxMCisJfCBETSAgICAgfCBWVFJJUCB8IFNMT1cgIHwgQU5fUE9MIHwgQU5fU0VMIHwgQU5fRU4gfCBNT0RfU0VMIHwgSU5QX0RJUyB8IEhPTERIIHwgT0VCX04gfCBNR01UX0VOIHwKKwl8IDAwMSAgICB8IDAgICAgIHwgMCAgICAgfCAwICAgICAgfCAwICAgICAgfCAwICAgICB8IDAgICAgICAgfCAwICAgICAgIHwgMCAgICAgfCAxICAgICB8IDAgICAgICAgfAorCisJSW5wdXQ6IDAwMDBfMDAwMV8wMDAwXzExMTEgKDB4MTgwMCkgPSBHUElPX01PREVfVVNFUl9TVERfQklESVJFQ1RJT05BTAorCXwgRE0gICAgIHwgVlRSSVAgfCBTTE9XICB8IEFOX1BPTCB8IEFOX1NFTCB8IEFOX0VOIHwgTU9EX1NFTCB8IElOUF9ESVMgfCBIT0xESCB8IE9FQl9OIHwgTUdNVF9FTiB8CisJfCAxMTAgICAgfCAwICAgICB8IDAgICAgIHwgMCAgICAgIHwgMCAgICAgIHwgMCAgICAgfCAwICAgICAgIHwgMCAgICAgICB8IDAgICAgIHwgMCAgICAgfCAwICAgICAgIHwKKwkqLworCisJLyogU2V0IHVwIHRoZSBob3VzZWtlZXBpbmcgU1BJIHRvIGJlIGNvbm5lY3RlZCBpbnRlcm5hbGx5IHNvCSovCisJLyogdGhhdCBleHRlcm5hbCBwaW4gY2hhbmdlcyBkb24ndCBhZmZlY3QgaXQuCQkJKi8KKworCXJlZ19zcGltYXN0ZXJfY29uZmlnID0gMHhhMDAyOwkvLyBFbmFibGUsIHByZXNjYWxlciA9IDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ubmVjdCB0byBob3VzZWtlZXBpbmcgU1BJCisKKwkvLyBDb25uZWN0IHRoZSBob3VzZWtlZXBpbmcgU1BJIHRvIHRoZSBTUEkgbWFzdGVyCisJLy8gc28gdGhhdCB0aGUgQ1NCIGxpbmUgaXMgbm90IGxlZnQgZmxvYXRpbmcuICBUaGlzIGFsbG93cworCS8vIGFsbCBvZiB0aGUgR1BJTyBwaW5zIHRvIGJlIHVzZWQgZm9yIHVzZXIgZnVuY3Rpb25zLgorICAgICAgICByZWdfbXByal9pb18zMSA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzMwID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMjkgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18yOCA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzI3ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMjYgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18yNSA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzI0ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMjMgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18yMiA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzIxID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMjAgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18xOSA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzE4ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMTcgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18xNiA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisKKworICAgICAvKiBBcHBseSBjb25maWd1cmF0aW9uICovCisgICAgcmVnX21wcmpfeGZlciA9IDE7CisgICAgd2hpbGUgKHJlZ19tcHJqX3hmZXIgPT0gMSk7CisKKyAgICByZWdfbGEyX29lbmIgPSByZWdfbGEyX2llbmEgPSAweEZGRkZGRkZGOyAgICAvLyBbOTU6NjRdCisKKyAgICAvLyBGbGFnIHN0YXJ0IG9mIHRoZSB0ZXN0CisJcmVnX21wcmpfZGF0YWwgPSAweEFCNjAwMDAwOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFN0YXJ0IG9mIFVzZXIgRnVuY3Rpb25hbGl0eSBhbmQgdGFrZSBvdmVyIHRoZSBHUElPIFBpbnMKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBVc2VyIGJsb2NrIGRlY2lkZSBvbiB0aGUgR1BJTyBmdW5jdGlvbgorICAgIHJlZ19tcHJqX2lvXzM3ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzM2ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzM1ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzM0ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMzID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMyID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMxID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMwID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI5ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI4ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI3ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI2ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI1ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI0ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIzID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIyID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIxID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIwID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE5ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE4ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE3ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE2ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE1ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE0ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzEzID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzEyID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzExID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzEwID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzkgID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzggID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzcgID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzYgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzUgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzQgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzEgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzAgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworCisgICAgIC8qIEFwcGx5IGNvbmZpZ3VyYXRpb24gKi8KKyAgICByZWdfbXByal94ZmVyID0gMTsKKyAgICB3aGlsZSAocmVnX21wcmpfeGZlciA9PSAxKTsKKworICAgIHJlZ19sYTBfZGF0YSA9IDB4MDAwOworICAgIHJlZ19sYTBfZGF0YSA9IDB4MDAxOyAvLyBSZW1vdmUgU29mdCBSZXNldAorCisKKyAgICAvLyBSZW1vdmUgV2lzaGJvbmUgUmVzZXQKKyAgICByZWdfbXByal93Ymhvc3RfcmVnMCA9IDB4MTsKKworCisgICAgLy8gUmVtb3ZlIEFsbCBSZXNldAorICAgIHJlZ19tcHJqX3diaG9zdF9yZWcwID0gMHgxRjsKKworICAgIC8vIEVuYWJsZSBVQVJUIE11bHRpIEZ1bmN0aW9uYWwgUG9ydHMKKworICAgIHJlZ19tcHJqX2dsb2JsX3JlZzE0ID0gMHgxMDA7CisKKyAgICAvLyBjb25maWd1cmUgdGhlIHVzZXIgdWFydAorICAgIHJlZ19tcHJqX3VhcnRfcmVnMCAgPSAweDc7CisKK30KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY19ib290L3Jpc2NfYm9vdF90Yi52IGIvdmVyaWxvZy9kdi9yaXNjX2Jvb3QvcmlzY19ib290X3RiLnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM0ZGI2MwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY19ib290L3Jpc2NfYm9vdF90Yi52CkBAIC0wLDAgKzEsMzg5IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAgMjAyMSAsIERpbmVzaCBBbm5heXlhCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBNb2RpZmllZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVXNlciBSaXNjIENvcmUgQm9vdCBWYWxpZGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFlJRml2ZSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWlmaXZlX3IwLmdpdCAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3lpZml2ZS8gICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgMS4gVXNlciBSaXNjIGNvcmUgaXMgYm9vdGVkIHVzaW5nICBjb21waWxlZCBjb2RlIG9mICAgICAgLy8vLworLy8vLyAgICAgICAgdXNlcl9yaXNjX2Jvb3QuaGV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgMi4gVXNlciBSaXNjIGNvcmUgdXNlcyBTZXJpYWwgRmxhc2ggYW5kIFNEUkFNIHRvIGJvb3QgICAgLy8vLworLy8vLyAgICAgMy4gQWZ0ZXIgc3VjY2Vzc2Z1bCBib290LCBSaXNjIGNvcmUgd2lsbCAgd3JpdGUgc2lnbmF0dXJlLy8vLworLy8vLyAgICAgICAgaW4gdG8gIHVzZXIgcmVnaXN0ZXIgZnJvbSAweDMwMDBfMDAxOCB0byAweDMwMDBfMDAyQyAgLy8vLworLy8vLyAgICAgNC4gVGhyb3VnaCB0aGUgRXh0ZXJuYWwgV2lzaGJvbmUgSW50ZXJmYWNlIHdlIHJlYWQgYmFjayAgLy8vLworLy8vLyAgICAgICAgIGFuZCB2YWxpZGF0ZSB0aGUgdXNlciByZWdpc3RlciB0byBkZWNsYXJlZCBwYXNzIGZhaWwgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjEgLSAxMnRoIEp1bmUgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLworLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLworLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLworLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLworLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLworLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLworLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLworLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLworLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitgZGVmYXVsdF9uZXR0eXBlIG5vbmUKKworYHRpbWVzY2FsZSAxIG5zIC8gMSBwcworCitgaW5jbHVkZSAiczI1ZmwyNTZzLnN2IgorYGluY2x1ZGUgInVwcmpfbmV0bGlzdHMudiIKK2BpbmNsdWRlICJjYXJhdmVsX25ldGxpc3RzLnYiCitgaW5jbHVkZSAic3BpZmxhc2gudiIKK2BpbmNsdWRlICJtdDQ4bGM4bThhMi52IgorYGluY2x1ZGUgInVhcnRfYWdlbnQudiIKKworbW9kdWxlIHJpc2NfYm9vdF90YjsKKwlyZWcgY2xvY2s7CisJcmVnIFJTVEI7CisJcmVnIENTQjsKKwlyZWcgcG93ZXIxLCBwb3dlcjI7CisJcmVnIHBvd2VyMywgcG93ZXI0OworCisJd2lyZSBncGlvOworCXdpcmUgWzM3OjBdIG1wcmpfaW87CisJd2lyZSBbNzowXSBtcHJqX2lvXzA7CisJd2lyZSBbMTU6MF0gY2hlY2tiaXRzOworCisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLyBVYXJ0IENvbmZpZ3VyYXRpb24KKyAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIHJlZyBbMTowXSAgICAgIHVhcnRfZGF0YV9iaXQgICAgICAgIDsKKyAgICAgICAgcmVnCSAgICAgICB1YXJ0X3N0b3BfYml0cyAgICAgICA7IC8vIDA6IDEgc3RvcCBiaXQ7IDE6IDIgc3RvcCBiaXQ7CisgICAgICAgIHJlZwkgICAgICAgdWFydF9zdGlja19wYXJpdHkgICAgOyAvLyAxOiBmb3JjZSBldmVuIHBhcml0eQorICAgICAgICByZWcJICAgICAgIHVhcnRfcGFyaXR5X2VuICAgICAgIDsgLy8gcGFyaXR5IGVuYWJsZQorICAgICAgICByZWcJICAgICAgIHVhcnRfZXZlbl9vZGRfcGFyaXR5IDsgLy8gMDogb2RkIHBhcml0eTsgMTogZXZlbiBwYXJpdHkKKyAgICAgICAgCisgICAgICAgIHJlZyBbNzowXSAgICAgIHVhcnRfZGF0YSAgICAgICAgICAgIDsKKyAgICAgICAgcmVnIFsxNTowXSAgICAgdWFydF9kaXZpc29yICAgICAgICAgOwkvLyBkaXZpZGVkIGJ5IG4gKiAxNgorICAgICAgICByZWcgWzE1OjBdICAgICB1YXJ0X3RpbWVvdXQgICAgICAgICA7Ly8gd2FpdCB0aW1lIGxpbWl0CisgICAgICAgIAorICAgICAgICByZWcgWzE1OjBdICAgICB1YXJ0X3J4X251ICAgICAgICAgICA7CisgICAgICAgIHJlZyBbMTU6MF0gICAgIHVhcnRfdHhfbnUgICAgICAgICAgIDsKKyAgICAgICAgcmVnIFs3OjBdICAgICAgdWFydF93cml0ZV9kYXRhIFswOjM5XTsKKyAgICAgICAgcmVnIAkgICAgICAgdWFydF9maWZvX2VuYWJsZSAgICAgOwkvLyBmaWZvIG1vZGUgZGlzYWJsZQorCXJlZyAgICAgICAgICAgIHRlc3RfZmFpbCAgICAgICAgICAgIDsKKyAgICAgICAgCisgICAgICAgIGludGVnZXIgaSxqOworCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCisJYXNzaWduIGNoZWNrYml0cyA9IG1wcmpfaW9bMzE6MTZdOworCisJYXNzaWduIG1wcmpfaW9bM10gPSAoQ1NCID09IDEnYjEpID8gMSdiMSA6IDEnYno7CisKKwkvLyBFeHRlcm5hbCBjbG9jayBpcyB1c2VkIGJ5IGRlZmF1bHQuICBNYWtlIHRoaXMgYXJ0aWZpY2lhbGx5IGZhc3QgZm9yIHRoZQorCS8vIHNpbXVsYXRpb24uICBOb3JtYWxseSB0aGlzIHdvdWxkIGJlIGEgc2xvdyBjbG9jayBhbmQgdGhlIGRpZ2l0YWwgUExMCisJLy8gd291bGQgYmUgdGhlIGZhc3QgY2xvY2suCisKKwlhbHdheXMgIzEyLjUgY2xvY2sgPD0gKGNsb2NrID09PSAxJ2IwKTsKKworCWluaXRpYWwgYmVnaW4KKwkJY2xvY2sgPSAwOworCWVuZAorCisJYGlmZGVmIFdGRFVNUAorICAgICAgICBpbml0aWFsCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICRkdW1wZmlsZSgic2lteC52Y2QiKTsKKyAgICAgICAgICAgJGR1bXB2YXJzKDEscmlzY19ib290X3RiKTsKKyAgICAgICAgICAgJGR1bXB2YXJzKDEscmlzY19ib290X3RiLnVfc3BpX2ZsYXNoXzI1Nm1iKTsKKyAgICAgICAgICAgLy8kZHVtcHZhcnMoMixyaXNjX2Jvb3RfdGIudXV0KTsKKyAgICAgICAgICAgJGR1bXB2YXJzKDQscmlzY19ib290X3RiLnV1dC5tcHJqKTsKKyAgICAgICAgICAgJGR1bXB2YXJzKDAscmlzY19ib290X3RiLnRiX3VhcnQpOworICAgICAgICAgICAvLyRkdW1wdmFycygwLHJpc2NfYm9vdF90Yi51X3VzZXJfc3BpZmxhc2gpOworCSAgICRkaXNwbGF5KCJXYXZlZm9ybSBEdW1wIHN0YXJ0ZWQiKTsKKyAgICAgICAgZW5kCisgICAgICAgIGBlbmRpZgorCisKKyAgICAgICAgaW5pdGlhbAorICAgICAgICBiZWdpbgorICAgICAgICAgICB1YXJ0X2RhdGFfYml0ICAgICAgICAgICA9IDInYjExOworICAgICAgICAgICB1YXJ0X3N0b3BfYml0cyAgICAgICAgICA9IDA7IC8vIDA6IDEgc3RvcCBiaXQ7IDE6IDIgc3RvcCBiaXQ7CisgICAgICAgICAgIHVhcnRfc3RpY2tfcGFyaXR5ICAgICAgID0gMDsgLy8gMTogZm9yY2UgZXZlbiBwYXJpdHkKKyAgICAgICAgICAgdWFydF9wYXJpdHlfZW4gICAgICAgICAgPSAwOyAvLyBwYXJpdHkgZW5hYmxlCisgICAgICAgICAgIHVhcnRfZXZlbl9vZGRfcGFyaXR5ICAgID0gMTsgLy8gMDogb2RkIHBhcml0eTsgMTogZXZlbiBwYXJpdHkKKyAgICAgICAgICAgdWFydF9kaXZpc29yICAgICAgICAgICAgPSAxNTsvLyBkaXZpZGVkIGJ5IG4gKiAxNgorICAgICAgICAgICB1YXJ0X3RpbWVvdXQgICAgICAgICAgICA9IDUwMDsvLyB3YWl0IHRpbWUgbGltaXQKKyAgICAgICAgICAgdWFydF9maWZvX2VuYWJsZSAgICAgICAgPSAwOwkvLyBmaWZvIG1vZGUgZGlzYWJsZQorICAgICAgICAKKyAgICAgICAgICAgIzIwMDsgLy8gV2FpdCBmb3IgcmVzZXQgcmVtb3ZhbAorCisgICAgICAgICAgIGZvcmsKKwkgICBiZWdpbgorICAgICAgICAgIAorCSAgICAgIC8vIFdhaXQgZm9yIE1hbmFnbWVudCBjb3JlIHRvIGJvb3QgdXAgCisJICAgICAgd2FpdChjaGVja2JpdHMgPT0gMTYnaCBBQjYwKTsKKwkgICAgICAkZGlzcGxheSgiTW9uaXRvcjogVGVzdCBVc2VyIFJpc2MgQm9vdCBTdGFydGVkIik7CisgICAgICAgCisJICAgICAgLy8gV2FpdCBmb3IgdXNlciByaXNjIGNvcmUgdG8gYm9vdCB1cCAKKyAgICAgICAgICAgICAgcmVwZWF0ICgzMDAwMCkgQChwb3NlZGdlIGNsb2NrKTsgIAorICAgICAgICAgICAgICB0Yl91YXJ0LnVhcnRfaW5pdDsKKyAgICAgICAgICAgICAgdGJfdWFydC5jb250cm9sX3NldHVwICh1YXJ0X2RhdGFfYml0LCB1YXJ0X3N0b3BfYml0cywgdWFydF9wYXJpdHlfZW4sIHVhcnRfZXZlbl9vZGRfcGFyaXR5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVhcnRfc3RpY2tfcGFyaXR5LCB1YXJ0X3RpbWVvdXQsIHVhcnRfZGl2aXNvcik7CisgICAgICAgICAgICAgIAorICAgICAgICAgICAgICBmb3IgKGk9MDsgaTw0MDsgaT1pKzEpCisgICAgICAgICAgICAgIAl1YXJ0X3dyaXRlX2RhdGFbaV0gPSAkcmFuZG9tOworICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgCisgICAgICAgICAgICAgIAorICAgICAgICAgICAgICBmb3JrCisgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPDQwOyBpPWkrMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIlxuLi4uIFVBUlQgQWdlbnQgV3JpdGluZyBjaGFyICV4IC4uLiIsIHVhcnRfd3JpdGVfZGF0YVtpXSk7CisgICAgICAgICAgICAgICAgICAgICAgIHRiX3VhcnQud3JpdGVfY2hhciAodWFydF93cml0ZV9kYXRhW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgZm9yIChqPTA7IGo8NDA7IGo9aisxKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgIHRiX3VhcnQucmVhZF9jaGFyX2Noayh1YXJ0X3dyaXRlX2RhdGFbal0pOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgIGpvaW4KKyAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICMxMDAKKyAgICAgICAgICAgICAgICAgdGJfdWFydC5yZXBvcnRfc3RhdHVzKHVhcnRfcnhfbnUsIHVhcnRfdHhfbnUpOworICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgdGVzdF9mYWlsID0gMDsKKyAgICAgICAgCisgICAgICAgICAgICAgICAgIC8vIENoZWNrIAorICAgICAgICAgICAgICAgICAvLyBpZiBhbGwgdGhlIDQwIGJ5dGUgdHJhbnNtaXR0ZWQKKyAgICAgICAgICAgICAgICAgLy8gaWYgYWxsIHRoZSA0MCBieXRlIHJlY2VpdmVkCisgICAgICAgICAgICAgICAgIC8vIGlmIG5vIGVycm9yIAorICAgICAgICAgICAgICAgICBpZih1YXJ0X3R4X251ICE9IDQwKSB0ZXN0X2ZhaWwgPSAxOworICAgICAgICAgICAgICAgICBpZih1YXJ0X3J4X251ICE9IDQwKSB0ZXN0X2ZhaWwgPSAxOworICAgICAgICAgICAgICAgICBpZih0Yl91YXJ0LmVycl9jbnQgIT0gMCkgdGVzdF9mYWlsID0gMTsKKyAgICAgICAgCisJICAgICAgZW5kCisJICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAvLyBMb29wIGZvciBUaW1lT3V0CisgICAgICAgICAgICAgICAgICAgcmVwZWF0ICg2MDAwMCkgQChwb3NlZGdlIGNsb2NrKTsKKyAgICAgICAgICAgICAgICAJCS8vICRkaXNwbGF5KCIrMTAwMCBjeWNsZXMiKTsKKyAgICAgICAgICAgICAgICAgICB0ZXN0X2ZhaWwgPSAxOworICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgam9pbl9hbnkKKyAgICAgICAgICAgICAgZGlzYWJsZSBmb3JrOyAvL2Rpc2FibGUgcGVuZGluZyBmb3JrIGFjdGl2aXR5CisKKyAgICAgICAgICAgICAgJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgICAgICBpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKyAgICAgICAgICAgICAgICAgYGlmZGVmIEdMCisgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVBUlQgVGVzdCAoR0wpIFBhc3NlZCIpOworICAgICAgICAgICAgICAgICBgZWxzZQorICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBVQVJUIFRlc3QgKFJUTCkgUGFzc2VkIik7CisgICAgICAgICAgICAgICAgIGBlbmRpZgorICAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgICAgYGlmZGVmIEdMCisgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBVQVJUIFRlc3QgKEdMKSBGYWlsZWQiKTsKKyAgICAgICAgICAgICAgICAgIGBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBVQVJUIFRlc3QgKFJUTCkgRmFpbGVkIik7CisgICAgICAgICAgICAgICAgICBgZW5kaWYKKyAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICMxMDAKKyAgICAgICAgICAgICAgJGZpbmlzaDsKKyAgICAgICAgZW5kCisKKworCWluaXRpYWwgYmVnaW4KKwkJUlNUQiA8PSAxJ2IwOworCQlDU0IgIDw9IDEnYjE7CQkvLyBGb3JjZSBDU0IgaGlnaAorCQkjMjAwMDsKKwkJUlNUQiA8PSAxJ2IxOwkgICAgCS8vIFJlbGVhc2UgcmVzZXQKKwkJIzE3MDAwMDsKKwkJQ1NCID0gMSdiMDsJCS8vIENTQiBjYW4gYmUgcmVsZWFzZWQKKwllbmQKKworCWluaXRpYWwgYmVnaW4JCS8vIFBvd2VyLXVwIHNlcXVlbmNlCisJCXBvd2VyMSA8PSAxJ2IwOworCQlwb3dlcjIgPD0gMSdiMDsKKwkJcG93ZXIzIDw9IDEnYjA7CisJCXBvd2VyNCA8PSAxJ2IwOworCQkjMTAwOworCQlwb3dlcjEgPD0gMSdiMTsKKwkJIzEwMDsKKwkJcG93ZXIyIDw9IDEnYjE7CisJCSMxMDA7CisJCXBvd2VyMyA8PSAxJ2IxOworCQkjMTAwOworCQlwb3dlcjQgPD0gMSdiMTsKKwllbmQKKworCS8vYWx3YXlzIEAobXByal9pbykgYmVnaW4KKwkvLwkjMSAkZGlzcGxheSgiTVBSSi1JTyBzdGF0ZSA9ICViICIsIG1wcmpfaW9bNzowXSk7CisJLy9lbmQKKworCXdpcmUgZmxhc2hfY3NiOworCXdpcmUgZmxhc2hfY2xrOworCXdpcmUgZmxhc2hfaW8wOworCXdpcmUgZmxhc2hfaW8xOworCisJd2lyZSBWREQzVjMgPSBwb3dlcjE7CisJd2lyZSBWREQxVjggPSBwb3dlcjI7CisJd2lyZSBVU0VSX1ZERDNWMyA9IHBvd2VyMzsKKwl3aXJlIFVTRVJfVkREMVY4ID0gcG93ZXI0OworCXdpcmUgVlNTID0gMSdiMDsKKworCWNhcmF2ZWwgdXV0ICgKKwkJLnZkZGlvCSAgKFZERDNWMyksCisJCS52c3NpbwkgIChWU1MpLAorCQkudmRkYQkgIChWREQzVjMpLAorCQkudnNzYQkgIChWU1MpLAorCQkudmNjZAkgIChWREQxVjgpLAorCQkudnNzZAkgIChWU1MpLAorCQkudmRkYTEgICAgKFVTRVJfVkREM1YzKSwKKwkJLnZkZGEyICAgIChVU0VSX1ZERDNWMyksCisJCS52c3NhMQkgIChWU1MpLAorCQkudnNzYTIJICAoVlNTKSwKKwkJLnZjY2QxCSAgKFVTRVJfVkREMVY4KSwKKwkJLnZjY2QyCSAgKFVTRVJfVkREMVY4KSwKKwkJLnZzc2QxCSAgKFZTUyksCisJCS52c3NkMgkgIChWU1MpLAorCQkuY2xvY2sJICAoY2xvY2spLAorCQkuZ3BpbyAgICAgKGdwaW8pLAorICAgICAgICAubXByal9pbyAgKG1wcmpfaW8pLAorCQkuZmxhc2hfY3NiKGZsYXNoX2NzYiksCisJCS5mbGFzaF9jbGsoZmxhc2hfY2xrKSwKKwkJLmZsYXNoX2lvMChmbGFzaF9pbzApLAorCQkuZmxhc2hfaW8xKGZsYXNoX2lvMSksCisJCS5yZXNldGIJICAoUlNUQikKKwkpOworCisJc3BpZmxhc2ggIygKKwkJLkZJTEVOQU1FKCJyaXNjX2Jvb3QuaGV4IikKKwkpIHNwaWZsYXNoICgKKwkJLmNzYihmbGFzaF9jc2IpLAorCQkuY2xrKGZsYXNoX2NsayksCisJCS5pbzAoZmxhc2hfaW8wKSwKKwkJLmlvMShmbGFzaF9pbzEpLAorCQkuaW8yKCksCQkJLy8gbm90IHVzZWQKKwkJLmlvMygpCQkJLy8gbm90IHVzZWQKKwkpOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDb25uZWN0IFF1YWQgRmxhc2ggdG8gZm9yIHVzciBSaXNjIENvcmUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgd2lyZSB1c2VyX2ZsYXNoX2NsayA9IG1wcmpfaW9bMjRdOworICAgd2lyZSB1c2VyX2ZsYXNoX2NzYiA9IG1wcmpfaW9bMjhdOworICAgLy90cmkgIHVzZXJfZmxhc2hfaW8wID0gbXByal9pb1syNl07CisgICAvL3RyaSAgdXNlcl9mbGFzaF9pbzEgPSBtcHJqX2lvWzI3XTsKKyAgIC8vdHJpICB1c2VyX2ZsYXNoX2lvMiA9IG1wcmpfaW9bMjhdOworICAgLy90cmkgIHVzZXJfZmxhc2hfaW8zID0gbXByal9pb1syOV07CisKKworICAgLy8gUXVhcmQgZmxhc2gKKyAgICAgczI1ZmwyNTZzICMoLm1lbV9maWxlX25hbWUoInVzZXJfdWFydC5oZXgiKSwKKwkgICAgICAgICAub3RwX2ZpbGVfbmFtZSgibm9uZSIpLCAKKyAgICAgICAgICAgICAgICAgLlRpbWluZ01vZGVsKCJTMjVGTDUxMlNBR01GSTAxMF9GXzMwcEYiKSkgCisJCSB1X3NwaV9mbGFzaF8yNTZtYiAoCisgICAgICAgICAgIC8vIERhdGEgSW5wdXRzL091dHB1dHMKKyAgICAgICAuU0kgICAgICAobXByal9pb1syOV0pLAorICAgICAgIC5TTyAgICAgIChtcHJqX2lvWzMwXSksCisgICAgICAgLy8gQ29udHJvbHMKKyAgICAgICAuU0NLICAgICAodXNlcl9mbGFzaF9jbGspLAorICAgICAgIC5DU05lZyAgICh1c2VyX2ZsYXNoX2NzYiksCisgICAgICAgLldQTmVnICAgKG1wcmpfaW9bMzFdKSwKKyAgICAgICAuSE9MRE5lZyAobXByal9pb1szMl0pLAorICAgICAgIC5SU1ROZWcgIChSU1RCKQorCisgICAgICAgKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBVQVJUIEFnZW50IGludGVncmF0aW9uCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSB1YXJ0X3R4ZCx1YXJ0X3J4ZDsKKworYXNzaWduIHVhcnRfdHhkICAgPSBtcHJqX2lvWzJdOworYXNzaWduIG1wcmpfaW9bMV0gID0gdWFydF9yeGQgOworIAordWFydF9hZ2VudCB0Yl91YXJ0KAorCS5tY2xrICAgICAgICAgICAgICAgIChjbG9jayAgICAgICAgICAgICAgKSwKKwkudHhkICAgICAgICAgICAgICAgICAodWFydF9yeGQgICAgICAgICAgICksCisJLnJ4ZCAgICAgICAgICAgICAgICAgKHVhcnRfdHhkICAgICAgICAgICApCisJKTsKKworCitgaWZuZGVmIEdMIC8vIERyaXZlIFBvd2VyIGZvciBIb2xkIEZpeCBCdWYKKyAgICAvLyBBbGwgc3RhbmRhcmQgY2VsbCBuZWVkIHBvd2VyIGhvb2stdXAgZm9yIGZ1bmN0aW9uYWxpdHkgd29yaworaW5pdGlhbCBiZWdpbgorZW5kCitgZW5kaWYgICAgCisKKworLyoqCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSSVNDIElNRU0gYW1kIERNRU0gTW9uaXRvcmluZyBUQVNLCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgY29yZTJpbWVtX2FkZHJfb19yOyAgICAgICAgICAgLy8gRE1FTSBhZGRyZXNzCitsb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgY29yZTJkbWVtX2FkZHJfb19yOyAgICAgICAgICAgLy8gRE1FTSBhZGRyZXNzCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZTJkbWVtX2NtZF9vX3I7CisKK2BkZWZpbmUgUklTQ19DT1JFICB0ZXN0X3RiLnV1dC5tcHJqLnVfY29yZS51X3Jpc2N2X3RvcC5pX2NvcmVfdG9wCisKK2Fsd2F5c0AocG9zZWRnZSBgUklTQ19DT1JFLmNsaykgYmVnaW4KKyAgICBpZihgUklTQ19DT1JFLmltZW0yY29yZV9yZXFfYWNrX2kgJiYgYFJJU0NfQ09SRS5jb3JlMmltZW1fcmVxX28pCisgICAgICAgICAgY29yZTJpbWVtX2FkZHJfb19yIDw9IGBSSVNDX0NPUkUuY29yZTJpbWVtX2FkZHJfbzsKKworICAgIGlmKGBSSVNDX0NPUkUuZG1lbTJjb3JlX3JlcV9hY2tfaSAmJiBgUklTQ19DT1JFLmNvcmUyZG1lbV9yZXFfbykgYmVnaW4KKyAgICAgICAgICBjb3JlMmRtZW1fYWRkcl9vX3IgPD0gYFJJU0NfQ09SRS5jb3JlMmRtZW1fYWRkcl9vOworICAgICAgICAgIGNvcmUyZG1lbV9jbWRfb19yICA8PSBgUklTQ19DT1JFLmNvcmUyZG1lbV9jbWRfbzsKKyAgICBlbmQKKworICAgIGlmKGBSSVNDX0NPUkUuaW1lbTJjb3JlX3Jlc3BfaSAhPTApCisgICAgICAgICAgJGRpc3BsYXkoIlJJU0NWLURFQlVHID0+IElNRU0gQUREUkVTUzogJXggUmVhZCBEYXRhIDogJXggUmVzb25zZTogJXgiLCBjb3JlMmltZW1fYWRkcl9vX3IsYFJJU0NfQ09SRS5pbWVtMmNvcmVfcmRhdGFfaSxgUklTQ19DT1JFLmltZW0yY29yZV9yZXNwX2kpOworICAgIGlmKChgUklTQ19DT1JFLmRtZW0yY29yZV9yZXNwX2kgIT0wKSAmJiBjb3JlMmRtZW1fY21kX29fcikKKyAgICAgICAgICAkZGlzcGxheSgiUklTQ1YtREVCVUcgPT4gRE1FTSBBRERSRVNTOiAleCBXcml0ZSBEYXRhOiAleCBSZXNvbnNlOiAleCIsIGNvcmUyZG1lbV9hZGRyX29fcixgUklTQ19DT1JFLmNvcmUyZG1lbV93ZGF0YV9vLGBSSVNDX0NPUkUuZG1lbTJjb3JlX3Jlc3BfaSk7CisgICAgaWYoKGBSSVNDX0NPUkUuZG1lbTJjb3JlX3Jlc3BfaSAhPTApICYmICFjb3JlMmRtZW1fY21kX29fcikKKyAgICAgICAgICAkZGlzcGxheSgiUklTQ1YtREVCVUcgPT4gRE1FTSBBRERSRVNTOiAleCBSRUFEIERhdGEgOiAleCBSZXNvbnNlOiAleCIsIGNvcmUyZG1lbV9hZGRyX29fcixgUklTQ19DT1JFLmRtZW0yY29yZV9yZGF0YV9pLGBSSVNDX0NPUkUuZG1lbTJjb3JlX3Jlc3BfaSk7CitlbmQKKyovCitlbmRtb2R1bGUKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjX2Jvb3QvcnVuX2l2ZXJpbG9nIGIvdmVyaWxvZy9kdi9yaXNjX2Jvb3QvcnVuX2l2ZXJpbG9nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUyZjJhNGQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2NfYm9vdC9ydW5faXZlcmlsb2cKQEAgLTAsMCArMSwyNiBAQAorIyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyMgLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEKKyMgLy8gCisjIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIC8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAvLworIyAvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAvLworIyAvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIC8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIC8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorIyAvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKyMgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyNhZGQgLURXRkRVTVAgdG8gZW5hYmxlIHdhdmVmb3JtIGR1bXAKK2l2ZXJpbG9nIC1EV0ZEVU1QIC1nMjAwNS1zdiAtREZVTkNUSU9OQUwgLURTSU0gLUkgJFBES19QQVRIIFwKKy1JICRDQVJBVkVMX1JPT1QvdmVyaWxvZy9kdi9jYXJhdmVsIC1JICRDQVJBVkVMX1JPT1QvdmVyaWxvZy9ydGwgXAorLUkgLi4vbW9kZWwgIC1JIC4uL2FnZW50cyAgLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwgLUkgLi4vLi4vLi4vdmVyaWxvZyBcCistSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMgICAgLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvZGVmcyBcCityaXNjX2Jvb3RfdGIudiAtbyByaXNjX2Jvb3QudnZwIAorCit2dnAgcmlzY19ib290LnZ2cAorcm0gcmlzY19ib290LnZ2cApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjX2Jvb3QvdXNlcl91YXJ0LmMgYi92ZXJpbG9nL2R2L3Jpc2NfYm9vdC91c2VyX3VhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTgwNWY3Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjX2Jvb3QvdXNlcl91YXJ0LmMKQEAgLTAsMCArMSw1OSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2RlZmluZSBTQ19TSU1fT1VUUE9SVCAoMHhmMDAwMDAwMCkKKyNkZWZpbmUgdWludDMyX3QgIGxvbmcKKworI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcwICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAwMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMSAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMDQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDA4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWczICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAwQykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNCAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMTApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzUgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDE0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc2ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAxOCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNyAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMUMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzggICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDIwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc5ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAyNCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMjgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzExICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDJDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxMiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAzMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTMgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMzQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE0ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDM4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxNSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAzQykKKworI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMTAwMDApCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnMSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAxMDAwNCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWcyICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDEwMDA4KQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzMgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMTAwMEMpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnNCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAxMDAxMCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc1ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDEwMDE0KQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzYgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMTAwMTgpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnNyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAxMDAxQykKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc4ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDEwMDIwKQorCitpbnQgbWFpbigpCit7CisKKyAgICB3aGlsZSgxKSB7CisgICAgICAgLy8gQ2hlY2sgVUFSVCBSWCBmaWZvIGhhcyBkYXRhLCBpZiBhdmFpbGFibGUgbG9vcCBiYWNrIHRoZSBkYXRhCisgICAgICAgaWYocmVnX21wcmpfdWFydF9yZWc4ICE9IDApIHsgCisJICAgcmVnX21wcmpfdWFydF9yZWc1ID0gcmVnX21wcmpfdWFydF9yZWc2OworICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9NYWtlZmlsZSBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDYxYmEzCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL01ha2VmaWxlCkBAIC0wLDAgKzEsMzc3IEBACisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1ha2VmaWxlIGZvciBTQ1IxCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NJTSA/PSBSVEwKK0RVTVAgPz0gT0ZGCisKKyMgUEFSQU1FVEVSUworCisjIENGRyA9IDxNQVgsIEJBU0UsIE1JTiwgQ1VTVE9NPgorIyBCVVMgPSA8QUhCLCBBWEksIFdCPgorCitleHBvcnQgQ0ZHICAgICAgPz0gTUFYCitleHBvcnQgQlVTICAgICAgPz0gV0IKKworaWZlcSAoJChDRkcpLCBNQVgpCisjIFByZWRlZmluZWQgY29uZmlndXJhdGlvbiBZQ1IxX0NGR19SVjMySU1DX01BWAorICAgIG92ZXJyaWRlIEFSQ0ggICAgICAgICA6PSBJTUMKKyAgICBvdmVycmlkZSBWRUNUX0lSUSAgICAgOj0gMQorICAgIG92ZXJyaWRlIElQSUMgICAgICAgICA6PSAxCisgICAgb3ZlcnJpZGUgVENNICAgICAgICAgIDo9IDAKKyAgICBvdmVycmlkZSBTSU1fQ0ZHX0RFRiAgOj0gWUNSMV9DRkdfUlYzMklNQ19NQVgKK2Vsc2UKKyAgICBpZmVxICgkKENGRyksIEJBU0UpCisgICAgIyBQcmVkZWZpbmVkIGNvbmZpZ3VyYXRpb24gWUNSMV9DRkdfUlYzMklDX0JBU0UKKyAgICAgICAgb3ZlcnJpZGUgQVJDSCAgICAgICAgIDo9IElDCisgICAgICAgIG92ZXJyaWRlIFZFQ1RfSVJRICAgICA6PSAxCisgICAgICAgIG92ZXJyaWRlIElQSUMgICAgICAgICA6PSAxCisgICAgICAgIG92ZXJyaWRlIFRDTSAgICAgICAgICA6PSAwCisgICAgICAgIG92ZXJyaWRlIFNJTV9DRkdfREVGICA6PSBZQ1IxX0NGR19SVjMySUNfQkFTRQorICAgIGVsc2UKKyAgICAgICAgaWZlcSAoJChDRkcpLCBNSU4pCisgICAgICAgICMgUHJlZGVmaW5lZCBjb25maWd1cmF0aW9uIFNDUjFfQ0ZHX1JWMzJFQ19NSU4KKyAgICAgICAgICAgIG92ZXJyaWRlIEFSQ0ggICAgICAgICA6PSBFQworICAgICAgICAgICAgb3ZlcnJpZGUgVkVDVF9JUlEgICAgIDo9IDAKKyAgICAgICAgICAgIG92ZXJyaWRlIElQSUMgICAgICAgICA6PSAwCisgICAgICAgICAgICBvdmVycmlkZSBUQ00gICAgICAgICAgOj0gMAorICAgICAgICAgICAgb3ZlcnJpZGUgU0lNX0NGR19ERUYgIDo9IFlDUjFfQ0ZHX1JWMzJFQ19NSU4KKyAgICAgICAgZWxzZQorICAgICAgICAjIENVU1RPTSBjb25maWd1cmF0aW9uLiBQYXJhbWV0ZXJzIGNhbiBiZSBvdmVyd3JpdHRlbgorICAgICAgICAgICAgIyBUaGVzZSBvcHRpb25zIGFyZSBmb3IgY29tcGlsaW5nIHRlc3RzIG9ubHkuIFNldCB0aGUgY29ycmVzcG9uZGluZyBSVEwgcGFyYW1ldGVycyBtYW51YWxseSBpbiB0aGUgZmlsZSB5Y3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoLgorICAgICAgICAgICAgIyBBUkNIID0gPElNQywgSUMsIElNLCBJLCBFTUMsIEVNLCBFQywgRT4KKyAgICAgICAgICAgICMgVkVDVF9JUlEgPSA8MCwgMT4KKyAgICAgICAgICAgICMgSVBJQyA9IDwwLCAxPgorICAgICAgICAgICAgIyBUQ00gPSA8MCwgMT4KKyAgICAgICAgICAgIEFSQ0ggICAgICA/PSBJTUMKKyAgICAgICAgICAgIFZFQ1RfSVJRICA/PSAwCisgICAgICAgICAgICBJUElDICAgICAgPz0gMAorICAgICAgICAgICAgVENNICAgICAgID89IDAKKyAgICAgICAgICAgIFNJTV9DRkdfREVGICA9IFlDUjFfQ0ZHXyQoQ0ZHKQorICAgICAgICBlbmRpZgorICAgIGVuZGlmCitlbmRpZgorCisjIGV4cG9ydCBhbGwgb3ZlcnJpZGVkIHZhcmlhYmxlcworZXhwb3J0IEFSQ0gKK2V4cG9ydCBWRUNUX0lSUQorZXhwb3J0IElQSUMKK2V4cG9ydCBUQ00KK2V4cG9ydCBTSU1fQ0ZHX0RFRgorCitBUkNIX2xvd2VyY2FzZSA9ICQoc2hlbGwgZWNobyAkKEFSQ0gpIHwgdHIgQS1aIGEteikKK0JVU19sb3dlcmNhc2UgID0gJChzaGVsbCBlY2hvICQoQlVTKSAgfCB0ciBBLVogYS16KQorCitpZmVxICgkKEFSQ0hfbG93ZXJjYXNlKSwpCisgICAgQVJDSF90bXAgPSBpbWMKK2Vsc2UKKyAgICBpZm5lcSAoLCQoZmluZHN0cmluZyBlLCQoQVJDSF9sb3dlcmNhc2UpKSkKKyAgICAgICAgQVJDSF90bXAgICArPSBlCisgICAgICAgIEVYVF9DRkxBR1MgKz0gLURfX1JWRV9FWFQKKyAgICBlbHNlCisgICAgICAgIEFSQ0hfdG1wICAgKz0gaQorICAgIGVuZGlmCisgICAgaWZuZXEgKCwkKGZpbmRzdHJpbmcgbSwkKEFSQ0hfbG93ZXJjYXNlKSkpCisgICAgICAgIEFSQ0hfdG1wICAgOj0gJChBUkNIX3RtcCltCisgICAgZW5kaWYKKyAgICBpZm5lcSAoLCQoZmluZHN0cmluZyBjLCQoQVJDSF9sb3dlcmNhc2UpKSkKKyAgICAgICAgQVJDSF90bXAgICA6PSAkKEFSQ0hfdG1wKWMKKyAgICAgICAgRVhUX0NGTEFHUyArPSAtRF9fUlZDX0VYVAorICAgIGVuZGlmCitlbmRpZgorCitvdmVycmlkZSBBUkNIPSQoQVJDSF90bXApCisKKyMgVXNlIHRoaXMgcGFyYW1ldGVyIHRvIGVuYWJsZSB0cmFjZWxvZworVFJBQ0UgPz0gMAorCitpZmVxICgkKFRSQUNFKSwgMSkKKyAgICBleHBvcnQgU0lNX1RSQUNFX0RFRiA9IFlDUjFfVFJBQ0VfTE9HX0VOCitlbHNlCisgICAgZXhwb3J0IFNJTV9UUkFDRV9ERUYgPSBZQ1IxX1RSQUNFX0xPR19ESVMKK2VuZGlmCisKKworIyBVc2UgdGhpcyBwYXJhbWV0ZXIgdG8gcGFzcyBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHNpbXVsYXRpb24gYnVpbGQgY29tbWFuZAorU0lNX0JVSUxEX09QVFMgPz0KKworIyBVc2UgdGhpcyBwYXJhbWV0ZXIgdG8gc2V0IHRoZSBsaXN0IG9mIHRlc3RzIHRvIHJ1bgorIyBUQVJHRVRTID0gPHJpc2N2X2lzYSwgcmlzY3ZfY29tcGxpYW5jZSwgY29yZW1hcmssIGRocnlzdG9uZTIxLCBoZWxsbywgaXNyX3NhbXBsZT4KK2V4cG9ydCBUQVJHRVRTIDo9CisKKworZXhwb3J0IEFCSSAgID89IGlscDMyCisjIFRlc3RiZW5jaCBtZW1vcnkgZGVsYXkgcGF0dGVybnNcCisgIChGRkZGRkZGRiAtIG5vIGRlbGF5LCAwMDAwMDAwMCAtIHJhbmRvbSBkZWxheSwgMDAwMDAwMDEgLSBtYXggZGVsYXkpCitpbWVtX3BhdHRlcm4gPz0gRkZGRkZGRkYKK2RtZW1fcGF0dGVybiA/PSBGRkZGRkZGRgorCitWQ1NfT1BUUyAgICAgICA/PQorTU9ERUxTSU1fT1BUUyAgPz0KK05DU0lNX09QVFMgICAgID89CitWRVJJTEFUT1JfT1BUUyA/PQorCitjdXJyZW50X2dvYWwgOj0gJChNQUtFQ01ER09BTFM6cnVuXyU9JSkKK2lmZXEgKCQoY3VycmVudF9nb2FsKSwpCisgICAgY3VycmVudF9nb2FsIDo9IGl2ZXJpbG9nCitlbmRpZgorCisKK2V4cG9ydCByb290X2RpciA6PSAkKHNoZWxsIHB3ZCkKK2V4cG9ydCBibGRfZGlyICA6PSAkKHJvb3RfZGlyKS9idWlsZC8kKGN1cnJlbnRfZ29hbClfJChCVVMpXyQoQ0ZHKV8kKEFSQ0gpX0lQSUNfJChJUElDKV9UQ01fJChUQ00pX1ZJUlFfJChWRUNUX0lSUSlfVFJBQ0VfJChUUkFDRSkKKworIyMgQ2FyYXZlbCBQb2ludGVycyByZWxhdGVkIHRvIGJ1aWxkIGRpcmVjdG9yeQorQ0FSQVZFTF9ST09UID89ICQocm9vdF9kaXIpLy4uLy4uLy4uL2NhcmF2ZWwKK0NBUkFWRUxfUEFUSCA/PSAkKENBUkFWRUxfUk9PVCkKK0NBUkFWRUxfRklSTVdBUkVfUEFUSCA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nL2R2L2NhcmF2ZWwKK0NBUkFWRUxfVkVSSUxPR19QQVRIICA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nCitDQVJBVkVMX1JUTF9QQVRIID0gJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkvcnRsCitDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUyA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL2R2L2NhcmF2ZWwKKworCisjIyBVc2VyIFByb2plY3QgUG9pbnRlcnMKK1VQUkpfVkVSSUxPR19QQVRIID89ICQocm9vdF9kaXIpLy4uLy4uLy4uL3Zlcmlsb2cKK1VQUkpfVEVTVFNfUEFUSCA9ICQocm9vdF9kaXIpCitVUFJKX1JUTF9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvcnRsCitVUFJKX0dMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9nbAorVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMgPSAkKHJvb3RfZGlyKS8uLi9tb2RlbAorVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMgPSAkKHJvb3RfZGlyKS8uLi9hZ2VudHMKK1VQUkpfSU5DTFVERV9QQVRIMSA9ICQoVVBSSl9SVExfUEFUSCkveWlmaXZlL3ljcjFjL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEgyID0gJChVUFJKX1JUTF9QQVRIKS9zZHJhbV9jdHJsL3NyYy9kZWZzCitVUFJKX0lOQ0xVREVfUEFUSDMgPSAkKFVQUkpfUlRMX1BBVEgpL2kyY20vc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDQgPSAkKFVQUkpfUlRMX1BBVEgpL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRINSA9ICQoVVBSSl9SVExfUEFUSCkvbWJpc3QvaW5jbHVkZQorCitzdl9saXN0ICAgICAgICAgICAgPSAuLi8uLi91c2VyX3Jpc2NfcmVncmVzc190Yi52Cit0b3BfbW9kdWxlICAgICAgICAgPSB1c2VyX3Jpc2NfcmVncmVzc190YgorCisjIFRCIFBhdGhzCitleHBvcnQgc2ltX2RpciAgOj0gJChVUFJKX1RFU1RTX1BBVEgpCitleHBvcnQgdHN0X2RpciAgOj0gJChzaW1fZGlyKS90ZXN0cworZXhwb3J0IGluY19kaXIgIDo9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2R2L2Zpcm13YXJlCisKK3Rlc3RfcmVzdWx0cyA6PSAkKGJsZF9kaXIpL3Rlc3RfcmVzdWx0cy50eHQKK3Rlc3RfaW5mbyAgICA6PSAkKGJsZF9kaXIpL3Rlc3RfaW5mbworc2ltX3Jlc3VsdHMgIDo9ICQoYmxkX2Rpcikvc2ltX3Jlc3VsdHMudHh0CisKK3RvZG9fbGlzdCAgICA6PSAkKGJsZF9kaXIpL3RvZG8udHh0CisKKyMgRW52aXJvbm1lbnQKK2V4cG9ydCBDUk9TU19QUkVGSVggID89IHJpc2N2NjQtdW5rbm93bi1lbGYtCitleHBvcnQgUklTQ1ZfR0NDICAgICA/PSAkKENST1NTX1BSRUZJWClnY2MKK2V4cG9ydCBSSVNDVl9PQkpEVU1QID89ICQoQ1JPU1NfUFJFRklYKW9iamR1bXAgLUQKK2V4cG9ydCBSSVNDVl9PQkpDT1BZID89ICQoQ1JPU1NfUFJFRklYKW9iamNvcHkgLU8gdmVyaWxvZworZXhwb3J0IFJJU0NWX1JPTV9PQkpDT1BZID89ICQoQ1JPU1NfUFJFRklYKW9iamNvcHkgLWogLnRleHQuaW5pdCAtaiAudGV4dCAtaiAucm9kYXRhIC1qIC5yb2RhdGEuc3RyMS40IC1PIHZlcmlsb2cKKyNTZXBlcmF0ZSB0aGUgUkFNIGNvbnRlbnQgYW5kIHdyaXRlIG91dCBpbiAzMmJpdCBMaXR0bGUgZW5kaWFuIGZvcm1hdCB0byBsb2FkIGl0IHRvIFRDTSBNZW1vcnkKKyNleHBvcnQgUklTQ1ZfUkFNX09CSkNPUFkgPz0gJChDUk9TU19QUkVGSVgpb2JqY29weSAtUiAudGV4dC5pbml0IC1SIC50ZXh0IC1SIC5yb2RhdGEgLVIgLnJvZGF0YS5zdHIxLjQgLVIgLnJpc2N2LmF0dHJpYnV0ZXMgLVIgLmNvbW1lbnQgLVIgLmRlYnVnX2FiYnJldiAtUiAuZGVidWdfbG9jIC1SIC5kZWJ1Z19zdHIgLU8gdmVyaWxvZyAtLXZlcmlsb2ctZGF0YS13aWR0aD00IC0tcmV2ZXJzZS1ieXRlcz00CitleHBvcnQgUklTQ1ZfUkFNX09CSkNPUFkgPz0gJChDUk9TU19QUkVGSVgpb2JqY29weSAtUiAudGV4dC5pbml0IC1SIC50ZXh0IC1SIC5yb2RhdGEgLVIgLnJvZGF0YS5zdHIxLjQgLU8gdmVyaWxvZworZXhwb3J0IFJJU0NWX1JFQURFTEYgPz0gJChDUk9TU19QUkVGSVgpcmVhZGVsZiAtcworCitpZm5lcSAoLCQoZmluZHN0cmluZyBlLCQoQVJDSF9sb3dlcmNhc2UpKSkKKyMgVGVzdHMgY2FuIGJlIGNvbXBpbGVkIGZvciBSVkUgb25seSBpZiBnY2MgdmVyc2lvbiA4LjAuMCBvciBoaWdoZXIKKyAgICBHQ0NWRVJTSU9OR1Q3IDo9ICQoc2hlbGwgZXhwciBgJChSSVNDVl9HQ0MpIC1kdW1wZnVsbHZlcnNpb24gfCBjdXQgLWYxIC1kJy4nYCBcPiA3KQorICAgIGlmZXEgIiQoR0NDVkVSU0lPTkdUNykiICIxIgorICAgICAgICBBQkkgOj0gaWxwMzJlCisgICAgZW5kaWYKK2VuZGlmCisKKyMtLQoraWZlcSAoLCQoZmluZHN0cmluZyBlLCQoQVJDSF9sb3dlcmNhc2UpKSkKKwkjIFRoZXNlIHRlc3RzIGNhbm5vdCBiZSBjb21waWxlZCBmb3IgUlZFCisJIyBDb21tZW50IHRoaXMgdGFyZ2V0IGlmIHlvdSBkb24ndCB3YW50IHRvIHJ1biB0aGUgcmlzY3ZfaXNhCisJVEFSR0VUUyArPSByaXNjdl9pc2EKKworCSMgQ29tbWVudCB0aGlzIHRhcmdldCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBydW4gdGhlIHJpc2N2X2NvbXBsaWFuY2UKKwlUQVJHRVRTICs9IHJpc2N2X2NvbXBsaWFuY2UKK2VuZGlmCisKKyMgQ29tbWVudCB0aGlzIHRhcmdldCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBydW4gdGhlIGlzcl9zYW1wbGUKK1RBUkdFVFMgKz0gaXNyX3NhbXBsZQorCisjIENvbW1lbnQgdGhpcyB0YXJnZXQgaWYgeW91IGRvbid0IHdhbnQgdG8gcnVuIHRoZSBjb3JlbWFyaworVEFSR0VUUyArPSBjb3JlbWFyaworCisjIENvbW1lbnQgdGhpcyB0YXJnZXQgaWYgeW91IGRvbid0IHdhbnQgdG8gcnVuIHRoZSBkaHJ5c3RvbmUKK1RBUkdFVFMgKz0gZGhyeXN0b25lMjEKKworIyBDb21tZW50IHRoaXMgdGFyZ2V0IGlmIHlvdSBkb24ndCB3YW50IHRvIHJ1biB0aGUgaGVsbG8gdGVzdAorVEFSR0VUUyArPSBoZWxsbworCisKKyMgVGFyZ2V0cworLlBIT05ZOiB0ZXN0cyBydW5faXZlcmlsb2cgcnVuX2l2ZXJpbG9nX3dmIHJ1bl9tb2RlbHNpbSBydW5fbW9kZWxzaW1fd2xmIHJ1bl92Y3MgcnVuX25jc2ltIHJ1bl92ZXJpbGF0b3IgcnVuX3ZlcmlsYXRvcl93ZgorCitkZWZhdWx0OiBjbGVhbl90ZXN0X2xpc3QgcnVuX2l2ZXJpbG9nCisKK2NsZWFuX3Rlc3RfbGlzdDoKKwlybSAtZiAkKHRlc3RfaW5mbykKKworZWNob19vdXQ6IHRlc3RzCisJQGVjaG8gIiAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdCAgICAgICAgICAgICAgIHwgYnVpbGQgfCBzaW11bGF0aW9uICIgOworCUBlY2hvICIkJChjYXQgJCh0ZXN0X3Jlc3VsdHMpKSIKKwordGVzdHM6ICQoVEFSR0VUUykKKworJCh0ZXN0X2luZm8pOiBjbGVhbl9oZXggdGVzdHMKKwljZCAkKGJsZF9kaXIpCisKK2lzcl9zYW1wbGU6IHwgJChibGRfZGlyKQorCSQoTUFLRSkgLUMgJCh0c3RfZGlyKS9pc3Jfc2FtcGxlIEFSQ0g9JChBUkNIKSBJUElDPSQoSVBJQykgVkVDVF9JUlE9JChWRUNUX0lSUSkKKworZGhyeXN0b25lMjE6IHwgJChibGRfZGlyKQorCSQoTUFLRSkgLUMgJCh0c3RfZGlyKS9iZW5jaG1hcmtzL2RocnlzdG9uZTIxIEVYVF9DRkxBR1M9IiQoRVhUX0NGTEFHUykiIEFSQ0g9JChBUkNIKQorCitjb3JlbWFyazogfCAkKGJsZF9kaXIpCisJQGVjaG8gImNvcmUgbWFya3MiCisJJChNQUtFKSAtQyAkKHRzdF9kaXIpL2JlbmNobWFya3MvY29yZW1hcmsgRVhUX0NGTEFHUz0iJChFWFRfQ0ZMQUdTKSIgQVJDSD0kKEFSQ0gpCisKK3Jpc2N2X2lzYTogfCAkKGJsZF9kaXIpCisJJChNQUtFKSAtQyAkKHRzdF9kaXIpL3Jpc2N2X2lzYSBBUkNIPSQoQVJDSCkKKworcmlzY3ZfY29tcGxpYW5jZTogfCAkKGJsZF9kaXIpCisJJChNQUtFKSAtQyAkKHRzdF9kaXIpL3Jpc2N2X2NvbXBsaWFuY2UgQVJDSD0kKEFSQ0gpCisKK2hlbGxvOiB8ICQoYmxkX2RpcikKKwktJChNQUtFKSAtQyAkKHRzdF9kaXIpL2hlbGxvIEVYVF9DRkxBR1M9IiQoRVhUX0NGTEFHUykiIEFSQ0g9JChBUkNIKQorCit0ZXN0OiB8ICQoYmxkX2RpcikKKwktJChNQUtFKSAtQyAkKHRzdF9kaXIpL3Rlc3QgRVhUX0NGTEFHUz0iJChFWFRfQ0ZMQUdTKSIgQVJDSD0kKEFSQ0gpCisKK2NsZWFuX2hleDogfCAkKGJsZF9kaXIpCisJJChSTSkgJChibGRfZGlyKS8qLmhleAorCiskKGJsZF9kaXIpOgorCW1rZGlyIC1wICQoYmxkX2RpcikKKworcnVuX3ZjczogJCh0ZXN0X2luZm8pCisJJChNQUtFKSAtQyAkKHJvb3RfZGlyKS9zaW0gYnVpbGRfdmNzIFNJTV9DRkdfREVGPSQoU0lNX0NGR19ERUYpIFNJTV9UUkFDRV9ERUY9JChTSU1fVFJBQ0VfREVGKSBTSU1fQlVJTERfT1BUUz0kKFNJTV9CVUlMRF9PUFRTKTsKKwlwcmludGYgIiIgPiAkKHRlc3RfcmVzdWx0cyk7CisJY2QgJChibGRfZGlyKTsgXAorCSQoYmxkX2Rpcikvc2ltdiAgLVYgXAorCSt0ZXN0X2luZm89JCh0ZXN0X2luZm8pIFwKKwkrdGVzdF9yZXN1bHRzPSQodGVzdF9yZXN1bHRzKSBcCisJK2ltZW1fcGF0dGVybj0kKGltZW1fcGF0dGVybikgXAorCStkbWVtX3BhdHRlcm49JChkbWVtX3BhdHRlcm4pIFwKKwkkKFZDU19PUFRTKSB8IHRlZSAkKHNpbV9yZXN1bHRzKSAgO1wKKwlwcmludGYgIiAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdCAgICAgICAgICAgICAgIHwgYnVpbGQgfCBzaW11bGF0aW9uIFxuIiA7IFwKKwlwcmludGYgIiQkKGNhdCAkKHRlc3RfcmVzdWx0cykpIFxuIgorcnVuX21vZGVsc2ltOiAkKHRlc3RfaW5mbykKKwkkKE1BS0UpIC1DICQocm9vdF9kaXIpL3NpbSBidWlsZF9tb2RlbHNpbSBTSU1fQ0ZHX0RFRj0kKFNJTV9DRkdfREVGKSBTSU1fVFJBQ0VfREVGPSQoU0lNX1RSQUNFX0RFRikgU0lNX0JVSUxEX09QVFM9JChTSU1fQlVJTERfT1BUUyk7IFwKKwlwcmludGYgIiIgPiAkKHRlc3RfcmVzdWx0cyk7IFwKKwljZCAkKGJsZF9kaXIpOyBcCisJdnNpbSAtYyAtZG8gInJ1biAtYWxsIiArbm93YXJuMzY5MSBcCisJK3Rlc3RfaW5mbz0kKHRlc3RfaW5mbykgXAorCSt0ZXN0X3Jlc3VsdHM9JCh0ZXN0X3Jlc3VsdHMpIFwKKwkraW1lbV9wYXR0ZXJuPSQoaW1lbV9wYXR0ZXJuKSBcCisJK2RtZW1fcGF0dGVybj0kKGRtZW1fcGF0dGVybikgXAorCXdvcmsuJCh0b3BfbW9kdWxlKSBcCisJJChNT0RFTFNJTV9PUFRTKSB8IHRlZSAkKHNpbV9yZXN1bHRzKSAgO1wKKwlwcmludGYgIlNpbXVsYXRpb24gcGVyZm9ybWVkIG9uICQkKHZzaW0gLXZlcnNpb24pIFxuIiA7XAorCXByaW50ZiAiICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0ICAgICAgICAgICAgICAgfCBidWlsZCB8IHNpbXVsYXRpb24gXG4iIDsgXAorCXByaW50ZiAiJCQoY2F0ICQodGVzdF9yZXN1bHRzKSkgXG4iCisKK3J1bl9pdmVyaWxvZzogJCh0ZXN0X2luZm8pCisJY2QgJChibGRfZGlyKTsgXAorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSAtSSAkKFVQUkpfVEVTVFNfUEFUSCkgXAorCSQoc3ZfbGlzdCkgXAorCS1vICQodG9wX21vZHVsZSkudnZwOyBcCisJcHJpbnRmICIiID4gJCh0ZXN0X3Jlc3VsdHMpOyBcCisgICAgICAgIGl2ZXJpbG9nLXZwaSAuLi8uLi8uLi92cGkvc3lzdGVtL3N5c3RlbS5jOyBcCisJdnZwICAtTS4gLW1zeXN0ZW0gICQodG9wX21vZHVsZSkudnZwIFwKKwkrdGVzdF9pbmZvPSQodGVzdF9pbmZvKSBcCisJK3Rlc3RfcmVzdWx0cz0kKHRlc3RfcmVzdWx0cykgXAorCXwgdGVlICQoc2ltX3Jlc3VsdHMpICA7XAorCXByaW50ZiAiU2ltdWxhdGlvbiBwZXJmb3JtZWQgb24gJCQodnZwIC1WKSBcbiIgO1wKKwlwcmludGYgIiAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdCAgICAgICAgICAgICAgIHwgYnVpbGQgfCBzaW11bGF0aW9uIFxuIiA7IFwKKwlwcmludGYgIiQkKGNhdCAkKHRlc3RfcmVzdWx0cykpIFxuIgorCitydW5faXZlcmlsb2dfd2Y6ICQodGVzdF9pbmZvKQorCWNkICQoYmxkX2Rpcik7IFwKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURXRkRVTVAgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfQUdFTlRTKSAgICBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDEpICAgIC1JICQoVVBSSl9JTkNMVURFX1BBVEgyKSAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMykgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEg0KSAtSSAkKFVQUkpfSU5DTFVERV9QQVRINSkgLUkgJChVUFJKX1RFU1RTX1BBVEgpIFwKKwkkKHN2X2xpc3QpIFwKKwktbyAkKHRvcF9tb2R1bGUpLnZ2cDsgXAorCXByaW50ZiAiIiA+ICQodGVzdF9yZXN1bHRzKTsgXAorICAgICAgICBpdmVyaWxvZy12cGkgLi4vLi4vLi4vdnBpL3N5c3RlbS9zeXN0ZW0uYzsgXAorCXZ2cCAgLU0uIC1tc3lzdGVtICAkKHRvcF9tb2R1bGUpLnZ2cCBcCisJK3Rlc3RfaW5mbz0kKHRlc3RfaW5mbykgXAorCSt0ZXN0X3Jlc3VsdHM9JCh0ZXN0X3Jlc3VsdHMpIFwKKwl8IHRlZSAkKHNpbV9yZXN1bHRzKSAgO1wKKwlwcmludGYgIlNpbXVsYXRpb24gcGVyZm9ybWVkIG9uICQkKHZ2cCAtVikgXG4iIDtcCisJcHJpbnRmICIgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3QgICAgICAgICAgICAgICB8IGJ1aWxkIHwgc2ltdWxhdGlvbiBcbiIgOyBcCisJcHJpbnRmICIkJChjYXQgJCh0ZXN0X3Jlc3VsdHMpKSBcbiIKKworcnVuX21vZGVsc2ltX3dsZjogJCh0ZXN0X2luZm8pCisJJChNQUtFKSAtQyAkKHJvb3RfZGlyKS9zaW0gYnVpbGRfbW9kZWxzaW1fd2xmIFNJTV9DRkdfREVGPSQoU0lNX0NGR19ERUYpIFNJTV9UUkFDRV9ERUY9JChTSU1fVFJBQ0VfREVGKSBTSU1fQlVJTERfT1BUUz0kKFNJTV9CVUlMRF9PUFRTKTsgXAorCXByaW50ZiAiIiA+ICQodGVzdF9yZXN1bHRzKTsgXAorCWNkICQoYmxkX2Rpcik7IFwKKwl2c2ltIC1jIC1kbyAicnVuIC1hbGwiICtub3dhcm4zNjkxIFwKKwkrdGVzdF9pbmZvPSQodGVzdF9pbmZvKSBcCisJK3Rlc3RfcmVzdWx0cz0kKHRlc3RfcmVzdWx0cykgXAorCStpbWVtX3BhdHRlcm49JChpbWVtX3BhdHRlcm4pIFwKKwkrZG1lbV9wYXR0ZXJuPSQoZG1lbV9wYXR0ZXJuKSBcCisJd29yay4kKHRvcF9tb2R1bGUpIFwKKwkkKE1PREVMU0lNX09QVFMpIHwgdGVlICQoc2ltX3Jlc3VsdHMpICA7XAorCXByaW50ZiAiU2ltdWxhdGlvbiBwZXJmb3JtZWQgb24gJCQodnNpbSAtdmVyc2lvbikgXG4iIDtcCisJcHJpbnRmICIgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3QgICAgICAgICAgICAgICB8IGJ1aWxkIHwgc2ltdWxhdGlvbiBcbiIgOyBcCisJcHJpbnRmICIkJChjYXQgJCh0ZXN0X3Jlc3VsdHMpKSBcbiIKK3J1bl9uY3NpbTogJCh0ZXN0X2luZm8pCisJJChNQUtFKSAtQyAkKHJvb3RfZGlyKS9zaW0gYnVpbGRfbmNzaW0gU0lNX0NGR19ERUY9JChTSU1fQ0ZHX0RFRikgU0lNX1RSQUNFX0RFRj0kKFNJTV9UUkFDRV9ERUYpIFNJTV9CVUlMRF9PUFRTPSQoU0lNX0JVSUxEX09QVFMpOworCXByaW50ZiAiIiA+ICQodGVzdF9yZXN1bHRzKTsKKwljZCAkKGJsZF9kaXIpOyBcCisJaXJ1biBcCisJLVIgXAorCS02NGJpdCBcCisJK3Rlc3RfaW5mbz0kKHRlc3RfaW5mbykgXAorCSt0ZXN0X3Jlc3VsdHM9JCh0ZXN0X3Jlc3VsdHMpIFwKKwkraW1lbV9wYXR0ZXJuPSQoaW1lbV9wYXR0ZXJuKSBcCisJK2RtZW1fcGF0dGVybj0kKGRtZW1fcGF0dGVybikgXAorCSQoTkNTSU1fT1BUUykgfCB0ZWUgJChzaW1fcmVzdWx0cykgIDtcCisJcHJpbnRmICJTaW11bGF0aW9uIHBlcmZvcm1lZCBvbiAkJChpcnVuIC12ZXJzaW9uKSBcbiIgO1wKKwlwcmludGYgIiAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdCAgICAgICAgICAgICAgIHwgYnVpbGQgfCBzaW11bGF0aW9uIFxuIiA7IFwKKwlwcmludGYgIiQkKGNhdCAkKHRlc3RfcmVzdWx0cykpIFxuIgorCitydW5fdmVyaWxhdG9yOiAkKHRlc3RfaW5mbykKKwkkKE1BS0UpIC1DICQocm9vdF9kaXIpL3NpbSBidWlsZF92ZXJpbGF0b3IgU0lNX0NGR19ERUY9JChTSU1fQ0ZHX0RFRikgU0lNX1RSQUNFX0RFRj0kKFNJTV9UUkFDRV9ERUYpIFNJTV9CVUlMRF9PUFRTPSQoU0lNX0JVSUxEX09QVFMpOworCXByaW50ZiAiIiA+ICQodGVzdF9yZXN1bHRzKTsKKwljZCAkKGJsZF9kaXIpOyBcCisJZWNobyAkKHRvcF9tb2R1bGUpIHwgdGVlICQoc2ltX3Jlc3VsdHMpOyBcCisJJChibGRfZGlyKS92ZXJpbGF0b3IvViQodG9wX21vZHVsZSkgXAorCSt0ZXN0X2luZm89JCh0ZXN0X2luZm8pIFwKKwkrdGVzdF9yZXN1bHRzPSQodGVzdF9yZXN1bHRzKSBcCisJK2ltZW1fcGF0dGVybj0kKGltZW1fcGF0dGVybikgXAorCStkbWVtX3BhdHRlcm49JChkbWVtX3BhdHRlcm4pIFwKKwkkKFZFUklMQVRPUl9PUFRTKSB8IHRlZSAtYSAkKHNpbV9yZXN1bHRzKSA7XAorCXByaW50ZiAiU2ltdWxhdGlvbiBwZXJmb3JtZWQgb24gJCQodmVyaWxhdG9yIC12ZXJzaW9uKSBcbiIgO1wKKwlwcmludGYgIiAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdCAgICAgICAgICAgICAgIHwgYnVpbGQgfCBzaW11bGF0aW9uIFxuIiA7IFwKKwlwcmludGYgIiQkKGNhdCAkKHRlc3RfcmVzdWx0cykpIFxuIgorCitydW5fdmVyaWxhdG9yX3dmOiAkKHRlc3RfaW5mbykKKwkkKE1BS0UpIC1DICQocm9vdF9kaXIpL3NpbSBidWlsZF92ZXJpbGF0b3Jfd2YgU0lNX0NGR19ERUY9JChTSU1fQ0ZHX0RFRikgU0lNX1RSQUNFX0RFRj0kKFNJTV9UUkFDRV9ERUYpIFNJTV9CVUlMRF9PUFRTPSQoU0lNX0JVSUxEX09QVFMpOworCXByaW50ZiAiIiA+ICQodGVzdF9yZXN1bHRzKTsKKwljZCAkKGJsZF9kaXIpOyBcCisJZWNobyAkKHRvcF9tb2R1bGUpIHwgdGVlICQoc2ltX3Jlc3VsdHMpOyBcCisJJChibGRfZGlyKS92ZXJpbGF0b3IvViQodG9wX21vZHVsZSkgXAorCSt0ZXN0X2luZm89JCh0ZXN0X2luZm8pIFwKKwkrdGVzdF9yZXN1bHRzPSQodGVzdF9yZXN1bHRzKSBcCisJK2ltZW1fcGF0dGVybj0kKGltZW1fcGF0dGVybikgXAorCStkbWVtX3BhdHRlcm49JChkbWVtX3BhdHRlcm4pIFwKKwkkKFZFUklMQVRPUl9PUFRTKSB8IHRlZSAtYSAkKHNpbV9yZXN1bHRzKSAgO1wKKwlwcmludGYgIlNpbXVsYXRpb24gcGVyZm9ybWVkIG9uICQkKHZlcmlsYXRvciAtdmVyc2lvbikgXG4iIDtcCisJcHJpbnRmICIgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3QgICAgICAgICAgICAgICB8IGJ1aWxkIHwgc2ltdWxhdGlvbiBcbiIgOyBcCisJcHJpbnRmICIkJChjYXQgJCh0ZXN0X3Jlc3VsdHMpKSBcbiIKK2NsZWFuOiAKKwkkKE1BS0UpIC1DICQodHN0X2RpcikvYmVuY2htYXJrcy9kaHJ5c3RvbmUyMSBjbGVhbgorCSQoTUFLRSkgLUMgJCh0c3RfZGlyKS9yaXNjdl9pc2EgY2xlYW4KKwkkKE1BS0UpIC1DICQodHN0X2RpcikvcmlzY3ZfY29tcGxpYW5jZSBjbGVhbgorCSQoUk0pIC1SICQocm9vdF9kaXIpL2J1aWxkLyoKKwkkKFJNKSAkKHRlc3RfaW5mbykKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9yaXNjdl9ydW50ZXN0cy5zdiBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9yaXNjdl9ydW50ZXN0cy5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWMxNGE1Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Jpc2N2X3J1bnRlc3RzLnN2CkBAIC0wLDAgKzEsMzg0IEBACisvLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIwLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscworLy8vIEBmaWxlICAgICAgIDxzY3IxX3RvcF90Yl9ydW50ZXN0cy5zdj4KKy8vLyBAYnJpZWYgICAgICBTQ1IxIHRlc3RiZW5jaCBydW4gdGVzdHMKKy8vLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1biB0ZXN0cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2luaXRpYWwgYmVnaW4KKyAgICAvLyR2YWx1ZSRwbHVzYXJncygiaW1lbV9wYXR0ZXJuPSVoIiwgaW1lbV9yZXFfYWNrX3N0YWxsKTsKKyAgICAvLyR2YWx1ZSRwbHVzYXJncygiZG1lbV9wYXR0ZXJuPSVoIiwgZG1lbV9yZXFfYWNrX3N0YWxsKTsKKworICAgIC8vJGRpc3BsYXkoImltZW1fcGF0dGVybjoleCIsaW1lbV9yZXFfYWNrX3N0YWxsKTsKKyAgICAvLyRkaXNwbGF5KCJkbWVtX3BhdHRlcm46JXgiLGRtZW1fcmVxX2Fja19zdGFsbCk7CitgaWZkZWYgU0lHTkFUVVJFX09VVAorICAgICR2YWx1ZSRwbHVzYXJncygidGVzdF9uYW1lPSVzIiwgc190ZXN0bmFtZSk7CisgICAgYl9zaW5nbGVfcnVuX2ZsYWcgPSAxOworYGVsc2UgLy8gU0lHTkFUVVJFX09VVAorCisgICAgJHZhbHVlJHBsdXNhcmdzKCJ0ZXN0X2luZm89JXMiLCBzX2luZm8pOworICAgICR2YWx1ZSRwbHVzYXJncygidGVzdF9yZXN1bHRzPSVzIiwgc19yZXN1bHRzKTsKKworICAgIGZfaW5mbyAgICAgID0gJGZvcGVuKHNfaW5mbywgInIiKTsKKyAgICBmX3Jlc3VsdHMgICA9ICRmb3BlbihzX3Jlc3VsdHMsICJhIik7CitgZW5kaWYgLy8gU0lHTkFUVVJFX09VVAorCisKKworZW5kCisvKioqCisvLyBEZWJ1ZyBtZXNzYWdlIC0gZGluZXNoIEEKKyBsb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgY29yZTJpbWVtX2FkZHJfb19yOyAgICAgICAgICAgLy8gRE1FTSBhZGRyZXNzCisgbG9naWMgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICAgICAgICAgIGNvcmUyZG1lbV9hZGRyX29fcjsgICAgICAgICAgIC8vIERNRU0gYWRkcmVzcworIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlMmRtZW1fY21kX29fcjsKKyAKKyBgZGVmaW5lIFJJU0NfQ09SRSAgaV90b3AuaV9jb3JlX3RvcAorIAorIGFsd2F5c0AocG9zZWRnZSBgUklTQ19DT1JFLmNsaykgYmVnaW4KKyAgICAgaWYoYFJJU0NfQ09SRS5pbWVtMmNvcmVfcmVxX2Fja19pICYmIGBSSVNDX0NPUkUuY29yZTJpbWVtX3JlcV9vKQorICAgICAgICAgICBjb3JlMmltZW1fYWRkcl9vX3IgPD0gYFJJU0NfQ09SRS5jb3JlMmltZW1fYWRkcl9vOworIAorICAgICBpZihgUklTQ19DT1JFLmRtZW0yY29yZV9yZXFfYWNrX2kgJiYgYFJJU0NfQ09SRS5jb3JlMmRtZW1fcmVxX28pIGJlZ2luCisgICAgICAgICAgIGNvcmUyZG1lbV9hZGRyX29fciA8PSBgUklTQ19DT1JFLmNvcmUyZG1lbV9hZGRyX287CisgICAgICAgICAgIGNvcmUyZG1lbV9jbWRfb19yICA8PSBgUklTQ19DT1JFLmNvcmUyZG1lbV9jbWRfbzsKKyAgICAgZW5kCisgCisgICAgIGlmKGBSSVNDX0NPUkUuaW1lbTJjb3JlX3Jlc3BfaSAhPTApCisgICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBJTUVNIEFERFJFU1M6ICV4IFJlYWQgRGF0YSA6ICV4IFJlc29uc2U6ICV4IiwgY29yZTJpbWVtX2FkZHJfb19yLGBSSVNDX0NPUkUuaW1lbTJjb3JlX3JkYXRhX2ksYFJJU0NfQ09SRS5pbWVtMmNvcmVfcmVzcF9pKTsKKyAgICAgaWYoKGBSSVNDX0NPUkUuZG1lbTJjb3JlX3Jlc3BfaSAhPTApICYmIGNvcmUyZG1lbV9jbWRfb19yKQorICAgICAgICAgICAkZGlzcGxheSgiUklTQ1YtREVCVUcgPT4gRE1FTSBBRERSRVNTOiAleCBXcml0ZSBEYXRhOiAleCBSZXNvbnNlOiAleCIsIGNvcmUyZG1lbV9hZGRyX29fcixgUklTQ19DT1JFLmNvcmUyZG1lbV93ZGF0YV9vLGBSSVNDX0NPUkUuZG1lbTJjb3JlX3Jlc3BfaSk7CisgICAgIGlmKChgUklTQ19DT1JFLmRtZW0yY29yZV9yZXNwX2kgIT0wKSAmJiAhY29yZTJkbWVtX2NtZF9vX3IpCisgICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBETUVNIEFERFJFU1M6ICV4IFJFQUQgRGF0YSA6ICV4IFJlc29uc2U6ICV4IiwgY29yZTJkbWVtX2FkZHJfb19yLGBSSVNDX0NPUkUuZG1lbTJjb3JlX3JkYXRhX2ksYFJJU0NfQ09SRS5kbWVtMmNvcmVfcmVzcF9pKTsKKyBlbmQKKyoqLworLyoqKgorICBsb2dpYyBbMzE6MF0gdGVzdF9jb3VudDsKKyBgZGVmaW5lIFJJU0NfQ09SRSAgdV90b3AudV9yaXNjdl90b3AuaV9jb3JlX3RvcAorIGBkZWZpbmUgUklTQ19FWFUgIHVfdG9wLnVfcmlzY3ZfdG9wLmlfY29yZV90b3AuaV9waXBlX3RvcC5pX3BpcGVfZXh1CisKKyBpbml0aWFsIGJlZ2luCisJIHRlc3RfY291bnQgPSAwOworIGVuZAorCisgCisgYWx3YXlzQChwb3NlZGdlIGBSSVNDX0NPUkUuY2xrKSBiZWdpbgorCSBpZihgUklTQ19FWFUucGNfY3Vycl91cGQpIGJlZ2luCisgICAgICAgICAgICAkZGlzcGxheSgiUklTQ1YtREVCVUcgPT4gQ250OiAleCBQQzogJXgiLCB0ZXN0X2NvdW50LGBSSVNDX0VYVS5wY19jdXJyX2ZmKTsKKyAgICAgICAgICAgICAgIHRlc3RfY291bnQgPD0gdGVzdF9jb3VudCsxOworCSAgZW5kCisgZW5kCisqKiovCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGJpdCB0ZXN0X3Bhc3M7CisgICAgaW50IHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZfdGVzdDsKKyAgICBpbnQgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgZl90ZXN0X3JhbTsKKyAgICBpZiAodGVzdF9ydW5uaW5nKSBiZWdpbgorICAgICAgICB0ZXN0X3Bhc3MgPSAxOworICAgICAgICByc3RfaW5pdCA8PSAxJ2IwOworCWlmKHVfdG9wLnVfcmlzY3ZfdG9wLmlfY29yZV90b3AuaV9waXBlX3RvcC5pX3BpcGVfZXh1LnBjX2N1cnJfZmYgPT09IDMyJ2h4eHh4X3h4eHgpIGJlZ2luCisJICAgJGRpc3BsYXkoIkVSUk9SOiBDVVJSRU5UIFBDIENvdW50ZXIgU3RhdGUgaXMgS25vd24iKTsKKwkgICAkZmluaXNoOworCWVuZAorICAgICAgICBpZiAoKHVfdG9wLnVfcmlzY3ZfdG9wLmlfY29yZV90b3AuaV9waXBlX3RvcC5pX3BpcGVfZXh1LmV4dTJwaXBlX3BjX2N1cnJfbyA9PSBZQ1IxX1NJTV9FWElUX0FERFIpICYgfnJzdF9pbml0ICYgJnJzdF9jbnQpIGJlZ2luCisKKyAgICAgICAgICAgIGBpZmRlZiBWRVJJTEFUT1IKKyAgICAgICAgICAgICAgICBsb2dpYyBbMjU1OjBdIGZ1bGxfZmlsZW5hbWU7CisgICAgICAgICAgICAgICAgZnVsbF9maWxlbmFtZSA9IHRlc3RfZmlsZTsKKyAgICAgICAgICAgIGBlbHNlIC8vIFZFUklMQVRPUgorICAgICAgICAgICAgICAgIHN0cmluZyBmdWxsX2ZpbGVuYW1lOworICAgICAgICAgICAgICAgIGZ1bGxfZmlsZW5hbWUgPSB0ZXN0X2ZpbGU7CisgICAgICAgICAgICBgZW5kaWYgLy8gVkVSSUxBVE9SCisKKyAgICAgICAgICAgIGlmIChpc19jb21wbGlhbmNlKHRlc3RfZmlsZSkpIGJlZ2luCisgICAgICAgICAgICAgICAgbG9naWMgWzMxOjBdIHRtcHYsIHN0YXJ0LCBzdG9wLCByZWZfZGF0YSwgdGVzdF9kYXRhOworICAgICAgICAgICAgICAgIGludGVnZXIgZmQ7CisgICAgICAgICAgICAgICAgYGlmZGVmIFZFUklMQVRPUgorICAgICAgICAgICAgICAgIGxvZ2ljIFsyMDQ3OjBdIHRtcHN0cjsKKyAgICAgICAgICAgICAgICBgZWxzZSAvLyBWRVJJTEFUT1IKKyAgICAgICAgICAgICAgICBzdHJpbmcgdG1wc3RyOworICAgICAgICAgICAgICAgIGBlbmRpZiAvLyBWRVJJTEFUT1IKKworCSAgICAgICAgLy8gRmx1c2ggdGhlIGNvbnRlbnQgb2YgZGNhY2hlIGZvciBzaWduYXR1cmUgdmFsaWRhdGlvbiBhdCBhcHAKKwkgICAgICAgIC8vIG1lbW9yeQkKKwkgICAgICAgIGZvcmNlIHVfdG9wLnVfcmlzY3ZfdG9wLnVfaW50Zi51X2RjYWNoZS5jZmdfZm9yY2VfZmx1c2ggPSAxJ2IxOworCSAgICAgICAgd2FpdCh1X3RvcC51X3Jpc2N2X3RvcC51X2ludGYudV9kY2FjaGUuZm9yY2VfZmx1c2hfZG9uZSA9PSAxJ2IxKTsKKwkgICAgICAgIHJlbGVhc2UgdV90b3AudV9yaXNjdl90b3AudV9pbnRmLnVfZGNhY2hlLmNmZ19mb3JjZV9mbHVzaDsKKwkgICAgICAgIHJlcGVhdCAoMjAwMCkgQChwb3NlZGdlIGNsb2NrKTsgLy8gd2FpdCBkYXRhIHRvIGZsdXNoIGluIHBpcGUKKwkJJGRpc3BsYXkoIlNUQVRVUzogQ2hlY2tpbmcgQ29tcGxhaW5jZSBUZXN0IFN0YXR1cyAuLi4uICIpOworICAgICAgICAgICAgICAgIHRlc3RfcnVubmluZyA8PSAxJ2IwOworICAgICAgICAgICAgICAgIHRlc3RfcGFzcyA9IDE7CisKKyAgICAgICAgICAgICAgICAkc2Zvcm1hdCh0bXBzdHIsICJyaXNjdjY0LXVua25vd24tZWxmLXJlYWRlbGYgLXMgJXMgfCBncmVwICdiZWdpbl9zaWduYXR1cmVcXHxlbmRfc2lnbmF0dXJlJyB8IGF3ayAne3ByaW50ICQyfScgPiBlbGZpbmZvIiwgZ2V0X2ZpbGVuYW1lKHRlc3RfZmlsZSkpOworICAgICAgICAgICAgICAgIGZkID0gJGZvcGVuKCJzY3JpcHQuc2giLCAidyIpOworICAgICAgICAgICAgICAgIGlmIChmZCA9PSAwKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAkd3JpdGUoIkNhbid0IG9wZW4gc2NyaXB0LnNoXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIkVSUklSOkNhbid0IG9wZW4gc2NyaXB0LnNoXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9wYXNzID0gMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAkZndyaXRlKGZkLCAiJXMiLCB0bXBzdHIpOworICAgICAgICAgICAgICAgICRmY2xvc2UoZmQpOworCisgICAgICAgICAgICAgICAgJHN5c3RlbSgic2ggc2NyaXB0LnNoIik7CisKKyAgICAgICAgICAgICAgICBmZCA9ICRmb3BlbigiZWxmaW5mbyIsICJyIik7CisgICAgICAgICAgICAgICAgaWYgKGZkID09IDApIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICR3cml0ZSgiQ2FuJ3Qgb3BlbiBlbGZpbmZvXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIkVSUk9SOiBDYW4ndCBvcGVuIGVsZmluZm9cbiIpOworICAgICAgICAgICAgICAgICAgICB0ZXN0X3Bhc3MgPSAwOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGlmICgkZnNjYW5mKGZkLCIlaFxuJWgiLCBzdGFydCwgc3RvcCkgIT0gMikgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgJHdyaXRlKCJXcm9uZyBlbGZpbmZvIGRhdGFcbiIpOworICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSgiRVJST1I6V3JvbmcgZWxmaW5mbyBkYXRhOiBzdGFydDogJXggc3RvcDogJXhcbiIsc3RhcnQsc3RvcCk7CisgICAgICAgICAgICAgICAgICAgIHRlc3RfcGFzcyA9IDA7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgaWYgKHN0YXJ0ID4gc3RvcCkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgdG1wdiA9IHN0YXJ0OworICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHN0b3A7CisgICAgICAgICAgICAgICAgICAgIHN0b3AgPSB0bXB2OworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICRmY2xvc2UoZmQpOworCQlzdGFydCA9IHN0YXJ0ICYgMzInaDA3RkZfRkZGRjsKKwkgICAgICAgIHN0b3AgID0gc3RvcCAmIDMyJ2gwN0ZGX0ZGRkY7CisJCSRkaXNwbGF5KCJDb21wbGFpbmNlIFNpZ25hdHVyZSBTdGFydCBBZGRyZXNzOiAleCBFbmQgQWRkcmVzczoleCIsc3RhcnQsc3RvcCk7CisKKwkJLy9pZigoc3RhcnQgJiAzMidoMUZGRikgPiA1MTIpCisJCS8vCSRkaXNwbGF5KCJFUlJPUjogU3RhcnQgYWRkcmVzcyBpcyBtb3JlIHRoYW4gNTEyLCBTdGFydDogJXgiLHN0YXJ0ICYgMzInaDFGRkYpOworCQkvL2lmKChzdG9wICYgMzInaDFGRkYpID4gNTEyKQorCQkvLwkkZGlzcGxheSgiRVJST1I6IFN0b3AgYWRkcmVzcyBpcyBtb3JlIHRoYW4gNTEyLCBTdGFydDogJXgiLHN0b3AgJiAzMidoMUZGRik7CisKKyAgICAgICAgICAgICAgICBgaWZkZWYgU0lHTkFUVVJFX09VVAorCisgICAgICAgICAgICAgICAgICAgICRzZm9ybWF0KHRtcHN0ciwgIiVzLnNpZ25hdHVyZS5vdXRwdXQiLCBzX3Rlc3RuYW1lKTsKK2BpZmRlZiBWRVJJTEFUT1IKKyAgICAgICAgICAgICAgICAgICAgdG1wc3RyID0gcmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzKHRtcHN0cik7CitgZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgZmQgPSAkZm9wZW4odG1wc3RyLCAidyIpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKHN0YXJ0ICE9IHN0b3ApKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy90ZXN0X2RhdGEgPSB1X3RvcC51X3NyYW0wXzJrYi5tZW1bKHN0YXJ0ICYgMzInaDFGRkYpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZGF0YSA9IHt1X3NyYW0ubWVtb3J5W3N0YXJ0KzNdLCB1X3NyYW0ubWVtb3J5W3N0YXJ0KzJdLCB1X3NyYW0ubWVtb3J5W3N0YXJ0KzFdLCB1X3NyYW0ubWVtb3J5W3N0YXJ0XX07CisgICAgICAgICAgICAgICAgICAgICAgICAkZndyaXRlKGZkLCAiJXgiLCB0ZXN0X2RhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgJGZ3cml0ZShmZCwgIiVzIiwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCArPSA0OworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgJGZjbG9zZShmZCk7CisgICAgICAgICAgICAgICAgYGVsc2UgLy9TSUdOQVRVUkVfT1VUCisgICAgICAgICAgICAgICAgICAgICRzZm9ybWF0KHRtcHN0ciwgInJpc2N2X2NvbXBsaWFuY2UvcmVmX2RhdGEvJXMiLCBnZXRfcmVmX2ZpbGVuYW1lKHRlc3RfZmlsZSkpOworYGlmZGVmIFZFUklMQVRPUgorICAgICAgICAgICAgICAgIHRtcHN0ciA9IHJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlcyh0bXBzdHIpOworYGVuZGlmCisgICAgICAgICAgICAgICAgICAgIGZkID0gJGZvcGVuKHRtcHN0ciwiciIpOworICAgICAgICAgICAgICAgICAgICBpZiAoZmQgPT0gMCkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICR3cml0ZSgiQ2FuJ3Qgb3BlbiByZWZlcmVuY2VfZGF0YSBmaWxlOiAlc1xuIiwgdG1wc3RyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJFUlJPUjogQ2FuJ3Qgb3BlbiByZWZlcmVuY2VfZGF0YSBmaWxlOiAlc1xuIiwgdG1wc3RyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcGFzcyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICB3aGlsZSAoISRmZW9mKGZkKSAmJiAoc3RhcnQgIT0gc3RvcCkpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAkZnNjYW5mKGZkLCAiMHglaCxcbiIsIHJlZl9kYXRhKTsKKwkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkJLy8gQXNzdW1lZCBhbGwgc2lnbmF1cmUgYXJlIHdpdGgtaW4gZmlyc3QgNTEyIGxvY2F0aW9uIG9mIG1lbW9yeSwgCisJCQkvLyBvdGhlci13aXNlIG5lZWQgdG8gc3dpdGNoIGJhbmsKKwkJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCSAgICAgICAgLy8kd3JpdGVtZW1oKCJzcmFtMF9vdXQuaGV4Iix1X3RvcC51X3RzcmFtMF8ya2IubWVtLDAsNTExKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vdGVzdF9kYXRhID0gdV90b3AudV9zcmFtMF8ya2IubWVtWygoc3RhcnQgPj4gMikgJiAzMidoMUZGRildOworICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9kYXRhID0ge3Vfc3JhbS5tZW1vcnlbc3RhcnQrM10sIHVfc3JhbS5tZW1vcnlbc3RhcnQrMl0sIHVfc3JhbS5tZW1vcnlbc3RhcnQrMV0sIHVfc3JhbS5tZW1vcnlbc3RhcnRdfTsKKwkJCS8vJGRpc3BsYXkoIkNvbXBhcmUgQWRkcjogJXggcmVmX2RhdGEgOiAleCwgdGVzdF9kYXRhOiAleCIsc3RhcnQscmVmX2RhdGEsdGVzdF9kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcGFzcyAmPSAocmVmX2RhdGEgPT0gdGVzdF9kYXRhKTsKKwkJCWlmKHJlZl9kYXRhICE9IHRlc3RfZGF0YSkKKwkJCSAgICRkaXNwbGF5KCJFUlJPUjogQ29tcGFyZSBBZGRyOiAleCBNZW0gQWRkcjogJXggcmVmX2RhdGEgOiAleCwgdGVzdF9kYXRhOiAleCIsc3RhcnQsc3RhcnQgJiAzMidoMUZGRixyZWZfZGF0YSx0ZXN0X2RhdGEpOworCQkJZWxzZQorCQkJICAgJGRpc3BsYXkoIlNUQVRVUzogQ29tcGFyZSBBZGRyOiAleCBNZW0gQWRkcjogJXggcmVmX2RhdGEgOiAleCIsc3RhcnQsc3RhcnQgJiAzMidoMUZGRixyZWZfZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCArPSA0OworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgJGZjbG9zZShmZCk7CisgICAgICAgICAgICAgICAgICAgIHRlc3RzX3RvdGFsICs9IDE7CisgICAgICAgICAgICAgICAgICAgIHRlc3RzX3Bhc3NlZCArPSB0ZXN0X3Bhc3M7CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXN0X3Bhc3MpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAkd3JpdGUoIlwwMzNbMDszMm1UZXN0IHBhc3NlZFwwMzNbMG1cbiIpOworICAgICAgICAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgJHdyaXRlKCJcMDMzWzA7MzFtVGVzdCBmYWlsZWQtMlwwMzNbMG1cbiIpOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBgZW5kaWYgIC8vIFNJR05BVFVSRV9PVVQKKyAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luIC8vIE5vbiBjb21wbGlhbmNlIG1vZGUKKyAgICAgICAgICAgICAgICB0ZXN0X3J1bm5pbmcgPD0gMSdiMDsKKwkJaWYodV90b3AudV9yaXNjdl90b3AuaV9jb3JlX3RvcC5pX3BpcGVfdG9wLmlfcGlwZV9tcHJmLm1wcmZfaW50WzEwXSAhPSAwKQorCQkgICAkZGlzcGxheSgiRVJST1I6IG1wcmZfaW50WzEwXTogJXggbm90IHplcm8iLHVfdG9wLnVfcmlzY3ZfdG9wLmlfY29yZV90b3AuaV9waXBlX3RvcC5pX3BpcGVfbXByZi5tcHJmX2ludFsxMF0pOworCisgICAgICAgICAgICAgICAgdGVzdF9wYXNzID0gKHVfdG9wLnVfcmlzY3ZfdG9wLmlfY29yZV90b3AuaV9waXBlX3RvcC5pX3BpcGVfbXByZi5tcHJmX2ludFsxMF0gPT0gMCk7CisgICAgICAgICAgICAgICAgdGVzdHNfdG90YWwgICAgICs9IDE7CisgICAgICAgICAgICAgICAgdGVzdHNfcGFzc2VkICAgICs9IHRlc3RfcGFzczsKKyAgICAgICAgICAgICAgICBgaWZuZGVmIFNJR05BVFVSRV9PVVQKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRlc3RfcGFzcykgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICR3cml0ZSgiXDAzM1swOzMybVRlc3QgcGFzc2VkXDAzM1swbVxuIik7CisgICAgICAgICAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAkd3JpdGUoIlwwMzNbMDszMW1UZXN0IGZhaWxlZFwwMzNbMG1cbiIpOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBgZW5kaWYgLy9TSUdOQVRVUkVfT1VUCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICRmd3JpdGUoZl9yZXN1bHRzLCAiJXNcdFx0JXNcdCVzXG4iLCB0ZXN0X2ZpbGUsICJPSyIgLCAodGVzdF9wYXNzID8gIlBBU1MiIDogIl9fRkFJTCIpKTsKKyAgICAgICAgZW5kCisgICAgZW5kIGVsc2UgYmVnaW4KK2BpZmRlZiBWRVJJTEFUT1IKKyAgICBgaWZkZWYgU0lHTkFUVVJFX09VVAorICAgICAgICBpZiAoKHNfdGVzdG5hbWUubGVuKCkgIT0gMCkgJiYgKGJfc2luZ2xlX3J1bl9mbGFnKSkgYmVnaW4KKyAgICAgICAgICAgICRzZm9ybWF0KHRlc3RfZmlsZSwgIiVzLmJpbiIsIHNfdGVzdG5hbWUpOworICAgIGBlbHNlIC8vU0lHTkFUVVJFX09VVAorICAgICAgICBpZiAoJGZnZXRzKHRlc3RfZmlsZSxmX2luZm8pKSBiZWdpbgorICAgICAgICAgICAgdGVzdF9maWxlID0gdGVzdF9maWxlID4+IDg7IC8vIDwgUmVtb3ZpbmcgdHJhaWxpbmcgTEYgc3ltYm9sICgnXG4nKQorICAgIGBlbmRpZiAvL1NJR05BVFVSRV9PVVQKK2BlbHNlIC8vIFZFUklMQVRPUgorICAgICAgICBpZiAoISRmZW9mKGZfaW5mbykpIGJlZ2luCisgICAgICAgICAgICAkZnNjYW5mKGZfaW5mbywgIiVzXG4iLCB0ZXN0X2ZpbGUpOworYGVuZGlmIC8vIFZFUklMQVRPUgorICAgICAgICAgICAgZl90ZXN0ID0gJGZvcGVuKHRlc3RfZmlsZSwiciIpOworICAgICAgICAgICAgaWYgKGZfdGVzdCAhPSAwKSBiZWdpbgorICAgICAgICAgICAgLy8gTGF1bmNoIG5ldyB0ZXN0CisgICAgICAgICAgICAgICAgYGlmZGVmIFlDUjFfVFJBQ0VfTE9HX0VOCisgICAgICAgICAgICAgICAgICAgIHVfdG9wLnVfcmlzY3ZfdG9wLmlfY29yZV90b3AuaV9waXBlX3RvcC5pX3RyYWNlbG9nLnRlc3RfbmFtZSA9IHRlc3RfZmlsZTsKKyAgICAgICAgICAgICAgICBgZW5kaWYgLy8gU0NSMV9UUkFDRV9MT0dfRU4KKyAgICAgICAgICAgICAgICAvL2lfbWVtb3J5X3RiLnRlc3RfZmlsZSA9IHRlc3RfZmlsZTsKKyAgICAgICAgICAgICAgICAvL2lfbWVtb3J5X3RiLnRlc3RfZmlsZV9pbml0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICBgaWZuZGVmIFNJR05BVFVSRV9PVVQKKyAgICAgICAgICAgICAgICAgICAgJHdyaXRlKCJcMDMzWzA7MzRtLS0tVGVzdDogJXNcMDMzWzBtXG4iLCB0ZXN0X2ZpbGUpOworICAgICAgICAgICAgICAgIGBlbmRpZiAvL1NJR05BVFVSRV9PVVQKKyAgICAgICAgICAgICAgICB0ZXN0X3J1bm5pbmcgPD0gMSdiMTsKKyAgICAgICAgICAgICAgICByc3RfaW5pdCA8PSAxJ2IxOworICAgICAgICAgICAgICAgIGBpZmRlZiBTSUdOQVRVUkVfT1VUCisgICAgICAgICAgICAgICAgICAgIGJfc2luZ2xlX3J1bl9mbGFnID0gMDsKKyAgICAgICAgICAgICAgICBgZW5kaWYKKyAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICAgJGZ3cml0ZShmX3Jlc3VsdHMsICIlc1x0XHQlc1x0JXNcbiIsIHRlc3RfZmlsZSwgIl9fRkFJTCIsICItLS0tLS0tLSIpOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICAvLyBFeGl0CisgICAgICAgICAgICBgaWZuZGVmIFNJR05BVFVSRV9PVVQKKyAgICAgICAgICAgICAgICAkZGlzcGxheSgiXG4jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICAgICAgICAgICAgICAkZGlzcGxheSgiIyBTdW1tYXJ5OiAlMGQvJTBkIHRlc3RzIHBhc3NlZCIsIHRlc3RzX3Bhc3NlZCwgdGVzdHNfdG90YWwpOworICAgICAgICAgICAgICAgICRkaXNwbGF5KCIjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworICAgICAgICAgICAgICAgICRmY2xvc2UoZl9pbmZvKTsKKyAgICAgICAgICAgICAgICAkZmNsb3NlKGZfcmVzdWx0cyk7CisgICAgICAgICAgICBgZW5kaWYKKyAgICAgICAgICAgICRmaW5pc2goKTsKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKKworCisgICAgICAgIGBpZmRlZiBWRVJJTEFUT1IKKyAgICAgICAgZnVuY3Rpb24gYml0IGlzX2NvbXBsaWFuY2UgKGxvZ2ljIFsyNTU6MF0gdGVzdG5hbWUpOworICAgICAgICAgICAgYml0IHJlczsKKyAgICAgICAgICAgIGxvZ2ljIFs3OTowXSBwYXR0ZXJuOworICAgICAgICBiZWdpbgorICAgICAgICAgICAgcGF0dGVybiA9IDgwJ2g2MzZmNmQ3MDZjNjk2MTZlNjM2NTsgLy8gY29tcGxpYW5jZQorICAgICAgICAgICAgcmVzID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpPD0gMTc2OyBpKyspIGJlZ2luCisgICAgICAgICAgICAgICAgaWYodGVzdG5hbWVbaSs6ODBdID09IHBhdHRlcm4pIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB+cmVzOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBgaWZkZWYgU0lHTkFUVVJFX09VVAorICAgICAgICAgICAgICAgIHJldHVybiB+cmVzOworICAgICAgICAgICAgYGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICAgICAgYGVuZGlmCisgICAgICAgIGVuZAorICAgICAgICBlbmRmdW5jdGlvbiA6IGlzX2NvbXBsaWFuY2UKKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9uIGxvZ2ljIFsyNTU6MF0gZ2V0X2ZpbGVuYW1lIChsb2dpYyBbMjU1OjBdIHRlc3RuYW1lKTsKKyAgICAgICAgbG9naWMgWzI1NTowXSByZXM7CisgICAgICAgIGludCBpLCBqOworICAgICAgICBiZWdpbgorICAgICAgICAgICAgdGVzdG5hbWVbNzowXSA9IDgnaDY2OworICAgICAgICAgICAgdGVzdG5hbWVbMTU6OF0gPSA4J2g2QzsKKyAgICAgICAgICAgIHRlc3RuYW1lWzIzOjE2XSA9IDgnaDY1OworICAgICAgICAKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gMjQ4OyBpICs9IDgpIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKHRlc3RuYW1lW2krOjhdID09IDApIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBpIC09IDg7CisgICAgICAgICAgICBmb3IgKGogPSAyNTU7IGkgPj0gMDtpIC09IDgpIGJlZ2luCisgICAgICAgICAgICAgICAgcmVzW2otOjhdID0gdGVzdG5hbWVbaSs6OF07CisgICAgICAgICAgICAgICAgaiAtPSA4OworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBmb3IgKDsgaiA+PSAwO2ogLT0gOCkgYmVnaW4KKyAgICAgICAgICAgICAgICByZXNbai06OF0gPSAwOworICAgICAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgZW5kCisgICAgICAgIGVuZGZ1bmN0aW9uIDogZ2V0X2ZpbGVuYW1lCisgICAgICAgIAorICAgICAgICBmdW5jdGlvbiBsb2dpYyBbMjU1OjBdIGdldF9yZWZfZmlsZW5hbWUgKGxvZ2ljIFsyNTU6MF0gdGVzdG5hbWUpOworICAgICAgICBsb2dpYyBbMjU1OjBdIHJlczsKKyAgICAgICAgaW50IGksIGo7CisgICAgICAgIGxvZ2ljIFs3OTowXSBwYXR0ZXJuOworICAgICAgICBiZWdpbgorICAgICAgICAgICAgcGF0dGVybiA9IDgwJ2g2MzZmNmQ3MDZjNjk2MTZlNjM2NTsgLy8gY29tcGxpYW5jZQorICAgICAgICAKKyAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPD0gMTc2OyBpKyspIGJlZ2luCisgICAgICAgICAgICAgICAgaWYodGVzdG5hbWVbaSs6ODBdID09IHBhdHRlcm4pIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHRlc3RuYW1lWyhpLTgpKzo4OF0gPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorICAgICAgICAKKyAgICAgICAgICAgIGZvcihpID0gMzI7IGkgPD0gMjQ4OyBpICs9IDgpIGJlZ2luCisgICAgICAgICAgICAgICAgaWYodGVzdG5hbWVbaSs6OF0gPT0gMCkgYnJlYWs7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGkgLT0gODsKKyAgICAgICAgICAgIGZvcihqID0gMjU1OyBpID4gMjQ7IGkgLT0gOCkgYmVnaW4KKyAgICAgICAgICAgICAgICByZXNbai06OF0gPSB0ZXN0bmFtZVtpKzo4XTsKKyAgICAgICAgICAgICAgICBqIC09IDg7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGZvcig7IGogPj0wO2ogLT0gOCkgYmVnaW4KKyAgICAgICAgICAgICAgICByZXNbai06OF0gPSAwOworICAgICAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgZW5kCisgICAgICAgIGVuZGZ1bmN0aW9uIDogZ2V0X3JlZl9maWxlbmFtZQorICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gbG9naWMgWzIwNDc6MF0gcmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzIChsb2dpYyBbMjA0NzowXSBzdHIpOworICAgICAgICBpbnQgaTsKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gMjA0MDsgaSArPSA4KSBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChzdHJbaSs6OF0gIT0gOCdoMjApIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBzdHIgPSBzdHIgPj4gaTsKKyAgICAgICAgICAgIHJldHVybiBzdHI7CisgICAgICAgIGVuZAorICAgICAgICBlbmRmdW5jdGlvbjogcmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzCisgICAgICAgIAorICAgICAgICBgZWxzZSAvLyBWRVJJTEFUT1IKKyAgICAgICAgZnVuY3Rpb24gYml0IGlzX2NvbXBsaWFuY2UgKHN0cmluZyB0ZXN0bmFtZSk7CisgICAgICAgIGJlZ2luCisgICAgICAgICAgICByZXR1cm4gKHRlc3RuYW1lLnN1YnN0cigwLCA5KSA9PSAiY29tcGxpYW5jZSIpOworICAgICAgICBlbmQKKyAgICAgICAgZW5kZnVuY3Rpb24gOiBpc19jb21wbGlhbmNlCisgICAgICAgIAorICAgICAgICBmdW5jdGlvbiBzdHJpbmcgZ2V0X2ZpbGVuYW1lIChzdHJpbmcgdGVzdG5hbWUpOworICAgICAgICBpbnQgbGVuZ3RoOworICAgICAgICBiZWdpbgorICAgICAgICAgICAgbGVuZ3RoID0gdGVzdG5hbWUubGVuKCk7CisgICAgICAgICAgICB0ZXN0bmFtZVtsZW5ndGgtMV0gPSAiZiI7CisgICAgICAgICAgICB0ZXN0bmFtZVtsZW5ndGgtMl0gPSAibCI7CisgICAgICAgICAgICB0ZXN0bmFtZVtsZW5ndGgtM10gPSAiZSI7CisgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHRlc3RuYW1lOworICAgICAgICBlbmQKKyAgICAgICAgZW5kZnVuY3Rpb24gOiBnZXRfZmlsZW5hbWUKKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9uIHN0cmluZyBnZXRfcmVmX2ZpbGVuYW1lIChzdHJpbmcgdGVzdG5hbWUpOworICAgICAgICBiZWdpbgorICAgICAgICAgICAgcmV0dXJuIHRlc3RuYW1lLnN1YnN0cigxMSwgdGVzdG5hbWUubGVuKCkgLSA1KTsKKyAgICAgICAgZW5kCisgICAgICAgIGVuZGZ1bmN0aW9uIDogZ2V0X3JlZl9maWxlbmFtZQorICAgICAgICAKKyAgICAgICAgYGVuZGlmIC8vIFZFUklMQVRPUgorCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvcnVuX2l2ZXJpbG9nIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3J1bl9pdmVyaWxvZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYmQ4ZTA1Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3J1bl9pdmVyaWxvZwpAQCAtMCwwICsxLDMzIEBACitjZCAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC9yaXNjZHVpbm8vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2hlbGxvCisKK3Jpc2N2NjQtdW5rbm93bi1lbGYtZ2NjIC1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIC1EX19SVkNfRVhUIC1zdGF0aWMgLXN0ZD1nbnU5OSAtZm5vLWNvbW1vbiAtZm5vLWJ1aWx0aW4tcHJpbnRmIC1EVENNPTEgLVdhLC1tYXJjaD1ydjMyaW1jIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1ERkxBR1NfU1RSPVwiIi1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIlwiICAtYyAtSS4vIC1JL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy8uLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uICAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC9yaXNjZHVpbm8vdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzLy4uLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vc2NfcHJpbnQuYyAtbyAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC9yaXNjZHVpbm8vdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL2J1aWxkL2l2ZXJpbG9nX1dCX01BWF9pbWNfSVBJQ18xX1RDTV8xX1ZJUlFfMV9UUkFDRV8wL3NjX3ByaW50Lm8KKworcmlzY3Y2NC11bmtub3duLWVsZi1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1jIC1JLi8gLUkvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC9yaXNjZHVpbm8vdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzLy4uLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24gIGhlbGxvLmMgLW8gL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9idWlsZC9pdmVyaWxvZ19XQl9NQVhfaW1jX0lQSUNfMV9UQ01fMV9WSVJRXzFfVFJBQ0VfMC9oZWxsby5vCisKK3Jpc2N2NjQtdW5rbm93bi1lbGYtZ2NjIC1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIC1EX19SVkNfRVhUIC1zdGF0aWMgLXN0ZD1nbnU5OSAtZm5vLWNvbW1vbiAtZm5vLWJ1aWx0aW4tcHJpbnRmIC1EVENNPTEgLVdhLC1tYXJjaD1ydjMyaW1jIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1ERkxBR1NfU1RSPVwiIi1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIlwiICAtRF9fQVNTRU1CTFlfXz0xIC1jIC1JLi8gLUkvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC9yaXNjZHVpbm8vdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzLy4uLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24gIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3Jpc2NkdWluby92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvLi4vLi4vLi4vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9jcnRfdGNtLlMgLW8gL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9idWlsZC9pdmVyaWxvZ19XQl9NQVhfaW1jX0lQSUNfMV9UQ01fMV9WSVJRXzFfVFJBQ0VfMC9jcnRfdGNtLm8KKworcmlzY3Y2NC11bmtub3duLWVsZi1nY2MgLW8gL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9idWlsZC9pdmVyaWxvZ19XQl9NQVhfaW1jX0lQSUNfMV9UQ01fMV9WSVJRXzFfVFJBQ0VfMC9oZWxsby5lbGYgLVQgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy8uLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uL2xpbmtfdGNtLmxkIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3Jpc2NkdWluby92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvYnVpbGQvaXZlcmlsb2dfV0JfTUFYX2ltY19JUElDXzFfVENNXzFfVklSUV8xX1RSQUNFXzAvc2NfcHJpbnQubyAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC9yaXNjZHVpbm8vdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL2J1aWxkL2l2ZXJpbG9nX1dCX01BWF9pbWNfSVBJQ18xX1RDTV8xX1ZJUlFfMV9UUkFDRV8wL2hlbGxvLm8gL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9idWlsZC9pdmVyaWxvZ19XQl9NQVhfaW1jX0lQSUNfMV9UQ01fMV9WSVJRXzFfVFJBQ0VfMC9jcnRfdGNtLm8gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyCitybSAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC9yaXNjZHVpbm8vdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL2J1aWxkL2l2ZXJpbG9nX1dCX01BWF9pbWNfSVBJQ18xX1RDTV8xX1ZJUlFfMV9UUkFDRV8wL3NjX3ByaW50Lm8gL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9idWlsZC9pdmVyaWxvZ19XQl9NQVhfaW1jX0lQSUNfMV9UQ01fMV9WSVJRXzFfVFJBQ0VfMC9jcnRfdGNtLm8gL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9idWlsZC9pdmVyaWxvZ19XQl9NQVhfaW1jX0lQSUNfMV9UQ01fMV9WSVJRXzFfVFJBQ0VfMC9oZWxsby5vCisKK2NkIGJ1aWxkL2l2ZXJpbG9nX1dCX01BWF9pbWNfSVBJQ18xX1RDTV8xX1ZJUlFfMV9UUkFDRV8wCisKK2l2ZXJpbG9nIC1nMjAwNS1zdiAtRFdGRFVNUCAtREZVTkNUSU9OQUwgLURTSU0gLUkgJFBES19ST09UL3NreTEzMEEgXAorLUkgJENBUkFWRUxfUk9PVC92ZXJpbG9nL2R2L2NhcmF2ZWwgXAorLUkgJENBUkFWRUxfUk9PVC92ZXJpbG9nL3J0bCBcCistSSAuLi8uLi8uLi9tb2RlbCAgICBcCistSSAuLi8uLi8uLi8uLi8uLi92ZXJpbG9nL3J0bCBcCistSSAuLi8uLi8uLi8uLi8uLi92ZXJpbG9nIFwKKy1JIC4uLy4uLy4uL2FnZW50cyAgICBcCistSSAuLi8uLi8uLi8uLi8uLi92ZXJpbG9nL3J0bC95aWZpdmUveWNyMWMvc3JjL2luY2x1ZGVzIFwKKy1JIC4uLy4uLy4uLy4uLy4uL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL2RlZnMgXAorLUkgLi4vLi4vLi4vLi4vLi4vdmVyaWxvZy9ydGwvaTJjbS9zcmMvaW5jbHVkZXMgXAorLUkgLi4vLi4vLi4vLi4vLi4vdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9pbmNsdWRlcyBcCistSSAuLi8uLi8uLi8uLi8uLi92ZXJpbG9nL3J0bC9tYmlzdC9pbmNsdWRlIFwKKy1JIC4uLy4uIFwKKy4uLy4uL3VzZXJfcmlzY19yZWdyZXNzX3RiLnYgXAorLW8gdXNlcl9yaXNjX3JlZ3Jlc3NfdGIudnZwCisKK2l2ZXJpbG9nLXZwaSAuLi8uLi8uLi92cGkvc3lzdGVtL3N5c3RlbS5jCisKK3Z2cCAgLU0uIC1tc3lzdGVtICB1c2VyX3Jpc2NfcmVncmVzc190Yi52dnAgK3Rlc3RfaW5mbz0uL3Rlc3RfaW5mbyArdGVzdF9yZXN1bHRzPS4vdGVzdF9yZXN1bHRzLnR4dCB8IHRlZSBzaW1fcmVzdWx0cy50eHQKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2JlbmNobWFya3MvY29yZW1hcmsvTWFrZWZpbGUgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9jb3JlbWFyay9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjA2MjNiCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2JlbmNobWFya3MvY29yZW1hcmsvTWFrZWZpbGUKQEAgLTAsMCArMSwyNiBAQAorc3JjX2RpciA6PSAkKGRpciAkKGxhc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKQorZGVwZW5kX2RpciA6PSAkKHNyY19kaXIpLy4uLy4uLy4uL2RlcGVuZGVuY2llcy9jb3JlbWFyaworCitpZmVxICgiJChJVEVSQVRJT05TKSIsIiIpCitJVEVSQVRJT05TPTEKK2VuZGlmCisKK0FERF9DRkxBR1MgICs9IC1ESVRFUkFUSU9OUz0kKElURVJBVElPTlMpCitBRERfVlBBVEggICA6PSAkKGRlcGVuZF9kaXIpCitBRERfaW5jcyAgICA6PSAtSSQoc3JjX2Rpcikvc3JjIC1JJChkZXBlbmRfZGlyKQorCitjX3NyYyA6PSBjb3JlX3BvcnRtZS5jIHNjX3ByaW50LmMgCitjb3JlbWFya19zcmMgOj0gLi9zcmMvY29yZV9saXN0X2pvaW4uYyAuL3NyYy9jb3JlX21hdHJpeC5jIC4vc3JjL2NvcmVfbWFpbi5jIC4vc3JjL2NvcmVfdXRpbC5jIC4vc3JjL2NvcmVfc3RhdGUuYworY19zcmMgKz0gY29yZV9saXN0X2pvaW4uYyBjb3JlX21hdHJpeC5jIGNvcmVfbWFpbi5jIGNvcmVfdXRpbC5jIGNvcmVfc3RhdGUuYworCitpbmNsdWRlICQoaW5jX2RpcikvY29tbW9uLm1rCisKKworZGVmYXVsdDogbG9nX3JlcXVlc3RlZF90Z3QgICQoYmxkX2RpcikvY29yZW1hcmsuZWxmICQoYmxkX2RpcikvY29yZW1hcmsuaGV4ICQoYmxkX2RpcikvY29yZW1hcmsuZHVtcCAKKworbG9nX3JlcXVlc3RlZF90Z3Q6CisJZWNobyBjb3JlbWFyay5oZXg+PiAkKGJsZF9kaXIpL3Rlc3RfaW5mbworCWVjaG8gJChpbmNfZGlyKS9jb21tb24ubWsKKworY2xlYW46CisJJChSTSkgJChjX29ianMpICQoYXNtX29ianMpICQoYmxkX2RpcikvY29yZW1hcmsuaGV4ICQoYmxkX2RpcikvY29yZW1hcmsuZHVtcCAKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2NvcmVtYXJrL2NvcmVfcG9ydG1lLmMgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9jb3JlbWFyay9jb3JlX3BvcnRtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjODAxZjcKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9jb3JlbWFyay9jb3JlX3BvcnRtZS5jCkBAIC0wLDAgKzEsMTQxIEBACisvKgorCUZpbGUgOiBjb3JlX3BvcnRtZS5jCisqLworLyoKKwlBdXRob3IgOiBTaGF5IEdhbC1PbiwgRUVNQkMKKwlMZWdhbCA6IFRPRE8hCisqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAiY29yZW1hcmsuaCIKKyNpbmNsdWRlICJjb3JlX3BvcnRtZS5oIgorI2luY2x1ZGUgInJpc2N2X2Nzcl9lbmNvZGluZy5oIgorI2luY2x1ZGUgInNjX3Rlc3QuaCIKKworI2lmIFZBTElEQVRJT05fUlVOCisJdm9sYXRpbGUgZWVfczMyIHNlZWQxX3ZvbGF0aWxlPTB4MzQxNTsKKwl2b2xhdGlsZSBlZV9zMzIgc2VlZDJfdm9sYXRpbGU9MHgzNDE1OworCXZvbGF0aWxlIGVlX3MzMiBzZWVkM192b2xhdGlsZT0weDY2OworI2VuZGlmCisjaWYgUEVSRk9STUFOQ0VfUlVOCisJdm9sYXRpbGUgZWVfczMyIHNlZWQxX3ZvbGF0aWxlPTB4MDsKKwl2b2xhdGlsZSBlZV9zMzIgc2VlZDJfdm9sYXRpbGU9MHgwOworCXZvbGF0aWxlIGVlX3MzMiBzZWVkM192b2xhdGlsZT0weDY2OworI2VuZGlmCisjaWYgUFJPRklMRV9SVU4KKwl2b2xhdGlsZSBlZV9zMzIgc2VlZDFfdm9sYXRpbGU9MHg4OworCXZvbGF0aWxlIGVlX3MzMiBzZWVkMl92b2xhdGlsZT0weDg7CisJdm9sYXRpbGUgZWVfczMyIHNlZWQzX3ZvbGF0aWxlPTB4ODsKKyNlbmRpZgorCXZvbGF0aWxlIGVlX3MzMiBzZWVkNF92b2xhdGlsZT1JVEVSQVRJT05TOworCXZvbGF0aWxlIGVlX3MzMiBzZWVkNV92b2xhdGlsZT0wOworCisvKiBQb3J0aW5nIDogVGltaW5nIGZ1bmN0aW9ucworCUhvdyB0byBjYXB0dXJlIHRpbWUgYW5kIGNvbnZlcnQgdG8gc2Vjb25kcyBtdXN0IGJlIHBvcnRlZCB0byB3aGF0ZXZlciBpcyBzdXBwb3J0ZWQgYnkgdGhlIHBsYXRmb3JtLgorCWUuZy4gUmVhZCB2YWx1ZSBmcm9tIG9uIGJvYXJkIFJUQywgcmVhZCB2YWx1ZSBmcm9tIGNwdSBjbG9jayBjeWNsZXMgcGVyZm9ybWFuY2UgY291bnRlciBldGMuCisJU2FtcGxlIGltcGxlbWVudGF0aW9uIGZvciBzdGFuZGFyZCB0aW1lLmggYW5kIHdpbmRvd3MuaCBkZWZpbml0aW9ucyBpbmNsdWRlZC4KKyovCisjaWYgMQorQ09SRVRJTUVUWVBFIGJhcmVib25lc19jbG9jaygpIHsKKwl1bnNpZ25lZCBsb25nIG47CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkicmR0aW1lICUwIgorCQk6ICI9ciIgKG4pKTsKKwlyZXR1cm4gbjsKK30KKyNkZWZpbmUgQ0xPQ0tTX1BFUl9TRUMJMTAwMDAwMDAKKworLyogRGVmaW5lIDogVElNRVJfUkVTX0RJVklERVIKKwlEaXZpZGVyIHRvIHRyYWRlIG9mZiB0aW1lciByZXNvbHV0aW9uIGFuZCB0b3RhbCB0aW1lIHRoYXQgY2FuIGJlIG1lYXN1cmVkLgorCisJVXNlIGxvd2VyIHZhbHVlcyB0byBpbmNyZWFzZSByZXNvbHV0aW9uLCBidXQgbWFrZSBzdXJlIHRoYXQgb3ZlcmZsb3cgZG9lcyBub3Qgb2NjdXIuCisJSWYgdGhlcmUgYXJlIGlzc3VlcyB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb3ZlcmZsb3dpbmcsIGluY3JlYXNlIHRoaXMgdmFsdWUuCisJKi8KKy8qICNkZWZpbmUgTlNFQ1NfUEVSX1NFQyBDTE9DS1NfUEVSX1NFQyAqLworLyogI2RlZmluZSBDT1JFVElNRVRZUEUgY2xvY2tfdCAqLworI2RlZmluZSBHRVRNWVRJTUUoX3QpICgqX3Q9YmFyZWJvbmVzX2Nsb2NrKCkpCisjZGVmaW5lIE1ZVElNRURJRkYoZmluLGluaSkgKChmaW4pLShpbmkpKQorI2RlZmluZSBUSU1FUl9SRVNfRElWSURFUiAxCisjZGVmaW5lIFNBTVBMRV9USU1FX0lNUExFTUVOVEFUSU9OIDEKKyNkZWZpbmUgRUVfVElDS1NfUEVSX1NFQyAoQ0xPQ0tTX1BFUl9TRUMgLyBUSU1FUl9SRVNfRElWSURFUikKKyNlbHNlCisKKyNlbmRpZgorCisvKiogRGVmaW5lIEhvc3Qgc3BlY2lmaWMgKFBPU0lYKSwgb3IgdGFyZ2V0IHNwZWNpZmljIGdsb2JhbCB0aW1lIHZhcmlhYmxlcy4gKi8KK3N0YXRpYyBDT1JFVElNRVRZUEUgc3RhcnRfdGltZV92YWwsIHN0b3BfdGltZV92YWw7CisKKy8qIEZ1bmN0aW9uIDogc3RhcnRfdGltZQorCVRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgcmlnaHQgYmVmb3JlIHN0YXJ0aW5nIHRoZSB0aW1lZCBwb3J0aW9uIG9mIHRoZSBiZW5jaG1hcmsuCisKKwlJbXBsZW1lbnRhdGlvbiBtYXkgYmUgY2FwdHVyaW5nIGEgc3lzdGVtIHRpbWVyIChhcyBpbXBsZW1lbnRlZCBpbiB0aGUgZXhhbXBsZSBjb2RlKQorCW9yIHplcm9pbmcgc29tZSBzeXN0ZW0gcGFyYW1ldGVycyAtIGUuZy4gc2V0dGluZyB0aGUgY3B1IGNsb2NrcyBjeWNsZXMgdG8gMC4KKyovCit2b2lkIHN0YXJ0X3RpbWUodm9pZCkgeworCUdFVE1ZVElNRSgmc3RhcnRfdGltZV92YWwgKTsKK30KKy8qIEZ1bmN0aW9uIDogc3RvcF90aW1lCisJVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCByaWdodCBhZnRlciBlbmRpbmcgdGhlIHRpbWVkIHBvcnRpb24gb2YgdGhlIGJlbmNobWFyay4KKworCUltcGxlbWVudGF0aW9uIG1heSBiZSBjYXB0dXJpbmcgYSBzeXN0ZW0gdGltZXIgKGFzIGltcGxlbWVudGVkIGluIHRoZSBleGFtcGxlIGNvZGUpCisJb3Igb3RoZXIgc3lzdGVtIHBhcmFtZXRlcnMgLSBlLmcuIHJlYWRpbmcgdGhlIGN1cnJlbnQgdmFsdWUgb2YgY3B1IGN5Y2xlcyBjb3VudGVyLgorKi8KK3ZvaWQgc3RvcF90aW1lKHZvaWQpIHsKKwlHRVRNWVRJTUUoJnN0b3BfdGltZV92YWwgKTsKK30KKy8qIEZ1bmN0aW9uIDogZ2V0X3RpbWUKKwlSZXR1cm4gYW4gYWJzdHJhY3QgInRpY2tzIiBudW1iZXIgdGhhdCBzaWduaWZpZXMgdGltZSBvbiB0aGUgc3lzdGVtLgorCisJQWN0dWFsIHZhbHVlIHJldHVybmVkIG1heSBiZSBjcHUgY3ljbGVzLCBtaWxsaXNlY29uZHMgb3IgYW55IG90aGVyIHZhbHVlLAorCWFzIGxvbmcgYXMgaXQgY2FuIGJlIGNvbnZlcnRlZCB0byBzZWNvbmRzIGJ5IDx0aW1lX2luX3NlY3M+LgorCVRoaXMgbWV0aG9kb2xvZ3kgaXMgdGFrZW4gdG8gYWNjb21vZGF0ZSBhbnkgaGFyZHdhcmUgb3Igc2ltdWxhdGVkIHBsYXRmb3JtLgorCVRoZSBzYW1wbGUgaW1wbGVtZW50YXRpb24gcmV0dXJucyBtaWxsaXNlY3MgYnkgZGVmYXVsdCwKKwlhbmQgdGhlIHJlc29sdXRpb24gaXMgY29udHJvbGxlZCBieSA8VElNRVJfUkVTX0RJVklERVI+CisqLworQ09SRV9USUNLUyBnZXRfdGltZSh2b2lkKSB7CisJQ09SRV9USUNLUyBlbGFwc2VkPShDT1JFX1RJQ0tTKShNWVRJTUVESUZGKHN0b3BfdGltZV92YWwsIHN0YXJ0X3RpbWVfdmFsKSk7CisJcmV0dXJuIGVsYXBzZWQ7Cit9CisvKiBGdW5jdGlvbiA6IHRpbWVfaW5fc2VjcworCUNvbnZlcnQgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGdldF90aW1lIHRvIHNlY29uZHMuCisKKwlUaGUgPHNlY3NfcmV0PiB0eXBlIGlzIHVzZWQgdG8gYWNjb21vZGF0ZSBzeXN0ZW1zIHdpdGggbm8gc3VwcG9ydCBmb3IgZmxvYXRpbmcgcG9pbnQuCisJRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpbXBsZW1lbnRlZCBieSB0aGUgRUVfVElDS1NfUEVSX1NFQyBtYWNybyBhYm92ZS4KKyovCitzZWNzX3JldCB0aW1lX2luX3NlY3MoQ09SRV9USUNLUyB0aWNrcykgeworCXNlY3NfcmV0IHJldHZhbD0oKHNlY3NfcmV0KXRpY2tzKSAvIChzZWNzX3JldClFRV9USUNLU19QRVJfU0VDOworCXJldHVybiByZXR2YWw7Cit9CisKK2VlX3UzMiBkZWZhdWx0X251bV9jb250ZXh0cz0xOworCisvKiBGdW5jdGlvbiA6IHBvcnRhYmxlX2luaXQKKwlUYXJnZXQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gY29kZQorCVRlc3QgZm9yIHNvbWUgY29tbW9uIG1pc3Rha2VzLgorKi8KK3ZvaWQgcG9ydGFibGVfaW5pdChjb3JlX3BvcnRhYmxlICpwLCBpbnQgKmFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBlZV9wcmludGYoIkNvcmVNYXJrIDEuMFxuIik7CisJaWYgKHNpemVvZihlZV9wdHJfaW50KSAhPSBzaXplb2YoZWVfdTggKikpIHsKKwkJZWVfcHJpbnRmKCJFUlJPUiEgUGxlYXNlIGRlZmluZSBlZV9wdHJfaW50IHRvIGEgdHlwZSB0aGF0IGhvbGRzIGEgcG9pbnRlciEgKCV1ICE9ICV1KVxuIiwgc2l6ZW9mKGVlX3B0cl9pbnQpLCBzaXplb2YoZWVfdTggKikpOworCX0KKwlpZiAoc2l6ZW9mKGVlX3UzMikgIT0gNCkgeworCQllZV9wcmludGYoIkVSUk9SISBQbGVhc2UgZGVmaW5lIGVlX3UzMiB0byBhIDMyYiB1bnNpZ25lZCB0eXBlISAoJXUpXG4iLCBzaXplb2YoZWVfdTMyKSk7CisJfQorCXAtPnBvcnRhYmxlX2lkPTE7Cit9CisvKiBGdW5jdGlvbiA6IHBvcnRhYmxlX2ZpbmkKKwlUYXJnZXQgc3BlY2lmaWMgZmluYWwgY29kZQorKi8KK3ZvaWQgcG9ydGFibGVfZmluaShjb3JlX3BvcnRhYmxlICpwKQoreworCXAtPnBvcnRhYmxlX2lkPTA7CisKKyAgICByZXBvcnRfcmVzdWx0cygwLCAwLCAwLCAwLCAwKTsKKworICAgIC8qIHJlc3VsdHNbMF0uaXRlcmF0aW9ucyAqIDEwMDAwMDAwLyh0b3RhbF90aW1lKSAqLworCisgICAgLyogZXh0ZXJuIHZvaWQgdG9ob3N0X2V4aXQobG9uZyBjb2RlKTsgKi8KKworICAgIC8qIHRvaG9zdF9leGl0KDApOyAqLworfQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2JlbmNobWFya3MvY29yZW1hcmsvY29yZV9wb3J0bWUuaCBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2NvcmVtYXJrL2NvcmVfcG9ydG1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU3OTMwZgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2NvcmVtYXJrL2NvcmVfcG9ydG1lLmgKQEAgLTAsMCArMSwyMTAgQEAKKy8qIEZpbGUgOiBjb3JlX3BvcnRtZS5oICovCisKKy8qCisJQXV0aG9yIDogU2hheSBHYWwtT24sIEVFTUJDCisJTGVnYWwgOiBUT0RPIQorKi8KKy8qIFRvcGljIDogRGVzY3JpcHRpb24KKwlUaGlzIGZpbGUgY29udGFpbnMgY29uZmlndXJhdGlvbiBjb25zdGFudHMgcmVxdWlyZWQgdG8gZXhlY3V0ZSBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zCisqLworI2lmbmRlZiBDT1JFX1BPUlRNRV9ICisjZGVmaW5lIENPUkVfUE9SVE1FX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEYXRhIHR5cGVzIGFuZCBzZXR0aW5ncyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvbmZpZ3VyYXRpb24gOiBIQVNfRkxPQVQKKwlEZWZpbmUgdG8gMSBpZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgZmxvYXRpbmcgcG9pbnQuCisqLworI2lmbmRlZiBIQVNfRkxPQVQKKyNkZWZpbmUgSEFTX0ZMT0FUIDAKKyNlbmRpZgorLyogQ29uZmlndXJhdGlvbiA6IEhBU19USU1FX0gKKwlEZWZpbmUgdG8gMSBpZiBwbGF0Zm9ybSBoYXMgdGhlIHRpbWUuaCBoZWFkZXIgZmlsZSwKKwlhbmQgaW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIHRoZXJlb2YuCisqLworI2lmbmRlZiBIQVNfVElNRV9ICisjZGVmaW5lIEhBU19USU1FX0ggMAorI2VuZGlmCisvKiBDb25maWd1cmF0aW9uIDogVVNFX0NMT0NLCisJRGVmaW5lIHRvIDEgaWYgcGxhdGZvcm0gaGFzIHRoZSB0aW1lLmggaGVhZGVyIGZpbGUsCisJYW5kIGltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyB0aGVyZW9mLgorKi8KKyNpZm5kZWYgVVNFX0NMT0NLCisjZGVmaW5lIFVTRV9DTE9DSyAwCisjZW5kaWYKKy8qIENvbmZpZ3VyYXRpb24gOiBIQVNfU1RESU8KKwlEZWZpbmUgdG8gMSBpZiB0aGUgcGxhdGZvcm0gaGFzIHN0ZGlvLmguCisqLworI2lmbmRlZiBIQVNfU1RESU8KKyNkZWZpbmUgSEFTX1NURElPIDEKKyNlbmRpZgorLyogQ29uZmlndXJhdGlvbiA6IEhBU19QUklOVEYKKwlEZWZpbmUgdG8gMSBpZiB0aGUgcGxhdGZvcm0gaGFzIHN0ZGlvLmggYW5kIGltcGxlbWVudHMgdGhlIHByaW50ZiBmdW5jdGlvbi4KKyovCisjaWZuZGVmIEhBU19QUklOVEYKKyNkZWZpbmUgSEFTX1BSSU5URiAwCisjZW5kaWYKKworI2luY2x1ZGUgInNjX3ByaW50LmgiCisjZGVmaW5lIGVlX3ByaW50ZiBzY19wcmludGYKKworLyogc3RhdGljIGlubGluZSBpbnQgZWVfcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSB7fSAqLworCisvKiBDb25maWd1cmF0aW9uIDogQ09SRV9USUNLUworCURlZmluZSB0eXBlIG9mIHJldHVybiBmcm9tIHRoZSB0aW1pbmcgZnVuY3Rpb25zLgorICovCisvKiAjaW5jbHVkZSA8dGltZS5oPiAqLworLyogdHlwZWRlZiBjbG9ja190IENPUkVfVElDS1M7ICovCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjZGVmaW5lIENPUkVUSU1FVFlQRSB1aW50MzJfdAordHlwZWRlZiB1aW50MzJfdCBDT1JFX1RJQ0tTOworCisvKiBEZWZpbml0aW9ucyA6IENPTVBJTEVSX1ZFUlNJT04sIENPTVBJTEVSX0ZMQUdTLCBNRU1fTE9DQVRJT04KKwlJbml0aWFsaXplIHRoZXNlIHN0cmluZ3MgcGVyIHBsYXRmb3JtCisqLworI2lmbmRlZiBDT01QSUxFUl9WRVJTSU9OCisgI2lmZGVmIF9fR05VQ19fCisgI2RlZmluZSBDT01QSUxFUl9WRVJTSU9OICJHQ0MiX19WRVJTSU9OX18KKyAjZWxzZQorICNkZWZpbmUgQ09NUElMRVJfVkVSU0lPTiAiUGxlYXNlIHB1dCBjb21waWxlciB2ZXJzaW9uIGhlcmUgKGUuZy4gZ2NjIDQuMSkiCisgI2VuZGlmCisjZW5kaWYKKyNpZm5kZWYgQ09NUElMRVJfRkxBR1MKKyAjZGVmaW5lIENPTVBJTEVSX0ZMQUdTIEZMQUdTX1NUUiAvKiAiUGxlYXNlIHB1dCBjb21waWxlciBmbGFncyBoZXJlIChlLmcuIC1vMykiICovCisjZW5kaWYKKyNpZm5kZWYgTUVNX0xPQ0FUSU9OCisgLyogI2RlZmluZSBNRU1fTE9DQVRJT04gIlNUQUNLIiAqLworICNkZWZpbmUgTUVNX0xPQ0FUSU9OICJTVEFUSUMiCisjZW5kaWYKKworLyogRGF0YSBUeXBlcyA6CisJVG8gYXZvaWQgY29tcGlsZXIgaXNzdWVzLCBkZWZpbmUgdGhlIGRhdGEgdHlwZXMgdGhhdCBuZWVkIG90IGJlIHVzZWQgZm9yIDhiLCAxNmIgYW5kIDMyYiBpbiA8Y29yZV9wb3J0bWUuaD4uCisKKwkqSW1wcnRhbnQqIDoKKwllZV9wdHJfaW50IG5lZWRzIHRvIGJlIHRoZSBkYXRhIHR5cGUgdXNlZCB0byBob2xkIHBvaW50ZXJzLCBvdGhlcndpc2UgY29yZW1hcmsgbWF5IGZhaWwhISEKKyovCit0eXBlZGVmIGludDE2X3QgZWVfczE2OwordHlwZWRlZiB1aW50MTZfdCBlZV91MTY7Cit0eXBlZGVmIGludDMyX3QgZWVfczMyOwordHlwZWRlZiBmbG9hdCBlZV9mMzI7Cit0eXBlZGVmIHVpbnQ4X3QgZWVfdTg7Cit0eXBlZGVmIHVpbnQzMl90IGVlX3UzMjsKK3R5cGVkZWYgdWludHB0cl90IGVlX3B0cl9pbnQ7Cit0eXBlZGVmIHNpemVfdCBlZV9zaXplX3Q7CisvKiBhbGlnbl9tZW0gOgorCVRoaXMgbWFjcm8gaXMgdXNlZCB0byBhbGlnbiBhbiBvZmZzZXQgdG8gcG9pbnQgdG8gYSAzMmIgdmFsdWUuIEl0IGlzIHVzZWQgaW4gdGhlIE1hdHJpeCBhbGdvcml0aG0gdG8gaW5pdGlhbGl6ZSB0aGUgaW5wdXQgbWVtb3J5IGJsb2Nrcy4KKyovCisjZGVmaW5lIGFsaWduX21lbSh4KSAodm9pZCAqKSg0ICsgKCgoZWVfcHRyX2ludCkoeCkgLSAxKSAmIH4zKSkKKworLyogQ29uZmlndXJhdGlvbiA6IFNFRURfTUVUSE9ECisJRGVmaW5lcyBtZXRob2QgdG8gZ2V0IHNlZWQgdmFsdWVzIHRoYXQgY2Fubm90IGJlIGNvbXB1dGVkIGF0IGNvbXBpbGUgdGltZS4KKworCVZhbGlkIHZhbHVlcyA6CisJU0VFRF9BUkcgLSBmcm9tIGNvbW1hbmQgbGluZS4KKwlTRUVEX0ZVTkMgLSBmcm9tIGEgc3lzdGVtIGZ1bmN0aW9uLgorCVNFRURfVk9MQVRJTEUgLSBmcm9tIHZvbGF0aWxlIHZhcmlhYmxlcy4KKyovCisjaWZuZGVmIFNFRURfTUVUSE9ECisjZGVmaW5lIFNFRURfTUVUSE9EIFNFRURfVk9MQVRJTEUKKyNlbmRpZgorCisvKiBDb25maWd1cmF0aW9uIDogTUVNX01FVEhPRAorCURlZmluZXMgbWV0aG9kIHRvIGdldCBhIGJsb2NrIG9mIG1lbXJ5LgorCisJVmFsaWQgdmFsdWVzIDoKKwlNRU1fTUFMTE9DIC0gZm9yIHBsYXRmb3JtcyB0aGF0IGltcGxlbWVudCBtYWxsb2MgYW5kIGhhdmUgbWFsbG9jLmguCisJTUVNX1NUQVRJQyAtIHRvIHVzZSBhIHN0YXRpYyBtZW1vcnkgYXJyYXkuCisJTUVNX1NUQUNLIC0gdG8gYWxsb2NhdGUgdGhlIGRhdGEgYmxvY2sgb24gdGhlIHN0YWNrIChOWUkpLgorKi8KKyNpZm5kZWYgTUVNX01FVEhPRAorLyogI2RlZmluZSBNRU1fTUVUSE9EIE1FTV9TVEFDSyAqLworI2RlZmluZSBNRU1fTUVUSE9EIE1FTV9TVEFUSUMKKyNlbmRpZgorCisvKiBDb25maWd1cmF0aW9uIDogTVVMVElUSFJFQUQKKwlEZWZpbmUgZm9yIHBhcmFsbGVsIGV4ZWN1dGlvbgorCisJVmFsaWQgdmFsdWVzIDoKKwkxIC0gb25seSBvbmUgY29udGV4dCAoZGVmYXVsdCkuCisJTj4xIC0gd2lsbCBleGVjdXRlIE4gY29waWVzIGluIHBhcmFsbGVsLgorCisJTm90ZSA6CisJSWYgdGhpcyBmbGFnIGlzIGRlZmluZWQgdG8gbW9yZSB0aGVuIDEsIGFuIGltcGxlbWVudGF0aW9uIGZvciBsYXVuY2hpbmcgcGFyYWxsZWwgY29udGV4dHMgbXVzdCBiZSBkZWZpbmVkLgorCisJVHdvIHNhbXBsZSBpbXBsZW1lbnRhdGlvbnMgYXJlIHByb3ZpZGVkLiBVc2UgPFVTRV9QVEhSRUFEPiBvciA8VVNFX0ZPUks+IHRvIGVuYWJsZSB0aGVtLgorCisJSXQgaXMgdmFsaWQgdG8gaGF2ZSBhIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbiBvZiA8Y29yZV9zdGFydF9wYXJhbGxlbD4gYW5kIDxjb3JlX2VuZF9wYXJhbGxlbD4gaW4gPGNvcmVfcG9ydG1lLmM+LAorCXRvIGZpdCBhIHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlLgorKi8KKyNpZm5kZWYgTVVMVElUSFJFQUQKKyNkZWZpbmUgTVVMVElUSFJFQUQgMQorI2RlZmluZSBVU0VfUFRIUkVBRCAwCisjZGVmaW5lIFVTRV9GT1JLIDAKKyNkZWZpbmUgVVNFX1NPQ0tFVCAwCisjZW5kaWYKKworLyogQ29uZmlndXJhdGlvbiA6IE1BSU5fSEFTX05PQVJHQworCU5lZWRlZCBpZiBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IGdldHRpbmcgYXJndW1lbnRzIHRvIG1haW4uCisKKwlWYWxpZCB2YWx1ZXMgOgorCTAgLSBhcmdjL2FyZ3YgdG8gbWFpbiBpcyBzdXBwb3J0ZWQKKwkxIC0gYXJnYy9hcmd2IHRvIG1haW4gaXMgbm90IHN1cHBvcnRlZAorCisJTm90ZSA6CisJVGhpcyBmbGFnIG9ubHkgbWF0dGVycyBpZiBNVUxUSVRIUkVBRCBoYXMgYmVlbiBkZWZpbmVkIHRvIGEgdmFsdWUgZ3JlYXRlciB0aGVuIDEuCisqLworI2lmbmRlZiBNQUlOX0hBU19OT0FSR0MKKyNkZWZpbmUgTUFJTl9IQVNfTk9BUkdDIDEKKyNlbmRpZgorCisvKiBDb25maWd1cmF0aW9uIDogTUFJTl9IQVNfTk9SRVRVUk4KKwlOZWVkZWQgaWYgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCByZXR1cm5pbmcgYSB2YWx1ZSBmcm9tIG1haW4uCisKKwlWYWxpZCB2YWx1ZXMgOgorCTAgLSBtYWluIHJldHVybnMgYW4gaW50LCBhbmQgcmV0dXJuIHZhbHVlIHdpbGwgYmUgMC4KKwkxIC0gcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCByZXR1cm5pbmcgYSB2YWx1ZSBmcm9tIG1haW4KKyovCisjaWZuZGVmIE1BSU5fSEFTX05PUkVUVVJOCisjZGVmaW5lIE1BSU5fSEFTX05PUkVUVVJOIDAKKyNlbmRpZgorCisvKiBWYXJpYWJsZSA6IGRlZmF1bHRfbnVtX2NvbnRleHRzCisJTm90IHVzZWQgZm9yIHRoaXMgc2ltcGxlIHBvcnQsIG11c3QgY2ludGFpbiB0aGUgdmFsdWUgMS4KKyovCitleHRlcm4gZWVfdTMyIGRlZmF1bHRfbnVtX2NvbnRleHRzOworCit0eXBlZGVmIHN0cnVjdCBDT1JFX1BPUlRBQkxFX1MgeworCWVlX3U4CXBvcnRhYmxlX2lkOworfSBjb3JlX3BvcnRhYmxlOworCisvKiB0YXJnZXQgc3BlY2lmaWMgaW5pdC9maW5pICovCit2b2lkIHBvcnRhYmxlX2luaXQoY29yZV9wb3J0YWJsZSAqcCwgaW50ICphcmdjLCBjaGFyICphcmd2W10pOwordm9pZCBwb3J0YWJsZV9maW5pKGNvcmVfcG9ydGFibGUgKnApOworCisjaWYgIWRlZmluZWQoUFJPRklMRV9SVU4pICYmICFkZWZpbmVkKFBFUkZPUk1BTkNFX1JVTikgJiYgIWRlZmluZWQoVkFMSURBVElPTl9SVU4pCisjaWYgKFRPVEFMX0RBVEFfU0laRT09MTIwMCkKKyNkZWZpbmUgUFJPRklMRV9SVU4gMQorI2VsaWYgKFRPVEFMX0RBVEFfU0laRT09MjAwMCkKKyNkZWZpbmUgUEVSRk9STUFOQ0VfUlVOIDEKKyNlbHNlCisjZGVmaW5lIFZBTElEQVRJT05fUlVOIDEKKyNlbmRpZgorI2VuZGlmCisKK3R5cGVkZWYgZWVfczE2IE1BVERBVDsKK3R5cGVkZWYgZWVfczMyIE1BVFJFUzsKKworCitlZV91MTYgY3JjdTgoZWVfdTggZGF0YSwgZWVfdTE2IGNyYyApIF9fYXR0cmlidXRlX18gKChob3QpKTsKK2VlX3UxNiBjcmN1MTYoZWVfdTE2IG5ld3ZhbCwgZWVfdTE2IGNyYykgX19hdHRyaWJ1dGVfXyAoKGhvdCkpOworZWVfdTE2IGNyY3UzMihlZV91MzIgbmV3dmFsLCBlZV91MTYgY3JjKSBfX2F0dHJpYnV0ZV9fICgoaG90KSk7CitlZV91MTYgY3JjMTYoZWVfczE2IG5ld3ZhbCwgZWVfdTE2IGNyYykgX19hdHRyaWJ1dGVfXyAoKGhvdCkpOworZWVfczE2IG1hdHJpeF9zdW0oZWVfdTMyIE4sIE1BVFJFUyAqQywgTUFUREFUIGNsaXB2YWwpIF9fYXR0cmlidXRlX18gKChob3QpKTsKK3ZvaWQgbWF0cml4X211bF9jb25zdChlZV91MzIgTiwgTUFUUkVTICpDLCBNQVREQVQgKkEsIE1BVERBVCB2YWwpIF9fYXR0cmlidXRlX18gKChob3QpKTsKK3ZvaWQgbWF0cml4X211bF92ZWN0KGVlX3UzMiBOLCBNQVRSRVMgKkMsIE1BVERBVCAqQSwgTUFUREFUICpCKSBfX2F0dHJpYnV0ZV9fICgoaG90KSk7Cit2b2lkIG1hdHJpeF9tdWxfbWF0cml4KGVlX3UzMiBOLCBNQVRSRVMgKkMsIE1BVERBVCAqQSwgTUFUREFUICpCKSBfX2F0dHJpYnV0ZV9fICgoaG90KSk7Cit2b2lkIG1hdHJpeF9tdWxfbWF0cml4X2JpdGV4dHJhY3QoZWVfdTMyIE4sIE1BVFJFUyAqQywgTUFUREFUICpBLCBNQVREQVQgKkIpIF9fYXR0cmlidXRlX18gKChob3QpKTsKK3ZvaWQgbWF0cml4X2FkZF9jb25zdChlZV91MzIgTiwgTUFUREFUICpBLCBNQVREQVQgdmFsKSBfX2F0dHJpYnV0ZV9fICgoaG90KSk7CisKKyNlbmRpZiAvKiBDT1JFX1BPUlRNRV9IICovCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9kaHJ5c3RvbmUyMS9NYWtlZmlsZSBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2RocnlzdG9uZTIxL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNTY0ODkKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9kaHJ5c3RvbmUyMS9NYWtlZmlsZQpAQCAtMCwwICsxLDE2IEBACitzcmNfZGlyIDo9ICQoZGlyICQobGFzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkpCisKK0FERF9GTEFHUyAgIDo9IC1mbHRvCitBRERfQ0ZMQUdTICA6PSAtRFNFTEZfVElNRUQ9MSAtRFRJTUU9MQorCitjX3NyYyA6PSBzY19wcmludC5jIGRocnlfMS5jIGRocnlfMi5jCisKK2luY2x1ZGUgJChpbmNfZGlyKS9jb21tb24ubWsKKworZGVmYXVsdDogbG9nX3JlcXVlc3RlZF90Z3QgJChibGRfZGlyKS9kaHJ5c3RvbmUyMS5lbGYgJChibGRfZGlyKS9kaHJ5c3RvbmUyMS5oZXggJChibGRfZGlyKS9kaHJ5c3RvbmUyMS5kdW1wCisKK2xvZ19yZXF1ZXN0ZWRfdGd0OgorCUBlY2hvIGRocnlzdG9uZTIxLmhleD4+ICQoYmxkX2RpcikvdGVzdF9pbmZvCisKK2NsZWFuOgorCSQoUk0pICQoY19vYmpzKSAkKGFzbV9vYmpzKSAkKGJsZF9kaXIpL2RocnlzdG9uZTIxLmVsZiAkKGJsZF9kaXIpL2RocnlzdG9uZTIxLmhleCAkKGJsZF9kaXIpL2RocnlzdG9uZTIxLmR1bXAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9kaHJ5c3RvbmUyMS9kaHJ5LmggYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9kaHJ5c3RvbmUyMS9kaHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JhMDA1OQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2RocnlzdG9uZTIxL2RocnkuaApAQCAtMCwwICsxLDQ0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgVGhlIEJZVEUgVU5JWCBCZW5jaG1hcmtzIC0gUmVsZWFzZSAzCisgKiAgICAgICAgICBNb2R1bGU6IGRocnkuaCAgIFNJRDogMy40IDUvMTUvOTEgMTk6MzA6MjEKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJ1ZyByZXBvcnRzLCBwYXRjaGVzLCBjb21tZW50cywgc3VnZ2VzdGlvbnMgc2hvdWxkIGJlIHNlbnQgdG86CisgKgorICoJQmVuIFNtaXRoLCBSaWNrIEdyZWhhbiBvciBUb20gWWFnZXIKKyAqCWJlbkBieXRlcGIuYnl0ZS5jb20gICByaWNrX2dAYnl0ZXBiLmJ5dGUuY29tICAgdHlhZ2VyQGJ5dGVwYi5ieXRlLmNvbQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIE1vZGlmaWNhdGlvbiBMb2c6CisgKiAgYWRkYXB0ZWQgZnJvbToKKyAqCisgKgorICogICAgICAgICAgICAgICAgICAgIkRIUllTVE9ORSIgQmVuY2htYXJrIFByb2dyYW0KKyAqICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogIFZlcnNpb246ICAgIEMsIFZlcnNpb24gMi4xCisgKgorICogIEZpbGU6ICAgICAgIGRocnkuaCAocGFydCAxIG9mIDMpCisgKgorICogIERhdGU6ICAgICAgIE1heSAyNSwgMTk4OAorICoKKyAqICBBdXRob3I6ICAgICBSZWluaG9sZCBQLiBXZWlja2VyCisgKiAgICAgICAgICAgICAgICAgICAgICBTaWVtZW5zIEFHLCBBVVQgRSA1MQorICogICAgICAgICAgICAgICAgICAgICAgUG9zdGZhY2ggMzIyMAorICogICAgICAgICAgICAgICAgICAgICAgODUyMCBFcmxhbmdlbgorICogICAgICAgICAgICAgICAgICAgICAgR2VybWFueSAoV2VzdCkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGhvbmU6ICBbKzQ5XS05MTMxLTctMjAzMzAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOC0xNyBDZW50cmFsIEV1cm9wZWFuIFRpbWUpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZW5ldDogLi4hbWN2YXghdW5pZG8hZXN0ZXZheCF3ZWlja2VyCisgKgorICogICAgICAgICAgICAgIE9yaWdpbmFsIFZlcnNpb24gKGluIEFkYSkgcHVibGlzaGVkIGluCisgKiAgICAgICAgICAgICAgIkNvbW11bmljYXRpb25zIG9mIHRoZSBBQ00iIHZvbC4gMjcuLCBuby4gMTAgKE9jdC4gMTk4NCksCisgKiAgICAgICAgICAgICAgcHAuIDEwMTMgLSAxMDMwLCB0b2dldGhlciB3aXRoIHRoZSBzdGF0aXN0aWNzCisgKiAgICAgICAgICAgICAgb24gd2hpY2ggdGhlIGRpc3RyaWJ1dGlvbiBvZiBzdGF0ZW1lbnRzIGV0Yy4gaXMgYmFzZWQuCisgKgorICogICAgICAgICAgICAgIEluIHRoaXMgQyB2ZXJzaW9uLCB0aGUgZm9sbG93aW5nIEMgbGlicmFyeSBmdW5jdGlvbnMgYXJlIHVzZWQ6CisgKiAgICAgICAgICAgICAgLSBzdHJjcHksIHN0cmNtcCAoaW5zaWRlIHRoZSBtZWFzdXJlbWVudCBsb29wKQorICogICAgICAgICAgICAgIC0gcHJpbnRmLCBzY2FuZiAob3V0c2lkZSB0aGUgbWVhc3VyZW1lbnQgbG9vcCkKKyAqICAgICAgICAgICAgICBJbiBhZGRpdGlvbiwgQmVya2VsZXkgVU5JWCBzeXN0ZW0gY2FsbHMgInRpbWVzICgpIiBvciAidGltZSAoKSIKKyAqICAgICAgICAgICAgICBhcmUgdXNlZCBmb3IgZXhlY3V0aW9uIHRpbWUgbWVhc3VyZW1lbnQuIEZvciBtZWFzdXJlbWVudHMKKyAqICAgICAgICAgICAgICBvbiBvdGhlciBzeXN0ZW1zLCB0aGVzZSBjYWxscyBoYXZlIHRvIGJlIGNoYW5nZWQuCisgKgorICogIENvbGxlY3Rpb24gb2YgUmVzdWx0czoKKyAqICAgICAgICAgICAgICBSZWluaG9sZCBXZWlja2VyIChhZGRyZXNzIHNlZSBhYm92ZSkgYW5kCisgKgorICogICAgICAgICAgICAgIFJpY2sgUmljaGFyZHNvbgorICogICAgICAgICAgICAgIFBDIFJlc2VhcmNoLiBJbmMuCisgKiAgICAgICAgICAgICAgOTQgQXBwbGUgT3JjaGFyZCBEcml2ZQorICogICAgICAgICAgICAgIFRpbnRvbiBGYWxscywgTkogMDc3MjQKKyAqICAgICAgICAgICAgICAgICAgICAgIFBob25lOiAgKDIwMSkgODM0LTEzNzggKDktMTcgRVNUKQorICogICAgICAgICAgICAgICAgICAgICAgVXNlbmV0OiAuLi4hc2Vpc21vIXV1bmV0IXBjcmF0IXJpY2sKKyAqCisgKiAgICAgIFBsZWFzZSBzZW5kIHJlc3VsdHMgdG8gUmljayBSaWNoYXJkc29uIGFuZC9vciBSZWluaG9sZCBXZWlja2VyLgorICogICAgICBDb21wbGV0ZSBpbmZvcm1hdGlvbiBzaG91bGQgYmUgZ2l2ZW4gb24gaGFyZHdhcmUgYW5kIHNvZnR3YXJlIHVzZWQuCisgKiAgICAgIEhhcmR3YXJlIGluZm9ybWF0aW9uIGluY2x1ZGVzOiBNYWNoaW5lIHR5cGUsIENQVSwgdHlwZSBhbmQgc2l6ZQorICogICAgICBvZiBjYWNoZXM7IGZvciBtaWNyb3Byb2Nlc3NvcnM6IGNsb2NrIGZyZXF1ZW5jeSwgbWVtb3J5IHNwZWVkCisgKiAgICAgIChudW1iZXIgb2Ygd2FpdCBzdGF0ZXMpLgorICogICAgICBTb2Z0d2FyZSBpbmZvcm1hdGlvbiBpbmNsdWRlczogQ29tcGlsZXIgKGFuZCBydW50aW1lIGxpYnJhcnkpCisgKiAgICAgIG1hbnVmYWN0dXJlciBhbmQgdmVyc2lvbiwgY29tcGlsYXRpb24gc3dpdGNoZXMsIE9TIHZlcnNpb24uCisgKiAgICAgIFRoZSBPcGVyYXRpbmcgU3lzdGVtIHZlcnNpb24gbWF5IGdpdmUgYW4gaW5kaWNhdGlvbiBhYm91dCB0aGUKKyAqICAgICAgY29tcGlsZXI7IERocnlzdG9uZSBpdHNlbGYgcGVyZm9ybXMgbm8gT1MgY2FsbHMgaW4gdGhlIG1lYXN1cmVtZW50IGxvb3AuCisgKgorICogICAgICBUaGUgY29tcGxldGUgb3V0cHV0IGdlbmVyYXRlZCBieSB0aGUgcHJvZ3JhbSBzaG91bGQgYmUgbWFpbGVkCisgKiAgICAgIHN1Y2ggdGhhdCBhdCBsZWFzdCBzb21lIGNoZWNrcyBmb3IgY29ycmVjdG5lc3MgY2FuIGJlIG1hZGUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBIaXN0b3J5OiAgICBUaGlzIHZlcnNpb24gQy8yLjEgaGFzIGJlZW4gbWFkZSBmb3IgdHdvIHJlYXNvbnM6CisgKgorICogICAgICAgICAgICAgIDEpIFRoZXJlIGlzIGFuIG9idmlvdXMgbmVlZCBmb3IgYSBjb21tb24gQyB2ZXJzaW9uIG9mCisgKiAgICAgICAgICAgICAgRGhyeXN0b25lLCBzaW5jZSBDIGlzIGF0IHByZXNlbnQgdGhlIG1vc3QgcG9wdWxhciBzeXN0ZW0KKyAqICAgICAgICAgICAgICBwcm9ncmFtbWluZyBsYW5ndWFnZSBmb3IgdGhlIGNsYXNzIG9mIHByb2Nlc3NvcnMKKyAqICAgICAgICAgICAgICAobWljcm9jb21wdXRlcnMsIG1pbmljb21wdXRlcnMpIHdoZXJlIERocnlzdG9uZSBpcyB1c2VkIG1vc3QuCisgKiAgICAgICAgICAgICAgVGhlcmUgc2hvdWxkIGJlLCBhcyBmYXIgYXMgcG9zc2libGUsIG9ubHkgb25lIEMgdmVyc2lvbiBvZgorICogICAgICAgICAgICAgIERocnlzdG9uZSBzdWNoIHRoYXQgcmVzdWx0cyBjYW4gYmUgY29tcGFyZWQgd2l0aG91dAorICogICAgICAgICAgICAgIHJlc3RyaWN0aW9ucy4gSW4gdGhlIHBhc3QsIHRoZSBDIHZlcnNpb25zIGRpc3RyaWJ1dGVkCisgKiAgICAgICAgICAgICAgYnkgUmljayBSaWNoYXJkc29uIChWZXJzaW9uIDEuMSkgYW5kIGJ5IFJlaW5ob2xkIFdlaWNrZXIKKyAqICAgICAgICAgICAgICBoYWQgc21hbGwgKHRob3VnaCBub3Qgc2lnbmlmaWNhbnQpIGRpZmZlcmVuY2VzLgorICoKKyAqICAgICAgICAgICAgICAyKSBBcyBmYXIgYXMgaXQgaXMgcG9zc2libGUgd2l0aG91dCBjaGFuZ2VzIHRvIHRoZSBEaHJ5c3RvbmUKKyAqICAgICAgICAgICAgICBzdGF0aXN0aWNzLCBvcHRpbWl6aW5nIGNvbXBpbGVycyBzaG91bGQgYmUgcHJldmVudGVkIGZyb20KKyAqICAgICAgICAgICAgICByZW1vdmluZyBzaWduaWZpY2FudCBzdGF0ZW1lbnRzLgorICoKKyAqICAgICAgICAgICAgICBUaGlzIEMgdmVyc2lvbiBoYXMgYmVlbiBkZXZlbG9wZWQgaW4gY29vcGVyYXRpb24gd2l0aAorICogICAgICAgICAgICAgIFJpY2sgUmljaGFyZHNvbiAoVGludG9uIEZhbGxzLCBOSiksIGl0IGluY29ycG9yYXRlcyBtYW55CisgKiAgICAgICAgICAgICAgaWRlYXMgZnJvbSB0aGUgIlZlcnNpb24gMS4xIiBkaXN0cmlidXRlZCBwcmV2aW91c2x5IGJ5CisgKiAgICAgICAgICAgICAgaGltIG92ZXIgdGhlIFVOSVggbmV0d29yayBVc2VuZXQuCisgKiAgICAgICAgICAgICAgSSBhbHNvIHRoYW5rIENoYWltIEJlbmVkZWxhYyAoTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciksCisgKiAgICAgICAgICAgICAgRGF2aWQgRGl0emVsIChTVU4pLCBFYXJsIEtpbGxpYW4gYW5kIEpvaG4gTWFzaGV5IChNSVBTKSwKKyAqICAgICAgICAgICAgICBBbGFuIFNtaXRoIGFuZCBSYWZhZWwgU2FhdmVkcmEtQmFycmVyYSAoVUMgYXQgQmVya2VsZXkpCisgKiAgICAgICAgICAgICAgZm9yIHRoZWlyIGhlbHAgd2l0aCBjb21tZW50cyBvbiBlYXJsaWVyIHZlcnNpb25zIG9mIHRoZQorICogICAgICAgICAgICAgIGJlbmNobWFyay4KKyAqCisgKiAgQ2hhbmdlczogICAgSW4gdGhlIGluaXRpYWxpemF0aW9uIHBhcnQsIHRoaXMgdmVyc2lvbiBmb2xsb3dzIG1vc3RseQorICogICAgICAgICAgICAgIFJpY2sgUmljaGFyZHNvbidzIHZlcnNpb24gZGlzdHJpYnV0ZWQgdmlhIFVzZW5ldCwgbm90IHRoZQorICogICAgICAgICAgICAgIHZlcnNpb24gZGlzdHJpYnV0ZWQgZWFybGllciB2aWEgZmxvcHB5IGRpc2sgYnkgUmVpbmhvbGQgV2VpY2tlci4KKyAqICAgICAgICAgICAgICBBcyBhIGNvbmNlc3Npb24gdG8gb2xkZXIgY29tcGlsZXJzLCBuYW1lcyBoYXZlIGJlZW4gbWFkZQorICogICAgICAgICAgICAgIHVuaXF1ZSB3aXRoaW4gdGhlIGZpcnN0IDggY2hhcmFjdGVycy4KKyAqICAgICAgICAgICAgICBJbnNpZGUgdGhlIG1lYXN1cmVtZW50IGxvb3AsIHRoaXMgdmVyc2lvbiBmb2xsb3dzIHRoZQorICogICAgICAgICAgICAgIHZlcnNpb24gcHJldmlvdXNseSBkaXN0cmlidXRlZCBieSBSZWluaG9sZCBXZWlja2VyLgorICoKKyAqICAgICAgICAgICAgICBBdCBzZXZlcmFsIHBsYWNlcyBpbiB0aGUgYmVuY2htYXJrLCBjb2RlIGhhcyBiZWVuIGFkZGVkLAorICogICAgICAgICAgICAgIGJ1dCB3aXRoaW4gdGhlIG1lYXN1cmVtZW50IGxvb3Agb25seSBpbiBicmFuY2hlcyB0aGF0CisgKiAgICAgICAgICAgICAgYXJlIG5vdCBleGVjdXRlZC4gVGhlIGludGVudGlvbiBpcyB0aGF0IG9wdGltaXppbmcgY29tcGlsZXJzCisgKiAgICAgICAgICAgICAgc2hvdWxkIGJlIHByZXZlbnRlZCBmcm9tIG1vdmluZyBjb2RlIG91dCBvZiB0aGUgbWVhc3VyZW1lbnQKKyAqICAgICAgICAgICAgICBsb29wLCBvciBmcm9tIHJlbW92aW5nIGNvZGUgYWx0b2dldGhlci4gU2luY2UgdGhlIHN0YXRlbWVudHMKKyAqICAgICAgICAgICAgICB0aGF0IGFyZSBleGVjdXRlZCB3aXRoaW4gdGhlIG1lYXN1cmVtZW50IGxvb3AgaGF2ZSBOT1QgYmVlbgorICogICAgICAgICAgICAgIGNoYW5nZWQsIHRoZSBudW1iZXJzIGRlZmluaW5nIHRoZSAiRGhyeXN0b25lIGRpc3RyaWJ1dGlvbiIKKyAqICAgICAgICAgICAgICAoZGlzdHJpYnV0aW9uIG9mIHN0YXRlbWVudHMsIG9wZXJhbmQgdHlwZXMgYW5kIGxvY2FsaXR5KQorICogICAgICAgICAgICAgIHN0aWxsIGhvbGQuIEV4Y2VwdCBmb3Igc29waGlzdGljYXRlZCBvcHRpbWl6aW5nIGNvbXBpbGVycywKKyAqICAgICAgICAgICAgICBleGVjdXRpb24gdGltZXMgZm9yIHRoaXMgdmVyc2lvbiBzaG91bGQgYmUgdGhlIHNhbWUgYXMKKyAqICAgICAgICAgICAgICBmb3IgcHJldmlvdXMgdmVyc2lvbnMuCisgKgorICogICAgICAgICAgICAgIFNpbmNlIGl0IGhhcyBwcm92ZW4gZGlmZmljdWx0IHRvIHN1YnRyYWN0IHRoZSB0aW1lIGZvciB0aGUKKyAqICAgICAgICAgICAgICBtZWFzdXJlbWVudCBsb29wIG92ZXJoZWFkIGluIGEgY29ycmVjdCB3YXksIHRoZSBsb29wIGNoZWNrCisgKiAgICAgICAgICAgICAgaGFzIGJlZW4gbWFkZSBhIHBhcnQgb2YgdGhlIGJlbmNobWFyay4gVGhpcyBkb2VzIGhhdmUKKyAqICAgICAgICAgICAgICBhbiBpbXBhY3QgLSB0aG91Z2ggYSB2ZXJ5IG1pbm9yIG9uZSAtIG9uIHRoZSBkaXN0cmlidXRpb24KKyAqICAgICAgICAgICAgICBzdGF0aXN0aWNzIHdoaWNoIGhhdmUgYmVlbiB1cGRhdGVkIGZvciB0aGlzIHZlcnNpb24uCisgKgorICogICAgICAgICAgICAgIEFsbCBjaGFuZ2VzIHdpdGhpbiB0aGUgbWVhc3VyZW1lbnQgbG9vcCBhcmUgZGVzY3JpYmVkCisgKiAgICAgICAgICAgICAgYW5kIGRpc2N1c3NlZCBpbiB0aGUgY29tcGFuaW9uIHBhcGVyICJSYXRpb25hbGUgZm9yCisgKiAgICAgICAgICAgICAgRGhyeXN0b25lIHZlcnNpb24gMiIuCisgKgorICogICAgICAgICAgICAgIEJlY2F1c2Ugb2YgdGhlIHNlbGYtaW1wb3NlZCBsaW1pdGF0aW9uIHRoYXQgdGhlIG9yZGVyIGFuZAorICogICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbiBvZiB0aGUgZXhlY3V0ZWQgc3RhdGVtZW50cyBzaG91bGQgbm90IGJlCisgKiAgICAgICAgICAgICAgY2hhbmdlZCwgdGhlcmUgYXJlIHN0aWxsIGNhc2VzIHdoZXJlIG9wdGltaXppbmcgY29tcGlsZXJzCisgKiAgICAgICAgICAgICAgbWF5IG5vdCBnZW5lcmF0ZSBjb2RlIGZvciBzb21lIHN0YXRlbWVudHMuIFRvIGEgY2VydGFpbgorICogICAgICAgICAgICAgIGRlZ3JlZSwgdGhpcyBpcyB1bmF2b2lkYWJsZSBmb3Igc21hbGwgc3ludGhldGljIGJlbmNobWFya3MuCisgKiAgICAgICAgICAgICAgVXNlcnMgb2YgdGhlIGJlbmNobWFyayBhcmUgYWR2aXNlZCB0byBjaGVjayBjb2RlIGxpc3RpbmdzCisgKiAgICAgICAgICAgICAgd2hldGhlciBjb2RlIGlzIGdlbmVyYXRlZCBmb3IgYWxsIHN0YXRlbWVudHMgb2YgRGhyeXN0b25lLgorICoKKyAqICAgICAgICAgICAgICBWZXJzaW9uIDIuMSBpcyBpZGVudGljYWwgdG8gdmVyc2lvbiAyLjAgZGlzdHJpYnV0ZWQgdmlhCisgKiAgICAgICAgICAgICAgdGhlIFVOSVggbmV0d29yayBVc2VuZXQgaW4gTWFyY2ggMTk4OCBleGNlcHQgdGhhdCBpdCBjb3JyZWN0cworICogICAgICAgICAgICAgIHNvbWUgbWlub3IgZGVmaWNpZW5jaWVzIHRoYXQgd2VyZSBmb3VuZCBieSB1c2VycyBvZiB2ZXJzaW9uIDIuMC4KKyAqICAgICAgICAgICAgICBUaGUgb25seSBjaGFuZ2Ugd2l0aGluIHRoZSBtZWFzdXJlbWVudCBsb29wIGlzIHRoYXQgYQorICogICAgICAgICAgICAgIG5vbi1leGVjdXRlZCAiZWxzZSIgcGFydCB3YXMgYWRkZWQgdG8gdGhlICJpZiIgc3RhdGVtZW50IGluCisgKiAgICAgICAgICAgICAgRnVuY18zLCBhbmQgYSBub24tZXhlY3V0ZWQgImVsc2UiIHBhcnQgcmVtb3ZlZCBmcm9tIFByb2NfMy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRGVmaW5lczogICAgIFRoZSBmb2xsb3dpbmcgIkRlZmluZXMiIGFyZSBwb3NzaWJsZToKKyAqICAgICAgICAgICAgICAtRFJFRz1yZWdpc3RlciAgICAgICAgICAoZGVmYXVsdDogTm90IGRlZmluZWQpCisgKiAgICAgICAgICAgICAgICAgICAgICBBcyBhbiBhcHByb3hpbWF0aW9uIHRvIHdoYXQgYW4gYXZlcmFnZSBDIHByb2dyYW1tZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIG1pZ2h0IGRvLCB0aGUgInJlZ2lzdGVyIiBzdG9yYWdlIGNsYXNzIGlzIGFwcGxpZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIChpZiBlbmFibGVkIGJ5IC1EUkVHPXJlZ2lzdGVyKQorICogICAgICAgICAgICAgICAgICAgICAgLSBmb3IgbG9jYWwgdmFyaWFibGVzLCBpZiB0aGV5IGFyZSB1c2VkIChkeW5hbWljYWxseSkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgZml2ZSBvciBtb3JlIHRpbWVzCisgKiAgICAgICAgICAgICAgICAgICAgICAtIGZvciBwYXJhbWV0ZXJzIGlmIHRoZXkgYXJlIHVzZWQgKGR5bmFtaWNhbGx5KQorICogICAgICAgICAgICAgICAgICAgICAgICBzaXggb3IgbW9yZSB0aW1lcworICogICAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IGFuIG9wdGltYWwgInJlZ2lzdGVyIiBzdHJhdGVneSBpcworICogICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXItZGVwZW5kZW50LCBhbmQgdGhhdCAicmVnaXN0ZXIiIGRlY2xhcmF0aW9ucworICogICAgICAgICAgICAgICAgICAgICAgZG8gbm90IG5lY2Vzc2FyaWx5IGxlYWQgdG8gZmFzdGVyIGV4ZWN1dGlvbi4KKyAqICAgICAgICAgICAgICAtRE5PU1RSVUNUQVNTSUdOICAgICAgICAoZGVmYXVsdDogTm90IGRlZmluZWQpCisgKiAgICAgICAgICAgICAgICAgICAgICBEZWZpbmUgaWYgdGhlIEMgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydAorICogICAgICAgICAgICAgICAgICAgICAgYXNzaWdubWVudCBvZiBzdHJ1Y3R1cmVzLgorICogICAgICAgICAgICAgIC1ETk9FTlVNUyAgICAgICAgICAgICAgIChkZWZhdWx0OiBOb3QgZGVmaW5lZCkKKyAqICAgICAgICAgICAgICAgICAgICAgIERlZmluZSBpZiB0aGUgQyBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0CisgKiAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhdGlvbiB0eXBlcy4KKyAqICAgICAgICAgICAgICAtRFRJTUVTICAgICAgICAgICAgICAgICAoZGVmYXVsdCkKKyAqICAgICAgICAgICAgICAtRFRJTUUKKyAqICAgICAgICAgICAgICAgICAgICAgIFRoZSAidGltZXMiIGZ1bmN0aW9uIG9mIFVOSVggKHJldHVybmluZyBwcm9jZXNzIHRpbWVzKQorICogICAgICAgICAgICAgICAgICAgICAgb3IgdGhlICJ0aW1lIiBmdW5jdGlvbiAocmV0dXJuaW5nIHdhbGxjbG9jayB0aW1lKQorICogICAgICAgICAgICAgICAgICAgICAgaXMgdXNlZCBmb3IgbWVhc3VyZW1lbnQuCisgKiAgICAgICAgICAgICAgICAgICAgICBGb3Igc2luZ2xlIHVzZXIgbWFjaGluZXMsICJ0aW1lICgpIiBpcyBhZGVxdWF0ZS4gRm9yCisgKiAgICAgICAgICAgICAgICAgICAgICBtdWx0aS11c2VyIG1hY2hpbmVzIHdoZXJlIHlvdSBjYW5ub3QgZ2V0IHNpbmdsZS11c2VyCisgKiAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3MsIHVzZSB0aGUgInRpbWVzICgpIiBmdW5jdGlvbi4gSWYgeW91IGhhdmUKKyAqICAgICAgICAgICAgICAgICAgICAgIG5laXRoZXIsIHVzZSBhIHN0b3B3YXRjaCBpbiB0aGUgZGVhZCBvZiBuaWdodC4KKyAqICAgICAgICAgICAgICAgICAgICAgICJwcmludGYicyBhcmUgcHJvdmlkZWQgbWFya2luZyB0aGUgcG9pbnRzICJTdGFydCBUaW1lciIKKyAqICAgICAgICAgICAgICAgICAgICAgIGFuZCAiU3RvcCBUaW1lciIuIERPIE5PVCB1c2UgdGhlIFVOSVggInRpbWUoMSkiCisgKiAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLCBhcyB0aGlzIHdpbGwgbWVhc3VyZSB0aGUgdG90YWwgdGltZSB0bworICogICAgICAgICAgICAgICAgICAgICAgcnVuIHRoaXMgcHJvZ3JhbSwgd2hpY2ggd2lsbCAoZXJyb25lb3VzbHkpIGluY2x1ZGUKKyAqICAgICAgICAgICAgICAgICAgICAgIHRoZSB0aW1lIHRvIGFsbG9jYXRlIHN0b3JhZ2UgKG1hbGxvYykgYW5kIHRvIHBlcmZvcm0KKyAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbml0aWFsaXphdGlvbi4KKyAqICAgICAgICAgICAgICAtREhaPW5ubgorICogICAgICAgICAgICAgICAgICAgICAgSW4gQmVya2VsZXkgVU5JWCwgdGhlIGZ1bmN0aW9uICJ0aW1lcyIgcmV0dXJucyBwcm9jZXNzCisgKiAgICAgICAgICAgICAgICAgICAgICB0aW1lIGluIDEvSFogc2Vjb25kcywgd2l0aCBIWiA9IDYwIGZvciBtb3N0IHN5c3RlbXMuCisgKiAgICAgICAgICAgICAgICAgICAgICBDSEVDSyBZT1VSIFNZU1RFTSBERVNDUklQVElPTiBCRUZPUkUgWU9VIEpVU1QgQVBQTFkKKyAqICAgICAgICAgICAgICAgICAgICAgIEEgVkFMVUUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBDb21waWxhdGlvbiBtb2RlbCBhbmQgbWVhc3VyZW1lbnQgKElNUE9SVEFOVCk6CisgKgorICogIFRoaXMgQyB2ZXJzaW9uIG9mIERocnlzdG9uZSBjb25zaXN0cyBvZiB0aHJlZSBmaWxlczoKKyAqICAtIGRocnkuaCAodGhpcyBmaWxlLCBjb250YWluaW5nIGdsb2JhbCBkZWZpbml0aW9ucyBhbmQgY29tbWVudHMpCisgKiAgLSBkaHJ5XzEuYyAoY29udGFpbmluZyB0aGUgY29kZSBjb3JyZXNwb25kaW5nIHRvIEFkYSBwYWNrYWdlIFBhY2tfMSkKKyAqICAtIGRocnlfMi5jIChjb250YWluaW5nIHRoZSBjb2RlIGNvcnJlc3BvbmRpbmcgdG8gQWRhIHBhY2thZ2UgUGFja18yKQorICoKKyAqICBUaGUgZm9sbG93aW5nICJncm91bmQgcnVsZXMiIGFwcGx5IGZvciBtZWFzdXJlbWVudHM6CisgKiAgLSBTZXBhcmF0ZSBjb21waWxhdGlvbgorICogIC0gTm8gcHJvY2VkdXJlIG1lcmdpbmcKKyAqICAtIE90aGVyd2lzZSwgY29tcGlsZXIgb3B0aW1pemF0aW9ucyBhcmUgYWxsb3dlZCBidXQgc2hvdWxkIGJlIGluZGljYXRlZAorICogIC0gRGVmYXVsdCByZXN1bHRzIGFyZSB0aG9zZSB3aXRob3V0IHJlZ2lzdGVyIGRlY2xhcmF0aW9ucworICogIFNlZSB0aGUgY29tcGFuaW9uIHBhcGVyICJSYXRpb25hbGUgZm9yIERocnlzdG9uZSBWZXJzaW9uIDIiIGZvciBhIG1vcmUKKyAqICBkZXRhaWxlZCBkaXNjdXNzaW9uIG9mIHRoZXNlIGdyb3VuZCBydWxlcy4KKyAqCisgKiAgRm9yIDE2LUJpdCBwcm9jZXNzb3JzIChlLmcuIDgwMTg2LCA4MDI4NiksIHRpbWVzIGZvciBhbGwgY29tcGlsYXRpb24KKyAqICBtb2RlbHMgKCJzbWFsbCIsICJtZWRpdW0iLCAibGFyZ2UiIGV0Yy4pIHNob3VsZCBiZSBnaXZlbiBpZiBwb3NzaWJsZSwKKyAqICB0b2dldGhlciB3aXRoIGEgZGVmaW5pdGlvbiBvZiB0aGVzZSBtb2RlbHMgZm9yIHRoZSBjb21waWxlciBzeXN0ZW0gdXNlZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgRGhyeXN0b25lIChDIHZlcnNpb24pIHN0YXRpc3RpY3M6CisgKgorICogIFtDb21tZW50IGZyb20gdGhlIGZpcnN0IGRpc3RyaWJ1dGlvbiwgdXBkYXRlZCBmb3IgdmVyc2lvbiAyLgorICogICBOb3RlIHRoYXQgYmVjYXVzZSBvZiBsYW5ndWFnZSBkaWZmZXJlbmNlcywgdGhlIG51bWJlcnMgYXJlIHNsaWdodGx5CisgKiAgIGRpZmZlcmVudCBmcm9tIHRoZSBBZGEgdmVyc2lvbi5dCisgKgorICogIFRoZSBmb2xsb3dpbmcgcHJvZ3JhbSBjb250YWlucyBzdGF0ZW1lbnRzIG9mIGEgaGlnaCBsZXZlbCBwcm9ncmFtbWluZworICogIGxhbmd1YWdlIChoZXJlOiBDKSBpbiBhIGRpc3RyaWJ1dGlvbiBjb25zaWRlcmVkIHJlcHJlc2VudGF0aXZlOgorICoKKyAqICAgIGFzc2lnbm1lbnRzICAgICAgICAgICAgICAgICAgNTIgKDUxLjAgJSkKKyAqICAgIGNvbnRyb2wgc3RhdGVtZW50cyAgICAgICAgICAgMzMgKDMyLjQgJSkKKyAqICAgIHByb2NlZHVyZSwgZnVuY3Rpb24gY2FsbHMgICAgMTcgKDE2LjcgJSkKKyAqCisgKiAgMTAzIHN0YXRlbWVudHMgYXJlIGR5bmFtaWNhbGx5IGV4ZWN1dGVkLiBUaGUgcHJvZ3JhbSBpcyBiYWxhbmNlZCB3aXRoCisgKiAgcmVzcGVjdCB0byB0aGUgdGhyZWUgYXNwZWN0czoKKyAqCisgKiAgICAtIHN0YXRlbWVudCB0eXBlCisgKiAgICAtIG9wZXJhbmQgdHlwZQorICogICAgLSBvcGVyYW5kIGxvY2FsaXR5CisgKiAgICAgICAgIG9wZXJhbmQgZ2xvYmFsLCBsb2NhbCwgcGFyYW1ldGVyLCBvciBjb25zdGFudC4KKyAqCisgKiAgVGhlIGNvbWJpbmF0aW9uIG9mIHRoZXNlIHRocmVlIGFzcGVjdHMgaXMgYmFsYW5jZWQgb25seSBhcHByb3hpbWF0ZWx5LgorICoKKyAqICAxLiBTdGF0ZW1lbnQgVHlwZToKKyAqICAtLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICBudW1iZXIKKyAqCisgKiAgICAgVjEgPSBWMiAgICAgICAgICAgICAgICAgICAgIDkKKyAqICAgICAgIChpbmNsLiBWMSA9IEYoLi4pCisgKiAgICAgViA9IENvbnN0YW50ICAgICAgICAgICAgICAgMTIKKyAqICAgICBBc3NpZ25tZW50LCAgICAgICAgICAgICAgICAgNworICogICAgICAgd2l0aCBhcnJheSBlbGVtZW50CisgKiAgICAgQXNzaWdubWVudCwgICAgICAgICAgICAgICAgIDYKKyAqICAgICAgIHdpdGggcmVjb3JkIGNvbXBvbmVudAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzQgICAgICAgMzQKKyAqCisgKiAgICAgWCA9IFkgK3wtfCImJiJ8InwiIFogICAgICAgIDUKKyAqICAgICBYID0gWSArfC18Ij09IiBDb25zdGFudCAgICAgNgorICogICAgIFggPSBYICt8LSAxICAgICAgICAgICAgICAgICAzCisgKiAgICAgWCA9IFkgKnwvIFogICAgICAgICAgICAgICAgIDIKKyAqICAgICBYID0gRXhwcmVzc2lvbiwgICAgICAgICAgICAgMQorICogICAgICAgICAgIHR3byBvcGVyYXRvcnMKKyAqICAgICBYID0gRXhwcmVzc2lvbiwgICAgICAgICAgICAgMQorICogICAgICAgICAgIHRocmVlIG9wZXJhdG9ycworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTggICAgICAgMTgKKyAqCisgKiAgICAgaWYgLi4uLiAgICAgICAgICAgICAgICAgICAgMTQKKyAqICAgICAgIHdpdGggImVsc2UiICAgICAgNworICogICAgICAgd2l0aG91dCAiZWxzZSIgICA3CisgKiAgICAgICAgICAgZXhlY3V0ZWQgICAgICAgIDMKKyAqICAgICAgICAgICBub3QgZXhlY3V0ZWQgICAgNAorICogICAgIGZvciAuLi4gICAgICAgICAgICAgICAgICAgICA3ICB8ICBjb3VudGVkIGV2ZXJ5IHRpbWUKKyAqICAgICB3aGlsZSAuLi4gICAgICAgICAgICAgICAgICAgNCAgfCAgdGhlIGxvb3AgY29uZGl0aW9uCisgKiAgICAgZG8gLi4uIHdoaWxlICAgICAgICAgICAgICAgIDEgIHwgIGlzIGV2YWx1YXRlZAorICogICAgIHN3aXRjaCAuLi4gICAgICAgICAgICAgICAgICAxCisgKiAgICAgYnJlYWsgICAgICAgICAgICAgICAgICAgICAgIDEKKyAqICAgICBkZWNsYXJhdGlvbiB3aXRoICAgICAgICAgICAgMQorICogICAgICAgaW5pdGlhbGl6YXRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM0ICAgICAgIDM0CisgKgorICogICAgIFAgKC4uLikgIHByb2NlZHVyZSBjYWxsICAgIDExCisgKiAgICAgICB1c2VyIHByb2NlZHVyZSAgICAgIDEwCisgKiAgICAgICBsaWJyYXJ5IHByb2NlZHVyZSAgICAxCisgKiAgICAgWCA9IEYgKC4uLikKKyAqICAgICAgICAgICAgIGZ1bmN0aW9uICBjYWxsICAgICAgNgorICogICAgICAgdXNlciBmdW5jdGlvbiAgICAgICAgNQorICogICAgICAgbGlicmFyeSBmdW5jdGlvbiAgICAgMQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcgICAgICAgMTcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAzCisgKgorICogICAgVGhlIGF2ZXJhZ2UgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaW4gcHJvY2VkdXJlIG9yIGZ1bmN0aW9uIGNhbGxzCisgKiAgICBpcyAxLjgyIChub3QgY291bnRpbmcgdGhlIGZ1bmN0aW9uIHZhbHVlcyBhcyBpbXBsaWNpdCBwYXJhbWV0ZXJzKS4KKyAqCisgKgorICogIDIuIE9wZXJhdG9ycworICogIC0tLS0tLS0tLS0tLQorICogICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciAgICBhcHByb3hpbWF0ZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlCisgKgorICogICAgQXJpdGhtZXRpYyAgICAgICAgICAgICAzMiAgICAgICAgICA1MC44CisgKgorICogICAgICAgKyAgICAgICAgICAgICAgICAgICAgIDIxICAgICAgICAgIDMzLjMKKyAqICAgICAgIC0gICAgICAgICAgICAgICAgICAgICAgNyAgICAgICAgICAxMS4xCisgKiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgIDMgICAgICAgICAgIDQuOAorICogICAgICAgLyAoaW50IGRpdikgICAgICAgICAgICAxICAgICAgICAgICAxLjYKKyAqCisgKiAgICBDb21wYXJpc29uICAgICAgICAgICAgIDI3ICAgICAgICAgICA0Mi44CisgKgorICogICAgICAgPT0gICAgICAgICAgICAgICAgICAgICA5ICAgICAgICAgICAxNC4zCisgKiAgICAgICAvPSAgICAgICAgICAgICAgICAgICAgIDQgICAgICAgICAgICA2LjMKKyAqICAgICAgID4gICAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgIDEuNgorICogICAgICAgPCAgICAgICAgICAgICAgICAgICAgICAzICAgICAgICAgICAgNC44CisgKiAgICAgICA+PSAgICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAxLjYKKyAqICAgICAgIDw9ICAgICAgICAgICAgICAgICAgICAgOSAgICAgICAgICAgMTQuMworICoKKyAqICAgIExvZ2ljICAgICAgICAgICAgICAgICAgIDQgICAgICAgICAgICA2LjMKKyAqCisgKiAgICAgICAmJiAoQU5ELVRIRU4pICAgICAgICAgIDEgICAgICAgICAgICAxLjYKKyAqICAgICAgIHwgIChPUikgICAgICAgICAgICAgICAgMSAgICAgICAgICAgIDEuNgorICogICAgICAgISAgKE5PVCkgICAgICAgICAgICAgICAyICAgICAgICAgICAgMy4yCisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgICAgICAgICAtLS0tLQorICogICAgICAgICAgICAgICAgICAgICAgICAgICA2MyAgICAgICAgICAxMDAuMQorICoKKyAqCisgKiAgMy4gT3BlcmFuZCBUeXBlIChjb3VudGVkIG9uY2UgcGVyIG9wZXJhbmQgcmVmZXJlbmNlKToKKyAqICAtLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgICAgYXBwcm94aW1hdGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZQorICoKKyAqICAgICBJbnRlZ2VyICAgICAgICAgICAgICAgMTc1ICAgICAgICA3Mi4zICUKKyAqICAgICBDaGFyYWN0ZXIgICAgICAgICAgICAgIDQ1ICAgICAgICAxOC42ICUKKyAqICAgICBQb2ludGVyICAgICAgICAgICAgICAgIDEyICAgICAgICAgNS4wICUKKyAqICAgICBTdHJpbmczMCAgICAgICAgICAgICAgICA2ICAgICAgICAgMi41ICUKKyAqICAgICBBcnJheSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgMC44ICUKKyAqICAgICBSZWNvcmQgICAgICAgICAgICAgICAgICAyICAgICAgICAgMC44ICUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tICAgICAgIC0tLS0tLS0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQyICAgICAgIDEwMC4wICUKKyAqCisgKiAgV2hlbiB0aGVyZSBpcyBhbiBhY2Nlc3MgcGF0aCBsZWFkaW5nIHRvIHRoZSBmaW5hbCBvcGVyYW5kIChlLmcuIGEgcmVjb3JkCisgKiAgY29tcG9uZW50KSwgb25seSB0aGUgZmluYWwgZGF0YSB0eXBlIG9uIHRoZSBhY2Nlc3MgcGF0aCBpcyBjb3VudGVkLgorICoKKyAqCisgKiAgNC4gT3BlcmFuZCBMb2NhbGl0eToKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyICAgIGFwcHJveGltYXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmNlbnRhZ2UKKyAqCisgKiAgICAgbG9jYWwgdmFyaWFibGUgICAgICAgICAgICAgIDExNCAgICAgICAgNDcuMSAlCisgKiAgICAgZ2xvYmFsIHZhcmlhYmxlICAgICAgICAgICAgICAyMiAgICAgICAgIDkuMSAlCisgKiAgICAgcGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICA0NSAgICAgICAgMTguNiAlCisgKiAgICAgICAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAyMyAgICAgICAgIDkuNSAlCisgKiAgICAgICAgcmVmZXJlbmNlICAgICAgICAgICAgICAgICAgICAyMiAgICAgICAgIDkuMSAlCisgKiAgICAgZnVuY3Rpb24gcmVzdWx0ICAgICAgICAgICAgICAgNiAgICAgICAgIDIuNSAlCisgKiAgICAgY29uc3RhbnQgICAgICAgICAgICAgICAgICAgICA1NSAgICAgICAgMjIuNyAlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLSAgICAgICAtLS0tLS0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0MiAgICAgICAxMDAuMCAlCisgKgorICoKKyAqICBUaGUgcHJvZ3JhbSBkb2VzIG5vdCBjb21wdXRlIGFueXRoaW5nIG1lYW5pbmdmdWwsIGJ1dCBpdCBpcyBzeW50YWN0aWNhbGx5CisgKiAgYW5kIHNlbWFudGljYWxseSBjb3JyZWN0LiBBbGwgdmFyaWFibGVzIGhhdmUgYSB2YWx1ZSBhc3NpZ25lZCB0byB0aGVtCisgKiAgYmVmb3JlIHRoZXkgYXJlIHVzZWQgYXMgYSBzb3VyY2Ugb3BlcmFuZC4KKyAqCisgKiAgVGhlcmUgaGFzIGJlZW4gbm8gZXhwbGljaXQgZWZmb3J0IHRvIGFjY291bnQgZm9yIHRoZSBlZmZlY3RzIG9mIGEKKyAqICBjYWNoZSwgb3IgdG8gYmFsYW5jZSB0aGUgdXNlIG9mIGxvbmcgb3Igc2hvcnQgZGlzcGxhY2VtZW50cyBmb3IgY29kZSBvcgorICogIGRhdGEuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKworLyogQ29tcGlsZXIgYW5kIHN5c3RlbSBkZXBlbmRlbnQgZGVmaW5pdGlvbnM6ICovCisKKyNpZm5kZWYgVElNRQorI2RlZmluZSBUSU1FUworI2VuZGlmCisgICAgICAgICAgICAgICAgLyogVXNlIHRpbWVzKDIpIHRpbWUgZnVuY3Rpb24gdW5sZXNzICAgICovCisgICAgICAgICAgICAgICAgLyogZXhwbGljaXRseSBkZWZpbmVkIG90aGVyd2lzZSAgICAgICAgICovCisKKyNpZmRlZiBUSU1FUworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy90aW1lcy5oPgorICAgICAgICAgICAgICAgIC8qIGZvciAidGltZXMiICovCisjZW5kaWYKKworI2RlZmluZSBNaWNfc2Vjc19QZXJfU2Vjb25kICAgICAxMDAwMDAwCisgICAgICAgICAgICAgICAgLyogQmVya2VsZXkgVU5JWCBDIHJldHVybnMgcHJvY2VzcyB0aW1lcyBpbiBzZWNvbmRzL0haICovCisKKyNpZmRlZiAgTk9TVFJVQ1RBU1NJR04KKyNkZWZpbmUgc3RydWN0YXNzaWduKGQsIHMpICAgICAgbWVtY3B5KCYoZCksICYocyksIHNpemVvZihkKSkKKyNlbHNlCisjZGVmaW5lIHN0cnVjdGFzc2lnbihkLCBzKSAgICAgIGQgPSBzCisjZW5kaWYKKworI2lmZGVmICBOT0VOVU0KKyNkZWZpbmUgSWRlbnRfMSAwCisjZGVmaW5lIElkZW50XzIgMQorI2RlZmluZSBJZGVudF8zIDIKKyNkZWZpbmUgSWRlbnRfNCAzCisjZGVmaW5lIElkZW50XzUgNAorICB0eXBlZGVmIGludCAgIEVudW1lcmF0aW9uOworI2Vsc2UKKyAgdHlwZWRlZiAgICAgICBlbnVtICAgIHtJZGVudF8xLCBJZGVudF8yLCBJZGVudF8zLCBJZGVudF80LCBJZGVudF81fQorICAgICAgICAgICAgICAgIEVudW1lcmF0aW9uOworI2VuZGlmCisgICAgICAgIC8qIGZvciBib29sZWFuIGFuZCBlbnVtZXJhdGlvbiB0eXBlcyBpbiBBZGEsIFBhc2NhbCAqLworCisvKiBHZW5lcmFsIGRlZmluaXRpb25zOiAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAgICAgICAgICAgICAgICAvKiBmb3Igc3RyY3B5LCBzdHJjbXAgKi8KKworI2RlZmluZSBOdWxsIDAKKyAgICAgICAgICAgICAgICAvKiBWYWx1ZSBvZiBhIE51bGwgcG9pbnRlciAqLworI2RlZmluZSB0cnVlICAxCisjZGVmaW5lIGZhbHNlIDAKKwordHlwZWRlZiBpbnQgICAgIE9uZV9UaGlydHk7Cit0eXBlZGVmIGludCAgICAgT25lX0ZpZnR5OwordHlwZWRlZiBjaGFyICAgIENhcGl0YWxfTGV0dGVyOwordHlwZWRlZiBpbnQgICAgIEJvb2xlYW47Cit0eXBlZGVmIGNoYXIgICAgU3RyXzMwIFszMV07Cit0eXBlZGVmIGludCAgICAgQXJyXzFfRGltIFs1MF07Cit0eXBlZGVmIGludCAgICAgQXJyXzJfRGltIFs1MF0gWzUwXTsKKwordHlwZWRlZiBzdHJ1Y3QgcmVjb3JkCisgICAgeworICAgIHN0cnVjdCByZWNvcmQgKlB0cl9Db21wOworICAgIEVudW1lcmF0aW9uICAgIERpc2NyOworICAgIHVuaW9uIHsKKyAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICAgICAgRW51bWVyYXRpb24gRW51bV9Db21wOworICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgSW50X0NvbXA7CisgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICBTdHJfQ29tcCBbMzFdOworICAgICAgICAgICAgICAgICAgfSB2YXJfMTsKKyAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICAgICAgRW51bWVyYXRpb24gRV9Db21wXzI7CisgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICBTdHJfMl9Db21wIFszMV07CisgICAgICAgICAgICAgICAgICB9IHZhcl8yOworICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICBDaF8xX0NvbXA7CisgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICBDaF8yX0NvbXA7CisgICAgICAgICAgICAgICAgICB9IHZhcl8zOworICAgICAgICAgIH0gdmFyaWFudDsKKyAgICAgIH0gUmVjX1R5cGUsICpSZWNfUG9pbnRlcjsKKworI2luY2x1ZGUgInNjX3ByaW50LmgiCisjaW5jbHVkZSAiY3NyLmgiCisKKyMgZGVmaW5lIHByaW50ZiBzY19wcmludGYKKworI2RlZmluZSBIWiAxMDAwMDAwCitzdGF0aWMgbG9uZyB0aW1lKGxvbmcgKngpCit7CisgICAgcmV0dXJuIHJkY3ljbGUoKTsKK30KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2RocnlzdG9uZTIxL2RocnlfMS5jIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2JlbmNobWFya3MvZGhyeXN0b25lMjEvZGhyeV8xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUyYWNiYgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2RocnlzdG9uZTIxL2RocnlfMS5jCkBAIC0wLDAgKzEsNDYxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBUaGUgQllURSBVTklYIEJlbmNobWFya3MgLSBSZWxlYXNlIDMKKyAqICAgICAgICAgIE1vZHVsZTogZGhyeV8xLmMgICBTSUQ6IDMuNCA1LzE1LzkxIDE5OjMwOjIxCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBCdWcgcmVwb3J0cywgcGF0Y2hlcywgY29tbWVudHMsIHN1Z2dlc3Rpb25zIHNob3VsZCBiZSBzZW50IHRvOgorICoKKyAqCUJlbiBTbWl0aCwgUmljayBHcmVoYW4gb3IgVG9tIFlhZ2VyCisgKgliZW5AYnl0ZXBiLmJ5dGUuY29tICAgcmlja19nQGJ5dGVwYi5ieXRlLmNvbSAgIHR5YWdlckBieXRlcGIuYnl0ZS5jb20KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAqKiogV0FSTklORyAqKioqICBXaXRoIEJZVEUncyBtb2RpZmljYXRpb25zIGFwcGxpZWQsIHJlc3VsdHMgb2J0YWluZWQgd2l0aAorICogICAgICoqKioqKiogICAgICAgdGhpcyB2ZXJzaW9uIG9mIHRoZSBEaHJ5c3RvbmUgcHJvZ3JhbSBtYXkgbm90IGJlIGFwcGxpY2FibGUKKyAqICAgICAgICAgICAgICAgICAgIHRvIG90aGVyIHZlcnNpb25zLgorICoKKyAqICBNb2RpZmljYXRpb24gTG9nOgorICogIDEwLzIyLzk3IC0gY29kZSBjbGVhbnVwIHRvIHJlbW92ZSBBTlNJIEMgY29tcGlsZXIgd2FybmluZ3MKKyAqICAgICAgICAgICAgIEFuZHkgS2FobiA8a2FobkB6azMuZGVjLmNvbT4KKyAqCisgKiAgQWRhcHRlZCBmcm9tOgorICoKKyAqICAgICAgICAgICAgICAgICAgICJESFJZU1RPTkUiIEJlbmNobWFyayBQcm9ncmFtCisgKiAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqICBWZXJzaW9uOiAgICBDLCBWZXJzaW9uIDIuMQorICoKKyAqICBGaWxlOiAgICAgICBkaHJ5XzEuYyAocGFydCAyIG9mIDMpCisgKgorICogIERhdGU6ICAgICAgIE1heSAyNSwgMTk4OAorICoKKyAqICBBdXRob3I6ICAgICBSZWluaG9sZCBQLiBXZWlja2VyCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2NoYXIgU0NDU2lkW10gPSAiQCgjKSBAKCMpZGhyeV8xLmM6My40IC0tIDUvMTUvOTEgMTk6MzA6MjEiOworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJkaHJ5LmgiCisvLyNpbmNsdWRlICJ0aW1laXQuYyIKKwordW5zaWduZWQgbG9uZyBSdW5fSW5kZXg7CisvKgordm9pZCByZXBvcnQoKQoreworCWZwcmludGYoc3RkZXJyLCJDT1VOVHwlbGR8MXxscHNcbiIsIFJ1bl9JbmRleCk7CisJZXhpdCgwKTsKK30KKyovCisvKiBHbG9iYWwgVmFyaWFibGVzOiAqLworCitSZWNfUG9pbnRlciAgICAgUHRyX0dsb2IsCisgICAgICAgICAgICAgICAgTmV4dF9QdHJfR2xvYjsKK2ludCAgICAgICAgICAgICBJbnRfR2xvYjsKK0Jvb2xlYW4gICAgICAgICBCb29sX0dsb2I7CitjaGFyICAgICAgICAgICAgQ2hfMV9HbG9iLAorICAgICAgICAgICAgICAgIENoXzJfR2xvYjsKK2ludCAgICAgICAgICAgICBBcnJfMV9HbG9iIFs1MF07CitpbnQgICAgICAgICAgICAgQXJyXzJfR2xvYiBbNTBdIFs1MF07CisKK0VudW1lcmF0aW9uICAgICBGdW5jXzEgKCk7CisgIC8qIGZvcndhcmQgZGVjbGFyYXRpb24gbmVjZXNzYXJ5IHNpbmNlIEVudW1lcmF0aW9uIG1heSBub3Qgc2ltcGx5IGJlIGludCAqLworCisjaWZuZGVmIFJFRworICAgICAgICBCb29sZWFuIFJlZyA9IGZhbHNlOworI2RlZmluZSBSRUcKKyAgICAgICAgLyogUkVHIGJlY29tZXMgZGVmaW5lZCBhcyBlbXB0eSAqLworICAgICAgICAvKiBpLmUuIG5vIHJlZ2lzdGVyIHZhcmlhYmxlcyAgICovCisjZWxzZQorICAgICAgICBCb29sZWFuIFJlZyA9IHRydWU7CisjZW5kaWYKKworLyogdmFyaWFibGVzIGZvciB0aW1lIG1lYXN1cmVtZW50OiAqLworCisjaWZkZWYgVElNRVMKK3N0cnVjdCB0bXMgICAgICB0aW1lX2luZm87CisvKiBleHRlcm4gIGludCAgICAgdGltZXMgKCk7ICovCisgICAgICAgICAgICAgICAgLyogc2VlIGxpYnJhcnkgZnVuY3Rpb24gInRpbWVzIiAqLworI2RlZmluZSBUb29fU21hbGxfVGltZSAxMjAKKyAgICAgICAgICAgICAgICAvKiBNZWFzdXJlbWVudHMgc2hvdWxkIGxhc3QgYXQgbGVhc3QgYWJvdXQgMiBzZWNvbmRzICovCisjZW5kaWYKKyNpZmRlZiBUSU1FCitleHRlcm4gbG9uZyAgICAgdGltZSgpOworICAgICAgICAgICAgICAgIC8qIHNlZSBsaWJyYXJ5IGZ1bmN0aW9uICJ0aW1lIiAgKi8KKyNkZWZpbmUgVG9vX1NtYWxsX1RpbWUgMgorICAgICAgICAgICAgICAgIC8qIE1lYXN1cmVtZW50cyBzaG91bGQgbGFzdCBhdCBsZWFzdCAyIHNlY29uZHMgKi8KKyNlbmRpZgorCitsb25nICAgICAgICAgICAgQmVnaW5fVGltZSwKKyAgICAgICAgICAgICAgICBFbmRfVGltZSwKKyAgICAgICAgICAgICAgICBVc2VyX1RpbWU7CisjaWYgMAorZmxvYXQgICAgICAgICAgIE1pY3Jvc2Vjb25kcywKKyAgICAgICAgICAgICAgICBEaHJ5c3RvbmVzX1Blcl9TZWNvbmQ7CisjZWxzZQorbG9uZyAgICAgICAgICAgIE1pY3Jvc2Vjb25kcywKKyAgICAgICAgICAgICAgICBEaHJ5c3RvbmVzX1Blcl9TZWNvbmQ7CisjZW5kaWYKKworLyogZW5kIG9mIHZhcmlhYmxlcyBmb3IgdGltZSBtZWFzdXJlbWVudCAqLworCit2b2lkIFByb2NfMSAoUkVHIFJlY19Qb2ludGVyIFB0cl9WYWxfUGFyKTsKK3ZvaWQgUHJvY18yIChPbmVfRmlmdHkgICAqSW50X1Bhcl9SZWYpOwordm9pZCBQcm9jXzMgKFJlY19Qb2ludGVyICpQdHJfUmVmX1Bhcik7Cit2b2lkIFByb2NfNCAodm9pZCk7Cit2b2lkIFByb2NfNSAodm9pZCk7CisKKworZXh0ZXJuIEJvb2xlYW4gRnVuY18yKFN0cl8zMCwgU3RyXzMwKTsKK2V4dGVybiB2b2lkIFByb2NfNihFbnVtZXJhdGlvbiwgRW51bWVyYXRpb24gKik7CitleHRlcm4gdm9pZCBQcm9jXzcoT25lX0ZpZnR5LCBPbmVfRmlmdHksIE9uZV9GaWZ0eSAqKTsKK2V4dGVybiB2b2lkIFByb2NfOChBcnJfMV9EaW0sIEFycl8yX0RpbSwgaW50LCBpbnQpOworCitpbnQgbWFpbiAoYXJnYywgYXJndikKK2ludAlhcmdjOworY2hhcgkqYXJndltdOworICAvKiBtYWluIHByb2dyYW0sIGNvcnJlc3BvbmRzIHRvIHByb2NlZHVyZXMgICAgICAgICovCisgIC8qIE1haW4gYW5kIFByb2NfMCBpbiB0aGUgQWRhIHZlcnNpb24gICAgICAgICAgICAgKi8KK3sKKyNpZmRlZiBTRUxGX1RJTUVECisgICAgICAgIGludCAgICAgICAgICAgICBOdW1iZXJfT2ZfUnVuczsKKyNlbHNlIC8qIFNFTEZfVElNRUQgKi8KKyAgICAgICAgaW50ICAgICAgICAgICAgIGR1cmF0aW9uOworI2VuZGlmIC8qIFNFTEZfVElNRUQgKi8KKyAgICAgICAgT25lX0ZpZnR5ICAgICAgIEludF8xX0xvYzsKKyAgUkVHICAgT25lX0ZpZnR5ICAgICAgIEludF8yX0xvYzsKKyAgICAgICAgT25lX0ZpZnR5ICAgICAgIEludF8zX0xvYzsKKyAgUkVHICAgY2hhciAgICAgICAgICAgIENoX0luZGV4OworICAgICAgICBFbnVtZXJhdGlvbiAgICAgRW51bV9Mb2M7CisgICAgICAgIFN0cl8zMCAgICAgICAgICBTdHJfMV9Mb2M7CisgICAgICAgIFN0cl8zMCAgICAgICAgICBTdHJfMl9Mb2M7CisKKyAgLyogSW5pdGlhbGl6YXRpb25zICovCisjaWYgMAorICBOZXh0X1B0cl9HbG9iID0gKFJlY19Qb2ludGVyKSBtYWxsb2MgKHNpemVvZiAoUmVjX1R5cGUpKTsKKyAgUHRyX0dsb2IgPSAoUmVjX1BvaW50ZXIpIG1hbGxvYyAoc2l6ZW9mIChSZWNfVHlwZSkpOworI2Vsc2UKKyAgc3RhdGljIFJlY19UeXBlIGdsb2IxLCBnbG9iMjsKKyAgTmV4dF9QdHJfR2xvYiA9ICZnbG9iMTsKKyAgUHRyX0dsb2IgPSAmZ2xvYjI7CisjZW5kaWYKKworICBQdHJfR2xvYi0+UHRyX0NvbXAgICAgICAgICAgICAgICAgICAgID0gTmV4dF9QdHJfR2xvYjsKKyAgUHRyX0dsb2ItPkRpc2NyICAgICAgICAgICAgICAgICAgICAgICA9IElkZW50XzE7CisgIFB0cl9HbG9iLT52YXJpYW50LnZhcl8xLkVudW1fQ29tcCAgICAgPSBJZGVudF8zOworICBQdHJfR2xvYi0+dmFyaWFudC52YXJfMS5JbnRfQ29tcCAgICAgID0gNDA7CisgIHN0cmNweSAoUHRyX0dsb2ItPnZhcmlhbnQudmFyXzEuU3RyX0NvbXAsCisgICAgICAgICAgIkRIUllTVE9ORSBQUk9HUkFNLCBTT01FIFNUUklORyIpOworICBzdHJjcHkgKFN0cl8xX0xvYywgIkRIUllTVE9ORSBQUk9HUkFNLCAxJ1NUIFNUUklORyIpOworCisgIEFycl8yX0dsb2IgWzhdWzddID0gMTA7CisgICAgICAgIC8qIFdhcyBtaXNzaW5nIGluIHB1Ymxpc2hlZCBwcm9ncmFtLiBXaXRob3V0IHRoaXMgc3RhdGVtZW50LCAgICAqLworICAgICAgICAvKiBBcnJfMl9HbG9iIFs4XVs3XSB3b3VsZCBoYXZlIGFuIHVuZGVmaW5lZCB2YWx1ZS4gICAgICAgICAgICAgKi8KKyAgICAgICAgLyogV2FybmluZzogV2l0aCAxNi1CaXQgcHJvY2Vzc29ycyBhbmQgTnVtYmVyX09mX1J1bnMgPiAzMjAwMCwgICovCisgICAgICAgIC8qIG92ZXJmbG93IG1heSBvY2N1ciBmb3IgdGhpcyBhcnJheSBlbGVtZW50LiAgICAgICAgICAgICAgICAgICAqLworCisjaWZkZWYgU0VMRl9USU1FRAorICBOdW1iZXJfT2ZfUnVucyA9IDUwMDsvLzUwMDAwMDsKKyAgaWYgKGFyZ2MgPj0gMikgeworICAgIE51bWJlcl9PZl9SdW5zID0gYXRvaShhcmd2WzFdKTsKKyAgICB9CisgIHByaW50ZiAoIlxuIik7CisgIHByaW50ZiAoIkRocnlzdG9uZSBCZW5jaG1hcmssIFZlcnNpb24gMi4xIChMYW5ndWFnZTogQylcbiIpOworICBwcmludGYgKCJcbiIpOworICBpZiAoUmVnKQorICB7CisgICAgcHJpbnRmICgiUHJvZ3JhbSBjb21waWxlZCB3aXRoICdyZWdpc3RlcicgYXR0cmlidXRlXG4iKTsKKyAgICBwcmludGYgKCJcbiIpOworICB9CisgIGVsc2UKKyAgeworICAgIHByaW50ZiAoIlByb2dyYW0gY29tcGlsZWQgd2l0aG91dCAncmVnaXN0ZXInIGF0dHJpYnV0ZVxuIik7CisgICAgcHJpbnRmICgiXG4iKTsKKyAgfQorI2lmZGVmIFBSQVRUTEUKKyAgcHJpbnRmICgiUGxlYXNlIGdpdmUgdGhlIG51bWJlciBvZiBydW5zIHRocm91Z2ggdGhlIGJlbmNobWFyazogIik7CisgIHsKKyAgICBpbnQgbjsKKyAgICBzY2FuZiAoIiVkIiwgJm4pOworICAgIE51bWJlcl9PZl9SdW5zID0gbjsKKyAgfQorICBwcmludGYgKCJcbiIpOworI2VuZGlmIC8qIFBSQVRUTEUgKi8KKworICBwcmludGYgKCJFeGVjdXRpb24gc3RhcnRzLCAlZCBydW5zIHRocm91Z2ggRGhyeXN0b25lXG4iLCBOdW1iZXJfT2ZfUnVucyk7CisKKyAgUnVuX0luZGV4ID0gMDsKKyNlbHNlIC8qIFNFTEZfVElNRUQgKi8KKyAgaWYgKGFyZ2MgIT0gMikgeworICAgIGZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIGR1cmF0aW9uXG4iLCBhcmd2WzBdKTsKKyAgICBleGl0KDEpOworICAgIH0KKworICBkdXJhdGlvbiA9IGF0b2koYXJndlsxXSk7CisgIFJ1bl9JbmRleCA9IDA7CisgIHdha2VfbWUoZHVyYXRpb24sIHJlcG9ydCk7CisjZW5kaWYgLyogU0VMRl9USU1FRCAqLworCisgIC8qKioqKioqKioqKioqKiovCisgIC8qIFN0YXJ0IHRpbWVyICovCisgIC8qKioqKioqKioqKioqKiovCisKKyNpZmRlZiBTRUxGX1RJTUVECisjaWZkZWYgVElNRVMKKyAgdGltZXMgKCZ0aW1lX2luZm8pOworICBCZWdpbl9UaW1lID0gKGxvbmcpIHRpbWVfaW5mby50bXNfdXRpbWU7CisjZW5kaWYKKyNpZmRlZiBUSU1FCisgIEJlZ2luX1RpbWUgPSB0aW1lICggKGxvbmcgKikgMCk7CisjZW5kaWYKKyNlbmRpZiAvKiBTRUxGX1RJTUVEICovCisKKyNpZmRlZiBTRUxGX1RJTUVECisgIGZvciAoUnVuX0luZGV4ID0gMTsgUnVuX0luZGV4IDw9IE51bWJlcl9PZl9SdW5zIDsgKytSdW5fSW5kZXgpCisjZWxzZSAvKiBTRUxGX1RJTUVEICovCisgIGZvciAoUnVuX0luZGV4ID0gMTsgOyArK1J1bl9JbmRleCkKKyNlbmRpZiAvKiBTRUxGX1RJTUVEICovCisgIHsKKworICAgIFByb2NfNSgpOworICAgIFByb2NfNCgpOworICAgICAgLyogQ2hfMV9HbG9iID09ICdBJywgQ2hfMl9HbG9iID09ICdCJywgQm9vbF9HbG9iID09IHRydWUgKi8KKyAgICBJbnRfMV9Mb2MgPSAyOworICAgIEludF8yX0xvYyA9IDM7CisgICAgc3RyY3B5IChTdHJfMl9Mb2MsICJESFJZU1RPTkUgUFJPR1JBTSwgMidORCBTVFJJTkciKTsKKyAgICBFbnVtX0xvYyA9IElkZW50XzI7CisgICAgQm9vbF9HbG9iID0gISBGdW5jXzIgKFN0cl8xX0xvYywgU3RyXzJfTG9jKTsKKyAgICAgIC8qIEJvb2xfR2xvYiA9PSAxICovCisgICAgd2hpbGUgKEludF8xX0xvYyA8IEludF8yX0xvYykgIC8qIGxvb3AgYm9keSBleGVjdXRlZCBvbmNlICovCisgICAgeworICAgICAgSW50XzNfTG9jID0gNSAqIEludF8xX0xvYyAtIEludF8yX0xvYzsKKyAgICAgICAgLyogSW50XzNfTG9jID09IDcgKi8KKyAgICAgIFByb2NfNyAoSW50XzFfTG9jLCBJbnRfMl9Mb2MsICZJbnRfM19Mb2MpOworICAgICAgICAvKiBJbnRfM19Mb2MgPT0gNyAqLworICAgICAgSW50XzFfTG9jICs9IDE7CisgICAgfSAvKiB3aGlsZSAqLworICAgICAgLyogSW50XzFfTG9jID09IDMsIEludF8yX0xvYyA9PSAzLCBJbnRfM19Mb2MgPT0gNyAqLworICAgIFByb2NfOCAoQXJyXzFfR2xvYiwgQXJyXzJfR2xvYiwgSW50XzFfTG9jLCBJbnRfM19Mb2MpOworICAgICAgLyogSW50X0dsb2IgPT0gNSAqLworICAgIFByb2NfMSAoUHRyX0dsb2IpOworICAgIGZvciAoQ2hfSW5kZXggPSAnQSc7IENoX0luZGV4IDw9IENoXzJfR2xvYjsgKytDaF9JbmRleCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbG9vcCBib2R5IGV4ZWN1dGVkIHR3aWNlICovCisgICAgeworICAgICAgaWYgKEVudW1fTG9jID09IEZ1bmNfMSAoQ2hfSW5kZXgsICdDJykpCisgICAgICAgICAgLyogdGhlbiwgbm90IGV4ZWN1dGVkICovCisgICAgICAgIHsKKyAgICAgICAgUHJvY182IChJZGVudF8xLCAmRW51bV9Mb2MpOworICAgICAgICBzdHJjcHkgKFN0cl8yX0xvYywgIkRIUllTVE9ORSBQUk9HUkFNLCAzJ1JEIFNUUklORyIpOworICAgICAgICBJbnRfMl9Mb2MgPSBSdW5fSW5kZXg7CisgICAgICAgIEludF9HbG9iID0gUnVuX0luZGV4OworICAgICAgICB9CisgICAgfQorICAgICAgLyogSW50XzFfTG9jID09IDMsIEludF8yX0xvYyA9PSAzLCBJbnRfM19Mb2MgPT0gNyAqLworICAgIEludF8yX0xvYyA9IEludF8yX0xvYyAqIEludF8xX0xvYzsKKyAgICBJbnRfMV9Mb2MgPSBJbnRfMl9Mb2MgLyBJbnRfM19Mb2M7CisgICAgSW50XzJfTG9jID0gNyAqIChJbnRfMl9Mb2MgLSBJbnRfM19Mb2MpIC0gSW50XzFfTG9jOworICAgICAgLyogSW50XzFfTG9jID09IDEsIEludF8yX0xvYyA9PSAxMywgSW50XzNfTG9jID09IDcgKi8KKyAgICBQcm9jXzIgKCZJbnRfMV9Mb2MpOworICAgICAgLyogSW50XzFfTG9jID09IDUgKi8KKworICB9IC8qIGxvb3AgImZvciBSdW5fSW5kZXgiICovCisKKyAgLyoqKioqKioqKioqKioqLworICAvKiBTdG9wIHRpbWVyICovCisgIC8qKioqKioqKioqKioqKi8KKyNpZmRlZiBTRUxGX1RJTUVECisjaWZkZWYgVElNRVMKKyAgdGltZXMgKCZ0aW1lX2luZm8pOworICBFbmRfVGltZSA9IChsb25nKSB0aW1lX2luZm8udG1zX3V0aW1lOworI2VuZGlmCisjaWZkZWYgVElNRQorICBFbmRfVGltZSA9IHRpbWUgKCAobG9uZyAqKSAwKTsKKyNlbmRpZgorI2VuZGlmIC8qIFNFTEZfVElNRUQgKi8KKworICAvKiBCWVRFIHZlcnNpb24gbmV2ZXIgZXhlY3V0ZXMgdGhpcyBzdHVmZiAqLworI2lmZGVmIFNFTEZfVElNRUQKKyAgcHJpbnRmICgiRXhlY3V0aW9uIGVuZHNcbiIpOworICBwcmludGYgKCJcbiIpOworICBwcmludGYgKCJGaW5hbCB2YWx1ZXMgb2YgdGhlIHZhcmlhYmxlcyB1c2VkIGluIHRoZSBiZW5jaG1hcms6XG4iKTsKKyAgcHJpbnRmICgiXG4iKTsKKyAgcHJpbnRmICgiSW50X0dsb2I6ICAgICAgICAgICAgJWRcbiIsIEludF9HbG9iKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgJWRcbiIsIDUpOworICBwcmludGYgKCJCb29sX0dsb2I6ICAgICAgICAgICAlZFxuIiwgQm9vbF9HbG9iKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgJWRcbiIsIDEpOworICBwcmludGYgKCJDaF8xX0dsb2I6ICAgICAgICAgICAlY1xuIiwgQ2hfMV9HbG9iKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgJWNcbiIsICdBJyk7CisgIHByaW50ZiAoIkNoXzJfR2xvYjogICAgICAgICAgICVjXG4iLCBDaF8yX0dsb2IpOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAlY1xuIiwgJ0InKTsKKyAgcHJpbnRmICgiQXJyXzFfR2xvYls4XTogICAgICAgJWRcbiIsIEFycl8xX0dsb2JbOF0pOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAlZFxuIiwgNyk7CisgIHByaW50ZiAoIkFycl8yX0dsb2JbOF1bN106ICAgICVkXG4iLCBBcnJfMl9HbG9iWzhdWzddKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgTnVtYmVyX09mX1J1bnMgKyAxMFxuIik7CisgIHByaW50ZiAoIlB0cl9HbG9iLT5cbiIpOworICBwcmludGYgKCIgIFB0cl9Db21wOiAgICAgICAgICAlZFxuIiwgKGludCkgUHRyX0dsb2ItPlB0cl9Db21wKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgKGltcGxlbWVudGF0aW9uLWRlcGVuZGVudClcbiIpOworICBwcmludGYgKCIgIERpc2NyOiAgICAgICAgICAgICAlZFxuIiwgUHRyX0dsb2ItPkRpc2NyKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgJWRcbiIsIDApOworICBwcmludGYgKCIgIEVudW1fQ29tcDogICAgICAgICAlZFxuIiwgUHRyX0dsb2ItPnZhcmlhbnQudmFyXzEuRW51bV9Db21wKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgJWRcbiIsIDIpOworICBwcmludGYgKCIgIEludF9Db21wOiAgICAgICAgICAlZFxuIiwgUHRyX0dsb2ItPnZhcmlhbnQudmFyXzEuSW50X0NvbXApOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAlZFxuIiwgMTcpOworICBwcmludGYgKCIgIFN0cl9Db21wOiAgICAgICAgICAlc1xuIiwgUHRyX0dsb2ItPnZhcmlhbnQudmFyXzEuU3RyX0NvbXApOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICBESFJZU1RPTkUgUFJPR1JBTSwgU09NRSBTVFJJTkdcbiIpOworICBwcmludGYgKCJOZXh0X1B0cl9HbG9iLT5cbiIpOworICBwcmludGYgKCIgIFB0cl9Db21wOiAgICAgICAgICAlZFxuIiwgKGludCkgTmV4dF9QdHJfR2xvYi0+UHRyX0NvbXApOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAoaW1wbGVtZW50YXRpb24tZGVwZW5kZW50KSwgc2FtZSBhcyBhYm92ZVxuIik7CisgIHByaW50ZiAoIiAgRGlzY3I6ICAgICAgICAgICAgICVkXG4iLCBOZXh0X1B0cl9HbG9iLT5EaXNjcik7CisgIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgICVkXG4iLCAwKTsKKyAgcHJpbnRmICgiICBFbnVtX0NvbXA6ICAgICAgICAgJWRcbiIsIE5leHRfUHRyX0dsb2ItPnZhcmlhbnQudmFyXzEuRW51bV9Db21wKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgJWRcbiIsIDEpOworICBwcmludGYgKCIgIEludF9Db21wOiAgICAgICAgICAlZFxuIiwgTmV4dF9QdHJfR2xvYi0+dmFyaWFudC52YXJfMS5JbnRfQ29tcCk7CisgIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgICVkXG4iLCAxOCk7CisgIHByaW50ZiAoIiAgU3RyX0NvbXA6ICAgICAgICAgICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXh0X1B0cl9HbG9iLT52YXJpYW50LnZhcl8xLlN0cl9Db21wKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgREhSWVNUT05FIFBST0dSQU0sIFNPTUUgU1RSSU5HXG4iKTsKKyAgcHJpbnRmICgiSW50XzFfTG9jOiAgICAgICAgICAgJWRcbiIsIEludF8xX0xvYyk7CisgIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgICVkXG4iLCA1KTsKKyAgcHJpbnRmICgiSW50XzJfTG9jOiAgICAgICAgICAgJWRcbiIsIEludF8yX0xvYyk7CisgIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgICVkXG4iLCAxMyk7CisgIHByaW50ZiAoIkludF8zX0xvYzogICAgICAgICAgICVkXG4iLCBJbnRfM19Mb2MpOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAlZFxuIiwgNyk7CisgIHByaW50ZiAoIkVudW1fTG9jOiAgICAgICAgICAgICVkXG4iLCBFbnVtX0xvYyk7CisgIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgICVkXG4iLCAxKTsKKyAgcHJpbnRmICgiU3RyXzFfTG9jOiAgICAgICAgICAgJXNcbiIsIFN0cl8xX0xvYyk7CisgIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgIERIUllTVE9ORSBQUk9HUkFNLCAxJ1NUIFNUUklOR1xuIik7CisgIHByaW50ZiAoIlN0cl8yX0xvYzogICAgICAgICAgICVzXG4iLCBTdHJfMl9Mb2MpOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICBESFJZU1RPTkUgUFJPR1JBTSwgMidORCBTVFJJTkdcbiIpOworICBwcmludGYgKCJcbiIpOworCisgIFVzZXJfVGltZSA9IEVuZF9UaW1lIC0gQmVnaW5fVGltZTsKKworICBpZiAoVXNlcl9UaW1lIDwgVG9vX1NtYWxsX1RpbWUpCisgIHsKKyAgICBwcmludGYgKCJNZWFzdXJlZCB0aW1lIHRvbyBzbWFsbCB0byBvYnRhaW4gbWVhbmluZ2Z1bCByZXN1bHRzXG4iKTsKKyAgICBwcmludGYgKCJQbGVhc2UgaW5jcmVhc2UgbnVtYmVyIG9mIHJ1bnNcbiIpOworICAgIHByaW50ZiAoIlxuIik7CisgIH0KKyAgZWxzZQorICB7CisjaWYgMAorI2lmZGVmIFRJTUUKKyAgICBNaWNyb3NlY29uZHMgPSAoZmxvYXQpIFVzZXJfVGltZSAqIE1pY19zZWNzX1Blcl9TZWNvbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8gKGZsb2F0KSBOdW1iZXJfT2ZfUnVuczsKKyAgICBEaHJ5c3RvbmVzX1Blcl9TZWNvbmQgPSAoZmxvYXQpIE51bWJlcl9PZl9SdW5zIC8gKGZsb2F0KSBVc2VyX1RpbWU7CisjZWxzZQorICAgIE1pY3Jvc2Vjb25kcyA9IChmbG9hdCkgVXNlcl9UaW1lICogTWljX3NlY3NfUGVyX1NlY29uZAorICAgICAgICAgICAgICAgICAgICAgICAgLyAoKGZsb2F0KSBIWiAqICgoZmxvYXQpIE51bWJlcl9PZl9SdW5zKSk7CisgICAgRGhyeXN0b25lc19QZXJfU2Vjb25kID0gKChmbG9hdCkgSFogKiAoZmxvYXQpIE51bWJlcl9PZl9SdW5zKQorICAgICAgICAgICAgICAgICAgICAgICAgLyAoZmxvYXQpIFVzZXJfVGltZTsKKyNlbmRpZgorI2Vsc2UKKyAgTWljcm9zZWNvbmRzID0gKChVc2VyX1RpbWUgLyBOdW1iZXJfT2ZfUnVucykgKiBNaWNfc2Vjc19QZXJfU2Vjb25kKSAvIEhaOworICBEaHJ5c3RvbmVzX1Blcl9TZWNvbmQgPSAoSFogKiBOdW1iZXJfT2ZfUnVucykgLyBVc2VyX1RpbWU7CisKKyAgc2NfcHJpbnRmKCJOdW1iZXJfT2ZfUnVucz0gJWxkLCBIWj0gJWxkXG4iLCBOdW1iZXJfT2ZfUnVucywgSFopOworICBzY19wcmludGYoIlRpbWU6IGJlZ2luPSAlbGQsIGVuZD0gJWxkLCBkaWZmPSAlbGRcbiIsIEJlZ2luX1RpbWUsIEVuZF9UaW1lLCBVc2VyX1RpbWUpOworICBzY19wcmludGYoIk1pY3Jvc2Vjb25kcyBmb3Igb25lIHJ1biB0aHJvdWdoIERocnlzdG9uZTogJWxkXG4iLCBNaWNyb3NlY29uZHMpOworICBzY19wcmludGYoIkRocnlzdG9uZXMgcGVyIFNlY29uZDogICAgICAgICAgICAgICAgICAgICAgJWxkXG4iLCBEaHJ5c3RvbmVzX1Blcl9TZWNvbmQpOworCisjZW5kaWYKKyAgfQorI2VuZGlmIC8qIFNFTEZfVElNRUQgKi8KK30KKworCit2b2lkIFByb2NfMSAoUkVHIFJlY19Qb2ludGVyIFB0cl9WYWxfUGFyKQorICAgIC8qIGV4ZWN1dGVkIG9uY2UgKi8KK3sKKyAgUkVHIFJlY19Qb2ludGVyIE5leHRfUmVjb3JkID0gUHRyX1ZhbF9QYXItPlB0cl9Db21wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qID09IFB0cl9HbG9iX05leHQgKi8KKyAgLyogTG9jYWwgdmFyaWFibGUsIGluaXRpYWxpemVkIHdpdGggUHRyX1ZhbF9QYXItPlB0cl9Db21wLCAgICAqLworICAvKiBjb3JyZXNwb25kcyB0byAicmVuYW1lIiBpbiBBZGEsICJ3aXRoIiBpbiBQYXNjYWwgICAgICAgICAgICovCisKKyAgc3RydWN0YXNzaWduICgqUHRyX1ZhbF9QYXItPlB0cl9Db21wLCAqUHRyX0dsb2IpOworICBQdHJfVmFsX1Bhci0+dmFyaWFudC52YXJfMS5JbnRfQ29tcCA9IDU7CisgIE5leHRfUmVjb3JkLT52YXJpYW50LnZhcl8xLkludF9Db21wCisgICAgICAgID0gUHRyX1ZhbF9QYXItPnZhcmlhbnQudmFyXzEuSW50X0NvbXA7CisgIE5leHRfUmVjb3JkLT5QdHJfQ29tcCA9IFB0cl9WYWxfUGFyLT5QdHJfQ29tcDsKKyAgUHJvY18zICgmTmV4dF9SZWNvcmQtPlB0cl9Db21wKTsKKyAgICAvKiBQdHJfVmFsX1Bhci0+UHRyX0NvbXAtPlB0cl9Db21wCisgICAgICAgICAgICAgICAgICAgICAgICA9PSBQdHJfR2xvYi0+UHRyX0NvbXAgKi8KKyAgaWYgKE5leHRfUmVjb3JkLT5EaXNjciA9PSBJZGVudF8xKQorICAgIC8qIHRoZW4sIGV4ZWN1dGVkICovCisgIHsKKyAgICBOZXh0X1JlY29yZC0+dmFyaWFudC52YXJfMS5JbnRfQ29tcCA9IDY7CisgICAgUHJvY182IChQdHJfVmFsX1Bhci0+dmFyaWFudC52YXJfMS5FbnVtX0NvbXAsCisgICAgICAgICAgICZOZXh0X1JlY29yZC0+dmFyaWFudC52YXJfMS5FbnVtX0NvbXApOworICAgIE5leHRfUmVjb3JkLT5QdHJfQ29tcCA9IFB0cl9HbG9iLT5QdHJfQ29tcDsKKyAgICBQcm9jXzcgKE5leHRfUmVjb3JkLT52YXJpYW50LnZhcl8xLkludF9Db21wLCAxMCwKKyAgICAgICAgICAgJk5leHRfUmVjb3JkLT52YXJpYW50LnZhcl8xLkludF9Db21wKTsKKyAgfQorICBlbHNlIC8qIG5vdCBleGVjdXRlZCAqLworICAgIHN0cnVjdGFzc2lnbiAoKlB0cl9WYWxfUGFyLCAqUHRyX1ZhbF9QYXItPlB0cl9Db21wKTsKK30gLyogUHJvY18xICovCisKKwordm9pZCBQcm9jXzIgKE9uZV9GaWZ0eSAgICpJbnRfUGFyX1JlZikKKyAgICAvKiBleGVjdXRlZCBvbmNlICovCisgICAgLyogKkludF9QYXJfUmVmID09IDEsIGJlY29tZXMgNCAqLworeworICBPbmVfRmlmdHkgIEludF9Mb2M7CisgIEVudW1lcmF0aW9uICAgRW51bV9Mb2M7CisKKyAgRW51bV9Mb2MgPSAwOworCisgIEludF9Mb2MgPSAqSW50X1Bhcl9SZWYgKyAxMDsKKyAgZG8gLyogZXhlY3V0ZWQgb25jZSAqLworICAgIGlmIChDaF8xX0dsb2IgPT0gJ0EnKQorICAgICAgLyogdGhlbiwgZXhlY3V0ZWQgKi8KKyAgICB7CisgICAgICBJbnRfTG9jIC09IDE7CisgICAgICAqSW50X1Bhcl9SZWYgPSBJbnRfTG9jIC0gSW50X0dsb2I7CisgICAgICBFbnVtX0xvYyA9IElkZW50XzE7CisgICAgfSAvKiBpZiAqLworICB3aGlsZSAoRW51bV9Mb2MgIT0gSWRlbnRfMSk7IC8qIHRydWUgKi8KK30gLyogUHJvY18yICovCisKKwordm9pZCBQcm9jXzMgKFJlY19Qb2ludGVyICpQdHJfUmVmX1BhcikKKyAgICAvKiBleGVjdXRlZCBvbmNlICovCisgICAgLyogUHRyX1JlZl9QYXIgYmVjb21lcyBQdHJfR2xvYiAqLworeworICBpZiAoUHRyX0dsb2IgIT0gTnVsbCkKKyAgICAvKiB0aGVuLCBleGVjdXRlZCAqLworICAgICpQdHJfUmVmX1BhciA9IFB0cl9HbG9iLT5QdHJfQ29tcDsKKyAgUHJvY183ICgxMCwgSW50X0dsb2IsICZQdHJfR2xvYi0+dmFyaWFudC52YXJfMS5JbnRfQ29tcCk7Cit9IC8qIFByb2NfMyAqLworCisKK3ZvaWQgUHJvY180ICh2b2lkKSAvKiB3aXRob3V0IHBhcmFtZXRlcnMgKi8KKyAgICAvKiBleGVjdXRlZCBvbmNlICovCit7CisgIEJvb2xlYW4gQm9vbF9Mb2M7CisKKyAgQm9vbF9Mb2MgPSBDaF8xX0dsb2IgPT0gJ0EnOworICBCb29sX0dsb2IgPSBCb29sX0xvYyB8IEJvb2xfR2xvYjsKKyAgQ2hfMl9HbG9iID0gJ0InOworfSAvKiBQcm9jXzQgKi8KKwordm9pZCBQcm9jXzUgKHZvaWQpIC8qIHdpdGhvdXQgcGFyYW1ldGVycyAqLworLyoqKioqKiovCisgICAgLyogZXhlY3V0ZWQgb25jZSAqLworeworICBDaF8xX0dsb2IgPSAnQSc7CisgIEJvb2xfR2xvYiA9IGZhbHNlOworfSAvKiBQcm9jXzUgKi8KKworCisgICAgICAgIC8qIFByb2NlZHVyZSBmb3IgdGhlIGFzc2lnbm1lbnQgb2Ygc3RydWN0dXJlcywgICAgICAgICAgKi8KKyAgICAgICAgLyogaWYgdGhlIEMgY29tcGlsZXIgZG9lc24ndCBzdXBwb3J0IHRoaXMgZmVhdHVyZSAgICAgICAqLworI2lmZGVmICBOT1NUUlVDVEFTU0lHTgorbWVtY3B5IChkLCBzLCBsKQorcmVnaXN0ZXIgY2hhciAgICpkOworcmVnaXN0ZXIgY2hhciAgICpzOworcmVnaXN0ZXIgaW50ICAgIGw7Cit7CisgICAgICAgIHdoaWxlIChsLS0pICpkKysgPSAqcysrOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9kaHJ5c3RvbmUyMS9kaHJ5XzIuYyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2RocnlzdG9uZTIxL2RocnlfMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MDE2MWYKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9kaHJ5c3RvbmUyMS9kaHJ5XzIuYwpAQCAtMCwwICsxLDIwOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgVGhlIEJZVEUgVU5JWCBCZW5jaG1hcmtzIC0gUmVsZWFzZSAzCisgKiAgICAgICAgICBNb2R1bGU6IGRocnlfMi5jICAgU0lEOiAzLjQgNS8xNS85MSAxOTozMDoyMgorICogICAgICAgICAgCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJ1ZyByZXBvcnRzLCBwYXRjaGVzLCBjb21tZW50cywgc3VnZ2VzdGlvbnMgc2hvdWxkIGJlIHNlbnQgdG86CisgKgorICoJQmVuIFNtaXRoLCBSaWNrIEdyZWhhbiBvciBUb20gWWFnZXIKKyAqCWJlbkBieXRlcGIuYnl0ZS5jb20gICByaWNrX2dAYnl0ZXBiLmJ5dGUuY29tICAgdHlhZ2VyQGJ5dGVwYi5ieXRlLmNvbQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIE1vZGlmaWNhdGlvbiBMb2c6CisgKiAgMTAvMjIvOTcgLSBjb2RlIGNsZWFudXAgdG8gcmVtb3ZlIEFOU0kgQyBjb21waWxlciB3YXJuaW5ncworICogICAgICAgICAgICAgQW5keSBLYWhuIDxrYWhuQHprMy5kZWMuY29tPgorICoKKyAqICBBZGFwdGVkIGZyb206CisgKgorICogICAgICAgICAgICAgICAgICAgIkRIUllTVE9ORSIgQmVuY2htYXJrIFByb2dyYW0KKyAqICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogKioqKiBXQVJOSU5HICoqKiogU2VlIHdhcm5pbmcgaW4gbi5kaHJ5XzEuYworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgKiAgVmVyc2lvbjogICAgQywgVmVyc2lvbiAyLjEKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICogIEZpbGU6ICAgICAgIGRocnlfMi5jIChwYXJ0IDMgb2YgMykKKyAqCisgKiAgRGF0ZTogICAgICAgTWF5IDI1LCAxOTg4CisgKgorICogIEF1dGhvcjogICAgIFJlaW5ob2xkIFAuIFdlaWNrZXIKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFNDQ1NpZCBpcyBkZWZpbmVkIGluIGRocnlfMS5jICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJkaHJ5LmgiCisKKyNpZm5kZWYgUkVHCisjZGVmaW5lIFJFRworICAgICAgICAvKiBSRUcgYmVjb21lcyBkZWZpbmVkIGFzIGVtcHR5ICovCisgICAgICAgIC8qIGkuZS4gbm8gcmVnaXN0ZXIgdmFyaWFibGVzICAgKi8KKyNlbmRpZgorCitleHRlcm4gIGludCAgICAgSW50X0dsb2I7CitleHRlcm4gIGNoYXIgICAgQ2hfMV9HbG9iOworCit2b2lkIFByb2NfNihFbnVtZXJhdGlvbiwgRW51bWVyYXRpb24gKik7Cit2b2lkIFByb2NfNyhPbmVfRmlmdHksIE9uZV9GaWZ0eSwgT25lX0ZpZnR5ICopOwordm9pZCBQcm9jXzgoQXJyXzFfRGltLCBBcnJfMl9EaW0sIGludCwgaW50KTsKK0VudW1lcmF0aW9uIEZ1bmNfMShDYXBpdGFsX0xldHRlciwgQ2FwaXRhbF9MZXR0ZXIpOworQm9vbGVhbiBGdW5jXzIoU3RyXzMwLCBTdHJfMzApOworQm9vbGVhbiBGdW5jXzMoRW51bWVyYXRpb24pOworCit2b2lkIFByb2NfNiAoRW51bWVyYXRpb24gRW51bV9WYWxfUGFyLCBFbnVtZXJhdGlvbiAqRW51bV9SZWZfUGFyKQorICAgIC8qIGV4ZWN1dGVkIG9uY2UgKi8KKyAgICAvKiBFbnVtX1ZhbF9QYXIgPT0gSWRlbnRfMywgRW51bV9SZWZfUGFyIGJlY29tZXMgSWRlbnRfMiAqLworeworICAqRW51bV9SZWZfUGFyID0gRW51bV9WYWxfUGFyOworICBpZiAoISBGdW5jXzMgKEVudW1fVmFsX1BhcikpCisgICAgLyogdGhlbiwgbm90IGV4ZWN1dGVkICovCisgICAgKkVudW1fUmVmX1BhciA9IElkZW50XzQ7CisgIHN3aXRjaCAoRW51bV9WYWxfUGFyKQorICB7CisgICAgY2FzZSBJZGVudF8xOiAKKyAgICAgICpFbnVtX1JlZl9QYXIgPSBJZGVudF8xOworICAgICAgYnJlYWs7CisgICAgY2FzZSBJZGVudF8yOiAKKyAgICAgIGlmIChJbnRfR2xvYiA+IDEwMCkKKyAgICAgICAgLyogdGhlbiAqLworICAgICAgKkVudW1fUmVmX1BhciA9IElkZW50XzE7CisgICAgICBlbHNlICpFbnVtX1JlZl9QYXIgPSBJZGVudF80OworICAgICAgYnJlYWs7CisgICAgY2FzZSBJZGVudF8zOiAvKiBleGVjdXRlZCAqLworICAgICAgKkVudW1fUmVmX1BhciA9IElkZW50XzI7CisgICAgICBicmVhazsKKyAgICBjYXNlIElkZW50XzQ6IGJyZWFrOworICAgIGNhc2UgSWRlbnRfNTogCisgICAgICAqRW51bV9SZWZfUGFyID0gSWRlbnRfMzsKKyAgICAgIGJyZWFrOworICB9IC8qIHN3aXRjaCAqLworfSAvKiBQcm9jXzYgKi8KKwordm9pZCBQcm9jXzcgKEludF8xX1Bhcl9WYWwsIEludF8yX1Bhcl9WYWwsIEludF9QYXJfUmVmKQorT25lX0ZpZnR5ICAgICAgIEludF8xX1Bhcl9WYWw7CitPbmVfRmlmdHkgICAgICAgSW50XzJfUGFyX1ZhbDsKK09uZV9GaWZ0eSAgICAgICpJbnRfUGFyX1JlZjsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qIGV4ZWN1dGVkIHRocmVlIHRpbWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAKKyAgICAvKiBmaXJzdCBjYWxsOiAgICAgIEludF8xX1Bhcl9WYWwgPT0gMiwgSW50XzJfUGFyX1ZhbCA9PSAzLCAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgIEludF9QYXJfUmVmIGJlY29tZXMgNyAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBzZWNvbmQgY2FsbDogICAgIEludF8xX1Bhcl9WYWwgPT0gMTAsIEludF8yX1Bhcl9WYWwgPT0gNSwgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgIEludF9QYXJfUmVmIGJlY29tZXMgMTcgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiB0aGlyZCBjYWxsOiAgICAgIEludF8xX1Bhcl9WYWwgPT0gNiwgSW50XzJfUGFyX1ZhbCA9PSAxMCwgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgIEludF9QYXJfUmVmIGJlY29tZXMgMTggICAgICAgICAgICAgICAgICAgKi8KK3sKKyAgT25lX0ZpZnR5IEludF9Mb2M7CisKKyAgSW50X0xvYyA9IEludF8xX1Bhcl9WYWwgKyAyOworICAqSW50X1Bhcl9SZWYgPSBJbnRfMl9QYXJfVmFsICsgSW50X0xvYzsKK30gLyogUHJvY183ICovCisKKwordm9pZCBQcm9jXzggKEFycl8xX1Bhcl9SZWYsIEFycl8yX1Bhcl9SZWYsIEludF8xX1Bhcl9WYWwsIEludF8yX1Bhcl9WYWwpCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qIGV4ZWN1dGVkIG9uY2UgICAgICAqLworICAgIC8qIEludF9QYXJfVmFsXzEgPT0gMyAqLworICAgIC8qIEludF9QYXJfVmFsXzIgPT0gNyAqLworQXJyXzFfRGltICAgICAgIEFycl8xX1Bhcl9SZWY7CitBcnJfMl9EaW0gICAgICAgQXJyXzJfUGFyX1JlZjsKK2ludCAgICAgICAgICAgICBJbnRfMV9QYXJfVmFsOworaW50ICAgICAgICAgICAgIEludF8yX1Bhcl9WYWw7Cit7CisgIFJFRyBPbmVfRmlmdHkgSW50X0luZGV4OworICBSRUcgT25lX0ZpZnR5IEludF9Mb2M7CisKKyAgSW50X0xvYyA9IEludF8xX1Bhcl9WYWwgKyA1OworICBBcnJfMV9QYXJfUmVmIFtJbnRfTG9jXSA9IEludF8yX1Bhcl9WYWw7CisgIEFycl8xX1Bhcl9SZWYgW0ludF9Mb2MrMV0gPSBBcnJfMV9QYXJfUmVmIFtJbnRfTG9jXTsKKyAgQXJyXzFfUGFyX1JlZiBbSW50X0xvYyszMF0gPSBJbnRfTG9jOworICBmb3IgKEludF9JbmRleCA9IEludF9Mb2M7IEludF9JbmRleCA8PSBJbnRfTG9jKzE7ICsrSW50X0luZGV4KQorICAgIEFycl8yX1Bhcl9SZWYgW0ludF9Mb2NdIFtJbnRfSW5kZXhdID0gSW50X0xvYzsKKyAgQXJyXzJfUGFyX1JlZiBbSW50X0xvY10gW0ludF9Mb2MtMV0gKz0gMTsKKyAgQXJyXzJfUGFyX1JlZiBbSW50X0xvYysyMF0gW0ludF9Mb2NdID0gQXJyXzFfUGFyX1JlZiBbSW50X0xvY107CisgIEludF9HbG9iID0gNTsKK30gLyogUHJvY184ICovCisKKworRW51bWVyYXRpb24gRnVuY18xIChDYXBpdGFsX0xldHRlciBDaF8xX1Bhcl9WYWwsIENhcGl0YWxfTGV0dGVyIENoXzJfUGFyX1ZhbCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qIGV4ZWN1dGVkIHRocmVlIHRpbWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIGZpcnN0IGNhbGw6ICAgICAgQ2hfMV9QYXJfVmFsID09ICdIJywgQ2hfMl9QYXJfVmFsID09ICdSJyAgICAqLworICAgIC8qIHNlY29uZCBjYWxsOiAgICAgQ2hfMV9QYXJfVmFsID09ICdBJywgQ2hfMl9QYXJfVmFsID09ICdDJyAgICAqLworICAgIC8qIHRoaXJkIGNhbGw6ICAgICAgQ2hfMV9QYXJfVmFsID09ICdCJywgQ2hfMl9QYXJfVmFsID09ICdDJyAgICAqLworeworICBDYXBpdGFsX0xldHRlciAgICAgICAgQ2hfMV9Mb2M7CisgIENhcGl0YWxfTGV0dGVyICAgICAgICBDaF8yX0xvYzsKKworICBDaF8xX0xvYyA9IENoXzFfUGFyX1ZhbDsKKyAgQ2hfMl9Mb2MgPSBDaF8xX0xvYzsKKyAgaWYgKENoXzJfTG9jICE9IENoXzJfUGFyX1ZhbCkKKyAgICAvKiB0aGVuLCBleGVjdXRlZCAqLworICAgIHJldHVybiAoSWRlbnRfMSk7CisgIGVsc2UgIC8qIG5vdCBleGVjdXRlZCAqLworICB7CisgICAgQ2hfMV9HbG9iID0gQ2hfMV9Mb2M7CisgICAgcmV0dXJuIChJZGVudF8yKTsKKyAgIH0KK30gLyogRnVuY18xICovCisKKworCitCb29sZWFuIEZ1bmNfMiAoU3RyXzFfUGFyX1JlZiwgU3RyXzJfUGFyX1JlZikKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qIGV4ZWN1dGVkIG9uY2UgKi8KKyAgICAvKiBTdHJfMV9QYXJfUmVmID09ICJESFJZU1RPTkUgUFJPR1JBTSwgMSdTVCBTVFJJTkciICovCisgICAgLyogU3RyXzJfUGFyX1JlZiA9PSAiREhSWVNUT05FIFBST0dSQU0sIDInTkQgU1RSSU5HIiAqLworCitTdHJfMzAgIFN0cl8xX1Bhcl9SZWY7CitTdHJfMzAgIFN0cl8yX1Bhcl9SZWY7Cit7CisgIFJFRyBPbmVfVGhpcnR5ICAgICAgICBJbnRfTG9jOworICAgICAgQ2FwaXRhbF9MZXR0ZXIgICAgQ2hfTG9jOworCisgIENoX0xvYyA9ICdBJzsKKyAgSW50X0xvYyA9IDI7CisgIHdoaWxlIChJbnRfTG9jIDw9IDIpIC8qIGxvb3AgYm9keSBleGVjdXRlZCBvbmNlICovCisgICAgaWYgKEZ1bmNfMSAoU3RyXzFfUGFyX1JlZltJbnRfTG9jXSwKKyAgICAgICAgICAgICAgICBTdHJfMl9QYXJfUmVmW0ludF9Mb2MrMV0pID09IElkZW50XzEpCisgICAgICAvKiB0aGVuLCBleGVjdXRlZCAqLworICAgIHsKKyAgICAgIENoX0xvYyA9ICdBJzsKKyAgICAgIEludF9Mb2MgKz0gMTsKKyAgICB9IC8qIGlmLCB3aGlsZSAqLworICBpZiAoQ2hfTG9jID49ICdXJyAmJiBDaF9Mb2MgPCAnWicpCisgICAgLyogdGhlbiwgbm90IGV4ZWN1dGVkICovCisgICAgSW50X0xvYyA9IDc7CisgIGlmIChDaF9Mb2MgPT0gJ1InKQorICAgIC8qIHRoZW4sIG5vdCBleGVjdXRlZCAqLworICAgIHJldHVybiAodHJ1ZSk7CisgIGVsc2UgLyogZXhlY3V0ZWQgKi8KKyAgeworICAgIGlmIChzdHJjbXAgKFN0cl8xX1Bhcl9SZWYsIFN0cl8yX1Bhcl9SZWYpID4gMCkKKyAgICAgIC8qIHRoZW4sIG5vdCBleGVjdXRlZCAqLworICAgIHsKKyAgICAgIEludF9Mb2MgKz0gNzsKKyAgICAgIEludF9HbG9iID0gSW50X0xvYzsKKyAgICAgIHJldHVybiAodHJ1ZSk7CisgICAgfQorICAgIGVsc2UgLyogZXhlY3V0ZWQgKi8KKyAgICAgIHJldHVybiAoZmFsc2UpOworICB9IC8qIGlmIENoX0xvYyAqLworfSAvKiBGdW5jXzIgKi8KKworCitCb29sZWFuIEZ1bmNfMyAoRW51bV9QYXJfVmFsKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKiBleGVjdXRlZCBvbmNlICAgICAgICAqLworICAgIC8qIEVudW1fUGFyX1ZhbCA9PSBJZGVudF8zICovCitFbnVtZXJhdGlvbiBFbnVtX1Bhcl9WYWw7Cit7CisgIEVudW1lcmF0aW9uIEVudW1fTG9jOworCisgIEVudW1fTG9jID0gRW51bV9QYXJfVmFsOworICBpZiAoRW51bV9Mb2MgPT0gSWRlbnRfMykKKyAgICAvKiB0aGVuLCBleGVjdXRlZCAqLworICAgIHJldHVybiAodHJ1ZSk7CisgIGVsc2UgLyogbm90IGV4ZWN1dGVkICovCisgICAgcmV0dXJuIChmYWxzZSk7Cit9IC8qIEZ1bmNfMyAqLworCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvaGVsbG8vTWFrZWZpbGUgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvaGVsbG8vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY1NWQ2MAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9oZWxsby9NYWtlZmlsZQpAQCAtMCwwICsxLDEzIEBACitzcmNfZGlyIDo9ICQoZGlyICQobGFzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkpCisKK2Nfc3JjIDo9IHNjX3ByaW50LmMgaGVsbG8uYworCitpbmNsdWRlICQoaW5jX2RpcikvY29tbW9uLm1rCisKK2RlZmF1bHQ6IGxvZ19yZXF1ZXN0ZWRfdGd0ICQoYmxkX2RpcikvaGVsbG8uZWxmICQoYmxkX2RpcikvaGVsbG8uaGV4ICQoYmxkX2RpcikvaGVsbG8uZHVtcAorCitsb2dfcmVxdWVzdGVkX3RndDoKKwllY2hvIGhlbGxvLmhleD4+ICQoYmxkX2RpcikvdGVzdF9pbmZvCisKK2NsZWFuOgorCSQoUk0pICQoY19vYmpzKSAkKGFzbV9vYmpzKSAkKGJsZF9kaXIpL2hlbGxvLmVsZiAkKGJsZF9kaXIpL2hlbGxvLmhleCAkKGJsZF9kaXIpL2hlbGxvLmR1bXAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvaGVsbG8vaGVsbG8uYyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9oZWxsby9oZWxsby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNWM2ZTMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvaGVsbG8vaGVsbG8uYwpAQCAtMCwwICsxLDcgQEAKKyNpbmNsdWRlICJzY19wcmludC5oIgorCitpbnQgbWFpbigpCit7CisgICAgc2NfcHJpbnRmKCJIZWxsbyBmcm9tIFlDUjEhXG4iKTsKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9pc3Jfc2FtcGxlL01ha2VmaWxlIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2lzcl9zYW1wbGUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM5NWU3NAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9pc3Jfc2FtcGxlL01ha2VmaWxlCkBAIC0wLDAgKzEsMjYgQEAKK3NyY19kaXIgOj0gJChkaXIgJChsYXN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKSkKKworTERGTEFHUyA6PSAtbm9zdGFydGZpbGVzIC1ub3N0ZGxpYiAtbWFyY2g9cnYzMiQoQVJDSCkgLW1hYmk9JChBQkkpCitBRERfQVNNX01BQ1JPIDo9IC1EQVNNCisKK2lmZXEgKCQoSVBJQykgLDEpCisgICAgQUREX0FTTV9NQUNSTyArPSAtRElQSUNfRU5BQkxFRAorZW5kaWYKKworaWZlcSAoJChWRUNUX0lSUSkgLDEpCisgICAgQUREX0FTTV9NQUNSTyArPSAtRFZFQ1RfSVJRX0VOQUJMRUQKK2VuZGlmCithc21fc3JjIDo9IGlzcl9zYW1wbGUuUworCisjIG92ZXJyaWRlIGxkIHNjcmlwdAorbGRfc2NyaXB0IDo9ICQoaW5jX2RpcikvbGluay5sZAorCitpbmNsdWRlICQoaW5jX2RpcikvY29tbW9uLm1rCisKK2RlZmF1bHQ6IGxvZ19yZXF1ZXN0ZWRfdGd0ICQoYmxkX2RpcikvaXNyX3NhbXBsZS5lbGYgJChibGRfZGlyKS9pc3Jfc2FtcGxlLmhleCAkKGJsZF9kaXIpL2lzcl9zYW1wbGUuZHVtcAorCitsb2dfcmVxdWVzdGVkX3RndDoKKwllY2hvIGlzcl9zYW1wbGUuaGV4ID4+ICQoYmxkX2RpcikvdGVzdF9pbmZvCisKK2NsZWFuOgorCSQoUk0pJChhc21fb2JqcykgJChibGRfZGlyKS9pc3Jfc2FtcGxlLmVsZiAkKGJsZF9kaXIpL2lzcl9zYW1wbGUuaGV4ICQoYmxkX2RpcikvaXNyX3NhbXBsZS5kdW1wClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2lzcl9zYW1wbGUvaXNyX3NhbXBsZS5TIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2lzcl9zYW1wbGUvaXNyX3NhbXBsZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YjNkNjMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvaXNyX3NhbXBsZS9pc3Jfc2FtcGxlLlMKQEAgLTAsMCArMSwyOTEgQEAKKyNpbmNsdWRlICJyaXNjdl9tYWNyb3MuaCIKKyNpbmNsdWRlICJzY190ZXN0LmgiCisKKy5hbHRtYWNybworLy8gZ2xvYmFsIGludGVycnVwdCBiaXQKKyNkZWZpbmUgTVNJRSAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IElSUV9NX1NPRlQpICAgICAgIC8vbWFjaGluZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgZW5hYmxlCisjZGVmaW5lIE1USUUgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCBJUlFfTV9USU1FUikgICAgICAvL21hY2hpbmUgdGltZXIgaW50ZXJydXB0IGVuYWJsZQorI2RlZmluZSBNRUlFICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgSVJRX01fRVhUKSAgICAgICAgLy9tYWNoaW5lIGV4dGVybmFsIGludGVycnVwdCBlbmFibGUKKyNkZWZpbmUgTUNBVVNFX0VYVF9JUlEgICAgICAgICAgICAgICgxIDw8IDMxIHwgSVJRX01fRVhUKQorI2RlZmluZSBNQ0FVU0VfU09GVF9JUlEgICAgICAgICAgICAgKDEgPDwgMzEgfCBJUlFfTV9TT0ZUKQorI2RlZmluZSBNQ0FVU0VfVE1SX0lSUSAgICAgICAgICAgICAgKDEgPDwgMzEgfCBJUlFfTV9USU1FUikKKworLy8gSVBJQworI2RlZmluZSBJUlFfTElORVNfQUREUiAgICAgICAgICAgICAgMHgxMDAyMDAxOCAgICAgIC8vIHNpbXVsYXRpb24KKyNkZWZpbmUgVFJJR19FWFRfSVJRX0FERFIgICAgICAgICAgIDB4MTAwMjAwMTggICAgICAvLyBleHRlcm5hbCBpcnEgaXMgdHJpZ2dlcmVkIHdoZW4gdGIgbWVtb3J5IGlzIHNldCB0byBub24temVybyAvLyBCaXQgWzE1OjBdCisjZGVmaW5lIFRSSUdfU1dfSVJRX0FERFIgICAgICAgICAgICAweDEwMDIwMDE4ICAgICAgLy8gc29mdHdhcmUgaXJxIGlzIHRyaWdnZXJlZCB3aGVuIHRiIG1lbW9yeSBpcyBzZXQgdG8gbm9uLXplcm8gLy8gQml0IFsxNl0KKworI2RlZmluZSBJUElDX0VPSSAgICAgICAgICAgICAgICAgICAgMHhCRjQgICAgICAgICAgIC8vIGVuZCBvZiBpbnRlcnJ1cHQKKyNkZWZpbmUgSVBJQ19TT0kgICAgICAgICAgICAgICAgICAgIDB4QkY1ICAgICAgICAgICAvLyBzdGFydCBvZiBpbnRlcnJ1cHQKKyNkZWZpbmUgSVBJQ19JRFggICAgICAgICAgICAgICAgICAgIDB4QkY2ICAgICAgICAgICAvLyBpbmRleCByZWdpc3RlcgorI2RlZmluZSBJUElDX0lDU1IgICAgICAgICAgICAgICAgICAgMHhCRjcgICAgICAgICAgIC8vIGludGVycnVwdCBjb250cm9sIHN0YXR1cyByZWdpc3RlcgorCisvLyBJUElDIEludGVycnVwdCBDb25zdHJvbCBTdGF0dXMgUmVnaXN0ZXIKKyNkZWZpbmUgSVBJQ19JQ1NSX0lQICAgICAgICAgICAgICAgICgxIDw8IDApICAgICAgICAvLyBpbnRlcnJ1cHQgcGVuZGluZworI2RlZmluZSBJUElDX0lDU1JfSUUgICAgICAgICAgICAgICAgKDEgPDwgMSkgICAgICAgIC8vIGludGVycnVwdCBlbmFibGUKKyNkZWZpbmUgSVBJQ19JQ1NSX0lNICAgICAgICAgICAgICAgICgxIDw8IDIpICAgICAgICAvLyBpbnRlcnJ1cHQgbW9kZSAoMC8xOiBsZXZlbC9lZGdlKQorI2RlZmluZSBJUElDX0lDU1JfSU5WICAgICAgICAgICAgICAgKDEgPDwgMykgICAgICAgIC8vIGxpbmUgaW52ZXJzaW9uCisjZGVmaW5lIElQSUNfSUNTUl9JUyAgICAgICAgICAgICAgICAoMSA8PCA0KSAgICAgICAgLy8gaW4gc2VydmljZQorCisvLyAgSW50ZXJydXB0IGxpbmVzIGluIHVzZSAKKyNkZWZpbmUgSVBJQ19JUlFfTElORTkgICAgICAgICAgICAgIDkKKyNkZWZpbmUgRVhUX0lSUV9MSU5FX0NPTU1PTiAgICAgICAgIDAKKworI2luY2x1ZGUgInRpbWVyLmgiCisjaW5jbHVkZSAicmVsb2MuaCIKKworLm1hY3JvIGptcF9zY19leGl0CisgICAgbGEgIHQwLCBzY19leGl0CisgICAganIgIHQwCisuZW5kbQorCisgICAgLnNlY3Rpb24gLnRleHQuaW5pdAorICAgIC5vcHRpb24gbm9ydmMKKyAgICAuZ2xvYmwgX3N0YXJ0CisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRyYXAgaGFuZGxlcnMKKy8vIDB4WFhYWFhYMDAKKyAgICAub3B0aW9uIG5vcnZjCisub3JnICg2NCozKQorCisvLzB4WFhYWFhYQzAKKyAgICAuYmFsaWduIDY0CittYWNoaW5lX3RyYXBfZW50cnk6Cit2ZWNfdXNyX3NvZnQ6CisjaWZkZWYgVkVDVF9JUlFfRU5BQkxFRAorICAgIHRyYXBfZW50cnk6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgIHZlY19zdXBlcnZpc29yX3NvZnQ6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgIHZlY19yZXNlcnZlZDE6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgIHZlY19tYWNoaW5lX3NvZnQ6CisgICAgICAgIGogICAgdmVjX21hY2hpbmVfc29mdF9oYW5kbGVyCisgICAgdmVjX3Vzcl90bXI6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgIHZlY19zdXBlcnZpc29yX3RtcjoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX3Jlc2VydmVkMjoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX21hY2hpbmVfdG1yOgorICAgICAgICBqICAgIHZlY19tYWNoaW5lX3Rtcl9oYW5kbGVyCisgICAgdmVjX3Vzcl9leHQ6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgIHZlY19zdXBlcnZpc29yX2V4dDoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX3Jlc2VydmVkMzoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX21hY2hpbmVfZXh0OgorICAgICAgICBqICAgIHZlY19tYWNoaW5lX2V4dF9oYW5kbGVyCisgICAgdmVjX3Jlc2VydmVkNDoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgICAgICBqICAgIF90cmFwX2ZhaWwKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisjZWxzZQorICAgIHRyYXBfZW50cnk6CisgICAgICAgIGogICAgZGlyZWN0X2lycV9oYW5kbGVyCisgICAgdmVjX3N1cGVydmlzb3Jfc29mdDoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX3Jlc2VydmVkMToKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX21hY2hpbmVfc29mdDoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX3Vzcl90bXI6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgIHZlY19zdXBlcnZpc29yX3RtcjoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX3Jlc2VydmVkMjoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX21hY2hpbmVfdG1yOgorICAgICAgICBqICAgIF90cmFwX2ZhaWwKKyAgICB2ZWNfdXNyX2V4dDoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX3N1cGVydmlzb3JfZXh0OgorICAgICAgICBqICAgIF90cmFwX2ZhaWwKKyAgICB2ZWNfcmVzZXJ2ZWQzOgorICAgICAgICBqICAgIF90cmFwX2ZhaWwKKyAgICB2ZWNfbWFjaGluZV9leHQ6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgIHZlY19yZXNlcnZlZDQ6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgICAgICBqICAgIF90cmFwX2ZhaWwKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgICAgIGogICAgX3RyYXBfZmFpbAorCisjZW5kaWYgLy8gaWZkZWYgVkVDVF9JUlFfRU5BQkxFRAorCisKKyAgICAuYmFsaWduIDY0Citfc3RhcnQ6CisgICAgbGEgICAgICAgICAgICAgICAgICB0MCwgbWFjaGluZV90cmFwX2VudHJ5CisgICAgY3NydyAgICAgICAgICAgICAgICBtdHZlYywgdDAKKworICAgIGxhICAgICAgICAgICAgICAgICAgdDAsICB0ZXN0X3N0YXJ0CisgICAganIgICAgICAgICAgICAgICAgICAodDApCisKKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC5vcHRpb24gbm9ydmMKKyAgICAuYmFsaWduIDY0Cit0ZXN0X3N0YXJ0OgorICAgIAorICAgIGxhICAgICAgICAgICAgICAgICAgdDAsIHRyYXBfZW50cnkKKyAgICBjc3J3ICAgICAgICAgICAgICAgIG10dmVjLCB0MCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2V0IG10dmVjIHRvIHRyYXBfZW50cnkKKyAgICAjaWZkZWYgVkVDVF9JUlFfRU5BQkxFRAorICAgICAgICBjc3JzaSAgICAgICAgICAgICAgIG10dmVjLCAxICAgICAgICAgICAgICAgICAgICAgICAvLyBzZXQgdmVjdG9yZWQgbW9kZQorICAgICNlbHNlCisgICAgICAgIGNzcnNpICAgICAgICAgICAgICAgbXR2ZWMsIDAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNldCBkaXJlY3QgbW9kZQorICAgICNlbmRpZgorCisgICAgLy8vIGNvbmZpZ3VyaW5nIHRpbWVyIGludGVycnVwdCAvLy8gCisgICAgX3Jlc2V0X210aW1lY21wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzZXQgdGltZXIKKyAgICBfcnVuX3RpbWVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBydW4gdGltZXIKKyAgICBjc3JzICAgICAgICAgICAgICAgIG1zdGF0dXMsIE1TVEFUVVNfTUlFICAgICAgICAgICAvLyBlbmFibGUgZ2xvYmFsIGludGVycnVwdAorICAgIGxpICAgICAgICAgICAgICAgICAgYTAsIE1USUUgICAgICAgICAgICAgICAgICAgICAgIAorICAgIGNzcnMgICAgICAgICAgICAgICAgbWllLCBhMCAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVuYWJsZSB0aW1lciBpbnRlcnJ1cHQKKyAgICBsaSAgICAgICAgICAgICAgICAgIHQyLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNldCB0aW1lciBjb3VudGVyID0gMCAodXBkYXRlZCBpbiBpc3IpCisgICAgX3JlYWRfbXRpbWUgICAgICAgICBzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVhZCB0aW1lciB2YWx1ZQorICAgIGFkZGkgICAgICAgICAgICAgICAgczEsIHMxLCAyNTYKKyAgICBfd3JpdGVfbXRpbWVjbXBfMzIgIHMxIAorICAgIHdmaSAgCisKKworICAgLy8vIGNvbmZpZ3VyaW5nIGV4dGVybmFsIGludGVycnVwdCAvLy8gCisgICAgY3NydyAgICAgICAgICAgICAgICBtaWUsIHplcm8gICAgICAgICAgICAgICAgICAgICAgLy8gZGlzYWJsZSBhbGwgaW50ZXJydXB0cworICAgIGxpICAgICAgICAgICAgICAgICAgdDAsIElSUV9MSU5FU19BRERSCisgICAgc2ggICAgICAgICAgICAgICAgICB6ZXJvLCAodDApICAgICAgICAgICAgICAgICAgICAgLy8gc2V0IGFsbCBleHRlcmluYWwgaW50ZXJydXB0IGxpbmVzIGxvdworICAgICNpZmRlZiBJUElDX0VOQUJMRUQKKyAgICAgICAgbGkgICAgICAgICAgICAgICAgICB0MCwgSVBJQ19JUlFfTElORTkKKyAgICAgICAgY3NydyAgICAgICAgICAgICAgICBJUElDX0lEWCwgdDAgICAgICAgICAgICAgICAvLyBzZXQgSVBJQyB0byBleHBlY3QgaW50ZXJ1cHQgb24gbGluZSA5Li4uCisgICAgICAgIGxpICAgICAgICAgICAgICAgICAgdDAsIChJUElDX0lDU1JfSUUgfCBJUElDX0lDU1JfSU0pCisgICAgICAgIGNzcncgICAgICAgICAgICAgICAgSVBJQ19JQ1NSLCB0MCAgICAgICAgICAgICAgLy8gIC4uLi5lbmFibGUgaW50ZXJydXB0LHNldCBlZGdlIGludGVycnVwdCBtb2RlCisgICAgI2VuZGlmCisgICAgbGkgICAgICAgICAgICAgICAgICB0MCwgTUVJRQorICAgIGNzcnMgICAgICAgICAgICAgICAgbWllLCB0MCAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVuYWJsZSBleHRlcm5hbCBpbnRlcnJ1cHQgCisgICAgbGkgICAgICAgICAgICAgICAgICB0MCwgVFJJR19FWFRfSVJRX0FERFIKKyAgICAjaWZkZWYgSVBJQ19FTkFCTEVEICAgICAgICAgIAorICAgICAgICBsaSAgICAgICAgICAgICAgICAgIHQxLCAoMSA8PCBJUElDX0lSUV9MSU5FOSkKKyAgICAjZWxzZQorICAgICAgICBsaSAgICAgICAgICAgICAgICAgIHQxLCAoMSA8PCBFWFRfSVJRX0xJTkVfQ09NTU9OKQorICAgICNlbmRpZgorICAgIHNoICAgICAgICAgICAgICAgICAgdDEsICh0MCkgICAgICAgICAgICAgICAgICAgICAgIC8vc2VuZCBjb21tYW5kIHRvIGdlbmVyYXRlIGV4dGVybmFsIGludGVycnVwdCBvbiBsaW5lIDkgdG8gdGVzdGJlbmNoCisgICAgbm9wCisgICAgbm9wCisgICAgbm9wCisgICAgbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93YWl0IGZvciBleHRlcm5hbCBpbnRlcnJ1cHQKKworCisgICAgLy8vIGNvbmZpZ3VyaW5nIHNvZnR3YXJlIGludGVycnVwdCAvLy8gCisgICAgY3NydyAgICAgICAgICAgICAgICBtaWUsIHplcm8gICAgICAgICAgICAgICAgICAgICAgLy8gZGlzYWJsZSBhbGwgaW50ZXJydXB0cworICAgIGxpICAgICAgICAgICAgICAgICAgdDAsIFRSSUdfU1dfSVJRX0FERFIKKyAgICBsaSAgICAgICAgICAgICAgICAgIHQxLCAweDAwMDEwMDAwICAgICAgICAgICAgICAgICAvLyBTb2Z0IGlyZXEgYml0IFsxNl0gCisgICAgc3cgICAgICAgICAgICAgICAgICB0MSwgKHQwKSAgICAgICAgICAgICAgICAgICAgICAgLy9zZW5kIGNvbW1hbmQgdG8gZ2VuZXJhdGUgc29mdHdhcmUgaW50ZXJydXB0IAorICAgIGxpICAgICAgICAgICAgICAgICAgdDAsIE1TSUUKKyAgICBjc3JzICAgICAgICAgICAgICAgIG1pZSwgdDAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbmFibGUgc29mdHdhcmUgaW50ZXJydXB0IAorICAgIG5vcAorICAgIG5vcAorICAgIG5vcAorICAgIG5vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vd2FpdCBmb3Igc29mdHdhcmUgaW50ZXJydXB0CisKKyAgICBsaSAgICAgICAgICAgICAgICAgIHMxLCAzCisgICAgbGkgICAgICAgICAgICAgICAgICBhMCwgMAorICAgIGJlcSAgICAgICAgICAgICAgICAgdDIsIHMxLCAxZgorICAgIGxpICAgICAgICAgICAgICAgICAgYTAsIC0xCisxOgorICAgIGptcF9zY19leGl0CisKKworI2lmbmRlZiBWRUNUX0lSUV9FTkFCTEVECisKK2RpcmVjdF9pcnFfaGFuZGxlcjoKKyAgICBjc3JyICAgICAgICAgICAgYTEsIG1jYXVzZQorICAgIGxpICAgICAgICAgICAgICBhNSwgTUNBVVNFX1RNUl9JUlEgICAgICAvLzB4ODAwMDAwMDcgLS0gbWNhdXNlID0gdG1yLmlycQorICAgIGJlcSAgICAgICAgICAgICBhMSwgYTUsIHZlY19tYWNoaW5lX3Rtcl9oYW5kbGVyCisgICAgbGkgICAgICAgICAgICAgIGE1LCBNQ0FVU0VfU09GVF9JUlEgICAgIC8vMHg4MDAwMDAwMyAtLSBtY2F1c2UgPSBzb2Z0LmlycQorICAgIGJlcSAgICAgICAgICAgICBhMSwgYTUsIHZlY19tYWNoaW5lX3NvZnRfaGFuZGxlcgorICAgIGxpICAgICAgICAgICAgICBhNSwgTUNBVVNFX0VYVF9JUlEgICAgICAvLzB4ODAwMDAwMEIgLS0gbWNhdXNlID0gZXh0LmlycQorICAgIGJlcSAgICAgICAgICAgICBhMSwgYTUsIHZlY19tYWNoaW5lX2V4dF9oYW5kbGVyCisgICAgbXJldAorI2VuZGlmCisKK3ZlY19tYWNoaW5lX3Rtcl9oYW5kbGVyOgorICAgIGNzcnIgICAgICAgICAgICBhMSwgbWNhdXNlCisgICAgbGkgICAgICAgICAgICAgIGE1LCBNQ0FVU0VfVE1SX0lSUSAgICAgIC8vMHg4MDAwMDAwNyAtLSBtY2F1c2UgPSB0bXIuaXJxCisgICAgbGkgICAgICAgICAgICAgIGEwLCAtMQorICAgIGJuZSAgICAgICAgICAgICBhMSwgYTUsIGNoZWNrX2ZhaWwKKyAgICBjc3JyICAgICAgICAgICAgdDEsIG1pcAorICAgIGxpICAgICAgICAgICAgICB0MCwgTUlQX01USVAKKyAgICBhbmQgICAgICAgICAgICAgdDAsIHQxLCB0MAorICAgIGJlcXogICAgICAgICAgICB0MCwgY2hlY2tfZmFpbAorI2lmZGVmIElQSUNfRU5BQkxFRAorICAgIGNzcncgICAgICAgICAgICBJUElDX1NPSSwgemVybworICAgIGNzcncgICAgICAgICAgICBJUElDX0VPSSwgemVybworI2VuZGlmCisgICAgX3Jlc2V0X210aW1lY21wCisgICAgY3NyciAgICAgICAgICAgIHQxLCBtaXAKKyAgICBhbmRpICAgICAgICAgICAgdDEsIHQxLCBNSVBfTVRJUAorICAgIGJuZSAgICAgICAgICAgICB0MSwgemVybywgY2hlY2tfZmFpbAorICAgIGFkZGkgICAgICAgICAgICB0MiwgdDIsIDEgICAgICAgICAgICAgICAvLyB0bXIgaXJxIGNvdW50ZXIgdXBkYXRlCisgICAgbXJldAorCit2ZWNfbWFjaGluZV9leHRfaGFuZGxlcjoKKworICAgIGNzcnIgICAgICAgICAgICBhMSwgbWNhdXNlCisgICAgbGkgICAgICAgICAgICAgIGE1LCBNQ0FVU0VfRVhUX0lSUSAgICAgIC8vMHg4MDAwMDAwQiAtLSBtY2F1c2UgPSBleHQuaXJxCisgICAgbGkgICAgICAgICAgICAgIGEwLCAtMQorICAgIGJuZSAgICAgICAgICAgICBhMSwgYTUsIGNoZWNrX2ZhaWwKKyAgICBjc3JyICAgICAgICAgICAgdDEsIG1pcAorICAgIGxpICAgICAgICAgICAgICB0MCwgTUlQX01FSVAKKyAgICBhbmQgICAgICAgICAgICAgdDAsIHQxLCB0MAorICAgIGJlcXogICAgICAgICAgICB0MCwgY2hlY2tfZmFpbAorI2lmZGVmIElQSUNfRU5BQkxFRAorICAgIGNzcncgICAgICAgICAgICBJUElDX1NPSSwgemVybworICAgIGNzcncgICAgICAgICAgICBJUElDX0VPSSwgemVybworI2VuZGlmCisgICAgbGkgICAgICAgICAgICAgICAgICB0MCwgTUVJRQorICAgIGNzcmMgICAgICAgICAgICAgICAgbWllLCB0MCAgICAgICAgICAgICAvLyBkaXNhYmxlIHNvZnR3YXJlIGludGVycnVwdCAKKworICAgIGxpICAgICAgICAgICAgICB0MCwgVFJJR19FWFRfSVJRX0FERFIKKyAgICBsaSAgICAgICAgICAgICAgdDEsIEVYVF9JUlFfTElORV9DT01NT04gICAgICAgICAKKyAgICBzaCAgICAgICAgICAgICAgdDEsICh0MCkgICAgICAgICAgICAgICAgLy8gc2VuZCBjb21tYW5kIHRvIGRpc2FibGUgZXh0ZXJuYWwgaW50ZXJydXB0IAorICAgICAKKyAgICBjc3JyICAgICAgICAgICAgdDEsIG1pcAorICAgIGxpICAgICAgICAgICAgICB0MCwgTUlQX01FSVAKKyAgICBibmUgICAgICAgICAgICAgdDEsIHplcm8sIGNoZWNrX2ZhaWwKKyAgICBhZGRpICAgICAgICAgICAgdDIsIHQyLCAxICAgICAgICAgICAgICAgLy8gZXh0IGlycSBjb3VudGVyIHVwZGF0ZQorICAgIG1yZXQKKwordmVjX21hY2hpbmVfc29mdF9oYW5kbGVyOgorICAgIGNzcnIgICAgICAgICAgICBhMSwgbWNhdXNlCisgICAgbGkgICAgICAgICAgICAgIGE1LCBNQ0FVU0VfU09GVF9JUlEgICAgIC8vMHg4MDAwMDAwMyAtLSBtY2F1c2UgPSBzb2Z0LmlycQorICAgIGxpICAgICAgICAgICAgICBhMCwgLTEKKyAgICBibmUgICAgICAgICAgICAgYTEsIGE1LCBjaGVja19mYWlsCisgICAgY3NyciAgICAgICAgICAgIHQxLCBtaXAKKyAgICBsaSAgICAgICAgICAgICAgdDAsIE1JUF9NU0lQCisgICAgYW5kICAgICAgICAgICAgIHQwLCB0MSwgdDAKKyAgICBiZXF6ICAgICAgICAgICAgdDAsIGNoZWNrX2ZhaWwKKyAgICAjaWZkZWYgSVBJQ19FTkFCTEVECisgICAgICAgY3NydyAgICAgICAgIElQSUNfU09JLCB6ZXJvCisgICAgICAgY3NydyAgICAgICAgIElQSUNfRU9JLCB6ZXJvCisgICAgI2VuZGlmCisgICAgbGkgICAgICAgICAgICAgIHQwLCBNU0lFCisgICAgY3NyYyAgICAgICAgICAgIG1pZSwgdDAgICAgICAgICAgICAgICAgIC8vIGRpc2FibGUgc29mdHdhcmUgaW50ZXJydXB0IAorICAgIGxpICAgICAgICAgICAgICB0MCwgVFJJR19TV19JUlFfQUREUgorICAgIGxpICAgICAgICAgICAgICB0MSwgMHgwMDAwMDAwMAorICAgIHN3ICAgICAgICAgICAgICB0MSwgKHQwKSAgICAgICAgICAgICAgICAvLyBzZW5kIGNvbW1hbmQgdG8gc3RvcCBnZW5lcmF0aW5nICBzb2Z0d2FyZSBpbnRlcnJ1cHQgCisgICAgbGkgICAgICAgICAgICAgIHQwLCBNSVBfTVNJUAorICAgIGNzcmMgICAgICAgICAgICBtaXAsIHQwCisgICAgY3NyciAgICAgICAgICAgIHQxLCBtaXAKKyAgICBsaSAgICAgICAgICAgICAgdDAsIE1JUF9NU0lQCisgICAgYW5kICAgICAgICAgICAgIHQxLCB0MSwgdDAKKyAgICBibmUgICAgICAgICAgICAgdDEsIHplcm8sIGNoZWNrX2ZhaWwKKyAgICBhZGRpICAgICAgICAgICAgdDIsIHQyLCAxICAgICAgICAgICAgICAgLy8gZXh0IGlycSBjb3VudGVyIHVwZGF0ZQorICAgIG1yZXQKKworY2hlY2tfZmFpbDoKKyAgICBsYSAgICAgICAgICAgICAgdDAsIHNjX2V4aXQKKyAgICBqciAgICAgICAgICAgICAgdDAKKworX3RyYXBfZmFpbDoKKyAgICBsaSAgICAgICAgICAgICAgYTAsIC0xCisgICAgaiAgICAgICAgICAgICAgIGNoZWNrX2ZhaWwKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9pc3Jfc2FtcGxlL3RpbWVyLmggYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvaXNyX3NhbXBsZS90aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyN2I4NDkKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvaXNyX3NhbXBsZS90aW1lci5oCkBAIC0wLDAgKzEsOTcgQEAKKyNpZm5kZWYgX19USU1FUl9fSAorI2RlZmluZSBfX1RJTUVSX19ICisKKworCisjZGVmaW5lIE1FTV9NVElNRV9NQVNLICAweEYwMDAwMDAwCisjZGVmaW5lIE1FTV9NVElNRV9DVFJMICAweDBDNDkwMDAwCisjZGVmaW5lIE1FTV9NVElNRV9ESVYgICAweDBDNDkwMDA0CisjZGVmaW5lIE1FTV9NVElNRSAgICAgICAweDBDNDkwMDA4CisjZGVmaW5lIE1FTV9NVElNRUggICAgICAweDBDNDkwMDBDCisjZGVmaW5lIE1FTV9NVElNRUNNUCAgICAweDBDNDkwMDEwCisjZGVmaW5lIE1FTV9NVElNRUNNUEggICAweDBDNDkwMDE0CisKKyNkZWZpbmUgVE1QICAgdDAKKyNkZWZpbmUgVE1QMiAgdDEKKyNkZWZpbmUgVE1QMyAgdDIKKworLy8gUmVzZXQKKy5tYWNybyBfcmVzZXRfbXRpbWUKKyAgICBsaSAgICAgICAgICBUTVAsIE1FTV9NVElNRQorICAgIHN3ICAgICAgICAgIHplcm8sIDAoVE1QKQorICAgIHN3ICAgICAgICAgIHplcm8sIDQoVE1QKQorLmVuZG0KKworLm1hY3JvIF9yZXNldF9tdGltZWNtcAorICAgIGxpICAgICAgICAgIFRNUCwgTUVNX01USU1FQ01QCisgICAgbm90ICAgICAgICAgVE1QMiwgemVybworICAgIHN3ICAgICAgICAgIFRNUDIsIDAoVE1QKQorICAgIHN3ICAgICAgICAgIFRNUDIsIDQoVE1QKQorLmVuZG0KKworLy8gV3JpdGUKKy5tYWNybyBfd3JpdGVfbXRpbWVfY3RybCByZWcKKyAgICBsaSAgICAgICAgICBUTVAsIE1FTV9NVElNRV9DVFJMCisgICAgc3cgICAgICAgICAgXHJlZywgMChUTVApCisuZW5kbQorCisubWFjcm8gX3dyaXRlX210aW1lX2RpdiByZWcKKyAgICBsaSAgICAgICAgICBUTVAsIE1FTV9NVElNRV9ESVYKKyAgICBzdyAgICAgICAgICBccmVnLCAwKFRNUCkKKy5lbmRtCisKKy5tYWNybyBfd3JpdGVfbXRpbWVjbXBfMzIgcmVnCisgICAgbGkgICAgICAgICAgVE1QLCBNRU1fTVRJTUVDTVAKKyAgICBsaSAgICAgICAgICBUTVAyLCAtMQorICAgIHN3ICAgICAgICAgIFRNUDIsIDAoVE1QKQorICAgIHN3ICAgICAgICAgIHplcm8sIDQoVE1QKQorICAgIHN3ICAgICAgICAgIFxyZWcsIDAoVE1QKQorLmVuZG0KKworLm1hY3JvIF93cml0ZV9tdGltZSByZWcKKyAgICBsaSAgICAgICAgICBUTVAsIE1FTV9NVElNRQorICAgIHN3ICAgICAgICAgIFxyZWcsIDAoVE1QKQorLmVuZG0KKworLm1hY3JvIF9yZWFkX210aW1lIHJlZworICAgIGxpICAgICAgICAgIFRNUCwgTUVNX01USU1FCisgICAgbHcgICAgICAgICAgXHJlZywgMChUTVApCisuZW5kbQorCisvLyBSZWFkCisubWFjcm8gX3JlYWRfbXRpbWVjbXAgcmVnCisgICAgbGkgICAgICAgICAgVE1QLCBNRU1fTVRJTUVDTVAKKyAgICBsdyAgICAgICAgICBccmVnLCAwKFRNUCkKKy5lbmRtCisKKy5tYWNybyBfcmVhZF9tdGltZV9jdHJsIHJlZworICAgIGxpICAgICAgICAgIFRNUCwgTUVNX01USU1FX0NUUkwKKyAgICBsdyAgICAgICAgICBccmVnLCAwKFRNUCkKKy5lbmRtCisKKy5tYWNybyBfcmVhZF9tdGltZV9kaXYgcmVnCisgICAgbGkgICAgICAgICAgVE1QLCBNRU1fTVRJTUVfRElWCisgICAgbHcgICAgICAgICAgXHJlZywgMChUTVApCisuZW5kbQorCisvLyBNaXNjCisubWFjcm8gX3J1bl90aW1lcgorICAgIGxpICAgICAgICAgIFRNUCwgTUVNX01USU1FX0NUUkwKKyAgICBsdyAgICAgICAgICBUTVAyLCAwKFRNUCkKKyAgICBsaSAgICAgICAgICBUTVAzLCAoMSA8PCBZQ1IxX01USU1FX0NUUkxfRU4pCisgICAgb3IgICAgICAgICAgVE1QMiwgVE1QMiwgVE1QMworICAgIHN3ICAgICAgICAgIFRNUDIsIDAoVE1QKQorLmVuZG0KKworLm1hY3JvIF9zdG9wX3RpbWVyCisgICAgbGkgICAgICAgICAgVE1QLCBNRU1fTVRJTUVfQ1RSTAorICAgIGx3ICAgICAgICAgIFRNUDIsIDAoVE1QKQorICAgIGxpICAgICAgICAgIFRNUDMsICgxIDw8IFlDUjFfTVRJTUVfQ1RSTF9FTikKKyAgICBub3QgICAgICAgICBUTVAzLCBUTVAzCisgICAgYW5kICAgICAgICAgVE1QMiwgVE1QMiwgVE1QMworICAgIHN3ICAgICAgICAgIFRNUDIsIDAoVE1QKQorLmVuZG0KKworCisKKyNlbmRpZiAvLyAjaWZuZGVmIF9fVElNRVJfX0gKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL01ha2VmaWxlIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThmM2Q1ZgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL01ha2VmaWxlCkBAIC0wLDAgKzEsMjAwIEBACisjIyBAZmlsZQorIyMgIFlDUiogdGVzdHMKKyMjCisjIworCitBUkNIID89aW0KK292ZXJyaWRlIEFSQ0g6PXJ2MzIkKEFSQ0gpCisKK3NyY19kaXIgICAgICAgOj0gJChDVVJESVIpCitSSVNDVl9DT01QTElBTkNFX1RFU1RTIDo9ICQoc3JjX2RpcikvLi4vLi4vZGVwZW5kZW5jaWVzL3Jpc2N2LWNvbXBsaWFuY2UvCisKKyNJIElNIElNQyBJQworI0VNIEVNQyBFQworCitpZmVxIChydjMyZSwkKGZpbmRzdHJpbmcgcnYzMmUsJChBUkNIKSkpCisgICAgJChpbmZvID4+PiBSVjMyRSAtIG5vIGNvbXBsaWFuY2UgdGVzdHMpCitlbHNlICMjIGlmZGVmIFlDUl9CQVNFX1JWRV9FWFQKKyAgI2lmZXEgKHJ2MzJpLCQoZmluZHN0cmluZyBydjMyaSwkKEFSQ0gpKSkKKyAgaWZlcSAoJChBUkNIKSwkKGZpbHRlciAkKEFSQ0gpLHJ2MzJpIHJ2MzJpbSBydjMyaW1jIHJ2MzJpYykpCisgICAgJChpbmZvID4+PiBJMzIgVEVTVFMpCisgICAgaW5jbHVkZWRfaSArPSAkKGZpbHRlciAlLlMsXAorICAgICAgICAgICAgICAgICAgICAgICAgJCh3aWxkY2FyZCAkKFJJU0NWX0NPTVBMSUFOQ0VfVEVTVFMpL3Jpc2N2LXRlc3Qtc3VpdGUvcnYzMmkvc3JjLyopKQorCWluY2x1ZGVkX2kgKz0gJChmaWx0ZXIgJS5TLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICQod2lsZGNhcmQgJChSSVNDVl9DT01QTElBTkNFX1RFU1RTKS9yaXNjdi10ZXN0LXN1aXRlL3J2MzJaaWNzci9zcmMvKikpCisJaW5jbHVkZWRfaSArPSAkKGZpbHRlciAlLlMsXAorICAgICAgICAgICAgICAgICAgICAgICAgJCh3aWxkY2FyZCAkKFJJU0NWX0NPTVBMSUFOQ0VfVEVTVFMpL3Jpc2N2LXRlc3Qtc3VpdGUvcnYzMlppZmVuY2VpL3NyYy8qKSkKKyAgICBjb21wbGlhbmNlX3NldCArPSAkKGluY2x1ZGVkX2kpCisgIGVuZGlmCisKKyAgIyQoaWYgb3IgaWZlcShydjMyaW0sJChmaW5kc3RyaW5nIHJ2MzJpbSwkKEFSQ0gpKSksIChydjMyaW1jLCQoZmluZHN0cmluZyBydjMyaW1jLCQoQVJDSCkpKSkKKyAgaWZlcSAoJChBUkNIKSwkKGZpbHRlciAkKEFSQ0gpLCBydjMyaW0gcnYzMmltYykpCisgICAgJChpbmZvID4+PiBJTTMyIFRFU1RTKQorICAgIGluY2x1ZGVkX2ltICs9ICQoZmlsdGVyICUuUyxcCisgICAgICAgICAgICAgICAgICAgICAgICAkKHdpbGRjYXJkICQoUklTQ1ZfQ09NUExJQU5DRV9URVNUUykvcmlzY3YtdGVzdC1zdWl0ZS9ydjMyaW0vc3JjLyopKQorICAgIGNvbXBsaWFuY2Vfc2V0ICs9ICQoaW5jbHVkZWRfaW0pCisgIGVuZGlmICMjCisKKyAgaWZlcSAocnYzMmltYywkKGZpbmRzdHJpbmcgcnYzMmltYywkKEFSQ0gpKSkKKyAgICAkKGluZm8gPj4+IElNQzMyIFRFU1RTKQorICAgIGluY2x1ZGVkX2ltYyArPSAkKGZpbHRlciAlLlMsXAorICAgICAgICAgICAgICAgICAgICAgICAgJCh3aWxkY2FyZCAkKFJJU0NWX0NPTVBMSUFOQ0VfVEVTVFMpL3Jpc2N2LXRlc3Qtc3VpdGUvcnYzMmltYy9zcmMvKikpCisgICAgY29tcGxpYW5jZV9zZXQgKz0gJChpbmNsdWRlZF9pbWMpCisgIGVuZGlmICMjIGlmZXEgKHJ2MzJpbWMsJChmaW5kc3RyaW5nIHJ2MzJpbWMsJChBUkNIKSkpCisgIGlmZXEgKHJ2MzJpYywkKGZpbmRzdHJpbmcgcnYzMmljLCQoQVJDSCkpKQorICBlbmRpZgorZW5kaWYgIyMKKworCiskKGluZm8gPj4+JChBUkNIKSBzZXQgaW5jbHVkZWQpCisKK2lmZXEgKCQoY29tcGxpYW5jZV9zZXQpLCkKKyQoaW5mbyA+Pj4gTm8gY29tcGxpYW5jZSB0ZXN0cyBpbmNsdWRlZCkKK2VuZGlmCisKKyQoaW5mbyA+Pj4+PiBjb21wbGlhbmNlIHNldDogJChjb21wbGlhbmNlX3NldCkpCisKK2RzdF9kaXIgICAgICAgOj0gJChibGRfZGlyKQordGVzdF9uYW1lICAgICA6PSByaXNjdl9jb21wbGlhbmNlCitibGRfZGlyICAgICAgIDo9ICQoYWRkcHJlZml4ICQoZHN0X2RpcikvLCAkKHRlc3RfbmFtZSkpCitvYmpfZGlyICAgICAgIDo9ICQoYmxkX2RpcikvcmlzY3ZfY29tcGxpYW5jZV9vYmpzCisKKyNjdXRfbGlzdCAgICAgICs9IHNjYWxsIGNzciBzaGFtdCBzaW1wbGUKK2N1dF9saXN0ICs9IEktTUlTQUxJR05fSk1QLTAxIEktTUlTQUxJR05fTERTVC0wMSBJLUVCUkVBSy0wMSBJLUVDQUxMLTAxCityZWZlcmVuY2Vfc3JjICs9ICQod2lsZGNhcmQgJChSSVNDVl9DT01QTElBTkNFX1RFU1RTKS9yaXNjdi10ZXN0LXN1aXRlL3J2MzJpKi8qLyoucmVmZXJlbmNlX291dHB1dCkKK3JlZmVyZW5jZV9zcmMgKz0gJCh3aWxkY2FyZCAkKFJJU0NWX0NPTVBMSUFOQ0VfVEVTVFMpL3Jpc2N2LXRlc3Qtc3VpdGUvcnYzMlppKi8qLyoucmVmZXJlbmNlX291dHB1dCkKK3Rlc3RuYW1lcyAgICAgOj0gJChiYXNlbmFtZSAkKG5vdGRpciAkKGNvbXBsaWFuY2Vfc2V0KSkpCitmaWx0ZXJlZCAgICAgIDo9ICQoZmlsdGVyLW91dCAkKGN1dF9saXN0KSwkKHRlc3RuYW1lcykpCitvYmpzICAgICAgICAgIDo9ICQoYWRkcHJlZml4ICQoYmxkX2RpcikvLCQoZmlsdGVyZWQ6JT0lLm8pKQordGVzdF9lbGYgICAgICA6PSAkKGFkZHByZWZpeCAkKGRzdF9kaXIpL2NvbXBsaWFuY2VfLCQoZmlsdGVyZWQ6JT0lLmVsZikpCit0ZXN0X2hleCAgICAgIDo9ICQoYWRkcHJlZml4ICQoZHN0X2RpcikvY29tcGxpYW5jZV8sJChmaWx0ZXJlZDolPSUuaGV4KSkKK3Rlc3RfZHVtcCAgICAgOj0gJChhZGRwcmVmaXggJChibGRfZGlyKS9jb21wbGlhbmNlXywkKGZpbHRlcmVkOiU9JS5kdW1wKSkKKworY29tcGxpYW5jZV9tYWNyb3NfZmlsZSA6PSAkKHJvb3RfZGlyKS90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL2NvbXBsaWFuY2VfaW8uaAorY29tcGxpYW5jZV9vdXRwdXQgPz0gdHJ1ZQorCit0ZXN0bmFtZXNfaSAgICAgOj0gJChiYXNlbmFtZSAkKG5vdGRpciAkKGluY2x1ZGVkX2kpKSkKK3Rlc3RuYW1lc19pbSAgICAgOj0gJChiYXNlbmFtZSAkKG5vdGRpciAkKGluY2x1ZGVkX2ltKSkpCit0ZXN0bmFtZXNfaW1jICAgICA6PSAkKGJhc2VuYW1lICQobm90ZGlyICQoaW5jbHVkZWRfaW1jKSkpCitmaWx0ZXJlZF9pICAgICAgOj0gJChmaWx0ZXItb3V0ICQoY3V0X2xpc3QpLCQodGVzdG5hbWVzX2kpKQorZmlsdGVyZWRfaW0gICAgICA6PSAkKGZpbHRlci1vdXQgJChjdXRfbGlzdCksJCh0ZXN0bmFtZXNfaW0pKQorZmlsdGVyZWRfaW1jICAgICAgOj0gJChmaWx0ZXItb3V0ICQoY3V0X2xpc3QpLCQodGVzdG5hbWVzX2ltYykpCisKKyMgQVJDSF9GTEFHUyA6PSAtV2EsLW1hcmNoPXJ2MzJpbSAtbWFyY2g9cnYzMmltCisjIEFSQ0hfRkxBR1NfQyA6PSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMKK0NGTEFHUyA6PSAtSSQoaW5jX2RpcikgLUkkKHNyY19kaXIpIC1EQVNNIC1tYWJpPWlscDMyIC1EX19yaXNjdl94bGVuPTMyIC13CitMREZMQUdTIDo9IC1zdGF0aWMgLWZ2aXNpYmlsaXR5PWhpZGRlbiAtbm9zdGRsaWIgLW5vc3RhcnRmaWxlcyAtVCQoaW5jX2RpcikvbGluay5sZCAtbWFyY2g9JChBUkNIKSAtbWFiaT1pbHAzMgorR0NDVkVSU0lPTkdUNyA6PSAkKHNoZWxsIGV4cHIgYCQoUklTQ1ZfR0NDKSAtZHVtcGZ1bGx2ZXJzaW9uIHwgY3V0IC1mMSAtZCcuJ2AgXD4gNykKK2lmZXEgIiQoR0NDVkVSU0lPTkdUNykiICIxIgorCUxERkxBR1MgKz0gLW1uby1yZWxheAorZW5kaWYKK1ZQQVRIICs9ICQoc3JjX2RpcikgJChibGRfZGlyKSAkKG9ial9kaXIpICQoYXNtX3BhdGgpICQocmVmX3BhdGgpICQoUklTQ1ZfQ09NUExJQU5DRV9URVNUUykKKworaWZlcSAoJChjb21wbGlhbmNlX291dHB1dCksIHRydWUpCitDRkxBR1MgKz0gLURfQ09NUExJQU5DRV9PVVRQVVQKK2VuZGlmCisKK2RlZmF1bHQ6IGNsZWFuIGxvZ19yZXF1ZXN0ZWRfdGd0IGNoZWNrX3ZlcnNpb24gY3BfYXNtIHJlZl9kYXRhICQodGVzdF9lbGYpICQodGVzdF9oZXgpICQodGVzdF9kdW1wKQorCitkZWZpbmUgY29tcGlsZV90ZW1wbGF0ZQorJChvYmpfZGlyKS8kKDEpLm86ICQob2JqX2RpcikgY3BfYXNtCisJJChSSVNDVl9HQ0MpIC1jICQkKGJsZF9kaXIpL2NvbXBsaWFuY2VfYXNtLyQoMSkuUyAkJChDRkxBR1MpIC1XYSwkKDIpICQoMikgLW8gJCRACitlbmRlZgorCitkZWZpbmUgcHJlcHJvY2Vzc2luZworZm9yIHRlc3RfYXNtIGluICQoMSk7IGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCittYXJjaF90bXA9JCR0ZXN0X2FzbSA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK21hcmNoX3RtcD0kJHttYXJjaF90bXAlL3NyYyp9IDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorbWFyY2hfdG1wPSQkKGJhc2VuYW1lICQkbWFyY2hfdG1wKSA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitmaWxlX25hbWU9IiQkKGJhc2VuYW1lICQke3Rlc3RfYXNtfSkiIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyQoUklTQ1ZfR0NDKSAkKENGTEFHUykgLVdhLCQoMikgJCgyKSAtRSAkJHRlc3RfYXNtICAgICAgICAgICAgICAgICAgICAgICAgXAorLW8gJChibGRfZGlyKS9jb21wbGlhbmNlX2FzbS8kJGZpbGVfbmFtZSA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitkb25lCitlbmRlZgorCiskKGZvcmVhY2ggU1JDLCQoZmlsdGVyZWRfaSksJChldmFsICQoY2FsbCBjb21waWxlX3RlbXBsYXRlLCQoU1JDKSwtbWFyY2g9cnYzMmkpKSkKKyQoZm9yZWFjaCBTUkMsJChmaWx0ZXJlZF9pbSksJChldmFsICQoY2FsbCBjb21waWxlX3RlbXBsYXRlLCQoU1JDKSwtbWFyY2g9cnYzMmltKSkpCiskKGZvcmVhY2ggU1JDLCQoZmlsdGVyZWRfaW1jKSwkKGV2YWwgJChjYWxsIGNvbXBpbGVfdGVtcGxhdGUsJChTUkMpLC1tYXJjaD1ydjMyaW1jKSkpCisKKworbG9nX3JlcXVlc3RlZF90Z3Q6ICQoYmxkX2RpcikKKwkkKGZvcmVhY2ggdGVzdF9uYW1lLCAkKGZpbHRlcmVkKSwgJChldmFsICQoc2hlbGwgZWNobyBjb21wbGlhbmNlXyQodGVzdF9uYW1lKS5oZXggPj4gJChibGRfZGlyKS8uLi90ZXN0X2luZm8pKSkKKworJChibGRfZGlyKSA6CisJbWtkaXIgLXAgJChibGRfZGlyKQorCiskKG9ial9kaXIpIDogfCByZWZfZGF0YQorCW1rZGlyIC1wICQob2JqX2RpcikKKworJChkc3RfZGlyKS9jb21wbGlhbmNlXyUuZWxmOiAkKG9ial9kaXIpLyUubyB8ICQoZGVwX2ZpbGVzKQorCSQoUklTQ1ZfR0NDKSAkXiAkKExERkxBR1MpIC1vICRAIC1nCisKKyQoZHN0X2RpcikvY29tcGxpYW5jZV8lLmhleDogJChkc3RfZGlyKS9jb21wbGlhbmNlXyUuZWxmCisJJChSSVNDVl9ST01fT0JKQ09QWSkgJF4gJEAKKwkkKFJJU0NWX1JBTV9PQkpDT1BZKSAkXiAkQC5yYW0KKwkjYXNzaWduIDB4MDgwMF8weHh4ICB0byAweDAwMDBfMHh4eCB0byBtYXAgdG8gVENNIE1lbW9yeQorCXNlZCAtaSAncy9AMDgwMDAvQDAwMDAwL2cnICRALnJhbQorCiskKGJsZF9kaXIpL2NvbXBsaWFuY2VfJS5kdW1wOiAkKGRzdF9kaXIpL2NvbXBsaWFuY2VfJS5lbGYKKwkkKFJJU0NWX09CSkRVTVApIC1EIC13IC14IC1TICReID4gJEAKKworcmVmX2RhdGE6CisJbWtkaXIgLXAgJChibGRfZGlyKS9yZWZfZGF0YQorCWZvciBmaWxlcyBpbiAkKHJlZmVyZW5jZV9zcmMpIDsgZG8gXAorCXNlZF9pbnB1dD0kJGZpbGVzIDsgXAorCXNlZF9vdXRwdXQ9JCQoYmFzZW5hbWUgJCR7ZmlsZXMlLip9KSA7IFwKKwlzZWQgInMvXHIkJC8vOyBcCisJcy9cKC4uLi4uLi4uXCkvXDEsL2c7IFwKKwlzLy4kJC8vOyBzL1woLipcKSxcKC4qXCksXCguKlwpLFwoLipcKS9cNCxcMyxcMixcMS87IFwKKwlzL1woLi4uLi4uLi4uXCkvXDEweC9nOyBzL14vMHgvOyBzLyQkLywvOyAkJCBzLy4kJC8vIiAkJHNlZF9pbnB1dCA+ICQoYmxkX2RpcikvcmVmX2RhdGEvJCRzZWRfb3V0cHV0OyBcCisJZG9uZQorCitjcF9hc206CisJbWtkaXIgLXAgJChibGRfZGlyKS9jb21wbGlhbmNlX2FzbQorCSQoY2FsbCBwcmVwcm9jZXNzaW5nLCQoaW5jbHVkZWRfaSksLW1hcmNoPXJ2MzJpKQorCSQoY2FsbCBwcmVwcm9jZXNzaW5nLCQoaW5jbHVkZWRfaW0pLC1tYXJjaD1ydjMyaW0pCisJJChjYWxsIHByZXByb2Nlc3NpbmcsJChpbmNsdWRlZF9pbWMpLC1tYXJjaD1ydjMyaW1jKQorCisKK3Jpc2N2X2NvbXBsaWFuY2VfdGVzdHNfZGlyICAgIDo9ICQoaWYgJChSSVNDVl9DT01QTElBTkNFX1RFU1RTKSwgJChSSVNDVl9DT01QTElBTkNFX1RFU1RTKSwgLi91bmRlZmluZWQpCityaXNjdl90ZXN0c19jb21taXQgOj0gZDUxMjU5YjJhOTQ5YmUzYWYwMmU3NzZjMzllMTM1NDAyNjc1YWM5YgorIyMgY29tbWl0IGhhc2ggcmVhZGVkIGZyb20gbG9jYWwgY29weSBvZiBodHRwczovL2dpdGh1Yi5jb20vcmlzY3YvcmlzY3YtY29tcGxpYW5jZQordG1wX2NvbW1pdCA9ICQoc2hlbGwgY2QgJChyaXNjdl9jb21wbGlhbmNlX3Rlc3RzX2RpcikgMj4vZGV2L251bGwgJiYgZ2l0IGxvZyAtMSB8IGdyZXAgImNvbW1pdCIgfCBjdXQgLWYyIC1kICcgJykKK2lzX2NvbW1pdF9nb29kID0gJChpZiAkKHN1YnN0ICQocmlzY3ZfdGVzdHNfY29tbWl0KSwsJCh0bXBfY29tbWl0KSksZmFsc2UsdHJ1ZSkKKworIyBDb2xvcgorUkVEPVwwMzNbMDszMW0KK05DPVwwMzNbMG0KKworY2hlY2tfdmVyc2lvbiA6ICQocmlzY3ZfY29tcGxpYW5jZV90ZXN0c19kaXIpCisJQGlmIFsgISAtZCAkKHJpc2N2X2NvbXBsaWFuY2VfdGVzdHNfZGlyKSBdOyB0aGVuIFwKKwkJZWNobyAtZSAiJChSRUQpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iICYmXAorCQllY2hvICIgICBFcnJvciEgRW52aXJvbm1lbnQgdmFyaWFibGUgUklTQ1ZfQ09NUExJQU5DRV9URVNUUz0nJChyaXNjdl9jb21wbGlhbmNlX3Rlc3RzX2RpciknICIgJiZcCisJCWVjaG8gIiAgICAgIGRpcmVjdG9yeSBub3QgZXhpc3QhIiAmJiBcCisJCWVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JChOQykiIDsgXAorCWZpCitpZm5lcSAoJChpc19jb21taXRfZ29vZCksdHJ1ZSkKKwlAZWNobyAtZSAiJChSRUQpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCisJQGVjaG8gIiAgIFdhcm5pbmchIEV4ZWN1dGlvbiBvZiB0ZXN0IGNvZGUgaXMgbm90IGd1YXJhbnRlZWQgIgorCUBlY2hvICIgICB3aGlsZSB1c2luZyB0aGUgY3VycmVudCBjb21taXQgb2YgcmVwb3NpdG9yeSBsb2NhdGVkIGF0IDogJChyaXNjdl9jb21wbGlhbmNlX3Rlc3RzX2RpcikgLiIKKwlAZWNobyAiICAgIgorCUBlY2hvICIgICByaXNjdl9jb21wbGlhbmNlIHJlcG9zaXRvcnkgbXVzdCBwb2ludCB0byBjb21taXQgJChyaXNjdl90ZXN0c19jb21taXQpISIKKwlAZWNobyAtZSAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0kKE5DKSIKK2VuZGlmCisKKyQocmlzY3ZfY29tcGxpYW5jZV90ZXN0c19kaXIpIDouCitpZm5kZWYgUklTQ1ZfQ09NUExJQU5DRV9URVNUUworCUBlY2hvIC1lICIkKFJFRCk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKKwlAZWNobyAiICAgIEVycm9yISBFbnZpcm9ubWVudCB2YXJpYWJsZSBSSVNDVl9DT01QTElBTkNFX1RFU1RTIG5vdCBzZXQhIgorCUBlY2hvICIgICAgWW91IG11c3Qgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBSSVNDVl9DT01QTElBTkNFX1RFU1RTIgorCUBlY2hvICIgICAgVGhlIHZhcmlhYmxlIHNob3VsZCBwb2ludCB0byB0aGUgbG9jYWwgY29weSBvZiB0aGUiCisJQGVjaG8gIiAgICAgIHJlcG9zaXRvcnkgaHR0cHM6Ly9naXRodWIuY29tL3Jpc2N2L3Jpc2N2LWNvbXBsaWFuY2UiCisJQGVjaG8gIiAgICAgIHdpdGggdGhlIGNvbW1pdCAkKHJpc2N2X3Rlc3RzX2NvbW1pdCkiCisJQGVjaG8gLWUgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JChOQykiCisJZXhpdCAxCitlbmRpZgorCitjbGVhbjoKKwkkKFJNKSAtUiAkKHRlc3RfZWxmKSAkKHRlc3RfaGV4KSAkKGJsZF9kaXIpCisKKy5QSE9OWTogY2hlY2tfdmVyc2lvbiBjbGVhbiByZWZfZGF0YSBjcF9hc20gZGVmYXVsdApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvYXdfdGVzdF9tYWNyb3MuaCBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL2F3X3Rlc3RfbWFjcm9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UwNTJhMQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL2F3X3Rlc3RfbWFjcm9zLmgKQEAgLTAsMCArMSw2ODMgQEAKKy8qCisgIENPUFkgT0YgL3Jpc2N2LWNvbXBsaWFuY2UvcmlzY3YtdGVzdC1lbnYvYXdfdGVzdF9tYWNyb3MuaAorICAqLworCisvLyBTZWUgTElDRU5TRSBmb3IgbGljZW5zZSBkZXRhaWxzLgorCisjaWZuZGVmIF9fVEVTVF9NQUNST1NfU0NBTEFSX0gKKyNkZWZpbmUgX19URVNUX01BQ1JPU19TQ0FMQVJfSAorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBIZWxwZXIgbWFjcm9zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBNQVNLX1hMRU4oeCkgKCh4KSAmICgoMSA8PCAoX19yaXNjdl94bGVuIC0gMSkgPDwgMSkgLSAxKSkKKworI2RlZmluZSBDSEVDS19YTEVOIGxpIGEwLCAxOyBzbGxpIGEwLCBhMCwgMzE7IGJsdHogYTAsIDFmOyBSVlRFU1RfUEFTUzsgMTogc3JsaSBhMCwgYTAsIDMxOyBsYSB0MCwgYmVnaW5fc2lnbmF0dXJlOyBzdyBhMCwgMCh0MCkKKworI2RlZmluZSBURVNUTlVNIGdwCisKKyNkZWZpbmUgU1dTSUcoIHRlc3RudW0sIHRlc3RyZWcgKSBcCisgICAgbGEgIHgyOCwgdGVzdF9yZXM7IFwKKyAgICBzdyB0ZXN0cmVnLCAodGVzdG51bTw8MikoeDI4KTsgXAorCisjCisjIEFkZHJlc3MgPSBiYXNlKyh0ZXN0bnVtPDwyKQorIyBzdyB0ZXN0cmVnLCAodGVzdG51bTw8MikoYmFzZXJlZykKKyMKKyNkZWZpbmUgVEVTVF9DQVNFKCB0ZXN0bnVtLCB0ZXN0cmVnLCBjb3JyZWN0dmFsLCBjb2RlLi4uICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICAgIGNvZGU7IFwKKyAgICBsaSAgeDI5LCBNQVNLX1hMRU4oY29ycmVjdHZhbCk7IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgICAgICBTV1NJRyh0ZXN0bnVtLHRlc3RyZWcpOyBcCisgICAgYm5lIHRlc3RyZWcsIHgyOSwgZmFpbDsKKworIyBXZSB1c2UgYSBtYWNybyBoYWNrIHRvIHNpbXBpZnkgY29kZSBnZW5lcmF0aW9uIGZvciB2YXJpb3VzIG51bWJlcnMKKyMgb2YgYnViYmxlIGN5Y2xlcy4KKworI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzAKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU18xICBub3A7IFRFU1RfSU5TRVJUX05PUFNfMAorI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzIgIG5vcDsgVEVTVF9JTlNFUlRfTk9QU18xCisjZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfMyAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzIKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU180ICBub3A7IFRFU1RfSU5TRVJUX05PUFNfMworI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzUgIG5vcDsgVEVTVF9JTlNFUlRfTk9QU180CisjZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfNiAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzUKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU183ICBub3A7IFRFU1RfSU5TRVJUX05PUFNfNgorI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzggIG5vcDsgVEVTVF9JTlNFUlRfTk9QU183CisjZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfOSAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzgKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU18xMCBub3A7IFRFU1RfSU5TRVJUX05PUFNfOQorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSVjY0VUkgTUFDUk9TCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIGZvciBpbnN0cnVjdGlvbnMgd2l0aCBpbW1lZGlhdGUgb3BlcmFuZAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgU0VYVF9JTU0oeCkgKCh4KSB8ICgtKCgoeCkgPj4gMTEpICYgMSkgPDwgMTEpKQorCisjZGVmaW5lIFRFU1RfSU1NX09QKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEsIGltbSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzMCwgcmVzdWx0LCBcCisgICAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgaW5zdCB4MzAsIHgxLCBTRVhUX0lNTShpbW0pOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX1NSQzFfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxLCBpbW0gKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MSwgcmVzdWx0LCBcCisgICAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgaW5zdCB4MSwgeDEsIFNFWFRfSU1NKGltbSk7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fREVTVF9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QsIHJlc3VsdCwgdmFsMSwgaW1tICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDYsIHJlc3VsdCwgXAorICAgICAgbGkgIHg0LCAwOyBcCisxOiAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgaW5zdCB4MzAsIHgxLCBTRVhUX0lNTShpbW0pOyBcCisgICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKKyAgICAgIGFkZGkgIHg2LCB4MzAsIDA7IFwKKyAgICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgICAgbGkgIHg1LCAyOyBcCisgICAgICBibmUgeDQsIHg1LCAxYiBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX1NSQzFfQllQQVNTKCB0ZXN0bnVtLCBub3BfY3ljbGVzLCBpbnN0LCByZXN1bHQsIHZhbDEsIGltbSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzMCwgcmVzdWx0LCBcCisgICAgICBsaSAgeDQsIDA7IFwKKzE6ICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKKyAgICAgIGluc3QgeDMwLCB4MSwgU0VYVF9JTU0oaW1tKTsgXAorICAgICAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgICBsaSAgeDUsIDI7IFwKKyAgICAgIGJuZSB4NCwgeDUsIDFiIFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fWkVST1NSQzEoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgaW1tICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgaW5zdCB4MSwgeDAsIFNFWFRfSU1NKGltbSk7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fWkVST0RFU1QoIHRlc3RudW0sIGluc3QsIHZhbDEsIGltbSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgwLCAwLCBcCisgICAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgaW5zdCB4MCwgeDEsIFNFWFRfSU1NKGltbSk7IFwKKyAgICApCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyBmb3IgYW4gaW5zdHJ1Y3Rpb24gd2l0aCByZWdpc3RlciBvcGVyYW5kcworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgVEVTVF9SX09QKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MzAsIHJlc3VsdCwgXAorICAgICAgbGkgIHgxLCB2YWwxOyBcCisgICAgICBpbnN0IHgzMCwgeDE7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SX1NSQzFfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgbGkgIHgxLCB2YWwxOyBcCisgICAgICBpbnN0IHgxLCB4MTsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JfREVTVF9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QsIHJlc3VsdCwgdmFsMSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHg2LCByZXN1bHQsIFwKKyAgICAgIGxpICB4NCwgMDsgXAorMTogICAgbGkgIHgxLCB2YWwxOyBcCisgICAgICBpbnN0IHgzMCwgeDE7IFwKKyAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIG5vcF9jeWNsZXMgXAorICAgICAgYWRkaSAgeDYsIHgzMCwgMDsgXAorICAgICAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgICBsaSAgeDUsIDI7IFwKKyAgICAgIGJuZSB4NCwgeDUsIDFiIFwKKyAgICApCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyBmb3IgYW4gaW5zdHJ1Y3Rpb24gd2l0aCByZWdpc3Rlci1yZWdpc3RlciBvcGVyYW5kcworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgVEVTVF9SUl9PUCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDMwLCByZXN1bHQsIFwKKyAgICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBsaSAgeDIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCB4MzAsIHgxLCB4MjsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzFfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpICB4MiwgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IHgxLCB4MSwgeDI7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9TUkMyX0VRX0RFU1QoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgyLCByZXN1bHQsIFwKKyAgICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBsaSAgeDIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCB4MiwgeDEsIHgyOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfU1JDMTJfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGluc3QgeDEsIHgxLCB4MTsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX0RFU1RfQllQQVNTKCB0ZXN0bnVtLCBub3BfY3ljbGVzLCBpbnN0LCByZXN1bHQsIHZhbDEsIHZhbDIgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4NiwgcmVzdWx0LCBcCisgICAgICBsaSAgeDQsIDA7IFwKKzE6ICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBsaSAgeDIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCB4MzAsIHgxLCB4MjsgXAorICAgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgbm9wX2N5Y2xlcyBcCisgICAgICBhZGRpICB4NiwgeDMwLCAwOyBcCisgICAgICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICAgIGxpICB4NSwgMjsgXAorICAgICAgYm5lIHg0LCB4NSwgMWIgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzEyX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGluc3QsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzMCwgcmVzdWx0LCBcCisgICAgICBsaSAgeDQsIDA7IFwKKzE6ICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAorICAgICAgbGkgIHgyLCBNQVNLX1hMRU4odmFsMik7IFwKKyAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzJfbm9wcyBcCisgICAgICBpbnN0IHgzMCwgeDEsIHgyOyBcCisgICAgICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICAgIGxpICB4NSwgMjsgXAorICAgICAgYm5lIHg0LCB4NSwgMWIgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzIxX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGluc3QsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzMCwgcmVzdWx0LCBcCisgICAgICBsaSAgeDQsIDA7IFwKKzE6ICAgIGxpICB4MiwgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAorICAgICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzJfbm9wcyBcCisgICAgICBpbnN0IHgzMCwgeDEsIHgyOyBcCisgICAgICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICAgIGxpICB4NSwgMjsgXAorICAgICAgYm5lIHg0LCB4NSwgMWIgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1pFUk9TUkMxKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbCApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgyLCByZXN1bHQsIFwKKyAgICAgIGxpIHgxLCBNQVNLX1hMRU4odmFsKTsgXAorICAgICAgaW5zdCB4MiwgeDAsIHgxOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfWkVST1NSQzIoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDIsIHJlc3VsdCwgXAorICAgICAgbGkgeDEsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICBpbnN0IHgyLCB4MSwgeDA7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9aRVJPU1JDMTIoIHRlc3RudW0sIGluc3QsIHJlc3VsdCApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgxLCByZXN1bHQsIFwKKyAgICAgIGluc3QgeDEsIHgwLCB4MDsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1pFUk9ERVNUKCB0ZXN0bnVtLCBpbnN0LCB2YWwxLCB2YWwyICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDAsIDAsIFwKKyAgICAgIGxpIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpIHgyLCBNQVNLX1hMRU4odmFsMik7IFwKKyAgICAgIGluc3QgeDAsIHgxLCB4MjsgXAorICAgICkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QgbWVtb3J5IGluc3RydWN0aW9ucworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgVEVTVF9MRF9PUCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MzAsIHJlc3VsdCwgXAorICAgICAgbGEgIHgxLCBiYXNlOyBcCisgICAgICBpbnN0IHgzMCwgb2Zmc2V0KHgxKTsgXAorICAgICkKKworI2RlZmluZSBURVNUX1NUX09QKCB0ZXN0bnVtLCBsb2FkX2luc3QsIHN0b3JlX2luc3QsIHJlc3VsdCwgb2Zmc2V0LCBiYXNlICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDMwLCByZXN1bHQsIFwKKyAgICAgIGxhICB4MSwgYmFzZTsgXAorICAgICAgbGkgIHgyLCByZXN1bHQ7IFwKKyAgICAgIHN0b3JlX2luc3QgeDIsIG9mZnNldCh4MSk7IFwKKyAgICAgIGxvYWRfaW5zdCB4MzAsIG9mZnNldCh4MSk7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9MRF9ERVNUX0JZUEFTUyggdGVzdG51bSwgbm9wX2N5Y2xlcywgaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsYSAgeDEsIGJhc2U7IFwKKyAgICBpbnN0IHgzMCwgb2Zmc2V0KHgxKTsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIG5vcF9jeWNsZXMgXAorICAgIGFkZGkgIHg2LCB4MzAsIDA7IFwKKyAgICBsaSAgeDI5LCByZXN1bHQ7IFwKKyAgICBibmUgeDYsIHgyOSwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiOyBcCisKKyNkZWZpbmUgVEVTVF9MRF9TUkMxX0JZUEFTUyggdGVzdG51bSwgbm9wX2N5Y2xlcywgaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsYSAgeDEsIGJhc2U7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKKyAgICBpbnN0IHgzMCwgb2Zmc2V0KHgxKTsgXAorICAgIGxpICB4MjksIHJlc3VsdDsgXAorICAgIGJuZSB4MzAsIHgyOSwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworI2RlZmluZSBURVNUX1NUX1NSQzEyX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGxvYWRfaW5zdCwgc3RvcmVfaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsaSAgeDEsIHJlc3VsdDsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzFfbm9wcyBcCisgICAgbGEgIHgyLCBiYXNlOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMl9ub3BzIFwKKyAgICBzdG9yZV9pbnN0IHgxLCBvZmZzZXQoeDIpOyBcCisgICAgbG9hZF9pbnN0IHgzMCwgb2Zmc2V0KHgyKTsgXAorICAgIGxpICB4MjksIHJlc3VsdDsgXAorICAgIGJuZSB4MzAsIHgyOSwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworI2RlZmluZSBURVNUX1NUX1NSQzIxX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGxvYWRfaW5zdCwgc3RvcmVfaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsYSAgeDIsIGJhc2U7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAorICAgIGxpICB4MSwgcmVzdWx0OyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMl9ub3BzIFwKKyAgICBzdG9yZV9pbnN0IHgxLCBvZmZzZXQoeDIpOyBcCisgICAgbG9hZF9pbnN0IHgzMCwgb2Zmc2V0KHgyKTsgXAorICAgIGxpICB4MjksIHJlc3VsdDsgXAorICAgIGJuZSB4MzAsIHgyOSwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworI2RlZmluZSBURVNUX0JSMl9PUF9UQUtFTiggdGVzdG51bSwgaW5zdCwgdmFsMSwgdmFsMiApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICBTV1NJRyAodGVzdG51bSwgVEVTVE5VTSk7XAorICAgIGxpICB4MSwgdmFsMTsgXAorICAgIGxpICB4MiwgdmFsMjsgXAorICAgIGluc3QgeDEsIHgyLCAyZjsgXAorICAgIGJuZSB4MCwgVEVTVE5VTSwgZmFpbDsgXAorMTogIGJuZSB4MCwgVEVTVE5VTSwgM2Y7IFwKKzI6ICBpbnN0IHgxLCB4MiwgMWI7IFwKKyAgICBibmUgeDAsIFRFU1ROVU0sIGZhaWw7IFwKKzM6CisKKyNkZWZpbmUgVEVTVF9CUjJfT1BfTk9UVEFLRU4oIHRlc3RudW0sIGluc3QsIHZhbDEsIHZhbDIgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDEsIHZhbDE7IFwKKyAgICBsaSAgeDIsIHZhbDI7IFwKKyAgICBpbnN0IHgxLCB4MiwgMWY7IFwKKyAgICBibmUgeDAsIFRFU1ROVU0sIDJmOyBcCisxOiAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCisyOiAgaW5zdCB4MSwgeDIsIDFiOyBcCiszOgorCisjZGVmaW5lIFRFU1RfQlIyX1NSQzEyX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGluc3QsIHZhbDEsIHZhbDIgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsaSAgeDEsIHZhbDE7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAorICAgIGxpICB4MiwgdmFsMjsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzJfbm9wcyBcCisgICAgaW5zdCB4MSwgeDIsIGZhaWw7IFwKKyAgICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICBsaSAgeDUsIDI7IFwKKyAgICBibmUgeDQsIHg1LCAxYiBcCisKKyNkZWZpbmUgVEVTVF9CUjJfU1JDMjFfQllQQVNTKCB0ZXN0bnVtLCBzcmMxX25vcHMsIHNyYzJfbm9wcywgaW5zdCwgdmFsMSwgdmFsMiApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICBTV1NJRyAodGVzdG51bSwgVEVTVE5VTSk7XAorICAgIGxpICB4NCwgMDsgXAorMTogIGxpICB4MiwgdmFsMjsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzFfbm9wcyBcCisgICAgbGkgIHgxLCB2YWwxOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMl9ub3BzIFwKKyAgICBpbnN0IHgxLCB4MiwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QganVtcCBpbnN0cnVjdGlvbnMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjZGVmaW5lIFRFU1RfSlJfU1JDMV9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsYSAgeDYsIDJmOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgbm9wX2N5Y2xlcyBcCisgICAgaW5zdCB4NjsgXAorICAgIGJuZSB4MCwgVEVTVE5VTSwgZmFpbDsgXAorMjogIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworI2RlZmluZSBURVNUX0pBTFJfU1JDMV9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsYSAgeDYsIDJmOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgbm9wX2N5Y2xlcyBcCisgICAgaW5zdCB4MTksIHg2LCAwOyBcCisgICAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCisyOiAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgbGkgIHg1LCAyOyBcCisgICAgYm5lIHg0LCB4NSwgMWIgXAorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSVjY0VUYgTUFDUk9TCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgcU5hTmYgMGY6N2ZjMDAwMDAKKyNkZWZpbmUgc05hTmYgMGY6N2Y4MDAwMDEKKyNkZWZpbmUgcU5hTiAwZDo3ZmY4MDAwMDAwMDAwMDAwCisjZGVmaW5lIHNOYU4gMGQ6N2ZmMDAwMDAwMDAwMDAwMQorCisjZGVmaW5lIFRFU1RfRlBfT1BfU19JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMywgY29kZS4uLiApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCisgIGZsdyBmMCwgMChhMCk7IFwKKyAgZmx3IGYxLCA0KGEwKTsgXAorICBmbHcgZjIsIDgoYTApOyBcCisgIGx3ICBhMywgMTIoYTApOyBcCisgIGNvZGU7IFwKKyAgZnNmbGFncyBhMSwgeDA7IFwKKyAgbGkgYTIsIGZsYWdzOyBcCisgIGJuZSBhMCwgYTMsIGZhaWw7IFwKKyAgYm5lIGExLCBhMiwgZmFpbDsgXAorICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgLmFsaWduIDI7IFwKKyAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAorICAuZmxvYXQgdmFsMTsgXAorICAuZmxvYXQgdmFsMjsgXAorICAuZmxvYXQgdmFsMzsgXAorICAucmVzdWx0OyBcCisgIC5wb3BzZWN0aW9uCisKKyNkZWZpbmUgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzLCBjb2RlLi4uICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICBTV1NJRyAodGVzdG51bSwgVEVTVE5VTSk7XAorICBsYSAgYTAsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgO1wKKyAgZmxkIGYwLCAwKGEwKTsgXAorICBmbGQgZjEsIDgoYTApOyBcCisgIGZsZCBmMiwgMTYoYTApOyBcCisgIGxkICBhMywgMjQoYTApOyBcCisgIGNvZGU7IFwKKyAgZnNmbGFncyBhMSwgeDA7IFwKKyAgbGkgYTIsIGZsYWdzOyBcCisgIGJuZSBhMCwgYTMsIGZhaWw7IFwKKyAgYm5lIGExLCBhMiwgZmFpbDsgXAorICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgLmFsaWduIDM7IFwKKyAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAorICAuZG91YmxlIHZhbDE7IFwKKyAgLmRvdWJsZSB2YWwyOyBcCisgIC5kb3VibGUgdmFsMzsgXAorICAucmVzdWx0OyBcCisgIC5wb3BzZWN0aW9uCisKKy8vIFRPRE86IGFzc2lnbiBhIHNlcGFyYXRlIG1lbSBsb2NhdGlvbiBmb3IgdGhlIGNvbXBhcmlzb24gYWRkcmVzcz8KKyNkZWZpbmUgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCByZXN1bHQsIHZhbDEsIHZhbDIsIHZhbDMsIGNvZGUuLi4gKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgIFNXU0lHICh0ZXN0bnVtLCBURVNUTlVNKTtcCisgIGxhICBhMCwgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YSA7XAorICBmbGQgZjAsIDAoYTApOyBcCisgIGZsZCBmMSwgOChhMCk7IFwKKyAgZmxkIGYyLCAxNihhMCk7IFwKKyAgbHcgIGEzLCAyNChhMCk7IFwKKyAgbHcgIHQxLCAyOChhMCk7IFwKKyAgY29kZTsgXAorICBmc2ZsYWdzIGExLCB4MDsgXAorICBsaSBhMiwgZmxhZ3M7IFwKKyAgYm5lIGEwLCBhMywgZmFpbDsgXAorICBibmUgdDEsIHQyLCBmYWlsOyBcCisgIGJuZSBhMSwgYTIsIGZhaWw7IFwKKyAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCisgIC5hbGlnbiAzOyBcCisgIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKKyAgLmRvdWJsZSB2YWwxOyBcCisgIC5kb3VibGUgdmFsMjsgXAorICAuZG91YmxlIHZhbDM7IFwKKyAgLnJlc3VsdDsgXAorICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfRkNWVF9TX0QzMiggdGVzdG51bSwgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgMCwgZG91YmxlIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgZmN2dC5zLmQgZjMsIGYwOyBmY3Z0LmQucyBmMywgZjM7IGZzZCBmMywgMChhMCk7IGx3IHQyLCA0KGEwKTsgbHcgYTAsIDAoYTApKQorCisjZGVmaW5lIFRFU1RfRkNWVF9TX0QoIHRlc3RudW0sIHJlc3VsdCwgdmFsMSApIFwKKyAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCAwLCBkb3VibGUgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBmY3Z0LnMuZCBmMywgZjA7IGZjdnQuZC5zIGYzLCBmMzsgZm12LnguZCBhMCwgZjMpCisKKyNkZWZpbmUgVEVTVF9GQ1ZUX0RfUyggdGVzdG51bSwgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIDAsIGZsb2F0IHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgZmN2dC5kLnMgZjMsIGYwOyBmY3Z0LnMuZCBmMywgZjM7IGZtdi54LnMgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfT1AxX1MoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEgKSBcCisgIFRFU1RfRlBfT1BfU19JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGZsb2F0IHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjA7IGZtdi54LnMgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfT1AxX0QzMiggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSApIFwKKyAgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMDsgZnNkIGYzLCAwKGEwKTsgbHcgdDIsIDQoYTApOyBsdyBhMCwgMChhMCkpCisvLyBeOiBzdG9yZSBjb21wdXRhdGlvbiByZXN1bHQgaW4gYWRkcmVzcyBmcm9tIGEwLCBsb2FkIGhpZ2gtd29yZCBpbnRvIHQyCisKKyNkZWZpbmUgVEVTVF9GUF9PUDFfRCggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSApIFwKKyAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZG91YmxlIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjA7IGZtdi54LmQgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfT1AxX1NfRFdPUkRfUkVTVUxUKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkd29yZCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgZjMsIGYwOyBmbXYueC5zIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX09QMV9EMzJfRFdPUkRfUkVTVUxUKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGR3b3JkIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjA7IGZzZCBmMywgMChhMCk7IGx3IHQyLCA0KGEwKTsgbHcgYTAsIDAoYTApKQorLy8gXjogc3RvcmUgY29tcHV0YXRpb24gcmVzdWx0IGluIGFkZHJlc3MgZnJvbSBhMCwgbG9hZCBoaWdoLXdvcmQgaW50byB0MgorCisjZGVmaW5lIFRFU1RfRlBfT1AxX0RfRFdPUkRfUkVTVUxUKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkd29yZCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgZjMsIGYwOyBmbXYueC5kIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX09QMl9TKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBmbG9hdCByZXN1bHQsIHZhbDEsIHZhbDIsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMCwgZjE7IGZtdi54LnMgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfT1AyX0QzMiggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCB2YWwyLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxOyBmc2QgZjMsIDAoYTApOyBsdyB0MiwgNChhMCk7IGx3IGEwLCAwKGEwKSkKKy8vIF46IHN0b3JlIGNvbXB1dGF0aW9uIHJlc3VsdCBpbiBhZGRyZXNzIGZyb20gYTAsIGxvYWQgaGlnaC13b3JkIGludG8gdDIKKworI2RlZmluZSBURVNUX0ZQX09QMl9EKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCB2YWwyLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxOyBmbXYueC5kIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX09QM19TKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBmbG9hdCByZXN1bHQsIHZhbDEsIHZhbDIsIHZhbDMsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxLCBmMjsgZm12LngucyBhMCwgZjMpCisKKyNkZWZpbmUgVEVTVF9GUF9PUDNfRDMyKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzICkgXAorICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGRvdWJsZSByZXN1bHQsIHZhbDEsIHZhbDIsIHZhbDMsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxLCBmMjsgZnNkIGYzLCAwKGEwKTsgbHcgdDIsIDQoYTApOyBsdyBhMCwgMChhMCkpCisvLyBeOiBzdG9yZSBjb21wdXRhdGlvbiByZXN1bHQgaW4gYWRkcmVzcyBmcm9tIGEwLCBsb2FkIGhpZ2gtd29yZCBpbnRvIHQyCisKKyNkZWZpbmUgVEVTVF9GUF9PUDNfRCggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMyApIFwKKyAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZG91YmxlIHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMywgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMCwgZjEsIGYyOyBmbXYueC5kIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX0lOVF9PUF9TKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCBybSApIFwKKyAgVEVTVF9GUF9PUF9TX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgd29yZCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgYTAsIGYwLCBybSkKKworI2RlZmluZSBURVNUX0ZQX0lOVF9PUF9EMzIoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEsIHJtICkgXAorICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGR3b3JkIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBhMCwgZjAsIGYxOyBsaSB0MiwgMCkKKworI2RlZmluZSBURVNUX0ZQX0lOVF9PUF9EKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCBybSApIFwKKyAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZHdvcmQgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGEwLCBmMCwgcm0pCisKKyNkZWZpbmUgVEVTVF9GUF9DTVBfT1BfUyggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgVEVTVF9GUF9PUF9TX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgd29yZCByZXN1bHQsIHZhbDEsIHZhbDIsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGEwLCBmMCwgZjEpCisKKyNkZWZpbmUgVEVTVF9GUF9DTVBfT1BfRDMyKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGR3b3JkIHJlc3VsdCwgdmFsMSwgdmFsMiwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgYTAsIGYwLCBmMTsgbGkgdDIsIDApCisKKyNkZWZpbmUgVEVTVF9GUF9DTVBfT1BfRCggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZHdvcmQgcmVzdWx0LCB2YWwxLCB2YWwyLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBhMCwgZjAsIGYxKQorCisjZGVmaW5lIFRFU1RfRkNMQVNTX1ModGVzdG51bSwgY29ycmVjdCwgaW5wdXQpIFwKKyAgVEVTVF9DQVNFKHRlc3RudW0sIGEwLCBjb3JyZWN0LCBsaSBhMCwgaW5wdXQ7IGZtdi5zLnggZmEwLCBhMDsgXAorICAgICAgICAgICAgICAgICAgICBmY2xhc3MucyBhMCwgZmEwKQorCisjZGVmaW5lIFRFU1RfRkNMQVNTX0QzMih0ZXN0bnVtLCBjb3JyZWN0LCBpbnB1dCkgXAorICBURVNUX0NBU0UodGVzdG51bSwgYTAsIGNvcnJlY3QsIFwKKyAgICAgICAgICAgIGxhIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCisgICAgICAgICAgICBmbGQgZmEwLCAwKGEwKTsgXAorICAgICAgICAgICAgZmNsYXNzLmQgYTAsIGZhMCkgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5hbGlnbiAzOyBcCisgICAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAorICAgIC5kd29yZCBpbnB1dDsgXAorICAgIC5wb3BzZWN0aW9uCisKKyNkZWZpbmUgVEVTVF9GQ0xBU1NfRCh0ZXN0bnVtLCBjb3JyZWN0LCBpbnB1dCkgXAorICBURVNUX0NBU0UodGVzdG51bSwgYTAsIGNvcnJlY3QsIGxpIGEwLCBpbnB1dDsgZm12LmQueCBmYTAsIGEwOyBcCisgICAgICAgICAgICAgICAgICAgIGZjbGFzcy5kIGEwLCBmYTApCisKKyNkZWZpbmUgVEVTVF9JTlRfRlBfT1BfUyggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICBTV1NJRyAodGVzdG51bSwgVEVTVE5VTSk7XAorICBsYSAgYTAsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgO1wKKyAgbHcgIGEzLCAwKGEwKTsgXAorICBsaSAgYTAsIHZhbDE7IFwKKyAgaW5zdCBmMCwgYTA7IFwKKyAgZnNmbGFncyB4MDsgXAorICBmbXYueC5zIGEwLCBmMDsgXAorICBibmUgYTAsIGEzLCBmYWlsOyBcCisgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAuYWxpZ24gMjsgXAorICB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhOiBcCisgIC5mbG9hdCByZXN1bHQ7IFwKKyAgLnBvcHNlY3Rpb24KKworI2RlZmluZSBURVNUX0lOVF9GUF9PUF9EMzIoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCisgIGx3ICBhMywgMChhMCk7IFwKKyAgbHcgIGE0LCA0KGEwKTsgXAorICBsaSAgYTEsIHZhbDE7IFwKKyAgaW5zdCBmMCwgYTE7IFwKKyAgXAorICBmc2QgZjAsIDAoYTApOyBcCisgIGx3IGExLCA0KGEwKTsgXAorICBsdyBhMCwgMChhMCk7IFwKKyAgXAorICBmc2ZsYWdzIHgwOyBcCisgIGJuZSBhMCwgYTMsIGZhaWw7IFwKKyAgYm5lIGExLCBhNCwgZmFpbDsgXAorICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgLmFsaWduIDM7IFwKKyAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAorICAuZG91YmxlIHJlc3VsdDsgXAorICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfSU5UX0ZQX09QX0QoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCisgIGxkICBhMywgMChhMCk7IFwKKyAgbGkgIGEwLCB2YWwxOyBcCisgIGluc3QgZjAsIGEwOyBcCisgIGZzZmxhZ3MgeDA7IFwKKyAgZm12LnguZCBhMCwgZjA7IFwKKyAgYm5lIGEwLCBhMywgZmFpbDsgXAorICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgLmFsaWduIDM7IFwKKyAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAorICAuZG91YmxlIHJlc3VsdDsgXAorICAucG9wc2VjdGlvbgorCisvLyBXZSBuZWVkIHNvbWUgc3BlY2lhbCBoYW5kbGluZyBoZXJlIHRvIGFsbG93IDY0LWJpdCBjb21wYXJpc29uIGluIDMyLWJpdCBhcmNoCisvLyBUT0RPOiBmaW5kIGEgYmV0dGVyIG5hbWUgYW5kIGNsZWFuIHVwIHdoZW4gaW50ZW5kZWQgZm9yIGdlbmVyYWwgdXNhZ2U/CisjZGVmaW5lIFRFU1RfQ0FTRV9EMzIoIHRlc3RudW0sIHRlc3RyZWcxLCB0ZXN0cmVnMiwgY29ycmVjdHZhbCwgY29kZS4uLiApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBjb2RlOyBcCisgICAgbGEgIHgzMSwgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YSA7IFwKKyAgICBsdyAgeDI5LCAwKHgzMSk7IFwKKyAgICBsdyAgeDMxLCA0KHgzMSk7IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgIFNXU0lHICh0ZXN0bnVtLCBURVNUTlVNKTtcCisgICAgYm5lIHRlc3RyZWcxLCB4MjksIGZhaWw7XAorICAgIGJuZSB0ZXN0cmVnMiwgeDMxLCBmYWlsO1wKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYWxpZ24gMzsgXAorICAgIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKKyAgICAuZHdvcmQgY29ycmVjdHZhbDsgXAorICAgIC5wb3BzZWN0aW9uCisKKy8vIF4geDMwIGlzIHVzZWQgaW4gc29tZSBvdGhlciBtYWNyb3MsIHRvIGF2b2lkIGlzc3VlcyB3ZSB1c2UgeDMxIGZvciB1cHBlciB3b3JkCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQYXNzIGFuZCBmYWlsIGNvZGUgKGFzc3VtZXMgdGVzdCBudW0gaXMgaW4gVEVTVE5VTSkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjZGVmaW5lIFRFU1RfUEFTU0ZBSUwgXAorICAgICAgICBibmUgeDAsIFRFU1ROVU0sIHBhc3M7IFwKK2ZhaWw6IFwKKyAgICAgICAgUlZURVNUX0ZBSUw7IFwKK3Bhc3M6IFwKKyAgICAgICAgUlZURVNUX1BBU1MgXAorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0IGRhdGEgc2VjdGlvbgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgVEVTVF9EQVRBCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvY29tcGxpYW5jZV9pby5oIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvY29tcGxpYW5jZV9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViN2NhNTQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvcmlzY3ZfY29tcGxpYW5jZS9jb21wbGlhbmNlX2lvLmgKQEAgLTAsMCArMSw3MCBAQAorLy8gUklTQy1WIENvbXBsaWFuY2UgSU8gVGVzdCBIZWFkZXIgRmlsZQorCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMTggSW1wZXJhcyBTb2Z0d2FyZSBMdGQuLCB3d3cuaW1wZXJhcy5jb20KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELAorICogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworI2lmbmRlZiBfQ09NUExJQU5DRV9JT19ICisjZGVmaW5lIF9DT01QTElBTkNFX0lPX0gKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUlYgSU8gTWFjcm9zIChOb24gZnVuY3Rpb25hbCkKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNpZmRlZiBfQ09NUExJQU5DRV9PVVRQVVQKKworI2RlZmluZSBSVlRFU1RfSU9fUFVTSChfU1ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorbGEgX1NQLCBiZWdpbl9yZWdzdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3cgeDMsIDAoX1NQKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3cgeDQsIDQoX1NQKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3cgeDUsIDgoX1NQKTsKKworI2RlZmluZSBSVlRFU1RfSU9fUE9QKF9TUCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorbGEgX1NQLCBiZWdpbl9yZWdzdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorbHcgeDMsIDAoX1NQKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorbHcgeDQsIDQoX1NQKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorbHcgeDUsIDgoX1NQKTsJCisKKyNkZWZpbmUgUlZURVNUX0lPX1dSSVRFX1NUUihfU1AsIF9TVFIpCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC5zZWN0aW9uIC5kYXRhLnN0cmluZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorMjAwMDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC5zdHJpbmcgX1NUUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC5zZWN0aW9uIC50ZXh0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFJWVEVTVF9JT19QVVNIKF9TUCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGxpIHgzLCAweEYwMDAwMDAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGxhIHg0LCAyMDAwMWI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorMjogIGxiIHg1LCAwKHg0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNiIHg1LCAwKHgzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGJlcSB4NSwgemVybywgMWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGFkZCB4NCwgeDQsIDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGogMmI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorMTogIFJWVEVTVF9JT19QT1AoX1NQKQorCisjZWxzZSAvLyAjaWZkZWYgX0NPTVBMSUFOQ0VfT1VUUFVUCisKKyNkZWZpbmUgUlZURVNUX0lPX1dSSVRFX1NUUihfU1AsIF9TVFIpCisKKyNlbmRpZiAvLyAjZW5kICNpZmRlZiBfQ09NUExJQU5DRV9PVVRQVVQKKworI2RlZmluZSBSVlRFU1RfSU9fSU5JVAorI2RlZmluZSBSVlRFU1RfSU9fQ0hFQ0soKQorI2RlZmluZSBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUShfU1AsIF9SLCBfSSkKKyNkZWZpbmUgUlZURVNUX0lPX0FTU0VSVF9TRlBSX0VRKF9GLCBfUiwgX0kpCisjZGVmaW5lIFJWVEVTVF9JT19BU1NFUlRfREZQUl9FUShfRCwgX1IsIF9JKQorI2RlZmluZSBSVlRFU1RfSU9fQVNTRVJUX0VRKF9SLCBfSSkgCisKKyNlbmRpZiAvLyBfQ09NUExJQU5DRV9JT19ICmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvcmlzY3ZfY29tcGxpYW5jZS9jb21wbGlhbmNlX3Rlc3QuaCBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL2NvbXBsaWFuY2VfdGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjN2U3ZjkKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvcmlzY3ZfY29tcGxpYW5jZS9jb21wbGlhbmNlX3Rlc3QuaApAQCAtMCwwICsxLDMxIEBACisvLyBSSVNDLVYgQ29tcGxpYW5jZSBUZXN0IEhlYWRlciBGaWxlCisvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIENvZGFzaXAgTHRkLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8gU2VlIExJQ0VOU0UgZm9yIGxpY2Vuc2UgZGV0YWlscy4KKy8vCisvLyBEZXNjcmlwdGlvbjogQ29tbW9uIGhlYWRlciBmaWxlIGZvciBSVjMySSB0ZXN0cworCisjaWZuZGVmIF9DT01QTElBTkNFX1RFU1RfSAorI2RlZmluZSBfQ09NUExJQU5DRV9URVNUX0gKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUlYgQ29tcGxpYW5jZSBNYWNyb3MKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBSVl9DT01QTElBTkNFX0hBTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNkZWZpbmUgUlZfQ09NUExJQU5DRV9SVjMyTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSVlRFU1RfUlYzMk0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNkZWZpbmUgUlZfQ09NUExJQU5DRV9DT0RFX0JFR0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSVlRFU1RfQ09ERV9CRUdJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNkZWZpbmUgUlZfQ09NUExJQU5DRV9DT0RFX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSVlRFU1RfQ09ERV9FTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNkZWZpbmUgUlZfQ09NUExJQU5DRV9EQVRBX0JFR0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSVlRFU1RfREFUQV9CRUdJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNkZWZpbmUgUlZfQ09NUExJQU5DRV9EQVRBX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSVlRFU1RfREFUQV9FTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNlbmRpZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL3Jpc2N2X3Rlc3QuaCBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL3Jpc2N2X3Rlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGM2MTU2Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvcmlzY3ZfdGVzdC5oCkBAIC0wLDAgKzEsNyBAQAorCisjaWZuZGVmIF9SSVNDVl9URVNUX0gKKyNkZWZpbmUgX1JJU0NWX1RFU1RfSAorCisjaW5jbHVkZSAidGVzdF9tYWNyb3MuaCIKKworI2VuZGlmClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvcmlzY3ZfdGVzdF9tYWNyb3MuaCBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL3Jpc2N2X3Rlc3RfbWFjcm9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcxN2JkNAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL3Jpc2N2X3Rlc3RfbWFjcm9zLmgKQEAgLTAsMCArMSw0NjMgQEAKKy8vIFJJU0MtViBDb21wbGlhbmNlIElPIFRlc3QgSGVhZGVyIEZpbGUKKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDE4IEltcGVyYXMgU29mdHdhcmUgTHRkLiwgd3d3LmltcGVyYXMuY29tCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwKKyAqIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICovCisKKyNpbmNsdWRlICJyaXNjdl9tYWNyb3MuaCIKKworLy8KKy8vIEluIGdlbmVyYWwgdGhlIGZvbGxvd2luZyByZWdpc3RlcnMgYXJlIHJlc2VydmVkCisvLyByYSwgYTAsIHQwLCB0MQorLy8gQWRkaXRpb25hbGx5IG9uIGFuIGFzc2VydGlvbiB2aW9sYXRpb24sIHQxLCB0MiBhcmUgb3ZlcndyaXR0ZW4KKy8vIHgxLCB4MTAsIHg1LCB4NiwgeDcgcmVzcGVjdGl2ZWx5CisvLyBGbG9hdGluZyByZWdpc3RlcnMgcmVzZXJ2ZWQKKy8vIGY1CisvLworCisjZGVmaW5lIE1BU0tfWExFTih4KSAoKHgpICYgKCgxIDw8IChfX3Jpc2N2X3hsZW4gLSAxKSA8PCAxKSAtIDEpKQorCisjZGVmaW5lIFNFWFRfSU1NKHgpICgoeCkgfCAoLSgoKHgpID4+IDExKSAmIDEpIDw8IDExKSkKKworLy8gQmFzZSBmdW5jdGlvbiBmb3IgaW50ZWdlciBvcGVyYXRpb25zCisjZGVmaW5lIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBjb2RlLi4uICkgXAorICAgIGNvZGU7IFwKKyAgICBzdyBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEodGVzdHJlZywgZGVzdHJlZywgY29ycmVjdHZhbCkgXAorCisvLyBCYXNlIGZ1bmN0aW9ucyBmb3Igc2luZ2xlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBvcGVyYXRpb25zCisjZGVmaW5lIFRFU1RfQ0FTRV9GUCh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCwgY29kZS4uLiApIFwKKyAgICBsYSAgYTAsIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOyBcCisgICAgZmx3IHJlZzEsIDAoYTApOyBcCisgICAgZmx3IHJlZzIsIDQoYTApOyBcCisgICAgbHcgdDEsIDgoYTApOyBcCisgICAgY29kZTsgXAorICAgIGZzdyBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgUlZURVNUX0lPX0FTU0VSVF9TRlBSX0VRKGRlc3RyZWcsIHQxLCBjb3JyZWN0dmFsKSBcCisgICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCisgICAgLmFsaWduIDM7IFwKKyAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmZsb2F0IHZhbDE7IFwKKyAgICAgIC5mbG9hdCB2YWwyOyBcCisgICAgICAud29yZCBjb3JyZWN0dmFsOyBcCisgICAgLnBvcHNlY3Rpb24KKworI2RlZmluZSBURVNUX0NBU0VfRlBfSSh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGx3IHQxLCAwKGEwKTsgXAorICAgIGNvZGU7IFwKKyAgICBmc3cgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgIFJWVEVTVF9JT19BU1NFUlRfU0ZQUl9FUShkZXN0cmVnLCB0MSwgY29ycmVjdHZhbCkgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5hbGlnbiAxOyBcCisgICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKKyAgICAgIC53b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUF9JMih0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsdyByZWcsIDAoYTApOyBcCisgICAgbHcgdDEsIDQoYTApOyBcCisgICAgY29kZTsgXAorICAgIHN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIGRlc3RyZWcsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYWxpZ24gMjsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZmxvYXQgdmFsOyBcCisgICAgICAud29yZCBjb3JyZWN0dmFsOyBcCisgICAgLnBvcHNlY3Rpb24KKworI2RlZmluZSBURVNUX0NBU0VfRlBfNFJFRyh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgcmVnMywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgdmFsMywgc3dyZWcsIG9mZnNldCwgY29kZS4uLiApIFwKKyAgICBsYSAgYTAsIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOyBcCisgICAgZmx3IHJlZzEsIDAoYTApOyBcCisgICAgZmx3IHJlZzIsIDQoYTApOyBcCisgICAgZmx3IHJlZzMsIDgoYTApOyBcCisgICAgbHcgdDEsIDEyKGEwKTsgXAorICAgIGNvZGU7IFwKKyAgICBmc3cgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgIFJWVEVTVF9JT19BU1NFUlRfU0ZQUl9FUShkZXN0cmVnLCB0MSwgY29ycmVjdHZhbCkgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5hbGlnbiA0OyBcCisgICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKKyAgICAgIC5mbG9hdCB2YWwxOyBcCisgICAgICAuZmxvYXQgdmFsMjsgXAorICAgICAgLmZsb2F0IHZhbDM7IFwKKyAgICAgIC53b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUF9GTVZYUyh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsdyByZWcsIDAoYTApOyBcCisgICAgY29kZTsgXAorICAgIHN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIGRlc3RyZWcsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYWxpZ24gMTsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZmxvYXQgdmFsOyBcCisgICAgLnBvcHNlY3Rpb24KKworI2RlZmluZSBURVNUX0NBU0VfRlBfRk1WU1godGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBjb2RlLi4uKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGxpIHJlZywgdmFsOyBcCisgICAgY29kZTsgXAorICAgIGZzdyBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgbHcgYTEsIDAoYTApOyBcCisgICAgUlZURVNUX0lPX0FTU0VSVF9TRlBSX0VRKGRlc3RyZWcsIGExLCBjb3JyZWN0dmFsKSBcCisgICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCisgICAgLmFsaWduIDE7IFwKKyAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLndvcmQgY29ycmVjdHZhbDsgXAorICAgIC5wb3BzZWN0aW9uCisKKy8vIEJhc2UgZnVuY3Rpb25zIGZvciBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbnMgLSBydjMyZAorI2RlZmluZSBURVNUX0NBU0VfRlBEKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcxLCByZWcyLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0LCBjb2RlLi4uICkgXAorICAgIGxhICBhMCwgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBmbGQgcmVnMSwgMChhMCk7IFwKKyAgICBmbGQgcmVnMiwgOChhMCk7IFwKKyAgICBjb2RlOyBcCisgICAgZnNkIGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBsdyB0MSwgMTYoYTApOyBcCisgICAgbHcgdDIsIDIwKGEwKTsgXAorICAgIGxhIGEwLCBzdG9yZV8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBmc2QgZGVzdHJlZywgMChhMCk7IFwKKyAgICBsdyBhMSwgMChhMCk7IFwKKyAgICBsdyBhMiwgNChhMCk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0RGUFJfRVEoZGVzdHJlZywgdDIsIHQxLCBhMiwgYTEsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYWxpZ24gMzsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZG91YmxlIHZhbDE7IFwKKyAgICAgIC5kb3VibGUgdmFsMjsgXAorICAgICAgLmR3b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbjsgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIHN0b3JlXyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmZpbGwgMSwgOCwgLTE7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUERfSSh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGNvZGU7IFwKKyAgICBmc2QgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgIGx3IHQxLCAwKGEwKTsgXAorICAgIGx3IHQyLCA0KGEwKTsgXAorICAgIGxhIGEwLCBzdG9yZV8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBmc2QgZGVzdHJlZywgMChhMCk7IFwKKyAgICBsdyBhMSwgMChhMCk7IFwKKyAgICBsdyBhMiwgNChhMCk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0RGUFJfRVEoZGVzdHJlZywgdDIsIHQxLCBhMiwgYTEsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYWxpZ24gMTsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZHdvcmQgY29ycmVjdHZhbDsgXAorICAgIC5wb3BzZWN0aW9uOyBcCisgICAgc3RvcmVfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZmlsbCAxLCA4LCAtMTsgXAorICAgIC5wb3BzZWN0aW9uCisKKyNkZWZpbmUgVEVTVF9DQVNFX0ZQRF9JMih0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsZCByZWcsIDAoYTApOyBcCisgICAgbHcgdDEsIDgoYTApOyBcCisgICAgY29kZTsgXAorICAgIHN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIGRlc3RyZWcsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYWxpZ24gMjsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZG91YmxlIHZhbDsgXAorICAgICAgLndvcmQgY29ycmVjdHZhbDsgXAorICAgIC5wb3BzZWN0aW9uCisKKyNkZWZpbmUgVEVTVF9DQVNFX0ZQRF80UkVHKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcxLCByZWcyLCByZWczLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCB2YWwzLCBzd3JlZywgb2Zmc2V0LCBjb2RlLi4uICkgXAorICAgIGxhICBhMCwgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBmbGQgcmVnMSwgMChhMCk7IFwKKyAgICBmbGQgcmVnMiwgOChhMCk7IFwKKyAgICBmbGQgcmVnMywgMTYoYTApOyBcCisgICAgY29kZTsgXAorICAgIGZzZCBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgbHcgdDEsIDI0KGEwKTsgXAorICAgIGx3IHQyLCAyOChhMCk7IFwKKyAgICBsYSBhMCwgc3RvcmVfICMjIHRlc3RfbnVtICMjIF9kYXRhOyBcCisgICAgZnNkIGRlc3RyZWcsIDAoYTApOyBcCisgICAgbHcgYTEsIDAoYTApOyBcCisgICAgbHcgYTIsIDQoYTApOyBcCisgICAgUlZURVNUX0lPX0FTU0VSVF9ERlBSX0VRKGRlc3RyZWcsIHQyLCB0MSwgYTIsIGExLCBjb3JyZWN0dmFsKSBcCisgICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCisgICAgLmFsaWduIDQ7IFwKKyAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmRvdWJsZSB2YWwxOyBcCisgICAgICAuZG91YmxlIHZhbDI7IFwKKyAgICAgIC5kb3VibGUgdmFsMzsgXAorICAgICAgLmR3b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbjsgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIHN0b3JlXyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmZpbGwgMSwgOCwgLTE7IFwKKyAgICAucG9wc2VjdGlvbgorCisvL1Rlc3RzIGZvciBhIGluc3RydWN0aW9ucyB3aXRoIHJlZ2lzdGVyLXJlZ2lzdGVyIG9wZXJhbmQKKyNkZWZpbmUgVEVTVF9SUl9PUChpbnN0LCBkZXN0cmVnLCByZWcxLCByZWcyLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCisgICAgVEVTVF9DQVNFKHRlc3RyZWcsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGxpICByZWcxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpICByZWcyLCBNQVNLX1hMRU4odmFsMik7IFwKKyAgICAgIGluc3QgZGVzdHJlZywgcmVnMSwgcmVnMjsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzEoIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSBkZXN0cmVnLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIGRlc3RyZWcsIHJlZzsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzIoIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgbGkgZGVzdHJlZywgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIHJlZywgZGVzdHJlZzsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzEyKCBpbnN0LCBkZXN0cmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIHRlc3RyZWcpIFwKKyAgICBURVNUX0NBU0UodGVzdHJlZywgZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgbGkgZGVzdHJlZywgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIGRlc3RyZWcsIGRlc3RyZWc7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9aRVJPMSggaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIHRlc3RyZWcpIFwKKyAgICBURVNUX0NBU0UodGVzdHJlZywgZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgbGkgcmVnLCBNQVNLX1hMRU4odmFsKTsgXAorICAgICAgaW5zdCBkZXN0cmVnLCB4MCwgcmVnOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfWkVSTzIoIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCisgICAgVEVTVF9DQVNFKHRlc3RyZWcsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbCk7IFwKKyAgICAgIGluc3QgZGVzdHJlZywgcmVnLCB4MDsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1pFUk8xMiggaW5zdCwgZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBpbnN0IGRlc3RyZWcsIHgwLCB4MDsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1pFUk9ERVNUKCBpbnN0LCByZWcxLCByZWcyLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCisgICAgVEVTVF9DQVNFKHRlc3RyZWcsIHgwLCAwLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSByZWcxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpIHJlZzIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCB4MCwgcmVnMSwgcmVnMjsgXAorICAgICkKKworLy9UZXN0cyBmb3IgYSBpbnN0cnVjdGlvbnMgd2l0aCByZWdpc3Rlci1pbW1lZGlhdGUgb3BlcmFuZAorI2RlZmluZSBURVNUX0lNTV9PUCggaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIGltbSwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIHJlZywgU0VYVF9JTU0oaW1tKTsgXAorICAgICkKKworI2RlZmluZSBURVNUX0lNTV9TUkMoIGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCisgICAgVEVTVF9DQVNFKHRlc3RyZWcsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGxpIGRlc3RyZWcsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIGRlc3RyZWcsIFNFWFRfSU1NKGltbSk7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fWkVST1NSQyggaW5zdCwgZGVzdHJlZywgY29ycmVjdHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCisgICAgVEVTVF9DQVNFKHRlc3RyZWcsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGluc3QgZGVzdHJlZywgeDAsIFNFWFRfSU1NKGltbSk7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fWkVST0RFU1QoIGluc3QsIHJlZywgdmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQsIHRlc3RyZWcpIFwKKyAgICBURVNUX0NBU0UodGVzdHJlZywgeDAsIDAsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbCk7IFwKKyAgICAgIGluc3QgeDAsIHJlZywgU0VYVF9JTU0oaW1tKTsgXAorICAgICkKKworI2RlZmluZSBURVNUX0lNTV9PTkVSRUcoIGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBpbnN0IGRlc3RyZWcsIFNFWFRfSU1NKGltbSk7IFwKKyAgICAgICkKKworI2RlZmluZSBURVNUX0FVSVBDKGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAxOiBcCisgICAgICBpbnN0IGRlc3RyZWcsIGltbTsgXAorICAgICAgbGEgc3dyZWcsIDFiOyBcCisgICAgICBzdWIgZGVzdHJlZywgZGVzdHJlZywgc3dyZWc7IFwKKyAgICAgICkKKworLy9UZXN0cyBmb3IgYSBjb21wcmVzc2VkIGluc3RydWN0aW9uCisjZGVmaW5lIFRFU1RfQ1JfT1AoIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgbGkgZGVzdHJlZywgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIHJlZzsgXAorICAgICAgKQorCisjZGVmaW5lIFRFU1RfQ0lfT1AoIGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCisgICAgVEVTVF9DQVNFKHRlc3RyZWcsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGxpIGRlc3RyZWcsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIGltbTsgXAorICAgICAgKQorCisjZGVmaW5lIFRFU1RfQ0lfT1BfTk9SRUcoaW5zdCwgY29ycmVjdHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCisgICAgVEVTVF9DQVNFKHRlc3RyZWcseDAsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGluc3QgaW1tOyBcCisgICAgICApCisKKy8vVGVzdHMgZm9yIGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucyAtIHNpbmdsZSBwcmVjaXNpb24KKyNkZWZpbmUgVEVTVF9GUF9PUCh0ZXN0X251bSwgaW5zdCwgZGVzdHJlZywgcmVnMSwgcmVnMiwgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFX0ZQKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcxLCByZWcyLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAgIGluc3QgZGVzdHJlZywgcmVnMSwgcmVnMjsgXAorICAgICAgICApCisKKyNkZWZpbmUgVEVTVF9GUF9PTkVSRUcodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlAodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzsgXAorICAgICAgICApCisKKyNkZWZpbmUgVEVTVF9GUF80UkVHKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcxLCByZWcyLCByZWczLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCB2YWwzLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBfNFJFRyh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgcmVnMywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgdmFsMywgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzM7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBfSSh0ZXN0X251bSwgaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRV9GUF9JKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICAgIGluc3QgZGVzdHJlZywgcmVnOyBcCisgICAgICAgICkKKworI2RlZmluZSBURVNUX0ZQX0kyKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFX0ZQX0kyKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzsgXAorICAgICAgICApCisKKy8vVGVzdHMgZm9yIGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucyAtIGRvdWJsZSBwcmVjaXNpb24KKyNkZWZpbmUgVEVTVF9GUERfT1AodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZzEsIHJlZzIsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRV9GUEQodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWcxLCByZWcyOyBcCisgICAgICAgICkKKworI2RlZmluZSBURVNUX0ZQRF9PTkVSRUcodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBEKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWc7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBEXzRSRUcodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzMsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHZhbDMsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRV9GUERfNFJFRyh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgcmVnMywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgdmFsMywgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzM7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBEX0kodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBEX0kodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbCk7IFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWc7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBEX0kyKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFX0ZQRF9JMih0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWc7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfQ0FEREkxNlNQKGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgICAgVEVTVF9DQVNFKHRlc3RyZWcseDIsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGMuYWRkaTE2c3AgeDIsIGltbTsgXAorICAgICAgKQorCisjZGVmaW5lIFRFU1RfQ0FEREk0U1BOKGRlc3RyZWcsIGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgICAgVEVTVF9DQVNFKHRlc3RyZWcsZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBjLmFkZGk0c3BuIGRlc3RyZWcsIHgyLCBTRVhUX0lNTShpbW0pOyBcCisgICAgICAgICkKKworI2RlZmluZSBURVNUX0NKTChpbnN0LCByZWcsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgbGkgeDEwLCB2YWw7IFwKKyAgICAgIGxhIHJlZywgMWY7IFwKKyAgICAgIGluc3QgcmVnOyBcCisgICAgICBsaSB4MTAsIDB4MTIzYWI7IFwKKzE6IFwKKyAgICAgIHN3IHgxMCwgb2Zmc2V0KHN3cmVnKTsgXAorICAgICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEoeDMxLCB4MTAsIHZhbCk7IFwKKworI2RlZmluZSBBQlMoeCkgKCh4ID4+IDExKSBeIHgpIC0gKHggPj4gMTEpCisKKyNkZWZpbmUgVEVTVF9DSihpbnN0LCByZWcsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgbGkgcmVnLCB2YWw7IFwKKyAgICAgIGluc3QgMWY7IFwKKyAgICAgIGxpIHJlZywgMHgxMjNhYjsgXAorMTogXAorICAgICAgc3cgcmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIHJlZywgdmFsKTsgXAorCisjZGVmaW5lIFRFU1RfQ0woaW5zdCwgcmVnLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIGxhIHJlZywgdGVzdF9kYXRhOyBcCisgICAgICBpbnN0IHJlZywgaW1tKHJlZyk7IFwKKyAgICAgIHN3IHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorCisvLyBsdyByZWcsIGltbSh4MikKKy8vIGMubHdzcCByZWcsIGltbSh4MikKKyNkZWZpbmUgVEVTVF9DTFdTUChyZWcsIGltbSwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgbGEgeDIsIHRlc3RfZGF0YTsgXAorICAgICAgYy5sd3NwIHJlZywgaW1tKHgyKTsgXAorICAgICAgc3cgcmVnLCBvZmZzZXQoc3dyZWcpOyBcCisKKyNkZWZpbmUgVEVTVF9DU1codGVzdF9kYXRhLCBpbnN0LCByZWcxLCByZWcyLCB2YWwsIGltbSwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgbGkgcmVnMSwgdmFsOyBcCisgICAgICBsYSByZWcyLCB0ZXN0X2RhdGE7IFwKKyAgICAgIGluc3QgcmVnMSwgaW1tKHJlZzIpOyBcCisgICAgICBsdyByZWcxLCBpbW0ocmVnMik7IFwKKyAgICAgIHN3IHJlZzEsIG9mZnNldChzd3JlZyk7IFwKKyAgICAgIFJWVEVTVF9JT19BU1NFUlRfR1BSX0VRKHgzMSwgcmVnMSwgdmFsKTsgXAorCisjZGVmaW5lIFRFU1RfQ1NXU1AodGVzdF9kYXRhLCByZWcsIHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBsYSB4MiwgdGVzdF9kYXRhOyBcCisgICAgICBsaSByZWcsIHZhbDsgXAorICAgICAgYy5zd3NwIHJlZywgaW1tKHgyKTsgXAorICAgICAgbHcgcmVnLCBpbW0oeDIpOyBcCisgICAgICBzdyByZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICAgIFJWVEVTVF9JT19BU1NFUlRfR1BSX0VRKHgzMSwgcmVnLCB2YWwpOyBcCisKKyNkZWZpbmUgVEVTVF9DQkVRWihyZWcsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgbGkgcmVnLCB2YWw7IFwKKyAgICAgIGMuc3ViIHJlZywgcmVnOyBcCisgICAgICBjLmJlcXogcmVnLCAzZjsgXAorICAgICAgbGkgcmVnLCAweDEyM2FiOyBcCiszOiBcCisgICAgICBzdyByZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICAgIFJWVEVTVF9JT19BU1NFUlRfR1BSX0VRKHgzMSwgcmVnLCAweDApOyBcCisKKyNkZWZpbmUgVEVTVF9DQk5FWihyZWcsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgbGkgcmVnLCB2YWw7IFwKKyAgICAgIGMuYm5leiByZWcsIDRmOyBcCisgICAgICBsaSByZWcsIDB4MDsgXAorNDogXAorICAgICAgc3cgcmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIHJlZywgdmFsKTsgXAorCisjZGVmaW5lIFRFU1RfRk1WWFModGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBfRk1WWFModGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAgIGZtdi54LnMgZGVzdHJlZywgcmVnOyBcCisgICAgICAgICkKKworI2RlZmluZSBURVNUX0ZNVlNYKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFX0ZQX0ZNVlNYKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBmbXYucy54IGRlc3RyZWcsIHJlZzsgXAorICAgICAgICApCisKKyNkZWZpbmUgU1dTSUcoYSxiKQorCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvcmlzY3ZfY29tcGxpYW5jZS90ZXN0X21hY3Jvcy5oIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvdGVzdF9tYWNyb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmM2MTBlCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvdGVzdF9tYWNyb3MuaApAQCAtMCwwICsxLDU5MyBAQAorCisvLyBSSVNDLVYgQ29tcGxpYW5jZSBUZXN0IEhlYWRlciBGaWxlCisvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIENvZGFzaXAgTHRkLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8gU2VlIExJQ0VOU0UgZm9yIGxpY2Vuc2UgZGV0YWlscy4KKy8vCisvLyBEZXNjcmlwdGlvbjogQ29tbW9uIGhlYWRlciBmaWxlIGZvciBSVjMySSB0ZXN0cworCisjaWZuZGVmIF9URVNUX01BQ1JPU19ICisjZGVmaW5lIF9URVNUX01BQ1JPU19ICisKKyNpbmNsdWRlICJyaXNjdl9tYWNyb3MuaCIKKworLy8gUklTQy1WIENvbXBsaWFuY2UgSU8gVGVzdCBIZWFkZXIgRmlsZQorCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMTggSW1wZXJhcyBTb2Z0d2FyZSBMdGQuLCB3d3cuaW1wZXJhcy5jb20KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELAorICogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworCisvLworLy8gSW4gZ2VuZXJhbCB0aGUgZm9sbG93aW5nIHJlZ2lzdGVycyBhcmUgcmVzZXJ2ZWQKKy8vIHJhLCBhMCwgdDAsIHQxCisvLyBBZGRpdGlvbmFsbHkgb24gYW4gYXNzZXJ0aW9uIHZpb2xhdGlvbiwgdDEsIHQyIGFyZSBvdmVyd3JpdHRlbgorLy8geDEsIHgxMCwgeDUsIHg2LCB4NyByZXNwZWN0aXZlbHkKKy8vIEZsb2F0aW5nIHJlZ2lzdGVycyByZXNlcnZlZAorLy8gZjUKKy8vCisKKyNkZWZpbmUgTUFTS19YTEVOKHgpICgoeCkgJiAoKDEgPDwgKF9fcmlzY3ZfeGxlbiAtIDEpIDw8IDEpIC0gMSkpCisKKyNkZWZpbmUgU0VYVF9JTU0oeCkgKCh4KSB8ICgtKCgoeCkgPj4gMTEpICYgMSkgPDwgMTEpKQorCisvLyBCYXNlIGZ1bmN0aW9uIGZvciBpbnRlZ2VyIG9wZXJhdGlvbnMKKyNkZWZpbmUgVEVTVF9DQVNFKGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgY29kZTsgXAorICAgIHN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIGRlc3RyZWcsIGNvcnJlY3R2YWwpIFwKKworLy8gQmFzZSBmdW5jdGlvbnMgZm9yIHNpbmdsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucworI2RlZmluZSBURVNUX0NBU0VfRlAodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsdyByZWcxLCAwKGEwKTsgXAorICAgIGZsdyByZWcyLCA0KGEwKTsgXAorICAgIGx3IHQxLCA4KGEwKTsgXAorICAgIGNvZGU7IFwKKyAgICBmc3cgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgIFJWVEVTVF9JT19BU1NFUlRfU0ZQUl9FUShkZXN0cmVnLCB0MSwgY29ycmVjdHZhbCkgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5iYWxpZ24gODsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZmxvYXQgdmFsMTsgXAorICAgICAgLmZsb2F0IHZhbDI7IFwKKyAgICAgIC53b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUF9JKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgY29kZS4uLiApIFwKKyAgICBsYSAgYTAsIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOyBcCisgICAgbHcgdDEsIDAoYTApOyBcCisgICAgY29kZTsgXAorICAgIGZzdyBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgUlZURVNUX0lPX0FTU0VSVF9TRlBSX0VRKGRlc3RyZWcsIHQxLCBjb3JyZWN0dmFsKSBcCisgICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCisgICAgLmJhbGlnbiAyOyBcCisgICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKKyAgICAgIC53b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUF9JMih0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsdyByZWcsIDAoYTApOyBcCisgICAgbHcgdDEsIDQoYTApOyBcCisgICAgY29kZTsgXAorICAgIHN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIGRlc3RyZWcsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYmFsaWduIDQ7IFwKKyAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmZsb2F0IHZhbDsgXAorICAgICAgLndvcmQgY29ycmVjdHZhbDsgXAorICAgIC5wb3BzZWN0aW9uCisKKyNkZWZpbmUgVEVTVF9DQVNFX0ZQXzRSRUcodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzMsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHZhbDMsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsdyByZWcxLCAwKGEwKTsgXAorICAgIGZsdyByZWcyLCA0KGEwKTsgXAorICAgIGZsdyByZWczLCA4KGEwKTsgXAorICAgIGx3IHQxLCAxMihhMCk7IFwKKyAgICBjb2RlOyBcCisgICAgZnN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX1NGUFJfRVEoZGVzdHJlZywgdDEsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYmFsaWduIDE2OyBcCisgICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKKyAgICAgIC5mbG9hdCB2YWwxOyBcCisgICAgICAuZmxvYXQgdmFsMjsgXAorICAgICAgLmZsb2F0IHZhbDM7IFwKKyAgICAgIC53b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUF9GTVZYUyh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsdyByZWcsIDAoYTApOyBcCisgICAgY29kZTsgXAorICAgIHN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIGRlc3RyZWcsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYmFsaWduIDI7IFwKKyAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmZsb2F0IHZhbDsgXAorICAgIC5wb3BzZWN0aW9uCisKKyNkZWZpbmUgVEVTVF9DQVNFX0ZQX0ZNVlNYKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgY29kZS4uLikgXAorICAgIGxhICBhMCwgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBsaSByZWcsIHZhbDsgXAorICAgIGNvZGU7IFwKKyAgICBmc3cgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgIGx3IGExLCAwKGEwKTsgXAorICAgIFJWVEVTVF9JT19BU1NFUlRfU0ZQUl9FUShkZXN0cmVnLCBhMSwgY29ycmVjdHZhbCkgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5iYWxpZ24gMjsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAud29yZCBjb3JyZWN0dmFsOyBcCisgICAgLnBvcHNlY3Rpb24KKworLy8gQmFzZSBmdW5jdGlvbnMgZm9yIGRvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucyAtIHJ2MzJkCisjZGVmaW5lIFRFU1RfQ0FTRV9GUEQodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsZCByZWcxLCAwKGEwKTsgXAorICAgIGZsZCByZWcyLCA4KGEwKTsgXAorICAgIGNvZGU7IFwKKyAgICBmc2QgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgIGx3IHQxLCAxNihhMCk7IFwKKyAgICBsdyB0MiwgMjAoYTApOyBcCisgICAgbGEgYTAsIHN0b3JlXyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZzZCBkZXN0cmVnLCAwKGEwKTsgXAorICAgIGx3IGExLCAwKGEwKTsgXAorICAgIGx3IGEyLCA0KGEwKTsgXAorICAgIFJWVEVTVF9JT19BU1NFUlRfREZQUl9FUShkZXN0cmVnLCB0MiwgdDEsIGEyLCBhMSwgY29ycmVjdHZhbCkgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5iYWxpZ24gODsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZG91YmxlIHZhbDE7IFwKKyAgICAgIC5kb3VibGUgdmFsMjsgXAorICAgICAgLmR3b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbjsgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIHN0b3JlXyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmZpbGwgMSwgOCwgLTE7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUERfSSh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGNvZGU7IFwKKyAgICBmc2QgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgIGx3IHQxLCAwKGEwKTsgXAorICAgIGx3IHQyLCA0KGEwKTsgXAorICAgIGxhIGEwLCBzdG9yZV8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBmc2QgZGVzdHJlZywgMChhMCk7IFwKKyAgICBsdyBhMSwgMChhMCk7IFwKKyAgICBsdyBhMiwgNChhMCk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0RGUFJfRVEoZGVzdHJlZywgdDIsIHQxLCBhMiwgYTEsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYmFsaWduIDI7IFwKKyAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmR3b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbjsgXAorICAgIHN0b3JlXyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmZpbGwgMSwgOCwgLTE7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUERfSTIodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBjb2RlLi4uICkgXAorICAgIGxhICBhMCwgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBmbGQgcmVnLCAwKGEwKTsgXAorICAgIGx3IHQxLCA4KGEwKTsgXAorICAgIGNvZGU7IFwKKyAgICBzdyBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEoeDMxLCBkZXN0cmVnLCBjb3JyZWN0dmFsKSBcCisgICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCisgICAgLmJhbGlnbiA0OyBcCisgICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKKyAgICAgIC5kb3VibGUgdmFsOyBcCisgICAgICAud29yZCBjb3JyZWN0dmFsOyBcCisgICAgLnBvcHNlY3Rpb24KKworI2RlZmluZSBURVNUX0NBU0VfRlBEXzRSRUcodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzMsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHZhbDMsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsZCByZWcxLCAwKGEwKTsgXAorICAgIGZsZCByZWcyLCA4KGEwKTsgXAorICAgIGZsZCByZWczLCAxNihhMCk7IFwKKyAgICBjb2RlOyBcCisgICAgZnNkIGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBsdyB0MSwgMjQoYTApOyBcCisgICAgbHcgdDIsIDI4KGEwKTsgXAorICAgIGxhIGEwLCBzdG9yZV8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBmc2QgZGVzdHJlZywgMChhMCk7IFwKKyAgICBsdyBhMSwgMChhMCk7IFwKKyAgICBsdyBhMiwgNChhMCk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0RGUFJfRVEoZGVzdHJlZywgdDIsIHQxLCBhMiwgYTEsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYmFsaWduIDE2OyBcCisgICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKKyAgICAgIC5kb3VibGUgdmFsMTsgXAorICAgICAgLmRvdWJsZSB2YWwyOyBcCisgICAgICAuZG91YmxlIHZhbDM7IFwKKyAgICAgIC5kd29yZCBjb3JyZWN0dmFsOyBcCisgICAgLnBvcHNlY3Rpb247IFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICBzdG9yZV8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKKyAgICAgIC5maWxsIDEsIDgsIC0xOyBcCisgICAgLnBvcHNlY3Rpb24KKworLy9UZXN0cyBmb3IgYSBpbnN0cnVjdGlvbnMgd2l0aCByZWdpc3Rlci1yZWdpc3RlciBvcGVyYW5kCisjZGVmaW5lIFRFU1RfUlJfT1AoaW5zdCwgZGVzdHJlZywgcmVnMSwgcmVnMiwgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCkgXAorICAgIFRFU1RfQ0FTRSggZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgbGkgIHJlZzEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgbGkgIHJlZzIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCBkZXN0cmVnLCByZWcxLCByZWcyOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfU1JDMSggaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgVEVTVF9DQVNFKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSBkZXN0cmVnLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIGRlc3RyZWcsIHJlZzsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzIoIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCkgXAorICAgIFRFU1RfQ0FTRSggZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgbGkgcmVnLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpIGRlc3RyZWcsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCBkZXN0cmVnLCByZWcsIGRlc3RyZWc7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9TUkMxMiggaW5zdCwgZGVzdHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgVEVTVF9DQVNFKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSBkZXN0cmVnLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGluc3QgZGVzdHJlZywgZGVzdHJlZywgZGVzdHJlZzsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1pFUk8xKCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgIFRFU1RfQ0FTRSggZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgbGkgcmVnLCBNQVNLX1hMRU4odmFsKTsgXAorICAgICAgaW5zdCBkZXN0cmVnLCB4MCwgcmVnOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfWkVSTzIoIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgVEVTVF9DQVNFKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIHJlZywgeDA7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9aRVJPMTIoIGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICBURVNUX0NBU0UoIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGluc3QgZGVzdHJlZywgeDAsIHgwOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfWkVST0RFU1QoIGluc3QsIHJlZzEsIHJlZzIsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICBURVNUX0NBU0UoIHgwLCAwLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSByZWcxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpIHJlZzIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCB4MCwgcmVnMSwgcmVnMjsgXAorICAgICkKKworLy9UZXN0cyBmb3IgYSBpbnN0cnVjdGlvbnMgd2l0aCByZWdpc3Rlci1pbW1lZGlhdGUgb3BlcmFuZAorI2RlZmluZSBURVNUX0lNTV9PUCggaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIGltbSwgc3dyZWcsIG9mZnNldCkgXAorICAgIFRFU1RfQ0FTRSAoIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbCk7IFwKKyAgICAgIGluc3QgZGVzdHJlZywgcmVnLCBTRVhUX0lNTShpbW0pOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX1NSQyggaW5zdCwgZGVzdHJlZywgY29ycmVjdHZhbCwgdmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKKyAgICBURVNUX0NBU0UgKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSBkZXN0cmVnLCBNQVNLX1hMRU4odmFsKTsgXAorICAgICAgaW5zdCBkZXN0cmVnLCBkZXN0cmVnLCBTRVhUX0lNTShpbW0pOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX1pFUk9TUkMoIGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCkgXAorICAgIFRFU1RfQ0FTRSAoIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGluc3QgZGVzdHJlZywgeDAsIFNFWFRfSU1NKGltbSk7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fWkVST0RFU1QoIGluc3QsIHJlZywgdmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKKyAgICBURVNUX0NBU0UgKCB4MCwgMCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgbGkgcmVnLCBNQVNLX1hMRU4odmFsKTsgXAorICAgICAgaW5zdCB4MCwgcmVnLCBTRVhUX0lNTShpbW0pOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX09ORVJFRyggaW5zdCwgZGVzdHJlZywgY29ycmVjdHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgVEVTVF9DQVNFICggZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgaW5zdCBkZXN0cmVnLCBTRVhUX0lNTShpbW0pOyBcCisgICAgICApCisKKyNkZWZpbmUgVEVTVF9BVUlQQyhpbnN0LCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKKyAgICBURVNUX0NBU0UgKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAxOiBcCisgICAgICBpbnN0IGRlc3RyZWcsIFNFWFRfSU1NKGltbSk7IFwKKyAgICAgIGxhIHN3cmVnLCAxYjsgXAorICAgICAgc3ViIGRlc3RyZWcsIGRlc3RyZWcsIHN3cmVnOyBcCisgICAgICApCisKKy8vVGVzdHMgZm9yIGEgY29tcHJlc3NlZCBpbnN0cnVjdGlvbgorI2RlZmluZSBURVNUX0NSX09QKCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICBURVNUX0NBU0UgKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgbGkgZGVzdHJlZywgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIHJlZzsgXAorICAgICAgKQorCisjZGVmaW5lIFRFU1RfQ0lfT1AoIGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgVEVTVF9DQVNFKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSBkZXN0cmVnLCBNQVNLX1hMRU4odmFsKTsgXAorICAgICAgaW5zdCBkZXN0cmVnLCBpbW07IFwKKyAgICAgICkKKworI2RlZmluZSBURVNUX0NJX09QX05PUkVHKGluc3QsIGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCkgXAorICAgIFRFU1RfQ0FTRSAoeDAsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGluc3QgaW1tOyBcCisgICAgICApCisKKy8vVGVzdHMgZm9yIGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucyAtIHNpbmdsZSBwcmVjaXNpb24KKyNkZWZpbmUgVEVTVF9GUF9PUCh0ZXN0X251bSwgaW5zdCwgZGVzdHJlZywgcmVnMSwgcmVnMiwgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFX0ZQKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcxLCByZWcyLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAgIGluc3QgZGVzdHJlZywgcmVnMSwgcmVnMjsgXAorICAgICAgICApCisKKyNkZWZpbmUgVEVTVF9GUF9PTkVSRUcodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlAodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzsgXAorICAgICAgICApCisKKyNkZWZpbmUgVEVTVF9GUF80UkVHKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcxLCByZWcyLCByZWczLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCB2YWwzLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBfNFJFRyh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgcmVnMywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgdmFsMywgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzM7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBfSSh0ZXN0X251bSwgaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRV9GUF9JKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICAgIGluc3QgZGVzdHJlZywgcmVnOyBcCisgICAgICAgICkKKworI2RlZmluZSBURVNUX0ZQX0kyKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFX0ZQX0kyKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzsgXAorICAgICAgICApCisKKy8vVGVzdHMgZm9yIGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucyAtIGRvdWJsZSBwcmVjaXNpb24KKyNkZWZpbmUgVEVTVF9GUERfT1AodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZzEsIHJlZzIsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRV9GUEQodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWcxLCByZWcyOyBcCisgICAgICAgICkKKworI2RlZmluZSBURVNUX0ZQRF9PTkVSRUcodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBEKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWc7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBEXzRSRUcodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzMsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHZhbDMsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRV9GUERfNFJFRyh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgcmVnMywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgdmFsMywgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzM7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBEX0kodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBEX0kodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbCk7IFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWc7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBEX0kyKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFX0ZQRF9JMih0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWc7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfQ0FEREkxNlNQKGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFKHgyLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBjLmFkZGkxNnNwIHgyLCBpbW07IFwKKyAgICAgICkKKworI2RlZmluZSBURVNUX0NBRERJNFNQTihkZXN0cmVnLCBjb3JyZWN0dmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRShkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAgIGMuYWRkaTRzcG4gZGVzdHJlZywgeDIsIFNFWFRfSU1NKGltbSk7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfQ0pMKGluc3QsIHJlZywgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBsaSB4MTAsIHZhbDsgXAorICAgICAgbGEgcmVnLCAxZjsgXAorICAgICAgaW5zdCByZWc7IFwKKyAgICAgIGxpIHgxMCwgMHgxMjNhYjsgXAorMTogXAorICAgICAgc3cgeDEwLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIHgxMCwgdmFsKTsgXAorCisjZGVmaW5lIEFCUyh4KSAoKHggPj4gMTEpIF4geCkgLSAoeCA+PiAxMSkKKworI2RlZmluZSBURVNUX0NKKGluc3QsIHJlZywgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBsaSByZWcsIHZhbDsgXAorICAgICAgaW5zdCAxZjsgXAorICAgICAgbGkgcmVnLCAweDEyM2FiOyBcCisxOiBcCisgICAgICBzdyByZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICAgIFJWVEVTVF9JT19BU1NFUlRfR1BSX0VRKHgzMSwgcmVnLCB2YWwpOyBcCisKKyNkZWZpbmUgVEVTVF9DTChpbnN0LCByZWcsIGltbSwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgbGEgcmVnLCB0ZXN0X2RhdGE7IFwKKyAgICAgIGluc3QgcmVnLCBpbW0ocmVnKTsgXAorICAgICAgc3cgcmVnLCBvZmZzZXQoc3dyZWcpOyBcCisKKy8vIGx3IHJlZywgaW1tKHgyKQorLy8gYy5sd3NwIHJlZywgaW1tKHgyKQorI2RlZmluZSBURVNUX0NMV1NQKHJlZywgaW1tLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBsYSB4MiwgdGVzdF9kYXRhOyBcCisgICAgICBjLmx3c3AgcmVnLCBpbW0oeDIpOyBcCisgICAgICBzdyByZWcsIG9mZnNldChzd3JlZyk7IFwKKworI2RlZmluZSBURVNUX0NTVyh0ZXN0X2RhdGEsIGluc3QsIHJlZzEsIHJlZzIsIHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBsaSByZWcxLCB2YWw7IFwKKyAgICAgIGxhIHJlZzIsIHRlc3RfZGF0YTsgXAorICAgICAgaW5zdCByZWcxLCBpbW0ocmVnMik7IFwKKyAgICAgIGx3IHJlZzEsIGltbShyZWcyKTsgXAorICAgICAgc3cgcmVnMSwgb2Zmc2V0KHN3cmVnKTsgXAorICAgICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEoeDMxLCByZWcxLCB2YWwpOyBcCisKKyNkZWZpbmUgVEVTVF9DU1dTUCh0ZXN0X2RhdGEsIHJlZywgdmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIGxhIHgyLCB0ZXN0X2RhdGE7IFwKKyAgICAgIGxpIHJlZywgdmFsOyBcCisgICAgICBjLnN3c3AgcmVnLCBpbW0oeDIpOyBcCisgICAgICBsdyByZWcsIGltbSh4Mik7IFwKKyAgICAgIHN3IHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEoeDMxLCByZWcsIHZhbCk7IFwKKworI2RlZmluZSBURVNUX0NCRVFaKHJlZywgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBsaSByZWcsIHZhbDsgXAorICAgICAgYy5zdWIgcmVnLCByZWc7IFwKKyAgICAgIGMuYmVxeiByZWcsIDNmOyBcCisgICAgICBsaSByZWcsIDB4MTIzYWI7IFwKKzM6IFwKKyAgICAgIHN3IHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEoeDMxLCByZWcsIDB4MCk7IFwKKworI2RlZmluZSBURVNUX0NCTkVaKHJlZywgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBsaSByZWcsIHZhbDsgXAorICAgICAgYy5ibmV6IHJlZywgNGY7IFwKKyAgICAgIGxpIHJlZywgMHgwOyBcCis0OiBcCisgICAgICBzdyByZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICAgIFJWVEVTVF9JT19BU1NFUlRfR1BSX0VRKHgzMSwgcmVnLCB2YWwpOyBcCisKKyNkZWZpbmUgVEVTVF9GTVZYUyh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRV9GUF9GTVZYUyh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgICAgZm12LngucyBkZXN0cmVnLCByZWc7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRk1WU1godGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBfRk1WU1godGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAgIGZtdi5zLnggZGVzdHJlZywgcmVnOyBcCisgICAgICAgICkKKworI2RlZmluZSBTV1NJRyhhLGIpCisKKworI2lmIF9fcmlzY3ZfeGxlbiA9PSA2NAorI2RlZmluZSBTQVRQX01PREUgU0FUUDY0X01PREUKKyNlbHNlCisjZGVmaW5lIFNBVFBfTU9ERSBTQVRQMzJfTU9ERQorI2VuZGlmCisKKyNkZWZpbmUgU0FUUDMyX01PREUgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFNBVFAzMl9BU0lEICAgICAgICAgMHg3RkMwMDAwMAorI2RlZmluZSBTQVRQMzJfUFBOICAgICAgICAgIDB4MDAzRkZGRkYKKyNkZWZpbmUgU0FUUDY0X01PREUgMHhGMDAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIFNBVFA2NF9BU0lEIDB4MEZGRkYwMDAwMDAwMDAwMAorI2RlZmluZSBTQVRQNjRfUFBOICAweDAwMDAwRkZGRkZGRkZGRkYKKworI2RlZmluZSBTQVRQX01PREVfT0ZGICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU0FUUF9NT0RFX1NWMzIgICAgICAgICAgICAgICAxCisjZGVmaW5lIFNBVFBfTU9ERV9TVjM5ICAgICAgICAgICAgICAgOAorI2RlZmluZSBTQVRQX01PREVfU1Y0OCAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgU0FUUF9NT0RFX1NWNTcgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFNBVFBfTU9ERV9TVjY0ICAgICAgICAgICAgICAxMQorCisjZGVmaW5lIFRFU1RfRlBfT1AyX0QzMiggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCB2YWwyLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxOyBmc2QgZjMsIDAoYTApOyBsdyB0MiwgNChhMCk7IGx3IGEwLCAwKGEwKSkKKworI2RlZmluZSBURVNUX0NBU0VfRDMyKCB0ZXN0bnVtLCB0ZXN0cmVnMSwgdGVzdHJlZzIsIGNvcnJlY3R2YWwsIGNvZGUuLi4gKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgY29kZTsgXAorICAgIGxhICB4MzEsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgOyBcCisgICAgbHcgIHgyOSwgMCh4MzEpOyBcCisgICAgbHcgIHgzMSwgNCh4MzEpOyBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgICBibmUgdGVzdHJlZzEsIHgyOSwgZmFpbDtcCisgICAgYm5lIHRlc3RyZWcyLCB4MzEsIGZhaWw7XAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5iYWxpZ24gODsgXAorICAgIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKKyAgICAuZHdvcmQgY29ycmVjdHZhbDsgXAorICAgIC5wb3BzZWN0aW9uCisKKyNkZWZpbmUgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCByZXN1bHQsIHZhbDEsIHZhbDIsIHZhbDMsIGNvZGUuLi4gKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgIGxhICBhMCwgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YSA7XAorICBmbGQgZjAsIDAoYTApOyBcCisgIGZsZCBmMSwgOChhMCk7IFwKKyAgZmxkIGYyLCAxNihhMCk7IFwKKyAgbHcgIGEzLCAyNChhMCk7IFwKKyAgbHcgIHQxLCAyOChhMCk7IFwKKyAgY29kZTsgXAorICBmc2ZsYWdzIGExLCB4MDsgXAorICBsaSBhMiwgZmxhZ3M7IFwKKyAgYm5lIGEwLCBhMywgZmFpbDsgXAorICBibmUgdDEsIHQyLCBmYWlsOyBcCisgIGJuZSBhMSwgYTIsIGZhaWw7IFwKKyAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCisgIC5iYWxpZ24gODsgXAorICB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhOiBcCisgIC5kb3VibGUgdmFsMTsgXAorICAuZG91YmxlIHZhbDI7IFwKKyAgLmRvdWJsZSB2YWwzOyBcCisgIC5yZXN1bHQ7IFwKKyAgLnBvcHNlY3Rpb24KKworI2RlZmluZSBURVNUX0ZQX09QMV9EMzIoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEgKSBcCisgIFRFU1RfRlBfT1BfRDMyX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZG91YmxlIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjA7IGZzZCBmMywgMChhMCk7IGx3IHQyLCA0KGEwKTsgbHcgYTAsIDAoYTApKQorCisjZGVmaW5lIFRFU1RfRkNMQVNTX0QzMih0ZXN0bnVtLCBjb3JyZWN0LCBpbnB1dCkgXAorICBURVNUX0NBU0UodGVzdG51bSwgYTAsIGNvcnJlY3QsIFwKKyAgICAgICAgICAgIGxhIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCisgICAgICAgICAgICBmbGQgZmEwLCAwKGEwKTsgXAorICAgICAgICAgICAgZmNsYXNzLmQgYTAsIGZhMCkgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5iYWxpZ24gODsgXAorICAgIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKKyAgICAuZHdvcmQgaW5wdXQ7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfRlBfQ01QX09QX0QzMiggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkd29yZCByZXN1bHQsIHZhbDEsIHZhbDIsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGEwLCBmMCwgZjE7IGxpIHQyLCAwKQorCisjZGVmaW5lIFRFU1RfSU5UX0ZQX09QX0QzMiggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICBsYSAgYTAsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgO1wKKyAgbHcgIGEzLCAwKGEwKTsgXAorICBsdyAgYTQsIDQoYTApOyBcCisgIGxpICBhMSwgdmFsMTsgXAorICBpbnN0IGYwLCBhMTsgXAorICBcCisgIGZzZCBmMCwgMChhMCk7IFwKKyAgbHcgYTEsIDQoYTApOyBcCisgIGx3IGEwLCAwKGEwKTsgXAorICBcCisgIGZzZmxhZ3MgeDA7IFwKKyAgYm5lIGEwLCBhMywgZmFpbDsgXAorICBibmUgYTEsIGE0LCBmYWlsOyBcCisgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAuYmFsaWduIDg7IFwKKyAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAorICAuZG91YmxlIHJlc3VsdDsgXAorICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfRkNWVF9TX0QzMiggdGVzdG51bSwgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgMCwgZG91YmxlIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgZmN2dC5zLmQgZjMsIGYwOyBmY3Z0LmQucyBmMywgZjM7IGZzZCBmMywgMChhMCk7IGx3IHQyLCA0KGEwKTsgbHcgYTAsIDAoYTApKQorCisjZGVmaW5lIFRFU1RfRlBfT1AzX0QzMiggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMyApIFwKKyAgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgZjMsIGYwLCBmMSwgZjI7IGZzZCBmMywgMChhMCk7IGx3IHQyLCA0KGEwKTsgbHcgYTAsIDAoYTApKQorCisjZGVmaW5lIFRFU1RfRlBfT1AxX0QzMl9EV09SRF9SRVNVTFQoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEgKSBcCisgIFRFU1RfRlBfT1BfRDMyX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZHdvcmQgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMDsgZnNkIGYzLCAwKGEwKTsgbHcgdDIsIDQoYTApOyBsdyBhMCwgMChhMCkpCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvcmlzY3ZfaXNhL01ha2VmaWxlIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2lzYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjBmYTNmCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2lzYS9NYWtlZmlsZQpAQCAtMCwwICsxLDk2IEBACisKK2luY2x1ZGUgcnYzMl90ZXN0cy5pbmMKKworQVJDSF90bXAgOj0gaW1mCisKK2lmbmVxICgsJChmaW5kc3RyaW5nIGMsJChBUkNIX2xvd2VyY2FzZSkpKQorCUFSQ0hfdG1wIDo9ICQoQVJDSF90bXApYworZW5kaWYKKworb3ZlcnJpZGUgQVJDSCA6PSAkKEFSQ0hfdG1wKQorCitzcmNfZGlyIDo9ICQoQ1VSRElSKQorb2JqX2RpciAgIDo9ICQoYmxkX2RpcikvcmlzY3Zfb2JqcwordGVzdF9saXN0IDo9ICQocGF0c3Vic3QgJS5TLCAlLCAkKG5vdGRpciAkKHJ2MzJfaXNhX3Rlc3RzKSkpCitvYmpzICAgICAgOj0gJChhZGRwcmVmaXggJChvYmpfZGlyKS8sJCh0ZXN0X2xpc3Q6JT0lLm8pKQordGVzdF9lbGYgIDo9ICQoYWRkcHJlZml4ICQoYmxkX2RpcikvLCQodGVzdF9saXN0OiU9JS5lbGYpKQordGVzdF9oZXggIDo9ICQoYWRkcHJlZml4ICQoYmxkX2RpcikvLCQodGVzdF9saXN0OiU9JS5oZXgpKQordGVzdF9kdW1wIDo9ICQoYWRkcHJlZml4ICQoYmxkX2RpcikvLCQodGVzdF9saXN0OiU9JS5kdW1wKSkKKworQ0ZMQUdTIDo9IC1JJChpbmNfZGlyKSAtSSQoc3JjX2RpcikgLURBU00gLVdhLC1tYXJjaD1ydjMyJChBUkNIKSAtbWFyY2g9cnYzMiQoQVJDSCkgLW1hYmk9aWxwMzJmIC1EX19yaXNjdl94bGVuPTMyCitMREZMQUdTIDo9IC1zdGF0aWMgLWZ2aXNpYmlsaXR5PWhpZGRlbiAtbm9zdGRsaWIgLW5vc3RhcnRmaWxlcyAtVCQoaW5jX2RpcikvbGluay5sZCAtbWFyY2g9cnYzMiQoQVJDSCkgLW1hYmk9aWxwMzJmCitSSVNDVl9URVNUUyA6PSAkKHNyY19kaXIpLy4uLy4uL2RlcGVuZGVuY2llcy9yaXNjdi10ZXN0cy8KKworVlBBVEggKz0gJChzcmNfZGlyKSAkKGJsZF9kaXIpICQob2JqX2RpcikgJChSSVNDVl9URVNUUykKKworZGVmYXVsdDogbG9nX3JlcXVlc3RlZF90Z3QgY2hlY2tfcmlzY3ZfdGVzdHMgJCh0ZXN0X2VsZikgJCh0ZXN0X2hleCkgJCh0ZXN0X2R1bXApCisKK2RlZmluZSBjb21waWxlX3RlbXBsYXRlCiskKG9ial9kaXIpLyQkKGJhc2VuYW1lICQobm90ZGlyICQoU1JDKSkpLm86ICQkKFNSQykgfCAkKG9ial9kaXIpCisJJChSSVNDVl9HQ0MpIC1jICQkPCAkKENGTEFHUykgLW8gJCRACisgZW5kZWYKKworJChmb3JlYWNoIFNSQywkKHJ2MzJfaXNhX3Rlc3RzKSwgJChldmFsICQoY29tcGlsZV90ZW1wbGF0ZSkpKQorCitsb2dfcmVxdWVzdGVkX3RndDoKKwkkKGZvcmVhY2ggdGVzdF9uYW1lLCAkKHRlc3RfbGlzdCksICQoZXZhbCAkKHNoZWxsIGVjaG8gJCh0ZXN0X25hbWUpLmhleCA+PiAkKGJsZF9kaXIpL3Rlc3RfaW5mbykpKQorCiskKG9ial9kaXIpIDoKKwlta2RpciAtcCAkKG9ial9kaXIpCisKKyQoYmxkX2RpcikvJS5lbGY6ICQob2JqX2RpcikvJS5vIHwgJChvYmpfZGlyKQorCSQoUklTQ1ZfR0NDKSAkXiAkKExERkxBR1MpIC1vICRACisKKyQoYmxkX2RpcikvJS5oZXg6ICQoYmxkX2RpcikvJS5lbGYKKwkkKFJJU0NWX1JPTV9PQkpDT1BZKSAkXiAkQAorCSQoUklTQ1ZfUkFNX09CSkNPUFkpICReICRALnJhbQorCSNhc3NpZ24gMHgwODAwXzB4eHggIHRvIDB4MDAwMF8weHh4IHRvIG1hcCB0byBUQ00gTWVtb3J5CisJc2VkIC1pICdzL0AwODAwMC9AMDAwMDAvZycgJEAucmFtCisKKyQoYmxkX2RpcikvJS5kdW1wOiAkKGJsZF9kaXIpLyUuZWxmCisJJChSSVNDVl9PQkpEVU1QKSAkXiA+ICRACisKK2NsZWFuOgorCSQoUk0pICQodGVzdF9lbGYpICQodGVzdF9oZXgpICQodGVzdF9kdW1wKSAkKG9ianMpCisJJChSTSkgLVIgJChvYmpfZGlyKQorCisKKy5QSE9OWTogY2hlY2tfcmlzY3ZfdGVzdHMKKworcmlzY3ZfdGVzdHNfZGlyICAgIDo9ICQoaWYgJChSSVNDVl9URVNUUyksICQoUklTQ1ZfVEVTVFMpLCAuL3VuZGVmaW5lZCkKK3Jpc2N2X3Rlc3RzX2NvbW1pdCA6PSA1ZjhhNDkxOGM2NDgyZTY1YzY3YTJiN2RlY2Q1YzJhZjNlM2ZlMGU1CisjIyBjb21taXQgaGFzaCByZWFkZWQgZnJvbSBsb2NhbCBjb3B5IG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9yaXNjdi9yaXNjdi10ZXN0cwordG1wX2NvbW1pdCA9ICQoc2hlbGwgY2QgJChyaXNjdl90ZXN0c19kaXIpIDI+L2Rldi9udWxsICYmIGdpdCBsb2cgLTEgfCBncmVwICJjb21taXQiIHwgY3V0IC1mMiAtZCAnICcpCitpc19jb21taXRfZ29vZCA9ICQoaWYgJChzdWJzdCAkKHJpc2N2X3Rlc3RzX2NvbW1pdCksLCQodG1wX2NvbW1pdCkpLGZhbHNlLHRydWUpCisKKyMgQ29sb3IKK1JFRD1cMDMzWzA7MzFtCitOQz1cMDMzWzBtCisKK2NoZWNrX3Jpc2N2X3Rlc3RzIDogJChyaXNjdl90ZXN0c19kaXIpCisJQGlmIFsgISAtZCAkKHJpc2N2X3Rlc3RzX2RpcikgXTsgdGhlbiBcCisJCWVjaG8gLWUgIiQoUkVEKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IiAmJlwKKwkJZWNobyAiICAgRXJyb3IhIEVudmlyb25tZW50IHZhcmlhYmxlIFJJU0NWX1RFU1RTPSckKHJpc2N2X3Rlc3RzX2RpciknICIgJiZcCisJCWVjaG8gIiAgICAgIGRpcmVjdG9yeSBub3QgZXhpc3QhIiAmJiBcCisJCWVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JChOQykiIDsgXAorCWZpCitpZm5lcSAoJChpc19jb21taXRfZ29vZCksdHJ1ZSkKKwlAZWNobyAtZSAiJChSRUQpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCisJQGVjaG8gIiAgIFdhcm5pbmchIEV4ZWN1dGlvbiBvZiB0ZXN0IGNvZGUgaXMgbm90IGd1YXJhbnRlZWQgIgorCUBlY2hvICIgICB3aGlsZSB1c2luZyB0aGUgY3VycmVudCBjb21taXQgb2YgcmVwb3NpdG9yeWxvY2F0ZWQgYXQgOiAkKHJpc2N2X3Rlc3RzX2RpcikgLiIKKwlAZWNobyAiICAgIgorCUBlY2hvICIgICBSaXNjdi10ZXN0cyByZXBvc2l0b3J5IG11c3QgcG9pbnQgdG8gY29tbWl0ICQocmlzY3ZfdGVzdHNfY29tbWl0KSEiCisJQGVjaG8gLWUgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JChOQykiCitlbmRpZgorCiskKHJpc2N2X3Rlc3RzX2RpcikgOi4KK2lmbmRlZiBSSVNDVl9URVNUUworCUBlY2hvIC1lICIkKFJFRCk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKKwlAZWNobyAiICAgIEVycm9yISBFbnZpcm9ubWVudCB2YXJpYWJsZSBSSVNDVl9URVNUUyBub3Qgc2V0ISIKKwlAZWNobyAiICAgIFlvdSBtdXN0IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUklTQ1ZfVEVTVFMiCisJQGVjaG8gIiAgICBUaGUgdmFyaWFibGUgc2hvdWxkIHBvaW50IHRvIHRoZSBsb2NhbCBjb3B5IG9mIHRoZSIKKwlAZWNobyAiICAgICAgcmVwb3NpdG9yeSBodHRwczovL2dpdGh1Yi5jb20vcmlzY3YvcmlzY3YtdGVzdHMiCisJQGVjaG8gIiAgICAgIHdpdGggdGhlIGNvbW1pdCAkKHJpc2N2X3Rlc3RzX2NvbW1pdCkiCisJQGVjaG8gLWUgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JChOQykiCisJZXhpdCAxCitlbmRpZgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2lzYS9yaXNjdl90ZXN0LmggYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvcmlzY3ZfaXNhL3Jpc2N2X3Rlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjljZTBkCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2lzYS9yaXNjdl90ZXN0LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fUklTQ1ZfX1RFU1RfX0gKKyNkZWZpbmUgX19SSVNDVl9fVEVTVF9fSAorCisjaW5jbHVkZSAicmlzY3ZfbWFjcm9zLmgiIAorCisjZW5kaWYgLy8gI2lmbmRlZiBfX1JJU0NWX19URVNUX19ICmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvcmlzY3ZfaXNhL3J2MzJfdGVzdHMuaW5jIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2lzYS9ydjMyX3Rlc3RzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmU1MDEyCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2lzYS9ydjMyX3Rlc3RzLmluYwpAQCAtMCwwICsxLDY2IEBACisKK0FSQ0hfbG93ZXJjYXNlID0gJChzaGVsbCBlY2hvICQoQVJDSCkgfCB0ciBBLVogYS16KQorCisKK3J2MzJfaXNhX3Rlc3RzICs9IGlzYS9ydjMydWkvYWRkLlMgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvYWRkaS5TICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL2FuZC5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9hbmRpLlMgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvYXVpcGMuUyAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL2JlcS5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9iZ2UuUyAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvYmdldS5TICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL2JsdC5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9ibHR1LlMgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvYm5lLlMgICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMm1pL2Nzci5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9mZW5jZV9pLlMgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMybWkvaWxsZWdhbC5TICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL2phbC5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9qYWxyLlMgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvbGIuUyAgICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL2xidS5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9saC5TICAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvbGh1LlMgICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL2x1aS5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9sdy5TICAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMybWkvbWFfYWRkci5TICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMm1pL21hX2ZldGNoLlMgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJtaS9tY3NyLlMgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvb3IuUyAgICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL29yaS5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9zYi5TICAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMybWkvc2JyZWFrLlMgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMm1pL3NjYWxsLlMgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9zaC5TICAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMybWkvc2hhbXQuUyAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL3NpbXBsZS5TICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9zbGwuUyAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvc2xsaS5TICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL3NsdC5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9zbHRpLlMgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvc2x0aXUuUyAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL3NsdHUuUyAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9zcmEuUyAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvc3JhaS5TICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL3NybC5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9zcmxpLlMgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvc3ViLlMgICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL3N3LlMgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS94b3IuUyAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkveG9yaS5TCisKK2lmbmVxICgsJChmaW5kc3RyaW5nIG0sJChBUkNIX2xvd2VyY2FzZSkpKQorcnYzMl9pc2FfdGVzdHMgKz0gaXNhL3J2MzJ1bS9kaXYuUyAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1bS9kaXZ1LlMgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydW0vbXVsLlMgICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVtL211bGguUyAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1bS9tdWxoc3UuUyAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydW0vbXVsaHUuUyAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVtL3JlbS5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1bS9yZW11LlMKK2VuZGlmICMjIGlmZXEgKG0sJChmaW5kc3RyaW5nIG0sJChBUkNIX2xvd2VyY2FzZSkpKQorCitpZm5lcSAoLCQoZmluZHN0cmluZyBjLCQoQVJDSF9sb3dlcmNhc2UpKSkKK3J2MzJfaXNhX3Rlc3RzICs9IGlzYS9ydjMydWMvcnZjLlMKK2VuZGlmICMjIGlmZXEgKG0sJChmaW5kc3RyaW5nIGMsJChBUkNIX2xvd2VyY2FzZSkpKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9pc2EvdGVzdF9tYWNyb3MuaCBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9pc2EvdGVzdF9tYWNyb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDM5MThkCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2lzYS90ZXN0X21hY3Jvcy5oCkBAIC0wLDAgKzEsNSBAQAorI2lmbmRlZiBfX1RFU1RfX01BQ1JPU19fSAorI2RlZmluZSBfX1RFU1RfX01BQ1JPU19fSAorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3VzZXJfcmlzY19yZWdyZXNzX3RiLnYgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdXNlcl9yaXNjX3JlZ3Jlc3NfdGIudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTllZTBhCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3VzZXJfcmlzY19yZWdyZXNzX3RiLnYKQEAgLTAsMCArMSw1MzcgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6ICAyMDIxICwgRGluZXNoIEFubmF5eWEKKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IE1vZGlmaWVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBTdGFuZGFsb25lIFVzZXIgdmFsaWRhdGlvbiBUZXN0IGJlbmNoICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgWUlGaXZlIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS95aWZpdmVfcjAuZ2l0ICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMveWlmaXZlLyAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgVGhpcyBpcyBhIHN0YW5kYWxvbmUgdGVzdCBiZW5jaCB0byB2YWxpZGF0ZSB0aGUgICAgICAgICAgICAvLy8vCisvLy8vICAgRGlnaXRhbCBjb3JlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgMS4gVXNlciBSaXNjIGNvcmUgaXMgYm9vdGVkIHVzaW5nICBjb21waWxlZCBjb2RlIG9mICAgICAgICAvLy8vCisvLy8vICAgICAgdXNlcl9yaXNjX2Jvb3QuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgMi4gVXNlciBSaXNjIGNvcmUgdXNlcyBTZXJpYWwgRmxhc2ggYW5kIFNEUkFNIHRvIGJvb3QgICAgICAvLy8vCisvLy8vICAgMy4gQWZ0ZXIgc3VjY2Vzc2Z1bCBib290LCBSaXNjIGNvcmUgd2lsbCAgd3JpdGUgc2lnbmF0dXJlICAvLy8vCisvLy8vICAgICAgaW4gdG8gIHVzZXIgcmVnaXN0ZXIgZnJvbSAweDMwMDBfMDAxOCB0byAweDMwMDBfMDAyQyAgICAvLy8vCisvLy8vICAgNC4gVGhyb3VnaCB0aGUgRXh0ZXJuYWwgV2lzaGJvbmUgSW50ZXJmYWNlIHdlIHJlYWQgYmFjayAgICAvLy8vCisvLy8vICAgICAgIGFuZCB2YWxpZGF0ZSB0aGUgdXNlciByZWdpc3RlciB0byBkZWNsYXJlZCBwYXNzIGZhaWwgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMSAtIDE2dGggRmViIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQorCitgdGltZXNjYWxlIDEgbnMgLyAxIG5zCisKK2BpbmNsdWRlICJzMjVmbDI1NnMuc3YiCitgaW5jbHVkZSAidXByal9uZXRsaXN0cy52IgorYGluY2x1ZGUgIm10NDhsYzhtOGEyLnYiCitgaW5jbHVkZSAic3BpcmFtLnYiCisKK2xvY2FscGFyYW0gWzMxOjBdICAgICAgWUNSMV9TSU1fRVhJVF9BRERSICAgICAgPSAzMidoMDAwMF8wMEY4OworbG9jYWxwYXJhbSBbMzE6MF0gICAgICBZQ1IxX1NJTV9QUklOVF9BRERSICAgICA9IDMyJ2hGMDAwXzAwMDA7Citsb2NhbHBhcmFtIFszMTowXSAgICAgIFlDUjFfU0lNX0VYVF9JUlFfQUREUiAgID0gMzInaEYwMDBfMDEwMDsKK2xvY2FscGFyYW0gWzMxOjBdICAgICAgWUNSMV9TSU1fU09GVF9JUlFfQUREUiAgPSAzMidoRjAwMF8wMjAwOworCisgYGRlZmluZSBRU1BJTV9HTEJMX0NUUkwgICAgICAgICAgMzInaDEwMDAwMDAwCisgYGRlZmluZSBRU1BJTV9ETUVNX0cwX1JEX0NUUkwgICAgMzInaDEwMDAwMDA0CisgYGRlZmluZSBRU1BJTV9ETUVNX0cwX1dSX0NUUkwgICAgMzInaDEwMDAwMDA4CisgYGRlZmluZSBRU1BJTV9ETUVNX0cxX1JEX0NUUkwgICAgMzInaDEwMDAwMDBDCisgYGRlZmluZSBRU1BJTV9ETUVNX0cxX1dSX0NUUkwgICAgMzInaDEwMDAwMDEwCisKKyBgZGVmaW5lIFFTUElNX0RNRU1fQ1NfQU1BUCAgICAgICAgMzInaDEwMDAwMDE0CisgYGRlZmluZSBRU1BJTV9ETUVNX0NBX0FNQVNLICAgICAgIDMyJ2gxMDAwMDAxOAorCisgYGRlZmluZSBRU1BJTV9JTUVNX0NUUkwxICAgICAgICAgIDMyJ2gxMDAwMDAxQworIGBkZWZpbmUgUVNQSU1fSU1FTV9DVFJMMiAgICAgICAgICAzMidoMTAwMDAwMjAKKyBgZGVmaW5lIFFTUElNX0lNRU1fQUREUiAgICAgICAgICAgMzInaDEwMDAwMDI0CisgYGRlZmluZSBRU1BJTV9JTUVNX1dEQVRBICAgICAgICAgIDMyJ2gxMDAwMDAyOAorIGBkZWZpbmUgUVNQSU1fSU1FTV9SREFUQSAgICAgICAgICAzMidoMTAwMDAwMkMKKyBgZGVmaW5lIFFTUElNX1NQSV9TVEFUVVMgICAgICAgICAgMzInaDEwMDAwMDMwCisKK21vZHVsZSB1c2VyX3Jpc2NfcmVncmVzc190YjsKKwlyZWcgY2xvY2s7CisJcmVnIHdiX3JzdF9pOworCXJlZyBwb3dlcjEsIHBvd2VyMjsKKwlyZWcgcG93ZXIzLCBwb3dlcjQ7CisKKyAgICAgICAgcmVnICAgICAgICB3YmRfZXh0X2N5Y19pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgcmVnICAgICAgICB3YmRfZXh0X3N0Yl9pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgcmVnIFszMTowXSB3YmRfZXh0X2Fkcl9pOyAgLy8gYWRkcmVzcworICAgICAgICByZWcgICAgICAgIHdiZF9leHRfd2VfaTsgIC8vIHdyaXRlCisgICAgICAgIHJlZyBbMzE6MF0gd2JkX2V4dF9kYXRfaTsgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgIHJlZyBbMzowXSAgd2JkX2V4dF9zZWxfaTsgIC8vIGJ5dGUgZW5hYmxlCisKKyAgICAgICAgd2lyZSBbMzE6MF0gd2JkX2V4dF9kYXRfbzsgIC8vIGRhdGEgaW5wdXQKKyAgICAgICAgd2lyZSAgICAgICAgd2JkX2V4dF9hY2tfbzsgIC8vIGFja25vd2xlZ2VtZW50CisgICAgICAgIHdpcmUgICAgICAgIHdiZF9leHRfZXJyX287ICAvLyBlcnJvcgorCXdpcmUgICAgICAgIGNsazsKKworCS8vIFVzZXIgSS9PCisJd2lyZSBbMzc6MF0gaW9fb2ViOworCXdpcmUgWzM3OjBdIGlvX291dDsKKwl3aXJlIFszNzowXSBpb19pbjsKKworCXdpcmUgZ3BpbzsKKwl3aXJlIFszNzowXSBtcHJqX2lvOworCXdpcmUgWzc6MF0gbXByal9pb18wOworCXJlZyAgICAgICAgIHRlc3RfZmFpbDsKKwlyZWcgWzMxOjBdIHJlYWRfZGF0YTsKKworCisJaW50IHVuc2lnbmVkICAgICAgICAgICAgICAgIGZfcmVzdWx0czsKKyAgICAgICAgaW50IHVuc2lnbmVkICAgICAgICAgICAgICAgIGZfaW5mbzsKKyAgICAgICAgCisgICAgICAgIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICBzX3Jlc3VsdHM7CisgICAgICAgIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICBzX2luZm87CisgICAgICAgIGBpZmRlZiBTSUdOQVRVUkVfT1VUCisgICAgICAgIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICBzX3Rlc3RuYW1lOworICAgICAgICBiaXQgICAgICAgICAgICAgICAgICAgICAgICAgYl9zaW5nbGVfcnVuX2ZsYWc7CisgICAgICAgIGBlbmRpZiAgLy8gIFNJR05BVFVSRV9PVVQKKworCisJYGlmZGVmIFZFUklMQVRPUgorICAgICAgICAgbG9naWMgWzI1NTowXSAgICAgICAgICB0ZXN0X2ZpbGU7CisJIGxvZ2ljIFsyNTU6MF0gICAgICAgICAgdGVzdF9yYW1fZmlsZTsKKyAgICAgICAgIGBlbHNlIC8vIFZFUklMQVRPUgorICAgICAgICAgc3RyaW5nICAgICAgICAgICAgICAgICB0ZXN0X2ZpbGU7CisJIHN0cmluZyAgICAgICAgICAgICAgICAgdGVzdF9yYW1fZmlsZTsKKworICAgICAgICAgYGVuZGlmIC8vIFZFUklMQVRPUgorCisKKyAgICAgICAgZXZlbnQJICAgICAgICAgICAgICAgcmVpbml0X2V2ZW50OworCWJpdCAgICAgICAgICAgICAgICAgICAgdGVzdF9ydW5uaW5nOworICAgICAgICBpbnQgdW5zaWduZWQgICAgICAgICAgIHRlc3RzX3Bhc3NlZDsKKyAgICAgICAgaW50IHVuc2lnbmVkICAgICAgICAgICB0ZXN0c190b3RhbDsKKworCWxvZ2ljICBbNzowXSAgICAgICAgICAgdGVtX21lbVswOjQwOTVdOworCWxvZ2ljICBbMzE6MF0gICAgICAgICAgbWVtX2RhdGE7CisKKworcGFyYW1ldGVyIFBfRlNNX0MgICAgICA9IDQnYjAwMDA7IC8vIENvbW1hbmQgUGhhc2UgT25seQorcGFyYW1ldGVyIFBfRlNNX0NXICAgICA9IDQnYjAwMDE7IC8vIENvbW1hbmQgKyBXcml0ZSBEQVRBIFBoYXNlIE9ubHkKK3BhcmFtZXRlciBQX0ZTTV9DQSAgICAgPSA0J2IwMDEwOyAvLyBDb21tYW5kIC0+IEFkZHJlc3MgUGhhc2UgT25seQorCitwYXJhbWV0ZXIgUF9GU01fQ0FSICAgID0gNCdiMDAxMTsgLy8gQ29tbWFuZCAtPiBBZGRyZXNzIC0+IFJlYWQgRGF0YQorcGFyYW1ldGVyIFBfRlNNX0NBRFIgICA9IDQnYjAxMDA7IC8vIENvbW1hbmQgLT4gQWRkcmVzcyAtPiBEdW1teSAtPiBSZWFkIERhdGEKK3BhcmFtZXRlciBQX0ZTTV9DQU1SICAgPSA0J2IwMTAxOyAvLyBDb21tYW5kIC0+IEFkZHJlc3MgLT4gTW9kZSAtPiBSZWFkIERhdGEKK3BhcmFtZXRlciBQX0ZTTV9DQU1EUiAgPSA0J2IwMTEwOyAvLyBDb21tYW5kIC0+IEFkZHJlc3MgLT4gTW9kZSAtPiBEdW1teSAtPiBSZWFkIERhdGEKKworcGFyYW1ldGVyIFBfRlNNX0NBVyAgICA9IDQnYjAxMTE7IC8vIENvbW1hbmQgLT4gQWRkcmVzcyAtPldyaXRlIERhdGEKK3BhcmFtZXRlciBQX0ZTTV9DQURXICAgPSA0J2IxMDAwOyAvLyBDb21tYW5kIC0+IEFkZHJlc3MgLT4gRFVNTVkgKyBXcml0ZSBEYXRhCitwYXJhbWV0ZXIgUF9GU01fQ0FNVyAgID0gNCdiMTAwMTsgLy8gQ29tbWFuZCAtPiBBZGRyZXNzIC0+IE1PREUgKyBXcml0ZSBEYXRhCisKK3BhcmFtZXRlciBQX0ZTTV9DRFIgICAgPSA0J2IxMDEwOyAvLyBDT01NQU5EIC0+IERVTU1ZIC0+IFJFQUQKK3BhcmFtZXRlciBQX0ZTTV9DRFcgICAgPSA0J2IxMDExOyAvLyBDT01NQU5EIC0+IERVTU1ZIC0+IFdSSVRFCitwYXJhbWV0ZXIgUF9GU01fQ1IgICAgID0gNCdiMTEwMDsgIC8vIENPTU1BTkQgLT4gUkVBRAorCitwYXJhbWV0ZXIgUF9NT0RFX1NXSVRDSF9JRExFICAgICA9IDInYjAwOworcGFyYW1ldGVyIFBfTU9ERV9TV0lUQ0hfQVRfQUREUiAgPSAyJ2IwMTsKK3BhcmFtZXRlciBQX01PREVfU1dJVENIX0FUX0RBVEEgID0gMidiMTA7CisKK3BhcmFtZXRlciBQX1NJTkdMRSA9IDInYjAwOworcGFyYW1ldGVyIFBfRE9VQkxFID0gMidiMDE7CitwYXJhbWV0ZXIgUF9RVUFEICAgPSAyJ2IxMDsKK3BhcmFtZXRlciBQX1FERFIgICA9IDInYjExOworCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkvLyBTaW5jZSB0aGlzIGlzIHJlZ3Jlc3Npb24sIHJlc2V0IHdpbGwgYmUgYXBwbGllZCBtdWx0aXBsZSB0aW1lCisJLy8gUmVzZXQgbG9naWMKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJYml0IFsxOjBdICAgICByc3RfY250OworICAgICAgICBiaXQgICAgICAgICAgIHJzdF9pbml0OworCXdpcmUgICAgICAgICAgcnN0X247CisKKworICAgICAgICBhc3NpZ24gcnN0X24gPSAmcnN0X2NudDsKKwlhc3NpZ24gd2JfcnN0X2kgICAgPSAgIXJzdF9uOworICAgICAgICAKKyAgICAgICAgYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCisJaWYgKHJzdF9pbml0KSAgIGJlZ2luCisJICAgICByc3RfY250IDw9ICcwOworCSAgICAgLT4gcmVpbml0X2V2ZW50OworCWVuZAorICAgICAgICAgICAgZWxzZSBpZiAofiZyc3RfY250KSByc3RfY250IDw9IHJzdF9jbnQgKyAxJ2IxOworICAgICAgICBlbmQKKworCS8vIEV4dGVybmFsIGNsb2NrIGlzIHVzZWQgYnkgZGVmYXVsdC4gIE1ha2UgdGhpcyBhcnRpZmljaWFsbHkgZmFzdCBmb3IgdGhlCisJLy8gc2ltdWxhdGlvbi4gIE5vcm1hbGx5IHRoaXMgd291bGQgYmUgYSBzbG93IGNsb2NrIGFuZCB0aGUgZGlnaXRhbCBQTEwKKwkvLyB3b3VsZCBiZSB0aGUgZmFzdCBjbG9jay4KKworCWFsd2F5cyAjMTIuNSBjbG9jayA8PSAoY2xvY2sgPT09IDEnYjApOworCisJYXNzaWduIGNsayA9IGNsb2NrOworCisJaW5pdGlhbCBiZWdpbgorCQljbG9jayA9IDA7CisgICAgICAgICAgICAgICAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICAgICAgICAgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICAgICAgICAgICAgICAgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKwllbmQKKworCWBpZmRlZiBXRkRVTVAKKwkgICBpbml0aWFsIGJlZ2luCisJICAgCSRkdW1wZmlsZSgic2lteC52Y2QiKTsKKwkgICAJJGR1bXB2YXJzKDEsIHVzZXJfcmlzY19yZWdyZXNzX3RiKTsKKwkgICAJJGR1bXB2YXJzKDEsIHVzZXJfcmlzY19yZWdyZXNzX3RiLnVfdG9wKTsKKwkgICAJJGR1bXB2YXJzKDAsIHVzZXJfcmlzY19yZWdyZXNzX3RiLnVfdG9wLnVfcmlzY3ZfdG9wKTsKKwkgICAJJGR1bXB2YXJzKDAsIHVzZXJfcmlzY19yZWdyZXNzX3RiLnVfdG9wLnVfcXNwaV9tYXN0ZXIpOworCSAgIAkkZHVtcHZhcnMoMCwgdXNlcl9yaXNjX3JlZ3Jlc3NfdGIudV90b3AudV9pbnRlcmNvbik7CisJICAgCSRkdW1wdmFycygwLCB1c2VyX3Jpc2NfcmVncmVzc190Yi51X3RvcC51X21iaXN0KTsKKwkgICBlbmQKKyAgICAgICBgZW5kaWYKKworICAgICAgICBpbnRlZ2VyIGk7CisKKyAgICAgICAgYWx3YXlzIEByZWluaXRfZXZlbnQKKwliZWdpbgorCQkvLyBJbml0aWFsaXplIHRoZSBTUEkgbWVtb3J5IHdpdGggaGV4IGNvbnRlbnQKKwkJLy8gV2FpdCBmb3IgcmVzZXQgcmVtb3ZhbAorCQl3YWl0IChyc3RfbiA9PSAxKTsKKworCisJCS8vIEluaXRpYWxpemUgdGhlIFNQSSBtZW1vcnkgd2l0aCBoZXggY29udGVudAorICAgICAgICAgICAgICAgICR3cml0ZSgiXDAzM1swOzM0bS0tLUluaXRpYWxpemluZyB0aGUgU1BJIE1lbW9yeSB3aXRoIEhleGZpbGU6ICVzXDAzM1swbVxuIiwgdGVzdF9maWxlKTsKKyAgICAgICAgICAgICAgICAkcmVhZG1lbWgodGVzdF9maWxlLHVfc3BpX2ZsYXNoXzI1Nm1iLk1lbSk7CisKKwkJLy8gc29tZSBvZiB0aGUgUklTQ1YgdGVzdCBuZWVkIFNSQU0gYXJlYSBmb3Igc3BlY2lmaWMKKwkJLy8gaW5zdHJ1Y3Rpb24gZXhlY3V0aW9uIGxpa2UgZmVuY2UKKwkJJHNmb3JtYXQodGVzdF9yYW1fZmlsZSwgIiVzLnJhbSIsdGVzdF9maWxlKTsKKyAgICAgICAgICAgICAgICAkcmVhZG1lbWgodGVzdF9yYW1fZmlsZSx1X3NyYW0ubWVtb3J5KTsKKworCQkvKioqCisJCS8vIFNwbGl0IHRoZSBUZW1wIG1lbW9yeSBjb250ZW50IHRvIHR3byBzcmFtIGZpbGUKKyAgICAgICAgICAgICAgICAkcmVhZG1lbWgodGVzdF9yYW1fZmlsZSx0ZW1fbWVtKTsKKwkJLy8gTG9hZCB0aGUgU1JBTTAvU1JBTTEgd2l0aCAyS0IgZGF0YQorICAgICAgICAgICAgICAgICR3cml0ZSgiXDAzM1swOzM0bS0tLUluaXRpYWxpemluZyB0aGUgdV9zcmFtMF8ya2IgTWVtb3J5IHdpdGggSGV4ZmlsZTogJXNcMDMzWzBtXG4iLHRlc3RfcmFtX2ZpbGUpOworCQkvLyBJbml0aWFsaXppbmcgdGhlIFNSQU0KKwkJZm9yKGkgPSAwIDsgaSA8IDIwNDg7IGkgPSBpICs0KSBiZWdpbgorCQkgICAgbWVtX2RhdGEgPSB7dGVtX21lbVtpKzNdLHRlbV9tZW1baSsyXSx0ZW1fbWVtW2krMV0sdGVtX21lbVtpKzBdfTsKKwkJICAgIC8vJGRpc3BsYXkoIkZpbGxpbmcgTWVtIExvY2F0aW9uIDogJXggd2l0aCBkYXRhIDogJXgiLGksIG1lbV9kYXRhKTsKKwkJICAgIHVfdG9wLnVfc3JhbTBfMmtiLm1lbVtpLzRdID0gbWVtX2RhdGE7CisJCWVuZAorCQlmb3IoaSA9IDIwNDggOyBpIDwgNDA5NjsgaSA9IGkgKzQpIGJlZ2luCisJCSAgbWVtX2RhdGEgPSB7dGVtX21lbVtpKzNdLHRlbV9tZW1baSsyXSx0ZW1fbWVtW2krMV0sdGVtX21lbVtpKzBdfTsKKwkJICAvLyRkaXNwbGF5KCJGaWxsaW5nIE1lbSBMb2NhdGlvbiA6ICV4IHdpdGggZGF0YSA6ICV4IixpLCBtZW1fZGF0YSk7CisJCSAgdV90b3AudV9zcmFtMV8ya2IubWVtWygyMDQ4LWkpLzRdID0gbWVtX2RhdGE7CisJCWVuZAorCQkqKiovCisKKwkJLy9mb3IoaSA9MzInaDAwOyBpIDwgMzInaDEwMDsgaSA9IGkrMSkKKyAgICAgICAgICAgICAgICAvLyAgICAkZGlzcGxheSgiTG9jYXRpb246ICV4LCBEYXRhOiAleCIsIGksIHVfdG9wLnVfdHNyYW0wXzJrYi5tZW1baV0pOworCisKKwkJIzIwMDsgCisJICAgICAgICByZXBlYXQgKDEwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkkZGlzcGxheSgiTW9uaXRvcjogQ29yZSByZXNldCByZW1vdmFsIik7CisKKwkJLy8gUmVtb3ZlIFdiIFJlc2V0CisJCXdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCwnaDEpOworCSAgICAgICAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworCQkjMTsKKwkJLy8tLS0tLS0tLS0tLS0gZnVzZV9taGFydGlkPSAweDAwCisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzAwMl8wMDA0LCdoMCk7CisKKworCSAgICAgICAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworCQkjMTsKKwkJLy8gUmVtb3ZlIFdCIGFuZCBTUEkgUmVzZXQsIEtlZXAgU0RBUk0gYW5kIENPUkUgdW5kZXIgUmVzZXQKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsJ2g1KTsKKworCQkvLyBDUyMyIFN3aXRjaCB0byBRU1BJIE1vZGUKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gxMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMTAKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwxLHsxNidoMCwxJ2IwLDEnYjAsNCdiMDAwMCxQX01PREVfU1dJVENIX0lETEUsUF9TSU5HTEUsUF9TSU5HTEUsNCdiMDEwMH0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDIsezgnaDAsMidiMDAsMidiMDAsUF9GU01fQyw4J2gwMCw4J2gzOH0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDApOworCisJCS8vIEVuYWJsZSB0aGUgRENBQ0hFIFJlbWFwIHRvIFNSQU0gcmVnaW9uCisJCS8vd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDBDLHs0J2IwMDAwLDQnYjExMTEsIDI0J2gwfSk7CisJCS8vCisJCS8vIFJlbW92ZSBhbGwgdGhlIHJlc2V0CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLCdoOEYpOworCisJZW5kCisKK3dpcmUgVVNFUl9WREQxVjggPSAxJ2IxOword2lyZSBWU1MgPSAxJ2IwOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1biB0ZXN0cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BpbmNsdWRlICJyaXNjdl9ydW50ZXN0cy5zdiIKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENvcmUgaW5zdGFuY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit1c2VyX3Byb2plY3Rfd3JhcHBlciB1X3RvcCgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIC52Y2NkMShVU0VSX1ZERDFWOCksCS8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgLnZzc2QxKFZTUyksCS8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgICAud2JfY2xrX2kgICAgICAgIChjbG9jayksICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAudXNlcl9jbG9jazIgICAgICgxJ2IxKSwgIC8vIFJlYWwtdGltZSBjbG9jaworICAgIC53Yl9yc3RfaSAgICAgICAgKHdiX3JzdF9pKSwgIC8vIFJlZ3VsYXIgUmVzZXQgc2lnbmFsCisKKyAgICAud2JzX2N5Y19pICAgKHdiZF9leHRfY3ljX2kpLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAud2JzX3N0Yl9pICAgKHdiZF9leHRfc3RiX2kpLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAud2JzX2Fkcl9pICAgKHdiZF9leHRfYWRyX2kpLCAgLy8gYWRkcmVzcworICAgIC53YnNfd2VfaSAgICAod2JkX2V4dF93ZV9pKSwgIC8vIHdyaXRlCisgICAgLndic19kYXRfaSAgICh3YmRfZXh0X2RhdF9pKSwgIC8vIGRhdGEgb3V0cHV0CisgICAgLndic19zZWxfaSAgICh3YmRfZXh0X3NlbF9pKSwgIC8vIGJ5dGUgZW5hYmxlCisKKyAgICAud2JzX2RhdF9vICAgKHdiZF9leHRfZGF0X28pLCAgLy8gZGF0YSBpbnB1dAorICAgIC53YnNfYWNrX28gICAod2JkX2V4dF9hY2tfbyksICAvLyBhY2tub3dsZWdlbWVudAorCisgCisgICAgLy8gTG9naWMgQW5hbHl6ZXIgU2lnbmFscworICAgIC5sYV9kYXRhX2luICAgICAgKCcxKSAsCisgICAgLmxhX2RhdGFfb3V0ICAgICAoKSwKKyAgICAubGFfb2VuYiAgICAgICAgICgnMCksCisgCisKKyAgICAvLyBJT3MKKyAgICAuaW9faW4gICAgICAgICAgKGlvX2luKSAgLAorICAgIC5pb19vdXQgICAgICAgICAoaW9fb3V0KSAsCisgICAgLmlvX29lYiAgICAgICAgIChpb19vZWIpICwKKworICAgIC51c2VyX2lycSAgICAgICAoKSAKKworKTsKKworCitsb2dpYyBbMzE6MF0gcmlzY3ZfZG1lbV9yZXFfY250OyAvLyBjbnQgZG1lbSByZXEKK2luaXRpYWwgCitiZWdpbgorICAgcmlzY3ZfZG1lbV9yZXFfY250ID0gMDsKK2VuZAorCithbHdheXMgQChwb3NlZGdlIHVfdG9wLndiZF9yaXNjdl9kbWVtX3N0Yl9pKQorYmVnaW4KKyAgICByaXNjdl9kbWVtX3JlcV9jbnQgPSByaXNjdl9kbWVtX3JlcV9jbnQrMTsKKyAgICBpZigocmlzY3ZfZG1lbV9yZXFfY250ICUyMDApID09IDApCisJJGRpc3BsYXkoIlNUQVRVUzogVG90YWwgRG1lbSBSZXEgQ250OiAlZCAiLHJpc2N2X2RtZW1fcmVxX2NudCk7CitlbmQKKworCitgaWZuZGVmIEdMIC8vIERyaXZlIFBvd2VyIGZvciBIb2xkIEZpeCBCdWYKKyAgICAvLyBBbGwgc3RhbmRhcmQgY2VsbCBuZWVkIHBvd2VyIGhvb2stdXAgZm9yIGZ1bmN0aW9uYWxpdHkgd29yaworICAgIGluaXRpYWwgYmVnaW4KKyAgICBlbmQKK2BlbmRpZiAgICAKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBJbnRlZ3JhdGUgdGhlIFNlcmlhbCBmbGFzaCB3aXRoIHF1cmQgc3VwcG9ydCB0bworLy8gIHVzZXIgY29yZSB1c2luZyB0aGUgZ3BpbyBwYWRzCisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICB3aXJlIGZsYXNoX2NsayA9IGlvX291dFsyNF07CisgICB3aXJlIGZsYXNoX2NzYiA9IGlvX291dFsyOF07CisgICAvLyBDcmVhdGluZyBQYWQgRGVsYXkKKyAgIHdpcmUgIzEgaW9fb2ViXzI5ID0gaW9fb2ViWzI5XTsKKyAgIHdpcmUgIzEgaW9fb2ViXzMwID0gaW9fb2ViWzMwXTsKKyAgIHdpcmUgIzEgaW9fb2ViXzMxID0gaW9fb2ViWzMxXTsKKyAgIHdpcmUgIzEgaW9fb2ViXzMyID0gaW9fb2ViWzMyXTsKKyAgIHRyaSAgIzEgZmxhc2hfaW8wID0gKGlvX29lYl8yOT09IDEnYjApID8gaW9fb3V0WzI5XSA6IDEnYno7CisgICB0cmkgICMxIGZsYXNoX2lvMSA9IChpb19vZWJfMzA9PSAxJ2IwKSA/IGlvX291dFszMF0gOiAxJ2J6OworICAgdHJpICAjMSBmbGFzaF9pbzIgPSAoaW9fb2ViXzMxPT0gMSdiMCkgPyBpb19vdXRbMzFdIDogMSdiejsKKyAgIHRyaSAgIzEgZmxhc2hfaW8zID0gKGlvX29lYl8zMj09IDEnYjApID8gaW9fb3V0WzMyXSA6IDEnYno7CisKKyAgIGFzc2lnbiBpb19pblsyOV0gPSBmbGFzaF9pbzA7CisgICBhc3NpZ24gaW9faW5bMzBdID0gZmxhc2hfaW8xOworICAgYXNzaWduIGlvX2luWzMxXSA9IGZsYXNoX2lvMjsKKyAgIGFzc2lnbiBpb19pblszMl0gPSBmbGFzaF9pbzM7CisKKworICAgLy8gUXVhcmQgZmxhc2gKKyAgICAgczI1ZmwyNTZzICMoLm1lbV9maWxlX25hbWUoImFkZC5oZXgiKSwKKwkgICAgICAgICAub3RwX2ZpbGVfbmFtZSgibm9uZSIpLAorICAgICAgICAgICAgICAgICAuVGltaW5nTW9kZWwoIlMyNUZMNTEyU0FHTUZJMDEwX0ZfMzBwRiIpKSAKKwkJIHVfc3BpX2ZsYXNoXzI1Nm1iICgKKyAgICAgICAgICAgLy8gRGF0YSBJbnB1dHMvT3V0cHV0cworICAgICAgIC5TSSAgICAgIChmbGFzaF9pbzApLAorICAgICAgIC5TTyAgICAgIChmbGFzaF9pbzEpLAorICAgICAgIC8vIENvbnRyb2xzCisgICAgICAgLlNDSyAgICAgKGZsYXNoX2NsayksCisgICAgICAgLkNTTmVnICAgKGZsYXNoX2NzYiksCisgICAgICAgLldQTmVnICAgKGZsYXNoX2lvMiksCisgICAgICAgLkhPTEROZWcgKGZsYXNoX2lvMyksCisgICAgICAgLlJTVE5lZyAgKCF3Yl9yc3RfaSkKKworICAgICAgICk7CisKKworICAgd2lyZSBzcGlyYW1fY3NiID0gaW9fb3V0WzI2XTsKKworICAgc3BpcmFtICMoLm1lbV9maWxlX25hbWUoIm5vbmUiKSkKKwl1X3NyYW0gKAorICAgICAgICAgLy8gRGF0YSBJbnB1dHMvT3V0cHV0cworICAgICAgICAgICAuaW8wICAgICAoZmxhc2hfaW8wKSwKKyAgICAgICAgICAgLmlvMSAgICAgKGZsYXNoX2lvMSksCisgICAgICAgICAgIC8vIENvbnRyb2xzCisgICAgICAgICAgIC5jbGsgICAgKGZsYXNoX2NsayksCisgICAgICAgICAgIC5jc2IgICAgKHNwaXJhbV9jc2IpLAorICAgICAgICAgICAuaW8yICAgIChmbGFzaF9pbzIpLAorICAgICAgICAgICAuaW8zICAgIChmbGFzaF9pbzMpCisgICAgKTsKKworCisKK3Rhc2sgd2JfdXNlcl9jb3JlX3dyaXRlOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitpbnB1dCBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMTsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPWRhdGE7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naEY7ICAvLyBieXRlIGVuYWJsZQorICB3YmRfZXh0X2N5Y19pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YWl0KHdiZF9leHRfYWNrX28gPT0gMSk7CisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgJGRpc3BsYXkoIkRFQlVHIFdCIFVTRVIgQUNDRVNTIFdSSVRFIEFkZHJlc3MgOiAleCwgRGF0YSA6ICV4IixhZGRyZXNzLGRhdGEpOworICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CitlbmQKK2VuZHRhc2sKKwordGFzayAgd2JfdXNlcl9jb3JlX3JlYWQ7CitpbnB1dCBbMzE6MF0gYWRkcmVzczsKK291dHB1dCBbMzE6MF0gZGF0YTsKK3JlZyAgICBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPScwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICBkYXRhICA9IHdiZF9leHRfZGF0X287ICAKKyAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAjMTsKKyAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9hZHJfaSA9J2gwOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0naDA7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naDA7ICAvLyBieXRlIGVuYWJsZQorICAkZGlzcGxheSgiREVCVUcgV0IgVVNFUiBBQ0NFU1MgUkVBRCBBZGRyZXNzIDogJXgsIERhdGEgOiAleCIsYWRkcmVzcyxkYXRhKTsKKyAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworZW5kCitlbmR0YXNrCisKK2BpZmRlZiBHTAorCit3aXJlICAgICAgICB3YmRfc3BpX3N0Yl9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3N0Yl9pOword2lyZSAgICAgICAgd2JkX3NwaV9hY2tfbyAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9hY2tfbzsKK3dpcmUgICAgICAgIHdiZF9zcGlfd2VfaSAgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfd2VfaTsKK3dpcmUgWzMxOjBdIHdiZF9zcGlfYWRyX2kgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfYWRyX2k7Cit3aXJlIFszMTowXSB3YmRfc3BpX2RhdF9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX2RhdF9pOword2lyZSBbMzE6MF0gd2JkX3NwaV9kYXRfbyAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9kYXRfbzsKK3dpcmUgWzM6MF0gIHdiZF9zcGlfc2VsX2kgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfc2VsX2k7CisKK3dpcmUgICAgICAgIHdiZF9zZHJhbV9zdGJfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9zdGJfaTsKK3dpcmUgICAgICAgIHdiZF9zZHJhbV9hY2tfbyA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9hY2tfbzsKK3dpcmUgICAgICAgIHdiZF9zZHJhbV93ZV9pICA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl93ZV9pOword2lyZSBbMzE6MF0gd2JkX3NkcmFtX2Fkcl9pID0gdV90b3AudV9zZHJhbV9jdHJsLndiX2FkZHJfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9kYXRfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9kYXRfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9kYXRfbyA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9kYXRfbzsKK3dpcmUgWzM6MF0gIHdiZF9zZHJhbV9zZWxfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9zZWxfaTsKKword2lyZSAgICAgICAgd2JkX3VhcnRfc3RiX2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2NzOword2lyZSAgICAgICAgd2JkX3VhcnRfYWNrX28gID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2FjazsKK3dpcmUgICAgICAgIHdiZF91YXJ0X3dlX2kgICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ193cjsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2Fkcl9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19hZGRyOword2lyZSBbNzowXSAgd2JkX3VhcnRfZGF0X2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX3dkYXRhOword2lyZSBbNzowXSAgd2JkX3VhcnRfZGF0X28gID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX3JkYXRhOword2lyZSAgICAgICAgd2JkX3VhcnRfc2VsX2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2JlOworCitgZW5kaWYKKworLyoqCitgaWZkZWYgR0wKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJJU0MgSU1FTSBhbWQgRE1FTSBNb25pdG9yaW5nIFRBU0sKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYGRlZmluZSBSSVNDX0NPUkUgIHVzZXJfdWFydF90Yi51X3RvcC51X2NvcmUudV9yaXNjdl90b3AKKworYWx3YXlzQChwb3NlZGdlIGBSSVNDX0NPUkUud2JfY2xrKSBiZWdpbgorICAgIGlmKGBSSVNDX0NPUkUud2JkX2ltZW1fYWNrX2kpCisgICAgICAgICAgJGRpc3BsYXkoIlJJU0NWLURFQlVHID0+IElNRU0gQUREUkVTUzogJXggUmVhZCBEYXRhIDogJXgiLCBgUklTQ19DT1JFLndiZF9pbWVtX2Fkcl9vLGBSSVNDX0NPUkUud2JkX2ltZW1fZGF0X2kpOworICAgIGlmKGBSSVNDX0NPUkUud2JkX2RtZW1fYWNrX2kgJiYgYFJJU0NfQ09SRS53YmRfZG1lbV93ZV9vKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBETUVNIEFERFJFU1M6ICV4IFdyaXRlIERhdGE6ICV4IFJlc29uc2U6ICV4IiwgYFJJU0NfQ09SRS53YmRfZG1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9kbWVtX2RhdF9vKTsKKyAgICBpZihgUklTQ19DT1JFLndiZF9kbWVtX2Fja19pICYmICFgUklTQ19DT1JFLndiZF9kbWVtX3dlX28pCisgICAgICAgICAgJGRpc3BsYXkoIlJJU0NWLURFQlVHID0+IERNRU0gQUREUkVTUzogJXggUkVBRCBEYXRhIDogJXggUmVzb25zZTogJXgiLCBgUklTQ19DT1JFLndiZF9kbWVtX2Fkcl9vLGBSSVNDX0NPUkUud2JkX2RtZW1fZGF0X2kpOworZW5kCisKK2BlbmRpZgorKiovCitlbmRtb2R1bGUKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91YXJ0X21hc3Rlci9NYWtlZmlsZSBiL3Zlcmlsb2cvZHYvdWFydF9tYXN0ZXIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM2Zjk2MwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdWFydF9tYXN0ZXIvTWFrZWZpbGUKQEAgLTAsMCArMSwxMjAgQEAKKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKworIyMgUERLIAorUERLX1BBVEggPSAkKFBES19ST09UKS9za3kxMzBBCisKKyMjIENhcmF2ZWwgUG9pbnRlcnMKK0NBUkFWRUxfUk9PVCA/PSAuLi8uLi8uLi9jYXJhdmVsCitDQVJBVkVMX1BBVEggPz0gJChDQVJBVkVMX1JPT1QpCitDQVJBVkVMX0ZJUk1XQVJFX1BBVEggPSAkKENBUkFWRUxfUEFUSCkvdmVyaWxvZy9kdi9jYXJhdmVsCitDQVJBVkVMX1ZFUklMT0dfUEFUSCAgPSAkKENBUkFWRUxfUEFUSCkvdmVyaWxvZworQ0FSQVZFTF9SVExfUEFUSCA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL3J0bAorQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMgPSAkKENBUkFWRUxfVkVSSUxPR19QQVRIKS9kdi9jYXJhdmVsCisKKyMjIFVzZXIgUHJvamVjdCBQb2ludGVycworVVBSSl9WRVJJTE9HX1BBVEggPz0gLi4vLi4vLi4vdmVyaWxvZworVVBSSl9SVExfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL3J0bAorVVBSSl9HTF9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvZ2wKK1VQUkpfQkVIQVZJT1VSQUxfTU9ERUxTID0gLi4vbW9kZWwKK1VQUkpfQkVIQVZJT1VSQUxfQUdFTlRTID0gLi4vYWdlbnRzCitVUFJKX0lOQ0xVREVfUEFUSDEgPSAkKFVQUkpfUlRMX1BBVEgpL3lpZml2ZS95Y3IxYy9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRIMiA9ICQoVVBSSl9SVExfUEFUSCkvc2RyYW1fY3RybC9zcmMvZGVmcworVVBSSl9JTkNMVURFX1BBVEgzID0gJChVUFJKX1JUTF9QQVRIKS9pMmNtL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEg0ID0gJChVUFJKX1JUTF9QQVRIKS91c2IxX2hvc3Qvc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDUgPSAkKFVQUkpfUlRMX1BBVEgpL21iaXN0L2luY2x1ZGUKKyMjIFJJU0NWIEdDQyAKK0dDQ19QQVRIPz0vZWYvYXBwcy9iaW4KK0dDQ19QUkVGSVg/PXJpc2N2MzItdW5rbm93bi1lbGYKK0dDQzY0X1BSRUZJWD89cmlzY3Y2NC11bmtub3duLWVsZgorCisjIyBTaW11bGF0aW9uIG1vZGU6IFJUTC9HTAorU0lNX0RFRklORVMgPSAtREZVTkNUSU9OQUwgLURTSU0KK1NJTT89UlRMCitEVU1QPz1PRkYKKworLlNVRkZJWEVTOgorCitQQVRURVJOID0gdWFydF9tYXN0ZXIKKworYWxsOiAgJHtQQVRURVJOOj0udmNkfQorCitoZXg6ICAke1BBVFRFUk46PS5oZXh9CisKK3Z2cDogICR7UEFUVEVSTjo9LnZ2cH0KKworJS52dnA6ICVfdGIudiAlLmhleAoraWZlcSAoJChTSU0pLFJUTCkKKyAgIGlmZXEgKCQoRFVNUCksT0ZGKQorCWl2ZXJpbG9nIC1nMjAwNS1zdiAkKFNJTV9ERUZJTkVTKSAtSSAkKFBES19QQVRIKSBcCisJLUkgJChDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUykgLUkgJChDQVJBVkVMX1JUTF9QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX01PREVMUykgICAgLUkgJChVUFJKX1JUTF9QQVRIKSAtSSAkKFVQUkpfVkVSSUxPR19QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEgxKSAgICAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMikgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDMpIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRINCkgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDUpIFwKKwkkPCAtbyAkQCAKKyAgICBlbHNlICAKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURXRkRVTVAgJChTSU1fREVGSU5FUykgLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICBlbmRpZgorZWxzZSAgCisJaXZlcmlsb2cgJChTSU1fREVGSU5FUykgLURHTCAtSSAkKFBES19QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgLUkgJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpIC1JJChVUFJKX0dMX1BBVEgpICAtSSQoVVBSSl9SVExfUEFUSCkgIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwkkPCAtbyAkQCAKK2VuZGlmCisKKyUudmNkOiAlLnZ2cAorCXZ2cCAkPAorCislLmVsZjogJS5jICQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zZWN0aW9ucy5sZHMgJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3N0YXJ0LnMgY2hlY2stZW52CisJJHtHQ0M2NF9QUkVGSVh9LWdjYyAtSSAkKENBUkFWRUxfUEFUSCkgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLVdsLC1Cc3RhdGljLC1ULCQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zZWN0aW9ucy5sZHMsLS1zdHJpcC1kZWJ1ZyAtZmZyZWVzdGFuZGluZyAtbm9zdGRsaWIgLW8gJEAgJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3N0YXJ0LnMgJDwKKworJS5oZXg6ICUuZWxmCisJJHtHQ0M2NF9QUkVGSVh9LW9iamNvcHkgLU8gdmVyaWxvZyAkPCAkQCAKKwkjIHRvIGZpeCBmbGFzaCBiYXNlIGFkZHJlc3MKKwlzZWQgLWkgJ3MvQDEwMDAwMDAwL0AwMDAwMDAwMC9nJyAkQAorCislLmJpbjogJS5lbGYKKwkke0dDQzY0X1BSRUZJWH0tb2JqY29weSAtTyBiaW5hcnkgJDwgL2Rldi9zdGRvdXQgfCB0YWlsIC1jICsxMDQ4NTc3ID4gJEAKKworY2hlY2stZW52OgoraWZuZGVmIFBES19ST09UCisJJChlcnJvciBQREtfUk9PVCBpcyB1bmRlZmluZWQsIHBsZWFzZSBleHBvcnQgaXQgYmVmb3JlIHJ1bm5pbmcgbWFrZSkKK2VuZGlmCitpZmVxICgsJCh3aWxkY2FyZCAkKFBES19ST09UKS9za3kxMzBBKSkKKwkkKGVycm9yICQoUERLX1JPT1QpL3NreTEzMEEgbm90IGZvdW5kLCBwbGVhc2UgaW5zdGFsbCBwZGsgYmVmb3JlIHJ1bm5pbmcgbWFrZSkKK2VuZGlmCisjaWZlcSAoLCQod2lsZGNhcmQgJChHQ0M2NF9QUkVGSVgpLWdjYyApKQorIwkkKGVycm9yICQoR0NDNjRfUFJFRklYKS1nY2MgaXMgbm90IGZvdW5kLCBwbGVhc2UgZXhwb3J0IEdDQ19QQVRIIGFuZCBHQ0NfUFJFRklYIGJlZm9yZSBydW5uaW5nIG1ha2UpCisjZW5kaWYKKyMgY2hlY2sgZm9yIGVmYWJsZXNzIHN0eWxlIGluc3RhbGxhdGlvbgoraWZlcSAoLCQod2lsZGNhcmQgJChQREtfUk9PVCkvc2t5MTMwQS9saWJzLnJlZi8qL3Zlcmlsb2cpKQorU0lNX0RFRklORVMgOj0gJHtTSU1fREVGSU5FU30gLURFRl9TVFlMRQorZW5kaWYKKworIyAtLS0tIENsZWFuIC0tLS0KKworY2xlYW46CisJcm0gLWYgKi5lbGYgKi5oZXggKi5iaW4gKi52dnAgKi52Y2QgKi5sb2cKKworLlBIT05ZOiBjbGVhbiBoZXggYWxsCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VhcnRfbWFzdGVyL3J1bl92ZXJpbG9nIGIvdmVyaWxvZy9kdi91YXJ0X21hc3Rlci9ydW5fdmVyaWxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmZlZDNjCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91YXJ0X21hc3Rlci9ydW5fdmVyaWxvZwpAQCAtMCwwICsxLDIwIEBACisjIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworIyAvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorIyAvLyAKKyMgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIC8vCisjIC8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIC8vCisjIC8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisjIC8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorIyAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjaXZlcmlsb2cgLWcyMDA1LXN2IC1ERlVOQ1RJT05BTCAtRFNJTSAtREdMIC1JIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvcGRrL3NreTEzMEEgLUkgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL2NhcmF2ZWwvdmVyaWxvZy9kdi9jYXJhdmVsIC1JIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9jYXJhdmVsL3Zlcmlsb2cvcnRsIC1JIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9jYXJhdmVsL3Zlcmlsb2cgLUkgLi4vIC1JLi4vLi4vLi4vdmVyaWxvZy9ydGwgLUkuLi8uLi8uLi92ZXJpbG9nL2dsICAtSSAuLi8uLi8uLi92ZXJpbG9nIHdiX3BvcnRfdGIudiAtbyB3Yl9wb3J0LnZ2cAoraXZlcmlsb2cgLWcyMDA1LXN2IC1EV0ZEVU1QIC1ERlVOQ1RJT05BTCAtRFNJTSAtREdMIC1JIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvcGRrL3NreTEzMEEgLUkgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL2NhcmF2ZWwvdmVyaWxvZy9kdi9jYXJhdmVsIC1JIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9jYXJhdmVsL3Zlcmlsb2cvcnRsIC1JIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9jYXJhdmVsL3Zlcmlsb2cgLUkgLi4vIC1JLi4vLi4vLi4vdmVyaWxvZy9ydGwgLUkuLi8uLi8uLi92ZXJpbG9nL2dsICAtSSAuLi8uLi8uLi92ZXJpbG9nIHdiX3BvcnRfdGIudiAtbyB3Yl9wb3J0LnZ2cApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91YXJ0X21hc3Rlci91YXJ0X21hc3Rlci5jIGIvdmVyaWxvZy9kdi91YXJ0X21hc3Rlci91YXJ0X21hc3Rlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNTkxMmEKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VhcnRfbWFzdGVyL3VhcnRfbWFzdGVyLmMKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIwIEVmYWJsZXNzIENvcnBvcmF0aW9uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqLworCisvLyBUaGlzIGluY2x1ZGUgaXMgcmVsYXRpdmUgdG8gJENBUkFWRUxfUEFUSCAoc2VlIE1ha2VmaWxlKQorI2luY2x1ZGUgInZlcmlsb2cvZHYvY2FyYXZlbC9kZWZzLmgiCisjaW5jbHVkZSAidmVyaWxvZy9kdi9jYXJhdmVsL3N0dWIuYyIKKworLy8gVXNlciBQcm9qZWN0IFNsYXZlcyAoMHgzMDAwXzAwMDApCisKKworI2RlZmluZSBHUElPX01PREVfVVNFUl9TVERfQklESVJFQ1RJT05BTF9QVUxMVVAgICAweDFDMDAKKworI2RlZmluZSBTQ19TSU1fT1VUUE9SVCAoMHhmMDAwMDAwMCkKKworLyoKKyAgICAgICAgIFJpc2NWIEhlbGxvIFdvcmxkIHRlc3QuCisJICAgICAgICAtIFdha2UgdXAgdGhlIFJpc2MgVgorCQktIEJvb3QgZnJvbSBTUEkgRmxhc2gKKwkJLSBSaXNjdiBXcml0ZSBIZWxsbyBXb3JsZCB0byBTRFJBTSwKKwkJLSBFeHRlcm5hbCBXaXNoYm9uZSByZWFkIGJhY2sgdmFsaWRhdGlvbiB0aGUgZGF0YQorKi8KK2ludCBpID0gMDsgCitpbnQgY2xrID0gMDsKK2ludCB1YXJ0X2NmZyA9IDA7Cit2b2lkIG1haW4oKQoreworCisJaW50IGJGYWlsID0gMDsKKwkvKiAKKwlJTyBDb250cm9sIFJlZ2lzdGVycworCXwgRE0gICAgIHwgVlRSSVAgfCBTTE9XICB8IEFOX1BPTCB8IEFOX1NFTCB8IEFOX0VOIHwgTU9EX1NFTCB8IElOUF9ESVMgfCBIT0xESCB8IE9FQl9OIHwgTUdNVF9FTiB8CisJfCAzLWJpdHMgfCAxLWJpdCB8IDEtYml0IHwgMS1iaXQgIHwgMS1iaXQgIHwgMS1iaXQgfCAxLWJpdCAgIHwgMS1iaXQgICB8IDEtYml0IHwgMS1iaXQgfCAxLWJpdCAgIHwKKwlPdXRwdXQ6IDAwMDBfMDExMF8wMDAwXzExMTAgICgweDE4MDgpID0gR1BJT19NT0RFX1VTRVJfU1REX09VVFBVVAorCXwgRE0gICAgIHwgVlRSSVAgfCBTTE9XICB8IEFOX1BPTCB8IEFOX1NFTCB8IEFOX0VOIHwgTU9EX1NFTCB8IElOUF9ESVMgfCBIT0xESCB8IE9FQl9OIHwgTUdNVF9FTiB8CisJfCAxMTAgICAgfCAwICAgICB8IDAgICAgIHwgMCAgICAgIHwgMCAgICAgIHwgMCAgICAgfCAwICAgICAgIHwgMSAgICAgICB8IDAgICAgIHwgMCAgICAgfCAwICAgICAgIHwKKwkKKwkgCisJSW5wdXQ6IDAwMDBfMDAwMV8wMDAwXzExMTEgKDB4MDQwMikgPSBHUElPX01PREVfVVNFUl9TVERfSU5QVVRfTk9QVUxMCisJfCBETSAgICAgfCBWVFJJUCB8IFNMT1cgIHwgQU5fUE9MIHwgQU5fU0VMIHwgQU5fRU4gfCBNT0RfU0VMIHwgSU5QX0RJUyB8IEhPTERIIHwgT0VCX04gfCBNR01UX0VOIHwKKwl8IDAwMSAgICB8IDAgICAgIHwgMCAgICAgfCAwICAgICAgfCAwICAgICAgfCAwICAgICB8IDAgICAgICAgfCAwICAgICAgIHwgMCAgICAgfCAxICAgICB8IDAgICAgICAgfAorCisJSW5wdXQ6IDAwMDBfMDAwMV8wMDAwXzExMTEgKDB4MTgwMCkgPSBHUElPX01PREVfVVNFUl9TVERfQklESVJFQ1RJT05BTAorCXwgRE0gICAgIHwgVlRSSVAgfCBTTE9XICB8IEFOX1BPTCB8IEFOX1NFTCB8IEFOX0VOIHwgTU9EX1NFTCB8IElOUF9ESVMgfCBIT0xESCB8IE9FQl9OIHwgTUdNVF9FTiB8CisJfCAxMTAgICAgfCAwICAgICB8IDAgICAgIHwgMCAgICAgIHwgMCAgICAgIHwgMCAgICAgfCAwICAgICAgIHwgMCAgICAgICB8IDAgICAgIHwgMCAgICAgfCAwICAgICAgIHwKKwkqLworCisJLyogU2V0IHVwIHRoZSBob3VzZWtlZXBpbmcgU1BJIHRvIGJlIGNvbm5lY3RlZCBpbnRlcm5hbGx5IHNvCSovCisJLyogdGhhdCBleHRlcm5hbCBwaW4gY2hhbmdlcyBkb24ndCBhZmZlY3QgaXQuCQkJKi8KKworCXJlZ19zcGltYXN0ZXJfY29uZmlnID0gMHhhMDAyOwkvLyBFbmFibGUsIHByZXNjYWxlciA9IDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ubmVjdCB0byBob3VzZWtlZXBpbmcgU1BJCisKKwkvLyBDb25uZWN0IHRoZSBob3VzZWtlZXBpbmcgU1BJIHRvIHRoZSBTUEkgbWFzdGVyCisJLy8gc28gdGhhdCB0aGUgQ1NCIGxpbmUgaXMgbm90IGxlZnQgZmxvYXRpbmcuICBUaGlzIGFsbG93cworCS8vIGFsbCBvZiB0aGUgR1BJTyBwaW5zIHRvIGJlIHVzZWQgZm9yIHVzZXIgZnVuY3Rpb25zLgorICAgICAgICByZWdfbXByal9pb18zMSA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzMwID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMjkgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18yOCA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzI3ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMjYgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18yNSA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzI0ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMjMgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18yMiA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzIxID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMjAgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18xOSA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzE4ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMTcgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18xNiA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisKKworICAgIHJlZ19sYTBfb2VuYiA9IHJlZ19sYTBfaWVuYSA9ICAweDAwMDAwMDA7CisgICAgIC8qIEFwcGx5IGNvbmZpZ3VyYXRpb24gKi8KKyAgICByZWdfbXByal94ZmVyID0gMTsKKyAgICB3aGlsZSAocmVnX21wcmpfeGZlciA9PSAxKTsKKyAgICByZWdfbXByal9kYXRhbCA9IDB4QUI2MDAwMDA7CisKKyAgICByZWdfbGEwX29lbmIgPSByZWdfbGEwX2llbmEgPSAgMHgwMDAwMDAwOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFN0YXJ0IG9mIFVzZXIgRnVuY3Rpb25hbGl0eSBhbmQgdGFrZSBvdmVyIHRoZSBHUElPIFBpbnMKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBVc2VyIGJsb2NrIGRlY2lkZSBvbiB0aGUgR1BJTyBmdW5jdGlvbgorICAgIHJlZ19tcHJqX2lvXzM3ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzM2ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzM1ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzM0ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMzID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMyID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMxID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMwID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI5ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI4ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI3ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI2ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI1ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI0ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIzID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIyID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIxID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIwID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE5ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE4ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE3ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE2ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE1ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE0ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzEzID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzEyID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzExID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzEwID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzkgID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzggID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzcgID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzYgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzUgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzQgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzEgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzAgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworCisgICAgIC8qIEFwcGx5IGNvbmZpZ3VyYXRpb24gKi8KKyAgICByZWdfbXByal94ZmVyID0gMTsKKyAgICB3aGlsZSAocmVnX21wcmpfeGZlciA9PSAxKTsKKworICAgIHJlZ19sYTBfZGF0YSA9IDB4MDAwOworICAgIC8vcmVnX2xhMF9kYXRhID0gMHgwMDA7CisgICAgLy9yZWdfbGEwX2RhdGEgfD0gMHgxOyAvLyBiaXRbMF0gLSBSZW1vdmUgU29mdHdhcmUgUmVzZXQKKyAgICAvL3JlZ19sYTBfZGF0YSB8PSAweDE7IC8vIGJpdFsxXSAtIEVuYWJsZSBUcmFuc21pdCBQYXRoCisgICAgLy9yZWdfbGEwX2RhdGEgfD0gMHgyOyAvLyBiaXRbMl0gLSBFbmFibGUgUmVjZWl2ZSBQYXRoCisgICAgLy9yZWdfbGEwX2RhdGEgfD0gMHg0OyAvLyBiaXRbM10gLSBTZXQgMiBTdG9wIEJpdAorICAgIC8vcmVnX2xhMF9kYXRhIHw9IDB4MDsgLy8gYml0WzE1OjRdIC0gMTZ4IEJhdWQgQ2xvY2sKKyAgICAvL3JlZ19sYTBfZGF0YSB8PSAweDA7IC8vIGJpdFsxNzoxNl0gLSBQcmlvcml0eSBtb2RlID0gMAorICAgIHJlZ19sYTBfZGF0YSA9IDB4MDAxOworICAgIHJlZ19sYTBfZGF0YSA9IDB4MDBGOworCisKKworfQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91YXJ0X21hc3Rlci91YXJ0X21hc3Rlcl90Yi52IGIvdmVyaWxvZy9kdi91YXJ0X21hc3Rlci91YXJ0X21hc3Rlcl90Yi52Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhN2Y2NmUKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VhcnRfbWFzdGVyL3VhcnRfbWFzdGVyX3RiLnYKQEAgLTAsMCArMSwyNzkgQEAKKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorCitgZGVmYXVsdF9uZXR0eXBlIG5vbmUKKworYHRpbWVzY2FsZSAxIG5zIC8gMSBwcworCitgaW5jbHVkZSAidXByal9uZXRsaXN0cy52IgorYGluY2x1ZGUgImNhcmF2ZWxfbmV0bGlzdHMudiIKK2BpbmNsdWRlICJzcGlmbGFzaC52IgorYGluY2x1ZGUgInVhcnRfYWdlbnQudiIKKworbW9kdWxlIHVhcnRfbWFzdGVyX3RiOworCXJlZyBjbG9jazsKKwlyZWcgUlNUQjsKKwlyZWcgQ1NCOworCXJlZyBwb3dlcjEsIHBvd2VyMjsKKwlyZWcgcG93ZXIzLCBwb3dlcjQ7CisKKwl3aXJlIGdwaW87CisJd2lyZSBbMzc6MF0gbXByal9pbzsKKwl3aXJlIFs3OjBdIG1wcmpfaW9fMDsKKwl3aXJlIFsxNTowXSBjaGVja2JpdHM7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVWFydCBDb25maWd1cmF0aW9uCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3JlZyBbMTowXSAgICAgIHVhcnRfZGF0YV9iaXQgICAgICAgIDsKK3JlZwkgICAgICAgdWFydF9zdG9wX2JpdHMgICAgICAgOyAvLyAwOiAxIHN0b3AgYml0OyAxOiAyIHN0b3AgYml0OworcmVnCSAgICAgICB1YXJ0X3N0aWNrX3Bhcml0eSAgICA7IC8vIDE6IGZvcmNlIGV2ZW4gcGFyaXR5CityZWcJICAgICAgIHVhcnRfcGFyaXR5X2VuICAgICAgIDsgLy8gcGFyaXR5IGVuYWJsZQorcmVnCSAgICAgICB1YXJ0X2V2ZW5fb2RkX3Bhcml0eSA7IC8vIDA6IG9kZCBwYXJpdHk7IDE6IGV2ZW4gcGFyaXR5CisKK3JlZyBbNzowXSAgICAgIHVhcnRfZGF0YSAgICAgICAgICAgIDsKK3JlZyBbMTU6MF0gICAgIHVhcnRfZGl2aXNvciAgICAgICAgIDsJLy8gZGl2aWRlZCBieSBuICogMTYKK3JlZyBbMTU6MF0gICAgIHVhcnRfdGltZW91dCAgICAgICAgIDsvLyB3YWl0IHRpbWUgbGltaXQKKworcmVnIFsxNTowXSAgICAgdWFydF9yeF9udSAgICAgICAgICAgOworcmVnIFsxNTowXSAgICAgdWFydF90eF9udSAgICAgICAgICAgOworcmVnIFs3OjBdICAgICAgdWFydF93cml0ZV9kYXRhIFswOjM5XTsKK3JlZyAJICAgICAgIHVhcnRfZmlmb19lbmFibGUgICAgIDsJLy8gZmlmbyBtb2RlIGRpc2FibGUKKworcmVnIFszMTowXSAgICAgcmVhZF9kYXRhICAgICA7CityZWcgICAgICAgICAgICBmbGFnOworcmVnICAgICAgICAgICAgdGVzdF9mYWlsICAgICA7CisKKworCWFzc2lnbiBjaGVja2JpdHMgPSBtcHJqX2lvWzMxOjE2XTsKKworCWFzc2lnbiBtcHJqX2lvWzNdID0gKENTQiA9PSAxJ2IxKSA/IDEnYjEgOiAxJ2J6OworCisJLy8gRXh0ZXJuYWwgY2xvY2sgaXMgdXNlZCBieSBkZWZhdWx0LiAgTWFrZSB0aGlzIGFydGlmaWNpYWxseSBmYXN0IGZvciB0aGUKKwkvLyBzaW11bGF0aW9uLiAgTm9ybWFsbHkgdGhpcyB3b3VsZCBiZSBhIHNsb3cgY2xvY2sgYW5kIHRoZSBkaWdpdGFsIFBMTAorCS8vIHdvdWxkIGJlIHRoZSBmYXN0IGNsb2NrLgorCisJYWx3YXlzICMxMi41IGNsb2NrIDw9IChjbG9jayA9PT0gMSdiMCk7CisKKwlpbml0aWFsIGJlZ2luCisJCWNsb2NrID0gMDsKKwllbmQKKworCWBpZmRlZiBXRkRVTVAKKwlpbml0aWFsIGJlZ2luCisJCSRkdW1wZmlsZSgic2lteC52Y2QiKTsKKwkJJGR1bXB2YXJzKDEsIHVhcnRfbWFzdGVyX3RiKTsKKwkJJGR1bXB2YXJzKDEsIHVhcnRfbWFzdGVyX3RiLnV1dCk7CisJCSRkdW1wdmFycygxLCB1YXJ0X21hc3Rlcl90Yi51dXQubXByaik7CisJCSRkdW1wdmFycygxLCB1YXJ0X21hc3Rlcl90Yi51dXQubXByai51X3diX2hvc3QpOworCQkkZHVtcHZhcnMoMSwgdWFydF9tYXN0ZXJfdGIudXV0Lm1wcmoudV93Yl9ob3N0LnVfdWFydDJ3Yik7CisJCSRkdW1wdmFycygxLCB1YXJ0X21hc3Rlcl90Yi50Yl9tYXN0ZXJfdWFydCk7CisJCS8vJGR1bXB2YXJzKDIsIHVhcnRfbWFzdGVyX3RiLnV1dC5tcHJqLnVfcGlubXV4KTsKKwllbmQKKyAgICAgICBgZW5kaWYKKworCWluaXRpYWwgYmVnaW4KKworCQkvLyBSZXBlYXQgY3ljbGVzIG9mIDEwMDAgY2xvY2sgZWRnZXMgYXMgbmVlZGVkIHRvIGNvbXBsZXRlIHRlc3RiZW5jaAorCQlyZXBlYXQgKDQwMCkgYmVnaW4KKwkJCXJlcGVhdCAoMTAwMCkgQChwb3NlZGdlIGNsb2NrKTsKKwkJCS8vICRkaXNwbGF5KCIrMTAwMCBjeWNsZXMiKTsKKwkJZW5kCisJCSRkaXNwbGF5KCIlY1sxOzMxbSIsMjcpOworCQkkZGlzcGxheSAoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJYGlmZGVmIEdMCisJCSAgICRkaXNwbGF5ICgiTW9uaXRvcjogVGltZW91dCwgVGVzdCBVQVJUIE1hc3RlciAoR0wpIEZhaWxlZCIpOworCQlgZWxzZQorCQkgICAkZGlzcGxheSAoIk1vbml0b3I6IFRpbWVvdXQsIFRlc3QgVUFSVCBNYXN0ZXIgKFJUTCkgRmFpbGVkIik7CisJCWBlbmRpZgorCQkkZGlzcGxheSAoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJJGRpc3BsYXkoIiVjWzBtIiwyNyk7CisJCSRmaW5pc2g7CisJZW5kCisKKwlpbml0aWFsIGJlZ2luCisgICAgICAgICAgICB1YXJ0X2RhdGFfYml0ICAgICAgICAgICA9IDInYjExOworICAgICAgICAgICAgdWFydF9zdG9wX2JpdHMgICAgICAgICAgPSAxOyAvLyAwOiAxIHN0b3AgYml0OyAxOiAyIHN0b3AgYml0OworICAgICAgICAgICAgdWFydF9zdGlja19wYXJpdHkgICAgICAgPSAwOyAvLyAxOiBmb3JjZSBldmVuIHBhcml0eQorICAgICAgICAgICAgdWFydF9wYXJpdHlfZW4gICAgICAgICAgPSAwOyAvLyBwYXJpdHkgZW5hYmxlCisgICAgICAgICAgICB1YXJ0X2V2ZW5fb2RkX3Bhcml0eSAgICA9IDE7IC8vIDA6IG9kZCBwYXJpdHk7IDE6IGV2ZW4gcGFyaXR5CisgICAgICAgICAgICB1YXJ0X2Rpdmlzb3IgICAgICAgICAgICA9IDE1Oy8vIGRpdmlkZWQgYnkgbiAqIDE2CisgICAgICAgICAgICB1YXJ0X3RpbWVvdXQgICAgICAgICAgICA9IDYwMDsvLyB3YWl0IHRpbWUgbGltaXQKKyAgICAgICAgICAgIHVhcnRfZmlmb19lbmFibGUgICAgICAgID0gMDsJLy8gZmlmbyBtb2RlIGRpc2FibGUKKyAgICAgICAgICAgIHRiX21hc3Rlcl91YXJ0LmRlYnVnX21vZGUgPSAwOyAvLyBkaXNhYmxlIGRlYnVnIGRpc3BsYXkKKyAgICAgICAgICAgIHRiX21hc3Rlcl91YXJ0LnVhcnRfaW5pdDsKKyAgICAgICAgICAgIHRiX21hc3Rlcl91YXJ0LmNvbnRyb2xfc2V0dXAgKHVhcnRfZGF0YV9iaXQsIHVhcnRfc3RvcF9iaXRzLCB1YXJ0X3Bhcml0eV9lbiwgdWFydF9ldmVuX29kZF9wYXJpdHksIAorICAgICAgICAJICAgICAgICAgICAgICAgICAgICAgICAgICB1YXJ0X3N0aWNrX3Bhcml0eSwgdWFydF90aW1lb3V0LCB1YXJ0X2Rpdmlzb3IpOworCSAgIHdhaXQoY2hlY2tiaXRzID09IDE2J2ggQUI2MCk7CisJCSRkaXNwbGF5KCJNb25pdG9yOiBVQVJUIE1hc3RlciBUZXN0IFN0YXJ0ZWQiKTsKKworICAgICAgICAgICByZXBlYXQgKDQwMDApIEAocG9zZWRnZSBjbG9jayk7CisgICAgICAgICAgIC8vJHdyaXRlICgiXG4oJXQpUmVzcG9uc2U6XG4iLCR0aW1lKTsKKyAgICAgICAgICAgZmxhZyA9IDA7CisgICAgICAgICAgIHdoaWxlKGZsYWcgPT0gMCkKKyAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICB0Yl9tYXN0ZXJfdWFydC5yZWFkX2NoYXIocmVhZF9kYXRhLGZsYWcpOworICAgICAgICAgICAgICAgICR3cml0ZSAoIiVjIixyZWFkX2RhdGEpOworICAgICAgICAgICBlbmQKKworCisKKyAgICAgICAgICAgLy8gUmVtb3ZlIFdiIFJlc2V0CisgICAgICAgICAgIHVhcnRtX3JlZ193cml0ZSgnaDMwODBfMDAwMCwnaDEpOworCisgICAgICAgICAgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKKyAgICAgICAgICAgIzE7CisKKyAgICAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFdyaXRpbmcgIGV4cGVjdGVkIHZhbHVlIik7CisgICAgICAgICAgIAorICAgICAgICAgICB0ZXN0X2ZhaWwgPSAwOworICAgICAgICAgICB1YXJ0bV9yZWdfd3JpdGUoMzInaDMwMDIwMDU4LDMyJ2gxMTIyMzM0NCk7CisgICAgICAgICAgIHVhcnRtX3JlZ193cml0ZSgzMidoMzAwMjAwNUMsMzInaDIyMzM0NDU1KTsKKyAgICAgICAgICAgdWFydG1fcmVnX3dyaXRlKDMyJ2gzMDAyMDA2MCwzMidoMzM0NDU1NjYpOworICAgICAgICAgICB1YXJ0bV9yZWdfd3JpdGUoMzInaDMwMDIwMDY0LDMyJ2g0NDU1NjY3Nyk7CisgICAgICAgICAgIHVhcnRtX3JlZ193cml0ZSgzMidoMzAwMjAwNjgsMzInaDU1NjY3Nzg4KTsKKyAgICAgICAgICAgdWFydG1fcmVnX3dyaXRlKDMyJ2gzMDAyMDA2QywzMidoNjY3Nzg4OTkpOworCisgICAgICAgICAgIHVhcnRtX3JlZ19yZWFkX2NoZWNrKDMyJ2gzMDAyMDA1OCwzMidoMTEyMjMzNDQpOworICAgICAgICAgICB1YXJ0bV9yZWdfcmVhZF9jaGVjaygzMidoMzAwMjAwNUMsMzInaDIyMzM0NDU1KTsKKyAgICAgICAgICAgdWFydG1fcmVnX3JlYWRfY2hlY2soMzInaDMwMDIwMDYwLDMyJ2gzMzQ0NTU2Nik7CisgICAgICAgICAgIHVhcnRtX3JlZ19yZWFkX2NoZWNrKDMyJ2gzMDAyMDA2NCwzMidoNDQ1NTY2NzcpOworICAgICAgICAgICB1YXJ0bV9yZWdfcmVhZF9jaGVjaygzMidoMzAwMjAwNjgsMzInaDU1NjY3Nzg4KTsKKyAgICAgICAgICAgdWFydG1fcmVnX3JlYWRfY2hlY2soMzInaDMwMDIwMDZDLDMyJ2g2Njc3ODg5OSk7CisKKyAgICAgICAgICAgJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgICBpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKyAgICAgICAgICAgICAgYGlmZGVmIEdMCisgICAgICAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVBUlQgTWFzdGVyIChHTCkgUGFzc2VkIik7CisgICAgICAgICAgICAgIGBlbHNlCisgICAgICAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVhcnQgTWFzdGVyIChSVEwpIFBhc3NlZCIpOworICAgICAgICAgICAgICBgZW5kaWYKKyAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgICAgICAgIGBpZmRlZiBHTAorICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgVWFydCBNYXN0ZXIgKEdMKSBGYWlsZWQiKTsKKyAgICAgICAgICAgICAgIGBlbHNlCisgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBVYXJ0IE1hc3RlciAoUlRMKSBGYWlsZWQiKTsKKyAgICAgICAgICAgICAgIGBlbmRpZgorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICAgIzEwMAorCisJICAgICRmaW5pc2g7CisJZW5kCisKKwlpbml0aWFsIGJlZ2luCisJCVJTVEIgPD0gMSdiMDsKKwkJQ1NCICA8PSAxJ2IxOwkJLy8gRm9yY2UgQ1NCIGhpZ2gKKwkJIzIwMDA7CisJCVJTVEIgPD0gMSdiMTsJICAgIAkvLyBSZWxlYXNlIHJlc2V0CisJCSMxNzAwMDA7CisJCUNTQiA9IDEnYjA7CQkvLyBDU0IgY2FuIGJlIHJlbGVhc2VkCisJZW5kCisKKwlpbml0aWFsIGJlZ2luCQkvLyBQb3dlci11cCBzZXF1ZW5jZQorCQlwb3dlcjEgPD0gMSdiMDsKKwkJcG93ZXIyIDw9IDEnYjA7CisJCXBvd2VyMyA8PSAxJ2IwOworCQlwb3dlcjQgPD0gMSdiMDsKKwkJIzEwMDsKKwkJcG93ZXIxIDw9IDEnYjE7CisJCSMxMDA7CisJCXBvd2VyMiA8PSAxJ2IxOworCQkjMTAwOworCQlwb3dlcjMgPD0gMSdiMTsKKwkJIzEwMDsKKwkJcG93ZXI0IDw9IDEnYjE7CisJZW5kCisKKwkvL2Fsd2F5cyBAKG1wcmpfaW8pIGJlZ2luCisJLy8JIzEgJGRpc3BsYXkoIk1QUkotSU8gc3RhdGUgPSAlYiAiLCBtcHJqX2lvWzc6MF0pOworCS8vZW5kCisKKwl3aXJlIGZsYXNoX2NzYjsKKwl3aXJlIGZsYXNoX2NsazsKKwl3aXJlIGZsYXNoX2lvMDsKKwl3aXJlIGZsYXNoX2lvMTsKKworCXdpcmUgVkREM1YzID0gcG93ZXIxOworCXdpcmUgVkREMVY4ID0gcG93ZXIyOworCXdpcmUgVVNFUl9WREQzVjMgPSBwb3dlcjM7CisJd2lyZSBVU0VSX1ZERDFWOCA9IHBvd2VyNDsKKwl3aXJlIFZTUyA9IDEnYjA7CisKKwljYXJhdmVsIHV1dCAoCisJCS52ZGRpbwkgIChWREQzVjMpLAorCQkudnNzaW8JICAoVlNTKSwKKwkJLnZkZGEJICAoVkREM1YzKSwKKwkJLnZzc2EJICAoVlNTKSwKKwkJLnZjY2QJICAoVkREMVY4KSwKKwkJLnZzc2QJICAoVlNTKSwKKwkJLnZkZGExICAgIChVU0VSX1ZERDNWMyksCisJCS52ZGRhMiAgICAoVVNFUl9WREQzVjMpLAorCQkudnNzYTEJICAoVlNTKSwKKwkJLnZzc2EyCSAgKFZTUyksCisJCS52Y2NkMQkgIChVU0VSX1ZERDFWOCksCisJCS52Y2NkMgkgIChVU0VSX1ZERDFWOCksCisJCS52c3NkMQkgIChWU1MpLAorCQkudnNzZDIJICAoVlNTKSwKKwkJLmNsb2NrCSAgKGNsb2NrKSwKKwkJLmdwaW8gICAgIChncGlvKSwKKyAgICAgICAgLm1wcmpfaW8gIChtcHJqX2lvKSwKKwkJLmZsYXNoX2NzYihmbGFzaF9jc2IpLAorCQkuZmxhc2hfY2xrKGZsYXNoX2NsayksCisJCS5mbGFzaF9pbzAoZmxhc2hfaW8wKSwKKwkJLmZsYXNoX2lvMShmbGFzaF9pbzEpLAorCQkucmVzZXRiCSAgKFJTVEIpCisJKTsKKworCXNwaWZsYXNoICMoCisJCS5GSUxFTkFNRSgidWFydF9tYXN0ZXIuaGV4IikKKwkpIHNwaWZsYXNoICgKKwkJLmNzYihmbGFzaF9jc2IpLAorCQkuY2xrKGZsYXNoX2NsayksCisJCS5pbzAoZmxhc2hfaW8wKSwKKwkJLmlvMShmbGFzaF9pbzEpLAorCQkuaW8yKCksCQkJLy8gbm90IHVzZWQKKwkJLmlvMygpCQkJLy8gbm90IHVzZWQKKwkpOworCisKKworCitgaWZuZGVmIEdMIC8vIERyaXZlIFBvd2VyIGZvciBIb2xkIEZpeCBCdWYKKyAgICAvLyBBbGwgc3RhbmRhcmQgY2VsbCBuZWVkIHBvd2VyIGhvb2stdXAgZm9yIGZ1bmN0aW9uYWxpdHkgd29yaworICAgIGluaXRpYWwgYmVnaW4KKyAgICBlbmQKK2BlbmRpZiAgICAKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIFVBUlQgQWdlbnQgaW50ZWdyYXRpb24KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlIHVhcnRfdHhkLHVhcnRfcnhkOworCithc3NpZ24gdWFydF90eGQgICA9IG1wcmpfaW9bMzVdOworYXNzaWduIG1wcmpfaW9bMzRdICA9IHVhcnRfcnhkIDsKKyAKK3VhcnRfYWdlbnQgdGJfbWFzdGVyX3VhcnQoCisJLm1jbGsgICAgICAgICAgICAgICAgKGNsb2NrICAgICAgICAgICAgICApLAorCS50eGQgICAgICAgICAgICAgICAgICh1YXJ0X3J4ZCAgICAgICAgICAgKSwKKwkucnhkICAgICAgICAgICAgICAgICAodWFydF90eGQgICAgICAgICAgICkKKwkpOworCisKK2BpbmNsdWRlICJ1YXJ0X21hc3Rlcl90YXNrcy5zdiIKKworZW5kbW9kdWxlCitgZGVmYXVsdF9uZXR0eXBlIHdpcmUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9iYXNpYy9NYWtlZmlsZSBiL3Zlcmlsb2cvZHYvdXNlcl9iYXNpYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTU1OGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX2Jhc2ljL01ha2VmaWxlCkBAIC0wLDAgKzEsMTA1IEBACisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKKyMjIENhcmF2ZWwgUG9pbnRlcnMKK0NBUkFWRUxfUk9PVCA/PSAuLi8uLi8uLi9jYXJhdmVsCitDQVJBVkVMX1BBVEggPz0gJChDQVJBVkVMX1JPT1QpCitDQVJBVkVMX0ZJUk1XQVJFX1BBVEggPSAkKENBUkFWRUxfUEFUSCkvdmVyaWxvZy9kdi9jYXJhdmVsCitDQVJBVkVMX1ZFUklMT0dfUEFUSCAgPSAkKENBUkFWRUxfUEFUSCkvdmVyaWxvZworQ0FSQVZFTF9SVExfUEFUSCA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL3J0bAorQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMgPSAkKENBUkFWRUxfVkVSSUxPR19QQVRIKS9kdi9jYXJhdmVsCisKKworIyMgVXNlciBQcm9qZWN0IFBvaW50ZXJzCitVUFJKX1ZFUklMT0dfUEFUSCA/PSAuLi8uLi8uLi92ZXJpbG9nCitVUFJKX1JUTF9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvcnRsCitVUFJKX0dMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9nbAorVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMgPSAuLi9tb2RlbAorVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMgPSAuLi9hZ2VudHMKK1VQUkpfSU5DTFVERV9QQVRIMSA9ICQoVVBSSl9SVExfUEFUSCkveWlmaXZlL3ljcjFjL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEgyID0gJChVUFJKX1JUTF9QQVRIKS9zZHJhbV9jdHJsL3NyYy9kZWZzCitVUFJKX0lOQ0xVREVfUEFUSDMgPSAkKFVQUkpfUlRMX1BBVEgpL2kyY20vc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDQgPSAkKFVQUkpfUlRMX1BBVEgpL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRINSA9ICQoVVBSSl9SVExfUEFUSCkvbWJpc3QvaW5jbHVkZQorCisjIyBZSUZJVkUgRklSTVdBUkUKK1lJRklWRV9GSVJNV0FSRV9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvZHYvZmlybXdhcmUKK0dDQzY0X1BSRUZJWD89cmlzY3Y2NC11bmtub3duLWVsZgorCisjIyBSSVNDViBHQ0MgCitHQ0NfUEFUSD89L2VmL2FwcHMvYmluCitHQ0NfUFJFRklYPz1yaXNjdjMyLXVua25vd24tZWxmCitQREtfUEFUSD89L2VmL3RlY2gvU1cvc2t5MTMwQQorCisjIyBTaW11bGF0aW9uIG1vZGU6IFJUTC9HTAorU0lNPz1SVEwKK0RVTVA/PU9GRgorCisuU1VGRklYRVM6CisKK1BBVFRFUk4gPSB1c2VyX2Jhc2ljCisKK2FsbDogICR7UEFUVEVSTjo9LnZjZH0KKworaGV4OiAgJHtQQVRURVJOOj0uaGV4fQorCit2dnA6ICAke1BBVFRFUk46PS52dnB9CisKKyUudnZwOiAlX3RiLnYKK2lmZXEgKCQoU0lNKSxSVEwpCisgICBpZmVxICgkKERVTVApLE9GRikKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfQUdFTlRTKSAgICBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDEpICAgIC1JICQoVVBSSl9JTkNMVURFX1BBVEgyKSAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMykgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEg0KSAtSSAkKFVQUkpfSU5DTFVERV9QQVRINSkgXAorCSQ8IC1vICRAIAorICAgIGVsc2UgIAorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtRFdGRFVNUCAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICBlbmRpZgorZWxzZSAgCisJaXZlcmlsb2cgLWcyMDA1LXN2IC1ERlVOQ1RJT05BTCAtRFNJTSAtREdMIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIC1JICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKFVQUkpfR0xfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwkkPCAtbyAkQCAKK2VuZGlmCisKKyUudmNkOiAlLnZ2cAorCXZ2cCAkPAorCislLmVsZjogJS5jICQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zZWN0aW9ucy5sZHMgJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3N0YXJ0LnMKKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1JICQoQ0FSQVZFTF9QQVRIKSAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtV2wsLUJzdGF0aWMsLVQsJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3NlY3Rpb25zLmxkcywtLXN0cmlwLWRlYnVnIC1mZnJlZXN0YW5kaW5nIC1ub3N0ZGxpYiAtbyAkQCAkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc3RhcnQucyAkPAorCislLmhleDogCisJZWNobyBAIlRoaXMgaXMgdXNlciBib290IHRlc3QsIG5vdGluZyB0byBjb21waWxlIHRoZSBtYW5nbWVudCBjb3JlIGNvZGUiCisKKyUuYmluOiAlLmVsZgorCSR7R0NDNjRfUFJFRklYfS1vYmpjb3B5IC1PIGJpbmFyeSAkPCAvZGV2L3N0ZG91dCB8IHRhaWwgLWMgKzEwNDg1NzcgPiAkQAorCisjIC0tLS0gQ2xlYW4gLS0tLQorCitjbGVhbjoKKwlybSAtZiAqLmVsZiAqLmhleCAqLmJpbiAqLnZ2cCAqLnZjZCAqLmxvZyAqLmR1bXAKKworLlBIT05ZOiBjbGVhbiBoZXggYWxsCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfYmFzaWMvdXNlcl9iYXNpY190Yi52IGIvdmVyaWxvZy9kdi91c2VyX2Jhc2ljL3VzZXJfYmFzaWNfdGIudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGQ5ODIxCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX2Jhc2ljL3VzZXJfYmFzaWNfdGIudgpAQCAtMCwwICsxLDUxNyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogIDIwMjEgLCBEaW5lc2ggQW5uYXl5YQorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogTW9kaWZpZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFN0YW5kYWxvbmUgVXNlciB2YWxpZGF0aW9uIFRlc3QgYmVuY2ggICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICBUaGlzIGlzIGEgc3RhbmRhbG9uZSB0ZXN0IGJlbmNoIHRvIHZhbGlkYXRlIHRoZSAgICAgICAgICAgIC8vLy8KKy8vLy8gICBEaWdpdGFsIGNvcmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAxLiBVc2VyIFJpc2MgY29yZSBpcyBib290ZWQgdXNpbmcgIGNvbXBpbGVkIGNvZGUgb2YgICAgICAgIC8vLy8KKy8vLy8gICAgICB1c2VyX3Jpc2NfYm9vdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAyLiBVc2VyIFJpc2MgY29yZSB1c2VzIFNlcmlhbCBGbGFzaCBhbmQgU0RSQU0gdG8gYm9vdCAgICAgIC8vLy8KKy8vLy8gICAzLiBBZnRlciBzdWNjZXNzZnVsIGJvb3QsIFJpc2MgY29yZSB3aWxsIGNoZWNrIHRoZSBVQVJUICAgIC8vLy8KKy8vLy8gICAgICBSWCBEYXRhLCBJZiBpdCdzIGF2YWlsYWJsZSB0aGVuIGl0IGxvb3AgYmFjayB0aGUgc2FtZSAgIC8vLy8KKy8vLy8gICAgICBkYXRhIGluIHVhcnQgdHggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICA0LiBUZXN0IGJlbmNoIHNlbmQgcmFuZG9tIDQwIGNoYXJhY3RlciB0b3dhcmRzIFVzZXIgdWFydCAgIC8vLy8KKy8vLy8gICAgICBhbmQgZXhwZWN0IHNhbWUgZGF0YSB0byByZXR1cm4gYmFjayAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMTZ0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYGRlZmF1bHRfbmV0dHlwZSB3aXJlCisKK2B0aW1lc2NhbGUgMSBucy8xMCBwcworCitgaW5jbHVkZSAidXByal9uZXRsaXN0cy52IgorCisKK21vZHVsZSB1c2VyX2Jhc2ljX3RiOworcGFyYW1ldGVyIENMSzFfUEVSSU9EID0gMTA7CitwYXJhbWV0ZXIgQ0xLMl9QRVJJT0QgPSAyOworCityZWcgICAgICAgICAgICBjbG9jayAgICAgICAgIDsKK3JlZyAgICAgICAgICAgIGNsb2NrMiAgICAgICAgOworcmVnICAgICAgICAgICAgd2JfcnN0X2kgICAgICA7CityZWcgICAgICAgICAgICBwb3dlcjEsIHBvd2VyMjsKK3JlZyAgICAgICAgICAgIHBvd2VyMywgcG93ZXI0OworCityZWcgICAgICAgICAgICB3YmRfZXh0X2N5Y19pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKK3JlZyAgICAgICAgICAgIHdiZF9leHRfc3RiX2k7ICAvLyBzdHJvYmUvcmVxdWVzdAorcmVnIFszMTowXSAgICAgd2JkX2V4dF9hZHJfaTsgIC8vIGFkZHJlc3MKK3JlZyAgICAgICAgICAgIHdiZF9leHRfd2VfaTsgIC8vIHdyaXRlCityZWcgWzMxOjBdICAgICB3YmRfZXh0X2RhdF9pOyAgLy8gZGF0YSBvdXRwdXQKK3JlZyBbMzowXSAgICAgIHdiZF9leHRfc2VsX2k7ICAvLyBieXRlIGVuYWJsZQorCit3aXJlIFszMTowXSAgICB3YmRfZXh0X2RhdF9vOyAgLy8gZGF0YSBpbnB1dAord2lyZSAgICAgICAgICAgd2JkX2V4dF9hY2tfbzsgIC8vIGFja25vd2xlZ2VtZW50Cit3aXJlICAgICAgICAgICB3YmRfZXh0X2Vycl9vOyAgLy8gZXJyb3IKKworLy8gVXNlciBJL08KK3dpcmUgWzM3OjBdICAgIGlvX29lYiAgICAgICAgOword2lyZSBbMzc6MF0gICAgaW9fb3V0ICAgICAgICA7Cit3aXJlIFszNzowXSAgICBpb19pbiAgICAgICAgIDsKKword2lyZSBbMzc6MF0gICAgbXByal9pbyAgICAgICA7Cit3aXJlIFs3OjBdICAgICBtcHJqX2lvXzAgICAgIDsKK3JlZyAgICAgICAgICAgIHRlc3RfZmFpbCAgICAgOworcmVnIFszMTowXSAgICAgcmVhZF9kYXRhICAgICA7CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFVhcnQgQ29uZmlndXJhdGlvbgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityZWcgWzE6MF0gICAgICB1YXJ0X2RhdGFfYml0ICAgICAgICA7CityZWcJICAgICAgIHVhcnRfc3RvcF9iaXRzICAgICAgIDsgLy8gMDogMSBzdG9wIGJpdDsgMTogMiBzdG9wIGJpdDsKK3JlZwkgICAgICAgdWFydF9zdGlja19wYXJpdHkgICAgOyAvLyAxOiBmb3JjZSBldmVuIHBhcml0eQorcmVnCSAgICAgICB1YXJ0X3Bhcml0eV9lbiAgICAgICA7IC8vIHBhcml0eSBlbmFibGUKK3JlZwkgICAgICAgdWFydF9ldmVuX29kZF9wYXJpdHkgOyAvLyAwOiBvZGQgcGFyaXR5OyAxOiBldmVuIHBhcml0eQorCityZWcgWzc6MF0gICAgICB1YXJ0X2RhdGEgICAgICAgICAgICA7CityZWcgWzE1OjBdICAgICB1YXJ0X2Rpdmlzb3IgICAgICAgICA7CS8vIGRpdmlkZWQgYnkgbiAqIDE2CityZWcgWzE1OjBdICAgICB1YXJ0X3RpbWVvdXQgICAgICAgICA7Ly8gd2FpdCB0aW1lIGxpbWl0CisKK3JlZyBbMTU6MF0gICAgIHVhcnRfcnhfbnUgICAgICAgICAgIDsKK3JlZyBbMTU6MF0gICAgIHVhcnRfdHhfbnUgICAgICAgICAgIDsKK3JlZyBbNzowXSAgICAgIHVhcnRfd3JpdGVfZGF0YSBbMDozOV07CityZWcgCSAgICAgICB1YXJ0X2ZpZm9fZW5hYmxlICAgICA7CS8vIGZpZm8gbW9kZSBkaXNhYmxlCisKK3dpcmUgICAgICAgICAgIGNsb2NrX21vbjsKK2ludGVnZXIgICAgICAgIHRlc3Rfc3RlcDsKKworaW50ZWdlciBpLGo7CisKKwkvLyBFeHRlcm5hbCBjbG9jayBpcyB1c2VkIGJ5IGRlZmF1bHQuICBNYWtlIHRoaXMgYXJ0aWZpY2lhbGx5IGZhc3QgZm9yIHRoZQorCS8vIHNpbXVsYXRpb24uICBOb3JtYWxseSB0aGlzIHdvdWxkIGJlIGEgc2xvdyBjbG9jayBhbmQgdGhlIGRpZ2l0YWwgUExMCisJLy8gd291bGQgYmUgdGhlIGZhc3QgY2xvY2suCisKKwlhbHdheXMgIyhDTEsxX1BFUklPRC8yKSBjbG9jayAgPD0gKGNsb2NrID09PSAxJ2IwKTsKKwlhbHdheXMgIyhDTEsyX1BFUklPRC8yKSBjbG9jazIgPD0gKGNsb2NrMiA9PT0gMSdiMCk7CisKKwlpbml0aWFsIGJlZ2luCisJCXRlc3Rfc3RlcCA9IDA7CisJCWNsb2NrID0gMDsKKwkJY2xvY2syID0gMDsKKyAgICAgICAgICAgICAgICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICAgICAgICAgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9hZHJfaSA9J2gwOyAgLy8gYWRkcmVzcworICAgICAgICAgICAgICAgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgICAgICAgICAgICAgICAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3NlbF9pID0naDA7ICAvLyBieXRlIGVuYWJsZQorCWVuZAorCisJYGlmZGVmIFdGRFVNUAorCSAgIGluaXRpYWwgYmVnaW4KKwkgICAJJGR1bXBmaWxlKCJzaW14LnZjZCIpOworCSAgIAkkZHVtcHZhcnMoNCwgdXNlcl9iYXNpY190Yik7CisJICAgZW5kCisgICAgICAgYGVuZGlmCisKKwlpbml0aWFsIGJlZ2luCisJCXdiX3JzdF9pIDw9IDEnYjE7CisJCSMxMDA7CisJCXdiX3JzdF9pIDw9IDEnYjA7CSAgICAJLy8gUmVsZWFzZSByZXNldAorCWVuZAoraW5pdGlhbAorYmVnaW4KKworICAgIzIwMDsgLy8gV2FpdCBmb3IgcmVzZXQgcmVtb3ZhbAorICAgcmVwZWF0ICgxMCkgQChwb3NlZGdlIGNsb2NrKTsKKyAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgQmFzaWMgVGVzdCBTdGFydGVkIik7CisgICAKKyAgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKKworICAgdGVzdF9mYWlsPTA7CisgICBmb3JrCisgICAgICBiZWdpbgorCSAgLy8gRGVmYXVsdCBWYWx1ZSBDaGVjaworICAgICAgICAgIC8vIGNmZ19nbGJfY3RybCAgICAgICAgID0gcmVnXzBbNjowXTsKKyAgICAgICAgICAvLyB1YXJ0X2kyY191c2Jfc2VsICAgICA9IHJlZ18wWzg6N107CisgICAgICAgICAgLy8gY2ZnX3diX2Nsa19jdHJsICAgICAgPSByZWdfMFsxMTo5XTsKKyAgICAgICAgICAvLyBjZmdfcnRjX2Nsa19jdHJsICAgICA9IHJlZ18wWzE5OjEyXTsKKyAgICAgICAgICAvLyBjZmdfY3B1X2Nsa19jdHJsICAgICA9IHJlZ18wWzIzOjIwXTsKKyAgICAgICAgICAvLyBjZmdfc2RyYW1fY2xrX2N0cmwgICA9IHJlZ18wWzI3OjI0XTsKKyAgICAgICAgICAvLyBjZmdfdXNiX2Nsa19jdHJsICAgICA9IHJlZ18wWzMxOjI4XTsKKwkgICRkaXNwbGF5KCJTdGVwLTEsIENQVTogQ0xPQ0sxLCBSVEM6IENMT0NLMi8yLCBVU0I6IENMT0NLMiwgV0JTOkNMT0NLMSIpOworCSAgdGVzdF9zdGVwID0gMTsKKyAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsezQnaDAsNCdoMCw0J2gwLDgnaDAsMydiMDAwLDInYjAwLDcnaDAwfSk7CisJICBjbG9ja19tb25pdG9yKENMSzFfUEVSSU9ELENMSzJfUEVSSU9EKjIsQ0xLMl9QRVJJT0QsQ0xLMV9QRVJJT0QpOworCisJICAkZGlzcGxheSgiU3RlcC0yLCBDUFU6IENMT0NLMiwgUlRDOiBDTE9DSzIvKDIrMSksIFVTQjogQ0xPQ0syLzIsIFdCUzpDTE9DSzEvMiIpOworCSAgdGVzdF9zdGVwID0gMjsKKyAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsezQnaDgsNCdoMCw0J2g4LDgnaDEsMydiMTAwLDInYjAwLDcnaDAwfSk7CisJICBjbG9ja19tb25pdG9yKENMSzJfUEVSSU9ELCgzKSpDTEsyX1BFUklPRCwyKkNMSzJfUEVSSU9ELDIqQ0xLMV9QRVJJT0QpOworCisJICAkZGlzcGxheSgiU3RlcC0zLCBDUFU6IENMT0NLMS8yLCBSVEM6IENMT0NLMi8oMisyKSwgVVNCOiBDTE9DSzIvKDIrMSksIFdCUzpDTE9DSzEvKDIrMSkiKTsKKwkgIHRlc3Rfc3RlcCA9IDM7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs0J2g5LDQnaDAsNCdoNCw4J2gyLDMnYjEwMSwyJ2IwMCw3J2gwMH0pOworCSAgY2xvY2tfbW9uaXRvcigyKkNMSzFfUEVSSU9ELCg0KSpDTEsyX1BFUklPRCwzKkNMSzJfUEVSSU9ELDMqQ0xLMV9QRVJJT0QpOworCisJICAkZGlzcGxheSgiU3RlcC00LCBDUFU6IENMT0NLMS8zLCBSVEM6IENMT0NLMi8oMiszKSwgVVNCOiBDTE9DSzIvKDIrMiksIFdCUzpDTE9DSzEvKDIrMikiKTsKKwkgIHRlc3Rfc3RlcCA9IDQ7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs0J2hBLDQnaDAsNCdoNSw4J2gzLDMnYjExMCwyJ2IwMCw3J2gwMH0pOworCSAgY2xvY2tfbW9uaXRvcigzKkNMSzFfUEVSSU9ELDUqQ0xLMl9QRVJJT0QsNCpDTEsyX1BFUklPRCw0KkNMSzFfUEVSSU9EKTsKKworCSAgJGRpc3BsYXkoIlN0ZXAtNSwgQ1BVOiBDTE9DSzEvNCwgUlRDOiBDTE9DSzIvKDIrNCksIFVTQjogQ0xPQ0syLygyKzMpLCBXQlM6Q0xPQ0sxLygyKzMpIik7CisJICB0ZXN0X3N0ZXAgPSA1OworICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7NCdoQiw0J2gwLDQnaDYsOCdoNCwzJ2IxMTEsMidiMDAsNydoMDB9KTsKKwkgIGNsb2NrX21vbml0b3IoNCpDTEsxX1BFUklPRCw2KkNMSzJfUEVSSU9ELDUqQ0xLMl9QRVJJT0QsNSpDTEsxX1BFUklPRCk7CisKKwkgICRkaXNwbGF5KCJTdGVwLTYsIENQVTogQ0xPQ0sxLygyKzMpLCBSVEM6IENMT0NLMi8oMis1KSwgVVNCOiBDTE9DSzIvKDIrNCksIFdCUzpDTE9DSzEvKDIrMykiKTsKKwkgIHRlc3Rfc3RlcCA9IDY7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs0J2hDLDQnaDAsNCdoNyw4J2g1LDMnYjExMSwyJ2IwMCw3J2gwMH0pOworCSAgY2xvY2tfbW9uaXRvcig1KkNMSzFfUEVSSU9ELDcqQ0xLMl9QRVJJT0QsNipDTEsyX1BFUklPRCw1KkNMSzFfUEVSSU9EKTsKKworCSAgJGRpc3BsYXkoIlN0ZXAtNywgQ1BVOiBDTE9DSzEvKDIrMyksIFJUQzogQ0xPQ0syLygyKzYpLCBVU0I6IENMT0NLMi8oMis1KSwgV0JTOkNMT0NLMS8oMiszKSIpOworCSAgdGVzdF9zdGVwID0gNzsKKyAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsezQnaEQsNCdoMCw0J2g3LDgnaDYsMydiMTExLDInYjAwLDcnaDAwfSk7CisJICBjbG9ja19tb25pdG9yKDUqQ0xLMV9QRVJJT0QsOCpDTEsyX1BFUklPRCw3KkNMSzJfUEVSSU9ELDUqQ0xLMV9QRVJJT0QpOworCisJICAkZGlzcGxheSgiU3RlcC04LCBDUFU6IENMT0NLMS8oMiszKSwgUlRDOiBDTE9DSzIvKDIrNyksIFVTQjogQ0xPQ0syLygyKzYpLCBXQlM6Q0xPQ0sxLygyKzMpIik7CisJICB0ZXN0X3N0ZXAgPSA4OworICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7NCdoRSw0J2gwLDQnaDcsOCdoNywzJ2IxMTEsMidiMDAsNydoMDB9KTsKKwkgIGNsb2NrX21vbml0b3IoNSpDTEsxX1BFUklPRCw5KkNMSzJfUEVSSU9ELDgqQ0xLMl9QRVJJT0QsNSpDTEsxX1BFUklPRCk7CisKKwkgICRkaXNwbGF5KCJTdGVwLTksIENQVTogQ0xPQ0sxLygyKzMpLCBSVEM6IENMT0NLMi8oMis4KSwgVVNCOiBDTE9DSzIvKDIrNyksIFdCUzpDTE9DSzEvKDIrMykiKTsKKwkgIHRlc3Rfc3RlcCA9IDk7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs0J2hGLDQnaDAsNCdoNyw4J2g4LDMnYjExMSwyJ2IwMCw3J2gwMH0pOworCSAgY2xvY2tfbW9uaXRvcig1KkNMSzFfUEVSSU9ELDEwKkNMSzJfUEVSSU9ELDkqQ0xLMl9QRVJJT0QsNSpDTEsxX1BFUklPRCk7CisKKwkgICRkaXNwbGF5KCJTdGVwLTEwLCBDUFU6IENMT0NLMS8oMiszKSwgUlRDOiBDTE9DSzIvKDIrMTI4KSwgVVNCOiBDTE9DSzIvKDIrNyksIFdCUzpDTE9DSzEvKDIrMykiKTsKKwkgIHRlc3Rfc3RlcCA9IDEwOworICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7NCdoRiw0J2gwLDQnaDcsOCdoODAsMydiMTExLDInYjAwLDcnaDAwfSk7CisJICBjbG9ja19tb25pdG9yKDUqQ0xLMV9QRVJJT0QsMTMwKkNMSzJfUEVSSU9ELDkqQ0xLMl9QRVJJT0QsNSpDTEsxX1BFUklPRCk7CisKKwkgICRkaXNwbGF5KCJTdGVwLTEwLCBDUFU6IENMT0NLMS8oMiszKSwgUlRDOiBDTE9DSzIvKDIrMjU1KSwgVVNCOiBDTE9DSzIvKDIrNyksIFdCUzpDTE9DSzEvKDIrMykiKTsKKwkgIHRlc3Rfc3RlcCA9IDEwOworICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7NCdoRiw0J2gwLDQnaDcsOCdoRkYsMydiMTExLDInYjAwLDcnaDAwfSk7CisJICBjbG9ja19tb25pdG9yKDUqQ0xLMV9QRVJJT0QsMjU3KkNMSzJfUEVSSU9ELDkqQ0xLMl9QRVJJT0QsNSpDTEsxX1BFUklPRCk7CisKKyAgICAgICAgICRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBDaGVja2luZyB0aGUgY2hpcCBzaWduYXR1cmUgOiIpOworICAgICAgICAgLy8gUmVtb3ZlIFdiL1Bpbk11eCBSZXNldAorICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLCdoMSk7CisKKwkgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDMwMDIwMDU4LHJlYWRfZGF0YSwzMidoODI3M184MzQzKTsKKwkgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDMwMDIwMDVDLHJlYWRfZGF0YSwzMidoMTQwMl8yMDIyKTsKKwkgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDMwMDIwMDYwLHJlYWRfZGF0YSwzMidoMDAwM180MDAwKTsKKworICAgICAgZW5kCisgICAKKyAgICAgIGJlZ2luCisgICAgICByZXBlYXQgKDIwMDAwKSBAKHBvc2VkZ2UgY2xvY2spOworICAgCQkvLyAkZGlzcGxheSgiKzEwMDAgY3ljbGVzIik7CisgICAgICB0ZXN0X2ZhaWwgPSAxOworICAgICAgZW5kCisgICAgICBqb2luX2FueQorICAgICAgZGlzYWJsZSBmb3JrOyAvL2Rpc2FibGUgcGVuZGluZyBmb3JrIGFjdGl2aXR5CisKKyAgIAorICAgICAgJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisgICAgICAgICBgaWZkZWYgR0wKKyAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVBUlQgVGVzdCAoR0wpIFBhc3NlZCIpOworICAgICAgICAgYGVsc2UKKyAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVBUlQgVGVzdCAoUlRMKSBQYXNzZWQiKTsKKyAgICAgICAgIGBlbmRpZgorICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgICBgaWZkZWYgR0wKKyAgICAgICAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBVQVJUIFRlc3QgKEdMKSBGYWlsZWQiKTsKKyAgICAgICAgICBgZWxzZQorICAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVBUlQgVGVzdCAoUlRMKSBGYWlsZWQiKTsKKyAgICAgICAgICBgZW5kaWYKKyAgICAgICBlbmQKKyAgICAgICRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICMxMDAKKyAgICAgICRmaW5pc2g7CitlbmQKKworCit3aXJlIFVTRVJfVkREMVY4ID0gMSdiMTsKK3dpcmUgVlNTID0gMSdiMDsKKworCit1c2VyX3Byb2plY3Rfd3JhcHBlciB1X3RvcCgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIC52Y2NkMShVU0VSX1ZERDFWOCksCS8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgLnZzc2QxKFZTUyksCS8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgICAud2JfY2xrX2kgICAgICAgIChjbG9jayksICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAudXNlcl9jbG9jazIgICAgIChjbG9jazIpLCAgLy8gUmVhbC10aW1lIGNsb2NrCisgICAgLndiX3JzdF9pICAgICAgICAod2JfcnN0X2kpLCAgLy8gUmVndWxhciBSZXNldCBzaWduYWwKKworICAgIC53YnNfY3ljX2kgICAod2JkX2V4dF9jeWNfaSksICAvLyBzdHJvYmUvcmVxdWVzdAorICAgIC53YnNfc3RiX2kgICAod2JkX2V4dF9zdGJfaSksICAvLyBzdHJvYmUvcmVxdWVzdAorICAgIC53YnNfYWRyX2kgICAod2JkX2V4dF9hZHJfaSksICAvLyBhZGRyZXNzCisgICAgLndic193ZV9pICAgICh3YmRfZXh0X3dlX2kpLCAgLy8gd3JpdGUKKyAgICAud2JzX2RhdF9pICAgKHdiZF9leHRfZGF0X2kpLCAgLy8gZGF0YSBvdXRwdXQKKyAgICAud2JzX3NlbF9pICAgKHdiZF9leHRfc2VsX2kpLCAgLy8gYnl0ZSBlbmFibGUKKworICAgIC53YnNfZGF0X28gICAod2JkX2V4dF9kYXRfbyksICAvLyBkYXRhIGlucHV0CisgICAgLndic19hY2tfbyAgICh3YmRfZXh0X2Fja19vKSwgIC8vIGFja25vd2xlZ2VtZW50CisKKyAKKyAgICAvLyBMb2dpYyBBbmFseXplciBTaWduYWxzCisgICAgLmxhX2RhdGFfaW4gICAgICAoJzEpICwKKyAgICAubGFfZGF0YV9vdXQgICAgICgpLAorICAgIC5sYV9vZW5iICAgICAgICAgKCcwKSwKKyAKKworICAgIC8vIElPcworICAgIC5pb19pbiAgICAgICAgICAoaW9faW4pICAsCisgICAgLmlvX291dCAgICAgICAgIChpb19vdXQpICwKKyAgICAuaW9fb2ViICAgICAgICAgKGlvX29lYikgLAorCisgICAgLnVzZXJfaXJxICAgICAgICgpIAorCispOworCitgaWZuZGVmIEdMIC8vIERyaXZlIFBvd2VyIGZvciBIb2xkIEZpeCBCdWYKKyAgICAvLyBBbGwgc3RhbmRhcmQgY2VsbCBuZWVkIHBvd2VyIGhvb2stdXAgZm9yIGZ1bmN0aW9uYWxpdHkgd29yaworICAgIGluaXRpYWwgYmVnaW4KKworCisgICAgZW5kCitgZW5kaWYgICAgCisKKwordGFzayBjbG9ja19tb25pdG9yOworaW5wdXQgWzE1OjBdIGV4cF9jcHVfcGVyaW9kOworaW5wdXQgWzE1OjBdIGV4cF9ydGNfcGVyaW9kOworaW5wdXQgWzE1OjBdIGV4cF91c2JfcGVyaW9kOworaW5wdXQgWzE1OjBdIGV4cF93YnNfcGVyaW9kOworYmVnaW4KKyAgIGZvcmNlIGNsb2NrX21vbiA9IHVfdG9wLnVfd2JfaG9zdC5jcHVfY2xrOworICAgY2hlY2tfY2xvY2tfcGVyaW9kKCJDUFUgQ0xvY2siLGV4cF9jcHVfcGVyaW9kKTsKKyAgIHJlbGVhc2UgY2xvY2tfbW9uOworCisgICBmb3JjZSBjbG9ja19tb24gPSB1X3RvcC51X3diX2hvc3QucnRjX2NsazsKKyAgIGNoZWNrX2Nsb2NrX3BlcmlvZCgiUlRDIENsb2NrIixleHBfcnRjX3BlcmlvZCk7CisgICByZWxlYXNlIGNsb2NrX21vbjsKKworICAgZm9yY2UgY2xvY2tfbW9uID0gdV90b3AudV93Yl9ob3N0LnVzYl9jbGs7CisgICBjaGVja19jbG9ja19wZXJpb2QoIlVTQiBDbG9jayIsZXhwX3VzYl9wZXJpb2QpOworICAgcmVsZWFzZSBjbG9ja19tb247CisKKyAgIGZvcmNlIGNsb2NrX21vbiA9IHVfdG9wLnVfd2JfaG9zdC53YnNfY2xrX291dDsKKyAgIGNoZWNrX2Nsb2NrX3BlcmlvZCgiV0JTIENsb2NrIixleHBfd2JzX3BlcmlvZCk7CisgICByZWxlYXNlIGNsb2NrX21vbjsKK2VuZAorZW5kdGFzaworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENoZWNrIHRoZSBjbG9jayBwZXJpb2QKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGFzayBjaGVja19jbG9ja19wZXJpb2Q7CitpbnB1dCBbMTI3OjBdIGNsa19uYW1lOworaW5wdXQgWzE1OjBdIGNsa19wZXJpb2Q7IC8vIGluIE5TCit0aW1lIHByZXZfdCwgbmV4dF90LCBwZXJpb2RkOworYmVnaW4KKwkkdGltZWZvcm1hdCgtMTIsMywibnMiLDEwKTsKKyAgIHJlcGVhdCgxKSBAKHBvc2VkZ2UgY2xvY2tfbW9uKTsKKyAgIHJlcGVhdCgxKSBAKHBvc2VkZ2UgY2xvY2tfbW9uKTsKKyAgIHByZXZfdCAgPSAkcmVhbHRpbWU7CisgICByZXBlYXQoMTAwKSBAKHBvc2VkZ2UgY2xvY2tfbW9uKTsKKyAgIG5leHRfdCAgPSAkcmVhbHRpbWU7CisgICBwZXJpb2RkID0gKG5leHRfdC1wcmV2X3QpLzEwMDsKKyAgIC8vcGVyaW9kZCA9IChwZXJpb2RkKS8xZTk7CisgICBpZihjbGtfcGVyaW9kICE9IHBlcmlvZGQpIGJlZ2luCisgICAgICAgJGRpc3BsYXkoIlNUQVRVUzogRkFJTCA9PiAlcyBFeHAgUGVyaW9kOiAlZCBSeGQ6ICVkIixjbGtfbmFtZSxjbGtfcGVyaW9kLHBlcmlvZGQpOworICAgICAgIHRlc3RfZmFpbCA9IDE7CisgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICRkaXNwbGF5KCJTVEFUVVM6IFBBU1MgPT4gJXMgIFBlcmlvZDogJWQgIixjbGtfbmFtZSxjbGtfcGVyaW9kKTsKKyAgIGVuZAorZW5kCitlbmR0YXNrCisKKworCisKKworCit0YXNrIHdiX3VzZXJfY29yZV93cml0ZTsKK2lucHV0IFszMTowXSBhZGRyZXNzOworaW5wdXQgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDE7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID1kYXRhOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisgICRkaXNwbGF5KCJERUJVRyBXQiBVU0VSIEFDQ0VTUyBXUklURSBBZGRyZXNzIDogJXgsIERhdGEgOiAleCIsYWRkcmVzcyxkYXRhKTsKKyAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworZW5kCitlbmR0YXNrCisKK3Rhc2sgIHdiX3VzZXJfY29yZV9yZWFkOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitvdXRwdXQgWzMxOjBdIGRhdGE7CityZWcgICAgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0nMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoRjsgIC8vIGJ5dGUgZW5hYmxlCisgIHdiZF9leHRfY3ljX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdhaXQod2JkX2V4dF9hY2tfbyA9PSAxKTsKKyAgZGF0YSAgPSB3YmRfZXh0X2RhdF9vOyAgCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgJGRpc3BsYXkoIkRFQlVHIFdCIFVTRVIgQUNDRVNTIFJFQUQgQWRkcmVzcyA6ICV4LCBEYXRhIDogJXgiLGFkZHJlc3MsZGF0YSk7CisgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKK2VuZAorZW5kdGFzaworCit0YXNrICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjazsKK2lucHV0IFszMTowXSBhZGRyZXNzOworb3V0cHV0IFszMTowXSBkYXRhOworaW5wdXQgWzMxOjBdIGNtcF9kYXRhOworcmVnICAgIFszMTowXSBkYXRhOworYmVnaW4KKyAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAjMTsKKyAgd2JkX2V4dF9hZHJfaSA9YWRkcmVzczsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9JzA7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naEY7ICAvLyBieXRlIGVuYWJsZQorICB3YmRfZXh0X2N5Y19pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YWl0KHdiZF9leHRfYWNrX28gPT0gMSk7CisgIGRhdGEgID0gd2JkX2V4dF9kYXRfbzsgIAorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisgIGlmKGRhdGEgIT09IGNtcF9kYXRhKSBiZWdpbgorICAgICAkZGlzcGxheSgiRVJST1IgOiBXQiBVU0VSIEFDQ0VTUyBSRUFEICBBZGRyZXNzIDogMHgleCwgRXhkOiAweCV4IFJ4ZDogMHgleCAiLGFkZHJlc3MsY21wX2RhdGEsZGF0YSk7CisgICAgIHRlc3RfZmFpbCA9IDE7CisgIGVuZCBlbHNlIGJlZ2luCisgICAgICRkaXNwbGF5KCJTVEFUVVM6IFdCIFVTRVIgQUNDRVNTIFJFQUQgIEFkZHJlc3MgOiAweCV4LCBEYXRhIDogMHgleCIsYWRkcmVzcyxkYXRhKTsKKyAgZW5kCisgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKK2VuZAorZW5kdGFzaworCitgaWZkZWYgR0wKKword2lyZSAgICAgICAgd2JkX3NwaV9zdGJfaSAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9zdGJfaTsKK3dpcmUgICAgICAgIHdiZF9zcGlfYWNrX28gICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfYWNrX287Cit3aXJlICAgICAgICB3YmRfc3BpX3dlX2kgICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3dlX2k7Cit3aXJlIFszMTowXSB3YmRfc3BpX2Fkcl9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX2Fkcl9pOword2lyZSBbMzE6MF0gd2JkX3NwaV9kYXRfaSAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9kYXRfaTsKK3dpcmUgWzMxOjBdIHdiZF9zcGlfZGF0X28gICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfZGF0X287Cit3aXJlIFszOjBdICB3YmRfc3BpX3NlbF9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3NlbF9pOworCit3aXJlICAgICAgICB3YmRfc2RyYW1fc3RiX2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfc3RiX2k7Cit3aXJlICAgICAgICB3YmRfc2RyYW1fYWNrX28gPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfYWNrX287Cit3aXJlICAgICAgICB3YmRfc2RyYW1fd2VfaSAgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfd2VfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9hZHJfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9hZGRyX2k7Cit3aXJlIFszMTowXSB3YmRfc2RyYW1fZGF0X2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfZGF0X2k7Cit3aXJlIFszMTowXSB3YmRfc2RyYW1fZGF0X28gPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfZGF0X287Cit3aXJlIFszOjBdICB3YmRfc2RyYW1fc2VsX2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfc2VsX2k7CisKK3dpcmUgICAgICAgIHdiZF91YXJ0X3N0Yl9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19jczsKK3dpcmUgICAgICAgIHdiZF91YXJ0X2Fja19vICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19hY2s7Cit3aXJlICAgICAgICB3YmRfdWFydF93ZV9pICAgPSB1X3RvcC51X3VhcnRfaTJjX3VzYi5yZWdfd3I7Cit3aXJlIFs3OjBdICB3YmRfdWFydF9hZHJfaSAgPSB1X3RvcC51X3VhcnRfaTJjX3VzYi5yZWdfYWRkcjsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2RhdF9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ193ZGF0YTsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2RhdF9vICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19yZGF0YTsKK3dpcmUgICAgICAgIHdiZF91YXJ0X3NlbF9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19iZTsKKworYGVuZGlmCisKKy8qKgorYGlmZGVmIEdMCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSSVNDIElNRU0gYW1kIERNRU0gTW9uaXRvcmluZyBUQVNLCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BkZWZpbmUgUklTQ19DT1JFICB1c2VyX3VhcnRfdGIudV90b3AudV9jb3JlLnVfcmlzY3ZfdG9wCisKK2Fsd2F5c0AocG9zZWRnZSBgUklTQ19DT1JFLndiX2NsaykgYmVnaW4KKyAgICBpZihgUklTQ19DT1JFLndiZF9pbWVtX2Fja19pKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBJTUVNIEFERFJFU1M6ICV4IFJlYWQgRGF0YSA6ICV4IiwgYFJJU0NfQ09SRS53YmRfaW1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9pbWVtX2RhdF9pKTsKKyAgICBpZihgUklTQ19DT1JFLndiZF9kbWVtX2Fja19pICYmIGBSSVNDX0NPUkUud2JkX2RtZW1fd2VfbykKKyAgICAgICAgICAkZGlzcGxheSgiUklTQ1YtREVCVUcgPT4gRE1FTSBBRERSRVNTOiAleCBXcml0ZSBEYXRhOiAleCBSZXNvbnNlOiAleCIsIGBSSVNDX0NPUkUud2JkX2RtZW1fYWRyX28sYFJJU0NfQ09SRS53YmRfZG1lbV9kYXRfbyk7CisgICAgaWYoYFJJU0NfQ09SRS53YmRfZG1lbV9hY2tfaSAmJiAhYFJJU0NfQ09SRS53YmRfZG1lbV93ZV9vKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBETUVNIEFERFJFU1M6ICV4IFJFQUQgRGF0YSA6ICV4IFJlc29uc2U6ICV4IiwgYFJJU0NfQ09SRS53YmRfZG1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9kbWVtX2RhdF9pKTsKK2VuZAorCitgZW5kaWYKKyoqLworZW5kbW9kdWxlCitgZGVmYXVsdF9uZXR0eXBlIHdpcmUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9pMmNtL01ha2VmaWxlIGIvdmVyaWxvZy9kdi91c2VyX2kyY20vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc4OGVkOAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9pMmNtL01ha2VmaWxlCkBAIC0wLDAgKzEsMTExIEBACisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKKyMjIENhcmF2ZWwgUG9pbnRlcnMKK0NBUkFWRUxfUk9PVCA/PSAuLi8uLi8uLi9jYXJhdmVsCitDQVJBVkVMX1BBVEggPz0gJChDQVJBVkVMX1JPT1QpCitDQVJBVkVMX0ZJUk1XQVJFX1BBVEggPSAkKENBUkFWRUxfUEFUSCkvdmVyaWxvZy9kdi9jYXJhdmVsCitDQVJBVkVMX1ZFUklMT0dfUEFUSCAgPSAkKENBUkFWRUxfUEFUSCkvdmVyaWxvZworQ0FSQVZFTF9SVExfUEFUSCA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL3J0bAorQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMgPSAkKENBUkFWRUxfVkVSSUxPR19QQVRIKS9kdi9jYXJhdmVsCisKKworIyMgVXNlciBQcm9qZWN0IFBvaW50ZXJzCitVUFJKX1ZFUklMT0dfUEFUSCA/PSAuLi8uLi8uLi92ZXJpbG9nCitVUFJKX1JUTF9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvcnRsCitVUFJKX0dMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9nbAorVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMgPSAuLi9tb2RlbAorVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMgPSAuLi9hZ2VudHMKK1VQUkpfSU5DTFVERV9QQVRIMSA9ICQoVVBSSl9SVExfUEFUSCkveWlmaXZlL3ljcjFjL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEgyID0gJChVUFJKX1JUTF9QQVRIKS9zZHJhbV9jdHJsL3NyYy9kZWZzCitVUFJKX0lOQ0xVREVfUEFUSDMgPSAkKFVQUkpfUlRMX1BBVEgpL2kyY20vc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDQgPSAkKFVQUkpfUlRMX1BBVEgpL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRINSA9ICQoVVBSSl9SVExfUEFUSCkvbWJpc3QvaW5jbHVkZQorCisjIyBZSUZJVkUgRklSTVdBUkUKK1lJRklWRV9GSVJNV0FSRV9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvZHYvZmlybXdhcmUKK0dDQzY0X1BSRUZJWD89cmlzY3Y2NC11bmtub3duLWVsZgorCisjIyBSSVNDViBHQ0MgCitHQ0NfUEFUSD89L2VmL2FwcHMvYmluCitHQ0NfUFJFRklYPz1yaXNjdjMyLXVua25vd24tZWxmCitQREtfUEFUSD89L2VmL3RlY2gvU1cvc2t5MTMwQQorCisjIyBTaW11bGF0aW9uIG1vZGU6IFJUTC9HTAorU0lNPz1SVEwKK0RVTVA/PU9GRgorCisuU1VGRklYRVM6CisKK1BBVFRFUk4gPSB1c2VyX2kyY20KKworYWxsOiAgJHtQQVRURVJOOj0udmNkfQorCitoZXg6ICAke1BBVFRFUk46PS5oZXh9CisKK3Z2cDogICR7UEFUVEVSTjo9LnZ2cH0KKworJS52dnA6ICVfdGIudgorCSR7R0NDNjRfUFJFRklYfS1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1jIC1JLi8gLUkkKFlJRklWRV9GSVJNV0FSRV9QQVRIKSAgdXNlcl91YXJ0LmMgLW8gdXNlcl91YXJ0Lm8KKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIC1EX19SVkNfRVhUIC1zdGF0aWMgLXN0ZD1nbnU5OSAtZm5vLWNvbW1vbiAtZm5vLWJ1aWx0aW4tcHJpbnRmIC1EVENNPTEgLVdhLC1tYXJjaD1ydjMyaW1jIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1ERkxBR1NfU1RSPVwiIi1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIlwiICAtRF9fQVNTRU1CTFlfXz0xIC1jIC1JLi8gLUkkKFlJRklWRV9GSVJNV0FSRV9QQVRIKSAgJChZSUZJVkVfRklSTVdBUkVfUEFUSCkvY3J0X3RjbS5TIC1vIGNydF90Y20ubworCSR7R0NDNjRfUFJFRklYfS1nY2MgLW8gdXNlcl91YXJ0LmVsZiAtVCAkKFlJRklWRV9GSVJNV0FSRV9QQVRIKS9saW5rX3RjbS5sZCB1c2VyX3VhcnQubyBjcnRfdGNtLm8gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyCisJJHtHQ0M2NF9QUkVGSVh9LW9iamNvcHkgLU8gdmVyaWxvZyB1c2VyX3VhcnQuZWxmIHVzZXJfdWFydC5oZXgKKwkke0dDQzY0X1BSRUZJWH0tb2JqZHVtcCAtRCB1c2VyX3VhcnQuZWxmID4gdXNlcl91YXJ0LmR1bXAKKwlybSBjcnRfdGNtLm8gdXNlcl91YXJ0Lm8KK2lmZXEgKCQoU0lNKSxSVEwpCisgICBpZmVxICgkKERVTVApLE9GRikKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfQUdFTlRTKSAgICBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDEpICAgIC1JICQoVVBSSl9JTkNMVURFX1BBVEgyKSAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMykgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEg0KSAtSSAkKFVQUkpfSU5DTFVERV9QQVRINSkgXAorCSQ8IC1vICRAIAorICAgIGVsc2UgIAorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtRFdGRFVNUCAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICBlbmRpZgorZWxzZSAgCisJaXZlcmlsb2cgLWcyMDA1LXN2IC1ERlVOQ1RJT05BTCAtRFNJTSAtREdMIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIC1JICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKFVQUkpfR0xfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwkkPCAtbyAkQCAKK2VuZGlmCisKKyUudmNkOiAlLnZ2cAorCXZ2cCAkPAorCislLmVsZjogJS5jICQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zZWN0aW9ucy5sZHMgJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3N0YXJ0LnMKKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1JICQoQ0FSQVZFTF9QQVRIKSAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtV2wsLUJzdGF0aWMsLVQsJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3NlY3Rpb25zLmxkcywtLXN0cmlwLWRlYnVnIC1mZnJlZXN0YW5kaW5nIC1ub3N0ZGxpYiAtbyAkQCAkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc3RhcnQucyAkPAorCislLmhleDogCisJZWNobyBAIlRoaXMgaXMgdXNlciBib290IHRlc3QsIG5vdGluZyB0byBjb21waWxlIHRoZSBtYW5nbWVudCBjb3JlIGNvZGUiCisKKyUuYmluOiAlLmVsZgorCSR7R0NDNjRfUFJFRklYfS1vYmpjb3B5IC1PIGJpbmFyeSAkPCAvZGV2L3N0ZG91dCB8IHRhaWwgLWMgKzEwNDg1NzcgPiAkQAorCisjIC0tLS0gQ2xlYW4gLS0tLQorCitjbGVhbjoKKwlybSAtZiAqLmVsZiAqLmhleCAqLmJpbiAqLnZ2cCAqLnZjZCAqLmxvZyAqLmR1bXAKKworLlBIT05ZOiBjbGVhbiBoZXggYWxsCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfaTJjbS9ydW5faXZlcmlsb2cgYi92ZXJpbG9nL2R2L3VzZXJfaTJjbS9ydW5faXZlcmlsb2cKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2FlMWZmZAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9pMmNtL3J1bl9pdmVyaWxvZwpAQCAtMCwwICsxLDM3IEBACisjIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworIyAvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorIyAvLyAKKyMgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIC8vCisjIC8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIC8vCisjIC8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisjIC8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorIyAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworcmlzY3Y2NC11bmtub3duLWVsZi1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1jIC1JLi8gLUkuLi8uLi9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbiAgdXNlcl91YXJ0LmMgLW8gdXNlcl91YXJ0Lm8KKworcmlzY3Y2NC11bmtub3duLWVsZi1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1EX19BU1NFTUJMWV9fPTEgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uLyAgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vY3J0X3RjbS5TIC1vIGNydF90Y20ubworCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtbyB1c2VyX3VhcnQuZWxmIC1UIC4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uL2xpbmtfdGNtLmxkIHVzZXJfdWFydC5vIGNydF90Y20ubyAtbm9zdGFydGZpbGVzIC1ub3N0ZGxpYiAtbGMgLWxnY2MgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIKKworcmlzY3Y2NC11bmtub3duLWVsZi1vYmpjb3B5IC1PIHZlcmlsb2cgdXNlcl91YXJ0LmVsZiB1c2VyX3VhcnQuaGV4CisKK3Jpc2N2NjQtdW5rbm93bi1lbGYtb2JqZHVtcCAtRCB1c2VyX3VhcnQuZWxmID4gdXNlcl91YXJ0LmR1bXAKKworcm0gY3J0X3RjbS5vIHVzZXJfdWFydC5vCisKKyNpdmVyaWxvZyB3aXRoIHdhdmVmb3JtIGR1bXAKK2l2ZXJpbG9nIC1nMjAwNS1zdiAtREZVTkNUSU9OQUwgLURTSU0gLUkgJFBES19QQVRIIC1JICAuLi8uLi8uLi9jYXJhdmVsL3Zlcmlsb2cvcnRsICAtSSAuLi8gLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwgLUkgLi4vIC1JIC4uLy4uLy4uL3Zlcmlsb2cgLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2luY2x1ZGVzICAgLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvZGVmcyAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9pMmNtL3NyYy9pbmNsdWRlcyAtSSAkQ0FSQVZFTF9ST09UL3Zlcmlsb2cvZHYvY2FyYXZlbCAtSSAuLi9tb2RlbCAtSSAuLi9hZ2VudHMgdXNlcl9pMmNtX3RiLnYgLW8gdXNlcl9pMmNtX3RiLnZ2cAorCisKKwordnZwIHVzZXJfaTJjbV90Yi52dnAgfCB0ZWUgdGVzdC5sb2cKKworXHJtIC1yZiB1c2VyX2kyY21fdGIudnZwCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfaTJjbS91c2VyX2kyY21fdGIudiBiL3Zlcmlsb2cvZHYvdXNlcl9pMmNtL3VzZXJfaTJjbV90Yi52Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNjc3NGQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfaTJjbS91c2VyX2kyY21fdGIudgpAQCAtMCwwICsxLDU1MiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogIDIwMjEgLCBEaW5lc2ggQW5uYXl5YQorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogTW9kaWZpZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFN0YW5kYWxvbmUgVXNlciB2YWxpZGF0aW9uIFRlc3QgYmVuY2ggICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICBUaGlzIGlzIGEgc3RhbmRhbG9uZSB0ZXN0IGJlbmNoIHRvIHZhbGlkYXRlIHRoZSAgICAgICAgICAgIC8vLy8KKy8vLy8gICBpMmMgTWFzdGVyIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMTZ0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYGRlZmF1bHRfbmV0dHlwZSB3aXJlCisKK2B0aW1lc2NhbGUgMSBucyAvIDEgbnMKKworYGluY2x1ZGUgInMyNWZsMjU2cy5zdiIKK2BpbmNsdWRlICJ1cHJqX25ldGxpc3RzLnYiCitgaW5jbHVkZSAibXQ0OGxjOG04YTIudiIKK2BpbmNsdWRlICJpMmNfc2xhdmVfbW9kZWwudiIKKworCitgZGVmaW5lIEFERFJfU1BBQ0VfVUFSVCAgMzInaDMwMDFfMDAwMAorYGRlZmluZSBBRERSX1NQQUNFX0kyQ00gIDMyJ2gzMDAxXzAwNDAKK2BkZWZpbmUgQUREUl9TUEFDRV9QSU5NVVggIDMyJ2gzMDAyXzAwMDAKKworCittb2R1bGUgdGJfdG9wOworCityZWcgICAgICAgICAgICBjbG9jayAgICAgICAgIDsKK3JlZyAgICAgICAgICAgIHdiX3JzdF9pICAgICAgOworcmVnICAgICAgICAgICAgcG93ZXIxLCBwb3dlcjI7CityZWcgICAgICAgICAgICBwb3dlcjMsIHBvd2VyNDsKKworcmVnICAgICAgICAgICAgd2JkX2V4dF9jeWNfaTsgIC8vIHN0cm9iZS9yZXF1ZXN0CityZWcgICAgICAgICAgICB3YmRfZXh0X3N0Yl9pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKK3JlZyBbMzE6MF0gICAgIHdiZF9leHRfYWRyX2k7ICAvLyBhZGRyZXNzCityZWcgICAgICAgICAgICB3YmRfZXh0X3dlX2k7ICAvLyB3cml0ZQorcmVnIFszMTowXSAgICAgd2JkX2V4dF9kYXRfaTsgIC8vIGRhdGEgb3V0cHV0CityZWcgWzM6MF0gICAgICB3YmRfZXh0X3NlbF9pOyAgLy8gYnl0ZSBlbmFibGUKKword2lyZSBbMzE6MF0gICAgd2JkX2V4dF9kYXRfbzsgIC8vIGRhdGEgaW5wdXQKK3dpcmUgICAgICAgICAgIHdiZF9leHRfYWNrX287ICAvLyBhY2tub3dsZWdlbWVudAord2lyZSAgICAgICAgICAgd2JkX2V4dF9lcnJfbzsgIC8vIGVycm9yCisKKy8vIFVzZXIgSS9PCit3aXJlIFszNzowXSAgICBpb19vZWIgICAgICAgIDsKK3dpcmUgWzM3OjBdICAgIGlvX291dCAgICAgICAgOword2lyZSBbMzc6MF0gICAgaW9faW4gICAgICAgICA7CisKK3dpcmUgWzM3OjBdICAgIG1wcmpfaW8gICAgICAgOword2lyZSBbNzowXSAgICAgbXByal9pb18wICAgICA7CityZWcgICAgICAgICAgICB0ZXN0X2ZhaWwgICAgIDsKK3JlZyBbMzE6MF0gICAgIHJlYWRfZGF0YSAgICAgOworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBVYXJ0IENvbmZpZ3VyYXRpb24KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitpbnRlZ2VyIGksajsKKworCS8vIEV4dGVybmFsIGNsb2NrIGlzIHVzZWQgYnkgZGVmYXVsdC4gIE1ha2UgdGhpcyBhcnRpZmljaWFsbHkgZmFzdCBmb3IgdGhlCisJLy8gc2ltdWxhdGlvbi4gIE5vcm1hbGx5IHRoaXMgd291bGQgYmUgYSBzbG93IGNsb2NrIGFuZCB0aGUgZGlnaXRhbCBQTEwKKwkvLyB3b3VsZCBiZSB0aGUgZmFzdCBjbG9jay4KKworCWFsd2F5cyAjMTIuNSBjbG9jayA8PSAoY2xvY2sgPT09IDEnYjApOworCisJaW5pdGlhbCBiZWdpbgorCQljbG9jayA9IDA7CisgICAgICAgICAgICAgICAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICAgICAgICAgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICAgICAgICAgICAgICAgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKwllbmQKKworCWBpZmRlZiBXRkRVTVAKKwkgICBpbml0aWFsIGJlZ2luCisJICAgCSRkdW1wZmlsZSgidGJfdG9wLnZjZCIpOworCSAgIAkkZHVtcHZhcnMoMCwgdGJfdG9wKTsKKwkgICBlbmQKKyAgICAgICBgZW5kaWYKKworCWluaXRpYWwgYmVnaW4KKwkJd2JfcnN0X2kgPD0gMSdiMTsKKwkJIzEwMDsKKwkJd2JfcnN0X2kgPD0gMSdiMDsJICAgIAkvLyBSZWxlYXNlIHJlc2V0CisJZW5kCitpbml0aWFsCitiZWdpbgorICAgdGVzdF9mYWlsID0gMDsKKworICAgIzIwMDsgLy8gV2FpdCBmb3IgcmVzZXQgcmVtb3ZhbAorICAgcmVwZWF0ICgxMCkgQChwb3NlZGdlIGNsb2NrKTsKKyAgICRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgJGRpc3BsYXkoIiAgIFRlc3RpbmcgSTJDTSBSZWFkL1dyaXRlIEFjY2VzcyAgICAgICAgICAgIik7CisgICAkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgIAorCisgICByZXBlYXQgKDEwKSBAKHBvc2VkZ2UgY2xvY2spOworICAgIzE7CisgICAvLyBFbmFibGUgSTJNIEJsb2NrICYgV0IgUmVzZXQgYW5kIEVuYWJsZSBJMkNNIE11eCBTZWxlY3QKKyAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCwnaEExKTsKKworICAgLy8gRW5hYmxlIEkyQyBNdWx0aSBGdW5jdGlvbmFsIFBvcnRzCisgICB3Yl91c2VyX2NvcmVfd3JpdGUoYEFERFJfU1BBQ0VfUElOTVVYKydoMDAzOCwnaDIwMCk7CisKKyAgIHJlcGVhdCAoMTAwKSBAKHBvc2VkZ2UgY2xvY2spOyAgCisKKyAgICBAKHBvc2VkZ2UgIGNsb2NrKTsKKyAgICAkZGlzcGxheSgiLS0tLS0tLS0tLSBJbml0aWFsaXplIEkyQyBNYXN0ZXIgLS0tLS0tLS0tLSIpOyAKKworICAgIC8vV3JpcmUgUHJlc2NhbGUgcmVnaXN0ZXJzCisgICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9JMkNNKyg4J2gwPDwyKSw4J2hDNyk7ICAKKyAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDE8PDIpLDgnaDAwKTsgIAorICAgIC8vIENvcmUgRW5hYmxlCisgICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9JMkNNKyg4J2gyPDwyKSw4J2g4MCk7ICAKKyAgICAKKyAgICAvLyBXcml0aW5nIERhdGEKKworICAgICRkaXNwbGF5KCItLS0tLS0tLS0tIFdyaXRpbmcgRGF0YSAtLS0tLS0tLS0tIik7IAorICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9JMkNNKyg4J2gzPDwyKSw4J2gyMCk7IC8vIFNsYXZlIEFkZHIgKyBXUiAgCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDQ8PDIpLDgnaDkwKTsgIAorICAgIHJlYWRfZGF0YVsxXSA9IDEnYjE7CisgICAgd2hpbGUocmVhZF9kYXRhWzFdPT0xKQorICAgICAgd2JfdXNlcl9jb3JlX3JlYWQoYEFERFJfU1BBQ0VfSTJDTSsoOCdoNDw8MikscmVhZF9kYXRhKTsgIAorICAgICAKKyAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYEFERFJfU1BBQ0VfSTJDTSsoOCdoMzw8MiksOCdoNjYpOyAgCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDQ8PDIpLDgnaDEwKTsgIAorCisgICAgcmVhZF9kYXRhWzFdID0gMSdiMTsKKyAgICB3aGlsZShyZWFkX2RhdGFbMV09PTEpCisgICAgICB3Yl91c2VyX2NvcmVfcmVhZChgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSxyZWFkX2RhdGEpOyAgCisgICAKKyAgIC8qIEJ5dGUxOiAxMiAqLyAKKyAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYEFERFJfU1BBQ0VfSTJDTSsoOCdoMzw8MiksOCdoMTIpOyAgCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDQ8PDIpLDgnaDEwKTsgLy8gTm8gU3RvcCArIFdyaXRlICAKKworICAgIHJlYWRfZGF0YVsxXSA9IDEnYjE7CisgICAgd2hpbGUocmVhZF9kYXRhWzFdPT0xKQorICAgICAgd2JfdXNlcl9jb3JlX3JlYWQoYEFERFJfU1BBQ0VfSTJDTSsoOCdoNDw8MikscmVhZF9kYXRhKTsgIAorICAgCisgICAvKiBCeXRlMTogMzQgKi8gCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDM8PDIpLDgnaDM0KTsgIAorICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSw4J2gxMCk7IC8vIE5vIFN0b3AgKyBXcml0ZSAKKworICAgIHJlYWRfZGF0YVsxXSA9IDEnYjE7CisgICAgd2hpbGUocmVhZF9kYXRhWzFdPT0xKQorICAgICAgd2JfdXNlcl9jb3JlX3JlYWQoYEFERFJfU1BBQ0VfSTJDTSsoOCdoNDw8MikscmVhZF9kYXRhKTsgIAorCisgICAvKiBCeXRlMTogNTYgKi8gCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDM8PDIpLDgnaDU2KTsgIAorICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSw4J2gxMCk7IC8vIE5vIFN0b3AgKyBXcml0ZSAKKworICAgIHJlYWRfZGF0YVsxXSA9IDEnYjE7CisgICAgd2hpbGUocmVhZF9kYXRhWzFdPT0xKQorICAgICAgd2JfdXNlcl9jb3JlX3JlYWQoYEFERFJfU1BBQ0VfSTJDTSsoOCdoNDw8MikscmVhZF9kYXRhKTsgIAorCisgICAvKiBCeXRlMTogNzggKi8gCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDM8PDIpLDgnaDc4KTsgIAorICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSw4J2g1MCk7IC8vIFN0b3AgKyBXcml0ZSAKKworICAgIHJlYWRfZGF0YVsxXSA9IDEnYjE7CisgICAgd2hpbGUocmVhZF9kYXRhWzFdPT0xKQorICAgICAgd2JfdXNlcl9jb3JlX3JlYWQoYEFERFJfU1BBQ0VfSTJDTSsoOCdoNDw8MikscmVhZF9kYXRhKTsgIAorCisgICAgLy9SZWFkaW5nIERhdGEKKyAgICAKKyAgICAvL1dyaXJlIEFkZHJlc3MKKyAgICAkZGlzcGxheSgiLS0tLS0tLS0tLSBXcml0aW5nIERhdGEgLS0tLS0tLS0tLSIpOyAKKyAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYEFERFJfU1BBQ0VfSTJDTSsoOCdoMzw8MiksOCdoMjApOyAgCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDQ8PDIpLDgnaDkwKTsgIAorICAgIHJlYWRfZGF0YVsxXSA9IDEnYjE7CisgICAgd2hpbGUocmVhZF9kYXRhWzFdPT0xKQorICAgICAgd2JfdXNlcl9jb3JlX3JlYWQoYEFERFJfU1BBQ0VfSTJDTSsoOCdoNDw8MikscmVhZF9kYXRhKTsgIAorICAgICAKKyAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYEFERFJfU1BBQ0VfSTJDTSsoOCdoMzw8MiksOCdoNjYpOyAgCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDQ8PDIpLDgnaDUwKTsgIAorCisgICAgcmVhZF9kYXRhWzFdID0gMSdiMTsKKyAgICB3aGlsZShyZWFkX2RhdGFbMV09PTEpCisgICAgICB3Yl91c2VyX2NvcmVfcmVhZChgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSxyZWFkX2RhdGEpOyAgCisKKyAgICAvL0dlbmVyYXRlIFJlYWQKKyAgICAkZGlzcGxheSgiLS0tLS0tLS0tLSBXcml0aW5nIERhdGEgLS0tLS0tLS0tLSIpOyAKKyAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYEFERFJfU1BBQ0VfSTJDTSsoOCdoMzw8MiksOCdoMjEpOyAvLyBTbGF2ZSBBZGRyICsgUkQgIAorICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSw4J2g5MCk7ICAKKyAgICByZWFkX2RhdGFbMV0gPSAxJ2IxOworICAgIHdoaWxlKHJlYWRfZGF0YVsxXT09MSkKKyAgICAgIHdiX3VzZXJfY29yZV9yZWFkKGBBRERSX1NQQUNFX0kyQ00rKDgnaDQ8PDIpLHJlYWRfZGF0YSk7ICAKKworICAgIC8qIEJZVEUtMSA6IDB4MTIgICovIAorICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSw4J2gyMCk7ICAvLyBSRCArIEFDSworCisgICAgcmVhZF9kYXRhWzFdID0gMSdiMTsKKyAgICB3aGlsZShyZWFkX2RhdGFbMV09PTEpCisgICAgICB3Yl91c2VyX2NvcmVfcmVhZChgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSxyZWFkX2RhdGEpOyAgCisKKyAgICAvL0NvbXBhcmUgcmVjZWl2ZWQgZGF0YQorICAgIHdiX3VzZXJfY29yZV9yZWFkX2NtcChgQUREUl9TUEFDRV9JMkNNKyg4J2gzPDwyKSw4J2gxMik7ICAKKyAgICAgCisgICAgLyogQllURS0yIDogMHgzNCAgKi8gCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDQ8PDIpLDgnaDIwKTsgIC8vIFJEICsgQUNLCisKKyAgICByZWFkX2RhdGFbMV0gPSAxJ2IxOworICAgIHdoaWxlKHJlYWRfZGF0YVsxXT09MSkKKyAgICAgIHdiX3VzZXJfY29yZV9yZWFkKGBBRERSX1NQQUNFX0kyQ00rKDgnaDQ8PDIpLHJlYWRfZGF0YSk7ICAKKworICAgIC8vQ29tcGFyZSByZWNlaXZlZCBkYXRhCisgICAgd2JfdXNlcl9jb3JlX3JlYWRfY21wKGBBRERSX1NQQUNFX0kyQ00rKDgnaDM8PDIpLDgnaDM0KTsgIAorCisgICAgLyogQllURS0zIDogMHg1NiAgKi8gCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDQgPDwyKSw4J2gyMCk7ICAvLyBSRCArIEFDSworCisgICAgcmVhZF9kYXRhWzFdID0gMSdiMTsKKyAgICB3aGlsZShyZWFkX2RhdGFbMV09PTEpCisgICAgICB3Yl91c2VyX2NvcmVfcmVhZChgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSxyZWFkX2RhdGEpOyAgCisKKyAgICAvL0NvbXBhcmUgcmVjZWl2ZWQgZGF0YQorICAgIHdiX3VzZXJfY29yZV9yZWFkX2NtcChgQUREUl9TUEFDRV9JMkNNKyg4J2gzPDwyKSw4J2g1Nik7ICAKKworICAgIC8qIEJZVEUtNCA6IDB4NzggICovIAorICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSw4J2g2OCk7ICAvLyBTVE9QICsgUkQgKyBOQUNLIAorCisgICAgcmVhZF9kYXRhWzFdID0gMSdiMTsKKyAgICB3aGlsZShyZWFkX2RhdGFbMV09PTEpCisgICAgICB3Yl91c2VyX2NvcmVfcmVhZChgQUREUl9TUEFDRV9JMkNNKyg4J2g0IDw8MikscmVhZF9kYXRhKTsgIAorCisgICAgLy9Db21wYXJlIHJlY2VpdmVkIGRhdGEKKyAgICB3Yl91c2VyX2NvcmVfcmVhZF9jbXAoYEFERFJfU1BBQ0VfSTJDTSsoOCdoMyA8PDIpLDgnaDc4KTsgIAorCisgICAgcmVwZWF0KDEwMClAKHBvc2VkZ2UgY2xvY2spOworCisKKworICAgICAkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgIGlmKHRlc3RfZmFpbCA9PSAwKSBiZWdpbgorICAgICAgICBgaWZkZWYgR0wKKyAgICAgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgSTJNIFRlc3QgKEdMKSBQYXNzZWQiKTsKKyAgICAgICAgYGVsc2UKKyAgICAgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgSTJNIFRlc3QgKFJUTCkgUGFzc2VkIik7CisgICAgICAgIGBlbmRpZgorICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgYGlmZGVmIEdMCisgICAgICAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBJMk0gVGVzdCAoR0wpIEZhaWxlZCIpOworICAgICAgICAgYGVsc2UKKyAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIEkyTSBUZXN0IChSVEwpIEZhaWxlZCIpOworICAgICAgICAgYGVuZGlmCisgICAgICBlbmQKKyAgICAgJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAjMTAwCisgICAgICRmaW5pc2g7CitlbmQKKworCit3aXJlIFVTRVJfVkREMVY4ID0gMSdiMTsKK3dpcmUgVlNTID0gMSdiMDsKKworCit1c2VyX3Byb2plY3Rfd3JhcHBlciB1X3RvcCgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIC52Y2NkMShVU0VSX1ZERDFWOCksCS8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgLnZzc2QxKFZTUyksCS8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgICAud2JfY2xrX2kgICAgICAgIChjbG9jayksICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAudXNlcl9jbG9jazIgICAgICgxJ2IxKSwgIC8vIFJlYWwtdGltZSBjbG9jaworICAgIC53Yl9yc3RfaSAgICAgICAgKHdiX3JzdF9pKSwgIC8vIFJlZ3VsYXIgUmVzZXQgc2lnbmFsCisKKyAgICAud2JzX2N5Y19pICAgKHdiZF9leHRfY3ljX2kpLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAud2JzX3N0Yl9pICAgKHdiZF9leHRfc3RiX2kpLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAud2JzX2Fkcl9pICAgKHdiZF9leHRfYWRyX2kpLCAgLy8gYWRkcmVzcworICAgIC53YnNfd2VfaSAgICAod2JkX2V4dF93ZV9pKSwgIC8vIHdyaXRlCisgICAgLndic19kYXRfaSAgICh3YmRfZXh0X2RhdF9pKSwgIC8vIGRhdGEgb3V0cHV0CisgICAgLndic19zZWxfaSAgICh3YmRfZXh0X3NlbF9pKSwgIC8vIGJ5dGUgZW5hYmxlCisKKyAgICAud2JzX2RhdF9vICAgKHdiZF9leHRfZGF0X28pLCAgLy8gZGF0YSBpbnB1dAorICAgIC53YnNfYWNrX28gICAod2JkX2V4dF9hY2tfbyksICAvLyBhY2tub3dsZWdlbWVudAorCisgCisgICAgLy8gTG9naWMgQW5hbHl6ZXIgU2lnbmFscworICAgIC5sYV9kYXRhX2luICAgICAgKCcxKSAsCisgICAgLmxhX2RhdGFfb3V0ICAgICAoKSwKKyAgICAubGFfb2VuYiAgICAgICAgICgnMCksCisgCisKKyAgICAvLyBJT3MKKyAgICAuaW9faW4gICAgICAgICAgKGlvX2luKSAgLAorICAgIC5pb19vdXQgICAgICAgICAoaW9fb3V0KSAsCisgICAgLmlvX29lYiAgICAgICAgIChpb19vZWIpICwKKworICAgIC51c2VyX2lycSAgICAgICAoKSAKKworKTsKKworYGlmbmRlZiBHTCAvLyBEcml2ZSBQb3dlciBmb3IgSG9sZCBGaXggQnVmCisgICAgLy8gQWxsIHN0YW5kYXJkIGNlbGwgbmVlZCBwb3dlciBob29rLXVwIGZvciBmdW5jdGlvbmFsaXR5IHdvcmsKKyAgICBpbml0aWFsIGJlZ2luCisKKyAgICBlbmQKK2BlbmRpZiAgICAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgSW50ZWdyYXRlIHRoZSBTZXJpYWwgZmxhc2ggd2l0aCBxdXJkIHN1cHBvcnQgdG8KKy8vICB1c2VyIGNvcmUgdXNpbmcgdGhlIGdwaW8gcGFkcworLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgd2lyZSBmbGFzaF9jbGsgPSBpb19vdXRbMjRdOworICAgd2lyZSBmbGFzaF9jc2IgPSBpb19vdXRbMjhdOworICAgLy8gQ3JlYXRpbmcgUGFkIERlbGF5CisgICB3aXJlICMxIGlvX29lYl8yOSA9IGlvX29lYlsyOV07CisgICB3aXJlICMxIGlvX29lYl8zMCA9IGlvX29lYlszMF07CisgICB3aXJlICMxIGlvX29lYl8zMSA9IGlvX29lYlszMV07CisgICB3aXJlICMxIGlvX29lYl8zMiA9IGlvX29lYlszMl07CisgICB0cmkgICMxIGZsYXNoX2lvMCA9IChpb19vZWJfMjk9PSAxJ2IwKSA/IGlvX291dFsyOV0gOiAxJ2J6OworICAgdHJpICAjMSBmbGFzaF9pbzEgPSAoaW9fb2ViXzMwPT0gMSdiMCkgPyBpb19vdXRbMzBdIDogMSdiejsKKyAgIHRyaSAgIzEgZmxhc2hfaW8yID0gKGlvX29lYl8zMT09IDEnYjApID8gaW9fb3V0WzMxXSA6IDEnYno7CisgICB0cmkgICMxIGZsYXNoX2lvMyA9IChpb19vZWJfMzI9PSAxJ2IwKSA/IGlvX291dFszMl0gOiAxJ2J6OworCisgICBhc3NpZ24gaW9faW5bMjldID0gZmxhc2hfaW8wOworICAgYXNzaWduIGlvX2luWzMwXSA9IGZsYXNoX2lvMTsKKyAgIGFzc2lnbiBpb19pblszMV0gPSBmbGFzaF9pbzI7CisgICBhc3NpZ24gaW9faW5bMzJdID0gZmxhc2hfaW8zOworCisKKyAgIC8vIFF1YXJkIGZsYXNoCisgICAgIHMyNWZsMjU2cyAjKC5tZW1fZmlsZV9uYW1lKCJ1c2VyX3VhcnQuaGV4IiksCisJICAgICAgICAgLm90cF9maWxlX25hbWUoIm5vbmUiKSwgCisgICAgICAgICAgICAgICAgIC5UaW1pbmdNb2RlbCgiUzI1Rkw1MTJTQUdNRkkwMTBfRl8zMHBGIikpIAorCQkgdV9zcGlfZmxhc2hfMjU2bWIKKyAgICAgICAoCisgICAgICAgICAgIC8vIERhdGEgSW5wdXRzL091dHB1dHMKKyAgICAgICAuU0kgICAgICAoZmxhc2hfaW8wKSwKKyAgICAgICAuU08gICAgICAoZmxhc2hfaW8xKSwKKyAgICAgICAvLyBDb250cm9scworICAgICAgIC5TQ0sgICAgIChmbGFzaF9jbGspLAorICAgICAgIC5DU05lZyAgIChmbGFzaF9jc2IpLAorICAgICAgIC5XUE5lZyAgIChmbGFzaF9pbzIpLAorICAgICAgIC5IT0xETmVnIChmbGFzaF9pbzMpLAorICAgICAgIC5SU1ROZWcgICghd2JfcnN0X2kpCisKKyAgICAgICApOworCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEkyQworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RyaSBzY2wsc2RhOworCithc3NpZ24gc2RhICA9ICAoaW9fb2ViWzIyXSA9PSAxJ2IwKSA/IGlvX291dFsyMl0gOiAxJ2J6OworYXNzaWduIHNjbCAgID0gKGlvX29lYlsyM10gPT0gMSdiMCkgPyBpb19vdXRbMjNdOiAxJ2J6OworYXNzaWduIGlvX2luWzIyXSAgPSAgc2RhOworYXNzaWduIGlvX2luWzIzXSAgPSAgc2NsOworCitwdWxsdXAgcDEoc2NsKTsgLy8gcHVsbHVwIHNjbCBsaW5lCitwdWxsdXAgcDIoc2RhKTsgLy8gcHVsbHVwIHNkYSBsaW5lCisKKyAKK2kyY19zbGF2ZV9tb2RlbCB1X2kyY19zbGF2ZSAoCisJLnNjbCAgIChzY2wpLCAKKwkuc2RhICAgKHNkYSkKKyAgICAgICApOworCisKK3Rhc2sgd2JfdXNlcl9jb3JlX3dyaXRlOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitpbnB1dCBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMTsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPWRhdGE7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naEY7ICAvLyBieXRlIGVuYWJsZQorICB3YmRfZXh0X2N5Y19pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YWl0KHdiZF9leHRfYWNrX28gPT0gMSk7CisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgJGRpc3BsYXkoIkRFQlVHIFdCIFVTRVIgQUNDRVNTIFdSSVRFIEFkZHJlc3MgOiAleCwgRGF0YSA6ICV4IixhZGRyZXNzLGRhdGEpOworICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CitlbmQKK2VuZHRhc2sKKwordGFzayAgd2JfdXNlcl9jb3JlX3JlYWQ7CitpbnB1dCBbMzE6MF0gYWRkcmVzczsKK291dHB1dCBbMzE6MF0gZGF0YTsKK3JlZyAgICBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPScwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICBkYXRhICA9IHdiZF9leHRfZGF0X287ICAKKyAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAjMTsKKyAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9hZHJfaSA9J2gwOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0naDA7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naDA7ICAvLyBieXRlIGVuYWJsZQorICAvLyRkaXNwbGF5KCJERUJVRyBXQiBVU0VSIEFDQ0VTUyBSRUFEIEFkZHJlc3MgOiAleCwgRGF0YSA6ICV4IixhZGRyZXNzLGRhdGEpOworICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CitlbmQKK2VuZHRhc2sKKwordGFzayAgd2JfdXNlcl9jb3JlX3JlYWRfY21wOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitpbnB1dCBbMzE6MF0gY21wX2RhdGE7CityZWcgICAgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0nMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoRjsgIC8vIGJ5dGUgZW5hYmxlCisgIHdiZF9leHRfY3ljX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdhaXQod2JkX2V4dF9hY2tfbyA9PSAxKTsKKyAgZGF0YSAgPSB3YmRfZXh0X2RhdF9vOyAgCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgaWYoZGF0YSA9PT0gY21wX2RhdGEpIGJlZ2luCisgICAgICRkaXNwbGF5KCJTVEFUVVM6IERFQlVHIFdCIFVTRVIgQUNDRVNTIFJFQUQgQWRkcmVzcyA6ICV4LCBEYXRhIDogJXgiLGFkZHJlc3MsZGF0YSk7CisgIGVuZCBlbHNlIGJlZ2luCisgICAgICRkaXNwbGF5KCJFUlJPUjogREVCVUcgV0IgVVNFUiBBQ0NFU1MgUkVBRCBBZGRyZXNzIDogJXgsIEV4cCBEYXRhIDogJXggUnhkIERhdGE6ICIsYWRkcmVzcyxjbXBfZGF0YSxkYXRhKTsKKyAgICAgdGVzdF9mYWlsPSAxOworICAgICAjMTAwCisgICAgICRmaW5pc2g7CisgIGVuZAorICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CitlbmQKK2VuZHRhc2sKKworYGlmZGVmIEdMCisKK3dpcmUgICAgICAgIHdiZF9zcGlfc3RiX2kgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfc3RiX2k7Cit3aXJlICAgICAgICB3YmRfc3BpX2Fja19vICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX2Fja19vOword2lyZSAgICAgICAgd2JkX3NwaV93ZV9pICAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF93ZV9pOword2lyZSBbMzE6MF0gd2JkX3NwaV9hZHJfaSAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9hZHJfaTsKK3dpcmUgWzMxOjBdIHdiZF9zcGlfZGF0X2kgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfZGF0X2k7Cit3aXJlIFszMTowXSB3YmRfc3BpX2RhdF9vICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX2RhdF9vOword2lyZSBbMzowXSAgd2JkX3NwaV9zZWxfaSAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9zZWxfaTsKKword2lyZSAgICAgICAgd2JkX3NkcmFtX3N0Yl9pID0gdV90b3AudV9zZHJhbV9jdHJsLndiX3N0Yl9pOword2lyZSAgICAgICAgd2JkX3NkcmFtX2Fja19vID0gdV90b3AudV9zZHJhbV9jdHJsLndiX2Fja19vOword2lyZSAgICAgICAgd2JkX3NkcmFtX3dlX2kgID0gdV90b3AudV9zZHJhbV9jdHJsLndiX3dlX2k7Cit3aXJlIFszMTowXSB3YmRfc2RyYW1fYWRyX2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfYWRkcl9pOword2lyZSBbMzE6MF0gd2JkX3NkcmFtX2RhdF9pID0gdV90b3AudV9zZHJhbV9jdHJsLndiX2RhdF9pOword2lyZSBbMzE6MF0gd2JkX3NkcmFtX2RhdF9vID0gdV90b3AudV9zZHJhbV9jdHJsLndiX2RhdF9vOword2lyZSBbMzowXSAgd2JkX3NkcmFtX3NlbF9pID0gdV90b3AudV9zZHJhbV9jdHJsLndiX3NlbF9pOworCit3aXJlICAgICAgICB3YmRfdWFydF9zdGJfaSAgPSB1X3RvcC51X3VhcnRfaTJjLnVfdWFydF9jb3JlLnJlZ19jczsKK3dpcmUgICAgICAgIHdiZF91YXJ0X2Fja19vICA9IHVfdG9wLnVfdWFydF9pMmMudV91YXJ0X2NvcmUucmVnX2FjazsKK3dpcmUgICAgICAgIHdiZF91YXJ0X3dlX2kgICA9IHVfdG9wLnVfdWFydF9pMmMudV91YXJ0X2NvcmUucmVnX3dyOword2lyZSBbNzowXSAgd2JkX3VhcnRfYWRyX2kgID0gdV90b3AudV91YXJ0X2kyYy51X3VhcnRfY29yZS5yZWdfYWRkcjsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2RhdF9pICA9IHVfdG9wLnVfdWFydF9pMmMudV91YXJ0X2NvcmUucmVnX3dkYXRhOword2lyZSBbNzowXSAgd2JkX3VhcnRfZGF0X28gID0gdV90b3AudV91YXJ0X2kyYy51X3VhcnRfY29yZS5yZWdfcmRhdGE7Cit3aXJlICAgICAgICB3YmRfdWFydF9zZWxfaSAgPSB1X3RvcC51X3VhcnRfaTJjLnVfdWFydF9jb3JlLnJlZ19iZTsKKworYGVuZGlmCisKKy8qKgorYGlmZGVmIEdMCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSSVNDIElNRU0gYW1kIERNRU0gTW9uaXRvcmluZyBUQVNLCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BkZWZpbmUgUklTQ19DT1JFICB1c2VyX3VhcnRfdGIudV90b3AudV9jb3JlLnVfcmlzY3ZfdG9wCisKK2Fsd2F5c0AocG9zZWRnZSBgUklTQ19DT1JFLndiX2NsaykgYmVnaW4KKyAgICBpZihgUklTQ19DT1JFLndiZF9pbWVtX2Fja19pKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBJTUVNIEFERFJFU1M6ICV4IFJlYWQgRGF0YSA6ICV4IiwgYFJJU0NfQ09SRS53YmRfaW1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9pbWVtX2RhdF9pKTsKKyAgICBpZihgUklTQ19DT1JFLndiZF9kbWVtX2Fja19pICYmIGBSSVNDX0NPUkUud2JkX2RtZW1fd2VfbykKKyAgICAgICAgICAkZGlzcGxheSgiUklTQ1YtREVCVUcgPT4gRE1FTSBBRERSRVNTOiAleCBXcml0ZSBEYXRhOiAleCBSZXNvbnNlOiAleCIsIGBSSVNDX0NPUkUud2JkX2RtZW1fYWRyX28sYFJJU0NfQ09SRS53YmRfZG1lbV9kYXRfbyk7CisgICAgaWYoYFJJU0NfQ09SRS53YmRfZG1lbV9hY2tfaSAmJiAhYFJJU0NfQ09SRS53YmRfZG1lbV93ZV9vKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBETUVNIEFERFJFU1M6ICV4IFJFQUQgRGF0YSA6ICV4IFJlc29uc2U6ICV4IiwgYFJJU0NfQ09SRS53YmRfZG1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9kbWVtX2RhdF9pKTsKK2VuZAorCitgZW5kaWYKKyoqLworZW5kbW9kdWxlCitgZGVmYXVsdF9uZXR0eXBlIHdpcmUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9pMmNtL3VzZXJfdWFydC5jIGIvdmVyaWxvZy9kdi91c2VyX2kyY20vdXNlcl91YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg2ZjIzYgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9pMmNtL3VzZXJfdWFydC5jCkBAIC0wLDAgKzEsNDIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyNkZWZpbmUgU0NfU0lNX09VVFBPUlQgKDB4ZjAwMDAwMDApCisjZGVmaW5lIHVpbnQzMl90ICBsb25nCisKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWcwICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDEwMDAwKQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzEgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMTAwMDQpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnMiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAxMDAwOCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWczICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDEwMDBDKQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzQgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMTAwMTApCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnNSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAxMDAxNCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc2ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDEwMDE4KQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzcgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMTAwMUMpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnOCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAxMDAyMCkKKworaW50IG1haW4oKQoreworCisgICAgd2hpbGUoMSkgeworICAgICAgIC8vIENoZWNrIFVBUlQgUlggZmlmbyBoYXMgZGF0YSwgaWYgYXZhaWxhYmxlIGxvb3AgYmFjayB0aGUgZGF0YQorICAgICAgIGlmKHJlZ19tcHJqX3VhcnRfcmVnOCAhPSAwKSB7IAorCSAgIHJlZ19tcHJqX3VhcnRfcmVnNSA9IHJlZ19tcHJqX3VhcnRfcmVnNjsKKyAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfbWJpc3RfdGVzdDEvTWFrZWZpbGUgYi92ZXJpbG9nL2R2L3VzZXJfbWJpc3RfdGVzdDEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg1ZDZiYQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9tYmlzdF90ZXN0MS9NYWtlZmlsZQpAQCAtMCwwICsxLDEwOSBAQAorIyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIwIEVmYWJsZXNzIENvcnBvcmF0aW9uCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorCisjIyBDYXJhdmVsIFBvaW50ZXJzCitDQVJBVkVMX1JPT1QgPz0gLi4vLi4vLi4vY2FyYXZlbAorQ0FSQVZFTF9QQVRIID89ICQoQ0FSQVZFTF9ST09UKQorQ0FSQVZFTF9GSVJNV0FSRV9QQVRIID0gJChDQVJBVkVMX1BBVEgpL3Zlcmlsb2cvZHYvY2FyYXZlbAorQ0FSQVZFTF9WRVJJTE9HX1BBVEggID0gJChDQVJBVkVMX1BBVEgpL3Zlcmlsb2cKK0NBUkFWRUxfUlRMX1BBVEggPSAkKENBUkFWRUxfVkVSSUxPR19QQVRIKS9ydGwKK0NBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTID0gJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkvZHYvY2FyYXZlbAorCisKKyMjIFVzZXIgUHJvamVjdCBQb2ludGVycworVVBSSl9WRVJJTE9HX1BBVEggPz0gLi4vLi4vLi4vdmVyaWxvZworVVBSSl9SVExfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL3J0bAorVVBSSl9HTF9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvZ2wKK1VQUkpfQkVIQVZJT1VSQUxfTU9ERUxTID0gLi4vbW9kZWwKK1VQUkpfQkVIQVZJT1VSQUxfQUdFTlRTID0gLi4vYWdlbnRzCitVUFJKX0lOQ0xVREVfUEFUSDEgPSAkKFVQUkpfUlRMX1BBVEgpL3lpZml2ZS95Y3IxYy9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRIMiA9ICQoVVBSSl9SVExfUEFUSCkvc2RyYW1fY3RybC9zcmMvZGVmcworVVBSSl9JTkNMVURFX1BBVEgzID0gJChVUFJKX1JUTF9QQVRIKS9pMmNtL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEg0ID0gJChVUFJKX1JUTF9QQVRIKS91c2IxX2hvc3Qvc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDUgPSAkKFVQUkpfUlRMX1BBVEgpL21iaXN0L2luY2x1ZGUKKworIyMgWUlGSVZFIEZJUk1XQVJFCitZSUZJVkVfRklSTVdBUkVfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2R2L2Zpcm13YXJlCitHQ0M2NF9QUkVGSVg/PXJpc2N2NjQtdW5rbm93bi1lbGYKKworIyMgUklTQ1YgR0NDIAorR0NDX1BBVEg/PS9lZi9hcHBzL2JpbgorR0NDX1BSRUZJWD89cmlzY3YzMi11bmtub3duLWVsZgorUERLX1BBVEg/PS9lZi90ZWNoL1NXL3NreTEzMEEKKworIyMgU2ltdWxhdGlvbiBtb2RlOiBSVEwvR0wKK1NJTT89UlRMCitEVU1QPz1PRkYKKworLlNVRkZJWEVTOgorCitQQVRURVJOID0gdXNlcl9tYmlzdF90ZXN0MQorCithbGw6ICAke1BBVFRFUk46PS52Y2R9CisKK3Z2cDogICR7UEFUVEVSTjo9LnZ2cH0KKworJS52dnA6ICVfdGIudiAKK2lmZXEgKCQoU0lNKSxSVEwpCisgICBpZmVxICgkKERVTVApLE9GRikKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfQUdFTlRTKSAgICBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDEpICAgIC1JICQoVVBSSl9JTkNMVURFX1BBVEgyKSAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMykgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEg0KSAtSSAkKFVQUkpfSU5DTFVERV9QQVRINSkgXAorCSQ8IC1vICRAIAorICAgIGVsc2UgIAorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtRFdGRFVNUCAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICBlbmRpZgorZWxzZSAgCisJaXZlcmlsb2cgLWcyMDA1LXN2IC1ERlVOQ1RJT05BTCAtRFNJTSAtREdMIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIC1JICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKFVQUkpfR0xfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwkkPCAtbyAkQCAKK2VuZGlmCisKKyUudmNkOiAlLnZ2cAorCXZ2cCAkPCAgfCB0ZWUgc2ltX3Jlc3VsdC5sb2cKKworY2hlY2stZW52OgoraWZuZGVmIFBES19ST09UCisJJChlcnJvciBQREtfUk9PVCBpcyB1bmRlZmluZWQsIHBsZWFzZSBleHBvcnQgaXQgYmVmb3JlIHJ1bm5pbmcgbWFrZSkKK2VuZGlmCitpZmVxICgsJCh3aWxkY2FyZCAkKFBES19ST09UKS9za3kxMzBBKSkKKwkkKGVycm9yICQoUERLX1JPT1QpL3NreTEzMEEgbm90IGZvdW5kLCBwbGVhc2UgaW5zdGFsbCBwZGsgYmVmb3JlIHJ1bm5pbmcgbWFrZSkKK2VuZGlmCisjaWZlcSAoLCQod2lsZGNhcmQgJChHQ0M2NF9QUkVGSVgpLWdjYyApKQorIwkkKGVycm9yICQoR0NDNjRfUFJFRklYKS1nY2MgaXMgbm90IGZvdW5kLCBwbGVhc2UgZXhwb3J0IEdDQ19QQVRIIGFuZCBHQ0NfUFJFRklYIGJlZm9yZSBydW5uaW5nIG1ha2UpCisjZW5kaWYKKyMgY2hlY2sgZm9yIGVmYWJsZXNzIHN0eWxlIGluc3RhbGxhdGlvbgoraWZlcSAoLCQod2lsZGNhcmQgJChQREtfUk9PVCkvc2t5MTMwQS9saWJzLnJlZi8qL3Zlcmlsb2cpKQorU0lNX0RFRklORVMgOj0gJHtTSU1fREVGSU5FU30gLURFRl9TVFlMRQorZW5kaWYKKworIyAtLS0tIENsZWFuIC0tLS0KKworY2xlYW46CisJcm0gLWYgKi52dnAgKi52Y2QgKi5sb2cKKworLlBIT05ZOiBjbGVhbiBhbGwKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9tYmlzdF90ZXN0MS9ydW5faXZlcmlsb2cgYi92ZXJpbG9nL2R2L3VzZXJfbWJpc3RfdGVzdDEvcnVuX2l2ZXJpbG9nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU2NmI4NjMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfbWJpc3RfdGVzdDEvcnVuX2l2ZXJpbG9nCkBAIC0wLDAgKzEsMzEgQEAKKyMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjIC8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhCisjIC8vIAorIyAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgLy8KKyMgLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgLy8KKyMgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMgLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyMgLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisjIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNpdmVyaWxvZyB3aXRob3V0IER1bXAKKyMKK2l2ZXJpbG9nIC1nMjAwNS1zdiAtRFdGRFVNUCAtREZVTkNUSU9OQUwgLURTSU0gLUkgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9lZmFibGVzcy9NUFctMy9wZGsvc2t5MTMwQSBcCistSSAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC9yaXNjZHVpbm8vY2FyYXZlbC92ZXJpbG9nL2R2L2NhcmF2ZWwgXAorLUkgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL2NhcmF2ZWwvdmVyaWxvZy9ydGwgXAorLUkgLi4vICAgIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsIFwKKy1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL21iaXN0L2luY2x1ZGUgXAordXNlcl9tYmlzdF90ZXN0MV90Yi52IC1vIHVzZXJfbWJpc3RfdGVzdDEudnZwCisKKwordnZwIHVzZXJfbWJpc3RfdGVzdDEudnZwIHwgdGVlIHRlc3QubG9nCisKK1xybSAtcmYgdXNlcl9tYmlzdF90ZXN0MS52dnAKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9tYmlzdF90ZXN0MS91c2VyX21iaXN0X3Rlc3QxX3RiLnYgYi92ZXJpbG9nL2R2L3VzZXJfbWJpc3RfdGVzdDEvdXNlcl9tYmlzdF90ZXN0MV90Yi52Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NzBlMTgKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfbWJpc3RfdGVzdDEvdXNlcl9tYmlzdF90ZXN0MV90Yi52CkBAIC0wLDAgKzEsMTEzOSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogIDIwMjEgLCBEaW5lc2ggQW5uYXl5YQorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogTW9kaWZpZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFN0YW5kYWxvbmUgVXNlciB2YWxpZGF0aW9uIFRlc3QgYmVuY2ggICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICBUaGlzIGlzIGEgc3RhbmRhbG9uZSB0ZXN0IGJlbmNoIHRvIHZhbGlkYXRlIHRoZSAgICAgICAgICAgIC8vLy8KKy8vLy8gICBEaWdpdGFsIGNvcmUgTUJJU1QgbG9naWMgdGhyb3VnaCBFeHRlcm5hbCBXQiBpL0YuICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMTggT2N0IDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYGRlZmF1bHRfbmV0dHlwZSB3aXJlCisKK2B0aW1lc2NhbGUgMSBucyAvIDEgbnMKKworYGluY2x1ZGUgInVwcmpfbmV0bGlzdHMudiIKKworYGRlZmluZSBXQl9NQVAgICAgICAgICAgIGAzMDA4MF8wMDAwCitgZGVmaW5lIEdMQkxfRlVOQ19NQVAgICAgJ2gzMDAyXzAwMDAKK2BkZWZpbmUgTUJJU1QxX0ZVTkNfTUFQICAnaDMwMDNfMDAwMCAgLy8gMHgzMDAzXzAwMDAgdG8gMHgzMDAzXzA3RkYKK2BkZWZpbmUgTUJJU1QyX0ZVTkNfTUFQICAnaDMwMDNfMDgwMCAgLy8gMHgzMDAzXzA4MDAgdG8gMHgzMDAzXzBGRkYKK2BkZWZpbmUgTUJJU1QzX0ZVTkNfTUFQICAnaDMwMDNfMTAwMCAgLy8gMHgzMDAzXzEwMDAgdG8gMHgzMDAzXzE3RkYKK2BkZWZpbmUgTUJJU1Q0X0ZVTkNfTUFQICAnaDMwMDNfMTgwMCAgLy8gMHgzMDAzXzE4MDAgdG8gMHgzMDAzXzFGRkYKKworYGRlZmluZSBHTEJMX0JJU1RfQ1RSTDEgICdoMzAwMl8wMDcwICAgIAorYGRlZmluZSBHTEJMX0JJU1RfU1RBVDEgICdoMzAwMl8wMDc0CitgZGVmaW5lIEdMQkxfQklTVF9TV0RBVEEgJ2gzMDAyXzAwNzgKK2BkZWZpbmUgR0xCTF9CSVNUX1NSREFUQSAnaDMwMDJfMDA3QworYGRlZmluZSBHTEJMX0JJU1RfU1BEQVRBICdoMzAwMl8wMDc4ICAjCisKK2BkZWZpbmUgV0JfR0xCTF9DVFJMICAgICAnaDMwODBfMDAwMAorCitgZGVmaW5lIE5PX1NSQU0gICAgICAgICAgNCAvLyA4CisKKworCittb2R1bGUgdXNlcl9tYmlzdF90ZXN0MV90YjsKKwlyZWcgY2xvY2s7CisJcmVnIHdiX3JzdF9pOworCXJlZyBwb3dlcjEsIHBvd2VyMjsKKwlyZWcgcG93ZXIzLCBwb3dlcjQ7CisKKyAgICAgICAgcmVnICAgICAgICB3YmRfZXh0X2N5Y19pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgcmVnICAgICAgICB3YmRfZXh0X3N0Yl9pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgcmVnIFszMTowXSB3YmRfZXh0X2Fkcl9pOyAgLy8gYWRkcmVzcworICAgICAgICByZWcgICAgICAgIHdiZF9leHRfd2VfaTsgIC8vIHdyaXRlCisgICAgICAgIHJlZyBbMzE6MF0gd2JkX2V4dF9kYXRfaTsgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgIHJlZyBbMzowXSAgd2JkX2V4dF9zZWxfaTsgIC8vIGJ5dGUgZW5hYmxlCisKKyAgICAgICAgd2lyZSBbMzE6MF0gd2JkX2V4dF9kYXRfbzsgIC8vIGRhdGEgaW5wdXQKKyAgICAgICAgd2lyZSAgICAgICAgd2JkX2V4dF9hY2tfbzsgIC8vIGFja25vd2xlZ2VtZW50CisgICAgICAgIHdpcmUgICAgICAgIHdiZF9leHRfZXJyX287ICAvLyBlcnJvcgorCisJLy8gVXNlciBJL08KKwl3aXJlIFszNzowXSBpb19vZWI7CisJd2lyZSBbMzc6MF0gaW9fb3V0OworCXdpcmUgWzM3OjBdIGlvX2luOworCisJd2lyZSBncGlvOworCXdpcmUgWzM3OjBdIG1wcmpfaW87CisJd2lyZSBbNzowXSBtcHJqX2lvXzA7CisJcmVnICAgICAgICB0ZXN0X2ZhaWw7CisJcmVnIFszMTowXSByZWFkX2RhdGE7CisgICAgICAgIHJlZyBbMzE6MF0gd3JpdGVtZW0gWzA6NTExXTsKKyAgICAgICAgcmVnIFs4OjBdICBmYXVsdGFkZHIgWzA6N107CisgICAgICAgIGludGVnZXIgaTsKKyAgICAgICAgZXZlbnQgICAgICBlcnJvcl9pbnNlcnQ7CisKKworCS8vIEV4dGVybmFsIGNsb2NrIGlzIHVzZWQgYnkgZGVmYXVsdC4gIE1ha2UgdGhpcyBhcnRpZmljaWFsbHkgZmFzdCBmb3IgdGhlCisJLy8gc2ltdWxhdGlvbi4gIE5vcm1hbGx5IHRoaXMgd291bGQgYmUgYSBzbG93IGNsb2NrIGFuZCB0aGUgZGlnaXRhbCBQTEwKKwkvLyB3b3VsZCBiZSB0aGUgZmFzdCBjbG9jay4KKworCWFsd2F5cyAjMTIuNSBjbG9jayA8PSAoY2xvY2sgPT09IDEnYjApOworCisJaW5pdGlhbCBiZWdpbgorCQljbG9jayA9IDA7CisgICAgICAgICAgICAgICAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICAgICAgICAgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICAgICAgICAgICAgICAgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKwllbmQKKworCWBpZmRlZiBXRkRVTVAKKwkgICBpbml0aWFsIGJlZ2luCisJICAgCSRkdW1wZmlsZSgic2lteC52Y2QiKTsKKwkgICAJJGR1bXB2YXJzKDIsIHVzZXJfbWJpc3RfdGVzdDFfdGIpOworCSAgIAkkZHVtcHZhcnMoMCwgdXNlcl9tYmlzdF90ZXN0MV90Yi51X3RvcC51X21iaXN0KTsKKwkgICAJJGR1bXB2YXJzKDAsIHVzZXJfbWJpc3RfdGVzdDFfdGIudV90b3AudV9pbnRlcmNvbik7CisJCSRkdW1wb2ZmOworCSAgIGVuZAorICAgICAgIGBlbmRpZgorCisJaW5pdGlhbCBiZWdpbgorCQl3Yl9yc3RfaSA8PSAxJ2IxOworCQkjMTAwOworCQl3Yl9yc3RfaSA8PSAxJ2IwOwkgICAgCS8vIFJlbGVhc2UgcmVzZXQKKworCQkjMjAwOyAvLyBXYWl0IGZvciByZXNldCByZW1vdmFsCisJICAgICAgICByZXBlYXQgKDEwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFRlc3QgU3RhcnRlZCIpOworCisJCXRlc3RfZmFpbCA9IDA7CisJCS8vIFJlbW92ZSBXYiBSZXNldAorCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFdCX0dMQkxfQ1RSTCwnaDEpOworCisJCSRkdW1wb2ZmOworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggV2l0aG91dCBBZGRyZXNzIEZhaWx1cmUiKTsKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKworCQkvLyBDaGVjayBJcyB0aGVyZSBpcyBhbnkgQklTVCBFcnJvcgorCQkvLyBbMF0gICAtIEJpc3QgRG9uZSAgICAgIC0gMQorCQkvLyBbMV0gICAtIEJpc3QgRXJyb3IgICAgIC0gMAorCQkvLyBbMl0gICAtIEJpc3QgQ29ycmVjdCAgIC0gMAorCQkvLyBbM10gICAtIFJlc2VydmVkICAgICAgIC0gMAorCQkvLyBbNzo0XSAtIEJpc3QgRXJyb3IgQ250IC0gNCdoMAorCQlpbnNlcnRfZmF1bHQoMCwwLDAsMCwwLDMyJ2gwMTAxMDEwMSk7CisKKyAgICAgICAgICAJaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtMTogQklTVCBUZXN0IHdpdGhvdXQgYW55IE1lbW9yeSBFcnJvciBpbnNlcnRpb24gdGVzdCBQYXNzZWQiKTsKKwkgICAgICAgIGVuZCBlbHNlIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtMTogQklTVCBUZXN0IHdpdGhvdXQgYW55IE1lbW9yeSBFcnJvciBpbnNlcnRpb24gdGVzdCBGYWlsZWQiKTsKKwkJZW5kCisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJICAgIAkKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggV2l0aCBTaW5nbGUgQWRkcmVzcyBGYWlsdXJlIGZvciBNRU0tMCIpOworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCisJCS8vIENoZWNrIElzIHRoZXJlIGlzIGFueSBCSVNUIEVycm9yCisJCS8vIFswXSAgIC0gQmlzdCBEb25lICAgICAgLSAxCisJCS8vIFsxXSAgIC0gQmlzdCBFcnJvciAgICAgLSAwCisJCS8vIFsyXSAgIC0gQmlzdCBDb3JyZWN0ICAgLSAxCisJCS8vIFszXSAgIC0gUmVzZXJ2ZWQgICAgICAgLSAwCisJCS8vIFs3OjRdIC0gQmlzdCBFcnJvciBDbnQgLSA0J2gxCisJCWZhdWx0YWRkclswXSA9IDknaDEwOworCQlmYXVsdGFkZHJbMV0gPSA5J2gyMDsKKwkJZmF1bHRhZGRyWzJdID0gOSdoMzA7CisJCWZhdWx0YWRkclszXSA9IDknaDQwOworCQlpbnNlcnRfZmF1bHQoMSwwLDAsMCwwLDMyJ2gwMTAxMDExNSk7CisKKyAgICAgICAgICAJaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtMi4xOiBCSVNUIFRlc3Qgd2l0aCBTaW5nbGUgQWRkcmVzcyBGYWlsdXJlIGF0IE1FTTAgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTIuMTogQklTVCBUZXN0IHdpdGggU2luZ2xlIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wIEVycm9yIGluc2VydGlvbiB0ZXN0IEZhaWxlZCIpOworCQllbmQKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIFdpdGggU2luZ2xlIEFkZHJlc3MgRmFpbHVyZSBmb3IgTUVNLTAvMSIpOworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKworCQkvLyBDaGVjayBJcyB0aGVyZSBpcyBhbnkgQklTVCBFcnJvcgorCQkvLyBbMF0gICAtIEJpc3QgRG9uZSAgICAgIC0gMQorCQkvLyBbMV0gICAtIEJpc3QgRXJyb3IgICAgIC0gMAorCQkvLyBbMl0gICAtIEJpc3QgQ29ycmVjdCAgIC0gMQorCQkvLyBbM10gICAtIFJlc2VydmVkICAgICAgIC0gMAorCQkvLyBbNzo0XSAtIEJpc3QgRXJyb3IgQ250IC0gNCdoMQorCQlmYXVsdGFkZHJbMF0gPSA5J2gxMDsKKwkJZmF1bHRhZGRyWzFdID0gOSdoMjA7CisJCWZhdWx0YWRkclsyXSA9IDknaDMwOworCQlmYXVsdGFkZHJbM10gPSA5J2g0MDsKKwkJaW5zZXJ0X2ZhdWx0KDEsMSwwLDAsMCwzMidoMDEwMTE1MTUpOworCisgICAgICAgICAgCWlmKHRlc3RfZmFpbCA9PSAwKSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTIuMjogQklTVCBUZXN0IHdpdGggU2luZ2xlIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTIuMjogQklTVCBUZXN0IHdpdGggU2luZ2xlIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgRmFpbGVkIik7CisJCWVuZAorCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggV2l0aCBTaW5nbGUgQWRkcmVzcyBGYWlsdXJlIGZvciBNRU0tMC8xLzIiKTsKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisKKwkJLy8gQ2hlY2sgSXMgdGhlcmUgaXMgYW55IEJJU1QgRXJyb3IKKwkJLy8gWzBdICAgLSBCaXN0IERvbmUgICAgICAtIDEKKwkJLy8gWzFdICAgLSBCaXN0IEVycm9yICAgICAtIDAKKwkJLy8gWzJdICAgLSBCaXN0IENvcnJlY3QgICAtIDEKKwkJLy8gWzNdICAgLSBSZXNlcnZlZCAgICAgICAtIDAKKwkJLy8gWzc6NF0gLSBCaXN0IEVycm9yIENudCAtIDQnaDEKKwkJZmF1bHRhZGRyWzBdID0gOSdoMTA7CisJCWZhdWx0YWRkclsxXSA9IDknaDIwOworCQlmYXVsdGFkZHJbMl0gPSA5J2gzMDsKKwkJZmF1bHRhZGRyWzNdID0gOSdoNDA7CisJCWluc2VydF9mYXVsdCgxLDEsMSwwLDAsMzInaDAxMTUxNTE1KTsKKworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC0yLjM6IEJJU1QgVGVzdCB3aXRoIFNpbmdsZSBBZGRyZXNzIEZhaWx1cmUgYXQgTUVNMC8xLzIgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTIuMzogQklTVCBUZXN0IHdpdGggU2luZ2xlIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEvMiBFcnJvciBpbnNlcnRpb24gdGVzdCBGYWlsZWQiKTsKKwkJZW5kCisKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIFNpbmdsZSBBZGRyZXNzIEZhaWx1cmUgdG8gQWxsIE1lbW9yeSIpOworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkgICAvLyBDaGVjayBJcyB0aGVyZSBpcyBhbnkgQklTVCBFcnJvcgorCQkgICAvLyBbMF0gICAtIEJpc3QgRG9uZSAgICAgIC0gMQorCQkgICAvLyBbMV0gICAtIEJpc3QgRXJyb3IgICAgIC0gMAorCQkgICAvLyBbMl0gICAtIEJpc3QgQ29ycmVjdCAgIC0gMQorCQkgICAvLyBbM10gICAtIFJlc2VydmVkICAgICAgIC0gMAorCQkgICAvLyBbNzo0XSAtIEJpc3QgRXJyb3IgQ250IC0gNCdoMQorCQkgICAvL2lmKHJlYWRfZGF0YVs2OjBdICAhPSA3J2IwMDAxMTAxKSB0ZXN0X2ZhaWwgPSAxOyAvLyBCaXN0IGNvcnJlY3QgPSAxIGFuZCBCaXN0IEVyciBDbnQgLSAweDEKKwkJZmF1bHRhZGRyWzBdID0gOSdoMTA7CisJCWZhdWx0YWRkclsxXSA9IDknaDIwOworCQlmYXVsdGFkZHJbMl0gPSA5J2gzMDsKKwkJZmF1bHRhZGRyWzNdID0gOSdoNDA7CisJCWluc2VydF9mYXVsdCgxLDEsMSwxLDEsMzInaDE1MTUxNTE1KTsKKworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC0yLjQ6IEJJU1QgVGVzdCB3aXRoIE9uZSBNZW1vcnkgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTIuNDogQklTVCBUZXN0IHdpdGggT25lIE1lbW9yeSBFcnJvciBpbnNlcnRpb24gdGVzdCBGYWlsZWQiKTsKKwkJZW5kCisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggV2l0aCBUd28gQWRkcmVzcyBGYWlsdXJlIGZvciBNRU0tMCIpOworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCisJCS8vIENoZWNrIElzIHRoZXJlIGlzIGFueSBCSVNUIEVycm9yCisJCS8vIFswXSAgIC0gQmlzdCBEb25lICAgICAgLSAxCisJCS8vIFsxXSAgIC0gQmlzdCBFcnJvciAgICAgLSAwCisJCS8vIFsyXSAgIC0gQmlzdCBDb3JyZWN0ICAgLSAxCisJCS8vIFszXSAgIC0gUmVzZXJ2ZWQgICAgICAgLSAwCisJCS8vIFs3OjRdIC0gQmlzdCBFcnJvciBDbnQgLSA0J2gyCisJCWZhdWx0YWRkclswXSA9IDknaDEwOworCQlmYXVsdGFkZHJbMV0gPSA5J2gyMDsKKwkJZmF1bHRhZGRyWzJdID0gOSdoMzA7CisJCWZhdWx0YWRkclszXSA9IDknaDQwOworCQlpbnNlcnRfZmF1bHQoMiwwLDAsMCwwLDMyJ2gwMTAxMDEyNSk7CisKKyAgICAgICAgICAJaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtMy4xOiBCSVNUIFRlc3Qgd2l0aCBUd28gQWRkcmVzcyBGYWlsdXJlIGF0IE1FTTAgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTMuMTogQklTVCBUZXN0IHdpdGggVHdvIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wIEVycm9yIGluc2VydGlvbiB0ZXN0IEZhaWxlZCIpOworCQllbmQKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIFdpdGggVHdvIEFkZHJlc3MgRmFpbHVyZSBmb3IgTUVNLTAvMSIpOworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKworCQkvLyBDaGVjayBJcyB0aGVyZSBpcyBhbnkgQklTVCBFcnJvcgorCQkvLyBbMF0gICAtIEJpc3QgRG9uZSAgICAgIC0gMQorCQkvLyBbMV0gICAtIEJpc3QgRXJyb3IgICAgIC0gMAorCQkvLyBbMl0gICAtIEJpc3QgQ29ycmVjdCAgIC0gMQorCQkvLyBbM10gICAtIFJlc2VydmVkICAgICAgIC0gMAorCQkvLyBbNzo0XSAtIEJpc3QgRXJyb3IgQ250IC0gNCdoMgorCQlmYXVsdGFkZHJbMF0gPSA5J2gxMDsKKwkJZmF1bHRhZGRyWzFdID0gOSdoMjA7CisJCWZhdWx0YWRkclsyXSA9IDknaDMwOworCQlmYXVsdGFkZHJbM10gPSA5J2g0MDsKKwkJaW5zZXJ0X2ZhdWx0KDIsMiwwLDAsMCwzMidoMDEwMTI1MjUpOworCisgICAgICAgICAgCWlmKHRlc3RfZmFpbCA9PSAwKSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTMuMjogQklTVCBUZXN0IHdpdGggVHdvIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTMuMjogQklTVCBUZXN0IHdpdGggVHdvIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgRmFpbGVkIik7CisJCWVuZAorCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggV2l0aCBUd28gQWRkcmVzcyBGYWlsdXJlIGZvciBNRU0tMC8xLzIiKTsKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisKKwkJLy8gQ2hlY2sgSXMgdGhlcmUgaXMgYW55IEJJU1QgRXJyb3IKKwkJLy8gWzBdICAgLSBCaXN0IERvbmUgICAgICAtIDEKKwkJLy8gWzFdICAgLSBCaXN0IEVycm9yICAgICAtIDAKKwkJLy8gWzJdICAgLSBCaXN0IENvcnJlY3QgICAtIDEKKwkJLy8gWzNdICAgLSBSZXNlcnZlZCAgICAgICAtIDAKKwkJLy8gWzc6NF0gLSBCaXN0IEVycm9yIENudCAtIDQnaDIKKwkJZmF1bHRhZGRyWzBdID0gOSdoMTA7CisJCWZhdWx0YWRkclsxXSA9IDknaDIwOworCQlmYXVsdGFkZHJbMl0gPSA5J2gzMDsKKwkJZmF1bHRhZGRyWzNdID0gOSdoNDA7CisJCWluc2VydF9mYXVsdCgyLDIsMiwwLDAsMzInaDAxMjUyNTI1KTsKKworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC0zLjM6IEJJU1QgVGVzdCB3aXRoIFR3byBBZGRyZXNzIEZhaWx1cmUgYXQgTUVNMC8xLzIgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTMuMzogQklTVCBUZXN0IHdpdGggVHdvIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEvMiBFcnJvciBpbnNlcnRpb24gdGVzdCBGYWlsZWQiKTsKKwkJZW5kCisKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIFR3byBBZGRyZXNzIEZhaWx1cmUgdG8gQWxsIE1lbW9yeSIpOworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkvLyBDaGVjayBJcyB0aGVyZSBpcyBhbnkgQklTVCBFcnJvcgorCQkvLyBbMF0gICAtIEJpc3QgRG9uZSAgICAgIC0gMQorCQkvLyBbMV0gICAtIEJpc3QgRXJyb3IgICAgIC0gMAorCQkvLyBbMl0gICAtIEJpc3QgQ29ycmVjdCAgIC0gMQorCQkvLyBbM10gICAtIFJlc2VydmVkICAgICAgIC0gMAorCQkvLyBbNzo0XSAtIEJpc3QgRXJyb3IgQ250IC0gNCdoMgorCQkgICAvL2lmKHJlYWRfZGF0YVs2OjBdICAhPSA3J2IwMDAxMTAxKSB0ZXN0X2ZhaWwgPSAxOyAvLyBCaXN0IGNvcnJlY3QgPSAxIGFuZCBCaXN0IEVyciBDbnQgLSAweDEKKwkJZmF1bHRhZGRyWzBdID0gOSdoMTA7CisJCWZhdWx0YWRkclsxXSA9IDknaDIwOworCQlmYXVsdGFkZHJbMl0gPSA5J2gzMDsKKwkJZmF1bHRhZGRyWzNdID0gOSdoNDA7CisJCWluc2VydF9mYXVsdCgyLDIsMiwyLDEsMzInaDI1MjUyNTI1KTsKKworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC0zLjQ6IEJJU1QgVGVzdCB3aXRoIFR3byBNZW1vcnkgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTMuNDogQklTVCBUZXN0IHdpdGggVHdvIE1lbW9yeSBFcnJvciBpbnNlcnRpb24gdGVzdCBGYWlsZWQiKTsKKwkJZW5kCisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggV2l0aCBUaHJlZSBBZGRyZXNzIEZhaWx1cmUgZm9yIE1FTS0wIik7CisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisKKwkJLy8gQ2hlY2sgSXMgdGhlcmUgaXMgYW55IEJJU1QgRXJyb3IKKwkJLy8gWzBdICAgLSBCaXN0IERvbmUgICAgICAtIDEKKwkJLy8gWzFdICAgLSBCaXN0IEVycm9yICAgICAtIDAKKwkJLy8gWzJdICAgLSBCaXN0IENvcnJlY3QgICAtIDEKKwkJLy8gWzNdICAgLSBSZXNlcnZlZCAgICAgICAtIDAKKwkJLy8gWzc6NF0gLSBCaXN0IEVycm9yIENudCAtIDQnaDMKKwkJZmF1bHRhZGRyWzBdID0gOSdoMTA7CisJCWZhdWx0YWRkclsxXSA9IDknaDIwOworCQlmYXVsdGFkZHJbMl0gPSA5J2gzMDsKKwkJZmF1bHRhZGRyWzNdID0gOSdoNDA7CisJCWluc2VydF9mYXVsdCgzLDAsMCwwLDAsMzInaDAxMDEwMTM1KTsKKworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC00LjE6IEJJU1QgVGVzdCB3aXRoIFRocmVlIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wIEVycm9yIGluc2VydGlvbiB0ZXN0IFBhc3NlZCIpOworCSAgICAgICAgZW5kIGVsc2UgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC00LjE6IEJJU1QgVGVzdCB3aXRoIFRocmVlIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wIEVycm9yIGluc2VydGlvbiB0ZXN0IEZhaWxlZCIpOworCQllbmQKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIFdpdGggVGhyZWUgQWRkcmVzcyBGYWlsdXJlIGZvciBNRU0tMC8xIik7CisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCisJCS8vIENoZWNrIElzIHRoZXJlIGlzIGFueSBCSVNUIEVycm9yCisJCS8vIFswXSAgIC0gQmlzdCBEb25lICAgICAgLSAxCisJCS8vIFsxXSAgIC0gQmlzdCBFcnJvciAgICAgLSAwCisJCS8vIFsyXSAgIC0gQmlzdCBDb3JyZWN0ICAgLSAxCisJCS8vIFszXSAgIC0gUmVzZXJ2ZWQgICAgICAgLSAwCisJCS8vIFs3OjRdIC0gQmlzdCBFcnJvciBDbnQgLSA0J2gzCisJCWZhdWx0YWRkclswXSA9IDknaDEwOworCQlmYXVsdGFkZHJbMV0gPSA5J2gyMDsKKwkJZmF1bHRhZGRyWzJdID0gOSdoMzA7CisJCWZhdWx0YWRkclszXSA9IDknaDQwOworCQlpbnNlcnRfZmF1bHQoMywzLDAsMCwwLDMyJ2gwMTAxMzUzNSk7CisKKyAgICAgICAgICAJaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtNC4yOiBCSVNUIFRlc3Qgd2l0aCBUaHJlZSBBZGRyZXNzIEZhaWx1cmUgYXQgTUVNMC8xIEVycm9yIGluc2VydGlvbiB0ZXN0IFBhc3NlZCIpOworCSAgICAgICAgZW5kIGVsc2UgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC00LjI6IEJJU1QgVGVzdCB3aXRoIFRocmVlIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgRmFpbGVkIik7CisJCWVuZAorCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggV2l0aCBUaHJlZSBBZGRyZXNzIEZhaWx1cmUgZm9yIE1FTS0wLzEvMiIpOworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKworCQkvLyBDaGVjayBJcyB0aGVyZSBpcyBhbnkgQklTVCBFcnJvcgorCQkvLyBbMF0gICAtIEJpc3QgRG9uZSAgICAgIC0gMQorCQkvLyBbMV0gICAtIEJpc3QgRXJyb3IgICAgIC0gMAorCQkvLyBbMl0gICAtIEJpc3QgQ29ycmVjdCAgIC0gMQorCQkvLyBbM10gICAtIFJlc2VydmVkICAgICAgIC0gMAorCQkvLyBbNzo0XSAtIEJpc3QgRXJyb3IgQ250IC0gNCdoMworCQlmYXVsdGFkZHJbMF0gPSA5J2gxMDsKKwkJZmF1bHRhZGRyWzFdID0gOSdoMjA7CisJCWZhdWx0YWRkclsyXSA9IDknaDMwOworCQlmYXVsdGFkZHJbM10gPSA5J2g0MDsKKwkJaW5zZXJ0X2ZhdWx0KDMsMywzLDAsMCwzMidoMDEzNTM1MzUpOworCisgICAgICAgICAgCWlmKHRlc3RfZmFpbCA9PSAwKSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTQuMzogQklTVCBUZXN0IHdpdGggVGhyZWUgQWRkcmVzcyBGYWlsdXJlIGF0IE1FTTAvMS8yIEVycm9yIGluc2VydGlvbiB0ZXN0IFBhc3NlZCIpOworCSAgICAgICAgZW5kIGVsc2UgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC00LjM6IEJJU1QgVGVzdCB3aXRoIFRocmVlIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEvMiBFcnJvciBpbnNlcnRpb24gdGVzdCBGYWlsZWQiKTsKKwkJZW5kCisKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIFRocmVlIEFkZHJlc3MgRmFpbHVyZSB0byBBbGwgTWVtb3J5Iik7CisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSAgIC8vIENoZWNrIElzIHRoZXJlIGlzIGFueSBCSVNUIEVycm9yCisJCSAgIC8vIFswXSAgIC0gQmlzdCBEb25lICAgICAgLSAxCisJCSAgIC8vIFsxXSAgIC0gQmlzdCBFcnJvciAgICAgLSAwCisJCSAgIC8vIFsyXSAgIC0gQmlzdCBDb3JyZWN0ICAgLSAxCisJCSAgIC8vIFszXSAgIC0gUmVzZXJ2ZWQgICAgICAgLSAwCisJCSAgIC8vIFs3OjRdIC0gQmlzdCBFcnJvciBDbnQgLSA0J2gzCisJCSAgIC8vaWYocmVhZF9kYXRhWzY6MF0gICE9IDcnYjAwMDExMDEpIHRlc3RfZmFpbCA9IDE7IC8vIEJpc3QgY29ycmVjdCA9IDEgYW5kIEJpc3QgRXJyIENudCAtIDB4MQorCQlmYXVsdGFkZHJbMF0gPSA5J2gxMDsKKwkJZmF1bHRhZGRyWzFdID0gOSdoMjA7CisJCWZhdWx0YWRkclsyXSA9IDknaDMwOworCQlmYXVsdGFkZHJbM10gPSA5J2g0MDsKKwkJaW5zZXJ0X2ZhdWx0KDMsMywzLDMsMSwzMidoMzUzNTM1MzUpOworCisgICAgICAgICAgCWlmKHRlc3RfZmFpbCA9PSAwKSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTQuNDogQklTVCBUZXN0IHdpdGggVGhyZWUgTWVtb3J5IEVycm9yIGluc2VydGlvbiB0ZXN0IFBhc3NlZCIpOworCSAgICAgICAgZW5kIGVsc2UgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC00LjQ6IEJJU1QgVGVzdCB3aXRoIFRocmVlIE1lbW9yeSBFcnJvciBpbnNlcnRpb24gdGVzdCBGYWlsZWQiKTsKKwkJZW5kCisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggV2l0aCBGb3VyIEFkZHJlc3MgRmFpbHVyZSBmb3IgTUVNLTAiKTsKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKworCQkvLyBDaGVjayBJcyB0aGVyZSBpcyBhbnkgQklTVCBFcnJvcgorCQkvLyBbMF0gICAtIEJpc3QgRG9uZSAgICAgIC0gMQorCQkvLyBbMV0gICAtIEJpc3QgRXJyb3IgICAgIC0gMAorCQkvLyBbMl0gICAtIEJpc3QgQ29ycmVjdCAgIC0gMQorCQkvLyBbM10gICAtIFJlc2VydmVkICAgICAgIC0gMAorCQkvLyBbNzo0XSAtIEJpc3QgRXJyb3IgQ250IC0gNCdoNAorCQlmYXVsdGFkZHJbMF0gPSA5J2gxMDsKKwkJZmF1bHRhZGRyWzFdID0gOSdoMjA7CisJCWZhdWx0YWRkclsyXSA9IDknaDMwOworCQlmYXVsdGFkZHJbM10gPSA5J2g0MDsKKwkJaW5zZXJ0X2ZhdWx0KDQsMCwwLDAsMCwzMidoMDEwMTAxNDUpOworCisgICAgICAgICAgCWlmKHRlc3RfZmFpbCA9PSAwKSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTQuMTogQklTVCBUZXN0IHdpdGggRm91ciBBZGRyZXNzIEZhaWx1cmUgYXQgTUVNMCBFcnJvciBpbnNlcnRpb24gdGVzdCBQYXNzZWQiKTsKKwkgICAgICAgIGVuZCBlbHNlIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtNC4xOiBCSVNUIFRlc3Qgd2l0aCBGb3VyIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wIEVycm9yIGluc2VydGlvbiB0ZXN0IEZhaWxlZCIpOworCQllbmQKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIFdpdGggRm91ciBBZGRyZXNzIEZhaWx1cmUgZm9yIE1FTS0wLzEiKTsKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisKKwkJLy8gQ2hlY2sgSXMgdGhlcmUgaXMgYW55IEJJU1QgRXJyb3IKKwkJLy8gWzBdICAgLSBCaXN0IERvbmUgICAgICAtIDEKKwkJLy8gWzFdICAgLSBCaXN0IEVycm9yICAgICAtIDAKKwkJLy8gWzJdICAgLSBCaXN0IENvcnJlY3QgICAtIDEKKwkJLy8gWzNdICAgLSBSZXNlcnZlZCAgICAgICAtIDAKKwkJLy8gWzc6NF0gLSBCaXN0IEVycm9yIENudCAtIDQnaDQKKwkJZmF1bHRhZGRyWzBdID0gOSdoMTA7CisJCWZhdWx0YWRkclsxXSA9IDknaDIwOworCQlmYXVsdGFkZHJbMl0gPSA5J2gzMDsKKwkJZmF1bHRhZGRyWzNdID0gOSdoNDA7CisJCWluc2VydF9mYXVsdCg0LDQsMCwwLDAsMzInaDAxMDE0NTQ1KTsKKworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC00LjI6IEJJU1QgVGVzdCB3aXRoIEZvdXIgQWRkcmVzcyBGYWlsdXJlIGF0IE1FTTAvMSBFcnJvciBpbnNlcnRpb24gdGVzdCBQYXNzZWQiKTsKKwkgICAgICAgIGVuZCBlbHNlIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtNC4yOiBCSVNUIFRlc3Qgd2l0aCBGb3VyIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgRmFpbGVkIik7CisJCWVuZAorCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggV2l0aCBGb3VyIEFkZHJlc3MgRmFpbHVyZSBmb3IgTUVNLTAvMS8yIik7CisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCisJCS8vIENoZWNrIElzIHRoZXJlIGlzIGFueSBCSVNUIEVycm9yCisJCS8vIFswXSAgIC0gQmlzdCBEb25lICAgICAgLSAxCisJCS8vIFsxXSAgIC0gQmlzdCBFcnJvciAgICAgLSAwCisJCS8vIFsyXSAgIC0gQmlzdCBDb3JyZWN0ICAgLSAxCisJCS8vIFszXSAgIC0gUmVzZXJ2ZWQgICAgICAgLSAwCisJCS8vIFs3OjRdIC0gQmlzdCBFcnJvciBDbnQgLSA0J2gzCisJCWZhdWx0YWRkclswXSA9IDknaDEwOworCQlmYXVsdGFkZHJbMV0gPSA5J2gyMDsKKwkJZmF1bHRhZGRyWzJdID0gOSdoMzA7CisJCWZhdWx0YWRkclszXSA9IDknaDQwOworCQlpbnNlcnRfZmF1bHQoNCw0LDQsMCwwLDMyJ2gwMTQ1NDU0NSk7CisKKyAgICAgICAgICAJaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtNC4zOiBCSVNUIFRlc3Qgd2l0aCBGb3VyIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEvMiBFcnJvciBpbnNlcnRpb24gdGVzdCBQYXNzZWQiKTsKKwkgICAgICAgIGVuZCBlbHNlIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtNC4zOiBCSVNUIFRlc3Qgd2l0aCBGb3VyIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEvMiBFcnJvciBpbnNlcnRpb24gdGVzdCBGYWlsZWQiKTsKKwkJZW5kCisKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIEZvdXIgQWRkcmVzcyBGYWlsdXJlIHRvIEFsbCBNZW1vcnkiKTsKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJICAgLy8gQ2hlY2sgSXMgdGhlcmUgaXMgYW55IEJJU1QgRXJyb3IKKwkJICAgLy8gWzBdICAgLSBCaXN0IERvbmUgICAgICAtIDEKKwkJICAgLy8gWzFdICAgLSBCaXN0IEVycm9yICAgICAtIDAKKwkJICAgLy8gWzJdICAgLSBCaXN0IENvcnJlY3QgICAtIDEKKwkJICAgLy8gWzNdICAgLSBSZXNlcnZlZCAgICAgICAtIDAKKwkJICAgLy8gWzc6NF0gLSBCaXN0IEVycm9yIENudCAtIDQnaDMKKwkJICAgLy9pZihyZWFkX2RhdGFbNjowXSAgIT0gNydiMDAwMTEwMSkgdGVzdF9mYWlsID0gMTsgLy8gQmlzdCBjb3JyZWN0ID0gMSBhbmQgQmlzdCBFcnIgQ250IC0gMHgxCisJCWZhdWx0YWRkclswXSA9IDknaDEwOworCQlmYXVsdGFkZHJbMV0gPSA5J2gyMDsKKwkJZmF1bHRhZGRyWzJdID0gOSdoMzA7CisJCWZhdWx0YWRkclszXSA9IDknaDQwOworCQlpbnNlcnRfZmF1bHQoNCw0LDQsNCwxLDMyJ2g0NTQ1NDU0NSk7CisKKyAgICAgICAgICAJaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtNC40OiBCSVNUIFRlc3Qgd2l0aCBGb3VyIE1lbW9yeSBFcnJvciBpbnNlcnRpb24gdGVzdCBQYXNzZWQiKTsKKwkgICAgICAgIGVuZCBlbHNlIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtNC40OiBCSVNUIFRlc3Qgd2l0aCBGb3VyIE1lbW9yeSBFcnJvciBpbnNlcnRpb24gdGVzdCBGYWlsZWQiKTsKKwkJZW5kCisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisKKworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggRm91cnMgQWRkcmVzcyhDb250aW5vdXMgU3RhcnRpbmcgQWRkcnNlc3MpIEZhaWx1cmUiKTsKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJLy8gQ2hlY2sgSXMgdGhlcmUgaXMgYW55IEJJU1QgRXJyb3IKKwkJLy8gWzBdICAgLSBCaXN0IERvbmUgICAgICAtIDEKKwkJLy8gWzFdICAgLSBCaXN0IEVycm9yICAgICAtIDAKKwkJLy8gWzJdICAgLSBCaXN0IENvcnJlY3QgICAtIDEKKwkJLy8gWzNdICAgLSBSZXNlcnZlZCAgICAgICAtIDAKKwkJLy8gWzc6NF0gLSBCaXN0IEVycm9yIENudCAtIDQnaDQKKwkJLy9pZihyZWFkX2RhdGFbNjowXSAgIT0gNydiMDEwMDEwMSkgdGVzdF9mYWlsID0gMTsgLy8gQmlzdCBjb3JyZWN0ID0gMSBhbmQgQmlzdCBFcnIgQ250IC0gMHg0CisJCWZhdWx0YWRkclswXSA9IDknaDA7CisJCWZhdWx0YWRkclsxXSA9IDknaDE7CisJCWZhdWx0YWRkclsyXSA9IDknaDI7CisJCWZhdWx0YWRkclszXSA9IDknaDM7CisJCWluc2VydF9mYXVsdCg0LDQsNCw0LDAsMzInaDQ1NDU0NTQ1KTsKKworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC01LjE6IEJJU1QgVGVzdCB3aXRoIEZvdXIgTWVtb3J5IEVycm9yIGluc2VydGlvbiB0ZXN0IFBhc3NlZCIpOworCSAgICAgICAgZW5kIGVsc2UgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC01LjE6IEJJU1QgVGVzdCB3aXRoIEZvdXIgTWVtb3J5IEVycm9yIGluc2VydGlvbiB0ZXN0IEZhaWxlZCIpOworCQllbmQKKworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggRm91cnMgQWRkcmVzcyhMYXN0IEFkZHJzZXNzKSBGYWlsdXJlIik7CisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCS8vIENoZWNrIElzIHRoZXJlIGlzIGFueSBCSVNUIEVycm9yCisJCS8vIFswXSAgIC0gQmlzdCBEb25lICAgICAgLSAxCisJCS8vIFsxXSAgIC0gQmlzdCBFcnJvciAgICAgLSAwCisJCS8vIFsyXSAgIC0gQmlzdCBDb3JyZWN0ICAgLSAxCisJCS8vIFszXSAgIC0gUmVzZXJ2ZWQgICAgICAgLSAwCisJCS8vIFs3OjRdIC0gQmlzdCBFcnJvciBDbnQgLSA0J2g0CisJCS8vaWYocmVhZF9kYXRhWzY6MF0gICE9IDcnYjAxMDAxMDEpIHRlc3RfZmFpbCA9IDE7IC8vIEJpc3QgY29ycmVjdCA9IDEgYW5kIEJpc3QgRXJyIENudCAtIDB4NAorCQlmYXVsdGFkZHJbMF0gPSA5J2hGMDsKKwkJZmF1bHRhZGRyWzFdID0gOSdoRjE7CisJCWZhdWx0YWRkclsyXSA9IDknaEYyOworCQlmYXVsdGFkZHJbM10gPSA5J2hGMzsKKwkJaW5zZXJ0X2ZhdWx0KDQsNCw0LDQsMCwzMidoNDU0NTQ1NDUpOworCisgICAgICAgICAgCWlmKHRlc3RfZmFpbCA9PSAwKSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTUuMjogQklTVCBUZXN0IHdpdGggRm91ciBNZW1vcnkgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTUuMjogQklTVCBUZXN0IHdpdGggRm91ciBNZW1vcnkgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgRmFpbGVkIik7CisJCWVuZAorCSAgICAJCisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIEZpdmUgQWRkcmVzcyBGYWlsdXJlIGZvciBNRU0wIik7CisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCS8vIENoZWNrIElzIHRoZXJlIGlzIGFueSBCSVNUIEVycm9yCisJCS8vIFswXSAgIC0gQmlzdCBEb25lICAgICAgLSAxCisJCS8vIFsxXSAgIC0gQmlzdCBFcnJvciAgICAgLSAxCisJCS8vIFsyXSAgIC0gQmlzdCBDb3JyZWN0ICAgLSAxCisJCS8vIFszXSAgIC0gUmVzZXJ2ZWQgICAgICAgLSAwCisJCS8vIFs3OjRdIC0gQmlzdCBFcnJvciBDbnQgLSA0J2g0CisJCS8vaWYocmVhZF9kYXRhWzY6MF0gICE9IDcnYjAxMDAxMDEpIHRlc3RfZmFpbCA9IDE7IC8vIEJpc3QgY29ycmVjdCA9IDEgYW5kIEJpc3QgRXJyIENudCAtIDB4NAorCQlmYXVsdGFkZHJbMF0gPSA5J2gxMDsKKwkJZmF1bHRhZGRyWzFdID0gOSdoMjA7CisJCWZhdWx0YWRkclsyXSA9IDknaDMwOworCQlmYXVsdGFkZHJbM10gPSA5J2g0MDsKKwkJZmF1bHRhZGRyWzRdID0gOSdoNTA7CisJCWluc2VydF9mYXVsdCg1LDAsMCwwLDEsMzInaDAxMDEwMTQ3KTsKKworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC02LjE6IEJJU1QgVGVzdCB3aXRoIEZpdmUgTWVtb3J5IEVycm9yIGluc2VydGlvbiBmb3IgTUVNMCB0ZXN0IFBhc3NlZCIpOworCSAgICAgICAgZW5kIGVsc2UgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC02LjE6IEJJU1QgVGVzdCB3aXRoIEZpdmUgTWVtb3J5IEVycm9yIGluc2VydGlvbiBmb3IgTUVNMCB0ZXN0IEZhaWxlZCIpOworCQkgZW5kCisKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggRml2ZSBBZGRyZXNzIEZhaWx1cmUgZm9yIE1FTTAvMSIpOworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkvLyBDaGVjayBJcyB0aGVyZSBpcyBhbnkgQklTVCBFcnJvcgorCQkvLyBbMF0gICAtIEJpc3QgRG9uZSAgICAgIC0gMQorCQkvLyBbMV0gICAtIEJpc3QgRXJyb3IgICAgIC0gMQorCQkvLyBbMl0gICAtIEJpc3QgQ29ycmVjdCAgIC0gMQorCQkvLyBbM10gICAtIFJlc2VydmVkICAgICAgIC0gMAorCQkvLyBbNzo0XSAtIEJpc3QgRXJyb3IgQ250IC0gNCdoNAorCQkvL2lmKHJlYWRfZGF0YVs2OjBdICAhPSA3J2IwMTAwMTAxKSB0ZXN0X2ZhaWwgPSAxOyAvLyBCaXN0IGNvcnJlY3QgPSAxIGFuZCBCaXN0IEVyciBDbnQgLSAweDQKKwkJZmF1bHRhZGRyWzBdID0gOSdoMTA7CisJCWZhdWx0YWRkclsxXSA9IDknaDIwOworCQlmYXVsdGFkZHJbMl0gPSA5J2gzMDsKKwkJZmF1bHRhZGRyWzNdID0gOSdoNDA7CisJCWZhdWx0YWRkcls0XSA9IDknaDUwOworCQlpbnNlcnRfZmF1bHQoNSw1LDAsMCwxLDMyJ2gwMTAxNDc0Nyk7CisKKyAgICAgICAgICAJaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtNi4yOiBCSVNUIFRlc3Qgd2l0aCBGaXZlIE1lbW9yeSBFcnJvciBpbnNlcnRpb24gZm9yIE1FTTAvMSB0ZXN0IFBhc3NlZCIpOworCSAgICAgICAgZW5kIGVsc2UgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC02LjI6IEJJU1QgVGVzdCB3aXRoIEZpdmUgTWVtb3J5IEVycm9yIGluc2VydGlvbiBmb3IgTUVNMC8xIHRlc3QgRmFpbGVkIik7CisJCSBlbmQKKworICAgICAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggRml2ZSBBZGRyZXNzIEZhaWx1cmUgZm9yIE1FTTAvMS8yIik7CisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCS8vIENoZWNrIElzIHRoZXJlIGlzIGFueSBCSVNUIEVycm9yCisJCS8vIFswXSAgIC0gQmlzdCBEb25lICAgICAgLSAxCisJCS8vIFsxXSAgIC0gQmlzdCBFcnJvciAgICAgLSAxCisJCS8vIFsyXSAgIC0gQmlzdCBDb3JyZWN0ICAgLSAxCisJCS8vIFszXSAgIC0gUmVzZXJ2ZWQgICAgICAgLSAwCisJCS8vIFs3OjRdIC0gQmlzdCBFcnJvciBDbnQgLSA0J2g0CisJCS8vaWYocmVhZF9kYXRhWzY6MF0gICE9IDcnYjAxMDAxMDEpIHRlc3RfZmFpbCA9IDE7IC8vIEJpc3QgY29ycmVjdCA9IDEgYW5kIEJpc3QgRXJyIENudCAtIDB4NAorCQlmYXVsdGFkZHJbMF0gPSA5J2gxMDsKKwkJZmF1bHRhZGRyWzFdID0gOSdoMjA7CisJCWZhdWx0YWRkclsyXSA9IDknaDMwOworCQlmYXVsdGFkZHJbM10gPSA5J2g0MDsKKwkJZmF1bHRhZGRyWzRdID0gOSdoNTA7CisJCWluc2VydF9mYXVsdCg1LDUsNSwwLDEsMzInaDAxNDc0NzQ3KTsKKworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC02LjM6IEJJU1QgVGVzdCB3aXRoIEZpdmUgTWVtb3J5IEVycm9yIGluc2VydGlvbiBmb3IgTUVNMC8xLzIgdGVzdCBQYXNzZWQiKTsKKwkgICAgICAgIGVuZCBlbHNlIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtNi4zOiBCSVNUIFRlc3Qgd2l0aCBGaXZlIE1lbW9yeSBFcnJvciBpbnNlcnRpb24gZm9yIE1FTTAvMS8yIHRlc3QgRmFpbGVkIik7CisJCSBlbmQKKworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggRml2ZSBBZGRyZXNzIEZhaWx1cmUgZm9yIEFsbCBNZW1vcnkiKTsKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJLy8gQ2hlY2sgSXMgdGhlcmUgaXMgYW55IEJJU1QgRXJyb3IKKwkJLy8gWzBdICAgLSBCaXN0IERvbmUgICAgICAtIDEKKwkJLy8gWzFdICAgLSBCaXN0IEVycm9yICAgICAtIDEKKwkJLy8gWzJdICAgLSBCaXN0IENvcnJlY3QgICAtIDEKKwkJLy8gWzNdICAgLSBSZXNlcnZlZCAgICAgICAtIDAKKwkJLy8gWzc6NF0gLSBCaXN0IEVycm9yIENudCAtIDQnaDQKKwkJLy9pZihyZWFkX2RhdGFbNjowXSAgIT0gNydiMDEwMDEwMSkgdGVzdF9mYWlsID0gMTsgLy8gQmlzdCBjb3JyZWN0ID0gMSBhbmQgQmlzdCBFcnIgQ250IC0gMHg0CisJCWZhdWx0YWRkclswXSA9IDknaDEwOworCQlmYXVsdGFkZHJbMV0gPSA5J2gyMDsKKwkJZmF1bHRhZGRyWzJdID0gOSdoMzA7CisJCWZhdWx0YWRkclszXSA9IDknaDQwOworCQlmYXVsdGFkZHJbNF0gPSA5J2g1MDsKKwkJaW5zZXJ0X2ZhdWx0KDUsNSw1LDUsMSwzMidoNDc0NzQ3NDcpOworCisgICAgICAgICAgCWlmKHRlc3RfZmFpbCA9PSAwKSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTYuNDogQklTVCBUZXN0IHdpdGggRml2ZSBNZW1vcnkgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTYuNDogQklTVCBUZXN0IHdpdGggRml2ZSBNZW1vcnkgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgRmFpbGVkIik7CisJCSBlbmQKKwkJJGR1bXBvbjsKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIEZ1bmN0aW9uYWwgQWNjZXNzLCBjb250aW51YXRpb24gb2YgcHJldmlvdXMgTUJJU1QgU2lnbmF0dXJlIik7CisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCWZvcmsKKwkJYmVnaW4KKwkJICAgIC8vIFJlbW92ZSB0aGUgQmlzdCBFbmFibGUgYW5kIEJpc3QgUnVuCisgICAgICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZShgR0xCTF9CSVNUX0NUUkwxLCdoMDAwKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIFdCIGFuZCBCSVNUIFJFU0VUCisgICAgICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZShgV0JfR0xCTF9DVFJMLCdoMDgxKTsKKyAgCisJICAgICAgICAgICAgLy8gRmlsbCBSYW5kb20gRGF0YQkKKwkJICAgIGZvciAoaT0wOyBpPCA5J2gxRkM7IGk9aSsxKSBiZWdpbgorICAgCSAgICAgICAgICAgICAgICB3cml0ZW1lbVtpXSA9ICRyYW5kb207CisgICAgICAgICAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYE1CSVNUMV9GVU5DX01BUCsoaSo0KSx3cml0ZW1lbVtpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYE1CSVNUMl9GVU5DX01BUCsoaSo0KSx3cml0ZW1lbVtpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYE1CSVNUM19GVU5DX01BUCsoaSo0KSx3cml0ZW1lbVtpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYE1CSVNUNF9GVU5DX01BUCsoaSo0KSx3cml0ZW1lbVtpXSk7CisJCSAgICAgICAgLy9pZihpIDwgOSdoMEZDKSBiZWdpbiAvLyBTUkFNNS1TUkFNOCBhcmUgMUtCCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIHdiX3VzZXJfY29yZV93cml0ZShgTUJJU1Q1X0ZVTkNfTUFQKyhpKjQpLHdyaXRlbWVtW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBNQklTVDZfRlVOQ19NQVArKGkqNCksd3JpdGVtZW1baV0pOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB3Yl91c2VyX2NvcmVfd3JpdGUoYE1CSVNUN19GVU5DX01BUCsoaSo0KSx3cml0ZW1lbVtpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIHdiX3VzZXJfY29yZV93cml0ZShgTUJJU1Q4X0ZVTkNfTUFQKyhpKjQpLHdyaXRlbWVtW2ldKTsKKwkgICAgICAgICAgICAgICAgLy9lbmQKKwkJICAgIGVuZAorCQkgICAgLy8gUmVhZCBiYWNrIGRhdGEKKwkJICAgIGZvciAoaT0wOyBpPCA5J2gxRkM7IGk9aSsxKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUMV9GVU5DX01BUCsoaSo0KSxyZWFkX2RhdGEsd3JpdGVtZW1baV0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBNQklTVDJfRlVOQ19NQVArKGkqNCkscmVhZF9kYXRhLHdyaXRlbWVtW2ldLDMyJ2hGRkZGRkZGRik7CisgICAgICAgICAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1QzX0ZVTkNfTUFQKyhpKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVtpXSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUNF9GVU5DX01BUCsoaSo0KSxyZWFkX2RhdGEsd3JpdGVtZW1baV0sMzInaEZGRkZGRkZGKTsKKwkJICAgICAgICAvL2lmKGkgPCA5J2gwRkMpIGJlZ2luIC8vIFNSQU01IC0gU1JBTTggYXJlIDFLQgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q1X0ZVTkNfTUFQKyhpKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVtpXSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q2X0ZVTkNfTUFQKyhpKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVtpXSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q3X0ZVTkNfTUFQKyhpKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVtpXSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q4X0ZVTkNfTUFQKyhpKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVtpXSwzMidoRkZGRkZGRkYpOworCSAgICAgICAgICAgICAgICAvL2VuZAorCQkgICAgZW5kCisKKwkJICAgIC8vIENyb3NzLWNoZWNrIFJlZHVjZW5jeSBhZGRyZXNzIGhvbGQgdGhlIGZhaWx1cmUgYWRkcmVzcyBkYXRhCisJCSAgICAvLyBJcyBsYXN0IEVycm9yIGluc2VydGVkIGFkZHJlc3MgYXJlIDB4MTAsMHgyMCwweDMwLDB4NDAKKwkJICAgIC8vIFNvIEFkZHJlc3MgMHgxRkMgPSBEYXRhWzB4MTBdLCAweDFGRCA9IERhdGFbMHgyMF0KKwkJICAgIC8vICAgIEFkZHJlc3MgMHgxRkUgPSBEYXRhWzB4MzBdLCAweDFGRiA9IERhdGFbMHg0MF0KKwkJICAgIC8vIENoZWNrIDJrYiBTUkFNMQorICAgICAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1QxX0ZVTkNfTUFQICsgKDknaDFGQyAqNCkscmVhZF9kYXRhLHdyaXRlbWVtWzknaDEwXSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1QxX0ZVTkNfTUFQICsgKDknaDFGRCAqNCkscmVhZF9kYXRhLHdyaXRlbWVtWzknaDIwXSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1QxX0ZVTkNfTUFQICsgKDknaDFGRSAqNCkscmVhZF9kYXRhLHdyaXRlbWVtWzknaDMwXSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1QxX0ZVTkNfTUFQICsgKDknaDFGRiAqNCkscmVhZF9kYXRhLHdyaXRlbWVtWzknaDQwXSwzMidoRkZGRkZGRkYpOworCisJCSAgICAvLyBDaGVjayAya2IgU1JBTTIKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUMl9GVU5DX01BUCArICg5J2gxRkMgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gxMV0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUMl9GVU5DX01BUCArICg5J2gxRkQgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gyMV0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUMl9GVU5DX01BUCArICg5J2gxRkUgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gzMV0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUMl9GVU5DX01BUCArICg5J2gxRkYgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2g0MV0sMzInaEZGRkZGRkZGKTsKKworCQkgICAgLy8vLyBDaGVjayAya2IgU1JBTTMKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUM19GVU5DX01BUCArICg5J2gxRkMgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gxMl0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUM19GVU5DX01BUCArICg5J2gxRkQgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gyMl0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUM19GVU5DX01BUCArICg5J2gxRkUgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gzMl0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUM19GVU5DX01BUCArICg5J2gxRkYgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2g0Ml0sMzInaEZGRkZGRkZGKTsKKworCQkgICAgLy8vLyBDaGVjayAya2IgU1JBTTQKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUNF9GVU5DX01BUCArICg5J2gxRkMgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gxM10sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUNF9GVU5DX01BUCArICg5J2gxRkQgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gyM10sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUNF9GVU5DX01BUCArICg5J2gxRkUgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gzM10sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUNF9GVU5DX01BUCArICg5J2gxRkYgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2g0M10sMzInaEZGRkZGRkZGKTsKKworCQkgICAgLy8vLyBDaGVjayAxa2IgU1JBTTUKKyAgICAgICAgICAgICAgICAgICAgLy93Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q1X0ZVTkNfTUFQICsgKDgnaEZDICo0KSxyZWFkX2RhdGEsd3JpdGVtZW1bOSdoMTRdLDMyJ2hGRkZGRkZGRik7CisgICAgICAgICAgICAgICAgICAgIC8vd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUNV9GVU5DX01BUCArICg4J2hGRCAqNCkscmVhZF9kYXRhLHdyaXRlbWVtWzknaDI0XSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICAvL3diX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBNQklTVDVfRlVOQ19NQVAgKyAoOCdoRkUgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gzNF0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgLy93Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q1X0ZVTkNfTUFQICsgKDgnaEZGICo0KSxyZWFkX2RhdGEsd3JpdGVtZW1bOSdoNDRdLDMyJ2hGRkZGRkZGRik7CisKKwkJICAgIC8vLy8gQ2hlY2sgMWtiIFNSQU02CisgICAgICAgICAgICAgICAgICAgIC8vd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUNl9GVU5DX01BUCArICg4J2hGQyAqNCkscmVhZF9kYXRhLHdyaXRlbWVtWzknaDE1XSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICAvL3diX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBNQklTVDZfRlVOQ19NQVAgKyAoOCdoRkQgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gyNV0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgLy93Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q2X0ZVTkNfTUFQICsgKDgnaEZFICo0KSxyZWFkX2RhdGEsd3JpdGVtZW1bOSdoMzVdLDMyJ2hGRkZGRkZGRik7CisgICAgICAgICAgICAgICAgICAgIC8vd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUNl9GVU5DX01BUCArICg4J2hGRiAqNCkscmVhZF9kYXRhLHdyaXRlbWVtWzknaDQ1XSwzMidoRkZGRkZGRkYpOworCisJCSAgICAvLy8vIENoZWNrIDFrYiBTUkFNNworICAgICAgICAgICAgICAgICAgICAvL3diX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBNQklTVDdfRlVOQ19NQVAgKyAoOCdoRkMgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gxNl0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgLy93Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q3X0ZVTkNfTUFQICsgKDgnaEZEICo0KSxyZWFkX2RhdGEsd3JpdGVtZW1bOSdoMjZdLDMyJ2hGRkZGRkZGRik7CisgICAgICAgICAgICAgICAgICAgIC8vd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUN19GVU5DX01BUCArICg4J2hGRSAqNCkscmVhZF9kYXRhLHdyaXRlbWVtWzknaDM2XSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICAvL3diX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBNQklTVDdfRlVOQ19NQVAgKyAoOCdoRkYgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2g0Nl0sMzInaEZGRkZGRkZGKTsKKworCQkgICAgLy8vLyBDaGVjayAxa2IgU1JBTTgKKyAgICAgICAgICAgICAgICAgICAgLy93Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q4X0ZVTkNfTUFQICsgKDgnaEZDICo0KSxyZWFkX2RhdGEsd3JpdGVtZW1bOSdoMTddLDMyJ2hGRkZGRkZGRik7CisgICAgICAgICAgICAgICAgICAgIC8vd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUOF9GVU5DX01BUCArICg4J2hGRCAqNCkscmVhZF9kYXRhLHdyaXRlbWVtWzknaDI3XSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICAvL3diX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBNQklTVDhfRlVOQ19NQVAgKyAoOCdoRkUgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gzN10sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgLy93Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q4X0ZVTkNfTUFQICsgKDgnaEZGICo0KSxyZWFkX2RhdGEsd3JpdGVtZW1bOSdoNDddLDMyJ2hGRkZGRkZGRik7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAvLyBMb29wIGZvciBCSVNUIFRpbWVPdXQKKyAgICAgICAgICAgICAgICAgICByZXBlYXQgKDIwMDAwMCkgQChwb3NlZGdlIGNsb2NrKTsKKyAgICAgICAgICAgICAgICAJCS8vICRkaXNwbGF5KCIrMTAwMCBjeWNsZXMiKTsKKyAgICAgICAgICAgICAgICAgICB0ZXN0X2ZhaWwgPSAxOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGpvaW5fYW55CisgICAgICAgICAgICAgICAgZGlzYWJsZSBmb3JrOyAvL2Rpc2FibGUgcGVuZGluZyBmb3JrIGFjdGl2aXR5CisgICAgICAgICAgCWlmKHRlc3RfZmFpbCA9PSAwKSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTc6IEJJU1QgVGVzdCB3aXRoIEZ1bmN0aW9uYWwgYWNjZXNzIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTc6IEJJU1QgVGVzdCB3aXRoIEZ1bmN0aW9uYWwgYWNjZXNzIHRlc3QgZmFpbGVkIik7CisJCSBlbmQKKworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAgICAgJGZpbmlzaDsKKwllbmQKKword2lyZSBVU0VSX1ZERDFWOCA9IDEnYjE7Cit3aXJlIFZTUyA9IDEnYjA7CisKKwordXNlcl9wcm9qZWN0X3dyYXBwZXIgdV90b3AoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAudmNjZDEoVVNFUl9WREQxVjgpLAkvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgIC52c3NkMShWU1MpLAkvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisgICAgLndiX2Nsa19pICAgICAgICAoY2xvY2spLCAgLy8gU3lzdGVtIGNsb2NrCisgICAgLnVzZXJfY2xvY2syICAgICAoMSdiMSksICAvLyBSZWFsLXRpbWUgY2xvY2sKKyAgICAud2JfcnN0X2kgICAgICAgICh3Yl9yc3RfaSksICAvLyBSZWd1bGFyIFJlc2V0IHNpZ25hbAorCisgICAgLndic19jeWNfaSAgICh3YmRfZXh0X2N5Y19pKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgLndic19zdGJfaSAgICh3YmRfZXh0X3N0Yl9pKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgLndic19hZHJfaSAgICh3YmRfZXh0X2Fkcl9pKSwgIC8vIGFkZHJlc3MKKyAgICAud2JzX3dlX2kgICAgKHdiZF9leHRfd2VfaSksICAvLyB3cml0ZQorICAgIC53YnNfZGF0X2kgICAod2JkX2V4dF9kYXRfaSksICAvLyBkYXRhIG91dHB1dAorICAgIC53YnNfc2VsX2kgICAod2JkX2V4dF9zZWxfaSksICAvLyBieXRlIGVuYWJsZQorCisgICAgLndic19kYXRfbyAgICh3YmRfZXh0X2RhdF9vKSwgIC8vIGRhdGEgaW5wdXQKKyAgICAud2JzX2Fja19vICAgKHdiZF9leHRfYWNrX28pLCAgLy8gYWNrbm93bGVnZW1lbnQKKworIAorICAgIC8vIExvZ2ljIEFuYWx5emVyIFNpZ25hbHMKKyAgICAubGFfZGF0YV9pbiAgICAgICgnMSkgLAorICAgIC5sYV9kYXRhX291dCAgICAgKCksCisgICAgLmxhX29lbmIgICAgICAgICAoJzApLAorIAorCisgICAgLy8gSU9zCisgICAgLmlvX2luICAgICAgICAgIChpb19pbikgICwKKyAgICAuaW9fb3V0ICAgICAgICAgKGlvX291dCkgLAorICAgIC5pb19vZWIgICAgICAgICAoaW9fb2ViKSAsCisKKyAgICAudXNlcl9pcnEgICAgICAgKCkgCisKKyk7CisKK2BpZm5kZWYgR0wgLy8gRHJpdmUgUG93ZXIgZm9yIEhvbGQgRml4IEJ1ZgorICAgIC8vIEFsbCBzdGFuZGFyZCBjZWxsIG5lZWQgcG93ZXIgaG9vay11cCBmb3IgZnVuY3Rpb25hbGl0eSB3b3JrCisgICAgaW5pdGlhbCBiZWdpbgorCisKKyAgICBlbmQKK2BlbmRpZiAgICAKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEluc2VydCB1c2VyIGRlZmluZWQgbnVtYmVyIG9mIGZhdWx0IAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordGFzayBpbnNlcnRfZmF1bHQ7CitpbnB1dCBbMzowXSAgbnVtMF9mYXVsdDsKK2lucHV0IFszOjBdICBudW0xX2ZhdWx0OworaW5wdXQgWzM6MF0gIG51bTJfZmF1bHQ7CitpbnB1dCBbMzowXSAgbnVtM19mYXVsdDsKK2lucHV0ICAgICAgICBmYXVsdF90eXBlOyAvLyAwIC0+IHN0cnVjayBhdCAwIGFuZCAxIC0+IHN0cnVjayBhdCAxCitpbnB1dCBbMzE6MF0gIG1iaXN0X3NpZ25hdHVyZTsKK3JlZyBbMzE6MF0gZGF0YWluOworcmVnIFs4OjBdICBmYWlsX2FkZHIxOworcmVnIFs4OjBdICBmYWlsX2FkZHIyOworcmVnIFs4OjBdICBmYWlsX2FkZHIzOworcmVnIFs4OjBdICBmYWlsX2FkZHI0OworcmVnIFszOjBdICBudW1fZmF1bHRbMDozXTsKK2ludGVnZXIgajsKK2JlZ2luCisgICBudW1fZmF1bHRbMF0gPSBudW0wX2ZhdWx0OworICAgbnVtX2ZhdWx0WzFdID0gbnVtMV9mYXVsdDsKKyAgIG51bV9mYXVsdFsyXSA9IG51bTJfZmF1bHQ7CisgICBudW1fZmF1bHRbM10gPSBudW0zX2ZhdWx0OworICAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworICAgZm9yaworICAgYmVnaW4KKyAgICAgICAvLyBSZW1vdmUgdGhlIEJpc3QgRW5hYmxlIGFuZCBCaXN0IFJ1bgorICAgICAgIHdiX3VzZXJfY29yZV93cml0ZShgR0xCTF9CSVNUX0NUUkwxLCdoMDAwKTsKKyAgICAgICAvLyBSZW1vdmUgV0IgYW5kIEJJU1QgUkVTRVQKKyAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYFdCX0dMQkxfQ1RSTCwnaDAwMSk7CisgICAgICAgLy8gU2V0IHRoZSBCaXN0IEVuYWJsZSBhbmQgQmlzdCBSdW4KKyAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYEdMQkxfQklTVF9DVFJMMSwnaDAwMDAwMDAzKTsKKyAgICAgICAvLyBSZW1vdmUgV0IgYW5kIEJJU1QgUkVTRVQKKyAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYFdCX0dMQkxfQ1RSTCwnaDA4MSk7CisgICAgICAvLyBDaGVjayBmb3IgTUJJU1QgRG9uZQorICAgICAgcmVhZF9kYXRhID0gJ2gwOworICAgICAgd2hpbGUgKHJlYWRfZGF0YVswXSAhPSAxJ2IxKSBiZWdpbgorICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWQoYEdMQkxfQklTVF9TVEFUMSxyZWFkX2RhdGEpOworICAgICAgZW5kCisgICAgICAvLyB3YWl0IGZvciBzb21lIHRpbWUgZm9yIGFsbCB0aGUgQklTVCB0byBjb21wbGV0ZQorICAgICAgcmVwZWF0ICgxMDAwKSBAKHBvc2VkZ2UgY2xvY2spOworICAgICAgLy8gVG9nZ2xlIHRoZSBCaXN0IExvYWQgZm9yIHVwZGF0ZSB0aGUgc2hpZnQgZGF0YQorICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBHTEJMX0JJU1RfQ1RSTDEsJ2gwMDAwMDAwNCk7CisgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYEdMQkxfQklTVF9DVFJMMSwnaDAwMDAwMDAwKTsKKyAgICAgIC8vIENoZWNrIElzIHRoZXJlIGlzIGFueSBCSVNUIEVycm9yCisgICAgICAvLyBbMF0gICAtIEJpc3QgRG9uZSAgICAgIAorICAgICAgLy8gWzFdICAgLSBCaXN0IEVycm9yICAgICAKKyAgICAgIC8vIFsyXSAgIC0gQmlzdCBDb3JyZWN0ICAgCisgICAgICAvLyBbM10gICAtIFJlc2VydmVkCisgICAgICAvLyBbNzo0XSAtIEJpc3QgRXJyb3IgQ250IAorICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYEdMQkxfQklTVF9TVEFUMSxyZWFkX2RhdGEsbWJpc3Rfc2lnbmF0dXJlWzMxOjBdLDMyJ2hGRkZGRkZGRik7CisgICAgICAvL3diX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBHTEJMX0JJU1RfU1RBVDIscmVhZF9kYXRhLG1iaXN0X3NpZ25hdHVyZVs2MzozMl0sMzInaEZGRkZGRkZGKTsKKyAgIGVuZAorICAgLy8gSW5zZXJ0ICBFcnJvciBJbnNlcnRpb24KKyAgIGJlZ2luCisgICAgICB3aGlsZSgxKSBiZWdpbgorICAgICAgICAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAgICAgICAgIzE7CisKKyAgICAgICAgIGlmKHVfdG9wLnVfc3JhbTBfMmtiLndlYjAgPT0gMSdiMCAmJiAKKwkgICAoKG51bV9mYXVsdFswXSA+IDAgJiYgdV90b3AudV9zcmFtMF8ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzBdKSB8fAorCSAgICAobnVtX2ZhdWx0WzBdID4gMSAmJiB1X3RvcC51X3NyYW0wXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbMV0pIHx8CisJICAgIChudW1fZmF1bHRbMF0gPiAyICYmIHVfdG9wLnVfc3JhbTBfMmtiLmFkZHIwID09IGZhdWx0YWRkclsyXSkgfHwKKwkgICAgKG51bV9mYXVsdFswXSA+IDMgJiYgdV90b3AudV9zcmFtMF8ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzNdKSB8fAorCSAgICAobnVtX2ZhdWx0WzBdID4gNCAmJiB1X3RvcC51X3NyYW0wXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbNF0pIHx8CisJICAgIChudW1fZmF1bHRbMF0gPiA1ICYmIHVfdG9wLnVfc3JhbTBfMmtiLmFkZHIwID09IGZhdWx0YWRkcls1XSkgfHwKKwkgICAgKG51bV9mYXVsdFswXSA+IDYgJiYgdV90b3AudV9zcmFtMF8ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzZdKSB8fAorCSAgICAobnVtX2ZhdWx0WzBdID4gNyAmJiB1X3RvcC51X3NyYW0wXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbN10pKSkKKyAgICAgICAgICAgICBiZWdpbgorCSAgIGlmKGZhdWx0X3R5cGUgPT0gMCkgLy8gU3RydWNrIGF0IDAKKwkgICAgICBmb3JjZSB1X3RvcC51X3NyYW0wXzJrYi5kaW4wID0gdV90b3AubWVtMF9kaW5fYSAgJiAzMidoRkZGRl9GRkZFOworCSAgIGVsc2UKKwkgICAgICBmb3JjZSB1X3RvcC51X3NyYW0wXzJrYi5kaW4wID0gdV90b3AubWVtMF9kaW5fYSB8IDMyJ2gxOworICAgCSAgIC0+IGVycm9yX2luc2VydDsKKyAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICByZWxlYXNlIHVfdG9wLnVfc3JhbTBfMmtiLmRpbjA7CisgICAgICAgICBlbmQKKworICAgICAgICAgaWYodV90b3AudV9zcmFtMV8ya2Iud2ViMCA9PSAxJ2IwICYmIAorCSAgICgobnVtX2ZhdWx0WzFdID4gMCAmJiB1X3RvcC51X3NyYW0xXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbMF0rMSkgfHwKKwkgICAgKG51bV9mYXVsdFsxXSA+IDEgJiYgdV90b3AudV9zcmFtMV8ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzFdKzEpIHx8CisJICAgIChudW1fZmF1bHRbMV0gPiAyICYmIHVfdG9wLnVfc3JhbTFfMmtiLmFkZHIwID09IGZhdWx0YWRkclsyXSsxKSB8fAorCSAgICAobnVtX2ZhdWx0WzFdID4gMyAmJiB1X3RvcC51X3NyYW0xXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbM10rMSkgfHwKKwkgICAgKG51bV9mYXVsdFsxXSA+IDQgJiYgdV90b3AudV9zcmFtMV8ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzRdKzEpIHx8CisJICAgIChudW1fZmF1bHRbMV0gPiA1ICYmIHVfdG9wLnVfc3JhbTFfMmtiLmFkZHIwID09IGZhdWx0YWRkcls1XSsxKSB8fAorCSAgICAobnVtX2ZhdWx0WzFdID4gNiAmJiB1X3RvcC51X3NyYW0xXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbNl0rMSkgfHwKKwkgICAgKG51bV9mYXVsdFsxXSA+IDcgJiYgdV90b3AudV9zcmFtMV8ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzddKzEpKSkKKyAgICAgICAgICAgICBiZWdpbgorCSAgIGlmKGZhdWx0X3R5cGUgPT0gMCkgLy8gU3RydWNrIGF0IDAKKwkgICAgICBmb3JjZSB1X3RvcC51X3NyYW0xXzJrYi5kaW4wID0gdV90b3AubWVtMV9kaW5fYSAgJiAzMidoRkZGRl9GRkZFOworCSAgIGVsc2UKKwkgICAgICBmb3JjZSB1X3RvcC51X3NyYW0xXzJrYi5kaW4wID0gdV90b3AubWVtMV9kaW5fYSB8IDMyJ2gxOworICAgCSAgIC0+IGVycm9yX2luc2VydDsKKyAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICByZWxlYXNlIHVfdG9wLnVfc3JhbTFfMmtiLmRpbjA7CisgICAgICAgICBlbmQKKworICAgICAgICAgaWYodV90b3AudV9zcmFtMl8ya2Iud2ViMCA9PSAxJ2IwICYmIAorCSAgICgobnVtX2ZhdWx0WzJdID4gMCAmJiB1X3RvcC51X3NyYW0yXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbMF0rMikgfHwKKwkgICAgKG51bV9mYXVsdFsyXSA+IDEgJiYgdV90b3AudV9zcmFtMl8ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzFdKzIpIHx8CisJICAgIChudW1fZmF1bHRbMl0gPiAyICYmIHVfdG9wLnVfc3JhbTJfMmtiLmFkZHIwID09IGZhdWx0YWRkclsyXSsyKSB8fAorCSAgICAobnVtX2ZhdWx0WzJdID4gMyAmJiB1X3RvcC51X3NyYW0yXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbM10rMikgfHwKKwkgICAgKG51bV9mYXVsdFsyXSA+IDQgJiYgdV90b3AudV9zcmFtMl8ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzRdKzIpIHx8CisJICAgIChudW1fZmF1bHRbMl0gPiA1ICYmIHVfdG9wLnVfc3JhbTJfMmtiLmFkZHIwID09IGZhdWx0YWRkcls1XSsyKSB8fAorCSAgICAobnVtX2ZhdWx0WzJdID4gNiAmJiB1X3RvcC51X3NyYW0yXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbNl0rMikgfHwKKwkgICAgKG51bV9mYXVsdFsyXSA+IDcgJiYgdV90b3AudV9zcmFtMl8ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzddKzIpKSkKKyAgICAgICAgICAgICBiZWdpbgorCSAgIGlmKGZhdWx0X3R5cGUgPT0gMCkgLy8gU3RydWNrIGF0IDAKKwkgICAgICBmb3JjZSB1X3RvcC51X3NyYW0yXzJrYi5kaW4wID0gdV90b3AubWVtMl9kaW5fYSAgJiAzMidoRkZGRl9GRkZFOworCSAgIGVsc2UKKwkgICAgICBmb3JjZSB1X3RvcC51X3NyYW0yXzJrYi5kaW4wID0gdV90b3AubWVtMl9kaW5fYSB8IDMyJ2gxOworICAgCSAgIC0+IGVycm9yX2luc2VydDsKKyAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICByZWxlYXNlIHVfdG9wLnVfc3JhbTJfMmtiLmRpbjA7CisgICAgICAgICBlbmQKKworICAgICAgICAgaWYodV90b3AudV9zcmFtM18ya2Iud2ViMCA9PSAxJ2IwICYmIAorCSAgICgobnVtX2ZhdWx0WzNdID4gMCAmJiB1X3RvcC51X3NyYW0zXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbMF0rMykgfHwKKwkgICAgKG51bV9mYXVsdFszXSA+IDEgJiYgdV90b3AudV9zcmFtM18ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzFdKzMpIHx8CisJICAgIChudW1fZmF1bHRbM10gPiAyICYmIHVfdG9wLnVfc3JhbTNfMmtiLmFkZHIwID09IGZhdWx0YWRkclsyXSszKSB8fAorCSAgICAobnVtX2ZhdWx0WzNdID4gMyAmJiB1X3RvcC51X3NyYW0zXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbM10rMykgfHwKKwkgICAgKG51bV9mYXVsdFszXSA+IDQgJiYgdV90b3AudV9zcmFtM18ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzRdKzMpIHx8CisJICAgIChudW1fZmF1bHRbM10gPiA1ICYmIHVfdG9wLnVfc3JhbTNfMmtiLmFkZHIwID09IGZhdWx0YWRkcls1XSszKSB8fAorCSAgICAobnVtX2ZhdWx0WzNdID4gNiAmJiB1X3RvcC51X3NyYW0zXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbNl0rMykgfHwKKwkgICAgKG51bV9mYXVsdFszXSA+IDcgJiYgdV90b3AudV9zcmFtM18ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzddKzMpKSkKKyAgICAgICAgICAgICBiZWdpbgorCSAgIGlmKGZhdWx0X3R5cGUgPT0gMCkgLy8gU3RydWNrIGF0IDAKKwkgICAgICBmb3JjZSB1X3RvcC51X3NyYW0zXzJrYi5kaW4wID0gdV90b3AubWVtM19kaW5fYSAgJiAzMidoRkZGRl9GRkZFOworCSAgIGVsc2UKKwkgICAgICBmb3JjZSB1X3RvcC51X3NyYW0zXzJrYi5kaW4wID0gdV90b3AubWVtM19kaW5fYSB8IDMyJ2gxOworICAgCSAgIC0+IGVycm9yX2luc2VydDsKKyAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICByZWxlYXNlIHVfdG9wLnVfc3JhbTNfMmtiLmRpbjA7CisgICAgICAgICBlbmQKKworICAgICAgICAgLy9pZih1X3RvcC51X3NyYW01XzFrYi53ZWIwID09IDEnYjAgJiYgCisJIC8vICAoKG51bV9mYXVsdCA+IDAgJiYgdV90b3AudV9zcmFtNV8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzBdKzQpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDEgJiYgdV90b3AudV9zcmFtNV8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzFdKzQpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDIgJiYgdV90b3AudV9zcmFtNV8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzJdKzQpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDMgJiYgdV90b3AudV9zcmFtNV8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzNdKzQpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDQgJiYgdV90b3AudV9zcmFtNV8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzRdKzQpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDUgJiYgdV90b3AudV9zcmFtNV8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzVdKzQpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDYgJiYgdV90b3AudV9zcmFtNV8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzZdKzQpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDcgJiYgdV90b3AudV9zcmFtNV8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzddKzQpKSkKKyAgICAgICAgIC8vICAgIGJlZ2luCisJIC8vICBpZihmYXVsdF90eXBlID09IDApIC8vIFN0cnVjayBhdCAwCisJIC8vICAgICBmb3JjZSB1X3RvcC51X3NyYW01XzFrYi5kaW4wID0gdV90b3AubWVtNV9kaW5fYiAgJiAzMidoRkZGRl9GRkZFOworCSAvLyAgZWxzZQorCSAvLyAgICAgZm9yY2UgdV90b3AudV9zcmFtNV8xa2IuZGluMCA9IHVfdG9wLm1lbTVfZGluX2IgfCAzMidoMTsKKyAgIAkgLy8gIC0+IGVycm9yX2luc2VydDsKKyAgICAgICAgIC8vZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgIC8vICAgcmVsZWFzZSB1X3RvcC51X3NyYW01XzFrYi5kaW4wOworICAgICAgICAgLy9lbmQKKworICAgICAgICAgLy9pZih1X3RvcC51X3NyYW02XzFrYi53ZWIwID09IDEnYjAgJiYgCisJIC8vICAoKG51bV9mYXVsdCA+IDAgJiYgdV90b3AudV9zcmFtNl8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzBdKzUpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDEgJiYgdV90b3AudV9zcmFtNl8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzFdKzUpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDIgJiYgdV90b3AudV9zcmFtNl8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzJdKzUpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDMgJiYgdV90b3AudV9zcmFtNl8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzNdKzUpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDQgJiYgdV90b3AudV9zcmFtNl8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzRdKzUpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDUgJiYgdV90b3AudV9zcmFtNl8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzVdKzUpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDYgJiYgdV90b3AudV9zcmFtNl8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzZdKzUpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDcgJiYgdV90b3AudV9zcmFtNl8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzddKzUpKSkKKyAgICAgICAgIC8vICAgIGJlZ2luCisJIC8vICBpZihmYXVsdF90eXBlID09IDApIC8vIFN0cnVjayBhdCAwCisJIC8vICAgICBmb3JjZSB1X3RvcC51X3NyYW02XzFrYi5kaW4wID0gdV90b3AubWVtNl9kaW5fYiAgJiAzMidoRkZGRl9GRkZFOworCSAvLyAgZWxzZQorCSAvLyAgICAgZm9yY2UgdV90b3AudV9zcmFtNl8xa2IuZGluMCA9IHVfdG9wLm1lbTZfZGluX2IgfCAzMidoMTsKKyAgIAkgLy8gIC0+IGVycm9yX2luc2VydDsKKyAgICAgICAgIC8vZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgIC8vICAgcmVsZWFzZSB1X3RvcC51X3NyYW02XzFrYi5kaW4wOworICAgICAgICAgLy9lbmQKKworICAgICAgICAgLy9pZih1X3RvcC51X3NyYW03XzFrYi53ZWIwID09IDEnYjAgJiYgCisJIC8vICAoKG51bV9mYXVsdCA+IDAgJiYgdV90b3AudV9zcmFtN18xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzBdKzYpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDEgJiYgdV90b3AudV9zcmFtN18xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzFdKzYpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDIgJiYgdV90b3AudV9zcmFtN18xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzJdKzYpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDMgJiYgdV90b3AudV9zcmFtN18xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzNdKzYpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDQgJiYgdV90b3AudV9zcmFtN18xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzRdKzYpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDUgJiYgdV90b3AudV9zcmFtN18xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzVdKzYpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDYgJiYgdV90b3AudV9zcmFtN18xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzZdKzYpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDcgJiYgdV90b3AudV9zcmFtN18xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzddKzYpKSkKKyAgICAgICAgIC8vICAgIGJlZ2luCisJIC8vICBpZihmYXVsdF90eXBlID09IDApIC8vIFN0cnVjayBhdCAwCisJIC8vICAgICBmb3JjZSB1X3RvcC51X3NyYW03XzFrYi5kaW4wID0gdV90b3AubWVtN19kaW5fYiAgJiAzMidoRkZGRl9GRkZFOworCSAvLyAgZWxzZQorCSAvLyAgICAgZm9yY2UgdV90b3AudV9zcmFtN18xa2IuZGluMCA9IHVfdG9wLm1lbTdfZGluX2IgfCAzMidoMTsKKyAgIAkgLy8gIC0+IGVycm9yX2luc2VydDsKKyAgICAgICAgIC8vZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgIC8vICAgcmVsZWFzZSB1X3RvcC51X3NyYW03XzFrYi5kaW4wOworICAgICAgICAgLy9lbmQKKworICAgICAgICAgLy9pZih1X3RvcC51X3NyYW04XzFrYi53ZWIwID09IDEnYjAgJiYgCisJIC8vICAoKG51bV9mYXVsdCA+IDAgJiYgdV90b3AudV9zcmFtOF8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzBdKzcpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDEgJiYgdV90b3AudV9zcmFtOF8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzFdKzcpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDIgJiYgdV90b3AudV9zcmFtOF8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzJdKzcpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDMgJiYgdV90b3AudV9zcmFtOF8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzNdKzcpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDQgJiYgdV90b3AudV9zcmFtOF8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzRdKzcpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDUgJiYgdV90b3AudV9zcmFtOF8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzVdKzcpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDYgJiYgdV90b3AudV9zcmFtOF8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzZdKzcpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDcgJiYgdV90b3AudV9zcmFtOF8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzddKzcpKSkKKyAgICAgICAgIC8vICAgIGJlZ2luCisJIC8vICBpZihmYXVsdF90eXBlID09IDApIC8vIFN0cnVjayBhdCAwCisJIC8vICAgICBmb3JjZSB1X3RvcC51X3NyYW04XzFrYi5kaW4wID0gdV90b3AubWVtOF9kaW5fYiAgJiAzMidoRkZGRl9GRkZFOworCSAvLyAgZWxzZQorCSAvLyAgICAgZm9yY2UgdV90b3AudV9zcmFtOF8xa2IuZGluMCA9IHVfdG9wLm1lbThfZGluX2IgfCAzMidoMTsKKyAgIAkgLy8gIC0+IGVycm9yX2luc2VydDsKKyAgICAgICAgIC8vZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgIC8vICAgcmVsZWFzZSB1X3RvcC51X3NyYW04XzFrYi5kaW4wOworICAgICAgICAgLy9lbmQKKworICAgICAgZW5kCisgICBlbmQKKyAgIGJlZ2luCisgICAgICAvLyBMb29wIGZvciBCSVNUIFRpbWVPdXQKKyAgICAgIHJlcGVhdCAoMjAwMDAwKSBAKHBvc2VkZ2UgY2xvY2spOworICAgCQkvLyAkZGlzcGxheSgiKzEwMDAgY3ljbGVzIik7CisgICAgICB0ZXN0X2ZhaWwgPSAxOworICAgZW5kCisgICBqb2luX2FueQorICAgZGlzYWJsZSBmb3JrOyAvL2Rpc2FibGUgcGVuZGluZyBmb3JrIGFjdGl2aXR5CisKKyAgIC8vIFJlYWQgQmFjayB0aGUgRmFpbHVyZSBBZGRyZXNzIGFuZCBjcm9zcy1jaGVjayBhbGwgdGhlIDggTUJJU1QKKyAgIC8vIFJlYWQgU2lnbmF0dXJlIGlzIGNvbW1pbmcgaXMgcmV2ZXJzZSBvcmRlciwgTUJJU1Q0ID0+IE1CSVNUMyA9PiBNQklTVDIKKyAgIGZvcihqPWBOT19TUkFNOyBqID4gMDsgaj1qLTEpIGJlZ2luCisgICAgICBmYWlsX2FkZHIxID0gZmF1bHRhZGRyWzBdK2otMTsKKyAgICAgIGZhaWxfYWRkcjIgPSBmYXVsdGFkZHJbMV0rai0xOworICAgICAgZmFpbF9hZGRyMyA9IGZhdWx0YWRkclsyXStqLTE7CisgICAgICBmYWlsX2FkZHI0ID0gZmF1bHRhZGRyWzNdK2otMTsKKworICAgICAgaWYobnVtX2ZhdWx0W2otMV0gPT0gMSkgYmVnaW4KKyAgICAgICAgICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgR0xCTF9CSVNUX1NSREFUQSxyZWFkX2RhdGEsezMyJ2gwfSwzMidoRkZGRl9GRkZGKTsKKyAgICAgICAgICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgR0xCTF9CSVNUX1NSREFUQSxyZWFkX2RhdGEsezcnaDAsZmFpbF9hZGRyMSwxNidoMH0sMzInaEZGRkZfRkZGRik7CisgICAgICBlbmQgZWxzZSBpZihudW1fZmF1bHRbai0xXSA9PSAyKSBiZWdpbgorICAgICAgICAgIHdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBHTEJMX0JJU1RfU1JEQVRBLHJlYWRfZGF0YSx7MzInaDB9LDMyJ2hGRkZGX0ZGRkYpOworICAgICAgICAgIHdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBHTEJMX0JJU1RfU1JEQVRBLHJlYWRfZGF0YSx7NydoMCxmYWlsX2FkZHIxLDcnaDAsZmFpbF9hZGRyMn0sMzInaEZGRkZfRkZGRik7CisgICAgIGVuZCBlbHNlIGlmKG51bV9mYXVsdFtqLTFdID09IDMpIGJlZ2luCisgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYEdMQkxfQklTVF9TUkRBVEEscmVhZF9kYXRhLHs3J2gwLGZhaWxfYWRkcjMsMTYnaDB9LDMyJ2hGRkZGX0ZGRkYpOworICAgICAgICAgIHdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBHTEJMX0JJU1RfU1JEQVRBLHJlYWRfZGF0YSx7NydoMCxmYWlsX2FkZHIxLDcnaDAsZmFpbF9hZGRyMn0sMzInaEZGRkZfRkZGRik7CisgICAgICBlbmQgZWxzZSBpZihudW1fZmF1bHRbai0xXSA+PSA0KSBiZWdpbgorICAgICAgICAgIHdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBHTEJMX0JJU1RfU1JEQVRBLHJlYWRfZGF0YSx7NydoMCxmYWlsX2FkZHIzLDcnaDAsZmFpbF9hZGRyNH0sMzInaEZGRkZfRkZGRik7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYEdMQkxfQklTVF9TUkRBVEEscmVhZF9kYXRhLHs3J2gwLGZhaWxfYWRkcjEsNydoMCxmYWlsX2FkZHIyfSwzMidoRkZGRl9GRkZGKTsKKyAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYEdMQkxfQklTVF9TUkRBVEEscmVhZF9kYXRhLDMyJ2gwLDMyJ2hGRkZGX0ZGRkYpOworICAgICAgICAgIHdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBHTEJMX0JJU1RfU1JEQVRBLHJlYWRfZGF0YSwzMidoMCwzMidoRkZGRl9GRkZGKTsKKyAgICAgIGVuZAorICAgZW5kCitlbmQKK2VuZHRhc2sKKworCit0YXNrIHdiX3VzZXJfY29yZV93cml0ZTsKK2lucHV0IFszMTowXSBhZGRyZXNzOworaW5wdXQgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDE7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID1kYXRhOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisgICRkaXNwbGF5KCJTVEFUVVM6IFdCIFVTRVIgQUNDRVNTIFdSSVRFIEFkZHJlc3MgOiAweCV4LCBEYXRhIDogMHgleCIsYWRkcmVzcyxkYXRhKTsKKyAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworZW5kCitlbmR0YXNrCisKK3Rhc2sgIHdiX3VzZXJfY29yZV9yZWFkOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitvdXRwdXQgWzMxOjBdIGRhdGE7CityZWcgICAgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0nMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoRjsgIC8vIGJ5dGUgZW5hYmxlCisgIHdiZF9leHRfY3ljX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdhaXQod2JkX2V4dF9hY2tfbyA9PSAxKTsKKyAgIzE7CisgIGRhdGEgID0gd2JkX2V4dF9kYXRfbzsgIAorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisgIC8vJGRpc3BsYXkoIlNUQVRVUzogV0IgVVNFUiBBQ0NFU1MgUkVBRCAgQWRkcmVzcyA6IDB4JXgsIERhdGEgOiAweCV4IixhZGRyZXNzLGRhdGEpOworICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CitlbmQKK2VuZHRhc2sKKwordGFzayAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2s7CitpbnB1dCBbMzE6MF0gYWRkcmVzczsKK291dHB1dCBbMzE6MF0gZGF0YTsKK2lucHV0IFszMTowXSBjbXBfZGF0YTsKK2lucHV0IFszMTowXSBjbXBfbWFzazsKK3JlZyAgICBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPScwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICAjMTsKKyAgZGF0YSAgPSB3YmRfZXh0X2RhdF9vOyAgCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgaWYoKGRhdGEgJiBjbXBfbWFzaykgIT09IChjbXBfZGF0YSAmIGNtcF9tYXNrKSApIGJlZ2luCisgICAgICRkaXNwbGF5KCJFUlJPUiA6IFdCIFVTRVIgQUNDRVNTIFJFQUQgIEFkZHJlc3MgOiAweCV4LCBFeGQ6IDB4JXggUnhkOiAweCV4ICIsYWRkcmVzcywoY21wX2RhdGEgJiBjbXBfbWFzayksKGRhdGEgJiBjbXBfbWFzaykpOworICAgICB0ZXN0X2ZhaWwgPSAxOworICBlbmQgZWxzZSBiZWdpbgorICAgICAkZGlzcGxheSgiU1RBVFVTOiBXQiBVU0VSIEFDQ0VTUyBSRUFEICBBZGRyZXNzIDogMHgleCwgRGF0YSA6IDB4JXgiLGFkZHJlc3MsKGRhdGEgJiBjbXBfbWFzaykpOworICBlbmQKKyAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworZW5kCitlbmR0YXNrCisKKworZW5kbW9kdWxlCitgZGVmYXVsdF9uZXR0eXBlIHdpcmUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9yaXNjX2Jvb3QvTWFrZWZpbGUgYi92ZXJpbG9nL2R2L3VzZXJfcmlzY19ib290L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNTdjMTAKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfcmlzY19ib290L01ha2VmaWxlCkBAIC0wLDAgKzEsMTExIEBACisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKKyMjIENhcmF2ZWwgUG9pbnRlcnMKK0NBUkFWRUxfUk9PVCA/PSAuLi8uLi8uLi9jYXJhdmVsCitDQVJBVkVMX1BBVEggPz0gJChDQVJBVkVMX1JPT1QpCitDQVJBVkVMX0ZJUk1XQVJFX1BBVEggPSAkKENBUkFWRUxfUEFUSCkvdmVyaWxvZy9kdi9jYXJhdmVsCitDQVJBVkVMX1ZFUklMT0dfUEFUSCAgPSAkKENBUkFWRUxfUEFUSCkvdmVyaWxvZworQ0FSQVZFTF9SVExfUEFUSCA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL3J0bAorQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMgPSAkKENBUkFWRUxfVkVSSUxPR19QQVRIKS9kdi9jYXJhdmVsCisKKworIyMgVXNlciBQcm9qZWN0IFBvaW50ZXJzCitVUFJKX1ZFUklMT0dfUEFUSCA/PSAuLi8uLi8uLi92ZXJpbG9nCitVUFJKX1JUTF9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvcnRsCitVUFJKX0dMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9nbAorVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMgPSAuLi9tb2RlbAorVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMgPSAuLi9hZ2VudHMKK1VQUkpfSU5DTFVERV9QQVRIMSA9ICQoVVBSSl9SVExfUEFUSCkveWlmaXZlL3ljcjFjL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEgyID0gJChVUFJKX1JUTF9QQVRIKS9zZHJhbV9jdHJsL3NyYy9kZWZzCitVUFJKX0lOQ0xVREVfUEFUSDMgPSAkKFVQUkpfUlRMX1BBVEgpL2kyY20vc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDQgPSAkKFVQUkpfUlRMX1BBVEgpL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRINSA9ICQoVVBSSl9SVExfUEFUSCkvbWJpc3QvaW5jbHVkZQorCisjIyBZSUZJVkUgRklSTVdBUkUKK1lJRklWRV9GSVJNV0FSRV9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvZHYvZmlybXdhcmUKK0dDQzY0X1BSRUZJWD89cmlzY3Y2NC11bmtub3duLWVsZgorCisjIyBSSVNDViBHQ0MgCitHQ0NfUEFUSD89L2VmL2FwcHMvYmluCitHQ0NfUFJFRklYPz1yaXNjdjMyLXVua25vd24tZWxmCitQREtfUEFUSD89L2VmL3RlY2gvU1cvc2t5MTMwQQorCisjIyBTaW11bGF0aW9uIG1vZGU6IFJUTC9HTAorU0lNPz1SVEwKK0RVTVA/PU9GRgorCisuU1VGRklYRVM6CisKK1BBVFRFUk4gPSB1c2VyX3Jpc2NfYm9vdAorCithbGw6ICAke1BBVFRFUk46PS52Y2R9CisKK2hleDogICR7UEFUVEVSTjo9LmhleH0KKwordnZwOiAgJHtQQVRURVJOOj0udnZwfQorCislLnZ2cDogJV90Yi52CisJJHtHQ0M2NF9QUkVGSVh9LWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0wIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSSQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpICB1c2VyX3Jpc2NfYm9vdC5jIC1vIHVzZXJfcmlzY19ib290Lm8KKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIC1EX19SVkNfRVhUIC1zdGF0aWMgLXN0ZD1nbnU5OSAtZm5vLWNvbW1vbiAtZm5vLWJ1aWx0aW4tcHJpbnRmIC1EVENNPTAgLVdhLC1tYXJjaD1ydjMyaW1jIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1ERkxBR1NfU1RSPVwiIi1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIlwiICAtRF9fQVNTRU1CTFlfXz0xIC1jIC1JLi8gLUkkKFlJRklWRV9GSVJNV0FSRV9QQVRIKSAgJChZSUZJVkVfRklSTVdBUkVfUEFUSCkvY3J0LlMgLW8gY3J0Lm8KKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1vIHVzZXJfcmlzY19ib290LmVsZiAtVCAkKFlJRklWRV9GSVJNV0FSRV9QQVRIKS9saW5rLmxkIHVzZXJfcmlzY19ib290Lm8gY3J0Lm8gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1OCisJJHtHQ0M2NF9QUkVGSVh9LW9iamNvcHkgLU8gdmVyaWxvZyB1c2VyX3Jpc2NfYm9vdC5lbGYgdXNlcl9yaXNjX2Jvb3QuaGV4CisJJHtHQ0M2NF9QUkVGSVh9LW9iamR1bXAgLUQgdXNlcl9yaXNjX2Jvb3QuZWxmID4gdXNlcl9yaXNjX2Jvb3QuZHVtcAorCXJtIGNydC5vIHVzZXJfcmlzY19ib290Lm8KK2lmZXEgKCQoU0lNKSxSVEwpCisgICBpZmVxICgkKERVTVApLE9GRikKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfQUdFTlRTKSAgICBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDEpICAgIC1JICQoVVBSSl9JTkNMVURFX1BBVEgyKSAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMykgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEg0KSAtSSAkKFVQUkpfSU5DTFVERV9QQVRINSkgXAorCSQ8IC1vICRAIAorICAgIGVsc2UgIAorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtRFdGRFVNUCAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICBlbmRpZgorZWxzZSAgCisJaXZlcmlsb2cgLWcyMDA1LXN2IC1ERlVOQ1RJT05BTCAtRFNJTSAtREdMIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIC1JICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKFVQUkpfR0xfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwkkPCAtbyAkQCAKK2VuZGlmCisKKyUudmNkOiAlLnZ2cAorCXZ2cCAkPAorCislLmVsZjogJS5jICQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zZWN0aW9ucy5sZHMgJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3N0YXJ0LnMKKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1JICQoQ0FSQVZFTF9QQVRIKSAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtV2wsLUJzdGF0aWMsLVQsJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3NlY3Rpb25zLmxkcywtLXN0cmlwLWRlYnVnIC1mZnJlZXN0YW5kaW5nIC1ub3N0ZGxpYiAtbyAkQCAkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc3RhcnQucyAkPAorCislLmhleDogCisJZWNobyBAIlRoaXMgaXMgdXNlciBib290IHRlc3QsIG5vdGluZyB0byBjb21waWxlIHRoZSBtYW5nbWVudCBjb3JlIGNvZGUiCisKKyUuYmluOiAlLmVsZgorCSR7R0NDNjRfUFJFRklYfS1vYmpjb3B5IC1PIGJpbmFyeSAkPCAvZGV2L3N0ZG91dCB8IHRhaWwgLWMgKzEwNDg1NzcgPiAkQAorCisjIC0tLS0gQ2xlYW4gLS0tLQorCitjbGVhbjoKKwlybSAtZiAqLmVsZiAqLmhleCAqLmJpbiAqLnZ2cCAqLnZjZCAqLmxvZyAqLmR1bXAKKworLlBIT05ZOiBjbGVhbiBoZXggYWxsCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfcmlzY19ib290L3J1bl9pdmVyaWxvZyBiL3Zlcmlsb2cvZHYvdXNlcl9yaXNjX2Jvb3QvcnVuX2l2ZXJpbG9nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYwODNkNmQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfcmlzY19ib290L3J1bl9pdmVyaWxvZwpAQCAtMCwwICsxLDQyIEBACisjIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworIyAvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorIyAvLyAKKyMgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIC8vCisjIC8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIC8vCisjIC8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisjIC8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorIyAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uICB1c2VyX3Jpc2NfYm9vdC5jIC1vIHVzZXJfcmlzY19ib290Lm8KKworcmlzY3Y2NC11bmtub3duLWVsZi1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1EX19BU1NFTUJMWV9fPTEgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uLyAgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vY3J0X3RjbS5TIC1vIGNydF90Y20ubworCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtbyB1c2VyX3Jpc2NfYm9vdC5lbGYgLVQgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vbGlua190Y20ubGQgdXNlcl9yaXNjX2Jvb3QubyBjcnRfdGNtLm8gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyCisKK3Jpc2N2NjQtdW5rbm93bi1lbGYtb2JqY29weSAtTyB2ZXJpbG9nIHVzZXJfcmlzY19ib290LmVsZiB1c2VyX3Jpc2NfYm9vdC5oZXgKKworcmlzY3Y2NC11bmtub3duLWVsZi1vYmpkdW1wIC1EIHVzZXJfcmlzY19ib290LmVsZiA+IHVzZXJfcmlzY19ib290LmR1bXAKKworcm0gY3J0X3RjbS5vIHVzZXJfcmlzY19ib290Lm8KKworI2l2ZXJpbG9nIHdpdGggd2F2ZWZvcm0gZHVtcAoraXZlcmlsb2cgLWcyMDA1LXN2IC1EV0ZEVU1QIC1ERlVOQ1RJT05BTCAtRFNJTSAtSSAkUERLX1BBVEggLUkgIC4uLy4uLy4uL2NhcmF2ZWwvdmVyaWxvZy9ydGwgIC1JIC4uLyAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bCAtSSAuLi8gLUkgLi4vLi4vLi4vdmVyaWxvZyAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMgICAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzIC1JICRDQVJBVkVMX1JPT1QvdmVyaWxvZy9kdi9jYXJhdmVsIC1JIC4uL21vZGVsIC1JIC4uL2FnZW50cyB1c2VyX3Jpc2NfYm9vdF90Yi52IC1vIHVzZXJfcmlzY19ib290X3RiLnZ2cAorCisKKyNpdmVyaWxvZyAtZzIwMDUtc3YgLUkgJFBES19QQVRIIC1ERlVOQ1RJT05BTCAtRFNJTSAtSSAgLi4vLi4vLi4vY2FyYXZlbC92ZXJpbG9nL3J0bCAtSSAuLi8gLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwgLUkgLi4vLi4vLi4vdmVyaWxvZyAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMgICAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzIC1JICRDQVJBVkVMX1JPT1QvdmVyaWxvZy9kdi9jYXJhdmVsIC1JIC4uL21vZGVsIC1JIC4uL2FnZW50cyB1c2VyX3Jpc2NfYm9vdF90Yi52IC1vIHVzZXJfcmlzY19ib290X3RiLnZ2cAorCisjIEdMUworI2l2ZXJpbG9nIC1nMjAwNS1zdiAtREdMIC1JICRQREtfUEFUSCAtSSAgLi4vLi4vLi4vY2FyYXZlbC92ZXJpbG9nL3J0bCAgLUkgLi4vIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsIC1JIC4uLy4uLy4uL3Zlcmlsb2cgLUkgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9wZGsvc2t5MTMwQSAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMgICAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzIC1JICRDQVJBVkVMX1JPT1QvdmVyaWxvZy9kdi9jYXJhdmVsIC1JIC4uL21vZGVsIC1JIC4uL2FnZW50cyB1c2VyX3VhcnRfdGIudiAtbyB1c2VyX3Jpc2NfYm9vdF90Yi52dnAKKwordnZwIHVzZXJfcmlzY19ib290X3RiLnZ2cCB8IHRlZSB0ZXN0LmxvZworCitccm0gLXJmIHVzZXJfcmlzY19ib290X3RiLnZ2cApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3Jpc2NfYm9vdC91c2VyX3Jpc2NfYm9vdC5jIGIvdmVyaWxvZy9kdi91c2VyX3Jpc2NfYm9vdC91c2VyX3Jpc2NfYm9vdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZTQyNGIKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfcmlzY19ib290L3VzZXJfcmlzY19ib290LmMKQEAgLTAsMCArMSw3MyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2RlZmluZSBTQ19TSU1fT1VUUE9SVCAoMHhmMDAwMDAwMCkKKyNkZWZpbmUgdWludDMyX3QgIGxvbmcKKworI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcwICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAwMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMSAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMDQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDA4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWczICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAwQykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNCAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMTApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzUgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDE0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc2ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAxOCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNyAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMUMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzggICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDIwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc5ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAyNCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMjgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzExICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDJDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxMiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAzMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTMgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMzQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE0ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDM4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxNSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAzQykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTYgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwNDApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE3ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDQ0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxOCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDA0OCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTkgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwNEMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIwICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDUwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyMSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDA1NCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjIgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwNTgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIzICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDVDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyNCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDA2MCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjUgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwNjQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzI2ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDY4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyNyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDA2QykKKworaW50IG1haW4oKQoreworCisgICAgLy92b2xhdGlsZSBsb25nICpvdXRfcHRyID0gKHZvbGF0aWxlIGxvbmcqKVNDX1NJTV9PVVRQT1JUOworICAgIC8vKm91dF9wdHIgPSAweEFBQkJDQ0REOworICAgIC8vKm91dF9wdHIgPSAweEJCQ0NEREVFOworICAgIC8vKm91dF9wdHIgPSAweENDRERFRUZGOworICAgIC8vKm91dF9wdHIgPSAweERERUVGRjAwOworCisgICAgLy8gV3JpdGUgc29mdHdhcmUgV3JpdGUgJiBSZWFkIFJlZ2lzdGVyCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjIgID0gMHgxMTIyMzM0NDsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjMgID0gMHgyMjMzNDQ1NTsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjQgID0gMHgzMzQ0NTU2NjsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjUgID0gMHg0NDU1NjY3NzsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjYgPSAweDU1NjY3Nzg4OyAKKyAgICByZWdfbXByal9nbG9ibF9yZWcyNyA9IDB4NjY3Nzg4OTk7IAorICAgIC8vcmVnX21wcmpfZ2xvYmxfcmVnMTIgPSAweDc3ODg5OUFBOyAKKyAgICAvL3JlZ19tcHJqX2dsb2JsX3JlZzEzID0gMHg4ODk5QUFCQjsgCisgICAgLy9yZWdfbXByal9nbG9ibF9yZWcxNCA9IDB4OTlBQUJCQ0M7IAorICAgIC8vcmVnX21wcmpfZ2xvYmxfcmVnMTUgPSAweEFBQkJDQ0REOyAKKworICAgIHdoaWxlKDEpIHt9CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfcmlzY19ib290L3VzZXJfcmlzY19ib290X3RiLnYgYi92ZXJpbG9nL2R2L3VzZXJfcmlzY19ib290L3VzZXJfcmlzY19ib290X3RiLnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZmMjQwOAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9yaXNjX2Jvb3QvdXNlcl9yaXNjX2Jvb3RfdGIudgpAQCAtMCwwICsxLDM5OCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogIDIwMjEgLCBEaW5lc2ggQW5uYXl5YQorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogTW9kaWZpZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFN0YW5kYWxvbmUgVXNlciB2YWxpZGF0aW9uIFRlc3QgYmVuY2ggICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICBUaGlzIGlzIGEgc3RhbmRhbG9uZSB0ZXN0IGJlbmNoIHRvIHZhbGlkYXRlIHRoZSAgICAgICAgICAgIC8vLy8KKy8vLy8gICBEaWdpdGFsIGNvcmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAxLiBVc2VyIFJpc2MgY29yZSBpcyBib290ZWQgdXNpbmcgIGNvbXBpbGVkIGNvZGUgb2YgICAgICAgIC8vLy8KKy8vLy8gICAgICB1c2VyX3Jpc2NfYm9vdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAyLiBVc2VyIFJpc2MgY29yZSB1c2VzIFNlcmlhbCBGbGFzaCBhbmQgU0RSQU0gdG8gYm9vdCAgICAgIC8vLy8KKy8vLy8gICAzLiBBZnRlciBzdWNjZXNzZnVsIGJvb3QsIFJpc2MgY29yZSB3aWxsICB3cml0ZSBzaWduYXR1cmUgIC8vLy8KKy8vLy8gICAgICBpbiB0byAgdXNlciByZWdpc3RlciBmcm9tIDB4MTAwM18wMDU4IHRvIDB4MTAwM18wMDZDICAgIC8vLy8KKy8vLy8gICA0LiBUaHJvdWdoIHRoZSBFeHRlcm5hbCBXaXNoYm9uZSBJbnRlcmZhY2Ugd2UgcmVhZCBiYWNrICAgIC8vLy8KKy8vLy8gICAgICAgZnJvbSAweDMwMDNfMDA1OCB0byAweDMwMDNfMDA2QyAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgYW5kIHZhbGlkYXRlIHRoZSB1c2VyIHJlZ2lzdGVyIHRvIGRlY2xhcmVkIHBhc3MgZmFpbCAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMTZ0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYGRlZmF1bHRfbmV0dHlwZSB3aXJlCisKK2B0aW1lc2NhbGUgMSBucyAvIDEgbnMKKworYGluY2x1ZGUgInMyNWZsMjU2cy5zdiIKK2BpbmNsdWRlICJ1cHJqX25ldGxpc3RzLnYiCitgaW5jbHVkZSAibXQ0OGxjOG04YTIudiIKKworbW9kdWxlIHVzZXJfcmlzY19ib290X3RiOworCXJlZyBjbG9jazsKKwlyZWcgd2JfcnN0X2k7CisJcmVnIHBvd2VyMSwgcG93ZXIyOworCXJlZyBwb3dlcjMsIHBvd2VyNDsKKworICAgICAgICByZWcgICAgICAgIHdiZF9leHRfY3ljX2k7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICByZWcgICAgICAgIHdiZF9leHRfc3RiX2k7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICByZWcgWzMxOjBdIHdiZF9leHRfYWRyX2k7ICAvLyBhZGRyZXNzCisgICAgICAgIHJlZyAgICAgICAgd2JkX2V4dF93ZV9pOyAgLy8gd3JpdGUKKyAgICAgICAgcmVnIFszMTowXSB3YmRfZXh0X2RhdF9pOyAgLy8gZGF0YSBvdXRwdXQKKyAgICAgICAgcmVnIFszOjBdICB3YmRfZXh0X3NlbF9pOyAgLy8gYnl0ZSBlbmFibGUKKworICAgICAgICB3aXJlIFszMTowXSB3YmRfZXh0X2RhdF9vOyAgLy8gZGF0YSBpbnB1dAorICAgICAgICB3aXJlICAgICAgICB3YmRfZXh0X2Fja19vOyAgLy8gYWNrbm93bGVnZW1lbnQKKyAgICAgICAgd2lyZSAgICAgICAgd2JkX2V4dF9lcnJfbzsgIC8vIGVycm9yCisKKwkvLyBVc2VyIEkvTworCXdpcmUgWzM3OjBdIGlvX29lYjsKKwl3aXJlIFszNzowXSBpb19vdXQ7CisJd2lyZSBbMzc6MF0gaW9faW47CisKKwl3aXJlIGdwaW87CisJd2lyZSBbMzc6MF0gbXByal9pbzsKKwl3aXJlIFs3OjBdIG1wcmpfaW9fMDsKKwlyZWcgICAgICAgICB0ZXN0X2ZhaWw7CisJcmVnIFszMTowXSByZWFkX2RhdGE7CisKKworCisJLy8gRXh0ZXJuYWwgY2xvY2sgaXMgdXNlZCBieSBkZWZhdWx0LiAgTWFrZSB0aGlzIGFydGlmaWNpYWxseSBmYXN0IGZvciB0aGUKKwkvLyBzaW11bGF0aW9uLiAgTm9ybWFsbHkgdGhpcyB3b3VsZCBiZSBhIHNsb3cgY2xvY2sgYW5kIHRoZSBkaWdpdGFsIFBMTAorCS8vIHdvdWxkIGJlIHRoZSBmYXN0IGNsb2NrLgorCisJYWx3YXlzICMxMi41IGNsb2NrIDw9IChjbG9jayA9PT0gMSdiMCk7CisKKwlpbml0aWFsIGJlZ2luCisJCWNsb2NrID0gMDsKKyAgICAgICAgICAgICAgICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICAgICAgICAgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9hZHJfaSA9J2gwOyAgLy8gYWRkcmVzcworICAgICAgICAgICAgICAgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgICAgICAgICAgICAgICAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3NlbF9pID0naDA7ICAvLyBieXRlIGVuYWJsZQorCWVuZAorCisJYGlmZGVmIFdGRFVNUAorCSAgIGluaXRpYWwgYmVnaW4KKwkgICAJJGR1bXBmaWxlKCJyaXNjX2Jvb3QudmNkIik7CisJICAgCSRkdW1wdmFycygyLCB1c2VyX3Jpc2NfYm9vdF90Yik7CisJICAgZW5kCisgICAgICAgYGVuZGlmCisKKwlpbml0aWFsIGJlZ2luCisKKwkJIzIwMDsgLy8gV2FpdCBmb3IgcmVzZXQgcmVtb3ZhbAorCSAgICAgICAgcmVwZWF0ICgxMCkgQChwb3NlZGdlIGNsb2NrKTsKKwkJJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBSaXNjIEJvb3QgVGVzdCBTdGFydGVkIik7CisKKwkJLy8gUmVtb3ZlIFdiIFJlc2V0CisJCXdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCwnaDEpOworCisJICAgICAgICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CisJCSMxOworCQkvLyBSZW1vdmUgYWxsIHRoZSByZXNldAorICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCwnaEYpOworCisKKwkJLy8gUmVwZWF0IGN5Y2xlcyBvZiAxMDAwIGNsb2NrIGVkZ2VzIGFzIG5lZWRlZCB0byBjb21wbGV0ZSB0ZXN0YmVuY2gKKwkJcmVwZWF0ICgzMCkgYmVnaW4KKwkJCXJlcGVhdCAoMTAwMCkgQChwb3NlZGdlIGNsb2NrKTsKKwkJCS8vICRkaXNwbGF5KCIrMTAwMCBjeWNsZXMiKTsKKwkJZW5kCisKKworCQkkZGlzcGxheSgiTW9uaXRvcjogUmVhZGluZyBCYWNrIHRoZSBleHBlY3RlZCB2YWx1ZSIpOworCQkvLyBVc2VyIFJJU0MgY29yZSBleHBlY3QgdG8gd3JpdGUgdGhlc2UgdmFsdWUgaW4gZ2xvYmFsCisJCS8vIHJlZ2lzdGVyLCByZWFkIGJhY2sgYW5kIGRlY2lkZSBvbiBwYXNzIGZhaWwKKwkJLy8gMHgzMDAwMDAxOCAgPSAweDExMjIzMzQ0OyAKKyAgICAgICAgICAgICAgICAvLyAweDMwMDAwMDFDICA9IDB4MjIzMzQ0NTU7IAorICAgICAgICAgICAgICAgIC8vIDB4MzAwMDAwMjAgID0gMHgzMzQ0NTU2NjsgCisgICAgICAgICAgICAgICAgLy8gMHgzMDAwMDAyNCAgPSAweDQ0NTU2Njc3OyAKKyAgICAgICAgICAgICAgICAvLyAweDMwMDAwMDI4ID0gMHg1NTY2Nzc4ODsgCisgICAgICAgICAgICAgICAgLy8gMHgzMDAwMDAyQyA9IDB4NjY3Nzg4OTk7IAorCisgICAgICAgICAgICAgICAgdGVzdF9mYWlsID0gMDsKKwkJd2JfdXNlcl9jb3JlX3JlYWQoMzInaDMwMDIwMDU4LHJlYWRfZGF0YSk7CisJCWlmKHJlYWRfZGF0YSAhPSAzMidoMTEyMjMzNDQpIHRlc3RfZmFpbCA9IDE7CisKKwkJd2JfdXNlcl9jb3JlX3JlYWQoMzInaDMwMDIwMDVDLHJlYWRfZGF0YSk7CisJCWlmKHJlYWRfZGF0YSAhPSAzMidoMjIzMzQ0NTUpIHRlc3RfZmFpbCA9IDE7CisKKwkJd2JfdXNlcl9jb3JlX3JlYWQoMzInaDMwMDIwMDYwLHJlYWRfZGF0YSk7CisJICAgICAgICBpZihyZWFkX2RhdGEgIT0gMzInaDMzNDQ1NTY2KSB0ZXN0X2ZhaWwgPSAxOworCisJCXdiX3VzZXJfY29yZV9yZWFkKDMyJ2gzMDAyMDA2NCxyZWFkX2RhdGEpOworICAgICAgICAgICAgICAgIGlmKHJlYWRfZGF0YSE9IDMyJ2g0NDU1NjY3NykgdGVzdF9mYWlsID0gMTsKKworCQl3Yl91c2VyX2NvcmVfcmVhZCgzMidoMzAwMjAwNjgscmVhZF9kYXRhKTsKKyAgICAgICAgICAgICAgICBpZihyZWFkX2RhdGEhPSAzMidoNTU2Njc3ODgpIHRlc3RfZmFpbCA9IDE7CisKKwkJd2JfdXNlcl9jb3JlX3JlYWQoMzInaDMwMDIwMDZDLHJlYWRfZGF0YSkgOworCSAgICAgICAgaWYocmVhZF9kYXRhICE9IDMyJ2g2Njc3ODg5OSkgdGVzdF9mYWlsID0gMTsKKworCSAgIAorCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkJICAgYGlmZGVmIEdMCisJICAgIAkgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBSaXNjIEJvb3QgKEdMKSBQYXNzZWQiKTsKKwkJICAgYGVsc2UKKwkJICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgUmlzYyBCb290IChSVEwpIFBhc3NlZCIpOworCQkgICBgZW5kaWYKKwkgICAgICAgIGVuZCBlbHNlIGJlZ2luCisJCSAgICBgaWZkZWYgR0wKKwkgICAgCSAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBSaXNjIEJvb3QgKEdMKSBGYWlsZWQiKTsKKwkJICAgIGBlbHNlCisJCSAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBSaXNjIEJvb3QgKFJUTCkgRmFpbGVkIik7CisJCSAgICBgZW5kaWYKKwkJIGVuZAorCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAkZmluaXNoOworCWVuZAorCisJaW5pdGlhbCBiZWdpbgorCQl3Yl9yc3RfaSA8PSAxJ2IxOworCQkjMTAwOworCQl3Yl9yc3RfaSA8PSAxJ2IwOwkgICAgCS8vIFJlbGVhc2UgcmVzZXQKKwllbmQKK3dpcmUgVVNFUl9WREQxVjggPSAxJ2IxOword2lyZSBWU1MgPSAxJ2IwOworCit1c2VyX3Byb2plY3Rfd3JhcHBlciB1X3RvcCgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIC52Y2NkMShVU0VSX1ZERDFWOCksCS8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgLnZzc2QxKFZTUyksCS8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgICAud2JfY2xrX2kgICAgICAgIChjbG9jayksICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAudXNlcl9jbG9jazIgICAgICgxJ2IxKSwgIC8vIFJlYWwtdGltZSBjbG9jaworICAgIC53Yl9yc3RfaSAgICAgICAgKHdiX3JzdF9pKSwgIC8vIFJlZ3VsYXIgUmVzZXQgc2lnbmFsCisKKyAgICAud2JzX2N5Y19pICAgKHdiZF9leHRfY3ljX2kpLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAud2JzX3N0Yl9pICAgKHdiZF9leHRfc3RiX2kpLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAud2JzX2Fkcl9pICAgKHdiZF9leHRfYWRyX2kpLCAgLy8gYWRkcmVzcworICAgIC53YnNfd2VfaSAgICAod2JkX2V4dF93ZV9pKSwgIC8vIHdyaXRlCisgICAgLndic19kYXRfaSAgICh3YmRfZXh0X2RhdF9pKSwgIC8vIGRhdGEgb3V0cHV0CisgICAgLndic19zZWxfaSAgICh3YmRfZXh0X3NlbF9pKSwgIC8vIGJ5dGUgZW5hYmxlCisKKyAgICAud2JzX2RhdF9vICAgKHdiZF9leHRfZGF0X28pLCAgLy8gZGF0YSBpbnB1dAorICAgIC53YnNfYWNrX28gICAod2JkX2V4dF9hY2tfbyksICAvLyBhY2tub3dsZWdlbWVudAorCisgCisgICAgLy8gTG9naWMgQW5hbHl6ZXIgU2lnbmFscworICAgIC5sYV9kYXRhX2luICAgICAgKCcxKSAsCisgICAgLmxhX2RhdGFfb3V0ICAgICAoKSwKKyAgICAubGFfb2VuYiAgICAgICAgICgnMCksCisgCisKKyAgICAvLyBJT3MKKyAgICAuaW9faW4gICAgICAgICAgKGlvX2luKSAgLAorICAgIC5pb19vdXQgICAgICAgICAoaW9fb3V0KSAsCisgICAgLmlvX29lYiAgICAgICAgIChpb19vZWIpICwKKworICAgIC51c2VyX2lycSAgICAgICAoKSAKKworKTsKKworYGlmbmRlZiBHTCAvLyBEcml2ZSBQb3dlciBmb3IgSG9sZCBGaXggQnVmCisgICAgLy8gQWxsIHN0YW5kYXJkIGNlbGwgbmVlZCBwb3dlciBob29rLXVwIGZvciBmdW5jdGlvbmFsaXR5IHdvcmsKKyAgICBpbml0aWFsIGJlZ2luCisKKyAgICBlbmQKK2BlbmRpZiAgICAKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBJbnRlZ3JhdGUgdGhlIFNlcmlhbCBmbGFzaCB3aXRoIHF1cmQgc3VwcG9ydCB0bworLy8gIHVzZXIgY29yZSB1c2luZyB0aGUgZ3BpbyBwYWRzCisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICB3aXJlIGZsYXNoX2NsayA9IGlvX291dFsyNF07CisgICB3aXJlIGZsYXNoX2NzYiA9IGlvX291dFsyOF07CisgICAvLyBDcmVhdGluZyBQYWQgRGVsYXkKKyAgIHdpcmUgIzEgaW9fb2ViXzI5ID0gaW9fb2ViWzI5XTsKKyAgIHdpcmUgIzEgaW9fb2ViXzMwID0gaW9fb2ViWzMwXTsKKyAgIHdpcmUgIzEgaW9fb2ViXzMxID0gaW9fb2ViWzMxXTsKKyAgIHdpcmUgIzEgaW9fb2ViXzMyID0gaW9fb2ViWzMyXTsKKyAgIHRyaSAgIzEgZmxhc2hfaW8wID0gKGlvX29lYl8yOT09IDEnYjApID8gaW9fb3V0WzI5XSA6IDEnYno7CisgICB0cmkgICMxIGZsYXNoX2lvMSA9IChpb19vZWJfMzA9PSAxJ2IwKSA/IGlvX291dFszMF0gOiAxJ2J6OworICAgdHJpICAjMSBmbGFzaF9pbzIgPSAoaW9fb2ViXzMxPT0gMSdiMCkgPyBpb19vdXRbMzFdIDogMSdiejsKKyAgIHRyaSAgIzEgZmxhc2hfaW8zID0gKGlvX29lYl8zMj09IDEnYjApID8gaW9fb3V0WzMyXSA6IDEnYno7CisKKyAgIGFzc2lnbiBpb19pblsyOV0gPSBmbGFzaF9pbzA7CisgICBhc3NpZ24gaW9faW5bMzBdID0gZmxhc2hfaW8xOworICAgYXNzaWduIGlvX2luWzMxXSA9IGZsYXNoX2lvMjsKKyAgIGFzc2lnbiBpb19pblszMl0gPSBmbGFzaF9pbzM7CisKKyAgIC8vIFF1YXJkIGZsYXNoCisgICAgIHMyNWZsMjU2cyAjKC5tZW1fZmlsZV9uYW1lKCJ1c2VyX3Jpc2NfYm9vdC5oZXgiKSwKKwkgICAgICAgICAub3RwX2ZpbGVfbmFtZSgibm9uZSIpLAorICAgICAgICAgICAgICAgICAuVGltaW5nTW9kZWwoIlMyNUZMNTEyU0FHTUZJMDEwX0ZfMzBwRiIpKSAKKwkJIHVfc3BpX2ZsYXNoXzI1Nm1iICgKKyAgICAgICAgICAgLy8gRGF0YSBJbnB1dHMvT3V0cHV0cworICAgICAgIC5TSSAgICAgIChmbGFzaF9pbzApLAorICAgICAgIC5TTyAgICAgIChmbGFzaF9pbzEpLAorICAgICAgIC8vIENvbnRyb2xzCisgICAgICAgLlNDSyAgICAgKGZsYXNoX2NsayksCisgICAgICAgLkNTTmVnICAgKGZsYXNoX2NzYiksCisgICAgICAgLldQTmVnICAgKGZsYXNoX2lvMiksCisgICAgICAgLkhPTEROZWcgKGZsYXNoX2lvMyksCisgICAgICAgLlJTVE5lZyAgKCF3Yl9yc3RfaSkKKworICAgICAgICk7CisKKworCisKK3Rhc2sgd2JfdXNlcl9jb3JlX3dyaXRlOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitpbnB1dCBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMTsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPWRhdGE7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naEY7ICAvLyBieXRlIGVuYWJsZQorICB3YmRfZXh0X2N5Y19pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YWl0KHdiZF9leHRfYWNrX28gPT0gMSk7CisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgJGRpc3BsYXkoIkRFQlVHIFdCIFVTRVIgQUNDRVNTIFdSSVRFIEFkZHJlc3MgOiAleCwgRGF0YSA6ICV4IixhZGRyZXNzLGRhdGEpOworICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CitlbmQKK2VuZHRhc2sKKwordGFzayAgd2JfdXNlcl9jb3JlX3JlYWQ7CitpbnB1dCBbMzE6MF0gYWRkcmVzczsKK291dHB1dCBbMzE6MF0gZGF0YTsKK3JlZyAgICBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPScwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICBkYXRhICA9IHdiZF9leHRfZGF0X287ICAKKyAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAjMTsKKyAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9hZHJfaSA9J2gwOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0naDA7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naDA7ICAvLyBieXRlIGVuYWJsZQorICAkZGlzcGxheSgiREVCVUcgV0IgVVNFUiBBQ0NFU1MgUkVBRCBBZGRyZXNzIDogJXgsIERhdGEgOiAleCIsYWRkcmVzcyxkYXRhKTsKKyAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworZW5kCitlbmR0YXNrCisKK2BpZmRlZiBHTAorCit3aXJlICAgICAgICB3YmRfc3BpX3N0Yl9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3N0Yl9pOword2lyZSAgICAgICAgd2JkX3NwaV9hY2tfbyAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9hY2tfbzsKK3dpcmUgICAgICAgIHdiZF9zcGlfd2VfaSAgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfd2VfaTsKK3dpcmUgWzMxOjBdIHdiZF9zcGlfYWRyX2kgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfYWRyX2k7Cit3aXJlIFszMTowXSB3YmRfc3BpX2RhdF9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX2RhdF9pOword2lyZSBbMzE6MF0gd2JkX3NwaV9kYXRfbyAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9kYXRfbzsKK3dpcmUgWzM6MF0gIHdiZF9zcGlfc2VsX2kgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfc2VsX2k7CisKK3dpcmUgICAgICAgIHdiZF9zZHJhbV9zdGJfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9zdGJfaTsKK3dpcmUgICAgICAgIHdiZF9zZHJhbV9hY2tfbyA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9hY2tfbzsKK3dpcmUgICAgICAgIHdiZF9zZHJhbV93ZV9pICA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl93ZV9pOword2lyZSBbMzE6MF0gd2JkX3NkcmFtX2Fkcl9pID0gdV90b3AudV9zZHJhbV9jdHJsLndiX2FkZHJfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9kYXRfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9kYXRfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9kYXRfbyA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9kYXRfbzsKK3dpcmUgWzM6MF0gIHdiZF9zZHJhbV9zZWxfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9zZWxfaTsKKword2lyZSAgICAgICAgd2JkX3VhcnRfc3RiX2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2NzOword2lyZSAgICAgICAgd2JkX3VhcnRfYWNrX28gID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2FjazsKK3dpcmUgICAgICAgIHdiZF91YXJ0X3dlX2kgICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ193cjsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2Fkcl9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19hZGRyOword2lyZSBbNzowXSAgd2JkX3VhcnRfZGF0X2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX3dkYXRhOword2lyZSBbNzowXSAgd2JkX3VhcnRfZGF0X28gID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX3JkYXRhOword2lyZSAgICAgICAgd2JkX3VhcnRfc2VsX2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2JlOworCitgZW5kaWYKKworLyoqCitgaWZkZWYgR0wKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJJU0MgSU1FTSBhbWQgRE1FTSBNb25pdG9yaW5nIFRBU0sKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYGRlZmluZSBSSVNDX0NPUkUgIHVzZXJfdWFydF90Yi51X3RvcC51X2NvcmUudV9yaXNjdl90b3AKKworYWx3YXlzQChwb3NlZGdlIGBSSVNDX0NPUkUud2JfY2xrKSBiZWdpbgorICAgIGlmKGBSSVNDX0NPUkUud2JkX2ltZW1fYWNrX2kpCisgICAgICAgICAgJGRpc3BsYXkoIlJJU0NWLURFQlVHID0+IElNRU0gQUREUkVTUzogJXggUmVhZCBEYXRhIDogJXgiLCBgUklTQ19DT1JFLndiZF9pbWVtX2Fkcl9vLGBSSVNDX0NPUkUud2JkX2ltZW1fZGF0X2kpOworICAgIGlmKGBSSVNDX0NPUkUud2JkX2RtZW1fYWNrX2kgJiYgYFJJU0NfQ09SRS53YmRfZG1lbV93ZV9vKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBETUVNIEFERFJFU1M6ICV4IFdyaXRlIERhdGE6ICV4IFJlc29uc2U6ICV4IiwgYFJJU0NfQ09SRS53YmRfZG1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9kbWVtX2RhdF9vKTsKKyAgICBpZihgUklTQ19DT1JFLndiZF9kbWVtX2Fja19pICYmICFgUklTQ19DT1JFLndiZF9kbWVtX3dlX28pCisgICAgICAgICAgJGRpc3BsYXkoIlJJU0NWLURFQlVHID0+IERNRU0gQUREUkVTUzogJXggUkVBRCBEYXRhIDogJXggUmVzb25zZTogJXgiLCBgUklTQ19DT1JFLndiZF9kbWVtX2Fkcl9vLGBSSVNDX0NPUkUud2JkX2RtZW1fZGF0X2kpOworZW5kCisKK2BlbmRpZgorKiovCitlbmRtb2R1bGUKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3Jpc2NfYm9vdC91c2VyX3VhcnQuYyBiL3Zlcmlsb2cvZHYvdXNlcl9yaXNjX2Jvb3QvdXNlcl91YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ1MTJiYwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9yaXNjX2Jvb3QvdXNlcl91YXJ0LmMKQEAgLTAsMCArMSw2MCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjZGVmaW5lIFNDX1NJTV9PVVRQT1JUICgweGYwMDAwMDAwKQorI2RlZmluZSB1aW50MzJfdCAgbG9uZworCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzAgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDAwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAwNCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMiAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMDgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzMgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDBDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc0ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAxMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNSAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMTQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzYgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDE4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc3ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAxQykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnOCAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMjApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzkgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDI0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxMCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAyOCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTEgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMkMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzEyICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDMwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxMyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAzNCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTQgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMzgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE1ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDNDKQorCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnMCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAxMDAwMCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWcxICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDEwMDA0KQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzIgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMTAwMDgpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnMyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAxMDAwQykKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc0ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDEwMDEwKQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzUgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMTAwMTQpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnNiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAxMDAxOCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc3ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDEwMDFDKQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzggKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMTAwMjApCisKK2ludCBtYWluKCkKK3sKKworICAgIHdoaWxlKDEpIHsKKyAgICAgICAvLyBDaGVjayBVQVJUIFJYIGZpZm8gaGFzIGRhdGEsIGlmIGF2YWlsYWJsZSBsb29wIGJhY2sgdGhlIGRhdGEKKyAgICAgICBpZihyZWdfbXByal91YXJ0X3JlZzggIT0gMCkgeyAKKwkgICByZWdfbXByal91YXJ0X3JlZzUgPSByZWdfbXByal91YXJ0X3JlZzY7CisgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3Jpc2Nfc29mdF9ib290L01ha2VmaWxlIGIvdmVyaWxvZy9kdi91c2VyX3Jpc2Nfc29mdF9ib290L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZjY1YmUKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfcmlzY19zb2Z0X2Jvb3QvTWFrZWZpbGUKQEAgLTAsMCArMSwxMTEgQEAKKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKworIyMgQ2FyYXZlbCBQb2ludGVycworQ0FSQVZFTF9ST09UID89IC4uLy4uLy4uL2NhcmF2ZWwKK0NBUkFWRUxfUEFUSCA/PSAkKENBUkFWRUxfUk9PVCkKK0NBUkFWRUxfRklSTVdBUkVfUEFUSCA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nL2R2L2NhcmF2ZWwKK0NBUkFWRUxfVkVSSUxPR19QQVRIICA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nCitDQVJBVkVMX1JUTF9QQVRIID0gJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkvcnRsCitDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUyA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL2R2L2NhcmF2ZWwKKworCisjIyBVc2VyIFByb2plY3QgUG9pbnRlcnMKK1VQUkpfVkVSSUxPR19QQVRIID89IC4uLy4uLy4uL3Zlcmlsb2cKK1VQUkpfUlRMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9ydGwKK1VQUkpfR0xfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2dsCitVUFJKX0JFSEFWSU9VUkFMX01PREVMUyA9IC4uL21vZGVsCitVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUyA9IC4uL2FnZW50cworVVBSSl9JTkNMVURFX1BBVEgxID0gJChVUFJKX1JUTF9QQVRIKS95aWZpdmUveWNyMWMvc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDIgPSAkKFVQUkpfUlRMX1BBVEgpL3NkcmFtX2N0cmwvc3JjL2RlZnMKK1VQUkpfSU5DTFVERV9QQVRIMyA9ICQoVVBSSl9SVExfUEFUSCkvaTJjbS9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRINCA9ICQoVVBSSl9SVExfUEFUSCkvdXNiMV9ob3N0L3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEg1ID0gJChVUFJKX1JUTF9QQVRIKS9tYmlzdC9pbmNsdWRlCisKKyMjIFlJRklWRSBGSVJNV0FSRQorWUlGSVZFX0ZJUk1XQVJFX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9kdi9maXJtd2FyZQorR0NDNjRfUFJFRklYPz1yaXNjdjY0LXVua25vd24tZWxmCisKKyMjIFJJU0NWIEdDQyAKK0dDQ19QQVRIPz0vZWYvYXBwcy9iaW4KK0dDQzMyX1BSRUZJWD89cmlzY3YzMi11bmtub3duLWVsZgorUERLX1BBVEg/PS9lZi90ZWNoL1NXL3NreTEzMEEKKworIyMgU2ltdWxhdGlvbiBtb2RlOiBSVEwvR0wKK1NJTT89UlRMCitEVU1QPz1PRkYKKworLlNVRkZJWEVTOgorCitQQVRURVJOID0gdXNlcl9yaXNjX3NvZnRfYm9vdAorCithbGw6ICAke1BBVFRFUk46PS52Y2R9CisKK2hleDogICR7UEFUVEVSTjo9LmhleH0KKwordnZwOiAgJHtQQVRURVJOOj0udnZwfQorCislLnZ2cDogJV90Yi52CisJJHtHQ0M2NF9QUkVGSVh9LWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0wIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSSQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpICB1c2VyX3Jpc2NfYm9vdC5jIC1vIHVzZXJfcmlzY19ib290Lm8KKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIC1EX19SVkNfRVhUIC1zdGF0aWMgLXN0ZD1nbnU5OSAtZm5vLWNvbW1vbiAtZm5vLWJ1aWx0aW4tcHJpbnRmIC1EVENNPTAgLVdhLC1tYXJjaD1ydjMyaW1jIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1ERkxBR1NfU1RSPVwiIi1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIlwiICAtRF9fQVNTRU1CTFlfXz0xIC1jIC1JLi8gLUkkKFlJRklWRV9GSVJNV0FSRV9QQVRIKSAgJChZSUZJVkVfRklSTVdBUkVfUEFUSCkvY3J0LlMgLW8gY3J0Lm8KKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1vIHVzZXJfcmlzY19ib290LmVsZiAtVCAkKFlJRklWRV9GSVJNV0FSRV9QQVRIKS9saW5rLmxkIHVzZXJfcmlzY19ib290Lm8gY3J0Lm8gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1OCisJJHtHQ0M2NF9QUkVGSVh9LW9iamNvcHkgLU8gdmVyaWxvZyB1c2VyX3Jpc2NfYm9vdC5lbGYgdXNlcl9yaXNjX2Jvb3QuaGV4CisJJHtHQ0M2NF9QUkVGSVh9LW9iamR1bXAgLUQgdXNlcl9yaXNjX2Jvb3QuZWxmID4gdXNlcl9yaXNjX2Jvb3QuZHVtcAorCXJtIGNydC5vIHVzZXJfcmlzY19ib290Lm8KK2lmZXEgKCQoU0lNKSxSVEwpCisgICBpZmVxICgkKERVTVApLE9GRikKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfQUdFTlRTKSAgICBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDEpICAgIC1JICQoVVBSSl9JTkNMVURFX1BBVEgyKSAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMykgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEg0KSAtSSAkKFVQUkpfSU5DTFVERV9QQVRINSkgXAorCSQ8IC1vICRAIAorICAgIGVsc2UgIAorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtRFdGRFVNUCAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICBlbmRpZgorZWxzZSAgCisJaXZlcmlsb2cgLWcyMDA1LXN2IC1ERlVOQ1RJT05BTCAtRFNJTSAtREdMIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIC1JICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKFVQUkpfR0xfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwkkPCAtbyAkQCAKK2VuZGlmCisKKyUudmNkOiAlLnZ2cAorCXZ2cCAkPAorCislLmVsZjogJS5jICQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zZWN0aW9ucy5sZHMgJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3N0YXJ0LnMKKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1JICQoQ0FSQVZFTF9QQVRIKSAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtV2wsLUJzdGF0aWMsLVQsJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3NlY3Rpb25zLmxkcywtLXN0cmlwLWRlYnVnIC1mZnJlZXN0YW5kaW5nIC1ub3N0ZGxpYiAtbyAkQCAkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc3RhcnQucyAkPAorCislLmhleDogCisJZWNobyBAIlRoaXMgaXMgdXNlciBib290IHRlc3QsIG5vdGluZyB0byBjb21waWxlIHRoZSBtYW5nbWVudCBjb3JlIGNvZGUiCisKKyUuYmluOiAlLmVsZgorCSR7R0NDNjRfUFJFRklYfS1vYmpjb3B5IC1PIGJpbmFyeSAkPCAvZGV2L3N0ZG91dCB8IHRhaWwgLWMgKzEwNDg1NzcgPiAkQAorCisjIC0tLS0gQ2xlYW4gLS0tLQorCitjbGVhbjoKKwlybSAtZiAqLmVsZiAqLmhleCAqLmJpbiAqLnZ2cCAqLnZjZCAqLmxvZyAqLmR1bXAKKworLlBIT05ZOiBjbGVhbiBoZXggYWxsCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfcmlzY19zb2Z0X2Jvb3QvcnVuX2l2ZXJpbG9nIGIvdmVyaWxvZy9kdi91c2VyX3Jpc2Nfc29mdF9ib290L3J1bl9pdmVyaWxvZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NjQxNGY4Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3Jpc2Nfc29mdF9ib290L3J1bl9pdmVyaWxvZwpAQCAtMCwwICsxLDQ5IEBACisjIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworIyAvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorIyAvLyAKKyMgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIC8vCisjIC8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIC8vCisjIC8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisjIC8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorIyAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uICB1c2VyX3Jpc2NfYm9vdC5jIC1vIHVzZXJfcmlzY19ib290Lm8KKworcmlzY3Y2NC11bmtub3duLWVsZi1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1EX19BU1NFTUJMWV9fPTEgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uLyAgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vY3J0X3RjbS5TIC1vIGNydF90Y20ubworCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtbyB1c2VyX3Jpc2NfYm9vdC5lbGYgLVQgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vbGlua190Y20ubGQgdXNlcl9yaXNjX2Jvb3QubyBjcnRfdGNtLm8gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyCisKK3Jpc2N2NjQtdW5rbm93bi1lbGYtb2JqY29weSAtTyB2ZXJpbG9nIHVzZXJfcmlzY19ib290LmVsZiB1c2VyX3Jpc2NfYm9vdC5oZXgKKworcmlzY3Y2NC11bmtub3duLWVsZi1vYmpkdW1wIC1EIHVzZXJfcmlzY19ib290LmVsZiA+IHVzZXJfcmlzY19ib290LmR1bXAKKworcm0gY3J0X3RjbS5vIHVzZXJfcmlzY19ib290Lm8KKworI2l2ZXJpbG9nIHdpdGggd2F2ZWZvcm0gZHVtcAorCitpdmVyaWxvZyAtZzIwMDUtc3YgLURXRkRVTVAgIC1ERlVOQ1RJT05BTCAtRFNJTSAtSSAkUERLX1BBVEggXAorLUkgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL2NhcmF2ZWwvdmVyaWxvZy9kdi9jYXJhdmVsIC1JIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3Jpc2NkdWluby9jYXJhdmVsL3Zlcmlsb2cvcnRsIFwKKy1JIC4uL21vZGVsICAgIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsIC1JIC4uLy4uLy4uL3Zlcmlsb2cgXAorLUkgLi4vYWdlbnRzICAgIFwKKy1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcyAgICAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL2kyY20vc3JjL2luY2x1ZGVzIFwKKy1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMgLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwvbWJpc3QvaW5jbHVkZSBcCit1c2VyX3Jpc2Nfc29mdF9ib290X3RiLnYgLW8gdXNlcl9yaXNjX3NvZnRfYm9vdC52dnAgCisKKworI2l2ZXJpbG9nIC1nMjAwNS1zdiAtSSAkUERLX1BBVEggLURGVU5DVElPTkFMIC1EU0lNIC1JICAuLi8uLi8uLi9jYXJhdmVsL3Zlcmlsb2cvcnRsIC1JIC4uLyAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bCAtSSAuLi8uLi8uLi92ZXJpbG9nIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcyAgIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL2RlZnMgLUkgJENBUkFWRUxfUk9PVC92ZXJpbG9nL2R2L2NhcmF2ZWwgLUkgLi4vbW9kZWwgLUkgLi4vYWdlbnRzIHVzZXJfcmlzY19ib290X3RiLnYgLW8gdXNlcl9yaXNjX2Jvb3RfdGIudnZwCisKKyMgR0xTCisjaXZlcmlsb2cgLWcyMDA1LXN2IC1ER0wgLUkgJFBES19QQVRIIC1JICAuLi8uLi8uLi9jYXJhdmVsL3Zlcmlsb2cvcnRsICAtSSAuLi8gLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwgLUkgLi4vLi4vLi4vdmVyaWxvZyAtSSAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL3Bkay9za3kxMzBBIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcyAgIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL2RlZnMgLUkgJENBUkFWRUxfUk9PVC92ZXJpbG9nL2R2L2NhcmF2ZWwgLUkgLi4vbW9kZWwgLUkgLi4vYWdlbnRzIHVzZXJfdWFydF90Yi52IC1vIHVzZXJfcmlzY19ib290X3RiLnZ2cAorCit2dnAgdXNlcl9yaXNjX3NvZnRfYm9vdC52dnAgfCB0ZWUgdGVzdC5sb2cKKworXHJtIC1yZiB1c2VyX3Jpc2Nfc29mdF9ib290LnZ2cApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3Jpc2Nfc29mdF9ib290L3VzZXJfcmlzY19ib290LmMgYi92ZXJpbG9nL2R2L3VzZXJfcmlzY19zb2Z0X2Jvb3QvdXNlcl9yaXNjX2Jvb3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2U0MjRiCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3Jpc2Nfc29mdF9ib290L3VzZXJfcmlzY19ib290LmMKQEAgLTAsMCArMSw3MyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2RlZmluZSBTQ19TSU1fT1VUUE9SVCAoMHhmMDAwMDAwMCkKKyNkZWZpbmUgdWludDMyX3QgIGxvbmcKKworI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcwICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAwMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMSAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMDQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDA4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWczICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAwQykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNCAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMTApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzUgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDE0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc2ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAxOCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNyAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMUMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzggICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDIwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc5ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAyNCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMjgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzExICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDJDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxMiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAzMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTMgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMzQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE0ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDM4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxNSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAzQykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTYgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwNDApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE3ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDQ0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxOCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDA0OCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTkgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwNEMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIwICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDUwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyMSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDA1NCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjIgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwNTgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIzICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDVDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyNCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDA2MCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjUgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwNjQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzI2ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDY4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyNyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDA2QykKKworaW50IG1haW4oKQoreworCisgICAgLy92b2xhdGlsZSBsb25nICpvdXRfcHRyID0gKHZvbGF0aWxlIGxvbmcqKVNDX1NJTV9PVVRQT1JUOworICAgIC8vKm91dF9wdHIgPSAweEFBQkJDQ0REOworICAgIC8vKm91dF9wdHIgPSAweEJCQ0NEREVFOworICAgIC8vKm91dF9wdHIgPSAweENDRERFRUZGOworICAgIC8vKm91dF9wdHIgPSAweERERUVGRjAwOworCisgICAgLy8gV3JpdGUgc29mdHdhcmUgV3JpdGUgJiBSZWFkIFJlZ2lzdGVyCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjIgID0gMHgxMTIyMzM0NDsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjMgID0gMHgyMjMzNDQ1NTsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjQgID0gMHgzMzQ0NTU2NjsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjUgID0gMHg0NDU1NjY3NzsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjYgPSAweDU1NjY3Nzg4OyAKKyAgICByZWdfbXByal9nbG9ibF9yZWcyNyA9IDB4NjY3Nzg4OTk7IAorICAgIC8vcmVnX21wcmpfZ2xvYmxfcmVnMTIgPSAweDc3ODg5OUFBOyAKKyAgICAvL3JlZ19tcHJqX2dsb2JsX3JlZzEzID0gMHg4ODk5QUFCQjsgCisgICAgLy9yZWdfbXByal9nbG9ibF9yZWcxNCA9IDB4OTlBQUJCQ0M7IAorICAgIC8vcmVnX21wcmpfZ2xvYmxfcmVnMTUgPSAweEFBQkJDQ0REOyAKKworICAgIHdoaWxlKDEpIHt9CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfcmlzY19zb2Z0X2Jvb3QvdXNlcl9yaXNjX3NvZnRfYm9vdF90Yi52IGIvdmVyaWxvZy9kdi91c2VyX3Jpc2Nfc29mdF9ib290L3VzZXJfcmlzY19zb2Z0X2Jvb3RfdGIudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmEyOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3Jpc2Nfc29mdF9ib290L3VzZXJfcmlzY19zb2Z0X2Jvb3RfdGIudgpAQCAtMCwwICsxLDQwNyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogIDIwMjEgLCBEaW5lc2ggQW5uYXl5YQorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogTW9kaWZpZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFN0YW5kYWxvbmUgVXNlciB2YWxpZGF0aW9uIFRlc3QgYmVuY2ggICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICBUaGlzIGlzIGEgc3RhbmRhbG9uZSB0ZXN0IGJlbmNoIHRvIHZhbGlkYXRlIHRoZSAgICAgICAgICAgIC8vLy8KKy8vLy8gICBEaWdpdGFsIGNvcmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAxLiBVc2VyIFJpc2MgY29yZSBpcyBib290ZWQgdXNpbmcgIGNvbXBpbGVkIGNvZGUgb2YgICAgICAgIC8vLy8KKy8vLy8gICAgICB1c2VyX3Jpc2NfYm9vdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAyLiBVc2VyIFJpc2MgY29yZSB1c2VzIFNlcmlhbCBGbGFzaCBhbmQgU0RSQU0gdG8gYm9vdCAgICAgIC8vLy8KKy8vLy8gICAzLiBBZnRlciBzdWNjZXNzZnVsIGJvb3QsIFJpc2MgY29yZSB3aWxsICB3cml0ZSBzaWduYXR1cmUgIC8vLy8KKy8vLy8gICAgICBpbiB0byAgdXNlciByZWdpc3RlciBmcm9tIDB4MTAwM18wMDU4IHRvIDB4MTAwM18wMDZDICAgIC8vLy8KKy8vLy8gICA0LiBUaHJvdWdoIHRoZSBFeHRlcm5hbCBXaXNoYm9uZSBJbnRlcmZhY2Ugd2UgcmVhZCBiYWNrICAgIC8vLy8KKy8vLy8gICAgICAgZnJvbSAweDMwMDNfMDA1OCB0byAweDMwMDNfMDA2QyAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgYW5kIHZhbGlkYXRlIHRoZSB1c2VyIHJlZ2lzdGVyIHRvIGRlY2xhcmVkIHBhc3MgZmFpbCAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMTZ0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYGRlZmF1bHRfbmV0dHlwZSB3aXJlCisKK2B0aW1lc2NhbGUgMSBucyAvIDEgbnMKKworYGluY2x1ZGUgInVwcmpfbmV0bGlzdHMudiIKKworbW9kdWxlIHVzZXJfcmlzY19zb2Z0X2Jvb3RfdGI7CisJcmVnIGNsb2NrOworCXJlZyB3Yl9yc3RfaTsKKwlyZWcgcG93ZXIxLCBwb3dlcjI7CisJcmVnIHBvd2VyMywgcG93ZXI0OworCisgICAgICAgIHJlZyAgICAgICAgd2JkX2V4dF9jeWNfaTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgIHJlZyAgICAgICAgd2JkX2V4dF9zdGJfaTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgIHJlZyBbMzE6MF0gd2JkX2V4dF9hZHJfaTsgIC8vIGFkZHJlc3MKKyAgICAgICAgcmVnICAgICAgICB3YmRfZXh0X3dlX2k7ICAvLyB3cml0ZQorICAgICAgICByZWcgWzMxOjBdIHdiZF9leHRfZGF0X2k7ICAvLyBkYXRhIG91dHB1dAorICAgICAgICByZWcgWzM6MF0gIHdiZF9leHRfc2VsX2k7ICAvLyBieXRlIGVuYWJsZQorCisgICAgICAgIHdpcmUgWzMxOjBdIHdiZF9leHRfZGF0X287ICAvLyBkYXRhIGlucHV0CisgICAgICAgIHdpcmUgICAgICAgIHdiZF9leHRfYWNrX287ICAvLyBhY2tub3dsZWdlbWVudAorICAgICAgICB3aXJlICAgICAgICB3YmRfZXh0X2Vycl9vOyAgLy8gZXJyb3IKKworCS8vIFVzZXIgSS9PCisJd2lyZSBbMzc6MF0gaW9fb2ViOworCXdpcmUgWzM3OjBdIGlvX291dDsKKwl3aXJlIFszNzowXSBpb19pbjsKKworCXdpcmUgZ3BpbzsKKwl3aXJlIFszNzowXSBtcHJqX2lvOworCXdpcmUgWzc6MF0gbXByal9pb18wOworCXJlZyAgICAgICAgIHRlc3RfZmFpbDsKKwlyZWcgWzMxOjBdIHJlYWRfZGF0YTsKKwlsb2dpYyAgWzc6MF0gICAgICAgICAgIHRlbV9tZW1bMDo0MDk1XTsKKwlsb2dpYyAgWzMxOjBdICAgICAgICAgIHRlbV9tZW1fMzJiWzA6NTExXTsKKworCWBpZmRlZiBWRVJJTEFUT1IKKwkgbG9naWMgWzI1NTowXSAgICAgICAgICB0ZXN0X3JhbV9maWxlOworICAgICAgICAgYGVsc2UgLy8gVkVSSUxBVE9SCisJIAorCSAgICBzdHJpbmcgICAgICAgICAgICAgICAgIHRlc3RfcmFtX2ZpbGU7CisKKyAgICAgICAgIGBlbmRpZiAvLyBWRVJJTEFUT1IKKworICAgICAgICAgaW50ZWdlciBpOworCisKKwkvLyBFeHRlcm5hbCBjbG9jayBpcyB1c2VkIGJ5IGRlZmF1bHQuICBNYWtlIHRoaXMgYXJ0aWZpY2lhbGx5IGZhc3QgZm9yIHRoZQorCS8vIHNpbXVsYXRpb24uICBOb3JtYWxseSB0aGlzIHdvdWxkIGJlIGEgc2xvdyBjbG9jayBhbmQgdGhlIGRpZ2l0YWwgUExMCisJLy8gd291bGQgYmUgdGhlIGZhc3QgY2xvY2suCisKKwlhbHdheXMgIzEyLjUgY2xvY2sgPD0gKGNsb2NrID09PSAxJ2IwKTsKKworCWluaXRpYWwgYmVnaW4KKwkJY2xvY2sgPSAwOworICAgICAgICAgICAgICAgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9zdGJfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgICAgICAgICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgICAgICAgICAgICAgICAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgICAgICAgICAgICAgICB3YmRfZXh0X2RhdF9pID0naDA7ICAvLyBkYXRhIG91dHB1dAorICAgICAgICAgICAgICAgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisJZW5kCisKKwlgaWZkZWYgV0ZEVU1QCisJICAgaW5pdGlhbCBiZWdpbgorCSAgIAkkZHVtcGZpbGUoInNpbXgudmNkIik7CisJICAgCSRkdW1wdmFycyg0LCB1c2VyX3Jpc2Nfc29mdF9ib290X3RiLnVfdG9wKTsKKwkgICAJLy8kZHVtcHZhcnMoMywgdXNlcl9yaXNjX3NvZnRfYm9vdF90Yi51X3RvcC51X3Jpc2N2X3RvcCk7CisJICAgZW5kCisgICAgICAgYGVuZGlmCisKKwlpbml0aWFsIGJlZ2luCisKKwkJIzIwMDsgLy8gV2FpdCBmb3IgcmVzZXQgcmVtb3ZhbAorCSAgICAgICAgcmVwZWF0ICgxMCkgQChwb3NlZGdlIGNsb2NrKTsKKwkJJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBSaXNjIEJvb3QgVGVzdCBTdGFydGVkIik7CisKKwkJLy8gUmVtb3ZlIFdiIFJlc2V0CisJCXdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCwnaDEpOworCisJCSRyZWFkbWVtaCgidXNlcl9yaXNjX2Jvb3QuaGV4Iix0ZW1fbWVtKTsKKwkJLy8gY29udmVydCA4IGJpdCAzMiBtZW0gZm9ybWF0CisJCWZvcihpID0wOyBpIDwgNTExOyBpID0gaSsxKQorCQkgICB0ZW1fbWVtXzMyYltpXSA9IHt0ZW1fbWVtWyhpKjQpKzNdLHRlbV9tZW1bKGkqNCkrMl0sdGVtX21lbVsoaSo0KSsxXSx0ZW1fbWVtWyhpKjQpXX07CisKKwkgICAgICAgICR3cml0ZW1lbWgoInNyYW1fYmFuazAuaGV4Iix0ZW1fbWVtXzMyYiwwLDUxMSk7CisJICAgICAgICAkcmVhZG1lbWgoInNyYW1fYmFuazAuaGV4Iix1X3RvcC51X3NyYW0wXzJrYi5tZW0sMCw1MTEpOworCisJCWZvcihpID01MTI7IGkgPCAxMDIzOyBpID0gaSsxKQorCQkgICB0ZW1fbWVtXzMyYltpLTUxMl0gPSB7dGVtX21lbVsoaSo0KSszXSx0ZW1fbWVtWyhpKjQpKzJdLHRlbV9tZW1bKGkqNCkrMV0sdGVtX21lbVsoaSo0KV19OworCisJICAgICAgICAkd3JpdGVtZW1oKCJzcmFtX2JhbmsxLmhleCIsdGVtX21lbV8zMmIsMCw1MTEpOworCSAgICAgICAgJHJlYWRtZW1oKCJzcmFtX2JhbmsxLmhleCIsdV90b3AudV9zcmFtMV8ya2IubWVtLDAsNTExKTsKKworCQkvLyBFbmFibGUgdGhlIFNSQU0gUmVtYXAgdG8gYm9vdCByZWdpb24KKwkJd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDBDLHs0J2IxMTExLDI4J2gwfSk7CisJICAgICAgICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CisJCSMxOworCQkvLyBSZW1vdmUgdGhlIHJlc2V0LCBtYmlzdCwgd2lzaGJvbmUsIHJpc2N2CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLCdoOEYpOworCisKKwkJLy8gUmVwZWF0IGN5Y2xlcyBvZiAxMDAwIGNsb2NrIGVkZ2VzIGFzIG5lZWRlZCB0byBjb21wbGV0ZSB0ZXN0YmVuY2gKKwkJcmVwZWF0ICgyNCkgYmVnaW4KKwkJCXJlcGVhdCAoNTAwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkJLy8kZGlzcGxheSgiKzUwMCBjeWNsZXMiKTsKKwkJZW5kCisKKworCQkkZGlzcGxheSgiTW9uaXRvcjogUmVhZGluZyBCYWNrIHRoZSBleHBlY3RlZCB2YWx1ZSIpOworCQkvLyBVc2VyIFJJU0MgY29yZSBleHBlY3QgdG8gd3JpdGUgdGhlc2UgdmFsdWUgaW4gZ2xvYmFsCisJCS8vIHJlZ2lzdGVyLCByZWFkIGJhY2sgYW5kIGRlY2lkZSBvbiBwYXNzIGZhaWwKKwkJLy8gMHgzMDAwMDAxOCAgPSAweDExMjIzMzQ0OyAKKyAgICAgICAgICAgICAgICAvLyAweDMwMDAwMDFDICA9IDB4MjIzMzQ0NTU7IAorICAgICAgICAgICAgICAgIC8vIDB4MzAwMDAwMjAgID0gMHgzMzQ0NTU2NjsgCisgICAgICAgICAgICAgICAgLy8gMHgzMDAwMDAyNCAgPSAweDQ0NTU2Njc3OyAKKyAgICAgICAgICAgICAgICAvLyAweDMwMDAwMDI4ID0gMHg1NTY2Nzc4ODsgCisgICAgICAgICAgICAgICAgLy8gMHgzMDAwMDAyQyA9IDB4NjY3Nzg4OTk7IAorCisgICAgICAgICAgICAgICAgdGVzdF9mYWlsID0gMDsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDMwMDIwMDU4LHJlYWRfZGF0YSwzMidoMTEyMjMzNDQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMzAwMjAwNUMscmVhZF9kYXRhLDMyJ2gyMjMzNDQ1NSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gzMDAyMDA2MCxyZWFkX2RhdGEsMzInaDMzNDQ1NTY2KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDMwMDIwMDY0LHJlYWRfZGF0YSwzMidoNDQ1NTY2NzcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMzAwMjAwNjgscmVhZF9kYXRhLDMyJ2g1NTY2Nzc4OCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gzMDAyMDA2QyxyZWFkX2RhdGEsMzInaDY2Nzc4ODk5KSA7CisKKwkgICAKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICAJaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisJCSAgIGBpZmRlZiBHTAorCSAgICAJICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgUmlzYyBCb290IChHTCkgUGFzc2VkIik7CisJCSAgIGBlbHNlCisJCSAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFJpc2MgQm9vdCAoUlRMKSBQYXNzZWQiKTsKKwkJICAgYGVuZGlmCisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCQkgICAgYGlmZGVmIEdMCisJICAgIAkgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgUmlzYyBCb290IChHTCkgRmFpbGVkIik7CisJCSAgICBgZWxzZQorCQkgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgUmlzYyBCb290IChSVEwpIEZhaWxlZCIpOworCQkgICAgYGVuZGlmCisJCSBlbmQKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgJGZpbmlzaDsKKwllbmQKKworCWluaXRpYWwgYmVnaW4KKwkJd2JfcnN0X2kgPD0gMSdiMTsKKwkJIzEwMDsKKwkJd2JfcnN0X2kgPD0gMSdiMDsJICAgIAkvLyBSZWxlYXNlIHJlc2V0CisJZW5kCit3aXJlIFVTRVJfVkREMVY4ID0gMSdiMTsKK3dpcmUgVlNTID0gMSdiMDsKKwordXNlcl9wcm9qZWN0X3dyYXBwZXIgdV90b3AoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAudmNjZDEoVVNFUl9WREQxVjgpLAkvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgIC52c3NkMShWU1MpLAkvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisgICAgLndiX2Nsa19pICAgICAgICAoY2xvY2spLCAgLy8gU3lzdGVtIGNsb2NrCisgICAgLnVzZXJfY2xvY2syICAgICAoMSdiMSksICAvLyBSZWFsLXRpbWUgY2xvY2sKKyAgICAud2JfcnN0X2kgICAgICAgICh3Yl9yc3RfaSksICAvLyBSZWd1bGFyIFJlc2V0IHNpZ25hbAorCisgICAgLndic19jeWNfaSAgICh3YmRfZXh0X2N5Y19pKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgLndic19zdGJfaSAgICh3YmRfZXh0X3N0Yl9pKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgLndic19hZHJfaSAgICh3YmRfZXh0X2Fkcl9pKSwgIC8vIGFkZHJlc3MKKyAgICAud2JzX3dlX2kgICAgKHdiZF9leHRfd2VfaSksICAvLyB3cml0ZQorICAgIC53YnNfZGF0X2kgICAod2JkX2V4dF9kYXRfaSksICAvLyBkYXRhIG91dHB1dAorICAgIC53YnNfc2VsX2kgICAod2JkX2V4dF9zZWxfaSksICAvLyBieXRlIGVuYWJsZQorCisgICAgLndic19kYXRfbyAgICh3YmRfZXh0X2RhdF9vKSwgIC8vIGRhdGEgaW5wdXQKKyAgICAud2JzX2Fja19vICAgKHdiZF9leHRfYWNrX28pLCAgLy8gYWNrbm93bGVnZW1lbnQKKworIAorICAgIC8vIExvZ2ljIEFuYWx5emVyIFNpZ25hbHMKKyAgICAubGFfZGF0YV9pbiAgICAgICgnMSkgLAorICAgIC5sYV9kYXRhX291dCAgICAgKCksCisgICAgLmxhX29lbmIgICAgICAgICAoJzApLAorIAorCisgICAgLy8gSU9zCisgICAgLmlvX2luICAgICAgICAgIChpb19pbikgICwKKyAgICAuaW9fb3V0ICAgICAgICAgKGlvX291dCkgLAorICAgIC5pb19vZWIgICAgICAgICAoaW9fb2ViKSAsCisKKyAgICAudXNlcl9pcnEgICAgICAgKCkgCisKKyk7CisKK2BpZm5kZWYgR0wgLy8gRHJpdmUgUG93ZXIgZm9yIEhvbGQgRml4IEJ1ZgorICAgIC8vIEFsbCBzdGFuZGFyZCBjZWxsIG5lZWQgcG93ZXIgaG9vay11cCBmb3IgZnVuY3Rpb25hbGl0eSB3b3JrCisgICAgaW5pdGlhbCBiZWdpbgorCisgICAgZW5kCitgZW5kaWYgICAgCisKKworCit0YXNrIHdiX3VzZXJfY29yZV93cml0ZTsKK2lucHV0IFszMTowXSBhZGRyZXNzOworaW5wdXQgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDE7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID1kYXRhOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisgICRkaXNwbGF5KCJERUJVRyBXQiBVU0VSIEFDQ0VTUyBXUklURSBBZGRyZXNzIDogJXgsIERhdGEgOiAleCIsYWRkcmVzcyxkYXRhKTsKKyAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworZW5kCitlbmR0YXNrCisKK3Rhc2sgIHdiX3VzZXJfY29yZV9yZWFkOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitvdXRwdXQgWzMxOjBdIGRhdGE7CityZWcgICAgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0nMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoRjsgIC8vIGJ5dGUgZW5hYmxlCisgIHdiZF9leHRfY3ljX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdhaXQod2JkX2V4dF9hY2tfbyA9PSAxKTsKKyAgZGF0YSAgPSB3YmRfZXh0X2RhdF9vOyAgCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgJGRpc3BsYXkoIkRFQlVHIFdCIFVTRVIgQUNDRVNTIFJFQUQgQWRkcmVzcyA6ICV4LCBEYXRhIDogJXgiLGFkZHJlc3MsZGF0YSk7CisgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKK2VuZAorZW5kdGFzaworCit0YXNrICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjazsKK2lucHV0IFszMTowXSBhZGRyZXNzOworb3V0cHV0IFszMTowXSBkYXRhOworaW5wdXQgWzMxOjBdIGNtcF9kYXRhOworcmVnICAgIFszMTowXSBkYXRhOworYmVnaW4KKyAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAjMTsKKyAgd2JkX2V4dF9hZHJfaSA9YWRkcmVzczsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9JzA7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naEY7ICAvLyBieXRlIGVuYWJsZQorICB3YmRfZXh0X2N5Y19pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YWl0KHdiZF9leHRfYWNrX28gPT0gMSk7CisgIGRhdGEgID0gd2JkX2V4dF9kYXRfbzsgIAorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisgIGlmKGRhdGEgIT09IGNtcF9kYXRhKSBiZWdpbgorICAgICAkZGlzcGxheSgiRVJST1IgOiBXQiBVU0VSIEFDQ0VTUyBSRUFEICBBZGRyZXNzIDogMHgleCwgRXhkOiAweCV4IFJ4ZDogMHgleCAiLGFkZHJlc3MsY21wX2RhdGEsZGF0YSk7CisgICAgIHRlc3RfZmFpbCA9IDE7CisgIGVuZCBlbHNlIGJlZ2luCisgICAgICRkaXNwbGF5KCJTVEFUVVM6IFdCIFVTRVIgQUNDRVNTIFJFQUQgIEFkZHJlc3MgOiAweCV4LCBEYXRhIDogMHgleCIsYWRkcmVzcyxkYXRhKTsKKyAgZW5kCisgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKK2VuZAorZW5kdGFzaworCitgaWZkZWYgR0wKKword2lyZSAgICAgICAgd2JkX3NwaV9zdGJfaSAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9zdGJfaTsKK3dpcmUgICAgICAgIHdiZF9zcGlfYWNrX28gICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfYWNrX287Cit3aXJlICAgICAgICB3YmRfc3BpX3dlX2kgICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3dlX2k7Cit3aXJlIFszMTowXSB3YmRfc3BpX2Fkcl9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX2Fkcl9pOword2lyZSBbMzE6MF0gd2JkX3NwaV9kYXRfaSAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9kYXRfaTsKK3dpcmUgWzMxOjBdIHdiZF9zcGlfZGF0X28gICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfZGF0X287Cit3aXJlIFszOjBdICB3YmRfc3BpX3NlbF9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3NlbF9pOworCit3aXJlICAgICAgICB3YmRfc2RyYW1fc3RiX2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfc3RiX2k7Cit3aXJlICAgICAgICB3YmRfc2RyYW1fYWNrX28gPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfYWNrX287Cit3aXJlICAgICAgICB3YmRfc2RyYW1fd2VfaSAgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfd2VfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9hZHJfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9hZGRyX2k7Cit3aXJlIFszMTowXSB3YmRfc2RyYW1fZGF0X2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfZGF0X2k7Cit3aXJlIFszMTowXSB3YmRfc2RyYW1fZGF0X28gPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfZGF0X287Cit3aXJlIFszOjBdICB3YmRfc2RyYW1fc2VsX2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfc2VsX2k7CisKK3dpcmUgICAgICAgIHdiZF91YXJ0X3N0Yl9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19jczsKK3dpcmUgICAgICAgIHdiZF91YXJ0X2Fja19vICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19hY2s7Cit3aXJlICAgICAgICB3YmRfdWFydF93ZV9pICAgPSB1X3RvcC51X3VhcnRfaTJjX3VzYi5yZWdfd3I7Cit3aXJlIFs3OjBdICB3YmRfdWFydF9hZHJfaSAgPSB1X3RvcC51X3VhcnRfaTJjX3VzYi5yZWdfYWRkcjsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2RhdF9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ193ZGF0YTsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2RhdF9vICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19yZGF0YTsKK3dpcmUgICAgICAgIHdiZF91YXJ0X3NlbF9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19iZTsKKworYGVuZGlmCisKKy8qKgorYGlmZGVmIEdMCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSSVNDIElNRU0gYW1kIERNRU0gTW9uaXRvcmluZyBUQVNLCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BkZWZpbmUgUklTQ19DT1JFICB1c2VyX3VhcnRfdGIudV90b3AudV9jb3JlLnVfcmlzY3ZfdG9wCisKK2Fsd2F5c0AocG9zZWRnZSBgUklTQ19DT1JFLndiX2NsaykgYmVnaW4KKyAgICBpZihgUklTQ19DT1JFLndiZF9pbWVtX2Fja19pKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBJTUVNIEFERFJFU1M6ICV4IFJlYWQgRGF0YSA6ICV4IiwgYFJJU0NfQ09SRS53YmRfaW1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9pbWVtX2RhdF9pKTsKKyAgICBpZihgUklTQ19DT1JFLndiZF9kbWVtX2Fja19pICYmIGBSSVNDX0NPUkUud2JkX2RtZW1fd2VfbykKKyAgICAgICAgICAkZGlzcGxheSgiUklTQ1YtREVCVUcgPT4gRE1FTSBBRERSRVNTOiAleCBXcml0ZSBEYXRhOiAleCBSZXNvbnNlOiAleCIsIGBSSVNDX0NPUkUud2JkX2RtZW1fYWRyX28sYFJJU0NfQ09SRS53YmRfZG1lbV9kYXRfbyk7CisgICAgaWYoYFJJU0NfQ09SRS53YmRfZG1lbV9hY2tfaSAmJiAhYFJJU0NfQ09SRS53YmRfZG1lbV93ZV9vKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBETUVNIEFERFJFU1M6ICV4IFJFQUQgRGF0YSA6ICV4IFJlc29uc2U6ICV4IiwgYFJJU0NfQ09SRS53YmRfZG1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9kbWVtX2RhdF9pKTsKK2VuZAorCitgZW5kaWYKKyoqLworZW5kbW9kdWxlCitgZGVmYXVsdF9uZXR0eXBlIHdpcmUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9zcGkvTWFrZWZpbGUgYi92ZXJpbG9nL2R2L3VzZXJfc3BpL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwOTM0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfc3BpL01ha2VmaWxlCkBAIC0wLDAgKzEsOTkgQEAKKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKworIyMgQ2FyYXZlbCBQb2ludGVycworQ0FSQVZFTF9ST09UID89IC4uLy4uLy4uL2NhcmF2ZWwKK0NBUkFWRUxfUEFUSCA/PSAkKENBUkFWRUxfUk9PVCkKK0NBUkFWRUxfRklSTVdBUkVfUEFUSCA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nL2R2L2NhcmF2ZWwKK0NBUkFWRUxfVkVSSUxPR19QQVRIICA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nCitDQVJBVkVMX1JUTF9QQVRIID0gJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkvcnRsCitDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUyA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL2R2L2NhcmF2ZWwKKworCisjIyBVc2VyIFByb2plY3QgUG9pbnRlcnMKK1VQUkpfVkVSSUxPR19QQVRIID89IC4uLy4uLy4uL3Zlcmlsb2cKK1VQUkpfUlRMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9ydGwKK1VQUkpfR0xfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2dsCitVUFJKX0JFSEFWSU9VUkFMX01PREVMUyA9IC4uL21vZGVsCitVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUyA9IC4uL2FnZW50cworVVBSSl9JTkNMVURFX1BBVEgxID0gJChVUFJKX1JUTF9QQVRIKS95aWZpdmUveWNyMWMvc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDIgPSAkKFVQUkpfUlRMX1BBVEgpL3NkcmFtX2N0cmwvc3JjL2RlZnMKK1VQUkpfSU5DTFVERV9QQVRIMyA9ICQoVVBSSl9SVExfUEFUSCkvaTJjbS9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRINCA9ICQoVVBSSl9SVExfUEFUSCkvdXNiMV9ob3N0L3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEg1ID0gJChVUFJKX1JUTF9QQVRIKS9tYmlzdC9pbmNsdWRlCisKKyMjIFlJRklWRSBGSVJNV0FSRQorWUlGSVZFX0ZJUk1XQVJFX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9kdi9maXJtd2FyZQorR0NDNjRfUFJFRklYPz1yaXNjdjY0LXVua25vd24tZWxmCisKKyMjIFJJU0NWIEdDQyAKK0dDQ19QQVRIPz0vZWYvYXBwcy9iaW4KK0dDQ19QUkVGSVg/PXJpc2N2MzItdW5rbm93bi1lbGYKK1BES19QQVRIPz0vZWYvdGVjaC9TVy9za3kxMzBBCisKKyMjIFNpbXVsYXRpb24gbW9kZTogUlRML0dMCitTSU0/PVJUTAorRFVNUD89T0ZGCisKKy5TVUZGSVhFUzoKKworUEFUVEVSTiA9IHVzZXJfc3BpCisKK2FsbDogICR7UEFUVEVSTjo9LnZjZH0KKworCit2dnA6ICAke1BBVFRFUk46PS52dnB9CisKKyUudnZwOiAlX3RiLnYKK2lmZXEgKCQoU0lNKSxSVEwpCisgICBpZmVxICgkKERVTVApLE9GRikKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfQUdFTlRTKSAgICBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDEpICAgIC1JICQoVVBSSl9JTkNMVURFX1BBVEgyKSAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMykgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEg0KSAtSSAkKFVQUkpfSU5DTFVERV9QQVRINSkgXAorCSQ8IC1vICRAIAorICAgIGVsc2UgIAorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtRFdGRFVNUCAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICBlbmRpZgorZWxzZSAgCisJaXZlcmlsb2cgLWcyMDA1LXN2IC1ERlVOQ1RJT05BTCAtRFNJTSAtREdMIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIC1JICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKFVQUkpfR0xfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwkkPCAtbyAkQCAKK2VuZGlmCisKKyUudmNkOiAlLnZ2cAorCXZ2cCAkPAorCislLmhleDogCisJZWNobyBAIlRoaXMgaXMgdXNlciBib290IHRlc3QsIG5vdGluZyB0byBjb21waWxlIHRoZSBtYW5nbWVudCBjb3JlIGNvZGUiCisKKworIyAtLS0tIENsZWFuIC0tLS0KKworY2xlYW46CisJcm0gLWYgKi52dnAgKi52Y2QgKi5sb2cgKi5mc3QKKworLlBIT05ZOiBjbGVhbiBoZXggYWxsCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfc3BpL2ZsYXNoMC5oZXggYi92ZXJpbG9nL2R2L3VzZXJfc3BpL2ZsYXNoMC5oZXgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjRhMmU0NwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9zcGkvZmxhc2gwLmhleApAQCAtMCwwICsxLDc5IEBACitAMDAwMDAwMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAxMyAwMCAwMCAwMCA2RiAwMCAwMCAwMCBGRiBGRiBGRiBGRg0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzZGIDAwIDYwIDE4IDEzIDAwIDAwIDAwIDEzIDAwIDAwIDAwIDEzIDAwIDAwIDAwDQorMTMgMDAgMDAgMDAgMTMgMDAgMDAgMDAgMTMgMDAgMDAgMDAgMTMgMDAgMDAgMDANCisxMyAwMCAwMCAwMCAxMyAwMCAwMCAwMCAxMyAwMCAwMCAwMCAxMyAwMCAwMCAwMA0KKzEzIDAwIDAwIDAwIDEzIDAwIDAwIDAwIDEzIDAwIDAwIDAwIDEzIDAwIDAwIDAwDQorOTMgMDAgMDAgMDAgMTMgMDEgMDAgMDAgOTMgMDEgMDAgMDAgMTMgMDIgMDAgMDANCis5MyAwMiAwMCAwMCAxMyAwMyAwMCAwMCA5MyAwMyAwMCAwMCAxMyAwNCAwMCAwMA0KKzkzIDA0IDAwIDAwIDEzIDA1IDAwIDAwIDkzIDA1IDAwIDAwIDEzIDA2IDAwIDAwDQorOTMgMDYgMDAgMDAgMTMgMDcgMDAgMDAgOTMgMDcgMDAgMDAgMTMgMDggMDAgMDANCis5MyAwOCAwMCAwMCAxMyAwOSAwMCAwMCA5MyAwOSAwMCAwMCAxMyAwQSAwMCAwMA0KKzkzIDBBIDAwIDAwIDEzIDBCIDAwIDAwIDkzIDBCIDAwIDAwIDEzIDBDIDAwIDAwDQorOTMgMEMgMDAgMDAgMTMgMEQgMDAgMDAgOTMgMEQgMDAgMDAgMTMgMEUgMDAgMDANCis5MyAwRSAwMCAwMCAxMyAwRiAwMCAwMCA5MyAwRiAwMCAwMCA5NyAwMSA0OCAwMA0KKzkzIDgxIDQxIDYyIDEzIDA1IDAwIDQwIDk3IDA1IDQ4IDAwIDkzIDg1IDg1IEQ3DQorMTcgMDYgNDggMDAgMTMgMDYgMDYgRTMgNjMgMEQgQjUgMDAgMjkgQTAgMTQgNDENCis5NCBDMSAxMSAwNSA5MSAwNSBFMyA5QyBDNSBGRSAxNyAwNiA0OCAwMCAxMyAwNg0KKzY2IEUxIDk3IDA1IDQ4IDAwIDkzIDg1IEU1IEUwIDIxIEEwIDIzIDIwIDA2IDAwDQorMTEgMDYgRTMgOUQgQzUgRkUgMTMgODEgMDEgNzYgMTcgMDUgNDggMDAgMTMgMDUNCis2NSBERiAxNyAwNiA0OCAwMCAxMyAwNiBFNiBERSBCMyAwNSBBNiA0MCAxMyA4Nw0KKzAxIDY2IDMzIDAyIEI3IDQwIDkyIDg1IDE3IDA2IDQ4IDAwIDEzIDA2IDg2IEREDQorMjkgQTAgMTQgNDEgOTQgQzEgMTEgMDUgOTEgMDUgRTMgMUMgQzUgRkUgMjEgQTANCisyMyBBMCAwNSAwMCA5MSAwNSBFMyA5RCBFNSBGRSBCNyAwMiA0OSAwMCAwNSA0Mw0KKzIzIEEwIDYyIDAwIEI3IDAyIDQ5IDAwIDkxIDAyIDEzIDAzIDMwIDA2IDIzIEEwDQorNjIgMDAgQjcgMDIgNDkgMDAgQzEgMDIgN0QgNTMgMjMgQTAgNjIgMDAgMjMgQTINCis2MiAwMCAwMSA0NSA4MSA0NSA5NyAwMiA0OCAwMCBFNyA4MCBBMiBDQyA5NyAwMg0KKzQ4IDAwIDkzIDgyIDIyIEQyIDZEIDcxIDA2IEMyIDBBIEM0IDBFIEM2IDEyIEM4DQorMTYgQ0EgMUEgQ0MgMUUgQ0UgMjIgRDAgMjYgRDIgMkEgRDQgMkUgRDYgMzIgRDgNCiszNiBEQSAzQSBEQyAzRSBERSBDMiBDMCBDNiBDMiBDQSBDNCBDRSBDNiBEMiBDOA0KK0Q2IENBIERBIENDIERFIENFIEUyIEQwIEU2IEQyIEVBIEQ0IEVFIEQ2IEYyIEQ4DQorRjYgREEgRkEgREMgRkUgREUgNzMgMjUgMjAgMzQgRjMgMjUgMTAgMzQgMEEgODYNCitFRiAwMCA4MCAwNCA5MiA0MCAyMiA0MSBCMiA0MSA0MiA0MiBEMiA0MiA2MiA0Mw0KK0YyIDQzIDAyIDU0IDkyIDU0IDIyIDU1IEIyIDU1IDQyIDU2IEQyIDU2IDYyIDU3DQorRjIgNTcgMDYgNDggOTYgNDggMjYgNDkgQjYgNDkgNDYgNEEgRDYgNEEgNjYgNEINCitGNiA0QiAwNiA1QyA5NiA1QyAyNiA1RCBCNiA1RCA0NiA1RSBENiA1RSA2NiA1Rg0KK0Y2IDVGIDUxIDYxIDczIDAwIDIwIDMwIDZGIEYwIERGIEQxIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KK0AwMDAwMDQwMA0KKzM3IDM3IDIyIDExIEI3IDA3IDAzIDMwIDkzIDAyIDQ3IDM0IDM3IDQzIDMzIDIyDQorMjMgQUMgNTcgMDQgOTMgMDMgNTMgNDUgMzcgNTUgNDQgMzMgMjMgQUUgNzcgMDQNCis5MyAwNSA2NSA1NiAzNyA2NiA1NSA0NCBBQyBEMyA5MyAwNiA3NiA2NyAzNyA3OA0KKzY2IDU1IEY0IEQzIDkzIDA4IDg4IDc4IDM3IDlFIDc3IDY2IDIzIEE0IDE3IDA3DQorOTMgMEUgOUUgODkgMjMgQTYgRDcgMDcgMDEgQTAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzk3IDAyIEI4IEZGIDkzIDgyIDQyIDA5IDgyIDgyIDEzIDAwIDAwIDAwIDEzIDAwDQorMDAgMDAgMTMgMDAgMDAgMDAgMTMgMDAgMDAgMDAgMTMgMDAgMDAgMDAgMDEgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorQDAwMDAwNEEwDQorMTMgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9zcGkvcnVuX2l2ZXJpbG9nIGIvdmVyaWxvZy9kdi91c2VyX3NwaS9ydW5faXZlcmlsb2cKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmVkYWJjMwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9zcGkvcnVuX2l2ZXJpbG9nCkBAIC0wLDAgKzEsNDQgQEAKKyMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjIC8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhCisjIC8vIAorIyAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgLy8KKyMgLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgLy8KKyMgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMgLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyMgLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisjIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uICB1c2VyX3Jpc2NfYm9vdC5jIC1vIHVzZXJfcmlzY19ib290Lm8KKworcmlzY3Y2NC11bmtub3duLWVsZi1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1EX19BU1NFTUJMWV9fPTEgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uLyAgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vY3J0X3RjbS5TIC1vIGNydF90Y20ubworCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtbyB1c2VyX3Jpc2NfYm9vdC5lbGYgLVQgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vbGlua190Y20ubGQgdXNlcl9yaXNjX2Jvb3QubyBjcnRfdGNtLm8gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyCisKK3Jpc2N2NjQtdW5rbm93bi1lbGYtb2JqY29weSAtTyB2ZXJpbG9nIHVzZXJfcmlzY19ib290LmVsZiB1c2VyX3Jpc2NfYm9vdC5oZXgKKworcmlzY3Y2NC11bmtub3duLWVsZi1vYmpkdW1wIC1EIHVzZXJfcmlzY19ib290LmVsZiA+IHVzZXJfcmlzY19ib290LmR1bXAKKworcm0gY3J0X3RjbS5vIHVzZXJfcmlzY19ib290Lm8KKworCisjaXZlcmlsb2cgd2l0aG91dCBEdW1wCitpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1JICRQREtfUEFUSCBcCistSSAuLi8uLi9jYXJhdmVsL3Zlcmlsb2cvZHYvY2FyYXZlbCAtSSAuLi8uLi9jYXJhdmVsL3Zlcmlsb2cvcnRsIFwKKy1JIC4uL21vZGVsICAgIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsIC1JIC4uLy4uLy4uL3Zlcmlsb2cgXAorLUkgLi4vYWdlbnRzICAgIFwKKy1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcyAgICAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL2kyY20vc3JjL2luY2x1ZGVzIFwKKy1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMgXAordXNlcl9zcGlfdGIudiAtbyB1c2VyX3NwaS52dnAgCisKKworCit2dnAgdXNlcl9zcGlfdGIudnZwIHwgdGVlIHRlc3QubG9nCisKK1xybSAtcmYgdXNlcl9zcGlfdGIudnZwCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfc3BpL3VzZXJfcmlzY19ib290LmMgYi92ZXJpbG9nL2R2L3VzZXJfc3BpL3VzZXJfcmlzY19ib290LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcxMWI3YgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9zcGkvdXNlcl9yaXNjX2Jvb3QuYwpAQCAtMCwwICsxLDY5IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjZGVmaW5lIFNDX1NJTV9PVVRQT1JUICgweGYwMDAwMDAwKQorI2RlZmluZSB1aW50MzJfdCAgbG9uZworCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzAgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDAwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAzMDAwNCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMiAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMzAwMDgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzMgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDBDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc0ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAzMDAxMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNSAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMzAwMTQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzYgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDE4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc3ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAzMDAxQykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnOCAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMzAwMjApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzkgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDI0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxMCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAzMDAyOCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTEgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMzAwMkMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzEyICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDMwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxMyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAzMDAzNCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTQgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMzAwMzgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE1ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDNDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxNiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAzMDA0MCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTcgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMzAwNDQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE4ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDQ4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxOSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAzMDA0QykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMzAwNTApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIxICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDU0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyMiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAzMDA1OCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjMgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMzAwNUMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzI0ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDYwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyNSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAzMDA2NCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjYgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMzAwNjgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzI3ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDZDKQorCitpbnQgbWFpbigpCit7CisKKyAgICAvL3ZvbGF0aWxlIGxvbmcgKm91dF9wdHIgPSAodm9sYXRpbGUgbG9uZyopU0NfU0lNX09VVFBPUlQ7CisgICAgLy8qb3V0X3B0ciA9IDB4QUFCQkNDREQ7CisgICAgLy8qb3V0X3B0ciA9IDB4QkJDQ0RERUU7CisgICAgLy8qb3V0X3B0ciA9IDB4Q0NEREVFRkY7CisgICAgLy8qb3V0X3B0ciA9IDB4RERFRUZGMDA7CisKKyAgICAvLyBXcml0ZSBzb2Z0d2FyZSBXcml0ZSAmIFJlYWQgUmVnaXN0ZXIKKyAgICByZWdfbXByal9nbG9ibF9yZWcyMiAgPSAweDExMjIzMzQ0OyAKKyAgICByZWdfbXByal9nbG9ibF9yZWcyMyAgPSAweDIyMzM0NDU1OyAKKyAgICByZWdfbXByal9nbG9ibF9yZWcyNCAgPSAweDMzNDQ1NTY2OyAKKyAgICByZWdfbXByal9nbG9ibF9yZWcyNSAgPSAweDQ0NTU2Njc3OyAKKyAgICByZWdfbXByal9nbG9ibF9yZWcyNiA9IDB4NTU2Njc3ODg7IAorICAgIHJlZ19tcHJqX2dsb2JsX3JlZzI3ID0gMHg2Njc3ODg5OTsgCisKKyAgICB3aGlsZSgxKSB7fQorICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3NwaS91c2VyX3NwaV90Yi52IGIvdmVyaWxvZy9kdi91c2VyX3NwaS91c2VyX3NwaV90Yi52Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNmJmYTgKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfc3BpL3VzZXJfc3BpX3RiLnYKQEAgLTAsMCArMSwxNDE2IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAgMjAyMSAsIERpbmVzaCBBbm5heXlhCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBNb2RpZmllZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgU3RhbmRhbG9uZSBVc2VyIHZhbGlkYXRpb24gVGVzdCBiZW5jaCAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFlJRml2ZSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWlmaXZlX3IwLmdpdCAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3lpZml2ZS8gICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgIFRoaXMgaXMgYSBzdGFuZGFsb25lIHRlc3QgYmVuY2ggdG8gdmFsaWRhdGUgdGhlICAgICAgICAgICAgLy8vLworLy8vLyAgIERpZ2l0YWwgY29yZSBmbGFzaCBhY2Nlc3MgdGhyb3VnaCBFeHRlcm5hbCBXQiBpL0YuICAgICAgICAgLy8vLworLy8vLyAgIDEuICBDaGVjayBTUEkgUmVhZCBJZGVudGlmaWNhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgIDIuICBDaGVjayB0aGUgRGlyZWN0IE1lbW9yeSBSZWFkIChRdWFsL1NpbmdsZS9RdWFkKSAgICAgICAgLy8vLyAgICAgICAgCisvLy8vICAgMy4gIERpcmVjdCBTUEkgTWVtb3J5IFByZWZldGNoIC0gM0RXICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgNC4gIERpcmVjdCBTUEkgTWVtb3J5IFByZWZldGNoIC0gMkRXICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgNS4gIERpcmVjdCBTUEkgTWVtb3J5IFByZWZldGNoIC0gMURXICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgNi4gIERpcmVjdCBTUEkgTWVtb3J5IFByZWZldGNoIC0gN0RXICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgNy4gIDFEVyAgSW5kaXJlY3QgUmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgOC4gIDJEVyAgSW5kaXJlY3QgUmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgOS4gIDNEVyAgSW5kaXJlY3QgUmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgMTAuIDREVyAgSW5kaXJlY3QgUmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgMTEuIDVEVyAgSW5kaXJlY3QgUmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgMTIuIDhEVyAgSW5kaXJlY3QgUmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgMTMuIFNlY3RvciBFcmFzZSBjb21tYW5kICsgUGFnZSBXcml0ZSAmIFJlYWQgQmFjayAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMSAtIDAxIE9jdCAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQorCitgdGltZXNjYWxlIDEgbnMgLyAxIG5zCisKK2BpbmNsdWRlICJzMjVmbDI1NnMuc3YiCitgaW5jbHVkZSAidXByal9uZXRsaXN0cy52IgorYGluY2x1ZGUgIm10NDhsYzhtOGEyLnYiCitgaW5jbHVkZSAic3BpcmFtLnYiCisKKyAvLyBSRUdJU1RFUiBNQVAKKyBgZGVmaW5lIFFTUElNX0dMQkxfQ1RSTCAgICAgICAgICAgMzInaDEwMDAwMDAwCisgYGRlZmluZSBRU1BJTV9ETUVNX0cwX1JEX0NUUkwgICAgMzInaDEwMDAwMDA0CisgYGRlZmluZSBRU1BJTV9ETUVNX0cwX1dSX0NUUkwgICAgMzInaDEwMDAwMDA4CisgYGRlZmluZSBRU1BJTV9ETUVNX0cxX1JEX0NUUkwgICAgMzInaDEwMDAwMDBDCisgYGRlZmluZSBRU1BJTV9ETUVNX0cxX1dSX0NUUkwgICAgMzInaDEwMDAwMDEwCisKKyBgZGVmaW5lIFFTUElNX0RNRU1fQ1NfQU1BUCAgICAgICAgMzInaDEwMDAwMDE0CisgYGRlZmluZSBRU1BJTV9ETUVNX0NBX0FNQVNLICAgICAgIDMyJ2gxMDAwMDAxOAorCisgYGRlZmluZSBRU1BJTV9JTUVNX0NUUkwxICAgICAgICAgIDMyJ2gxMDAwMDAxQworIGBkZWZpbmUgUVNQSU1fSU1FTV9DVFJMMiAgICAgICAgICAzMidoMTAwMDAwMjAKKyBgZGVmaW5lIFFTUElNX0lNRU1fQUREUiAgICAgICAgICAgMzInaDEwMDAwMDI0CisgYGRlZmluZSBRU1BJTV9JTUVNX1dEQVRBICAgICAgICAgIDMyJ2gxMDAwMDAyOAorIGBkZWZpbmUgUVNQSU1fSU1FTV9SREFUQSAgICAgICAgICAzMidoMTAwMDAwMkMKKyBgZGVmaW5lIFFTUElNX1NQSV9TVEFUVVMgICAgICAgICAgMzInaDEwMDAwMDMwCisKK21vZHVsZSB1c2VyX3NwaV90YjsKKwlyZWcgY2xvY2s7CisJcmVnIHdiX3JzdF9pOworCXJlZyBwb3dlcjEsIHBvd2VyMjsKKwlyZWcgcG93ZXIzLCBwb3dlcjQ7CisKKyAgICAgICAgcmVnICAgICAgICB3YmRfZXh0X2N5Y19pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgcmVnICAgICAgICB3YmRfZXh0X3N0Yl9pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgcmVnIFszMTowXSB3YmRfZXh0X2Fkcl9pOyAgLy8gYWRkcmVzcworICAgICAgICByZWcgICAgICAgIHdiZF9leHRfd2VfaTsgIC8vIHdyaXRlCisgICAgICAgIHJlZyBbMzE6MF0gd2JkX2V4dF9kYXRfaTsgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgIHJlZyBbMzowXSAgd2JkX2V4dF9zZWxfaTsgIC8vIGJ5dGUgZW5hYmxlCisKKyAgICAgICAgd2lyZSBbMzE6MF0gd2JkX2V4dF9kYXRfbzsgIC8vIGRhdGEgaW5wdXQKKyAgICAgICAgd2lyZSAgICAgICAgd2JkX2V4dF9hY2tfbzsgIC8vIGFja25vd2xlZ2VtZW50CisgICAgICAgIHdpcmUgICAgICAgIHdiZF9leHRfZXJyX287ICAvLyBlcnJvcgorCisJLy8gVXNlciBJL08KKwl3aXJlIFszNzowXSBpb19vZWI7CisJd2lyZSBbMzc6MF0gaW9fb3V0OworCXdpcmUgWzM3OjBdIGlvX2luOworCisJd2lyZSBncGlvOworCXdpcmUgWzM3OjBdIG1wcmpfaW87CisJd2lyZSBbNzowXSBtcHJqX2lvXzA7CisJcmVnICAgICAgICB0ZXN0X2ZhaWw7CisJcmVnIFszMTowXSByZWFkX2RhdGE7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBTUEkgRlNNIFN0YXRlIENvbnRyb2wKKyoKKyogICBPUEVSQVRJT04gICBDT01NQU5EICAgICAgICAgICAgICAgICAgIFNFUVVFTkNFIAorKgorKiAgICBFUkFTRSAgICAgICBQNEUoMHgyMCkgICAgICAgICAgIC0+ICBDT01NQU5EICsgQUREUkVTUworKiAgICBFUkFTRSAgICAgICBQOEUoMHg0MCkgICAgICAgICAgIC0+ICBDT01NQU5EICsgQUREUkVTUworKiAgICBFUkFTRSAgICAgICBTRSgweEQ4KSAgICAgICAgICAgIC0+ICBDT01NQU5EICsgQUREUkVTUworKiAgICBFUkFTRSAgICAgICBCRSgweDYwKSAgICAgICAgICAgIC0+ICBDT01NQU5EICsgQUREUkVTUworKiAgICBFUkFTRSAgICAgICBCRSgweEM3KSAgICAgICAgICAgIC0+ICBDT01NQU5EIAorKiAgICBQUk9HUkFNICAgICBQUCgweDAyKSAgICAgICAgICAgIC0+ICBDT01NQU5EICsgQUREUkVTUyArIFdyaXRlIERBVEEKKyogICAgUFJPR1JBTSAgICAgUVBQKDB4MzIpICAgICAgICAgICAtPiAgQ09NTUFORCArIEFERFJFU1MgKyBXcml0ZSBEQVRBCisqICAgIFJFQUQgICAgICAgIFJFQUQoMHgzKSAgICAgICAgICAgLT4gIENPTU1BTkQgKyBBRERSRVNTICsgUkVBRCBEQVRBCisqICAgIFJFQUQgICAgICAgIEZBU1RfUkVBRCgweEIpICAgICAgLT4gIENPTU1BTkQgKyBBRERSRVNTICsgRFVNTVkgKyBSRUFEIERBVEEKKyogICAgUkVBRCAgICAgICAgRE9SICgweDNCKSAgICAgICAgICAtPiAgQ09NTUFORCArIEFERFJFU1MgKyBEVU1NWSArIFJFQUQgREFUQQorKiAgICBSRUFEICAgICAgICBRT1IgKDB4NkIpICAgICAgICAgIC0+ICBDT01NQU5EICsgQUREUkVTUyArIERVTU1ZICsgUkVBRCBEQVRBCisqICAgIFJFQUQgICAgICAgIERJT1IgKDB4QkIpICAgICAgICAgLT4gIENPTU1BTkQgKyBBRERSRVNTICsgTU9ERSAgKyBSRUFEIERBVEEKKyogICAgUkVBRCAgICAgICAgUUlPUiAoMHhFQikgICAgICAgICAtPiAgQ09NTUFORCArIEFERFJFU1MgKyBNT0RFICArIERVTU1ZICsgUkVBRCBEQVRBCisqICAgIFJFQUQgICAgICAgIFJESUQgKDB4OUYpICAgICAgICAgLT4gIENPTU1BTkQgKyBSRUFEIERBVEEKKyogICAgUkVBRCAgICAgICAgUkVBRF9JRCAoMHg5MCkgICAgICAtPiAgQ09NTUFORCArIEFERFJFU1MgKyBSRUFEIERBVEEKKyogICAgV1JJVEUgICAgICAgV1JFTigweDYpICAgICAgICAgICAtPiAgQ09NTUFORAorKiAgICBXUklURSAgICAgICBXUkRJICAgICAgICAgICAgICAgIC0+ICBDT01NQU5ECisqICAgIFNUQVRVUyAgICAgIFJEU1IoMHgwNSkgICAgICAgICAgLT4gIENPTU1BTkQgKyBSRUFEIERBVEEKKyogICAgU1RBVFVTICAgICAgUkNSKDB4MzUpICAgICAgICAgICAtPiAgQ09NTUFORCArIFJFQUQgREFUQQorKiAgICBDT05GSUcgICAgICBXUlIoMHgwMSkgICAgICAgICAgIC0+ICBDT01NQU5EICsgV1JJVEUgREFUQQorKiAgICBDT05GSUcgICAgICBDTFNSKDB4MzApICAgICAgICAgIC0+ICBDT01NQU5ECisqICAgIFBvd2VyIFNhdmluZyBEUCgweEI5KSAgICAgICAgICAgLT4gIENPTU1BTkQKKyogICAgUG93ZXIgU2F2aW5nIFJFUygweEFCKSAgICAgICAgICAtPiAgQ09NTUFORCArIFJFQUQgREFUQQorKiAgICBPVFAgICAgICAgICAgT1RQUCgweDQyKSAgICAgICAgIC0+ICBDT01NQU5EICsgQUREUisgV1JJVEUgREFUQQorKiAgICBPVFAgICAgICAgICAgT1RQUigweDRCKSAgICAgICAgIC0+ICBDT01NQU5EICsgQUREUiArIERVTU1ZICsgUkVBRCBEQVRBCisqICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFyYW1ldGVyIFBfRlNNX0MgICAgICA9IDQnYjAwMDA7IC8vIENvbW1hbmQgUGhhc2UgT25seQorcGFyYW1ldGVyIFBfRlNNX0NXICAgICA9IDQnYjAwMDE7IC8vIENvbW1hbmQgKyBXcml0ZSBEQVRBIFBoYXNlIE9ubHkKK3BhcmFtZXRlciBQX0ZTTV9DQSAgICAgPSA0J2IwMDEwOyAvLyBDb21tYW5kIC0+IEFkZHJlc3MgUGhhc2UgT25seQorCitwYXJhbWV0ZXIgUF9GU01fQ0FSICAgID0gNCdiMDAxMTsgLy8gQ29tbWFuZCAtPiBBZGRyZXNzIC0+IFJlYWQgRGF0YQorcGFyYW1ldGVyIFBfRlNNX0NBRFIgICA9IDQnYjAxMDA7IC8vIENvbW1hbmQgLT4gQWRkcmVzcyAtPiBEdW1teSAtPiBSZWFkIERhdGEKK3BhcmFtZXRlciBQX0ZTTV9DQU1SICAgPSA0J2IwMTAxOyAvLyBDb21tYW5kIC0+IEFkZHJlc3MgLT4gTW9kZSAtPiBSZWFkIERhdGEKK3BhcmFtZXRlciBQX0ZTTV9DQU1EUiAgPSA0J2IwMTEwOyAvLyBDb21tYW5kIC0+IEFkZHJlc3MgLT4gTW9kZSAtPiBEdW1teSAtPiBSZWFkIERhdGEKKworcGFyYW1ldGVyIFBfRlNNX0NBVyAgICA9IDQnYjAxMTE7IC8vIENvbW1hbmQgLT4gQWRkcmVzcyAtPldyaXRlIERhdGEKK3BhcmFtZXRlciBQX0ZTTV9DQURXICAgPSA0J2IxMDAwOyAvLyBDb21tYW5kIC0+IEFkZHJlc3MgLT4gRFVNTVkgKyBXcml0ZSBEYXRhCitwYXJhbWV0ZXIgUF9GU01fQ0FNVyAgID0gNCdiMTAwMTsgLy8gQ29tbWFuZCAtPiBBZGRyZXNzIC0+IE1PREUgKyBXcml0ZSBEYXRhCisKK3BhcmFtZXRlciBQX0ZTTV9DRFIgICAgPSA0J2IxMDEwOyAvLyBDT01NQU5EIC0+IERVTU1ZIC0+IFJFQUQKK3BhcmFtZXRlciBQX0ZTTV9DRFcgICAgPSA0J2IxMDExOyAvLyBDT01NQU5EIC0+IERVTU1ZIC0+IFdSSVRFCitwYXJhbWV0ZXIgUF9GU01fQ1IgICAgID0gNCdiMTEwMDsgIC8vIENPTU1BTkQgLT4gUkVBRAorCitwYXJhbWV0ZXIgUF9NT0RFX1NXSVRDSF9JRExFICAgICA9IDInYjAwOworcGFyYW1ldGVyIFBfTU9ERV9TV0lUQ0hfQVRfQUREUiAgPSAyJ2IwMTsKK3BhcmFtZXRlciBQX01PREVfU1dJVENIX0FUX0RBVEEgID0gMidiMTA7CisKK3BhcmFtZXRlciBQX1NJTkdMRSA9IDInYjAwOworcGFyYW1ldGVyIFBfRE9VQkxFID0gMidiMDE7CitwYXJhbWV0ZXIgUF9RVUFEICAgPSAyJ2IxMDsKK3BhcmFtZXRlciBQX1FERFIgICA9IDInYjExOworCisJLy8gRXh0ZXJuYWwgY2xvY2sgaXMgdXNlZCBieSBkZWZhdWx0LiAgTWFrZSB0aGlzIGFydGlmaWNpYWxseSBmYXN0IGZvciB0aGUKKwkvLyBzaW11bGF0aW9uLiAgTm9ybWFsbHkgdGhpcyB3b3VsZCBiZSBhIHNsb3cgY2xvY2sgYW5kIHRoZSBkaWdpdGFsIFBMTAorCS8vIHdvdWxkIGJlIHRoZSBmYXN0IGNsb2NrLgorCisJYWx3YXlzICMxMi41IGNsb2NrIDw9IChjbG9jayA9PT0gMSdiMCk7CisKKwlpbml0aWFsIGJlZ2luCisJCWNsb2NrID0gMDsKKyAgICAgICAgICAgICAgICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICAgICAgICAgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9hZHJfaSA9J2gwOyAgLy8gYWRkcmVzcworICAgICAgICAgICAgICAgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgICAgICAgICAgICAgICAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3NlbF9pID0naDA7ICAvLyBieXRlIGVuYWJsZQorCWVuZAorCisJYGlmZGVmIFdGRFVNUAorCSAgIGluaXRpYWwgYmVnaW4KKwkgICAJJGR1bXBmaWxlKCJzaW14LnZjZCIpOworCSAgIAkkZHVtcHZhcnMoNSwgdXNlcl9zcGlfdGIpOworCSAgIGVuZAorICAgICAgIGBlbmRpZgorCisJaW5pdGlhbCBiZWdpbgorCQkkZHVtcG9uOworCisJCSMyMDA7IC8vIFdhaXQgZm9yIHJlc2V0IHJlbW92YWwKKwkgICAgICAgIHJlcGVhdCAoMTApIEAocG9zZWRnZSBjbG9jayk7CisJCSRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgUmlzYyBCb290IFRlc3QgU3RhcnRlZCIpOworCisJCS8vIFJlbW92ZSBXYiBSZXNldAorCQl3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsJ2gxKTsKKworCSAgICAgICAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworCQkjMTsKKwkJLy8gUmVtb3ZlIFdCIGFuZCBTUEkgUmVzZXQsIEtlZXAgU0RBUk0gYW5kIENPUkUgdW5kZXIgUmVzZXQKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsJ2g1KTsKKworICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwNCwnaDApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDAKKworCisJCXRlc3RfZmFpbCA9IDA7CisJICAgICAgICByZXBlYXQgKDIwMCkgQChwb3NlZGdlIGNsb2NrKTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gxMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMTAKKwkJLy8gQ1MjMiBTU1BJIEluZGlyZWN0IFJBTSBSRUFEIEFDQ0VTUy0KKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwxLHsxNidoMCwxJ2IwLDEnYjAsNCdiMDAwMCxQX01PREVfU1dJVENIX0lETEUsUF9TSU5HTEUsUF9TSU5HTEUsNCdiMDEwMH0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDIsezgnaDQsMidiMDAsMidiMTAsUF9GU01fQ0FEUiw4J2gwMCw4J2gwM30pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAwMDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAzMDIwMTAwKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMDA0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwNzA2MDUwNCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDAwOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMGIwYTA5MDgpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAwMEMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDBmMGUwZDBjKTsKKworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAyMDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDExMTExMTExKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMjA0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gyMjIyMjIyMik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDIwOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMzMzMzMzMzMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAyMEMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDQ0NDQ0NDQ0KTsKKworCQkvLyBDUyMyIFNTUEkgSW5kaWVjdCBXcml0ZSBEQVRBCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfU0lOR0xFLFBfU0lOR0xFLDQnYjAxMDB9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2gxMCwyJ2IwMCwyJ2IxMCxQX0ZTTV9DQVcsOCdoMDAsOCdoMDJ9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMDAwKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDExMjIzMyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoNDQ1NTY2NzcpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDg4OTlBQUJCKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2hDQ0RERUVGRik7CisJCQorCQkvLyBDUyMyIFNTUEkgSW5kaXJlY3QgUkVBRCBEQVRBCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfU0lOR0xFLFBfU0lOR0xFLDQnYjAxMDB9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2gxMCwyJ2IwMCwyJ2IxMCxQX0ZTTV9DQURSLDgnaDAwLDgnaDAzfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDAwMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAxMTIyMzMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDQ0NTU2Njc3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2g4ODk5QUFCQik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoQ0NEREVFRkYpOworCisKKwkJLy8gQ1MjMiBTd2l0Y2ggdG8gUVNQSSBNb2RlCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfU0lOR0xFLFBfU0lOR0xFLDQnYjAxMDB9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2gwLDInYjAwLDInYjAwLFBfRlNNX0MsOCdoMDAsOCdoMzh9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwKTsKKworCisJCS8vIENTIzIgUVVBRCBJbmRpcmVjdCBXcml0ZSBEQVRBCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfUVVBRCxQX1FVQUQsNCdiMDEwMH0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDIsezgnaDEwLDInYjAwLDInYjEwLFBfRlNNX0NBVyw4J2gwMCw4J2gwMn0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAwMDApOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAxMjM0NTU3KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2g4OUFCQ0RFRik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMTIzNDU2NzgpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDlBQkNERUYwKTsKKworCisJCS8vIENTIzIgUVVBRCBJbmRpcmVjdCBSRUFEIERBVEEKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwxLHsxNidoMCwxJ2IwLDEnYjAsNCdiMDAwMCxQX01PREVfU1dJVENIX0lETEUsUF9RVUFELFBfUVVBRCw0J2IwMTAwfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMix7OCdoMTAsMidiMDAsMidiMTAsUF9GU01fQ0FEUiw4J2gwMCw4J2gwM30pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAwMDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAxMjM0NTU3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2g4OUFCQ0RFRik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMTIzNDU2NzgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDlBQkNERUYwKTsKKworCQkvLyBDUyMyIFN3aXRjaCBGcm9tIFFTUEkgdG8gU1NQSSBNb2RlCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfUVVBRCxQX1FVQUQsNCdiMDEwMH0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDIsezgnaDAsMidiMDAsMidiMDAsUF9GU01fQyw4J2gwMCw4J2hGRn0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDApOworCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8gRW5kIG9mIENTIzEgSW5kaXJlY3QgTWVtb3J5IEFjY2VzcyBUZXN0aW5nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkkZGlzcGxheSgiICBSZWFkIElkZW50aWZpY2F0aW9uIChSRElEOjB4OUYpICAgICAgICAgICAgIik7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gxMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMTAKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwxLHsxNidoMCwxJ2IwLDEnYjAsNCdiMDAwMCwyJ2IwMCxQX1NJTkdMRSxQX1NJTkdMRSw0J2IwMDAxfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMix7OCdoNCwyJ2IwMCwyJ2IwMCxQX0ZTTV9DUiw4J2gwMCw4J2g5Rn0pOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMTkwMjAxKTsKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkkZGlzcGxheSgiVGVzdGluZyBEaXJlY3QgU1BJIE1lbW9yeSBSZWFkICAgICAgICAgICAgICAiKTsKKwkJJGRpc3BsYXkoIiBTUEkgTW9kZTogUUREUiAoRHVhbCA0IGJpdCkgICAgICAgICAgICAgICAgIik7CisJCSRkaXNwbGF5KCJQcmVmZXRjaCA6IDFEVywgT1BDT0RFOlJFQUQoMHhFRCkgICAgICAgICAgICIpOworCQkkZGlzcGxheSgiU0VROiBDb21tYW5kIC0+IEFkZHJlc3MgLT4gUmVhZCBEYXRhICAgICAgICAiKTsKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkvLyBRRERSIENvbmZpZworICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwNCwnaDEwKTsgLy8gQ2hhbmdlIHRoZSBCYW5rIFNlbCAxMAorCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0RNRU1fRzBfUkRfQ1RSTCx7UF9GU01fQ0FNRFIsNCdiMDEwMCwyJ2IxMCxQX01PREVfU1dJVENIX0FUX0FERFIsUF9RRERSLFBfU0lOR0xFLDgnaDAwLDgnaEVEfSk7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMDApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDAwCisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwMCxyZWFkX2RhdGEsMzInaDAwMDAwMDkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjA0LHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDgscmVhZF9kYXRhLDMyJ2gwMDAwMDE5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwQyxyZWFkX2RhdGEsMzInaDAwMDAwMjEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjEwLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTQscmVhZF9kYXRhLDMyJ2gwMDAwMDMxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxOCxyZWFkX2RhdGEsMzInaDAwMDAwMzkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjFDLHJlYWRfZGF0YSwzMidoMDAwMDA0MTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMDAscmVhZF9kYXRhLDMyJ2gwMDA1QTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwNCxyZWFkX2RhdGEsMzInaDlERTMwNTkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzA4LHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMEMscmVhZF9kYXRhLDMyJ2g0MzA1MDA0OSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxMCxyZWFkX2RhdGEsMzInaDAwNjJBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzE0LHJlYWRfZGF0YSwzMidoMDA0OTAyQjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMTgscmVhZF9kYXRhLDMyJ2gwMzEzMDI5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxQyxyZWFkX2RhdGEsMzInaGEwMjMwNjMwKTsKKwkJJGR1bXBvZmY7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJJGRpc3BsYXkoIlRlc3RpbmcgRGlyZWN0IFNQSSBNZW1vcnkgUmVhZCAgICAgICAgICAgICAgIik7CisJCSRkaXNwbGF5KCIgU1BJIE1vZGU6IE5vcm1hbC9TaW5nbGUgQml0ICAgICAgICAgICAgICAgICIpOworCQkkZGlzcGxheSgiUHJlZmV0Y2ggOiAxRFcsIE9QQ09ERTpSRUFEKDB4MykgICAgICAgICAgICAiKTsKKwkJJGRpc3BsYXkoIlNFUTogQ29tbWFuZCAtPiBBZGRyZXNzIC0+IFJlYWQgRGF0YSAgICAgICAgIik7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gxMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMTAKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9ETUVNX0cwX1JEX0NUUkwse1BfRlNNX0NBUiw0J2IwMDAwLDInYjEwLFBfTU9ERV9TV0lUQ0hfSURMRSxQX1NJTkdMRSxQX1NJTkdMRSw4J2gwMCw4J2gwM30pOworICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwNCwnaDAwKTsgLy8gQ2hhbmdlIHRoZSBCYW5rIFNlbCAwMAorCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDAscmVhZF9kYXRhLDMyJ2gwMDAwMDA5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwNCxyZWFkX2RhdGEsMzInaDAwMDAwMTEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjA4LHJlYWRfZGF0YSwzMidoMDAwMDAxOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMEMscmVhZF9kYXRhLDMyJ2gwMDAwMDIxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxMCxyZWFkX2RhdGEsMzInaDAwMDAwMjkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjE0LHJlYWRfZGF0YSwzMidoMDAwMDAzMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTgscmVhZF9kYXRhLDMyJ2gwMDAwMDM5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxQyxyZWFkX2RhdGEsMzInaDAwMDAwNDEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzAwLHJlYWRfZGF0YSwzMidoMDAwNUEwMjMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMDQscmVhZF9kYXRhLDMyJ2g5REUzMDU5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwOCxyZWFkX2RhdGEsMzInaDAyQjdGRUU1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzBDLHJlYWRfZGF0YSwzMidoNDMwNTAwNDkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMTAscmVhZF9kYXRhLDMyJ2gwMDYyQTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxNCxyZWFkX2RhdGEsMzInaDAwNDkwMkI3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzE4LHJlYWRfZGF0YSwzMidoMDMxMzAyOTEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMUMscmVhZF9kYXRhLDMyJ2hhMDIzMDYzMCk7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJJGRpc3BsYXkoIlRlc3RpbmcgRGlyZWN0IFNQSSBNZW1vcnkgUmVhZCAgICAgICAgICAgICAgIik7CisJCSRkaXNwbGF5KCIgU1BJIE1vZGU6IE5vcm1hbC9TaW5nbGUgQml0ICAgICAgICAgICAgICAgICIpOworCQkkZGlzcGxheSgiUHJlZmV0Y2ggOiAxRFcsIE9QQ09ERTpGQVNUUkVBRCgweEIpICAgICAgICAiKTsKKwkJJGRpc3BsYXkoIlNFUTogQ29tbWFuZCAtPiBBZGRyZXNzIC0+IER1bW15IC0+IFJlYWQgRGF0YSIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMTApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDEwCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fRE1FTV9HMF9SRF9DVFJMLHtQX0ZTTV9DQURSLDQnYjAwMDAsMidiMTAsUF9NT0RFX1NXSVRDSF9JRExFLFBfU0lOR0xFLFBfU0lOR0xFLDgnaDAwLDgnaDBCfSk7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMDApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDAwCisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwMCxyZWFkX2RhdGEsMzInaDAwMDAwMDkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjA0LHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDgscmVhZF9kYXRhLDMyJ2gwMDAwMDE5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwQyxyZWFkX2RhdGEsMzInaDAwMDAwMjEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjEwLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTQscmVhZF9kYXRhLDMyJ2gwMDAwMDMxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxOCxyZWFkX2RhdGEsMzInaDAwMDAwMzkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjFDLHJlYWRfZGF0YSwzMidoMDAwMDA0MTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMDAscmVhZF9kYXRhLDMyJ2gwMDA1QTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwNCxyZWFkX2RhdGEsMzInaDlERTMwNTkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzA4LHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMEMscmVhZF9kYXRhLDMyJ2g0MzA1MDA0OSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxMCxyZWFkX2RhdGEsMzInaDAwNjJBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzE0LHJlYWRfZGF0YSwzMidoMDA0OTAyQjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMTgscmVhZF9kYXRhLDMyJ2gwMzEzMDI5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxQyxyZWFkX2RhdGEsMzInaGEwMjMwNjMwKTsKKworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCJUZXN0aW5nIERpcmVjdCBTUEkgTWVtb3J5IFJlYWQgICAgICAgICAgICAgICIpOworCQkkZGlzcGxheSgiIFNQSSBNb2RlOiBEdWFsIE1vZGUgICAgICAgICAgICAgICAgICAgICAgICAiKTsKKwkJJGRpc3BsYXkoIlByZWZldGNoIDogMURXLCBPUENPREU6RE9SKDB4M0IpICAgICAgICAiKTsKKwkJJGRpc3BsYXkoIlNFUTogQ29tbWFuZCAtPiBBZGRyZXNzIC0+IER1bW15IC0+IFJlYWQgRGF0YSIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMTApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDEwCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fRE1FTV9HMF9SRF9DVFJMLHtQX0ZTTV9DQURSLDQnYjAwMDAsMidiMTAsUF9NT0RFX1NXSVRDSF9BVF9EQVRBLFBfRE9VQkxFLFBfU0lOR0xFLDgnaDAwLDgnaDNCfSk7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMDApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDAwCisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwMCxyZWFkX2RhdGEsMzInaDAwMDAwMDkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjA0LHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDgscmVhZF9kYXRhLDMyJ2gwMDAwMDE5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwQyxyZWFkX2RhdGEsMzInaDAwMDAwMjEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjEwLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTQscmVhZF9kYXRhLDMyJ2gwMDAwMDMxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxOCxyZWFkX2RhdGEsMzInaDAwMDAwMzkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjFDLHJlYWRfZGF0YSwzMidoMDAwMDA0MTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMDAscmVhZF9kYXRhLDMyJ2gwMDA1QTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwNCxyZWFkX2RhdGEsMzInaDlERTMwNTkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzA4LHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMEMscmVhZF9kYXRhLDMyJ2g0MzA1MDA0OSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxMCxyZWFkX2RhdGEsMzInaDAwNjJBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzE0LHJlYWRfZGF0YSwzMidoMDA0OTAyQjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMTgscmVhZF9kYXRhLDMyJ2gwMzEzMDI5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxQyxyZWFkX2RhdGEsMzInaGEwMjMwNjMwKTsKKworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCJUZXN0aW5nIERpcmVjdCBTUEkgTWVtb3J5IFJlYWQgd2l0aCBQcmVmZXRjaCIpOworCQkkZGlzcGxheSgiIFNQSSBNb2RlOiBRdWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKTsKKwkJJGRpc3BsYXkoIlByZWZldGNoIDogOERXLCBPUENPREU6VVJBRCBSRUFEKDB4RUIpICAgICAgIik7CisJCSRkaXNwbGF5KCJTRVE6IENvbW1hbmQgLT4gQWRkcmVzcyAtPiBEdW1teSAtPiBSZWFkIERhdGEiKTsKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwNCwnaDEwKTsgLy8gQ2hhbmdlIHRoZSBCYW5rIFNlbCAxMAorCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0RNRU1fRzBfUkRfQ1RSTCx7UF9GU01fQ0FNRFIsNCdiMDAwMSwyJ2IxMCxQX01PREVfU1dJVENIX0FUX0FERFIsUF9RVUFELFBfU0lOR0xFLDgnaDAwLDgnaEVCfSk7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMDApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDAwCisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwMCxyZWFkX2RhdGEsMzInaDAwMDAwMDkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjA0LHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDgscmVhZF9kYXRhLDMyJ2gwMDAwMDE5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwQyxyZWFkX2RhdGEsMzInaDAwMDAwMjEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjEwLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTQscmVhZF9kYXRhLDMyJ2gwMDAwMDMxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxOCxyZWFkX2RhdGEsMzInaDAwMDAwMzkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjFDLHJlYWRfZGF0YSwzMidoMDAwMDA0MTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMDAscmVhZF9kYXRhLDMyJ2gwMDA1QTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwNCxyZWFkX2RhdGEsMzInaDlERTMwNTkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzA4LHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMEMscmVhZF9kYXRhLDMyJ2g0MzA1MDA0OSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxMCxyZWFkX2RhdGEsMzInaDAwNjJBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzE0LHJlYWRfZGF0YSwzMidoMDA0OTAyQjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMTgscmVhZF9kYXRhLDMyJ2gwMzEzMDI5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxQyxyZWFkX2RhdGEsMzInaGEwMjMwNjMwKTsKKworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCJUZXN0aW5nIERpcmVjdCBTUEkgTWVtb3J5IFJlYWQgd2l0aCBQcmVmZXRjaDozRFciKTsKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwNCwnaDEwKTsgLy8gQ2hhbmdlIHRoZSBCYW5rIFNlbCAxMAorCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0RNRU1fRzBfUkRfQ1RSTCx7UF9GU01fQ0FNRFIsNCdiMDAwMSwyJ2IxMCxQX01PREVfU1dJVENIX0FUX0FERFIsUF9RVUFELFBfU0lOR0xFLDgnaDAwLDgnaEVCfSk7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMDApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDAwCisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwMCxyZWFkX2RhdGEsMzInaDAwMDAwMDkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjA0LHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDgscmVhZF9kYXRhLDMyJ2gwMDAwMDE5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwQyxyZWFkX2RhdGEsMzInaDAwMDAwMjEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjEwLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTQscmVhZF9kYXRhLDMyJ2gwMDAwMDMxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxOCxyZWFkX2RhdGEsMzInaDAwMDAwMzkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjFDLHJlYWRfZGF0YSwzMidoMDAwMDA0MTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMDAscmVhZF9kYXRhLDMyJ2gwMDA1QTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwNCxyZWFkX2RhdGEsMzInaDlERTMwNTkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzA4LHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMEMscmVhZF9kYXRhLDMyJ2g0MzA1MDA0OSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxMCxyZWFkX2RhdGEsMzInaDAwNjJBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzE0LHJlYWRfZGF0YSwzMidoMDA0OTAyQjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMTgscmVhZF9kYXRhLDMyJ2gwMzEzMDI5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxQyxyZWFkX2RhdGEsMzInaGEwMjMwNjMwKTsKKworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCJUZXN0aW5nIERpcmVjdCBTUEkgTWVtb3J5IFJlYWQgd2l0aCBQcmVmZXRjaDoyRFciKTsKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwNCwnaDEwKTsgLy8gQ2hhbmdlIHRoZSBCYW5rIFNlbCAxMAorCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0RNRU1fRzBfUkRfQ1RSTCx7UF9GU01fQ0FNRFIsNCdiMDAwMSwyJ2IxMCxQX01PREVfU1dJVENIX0FUX0FERFIsUF9RVUFELFBfU0lOR0xFLDgnaDAwLDgnaEVCfSk7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMDApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDAwCisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwMCxyZWFkX2RhdGEsMzInaDAwMDAwMDkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjA0LHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDgscmVhZF9kYXRhLDMyJ2gwMDAwMDE5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwQyxyZWFkX2RhdGEsMzInaDAwMDAwMjEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjEwLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTQscmVhZF9kYXRhLDMyJ2gwMDAwMDMxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxOCxyZWFkX2RhdGEsMzInaDAwMDAwMzkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjFDLHJlYWRfZGF0YSwzMidoMDAwMDA0MTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMDAscmVhZF9kYXRhLDMyJ2gwMDA1QTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwNCxyZWFkX2RhdGEsMzInaDlERTMwNTkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzA4LHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMEMscmVhZF9kYXRhLDMyJ2g0MzA1MDA0OSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxMCxyZWFkX2RhdGEsMzInaDAwNjJBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzE0LHJlYWRfZGF0YSwzMidoMDA0OTAyQjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMTgscmVhZF9kYXRhLDMyJ2gwMzEzMDI5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxQyxyZWFkX2RhdGEsMzInaGEwMjMwNjMwKTsKKworCisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJJGRpc3BsYXkoIlRlc3RpbmcgRGlyZWN0IFNQSSBNZW1vcnkgUmVhZCB3aXRoIFByZWZldGNoOjFEVyIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMTApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDEwCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fRE1FTV9HMF9SRF9DVFJMLHtQX0ZTTV9DQU1EUiw0J2IwMDAxLDInYjEwLFBfTU9ERV9TV0lUQ0hfQVRfQUREUixQX1FVQUQsUF9TSU5HTEUsOCdoMDAsOCdoRUJ9KTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gwMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMDAKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjAwLHJlYWRfZGF0YSwzMidoMDAwMDAwOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDQscmVhZF9kYXRhLDMyJ2gwMDAwMDExMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwOCxyZWFkX2RhdGEsMzInaDAwMDAwMTkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjBDLHJlYWRfZGF0YSwzMidoMDAwMDAyMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTAscmVhZF9kYXRhLDMyJ2gwMDAwMDI5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxNCxyZWFkX2RhdGEsMzInaDAwMDAwMzEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjE4LHJlYWRfZGF0YSwzMidoMDAwMDAzOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMUMscmVhZF9kYXRhLDMyJ2gwMDAwMDQxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwMCxyZWFkX2RhdGEsMzInaDAwMDVBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzA0LHJlYWRfZGF0YSwzMidoOURFMzA1OTEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMDgscmVhZF9kYXRhLDMyJ2gwMkI3RkVFNSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwQyxyZWFkX2RhdGEsMzInaDQzMDUwMDQ5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzEwLHJlYWRfZGF0YSwzMidoMDA2MkEwMjMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMTQscmVhZF9kYXRhLDMyJ2gwMDQ5MDJCNyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxOCxyZWFkX2RhdGEsMzInaDAzMTMwMjkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzFDLHJlYWRfZGF0YSwzMidoYTAyMzA2MzApOworCisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJJGRpc3BsYXkoIlRlc3RpbmcgRGlyZWN0IFNQSSBNZW1vcnkgUmVhZCB3aXRoIFByZWZldGNoOjdEVyIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMTApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDEwCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fRE1FTV9HMF9SRF9DVFJMLHtQX0ZTTV9DQU1EUiw0J2IwMDAxLDInYjEwLFBfTU9ERV9TV0lUQ0hfQVRfQUREUixQX1FVQUQsUF9TSU5HTEUsOCdoMDAsOCdoRUJ9KTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gwMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMDAKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjAwLHJlYWRfZGF0YSwzMidoMDAwMDAwOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDQscmVhZF9kYXRhLDMyJ2gwMDAwMDExMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwOCxyZWFkX2RhdGEsMzInaDAwMDAwMTkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjBDLHJlYWRfZGF0YSwzMidoMDAwMDAyMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTAscmVhZF9kYXRhLDMyJ2gwMDAwMDI5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxNCxyZWFkX2RhdGEsMzInaDAwMDAwMzEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjE4LHJlYWRfZGF0YSwzMidoMDAwMDAzOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMUMscmVhZF9kYXRhLDMyJ2gwMDAwMDQxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwMCxyZWFkX2RhdGEsMzInaDAwMDVBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzA0LHJlYWRfZGF0YSwzMidoOURFMzA1OTEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMDgscmVhZF9kYXRhLDMyJ2gwMkI3RkVFNSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwQyxyZWFkX2RhdGEsMzInaDQzMDUwMDQ5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzEwLHJlYWRfZGF0YSwzMidoMDA2MkEwMjMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMTQscmVhZF9kYXRhLDMyJ2gwMDQ5MDJCNyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxOCxyZWFkX2RhdGEsMzInaDAzMTMwMjkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzFDLHJlYWRfZGF0YSwzMidoYTAyMzA2MzApOworCisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJJGRpc3BsYXkoIiAgVGVzdGluZyBTaW5nbGUgV29yZCBJbmRpcmVjdCBTUEkgTWVtb3J5IFJlYWQiKTsKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwNCwnaDEwKTsgLy8gQ2hhbmdlIHRoZSBCYW5rIFNlbCAxMAorCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDEsezE2J2gwLDEnYjAsMSdiMCw0J2IwMDAxLFBfTU9ERV9TV0lUQ0hfQVRfQUREUixQX1FVQUQsUF9TSU5HTEUsNCdiMDAwMX0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDIsezgnaDQsMidiMDAsMidiMTAsUF9GU01fQ0FNRFIsOCdoMDAsOCdoRUJ9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMjAwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDA5Myk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDIwNCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAyMDgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMTkzKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMjBDKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDIxMyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDIxMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAyMTQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMzEzKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMjE4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDM5Myk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDIxQyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDA0MTMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAzMDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDVBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMzA0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2g5REUzMDU5MSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDMwOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAzMEMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDQzMDUwMDQ5KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMzEwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDYyQTAyMyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDMxNCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDA0OTAyQjcpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAzMTgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAzMTMwMjkxKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMzFDKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2hhMDIzMDYzMCk7CisJCXJlcGVhdCAoMTAwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCIgIFRlc3RpbmcgVHdvIFdvcmQgSW5kaXJlY3QgU1BJIE1lbW9yeSBSZWFkIik7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gxMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMTAKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwxLHsxNidoMCwxJ2IwLDEnYjAsNCdiMDAwMSxQX01PREVfU1dJVENIX0FUX0FERFIsUF9RVUFELFBfU0lOR0xFLDQnYjAwMDF9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2g4LDInYjAwLDInYjEwLFBfRlNNX0NBTURSLDgnaDAwLDgnaEVCfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDIwMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAwOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMTEzKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMjA4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDE5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAyMTMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAyMTApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMjkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDMxMyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDIxOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAzOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwNDEzKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMzAwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDA1QTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoOURFMzA1OTEpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAzMDgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAyQjdGRUU1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2g0MzA1MDA0OSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDMxMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDA2MkEwMjMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwNDkwMkI3KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMzE4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMzEzMDI5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoYTAyMzA2MzApOworCQlyZXBlYXQgKDEwMCkgQChwb3NlZGdlIGNsb2NrKTsKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkkZGlzcGxheSgiICBUZXN0aW5nIFRocmVlIFdvcmQgSW5kaXJlY3QgU1BJIE1lbW9yeSBSZWFkIik7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gxMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMTAKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwxLHsxNidoMCwxJ2IwLDEnYjAsNCdiMDAwMSxQX01PREVfU1dJVENIX0FUX0FERFIsUF9RVUFELFBfU0lOR0xFLDQnYjAwMDF9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2hDLDInYjAwLDInYjEwLFBfRlNNX0NBTURSLDgnaDAwLDgnaEVCfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDIwMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAwOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMTEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDE5Myk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDIwQyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAyMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMjkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDMxMyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDMwMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwNUEwMjMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDlERTMwNTkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMkI3RkVFNSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDMwQyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoNDMwNTAwNDkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwNjJBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDQ5MDJCNyk7CisJCXJlcGVhdCAoMTAwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCIgIFRlc3RpbmcgRm91ciBXb3JkIEluZGlyZWN0IFNQSSBNZW1vcnkgUmVhZCIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMTApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDEwCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDEsUF9NT0RFX1NXSVRDSF9BVF9BRERSLFBfUVVBRCxQX1NJTkdMRSw0J2IwMDAxfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMix7OCdoMTAsMidiMDAsMidiMTAsUF9GU01fQ0FNRFIsOCdoMDAsOCdoRUJ9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMjAwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDA5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMTkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDIxMyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDIxMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMzEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDM5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDA0MTMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAzMDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDVBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2g5REUzMDU5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDQzMDUwMDQ5KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMzEwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDYyQTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDA0OTAyQjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAzMTMwMjkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2hhMDIzMDYzMCk7CisJCXJlcGVhdCAoMTAwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCIgIFRlc3RpbmcgRml2ZSBXb3JkIEluZGlyZWN0IFNQSSBNZW1vcnkgUmVhZCIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMTApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDEwCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDEsUF9NT0RFX1NXSVRDSF9BVF9BRERSLFBfUVVBRCxQX1NJTkdMRSw0J2IwMDAxfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMix7OCdoMTQsMidiMDAsMidiMTAsUF9GU01fQ0FNRFIsOCdoMDAsOCdoRUJ9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMjAwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDA5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMTkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDIxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAzMDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDVBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2g5REUzMDU5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDQzMDUwMDQ5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDYyQTAyMyk7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJJGRpc3BsYXkoIiAgVGVzdGluZyBFaWdodCBXb3JkIEluZGlyZWN0IFNQSSBNZW1vcnkgUmVhZCIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMTApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDEwCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDEsUF9NT0RFX1NXSVRDSF9BVF9BRERSLFBfUVVBRCxQX1NJTkdMRSw0J2IwMDAxfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMix7OCdoMjAsMidiMDAsMidiMTAsUF9GU01fQ0FNRFIsOCdoMDAsOCdoRUJ9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMjAwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDA5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMTkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDIxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMzEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDM5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDA0MTMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAzMDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDVBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2g5REUzMDU5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDQzMDUwMDQ5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDYyQTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDA0OTAyQjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAzMTMwMjkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2hhMDIzMDYzMCk7CisKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkkZGlzcGxheSgiICBTZWN0b3IgRXJhc2UgQ29tbWFuZCAgICAgICAgICAgICIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMTApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDEwCisJCS8vIFdFTiBDT01NQU5ECisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfU0lOR0xFLFBfU0lOR0xFLDQnYjAwMDF9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2gwLDInYjAwLDInYjAwLFBfRlNNX0MsOCdoMDAsOCdoMDZ9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwKTsKKyAgICAgICAgICAgICAgICAvLyBTZWN0b3IgRXJhc2UKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwxLHsxNidoMCwxJ2IwLDEnYjAsNCdiMDAwMCxQX01PREVfU1dJVENIX0lETEUsUF9TSU5HTEUsUF9TSU5HTEUsNCdiMDAwMX0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDIsezgnaDAsMidiMDAsMidiMTAsUF9GU01fQ0EsOCdoMDAsOCdoRDh9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMDAwKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwKTsKKworCQkvLyBSRFNSCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfU0lOR0xFLFBfU0lOR0xFLDQnYjAwMDF9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2g0LDInYjAwLDInYjAwLFBfRlNNX0NSLDgnaDAwLDgnaDA1fSk7CisJCXJlYWRfZGF0YSA9IDMyJ2hGRkZGX0ZGRkY7CisJCXdoaWxlIChyZWFkX2RhdGFbMTowXSA9PSAyJ2IxMSkgYmVnaW4KKwkJICAgIHdiX3VzZXJfY29yZV9yZWFkKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSk7CisJCSAgICByZXBlYXQgKDEwKSBAKHBvc2VkZ2UgY2xvY2spOworCQllbmQKKworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCIgIFBhZ2UgV3JpdGUgQ29tbWFuZCBBZGRyZXNzOiAweDAwICAgICAgICAgICIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCS8vIFdFTiBDT01NQU5ECisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfU0lOR0xFLFBfU0lOR0xFLDQnYjAwMDF9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2gwLDInYjAwLDInYjAwLFBfRlNNX0MsOCdoMDAsOCdoMDZ9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwKTsKKwkJIC8vIFBhZ2UgUHJvZ3JhbWluZworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDEsezE2J2gwLDEnYjAsMSdiMCw0J2IwMDAwLFBfTU9ERV9TV0lUQ0hfSURMRSxQX1NJTkdMRSxQX1NJTkdMRSw0J2IwMDAxfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMix7OCdoRjAsMidiMDAsMidiMTAsUF9GU01fQ0FXLDgnaDAwLDgnaDAyfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDAwMCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMDApOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDAxKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAwMik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMDMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDA0KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAwNSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMDYpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDA3KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAwOCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMDkpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDEwKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAxMSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMTIpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDEzKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAxNCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMTUpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDE2KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAxNyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMTgpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDE5KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAyMCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMjEpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDIyKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAyMyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMjQpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDI1KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAyNik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMjcpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDI4KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAyOSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMzApOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDMxKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAzMik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMzMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDM0KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAzNSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMzYpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDM3KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAzOCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMzkpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDQwKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDA0MSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwNDIpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDQzKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDA0NCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwNDUpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDQ2KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDA0Nyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwNDgpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDQ5KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDA1MCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwNTEpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDUyKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDA1Myk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwNTQpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDU1KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDA1Nik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwNTcpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDU4KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDA1OSk7CisKKwkJLy8gUkRTUgorCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDEsezE2J2gwLDEnYjAsMSdiMCw0J2IwMDAwLFBfTU9ERV9TV0lUQ0hfSURMRSxQX1NJTkdMRSxQX1NJTkdMRSw0J2IwMDAxfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMix7OCdoNCwyJ2IwMCwyJ2IwMCxQX0ZTTV9DUiw4J2gwMCw4J2gwNX0pOworCQlyZWFkX2RhdGEgPSAzMidoRkZGRl9GRkZGOworCQl3aGlsZSAocmVhZF9kYXRhWzE6MF0gPT0gMidiMTEpIGJlZ2luCisJCSAgICB3Yl91c2VyX2NvcmVfcmVhZChgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEpOworCQkgICAgcmVwZWF0ICgxMCkgQChwb3NlZGdlIGNsb2NrKTsKKwkJIGVuZAorCisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJJGRpc3BsYXkoIiAgUGFnZSBSZWFkIHRocm91Z2ggRGlyZWN0IEFjY2VzcyAgICAgICAgICAgICIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMDApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDAwCisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDAwMCxyZWFkX2RhdGEsMzInaDAwMDEwMDAwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDA0LHJlYWRfZGF0YSwzMidoMDAwMTAwMDEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwMDgscmVhZF9kYXRhLDMyJ2gwMDAxMDAwMik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDAwQyxyZWFkX2RhdGEsMzInaDAwMDEwMDAzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDEwLHJlYWRfZGF0YSwzMidoMDAwMTAwMDQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwMTQscmVhZF9kYXRhLDMyJ2gwMDAxMDAwNSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDAxOCxyZWFkX2RhdGEsMzInaDAwMDEwMDA2KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDFDLHJlYWRfZGF0YSwzMidoMDAwMTAwMDcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwMjAscmVhZF9kYXRhLDMyJ2gwMDAxMDAwOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDAyNCxyZWFkX2RhdGEsMzInaDAwMDEwMDA5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDI4LHJlYWRfZGF0YSwzMidoMDAwMTAwMTApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwMkMscmVhZF9kYXRhLDMyJ2gwMDAxMDAxMSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDAzMCxyZWFkX2RhdGEsMzInaDAwMDEwMDEyKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDM0LHJlYWRfZGF0YSwzMidoMDAwMTAwMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwMzgscmVhZF9kYXRhLDMyJ2gwMDAxMDAxNCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDAzQyxyZWFkX2RhdGEsMzInaDAwMDEwMDE1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDQwLHJlYWRfZGF0YSwzMidoMDAwMTAwMTYpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwNDQscmVhZF9kYXRhLDMyJ2gwMDAxMDAxNyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDA0OCxyZWFkX2RhdGEsMzInaDAwMDEwMDE4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDRDLHJlYWRfZGF0YSwzMidoMDAwMTAwMTkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwNTAscmVhZF9kYXRhLDMyJ2gwMDAxMDAyMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDA1NCxyZWFkX2RhdGEsMzInaDAwMDEwMDIxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDU4LHJlYWRfZGF0YSwzMidoMDAwMTAwMjIpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwNUMscmVhZF9kYXRhLDMyJ2gwMDAxMDAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDA2MCxyZWFkX2RhdGEsMzInaDAwMDEwMDI0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDY0LHJlYWRfZGF0YSwzMidoMDAwMTAwMjUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwNjgscmVhZF9kYXRhLDMyJ2gwMDAxMDAyNik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDA2QyxyZWFkX2RhdGEsMzInaDAwMDEwMDI3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDcwLHJlYWRfZGF0YSwzMidoMDAwMTAwMjgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwNzQscmVhZF9kYXRhLDMyJ2gwMDAxMDAyOSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDA3OCxyZWFkX2RhdGEsMzInaDAwMDEwMDMwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDdDLHJlYWRfZGF0YSwzMidoMDAwMTAwMzEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwODAscmVhZF9kYXRhLDMyJ2gwMDAxMDAzMik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDA4NCxyZWFkX2RhdGEsMzInaDAwMDEwMDMzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDg4LHJlYWRfZGF0YSwzMidoMDAwMTAwMzQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwOEMscmVhZF9kYXRhLDMyJ2gwMDAxMDAzNSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDA5MCxyZWFkX2RhdGEsMzInaDAwMDEwMDM2KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDk0LHJlYWRfZGF0YSwzMidoMDAwMTAwMzcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwOTgscmVhZF9kYXRhLDMyJ2gwMDAxMDAzOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDA5QyxyZWFkX2RhdGEsMzInaDAwMDEwMDM5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMEEwLHJlYWRfZGF0YSwzMidoMDAwMTAwNDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwQTQscmVhZF9kYXRhLDMyJ2gwMDAxMDA0MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDBBOCxyZWFkX2RhdGEsMzInaDAwMDEwMDQyKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMEFDLHJlYWRfZGF0YSwzMidoMDAwMTAwNDMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwQjAscmVhZF9kYXRhLDMyJ2gwMDAxMDA0NCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDBCNCxyZWFkX2RhdGEsMzInaDAwMDEwMDQ1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMEI4LHJlYWRfZGF0YSwzMidoMDAwMTAwNDYpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwQkMscmVhZF9kYXRhLDMyJ2gwMDAxMDA0Nyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDBDMCxyZWFkX2RhdGEsMzInaDAwMDEwMDQ4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMEM0LHJlYWRfZGF0YSwzMidoMDAwMTAwNDkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwQzgscmVhZF9kYXRhLDMyJ2gwMDAxMDA1MCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDBDQyxyZWFkX2RhdGEsMzInaDAwMDEwMDUxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMEQwLHJlYWRfZGF0YSwzMidoMDAwMTAwNTIpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwRDQscmVhZF9kYXRhLDMyJ2gwMDAxMDA1Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDBEOCxyZWFkX2RhdGEsMzInaDAwMDEwMDU0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMERDLHJlYWRfZGF0YSwzMidoMDAwMTAwNTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwRTAscmVhZF9kYXRhLDMyJ2gwMDAxMDA1Nik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDBFNCxyZWFkX2RhdGEsMzInaDAwMDEwMDU3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMEU4LHJlYWRfZGF0YSwzMidoMDAwMTAwNTgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwRUMscmVhZF9kYXRhLDMyJ2gwMDAxMDA1OSk7CisKKwkJcmVwZWF0ICgxMDApIEAocG9zZWRnZSBjbG9jayk7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJJGRpc3BsYXkoIiAgUGFnZSBSZWFkIHRocm91Z2ggSW5kaXJlY3QgQWNjZXNzICAgICAgICAgICAiKTsKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwNCwnaDEwKTsgLy8gQ2hhbmdlIHRoZSBCYW5rIFNlbCAxMAorCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDEsezE2J2gwLDEnYjAsMSdiMCw0J2IwMDAxLFBfTU9ERV9TV0lUQ0hfQVRfQUREUixQX1FVQUQsUF9TSU5HTEUsNCdiMDAwMX0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDIsezgnaEYwLDInYjAwLDInYjEwLFBfRlNNX0NBTURSLDgnaDAwLDgnaEVCfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDAwMCk7CisKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAwMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMDEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDAyKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAwMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMDQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDA1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAwNik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMDcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDA4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAwOSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMTApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDExKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAxMik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDE0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAxNSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMTYpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDE3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAxOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMTkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDIwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAyMSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMjIpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAyNCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMjUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDI2KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAyNyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMjgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDI5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAzMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMzEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDMyKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAzMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMzQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDM1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAzNik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMzcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDM4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAzOSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwNDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDQxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDA0Mik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwNDMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDQ0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDA0NSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwNDYpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDQ3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDA0OCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwNDkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDUwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDA1MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwNTIpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDUzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDA1NCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwNTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDU2KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDA1Nyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwNTgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDU5KTsKKworCQlyZXBlYXQgKDEwMCkgQChwb3NlZGdlIGNsb2NrKTsKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkkZGlzcGxheSgiICBQYWdlIFdyaXRlIENvbW1hbmQgQWRkcmVzczogMHgyMDAgICAgICAgICAgIik7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gxMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMTAKKwkJLy8gV0VOIENPTU1BTkQKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwxLHsxNidoMCwxJ2IwLDEnYjAsNCdiMDAwMCxQX01PREVfU1dJVENIX0lETEUsUF9TSU5HTEUsUF9TSU5HTEUsNCdiMDAwMX0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDIsezgnaDAsMidiMDAsMidiMDAsUF9GU01fQyw4J2gwMCw4J2gwNn0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDApOworCQkgLy8gUGFnZSBQcm9ncmFtaW5nCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfU0lOR0xFLFBfU0lOR0xFLDQnYjAwMDF9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2hGMCwyJ2IwMCwyJ2IxMCxQX0ZTTV9DQVcsOCdoMDAsOCdoMDJ9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMjAwKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAwMCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMDEpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDAyKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAwMyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMDQpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDA1KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAwNik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMDcpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDA4KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAwOSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMTApOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDExKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAxMik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMTMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDE0KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAxNSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMTYpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDE3KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAxOCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMTkpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDIwKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAyMSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMjIpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAyNCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMjUpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDI2KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAyNyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMjgpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDI5KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAzMCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMzEpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDMyKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAzMyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMzQpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDM1KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAzNik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMzcpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDM4KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAzOSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwNDApOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDQxKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDA0Mik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwNDMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDQ0KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDA0NSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwNDYpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDQ3KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDA0OCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwNDkpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDUwKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDA1MSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwNTIpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDUzKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDA1NCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwNTUpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDU2KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDA1Nyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwNTgpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDU5KTsKKworCQkvLyBSRFNSCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfU0lOR0xFLFBfU0lOR0xFLDQnYjAwMDF9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2g0LDInYjAwLDInYjAwLFBfRlNNX0NSLDgnaDAwLDgnaDA1fSk7CisJCXJlYWRfZGF0YSA9IDMyJ2hGRkZGX0ZGRkY7CisJCXdoaWxlIChyZWFkX2RhdGFbMTowXSA9PSAyJ2IxMSkgYmVnaW4KKwkJICAgIHdiX3VzZXJfY29yZV9yZWFkKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSk7CisJCSAgICByZXBlYXQgKDEwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkgZW5kCisKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkkZGlzcGxheSgiICBQYWdlIFJlYWQgdGhyb3VnaCBEaXJlY3QgQWNjZXNzICAgICAgICAgICAgIik7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gwMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMDAKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjAwLHJlYWRfZGF0YSwzMidoMDAwMjAwMDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDQscmVhZF9kYXRhLDMyJ2gwMDAyMDAwMSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwOCxyZWFkX2RhdGEsMzInaDAwMDIwMDAyKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjBDLHJlYWRfZGF0YSwzMidoMDAwMjAwMDMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTAscmVhZF9kYXRhLDMyJ2gwMDAyMDAwNCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxNCxyZWFkX2RhdGEsMzInaDAwMDIwMDA1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjE4LHJlYWRfZGF0YSwzMidoMDAwMjAwMDYpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMUMscmVhZF9kYXRhLDMyJ2gwMDAyMDAwNyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIyMCxyZWFkX2RhdGEsMzInaDAwMDIwMDA4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjI0LHJlYWRfZGF0YSwzMidoMDAwMjAwMDkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMjgscmVhZF9kYXRhLDMyJ2gwMDAyMDAxMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIyQyxyZWFkX2RhdGEsMzInaDAwMDIwMDExKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjMwLHJlYWRfZGF0YSwzMidoMDAwMjAwMTIpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMzQscmVhZF9kYXRhLDMyJ2gwMDAyMDAxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIzOCxyZWFkX2RhdGEsMzInaDAwMDIwMDE0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjNDLHJlYWRfZGF0YSwzMidoMDAwMjAwMTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyNDAscmVhZF9kYXRhLDMyJ2gwMDAyMDAxNik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDI0NCxyZWFkX2RhdGEsMzInaDAwMDIwMDE3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjQ4LHJlYWRfZGF0YSwzMidoMDAwMjAwMTgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyNEMscmVhZF9kYXRhLDMyJ2gwMDAyMDAxOSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDI1MCxyZWFkX2RhdGEsMzInaDAwMDIwMDIwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjU0LHJlYWRfZGF0YSwzMidoMDAwMjAwMjEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyNTgscmVhZF9kYXRhLDMyJ2gwMDAyMDAyMik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDI1QyxyZWFkX2RhdGEsMzInaDAwMDIwMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjYwLHJlYWRfZGF0YSwzMidoMDAwMjAwMjQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyNjQscmVhZF9kYXRhLDMyJ2gwMDAyMDAyNSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDI2OCxyZWFkX2RhdGEsMzInaDAwMDIwMDI2KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjZDLHJlYWRfZGF0YSwzMidoMDAwMjAwMjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyNzAscmVhZF9kYXRhLDMyJ2gwMDAyMDAyOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDI3NCxyZWFkX2RhdGEsMzInaDAwMDIwMDI5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjc4LHJlYWRfZGF0YSwzMidoMDAwMjAwMzApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyN0MscmVhZF9kYXRhLDMyJ2gwMDAyMDAzMSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDI4MCxyZWFkX2RhdGEsMzInaDAwMDIwMDMyKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjg0LHJlYWRfZGF0YSwzMidoMDAwMjAwMzMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyODgscmVhZF9kYXRhLDMyJ2gwMDAyMDAzNCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDI4QyxyZWFkX2RhdGEsMzInaDAwMDIwMDM1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjkwLHJlYWRfZGF0YSwzMidoMDAwMjAwMzYpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyOTQscmVhZF9kYXRhLDMyJ2gwMDAyMDAzNyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDI5OCxyZWFkX2RhdGEsMzInaDAwMDIwMDM4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjlDLHJlYWRfZGF0YSwzMidoMDAwMjAwMzkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyQTAscmVhZF9kYXRhLDMyJ2gwMDAyMDA0MCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDJBNCxyZWFkX2RhdGEsMzInaDAwMDIwMDQxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMkE4LHJlYWRfZGF0YSwzMidoMDAwMjAwNDIpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyQUMscmVhZF9kYXRhLDMyJ2gwMDAyMDA0Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDJCMCxyZWFkX2RhdGEsMzInaDAwMDIwMDQ0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMkI0LHJlYWRfZGF0YSwzMidoMDAwMjAwNDUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyQjgscmVhZF9kYXRhLDMyJ2gwMDAyMDA0Nik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDJCQyxyZWFkX2RhdGEsMzInaDAwMDIwMDQ3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMkMwLHJlYWRfZGF0YSwzMidoMDAwMjAwNDgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyQzQscmVhZF9kYXRhLDMyJ2gwMDAyMDA0OSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDJDOCxyZWFkX2RhdGEsMzInaDAwMDIwMDUwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMkNDLHJlYWRfZGF0YSwzMidoMDAwMjAwNTEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyRDAscmVhZF9kYXRhLDMyJ2gwMDAyMDA1Mik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDJENCxyZWFkX2RhdGEsMzInaDAwMDIwMDUzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMkQ4LHJlYWRfZGF0YSwzMidoMDAwMjAwNTQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyREMscmVhZF9kYXRhLDMyJ2gwMDAyMDA1NSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDJFMCxyZWFkX2RhdGEsMzInaDAwMDIwMDU2KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMkU0LHJlYWRfZGF0YSwzMidoMDAwMjAwNTcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyRTgscmVhZF9kYXRhLDMyJ2gwMDAyMDA1OCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDJFQyxyZWFkX2RhdGEsMzInaDAwMDIwMDU5KTsKKworCQlyZXBlYXQgKDEwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCIgIFBhZ2UgUmVhZCB0aHJvdWdoIEluZGlyZWN0IEFjY2VzcyAgICAgICAgICAgIik7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gxMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMTAKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwxLHsxNidoMCwxJ2IwLDEnYjAsNCdiMDAwMSxQX01PREVfU1dJVENIX0FUX0FERFIsUF9RVUFELFBfU0lOR0xFLDQnYjAwMDF9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2hGMCwyJ2IwMCwyJ2IxMCxQX0ZTTV9DQU1EUiw4J2gwMCw4J2hFQn0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAyMDApOworCisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDAxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAwMik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMDMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDA0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAwNSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMDYpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDA3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAwOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMDkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDEwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAxMSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMTIpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAxNCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDE2KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAxNyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMTgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDE5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAyMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMjEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDIyKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMjQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDI1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAyNik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDI4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAyOSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMzApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDMxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAzMik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMzMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDM0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAzNSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMzYpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDM3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAzOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMzkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDQwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDA0MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwNDIpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDQzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDA0NCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwNDUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDQ2KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDA0Nyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwNDgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDQ5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDA1MCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwNTEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDUyKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDA1Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwNTQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDU1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDA1Nik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwNTcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDU4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDA1OSk7CisKKwkJcmVwZWF0ICgxMDApIEAocG9zZWRnZSBjbG9jayk7CisJCQkvLyAkZGlzcGxheSgiKzEwMDAgY3ljbGVzIik7CisKKyAgICAgICAgICAJaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisJCSAgIGBpZmRlZiBHTAorCSAgICAJICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTUEkgTWFzdGVyIE1vZGUgKEdMKSBQYXNzZWQiKTsKKwkJICAgYGVsc2UKKwkJICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTUEkgTWFzdGVyIE1vZGUgKFJUTCkgUGFzc2VkIik7CisJCSAgIGBlbmRpZgorCSAgICAgICAgZW5kIGVsc2UgYmVnaW4KKwkJICAgIGBpZmRlZiBHTAorCSAgICAJICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU1BJIE1hc3RlciBNb2RlIChHTCkgRmFpbGVkIik7CisJCSAgICBgZWxzZQorCQkgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTUEkgTWFzdGVyIE1vZGUgKFJUTCkgRmFpbGVkIik7CisJCSAgICBgZW5kaWYKKwkJIGVuZAorCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAgICAgJGZpbmlzaDsKKwllbmQKKworCWluaXRpYWwgYmVnaW4KKwkJd2JfcnN0X2kgPD0gMSdiMTsKKwkJIzEwMDsKKwkJd2JfcnN0X2kgPD0gMSdiMDsJICAgIAkvLyBSZWxlYXNlIHJlc2V0CisJZW5kCit3aXJlIFVTRVJfVkREMVY4ID0gMSdiMTsKK3dpcmUgVlNTID0gMSdiMDsKKwordXNlcl9wcm9qZWN0X3dyYXBwZXIgdV90b3AoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAudmNjZDEoVVNFUl9WREQxVjgpLAkvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgIC52c3NkMShWU1MpLAkvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisgICAgLndiX2Nsa19pICAgICAgICAoY2xvY2spLCAgLy8gU3lzdGVtIGNsb2NrCisgICAgLnVzZXJfY2xvY2syICAgICAoMSdiMSksICAvLyBSZWFsLXRpbWUgY2xvY2sKKyAgICAud2JfcnN0X2kgICAgICAgICh3Yl9yc3RfaSksICAvLyBSZWd1bGFyIFJlc2V0IHNpZ25hbAorCisgICAgLndic19jeWNfaSAgICh3YmRfZXh0X2N5Y19pKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgLndic19zdGJfaSAgICh3YmRfZXh0X3N0Yl9pKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgLndic19hZHJfaSAgICh3YmRfZXh0X2Fkcl9pKSwgIC8vIGFkZHJlc3MKKyAgICAud2JzX3dlX2kgICAgKHdiZF9leHRfd2VfaSksICAvLyB3cml0ZQorICAgIC53YnNfZGF0X2kgICAod2JkX2V4dF9kYXRfaSksICAvLyBkYXRhIG91dHB1dAorICAgIC53YnNfc2VsX2kgICAod2JkX2V4dF9zZWxfaSksICAvLyBieXRlIGVuYWJsZQorCisgICAgLndic19kYXRfbyAgICh3YmRfZXh0X2RhdF9vKSwgIC8vIGRhdGEgaW5wdXQKKyAgICAud2JzX2Fja19vICAgKHdiZF9leHRfYWNrX28pLCAgLy8gYWNrbm93bGVnZW1lbnQKKworIAorICAgIC8vIExvZ2ljIEFuYWx5emVyIFNpZ25hbHMKKyAgICAubGFfZGF0YV9pbiAgICAgICgnMSkgLAorICAgIC5sYV9kYXRhX291dCAgICAgKCksCisgICAgLmxhX29lbmIgICAgICAgICAoJzApLAorIAorCisgICAgLy8gSU9zCisgICAgLmlvX2luICAgICAgICAgIChpb19pbikgICwKKyAgICAuaW9fb3V0ICAgICAgICAgKGlvX291dCkgLAorICAgIC5pb19vZWIgICAgICAgICAoaW9fb2ViKSAsCisKKyAgICAudXNlcl9pcnEgICAgICAgKCkgCisKKyk7CisKK2BpZm5kZWYgR0wgLy8gRHJpdmUgUG93ZXIgZm9yIEhvbGQgRml4IEJ1ZgorICAgIC8vIEFsbCBzdGFuZGFyZCBjZWxsIG5lZWQgcG93ZXIgaG9vay11cCBmb3IgZnVuY3Rpb25hbGl0eSB3b3JrCisgICAgaW5pdGlhbCBiZWdpbgorCisgICAgZW5kCitgZW5kaWYgICAgCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgSW50ZWdyYXRlIHRoZSBTZXJpYWwgZmxhc2ggd2l0aCBxdXJkIHN1cHBvcnQgdG8KKy8vICB1c2VyIGNvcmUgdXNpbmcgdGhlIGdwaW8gcGFkcworLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgd2lyZSBmbGFzaF9jbGsgPSBpb19vdXRbMjRdOworICAgd2lyZSBmbGFzaF9jc2IgPSBpb19vdXRbMjhdOworICAgLy8gQ3JlYXRpbmcgUGFkIERlbGF5CisgICB3aXJlICMxIGlvX29lYl8yOSA9IGlvX29lYlsyOV07CisgICB3aXJlICMxIGlvX29lYl8zMCA9IGlvX29lYlszMF07CisgICB3aXJlICMxIGlvX29lYl8zMSA9IGlvX29lYlszMV07CisgICB3aXJlICMxIGlvX29lYl8zMiA9IGlvX29lYlszMl07CisgICB0cmkgICMxIGZsYXNoX2lvMCA9IChpb19vZWJfMjk9PSAxJ2IwKSA/IGlvX291dFsyOV0gOiAxJ2J6OworICAgdHJpICAjMSBmbGFzaF9pbzEgPSAoaW9fb2ViXzMwPT0gMSdiMCkgPyBpb19vdXRbMzBdIDogMSdiejsKKyAgIHRyaSAgIzEgZmxhc2hfaW8yID0gKGlvX29lYl8zMT09IDEnYjApID8gaW9fb3V0WzMxXSA6IDEnYno7CisgICB0cmkgICMxIGZsYXNoX2lvMyA9IChpb19vZWJfMzI9PSAxJ2IwKSA/IGlvX291dFszMl0gOiAxJ2J6OworCisgICBhc3NpZ24gaW9faW5bMjldID0gZmxhc2hfaW8wOworICAgYXNzaWduIGlvX2luWzMwXSA9IGZsYXNoX2lvMTsKKyAgIGFzc2lnbiBpb19pblszMV0gPSBmbGFzaF9pbzI7CisgICBhc3NpZ24gaW9faW5bMzJdID0gZmxhc2hfaW8zOworCisKKyAgIC8vIFF1YWQgZmxhc2gKKyAgICAgczI1ZmwyNTZzICMoLm1lbV9maWxlX25hbWUoImZsYXNoMC5oZXgiKSwKKwkgICAgICAgICAub3RwX2ZpbGVfbmFtZSgibm9uZSIpLAorICAgICAgICAgICAgICAgICAuVGltaW5nTW9kZWwoIlMyNUZMNTEyU0FHTUZJMDEwX0ZfMzBwRiIpKSAKKwkJIHVfc3BpX2ZsYXNoXzI1Nm1iICgKKyAgICAgICAgICAgLy8gRGF0YSBJbnB1dHMvT3V0cHV0cworICAgICAgIC5TSSAgICAgIChmbGFzaF9pbzApLAorICAgICAgIC5TTyAgICAgIChmbGFzaF9pbzEpLAorICAgICAgIC8vIENvbnRyb2xzCisgICAgICAgLlNDSyAgICAgKGZsYXNoX2NsayksCisgICAgICAgLkNTTmVnICAgKGZsYXNoX2NzYiksCisgICAgICAgLldQTmVnICAgKGZsYXNoX2lvMiksCisgICAgICAgLkhPTEROZWcgKGZsYXNoX2lvMyksCisgICAgICAgLlJTVE5lZyAgKCF3Yl9yc3RfaSkKKworICAgICAgICk7CisKKyAgIHdpcmUgc3BpcmFtX2NzYiA9IGlvX291dFsyNl07CisKKyAgIHNwaXJhbSAjKC5tZW1fZmlsZV9uYW1lKCJmbGFzaDEuaGV4IikpCisJdV9zZnJhbSAoCisgICAgICAgICAvLyBEYXRhIElucHV0cy9PdXRwdXRzCisgICAgICAgICAgIC5pbzAgICAgIChmbGFzaF9pbzApLAorICAgICAgICAgICAuaW8xICAgICAoZmxhc2hfaW8xKSwKKyAgICAgICAgICAgLy8gQ29udHJvbHMKKyAgICAgICAgICAgLmNsayAgICAoZmxhc2hfY2xrKSwKKyAgICAgICAgICAgLmNzYiAgICAoc3BpcmFtX2NzYiksCisgICAgICAgICAgIC5pbzIgICAgKGZsYXNoX2lvMiksCisgICAgICAgICAgIC5pbzMgICAgKGZsYXNoX2lvMykKKyAgICApOworCisKK3Rhc2sgd2JfdXNlcl9jb3JlX3dyaXRlOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitpbnB1dCBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMTsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPWRhdGE7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naEY7ICAvLyBieXRlIGVuYWJsZQorICB3YmRfZXh0X2N5Y19pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YWl0KHdiZF9leHRfYWNrX28gPT0gMSk7CisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgJGRpc3BsYXkoIlNUQVRVUzogV0IgVVNFUiBBQ0NFU1MgV1JJVEUgQWRkcmVzcyA6IDB4JXgsIERhdGEgOiAweCV4IixhZGRyZXNzLGRhdGEpOworICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CitlbmQKK2VuZHRhc2sKKwordGFzayAgd2JfdXNlcl9jb3JlX3JlYWQ7CitpbnB1dCBbMzE6MF0gYWRkcmVzczsKK291dHB1dCBbMzE6MF0gZGF0YTsKK3JlZyAgICBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPScwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICBkYXRhICA9IHdiZF9leHRfZGF0X287ICAKKyAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAjMTsKKyAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9hZHJfaSA9J2gwOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0naDA7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naDA7ICAvLyBieXRlIGVuYWJsZQorICAkZGlzcGxheSgiU1RBVFVTOiBXQiBVU0VSIEFDQ0VTUyBSRUFEICBBZGRyZXNzIDogMHgleCwgRGF0YSA6IDB4JXgiLGFkZHJlc3MsZGF0YSk7CisgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKK2VuZAorZW5kdGFzaworCit0YXNrICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjazsKK2lucHV0IFszMTowXSBhZGRyZXNzOworb3V0cHV0IFszMTowXSBkYXRhOworaW5wdXQgWzMxOjBdIGNtcF9kYXRhOworcmVnICAgIFszMTowXSBkYXRhOworYmVnaW4KKyAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAjMTsKKyAgd2JkX2V4dF9hZHJfaSA9YWRkcmVzczsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9JzA7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naEY7ICAvLyBieXRlIGVuYWJsZQorICB3YmRfZXh0X2N5Y19pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YWl0KHdiZF9leHRfYWNrX28gPT0gMSk7CisgIGRhdGEgID0gd2JkX2V4dF9kYXRfbzsgIAorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisgIGlmKGRhdGEgIT09IGNtcF9kYXRhKSBiZWdpbgorICAgICAkZGlzcGxheSgiRVJST1IgOiBXQiBVU0VSIEFDQ0VTUyBSRUFEICBBZGRyZXNzIDogMHgleCwgRXhkOiAweCV4IFJ4ZDogMHgleCAiLGFkZHJlc3MsY21wX2RhdGEsZGF0YSk7CisgICAgIHVzZXJfc3BpX3RiLnRlc3RfZmFpbCA9IDE7CisgIGVuZCBlbHNlIGJlZ2luCisgICAgICRkaXNwbGF5KCJTVEFUVVM6IFdCIFVTRVIgQUNDRVNTIFJFQUQgIEFkZHJlc3MgOiAweCV4LCBEYXRhIDogMHgleCIsYWRkcmVzcyxkYXRhKTsKKyAgZW5kCisgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKK2VuZAorZW5kdGFzaworCisKK2BpZmRlZiBHTAorCit3aXJlICAgICAgICB3YmRfc3BpX3N0Yl9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3N0Yl9pOword2lyZSAgICAgICAgd2JkX3NwaV9hY2tfbyAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9hY2tfbzsKK3dpcmUgICAgICAgIHdiZF9zcGlfd2VfaSAgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfd2VfaTsKK3dpcmUgWzMxOjBdIHdiZF9zcGlfYWRyX2kgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfYWRyX2k7Cit3aXJlIFszMTowXSB3YmRfc3BpX2RhdF9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX2RhdF9pOword2lyZSBbMzE6MF0gd2JkX3NwaV9kYXRfbyAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9kYXRfbzsKK3dpcmUgWzM6MF0gIHdiZF9zcGlfc2VsX2kgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfc2VsX2k7CisKK3dpcmUgICAgICAgIHdiZF9zZHJhbV9zdGJfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9zdGJfaTsKK3dpcmUgICAgICAgIHdiZF9zZHJhbV9hY2tfbyA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9hY2tfbzsKK3dpcmUgICAgICAgIHdiZF9zZHJhbV93ZV9pICA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl93ZV9pOword2lyZSBbMzE6MF0gd2JkX3NkcmFtX2Fkcl9pID0gdV90b3AudV9zZHJhbV9jdHJsLndiX2FkZHJfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9kYXRfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9kYXRfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9kYXRfbyA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9kYXRfbzsKK3dpcmUgWzM6MF0gIHdiZF9zZHJhbV9zZWxfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9zZWxfaTsKKword2lyZSAgICAgICAgd2JkX3VhcnRfc3RiX2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2NzOword2lyZSAgICAgICAgd2JkX3VhcnRfYWNrX28gID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2FjazsKK3dpcmUgICAgICAgIHdiZF91YXJ0X3dlX2kgICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ193cjsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2Fkcl9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19hZGRyOword2lyZSBbNzowXSAgd2JkX3VhcnRfZGF0X2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX3dkYXRhOword2lyZSBbNzowXSAgd2JkX3VhcnRfZGF0X28gID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX3JkYXRhOword2lyZSAgICAgICAgd2JkX3VhcnRfc2VsX2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2JlOworCitgZW5kaWYKKworLyoqCitgaWZkZWYgR0wKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJJU0MgSU1FTSBhbWQgRE1FTSBNb25pdG9yaW5nIFRBU0sKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYGRlZmluZSBSSVNDX0NPUkUgIHVzZXJfdWFydF90Yi51X3RvcC51X2NvcmUudV9yaXNjdl90b3AKKworYWx3YXlzQChwb3NlZGdlIGBSSVNDX0NPUkUud2JfY2xrKSBiZWdpbgorICAgIGlmKGBSSVNDX0NPUkUud2JkX2ltZW1fYWNrX2kpCisgICAgICAgICAgJGRpc3BsYXkoIlJJU0NWLURFQlVHID0+IElNRU0gQUREUkVTUzogJXggUmVhZCBEYXRhIDogJXgiLCBgUklTQ19DT1JFLndiZF9pbWVtX2Fkcl9vLGBSSVNDX0NPUkUud2JkX2ltZW1fZGF0X2kpOworICAgIGlmKGBSSVNDX0NPUkUud2JkX2RtZW1fYWNrX2kgJiYgYFJJU0NfQ09SRS53YmRfZG1lbV93ZV9vKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBETUVNIEFERFJFU1M6ICV4IFdyaXRlIERhdGE6ICV4IFJlc29uc2U6ICV4IiwgYFJJU0NfQ09SRS53YmRfZG1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9kbWVtX2RhdF9vKTsKKyAgICBpZihgUklTQ19DT1JFLndiZF9kbWVtX2Fja19pICYmICFgUklTQ19DT1JFLndiZF9kbWVtX3dlX28pCisgICAgICAgICAgJGRpc3BsYXkoIlJJU0NWLURFQlVHID0+IERNRU0gQUREUkVTUzogJXggUkVBRCBEYXRhIDogJXggUmVzb25zZTogJXgiLCBgUklTQ19DT1JFLndiZF9kbWVtX2Fkcl9vLGBSSVNDX0NPUkUud2JkX2RtZW1fZGF0X2kpOworZW5kCisKK2BlbmRpZgorKiovCitlbmRtb2R1bGUKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3VhcnQvLnVzZXJfdWFydC5jLnVufiBiL3Zlcmlsb2cvZHYvdXNlcl91YXJ0Ly51c2VyX3VhcnQuYy51bn4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgzNTMxMwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl91YXJ0Ly51c2VyX3VhcnQuYy51bn4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3VhcnQvTWFrZWZpbGUgYi92ZXJpbG9nL2R2L3VzZXJfdWFydC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODdmMzVkCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3VhcnQvTWFrZWZpbGUKQEAgLTAsMCArMSwxMTEgQEAKKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKworIyMgQ2FyYXZlbCBQb2ludGVycworQ0FSQVZFTF9ST09UID89IC4uLy4uLy4uL2NhcmF2ZWwKK0NBUkFWRUxfUEFUSCA/PSAkKENBUkFWRUxfUk9PVCkKK0NBUkFWRUxfRklSTVdBUkVfUEFUSCA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nL2R2L2NhcmF2ZWwKK0NBUkFWRUxfVkVSSUxPR19QQVRIICA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nCitDQVJBVkVMX1JUTF9QQVRIID0gJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkvcnRsCitDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUyA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL2R2L2NhcmF2ZWwKKworCisjIyBVc2VyIFByb2plY3QgUG9pbnRlcnMKK1VQUkpfVkVSSUxPR19QQVRIID89IC4uLy4uLy4uL3Zlcmlsb2cKK1VQUkpfUlRMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9ydGwKK1VQUkpfR0xfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2dsCitVUFJKX0JFSEFWSU9VUkFMX01PREVMUyA9IC4uL21vZGVsCitVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUyA9IC4uL2FnZW50cworVVBSSl9JTkNMVURFX1BBVEgxID0gJChVUFJKX1JUTF9QQVRIKS95aWZpdmUveWNyMWMvc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDIgPSAkKFVQUkpfUlRMX1BBVEgpL3NkcmFtX2N0cmwvc3JjL2RlZnMKK1VQUkpfSU5DTFVERV9QQVRIMyA9ICQoVVBSSl9SVExfUEFUSCkvaTJjbS9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRINCA9ICQoVVBSSl9SVExfUEFUSCkvdXNiMV9ob3N0L3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEg1ID0gJChVUFJKX1JUTF9QQVRIKS9tYmlzdC9pbmNsdWRlCisKKyMjIFlJRklWRSBGSVJNV0FSRQorWUlGSVZFX0ZJUk1XQVJFX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9kdi9maXJtd2FyZQorR0NDNjRfUFJFRklYPz1yaXNjdjY0LXVua25vd24tZWxmCisKKyMjIFJJU0NWIEdDQyAKK0dDQ19QQVRIPz0vZWYvYXBwcy9iaW4KK0dDQ19QUkVGSVg/PXJpc2N2MzItdW5rbm93bi1lbGYKK1BES19QQVRIPz0vZWYvdGVjaC9TVy9za3kxMzBBCisKKyMjIFNpbXVsYXRpb24gbW9kZTogUlRML0dMCitTSU0/PVJUTAorRFVNUD89T0ZGCisKKy5TVUZGSVhFUzoKKworUEFUVEVSTiA9IHVzZXJfdWFydAorCithbGw6ICAke1BBVFRFUk46PS52Y2R9CisKK2hleDogICR7UEFUVEVSTjo9LmhleH0KKwordnZwOiAgJHtQQVRURVJOOj0udnZwfQorCislLnZ2cDogJV90Yi52CisJJHtHQ0M2NF9QUkVGSVh9LWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0wIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSSQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpIHVzZXJfdWFydC5jIC1vIHVzZXJfdWFydC5vCisJJHtHQ0M2NF9QUkVGSVh9LWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0wIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLURfX0FTU0VNQkxZX189MSAtYyAtSS4vIC1JJChZSUZJVkVfRklSTVdBUkVfUEFUSCkgICQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpL2NydC5TIC1vIGNydC5vCisJJHtHQ0M2NF9QUkVGSVh9LWdjYyAtbyB1c2VyX3VhcnQuZWxmIC1UICQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpL2xpbmsubGQgdXNlcl91YXJ0Lm8gY3J0Lm8gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1OCisJJHtHQ0M2NF9QUkVGSVh9LW9iamNvcHkgLU8gdmVyaWxvZyB1c2VyX3VhcnQuZWxmIHVzZXJfdWFydC5oZXgKKwkke0dDQzY0X1BSRUZJWH0tb2JqZHVtcCAtRCB1c2VyX3VhcnQuZWxmID4gdXNlcl91YXJ0LmR1bXAKKwlybSBjcnQubyB1c2VyX3VhcnQubworaWZlcSAoJChTSU0pLFJUTCkKKyAgIGlmZXEgKCQoRFVNUCksT0ZGKQorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICAgZWxzZSAgCisJaXZlcmlsb2cgLWcyMDA1LXN2IC1EV0ZEVU1QIC1ERlVOQ1RJT05BTCAtRFNJTSAtSSAkKFBES19QQVRIKSBcCisJLUkgJChDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUykgLUkgJChDQVJBVkVMX1JUTF9QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX01PREVMUykgICAgLUkgJChVUFJKX1JUTF9QQVRIKSAtSSAkKFVQUkpfVkVSSUxPR19QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEgxKSAgICAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMikgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDMpIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRINCkgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDUpIFwKKwkkPCAtbyAkQCAKKyAgIGVuZGlmCitlbHNlICAKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1ER0wgLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgLUkgJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoVVBSSl9HTF9QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgXAorCSQ8IC1vICRAIAorZW5kaWYKKworJS52Y2Q6ICUudnZwCisJdnZwICQ8CisKKyUuZWxmOiAlLmMgJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3NlY3Rpb25zLmxkcyAkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc3RhcnQucworCSR7R0NDNjRfUFJFRklYfS1nY2MgLUkgJChDQVJBVkVMX1BBVEgpIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1XbCwtQnN0YXRpYywtVCwkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc2VjdGlvbnMubGRzLC0tc3RyaXAtZGVidWcgLWZmcmVlc3RhbmRpbmcgLW5vc3RkbGliIC1vICRAICQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zdGFydC5zICQ8CisKKyUuaGV4OiAKKwllY2hvIEAiVGhpcyBpcyB1c2VyIGJvb3QgdGVzdCwgbm90aW5nIHRvIGNvbXBpbGUgdGhlIG1hbmdtZW50IGNvcmUgY29kZSIKKworJS5iaW46ICUuZWxmCisJJHtHQ0M2NF9QUkVGSVh9LW9iamNvcHkgLU8gYmluYXJ5ICQ8IC9kZXYvc3Rkb3V0IHwgdGFpbCAtYyArMTA0ODU3NyA+ICRACisKKyMgLS0tLSBDbGVhbiAtLS0tCisKK2NsZWFuOgorCXJtIC1mICouZWxmICouaGV4ICouYmluICoudnZwICoudmNkICoubG9nICouZHVtcAorCisuUEhPTlk6IGNsZWFuIGhleCBhbGwKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl91YXJ0L3J1bl9pdmVyaWxvZyBiL3Zlcmlsb2cvZHYvdXNlcl91YXJ0L3J1bl9pdmVyaWxvZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNDYxZmQxCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3VhcnQvcnVuX2l2ZXJpbG9nCkBAIC0wLDAgKzEsNDIgQEAKKyMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjIC8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhCisjIC8vIAorIyAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgLy8KKyMgLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgLy8KKyMgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMgLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyMgLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisjIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uICB1c2VyX3VhcnQuYyAtbyB1c2VyX3VhcnQubworCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLURfX0FTU0VNQkxZX189MSAtYyAtSS4vIC1JLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vICAuLi8uLi9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9jcnRfdGNtLlMgLW8gY3J0X3RjbS5vCisKK3Jpc2N2NjQtdW5rbm93bi1lbGYtZ2NjIC1vIHVzZXJfdWFydC5lbGYgLVQgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vbGlua190Y20ubGQgdXNlcl91YXJ0Lm8gY3J0X3RjbS5vIC1ub3N0YXJ0ZmlsZXMgLW5vc3RkbGliIC1sYyAtbGdjYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMgorCityaXNjdjY0LXVua25vd24tZWxmLW9iamNvcHkgLU8gdmVyaWxvZyB1c2VyX3VhcnQuZWxmIHVzZXJfdWFydC5oZXgKKworcmlzY3Y2NC11bmtub3duLWVsZi1vYmpkdW1wIC1EIHVzZXJfdWFydC5lbGYgPiB1c2VyX3VhcnQuZHVtcAorCitybSBjcnRfdGNtLm8gdXNlcl91YXJ0Lm8KKworI2l2ZXJpbG9nIHdpdGggd2F2ZWZvcm0gZHVtcAoraXZlcmlsb2cgLWcyMDA1LXN2IC1EV0ZEVU1QIC1ERlVOQ1RJT05BTCAtRFNJTSAtSSAkUERLX1BBVEggLUkgIC4uLy4uLy4uL2NhcmF2ZWwvdmVyaWxvZy9ydGwgIC1JIC4uLyAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bCAtSSAuLi8gLUkgLi4vLi4vLi4vdmVyaWxvZyAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMgICAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL2kyY20vc3JjL2luY2x1ZGVzIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMgLUkgJENBUkFWRUxfUk9PVC92ZXJpbG9nL2R2L2NhcmF2ZWwgLUkgLi4vbW9kZWwgLUkgLi4vYWdlbnRzIHVzZXJfdWFydF90Yi52IC1vIHVzZXJfdWFydF90Yi52dnAKKworCisjaXZlcmlsb2cgLWcyMDA1LXN2IC1JICRQREtfUEFUSCAtREZVTkNUSU9OQUwgLURTSU0gLUkgIC4uLy4uLy4uL2NhcmF2ZWwvdmVyaWxvZy9ydGwgLUkgLi4vIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsIC1JIC4uLy4uLy4uL3Zlcmlsb2cgLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2luY2x1ZGVzICAgLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvZGVmcyAtSSAkQ0FSQVZFTF9ST09UL3Zlcmlsb2cvZHYvY2FyYXZlbCAtSSAuLi9tb2RlbCAtSSAuLi9hZ2VudHMgdXNlcl91YXJ0X3RiLnYgLW8gdXNlcl91YXJ0X3RiLnZ2cAorCisjIEdMUyAKKyNpdmVyaWxvZyAtZzIwMDUtc3YgLUQgR0wgLUQgRlVOQ1RJT05BTCAtSSAkUERLX1BBVEggLUkgIC4uLy4uLy4uL2NhcmF2ZWwvdmVyaWxvZy9ydGwgIC1JIC4uLyAtSSAuLi8uLi8uLi92ZXJpbG9nL2dsIC1JIC4uLy4uLy4uL3Zlcmlsb2cgLUkgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9wZGsvc2t5MTMwQSAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMgICAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzIC1JICRDQVJBVkVMX1JPT1QvdmVyaWxvZy9kdi9jYXJhdmVsIC1JIC4uL21vZGVsIC1JIC4uL2FnZW50cyB1c2VyX3VhcnRfdGIudiAtbyB1c2VyX3VhcnRfdGIudnZwCisjCisKK3Z2cCB1c2VyX3VhcnRfdGIudnZwIHwgdGVlIHRlc3QubG9nCisKK1xybSAtcmYgdXNlcl91YXJ0X3RiLnZ2cApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3VhcnQvdXNlcl91YXJ0LmMgYi92ZXJpbG9nL2R2L3VzZXJfdWFydC91c2VyX3VhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWUwMjA0Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3VhcnQvdXNlcl91YXJ0LmMKQEAgLTAsMCArMSw0MyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2RlZmluZSBTQ19TSU1fT1VUUE9SVCAoMHhmMDAwMDAwMCkKKyNkZWZpbmUgdWludDMyX3QgIGxvbmcKKworCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnMCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAxMDAwMCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWcxICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDEwMDA0KQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzIgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMTAwMDgpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnMyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAxMDAwQykKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc0ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDEwMDEwKQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzUgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMTAwMTQpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnNiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAxMDAxOCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc3ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDEwMDFDKQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzggKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMTAwMjApCisKK2ludCBtYWluKCkKK3sKKworICAgIHdoaWxlKDEpIHsKKyAgICAgICAvLyBDaGVjayBVQVJUIFJYIGZpZm8gaGFzIGRhdGEsIGlmIGF2YWlsYWJsZSBsb29wIGJhY2sgdGhlIGRhdGEKKyAgICAgICBpZihyZWdfbXByal91YXJ0X3JlZzggIT0gMCkgeyAKKwkgICByZWdfbXByal91YXJ0X3JlZzUgPSByZWdfbXByal91YXJ0X3JlZzY7CisgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3VhcnQvdXNlcl91YXJ0X3RiLnYgYi92ZXJpbG9nL2R2L3VzZXJfdWFydC91c2VyX3VhcnRfdGIudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzdmMjU1Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3VhcnQvdXNlcl91YXJ0X3RiLnYKQEAgLTAsMCArMSw0NTYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6ICAyMDIxICwgRGluZXNoIEFubmF5eWEKKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IE1vZGlmaWVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBTdGFuZGFsb25lIFVzZXIgdmFsaWRhdGlvbiBUZXN0IGJlbmNoICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgWUlGaXZlIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS95aWZpdmVfcjAuZ2l0ICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMveWlmaXZlLyAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgVGhpcyBpcyBhIHN0YW5kYWxvbmUgdGVzdCBiZW5jaCB0byB2YWxpZGF0ZSB0aGUgICAgICAgICAgICAvLy8vCisvLy8vICAgRGlnaXRhbCBjb3JlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgMS4gVXNlciBSaXNjIGNvcmUgaXMgYm9vdGVkIHVzaW5nICBjb21waWxlZCBjb2RlIG9mICAgICAgICAvLy8vCisvLy8vICAgICAgdXNlcl9yaXNjX2Jvb3QuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgMi4gVXNlciBSaXNjIGNvcmUgdXNlcyBTZXJpYWwgRmxhc2ggYW5kIFNEUkFNIHRvIGJvb3QgICAgICAvLy8vCisvLy8vICAgMy4gQWZ0ZXIgc3VjY2Vzc2Z1bCBib290LCBSaXNjIGNvcmUgd2lsbCBjaGVjayB0aGUgVUFSVCAgICAvLy8vCisvLy8vICAgICAgUlggRGF0YSwgSWYgaXQncyBhdmFpbGFibGUgdGhlbiBpdCBsb29wIGJhY2sgdGhlIHNhbWUgICAvLy8vCisvLy8vICAgICAgZGF0YSBpbiB1YXJ0IHR4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgNC4gVGVzdCBiZW5jaCBzZW5kIHJhbmRvbSA0MCBjaGFyYWN0ZXIgdG93YXJkcyBVc2VyIHVhcnQgICAvLy8vCisvLy8vICAgICAgYW5kIGV4cGVjdCBzYW1lIGRhdGEgdG8gcmV0dXJuIGJhY2sgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMSAtIDE2dGggRmViIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQorCitgdGltZXNjYWxlIDEgbnMgLyAxIG5zCisKK2BpbmNsdWRlICJzMjVmbDI1NnMuc3YiCitgaW5jbHVkZSAidXByal9uZXRsaXN0cy52IgorYGluY2x1ZGUgIm10NDhsYzhtOGEyLnYiCitgaW5jbHVkZSAidWFydF9hZ2VudC52IgorCisKK2BkZWZpbmUgQUREUl9TUEFDRV9VQVJUICAgIDMyJ2gzMDAxXzAwMDAKK2BkZWZpbmUgQUREUl9TUEFDRV9QSU5NVVggIDMyJ2gzMDAyXzAwMDAKKworCittb2R1bGUgdXNlcl91YXJ0X3RiOworCityZWcgICAgICAgICAgICBjbG9jayAgICAgICAgIDsKK3JlZyAgICAgICAgICAgIHdiX3JzdF9pICAgICAgOworcmVnICAgICAgICAgICAgcG93ZXIxLCBwb3dlcjI7CityZWcgICAgICAgICAgICBwb3dlcjMsIHBvd2VyNDsKKworcmVnICAgICAgICAgICAgd2JkX2V4dF9jeWNfaTsgIC8vIHN0cm9iZS9yZXF1ZXN0CityZWcgICAgICAgICAgICB3YmRfZXh0X3N0Yl9pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKK3JlZyBbMzE6MF0gICAgIHdiZF9leHRfYWRyX2k7ICAvLyBhZGRyZXNzCityZWcgICAgICAgICAgICB3YmRfZXh0X3dlX2k7ICAvLyB3cml0ZQorcmVnIFszMTowXSAgICAgd2JkX2V4dF9kYXRfaTsgIC8vIGRhdGEgb3V0cHV0CityZWcgWzM6MF0gICAgICB3YmRfZXh0X3NlbF9pOyAgLy8gYnl0ZSBlbmFibGUKKword2lyZSBbMzE6MF0gICAgd2JkX2V4dF9kYXRfbzsgIC8vIGRhdGEgaW5wdXQKK3dpcmUgICAgICAgICAgIHdiZF9leHRfYWNrX287ICAvLyBhY2tub3dsZWdlbWVudAord2lyZSAgICAgICAgICAgd2JkX2V4dF9lcnJfbzsgIC8vIGVycm9yCisKKy8vIFVzZXIgSS9PCit3aXJlIFszNzowXSAgICBpb19vZWIgICAgICAgIDsKK3dpcmUgWzM3OjBdICAgIGlvX291dCAgICAgICAgOword2lyZSBbMzc6MF0gICAgaW9faW4gICAgICAgICA7CisKK3dpcmUgWzM3OjBdICAgIG1wcmpfaW8gICAgICAgOword2lyZSBbNzowXSAgICAgbXByal9pb18wICAgICA7CityZWcgICAgICAgICAgICB0ZXN0X2ZhaWwgICAgIDsKK3JlZyBbMzE6MF0gICAgIHJlYWRfZGF0YSAgICAgOworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBVYXJ0IENvbmZpZ3VyYXRpb24KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVnIFsxOjBdICAgICAgdWFydF9kYXRhX2JpdCAgICAgICAgOworcmVnCSAgICAgICB1YXJ0X3N0b3BfYml0cyAgICAgICA7IC8vIDA6IDEgc3RvcCBiaXQ7IDE6IDIgc3RvcCBiaXQ7CityZWcJICAgICAgIHVhcnRfc3RpY2tfcGFyaXR5ICAgIDsgLy8gMTogZm9yY2UgZXZlbiBwYXJpdHkKK3JlZwkgICAgICAgdWFydF9wYXJpdHlfZW4gICAgICAgOyAvLyBwYXJpdHkgZW5hYmxlCityZWcJICAgICAgIHVhcnRfZXZlbl9vZGRfcGFyaXR5IDsgLy8gMDogb2RkIHBhcml0eTsgMTogZXZlbiBwYXJpdHkKKworcmVnIFs3OjBdICAgICAgdWFydF9kYXRhICAgICAgICAgICAgOworcmVnIFsxNTowXSAgICAgdWFydF9kaXZpc29yICAgICAgICAgOwkvLyBkaXZpZGVkIGJ5IG4gKiAxNgorcmVnIFsxNTowXSAgICAgdWFydF90aW1lb3V0ICAgICAgICAgOy8vIHdhaXQgdGltZSBsaW1pdAorCityZWcgWzE1OjBdICAgICB1YXJ0X3J4X251ICAgICAgICAgICA7CityZWcgWzE1OjBdICAgICB1YXJ0X3R4X251ICAgICAgICAgICA7CityZWcgWzc6MF0gICAgICB1YXJ0X3dyaXRlX2RhdGEgWzA6MzldOworcmVnIAkgICAgICAgdWFydF9maWZvX2VuYWJsZSAgICAgOwkvLyBmaWZvIG1vZGUgZGlzYWJsZQorCitpbnRlZ2VyIGksajsKKworCS8vIEV4dGVybmFsIGNsb2NrIGlzIHVzZWQgYnkgZGVmYXVsdC4gIE1ha2UgdGhpcyBhcnRpZmljaWFsbHkgZmFzdCBmb3IgdGhlCisJLy8gc2ltdWxhdGlvbi4gIE5vcm1hbGx5IHRoaXMgd291bGQgYmUgYSBzbG93IGNsb2NrIGFuZCB0aGUgZGlnaXRhbCBQTEwKKwkvLyB3b3VsZCBiZSB0aGUgZmFzdCBjbG9jay4KKworCWFsd2F5cyAjMTIuNSBjbG9jayA8PSAoY2xvY2sgPT09IDEnYjApOworCisJaW5pdGlhbCBiZWdpbgorCQljbG9jayA9IDA7CisgICAgICAgICAgICAgICAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICAgICAgICAgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICAgICAgICAgICAgICAgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKwllbmQKKworCWBpZmRlZiBXRkRVTVAKKwkgICBpbml0aWFsIGJlZ2luCisJICAgCSRkdW1wZmlsZSgic2lteC52Y2QiKTsKKwkgICAJJGR1bXB2YXJzKDEsIHVzZXJfdWFydF90Yik7CisJICAgCSRkdW1wdmFycygwLCB1c2VyX3VhcnRfdGIudV90b3ApOworCSAgIGVuZAorICAgICAgIGBlbmRpZgorCisJaW5pdGlhbCBiZWdpbgorCQl3Yl9yc3RfaSA8PSAxJ2IxOworCQkjMTAwOworCQl3Yl9yc3RfaSA8PSAxJ2IwOwkgICAgCS8vIFJlbGVhc2UgcmVzZXQKKwllbmQKK2luaXRpYWwKK2JlZ2luCisgICB1YXJ0X2RhdGFfYml0ICAgICAgICAgICA9IDInYjExOworICAgdWFydF9zdG9wX2JpdHMgICAgICAgICAgPSAwOyAvLyAwOiAxIHN0b3AgYml0OyAxOiAyIHN0b3AgYml0OworICAgdWFydF9zdGlja19wYXJpdHkgICAgICAgPSAwOyAvLyAxOiBmb3JjZSBldmVuIHBhcml0eQorICAgdWFydF9wYXJpdHlfZW4gICAgICAgICAgPSAwOyAvLyBwYXJpdHkgZW5hYmxlCisgICB1YXJ0X2V2ZW5fb2RkX3Bhcml0eSAgICA9IDE7IC8vIDA6IG9kZCBwYXJpdHk7IDE6IGV2ZW4gcGFyaXR5CisgICB1YXJ0X2Rpdmlzb3IgICAgICAgICAgICA9IDE1Oy8vIGRpdmlkZWQgYnkgbiAqIDE2CisgICB1YXJ0X3RpbWVvdXQgICAgICAgICAgICA9IDUwMDsvLyB3YWl0IHRpbWUgbGltaXQKKyAgIHVhcnRfZmlmb19lbmFibGUgICAgICAgID0gMDsJLy8gZmlmbyBtb2RlIGRpc2FibGUKKworICAgIzIwMDsgLy8gV2FpdCBmb3IgcmVzZXQgcmVtb3ZhbAorICAgcmVwZWF0ICgxMCkgQChwb3NlZGdlIGNsb2NrKTsKKyAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgVWFydCBUZXN0IFN0YXJ0ZWQiKTsKKyAgIAorICAgLy8gUmVtb3ZlIFdiIFJlc2V0CisgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsJ2gxKTsKKworICAgLy8gRW5hYmxlIFVBUlQgTXVsdGkgRnVuY3Rpb25hbCBQb3J0cworICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX1BJTk1VWCsnaDAwMzgsJ2gxMDApOworICAgCisgICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CisgICAjMTsKKyAgIC8vIFJlbW92ZSBhbGwgdGhlIHJlc2V0CisgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsJ2gxRik7CisKKyAgIHJlcGVhdCAoMjAwMDApIEAocG9zZWRnZSBjbG9jayk7ICAvLyB3YWl0IGZvciBQcm9jZXNzb3IgR2V0IFJlYWR5CisgICB0Yl91YXJ0LnVhcnRfaW5pdDsKKyAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9VQVJUKzgnaDAsezMnaDAsMidiMDAsMSdiMSwxJ2IxLDEnYjF9KTsgIAorICAgCisgICB0Yl91YXJ0LmNvbnRyb2xfc2V0dXAgKHVhcnRfZGF0YV9iaXQsIHVhcnRfc3RvcF9iaXRzLCB1YXJ0X3Bhcml0eV9lbiwgdWFydF9ldmVuX29kZF9wYXJpdHksIAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgdWFydF9zdGlja19wYXJpdHksIHVhcnRfdGltZW91dCwgdWFydF9kaXZpc29yKTsKKyAgIAorICAgZm9yIChpPTA7IGk8NDA7IGk9aSsxKQorICAgCXVhcnRfd3JpdGVfZGF0YVtpXSA9ICRyYW5kb207CisgICAKKyAgIAorICAgCisgICBmb3JrCisgICAgICBiZWdpbgorICAgICAgICAgZm9yIChpPTA7IGk8NDA7IGk9aSsxKQorICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgJGRpc3BsYXkgKCJcbi4uLiBVQVJUIEFnZW50IFdyaXRpbmcgY2hhciAleCAuLi4iLCB1YXJ0X3dyaXRlX2RhdGFbaV0pOworICAgICAgICAgICAgdXNlcl91YXJ0X3RiLnRiX3VhcnQud3JpdGVfY2hhciAodWFydF93cml0ZV9kYXRhW2ldKTsKKyAgICAgICAgIGVuZAorICAgICAgZW5kCisgICAKKyAgICAgIGJlZ2luCisgICAgICAgICBmb3IgKGo9MDsgajw0MDsgaj1qKzEpCisgICAgICAgICBiZWdpbgorICAgICAgICAgICB1c2VyX3VhcnRfdGIudGJfdWFydC5yZWFkX2NoYXJfY2hrKHVhcnRfd3JpdGVfZGF0YVtqXSk7CisgICAgICAgICBlbmQKKyAgICAgIGVuZAorICAgICAgam9pbgorICAgCisgICAgICAjMTAwCisgICAgICB0Yl91YXJ0LnJlcG9ydF9zdGF0dXModWFydF9yeF9udSwgdWFydF90eF9udSk7CisgICAKKyAgICAgIHRlc3RfZmFpbCA9IDA7CisKKyAgICAgIC8vIENoZWNrIAorICAgICAgLy8gaWYgYWxsIHRoZSA0MCBieXRlIHRyYW5zbWl0dGVkCisgICAgICAvLyBpZiBhbGwgdGhlIDQwIGJ5dGUgcmVjZWl2ZWQKKyAgICAgIC8vIGlmIG5vIGVycm9yIAorICAgICAgaWYodWFydF90eF9udSAhPSA0MCkgdGVzdF9mYWlsID0gMTsKKyAgICAgIGlmKHVhcnRfcnhfbnUgIT0gNDApIHRlc3RfZmFpbCA9IDE7CisgICAgICBpZih0Yl91YXJ0LmVycl9jbnQgIT0gMCkgdGVzdF9mYWlsID0gMTsKKworICAgICAgJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisgICAgICAgICBgaWZkZWYgR0wKKyAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVBUlQgVGVzdCAoR0wpIFBhc3NlZCIpOworICAgICAgICAgYGVsc2UKKyAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVBUlQgVGVzdCAoUlRMKSBQYXNzZWQiKTsKKyAgICAgICAgIGBlbmRpZgorICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgICBgaWZkZWYgR0wKKyAgICAgICAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBVQVJUIFRlc3QgKEdMKSBGYWlsZWQiKTsKKyAgICAgICAgICBgZWxzZQorICAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVBUlQgVGVzdCAoUlRMKSBGYWlsZWQiKTsKKyAgICAgICAgICBgZW5kaWYKKyAgICAgICBlbmQKKyAgICAgICRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICMxMDAKKyAgICAgICRmaW5pc2g7CitlbmQKKworCit3aXJlIFVTRVJfVkREMVY4ID0gMSdiMTsKK3dpcmUgVlNTID0gMSdiMDsKKworCit1c2VyX3Byb2plY3Rfd3JhcHBlciB1X3RvcCgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIC52Y2NkMShVU0VSX1ZERDFWOCksCS8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgLnZzc2QxKFZTUyksCS8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgICAud2JfY2xrX2kgICAgICAgIChjbG9jayksICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAudXNlcl9jbG9jazIgICAgICgxJ2IxKSwgIC8vIFJlYWwtdGltZSBjbG9jaworICAgIC53Yl9yc3RfaSAgICAgICAgKHdiX3JzdF9pKSwgIC8vIFJlZ3VsYXIgUmVzZXQgc2lnbmFsCisKKyAgICAud2JzX2N5Y19pICAgKHdiZF9leHRfY3ljX2kpLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAud2JzX3N0Yl9pICAgKHdiZF9leHRfc3RiX2kpLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAud2JzX2Fkcl9pICAgKHdiZF9leHRfYWRyX2kpLCAgLy8gYWRkcmVzcworICAgIC53YnNfd2VfaSAgICAod2JkX2V4dF93ZV9pKSwgIC8vIHdyaXRlCisgICAgLndic19kYXRfaSAgICh3YmRfZXh0X2RhdF9pKSwgIC8vIGRhdGEgb3V0cHV0CisgICAgLndic19zZWxfaSAgICh3YmRfZXh0X3NlbF9pKSwgIC8vIGJ5dGUgZW5hYmxlCisKKyAgICAud2JzX2RhdF9vICAgKHdiZF9leHRfZGF0X28pLCAgLy8gZGF0YSBpbnB1dAorICAgIC53YnNfYWNrX28gICAod2JkX2V4dF9hY2tfbyksICAvLyBhY2tub3dsZWdlbWVudAorCisgCisgICAgLy8gTG9naWMgQW5hbHl6ZXIgU2lnbmFscworICAgIC5sYV9kYXRhX2luICAgICAgKCcxKSAsCisgICAgLmxhX2RhdGFfb3V0ICAgICAoKSwKKyAgICAubGFfb2VuYiAgICAgICAgICgnMCksCisgCisKKyAgICAvLyBJT3MKKyAgICAuaW9faW4gICAgICAgICAgKGlvX2luKSAgLAorICAgIC5pb19vdXQgICAgICAgICAoaW9fb3V0KSAsCisgICAgLmlvX29lYiAgICAgICAgIChpb19vZWIpICwKKworICAgIC51c2VyX2lycSAgICAgICAoKSAKKworKTsKKworYGlmbmRlZiBHTCAvLyBEcml2ZSBQb3dlciBmb3IgSG9sZCBGaXggQnVmCisgICAgLy8gQWxsIHN0YW5kYXJkIGNlbGwgbmVlZCBwb3dlciBob29rLXVwIGZvciBmdW5jdGlvbmFsaXR5IHdvcmsKKyAgICBpbml0aWFsIGJlZ2luCisgICAgZW5kCitgZW5kaWYgICAgCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBJbnRlZ3JhdGUgdGhlIFNlcmlhbCBmbGFzaCB3aXRoIHF1cmQgc3VwcG9ydCB0bworLy8gIHVzZXIgY29yZSB1c2luZyB0aGUgZ3BpbyBwYWRzCisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICB3aXJlIGZsYXNoX2NsayA9IGlvX291dFsyNF07CisgICB3aXJlIGZsYXNoX2NzYiA9IGlvX291dFsyOF07CisgICAvLyBDcmVhdGluZyBQYWQgRGVsYXkKKyAgIHdpcmUgIzEgaW9fb2ViXzI5ID0gaW9fb2ViWzI5XTsKKyAgIHdpcmUgIzEgaW9fb2ViXzMwID0gaW9fb2ViWzMwXTsKKyAgIHdpcmUgIzEgaW9fb2ViXzMxID0gaW9fb2ViWzMxXTsKKyAgIHdpcmUgIzEgaW9fb2ViXzMyID0gaW9fb2ViWzMyXTsKKyAgIHRyaSAgIzEgZmxhc2hfaW8wID0gKGlvX29lYl8yOT09IDEnYjApID8gaW9fb3V0WzI5XSA6IDEnYno7CisgICB0cmkgICMxIGZsYXNoX2lvMSA9IChpb19vZWJfMzA9PSAxJ2IwKSA/IGlvX291dFszMF0gOiAxJ2J6OworICAgdHJpICAjMSBmbGFzaF9pbzIgPSAoaW9fb2ViXzMxPT0gMSdiMCkgPyBpb19vdXRbMzFdIDogMSdiejsKKyAgIHRyaSAgIzEgZmxhc2hfaW8zID0gKGlvX29lYl8zMj09IDEnYjApID8gaW9fb3V0WzMyXSA6IDEnYno7CisKKyAgIGFzc2lnbiBpb19pblsyOV0gPSBmbGFzaF9pbzA7CisgICBhc3NpZ24gaW9faW5bMzBdID0gZmxhc2hfaW8xOworICAgYXNzaWduIGlvX2luWzMxXSA9IGZsYXNoX2lvMjsKKyAgIGFzc2lnbiBpb19pblszMl0gPSBmbGFzaF9pbzM7CisKKworICAgLy8gUXVhcmQgZmxhc2gKKyAgICAgczI1ZmwyNTZzICMoLm1lbV9maWxlX25hbWUoInVzZXJfdWFydC5oZXgiKSwKKwkgICAgICAgICAub3RwX2ZpbGVfbmFtZSgibm9uZSIpLCAKKyAgICAgICAgICAgICAgICAgLlRpbWluZ01vZGVsKCJTMjVGTDUxMlNBR01GSTAxMF9GXzMwcEYiKSkgCisJCSB1X3NwaV9mbGFzaF8yNTZtYgorICAgICAgICgKKyAgICAgICAgICAgLy8gRGF0YSBJbnB1dHMvT3V0cHV0cworICAgICAgIC5TSSAgICAgIChmbGFzaF9pbzApLAorICAgICAgIC5TTyAgICAgIChmbGFzaF9pbzEpLAorICAgICAgIC8vIENvbnRyb2xzCisgICAgICAgLlNDSyAgICAgKGZsYXNoX2NsayksCisgICAgICAgLkNTTmVnICAgKGZsYXNoX2NzYiksCisgICAgICAgLldQTmVnICAgKGZsYXNoX2lvMiksCisgICAgICAgLkhPTEROZWcgKGZsYXNoX2lvMyksCisgICAgICAgLlJTVE5lZyAgKCF3Yl9yc3RfaSkKKworICAgICAgICk7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBVQVJUIEFnZW50IGludGVncmF0aW9uCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSB1YXJ0X3R4ZCx1YXJ0X3J4ZDsKKworYXNzaWduIHVhcnRfdHhkICAgPSBpb19vdXRbMl07Cithc3NpZ24gaW9faW5bMV0gID0gdWFydF9yeGQgOworIAordWFydF9hZ2VudCB0Yl91YXJ0KAorCS5tY2xrICAgICAgICAgICAgICAgIChjbG9jayAgICAgICAgICAgICAgKSwKKwkudHhkICAgICAgICAgICAgICAgICAodWFydF9yeGQgICAgICAgICAgICksCisJLnJ4ZCAgICAgICAgICAgICAgICAgKHVhcnRfdHhkICAgICAgICAgICApCisJKTsKKworCit0YXNrIHdiX3VzZXJfY29yZV93cml0ZTsKK2lucHV0IFszMTowXSBhZGRyZXNzOworaW5wdXQgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDE7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID1kYXRhOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisgICRkaXNwbGF5KCJERUJVRyBXQiBVU0VSIEFDQ0VTUyBXUklURSBBZGRyZXNzIDogJXgsIERhdGEgOiAleCIsYWRkcmVzcyxkYXRhKTsKKyAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworZW5kCitlbmR0YXNrCisKK3Rhc2sgIHdiX3VzZXJfY29yZV9yZWFkOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitvdXRwdXQgWzMxOjBdIGRhdGE7CityZWcgICAgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0nMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoRjsgIC8vIGJ5dGUgZW5hYmxlCisgIHdiZF9leHRfY3ljX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdhaXQod2JkX2V4dF9hY2tfbyA9PSAxKTsKKyAgZGF0YSAgPSB3YmRfZXh0X2RhdF9vOyAgCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgJGRpc3BsYXkoIkRFQlVHIFdCIFVTRVIgQUNDRVNTIFJFQUQgQWRkcmVzcyA6ICV4LCBEYXRhIDogJXgiLGFkZHJlc3MsZGF0YSk7CisgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKK2VuZAorZW5kdGFzaworCitgaWZkZWYgR0wKKword2lyZSAgICAgICAgd2JkX3NwaV9zdGJfaSAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9zdGJfaTsKK3dpcmUgICAgICAgIHdiZF9zcGlfYWNrX28gICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfYWNrX287Cit3aXJlICAgICAgICB3YmRfc3BpX3dlX2kgICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3dlX2k7Cit3aXJlIFszMTowXSB3YmRfc3BpX2Fkcl9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX2Fkcl9pOword2lyZSBbMzE6MF0gd2JkX3NwaV9kYXRfaSAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9kYXRfaTsKK3dpcmUgWzMxOjBdIHdiZF9zcGlfZGF0X28gICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfZGF0X287Cit3aXJlIFszOjBdICB3YmRfc3BpX3NlbF9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3NlbF9pOworCit3aXJlICAgICAgICB3YmRfc2RyYW1fc3RiX2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfc3RiX2k7Cit3aXJlICAgICAgICB3YmRfc2RyYW1fYWNrX28gPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfYWNrX287Cit3aXJlICAgICAgICB3YmRfc2RyYW1fd2VfaSAgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfd2VfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9hZHJfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9hZGRyX2k7Cit3aXJlIFszMTowXSB3YmRfc2RyYW1fZGF0X2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfZGF0X2k7Cit3aXJlIFszMTowXSB3YmRfc2RyYW1fZGF0X28gPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfZGF0X287Cit3aXJlIFszOjBdICB3YmRfc2RyYW1fc2VsX2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfc2VsX2k7CisKK3dpcmUgICAgICAgIHdiZF91YXJ0X3N0Yl9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19jczsKK3dpcmUgICAgICAgIHdiZF91YXJ0X2Fja19vICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19hY2s7Cit3aXJlICAgICAgICB3YmRfdWFydF93ZV9pICAgPSB1X3RvcC51X3VhcnRfaTJjX3VzYi5yZWdfd3I7Cit3aXJlIFs3OjBdICB3YmRfdWFydF9hZHJfaSAgPSB1X3RvcC51X3VhcnRfaTJjX3VzYi5yZWdfYWRkcjsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2RhdF9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ193ZGF0YTsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2RhdF9vICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19yZGF0YTsKK3dpcmUgICAgICAgIHdiZF91YXJ0X3NlbF9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19iZTsKKworYGVuZGlmCisKKy8qKgorYGlmZGVmIEdMCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSSVNDIElNRU0gYW1kIERNRU0gTW9uaXRvcmluZyBUQVNLCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BkZWZpbmUgUklTQ19DT1JFICB1c2VyX3VhcnRfdGIudV90b3AudV9jb3JlLnVfcmlzY3ZfdG9wCisKK2Fsd2F5c0AocG9zZWRnZSBgUklTQ19DT1JFLndiX2NsaykgYmVnaW4KKyAgICBpZihgUklTQ19DT1JFLndiZF9pbWVtX2Fja19pKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBJTUVNIEFERFJFU1M6ICV4IFJlYWQgRGF0YSA6ICV4IiwgYFJJU0NfQ09SRS53YmRfaW1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9pbWVtX2RhdF9pKTsKKyAgICBpZihgUklTQ19DT1JFLndiZF9kbWVtX2Fja19pICYmIGBSSVNDX0NPUkUud2JkX2RtZW1fd2VfbykKKyAgICAgICAgICAkZGlzcGxheSgiUklTQ1YtREVCVUcgPT4gRE1FTSBBRERSRVNTOiAleCBXcml0ZSBEYXRhOiAleCBSZXNvbnNlOiAleCIsIGBSSVNDX0NPUkUud2JkX2RtZW1fYWRyX28sYFJJU0NfQ09SRS53YmRfZG1lbV9kYXRfbyk7CisgICAgaWYoYFJJU0NfQ09SRS53YmRfZG1lbV9hY2tfaSAmJiAhYFJJU0NfQ09SRS53YmRfZG1lbV93ZV9vKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBETUVNIEFERFJFU1M6ICV4IFJFQUQgRGF0YSA6ICV4IFJlc29uc2U6ICV4IiwgYFJJU0NfQ09SRS53YmRfZG1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9kbWVtX2RhdF9pKTsKK2VuZAorCitgZW5kaWYKKyoqLworZW5kbW9kdWxlCitgZGVmYXVsdF9uZXR0eXBlIHdpcmUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl91YXJ0X21hc3Rlci9NYWtlZmlsZSBiL3Zlcmlsb2cvZHYvdXNlcl91YXJ0X21hc3Rlci9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTJjYWVmCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3VhcnRfbWFzdGVyL01ha2VmaWxlCkBAIC0wLDAgKzEsOTIgQEAKKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKworIyMgQ2FyYXZlbCBQb2ludGVycworQ0FSQVZFTF9ST09UID89IC4uLy4uLy4uL2NhcmF2ZWwKK0NBUkFWRUxfUEFUSCA/PSAkKENBUkFWRUxfUk9PVCkKK0NBUkFWRUxfRklSTVdBUkVfUEFUSCA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nL2R2L2NhcmF2ZWwKK0NBUkFWRUxfVkVSSUxPR19QQVRIICA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nCitDQVJBVkVMX1JUTF9QQVRIID0gJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkvcnRsCitDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUyA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL2R2L2NhcmF2ZWwKKworCisjIyBVc2VyIFByb2plY3QgUG9pbnRlcnMKK1VQUkpfVkVSSUxPR19QQVRIID89IC4uLy4uLy4uL3Zlcmlsb2cKK1VQUkpfUlRMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9ydGwKK1VQUkpfR0xfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2dsCitVUFJKX0JFSEFWSU9VUkFMX01PREVMUyA9IC4uL21vZGVsCitVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUyA9IC4uL2FnZW50cworVVBSSl9JTkNMVURFX1BBVEgxID0gJChVUFJKX1JUTF9QQVRIKS95aWZpdmUveWNyMWMvc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDIgPSAkKFVQUkpfUlRMX1BBVEgpL3NkcmFtX2N0cmwvc3JjL2RlZnMKK1VQUkpfSU5DTFVERV9QQVRIMyA9ICQoVVBSSl9SVExfUEFUSCkvaTJjbS9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRINCA9ICQoVVBSSl9SVExfUEFUSCkvdXNiMV9ob3N0L3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEg1ID0gJChVUFJKX1JUTF9QQVRIKS9tYmlzdC9pbmNsdWRlCisKKyMjIFlJRklWRSBGSVJNV0FSRQorWUlGSVZFX0ZJUk1XQVJFX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9kdi9maXJtd2FyZQorCisKKyMjIFNpbXVsYXRpb24gbW9kZTogUlRML0dMCitTSU0/PVJUTAorRFVNUD89T0ZGCisKKy5TVUZGSVhFUzoKKworUEFUVEVSTiA9IHVzZXJfdWFydF9tYXN0ZXIKKworYWxsOiAgJHtQQVRURVJOOj0udmNkfQorCisKK3Z2cDogICR7UEFUVEVSTjo9LnZ2cH0KKworJS52dnA6ICVfdGIudgoraWZlcSAoJChTSU0pLFJUTCkKKyAgIGlmZXEgKCQoRFVNUCksT0ZGKQorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICAgZWxzZSAgCisJaXZlcmlsb2cgLWcyMDA1LXN2IC1EV0ZEVU1QIC1ERlVOQ1RJT05BTCAtRFNJTSAtSSAkKFBES19QQVRIKSBcCisJLUkgJChDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUykgLUkgJChDQVJBVkVMX1JUTF9QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX01PREVMUykgICAgLUkgJChVUFJKX1JUTF9QQVRIKSAtSSAkKFVQUkpfVkVSSUxPR19QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEgxKSAgICAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMikgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDMpIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRINCkgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDUpIFwKKwkkPCAtbyAkQCAKKyAgIGVuZGlmCitlbHNlICAKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1ER0wgLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgLUkgJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoVVBSSl9HTF9QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgXAorCSQ8IC1vICRAIAorZW5kaWYKKworJS52Y2Q6ICUudnZwCisJdnZwICQ8CisKKworCisjIC0tLS0gQ2xlYW4gLS0tLQorCitjbGVhbjoKKwlybSAtZiAqLnZ2cCAqLnZjZCAqLmxvZyAKKworLlBIT05ZOiBjbGVhbiBhbGwKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl91YXJ0X21hc3Rlci9ydW5faXZlcmlsb2cgYi92ZXJpbG9nL2R2L3VzZXJfdWFydF9tYXN0ZXIvcnVuX2l2ZXJpbG9nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU0NjFmZDEKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfdWFydF9tYXN0ZXIvcnVuX2l2ZXJpbG9nCkBAIC0wLDAgKzEsNDIgQEAKKyMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjIC8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhCisjIC8vIAorIyAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgLy8KKyMgLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgLy8KKyMgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMgLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyMgLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisjIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uICB1c2VyX3VhcnQuYyAtbyB1c2VyX3VhcnQubworCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLURfX0FTU0VNQkxZX189MSAtYyAtSS4vIC1JLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vICAuLi8uLi9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9jcnRfdGNtLlMgLW8gY3J0X3RjbS5vCisKK3Jpc2N2NjQtdW5rbm93bi1lbGYtZ2NjIC1vIHVzZXJfdWFydC5lbGYgLVQgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vbGlua190Y20ubGQgdXNlcl91YXJ0Lm8gY3J0X3RjbS5vIC1ub3N0YXJ0ZmlsZXMgLW5vc3RkbGliIC1sYyAtbGdjYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMgorCityaXNjdjY0LXVua25vd24tZWxmLW9iamNvcHkgLU8gdmVyaWxvZyB1c2VyX3VhcnQuZWxmIHVzZXJfdWFydC5oZXgKKworcmlzY3Y2NC11bmtub3duLWVsZi1vYmpkdW1wIC1EIHVzZXJfdWFydC5lbGYgPiB1c2VyX3VhcnQuZHVtcAorCitybSBjcnRfdGNtLm8gdXNlcl91YXJ0Lm8KKworI2l2ZXJpbG9nIHdpdGggd2F2ZWZvcm0gZHVtcAoraXZlcmlsb2cgLWcyMDA1LXN2IC1EV0ZEVU1QIC1ERlVOQ1RJT05BTCAtRFNJTSAtSSAkUERLX1BBVEggLUkgIC4uLy4uLy4uL2NhcmF2ZWwvdmVyaWxvZy9ydGwgIC1JIC4uLyAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bCAtSSAuLi8gLUkgLi4vLi4vLi4vdmVyaWxvZyAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMgICAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL2kyY20vc3JjL2luY2x1ZGVzIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMgLUkgJENBUkFWRUxfUk9PVC92ZXJpbG9nL2R2L2NhcmF2ZWwgLUkgLi4vbW9kZWwgLUkgLi4vYWdlbnRzIHVzZXJfdWFydF90Yi52IC1vIHVzZXJfdWFydF90Yi52dnAKKworCisjaXZlcmlsb2cgLWcyMDA1LXN2IC1JICRQREtfUEFUSCAtREZVTkNUSU9OQUwgLURTSU0gLUkgIC4uLy4uLy4uL2NhcmF2ZWwvdmVyaWxvZy9ydGwgLUkgLi4vIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsIC1JIC4uLy4uLy4uL3Zlcmlsb2cgLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2luY2x1ZGVzICAgLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvZGVmcyAtSSAkQ0FSQVZFTF9ST09UL3Zlcmlsb2cvZHYvY2FyYXZlbCAtSSAuLi9tb2RlbCAtSSAuLi9hZ2VudHMgdXNlcl91YXJ0X3RiLnYgLW8gdXNlcl91YXJ0X3RiLnZ2cAorCisjIEdMUyAKKyNpdmVyaWxvZyAtZzIwMDUtc3YgLUQgR0wgLUQgRlVOQ1RJT05BTCAtSSAkUERLX1BBVEggLUkgIC4uLy4uLy4uL2NhcmF2ZWwvdmVyaWxvZy9ydGwgIC1JIC4uLyAtSSAuLi8uLi8uLi92ZXJpbG9nL2dsIC1JIC4uLy4uLy4uL3Zlcmlsb2cgLUkgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9wZGsvc2t5MTMwQSAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMgICAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzIC1JICRDQVJBVkVMX1JPT1QvdmVyaWxvZy9kdi9jYXJhdmVsIC1JIC4uL21vZGVsIC1JIC4uL2FnZW50cyB1c2VyX3VhcnRfdGIudiAtbyB1c2VyX3VhcnRfdGIudnZwCisjCisKK3Z2cCB1c2VyX3VhcnRfdGIudnZwIHwgdGVlIHRlc3QubG9nCisKK1xybSAtcmYgdXNlcl91YXJ0X3RiLnZ2cApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3VhcnRfbWFzdGVyL3VzZXJfdWFydC5jIGIvdmVyaWxvZy9kdi91c2VyX3VhcnRfbWFzdGVyL3VzZXJfdWFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZTAyMDQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfdWFydF9tYXN0ZXIvdXNlcl91YXJ0LmMKQEAgLTAsMCArMSw0MyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2RlZmluZSBTQ19TSU1fT1VUUE9SVCAoMHhmMDAwMDAwMCkKKyNkZWZpbmUgdWludDMyX3QgIGxvbmcKKworCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnMCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAxMDAwMCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWcxICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDEwMDA0KQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzIgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMTAwMDgpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnMyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAxMDAwQykKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc0ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDEwMDEwKQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzUgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMTAwMTQpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnNiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAxMDAxOCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc3ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDEwMDFDKQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzggKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMTAwMjApCisKK2ludCBtYWluKCkKK3sKKworICAgIHdoaWxlKDEpIHsKKyAgICAgICAvLyBDaGVjayBVQVJUIFJYIGZpZm8gaGFzIGRhdGEsIGlmIGF2YWlsYWJsZSBsb29wIGJhY2sgdGhlIGRhdGEKKyAgICAgICBpZihyZWdfbXByal91YXJ0X3JlZzggIT0gMCkgeyAKKwkgICByZWdfbXByal91YXJ0X3JlZzUgPSByZWdfbXByal91YXJ0X3JlZzY7CisgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3VhcnRfbWFzdGVyL3VzZXJfdWFydF9tYXN0ZXJfdGIudiBiL3Zlcmlsb2cvZHYvdXNlcl91YXJ0X21hc3Rlci91c2VyX3VhcnRfbWFzdGVyX3RiLnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQxZmY1OQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl91YXJ0X21hc3Rlci91c2VyX3VhcnRfbWFzdGVyX3RiLnYKQEAgLTAsMCArMSwzMDMgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6ICAyMDIxICwgRGluZXNoIEFubmF5eWEKKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IE1vZGlmaWVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBTdGFuZGFsb25lIFVzZXIgdmFsaWRhdGlvbiBUZXN0IGJlbmNoICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgWUlGaXZlIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS95aWZpdmVfcjAuZ2l0ICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMveWlmaXZlLyAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgVGhpcyBpcyBhIHN0YW5kYWxvbmUgdGVzdCBiZW5jaCB0byB2YWxpZGF0ZSB0aGUgICAgICAgICAgICAvLy8vCisvLy8vICAgRGlnaXRhbCBjb3JlIHVzaW5nIHVhcnQgbWFzdGVyIGkvZi4gICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMSAtIDE2dGggRmViIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQorCitgdGltZXNjYWxlIDEgbnMgLyAxIG5zCisKK2BpbmNsdWRlICJ1cHJqX25ldGxpc3RzLnYiCitgaW5jbHVkZSAidWFydF9hZ2VudC52IgorCisKK2BkZWZpbmUgQUREUl9TUEFDRV9VQVJUICAgIDMyJ2gzMDAxXzAwMDAKK2BkZWZpbmUgQUREUl9TUEFDRV9QSU5NVVggIDMyJ2gzMDAyXzAwMDAKKworCittb2R1bGUgdXNlcl91YXJ0X21hc3Rlcl90YjsKKworcmVnICAgICAgICAgICAgY2xvY2sgICAgICAgICA7CityZWcgICAgICAgICAgICB3Yl9yc3RfaSAgICAgIDsKK3JlZyAgICAgICAgICAgIHBvd2VyMSwgcG93ZXIyOworcmVnICAgICAgICAgICAgcG93ZXIzLCBwb3dlcjQ7CisKK3JlZyAgICAgICAgICAgIHdiZF9leHRfY3ljX2k7ICAvLyBzdHJvYmUvcmVxdWVzdAorcmVnICAgICAgICAgICAgd2JkX2V4dF9zdGJfaTsgIC8vIHN0cm9iZS9yZXF1ZXN0CityZWcgWzMxOjBdICAgICB3YmRfZXh0X2Fkcl9pOyAgLy8gYWRkcmVzcworcmVnICAgICAgICAgICAgd2JkX2V4dF93ZV9pOyAgLy8gd3JpdGUKK3JlZyBbMzE6MF0gICAgIHdiZF9leHRfZGF0X2k7ICAvLyBkYXRhIG91dHB1dAorcmVnIFszOjBdICAgICAgd2JkX2V4dF9zZWxfaTsgIC8vIGJ5dGUgZW5hYmxlCisKK3dpcmUgWzMxOjBdICAgIHdiZF9leHRfZGF0X287ICAvLyBkYXRhIGlucHV0Cit3aXJlICAgICAgICAgICB3YmRfZXh0X2Fja19vOyAgLy8gYWNrbm93bGVnZW1lbnQKK3dpcmUgICAgICAgICAgIHdiZF9leHRfZXJyX287ICAvLyBlcnJvcgorCisvLyBVc2VyIEkvTword2lyZSBbMzc6MF0gICAgaW9fb2ViICAgICAgICA7Cit3aXJlIFszNzowXSAgICBpb19vdXQgICAgICAgIDsKK3dpcmUgWzM3OjBdICAgIGlvX2luICAgICAgICAgOworCit3aXJlIFszNzowXSAgICBtcHJqX2lvICAgICAgIDsKK3dpcmUgWzc6MF0gICAgIG1wcmpfaW9fMCAgICAgOworcmVnICAgICAgICAgICAgdGVzdF9mYWlsICAgICA7CityZWcgWzMxOjBdICAgICByZWFkX2RhdGEgICAgIDsKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVWFydCBDb25maWd1cmF0aW9uCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3JlZyBbMTowXSAgICAgIHVhcnRfZGF0YV9iaXQgICAgICAgIDsKK3JlZwkgICAgICAgdWFydF9zdG9wX2JpdHMgICAgICAgOyAvLyAwOiAxIHN0b3AgYml0OyAxOiAyIHN0b3AgYml0OworcmVnCSAgICAgICB1YXJ0X3N0aWNrX3Bhcml0eSAgICA7IC8vIDE6IGZvcmNlIGV2ZW4gcGFyaXR5CityZWcJICAgICAgIHVhcnRfcGFyaXR5X2VuICAgICAgIDsgLy8gcGFyaXR5IGVuYWJsZQorcmVnCSAgICAgICB1YXJ0X2V2ZW5fb2RkX3Bhcml0eSA7IC8vIDA6IG9kZCBwYXJpdHk7IDE6IGV2ZW4gcGFyaXR5CisKK3JlZyBbNzowXSAgICAgIHVhcnRfZGF0YSAgICAgICAgICAgIDsKK3JlZyBbMTU6MF0gICAgIHVhcnRfZGl2aXNvciAgICAgICAgIDsJLy8gZGl2aWRlZCBieSBuICogMTYKK3JlZyBbMTU6MF0gICAgIHVhcnRfdGltZW91dCAgICAgICAgIDsvLyB3YWl0IHRpbWUgbGltaXQKKworcmVnIFsxNTowXSAgICAgdWFydF9yeF9udSAgICAgICAgICAgOworcmVnIFsxNTowXSAgICAgdWFydF90eF9udSAgICAgICAgICAgOworcmVnIFs3OjBdICAgICAgdWFydF93cml0ZV9kYXRhIFswOjM5XTsKK3JlZyAJICAgICAgIHVhcnRfZmlmb19lbmFibGUgICAgIDsJLy8gZmlmbyBtb2RlIGRpc2FibGUKKworcmVnICBbMTI3OjBdICAgbGFfZGF0YV9pbjsKK3JlZyAgICAgICBmbGFnOworCisKK2ludGVnZXIgaSxqOworCisJLy8gRXh0ZXJuYWwgY2xvY2sgaXMgdXNlZCBieSBkZWZhdWx0LiAgTWFrZSB0aGlzIGFydGlmaWNpYWxseSBmYXN0IGZvciB0aGUKKwkvLyBzaW11bGF0aW9uLiAgTm9ybWFsbHkgdGhpcyB3b3VsZCBiZSBhIHNsb3cgY2xvY2sgYW5kIHRoZSBkaWdpdGFsIFBMTAorCS8vIHdvdWxkIGJlIHRoZSBmYXN0IGNsb2NrLgorCisJYWx3YXlzICMxMi41IGNsb2NrIDw9IChjbG9jayA9PT0gMSdiMCk7CisKKwlpbml0aWFsIGJlZ2luCisJCWNsb2NrID0gMDsKKwkJbGFfZGF0YV9pbiA9IDE7CisJZW5kCisKKwlgaWZkZWYgV0ZEVU1QCisJICAgaW5pdGlhbCBiZWdpbgorCSAgIAkkZHVtcGZpbGUoInJpc2NfYm9vdC52Y2QiKTsKKwkgICAJJGR1bXB2YXJzKDAsIHVzZXJfdWFydF9tYXN0ZXJfdGIpOworCSAgIGVuZAorICAgICAgIGBlbmRpZgorCisJaW5pdGlhbCBiZWdpbgorCQljbG9jayA9IDA7CisgICAgICAgICAgICAgICAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICAgICAgICAgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICAgICAgICAgICAgICAgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKwllbmQKK2luaXRpYWwKK2JlZ2luCisgICB3Yl9yc3RfaSA8PSAxJ2IxOworICAgdWFydF9kYXRhX2JpdCAgICAgICAgICAgPSAyJ2IxMTsKKyAgIHVhcnRfc3RvcF9iaXRzICAgICAgICAgID0gMTsgLy8gMDogMSBzdG9wIGJpdDsgMTogMiBzdG9wIGJpdDsKKyAgIHVhcnRfc3RpY2tfcGFyaXR5ICAgICAgID0gMDsgLy8gMTogZm9yY2UgZXZlbiBwYXJpdHkKKyAgIHVhcnRfcGFyaXR5X2VuICAgICAgICAgID0gMDsgLy8gcGFyaXR5IGVuYWJsZQorICAgdWFydF9ldmVuX29kZF9wYXJpdHkgICAgPSAxOyAvLyAwOiBvZGQgcGFyaXR5OyAxOiBldmVuIHBhcml0eQorICAgdWFydF9kaXZpc29yICAgICAgICAgICAgPSAxNTsvLyBkaXZpZGVkIGJ5IG4gKiAxNgorICAgdWFydF90aW1lb3V0ICAgICAgICAgICAgPSA2MDA7Ly8gd2FpdCB0aW1lIGxpbWl0CisgICB1YXJ0X2ZpZm9fZW5hYmxlICAgICAgICA9IDA7CS8vIGZpZm8gbW9kZSBkaXNhYmxlCisKKyAgIC8vIFVQREFURSB0aGUgUlRMIFVBUlQgTUFTVEVSCisgICBsYV9kYXRhX2luWzFdID0gMTsgLy8gIEVuYWJsZSBUcmFuc21pdCBQYXRoCisgICBsYV9kYXRhX2luWzJdID0gMTsgLy8gIEVuYWJsZSBSZWNlaXZlZCBQYXRoCisgICBsYV9kYXRhX2luWzNdID0gMTsgLy8gIEVuYWJsZSBSZWNlaXZlZCBQYXRoCisgICBsYV9kYXRhX2luWzE1OjRdID0gKCh1YXJ0X2Rpdmlzb3IrMSkvMTYpLTE7IC8vICBEaXZpc29yIHZhbHVlCisgICBsYV9kYXRhX2luWzE3OjE2XSA9IDInYjAwOyAvLyAgcHJpb3JpdHkgbW9kZSwgMCAtPiBub3AsIDEgLT4gRXZlbiwgMiAtPiBPZGQKKworICAgIzEwMDsKKyAgIHdiX3JzdF9pIDw9IDEnYjA7CSAgICAJLy8gUmVsZWFzZSByZXNldAorCisgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVhcnQgbWFzdGVyIFRlc3QgU3RhcnRlZCIpOworCisgICB0Yl9tYXN0ZXJfdWFydC5kZWJ1Z19tb2RlID0gMDsgLy8gZGlzYWJsZSBkZWJ1ZyBkaXNwbGF5CisgICB0Yl9tYXN0ZXJfdWFydC51YXJ0X2luaXQ7CisgICB0Yl9tYXN0ZXJfdWFydC5jb250cm9sX3NldHVwICh1YXJ0X2RhdGFfYml0LCB1YXJ0X3N0b3BfYml0cywgdWFydF9wYXJpdHlfZW4sIHVhcnRfZXZlbl9vZGRfcGFyaXR5LCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIHVhcnRfc3RpY2tfcGFyaXR5LCB1YXJ0X3RpbWVvdXQsIHVhcnRfZGl2aXNvcik7CisKKyAgIC8vJHdyaXRlICgiXG4oJXQpUmVzcG9uc2U6XG4iLCR0aW1lKTsKKyAgIGZsYWcgPSAwOworICAgd2hpbGUoZmxhZyA9PSAwKQorICAgYmVnaW4KKyAgICAgICAgdGJfbWFzdGVyX3VhcnQucmVhZF9jaGFyKHJlYWRfZGF0YSxmbGFnKTsKKyAgICAgICAgJHdyaXRlICgiJWMiLHJlYWRfZGF0YSk7CisgICBlbmQKKworCisKKyAgIC8vIFJlbW92ZSBXYiBSZXNldAorICAgdWFydG1fcmVnX3dyaXRlKCdoMzA4MF8wMDAwLCdoMSk7CisKKyAgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKKyAgICMxOworCisgICAkZGlzcGxheSgiTW9uaXRvcjogV3JpdGluZyAgZXhwZWN0ZWQgdmFsdWUiKTsKKyAgIAorICAgdGVzdF9mYWlsID0gMDsKKyAgIHVhcnRtX3JlZ193cml0ZSgzMidoMzAwMjAwNTgsMzInaDExMjIzMzQ0KTsKKyAgIHVhcnRtX3JlZ193cml0ZSgzMidoMzAwMjAwNUMsMzInaDIyMzM0NDU1KTsKKyAgIHVhcnRtX3JlZ193cml0ZSgzMidoMzAwMjAwNjAsMzInaDMzNDQ1NTY2KTsKKyAgIHVhcnRtX3JlZ193cml0ZSgzMidoMzAwMjAwNjQsMzInaDQ0NTU2Njc3KTsKKyAgIHVhcnRtX3JlZ193cml0ZSgzMidoMzAwMjAwNjgsMzInaDU1NjY3Nzg4KTsKKyAgIHVhcnRtX3JlZ193cml0ZSgzMidoMzAwMjAwNkMsMzInaDY2Nzc4ODk5KTsKKworICAgdWFydG1fcmVnX3JlYWRfY2hlY2soMzInaDMwMDIwMDU4LDMyJ2gxMTIyMzM0NCk7CisgICB1YXJ0bV9yZWdfcmVhZF9jaGVjaygzMidoMzAwMjAwNUMsMzInaDIyMzM0NDU1KTsKKyAgIHVhcnRtX3JlZ19yZWFkX2NoZWNrKDMyJ2gzMDAyMDA2MCwzMidoMzM0NDU1NjYpOworICAgdWFydG1fcmVnX3JlYWRfY2hlY2soMzInaDMwMDIwMDY0LDMyJ2g0NDU1NjY3Nyk7CisgICB1YXJ0bV9yZWdfcmVhZF9jaGVjaygzMidoMzAwMjAwNjgsMzInaDU1NjY3Nzg4KTsKKyAgIHVhcnRtX3JlZ19yZWFkX2NoZWNrKDMyJ2gzMDAyMDA2QywzMidoNjY3Nzg4OTkpOworICAgCisgICAKKyAgIAorICAgJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisgICAgICBgaWZkZWYgR0wKKyAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVBUlQgTWFzdGVyIChHTCkgUGFzc2VkIik7CisgICAgICBgZWxzZQorICAgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgVWFydCBNYXN0ZXIgKFJUTCkgUGFzc2VkIik7CisgICAgICBgZW5kaWYKKyAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgYGlmZGVmIEdMCisgICAgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgVWFydCBNYXN0ZXIgKEdMKSBGYWlsZWQiKTsKKyAgICAgICBgZWxzZQorICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVhcnQgTWFzdGVyIChSVEwpIEZhaWxlZCIpOworICAgICAgIGBlbmRpZgorICAgIGVuZAorICAgJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgIzEwMAorICAgJGZpbmlzaDsKK2VuZAorCisKK3dpcmUgVVNFUl9WREQxVjggPSAxJ2IxOword2lyZSBWU1MgPSAxJ2IwOworCisKK3VzZXJfcHJvamVjdF93cmFwcGVyIHVfdG9wKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgLnZjY2QxKFVTRVJfVkREMVY4KSwJLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICAudnNzZDEoVlNTKSwJLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorICAgIC53Yl9jbGtfaSAgICAgICAgKGNsb2NrKSwgIC8vIFN5c3RlbSBjbG9jaworICAgIC51c2VyX2Nsb2NrMiAgICAgKDEnYjEpLCAgLy8gUmVhbC10aW1lIGNsb2NrCisgICAgLndiX3JzdF9pICAgICAgICAod2JfcnN0X2kpLCAgLy8gUmVndWxhciBSZXNldCBzaWduYWwKKworICAgIC53YnNfY3ljX2kgICAod2JkX2V4dF9jeWNfaSksICAvLyBzdHJvYmUvcmVxdWVzdAorICAgIC53YnNfc3RiX2kgICAod2JkX2V4dF9zdGJfaSksICAvLyBzdHJvYmUvcmVxdWVzdAorICAgIC53YnNfYWRyX2kgICAod2JkX2V4dF9hZHJfaSksICAvLyBhZGRyZXNzCisgICAgLndic193ZV9pICAgICh3YmRfZXh0X3dlX2kpLCAgLy8gd3JpdGUKKyAgICAud2JzX2RhdF9pICAgKHdiZF9leHRfZGF0X2kpLCAgLy8gZGF0YSBvdXRwdXQKKyAgICAud2JzX3NlbF9pICAgKHdiZF9leHRfc2VsX2kpLCAgLy8gYnl0ZSBlbmFibGUKKworICAgIC53YnNfZGF0X28gICAod2JkX2V4dF9kYXRfbyksICAvLyBkYXRhIGlucHV0CisgICAgLndic19hY2tfbyAgICh3YmRfZXh0X2Fja19vKSwgIC8vIGFja25vd2xlZ2VtZW50CisKKyAKKyAgICAvLyBMb2dpYyBBbmFseXplciBTaWduYWxzCisgICAgLmxhX2RhdGFfaW4gICAgICAobGFfZGF0YV9pbikgLAorICAgIC5sYV9kYXRhX291dCAgICAgKCksCisgICAgLmxhX29lbmIgICAgICAgICAoJzApLAorIAorCisgICAgLy8gSU9zCisgICAgLmlvX2luICAgICAgICAgIChpb19pbikgICwKKyAgICAuaW9fb3V0ICAgICAgICAgKGlvX291dCkgLAorICAgIC5pb19vZWIgICAgICAgICAoaW9fb2ViKSAsCisKKyAgICAudXNlcl9pcnEgICAgICAgKCkgCisKKyk7CisKK2BpZm5kZWYgR0wgLy8gRHJpdmUgUG93ZXIgZm9yIEhvbGQgRml4IEJ1ZgorICAgIC8vIEFsbCBzdGFuZGFyZCBjZWxsIG5lZWQgcG93ZXIgaG9vay11cCBmb3IgZnVuY3Rpb25hbGl0eSB3b3JrCisgICAgaW5pdGlhbCBiZWdpbgorICAgIGVuZAorYGVuZGlmICAgIAorCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgVUFSVCBBZ2VudCBpbnRlZ3JhdGlvbgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpcmUgdWFydF90eGQsdWFydF9yeGQ7CisKK2Fzc2lnbiB1YXJ0X3R4ZCAgID0gaW9fb3V0WzM1XTsKK2Fzc2lnbiBpb19pblszNF0gID0gdWFydF9yeGQgOworIAordWFydF9hZ2VudCB0Yl9tYXN0ZXJfdWFydCgKKwkubWNsayAgICAgICAgICAgICAgICAoY2xvY2sgICAgICAgICAgICAgICksCisJLnR4ZCAgICAgICAgICAgICAgICAgKHVhcnRfcnhkICAgICAgICAgICApLAorCS5yeGQgICAgICAgICAgICAgICAgICh1YXJ0X3R4ZCAgICAgICAgICAgKQorCSk7CisKKworCitgaW5jbHVkZSAidWFydF9tYXN0ZXJfdGFza3Muc3YiCitlbmRtb2R1bGUKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi92cGkvc3lzdGVtL3N5c3RlbS5jIGIvdmVyaWxvZy9kdi92cGkvc3lzdGVtL3N5c3RlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MDFhMDkKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3ZwaS9zeXN0ZW0vc3lzdGVtLmMKQEAgLTAsMCArMSw1MiBAQAorIyBpbmNsdWRlICA8dnBpX3VzZXIuaD4KKworc3RhdGljIGludCBzeXN0ZW1fY29tcGlsZXRmKGNoYXIqdXNlcl9kYXRhKQoreworICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3lzdGVtX2NhbGx0ZihjaGFyKm5hbWUpCit7CisgICAgICB2cGlIYW5kbGUgY2FsbGggPSB2cGlfaGFuZGxlKHZwaVN5c1RmQ2FsbCwgMCk7CisgICAgICB2cGlIYW5kbGUgYXJndiAgPSB2cGlfaXRlcmF0ZSh2cGlBcmd1bWVudCwgY2FsbGgpOworICAgICAgdnBpSGFuZGxlIGFyZ19oYW5kbGU7CisgICAgICBzX3ZwaV92YWx1ZSB2YWx1ZV9zOworCisKKyAgICAgIAkvKiBDaGVjayB0aGF0IHRoZXJlIGFyZSBhcmd1bWVudHMuICovCisgICAgICBpZiAoYXJndiA9PSAwKSB7CisJICAgIHZwaV9wcmludGYoIkVSUk9SOiAlczolZDogIiwgdnBpX2dldF9zdHIodnBpRmlsZSwgY2FsbGgpLAorCSAgICAgICAgICAgICAgIChpbnQpdnBpX2dldCh2cGlMaW5lTm8sIGNhbGxoKSk7CisJICAgIHZwaV9wcmludGYoIiVzIHJlcXVpcmVzIHR3byBhcmd1bWVudHMuXG4iLCBuYW1lKTsKKwkgICAgdnBpcF9zZXRfcmV0dXJuX3ZhbHVlKDEpOworCSAgICB2cGlfY29udHJvbCh2cGlGaW5pc2gsIDEpOworCSAgICByZXR1cm4gMDsKKyAgICAgIH0KKworICAgICAgLyogQ2hlY2sgdGhhdCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYSBzdHJpbmcuICovCisgICAgICBhcmdfaGFuZGxlID0gdnBpX3NjYW4oYXJndik7CisgICAgICB2cGlfZnJlZV9vYmplY3QoYXJndik7IC8qIG5vdCBjYWxsaW5nIHNjYW4gdW50aWwgcmV0dXJucyBudWxsICovCisgICAgICB2YWx1ZV9zLmZvcm1hdCA9IHZwaVN0cmluZ1ZhbDsgLyogcmVhZCBhcyBhIHN0cmluZyAqLworICAgICAgdnBpX2dldF92YWx1ZShhcmdfaGFuZGxlLCAgJnZhbHVlX3MpOworICAgICAgdnBpX3ByaW50ZigiU3lzdGVtIENtZDogJXNcbiIsdmFsdWVfcy52YWx1ZS5zdHIpOworICAgICAgc3lzdGVtKHZhbHVlX3MudmFsdWUuc3RyKTsKKyAgICAgIHJldHVybiAwOworfQorCit2b2lkIHN5c3RlbV9yZWdpc3RlcigpCit7CisgICAgICBzX3ZwaV9zeXN0Zl9kYXRhIHRmX2RhdGE7CisKKyAgICAgIHRmX2RhdGEudHlwZSAgICAgID0gdnBpU3lzVGFzazsKKyAgICAgIHRmX2RhdGEudGZuYW1lICAgID0gIiRzeXN0ZW0iOworICAgICAgdGZfZGF0YS5jYWxsdGYgICAgPSBzeXN0ZW1fY2FsbHRmOworICAgICAgdGZfZGF0YS5jb21waWxldGYgPSBzeXN0ZW1fY29tcGlsZXRmOworICAgICAgdGZfZGF0YS5zaXpldGYgICAgPSAwOworICAgICAgdGZfZGF0YS51c2VyX2RhdGEgPSAiJHN5c3RlbSI7CisgICAgICB2cGlfcmVnaXN0ZXJfc3lzdGYoJnRmX2RhdGEpOworfQorCit2b2lkICgqdmxvZ19zdGFydHVwX3JvdXRpbmVzW10pKCkgPSB7CisgICAgc3lzdGVtX3JlZ2lzdGVyLAorICAgIDAKK307CmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3diX3BvcnQvTWFrZWZpbGUgYi92ZXJpbG9nL2R2L3diX3BvcnQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE5YmU2YQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvd2JfcG9ydC9NYWtlZmlsZQpAQCAtMCwwICsxLDExNiBAQAorIyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIwIEVmYWJsZXNzIENvcnBvcmF0aW9uCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorCisjIyBQREsgCitQREtfUEFUSCA9ICQoUERLX1JPT1QpL3NreTEzMEEKKworIyMgQ2FyYXZlbCBQb2ludGVycworQ0FSQVZFTF9ST09UID89IC4uLy4uLy4uL2NhcmF2ZWwKK0NBUkFWRUxfUEFUSCA/PSAkKENBUkFWRUxfUk9PVCkKK0NBUkFWRUxfRklSTVdBUkVfUEFUSCA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nL2R2L2NhcmF2ZWwKK0NBUkFWRUxfVkVSSUxPR19QQVRIICA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nCitDQVJBVkVMX1JUTF9QQVRIID0gJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkvcnRsCitDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUyA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL2R2L2NhcmF2ZWwKKworIyMgVXNlciBQcm9qZWN0IFBvaW50ZXJzCitVUFJKX1ZFUklMT0dfUEFUSCA/PSAuLi8uLi8uLi92ZXJpbG9nCitVUFJKX1JUTF9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvcnRsCitVUFJKX0dMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9nbAorVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMgPSAuLi8KK1VQUkpfSU5DTFVERV9QQVRIMSA9ICQoVVBSSl9SVExfUEFUSCkveWlmaXZlL3ljcjFjL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEgyID0gJChVUFJKX1JUTF9QQVRIKS9zZHJhbV9jdHJsL3NyYy9kZWZzCitVUFJKX0lOQ0xVREVfUEFUSDMgPSAkKFVQUkpfUlRMX1BBVEgpL2kyY20vc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDQgPSAkKFVQUkpfUlRMX1BBVEgpL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRINSA9ICQoVVBSSl9SVExfUEFUSCkvbWJpc3QvaW5jbHVkZQorIyMgUklTQ1YgR0NDIAorR0NDX1BBVEg/PS9lZi9hcHBzL2JpbgorR0NDX1BSRUZJWD89cmlzY3YzMi11bmtub3duLWVsZgorR0NDNjRfUFJFRklYPz1yaXNjdjY0LXVua25vd24tZWxmCisKKyMjIFNpbXVsYXRpb24gbW9kZTogUlRML0dMCitTSU1fREVGSU5FUyA9IC1ERlVOQ1RJT05BTCAtRFNJTQorU0lNPz1SVEwKK0RVTVA/PU9GRgorCisuU1VGRklYRVM6CisKK1BBVFRFUk4gPSB3Yl9wb3J0CisKK2FsbDogICR7UEFUVEVSTjo9LnZjZH0KKworaGV4OiAgJHtQQVRURVJOOj0uaGV4fQorCit2dnA6ICAke1BBVFRFUk46PS52dnB9CisKKyUudnZwOiAlX3RiLnYgJS5oZXgKK2lmZXEgKCQoU0lNKSxSVEwpCisgICBpZmVxICgkKERVTVApLE9GRikKKwlpdmVyaWxvZyAtZzIwMDUtc3YgJChTSU1fREVGSU5FUykgLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEgxKSAgICAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMikgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDMpIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRINCkgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDUpIFwKKwkkPCAtbyAkQCAKKyAgICBlbHNlICAKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURXRkRVTVAgJChTSU1fREVGSU5FUykgLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEgxKSAgICAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMikgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDMpIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRINCkgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDUpIFwKKwkkPCAtbyAkQCAKKyAgIGVuZGlmCitlbHNlICAKKwlpdmVyaWxvZyAkKFNJTV9ERUZJTkVTKSAtREdMIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIC1JICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSQoVVBSSl9HTF9QQVRIKSAgLUkkKFVQUkpfUlRMX1BBVEgpICAtSSAkKFVQUkpfVkVSSUxPR19QQVRIKSBcCisJJDwgLW8gJEAgCitlbmRpZgorCislLnZjZDogJS52dnAKKwl2dnAgJDwKKworJS5lbGY6ICUuYyAkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc2VjdGlvbnMubGRzICQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zdGFydC5zIGNoZWNrLWVudgorCSR7R0NDNjRfUFJFRklYfS1nY2MgLUkgJChDQVJBVkVMX1BBVEgpIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1XbCwtQnN0YXRpYywtVCwkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc2VjdGlvbnMubGRzLC0tc3RyaXAtZGVidWcgLWZmcmVlc3RhbmRpbmcgLW5vc3RkbGliIC1vICRAICQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zdGFydC5zICQ8CisKKyUuaGV4OiAlLmVsZgorCSR7R0NDNjRfUFJFRklYfS1vYmpjb3B5IC1PIHZlcmlsb2cgJDwgJEAgCisJIyB0byBmaXggZmxhc2ggYmFzZSBhZGRyZXNzCisJc2VkIC1pICdzL0AxMDAwMDAwMC9AMDAwMDAwMDAvZycgJEAKKworJS5iaW46ICUuZWxmCisJJHtHQ0M2NF9QUkVGSVh9LW9iamNvcHkgLU8gYmluYXJ5ICQ8IC9kZXYvc3Rkb3V0IHwgdGFpbCAtYyArMTA0ODU3NyA+ICRACisKK2NoZWNrLWVudjoKK2lmbmRlZiBQREtfUk9PVAorCSQoZXJyb3IgUERLX1JPT1QgaXMgdW5kZWZpbmVkLCBwbGVhc2UgZXhwb3J0IGl0IGJlZm9yZSBydW5uaW5nIG1ha2UpCitlbmRpZgoraWZlcSAoLCQod2lsZGNhcmQgJChQREtfUk9PVCkvc2t5MTMwQSkpCisJJChlcnJvciAkKFBES19ST09UKS9za3kxMzBBIG5vdCBmb3VuZCwgcGxlYXNlIGluc3RhbGwgcGRrIGJlZm9yZSBydW5uaW5nIG1ha2UpCitlbmRpZgorI2lmZXEgKCwkKHdpbGRjYXJkICQoR0NDNjRfUFJFRklYKS1nY2MgKSkKKyMJJChlcnJvciAkKEdDQzY0X1BSRUZJWCktZ2NjIGlzIG5vdCBmb3VuZCwgcGxlYXNlIGV4cG9ydCBHQ0NfUEFUSCBhbmQgR0NDX1BSRUZJWCBiZWZvcmUgcnVubmluZyBtYWtlKQorI2VuZGlmCisjIGNoZWNrIGZvciBlZmFibGVzcyBzdHlsZSBpbnN0YWxsYXRpb24KK2lmZXEgKCwkKHdpbGRjYXJkICQoUERLX1JPT1QpL3NreTEzMEEvbGlicy5yZWYvKi92ZXJpbG9nKSkKK1NJTV9ERUZJTkVTIDo9ICR7U0lNX0RFRklORVN9IC1ERUZfU1RZTEUKK2VuZGlmCisKKyMgLS0tLSBDbGVhbiAtLS0tCisKK2NsZWFuOgorCXJtIC1mICouZWxmICouaGV4ICouYmluICoudnZwICoudmNkICoubG9nCisKKy5QSE9OWTogY2xlYW4gaGV4IGFsbApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi93Yl9wb3J0L3J1bl92ZXJpbG9nIGIvdmVyaWxvZy9kdi93Yl9wb3J0L3J1bl92ZXJpbG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZmVkM2MKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3diX3BvcnQvcnVuX3Zlcmlsb2cKQEAgLTAsMCArMSwyMCBAQAorIyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyMgLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEKKyMgLy8gCisjIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIC8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAvLworIyAvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAvLworIyAvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIC8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIC8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorIyAvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKyMgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2l2ZXJpbG9nIC1nMjAwNS1zdiAtREZVTkNUSU9OQUwgLURTSU0gLURHTCAtSSAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL3Bkay9za3kxMzBBIC1JIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9jYXJhdmVsL3Zlcmlsb2cvZHYvY2FyYXZlbCAtSSAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvY2FyYXZlbC92ZXJpbG9nL3J0bCAtSSAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvY2FyYXZlbC92ZXJpbG9nIC1JIC4uLyAtSS4uLy4uLy4uL3Zlcmlsb2cvcnRsIC1JLi4vLi4vLi4vdmVyaWxvZy9nbCAgLUkgLi4vLi4vLi4vdmVyaWxvZyB3Yl9wb3J0X3RiLnYgLW8gd2JfcG9ydC52dnAKK2l2ZXJpbG9nIC1nMjAwNS1zdiAtRFdGRFVNUCAtREZVTkNUSU9OQUwgLURTSU0gLURHTCAtSSAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL3Bkay9za3kxMzBBIC1JIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9jYXJhdmVsL3Zlcmlsb2cvZHYvY2FyYXZlbCAtSSAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvY2FyYXZlbC92ZXJpbG9nL3J0bCAtSSAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvY2FyYXZlbC92ZXJpbG9nIC1JIC4uLyAtSS4uLy4uLy4uL3Zlcmlsb2cvcnRsIC1JLi4vLi4vLi4vdmVyaWxvZy9nbCAgLUkgLi4vLi4vLi4vdmVyaWxvZyB3Yl9wb3J0X3RiLnYgLW8gd2JfcG9ydC52dnAKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvd2JfcG9ydC93Yl9wb3J0LmMgYi92ZXJpbG9nL2R2L3diX3BvcnQvd2JfcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NDljNjcKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3diX3BvcnQvd2JfcG9ydC5jCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKi8KKworLy8gVGhpcyBpbmNsdWRlIGlzIHJlbGF0aXZlIHRvICRDQVJBVkVMX1BBVEggKHNlZSBNYWtlZmlsZSkKKyNpbmNsdWRlICJ2ZXJpbG9nL2R2L2NhcmF2ZWwvZGVmcy5oIgorI2luY2x1ZGUgInZlcmlsb2cvZHYvY2FyYXZlbC9zdHViLmMiCisKKy8vIFVzZXIgUHJvamVjdCBTbGF2ZXMgKDB4MzAwMF8wMDAwKQorI2RlZmluZSByZWdfbXByal9zbGF2ZSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAwMCkKKworI2RlZmluZSByZWdfbXByal93Ymhvc3RfcmVnMCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDgwMDAwMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMCAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMDApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzEgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDA0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAwOCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMyAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMEMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzQgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDEwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc1ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAxNCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNiAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMTgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzcgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDFDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc4ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAyMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnOSAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMjQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzEwICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDI4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxMSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAyQykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTIgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMzApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzEzICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDM0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxNCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAzOCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTUgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwM0MpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE2ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDQwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxNyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDA0NCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTggKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwNDgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE5ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDRDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyMCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDA1MCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjEgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwNTQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIyICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDU4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyMyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDA1QykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjQgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwNjApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzI1ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDY0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyNiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDA2OCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjcgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwNkMpCisKKworLyoKKwlXaXNoYm9uZSBUZXN0OgorCQktIENvbmZpZ3VyZXMgTVBSSiBsb3dlciA4LUlPIHBpbnMgYXMgb3V0cHV0cworCQktIENoZWNrcyBjb3VudGVyIHZhbHVlIHRocm91Z2ggdGhlIHdpc2hib25lIHBvcnQKKyovCitpbnQgaSA9IDA7IAoraW50IGNsayA9IDA7CisKK3ZvaWQgbWFpbigpCit7CisKKwlpbnQgYkZhaWwgPSAwOworCS8qIAorCUlPIENvbnRyb2wgUmVnaXN0ZXJzCisJfCBETSAgICAgfCBWVFJJUCB8IFNMT1cgIHwgQU5fUE9MIHwgQU5fU0VMIHwgQU5fRU4gfCBNT0RfU0VMIHwgSU5QX0RJUyB8IEhPTERIIHwgT0VCX04gfCBNR01UX0VOIHwKKwl8IDMtYml0cyB8IDEtYml0IHwgMS1iaXQgfCAxLWJpdCAgfCAxLWJpdCAgfCAxLWJpdCB8IDEtYml0ICAgfCAxLWJpdCAgIHwgMS1iaXQgfCAxLWJpdCB8IDEtYml0ICAgfAorCU91dHB1dDogMDAwMF8wMTEwXzAwMDBfMTExMCAgKDB4MTgwOCkgPSBHUElPX01PREVfVVNFUl9TVERfT1VUUFVUCisJfCBETSAgICAgfCBWVFJJUCB8IFNMT1cgIHwgQU5fUE9MIHwgQU5fU0VMIHwgQU5fRU4gfCBNT0RfU0VMIHwgSU5QX0RJUyB8IEhPTERIIHwgT0VCX04gfCBNR01UX0VOIHwKKwl8IDExMCAgICB8IDAgICAgIHwgMCAgICAgfCAwICAgICAgfCAwICAgICAgfCAwICAgICB8IDAgICAgICAgfCAxICAgICAgIHwgMCAgICAgfCAwICAgICB8IDAgICAgICAgfAorCQorCSAKKwlJbnB1dDogMDAwMF8wMDAxXzAwMDBfMTExMSAoMHgwNDAyKSA9IEdQSU9fTU9ERV9VU0VSX1NURF9JTlBVVF9OT1BVTEwKKwl8IERNICAgICB8IFZUUklQIHwgU0xPVyAgfCBBTl9QT0wgfCBBTl9TRUwgfCBBTl9FTiB8IE1PRF9TRUwgfCBJTlBfRElTIHwgSE9MREggfCBPRUJfTiB8IE1HTVRfRU4gfAorCXwgMDAxICAgIHwgMCAgICAgfCAwICAgICB8IDAgICAgICB8IDAgICAgICB8IDAgICAgIHwgMCAgICAgICB8IDAgICAgICAgfCAwICAgICB8IDEgICAgIHwgMCAgICAgICB8CisJKi8KKworCS8qIFNldCB1cCB0aGUgaG91c2VrZWVwaW5nIFNQSSB0byBiZSBjb25uZWN0ZWQgaW50ZXJuYWxseSBzbwkqLworCS8qIHRoYXQgZXh0ZXJuYWwgcGluIGNoYW5nZXMgZG9uJ3QgYWZmZWN0IGl0LgkJCSovCisKKwlyZWdfc3BpbWFzdGVyX2NvbmZpZyA9IDB4YTAwMjsJLy8gRW5hYmxlLCBwcmVzY2FsZXIgPSAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbm5lY3QgdG8gaG91c2VrZWVwaW5nIFNQSQorCisJLy8gQ29ubmVjdCB0aGUgaG91c2VrZWVwaW5nIFNQSSB0byB0aGUgU1BJIG1hc3RlcgorCS8vIHNvIHRoYXQgdGhlIENTQiBsaW5lIGlzIG5vdCBsZWZ0IGZsb2F0aW5nLiAgVGhpcyBhbGxvd3MKKwkvLyBhbGwgb2YgdGhlIEdQSU8gcGlucyB0byBiZSB1c2VkIGZvciB1c2VyIGZ1bmN0aW9ucy4KKworICAgIHJlZ19tcHJqX2lvXzMxID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICByZWdfbXByal9pb18zMCA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgcmVnX21wcmpfaW9fMjkgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgIHJlZ19tcHJqX2lvXzI4ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICByZWdfbXByal9pb18yNyA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgcmVnX21wcmpfaW9fMjYgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgIHJlZ19tcHJqX2lvXzI1ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICByZWdfbXByal9pb18yNCA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgcmVnX21wcmpfaW9fMjMgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgIHJlZ19tcHJqX2lvXzIyID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICByZWdfbXByal9pb18yMSA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgcmVnX21wcmpfaW9fMjAgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgIHJlZ19tcHJqX2lvXzE5ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICByZWdfbXByal9pb18xOCA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgcmVnX21wcmpfaW9fMTcgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgIHJlZ19tcHJqX2lvXzE2ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKworICAgICAvKiBBcHBseSBjb25maWd1cmF0aW9uICovCisgICAgcmVnX21wcmpfeGZlciA9IDE7CisgICAgd2hpbGUgKHJlZ19tcHJqX3hmZXIgPT0gMSk7CisKKyAgICByZWdfbGEyX29lbmIgPSByZWdfbGEyX2llbmEgPSAweEZGRkZGRkZGOyAgICAvLyBbOTU6NjRdCisgICAgcmVnX2xhMF9kYXRhID0gMHgwMDA7CisgICAgcmVnX2xhMF9kYXRhID0gMHgwMDE7IC8vIFJlbW92ZSBTb2Z0IFJlc2V0CisKKyAgICAvLyBGbGFnIHN0YXJ0IG9mIHRoZSB0ZXN0CisJcmVnX21wcmpfZGF0YWwgPSAweEFCNjAwMDAwOworCisgICAgLy8gUmVtb3ZlIFdpc2hib25lIFJlc2V0CisgICAgcmVnX21wcmpfd2Job3N0X3JlZzAgPSAweDE7CisKKyAgICBpZiAocmVnX21wcmpfZ2xvYmxfcmVnMCAhPSAweDg5NDkwMjAxKSBiRmFpbCA9IDE7CisgICAgaWYgKHJlZ19tcHJqX2dsb2JsX3JlZzEgIT0gMHhBNTVBQTU1QSkgYkZhaWwgPSAxOworCisgICAgLy8gV3JpdGUgc29mdHdhcmUgV3JpdGUgJiBSZWFkIFJlZ2lzdGVyCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjIgID0gMHgxMTIyMzM0NDsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjMgID0gMHgyMjMzNDQ1NTsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjQgID0gMHgzMzQ0NTU2NjsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjUgID0gMHg0NDU1NjY3NzsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjYgID0gMHg1NTY2Nzc4ODsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjcgID0gMHg2Njc3ODg5OTsgCisKKworICAgIGlmIChyZWdfbXByal9nbG9ibF9yZWcyMiAgIT0gMHgxMTIyMzM0NCkgYkZhaWwgPSAxOworICAgIGlmIChiRmFpbCA9PSAxKSByZWdfbXByal9kYXRhbCA9IDB4QUI2MTAwMDA7CisgICAgaWYgKHJlZ19tcHJqX2dsb2JsX3JlZzIzICAhPSAweDIyMzM0NDU1KSBiRmFpbCA9IDE7CisgICAgaWYgKGJGYWlsID09IDEpIHJlZ19tcHJqX2RhdGFsID0gMHhBQjYyMDAwMDsKKyAgICBpZiAocmVnX21wcmpfZ2xvYmxfcmVnMjQgICE9IDB4MzM0NDU1NjYpIGJGYWlsID0gMTsKKyAgICBpZiAoYkZhaWwgPT0gMSkgcmVnX21wcmpfZGF0YWwgPSAweEFCNjMwMDAwOworICAgIGlmIChyZWdfbXByal9nbG9ibF9yZWcyNSAgIT0gMHg0NDU1NjY3NykgYkZhaWwgPSAxOworICAgIGlmIChiRmFpbCA9PSAxKSByZWdfbXByal9kYXRhbCA9IDB4QUI2NDAwMDA7CisgICAgaWYgKHJlZ19tcHJqX2dsb2JsX3JlZzI2ICE9IDB4NTU2Njc3ODgpIGJGYWlsID0gMTsKKyAgICBpZiAoYkZhaWwgPT0gMSkgcmVnX21wcmpfZGF0YWwgPSAweEFCNjUwMDAwOworICAgIGlmIChyZWdfbXByal9nbG9ibF9yZWcyNyAhPSAweDY2Nzc4ODk5KSBiRmFpbCA9IDE7CisgICAgaWYgKGJGYWlsID09IDEpIHJlZ19tcHJqX2RhdGFsID0gMHhBQjY2MDAwMDsKKworICAgIGlmKGJGYWlsID09IDApIHsKKyAgICAgICAgcmVnX21wcmpfZGF0YWwgPSAweEFCNkEwMDAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlZ19tcHJqX2RhdGFsID0gMHhBQjYwMDAwMDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3diX3BvcnQvd2JfcG9ydF90Yi52IGIvdmVyaWxvZy9kdi93Yl9wb3J0L3diX3BvcnRfdGIudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGU4YmVlCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi93Yl9wb3J0L3diX3BvcnRfdGIudgpAQCAtMCwwICsxLDE3NSBAQAorLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKK2BkZWZhdWx0X25ldHR5cGUgbm9uZQorCitgdGltZXNjYWxlIDEgbnMgLyAxIHBzCisKK2BpbmNsdWRlICJ1cHJqX25ldGxpc3RzLnYiCitgaW5jbHVkZSAiY2FyYXZlbF9uZXRsaXN0cy52IgorYGluY2x1ZGUgInNwaWZsYXNoLnYiCisKK21vZHVsZSB3Yl9wb3J0X3RiOworCXJlZyBjbG9jazsKKwlyZWcgUlNUQjsKKwlyZWcgQ1NCOworCXJlZyBwb3dlcjEsIHBvd2VyMjsKKwlyZWcgcG93ZXIzLCBwb3dlcjQ7CisKKwl3aXJlIGdwaW87CisJd2lyZSBbMzc6MF0gbXByal9pbzsKKwl3aXJlIFs3OjBdIG1wcmpfaW9fMDsKKwl3aXJlIFsxNTowXSBjaGVja2JpdHM7CisKKwlhc3NpZ24gY2hlY2tiaXRzID0gbXByal9pb1szMToxNl07CisKKwlhc3NpZ24gbXByal9pb1szXSA9IChDU0IgPT0gMSdiMSkgPyAxJ2IxIDogMSdiejsKKworCS8vIEV4dGVybmFsIGNsb2NrIGlzIHVzZWQgYnkgZGVmYXVsdC4gIE1ha2UgdGhpcyBhcnRpZmljaWFsbHkgZmFzdCBmb3IgdGhlCisJLy8gc2ltdWxhdGlvbi4gIE5vcm1hbGx5IHRoaXMgd291bGQgYmUgYSBzbG93IGNsb2NrIGFuZCB0aGUgZGlnaXRhbCBQTEwKKwkvLyB3b3VsZCBiZSB0aGUgZmFzdCBjbG9jay4KKworCWFsd2F5cyAjMTIuNSBjbG9jayA8PSAoY2xvY2sgPT09IDEnYjApOworCisJaW5pdGlhbCBiZWdpbgorCQljbG9jayA9IDA7CisJZW5kCisKKwlgaWZkZWYgV0ZEVU1QCisJaW5pdGlhbCBiZWdpbgorCQkkZHVtcGZpbGUoIndiX3BvcnQudmNkIik7CisJCSRkdW1wdmFycygxLCB3Yl9wb3J0X3RiKTsKKwkJJGR1bXB2YXJzKDIsIHdiX3BvcnRfdGIudXV0KTsKKwkJLy8kZHVtcHZhcnMoMSwgd2JfcG9ydF90Yi51dXQubXByaik7CisJCSRkdW1wdmFycygxLCB3Yl9wb3J0X3RiLnV1dC5tcHJqLnVfd2JfaG9zdCk7CisJCSRkdW1wdmFycygyLCB3Yl9wb3J0X3RiLnV1dC5tcHJqLnVfcGlubXV4KTsKKwllbmQKKyAgICAgICBgZW5kaWYKKworCWluaXRpYWwgYmVnaW4KKworCQkvLyBSZXBlYXQgY3ljbGVzIG9mIDEwMDAgY2xvY2sgZWRnZXMgYXMgbmVlZGVkIHRvIGNvbXBsZXRlIHRlc3RiZW5jaAorCQlyZXBlYXQgKDMwKSBiZWdpbgorCQkJcmVwZWF0ICgxMDAwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkJLy8gJGRpc3BsYXkoIisxMDAwIGN5Y2xlcyIpOworCQllbmQKKwkJJGRpc3BsYXkoIiVjWzE7MzFtIiwyNyk7CisJCSRkaXNwbGF5ICgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQlgaWZkZWYgR0wKKwkJCSRkaXNwbGF5ICgiTW9uaXRvcjogVGltZW91dCwgVGVzdCBNZWdhLVByb2plY3QgV0IgUG9ydCAoR0wpIEZhaWxlZCIpOworCQlgZWxzZQorCQkJJGRpc3BsYXkgKCJNb25pdG9yOiBUaW1lb3V0LCBUZXN0IE1lZ2EtUHJvamVjdCBXQiBQb3J0IChSVEwpIEZhaWxlZCIpOworCQlgZW5kaWYKKwkJJGRpc3BsYXkgKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCIlY1swbSIsMjcpOworCQkkZmluaXNoOworCWVuZAorCisJaW5pdGlhbCBiZWdpbgorCSAgIHdhaXQoY2hlY2tiaXRzID09IDE2J2ggQUI2MCk7CisJCSRkaXNwbGF5KCJNb25pdG9yOiBNUFJKLUxvZ2ljIFdCIFN0YXJ0ZWQiKTsKKwkJd2FpdChjaGVja2JpdHMgPT0gMTYnaCBBQjZBKTsKKwkJJGRpc3BsYXkgKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCWBpZmRlZiBHTAorCSAgICAJJGRpc3BsYXkoIk1vbml0b3I6IE1lZ2EtUHJvamVjdCBXQiAoR0wpIFBhc3NlZCIpOworCQlgZWxzZQorCQkgICAgJGRpc3BsYXkoIk1vbml0b3I6IE1lZ2EtUHJvamVjdCBXQiAoUlRMKSBQYXNzZWQiKTsKKwkJYGVuZGlmCisJCSRkaXNwbGF5ICgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAkZmluaXNoOworCWVuZAorCisJaW5pdGlhbCBiZWdpbgorCQlSU1RCIDw9IDEnYjA7CisJCUNTQiAgPD0gMSdiMTsJCS8vIEZvcmNlIENTQiBoaWdoCisJCSMyMDAwOworCQlSU1RCIDw9IDEnYjE7CSAgICAJLy8gUmVsZWFzZSByZXNldAorCQkjMTcwMDAwOworCQlDU0IgPSAxJ2IwOwkJLy8gQ1NCIGNhbiBiZSByZWxlYXNlZAorCWVuZAorCisJaW5pdGlhbCBiZWdpbgkJLy8gUG93ZXItdXAgc2VxdWVuY2UKKwkJcG93ZXIxIDw9IDEnYjA7CisJCXBvd2VyMiA8PSAxJ2IwOworCQlwb3dlcjMgPD0gMSdiMDsKKwkJcG93ZXI0IDw9IDEnYjA7CisJCSMxMDA7CisJCXBvd2VyMSA8PSAxJ2IxOworCQkjMTAwOworCQlwb3dlcjIgPD0gMSdiMTsKKwkJIzEwMDsKKwkJcG93ZXIzIDw9IDEnYjE7CisJCSMxMDA7CisJCXBvd2VyNCA8PSAxJ2IxOworCWVuZAorCisJLy9hbHdheXMgQChtcHJqX2lvKSBiZWdpbgorCS8vCSMxICRkaXNwbGF5KCJNUFJKLUlPIHN0YXRlID0gJWIgIiwgbXByal9pb1s3OjBdKTsKKwkvL2VuZAorCisJd2lyZSBmbGFzaF9jc2I7CisJd2lyZSBmbGFzaF9jbGs7CisJd2lyZSBmbGFzaF9pbzA7CisJd2lyZSBmbGFzaF9pbzE7CisKKwl3aXJlIFZERDNWMyA9IHBvd2VyMTsKKwl3aXJlIFZERDFWOCA9IHBvd2VyMjsKKwl3aXJlIFVTRVJfVkREM1YzID0gcG93ZXIzOworCXdpcmUgVVNFUl9WREQxVjggPSBwb3dlcjQ7CisJd2lyZSBWU1MgPSAxJ2IwOworCisJY2FyYXZlbCB1dXQgKAorCQkudmRkaW8JICAoVkREM1YzKSwKKwkJLnZzc2lvCSAgKFZTUyksCisJCS52ZGRhCSAgKFZERDNWMyksCisJCS52c3NhCSAgKFZTUyksCisJCS52Y2NkCSAgKFZERDFWOCksCisJCS52c3NkCSAgKFZTUyksCisJCS52ZGRhMSAgICAoVVNFUl9WREQzVjMpLAorCQkudmRkYTIgICAgKFVTRVJfVkREM1YzKSwKKwkJLnZzc2ExCSAgKFZTUyksCisJCS52c3NhMgkgIChWU1MpLAorCQkudmNjZDEJICAoVVNFUl9WREQxVjgpLAorCQkudmNjZDIJICAoVVNFUl9WREQxVjgpLAorCQkudnNzZDEJICAoVlNTKSwKKwkJLnZzc2QyCSAgKFZTUyksCisJCS5jbG9jawkgIChjbG9jayksCisJCS5ncGlvICAgICAoZ3BpbyksCisgICAgICAgIC5tcHJqX2lvICAobXByal9pbyksCisJCS5mbGFzaF9jc2IoZmxhc2hfY3NiKSwKKwkJLmZsYXNoX2NsayhmbGFzaF9jbGspLAorCQkuZmxhc2hfaW8wKGZsYXNoX2lvMCksCisJCS5mbGFzaF9pbzEoZmxhc2hfaW8xKSwKKwkJLnJlc2V0YgkgIChSU1RCKQorCSk7CisKKwlzcGlmbGFzaCAjKAorCQkuRklMRU5BTUUoIndiX3BvcnQuaGV4IikKKwkpIHNwaWZsYXNoICgKKwkJLmNzYihmbGFzaF9jc2IpLAorCQkuY2xrKGZsYXNoX2NsayksCisJCS5pbzAoZmxhc2hfaW8wKSwKKwkJLmlvMShmbGFzaF9pbzEpLAorCQkuaW8yKCksCQkJLy8gbm90IHVzZWQKKwkJLmlvMygpCQkJLy8gbm90IHVzZWQKKwkpOworCitgaWZuZGVmIEdMIC8vIERyaXZlIFBvd2VyIGZvciBIb2xkIEZpeCBCdWYKKyAgICAvLyBBbGwgc3RhbmRhcmQgY2VsbCBuZWVkIHBvd2VyIGhvb2stdXAgZm9yIGZ1bmN0aW9uYWxpdHkgd29yaworICAgIGluaXRpYWwgYmVnaW4KKyAgICBlbmQKK2BlbmRpZiAgICAKK2VuZG1vZHVsZQorYGRlZmF1bHRfbmV0dHlwZSB3aXJlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9jbGtfc2tld19hZGp1c3Qvc3JjL2Nsa19za2V3X2FkanVzdC5ndiBiL3Zlcmlsb2cvcnRsL2Nsa19za2V3X2FkanVzdC9zcmMvY2xrX3NrZXdfYWRqdXN0Lmd2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZDFhNjIKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9jbGtfc2tld19hZGp1c3Qvc3JjL2Nsa19za2V3X2FkanVzdC5ndgpAQCAtMCwwICsxLDIwNSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBjbG9jayBza2V3IGFkanVzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICBUaGlzIGJsb2NrIGlzIHVzZWZ1bCBmb3IgZ2xvYmFsIGNsb2NrIHNrZXcgYWRqdXN0bWVudCAgIC8vLy8KKy8vLy8gICAgICBsb2dpYyBpbXBsZW1lbnRhdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgIGNsa19vdXQgPSAoc2VsPTApID8gY2xrX2luIDogICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAoc2VsPTEpID8gY2xrX2QxIDogICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAoc2VsPTEpID8gY2xrX2QyIDogICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAuLi4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAoc2VsPTE1KT8gY2xrX2QxNSA6Y2xrX2luICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgIE5vdGU6IGVhY2ggZCogaW5kaWNhdGUgY2xrIGJ1ZiBkZWxheSAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4wIC0gMjl0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgSW5pdGlhbCB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLworLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLworLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLworLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLworLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLworLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLworLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLworLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLworLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gQ2xvY2staW4gaXMgZWFzdCBwYWQgZGlyZWN0aW9uCisvLyBjbG9jayBvdXQgZ2l2ZSBpbiBvdGhlciB0aHJlZSBkaXJlY3Rpb24gZm9yIGJldHRlciBwbGFjZW1lbnQKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworbW9kdWxlIGNsa19za2V3X2FkanVzdCgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgICB2Y2NkMSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgICB2c3NkMSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCitjbGtfaW4sIHNlbCwgY2xrX291dCk7CisKKworYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgIGlucHV0IHZjY2QxOy8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgIGlucHV0IHZzc2QxOy8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgaW5wdXQgIGNsa19pbjsKKyAgb3V0cHV0IGNsa19vdXQ7CisgIGlucHV0IFszOjBdIHNlbDsKKyAgd2lyZSBpbjA7CisgIHdpcmUgaW4xOworICB3aXJlIGluMjsKKyAgd2lyZSBpbjM7CisgIHdpcmUgaW40OworICB3aXJlIGluNTsKKyAgd2lyZSBpbjY7CisgIHdpcmUgaW43OworICB3aXJlIGluODsKKyAgd2lyZSBpbjk7CisgIHdpcmUgaW4xMDsKKyAgd2lyZSBpbjExOworICB3aXJlIGluMTI7CisgIHdpcmUgaW4xMzsKKyAgd2lyZSBpbjE0OworICB3aXJlIGluMTU7CisKKyAgd2lyZSBjbGtfZDE7CisgIHdpcmUgY2xrX2QyOworICB3aXJlIGNsa19kMzsKKyAgd2lyZSBjbGtfZDQ7CisgIHdpcmUgY2xrX2Q1OworICB3aXJlIGNsa19kNjsKKyAgd2lyZSBjbGtfZDc7CisgIHdpcmUgY2xrX2Q4OworICB3aXJlIGNsa19kOTsKKyAgd2lyZSBjbGtfZDEwOworICB3aXJlIGNsa19kMTE7CisgIHdpcmUgY2xrX2QxMjsKKyAgd2lyZSBjbGtfZDEzOworICB3aXJlIGNsa19kMTQ7CisgIHdpcmUgY2xrX2QxNTsKKworICB3aXJlIGQwMDsKKyAgd2lyZSBkMDE7CisgIHdpcmUgZDAyOworICB3aXJlIGQwMzsKKyAgd2lyZSBkMDQ7CisgIHdpcmUgZDA1OworICB3aXJlIGQwNjsKKyAgd2lyZSBkMDc7CisgIHdpcmUgZDEwOworICB3aXJlIGQxMTsKKyAgd2lyZSBkMTI7CisgIHdpcmUgZDEzOworICB3aXJlIGQyMDsKKyAgd2lyZSBkMjE7CisgIHdpcmUgZDMwOworCisKKyAgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzEgICguQShjbGtfaW4pLCAgICAuWChjbGtfZDEpKTsKKyAgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzIgICguQShjbGtfZDEpLCAgICAuWChjbGtfZDIpKTsKKyAgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzMgICguQShjbGtfZDIpLCAgICAuWChjbGtfZDMpKTsKKyAgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzQgICguQShjbGtfZDMpLCAgICAuWChjbGtfZDQpKTsKKyAgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzUgICguQShjbGtfZDQpLCAgICAuWChjbGtfZDUpKTsKKyAgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzYgICguQShjbGtfZDUpLCAgICAuWChjbGtfZDYpKTsKKyAgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzcgICguQShjbGtfZDYpLCAgICAuWChjbGtfZDcpKTsKKyAgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzggICguQShjbGtfZDcpLCAgICAuWChjbGtfZDgpKTsKKyAgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzkgICguQShjbGtfZDgpLCAgICAuWChjbGtfZDkpKTsKKyAgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzEwICguQShjbGtfZDkpLCAgICAuWChjbGtfZDEwKSk7CisgIHNreTEzMF9mZF9zY19oZF9fY2xrZGx5YnVmNHMxNV8yIGNsa2J1Zl8xMSAoLkEoY2xrX2QxMCksICAgLlgoY2xrX2QxMSkpOworICBza3kxMzBfZmRfc2NfaGRfX2Nsa2RseWJ1ZjRzMTVfMiBjbGtidWZfMTIgKC5BKGNsa19kMTEpLCAgIC5YKGNsa19kMTIpKTsKKyAgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzEzICguQShjbGtfZDEyKSwgICAuWChjbGtfZDEzKSk7CisgIHNreTEzMF9mZF9zY19oZF9fY2xrZGx5YnVmNHMxNV8yIGNsa2J1Zl8xNCAoLkEoY2xrX2QxMyksICAgLlgoY2xrX2QxNCkpOworICBza3kxMzBfZmRfc2NfaGRfX2Nsa2RseWJ1ZjRzMTVfMiBjbGtidWZfMTUgKC5BKGNsa19kMTQpLCAgIC5YKGNsa19kMTUpKTsKKworCisgIC8vIFRhcCBwb2ludCBzZWxlY3Rpb24KKyAgYXNzaWduIGluMCAgPSBjbGtfaW47CisgIGFzc2lnbiBpbjEgID0gY2xrX2QxOworICBhc3NpZ24gaW4yICA9IGNsa19kMjsKKyAgYXNzaWduIGluMyAgPSBjbGtfZDM7CisgIGFzc2lnbiBpbjQgID0gY2xrX2Q0OworICBhc3NpZ24gaW41ICA9IGNsa19kNTsKKyAgYXNzaWduIGluNiAgPSBjbGtfZDY7CisgIGFzc2lnbiBpbjcgID0gY2xrX2Q3OworICBhc3NpZ24gaW44ICA9IGNsa19kODsKKyAgYXNzaWduIGluOSAgPSBjbGtfZDk7CisgIGFzc2lnbiBpbjEwID0gY2xrX2QxMDsKKyAgYXNzaWduIGluMTEgPSBjbGtfZDExOworICBhc3NpZ24gaW4xMiA9IGNsa19kMTI7CisgIGFzc2lnbiBpbjEzID0gY2xrX2QxMzsKKyAgYXNzaWduIGluMTQgPSBjbGtfZDE0OworICBhc3NpZ24gaW4xNSA9IGNsa19kMTU7CisKKworICAvLyBmaXJzdCBsZXZlbCBtdXggLSA4CisgIHNreTEzMF9mZF9zY19oZF9fbXV4Ml8xIHVfbXV4X2xldmVsXzAwICggLlggKGQwMCkgLCAuQTAgKGluMCksICAuQTEoaW4xKSwgIC5TKHNlbFswXSkpOworICBza3kxMzBfZmRfc2NfaGRfX211eDJfMSB1X211eF9sZXZlbF8wMSAoIC5YIChkMDEpICwgLkEwIChpbjIpLCAgLkExKGluMyksICAuUyhzZWxbMF0pKTsKKyAgc2t5MTMwX2ZkX3NjX2hkX19tdXgyXzEgdV9tdXhfbGV2ZWxfMDIgKCAuWCAoZDAyKSAsIC5BMCAoaW40KSwgIC5BMShpbjUpLCAgLlMoc2VsWzBdKSk7CisgIHNreTEzMF9mZF9zY19oZF9fbXV4Ml8xIHVfbXV4X2xldmVsXzAzICggLlggKGQwMykgLCAuQTAgKGluNiksICAuQTEoaW43KSwgIC5TKHNlbFswXSkpOworICBza3kxMzBfZmRfc2NfaGRfX211eDJfMSB1X211eF9sZXZlbF8wNCAoIC5YIChkMDQpICwgLkEwIChpbjgpLCAgLkExKGluOSksICAuUyhzZWxbMF0pKTsKKyAgc2t5MTMwX2ZkX3NjX2hkX19tdXgyXzEgdV9tdXhfbGV2ZWxfMDUgKCAuWCAoZDA1KSAsIC5BMCAoaW4xMCksIC5BMShpbjExKSwgLlMoc2VsWzBdKSk7CisgIHNreTEzMF9mZF9zY19oZF9fbXV4Ml8xIHVfbXV4X2xldmVsXzA2ICggLlggKGQwNikgLCAuQTAgKGluMTIpLCAuQTEoaW4xMyksIC5TKHNlbFswXSkpOworICBza3kxMzBfZmRfc2NfaGRfX211eDJfMSB1X211eF9sZXZlbF8wNyAoIC5YIChkMDcpICwgLkEwIChpbjE0KSwgLkExKGluMTUpLCAuUyhzZWxbMF0pKTsKKworICAvLyBzZWNvbmQgbGV2ZWwgbXV4IC0gNAorICBza3kxMzBfZmRfc2NfaGRfX211eDJfMSB1X211eF9sZXZlbF8xMCAoIC5YIChkMTApICwgLkEwIChkMDApLCAuQTEoZDAxKSwgLlMoc2VsWzFdKSk7CisgIHNreTEzMF9mZF9zY19oZF9fbXV4Ml8xIHVfbXV4X2xldmVsXzExICggLlggKGQxMSkgLCAuQTAgKGQwMiksIC5BMShkMDMpLCAuUyhzZWxbMV0pKTsKKyAgc2t5MTMwX2ZkX3NjX2hkX19tdXgyXzEgdV9tdXhfbGV2ZWxfMTIgKCAuWCAoZDEyKSAsIC5BMCAoZDA0KSwgLkExKGQwNSksIC5TKHNlbFsxXSkpOworICBza3kxMzBfZmRfc2NfaGRfX211eDJfMSB1X211eF9sZXZlbF8xMyAoIC5YIChkMTMpICwgLkEwIChkMDYpLCAuQTEoZDA3KSwgLlMoc2VsWzFdKSk7CisKKyAgLy8gdGhpcmQgbGV2ZWwgbXV4IC0gMgorICBza3kxMzBfZmRfc2NfaGRfX211eDJfMSB1X211eF9sZXZlbF8yMCAoIC5YIChkMjApICwgLkEwIChkMTApLCAuQTEoZDExKSwgLlMoc2VsWzJdKSk7CisgIHNreTEzMF9mZF9zY19oZF9fbXV4Ml8xIHVfbXV4X2xldmVsXzIxICggLlggKGQyMSkgLCAuQTAgKGQxMiksIC5BMShkMTMpLCAuUyhzZWxbMl0pKTsKKworICAvLyBmb3VydGggbGV2ZWwgbXV4IC0gMQorICBza3kxMzBfZmRfc2NfaGRfX211eDJfNCB1X211eF9sZXZlbF8zMCAoIC5YIChkMzApICwgLkEwIChkMjApLCAuQTEoZDIxKSwgLlMoc2VsWzNdKSk7CisKKworICBhc3NpZ24gY2xrX291dCA9IGQzMDsKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9jbGtfc2tld19hZGp1c3Qvc3JjL2Nsa19za2V3X2FkanVzdC52IGIvdmVyaWxvZy9ydGwvY2xrX3NrZXdfYWRqdXN0L3NyYy9jbGtfc2tld19hZGp1c3QudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTYxYTUwCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvY2xrX3NrZXdfYWRqdXN0L3NyYy9jbGtfc2tld19hZGp1c3QudgpAQCAtMCwwICsxLDI4OTggQEAKK21vZHVsZSBjbGtfc2tld19hZGp1c3QgKGNsa19pbiwKKyAgICBjbGtfb3V0LAorICAgIHZjY2QxLAorICAgIHZzc2QxLAorICAgIHNlbCk7CisgaW5wdXQgY2xrX2luOworIG91dHB1dCBjbGtfb3V0OworIGlucHV0IHZjY2QxOworIGlucHV0IHZzc2QxOworIGlucHV0IFszOjBdIHNlbDsKKworIHNreTEzMF9mZF9zY19oZF9fY2xrZGx5YnVmNHMxNV8yIGNsa2J1Zl8xICguQShjbGtfaW4pLAorICAgIC5YKGNsa19kMSksCisgICAgLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzEwICguQShjbGtfZDkpLAorICAgIC5YKGNsa19kMTApLAorICAgIC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fY2xrZGx5YnVmNHMxNV8yIGNsa2J1Zl8xMSAoLkEoY2xrX2QxMCksCisgICAgLlgoY2xrX2QxMSksCisgICAgLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzEyICguQShjbGtfZDExKSwKKyAgICAuWChjbGtfZDEyKSwKKyAgICAuVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2Nsa2RseWJ1ZjRzMTVfMiBjbGtidWZfMTMgKC5BKGNsa19kMTIpLAorICAgIC5YKGNsa19kMTMpLAorICAgIC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fY2xrZGx5YnVmNHMxNV8yIGNsa2J1Zl8xNCAoLkEoY2xrX2QxMyksCisgICAgLlgoY2xrX2QxNCksCisgICAgLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzE1ICguQShjbGtfZDE0KSwKKyAgICAuWChjbGtfZDE1KSwKKyAgICAuVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2Nsa2RseWJ1ZjRzMTVfMiBjbGtidWZfMiAoLkEoY2xrX2QxKSwKKyAgICAuWChjbGtfZDIpLAorICAgIC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fY2xrZGx5YnVmNHMxNV8yIGNsa2J1Zl8zICguQShjbGtfZDIpLAorICAgIC5YKGNsa19kMyksCisgICAgLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzQgKC5BKGNsa19kMyksCisgICAgLlgoY2xrX2Q0KSwKKyAgICAuVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2Nsa2RseWJ1ZjRzMTVfMiBjbGtidWZfNSAoLkEoY2xrX2Q0KSwKKyAgICAuWChjbGtfZDUpLAorICAgIC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fY2xrZGx5YnVmNHMxNV8yIGNsa2J1Zl82ICguQShjbGtfZDUpLAorICAgIC5YKGNsa19kNiksCisgICAgLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzcgKC5BKGNsa19kNiksCisgICAgLlgoY2xrX2Q3KSwKKyAgICAuVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2Nsa2RseWJ1ZjRzMTVfMiBjbGtidWZfOCAoLkEoY2xrX2Q3KSwKKyAgICAuWChjbGtfZDgpLAorICAgIC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fY2xrZGx5YnVmNHMxNV8yIGNsa2J1Zl85ICguQShjbGtfZDgpLAorICAgIC5YKGNsa19kOSksCisgICAgLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19tdXgyXzEgdV9tdXhfbGV2ZWxfMDAgKC5BMChjbGtfaW4pLAorICAgIC5BMShjbGtfZDEpLAorICAgIC5TKHNlbFswXSksCisgICAgLlgoZDAwKSwKKyAgICAuVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX211eDJfMSB1X211eF9sZXZlbF8wMSAoLkEwKGNsa19kMiksCisgICAgLkExKGNsa19kMyksCisgICAgLlMoc2VsWzBdKSwKKyAgICAuWChkMDEpLAorICAgIC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fbXV4Ml8xIHVfbXV4X2xldmVsXzAyICguQTAoY2xrX2Q0KSwKKyAgICAuQTEoY2xrX2Q1KSwKKyAgICAuUyhzZWxbMF0pLAorICAgIC5YKGQwMiksCisgICAgLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19tdXgyXzEgdV9tdXhfbGV2ZWxfMDMgKC5BMChjbGtfZDYpLAorICAgIC5BMShjbGtfZDcpLAorICAgIC5TKHNlbFswXSksCisgICAgLlgoZDAzKSwKKyAgICAuVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX211eDJfMSB1X211eF9sZXZlbF8wNCAoLkEwKGNsa19kOCksCisgICAgLkExKGNsa19kOSksCisgICAgLlMoc2VsWzBdKSwKKyAgICAuWChkMDQpLAorICAgIC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fbXV4Ml8xIHVfbXV4X2xldmVsXzA1ICguQTAoY2xrX2QxMCksCisgICAgLkExKGNsa19kMTEpLAorICAgIC5TKHNlbFswXSksCisgICAgLlgoZDA1KSwKKyAgICAuVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX211eDJfMSB1X211eF9sZXZlbF8wNiAoLkEwKGNsa19kMTIpLAorICAgIC5BMShjbGtfZDEzKSwKKyAgICAuUyhzZWxbMF0pLAorICAgIC5YKGQwNiksCisgICAgLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19tdXgyXzEgdV9tdXhfbGV2ZWxfMDcgKC5BMChjbGtfZDE0KSwKKyAgICAuQTEoY2xrX2QxNSksCisgICAgLlMoc2VsWzBdKSwKKyAgICAuWChkMDcpLAorICAgIC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fbXV4Ml8xIHVfbXV4X2xldmVsXzEwICguQTAoZDAwKSwKKyAgICAuQTEoZDAxKSwKKyAgICAuUyhzZWxbMV0pLAorICAgIC5YKGQxMCksCisgICAgLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19tdXgyXzEgdV9tdXhfbGV2ZWxfMTEgKC5BMChkMDIpLAorICAgIC5BMShkMDMpLAorICAgIC5TKHNlbFsxXSksCisgICAgLlgoZDExKSwKKyAgICAuVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX211eDJfMSB1X211eF9sZXZlbF8xMiAoLkEwKGQwNCksCisgICAgLkExKGQwNSksCisgICAgLlMoc2VsWzFdKSwKKyAgICAuWChkMTIpLAorICAgIC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fbXV4Ml8xIHVfbXV4X2xldmVsXzEzICguQTAoZDA2KSwKKyAgICAuQTEoZDA3KSwKKyAgICAuUyhzZWxbMV0pLAorICAgIC5YKGQxMyksCisgICAgLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19tdXgyXzEgdV9tdXhfbGV2ZWxfMjAgKC5BMChkMTApLAorICAgIC5BMShkMTEpLAorICAgIC5TKHNlbFsyXSksCisgICAgLlgoZDIwKSwKKyAgICAuVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX211eDJfMSB1X211eF9sZXZlbF8yMSAoLkEwKGQxMiksCisgICAgLkExKGQxMyksCisgICAgLlMoc2VsWzJdKSwKKyAgICAuWChkMjEpLAorICAgIC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fbXV4Ml80IHVfbXV4X2xldmVsXzMwICguQTAoZDIwKSwKKyAgICAuQTEoZDIxKSwKKyAgICAuUyhzZWxbM10pLAorICAgIC5YKGNsa19vdXQpLAorICAgIC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMyBQSFlfMCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8xICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzMgUEhZXzIgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMyBQSFlfMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV80ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzMgUEhZXzUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMyBQSFlfNiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV83ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzMgUEhZXzggKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMyBQSFlfOSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8xMCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8xMSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8xMiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8xMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8xNCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8xNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8xNiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8xNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8xOCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8xOSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8yMCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8yMSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8yMiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8yMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8yNCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8yNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8yNiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8yNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8yOCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8yOSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8zMCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8zMSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8zMiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8zMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8zNCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8zNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8zNiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8zNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8zOCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8zOSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV80MCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV80MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV80MiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV80MyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV80NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV80NSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV80NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV80NyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV80OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV80OSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV81MCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV81MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV81MiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV81MyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV81NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV81NSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV81NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV81NyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV81OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV81OSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV82MCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV82MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV82MiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV82MyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV82NCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV82NSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV82NiAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV82NyAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV82OCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV82OSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV83MCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV83MSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV83MiAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV83MyAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV83NCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV83NSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV83NiAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV83NyAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV83OCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV83OSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV84MCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV84MSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV84MiAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV84MyAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV84NCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV84NSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV84NiAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV84NyAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV84OCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV84OSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV85MCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV85MSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV85MiAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV85MyAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV85NCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV85NSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV85NiAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV85NyAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV85OCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV85OSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xMDAgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTAxICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzEwMiAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xMDMgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTA0ICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzEwNSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xMDYgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTA3ICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzEwOCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xMDkgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTEwICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzExMSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xMTIgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTEzICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzExNCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xMTUgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTE2ICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzExNyAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xMTggKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTE5ICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzEyMCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xMjEgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTIyICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzEyMyAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xMjQgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTI1ICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzEyNiAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xMjcgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTI4ICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzEyOSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xMzAgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTMxICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzEzMiAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xMzMgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTM0ICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzEzNSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xMzYgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTM3ICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzEzOCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xMzkgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTQwICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzE0MSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xNDIgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTQzICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzE0NCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xNDUgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTQ2ICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzE0NyAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xNDggKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTQ5ICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzE1MCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xNTEgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTUyICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzE1MyAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xNTQgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTU1ICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzE1NiAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xNTcgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTU4ICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzE1OSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xNjAgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTYxICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzE2MiAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xNjMgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTY0ICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzE2NSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMF8zICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8wXzE1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQgRklMTEVSXzBfMjcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzBfMzIgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzBfNDQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNiBGSUxMRVJfMF81NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMF82MyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMF83NSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF82IEZJTExFUl8wXzg3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8wXzk0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8wXzEwNiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF82IEZJTExFUl8wXzExOCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMF8xMjUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzBfMTM3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzYgRklMTEVSXzBfMTQ5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8wXzE1NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMF8xNjggKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNiBGSUxMRVJfMF8xODAgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMyBGSUxMRVJfMF8xODcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzFfMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMV8xNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF80IEZJTExFUl8xXzI3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xXzMyICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xXzQ0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xXzU2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xXzY4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xXzgwICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xXzkzICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xXzEwNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMV8xMTcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzFfMTI5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xXzE0MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMV8xNTQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzFfMTY2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xXzE3OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMl8zICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yXzE1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yXzI3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yXzM5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzggRklMTEVSXzJfNTEgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZmlsbF8yIEZJTExFUl8yXzU5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yXzYyICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yXzc0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yXzg2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yXzk4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yXzExMCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMl8xMjMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzJfMTM1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yXzE0NyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMl8xNTkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzJfMTcxICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzYgRklMTEVSXzJfMTg0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8zXzMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzNfMTUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNCBGSUxMRVJfM18yNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfM18zMiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfM180NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfM181NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfM182OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfM184MCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfM185MyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfM18xMDUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzNfMTE3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8zXzEyOSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfM18xNDEgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzNfMTU0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8zXzE2NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfM18xNzggKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzRfMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF84IEZJTExFUl80XzE1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzMgRklMTEVSXzRfMjMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzRfMzUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzRfNDcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZmlsbF8yIEZJTExFUl80XzU5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl80XzYyICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl80Xzc0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl80Xzg2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl80Xzk4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl80XzExMCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfNF8xMjMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzRfMTM1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl80XzE0NyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfNF8xNTkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzRfMTcxICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzYgRklMTEVSXzRfMTg0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl81XzMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzVfMTUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNCBGSUxMRVJfNV8yNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfNV8zMiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfNV80NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfNV81NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfNV82OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfNV84MCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfNV85MyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfNV8xMTQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfOCBGSUxMRVJfNV8xMjYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMyBGSUxMRVJfNV8xMzQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNiBGSUxMRVJfNV8xNDYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZmlsbF8xIEZJTExFUl81XzE1MiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfNV8xNTQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzVfMTY2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl81XzE3OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfNl8zICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl82XzE1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl82XzI3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl82XzM5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzggRklMTEVSXzZfNTEgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZmlsbF8yIEZJTExFUl82XzU5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl82XzYyICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl82Xzc0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl82Xzg2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl82Xzk4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl82XzExMCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfNl8xMjMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzZfMTM1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl82XzE0NyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfNl8xNTkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzZfMTcxICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzYgRklMTEVSXzZfMTg0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl83XzMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzdfMTUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNCBGSUxMRVJfN18yNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfN18zMiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfN180NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfN181NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfN182OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfN184MCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfN18xMDIgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzdfMTE0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl83XzEyNiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfN18xMzggKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMyBGSUxMRVJfN18xNTAgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzdfMTU0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl83XzE2NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfN18xNzggKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzhfMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfOF8xNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfOF8yNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfOF8zOSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF84IEZJTExFUl84XzUxICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2ZpbGxfMiBGSUxMRVJfOF81OSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfOF82MiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfOF83NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfOF84NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfOF85OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfOF8xMTAgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzhfMTIzICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl84XzEzNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfOF8xNDcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzhfMTU5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl84XzE3MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF82IEZJTExFUl84XzE4NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfOV8zICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl85XzE1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQgRklMTEVSXzlfMjcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzlfMzIgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzlfNDQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfOCBGSUxMRVJfOV81NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIEZJTExFUl85XzY0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl85Xzc2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQgRklMTEVSXzlfODggKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzlfOTMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzlfMTA1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl85XzExNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfOV8xMjkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzlfMTQxICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl85XzE1NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF84IEZJTExFUl85XzE2NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF82IEZJTExFUl85XzE4MyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19maWxsXzEgRklMTEVSXzlfMTg5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xMF8zICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xMF8xNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTBfMjcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEwXzM5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzggRklMTEVSXzEwXzUxICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2ZpbGxfMiBGSUxMRVJfMTBfNTkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEwXzYyICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xMF83NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTBfODYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEwXzk4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xMF8xMTAgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEwXzEyMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTBfMTM1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xMF8xNDcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEwXzE1OSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTBfMTcxICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzYgRklMTEVSXzEwXzE4NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTFfMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIEZJTExFUl8xMV8xNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF80IEZJTExFUl8xMV8yNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTFfMzIgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzExXzQ0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xMV81NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTFfNjggKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzExXzgwICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xMV85MyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTFfMTA1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xMV8xMTcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzExXzEyOSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTFfMTQxICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xMV8xNTQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfOCBGSUxMRVJfMTFfMTY2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzMgRklMTEVSXzExXzE3NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF80IEZJTExFUl8xMV8xODYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEyXzMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEyXzE1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xMl8yNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTJfMzkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfOCBGSUxMRVJfMTJfNTEgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZmlsbF8yIEZJTExFUl8xMl81OSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTJfNjIgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEyXzc0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xMl84NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF84IEZJTExFUl8xMl85OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIEZJTExFUl8xMl8xMDYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNCBGSUxMRVJfMTJfMTE4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xMl8xMjMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEyXzEzNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTJfMTQ3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xMl8xNTkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEyXzE3MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF82IEZJTExFUl8xMl8xODQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEzXzMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEzXzE1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQgRklMTEVSXzEzXzI3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xM18zMiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTNfNDQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEzXzU2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xM182OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTNfODAgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEzXzkzICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xM18xMDUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEzXzExNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTNfMTI5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xM18xNDEgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEzXzE1NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTNfMTY2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xM18xNzggKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE0XzMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE0XzE1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xNF8yNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTRfMzkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfOCBGSUxMRVJfMTRfNTEgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZmlsbF8yIEZJTExFUl8xNF81OSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTRfNjIgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE0Xzc0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xNF84NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTRfOTggKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE0XzExMCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTRfMTIzICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2ZpbGxfMiBGSUxMRVJfMTRfMTM1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xNF8xNDYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNiBGSUxMRVJfMTRfMTU4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2ZpbGxfMSBGSUxMRVJfMTRfMTY0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzggRklMTEVSXzE0XzE3NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19maWxsXzEgRklMTEVSXzE0XzE4MiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF82IEZJTExFUl8xNF8xODQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE1XzMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE1XzE1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQgRklMTEVSXzE1XzI3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xNV8zMiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTVfNDQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE1XzU2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xNV82OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTVfODAgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE1XzkzICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xNV8xMDUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE1XzExNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTVfMTI5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xNV8xNDEgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE1XzE1NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTVfMTY2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xNV8xNzggKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE2XzMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE2XzE1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xNl8yNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTZfMzkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfOCBGSUxMRVJfMTZfNTEgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZmlsbF8yIEZJTExFUl8xNl81OSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTZfNjIgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE2Xzc0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xNl84NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTZfOTggKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE2XzExMCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTZfMTIzICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xNl8xMzUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE2XzE0NyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTZfMTU5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xNl8xNzEgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNiBGSUxMRVJfMTZfMTg0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xN18zICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xN18xNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF80IEZJTExFUl8xN18yNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTdfMzIgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE3XzQ0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQgRklMTEVSXzE3XzU2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2ZpbGxfMSBGSUxMRVJfMTdfNjAgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE3XzczICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzYgRklMTEVSXzE3Xzg1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2ZpbGxfMSBGSUxMRVJfMTdfOTEgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE3XzkzICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xN18xMDUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE3XzExNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTdfMTI5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xN18xNDEgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE3XzE1NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF84IEZJTExFUl8xN18xNjYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMyBGSUxMRVJfMTdfMTc0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQgRklMTEVSXzE3XzE4NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMThfMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMThfMTUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNCBGSUxMRVJfMThfMjcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE4XzQwICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzggRklMTEVSXzE4XzUyICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2ZpbGxfMSBGSUxMRVJfMThfNjAgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE4XzYyICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xOF83NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMThfODYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE4Xzk4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xOF8xMTAgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE4XzEyMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMThfMTM1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xOF8xNDcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE4XzE1OSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMThfMTcxICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzYgRklMTEVSXzE4XzE4NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTlfMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTlfMTUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNCBGSUxMRVJfMTlfMjcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE5XzMyICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xOV80NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTlfNTYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE5XzY4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xOV84MCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTlfOTMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE5XzEwNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTlfMTE3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xOV8xMjkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE5XzE0MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTlfMTU0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xOV8xNjYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE5XzE3OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjBfMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjBfMTUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIwXzI3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yMF8zOSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF84IEZJTExFUl8yMF81MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19maWxsXzIgRklMTEVSXzIwXzU5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yMF82MiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjBfNzQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIwXzg2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yMF85OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjBfMTEwICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yMF8xMjMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIwXzEzNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjBfMTQ3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yMF8xNTkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIwXzE3MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF82IEZJTExFUl8yMF8xODQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIxXzEyICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzYgRklMTEVSXzIxXzI0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2ZpbGxfMSBGSUxMRVJfMjFfMzAgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIxXzMyICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yMV80NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjFfNTYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIxXzY4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yMV84MCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjFfOTMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIxXzEwNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjFfMTE3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yMV8xMjkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIxXzE0MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjFfMTU0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQgRklMTEVSXzIxXzE2NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF84IEZJTExFUl8yMV8xNzkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMyBGSUxMRVJfMjFfMTg3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yMl8zICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yMl8xNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjJfMjcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIyXzM5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzggRklMTEVSXzIyXzUxICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2ZpbGxfMiBGSUxMRVJfMjJfNTkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIyXzcxICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yMl84MyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjJfOTUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIyXzEwNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIEZJTExFUl8yMl8xMTkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIyXzEzMiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjJfMTQ0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yMl8xNTYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIyXzE2OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIEZJTExFUl8yMl8xODAgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNiBGSUxMRVJfMjJfMTg0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yM18zICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yM18xNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF80IEZJTExFUl8yM18yNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjNfMzIgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIzXzQ0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yM181NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjNfNjggKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIzXzgwICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yM185MyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjNfMTA1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzYgRklMTEVSXzIzXzExNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19maWxsXzEgRklMTEVSXzIzXzEyMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjNfMTMzICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzggRklMTEVSXzIzXzE0NSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF80IEZJTExFUl8yM18xNTQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIzXzE2NyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF84IEZJTExFUl8yM18xNzkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMyBGSUxMRVJfMjNfMTg3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yNF8zICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yNF8xNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjRfMjcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI0XzM5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzggRklMTEVSXzI0XzUxICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2ZpbGxfMiBGSUxMRVJfMjRfNTkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI0XzYyICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yNF83NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjRfODYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI0Xzk4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yNF8xMTAgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI0XzEyMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjRfMTM1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yNF8xNDcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI0XzE1OSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjRfMTcxICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzYgRklMTEVSXzI0XzE4NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjVfMTIgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNiBGSUxMRVJfMjVfMjQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZmlsbF8xIEZJTExFUl8yNV8zMCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjVfMzIgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI1XzQ0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzMgRklMTEVSXzI1XzU2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yNV82OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjVfODAgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI1XzkzICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yNV8xMDUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI1XzExNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjVfMTI5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yNV8xNDEgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI1XzE1NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF84IEZJTExFUl8yNV8xNjYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMyBGSUxMRVJfMjVfMTc0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQgRklMTEVSXzI1XzE4NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjZfMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjZfMTUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI2XzI3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yNl8zOSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF84IEZJTExFUl8yNl81MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19maWxsXzIgRklMTEVSXzI2XzU5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yNl82MiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjZfNzQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI2Xzg2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yNl85OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjZfMTEwICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yNl8xMjMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI2XzEzNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjZfMTQ3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzggRklMTEVSXzI2XzE1OSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIEZJTExFUl8yNl8xNjcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNCBGSUxMRVJfMjZfMTc5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzYgRklMTEVSXzI2XzE4NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjdfMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjdfMTUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNCBGSUxMRVJfMjdfMjcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI3XzMyICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yN180NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjdfNTYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI3XzY4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yN184MCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjdfOTMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI3XzEwNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjdfMTE3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yN18xMjkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI3XzE0MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjdfMTU0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yN18xNjYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI3XzE3OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjhfMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjhfMTUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI4XzI3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yOF8zOSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF84IEZJTExFUl8yOF81MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19maWxsXzIgRklMTEVSXzI4XzU5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yOF82MiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjhfNzQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI4Xzg2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yOF85OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjhfMTEwICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yOF8xMjMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI4XzEzNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjhfMTQ3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yOF8xNTkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI4XzE3MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF82IEZJTExFUl8yOF8xODQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI5XzMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI5XzE1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQgRklMTEVSXzI5XzI3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yOV8zMiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjlfNDQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI5XzU2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzggRklMTEVSXzI5XzY4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzMgRklMTEVSXzI5Xzc2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQgRklMTEVSXzI5Xzg4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yOV85MyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjlfMTA1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yOV8xMTcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI5XzEyOSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjlfMTQxICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yOV8xNTQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNiBGSUxMRVJfMjlfMTY2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzggRklMTEVSXzI5XzE4MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19maWxsXzEgRklMTEVSXzI5XzE4OSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMzBfMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMzBfMTUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzMwXzI3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8zMF8zOSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF84IEZJTExFUl8zMF81MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19maWxsXzIgRklMTEVSXzMwXzU5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8zMF82MiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMzBfNzQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzMwXzg2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzggRklMTEVSXzMwXzk4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2ZpbGxfMiBGSUxMRVJfMzBfMTA2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQgRklMTEVSXzMwXzExNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19maWxsXzEgRklMTEVSXzMwXzEyMSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMzBfMTIzICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQgRklMTEVSXzMwXzEzNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19maWxsXzEgRklMTEVSXzMwXzEzOSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMzBfMTQ5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzggRklMTEVSXzMwXzE2MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19maWxsXzEgRklMTEVSXzMwXzE2OSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF80IEZJTExFUl8zMF8xNzkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNiBGSUxMRVJfMzBfMTg0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8zMV8zICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8zMV8xNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF80IEZJTExFUl8zMV8yNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMzFfMzIgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzMxXzQ0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzYgRklMTEVSXzMxXzU2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8zMV82MyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMzFfNzUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNiBGSUxMRVJfMzFfODcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzMxXzk0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8zMV8xMDYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNiBGSUxMRVJfMzFfMTE4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8zMV8xMjUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZmlsbF8xIEZJTExFUl8zMV8xMzcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfOCBGSUxMRVJfMzFfMTQ3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8zMV8xNTYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzMxXzE2OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF82IEZJTExFUl8zMV8xODAgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMyBGSUxMRVJfMzFfMTg3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvY2xrX3NrZXdfYWRqdXN0L3N5bnRoL01ha2VmaWxlIGIvdmVyaWxvZy9ydGwvY2xrX3NrZXdfYWRqdXN0L3N5bnRoL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YWUxZGYKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9jbGtfc2tld19hZGp1c3Qvc3ludGgvTWFrZWZpbGUKQEAgLTAsMCArMSw0OSBAQAorIyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyMgLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEKKyMgLy8gCisjIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIC8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAvLworIyAvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAvLworIyAvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIC8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIC8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorIyAvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKyMgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTWFrZWZpbGUgZm9yIFN5bnRoZXNpcworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFBhdGhzCitleHBvcnQgUk9PVF9ESVIgOj0gJChzaGVsbCBwd2QpCitleHBvcnQgUkVQT1JUX0RJUiAgOj0gJChST09UX0RJUikvcmVwb3J0cworZXhwb3J0IE5FVExJU1RfRElSICA6PSAkKFJPT1RfRElSKS9uZXRsaXN0CitleHBvcnQgVE1QX0RJUiAgOj0gJChST09UX0RJUikvdG1wCisKKworIyBUYXJnZXRzCisuUEhPTlk6IGNsZWFuIGNyZWF0ZSBzeW50aAorCitkZWZhdWx0OiBjbGVhbiBjcmVhdGUgc3ludGgKKworc3ludGg6IGNsZWFuIGNyZWF0ZSAKKwl5b3N5cyAtZyAtYyBzeW50aC50Y2wgLWwgc3ludGgubG9nCisKK2NyZWF0ZToKKwlta2RpciAtcCAuL3RtcC9zeW50aGVzaXM7IAorCW1rZGlyIC1wIC4vcmVwb3J0czsgCisJbWtkaXIgLXAgLi9uZXRsaXN0OworCSQoT1BFTkxBTkVfUk9PVCkvc2NyaXB0cy9saWJ0cmltLnBsICQoUERLX1JPT1QpL3NreTEzMEEvbGlicy5yZWYvc2t5MTMwX2ZkX3NjX2hkL2xpYi9za3kxMzBfZmRfc2NfaGRfX3R0XzAyNUNfMXY4MC5saWIgJChQREtfUk9PVCkvc2t5MTMwQS9saWJzLnRlY2gvb3BlbmxhbmUvc2t5MTMwX2ZkX3NjX2hkL25vX3N5bnRoLmNlbGxzID4gLi90bXAvdHJpbW1lZC5saWIKKworCisKK2NsZWFuOgorCSQoUk0pIC1SIHN5bnRoLmxvZworCSQoUk0pIC1SICQoUkVQT1JUX0RJUikKKwkkKFJNKSAtUiAkKE5FVExJU1RfRElSKQorCSQoUk0pIC1SICQoVE1QX0RJUikKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL2Nsa19za2V3X2FkanVzdC9zeW50aC9zeW50aC50Y2wgYi92ZXJpbG9nL3J0bC9jbGtfc2tld19hZGp1c3Qvc3ludGgvc3ludGgudGNsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI3YWRlYTYKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9jbGtfc2tld19hZGp1c3Qvc3ludGgvc3ludGgudGNsCkBAIC0wLDAgKzEsMzg1IEBACisjIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworIyAvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorIyAvLyAKKyMgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIC8vCisjIC8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIC8vCisjIC8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisjIC8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorIyAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworIyBpbnB1dHMgZXhwZWN0ZWQgYXMgZW52IHZhcnMKKyNzZXQgb3B0ICQ6OmVudihTWU5USF9PUFQpCisjIyMjIyMjIyMjIyBjb25maWcudGNsICMjIyMjIyMjIyMjIyMjIyMjIworIyBVc2VyIGNvbmZpZworCisjIFVzZXIgY29uZmlnCitzZXQgOjplbnYoREVTSUdOX0RJUikgLi4vCisKK3NldCA6OmVudihQUk9KX0RJUikgLi4vLi4vLi4vLi4vCisKKyMgVXNlciBjb25maWcKK3NldCA6OmVudihERVNJR05fTkFNRSkgY2xrX211eAorCisjIENoYW5nZSBpZiBuZWVkZWQKK3NldCA6OmVudihWRVJJTE9HX0ZJTEVTKSBbZ2xvYiAgXAorCS4uL3NyYy9jbGtfbXV4LnYgIF0KKworCitzZXQgOjplbnYoU1lOVEhfREVGSU5FUykgW2xpc3QgWU9TWVMgXQorCisKK3NldCA6OmVudihMSUJfU1lOVEgpICAuL3RtcC90cmltbWVkLmxpYgorCisKKyMgRmlsbCB0aGlzCitzZXQgOjplbnYoQ0xPQ0tfUEVSSU9EKSAiMTAiCisjc2V0IDo6ZW52KENMT0NLX1BPUlQpICJtY2xrIgorc2V0IDo6ZW52KENMT0NLX1RSRUVfU1lOVEgpIDAKKworc2V0IDo6ZW52KFJVTl9TSU1QTEVfQ1RTKSAwCitzZXQgOjplbnYoU1lOVEhfQlVGRkVSSU5HKSAwCitzZXQgOjplbnYoU1lOVEhfU0laSU5HKSAwCisKK3NldCA6OmVudihTWU5USF9EUklWSU5HX0NFTEwpICJza3kxMzBfZmRfc2NfaGRfX2ludl84Igorc2V0IDo6ZW52KFNZTlRIX0NBUF9MT0FEKSAiMTcuNjUiCitzZXQgOjplbnYoU1lOVEhfTUFYX1RSQU4pICJbZXhwciB7MC4xKjEwLjB9XSIKKworc2V0IDo6ZW52KFNZTlRIX01BWF9GQU5PVVQpIDYKK3NldCA6OmVudihGUF9DT1JFX1VUSUwpIDUwCitzZXQgOjplbnYoUExfVEFSR0VUX0RFTlNJVFkpIFsgZXhwciAoJDo6ZW52KEZQX0NPUkVfVVRJTCkrNSkgLyAxMDAuMCBdCitzZXQgOjplbnYoQ0VMTF9QQUQpIDQKKworc2V0IDo6ZW52KFNZTlRIX05PX0ZMQVQpICIwIgorCisKK3NldCA6OmVudihTWU5USF9TVFJBVEVHWSkgIkFSRUEgMCIKK3NldCA6OmVudihTWU5USF9USUVMT19QT1JUKSAic2t5MTMwX2ZkX3NjX2hkX19jb25iXzEgTE8iCitzZXQgOjplbnYoU1lOVEhfVElFSElfUE9SVCkgInNreTEzMF9mZF9zY19oZF9fY29uYl8xIEhJIgorc2V0IDo6ZW52KFNZTlRIX01JTl9CVUZfUE9SVCkgInNreTEzMF9mZF9zY19oZF9fYnVmXzIgQSBYIgorCisKKyNzZXQgOjplbnYoQ0xPQ0tfTkVUKSAkOjplbnYoQ0xPQ0tfUE9SVCkKKworCisKK3NldCA6OmVudih5b3N5c190bXBfZmlsZV90YWcpICIuL3RtcC8iCitzZXQgOjplbnYoVE1QX0RJUikgIi4vdG1wLyIKK3NldCA6OmVudih5b3N5c19uZXRsaXN0X2RpcikgIi4vbmV0bGlzdCIKK3NldCA6OmVudih5b3N5c19yZXBvcnRfZmlsZV90YWcpICIuL3JlcG9ydHMveW9zeXMiCitzZXQgOjplbnYoeW9zeXNfcmVzdWx0X2ZpbGVfdGFnKSAiLi9yZXBvcnRzL3lvc3lzLnN5bnRoZXNpcyIKKworc2V0IDo6ZW52KFNBVkVfTkVUTElTVCkgJDo6ZW52KHlvc3lzX25ldGxpc3RfZGlyKS8kOjplbnYoREVTSUdOX05BTUUpLmd2CisKKworCisjIyMjIyMjIyMjIyBFbmQgb2YgY29uZmlnLnRjbAorc2V0IGJ1ZmZlcmluZyAkOjplbnYoU1lOVEhfQlVGRkVSSU5HKQorc2V0IHNpemluZyAkOjplbnYoU1lOVEhfU0laSU5HKQorCit5b3N5cyAtaW1wb3J0CisKK3NldCB2dG9wICQ6OmVudihERVNJR05fTkFNRSkKKyNzZXQgc2RjX2ZpbGUgJDo6ZW52KFNEQ19GSUxFKQorc2V0IHNjbGliICQ6OmVudihMSUJfU1lOVEgpCisKK2lmIHsgW2luZm8gZXhpc3RzIDo6ZW52KFNZTlRIX0RFRklORVMpIF0gfSB7CisJZm9yZWFjaCBkZWZpbmUgJDo6ZW52KFNZTlRIX0RFRklORVMpIHsKKwkJbG9nICJEZWZpbmluZyAkZGVmaW5lIgorCQl2ZXJpbG9nX2RlZmluZXMgLUQkZGVmaW5lCisJfQorfQorCitzZXQgdklkaXJzQXJncyAiIgoraWYge1tpbmZvIGV4aXN0IDo6ZW52KFZFUklMT0dfSU5DTFVERV9ESVJTKV19IHsKKwlmb3JlYWNoIGRpciAkOjplbnYoVkVSSUxPR19JTkNMVURFX0RJUlMpIHsKKwkJbG9nICJBZGRpbmcgaW5jbHVkZSBmaWxlIC1JJGRpciAiCisJCWxhcHBlbmQgdklkaXJzQXJncyAiLUkkZGlyIgorCX0KKwlzZXQgdklkaXJzQXJncyBbam9pbiAkdklkaXJzQXJnc10KK30KKworCisKK2lmIHsgW2luZm8gZXhpc3RzIDo6ZW52KEVYVFJBX0xJQlMpIF0gfSB7CisJZm9yZWFjaCBsaWIgJDo6ZW52KEVYVFJBX0xJQlMpIHsKKwkJcmVhZF9saWJlcnR5IHsqfSR2SWRpcnNBcmdzIC1saWIgLWlnbm9yZV9taXNzX2RpciAtc2V0YXR0ciBibGFja2JveCAkbGliCisJfQorfQorCisKKworIyBucyBleHBlY3RlZCAoaW4gc2RjIGFzIHdlbGwpCitzZXQgY2xvY2tfcGVyaW9kIFtleHByIHskOjplbnYoQ0xPQ0tfUEVSSU9EKSoxMDAwfV0KKworc2V0IGRyaXZlciAgJDo6ZW52KFNZTlRIX0RSSVZJTkdfQ0VMTCkKK3NldCBjbG9hZCAgICQ6OmVudihTWU5USF9DQVBfTE9BRCkKKyMgaW5wdXQgcGluIGNhcCBvZiBJTl8zVlg4CitzZXQgbWF4X0ZPICQ6OmVudihTWU5USF9NQVhfRkFOT1VUKQoraWYgeyFbaW5mbyBleGlzdCA6OmVudihTWU5USF9NQVhfVFJBTildfSB7CisJc2V0IDo6ZW52KFNZTlRIX01BWF9UUkFOKSBbZXhwciB7MC4xKiRjbG9ja19wZXJpb2R9XQorfSBlbHNlIHsKKwlzZXQgOjplbnYoU1lOVEhfTUFYX1RSQU4pIFtleHByIHskOjplbnYoU1lOVEhfTUFYX1RSQU4pICogMTAwMH1dCit9CitzZXQgbWF4X1RyYW4gJDo6ZW52KFNZTlRIX01BWF9UUkFOKQorCisKKyMgTWFwcGluZyBwYXJhbWV0ZXJzCitzZXQgQV9mYWN0b3IgIDAuMDAKK3NldCBCX2ZhY3RvciAgMC44OAorc2V0IEZfZmFjdG9yICAwLjAwCisKKyMgRG9uJ3QgY2hhbmdlIHRoZXNlIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKK3NldCBzdGF0X2V4dCAgICAiLnN0YXQucnB0Igorc2V0IGNoa19leHQgICAgIi5jaGsucnB0Igorc2V0IGdsX2V4dCAgICAgICIuZ2wudiIKK3NldCBjb25zdHJfZXh0ICAiLiRjbG9ja19wZXJpb2QuY29uc3RyIgorc2V0IHRpbWluZ19leHQgICIudGltaW5nLnR4dCIKK3NldCBhYmNfZXh0ICAgICAiLmFiYyIKKworCisjIGdldCBvbGQgc2RjLCBhZGQgbGlicmFyeSBzcGVjaWZpYyBzdHVmZiBmb3IgYWJjIHNjcmlwdHMKK3NldCBzZGNfZmlsZSAkOjplbnYoeW9zeXNfdG1wX2ZpbGVfdGFnKS5zZGMKK3NldCBvdXRmaWxlIFtvcGVuICR7c2RjX2ZpbGV9IHddCisjcHV0cyAkb3V0ZmlsZSAkc2RjX2RhdGEKK3B1dHMgJG91dGZpbGUgInNldF9kcml2aW5nX2NlbGwgJHtkcml2ZXJ9IgorcHV0cyAkb3V0ZmlsZSAic2V0X2xvYWQgJHtjbG9hZH0iCitjbG9zZSAkb3V0ZmlsZQorCisKKyMgQUJDIFNjcmlwcworc2V0IGFiY19yc19LICAgICJyZXN1YiwtSywiCitzZXQgYWJjX3JzICAgICAgInJlc3ViIgorc2V0IGFiY19yc3ogICAgICJyZXN1YiwteiIKK3NldCBhYmNfcndfSyAgICAicmV3cml0ZSwtSywiCitzZXQgYWJjX3J3ICAgICAgInJld3JpdGUiCitzZXQgYWJjX3J3eiAgICAgInJld3JpdGUsLXoiCitzZXQgYWJjX3JmICAgICAgInJlZmFjdG9yIgorc2V0IGFiY19yZnogICAgICJyZWZhY3RvciwteiIKK3NldCBhYmNfYiAgICAgICAiYmFsYW5jZSIKKworc2V0IGFiY19yZXN5bjIgICAgICAgICIke2FiY19ifTsgJHthYmNfcnd9OyAke2FiY19yZn07ICR7YWJjX2J9OyAke2FiY19yd307ICR7YWJjX3J3en07ICR7YWJjX2J9OyAke2FiY19yZnp9OyAke2FiY19yd3p9OyAke2FiY19ifSIKK3NldCBhYmNfc2hhcmUgICAgICAgICAic3RyYXNoOyBtdWx0aSwtbTsgJHthYmNfcmVzeW4yfSIKK3NldCBhYmNfcmVzeW4yYSAgICAgICAiJHthYmNfYn07JHthYmNfcnd9OyR7YWJjX2J9OyR7YWJjX3J3fTske2FiY19yd3p9OyR7YWJjX2J9OyR7YWJjX3J3en07JHthYmNfYn0iCitzZXQgYWJjX3Jlc3luMyAgICAgICAgImJhbGFuY2U7cmVzdWI7cmVzdWIsLUssNjtiYWxhbmNlO3Jlc3ViLC16O3Jlc3ViLC16LC1LLDY7YmFsYW5jZTtyZXN1YiwteiwtSyw1O2JhbGFuY2UiCitzZXQgYWJjX3Jlc3luMnJzICAgICAgIiR7YWJjX2J9OyR7YWJjX3JzX0t9LDY7JHthYmNfcnd9OyR7YWJjX3JzX0t9LDYsLU4sMjske2FiY19yZn07JHthYmNfcnNfS30sODske2FiY19yd307JHthYmNfcnNfS30sMTA7JHthYmNfcnd6fTske2FiY19yc19LfSwxMCwtTiwyOyR7YWJjX2J9LCR7YWJjX3JzX0t9LDEyOyR7YWJjX3Jmen07JHthYmNfcnNfS30sMTIsLU4sMjske2FiY19yd3p9OyR7YWJjX2J9IgorCitzZXQgYWJjX2Nob2ljZSAgICAgICAgImZyYWlnX3N0b3JlOyAke2FiY19yZXN5bjJ9OyBmcmFpZ19zdG9yZTsgJHthYmNfcmVzeW4yfTsgZnJhaWdfc3RvcmU7IGZyYWlnX3Jlc3RvcmUiCitzZXQgYWJjX2Nob2ljZTIgICAgICAiZnJhaWdfc3RvcmU7IGJhbGFuY2U7IGZyYWlnX3N0b3JlOyAke2FiY19yZXN5bjJ9OyBmcmFpZ19zdG9yZTsgJHthYmNfcmVzeW4yfTsgZnJhaWdfc3RvcmU7ICR7YWJjX3Jlc3luMn07IGZyYWlnX3N0b3JlOyBmcmFpZ19yZXN0b3JlIgorCitzZXQgYWJjX21hcF9vbGRfY250CQkJIm1hcCwtcCwtYSwtQiwwLjIsLUEsMC45LC1NLDAiCitzZXQgYWJjX21hcF9vbGRfZGx5ICAgICAgICAgIm1hcCwtcCwtQiwwLjIsLUEsMC45LC1NLDAiCitzZXQgYWJjX3JldGltZV9hcmVhICAgICAgICAgInJldGltZSwtRCx7RH0sLU0sNSIKK3NldCBhYmNfcmV0aW1lX2RseSAgICAgICAgICAicmV0aW1lLC1ELHtEfSwtTSw2Igorc2V0IGFiY19tYXBfbmV3X2FyZWEgICAgICAgICJhbWFwLC1tLC1RLDAuMSwtRiwyMCwtQSwyMCwtQyw1MDAwIgorCitzZXQgYWJjX2FyZWFfcmVjb3ZlcnlfMSAgICAgICAiJHthYmNfY2hvaWNlfTsgbWFwOyIKK3NldCBhYmNfYXJlYV9yZWNvdmVyeV8yICAgICAgICIke2FiY19jaG9pY2UyfTsgbWFwOyIKKworc2V0IG1hcF9vbGRfY250CQkJICAgICJtYXAsLXAsLWEsLUIsMC4yLC1BLDAuOSwtTSwwIgorc2V0IG1hcF9vbGRfZGx5CQkJICAgICJtYXAsLXAsLUIsMC4yLC1BLDAuOSwtTSwwIgorc2V0IGFiY19yZXRpbWVfYXJlYSAgIAkicmV0aW1lLC1ELHtEfSwtTSw1Igorc2V0IGFiY19yZXRpbWVfZGx5ICAgIAkicmV0aW1lLC1ELHtEfSwtTSw2Igorc2V0IGFiY19tYXBfbmV3X2FyZWEgIAkiYW1hcCwtbSwtUSwwLjEsLUYsMjAsLUEsMjAsLUMsNTAwMCIKKworaWYgeyRidWZmZXJpbmc9PTF9IHsKKwlzZXQgYWJjX2ZpbmVfdHVuZQkJImJ1ZmZlciwtTiwke21heF9GT30sLVMsJHttYXhfVHJhbn07dXBzaXplLHtEfTtkbnNpemUse0R9IgorfSBlbHNlaWYgeyRzaXppbmd9IHsKKwlzZXQgYWJjX2ZpbmVfdHVuZSAgICAgICAidXBzaXplLHtEfTtkbnNpemUse0R9IgorfSBlbHNlIHsKKwlzZXQgYWJjX2ZpbmVfdHVuZSAgICAgICAiIgorfQorCisKK3NldCBkZWxheV9zY3JpcHRzIFtsaXN0IFwKKwkiK3JlYWRfY29uc3RyLCR7c2RjX2ZpbGV9O2Z4O21mcztzdHJhc2g7cmVmYWN0b3I7JHthYmNfcmVzeW4yfTske2FiY19yZXRpbWVfZGx5fTsgc2NsZWFudXA7JHthYmNfbWFwX29sZF9kbHl9O3JldGltZSwtRCx7RH07JHthYmNfZmluZV90dW5lfTtzdGltZSwtcDtwcmludF9zdGF0cyAtbSIgXAorCVwKKwkiK3JlYWRfY29uc3RyLCR7c2RjX2ZpbGV9O2Z4O21mcztzdHJhc2g7cmVmYWN0b3I7JHthYmNfcmVzeW4yfTske2FiY19yZXRpbWVfZGx5fTsgc2NsZWFudXA7JHthYmNfY2hvaWNlMn07JHthYmNfbWFwX29sZF9kbHl9OyR7YWJjX2FyZWFfcmVjb3ZlcnlfMn07IHJldGltZSwtRCx7RH07JHthYmNfZmluZV90dW5lfTtzdGltZSwtcDtwcmludF9zdGF0cyAtbSIgXAorCVwKKwkiK3JlYWRfY29uc3RyLCR7c2RjX2ZpbGV9O2Z4O21mcztzdHJhc2g7cmVmYWN0b3I7JHthYmNfcmVzeW4yfTske2FiY19yZXRpbWVfZGx5fTsgc2NsZWFudXA7JHthYmNfY2hvaWNlfTske2FiY19tYXBfb2xkX2RseX07JHthYmNfYXJlYV9yZWNvdmVyeV8xfTsgcmV0aW1lLC1ELHtEfTske2FiY19maW5lX3R1bmV9O3N0aW1lLC1wO3ByaW50X3N0YXRzIC1tIiBcCisJXAorCSIrcmVhZF9jb25zdHIsJHtzZGNfZmlsZX07Zng7bWZzO3N0cmFzaDtyZWZhY3Rvcjske2FiY19yZXN5bjJ9OyR7YWJjX3JldGltZV9hcmVhfTtzY2xlYW51cDske2FiY19jaG9pY2UyfTske2FiY19tYXBfbmV3X2FyZWF9OyR7YWJjX2Nob2ljZTJ9OyR7YWJjX21hcF9vbGRfZGx5fTtyZXRpbWUsLUQse0R9OyR7YWJjX2ZpbmVfdHVuZX07c3RpbWUsLXA7cHJpbnRfc3RhdHMgLW0iIFwKKwldCisKK3NldCBhcmVhX3NjcmlwdHMgW2xpc3QgXAorCSIrcmVhZF9jb25zdHIsJHtzZGNfZmlsZX07Zng7bWZzO3N0cmFzaDtyZWZhY3Rvcjske2FiY19yZXN5bjJ9OyR7YWJjX3JldGltZV9hcmVhfTtzY2xlYW51cDske2FiY19jaG9pY2UyfTske2FiY19tYXBfbmV3X2FyZWF9O3JldGltZSwtRCx7RH07JHthYmNfZmluZV90dW5lfTtzdGltZSwtcDtwcmludF9zdGF0cyAtbSIgXAorCVwKKwkiK3JlYWRfY29uc3RyLCR7c2RjX2ZpbGV9O2Z4O21mcztzdHJhc2g7cmVmYWN0b3I7JHthYmNfcmVzeW4yfTske2FiY19yZXRpbWVfYXJlYX07c2NsZWFudXA7JHthYmNfY2hvaWNlMn07JHthYmNfbWFwX25ld19hcmVhfTske2FiY19jaG9pY2UyfTske2FiY19tYXBfbmV3X2FyZWF9O3JldGltZSwtRCx7RH07JHthYmNfZmluZV90dW5lfTtzdGltZSwtcDtwcmludF9zdGF0cyAtbSIgXAorCVwKKwkiK3JlYWRfY29uc3RyLCR7c2RjX2ZpbGV9O2Z4O21mcztzdHJhc2g7cmVmYWN0b3I7JHthYmNfY2hvaWNlMn07JHthYmNfcmV0aW1lX2FyZWF9O3NjbGVhbnVwOyR7YWJjX2Nob2ljZTJ9OyR7YWJjX21hcF9uZXdfYXJlYX07JHthYmNfY2hvaWNlMn07JHthYmNfbWFwX25ld19hcmVhfTtyZXRpbWUsLUQse0R9OyR7YWJjX2ZpbmVfdHVuZX07c3RpbWUsLXA7cHJpbnRfc3RhdHMgLW0iIFwKKwldCisKK3NldCBhbGxfc2NyaXB0cyBbbGlzdCB7Kn0kZGVsYXlfc2NyaXB0cyB7Kn0kYXJlYV9zY3JpcHRzXQorCitzZXQgc3RyYXRlZ3lfcGFydHMgW3NwbGl0ICQ6OmVudihTWU5USF9TVFJBVEVHWSldCisKK3Byb2Mgc3ludGhfc3RyYXRlZ3lfZm9ybWF0X2VyciB7IH0geworCXVwdmFyIGFyZWFfc2NyaXB0cyBhcmVhX3NjcmlwdHMKKwl1cHZhciBkZWxheV9zY3JpcHRzIGRlbGF5X3NjcmlwdHMKKwlsb2cgLXN0ZGVyciAiXFtFUlJPUl0gTWlzZm9ybWF0dGVkIFNZTlRIX1NUUkFURUdZIChcIiQ6OmVudihTWU5USF9TVFJBVEVHWSlcIikuIgorCWxvZyAtc3RkZXJyICJcW0VSUk9SXSBDb3JyZWN0IGZvcm1hdCBpcyBcIkRFTEFZfEFSRUEgMC1bZXhwciBbbGxlbmd0aCAkZGVsYXlfc2NyaXB0c10tMV18MC1bZXhwciBbbGxlbmd0aCAkYXJlYV9zY3JpcHRzXS0xXVwiLiIKKwlleGl0IDEKK30KKworaWYgeyBbbGxlbmd0aCAkc3RyYXRlZ3lfcGFydHNdICE9IDIgfSB7CisJc3ludGhfc3RyYXRlZ3lfZm9ybWF0X2VycgorfQorCitzZXQgc3RyYXRlZ3lfdHlwZSBbbGluZGV4ICRzdHJhdGVneV9wYXJ0cyAwXQorc2V0IHN0cmF0ZWd5X3R5cGVfaWR4IFtsaW5kZXggJHN0cmF0ZWd5X3BhcnRzIDFdCisKK2lmIHsgJHN0cmF0ZWd5X3R5cGUgIT0gIkFSRUEiICYmICRzdHJhdGVneV90eXBlICE9ICJERUxBWSIgfSB7CisJbG9nIC1zdGRlcnIgIlxbRVJST1JdIEFSRUF8REVMQVkgdG9rZW5zIG5vdCBmb3VuZC4gKCRzdHJhdGVneV90eXBlKSIKKwlzeW50aF9zdHJhdGVneV9mb3JtYXRfZXJyCit9CisKK2lmIHsgJHN0cmF0ZWd5X3R5cGUgPT0gIkRFTEFZIiAmJiAkc3RyYXRlZ3lfdHlwZV9pZHggPj0gW2xsZW5ndGggJGRlbGF5X3NjcmlwdHNdIH0geworCWxvZyAtc3RkZXJyICJcW0VSUk9SXSBzdHJhdGVneSBpbmRleCAoJHN0cmF0ZWd5X3R5cGVfaWR4KSBpcyB0b28gaGlnaC4iCisJc3ludGhfc3RyYXRlZ3lfZm9ybWF0X2VycgorfQorCitpZiB7ICRzdHJhdGVneV90eXBlID09ICJBUkVBIiAmJiAkc3RyYXRlZ3lfdHlwZV9pZHggPj0gW2xsZW5ndGggJGFyZWFfc2NyaXB0c10gfSB7CisJbG9nIC1zdGRlcnIgIlxbRVJST1JdIHN0cmF0ZWd5IGluZGV4ICgkc3RyYXRlZ3lfdHlwZV9pZHgpIGlzIHRvbyBoaWdoLiIKKwlzeW50aF9zdHJhdGVneV9mb3JtYXRfZXJyCit9CisKK2lmIHsgJHN0cmF0ZWd5X3R5cGUgPT0gIkRFTEFZIiB9IHsKKwlzZXQgc3RyYXRlZ3kgJHN0cmF0ZWd5X3R5cGVfaWR4Cit9IGVsc2UgeworCXNldCBzdHJhdGVneSBbZXhwciB7W2xsZW5ndGggJGRlbGF5X3NjcmlwdHNdKyRzdHJhdGVneV90eXBlX2lkeH1dCit9CisKKworZm9yIHsgc2V0IGkgMCB9IHsgJGkgPCBbbGxlbmd0aCAkOjplbnYoVkVSSUxPR19GSUxFUyldIH0geyBpbmNyIGkgfSB7CisJcmVhZF92ZXJpbG9nIC1zdiB7Kn0kdklkaXJzQXJncyBbbGluZGV4ICQ6OmVudihWRVJJTE9HX0ZJTEVTKSAkaV0KK30KKworaWYgeyBbaW5mbyBleGlzdHMgOjplbnYoVkVSSUxPR19GSUxFU19CTEFDS0JPWCldIH0geworCWZvcmVhY2ggdmVyaWxvZ19maWxlICQ6OmVudihWRVJJTE9HX0ZJTEVTX0JMQUNLQk9YKSB7CisJCXJlYWRfdmVyaWxvZyAtc3Ygeyp9JHZJZGlyc0FyZ3MgLWxpYiAkdmVyaWxvZ19maWxlCisJfQorfQorc2VsZWN0IC1tb2R1bGUgJHZ0b3AKK3Nob3cgLWZvcm1hdCBkb3QgLXByZWZpeCAkOjplbnYoVE1QX0RJUikvc3ludGhlc2lzL2hpZXJhcmNoeQorc2VsZWN0IC1jbGVhcgorCitoaWVyYXJjaHkgLWNoZWNrIC10b3AgJHZ0b3AKKworIyBJbmZlciB0cmktc3RhdGUgYnVmZmVycy4KK3NldCB0YnVmX21hcCBmYWxzZQoraWYgeyBbaW5mbyBleGlzdHMgOjplbnYoVFJJU1RBVEVfQlVGRkVSX01BUCldIH0geworICAgICAgICBpZiB7IFtmaWxlIGV4aXN0cyAkOjplbnYoVFJJU1RBVEVfQlVGRkVSX01BUCldIH0geworICAgICAgICAgICAgICAgIHNldCB0YnVmX21hcCB0cnVlCisgICAgICAgICAgICAgICAgdHJpYnVmCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbG9nICJXQVJOSU5HOiBUUklTVEFURV9CVUZGRVJfTUFQIGlzIGRlZmluZWQgYnV0IGNvdWxkIG5vdCBiZSBmb3VuZDogJDo6ZW52KFRSSVNUQVRFX0JVRkZFUl9NQVApIgorICAgICAgICB9Cit9CisKK2lmIHsgJDo6ZW52KFNZTlRIX05PX0ZMQVQpIH0geworCXN5bnRoIC10b3AgJHZ0b3AKK30gZWxzZSB7CisJc3ludGggLXRvcCAkdnRvcCAtZmxhdHRlbgorfQorCitzaGFyZSAtYWdncmVzc2l2ZQorb3B0CitvcHRfY2xlYW4gLXB1cmdlCisKK3RlZSAtbyAiJDo6ZW52KHlvc3lzX3JlcG9ydF9maWxlX3RhZylfcHJlLnN0YXQiIHN0YXQKKworIyBNYXAgdHJpLXN0YXRlIGJ1ZmZlcnMuCitpZiB7ICR0YnVmX21hcCB9IHsKKyAgICAgICAgbG9nIHttYXBwaW5nIHRidWZ9CisgICAgICAgIHRlY2htYXAgLW1hcCAkOjplbnYoVFJJU1RBVEVfQlVGRkVSX01BUCkKKyAgICAgICAgc2ltcGxlbWFwCit9CisKKyMgaGFuZGxlIHRlY2hub2xvZ3kgbWFwcGluZyBvZiA0LU1VWCwgYW5kIHRlbGwgWW9zeXMgdG8gaW5mZXIgNC1tdXhlcworaWYgeyBbaW5mbyBleGlzdHMgOjplbnYoU1lOVEhfTVVYNF9NQVApXSAmJiBbZmlsZSBleGlzdHMgJDo6ZW52KFNZTlRIX01VWDRfTUFQKV0gfSB7CisgIG11eGNvdmVyIC1tdXg0IAorICB0ZWNobWFwIC1tYXAgJDo6ZW52KFNZTlRIX01VWDRfTUFQKQorICBzaW1wbGVtYXAKK30KKworIyBoYW5kbGUgdGVjaG5vbG9neSBtYXBwaW5nIG9mIDItTVVYCitpZiB7IFtpbmZvIGV4aXN0cyA6OmVudihTWU5USF9NVVhfTUFQKV0gJiYgW2ZpbGUgZXhpc3RzICQ6OmVudihTWU5USF9NVVhfTUFQKV0gfSB7CisgIHRlY2htYXAgLW1hcCAkOjplbnYoU1lOVEhfTVVYX01BUCkKKyAgc2ltcGxlbWFwCit9CisKKyMgaGFuZGxlIHRlY2hub2xvZ3kgbWFwcGluZyBvZiBsYXRjaGVzCitpZiB7IFtpbmZvIGV4aXN0cyA6OmVudihTWU5USF9MQVRDSF9NQVApXSAmJiBbZmlsZSBleGlzdHMgJDo6ZW52KFNZTlRIX0xBVENIX01BUCldIH0geworCXRlY2htYXAgLW1hcCAkOjplbnYoU1lOVEhfTEFUQ0hfTUFQKQorCXNpbXBsZW1hcAorfQorCitkZmZsaWJtYXAgLWxpYmVydHkgJHNjbGliCit0ZWUgLW8gIiQ6OmVudih5b3N5c19yZXBvcnRfZmlsZV90YWcpX2RmZi5zdGF0IiBzdGF0CisKK2lmIHsgW2luZm8gZXhpc3RzIDo6ZW52KFNZTlRIX0VYUExPUkUpXSAmJiAkOjplbnYoU1lOVEhfRVhQTE9SRSkgfSB7CisJZGVzaWduIC1zYXZlIG15RGVzaWduCisKKwlmb3IgeyBzZXQgaW5kZXggMCB9ICB7ICRpbmRleCA8IFtsbGVuZ3RoICRhbGxfc2NyaXB0c10gfSAgeyBpbmNyIGluZGV4IH0geworCQlsb2cgIlxbSU5GT1xdOiBBQkM6IFdpcmVMb2FkIDogU18kaW5kZXgiCisJCWRlc2lnbiAtbG9hZCBteURlc2lnbgorCisJCWFiYyAtRCAkY2xvY2tfcGVyaW9kIFwKKwkJCS1jb25zdHIgIiRzZGNfZmlsZSIgXAorCQkJLWxpYmVydHkgJHNjbGliICBcCisJCQktc2NyaXB0IFtsaW5kZXggJGFsbF9zY3JpcHRzICRpbmRleF0KKworCQlzZXR1bmRlZiAtemVybworCisJCWhpbG9tYXAgLWhpY2VsbCB7Kn0kOjplbnYoU1lOVEhfVElFSElfUE9SVCkgLWxvY2VsbCB7Kn0kOjplbnYoU1lOVEhfVElFTE9fUE9SVCkKKworCQkjIGdldCByaWQgb2YgdGhlIGFzc2lnbm1lbnRzIHRoYXQgbWFrZSB2ZXJpbG9nMmRlZiBmYWlsCisJCXNwbGl0bmV0cworCQlvcHRfY2xlYW4gLXB1cmdlCisJCWluc2J1ZiAtYnVmIHsqfSQ6OmVudihTWU5USF9NSU5fQlVGX1BPUlQpCisKKwkJdGVlIC1vICIkOjplbnYoeW9zeXNfcmVwb3J0X2ZpbGVfdGFnKV8kaW5kZXgkY2hrX2V4dCIgY2hlY2sKKwkJd3JpdGVfdmVyaWxvZyAtbm9hdHRyIC1ub2V4cHIgLW5vaGV4IC1ub2RlYyAtZGVmcGFyYW0gIiQ6OmVudih5b3N5c19yZXN1bHRfZmlsZV90YWcpXyRpbmRleC52IgorCQlkZXNpZ24gLXJlc2V0CisJfQorfSBlbHNlIHsKKworCWxvZyAiXFtJTkZPXF06IEFCQzogV2lyZUxvYWQgOiBTXyRzdHJhdGVneSIKKworCWFiYyAtRCAkY2xvY2tfcGVyaW9kIFwKKwkJLWNvbnN0ciAiJHNkY19maWxlIiBcCisJCS1saWJlcnR5ICRzY2xpYiAgXAorCQktc2NyaXB0IFtsaW5kZXggJGFsbF9zY3JpcHRzICRzdHJhdGVneV0gXAorCQktc2hvd3RtcDsKKworCXNldHVuZGVmIC16ZXJvCisKKwloaWxvbWFwIC1oaWNlbGwgeyp9JDo6ZW52KFNZTlRIX1RJRUhJX1BPUlQpIC1sb2NlbGwgeyp9JDo6ZW52KFNZTlRIX1RJRUxPX1BPUlQpCisKKwkjIGdldCByaWQgb2YgdGhlIGFzc2lnbm1lbnRzIHRoYXQgbWFrZSB2ZXJpbG9nMmRlZiBmYWlsCisJc3BsaXRuZXRzCisJb3B0X2NsZWFuIC1wdXJnZQorCWluc2J1ZiAtYnVmIHsqfSQ6OmVudihTWU5USF9NSU5fQlVGX1BPUlQpCisKKwl0ZWUgLW8gIiQ6OmVudih5b3N5c19yZXBvcnRfZmlsZV90YWcpXyRzdHJhdGVneSRjaGtfZXh0IiBjaGVjaworCXdyaXRlX3Zlcmlsb2cgLW5vYXR0ciAtbm9leHByIC1ub2hleCAtbm9kZWMgLWRlZnBhcmFtICIkOjplbnYoU0FWRV9ORVRMSVNUKSIKK30KKworaWYgeyAkOjplbnYoU1lOVEhfTk9fRkxBVCkgfSB7CisJZGVzaWduIC1yZXNldAorCWZpbGUgY29weSAtZm9yY2UgJDo6ZW52KFNBVkVfTkVUTElTVCkgJDo6ZW52KHlvc3lzX3RtcF9maWxlX3RhZylfdW5mbGF0LnYKKwlyZWFkX3Zlcmlsb2cgLXN2ICQ6OmVudihTQVZFX05FVExJU1QpCisJc3ludGggLXRvcCAkdnRvcCAtZmxhdHRlbgorCXNwbGl0bmV0cworCW9wdF9jbGVhbiAtcHVyZ2UKKwlpbnNidWYgLWJ1ZiB7Kn0kOjplbnYoU1lOVEhfTUlOX0JVRl9QT1JUKQorCXdyaXRlX3Zlcmlsb2cgLW5vYXR0ciAtbm9leHByIC1ub2hleCAtbm9kZWMgLWRlZnBhcmFtICIkOjplbnYoU0FWRV9ORVRMSVNUKSIKKwl0ZWUgLW8gIiQ6OmVudih5b3N5c19yZXBvcnRfZmlsZV90YWcpXyRzdHJhdGVneSRjaGtfZXh0IiBjaGVjaworfQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvZGlnaXRhbF9jb3JlL2ZpbGVsaXN0X3J0bC5mIGIvdmVyaWxvZy9ydGwvZGlnaXRhbF9jb3JlL2ZpbGVsaXN0X3J0bC5mCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNiYjNkOTUKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9kaWdpdGFsX2NvcmUvZmlsZWxpc3RfcnRsLmYKQEAgLTAsMCArMSw3NSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworK2luY2RpcisuLi9zZHJhbV9jdHJsL3NyYy9kZWZzIAorK2luY2RpcisuLi9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMKKworLi4vc3BpX21hc3Rlci9zcmMvc3BpbV90b3Auc3YKKy4uL3NwaV9tYXN0ZXIvc3JjL3NwaW1fcmVncy5zdgorLi4vc3BpX21hc3Rlci9zcmMvc3BpbV9jbGtnZW4uc3YKKy4uL3NwaV9tYXN0ZXIvc3JjL3NwaW1fY3RybC5zdgorLi4vc3BpX21hc3Rlci9zcmMvc3BpbV9yeC5zdgorLi4vc3BpX21hc3Rlci9zcmMvc3BpbV90eC5zdgorCisuLi9zZHJhbV9jdHJsL3NyYy90b3Avc2RyY190b3AudiAKKy4uL3NkcmFtX2N0cmwvc3JjL3diMnNkcmMvd2Iyc2RyYy52IAorLi4vbGliL2FzeW5jX2ZpZm8uc3YgIAorLi4vc2RyYW1fY3RybC9zcmMvY29yZS9zZHJjX2NvcmUudiAKKy4uL3NkcmFtX2N0cmwvc3JjL2NvcmUvc2RyY19iYW5rX2N0bC52IAorLi4vc2RyYW1fY3RybC9zcmMvY29yZS9zZHJjX2JhbmtfZnNtLnYgCisuLi9zZHJhbV9jdHJsL3NyYy9jb3JlL3NkcmNfYnNfY29udmVydC52IAorLi4vc2RyYW1fY3RybC9zcmMvY29yZS9zZHJjX3JlcV9nZW4udiAKKy4uL3NkcmFtX2N0cmwvc3JjL2NvcmUvc2RyY194ZnJfY3RsLnYgCisKKy4uL2xpYi93Yl9jcm9zc2Jhci52CisuLi9saWIvcmVnaXN0ZXJzLnYKKy4uL2xpYi9jbGtfY3RsLnYKKy4vc3JjL2dsYmxfY2ZnLnN2CisuL3NyYy9kaWdpdGFsX2NvcmUuc3YKKworCisuLi9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfaGR1LnN2CisuLi9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfdGR1LnN2CisuLi9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX2lwaWMuc3YKKy4uL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9jc3Iuc3YKKy4uL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9leHUuc3YKKy4uL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9pYWx1LnN2CisuLi9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfaWR1LnN2CisuLi9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfaWZ1LnN2CisuLi9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfbHN1LnN2CisuLi9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfbXByZi5zdgorLi4vc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX3RvcC5zdgorLi4vc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcHJpbWl0aXZlcy9zY3IxX3Jlc2V0X2NlbGxzLnN2CisuLi9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9wcmltaXRpdmVzL3NjcjFfY2cuc3YKKy4uL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3NjcjFfY2xrX2N0cmwuc3YKKy4uL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3NjcjFfdGFwY19zaGlmdF9yZWcuc3YKKy4uL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3NjcjFfdGFwYy5zdgorLi4vc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvc2NyMV90YXBjX3N5bmNocm9uaXplci5zdgorLi4vc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvc2NyMV9jb3JlX3RvcC5zdgorLi4vc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvc2NyMV9kbS5zdgorLi4vc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvc2NyMV9kbWkuc3YKKy4uL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3NjcjFfc2N1LnN2CisKKy4uL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV9kbWVtX3JvdXRlci5zdgorLi4vc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX2RwX21lbW9yeS5zdgorLi4vc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX3RjbS5zdgorLi4vc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX3RpbWVyLnN2CisuLi9zeW50YWNvcmUvc2NyMS9zcmMvdG9wL3NjcjFfZG1lbV93Yi5zdgorLi4vc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX2ltZW1fd2Iuc3YKKy4uL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV90b3Bfd2Iuc3YKKy4uL2xpYi9zeW5jX2ZpZm8uc3YKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvZGlnaXRhbF9jb3JlL3J1bl9tb2RlbHNpbSBiL3Zlcmlsb2cvcnRsL2RpZ2l0YWxfY29yZS9ydW5fbW9kZWxzaW0KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmI1NmIxMgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2RpZ2l0YWxfY29yZS9ydW5fbW9kZWxzaW0KQEAgLTAsMCArMSwyMSBAQAorIyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyMgLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEKKyMgLy8gCisjIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIC8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAvLworIyAvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAvLworIyAvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIC8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIC8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorIyAvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKyMgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwordmxpYiB3b3JrCit2bG9nIC1mIGZpbGVsaXN0X3J0bC5mCit2c2ltIC1jIGRpZ2l0YWxfY29yZSAtc3VwcHJlc3MgdnNpbS0zOTk5IC1kbyAiZXhpdCIKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL2RpZ2l0YWxfY29yZS9zcmMvZGlnaXRhbF9jb3JlLnN2IGIvdmVyaWxvZy9ydGwvZGlnaXRhbF9jb3JlL3NyYy9kaWdpdGFsX2NvcmUuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmViNGIyNwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2RpZ2l0YWxfY29yZS9zcmMvZGlnaXRhbF9jb3JlLnN2CkBAIC0wLDAgKzEsODA1IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERpZ2l0YWwgY29yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICBUaGlzIGlzIGRpZ2l0YWwgY29yZSBhbmQgaW50ZWdyYXRlIGFsbCB0aGUgbWFpbiBibG9jayAgIC8vLy8KKy8vLy8gICAgICBoZXJlLiAgRm9sbG93aW5nIGJsb2NrIGFyZSBpbnRlZ3JhdGVkIGhlcmUgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAxLiBSaXNjIFYgQ29yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAyLiBTUEkgTWFzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAzLiBXaXNoYm9uZSBDcm9zcyBCYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMTZ0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgSW5pdGlhbCBpbnRlZ3JhdGlvbiB3aXRoIFJpc2MtViBjb3JlICsgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgV2lzaGJvbmUgQ3Jvc3MgQmFyICsgU1BJICBNYXN0ZXIgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4yIC0gMTd0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgIDEuIEluIHJpc2MgY29yZSwgd2lzaGJvbmUgYW5kIGNvcmUgZG9tYWluIGlzICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgIGNyZWF0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgIDIuIGNwdSBhbmQgcnRjIGNsb2NrIGFyZSBnZW5lcmF0ZWQgaW4gZ2xibCByZWcgYmxvY2sgIC8vLy8KKy8vLy8gICAgICAgIDMuIGluIHdpc2hib25lIGludGVyY29ubmVjdDotIFN0YWdnaW5nIGZsb3AgYXJlIGFkZGVkIC8vLy8KKy8vLy8gICAgICAgICAgIGF0IGludGVyZmFjZSB0byBicmVhayB3aXNoYm9uZSB0aW1pbmcgcGF0aCAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgIDQuIGJ1c3dpZHRoIHdhcm5pbmcgYXJlIGZpeGVkIGluc2lkZSBzcGlfbWFzdGVyICAgICAgIC8vLy8KKy8vLy8gICAgICAgIG1vZGlmaWVkIHJ0bCBmaWxlcyBhcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgIHZlcmlsb2cvcnRsL2RpZ2l0YWxfY29yZS9zcmMvZGlnaXRhbF9jb3JlLnN2ICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgIHZlcmlsb2cvcnRsL2RpZ2l0YWxfY29yZS9zcmMvZ2xibF9jZmcuc3YgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgIHZlcmlsb2cvcnRsL2xpYi93Yl9zdGFnZ2luZy5zdiAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgIHZlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV9kbWVtX3diLnN2IC8vLy8KKy8vLy8gICAgICAgICAgIHZlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV9pbWVtX3diLnN2IC8vLy8KKy8vLy8gICAgICAgICAgIHZlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV90b3Bfd2Iuc3YgIC8vLy8KKy8vLy8gICAgICAgICAgIHZlcmlsb2cvcnRsL3VzZXJfcHJvamVjdF93cmFwcGVyLnYgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgIHZlcmlsb2cvcnRsL3diX2ludGVyY29ubmVjdC9zcmMvd2JfaW50ZXJjb25uZWN0LnN2IC8vLy8KKy8vLy8gICAgICAgICAgIHZlcmlsb2cvcnRsL3NwaV9tYXN0ZXIvc3JjL3NwaW1fY2xrZ2VuLnN2ICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgIHZlcmlsb2cvcnRsL3NwaV9tYXN0ZXIvc3JjL3NwaW1fY3RybC5zdiAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4zIC0gMjB0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgIDEuIHVhcnQgY29yZSBpcyBpbnRlZ3JhdGVkICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgIDIuIDNyZCBTbGF2ZSBwb3J0ZWQgYWRkZWQgdG8gd2lzaGJvbmUgaW50ZXJjb25uZWN0IC8vLy8KKy8vLy8gICAgMC40IC0gMjV0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgTW92ZWQgdGhlIHBhZCBsb2dpYyBpbnNpZGUgc2RyYW0sc3BpLHVhcnQgYmxvY2sgdG8gIC8vLy8KKy8vLy8gICAgICAgICAgYXZvaWQgbG9naWMgYXQgZGlnaXRhbCBjb3JlIGxldmVsICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC41IC0gMjV0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgU2luY2UgY2FydmVsIGdpdmVzIG9ubHkgMTZNQiBhZGRyZXNzIHNwYWNlIGZvciB1c2VyIC8vLy8KKy8vLy8gICAgICAgICAgc3BhY2UsIHdlIGhhdmUgaW1wbGVtZW50ZWQgaW5kaXJlY3QgYWRkcmVzcyBzZWxlY3QgIC8vLy8KKy8vLy8gICAgICAgICAgd2l0aCA4IGJpdCBiYW5rIHNlbGVjdCBnaXZlbiBpbnNpZGUgd2JfaG9zdCAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgY29yZSBBZGRyZXNzID0ge0JhbmtfU2VsWzc6MF0sIFdiX0FkZHJlc3NbMjM6MF0gICAgIC8vLy8KKy8vLy8gICAgICAgICAgY2FyYXZlbCB1c2VyIGFkZHJlc3Mgc3BhY2UgaXMgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgMHgzMDAwXzAwMDAgdG8gMHgzMEZGX0ZGRkYgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC42IC0gMjd0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgRGlnaXRhbCBjb3JlIGxldmVsIHRpZSBhcmUgbW92ZWQgaW5zaWRlIElQIHRvIGF2b2lkIC8vLy8KKy8vLy8gICAgICAgICAgcG93ZXIgaG9vayB1cCBhdCBjb3JlIGxldmVsICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgdV9yaXNjX3RvcCAtIHRlc3RfbW9kZSAmIHRlc3RfcnN0X24gICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgdV9pbnRlcmNvbiAtIHMqX3diZF9lcnJfaSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgdW51c2VkIHdiX2N0aV9pIGlzIHJlbW92ZWQgZnJvbSB1X3NkcmFtX2N0cmwgICAgICAgIC8vLy8KKy8vLy8gICAgMC43IC0gMjh0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgd2JfaW50ZXJjb25uZWN0IG1hc3RlciBwb3J0IGFyZSBpbnRlcmNoYW5nZWQgZm9yICAgIC8vLy8KKy8vLy8gICAgICAgICAgYmV0dGVyIHBoeXNpY2FsIHBsYWNlbWVudC4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgbTAgLSBFeHRlcm5hbCBIT1NUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgbTEgLSBSSVNDIElNRU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgbTIgLSBSSVNDIERNRU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC44IC0gNnRoIEp1bHkgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgRm9yIEJldHRlciBTRFJBTSBJbnRlcmZhY2UgdGltaW5nIHdlIGhhdmUgdGFwaW5nICAgIC8vLy8KKy8vLy8gICAgICAgICAgc2RyYW1fY2xvY2sgZ29pbnQgdG8gaW9fb3V0WzI5XSBkaXJlY3RseSBmcm9tICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgZ2xvYmFsIHJlZ2lzdGVyIGJsb2NrLCB0aGlzIGhlbHAgaW4gYmV0dGVyIFNEUkFNICAgIC8vLy8KKy8vLy8gICAgICAgICAgaW50ZXJmYWNlIHRpbWluZyBjb250cm9sICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworCittb2R1bGUgZGlnaXRhbF9jb3JlICgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIGlub3V0IHZkZGExLAkvLyBVc2VyIGFyZWEgMSAzLjNWIHN1cHBseQorICAgIGlub3V0IHZkZGEyLAkvLyBVc2VyIGFyZWEgMiAzLjNWIHN1cHBseQorICAgIGlub3V0IHZzc2ExLAkvLyBVc2VyIGFyZWEgMSBhbmFsb2cgZ3JvdW5kCisgICAgaW5vdXQgdnNzYTIsCS8vIFVzZXIgYXJlYSAyIGFuYWxvZyBncm91bmQKKyAgICBpbm91dCB2Y2NkMSwJLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICBpbm91dCB2Y2NkMiwJLy8gVXNlciBhcmVhIDIgMS44diBzdXBwbHkKKyAgICBpbm91dCB2c3NkMSwJLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKKyAgICBpbm91dCB2c3NkMiwJLy8gVXNlciBhcmVhIDIgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorICAgIGlucHV0ICAgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgd2JfY2xrX2kgICAgICAgICwgIC8vIFN5c3RlbSBjbG9jaworICAgIGlucHV0ICAgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9jbG9jazIgICAgICwgIC8vIHVzZXIgQ2xvY2sKKyAgICBpbnB1dCAgIHdpcmUgICAgICAgICAgICAgICAgICAgICAgIHdiX3JzdF9pICAgICAgICAsICAvLyBSZWd1bGFyIFJlc2V0IHNpZ25hbAorCisgICAgaW5wdXQgICB3aXJlICAgICAgICAgICAgICAgICAgICAgICB3YnNfY3ljX2kgICAgICAgLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICBpbnB1dCAgIHdpcmUgICAgICAgICAgICAgICAgICAgICAgIHdic19zdGJfaSAgICAgICAsICAvLyBzdHJvYmUvcmVxdWVzdAorICAgIGlucHV0ICAgd2lyZSBbV0JfV0lEVEgtMTowXSAgICAgICAgd2JzX2Fkcl9pICAgICAgICwgIC8vIGFkZHJlc3MKKyAgICBpbnB1dCAgIHdpcmUgICAgICAgICAgICAgICAgICAgICAgIHdic193ZV9pICAgICAgICAsICAvLyB3cml0ZQorICAgIGlucHV0ICAgd2lyZSBbV0JfV0lEVEgtMTowXSAgICAgICAgd2JzX2RhdF9pICAgICAgICwgIC8vIGRhdGEgb3V0cHV0CisgICAgaW5wdXQgICB3aXJlIFszOjBdICAgICAgICAgICAgICAgICB3YnNfc2VsX2kgICAgICAgLCAgLy8gYnl0ZSBlbmFibGUKKyAgICBvdXRwdXQgIHdpcmUgW1dCX1dJRFRILTE6MF0gICAgICAgIHdic19kYXRfbyAgICAgICAsICAvLyBkYXRhIGlucHV0CisgICAgb3V0cHV0ICB3aXJlICAgICAgICAgICAgICAgICAgICAgICB3YnNfYWNrX28gICAgICAgLCAgLy8gYWNrbm93bGVnZW1lbnQKKworICAgIC8vIEFuYWxvZyAoZGlyZWN0IGNvbm5lY3Rpb24gdG8gR1BJTyBwYWQtLS11c2Ugd2l0aCBjYXV0aW9uKQorICAgIC8vIE5vdGUgdGhhdCBhbmFsb2cgSS9PIGlzIG5vdCBhdmFpbGFibGUgb24gdGhlIDcgbG93ZXN0LW51bWJlcmVkCisgICAgLy8gR1BJTyBwYWRzLCBhbmQgc28gdGhlIGFuYWxvZ19pbyBpbmRleGluZyBpcyBvZmZzZXQgZnJvbSB0aGUKKyAgICAvLyBHUElPIGluZGV4aW5nIGJ5IDcgKGFsc28gdXBwZXIgMiBHUElPcyBkbyBub3QgaGF2ZSBhbmFsb2dfaW8pLgorICAgIGlub3V0IFtgTVBSSl9JT19QQURTLTEwOjBdIGFuYWxvZ19pbywKKyAKKyAgICAvLyBMb2dpYyBBbmFseXplciBTaWduYWxzCisgICAgaW5wdXQgIHdpcmUgWzEyNzowXSAgICAgICAgICAgICAgICBsYV9kYXRhX2luICAgICAgLAorICAgIG91dHB1dCB3aXJlIFsxMjc6MF0gICAgICAgICAgICAgICAgbGFfZGF0YV9vdXQgICAgICwKKyAgICBpbnB1dCAgd2lyZSBbMTI3OjBdICAgICAgICAgICAgICAgIGxhX29lbmIgICAgICAgICAsCisgCisKKyAgICAvLyBJT3MKKyAgICBpbnB1dCAgd2lyZSAgWzM3OjBdICAgICAgICAgICAgICAgIGlvX2luICAgICAgICAgICAsCisgICAgb3V0cHV0IHdpcmUgIFszNzowXSAgICAgICAgICAgICAgICBpb19vdXQgICAgICAgICAgLAorICAgIG91dHB1dCB3aXJlICBbMzc6MF0gICAgICAgICAgICAgICAgaW9fb2ViICAgICAgICAgICwKKworICAgIG91dHB1dCB3aXJlICBbMjowXSAgICAgICAgICAgICAgICAgdXNlcl9pcnEgICAgICAgICAgICAgCisKKyk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2NhbCBQYXJhbWV0ZXIgRGVjbGFyYXRpb24KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3BhcmFtZXRlciAgICAgIFNEUl9EVyAgID0gODsgIC8vIFNEUiBEYXRhIFdpZHRoIAorcGFyYW1ldGVyICAgICAgU0RSX0JXICAgPSAxOyAgLy8gU0RSIEJ5dGUgV2lkdGgKK3BhcmFtZXRlciAgICAgIFdCX1dJRFRIID0gMzI7IC8vIFdCIEFERFJFU1MvREFSQSBXSURUSAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gV2lzaGJvbmUgUmlzYyBWIEluc3RydWN0aW9uIE1lbW9yeSBJbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3Jpc2N2X2ltZW1fc3RiX2k7IC8vIHN0cm9iZS9yZXF1ZXN0Cit3aXJlICAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgd2JkX3Jpc2N2X2ltZW1fYWRyX2k7IC8vIGFkZHJlc3MKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfcmlzY3ZfaW1lbV93ZV9pOyAgLy8gd3JpdGUKK3dpcmUgICBbV0JfV0lEVEgtMTowXSAgICAgICAgICB3YmRfcmlzY3ZfaW1lbV9kYXRfaTsgLy8gZGF0YSBvdXRwdXQKK3dpcmUgICBbMzowXSAgICAgICAgICAgICAgICAgICB3YmRfcmlzY3ZfaW1lbV9zZWxfaTsgLy8gYnl0ZSBlbmFibGUKK3dpcmUgICBbV0JfV0lEVEgtMTowXSAgICAgICAgICB3YmRfcmlzY3ZfaW1lbV9kYXRfbzsgLy8gZGF0YSBpbnB1dAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9yaXNjdl9pbWVtX2Fja19vOyAvLyBhY2tub3dsZWdlbWVudAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9yaXNjdl9pbWVtX2Vycl9vOyAgLy8gZXJyb3IKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJJU0MgViBXaXNoYm9uZSBEYXRhIE1lbW9yeSBJbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3Jpc2N2X2RtZW1fc3RiX2k7IC8vIHN0cm9iZS9yZXF1ZXN0Cit3aXJlICAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgd2JkX3Jpc2N2X2RtZW1fYWRyX2k7IC8vIGFkZHJlc3MKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfcmlzY3ZfZG1lbV93ZV9pOyAgLy8gd3JpdGUKK3dpcmUgICBbV0JfV0lEVEgtMTowXSAgICAgICAgICB3YmRfcmlzY3ZfZG1lbV9kYXRfaTsgLy8gZGF0YSBvdXRwdXQKK3dpcmUgICBbMzowXSAgICAgICAgICAgICAgICAgICB3YmRfcmlzY3ZfZG1lbV9zZWxfaTsgLy8gYnl0ZSBlbmFibGUKK3dpcmUgICBbV0JfV0lEVEgtMTowXSAgICAgICAgICB3YmRfcmlzY3ZfZG1lbV9kYXRfbzsgLy8gZGF0YSBpbnB1dAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9yaXNjdl9kbWVtX2Fja19vOyAvLyBhY2tub3dsZWdlbWVudAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9yaXNjdl9kbWVtX2Vycl9vOyAvLyBlcnJvcgorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gV0IgSE9TVCBJbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2ludF9jeWNfaTsgLy8gc3Ryb2JlL3JlcXVlc3QKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfaW50X3N0Yl9pOyAvLyBzdHJvYmUvcmVxdWVzdAord2lyZSAgIFtXQl9XSURUSC0xOjBdICAgICAgICAgIHdiZF9pbnRfYWRyX2k7IC8vIGFkZHJlc3MKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfaW50X3dlX2k7ICAvLyB3cml0ZQord2lyZSAgIFtXQl9XSURUSC0xOjBdICAgICAgICAgIHdiZF9pbnRfZGF0X2k7IC8vIGRhdGEgb3V0cHV0Cit3aXJlICAgWzM6MF0gICAgICAgICAgICAgICAgICAgd2JkX2ludF9zZWxfaTsgLy8gYnl0ZSBlbmFibGUKK3dpcmUgICBbV0JfV0lEVEgtMTowXSAgICAgICAgICB3YmRfaW50X2RhdF9vOyAvLyBkYXRhIGlucHV0Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2ludF9hY2tfbzsgLy8gYWNrbm93bGVnZW1lbnQKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfaW50X2Vycl9vOyAvLyBlcnJvcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgIFNQSSBNYXN0ZXIgV2lzaGJvbmUgSW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9zcGltX3N0Yl9vOyAvLyBzdHJvYmUvcmVxdWVzdAord2lyZSAgIFtXQl9XSURUSC0xOjBdICAgICAgICAgIHdiZF9zcGltX2Fkcl9vOyAvLyBhZGRyZXNzCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3NwaW1fd2VfbzsgIC8vIHdyaXRlCit3aXJlICAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgd2JkX3NwaW1fZGF0X287IC8vIGRhdGEgb3V0cHV0Cit3aXJlICAgWzM6MF0gICAgICAgICAgICAgICAgICAgd2JkX3NwaW1fc2VsX287IC8vIGJ5dGUgZW5hYmxlCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3NwaW1fY3ljX28gOword2lyZSAgIFtXQl9XSURUSC0xOjBdICAgICAgICAgIHdiZF9zcGltX2RhdF9pOyAvLyBkYXRhIGlucHV0Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3NwaW1fYWNrX2k7IC8vIGFja25vd2xlZ2VtZW50Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3NwaW1fZXJyX2k7ICAvLyBlcnJvcgorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICAgU1BJIE1hc3RlciBXaXNoYm9uZSBJbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3NkcmFtX3N0Yl9vIDsKK3dpcmUgW1dCX1dJRFRILTE6MF0gICAgICAgICAgICB3YmRfc2RyYW1fYWRyX28gOword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9zZHJhbV93ZV9vICA7IC8vIDEgLSBXcml0ZSwgMCAtIFJlYWQKK3dpcmUgW1dCX1dJRFRILTE6MF0gICAgICAgICAgICB3YmRfc2RyYW1fZGF0X28gOword2lyZSBbV0JfV0lEVEgvOC0xOjBdICAgICAgICAgIHdiZF9zZHJhbV9zZWxfbyA7IC8vIEJ5dGUgZW5hYmxlCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3NkcmFtX2N5Y19vIDsKK3dpcmUgIFsyOjBdICAgICAgICAgICAgICAgICAgICB3YmRfc2RyYW1fY3RpX28gOword2lyZSAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgIHdiZF9zZHJhbV9kYXRfaSA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3NkcmFtX2Fja19pIDsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgIEdsb2JhbCBSZWdpc3RlciBXaXNoYm9uZSBJbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2dsYmxfc3RiX287IC8vIHN0cm9iZS9yZXF1ZXN0Cit3aXJlICAgWzc6MF0gICAgICAgICAgICAgICAgICAgd2JkX2dsYmxfYWRyX287IC8vIGFkZHJlc3MKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfZ2xibF93ZV9vOyAgLy8gd3JpdGUKK3dpcmUgICBbV0JfV0lEVEgtMTowXSAgICAgICAgICB3YmRfZ2xibF9kYXRfbzsgLy8gZGF0YSBvdXRwdXQKK3dpcmUgICBbMzowXSAgICAgICAgICAgICAgICAgICB3YmRfZ2xibF9zZWxfbzsgLy8gYnl0ZSBlbmFibGUKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfZ2xibF9jeWNfbyA7Cit3aXJlICAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgd2JkX2dsYmxfZGF0X2k7IC8vIGRhdGEgaW5wdXQKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfZ2xibF9hY2tfaTsgLy8gYWNrbm93bGVnZW1lbnQKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfZ2xibF9lcnJfaTsgIC8vIGVycm9yCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgICBHbG9iYWwgUmVnaXN0ZXIgV2lzaGJvbmUgSW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF91YXJ0X3N0Yl9vOyAvLyBzdHJvYmUvcmVxdWVzdAord2lyZSAgIFs3OjBdICAgICAgICAgICAgICAgICAgIHdiZF91YXJ0X2Fkcl9vOyAvLyBhZGRyZXNzCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3VhcnRfd2VfbzsgIC8vIHdyaXRlCit3aXJlICAgWzc6MF0gICAgICAgICAgICAgICAgICAgd2JkX3VhcnRfZGF0X287IC8vIGRhdGEgb3V0cHV0Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3VhcnRfc2VsX287IC8vIGJ5dGUgZW5hYmxlCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3VhcnRfY3ljX28gOword2lyZSAgIFs3OjBdICAgICAgICAgICAgICAgICAgIHdiZF91YXJ0X2RhdF9pOyAvLyBkYXRhIGlucHV0Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3VhcnRfYWNrX2k7IC8vIGFja25vd2xlZ2VtZW50Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3VhcnRfZXJyX2k7ICAvLyBlcnJvcgorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBDUFUgQ29uZmlndXJhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1X3JzdF9uICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BpX3JzdF9uICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2RyYW1fcnN0X24gICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2RyYW1fY2xrICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1X2NsayAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRjX2NsayAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19pbnQgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2ludF9yc3RfbiA7CisKK3dpcmUgWzMxOjBdICAgICAgICAgICAgICAgICAgICAgICBmdXNlX21oYXJ0aWQgIDsKK3dpcmUgWzE1OjBdICAgICAgICAgICAgICAgICAgICAgICBpcnFfbGluZXMgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2Z0X2lycSAgICAgIDsKKword2lyZSBbNzowXSAgICAgICAgICAgICAgICAgICAgICAgIGNmZ19nbGJfY3RybCAgOword2lyZSBbMzE6MF0gICAgICAgICAgICAgICAgICAgICAgIGNmZ19jbGtfY3RybDEgOword2lyZSBbMzE6MF0gICAgICAgICAgICAgICAgICAgICAgIGNmZ19jbGtfY3RybDIgOword2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgIGNmZ19jc2thX3dpICAgOyAvLyBjbG9jayBza2V3IGFkanVzdCBmb3Igd2lzaGJvbmUgaW50ZXJjb25uZWN0Cit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgY2ZnX2Nza2FfcmlzY3Y7IC8vIGNsb2NrIHNrZXcgYWRqdXN0IGZvciByaXNjdgord2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgIGNmZ19jc2thX3VhcnQgOyAvLyBjbG9jayBza2V3IGFkanVzdCBmb3IgdWFydAord2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgIGNmZ19jc2thX3NwaSAgOyAvLyBjbG9jayBza2V3IGFkanVzdCBmb3Igc3BpCit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgY2ZnX2Nza2Ffc2RyYW07IC8vIGNsb2NrIHNrZXcgYWRqdXN0IGZvciBzZHJhbQord2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgIGNmZ19jc2thX2dsYmwgOyAvLyBjbG9jayBza2V3IGFkanVzdCBmb3IgZ2xvYmFsIHJlZword2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgIGNmZ19jc2thX3doICAgOyAvLyBjbG9jayBza2V3IGFkanVzdCBmb3Igd2ViIGhvc3QKKworCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa193aSAgICA7IC8vIGNsb2NrIGZvciB3aXNoYm9uZSBpbnRlcmNvbm5lY3QKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX3Jpc2N2IDsgLy8gY2xvY2sgZm9yIHJpc2N2Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa191YXJ0ICA7IC8vIGNsb2NrIGZvciB1YXJ0Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19zcGkgICA7IC8vIGNsb2NrIGZvciBzcGkKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX3NkcmFtIDsgLy8gY2xvY2sgZm9yIHNkcmFtCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19nbGJsICA7IC8vIGNsb2NrIGZvciBnbG9iYWwgcmVnCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa193aCAgICA7IC8vIGNsb2NrIGZvciBnbG9iYWwgcmVnCisKK3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICBjZmdfY3NrYV9zZF9jbzsgLy8gY2xvY2sgc2tldyBhZGp1c3QgZm9yIHNkcmFtIGNsb2NrIG91dAord2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgIGNmZ19jc2thX3NkX2NpOyAvLyBjbG9jayBza2V3IGFkanVzdCBmb3Igc2RyYW0gY2xvY2sgaW5wdXQKK3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICBjZmdfY3NrYV9zcF9jbzsgLy8gY2xvY2sgc2tldyBhZGp1c3QgZm9yIFNQSSBjbG9jayBvdXQKKword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX291dF8yOV8gICAgOyAvLyBJbnRlcm5hbGx5IHRhcHBlZCBTRFJBTSBjbG9jaword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2luXzI5XyAgICAgOyAvLyBDbG9jayBTa2V3ZWQgUGFkIFNEUkFNIGNsb2NrCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9faW5fMzBfICAgICA7IC8vIFNQSSBjbG9jayBvdXQKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENvbmZpZ3VyYXRpb24gUGFyYW1ldGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgIGNmZ19zZHJfd2lkdGggICAgICAgOyAvLyAyJ2IwMCAtIDMyIEJpdCBTRFIsIDInYjAxIC0gMTYgQml0IFNEUiwgMidiMXggLSA4IEJpdAord2lyZSBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgIGNmZ19jb2xiaXRzICAgICAgICAgOyAvLyAyJ2IwMCAtIDggQml0IGNvbHVtbiBhZGRyZXNzLCAKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZHJfaW5pdF9kb25lICAgICAgIDsgLy8gSW5kaWNhdGUgU0RSQU0gSW5pdGlhbGlzYXRpb24gRG9uZQord2lyZSBbMzowXSAJCSAgICAgICAgICBjZmdfc2RyX3RyYXNfZCAgICAgIDsgLy8gQWN0aXZlIHRvIHByZWNoYXJnZSBkZWxheQord2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgIGNmZ19zZHJfdHJwX2QgICAgICAgOyAvLyBQcmVjaGFyZ2UgdG8gYWN0aXZlIGRlbGF5Cit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgY2ZnX3Nkcl90cmNkX2QgICAgICA7IC8vIEFjdGl2ZSB0byBSL1cgZGVsYXkKK3dpcmUgCQkJICAgICAgICAgIGNmZ19zZHJfZW4gICAgICAgICAgOyAvLyBFbmFibGUgU0RSQU0gY29udHJvbGxlcgord2lyZSBbMTowXSAJCSAgICAgICAgICBjZmdfcmVxX2RlcHRoICAgICAgIDsgLy8gTWF4aW11bSBSZXF1ZXN0IGFjY2VwdGVkIGJ5IFNEUkFNIGNvbnRyb2xsZXIKK3dpcmUgWzEyOjBdIAkJICAgICAgICAgIGNmZ19zZHJfbW9kZV9yZWcgICAgOword2lyZSBbMjowXSAJCSAgICAgICAgICBjZmdfc2RyX2NhcyAgICAgICAgIDsgLy8gU0RSQU0gQ0FTIExhdGVuY3kKK3dpcmUgWzM6MF0gCQkgICAgICAgICAgY2ZnX3Nkcl90cmNhcl9kICAgICA7IC8vIEF1dG8tcmVmcmVzaCBwZXJpb2QKK3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICBjZmdfc2RyX3R3cl9kICAgICAgIDsgLy8gV3JpdGUgcmVjb3ZlcnkgZGVsYXkKK3dpcmUgWzExOiAwXSAgICAgICAgICAgICAgICAgICAgICBjZmdfc2RyX3Jmc2ggICAgICAgIDsKK3dpcmUgWzIgOiAwXSAgICAgICAgICAgICAgICAgICAgICBjZmdfc2RyX3JmbWF4ICAgICAgIDsKKworCisKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIEdlbmVyYXRpbmcgYWNpdmUgbG93IHdpc2hib25lIHJlc2V0ICAgICAgICAgICAgICAgICAKKy8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworYXNzaWduIHdiZF9pbnRfcnN0X24gID0gY2ZnX2dsYl9jdHJsWzBdOworYXNzaWduIGNwdV9yc3RfbiAgICAgID0gY2ZnX2dsYl9jdHJsWzFdOworYXNzaWduIHNwaV9yc3RfbiAgICAgID0gY2ZnX2dsYl9jdHJsWzJdOworYXNzaWduIHNkcmFtX3JzdF9uICAgID0gY2ZnX2dsYl9jdHJsWzNdOworCithc3NpZ24gY2ZnX2Nza2Ffd2kgICAgPSBjZmdfY2xrX2N0cmwxWzM6MF07Cithc3NpZ24gY2ZnX2Nza2FfcmlzY3YgPSBjZmdfY2xrX2N0cmwxWzc6NF07Cithc3NpZ24gY2ZnX2Nza2FfdWFydCAgPSBjZmdfY2xrX2N0cmwxWzExOjhdOworYXNzaWduIGNmZ19jc2thX3NwaSAgID0gY2ZnX2Nsa19jdHJsMVsxNToxMl07Cithc3NpZ24gY2ZnX2Nza2Ffc2RyYW0gPSBjZmdfY2xrX2N0cmwxWzE5OjE2XTsKK2Fzc2lnbiBjZmdfY3NrYV9nbGJsICA9IGNmZ19jbGtfY3RybDFbMjM6MjBdOworYXNzaWduIGNmZ19jc2thX3doICAgID0gY2ZnX2Nsa19jdHJsMVsyNzoyNF07CisKK2Fzc2lnbiBjZmdfY3NrYV9zZF9jbyA9IGNmZ19jbGtfY3RybDJbMzowXTsgLy8gU0RSQU0gY2xvY2sgb3V0IGNvbnRyb2wKK2Fzc2lnbiBjZmdfY3NrYV9zZF9jaSA9IGNmZ19jbGtfY3RybDJbNzo0XTsgLy8gU0RSQU0gY2xvY2sgaW4gY29udHJvbAorYXNzaWduIGNmZ19jc2thX3NwX2NvID0gY2ZnX2Nsa19jdHJsMlsxMTo4XTsvLyBTUEkgY2xvY2sgb3V0IGNvbnRyb2wKKworCit3Yl9ob3N0IHVfd2JfaG9zdCgKKworICAgIC8vIE1hc3RlciBQb3J0CisgICAgICAgLndibV9yc3RfaSAgICAgICAgKHdiX3JzdF9pICAgICAgICAgICAgICksICAKKyAgICAgICAud2JtX2Nsa19pICAgICAgICAod2JfY2xrX2kgICAgICAgICAgICAgKSwgIAorICAgICAgIC53Ym1fY3ljX2kgICAgICAgICh3YnNfY3ljX2kgICAgICAgICAgICApLCAgCisgICAgICAgLndibV9zdGJfaSAgICAgICAgKHdic19zdGJfaSAgICAgICAgICAgICksICAKKyAgICAgICAud2JtX2Fkcl9pICAgICAgICAod2JzX2Fkcl9pICAgICAgICAgICAgKSwgIAorICAgICAgIC53Ym1fd2VfaSAgICAgICAgICh3YnNfd2VfaSAgICAgICAgICAgICApLCAgCisgICAgICAgLndibV9kYXRfaSAgICAgICAgKHdic19kYXRfaSAgICAgICAgICAgICksICAKKyAgICAgICAud2JtX3NlbF9pICAgICAgICAod2JzX3NlbF9pICAgICAgICAgICAgKSwgIAorICAgICAgIC53Ym1fZGF0X28gICAgICAgICh3YnNfZGF0X28gICAgICAgICAgICApLCAgCisgICAgICAgLndibV9hY2tfbyAgICAgICAgKHdic19hY2tfbyAgICAgICAgICAgICksICAKKyAgICAgICAud2JtX2Vycl9vICAgICAgICAoICAgICAgICAgICAgICAgICAgICAgKSwgIAorCisgICAgLy8gU2xhdmUgUG9ydAorICAgICAgIC53YnNfY2xrX291dCAgICAgICh3YmRfY2xrX2ludCAgICAgICAgICApLCAgCisgICAgICAgLndic19jbGtfaSAgICAgICAgKHdiZF9jbGtfd2ggICAgICAgICAgICksICAKKyAgICAgICAud2JzX2N5Y19vICAgICAgICAod2JkX2ludF9jeWNfaSAgICAgICAgKSwgIAorICAgICAgIC53YnNfc3RiX28gICAgICAgICh3YmRfaW50X3N0Yl9pICAgICAgICApLCAgCisgICAgICAgLndic19hZHJfbyAgICAgICAgKHdiZF9pbnRfYWRyX2kgICAgICAgICksICAKKyAgICAgICAud2JzX3dlX28gICAgICAgICAod2JkX2ludF93ZV9pICAgICAgICAgKSwgIAorICAgICAgIC53YnNfZGF0X28gICAgICAgICh3YmRfaW50X2RhdF9pICAgICAgICApLCAgCisgICAgICAgLndic19zZWxfbyAgICAgICAgKHdiZF9pbnRfc2VsX2kgICAgICAgICksICAKKyAgICAgICAud2JzX2RhdF9pICAgICAgICAod2JkX2ludF9kYXRfbyAgICAgICAgKSwgIAorICAgICAgIC53YnNfYWNrX2kgICAgICAgICh3YmRfaW50X2Fja19vICAgICAgICApLCAgCisgICAgICAgLndic19lcnJfaSAgICAgICAgKHdiZF9pbnRfZXJyX28gICAgICAgICksICAKKworICAgICAgIC5jZmdfZ2xiX2N0cmwgICAgIChjZmdfZ2xiX2N0cmwgICAgICAgICApLAorICAgICAgIC5jZmdfY2xrX2N0cmwxICAgIChjZmdfY2xrX2N0cmwxICAgICAgICApLAorICAgICAgIC5jZmdfY2xrX2N0cmwyICAgIChjZmdfY2xrX2N0cmwyICAgICAgICApLAorCisgICAgLy8gTG9naWMgQW5hbHl6ZXIgU2lnbmFscworICAgICAgIC5sYV9kYXRhX2luICAgICAgIChsYV9kYXRhX2luICAgICAgICAgICApLAorICAgICAgIC5sYV9kYXRhX291dCAgICAgIChsYV9kYXRhX291dCAgICAgICAgICApLAorICAgICAgIC5sYV9vZW5iICAgICAgICAgIChsYV9vZW5iICAgICAgICAgICAgICApCisgICAgKTsKKworCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJJU0MgViBDb3JlIGluc3RhbmNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc2NyMV90b3Bfd2IgdV9yaXNjdl90b3AgKAorICAgIC8vIFJlc2V0CisgICAgLnB3cnVwX3JzdF9uICAgICAgICAgICAgKHdiZF9pbnRfcnN0X24gICAgICAgICAgICAgKSwKKyAgICAucnN0X24gICAgICAgICAgICAgICAgICAod2JkX2ludF9yc3RfbiAgICAgICAgICAgICApLAorICAgIC5jcHVfcnN0X24gICAgICAgICAgICAgIChjcHVfcnN0X24gICAgICAgICAgICAgICAgICksCisKKyAgICAvLyBDbG9jaworICAgIC5jb3JlX2NsayAgICAgICAgICAgICAgIChjcHVfY2xrICAgICAgICAgICAgICAgICAgICksCisgICAgLnJ0Y19jbGsgICAgICAgICAgICAgICAgKHJ0Y19jbGsgICAgICAgICAgICAgICAgICAgKSwKKworICAgIC8vIEZ1c2VzCisgICAgLmZ1c2VfbWhhcnRpZCAgICAgICAgICAgKGZ1c2VfbWhhcnRpZCAgICAgICAgICAgICAgKSwKKworICAgIC8vIElSUQorICAgIC5pcnFfbGluZXMgICAgICAgICAgICAgIChpcnFfbGluZXMgICAgICAgICAgICAgICAgICksIAorICAgIC5zb2Z0X2lycSAgICAgICAgICAgICAgIChzb2Z0X2lycSAgICAgICAgICAgICAgICAgICksIC8vIFRPRE8gLSBJbnRlcnJ1cHRzCisKKyAgICAvLyBERlQKKyAgICAvLyAudGVzdF9tb2RlICAgICAgICAgICAoMSdiMCAgICAgICAgICAgICAgICAgICAgICApLCAvLyBNb3ZlZCBpbnNpZGUgSVAKKyAgICAvLyAudGVzdF9yc3RfbiAgICAgICAgICAoMSdiMSAgICAgICAgICAgICAgICAgICAgICApLCAvLyBNb3ZlZCBpbnNpZGUgSVAKKworICAgIAorICAgIC53Yl9yc3RfbiAgICAgICAgICAgICAgICh3YmRfaW50X3JzdF9uICAgICAgICAgICAgICksCisgICAgLndiX2NsayAgICAgICAgICAgICAgICAgKHdiZF9jbGtfcmlzY3YgICAgICAgICAgICAgKSwKKyAgICAvLyBJbnN0cnVjdGlvbiBtZW1vcnkgaW50ZXJmYWNlCisgICAgLndiZF9pbWVtX3N0Yl9vICAgICAgICAgKHdiZF9yaXNjdl9pbWVtX3N0Yl9pICAgICAgKSwKKyAgICAud2JkX2ltZW1fYWRyX28gICAgICAgICAod2JkX3Jpc2N2X2ltZW1fYWRyX2kgICAgICApLAorICAgIC53YmRfaW1lbV93ZV9vICAgICAgICAgICh3YmRfcmlzY3ZfaW1lbV93ZV9pICAgICAgICksIAorICAgIC53YmRfaW1lbV9kYXRfbyAgICAgICAgICh3YmRfcmlzY3ZfaW1lbV9kYXRfaSAgICAgICksCisgICAgLndiZF9pbWVtX3NlbF9vICAgICAgICAgKHdiZF9yaXNjdl9pbWVtX3NlbF9pICAgICAgKSwKKyAgICAud2JkX2ltZW1fZGF0X2kgICAgICAgICAod2JkX3Jpc2N2X2ltZW1fZGF0X28gICAgICApLAorICAgIC53YmRfaW1lbV9hY2tfaSAgICAgICAgICh3YmRfcmlzY3ZfaW1lbV9hY2tfbyAgICAgICksCisgICAgLndiZF9pbWVtX2Vycl9pICAgICAgICAgKHdiZF9yaXNjdl9pbWVtX2Vycl9vICAgICAgKSwKKworICAgIC8vIERhdGEgbWVtb3J5IGludGVyZmFjZQorICAgIC53YmRfZG1lbV9zdGJfbyAgICAgICAgICh3YmRfcmlzY3ZfZG1lbV9zdGJfaSAgICAgICksCisgICAgLndiZF9kbWVtX2Fkcl9vICAgICAgICAgKHdiZF9yaXNjdl9kbWVtX2Fkcl9pICAgICAgKSwKKyAgICAud2JkX2RtZW1fd2VfbyAgICAgICAgICAod2JkX3Jpc2N2X2RtZW1fd2VfaSAgICAgICApLCAKKyAgICAud2JkX2RtZW1fZGF0X28gICAgICAgICAod2JkX3Jpc2N2X2RtZW1fZGF0X2kgICAgICApLAorICAgIC53YmRfZG1lbV9zZWxfbyAgICAgICAgICh3YmRfcmlzY3ZfZG1lbV9zZWxfaSAgICAgICksCisgICAgLndiZF9kbWVtX2RhdF9pICAgICAgICAgKHdiZF9yaXNjdl9kbWVtX2RhdF9vICAgICAgKSwKKyAgICAud2JkX2RtZW1fYWNrX2kgICAgICAgICAod2JkX3Jpc2N2X2RtZW1fYWNrX28gICAgICApLAorICAgIC53YmRfZG1lbV9lcnJfaSAgICAgICAgICh3YmRfcmlzY3ZfZG1lbV9lcnJfbyAgICAgICkgCispOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNQSSBNYXN0ZXIKKyogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBhbiBTUEkgbWFzdGVyIHRoYXQgaXMgY29udHJvbGxlZCB2aWEgYW4gQVhJIGJ1cy4gCisqIEl0IGhhcyBGSUZPcyBmb3IgdHJhbnNtaXR0aW5nIGFuZCByZWNlaXZpbmcgZGF0YS4gCisqIEl0IHN1cHBvcnRzIGJvdGggdGhlIG5vcm1hbCBTUEkgbW9kZSBhbmQgUVBJIG1vZGUgd2l0aCA0IGRhdGEgbGluZXMuCisqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3NwaW1fdG9wCisjKAorYGlmbmRlZiBTWU5USEVTSVMKKyAgICAuV0JfV0lEVEggIChXQl9XSURUSCkKK2BlbmRpZgorKSB1X3NwaV9tYXN0ZXIKKygKKyAgICAubWNsayAgICAgICAgICAgICAgICAgICAod2JkX2Nsa19zcGkgICAgICAgICAgICAgICApLAorICAgIC5yc3RfbiAgICAgICAgICAgICAgICAgIChzcGlfcnN0X24gICAgICAgICAgICAgICAgICksCisKKyAgICAud2JkX3N0Yl9pICAgICAgICAgICAgICAod2JkX3NwaW1fc3RiX28gICAgICAgICAgICApLAorICAgIC53YmRfYWRyX2kgICAgICAgICAgICAgICh3YmRfc3BpbV9hZHJfbyAgICAgICAgICAgICksCisgICAgLndiZF93ZV9pICAgICAgICAgICAgICAgKHdiZF9zcGltX3dlX28gICAgICAgICAgICAgKSwgCisgICAgLndiZF9kYXRfaSAgICAgICAgICAgICAgKHdiZF9zcGltX2RhdF9vICAgICAgICAgICAgKSwKKyAgICAud2JkX3NlbF9pICAgICAgICAgICAgICAod2JkX3NwaW1fc2VsX28gICAgICAgICAgICApLAorICAgIC53YmRfZGF0X28gICAgICAgICAgICAgICh3YmRfc3BpbV9kYXRfaSAgICAgICAgICAgICksCisgICAgLndiZF9hY2tfbyAgICAgICAgICAgICAgKHdiZF9zcGltX2Fja19pICAgICAgICAgICAgKSwKKyAgICAud2JkX2Vycl9vICAgICAgICAgICAgICAod2JkX3NwaW1fZXJyX2kgICAgICAgICAgICApLAorCisgICAgLnNwaV9kZWJ1ZyAgICAgICAgICAgICAgKHNwaV9kZWJ1ZyAgICAgICAgICAgICAgICAgKSwKKworICAgIC8vIFBhZCBJbnRlcmZhY2UKKyAgICAuaW9faW4gICAgICAgICAgICAgICAgICAoaW9faW5bMzU6MzBdICAgICAgICAgICAgICApLAorICAgIC5pb19vdXQgICAgICAgICAgICAgICAgICh7aW9fb3V0WzM1OjMxXSxpb19pbl8zMF99ICksCisgICAgLmlvX29lYiAgICAgICAgICAgICAgICAgKGlvX29lYlszNTozMF0gICAgICAgICAgICAgKQorCispOworCisKK3NkcmNfdG9wICAKKyAgICBgaWZuZGVmIFNZTlRIRVNJUworICAgICMoLkFQUF9BVyhXQl9XSURUSCksIAorCSAgICAuQVBQX0RXKFdCX1dJRFRIKSwgCisJICAgIC5BUFBfQlcoNCksCisJICAgIC5TRFJfRFcoOCksIAorCSAgICAuU0RSX0JXKDEpKQorICAgICAgYGVuZGlmCisgICAgIHVfc2RyYW1fY3RybCAoCisgICAgLmNmZ19zZHJfd2lkdGggICAgICAgICAgKGNmZ19zZHJfd2lkdGggICAgICAgICAgICAgICksCisgICAgLmNmZ19jb2xiaXRzICAgICAgICAgICAgKGNmZ19jb2xiaXRzICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIAorICAgIC8vIFdCIGJ1cworICAgIC53Yl9yc3RfbiAgICAgICAgICAgICAgICh3YmRfaW50X3JzdF9uICAgICAgICAgICAgICApLAorICAgIC53Yl9jbGtfaSAgICAgICAgICAgICAgICh3YmRfY2xrX3NkcmFtICAgICAgICAgICAgICApLAorICAgIAorICAgIC53Yl9zdGJfaSAgICAgICAgICAgICAgICh3YmRfc2RyYW1fc3RiX28gICAgICAgICAgICApLAorICAgIC53Yl9hZGRyX2kgICAgICAgICAgICAgICh3YmRfc2RyYW1fYWRyX28gICAgICAgICAgICApLAorICAgIC53Yl93ZV9pICAgICAgICAgICAgICAgICh3YmRfc2RyYW1fd2VfbyAgICAgICAgICAgICApLAorICAgIC53Yl9kYXRfaSAgICAgICAgICAgICAgICh3YmRfc2RyYW1fZGF0X28gICAgICAgICAgICApLAorICAgIC53Yl9zZWxfaSAgICAgICAgICAgICAgICh3YmRfc2RyYW1fc2VsX28gICAgICAgICAgICApLAorICAgIC53Yl9jeWNfaSAgICAgICAgICAgICAgICh3YmRfc2RyYW1fY3ljX28gICAgICAgICAgICApLAorICAgIC53Yl9hY2tfbyAgICAgICAgICAgICAgICh3YmRfc2RyYW1fYWNrX2kgICAgICAgICAgICApLAorICAgIC53Yl9kYXRfbyAgICAgICAgICAgICAgICh3YmRfc2RyYW1fZGF0X2kgICAgICAgICAgICApLAorCisJCQorICAgIC8qIEludGVyZmFjZSB0byBTRFJBTXMgKi8KKyAgICAuc2RyYW1fY2xrICAgICAgICAgICAgICAoc2RyYW1fY2xrICAgICAgICAgICAgICAgICApLAorICAgIC5zZHJhbV9yZXNldG4gICAgICAgICAgIChzZHJhbV9yc3RfbiAgICAgICAgICAgICAgICksCisKKyAgICAvKiogUGFkIEludGVyZmFjZSAgICAgICAqKi8KKyAgICAuaW9faW4gICAgICAgICAgICAgICAgICAoe2lvX2luXzI5Xyxpb19pblsyODowXX0gICApLAorICAgIC5pb19vZWIgICAgICAgICAgICAgICAgIChpb19vZWJbMjk6MF0gICAgICAgICAgICAgICksCisgICAgLmlvX291dCAgICAgICAgICAgICAgICAgKHtpb19vdXRfMjlfLGlvX291dFsyODowXX0gKSwKKyAgICAgICAgICAgICAgICAgICAgCisgICAgLyogUGFyYW1ldGVycyAqLworICAgIC5zZHJfaW5pdF9kb25lICAgICAgICAgIChzZHJfaW5pdF9kb25lICAgICAgICAgICAgICksCisgICAgLmNmZ19yZXFfZGVwdGggICAgICAgICAgKGNmZ19yZXFfZGVwdGggICAgICAgICAgICAgKSwgLy9ob3cgbWFueSByZXEuIGJ1ZmZlciBzaG91bGQgaG9sZAorICAgIC5jZmdfc2RyX2VuICAgICAgICAgICAgIChjZmdfc2RyX2VuICAgICAgICAgICAgICAgICksCisgICAgLmNmZ19zZHJfbW9kZV9yZWcgICAgICAgKGNmZ19zZHJfbW9kZV9yZWcgICAgICAgICAgKSwKKyAgICAuY2ZnX3Nkcl90cmFzX2QgICAgICAgICAoY2ZnX3Nkcl90cmFzX2QgICAgICAgICAgICApLAorICAgIC5jZmdfc2RyX3RycF9kICAgICAgICAgIChjZmdfc2RyX3RycF9kICAgICAgICAgICAgICksCisgICAgLmNmZ19zZHJfdHJjZF9kICAgICAgICAgKGNmZ19zZHJfdHJjZF9kICAgICAgICAgICAgKSwKKyAgICAuY2ZnX3Nkcl9jYXMgICAgICAgICAgICAoY2ZnX3Nkcl9jYXMgICAgICAgICAgICAgICApLAorICAgIC5jZmdfc2RyX3RyY2FyX2QgICAgICAgIChjZmdfc2RyX3RyY2FyX2QgICAgICAgICAgICksCisgICAgLmNmZ19zZHJfdHdyX2QgICAgICAgICAgKGNmZ19zZHJfdHdyX2QgICAgICAgICAgICAgKSwKKyAgICAuY2ZnX3Nkcl9yZnNoICAgICAgICAgICAoY2ZnX3Nkcl9yZnNoICAgICAgICAgICAgICApLAorICAgIC5jZmdfc2RyX3JmbWF4ICAgICAgICAgIChjZmdfc2RyX3JmbWF4ICAgICAgICAgICAgICkKKyAgICk7CisKKword2JfaW50ZXJjb25uZWN0ICB1X2ludGVyY29uICgKKyAgICAgICAgIC5jbGtfaSAgICAgICAgICh3YmRfY2xrX3dpICAgICAgICAgICAgKSwgCisgICAgICAgICAucnN0X24gICAgICAgICAod2JkX2ludF9yc3RfbiAgICAgICAgICksCisKKyAgICAgICAgIC8vIE1hc3RlciAwIEludGVyZmFjZQorICAgICAgICAgLm0wX3diZF9kYXRfaSAgKHdiZF9pbnRfZGF0X2kgICAgICAgICApLAorICAgICAgICAgLm0wX3diZF9hZHJfaSAgKHdiZF9pbnRfYWRyX2kgICAgICAgICApLAorICAgICAgICAgLm0wX3diZF9zZWxfaSAgKHdiZF9pbnRfc2VsX2kgICAgICAgICApLAorICAgICAgICAgLm0wX3diZF93ZV9pICAgKHdiZF9pbnRfd2VfaSAgICAgICAgICApLAorICAgICAgICAgLm0wX3diZF9jeWNfaSAgKHdiZF9pbnRfY3ljX2kgICAgICAgICApLAorICAgICAgICAgLm0wX3diZF9zdGJfaSAgKHdiZF9pbnRfc3RiX2kgICAgICAgICApLAorICAgICAgICAgLm0wX3diZF9kYXRfbyAgKHdiZF9pbnRfZGF0X28gICAgICAgICApLAorICAgICAgICAgLm0wX3diZF9hY2tfbyAgKHdiZF9pbnRfYWNrX28gICAgICAgICApLAorICAgICAgICAgLm0wX3diZF9lcnJfbyAgKHdiZF9pbnRfZXJyX28gICAgICAgICApLAorICAgICAgICAgCisgICAgICAgICAvLyBNYXN0ZXIgMCBJbnRlcmZhY2UKKyAgICAgICAgIC5tMV93YmRfZGF0X2kgICh3YmRfcmlzY3ZfaW1lbV9kYXRfaSAgKSwKKyAgICAgICAgIC5tMV93YmRfYWRyX2kgICh3YmRfcmlzY3ZfaW1lbV9hZHJfaSAgKSwKKyAgICAgICAgIC5tMV93YmRfc2VsX2kgICh3YmRfcmlzY3ZfaW1lbV9zZWxfaSAgKSwKKyAgICAgICAgIC5tMV93YmRfd2VfaSAgICh3YmRfcmlzY3ZfaW1lbV93ZV9pICAgKSwKKyAgICAgICAgIC5tMV93YmRfY3ljX2kgICh3YmRfcmlzY3ZfaW1lbV9zdGJfaSAgKSwKKyAgICAgICAgIC5tMV93YmRfc3RiX2kgICh3YmRfcmlzY3ZfaW1lbV9zdGJfaSAgKSwKKyAgICAgICAgIC5tMV93YmRfZGF0X28gICh3YmRfcmlzY3ZfaW1lbV9kYXRfbyAgKSwKKyAgICAgICAgIC5tMV93YmRfYWNrX28gICh3YmRfcmlzY3ZfaW1lbV9hY2tfbyAgKSwKKyAgICAgICAgIC5tMV93YmRfZXJyX28gICh3YmRfcmlzY3ZfaW1lbV9lcnJfbyAgKSwKKyAgICAgICAgIAorICAgICAgICAgLy8gTWFzdGVyIDEgSW50ZXJmYWNlCisgICAgICAgICAubTJfd2JkX2RhdF9pICAod2JkX3Jpc2N2X2RtZW1fZGF0X2kgICksCisgICAgICAgICAubTJfd2JkX2Fkcl9pICAod2JkX3Jpc2N2X2RtZW1fYWRyX2kgICksCisgICAgICAgICAubTJfd2JkX3NlbF9pICAod2JkX3Jpc2N2X2RtZW1fc2VsX2kgICksCisgICAgICAgICAubTJfd2JkX3dlX2kgICAod2JkX3Jpc2N2X2RtZW1fd2VfaSAgICksCisgICAgICAgICAubTJfd2JkX2N5Y19pICAod2JkX3Jpc2N2X2RtZW1fc3RiX2kgICksCisgICAgICAgICAubTJfd2JkX3N0Yl9pICAod2JkX3Jpc2N2X2RtZW1fc3RiX2kgICksCisgICAgICAgICAubTJfd2JkX2RhdF9vICAod2JkX3Jpc2N2X2RtZW1fZGF0X28gICksCisgICAgICAgICAubTJfd2JkX2Fja19vICAod2JkX3Jpc2N2X2RtZW1fYWNrX28gICksCisgICAgICAgICAubTJfd2JkX2Vycl9vICAod2JkX3Jpc2N2X2RtZW1fZXJyX28gICksCisgICAgICAgICAKKyAgICAgICAgIAorICAgICAgICAgLy8gU2xhdmUgMCBJbnRlcmZhY2UKKyAgICAgICAgIC8vIC5zMF93YmRfZXJyX2kgICgxJ2IwICAgICAgICAgICApLCAtIE1vdmVkIGluc2lkZSBJUAorICAgICAgICAgLnMwX3diZF9kYXRfaSAgKHdiZF9zcGltX2RhdF9pICksCisgICAgICAgICAuczBfd2JkX2Fja19pICAod2JkX3NwaW1fYWNrX2kgKSwKKyAgICAgICAgIC5zMF93YmRfZGF0X28gICh3YmRfc3BpbV9kYXRfbyApLAorICAgICAgICAgLnMwX3diZF9hZHJfbyAgKHdiZF9zcGltX2Fkcl9vICksCisgICAgICAgICAuczBfd2JkX3NlbF9vICAod2JkX3NwaW1fc2VsX28gKSwKKyAgICAgICAgIC5zMF93YmRfd2VfbyAgICh3YmRfc3BpbV93ZV9vICApLCAgCisgICAgICAgICAuczBfd2JkX2N5Y19vICAod2JkX3NwaW1fY3ljX28gKSwKKyAgICAgICAgIC5zMF93YmRfc3RiX28gICh3YmRfc3BpbV9zdGJfbyApLAorICAgICAgICAgCisgICAgICAgICAvLyBTbGF2ZSAxIEludGVyZmFjZQorICAgICAgICAgLy8gLnMxX3diZF9lcnJfaSAgKDEnYjAgICAgICAgICAgICksIC0gTW92ZWQgaW5zaWRlIElQCisgICAgICAgICAuczFfd2JkX2RhdF9pICAod2JkX3NkcmFtX2RhdF9pICksCisgICAgICAgICAuczFfd2JkX2Fja19pICAod2JkX3NkcmFtX2Fja19pICksCisgICAgICAgICAuczFfd2JkX2RhdF9vICAod2JkX3NkcmFtX2RhdF9vICksCisgICAgICAgICAuczFfd2JkX2Fkcl9vICAod2JkX3NkcmFtX2Fkcl9vICksCisgICAgICAgICAuczFfd2JkX3NlbF9vICAod2JkX3NkcmFtX3NlbF9vICksCisgICAgICAgICAuczFfd2JkX3dlX28gICAod2JkX3NkcmFtX3dlX28gICksICAKKyAgICAgICAgIC5zMV93YmRfY3ljX28gICh3YmRfc2RyYW1fY3ljX28gKSwKKyAgICAgICAgIC5zMV93YmRfc3RiX28gICh3YmRfc2RyYW1fc3RiX28gKSwKKyAgICAgICAgIAorICAgICAgICAgLy8gU2xhdmUgMiBJbnRlcmZhY2UKKyAgICAgICAgIC8vIC5zMl93YmRfZXJyX2kgICgxJ2IwICAgICAgICAgICApLCAtIE1vdmVkIGluc2lkZSBJUAorICAgICAgICAgLnMyX3diZF9kYXRfaSAgKHdiZF9nbGJsX2RhdF9pICksCisgICAgICAgICAuczJfd2JkX2Fja19pICAod2JkX2dsYmxfYWNrX2kgKSwKKyAgICAgICAgIC5zMl93YmRfZGF0X28gICh3YmRfZ2xibF9kYXRfbyApLAorICAgICAgICAgLnMyX3diZF9hZHJfbyAgKHdiZF9nbGJsX2Fkcl9vICksCisgICAgICAgICAuczJfd2JkX3NlbF9vICAod2JkX2dsYmxfc2VsX28gKSwKKyAgICAgICAgIC5zMl93YmRfd2VfbyAgICh3YmRfZ2xibF93ZV9vICApLCAgCisgICAgICAgICAuczJfd2JkX2N5Y19vICAod2JkX2dsYmxfY3ljX28gKSwKKyAgICAgICAgIC5zMl93YmRfc3RiX28gICh3YmRfZ2xibF9zdGJfbyApLAorCisgICAgICAgICAvLyBTbGF2ZSAzIEludGVyZmFjZQorICAgICAgICAgLy8gLnMzX3diZF9lcnJfaSAgKDEnYjAgICAgICAgICAgICksIC0gTW92ZWQgaW5zaWRlIElQCisgICAgICAgICAuczNfd2JkX2RhdF9pICAod2JkX3VhcnRfZGF0X2kgKSwKKyAgICAgICAgIC5zM193YmRfYWNrX2kgICh3YmRfdWFydF9hY2tfaSApLAorICAgICAgICAgLnMzX3diZF9kYXRfbyAgKHdiZF91YXJ0X2RhdF9vICksCisgICAgICAgICAuczNfd2JkX2Fkcl9vICAod2JkX3VhcnRfYWRyX28gKSwKKyAgICAgICAgIC5zM193YmRfc2VsX28gICh3YmRfdWFydF9zZWxfbyApLAorICAgICAgICAgLnMzX3diZF93ZV9vICAgKHdiZF91YXJ0X3dlX28gICksICAKKyAgICAgICAgIC5zM193YmRfY3ljX28gICh3YmRfdWFydF9jeWNfbyApLAorICAgICAgICAgLnMzX3diZF9zdGJfbyAgKHdiZF91YXJ0X3N0Yl9vICkKKwkpOworCitnbGJsX2NmZyAgIHVfZ2xibF9jZmcgKAorCisgICAgICAgLm1jbGsgICAgICAgICAgICAgICAgICAgKHdiZF9jbGtfZ2xibCAgICAgICAgICAgICAgKSwKKyAgICAgICAucmVzZXRfbiAgICAgICAgICAgICAgICAod2JkX2ludF9yc3RfbiAgICAgICAgICAgICApLAorICAgICAgIC51c2VyX2Nsb2NrMSAgICAgICAgICAgICh3Yl9jbGtfaSAgICAgICAgICAgICAgICAgICksCisgICAgICAgLnVzZXJfY2xvY2syICAgICAgICAgICAgKHVzZXJfY2xvY2syICAgICAgICAgICAgICAgKSwKKyAgICAgICAuZGV2aWNlX2lkY29kZSAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICApLAorCisgICAgICAgIC8vIFJlZyBCdXMgSW50ZXJmYWNlIFNpZ25hbAorICAgICAgIC5yZWdfY3MgICAgICAgICAgICAgICAgICh3YmRfZ2xibF9zdGJfbyAgICAgICAgICAgICksCisgICAgICAgLnJlZ193ciAgICAgICAgICAgICAgICAgKHdiZF9nbGJsX3dlX28gICAgICAgICAgICAgKSwKKyAgICAgICAucmVnX2FkZHIgICAgICAgICAgICAgICAod2JkX2dsYmxfYWRyX28gICAgICAgICAgICApLAorICAgICAgIC5yZWdfd2RhdGEgICAgICAgICAgICAgICh3YmRfZ2xibF9kYXRfbyAgICAgICAgICAgICksCisgICAgICAgLnJlZ19iZSAgICAgICAgICAgICAgICAgKHdiZF9nbGJsX3NlbF9vICAgICAgICAgICAgKSwKKworICAgICAgIC8vIE91dHB1dHMKKyAgICAgICAucmVnX3JkYXRhICAgICAgICAgICAgICAod2JkX2dsYmxfZGF0X2kgICAgICAgICAgICApLAorICAgICAgIC5yZWdfYWNrICAgICAgICAgICAgICAgICh3YmRfZ2xibF9hY2tfaSAgICAgICAgICAgICksCisKKyAgICAgICAvLyBTRFJBTSBDbG9jaworCisgICAgICAgLnNkcmFtX2NsayAgICAgICAgICAgICAgKHNkcmFtX2NsayAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAuY3B1X2NsayAgICAgICAgICAgICAgICAoY3B1X2NsayAgICAgICAgICAgICAgICAgICApLAorICAgICAgIC5ydGNfY2xrICAgICAgICAgICAgICAgIChydGNfY2xrICAgICAgICAgICAgICAgICAgICksCisKKyAgICAgICAvLyBSaXNjIGNvbmZpZ3VyYXRpb24KKyAgICAgICAuZnVzZV9taGFydGlkICAgICAgICAgICAoZnVzZV9taGFydGlkICAgICAgICAgICAgICApLAorICAgICAgIC5pcnFfbGluZXMgICAgICAgICAgICAgIChpcnFfbGluZXMgICAgICAgICAgICAgICAgICksIAorICAgICAgIC5zb2Z0X2lycSAgICAgICAgICAgICAgIChzb2Z0X2lycSAgICAgICAgICAgICAgICAgICksCisgICAgICAgLnVzZXJfaXJxICAgICAgICAgICAgICAgKHVzZXJfaXJxICAgICAgICAgICAgICAgICAgKSwKKworICAgICAgIC8vIFNEUkFNIENvbmZpZworICAgICAgIC5jZmdfc2RyX3dpZHRoICAgICAgICAgIChjZmdfc2RyX3dpZHRoICAgICAgICAgICAgICksCisgICAgICAgLmNmZ19jb2xiaXRzICAgICAgICAgICAgKGNmZ19jb2xiaXRzICAgICAgICAgICAgICAgKSwKKworCS8qIFBhcmFtZXRlcnMgKi8KKyAgICAgICAuc2RyX2luaXRfZG9uZSAgICAgICAgICAoc2RyX2luaXRfZG9uZSAgICAgICAgICAgICApLAorICAgICAgIC5jZmdfcmVxX2RlcHRoICAgICAgICAgIChjZmdfcmVxX2RlcHRoICAgICAgICAgICAgICksIC8vaG93IG1hbnkgcmVxLiBidWZmZXIgc2hvdWxkIGhvbGQKKyAgICAgICAuY2ZnX3Nkcl9lbiAgICAgICAgICAgICAoY2ZnX3Nkcl9lbiAgICAgICAgICAgICAgICApLAorICAgICAgIC5jZmdfc2RyX21vZGVfcmVnICAgICAgIChjZmdfc2RyX21vZGVfcmVnICAgICAgICAgICksCisgICAgICAgLmNmZ19zZHJfdHJhc19kICAgICAgICAgKGNmZ19zZHJfdHJhc19kICAgICAgICAgICAgKSwKKyAgICAgICAuY2ZnX3Nkcl90cnBfZCAgICAgICAgICAoY2ZnX3Nkcl90cnBfZCAgICAgICAgICAgICApLAorICAgICAgIC5jZmdfc2RyX3RyY2RfZCAgICAgICAgIChjZmdfc2RyX3RyY2RfZCAgICAgICAgICAgICksCisgICAgICAgLmNmZ19zZHJfY2FzICAgICAgICAgICAgKGNmZ19zZHJfY2FzICAgICAgICAgICAgICAgKSwKKyAgICAgICAuY2ZnX3Nkcl90cmNhcl9kICAgICAgICAoY2ZnX3Nkcl90cmNhcl9kICAgICAgICAgICApLAorICAgICAgIC5jZmdfc2RyX3R3cl9kICAgICAgICAgIChjZmdfc2RyX3R3cl9kICAgICAgICAgICAgICksCisgICAgICAgLmNmZ19zZHJfcmZzaCAgICAgICAgICAgKGNmZ19zZHJfcmZzaCAgICAgICAgICAgICAgKSwKKyAgICAgICAuY2ZnX3Nkcl9yZm1heCAgICAgICAgICAoY2ZnX3Nkcl9yZm1heCAgICAgICAgICAgICApCisKKworICAgICAgICApOworCit1YXJ0X2NvcmUgICB1X3VhcnRfY29yZSAoCisgICAgICAgIC5hcnN0X24gICAgICAgICAgICAgICAgICh3YmRfaW50X3JzdF9uICAgICAgICAgICAgKSwgLy8gYXN5bmMgcmVzZXQKKyAgICAgICAgLmFwcF9jbGsgICAgICAgICAgICAgICAgKHdiZF9jbGtfdWFydCAgICAgICAgICAgICApLAorCisgICAgICAgIC8vIFJlZyBCdXMgSW50ZXJmYWNlIFNpZ25hbAorICAgICAgIC5yZWdfY3MgICAgICAgICAgICAgICAgICh3YmRfdWFydF9zdGJfbyAgICAgICAgICAgICksCisgICAgICAgLnJlZ193ciAgICAgICAgICAgICAgICAgKHdiZF91YXJ0X3dlX28gICAgICAgICAgICAgKSwKKyAgICAgICAucmVnX2FkZHIgICAgICAgICAgICAgICAod2JkX3VhcnRfYWRyX29bNToyXSAgICAgICApLAorICAgICAgIC5yZWdfd2RhdGEgICAgICAgICAgICAgICh3YmRfdWFydF9kYXRfb1s3OjBdICAgICAgICksCisgICAgICAgLnJlZ19iZSAgICAgICAgICAgICAgICAgKHdiZF91YXJ0X3NlbF9vICAgICAgICAgICAgKSwKKworICAgICAgIC8vIE91dHB1dHMKKyAgICAgICAucmVnX3JkYXRhICAgICAgICAgICAgICAod2JkX3VhcnRfZGF0X2lbNzowXSAgICAgICApLAorICAgICAgIC5yZWdfYWNrICAgICAgICAgICAgICAgICh3YmRfdWFydF9hY2tfaSAgICAgICAgICAgICksCisKKyAgICAgICAvLyBQYWQgaW50ZXJmYWNlCisgICAgICAgLmlvX2luICAgICAgICAgICAgICAgICAgKGlvX2luIFszNzozNl0gICAgICAgICAgICAgICksCisgICAgICAgLmlvX29lYiAgICAgICAgICAgICAgICAgKGlvX29lYlszNzozNl0gICAgICAgICAgICAgICksCisgICAgICAgLmlvX291dCAgICAgICAgICAgICAgICAgKGlvX291dFszNzozNl0gICAgICAgICAgICAgICkKKworICAgICApOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBDbG9jayBTa2V3IGFkanVzdCBtb2R1bGUKKy8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vIFdpc2hib25lIGludGVyY29ubmVjdCBjbG9jayBza2V3IGNvbnRyb2wKK2Nsa19za2V3X2FkanVzdCB1X3NrZXdfd2kKKyAgICAgICAoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgICAgICAgIC52Y2NkMSAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgICAgICAudnNzZDEgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisJICAgICAgIC5jbGtfaW4gICAgICh3YmRfY2xrX2ludCAgICAgICAgICAgICAgICAgKSwgCisJICAgICAgIC5zZWwgICAgICAgIChjZmdfY3NrYV93aSAgICAgICAgICAgICAgICAgKSwgCisJICAgICAgIC5jbGtfb3V0ICAgICh3YmRfY2xrX3dpICAgICAgICAgICAgICAgICAgKSAKKyAgICAgICApOworCisvLyByaXNjdiBjbG9jayBza2V3IGNvbnRyb2wKK2Nsa19za2V3X2FkanVzdCB1X3NrZXdfcmlzY3YKKyAgICAgICAoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgICAgICAgIC52Y2NkMSAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgICAgICAudnNzZDEgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisJICAgICAgIC5jbGtfaW4gICAgICh3YmRfY2xrX2ludCAgICAgICAgICAgICAgICAgKSwgCisJICAgICAgIC5zZWwgICAgICAgIChjZmdfY3NrYV9yaXNjdiAgICAgICAgICAgICAgKSwgCisJICAgICAgIC5jbGtfb3V0ICAgICh3YmRfY2xrX3Jpc2N2ICAgICAgICAgICAgICAgKSAKKyAgICAgICApOworCisvLyB1YXJ0IGNsb2NrIHNrZXcgY29udHJvbAorY2xrX3NrZXdfYWRqdXN0IHVfc2tld191YXJ0CisgICAgICAgKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgICAgICAgICAudmNjZDEgICAgICAodmNjZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgICAgICAgICAgICAgLnZzc2QxICAgICAgKHZzc2QxICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorCSAgICAgICAuY2xrX2luICAgICAod2JkX2Nsa19pbnQgICAgICAgICAgICAgICAgICksIAorCSAgICAgICAuc2VsICAgICAgICAoY2ZnX2Nza2FfdWFydCAgICAgICAgICAgICAgICksIAorCSAgICAgICAuY2xrX291dCAgICAod2JkX2Nsa191YXJ0ICAgICAgICAgICAgICAgICkgCisgICAgICAgKTsKKworLy8gc3BpIGNsb2NrIHNrZXcgY29udHJvbAorY2xrX3NrZXdfYWRqdXN0IHVfc2tld19zcGkKKyAgICAgICAoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgICAgICAgIC52Y2NkMSAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgICAgICAudnNzZDEgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisJICAgICAgIC5jbGtfaW4gICAgICh3YmRfY2xrX2ludCAgICAgICAgICAgICAgICApLCAKKwkgICAgICAgLnNlbCAgICAgICAgKGNmZ19jc2thX3NwaSAgICAgICAgICAgICAgICksIAorCSAgICAgICAuY2xrX291dCAgICAod2JkX2Nsa19zcGkgICAgICAgICAgICAgICAgKSAKKyAgICAgICApOworCisvLyBzZHJhbSBjbG9jayBza2V3IGNvbnRyb2wKK2Nsa19za2V3X2FkanVzdCB1X3NrZXdfc2RyYW0KKyAgICAgICAoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgICAgICAgIC52Y2NkMSAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgICAgICAudnNzZDEgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisJICAgICAgIC5jbGtfaW4gICAgICh3YmRfY2xrX2ludCAgICAgICAgICAgICAgICApLCAKKwkgICAgICAgLnNlbCAgICAgICAgKGNmZ19jc2thX3NkcmFtICAgICAgICAgICAgICksIAorCSAgICAgICAuY2xrX291dCAgICAod2JkX2Nsa19zZHJhbSAgICAgICAgICAgICAgKSAKKyAgICAgICApOworCisvLyBnbG9iYWwgY2xvY2sgc2tldyBjb250cm9sCitjbGtfc2tld19hZGp1c3QgdV9za2V3X2dsYmwKKyAgICAgICAoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgICAgICAgIC52Y2NkMSAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgICAgICAudnNzZDEgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisJICAgICAgIC5jbGtfaW4gICAgICh3YmRfY2xrX2ludCAgICAgICAgICAgICAgICksIAorCSAgICAgICAuc2VsICAgICAgICAoY2ZnX2Nza2FfZ2xibCAgICAgICAgICAgICApLCAKKwkgICAgICAgLmNsa19vdXQgICAgKHdiZF9jbGtfZ2xibCAgICAgICAgICAgICAgKSAKKyAgICAgICApOworCisvLyB3Yl9ob3N0IGNsb2NrIHNrZXcgY29udHJvbAorY2xrX3NrZXdfYWRqdXN0IHVfc2tld193aAorICAgICAgICgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgICAgICAgICAgICAgLnZjY2QxICAgICAgKHZjY2QxICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICAgICAgICAgICAgIC52c3NkMSAgICAgICh2c3NkMSAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKwkgICAgICAgLmNsa19pbiAgICAgKHdiZF9jbGtfaW50ICAgICAgICAgICAgICAgKSwgCisJICAgICAgIC5zZWwgICAgICAgIChjZmdfY3NrYV93aCAgICAgICAgICAgICAgICksIAorCSAgICAgICAuY2xrX291dCAgICAod2JkX2Nsa193aCAgICAgICAgICAgICAgICApIAorICAgICAgICk7CisKKy8vIFNEUkFNIGNsb2NrIG91dCBjbG9jayBza2V3IGNvbnRyb2wKK2Nsa19za2V3X2FkanVzdCB1X3NrZXdfc2RfY28KKyAgICAgICAoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgICAgICAgIC52Y2NkMSAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgICAgICAudnNzZDEgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisJICAgICAgIC5jbGtfaW4gICAgIChpb19vdXRfMjlfICAgICAgICAgICAgICAgICksIAorCSAgICAgICAuc2VsICAgICAgICAoY2ZnX2Nza2Ffc2RfY28gICAgICAgICAgICApLCAKKwkgICAgICAgLmNsa19vdXQgICAgKGlvX291dFsyOV0gICAgICAgICAgICAgICAgKSAKKyAgICAgICApOworCisvLyBDbG9jayBTa2V5IGZvciBQQUQgU0RSQU0gY2xvY2sKK2Nsa19za2V3X2FkanVzdCB1X3NrZXdfc2RfY2kKKyAgICAgICAoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgICAgICAgIC52Y2NkMSAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgICAgICAudnNzZDEgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisJICAgICAgIC5jbGtfaW4gICAgIChzZHJhbV9jbGsgICAgICAgICAgICAgICAgICksIAorCSAgICAgICAuc2VsICAgICAgICAoY2ZnX2Nza2Ffc2RfY2kgICAgICAgICAgICApLCAKKwkgICAgICAgLmNsa19vdXQgICAgKGlvX2luXzI5XyAgICAgICAgICAgICAgICAgKSAKKyAgICAgICApOworCisvLyBDbG9jayBTa2V5IGZvciBTUEkgY2xvY2sgb3V0CitjbGtfc2tld19hZGp1c3QgdV9za2V3X3NwX2NvCisgICAgICAgKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgICAgICAgICAudmNjZDEgICAgICAodmNjZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgICAgICAgICAgICAgLnZzc2QxICAgICAgKHZzc2QxICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorCSAgICAgICAuY2xrX2luICAgICAoaW9faW5fMzBfICAgICAgICAgICAgICAgICApLCAKKwkgICAgICAgLnNlbCAgICAgICAgKGNmZ19jc2thX3NwX2NvICAgICAgICAgICAgKSwgCisJICAgICAgIC5jbGtfb3V0ICAgIChpb19vdXRbMzBdICAgICAgICAgICAgICAgICkgCisgICAgICAgKTsKKworZW5kbW9kdWxlIDogZGlnaXRhbF9jb3JlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9kaWdpdGFsX2NvcmUvc3JjL2dsYmxfY2ZnLnN2IGIvdmVyaWxvZy9ydGwvZGlnaXRhbF9jb3JlL3NyYy9nbGJsX2NmZy5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODUyZTE5Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvZGlnaXRhbF9jb3JlL3NyYy9nbGJsX2NmZy5zdgpAQCAtMCwwICsxLDEwNDEgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgR2xvYmFsIGNvbmZnIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFlJRml2ZSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWlmaXZlX3IwLmdpdCAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3lpZml2ZS8gICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIFRoaXMgYmxvY2sgZ2VuZXJhdGUgYWxsIHRoZSBnbG9iYWwgY29uZmlnIGFuZCBzdGF0dXMgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjEgLSAwOCBKdW5lIDIwMjEgIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBJbml0aWFsIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLworLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLworLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLworLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLworLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLworLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLworLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLworLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLworLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCittb2R1bGUgZ2xibF9jZmcgKAorCisgICAgICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgIG1jbGssCisgICAgICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgIHJlc2V0X24sCisKKyAgICAgICAgLy8gUmVnIEJ1cyBJbnRlcmZhY2UgU2lnbmFsCisgICAgICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgIHJlZ19jcywKKyAgICAgICAgaW5wdXQgbG9naWMgICAgICAgICAgICAgcmVnX3dyLAorICAgICAgICBpbnB1dCBsb2dpYyBbNzowXSAgICAgICByZWdfYWRkciwKKyAgICAgICAgaW5wdXQgbG9naWMgWzMxOjBdICAgICAgcmVnX3dkYXRhLAorICAgICAgICBpbnB1dCBsb2dpYyBbMzowXSAgICAgICByZWdfYmUsCisKKyAgICAgICAvLyBPdXRwdXRzCisgICAgICAgIG91dHB1dCBsb2dpYyBbMzE6MF0gICAgIHJlZ19yZGF0YSwKKyAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgcmVnX2FjaywKKworICAgICAgIC8vIFJpc2MgY29uZmlndXJhdGlvbgorICAgICAgIG91dHB1dCBsb2dpYyBbMzE6MF0gICAgIGZ1c2VfbWhhcnRpZCwKKyAgICAgICBvdXRwdXQgbG9naWMgWzE1OjBdICAgICBpcnFfbGluZXMsCisgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgc29mdF9pcnEsCisgICAgICAgb3V0cHV0IGxvZ2ljIFsyOjBdICAgICAgdXNlcl9pcnEsCisKKyAgICAgICAvLyBTRFJBTSBDb25maWcKKyAgICAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICBzZHJfaW5pdF9kb25lICAgICAgICwgLy8gSW5kaWNhdGUgU0RSQU0gSW5pdGlhbGlzYXRpb24gRG9uZQorICAgICAgIG91dHB1dCBsb2dpYyBbMTowXSAgICAgIGNmZ19zZHJfd2lkdGggICAgICAgLCAvLyAyJ2IwMCAtIDMyIEJpdCBTRFIsIDInYjAxIC0gMTYgQml0IFNEUiwgMidiMXggLSA4IEJpdAorICAgICAgIG91dHB1dCBsb2dpYyBbMTowXSAgICAgIGNmZ19jb2xiaXRzICAgICAgICAgLCAvLyAyJ2IwMCAtIDggQml0IGNvbHVtbiBhZGRyZXNzLCAKKyAgICAgICBvdXRwdXQgbG9naWMgWzM6MF0gICAgICBjZmdfc2RyX3RyYXNfZCAgICAgICwgLy8gQWN0aXZlIHRvIHByZWNoYXJnZSBkZWxheQorICAgICAgIG91dHB1dCBsb2dpYyBbMzowXSAgICAgIGNmZ19zZHJfdHJwX2QgICAgICAgLCAvLyBQcmVjaGFyZ2UgdG8gYWN0aXZlIGRlbGF5CisgICAgICAgb3V0cHV0IGxvZ2ljIFszOjBdICAgICAgY2ZnX3Nkcl90cmNkX2QgICAgICAsIC8vIEFjdGl2ZSB0byBSL1cgZGVsYXkKKyAgICAgICBvdXRwdXQgbG9naWMgCSAgICAgICBjZmdfc2RyX2VuICAgICAgICAgICwgLy8gRW5hYmxlIFNEUkFNIGNvbnRyb2xsZXIKKyAgICAgICBvdXRwdXQgbG9naWMgWzE6MF0gICAgICBjZmdfcmVxX2RlcHRoICAgICAgICwgLy8gTWF4aW11bSBSZXF1ZXN0IGFjY2VwdGVkIGJ5IFNEUkFNIGNvbnRyb2xsZXIKKyAgICAgICBvdXRwdXQgbG9naWMgWzEyOjBdICAgICBjZmdfc2RyX21vZGVfcmVnICAgICwKKyAgICAgICBvdXRwdXQgbG9naWMgWzI6MF0gICAgICBjZmdfc2RyX2NhcyAgICAgICAgICwgLy8gU0RSQU0gQ0FTIExhdGVuY3kKKyAgICAgICBvdXRwdXQgbG9naWMgWzM6MF0gICAgICBjZmdfc2RyX3RyY2FyX2QgICAgICwgLy8gQXV0by1yZWZyZXNoIHBlcmlvZAorICAgICAgIG91dHB1dCBsb2dpYyBbMzowXSAgICAgIGNmZ19zZHJfdHdyX2QgICAgICAgLCAvLyBXcml0ZSByZWNvdmVyeSBkZWxheQorICAgICAgIG91dHB1dCBsb2dpYyBbMTE6MF0gICAgIGNmZ19zZHJfcmZzaCAgICAgICAgLAorICAgICAgIG91dHB1dCBsb2dpYyBbMjowXSAgICAgIGNmZ19zZHJfcmZtYXggICAgICAgCisKKworICAgICAgICApOworCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSW50ZXJuYWwgV2lyZSBEZWNsYXJhdGlvbnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbG9naWMgICAgICAgICAgIHN3X3JkX2VuOworbG9naWMgICAgICAgICAgIHN3X3dyX2VuOworbG9naWMgIFszOjBdICAgIHN3X2FkZHIgOyAvLyBhZGRyZXNzaW5nIDE2IHJlZ2lzdGVycworbG9naWMgIFszOjBdICAgIHdyX2JlICAgOworbG9naWMgIFszMTowXSAgIHN3X3JlZ193ZGF0YTsKKworbG9naWMgICAgICAgICAgIHJlZ19jc19sICAgIDsKK2xvZ2ljICAgICAgICAgICByZWdfY3NfMmwgICAgOworCisKK2xvZ2ljIFszMTowXSAgICByZWdfMDsgIC8vIFNvZnR3YXJlX1JlZ18wCitsb2dpYyBbMzE6MF0gICAgcmVnXzE7ICAvLyBSaXNjIEZ1c2UgSUQKK2xvZ2ljIFszMTowXSAgICByZWdfMjsgIC8vIFNvZnR3YXJlLVJlZ18yCitsb2dpYyBbMzE6MF0gICAgcmVnXzM7ICAvLyBJbnRlcnJ1cCBDb250cm9sCitsb2dpYyBbMzE6MF0gICAgcmVnXzQ7ICAvLyBTRFJBTV9DVFJMMQorbG9naWMgWzMxOjBdICAgIHJlZ181OyAgLy8gU0RSQU1fQ1RSTDIKK2xvZ2ljIFszMTowXSAgICByZWdfNjsgIC8vIFNvZnR3YXJlLVJlZ182Citsb2dpYyBbMzE6MF0gICAgcmVnXzc7ICAvLyBTb2Z0d2FyZS1SZWdfNworbG9naWMgWzMxOjBdICAgIHJlZ184OyAgLy8gU29mdHdhcmUtUmVnXzgKK2xvZ2ljIFszMTowXSAgICByZWdfOTsgIC8vIFNvZnR3YXJlLVJlZ185Citsb2dpYyBbMzE6MF0gICAgcmVnXzEwOyAvLyBTb2Z0d2FyZS1SZWdfMTAKK2xvZ2ljIFszMTowXSAgICByZWdfMTE7IC8vIFNvZnR3YXJlLVJlZ18xMQorbG9naWMgWzMxOjBdICAgIHJlZ18xMjsgLy8gU29mdHdhcmUtUmVnXzEyCitsb2dpYyBbMzE6MF0gICAgcmVnXzEzOyAvLyBTb2Z0d2FyZS1SZWdfMTMKK2xvZ2ljIFszMTowXSAgICByZWdfMTQ7IC8vIFNvZnR3YXJlLVJlZ18xNAorbG9naWMgWzMxOjBdICAgIHJlZ18xNTsgLy8gU29mdHdhcmUtUmVnXzE1Citsb2dpYyBbMzE6MF0gICAgcmVnX291dDsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTWFpbiBjb2RlIHN0YXJ0cyBoZXJlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRvIGF2b2lkIGludGVyZmFjZSB0aW1pbmcsIGFsbCB0aGUgY29udGVudCBhcmUgcmVnaXN0ZXJlZAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWx3YXlzIEAgKHBvc2VkZ2UgbWNsayBvciBuZWdlZGdlIHJlc2V0X24pCitiZWdpbiAKKyAgIGlmIChyZXNldF9uID09IDEnYjApCisgICBiZWdpbgorICAgIHN3X2FkZHIgICAgICAgPD0gJzA7CisgICAgc3dfcmRfZW4gICAgICA8PSAnMDsKKyAgICBzd193cl9lbiAgICAgIDw9ICcwOworICAgIHN3X3JlZ193ZGF0YSAgPD0gJzA7CisgICAgd3JfYmUgICAgICAgICA8PSAnMDsKKyAgICByZWdfY3NfbCAgICAgIDw9ICcwOworICAgIHJlZ19jc18ybCAgICAgPD0gJzA7CisgIGVuZCBlbHNlIGJlZ2luCisgICAgc3dfYWRkciAgICAgICA8PSByZWdfYWRkciBbNToyXTsKKyAgICBzd19yZF9lbiAgICAgIDw9IHJlZ19jcyAmICFyZWdfd3I7CisgICAgc3dfd3JfZW4gICAgICA8PSByZWdfY3MgJiByZWdfd3I7CisgICAgc3dfcmVnX3dkYXRhICA8PSByZWdfd2RhdGE7CisgICAgd3JfYmUgICAgICAgICA8PSByZWdfYmU7CisgICAgcmVnX2NzX2wgICAgICA8PSByZWdfY3M7CisgICAgcmVnX2NzXzJsICAgICA8PSByZWdfY3NfbDsKKyAgZW5kCitlbmQKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZWFkIHBhdGggbXV4CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fsd2F5cyBAIChwb3NlZGdlIG1jbGsgb3IgbmVnZWRnZSByZXNldF9uKQorYmVnaW4gOiBwcmVnX291dF9TZXEKKyAgIGlmIChyZXNldF9uID09IDEnYjApIGJlZ2luCisgICAgICByZWdfcmRhdGEgWzMxOjBdICA8PSAzMidoMDAwMF8wMDAwOworICAgICAgcmVnX2FjayAgICAgICAgICAgPD0gMSdiMDsKKyAgIGVuZCBlbHNlIGlmIChzd19yZF9lbiAmJiAhcmVnX2FjayAmJiAhcmVnX2NzXzJsKSBiZWdpbgorICAgICAgcmVnX3JkYXRhIFszMTowXSAgPD0gcmVnX291dCBbMzE6MF07CisgICAgICByZWdfYWNrICAgICAgICAgICA8PSAxJ2IxOworICAgZW5kIGVsc2UgaWYgKHN3X3dyX2VuICYmICFyZWdfYWNrICYmICFyZWdfY3NfMmwpIGJlZ2luIAorICAgICAgcmVnX2FjayAgICAgICAgICAgPD0gMSdiMTsKKyAgIGVuZCBlbHNlIGJlZ2luCisgICAgICByZWdfYWNrICAgICAgICA8PSAxJ2IwOworICAgZW5kCitlbmQKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyByZWdpc3RlciByZWFkIGVuYWJsZSBhbmQgd3JpdGUgZW5hYmxlIGRlY29kaW5nIGxvZ2ljCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlICAgc3dfd3JfZW5fMCA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoMCk7Cit3aXJlICAgc3dfcmRfZW5fMCA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoMCk7Cit3aXJlICAgc3dfd3JfZW5fMSA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoMSk7Cit3aXJlICAgc3dfcmRfZW5fMSA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoMSk7Cit3aXJlICAgc3dfd3JfZW5fMiA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoMik7Cit3aXJlICAgc3dfcmRfZW5fMiA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoMik7Cit3aXJlICAgc3dfd3JfZW5fMyA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoMyk7Cit3aXJlICAgc3dfcmRfZW5fMyA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoMyk7Cit3aXJlICAgc3dfd3JfZW5fNCA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoNCk7Cit3aXJlICAgc3dfcmRfZW5fNCA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoNCk7Cit3aXJlICAgc3dfd3JfZW5fNSA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoNSk7Cit3aXJlICAgc3dfcmRfZW5fNSA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoNSk7Cit3aXJlICAgc3dfd3JfZW5fNiA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoNik7Cit3aXJlICAgc3dfcmRfZW5fNiA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoNik7Cit3aXJlICAgc3dfd3JfZW5fNyA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoNyk7Cit3aXJlICAgc3dfcmRfZW5fNyA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoNyk7Cit3aXJlICAgc3dfd3JfZW5fOCA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoOCk7Cit3aXJlICAgc3dfcmRfZW5fOCA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoOCk7Cit3aXJlICAgc3dfd3JfZW5fOSA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoOSk7Cit3aXJlICAgc3dfcmRfZW5fOSA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoOSk7Cit3aXJlICAgc3dfd3JfZW5fMTAgPSBzd193cl9lbiAmIChzd19hZGRyID09IDQnaEEpOword2lyZSAgIHN3X3JkX2VuXzEwID0gc3dfcmRfZW4gJiAoc3dfYWRkciA9PSA0J2hBKTsKK3dpcmUgICBzd193cl9lbl8xMSA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoQik7Cit3aXJlICAgc3dfcmRfZW5fMTEgPSBzd19yZF9lbiAmIChzd19hZGRyID09IDQnaEIpOword2lyZSAgIHN3X3dyX2VuXzEyID0gc3dfd3JfZW4gJiAoc3dfYWRkciA9PSA0J2hDKTsKK3dpcmUgICBzd19yZF9lbl8xMiA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoQyk7Cit3aXJlICAgc3dfd3JfZW5fMTMgPSBzd193cl9lbiAmIChzd19hZGRyID09IDQnaEQpOword2lyZSAgIHN3X3JkX2VuXzEzID0gc3dfcmRfZW4gJiAoc3dfYWRkciA9PSA0J2hEKTsKK3dpcmUgICBzd193cl9lbl8xNCA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoRSk7Cit3aXJlICAgc3dfcmRfZW5fMTQgPSBzd19yZF9lbiAmIChzd19hZGRyID09IDQnaEUpOword2lyZSAgIHN3X3dyX2VuXzE1ID0gc3dfd3JfZW4gJiAoc3dfYWRkciA9PSA0J2hGKTsKK3dpcmUgICBzd19yZF9lbl8xNSA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoRik7CisKKworYWx3YXlzIEAoICopCitiZWdpbiA6IHByZWdfc2VsX0NvbQorCisgIHJlZ19vdXQgWzMxOjBdID0gMzInZDA7CisKKyAgY2FzZSAoc3dfYWRkciBbMzowXSkKKyAgICA0J2IwMDAwIDogcmVnX291dCBbMzE6MF0gPSByZWdfMCBbMzE6MF07ICAgICAKKyAgICA0J2IwMDAxIDogcmVnX291dCBbMzE6MF0gPSByZWdfMSBbMzE6MF07ICAgIAorICAgIDQnYjAwMTAgOiByZWdfb3V0IFszMTowXSA9IHJlZ18yIFszMTowXTsgICAgIAorICAgIDQnYjAwMTEgOiByZWdfb3V0IFszMTowXSA9IHJlZ18zIFszMTowXTsgICAgCisgICAgNCdiMDEwMCA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzQgWzMxOjBdOyAgICAKKyAgICA0J2IwMTAxIDogcmVnX291dCBbMzE6MF0gPSByZWdfNSBbMzE6MF07ICAgIAorICAgIDQnYjAxMTAgOiByZWdfb3V0IFszMTowXSA9IHJlZ182IFszMTowXTsgICAgCisgICAgNCdiMDExMSA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzcgWzMxOjBdOyAgICAKKyAgICA0J2IxMDAwIDogcmVnX291dCBbMzE6MF0gPSByZWdfOCBbMzE6MF07ICAgIAorICAgIDQnYjEwMDEgOiByZWdfb3V0IFszMTowXSA9IHJlZ185IFszMTowXTsgICAgCisgICAgNCdiMTAxMCA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzEwIFszMTowXTsgICAKKyAgICA0J2IxMDExIDogcmVnX291dCBbMzE6MF0gPSByZWdfMTEgWzMxOjBdOyAgIAorICAgIDQnYjExMDAgOiByZWdfb3V0IFszMTowXSA9IHJlZ18xMiBbMzE6MF07ICAgCisgICAgNCdiMTEwMSA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzEzIFszMTowXTsKKyAgICA0J2IxMTEwIDogcmVnX291dCBbMzE6MF0gPSByZWdfMTQgWzMxOjBdOworICAgIDQnYjExMTEgOiByZWdfb3V0IFszMTowXSA9IHJlZ18xNSBbMzE6MF07IAorICBlbmRjYXNlCitlbmQKKworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEluZGl2aWR1YWwgcmVnaXN0ZXIgYXNzaWdubWVudHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgcmVnLTAKKy8vICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDgnaEFBICApIHVfcmVnMF9iZTAgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl8wICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVswXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbNzowXSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18wWzc6MF0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoOCw4J2hCQiAgKSB1X3JlZzBfYmUxICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMCAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMV0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzE1OjhdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzBbMTU6OF0gICAgICAgICkKKyAgICAgICAgICApOworZ2VuZXJpY19yZWdpc3RlciAjKDgsOCdoQ0MgICkgdV9yZWcwX2JlMiAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzAgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzJdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVsyMzoxNl0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMFsyMzoxNl0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoOCw4J2hERCAgKSB1X3JlZzBfYmUzICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMCAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbM10gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzMxOjI0XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18wWzMxOjI0XSAgICAgICAgKQorICAgICAgICAgICk7CisKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgIHJlZy0xLCByZXNldCB2YWx1ZSA9IDMyJ2hBNTVBX0E1NUEKKy8vICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXNzaWduICBmdXNlX21oYXJ0aWQgICAgID0gcmVnXzFbMzE6MF07IAorZ2VuZXJpY19yZWdpc3RlciAjKC5XRCg4KSwuUkVTRVRfREVGQVVMVCg4J2g1QSkpIHVfcmVnMV9iZTAgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl8xICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVswXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbNzowXSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18xWzc6MF0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoLldEKDgpLC5SRVNFVF9ERUZBVUxUKDgnaEE1KSAgKSB1X3JlZzFfYmUxICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMSAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMV0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzE1OjhdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzFbMTU6OF0gICAgICAgICkKKyAgICAgICAgICApOworZ2VuZXJpY19yZWdpc3RlciAjKC5XRCg4KSwuUkVTRVRfREVGQVVMVCg4J2g1QSkgICkgdV9yZWcxX2JlMiAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzEgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzJdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVsyMzoxNl0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMVsyMzoxNl0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoLldEKDgpLC5SRVNFVF9ERUZBVUxUKDgnaEE1KSAgKSB1X3JlZzFfYmUzICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMSAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbM10gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzMxOjI0XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18xWzMxOjI0XSAgICAgICAgKQorICAgICAgICAgICk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgcmVnLTIsIHJlc2V0IHZhbHVlID0gMzInaEFBQkJDQ0RECisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2dlbmVyaWNfcmVnaXN0ZXIgIyguV0QoOCksLlJFU0VUX0RFRkFVTFQoOCdoREQpICApIHVfcmVnMl9iZTAgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl8yICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVswXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbNzowXSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18yWzc6MF0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoLldEKDgpLC5SRVNFVF9ERUZBVUxUKDgnaENDKSAgKSB1X3JlZzJfYmUxICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMiAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMV0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzE1OjhdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzJbMTU6OF0gICAgICAgICkKKyAgICAgICAgICApOworZ2VuZXJpY19yZWdpc3RlciAjKC5XRCg4KSwuUkVTRVRfREVGQVVMVCg4J2hCQikgICkgdV9yZWcyX2JlMiAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzIgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzJdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVsyMzoxNl0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMlsyMzoxNl0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoLldEKDgpLC5SRVNFVF9ERUZBVUxUKDgnaEFBKSAgKSB1X3JlZzJfYmUzICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMiAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbM10gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzMxOjI0XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18yWzMxOjI0XSAgICAgICAgKQorICAgICAgICAgICk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgcmVnLTMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiAgaXJxX2xpbmVzICAgICA9IHJlZ18zWzE1OjBdOyAKK2Fzc2lnbiAgc29mdF9pcnEgICAgICA9IHJlZ18zWzE2XTsgCithc3NpZ24gIHVzZXJfaXJxICAgICAgPSByZWdfM1sxOToxN107IAorCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnM19iZTAgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl8zICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVswXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbNzowXSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18zWzc6MF0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnM19iZTEgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl8zICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsxXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMTU6OF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfM1sxNTo4XSAgICAgICAgKQorICAgICAgICAgICk7CitnZW5lcmljX3JlZ2lzdGVyICMoNCwwICApIHVfcmVnM19iZTIgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7NHtzd193cl9lbl8zICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsyXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMTk6MTZdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzNbMTk6MTZdICAgICAgICApCisgICAgICAgICAgKTsKKworYXNzaWduIHJlZ18zWzMxOjIwXSA9ICcwOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgcmVnLTQKKy8vICAgcmVjb21tZW5kZWQgRGVmYXVsdCB2YWx1ZToKKy8vICAgMSdiMSwzJ2gzLDInaDMsNCdoMSw0J2g3Jyw0J2gyLDQnaDIsNCdoNiwyJ2IwMSwyJ2IxMCA9IDMyJ2gyRjE3XzIyNjYKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiAgICAgIGNmZ19zZHJfd2lkdGggICAgID0gcmVnXzRbMTowXSA7ICAvLyAyJ2IxMCAvLyAyJ2IwMCAtIDMyIEJpdCBTRFIsIDInYjAxIC0gMTYgQml0IFNEUiwgMidiMXggLSA4IEJpdAorYXNzaWduICAgICAgY2ZnX2NvbGJpdHMgICAgICAgPSByZWdfNFszOjJdIDsgIC8vIDInYjAwIDggQml0IGNvbHVtbiBhZGRyZXNzLCAyJ2IwMSAtICA5IEJpdCBjb2x1bW4gYWRkcmVzcywgCithc3NpZ24gICAgICBjZmdfc2RyX3RyYXNfZCAgICA9IHJlZ180Wzc6NF0gOyAgLy8gNCdoNCAgLy8gQWN0aXZlIHRvIHByZWNoYXJnZSBkZWxheQorYXNzaWduICAgICAgY2ZnX3Nkcl90cnBfZCAgICAgPSByZWdfNFsxMTo4XTsgIC8vIDQnaDIgIC8vIFByZWNoYXJnZSB0byBhY3RpdmUgZGVsYXkKK2Fzc2lnbiAgICAgIGNmZ19zZHJfdHJjZF9kICAgID0gcmVnXzRbMTU6MTJdOyAvLyA0J2gyICAvLyBBY3RpdmUgdG8gUi9XIGRlbGF5Cithc3NpZ24gICAgICBjZmdfc2RyX3RyY2FyX2QgICA9IHJlZ180WzE5OjE2XTsgLy8gNCdoNyAgLy8gQXV0by1yZWZyZXNoIHBlcmlvZAorYXNzaWduICAgICAgY2ZnX3Nkcl90d3JfZCAgICAgPSByZWdfNFsyMzoyMF07IC8vIDQnaDEgIC8vIFdyaXRlIHJlY292ZXJ5IGRlbGF5Cithc3NpZ24gICAgICBjZmdfcmVxX2RlcHRoICAgICA9IHJlZ180WzI1OjI0XTsgLy8gMidoMyAgLy8gTWF4aW11bSBSZXF1ZXN0IGFjY2VwdGVkIGJ5IFNEUkFNIGNvbnRyb2xsZXIKK2Fzc2lnbiAgICAgIGNmZ19zZHJfY2FzICAgICAgID0gcmVnXzRbMjg6MjZdOyAvLyAzJ2gzICAvLyBTRFJBTSBDQVMgTGF0ZW5jeQorYXNzaWduICAgICAgY2ZnX3Nkcl9lbiAgICAgICAgPSByZWdfNFsyOV0gICA7IC8vIDEnYjEgLy8gRW5hYmxlIFNEUkFNIGNvbnRyb2xsZXIKK2Fzc2lnbiAgICAgIHJlZ180WzMwXSAgICAgICAgID0gc2RyX2luaXRfZG9uZSA7IC8vIEluZGljYXRlIFNEUkFNIEluaXRpYWxpc2F0aW9uIERvbmUKK2Fzc2lnbiAgICAgIHJlZ180WzMxXSAgICAgICAgID0gMSdiMDsKKworCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnNF9iZTAgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl80ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVswXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbNzowXSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ180Wzc6MF0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnNF9iZTEgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl80ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsxXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMTU6OF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfNFsxNTo4XSAgICAgICAgKQorICAgICAgICAgICk7CitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnNF9iZTIgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl80ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsyXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMjM6MTZdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzRbMjM6MTZdICAgICAgICApCisgICAgICAgICAgKTsKKworZ2VuZXJpY19yZWdpc3RlciAjKDYsMCAgKSB1X3JlZzRfYmUzICgKKwkgICAgICAud2UgICAgICAgICAgICAoezZ7c3dfd3JfZW5fNCAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbM10gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzI5OjI0XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ180WzI5OjI0XSAgICAgICAgKQorICAgICAgICAgICk7CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgIHJlZy01LCByZWNvbWVuZGVkIGRlZmF1bHQgdmFsdWUgezEyJ2gxMDAsMTMnaDMzLDMnaDZ9ID0gMzInaDEwMF8wMTlFCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithc3NpZ24gICAgICBjZmdfc2RyX3JmbWF4ICAgICA9IHJlZ181WzI6MF0gOyAgIC8vIDMnaDYKK2Fzc2lnbiAgICAgIGNmZ19zZHJfbW9kZV9yZWcgID0gcmVnXzVbMTU6M10gOyAgLy8gMTMnaDAzMworYXNzaWduICAgICAgY2ZnX3Nkcl9yZnNoICAgICAgPSByZWdfNVsyNzoxNl07ICAvLyAxMidoMTAwCisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWc1X2JlMCAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzUgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzBdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVs3OjBdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzVbNzowXSAgICAgICAgKQorICAgICAgICAgICk7CisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWc1X2JlMSAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzUgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzFdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVsxNTo4XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ181WzE1OjhdICAgICAgICApCisgICAgICAgICAgKTsKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWc1X2JlMiAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzUgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzJdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVsyMzoxNl0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfNVsyMzoxNl0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnNV9iZTMgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl81ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVszXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMzE6MjRdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzVbMzE6MjRdICAgICAgICApCisgICAgICAgICAgKTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgIHJlZy0gNgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnNl9iZTAgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl82ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVswXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbNzowXSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ182Wzc6MF0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnNl9iZTEgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl82ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsxXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMTU6OF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfNlsxNTo4XSAgICAgICAgKQorICAgICAgICAgICk7CitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnNl9iZTIgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl82ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsyXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMjM6MTZdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzZbMjM6MTZdICAgICAgICApCisgICAgICAgICAgKTsKKworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3JlZzZfYmUzICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fNiAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbM10gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzMxOjI0XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ182WzMxOjI0XSAgICAgICAgKQorICAgICAgICAgICk7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICByZWctIDcKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3JlZzdfYmUwICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fNyAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMF0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzc6MF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfN1s3OjBdICAgICAgICApCisgICAgICAgICAgKTsKKworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3JlZzdfYmUxICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fNyAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMV0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzE1OjhdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzdbMTU6OF0gICAgICAgICkKKyAgICAgICAgICApOworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3JlZzdfYmUyICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fNyAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMl0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzIzOjE2XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ183WzIzOjE2XSAgICAgICAgKQorICAgICAgICAgICk7CisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWc3X2JlMyAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzcgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzNdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVszMToyNF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfN1szMToyNF0gICAgICAgICkKKyAgICAgICAgICApOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgcmVnLSA4CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWc4X2JlMCAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzggJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzBdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVs3OjBdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzhbNzowXSAgICAgICAgKQorICAgICAgICAgICk7CisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWc4X2JlMSAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzggJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzFdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVsxNTo4XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ184WzE1OjhdICAgICAgICApCisgICAgICAgICAgKTsKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWc4X2JlMiAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzggJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzJdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVsyMzoxNl0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfOFsyMzoxNl0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnOF9iZTMgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl84ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVszXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMzE6MjRdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzhbMzE6MjRdICAgICAgICApCisgICAgICAgICAgKTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgIHJlZy0gOQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnOV9iZTAgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl85ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVswXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbNzowXSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ185Wzc6MF0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnOV9iZTEgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl85ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsxXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMTU6OF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfOVsxNTo4XSAgICAgICAgKQorICAgICAgICAgICk7CitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnOV9iZTIgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl85ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsyXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMjM6MTZdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzlbMjM6MTZdICAgICAgICApCisgICAgICAgICAgKTsKKworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3JlZzlfYmUzICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fOSAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbM10gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzMxOjI0XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ185WzMxOjI0XSAgICAgICAgKQorICAgICAgICAgICk7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICByZWctIDEwCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWcxMF9iZTAgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl8xMCAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMF0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzc6MF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMTBbNzowXSAgICAgICAgKQorICAgICAgICAgICk7CisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWcxMF9iZTEgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl8xMCAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMV0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzE1OjhdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzEwWzE1OjhdICAgICAgICApCisgICAgICAgICAgKTsKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWcxMF9iZTIgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl8xMCAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMl0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzIzOjE2XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18xMFsyMzoxNl0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnMTBfYmUzICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMTAgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzNdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVszMToyNF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMTBbMzE6MjRdICAgICAgICApCisgICAgICAgICAgKTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgIHJlZy0gMTEKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3JlZzExX2JlMCAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzExICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVswXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbNzowXSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18xMVs3OjBdICAgICAgICApCisgICAgICAgICAgKTsKKworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3JlZzExX2JlMSAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzExICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsxXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMTU6OF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMTFbMTU6OF0gICAgICAgICkKKyAgICAgICAgICApOworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3JlZzExX2JlMiAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzExICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsyXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMjM6MTZdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzExWzIzOjE2XSAgICAgICAgKQorICAgICAgICAgICk7CisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWcxMV9iZTMgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl8xMSAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbM10gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzMxOjI0XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18xMVszMToyNF0gICAgICAgICkKKyAgICAgICAgICApOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgcmVnLSAxMgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnMTJfYmUwICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMTIgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzBdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVs3OjBdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzEyWzc6MF0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnMTJfYmUxICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMTIgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzFdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVsxNTo4XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18xMlsxNTo4XSAgICAgICAgKQorICAgICAgICAgICk7CitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnMTJfYmUyICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMTIgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzJdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVsyMzoxNl0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMTJbMjM6MTZdICAgICAgICApCisgICAgICAgICAgKTsKKworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3JlZzEyX2JlMyAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzEyICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVszXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMzE6MjRdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzEyWzMxOjI0XSAgICAgICAgKQorICAgICAgICAgICk7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICByZWctIDEzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWcxM19iZTAgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl8xMyAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMF0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzc6MF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMTNbNzowXSAgICAgICAgKQorICAgICAgICAgICk7CisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWcxM19iZTEgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl8xMyAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMV0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzE1OjhdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzEzWzE1OjhdICAgICAgICApCisgICAgICAgICAgKTsKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWcxM19iZTIgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl8xMyAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMl0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzIzOjE2XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18xM1syMzoxNl0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnMTNfYmUzICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMTMgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzNdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVszMToyNF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMTNbMzE6MjRdICAgICAgICApCisgICAgICAgICAgKTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgIHJlZy0gMTQKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3JlZzE0X2JlMCAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzE0ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVswXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbNzowXSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18xNFs3OjBdICAgICAgICApCisgICAgICAgICAgKTsKKworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3JlZzE0X2JlMSAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzE0ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsxXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMTU6OF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMTRbMTU6OF0gICAgICAgICkKKyAgICAgICAgICApOworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3JlZzE0X2JlMiAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzE0ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsyXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMjM6MTZdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzE0WzIzOjE2XSAgICAgICAgKQorICAgICAgICAgICk7CisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWcxNF9iZTMgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl8xNCAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbM10gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzMxOjI0XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18xNFszMToyNF0gICAgICAgICkKKyAgICAgICAgICApOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgcmVnLSAxNQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnMTVfYmUwICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMTUgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzBdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVs3OjBdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzE1Wzc6MF0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnMTVfYmUxICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMTUgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzFdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVsxNTo4XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18xNVsxNTo4XSAgICAgICAgKQorICAgICAgICAgICk7CitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnMTVfYmUyICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMTUgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzJdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVsyMzoxNl0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMTVbMjM6MTZdICAgICAgICApCisgICAgICAgICAgKTsKKworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3JlZzE1X2JlMyAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzE1ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVszXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMzE6MjRdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzE1WzMxOjI0XSAgICAgKQorICAgICAgICAgICk7CisKKworCisKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9pMmNtL3NyYy9jb3JlL2kyY21fYml0X2N0cmwudiBiL3Zlcmlsb2cvcnRsL2kyY20vc3JjL2NvcmUvaTJjbV9iaXRfY3RybC52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM1YzIxNDYKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9pMmNtL3NyYy9jb3JlL2kyY21fYml0X2N0cmwudgpAQCAtMCwwICsxLDU0NSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIE9NUzgwNTEgSTJDIE1hc3RlciBiaXQtY29udHJvbGxlciBNb2R1bGUgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFdJU0hCT05FIHJldi5CMiBjb21wbGlhbnQgSTJDIE1hc3RlciBiaXQtY29udHJvbGxlciAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBPTVMgODA1MSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy9vbXM4MDUxbWluaS8gICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIE9NUyA4MDUxIGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtUmljaGFyZCBIZXJ2ZWlsbGUgLCAgcmljaGFyZEBhc2ljcy53cywgd3d3LmFzaWNzLndzICAgIC8vLy8KKy8vLy8gICAgICAtRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogSmFuIDYsIDIwMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8gCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgICAgdjAuMCAtIERpbmVzaCBBLCA2dGggSmFuIDIwMTcKKy8vICAgICAgICAgIDEuIEluaXRhaWwgdmVyc2lvbiBwaWNrZWQgZnJvbQorLy8gICAgICAgICAgICAgIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9wcm9qZWN0cy9pMmMvCisvLyAgICAgdjAuMSAtIERpbmVzaCBBLCAxOXRoIEphbiAyMDE3CisvLyAgICAgICAgICAxLiBMaW50IHdhcm5pbmcgY2xlYW4gdXAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIEJpdCBjb250cm9sbGVyIHNlY3Rpb24KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBUcmFuc2xhdGUgc2ltcGxlIGNvbW1hbmRzIGludG8gU0NML1NEQSB0cmFuc2l0aW9ucworLy8gRWFjaCBjb21tYW5kIGhhcyA1IHN0YXRlcywgQS9CL0MvRC9pZGxlCisvLworLy8gc3RhcnQ6CVNDTAl+fn5+fn5+fn5+XF9fX18KKy8vCVNEQQl+fn5+fn5+flxfX19fX18KKy8vCQkgeCB8IEEgfCBCIHwgQyB8IEQgfCBpCisvLworLy8gcmVwc3RhcnQJU0NMCV9fX18vfn5+flxfX18KKy8vCVNEQQlfXy9+fn5cX19fX19fCisvLwkJIHggfCBBIHwgQiB8IEMgfCBEIHwgaQorLy8KKy8vIHN0b3AJU0NMCV9fX18vfn5+fn5+fn4KKy8vCVNEQQk9PVxfX19fL35+fn5+CisvLwkJIHggfCBBIHwgQiB8IEMgfCBEIHwgaQorLy8KKy8vLSB3cml0ZQlTQ0wJX19fXy9+fn5+XF9fX18KKy8vCVNEQQk9PVg9PT09PT09PT1YPQorLy8JCSB4IHwgQSB8IEIgfCBDIHwgRCB8IGkKKy8vCisvLy0gcmVhZAlTQ0wJX19fXy9+fn5+XF9fX18KKy8vCVNEQQlYWFhYPT09PT1YWFhYCisvLwkJIHggfCBBIHwgQiB8IEMgfCBEIHwgaQorLy8KKworLy8gVGltaW5nOiAgICAgTm9ybWFsIG1vZGUgICAgICBGYXN0IG1vZGUKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBGc2NsICAgICAgICAxMDBLSHogICAgICAgICAgIDQwMEtIegorLy8gVGhfc2NsICAgICAgNC4wdXMgICAgICAgICAgICAwLjZ1cyAgIEhpZ2ggcGVyaW9kIG9mIFNDTAorLy8gVGxfc2NsICAgICAgNC43dXMgICAgICAgICAgICAxLjN1cyAgIExvdyBwZXJpb2Qgb2YgU0NMCisvLyBUc3U6c3RhICAgICA0Ljd1cyAgICAgICAgICAgIDAuNnVzICAgc2V0dXAgdGltZSBmb3IgYSByZXBlYXRlZCBzdGFydCBjb25kaXRpb24KKy8vIFRzdTpzdG8gICAgIDQuMHVzICAgICAgICAgICAgMC42dXMgICBzZXR1cCB0aW1lIGZvciBhIHN0b3AgY29uZGl0b24KKy8vIFRidWYgICAgICAgIDQuN3VzICAgICAgICAgICAgMS4zdXMgICBCdXMgZnJlZSB0aW1lIGJldHdlZW4gYSBzdG9wIGFuZCBzdGFydCBjb25kaXRpb24KKy8vCisKKworYGluY2x1ZGUgImkyY21fZGVmaW5lcy52IgorCittb2R1bGUgaTJjbV9iaXRfY3RybCAoCisgICAgaW5wdXQgICAgICAgICAgICAgY2xrLCAgICAgIC8vIHN5c3RlbSBjbG9jaworICAgIGlucHV0ICAgICAgICAgICAgIHNyZXNldG4sICAvLyBzeW5jaHJvbm91cyBhY3RpdmUgbG93IHJlc2V0CisgICAgaW5wdXQgICAgICAgICAgICAgYXJlc2V0biwgIC8vIGFzeW5jaHJvbm91cyBhY3RpdmUgbG93IHJlc2V0CisgICAgaW5wdXQgICAgICAgICAgICAgZW5hLCAgICAgIC8vIGNvcmUgZW5hYmxlIHNpZ25hbAorCisgICAgaW5wdXQgICAgICBbMTU6MF0gY2xrX2NudCwgIC8vIGNsb2NrIHByZXNjYWxlIHZhbHVlCisKKyAgICBpbnB1dCAgICAgIFsgMzowXSBjbWQsICAgICAgLy8gY29tbWFuZCAoZnJvbSBieXRlIGNvbnRyb2xsZXIpCisgICAgb3V0cHV0IHJlZyAgICAgICAgY21kX2FjaywgIC8vIGNvbW1hbmQgY29tcGxldGUgYWNrbm93bGVkZ2UKKyAgICBvdXRwdXQgcmVnICAgICAgICBidXN5LCAgICAgLy8gaTJjIGJ1cyBidXN5CisgICAgb3V0cHV0IHJlZyAgICAgICAgYWwsICAgICAgIC8vIGkyYyBidXMgYXJiaXRyYXRpb24gbG9zdAorCisgICAgaW5wdXQgICAgICAgICAgICAgZGluLAorICAgIG91dHB1dCByZWcgICAgICAgIGRvdXQsCisKKyAgICBpbnB1dCAgICAgICAgICAgICBzY2xfaSwgICAgLy8gaTJjIGNsb2NrIGxpbmUgaW5wdXQKKyAgICBvdXRwdXQgICAgICAgICAgICBzY2xfbywgICAgLy8gaTJjIGNsb2NrIGxpbmUgb3V0cHV0CisgICAgb3V0cHV0IHJlZyAgICAgICAgc2NsX29lbiwgIC8vIGkyYyBjbG9jayBsaW5lIG91dHB1dCBlbmFibGUgKGFjdGl2ZSBsb3cpCisgICAgaW5wdXQgICAgICAgICAgICAgc2RhX2ksICAgIC8vIGkyYyBkYXRhIGxpbmUgaW5wdXQKKyAgICBvdXRwdXQgICAgICAgICAgICBzZGFfbywgICAgLy8gaTJjIGRhdGEgbGluZSBvdXRwdXQKKyAgICBvdXRwdXQgcmVnICAgICAgICBzZGFfb2VuICAgLy8gaTJjIGRhdGEgbGluZSBvdXRwdXQgZW5hYmxlIChhY3RpdmUgbG93KQorKTsKKworCisgICAgLy8KKyAgICAvLyB2YXJpYWJsZSBkZWNsYXJhdGlvbnMKKyAgICAvLworCisgICAgcmVnIFsgMTowXSBjU0NMLCBjU0RBOyAgICAgIC8vIGNhcHR1cmUgU0NMIGFuZCBTREEKKyAgICByZWcgWyAyOjBdIGZTQ0wsIGZTREE7ICAgICAgLy8gU0NMIGFuZCBTREEgZmlsdGVyIGlucHV0cworICAgIHJlZyAgICAgICAgc1NDTCwgc1NEQTsgICAgICAvLyBmaWx0ZXJlZCBhbmQgc3luY2hyb25pemVkIFNDTCBhbmQgU0RBIGlucHV0cworICAgIHJlZyAgICAgICAgZFNDTCwgZFNEQTsgICAgICAvLyBkZWxheWVkIHZlcnNpb25zIG9mIHNTQ0wgYW5kIHNTREEKKyAgICByZWcgICAgICAgIGRzY2xfb2VuOyAgICAgICAgLy8gZGVsYXllZCBzY2xfb2VuCisgICAgcmVnICAgICAgICBzZGFfY2hrOyAgICAgICAgIC8vIGNoZWNrIFNEQSBvdXRwdXQgKE11bHRpLW1hc3RlciBhcmJpdHJhdGlvbikKKyAgICByZWcgICAgICAgIGNsa19lbjsgICAgICAgICAgLy8gY2xvY2sgZ2VuZXJhdGlvbiBzaWduYWxzCisgICAgcmVnICAgICAgICBzbGF2ZV93YWl0OyAgICAgIC8vIHNsYXZlIGluc2VydHMgd2FpdCBzdGF0ZXMKKyAgICByZWcgWzE1OjBdIGNudDsgICAgICAgICAgICAgLy8gY2xvY2sgZGl2aWRlciBjb3VudGVyIChzeW50aGVzaXMpCisgICAgcmVnIFsxMzowXSBmaWx0ZXJfY250OyAgICAgIC8vIGNsb2NrIGRpdmlkZXIgZm9yIGZpbHRlcgorCisKKyAgICAvLyBzdGF0ZSBtYWNoaW5lIHZhcmlhYmxlCisgICAgcmVnIFsxNzowXSBjX3N0YXRlOyAvLyBzeW5vcHN5cyBlbnVtX3N0YXRlCisKKyAgICAvLworICAgIC8vIG1vZHVsZSBib2R5CisgICAgLy8KKworICAgIC8vIHdoZW5ldmVyIHRoZSBzbGF2ZSBpcyBub3QgcmVhZHkgaXQgY2FuIGRlbGF5IHRoZSBjeWNsZSBieSBwdWxsaW5nIFNDTCBsb3cKKyAgICAvLyBkZWxheSBzY2xfb2VuCisgICAgYWx3YXlzIEAocG9zZWRnZSBjbGspCisgICAgICBkc2NsX29lbiA8PSBzY2xfb2VuOworCisgICAgLy8gc2xhdmVfd2FpdCBpcyBhc3NlcnRlZCB3aGVuIG1hc3RlciB3YW50cyB0byBkcml2ZSBTQ0wgaGlnaCwgYnV0IHRoZSBzbGF2ZSBwdWxscyBpdCBsb3cKKyAgICAvLyBzbGF2ZV93YWl0IHJlbWFpbnMgYXNzZXJ0ZWQgdW50aWwgdGhlIHNsYXZlIHJlbGVhc2VzIFNDTAorICAgIGFsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgYXJlc2V0bikKKyAgICAgIGlmICghYXJlc2V0bikgc2xhdmVfd2FpdCA8PSAxJ2IwOworICAgICAgZWxzZSAgICAgICAgIHNsYXZlX3dhaXQgPD0gKHNjbF9vZW4gJiB+ZHNjbF9vZW4gJiB+c1NDTCkgfCAoc2xhdmVfd2FpdCAmIH5zU0NMKTsKKworICAgIC8vIG1hc3RlciBkcml2ZXMgU0NMIGhpZ2gsIGJ1dCBhbm90aGVyIG1hc3RlciBwdWxscyBpdCBsb3cKKyAgICAvLyBtYXN0ZXIgc3RhcnQgY291bnRpbmcgZG93biBpdHMgbG93IGN5Y2xlIG5vdyAoY2xvY2sgc3luY2hyb25pemF0aW9uKQorICAgIHdpcmUgc2NsX3N5bmMgICA9IGRTQ0wgJiB+c1NDTCAmIHNjbF9vZW47CisKKworICAgIC8vIGdlbmVyYXRlIGNsayBlbmFibGUgc2lnbmFsCisgICAgYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSBhcmVzZXRuKQorICAgICAgaWYgKH5hcmVzZXRuKQorICAgICAgYmVnaW4KKyAgICAgICAgICBjbnQgICAgPD0gMTYnaDA7CisgICAgICAgICAgY2xrX2VuIDw9IDEnYjE7CisgICAgICBlbmQKKyAgICAgIGVsc2UgaWYgKCFzcmVzZXRuIHx8IH58Y250IHx8ICFlbmEgfHwgc2NsX3N5bmMpCisgICAgICBiZWdpbgorICAgICAgICAgIGNudCAgICA8PSBjbGtfY250OworICAgICAgICAgIGNsa19lbiA8PSAxJ2IxOworICAgICAgZW5kCisgICAgICBlbHNlIGlmIChzbGF2ZV93YWl0KQorICAgICAgYmVnaW4KKyAgICAgICAgICBjbnQgICAgPD0gY250OworICAgICAgICAgIGNsa19lbiA8PSAxJ2IwOyAgICAKKyAgICAgIGVuZAorICAgICAgZWxzZQorICAgICAgYmVnaW4KKyAgICAgICAgICBjbnQgICAgPD0gY250IC0gMTYnaDE7CisgICAgICAgICAgY2xrX2VuIDw9IDEnYjA7CisgICAgICBlbmQKKworCisgICAgLy8gZ2VuZXJhdGUgYnVzIHN0YXR1cyBjb250cm9sbGVyCisKKyAgICAvLyBjYXB0dXJlIFNEQSBhbmQgU0NMCisgICAgLy8gcmVkdWNlIG1ldGFzdGFiaWxpdHkgcmlzaworICAgIGFsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgYXJlc2V0bikKKyAgICAgIGlmICghYXJlc2V0bikKKyAgICAgIGJlZ2luCisgICAgICAgICAgY1NDTCA8PSAyJ2IwMDsKKyAgICAgICAgICBjU0RBIDw9IDInYjAwOworICAgICAgZW5kCisgICAgICBlbHNlIGlmICghc3Jlc2V0bikKKyAgICAgIGJlZ2luCisgICAgICAgICAgY1NDTCA8PSAyJ2IwMDsKKyAgICAgICAgICBjU0RBIDw9IDInYjAwOworICAgICAgZW5kCisgICAgICBlbHNlCisgICAgICBiZWdpbgorICAgICAgICAgIGNTQ0wgPD0ge2NTQ0xbMF0sc2NsX2l9OworICAgICAgICAgIGNTREEgPD0ge2NTREFbMF0sc2RhX2l9OworICAgICAgZW5kCisKKworICAgIC8vIGZpbHRlciBTQ0wgYW5kIFNEQSBzaWduYWxzOyAoYXR0ZW1wdCB0bykgcmVtb3ZlIGdsaXRjaGVzCisgICAgYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSBhcmVzZXRuKQorICAgICAgaWYgICAgICAoIWFyZXNldG4gICAgICkgZmlsdGVyX2NudCA8PSAxNCdoMDsKKyAgICAgIGVsc2UgaWYgKCFzcmVzZXRuIHx8ICFlbmEgKSBmaWx0ZXJfY250IDw9IDE0J2gwOworICAgICAgZWxzZSBpZiAofnxmaWx0ZXJfY250KSBmaWx0ZXJfY250IDw9IGNsa19jbnQgPj4gMjsgLy8xNnggSTJDIGJ1cyBmcmVxdWVuY3kKKyAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgZmlsdGVyX2NudCA8PSBmaWx0ZXJfY250IC0xOworCisKKyAgICBhbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIGFyZXNldG4pCisgICAgICBpZiAoIWFyZXNldG4pCisgICAgICBiZWdpbgorICAgICAgICAgIGZTQ0wgPD0gMydiMTExOworICAgICAgICAgIGZTREEgPD0gMydiMTExOworICAgICAgZW5kCisgICAgICBlbHNlIGlmICghc3Jlc2V0bikKKyAgICAgIGJlZ2luCisgICAgICAgICAgZlNDTCA8PSAzJ2IxMTE7CisgICAgICAgICAgZlNEQSA8PSAzJ2IxMTE7CisgICAgICBlbmQKKyAgICAgIGVsc2UgaWYgKH58ZmlsdGVyX2NudCkKKyAgICAgIGJlZ2luCisgICAgICAgICAgZlNDTCA8PSB7ZlNDTFsxOjBdLGNTQ0xbMV19OworICAgICAgICAgIGZTREEgPD0ge2ZTREFbMTowXSxjU0RBWzFdfTsKKyAgICAgIGVuZAorCisKKyAgICAvLyBnZW5lcmF0ZSBmaWx0ZXJlZCBTQ0wgYW5kIFNEQSBzaWduYWxzCisgICAgYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSBhcmVzZXRuKQorICAgICAgaWYgKH5hcmVzZXRuKQorICAgICAgYmVnaW4KKyAgICAgICAgICBzU0NMIDw9IDEnYjE7CisgICAgICAgICAgc1NEQSA8PSAxJ2IxOworCisgICAgICAgICAgZFNDTCA8PSAxJ2IxOworICAgICAgICAgIGRTREEgPD0gMSdiMTsKKyAgICAgIGVuZAorICAgICAgZWxzZSBpZiAoIXNyZXNldG4pCisgICAgICBiZWdpbgorICAgICAgICAgIHNTQ0wgPD0gMSdiMTsKKyAgICAgICAgICBzU0RBIDw9IDEnYjE7CisKKyAgICAgICAgICBkU0NMIDw9IDEnYjE7CisgICAgICAgICAgZFNEQSA8PSAxJ2IxOworICAgICAgZW5kCisgICAgICBlbHNlCisgICAgICBiZWdpbgorICAgICAgICAgIHNTQ0wgPD0gJmZTQ0xbMjoxXSB8ICZmU0NMWzE6MF0gfCAoZlNDTFsyXSAmIGZTQ0xbMF0pOworICAgICAgICAgIHNTREEgPD0gJmZTREFbMjoxXSB8ICZmU0RBWzE6MF0gfCAoZlNEQVsyXSAmIGZTREFbMF0pOworCisgICAgICAgICAgZFNDTCA8PSBzU0NMOworICAgICAgICAgIGRTREEgPD0gc1NEQTsKKyAgICAgIGVuZAorCisgICAgLy8gZGV0ZWN0IHN0YXJ0IGNvbmRpdGlvbiA9PiBkZXRlY3QgZmFsbGluZyBlZGdlIG9uIFNEQSB3aGlsZSBTQ0wgaXMgaGlnaAorICAgIC8vIGRldGVjdCBzdG9wIGNvbmRpdGlvbiA9PiBkZXRlY3QgcmlzaW5nIGVkZ2Ugb24gU0RBIHdoaWxlIFNDTCBpcyBoaWdoCisgICAgcmVnIHN0YV9jb25kaXRpb247CisgICAgcmVnIHN0b19jb25kaXRpb247CisgICAgYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSBhcmVzZXRuKQorICAgICAgaWYgKH5hcmVzZXRuKQorICAgICAgYmVnaW4KKyAgICAgICAgICBzdGFfY29uZGl0aW9uIDw9IDEnYjA7CisgICAgICAgICAgc3RvX2NvbmRpdGlvbiA8PSAxJ2IwOworICAgICAgZW5kCisgICAgICBlbHNlIGlmICghc3Jlc2V0bikKKyAgICAgIGJlZ2luCisgICAgICAgICAgc3RhX2NvbmRpdGlvbiA8PSAxJ2IwOworICAgICAgICAgIHN0b19jb25kaXRpb24gPD0gMSdiMDsKKyAgICAgIGVuZAorICAgICAgZWxzZQorICAgICAgYmVnaW4KKyAgICAgICAgICBzdGFfY29uZGl0aW9uIDw9IH5zU0RBICYgIGRTREEgJiBzU0NMOworICAgICAgICAgIHN0b19jb25kaXRpb24gPD0gIHNTREEgJiB+ZFNEQSAmIHNTQ0w7CisgICAgICBlbmQKKworCisgICAgLy8gZ2VuZXJhdGUgaTJjIGJ1cyBidXN5IHNpZ25hbAorICAgIGFsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgYXJlc2V0bikKKyAgICAgIGlmICAgICAgKCFhcmVzZXRuKSBidXN5IDw9IDEnYjA7CisgICAgICBlbHNlIGlmICghc3Jlc2V0biAgICApIGJ1c3kgPD0gMSdiMDsKKyAgICAgIGVsc2UgICAgICAgICAgICAgIGJ1c3kgPD0gKHN0YV9jb25kaXRpb24gfCBidXN5KSAmIH5zdG9fY29uZGl0aW9uOworCisKKyAgICAvLyBnZW5lcmF0ZSBhcmJpdHJhdGlvbiBsb3N0IHNpZ25hbAorICAgIC8vIGFyaWJpdHJhdGlvbiBsb3N0IHdoZW46CisgICAgLy8gMSkgbWFzdGVyIGRyaXZlcyBTREEgaGlnaCwgYnV0IHRoZSBpMmMgYnVzIGlzIGxvdworICAgIC8vIDIpIHN0b3AgZGV0ZWN0ZWQgd2hpbGUgbm90IHJlcXVlc3RlZAorICAgIHJlZyBjbWRfc3RvcDsKKyAgICBhbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIGFyZXNldG4pCisgICAgICBpZiAofmFyZXNldG4pCisgICAgICAgICAgY21kX3N0b3AgPD0gMSdiMDsKKyAgICAgIGVsc2UgaWYgKCFzcmVzZXRuKQorICAgICAgICAgIGNtZF9zdG9wIDw9IDEnYjA7CisgICAgICBlbHNlIGlmIChjbGtfZW4pCisgICAgICAgICAgY21kX3N0b3AgPD0gY21kID09IGBJMkNfQ01EX1NUT1A7CisKKyAgICBhbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIGFyZXNldG4pCisgICAgICBpZiAofmFyZXNldG4pCisgICAgICAgICAgYWwgPD0gMSdiMDsKKyAgICAgIGVsc2UgaWYgKCFzcmVzZXRuKQorICAgICAgICAgIGFsIDw9IDEnYjA7CisgICAgICBlbHNlCisgICAgICAgICAgYWwgPD0gKHNkYV9jaGsgJiB+c1NEQSAmIHNkYV9vZW4pIHwgKHxjX3N0YXRlICYgc3RvX2NvbmRpdGlvbiAmIH5jbWRfc3RvcCk7CisKKworICAgIC8vIGdlbmVyYXRlIGRvdXQgc2lnbmFsIChzdG9yZSBTREEgb24gcmlzaW5nIGVkZ2Ugb2YgU0NMKQorICAgIGFsd2F5cyBAKHBvc2VkZ2UgY2xrKQorICAgICAgaWYgKHNTQ0wgJiB+ZFNDTCkgZG91dCA8PSBzU0RBOworCisKKyAgICAvLyBnZW5lcmF0ZSBzdGF0ZW1hY2hpbmUKKworICAgIC8vIG54dF9zdGF0ZSBkZWNvZGVyCisgICAgcGFyYW1ldGVyIFsxNzowXSBpZGxlICAgID0gMTgnYjBfMDAwMF8wMDAwXzAwMDBfMDAwMDsKKyAgICBwYXJhbWV0ZXIgWzE3OjBdIHN0YXJ0X2EgPSAxOCdiMF8wMDAwXzAwMDBfMDAwMF8wMDAxOworICAgIHBhcmFtZXRlciBbMTc6MF0gc3RhcnRfYiA9IDE4J2IwXzAwMDBfMDAwMF8wMDAwXzAwMTA7CisgICAgcGFyYW1ldGVyIFsxNzowXSBzdGFydF9jID0gMTgnYjBfMDAwMF8wMDAwXzAwMDBfMDEwMDsKKyAgICBwYXJhbWV0ZXIgWzE3OjBdIHN0YXJ0X2QgPSAxOCdiMF8wMDAwXzAwMDBfMDAwMF8xMDAwOworICAgIHBhcmFtZXRlciBbMTc6MF0gc3RhcnRfZSA9IDE4J2IwXzAwMDBfMDAwMF8wMDAxXzAwMDA7CisgICAgcGFyYW1ldGVyIFsxNzowXSBzdG9wX2EgID0gMTgnYjBfMDAwMF8wMDAwXzAwMTBfMDAwMDsKKyAgICBwYXJhbWV0ZXIgWzE3OjBdIHN0b3BfYiAgPSAxOCdiMF8wMDAwXzAwMDBfMDEwMF8wMDAwOworICAgIHBhcmFtZXRlciBbMTc6MF0gc3RvcF9jICA9IDE4J2IwXzAwMDBfMDAwMF8xMDAwXzAwMDA7CisgICAgcGFyYW1ldGVyIFsxNzowXSBzdG9wX2QgID0gMTgnYjBfMDAwMF8wMDAxXzAwMDBfMDAwMDsKKyAgICBwYXJhbWV0ZXIgWzE3OjBdIHJkX2EgICAgPSAxOCdiMF8wMDAwXzAwMTBfMDAwMF8wMDAwOworICAgIHBhcmFtZXRlciBbMTc6MF0gcmRfYiAgICA9IDE4J2IwXzAwMDBfMDEwMF8wMDAwXzAwMDA7CisgICAgcGFyYW1ldGVyIFsxNzowXSByZF9jICAgID0gMTgnYjBfMDAwMF8xMDAwXzAwMDBfMDAwMDsKKyAgICBwYXJhbWV0ZXIgWzE3OjBdIHJkX2QgICAgPSAxOCdiMF8wMDAxXzAwMDBfMDAwMF8wMDAwOworICAgIHBhcmFtZXRlciBbMTc6MF0gd3JfYSAgICA9IDE4J2IwXzAwMTBfMDAwMF8wMDAwXzAwMDA7CisgICAgcGFyYW1ldGVyIFsxNzowXSB3cl9iICAgID0gMTgnYjBfMDEwMF8wMDAwXzAwMDBfMDAwMDsKKyAgICBwYXJhbWV0ZXIgWzE3OjBdIHdyX2MgICAgPSAxOCdiMF8xMDAwXzAwMDBfMDAwMF8wMDAwOworICAgIHBhcmFtZXRlciBbMTc6MF0gd3JfZCAgICA9IDE4J2IxXzAwMDBfMDAwMF8wMDAwXzAwMDA7CisKKyAgICBhbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIGFyZXNldG4pCisgICAgICBpZiAoIWFyZXNldG4pCisgICAgICBiZWdpbgorICAgICAgICAgIGNfc3RhdGUgPD0gaWRsZTsKKyAgICAgICAgICBjbWRfYWNrIDw9IDEnYjA7CisgICAgICAgICAgc2NsX29lbiA8PSAxJ2IxOworICAgICAgICAgIHNkYV9vZW4gPD0gMSdiMTsKKyAgICAgICAgICBzZGFfY2hrIDw9IDEnYjA7CisgICAgICBlbmQKKyAgICAgIGVsc2UgaWYgKCFzcmVzZXRuIHwgYWwpCisgICAgICBiZWdpbgorICAgICAgICAgIGNfc3RhdGUgPD0gaWRsZTsKKyAgICAgICAgICBjbWRfYWNrIDw9IDEnYjA7CisgICAgICAgICAgc2NsX29lbiA8PSAxJ2IxOworICAgICAgICAgIHNkYV9vZW4gPD0gMSdiMTsKKyAgICAgICAgICBzZGFfY2hrIDw9IDEnYjA7CisgICAgICBlbmQKKyAgICAgIGVsc2UKKyAgICAgIGJlZ2luCisgICAgICAgICAgY21kX2FjayAgIDw9IDEnYjA7IC8vIGRlZmF1bHQgbm8gY29tbWFuZCBhY2tub3dsZWRnZSArIGFzc2VydCBjbWRfYWNrIG9ubHkgMWNsayBjeWNsZQorCisgICAgICAgICAgaWYgKGNsa19lbikKKyAgICAgICAgICAgICAgY2FzZSAoY19zdGF0ZSkgLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKyAgICAgICAgICAgICAgICAgICAgLy8gaWRsZSBzdGF0ZQorICAgICAgICAgICAgICAgICAgICBpZGxlOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoY21kKSAvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgSTJDX0NNRF9TVEFSVDogY19zdGF0ZSA8PSBzdGFydF9hOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgSTJDX0NNRF9TVE9QOiAgY19zdGF0ZSA8PSBzdG9wX2E7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBJMkNfQ01EX1dSSVRFOiBjX3N0YXRlIDw9IHdyX2E7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBJMkNfQ01EX1JFQUQ6ICBjX3N0YXRlIDw9IHJkX2E7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICBjX3N0YXRlIDw9IGlkbGU7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmRjYXNlCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjbF9vZW4gPD0gc2NsX29lbjsgLy8ga2VlcCBTQ0wgaW4gc2FtZSBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgc2RhX29lbiA8PSBzZGFfb2VuOyAvLyBrZWVwIFNEQSBpbiBzYW1lIHN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICBzZGFfY2hrIDw9IDEnYjA7ICAgIC8vIGRvbid0IGNoZWNrIFNEQSBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgLy8gc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRfYToKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNfc3RhdGUgPD0gc3RhcnRfYjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjbF9vZW4gPD0gc2NsX29lbjsgLy8ga2VlcCBTQ0wgaW4gc2FtZSBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgc2RhX29lbiA8PSAxJ2IxOyAgICAvLyBzZXQgU0RBIGhpZ2gKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYV9jaGsgPD0gMSdiMDsgICAgLy8gZG9uJ3QgY2hlY2sgU0RBIG91dHB1dAorICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBzdGFydF9iOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgY19zdGF0ZSA8PSBzdGFydF9jOworICAgICAgICAgICAgICAgICAgICAgICAgc2NsX29lbiA8PSAxJ2IxOyAvLyBzZXQgU0NMIGhpZ2gKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYV9vZW4gPD0gMSdiMTsgLy8ga2VlcCBTREEgaGlnaAorICAgICAgICAgICAgICAgICAgICAgICAgc2RhX2NoayA8PSAxJ2IwOyAvLyBkb24ndCBjaGVjayBTREEgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2M6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBjX3N0YXRlIDw9IHN0YXJ0X2Q7CisgICAgICAgICAgICAgICAgICAgICAgICBzY2xfb2VuIDw9IDEnYjE7IC8vIGtlZXAgU0NMIGhpZ2gKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYV9vZW4gPD0gMSdiMDsgLy8gc2V0IFNEQSBsb3cKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYV9jaGsgPD0gMSdiMDsgLy8gZG9uJ3QgY2hlY2sgU0RBIG91dHB1dAorICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBzdGFydF9kOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgY19zdGF0ZSA8PSBzdGFydF9lOworICAgICAgICAgICAgICAgICAgICAgICAgc2NsX29lbiA8PSAxJ2IxOyAvLyBrZWVwIFNDTCBoaWdoCisgICAgICAgICAgICAgICAgICAgICAgICBzZGFfb2VuIDw9IDEnYjA7IC8vIGtlZXAgU0RBIGxvdworICAgICAgICAgICAgICAgICAgICAgICAgc2RhX2NoayA8PSAxJ2IwOyAvLyBkb24ndCBjaGVjayBTREEgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2U6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBjX3N0YXRlIDw9IGlkbGU7CisgICAgICAgICAgICAgICAgICAgICAgICBjbWRfYWNrIDw9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBzY2xfb2VuIDw9IDEnYjA7IC8vIHNldCBTQ0wgbG93CisgICAgICAgICAgICAgICAgICAgICAgICBzZGFfb2VuIDw9IDEnYjA7IC8vIGtlZXAgU0RBIGxvdworICAgICAgICAgICAgICAgICAgICAgICAgc2RhX2NoayA8PSAxJ2IwOyAvLyBkb24ndCBjaGVjayBTREEgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIC8vIHN0b3AKKyAgICAgICAgICAgICAgICAgICAgc3RvcF9hOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgY19zdGF0ZSA8PSBzdG9wX2I7CisgICAgICAgICAgICAgICAgICAgICAgICBzY2xfb2VuIDw9IDEnYjA7IC8vIGtlZXAgU0NMIGxvdworICAgICAgICAgICAgICAgICAgICAgICAgc2RhX29lbiA8PSAxJ2IwOyAvLyBzZXQgU0RBIGxvdworICAgICAgICAgICAgICAgICAgICAgICAgc2RhX2NoayA8PSAxJ2IwOyAvLyBkb24ndCBjaGVjayBTREEgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIHN0b3BfYjoKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNfc3RhdGUgPD0gc3RvcF9jOworICAgICAgICAgICAgICAgICAgICAgICAgc2NsX29lbiA8PSAxJ2IxOyAvLyBzZXQgU0NMIGhpZ2gKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYV9vZW4gPD0gMSdiMDsgLy8ga2VlcCBTREEgbG93CisgICAgICAgICAgICAgICAgICAgICAgICBzZGFfY2hrIDw9IDEnYjA7IC8vIGRvbid0IGNoZWNrIFNEQSBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgc3RvcF9jOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgY19zdGF0ZSA8PSBzdG9wX2Q7CisgICAgICAgICAgICAgICAgICAgICAgICBzY2xfb2VuIDw9IDEnYjE7IC8vIGtlZXAgU0NMIGhpZ2gKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYV9vZW4gPD0gMSdiMDsgLy8ga2VlcCBTREEgbG93CisgICAgICAgICAgICAgICAgICAgICAgICBzZGFfY2hrIDw9IDEnYjA7IC8vIGRvbid0IGNoZWNrIFNEQSBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgc3RvcF9kOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgY19zdGF0ZSA8PSBpZGxlOworICAgICAgICAgICAgICAgICAgICAgICAgY21kX2FjayA8PSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgc2NsX29lbiA8PSAxJ2IxOyAvLyBrZWVwIFNDTCBoaWdoCisgICAgICAgICAgICAgICAgICAgICAgICBzZGFfb2VuIDw9IDEnYjE7IC8vIHNldCBTREEgaGlnaAorICAgICAgICAgICAgICAgICAgICAgICAgc2RhX2NoayA8PSAxJ2IwOyAvLyBkb24ndCBjaGVjayBTREEgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIC8vIHJlYWQKKyAgICAgICAgICAgICAgICAgICAgcmRfYToKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNfc3RhdGUgPD0gcmRfYjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjbF9vZW4gPD0gMSdiMDsgLy8ga2VlcCBTQ0wgbG93CisgICAgICAgICAgICAgICAgICAgICAgICBzZGFfb2VuIDw9IDEnYjE7IC8vIHRyaS1zdGF0ZSBTREEKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYV9jaGsgPD0gMSdiMDsgLy8gZG9uJ3QgY2hlY2sgU0RBIG91dHB1dAorICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICByZF9iOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgY19zdGF0ZSA8PSByZF9jOworICAgICAgICAgICAgICAgICAgICAgICAgc2NsX29lbiA8PSAxJ2IxOyAvLyBzZXQgU0NMIGhpZ2gKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYV9vZW4gPD0gMSdiMTsgLy8ga2VlcCBTREEgdHJpLXN0YXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgc2RhX2NoayA8PSAxJ2IwOyAvLyBkb24ndCBjaGVjayBTREEgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIHJkX2M6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBjX3N0YXRlIDw9IHJkX2Q7CisgICAgICAgICAgICAgICAgICAgICAgICBzY2xfb2VuIDw9IDEnYjE7IC8vIGtlZXAgU0NMIGhpZ2gKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYV9vZW4gPD0gMSdiMTsgLy8ga2VlcCBTREEgdHJpLXN0YXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgc2RhX2NoayA8PSAxJ2IwOyAvLyBkb24ndCBjaGVjayBTREEgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIHJkX2Q6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBjX3N0YXRlIDw9IGlkbGU7CisgICAgICAgICAgICAgICAgICAgICAgICBjbWRfYWNrIDw9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBzY2xfb2VuIDw9IDEnYjA7IC8vIHNldCBTQ0wgbG93CisgICAgICAgICAgICAgICAgICAgICAgICBzZGFfb2VuIDw9IDEnYjE7IC8vIGtlZXAgU0RBIHRyaS1zdGF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYV9jaGsgPD0gMSdiMDsgLy8gZG9uJ3QgY2hlY2sgU0RBIG91dHB1dAorICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICAvLyB3cml0ZQorICAgICAgICAgICAgICAgICAgICB3cl9hOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgY19zdGF0ZSA8PSB3cl9iOworICAgICAgICAgICAgICAgICAgICAgICAgc2NsX29lbiA8PSAxJ2IwOyAvLyBrZWVwIFNDTCBsb3cKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYV9vZW4gPD0gZGluOyAgLy8gc2V0IFNEQQorICAgICAgICAgICAgICAgICAgICAgICAgc2RhX2NoayA8PSAxJ2IwOyAvLyBkb24ndCBjaGVjayBTREEgb3V0cHV0IChTQ0wgbG93KQorICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICB3cl9iOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgY19zdGF0ZSA8PSB3cl9jOworICAgICAgICAgICAgICAgICAgICAgICAgc2NsX29lbiA8PSAxJ2IxOyAvLyBzZXQgU0NMIGhpZ2gKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYV9vZW4gPD0gZGluOyAgLy8ga2VlcCBTREEKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYV9jaGsgPD0gMSdiMDsgLy8gZG9uJ3QgY2hlY2sgU0RBIG91dHB1dCB5ZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxsb3cgc29tZSB0aW1lIGZvciBTREEgYW5kIFNDTCB0byBzZXR0bGUKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgd3JfYzoKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNfc3RhdGUgPD0gd3JfZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjbF9vZW4gPD0gMSdiMTsgLy8ga2VlcCBTQ0wgaGlnaAorICAgICAgICAgICAgICAgICAgICAgICAgc2RhX29lbiA8PSBkaW47CisgICAgICAgICAgICAgICAgICAgICAgICBzZGFfY2hrIDw9IDEnYjE7IC8vIGNoZWNrIFNEQSBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgd3JfZDoKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNfc3RhdGUgPD0gaWRsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNtZF9hY2sgPD0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjbF9vZW4gPD0gMSdiMDsgLy8gc2V0IFNDTCBsb3cKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYV9vZW4gPD0gZGluOworICAgICAgICAgICAgICAgICAgICAgICAgc2RhX2NoayA8PSAxJ2IwOyAvLyBkb24ndCBjaGVjayBTREEgb3V0cHV0IChTQ0wgbG93KQorICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICBlbmRjYXNlCisgICAgICBlbmQKKworCisgICAgLy8gYXNzaWduIHNjbCBhbmQgc2RhIG91dHB1dCAoYWx3YXlzIGduZCkKKyAgICBhc3NpZ24gc2NsX28gPSAxJ2IwOworICAgIGFzc2lnbiBzZGFfbyA9IDEnYjA7CisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvaTJjbS9zcmMvY29yZS9pMmNtX2J5dGVfY3RybC52IGIvdmVyaWxvZy9ydGwvaTJjbS9zcmMvY29yZS9pMmNtX2J5dGVfY3RybC52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAwMmI1MWUKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9pMmNtL3NyYy9jb3JlL2kyY21fYnl0ZV9jdHJsLnYKQEAgLTAsMCArMSwzNDMgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBPTVM4MDUxIEkyQyBNYXN0ZXIgYnl0ZS1jb250cm9sbGVyIE1vZHVsZSAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFdJU0hCT05FIHJldi5CMiBjb21wbGlhbnQgSTJDIE1hc3RlciBieXRlLWNvbnRyb2xsZXIgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIE9NUyA4MDUxIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL29tczgwNTFtaW5pLyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgT01TIDgwNTEgZGVmaW5pdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC1SaWNoYXJkIEhlcnZlaWxsZSAsICByaWNoYXJkQGFzaWNzLndzLCB3d3cuYXNpY3Mud3MgICAgLy8vLworLy8vLyAgICAgIC1EaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiBKYW4gNiwgMjAxNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLyAKKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICB2MC4wIC0gRGluZXNoIEEsIDZ0aCBKYW4gMjAxNworLy8vLyAgICAgICAgMS4gSW5pdGFpbCB2ZXJzaW9uIHBpY2tlZCBmcm9tCisvLy8vICAgICAgICAgICAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL3Byb2plY3RzL2kyYy8KKy8vLy8gICAgICAgIDIuIHJlbmFtaW5nIG9mIHJlc2V0IHNpZ25hbCB0byBhcmVzZXRuIGFuZCBzcmVzZXRuCisvLy8vICAgdjAuMSAtIERpbmVzaC5BLCAxOXRoIEphbiAyMDE3CisvLy8vICAgICAgICAxLiBMaW50IEVycm9yIGZpeGVzCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2BpbmNsdWRlICJpMmNtX2RlZmluZXMudiIKKworbW9kdWxlIGkyY21fYnl0ZV9jdHJsICgKKwkvLworCS8vIGlucHV0cyAmIG91dHB1dHMKKwkvLworCWlucHV0ICAgICAgICBjbGssICAgICAvLyBtYXN0ZXIgY2xvY2sKKwlpbnB1dCAgICAgICAgc3Jlc2V0biwgLy8gc3luY2hyb25vdXMgYWN0aXZlIGhpZ2ggcmVzZXQKKwlpbnB1dCAgICAgICAgYXJlc2V0biwgLy8gYXN5bmNocm9ub3VzIGFjdGl2ZSBsb3cgcmVzZXQKKwlpbnB1dCAgICAgICAgZW5hLCAgICAgLy8gY29yZSBlbmFibGUgc2lnbmFsCisKKwlpbnB1dCBbMTU6MF0gY2xrX2NudCwgLy8gNHggU0NMCisKKwkvLyBjb250cm9sIGlucHV0cworCWlucHV0ICAgICAgICBzdGFydCwKKwlpbnB1dCAgICAgICAgc3RvcCwKKwlpbnB1dCAgICAgICAgcmVhZCwKKwlpbnB1dCAgICAgICAgd3JpdGUsCisJaW5wdXQgICAgICAgIGFja19pbiwKKwlpbnB1dCBbNzowXSAgZGluLAorCisJLy8gc3RhdHVzIG91dHB1dHMKKwlvdXRwdXQgcmVnICAgY21kX2FjaywKKwlvdXRwdXQgcmVnICAgYWNrX291dCwKKwlvdXRwdXQgICAgICAgaTJjX2J1c3ksCisJb3V0cHV0ICAgICAgIGkyY19hbCwKKwlvdXRwdXQgWzc6MF0gZG91dCwKKworCS8vIEkyQyBzaWduYWxzCisJaW5wdXQgICAgICAgIHNjbF9pLAorCW91dHB1dCAgICAgICBzY2xfbywKKwlvdXRwdXQgICAgICAgc2NsX29lbiwKKwlpbnB1dCAgICAgICAgc2RhX2ksCisJb3V0cHV0ICAgICAgIHNkYV9vLAorCW91dHB1dCAgICAgICBzZGFfb2VuCisKKyAgICAgICApOworCisKKworCS8vCisJLy8gVmFyaWFibGUgZGVjbGFyYXRpb25zCisJLy8KKworCS8vIHN0YXRlbWFjaGluZQorCXBhcmFtZXRlciBbNDowXSBTVF9JRExFICA9IDUnYjBfMDAwMDsKKwlwYXJhbWV0ZXIgWzQ6MF0gU1RfU1RBUlQgPSA1J2IwXzAwMDE7CisJcGFyYW1ldGVyIFs0OjBdIFNUX1JFQUQgID0gNSdiMF8wMDEwOworCXBhcmFtZXRlciBbNDowXSBTVF9XUklURSA9IDUnYjBfMDEwMDsKKwlwYXJhbWV0ZXIgWzQ6MF0gU1RfQUNLICAgPSA1J2IwXzEwMDA7CisJcGFyYW1ldGVyIFs0OjBdIFNUX1NUT1AgID0gNSdiMV8wMDAwOworCisJLy8gc2lnbmFscyBmb3IgYml0X2NvbnRyb2xsZXIKKwlyZWcgIFszOjBdIGNvcmVfY21kOworCXJlZyAgICAgICAgY29yZV90eGQ7CisJd2lyZSAgICAgICBjb3JlX2FjaywgY29yZV9yeGQ7CisKKwkvLyBzaWduYWxzIGZvciBzaGlmdCByZWdpc3RlcgorCXJlZyBbNzowXSBzcjsgLy84Yml0IHNoaWZ0IHJlZ2lzdGVyCisJcmVnICAgICAgIHNoaWZ0LCBsZDsKKworCS8vIHNpZ25hbHMgZm9yIHN0YXRlIG1hY2hpbmUKKwl3aXJlICAgICAgIGdvOworCXJlZyAgWzI6MF0gZGNudDsKKwl3aXJlICAgICAgIGNudF9kb25lOworCisJLy8KKwkvLyBNb2R1bGUgYm9keQorCS8vCisKKwkvLyBob29rdXAgYml0X2NvbnRyb2xsZXIKKwlpMmNtX2JpdF9jdHJsIHVfYml0X2N0cmwgKAorCQkuY2xrICAgICAoIGNsayAgICAgICksCisJCS5zcmVzZXRuICggc3Jlc2V0biAgKSwKKwkJLmFyZXNldG4gKCBhcmVzZXRuICksCisJCS5lbmEgICAgICggZW5hICAgICAgKSwKKwkJLmNsa19jbnQgKCBjbGtfY250ICApLAorCQkuY21kICAgICAoIGNvcmVfY21kICksCisJCS5jbWRfYWNrICggY29yZV9hY2sgKSwKKwkJLmJ1c3kgICAgKCBpMmNfYnVzeSApLAorCQkuYWwgICAgICAoIGkyY19hbCAgICksCisJCS5kaW4gICAgICggY29yZV90eGQgKSwKKwkJLmRvdXQgICAgKCBjb3JlX3J4ZCApLAorCQkuc2NsX2kgICAoIHNjbF9pICAgICksCisJCS5zY2xfbyAgICggc2NsX28gICAgKSwKKwkJLnNjbF9vZW4gKCBzY2xfb2VuICApLAorCQkuc2RhX2kgICAoIHNkYV9pICAgICksCisJCS5zZGFfbyAgICggc2RhX28gICAgKSwKKwkJLnNkYV9vZW4gKCBzZGFfb2VuICApCisJKTsKKworCS8vIGdlbmVyYXRlIGdvLXNpZ25hbAorCWFzc2lnbiBnbyA9IChyZWFkIHwgd3JpdGUgfCBzdG9wKSAmIH5jbWRfYWNrOworCisJLy8gYXNzaWduIGRvdXQgb3V0cHV0IHRvIHNoaWZ0LXJlZ2lzdGVyCisJYXNzaWduIGRvdXQgPSBzcjsKKworCS8vIGdlbmVyYXRlIHNoaWZ0IHJlZ2lzdGVyCisJYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSBhcmVzZXRuKQorCSAgaWYgKCFhcmVzZXRuKQorCSAgICBzciA8PSA4J2gwOworCSAgZWxzZSBpZiAoIXNyZXNldG4pCisJICAgIHNyIDw9IDgnaDA7CisJICBlbHNlIGlmIChsZCkKKwkgICAgc3IgPD0gZGluOworCSAgZWxzZSBpZiAoc2hpZnQpCisJICAgIHNyIDw9IHtzcls2OjBdLCBjb3JlX3J4ZH07CisKKwkvLyBnZW5lcmF0ZSBjb3VudGVyCisJYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSBhcmVzZXRuKQorCSAgaWYgKCFhcmVzZXRuKQorCSAgICBkY250IDw9IDMnaDA7CisJICBlbHNlIGlmICghc3Jlc2V0bikKKwkgICAgZGNudCA8PSAzJ2gwOworCSAgZWxzZSBpZiAobGQpCisJICAgIGRjbnQgPD0gMydoNzsKKwkgIGVsc2UgaWYgKHNoaWZ0KQorCSAgICBkY250IDw9IGRjbnQgLSAzJ2gxOworCisJYXNzaWduIGNudF9kb25lID0gfih8ZGNudCk7CisKKwkvLworCS8vIHN0YXRlIG1hY2hpbmUKKwkvLworCXJlZyBbNDowXSBjX3N0YXRlOyAvLyBzeW5vcHN5cyBlbnVtX3N0YXRlCisKKwlhbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIGFyZXNldG4pCisJICBpZiAoIWFyZXNldG4pCisJICAgIGJlZ2luCisJICAgICAgICBjb3JlX2NtZCA8PSBgSTJDX0NNRF9OT1A7CisJICAgICAgICBjb3JlX3R4ZCA8PSAxJ2IwOworCSAgICAgICAgc2hpZnQgICAgPD0gMSdiMDsKKwkgICAgICAgIGxkICAgICAgIDw9IDEnYjA7CisJICAgICAgICBjbWRfYWNrICA8PSAxJ2IwOworCSAgICAgICAgY19zdGF0ZSAgPD0gU1RfSURMRTsKKwkgICAgICAgIGFja19vdXQgIDw9IDEnYjA7CisJICAgIGVuZAorCSAgZWxzZSBpZiAoIXNyZXNldG4gfCBpMmNfYWwpCisJICAgYmVnaW4KKwkgICAgICAgY29yZV9jbWQgPD0gYEkyQ19DTURfTk9QOworCSAgICAgICBjb3JlX3R4ZCA8PSAxJ2IwOworCSAgICAgICBzaGlmdCAgICA8PSAxJ2IwOworCSAgICAgICBsZCAgICAgICA8PSAxJ2IwOworCSAgICAgICBjbWRfYWNrICA8PSAxJ2IwOworCSAgICAgICBjX3N0YXRlICA8PSBTVF9JRExFOworCSAgICAgICBhY2tfb3V0ICA8PSAxJ2IwOworCSAgIGVuZAorCWVsc2UKKwkgIGJlZ2luCisJICAgICAgLy8gaW5pdGlhbGx5IHJlc2V0IGFsbCBzaWduYWxzCisJICAgICAgY29yZV90eGQgPD0gc3JbN107CisJICAgICAgc2hpZnQgICAgPD0gMSdiMDsKKwkgICAgICBsZCAgICAgICA8PSAxJ2IwOworCSAgICAgIGNtZF9hY2sgIDw9IDEnYjA7CisKKwkgICAgICBjYXNlIChjX3N0YXRlKSAvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCSAgICAgICAgU1RfSURMRToKKwkgICAgICAgICAgaWYgKGdvKQorCSAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgIGlmIChzdGFydCkKKwkgICAgICAgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgICAgICAgICBjX3N0YXRlICA8PSBTVF9TVEFSVDsKKwkgICAgICAgICAgICAgICAgICAgICAgY29yZV9jbWQgPD0gYEkyQ19DTURfU1RBUlQ7CisJICAgICAgICAgICAgICAgICAgZW5kCisJICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlYWQpCisJICAgICAgICAgICAgICAgICAgYmVnaW4KKwkgICAgICAgICAgICAgICAgICAgICAgY19zdGF0ZSAgPD0gU1RfUkVBRDsKKwkgICAgICAgICAgICAgICAgICAgICAgY29yZV9jbWQgPD0gYEkyQ19DTURfUkVBRDsKKwkgICAgICAgICAgICAgICAgICBlbmQKKwkgICAgICAgICAgICAgICAgZWxzZSBpZiAod3JpdGUpCisJICAgICAgICAgICAgICAgICAgYmVnaW4KKwkgICAgICAgICAgICAgICAgICAgICAgY19zdGF0ZSAgPD0gU1RfV1JJVEU7CisJICAgICAgICAgICAgICAgICAgICAgIGNvcmVfY21kIDw9IGBJMkNfQ01EX1dSSVRFOworCSAgICAgICAgICAgICAgICAgIGVuZAorCSAgICAgICAgICAgICAgICBlbHNlIC8vIHN0b3AKKwkgICAgICAgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgICAgICAgICBjX3N0YXRlICA8PSBTVF9TVE9QOworCSAgICAgICAgICAgICAgICAgICAgICBjb3JlX2NtZCA8PSBgSTJDX0NNRF9TVE9QOworCSAgICAgICAgICAgICAgICAgIGVuZAorCisJICAgICAgICAgICAgICAgIGxkIDw9IDEnYjE7CisJICAgICAgICAgICAgZW5kCisKKwkgICAgICAgIFNUX1NUQVJUOgorCSAgICAgICAgICBpZiAoY29yZV9hY2spCisJICAgICAgICAgICAgYmVnaW4KKwkgICAgICAgICAgICAgICAgaWYgKHJlYWQpCisJICAgICAgICAgICAgICAgICAgYmVnaW4KKwkgICAgICAgICAgICAgICAgICAgICAgY19zdGF0ZSAgPD0gU1RfUkVBRDsKKwkgICAgICAgICAgICAgICAgICAgICAgY29yZV9jbWQgPD0gYEkyQ19DTURfUkVBRDsKKwkgICAgICAgICAgICAgICAgICBlbmQKKwkgICAgICAgICAgICAgICAgZWxzZQorCSAgICAgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgICAgIGNfc3RhdGUgIDw9IFNUX1dSSVRFOworCSAgICAgICAgICAgICAgICAgICAgICBjb3JlX2NtZCA8PSBgSTJDX0NNRF9XUklURTsKKwkgICAgICAgICAgICAgICAgICBlbmQKKworCSAgICAgICAgICAgICAgICBsZCA8PSAxJ2IxOworCSAgICAgICAgICAgIGVuZAorCisJICAgICAgICBTVF9XUklURToKKwkgICAgICAgICAgaWYgKGNvcmVfYWNrKQorCSAgICAgICAgICAgIGlmIChjbnRfZG9uZSkKKwkgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgY19zdGF0ZSAgPD0gU1RfQUNLOworCSAgICAgICAgICAgICAgICAgIGNvcmVfY21kIDw9IGBJMkNfQ01EX1JFQUQ7CisJICAgICAgICAgICAgICBlbmQKKwkgICAgICAgICAgICBlbHNlCisJICAgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgICAgIGNfc3RhdGUgIDw9IFNUX1dSSVRFOyAgICAgICAvLyBzdGF5IGluIHNhbWUgc3RhdGUKKwkgICAgICAgICAgICAgICAgICBjb3JlX2NtZCA8PSBgSTJDX0NNRF9XUklURTsgLy8gd3JpdGUgbmV4dCBiaXQKKwkgICAgICAgICAgICAgICAgICBzaGlmdCAgICA8PSAxJ2IxOworCSAgICAgICAgICAgICAgZW5kCisKKwkgICAgICAgIFNUX1JFQUQ6CisJICAgICAgICAgIGlmIChjb3JlX2FjaykKKwkgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgICBpZiAoY250X2RvbmUpCisJICAgICAgICAgICAgICAgICAgYmVnaW4KKwkgICAgICAgICAgICAgICAgICAgICAgY19zdGF0ZSAgPD0gU1RfQUNLOworCSAgICAgICAgICAgICAgICAgICAgICBjb3JlX2NtZCA8PSBgSTJDX0NNRF9XUklURTsKKwkgICAgICAgICAgICAgICAgICBlbmQKKwkgICAgICAgICAgICAgICAgZWxzZQorCSAgICAgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgICAgIGNfc3RhdGUgIDw9IFNUX1JFQUQ7ICAgICAgIC8vIHN0YXkgaW4gc2FtZSBzdGF0ZQorCSAgICAgICAgICAgICAgICAgICAgICBjb3JlX2NtZCA8PSBgSTJDX0NNRF9SRUFEOyAvLyByZWFkIG5leHQgYml0CisJICAgICAgICAgICAgICAgICAgZW5kCisKKwkgICAgICAgICAgICAgICAgc2hpZnQgICAgPD0gMSdiMTsKKwkgICAgICAgICAgICAgICAgY29yZV90eGQgPD0gYWNrX2luOworCSAgICAgICAgICAgIGVuZAorCisJICAgICAgICBTVF9BQ0s6CisJICAgICAgICAgIGlmIChjb3JlX2FjaykKKwkgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgIGlmIChzdG9wKQorCSAgICAgICAgICAgICAgICAgYmVnaW4KKwkgICAgICAgICAgICAgICAgICAgICBjX3N0YXRlICA8PSBTVF9TVE9QOworCSAgICAgICAgICAgICAgICAgICAgIGNvcmVfY21kIDw9IGBJMkNfQ01EX1NUT1A7CisJICAgICAgICAgICAgICAgICBlbmQKKwkgICAgICAgICAgICAgICBlbHNlCisJICAgICAgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgICAgICAgIGNfc3RhdGUgIDw9IFNUX0lETEU7CisJICAgICAgICAgICAgICAgICAgICAgY29yZV9jbWQgPD0gYEkyQ19DTURfTk9QOworCisJICAgICAgICAgICAgICAgICAgICAgLy8gZ2VuZXJhdGUgY29tbWFuZCBhY2tub3dsZWRnZSBzaWduYWwKKwkgICAgICAgICAgICAgICAgICAgICBjbWRfYWNrICA8PSAxJ2IxOworCSAgICAgICAgICAgICAgICAgZW5kCisKKwkgICAgICAgICAgICAgICAgIC8vIGFzc2lnbiBhY2tfb3V0IG91dHB1dCB0byBiaXRfY29udHJvbGxlcl9yeGQgKGNvbnRhaW5zIGxhc3QgcmVjZWl2ZWQgYml0KQorCSAgICAgICAgICAgICAgICAgYWNrX291dCA8PSAgY29yZV9yeGQ7CisKKwkgICAgICAgICAgICAgICAgIGNvcmVfdHhkIDw9ICAxJ2IxOworCSAgICAgICAgICAgICBlbmQKKwkgICAgICAgICAgIGVsc2UKKwkgICAgICAgICAgICAgY29yZV90eGQgPD0gYWNrX2luOworCisJICAgICAgICBTVF9TVE9QOgorCSAgICAgICAgICBpZiAoY29yZV9hY2spCisJICAgICAgICAgICAgYmVnaW4KKwkgICAgICAgICAgICAgICAgY19zdGF0ZSAgPD0gU1RfSURMRTsKKwkgICAgICAgICAgICAgICAgY29yZV9jbWQgPD0gYEkyQ19DTURfTk9QOworCisJICAgICAgICAgICAgICAgIC8vIGdlbmVyYXRlIGNvbW1hbmQgYWNrbm93bGVkZ2Ugc2lnbmFsCisJICAgICAgICAgICAgICAgIGNtZF9hY2sgIDw9IDEnYjE7CisJICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICBkZWZhdWx0OiBjX3N0YXRlICA8PSBTVF9JRExFOworCisJICAgICAgZW5kY2FzZQorCSAgZW5kCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL2kyY20vc3JjL2NvcmUvaTJjbV90b3AudiBiL3Zlcmlsb2cvcnRsL2kyY20vc3JjL2NvcmUvaTJjbV90b3AudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYjMyZGI5Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvaTJjbS9zcmMvY29yZS9pMmNtX3RvcC52CkBAIC0wLDAgKzEsMjgwIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIE9NUzgwNTEgSTJDIE1hc3RlciBDb3JlIE1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFdJU0hCT05FIHJldkIuMiBjb21wbGlhbnQgSTJDIE1hc3RlciBjb250cm9sbGVyIFRvcC1sZXZlbCAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBPTVMgODA1MSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy9vbXM4MDUxbWluaS8gICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIE9NUyA4MDUxIGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtUmljaGFyZCBIZXJ2ZWlsbGUgLCAgcmljaGFyZEBhc2ljcy53cywgd3d3LmFzaWNzLndzICAgIC8vLy8KKy8vLy8gICAgICAtRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogSmFuIDYsIDIwMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8gCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgICAgdjAuMCAtIERpbmVzaCBBLCA2dGggSmFuIDIwMTcKKy8vICAgICAgICAgIDEuIEluaXRhaWwgdmVyc2lvbiBwaWNrZWQgZnJvbQorLy8gICAgICAgICAgICAgIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9wcm9qZWN0cy9pMmMvCisvLyAgICAgICAgICAyLiByZW5hbWluZyBvZiByZXNldCBzaWduYWwgdG8gYXJlc2V0biBhbmQgc3Jlc2V0bgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYGluY2x1ZGUgImkyY21fZGVmaW5lcy52IgorCittb2R1bGUgaTJjbV90b3AoCisJLy8gd2lzaGJvbmUgc2lnbmFscworCWlucHV0ICAgICAgICB3Yl9jbGtfaSwgICAgIC8vIG1hc3RlciBjbG9jayBpbnB1dAorCWlucHV0ICAgICAgICBzcmVzZXRuLCAgICAgIC8vIHN5bmNocm9ub3VzIHJlc2V0CisJaW5wdXQgICAgICAgIGFyZXNldG4sICAgICAgLy8gYXN5bmNocm9ub3VzIHJlc2V0CisJaW5wdXQgIFsyOjBdIHdiX2Fkcl9pLCAgICAgLy8gbG93ZXIgYWRkcmVzcyBiaXRzCisJaW5wdXQgIFs3OjBdIHdiX2RhdF9pLCAgICAgLy8gZGF0YWJ1cyBpbnB1dAorCW91dHB1dCByZWcgWzc6MF0gd2JfZGF0X28sICAgICAvLyBkYXRhYnVzIG91dHB1dAorCWlucHV0ICAgICAgICB3Yl93ZV9pLCAgICAgIC8vIHdyaXRlIGVuYWJsZSBpbnB1dAorCWlucHV0ICAgICAgICB3Yl9zdGJfaSwgICAgIC8vIHN0b2JlL2NvcmUgc2VsZWN0IHNpZ25hbAorCWlucHV0ICAgICAgICB3Yl9jeWNfaSwgICAgIC8vIHZhbGlkIGJ1cyBjeWNsZSBpbnB1dAorCW91dHB1dCByZWcgICB3Yl9hY2tfbywgICAgIC8vIGJ1cyBjeWNsZSBhY2tub3dsZWRnZSBvdXRwdXQKKwlvdXRwdXQgcmVnICB3Yl9pbnRhX28sICAgIC8vIGludGVycnVwdCByZXF1ZXN0IHNpZ25hbCBvdXRwdXQKKworCS8vIEkyQyBzaWduYWxzCisJLy8gaTJjIGNsb2NrIGxpbmUKKwlpbnB1dCAgICAgICAgc2NsX3BhZF9pLCAgICAvLyBTQ0wtbGluZSBpbnB1dAorCW91dHB1dCAgICAgICBzY2xfcGFkX28sICAgIC8vIFNDTC1saW5lIG91dHB1dCAoYWx3YXlzIDEnYjApCisJb3V0cHV0ICAgICAgIHNjbF9wYWRvZW5fbywgLy8gU0NMLWxpbmUgb3V0cHV0IGVuYWJsZSAoYWN0aXZlIGxvdykKKworCS8vIGkyYyBkYXRhIGxpbmUKKwlpbnB1dCAgICAgICAgc2RhX3BhZF9pLCAgICAvLyBTREEtbGluZSBpbnB1dAorCW91dHB1dCAgICAgICBzZGFfcGFkX28sICAgIC8vIFNEQS1saW5lIG91dHB1dCAoYWx3YXlzIDEnYjApCisJb3V0cHV0ICAgICAgIHNkYV9wYWRvZW5fbyAgLy8gU0RBLWxpbmUgb3V0cHV0IGVuYWJsZSAoYWN0aXZlIGxvdykKKworICAgICAgICAgKTsKKworCisJLy8KKwkvLyB2YXJpYWJsZSBkZWNsYXJhdGlvbnMKKwkvLworCisJLy8gcmVnaXN0ZXJzCisJcmVnICBbMTU6MF0gcHJlcjsgLy8gY2xvY2sgcHJlc2NhbGUgcmVnaXN0ZXIKKwlyZWcgIFsgNzowXSBjdHI7ICAvLyBjb250cm9sIHJlZ2lzdGVyCisJcmVnICBbIDc6MF0gdHhyOyAgLy8gdHJhbnNtaXQgcmVnaXN0ZXIKKwl3aXJlIFsgNzowXSByeHI7ICAvLyByZWNlaXZlIHJlZ2lzdGVyCisJcmVnICBbIDc6MF0gY3I7ICAgLy8gY29tbWFuZCByZWdpc3RlcgorCXdpcmUgWyA3OjBdIHNyOyAgIC8vIHN0YXR1cyByZWdpc3RlcgorCisJLy8gZG9uZSBzaWduYWw6IGNvbW1hbmQgY29tcGxldGVkLCBjbGVhciBjb21tYW5kIHJlZ2lzdGVyCisJd2lyZSBkb25lOworCisJLy8gY29yZSBlbmFibGUgc2lnbmFsCisJd2lyZSBjb3JlX2VuOworCXdpcmUgaWVuOworCisJLy8gc3RhdHVzIHJlZ2lzdGVyIHNpZ25hbHMKKwl3aXJlIGlyeGFjazsKKwlyZWcgIHJ4YWNrOyAgICAgICAvLyByZWNlaXZlZCBha25vd2xlZGdlIGZyb20gc2xhdmUKKwlyZWcgIHRpcDsgICAgICAgICAvLyB0cmFuc2ZlciBpbiBwcm9ncmVzcworCXJlZyAgaXJxX2ZsYWc7ICAgIC8vIGludGVycnVwdCBwZW5kaW5nIGZsYWcKKwl3aXJlIGkyY19idXN5OyAgICAvLyBidXMgYnVzeSAoc3RhcnQgc2lnbmFsIGRldGVjdGVkKQorCXdpcmUgaTJjX2FsOyAgICAgIC8vIGkyYyBidXMgYXJiaXRyYXRpb24gbG9zdAorCXJlZyAgYWw7ICAgICAgICAgIC8vIHN0YXR1cyByZWdpc3RlciBhcmJpdHJhdGlvbiBsb3N0IGJpdAorCisJLy8KKwkvLyBtb2R1bGUgYm9keQorCS8vCisKKworCS8vIGdlbmVyYXRlIHdpc2hib25lIHNpZ25hbHMKKwl3aXJlIHdiX3dhY2MgPSB3Yl93ZV9pICYgd2JfYWNrX287CisKKwkvLyBnZW5lcmF0ZSBhY2tub3dsZWRnZSBvdXRwdXQgc2lnbmFsCisJYWx3YXlzIEAocG9zZWRnZSB3Yl9jbGtfaSkKKwkgIHdiX2Fja19vIDw9ICMxIHdiX2N5Y19pICYgd2Jfc3RiX2kgJiB+d2JfYWNrX287IC8vIGJlY2F1c2UgdGltaW5nIGlzIGFsd2F5cyBob25vcmVkCisKKwkvLyBhc3NpZ24gREFUX08KKwlhbHdheXMgQChwb3NlZGdlIHdiX2Nsa19pKQorCWJlZ2luCisJICBjYXNlICh3Yl9hZHJfaSkgLy8gc3lub3BzeXMgcGFyYWxsZWxfY2FzZQorCSAgICAzJ2IwMDA6IHdiX2RhdF9vIDw9ICMxIHByZXJbIDc6MF07CisJICAgIDMnYjAwMTogd2JfZGF0X28gPD0gIzEgcHJlclsxNTo4XTsKKwkgICAgMydiMDEwOiB3Yl9kYXRfbyA8PSAjMSBjdHI7CisJICAgIDMnYjAxMTogd2JfZGF0X28gPD0gIzEgcnhyOyAvLyB3cml0ZSBpcyB0cmFuc21pdCByZWdpc3RlciAodHhyKQorCSAgICAzJ2IxMDA6IHdiX2RhdF9vIDw9ICMxIHNyOyAgLy8gd3JpdGUgaXMgY29tbWFuZCByZWdpc3RlciAoY3IpCisJICAgIDMnYjEwMTogd2JfZGF0X28gPD0gIzEgdHhyOworCSAgICAzJ2IxMTA6IHdiX2RhdF9vIDw9ICMxIGNyOworCSAgICAzJ2IxMTE6IHdiX2RhdF9vIDw9ICMxIDA7ICAgLy8gcmVzZXJ2ZWQKKwkgIGVuZGNhc2UKKwllbmQKKworCS8vIGdlbmVyYXRlIHJlZ2lzdGVycworCWFsd2F5cyBAKHBvc2VkZ2Ugd2JfY2xrX2kgb3IgbmVnZWRnZSBhcmVzZXRuKQorCSAgaWYgKCFhcmVzZXRuKQorCSAgICBiZWdpbgorCSAgICAgICAgcHJlciA8PSAjMSAxNidoZmZmZjsKKwkgICAgICAgIGN0ciAgPD0gIzEgIDgnaDA7CisJICAgICAgICB0eHIgIDw9ICMxICA4J2gwOworCSAgICBlbmQKKwkgIGVsc2UgaWYgKCFzcmVzZXRuKQorCSAgICBiZWdpbgorCSAgICAgICAgcHJlciA8PSAjMSAxNidoZmZmZjsKKwkgICAgICAgIGN0ciAgPD0gIzEgIDgnaDA7CisJICAgICAgICB0eHIgIDw9ICMxICA4J2gwOworCSAgICBlbmQKKwkgIGVsc2UKKwkgICAgaWYgKHdiX3dhY2MpCisJICAgICAgY2FzZSAod2JfYWRyX2kpIC8vIHN5bm9wc3lzIHBhcmFsbGVsX2Nhc2UKKwkgICAgICAgICAzJ2IwMDAgOiBwcmVyIFsgNzowXSA8PSAjMSB3Yl9kYXRfaTsKKwkgICAgICAgICAzJ2IwMDEgOiBwcmVyIFsxNTo4XSA8PSAjMSB3Yl9kYXRfaTsKKwkgICAgICAgICAzJ2IwMTAgOiBjdHIgICAgICAgICA8PSAjMSB3Yl9kYXRfaTsKKwkgICAgICAgICAzJ2IwMTEgOiB0eHIgICAgICAgICA8PSAjMSB3Yl9kYXRfaTsKKwkgICAgICAgICBkZWZhdWx0OiA7CisJICAgICAgZW5kY2FzZQorCisJLy8gZ2VuZXJhdGUgY29tbWFuZCByZWdpc3RlciAoc3BlY2lhbCBjYXNlKQorCWFsd2F5cyBAKHBvc2VkZ2Ugd2JfY2xrX2kgb3IgbmVnZWRnZSBhcmVzZXRuKQorCSAgaWYgKCFhcmVzZXRuKQorCSAgICBjciA8PSAjMSA4J2gwOworCSAgZWxzZSBpZiAoIXNyZXNldG4pCisJICAgIGNyIDw9ICMxIDgnaDA7CisJICBlbHNlIGlmICh3Yl93YWNjKQorCSAgICBiZWdpbgorCSAgICAgICAgaWYgKGNvcmVfZW4gJiAod2JfYWRyX2kgPT0gMydiMTAwKSApCisJICAgICAgICAgIGNyIDw9ICMxIHdiX2RhdF9pOworCSAgICBlbmQKKwkgIGVsc2UKKwkgICAgYmVnaW4KKwkgICAgICAgIGlmIChkb25lIHwgaTJjX2FsKQorCSAgICAgICAgICBjcls3OjRdIDw9ICMxIDQnaDA7ICAgICAgICAgICAvLyBjbGVhciBjb21tYW5kIGJpdHMgd2hlbiBkb25lCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIHdoZW4gYXJpYml0cmF0aW9uIGxvc3QKKwkgICAgICAgIGNyWzI6MV0gPD0gIzEgMidiMDsgICAgICAgICAgICAgLy8gcmVzZXJ2ZWQgYml0cworCSAgICAgICAgY3JbMF0gICA8PSAjMSAxJ2IwOyAgICAgICAgICAgICAvLyBjbGVhciBJUlFfQUNLIGJpdAorCSAgICBlbmQKKworCisJLy8gZGVjb2RlIGNvbW1hbmQgcmVnaXN0ZXIKKwl3aXJlIHN0YSAgPSBjcls3XTsKKwl3aXJlIHN0byAgPSBjcls2XTsKKwl3aXJlIHJkICAgPSBjcls1XTsKKwl3aXJlIHdyICAgPSBjcls0XTsKKwl3aXJlIGFjayAgPSBjclszXTsKKwl3aXJlIGlhY2sgPSBjclswXTsKKworCS8vIGRlY29kZSBjb250cm9sIHJlZ2lzdGVyCisJYXNzaWduIGNvcmVfZW4gPSBjdHJbN107CisJYXNzaWduIGllbiA9IGN0cls2XTsKKworCS8vIGhvb2t1cCBieXRlIGNvbnRyb2xsZXIgYmxvY2sKKwlpMmNtX2J5dGVfY3RybCB1X2J5dGVfY3RybCAoCisJCS5jbGsgICAgICAoIHdiX2Nsa19pICAgICApLAorCQkuc3Jlc2V0biAgKCBzcmVzZXRuICAgICAgKSwKKwkJLmFyZXNldG4gICggYXJlc2V0biAgICAgICksCisJCS5lbmEgICAgICAoIGNvcmVfZW4gICAgICApLAorCQkuY2xrX2NudCAgKCBwcmVyICAgICAgICAgKSwKKwkJLnN0YXJ0ICAgICggc3RhICAgICAgICAgICksCisJCS5zdG9wICAgICAoIHN0byAgICAgICAgICApLAorCQkucmVhZCAgICAgKCByZCAgICAgICAgICAgKSwKKwkJLndyaXRlICAgICggd3IgICAgICAgICAgICksCisJCS5hY2tfaW4gICAoIGFjayAgICAgICAgICApLAorCQkuZGluICAgICAgKCB0eHIgICAgICAgICAgKSwKKwkJLmNtZF9hY2sgICggZG9uZSAgICAgICAgICksCisJCS5hY2tfb3V0ICAoIGlyeGFjayAgICAgICApLAorCQkuZG91dCAgICAgKCByeHIgICAgICAgICAgKSwKKwkJLmkyY19idXN5ICggaTJjX2J1c3kgICAgICksCisJCS5pMmNfYWwgICAoIGkyY19hbCAgICAgICApLAorCQkuc2NsX2kgICAgKCBzY2xfcGFkX2kgICAgKSwKKwkJLnNjbF9vICAgICggc2NsX3BhZF9vICAgICksCisJCS5zY2xfb2VuICAoIHNjbF9wYWRvZW5fbyApLAorCQkuc2RhX2kgICAgKCBzZGFfcGFkX2kgICAgKSwKKwkJLnNkYV9vICAgICggc2RhX3BhZF9vICAgICksCisJCS5zZGFfb2VuICAoIHNkYV9wYWRvZW5fbyApCisJKTsKKworCS8vIHN0YXR1cyByZWdpc3RlciBibG9jayArIGludGVycnVwdCByZXF1ZXN0IHNpZ25hbAorCWFsd2F5cyBAKHBvc2VkZ2Ugd2JfY2xrX2kgb3IgbmVnZWRnZSBhcmVzZXRuKQorCSAgaWYgKCFhcmVzZXRuKQorCSAgICBiZWdpbgorCSAgICAgICAgYWwgICAgICAgPD0gIzEgMSdiMDsKKwkgICAgICAgIHJ4YWNrICAgIDw9ICMxIDEnYjA7CisJICAgICAgICB0aXAgICAgICA8PSAjMSAxJ2IwOworCSAgICAgICAgaXJxX2ZsYWcgPD0gIzEgMSdiMDsKKwkgICAgZW5kCisJICBlbHNlIGlmICghc3Jlc2V0bikKKwkgICAgYmVnaW4KKwkgICAgICAgIGFsICAgICAgIDw9ICMxIDEnYjA7CisJICAgICAgICByeGFjayAgICA8PSAjMSAxJ2IwOworCSAgICAgICAgdGlwICAgICAgPD0gIzEgMSdiMDsKKwkgICAgICAgIGlycV9mbGFnIDw9ICMxIDEnYjA7CisJICAgIGVuZAorCSAgZWxzZQorCSAgICBiZWdpbgorCSAgICAgICAgYWwgICAgICAgPD0gIzEgaTJjX2FsIHwgKGFsICYgfnN0YSk7CisJICAgICAgICByeGFjayAgICA8PSAjMSBpcnhhY2s7CisJICAgICAgICB0aXAgICAgICA8PSAjMSAocmQgfCB3cik7CisJICAgICAgICBpcnFfZmxhZyA8PSAjMSAoZG9uZSB8IGkyY19hbCB8IGlycV9mbGFnKSAmIH5pYWNrOyAvLyBpbnRlcnJ1cHQgcmVxdWVzdCBmbGFnIGlzIGFsd2F5cyBnZW5lcmF0ZWQKKwkgICAgZW5kCisKKwkvLyBnZW5lcmF0ZSBpbnRlcnJ1cHQgcmVxdWVzdCBzaWduYWxzCisJYWx3YXlzIEAocG9zZWRnZSB3Yl9jbGtfaSBvciBuZWdlZGdlIGFyZXNldG4pCisJICBpZiAoIWFyZXNldG4pCisJICAgIHdiX2ludGFfbyA8PSAjMSAxJ2IwOworCSAgZWxzZSBpZiAoIXNyZXNldG4pCisJICAgIHdiX2ludGFfbyA8PSAjMSAxJ2IwOworCSAgZWxzZQorCSAgICB3Yl9pbnRhX28gPD0gIzEgaXJxX2ZsYWcgJiYgaWVuOyAvLyBpbnRlcnJ1cHQgc2lnbmFsIGlzIG9ubHkgZ2VuZXJhdGVkIHdoZW4gSUVOIChpbnRlcnJ1cHQgZW5hYmxlIGJpdCBpcyBzZXQpCisKKwkvLyBhc3NpZ24gc3RhdHVzIHJlZ2lzdGVyIGJpdHMKKwlhc3NpZ24gc3JbN10gICA9IHJ4YWNrOworCWFzc2lnbiBzcls2XSAgID0gaTJjX2J1c3k7CisJYXNzaWduIHNyWzVdICAgPSBhbDsKKwlhc3NpZ24gc3JbNDoyXSA9IDMnaDA7IC8vIHJlc2VydmVkCisJYXNzaWduIHNyWzFdICAgPSB0aXA7CisJYXNzaWduIHNyWzBdICAgPSBpcnFfZmxhZzsKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9pMmNtL3NyYy9pbmNsdWRlcy9pMmNtX2RlZmluZXMudiBiL3Zlcmlsb2cvcnRsL2kyY20vc3JjL2luY2x1ZGVzL2kyY21fZGVmaW5lcy52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNjZmVlMjUKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9pMmNtL3NyYy9pbmNsdWRlcy9pMmNtX2RlZmluZXMudgpAQCAtMCwwICsxLDI1IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vIEkyQyByZWdpc3RlcnMgd2lzaGJvbmUgYWRkcmVzc2VzCisKKy8vIGJpdGNvbnRyb2xsZXIgc3RhdGVzCitgZGVmaW5lIEkyQ19DTURfTk9QICAgNCdiMDAwMAorYGRlZmluZSBJMkNfQ01EX1NUQVJUIDQnYjAwMDEKK2BkZWZpbmUgSTJDX0NNRF9TVE9QICA0J2IwMDEwCitgZGVmaW5lIEkyQ19DTURfV1JJVEUgNCdiMDEwMAorYGRlZmluZSBJMkNfQ01EX1JFQUQgIDQnYjEwMDAKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL2xpYi9hc3luY19maWZvLnN2IGIvdmVyaWxvZy9ydGwvbGliL2FzeW5jX2ZpZm8uc3YKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmQ1OWNmYQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2xpYi9hc3luY19maWZvLnN2CkBAIC0wLDAgKzEsMzQxIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIEFTWU5DIEZJRk8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBzZHJhbSBjb250cm9sbGVyIHByb2plY3QKKyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWlmaXZlX3IwLmdpdCAgICAgICAgICAgCisgIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy9zZHJfY3RybC8gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgRGVzY3JpcHRpb246IEFTWU5DIEZJRk8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBBdXRob3Iocyk6ICBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgCisgcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIAorIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAKKyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAKKyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgCisgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IAorIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAKK2xhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIAorIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAKKyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgCisgUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIAorIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIAorIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAKKyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBhc3luYyBGSUZPCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvL2B0aW1lc2NhbGUgIDFucy8xcHMKKworbW9kdWxlIGFzeW5jX2ZpZm8gKHdyX2NsaywKKyAgICAgICAgICAgICAgICAgICB3cl9yZXNldF9uLAorICAgICAgICAgICAgICAgICAgIHdyX2VuLAorICAgICAgICAgICAgICAgICAgIHdyX2RhdGEsCisgICAgICAgICAgICAgICAgICAgZnVsbCwgICAgICAgICAgICAgICAgIC8vIHN5bmMnZWQgdG8gd3JfY2xrCisgICAgICAgICAgICAgICAgICAgYWZ1bGwsICAgICAgICAgICAgICAgICAvLyBzeW5jJ2VkIHRvIHdyX2NsaworICAgICAgICAgICAgICAgICAgIHJkX2NsaywKKyAgICAgICAgICAgICAgICAgICByZF9yZXNldF9uLAorICAgICAgICAgICAgICAgICAgIHJkX2VuLAorICAgICAgICAgICAgICAgICAgIGVtcHR5LCAgICAgICAgICAgICAgICAvLyBzeW5jJ2VkIHRvIHJkX2NsaworICAgICAgICAgICAgICAgICAgIGFlbXB0eSwgICAgICAgICAgICAgICAgLy8gc3luYydlZCB0byByZF9jbGsKKyAgICAgICAgICAgICAgICAgICByZF9kYXRhKTsKKworICAgcGFyYW1ldGVyIFcgPSA0J2Q4OworICAgcGFyYW1ldGVyIERQID0gMydkNDsKKyAgIHBhcmFtZXRlciBXUl9GQVNUID0gMSdiMTsKKyAgIHBhcmFtZXRlciBSRF9GQVNUID0gMSdiMTsKKyAgIHBhcmFtZXRlciBGVUxMX0RQID0gRFA7CisgICBwYXJhbWV0ZXIgRU1QVFlfRFAgPSAxJ2IwOworCisgICBwYXJhbWV0ZXIgQVcgPSAoRFAgPT0gMikgICA/IDEgOiAKKwkJICAoRFAgPT0gNCkgICA/IDIgOgorICAgICAgICAgICAgICAgICAgKERQID09IDgpICAgPyAzIDoKKyAgICAgICAgICAgICAgICAgIChEUCA9PSAxNikgID8gNCA6CisgICAgICAgICAgICAgICAgICAoRFAgPT0gMzIpICA/IDUgOgorICAgICAgICAgICAgICAgICAgKERQID09IDY0KSAgPyA2IDoKKyAgICAgICAgICAgICAgICAgIChEUCA9PSAxMjgpID8gNyA6CisgICAgICAgICAgICAgICAgICAoRFAgPT0gMjU2KSA/IDggOiAwOworCisgICBvdXRwdXQgW1ctMSA6IDBdICByZF9kYXRhOworICAgaW5wdXQgW1ctMSA6IDBdICAgd3JfZGF0YTsKKyAgIGlucHV0ICAgICAgICAgICAgIHdyX2Nsaywgd3JfcmVzZXRfbiwgd3JfZW4sIHJkX2NsaywgcmRfcmVzZXRfbiwKKyAgICAgICAgICAgICAgICAgICAgIHJkX2VuOworICAgb3V0cHV0ICAgICAgICAgICAgZnVsbCwgZW1wdHk7CisgICBvdXRwdXQgICAgICAgICAgICBhZnVsbCwgYWVtcHR5OyAgICAgICAvLyBhYm91dCBmdWxsIGFuZCBhYm91dCB0byBlbXB0eQorCisKKyAgIC8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYKKworICAgaW5pdGlhbCBiZWdpbgorICAgICAgaWYgKEFXID09IDApIGJlZ2luCisgICAgICAgICAkZGlzcGxheSAoIiVtIDogRVJST1IhISEgRmlmbyBkZXB0aCAlZCBub3QgaW4gcmFuZ2UgMiB0byAyNTYiLCBEUCk7CisgICAgICBlbmQgLy8gaWYgKEFXID09IDApCisgICBlbmQgLy8gaW5pdGlhbCBiZWdpbgorCisgICAvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb24KKworICAgcmVnIFtXLTEgOiAwXSAgICBtZW1bRFAtMSA6IDBdOworCisgICAvKioqKioqKioqKioqKioqKioqKioqKiogd3JpdGUgc2lkZSAqKioqKioqKioqKioqKioqKioqKioqKiovCisgICByZWcgW0FXOjBdIHN5bmNfcmRfcHRyXzAsIHN5bmNfcmRfcHRyXzE7IAorICAgd2lyZSBbQVc6MF0gc3luY19yZF9wdHI7CisgICByZWcgW0FXOjBdIHdyX3B0ciwgZ3JleV93cl9wdHI7CisgICByZWcgW0FXOjBdIGdyZXlfcmRfcHRyOworICAgcmVnIGZ1bGxfcTsKKyAgIHdpcmUgZnVsbF9jOworICAgd2lyZSBhZnVsbF9jOworICAgd2lyZSBbQVc6MF0gd3JfcHRyX2luYyA9IHdyX3B0ciArIDEnYjE7CisgICB3aXJlIFtBVzowXSB3cl9jbnQgPSBnZXRfY250KHdyX3B0ciwgc3luY19yZF9wdHIpOworCisgICBhc3NpZ24gZnVsbF9jICA9ICh3cl9jbnQgPT0gRlVMTF9EUCkgPyAxJ2IxIDogMSdiMDsKKyAgIGFzc2lnbiBhZnVsbF9jID0gKHdyX2NudCA9PSBGVUxMX0RQLTEpID8gMSdiMSA6IDEnYjA7CisKKworICAgYWx3YXlzIEAocG9zZWRnZSB3cl9jbGsgb3IgbmVnZWRnZSB3cl9yZXNldF9uKSBiZWdpbgorCWlmICghd3JfcmVzZXRfbikgYmVnaW4KKwkJd3JfcHRyIDw9IDA7CisJCWdyZXlfd3JfcHRyIDw9IDA7CisJCWZ1bGxfcSA8PSAwOwkKKwllbmQKKwllbHNlIGlmICh3cl9lbikgYmVnaW4KKwkJd3JfcHRyIDw9IHdyX3B0cl9pbmM7CisJCWdyZXlfd3JfcHRyIDw9IGJpbjJncmV5KHdyX3B0cl9pbmMpOworCQlpZiAod3JfY250ID09IChGVUxMX0RQLTEpKSBiZWdpbgorCQkJZnVsbF9xIDw9IDEnYjE7CisJCWVuZAorCWVuZAorCWVsc2UgYmVnaW4KKwkgICAgCWlmIChmdWxsX3EgJiYgKHdyX2NudDxGVUxMX0RQKSkgYmVnaW4KKwkJCWZ1bGxfcSA8PSAxJ2IwOworCSAgICAgCWVuZAorCWVuZAorICAgIGVuZAorCisgICAgYXNzaWduIGZ1bGwgID0gKFdSX0ZBU1QgPT0gMSkgPyBmdWxsX2MgOiBmdWxsX3E7CisgICAgYXNzaWduIGFmdWxsID0gYWZ1bGxfYzsKKworICAgIGFsd2F5cyBAKHBvc2VkZ2Ugd3JfY2xrKSBiZWdpbgorCWlmICh3cl9lbikgYmVnaW4KKwkJbWVtW3dyX3B0cltBVy0xOjBdXSA8PSB3cl9kYXRhOworCWVuZAorICAgIGVuZAorCisgICAgd2lyZSBbQVc6MF0gZ3JleV9yZF9wdHJfZGx5IDsKKyAgICBhc3NpZ24gIzEgZ3JleV9yZF9wdHJfZGx5ID0gZ3JleV9yZF9wdHI7CisKKyAgICAvLyByZWFkIHBvaW50ZXIgc3luY2hyb25pemVyCisgICAgYWx3YXlzIEAocG9zZWRnZSB3cl9jbGsgb3IgbmVnZWRnZSB3cl9yZXNldF9uKSBiZWdpbgorCWlmICghd3JfcmVzZXRfbikgYmVnaW4KKwkJc3luY19yZF9wdHJfMCA8PSAwOworCQlzeW5jX3JkX3B0cl8xIDw9IDA7CisJZW5kCisJZWxzZSBiZWdpbgorCQlzeW5jX3JkX3B0cl8wIDw9IGdyZXlfcmRfcHRyX2RseTsJCQorCQlzeW5jX3JkX3B0cl8xIDw9IHN5bmNfcmRfcHRyXzA7CisJZW5kCisgICAgZW5kCisKKyAgICBhc3NpZ24gc3luY19yZF9wdHIgPSBncmV5MmJpbihzeW5jX3JkX3B0cl8xKTsKKworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiByZWFkIHNpZGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICByZWcgW0FXOjBdIHN5bmNfd3JfcHRyXzAsIHN5bmNfd3JfcHRyXzE7IAorICAgd2lyZSBbQVc6MF0gc3luY193cl9wdHI7CisgICByZWcgW0FXOjBdIHJkX3B0cjsKKyAgIHJlZyBlbXB0eV9xOworICAgd2lyZSBlbXB0eV9jOworICAgd2lyZSBhZW1wdHlfYzsKKyAgIHdpcmUgW0FXOjBdIHJkX3B0cl9pbmMgPSByZF9wdHIgKyAxJ2IxOworICAgd2lyZSBbQVc6MF0gc3luY193cl9wdHJfZGVjID0gc3luY193cl9wdHIgLSAxJ2IxOworICAgd2lyZSBbQVc6MF0gcmRfY250ID0gZ2V0X2NudChzeW5jX3dyX3B0ciwgcmRfcHRyKTsKKyAKKyAgIGFzc2lnbiBlbXB0eV9jICA9IChyZF9jbnQgPT0gMCkgPyAxJ2IxIDogMSdiMDsKKyAgIGFzc2lnbiBhZW1wdHlfYyA9IChyZF9jbnQgPT0gMSkgPyAxJ2IxIDogMSdiMDsKKworICAgYWx3YXlzIEAocG9zZWRnZSByZF9jbGsgb3IgbmVnZWRnZSByZF9yZXNldF9uKSBiZWdpbgorICAgICAgaWYgKCFyZF9yZXNldF9uKSBiZWdpbgorICAgICAgICAgcmRfcHRyIDw9IDA7CisJIGdyZXlfcmRfcHRyIDw9IDA7CisJIGVtcHR5X3EgPD0gMSdiMTsKKyAgICAgIGVuZAorICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgaWYgKHJkX2VuKSBiZWdpbgorICAgICAgICAgICAgcmRfcHRyIDw9IHJkX3B0cl9pbmM7CisgICAgICAgICAgICBncmV5X3JkX3B0ciA8PSBiaW4yZ3JleShyZF9wdHJfaW5jKTsKKyAgICAgICAgICAgIGlmIChyZF9jbnQ9PShFTVBUWV9EUCsxKSkgYmVnaW4KKyAgICAgICAgICAgICAgIGVtcHR5X3EgPD0gMSdiMTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgZW5kCisgICAgICAgICBlbHNlIGJlZ2luCisgICAgICAgICAgICBpZiAoZW1wdHlfcSAmJiAocmRfY250IT1FTVBUWV9EUCkpIGJlZ2luCisJICAgICAgZW1wdHlfcSA8PSAxJ2IwOworCSAgICBlbmQKKyAgICAgICAgIGVuZAorICAgICAgIGVuZAorICAgIGVuZAorCisgICAgYXNzaWduIGVtcHR5ICA9IChSRF9GQVNUID09IDEpID8gZW1wdHlfYyA6IGVtcHR5X3E7CisgICAgYXNzaWduIGFlbXB0eSA9IGFlbXB0eV9jOworCisgICAgcmVnIFtXLTEgOiAwXSAgcmRfZGF0YV9xOworCisgICB3aXJlIFtXLTEgOiAwXSByZF9kYXRhX2MgPSBtZW1bcmRfcHRyW0FXLTE6MF1dOworICAgYWx3YXlzIEAocG9zZWRnZSByZF9jbGspIGJlZ2luCisJcmRfZGF0YV9xIDw9IHJkX2RhdGFfYzsKKyAgIGVuZAorICAgYXNzaWduIHJkX2RhdGEgID0gKFJEX0ZBU1QgPT0gMSkgPyByZF9kYXRhX2MgOiByZF9kYXRhX3E7CisKKyAgICB3aXJlIFtBVzowXSBncmV5X3dyX3B0cl9kbHkgOworICAgIGFzc2lnbiAjMSBncmV5X3dyX3B0cl9kbHkgPSAgZ3JleV93cl9wdHI7CisKKyAgICAvLyB3cml0ZSBwb2ludGVyIHN5bmNocm9uaXplcgorICAgIGFsd2F5cyBAKHBvc2VkZ2UgcmRfY2xrIG9yIG5lZ2VkZ2UgcmRfcmVzZXRfbikgYmVnaW4KKwlpZiAoIXJkX3Jlc2V0X24pIGJlZ2luCisJICAgc3luY193cl9wdHJfMCA8PSAwOworCSAgIHN5bmNfd3JfcHRyXzEgPD0gMDsKKwllbmQKKwllbHNlIGJlZ2luCisJICAgc3luY193cl9wdHJfMCA8PSBncmV5X3dyX3B0cl9kbHk7CQkKKwkgICBzeW5jX3dyX3B0cl8xIDw9IHN5bmNfd3JfcHRyXzA7CisJZW5kCisgICAgZW5kCisgICAgYXNzaWduIHN5bmNfd3JfcHRyID0gZ3JleTJiaW4oc3luY193cl9wdHJfMSk7CisKKwkKKy8qKioqKioqKioqKioqKioqKioqKioqKiogZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2Z1bmN0aW9uIFtBVzowXSBiaW4yZ3JleTsKK2lucHV0IFtBVzowXSBiaW47CityZWcgWzg6MF0gYmluXzg7CityZWcgWzg6MF0gZ3JleV84OworYmVnaW4KKwliaW5fOCA9IGJpbjsKKwlncmV5XzhbMTowXSA9IGRvX2dyZXkoYmluXzhbMjowXSk7CisJZ3JleV84WzM6Ml0gPSBkb19ncmV5KGJpbl84WzQ6Ml0pOworCWdyZXlfOFs1OjRdID0gZG9fZ3JleShiaW5fOFs2OjRdKTsKKwlncmV5XzhbNzo2XSA9IGRvX2dyZXkoYmluXzhbODo2XSk7CisJZ3JleV84WzhdID0gYmluXzhbOF07CisJYmluMmdyZXkgPSBncmV5Xzg7CitlbmQKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uIFtBVzowXSBncmV5MmJpbjsKK2lucHV0IFtBVzowXSBncmV5OworcmVnIFs4OjBdIGdyZXlfODsKK3JlZyBbODowXSBiaW5fODsKK2JlZ2luCisJZ3JleV84ID0gZ3JleTsKKwliaW5fOFs4XSA9IGdyZXlfOFs4XTsKKwliaW5fOFs3OjZdID0gZG9fYmluKHtiaW5fOFs4XSwgZ3JleV84Wzc6Nl19KTsKKwliaW5fOFs1OjRdID0gZG9fYmluKHtiaW5fOFs2XSwgZ3JleV84WzU6NF19KTsKKwliaW5fOFszOjJdID0gZG9fYmluKHtiaW5fOFs0XSwgZ3JleV84WzM6Ml19KTsKKwliaW5fOFsxOjBdID0gZG9fYmluKHtiaW5fOFsyXSwgZ3JleV84WzE6MF19KTsKKwlncmV5MmJpbiA9IGJpbl84OworZW5kCitlbmRmdW5jdGlvbgorCisKK2Z1bmN0aW9uIFsxOjBdIGRvX2dyZXk7CitpbnB1dCBbMjowXSBiaW47CitiZWdpbgorCWlmIChiaW5bMl0pIGJlZ2luICAvLyBkbyByZXZlcnNlIGdyZXkKKwkJY2FzZSAoYmluWzE6MF0pIAorCQkJMidiMDA6IGRvX2dyZXkgPSAyJ2IxMDsKKwkJCTInYjAxOiBkb19ncmV5ID0gMidiMTE7CisJCQkyJ2IxMDogZG9fZ3JleSA9IDInYjAxOworCQkJMidiMTE6IGRvX2dyZXkgPSAyJ2IwMDsKKwkJZW5kY2FzZQorCWVuZAorCWVsc2UgYmVnaW4KKwkJY2FzZSAoYmluWzE6MF0pIAorCQkJMidiMDA6IGRvX2dyZXkgPSAyJ2IwMDsKKwkJCTInYjAxOiBkb19ncmV5ID0gMidiMDE7CisJCQkyJ2IxMDogZG9fZ3JleSA9IDInYjExOworCQkJMidiMTE6IGRvX2dyZXkgPSAyJ2IxMDsKKwkJZW5kY2FzZQorCWVuZAorZW5kCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiBbMTowXSBkb19iaW47CitpbnB1dCBbMjowXSBncmV5OworYmVnaW4KKwlpZiAoZ3JleVsyXSkgYmVnaW4JLy8gYWN0dWFsbHkgYmluWzJdCisJCWNhc2UgKGdyZXlbMTowXSkKKwkJCTInYjEwOiBkb19iaW4gPSAyJ2IwMDsKKwkJCTInYjExOiBkb19iaW4gPSAyJ2IwMTsKKwkJCTInYjAxOiBkb19iaW4gPSAyJ2IxMDsKKwkJCTInYjAwOiBkb19iaW4gPSAyJ2IxMTsKKwkJZW5kY2FzZQorCWVuZAorCWVsc2UgYmVnaW4KKwkJY2FzZSAoZ3JleVsxOjBdKQorCQkJMidiMDA6IGRvX2JpbiA9IDInYjAwOworCQkJMidiMDE6IGRvX2JpbiA9IDInYjAxOworCQkJMidiMTE6IGRvX2JpbiA9IDInYjEwOworCQkJMidiMTA6IGRvX2JpbiA9IDInYjExOworCQllbmRjYXNlCisJZW5kCitlbmQKK2VuZGZ1bmN0aW9uCisJCQkKK2Z1bmN0aW9uIFtBVzowXSBnZXRfY250OworaW5wdXQgW0FXOjBdIHdyX3B0ciwgcmRfcHRyOworYmVnaW4KKwlpZiAod3JfcHRyID49IHJkX3B0cikgYmVnaW4KKwkJZ2V0X2NudCA9ICh3cl9wdHIgLSByZF9wdHIpOwkKKwllbmQKKwllbHNlIGJlZ2luCisJCWdldF9jbnQgPSBEUCoyIC0gKHJkX3B0ciAtIHdyX3B0cik7CisJZW5kCitlbmQKK2VuZGZ1bmN0aW9uCisKKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYKK2Fsd2F5cyBAKHBvc2VkZ2Ugd3JfY2xrKSBiZWdpbgorICAgaWYgKHdyX2VuICYmIGZ1bGwpIGJlZ2luCisgICAgICAkZGlzcGxheSgkdGltZSwgIiVtIEVycm9yISBhZmlmbyBvdmVyZmxvdyEiKTsKKyAgICAgICRzdG9wOworICAgZW5kCitlbmQKKworYWx3YXlzIEAocG9zZWRnZSByZF9jbGspIGJlZ2luCisgICBpZiAocmRfZW4gJiYgZW1wdHkpIGJlZ2luCisgICAgICAkZGlzcGxheSgkdGltZSwgIiVtIGVycm9yISBhZmlmbyB1bmRlcmZsb3chIik7CisgICAgICAkc3RvcDsKKyAgIGVuZAorZW5kCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb24KKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9saWIvYXN5bmNfZmlmb190aC5zdiBiL3Zlcmlsb2cvcnRsL2xpYi9hc3luY19maWZvX3RoLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA1ODYwZjgKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9saWIvYXN5bmNfZmlmb190aC5zdgpAQCAtMCwwICsxLDQwNCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBPTVMgODA1MSBjb3JlcyBjb21tb24gbGlicmFyeSBNb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgT01TIDgwNTEgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS95aWZpdmVfcjAuZ2l0ICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvb21zODA1MW1pbmkvICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIEFzeW5jIEZpZm8gd2l0aCB0aHJlc2hvbGQgdHJhY2tpbmcvc3RhdHVzICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6IE5vdiAyNiwgMjAxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLyAKKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBhc3luY19maWZvOjogYXN5bmMgRklGTworLy8gICAgRm9sbG93aW5nIHR3byBwb3J0cyBhcmUgbmV3bHkgYWRkZWQKKy8vICAgICAgICAxLiBBdCB3cml0ZSBjbG9jayBkb21haW46CisvLyAgICAgICAgICAgd3JfdG90YWxfZnJlZV9zcGFjZSAtLT4gIEluZGljYXRlIHRvdGFsIGZyZWUgdHJhbnNmZXIgYXZhaWxhYmxlIAorLy8gICAgICAgIDIuIEF0IHJlYWQgY2xvY2sgZG9tYWluOgorLy8gICAgICAgICAgIHJkX3RvdGFsX2F2YWwgICAgICAgLS0+ICBJbmRpY2F0ZSB0b3RhbCBubyBvZiB0cmFuc2ZlciBhdmFpbGFibGUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlIGFzeW5jX2ZpZm9fdGggKAorCSAgICAgICAgICAgd3JfY2xrLAorICAgICAgICAgICAgICAgICAgIHdyX3Jlc2V0X24sCisgICAgICAgICAgICAgICAgICAgd3JfZW4sCisgICAgICAgICAgICAgICAgICAgd3JfZGF0YSwKKyAgICAgICAgICAgICAgICAgICBmdWxsLCAgICAgICAgICAgICAgICAgLy8gc3luYydlZCB0byB3cl9jbGsKKyAgICAgICAgICAgICAgICAgICBhZnVsbCwgICAgICAgICAgICAgICAgIC8vIHN5bmMnZWQgdG8gd3JfY2xrCisgICAgICAgICAgICAgICAgICAgd3JfdG90YWxfZnJlZV9zcGFjZSwKKyAgICAgICAgICAgICAgICAgICByZF9jbGssCisgICAgICAgICAgICAgICAgICAgcmRfcmVzZXRfbiwKKyAgICAgICAgICAgICAgICAgICByZF9lbiwKKyAgICAgICAgICAgICAgICAgICBlbXB0eSwgICAgICAgICAgICAgICAgLy8gc3luYydlZCB0byByZF9jbGsKKyAgICAgICAgICAgICAgICAgICBhZW1wdHksICAgICAgICAgICAgICAgIC8vIHN5bmMnZWQgdG8gcmRfY2xrCisgICAgICAgICAgICAgICAgICAgcmRfdG90YWxfYXZhbCwKKyAgICAgICAgICAgICAgICAgICByZF9kYXRhKTsKKworICAgcGFyYW1ldGVyIFcgPSA0J2Q4OworICAgcGFyYW1ldGVyIERQID0gMydkNDsKKyAgIHBhcmFtZXRlciBXUl9GQVNUID0gMSdiMTsKKyAgIHBhcmFtZXRlciBSRF9GQVNUID0gMSdiMTsKKyAgIHBhcmFtZXRlciBGVUxMX0RQID0gRFA7CisgICBwYXJhbWV0ZXIgRU1QVFlfRFAgPSAxJ2IwOworCisgICBwYXJhbWV0ZXIgQVcgPSAoRFAgPT0gMikgICA/IDEgOiAKKwkJICAoRFAgPT0gNCkgICA/IDIgOgorICAgICAgICAgICAgICAgICAgKERQID09IDgpICAgPyAzIDoKKyAgICAgICAgICAgICAgICAgIChEUCA9PSAxNikgID8gNCA6CisgICAgICAgICAgICAgICAgICAoRFAgPT0gMzIpICA/IDUgOgorICAgICAgICAgICAgICAgICAgKERQID09IDY0KSAgPyA2IDoKKyAgICAgICAgICAgICAgICAgIChEUCA9PSAxMjgpID8gNyA6CisgICAgICAgICAgICAgICAgICAoRFAgPT0gMjU2KSA/IDggOiAwOworCisgICBvdXRwdXQgW1ctMSA6IDBdICByZF9kYXRhOworICAgaW5wdXQgW1ctMSA6IDBdICAgd3JfZGF0YTsKKyAgIGlucHV0ICAgICAgICAgICAgIHdyX2Nsaywgd3JfcmVzZXRfbiwgd3JfZW4sIHJkX2NsaywgcmRfcmVzZXRfbiwKKyAgICAgICAgICAgICAgICAgICAgIHJkX2VuOworICAgb3V0cHV0ICAgICAgICAgICAgZnVsbCwgZW1wdHk7CisgICBvdXRwdXQgICAgICAgICAgICBhZnVsbCwgYWVtcHR5OyAvLyBhYm91dCBmdWxsIGFuZCBhYm91dCB0byBlbXB0eQorICAgb3V0cHV0ICAgW0FXOjBdICAgd3JfdG90YWxfZnJlZV9zcGFjZTsgLy8gVG90YWwgTnVtYmVyIG9mIGZyZWUgc3BhY2UgYXZhbCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdy5yLnQgd3JpdGUgY2xrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdGU6IFdpdGhvdXQgYWNjb3VudGluZyBieXRlIGVuYWJsZXMKKyAgIG91dHB1dCAgIFtBVzowXSAgIHJkX3RvdGFsX2F2YWw7ICAgICAgIC8vIFRvdGFsIE51bWJlciBvZiB3b3JkcyBhdmFpYWxibGUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHcuci50IHJkIGNsb2NrLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3RlOiBXaXRob3V0IGFjY291bnRpbmcgYnl0ZSBlbmFibGVzCisgICAvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb2ZmCisKKyAgIGluaXRpYWwgYmVnaW4KKyAgICAgIGlmIChBVyA9PSAwKSBiZWdpbgorICAgICAgICAgJGRpc3BsYXkgKCIlbSA6IEVSUk9SISEhIEZpZm8gZGVwdGggJWQgbm90IGluIHJhbmdlIDIgdG8gMjU2IiwgRFApOworICAgICAgZW5kIC8vIGlmIChBVyA9PSAwKQorICAgZW5kIC8vIGluaXRpYWwgYmVnaW4KKworICAgLy8gc3lub3BzeXMgdHJhbnNsYXRlX29uCisgICByZWcgW1ctMSA6IDBdICAgIG1lbVtEUC0xIDogMF07CisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKiB3cml0ZSBzaWRlICoqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgIHJlZyBbQVc6MF0gc3luY19yZF9wdHJfMCwgc3luY19yZF9wdHJfMTsgCisgICB3aXJlIFtBVzowXSBzeW5jX3JkX3B0cjsKKyAgIHJlZyBbQVc6MF0gd3JfcHRyLCBncmV5X3dyX3B0cjsKKyAgIHJlZyBbQVc6MF0gZ3JleV9yZF9wdHI7CisgICByZWcgZnVsbF9xOworICAgd2lyZSBmdWxsX2M7CisgICB3aXJlIGFmdWxsX2M7CisgICB3aXJlIFtBVzowXSB3cl9wdHJfaW5jID0gd3JfcHRyICsgMSdiMTsKKyAgIHdpcmUgW0FXOjBdIHdyX2NudCA9IGdldF9jbnQod3JfcHRyLCBzeW5jX3JkX3B0cik7CisKKyAgIGFzc2lnbiBmdWxsX2MgID0gKHdyX2NudCA9PSBGVUxMX0RQKSA/IDEnYjEgOiAxJ2IwOworICAgYXNzaWduIGFmdWxsX2MgPSAod3JfY250ID09IEZVTExfRFAtMSkgPyAxJ2IxIDogMSdiMDsKKworICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLy8gU2hvd3MgdG90YWwgbnVtYmVyIG9mIHdvcmRzIAorICAgLy8gb2YgZnJlZSBzcGFjZSBhdmFpbGFibGUgdy5yLnQgd3JpdGUgY2xvY2sKKyAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorICAgYXNzaWduIHdyX3RvdGFsX2ZyZWVfc3BhY2UgPSBGVUxMX0RQIC0gd3JfY250OworCisgICBhbHdheXMgQChwb3NlZGdlIHdyX2NsayBvciBuZWdlZGdlIHdyX3Jlc2V0X24pIGJlZ2luCisJaWYgKCF3cl9yZXNldF9uKSBiZWdpbgorCQl3cl9wdHIgPD0gMDsKKwkJZ3JleV93cl9wdHIgPD0gMDsKKwkJZnVsbF9xIDw9IDA7CQorCWVuZAorCWVsc2UgaWYgKHdyX2VuKSBiZWdpbgorCQl3cl9wdHIgPD0gd3JfcHRyX2luYzsKKwkJZ3JleV93cl9wdHIgPD0gYmluMmdyZXkod3JfcHRyX2luYyk7CisJCWlmICh3cl9jbnQgPT0gKEZVTExfRFAtMSkpIGJlZ2luCisJCQlmdWxsX3EgPD0gMSdiMTsKKwkJZW5kCisJZW5kCisJZWxzZSBiZWdpbgorCSAgICAJaWYgKGZ1bGxfcSAmJiAod3JfY250PEZVTExfRFApKSBiZWdpbgorCQkJZnVsbF9xIDw9IDEnYjA7CisJICAgICAJZW5kCisJZW5kCisgICAgZW5kCisKKyAgICBhc3NpZ24gZnVsbCAgPSAoV1JfRkFTVCA9PSAxKSA/IGZ1bGxfYyA6IGZ1bGxfcTsKKyAgICBhc3NpZ24gYWZ1bGwgPSBhZnVsbF9jOworCisgICAgYWx3YXlzIEAocG9zZWRnZSB3cl9jbGspIGJlZ2luCisJaWYgKHdyX2VuKSBiZWdpbgorCQltZW1bd3JfcHRyW0FXLTE6MF1dIDw9IHdyX2RhdGE7CisJZW5kCisgICAgZW5kCisKKyAgICB3aXJlIFtBVzowXSBncmV5X3JkX3B0cl9kbHkgOworICAgIGFzc2lnbiAjMSBncmV5X3JkX3B0cl9kbHkgPSBncmV5X3JkX3B0cjsKKworICAgIC8vIHJlYWQgcG9pbnRlciBzeW5jaHJvbml6ZXIKKyAgICBhbHdheXMgQChwb3NlZGdlIHdyX2NsayBvciBuZWdlZGdlIHdyX3Jlc2V0X24pIGJlZ2luCisJaWYgKCF3cl9yZXNldF9uKSBiZWdpbgorCQlzeW5jX3JkX3B0cl8wIDw9IDA7CisJCXN5bmNfcmRfcHRyXzEgPD0gMDsKKwllbmQKKwllbHNlIGJlZ2luCisJCXN5bmNfcmRfcHRyXzAgPD0gZ3JleV9yZF9wdHJfZGx5OwkJCisJCXN5bmNfcmRfcHRyXzEgPD0gc3luY19yZF9wdHJfMDsKKwllbmQKKyAgICBlbmQKKworICAgIGFzc2lnbiBzeW5jX3JkX3B0ciA9IGdyZXkyYmluKHN5bmNfcmRfcHRyXzEpOworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqIHJlYWQgc2lkZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgIHJlZyBbQVc6MF0gc3luY193cl9wdHJfMCwgc3luY193cl9wdHJfMTsgCisgICB3aXJlIFtBVzowXSBzeW5jX3dyX3B0cjsKKyAgIHJlZyBbQVc6MF0gcmRfcHRyOworICAgcmVnIGVtcHR5X3E7CisgICB3aXJlIGVtcHR5X2M7CisgICB3aXJlIGFlbXB0eV9jOworICAgd2lyZSBbQVc6MF0gcmRfcHRyX2luYyA9IHJkX3B0ciArIDEnYjE7CisgICB3aXJlIFtBVzowXSBzeW5jX3dyX3B0cl9kZWMgPSBzeW5jX3dyX3B0ciAtIDEnYjE7CisgICB3aXJlIFtBVzowXSByZF9jbnQgPSBnZXRfY250KHN5bmNfd3JfcHRyLCByZF9wdHIpOworIAorICAgYXNzaWduIGVtcHR5X2MgID0gKHJkX2NudCA9PSAwKSA/IDEnYjEgOiAxJ2IwOworICAgYXNzaWduIGFlbXB0eV9jID0gKHJkX2NudCA9PSAxKSA/IDEnYjEgOiAxJ2IwOworICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLy8gU2hvd3MgdG90YWwgbnVtYmVyIG9mIHdvcmRzIAorICAgLy8gc3BhY2UgYXZhaWxhYmxlIHcuci50IHdyaXRlIGNsb2NrCisgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKyAgIGFzc2lnbiByZF90b3RhbF9hdmFsID0gcmRfY250OworCisgICBhbHdheXMgQChwb3NlZGdlIHJkX2NsayBvciBuZWdlZGdlIHJkX3Jlc2V0X24pIGJlZ2luCisJaWYgKCFyZF9yZXNldF9uKSBiZWdpbgorCQlyZF9wdHIgPD0gMDsKKwkJZ3JleV9yZF9wdHIgPD0gMDsKKwkJZW1wdHlfcSA8PSAxJ2IxOworCWVuZAorCWVsc2UgYmVnaW4KKwkJaWYgKHJkX2VuKSBiZWdpbgorCQkJcmRfcHRyIDw9IHJkX3B0cl9pbmM7CisJCQlncmV5X3JkX3B0ciA8PSBiaW4yZ3JleShyZF9wdHJfaW5jKTsKKwkJCWlmIChyZF9jbnQ9PShFTVBUWV9EUCsxKSkgYmVnaW4KKwkJCQllbXB0eV9xIDw9IDEnYjE7CisJCQllbmQKKwkJZW5kCisJCWVsc2UgYmVnaW4KKwkJCWlmIChlbXB0eV9xICYmIChyZF9jbnQhPUVNUFRZX0RQKSkgYmVnaW4KKwkJCQllbXB0eV9xIDw9IDEnYjA7CisJCQllbmQKKwkJZW5kCisJZW5kCisgICAgZW5kCisKKyAgICBhc3NpZ24gZW1wdHkgID0gKFJEX0ZBU1QgPT0gMSkgPyBlbXB0eV9jIDogZW1wdHlfcTsKKyAgICBhc3NpZ24gYWVtcHR5ID0gYWVtcHR5X2M7CisKKyAgICBhc3NpZ24gcmRfZGF0YSA9IG1lbVtyZF9wdHJbQVctMTowXV07CisKKyAgICB3aXJlIFtBVzowXSBncmV5X3dyX3B0cl9kbHkgOworICAgIGFzc2lnbiAjMSBncmV5X3dyX3B0cl9kbHkgPSAgZ3JleV93cl9wdHI7CisKKyAgICAvLyB3cml0ZSBwb2ludGVyIHN5bmNocm9uaXplcgorICAgIGFsd2F5cyBAKHBvc2VkZ2UgcmRfY2xrIG9yIG5lZ2VkZ2UgcmRfcmVzZXRfbikgYmVnaW4KKwlpZiAoIXJkX3Jlc2V0X24pIGJlZ2luCisJCXN5bmNfd3JfcHRyXzAgPD0gMDsKKwkJc3luY193cl9wdHJfMSA8PSAwOworCWVuZAorCWVsc2UgYmVnaW4KKwkJc3luY193cl9wdHJfMCA8PSBncmV5X3dyX3B0cl9kbHk7CQkKKwkJc3luY193cl9wdHJfMSA8PSBzeW5jX3dyX3B0cl8wOworCWVuZAorICAgIGVuZAorICAgIGFzc2lnbiBzeW5jX3dyX3B0ciA9IGdyZXkyYmluKHN5bmNfd3JfcHRyXzEpOworCisJCisvKioqKioqKioqKioqKioqKioqKioqKioqIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitmdW5jdGlvbiBbQVc6MF0gYmluMmdyZXk7CitpbnB1dCBbQVc6MF0gYmluOworcmVnIFs4OjBdIGJpbl84OworcmVnIFs4OjBdIGdyZXlfODsKK2JlZ2luCisJYmluXzggPSBiaW47CisJZ3JleV84WzE6MF0gPSBkb19ncmV5KGJpbl84WzI6MF0pOworCWdyZXlfOFszOjJdID0gZG9fZ3JleShiaW5fOFs0OjJdKTsKKwlncmV5XzhbNTo0XSA9IGRvX2dyZXkoYmluXzhbNjo0XSk7CisJZ3JleV84Wzc6Nl0gPSBkb19ncmV5KGJpbl84Wzg6Nl0pOworCWdyZXlfOFs4XSA9IGJpbl84WzhdOworCWJpbjJncmV5ID0gZ3JleV84OworZW5kCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiBbQVc6MF0gZ3JleTJiaW47CitpbnB1dCBbQVc6MF0gZ3JleTsKK3JlZyBbODowXSBncmV5Xzg7CityZWcgWzg6MF0gYmluXzg7CitiZWdpbgorCWdyZXlfOCA9IGdyZXk7CisJYmluXzhbOF0gPSBncmV5XzhbOF07CisJYmluXzhbNzo2XSA9IGRvX2Jpbih7YmluXzhbOF0sIGdyZXlfOFs3OjZdfSk7CisJYmluXzhbNTo0XSA9IGRvX2Jpbih7YmluXzhbNl0sIGdyZXlfOFs1OjRdfSk7CisJYmluXzhbMzoyXSA9IGRvX2Jpbih7YmluXzhbNF0sIGdyZXlfOFszOjJdfSk7CisJYmluXzhbMTowXSA9IGRvX2Jpbih7YmluXzhbMl0sIGdyZXlfOFsxOjBdfSk7CisJZ3JleTJiaW4gPSBiaW5fODsKK2VuZAorZW5kZnVuY3Rpb24KKworCitmdW5jdGlvbiBbMTowXSBkb19ncmV5OworaW5wdXQgWzI6MF0gYmluOworYmVnaW4KKwlpZiAoYmluWzJdKSBiZWdpbiAgLy8gZG8gcmV2ZXJzZSBncmV5CisJCWNhc2UgKGJpblsxOjBdKSAKKwkJCTInYjAwOiBkb19ncmV5ID0gMidiMTA7CisJCQkyJ2IwMTogZG9fZ3JleSA9IDInYjExOworCQkJMidiMTA6IGRvX2dyZXkgPSAyJ2IwMTsKKwkJCTInYjExOiBkb19ncmV5ID0gMidiMDA7CisJCWVuZGNhc2UKKwllbmQKKwllbHNlIGJlZ2luCisJCWNhc2UgKGJpblsxOjBdKSAKKwkJCTInYjAwOiBkb19ncmV5ID0gMidiMDA7CisJCQkyJ2IwMTogZG9fZ3JleSA9IDInYjAxOworCQkJMidiMTA6IGRvX2dyZXkgPSAyJ2IxMTsKKwkJCTInYjExOiBkb19ncmV5ID0gMidiMTA7CisJCWVuZGNhc2UKKwllbmQKK2VuZAorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24gWzE6MF0gZG9fYmluOworaW5wdXQgWzI6MF0gZ3JleTsKK2JlZ2luCisJaWYgKGdyZXlbMl0pIGJlZ2luCS8vIGFjdHVhbGx5IGJpblsyXQorCQljYXNlIChncmV5WzE6MF0pCisJCQkyJ2IxMDogZG9fYmluID0gMidiMDA7CisJCQkyJ2IxMTogZG9fYmluID0gMidiMDE7CisJCQkyJ2IwMTogZG9fYmluID0gMidiMTA7CisJCQkyJ2IwMDogZG9fYmluID0gMidiMTE7CisJCWVuZGNhc2UKKwllbmQKKwllbHNlIGJlZ2luCisJCWNhc2UgKGdyZXlbMTowXSkKKwkJCTInYjAwOiBkb19iaW4gPSAyJ2IwMDsKKwkJCTInYjAxOiBkb19iaW4gPSAyJ2IwMTsKKwkJCTInYjExOiBkb19iaW4gPSAyJ2IxMDsKKwkJCTInYjEwOiBkb19iaW4gPSAyJ2IxMTsKKwkJZW5kY2FzZQorCWVuZAorZW5kCitlbmRmdW5jdGlvbgorCQkJCitmdW5jdGlvbiBbQVc6MF0gZ2V0X2NudDsKK2lucHV0IFtBVzowXSB3cl9wdHIsIHJkX3B0cjsKK2JlZ2luCisJaWYgKHdyX3B0ciA+PSByZF9wdHIpIGJlZ2luCisJCWdldF9jbnQgPSAod3JfcHRyIC0gcmRfcHRyKTsJCisJZW5kCisJZWxzZSBiZWdpbgorCQlnZXRfY250ID0gRFAqMiAtIChyZF9wdHIgLSB3cl9wdHIpOworCWVuZAorZW5kCitlbmRmdW5jdGlvbgorCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb2ZmCithbHdheXMgQChwb3NlZGdlIHdyX2NsaykgYmVnaW4KKyAgIGlmICh3cl9lbiAmJiBmdWxsKSBiZWdpbgorICAgICAgJGRpc3BsYXkoJHRpbWUsICIlbSBFcnJvciEgYWZpZm8gb3ZlcmZsb3chIik7CisgICAgICAkc3RvcDsKKyAgIGVuZAorZW5kCisKK2Fsd2F5cyBAKHBvc2VkZ2UgcmRfY2xrKSBiZWdpbgorICAgaWYgKHJkX2VuICYmIGVtcHR5KSBiZWdpbgorICAgICAgJGRpc3BsYXkoJHRpbWUsICIlbSBlcnJvciEgYWZpZm8gdW5kZXJmbG93ISIpOworICAgICAgJHN0b3A7CisgICBlbmQKK2VuZAorCisvLyBncmF5IGNvZGUgbW9uaXRvcgorcmVnIFtBVzowXSBsYXN0X2d3cl9wdHI7CithbHdheXMgQChwb3NlZGdlIHdyX2NsayBvciBuZWdlZGdlIHdyX3Jlc2V0X24pIGJlZ2luCisgICBpZiAoIXdyX3Jlc2V0X24pIGJlZ2luCisgICAgICBsYXN0X2d3cl9wdHIgPD0gIzEgMDsKKyAgIGVuZAorICAgZWxzZSBpZiAobGFzdF9nd3JfcHRyICE9PSBncmV5X3dyX3B0cikgYmVnaW4KKyAgICAgIGNoZWNrX3B0cl9jaGcobGFzdF9nd3JfcHRyLCBncmV5X3dyX3B0cik7CisgICAgICBsYXN0X2d3cl9wdHIgPD0gIzEgZ3JleV93cl9wdHI7CisgICBlbmQgCQorZW5kCisKK3JlZyBbQVc6MF0gbGFzdF9ncmRfcHRyOworYWx3YXlzIEAocG9zZWRnZSByZF9jbGsgb3IgbmVnZWRnZSByZF9yZXNldF9uKSBiZWdpbgorICAgaWYgKCFyZF9yZXNldF9uKSBiZWdpbgorICAgICBsYXN0X2dyZF9wdHIgPD0gIzEgMDsKKyAgIGVuZAorICAgZWxzZSBpZiAobGFzdF9ncmRfcHRyICE9PSBncmV5X3JkX3B0cikgYmVnaW4KKyAgICAgIGNoZWNrX3B0cl9jaGcobGFzdF9ncmRfcHRyLCBncmV5X3JkX3B0cik7CisgICAgICBsYXN0X2dyZF9wdHIgPD0gIzEgZ3JleV9yZF9wdHI7CisgICBlbmQgCQorZW5kCisKK3Rhc2sgY2hlY2tfcHRyX2NoZzsKK2lucHV0IFtBVzowXSBsYXN0X3B0cjsKK2lucHV0IFtBVzowXSBjdXJfcHRyOworaW50ZWdlciBpOworaW50ZWdlciBwdHJfZGlmZjsKK2JlZ2luCisgICBwdHJfZGlmZiA9IDA7CisgICBmb3IgKGk9MDsgaTw9IEFXOyBpPWkrIDEnYjEpIGJlZ2luCisgICAgICBpZiAobGFzdF9wdHJbaV0gIT0gY3VyX3B0cltpXSkgYmVnaW4KKyAgICAgICAgIHB0cl9kaWZmID0gcHRyX2RpZmYgKyAxJ2IxOworICAgICAgZW5kCisgICBlbmQKKyAgIGlmIChwdHJfZGlmZiAhPT0gMSkgYmVnaW4KKyAgICAgICRkaXNwbGF5KCR0aW1lLCAiJW0sIEVSUk9SISBhc3luYyBmaWZvIHB0ciBoYXMgY2hhbmdlZCBtb3JlIHRoYW4gbm9lIGJpdCwgbGFzdD0laCwgY3VyPSVoIiwKKwkJCQlsYXN0X3B0ciwgY3VyX3B0cik7CisgICAgICAkc3RvcDsKKyAgIGVuZAorZW5kCitlbmR0YXNrIAkKKyAgIC8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vbgorCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL2xpYi9hc3luY19yZWdfYnVzLnN2IGIvdmVyaWxvZy9ydGwvbGliL2FzeW5jX3JlZ19idXMuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMwMjcwMQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2xpYi9hc3luY19yZWdfYnVzLnN2CkBAIC0wLDAgKzEsMzA1IEBACisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUaGlzIGJsb2NrIHRyYW5zbGF0ZSB0aGUgUmVnIEJ1cyB0cmFuc2FjdGlvbiBmcm9tIGluX2NsayBjbG9jayBkb21haW4gdG8gb3V0X2NsayBjbG9jayBkb21haW4uCisvLyBUaGlzIGJsb2NrIGFsc28gZ2VuZXJhdGUgYW5kIHRlcm1pbmF0ZSB0aGUgdHJhbnNmZXIgaWYgNTEyIGN5Y2xlIHRyYW5zYWN0aW9uIGlzIG5vdCBjb21wbGV0ZWQKKy8vICBBc3N1bXB0aW9uCisvLyAgICAxLiBpbl9yZWdfY3Mgd2lsbCBiZSBhc3NlcnRlZCB1bnRpbGwgYWNrIGlzIHJlY2VpdmVkCisvLyAgICAyLiByZWdfYWRkci9yZWdfd2RhdGEvcmVnX2JlIHdpbGwgYmUgYXZhaWxhYmxlIGR1cmluZyByZWdfY3MKKy8vICAgIDMuIEV2ZXIgYWZ0ZXIgb3V0X3JlZ19hY2sgZGUtYXNzZXJ0ZWQgcmVnX3JkYXRhIGhvbGRzIHRoZSBvbGQgZGF0YQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZSBhc3luY19yZWdfYnVzICgKKyAgICAvLyBJbml0aWF0b3IgZGVjbGFydGlvbgorICAgICAgICAgICBpbl9jbGsgICAgICAgICAgICAgICAgICAgICwKKyAgICAgICAgICAgaW5fcmVzZXRfbiAgICAgICAgICAgICAgICAsCisgICAgICAgLy8gUmVnIEJ1cyBNYXN0ZXIKKyAgICAgICAgICAvLyBvdXRwdXRzCisgICAgICAgICAgaW5fcmVnX3JkYXRhICAgICAgICAgICAgICAgLAorICAgICAgICAgIGluX3JlZ19hY2sgICAgICAgICAgICAgICAgICwKKyAgICAgICAgICBpbl9yZWdfdGltZW91dCAgICAgICAgICAgICAsCisKKyAgICAgICAgICAvLyBJbnB1dHMKKyAgICAgICAgICBpbl9yZWdfY3MgICAgICAgICAgICAgICAgICAsCisgICAgICAgICAgaW5fcmVnX2FkZHIgICAgICAgICAgICAgICAgLAorICAgICAgICAgIGluX3JlZ193ZGF0YSAgICAgICAgICAgICAgICwKKyAgICAgICAgICBpbl9yZWdfd3IgICAgICAgICAgICAgICAgICAsCisgICAgICAgICAgaW5fcmVnX2JlICAgICAgICAgICAgICAgICAgLAorCisgICAgLy8gVGFyZ2V0IERlY2xhcmF0aW9uCisgICAgICAgICAgb3V0X2NsayAgICAgICAgICAgICAgICAgICAgLAorICAgICAgICAgIG91dF9yZXNldF9uICAgICAgICAgICAgICAgICwKKyAgICAgIC8vIFJlZyBCdXMgU2xhdmUKKyAgICAgICAgICAvLyBvdXRwdXQKKyAgICAgICAgICBvdXRfcmVnX2NzICAgICAgICAgICAgICAgICAsCisgICAgICAgICAgb3V0X3JlZ19hZGRyICAgICAgICAgICAgICAgLAorICAgICAgICAgIG91dF9yZWdfd2RhdGEgICAgICAgICAgICAgICwKKyAgICAgICAgICBvdXRfcmVnX3dyICAgICAgICAgICAgICAgICAsCisgICAgICAgICAgb3V0X3JlZ19iZSAgICAgICAgICAgICAgICAgLAorCisgICAgICAgICAgLy8gSW5wdXRzCisgICAgICAgICAgb3V0X3JlZ19yZGF0YSAgICAgICAgICAgICAgLAorICAgICAgICAgIG91dF9yZWdfYWNrCisgICApOworcGFyYW1ldGVyIEFXID0gMjYgOyAvLyBBZGRyZXNzIHdpZHRoCitwYXJhbWV0ZXIgRFcgPSAzMiA7IC8vIERBVEEgV0lEVEgKK3BhcmFtZXRlciBCRVcgPSA0IDsgLy8gQnl0ZSBlbmFibGUgd2lkdGgKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZWcgQnVzIHJlZyBpbm91dCBkZWNscmF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2lucHV0ICAgICAgICAgICAgICBpbl9jbGsgICAgICAgICAgICAgOyAvLyBJbml0aWF0b3IgZG9tYWluIGNsb2NrCitpbnB1dCAgICAgICAgICAgICAgaW5fcmVzZXRfbiAgICAgICAgIDsgLy8gSW5pdGlhdG9yIGRvbWFpbiByZXNldAorCitpbnB1dCAgICAgICAgICAgICAgaW5fcmVnX2NzICAgICAgICAgIDsgLy8gSW5pdGlhdG9yIENoaXAgU2VsZWN0CitpbnB1dCAgW0FXLTE6MF0gICAgaW5fcmVnX2FkZHIgICAgICAgIDsgLy8gQWRkcmVzcyBidXMKK2lucHV0ICBbRFctMTowXSAgICBpbl9yZWdfd2RhdGEgICAgICAgOyAvLyBXcml0ZSBkYXRhCitpbnB1dCAgICAgICAgICAgICAgaW5fcmVnX3dyICAgICAgICAgIDsgLy8gUmVhZC93cml0ZSBpbmRpY2F0aW9uLCAxLT4gd3JpdGUKK2lucHV0ICBbQkVXLTE6MF0gICBpbl9yZWdfYmUgICAgICAgICAgOyAvLyBCeXRlIHZhbGlkIGZvciB3cml0ZQorCitvdXRwdXQgW0RXLTE6MF0gICAgaW5fcmVnX3JkYXRhICAgICAgIDsgLy8gUmVhZCBEYXRhCitvdXRwdXQgICAgICAgICAgICAgaW5fcmVnX2FjayAgICAgICAgIDsgLy8gUmVnIEFjY2VzcyBkb25lIAorb3V0cHV0ICAgICAgICAgICAgIGluX3JlZ190aW1lb3V0ICAgICA7IC8vIEFjY2VzcyBlcnJvciBpbmRpY2F0aW9uIHB1bHNlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdlbmVyZXJhdGVkIGlmIG5vIHRhcmdldCBhY2sgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVjZWl2ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoaW4gNTEyIGN5Y2xlIAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVnIEJ1cyB0YXJnZXQgaW5vdXQgZGVjbHJhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworaW5wdXQgICAgICAgICAgICAgIG91dF9jbGsgICAgICAgICAgIDsgLy8gVGFyZ2V0IGRvbWFpbiBjbG9jaworaW5wdXQgICAgICAgICAgICAgIG91dF9yZXNldF9uICAgICAgIDsgLy8gVHJhZ2V0IGRvbWFpbiByZXNldAorCitpbnB1dCBbRFctMTowXSAgICAgb3V0X3JlZ19yZGF0YSAgICAgOyAvLyBSZWFkIGRhdGEKK2lucHV0ICAgICAgICAgICAgICBvdXRfcmVnX2FjayAgICAgICA7IC8vIHRhcmdldCBmaW5pc2gKKworb3V0cHV0ICAgICAgICAgICAgIG91dF9yZWdfY3MgICAgICAgIDsgLy8gVGFyZ2V0IFN0YXJ0IGluZGljYXRpb24KK291dHB1dCBbQVctMTowXSAgICBvdXRfcmVnX2FkZHIgICAgICA7IC8vIFRhcmdldCBhZGRyZXNzCitvdXRwdXQgW0RXLTE6MF0gICAgb3V0X3JlZ193ZGF0YSAgICAgOyAvLyBUYXJnZXQgd3JpdGUgZGF0YQorb3V0cHV0ICAgICAgICAgICAgIG91dF9yZWdfd3IgICAgICAgIDsgLy8gVGFyZ2V0IFJlYWQvd3JpdGUgaW5kLCAxLT4gV3JpdGUKK291dHB1dCBbQkVXLTE6MF0gICBvdXRfcmVnX2JlICAgICAgICA7IC8vIFRhcmdldCBCeXRlIGVuYWJsZQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbml0aWF0b3IgTG9jYWwgRGVjbGFyYXRpb24KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BhcmFtZXRlciBJTklfSURMRSAgICAgICAgICAgICA9IDInYjAwOworcGFyYW1ldGVyIElOSV9XQUlUX0FDSyAgICAgICAgID0gMidiMDE7CitwYXJhbWV0ZXIgSU5JX1dBSVRfVEFSX0RPTkUgICAgPSAyJ2IxMDsKKworcmVnICBbMTowXSAgICAgICAgIGluX3N0YXRlICAgICAgICAgICA7IC8vIHJlZyBzdGF0ZQorcmVnICBbODowXSAgICAgICAgIGluX3RpbWVyICAgICAgICAgICA7IC8vIHJlZyB0aW1vdXQgbW9uaXRvciB0aW1lcgorcmVnICAgICAgICAgICAgICAgIGluX2ZsYWcgICAgICAgICAgICA7IC8vIHJlZyBoYW5kc2hha2UgZmxhZyAKK3JlZyAgICAgICAgICAgICAgICBpbl9yZWdfYWNrICAgICAgICAgOyAvLyByZWcgcmVnIGFjY2VzcyBmaW5pc2ggaW5kCityZWcgIFtEVy0xOjBdICAgICAgaW5fcmVnX3JkYXRhICAgICAgIDsgLy8gcmVnIHJlZyBhY2Nlc3MgcmVhZCBkYXRhCityZWcgICAgICAgICAgICAgICAgaW5fcmVnX3RpbWVvdXQgICAgIDsgLy8gcmVnIHRpbWUgb3V0IGVycm9yIHB1bHNlCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRhcmdldCBMb2NhbCBEZWNsYXJhdGlvbgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGFyYW1ldGVyIFRBUl9JRExFICAgICAgICAgICA9IDInYjAwOworcGFyYW1ldGVyIFRBUl9XQUlUX0FDSyAgICAgICA9IDInYjAxOworcGFyYW1ldGVyIFRBUl9XQUlUX0lOSV9ET05FICA9IDInYjEwOworCityZWcgWzE6MF0gICAgIG91dF9zdGF0ZSAgICAgICAgICAgICAgIDsgLy8gdGFyZ2V0IHN0YXRlIG1hY2hpbmUKK3JlZyAgICAgICAgICAgb3V0X2ZsYWcgICAgICAgICAgICAgICAgOyAvLyB0YXJnZXQgaGFuZHNoYWtlIGZsYWcKK3JlZyAgICAgICAgICAgb3V0X3JlZ19jcyAgICAgICAgOyAvLyBUYXJnZXQgU3RhcnQgaW5kaWNhdGlvbgorCityZWcgWzg6MF0gICAgIGluaXRpdGFvcl90aW1lciAgICAgICAgIDsgLy8gdGltZW91dCBjb3VudGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBEb3VibGUgc3luYyBsb2NhbCBkZWNsYXJhdGlvbgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCityZWcgICAgICAgICAgIGluX2ZsYWdfcyAgICAgICAgICAgICAgOyAvLyBJbml0aWF0b3IgaGFuZHNoYWtlIGZsYWcgc3luYyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggdGFyZ2V0IGNsayAKK3JlZyAgICAgICAgICAgaW5fZmxhZ19zcyAgICAgICAgICAgICA7IC8vIEluaXRpYXRvciBoYW5kc2hha2UgZmxhZyBzeW5jIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2l0aCB0YXJnZXQgY2xrCisKK3JlZyAgICAgICAgICAgb3V0X2ZsYWdfcyAgICAgICAgICAgICA7IC8vIHRhcmdldCBoYW5kc2hha2UgZmxhZyBzeW5jIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2l0aCBpbml0aWF0b3IgY2xrCityZWcgICAgICAgICAgIG91dF9mbGFnX3NzICAgICAgICAgICAgOyAvLyB0YXJnZXQgaGFuZHNoYWtlIGZsYWcgc3luYyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggaW5pdGlhdG9yIGNsY2sKKworCisKKworYXNzaWduICBvdXRfcmVnX2FkZHIgID0gaW5fcmVnX2FkZHI7Cithc3NpZ24gIG91dF9yZWdfd2RhdGEgPSBpbl9yZWdfd2RhdGE7Cithc3NpZ24gIG91dF9yZWdfd3IgICAgPSBpbl9yZWdfd3I7Cithc3NpZ24gIG91dF9yZWdfYmUgICAgPSBpbl9yZWdfYmU7CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSW5pdGlhdG9yIERvbWFpbiBsb2dpYworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWx3YXlzIEAobmVnZWRnZSBpbl9yZXNldF9uIG9yIHBvc2VkZ2UgaW5fY2xrKQorYmVnaW4KKyAgIGlmKGluX3Jlc2V0X24gPT0gMSdiMCkKKyAgIGJlZ2luCisgICAgICBpbl9zdGF0ZSAgICAgIDw9IElOSV9JRExFOworICAgICAgaW5fdGltZXIgICAgICA8PSA5J2gwOworICAgICAgaW5fZmxhZyAgICAgICA8PSAxJ2IwOworICAgICAgaW5fcmVnX2FjayAgICA8PSAxJ2IwOworICAgICAgaW5fcmVnX3JkYXRhICA8PSB7RFcgezEnYjB9fTsKKyAgICAgIGluX3JlZ190aW1lb3V0PD0gMSdiMDsKKyAgICBlbmQKKyAgICBlbHNlIAorICAgIGJlZ2luCisgICAgICAgY2FzZShpbl9zdGF0ZSkKKyAgICAgICBJTklfSURMRSA6IAorICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgaW5fcmVnX2FjayAgICAgICAgIDw9IDEnYjA7CisgICAgICAgICAgICAgaW5fcmVnX3RpbWVvdXQgICAgIDw9IDEnYjA7CisJICAgICBpbl90aW1lciAgICAgICAgICAgPD0gJ2gwOworICAgICAgICAgICAgIC8vIFdhaXQgZm9yIEluaXRpYXRvciBTdGFydCBJbmRpY2F0aW9uCisgICAgICAgICAgICAgLy8gT25jZSB0aGUgcmVnIHN0YXJ0IGlzIGRldGVjdGVkCisgICAgICAgICAgICAgLy8gU2V0IHRoZSByZWcgZmxhZyBhbmQgbW92ZSB0byBXQUlUCisgICAgICAgICAgICAgLy8gZm9yIGFjayBmcm9tIFRhcmdldAorICAgICAgICAgICAgIGlmKGluX3JlZ19jcykgYmVnaW4KKyAgICAgICAgICAgICAgICBpbl9mbGFnICAgICAgIDw9IDEnYjE7CisgICAgICAgICAgICAgICAgaW5fc3RhdGUgICAgICA8PSBJTklfV0FJVF9BQ0s7CisgICAgICAgICAgICAgZW5kCisgICAgICAgICAgZW5kCisgICAgICAgSU5JX1dBSVRfQUNLIDoKKyAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAvLyAxLiBXYWl0IGZvciBPdXQgRmxhZyA9PSAxCisgICAgICAgICAgICAgLy8gMi4gSWYgdGhlIE91dCBGbGFnID0xIGlzIG5vdAorICAgICAgICAgICAgIC8vICAgIGRldGVjdGVkIHdpdGluIDUxMiBjeWNsZSwgZXhpdCB3aXRoIGVycm9yIGluZGljYXRpb24gCisgICAgICAgICAgICAgLy8gMy4gSWYgVGFyZ2V0IGZsYWcgZGV0ZWN0ZWQsIHRoZW4gZGUtYXNzZXJ0CisgICAgICAgICAgICAgLy8gIHJlZ19mbGFnID0gMCBhbmQgbW92ZSB0aGUgdGFyX3dhaXRfZG9uZSBzdGF0ZQorICAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKyAgICAgICAgICAgICBpZihvdXRfZmxhZ19zcyA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIGluX2ZsYWcgICAgICAgICAgICAgPD0gMSdiMDsKKyAgICAgICAgICAgICAgICBpbl9yZWdfcmRhdGEgICAgICAgIDw9IG91dF9yZWdfcmRhdGE7CisJCWluX3JlZ19hY2sgICAgICAgICAgPD0gMSdiMTsKKyAgICAgICAgICAgICAgICBpbl9zdGF0ZSAgICAgICAgICAgPD0gSU5JX1dBSVRfVEFSX0RPTkU7CisgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgICBpZihpbl90aW1lciA9PSA5J2gxRkYpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGluX2ZsYWcgICAgICAgICAgPD0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgaW5fcmVnX2FjayAgICAgICA8PSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBpbl9yZWdfcmRhdGEgICAgIDw9IDMyJ2gwOworICAgICAgICAgICAgICAgICAgICBpbl9yZWdfdGltZW91dCAgIDw9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGluX3N0YXRlICAgICAgICAgPD0gSU5JX0lETEU7CisgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICBpbl90aW1lciAgICAgICA8PSBpbl90aW1lciArIDE7CisgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgIGVuZAorICAgICAgICAgICBlbmQKKyAgICAgIElOSV9XQUlUX1RBUl9ET05FIDoKKyAgICAgICAgICBiZWdpbgorCSAgICAgaW5fcmVnX2FjayAgICAgICAgICA8PSAxJ2IwOworICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAvLyAxLiBXYWl0IGZvciBUYXJnZXQgRmxhZyA9PSAwCisgICAgICAgICAgICAgLy8gMi4gSWYgVGFyZ2V0IGZsYWcgPSAwIGRldGVjdGVkLCB0aGVuIHJlbW92ZQorICAgICAgICAgICAgIC8vICBtb3ZlIHRoZSBpZGxlIHN0YXRlCisgICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorICAgICAgICAgICAgIGlmKG91dF9mbGFnX3NzID09IDEnYjApIGJlZ2luCisgICAgICAgICAgICAgICAgaW5fc3RhdGUgICAgICA8PSBJTklfSURMRTsKKyAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgZW5kCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgIGluX3N0YXRlICAgICAgICAgPD0gSU5JX0lETEU7CisgICAgICAgICAgICAgIGluX3RpbWVyICAgICAgICAgPD0gOSdoMDsKKyAgICAgICAgICAgICAgaW5fZmxhZyAgICAgICAgICA8PSAxJ2IwOworICAgICAgICAgICAgICBpbl9yZWdfcmRhdGEgICAgIDw9IHtEVyB7MSdiMH19OworICAgICAgICAgICAgICBpbl9yZWdfdGltZW91dCAgIDw9IDEnYjA7CisgICAgICAgICAgIGVuZAorICAgICAgZW5kY2FzZQorICAgIGVuZCAKK2VuZAorCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyB0YXJnZXQgRG9tYWluIGxvZ2ljCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWx3YXlzIEAobmVnZWRnZSBvdXRfcmVzZXRfbiBvciBwb3NlZGdlIG91dF9jbGspCitiZWdpbgorICAgaWYob3V0X3Jlc2V0X24gPT0gMSdiMCkKKyAgIGJlZ2luCisgICAgICBvdXRfc3RhdGUgICAgICAgICA8PSBUQVJfSURMRTsKKyAgICAgIG91dF9mbGFnICAgICAgICAgIDw9IDEnYjA7CisgICAgICBvdXRfcmVnX2NzICAgICAgICA8PSAxJ2IwOworICAgIGVuZAorICAgIGVsc2UgCisgICAgYmVnaW4KKyAgICAgICBjYXNlKG91dF9zdGF0ZSkKKyAgICAgICBUQVJfSURMRSA6IAorICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgLy8gMS4gV2FpdCBmb3IgSW5pdGlhdG9yIGZsYWcgYXNzZXJ0aW9uIAorICAgICAgICAgICAgIC8vIDIuIE9uY2UgdGhlIHJlZyBmbGFnID0gMSBpcyBkZXRlY3RlZAorICAgICAgICAgICAgIC8vICAgIFNldCB0aGUgdGFyZ2V0X2ZsYWcgYW5kIGluaXRpYXRlIHRoZQorCSAgICAgLy8gICAgdGFyZ2V0IHJlZyBidXMgYWNjZXNzCisgICAgICAgICAgICAgICAgb3V0X2ZsYWcgICAgICAgICAgPD0gMSdiMDsKKyAgICAgICAgICAgICAgaWYoaW5fZmxhZ19zcykgYmVnaW4KKyAgICAgICAgICAgICAgICBvdXRfcmVnX2NzICAgICAgICA8PSAxJ2IxOworICAgICAgICAgICAgICAgIG91dF9zdGF0ZSAgICAgICAgIDw9IFRBUl9XQUlUX0FDSzsKKyAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgZW5kCisgICAgICBUQVJfV0FJVF9BQ0sgOgorICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgIC8vIDEuIFdhaXQgZm9yIHJlZyBGbGFnID09IDAKKyAgICAgICAgICAgICAvLyAyLiBJZiByZWcgZmxhZyA9IDAgZGV0ZWN0ZWQsIHRoZW4gCisgICAgICAgICAgICAgLy8gIG1vdmUgdGhlIGlkbGUgc3RhdGUKKyAgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisgICAgICAgICAgICAgaWYob3V0X3JlZ19hY2sgPT0gMSdiMSkgCisJICAgICBiZWdpbgorICAgICAgICAgICAgICAgIG91dF9yZWdfY3MgICAgICAgICA8PSAxJ2IwOworCQlvdXRfZmxhZyAgICAgICAgICAgPD0gMSdiMTsgICAKKyAgICAgICAgICAgICAgICBvdXRfc3RhdGUgICAgICAgICAgPD0gVEFSX1dBSVRfSU5JX0RPTkU7CisgICAgICAgICAgICAgZW5kCisgICAgICAgICAgIGVuZAorICAgICAgIFRBUl9XQUlUX0lOSV9ET05FIDoKKyAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgIGlmKGluX2ZsYWdfc3MgPT0gMSdiMCkgYmVnaW4KKwkJb3V0X2ZsYWcgICAgIDw9IDEnYjA7ICAgCisgICAgICAgICAgICAgICAgb3V0X3N0YXRlICAgIDw9IFRBUl9JRExFOworICAgICAgICAgICAgIGVuZAorICAgICAgICAgICBlbmQKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgb3V0X3N0YXRlICAgICAgICA8PSBUQVJfSURMRTsKKyAgICAgICAgICAgICBvdXRfcmVnX2NzICAgICAgIDw9IDEnYjA7CisgICAgICAgICAgICAgb3V0X2ZsYWcgICAgICAgICA8PSAxJ2IwOworICAgICAgICAgICBlbmQKKyAgICAgIGVuZGNhc2UKKyAgICBlbmQgCitlbmQKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBEb3VibGUgU3luYyBMb2dpYworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbHdheXMgQChuZWdlZGdlIGluX3Jlc2V0X24gb3IgcG9zZWRnZSBpbl9jbGspCitiZWdpbgorICAgaWYoaW5fcmVzZXRfbiA9PSAxJ2IwKQorICAgYmVnaW4KKyAgICAgIG91dF9mbGFnX3MgICAgICAgICAgIDw9IDEnYjA7CisgICAgICBvdXRfZmxhZ19zcyAgICAgICAgICA8PSAxJ2IwOworICAgZW5kCisgICBlbHNlCisgICBiZWdpbgorICAgICAgb3V0X2ZsYWdfcyAgICAgICAgICAgPD0gb3V0X2ZsYWc7CisgICAgICBvdXRfZmxhZ19zcyAgICAgICAgICA8PSBvdXRfZmxhZ19zOworICAgZW5kCitlbmQKKworCithbHdheXMgQChuZWdlZGdlIG91dF9yZXNldF9uIG9yIHBvc2VkZ2Ugb3V0X2NsaykKK2JlZ2luCisgICBpZihvdXRfcmVzZXRfbiA9PSAxJ2IwKQorICAgYmVnaW4KKyAgICAgIGluX2ZsYWdfcyAgICAgICAgPD0gMSdiMDsKKyAgICAgIGluX2ZsYWdfc3MgICAgICAgPD0gMSdiMDsKKyAgIGVuZAorICAgZWxzZQorICAgYmVnaW4KKyAgICAgIGluX2ZsYWdfcyAgICAgICAgPD0gaW5fZmxhZzsKKyAgICAgIGluX2ZsYWdfc3MgICAgICAgPD0gaW5fZmxhZ19zOworICAgZW5kCitlbmQKKworCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL2xpYi9hc3luY193Yi5zdiBiL3Zlcmlsb2cvcnRsL2xpYi9hc3luY193Yi5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTVkNGE2Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbGliL2FzeW5jX3diLnN2CkBAIC0wLDAgKzEsMjM0IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEFzeW5jIFdpc2hib25lIEludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICBUaGlzIGJsb2NrIGRvZXMgYXN5bmMgV2lzaGJvbmUgZnJvbSBvbmUgY2xvY2sgdG8gb3RoZXIgIC8vLy8KKy8vLy8gICAgICBjbG9jayBkb21haW4KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMjV0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgaW5pdGlhbCB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4yIC0gMjh0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgcmVkdWNlZCB0aGUgcmVzcG9uc2UgRklGTyBwYXRoIGRlcHRoIHRvIDIgYXMgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgcmV0dXJuIHBhdGggdXNlZCBieSBvbmx5IHJlYWQgbG9naWMgYW5kIHJlYWQgaXMgICAgIC8vLy8KKy8vLy8gICAgICAgICAgYmxvY2tpbmcgcmVxdWVzdCBhbmQgZXhwZWN0IG9ubHkgb25lIGxvY2F0aW9uIHdpbGwgIC8vLy8KKy8vLy8gICAgICAgICAgYmUgdXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbW9kdWxlIGFzeW5jX3diIAorICAgICAjKHBhcmFtZXRlciBBVyAgPSAzMiwKKyAgICAgICBwYXJhbWV0ZXIgQlcgID0gNCwKKyAgICAgICBwYXJhbWV0ZXIgRFcgID0gMzIpCisgICAgICAgKAorCisgICAgLy8gTWFzdGVyIFBvcnQKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgd2JtX3JzdF9uICAgLCAgLy8gUmVndWxhciBSZXNldCBzaWduYWwKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgd2JtX2Nsa19pICAgLCAgLy8gU3lzdGVtIGNsb2NrCisgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgIHdibV9jeWNfaSAgICwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgIHdibV9zdGJfaSAgICwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgaW5wdXQgICBsb2dpYyBbQVctMTowXSAgICAgIHdibV9hZHJfaSAgICwgIC8vIGFkZHJlc3MKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgd2JtX3dlX2kgICAgLCAgLy8gd3JpdGUKKyAgICAgICBpbnB1dCAgIGxvZ2ljIFtEVy0xOjBdICAgICAgd2JtX2RhdF9pICAgLCAgLy8gZGF0YSBvdXRwdXQKKyAgICAgICBpbnB1dCAgIGxvZ2ljIFtCVy0xOjBdICAgICAgd2JtX3NlbF9pICAgLCAgLy8gYnl0ZSBlbmFibGUKKyAgICAgICBvdXRwdXQgIGxvZ2ljIFtEVy0xOjBdICAgICAgd2JtX2RhdF9vICAgLCAgLy8gZGF0YSBpbnB1dAorICAgICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICB3Ym1fYWNrX28gICAsICAvLyBhY2tub3dsZWdlbWVudAorICAgICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICB3Ym1fZXJyX28gICAsICAvLyBlcnJvcgorCisgICAgLy8gU2xhdmUgUG9ydAorICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICB3YnNfcnN0X24gICAsICAvLyBSZWd1bGFyIFJlc2V0IHNpZ25hbAorICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICB3YnNfY2xrX2kgICAsICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgd2JzX2N5Y19vICAgLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgd2JzX3N0Yl9vICAgLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICBvdXRwdXQgIGxvZ2ljIFtBVy0xOjBdICAgICAgd2JzX2Fkcl9vICAgLCAgLy8gYWRkcmVzcworICAgICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICB3YnNfd2VfbyAgICAsICAvLyB3cml0ZQorICAgICAgIG91dHB1dCAgbG9naWMgW0RXLTE6MF0gICAgICB3YnNfZGF0X28gICAsICAvLyBkYXRhIG91dHB1dAorICAgICAgIG91dHB1dCAgbG9naWMgW0JXLTE6MF0gICAgICB3YnNfc2VsX28gICAsICAvLyBieXRlIGVuYWJsZQorICAgICAgIGlucHV0ICAgbG9naWMgW0RXLTE6MF0gICAgICB3YnNfZGF0X2kgICAsICAvLyBkYXRhIGlucHV0CisgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgIHdic19hY2tfaSAgICwgIC8vIGFja25vd2xlZ2VtZW50CisgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgIHdic19lcnJfaSAgICAgIC8vIGVycm9yCisKKyAgICApOworCisKKworcGFyYW1ldGVyIENGVyA9IEFXK0RXK0JXKzEgOyAvLyBDT01NQU5EIEZJRk8gV0lEVEgKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgTWFzdGVyIEludGVyZmFjZQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbG9naWMgICAgICAgICAgIFBlbmRpbmdSZCAgICAgOyAvLyBQZW5kaW5nIFJlYWQgVHJhbnNhY3Rpb24KK2xvZ2ljICAgICAgICAgICBtX2NtZF93cl9lbiAgICAgICA7Citsb2dpYyBbQ0ZXLTE6MF0gbV9jbWRfd3JfZGF0YSAgICAgOworbG9naWMgICAgICAgICAgIG1fY21kX3dyX2Z1bGwgICAgIDsKK2xvZ2ljICAgICAgICAgICBtX2NtZF93cl9hZnVsbCAgICA7CisKK2xvZ2ljICAgICAgICAgICBtX3Jlc3BfcmRfZW1wdHkgICAgOworbG9naWMgICAgICAgICAgIG1fcmVzcF9yZF9hZW1wdHkgICA7Citsb2dpYyAgICAgICAgICAgbV9yZXNwX3JkX2VuICAgICAgIDsKK2xvZ2ljIFtEVzowXSAgICBtX3Jlc3BfcmRfZGF0YSAgICAgOworCisvLyBNYXN0ZXIgV3JpdGUgSW50ZXJmYWNlCisKKworYXNzaWduIG1fY21kX3dyX2VuID0gKCFQZW5kaW5nUmQpICYmIHdibV9zdGJfaSAmJiAhbV9jbWRfd3JfZnVsbCAmJiAhbV9jbWRfd3JfYWZ1bGw7CisKK2Fzc2lnbiBtX2NtZF93cl9kYXRhID0ge3dibV9hZHJfaSx3Ym1fd2VfaSx3Ym1fZGF0X2ksd2JtX3NlbF9pfTsKKworYWx3YXlzQChuZWdlZGdlIHdibV9yc3RfbiBvciBwb3NlZGdlIHdibV9jbGtfaSkKK2JlZ2luCisgICBpZih3Ym1fcnN0X24gPT0gMCkgYmVnaW4KKyAgICAgIFBlbmRpbmdSZCA8PSAxJ2IwOworICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgIGlmKCghUGVuZGluZ1JkKSAmJiB3Ym1fc3RiX2kgJiYgKCF3Ym1fd2VfaSkgJiYgbV9jbWRfd3JfZW4pIGJlZ2luCisgICAgICBQZW5kaW5nUmQgPD0gMSdiMTsKKyAgICAgIGVuZCBlbHNlIGlmKFBlbmRpbmdSZCAmJiB3Ym1fc3RiX2kgJiYgKCF3Ym1fd2VfaSkgJiYgd2JtX2Fja19vKSBiZWdpbgorICAgICAgICAgUGVuZGluZ1JkIDw9IDEnYjA7CisgICAgICBlbmQKKyAgIGVuZAorZW5kCisKKworLy8gTWFzdGVyIFJlYWQgSW50ZXJmYWNlCisvLyBGb3IgV3JpdGUgaXMgZmVlZCB0aHJvdWdoLCBpZiB0aGVyZSBpcyBzcGFjZSBpbiBmaWZvIHRoZSBhY2sKKy8vIEZvciBSZWFkLCBXYWl0IGZvciBSZXNwb25zZSBQYXRoIEZJRk8gc3RhdHVzCithc3NpZ24gd2JtX2Fja19vID0gKHdibV9zdGJfaSAmJiB3Ym1fd2VfaSkgICAgPyAgbV9jbWRfd3JfZW4gOiAvLyBXcml0ZSBMb2dpYworCSAgICAgICAgICAgKHdibV9zdGJfaSAmJiAoIXdibV93ZV9pKSkgPyAhbV9yZXNwX3JkX2VtcHR5IDogMSdiMDsgLy8gUmVhZCBMb2dpYworCithc3NpZ24gbV9yZXNwX3JkX2VuICAgPSAhbV9yZXNwX3JkX2VtcHR5OworYXNzaWduIHdibV9kYXRfbyAgICAgID0gbV9yZXNwX3JkX2RhdGFbRFctMTowXTsKK2Fzc2lnbiB3Ym1fZXJyX28gICAgICA9IG1fcmVzcF9yZF9kYXRhW0RXXTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU2xhdmUgSW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbG9naWMgW0NGVy0xOjBdIHNfY21kX3JkX2RhdGEgICAgICA7Citsb2dpYyAgICAgICAgc19jbWRfcmRfZW1wdHkgICAgIDsKK2xvZ2ljICAgICAgICBzX2NtZF9yZF9hZW1wdHkgICAgOworbG9naWMgICAgICAgIHNfY21kX3JkX2VuICAgICAgICA7Citsb2dpYyAgICAgICAgc19yZXNwX3dyX2VuICAgICAgICA7Citsb2dpYyBbRFc6MF0gc19yZXNwX3dyX2RhdGEgICAgICA7Citsb2dpYyAgICAgICAgc19yZXNwX3dyX2Z1bGwgICAgICA7Citsb2dpYyAgICAgICAgc19yZXNwX3dyX2FmdWxsICAgICA7Citsb2dpYyAgICAgICAgd2JzX2Fja19mICAgICAgICAgIDsKKworCithbHdheXNAKG5lZ2VkZ2Ugd2JzX3JzdF9uIG9yIHBvc2VkZ2Ugd2JzX2Nsa19pKQorYmVnaW4KKyAgIGlmKHdic19yc3RfbiA9PSAwKSBiZWdpbgorICAgICAgd2JzX2Fja19mIDw9IDEnYjA7CisgICBlbmQgZWxzZSBiZWdpbgorICAgICAgd2JzX2Fja19mIDw9IHdic19hY2tfaTsKKyAgIGVuZAorZW5kCisKKworLy8gUmVhZCBJbnRlcmZhY2UKK2Fzc2lnbiB7d2JzX2Fkcl9vLHdic193ZV9vLHdic19kYXRfbyx3YnNfc2VsX299ID0gKHNfY21kX3JkX2VtcHR5KSA/ICcwOiAgc19jbWRfcmRfZGF0YTsKKy8vIEFsbCB0aGUgZG93bnN0cmVhbSBsb2dpYyBleHBlY3QgU3RvYmUgaXMgZ2V0dGluZyBkZS1hc3NlcnRlZCAKKy8vIGF0bGVhc3QgZm9yIDEgY3ljbGUgYWZ0ZXIgYWNrIGlzIGdlbmVyYXRlZAorYXNzaWduIHdic19zdGJfbyA9ICh3YnNfYWNrX2YpID8gMSdiMCA6IChzX2NtZF9yZF9lbXB0eSkgPyAxJ2IwOiAxJ2IxOworYXNzaWduIHdic19jeWNfbyA9ICh3YnNfYWNrX2YpID8gMSdiMCA6IChzX2NtZF9yZF9lbXB0eSkgPyAxJ2IwOiAxJ2IxOworCithc3NpZ24gc19jbWRfcmRfZW4gPSB3YnNfYWNrX2k7CisKKy8vIFdyaXRlIEludGVyZmFjZQorLy8gcmVzcG9uc2Ugc2VuZCBvbmx5IGZvciByZWFkIGxvZ2ljCithc3NpZ24gc19yZXNwX3dyX2VuICAgPSB3YnNfc3RiX28gJiAoIXdic193ZV9vKSAmIHdic19hY2tfaSAmICFzX3Jlc3Bfd3JfZnVsbDsKK2Fzc2lnbiBzX3Jlc3Bfd3JfZGF0YSA9IHt3YnNfZXJyX2ksd2JzX2RhdF9pfTsKKworYXN5bmNfZmlmbyAjKC5XKENGVyksIC5EUCg0KSwgLldSX0ZBU1QoMSksIC5SRF9GQVNUKDEpKSB1X2NtZF9pZiAoCisJICAgICAgICAgICAvLyBTeW5jIHcuci50IFdSIGNsb2NrCisJICAgICAgICAgICAud3JfY2xrICAgICAgICAod2JtX2Nsa19pICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAud3JfcmVzZXRfbiAgICAod2JtX3JzdF9uICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAud3JfZW4gICAgICAgICAobV9jbWRfd3JfZW4gICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAud3JfZGF0YSAgICAgICAobV9jbWRfd3JfZGF0YSAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAuZnVsbCAgICAgICAgICAobV9jbWRfd3JfZnVsbCAgICAgKSwgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIC5hZnVsbCAgICAgICAgIChtX2NtZF93cl9hZnVsbCAgICApLCAgICAgICAgICAgICAgICAgCisKKwkJICAgLy8gU3luYyB3LnIudCBSRCBDbG9jaworICAgICAgICAgICAgICAgICAgIC5yZF9jbGsgICAgICAgICh3YnNfY2xrX2kgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgIC5yZF9yZXNldF9uICAgICh3YnNfcnN0X24gICAgICAgICApLAorICAgICAgICAgICAgICAgICAgIC5yZF9lbiAgICAgICAgIChzX2NtZF9yZF9lbiAgICAgICApLAorICAgICAgICAgICAgICAgICAgIC5lbXB0eSAgICAgICAgIChzX2NtZF9yZF9lbXB0eSAgICApLCAvLyBzeW5jJ2VkIHRvIHJkX2NsaworICAgICAgICAgICAgICAgICAgIC5hZW1wdHkgICAgICAgIChzX2NtZF9yZF9hZW1wdHkgICApLCAvLyBzeW5jJ2VkIHRvIHJkX2NsaworICAgICAgICAgICAgICAgICAgIC5yZF9kYXRhICAgICAgIChzX2NtZF9yZF9kYXRhICAgICApCisJICAgICApOworCisKKy8vIFJlc3BvbnNlIHVzZWQgb25seSByZWFkIHBhdGgsIHJlYWQgaXMgYmxvY2tpbmcgYWNjZXNzLCBleHBlY3QKKy8vIG9ubHkgb25lIGxvY2F0aW9uIHVzZWQgaW4gcmV0dXJuIHBhdGggLSByZWR1Y2VkIHRoZSBkZXB0aCB0byAyCithc3luY19maWZvICMoLlcoRFcrMSksIC5EUCgyKSwgLldSX0ZBU1QoMSksIC5SRF9GQVNUKDEpKSB1X3Jlc3BfaWYgKAorCSAgICAgICAgICAgLy8gU3luYyB3LnIudCBXUiBjbG9jaworCSAgICAgICAgICAgLndyX2NsayAgICAgICAgKHdic19jbGtfaSAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgIC53cl9yZXNldF9uICAgICh3YnNfcnN0X24gICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAud3JfZW4gICAgICAgICAoc19yZXNwX3dyX2VuICAgICAgICksCisgICAgICAgICAgICAgICAgICAgLndyX2RhdGEgICAgICAgKHNfcmVzcF93cl9kYXRhICAgICApLAorICAgICAgICAgICAgICAgICAgIC5mdWxsICAgICAgICAgIChzX3Jlc3Bfd3JfZnVsbCAgICAgKSwgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIC5hZnVsbCAgICAgICAgIChzX3Jlc3Bfd3JfYWZ1bGwgICAgKSwgICAgICAgICAgICAgICAgIAorCisJCSAgIC8vIFN5bmMgdy5yLnQgUkQgQ2xvY2sKKyAgICAgICAgICAgICAgICAgICAucmRfY2xrICAgICAgICAod2JtX2Nsa19pICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgLnJkX3Jlc2V0X24gICAgKHdibV9yc3RfbiAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgIC5yZF9lbiAgICAgICAgIChtX3Jlc3BfcmRfZW4gICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAuZW1wdHkgICAgICAgICAobV9yZXNwX3JkX2VtcHR5ICAgICksIC8vIHN5bmMnZWQgdG8gcmRfY2xrCisgICAgICAgICAgICAgICAgICAgLmFlbXB0eSAgICAgICAgKG1fcmVzcF9yZF9hZW1wdHkgICApLCAvLyBzeW5jJ2VkIHRvIHJkX2NsaworICAgICAgICAgICAgICAgICAgIC5yZF9kYXRhICAgICAgIChtX3Jlc3BfcmRfZGF0YSAgICAgKQorCSAgICAgKTsKKworCisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvbGliL2Nsa19idWYudiBiL3Zlcmlsb2cvcnRsL2xpYi9jbGtfYnVmLnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFkOGZjNgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2xpYi9jbGtfYnVmLnYKQEAgLTAsMCArMSw4NSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBDbGsgQnVmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgWUlGaXZlIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS95aWZpdmVfcjAuZ2l0ICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMveWlmaXZlLyAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICBBZGRpbmcgY2xvY2sgYnVmIGZvciBtYW51YWwgY2xvY2sgdHJlZSBhdCBTT0MgbGV2ZWwgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKworbW9kdWxlIGNsa19idWYgKAorICAgLy8gT3V0cHV0cworICAgICAgIGNsa19vLAorICAgLy8gSW5wdXRzCisgICAgICAgY2xrX2kKKyAgICk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBBbGwgdGhlIGlucHV0IHRvIHRoaXMgYmxvY2sgYXJlIGRlY2xhcmVkIGhlcmUKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBpbnB1dCAgICAgICAgY2xrX2kgICAgICAgICAgOy8vIAorICAgCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQWxsIHRoZSBvdXRwdXQgdG8gdGhpcyBibG9jayBhcmUgZGVjbGFyZWQgaGVyZQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIG91dHB1dCAgICAgICBjbGtfbyAgICAgICAgICAgICA7IC8vIGNsb2NrIG91dAorCisgICAgICAgICAgICAgICAKKworc2t5MTMwX2ZkX3NjX2hkX19jbGtidWZfMTYgdV9idWYgICguQShjbGtfaSksLlgoY2xrX28pKTsKKworZW5kbW9kdWxlIAorCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9saWIvY2xrX2N0bC52IGIvdmVyaWxvZy9ydGwvbGliL2Nsa19jdGwudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTQ0NzhiCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbGliL2Nsa19jdGwudgpAQCAtMCwwICsxLDE0NyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVHVibyA4MDUxIGNvcmVzIGNvbW1vbiBsaWJyYXJ5IE1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFR1cmJvIDgwNTEgY29yZXMgcHJvamVjdCAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWlmaXZlX3IwLmdpdCAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3R1cmJvODA1MS8gICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVHVyYm8gODA1MSBkZWZpbml0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIDEuMCAgICBNYXIgMiwgMjAxMSxEaW5lc2guQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgSW5pdGlhbCBWZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIDEuMSAgIE5vdiAxNSwyMDIxLERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLyAKKy8vLy8gICAgICAgICAgICBCdWcgZml4IGluIEhpZ2ggYW5kIExvdyBjb3VudCB3aWR0aCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKy8vIE1vZHVsZTogY2xrX2N0bAorLy8KKy8vIERlc2NyaXB0aW9uOiAgR2VuZXJpYyBjbG9jayBjb250cm9sIGxvZ2ljICwgY2xrLW91dCA9IG1jbGsvKDIrY2xrX2Rpdl9yYXRpbykKKy8vCisvLyAgCisvLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKK21vZHVsZSBjbGtfY3RsICgKKyAgIC8vIE91dHB1dHMKKyAgICAgICBjbGtfbywKKyAgIC8vIElucHV0cworICAgICAgIG1jbGssCisgICAgICAgcmVzZXRfbiwgCisgICAgICAgY2xrX2Rpdl9yYXRpbyAKKyAgICk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDTE9DSyBEZWZhdWx0IERpdmlkZXIgdmFsdWUuCisvLyBUaGlzIHZhbHVlIHdpbGwgYmUgY2hhbmdlIGZyb20gb3V0c2lkZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BhcmFtZXRlciAgV0QgPSAnaDE7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBBbGwgdGhlIGlucHV0IHRvIHRoaXMgYmxvY2sgYXJlIGRlY2xhcmVkIGhlcmUKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBpbnB1dCAgICAgICAgbWNsayAgICAgICAgICA7Ly8gCisgICBpbnB1dCAgICAgICAgcmVzZXRfbiAgICAgICA7Ly8gcHJpbWFyeSByZXNldCBzaWduYWwKKyAgIGlucHV0IFtXRDowXSBjbGtfZGl2X3JhdGlvIDsvLyBwcmltYXJ5IGNsb2NrIGRpdmlkZSByYXRpbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG91dHB1dCBjbG9jayA9IHNlbGVjdGVkIGNsb2NrIC8gKGRpdl9yYXRpbysxKQorICAgCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQWxsIHRoZSBvdXRwdXQgdG8gdGhpcyBibG9jayBhcmUgZGVjbGFyZWQgaGVyZQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIG91dHB1dCAgICAgICBjbGtfbyAgICAgICAgICAgICA7IC8vIGNsb2NrIG91dAorCisgICAgICAgICAgICAgICAKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENsb2NrIERpdmlkZSBmdW5jIGlzIGRvbmUgaGVyZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3JlZyAgW1dEOjBdICAgICAgaGlnaF9jb3VudCAgICAgICA7IC8vIGhpZ2ggbGV2ZWwgY291bnRlcgorcmVnICBbV0Q6MF0gICAgICBsb3dfY291bnQgICAgICAgIDsgLy8gbG93IGxldmVsIGNvdW50ZXIKK3JlZyAgICAgICAgICAgICAgbWNsa19kaXYgICAgICAgICA7IC8vIGRpdmlkZWQgY2xvY2sKKworCithc3NpZ24gY2xrX28gID0gbWNsa19kaXY7CisKK2Fsd2F5cyBAIChwb3NlZGdlIG1jbGsgb3IgbmVnZWRnZSByZXNldF9uKQorYmVnaW4gLy8geworICAgaWYocmVzZXRfbiA9PSAxJ2IwKSAKKyAgIGJlZ2luIAorICAgICAgaGlnaF9jb3VudCAgPD0gJ2gwOworICAgICAgbG93X2NvdW50ICAgPD0gJ2gwOworICAgICAgbWNsa19kaXYgICAgPD0gJ2IwOworICAgZW5kICAgCisgICBlbHNlIAorICAgYmVnaW4gCisgICAgICBpZihoaWdoX2NvdW50ICE9IDApCisgICAgICBiZWdpbiAvLyB7CisgICAgICAgICBoaWdoX2NvdW50ICAgIDw9IGhpZ2hfY291bnQgLSAxOworICAgICAgICAgbWNsa19kaXYgICAgICA8PSAxJ2IxOworICAgICAgZW5kICAgLy8gfQorICAgICAgZWxzZSBpZihsb3dfY291bnQgIT0gMCkKKyAgICAgIGJlZ2luIC8vIHsKKyAgICAgICAgIGxvd19jb3VudCAgICAgPD0gbG93X2NvdW50IC0gMTsKKyAgICAgICAgIG1jbGtfZGl2ICAgICAgPD0gMSdiMDsKKyAgICAgIGVuZCAgIC8vIH0KKyAgICAgIGVsc2UKKyAgICAgIGJlZ2luIC8vIHsKKyAgICAgICAgIGhpZ2hfY291bnQgICAgPD0gY2xrX2Rpdl9yYXRpb1tXRDoxXSArIGNsa19kaXZfcmF0aW9bMF07CisgICAgICAgICBsb3dfY291bnQgICAgIDw9IGNsa19kaXZfcmF0aW9bV0Q6MV0gKyAxOworICAgICAgICAgbWNsa19kaXYgICAgICA8PSB+bWNsa19kaXY7CisgICAgICBlbmQgICAvLyB9CisgICBlbmQgICAvLyB9CitlbmQgICAvLyB9CisKKworZW5kbW9kdWxlIAorCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9saWIvY2xrX3NrZXdfYWRqdXN0Lmd2IGIvdmVyaWxvZy9ydGwvbGliL2Nsa19za2V3X2FkanVzdC5ndgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzgxMWMwCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbGliL2Nsa19za2V3X2FkanVzdC5ndgpAQCAtMCwwICsxLDIwNSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBjbG9jayBza2V3IGFkanVzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICBUaGlzIGJsb2NrIGlzIHVzZWZ1bCBmb3IgZ2xvYmFsIGNsb2NrIHNrZXcgYWRqdXN0bWVudCAgIC8vLy8KKy8vLy8gICAgICBsb2dpYyBpbXBsZW1lbnRhdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgIGNsa19vdXQgPSAoc2VsPTApID8gY2xrX2luIDogICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAoc2VsPTEpID8gY2xrX2QxIDogICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAoc2VsPTEpID8gY2xrX2QyIDogICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAuLi4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAoc2VsPTE1KT8gY2xrX2QxNSA6Y2xrX2luICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgIE5vdGU6IGVhY2ggZCogaW5kaWNhdGUgY2xrIGJ1ZiBkZWxheSAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4wIC0gMjl0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgSW5pdGlhbCB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLworLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLworLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLworLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLworLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLworLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLworLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLworLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLworLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gQ2xvY2staW4gaXMgZWFzdCBwYWQgZGlyZWN0aW9uCisvLyBjbG9jayBvdXQgZ2l2ZSBpbiBvdGhlciB0aHJlZSBkaXJlY3Rpb24gZm9yIGJldHRlciBwbGFjZW1lbnQKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworbW9kdWxlIGNsa19za2V3X2FkanVzdCgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgICB2Y2NkMSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgICB2c3NkMSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCitjbGtfaW4sIHNlbCwgY2xrX291dCk7CisKKworYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgIGlucHV0IHZjY2QxOy8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgIGlucHV0IHZzc2QxOy8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgaW5wdXQgIGNsa19pbjsKKyAgb3V0cHV0IGNsa19vdXQ7CisgIGlucHV0IFszOjBdIHNlbDsKKyAgd2lyZSBpbjA7CisgIHdpcmUgaW4xOworICB3aXJlIGluMjsKKyAgd2lyZSBpbjM7CisgIHdpcmUgaW40OworICB3aXJlIGluNTsKKyAgd2lyZSBpbjY7CisgIHdpcmUgaW43OworICB3aXJlIGluODsKKyAgd2lyZSBpbjk7CisgIHdpcmUgaW4xMDsKKyAgd2lyZSBpbjExOworICB3aXJlIGluMTI7CisgIHdpcmUgaW4xMzsKKyAgd2lyZSBpbjE0OworICB3aXJlIGluMTU7CisKKyAgd2lyZSBjbGtfZDE7CisgIHdpcmUgY2xrX2QyOworICB3aXJlIGNsa19kMzsKKyAgd2lyZSBjbGtfZDQ7CisgIHdpcmUgY2xrX2Q1OworICB3aXJlIGNsa19kNjsKKyAgd2lyZSBjbGtfZDc7CisgIHdpcmUgY2xrX2Q4OworICB3aXJlIGNsa19kOTsKKyAgd2lyZSBjbGtfZDEwOworICB3aXJlIGNsa19kMTE7CisgIHdpcmUgY2xrX2QxMjsKKyAgd2lyZSBjbGtfZDEzOworICB3aXJlIGNsa19kMTQ7CisgIHdpcmUgY2xrX2QxNTsKKworICB3aXJlIGQwMDsKKyAgd2lyZSBkMDE7CisgIHdpcmUgZDAyOworICB3aXJlIGQwMzsKKyAgd2lyZSBkMDQ7CisgIHdpcmUgZDA1OworICB3aXJlIGQwNjsKKyAgd2lyZSBkMDc7CisgIHdpcmUgZDEwOworICB3aXJlIGQxMTsKKyAgd2lyZSBkMTI7CisgIHdpcmUgZDEzOworICB3aXJlIGQyMDsKKyAgd2lyZSBkMjE7CisgIHdpcmUgZDMwOworCisKKyAgY3RlY2hfZGVsYXlfY2xrYnVmIGNsa2J1Zl8xICAoLkEoY2xrX2luKSwgICAgLlgoY2xrX2QxKSk7CisgIGN0ZWNoX2RlbGF5X2Nsa2J1ZiBjbGtidWZfMiAgKC5BKGNsa19kMSksICAgIC5YKGNsa19kMikpOworICBjdGVjaF9kZWxheV9jbGtidWYgY2xrYnVmXzMgICguQShjbGtfZDIpLCAgICAuWChjbGtfZDMpKTsKKyAgY3RlY2hfZGVsYXlfY2xrYnVmIGNsa2J1Zl80ICAoLkEoY2xrX2QzKSwgICAgLlgoY2xrX2Q0KSk7CisgIGN0ZWNoX2RlbGF5X2Nsa2J1ZiBjbGtidWZfNSAgKC5BKGNsa19kNCksICAgIC5YKGNsa19kNSkpOworICBjdGVjaF9kZWxheV9jbGtidWYgY2xrYnVmXzYgICguQShjbGtfZDUpLCAgICAuWChjbGtfZDYpKTsKKyAgY3RlY2hfZGVsYXlfY2xrYnVmIGNsa2J1Zl83ICAoLkEoY2xrX2Q2KSwgICAgLlgoY2xrX2Q3KSk7CisgIGN0ZWNoX2RlbGF5X2Nsa2J1ZiBjbGtidWZfOCAgKC5BKGNsa19kNyksICAgIC5YKGNsa19kOCkpOworICBjdGVjaF9kZWxheV9jbGtidWYgY2xrYnVmXzkgICguQShjbGtfZDgpLCAgICAuWChjbGtfZDkpKTsKKyAgY3RlY2hfZGVsYXlfY2xrYnVmIGNsa2J1Zl8xMCAoLkEoY2xrX2Q5KSwgICAgLlgoY2xrX2QxMCkpOworICBjdGVjaF9kZWxheV9jbGtidWYgY2xrYnVmXzExICguQShjbGtfZDEwKSwgICAuWChjbGtfZDExKSk7CisgIGN0ZWNoX2RlbGF5X2Nsa2J1ZiBjbGtidWZfMTIgKC5BKGNsa19kMTEpLCAgIC5YKGNsa19kMTIpKTsKKyAgY3RlY2hfZGVsYXlfY2xrYnVmIGNsa2J1Zl8xMyAoLkEoY2xrX2QxMiksICAgLlgoY2xrX2QxMykpOworICBjdGVjaF9kZWxheV9jbGtidWYgY2xrYnVmXzE0ICguQShjbGtfZDEzKSwgICAuWChjbGtfZDE0KSk7CisgIGN0ZWNoX2RlbGF5X2Nsa2J1ZiBjbGtidWZfMTUgKC5BKGNsa19kMTQpLCAgIC5YKGNsa19kMTUpKTsKKworCisgIC8vIFRhcCBwb2ludCBzZWxlY3Rpb24KKyAgYXNzaWduIGluMCAgPSBjbGtfaW47CisgIGFzc2lnbiBpbjEgID0gY2xrX2QxOworICBhc3NpZ24gaW4yICA9IGNsa19kMjsKKyAgYXNzaWduIGluMyAgPSBjbGtfZDM7CisgIGFzc2lnbiBpbjQgID0gY2xrX2Q0OworICBhc3NpZ24gaW41ICA9IGNsa19kNTsKKyAgYXNzaWduIGluNiAgPSBjbGtfZDY7CisgIGFzc2lnbiBpbjcgID0gY2xrX2Q3OworICBhc3NpZ24gaW44ICA9IGNsa19kODsKKyAgYXNzaWduIGluOSAgPSBjbGtfZDk7CisgIGFzc2lnbiBpbjEwID0gY2xrX2QxMDsKKyAgYXNzaWduIGluMTEgPSBjbGtfZDExOworICBhc3NpZ24gaW4xMiA9IGNsa19kMTI7CisgIGFzc2lnbiBpbjEzID0gY2xrX2QxMzsKKyAgYXNzaWduIGluMTQgPSBjbGtfZDE0OworICBhc3NpZ24gaW4xNSA9IGNsa19kMTU7CisKKworICAvLyBmaXJzdCBsZXZlbCBtdXggLSA4CisgIGN0ZWNoX211eDJ4MV8yIHVfbXV4X2xldmVsXzAwICggLlggKGQwMCkgLCAuQTAgKGluMCksICAuQTEoaW4xKSwgIC5TKHNlbFswXSkpOworICBjdGVjaF9tdXgyeDFfMiB1X211eF9sZXZlbF8wMSAoIC5YIChkMDEpICwgLkEwIChpbjIpLCAgLkExKGluMyksICAuUyhzZWxbMF0pKTsKKyAgY3RlY2hfbXV4MngxXzIgdV9tdXhfbGV2ZWxfMDIgKCAuWCAoZDAyKSAsIC5BMCAoaW40KSwgIC5BMShpbjUpLCAgLlMoc2VsWzBdKSk7CisgIGN0ZWNoX211eDJ4MV8yIHVfbXV4X2xldmVsXzAzICggLlggKGQwMykgLCAuQTAgKGluNiksICAuQTEoaW43KSwgIC5TKHNlbFswXSkpOworICBjdGVjaF9tdXgyeDFfMiB1X211eF9sZXZlbF8wNCAoIC5YIChkMDQpICwgLkEwIChpbjgpLCAgLkExKGluOSksICAuUyhzZWxbMF0pKTsKKyAgY3RlY2hfbXV4MngxXzIgdV9tdXhfbGV2ZWxfMDUgKCAuWCAoZDA1KSAsIC5BMCAoaW4xMCksIC5BMShpbjExKSwgLlMoc2VsWzBdKSk7CisgIGN0ZWNoX211eDJ4MV8yIHVfbXV4X2xldmVsXzA2ICggLlggKGQwNikgLCAuQTAgKGluMTIpLCAuQTEoaW4xMyksIC5TKHNlbFswXSkpOworICBjdGVjaF9tdXgyeDFfMiB1X211eF9sZXZlbF8wNyAoIC5YIChkMDcpICwgLkEwIChpbjE0KSwgLkExKGluMTUpLCAuUyhzZWxbMF0pKTsKKworICAvLyBzZWNvbmQgbGV2ZWwgbXV4IC0gNAorICBjdGVjaF9tdXgyeDFfMiB1X211eF9sZXZlbF8xMCAoIC5YIChkMTApICwgLkEwIChkMDApLCAuQTEoZDAxKSwgLlMoc2VsWzFdKSk7CisgIGN0ZWNoX211eDJ4MV8yIHVfbXV4X2xldmVsXzExICggLlggKGQxMSkgLCAuQTAgKGQwMiksIC5BMShkMDMpLCAuUyhzZWxbMV0pKTsKKyAgY3RlY2hfbXV4MngxXzIgdV9tdXhfbGV2ZWxfMTIgKCAuWCAoZDEyKSAsIC5BMCAoZDA0KSwgLkExKGQwNSksIC5TKHNlbFsxXSkpOworICBjdGVjaF9tdXgyeDFfMiB1X211eF9sZXZlbF8xMyAoIC5YIChkMTMpICwgLkEwIChkMDYpLCAuQTEoZDA3KSwgLlMoc2VsWzFdKSk7CisKKyAgLy8gdGhpcmQgbGV2ZWwgbXV4IC0gMgorICBjdGVjaF9tdXgyeDFfMiB1X211eF9sZXZlbF8yMCAoIC5YIChkMjApICwgLkEwIChkMTApLCAuQTEoZDExKSwgLlMoc2VsWzJdKSk7CisgIGN0ZWNoX211eDJ4MV8yIHVfbXV4X2xldmVsXzIxICggLlggKGQyMSkgLCAuQTAgKGQxMiksIC5BMShkMTMpLCAuUyhzZWxbMl0pKTsKKworICAvLyBmb3VydGggbGV2ZWwgbXV4IC0gMQorICBjdGVjaF9tdXgyeDFfNCB1X211eF9sZXZlbF8zMCAoIC5YIChkMzApICwgLkEwIChkMjApLCAuQTEoZDIxKSwgLlMoc2VsWzNdKSk7CisKKworICBhc3NpZ24gY2xrX291dCA9IGQzMDsKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9saWIvY3RlY2hfY2VsbHMuc3YgYi92ZXJpbG9nL3J0bC9saWIvY3RlY2hfY2VsbHMuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk1MjhkZQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2xpYi9jdGVjaF9jZWxscy5zdgpAQCAtMCwwICsxLDkwIEBACisKK21vZHVsZSBjdGVjaF9tdXgyeDEgKAorCWlucHV0ICBsb2dpYyBBMCwKKwlpbnB1dCAgbG9naWMgQTEsCisJaW5wdXQgIGxvZ2ljIFMgLAorCW91dHB1dCBsb2dpYyBYKTsKKworYGlmbmRlZiBTWU5USEVTSVMKK2Fzc2lnbiBYID0gKFMpID8gQTEgOiBBMDsKK2BlbHNlIAorc2t5MTMwX2ZkX3NjX2hkX19tdXgyXzggdV9tdXggKC5BMCAoQTApLCAuQTEgKEExKSwgLlMgIChTKSwgLlggKFgpKTsKK2BlbmRpZgorCitlbmRtb2R1bGUKKworbW9kdWxlIGN0ZWNoX211eDJ4MV8yICgKKwlpbnB1dCAgbG9naWMgQTAsCisJaW5wdXQgIGxvZ2ljIEExLAorCWlucHV0ICBsb2dpYyBTICwKKwlvdXRwdXQgbG9naWMgWCk7CisKK2BpZm5kZWYgU1lOVEhFU0lTCithc3NpZ24gWCA9IChTKSA/IEExIDogQTA7CitgZWxzZSAKK3NreTEzMF9mZF9zY19oZF9fbXV4Ml8yIHVfbXV4ICguQTAgKEEwKSwgLkExIChBMSksIC5TICAoUyksIC5YIChYKSk7CitgZW5kaWYKKworZW5kbW9kdWxlCisKK21vZHVsZSBjdGVjaF9tdXgyeDFfNCAoCisJaW5wdXQgIGxvZ2ljIEEwLAorCWlucHV0ICBsb2dpYyBBMSwKKwlpbnB1dCAgbG9naWMgUyAsCisJb3V0cHV0IGxvZ2ljIFgpOworCitgaWZuZGVmIFNZTlRIRVNJUworYXNzaWduIFggPSAoUykgPyBBMSA6IEEwOworYGVsc2UgCitza3kxMzBfZmRfc2NfaGRfX211eDJfNCB1X211eCAoLkEwIChBMCksIC5BMSAoQTEpLCAuUyAgKFMpLCAuWCAoWCkpOworYGVuZGlmCisKK2VuZG1vZHVsZQorCittb2R1bGUgY3RlY2hfYnVmICgKKwlpbnB1dCAgbG9naWMgQSwKKwlvdXRwdXQgbG9naWMgWCk7CisKK2BpZm5kZWYgU1lOVEhFU0lTCithc3NpZ24gWCA9IEE7CitgZWxzZQorICAgIHNreTEzMF9mZF9zY19oZF9fYnVmYnVmXzggdV9idWYgICguQShBKSwuWChYKSk7CitgZW5kaWYKKworZW5kbW9kdWxlCisKK21vZHVsZSBjdGVjaF9jbGtfYnVmICgKKwlpbnB1dCAgbG9naWMgQSwKKwlvdXRwdXQgbG9naWMgWCk7CisKK2BpZm5kZWYgU1lOVEhFU0lTCithc3NpZ24gWCA9IEE7CitgZWxzZQorICAgIHNreTEzMF9mZF9zY19oZF9fY2xrYnVmXzggdV9idWYgICguQShBKSwuWChYKSk7CitgZW5kaWYKKworZW5kbW9kdWxlCisKK21vZHVsZSBjdGVjaF9kZWxheV9idWYgKAorCWlucHV0ICBsb2dpYyBBLAorCW91dHB1dCBsb2dpYyBYKTsKKworYGlmbmRlZiBTWU5USEVTSVMKKyAgICBhc3NpZ24gWCA9IEE7CitgZWxzZQorICAgICBza3kxMzBfZmRfc2NfaGRfX2RseWdhdGU0c2QzXzEgdV9kbHkgKC5YKFgpLC5BKEEpKTsKK2BlbmRpZgorCitlbmRtb2R1bGUKKworbW9kdWxlIGN0ZWNoX2RlbGF5X2Nsa2J1ZiAoCisJaW5wdXQgIGxvZ2ljIEEsCisJb3V0cHV0IGxvZ2ljIFgpOworCitgaWZuZGVmIFNZTlRIRVNJUworICAgIGFzc2lnbiBYID0gQTsKK2BlbHNlCisgICAgIHNreTEzMF9mZF9zY19oZF9fY2xrZGx5YnVmNHMxNV8yIHVfZGx5ICguWChYKSwuQShBKSk7CitgZW5kaWYKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9saWIvZG91YmxlX3N5bmNfaGlnaC52IGIvdmVyaWxvZy9ydGwvbGliL2RvdWJsZV9zeW5jX2hpZ2gudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMWQyY2E2Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbGliL2RvdWJsZV9zeW5jX2hpZ2gudgpAQCAtMCwwICsxLDEwNiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBPTVMgODA1MSBjb3JlcyBjb21tb24gbGlicmFyeSBNb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgT01TIDgwNTEgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvb21zODA1MW1pbmkvICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBPTVMgODA1MSBkZWZpbml0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6IE5vdiAyNiwgMjAxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vIAorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLworLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLworLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLworLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLworLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLworLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLworLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLworLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLworLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTaW1wbGUgRG91YmxlIHN5bmMgbG9naWMgd2l0aCBSZXNldCB2YWx1ZSA9IDAKKy8vIFRoaXMgZG91YmxlIHNpZ25hbCBzaG91bGQgYmUgdXNlZCBmb3Igc2lnbmFsIHRyYW5zaXRpbmcgZnJvbSBsb3cgdG8gaGlnaAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZSBkb3VibGVfc3luY19oaWdoICAgKAorICAgICAgICAgICAgICBpbl9kYXRhICAgICwKKyAgICAgICAgICAgICAgb3V0X2NsayAgICAsCisgICAgICAgICAgICAgIG91dF9yc3RfbiAgLAorICAgICAgICAgICAgICBvdXRfZGF0YSAgIAorICAgICAgICAgICk7CisKK3BhcmFtZXRlciBXSURUSCA9IDE7CisKK2lucHV0IFtXSURUSC0xOjBdICAgIGluX2RhdGEgICAgOyAvLyBJbnB1dCBmcm9tIERpZmZlcmVudCBjbG9jayBkb21haW4KK2lucHV0ICAgICAgICAgICAgICAgIG91dF9jbGsgICAgOyAvLyBPdXRwdXQgY2xvY2sKK2lucHV0ICAgICAgICAgICAgICAgIG91dF9yc3RfbiAgOyAvLyBBY3RpdmUgbG93IFJlc2V0CitvdXRwdXRbV0lEVEgtMTowXSAgICBvdXRfZGF0YSAgIDsgLy8gT3V0cHV0IERhdGEKKworCityZWcgW1dJRFRILTE6MF0gICAgIGluX2RhdGFfcyAgOyAvLyBPbmUgICBDeWNsZSBzeW5jIAorcmVnIFtXSURUSC0xOjBdICAgICBpbl9kYXRhXzJzIDsgLy8gdHdvICAgQ3ljbGUgc3luYyAKK3JlZyBbV0lEVEgtMTowXSAgICAgaW5fZGF0YV8zcyA7IC8vIHRocmVlIEN5Y2xlIHN5bmMgCisKK2Fzc2lnbiBvdXRfZGF0YSA9ICBpbl9kYXRhXzNzOworCithbHdheXMgQChuZWdlZGdlIG91dF9yc3RfbiBvciBwb3NlZGdlIG91dF9jbGspCitiZWdpbgorICAgaWYob3V0X3JzdF9uID09IDEnYjApCisgICBiZWdpbgorICAgICAgaW5fZGF0YV9zICA8PSB7V0lEVEh7MSdiMH19OworICAgICAgaW5fZGF0YV8ycyA8PSB7V0lEVEh7MSdiMH19OworICAgICAgaW5fZGF0YV8zcyA8PSB7V0lEVEh7MSdiMH19OworICAgZW5kCisgICBlbHNlCisgICBiZWdpbgorICAgICAgaW5fZGF0YV9zICA8PSBpbl9kYXRhOworICAgICAgaW5fZGF0YV8ycyA8PSBpbl9kYXRhX3M7CisgICAgICBpbl9kYXRhXzNzIDw9IGluX2RhdGFfMnM7CisgICBlbmQKK2VuZAorCisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvbGliL2RvdWJsZV9zeW5jX2xvdy52IGIvdmVyaWxvZy9ydGwvbGliL2RvdWJsZV9zeW5jX2xvdy52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVmZDQyNjkKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9saWIvZG91YmxlX3N5bmNfbG93LnYKQEAgLTAsMCArMSwxMDYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgT01TIDgwNTEgY29yZXMgY29tbW9uIGxpYnJhcnkgTW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIE9NUyA4MDUxIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL29tczgwNTFtaW5pLyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWlmaXZlX3IwLmdpdCAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgT01TIDgwNTEgZGVmaW5pdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiBOb3YgMjYsIDIwMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLyAKKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU2ltcGxlIERvdWJsZSBzeW5jIGxvZ2ljIHdpdGggUmVzZXQgdmFsdWUgPSAxCisvLyBUaGlzIGRvdWJsZSBzaWduYWwgc2hvdWxkIGJlIHVzZWQgZm9yIHNpZ25hbCB0cmFuc2l0aW5nIGZyb20gbG93IHRvIGhpZ2gKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUgZG91YmxlX3N5bmNfbG93ICAgKAorICAgICAgICAgICAgICBpbl9kYXRhICAgICwKKyAgICAgICAgICAgICAgb3V0X2NsayAgICAsCisgICAgICAgICAgICAgIG91dF9yc3RfbiAgLAorICAgICAgICAgICAgICBvdXRfZGF0YSAgIAorICAgICAgICAgICk7CisKK3BhcmFtZXRlciBXSURUSCA9IDE7CisKK2lucHV0IFtXSURUSC0xOjBdICAgIGluX2RhdGEgICAgOyAvLyBJbnB1dCBmcm9tIERpZmZlcmVudCBjbG9jayBkb21haW4KK2lucHV0ICAgICAgICAgICAgICAgIG91dF9jbGsgICAgOyAvLyBPdXRwdXQgY2xvY2sKK2lucHV0ICAgICAgICAgICAgICAgIG91dF9yc3RfbiAgOyAvLyBBY3RpdmUgbG93IFJlc2V0CitvdXRwdXRbV0lEVEgtMTowXSAgICBvdXRfZGF0YSAgIDsgLy8gT3V0cHV0IERhdGEKKworCityZWcgW1dJRFRILTE6MF0gICAgIGluX2RhdGFfcyAgOyAvLyBPbmUgICBDeWNsZSBzeW5jIAorcmVnIFtXSURUSC0xOjBdICAgICBpbl9kYXRhXzJzIDsgLy8gdHdvICAgQ3ljbGUgc3luYyAKK3JlZyBbV0lEVEgtMTowXSAgICAgaW5fZGF0YV8zcyA7IC8vIHRocmVlIEN5Y2xlIHN5bmMgCisKK2Fzc2lnbiBvdXRfZGF0YSA9ICBpbl9kYXRhXzNzOworCithbHdheXMgQChuZWdlZGdlIG91dF9yc3RfbiBvciBwb3NlZGdlIG91dF9jbGspCitiZWdpbgorICAgaWYob3V0X3JzdF9uID09IDEnYjApCisgICBiZWdpbgorICAgICAgaW5fZGF0YV9zICA8PSB7V0lEVEh7MSdiMX19OworICAgICAgaW5fZGF0YV8ycyA8PSB7V0lEVEh7MSdiMX19OworICAgICAgaW5fZGF0YV8zcyA8PSB7V0lEVEh7MSdiMX19OworICAgZW5kCisgICBlbHNlCisgICBiZWdpbgorICAgICAgaW5fZGF0YV9zICA8PSBpbl9kYXRhOworICAgICAgaW5fZGF0YV8ycyA8PSBpbl9kYXRhX3M7CisgICAgICBpbl9kYXRhXzNzIDw9IGluX2RhdGFfMnM7CisgICBlbmQKK2VuZAorCisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvbGliL3B1bHNlX2dlbl90eXBlMS5zdiBiL3Zlcmlsb2cvcnRsL2xpYi9wdWxzZV9nZW5fdHlwZTEuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM4ZmUwMwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2xpYi9wdWxzZV9nZW5fdHlwZTEuc3YKQEAgLTAsMCArMSwzNyBAQAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVGhpcyBtb2R1bGUgaXMgdXNlZCB0byBnZW5lcmF0ZSAxbXMgYW5kIDFzZWMgcHVsc2UgYmFzZWQgb24gMXVzIHRyaWdnZXIKKy8vIHB1bHNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUgcHVsc2VfZ2VuX3R5cGUxKAorCW91dHB1dCBsb2dpYyBjbGtfcHVsc2UsCisKKwlpbnB1dCBsb2dpYyBjbGssCisgICAgICAgIGlucHV0IGxvZ2ljIHJlc2V0X24sCisJaW5wdXQgbG9naWMgdHJpZ2dlcgorKTsKKworcGFyYW1ldGVyIFdEPSAxMDsgICAvLyBUaGlzIHdpbGwgY291bnQgZnJvbSAwIHRvIDEwMjMKK3BhcmFtZXRlciBNQVhfQ05UID0gOTk5OworCitsb2dpYyBbV0QtMTowXSAgY250OworCithc3NpZ24gY2xrX3B1bHNlID0gKGNudCA9PSAwKSAmJiB0cmlnZ2VyOworCithbHdheXMgQCAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByZXNldF9uKQorYmVnaW4KKyAgIGlmIChyZXNldF9uID09IDEnYjApIGJlZ2luIAorICAgICAgY250IDw9ICdiMDsKKyAgIGVuZCBlbHNlIGJlZ2luIAorICAgICAgaWYodHJpZ2dlcikgYmVnaW4KKyAgICAgICAgICBpZihjbnQgPj0gTUFYX0NOVCkKKyAgICAgICAgICAgICAgY250IDw9IDA7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBjbnQgPD0gY250ICsxOworICAgICAgZW5kCisgICBlbmQKK2VuZAorCitlbmRtb2R1bGUKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvbGliL3B1bHNlX2dlbl90eXBlMi5zdiBiL3Zlcmlsb2cvcnRsL2xpYi9wdWxzZV9nZW5fdHlwZTIuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJjNzU5ZQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2xpYi9wdWxzZV9nZW5fdHlwZTIuc3YKQEAgLTAsMCArMSwzNiBAQAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVGhpcyBtb2R1bGUgaXMgdXNlZCB0byBnZW5lcmF0ZSAxdXMgYmFzZWQgb24gY29uZmlnIHZhbHVlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUgcHVsc2VfZ2VuX3R5cGUyICMocGFyYW1ldGVyIFdEID0gMTApCisgICAgKAorCW91dHB1dCBsb2dpYyAgICAgICAgICAgY2xrX3B1bHNlLAorCisJaW5wdXQgbG9naWMgICAgICAgICAgICBjbGssCisgICAgICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgcmVzZXRfbiwKKwlpbnB1dCBsb2dpYyBbV0QtMTowXSAgIGNmZ19tYXhfY250CispOworCisKK2xvZ2ljIFtXRC0xOjBdICBjbnQ7CisKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcmVzZXRfbikKK2JlZ2luCisgICBpZiAocmVzZXRfbiA9PSAxJ2IwKSBiZWdpbiAKKyAgICAgIGNudCA8PSAnYjA7CisgICAgICBjbGtfcHVsc2UgPD0gJ2IwOworICAgZW5kIGVsc2UgYmVnaW4gCisgICAgICBpZihjbnQgPT0gY2ZnX21heF9jbnQpIGJlZ2luCisgICAgICAgICAgY250ICAgICAgIDw9IDA7CisgICAgICAgICAgY2xrX3B1bHNlIDw9IDEnYjE7CisgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgIGNudCAgICAgICA8PSBjbnQgKzE7CisgICAgICAgICAgY2xrX3B1bHNlIDw9IDEnYjA7CisgICAgICBlbmQKKyAgIGVuZAorZW5kCisKK2VuZG1vZHVsZQorCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9saWIvcmVnaXN0ZXJzLnYgYi92ZXJpbG9nL3J0bC9saWIvcmVnaXN0ZXJzLnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTRhODdhMQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2xpYi9yZWdpc3RlcnMudgpAQCAtMCwwICsxLDMyOSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUdWJvIDgwNTEgY29yZXMgY29tbW9uIGxpYnJhcnkgTW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgVHVyYm8gODA1MSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAvLy8vCisvLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvdHVyYm84MDUxLyAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUdXJibyA4MDUxIGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6IE1hciAyLCAyMDExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vIAorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLworLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLworLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLworLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLworLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLworLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLworLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLworLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLworLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiBtb2R1bGU6IGJpdCByZWdpc3RlcgorCisqKiBkZXNjcmlwdGlvbjogaW5mZXJzIGEgcmVnaXN0ZXIsIG1ha2UgaXQgbW9kdWxhcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworbW9kdWxlIGJpdF9yZWdpc3RlciAoCisJCSAvL2lucHV0cworCQkgd2UsCQkgCisJCSBjbGssCisJCSByZXNldF9uLAorCQkgZGF0YV9pbiwKKwkJIAorCQkgLy9vdXRwdXRzCisJCSBkYXRhX291dAorCQkgKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlc2V0IERlZmF1bHQgdmFsdWUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwYXJhbWV0ZXIgIFJFU0VUX0RFRkFVTFQgPSAxJ2gwOworCisgIGlucHV0CSB3ZTsKKyAgaW5wdXQJIGNsazsKKyAgaW5wdXQJIHJlc2V0X247CisgIGlucHV0CSBkYXRhX2luOworICBvdXRwdXQgZGF0YV9vdXQ7CisgIAorICByZWcJIGRhdGFfb3V0OworICAKKyAgLy9pbmZlciB0aGUgcmVnaXN0ZXIKKyAgYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByZXNldF9uKQorICAgIGJlZ2luCisgICAgICBpZiAoIXJlc2V0X24pCisJZGF0YV9vdXQgPD0gUkVTRVRfREVGQVVMVDsKKyAgICAgIGVsc2UgaWYgKHdlKQorCWRhdGFfb3V0IDw9IGRhdGFfaW47CisgICAgZW5kIC8vIGFsd2F5cyBAIChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJlc2V0X24pCitlbmRtb2R1bGUgLy8gcmVnaXN0ZXIKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiBtb2R1bGU6IHJlcSByZWdpc3Rlci4KKworKiogZGVzY3JpcHRpb246IFRoaXMgcmVnaXN0ZXIgaXMgc2V0IGJ5IGNwdSB3cml0dGluZyAxIGFuZCByZXNldCBieQorICAgICAgICAgICAgICAgIGhhcndhcmQgcmVxID0gMQorCisgTm90ZTogV2hlbiB0aGVyZSBpcyBhIGNsYXNoIGJldHdlZW4gY3B1IGFuZCBoYXJkd2FyZSwgY3B1IGlzIGdpdmVuIGhpZ2hlcgorICAgICAgIHByaW9yaXR5CisKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK21vZHVsZSByZXFfcmVnaXN0ZXIgKAorCQkgLy9pbnB1dHMKKwkJIGNsaywKKwkJIHJlc2V0X24sCisJCSBjcHVfd2UsCQkgCisJCSBjcHVfcmVxLAorCQkgaHdhcmVfYWNrLAorCQkgCisJCSAvL291dHB1dHMKKwkJIGRhdGFfb3V0CisJCSApOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVzZXQgRGVmYXVsdCB2YWx1ZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BhcmFtZXRlciAgUkVTRVRfREVGQVVMVCA9IDEnaDA7CisKKyAgaW5wdXQJIGNsayAgICAgIDsKKyAgaW5wdXQJIHJlc2V0X24gIDsKKyAgaW5wdXQJIGNwdV93ZSAgIDsgLy8gY3B1IHdyaXRlIGVuYWJsZQorICBpbnB1dAkgY3B1X3JlcSAgOyAvLyBDUFUgUmVxdWVzdAorICBpbnB1dAkgaHdhcmVfYWNrOyAvLyBIYXJkd2FyZSBBY2sKKyAgb3V0cHV0IGRhdGFfb3V0IDsKKyAgCisgIHJlZwkgZGF0YV9vdXQ7CisgIAorICAvL2luZmVyIHRoZSByZWdpc3RlcgorICBhbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJlc2V0X24pCisgICAgYmVnaW4KKyAgICAgIGlmICghcmVzZXRfbikKKwlkYXRhX291dCA8PSBSRVNFVF9ERUZBVUxUOworICAgICAgZWxzZSBpZiAoY3B1X3dlICYgY3B1X3JlcSkgLy8gU2V0IG9uIENQVSBSZXF1ZXN0CisJIGRhdGFfb3V0IDw9IDEnYjE7CisgICAgICBlbHNlIGlmIChod2FyZV9hY2spICAvLyBSZXNldCB0aGUgZmxhZyBvbiBIYXJkd2FyZSBhY2sKKwkgZGF0YV9vdXQgPD0gMSdiMDsKKyAgICBlbmQgLy8gYWx3YXlzIEAgKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcmVzZXRfbikKK2VuZG1vZHVsZSAvLyByZWdpc3RlcgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqIG1vZHVsZTogcmVxIHJlZ2lzdGVyLgorCisqKiBkZXNjcmlwdGlvbjogVGhpcyByZWdpc3RlciBpcyBjbGVhcmVkIGJ5IGNwdSB3cml0dGluZyAxIGFuZCBzZXQgYnkKKyAgICAgICAgICAgICAgICBoYXJ3YXJkIHJlcSA9IDEKKworIE5vdGU6IFdoZW4gdGhlcmUgaXMgYSBjbGFzaCBiZXR3ZWVuIGNwdSBhbmQgaGFyZHdhcmUsIAorICAgICAgIGhhcmR3YXJlIGlzIGdpdmVuIGhpZ2hlciBwcmlvcml0eQorCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCittb2R1bGUgc3RhdF9yZWdpc3RlciAoCisJCSAvL2lucHV0cworCQkgY2xrLAorCQkgcmVzZXRfbiwKKwkJIGNwdV93ZSwJCSAKKwkJIGNwdV9hY2ssCisJCSBod2FyZV9yZXEsCisJCSAKKwkJIC8vb3V0cHV0cworCQkgZGF0YV9vdXQKKwkJICk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZXNldCBEZWZhdWx0IHZhbHVlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGFyYW1ldGVyICBSRVNFVF9ERUZBVUxUID0gMSdoMDsKKworICBpbnB1dAkgY2xrICAgICAgOworICBpbnB1dAkgcmVzZXRfbiAgOworICBpbnB1dAkgY3B1X3dlICAgOyAvLyBjcHUgd3JpdGUgZW5hYmxlCisgIGlucHV0CSBjcHVfYWNrICA7IC8vIENQVSBBY2sKKyAgaW5wdXQJIGh3YXJlX3JlcTsgLy8gSGFyZHdhcmUgUmVxCisgIG91dHB1dCBkYXRhX291dCA7CisgIAorICByZWcJIGRhdGFfb3V0OworICAKKyAgLy9pbmZlciB0aGUgcmVnaXN0ZXIKKyAgYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByZXNldF9uKQorICAgIGJlZ2luCisgICAgICBpZiAoIXJlc2V0X24pCisJZGF0YV9vdXQgPD0gUkVTRVRfREVGQVVMVDsKKyAgICAgIGVsc2UgaWYgKGh3YXJlX3JlcSkgIC8vIFNldCB0aGUgZmxhZyBvbiBIYXJkd2FyZSBSZXEKKwkgZGF0YV9vdXQgPD0gMSdiMTsKKyAgICAgIGVsc2UgaWYgKGNwdV93ZSAmIGNwdV9hY2spIC8vIENsZWFyIG9uIENQVSBBY2sKKwkgZGF0YV9vdXQgPD0gMSdiMDsKKyAgICBlbmQgLy8gYWx3YXlzIEAgKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcmVzZXRfbikKK2VuZG1vZHVsZSAvLyByZWdpc3RlcgorCisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBtb2R1bGU6IGdlbmVyaWMgcmVnaXN0ZXIKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworbW9kdWxlICBnZW5lcmljX3JlZ2lzdGVyCSgKKwkgICAgICAvL0xpc3Qgb2YgSW5wdXRzCisJICAgICAgd2UsCQkgCisJICAgICAgZGF0YV9pbiwKKwkgICAgICByZXNldF9uLAorCSAgICAgIGNsaywKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIGRhdGFfb3V0CisJICAgICAgKTsKKworICBwYXJhbWV0ZXIgICBXRCAgICAgICAgICAgICAgID0gMTsgIAorICBwYXJhbWV0ZXIgICBSRVNFVF9ERUZBVUxUICAgID0gMDsgIAorICBpbnB1dCBbV0QtMTowXSAgICAgd2U7CQorICBpbnB1dCBbV0QtMTowXSAgICAgZGF0YV9pbjsJCisgIGlucHV0ICAgICAgICAgICAgICByZXNldF9uOworICBpbnB1dAkJICAgICBjbGs7CisgIG91dHB1dCBbV0QtMTowXSAgICBkYXRhX291dDsKKworCitnZW5lcmF0ZQorICBnZW52YXIgaTsKKyAgZm9yIChpID0gMDsgaSA8IFdEOyBpID0gaSArIDEpIGJlZ2luIDogZ2VuX2JpdF9yZWcKKyAgICBiaXRfcmVnaXN0ZXIgIyhSRVNFVF9ERUZBVUxUW2ldKSB1X2JpdF9yZWcgKCAgIAorICAgICAgICAgICAgICAgIC53ZSAgICAgICAgICh3ZVtpXSksCisgICAgICAgICAgICAgICAgLmNsayAgICAgICAgKGNsayksCisgICAgICAgICAgICAgICAgLnJlc2V0X24gICAgKHJlc2V0X24pLAorICAgICAgICAgICAgICAgIC5kYXRhX2luICAgIChkYXRhX2luW2ldKSwKKyAgICAgICAgICAgICAgICAuZGF0YV9vdXQgICAoZGF0YV9vdXRbaV0pCisgICAgICAgICAgICApOworICBlbmQKK2VuZGdlbmVyYXRlCisKKworZW5kbW9kdWxlCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIG1vZHVsZTogZ2VuZXJpYyBpbnRlcnJ1cHQgc3RhdHVzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK21vZHVsZSAgZ2VuZXJpY19pbnRyX3N0YXRfcmVnCSgKKwkJIC8vaW5wdXRzCisJCSBjbGssCisJCSByZXNldF9uLAorCQkgcmVnX3dlLAkJIAorCQkgcmVnX2RpbiwKKwkJIGh3YXJlX3JlcSwKKwkJIAorCQkgLy9vdXRwdXRzCisJCSBkYXRhX291dAorCSAgICAgICk7CisKKyAgcGFyYW1ldGVyICAgV0QgICAgICAgICAgICAgICA9IDE7ICAKKyAgcGFyYW1ldGVyICAgUkVTRVRfREVGQVVMVCAgICA9IDA7ICAKKyAgaW5wdXQgW1dELTE6MF0gICAgIHJlZ193ZTsJCisgIGlucHV0IFtXRC0xOjBdICAgICByZWdfZGluOwkKKyAgaW5wdXQgW1dELTE6MF0gICAgIGh3YXJlX3JlcTsJCisgIGlucHV0ICAgICAgICAgICAgICByZXNldF9uOworICBpbnB1dAkJICAgICBjbGs7CisgIG91dHB1dCBbV0QtMTowXSAgICBkYXRhX291dDsKKworCitnZW5lcmF0ZQorICBnZW52YXIgaTsKKyAgZm9yIChpID0gMDsgaSA8IFdEOyBpID0gaSArIDEpIGJlZ2luIDogZ2VuX2JpdF9yZWcKKyAgICBzdGF0X3JlZ2lzdGVyICMoUkVTRVRfREVGQVVMVFtpXSkgdV9iaXRfcmVnICgKKwkJIC8vaW5wdXRzCisJCSAuIGNsayAgICAgICAgKGNsayAgICAgICAgICAgKSwKKwkJIC4gcmVzZXRfbiAgICAocmVzZXRfbiAgICAgICApLAorCQkgLiBjcHVfd2UgICAgIChyZWdfd2VbaV0gICAgICksCQkgCisJCSAuIGNwdV9hY2sgICAgKHJlZ19kaW5baV0gICAgKSwKKwkJIC4gaHdhcmVfcmVxICAoaHdhcmVfcmVxW2ldICApLAorCQkgCisJCSAvL291dHB1dHMKKwkJIC4gZGF0YV9vdXQgIChkYXRhX291dFtpXSAgICApCisJCSApOworCisgIGVuZAorZW5kZ2VuZXJhdGUKKworCitlbmRtb2R1bGUKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIG1vZHVsZTogZ2VuZXJpYyAzMmIgcmVnaXN0ZXIKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworbW9kdWxlICBnZW5fMzJiX3JlZwkoCisJICAgICAgLy9MaXN0IG9mIElucHV0cworCSAgICAgIGNzLAorCSAgICAgIHdlLAkJIAorCSAgICAgIGRhdGFfaW4sCisJICAgICAgcmVzZXRfbiwKKwkgICAgICBjbGssCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICBkYXRhX291dAorCSAgICAgICk7CisKKyAgcGFyYW1ldGVyICAgUkVTRVRfREVGQVVMVCAgICA9IDMyJ2gwOyAgCisgIGlucHV0IFszOjBdICAgICAgd2U7CQorICBpbnB1dCAgICAgICAgICAgIGNzOworICBpbnB1dCBbMzE6MF0gICAgIGRhdGFfaW47CQorICBpbnB1dCAgICAgICAgICAgIHJlc2V0X247CisgIGlucHV0CQkgICBjbGs7CisgIG91dHB1dCBbMzE6MF0gICAgZGF0YV9vdXQ7CisKKworICByZWcgWzMxOjBdICAgIGRhdGFfb3V0OworCithbHdheXMgQCAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByZXNldF9uKSBiZWdpbiAKKyAgaWYgKHJlc2V0X24gPT0gMSdiMCkgYmVnaW4KKyAgICBkYXRhX291dCAgPD0gUkVTRVRfREVGQVVMVCA7CisgIGVuZAorICBlbHNlIGJlZ2luCisgICAgaWYoY3MgJiYgd2VbMF0pIGRhdGFfb3V0Wzc6MF0gICA8PSBkYXRhX2luWzc6MF07CisgICAgaWYoY3MgJiYgd2VbMV0pIGRhdGFfb3V0WzE1OjhdICA8PSBkYXRhX2luWzE1OjhdOworICAgIGlmKGNzICYmIHdlWzJdKSBkYXRhX291dFsyMzoxNl0gPD0gZGF0YV9pblsyMzoxNl07CisgICAgaWYoY3MgJiYgd2VbM10pIGRhdGFfb3V0WzMxOjI0XSA8PSBkYXRhX2luWzMxOjI0XTsKKyAgZW5kCitlbmQKKworCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL2xpYi9yZXNldF9zeW5jLnN2IGIvdmVyaWxvZy9ydGwvbGliL3Jlc2V0X3N5bmMuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk2YzcxOQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2xpYi9yZXNldF9zeW5jLnN2CkBAIC0wLDAgKzEsMTAxIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEFjdGl2ZSBsb3cgcmVzZXQgc3luY2hyb25pemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHlpZml2ZSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWlmaXZlX3IwLmdpdCAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3lpZml2ZS8gICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgU3luY2hyb25pemUgdGhlIGFjdGl2ZSBsb3cgcmVzZXQgdG8gZGVzdGluYXRpb24gY2xvY2sgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgdjA6ICAgIEp1bmUgMTcsIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICBJbml0aWFsIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLworLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLworLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLworLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLworLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLworLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLworLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLworLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLworLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCittb2R1bGUgcmVzZXRfc3luYyAgICgKKwkgICAgICBzY2FuX21vZGUgICwKKyAgICAgICAgICAgICAgZGNsayAgICAgICAsIC8vIERlc3RpbmF0aW9uIGNsb2NrIGRvbWFpbgorCSAgICAgIGFyc3RfbiAgICAgLCAvLyBhY3RpdmUgbG93IGFzeW5jIHJlc2V0CisgICAgICAgICAgICAgIHNyc3RfbiAKKyAgICAgICAgICApOworCitwYXJhbWV0ZXIgV0lEVEggPSAxOworCitpbnB1dCAgICBzY2FuX21vZGUgIDsgLy8gdGVzdCBtb2RlCitpbnB1dCAgICBkY2xrICAgICAgIDsgLy8gRGVzdGluYXRpb24gY2xvY2sKK2lucHV0ICAgIGFyc3RfbiAgICAgOyAvLyBBc3luYyBSZXNldAorb3V0cHV0ICAgc3JzdF9uICAgICA7IC8vIFN5bmMgUmVzZXQgdy5yLnQgZGNsaworCisKK3JlZyAgICAgIGluX2RhdGFfcyAgOyAvLyBPbmUgICBDeWNsZSBzeW5jIAorcmVnICAgICAgaW5fZGF0YV8ycyA7IC8vIHR3byAgIEN5Y2xlIHN5bmMgCisKK2Fzc2lnbiBzcnN0X24gPSAgKHNjYW5fbW9kZSkgPyBhcnN0X24gOiBpbl9kYXRhXzJzOworCithbHdheXMgQChuZWdlZGdlIGFyc3RfbiAgb3IgcG9zZWRnZSBkY2xrKQorYmVnaW4KKyAgIGlmKGFyc3RfbiA9PSAxJ2IwKQorICAgYmVnaW4KKyAgICAgIGluX2RhdGFfcyAgPD0gMSdiMDsKKyAgICAgIGluX2RhdGFfMnMgPD0gMSdiMDsKKyAgIGVuZAorICAgZWxzZQorICAgYmVnaW4KKyAgICAgIGluX2RhdGFfcyAgPD0gMSdiMTsKKyAgICAgIGluX2RhdGFfMnMgPD0gaW5fZGF0YV9zOworICAgZW5kCitlbmQKKworCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL2xpYi9zZXJfaW5mXzMyYi5zdiBiL3Zlcmlsb2cvcnRsL2xpYi9zZXJfaW5mXzMyYi5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjI4ODUyCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbGliL3Nlcl9pbmZfMzJiLnN2CkBAIC0wLDAgKzEsMTIxIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIHNlcl9pbmZfMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBtYmlzdF9jdHJsIGNvcmVzIHByb2plY3QgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL21iaXN0X2N0cmwuZ2l0ICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICBUaGlzIGJsb2NrIG1hbmFnZXMgdGhlIHNlcmlhbCB0byBQYXJhbGxlbCBjb252ZXJzaW9uICAgICAgIC8vLy8KKy8vLy8gICBUaGlzIGJsb2NrIHVzZWZ1bGwgZm9yIEJpc3QgU0RJL1NETyBhY2Nlc3MgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICBGdW5jdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAxLiBXaGVuIHJlZ193cj0xLCB0aGlzIGJsb2NrIHNldCBzaGlmdD0xIGFuZCBzaGlmdCAgICAgIC8vLy8KKy8vLy8gICAgICAgICByZWdfd2RhdGEgc2VyaWFsIHRocm91Z2ggc2RpIGZvciAzMiBjeWNsZXMgYW5kICAgICAgIC8vLy8KKy8vLy8gICAgICAgICBhc3NlcnRzIFJlZyBBY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAyLiBXaGVuIHJlZ19yZD0xLCB0aGlzIGJsb2NrIHNldCBzaG9mdD0xIGFuZCBzZXJpYWwgICAgIC8vLy8KKy8vLy8gICAgICAgICBjYXB0dXJlIHRoZSBzZG8gdG8gcmVnX3JkYXRhIGZvciAzMiBjeWNsZXMgYW5kICAgICAgIC8vLy8KKy8vLy8gICAgICAgICBhc3NlcnRzIFJlZyBBY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4wIC0gMjB0aCBPY3QgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgSW5pdGlhbCBpbnRlZ3JhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbW9kdWxlIHNlcl9pbmZfMzJiCisgICAgICAgKAorCisgICAgLy8gTWFzdGVyIFBvcnQKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgcnN0X24gICAgICAgLCAgLy8gUmVndWxhciBSZXNldCBzaWduYWwKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgY2xrICAgICAgICAgLCAgLy8gU3lzdGVtIGNsb2NrCisgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgIHJlZ193ciAgICAgICwgIC8vIFdyaXRlIFJlcXVlc3QKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgcmVnX3JkICAgICAgLCAgLy8gUmVhZCBSZXF1ZXN0CisgICAgICAgaW5wdXQgICBsb2dpYyBbMzE6MF0gICAgICAgIHJlZ193ZGF0YSAgICwgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgb3V0cHV0ICBsb2dpYyBbMzE6MF0gICAgICAgIHJlZ19yZGF0YSAgICwgIC8vIGRhdGEgaW5wdXQKKyAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgcmVnX2FjayAgICAgLCAgLy8gYWNrbm93bGVnZW1lbnQKKworICAgIC8vIFNsYXZlIFBvcnQKKyAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgc2RpICAgICAgICAgLCAgLy8gU2VyaWFsIFNESQorICAgICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICBzaGlmdCAgICAgICAsICAvLyBTaGlmdCBTaWduYWwKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgc2RvICAgICAgICAgICAgLy8gU2VyaWFsIFNETworCisgICAgKTsKKworCisgICAgcGFyYW1ldGVyIElETEUgPSAxJ2IwOworICAgIHBhcmFtZXRlciBTSElGVF9EQVRBID0gMSdiMTsKKworICAgIGxvZ2ljICAgICAgICBzdGF0ZTsKKyAgICBsb2dpYyBbNTowXSAgYml0X2NudDsKKyAgICBsb2dpYyBbMzE6MF0gc2hpZnRfZGF0YTsKKworCithbHdheXNAKG5lZ2VkZ2UgcnN0X24gb3IgcG9zZWRnZSBjbGspCitiZWdpbgorICAgaWYocnN0X24gPT0gMCkgYmVnaW4KKyAgICAgIHN0YXRlICAgPD0gSURMRTsKKyAgICAgIHJlZ19yZGF0YSA8PSAnaDA7CisgICAgICByZWdfYWNrIDw9IDEnYjA7CisgICAgICBzZGkgICAgIDw9IDEnYjA7CisgICAgICBiaXRfY250IDw9IDYnaDA7CisgICAgICBzaGlmdCAgIDw9ICdiMDsKKyAgICAgIHNoaWZ0X2RhdGEgPD0gMzInaDA7CisgICBlbmQgZWxzZSBiZWdpbgorICAgICAgIGNhc2Uoc3RhdGUpCisgICAgICAgSURMRTogYmVnaW4KKyAgICAgICAgICAgICAgICByZWdfYWNrIDw9IDEnYjA7CisgICAgICAgICAgICAgICAgYml0X2NudCAgICA8PSA2J2gwOworCQlpZihyZWdfd3IpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgc2hpZnQgICAgICA8PSAnYjE7CisJICAgICAgICAgICBzaGlmdF9kYXRhIDw9IHJlZ193ZGF0YTsKKwkJICAgc3RhdGUgICAgICA8PSBTSElGVF9EQVRBOworICAgICAgICAgICAgICAgIGVuZCBlbHNlIGlmKHJlZ19yZCkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICBzaGlmdCAgICAgIDw9ICdiMTsKKwkgICAgICAgICAgIHNoaWZ0X2RhdGEgPD0gJ2gwOworCSAgICAgICAgICAgc3RhdGUgICAgICA8PSBTSElGVF9EQVRBOworCSAgICAgICAgZW5kCisJICAgICBlbmQKKyAgICAgICAgU0hJRlRfREFUQTogYmVnaW4gCisJCXNoaWZ0X2RhdGEgPD0gezEnYjAsc2hpZnRfZGF0YVszMToxXX07CisJCXJlZ19yZGF0YSAgPD0ge3NkbyxyZWdfcmRhdGFbMzE6MV19OworCSAgICAgICAgc2RpICAgICAgICA8PSBzaGlmdF9kYXRhWzBdOworICAgICAgICAgICAgICAJaWYoYml0X2NudCA8IDMxKSBiZWdpbgorCQkgICAgYml0X2NudCAgICA8PSBiaXRfY250ICsxOworCSAgICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgcmVnX2FjayA8PSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBzaGlmdCAgIDw9ICdiMDsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgICA8PSBJRExFOworCSAgICAgICAgZW5kCisJICAgICBlbmQKKyAgICAgICBlbmRjYXNlCisgICBlbmQKK2VuZAorCisKKworCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL2xpYi9zZXJfc2hpZnQuc3YgYi92ZXJpbG9nL3J0bC9saWIvc2VyX3NoaWZ0LnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZWY5ZGMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9saWIvc2VyX3NoaWZ0LnN2CkBAIC0wLDAgKzEsNzYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgc2VyX3NoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIG1iaXN0X2N0cmwgY29yZXMgcHJvamVjdCAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEvcmlzY2R1bmlvLmdpdCAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgIFRoaXMgYmxvY2sgbWFuYWdlcyB0aGUgcGFyYWxsZWwgdG8gc2VyaWFsIGNvbnZlcnNpb24gICAgICAgLy8vLworLy8vLyAgIFRoaXMgYmxvY2sgdXNlZnVsbCBmb3IgQmlzdCBTREkvU0RPIGFjY2VzcyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgIGFzc2VydHMgUmVnIEFjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjAgLSAxNnRoIERlYyAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBJbml0aWFsIGludGVncmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCittb2R1bGUgc2VyX3NoaWZ0CisgICAgICMocGFyYW1ldGVyIFdEID0gMzIpCisgICAgICAgKAorCisgICAgLy8gTWFzdGVyIFBvcnQKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgcnN0X24gICAgICAgLCAgLy8gUmVndWxhciBSZXNldCBzaWduYWwKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgY2xrICAgICAgICAgLCAgLy8gU3lzdGVtIGNsb2NrCisgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgIGxvYWQgICAgICAgICwgIC8vIGxvYWQgcmVxdWVzdAorICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICBzaGlmdCAgICAgICAsICAvLyBzaGlmdAorICAgICAgIGlucHV0ICAgbG9naWMgW1dELTE6MF0gICAgICBsb2FkX2RhdGEgICAsICAvLyBsb2FkIGRhdGEKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgc2RpICAgICAgICAgLCAgLy8gc2RpCisgICAgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgIHNkbyAgICAgICAgICAgIC8vIHNkbworCisKKyAgICApOworCitsb2dpYyBbV0QtMTowXSBzaGlmdF9yZWc7CisKK2Fsd2F5c0AobmVnZWRnZSByc3RfbiBvciBwb3NlZGdlIGNsaykKK2JlZ2luCisgICBpZihyc3RfbiA9PSAwKSBiZWdpbgorICAgICAgc2hpZnRfcmVnICAgPD0gJ2gwOworICAgZW5kIGVsc2UgaWYobG9hZCkgYmVnaW4KKyAgICAgIHNoaWZ0X3JlZyAgIDw9IGxvYWRfZGF0YTsKKyAgIGVuZCBlbHNlIGlmKHNoaWZ0KSBiZWdpbgorICAgICAgc2hpZnRfcmVnICAgPD0ge3NkaSxzaGlmdF9yZWdbV0QtMToxXX07CisgICBlbmQKK2VuZAorCithc3NpZ24gc2RvID0gc2hpZnRfcmVnWzBdOworCisKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9saWIvc3luY19maWZvLnN2IGIvdmVyaWxvZy9ydGwvbGliL3N5bmNfZmlmby5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjRhMjZjCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbGliL3N5bmNfZmlmby5zdgpAQCAtMCwwICsxLDE2NyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgc2RyYW0gY29udHJvbGxlciBwcm9qZWN0ICAgICAgICAgICAKKyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3Nkcl9jdHJsLyAgICAgICAgICAgICAgICAgICAgCisgIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBEZXNjcmlwdGlvbjogU1lOQyBGSUZPIAorICBQYXJhbWV0ZXJzOgorICAgICAgVyA6IFdpZHRoIChpbnRlZ2VyKQorICAgICAgRCA6IERlcHRoIChpbnRlZ2VyLCBwb3dlciBvZiAyLCA0IHRvIDI1NikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIEF1dGhvcihzKTogIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAKKyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgCisgcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIAorIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIAorIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAKKyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgCisgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIAorbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgCisgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIAorIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAKKyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgCisgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgCisgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIAorIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK21vZHVsZSBzeW5jX2ZpZm8gKGNsaywKKwkgICAgICAgICAgcmVzZXRfbiwKKwkJICB3cl9lbiwKKwkJICB3cl9kYXRhLAorCQkgIGZ1bGwsCisJCSAgZW1wdHksCisJCSAgcmRfZW4sCisJCSAgcmRfZGF0YSk7CisKKyAgIHBhcmFtZXRlciBXID0gODsKKyAgIHBhcmFtZXRlciBEID0gNDsKKworICAgcGFyYW1ldGVyIEFXID0gKEQgPT0gMikgICA/IDEgOgorCSAgICAgICAgICAoRCA9PSA0KSAgID8gMiA6CisJCSAgKEQgPT0gOCkgICA/IDMgOgorCQkgIChEID09IDE2KSAgPyA0IDoKKwkJICAoRCA9PSAzMikgID8gNSA6CisJCSAgKEQgPT0gNjQpICA/IDYgOgorCQkgIChEID09IDEyOCkgPyA3IDoKKwkJICAoRCA9PSAyNTYpID8gOCA6IDA7CisgICAKKyAgIG91dHB1dCBbVy0xIDogMF0gIHJkX2RhdGE7CisgICBpbnB1dCBbVy0xIDogMF0gICB3cl9kYXRhOworICAgaW5wdXQgCSAgICAgY2xrLCByZXNldF9uLCB3cl9lbiwgcmRfZW47CisgICBvdXRwdXQgCSAgICAgZnVsbCwgZW1wdHk7CisKKyAgIC8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYKKworICAgaW5pdGlhbCBiZWdpbgorICAgICAgaWYgKEFXID09IDApIGJlZ2luCisJICRkaXNwbGF5ICgiJW0gOiBFUlJPUiEhISBGaWZvIGRlcHRoICVkIG5vdCBpbiByYW5nZSA0IHRvIDI1NiIsIEQpOworICAgICAgZW5kIC8vIGlmIChBVyA9PSAwKQorICAgZW5kIC8vIGluaXRpYWwgYmVnaW4KKworICAgLy8gc3lub3BzeXMgdHJhbnNsYXRlX29uCisKKworICAgcmVnIFtXLTEgOiAwXSAgICBtZW1bRC0xIDogMF07CisgICByZWcgW0FXLTEgOiAwXSAgIHJkX3B0ciwgd3JfcHRyOworICAgcmVnCSAJICAgIGZ1bGwsIGVtcHR5OworCisgICB3aXJlIFtXLTEgOiAwXSAgIHJkX2RhdGE7CisgICAKKyAgIGFsd2F5cyBAIChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJlc2V0X24pIAorICAgICAgaWYgKHJlc2V0X24gPT0gMSdiMCkgYmVnaW4KKyAgICAgICAgIHdyX3B0ciA8PSB7QVd7MSdiMH19IDsKKyAgICAgIGVuZAorICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgaWYgKHdyX2VuICYgIWZ1bGwpIGJlZ2luCisgICAgICAgICAgICB3cl9wdHIgPD0gd3JfcHRyICsgMSdiMSA7CisgICAgICAgICBlbmQKKyAgICAgIGVuZAorCisgICBhbHdheXMgQCAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByZXNldF9uKSAKKyAgICAgIGlmIChyZXNldF9uID09IDEnYjApIGJlZ2luCisgICAgICAgICByZF9wdHIgPD0ge0FXezEnYjB9fSA7CisgICAgICBlbmQKKyAgICAgIGVsc2UgYmVnaW4KKyAgICAgICAgIGlmIChyZF9lbiAmICFlbXB0eSkgYmVnaW4KKyAgICAgICAgICAgIHJkX3B0ciA8PSByZF9wdHIgKyAxJ2IxIDsKKyAgICAgICAgIGVuZAorICAgICAgZW5kCisKKworICAgYWx3YXlzIEAgKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcmVzZXRfbikgCisgICAgICBpZiAocmVzZXRfbiA9PSAxJ2IwKSBiZWdpbgorICAgICAgICAgZW1wdHkgPD0gMSdiMSA7CisgICAgICBlbmQKKyAgICAgIGVsc2UgYmVnaW4KKyAgICAgICAgIGVtcHR5IDw9ICgoKHdyX3B0ciAtIHJkX3B0cikgPT0ge3soQVctMSl7MSdiMH19LCAxJ2IxfSkgJiByZF9lbiAmIH53cl9lbikgPyAxJ2IxIDogCisgICAgICAgICAgICAgICAgICAgKCh3cl9wdHIgPT0gcmRfcHRyKSAmIH5yZF9lbiAmIHdyX2VuKSA/IDEnYjAgOiBlbXB0eSA7CisgICAgICBlbmQKKworICAgYWx3YXlzIEAgKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcmVzZXRfbikgCisgICAgICBpZiAocmVzZXRfbiA9PSAxJ2IwKSBiZWdpbgorICAgICAgICAgZnVsbCA8PSAxJ2IwIDsKKyAgICAgIGVuZAorICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgZnVsbCA8PSAoKCh3cl9wdHIgLSByZF9wdHIpID09IHt7KEFXLTEpezEnYjF9fSwgMSdiMH0pICYgfnJkX2VuICYgd3JfZW4pID8gMSdiMSA6IAorICAgICAgICAgICAgICAgICAoKCh3cl9wdHIgLSByZF9wdHIpID09IHtBV3sxJ2IxfX0pICYgcmRfZW4gJiB+d3JfZW4pID8gMSdiMCA6IGZ1bGwgOworICAgICAgZW5kCisKKyAgIGFsd2F5cyBAIChwb3NlZGdlIGNsaykgCisgICAgICBpZiAod3JfZW4pCisJIG1lbVt3cl9wdHJdIDw9IHdyX2RhdGE7CisKK2Fzc2lnbiAgcmRfZGF0YSA9IG1lbVtyZF9wdHJdOworCisKKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYKKyAgIGFsd2F5cyBAKHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgICAgaWYgKHdyX2VuICYmIGZ1bGwpIGJlZ2luCisgICAgICAgICAkZGlzcGxheSgiJW0gOiBFcnJvciEgc2ZpZm8gb3ZlcmZsb3chIik7CisgICAgICBlbmQKKyAgIGVuZAorCisgICBhbHdheXMgQChwb3NlZGdlIGNsaykgYmVnaW4KKyAgICAgIGlmIChyZF9lbiAmJiBlbXB0eSkgYmVnaW4KKyAgICAgICAgICRkaXNwbGF5KCIlbSA6IGVycm9yISBzZmlmbyB1bmRlcmZsb3chIik7CisgICAgICBlbmQKKyAgIGVuZAorCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2VuZG1vZHVsZQorCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL2xpYi9zeW5jX2ZpZm8yLnN2IGIvdmVyaWxvZy9ydGwvbGliL3N5bmNfZmlmbzIuc3YKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjcxYWQzMAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2xpYi9zeW5jX2ZpZm8yLnN2CkBAIC0wLDAgKzEsMjIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIFNZTkMgRklGTyB3aXRoIGVtcHR5LGFlbXB0eSxmdWxsLGFmdWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgRGVzY3JpcHRpb246IFNZTkMgRklGTyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIEF1dGhvcihzKTogIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAKKyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgCisgcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIAorIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIAorIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAKKyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgCisgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIAorbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgCisgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIAorIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAKKyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgCisgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgCisgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIAorIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIHN5bmMgRklGTworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy9gdGltZXNjYWxlICAxbnMvMXBzCisKK21vZHVsZSBzeW5jX2ZpZm8yIChjbGssCisgICAgICAgICAgICAgICAgICAgcmVzZXRfbiwKKyAgICAgICAgICAgICAgICAgICB3cl9lbiwKKyAgICAgICAgICAgICAgICAgICB3cl9kYXRhLAorICAgICAgICAgICAgICAgICAgIGZ1bGwsICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICBhZnVsbCwgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIHJkX2VuLAorICAgICAgICAgICAgICAgICAgIGVtcHR5LCAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICBhZW1wdHksICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIHJkX2RhdGEpOworCisgICBwYXJhbWV0ZXIgVyA9IDQnZDg7CisgICBwYXJhbWV0ZXIgRFAgPSAzJ2Q0OworICAgcGFyYW1ldGVyIFdSX0ZBU1QgPSAxJ2IxOworICAgcGFyYW1ldGVyIFJEX0ZBU1QgPSAxJ2IxOworICAgcGFyYW1ldGVyIEZVTExfRFAgPSBEUDsKKyAgIHBhcmFtZXRlciBFTVBUWV9EUCA9IDEnYjA7CisKKyAgIHBhcmFtZXRlciBBVyA9IChEUCA9PSAyKSAgID8gMSA6IAorCQkgIChEUCA9PSA0KSAgID8gMiA6CisgICAgICAgICAgICAgICAgICAoRFAgPT0gOCkgICA/IDMgOgorICAgICAgICAgICAgICAgICAgKERQID09IDE2KSAgPyA0IDoKKyAgICAgICAgICAgICAgICAgIChEUCA9PSAzMikgID8gNSA6CisgICAgICAgICAgICAgICAgICAoRFAgPT0gNjQpICA/IDYgOgorICAgICAgICAgICAgICAgICAgKERQID09IDEyOCkgPyA3IDoKKyAgICAgICAgICAgICAgICAgIChEUCA9PSAyNTYpID8gOCA6IDA7CisKKyAgIG91dHB1dCBbVy0xIDogMF0gIHJkX2RhdGE7CisgICBpbnB1dCBbVy0xIDogMF0gICB3cl9kYXRhOworICAgaW5wdXQgICAgICAgICAgICAgY2xrLCByZXNldF9uLCB3cl9lbiwgcmRfZW47CisgICBvdXRwdXQgICAgICAgICAgICBmdWxsLCBlbXB0eTsKKyAgIG91dHB1dCAgICAgICAgICAgIGFmdWxsLCBhZW1wdHk7ICAgICAgIC8vIGFib3V0IGZ1bGwgYW5kIGFib3V0IHRvIGVtcHR5CisKKworICAgLy8gc3lub3BzeXMgdHJhbnNsYXRlX29mZgorCisgICBpbml0aWFsIGJlZ2luCisgICAgICBpZiAoQVcgPT0gMCkgYmVnaW4KKyAgICAgICAgICRkaXNwbGF5ICgiJW0gOiBFUlJPUiEhISBGaWZvIGRlcHRoICVkIG5vdCBpbiByYW5nZSAyIHRvIDI1NiIsIERQKTsKKyAgICAgIGVuZCAvLyBpZiAoQVcgPT0gMCkKKyAgIGVuZCAvLyBpbml0aWFsIGJlZ2luCisKKyAgIC8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vbgorCisgICByZWcgW1ctMSA6IDBdICAgIG1lbVtEUC0xIDogMF07CisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKiB3cml0ZSBzaWRlICoqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgIHJlZyBbQVc6MF0gd3JfcHRyOworICAgcmVnICAgICAgICBmdWxsX3E7CisgICB3aXJlICAgICAgIGZ1bGxfYzsKKyAgIHdpcmUgICAgICAgYWZ1bGxfYzsKKyAgIHdpcmUgW0FXOjBdd3JfcHRyX2luYyA9IHdyX3B0ciArIDEnYjE7CisgICB3aXJlIFtBVzowXXdyX2NudCA9IGdldF9jbnQod3JfcHRyLCByZF9wdHIpOworCisgICBhc3NpZ24gZnVsbF9jICA9ICh3cl9jbnQgPT0gRlVMTF9EUCkgPyAxJ2IxIDogMSdiMDsKKyAgIGFzc2lnbiBhZnVsbF9jID0gKHdyX2NudCA9PSBGVUxMX0RQLTEpID8gMSdiMSA6IDEnYjA7CisKKworICAgYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByZXNldF9uKSBiZWdpbgorCWlmICghcmVzZXRfbikgYmVnaW4KKwkJd3JfcHRyIDw9IDA7CisJCWZ1bGxfcSA8PSAwOwkKKwllbmQKKwllbHNlIGlmICh3cl9lbikgYmVnaW4KKwkJd3JfcHRyIDw9IHdyX3B0cl9pbmM7CisJCWlmICh3cl9jbnQgPT0gKEZVTExfRFAtMSkpIGJlZ2luCisJCQlmdWxsX3EgPD0gMSdiMTsKKwkJZW5kCisJZW5kCisJZWxzZSBiZWdpbgorCSAgICAJaWYgKGZ1bGxfcSAmJiAod3JfY250PEZVTExfRFApKSBiZWdpbgorCQkJZnVsbF9xIDw9IDEnYjA7CisJICAgICAJZW5kCisJZW5kCisgICAgZW5kCisKKyAgICBhc3NpZ24gZnVsbCAgPSAoV1JfRkFTVCA9PSAxKSA/IGZ1bGxfYyA6IGZ1bGxfcTsKKyAgICBhc3NpZ24gYWZ1bGwgPSBhZnVsbF9jOworCisgICAgYWx3YXlzIEAocG9zZWRnZSBjbGspIGJlZ2luCisJaWYgKHdyX2VuKSBiZWdpbgorCQltZW1bd3JfcHRyW0FXLTE6MF1dIDw9IHdyX2RhdGE7CisJZW5kCisgICAgZW5kCisKKworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqIHJlYWQgc2lkZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgIHJlZyBbQVc6MF0gcmRfcHRyOworICAgcmVnIGVtcHR5X3E7CisgICB3aXJlIGVtcHR5X2M7CisgICB3aXJlIGFlbXB0eV9jOworICAgd2lyZSBbQVc6MF0gcmRfcHRyX2luYyA9IHJkX3B0ciArIDEnYjE7CisgICB3aXJlIFtBVzowXSByZF9jbnQgPSBnZXRfY250KHdyX3B0ciwgcmRfcHRyKTsKKyAKKyAgIGFzc2lnbiBlbXB0eV9jICA9IChyZF9jbnQgPT0gMCkgPyAxJ2IxIDogMSdiMDsKKyAgIGFzc2lnbiBhZW1wdHlfYyA9IChyZF9jbnQgPT0gMSkgPyAxJ2IxIDogMSdiMDsKKworICAgYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByZXNldF9uKSBiZWdpbgorICAgICAgaWYgKCFyZXNldF9uKSBiZWdpbgorICAgICAgICAgcmRfcHRyIDw9IDA7CisJIGVtcHR5X3EgPD0gMSdiMTsKKyAgICAgIGVuZAorICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgaWYgKHJkX2VuKSBiZWdpbgorICAgICAgICAgICAgcmRfcHRyIDw9IHJkX3B0cl9pbmM7CisgICAgICAgICAgICBpZiAocmRfY250PT0oRU1QVFlfRFArMSkpIGJlZ2luCisgICAgICAgICAgICAgICBlbXB0eV9xIDw9IDEnYjE7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgIGVuZAorICAgICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgICAgaWYgKGVtcHR5X3EgJiYgKHJkX2NudCE9RU1QVFlfRFApKSBiZWdpbgorCSAgICAgIGVtcHR5X3EgPD0gMSdiMDsKKwkgICAgZW5kCisgICAgICAgICBlbmQKKyAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGFzc2lnbiBlbXB0eSAgPSAoUkRfRkFTVCA9PSAxKSA/IGVtcHR5X2MgOiBlbXB0eV9xOworICAgIGFzc2lnbiBhZW1wdHkgPSBhZW1wdHlfYzsKKworICAgIHJlZyBbVy0xIDogMF0gIHJkX2RhdGFfcTsKKworICAgd2lyZSBbVy0xIDogMF0gcmRfZGF0YV9jID0gbWVtW3JkX3B0cltBVy0xOjBdXTsKKworCisgICBhbHdheXMgQChwb3NlZGdlIGNsaykgYmVnaW4KKwlyZF9kYXRhX3EgPD0gcmRfZGF0YV9jOworICAgZW5kCisgICBhc3NpZ24gcmRfZGF0YSAgPSAoUkRfRkFTVCA9PSAxKSA/IHJkX2RhdGFfYyA6IHJkX2RhdGFfcTsKKworCisJCisJCQkKK2Z1bmN0aW9uIFtBVzowXSBnZXRfY250OworaW5wdXQgW0FXOjBdIHdyX3B0ciwgcmRfcHRyOworYmVnaW4KKwlpZiAod3JfcHRyID49IHJkX3B0cikgYmVnaW4KKwkJZ2V0X2NudCA9ICh3cl9wdHIgLSByZF9wdHIpOwkKKwllbmQKKwllbHNlIGJlZ2luCisJCWdldF9jbnQgPSBEUCoyIC0gKHJkX3B0ciAtIHdyX3B0cik7CisJZW5kCitlbmQKK2VuZGZ1bmN0aW9uCisKKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgaWYgKHdyX2VuICYmIGZ1bGwpIGJlZ2luCisgICAgICAkZGlzcGxheSgkdGltZSwgIiVtIEVycm9yISBhZmlmbyBvdmVyZmxvdyEiKTsKKyAgICAgICRzdG9wOworICAgZW5kCitlbmQKKworYWx3YXlzIEAocG9zZWRnZSBjbGspIGJlZ2luCisgICBpZiAocmRfZW4gJiYgZW1wdHkpIGJlZ2luCisgICAgICAkZGlzcGxheSgkdGltZSwgIiVtIGVycm9yISBhZmlmbyB1bmRlcmZsb3chIik7CisgICAgICAkc3RvcDsKKyAgIGVuZAorZW5kCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb24KKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9saWIvc3luY193YmIuc3YgYi92ZXJpbG9nL3J0bC9saWIvc3luY193YmIuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJjYzc5NAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2xpYi9zeW5jX3diYi5zdgpAQCAtMCwwICsxLDMzNiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBzeW5jIFdpc2hib25lIEludGVyZmFjZSBpQnVyc3QgRW5hYmxlIGFuZCBsYWNrICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICBUaGlzIGJsb2NrIGRvZXMgYXN5bmMgV2lzaGJvbmUgZnJvbSBvbmUgY2xvY2sgdG8gb3RoZXIgIC8vLy8KKy8vLy8gICAgICBjbG9jayBkb21haW4KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMjV0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgaW5pdGlhbCB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4yIC0gMjh0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgcmVkdWNlZCB0aGUgcmVzcG9uc2UgRklGTyBwYXRoIGRlcHRoIHRvIDIgYXMgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgcmV0dXJuIHBhdGggdXNlZCBieSBvbmx5IHJlYWQgbG9naWMgYW5kIHJlYWQgaXMgICAgIC8vLy8KKy8vLy8gICAgICAgICAgYmxvY2tpbmcgcmVxdWVzdCBhbmQgZXhwZWN0IG9ubHkgb25lIGxvY2F0aW9uIHdpbGwgIC8vLy8KKy8vLy8gICAgICAgICAgYmUgdXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4zIC0gMjAgSmFuIDIwMjIsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgYWRkZWQgd2lzaGJvbmUgYnVyc3QgbW9kZS4gQWRkaXRpb25hbCBzaWduYWwgYWRkZWQgIC8vLy8KKy8vLy8gICAgICAgICAgIEEuICpibCAgLSAxMCBCaXQgd29yZCBCdXJzdCBjb3VudCwgMSAtIDEgRFcoMzIgYml0KS8vLy8KKy8vLy8gICAgICAgICAgIEIuICpsYWNrIC0gTGFzdCBCdXJzdCBhY2sgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8gCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK21vZHVsZSBzeW5jX3diYiAKKyAgICAgIyhwYXJhbWV0ZXIgQVcgID0gMzIsCisgICAgICAgcGFyYW1ldGVyIEJXICA9IDQsCisgICAgICAgcGFyYW1ldGVyIEJMICA9IDEwLAorICAgICAgIHBhcmFtZXRlciBEVyAgPSAzMikKKyAgICAgICAoCisKKyAgICAvLyBNYXN0ZXIgUG9ydAorICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICByc3RfbiAgICAgICAsICAvLyBSZWd1bGFyIFJlc2V0IHNpZ25hbAorICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICBjbGtfaSAgICAgICAsICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgd2JtX2N5Y19pICAgLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgd2JtX3N0Yl9pICAgLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICBpbnB1dCAgIGxvZ2ljIFtBVy0xOjBdICAgICAgd2JtX2Fkcl9pICAgLCAgLy8gYWRkcmVzcworICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICB3Ym1fd2VfaSAgICAsICAvLyB3cml0ZQorICAgICAgIGlucHV0ICAgbG9naWMgW0RXLTE6MF0gICAgICB3Ym1fZGF0X2kgICAsICAvLyBkYXRhIG91dHB1dAorICAgICAgIGlucHV0ICAgbG9naWMgW0JXLTE6MF0gICAgICB3Ym1fc2VsX2kgICAsICAvLyBieXRlIGVuYWJsZQorICAgICAgIGlucHV0ICAgbG9naWMgWzM6MF0gICAgICAgICB3Ym1fdGlkX2kgICAsCisgICAgICAgaW5wdXQgICBsb2dpYyBbQkwtMTowXSAgICAgIHdibV9ibF9pICAgICwgIC8vIEJ1cnN0IENvdW50CisgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgIHdibV9icnlfaSAgICwgIC8vIEJ1cnN0IFJlYWR5CisgICAgICAgb3V0cHV0ICBsb2dpYyBbRFctMTowXSAgICAgIHdibV9kYXRfbyAgICwgIC8vIGRhdGEgaW5wdXQKKyAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgd2JtX2Fja19vICAgLCAgLy8gYWNrbm93bGVnZW1lbnQKKyAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgd2JtX2xhY2tfbyAgLCAgLy8gTGFzdCBCdXJzdCBhY2Nlc3MKKyAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgd2JtX2Vycl9vICAgLCAgLy8gZXJyb3IKKworICAgIC8vIFNsYXZlIFBvcnQKKyAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgd2JzX2N5Y19vICAgLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgd2JzX3N0Yl9vICAgLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICBvdXRwdXQgIGxvZ2ljIFtBVy0xOjBdICAgICAgd2JzX2Fkcl9vICAgLCAgLy8gYWRkcmVzcworICAgICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICB3YnNfd2VfbyAgICAsICAvLyB3cml0ZQorICAgICAgIG91dHB1dCAgbG9naWMgW0RXLTE6MF0gICAgICB3YnNfZGF0X28gICAsICAvLyBkYXRhIG91dHB1dAorICAgICAgIG91dHB1dCAgbG9naWMgW0JXLTE6MF0gICAgICB3YnNfc2VsX28gICAsICAvLyBieXRlIGVuYWJsZQorICAgICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICB3YnNfdGlkX28gICAsCisgICAgICAgb3V0cHV0ICBsb2dpYyBbQkwtMTowXSAgICAgIHdic19ibF9vICAgICwgIC8vIEJ1cnN0IENvdW50CisgICAgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgIHdic19icnlfbyAgICwgIC8vIEJ1c3J0IFdEYXRhIEF2aWFsYmxlIE9yIFJlYWR5IFRvIGFjY2VwdCBSZGF0YSAgCisgICAgICAgaW5wdXQgICBsb2dpYyBbRFctMTowXSAgICAgIHdic19kYXRfaSAgICwgIC8vIGRhdGEgaW5wdXQKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgd2JzX2Fja19pICAgLCAgLy8gYWNrbm93bGVnZW1lbnQKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgd2JzX2xhY2tfaSAgLCAgLy8gTGFzdCBBY2sKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgd2JzX2Vycl9pICAgICAgLy8gZXJyb3IKKworICAgICk7CisKKworCitwYXJhbWV0ZXIgQ0ZXID0gQVcrRFcrQlcrQkwrNCsxIDsgLy8gQ09NTUFORCBGSUZPIFdJRFRICitwYXJhbWV0ZXIgUkZXID0gRFcrMSsxIDsgICAgICAgIC8vIFJFU1BPTlNFIEZJRk8gV0lEVEgKKworcGFyYW1ldGVyIElETEUgICAgICAgID0gMidiMDA7CitwYXJhbWV0ZXIgV1JJVEVfREFUQSAgPSAyJ2IwMTsKK3BhcmFtZXRlciBSRUFEX0RBVEEgICA9IDInYjEwOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIE1hc3RlciBJbnRlcmZhY2UKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvZ2ljICAgICAgICAgICBtX2NtZF93cl9lbiAgICAgICA7Citsb2dpYyBbQ0ZXLTE6MF0gbV9jbWRfd3JfZGF0YSAgICAgOworbG9naWMgICAgICAgICAgIG1fY21kX3dyX2Z1bGwgICAgIDsKK2xvZ2ljICAgICAgICAgICBtX2NtZF93cl9hZnVsbCAgICA7CisKK2xvZ2ljICAgICAgICAgICBtX3Jlc3BfcmRfZW1wdHkgICAgOworbG9naWMgICAgICAgICAgIG1fcmVzcF9yZF9hZW1wdHkgICA7Citsb2dpYyAgICAgICAgICAgbV9yZXNwX3JkX2VuICAgICAgIDsKK2xvZ2ljIFtSRlctMTowXSBtX3Jlc3BfcmRfZGF0YSAgICAgOworbG9naWMgW0JMLTE6MF0gIG1fYmxfY250ICAgICAgICAgICA7Citsb2dpYyBbMTowXSAgICAgbV9zdGF0ZSAgICAgICAgICAgIDsKKworLy8gTWFzdGVyIFdyaXRlIEludGVyZmFjZQorCisKKworYXNzaWduIG1fY21kX3dyX2RhdGEgPSB7d2JtX2Fkcl9pLHdibV93ZV9pLHdibV9kYXRfaSx3Ym1fc2VsX2ksd2JtX3RpZF9pLHdibV9ibF9pfTsKKworYXNzaWduIHdibV9kYXRfbyA9IG1fcmVzcF9yZF9kYXRhW0RXLTE6MF07Cithc3NpZ24gd2JtX2Vycl9vID0gJ2IwOworCithbHdheXNAKG5lZ2VkZ2UgcnN0X24gb3IgcG9zZWRnZSBjbGtfaSkKK2JlZ2luCisgICBpZihyc3RfbiA9PSAwKSBiZWdpbgorICAgICAgICBtX2NtZF93cl9lbiAgICAgICAgPD0gJ2IwOworICAgICAgICBtX3Jlc3BfcmRfZW4gICAgICAgPD0gJ2IwOworICAgICAgICBtX3N0YXRlICAgICAgICAgICAgPD0gJ2gwOworICAgICAgICBtX2JsX2NudCAgICAgICAgICAgPD0gJ2gwOworICAgICAgICB3Ym1fYWNrX28gICAgICAgICAgPD0gJ2IwOworICAgICAgICB3Ym1fbGFja19vICAgICAgICAgPD0gJ2IwOworICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgIGNhc2UobV9zdGF0ZSkKKyAgICAgIElETEU6ICBiZWdpbgorCSAvLyBSZWFkIERBVEEKKwkgLy8gTWFrZSBzdXJlIHRoYXQgRklGTyBpcyBub3Qgb3ZlcmZsb3cgYW5kIHRoZXJlIGlzIG5vIHByZXZpb3VzCisJIC8vIHBlbmRpbmcgd3JpdGUgKyBmaWZvIGlzIGFib3V0IHRvIGZ1bGwKKyAgICAgICAgIGlmKHdibV9zdGJfaSAmJiAhd2JtX3dlX2kgJiYgd2JtX2JyeV9pICYmICFtX2NtZF93cl9mdWxsICYmICEobV9jbWRfd3JfYWZ1bGwgJiYgbV9jbWRfd3JfZW4pICAmJiAhd2JtX2xhY2tfbykgYmVnaW4KKyAgICAgICAgICAgbV9ibF9jbnQgICAgICAgICA8PSB3Ym1fYmxfaTsKKyAgICAgICAgICAgbV9jbWRfd3JfZW4gICAgICA8PSAnYjE7CisgICAgICAgICAgIG1fc3RhdGUgICAgICAgICAgPD0gUkVBRF9EQVRBOworICAgICAgICAgZW5kIGVsc2UgaWYod2JtX3N0Yl9pICYmIHdibV93ZV9pICYmIHdibV9icnlfaSAmJiAhbV9jbWRfd3JfZnVsbCAmJiAhKG1fY21kX3dyX2FmdWxsICYmIG1fY21kX3dyX2VuKSAmJiAhd2JtX2xhY2tfbykgYmVnaW4KKyAgICAgICAgICAgIHdibV9hY2tfbyAgICAgICA8PSAnYjE7CisgICAgICAgICAgICBtX2NtZF93cl9lbiAgICAgPD0gJ2IxOworICAgICAgICAgICAgbV9ibF9jbnQgICAgICAgIDw9IHdibV9ibF9pLTE7CisgICAgICAgICAgICBpZih3Ym1fYmxfaSA9PSAnaDEpIGJlZ2luCisgICAgICAgICAgICAgICB3Ym1fbGFja19vICAgPD0gJ2IxOworICAgICAgICAgICAgICAgbV9zdGF0ZSAgICAgIDw9IElETEU7CisgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgbV9ibF9jbnQgICAgIDw9IHdibV9ibF9pLTE7CisgICAgICAgICAgICAgICBtX3N0YXRlICAgICAgPD0gV1JJVEVfREFUQTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgICAgIG1fcmVzcF9yZF9lbiAgICA8PSAnYjA7CisgICAgICAgICAgICBtX2NtZF93cl9lbiAgICAgPD0gJ2IwOworICAgICAgICAgICAgd2JtX2Fja19vICAgICAgIDw9ICdiMDsKKyAgICAgICAgICAgIHdibV9sYWNrX28gICAgICA8PSAnYjA7CisgICAgICAgICBlbmQKKyAgICAgIGVuZAorCisgICAgICAvLyBXcml0ZSBuZXh0IFRyYW5zYWN0aW9uCisgICAgICBXUklURV9EQVRBOiBiZWdpbgorICAgICAgICAgaWYobV9jbWRfd3JfZnVsbCAhPSAxICYmICEobV9jbWRfd3JfYWZ1bGwgJiYgbV9jbWRfd3JfZW4pICYmIHdibV9icnlfaSkgYmVnaW4KKyAgICAgICAgICAgIHdibV9hY2tfbyAgICAgICA8PSAnYjE7CisgICAgICAgICAgICBtX2NtZF93cl9lbiAgICAgPD0gJ2IxOworICAgICAgICAgICAgaWYobV9ibF9jbnQgPT0gMSkgYmVnaW4KKyAgICAgICAgICAgICAgIHdibV9sYWNrX28gICA8PSAnYjE7CisgICAgICAgICAgICAgICBtX3N0YXRlICAgICAgPD0gSURMRTsKKyAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICBtX2JsX2NudCAgICAgICAgPD0gbV9ibF9jbnQtMTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgICAgIG1fY21kX3dyX2VuICAgICA8PSAnYjA7CisgICAgICAgICAgICB3Ym1fYWNrX28gICAgICAgPD0gJ2IwOworICAgICAgICAgICAgd2JtX2xhY2tfbyAgICAgIDw9ICdiMDsKKyAgICAgICAgIGVuZAorICAgICAgZW5kCisKKyAgICAgIC8vIFJlYWQgVHJhbnNhY3Rpb24KKyAgICAgIFJFQURfREFUQTogYmVnaW4KKwkgICAvLyBDaGVjayBCYWNrIHRvIEJhY2sgQWNrIGFuZCBsYXN0IExvY2F0aW9uIGNhc2UKKyAgICAgICAgICAgaWYoKCh3Ym1fYWNrX28gPT0gMCAmJiBtX3Jlc3BfcmRfZW1wdHkgIT0gMSkgfHwKKwkgICAgICAgKHdibV9hY2tfbyA9PSAxICYmIG1fcmVzcF9yZF9hZW1wdHkgIT0gMSkpICYmIHdibV9icnlfaSkgYmVnaW4KKyAgICAgICAgICAgICAgbV9yZXNwX3JkX2VuICAgPD0gJ2IxOworICAgICAgICAgICAgICB3Ym1fYWNrX28gICAgICA8PSAnYjE7CisgICAgICAgICAgICAgIGlmKG1fYmxfY250ID09IDEpIGJlZ2luCisgICAgICAgICAgICAgICAgICB3Ym1fbGFja19vICAgPD0gJ2IxOworICAgICAgICAgICAgICAgICAgbV9zdGF0ZSAgICAgIDw9IElETEU7CisgICAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICAgIG1fYmxfY250ICAgICAgICA8PSBtX2JsX2NudC0xOworCSAgICAgIGVuZAorICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICBtX3Jlc3BfcmRfZW4gICAgPD0gJ2IwOworICAgICAgICAgICAgICBtX2NtZF93cl9lbiAgICAgPD0gJ2IwOworICAgICAgICAgICAgICB3Ym1fYWNrX28gICAgICAgPD0gJ2IwOworICAgICAgICAgICAgICB3Ym1fbGFja19vICAgICAgPD0gJ2IwOworCSAgIGVuZAorICAgICAgZW5kCisgICAgICBlbmRjYXNlCisgICBlbmQKK2VuZAorCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTbGF2ZSBJbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitsb2dpYyBbQ0ZXLTE6MF0gc19jbWRfcmRfZGF0YSAgIDsKK2xvZ2ljIFtDRlctMTowXSBzX2NtZF9yZF9kYXRhX2wgOworbG9naWMgICAgICAgIHNfY21kX3JkX2VtcHR5ICAgICA7Citsb2dpYyAgICAgICAgc19jbWRfcmRfYWVtcHR5ICAgIDsKK2xvZ2ljICAgICAgICBzX2NtZF9yZF9lbiAgICAgICAgOworbG9naWMgICAgICAgIHNfcmVzcF93cl9lbiAgICAgICAgOworbG9naWMgW1JGVy0xOjBdIHNfcmVzcF93cl9kYXRhICAgICAgOworbG9naWMgICAgICAgIHNfcmVzcF93cl9mdWxsICAgICAgOworbG9naWMgICAgICAgIHNfcmVzcF93cl9hZnVsbCAgICAgOworbG9naWMgICAgICAgIHdic19hY2tfZiAgICAgICAgICA7Citsb2dpYyAgICAgICAgd2JzX3N0Yl9sICAgICAgICAgIDsKK2xvZ2ljICAgICAgICB3YnNfYnVyc3QgICAgICAgICAgOworCit3aXJlIHdic19zdGJfcGVkZ2UgPSAod2JzX3N0Yl9sID09IDEnYjApICYmIHdic19zdGJfbzsKKworCithbHdheXNAKG5lZ2VkZ2UgcnN0X24gb3IgcG9zZWRnZSBjbGtfaSkKK2JlZ2luCisgICBpZihyc3RfbiA9PSAwKSBiZWdpbgorICAgICAgd2JzX2Fja19mIDw9IDEnYjA7CisgICAgICB3YnNfc3RiX2wgPD0gMSdiMDsKKyAgICAgIHdic19idXJzdCA8PSAnaDA7CisgICAgICBzX2NtZF9yZF9kYXRhX2wgPD0gJ2gwOworICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgIHdic19hY2tfZiA8PSB3YnNfbGFja19pOworICAgICAgd2JzX3N0Yl9sIDw9IHdic19zdGJfbzsKKyAgICAgIGlmKHNfY21kX3JkX2VuKQorICAgICAgICAgIHNfY21kX3JkX2RhdGFfbCA8PSBzX2NtZF9yZF9kYXRhOworICAgICAgaWYod2JzX3N0Yl9wZWRnZSAmJiB3YnNfYmxfbyA+ICdoMSkKKyAgICAgICAgIHdic19idXJzdCA8PSAxJ2IxOworICAgICAgZWxzZSBpZih3YnNfbGFja19pKQorICAgICAgICAgd2JzX2J1cnN0IDw9IDEnYjA7CisgICBlbmQKK2VuZAorCisKKy8vIFJlYWQgSW50ZXJmYWNlCisKKworYXNzaWduIHt3YnNfYWRyX28sd2JzX3dlX28sd2JzX2RhdF9vLHdic19zZWxfbyx3YnNfdGlkX28sd2JzX2JsX299ID0gKHNfY21kX3JkX2VtcHR5KSA/IHNfY21kX3JkX2RhdGFfbDogIHNfY21kX3JkX2RhdGE7CisvLyBBbGwgdGhlIGRvd25zdHJlYW0gbG9naWMgZXhwZWN0IFN0b2JlIGlzIGdldHRpbmcgZGUtYXNzZXJ0ZWQgCisvLyBhdGxlYXN0IGZvciAxIGN5Y2xlIGFmdGVyIGFjayBpcyBnZW5lcmF0ZWQKK2Fzc2lnbiB3YnNfc3RiX28gPSAod2JzX2J1cnN0KSA/IDEnYjEgOiAoKHdic19hY2tfZikgPyAxJ2IwIDogKHNfY21kX3JkX2VtcHR5KSA/IDEnYjA6IDEnYjEpOworYXNzaWduIHdic19jeWNfbyA9ICh3YnNfYnVyc3QpID8gMSdiMSA6ICgod2JzX2Fja19mKSA/IDEnYjAgOiAoc19jbWRfcmRfZW1wdHkpID8gMSdiMDogMSdiMSk7CisKKy8vIEdlbmVyYXRlIGJ1c3QgcmVhZHkgb25seSB3ZSBoYXZlIHNwYWNlIGluc2lkZSByZXNwb25zZSBmaWZvCisvLyBJbiBXcml0ZSBQaGFzZSwgCisvLyAgICAgIEdlbmVyYXRlIGJ1cnN0IHJlYWR5LCBvbmx5IHdoZW4gd2UgaGF2ZSB3ZGF0YSAmIHNwYWNlIGluIHJlc3BvbnNlIGZpZm8gCisvLyBJbiBSZWFkIFBoYXNlIAorLy8gICAgICBHZW5lcmF0ZSBidXJzdCByZWFkeSwgb25seSB3aGVuIHNwYWNlIGluIHJlc3BvbnNlIGZpZm8gCisvLworYXNzaWduIHdic19icnlfbyA9ICh3YnNfd2VfbykgPyAoKHNfY21kX3JkX2VtcHR5IHx8IChzX2NtZF9yZF9lbiAgJiYgc19jbWRfcmRfYWVtcHR5KSkgPyAxJ2IwOiAxJ2IxKSA6CisJICAgICAgICAgICAgICAgICAgICAgICAgIChzX3Jlc3Bfd3JfZnVsbCB8fCAoc19yZXNwX3dyX2VuICYmIHNfcmVzcF93cl9hZnVsbCkpID8gMSdiMDogMSdiMTsKKworLy8gRHVyaW5nIFdyaXRlIHBoYXNlLCBjbWQgZmlmbyB3aWxsIGhhdmUgd2RhdGEsIHNvIGRlcXVldWUgZm9yIGV2ZXJ5IGFjaworLy8gRHVyaW5nIFJlYWQgUGhhc2UsIGNtZCBmaWZvIHdpbGwgYmUgd3JpdHRlbiBvbmx5IG9uZSB0aW1lLCBob2xkIHRoZSBidXMKKy8vIHVudGlsbCBsYXN0IGFjayByZWNlaXZlZAorYXNzaWduIHNfY21kX3JkX2VuID0gKHdic19zdGJfbyAmJiB3YnNfd2VfbykgPyB3YnNfYWNrX2k6IHdic19sYWNrX2k7CisKKy8vIFdyaXRlIEludGVyZmFjZQorLy8gcmVzcG9uc2Ugc2VuZCBvbmx5IGZvciByZWFkIGxvZ2ljCithc3NpZ24gc19yZXNwX3dyX2VuICAgPSB3YnNfc3RiX28gJiAoIXdic193ZV9vKSAmIHdic19hY2tfaSA7Cithc3NpZ24gc19yZXNwX3dyX2RhdGEgPSB7d2JzX2Vycl9pLHdic19sYWNrX2ksd2JzX2RhdF9pfTsKKworc3luY19maWZvMiAjKC5XKENGVyksIC5EUCg0KSwuV1JfRkFTVCgxKSwgLlJEX0ZBU1QoMSkpIHVfY21kX2lmICgKKwkgICAgICAgICAgIC8vIFN5bmMgdy5yLnQgV1IgY2xvY2sKKwkgICAgICAgICAgIC5jbGsgICAgICAgICAgIChjbGtfaSAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgIC5yZXNldF9uICAgICAgIChyc3RfbiAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgIC53cl9lbiAgICAgICAgIChtX2NtZF93cl9lbiAgICAgICApLAorICAgICAgICAgICAgICAgICAgIC53cl9kYXRhICAgICAgIChtX2NtZF93cl9kYXRhICAgICApLAorICAgICAgICAgICAgICAgICAgIC5mdWxsICAgICAgICAgIChtX2NtZF93cl9mdWxsICAgICApLCAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgLmFmdWxsICAgICAgICAgKG1fY21kX3dyX2FmdWxsICAgICksICAgICAgICAgICAgICAgICAKKworCQkgICAvLyBTeW5jIHcuci50IFJEIENsb2NrCisgICAgICAgICAgICAgICAgICAgLnJkX2VuICAgICAgICAgKHNfY21kX3JkX2VuICAgICAgICksCisgICAgICAgICAgICAgICAgICAgLmVtcHR5ICAgICAgICAgKHNfY21kX3JkX2VtcHR5ICAgICksIC8vIHN5bmMnZWQgdG8gcmRfY2xrCisgICAgICAgICAgICAgICAgICAgLmFlbXB0eSAgICAgICAgKHNfY21kX3JkX2FlbXB0eSAgICksIC8vIHN5bmMnZWQgdG8gcmRfY2xrCisgICAgICAgICAgICAgICAgICAgLnJkX2RhdGEgICAgICAgKHNfY21kX3JkX2RhdGEgICAgICkKKwkgICAgICk7CisKKworLy8gUmVzcG9uc2UgdXNlZCBvbmx5IGZvciByZWFkIHBhdGgsIAorLy8gQXMgY2FjaGUgYWNjZXNzIHdpbGwgYmUgYnVzcnQgb2YgNTEyIGxvY2F0aW9uLCBUbyAKKy8vIHN1cHBvcnQgY29udGlub3VzIGFjaywgZGVwdGggaXMgaW5jcmVhc2UgdG8gOCBsb2NhdGlvbgorc3luY19maWZvMiAjKC5XKFJGVyksIC5EUCg0KSwgLldSX0ZBU1QoMSksIC5SRF9GQVNUKDEpKSB1X3Jlc3BfaWYgKAorCSAgICAgICAgICAgLy8gU3luYyB3LnIudCBXUiBjbG9jaworCSAgICAgICAgICAgLmNsayAgICAgICAgICAgKGNsa19pICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgIC5yZXNldF9uICAgICAgIChyc3RfbiAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAud3JfZW4gICAgICAgICAoc19yZXNwX3dyX2VuICAgICAgICksCisgICAgICAgICAgICAgICAgICAgLndyX2RhdGEgICAgICAgKHNfcmVzcF93cl9kYXRhICAgICApLAorICAgICAgICAgICAgICAgICAgIC5mdWxsICAgICAgICAgIChzX3Jlc3Bfd3JfZnVsbCAgICAgKSwgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIC5hZnVsbCAgICAgICAgIChzX3Jlc3Bfd3JfYWZ1bGwgICAgKSwgICAgICAgICAgICAgICAgIAorCisJCSAgIC8vIFN5bmMgdy5yLnQgUkQgQ2xvY2sKKyAgICAgICAgICAgICAgICAgICAucmRfZW4gICAgICAgICAobV9yZXNwX3JkX2VuICAgICAgICksCisgICAgICAgICAgICAgICAgICAgLmVtcHR5ICAgICAgICAgKG1fcmVzcF9yZF9lbXB0eSAgKSwgLy8gc3luYydlZCB0byByZF9jbGsKKyAgICAgICAgICAgICAgICAgICAuYWVtcHR5ICAgICAgICAobV9yZXNwX3JkX2FlbXB0eSAgICksIC8vIHN5bmMnZWQgdG8gcmRfY2xrCisgICAgICAgICAgICAgICAgICAgLnJkX2RhdGEgICAgICAgKG1fcmVzcF9yZF9kYXRhICAgICApCisJICAgICApOworCisKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9saWIvd2JfaW50ZXJmYWNlLnYgYi92ZXJpbG9nL3J0bC9saWIvd2JfaW50ZXJmYWNlLnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI1YjE0NwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2xpYi93Yl9pbnRlcmZhY2UudgpAQCAtMCwwICsxLDQwNCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICB5aWZpdmUgY29tbW9uIGxpYnJhcnkgTW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgeWlmaXZlIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS95aWZpdmVfcjAuZ2l0ICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMveWlmaXZlLyAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICBUaGlzIG1vZHVsZSBkb2VzIHRoZSBETUEgdG8gd2lzaGJvbmUgSS9mICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICB2MDogICAgTm92IDI2LCAyMDE2LCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgVGhpcyBmaWxlcyBjb3BpZWQgZnJvbSBteSBvcGVuIGNvcmUgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgIHR1cmJvODA1MSBwcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK21vZHVsZSB3Yl9pbnRlcmZhY2UgKAorICAgICAgICAgIHJzdCAgICAgICAgICAsIAorICAgICAgICAgIGNsayAgICAgICAgICAsCisKKyAgICAgICAgICBkbWFfcmVxX2kgICAgLAorICAgICAgICAgIGRtYV93cml0ZV9pICAsCisgICAgICAgICAgZG1hX2FkZHJfaSAgICwKKyAgICAgICAgICBkbWFfbGVuZ3RoX2kgLAorICAgICAgICAgIGRtYV9hY2tfbyAgICAsCisgICAgICAgICAgZG1hX2RvbmVfbyAgICwKKworICAgICAgICAgIGRtYV9zdGFydF9vICAsCisgICAgICAgICAgZG1hX3dyX28gICAgICwKKyAgICAgICAgICBkbWFfcmRfbyAgICAgLAorICAgICAgICAgIGRtYV9sYXN0X28gICAsCisgICAgICAgICAgZG1hX3dkYXRhX2kgICwKKyAgICAgICAgICBkbWFfcmRhdGFfbyAgLAorCisgICAgLy8gZXh0ZXJuYWwgbWVtb3J5CisgICAgICAgICAgd2JkX2RhdF9pICAgICwgCisgICAgICAgICAgd2JkX2RhdF9vICAgICwKKyAgICAgICAgICB3YmRfYWRyX28gICAgLCAKKyAgICAgICAgICB3YmRfYmVfbyAgICAgLCAKKyAgICAgICAgICB3YmRfd2VfbyAgICAgLCAKKyAgICAgICAgICB3YmRfYWNrX2kgICAgLAorICAgICAgICAgIHdiZF9zdGJfbyAgICAsIAorICAgICAgICAgIHdiZF9jeWNfbyAgICAsIAorICAgICAgICAgIHdiZF9lcnJfaSAgICAKKworCisgICAgICk7CisKKworCitpbnB1dCAgICAgICAgICAgIHJzdCAgICAgICAgICAgICA7IAoraW5wdXQgICAgICAgICAgICBjbGsgICAgICAgICAgICAgOworCitpbnB1dCAgICAgICAgICAgIGRtYV9yZXFfaSAgICAgICA7CitpbnB1dCAgICAgICAgICAgIGRtYV93cml0ZV9pICAgICA7CitpbnB1dCBbMjU6MF0gICAgIGRtYV9hZGRyX2kgICAgICA7CitpbnB1dCBbNzowXSAgICAgIGRtYV9sZW5ndGhfaSAgICA7CitvdXRwdXQgICAgICAgICAgIGRtYV9hY2tfbyAgICAgICA7CitvdXRwdXQgICAgICAgICAgIGRtYV9kb25lX28gICAgICA7IC8vIGluZGljYXRlcyBlbmQgb2YgRE1BIHRyYW5zYWN0aW9uCisKK291dHB1dCAgICAgICAgICAgZG1hX3N0YXJ0X28gICAgIDsKK291dHB1dCAgICAgICAgICAgZG1hX3dyX28gICAgICAgIDsKK291dHB1dCAgICAgICAgICAgZG1hX3JkX28gICAgICAgIDsKK291dHB1dCAgICAgICAgICAgZG1hX2xhc3RfbyAgICAgIDsKK2lucHV0ICBbMzE6MF0gICAgZG1hX3dkYXRhX2kgICAgIDsKK291dHB1dCBbMzE6MF0gICAgZG1hX3JkYXRhX28gICAgIDsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gV0IgaW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbnB1dCAgWzMxOjBdICAgIHdiZF9kYXRfaSAgICAgICA7IC8vIGRhdGEgaW5wdXQKK291dHB1dCBbMzE6MF0gICAgd2JkX2RhdF9vICAgICAgIDsgLy8gZGF0YSBvdXRwdXQKK291dHB1dCBbMjM6MF0gICAgd2JkX2Fkcl9vICAgICAgIDsgLy8gYWRkcmVzcworb3V0cHV0ICBbMzowXSAgICB3YmRfYmVfbyAgICAgICAgOyAvLyBieXRlIGVuYWJsZQorb3V0cHV0ICAgICAgICAgICB3YmRfd2VfbyAgICAgICAgOyAvLyB3cml0ZSAKK2lucHV0ICAgICAgICAgICAgd2JkX2Fja19pICAgICAgIDsgLy8gYWNrbm93bGVnZW1lbnQKK291dHB1dCAgICAgICAgICAgd2JkX3N0Yl9vICAgICAgIDsgLy8gc3Ryb2JlL3JlcXVlc3QKK291dHB1dCAgICAgICAgICAgd2JkX2N5Y19vICAgICAgIDsgLy8gd2IgY3ljbGUKK2lucHV0ICAgICAgICAgICAgd2JkX2Vycl9pICAgICAgIDsgLy8gd2UgZXJyb3IKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlZyBEZWNsYXJhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVnIFsyOjBdICAgICAgICBzdGF0ZSAgICAgICAgICAgOworcmVnIFsyOjBdICAgICAgICBzdGF0ZV9kICAgICAgICAgOworcmVnIFs3OjBdICAgICAgICBwcmVxX2xlbiAgICAgICAgOyAvLyBwZW5kaW5nIHJlcXVlc3QgbGVuZ3RoIGluIGJ5dGVzCityZWcgICAgICAgICAgICAgIHdiZF93ZV9vICAgICAgICA7IC8vIHdlc3Rib25lIHdyaXRlIHJlcQorcmVnIFsyMzowXSAgICAgICB3YmRfYWRyX28gICAgICAgOyAvLyB3ZXN0bm9uZSBhZGRyZXNzCityZWcgICAgICAgICAgICAgIGRtYV9hY2tfbyAgICAgICA7IC8vIGRtYSBhY2sKK3JlZyBbNzowXSAgICAgICAgdHdidHJhbnMgICAgICAgIDsgLy8gdG90YWwgd2VzdGJvbmUgdHJhbnNhY3Rpb24KK3JlZyAgICAgICAgICAgICAgZG1hX3dyX28gICAgICAgIDsgLy8gZG1hIHdyaXRlIHJlcXVlc3QKK3JlZyAgICAgICAgICAgICAgZG1hX3JkX28gICAgICAgIDsgLy8gZG1hIHJlYWQgcmVxdWVzdAorcmVnIFszMTowXSAgICAgICB0ZW1wX2RhdGEgICAgICAgOyAvLyB0ZW1wIGhvbGRpbmcgZGF0YQorcmVnIFsxOjBdICAgICAgICBiZV9zb2YgICAgICAgICAgOyAvLyBCeXRlIGVuYWJsZSBzdGFydGluZyBhbGlnbm1lbnQKK3JlZyBbMzE6MF0gICAgICAgd2JkX2RhdF9vICAgICAgIDsgLy8gd2VzdGJvbmUgZGF0YSBvdXQKK3JlZyBbMzowXSAgICAgICAgd2JkX2JlX28gICAgICAgIDsgLy8gd2VzdCBib25lIGJ5dGUgZW5hYmxlIAorcmVnIFszMTowXSAgICAgICBkbWFfcmRhdGFfbyAgICAgOyAvLyBkbWEgcmVhZCBkYXRhCityZWcgICAgICAgICAgICAgIHdiZF9zdGJfbyAgICAgICA7IAorcmVnICAgICAgICAgICAgICBkbWFfc3RhcnRfbyAgICAgOyAvLyBkbWEgZmlyc3QgdHJhbnNmZXIKK3JlZyAgICAgICAgICAgICAgZG1hX2xhc3RfbyAgICAgIDsgLy8gZG1hIGxhc3QgdHJhbnNmZXIKKworcGFyYW1ldGVyIFdCX0lETEUgICAgICAgICAgID0gMydiMDAwOworcGFyYW1ldGVyIFdCX1JFUSAgICAgICAgICAgID0gMydiMDAxOworcGFyYW1ldGVyIFdCX1dSX1BIQVNFICAgICAgID0gMydiMDEwOworcGFyYW1ldGVyIFdCX1JEX1BIQVNFX1NPRiAgID0gMydiMDExOworcGFyYW1ldGVyIFdCX1JEX1BIQVNFX0NPTlQgID0gMydiMTAwOworCithc3NpZ24gZG1hX2RvbmVfbyA9IChzdGF0ZSA9PSBXQl9JRExFKSAmJiAoc3RhdGVfZCAhPSAgV0JfSURMRSk7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgcnN0IG9yIHBvc2VkZ2UgY2xrKQorYmVnaW4KKyAgIGlmKHJzdCkgYmVnaW4KKyAgICAgIHN0YXRlICAgICAgICAgPD0gV0JfSURMRTsKKyAgICAgIHN0YXRlX2QgICAgICAgPD0gV0JfSURMRTsKKyAgICAgIHdiZF93ZV9vICAgICAgPD0gMDsKKyAgICAgIHdiZF9hZHJfbyAgICAgPD0gMDsKKyAgICAgIHByZXFfbGVuICAgICAgPD0gMDsKKyAgICAgIGRtYV9hY2tfbyAgICAgPD0gMDsKKyAgICAgIHR3YnRyYW5zICAgICAgPD0gMDsKKyAgICAgIGRtYV93cl9vICAgICAgPD0gMDsKKyAgICAgIGRtYV9yZF9vICAgICAgPD0gMDsKKyAgICAgIHRlbXBfZGF0YSAgICAgPD0gMDsKKyAgICAgIGJlX3NvZiAgICAgICAgPD0gMDsKKyAgICAgIHdiZF9kYXRfbyAgICAgPD0gMDsgCisgICAgICB3YmRfYmVfbyAgICAgIDw9IDA7IAorICAgICAgZG1hX3JkYXRhX28gICA8PSAwOworICAgICAgd2JkX3N0Yl9vICAgICA8PSAwOworICAgICAgZG1hX3N0YXJ0X28gICA8PSAwOworICAgICAgZG1hX2xhc3RfbyAgICA8PSAwOworICAgZW5kCisgICBlbHNlIGJlZ2luCisgICAgICBzdGF0ZV9kICAgICAgIDw9IHN0YXRlOworICAgICAgY2FzZShzdGF0ZSkKKyAgICAgIFdCX0lETEUgOiAKKyAgICAgICAgIGJlZ2luCisgICAgICAgICAgICBpZihkbWFfcmVxX2kpCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgZG1hX2Fja19vICA8PSAxOworICAgICAgICAgICAgICAgd2JkX3dlX28gICA8PSBkbWFfd3JpdGVfaTsKKyAgICAgICAgICAgICAgIHdiZF9hZHJfbyAgPD0gZG1hX2FkZHJfaVsyNToyXTsKKyAgICAgICAgICAgICAgIGJlX3NvZiAgICAgPD0gZG1hX2FkZHJfaVsxXSA8PCAxICsgZG1hX2FkZHJfaVswXTsKKyAgICAgICAgICAgICAgIHByZXFfbGVuICAgPD0gZG1hX2xlbmd0aF9pOworICAgICAgICAgICAgICAgLy8gdG90YWwgd2IgdHJhbnNmZXIKKyAgICAgICAgICAgICAgIHR3YnRyYW5zICAgPD0gZG1hX2xlbmd0aF9pWzc6Ml0gKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfChkbWFfbGVuZ3RoX2lbMTowXSkgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfChkbWFfYWRkcl9pWzE6MF0pOworICAgICAgICAgICAgICAgc3RhdGUgICAgICAgPD0gV0JfUkVROworICAgICAgICAgICAgZW5kIAorICAgICAgICAgICAgZG1hX3dyX28gICA8PSAwOworICAgICAgICAgICAgZG1hX3JkX28gICA8PSAwOworICAgICAgICAgICAgd2JkX3N0Yl9vICA8PSAwOworICAgICAgICAgICAgZG1hX3N0YXJ0X28gIDw9IDA7CisgICAgICAgICBlbmQKKyAgICAgIFdCX1JFUSA6CisgICAgICAgICBiZWdpbgorICAgICAgICAgICAgZG1hX2Fja19vICAgICAgPD0gMDsKKyAgICAgICAgICAgIHdiZF9zdGJfbyAgICAgIDw9IDE7CisgICAgICAgICAgICBpZih3YmRfd2VfbykgYmVnaW4KKyAgICAgICAgICAgICAgIGRtYV93cl9vICAgIDw9IDE7CisgICAgICAgICAgICAgICBkbWFfc3RhcnRfbyA8PSAxOworICAgICAgICAgICAgICAgdGVtcF9kYXRhICAgPD0gZG1hX3dkYXRhX2k7IAorICAgICAgICAgICAgICAgaWYoYmVfc29mID09IDApIGJlZ2luCisgICAgICAgICAgICAgICAgICB3YmRfZGF0X28gIDw9IGRtYV93ZGF0YV9pOyAKKyAgICAgICAgICAgICAgICAgIHdiZF9iZV9vICAgPD0gNCdiMTExMTsgCisgICAgICAgICAgICAgICAgICBwcmVxX2xlbiAgICA8PSBwcmVxX2xlbiAtIDQ7CisgICAgICAgICAgICAgICBlbmQgCisgICAgICAgICAgICAgICBlbHNlIGlmKGJlX3NvZiA9PSAxKSBiZWdpbgorICAgICAgICAgICAgICAgICAgd2JkX2RhdF9vICA8PSB7ZG1hX3dkYXRhX2lbMjM6MF0sOCdoMH07IAorICAgICAgICAgICAgICAgICAgd2JkX2JlX28gICA8PSA0J2IxMTEwOyAKKyAgICAgICAgICAgICAgICAgIHByZXFfbGVuICAgIDw9IHByZXFfbGVuIC0gMzsKKyAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgZWxzZSBpZihiZV9zb2YgPT0gMikgYmVnaW4KKyAgICAgICAgICAgICAgICAgIHdiZF9kYXRfbyAgPD0ge2RtYV93ZGF0YV9pWzE1OjBdLDE2J2gwfTsgCisgICAgICAgICAgICAgICAgICB3YmRfYmVfbyAgIDw9IDQnYjExMDA7IAorICAgICAgICAgICAgICAgICAgcHJlcV9sZW4gICAgPD0gcHJlcV9sZW4gLSAyOworICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICAgICB3YmRfZGF0X28gIDw9IHtkbWFfd2RhdGFfaVs3OjBdLDIzJ2gwfTsgCisgICAgICAgICAgICAgICAgICB3YmRfYmVfbyAgIDw9IDQnYjEwMDA7IAorICAgICAgICAgICAgICAgICAgcHJlcV9sZW4gICAgPD0gcHJlcV9sZW4gLSAxOworICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICB0d2J0cmFucyAgIDw9IHR3YnRyYW5zIC0xOworICAgICAgICAgICAgICAgc3RhdGUgICAgICA8PSBXQl9XUl9QSEFTRTsKKyAgICAgICAgICAgICAgIGlmKHR3YnRyYW5zID09IDEpIAorICAgICAgICAgICAgICAgICAgIGRtYV9sYXN0X28gPD0gMTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgc3RhdGUgICA8PSBXQl9SRF9QSEFTRV9TT0Y7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgIGVuZAorICAgICAgV0JfV1JfUEhBU0UgOgorICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGRtYV9zdGFydF9vICAgICAgIDw9IDA7CisgICAgICAgICAgICBpZih3YmRfYWNrX2kpIGJlZ2luCisgICAgICAgICAgICAgICBpZih0d2J0cmFucyA9PSAxKSAKKyAgICAgICAgICAgICAgICAgICBkbWFfbGFzdF9vIDw9IDE7CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgZG1hX2xhc3RfbyA8PSAwOworICAgICAgICAgICAgICAgaWYodHdidHJhbnMgPiAwKSBiZWdpbgorICAgICAgICAgICAgICAgICAgdGVtcF9kYXRhICAgPD0gZG1hX3dkYXRhX2k7IAorICAgICAgICAgICAgICAgICAgdHdidHJhbnMgICAgPD0gdHdidHJhbnMgLTE7CisgICAgICAgICAgICAgICAgICBpZihiZV9zb2YgPT0gMCkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgIHdiZF9kYXRfbyAgPD0gZG1hX3dkYXRhX2k7IAorICAgICAgICAgICAgICAgICAgZW5kIAorICAgICAgICAgICAgICAgICAgZWxzZSBpZihiZV9zb2YgPT0gMSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgIHdiZF9kYXRfbyAgPD0ge2RtYV93ZGF0YV9pWzIzOjBdLHRlbXBfZGF0YVszMToyNF19OyAKKyAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgZWxzZSBpZihiZV9zb2YgPT0gMikgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgIHdiZF9kYXRfbyAgPD0ge2RtYV93ZGF0YV9pWzE1OjBdLHRlbXBfZGF0YVszMToxNl19OyAKKyAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgd2JkX2RhdF9vICA8PSB7ZG1hX3dkYXRhX2lbNzowXSx0ZW1wX2RhdGFbMzE6OF19OyAKKyAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICBpZih0d2J0cmFucyA+IDEpIGJlZ2luIC8vIElmIHRoZSBQZW5kaW5nIFRyYW5zZmVyIGlzIG1vcmUgdGhhbiAxCisgICAgICAgICAgICAgICAgICAgICBkbWFfd3JfbyAgIDw9IDE7CisgICAgICAgICAgICAgICAgICAgICB3YmRfYmVfbyAgIDw9IDQnYjExMTE7IAorICAgICAgICAgICAgICAgICAgICAgcHJlcV9sZW4gICA8PSBwcmVxX2xlbiAtIDQ7CisgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgIGVsc2UgYmVnaW4gLy8gZm9yIGxhc3Qgd3JpdGUgYWNjZXNzCisgICAgICAgICAgICAgICAgICAgICB3YmRfYmVfbyAgIDw9IHByZXFfbGVuWzE6MF0gPT0gMidiMDAgPyA0J2IxMTExOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVxX2xlblsxOjBdID09IDInYjAxID8gNCdiMDAwMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlcV9sZW5bMTowXSA9PSAyJ2IxMCA/IDQnYjAwMTE6IDQnYjAxMTE7CisKKyAgICAgICAgICAgICAgICAgICAgIGNhc2Uoe2JlX3NvZlsxOjBdLHByZXFfbGVuWzE6MF19KQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgYWxpZ25tZW50ID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgNCdiMDAwMSA6IGRtYV93cl9vICAgPD0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIDQnYjAwMTAgOiBkbWFfd3JfbyAgIDw9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICA0J2IwMDExIDogZG1hX3dyX28gICA8PSAxOworICAgICAgICAgICAgICAgICAgICAgICAgNCdiMDAwMCA6IGRtYV93cl9vICAgPD0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IGFsaWdubWVudCA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIDQnYjAxMDEgOiBkbWFfd3JfbyAgIDw9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICA0J2IwMTEwIDogZG1hX3dyX28gICA8PSAxOworICAgICAgICAgICAgICAgICAgICAgICAgNCdiMDExMSA6IGRtYV93cl9vICAgPD0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIDQnYjAxMDAgOiBkbWFfd3JfbyAgIDw9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCBhbGlnbm1lbnQgPSAyCisgICAgICAgICAgICAgICAgICAgICAgICA0J2IxMDAxIDogZG1hX3dyX28gICA8PSAwOworICAgICAgICAgICAgICAgICAgICAgICAgNCdiMTAxMCA6IGRtYV93cl9vICAgPD0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIDQnYjEwMTEgOiBkbWFfd3JfbyAgIDw9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICA0J2IxMDAwIDogZG1hX3dyX28gICA8PSAxOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgYWxpZ25tZW50ID0gMworICAgICAgICAgICAgICAgICAgICAgICAgNCdiMTEwMSA6IGRtYV93cl9vICAgPD0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIDQnYjExMTAgOiBkbWFfd3JfbyAgIDw9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICA0J2IxMTExIDogZG1hX3dyX28gICA8PSAwOworICAgICAgICAgICAgICAgICAgICAgICAgNCdiMTEwMCA6IGRtYV93cl9vICAgPD0gMTsKKyAgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UKKyAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICAgICBkbWFfd3JfbyAgPD0gMDsKKyAgICAgICAgICAgICAgICAgIHdiZF9zdGJfbyA8PSAwOworICAgICAgICAgICAgICAgICAgc3RhdGUgICAgIDw9IFdCX0lETEU7CisgICAgICAgICAgICAgICBlbmQgCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVsc2UgYmVnaW4KKyAgICAgICAgICAgICAgIGRtYV9sYXN0X28gPD0gMDsKKyAgICAgICAgICAgICAgIGRtYV93cl9vICAgPD0gMDsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgZW5kCisgICAgICBXQl9SRF9QSEFTRV9TT0YgOgorICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGlmKHdiZF9hY2tfaSkgYmVnaW4KKyAgICAgICAgICAgICAgIHR3YnRyYW5zICAgIDw9IHR3YnRyYW5zIC0xOworICAgICAgICAgICAgICAgaWYodHdidHJhbnMgPT0gMSkgYmVnaW4gLy8gSWYgdGhlIFBlbmRpbmcgVHJhbnNmZXIgaXMgMQorICAgICAgICAgICAgICAgICAgIGRtYV9yZF9vICAgPD0gMTsKKyAgICAgICAgICAgICAgICAgICBkbWFfc3RhcnRfbzw9IDE7CisgICAgICAgICAgICAgICAgICAgaWYoYmVfc29mID09IDApIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgIGRtYV9yZGF0YV9vICA8PSB3YmRfZGF0X2k7IAorICAgICAgICAgICAgICAgICAgICAgICBwcmVxX2xlbiAgICAgPD0gcHJlcV9sZW4gLSA0OworICAgICAgICAgICAgICAgICAgIGVuZCAKKyAgICAgICAgICAgICAgICAgICBlbHNlIGlmKGJlX3NvZiA9PSAxKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICBkbWFfcmRhdGFfbyAgPD0gezgnaDAsd2JkX2RhdF9pWzMxOjI0XX07IAorICAgICAgICAgICAgICAgICAgICAgICBwcmVxX2xlbiAgICAgPD0gcHJlcV9sZW4gLSAzOworICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoYmVfc29mID09IDIpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgIGRtYV9yZGF0YV9vICA8PSB7MTYnaDAsd2JkX2RhdF9pWzMxOjE2XX07IAorICAgICAgICAgICAgICAgICAgICAgICBwcmVxX2xlbiAgICAgPD0gcHJlcV9sZW4gLSAyOworICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgIGVsc2UgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgZG1hX3JkYXRhX28gIDw9IHsyMydoMCx3YmRfZGF0X2lbMzE6OF19OyAKKyAgICAgICAgICAgICAgICAgICAgICAgcHJlcV9sZW4gICAgIDw9IHByZXFfbGVuIC0gMDsKKyAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICBkbWFfbGFzdF9vIDw9IDE7CisgICAgICAgICAgICAgICAgICAgc3RhdGUgICAgICA8PSBXQl9JRExFOworICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICBlbHNlIGJlZ2luIC8vIHBlbmRpbmcgdHJhbnNjdGlvbiBpcyBtb3JlIHRoYW4gMQorICAgICAgICAgICAgICAgICAgaWYoYmVfc29mID09IDApIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgZG1hX3JkYXRhX28gIDw9IHdiZF9kYXRfaTsgCisgICAgICAgICAgICAgICAgICAgICAgZG1hX3JkX28gICAgIDw9IDE7CisgICAgICAgICAgICAgICAgICAgICAgZG1hX3N0YXJ0X28gIDw9IDE7CisgICAgICAgICAgICAgICAgICAgICAgcHJlcV9sZW4gICAgIDw9IHByZXFfbGVuIC0gNDsKKyAgICAgICAgICAgICAgICAgIGVuZCAKKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYoYmVfc29mID09IDEpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgdGVtcF9kYXRhICAgIDw9IHs4J2gwLHdiZF9kYXRfaVszMToyNF19OyAKKyAgICAgICAgICAgICAgICAgICAgICBkbWFfcmRfbyAgICAgPD0gMDsKKyAgICAgICAgICAgICAgICAgICAgICBwcmVxX2xlbiAgICAgPD0gcHJlcV9sZW4gLSAzOworICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICBlbHNlIGlmKGJlX3NvZiA9PSAyKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgIHRlbXBfZGF0YSAgIDw9IHsxNidoMCx3YmRfZGF0X2lbMzE6MTZdfTsgCisgICAgICAgICAgICAgICAgICAgICAgcHJlcV9sZW4gICAgPD0gcHJlcV9sZW4gLSAyOworICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgdGVtcF9kYXRhICAgPD0gezIzJ2gwLHdiZF9kYXRfaVszMTo4XX07IAorICAgICAgICAgICAgICAgICAgICAgIHByZXFfbGVuICAgIDw9IHByZXFfbGVuIC0gMDsKKyAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgc3RhdGUgICAgIDw9IFdCX1JEX1BIQVNFX0NPTlQ7CisgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgZG1hX3JkX28gIDw9IDA7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgIGVuZAorICAgICAgV0JfUkRfUEhBU0VfQ09OVDoKKyAgICAgICAgIGJlZ2luCisgICAgICAgICAgICBkbWFfc3RhcnRfbyAgPD0gMDsKKyAgICAgICAgICAgIGlmKHdiZF9hY2tfaSkgYmVnaW4KKyAgICAgICAgICAgICAgIGRtYV9yZF9vICAgICAgICAgPD0gMTsKKyAgICAgICAgICAgICAgIHR3YnRyYW5zICAgICAgICAgPD0gdHdidHJhbnMgLTE7CisgICAgICAgICAgICAgICBpZihiZV9zb2YgPT0gMCkgYmVnaW4KKyAgICAgICAgICAgICAgICAgIGRtYV9yZGF0YV9vICAgPD0gd2JkX2RhdF9pOyAKKyAgICAgICAgICAgICAgICAgIHByZXFfbGVuICAgICAgPD0gcHJlcV9sZW4gLSA0OworICAgICAgICAgICAgICAgZW5kIAorICAgICAgICAgICAgICAgZWxzZSBpZihiZV9zb2YgPT0gMSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgIGRtYV9yZGF0YV9vICAgPD0ge3diZF9kYXRfaVs3OjBdLHRlbXBfZGF0YVsyMzowXX07IAorICAgICAgICAgICAgICAgICAgdGVtcF9kYXRhICAgICA8PSB7OCdoMCx3YmRfZGF0X2lbMzE6OF19OworICAgICAgICAgICAgICAgICAgcHJlcV9sZW4gICAgICA8PSBwcmVxX2xlbiAtIDM7CisgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgIGVsc2UgaWYoYmVfc29mID09IDIpIGJlZ2luCisgICAgICAgICAgICAgICAgICBkbWFfcmRhdGFfbyAgIDw9IHt3YmRfZGF0X2lbMTU6MF0sdGVtcF9kYXRhWzE1OjBdfTsgCisgICAgICAgICAgICAgICAgICB0ZW1wX2RhdGEgICAgIDw9IHsxNidoMCx3YmRfZGF0X2lbMzE6MTZdfTsKKyAgICAgICAgICAgICAgICAgIHByZXFfbGVuICAgICAgPD0gcHJlcV9sZW4gLSAyOworICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICAgICBkbWFfcmRhdGFfbyAgIDw9IHt3YmRfZGF0X2lbMjM6MF0sdGVtcF9kYXRhWzc6MF19OyAKKyAgICAgICAgICAgICAgICAgIHRlbXBfZGF0YSAgICAgPD0gezI0J2gwLHdiZF9kYXRfaVszMToyM119OworICAgICAgICAgICAgICAgICAgcHJlcV9sZW4gICAgICA8PSBwcmVxX2xlbiAtIDE7CisgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgIGlmKHR3YnRyYW5zID09IDEpIGJlZ2luICAvLyBJZiB0aGUgaXQncyBsYXN0IHRyYW5zZmVyCisgICAgICAgICAgICAgICAgICBkbWFfbGFzdF9vIDw9IDE7CisgICAgICAgICAgICAgICAgICBzdGF0ZSAgICAgIDw9IFdCX0lETEU7CisgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgZG1hX2xhc3RfbyA8PSAwOworICAgICAgICAgICAgICAgZG1hX3JkX28gICA8PSAwOworICAgICAgICAgICAgZW5kCisgICAgICAgICBlbmQKKyAgICAgIGVuZGNhc2UKKyAgIGVuZAorZW5kIAorCisKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9saWIvd2Jfc3RhZ2dpbmcuc3YgYi92ZXJpbG9nL3J0bC9saWIvd2Jfc3RhZ2dpbmcuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY2MTAwNQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2xpYi93Yl9zdGFnZ2luZy5zdgpAQCAtMCwwICsxLDE5MiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRoaXMgbG9naWMgY3JlYXRlIGEgaG9sZGluZyByZWdpc3RlciBmb3IgV2lzaGJvbmUgaW50ZXJmYWNlLgorLy8gVGhpcyBpcyB1c2VmdWxsIHRvIGJyZWFrIHRpbWluZyBpc3N1ZSBhdCBpbnRlcmNvbm5lY3QKKy8vCisvLyBMaW1pdGF0aW9uOiBEdWUgdG8gc3RhZ2dpbmcgRkYsIENvbnRpbm91cyBCdXJzdCBvZiBXaXNoYm9uZSB3aWxsIGhhdmUgb25lCisvLyBjeWNsZSBicmVhayBiZXR3ZWVuIGVhY2ggdHJhbnNhY3Rpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgV2lzaGJvbmUgU3RhZ2dpbmcgRkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFlJRml2ZSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWlmaXZlX3IwLmdpdCAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3lpZml2ZS8gICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBUaGlzIGxvZ2ljIGNyZWF0ZSBhIGhvbGRpbmcgRkYgZm9yIFdpc2hib25lIGludGVyZmFjZS4gICAgLy8vLworLy8vLyAgICBUaGlzIGlzIHVzZWZ1bGwgdG8gYnJlYWsgdGltaW5nIGlzc3VlIGF0IGludGVyY29ubmVjdCAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgTGltaXRhdGlvbjogRHVlIHRvIHN0YWdnaW5nIEZGLCBDb250aW5vdXMgQnVyc3Qgb2YgICAgICAgICAgLy8vLworLy8vLyAgV2lzaGJvbmUgd2lsbCBoYXZlIG9uZSBjeWNsZSBicmVhayBiZXR3ZWVuIGVhY2ggdHJhbnNhY3Rpb24gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjEgLSAxMnRoIEp1bmUgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLworLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLworLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLworLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLworLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLworLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLworLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLworLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLworLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisKK21vZHVsZSB3Yl9zdGFnZ2luZyAoCisgICAgICAgICBpbnB1dCBsb2dpYwkJY2xrX2ksIAorICAgICAgICAgaW5wdXQgbG9naWMgICAgICAgICAgICByc3RfbiwKKyAgICAgICAgIC8vIFdpc2hCb25lIElucHV0IG1hc3RlciBJL1AKKyAgICAgICAgIGlucHV0ICAgbG9naWMJWzMxOjBdCW1fd2JkX2RhdF9pLAorICAgICAgICAgaW5wdXQgICBsb2dpYyAgWzMxOjBdCW1fd2JkX2Fkcl9pLAorICAgICAgICAgaW5wdXQgICBsb2dpYyAgWzM6MF0JbV93YmRfc2VsX2ksCisgICAgICAgICBpbnB1dCAgIGxvZ2ljICBbOTowXQltX3diZF9ibF9pLAorICAgICAgICAgaW5wdXQgICBsb2dpYyAgCW1fd2JkX2JyeV9pLAorICAgICAgICAgaW5wdXQgICBsb2dpYyAgCW1fd2JkX3dlX2ksCisgICAgICAgICBpbnB1dCAgIGxvZ2ljICAJbV93YmRfY3ljX2ksCisgICAgICAgICBpbnB1dCAgIGxvZ2ljICAJbV93YmRfc3RiX2ksCisgICAgICAgICBpbnB1dCAgIGxvZ2ljICBbMzowXQltX3diZF90aWRfaSwKKyAgICAgICAgIG91dHB1dCAgbG9naWMJWzMxOjBdCW1fd2JkX2RhdF9vLAorICAgICAgICAgb3V0cHV0ICBsb2dpYwkJbV93YmRfYWNrX28sCisgICAgICAgICBvdXRwdXQgIGxvZ2ljCQltX3diZF9sYWNrX28sCisgICAgICAgICBvdXRwdXQgIGxvZ2ljCQltX3diZF9lcnJfbywKKworICAgICAgICAgLy8gU2xhdmUgSW50ZXJmYWNlCisgICAgICAgICBpbnB1dAlsb2dpYyBbMzE6MF0Jc193YmRfZGF0X2ksCisgICAgICAgICBpbnB1dAlsb2dpYyAJICAgICAgICBzX3diZF9hY2tfaSwKKyAgICAgICAgIGlucHV0CWxvZ2ljIAkgICAgICAgIHNfd2JkX2xhY2tfaSwKKyAgICAgICAgIGlucHV0CWxvZ2ljIAkgICAgICAgIHNfd2JkX2Vycl9pLAorICAgICAgICAgb3V0cHV0CWxvZ2ljIFszMTowXQlzX3diZF9kYXRfbywKKyAgICAgICAgIG91dHB1dAlsb2dpYyBbMzE6MF0Jc193YmRfYWRyX28sCisgICAgICAgICBvdXRwdXQJbG9naWMgWzM6MF0Jc193YmRfc2VsX28sCisgICAgICAgICBvdXRwdXQJbG9naWMgWzk6MF0Jc193YmRfYmxfbywKKyAgICAgICAgIG91dHB1dAlsb2dpYyAgICAJc193YmRfYnJ5X28sCisgICAgICAgICBvdXRwdXQJbG9naWMgCSAgICAgICAgc193YmRfd2VfbywKKyAgICAgICAgIG91dHB1dAlsb2dpYyAJICAgICAgICBzX3diZF9jeWNfbywKKyAgICAgICAgIG91dHB1dAlsb2dpYyAJICAgICAgICBzX3diZF9zdGJfbywKKyAgICAgICAgIG91dHB1dAlsb2dpYyBbMzowXQlzX3diZF90aWRfbworCispOworCitsb2dpYyBbMzE6MF0gbV93YmRfZGF0X2lfZmYgOyAvLyBGbG9wcGVkIHZlc2lvbiBvZiBtX3diZF9kYXRfaQorbG9naWMgWzMxOjBdIG1fd2JkX2Fkcl9pX2ZmIDsgLy8gRmxvcHBlZCB2ZXNpb24gb2YgbV93YmRfYWRyX2kKK2xvZ2ljIFszOjBdICBtX3diZF9zZWxfaV9mZiA7IC8vIEZsb3BwZWQgdmVzaW9uIG9mIG1fd2JkX3NlbF9pCitsb2dpYyBbOTowXSAgbV93YmRfYmxfaV9mZiA7ICAvLyBGbG9wcGVkIHZlc2lvbiBvZiBtX3diZF9ibF9pCitsb2dpYyAgICAgICAgbV93YmRfYnJ5X2lfZmYgOyAvLyBGbG9wcGVkIHZlc2lvbiBvZiBtX3diZF9icnlfaQorbG9naWMgICAgICAgIG1fd2JkX3dlX2lfZmYgIDsgLy8gRmxvcHBlZCB2ZXNpb24gb2YgbV93YmRfd2VfaQorbG9naWMgICAgICAgIG1fd2JkX2N5Y19pX2ZmIDsgLy8gRmxvcHBlZCB2ZXNpb24gb2YgbV93YmRfY3ljX2kKK2xvZ2ljICAgICAgICBtX3diZF9zdGJfaV9mZiA7IC8vIEZsb3BwZWQgdmVzaW9uIG9mIG1fd2JkX3N0Yl9pCitsb2dpYyBbMzowXSAgbV93YmRfdGlkX2lfZmYgOyAvLyBGbG9wcGVkIHZlc2lvbiBvZiBtX3diZF90aWRfaQorbG9naWMgWzMxOjBdIHNfd2JkX2RhdF9pX2ZmIDsgLy8gRmxvcHBlZCB2ZXNpb24gb2Ygc193YmRfZGF0X2kKK2xvZ2ljICAgICAgICBzX3diZF9hY2tfaV9mZiA7IC8vIEZsb3BwZWQgdmVzaW9uIG9mIHNfd2JkX2Fja19pCitsb2dpYyAgICAgICAgc193YmRfbGFja19pX2ZmIDsgLy8gRmxvcHBlZCB2ZXNpb24gb2Ygc193YmRfYWNrX2kKK2xvZ2ljICAgICAgICBzX3diZF9lcnJfaV9mZiA7IC8vIEZsb3BwZWQgdmVzaW9uIG9mIHNfd2JkX2Vycl9pCisKKworYXNzaWduIHNfd2JkX2RhdF9vID0gbV93YmRfZGF0X2lfZmY7Cithc3NpZ24gc193YmRfYWRyX28gPSBtX3diZF9hZHJfaV9mZjsKK2Fzc2lnbiBzX3diZF9zZWxfbyA9IG1fd2JkX3NlbF9pX2ZmOworYXNzaWduIHNfd2JkX2JsX28gID0gbV93YmRfYmxfaV9mZjsKK2Fzc2lnbiBzX3diZF9icnlfbyA9IG1fd2JkX2JyeV9pX2ZmOworYXNzaWduIHNfd2JkX3dlX28gID0gbV93YmRfd2VfaV9mZjsKK2Fzc2lnbiBzX3diZF9jeWNfbyA9IG1fd2JkX2N5Y19pX2ZmOworYXNzaWduIHNfd2JkX3N0Yl9vID0gbV93YmRfc3RiX2lfZmY7Cithc3NpZ24gc193YmRfdGlkX28gPSBtX3diZF90aWRfaV9mZjsKKworYXNzaWduIG1fd2JkX2RhdF9vID0gc193YmRfZGF0X2lfZmY7Cithc3NpZ24gbV93YmRfYWNrX28gPSBzX3diZF9hY2tfaV9mZjsKK2Fzc2lnbiBtX3diZF9sYWNrX28gPSBzX3diZF9sYWNrX2lfZmY7Cithc3NpZ24gbV93YmRfZXJyX28gPSBzX3diZF9lcnJfaV9mZjsKKworYWx3YXlzIEAobmVnZWRnZSByc3RfbiBvciBwb3NlZGdlIGNsa19pKQorYmVnaW4KKyAgIGlmKHJzdF9uID09IDEnYjApIGJlZ2luCisgICAgICAgbV93YmRfZGF0X2lfZmYgPD0gJ2gwOworICAgICAgIG1fd2JkX2Fkcl9pX2ZmIDw9ICdoMDsKKyAgICAgICBtX3diZF9zZWxfaV9mZiA8PSAnaDA7CisgICAgICAgbV93YmRfYmxfaV9mZiAgPD0gJ2gwOworICAgICAgIG1fd2JkX2JyeV9pX2ZmIDw9ICdiMDsKKyAgICAgICBtX3diZF93ZV9pX2ZmICA8PSAnaDA7CisgICAgICAgbV93YmRfY3ljX2lfZmYgPD0gJ2gwOworICAgICAgIG1fd2JkX3N0Yl9pX2ZmIDw9ICdoMDsKKyAgICAgICBtX3diZF90aWRfaV9mZiA8PSAnaDA7CisgICAgICAgc193YmRfZGF0X2lfZmYgPD0gJ2gwOworICAgICAgIHNfd2JkX2Fja19pX2ZmIDw9ICdoMDsKKyAgICAgICBzX3diZF9sYWNrX2lfZmYgPD0gJ2gwOworICAgICAgIHNfd2JkX2Vycl9pX2ZmIDw9ICdoMDsKKyAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgc193YmRfZGF0X2lfZmYgIDw9IHNfd2JkX2RhdF9pOworICAgICAgIHNfd2JkX2Fja19pX2ZmICA8PSBzX3diZF9hY2tfaTsKKyAgICAgICBzX3diZF9sYWNrX2lfZmYgPD0gc193YmRfbGFja19pOworICAgICAgIHNfd2JkX2Vycl9pX2ZmIDw9IHNfd2JkX2Vycl9pOworICAgICAgIGlmKChtX3diZF9zdGJfaSAmJiBtX3diZF9icnlfaSAmJiBzX3diZF9hY2tfaSA9PSAwICYmIG1fd2JkX2xhY2tfbyA9PSAwKSB8fAorICAgICAgICAgIChtX3diZF9zdGJfaSAmJiBtX3diZF9icnlfaSAmJiBzX3diZF9hY2tfaSA9PSAxICYmIHNfd2JkX2xhY2tfaSA9PSAwKSkgYmVnaW4KKyAgICAgICAgICBtX3diZF9kYXRfaV9mZiA8PSBtX3diZF9kYXRfaTsKKyAgICAgICAgICBtX3diZF9hZHJfaV9mZiA8PSBtX3diZF9hZHJfaTsKKyAgICAgICAgICBtX3diZF9zZWxfaV9mZiA8PSBtX3diZF9zZWxfaTsKKyAgICAgICAgICBtX3diZF93ZV9pX2ZmICA8PSBtX3diZF93ZV9pOworICAgICAgICAgIG1fd2JkX2N5Y19pX2ZmIDw9IG1fd2JkX2N5Y19pOworICAgICAgICAgIG1fd2JkX3N0Yl9pX2ZmIDw9IG1fd2JkX3N0Yl9pOworICAgICAgICAgIG1fd2JkX3RpZF9pX2ZmIDw9IG1fd2JkX3RpZF9pOworICAgICAgICAgIG1fd2JkX2JsX2lfZmYgIDw9IG1fd2JkX2JsX2k7CisgICAgICAgICAgbV93YmRfYnJ5X2lfZmYgPD0gJ2IxOworICAgICAgIGVuZCBlbHNlICBpZiAoKG1fd2JkX3N0Yl9pICYmICFtX3diZF9icnlfaSAmJiBzX3diZF9hY2tfaSA9PSAxICYmIHNfd2JkX2xhY2tfaSA9PSAwKSkgYmVnaW4gLy8gRGUtQXNzZXJ0IGJ1cnN0IHJlYWR5CisgICAgICAgICAgbV93YmRfYnJ5X2lfZmYgPD0gJ2IwOworICAgICAgIGVuZCBlbHNlIGlmIChzX3diZF9sYWNrX2kpIGJlZ2luCisgICAgICAgICAgbV93YmRfZGF0X2lfZmYgPD0gJ2gwOworICAgICAgICAgIG1fd2JkX2Fkcl9pX2ZmIDw9ICdoMDsKKyAgICAgICAgICBtX3diZF9zZWxfaV9mZiA8PSAnaDA7CisgICAgICAgICAgbV93YmRfd2VfaV9mZiAgPD0gJ2gwOworICAgICAgICAgIG1fd2JkX2N5Y19pX2ZmIDw9ICdoMDsKKyAgICAgICAgICBtX3diZF9zdGJfaV9mZiA8PSAnaDA7CisgICAgICAgICAgbV93YmRfdGlkX2lfZmYgPD0gJ2gwOworICAgICAgICAgIG1fd2JkX2JsX2lfZmYgIDw9ICdoMDsKKyAgICAgICAgICBtX3diZF9icnlfaV9mZiA8PSAnYjA7CisgICAgICAgZW5kCisgICBlbmQKK2VuZAorCisKK2VuZG1vZHVsZQorCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9tYmlzdC9pbmNsdWRlL21iaXN0X2RlZi5zdmggYi92ZXJpbG9nL3J0bC9tYmlzdC9pbmNsdWRlL21iaXN0X2RlZi5zdmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBmYjJlYQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL21iaXN0L2luY2x1ZGUvbWJpc3RfZGVmLnN2aApAQCAtMCwwICsxLDY2IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworYGlmbmRlZiBCSVNUX0RFRklORV9TVkgKK2BkZWZpbmUgQklTVF9ERUZJTkVfU1ZICisKKy8vIEJJU1QgQUREUkVTUyBDT05UUkwKKy8vCisvL3BhcmFtZXRlciBCSVNUX0FERFJfV0QgICAgPSA5ICAgICA7CisvL3BhcmFtZXRlciBCSVNUX0FERFJfU1RBUlQgPSAxMCdoMDAwIDsgCisvL3BhcmFtZXRlciBCSVNUX0FERFJfRU5EICAgPSAxMCdoM0ZCIDsKKworLy8gQklTVCBEQVRBIENPTlRSTAorLy9wYXJhbWV0ZXIgQklTVF9EQVRBX1dEICAgICAgICA9IDMyOworcGFyYW1ldGVyIEJJU1RfREFUQV9QQVRfU0laRSAgPSA4OworcGFyYW1ldGVyIEJJU1RfREFUQV9QQVRfVFlQRTEgPSA2NCdoNTU1NV81NTU1XzU1NTVfNTU1NTsKK3BhcmFtZXRlciBCSVNUX0RBVEFfUEFUX1RZUEUyID0gNjQnaDMzMzNfMzMzM18zMzMzXzMzMzM7CitwYXJhbWV0ZXIgQklTVF9EQVRBX1BBVF9UWVBFMyA9IDY0J2gwRjBGXzBGMEZfMEYwRl8wRjBGOworcGFyYW1ldGVyIEJJU1RfREFUQV9QQVRfVFlQRTQgPSA2NCdoMDBGRl8wMEZGXzAwRkZfMDBGRjsKK3BhcmFtZXRlciBCSVNUX0RBVEFfUEFUX1RZUEU1ID0gNjQnaDAwMDBfRkZGRl8wMDAwX0ZGRkY7CitwYXJhbWV0ZXIgQklTVF9EQVRBX1BBVF9UWVBFNiA9IDY0J2gwMDAwXzAwMDBfRkZGRl9GRkZGOworcGFyYW1ldGVyIEJJU1RfREFUQV9QQVRfVFlQRTcgPSA2NCdoRkZGRl9GRkZGX0ZGRkZfRkZGRjsKK3BhcmFtZXRlciBCSVNUX0RBVEFfUEFUX1RZUEU4ID0gNjQnaDAwMDBfMDAwMF8wMDAwXzAwMDA7CisKKy8vIEJJU1QgU1RJTVVMQVRJT04gU0VMRUNUCisKK3BhcmFtZXRlciAgQklTVF9TVElfU0laRSA9IDU7CitwYXJhbWV0ZXIgIEJJU1RfU1RJX1dEICAgPSAxNTsKKy8vIEFkZGl0aW9uYWwgMydiMDAwIGFkZGVkIGF0IGVuZCBvZiBlYWNoIHN0aW11bHVzIHRvIGZsdXNoIG91dCB0aGUgY29tcGFyaW9uCisvLyByZXN1bHQgKyB0byBoYW5kbGUgZXJyb3IgZml4IGNhc2UKK3BhcmFtZXRlciAgQklTVF9TVElNVUxVU19UWVBFMSA9IDE1J2IxMDAxMDAxMDAxMDAwMDA7CitwYXJhbWV0ZXIgIEJJU1RfU1RJTVVMVVNfVFlQRTIgPSAxNSdiMTAwMDEwMTAxMDExMDAwOworcGFyYW1ldGVyICBCSVNUX1NUSU1VTFVTX1RZUEUzID0gMTUnYjExMDAxMTEwMDAxMDAwMDsKK3BhcmFtZXRlciAgQklTVF9TVElNVUxVU19UWVBFNCA9IDE1J2IwMDAwMTAxMDEwMTEwMDA7CitwYXJhbWV0ZXIgIEJJU1RfU1RJTVVMVVNfVFlQRTUgPSAxNSdiMDEwMDExMTAwMDEwMDAwOworcGFyYW1ldGVyICBCSVNUX1NUSU1VTFVTX1RZUEU2ID0gMTUnYjAwMDAwMDAwMDAwMDAwMDsKK3BhcmFtZXRlciAgQklTVF9TVElNVUxVU19UWVBFNyA9IDE1J2IwMDAwMDAwMDAwMDAwMDA7CitwYXJhbWV0ZXIgIEJJU1RfU1RJTVVMVVNfVFlQRTggPSAxNSdiMDAwMDAwMDAwMDAwMDAwOworCisKKy8vIE9wZXJhdGlvbiAKK3BhcmFtZXRlciAgQklTVF9PUF9TSVpFICAgICAgICA9IDQ7CisKKy8vIEJJU1QgQUREUkVTUyBSRVBBSVIKKy8vcGFyYW1ldGVyICBCSVNUX1JBRF9XRF9JICAgICAgICAgICAgPSBCSVNUX0FERFJfV0Q7CisvL3BhcmFtZXRlciAgQklTVF9SQURfV0RfTyAgICAgICAgICAgID0gQklTVF9BRERSX1dEOworcGFyYW1ldGVyICBCSVNUX0VSUl9MSU1JVCAgICAgICAgICAgPSA0OworLy8gTWFrZSBTdXJlIHRoYXQgdGhpcyBhZGRyZXNzIGluIG91dHNpZGUgdGhlIHZhbGlkIGFkZHJlc3MgcmFuZ2UKKy8vcGFyYW1ldGVyICBCSVNUX1JFUEFJUl9BRERSX1NUQVJUICAgPSAxMCdoM0ZDIDsgCisKK2BlbmRpZiAvLyBCSVNUX0RFRklORV9TVkgKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL21iaXN0L3J1bl9pdmVyaWxvZyBiL3Zlcmlsb2cvcnRsL21iaXN0L3J1bl9pdmVyaWxvZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNWY1MDIwCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbWJpc3QvcnVuX2l2ZXJpbG9nCkBAIC0wLDAgKzEsMTcgQEAKK2l2ZXJpbG9nIC1nMjAwNS1zdiAtREZVTkNUSU9OQUwgLUQgVU5JVF9ERUxBWT0jMC4xIFwKK3NyYy90b3AvbWJpc3RfdG9wLnN2IFwKK3NyYy9jb3JlL21iaXN0X2FkZHJfZ2VuLnN2IFwKK3NyYy9jb3JlL21iaXN0X2ZzbS5zdiBcCitzcmMvY29yZS9tYmlzdF9vcF9zZWwuc3YgXAorc3JjL2NvcmUvbWJpc3RfcmVwYWlyX2FkZHIuc3YgXAorc3JjL2NvcmUvbWJpc3RfZGF0YV9jbXAuc3YgXAorc3JjL2NvcmUvbWJpc3RfbXV4LnN2IFwKK3NyYy9jb3JlL21iaXN0X3BhdF9zZWwuc3YgXAorc3JjL2NvcmUvbWJpc3Rfc3RpX3NlbC5zdiBcCitzcmMvY29yZS9tYmlzdF9tZW1fd3JhcHBlci5zdiBcCistSSBpbmNsdWRlLyBcCisuLi9saWIvY3RlY2hfY2VsbHMuc3YgXAorLi4vbGliL3Jlc2V0X3N5bmMuc3YgXAorLi4vY2xrX3NrZXdfYWRqdXN0L3NyYy9jbGtfc2tld19hZGp1c3QuZ3YgXAorJFBES19ST09UL3NreTEzMEEvbGlicy5yZWYvc2t5MTMwX2ZkX3NjX2hkL3Zlcmlsb2cvc2t5MTMwX2ZkX3NjX2hkLnYgXAorJFBES19ST09UL3NreTEzMEEvbGlicy5yZWYvc2t5MTMwX2ZkX3NjX2hkL3Zlcmlsb2cvcHJpbWl0aXZlcy52IApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvbWJpc3QvcnVuX3ZlcmlsYXRvciBiL3Zlcmlsb2cvcnRsL21iaXN0L3J1bl92ZXJpbGF0b3IKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWRkNWQ2YgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL21iaXN0L3J1bl92ZXJpbGF0b3IKQEAgLTAsMCArMSwxNyBAQAordmVyaWxhdG9yIC1jYyAgXAorc3JjL3RvcC9tYmlzdF90b3AxLnN2IFwKK3NyYy9jb3JlL21iaXN0X2FkZHJfZ2VuLnN2IFwKK3NyYy9jb3JlL21iaXN0X2ZzbS5zdiBcCitzcmMvY29yZS9tYmlzdF9vcF9zZWwuc3YgXAorc3JjL2NvcmUvbWJpc3RfcmVwYWlyX2FkZHIuc3YgXAorc3JjL2NvcmUvbWJpc3RfZGF0YV9jbXAuc3YgXAorc3JjL2NvcmUvbWJpc3RfbXV4LnN2IFwKK3NyYy9jb3JlL21iaXN0X3BhdF9zZWwuc3YgXAorc3JjL2NvcmUvbWJpc3Rfc3RpX3NlbC5zdiBcCisraW5jZGlyK2luY2x1ZGUvIFwKKy4uL2xpYi9jdGVjaF9jZWxscy5zdiBcCisuLi9saWIvcmVzZXRfc3luYy5zdiBcCistdiAkUERLX1JPT1Qvc2t5MTMwQS9saWJzLnJlZi9za3kxMzBfZmRfc2NfaGQvdmVyaWxvZy9za3kxMzBfZmRfc2NfaGQudiBcCistdiAkUERLX1JPT1Qvc2t5MTMwQS9saWJzLnJlZi9za3kxMzBfZmRfc2NfaGQvdmVyaWxvZy9wcmltaXRpdmVzLnYgXAorLS10aW1lc2NhbGUgMW5zLzEwMHBzIFwKKy0tYmJveC11bnN1cApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfYWRkcl9nZW4uc3YgYi92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvY29yZS9tYmlzdF9hZGRyX2dlbi5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmNmNDJjCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfYWRkcl9nZW4uc3YKQEAgLTAsMCArMSwxMTYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBNQklTVCBBZGRyZXNzIEdlbmVyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgbWJpc3RfY3RybCBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS9tYmlzdF9jdHJsLmdpdCAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgVGhpcyBibG9jayBpbnRlZ3JhdGUgbWJpc3QgYWRkcmVzcyBnZW4gICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMCAtIDExdGggT2N0IDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEluaXRpYWwgaW50ZWdyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2BpbmNsdWRlICJtYmlzdF9kZWYuc3ZoIgorCittb2R1bGUgbWJpc3RfYWRkcl9nZW4KKyAgICAgIyggIHBhcmFtZXRlciBCSVNUX0FERFJfV0QgICAgICAgICAgID0gOSwKKwkgcGFyYW1ldGVyIEJJU1RfREFUQV9XRCAgICAgICAgICAgPSAzMiwKKwkgcGFyYW1ldGVyIEJJU1RfQUREUl9TVEFSVCAgICAgICAgPSA5J2gwMDAsCisJIHBhcmFtZXRlciBCSVNUX0FERFJfRU5EICAgICAgICAgID0gOSdoMUY4LAorCSBwYXJhbWV0ZXIgQklTVF9SRVBBSVJfQUREUl9TVEFSVCA9IDknaDFGQywKKwkgcGFyYW1ldGVyIEJJU1RfUkFEX1dEX0kgICAgICAgICAgPSBCSVNUX0FERFJfV0QsCisJIHBhcmFtZXRlciBCSVNUX1JBRF9XRF9PICAgICAgICAgID0gQklTVF9BRERSX1dEKSAoCisKKyAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgIGxhc3RfYWRkciwgICAvLyAgTGFzdCBhZGRyZXNzIGFjY2VzcworICAgb3V0cHV0ICBsb2dpYyBbQklTVF9BRERSX1dELTE6MF0gYmlzdF9hZGRyLCAgIC8vICBCaXN0IEFkZHJlc3MgIAorICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgc2RvLCAgICAgICAgIC8vICBzY2FuIGRhdGEgb3V0cHV0CisgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICBjbGssICAgICAgICAgLy8gIGNsb2NrIGlucHV0CisgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICByc3RfbiwgICAgICAgLy8gIGFzeW5jaHJvbm91cyByZXNldCAKKyAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgIHJ1biwgICAgICAgICAvLyAgc3RvcCBvciBzdGFydCBzdGF0ZSBtYWNoaW5lIAorICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgdXBkb3duLCAgICAgIC8vICBjb3VudCB1cCBvciBkb3duIAorICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgYmlzdF9zaGlmdCwgIC8vICBzaGlmdCBzY2FuIGlucHV0CisgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICBiaXN0X2xvYWQsICAgLy8gIGxvYWQgc2NhbiBpbnB1dAorICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgc2RpICAgICAgICAgIC8vICBzY2FuIGRhdGEgaW5wdXQgCisKKyk7CisKKworbG9naWMgICBbQklTVF9BRERSX1dELTE6MF0gbmV4dF9hZGRyOyAgLy8gTmV4dCBBZGRyZXNzCitsb2dpYyAgIFtCSVNUX0FERFJfV0QtMTowXSBzdGFydF9hZGRyOyAvLyBBZGRyZXNzIFN0YXJ0IEFkZHJlc3MKK2xvZ2ljICAgW0JJU1RfQUREUl9XRC0xOjBdIGVuZF9hZGRyOyAgIC8vIEFkZHJlc3MgU3RvcCBBZGRyZXNzCisKKworYXNzaWduIGxhc3RfYWRkciA9ICgoKHVwZG93biA9PSAxJ2IxKSYmKGJpc3RfYWRkciA9PSBlbmRfYWRkcikpfHwoKHVwZG93biA9PSAxJ2IwKSYmKGJpc3RfYWRkciA9PSBzdGFydF9hZGRyKSkpPzEnYjE6MSdiMDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgIEFkZHJlc3MgcmVnaXN0ZXIgCisgICAgIEJhc2ljIEFzc3VtcHRpb246IEFsbHdheXMgY291bnRlciBzdGFydCB3aXRoIHVwY291bnRpbmcKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdF9uKSBiZWdpbgorICBpZighcnN0X24pICAgICAgICAgIGJpc3RfYWRkciA8PSBCSVNUX0FERFJfU1RBUlQgOworICBlbHNlIGlmKGJpc3RfbG9hZCkgIGJpc3RfYWRkciA8PSBzdGFydF9hZGRyOworICBlbHNlICAgICAgICAgICAgICAgIGJpc3RfYWRkciA8PSBuZXh0X2FkZHI7CitlbmQKKworLyogSW5wdXQgY29tYmluYXRpb25hbCBibG9jayAqLworCithbHdheXNfY29tYiAgYmVnaW4KKyAgICBpZihydW4pIGJlZ2luCisgICAgICAgaWYoKGJpc3RfYWRkciA9PSBlbmRfYWRkcikmJih1cGRvd24gPT0gMSdiMSkpICAgIAorCSAgbmV4dF9hZGRyID0gc3RhcnRfYWRkciA7CisgICAgICAgZWxzZSBpZigoYmlzdF9hZGRyID09IHN0YXJ0X2FkZHIpJiYodXBkb3duID09IDEnYjApKSAKKwkgIG5leHRfYWRkciA9IGVuZF9hZGRyIDsKKyAgICAgICBlbHNlIG5leHRfYWRkciA9ICh1cGRvd24pP2Jpc3RfYWRkcisxJ2IxOmJpc3RfYWRkci0xJ2IxOworICAgIGVuZAorICAgIGVsc2UgbmV4dF9hZGRyID0gYmlzdF9hZGRyOworZW5kCisKKworLyogU3RhcnQgcmVnaXN0ZXIgKi8KKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RfbikgYmVnaW4KKyAgaWYoIXJzdF9uKSAgICAgICAgICAgc3RhcnRfYWRkciA8PSBCSVNUX0FERFJfU1RBUlQgOworICBlbHNlIGlmKGJpc3Rfc2hpZnQpICBzdGFydF9hZGRyIDw9IHtzZGksIHN0YXJ0X2FkZHJbQklTVF9BRERSX1dELTE6MV19OworZW5kCisKKy8qIFN0YXJ0IHJlZ2lzdGVyICovCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdF9uKSBiZWdpbgorICBpZighcnN0X24pICAgICAgICAgICBlbmRfYWRkciA8PSBCSVNUX0FERFJfRU5EIDsKKyAgZWxzZSBpZihiaXN0X3NoaWZ0KSAgZW5kX2FkZHIgPD0ge3N0YXJ0X2FkZHJbMF0sIGVuZF9hZGRyW0JJU1RfQUREUl9XRC0xOjFdfTsKK2VuZAorCisKK2Fzc2lnbiBzZG8gICA9IGVuZF9hZGRyWzBdOworCitlbmRtb2R1bGUKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfZGF0YV9jbXAuc3YgYi92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvY29yZS9tYmlzdF9kYXRhX2NtcC5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWRkMzQzCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfZGF0YV9jbXAuc3YKQEAgLTAsMCArMSwxMTYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBNQklTVCBEYXRhIENvbXBhcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgbWJpc3RfY3RybCBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS9tYmlzdF9jdHJsLmdpdCAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgVGhpcyBibG9jayBpbnRlZ3JhdGUgbWJpc3QgZGF0YSBjb21wYXJhdG9yICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMCAtIDExdGggT2N0IDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEluaXRpYWwgaW50ZWdyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitgaW5jbHVkZSAibWJpc3RfZGVmLnN2aCIKKworCittb2R1bGUgbWJpc3RfZGF0YV9jbXAKKyAgICAgIyggIHBhcmFtZXRlciBCSVNUX0FERFJfV0QgICAgICAgICAgID0gOSwKKwkgcGFyYW1ldGVyIEJJU1RfREFUQV9XRCAgICAgICAgICAgPSAzMiwKKwkgcGFyYW1ldGVyIEJJU1RfQUREUl9TVEFSVCAgICAgICAgPSA5J2gwMDAsCisJIHBhcmFtZXRlciBCSVNUX0FERFJfRU5EICAgICAgICAgID0gOSdoMUY4LAorCSBwYXJhbWV0ZXIgQklTVF9SRVBBSVJfQUREUl9TVEFSVCA9IDknaDFGQywKKwkgcGFyYW1ldGVyIEJJU1RfUkFEX1dEX0kgICAgICAgICAgPSBCSVNUX0FERFJfV0QsCisJIHBhcmFtZXRlciBCSVNUX1JBRF9XRF9PICAgICAgICAgID0gQklTVF9BRERSX1dEKSAoCisKKyAgICAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgIGVycm9yLAorCSAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb3JyZWN0LAorCSAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICBjb3JyZWN0LAorCSAgb3V0cHV0ICBsb2dpYyBbQklTVF9BRERSX1dELTE6MF0gICBlcnJvcl9hZGRyLAorICAgICAgICAgIG91dHB1dCAgbG9naWMgIFszOjBdICAgICAgICAgICAgICAgZXJyb3JfY250LAorICAgICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgY2xrLAorICAgICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgcnN0X24sCisgICAgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlLCAKKwkgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgYWRkcl9pbmNfcGhhc2UsCisJICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgIHJlYWRfaW52ZXJ0LAorICAgICAgICAgIGlucHV0ICAgbG9naWMgIFtCSVNUX0RBVEFfV0QtMTowXSAgY29tcF9kYXRhLAorICAgICAgICAgIGlucHV0ICAgbG9naWMgIFtCSVNUX0RBVEFfV0QtMTowXSAgcnhkX2RhdGEsCisJICBpbnB1dCAgIGxvZ2ljIFtCSVNUX0FERFJfV0QtMTowXSAgIGFkZHIKKwkgICAgIAorCSk7CisKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgIG1hc2tfY29tcGFyZTsKK2xvZ2ljICBbQklTVF9EQVRBX1dELTE6MF0gIGV4cF9kYXRhOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgY29tcF9zdGF0dXM7CisKK2Fzc2lnbiBleHBfZGF0YSA9IChyZWFkX2ludmVydCkgPyB+Y29tcF9kYXRhOiBjb21wX2RhdGE7CisgIAorLyogQ29tcGFyaXNvbiByZWdpc3RlciAqLworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdF9uKSBiZWdpbgorICAgaWYoIXJzdF9uKSAgICAgICAgIGJlZ2luCisgICAgICBjb21wX3N0YXR1cyA8PSAxJ2IwOworICAgICAgZXJyb3JfYWRkciAgPD0gJ2IwOworICAgZW5kIGVsc2UgaWYoY29tcGFyZSAmJiAhbWFza19jb21wYXJlKSAgIGJlZ2luCisgICAgICBjb21wX3N0YXR1cyA8PSB8KGV4cF9kYXRhIF4gcnhkX2RhdGEpOworICAgICAgZXJyb3JfYWRkciAgPD0gYWRkcjsKKyAgIGVuZCBlbHNlIGJlZ2luIAorICAgICBjb21wX3N0YXR1cyA8PSAxJ2IwOworICAgZW5kCitlbmQKKworLy8gRHVlIHRvIGN5Y2xlIGRpZmVyZW5jZSBiZXR3ZWVuIGNvbXBhcmUgYW5kIHdyaXRlIG9wcGVyYXRpb24KKy8vIFRoZXJlIGlzIGNoYW5jZSB0d28gZXJyb3IgcmVwb3J0ZWQgZm9yIHNhbWUgYWRkcmVzcworLy8gVG8gYXZvaWQgdGhpcywgb25jZSBlcnJvciBpcyBkZXRlY3RlZCwgY29tcGFyaXNpb24gaXMgbWFza2VkCisvLyB1bml0IHRoZSBuZXh0IGFkZHJlc3MgcGhhc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCisgICBpZighcnN0X24pIGJlZ2luICAgICAgICAgICAgIAorICAgICAgZXJyb3JfY250ICAgIDw9ICdiMDsKKyAgICAgIGNvcnJlY3QgICAgICA8PSdiMDsKKyAgICAgIG1hc2tfY29tcGFyZSA8PSAnYjA7CisgICAgICBlcnJvciAgICAgICAgPD0gJzA7CisgICBlbmQgZWxzZSBpZihtYXNrX2NvbXBhcmUgJiYgYWRkcl9pbmNfcGhhc2UpIGJlZ2luIAorICAgICAgbWFza19jb21wYXJlIDw9IDEnYjA7CisgICBlbmQgZWxzZSBpZihjb21wX3N0YXR1cyAmJiAoZXJyb3JfY250IDwgQklTVF9FUlJfTElNSVQpICkgICBiZWdpbgorICAgICAgZXJyb3JfY250ICAgIDw9IGVycm9yX2NudCsxOworICAgICAgbWFza19jb21wYXJlIDw9IDEnYjE7CisgICAgICBjb3JyZWN0ICAgICAgPD0nYjE7CisgICBlbmQgZWxzZSBpZihjb21wX3N0YXR1cyAmJiAoZXJyb3JfY250ID09IEJJU1RfRVJSX0xJTUlUKSApICAgYmVnaW4KKyAgICAgIGVycm9yICAgICAgICA8PSAnMTsKKyAgIGVuZCAKK2VuZAorCithc3NpZ24gZXJyb3JfY29ycmVjdCA9IChlcnJvcl9jbnQgPCBCSVNUX0VSUl9MSU1JVCkgPyBjb21wX3N0YXR1cyA6IDEnYjA7CisKK2VuZG1vZHVsZQorCisKKworCisKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfZnNtLnN2IGIvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfZnNtLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NzJlZTcKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvY29yZS9tYmlzdF9mc20uc3YKQEAgLTAsMCArMSwxNDEgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBNQklTVCBNYWluIGNvbnRyb2wgRlNNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgbWJpc3RfY3RybCBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS9tYmlzdF9jdHJsLmdpdCAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBNQklTVCBNYWluIGNvbnRyb2wgRlNNIHRvIGNvbnRyb2wgQ29tbWFuZCwgQWRkcmVzcywgV3JpdGUgICAvLy8vCisvLy8vICAgYW5kIFJlYWQgY29tcGFyZSBwaGFzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMCAtIDExdGggT2N0IDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEluaXRpYWwgaW50ZWdyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCittb2R1bGUgbWJpc3RfZnNtIAorICAgICAjKCAgcGFyYW1ldGVyIEJJU1RfQUREUl9XRCAgICAgICAgICAgPSA5LAorCSBwYXJhbWV0ZXIgQklTVF9EQVRBX1dEICAgICAgICAgICA9IDMyLAorCSBwYXJhbWV0ZXIgQklTVF9BRERSX1NUQVJUICAgICAgICA9IDknaDAwMCwKKwkgcGFyYW1ldGVyIEJJU1RfQUREUl9FTkQgICAgICAgICAgPSA5J2gxRjgsCisJIHBhcmFtZXRlciBCSVNUX1JFUEFJUl9BRERSX1NUQVJUID0gOSdoMUZDLAorCSBwYXJhbWV0ZXIgQklTVF9SQURfV0RfSSAgICAgICAgICA9IEJJU1RfQUREUl9XRCwKKwkgcGFyYW1ldGVyIEJJU1RfUkFEX1dEX08gICAgICAgICAgPSBCSVNUX0FERFJfV0QpICgKKworCW91dHB1dCBsb2dpYyBjbWRfcGhhc2UsICAgIC8vIENvbW1hbmQgUGhhc2UKKwlvdXRwdXQgbG9naWMgY21wX3BoYXNlLCAgICAvLyBDb21wYXJlIFBoYXNlCisJb3V0cHV0IGxvZ2ljIHJ1bl9vcCwgICAgICAgLy8gTW92ZSB0byBOZXh0IE9wZXJhdGlvbgorCW91dHB1dCBsb2dpYyBydW5fYWRkciwgICAgIC8vIE1vdmUgdG8gTmV4dCBBZGRyZXNzCisJb3V0cHV0IGxvZ2ljIHJ1bl9zdGksICAgICAgLy8gTW92ZSB0byBOZXh0IFN0aW11bHVzCisJb3V0cHV0IGxvZ2ljIHJ1bl9wYXQsICAgICAgLy8gTW92ZSB0byBuZXh0IHBhdHRlcm4KKwlvdXRwdXQgbG9naWMgYmlzdF9kb25lLCAgICAvLyBCaXN0IFRlc3QgRG9uZQorCisKKwlpbnB1dCBsb2dpYyAgY2xrLCAgICAgICAgICAvLyBDbG9jaworCWlucHV0IGxvZ2ljICByc3RfbiwgICAgICAgIC8vIFJlc2V0CisJaW5wdXQgbG9naWMgIGJpc3RfcnVuLCAgICAgLy8gQmlzdCBSdW4KKwlpbnB1dCBsb2dpYyAgYmlzdF9lcnJvciwgICAvLyBCaXN0IEVycm9yCisJaW5wdXQgbG9naWMgIG9wX3JldmVyc2UsICAgLy8gQWRkcmVzcyBSZXZlcnNlIGluIE5leHQgQ3ljbGUKKwlpbnB1dCBsb2dpYyAgbGFzdF9vcCwgICAgICAvLyBMYXN0IE9wZXJhdGlvbgorCWlucHV0IGxvZ2ljICBsYXN0X2FkZHIsICAgIC8vIExhc3QgQWRkcmVzcworCWlucHV0IGxvZ2ljICBsYXN0X3N0aSwgICAgIC8vIExhc3QgU3RpbXVsdXMKKwlpbnB1dCBsb2dpYyAgbGFzdF9wYXQgICAgICAvLyBMYXN0IFBhdHRlcm4KKworCispOworCitwYXJhbWV0ZXIgRlNNX1BIQVNFMSA9IDInYjAwOworcGFyYW1ldGVyIEZTTV9QSEFTRTIgPSAyJ2IwMTsKK3BhcmFtZXRlciBGU01fRVhJVCAgID0gMidiMTA7CisKK2xvZ2ljIFsxOjBdICBzdGF0ZTsKKworCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0X24pCitiZWdpbgorICAgaWYoIXJzdF9uKSBiZWdpbgorICAgICAgY21kX3BoYXNlICAgICAgIDw9IDA7CisgICAgICBjbXBfcGhhc2UgICAgICAgPD0gMDsKKyAgICAgIHJ1bl9vcCAgICAgICAgIDw9IDA7CisgICAgICBydW5fYWRkciAgICAgICA8PSAwOworICAgICAgcnVuX3N0aSAgICAgICAgPD0gMDsKKyAgICAgIHJ1bl9wYXQgICAgICAgIDw9IDA7CisgICAgICBiaXN0X2RvbmUgICAgICA8PSAwOworICAgICAgc3RhdGUgICAgICAgICAgPD0gRlNNX1BIQVNFMTsKKyAgIGVuZCBlbHNlIGlmKGJpc3RfcnVuKSBiZWdpbgorICAgICAgY2FzZShzdGF0ZSkKKyAgICAgICAgIEZTTV9QSEFTRTEgIDogIAorICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGNtZF9waGFzZSA8PSAxOworICAgICAgICAgICAgY21wX3BoYXNlIDw9IDA7CisgICAgICAgICAgICBydW5fb3AgICAgPD0gMDsKKyAgICAgICAgICAgIHJ1bl9hZGRyICA8PSAwOworICAgICAgICAgICAgcnVuX3N0aSAgIDw9IDA7CisgICAgICAgICAgICBydW5fcGF0ICAgPD0gMDsKKyAgICAgICAgICAgIHN0YXRlICAgICA8PSBGU01fUEhBU0UyOworICAgICAgICAgIGVuZAorICAgICAgICAgRlNNX1BIQVNFMiAgOiAgCisgICAgICAgICBiZWdpbgorICAgICAgICAgICAgaWYoKGxhc3RfYWRkciAmJiBsYXN0X29wICYmIGxhc3Rfc3RpICYmIGxhc3RfcGF0KSB8fCBiaXN0X2Vycm9yKSAgYmVnaW4KKyAgICAgICAgICAgICAgIGNtZF9waGFzZSAgPD0gMDsKKyAgICAgICAgICAgICAgIGNtcF9waGFzZSAgPD0gMDsKKyAgICAgICAgICAgICAgIHJ1bl9vcCAgICAgPD0gMDsKKyAgICAgICAgICAgICAgIHJ1bl9hZGRyICAgPD0gMDsKKyAgICAgICAgICAgICAgIHJ1bl9zdGkgICAgPD0gMDsKKyAgICAgICAgICAgICAgIHJ1bl9wYXQgICAgPD0gMDsKKyAgICAgICAgICAgICAgIHN0YXRlICAgICAgPD0gRlNNX0VYSVQ7CisgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgY21kX3BoYXNlICAgPD0gMDsKKyAgICAgICAgICAgICAgIGNtcF9waGFzZSAgIDw9IDE7CisgICAgICAgICAgICAgICBydW5fb3AgICAgICA8PSAxOworICAgICAgICAgICAgICAgaWYobGFzdF9vcCAmJiAhKGxhc3RfYWRkciAmJiBvcF9yZXZlcnNlKSkKKyAgICAgICAgICAgICAgICAgIHJ1bl9hZGRyIDw9IDE7CisgICAgICAgICAgICAgICBpZihsYXN0X2FkZHIgJiYgbGFzdF9vcCkgCisgICAgICAgICAgICAgICAgICBydW5fc3RpICA8PSAxOworICAgICAgICAgICAgICAgaWYobGFzdF9hZGRyICYmIGxhc3Rfb3AgJiYgbGFzdF9zdGkpIAorICAgICAgICAgICAgICAgICAgcnVuX3BhdCAgPD0gMTsKKyAgICAgICAgICAgICAgIHN0YXRlICAgIDw9IEZTTV9QSEFTRTE7CisJICAgIGVuZAorICAgICAgICAgZW5kCisJIEZTTV9FWElUOiBiaXN0X2RvbmUgIDw9IDE7CisJIGRlZmF1bHQ6ICBzdGF0ZSAgICAgIDw9IEZTTV9QSEFTRTE7CisgICAgICBlbmRjYXNlCisgICBlbmQgZWxzZSBiZWdpbgorICAgICAgY21kX3BoYXNlIDw9IDA7CisgICAgICBjbXBfcGhhc2UgPD0gMDsKKyAgICAgIHJ1bl9vcCAgICA8PSAwOworICAgICAgcnVuX2FkZHIgIDw9IDA7CisgICAgICBydW5fc3RpICAgPD0gMDsgCisgICAgICBydW5fcGF0ICAgPD0gMDsKKyAgICAgIHN0YXRlICAgICA8PSBGU01fUEhBU0UxOworICAgZW5kCitlbmQKKworCisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfbWVtX3dyYXBwZXIuc3YgYi92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvY29yZS9tYmlzdF9tZW1fd3JhcHBlci5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjMxNjcxCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfbWVtX3dyYXBwZXIuc3YKQEAgLTAsMCArMSwxMDIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgTWVtb3J5IHdyYXBwZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIG1iaXN0X2N0cmwgIHByb2plY3QgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEvbWJpc3RfY3RybC5naXQgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIFRoaXMgYmxvY2sgZG9lcyB3aXNoYm9uZSB0byBTUkFNIHNpZ25hbCBtYXBwaW5nICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjEgLSAxOCBOb3YgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBpbml0aWFsIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLworLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLworLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLworLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLworLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLworLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLworLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLworLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLworLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworbW9kdWxlIG1iaXN0X21lbV93cmFwcGVyICMoCisJcGFyYW1ldGVyIEJJU1RfTk9fU1JBTT00LAorCXBhcmFtZXRlciBCSVNUX0FERFJfV0Q9MTAsCisJcGFyYW1ldGVyIEJJU1RfREFUQV9XRD0zMikgKAorCWlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uICAgICAgICAgICAsCisgICAgICAgICAgLy8gV0IgSS9GCisJaW5wdXQgICBsb2dpYyBbKEJJU1RfTk9fU1JBTSsxKS8yLTE6MF0gc3JhbV9pZCAgICAgICAgICwKKyAgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgd2JfY2xrX2kgICAgICAgICwgIC8vIFN5c3RlbSBjbG9jaworICAgICAgICBpbnB1dCAgIGxvZ2ljIFsoQklTVF9OT19TUkFNKzEpLzItMTowXSBtZW1fY3MgICAgICAgICAgLCAgLy8gQ2hpcCBTZWxlY3QKKyAgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtX3JlcSAgICAgICAgICwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgIGlucHV0ICAgbG9naWMgW0JJU1RfQUREUl9XRC0xOjBdICAgICAgIG1lbV9hZGRyICAgICAgICAsICAvLyBhZGRyZXNzCisgICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbV93ZSAgICAgICAgICAsICAvLyB3cml0ZQorICAgICAgICBpbnB1dCAgIGxvZ2ljIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgICBtZW1fd2RhdGEgICAgICAgLCAgLy8gZGF0YSBvdXRwdXQKKyAgICAgICAgaW5wdXQgICBsb2dpYyBbQklTVF9EQVRBX1dELzgtMTowXSAgICAgbWVtX3dtYXNrICAgICAgICwgIC8vIGJ5dGUgZW5hYmxlCisgICAgICAgIG91dHB1dCAgbG9naWMgW0JJU1RfREFUQV9XRC0xOjBdICAgICAgIG1lbV9yZGF0YSAgICAgICAsICAvLyBkYXRhIGlucHV0CisgICAgICAvLyBNRU0gUE9SVCAKKyAgICAgICAgb3V0cHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19jbGsgICAgICAgICwKKyAgICAgICAgb3V0cHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19jZW4gICAgICAgICwKKyAgICAgICAgb3V0cHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY193ZWIgICAgICAgICwKKyAgICAgICAgb3V0cHV0ICAgbG9naWMgW0JJU1RfREFUQV9XRC84LTE6MF0gICAgZnVuY19tYXNrICAgICAgICwKKyAgICAgICAgb3V0cHV0ICAgbG9naWMgIFtCSVNUX0FERFJfV0QtMTowXSAgICAgZnVuY19hZGRyICAgICAgICwKKyAgICAgICAgaW5wdXQgICAgbG9naWMgIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgZnVuY19kb3V0ICAgICAgICwKKyAgICAgICAgb3V0cHV0ICAgbG9naWMgIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgZnVuY19kaW4gICAgICAgIAorCispOworCisKKy8vIE1lbW9yeSBXcml0ZSBQT1JUCithc3NpZ24gZnVuY19jbGsgICAgPSB3Yl9jbGtfaTsKK2Fzc2lnbiBmdW5jX2NlbiAgICA9IChtZW1fY3MgID09IHNyYW1faWQpID8gIW1lbV9yZXEgOiAxJ2IxOworYXNzaWduIGZ1bmNfd2ViICAgID0gKG1lbV9jcyAgPT0gc3JhbV9pZCkgPyAhbWVtX3dlICAgOiAxJ2IxOworYXNzaWduIGZ1bmNfbWFzayAgID0gbWVtX3dtYXNrOworYXNzaWduIGZ1bmNfYWRkciAgID0gbWVtX2FkZHI7Cithc3NpZ24gZnVuY19kaW4gICAgPSBtZW1fd2RhdGE7Cithc3NpZ24gbWVtX3JkYXRhICAgPSBmdW5jX2RvdXQ7CisKKworCisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfbXV4LnN2IGIvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfbXV4LnN2Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAzNDFiMTYKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvY29yZS9tYmlzdF9tdXguc3YKQEAgLTAsMCArMSwxNTQgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgTUJJU1QgYW5kIE1FTU9SWSBNdXggQ29udHJvbCBTZWxlY3Rpb24gICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIG1iaXN0X2N0cmwgY29yZXMgcHJvamVjdCAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEvbWJpc3RfY3RybC5naXQgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIFRoaXMgYmxvY2sgaW50ZWdyYXRlIE1CSVNUIGFuZCBNZW1vcnkgY29udHJvbCBzZWxlY3Rpb24gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjAgLSAxMXRoIE9jdCAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBJbml0aWFsIGludGVncmF0aW9uIAorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitgaW5jbHVkZSAibWJpc3RfZGVmLnN2aCIKK21vZHVsZSAgIG1iaXN0X211eAorICAgICAjKCAgcGFyYW1ldGVyIEJJU1RfQUREUl9XRCAgICAgICAgICAgPSA5LAorCSBwYXJhbWV0ZXIgQklTVF9EQVRBX1dEICAgICAgICAgICA9IDMyLAorCSBwYXJhbWV0ZXIgQklTVF9BRERSX1NUQVJUICAgICAgICA9IDknaDAwMCwKKwkgcGFyYW1ldGVyIEJJU1RfQUREUl9FTkQgICAgICAgICAgPSA5J2gxRjgsCisJIHBhcmFtZXRlciBCSVNUX1JFUEFJUl9BRERSX1NUQVJUID0gOSdoMUZDLAorCSBwYXJhbWV0ZXIgQklTVF9SQURfV0RfSSAgICAgICAgICA9IEJJU1RfQUREUl9XRCwKKwkgcGFyYW1ldGVyIEJJU1RfUkFEX1dEX08gICAgICAgICAgPSBCSVNUX0FERFJfV0QpICgKKworICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICBzY2FuX21vZGUsCisKKyAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgcnN0X24sCisgICAgICAvLyBNQklTVCBDVFJMIFNJR05BTAorICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICBiaXN0X2VuLAorICAgICAgaW5wdXQgICBsb2dpYyAgW0JJU1RfQUREUl9XRC0xOjBdICBiaXN0X2FkZHIsCisgICAgICBpbnB1dCAgIGxvZ2ljICBbQklTVF9EQVRBX1dELTE6MF0gIGJpc3Rfd2RhdGEsCisgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgIGJpc3RfY2xrLAorICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICBiaXN0X3dyLAorICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICBiaXN0X3JkLAorICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICBiaXN0X2Vycm9yLAorICAgICAgaW5wdXQgICBsb2dpYyAgW0JJU1RfQUREUl9XRC0xOjBdICBiaXN0X2Vycm9yX2FkZHIsCisgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgIGJpc3RfY29ycmVjdCwKKyAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgYmlzdF9zZGksCisgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgIGJpc3RfbG9hZCwKKyAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgYmlzdF9zaGlmdCwKKyAgICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgYmlzdF9zZG8sCisKKyAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgZnVuY19jbGssCisgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfY2VuLAorICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICBmdW5jX3dlYiwKKyAgICAgIGlucHV0ICAgbG9naWMgW0JJU1RfREFUQV9XRC84LTE6MF0gZnVuY19tYXNrLAorICAgICAgaW5wdXQgICBsb2dpYyAgW0JJU1RfQUREUl9XRC0xOjBdICBmdW5jX2FkZHIsCisgICAgICBpbnB1dCAgIGxvZ2ljICBbQklTVF9EQVRBX1dELTE6MF0gIGZ1bmNfZGluLAorICAgICAgb3V0cHV0ICBsb2dpYyAgW0JJU1RfREFUQV9XRC0xOjBdICBmdW5jX2RvdXQsCisKKworICAgICAvLyB0b3dhcmRzIG1lbW9yeQorCisgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgIG1lbV9jbGssCisgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgIG1lbV9jZW4sCisgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgIG1lbV93ZWIsCisgICAgICBvdXRwdXQgbG9naWMgW0JJU1RfREFUQV9XRC84LTE6MF0gIG1lbV9tYXNrLAorICAgICAgb3V0cHV0IGxvZ2ljICAgW0JJU1RfQUREUl9XRC0xOjBdICBtZW1fYWRkciwKKyAgICAgIG91dHB1dCBsb2dpYyAgIFtCSVNUX0RBVEFfV0QtMTowXSAgbWVtX2RpbiwKKyAgICAgIGlucHV0ICBsb2dpYyAgIFtCSVNUX0RBVEFfV0QtMTowXSAgbWVtX2RvdXQKKyAgICApOworCisKK3BhcmFtZXRlciBCSVNUX01BU0tfV0QgPSBCSVNUX0RBVEFfV0QvODsKKword2lyZSAgIFtCSVNUX0FERFJfV0QtMTowXSAgICAgIGFkZHI7CisKKworCithc3NpZ24gYWRkciAgID0gKGJpc3RfZW4pID8gYmlzdF9hZGRyICAgOiBmdW5jX2FkZHI7CisKK2Fzc2lnbiBtZW1fY2VuICAgID0gKGJpc3RfZW4pID8gIShiaXN0X3JkIHwgYmlzdF93cikgICA6IGZ1bmNfY2VuOworYXNzaWduIG1lbV93ZWIgICAgPSAoYmlzdF9lbikgPyAhYmlzdF93ciAgIDogZnVuY193ZWI7Cithc3NpZ24gbWVtX21hc2sgICA9IChiaXN0X2VuKSA/IHt7QklTVF9NQVNLX1dEfXsxJ2IxfX0gOiBmdW5jX21hc2s7CisKKy8vYXNzaWduIG1lbV9jbGtfYSAgICA9IChiaXN0X2VuKSA/IGJpc3RfY2xrICAgOiBmdW5jX2Nsa19hOworLy9hc3NpZ24gbWVtX2Nsa19iICAgID0gKGJpc3RfZW4pID8gYmlzdF9jbGsgICA6IGZ1bmNfY2xrX2I7CisKK2N0ZWNoX211eDJ4MSB1X21lbV9jbGtfc2VsICguQTAgKGZ1bmNfY2xrKSwuQTEgKGJpc3RfY2xrKSwuUyAgKGJpc3RfZW4pLCAgICAgLlggIChtZW1fY2xrKSk7CisKKy8vY3RlY2hfY2xrX2J1ZiB1X21lbV9jbGsgKC5BIChtZW1fY2xrX2N0cyksIC4gWChtZW1fY2xrKSk7CisKK2Fzc2lnbiBtZW1fZGluICAgID0gKGJpc3RfZW4pID8gYmlzdF93ZGF0YSAgIDogZnVuY19kaW47CisKKworCisvLyBEdXJpbmcgc2NhbiwgU1JBTSBkYXRhIGlzIHVua25vd24sIGZlZWQgZGF0YSBpbiBiYWNrIHRvIGF2b2lkIHVua25vdworLy8gcHJvcGFnYXRpb24KK2Fzc2lnbiBmdW5jX2RvdXQgICA9ICAoc2Nhbl9tb2RlKSA/ICBtZW1fZGluIDogbWVtX2RvdXQ7CisKK21iaXN0X3JlcGFpcl9hZGRyIAorICAgICAgIyguQklTVF9BRERSX1dEICAgICAgICAgICAoQklTVF9BRERSX1dEKSwKKwkuQklTVF9EQVRBX1dEICAgICAgICAgICAoQklTVF9EQVRBX1dEKSwKKwkuQklTVF9BRERSX1NUQVJUICAgICAgICAoQklTVF9BRERSX1NUQVJUKSwKKwkuQklTVF9BRERSX0VORCAgICAgICAgICAoQklTVF9BRERSX0VORCksCisJLkJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKEJJU1RfUkVQQUlSX0FERFJfU1RBUlQpLAorCS5CSVNUX1JBRF9XRF9JICAgICAgICAgIChCSVNUX1JBRF9XRF9JKSwKKwkuQklTVF9SQURfV0RfTyAgICAgICAgICAoQklTVF9SQURfV0RfTykpIAorICAgICB1X3JlcGFpcigKKyAgICAuQWRkcmVzc091dCAgICAobWVtX2FkZHIgICAgICAgICApLAorICAgIC5Db3JyZWN0ICAgICAgIChiaXN0X2NvcnJlY3QgICAgICksCisgICAgLnNkbyAgICAgICAgICAgKGJpc3Rfc2RvICAgICAgICAgKSwKKworICAgIC5BZGRyZXNzSW4gICAgIChhZGRyICAgICAgICAgICAgICksCisgICAgLmNsayAgICAgICAgICAgKG1lbV9jbGsgICAgICAgICAgKSwKKyAgICAucnN0X24gICAgICAgICAocnN0X24gICAgICAgICAgICApLAorICAgIC5FcnJvciAgICAgICAgIChiaXN0X2Vycm9yICAgICAgICksCisgICAgLkVycm9yQWRkciAgICAgKGJpc3RfZXJyb3JfYWRkciAgKSwKKyAgICAuYmlzdF9sb2FkICAgICAoYmlzdF9sb2FkICAgICAgICksCisgICAgLmJpc3Rfc2hpZnQgICAgKGJpc3Rfc2hpZnQgICAgICAgKSwKKyAgICAuc2RpICAgICAgICAgICAoYmlzdF9zZGkgICAgICAgICApCispOworCisKKworCisKK2VuZG1vZHVsZQorCisKKworCisKKworCisKKworCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL21iaXN0L3NyYy9jb3JlL21iaXN0X29wX3NlbC5zdiBiL3Zlcmlsb2cvcnRsL21iaXN0L3NyYy9jb3JlL21iaXN0X29wX3NlbC5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTk1YjhlCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3Rfb3Bfc2VsLnN2CkBAIC0wLDAgKzEsMTMyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgTUJJU1QgT3BlcmF0aW9uIFNlbGVjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIG1iaXN0X2N0cmwgY29yZXMgcHJvamVjdCAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEvbWJpc3RfY3RybC5naXQgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIFRoaXMgYmxvY2sgaW50ZWdyYXRlIE9wZXJhdGlvbiBTZWxlY3Rpb24gICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjAgLSAxMXRoIE9jdCAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBJbml0aWFsIGludGVncmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisKK2BpbmNsdWRlICJtYmlzdF9kZWYuc3ZoIgorLy8gYmlzdCBzdGltdWx1cyBzZWxlY3Rpb24KKworbW9kdWxlIG1iaXN0X29wX3NlbCAKKyAgICAgIyggIHBhcmFtZXRlciBCSVNUX0FERFJfV0QgICAgICAgICAgID0gOSwKKwkgcGFyYW1ldGVyIEJJU1RfREFUQV9XRCAgICAgICAgICAgPSAzMiwKKwkgcGFyYW1ldGVyIEJJU1RfQUREUl9TVEFSVCAgICAgICAgPSA5J2gwMDAsCisJIHBhcmFtZXRlciBCSVNUX0FERFJfRU5EICAgICAgICAgID0gOSdoMUY4LAorCSBwYXJhbWV0ZXIgQklTVF9SRVBBSVJfQUREUl9TVEFSVCA9IDknaDFGQywKKwkgcGFyYW1ldGVyIEJJU1RfUkFEX1dEX0kgICAgICAgICAgPSBCSVNUX0FERFJfV0QsCisJIHBhcmFtZXRlciBCSVNUX1JBRF9XRF9PICAgICAgICAgID0gQklTVF9BRERSX1dEKSAoCisKKyAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgb3BfcmVhZCAgICAgICAsICAvLyBPcGVydGlvbiBSZWFkCisJb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgb3Bfd3JpdGUgICAgICAsICAvLyBPcGVyYXRpb24gV3JpdGUKKwlvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICBvcF9pbnZlcnQgICAgICwgIC8vIE9wZXJ0YWlvbiBEYXRhIEludmVydAorCW91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIG9wX3VwZG93biAgICAgLCAgLy8gT3BlcmF0aW9uIEFkZHJlc3MgVXAgRG93bgorCW91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIG9wX3JldmVyc2UgICAgLCAgLy8gT3BlcmF0aW9uIFJldmVyc2UKKwlvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICBvcF9yZXBlYXRmbGFnICwgIC8vIE9wZXJhdGlvbiBSZXBlYXQgZmxhZworCW91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHNkbyAgICAgICAgICAgLCAgLy8gU2NhbiBEYXRhIE91dAorCW91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Rfb3AgICAgICAgLCAgLy8gbGFzdCBvcGVyYXRpb24KKworCWlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIGNsayAgICAgICAgICAgLCAgLy8gQ2xvY2sKKwlpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICByc3RfbiAgICAgICAgICwgIC8vIFJlc2V0IAorCWlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5fc2hpZnQgICAgLCAgLy8gU2NhbiBTaGlmdAorCWlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHNkaSAgICAgICAgICAgLCAgLy8gU2NhbiBkYXRhIGluCisJaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgcmVfaW5pdCAgICAgICAsICAvLyBSZS1pbml0IHdoZW4gdGhlcmUgaXMgZXJyb3IgY29ycmVjdGlvbgorCWlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHJ1biAgICAgICAgICAgLCAgLy8gUnVuIAorICAgICAgICBpbnB1dCAgbG9naWMgIFtCSVNUX1NUSV9XRC0xOjBdICAgICBzdGltdWx1cyAgICAgCisKKyk7CisKKworbG9naWMgW0JJU1RfT1BfU0laRS0xOjBdIG9wX3NlbCAgICAgICA7Ly8gQWN0dWFsIE9wZXJhdGlvbgorbG9naWMgICAgICBbNzowXSAgICAgICAgIHRtcF9vcCAgICAgICA7Ly8gV2FybmluZyA6IEFzc21pbmcgTWF4IG9wZXJ0aW9uIGlzIDgKK2xvZ2ljICAgICAgWzc6MF0gICAgICAgICB0bXBpbnZlcnQgICAgOy8vIHJlYWQgY29udHJvbCAKK2xvZ2ljICAgICAgWzc6MF0gICAgICAgICB0bXByZWFkICAgICAgOy8vIHdyaXRlIGNvbnRyb2wgCitsb2dpYyAgICAgIFs3OjBdICAgICAgICAgdG1wd3JpdGUgICAgIDsvLyBpbnZlcnRvciBjb250cm9sIAoraW50ZWdlciAgICAgICAgICAgICAgICAgIGluZGV4ICAgICAgICA7Ly8gb3V0cHV0IGluZGV4ICovCitpbnRlZ2VyICAgICAgICAgICAgICAgICAgbG9vcCAgICAgICAgIDsvLyBiaXQgY291bnQKKworCisvKiBPcGVyYXRpb24gU2VsZWN0aW9uIFNlbGVjdGlvbiAqLworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdF9uKSBiZWdpbgorICBpZighcnN0X24pICAgICAgICAgICBvcF9zZWwgPD0gezEnYjEseyhCSVNUX09QX1NJWkUtMSl7MSdiMH19fTsKKyAgZWxzZSBpZihzY2FuX3NoaWZ0KSAgb3Bfc2VsIDw9IHtzZGksIG9wX3NlbFtCSVNUX09QX1NJWkUtMToxXX07CisgIGVsc2UgaWYocmVfaW5pdCkgICAgIG9wX3NlbCA8PSB7MSdiMSx7KEJJU1RfT1BfU0laRS0xKXsxJ2IwfX19OyAvLyBuZWVkIGZpeCBmb3IgcG1iaXN0IG1vb2RlCisgIGVsc2UgaWYocnVuKSAgICAgICAgIG9wX3NlbCA8PSB7b3Bfc2VsWzBdLG9wX3NlbFtCSVNUX09QX1NJWkUtMToxXX07CitlbmQKKworYXNzaWduIG9wX3VwZG93biAgICAgPSBzdGltdWx1c1tCSVNUX1NUSV9XRC0xXTsKK2Fzc2lnbiBvcF9yZXZlcnNlICAgID0gc3RpbXVsdXNbQklTVF9TVElfV0QtMl07Cithc3NpZ24gb3BfcmVwZWF0ZmxhZyA9IHN0aW11bHVzW0JJU1RfU1RJX1dELTNdOworLy8gUmUtd2luZCB0aGUgb3BlcmF0aW9uLCB3aGVuIHRoZSBpcyBlcnJvciBjb3JyZWN0Cithc3NpZ24gbGFzdF9vcCAgICAgICA9IChyZV9pbml0KSA/IDEnYjAgOiBvcF9zZWxbMF07CisKKworCithbHdheXNfY29tYgorYmVnaW4KKyAgIGxvb3A9MDsKKyAgIHRtcGludmVydCA9IDgnaDA7CisgICB0bXByZWFkICAgPSA4J2gwOworICAgdG1wd3JpdGUgID0gOCdoMDsKKyAgIGZvcihpbmRleCA9IDAgOyBpbmRleCA8IEJJU1RfT1BfU0laRSA7IGluZGV4ID0gaW5kZXgrMSliZWdpbgorICAgICAgdG1waW52ZXJ0W2luZGV4XSA9IHN0aW11bHVzW2xvb3BdOworICAgICAgdG1wcmVhZFtpbmRleF0gICA9IHN0aW11bHVzW2xvb3ArMV07CisgICAgICB0bXB3cml0ZVtpbmRleF0gID0gc3RpbXVsdXNbbG9vcCsyXTsKKyAgICAgIGxvb3AgICAgICAgICAgICAgPSBsb29wICsgMzsKKyAgIGVuZAorZW5kCisKKworYWx3YXlzX2NvbWIKK2JlZ2luCisgICB0bXBfb3AgPSA4J2IwMDAwMDAwMDsKKyAgIHRtcF9vcFtCSVNUX09QX1NJWkUtMTowXSA9IG9wX3NlbDsKKyAgIGNhc2UodG1wX29wKQorICAgICA4J2IxMDAwMDAwMDoge29wX3JlYWQsb3Bfd3JpdGUsb3BfaW52ZXJ0fSA9IHt0bXByZWFkWzddLHRtcHdyaXRlWzddLHRtcGludmVydFs3XX07CisgICAgIDgnYjAxMDAwMDAwOiB7b3BfcmVhZCxvcF93cml0ZSxvcF9pbnZlcnR9ID0ge3RtcHJlYWRbNl0sdG1wd3JpdGVbNl0sdG1waW52ZXJ0WzZdfTsKKyAgICAgOCdiMDAxMDAwMDA6IHtvcF9yZWFkLG9wX3dyaXRlLG9wX2ludmVydH0gPSB7dG1wcmVhZFs1XSx0bXB3cml0ZVs1XSx0bXBpbnZlcnRbNV19OworICAgICA4J2IwMDAxMDAwMDoge29wX3JlYWQsb3Bfd3JpdGUsb3BfaW52ZXJ0fSA9IHt0bXByZWFkWzRdLHRtcHdyaXRlWzRdLHRtcGludmVydFs0XX07CisgICAgIDgnYjAwMDAxMDAwOiB7b3BfcmVhZCxvcF93cml0ZSxvcF9pbnZlcnR9ID0ge3RtcHJlYWRbM10sdG1wd3JpdGVbM10sdG1waW52ZXJ0WzNdfTsKKyAgICAgOCdiMDAwMDAxMDA6IHtvcF9yZWFkLG9wX3dyaXRlLG9wX2ludmVydH0gPSB7dG1wcmVhZFsyXSx0bXB3cml0ZVsyXSx0bXBpbnZlcnRbMl19OworICAgICA4J2IwMDAwMDAxMDoge29wX3JlYWQsb3Bfd3JpdGUsb3BfaW52ZXJ0fSA9IHt0bXByZWFkWzFdLHRtcHdyaXRlWzFdLHRtcGludmVydFsxXX07CisgICAgIDgnYjAwMDAwMDAxOiB7b3BfcmVhZCxvcF93cml0ZSxvcF9pbnZlcnR9ID0ge3RtcHJlYWRbMF0sdG1wd3JpdGVbMF0sdG1waW52ZXJ0WzBdfTsKKyAgICAgZGVmYXVsdDogICAgIHtvcF9yZWFkLG9wX3dyaXRlLG9wX2ludmVydH0gPSB7dG1wcmVhZFswXSx0bXB3cml0ZVswXSx0bXBpbnZlcnRbMF19OworICAgZW5kY2FzZQorZW5kCisKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvY29yZS9tYmlzdF9wYXRfc2VsLnN2IGIvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfcGF0X3NlbC5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2E1Yzk4Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfcGF0X3NlbC5zdgpAQCAtMCwwICsxLDExNiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIE1CSVNUIFBhdHRlcm4gU2VsZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBtYmlzdF9jdHJsIGNvcmVzIHByb2plY3QgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL21iaXN0X2N0cmwuZ2l0ICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICBUaGlzIGJsb2NrIGludGVncmF0ZSBtYmlzdCBwYXR0ZXJuIHNlbGVjdGlvbiAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4wIC0gMTF0aCBPY3QgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgSW5pdGlhbCBpbnRlZ3JhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2BpbmNsdWRlICJtYmlzdF9kZWYuc3ZoIgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTUJJU1QgRGF0YSBQYXR0ZXJuIFNlbGVjdGlvbiBMb2dpYworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbW9kdWxlIG1iaXN0X3BhdF9zZWwgCisgICAgICMoICBwYXJhbWV0ZXIgQklTVF9BRERSX1dEICAgICAgICAgICA9IDksCisJIHBhcmFtZXRlciBCSVNUX0RBVEFfV0QgICAgICAgICAgID0gMzIsCisJIHBhcmFtZXRlciBCSVNUX0FERFJfU1RBUlQgICAgICAgID0gOSdoMDAwLAorCSBwYXJhbWV0ZXIgQklTVF9BRERSX0VORCAgICAgICAgICA9IDknaDFGOCwKKwkgcGFyYW1ldGVyIEJJU1RfUkVQQUlSX0FERFJfU1RBUlQgPSA5J2gxRkMsCisJIHBhcmFtZXRlciBCSVNUX1JBRF9XRF9JICAgICAgICAgID0gQklTVF9BRERSX1dELAorCSBwYXJhbWV0ZXIgQklTVF9SQURfV0RfTyAgICAgICAgICA9IEJJU1RfQUREUl9XRCkgKAorCisgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgcGF0X2xhc3QsICAgLy8gTGFzdCBwYXR0ZXJuCisgICAgICBvdXRwdXQgIGxvZ2ljIFtCSVNUX0RBVEFfV0QtMTowXSAgcGF0X2RhdGEsICAgLy8gcGF0dGVybiBkYXRhCisgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgc2RvLCAgICAgICAgLy8gc2NhbiBkYXRhIG91dHB1dAorICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgIGNsaywgICAgICAgIC8vIGNsb2NrIAorICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgIHJzdF9uLCAgICAgIC8vIHJlc2V0IAorICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgIHJ1biwgICAgICAgIC8vIHN0b3Agb3Igc3RhcnQgc3RhdGUgbWFjaGluZSAKKyAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICBzY2FuX3NoaWZ0LCAvLyBzY2FuIHNoaWZ0IAorICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgIHNkaSAgICAgICAgIC8vIHNjYW4gaW5wdXQKKworKTsKKworCitsb2dpYyAgICBbQklTVF9EQVRBX1BBVF9TSVpFLTE6MF0gcGF0X3NlbCAgICAgOy8qIFBhdHRlcm4gU2VsZWN0ICAgICovCitsb2dpYyAgICBbNjM6MF0gICAgICAgICAgICAgICAgICAgcGF0dGVybjsgCisgICAgICAgICAgICAgICAgICAgIAoraW50ZWdlciAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ICAgICAgIDsvKiBvdXRwdXQgaW5kZXggKi8KKworCisKKy8vIGxhc3QgcGF0dGVybgorYXNzaWduIHBhdF9sYXN0ID0gcGF0X3NlbFswXTsKKworCisvKiBQYXR0ZXJuIFNlbGVjdGlvbiAqLworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdF9uKSBiZWdpbgorICBpZighcnN0X24pICAgICAgICAgICBwYXRfc2VsIDw9IHsxJ2IxLHsoQklTVF9EQVRBX1BBVF9TSVpFLTEpezEnYjB9fX07CisgIGVsc2UgaWYoc2Nhbl9zaGlmdCkgIHBhdF9zZWwgPD0ge3NkaSwgcGF0X3NlbFtCSVNUX0RBVEFfUEFUX1NJWkUtMToxXX07CisgIGVsc2UgaWYocnVuKSAgICAgICAgIHBhdF9zZWwgPD0ge3BhdF9zZWxbMF0scGF0X3NlbFtCSVNUX0RBVEFfUEFUX1NJWkUtMToxXX07CitlbmQKKworCisvKiBQYXR0ZXJuIFNlbGVjdGlvbiAqLworbG9naWMgWzc6MF0gdG1wX3BhdDsKK2Fsd2F5c19jb21iCitiZWdpbgorICAgdG1wX3BhdCA9IDgnYjAwMDAwMDAwOworICAgdG1wX3BhdFs3OjgtQklTVF9EQVRBX1BBVF9TSVpFXSA9IHBhdF9zZWw7CisgICBjYXNlKHRtcF9wYXQpCisgICAgIDgnYjEwMDAwMDAwOiBwYXR0ZXJuID0gQklTVF9EQVRBX1BBVF9UWVBFMTsKKyAgICAgOCdiMDEwMDAwMDA6IHBhdHRlcm4gPSBCSVNUX0RBVEFfUEFUX1RZUEUyOworICAgICA4J2IwMDEwMDAwMDogcGF0dGVybiA9IEJJU1RfREFUQV9QQVRfVFlQRTM7CisgICAgIDgnYjAwMDEwMDAwOiBwYXR0ZXJuID0gQklTVF9EQVRBX1BBVF9UWVBFNDsKKyAgICAgOCdiMDAwMDEwMDA6IHBhdHRlcm4gPSBCSVNUX0RBVEFfUEFUX1RZUEU1OworICAgICA4J2IwMDAwMDEwMDogcGF0dGVybiA9IEJJU1RfREFUQV9QQVRfVFlQRTY7CisgICAgIDgnYjAwMDAwMDEwOiBwYXR0ZXJuID0gQklTVF9EQVRBX1BBVF9UWVBFNzsKKyAgICAgOCdiMDAwMDAwMDE6IHBhdHRlcm4gPSBCSVNUX0RBVEFfUEFUX1RZUEU4OworICAgICBkZWZhdWx0OiAgICAgcGF0dGVybiA9IEJJU1RfREFUQV9QQVRfVFlQRTE7CisgICBlbmRjYXNlCitlbmQKKworLyogRGF0YSBkaXN0cmlidXRvciAqLworCithbHdheXNfY29tYgorYmVnaW4KKyAgIGZvcihpbmRleCA9IDAgOyBpbmRleCA8IEJJU1RfREFUQV9XRCA7IGluZGV4ID0gaW5kZXggKyAxKSBiZWdpbgorICAgICAgIHBhdF9kYXRhW2luZGV4XSA9IHBhdHRlcm5baW5kZXglNjRdOworICAgZW5kCitlbmQKKworYXNzaWduIHNkbyAgID0gcGF0X3NlbFswXTsKKworZW5kbW9kdWxlCisKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfcmVwYWlyX2FkZHIuc3YgYi92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvY29yZS9tYmlzdF9yZXBhaXJfYWRkci5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Nzg3MWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfcmVwYWlyX2FkZHIuc3YKQEAgLTAsMCArMSwxNTEgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBNQklTVCBBZGRyZXNzIFJlcGFpciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgbWJpc3RfY3RybCBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS9tYmlzdF9jdHJsLmdpdCAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgVGhpcyBibG9jayBpbnRlZ3JhdGUgbWJpc3QgYWRkcmVzcyByZXBhaXIgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMCAtIDExdGggT2N0IDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEluaXRpYWwgaW50ZWdyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKworLy8gQklTVCBhZGRyZXNzIFJlcGFpciBMb2dpYworCitgaW5jbHVkZSAibWJpc3RfZGVmLnN2aCIKKworbW9kdWxlIG1iaXN0X3JlcGFpcl9hZGRyIAorICAgICAjKCAgcGFyYW1ldGVyIEJJU1RfQUREUl9XRCAgICAgICAgICAgPSA5LAorCSBwYXJhbWV0ZXIgQklTVF9EQVRBX1dEICAgICAgICAgICA9IDMyLAorCSBwYXJhbWV0ZXIgQklTVF9BRERSX1NUQVJUICAgICAgICA9IDknaDAwMCwKKwkgcGFyYW1ldGVyIEJJU1RfQUREUl9FTkQgICAgICAgICAgPSA5J2gxRjgsCisJIHBhcmFtZXRlciBCSVNUX1JFUEFJUl9BRERSX1NUQVJUID0gOSdoMUZDLAorCSBwYXJhbWV0ZXIgQklTVF9SQURfV0RfSSAgICAgICAgICA9IEJJU1RfQUREUl9XRCwKKwkgcGFyYW1ldGVyIEJJU1RfUkFEX1dEX08gICAgICAgICAgPSBCSVNUX0FERFJfV0QpICgKKwkKKyAgICBvdXRwdXQgbG9naWMgW0JJU1RfUkFEX1dEX08tMTowXSBBZGRyZXNzT3V0LAorICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgIENvcnJlY3QsCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgc2RvLCAgICAgICAgIC8vICBzY2FuIGRhdGEgb3V0cHV0CisKKyAgICBpbnB1dCBsb2dpYyBbQklTVF9SQURfV0RfSS0xOjBdICBBZGRyZXNzSW4sCisgICAgaW5wdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgY2xrLAorICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLAorICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgIEVycm9yLAorICAgIGlucHV0IGxvZ2ljIFtCSVNUX1JBRF9XRF9JLTE6MF0gIEVycm9yQWRkciwKKyAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICBiaXN0X2xvYWQsCisgICAgaW5wdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgYmlzdF9zaGlmdCwgIC8vICBzaGlmdCBzY2FuIGlucHV0CisgICAgaW5wdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgc2RpICAgICAgICAgIC8vICBzY2FuIGRhdGEgaW5wdXQgCisKKworKTsKKworbG9naWMgWzM6MF0gICBFcnJvckNudDsgLy8gQXNzdW1lZCBNYXhpbXVtIEVycm9yIGNvcnJlY3Rpb24gaXMgbGVzcyB0aGFuIDE2CisKK2xvZ2ljIFtCSVNUX1JBRF9XRF9JLTE6MF0gUmVwYWlyTWVtIFswOkJJU1RfRVJSX0xJTUlULTFdOworaW50ZWdlciBpOworCisKK2Fsd2F5c0AocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RfbikKK2JlZ2luCisgICBpZighcnN0X24pIGJlZ2luCisgICAgIEVycm9yQ250ICAgIDw9ICcwOworICAgICBDb3JyZWN0IDw9ICcwOworICAgICAvLyBJbml0aWFsaXplIHRoZSBSZXBhaXIgUkFNIGZvciBTQ0FOIHB1cnBvc2UKKyAgICAgZm9yKGkgPTA7IGkgPCBCSVNUX0VSUl9MSU1JVDsgaSA9IGkrMSkgYmVnaW4KKyAgICAgICAgUmVwYWlyTWVtW2ldID0gJ2gwOworICAgICBlbmQKKyAgIGVuZCBlbHNlIGlmKEVycm9yKSBiZWdpbgorICAgICAgaWYoRXJyb3JDbnQgPD0gQklTVF9FUlJfTElNSVQpIGJlZ2luCisgICAgICAgICAgRXJyb3JDbnQgICAgICAgICAgICA8PSBFcnJvckNudCsxOworICAgICAgICAgIFJlcGFpck1lbVtFcnJvckNudF0gPD0gRXJyb3JBZGRyOworICAgICAgICAgIENvcnJlY3QgICAgICAgICA8PSAxJ2IxOworICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgICBDb3JyZWN0ICAgICAgICAgPD0gMSdiMDsKKyAgICAgIGVuZAorICAgZW5kCitlbmQKKworaW50ZWdlciBpbmRleDsKKworYWx3YXlzX2NvbWIKK2JlZ2luCisgICBBZGRyZXNzT3V0ID0gQWRkcmVzc0luOworICAgZm9yKGluZGV4PTA7IGluZGV4IDwgQklTVF9FUlJfTElNSVQ7IGluZGV4PWluZGV4KzEpIGJlZ2luCisgICAgICBpZihFcnJvckNudCA+IGluZGV4ICYmIEFkZHJlc3NJbiA9PSBSZXBhaXJNZW1baW5kZXhdKSBiZWdpbgorCSAgQWRkcmVzc091dCA9IEJJU1RfUkVQQUlSX0FERFJfU1RBUlQraW5kZXg7CisJICAkZGlzcGxheSgiU1RBVFVTOiBNQklTVCBBRERSRVNTIFJFUEFJUjogJW0gPT4gT2xkIEFkZHI6ICV4IE5leCBBZGRyOiAleCIsQWRkcmVzc0luLEFkZHJlc3NPdXQpOworICAgICAgZW5kCisgICBlbmQKK2VuZAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU2VyaWFsIHNoaWZ0aW5nIHRoZSBSZXBhaXIgYWRkcmVzcworKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50ZWdlciBqOworbG9naWMgWzA6QklTVF9FUlJfTElNSVQtMV0gc2RpX2luOworbG9naWMgWzA6QklTVF9FUlJfTElNSVQtMV0gc2RvX291dDsKKy8vIERhaXN5IGNoYWluIHRoZSBTZXJpYWwgSW4vT1VUIAorYWx3YXlzX2NvbWIgYmVnaW4KKyAgIGZvcihqID0wOyBqIDwgQklTVF9FUlJfTElNSVQ7IGo9aisxKSBiZWdpbgorICAgICAgc2RpX2luW2pdID0oaj09MCkgPyAgc2RpIDogIHNkb19vdXRbai0xXTsKKyAgIGVuZAorZW5kCisKK2Fzc2lnbiAgc2RvID0gc2RvX291dFtCSVNUX0VSUl9MSU1JVC0xXTsKKworZ2VudmFyIG5vOworZ2VuZXJhdGUgCitmb3IgKG5vID0gMDsgJHVuc2lnbmVkKG5vKSA8IEJJU1RfRVJSX0xJTUlUOyBubz1ubysxKSBiZWdpbiA6IG51bQorCisgc2VyX3NoaWZ0CisgICAgICMoLldEKDE2KSkgdV9zaGlmdCgKKworICAgIC8vIE1hc3RlciBQb3J0CisgICAgICAgLnJzdF9uICAgICAgIChyc3RfbiAgICAgICAgICksCisgICAgICAgLmNsayAgICAgICAgIChjbGsgICAgICAgICAgICksIAorICAgICAgIC5sb2FkICAgICAgICAoYmlzdF9sb2FkICAgICApLAorICAgICAgIC5zaGlmdCAgICAgICAoYmlzdF9zaGlmdCAgICApLAorICAgICAgIC5sb2FkX2RhdGEgICAoUmVwYWlyTWVtW25vXSApLCAKKyAgICAgICAuc2RpICAgICAgICAgKHNkaV9pbltub10gICAgKSwgIAorICAgICAgIC5zZG8gICAgICAgICAoc2RvX291dFtub10gICApICAKKworCisgICAgKTsKK2VuZAorZW5kZ2VuZXJhdGUKKworZW5kbW9kdWxlCisKKworCisKKworCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvY29yZS9tYmlzdF9zdGlfc2VsLnN2IGIvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3Rfc3RpX3NlbC5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTlkYzlmCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3Rfc3RpX3NlbC5zdgpAQCAtMCwwICsxLDEwNSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIE1CSVNUIFN0aW11bHVzIFNlbGVjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBtYmlzdF9jdHJsIGNvcmVzIHByb2plY3QgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL21iaXN0X2N0cmwuZ2l0ICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICBUaGlzIGJsb2NrIGludGVncmF0ZSBzdGltdWx1cyBzbGVjdGlpb24gICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4wIC0gMTF0aCBPY3QgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgSW5pdGlhbCBpbnRlZ3JhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworCitgaW5jbHVkZSAibWJpc3RfZGVmLnN2aCIKKy8vIGJpc3Qgc3RpbXVsdXMgc2VsZWN0aW9uCisKK21vZHVsZSBtYmlzdF9zdGlfc2VsIAorICAgICAjKCAgcGFyYW1ldGVyIEJJU1RfQUREUl9XRCAgICAgICAgICAgPSA5LAorCSBwYXJhbWV0ZXIgQklTVF9EQVRBX1dEICAgICAgICAgICA9IDMyLAorCSBwYXJhbWV0ZXIgQklTVF9BRERSX1NUQVJUICAgICAgICA9IDknaDAwMCwKKwkgcGFyYW1ldGVyIEJJU1RfQUREUl9FTkQgICAgICAgICAgPSA5J2gxRjgsCisJIHBhcmFtZXRlciBCSVNUX1JFUEFJUl9BRERSX1NUQVJUID0gOSdoMUZDLAorCSBwYXJhbWV0ZXIgQklTVF9SQURfV0RfSSAgICAgICAgICA9IEJJU1RfQUREUl9XRCwKKwkgcGFyYW1ldGVyIEJJU1RfUkFEX1dEX08gICAgICAgICAgPSBCSVNUX0FERFJfV0QpICgKKworCW91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICBzZG8gICAgICAgICAgICwgIC8vIFNjYW4gRGF0YSBPdXQKKwlvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9zdGltdWx1cyAsICAvLyBsYXN0IHN0aW11bHVzCisgICAgICAgIG91dHB1dCBsb2dpYyAgW0JJU1RfU1RJX1dELTE6MF0gICAgICBzdGltdWx1cyAgICAgICwKKworCWlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrICAgICAgICAgICAsICAvLyBDbG9jaworCWlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X24gICAgICAgICAsICAvLyBSZXNldCAKKwlpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5fc2hpZnQgICAgLCAgLy8gU2NhbiBTaGlmdAorCWlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgc2RpICAgICAgICAgICAsICAvLyBTY2FuIGRhdGEgaW4KKwlpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1biAgICAgICAgICAgICAgLy8gUnVuIAorCispOworCitsb2dpYyAgW0JJU1RfU1RJX1NJWkUtMTowXSAgICBzdGlfc2VsICAgICAgOyAvLyBTdGltdWxhdGlvbiBTZWxlY3Rpb24KK2xvZ2ljICBbNzowXSAgICAgICAgICAgICAgICAgIHRtcF9zdGkgICAgICA7IC8vIFdhcm5pbmc6IE1heCBTdGltdWx1cyBhc3NtZWQgaXMgOAorCisKKworLyogUGF0dGVybiBTZWxlY3Rpb24gKi8KKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RfbikgYmVnaW4KKyAgaWYoIXJzdF9uKSAgICAgICAgICAgc3RpX3NlbCA8PSB7MSdiMSx7KEJJU1RfU1RJX1NJWkUtMSl7MSdiMH19fTsKKyAgZWxzZSBpZihzY2FuX3NoaWZ0KSAgc3RpX3NlbCA8PSB7c2RpLCBzdGlfc2VsW0JJU1RfU1RJX1NJWkUtMToxXX07CisgIGVsc2UgaWYocnVuKSAgICAgICAgIHN0aV9zZWwgPD0ge3N0aV9zZWxbMF0sc3RpX3NlbFtCSVNUX1NUSV9TSVpFLTE6MV19OworZW5kCisKKworLyogUGF0dGVybiBTZWxlY3Rpb24gKi8KK2Fsd2F5c19jb21iCitiZWdpbgorICAgdG1wX3N0aSA9IDgnYjAwMDAwMDAwOworICAgdG1wX3N0aVs3OjgtQklTVF9TVElfU0laRV0gPSBzdGlfc2VsOworICAgY2FzZSh0bXBfc3RpKQorICAgICA4J2IxMDAwMDAwMDogc3RpbXVsdXMgPSBCSVNUX1NUSU1VTFVTX1RZUEUxOworICAgICA4J2IwMTAwMDAwMDogc3RpbXVsdXMgPSBCSVNUX1NUSU1VTFVTX1RZUEUyOworICAgICA4J2IwMDEwMDAwMDogc3RpbXVsdXMgPSBCSVNUX1NUSU1VTFVTX1RZUEUzOworICAgICA4J2IwMDAxMDAwMDogc3RpbXVsdXMgPSBCSVNUX1NUSU1VTFVTX1RZUEU0OworICAgICA4J2IwMDAwMTAwMDogc3RpbXVsdXMgPSBCSVNUX1NUSU1VTFVTX1RZUEU1OworICAgICA4J2IwMDAwMDEwMDogc3RpbXVsdXMgPSBCSVNUX1NUSU1VTFVTX1RZUEU2OworICAgICA4J2IwMDAwMDAxMDogc3RpbXVsdXMgPSBCSVNUX1NUSU1VTFVTX1RZUEU3OworICAgICA4J2IwMDAwMDAwMTogc3RpbXVsdXMgPSBCSVNUX1NUSU1VTFVTX1RZUEU4OworICAgICBkZWZhdWx0OiAgICAgc3RpbXVsdXMgPSBCSVNUX1NUSU1VTFVTX1RZUEUxOworICAgZW5kY2FzZQorZW5kCisKKworLyogQXNzaWduIG91dHB1dCAgKi8KKworYXNzaWduIHNkbyAgICAgICAgICAgPSBzdGlfc2VsWzBdOworYXNzaWduIGxhc3Rfc3RpbXVsdXMgPSBzdGlfc2VsWzBdOworCisKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvdG9wL21iaXN0X3RvcC5zdiBiL3Zlcmlsb2cvcnRsL21iaXN0L3NyYy90b3AvbWJpc3RfdG9wLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNmNlMTMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvdG9wL21iaXN0X3RvcC5zdgpAQCAtMCwwICsxLDU2NiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBNQklTVCBUT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgbWJpc3RfY3RybCBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS9tYmlzdF9jdHJsLmdpdCAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgVGhpcyBibG9jayBpbnRlZ3JhdGUgbWJpc3QgY29udHJvbGxlciB3aXRoIHJvdyAgICAgICAgICAvLy8vCisvLy8vICAgICAgcmVkZW5kZW5jeSBmZWF0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMCAtIDExdGggT2N0IDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEluaXRpYWwgaW50ZWdyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMSAtIDI2dGggT2N0IDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEZpeGVkIEVycm9yIEFkZHJlc3MgYXJlIHNlcmlhbCBzaGlmdGVkIHRocm91Z2ggICAgICAvLy8vCisvLy8vICAgICAgICAgIHNkaS9zZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMiAtIDE1IERlYyAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIGNvbW1vbiBNQklTVCBmb3IgNCBTUkFNICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMyAtIDI5dGggRGVjIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHlvc3lzIHN5bnRoZXNpcyBpc3N1ZSBmb3IgdHdvIGRpbWVuc2lvbiB2YXJpYWJsZSAgICAvLy8vCisvLy8vICAgICAgICAgIGNoYW5nZWQgdGhlIHZhcmlhYmxlIGRlZmluYXRpb24gZnJvbSBsb2dpYyB0byB3aXJlICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2BpbmNsdWRlICJtYmlzdF9kZWYuc3ZoIgorbW9kdWxlIG1iaXN0X3RvcAorICAgICAjKCAgCisgICAgICAgICBwYXJhbWV0ZXIgQklTVF9OT19TUkFNICAgICAgICAgICA9IDQsCisJIHBhcmFtZXRlciBCSVNUX0FERFJfV0QgICAgICAgICAgID0gOSwKKwkgcGFyYW1ldGVyIEJJU1RfREFUQV9XRCAgICAgICAgICAgPSAzMiwKKwkgcGFyYW1ldGVyIEJJU1RfQUREUl9TVEFSVCAgICAgICAgPSA5J2gwMDAsCisJIHBhcmFtZXRlciBCSVNUX0FERFJfRU5EICAgICAgICAgID0gOSdoMUZCLAorCSBwYXJhbWV0ZXIgQklTVF9SRVBBSVJfQUREUl9TVEFSVCA9IDknaDFGQywKKwkgcGFyYW1ldGVyIEJJU1RfUkFEX1dEX0kgICAgICAgICAgPSBCSVNUX0FERFJfV0QsCisJIHBhcmFtZXRlciBCSVNUX1JBRF9XRF9PICAgICAgICAgID0gQklTVF9BRERSX1dEKSAoCisKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIGlub3V0IHZjY2QxLAkvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgIGlub3V0IHZzc2QxLAkvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisKKyAgICAvLyBDbG9jayBTa2V3IEFkanVzdAorICAgICAgIGlucHV0ICB3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19pbnQsIAorICAgICAgIG91dHB1dCB3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19tYmlzdCwKKyAgICAgICBpbnB1dCAgd2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGNmZ19jc2thX21iaXN0LCAvLyBjbG9jayBza2V3IGFkanVzdCBmb3Igd2ViIGhvc3QKKworCWlucHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLAorCisJLy8gTUJJU1QgSS9GCisJaW5wdXQgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpc3RfZW4sCisJaW5wdXQgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X3J1biwKKwlpbnB1dCB3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpc3Rfc2hpZnQsCisJaW5wdXQgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X2xvYWQsCisJaW5wdXQgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X3NkaSwKKworCW91dHB1dCB3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgYmlzdF9lcnJvcl9jbnQwLAorCW91dHB1dCB3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgYmlzdF9lcnJvcl9jbnQxLAorCW91dHB1dCB3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgYmlzdF9lcnJvcl9jbnQyLAorCW91dHB1dCB3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgYmlzdF9lcnJvcl9jbnQzLAorCW91dHB1dCB3aXJlIFtCSVNUX05PX1NSQU0tMTowXSAgICAgICAgYmlzdF9jb3JyZWN0ICAgLAorCW91dHB1dCB3aXJlIFtCSVNUX05PX1NSQU0tMTowXSAgICAgICAgYmlzdF9lcnJvciAgICAgLAorCW91dHB1dCB3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9kb25lLAorCW91dHB1dCB3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9zZG8sCisKKworICAgICAgICAvLyBXQiBJL0YKKyAgICAgICAgaW5wdXQgICB3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICB3Yl9jbGtfaSwgIC8vIFN5c3RlbSBjbG9jaworICAgICAgICBpbnB1dCAgIHdpcmUgICAgICAgICAgICAgICAgICAgICAgICAgIHdiX2NsazJfaSwgLy8gU3lzdGVtIGNsb2NrMiBpcyBubyBjdHMKKyAgICAgICAgaW5wdXQgICB3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1fcmVxLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKwlpbnB1dCAgIHdpcmUgWyhCSVNUX05PX1NSQU0rMSkvMi0xOjBdIG1lbV9jcywKKyAgICAgICAgaW5wdXQgICB3aXJlIFtCSVNUX0FERFJfV0QtMTowXSAgICAgICBtZW1fYWRkciwgIC8vIGFkZHJlc3MKKyAgICAgICAgaW5wdXQgICB3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1fd2UgLCAgLy8gd3JpdGUKKyAgICAgICAgaW5wdXQgICB3aXJlIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgICBtZW1fd2RhdGEsICAvLyBkYXRhIG91dHB1dAorICAgICAgICBpbnB1dCAgIHdpcmUgW0JJU1RfREFUQV9XRC84LTE6MF0gICAgIG1lbV93bWFzaywgIC8vIGJ5dGUgZW5hYmxlCisgICAgICAgIG91dHB1dCAgd2lyZSBbQklTVF9EQVRBX1dELTE6MF0gICAgICAgbWVtX3JkYXRhLCAgLy8gZGF0YSBpbnB1dAorCisgICAgIC8vIHRvd2FyZHMgbWVtb3J5CisgICAgIC8vIFBPUlQtQQorICAgICAgICBvdXRwdXQgd2lyZSAgIFtCSVNUX05PX1NSQU0tMTowXSAgICAgIG1lbV9jbGtfYSwKKyAgICAgICAgb3V0cHV0IHdpcmUgICBbQklTVF9BRERSX1dELTE6MF0gICAgICBtZW1fYWRkcl9hMCwKKyAgICAgICAgb3V0cHV0IHdpcmUgICBbQklTVF9BRERSX1dELTE6MF0gICAgICBtZW1fYWRkcl9hMSwKKyAgICAgICAgb3V0cHV0IHdpcmUgICBbQklTVF9BRERSX1dELTE6MF0gICAgICBtZW1fYWRkcl9hMiwKKyAgICAgICAgb3V0cHV0IHdpcmUgICBbQklTVF9BRERSX1dELTE6MF0gICAgICBtZW1fYWRkcl9hMywKKyAgICAgICAgb3V0cHV0IHdpcmUgICBbQklTVF9OT19TUkFNLTE6MF0gICAgICBtZW1fY2VuX2EsCisgICAgICAgIG91dHB1dCB3aXJlICAgW0JJU1RfTk9fU1JBTS0xOjBdICAgICAgbWVtX3dlYl9hLAorICAgICAgICBvdXRwdXQgd2lyZSAgIFtCSVNUX0RBVEFfV0QvOC0xOjBdICAgIG1lbV9tYXNrX2EwLAorICAgICAgICBvdXRwdXQgd2lyZSAgIFtCSVNUX0RBVEFfV0QvOC0xOjBdICAgIG1lbV9tYXNrX2ExLAorICAgICAgICBvdXRwdXQgd2lyZSAgIFtCSVNUX0RBVEFfV0QvOC0xOjBdICAgIG1lbV9tYXNrX2EyLAorICAgICAgICBvdXRwdXQgd2lyZSAgIFtCSVNUX0RBVEFfV0QvOC0xOjBdICAgIG1lbV9tYXNrX2EzLAorICAgICAgICBvdXRwdXQgd2lyZSAgIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgIG1lbV9kaW5fYTAsCisgICAgICAgIG91dHB1dCB3aXJlICAgW0JJU1RfREFUQV9XRC0xOjBdICAgICAgbWVtX2Rpbl9hMSwKKyAgICAgICAgb3V0cHV0IHdpcmUgICBbQklTVF9EQVRBX1dELTE6MF0gICAgICBtZW1fZGluX2EyLAorICAgICAgICBvdXRwdXQgd2lyZSAgIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgIG1lbV9kaW5fYTMsCisKKyAgICAgICAgaW5wdXQgIHdpcmUgICBbQklTVF9EQVRBX1dELTE6MF0gICAgICBtZW1fZG91dF9hMCwKKyAgICAgICAgaW5wdXQgIHdpcmUgICBbQklTVF9EQVRBX1dELTE6MF0gICAgICBtZW1fZG91dF9hMSwKKyAgICAgICAgaW5wdXQgIHdpcmUgICBbQklTVF9EQVRBX1dELTE6MF0gICAgICBtZW1fZG91dF9hMiwKKyAgICAgICAgaW5wdXQgIHdpcmUgICBbQklTVF9EQVRBX1dELTE6MF0gICAgICBtZW1fZG91dF9hMywKKworCisgICAgIC8vIFBPUlQtQgorICAgICAgICBvdXRwdXQgd2lyZSBbQklTVF9OT19TUkFNLTE6MF0gICAgICAgIG1lbV9jbGtfYiwKKyAgICAgICAgb3V0cHV0IHdpcmUgW0JJU1RfTk9fU1JBTS0xOjBdICAgICAgICBtZW1fY2VuX2IsCisgICAgICAgIG91dHB1dCB3aXJlICAgW0JJU1RfQUREUl9XRC0xOjBdICAgICAgbWVtX2FkZHJfYjAsCisgICAgICAgIG91dHB1dCB3aXJlICAgW0JJU1RfQUREUl9XRC0xOjBdICAgICAgbWVtX2FkZHJfYjEsCisgICAgICAgIG91dHB1dCB3aXJlICAgW0JJU1RfQUREUl9XRC0xOjBdICAgICAgbWVtX2FkZHJfYjIsCisgICAgICAgIG91dHB1dCB3aXJlICAgW0JJU1RfQUREUl9XRC0xOjBdICAgICAgbWVtX2FkZHJfYjMKKworCisKKworKTsKKworcGFyYW1ldGVyICBOT19TUkFNX1dEID0gKEJJU1RfTk9fU1JBTSsxKS8yOworCisvLyBGVU5DVElPTkFMIFBPUlQgCit3aXJlICAgICAgICAgICAgICAgICAgICBmdW5jX2Nsa1swOkJJU1RfTk9fU1JBTS0xXTsKK3dpcmUgICAgICAgICAgICAgICAgICAgIGZ1bmNfY2VuWzA6QklTVF9OT19TUkFNLTFdOword2lyZSAgICAgICAgICAgICAgICAgICAgZnVuY193ZWJbMDpCSVNUX05PX1NSQU0tMV07Cit3aXJlIFtCSVNUX0RBVEFfV0QvOC0xOjBdZnVuY19tYXNrWzA6QklTVF9OT19TUkFNLTFdOword2lyZSAgW0JJU1RfQUREUl9XRC0xOjBdZnVuY19hZGRyWzA6QklTVF9OT19TUkFNLTFdOword2lyZSAgW0JJU1RfREFUQV9XRC0xOjBdZnVuY19kb3V0WzA6QklTVF9OT19TUkFNLTFdOword2lyZSAgW0JJU1RfREFUQV9XRC0xOjBdZnVuY19kaW5bMDpCSVNUX05PX1NSQU0tMV07CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9jYWwgdmFyaWFibGUgZGVmaW5hdGlvbgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLword2lyZSAgICAgICAgICAgICAgICAgICAgc3JzdF9uICAgICA7IC8vIHN5bmMgcmVzZXQgdy5yLnQgYmlzdF9jbGsKK3dpcmUgICAgICAgICAgICAgICAgICAgIGNtZF9waGFzZSAgOyAgLy8gQ29tbWFuZCBQaGFzZQord2lyZSAgICAgICAgICAgICAgICAgICAgY21wX3BoYXNlICA7ICAvLyBDb21wYXJlIFBoYXNlCit3aXJlICAgICAgICAgICAgICAgICAgICBydW5fb3AgICAgIDsgIC8vIFJ1biBuZXh0IE9wZXJhdGlvbgord2lyZSAgICAgICAgICAgICAgICAgICAgcnVuX2FkZHIgICA7ICAvLyBSdW4gTmV4dCBBZGRyZXNzCit3aXJlICAgICAgICAgICAgICAgICAgICBydW5fc3RpICAgIDsgIC8vIFJ1biBOZXh0IFN0aW11bHVzCit3aXJlICAgICAgICAgICAgICAgICAgICBydW5fcGF0ICAgIDsgIC8vIFJ1biBOZXh0IFBhdHRlcm4KK3dpcmUgICAgICAgICAgICAgICAgICAgIG9wX3VwZG93biAgOyAgLy8gQWRyZXNzIHVwZG93biBkaXJlY3Rpb24KK3dpcmUgICAgICAgICAgICAgICAgICAgIGxhc3RfYWRkciAgOyAgLy8gbGFzdCBhZGRyZXNzIGluZGljYXRpb24KK3dpcmUgICAgICAgICAgICAgICAgICAgIGxhc3Rfc3RpICAgOyAgLy8gbGFzdCBzdGltdWx1cword2lyZSAgICAgICAgICAgICAgICAgICAgbGFzdF9vcCAgICA7ICAvLyBsYXN0IG9wZXJhdGlvbgord2lyZSAgICAgICAgICAgICAgICAgICAgbGFzdF9wYXQgICA7ICAvLyBsYXN0IHBhdHRlcm4KK3dpcmUgW0JJU1RfREFUQV9XRC0xOjBdIHBhdF9kYXRhICAgOyAgLy8gU2VsZWN0ZWQgRGF0YSBQYXR0ZXJuCit3aXJlIFtCSVNUX1NUSV9XRC0xOjBdICBzdGltdWx1cyAgIDsgIC8vIGN1cnJlbnQgc3RpbXVsdXMKK3dpcmUgICAgICAgICAgICAgICAgICAgIGNvbXBhcmUgICAgOyAgLy8gY29tcGFyZSBkYXRhCit3aXJlICAgICAgICAgICAgICAgICAgICBvcF9yZXBlYXRmbGFnOword2lyZSAgICAgICAgICAgICAgICAgICAgb3BfcmV2ZXJzZTsKK3dpcmUgICAgICAgICAgICAgICAgICAgIG9wX3JlYWQgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICBvcF93cml0ZSAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgIG9wX2ludmVydCAgIDsKKworCit3aXJlICAgICAgICAgICAgICAgICAgICBiaXN0X2Vycm9yX2NvcnJlY3RbMDpCSVNUX05PX1NSQU0tMV0gIDsKK3dpcmUgIFtCSVNUX0FERFJfV0QtMTowXWJpc3RfZXJyb3JfYWRkclswOkJJU1RfTk9fU1JBTS0xXSA7IC8vIGJpc3QgYWRkcmVzcworCit3aXJlICBbQklTVF9BRERSX1dELTE6MF1iaXN0X2FkZHIgICAgICAgOyAvLyBiaXN0IGFkZHJlc3MKK3dpcmUgW0JJU1RfREFUQV9XRC0xOjBdIGJpc3Rfd2RhdGEgICAgICA7IC8vIGJpc3Qgd3JpdGUgZGF0YQord2lyZSAgICAgICAgICAgICAgICAgICAgYmlzdF93ciAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgIGJpc3RfcmQgICAgICAgICA7Cit3aXJlIFtCSVNUX0RBVEFfV0QtMTowXSB3Yl9kYXRbMDpCSVNUX05PX1NSQU0tMV07ICAvLyBkYXRhIGlucHV0CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEFzIHlvc3lzIGRvZXMgbm90IHN1cHBvcnQgdHdvIGRpbWVuc2lvbmFsIHZhciwgCisvLyBjb252ZXJ0aW5nIGl0IHNpbmdsZSBkaW1lbnNpb24KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpcmUgWzM6MF0gICAgICAgICAgICAgIGJpc3RfZXJyb3JfY250X2kgWzA6QklTVF9OT19TUkFNLTFdOworCithc3NpZ24gYmlzdF9lcnJvcl9jbnQwID0gYmlzdF9lcnJvcl9jbnRfaVswXTsKK2Fzc2lnbiBiaXN0X2Vycm9yX2NudDEgPSBiaXN0X2Vycm9yX2NudF9pWzFdOworYXNzaWduIGJpc3RfZXJyb3JfY250MiA9IGJpc3RfZXJyb3JfY250X2lbMl07Cithc3NpZ24gYmlzdF9lcnJvcl9jbnQzID0gYmlzdF9lcnJvcl9jbnRfaVszXTsKKworCisvLyBUb3dhcmRzIE1FTU9SWSBQT1JUIC0gQQord2lyZSAgIFtCSVNUX0FERFJfV0QtMTowXSAgICAgIG1lbV9hZGRyX2FfaVswOkJJU1RfTk9fU1JBTS0xXTsKK3dpcmUgW0JJU1RfREFUQV9XRC84LTE6MF0gICAgICBtZW1fbWFza19hX2lbMDpCSVNUX05PX1NSQU0tMV07Cit3aXJlICAgW0JJU1RfREFUQV9XRC0xOjBdICAgICAgbWVtX2RvdXRfYV9pWzA6QklTVF9OT19TUkFNLTFdOword2lyZSAgIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgIG1lbV9kaW5fYV9pWzA6QklTVF9OT19TUkFNLTFdOworCithc3NpZ24gbWVtX2FkZHJfYTAgPSBtZW1fYWRkcl9hX2lbMF07Cithc3NpZ24gbWVtX2FkZHJfYTEgPSBtZW1fYWRkcl9hX2lbMV07Cithc3NpZ24gbWVtX2FkZHJfYTIgPSBtZW1fYWRkcl9hX2lbMl07Cithc3NpZ24gbWVtX2FkZHJfYTMgPSBtZW1fYWRkcl9hX2lbM107CisKK2Fzc2lnbiBtZW1fZGluX2EwID0gbWVtX2Rpbl9hX2lbMF07Cithc3NpZ24gbWVtX2Rpbl9hMSA9IG1lbV9kaW5fYV9pWzFdOworYXNzaWduIG1lbV9kaW5fYTIgPSBtZW1fZGluX2FfaVsyXTsKK2Fzc2lnbiBtZW1fZGluX2EzID0gbWVtX2Rpbl9hX2lbM107CisKK2Fzc2lnbiBtZW1fbWFza19hMD0gbWVtX21hc2tfYV9pWzBdOworYXNzaWduIG1lbV9tYXNrX2ExPSBtZW1fbWFza19hX2lbMV07Cithc3NpZ24gbWVtX21hc2tfYTI9IG1lbV9tYXNrX2FfaVsyXTsKK2Fzc2lnbiBtZW1fbWFza19hMz0gbWVtX21hc2tfYV9pWzNdOworCisvLyBGUk9NIE1FTU9SWQorYXNzaWduIG1lbV9kb3V0X2FfaVswXSA9IG1lbV9kb3V0X2EwOworYXNzaWduIG1lbV9kb3V0X2FfaVsxXSA9IG1lbV9kb3V0X2ExOworYXNzaWduIG1lbV9kb3V0X2FfaVsyXSA9IG1lbV9kb3V0X2EyOworYXNzaWduIG1lbV9kb3V0X2FfaVszXSA9IG1lbV9kb3V0X2EzOworCisvLyBUb3dhcmRzIE1FTU9SWSBQT1JUIC0gQQorYXNzaWduIG1lbV9jbGtfYiAgID0gJ2IwOworYXNzaWduIG1lbV9jZW5fYiAgID0gJ2IwOworYXNzaWduIG1lbV9hZGRyX2IwID0gJ2IwOworYXNzaWduIG1lbV9hZGRyX2IxID0gJ2IwOworYXNzaWduIG1lbV9hZGRyX2IyID0gJ2IwOworYXNzaWduIG1lbV9hZGRyX2IzID0gJ2IwOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTWFuYWdlIHRoZSBTREkgPT4gU0RPIERpYXN5IGNoYWluCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFNESSA9PiBTRE8gZGlhc3kgY2hhaW4KKy8vIGJpc3Rfc2RpID0+IGJpc3RfYWRkcl9zZG8gPT4gIGJpc3Rfc3RpX3NkbyA9PiAgYmlzdF9vcF9zZG8gPT4gYmlzdF9wYXRfc2RvID0+IGJpc3Rfc2RvCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpcmUgICAgICAgICAgICAgICAgICAgIGJpc3RfYWRkcl9zZG8gICA7ICAgICAgICAgICAgICAgICAKK3dpcmUgICAgICAgICAgICAgICAgICAgIGJpc3Rfc3RpX3NkbyAgICA7ICAgICAgICAgICAgICAgICAKK3dpcmUgICAgICAgICAgICAgICAgICAgIGJpc3Rfb3Bfc2RvICAgICA7ICAgICAgICAgICAgICAgICAKK3dpcmUgICAgICAgICAgICAgICAgICAgIGJpc3RfcGF0X3NkbyAgICA7ICAgICAgICAgICAgICAgICAKKword2lyZSAgICAgICAgICAgICAgICAgICAgYmlzdF9tc19zZGlbMDpCSVNUX05PX1NSQU0tMV07Cit3aXJlICAgICAgICAgICAgICAgICAgICBiaXN0X21zX3Nkb1swOkJJU1RfTk9fU1JBTS0xXTsKKworLy8gQWRqdXN0IHRoZSBTREkgPT4gU0RPIERhaXN5IGNoYWluCithc3NpZ24gYmlzdF9tc19zZGlbMF0gPSBiaXN0X3BhdF9zZG87Cithc3NpZ24gYmlzdF9tc19zZGlbMV0gPSBiaXN0X21zX3Nkb1swXTsKK2Fzc2lnbiBiaXN0X21zX3NkaVsyXSA9IGJpc3RfbXNfc2RvWzFdOworYXNzaWduIGJpc3RfbXNfc2RpWzNdID0gYmlzdF9tc19zZG9bMl07Cithc3NpZ24gYmlzdF9zZG8gPSBiaXN0X21zX3Nkb1szXTsKKworLy8gUGljayB0aGUgY29ycmVjdCByZWFkIHBhdGgKK2Fzc2lnbiBtZW1fcmRhdGEgPSB3Yl9kYXRbbWVtX2NzXTsKKworYXNzaWduIGJpc3Rfd3IgPSAoY21kX3BoYXNlICYmIG9wX3dyaXRlKTsKK2Fzc2lnbiBiaXN0X3JkID0gKGNtZF9waGFzZSAmJiBvcF9yZWFkKTsKKworYXNzaWduIGNvbXBhcmUgICAgPSAoY21wX3BoYXNlICYmIG9wX3JlYWQpOworYXNzaWduIGJpc3Rfd2RhdGEgPSAob3BfaW52ZXJ0KSA/IH5wYXRfZGF0YSA6IHBhdF9kYXRhOworCisvLyBDbG9jayBUcmVlIGJyYW5jaGluZyB0byBhdm9pZCBjbG9jayBsYXRlbmN5IHRvd2FyZHMgU1JBTSBwYXRoCit3aXJlIHdiX2Nsa19iMSx3Yl9jbGtfYjI7CisvL2N0ZWNoX2Nsa19idWYgdV9jdHNfd2JfY2xrX2IxICguQSAod2JfY2xrX2kpLCAuIFgod2JfY2xrX2IxKSk7CisvL2N0ZWNoX2Nsa19idWYgdV9jdHNfd2JfY2xrX2IyICguQSAod2JfY2xrX2kpLCAuIFgod2JfY2xrX2IyKSk7CisKKy8vIHdiX2hvc3QgY2xvY2sgc2tldyBjb250cm9sCitjbGtfc2tld19hZGp1c3QgdV9za2V3X21iaXN0CisgICAgICAgKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgICAgICAgICAudmNjZDEgICAgICAodmNjZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgICAgICAgICAgICAgLnZzc2QxICAgICAgKHZzc2QxICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorCSAgICAgICAuY2xrX2luICAgICAod2JkX2Nsa19pbnQgICAgICAgICAgICAgICAgKSwgCisJICAgICAgIC5zZWwgICAgICAgIChjZmdfY3NrYV9tYmlzdCAgICAgICAgICAgICApLCAKKwkgICAgICAgLmNsa19vdXQgICAgKHdiZF9jbGtfbWJpc3QgICAgICAgICAgICAgICkgCisgICAgICAgKTsKKworcmVzZXRfc3luYyAgIHVfcmVzZXRfc3luYyAoCisJICAgICAgLnNjYW5fbW9kZSAgKDEnYjAgKSwKKyAgICAgICAgICAgICAgLmRjbGsgICAgICAgKHdiX2Nsa19pICApLCAvLyBEZXN0aW5hdGlvbiBjbG9jayBkb21haW4KKwkgICAgICAuYXJzdF9uICAgICAocnN0X24gICAgICksIC8vIGFjdGl2ZSBsb3cgYXN5bmMgcmVzZXQKKyAgICAgICAgICAgICAgLnNyc3RfbiAgICAgKHNyc3RfbiAgICApCisgICAgICAgICAgKTsKKworCitpbnRlZ2VyIGk7CityZWcgYmlzdF9lcnJvcl9hbmQ7CityZWcgYmlzdF9lcnJvcl9jb3JyZWN0X29yOworCithbHdheXNfY29tYiBiZWdpbgorICAgYmlzdF9lcnJvcl9hbmQgPTA7CisgICBiaXN0X2Vycm9yX2NvcnJlY3Rfb3IgPSAwOworICAgZm9yKGk9MDsgaSA8QklTVF9OT19TUkFNOyBpID0gaSsxKSBiZWdpbgorICAgICBiaXN0X2Vycm9yX2FuZCA9IGJpc3RfZXJyb3JfYW5kICYgYmlzdF9lcnJvcltpXTsKKyAgICAgYmlzdF9lcnJvcl9jb3JyZWN0X29yID0gYmlzdF9lcnJvcl9jb3JyZWN0X29yIHwgYmlzdF9lcnJvcl9jb3JyZWN0W2ldOworICAgZW5kCitlbmQKKworCisvLyBiaXN0IG1haW4gY29udHJvbCBGU00KKworbWJpc3RfZnNtICAKKyAgICAgICMoCisJIC5CSVNUX0FERFJfV0QgICAgICAgICAgIChCSVNUX0FERFJfV0QgICAgICAgICAgICksCisJIC5CSVNUX0RBVEFfV0QgICAgICAgICAgIChCSVNUX0RBVEFfV0QgICAgICAgICAgICksCisJIC5CSVNUX0FERFJfU1RBUlQgICAgICAgIChCSVNUX0FERFJfU1RBUlQgICAgICAgICksCisJIC5CSVNUX0FERFJfRU5EICAgICAgICAgIChCSVNUX0FERFJfRU5EICAgICAgICAgICksCisJIC5CSVNUX1JFUEFJUl9BRERSX1NUQVJUIChCSVNUX1JFUEFJUl9BRERSX1NUQVJUICksCisJIC5CSVNUX1JBRF9XRF9JICAgICAgICAgIChCSVNUX1JBRF9XRF9JICAgICAgICAgICksCisJIC5CSVNUX1JBRF9XRF9PICAgICAgICAgIChCSVNUX1JBRF9XRF9PICAgICAgICAgICkKKyAgICAgICAgICApCisgICAgIHVfZnNtICgKKworCSAgICAgICAgICAgIC5jbWRfcGhhc2UgICAgICAgICAgKGNtZF9waGFzZSAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAuY21wX3BoYXNlICAgICAgICAgIChjbXBfcGhhc2UgICAgICAgICAgICksCisJICAgICAgICAgICAgLnJ1bl9vcCAgICAgICAgICAgICAocnVuX29wICAgICAgICAgICAgICksCisJICAgICAgICAgICAgLnJ1bl9hZGRyICAgICAgICAgICAocnVuX2FkZHIgICAgICAgICAgICksCisJICAgICAgICAgICAgLnJ1bl9zdGkgICAgICAgICAgICAocnVuX3N0aSAgICAgICAgICAgICksCisJICAgICAgICAgICAgLnJ1bl9wYXQgICAgICAgICAgICAocnVuX3BhdCAgICAgICAgICAgICksCisJICAgICAgICAgICAgLmJpc3RfZG9uZSAgICAgICAgICAoYmlzdF9kb25lICAgICAgICAgICksCisKKworCSAgICAgICAgICAgIC5jbGsgICAgICAgICAgICAgICAgKHdiX2Nsa19pICAgICAgICAgICApLAorCSAgICAgICAgICAgIC5yc3RfbiAgICAgICAgICAgICAgKHNyc3RfbiAgICAgICAgICAgICApLAorCSAgICAgICAgICAgIC5iaXN0X3J1biAgICAgICAgICAgKGJpc3RfcnVuICAgICAgICAgICApLAorCSAgICAgICAgICAgIC5sYXN0X29wICAgICAgICAgICAgKGxhc3Rfb3AgICAgICAgICAgICApLAorCSAgICAgICAgICAgIC5sYXN0X2FkZHIgICAgICAgICAgKGxhc3RfYWRkciAgICAgICAgICApLAorCSAgICAgICAgICAgIC5sYXN0X3N0aSAgICAgICAgICAgKGxhc3Rfc3RpICAgICAgICAgICApLAorCSAgICAgICAgICAgIC5sYXN0X3BhdCAgICAgICAgICAgKGxhc3RfcGF0ICAgICAgICAgICApLAorCQkgICAgLm9wX3JldmVyc2UgICAgICAgICAob3BfcmV2ZXJzZSAgICAgICAgICksCisJCSAgICAuYmlzdF9lcnJvciAgICAgICAgIChiaXN0X2Vycm9yX2FuZCAgICAgKQorKTsKKworCisvLyBiaXN0IGFkZHJlc3MgZ2VuZXJhdGlvbgorbWJpc3RfYWRkcl9nZW4gICAKKyAgICAgICMoCisJIC5CSVNUX0FERFJfV0QgICAgICAgICAgIChCSVNUX0FERFJfV0QgICAgICAgICAgICksCisJIC5CSVNUX0RBVEFfV0QgICAgICAgICAgIChCSVNUX0RBVEFfV0QgICAgICAgICAgICksCisJIC5CSVNUX0FERFJfU1RBUlQgICAgICAgIChCSVNUX0FERFJfU1RBUlQgICAgICAgICksCisJIC5CSVNUX0FERFJfRU5EICAgICAgICAgIChCSVNUX0FERFJfRU5EICAgICAgICAgICksCisJIC5CSVNUX1JFUEFJUl9BRERSX1NUQVJUIChCSVNUX1JFUEFJUl9BRERSX1NUQVJUICksCisJIC5CSVNUX1JBRF9XRF9JICAgICAgICAgIChCSVNUX1JBRF9XRF9JICAgICAgICAgICksCisJIC5CSVNUX1JBRF9XRF9PICAgICAgICAgIChCSVNUX1JBRF9XRF9PICAgICAgICAgICkKKyAgICAgICAgICApCisgICAgICB1X2FkZHJfZ2VuKAorICAgICAgICAgICAgICAgICAgICAubGFzdF9hZGRyICAgICAgICAgIChsYXN0X2FkZHIgICAgICAgICAgKSwgCisgICAgICAgICAgICAgICAgICAgIC5iaXN0X2FkZHIgICAgICAgICAgKGJpc3RfYWRkciAgICAgICAgICApLCAgIAorICAgICAgICAgICAgICAgICAgICAuc2RvICAgICAgICAgICAgICAgIChiaXN0X2FkZHJfc2RvICAgICAgKSwgICAgICAgICAKKworICAgICAgICAgICAgICAgICAgICAuY2xrICAgICAgICAgICAgICAgICh3Yl9jbGtfaSAgICAgICAgICAgKSwgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLnJzdF9uICAgICAgICAgICAgICAoc3JzdF9uICAgICAgICAgICAgICksICAgICAgIAorICAgICAgICAgICAgICAgICAgICAucnVuICAgICAgICAgICAgICAgIChydW5fYWRkciAgICAgICAgICAgKSwgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLnVwZG93biAgICAgICAgICAgICAob3BfdXBkb3duICAgICAgICAgICksICAgICAgCisgICAgICAgICAgICAgICAgICAgIC5iaXN0X3NoaWZ0ICAgICAgICAgKGJpc3Rfc2hpZnQgICAgICAgICApLCAgCisgICAgICAgICAgICAgICAgICAgIC5iaXN0X2xvYWQgICAgICAgICAgKGJpc3RfbG9hZCAgICAgICAgICApLCAgIAorICAgICAgICAgICAgICAgICAgICAuc2RpICAgICAgICAgICAgICAgIChiaXN0X3NkaSAgICAgICAgICAgKQorCispOworCisKKy8vIEJJU1QgY3VycmVudCBzdGltdWx1cyBzZWxlY3Rpb24KK21iaXN0X3N0aV9zZWwgCisgICAgICAjKAorCSAuQklTVF9BRERSX1dEICAgICAgICAgICAoQklTVF9BRERSX1dEICAgICAgICAgICApLAorCSAuQklTVF9EQVRBX1dEICAgICAgICAgICAoQklTVF9EQVRBX1dEICAgICAgICAgICApLAorCSAuQklTVF9BRERSX1NUQVJUICAgICAgICAoQklTVF9BRERSX1NUQVJUICAgICAgICApLAorCSAuQklTVF9BRERSX0VORCAgICAgICAgICAoQklTVF9BRERSX0VORCAgICAgICAgICApLAorCSAuQklTVF9SRVBBSVJfQUREUl9TVEFSVCAoQklTVF9SRVBBSVJfQUREUl9TVEFSVCApLAorCSAuQklTVF9SQURfV0RfSSAgICAgICAgICAoQklTVF9SQURfV0RfSSAgICAgICAgICApLAorCSAuQklTVF9SQURfV0RfTyAgICAgICAgICAoQklTVF9SQURfV0RfTyAgICAgICAgICApCisgICAgICAgICAgKQorICAgICAgIHVfc3RpX3NlbCgKKworCSAgICAgICAgICAgIC5zZG8gICAgICAgICAgICAgICAgKGJpc3Rfc3RpX3NkbyAgICAgICApLCAgCisJICAgICAgICAgICAgLmxhc3Rfc3RpbXVsdXMgICAgICAobGFzdF9zdGkgICAgICAgICAgICksICAKKyAgICAgICAgICAgICAgICAgICAgLnN0aW11bHVzICAgICAgICAgICAoc3RpbXVsdXMgICAgICAgICAgICksCisKKwkgICAgICAgICAgICAuY2xrICAgICAgICAgICAgICAgICh3Yl9jbGtfaSAgICAgICAgICAgKSwgIAorCSAgICAgICAgICAgIC5yc3RfbiAgICAgICAgICAgICAgKHNyc3RfbiAgICAgICAgICAgICApLCAgCisJICAgICAgICAgICAgLnNjYW5fc2hpZnQgICAgICAgICAoYmlzdF9zaGlmdCAgICAgICAgICksICAKKwkgICAgICAgICAgICAuc2RpICAgICAgICAgICAgICAgIChiaXN0X2FkZHJfc2RvICAgICAgKSwgIAorCSAgICAgICAgICAgIC5ydW4gICAgICAgICAgICAgICAgKHJ1bl9zdGkgICAgICAgICAgICApICAgICAgICAgICAgICAKKworKTsKKworCisvLyBCaXN0IE9wZXJhdGlvbiBzZWxlY3Rpb24KK21iaXN0X29wX3NlbCAKKyAgICAgICMoCisJIC5CSVNUX0FERFJfV0QgICAgICAgICAgIChCSVNUX0FERFJfV0QgICAgICAgICAgICksCisJIC5CSVNUX0RBVEFfV0QgICAgICAgICAgIChCSVNUX0RBVEFfV0QgICAgICAgICAgICksCisJIC5CSVNUX0FERFJfU1RBUlQgICAgICAgIChCSVNUX0FERFJfU1RBUlQgICAgICAgICksCisJIC5CSVNUX0FERFJfRU5EICAgICAgICAgIChCSVNUX0FERFJfRU5EICAgICAgICAgICksCisJIC5CSVNUX1JFUEFJUl9BRERSX1NUQVJUIChCSVNUX1JFUEFJUl9BRERSX1NUQVJUICksCisJIC5CSVNUX1JBRF9XRF9JICAgICAgICAgIChCSVNUX1JBRF9XRF9JICAgICAgICAgICksCisJIC5CSVNUX1JBRF9XRF9PICAgICAgICAgIChCSVNUX1JBRF9XRF9PICAgICAgICAgICkKKyAgICAgICAgICApCisgICAgICAgIHVfb3Bfc2VsICgKKworICAgICAgICAgICAgICAgICAgICAub3BfcmVhZCAgICAgICAgICAgIChvcF9yZWFkICAgICAgICAgICAgICAgKSwgCisJICAgICAgICAgICAgLm9wX3dyaXRlICAgICAgICAgICAob3Bfd3JpdGUgICAgICAgICAgICAgICksCisJICAgICAgICAgICAgLm9wX2ludmVydCAgICAgICAgICAob3BfaW52ZXJ0ICAgICAgICAgICAgICksCisJICAgICAgICAgICAgLm9wX3VwZG93biAgICAgICAgICAob3BfdXBkb3duICAgICAgICAgICAgICksCisJICAgICAgICAgICAgLm9wX3JldmVyc2UgICAgICAgICAob3BfcmV2ZXJzZSAgICAgICAgICAgICksCisJICAgICAgICAgICAgLm9wX3JlcGVhdGZsYWcgICAgICAob3BfcmVwZWF0ZmxhZyAgICAgICAgICksCisJICAgICAgICAgICAgLnNkbyAgICAgICAgICAgICAgICAoYmlzdF9vcF9zZG8gICAgICAgICAgICksCisJICAgICAgICAgICAgLmxhc3Rfb3AgICAgICAgICAgICAobGFzdF9vcCAgICAgICAgICAgICAgICksCisKKwkgICAgICAgICAgICAuY2xrICAgICAgICAgICAgICAgICh3Yl9jbGtfaSAgICAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAucnN0X24gICAgICAgICAgICAgIChzcnN0X24gICAgICAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAuc2Nhbl9zaGlmdCAgICAgICAgIChiaXN0X3NoaWZ0ICAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAuc2RpICAgICAgICAgICAgICAgIChiaXN0X3N0aV9zZG8gICAgICAgICAgKSwKKwkJICAgIC5yZV9pbml0ICAgICAgICAgICAgKGJpc3RfZXJyb3JfY29ycmVjdF9vciApLAorCSAgICAgICAgICAgIC5ydW4gICAgICAgICAgICAgICAgKHJ1bl9vcCAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuc3RpbXVsdXMgICAgICAgICAgIChzdGltdWx1cyAgICAgICAgICAgICAgKQorCisgICAgKTsKKworCisKK21iaXN0X3BhdF9zZWwgCisgICAgICAjKAorCSAuQklTVF9BRERSX1dEICAgICAgICAgICAoQklTVF9BRERSX1dEICAgICAgICAgICApLAorCSAuQklTVF9EQVRBX1dEICAgICAgICAgICAoQklTVF9EQVRBX1dEICAgICAgICAgICApLAorCSAuQklTVF9BRERSX1NUQVJUICAgICAgICAoQklTVF9BRERSX1NUQVJUICAgICAgICApLAorCSAuQklTVF9BRERSX0VORCAgICAgICAgICAoQklTVF9BRERSX0VORCAgICAgICAgICApLAorCSAuQklTVF9SRVBBSVJfQUREUl9TVEFSVCAoQklTVF9SRVBBSVJfQUREUl9TVEFSVCApLAorCSAuQklTVF9SQURfV0RfSSAgICAgICAgICAoQklTVF9SQURfV0RfSSAgICAgICAgICApLAorCSAuQklTVF9SQURfV0RfTyAgICAgICAgICAoQklTVF9SQURfV0RfTyAgICAgICAgICApCisgICAgICAgICAgKQorICAgICAgdV9wYXRfc2VsICgKKyAgICAgICAgICAgICAgICAgICAgLnBhdF9sYXN0ICAgICAgICAgICAobGFzdF9wYXQgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5wYXRfZGF0YSAgICAgICAgICAgKHBhdF9kYXRhICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuc2RvICAgICAgICAgICAgICAgIChiaXN0X3BhdF9zZG8gICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmNsayAgICAgICAgICAgICAgICAod2JfY2xrX2kgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5yc3RfbiAgICAgICAgICAgICAgKHNyc3RfbiAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAucnVuICAgICAgICAgICAgICAgIChydW5fcGF0ICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLnNjYW5fc2hpZnQgICAgICAgICAoYmlzdF9zaGlmdCAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5zZGkgICAgICAgICAgICAgICAgKGJpc3Rfb3Bfc2RvICAgICAgICApCisKKyAgICk7CisKKworCisKKworZ2VudmFyIHNyYW1fbm87CitnZW5lcmF0ZQorZm9yIChzcmFtX25vID0gMDsgJHVuc2lnbmVkKHNyYW1fbm8pIDwgQklTVF9OT19TUkFNOyBzcmFtX25vPXNyYW1fbm8rMSkgYmVnaW4gOiBtZW1fbm8KKworCQorbWJpc3RfZGF0YV9jbXAgIAorICAgICAgIygKKwkgLkJJU1RfQUREUl9XRCAgICAgICAgICAgKEJJU1RfQUREUl9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfREFUQV9XRCAgICAgICAgICAgKEJJU1RfREFUQV9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfQUREUl9TVEFSVCAgICAgICAgKEJJU1RfQUREUl9TVEFSVCAgICAgICAgKSwKKwkgLkJJU1RfQUREUl9FTkQgICAgICAgICAgKEJJU1RfQUREUl9FTkQgICAgICAgICAgKSwKKwkgLkJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKEJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKSwKKwkgLkJJU1RfUkFEX1dEX0kgICAgICAgICAgKEJJU1RfUkFEX1dEX0kgICAgICAgICAgKSwKKwkgLkJJU1RfUkFEX1dEX08gICAgICAgICAgKEJJU1RfUkFEX1dEX08gICAgICAgICAgKQorICAgICAgICAgICkKKworCisgICAgIHVfY21wICgKKyAgICAgICAgICAgICAgICAgICAgLmVycm9yICAgICAgICAgICAgICAoYmlzdF9lcnJvcltzcmFtX25vXSAgICAgICAgICksCisJCSAgICAuZXJyb3JfY29ycmVjdCAgICAgIChiaXN0X2Vycm9yX2NvcnJlY3Rbc3JhbV9ub10gKSwKKwkJICAgIC5jb3JyZWN0ICAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICApLCAvLyBzYW1lIHNpZ25hbCBhdmFpbGFibGUgYXQgYmlzdCBtdXgKKwkJICAgIC5lcnJvcl9hZGRyICAgICAgICAgKGJpc3RfZXJyb3JfYWRkcltzcmFtX25vXSAgICApLAorCQkgICAgLmVycm9yX2NudCAgICAgICAgICAoYmlzdF9lcnJvcl9jbnRfaVtzcmFtX25vXSAgICksCisgICAgICAgICAgICAgICAgICAgIC5jbGsgICAgICAgICAgICAgICAgKHdiX2Nsa19pICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAucnN0X24gICAgICAgICAgICAgIChzcnN0X24gICAgICAgICAgICAgICAgICAgICAgKSwKKwkJICAgIC5hZGRyX2luY19waGFzZSAgICAgKHJ1bl9hZGRyICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuY29tcGFyZSAgICAgICAgICAgIChjb21wYXJlICAgICAgICAgICAgICAgICAgICAgKSwgCisJICAgICAgICAgICAgLnJlYWRfaW52ZXJ0ICAgICAgICAob3BfaW52ZXJ0ICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5jb21wX2RhdGEgICAgICAgICAgKHBhdF9kYXRhICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAucnhkX2RhdGEgICAgICAgICAgIChmdW5jX2RvdXRbc3JhbV9ub10gICAgICAgICAgKSwKKwkJICAgIC5hZGRyICAgICAgICAgICAgICAgKGJpc3RfYWRkciAgICAgICAgICAgICAgICAgICApCisJICAgICAKKwkpOworCisgICAgLy8gV0IgVG8gTWVtb3J5IFNpZ25hbCBNYXBwaW5nCisgICAgbWJpc3RfbWVtX3dyYXBwZXIgIygKKwkgLkJJU1RfTk9fU1JBTSAgICAgICAgICAgKEJJU1RfTk9fU1JBTSAgICAgICAgICAgKSwKKyAgICAJIC5CSVNUX0FERFJfV0QgICAgICAgICAgIChCSVNUX0FERFJfV0QgICAgICAgICAgICksCisgICAgCSAuQklTVF9EQVRBX1dEICAgICAgICAgICAoQklTVF9EQVRBX1dEICAgICAgICAgICApCisgICAgICAgICAgICAgICkgdV9tZW1fd3JhcHBlcl8oCisgICAgCSAgICAgICAgICAgICAgICAucnN0X24gICAgICAgICAgIChzcnN0X24gICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgLy8gV0IgSS9GCisJCSAgICAgICAgLnNyYW1faWQgICAgICAgICAoTk9fU1JBTV9XRCcoc3JhbV9ubykgICAgICApLAorICAgICAgICAgICAgICAgICAgICAgICAgLndiX2Nsa19pICAgICAgICAod2JfY2xrMl9pICAgICAgICAgICAgICAgICApLCAgLy8gU3lzdGVtIGNsb2NrCisJCQkubWVtX2NzICAgICAgICAgIChtZW1fY3MgICAgICAgICAgICAgICAgICAgICksICAvLyBDaGlwIFNlbGVjdAorICAgICAgICAgICAgICAgICAgICAgICAgLm1lbV9yZXEgICAgICAgICAobWVtX3JlcSAgICAgICAgICAgICAgICAgICApLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIC5tZW1fYWRkciAgICAgICAgKG1lbV9hZGRyICAgICAgICAgICAgICAgICAgKSwgIC8vIGFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIC5tZW1fd2UgICAgICAgICAgKG1lbV93ZSAgICAgICAgICAgICAgICAgICAgKSwgIC8vIHdyaXRlCisgICAgICAgICAgICAgICAgICAgICAgICAubWVtX3dkYXRhICAgICAgIChtZW1fd2RhdGEgICAgICAgICAgICAgICAgICksICAvLyBkYXRhIG91dHB1dAorICAgICAgICAgICAgICAgICAgICAgICAgLm1lbV93bWFzayAgICAgICAobWVtX3dtYXNrICAgICAgICAgICAgICAgICApLCAgLy8gYnl0ZSBlbmFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC5tZW1fcmRhdGEgICAgICAgKHdiX2RhdFtzcmFtX25vXSAgICAgICAgICAgKSwgIC8vIGRhdGEgaW5wdXQKKyAgICAgICAgICAgICAgICAgICAgLy8gTUVNIEEgUE9SVCAKKyAgICAgICAgICAgICAgICAgICAgICAgIC5mdW5jX2NsayAgICAgICAgKGZ1bmNfY2xrW3NyYW1fbm9dICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC5mdW5jX2NlbiAgICAgICAgKGZ1bmNfY2VuW3NyYW1fbm9dICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC5mdW5jX3dlYiAgICAgICAgKGZ1bmNfd2ViW3NyYW1fbm9dICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC5mdW5jX21hc2sgICAgICAgKGZ1bmNfbWFza1tzcmFtX25vXSAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC5mdW5jX2FkZHIgICAgICAgKGZ1bmNfYWRkcltzcmFtX25vXSAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC5mdW5jX2RpbiAgICAgICAgKGZ1bmNfZGluW3NyYW1fbm9dICAgICAgICAgKSwgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAuZnVuY19kb3V0ICAgICAgIChmdW5jX2RvdXRbc3JhbV9ub10gICAgICAgICkKKyAgICAgICAgICk7CisKKworbWJpc3RfbXV4ICAKKyAgICAgICMoCisJIC5CSVNUX0FERFJfV0QgICAgICAgICAgIChCSVNUX0FERFJfV0QgICAgICAgICAgICksCisJIC5CSVNUX0RBVEFfV0QgICAgICAgICAgIChCSVNUX0RBVEFfV0QgICAgICAgICAgICksCisJIC5CSVNUX0FERFJfU1RBUlQgICAgICAgIChCSVNUX0FERFJfU1RBUlQgICAgICAgICksCisJIC5CSVNUX0FERFJfRU5EICAgICAgICAgIChCSVNUX0FERFJfRU5EICAgICAgICAgICksCisJIC5CSVNUX1JFUEFJUl9BRERSX1NUQVJUIChCSVNUX1JFUEFJUl9BRERSX1NUQVJUICksCisJIC5CSVNUX1JBRF9XRF9JICAgICAgICAgIChCSVNUX1JBRF9XRF9JICAgICAgICAgICksCisJIC5CSVNUX1JBRF9XRF9PICAgICAgICAgIChCSVNUX1JBRF9XRF9PICAgICAgICAgICkKKyAgICAgICAgICApCisgICAgICAgdV9tZW1fc2VsICgKKworCSAgICAgICAgICAgIC5zY2FuX21vZGUgICAgICAgICAgICAoMSdiMCAgICAgICAgICAgICAgICAgICAgICAgKSwKKworICAgICAgICAgICAgICAgICAgICAucnN0X24gICAgICAgICAgICAgICAgKHNyc3RfbiAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC8vIE1CSVNUIENUUkwgU0lHTkFMCisgICAgICAgICAgICAgICAgICAgIC5iaXN0X2VuICAgICAgICAgICAgICAoYmlzdF9lbiAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmJpc3RfYWRkciAgICAgICAgICAgIChiaXN0X2FkZHIgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuYmlzdF93ZGF0YSAgICAgICAgICAgKGJpc3Rfd2RhdGEgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5iaXN0X2NsayAgICAgICAgICAgICAod2JfY2xrMl9pICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmJpc3Rfd3IgICAgICAgICAgICAgIChiaXN0X3dyICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuYmlzdF9yZCAgICAgICAgICAgICAgKGJpc3RfcmQgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5iaXN0X2Vycm9yICAgICAgICAgICAoYmlzdF9lcnJvcl9jb3JyZWN0W3NyYW1fbm9dKSwKKyAgICAgICAgICAgICAgICAgICAgLmJpc3RfZXJyb3JfYWRkciAgICAgIChiaXN0X2Vycm9yX2FkZHJbc3JhbV9ub10gICApLAorICAgICAgICAgICAgICAgICAgICAuYmlzdF9jb3JyZWN0ICAgICAgICAgKGJpc3RfY29ycmVjdFtzcmFtX25vXSAgICAgICksCisJCSAgICAuYmlzdF9zZGkgICAgICAgICAgICAgKGJpc3RfbXNfc2RpW3NyYW1fbm9dICAgICAgICksCisJCSAgICAuYmlzdF9sb2FkICAgICAgICAgICAgKGJpc3RfbG9hZCAgICAgICAgICAgICAgICAgICksCisJCSAgICAuYmlzdF9zaGlmdCAgICAgICAgICAgKGJpc3Rfc2hpZnQgICAgICAgICAgICAgICAgICksCisJCSAgICAuYmlzdF9zZG8gICAgICAgICAgICAgKGJpc3RfbXNfc2RvW3NyYW1fbm9dICAgICAgICksCisKKyAgICAgICAgICAgICAgICAgICAgLy8gRlVOQ1RJT05BTCBDVFJMIFNJR05BTAorICAgICAgICAgICAgICAgICAgICAuZnVuY19jbGsgICAgICAgICAgICAgKGZ1bmNfY2xrW3NyYW1fbm9dICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5mdW5jX2NlbiAgICAgICAgICAgICAoZnVuY19jZW5bc3JhbV9ub10gICAgICAgICAgKSwKKwkgICAgICAgICAgICAuZnVuY193ZWIgICAgICAgICAgICAgKGZ1bmNfd2ViW3NyYW1fbm9dICAgICAgICAgICksCisJICAgICAgICAgICAgLmZ1bmNfbWFzayAgICAgICAgICAgIChmdW5jX21hc2tbc3JhbV9ub10gICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuZnVuY19hZGRyICAgICAgICAgICAgKGZ1bmNfYWRkcltzcmFtX25vXSAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5mdW5jX2RpbiAgICAgICAgICAgICAoZnVuY19kaW5bc3JhbV9ub10gICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmZ1bmNfZG91dCAgICAgICAgICAgIChmdW5jX2RvdXRbc3JhbV9ub10gICAgICAgICApLAorCisKKyAgICAgICAgICAgICAgICAgICAgLy8gdG93YXJkcyBtZW1vcnkKKyAgICAgICAgICAgICAgICAgICAgLy8gTWVtb3J5IE91dCBQb3J0CisgICAgICAgICAgICAgICAgICAgIC5tZW1fY2xrICAgICAgICAgICAgIChtZW1fY2xrX2Fbc3JhbV9ub10gICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLm1lbV9jZW4gICAgICAgICAgICAgKG1lbV9jZW5fYVtzcmFtX25vXSAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAubWVtX3dlYiAgICAgICAgICAgICAobWVtX3dlYl9hW3NyYW1fbm9dICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5tZW1fbWFzayAgICAgICAgICAgIChtZW1fbWFza19hX2lbc3JhbV9ub10gICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLm1lbV9hZGRyICAgICAgICAgICAgKG1lbV9hZGRyX2FfaVtzcmFtX25vXSAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAubWVtX2RpbiAgICAgICAgICAgICAobWVtX2Rpbl9hX2lbc3JhbV9ub10gICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5tZW1fZG91dCAgICAgICAgICAgIChtZW1fZG91dF9hX2lbc3JhbV9ub10gICAgICAgKQorCisgICAgKTsKK2VuZAorZW5kZ2VuZXJhdGUKKworZW5kbW9kdWxlCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL21iaXN0L3NyYy90b3AvbWJpc3RfdG9wMS5zdiBiL3Zlcmlsb2cvcnRsL21iaXN0L3NyYy90b3AvbWJpc3RfdG9wMS5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGZkYmZkCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL3RvcC9tYmlzdF90b3AxLnN2CkBAIC0wLDAgKzEsNDY5IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIE1CSVNUIFRPUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBtYmlzdF9jdHJsIGNvcmVzIHByb2plY3QgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL21iaXN0X2N0cmwuZ2l0ICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICBUaGlzIGJsb2NrIGludGVncmF0ZSBtYmlzdCBjb250cm9sbGVyIHdpdGggcm93ICAgICAgICAgIC8vLy8KKy8vLy8gICAgICByZWRlbmRlbmN5IGZlYXR1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4wIC0gMTF0aCBPY3QgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgSW5pdGlhbCBpbnRlZ3JhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMjZ0aCBPY3QgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgRml4ZWQgRXJyb3IgQWRkcmVzcyBhcmUgc2VyaWFsIHNoaWZ0ZWQgdGhyb3VnaCAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgc2RpL3NkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYGluY2x1ZGUgIm1iaXN0X2RlZi5zdmgiCittb2R1bGUgbWJpc3RfdG9wMSAKKyAgICAgIyggIAorCSBwYXJhbWV0ZXIgQklTVF9BRERSX1dEICAgICAgICAgICA9IDksCisJIHBhcmFtZXRlciBCSVNUX0RBVEFfV0QgICAgICAgICAgID0gMzIsCisJIHBhcmFtZXRlciBCSVNUX0FERFJfU1RBUlQgICAgICAgID0gOSdoMDAwLAorCSBwYXJhbWV0ZXIgQklTVF9BRERSX0VORCAgICAgICAgICA9IDknaDFGQiwKKwkgcGFyYW1ldGVyIEJJU1RfUkVQQUlSX0FERFJfU1RBUlQgPSA5J2gxRkMsCisJIHBhcmFtZXRlciBCSVNUX1JBRF9XRF9JICAgICAgICAgID0gQklTVF9BRERSX1dELAorCSBwYXJhbWV0ZXIgQklTVF9SQURfV0RfTyAgICAgICAgICA9IEJJU1RfQUREUl9XRCkgKAorCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICBpbm91dCB2Y2NkMSwJLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICBpbm91dCB2c3NkMSwJLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorCisgICAgLy8gQ2xvY2sgU2tldyBBZGp1c3QKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19pbnQsIAorICAgICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX21iaXN0LAorICAgICAgIGlucHV0ICAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICBjZmdfY3NrYV9tYmlzdCwgLy8gY2xvY2sgc2tldyBhZGp1c3QgZm9yIHdlYiBob3N0CisKKwlpbnB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICByc3RfbiwKKworCS8vIE1CSVNUIEkvRgorCWlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIGJpc3RfZW4sCisJaW5wdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9ydW4sCisJaW5wdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9zaGlmdCwKKwlpbnB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X2xvYWQsCisJaW5wdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9zZGksCisKKwlvdXRwdXQgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICBiaXN0X2Vycm9yX2NudCwKKwlvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X2NvcnJlY3QsCisJb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9lcnJvciwKKwlvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X2RvbmUsCisJb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9zZG8sCisKKworICAgICAgICAvLyBXQiBJL0YKKyAgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgd2JfY2xrX2ksICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgd2JfY3ljX2ksICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICB3Yl9zdGJfaSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgIGlucHV0ICAgbG9naWMgW0JJU1RfQUREUl9XRC0xOjBdICAgIHdiX2Fkcl9pLCAgLy8gYWRkcmVzcworICAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICB3Yl93ZV9pICwgIC8vIHdyaXRlCisgICAgICAgIGlucHV0ICAgbG9naWMgW0JJU1RfREFUQV9XRC0xOjBdICAgIHdiX2RhdF9pLCAgLy8gZGF0YSBvdXRwdXQKKyAgICAgICAgaW5wdXQgICBsb2dpYyBbQklTVF9EQVRBX1dELzgtMTowXSAgd2Jfc2VsX2ksICAvLyBieXRlIGVuYWJsZQorICAgICAgICBvdXRwdXQgIGxvZ2ljIFtCSVNUX0RBVEFfV0QtMTowXSAgICB3Yl9kYXRfbywgIC8vIGRhdGEgaW5wdXQKKyAgICAgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgd2JfYWNrX28sICAvLyBhY2tub3dsZWdlbWVudAorICAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICB3Yl9lcnJfbywgIC8vIGVycm9yCisKKyAgICAgLy8gdG93YXJkcyBtZW1vcnkKKyAgICAgLy8gUE9SVC1BCisgICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgIG1lbV9jbGtfYSwKKyAgICAgICAgb3V0cHV0IGxvZ2ljICAgW0JJU1RfQUREUl9XRC0xOjBdbWVtX2FkZHJfYSwKKyAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgbWVtX2Nlbl9hLAorICAgICAgICBvdXRwdXQgbG9naWMgICBbQklTVF9EQVRBX1dELTE6MF1tZW1fZGluX2IsCisgICAgIC8vIFBPUlQtQgorICAgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICBtZW1fY2xrX2IsCisgICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgIG1lbV9jZW5fYiwKKyAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgbWVtX3dlYl9iLAorICAgICAgICBvdXRwdXQgbG9naWMgW0JJU1RfREFUQV9XRC84LTE6MF1tZW1fbWFza19iLAorICAgICAgICBvdXRwdXQgbG9naWMgICBbQklTVF9BRERSX1dELTE6MF1tZW1fYWRkcl9iLAorICAgICAgICBpbnB1dCAgbG9naWMgICBbQklTVF9EQVRBX1dELTE6MF1tZW1fZG91dF9hCisKKworCisKKyk7CisKKy8vIEZVTkNUSU9OQUwgQSBQT1JUIAorbG9naWMgICAgICAgICAgICAgICAgICAgIGZ1bmNfY2xrX2E7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgZnVuY19jZW5fYTsKK2xvZ2ljICBbQklTVF9BRERSX1dELTE6MF1mdW5jX2FkZHJfYTsKK2xvZ2ljICBbQklTVF9EQVRBX1dELTE6MF1mdW5jX2RvdXRfYTsKKworLy8gRnVuY3Rpb25hbCBCIFBvcnQKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBmdW5jX2Nsa19iOworbG9naWMgICAgICAgICAgICAgICAgICAgIGZ1bmNfY2VuX2I7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgZnVuY193ZWJfYjsKK2xvZ2ljIFtCSVNUX0RBVEFfV0QvOC0xOjBdZnVuY19tYXNrX2I7Citsb2dpYyAgW0JJU1RfQUREUl9XRC0xOjBdZnVuY19hZGRyX2I7Citsb2dpYyAgW0JJU1RfREFUQV9XRC0xOjBdZnVuY19kaW5fYjsKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9jYWwgdmFyaWFibGUgZGVmaW5hdGlvbgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworbG9naWMgICAgICAgICAgICAgICAgICAgIHNyc3RfbiAgICAgOyAvLyBzeW5jIHJlc2V0IHcuci50IGJpc3RfY2xrCitsb2dpYyAgICAgICAgICAgICAgICAgICAgY21kX3BoYXNlICA7ICAvLyBDb21tYW5kIFBoYXNlCitsb2dpYyAgICAgICAgICAgICAgICAgICAgY21wX3BoYXNlICA7ICAvLyBDb21wYXJlIFBoYXNlCitsb2dpYyAgICAgICAgICAgICAgICAgICAgcnVuX29wICAgICA7ICAvLyBSdW4gbmV4dCBPcGVyYXRpb24KK2xvZ2ljICAgICAgICAgICAgICAgICAgICBydW5fYWRkciAgIDsgIC8vIFJ1biBOZXh0IEFkZHJlc3MKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBydW5fc3RpICAgIDsgIC8vIFJ1biBOZXh0IFN0aW11bHVzCitsb2dpYyAgICAgICAgICAgICAgICAgICAgcnVuX3BhdCAgICA7ICAvLyBSdW4gTmV4dCBQYXR0ZXJuCitsb2dpYyAgICAgICAgICAgICAgICAgICAgb3BfdXBkb3duICA7ICAvLyBBZHJlc3MgdXBkb3duIGRpcmVjdGlvbgorbG9naWMgICAgICAgICAgICAgICAgICAgIGxhc3RfYWRkciAgOyAgLy8gbGFzdCBhZGRyZXNzIGluZGljYXRpb24KK2xvZ2ljICAgICAgICAgICAgICAgICAgICBsYXN0X3N0aSAgIDsgIC8vIGxhc3Qgc3RpbXVsdXMKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBsYXN0X29wICAgIDsgIC8vIGxhc3Qgb3BlcmF0aW9uCitsb2dpYyAgICAgICAgICAgICAgICAgICAgbGFzdF9wYXQgICA7ICAvLyBsYXN0IHBhdHRlcm4KK2xvZ2ljIFtCSVNUX0RBVEFfV0QtMTowXSBwYXRfZGF0YSAgIDsgIC8vIFNlbGVjdGVkIERhdGEgUGF0dGVybgorbG9naWMgW0JJU1RfU1RJX1dELTE6MF0gIHN0aW11bHVzICAgOyAgLy8gY3VycmVudCBzdGltdWx1cworbG9naWMgICAgICAgICAgICAgICAgICAgIGNvbXBhcmUgICAgOyAgLy8gY29tcGFyZSBkYXRhCitsb2dpYyAgICAgICAgICAgICAgICAgICAgb3BfcmVwZWF0ZmxhZzsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBvcF9yZXZlcnNlOworbG9naWMgICAgICAgICAgICAgICAgICAgIG9wX3JlYWQgICA7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgb3Bfd3JpdGUgICA7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgb3BfaW52ZXJ0ICAgOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU0RJID0+IFNETyBkaWFzeSBjaGFpbgorLy8gYmlzdF9zZGkgPT4gYmlzdF9hZGRyX3NkbyA9PiAgYmlzdF9zdGlfc2RvID0+ICBiaXN0X29wX3NkbyA9PiBiaXN0X3BhdF9zZG8gPT4gYmlzdF9zZG8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbG9naWMgICAgICAgICAgICAgICAgICAgIGJpc3RfYWRkcl9zZG8gICA7ICAgICAgICAgICAgICAgICAKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBiaXN0X3N0aV9zZG8gICAgOyAgICAgICAgICAgICAgICAgCitsb2dpYyAgICAgICAgICAgICAgICAgICAgYmlzdF9vcF9zZG8gICAgIDsgICAgICAgICAgICAgICAgIAorbG9naWMgICAgICAgICAgICAgICAgICAgIGJpc3RfcGF0X3NkbyAgICA7ICAgICAgICAgICAgICAgICAKKworbG9naWMgICAgICAgICAgICAgICAgICAgIGJpc3RfZXJyb3JfY29ycmVjdCAgOworbG9naWMgIFtCSVNUX0FERFJfV0QtMTowXWJpc3RfZXJyb3JfYWRkciA7IC8vIGJpc3QgYWRkcmVzcworCitsb2dpYyAgW0JJU1RfQUREUl9XRC0xOjBdYmlzdF9hZGRyICAgICAgIDsgLy8gYmlzdCBhZGRyZXNzCitsb2dpYyBbQklTVF9EQVRBX1dELTE6MF0gYmlzdF93ZGF0YSAgICAgIDsgLy8gYmlzdCB3cml0ZSBkYXRhCitsb2dpYyAgICAgICAgICAgICAgICAgICAgYmlzdF93ciAgICAgICAgIDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBiaXN0X3JkICAgICAgICAgOworCisKK2Fzc2lnbiBiaXN0X3dyID0gKGNtZF9waGFzZSAmJiBvcF93cml0ZSk7Cithc3NpZ24gYmlzdF9yZCA9IChjbWRfcGhhc2UgJiYgb3BfcmVhZCk7CisKK2Fzc2lnbiBjb21wYXJlICAgID0gKGNtcF9waGFzZSAmJiBvcF9yZWFkKTsKK2Fzc2lnbiBiaXN0X3dkYXRhID0gKG9wX2ludmVydCkgPyB+cGF0X2RhdGEgOiBwYXRfZGF0YTsKKworLy8gQ2xvY2sgVHJlZSBicmFuY2hpbmcgdG8gYXZvaWQgY2xvY2sgbGF0ZW5jeSB0b3dhcmRzIFNSQU0gcGF0aAord2lyZSB3Yl9jbGtfYjEsd2JfY2xrX2IyOworY3RlY2hfY2xrX2J1ZiB1X2N0c193Yl9jbGtfYjEgKC5BICh3Yl9jbGtfaSksIC4gWCh3Yl9jbGtfYjEpKTsKK2N0ZWNoX2Nsa19idWYgdV9jdHNfd2JfY2xrX2IyICguQSAod2JfY2xrX2kpLCAuIFgod2JfY2xrX2IyKSk7CisKKy8vIHdiX2hvc3QgY2xvY2sgc2tldyBjb250cm9sCitjbGtfc2tld19hZGp1c3QgdV9za2V3X21iaXN0CisgICAgICAgKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgICAgICAgICAudmNjZDEgICAgICAodmNjZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgICAgICAgICAgICAgLnZzc2QxICAgICAgKHZzc2QxICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorCSAgICAgICAuY2xrX2luICAgICAod2JkX2Nsa19pbnQgICAgICAgICAgICAgICAgKSwgCisJICAgICAgIC5zZWwgICAgICAgIChjZmdfY3NrYV9tYmlzdCAgICAgICAgICAgICApLCAKKwkgICAgICAgLmNsa19vdXQgICAgKHdiZF9jbGtfbWJpc3QgICAgICAgICAgICAgICkgCisgICAgICAgKTsKKworcmVzZXRfc3luYyAgIHVfcmVzZXRfc3luYyAoCisJICAgICAgLnNjYW5fbW9kZSAgKDEnYjAgKSwKKyAgICAgICAgICAgICAgLmRjbGsgICAgICAgKHdiX2Nsa19iMSApLCAvLyBEZXN0aW5hdGlvbiBjbG9jayBkb21haW4KKwkgICAgICAuYXJzdF9uICAgICAocnN0X24gICAgICksIC8vIGFjdGl2ZSBsb3cgYXN5bmMgcmVzZXQKKyAgICAgICAgICAgICAgLnNyc3RfbiAgICAgKHNyc3RfbiAgICApCisgICAgICAgICAgKTsKKworCisKKy8vIGJpc3QgbWFpbiBjb250cm9sIEZTTQorCittYmlzdF9mc20gIAorICAgICAgIygKKwkgLkJJU1RfQUREUl9XRCAgICAgICAgICAgKEJJU1RfQUREUl9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfREFUQV9XRCAgICAgICAgICAgKEJJU1RfREFUQV9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfQUREUl9TVEFSVCAgICAgICAgKEJJU1RfQUREUl9TVEFSVCAgICAgICAgKSwKKwkgLkJJU1RfQUREUl9FTkQgICAgICAgICAgKEJJU1RfQUREUl9FTkQgICAgICAgICAgKSwKKwkgLkJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKEJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKSwKKwkgLkJJU1RfUkFEX1dEX0kgICAgICAgICAgKEJJU1RfUkFEX1dEX0kgICAgICAgICAgKSwKKwkgLkJJU1RfUkFEX1dEX08gICAgICAgICAgKEJJU1RfUkFEX1dEX08gICAgICAgICAgKQorICAgICAgICAgICkKKyAgICAgdV9mc20gKAorCisJICAgICAgICAgICAgLmNtZF9waGFzZSAgICAgICAgICAoY21kX3BoYXNlICAgICAgICAgICApLAorCSAgICAgICAgICAgIC5jbXBfcGhhc2UgICAgICAgICAgKGNtcF9waGFzZSAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAucnVuX29wICAgICAgICAgICAgIChydW5fb3AgICAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAucnVuX2FkZHIgICAgICAgICAgIChydW5fYWRkciAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAucnVuX3N0aSAgICAgICAgICAgIChydW5fc3RpICAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAucnVuX3BhdCAgICAgICAgICAgIChydW5fcGF0ICAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAuYmlzdF9kb25lICAgICAgICAgIChiaXN0X2RvbmUgICAgICAgICAgKSwKKworCisJICAgICAgICAgICAgLmNsayAgICAgICAgICAgICAgICAod2JfY2xrX2IxICAgICAgICAgICksCisJICAgICAgICAgICAgLnJzdF9uICAgICAgICAgICAgICAoc3JzdF9uICAgICAgICAgICAgICksCisJICAgICAgICAgICAgLmJpc3RfcnVuICAgICAgICAgICAoYmlzdF9ydW4gICAgICAgICAgICksCisJICAgICAgICAgICAgLmxhc3Rfb3AgICAgICAgICAgICAobGFzdF9vcCAgICAgICAgICAgICksCisJICAgICAgICAgICAgLmxhc3RfYWRkciAgICAgICAgICAobGFzdF9hZGRyICAgICAgICAgICksCisJICAgICAgICAgICAgLmxhc3Rfc3RpICAgICAgICAgICAobGFzdF9zdGkgICAgICAgICAgICksCisJICAgICAgICAgICAgLmxhc3RfcGF0ICAgICAgICAgICAobGFzdF9wYXQgICAgICAgICAgICksCisJCSAgICAub3BfcmV2ZXJzZSAgICAgICAgIChvcF9yZXZlcnNlICAgICAgICAgKSwKKwkJICAgIC5iaXN0X2Vycm9yICAgICAgICAgKGJpc3RfZXJyb3IgICAgICAgICApCispOworCisKKy8vIGJpc3QgYWRkcmVzcyBnZW5lcmF0aW9uCittYmlzdF9hZGRyX2dlbiAgIAorICAgICAgIygKKwkgLkJJU1RfQUREUl9XRCAgICAgICAgICAgKEJJU1RfQUREUl9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfREFUQV9XRCAgICAgICAgICAgKEJJU1RfREFUQV9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfQUREUl9TVEFSVCAgICAgICAgKEJJU1RfQUREUl9TVEFSVCAgICAgICAgKSwKKwkgLkJJU1RfQUREUl9FTkQgICAgICAgICAgKEJJU1RfQUREUl9FTkQgICAgICAgICAgKSwKKwkgLkJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKEJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKSwKKwkgLkJJU1RfUkFEX1dEX0kgICAgICAgICAgKEJJU1RfUkFEX1dEX0kgICAgICAgICAgKSwKKwkgLkJJU1RfUkFEX1dEX08gICAgICAgICAgKEJJU1RfUkFEX1dEX08gICAgICAgICAgKQorICAgICAgICAgICkKKyAgICAgIHVfYWRkcl9nZW4oCisgICAgICAgICAgICAgICAgICAgIC5sYXN0X2FkZHIgICAgICAgICAgKGxhc3RfYWRkciAgICAgICAgICApLCAKKyAgICAgICAgICAgICAgICAgICAgLmJpc3RfYWRkciAgICAgICAgICAoYmlzdF9hZGRyICAgICAgICAgICksICAgCisgICAgICAgICAgICAgICAgICAgIC5zZG8gICAgICAgICAgICAgICAgKGJpc3RfYWRkcl9zZG8gICAgICApLCAgICAgICAgIAorCisgICAgICAgICAgICAgICAgICAgIC5jbGsgICAgICAgICAgICAgICAgKHdiX2Nsa19iMSAgICAgICAgICApLCAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAucnN0X24gICAgICAgICAgICAgIChzcnN0X24gICAgICAgICAgICAgKSwgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC5ydW4gICAgICAgICAgICAgICAgKHJ1bl9hZGRyICAgICAgICAgICApLCAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAudXBkb3duICAgICAgICAgICAgIChvcF91cGRvd24gICAgICAgICAgKSwgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLnNjYW5fc2hpZnQgICAgICAgICAoYmlzdF9zaGlmdCAgICAgICAgICksICAKKyAgICAgICAgICAgICAgICAgICAgLnNjYW5fbG9hZCAgICAgICAgICAoYmlzdF9sb2FkICAgICAgICAgICksICAgCisgICAgICAgICAgICAgICAgICAgIC5zZGkgICAgICAgICAgICAgICAgKGJpc3Rfc2RpICAgICAgICAgICApCisKKyk7CisKKworLy8gQklTVCBjdXJyZW50IHN0aW11bHVzIHNlbGVjdGlvbgorbWJpc3Rfc3RpX3NlbCAKKyAgICAgICMoCisJIC5CSVNUX0FERFJfV0QgICAgICAgICAgIChCSVNUX0FERFJfV0QgICAgICAgICAgICksCisJIC5CSVNUX0RBVEFfV0QgICAgICAgICAgIChCSVNUX0RBVEFfV0QgICAgICAgICAgICksCisJIC5CSVNUX0FERFJfU1RBUlQgICAgICAgIChCSVNUX0FERFJfU1RBUlQgICAgICAgICksCisJIC5CSVNUX0FERFJfRU5EICAgICAgICAgIChCSVNUX0FERFJfRU5EICAgICAgICAgICksCisJIC5CSVNUX1JFUEFJUl9BRERSX1NUQVJUIChCSVNUX1JFUEFJUl9BRERSX1NUQVJUICksCisJIC5CSVNUX1JBRF9XRF9JICAgICAgICAgIChCSVNUX1JBRF9XRF9JICAgICAgICAgICksCisJIC5CSVNUX1JBRF9XRF9PICAgICAgICAgIChCSVNUX1JBRF9XRF9PICAgICAgICAgICkKKyAgICAgICAgICApCisgICAgICAgdV9zdGlfc2VsKAorCisJICAgICAgICAgICAgLnNkbyAgICAgICAgICAgICAgICAoYmlzdF9zdGlfc2RvICAgICAgICksICAKKwkgICAgICAgICAgICAubGFzdF9zdGltdWx1cyAgICAgIChsYXN0X3N0aSAgICAgICAgICAgKSwgIAorICAgICAgICAgICAgICAgICAgICAuc3RpbXVsdXMgICAgICAgICAgIChzdGltdWx1cyAgICAgICAgICAgKSwKKworCSAgICAgICAgICAgIC5jbGsgICAgICAgICAgICAgICAgKHdiX2Nsa19iMSAgICAgICAgICApLCAgCisJICAgICAgICAgICAgLnJzdF9uICAgICAgICAgICAgICAoc3JzdF9uICAgICAgICAgICAgICksICAKKwkgICAgICAgICAgICAuc2Nhbl9zaGlmdCAgICAgICAgIChiaXN0X3NoaWZ0ICAgICAgICAgKSwgIAorCSAgICAgICAgICAgIC5zZGkgICAgICAgICAgICAgICAgKGJpc3RfYWRkcl9zZG8gICAgICApLCAgCisJICAgICAgICAgICAgLnJ1biAgICAgICAgICAgICAgICAocnVuX3N0aSAgICAgICAgICAgICkgICAgICAgICAgICAgIAorCispOworCisKKy8vIEJpc3QgT3BlcmF0aW9uIHNlbGVjdGlvbgorbWJpc3Rfb3Bfc2VsIAorICAgICAgIygKKwkgLkJJU1RfQUREUl9XRCAgICAgICAgICAgKEJJU1RfQUREUl9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfREFUQV9XRCAgICAgICAgICAgKEJJU1RfREFUQV9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfQUREUl9TVEFSVCAgICAgICAgKEJJU1RfQUREUl9TVEFSVCAgICAgICAgKSwKKwkgLkJJU1RfQUREUl9FTkQgICAgICAgICAgKEJJU1RfQUREUl9FTkQgICAgICAgICAgKSwKKwkgLkJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKEJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKSwKKwkgLkJJU1RfUkFEX1dEX0kgICAgICAgICAgKEJJU1RfUkFEX1dEX0kgICAgICAgICAgKSwKKwkgLkJJU1RfUkFEX1dEX08gICAgICAgICAgKEJJU1RfUkFEX1dEX08gICAgICAgICAgKQorICAgICAgICAgICkKKyAgICAgICAgdV9vcF9zZWwgKAorCisgICAgICAgICAgICAgICAgICAgIC5vcF9yZWFkICAgICAgICAgICAgKG9wX3JlYWQgICAgICAgICAgICApLCAKKwkgICAgICAgICAgICAub3Bfd3JpdGUgICAgICAgICAgIChvcF93cml0ZSAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAub3BfaW52ZXJ0ICAgICAgICAgIChvcF9pbnZlcnQgICAgICAgICAgKSwKKwkgICAgICAgICAgICAub3BfdXBkb3duICAgICAgICAgIChvcF91cGRvd24gICAgICAgICAgKSwKKwkgICAgICAgICAgICAub3BfcmV2ZXJzZSAgICAgICAgIChvcF9yZXZlcnNlICAgICAgICAgKSwKKwkgICAgICAgICAgICAub3BfcmVwZWF0ZmxhZyAgICAgIChvcF9yZXBlYXRmbGFnICAgICAgKSwKKwkgICAgICAgICAgICAuc2RvICAgICAgICAgICAgICAgIChiaXN0X29wX3NkbyAgICAgICAgKSwKKwkgICAgICAgICAgICAubGFzdF9vcCAgICAgICAgICAgIChsYXN0X29wICAgICAgICAgICAgKSwKKworCSAgICAgICAgICAgIC5jbGsgICAgICAgICAgICAgICAgKHdiX2Nsa19iMSAgICAgICAgICApLAorCSAgICAgICAgICAgIC5yc3RfbiAgICAgICAgICAgICAgKHNyc3RfbiAgICAgICAgICAgICApLAorCSAgICAgICAgICAgIC5zY2FuX3NoaWZ0ICAgICAgICAgKGJpc3Rfc2hpZnQgICAgICAgICApLAorCSAgICAgICAgICAgIC5zZGkgICAgICAgICAgICAgICAgKGJpc3Rfc3RpX3NkbyAgICAgICApLAorCQkgICAgLnJlX2luaXQgICAgICAgICAgICAoYmlzdF9lcnJvcl9jb3JyZWN0ICksCisJICAgICAgICAgICAgLnJ1biAgICAgICAgICAgICAgICAocnVuX29wICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5zdGltdWx1cyAgICAgICAgICAgKHN0aW11bHVzICAgICAgICAgICApCisKKyAgICApOworCisKKworbWJpc3RfcGF0X3NlbCAKKyAgICAgICMoCisJIC5CSVNUX0FERFJfV0QgICAgICAgICAgIChCSVNUX0FERFJfV0QgICAgICAgICAgICksCisJIC5CSVNUX0RBVEFfV0QgICAgICAgICAgIChCSVNUX0RBVEFfV0QgICAgICAgICAgICksCisJIC5CSVNUX0FERFJfU1RBUlQgICAgICAgIChCSVNUX0FERFJfU1RBUlQgICAgICAgICksCisJIC5CSVNUX0FERFJfRU5EICAgICAgICAgIChCSVNUX0FERFJfRU5EICAgICAgICAgICksCisJIC5CSVNUX1JFUEFJUl9BRERSX1NUQVJUIChCSVNUX1JFUEFJUl9BRERSX1NUQVJUICksCisJIC5CSVNUX1JBRF9XRF9JICAgICAgICAgIChCSVNUX1JBRF9XRF9JICAgICAgICAgICksCisJIC5CSVNUX1JBRF9XRF9PICAgICAgICAgIChCSVNUX1JBRF9XRF9PICAgICAgICAgICkKKyAgICAgICAgICApCisgICAgICB1X3BhdF9zZWwgKAorICAgICAgICAgICAgICAgICAgICAucGF0X2xhc3QgICAgICAgICAgIChsYXN0X3BhdCAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLnBhdF9kYXRhICAgICAgICAgICAocGF0X2RhdGEgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5zZG8gICAgICAgICAgICAgICAgKGJpc3RfcGF0X3NkbyAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuY2xrICAgICAgICAgICAgICAgICh3Yl9jbGtfYjEgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLnJzdF9uICAgICAgICAgICAgICAoc3JzdF9uICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5ydW4gICAgICAgICAgICAgICAgKHJ1bl9wYXQgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuc2Nhbl9zaGlmdCAgICAgICAgIChiaXN0X3NoaWZ0ICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLnNkaSAgICAgICAgICAgICAgICAoYmlzdF9vcF9zZG8gICAgICAgICkKKworICAgKTsKKworCittYmlzdF9kYXRhX2NtcCAgCisgICAgICAjKAorCSAuQklTVF9BRERSX1dEICAgICAgICAgICAoQklTVF9BRERSX1dEICAgICAgICAgICApLAorCSAuQklTVF9EQVRBX1dEICAgICAgICAgICAoQklTVF9EQVRBX1dEICAgICAgICAgICApLAorCSAuQklTVF9BRERSX1NUQVJUICAgICAgICAoQklTVF9BRERSX1NUQVJUICAgICAgICApLAorCSAuQklTVF9BRERSX0VORCAgICAgICAgICAoQklTVF9BRERSX0VORCAgICAgICAgICApLAorCSAuQklTVF9SRVBBSVJfQUREUl9TVEFSVCAoQklTVF9SRVBBSVJfQUREUl9TVEFSVCApLAorCSAuQklTVF9SQURfV0RfSSAgICAgICAgICAoQklTVF9SQURfV0RfSSAgICAgICAgICApLAorCSAuQklTVF9SQURfV0RfTyAgICAgICAgICAoQklTVF9SQURfV0RfTyAgICAgICAgICApCisgICAgICAgICAgKQorCisKKyAgICAgdV9jbXAgKAorICAgICAgICAgICAgICAgICAgICAuZXJyb3IgICAgICAgICAgICAgIChiaXN0X2Vycm9yICAgICAgICAgKSwKKwkJICAgIC5lcnJvcl9jb3JyZWN0ICAgICAgKGJpc3RfZXJyb3JfY29ycmVjdCApLAorCQkgICAgLmNvcnJlY3QgICAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICksIC8vIHNhbWUgc2lnbmFsIGF2YWlsYWJsZSBhdCBiaXN0IG11eAorCQkgICAgLmVycm9yX2FkZHIgICAgICAgICAoYmlzdF9lcnJvcl9hZGRyICAgICksCisJCSAgICAuZXJyb3JfY250ICAgICAgICAgIChiaXN0X2Vycm9yX2NudCAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmNsayAgICAgICAgICAgICAgICAod2JfY2xrX2IxICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5yc3RfbiAgICAgICAgICAgICAgKHNyc3RfbiAgICAgICAgICAgICApLAorCQkgICAgLmFkZHJfaW5jX3BoYXNlICAgICAocnVuX2FkZHIgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5jb21wYXJlICAgICAgICAgICAgKGNvbXBhcmUgICAgICAgICAgICApLCAKKwkgICAgICAgICAgICAucmVhZF9pbnZlcnQgICAgICAgIChvcF9pbnZlcnQgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmNvbXBfZGF0YSAgICAgICAgICAocGF0X2RhdGEgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5yeGRfZGF0YSAgICAgICAgICAgKGZ1bmNfZG91dF9hICAgICAgICApLAorCQkgICAgLmFkZHIgICAgICAgICAgICAgICAoYmlzdF9hZGRyICAgICAgICAgICkKKwkgICAgIAorCSk7CisKKworbWJpc3RfbWVtX3dyYXBwZXIgIygKKwkgLkJJU1RfQUREUl9XRCAgICAgICAgICAgKEJJU1RfQUREUl9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfREFUQV9XRCAgICAgICAgICAgKEJJU1RfREFUQV9XRCAgICAgICAgICAgKQorICAgICAgICAgICkgdV9tZW1fd3JhcHBlcigKKwkgICAgICAgICAgICAucnN0X24gICAgICAgICAgIChzcnN0X24gICAgICAgICAgICksCisgICAgICAgICAgICAgICAvLyBXQiBJL0YKKyAgICAgICAgICAgICAgICAgICAgLndiX2Nsa19pICAgICAgICAod2JfY2xrX2IyICAgICAgICApLCAgLy8gU3lzdGVtIGNsb2NrCisgICAgICAgICAgICAgICAgICAgIC53Yl9jeWNfaSAgICAgICAgKHdiX2N5Y19pICAgICAgICAgKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgICAgICAgICAgICAgIC53Yl9zdGJfaSAgICAgICAgKHdiX3N0Yl9pICAgICAgICAgKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgICAgICAgICAgICAgIC53Yl9hZHJfaSAgICAgICAgKHdiX2Fkcl9pICAgICAgICAgKSwgIC8vIGFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICAgLndiX3dlX2kgICAgICAgICAod2Jfd2VfaSAgICAgICAgICApLCAgLy8gd3JpdGUKKyAgICAgICAgICAgICAgICAgICAgLndiX2RhdF9pICAgICAgICAod2JfZGF0X2kgICAgICAgICApLCAgLy8gZGF0YSBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgLndiX3NlbF9pICAgICAgICAod2Jfc2VsX2kgICAgICAgICApLCAgLy8gYnl0ZSBlbmFibGUKKyAgICAgICAgICAgICAgICAgICAgLndiX2RhdF9vICAgICAgICAod2JfZGF0X28gICAgICAgICApLCAgLy8gZGF0YSBpbnB1dAorICAgICAgICAgICAgICAgICAgICAud2JfYWNrX28gICAgICAgICh3Yl9hY2tfbyAgICAgICAgICksICAvLyBhY2tub3dsZWdlbWVudAorICAgICAgICAgICAgICAgICAgICAud2JfZXJyX28gICAgICAgICh3Yl9lcnJfbyAgICAgICAgICksICAvLyBlcnJvcgorICAgICAgICAgICAgICAgIC8vIE1FTSBBIFBPUlQgCisgICAgICAgICAgICAgICAgICAgIC5mdW5jX2Nsa19hICAgICAgKGZ1bmNfY2xrX2EgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmZ1bmNfY2VuX2EgICAgICAoZnVuY19jZW5fYSAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuZnVuY19hZGRyX2EgICAgIChmdW5jX2FkZHJfYSAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5mdW5jX2RvdXRfYSAgICAgKGZ1bmNfZG91dF9hICAgICAgKSwKKyAgCisgICAgICAgICAgICAgICAgLy8gRnVuY3Rpb25hbCBCIFBvcnQKKyAgICAgICAgICAgICAgICAgICAgLmZ1bmNfY2xrX2IgICAgICAoZnVuY19jbGtfYiAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuZnVuY19jZW5fYiAgICAgIChmdW5jX2Nlbl9iICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5mdW5jX3dlYl9iICAgICAgKGZ1bmNfd2ViX2IgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmZ1bmNfbWFza19iICAgICAoZnVuY19tYXNrX2IgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuZnVuY19hZGRyX2IgICAgIChmdW5jX2FkZHJfYiAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5mdW5jX2Rpbl9iICAgICAgKGZ1bmNfZGluX2IgICAgICAgKSAgICAgCisgICAgICk7CisKKworbWJpc3RfbXV4ICAKKyAgICAgICMoCisJIC5CSVNUX0FERFJfV0QgICAgICAgICAgIChCSVNUX0FERFJfV0QgICAgICAgICAgICksCisJIC5CSVNUX0RBVEFfV0QgICAgICAgICAgIChCSVNUX0RBVEFfV0QgICAgICAgICAgICksCisJIC5CSVNUX0FERFJfU1RBUlQgICAgICAgIChCSVNUX0FERFJfU1RBUlQgICAgICAgICksCisJIC5CSVNUX0FERFJfRU5EICAgICAgICAgIChCSVNUX0FERFJfRU5EICAgICAgICAgICksCisJIC5CSVNUX1JFUEFJUl9BRERSX1NUQVJUIChCSVNUX1JFUEFJUl9BRERSX1NUQVJUICksCisJIC5CSVNUX1JBRF9XRF9JICAgICAgICAgIChCSVNUX1JBRF9XRF9JICAgICAgICAgICksCisJIC5CSVNUX1JBRF9XRF9PICAgICAgICAgIChCSVNUX1JBRF9XRF9PICAgICAgICAgICkKKyAgICAgICAgICApCisgICAgICAgdV9tZW1fc2VsICgKKworCSAgICAgICAgICAgIC5zY2FuX21vZGUgICAgICAgICAgICAoMSdiMCAgICAgICAgICApLAorCisgICAgICAgICAgICAgICAgICAgIC5yc3RfbiAgICAgICAgICAgICAgICAoc3JzdF9uICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAvLyBNQklTVCBDVFJMIFNJR05BTAorICAgICAgICAgICAgICAgICAgICAuYmlzdF9lbiAgICAgICAgICAgICAgKGJpc3RfZW4gICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmJpc3RfYWRkciAgICAgICAgICAgIChiaXN0X2FkZHIgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5iaXN0X3dkYXRhICAgICAgICAgICAoYmlzdF93ZGF0YSAgICApLAorICAgICAgICAgICAgICAgICAgICAuYmlzdF9jbGsgICAgICAgICAgICAgKHdiX2Nsa19iMiAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmJpc3Rfd3IgICAgICAgICAgICAgIChiaXN0X3dyICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5iaXN0X3JkICAgICAgICAgICAgICAoYmlzdF9yZCAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuYmlzdF9lcnJvciAgICAgICAgICAgKGJpc3RfZXJyb3JfY29ycmVjdCksCisgICAgICAgICAgICAgICAgICAgIC5iaXN0X2Vycm9yX2FkZHIgICAgICAoYmlzdF9lcnJvcl9hZGRyKSwKKyAgICAgICAgICAgICAgICAgICAgLmJpc3RfY29ycmVjdCAgICAgICAgIChiaXN0X2NvcnJlY3QgICksCisJCSAgICAuYmlzdF9zZGkgICAgICAgICAgICAgKGJpc3RfcGF0X3NkbyksCisJCSAgICAuYmlzdF9zaGlmdCAgICAgICAgICAgKGJpc3Rfc2hpZnQpLAorCQkgICAgLmJpc3Rfc2RvICAgICAgICAgICAgIChiaXN0X3NkbyksCisKKyAgICAgICAgICAgICAgICAgICAgLy8gRlVOQ1RJT05BTCBDVFJMIFNJR05BTAorICAgICAgICAgICAgICAgICAgICAuZnVuY19jbGtfYSAgICAgICAgICAoZnVuY19jbGtfYSAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmZ1bmNfY2VuX2EgICAgICAgICAgKGZ1bmNfY2VuX2EgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5mdW5jX2FkZHJfYSAgICAgICAgIChmdW5jX2FkZHJfYSAgICApLAorICAgICAgICAgICAgICAgICAgICAvLyBDb21tb24gZm9yIGZ1bmMgYW5kIE1iaXN0IGkvZgorICAgICAgICAgICAgICAgICAgICAuZnVuY19kb3V0X2EgICAgICAgICAoZnVuY19kb3V0X2EgICAgKSwKKworICAgICAgICAgICAgICAgICAgICAuZnVuY19jbGtfYiAgICAgICAgICAoZnVuY19jbGtfYiAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmZ1bmNfY2VuX2IgICAgICAgICAgKGZ1bmNfY2VuX2IgICAgICksCisJICAgICAgICAgICAgLmZ1bmNfd2ViX2IgICAgICAgICAgKGZ1bmNfd2ViX2IgICAgICksCisJICAgICAgICAgICAgLmZ1bmNfbWFza19iICAgICAgICAgKGZ1bmNfbWFza19iICAgICksCisgICAgICAgICAgICAgICAgICAgIC5mdW5jX2FkZHJfYiAgICAgICAgIChmdW5jX2FkZHJfYiAgICApLAorICAgICAgICAgICAgICAgICAgICAuZnVuY19kaW5fYiAgICAgICAgICAoZnVuY19kaW5fYiAgICAgKSwKKworCisgICAgICAgICAgICAgICAgICAgIC8vIHRvd2FyZHMgbWVtb3J5CisgICAgICAgICAgICAgICAgICAgIC8vIE1lbW9yeSBPdXQgUG9ydAorICAgICAgICAgICAgICAgICAgICAubWVtX2Nsa19hICAgICAgICAgICAobWVtX2Nsa19hICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLm1lbV9jZW5fYSAgICAgICAgICAgKG1lbV9jZW5fYSAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5tZW1fYWRkcl9hICAgICAgICAgIChtZW1fYWRkcl9hICAgICApLAorICAgICAgICAgICAgICAgICAgICAubWVtX2RvdXRfYSAgICAgICAgICAobWVtX2RvdXRfYSAgICAgKSwKKworICAgICAgICAgICAgICAgICAgICAvLyBNZW1vcnkgSW5wdXQgUG9ydAorICAgICAgICAgICAgICAgICAgICAubWVtX2Nsa19iICAgICAgICAgICAobWVtX2Nsa19iICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLm1lbV9jZW5fYiAgICAgICAgICAgKG1lbV9jZW5fYiAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5tZW1fd2ViX2IgICAgICAgICAgIChtZW1fd2ViX2IgICAgICApLAorICAgICAgICAgICAgICAgICAgICAubWVtX21hc2tfYiAgICAgICAgICAobWVtX21hc2tfYiAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLm1lbV9hZGRyX2IgICAgICAgICAgKG1lbV9hZGRyX2IgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5tZW1fZGluX2IgICAgICAgICAgIChtZW1fZGluX2IgICAgICApCisgICAgKTsKKworCitlbmRtb2R1bGUKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL3RvcC9tYmlzdF90b3AyLnN2IGIvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL3RvcC9tYmlzdF90b3AyLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NDMzZGYKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvdG9wL21iaXN0X3RvcDIuc3YKQEAgLTAsMCArMSw0NzkgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgTUJJU1QgVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIG1iaXN0X2N0cmwgY29yZXMgcHJvamVjdCAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEvbWJpc3RfY3RybC5naXQgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIFRoaXMgYmxvY2sgaW50ZWdyYXRlIG1iaXN0IGNvbnRyb2xsZXIgd2l0aCByb3cgICAgICAgICAgLy8vLworLy8vLyAgICAgIHJlZGVuZGVuY3kgZmVhdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjAgLSAxMXRoIE9jdCAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBJbml0aWFsIGludGVncmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjEgLSAyNnRoIE9jdCAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBGaXhlZCBFcnJvciBBZGRyZXNzIGFyZSBzZXJpYWwgc2hpZnRlZCB0aHJvdWdoICAgICAgLy8vLworLy8vLyAgICAgICAgICBzZGkvc2RvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitgaW5jbHVkZSAibWJpc3RfZGVmLnN2aCIKK21vZHVsZSBtYmlzdF90b3AyIAorICAgICAjKCAgcGFyYW1ldGVyIFNDVyA9IDgsICAgLy8gU0NBTiBDSEFJTiBXSURUSAorICAgICAgICAgcGFyYW1ldGVyIEJJU1RfQUREUl9XRCAgICAgICAgICAgPSA4LAorCSBwYXJhbWV0ZXIgQklTVF9EQVRBX1dEICAgICAgICAgICA9IDMyLAorCSBwYXJhbWV0ZXIgQklTVF9BRERSX1NUQVJUICAgICAgICA9IDgnaDAwLAorCSBwYXJhbWV0ZXIgQklTVF9BRERSX0VORCAgICAgICAgICA9IDgnaEZCLAorCSBwYXJhbWV0ZXIgQklTVF9SRVBBSVJfQUREUl9TVEFSVCA9IDgnaEZDLAorCSBwYXJhbWV0ZXIgQklTVF9SQURfV0RfSSAgICAgICAgICA9IEJJU1RfQUREUl9XRCwKKwkgcGFyYW1ldGVyIEJJU1RfUkFEX1dEX08gICAgICAgICAgPSBCSVNUX0FERFJfV0QpICgKKworYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgaW5vdXQgdmNjZDEsCS8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgaW5vdXQgdnNzZDEsCS8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKworICAgICAgIC8vIFNjYW4gSS9GCisgICAgICAgaW5wdXQgbG9naWMgICAgICAgICAgICAgc2Nhbl9lbiwKKyAgICAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICBzY2FuX21vZGUsCisgICAgICAgaW5wdXQgbG9naWMgW1NDVy0xOjBdICAgc2Nhbl9zaSwKKyAgICAgICBvdXRwdXQgbG9naWMgW1NDVy0xOjBdICBzY2FuX3NvLAorICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgIHNjYW5fZW5fbywKKyAgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICBzY2FuX21vZGVfbywKKwkKKyAgICAvLyBDbG9jayBTa2V3IEFkanVzdAorICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX2ludCwgCisgICAgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfbWJpc3QsCisgICAgICAgaW5wdXQgICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgIGNmZ19jc2thX21iaXN0LCAvLyBjbG9jayBza2V3IGFkanVzdCBmb3Igd2ViIGhvc3QKKworCWlucHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLAorCisJLy8gTUJJU1QgSS9GCisJaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9lbiwKKwlpbnB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X3J1biwKKwlpbnB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X3NoaWZ0LAorCWlucHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgIGJpc3RfbG9hZCwKKwlpbnB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X3NkaSwKKworCW91dHB1dCBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgIGJpc3RfZXJyb3JfY250LAorCW91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIGJpc3RfY29ycmVjdCwKKwlvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X2Vycm9yLAorCW91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIGJpc3RfZG9uZSwKKwlvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X3NkbywKKworCisgICAgICAgIC8vIFdCIEkvRgorICAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICB3Yl9jbGtfaSwgIC8vIFN5c3RlbSBjbG9jaworICAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICB3Yl9jeWNfaSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgIHdiX3N0Yl9pLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgaW5wdXQgICBsb2dpYyBbQklTVF9BRERSX1dELTE6MF0gICAgd2JfYWRyX2ksICAvLyBhZGRyZXNzCisgICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgIHdiX3dlX2kgLCAgLy8gd3JpdGUKKyAgICAgICAgaW5wdXQgICBsb2dpYyBbQklTVF9EQVRBX1dELTE6MF0gICAgd2JfZGF0X2ksICAvLyBkYXRhIG91dHB1dAorICAgICAgICBpbnB1dCAgIGxvZ2ljIFtCSVNUX0RBVEFfV0QvOC0xOjBdICB3Yl9zZWxfaSwgIC8vIGJ5dGUgZW5hYmxlCisgICAgICAgIG91dHB1dCAgbG9naWMgW0JJU1RfREFUQV9XRC0xOjBdICAgIHdiX2RhdF9vLCAgLy8gZGF0YSBpbnB1dAorICAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICB3Yl9hY2tfbywgIC8vIGFja25vd2xlZ2VtZW50CisgICAgICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgIHdiX2Vycl9vLCAgLy8gZXJyb3IKKworICAgICAvLyB0b3dhcmRzIG1lbW9yeQorICAgICAvLyBQT1JULUEKKyAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgbWVtX2Nsa19hLAorICAgICAgICBvdXRwdXQgbG9naWMgICBbQklTVF9BRERSX1dELTE6MF1tZW1fYWRkcl9hLAorICAgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICBtZW1fY2VuX2EsCisgICAgICAgIG91dHB1dCBsb2dpYyAgIFtCSVNUX0RBVEFfV0QtMTowXW1lbV9kaW5fYiwKKyAgICAgLy8gUE9SVC1CCisgICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgIG1lbV9jbGtfYiwKKyAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgbWVtX2Nlbl9iLAorICAgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICBtZW1fd2ViX2IsCisgICAgICAgIG91dHB1dCBsb2dpYyBbQklTVF9EQVRBX1dELzgtMTowXW1lbV9tYXNrX2IsCisgICAgICAgIG91dHB1dCBsb2dpYyAgIFtCSVNUX0FERFJfV0QtMTowXW1lbV9hZGRyX2IsCisgICAgICAgIGlucHV0ICBsb2dpYyAgIFtCSVNUX0RBVEFfV0QtMTowXW1lbV9kb3V0X2EKKworCisKKworKTsKKworLy8gRlVOQ1RJT05BTCBBIFBPUlQgCitsb2dpYyAgICAgICAgICAgICAgICAgICAgZnVuY19jbGtfYTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBmdW5jX2Nlbl9hOworbG9naWMgIFtCSVNUX0FERFJfV0QtMTowXWZ1bmNfYWRkcl9hOworbG9naWMgIFtCSVNUX0RBVEFfV0QtMTowXWZ1bmNfZG91dF9hOworCisvLyBGdW5jdGlvbmFsIEIgUG9ydAorbG9naWMgICAgICAgICAgICAgICAgICAgIGZ1bmNfY2xrX2I7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgZnVuY19jZW5fYjsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBmdW5jX3dlYl9iOworbG9naWMgW0JJU1RfREFUQV9XRC84LTE6MF1mdW5jX21hc2tfYjsKK2xvZ2ljICBbQklTVF9BRERSX1dELTE6MF1mdW5jX2FkZHJfYjsKK2xvZ2ljICBbQklTVF9EQVRBX1dELTE6MF1mdW5jX2Rpbl9iOworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2NhbCB2YXJpYWJsZSBkZWZpbmF0aW9uCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCitsb2dpYyAgICAgICAgICAgICAgICAgICAgc3JzdF9uICAgICA7IC8vIHN5bmMgcmVzZXQgdy5yLnQgYmlzdF9jbGsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBjbWRfcGhhc2UgIDsgIC8vIENvbW1hbmQgUGhhc2UKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBjbXBfcGhhc2UgIDsgIC8vIENvbXBhcmUgUGhhc2UKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBydW5fb3AgICAgIDsgIC8vIFJ1biBuZXh0IE9wZXJhdGlvbgorbG9naWMgICAgICAgICAgICAgICAgICAgIHJ1bl9hZGRyICAgOyAgLy8gUnVuIE5leHQgQWRkcmVzcworbG9naWMgICAgICAgICAgICAgICAgICAgIHJ1bl9zdGkgICAgOyAgLy8gUnVuIE5leHQgU3RpbXVsdXMKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBydW5fcGF0ICAgIDsgIC8vIFJ1biBOZXh0IFBhdHRlcm4KK2xvZ2ljICAgICAgICAgICAgICAgICAgICBvcF91cGRvd24gIDsgIC8vIEFkcmVzcyB1cGRvd24gZGlyZWN0aW9uCitsb2dpYyAgICAgICAgICAgICAgICAgICAgbGFzdF9hZGRyICA7ICAvLyBsYXN0IGFkZHJlc3MgaW5kaWNhdGlvbgorbG9naWMgICAgICAgICAgICAgICAgICAgIGxhc3Rfc3RpICAgOyAgLy8gbGFzdCBzdGltdWx1cworbG9naWMgICAgICAgICAgICAgICAgICAgIGxhc3Rfb3AgICAgOyAgLy8gbGFzdCBvcGVyYXRpb24KK2xvZ2ljICAgICAgICAgICAgICAgICAgICBsYXN0X3BhdCAgIDsgIC8vIGxhc3QgcGF0dGVybgorbG9naWMgW0JJU1RfREFUQV9XRC0xOjBdIHBhdF9kYXRhICAgOyAgLy8gU2VsZWN0ZWQgRGF0YSBQYXR0ZXJuCitsb2dpYyBbQklTVF9TVElfV0QtMTowXSAgc3RpbXVsdXMgICA7ICAvLyBjdXJyZW50IHN0aW11bHVzCitsb2dpYyAgICAgICAgICAgICAgICAgICAgY29tcGFyZSAgICA7ICAvLyBjb21wYXJlIGRhdGEKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBvcF9yZXBlYXRmbGFnOworbG9naWMgICAgICAgICAgICAgICAgICAgIG9wX3JldmVyc2U7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgb3BfcmVhZCAgIDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBvcF93cml0ZSAgIDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBvcF9pbnZlcnQgICA7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTREkgPT4gU0RPIGRpYXN5IGNoYWluCisvLyBiaXN0X3NkaSA9PiBiaXN0X2FkZHJfc2RvID0+ICBiaXN0X3N0aV9zZG8gPT4gIGJpc3Rfb3Bfc2RvID0+IGJpc3RfcGF0X3NkbyA9PiBiaXN0X3NkbworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsb2dpYyAgICAgICAgICAgICAgICAgICAgYmlzdF9hZGRyX3NkbyAgIDsgICAgICAgICAgICAgICAgIAorbG9naWMgICAgICAgICAgICAgICAgICAgIGJpc3Rfc3RpX3NkbyAgICA7ICAgICAgICAgICAgICAgICAKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBiaXN0X29wX3NkbyAgICAgOyAgICAgICAgICAgICAgICAgCitsb2dpYyAgICAgICAgICAgICAgICAgICAgYmlzdF9wYXRfc2RvICAgIDsgICAgICAgICAgICAgICAgIAorCitsb2dpYyAgICAgICAgICAgICAgICAgICAgYmlzdF9lcnJvcl9jb3JyZWN0ICA7Citsb2dpYyAgW0JJU1RfQUREUl9XRC0xOjBdYmlzdF9lcnJvcl9hZGRyIDsgLy8gYmlzdCBhZGRyZXNzCisKK2xvZ2ljICBbQklTVF9BRERSX1dELTE6MF1iaXN0X2FkZHIgICAgICAgOyAvLyBiaXN0IGFkZHJlc3MKK2xvZ2ljIFtCSVNUX0RBVEFfV0QtMTowXSBiaXN0X3dkYXRhICAgICAgOyAvLyBiaXN0IHdyaXRlIGRhdGEKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBiaXN0X3dyICAgICAgICAgOworbG9naWMgICAgICAgICAgICAgICAgICAgIGJpc3RfcmQgICAgICAgICA7CisKK2Fzc2lnbiBzY2FuX2VuX28gPSBzY2FuX2VuOworYXNzaWduIHNjYW5fbW9kZV9vID0gc2Nhbl9tb2RlOworCithc3NpZ24gYmlzdF93ciA9IChjbWRfcGhhc2UgJiYgb3Bfd3JpdGUpOworYXNzaWduIGJpc3RfcmQgPSAoY21kX3BoYXNlICYmIG9wX3JlYWQpOworCithc3NpZ24gY29tcGFyZSAgICA9IChjbXBfcGhhc2UgJiYgb3BfcmVhZCk7Cithc3NpZ24gYmlzdF93ZGF0YSA9IChvcF9pbnZlcnQpID8gfnBhdF9kYXRhIDogcGF0X2RhdGE7CisKKy8vIENsb2NrIFRyZWUgYnJhbmNoaW5nIHRvIGF2b2lkIGNsb2NrIGxhdGVuY3kgdG93YXJkcyBTUkFNIHBhdGgKK3dpcmUgd2JfY2xrX2IxLHdiX2Nsa19iMjsKK2N0ZWNoX2Nsa19idWYgdV9jdHNfd2JfY2xrX2IxICguQSAod2JfY2xrX2kpLCAuIFgod2JfY2xrX2IxKSk7CitjdGVjaF9jbGtfYnVmIHVfY3RzX3diX2Nsa19iMiAoLkEgKHdiX2Nsa19pKSwgLiBYKHdiX2Nsa19iMikpOworCisvLyB3Yl9ob3N0IGNsb2NrIHNrZXcgY29udHJvbAorY2xrX3NrZXdfYWRqdXN0IHVfc2tld19tYmlzdAorICAgICAgICgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgICAgICAgICAgICAgLnZjY2QxICAgICAgKHZjY2QxICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICAgICAgICAgICAgIC52c3NkMSAgICAgICh2c3NkMSAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKwkgICAgICAgLmNsa19pbiAgICAgKHdiZF9jbGtfaW50ICAgICAgICAgICAgICAgICksIAorCSAgICAgICAuc2VsICAgICAgICAoY2ZnX2Nza2FfbWJpc3QgICAgICAgICAgICAgKSwgCisJICAgICAgIC5jbGtfb3V0ICAgICh3YmRfY2xrX21iaXN0ICAgICAgICAgICAgICApIAorICAgICAgICk7CisKK3Jlc2V0X3N5bmMgICB1X3Jlc2V0X3N5bmMgKAorCSAgICAgIC5zY2FuX21vZGUgIChzY2FuX21vZGUgKSwKKyAgICAgICAgICAgICAgLmRjbGsgICAgICAgKHdiX2Nsa19iMSApLCAvLyBEZXN0aW5hdGlvbiBjbG9jayBkb21haW4KKwkgICAgICAuYXJzdF9uICAgICAocnN0X24gICAgICksIC8vIGFjdGl2ZSBsb3cgYXN5bmMgcmVzZXQKKyAgICAgICAgICAgICAgLnNyc3RfbiAgICAgKHNyc3RfbiAgICApCisgICAgICAgICAgKTsKKworCisKKy8vIGJpc3QgbWFpbiBjb250cm9sIEZTTQorCittYmlzdF9mc20gIAorICAgICAgIygKKwkgLkJJU1RfQUREUl9XRCAgICAgICAgICAgKEJJU1RfQUREUl9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfREFUQV9XRCAgICAgICAgICAgKEJJU1RfREFUQV9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfQUREUl9TVEFSVCAgICAgICAgKEJJU1RfQUREUl9TVEFSVCAgICAgICAgKSwKKwkgLkJJU1RfQUREUl9FTkQgICAgICAgICAgKEJJU1RfQUREUl9FTkQgICAgICAgICAgKSwKKwkgLkJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKEJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKSwKKwkgLkJJU1RfUkFEX1dEX0kgICAgICAgICAgKEJJU1RfUkFEX1dEX0kgICAgICAgICAgKSwKKwkgLkJJU1RfUkFEX1dEX08gICAgICAgICAgKEJJU1RfUkFEX1dEX08gICAgICAgICAgKQorICAgICAgICAgICkKKyAgICAgdV9mc20gKAorCisJICAgICAgICAgICAgLmNtZF9waGFzZSAgICAgICAgICAoY21kX3BoYXNlICAgICAgICAgICApLAorCSAgICAgICAgICAgIC5jbXBfcGhhc2UgICAgICAgICAgKGNtcF9waGFzZSAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAucnVuX29wICAgICAgICAgICAgIChydW5fb3AgICAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAucnVuX2FkZHIgICAgICAgICAgIChydW5fYWRkciAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAucnVuX3N0aSAgICAgICAgICAgIChydW5fc3RpICAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAucnVuX3BhdCAgICAgICAgICAgIChydW5fcGF0ICAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAuYmlzdF9kb25lICAgICAgICAgIChiaXN0X2RvbmUgICAgICAgICAgKSwKKworCisJICAgICAgICAgICAgLmNsayAgICAgICAgICAgICAgICAod2JfY2xrX2IxICAgICAgICAgICksCisJICAgICAgICAgICAgLnJzdF9uICAgICAgICAgICAgICAoc3JzdF9uICAgICAgICAgICAgICksCisJICAgICAgICAgICAgLmJpc3RfcnVuICAgICAgICAgICAoYmlzdF9ydW4gICAgICAgICAgICksCisJICAgICAgICAgICAgLmxhc3Rfb3AgICAgICAgICAgICAobGFzdF9vcCAgICAgICAgICAgICksCisJICAgICAgICAgICAgLmxhc3RfYWRkciAgICAgICAgICAobGFzdF9hZGRyICAgICAgICAgICksCisJICAgICAgICAgICAgLmxhc3Rfc3RpICAgICAgICAgICAobGFzdF9zdGkgICAgICAgICAgICksCisJICAgICAgICAgICAgLmxhc3RfcGF0ICAgICAgICAgICAobGFzdF9wYXQgICAgICAgICAgICksCisJCSAgICAub3BfcmV2ZXJzZSAgICAgICAgIChvcF9yZXZlcnNlICAgICAgICAgKSwKKwkJICAgIC5iaXN0X2Vycm9yICAgICAgICAgKGJpc3RfZXJyb3IgICAgICAgICApCispOworCisKKy8vIGJpc3QgYWRkcmVzcyBnZW5lcmF0aW9uCittYmlzdF9hZGRyX2dlbiAgIAorICAgICAgIygKKwkgLkJJU1RfQUREUl9XRCAgICAgICAgICAgKEJJU1RfQUREUl9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfREFUQV9XRCAgICAgICAgICAgKEJJU1RfREFUQV9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfQUREUl9TVEFSVCAgICAgICAgKEJJU1RfQUREUl9TVEFSVCAgICAgICAgKSwKKwkgLkJJU1RfQUREUl9FTkQgICAgICAgICAgKEJJU1RfQUREUl9FTkQgICAgICAgICAgKSwKKwkgLkJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKEJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKSwKKwkgLkJJU1RfUkFEX1dEX0kgICAgICAgICAgKEJJU1RfUkFEX1dEX0kgICAgICAgICAgKSwKKwkgLkJJU1RfUkFEX1dEX08gICAgICAgICAgKEJJU1RfUkFEX1dEX08gICAgICAgICAgKQorICAgICAgICAgICkKKyAgICAgIHVfYWRkcl9nZW4oCisgICAgICAgICAgICAgICAgICAgIC5sYXN0X2FkZHIgICAgICAgICAgKGxhc3RfYWRkciAgICAgICAgICApLCAKKyAgICAgICAgICAgICAgICAgICAgLmJpc3RfYWRkciAgICAgICAgICAoYmlzdF9hZGRyICAgICAgICAgICksICAgCisgICAgICAgICAgICAgICAgICAgIC5zZG8gICAgICAgICAgICAgICAgKGJpc3RfYWRkcl9zZG8gICAgICApLCAgICAgICAgIAorCisgICAgICAgICAgICAgICAgICAgIC5jbGsgICAgICAgICAgICAgICAgKHdiX2Nsa19iMSAgICAgICAgICApLCAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAucnN0X24gICAgICAgICAgICAgIChzcnN0X24gICAgICAgICAgICAgKSwgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC5ydW4gICAgICAgICAgICAgICAgKHJ1bl9hZGRyICAgICAgICAgICApLCAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAudXBkb3duICAgICAgICAgICAgIChvcF91cGRvd24gICAgICAgICAgKSwgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLnNjYW5fc2hpZnQgICAgICAgICAoYmlzdF9zaGlmdCAgICAgICAgICksICAKKyAgICAgICAgICAgICAgICAgICAgLnNjYW5fbG9hZCAgICAgICAgICAoYmlzdF9sb2FkICAgICAgICAgICksICAgCisgICAgICAgICAgICAgICAgICAgIC5zZGkgICAgICAgICAgICAgICAgKGJpc3Rfc2RpICAgICAgICAgICApCisKKyk7CisKKworLy8gQklTVCBjdXJyZW50IHN0aW11bHVzIHNlbGVjdGlvbgorbWJpc3Rfc3RpX3NlbCAKKyAgICAgICMoCisJIC5CSVNUX0FERFJfV0QgICAgICAgICAgIChCSVNUX0FERFJfV0QgICAgICAgICAgICksCisJIC5CSVNUX0RBVEFfV0QgICAgICAgICAgIChCSVNUX0RBVEFfV0QgICAgICAgICAgICksCisJIC5CSVNUX0FERFJfU1RBUlQgICAgICAgIChCSVNUX0FERFJfU1RBUlQgICAgICAgICksCisJIC5CSVNUX0FERFJfRU5EICAgICAgICAgIChCSVNUX0FERFJfRU5EICAgICAgICAgICksCisJIC5CSVNUX1JFUEFJUl9BRERSX1NUQVJUIChCSVNUX1JFUEFJUl9BRERSX1NUQVJUICksCisJIC5CSVNUX1JBRF9XRF9JICAgICAgICAgIChCSVNUX1JBRF9XRF9JICAgICAgICAgICksCisJIC5CSVNUX1JBRF9XRF9PICAgICAgICAgIChCSVNUX1JBRF9XRF9PICAgICAgICAgICkKKyAgICAgICAgICApCisgICAgICAgdV9zdGlfc2VsKAorCisJICAgICAgICAgICAgLnNkbyAgICAgICAgICAgICAgICAoYmlzdF9zdGlfc2RvICAgICAgICksICAKKwkgICAgICAgICAgICAubGFzdF9zdGltdWx1cyAgICAgIChsYXN0X3N0aSAgICAgICAgICAgKSwgIAorICAgICAgICAgICAgICAgICAgICAuc3RpbXVsdXMgICAgICAgICAgIChzdGltdWx1cyAgICAgICAgICAgKSwKKworCSAgICAgICAgICAgIC5jbGsgICAgICAgICAgICAgICAgKHdiX2Nsa19iMSAgICAgICAgICApLCAgCisJICAgICAgICAgICAgLnJzdF9uICAgICAgICAgICAgICAoc3JzdF9uICAgICAgICAgICAgICksICAKKwkgICAgICAgICAgICAuc2Nhbl9zaGlmdCAgICAgICAgIChiaXN0X3NoaWZ0ICAgICAgICAgKSwgIAorCSAgICAgICAgICAgIC5zZGkgICAgICAgICAgICAgICAgKGJpc3RfYWRkcl9zZG8gICAgICApLCAgCisJICAgICAgICAgICAgLnJ1biAgICAgICAgICAgICAgICAocnVuX3N0aSAgICAgICAgICAgICkgICAgICAgICAgICAgIAorCispOworCisKKy8vIEJpc3QgT3BlcmF0aW9uIHNlbGVjdGlvbgorbWJpc3Rfb3Bfc2VsIAorICAgICAgIygKKwkgLkJJU1RfQUREUl9XRCAgICAgICAgICAgKEJJU1RfQUREUl9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfREFUQV9XRCAgICAgICAgICAgKEJJU1RfREFUQV9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfQUREUl9TVEFSVCAgICAgICAgKEJJU1RfQUREUl9TVEFSVCAgICAgICAgKSwKKwkgLkJJU1RfQUREUl9FTkQgICAgICAgICAgKEJJU1RfQUREUl9FTkQgICAgICAgICAgKSwKKwkgLkJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKEJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKSwKKwkgLkJJU1RfUkFEX1dEX0kgICAgICAgICAgKEJJU1RfUkFEX1dEX0kgICAgICAgICAgKSwKKwkgLkJJU1RfUkFEX1dEX08gICAgICAgICAgKEJJU1RfUkFEX1dEX08gICAgICAgICAgKQorICAgICAgICAgICkKKyAgICAgICAgdV9vcF9zZWwgKAorCisgICAgICAgICAgICAgICAgICAgIC5vcF9yZWFkICAgICAgICAgICAgKG9wX3JlYWQgICAgICAgICAgICApLCAKKwkgICAgICAgICAgICAub3Bfd3JpdGUgICAgICAgICAgIChvcF93cml0ZSAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAub3BfaW52ZXJ0ICAgICAgICAgIChvcF9pbnZlcnQgICAgICAgICAgKSwKKwkgICAgICAgICAgICAub3BfdXBkb3duICAgICAgICAgIChvcF91cGRvd24gICAgICAgICAgKSwKKwkgICAgICAgICAgICAub3BfcmV2ZXJzZSAgICAgICAgIChvcF9yZXZlcnNlICAgICAgICAgKSwKKwkgICAgICAgICAgICAub3BfcmVwZWF0ZmxhZyAgICAgIChvcF9yZXBlYXRmbGFnICAgICAgKSwKKwkgICAgICAgICAgICAuc2RvICAgICAgICAgICAgICAgIChiaXN0X29wX3NkbyAgICAgICAgKSwKKwkgICAgICAgICAgICAubGFzdF9vcCAgICAgICAgICAgIChsYXN0X29wICAgICAgICAgICAgKSwKKworCSAgICAgICAgICAgIC5jbGsgICAgICAgICAgICAgICAgKHdiX2Nsa19iMSAgICAgICAgICApLAorCSAgICAgICAgICAgIC5yc3RfbiAgICAgICAgICAgICAgKHNyc3RfbiAgICAgICAgICAgICApLAorCSAgICAgICAgICAgIC5zY2FuX3NoaWZ0ICAgICAgICAgKGJpc3Rfc2hpZnQgICAgICAgICApLAorCSAgICAgICAgICAgIC5zZGkgICAgICAgICAgICAgICAgKGJpc3Rfc3RpX3NkbyAgICAgICApLAorCQkgICAgLnJlX2luaXQgICAgICAgICAgICAoYmlzdF9lcnJvcl9jb3JyZWN0ICksCisJICAgICAgICAgICAgLnJ1biAgICAgICAgICAgICAgICAocnVuX29wICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5zdGltdWx1cyAgICAgICAgICAgKHN0aW11bHVzICAgICAgICAgICApCisKKyAgICApOworCisKKworbWJpc3RfcGF0X3NlbCAKKyAgICAgICMoCisJIC5CSVNUX0FERFJfV0QgICAgICAgICAgIChCSVNUX0FERFJfV0QgICAgICAgICAgICksCisJIC5CSVNUX0RBVEFfV0QgICAgICAgICAgIChCSVNUX0RBVEFfV0QgICAgICAgICAgICksCisJIC5CSVNUX0FERFJfU1RBUlQgICAgICAgIChCSVNUX0FERFJfU1RBUlQgICAgICAgICksCisJIC5CSVNUX0FERFJfRU5EICAgICAgICAgIChCSVNUX0FERFJfRU5EICAgICAgICAgICksCisJIC5CSVNUX1JFUEFJUl9BRERSX1NUQVJUIChCSVNUX1JFUEFJUl9BRERSX1NUQVJUICksCisJIC5CSVNUX1JBRF9XRF9JICAgICAgICAgIChCSVNUX1JBRF9XRF9JICAgICAgICAgICksCisJIC5CSVNUX1JBRF9XRF9PICAgICAgICAgIChCSVNUX1JBRF9XRF9PICAgICAgICAgICkKKyAgICAgICAgICApCisgICAgICB1X3BhdF9zZWwgKAorICAgICAgICAgICAgICAgICAgICAucGF0X2xhc3QgICAgICAgICAgIChsYXN0X3BhdCAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLnBhdF9kYXRhICAgICAgICAgICAocGF0X2RhdGEgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5zZG8gICAgICAgICAgICAgICAgKGJpc3RfcGF0X3NkbyAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuY2xrICAgICAgICAgICAgICAgICh3Yl9jbGtfYjEgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLnJzdF9uICAgICAgICAgICAgICAoc3JzdF9uICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5ydW4gICAgICAgICAgICAgICAgKHJ1bl9wYXQgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuc2Nhbl9zaGlmdCAgICAgICAgIChiaXN0X3NoaWZ0ICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLnNkaSAgICAgICAgICAgICAgICAoYmlzdF9vcF9zZG8gICAgICAgICkKKworICAgKTsKKworCittYmlzdF9kYXRhX2NtcCAgCisgICAgICAjKAorCSAuQklTVF9BRERSX1dEICAgICAgICAgICAoQklTVF9BRERSX1dEICAgICAgICAgICApLAorCSAuQklTVF9EQVRBX1dEICAgICAgICAgICAoQklTVF9EQVRBX1dEICAgICAgICAgICApLAorCSAuQklTVF9BRERSX1NUQVJUICAgICAgICAoQklTVF9BRERSX1NUQVJUICAgICAgICApLAorCSAuQklTVF9BRERSX0VORCAgICAgICAgICAoQklTVF9BRERSX0VORCAgICAgICAgICApLAorCSAuQklTVF9SRVBBSVJfQUREUl9TVEFSVCAoQklTVF9SRVBBSVJfQUREUl9TVEFSVCApLAorCSAuQklTVF9SQURfV0RfSSAgICAgICAgICAoQklTVF9SQURfV0RfSSAgICAgICAgICApLAorCSAuQklTVF9SQURfV0RfTyAgICAgICAgICAoQklTVF9SQURfV0RfTyAgICAgICAgICApCisgICAgICAgICAgKQorCisKKyAgICAgdV9jbXAgKAorICAgICAgICAgICAgICAgICAgICAuZXJyb3IgICAgICAgICAgICAgIChiaXN0X2Vycm9yICAgICAgICAgKSwKKwkJICAgIC5lcnJvcl9jb3JyZWN0ICAgICAgKGJpc3RfZXJyb3JfY29ycmVjdCApLAorCQkgICAgLmNvcnJlY3QgICAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICksIC8vIHNhbWUgc2lnbmFsIGF2YWlsYWJsZSBhdCBiaXN0IG11eAorCQkgICAgLmVycm9yX2FkZHIgICAgICAgICAoYmlzdF9lcnJvcl9hZGRyICAgICksCisJCSAgICAuZXJyb3JfY250ICAgICAgICAgIChiaXN0X2Vycm9yX2NudCAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmNsayAgICAgICAgICAgICAgICAod2JfY2xrX2IxICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5yc3RfbiAgICAgICAgICAgICAgKHNyc3RfbiAgICAgICAgICAgICApLAorCQkgICAgLmFkZHJfaW5jX3BoYXNlICAgICAocnVuX2FkZHIgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5jb21wYXJlICAgICAgICAgICAgKGNvbXBhcmUgICAgICAgICAgICApLCAKKwkgICAgICAgICAgICAucmVhZF9pbnZlcnQgICAgICAgIChvcF9pbnZlcnQgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmNvbXBfZGF0YSAgICAgICAgICAocGF0X2RhdGEgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5yeGRfZGF0YSAgICAgICAgICAgKGZ1bmNfZG91dF9hICAgICAgICApLAorCQkgICAgLmFkZHIgICAgICAgICAgICAgICAoYmlzdF9hZGRyICAgICAgICAgICkKKwkgICAgIAorCSk7CisKKworbWJpc3RfbWVtX3dyYXBwZXIgIygKKwkgLkJJU1RfQUREUl9XRCAgICAgICAgICAgKEJJU1RfQUREUl9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfREFUQV9XRCAgICAgICAgICAgKEJJU1RfREFUQV9XRCAgICAgICAgICAgKQorICAgICAgICAgICkgdV9tZW1fd3JhcHBlcigKKwkgICAgICAgICAgICAucnN0X24gICAgICAgICAgIChzcnN0X24gICAgICAgICAgICksCisgICAgICAgICAgICAgICAvLyBXQiBJL0YKKyAgICAgICAgICAgICAgICAgICAgLndiX2Nsa19pICAgICAgICAod2JfY2xrX2IyICAgICAgICApLCAgLy8gU3lzdGVtIGNsb2NrCisgICAgICAgICAgICAgICAgICAgIC53Yl9jeWNfaSAgICAgICAgKHdiX2N5Y19pICAgICAgICAgKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgICAgICAgICAgICAgIC53Yl9zdGJfaSAgICAgICAgKHdiX3N0Yl9pICAgICAgICAgKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgICAgICAgICAgICAgIC53Yl9hZHJfaSAgICAgICAgKHdiX2Fkcl9pICAgICAgICAgKSwgIC8vIGFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICAgLndiX3dlX2kgICAgICAgICAod2Jfd2VfaSAgICAgICAgICApLCAgLy8gd3JpdGUKKyAgICAgICAgICAgICAgICAgICAgLndiX2RhdF9pICAgICAgICAod2JfZGF0X2kgICAgICAgICApLCAgLy8gZGF0YSBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgLndiX3NlbF9pICAgICAgICAod2Jfc2VsX2kgICAgICAgICApLCAgLy8gYnl0ZSBlbmFibGUKKyAgICAgICAgICAgICAgICAgICAgLndiX2RhdF9vICAgICAgICAod2JfZGF0X28gICAgICAgICApLCAgLy8gZGF0YSBpbnB1dAorICAgICAgICAgICAgICAgICAgICAud2JfYWNrX28gICAgICAgICh3Yl9hY2tfbyAgICAgICAgICksICAvLyBhY2tub3dsZWdlbWVudAorICAgICAgICAgICAgICAgICAgICAud2JfZXJyX28gICAgICAgICh3Yl9lcnJfbyAgICAgICAgICksICAvLyBlcnJvcgorICAgICAgICAgICAgICAgIC8vIE1FTSBBIFBPUlQgCisgICAgICAgICAgICAgICAgICAgIC5mdW5jX2Nsa19hICAgICAgKGZ1bmNfY2xrX2EgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmZ1bmNfY2VuX2EgICAgICAoZnVuY19jZW5fYSAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuZnVuY19hZGRyX2EgICAgIChmdW5jX2FkZHJfYSAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5mdW5jX2RvdXRfYSAgICAgKGZ1bmNfZG91dF9hICAgICAgKSwKKyAgCisgICAgICAgICAgICAgICAgLy8gRnVuY3Rpb25hbCBCIFBvcnQKKyAgICAgICAgICAgICAgICAgICAgLmZ1bmNfY2xrX2IgICAgICAoZnVuY19jbGtfYiAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuZnVuY19jZW5fYiAgICAgIChmdW5jX2Nlbl9iICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5mdW5jX3dlYl9iICAgICAgKGZ1bmNfd2ViX2IgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmZ1bmNfbWFza19iICAgICAoZnVuY19tYXNrX2IgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuZnVuY19hZGRyX2IgICAgIChmdW5jX2FkZHJfYiAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5mdW5jX2Rpbl9iICAgICAgKGZ1bmNfZGluX2IgICAgICAgKSAgICAgCisgICAgICk7CisKKworbWJpc3RfbXV4ICAKKyAgICAgICMoCisJIC5CSVNUX0FERFJfV0QgICAgICAgICAgIChCSVNUX0FERFJfV0QgICAgICAgICAgICksCisJIC5CSVNUX0RBVEFfV0QgICAgICAgICAgIChCSVNUX0RBVEFfV0QgICAgICAgICAgICksCisJIC5CSVNUX0FERFJfU1RBUlQgICAgICAgIChCSVNUX0FERFJfU1RBUlQgICAgICAgICksCisJIC5CSVNUX0FERFJfRU5EICAgICAgICAgIChCSVNUX0FERFJfRU5EICAgICAgICAgICksCisJIC5CSVNUX1JFUEFJUl9BRERSX1NUQVJUIChCSVNUX1JFUEFJUl9BRERSX1NUQVJUICksCisJIC5CSVNUX1JBRF9XRF9JICAgICAgICAgIChCSVNUX1JBRF9XRF9JICAgICAgICAgICksCisJIC5CSVNUX1JBRF9XRF9PICAgICAgICAgIChCSVNUX1JBRF9XRF9PICAgICAgICAgICkKKyAgICAgICAgICApCisgICAgICAgdV9tZW1fc2VsICgKKworCSAgICAgICAgICAgIC5zY2FuX21vZGUgICAgICAgICAgICAoc2Nhbl9tb2RlICAgICApLAorCisgICAgICAgICAgICAgICAgICAgIC5yc3RfbiAgICAgICAgICAgICAgICAoc3JzdF9uICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAvLyBNQklTVCBDVFJMIFNJR05BTAorICAgICAgICAgICAgICAgICAgICAuYmlzdF9lbiAgICAgICAgICAgICAgKGJpc3RfZW4gICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmJpc3RfYWRkciAgICAgICAgICAgIChiaXN0X2FkZHIgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5iaXN0X3dkYXRhICAgICAgICAgICAoYmlzdF93ZGF0YSAgICApLAorICAgICAgICAgICAgICAgICAgICAuYmlzdF9jbGsgICAgICAgICAgICAgKHdiX2Nsa19iMiAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmJpc3Rfd3IgICAgICAgICAgICAgIChiaXN0X3dyICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5iaXN0X3JkICAgICAgICAgICAgICAoYmlzdF9yZCAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuYmlzdF9lcnJvciAgICAgICAgICAgKGJpc3RfZXJyb3JfY29ycmVjdCksCisgICAgICAgICAgICAgICAgICAgIC5iaXN0X2Vycm9yX2FkZHIgICAgICAoYmlzdF9lcnJvcl9hZGRyKSwKKyAgICAgICAgICAgICAgICAgICAgLmJpc3RfY29ycmVjdCAgICAgICAgIChiaXN0X2NvcnJlY3QgICksCisJCSAgICAuYmlzdF9zZGkgICAgICAgICAgICAgKGJpc3RfcGF0X3NkbyksCisJCSAgICAuYmlzdF9zaGlmdCAgICAgICAgICAgKGJpc3Rfc2hpZnQpLAorCQkgICAgLmJpc3Rfc2RvICAgICAgICAgICAgIChiaXN0X3NkbyksCisKKyAgICAgICAgICAgICAgICAgICAgLy8gRlVOQ1RJT05BTCBDVFJMIFNJR05BTAorICAgICAgICAgICAgICAgICAgICAuZnVuY19jbGtfYSAgICAgICAgICAoZnVuY19jbGtfYSAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmZ1bmNfY2VuX2EgICAgICAgICAgKGZ1bmNfY2VuX2EgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5mdW5jX2FkZHJfYSAgICAgICAgIChmdW5jX2FkZHJfYSAgICApLAorICAgICAgICAgICAgICAgICAgICAvLyBDb21tb24gZm9yIGZ1bmMgYW5kIE1iaXN0IGkvZgorICAgICAgICAgICAgICAgICAgICAuZnVuY19kb3V0X2EgICAgICAgICAoZnVuY19kb3V0X2EgICAgKSwKKworICAgICAgICAgICAgICAgICAgICAuZnVuY19jbGtfYiAgICAgICAgICAoZnVuY19jbGtfYiAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmZ1bmNfY2VuX2IgICAgICAgICAgKGZ1bmNfY2VuX2IgICAgICksCisJICAgICAgICAgICAgLmZ1bmNfd2ViX2IgICAgICAgICAgKGZ1bmNfd2ViX2IgICAgICksCisJICAgICAgICAgICAgLmZ1bmNfbWFza19iICAgICAgICAgKGZ1bmNfbWFza19iICAgICksCisgICAgICAgICAgICAgICAgICAgIC5mdW5jX2FkZHJfYiAgICAgICAgIChmdW5jX2FkZHJfYiAgICApLAorICAgICAgICAgICAgICAgICAgICAuZnVuY19kaW5fYiAgICAgICAgICAoZnVuY19kaW5fYiAgICAgKSwKKworCisgICAgICAgICAgICAgICAgICAgIC8vIHRvd2FyZHMgbWVtb3J5CisgICAgICAgICAgICAgICAgICAgIC8vIE1lbW9yeSBPdXQgUG9ydAorICAgICAgICAgICAgICAgICAgICAubWVtX2Nsa19hICAgICAgICAgICAobWVtX2Nsa19hICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLm1lbV9jZW5fYSAgICAgICAgICAgKG1lbV9jZW5fYSAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5tZW1fYWRkcl9hICAgICAgICAgIChtZW1fYWRkcl9hICAgICApLAorICAgICAgICAgICAgICAgICAgICAubWVtX2RvdXRfYSAgICAgICAgICAobWVtX2RvdXRfYSAgICAgKSwKKworICAgICAgICAgICAgICAgICAgICAvLyBNZW1vcnkgSW5wdXQgUG9ydAorICAgICAgICAgICAgICAgICAgICAubWVtX2Nsa19iICAgICAgICAgICAobWVtX2Nsa19iICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLm1lbV9jZW5fYiAgICAgICAgICAgKG1lbV9jZW5fYiAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5tZW1fd2ViX2IgICAgICAgICAgIChtZW1fd2ViX2IgICAgICApLAorICAgICAgICAgICAgICAgICAgICAubWVtX21hc2tfYiAgICAgICAgICAobWVtX21hc2tfYiAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLm1lbV9hZGRyX2IgICAgICAgICAgKG1lbV9hZGRyX2IgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5tZW1fZGluX2IgICAgICAgICAgIChtZW1fZGluX2IgICAgICApCisgICAgKTsKKworCitlbmRtb2R1bGUKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvbWJpc3Rfd3JhcHBlci9zcmMvbWJpc3Rfd2Iuc3YgYi92ZXJpbG9nL3J0bC9tYmlzdF93cmFwcGVyL3NyYy9tYmlzdF93Yi5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjk4OWRkCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbWJpc3Rfd3JhcHBlci9zcmMvbWJpc3Rfd2Iuc3YKQEAgLTAsMCArMSwxNzkgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gICAKKy8vICAgTUJJU1Qgd2lzaGJvbmUgQnVyc3QgYWNjZXNzIHRvIFNSQU0gV3JpdGUgYW5kIFJlYWQgYWNjZXNzCisvLyAgIE5vdGU6IEJVU1JUIGNyb3NzaW5nIHRoZSBTUkFNIGJvdW5kYXJ5IGlzIG5vdCBzdXBwb3J0ZWQgZHVlIHRvIHNyYW0KKy8vICAgMiBjeWNsZSBwaXBlIGxpbmUgZGVsYXkKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbW9kdWxlIG1iaXN0X3diCisgICAgICMoICAKKyAgICAgICAgIHBhcmFtZXRlciBCSVNUX05PX1NSQU0gICAgICAgICAgID0gNCwKKwkgcGFyYW1ldGVyIEJJU1RfQUREUl9XRCAgICAgICAgICAgPSA5LAorCSBwYXJhbWV0ZXIgQklTVF9EQVRBX1dEICAgICAgICAgICA9IDMyKSAoCisKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIGlub3V0IHZjY2QxLAkvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgIGlub3V0IHZzc2QxLAkvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisKKworCWlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3RfbiwKKworCisgICAgICAgIC8vIFdCIEkvRgorICAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICB3Yl9jbGtfaSwgIC8vIFN5c3RlbSBjbG9jaworICAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICB3Yl9zdGJfaSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgIGlucHV0ICAgbG9naWMgW0JJU1RfQUREUl9XRC0xOjBdICAgICAgIHdiX2Fkcl9pLCAgLy8gYWRkcmVzcworICAgICAgICBpbnB1dCAgIGxvZ2ljIFsoQklTVF9OT19TUkFNKzEpLzItMTowXSB3Yl9jc19pLCAgIC8vIGFkZHJlc3MKKyAgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgd2Jfd2VfaSAsICAvLyB3cml0ZQorICAgICAgICBpbnB1dCAgIGxvZ2ljIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgICB3Yl9kYXRfaSwgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgIGlucHV0ICAgbG9naWMgW0JJU1RfREFUQV9XRC84LTE6MF0gICAgIHdiX3NlbF9pLCAgLy8gYnl0ZSBlbmFibGUKKyAgICAgICAgaW5wdXQgICBsb2dpYyBbOTowXSAgICAgICAgICAgICAgICAgICAgd2JfYmxfaSwgICAvLyBCdXJzdCBMZW5ndGgKKyAgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgd2JfYnJ5X2ksICAvLyBCdXJzdCBSZWFkeQorICAgICAgICBvdXRwdXQgIGxvZ2ljIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgICB3Yl9kYXRfbywgIC8vIGRhdGEgaW5wdXQKKyAgICAgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgd2JfYWNrX28sICAvLyBhY2tub3dsZWdlbWVudAorICAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICB3Yl9sYWNrX28sIC8vIGFja25vd2xlZ2VtZW50CisgICAgICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgIHdiX2Vycl9vLCAgLy8gZXJyb3IKKworCW91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbV9yZXEsCisJb3V0cHV0ICBsb2dpYyBbKEJJU1RfTk9fU1JBTSsxKS8yLTE6MF0gbWVtX2NzLAorCW91dHB1dCAgbG9naWMgW0JJU1RfQUREUl9XRC0xOjBdICAgICAgIG1lbV9hZGRyLAorCW91dHB1dCAgbG9naWMgWzMxOjBdICAgICAgICAgICAgICAgICAgIG1lbV93ZGF0YSwKKwlvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1fd2UsCisJb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgbWVtX3dtYXNrLAorCWlucHV0ICAgbG9naWMgWzMxOjBdICAgICAgICAgICAgICAgICAgIG1lbV9yZGF0YQorCisKKworCispOworCitwYXJhbWV0ZXIgSURMRSAgICAgICAgICA9IDInYjAwOworcGFyYW1ldGVyIFdSSVRFX0FDVElPTiAgPSAyJ2IwMTsKK3BhcmFtZXRlciBSRUFEX0FDVElPTjEgID0gMidiMTA7CitwYXJhbWV0ZXIgUkVBRF9BQ1RJT04yICA9IDInYjExOworCisKK2xvZ2ljIFs5OjBdICAgICAgICAgICAgICAgIG1lbV9ibF9jbnQgICAgIDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgIHdiX2Fja19sICAgICAgIDsKK2xvZ2ljIFtCSVNUX0FERFJfV0QtMTowXSAgIG1lbV9uZXh0X2FkZHI7Citsb2dpYyBbMTowXSAgICAgICAgICAgICAgICBzdGF0ZTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgIG1lbV9odmFsOyAgIC8vIE1lbSBIb2xkIERhdGEgdmFsaWQKK2xvZ2ljIFszMTowXSAgICAgICAgICAgICAgIG1lbV9oZGF0YTsgIC8vIE1lbSBIb2xkIERhdGEKKworCithc3NpZ24gIG1lbV93ZGF0YSAgICA9IHdiX2RhdF9pOworCithbHdheXMgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIHdiX2Nsa19pKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgbWVtX2JsX2NudCAgICAgICA8PSAnaDA7CisgICAgICAgbWVtX2FkZHIgICAgICAgICA8PSAnaDA7CisgICAgICAgbWVtX25leHRfYWRkciAgICA8PSAnaDA7CisgICAgICAgd2JfYWNrX2wgICAgICAgICA8PSAnYjA7CisgICAgICAgd2JfZGF0X28gICAgICAgICA8PSAnaDA7CisgICAgICAgbWVtX3JlcSAgICAgICAgICA8PSAnYjA7CisgICAgICAgbWVtX2NzICAgICAgICAgICA8PSAnYjA7CisgICAgICAgbWVtX3dtYXNrICAgICAgICA8PSAnaDA7CisgICAgICAgbWVtX3dlICAgICAgICAgICA8PSAnaDA7CisgICAgICAgbWVtX2h2YWwgICAgICAgICA8PSAnYjA7CisgICAgICAgbWVtX2hkYXRhICAgICAgICA8PSAnaDA7CisgICAgICAgc3RhdGUgICAgICAgICAgICA8PSBJRExFOworICAgIGVuZCBlbHNlIGJlZ2luCisJY2FzZShzdGF0ZSkKKwkgSURMRTogYmVnaW4KKwkgICAgICAgbWVtX2JsX2NudCAgPD0gICdoMTsKKwkgICAgICAgd2JfYWNrX28gICAgPD0gICdiMDsKKwkgICAgICAgd2JfbGFja19vICAgPD0gICdiMDsKKwkgICAgICAgaWYod2Jfc3RiX2kgJiYgd2JfYnJ5X2kgJiYgfndiX3dlX2kgJiYgIXdiX2xhY2tfbykgYmVnaW4KKwkgICAgICAgICAgbWVtX2NzICAgICAgPD0gIHdiX2NzX2k7CisJICAgICAgICAgIG1lbV9hZGRyICAgIDw9ICB3Yl9hZHJfaTsKKwkgICAgICAgICAgbWVtX3JlcSAgICAgPD0gICdiMTsKKwkJICBtZW1fd2UgICAgICA8PSAgJ2IwOworCSAgICAgICAgICBzdGF0ZSAgICAgICA8PSAgUkVBRF9BQ1RJT04xOworCSAgICAgICBlbmQgZWxzZSBpZih3Yl9zdGJfaSAmJiB3Yl9icnlfaSAmJiB3Yl93ZV9pICYmICF3Yl9sYWNrX28pIGJlZ2luCisJICAgICAgICAgIG1lbV9jcyAgICAgIDw9ICB3Yl9jc19pOworCSAgICAgICAgICBtZW1fbmV4dF9hZGRyPD0gIHdiX2Fkcl9pOworCQkgIG1lbV93ZSAgICAgIDw9ICAnYjE7CisgICAgICAgICAgICAgICAgICBtZW1fd21hc2sgICA8PSAgd2Jfc2VsX2k7CisJICAgICAgICAgIHN0YXRlICAgICAgIDw9ICBXUklURV9BQ1RJT047CisJICAgICAgIGVuZCBlbHNlIGJlZ2luCisJICAgICAgICAgIG1lbV9yZXEgICAgICA8PSAgMSdiMDsKKyAgICAgICAgICAgICAgIGVuZAorCSAgICBlbmQKKworICAgICAgICAgV1JJVEVfQUNUSU9OOiBiZWdpbgorCSAgICBpZiAod2Jfc3RiX2kgJiYgd2JfYnJ5X2kgKSBiZWdpbgorCSAgICAgICB3Yl9hY2tfbyAgICAgPD0gICdiMTsKKwkgICAgICAgbWVtX3JlcSAgICAgIDw9ICAxJ2IxOworCSAgICAgICBtZW1fYWRkciAgICAgPD0gIG1lbV9uZXh0X2FkZHI7CisJICAgICAgIGlmKCh3Yl9zdGJfaSAmJiB3Yl9icnlfaSApICYmICh3Yl9ibF9pID09IG1lbV9ibF9jbnQpKSBiZWdpbgorCSAgICAgICAgICAgd2JfbGFja19vICAgPD0gICdiMTsKKwkgICAgICAgICAgIHN0YXRlICAgICAgIDw9IElETEU7CisJICAgICAgIGVuZCBlbHNlIGJlZ2luCisJICAgICAgICAgIG1lbV9ibF9jbnQgICA8PSBtZW1fYmxfY250KzE7CisJICAgICAgICAgIG1lbV9uZXh0X2FkZHI8PSAgbWVtX25leHRfYWRkcisxOworCSAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luIAorCSAgICAgICB3Yl9hY2tfbyAgICAgPD0gICdiMDsKKwkgICAgICAgbWVtX3JlcSAgICAgIDw9ICAxJ2IwOworICAgICAgICAgICAgZW5kCisgICAgICAgICBlbmQKKyAgICAgICBSRUFEX0FDVElPTjE6IGJlZ2luCisJICAgbWVtX2FkZHIgICA8PSAgbWVtX2FkZHIgKzE7CisgICAgICAgICAgIG1lbV9odmFsICAgPD0gMSdiMDsKKwkgICB3Yl9hY2tfbCAgIDw9ICAnYjE7CisJICAgbWVtX2JsX2NudCA8PSAgJ2gxOworCSAgIHN0YXRlICAgICAgPD0gIFJFQURfQUNUSU9OMjsKKyAgICAgICBlbmQKKworICAgICAgIC8vIFdhaXQgZm9yIEFjayBmcm9tIGFwcGxpY2F0aW9uIGxheWVyCisgICAgICAgUkVBRF9BQ1RJT04yOiBiZWdpbgorICAgICAgICAgICAvLyBJZiB0aGUgbm90IHRoZSBsYXN0IGFjaywgdXBkYXRlIG1lbW9yeSBwb2ludGVyCisgICAgICAgICAgIC8vIGFjY29yZGluZ2x5CisJICAgd2JfYWNrX2wgICAgPD0gd2JfYWNrX287CisJICAgaWYgKHdiX3N0Yl9pICYmIHdiX2JyeV9pICkgYmVnaW4KKwkgICAgICB3Yl9hY2tfbyAgIDw9IDEnYjE7CisJICAgICAgbWVtX2JsX2NudCA8PSBtZW1fYmxfY250KzE7CisJICAgICAgbWVtX2FkZHIgICA8PSAgbWVtX2FkZHIgKzE7CisJICAgICAgaWYod2JfYWNrX2wgfHwgd2JfYWNrX28gKSBiZWdpbiAvLyBJZiBiYWNrIHRvIGJhY2sgYWNrIAorICAgICAgICAgICAgICAgICB3Yl9kYXRfbyAgICAgPD0gbWVtX3JkYXRhOworICAgICAgICAgICAgICAgICBtZW1faHZhbCAgICAgPD0gMSdiMDsKKwkgICAgICBlbmQgZWxzZSBiZWdpbiAvLyBQaWNrIGZyb20gcHJldmlvdXMgaG9sZGluZyBkYXRhCisgICAgICAgICAgICAgICAgIG1lbV9odmFsICAgICA8PSAxJ2IxOworICAgICAgICAgICAgICAgICB3Yl9kYXRfbyAgICAgPD0gbWVtX2hkYXRhOworICAgICAgICAgICAgICAgICBtZW1faGRhdGEgICAgPD0gbWVtX3JkYXRhOworCSAgICAgIGVuZAorCSAgICAgIGlmKCh3Yl9zdGJfaSAmJiB3Yl9icnlfaSApICYmICh3Yl9ibF9pID09IG1lbV9ibF9jbnQpKSBiZWdpbgorCQkgIHdiX2xhY2tfbyAgIDw9IDEnYjE7CisJICAgICAgICAgIHN0YXRlICAgICAgIDw9IElETEU7CisJICAgICAgZW5kCisgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisJICAgICAgd2JfYWNrX28gICA8PSAxJ2IwOworCSAgICAgIGlmKCFtZW1faHZhbCkgYmVnaW4KKyAgICAgICAgICAgICAgICAgbWVtX2hkYXRhICA8PSBtZW1fcmRhdGE7CisgICAgICAgICAgICAgICAgIG1lbV9odmFsICAgPD0gMSdiMTsKKwkgICAgICBlbmQKKyAgICAgICAgICAgZW5kCisgICAgICAgZW5kCisgICAgICAgZW5kY2FzZQorICAgZW5kCitlbmQKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9tYmlzdF93cmFwcGVyL3NyYy9tYmlzdF93cmFwcGVyLnN2IGIvdmVyaWxvZy9ydGwvbWJpc3Rfd3JhcHBlci9zcmMvbWJpc3Rfd3JhcHBlci5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2M1Y2UzCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbWJpc3Rfd3JhcHBlci9zcmMvbWJpc3Rfd3JhcHBlci5zdgpAQCAtMCwwICsxLDM2OSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBNQklTVCBUT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgbWJpc3RfY3RybCBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS9tYmlzdF9jdHJsLmdpdCAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgVGhpcyBibG9jayBpbnRlZ3JhdGUgbWJpc3QgY29udHJvbGxlciB3aXRoIHJvdyAgICAgICAgICAvLy8vCisvLy8vICAgICAgcmVkZW5kZW5jeSBmZWF0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMCAtIDExdGggT2N0IDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEluaXRpYWwgaW50ZWdyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMSAtIDI2dGggT2N0IDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEZpeGVkIEVycm9yIEFkZHJlc3MgYXJlIHNlcmlhbCBzaGlmdGVkIHRocm91Z2ggICAgICAvLy8vCisvLy8vICAgICAgICAgIHNkaS9zZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMiAtIDE1IERlYyAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIGNvbW1vbiBNQklTVCBmb3IgNCBTUkFNICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMyAtIDI5dGggRGVjIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHlvc3lzIHN5bnRoZXNpcyBpc3N1ZSBmb3IgdHdvIGRpbWVuc2lvbiB2YXJpYWJsZSAgICAvLy8vCisvLy8vICAgICAgICAgIGNoYW5nZWQgdGhlIHZhcmlhYmxlIGRlZmluYXRpb24gZnJvbSBsb2dpYyB0byB3aXJlICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2BpbmNsdWRlICJtYmlzdF9kZWYuc3ZoIgorbW9kdWxlIG1iaXN0X3dyYXBwZXIKKyAgICAgIyggIAorICAgICAgICAgcGFyYW1ldGVyIEJJU1RfTk9fU1JBTSAgICAgICAgICAgPSA0LAorCSBwYXJhbWV0ZXIgQklTVF9BRERSX1dEICAgICAgICAgICA9IDksCisJIHBhcmFtZXRlciBCSVNUX0RBVEFfV0QgICAgICAgICAgID0gMzIsCisJIHBhcmFtZXRlciBCSVNUX0FERFJfU1RBUlQgICAgICAgID0gOSdoMDAwLAorCSBwYXJhbWV0ZXIgQklTVF9BRERSX0VORCAgICAgICAgICA9IDknaDFGQiwKKwkgcGFyYW1ldGVyIEJJU1RfUkVQQUlSX0FERFJfU1RBUlQgPSA5J2gxRkMsCisJIHBhcmFtZXRlciBCSVNUX1JBRF9XRF9JICAgICAgICAgID0gQklTVF9BRERSX1dELAorCSBwYXJhbWV0ZXIgQklTVF9SQURfV0RfTyAgICAgICAgICA9IEJJU1RfQUREUl9XRCkgKAorCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICBpbm91dCB2Y2NkMSwJLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICBpbm91dCB2c3NkMSwJLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorCisgICAgLy8gQ2xvY2sgU2tldyBBZGp1c3QKKyAgICAgICBpbnB1dCAgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfaW50LCAKKyAgICAgICBvdXRwdXQgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfbWJpc3QsCisgICAgICAgaW5wdXQgIHdpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICBjZmdfY3NrYV9tYmlzdCwgLy8gY2xvY2sgc2tldyBhZGp1c3QgZm9yIHdlYiBob3N0CisKKwlpbnB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3RfbiwKKworCS8vIE1CSVNUIEkvRgorCWlucHV0IHdpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X2VuLAorCWlucHV0IHdpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9ydW4sCisJaW5wdXQgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X3NoaWZ0LAorCWlucHV0IHdpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9sb2FkLAorCWlucHV0IHdpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9zZGksCisKKwlvdXRwdXQgd2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGJpc3RfZXJyb3JfY250MCwKKwlvdXRwdXQgd2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGJpc3RfZXJyb3JfY250MSwKKwlvdXRwdXQgd2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGJpc3RfZXJyb3JfY250MiwKKwlvdXRwdXQgd2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGJpc3RfZXJyb3JfY250MywKKwlvdXRwdXQgd2lyZSBbQklTVF9OT19TUkFNLTE6MF0gICAgICAgIGJpc3RfY29ycmVjdCAgICwKKwlvdXRwdXQgd2lyZSBbQklTVF9OT19TUkFNLTE6MF0gICAgICAgIGJpc3RfZXJyb3IgICAgICwKKwlvdXRwdXQgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpc3RfZG9uZSwKKwlvdXRwdXQgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpc3Rfc2RvLAorCisKKyAgICAgICAgLy8gV0IgSS9GCisgICAgICAgIGlucHV0ICAgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgd2JfY2xrX2ksICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAgICAgaW5wdXQgICB3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICB3Yl9jbGsyX2ksIC8vIFN5c3RlbSBjbG9jazIgaXMgbm8gY3RzCisgICAgICAgIGlucHV0ICAgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgd2Jfc3RiX2ksICAvLyBzdHJvYmUvcmVxdWVzdAorCWlucHV0ICAgd2lyZSBbKEJJU1RfTk9fU1JBTSsxKS8yLTE6MF0gd2JfY3NfaSwKKyAgICAgICAgaW5wdXQgICB3aXJlIFtCSVNUX0FERFJfV0QtMTowXSAgICAgICB3Yl9hZHJfaSwgIC8vIGFkZHJlc3MKKyAgICAgICAgaW5wdXQgICB3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICB3Yl93ZV9pICwgIC8vIHdyaXRlCisgICAgICAgIGlucHV0ICAgd2lyZSBbQklTVF9EQVRBX1dELTE6MF0gICAgICAgd2JfZGF0X2ksICAvLyBkYXRhIG91dHB1dAorICAgICAgICBpbnB1dCAgIHdpcmUgW0JJU1RfREFUQV9XRC84LTE6MF0gICAgIHdiX3NlbF9pLCAgLy8gYnl0ZSBlbmFibGUKKyAgICAgICAgaW5wdXQgICB3aXJlIFs5OjBdICAgICAgICAgICAgICAgICAgICB3Yl9ibF9pLCAgIC8vIGJ1cnN0IAorICAgICAgICBpbnB1dCAgIHdpcmUgICAgICAgICAgICAgICAgICAgICAgICAgIHdiX2JyeV9pLCAgLy8gYnVyc3QgcmVhZHkKKyAgICAgICAgb3V0cHV0ICB3aXJlIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgICB3Yl9kYXRfbywgIC8vIGRhdGEgaW5wdXQKKyAgICAgICAgb3V0cHV0ICB3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICB3Yl9hY2tfbywgIC8vIGFja25vd2xlZ2VtZW50CisgICAgICAgIG91dHB1dCAgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgd2JfbGFja19vLCAvLyBhY2tub3dsZWdlbWVudAorICAgICAgICBvdXRwdXQgIHdpcmUgICAgICAgICAgICAgICAgICAgICAgICAgIHdiX2Vycl9vLCAgLy8gZXJyb3IKKworCisgICAgIC8vIHRvd2FyZHMgbWVtb3J5CisgICAgIC8vIFBPUlQtQQorICAgICAgICBvdXRwdXQgd2lyZSAgIFtCSVNUX05PX1NSQU0tMTowXSAgICAgIG1lbV9jbGtfYSwKKyAgICAgICAgb3V0cHV0IHdpcmUgICBbQklTVF9BRERSX1dELTE6MF0gICAgICBtZW1fYWRkcl9hMCwKKyAgICAgICAgb3V0cHV0IHdpcmUgICBbQklTVF9BRERSX1dELTE6MF0gICAgICBtZW1fYWRkcl9hMSwKKyAgICAgICAgb3V0cHV0IHdpcmUgICBbQklTVF9BRERSX1dELTE6MF0gICAgICBtZW1fYWRkcl9hMiwKKyAgICAgICAgb3V0cHV0IHdpcmUgICBbQklTVF9BRERSX1dELTE6MF0gICAgICBtZW1fYWRkcl9hMywKKyAgICAgICAgb3V0cHV0IHdpcmUgICBbQklTVF9OT19TUkFNLTE6MF0gICAgICBtZW1fY2VuX2EsCisgICAgICAgIG91dHB1dCB3aXJlICAgW0JJU1RfTk9fU1JBTS0xOjBdICAgICAgbWVtX3dlYl9hLAorICAgICAgICBvdXRwdXQgd2lyZSAgIFtCSVNUX0RBVEFfV0QvOC0xOjBdICAgIG1lbV9tYXNrX2EwLAorICAgICAgICBvdXRwdXQgd2lyZSAgIFtCSVNUX0RBVEFfV0QvOC0xOjBdICAgIG1lbV9tYXNrX2ExLAorICAgICAgICBvdXRwdXQgd2lyZSAgIFtCSVNUX0RBVEFfV0QvOC0xOjBdICAgIG1lbV9tYXNrX2EyLAorICAgICAgICBvdXRwdXQgd2lyZSAgIFtCSVNUX0RBVEFfV0QvOC0xOjBdICAgIG1lbV9tYXNrX2EzLAorICAgICAgICBvdXRwdXQgd2lyZSAgIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgIG1lbV9kaW5fYTAsCisgICAgICAgIG91dHB1dCB3aXJlICAgW0JJU1RfREFUQV9XRC0xOjBdICAgICAgbWVtX2Rpbl9hMSwKKyAgICAgICAgb3V0cHV0IHdpcmUgICBbQklTVF9EQVRBX1dELTE6MF0gICAgICBtZW1fZGluX2EyLAorICAgICAgICBvdXRwdXQgd2lyZSAgIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgIG1lbV9kaW5fYTMsCisKKyAgICAgICAgaW5wdXQgIHdpcmUgICBbQklTVF9EQVRBX1dELTE6MF0gICAgICBtZW1fZG91dF9hMCwKKyAgICAgICAgaW5wdXQgIHdpcmUgICBbQklTVF9EQVRBX1dELTE6MF0gICAgICBtZW1fZG91dF9hMSwKKyAgICAgICAgaW5wdXQgIHdpcmUgICBbQklTVF9EQVRBX1dELTE6MF0gICAgICBtZW1fZG91dF9hMiwKKyAgICAgICAgaW5wdXQgIHdpcmUgICBbQklTVF9EQVRBX1dELTE6MF0gICAgICBtZW1fZG91dF9hMywKKworCisgICAgIC8vIFBPUlQtQgorICAgICAgICBvdXRwdXQgd2lyZSBbQklTVF9OT19TUkFNLTE6MF0gICAgICAgIG1lbV9jbGtfYiwKKyAgICAgICAgb3V0cHV0IHdpcmUgW0JJU1RfTk9fU1JBTS0xOjBdICAgICAgICBtZW1fY2VuX2IsCisgICAgICAgIG91dHB1dCB3aXJlICAgW0JJU1RfQUREUl9XRC0xOjBdICAgICAgbWVtX2FkZHJfYjAsCisgICAgICAgIG91dHB1dCB3aXJlICAgW0JJU1RfQUREUl9XRC0xOjBdICAgICAgbWVtX2FkZHJfYjEsCisgICAgICAgIG91dHB1dCB3aXJlICAgW0JJU1RfQUREUl9XRC0xOjBdICAgICAgbWVtX2FkZHJfYjIsCisgICAgICAgIG91dHB1dCB3aXJlICAgW0JJU1RfQUREUl9XRC0xOjBdICAgICAgbWVtX2FkZHJfYjMKKworCisKKyk7CisKK3BhcmFtZXRlciAgTk9fU1JBTV9XRCA9IChCSVNUX05PX1NSQU0rMSkvMjsKK3BhcmFtZXRlciAgICAgQklTVDFfQUREUl9XRCA9IDExOyAvLyA1MTJ4MzIgU1JBTQorCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtX3JlcTsgIC8vIHN0cm9iZS9yZXF1ZXN0Citsb2dpYyBbKEJJU1RfTk9fU1JBTSsxKS8yLTE6MF0gbWVtX2NzOworbG9naWMgW0JJU1RfQUREUl9XRC0xOjBdICAgICAgIG1lbV9hZGRyOyAgLy8gYWRkcmVzcworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbV93ZSA7ICAvLyB3cml0ZQorbG9naWMgW0JJU1RfREFUQV9XRC0xOjBdICAgICAgIG1lbV93ZGF0YTsgIC8vIGRhdGEgb3V0cHV0Citsb2dpYyBbQklTVF9EQVRBX1dELzgtMTowXSAgICAgbWVtX3dtYXNrOyAgLy8gYnl0ZSBlbmFibGUKK2xvZ2ljIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgICBtZW1fcmRhdGE7ICAvLyBkYXRhIGlucHV0CisKKworbWJpc3Rfd2IgICMoCisJLkJJU1RfTk9fU1JBTSAgICAgICAgICAgKDQgICAgICAgICAgICAgICAgICAgICAgKSwKKwkuQklTVF9BRERSX1dEICAgICAgICAgICAoQklTVDFfQUREUl9XRC0yICAgICAgICApLAorCS5CSVNUX0RBVEFfV0QgICAgICAgICAgIChCSVNUX0RBVEFfV0QgICAgICAgICAgICkKKyAgICAgKSAKKwkgICAgIHVfd2IgKAorCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAudmNjZDEgICAgICAgICAgICAgICAgICAodmNjZDEgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgLnZzc2QxICAgICAgICAgICAgICAgICAgKHZzc2QxICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisKKwkucnN0X24gICAgICAgICAgICAgICAgKHJzdF9uICAgICAgICAgICAgICAgICksCisJLy8gV0IgSS9GCisgICAgICAgIC53Yl9jbGtfaSAgICAgICAgICAgICAod2JfY2xrX2kgICAgICAgICAgICAgKSwgIAorICAgICAgICAud2Jfc3RiX2kgICAgICAgICAgICAgKHdiX3N0Yl9pICAgICAgICAgICAgICksICAKKyAgICAgICAgLndiX2NzX2kgICAgICAgICAgICAgICh3Yl9jc19pICAgICAgICAgICAgICApLAorICAgICAgICAud2JfYWRyX2kgICAgICAgICAgICAgKHdiX2Fkcl9pICAgICAgICAgICAgICksCisgICAgICAgIC53Yl93ZV9pICAgICAgICAgICAgICAod2Jfd2VfaSAgICAgICAgICAgICAgKSwgIAorICAgICAgICAud2JfZGF0X2kgICAgICAgICAgICAgKHdiX2RhdF9pICAgICAgICAgICAgICksICAKKyAgICAgICAgLndiX3NlbF9pICAgICAgICAgICAgICh3Yl9zZWxfaSAgICAgICAgICAgICApLCAgCisgICAgICAgIC53Yl9ibF9pICAgICAgICAgICAgICAod2JfYmxfaSAgICAgICAgICAgICAgKSwgIAorICAgICAgICAud2JfYnJ5X2kgICAgICAgICAgICAgKHdiX2JyeV9pICAgICAgICAgICAgICksICAKKyAgICAgICAgLndiX2RhdF9vICAgICAgICAgICAgICh3Yl9kYXRfbyAgICAgICAgICAgICApLCAgCisgICAgICAgIC53Yl9hY2tfbyAgICAgICAgICAgICAod2JfYWNrX28gICAgICAgICAgICAgKSwgIAorICAgICAgICAud2JfbGFja19vICAgICAgICAgICAgKHdiX2xhY2tfbyAgICAgICAgICAgICksICAKKyAgICAgICAgLndiX2Vycl9vICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgICApLCAKKworCS5tZW1fcmVxICAgICAgICAgICAgICAobWVtX3JlcSAgICAgICAgICAgICAgKSwKKwkubWVtX2NzICAgICAgICAgICAgICAgKG1lbV9jcyAgICAgICAgICAgICAgICksCisJLm1lbV9hZGRyICAgICAgICAgICAgIChtZW1fYWRkciAgICAgICAgICAgICApLAorCS5tZW1fd2UgICAgICAgICAgICAgICAobWVtX3dlICAgICAgICAgICAgICAgKSwKKwkubWVtX3dkYXRhICAgICAgICAgICAgKG1lbV93ZGF0YSAgICAgICAgICAgICksCisJLm1lbV93bWFzayAgICAgICAgICAgIChtZW1fd21hc2sgICAgICAgICAgICApLAorCS5tZW1fcmRhdGEgICAgICAgICAgICAobWVtX3JkYXRhICAgICAgICAgICAgKQorCisJCisKKworKTsKKworCittYmlzdF90b3AgICMoCisJYGlmbmRlZiBTWU5USEVTSVMKKwkuQklTVF9OT19TUkFNICAgICAgICAgICAoNCAgICAgICAgICAgICAgICAgICAgICApLAorCS5CSVNUX0FERFJfV0QgICAgICAgICAgIChCSVNUMV9BRERSX1dELTIgICAgICAgICksCisJLkJJU1RfREFUQV9XRCAgICAgICAgICAgKEJJU1RfREFUQV9XRCAgICAgICAgICAgKSwKKwkuQklTVF9BRERSX1NUQVJUICAgICAgICAoOSdoMDAwICAgICAgICAgICAgICAgICApLAorCS5CSVNUX0FERFJfRU5EICAgICAgICAgICg5J2gxRkIgICAgICAgICAgICAgICAgICksCisJLkJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKDknaDFGQyAgICAgICAgICAgICAgICAgKSwKKwkuQklTVF9SQURfV0RfSSAgICAgICAgICAoQklTVDFfQUREUl9XRC0yICAgICAgICApLAorCS5CSVNUX1JBRF9XRF9PICAgICAgICAgIChCSVNUMV9BRERSX1dELTIgICAgICAgICkKKyAgICAgICAgYGVuZGlmCisgICAgICkgCisJICAgICB1X21iaXN0ICgKKworYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgLnZjY2QxICAgICAgICAgICAgICAgICAgKHZjY2QxICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgICAgIC52c3NkMSAgICAgICAgICAgICAgICAgICh2c3NkMSAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorCisgICAgIC8vIENsb2NrIFNrZXcgYWRqdXN0CisJLndiZF9jbGtfaW50ICAgICAgICAgICh3YmRfY2xrX2ludCAgICAgICAgICApLCAKKwkuY2ZnX2Nza2FfbWJpc3QgICAgICAgKGNmZ19jc2thX21iaXN0ICAgICAgICksIAorCS53YmRfY2xrX21iaXN0ICAgICAgICAod2JkX2Nsa19tYmlzdCAgICAgICAgKSwKKworCS8vIFdCIEkvRgorICAgICAgICAud2JfY2xrMl9pICAgICAgICAgICAgKHdiX2NsazJfaSAgICAgICAgICAgICksICAKKyAgICAgICAgLndiX2Nsa19pICAgICAgICAgICAgICh3Yl9jbGtfaSAgICAgICAgICAgICApLCAgCisgICAgICAgIC5tZW1fcmVxICAgICAgICAgICAgICAobWVtX3JlcSAgICAgICAgICAgICAgKSwgIAorCS5tZW1fY3MgICAgICAgICAgICAgICAobWVtX2NzICAgICAgICAgICAgICAgKSwKKyAgICAgICAgLm1lbV9hZGRyICAgICAgICAgICAgIChtZW1fYWRkciAgICAgICAgICAgICApLCAgCisgICAgICAgIC5tZW1fd2UgICAgICAgICAgICAgICAobWVtX3dlICAgICAgICAgICAgICAgKSwgIAorICAgICAgICAubWVtX3dkYXRhICAgICAgICAgICAgKG1lbV93ZGF0YSAgICAgICAgICAgICksICAKKyAgICAgICAgLm1lbV93bWFzayAgICAgICAgICAgIChtZW1fd21hc2sgICAgICAgICAgICApLCAgCisgICAgICAgIC5tZW1fcmRhdGEgICAgICAgICAgICAobWVtX3JkYXRhICAgICAgICAgICAgKSwgIAorCisJLnJzdF9uICAgICAgICAgICAgICAgIChyc3RfbiAgICAgICAgICAgICAgICApLAorCisJCisJLmJpc3RfZW4gICAgICAgICAgICAgIChiaXN0X2VuICAgICAgICAgICAgICApLAorCS5iaXN0X3J1biAgICAgICAgICAgICAoYmlzdF9ydW4gICAgICAgICAgICAgKSwKKwkuYmlzdF9zaGlmdCAgICAgICAgICAgKGJpc3Rfc2hpZnQgICAgICAgICAgICksCisJLmJpc3RfbG9hZCAgICAgICAgICAgIChiaXN0X2xvYWQgICAgICAgICAgICApLAorCS5iaXN0X3NkaSAgICAgICAgICAgICAoYmlzdF9zZGkgICAgICAgICAgICAgKSwKKworCS5iaXN0X2Vycm9yX2NudDMgICAgICAoYmlzdF9lcnJvcl9jbnQzICApLAorCS5iaXN0X2Vycm9yX2NudDIgICAgICAoYmlzdF9lcnJvcl9jbnQyICApLAorCS5iaXN0X2Vycm9yX2NudDEgICAgICAoYmlzdF9lcnJvcl9jbnQxICApLAorCS5iaXN0X2Vycm9yX2NudDAgICAgICAoYmlzdF9lcnJvcl9jbnQwICApLAorCS5iaXN0X2NvcnJlY3QgICAgICAgICAoYmlzdF9jb3JyZWN0ICAgICApLAorCS5iaXN0X2Vycm9yICAgICAgICAgICAoYmlzdF9lcnJvciAgICAgICApLAorCS5iaXN0X2RvbmUgICAgICAgICAgICAoYmlzdF9kb25lICAgICAgICApLAorCS5iaXN0X3NkbyAgICAgICAgICAgICAoYmlzdF9zZG8gICAgICAgICApLAorCisgICAgIC8vIHRvd2FyZHMgbWVtb3J5CisgICAgIC8vIFBPUlQtQQorICAgICAgICAubWVtX2Nsa19hICAgICAgICAgICAgKG1lbV9jbGtfYSAgICAgICAgKSwKKyAgICAgICAgLm1lbV9hZGRyX2EwICAgICAgICAgIChtZW1fYWRkcl9hMCAgICAgICksCisgICAgICAgIC5tZW1fYWRkcl9hMSAgICAgICAgICAobWVtX2FkZHJfYTEgICAgICApLAorICAgICAgICAubWVtX2FkZHJfYTIgICAgICAgICAgKG1lbV9hZGRyX2EyICAgICAgKSwKKyAgICAgICAgLm1lbV9hZGRyX2EzICAgICAgICAgIChtZW1fYWRkcl9hMyAgICAgICksCisgICAgICAgIC5tZW1fY2VuX2EgICAgICAgICAgICAobWVtX2Nlbl9hICAgICAgICApLAorICAgICAgICAubWVtX3dlYl9hICAgICAgICAgICAgKG1lbV93ZWJfYSAgICAgICAgKSwKKyAgICAgICAgLm1lbV9tYXNrX2EwICAgICAgICAgIChtZW1fbWFza19hMCAgICAgICksCisgICAgICAgIC5tZW1fbWFza19hMSAgICAgICAgICAobWVtX21hc2tfYTEgICAgICApLAorICAgICAgICAubWVtX21hc2tfYTIgICAgICAgICAgKG1lbV9tYXNrX2EyICAgICAgKSwKKyAgICAgICAgLm1lbV9tYXNrX2EzICAgICAgICAgIChtZW1fbWFza19hMyAgICAgICksCisgICAgICAgIC5tZW1fZGluX2EwICAgICAgICAgICAobWVtX2Rpbl9hMCAgICAgICApLAorICAgICAgICAubWVtX2Rpbl9hMSAgICAgICAgICAgKG1lbV9kaW5fYTEgICAgICAgKSwKKyAgICAgICAgLm1lbV9kaW5fYTIgICAgICAgICAgIChtZW1fZGluX2EyICAgICAgICksCisgICAgICAgIC5tZW1fZGluX2EzICAgICAgICAgICAobWVtX2Rpbl9hMyAgICAgICApLAorICAgICAgICAubWVtX2RvdXRfYTAgICAgICAgICAgKG1lbV9kb3V0X2EwICAgICAgKSwKKyAgICAgICAgLm1lbV9kb3V0X2ExICAgICAgICAgIChtZW1fZG91dF9hMSAgICAgICksCisgICAgICAgIC5tZW1fZG91dF9hMiAgICAgICAgICAobWVtX2RvdXRfYTIgICAgICApLAorICAgICAgICAubWVtX2RvdXRfYTMgICAgICAgICAgKG1lbV9kb3V0X2EzICAgICAgKSwKKyAgICAgLy8gUE9SVC1CCisgICAgICAgIC5tZW1fY2xrX2IgICAgICAgICAgICAobWVtX2Nsa19iICAgICAgICApLAorICAgICAgICAubWVtX2Nlbl9iICAgICAgICAgICAgKG1lbV9jZW5fYiAgICAgICAgKSwKKyAgICAgICAgLm1lbV9hZGRyX2IwICAgICAgICAgIChtZW1fYWRkcl9iMCAgICAgICksCisgICAgICAgIC5tZW1fYWRkcl9iMSAgICAgICAgICAobWVtX2FkZHJfYjEgICAgICApLAorICAgICAgICAubWVtX2FkZHJfYjIgICAgICAgICAgKG1lbV9hZGRyX2IyICAgICAgKSwKKyAgICAgICAgLm1lbV9hZGRyX2IzICAgICAgICAgIChtZW1fYWRkcl9iMyAgICAgICkKKworCispOworCisKKy8qKgorc2t5MTMwX3NyYW1fMmtieXRlXzFydzFyXzMyeDUxMl84IHVfc3JhbTBfMmtiKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgLnZjY2QxICh2Y2NkMSksLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICAudnNzZDEgKHZzc2QxKSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisvLyBQb3J0IDA6IFJXCisgICAgLmNsazAgICAgIChtZW1fY2xrX2FbMF0pLAorICAgIC5jc2IwICAgICAobWVtX2Nlbl9hWzBdKSwKKyAgICAud2ViMCAgICAgKG1lbV93ZWJfYVswXSksCisgICAgLndtYXNrMCAgIChtZW0wX21hc2tfYSksCisgICAgLmFkZHIwICAgIChtZW0wX2FkZHJfYSksCisgICAgLmRpbjAgICAgIChtZW0wX2Rpbl9hKSwKKyAgICAuZG91dDAgICAgKG1lbTBfZG91dF9hKSwKKy8vIFBvcnQgMTogUgorICAgIC5jbGsxICAgICAobWVtX2Nsa19iWzBdKSwKKyAgICAuY3NiMSAgICAgKG1lbV9jZW5fYlswXSksCisgICAgLmFkZHIxICAgIChtZW0wX2FkZHJfYiksCisgICAgLmRvdXQxICAgICgpCisgICk7CisKK3NreTEzMF9zcmFtXzJrYnl0ZV8xcncxcl8zMng1MTJfOCB1X3NyYW0xXzJrYigKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIC52Y2NkMSAodmNjZDEpLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgLnZzc2QxICh2c3NkMSksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorLy8gUG9ydCAwOiBSVworICAgIC5jbGswICAgICAobWVtX2Nsa19hWzFdKSwKKyAgICAuY3NiMCAgICAgKG1lbV9jZW5fYVsxXSksCisgICAgLndlYjAgICAgIChtZW1fd2ViX2FbMV0pLAorICAgIC53bWFzazAgICAobWVtMV9tYXNrX2EpLAorICAgIC5hZGRyMCAgICAobWVtMV9hZGRyX2EpLAorICAgIC5kaW4wICAgICAobWVtMV9kaW5fYSksCisgICAgLmRvdXQwICAgIChtZW0xX2RvdXRfYSksCisvLyBQb3J0IDE6IFIKKyAgICAuY2xrMSAgICAgKG1lbV9jbGtfYlsxXSksCisgICAgLmNzYjEgICAgIChtZW1fY2VuX2JbMV0pLAorICAgIC5hZGRyMSAgICAobWVtMV9hZGRyX2IpLAorICAgIC5kb3V0MSAgICAoKQorICApOworCitza3kxMzBfc3JhbV8ya2J5dGVfMXJ3MXJfMzJ4NTEyXzggdV9zcmFtMl8ya2IoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAudmNjZDEgKHZjY2QxKSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgIC52c3NkMSAodnNzZDEpLC8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKy8vIFBvcnQgMDogUlcKKyAgICAuY2xrMCAgICAgKG1lbV9jbGtfYVsyXSksCisgICAgLmNzYjAgICAgIChtZW1fY2VuX2FbMl0pLAorICAgIC53ZWIwICAgICAobWVtX3dlYl9hWzJdKSwKKyAgICAud21hc2swICAgKG1lbTJfbWFza19hKSwKKyAgICAuYWRkcjAgICAgKG1lbTJfYWRkcl9hKSwKKyAgICAuZGluMCAgICAgKG1lbTJfZGluX2EpLAorICAgIC5kb3V0MCAgICAobWVtMl9kb3V0X2EpLAorLy8gUG9ydCAxOiBSCisgICAgLmNsazEgICAgIChtZW1fY2xrX2JbMl0pLAorICAgIC5jc2IxICAgICAobWVtX2Nlbl9iWzJdKSwKKyAgICAuYWRkcjEgICAgKG1lbTJfYWRkcl9iKSwKKyAgICAuZG91dDEgICAgKCkKKyAgKTsKKworCitza3kxMzBfc3JhbV8ya2J5dGVfMXJ3MXJfMzJ4NTEyXzggdV9zcmFtM18ya2IoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAudmNjZDEgKHZjY2QxKSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgIC52c3NkMSAodnNzZDEpLC8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKy8vIFBvcnQgMDogUlcKKyAgICAuY2xrMCAgICAgKG1lbV9jbGtfYVszXSksCisgICAgLmNzYjAgICAgIChtZW1fY2VuX2FbM10pLAorICAgIC53ZWIwICAgICAobWVtX3dlYl9hWzNdKSwKKyAgICAud21hc2swICAgKG1lbTNfbWFza19hKSwKKyAgICAuYWRkcjAgICAgKG1lbTNfYWRkcl9hKSwKKyAgICAuZGluMCAgICAgKG1lbTNfZGluX2EpLAorICAgIC5kb3V0MCAgICAobWVtM19kb3V0X2EpLAorLy8gUG9ydCAxOiBSCisgICAgLmNsazEgICAgIChtZW1fY2xrX2JbM10pLAorICAgIC5jc2IxICAgICAobWVtX2Nlbl9iWzNdKSwKKyAgICAuYWRkcjEgICAgKG1lbTNfYWRkcl9iKSwKKyAgICAuZG91dDEgICAgKCkKKyAgKTsKKworCisqKiovCisKK2VuZG1vZHVsZQorCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9waW5tdXgvc3JjL2dwaW9fY29udHJvbC5zdiBiL3Zlcmlsb2cvcnRsL3Bpbm11eC9zcmMvZ3Bpb19jb250cm9sLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOTE3ZGMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9waW5tdXgvc3JjL2dwaW9fY29udHJvbC5zdgpAQCAtMCwwICsxLDQ0IEBACisKKy8vIEdQSU8gSW50ZXJydXB0IEdlbmVyYXRpb24KK21vZHVsZSBncGlvX2ludHIgKAorICAgaW5wdXQgIGxvZ2ljICAgICAgICAgbWNsayAgICAgICAgICAgICAgICAgICAgICwvLyBTeXN0ZW0gY2xrCisgICBpbnB1dCAgbG9naWMgICAgICAgICBoX3Jlc2V0X24gICAgICAgICAgICAgICAgLC8vIHN5c3RlbSByZXNldAorICAgaW5wdXQgIGxvZ2ljIFszMTowXSAgZ3Bpb19wcmV2X2luZGF0YSAgICAgICAgICwvLyBwcmV2aW91c2x5IGNhcHR1cmVkIEdQSU8gSS9QIHBpbnMgZGF0YQorICAgaW5wdXQgIGxvZ2ljIFszMTowXSAgY2ZnX2dwaW9fZGF0YV9pbiAgICAgICAgICwvLyBHUElPIEkvUCBwaW5zIGRhdGEgY2FwdHVyZWQgaW50byB0aGlzCisgICBpbnB1dCAgbG9naWMgWzMxOjBdICBjZmdfZ3Bpb19vdXRfZGF0YSAgICAgICAgLC8vIEdQSU8gc3RhdHVjIE8vUCBkYXRhIGZyb20gY29uZmlnIHJlZworICAgaW5wdXQgIGxvZ2ljIFszMTowXSAgY2ZnX2dwaW9fZGlyX3NlbCAgICAgICAgICwvLyBkZWNpZGVzIG9uIEdQSU8gcGluIGlzIEkvUCBvciBPL1AgYXQgcGFkIGxldmVsCisgICBpbnB1dCAgbG9naWMgWzMxOjBdICBjZmdfZ3Bpb19wb3NlZGdlX2ludF9zZWwgLC8vIHNlbGVjdCBwb3NlZGdlIGludGVycnVwdAorICAgaW5wdXQgIGxvZ2ljIFszMTowXSAgY2ZnX2dwaW9fbmVnZWRnZV9pbnRfc2VsICwvLyBzZWxlY3QgbmVnZWRnZSBpbnRlcnJ1cHQKKyAgIAorICAgCisgICBvdXRwdXQgbG9naWMgWzMxOjBdICBwYWRfZ3Bpb19vdXQgICAgICAgICAgICAgLC8vIEdQSU8gTy9QIHRvIHRoZSBncGlvIGNmZyByZWcKKyAgIG91dHB1dCBsb2dpYyBbMzE6MF0gIGdwaW9faW50X2V2ZW50ICAgICAgICAgICAgLy8gdG8gdGhlIGNmZyBpbnRlcnJ1cHQgc3RhdHVzIHJlZyAKKyAKKyk7CisKKworaW50ZWdlciBpOworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9naWMgZm9yIGludGVycnVwdCBkZXRlY3Rpb24gCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3JlZyBbMzE6MF0gIGxvY2FsX2dwaW9faW50X2V2ZW50OyAgICAgICAgICAgICAvLyB0byB0aGUgY2ZnIGludGVycnVwdCBzdGF0dXMgcmVnIAorYWx3YXlzIEAoY2ZnX2dwaW9fZGF0YV9pbiBvciBjZmdfZ3Bpb19uZWdlZGdlX2ludF9zZWwgb3IgY2ZnX2dwaW9fcG9zZWRnZV9pbnRfc2VsCisgICAgICAgICAgICBvciBncGlvX3ByZXZfaW5kYXRhKQorYmVnaW4KKyAgIGZvciAoaT0wOyBpPDMyOyBpPWkrMSkKKyAgIGJlZ2luIAorICAgLy8gbG9va2luZyBmb3IgcmlzaW5nIGVkZ2UgaW50IAorICAgICAgbG9jYWxfZ3Bpb19pbnRfZXZlbnRbaV0gPSAoKGNmZ19ncGlvX3Bvc2VkZ2VfaW50X3NlbFtpXSAmIH5ncGlvX3ByZXZfaW5kYXRhW2ldIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmICBjZmdfZ3Bpb19kYXRhX2luW2ldKSB8IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNmZ19ncGlvX25lZ2VkZ2VfaW50X3NlbFtpXSAmIGdwaW9fcHJldl9pbmRhdGFbaV0gJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+Y2ZnX2dwaW9fZGF0YV9pbltpXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb29raW5nIGZvciBmYWxsaW5nIGVkZ2UgaW50IAorICAgZW5kCitlbmQKKworYXNzaWduIGdwaW9faW50X2V2ZW50ICAgPSBsb2NhbF9ncGlvX2ludF9ldmVudFszMTowXTsgLy8gZ29lcyBhcyBPL1AgdG8gdGhlIGNmZyByZWcgCisKK2Fzc2lnbiBwYWRfZ3Bpb19vdXQgICAgID0gY2ZnX2dwaW9fb3V0X2RhdGFbMzE6MF0gICAgIDsvLyBPL1Agb24gdGhlIEdQSU8gYnVzCisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvcGlubXV4L3NyYy9ncGlvX2ludHIuc3YgYi92ZXJpbG9nL3J0bC9waW5tdXgvc3JjL2dwaW9faW50ci5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzE5MThkCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvcGlubXV4L3NyYy9ncGlvX2ludHIuc3YKQEAgLTAsMCArMSw0MyBAQAorCisvLyBHUElPIEludGVycnVwdCBHZW5lcmF0aW9uCittb2R1bGUgZ3Bpb19pbnRyICgKKyAgIGlucHV0ICBsb2dpYyAgICAgICAgIG1jbGsgICAgICAgICAgICAgICAgICAgICAsLy8gU3lzdGVtIGNsaworICAgaW5wdXQgIGxvZ2ljICAgICAgICAgaF9yZXNldF9uICAgICAgICAgICAgICAgICwvLyBzeXN0ZW0gcmVzZXQKKyAgIGlucHV0ICBsb2dpYyBbMzE6MF0gIGdwaW9fcHJldl9pbmRhdGEgICAgICAgICAsLy8gcHJldmlvdXNseSBjYXB0dXJlZCBHUElPIEkvUCBwaW5zIGRhdGEKKyAgIGlucHV0ICBsb2dpYyBbMzE6MF0gIGNmZ19ncGlvX2RhdGFfaW4gICAgICAgICAsLy8gR1BJTyBJL1AgcGlucyBkYXRhIGNhcHR1cmVkIGludG8gdGhpcworICAgaW5wdXQgIGxvZ2ljIFszMTowXSAgY2ZnX2dwaW9fb3V0X2RhdGEgICAgICAgICwvLyBHUElPIHN0YXR1YyBPL1AgZGF0YSBmcm9tIGNvbmZpZyByZWcKKyAgIGlucHV0ICBsb2dpYyBbMzE6MF0gIGNmZ19ncGlvX2Rpcl9zZWwgICAgICAgICAsLy8gZGVjaWRlcyBvbiBHUElPIHBpbiBpcyBJL1Agb3IgTy9QIGF0IHBhZCBsZXZlbAorICAgaW5wdXQgIGxvZ2ljIFszMTowXSAgY2ZnX2dwaW9fcG9zZWRnZV9pbnRfc2VsICwvLyBzZWxlY3QgcG9zZWRnZSBpbnRlcnJ1cHQKKyAgIGlucHV0ICBsb2dpYyBbMzE6MF0gIGNmZ19ncGlvX25lZ2VkZ2VfaW50X3NlbCAsLy8gc2VsZWN0IG5lZ2VkZ2UgaW50ZXJydXB0CisgICAKKyAgIAorICAgb3V0cHV0IGxvZ2ljIFszMTowXSAgcGFkX2dwaW9fb3V0ICAgICAgICAgICAgICwvLyBHUElPIE8vUCB0byB0aGUgZ3BpbyBjZmcgcmVnCisgICBvdXRwdXQgbG9naWMgWzMxOjBdICBncGlvX2ludF9ldmVudCAgICAgICAgICAgIC8vIHRvIHRoZSBjZmcgaW50ZXJydXB0IHN0YXR1cyByZWcgCisgCispOworCisKK2ludGVnZXIgaTsKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvZ2ljIGZvciBpbnRlcnJ1cHQgZGV0ZWN0aW9uIAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCityZWcgWzMxOjBdICBsb2NhbF9ncGlvX2ludF9ldmVudDsgICAgICAgICAgICAgLy8gdG8gdGhlIGNmZyBpbnRlcnJ1cHQgc3RhdHVzIHJlZyAKK2Fsd2F5c19jb21iCitiZWdpbgorICAgZm9yIChpPTA7IGk8MzI7IGk9aSsxKQorICAgYmVnaW4gCisgICAvLyBsb29raW5nIGZvciByaXNpbmcgZWRnZSBpbnQgCisgICAgICBsb2NhbF9ncGlvX2ludF9ldmVudFtpXSA9ICgoY2ZnX2dwaW9fcG9zZWRnZV9pbnRfc2VsW2ldICYgfmdwaW9fcHJldl9pbmRhdGFbaV0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgIGNmZ19ncGlvX2RhdGFfaW5baV0pIHwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2ZnX2dwaW9fbmVnZWRnZV9pbnRfc2VsW2ldICYgZ3Bpb19wcmV2X2luZGF0YVtpXSAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5jZmdfZ3Bpb19kYXRhX2luW2ldKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvb2tpbmcgZm9yIGZhbGxpbmcgZWRnZSBpbnQgCisgICBlbmQKK2VuZAorCithc3NpZ24gZ3Bpb19pbnRfZXZlbnQgICA9IGxvY2FsX2dwaW9faW50X2V2ZW50WzMxOjBdOyAvLyBnb2VzIGFzIE8vUCB0byB0aGUgY2ZnIHJlZyAKKworYXNzaWduIHBhZF9ncGlvX291dCAgICAgPSBjZmdfZ3Bpb19vdXRfZGF0YVszMTowXSAgICAgOy8vIE8vUCBvbiB0aGUgR1BJTyBidXMKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9waW5tdXgvc3JjL3Bpbm11eC5zdiBiL3Zlcmlsb2cvcnRsL3Bpbm11eC9zcmMvcGlubXV4LnN2Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ2YTY5YTQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9waW5tdXgvc3JjL3Bpbm11eC5zdgpAQCAtMCwwICsxLDgwMSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBQaW5tdXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSByaXNjZHVpbm8gY29yZXMgcHJvamVjdCAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3Jpc2NkdWluby5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICBQaW5NdXggTWFuYWdlcyBhbGwgdGhlIHBpbiBtdWx0aXBsZXhpbmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMTZ0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgaW5pdGlhbCB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbW9kdWxlIHBpbm11eCAoCisgICAgICAgICAgICAgICAgICAgIGBpZmRlZiBVU0VfUE9XRVJfUElOUworICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCBsb2dpYyAgICAgICAgIHZjY2QxLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0IGxvZ2ljICAgICAgICAgdnNzZDEsLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKKyAgICAgICAgICAgICAgICAgICAgYGVuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9jayBza2V3IGFkanVzdAorICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCBsb2dpYyBbMzowXSAgICAgICAgY2ZnX2Nza2FfcGlubXV4LAorICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCBsb2dpYwkgICAgICAgIHdiZF9jbGtfaW50LAorICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgbG9naWMJICAgICAgICB3YmRfY2xrX3Bpbm11eCwKKyAgICAgICAgICAgICAgICAgICAgICAgLy8gU3lzdGVtIFNpZ25hbHMKKyAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5wdXRzCisJCSAgICAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICBtY2xrLAorICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICBoX3Jlc2V0X24sCisKKwkJICAgICAgIC8vIFJlZyBCdXMgSW50ZXJmYWNlIFNpZ25hbAorICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICByZWdfY3MsCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgIHJlZ193ciwKKyAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgbG9naWMgWzc6MF0gICAgICAgcmVnX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0IGxvZ2ljIFszMTowXSAgICAgIHJlZ193ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgbG9naWMgWzM6MF0gICAgICAgcmVnX2JlLAorCisgICAgICAgICAgICAgICAgICAgICAgIC8vIE91dHB1dHMKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljIFszMTowXSAgICAgcmVnX3JkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICByZWdfYWNrLAorCisJCSAgICAgIC8vIFJpc2MgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgbG9naWMgWzMxOjBdICAgICBmdXNlX21oYXJ0aWQsCisgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBsb2dpYyBbMTU6MF0gICAgIGlycV9saW5lcywKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgc29mdF9pcnEsCisgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBsb2dpYyBbMjowXSAgICAgIHVzZXJfaXJxLAorCQkgICAgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgdXNiX2ludHIsCisJCSAgICAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICBpMmNtX2ludHIsCisKKyAgICAgICAgICAgICAgICAgICAgICAgLy8gRGlnaXRhbCBJTworICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgbG9naWMgWzM3OjBdICAgICBkaWdpdGFsX2lvX291dCwKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljIFszNzowXSAgICAgZGlnaXRhbF9pb19vZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0ICBsb2dpYyBbMzc6MF0gICAgIGRpZ2l0YWxfaW9faW4sCisKKwkJICAgICAgIC8vIFNGTEFTSCBJL0YKKwkJICAgICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgIHNmbGFzaF9zY2ssCisJCSAgICAgICBpbnB1dCAgbG9naWMgWzM6MF0gICAgICBzZmxhc2hfc3MsCisJCSAgICAgICBpbnB1dCAgbG9naWMgWzM6MF0gICAgICBzZmxhc2hfb2VuLAorCQkgICAgICAgaW5wdXQgIGxvZ2ljIFszOjBdICAgICAgc2ZsYXNoX2RvLAorCQkgICAgICAgb3V0cHV0IGxvZ2ljIFszOjBdICAgICAgc2ZsYXNoX2RpLAorCisJCSAgICAgICAvLyBTU1JBTSBJL0YgLSBUZW1wIE1hc2tlZAorCQkgICAgICAgLy9pbnB1dCAgbG9naWMgICAgICAgICAgICBzc3JhbV9zY2ssCisJCSAgICAgICAvL2lucHV0ICBsb2dpYyAgICAgICAgICAgIHNzcmFtX3NzLAorCQkgICAgICAgLy9pbnB1dCAgbG9naWMgWzM6MF0gICAgICBzc3JhbV9vZW4sCisJCSAgICAgICAvL2lucHV0ICBsb2dpYyBbMzowXSAgICAgIHNzcmFtX2RvLAorCQkgICAgICAgLy9vdXRwdXQgbG9naWMgWzM6MF0gICAgICBzc3JhbV9kaSwKKworCQkgICAgICAgLy8gVVNCIEkvRgorCQkgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgdXNiX2RwX28sCisJCSAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICB1c2JfZG5fbywKKwkJICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIHVzYl9vZW4sCisJCSAgICAgICBvdXRwdXQgICBsb2dpYyAgICAgICAgICB1c2JfZHBfaSwKKwkJICAgICAgIG91dHB1dCAgIGxvZ2ljICAgICAgICAgIHVzYl9kbl9pLAorCisJCSAgICAgICAvLyBVQVJUIEkvRgorCQkgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgdWFydF90eGQsCisJCSAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICB1YXJ0X3J4ZCwKKworCQkgICAgICAgLy8gSTJDTSBJL0YKKwkJICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIGkyY21fY2xrX28sCisJCSAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICBpMmNtX2Nsa19pLAorCQkgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgaTJjbV9jbGtfb2VuLAorCQkgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgaTJjbV9kYXRhX29lbiwKKwkJICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIGkyY21fZGF0YV9vLAorCQkgICAgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgaTJjbV9kYXRhX2ksCisKKwkJICAgICAgIC8vIFNQSSBNQVNURVIKKwkJICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIHNwaW1fc2NrLAorCQkgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgc3BpbV9zcywKKwkJICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIHNwaW1fbWlzbywKKwkJICAgICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgIHNwaW1fbW9zaSwKKworICAgICAgICAgICAgICAgICAgICAgICAvLyBVQVJUIE1BU1RFUiBJL0YKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgIHVhcnRtX3J4ZCAsCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgICB1YXJ0bV90eGQgICwgICAgICAgCisKKwkJICAgICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgIHB1bHNlMW1fbWNsaywKKwkgICAgICAgICAgICAgICBvdXRwdXQgIGxvZ2ljIFszMTowXSAgICBwaW5tdXhfZGVidWcsCSAgICAgICAKKworCQkvLyBCSVNUIEkvRgorCSAgICAgICAgICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgIGJpc3RfZW4sCisJICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgYmlzdF9ydW4sCisJICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgYmlzdF9sb2FkLAorCisJICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgYmlzdF9zZGksCisJICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgYmlzdF9zaGlmdCwKKwkgICAgICAgICAgICAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICBiaXN0X3NkbywKKworCSAgICAgICAgICAgICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgIGJpc3RfZG9uZSwKKwkgICAgICAgICAgICAgICBpbnB1dCBsb2dpYyBbMzowXSAgICAgICBiaXN0X2Vycm9yLAorCSAgICAgICAgICAgICAgIGlucHV0IGxvZ2ljIFszOjBdICAgICAgIGJpc3RfY29ycmVjdCwKKwkgICAgICAgICAgICAgICBpbnB1dCBsb2dpYyBbMzowXSAgICAgICBiaXN0X2Vycm9yX2NudDAsCisJICAgICAgICAgICAgICAgaW5wdXQgbG9naWMgWzM6MF0gICAgICAgYmlzdF9lcnJvcl9jbnQxLAorCSAgICAgICAgICAgICAgIGlucHV0IGxvZ2ljIFszOjBdICAgICAgIGJpc3RfZXJyb3JfY250MiwKKwkgICAgICAgICAgICAgICBpbnB1dCBsb2dpYyBbMzowXSAgICAgICBiaXN0X2Vycm9yX2NudDMKKyAgICk7IAorCisKKworICAgCisvKiBjbG9jayBwdWxzZSAqLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorbG9naWMgICAgICAgICAgIHB1bHNlMXVfbWNsayAgICAgICAgICAgIDsvLyAxIFVzU2Vjb25kIFB1bHNlIGZvciB3YXZlZm9ybSBHZW5lcmF0b3IKK2xvZ2ljICAgICAgICAgICBwdWxzZTFzX21jbGsgICAgICAgICAgICA7Ly8gMVNlY29uZCBQdWxzZSBmb3Igd2F2ZWZvcm0gR2VuZXJhdG9yCitsb2dpYyBbOTowXSAgICAgY2ZnX3B1bHNlXzF1cyAgICAgICAgICAgOy8vIDF1cyBwdWxzZSBnZW5lcmF0aW9uIGNvbmZpZworICAgICAgICAgICAgICAgIAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIDYgUFdNIHZhcmlhYmxlZAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbG9naWMgWzU6MF0gICAgIHB3bV93Zm0gICAgICAgICAgICAgICAgIDsKK2xvZ2ljIFs1OjBdICAgICBjZmdfcHdtX2VuYiAgICAgICAgICAgICA7Citsb2dpYyBbMTU6MF0gICAgY2ZnX3B3bTBfaGlnaCAgICAgICAgICAgOworbG9naWMgWzE1OjBdICAgIGNmZ19wd20wX2xvdyAgICAgICAgICAgIDsKK2xvZ2ljIFsxNTowXSAgICBjZmdfcHdtMV9oaWdoICAgICAgICAgICA7Citsb2dpYyBbMTU6MF0gICAgY2ZnX3B3bTFfbG93ICAgICAgICAgICAgOworbG9naWMgWzE1OjBdICAgIGNmZ19wd20yX2hpZ2ggICAgICAgICAgIDsKK2xvZ2ljIFsxNTowXSAgICBjZmdfcHdtMl9sb3cgICAgICAgICAgICA7Citsb2dpYyBbMTU6MF0gICAgY2ZnX3B3bTNfaGlnaCAgICAgICAgICAgOworbG9naWMgWzE1OjBdICAgIGNmZ19wd20zX2xvdyAgICAgICAgICAgIDsKK2xvZ2ljIFsxNTowXSAgICBjZmdfcHdtNF9oaWdoICAgICAgICAgICA7Citsb2dpYyBbMTU6MF0gICAgY2ZnX3B3bTRfbG93ICAgICAgICAgICAgOworbG9naWMgWzE1OjBdICAgIGNmZ19wd201X2hpZ2ggICAgICAgICAgIDsKK2xvZ2ljIFsxNTowXSAgICBjZmdfcHdtNV9sb3cgICAgICAgICAgICA7CisKKword2lyZSAgWzMxOjBdICBncGlvX3ByZXZfaW5kYXRhICAgICAgICAgOy8vIHByZXZpb3VzbHkgY2FwdHVyZWQgR1BJTyBJL1AgcGlucyBkYXRhCit3aXJlICBbMzE6MF0gIGNmZ19ncGlvX291dF9kYXRhICAgICAgICA7Ly8gR1BJTyBzdGF0dWMgTy9QIGRhdGEgZnJvbSBjb25maWcgcmVnCit3aXJlICBbMzE6MF0gIGNmZ19ncGlvX2Rpcl9zZWwgICAgICAgICA7Ly8gZGVjaWRlcyBvbiBHUElPIHBpbiBpcyBJL1Agb3IgTy9QIGF0IHBhZCBsZXZlbCwgMCAtPiBJbnB1dCwgMSAtPiBPdXRwdXQKK3dpcmUgIFszMTowXSAgY2ZnX2dwaW9fb3V0X3R5cGUgICAgICAgIDsvLyBHUElPIFR5cGUsIFVudXNlZAord2lyZSAgWzMxOjBdICBjZmdfbXVsdGlfZnVuY19zZWwgICAgICAgOy8vIEdQSU8gTXVsdGkgZnVuY3Rpb24gdHlwZQord2lyZSAgWzMxOjBdICBjZmdfZ3Bpb19wb3NlZGdlX2ludF9zZWwgOy8vIHNlbGVjdCBwb3NlZGdlIGludGVycnVwdAord2lyZSAgWzMxOjBdICBjZmdfZ3Bpb19uZWdlZGdlX2ludF9zZWwgOy8vIHNlbGVjdCBuZWdlZGdlIGludGVycnVwdAord2lyZSAgWzMxOjAwXSBjZmdfZ3Bpb19kYXRhX2luICAgICAgICAgOworCisKK3JlZyBbNzowXSAgICAgcG9ydF9hX2luOyAgICAgIC8vIFBPUlQgQSBEYXRhIEluCityZWcgWzc6MF0gICAgIHBvcnRfYl9pbjsgICAgICAvLyBQT1JUIEIgRGF0YSBJbgorcmVnIFs3OjBdICAgICBwb3J0X2NfaW47ICAgICAgLy8gUE9SVCBDIERhdGEgSW4KK3JlZyBbNzowXSAgICAgcG9ydF9kX2luOyAgICAgIC8vIFBPUlQgRCBEYXRhIEluCisKK3dpcmUgWzc6MF0gICAgcG9ydF9hX291dDsgICAgIC8vIFBPUlQgQSBEYXRhIE91dAord2lyZSBbNzowXSAgICBwb3J0X2Jfb3V0OyAgICAgLy8gUE9SVCBCIERhdGEgT3V0Cit3aXJlIFs3OjBdICAgIHBvcnRfY19vdXQ7ICAgICAvLyBQT1JUIEMgRGF0YSBPdXQKK3dpcmUgWzc6MF0gICAgcG9ydF9kX291dDsgICAgIC8vIFBPUlQgRCBEYXRhIE91dAord2lyZSBbMzE6MF0gICBwYWRfZ3Bpb19pbjsgICAgLy8gR1BJTyBkYXRhIGlucHV0IGZyb20gUEFECit3aXJlIFszMTowXSAgIHBhZF9ncGlvX291dDsgICAvLyBHUElPIERhdGEgb3V0IHRvd2FyZHMgUEFECit3aXJlIFszMTowXSAgIGdwaW9faW50X2V2ZW50OyAvLyBHUElPIEludGVycnVwdCBpbmRpY2F0aW9uCityZWcgWzE6MF0gICAgIGV4dF9pbnRyX2luOyAgICAvLyBFeHRlcm5hbCBQQUQgbGV2ZWwgaW50ZXJydXB0CisKKy8vIEdQSU8gdG8gUE9SVCBNYXBwaW5nCithc3NpZ24gICAgICBwYWRfZ3Bpb19pbls3OjBdICAgICA9IHBvcnRfYV9pbjsKK2Fzc2lnbiAgICAgIHBhZF9ncGlvX2luWzE1OjhdICAgID0gcG9ydF9iX2luOworYXNzaWduICAgICAgcGFkX2dwaW9faW5bMjM6MTZdICAgPSBwb3J0X2NfaW47Cithc3NpZ24gICAgICBwYWRfZ3Bpb19pblszMToyNF0gICA9IHBvcnRfZF9pbjsKKworYXNzaWduICAgICAgcG9ydF9hX291dCAgICAgICAgICAgPSBwYWRfZ3Bpb19vdXRbNzowXTsKK2Fzc2lnbiAgICAgIHBvcnRfYl9vdXQgICAgICAgICAgID0gcGFkX2dwaW9fb3V0WzE1OjhdOworYXNzaWduICAgICAgcG9ydF9jX291dCAgICAgICAgICAgPSBwYWRfZ3Bpb19vdXRbMjM6MTZdOworYXNzaWduICAgICAgcG9ydF9kX291dCAgICAgICAgICAgPSBwYWRfZ3Bpb19vdXRbMzE6MjRdOworCithc3NpZ24gICAgICBwaW5tdXhfZGVidWcgPSAnMDsgLy8gVG9kbzogTmVlZCB0byBmaXgKKworLy8gU1NSQU0gSS9GIC0gVGVtcCBtYXNrZWQKKy8vaW5wdXQgIGxvZ2ljICAgICAgICAgICAgc3NyYW1fc2NrLAorLy9pbnB1dCAgbG9naWMgICAgICAgICAgICBzc3JhbV9zcywKKy8vaW5wdXQgIGxvZ2ljIFszOjBdICAgICAgc3NyYW1fb2VuLAorLy9pbnB1dCAgbG9naWMgWzM6MF0gICAgICBzc3JhbV9kbywKKy8vb3V0cHV0IGxvZ2ljIFszOjBdICAgICAgc3NyYW1fZGksCisKKy8vIHBpbm11eCBjbG9jayBza2V3IGNvbnRyb2wKK2Nsa19za2V3X2FkanVzdCB1X3NrZXdfcGlubXV4CisgICAgICAgKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgICAgICAgICAudmNjZDEgICAgICAodmNjZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgICAgICAgICAgICAgLnZzc2QxICAgICAgKHZzc2QxICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorCSAgICAgICAuY2xrX2luICAgICAod2JkX2Nsa19pbnQgICAgICAgICAgICAgICAgICksIAorCSAgICAgICAuc2VsICAgICAgICAoY2ZnX2Nza2FfcGlubXV4ICAgICAgICAgICAgICksIAorCSAgICAgICAuY2xrX291dCAgICAod2JkX2Nsa19waW5tdXggICAgICAgICAgICAgICkgCisgICAgICAgKTsKKworZ3Bpb19pbnRyIHVfZ3Bpb19pbnRyICgKKyAgIC8vIFN5c3RlbSBTaWduYWxzCisgICAvLyBJbnB1dHMKKyAgICAgICAgICAubWNsayAgICAgICAgICAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmhfcmVzZXRfbiAgICAgICAgICAgICAgIChoX3Jlc2V0X24gICAgICAgICAgICAgICApLAorCisgICAvLyBHUElPIGNmZyBpbnB1dCBwaW5zCisgICAgICAgICAgLmdwaW9fcHJldl9pbmRhdGEgICAgICAgIChncGlvX3ByZXZfaW5kYXRhICAgICAgICApLAorICAgICAgICAgIC5jZmdfZ3Bpb19kYXRhX2luICAgICAgICAoY2ZnX2dwaW9fZGF0YV9pbiAgICAgICAgKSwKKyAgICAgICAgICAuY2ZnX2dwaW9fZGlyX3NlbCAgICAgICAgKGNmZ19ncGlvX2Rpcl9zZWwgICAgICAgICksCisgICAgICAgICAgLmNmZ19ncGlvX291dF9kYXRhICAgICAgIChjZmdfZ3Bpb19vdXRfZGF0YSAgICAgICApLAorICAgICAgICAgIC5jZmdfZ3Bpb19wb3NlZGdlX2ludF9zZWwoY2ZnX2dwaW9fcG9zZWRnZV9pbnRfc2VsKSwKKyAgICAgICAgICAuY2ZnX2dwaW9fbmVnZWRnZV9pbnRfc2VsKGNmZ19ncGlvX25lZ2VkZ2VfaW50X3NlbCksCisKKworICAgLy8gR1BJTyBvdXRwdXQgcGlucworICAgICAgICAgIC5wYWRfZ3Bpb19vdXQgICAgICAgICAgICAocGFkX2dwaW9fb3V0ICAgICAgICAgICAgKSwKKyAgICAgICAgICAuZ3Bpb19pbnRfZXZlbnQgICAgICAgICAgKGdwaW9faW50X2V2ZW50ICAgICAgICAgICkgIAorICApOworCisKKy8vIDF1cyBwdWxzZQorcHVsc2VfZ2VuX3R5cGUyICAjKC5XRCgxMCkpIHVfcHVsc2VfMXVzICgKKworCS5jbGtfcHVsc2UgICAgICAgICAgICAgICAgIChwdWxzZTF1X21jbGspLAorCS5jbGsgICAgICAgICAgICAgICAgICAgICAgIChtY2xrICAgICAgICApLAorICAgICAgICAucmVzZXRfbiAgICAgICAgICAgICAgICAgICAoaF9yZXNldF9uICAgKSwKKwkuY2ZnX21heF9jbnQgICAgICAgICAgICAgICAoY2ZnX3B1bHNlXzF1cykKKworICAgICApOworCisvLyAxbWlsbGlzZWNvbmQgcHVsc2UKK3B1bHNlX2dlbl90eXBlMSB1X3B1bHNlXzFtcyAoCisKKwkuY2xrX3B1bHNlICAgKHB1bHNlMW1fbWNsayksCisJLmNsayAgICAgICAgIChtY2xrICAgICAgICApLAorICAgICAgICAucmVzZXRfbiAgICAgKGhfcmVzZXRfbiAgICksCisJLnRyaWdnZXIgICAgIChwdWxzZTF1X21jbGspCisKKyAgICAgICk7CisKKy8vIDEgc2Vjb25kIHB1bHNlCitwdWxzZV9nZW5fdHlwZTIgdV9wdWxzZV8xcyAoCisKKwkuY2xrX3B1bHNlICAgKHB1bHNlMXNfbWNsayksCisJLmNsayAgICAgICAgIChtY2xrICAgICAgICApLAorICAgICAgICAucmVzZXRfbiAgICAgKGhfcmVzZXRfbiAgICksCisJLmNmZ19tYXhfY250IChjZmdfcHVsc2VfMXVzKQorCisgICAgICAgKTsKKworcGlubXV4X3JlZyB1X3Bpbm11eF9yZWcoCisgICAgICAvLyBTeXN0ZW0gU2lnbmFscworICAgICAgLy8gSW5wdXRzCisgICAgICAgICAgLm1jbGsgICAgICAgICAgICAgICAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmhfcmVzZXRfbiAgICAgICAgICAgICAgICAgICAgKGhfcmVzZXRfbiAgICAgICAgICAgICAgICksCisKKworICAgICAgLy8gUmVnIHJlYWQvd3JpdGUgSW50ZXJmYWNlIElucHV0cworICAgICAgICAgIC5yZWdfY3MgICAgICAgICAgICAgICAgICAgICAgIChyZWdfY3MgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5yZWdfd3IgICAgICAgICAgICAgICAgICAgICAgIChyZWdfd3IgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5yZWdfYWRkciAgICAgICAgICAgICAgICAgICAgIChyZWdfYWRkciAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5yZWdfd2RhdGEgICAgICAgICAgICAgICAgICAgIChyZWdfd2RhdGEgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5yZWdfYmUgICAgICAgICAgICAgICAgICAgICAgIChyZWdfYmUgICAgICAgICAgICAgICAgICApLAorCisgICAgICAgICAgLnJlZ19yZGF0YSAgICAgICAgICAgICAgICAgICAgKHJlZ19yZGF0YSAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnJlZ19hY2sgICAgICAgICAgICAgICAgICAgICAgKHJlZ19hY2sgICAgICAgICAgICAgICAgICksCisKKwkgIC5leHRfaW50cl9pbiAgICAgICAgICAgICAgICAgIChleHRfaW50cl9pbiAgICAgICAgICAgICApLAorCisJICAuZnVzZV9taGFydGlkICAgICAgICAgICAgICAgICAoZnVzZV9taGFydGlkICAgICAgICAgICAgKSwKKwkgIC5pcnFfbGluZXMgICAgICAgICAgICAgICAgICAgIChpcnFfbGluZXMgICAgICAgICAgICAgICApLAorCSAgLnNvZnRfaXJxICAgICAgICAgICAgICAgICAgICAgKHNvZnRfaXJxICAgICAgICAgICAgICAgICksCisJICAudXNlcl9pcnEgICAgICAgICAgICAgICAgICAgICAodXNlcl9pcnEgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAudXNiX2ludHIgICAgICAgICAgICAgICAgICAgICAodXNiX2ludHIgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuaTJjbV9pbnRyICAgICAgICAgICAgICAgICAgICAoaTJjbV9pbnRyICAgICAgICAgICAgICAgKSwKKworCSAgLmNmZ19wdWxzZV8xdXMgICAgICAgICAgICAgICAgKGNmZ19wdWxzZV8xdXMgICAgICAgICAgICksCisKKworICAgICAgICAgIC5jZmdfcHdtMF9oaWdoICAgICAgICAgICAgICAgIChjZmdfcHdtMF9oaWdoICAgICAgICAgICApLAorICAgICAgICAgIC5jZmdfcHdtMF9sb3cgICAgICAgICAgICAgICAgIChjZmdfcHdtMF9sb3cgICAgICAgICAgICApLAorICAgICAgICAgIC5jZmdfcHdtMV9oaWdoICAgICAgICAgICAgICAgIChjZmdfcHdtMV9oaWdoICAgICAgICAgICApLAorICAgICAgICAgIC5jZmdfcHdtMV9sb3cgICAgICAgICAgICAgICAgIChjZmdfcHdtMV9sb3cgICAgICAgICAgICApLAorICAgICAgICAgIC5jZmdfcHdtMl9oaWdoICAgICAgICAgICAgICAgIChjZmdfcHdtMl9oaWdoICAgICAgICAgICApLAorICAgICAgICAgIC5jZmdfcHdtMl9sb3cgICAgICAgICAgICAgICAgIChjZmdfcHdtMl9sb3cgICAgICAgICAgICApLAorICAgICAgICAgIC5jZmdfcHdtM19oaWdoICAgICAgICAgICAgICAgIChjZmdfcHdtM19oaWdoICAgICAgICAgICApLAorICAgICAgICAgIC5jZmdfcHdtM19sb3cgICAgICAgICAgICAgICAgIChjZmdfcHdtM19sb3cgICAgICAgICAgICApLAorICAgICAgICAgIC5jZmdfcHdtNF9oaWdoICAgICAgICAgICAgICAgIChjZmdfcHdtNF9oaWdoICAgICAgICAgICApLAorICAgICAgICAgIC5jZmdfcHdtNF9sb3cgICAgICAgICAgICAgICAgIChjZmdfcHdtNF9sb3cgICAgICAgICAgICApLAorICAgICAgICAgIC5jZmdfcHdtNV9oaWdoICAgICAgICAgICAgICAgIChjZmdfcHdtNV9oaWdoICAgICAgICAgICApLAorICAgICAgICAgIC5jZmdfcHdtNV9sb3cgICAgICAgICAgICAgICAgIChjZmdfcHdtNV9sb3cgICAgICAgICAgICApLAorCisgICAgICAvLyBHUElPIGlucHV0IHBpbnMKKyAgICAgICAgICAuZ3Bpb19pbl9kYXRhICAgICAgICAgICAgICAgICAocGFkX2dwaW9faW4gICAgICAgICAgICAgKSwKKyAgICAgICAgICAuZ3Bpb19pbnRfZXZlbnQgICAgICAgICAgICAgICAoZ3Bpb19pbnRfZXZlbnQgICAgICAgICAgKSwKKworICAgICAgLy8gR1BJTyBjb25maWcgcGlucworICAgICAgICAgIC5jZmdfZ3Bpb19vdXRfZGF0YSAgICAgICAgICAgIChjZmdfZ3Bpb19vdXRfZGF0YSAgICAgICApLAorICAgICAgICAgIC5jZmdfZ3Bpb19kaXJfc2VsICAgICAgICAgICAgIChjZmdfZ3Bpb19kaXJfc2VsICAgICAgICApLAorICAgICAgICAgIC5jZmdfZ3Bpb19vdXRfdHlwZSAgICAgICAgICAgIChjZmdfZ3Bpb19vdXRfdHlwZSAgICAgICApLAorICAgICAgICAgIC5jZmdfZ3Bpb19wb3NlZGdlX2ludF9zZWwgICAgIChjZmdfZ3Bpb19wb3NlZGdlX2ludF9zZWwpLAorICAgICAgICAgIC5jZmdfZ3Bpb19uZWdlZGdlX2ludF9zZWwgICAgIChjZmdfZ3Bpb19uZWdlZGdlX2ludF9zZWwpLAorICAgICAgICAgIC5jZmdfbXVsdGlfZnVuY19zZWwgICAgICAgICAgIChjZmdfbXVsdGlfZnVuY19zZWwgICAgICApLAorCSAgLmNmZ19ncGlvX2RhdGFfaW4gICAgICAgICAgICAgKGNmZ19ncGlvX2RhdGFfaW4gICAgICAgICksCisKKworICAgICAgIC8vIE91dHB1dHMKKyAgICAgICAgICAuZ3Bpb19wcmV2X2luZGF0YSAgICAgICAgICAgICAoZ3Bpb19wcmV2X2luZGF0YSAgICAgICAgKSAsCisKKyAgICAgICAvLyBCSVNUIEkvRgorICAgICAgICAgIC5iaXN0X2VuICAgICAgICAgICAgICAgICAgICAgIChiaXN0X2VuICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5iaXN0X3J1biAgICAgICAgICAgICAgICAgICAgIChiaXN0X3J1biAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5iaXN0X2xvYWQgICAgICAgICAgICAgICAgICAgIChiaXN0X2xvYWQgICAgICAgICAgICAgICApLAorICAgICAgICAgIAorICAgICAgICAgIC5iaXN0X3NkaSAgICAgICAgICAgICAgICAgICAgIChiaXN0X3NkaSAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5iaXN0X3NoaWZ0ICAgICAgICAgICAgICAgICAgIChiaXN0X3NoaWZ0ICAgICAgICAgICAgICApLAorICAgICAgICAgIC5iaXN0X3NkbyAgICAgICAgICAgICAgICAgICAgIChiaXN0X3NkbyAgICAgICAgICAgICAgICApLAorICAgICAgICAgIAorICAgICAgICAgIC5iaXN0X2RvbmUgICAgICAgICAgICAgICAgICAgIChiaXN0X2RvbmUgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5iaXN0X2Vycm9yICAgICAgICAgICAgICAgICAgIChiaXN0X2Vycm9yICAgICAgICAgICAgICApLAorICAgICAgICAgIC5iaXN0X2NvcnJlY3QgICAgICAgICAgICAgICAgIChiaXN0X2NvcnJlY3QgICAgICAgICAgICApLAorICAgICAgICAgIC5iaXN0X2Vycm9yX2NudDAgICAgICAgICAgICAgIChiaXN0X2Vycm9yX2NudDAgICAgICAgICApLAorICAgICAgICAgIC5iaXN0X2Vycm9yX2NudDEgICAgICAgICAgICAgIChiaXN0X2Vycm9yX2NudDEgICAgICAgICApLAorICAgICAgICAgIC5iaXN0X2Vycm9yX2NudDIgICAgICAgICAgICAgIChiaXN0X2Vycm9yX2NudDIgICAgICAgICApLAorICAgICAgICAgIC5iaXN0X2Vycm9yX2NudDMgICAgICAgICAgICAgIChiaXN0X2Vycm9yX2NudDMgICAgICAgICApCisKKyAgICk7IAorCisKKy8vIDYgUFdNIFdhdmVmb3JtIEdlbmVyYXRvcgorcHdtICB1X3B3bV8wICgKKwkgIC53YXZlZm9ybSAgICAgICAgICAgICAgICAgICAgKHB3bV93Zm1bMF0gICAgICAgICApLCAKKwkgIC5oX3Jlc2V0X24gICAgICAgICAgICAgICAgICAgKGhfcmVzZXRfbiAgICAgICAgICApLAorCSAgLm1jbGsgICAgICAgICAgICAgICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgICksCisJICAucHVsc2UxbV9tY2xrICAgICAgICAgICAgICAgIChwdWxzZTFtX21jbGsgICAgICAgKSwKKwkgIC5jZmdfcHdtX2VuYiAgICAgICAgICAgICAgICAgKGNmZ19wd21fZW5iWzBdICAgICApLAorCSAgLmNmZ19wd21faGlnaCAgICAgICAgICAgICAgICAoY2ZnX3B3bTBfaGlnaCAgICAgICksCisJICAuY2ZnX3B3bV9sb3cgICAgICAgICAgICAgICAgIChjZmdfcHdtMF9sb3cgICAgICAgKQorICAgICApOworCitwd20gIHVfcHdtXzEgKAorCSAgLndhdmVmb3JtICAgICAgICAgICAgICAgICAgICAocHdtX3dmbVsxXSAgICAgICAgICksIAorCSAgLmhfcmVzZXRfbiAgICAgICAgICAgICAgICAgICAoaF9yZXNldF9uICAgICAgICAgICksCisJICAubWNsayAgICAgICAgICAgICAgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICAgKSwKKwkgIC5wdWxzZTFtX21jbGsgICAgICAgICAgICAgICAgKHB1bHNlMW1fbWNsayAgICAgICApLAorCSAgLmNmZ19wd21fZW5iICAgICAgICAgICAgICAgICAoY2ZnX3B3bV9lbmJbMV0gICAgICksCisJICAuY2ZnX3B3bV9oaWdoICAgICAgICAgICAgICAgIChjZmdfcHdtMV9oaWdoICAgICAgKSwKKwkgIC5jZmdfcHdtX2xvdyAgICAgICAgICAgICAgICAgKGNmZ19wd20xX2xvdyAgICAgICApCisgICAgICk7CisgICAKK3B3bSAgdV9wd21fMiAoCisJICAud2F2ZWZvcm0gICAgICAgICAgICAgICAgICAgIChwd21fd2ZtWzJdICAgICAgICAgKSwgCisJICAuaF9yZXNldF9uICAgICAgICAgICAgICAgICAgIChoX3Jlc2V0X24gICAgICAgICAgKSwKKwkgIC5tY2xrICAgICAgICAgICAgICAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICApLAorCSAgLnB1bHNlMW1fbWNsayAgICAgICAgICAgICAgICAocHVsc2UxbV9tY2xrICAgICAgICksCisJICAuY2ZnX3B3bV9lbmIgICAgICAgICAgICAgICAgIChjZmdfcHdtX2VuYlsyXSAgICAgKSwKKwkgIC5jZmdfcHdtX2hpZ2ggICAgICAgICAgICAgICAgKGNmZ19wd20yX2hpZ2ggICAgICApLAorCSAgLmNmZ19wd21fbG93ICAgICAgICAgICAgICAgICAoY2ZnX3B3bTJfbG93ICAgICAgICkKKyAgICAgKTsKKworcHdtICB1X3B3bV8zICgKKwkgIC53YXZlZm9ybSAgICAgICAgICAgICAgICAgICAgKHB3bV93Zm1bM10gICAgICAgICApLCAKKwkgIC5oX3Jlc2V0X24gICAgICAgICAgICAgICAgICAgKGhfcmVzZXRfbiAgICAgICAgICApLAorCSAgLm1jbGsgICAgICAgICAgICAgICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgICksCisJICAucHVsc2UxbV9tY2xrICAgICAgICAgICAgICAgIChwdWxzZTFtX21jbGsgICAgICAgKSwKKwkgIC5jZmdfcHdtX2VuYiAgICAgICAgICAgICAgICAgKGNmZ19wd21fZW5iWzNdICAgICApLAorCSAgLmNmZ19wd21faGlnaCAgICAgICAgICAgICAgICAoY2ZnX3B3bTNfaGlnaCAgICAgICksCisJICAuY2ZnX3B3bV9sb3cgICAgICAgICAgICAgICAgIChjZmdfcHdtM19sb3cgICAgICAgKQorICAgICApOworcHdtICB1X3B3bV80ICgKKwkgIC53YXZlZm9ybSAgICAgICAgICAgICAgICAgICAgKHB3bV93Zm1bNF0gICAgICAgICApLCAKKwkgIC5oX3Jlc2V0X24gICAgICAgICAgICAgICAgICAgKGhfcmVzZXRfbiAgICAgICAgICApLAorCSAgLm1jbGsgICAgICAgICAgICAgICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgICksCisJICAucHVsc2UxbV9tY2xrICAgICAgICAgICAgICAgIChwdWxzZTFtX21jbGsgICAgICAgKSwKKwkgIC5jZmdfcHdtX2VuYiAgICAgICAgICAgICAgICAgKGNmZ19wd21fZW5iWzRdICAgICApLAorCSAgLmNmZ19wd21faGlnaCAgICAgICAgICAgICAgICAoY2ZnX3B3bTRfaGlnaCAgICAgICksCisJICAuY2ZnX3B3bV9sb3cgICAgICAgICAgICAgICAgIChjZmdfcHdtNF9sb3cgICAgICAgKQorICAgICApOworcHdtICB1X3B3bV81ICgKKwkgIC53YXZlZm9ybSAgICAgICAgICAgICAgICAgICAgKHB3bV93Zm1bNV0gICAgICAgICApLCAKKwkgIC5oX3Jlc2V0X24gICAgICAgICAgICAgICAgICAgKGhfcmVzZXRfbiAgICAgICAgICApLAorCSAgLm1jbGsgICAgICAgICAgICAgICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgICksCisJICAucHVsc2UxbV9tY2xrICAgICAgICAgICAgICAgIChwdWxzZTFtX21jbGsgICAgICAgKSwKKwkgIC5jZmdfcHdtX2VuYiAgICAgICAgICAgICAgICAgKGNmZ19wd21fZW5iWzVdICAgICApLAorCSAgLmNmZ19wd21faGlnaCAgICAgICAgICAgICAgICAoY2ZnX3B3bTVfaGlnaCAgICAgICksCisJICAuY2ZnX3B3bV9sb3cgICAgICAgICAgICAgICAgIChjZmdfcHdtNV9sb3cgICAgICAgKQorICAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFBpbiBNYXBwaW5nICAgIEFUTUdFIENPTkZJRworKiAgIEFUTUVHQTMyOCAgICAgICAgICAgICAgICAgICAgICAgIGNhcmF2ZWwgUGluIE1hcHBpbmcKKyogICBQaW4tMSAgICAgICAgUEM2L1JFU0VUKiAgICAgICAgICBkaWdpdGFsX2lvWzBdCisqICAgUGluLTIgICAgICAgIFBEMC9SWEQgICAgICAgICAgICAgZGlnaXRhbF9pb1sxXQorKiAgIFBpbi0zICAgICAgICBQRDEvVFhEICAgICAgICAgICAgIGRpZ2l0YWxfaW9bMl0KKyogICBQaW4tNCAgICAgICAgUEQyL0lOVDAgICAgICAgICAgICBkaWdpdGFsX2lvWzNdCisqICAgUGluLTUgICAgICAgIFBEMy9JTlQxL09DMkIoUFdNMCkgZGlnaXRhbF9pb1s0XQorKiAgIFBpbi02ICAgICAgICBQRDQgICAgICAgICAgICAgICAgIGRpZ2l0YWxfaW9bNV0KKyogICBQaW4tNyAgICAgICAgVkNDICAgICAgICAgICAgICAgICAgLQorKiAgIFBpbi04ICAgICAgICBHTkQgICAgICAgICAgICAgICAgICAtCisqICAgUGluLTkgICAgICAgIFBCNi9YVEFMMS9UT1NDMSAgICAgZGlnaXRhbF9pb1s2XQorKiAgIFBpbi0xMCAgICAgICBQQjcvWFRBTDIvVE9TQzIgICAgIGRpZ2l0YWxfaW9bN10KKyogICBQaW4tMTEgICAgICAgUEQ1L09DMEIoUFdNMSkvVDEgICBkaWdpdGFsX2lvWzhdCisqICAgUGluLTEyICAgICAgIFBENi9PQzBBKFBXTTIpL0FJTjAgZGlnaXRhbF9pb1s5XSAvYW5hbG9nX2lvWzJdCisqICAgUGluLTEzICAgICAgIFBENy9BMU4xICAgICAgICAgICAgZGlnaXRhbF9pb1sxMF0vYW5hbG9nX2lvWzNdCisqICAgUGluLTE0ICAgICAgIFBCMC9DTEtPL0lDUDEgICAgICAgZGlnaXRhbF9pb1sxMV0KKyogICBQaW4tMTUgICAgICAgUEIxL09DMUEoUFdNMykgICAgICBkaWdpdGFsX2lvWzEyXQorKiAgIFBpbi0xNiAgICAgICBQQjIvU1MvT0MxQihQV000KSAgIGRpZ2l0YWxfaW9bMTNdCisqICAgUGluLTE3ICAgICAgIFBCMy9NT1NJL09DMkEoUFdNNSkgZGlnaXRhbF9pb1sxNF0KKyogICBQaW4tMTggICAgICAgUEI0L01JU08gICAgICAgICAgICBkaWdpdGFsX2lvWzE1XQorKiAgIFBpbi0xOSAgICAgICBQQjUvU0NLICAgICAgICAgICAgIGRpZ2l0YWxfaW9bMTZdCisqICAgUGluLTIwICAgICAgIEFWQ0MgICAgICAgICAgICAgICAgLQorKiAgIFBpbi0yMSAgICAgICBBUkVGICAgICAgICAgICAgICAgIGFuYWxvZ19pb1sxMF0KKyogICBQaW4tMjIgICAgICAgR05EICAgICAgICAgICAgICAgICAtCisqICAgUGluLTIzICAgICAgIFBDMC9BREMwICAgICAgICAgICAgZGlnaXRhbF9pb1sxOF0vYW5hbG9nX2lvWzExXQorKiAgIFBpbi0yNCAgICAgICBQQzEvQURDMSAgICAgICAgICAgIGRpZ2l0YWxfaW9bMTldL2FuYWxvZ19pb1sxMl0KKyogICBQaW4tMjUgICAgICAgUEMyL0FEQzIgICAgICAgICAgICBkaWdpdGFsX2lvWzIwXS9hbmFsb2dfaW9bMTNdCisqICAgUGluLTI2ICAgICAgIFBDMy9BREMzICAgICAgICAgICAgZGlnaXRhbF9pb1syMV0vYW5hbG9nX2lvWzE0XQorKiAgIFBpbi0yNyAgICAgICBQQzQvQURDNC9TREEgICAgICAgIGRpZ2l0YWxfaW9bMjJdL2FuYWxvZ19pb1sxNV0KKyogICBQaW4tMjggICAgICAgUEM1L0FEQzUvU0NMICAgICAgICBkaWdpdGFsX2lvWzIzXS9hbmFsb2dfaW9bMTZdCisqCisqICBBZGRpdGlvbmFsIFBhZCB1c2VkIGZvciBFeHRlcm5hbSBST00vUkFNCisqICAgICAgICAgICAgICAgIHNmbGFzaF9zY2sgICAgICAgICAgZGlnaXRhbF9pb1syNF0KKyogICAgICAgICAgICAgICAgc2ZsYXNoX3NzWzNdICAgICAgICBkaWdpdGFsX2lvWzI1XQorKiAgICAgICAgICAgICAgICBzZmxhc2hfc3NbMl0gICAgICAgIGRpZ2l0YWxfaW9bMjZdCisqICAgICAgICAgICAgICAgIHNmbGFzaF9zc1sxXSAgICAgICAgZGlnaXRhbF9pb1syN10KKyogICAgICAgICAgICAgICAgc2ZsYXNoX3NzWzBdICAgICAgICBkaWdpdGFsX2lvWzI4XQorKiAgICAgICAgICAgICAgICBzZmxhc2hfaW8wICAgICAgICAgIGRpZ2l0YWxfaW9bMjldCisqICAgICAgICAgICAgICAgIHNmbGFzaF9pbzEgICAgICAgICAgZGlnaXRhbF9pb1szMF0KKyogICAgICAgICAgICAgICAgc2ZsYXNoX2lvMiAgICAgICAgICBkaWdpdGFsX2lvWzMxXQorKiAgICAgICAgICAgICAgICBzZmxhc2hfaW8zICAgICAgICAgIGRpZ2l0YWxfaW9bMzJdCisqICAgICAgICAgICAgICAgIHJlc2VydmVkICAgICAgICAgICAgZGlnaXRhbF9pb1szM10KKyogICAgICAgICAgICAgICAgdWFydG1fcnhkICAgICAgICAgICBkaWdpdGFsX2lvWzM0XQorKiAgICAgICAgICAgICAgICB1YXJ0bV90eGQgICAgICAgICAgIGRpZ2l0YWxfaW9bMzVdCisqICAgICAgICAgICAgICAgIHVzYl9kcCAgICAgICAgICAgICAgZGlnaXRhbF9pb1szNl0KKyogICAgICAgICAgICAgICAgdXNiX2RuICAgICAgICAgICAgICBkaWdpdGFsX2lvWzM3XQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBQaW4tMSBSRVNFVCBpcyBub3Qgc3VwcG9ydGVkIGFzIHRoZXJlIGlzIG5vIHN1cHBwb3J0IGZvciBmdXNlIGNvbmZpZworKioqKioqKioqKioqKiovCisKK2Fzc2lnbiAgICAgIGNmZ19wd21fZW5iICAgICAgICAgID0gY2ZnX211bHRpX2Z1bmNfc2VsWzU6MF07Cit3aXJlIFsxOjBdICBjZmdfaW50X2VuYiAgICAgICAgICA9IGNmZ19tdWx0aV9mdW5jX3NlbFs3OjZdOword2lyZSAgICAgICAgY2ZnX3VhcnRfZW5iICAgICAgICAgPSBjZmdfbXVsdGlfZnVuY19zZWxbOF07Cit3aXJlICAgICAgICBjZmdfaTJjbV9lbmIgICAgICAgICA9IGNmZ19tdWx0aV9mdW5jX3NlbFs5XTsKK3dpcmUgICAgICAgIGNmZ19zcGltX2VuYiAgICAgICAgID0gY2ZnX211bHRpX2Z1bmNfc2VsWzEwXTsKKword2lyZSBbNzowXSAgY2ZnX3BvcnRfYV9kaXJfc2VsICAgPSBjZmdfZ3Bpb19kaXJfc2VsWzc6MF07Cit3aXJlIFs3OjBdICBjZmdfcG9ydF9iX2Rpcl9zZWwgICA9IGNmZ19ncGlvX2Rpcl9zZWxbMTU6OF07Cit3aXJlIFs3OjBdICBjZmdfcG9ydF9jX2Rpcl9zZWwgICA9IGNmZ19ncGlvX2Rpcl9zZWxbMjM6MTZdOword2lyZSBbNzowXSAgY2ZnX3BvcnRfZF9kaXJfc2VsICAgPSBjZmdfZ3Bpb19kaXJfc2VsWzMxOjI0XTsKKworCisvLyBkYXRhaW4gc2VsZWN0aW9uCithbHdheXNfY29tYiBiZWdpbgorICAgICBwb3J0X2FfaW4gPSAnaDA7CisgICAgIHBvcnRfYl9pbiA9ICdoMDsKKyAgICAgcG9ydF9jX2luID0gJ2gwOworICAgICBwb3J0X2RfaW4gPSAnaDA7CisgICAgIHVhcnRfcnhkICAgPSAnaDA7CisgICAgIGV4dF9pbnRyX2luPSAnaDA7CisgICAgIHNwaW1fbW9zaSAgPSAnaDA7CisgICAgIGkyY21fZGF0YV9pPSAnaDA7CisgICAgIGkyY21fY2xrX2kgPSAnaDA7CisKKyAgICAgLy9QaW4tMSAgICAgICAgUEM2L1JFU0VUKiAgICAgICAgICBkaWdpdGFsX2lvWzBdCisgICAgIHBvcnRfY19pbls2XSA9IGRpZ2l0YWxfaW9faW5bMF07CisKKyAgICAgLy9QaW4tMiAgICAgICAgUEQwL1JYRCAgICAgICAgICAgICBkaWdpdGFsX2lvWzFdCisgICAgIHBvcnRfZF9pblswXSA9IGRpZ2l0YWxfaW9faW5bMV07CisgICAgIGlmKGNmZ191YXJ0X2VuYikgIHVhcnRfcnhkICAgICAgPSBkaWdpdGFsX2lvX2luWzFdOworICAKKyAgICAgLy9QaW4tMyAgICAgICAgUEQxL1RYRCAgICAgICAgICAgICBkaWdpdGFsX2lvWzJdCisgICAgIHBvcnRfZF9pblsxXSA9IGRpZ2l0YWxfaW9faW5bMl07CisKKworICAgICAvL1Bpbi00ICAgICAgICBQRDIvSU5UMCAgICAgICAgICAgIGRpZ2l0YWxfaW9bM10KKyAgICAgcG9ydF9kX2luWzJdID0gZGlnaXRhbF9pb19pblszXTsKKyAgICAgaWYoY2ZnX2ludF9lbmJbMF0pIGV4dF9pbnRyX2luWzBdID0gZGlnaXRhbF9pb19pblszXTsKKworICAgICAvL1Bpbi01ICAgICAgICBQRDMvSU5UMS9PQzJCKFBXTTApICBkaWdpdGFsX2lvWzRdCisgICAgIHBvcnRfZF9pblszXSA9IGRpZ2l0YWxfaW9faW5bNF07CisgICAgIGlmKGNmZ19pbnRfZW5iWzFdKSBleHRfaW50cl9pblsxXSA9IGRpZ2l0YWxfaW9faW5bNF07CisKKyAgICAgLy9QaW4tNiAgICAgICAgUEQ0ICAgICAgICAgICAgICAgICBkaWdpdGFsX2lvWzVdCisgICAgIHBvcnRfZF9pbls0XSA9IGRpZ2l0YWxfaW9faW5bNV07CisKKyAgICAgLy9QaW4tOSAgICAgICAgUEI2L1hUQUwxL1RPU0MxICAgICBkaWdpdGFsX2lvWzZdCisgICAgIHBvcnRfYl9pbls2XSA9IGRpZ2l0YWxfaW9faW5bNl07CisKKyAgICAgLy8gUGluLTEwICAgICAgIFBCNy9YVEFMMi9UT1NDMiAgICAgZGlnaXRhbF9pb1s3XQorICAgICBwb3J0X2JfaW5bN10gPSBkaWdpdGFsX2lvX2luWzddOworCisgICAgIC8vUGluLTExICAgICAgIFBENS9PQzBCKFBXTTEpL1QxICAgZGlnaXRhbF9pb1s4XQorICAgICBwb3J0X2RfaW5bNV0gPSBkaWdpdGFsX2lvX2luWzhdOworCisgICAgIC8vUGluLTEyICAgICAgIFBENi9PQzBBKFBXTTIpL0FJTjAgZGlnaXRhbF9pb1s5XSAvYW5hbG9nX2lvWzJdCisgICAgIHBvcnRfZF9pbls2XSA9IGRpZ2l0YWxfaW9faW5bOV07CisKKyAgICAgLy9QaW4tMTMgICAgICAgUEQ3L0ExTjEgICAgICAgICAgICBkaWdpdGFsX2lvWzEwXS9hbmFsb2dfaW9bM10KKyAgICAgcG9ydF9kX2luWzddID0gZGlnaXRhbF9pb19pblsxMF07CisgICAgIAorICAgICAvL1Bpbi0xNCAgICAgICBQQjAvQ0xLTy9JQ1AxICAgICAgIGRpZ2l0YWxfaW9bMTFdCisgICAgIHBvcnRfYl9pblswXSA9ICBkaWdpdGFsX2lvX2luWzExXTsKKworICAgICAvL1Bpbi0xNSAgICAgICBQQjEvT0MxQShQV00zKSAgICAgIGRpZ2l0YWxfaW9bMTJdCisgICAgIHBvcnRfYl9pblsxXSA9IGRpZ2l0YWxfaW9faW5bMTJdOworCisgICAgIC8vUGluLTE2ICAgICAgIFBCMi9TUy9PQzFCKFBXTTQpICAgZGlnaXRhbF9pb1sxM10KKyAgICAgcG9ydF9iX2luWzJdID0gZGlnaXRhbF9pb19pblsxM107CisKKyAgICAgLy9QaW4tMTcgICAgICAgUEIzL01PU0kvT0MyQShQV001KSBkaWdpdGFsX2lvWzE0XQorICAgICBwb3J0X2JfaW5bM10gPSBkaWdpdGFsX2lvX2luWzE0XTsKKyAgICAgaWYoY2ZnX3NwaW1fZW5iKSBzcGltX21vc2kgPSBkaWdpdGFsX2lvX2luWzE0XTsKKworICAgICAvL1Bpbi0xOCAgICAgICBQQjQvTUlTTyAgICAgICAgICAgIGRpZ2l0YWxfaW9bMTVdCisgICAgIHBvcnRfYl9pbls0XSA9IGRpZ2l0YWxfaW9faW5bMTVdOworCisgICAgIC8vUGluLTE5ICAgICAgIFBCNS9TQ0sgICAgICAgICAgICAgZGlnaXRhbF9pb1sxNl0KKyAgICAgcG9ydF9iX2luWzVdPSBkaWdpdGFsX2lvX2luWzE2XTsKKyAgICAgCisgICAgIC8vUGluLTIzICAgICAgIFBDMC9BREMwICAgICAgICAgICAgZGlnaXRhbF9pb1sxOF0vYW5hbG9nX2lvWzExXQorICAgICBwb3J0X2NfaW5bMF0gPSBkaWdpdGFsX2lvX2luWzE4XTsKKworICAgICAvL1Bpbi0yNCAgICAgICBQQzEvQURDMSAgICAgICAgICAgIGRpZ2l0YWxfaW9bMTldL2FuYWxvZ19pb1sxMl0KKyAgICAgcG9ydF9jX2luWzFdID0gZGlnaXRhbF9pb19pblsxOV07CisKKyAgICAgLy9QaW4tMjUgICAgICAgUEMyL0FEQzIgICAgICAgICAgICBkaWdpdGFsX2lvWzIwXS9hbmFsb2dfaW9bMTNdCisgICAgIHBvcnRfY19pblsyXSA9IGRpZ2l0YWxfaW9faW5bMjBdOworCisgICAgIC8vUGluLTI2ICAgICAgIFBDMy9BREMzICAgICAgICAgICAgZGlnaXRhbF9pb1syMV0vYW5hbG9nX2lvWzE0XQorICAgICBwb3J0X2NfaW5bM10gPSBkaWdpdGFsX2lvX2luWzIxXTsKKworICAgICAvL1Bpbi0yNyAgICAgICBQQzQvQURDNC9TREEgICAgICAgIGRpZ2l0YWxfaW9bMjJdL2FuYWxvZ19pb1sxNV0KKyAgICAgcG9ydF9jX2luWzRdID0gZGlnaXRhbF9pb19pblsyMl07CisgICAgIGlmKGNmZ19pMmNtX2VuYikgIGkyY21fZGF0YV9pID0gZGlnaXRhbF9pb19pblsyMl07CisKKyAgICAgLy9QaW4tMjggICAgICAgUEM1L0FEQzUvU0NMICAgICAgICBkaWdpdGFsX2lvWzIzXS9hbmFsb2dfaW9bMTZdCisgICAgIHBvcnRfY19pbls1XSA9IGRpZ2l0YWxfaW9faW5bMjNdOworICAgICBpZihjZmdfaTJjbV9lbmIpICBpMmNtX2Nsa19pID0gZGlnaXRhbF9pb19pblsyM107CisKKyAgICAgc2ZsYXNoX2RpWzBdID0gZGlnaXRhbF9pb19pblsyOV07CisgICAgIHNmbGFzaF9kaVsxXSA9IGRpZ2l0YWxfaW9faW5bMzBdOworICAgICBzZmxhc2hfZGlbMl0gPSBkaWdpdGFsX2lvX2luWzMxXTsKKyAgICAgc2ZsYXNoX2RpWzNdID0gZGlnaXRhbF9pb19pblszMl07CisKKyAgICAgLy8gVUFSIE1BU1RFUiBJL0YKKyAgICAgdWFydG1fcnhkICAgID0gZGlnaXRhbF9pb19pblszNF07CisKKyAgICAgdXNiX2RwX2kgICAgPSBkaWdpdGFsX2lvX2luWzM2XTsKKyAgICAgdXNiX2RuX2kgICAgPSBkaWdpdGFsX2lvX2luWzM3XTsKK2VuZAorCisvLyBkYXRhb3V0IHNlbGVjdGlvbgorYWx3YXlzX2NvbWIgYmVnaW4KKyAgICAgZGlnaXRhbF9pb19vdXQgPSAnaDA7CisgICAgIC8vUGluLTEgICAgICAgIFBDNi9SRVNFVCogICAgICAgICAgZGlnaXRhbF9pb1swXQorICAgICBpZihjZmdfcG9ydF9jX2Rpcl9zZWxbNl0pICAgICAgIGRpZ2l0YWxfaW9fb3V0WzBdICAgPSBwb3J0X2Nfb3V0WzZdOworCisgICAgIC8vUGluLTIgICAgICAgIFBEMC9SWEQgICAgICAgICAgICAgZGlnaXRhbF9pb1sxXQorICAgICBpZihjZmdfcG9ydF9kX2Rpcl9zZWxbMF0pICAgICAgIGRpZ2l0YWxfaW9fb3V0WzFdICAgPSBwb3J0X2Rfb3V0WzBdOworICAKKyAgICAgLy9QaW4tMyAgICAgICAgUEQxL1RYRCAgICAgICAgICAgICBkaWdpdGFsX2lvWzJdCisgICAgIGlmICAgICAoY2ZnX3VhcnRfZW5iKSAgICAgICAgICAgZGlnaXRhbF9pb19vdXRbMl0gICA9IHVhcnRfdHhkOworICAgICBlbHNlIGlmKGNmZ19wb3J0X2RfZGlyX3NlbFsxXSkgIGRpZ2l0YWxfaW9fb3V0WzJdICAgPSBwb3J0X2Rfb3V0WzFdOworCisKKyAgICAgLy9QaW4tNCAgICAgICAgUEQyL0lOVDAgICAgICAgICAgICBkaWdpdGFsX2lvWzNdCisgICAgIGlmKGNmZ19wb3J0X2RfZGlyX3NlbFsyXSkgICAgICAgZGlnaXRhbF9pb19vdXRbM10gICA9IHBvcnRfZF9vdXRbMl07CisKKyAgICAgLy9QaW4tNSAgICAgICAgUEQzL0lOVDEvT0MyQihQV00wKSAgZGlnaXRhbF9pb1s0XQorICAgICBpZihjZmdfcHdtX2VuYlswXSkgICAgICAgICAgICAgIGRpZ2l0YWxfaW9fb3V0WzRdICAgPSBwd21fd2ZtWzBdOworICAgICBpZihjZmdfcG9ydF9kX2Rpcl9zZWxbM10pICAgICAgIGRpZ2l0YWxfaW9fb3V0WzRdICAgPSBwb3J0X2Rfb3V0WzNdOworCisgICAgIC8vUGluLTYgICAgICAgIFBENCAgICAgICAgICAgICAgICAgZGlnaXRhbF9pb1s1XQorICAgICBpZihjZmdfcG9ydF9kX2Rpcl9zZWxbNF0pICAgICAgIGRpZ2l0YWxfaW9fb3V0WzVdICAgPSBwb3J0X2Rfb3V0WzRdOworCisgICAgIC8vUGluLTkgICAgICAgIFBCNi9YVEFMMS9UT1NDMSAgICAgZGlnaXRhbF9pb1s2XQorICAgICBpZihjZmdfcG9ydF9iX2Rpcl9zZWxbNl0pICAgICAgIGRpZ2l0YWxfaW9fb3V0WzZdICAgPSBwb3J0X2Jfb3V0WzZdOworCisKKyAgICAgLy8gUGluLTEwICAgICAgIFBCNy9YVEFMMi9UT1NDMiAgICAgZGlnaXRhbF9pb1s3XQorICAgICBpZihjZmdfcG9ydF9iX2Rpcl9zZWxbN10pICAgICAgIGRpZ2l0YWxfaW9fb3V0WzddICAgPSBwb3J0X2Jfb3V0WzddOworCisgICAgIC8vUGluLTExICAgICAgIFBENS9PQzBCKFBXTTEpL1QxICAgZGlnaXRhbF9pb1s4XQorICAgICBpZihjZmdfcHdtX2VuYlsxXSkgICAgICAgICAgICAgIGRpZ2l0YWxfaW9fb3V0WzhdICAgPSBwd21fd2ZtWzFdOworICAgICBlbHNlIGlmKGNmZ19wb3J0X2RfZGlyX3NlbFs1XSkgIGRpZ2l0YWxfaW9fb3V0WzhdICAgPSBwb3J0X2Rfb3V0WzVdOworCisgICAgIC8vUGluLTEyICAgICAgIFBENi9PQzBBKFBXTTIpL0FJTjAgZGlnaXRhbF9pb1s5XSAvYW5hbG9nX2lvWzJdCisgICAgIGlmKGNmZ19wd21fZW5iWzJdKSAgICAgICAgICAgICAgZGlnaXRhbF9pb19vdXRbOV0gICA9IHB3bV93Zm1bMl07CisgICAgIGVsc2UgaWYoY2ZnX3BvcnRfZF9kaXJfc2VsWzZdKSAgZGlnaXRhbF9pb19vdXRbOV0gICA9IHBvcnRfZF9vdXRbNl07CisKKworICAgICAvL1Bpbi0xMyAgICAgICBQRDcvQTFOMSAgICAgICAgICAgIGRpZ2l0YWxfaW9bMTBdL2FuYWxvZ19pb1szXQorICAgICBpZihjZmdfcG9ydF9kX2Rpcl9zZWxbN10pICAgICAgIGRpZ2l0YWxfaW9fb3V0WzEwXSAgPSBwb3J0X2Rfb3V0WzddOworICAgICAKKyAgICAgLy9QaW4tMTQgICAgICAgUEIwL0NMS08vSUNQMSAgICAgICBkaWdpdGFsX2lvWzExXQorICAgICBpZihjZmdfcG9ydF9iX2Rpcl9zZWxbMF0pICAgICAgIGRpZ2l0YWxfaW9fb3V0WzExXSAgPSBwb3J0X2Jfb3V0WzBdOworCisgICAgIC8vUGluLTE1ICAgICAgIFBCMS9PQzFBKFBXTTMpICAgICAgZGlnaXRhbF9pb1sxMl0KKyAgICAgaWYoY2ZnX3B3bV9lbmJbM10pICAgICAgICAgICAgICBkaWdpdGFsX2lvX291dFsxMl0gID0gcHdtX3dmbVszXTsKKyAgICAgZWxzZSBpZihjZmdfcG9ydF9iX2Rpcl9zZWxbMV0pICBkaWdpdGFsX2lvX291dFsxMl0gID0gcG9ydF9iX291dFsxXTsKKworICAgICAvL1Bpbi0xNiAgICAgICBQQjIvU1MvT0MxQihQV000KSAgIGRpZ2l0YWxfaW9bMTNdCisgICAgIGlmKGNmZ19wd21fZW5iWzRdKSAgICAgICAgICAgICAgZGlnaXRhbF9pb19vdXRbMTNdICA9IHB3bV93Zm1bNF07CisgICAgIGVsc2UgaWYoY2ZnX3NwaW1fZW5iKSAgICAgICAgICAgZGlnaXRhbF9pb19vdXRbMTNdICA9IHNwaW1fc3M7CisgICAgIGVsc2UgaWYoY2ZnX3BvcnRfYl9kaXJfc2VsWzJdKSAgZGlnaXRhbF9pb19vdXRbMTNdICA9IHBvcnRfYl9vdXRbMl07CisKKyAgICAgLy9QaW4tMTcgICAgICAgUEIzL01PU0kvT0MyQShQV001KSBkaWdpdGFsX2lvWzE0XQorICAgICBpZihjZmdfcHdtX2VuYls1XSkgICAgICAgICAgICAgIGRpZ2l0YWxfaW9fb3V0WzE0XSAgPSBwd21fd2ZtWzVdOworICAgICBlbHNlIGlmKGNmZ19wb3J0X2JfZGlyX3NlbFszXSkgIGRpZ2l0YWxfaW9fb3V0WzE0XSAgPSBwb3J0X2Jfb3V0WzNdOworCisgICAgIC8vUGluLTE4ICAgICAgIFBCNC9NSVNPICAgICAgICAgICAgZGlnaXRhbF9pb1sxNV0KKyAgICAgaWYoY2ZnX3NwaW1fZW5iKSAgICAgICAgICAgICAgICBkaWdpdGFsX2lvX291dFsxNV0gID0gc3BpbV9taXNvOworICAgICBlbHNlIGlmKGNmZ19wb3J0X2JfZGlyX3NlbFs0XSkgIGRpZ2l0YWxfaW9fb3V0WzE1XSAgPSBwb3J0X2Jfb3V0WzRdOworCisgICAgIC8vUGluLTE5ICAgICAgIFBCNS9TQ0sgICAgICAgICAgICAgZGlnaXRhbF9pb1sxNl0KKyAgICAgaWYoY2ZnX3NwaW1fZW5iKSAgICAgICAgICAgICAgICBkaWdpdGFsX2lvX291dFsxNl0gID0gc3BpbV9zY2s7CisgICAgIGVsc2UgaWYoY2ZnX3BvcnRfYl9kaXJfc2VsWzVdKSAgZGlnaXRhbF9pb19vdXRbMTZdICA9IHBvcnRfYl9vdXRbNV07CisgICAgIAorICAgICAvL1Bpbi0yMyAgICAgICBQQzAvQURDMCAgICAgICAgICAgIGRpZ2l0YWxfaW9bMThdL2FuYWxvZ19pb1sxMV0KKyAgICAgaWYoY2ZnX3BvcnRfY19kaXJfc2VsWzBdKSAgICAgICBkaWdpdGFsX2lvX291dFsxOF0gID0gcG9ydF9jX291dFswXTsKKworICAgICAvL1Bpbi0yNCAgICAgICBQQzEvQURDMSAgICAgICAgICAgIGRpZ2l0YWxfaW9bMTldL2FuYWxvZ19pb1sxMl0KKyAgICAgaWYoY2ZnX3BvcnRfY19kaXJfc2VsWzFdKSAgICAgICBkaWdpdGFsX2lvX291dFsxOV0gID0gcG9ydF9jX291dFsxXTsKKworICAgICAvL1Bpbi0yNSAgICAgICBQQzIvQURDMiAgICAgICAgICAgIGRpZ2l0YWxfaW9bMjBdL2FuYWxvZ19pb1sxM10KKyAgICAgaWYoY2ZnX3BvcnRfY19kaXJfc2VsWzJdKSAgICAgICBkaWdpdGFsX2lvX291dFsyMF0gID0gcG9ydF9jX291dFsyXTsKKworICAgICAvL1Bpbi0yNiAgICAgICBQQzMvQURDMyAgICAgICAgICAgIGRpZ2l0YWxfaW9bMjFdL2FuYWxvZ19pb1sxNF0KKyAgICAgaWYoY2ZnX3BvcnRfY19kaXJfc2VsWzNdKSAgICAgICBkaWdpdGFsX2lvX291dFsyMV0gID0gcG9ydF9jX291dFszXTsKKworICAgICAvL1Bpbi0yNyAgICAgICBQQzQvQURDNC9TREEgICAgICAgIGRpZ2l0YWxfaW9bMjJdL2FuYWxvZ19pb1sxNV0KKyAgICAgaWYoY2ZnX2kyY21fZW5iKSAgICAgICAgICAgICAgICBkaWdpdGFsX2lvX291dFsyMl0gID0gaTJjbV9kYXRhX287CisgICAgIGVsc2UgaWYoY2ZnX3BvcnRfY19kaXJfc2VsWzRdKSAgZGlnaXRhbF9pb19vdXRbMjJdICA9IHBvcnRfY19vdXRbNF07CisKKyAgICAgLy9QaW4tMjggICAgICAgUEM1L0FEQzUvU0NMICAgICAgICBkaWdpdGFsX2lvWzIzXS9hbmFsb2dfaW9bMTZdCisgICAgIGlmKGNmZ19pMmNtX2VuYikgICAgICAgICAgICAgICAgZGlnaXRhbF9pb19vdXRbMjNdICA9IGkyY21fY2xrX287CisgICAgIGVsc2UgaWYoY2ZnX3BvcnRfY19kaXJfc2VsWzVdKSAgZGlnaXRhbF9pb19vdXRbMjNdICA9IHBvcnRfY19vdXRbNV07CisKKyAgICAgLy8gU2VyaWFsIEZsYXNoCisgICAgIGRpZ2l0YWxfaW9fb3V0WzI0XSA9IHNmbGFzaF9zY2sgICA7CisgICAgIGRpZ2l0YWxfaW9fb3V0WzI1XSA9IHNmbGFzaF9zc1szXSA7CisgICAgIGRpZ2l0YWxfaW9fb3V0WzI2XSA9IHNmbGFzaF9zc1syXSA7CisgICAgIGRpZ2l0YWxfaW9fb3V0WzI3XSA9IHNmbGFzaF9zc1sxXSA7CisgICAgIGRpZ2l0YWxfaW9fb3V0WzI4XSA9IHNmbGFzaF9zc1swXSA7CisgICAgIGRpZ2l0YWxfaW9fb3V0WzI5XSA9IHNmbGFzaF9kb1swXSA7CisgICAgIGRpZ2l0YWxfaW9fb3V0WzMwXSA9IHNmbGFzaF9kb1sxXSA7CisgICAgIGRpZ2l0YWxfaW9fb3V0WzMxXSA9IHNmbGFzaF9kb1syXSA7CisgICAgIGRpZ2l0YWxfaW9fb3V0WzMyXSA9IHNmbGFzaF9kb1szXSA7CisgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAvLyBSZXNlcnZlZAorICAgICBkaWdpdGFsX2lvX291dFszM10gPSAxJ2IwOworCisgICAgIC8vIFVBUlQgTUFTVEVSIEkvZgorICAgICBkaWdpdGFsX2lvX291dFszNF0gPSAxJ2IwICAgICAgICAgOyAvLyBSWEQKKyAgICAgZGlnaXRhbF9pb19vdXRbMzVdID0gdWFydG1fdHhkICAgIDsgLy8gVFhECisgICAgICAgICAgICAgICAgICAKKyAgICAgLy8gVVNCIDEuMSAgICAgCisgICAgIGRpZ2l0YWxfaW9fb3V0WzM2XSA9IHVzYl9kcF9vICAgICA7CisgICAgIGRpZ2l0YWxfaW9fb3V0WzM3XSA9IHVzYl9kbl9vICAgICA7CitlbmQKKworLy8gZGF0YW9lbiBzZWxlY3Rpb24KK2Fsd2F5c19jb21iIGJlZ2luCisgICAgIGRpZ2l0YWxfaW9fb2VuID0gMzgnaDNGX0ZGRkZfRkZGRjsKKyAgICAgLy9QaW4tMSAgICAgICAgUEM2L1JFU0VUKiAgICAgICAgICBkaWdpdGFsX2lvWzBdCisgICAgIGlmKGNmZ19wb3J0X2NfZGlyX3NlbFs2XSkgICAgICAgZGlnaXRhbF9pb19vZW5bMF0gICA9IDEnYjA7CisKKyAgICAgLy9QaW4tMiAgICAgICAgUEQwL1JYRCAgICAgICAgICAgICBkaWdpdGFsX2lvWzFdCisgICAgIGlmICAgICAoY2ZnX3VhcnRfZW5iKSAgICAgICAgICAgZGlnaXRhbF9pb19vZW5bMV0gICA9IDEnYjE7CisgICAgIGVsc2UgaWYoY2ZnX3BvcnRfZF9kaXJfc2VsWzBdKSAgZGlnaXRhbF9pb19vZW5bMV0gICA9IDEnYjA7CisKKyAgICAgLy9QaW4tMyAgICAgICAgUEQxL1RYRCAgICAgICAgICAgICBkaWdpdGFsX2lvWzJdCisgICAgIGlmICAgICAoY2ZnX3VhcnRfZW5iKSAgICAgICAgICAgZGlnaXRhbF9pb19vZW5bMl0gICA9IDEnYjA7CisgICAgIGVsc2UgaWYoY2ZnX3BvcnRfZF9kaXJfc2VsWzFdKSAgZGlnaXRhbF9pb19vZW5bMl0gICA9IDEnYjA7CisKKyAgICAvL1Bpbi00ICAgICAgICBQRDIvSU5UMCAgICAgICAgICAgIGRpZ2l0YWxfaW9bM10KKyAgICAgaWYoY2ZnX2ludF9lbmJbMF0pICAgICAgICAgICAgICBkaWdpdGFsX2lvX29lblszXSAgID0gMSdiMTsKKyAgICAgZWxzZSBpZihjZmdfcG9ydF9kX2Rpcl9zZWxbMl0pICBkaWdpdGFsX2lvX29lblszXSAgID0gMSdiMDsKKworICAgICAvL1Bpbi01ICAgICAgICBQRDMvSU5UMS9PQzJCKFBXTTApICBkaWdpdGFsX2lvWzRdCisgICAgIGlmKGNmZ19wd21fZW5iWzBdKSAgICAgICAgICAgICAgZGlnaXRhbF9pb19vZW5bNF0gICA9IDEnYjA7CisgICAgIGVsc2UgaWYoY2ZnX2ludF9lbmJbMV0pICAgICAgICAgZGlnaXRhbF9pb19vZW5bNF0gICA9IDEnYjE7CisgICAgIGVsc2UgaWYoY2ZnX3BvcnRfZF9kaXJfc2VsWzNdKSAgZGlnaXRhbF9pb19vZW5bNF0gICA9IDEnYjA7CisKKyAgICAgLy9QaW4tNiAgICAgICAgUEQ0ICAgICAgICAgICAgICAgICBkaWdpdGFsX2lvWzVdCisgICAgIGlmKGNmZ19wb3J0X2RfZGlyX3NlbFs0XSkgICAgICAgZGlnaXRhbF9pb19vZW5bNV0gICA9IDEnYjA7CisKKyAgICAgLy9QaW4tOSAgICAgICAgUEI2L1hUQUwxL1RPU0MxICAgICBkaWdpdGFsX2lvWzZdCisgICAgIGlmKGNmZ19wb3J0X2JfZGlyX3NlbFs2XSkgICAgICAgZGlnaXRhbF9pb19vZW5bNl0gICA9IDEnYjA7CisKKyAgICAgLy8gUGluLTEwICAgICAgIFBCNy9YVEFMMi9UT1NDMiAgICAgZGlnaXRhbF9pb1s3XQorICAgICBpZihjZmdfcG9ydF9iX2Rpcl9zZWxbN10pICAgICAgIGRpZ2l0YWxfaW9fb2VuWzddICAgPSAxJ2IwOworCisgICAgIC8vUGluLTExICAgICAgIFBENS9PQzBCKFBXTTEpL1QxICAgZGlnaXRhbF9pb1s4XQorICAgICBpZihjZmdfcHdtX2VuYlsxXSkgICAgICAgICAgICAgIGRpZ2l0YWxfaW9fb2VuWzhdICAgPSAxJ2IwOworICAgICBlbHNlIGlmKGNmZ19wb3J0X2RfZGlyX3NlbFs1XSkgIGRpZ2l0YWxfaW9fb2VuWzhdICAgPSAxJ2IwOworCisgICAgIC8vUGluLTEyICAgICAgIFBENi9PQzBBKFBXTTIpL0FJTjAgZGlnaXRhbF9pb1s5XSAvYW5hbG9nX2lvWzJdCisgICAgIGlmKGNmZ19wd21fZW5iWzJdKSAgICAgICAgICAgICAgZGlnaXRhbF9pb19vZW5bOV0gICA9IDEnYjA7CisgICAgIGVsc2UgaWYoY2ZnX3BvcnRfZF9kaXJfc2VsWzZdKSAgZGlnaXRhbF9pb19vZW5bOV0gICA9IDEnYjA7CisKKyAgICAgLy9QaW4tMTMgICAgICAgUEQ3L0ExTjEgICAgICAgICAgICBkaWdpdGFsX2lvWzEwXS9hbmFsb2dfaW9bM10KKyAgICAgaWYoY2ZnX3BvcnRfZF9kaXJfc2VsWzddKSAgICAgICBkaWdpdGFsX2lvX29lblsxMF0gID0gMSdiMDsKKyAgICAgCisgICAgIC8vUGluLTE0ICAgICAgIFBCMC9DTEtPL0lDUDEgICAgICAgZGlnaXRhbF9pb1sxMV0KKyAgICAgaWYoY2ZnX3BvcnRfYl9kaXJfc2VsWzBdKSAgICAgICBkaWdpdGFsX2lvX29lblsxMV0gID0gMSdiMDsKKworICAgICAvL1Bpbi0xNSAgICAgICBQQjEvT0MxQShQV00zKSAgICAgIGRpZ2l0YWxfaW9bMTJdCisgICAgIGlmKGNmZ19wd21fZW5iWzNdKSAgICAgICAgICAgICAgZGlnaXRhbF9pb19vZW5bMTJdICA9IDEnYjA7CisgICAgIGVsc2UgaWYoY2ZnX3BvcnRfYl9kaXJfc2VsWzFdKSAgZGlnaXRhbF9pb19vZW5bMTJdICA9IDEnYjA7CisKKyAgICAgLy9QaW4tMTYgICAgICAgUEIyL1NTL09DMUIoUFdNNCkgICBkaWdpdGFsX2lvWzEzXQorICAgICBpZihjZmdfcHdtX2VuYls0XSkgICAgICAgICAgICAgIGRpZ2l0YWxfaW9fb2VuWzEzXSAgPSAxJ2IwOworICAgICBlbHNlIGlmKGNmZ19zcGltX2VuYikgICAgICAgICAgIGRpZ2l0YWxfaW9fb2VuWzEzXSAgPSAxJ2IwOworICAgICBlbHNlIGlmKGNmZ19wb3J0X2JfZGlyX3NlbFsyXSkgIGRpZ2l0YWxfaW9fb2VuWzEzXSAgPSAxJ2IwOworCisgICAgIC8vUGluLTE3ICAgICAgIFBCMy9NT1NJL09DMkEoUFdNNSkgZGlnaXRhbF9pb1sxNF0KKyAgICAgaWYoY2ZnX3NwaW1fZW5iKSAgICAgICAgICAgICAgICBkaWdpdGFsX2lvX29lblsxNF0gID0gMSdiMTsKKyAgICAgZWxzZSBpZihjZmdfcHdtX2VuYls1XSkgICAgICAgICBkaWdpdGFsX2lvX29lblsxNF0gID0gMSdiMDsKKyAgICAgZWxzZSBpZihjZmdfcG9ydF9iX2Rpcl9zZWxbM10pICBkaWdpdGFsX2lvX29lblsxNF0gID0gMSdiMDsKKworICAgICAvL1Bpbi0xOCAgICAgICBQQjQvTUlTTyAgICAgICAgICAgIGRpZ2l0YWxfaW9bMTVdCisgICAgIGlmKGNmZ19zcGltX2VuYikgICAgICAgICAgICAgICAgZGlnaXRhbF9pb19vZW5bMTVdICA9IDEnYjA7CisgICAgIGVsc2UgaWYoY2ZnX3BvcnRfYl9kaXJfc2VsWzRdKSAgZGlnaXRhbF9pb19vZW5bMTVdICA9IDEnYjA7CisKKyAgICAgLy9QaW4tMTkgICAgICAgUEI1L1NDSyAgICAgICAgICAgICBkaWdpdGFsX2lvWzE2XQorICAgICBpZihjZmdfc3BpbV9lbmIpICAgICAgICAgICAgICAgIGRpZ2l0YWxfaW9fb2VuWzE2XSAgPSAxJ2IwOworICAgICBlbHNlIGlmKGNmZ19wb3J0X2JfZGlyX3NlbFs1XSkgIGRpZ2l0YWxfaW9fb2VuWzE2XSAgPSAxJ2IwOworICAgICAKKyAgICAgLy9QaW4tMjMgICAgICAgUEMwL0FEQzAgICAgICAgICAgICBkaWdpdGFsX2lvWzE4XS9hbmFsb2dfaW9bMTFdCisgICAgIGlmKGNmZ19wb3J0X2NfZGlyX3NlbFswXSkgICAgICAgZGlnaXRhbF9pb19vZW5bMThdICA9IDEnYjA7CisKKyAgICAgLy9QaW4tMjQgICAgICAgUEMxL0FEQzEgICAgICAgICAgICBkaWdpdGFsX2lvWzE5XS9hbmFsb2dfaW9bMTJdCisgICAgIGlmKGNmZ19wb3J0X2NfZGlyX3NlbFsxXSkgICAgICAgZGlnaXRhbF9pb19vZW5bMTldICA9IDEnYjA7CisKKyAgICAgLy9QaW4tMjUgICAgICAgUEMyL0FEQzIgICAgICAgICAgICBkaWdpdGFsX2lvWzIwXS9hbmFsb2dfaW9bMTNdCisgICAgIGlmKGNmZ19wb3J0X2NfZGlyX3NlbFsyXSkgICAgICAgZGlnaXRhbF9pb19vZW5bMjBdICA9IDEnYjA7CisKKyAgICAgLy9QaW4tMjYgICAgICAgUEMzL0FEQzMgICAgICAgICAgICBkaWdpdGFsX2lvWzIxXS9hbmFsb2dfaW9bMTRdCisgICAgIGlmKGNmZ19wb3J0X2NfZGlyX3NlbFszXSkgICAgICAgZGlnaXRhbF9pb19vZW5bMjFdICA9IDEnYjA7CisKKyAgICAgLy9QaW4tMjcgICAgICAgUEM0L0FEQzQvU0RBICAgICAgICBkaWdpdGFsX2lvWzIyXS9hbmFsb2dfaW9bMTVdCisgICAgIGlmKGNmZ19pMmNtX2VuYikgICAgICAgICAgICAgICAgZGlnaXRhbF9pb19vZW5bMjJdICA9IGkyY21fZGF0YV9vZW47CisgICAgIGVsc2UgaWYoY2ZnX3BvcnRfY19kaXJfc2VsWzRdKSAgZGlnaXRhbF9pb19vZW5bMjJdICA9IDEnYjA7CisKKyAgICAgLy9QaW4tMjggICAgICAgUEM1L0FEQzUvU0NMICAgICAgICBkaWdpdGFsX2lvWzIzXS9hbmFsb2dfaW9bMTZdCisgICAgIGlmKGNmZ19pMmNtX2VuYikgICAgICAgICAgICAgICAgZGlnaXRhbF9pb19vZW5bMjNdICA9IGkyY21fY2xrX29lbjsKKyAgICAgZWxzZSBpZihjZmdfcG9ydF9jX2Rpcl9zZWxbNV0pICBkaWdpdGFsX2lvX29lblsyM10gID0gMSdiMDsKKworICAgICAvLyBTZXJpYWwgRmxhc2gKKyAgICAgZGlnaXRhbF9pb19vZW5bMjRdID0gMSdiMCAgIDsKKyAgICAgZGlnaXRhbF9pb19vZW5bMjVdID0gMSdiMCAgIDsKKyAgICAgZGlnaXRhbF9pb19vZW5bMjZdID0gMSdiMCAgIDsKKyAgICAgZGlnaXRhbF9pb19vZW5bMjddID0gMSdiMCAgIDsKKyAgICAgZGlnaXRhbF9pb19vZW5bMjhdID0gMSdiMCAgIDsKKyAgICAgZGlnaXRhbF9pb19vZW5bMjldID0gc2ZsYXNoX29lblswXTsKKyAgICAgZGlnaXRhbF9pb19vZW5bMzBdID0gc2ZsYXNoX29lblsxXTsKKyAgICAgZGlnaXRhbF9pb19vZW5bMzFdID0gc2ZsYXNoX29lblsyXTsKKyAgICAgZGlnaXRhbF9pb19vZW5bMzJdID0gc2ZsYXNoX29lblszXTsKKyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgIC8vIFJlc2VydmVkCisgICAgIGRpZ2l0YWxfaW9fb2VuWzMzXSA9IDEnYjAgIDsKKyAgICAgLy8gVUFSVCBNQVNURVIKKyAgICAgZGlnaXRhbF9pb19vZW5bMzRdID0gMSdiMTsgLy8gUlhECisgICAgIGRpZ2l0YWxfaW9fb2VuWzM1XSA9IDEnYjA7IC8vIFRYRAorICAgICAgICAgICAgICAgICAgCisgICAgIC8vIFVTQiAxLjEgICAgIAorICAgICBkaWdpdGFsX2lvX29lblszNl0gPSB1c2Jfb2VuOworICAgICBkaWdpdGFsX2lvX29lblszN10gPSB1c2Jfb2VuOworZW5kCisKKworZW5kbW9kdWxlIAorCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3Bpbm11eC9zcmMvcGlubXV4X3JlZy5zdiBiL3Zlcmlsb2cvcnRsL3Bpbm11eC9zcmMvcGlubXV4X3JlZy5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTFiZDQwCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvcGlubXV4L3NyYy9waW5tdXhfcmVnLnN2CkBAIC0wLDAgKzEsOTEzIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFBpbm11eCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSByaXNjZHVpbm8gY29yZXMgcHJvamVjdCAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3Jpc2NkdWluby5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICBIb2xkIGFsbCB0aGUgR2xvYmFsIGFuZCBQaW5NdXggUmVnaXN0ZXIgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMTZ0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgaW5pdGlhbCB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCittb2R1bGUgcGlubXV4X3JlZyAoCisgICAgICAgICAgICAgICAgICAgICAgIC8vIFN5c3RlbSBTaWduYWxzCisgICAgICAgICAgICAgICAgICAgICAgIC8vIElucHV0cworCQkgICAgICAgaW5wdXQgbG9naWMgICAgICAgICAgICAgbWNsaywKKyAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgbG9naWMgICAgICAgICAgICAgaF9yZXNldF9uLAorCisJCSAgICAgICAvLyBSZWcgQnVzIEludGVyZmFjZSBTaWduYWwKKyAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgbG9naWMgICAgICAgICAgICAgcmVnX2NzLAorICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICByZWdfd3IsCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0IGxvZ2ljIFs3OjBdICAgICAgIHJlZ19hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCBsb2dpYyBbMzE6MF0gICAgICByZWdfd2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0IGxvZ2ljIFszOjBdICAgICAgIHJlZ19iZSwKKworICAgICAgICAgICAgICAgICAgICAgICAvLyBPdXRwdXRzCisgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBsb2dpYyBbMzE6MF0gICAgIHJlZ19yZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgcmVnX2FjaywKKworCQkgICAgICAgaW5wdXQgIGxvZ2ljIFsxOjBdICAgICAgZXh0X2ludHJfaW4sCisKKwkJICAgICAgLy8gUmlzYyBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBsb2dpYyBbMzE6MF0gICAgIGZ1c2VfbWhhcnRpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljIFsxNTowXSAgICAgaXJxX2xpbmVzLAorICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICBzb2Z0X2lycSwKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljIFsyOjBdICAgICAgdXNlcl9pcnEsCisJCSAgICAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICB1c2JfaW50ciwKKwkJICAgICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgIGkyY21faW50ciwKKworICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgbG9naWMgWzk6MF0gICAgICBjZmdfcHVsc2VfMXVzLAorCQkgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgIC8vIDYgUFdNIENvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBsb2dpYyBbMTU6MF0gICAgY2ZnX3B3bTBfaGlnaCAgICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgbG9naWMgWzE1OjBdICAgIGNmZ19wd20wX2xvdyAgICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljIFsxNTowXSAgICBjZmdfcHdtMV9oaWdoICAgICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBsb2dpYyBbMTU6MF0gICAgY2ZnX3B3bTFfbG93ICAgICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgbG9naWMgWzE1OjBdICAgIGNmZ19wd20yX2hpZ2ggICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljIFsxNTowXSAgICBjZmdfcHdtMl9sb3cgICAgICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBsb2dpYyBbMTU6MF0gICAgY2ZnX3B3bTNfaGlnaCAgICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgbG9naWMgWzE1OjBdICAgIGNmZ19wd20zX2xvdyAgICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljIFsxNTowXSAgICBjZmdfcHdtNF9oaWdoICAgICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBsb2dpYyBbMTU6MF0gICAgY2ZnX3B3bTRfbG93ICAgICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgbG9naWMgWzE1OjBdICAgIGNmZ19wd201X2hpZ2ggICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljIFsxNTowXSAgICBjZmdfcHdtNV9sb3cgICAgICAgICAgICAsCisKKyAgICAgICAgICAgICAgICAvLyBHUElPIGlucHV0IHBpbnMKKyAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgIGxvZ2ljIFszMTowXSAgICAgZ3Bpb19pbl9kYXRhICAgLC8vIEdQSU8gSS9QIHBpbnMKKyAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgIGxvZ2ljIFszMTowXSAgICAgZ3Bpb19pbnRfZXZlbnQgLC8vIGZyb20gZ3BpbyBjb250cm9sIGJsaworCisKKworICAgICAgICAgICAgICAgIC8vIEdQSU8gY29uZmlnIHBpbnMKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICBsb2dpYyBbMzE6MF0gICAgIGNmZ19ncGlvX291dF9kYXRhICAgICAgICAsLy8gdG8gdGhlIEdQSU8gY29udHJvbCBibG9jayAKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICBsb2dpYyBbMzE6MF0gICAgIGNmZ19ncGlvX2RhdGFfaW4gICAgICAgICAsLy8gR1BJTyBJL1AgcGlucyBkYXRhIGNhcHR1cmVkIGludG8gdGhpcworICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgIGxvZ2ljIFszMTowXSAgICAgY2ZnX2dwaW9fZGlyX3NlbCAgICAgICAgICwvLyBkZWNpZGVzIG9uIEdQSU8gcGluIGlzIEkvUCBvciBPL1AgYXQgcGFkIGxldmVsCisgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCAgbG9naWMgWzMxOjBdICAgICBjZmdfZ3Bpb19vdXRfdHlwZSAgICAgICAgLC8vIE8vUCBpcyBzdGF0aWMgLCAnMScgOiB3YXZlZm9ybQorICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgIGxvZ2ljIFszMTowXSAgICAgY2ZnX2dwaW9fcG9zZWRnZV9pbnRfc2VsICwvLyBzZWxlY3QgcG9zZWRnZSBpbnRlcnJ1cHQKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICBsb2dpYyBbMzE6MF0gICAgIGNmZ19ncGlvX25lZ2VkZ2VfaW50X3NlbCAsLy8gc2VsZWN0IG5lZ2VkZ2UgaW50ZXJydXB0CisgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCAgbG9naWMgWzMxOjBdICAgICBjZmdfbXVsdGlfZnVuY19zZWwgICAgICAgLC8vIG11bHRpZnVuY3Rpb24gcGlucworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgIC8vIE91dHB1dHMKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljIFszMTowXSAgICAgIGdwaW9fcHJldl9pbmRhdGEsICAgICAgIC8vIHBydiBkYXRhIGZyb20gR1BJTyBJL1AgcGlucworCisJCS8vIEJJU1QgSS9GCisJICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgIGJpc3RfZW4sCisJICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgIGJpc3RfcnVuLAorCSAgICAgICAgICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICBiaXN0X2xvYWQsCisKKwkgICAgICAgICAgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgYmlzdF9zZGksCisJICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgIGJpc3Rfc2hpZnQsCisJICAgICAgICAgICAgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgIGJpc3Rfc2RvLAorCisJICAgICAgICAgICAgICAgaW5wdXQgbG9naWMgICAgICAgICAgICAgIGJpc3RfZG9uZSwKKwkgICAgICAgICAgICAgICBpbnB1dCBsb2dpYyBbMzowXSAgICAgICAgYmlzdF9lcnJvciwKKwkgICAgICAgICAgICAgICBpbnB1dCBsb2dpYyBbMzowXSAgICAgICAgYmlzdF9jb3JyZWN0LAorCSAgICAgICAgICAgICAgIGlucHV0IGxvZ2ljIFszOjBdICAgICAgICBiaXN0X2Vycm9yX2NudDAsCisJICAgICAgICAgICAgICAgaW5wdXQgbG9naWMgWzM6MF0gICAgICAgIGJpc3RfZXJyb3JfY250MSwKKwkgICAgICAgICAgICAgICBpbnB1dCBsb2dpYyBbMzowXSAgICAgICAgYmlzdF9lcnJvcl9jbnQyLAorCSAgICAgICAgICAgICAgIGlucHV0IGxvZ2ljIFszOjBdICAgICAgICBiaXN0X2Vycm9yX2NudDMKKworICAgKTsgCisKKworICAgICAgICAgICAgICAgICAgICAgICAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEludGVybmFsIFdpcmUgRGVjbGFyYXRpb25zCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2xvZ2ljICAgICAgICAgIHN3X3JkX2VuICAgICAgICAgICAgICAgOworbG9naWMgICAgICAgICAgc3dfd3JfZW47Citsb2dpYyBbNDowXSAgICBzd19hZGRyOyAvLyBhZGRyZXNzaW5nIDE2IHJlZ2lzdGVycworbG9naWMgWzMxOjBdICAgc3dfcmVnX3dkYXRhOworbG9naWMgWzM6MF0gICAgd3JfYmUgIDsKKworbG9naWMgWzMxOjBdICAgcmVnX291dDsKK2xvZ2ljICBbMzE6MF0gICByZWdfMDsgLy8gQ2hpcCBJRAorbG9naWMgIFszMTowXSAgIHJlZ18xOyAvLyBSaXNjIEZ1c2UgSWQKK2xvZ2ljIFszMTowXSAgICByZWdfMjsgLy8gR1BJTyBSZWFkIERhdGEKK2xvZ2ljIFszMTowXSAgICByZWdfMzsgLy8gR1BJTyBPdXRwdXQgRGF0YQorbG9naWMgWzMxOjBdICAgIHJlZ180OyAvLyBHUElPIERpciBTZWwKK2xvZ2ljIFszMTowXSAgICByZWdfNTsgLy8gR1BJTyBUeXBlCitsb2dpYyBbMzE6MF0gICAgcmVnXzY7IC8vIEludGVycnVwdAorbG9naWMgWzMxOjBdICAgIHJlZ183OyAvLyAKK2xvZ2ljIFszMTowXSAgICByZWdfODsgLy8gCitsb2dpYyBbMzE6MF0gICAgcmVnXzk7IC8vIEdQSU8gSW50ZXJydXB0IFN0YXR1cworbG9naWMgIFszMTowXSAgIHJlZ18xMDsgLy8gR1BJTyBJbnRlcnJ1cHQgU3RhdHVzCitsb2dpYyBbMzE6MF0gICAgcmVnXzExOyAvLyBHUElPIEludGVycnVwdCBNYXNrCitsb2dpYyBbMzE6MF0gICAgcmVnXzEyOyAvLyBHUElPIFBvc2VkZ2UgSW50ZXJydXB0IFNlbGVjdAorbG9naWMgWzMxOjBdICAgIHJlZ18xMzsgLy8gR1BJTyBOZWdlZGdlIEludGVycnVwdCBTZWxlY3QKK2xvZ2ljIFszMTowXSAgICByZWdfMTQ7IC8vIFNvZnR3YXJlLVJlZ18xNAorbG9naWMgWzMxOjBdICAgIHJlZ18xNTsgLy8gU29mdHdhcmUtUmVnXzE1Citsb2dpYyBbMzE6MF0gICAgcmVnXzE2OyAvLyBQV04tMCBDb25maWcKK2xvZ2ljIFszMTowXSAgICByZWdfMTc7IC8vIFBXTi0xIENvbmZpZworbG9naWMgWzMxOjBdICAgIHJlZ18xODsgLy8gUFdOLTIgQ29uZmlnCitsb2dpYyBbMzE6MF0gICAgcmVnXzE5OyAvLyBQV04tMyBDb25maWcKK2xvZ2ljIFszMTowXSAgICByZWdfMjA7IC8vIFBXTi00IENvbmZpZworbG9naWMgWzMxOjBdICAgIHJlZ18yMTsgLy8gUFdOLTUgQ29uZmlnCitsb2dpYyBbMzE6MF0gICAgcmVnXzIyOyAvLyBTb2Z0d2FyZS1SZWcxCitsb2dpYyBbMzE6MF0gICAgcmVnXzIzOyAvLyBTb2Z0d2FyZS1SZWcyCitsb2dpYyBbMzE6MF0gICAgcmVnXzI0OyAvLyBTb2Z0d2FyZS1SZWczCitsb2dpYyBbMzE6MF0gICAgcmVnXzI1OyAvLyBTb2Z0d2FyZS1SZWc0Citsb2dpYyBbMzE6MF0gICAgcmVnXzI2OyAvLyBTb2Z0d2FyZS1SZWc1Citsb2dpYyBbMzE6MF0gICAgcmVnXzI3OyAvLyBTb2Z0d2FyZS1SZWc2CisKKworbG9naWMgICAgICAgICAgIGNzX2ludDsKK2xvZ2ljICAgICAgICAgICBncGlvX2ludHI7CisKKworYXNzaWduICAgICAgIHN3X2FkZHIgICAgICAgPSByZWdfYWRkciBbNjoyXTsKK2Fzc2lnbiAgICAgICBzd19yZF9lbiAgICAgID0gcmVnX2NzICYgIXJlZ193cjsKK2Fzc2lnbiAgICAgICBzd193cl9lbiAgICAgID0gcmVnX2NzICYgcmVnX3dyOworYXNzaWduICAgICAgIHdyX2JlICAgICAgICAgPSByZWdfYmU7Cithc3NpZ24gICAgICAgc3dfcmVnX3dkYXRhICA9IHJlZ193ZGF0YTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBFZGdlIGRldGVjdGlvbiBmb3IgTG9naWMgQmlzdAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitsb2dpYyB3Yl9yZXE7Citsb2dpYyB3Yl9yZXFfZDsKK2xvZ2ljIHdiX3JlcV9wZWRnZTsKKworYWx3YXlzX2ZmIEAobmVnZWRnZSBoX3Jlc2V0X24gb3IgcG9zZWRnZSBtY2xrKSBiZWdpbgorICAgIGlmICggaF9yZXNldF9uID09IDEnYjAgKSBiZWdpbgorICAgICAgICB3Yl9yZXEgICAgPD0gJzA7CisJd2JfcmVxX2QgIDw9ICcwOworICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICB3Yl9yZXEgICA8PSByZWdfY3MgJiYgKHJlZ19hY2sgPT0gMCkgOworICAgICAgIHdiX3JlcV9kIDw9IHdiX3JlcTsKKyAgIGVuZAorZW5kCisKKy8vIERldGVjdCBwb3MgZWRnZSBvZiByZXF1ZXN0Cithc3NpZ24gd2JfcmVxX3BlZGdlID0gKHdiX3JlcV9kID09MCkgJiYgKHdiX3JlcT09MSdiMSk7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVnIDQvNSBhcmUgQklTVCBTZXJpYWwgSS9GIHJlZ2lzdGVyIGFuZCBpdCB0YWtlcyBtaW5pbXVtIDMyCisvLyBjeWNsZSB0byByZXNwb25kIEFDSyBiYWNrCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlIHNlcl9hY2MgICAgID0gc3dfd3JfZW5fMzAgfCBzd19yZF9lbl8zMTsKK3dpcmUgbm9uX3Nlcl9hY2MgPSByZWdfY3MgPyAhc2VyX2FjYyA6IDEnYjA7Cit3aXJlIHNlcmlhbF9hY2s7CisKK2Fsd2F5cyBAIChwb3NlZGdlIG1jbGsgb3IgbmVnZWRnZSBoX3Jlc2V0X24pCitiZWdpbiA6IHByZWdfb3V0X1NlcQorICAgaWYgKGhfcmVzZXRfbiA9PSAxJ2IwKSBiZWdpbgorICAgICAgcmVnX3JkYXRhICA8PSAnaDA7CisgICAgICByZWdfYWNrICAgIDw9IDEnYjA7CisgICBlbmQgZWxzZSBpZiAoc2VyX2FjYyAmJiBzZXJpYWxfYWNrKSAgYmVnaW4KKyAgICAgIHJlZ19yZGF0YSA8PSBzZXJhaWxfZG91dCA7CisgICAgICByZWdfYWNrICAgPD0gMSdiMTsKKyAgIGVuZCBlbHNlIGlmIChub25fc2VyX2FjYyAmJiAhcmVnX2FjaykgYmVnaW4KKyAgICAgIHJlZ19yZGF0YSA8PSByZWdfb3V0IDsKKyAgICAgIHJlZ19hY2sgICA8PSAxJ2IxOworICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgIHJlZ19hY2sgICAgICAgIDw9IDEnYjA7CisgICBlbmQKK2VuZAorCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gcmVnaXN0ZXIgcmVhZCBlbmFibGUgYW5kIHdyaXRlIGVuYWJsZSBkZWNvZGluZyBsb2dpYworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSAgIHN3X3dyX2VuXzAgPSBzd193cl9lbiAgJiAoc3dfYWRkciA9PSA1J2gwKTsKK3dpcmUgICBzd193cl9lbl8xID0gc3dfd3JfZW4gICYgKHN3X2FkZHIgPT0gNSdoMSk7Cit3aXJlICAgc3dfd3JfZW5fMiA9IHN3X3dyX2VuICAmIChzd19hZGRyID09IDUnaDIpOword2lyZSAgIHN3X3dyX2VuXzMgPSBzd193cl9lbiAgJiAoc3dfYWRkciA9PSA1J2gzKTsKK3dpcmUgICBzd193cl9lbl80ID0gc3dfd3JfZW4gICYgKHN3X2FkZHIgPT0gNSdoNCk7Cit3aXJlICAgc3dfd3JfZW5fNSA9IHN3X3dyX2VuICAmIChzd19hZGRyID09IDUnaDUpOword2lyZSAgIHN3X3dyX2VuXzYgPSBzd193cl9lbiAgJiAoc3dfYWRkciA9PSA1J2g2KTsKK3dpcmUgICBzd193cl9lbl83ID0gc3dfd3JfZW4gICYgKHN3X2FkZHIgPT0gNSdoNyk7Cit3aXJlICAgc3dfd3JfZW5fOCA9IHN3X3dyX2VuICAmIChzd19hZGRyID09IDUnaDgpOword2lyZSAgIHN3X3dyX2VuXzkgPSBzd193cl9lbiAgJiAoc3dfYWRkciA9PSA1J2g5KTsKK3dpcmUgICBzd193cl9lbl8xMCA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNSdoQSk7Cit3aXJlICAgc3dfd3JfZW5fMTEgPSBzd193cl9lbiAmIChzd19hZGRyID09IDUnaEIpOword2lyZSAgIHN3X3dyX2VuXzEyID0gc3dfd3JfZW4gJiAoc3dfYWRkciA9PSA1J2hDKTsKK3dpcmUgICBzd193cl9lbl8xMyA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNSdoRCk7Cit3aXJlICAgc3dfd3JfZW5fMTQgPSBzd193cl9lbiAmIChzd19hZGRyID09IDUnaEUpOword2lyZSAgIHN3X3dyX2VuXzE1ID0gc3dfd3JfZW4gJiAoc3dfYWRkciA9PSA1J2hGKTsKK3dpcmUgICBzd193cl9lbl8xNiA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNSdoMTApOword2lyZSAgIHN3X3dyX2VuXzE3ID0gc3dfd3JfZW4gJiAoc3dfYWRkciA9PSA1J2gxMSk7Cit3aXJlICAgc3dfd3JfZW5fMTggPSBzd193cl9lbiAmIChzd19hZGRyID09IDUnaDEyKTsKK3dpcmUgICBzd193cl9lbl8xOSA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNSdoMTMpOword2lyZSAgIHN3X3dyX2VuXzIwID0gc3dfd3JfZW4gJiAoc3dfYWRkciA9PSA1J2gxNCk7Cit3aXJlICAgc3dfd3JfZW5fMjEgPSBzd193cl9lbiAmIChzd19hZGRyID09IDUnaDE1KTsKKword2lyZSAgIHN3X3dyX2VuXzIyID0gc3dfd3JfZW4gJiAoc3dfYWRkciA9PSA1J2gxNik7Cit3aXJlICAgc3dfd3JfZW5fMjMgPSBzd193cl9lbiAmIChzd19hZGRyID09IDUnaDE3KTsKK3dpcmUgICBzd193cl9lbl8yNCA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNSdoMTgpOword2lyZSAgIHN3X3dyX2VuXzI1ID0gc3dfd3JfZW4gJiAoc3dfYWRkciA9PSA1J2gxOSk7Cit3aXJlICAgc3dfd3JfZW5fMjYgPSBzd193cl9lbiAmIChzd19hZGRyID09IDUnaDFBKTsKK3dpcmUgICBzd193cl9lbl8yNyA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNSdoMUIpOword2lyZSAgIHN3X3dyX2VuXzI4ID0gc3dfd3JfZW4gJiAoc3dfYWRkciA9PSA1J2gxQyk7Cit3aXJlICAgc3dfd3JfZW5fMjkgPSBzd193cl9lbiAmIChzd19hZGRyID09IDUnaDFEKTsKK3dpcmUgICBzd193cl9lbl8zMCA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNSdoMUUpOword2lyZSAgIHN3X3dyX2VuXzMxID0gc3dfd3JfZW4gJiAoc3dfYWRkciA9PSA1J2gxRik7CisKK3dpcmUgICBzd19yZF9lbl8yOCA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNSdoMUMpOword2lyZSAgIHN3X3JkX2VuXzI5ID0gc3dfcmRfZW4gJiAoc3dfYWRkciA9PSA1J2gxRCk7Cit3aXJlICAgc3dfcmRfZW5fMzAgPSBzd19yZF9lbiAmIChzd19hZGRyID09IDUnaDFFKTsKK3dpcmUgICBzd19yZF9lbl8zMSA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNSdoMUYpOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEluZGl2aWR1YWwgcmVnaXN0ZXIgYXNzaWdubWVudHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gQ2hpcCBJRAord2lyZSBbMTU6MF0gbWFudV9pZCAgPSAgMTYnaDg5NDk7IC8vIEFzY2kgdmFsdWUgb2YgWUkKK3dpcmUgWzc6MF0gY2hpcF9pZCAgID0gIDgnaDAyOword2lyZSBbNzowXSBjaGlwX3JldiAgPSAgOCdoMDE7CisKK2Fzc2lnbiByZWdfMCA9IHttYW51X2lkLGNoaXBfaWQsY2hpcF9yZXZ9OworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgcmVnLTEsIHJlc2V0IHZhbHVlID0gMzInaEE1NUFfQTU1QQorLy8gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitnZW5fMzJiX3JlZyAgIygzMidoQTU1QV9BNTVBKSB1X3JlZ18xCSgKKwkgICAgICAvL0xpc3Qgb2YgSW5wdXRzCisJICAgICAgLnJlc2V0X24gICAgKGhfcmVzZXRfbiAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAobWNsayAgICAgICAgICApLAorCSAgICAgIC5jcyAgICAgICAgIChzd193cl9lbl8xICAgICksCisJICAgICAgLndlICAgICAgICAgKHdyX2JlICAgICAgICAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAoc3dfcmVnX3dkYXRhICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgKHJlZ18xICAgICAgICAgKQorCSAgICAgICk7CisKK2Fzc2lnbiBmdXNlX21oYXJ0aWQgPSByZWdfMTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9naWMgZm9yIGdwaW9fZGF0YV9pbiAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvZ2ljIFszMTowXSBncGlvX2luX2RhdGFfczsKK2xvZ2ljIFszMTowXSBncGlvX2luX2RhdGFfc3M7CisvLyBEb3VibGUgU3luYyB0aGUgZ3BpbyBwaW4gZGF0YSBmb3IgZWRnZSBkZXRlY3Rpb24KK2Fsd2F5cyBAIChwb3NlZGdlIG1jbGsgb3IgbmVnZWRnZSBoX3Jlc2V0X24pCitiZWdpbiAKKyAgaWYgKGhfcmVzZXRfbiA9PSAxJ2IwKSBiZWdpbgorICAgIHJlZ18yICA8PSAnaDAgOworICAgIGdwaW9faW5fZGF0YV9zICA8PSAzMidkMDsKKyAgICBncGlvX2luX2RhdGFfc3MgPD0gMzInZDA7CisgIGVuZAorICBlbHNlIGJlZ2luCisgICAgZ3Bpb19pbl9kYXRhX3MgICA8PSBncGlvX2luX2RhdGE7CisgICAgZ3Bpb19pbl9kYXRhX3NzIDw9IGdwaW9faW5fZGF0YV9zOworICAgIHJlZ18yICAgICAgICAgICA8PSBncGlvX2luX2RhdGFfc3M7CisgIGVuZAorZW5kCisKKworYXNzaWduIGNmZ19ncGlvX2RhdGFfaW4gPSByZWdfMlszMTowXTsgLy8gdG8gYmUgdXNlZCBmb3IgZWRnZSBpbnRlcnJ1cHQgZGV0ZWN0Cithc3NpZ24gZ3Bpb19wcmV2X2luZGF0YSA9IGdwaW9faW5fZGF0YV9zczsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9naWMgZm9yIGNmZ19ncGlvX291dF9kYXRhIAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYXNzaWduIGNmZ19ncGlvX291dF9kYXRhID0gcmVnXzNbMzE6MF07IC8vIGRhdGEgdG8gdGhlIEdQSU8gY29udHJvbCBibGsgCisKK2dlbl8zMmJfcmVnICAjKDMyJ2gwKSB1X3JlZ18zCSgKKwkgICAgICAvL0xpc3Qgb2YgSW5wdXRzCisJICAgICAgLnJlc2V0X24gICAgKGhfcmVzZXRfbiAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAobWNsayAgICAgICAgICApLAorCSAgICAgIC5jcyAgICAgICAgIChzd193cl9lbl8zICAgICksCisJICAgICAgLndlICAgICAgICAgKHdyX2JlICAgICAgICAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAoc3dfcmVnX3dkYXRhICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgKHJlZ18zICAgICAgICAgKQorCSAgICAgICk7CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2dpYyBmb3IgY2ZnX2dwaW9fZGlyX3NlbCAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiBjZmdfZ3Bpb19kaXJfc2VsID0gcmVnXzRbMzE6MF07IC8vIGRhdGEgdG8gdGhlIEdQSU8gTy9QIHBpbnMgCisKK2dlbl8zMmJfcmVnICAjKDMyJ2gwKSB1X3JlZ180CSgKKwkgICAgICAvL0xpc3Qgb2YgSW5wdXRzCisJICAgICAgLnJlc2V0X24gICAgKGhfcmVzZXRfbiAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAobWNsayAgICAgICAgICApLAorCSAgICAgIC5jcyAgICAgICAgIChzd193cl9lbl80ICAgICksCisJICAgICAgLndlICAgICAgICAgKHdyX2JlICAgICAgICAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAoc3dfcmVnX3dkYXRhICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgKHJlZ180ICAgICAgICAgKQorCSAgICAgICk7CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2dpYyBmb3IgY2ZnX2dwaW9fb3V0X3R5cGUgCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithc3NpZ24gY2ZnX2dwaW9fb3V0X3R5cGUgPSByZWdfNVszMTowXTsgLy8gdG8gYmUgdXNlZCBmb3IgcmVhZAorCitnZW5fMzJiX3JlZyAgIygzMidoMCkgdV9yZWdfNQkoCisJICAgICAgLy9MaXN0IG9mIElucHV0cworCSAgICAgIC5yZXNldF9uICAgIChoX3Jlc2V0X24gICAgICksCisJICAgICAgLmNsayAgICAgICAgKG1jbGsgICAgICAgICAgKSwKKwkgICAgICAuY3MgICAgICAgICAoc3dfd3JfZW5fNSAgICApLAorCSAgICAgIC53ZSAgICAgICAgICh3cl9iZSAgICAgICAgICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgKHN3X3JlZ193ZGF0YSAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgIChyZWdfNSAgICAgICAgICkKKwkgICAgICApOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgcmVnLTYKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiAgaXJxX2xpbmVzICAgICA9IHJlZ182WzE1OjBdOyAKK2Fzc2lnbiAgc29mdF9pcnEgICAgICA9IHJlZ182WzE2XTsgCithc3NpZ24gIHVzZXJfaXJxICAgICAgPSByZWdfNlsxOToxN107IAorCisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWc2X2JlMCAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzYgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzBdICAgfX0gICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbNzowXSAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAoaF9yZXNldF9uICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ182Wzc6MF0gICAgICAgICApCisgICAgICAgICAgKTsKKworZ2VuZXJpY19yZWdpc3RlciAjKDMsMCAgKSB1X3JlZzZfYmUxXzEgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7M3tzd193cl9lbl82ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsxXSAgIH19ICAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzEwOjhdICksCisJICAgICAgLnJlc2V0X24gICAgICAgKGhfcmVzZXRfbiAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfNlsxMDo4XSAgICAgICAgKQorICAgICAgICAgICk7CisKKworYXNzaWduIHJlZ182WzE1OjExXSA9IHtncGlvX2ludHIsIGV4dF9pbnRyX2luWzE6MF0sIHVzYl9pbnRyLCBpMmNtX2ludHJ9OworCisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg0LDAgICkgdV9yZWc2X2JlMiAoCisJICAgICAgLndlICAgICAgICAgICAgKHs0e3N3X3dyX2VuXzYgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzJdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVsxOToxNl0pLAorCSAgICAgIC5yZXNldF9uICAgICAgIChoX3Jlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzZbMTk6MTZdICAgICAgICApCisgICAgICAgICAgKTsKKworYXNzaWduIHJlZ182WzMxOjIwXSA9ICcwOworCisvLyAgUmVnaXN0ZXItNworZ2VuXzMyYl9yZWcgICMoMzInaDApIHVfcmVnXzcJKAorCSAgICAgIC8vTGlzdCBvZiBJbnB1dHMKKwkgICAgICAucmVzZXRfbiAgICAoaF9yZXNldF9uICAgICApLAorCSAgICAgIC5jbGsgICAgICAgIChtY2xrICAgICAgICAgICksCisJICAgICAgLmNzICAgICAgICAgKHN3X3dyX2VuXzcgICApLAorCSAgICAgIC53ZSAgICAgICAgICh3cl9iZSAgICAgICAgICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgKHN3X3JlZ193ZGF0YSAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgIChyZWdfNyAgICAgICAgKQorCSAgICAgICk7CisKK2Fzc2lnbiBjZmdfcHVsc2VfMXVzID0gcmVnXzdbOTowXTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9naWMgZm9yIGNmZ19pbnRfc3RhdHVzIAorLy8gQWx3YXlzIHVwZGF0ZSBpbnRfc3RhdHVzLCBldmVuIGlmIG5vIHJlZ2lzdGVyIHdyaXRlIGlzIG9jY3VyaW5nLgorLy8gSW50ZXJydXB0IHBvc3RpbmcgaXMgaGlnaGVyIHByaW9yaXR5IHRoYW4gaW50IGNsZWFyIGJ5IGhvc3QgCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlIFszMTowXSAgY2ZnX2dwaW9faW50X3N0YXR1cyA9IHJlZ185WzMxOjBdOyAvLyB0byBiZSB1c2VkIGZvciByZWFkCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEludGVycnVwdCBTdGF0dXMgR2VuZXJhdGlvbgorLy8gTm90ZTogUmVnXzkgLS0+IEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIsIFdyaXR0aW5nICcxJyB3aWxsIGNsZWFyIHRoZQorLy8gICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0IHN0YXR1cyBiaXQuIFdyaXR0aW5nICcwJyBoYXMgbm8KKy8vICAgICAgICAgICAgICAgICBlZmZlY3QgCisvLyAgICAgICBSZWdfMTAgLS0+IFdyaXR0aW5nIG9uZSB0byB0aGlzIHJlZ2lzdGVyIHdpbGwgc2V0IHRoZSBpbnRlcnJ1cHQgaW4KKy8vICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAocmVnXzkpLCBXcml0dGluZyAnMCcgZG9lcyBub3QgaGFzIGFueQorLy8gICAgICAgICAgICAgICAgICBlZmZlY3QuCisvLy8gQWx3YXlzIHVwZGF0ZSBpbnRfc3RhdHVzLCBldmVuIGlmIG5vIHJlZ2lzdGVyIHdyaXRlIGlzIG9jY3VyaW5nLgorLy8JICAgIEludGVycnVwdCBwb3N0aW5nIGlzIGhpZ2hlciBwcmlvcml0eSB0aGFuIGludCBjbGVhciBieSBob3N0IAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSBbMzE6MF0gZ3Bpb19pbnRfc3RhdHVzID0gcmVnXzk7CQkJCSAgICAgIAorYWx3YXlzIEAocG9zZWRnZSBtY2xrIG9yIG5lZ2VkZ2UgaF9yZXNldF9uKQorYmVnaW4KKyAgIGlmKH5oX3Jlc2V0X24pCisgICBiZWdpbgorICAgICAgcmVnXzlbMzE6MF0gICA8PSAzMidoMDsKKyAgIGVuZAorICAgZWxzZQorICAgYmVnaW4KKyAgICAgIGlmKHN3X3dyX2VuXzkgJiYgd3JfYmVbMF0pCisgICAgICBiZWdpbgorICAgICAgICAgcmVnXzlbNzowXSA8PSAgKCh+c3dfcmVnX3dkYXRhWzc6MF0gJiBncGlvX2ludF9zdGF0dXNbNzowXSkgfCBncGlvX2ludF9ldmVudFs3OjBdKTsKKyAgICAgIGVuZAorICAgICAgZWxzZSBpZihzd193cl9lbl8xMCAmJiB3cl9iZVswXSkgCisgICAgICBiZWdpbgorICAgICAgICAgcmVnXzlbNzowXSA8PSAoKHN3X3JlZ193ZGF0YVs3OjBdIHwgZ3Bpb19pbnRfc3RhdHVzWzc6MF0pIHwgZ3Bpb19pbnRfZXZlbnRbNzowXSk7CisgICAgICBlbmQKKyAgICAgIGVsc2UKKyAgICAgIGJlZ2luCisgICAgICAgICByZWdfOVs3OjBdIDw9ICAgKGdwaW9faW50X3N0YXR1c1s3OjBdIHwgZ3Bpb19pbnRfZXZlbnRbNzowXSk7CisgICAgICBlbmQKKworICAgICAgaWYoc3dfd3JfZW5fOSAmJiB3cl9iZVsxXSkKKyAgICAgIGJlZ2luCisgICAgICAgICByZWdfOVsxNTo4XSA8PSAgKCh+c3dfcmVnX3dkYXRhWzE1OjhdICYgZ3Bpb19pbnRfc3RhdHVzWzE1OjhdKSB8IGdwaW9faW50X2V2ZW50WzE1OjhdKTsKKyAgICAgIGVuZAorICAgICAgZWxzZSBpZihzd193cl9lbl8xMCAmJiB3cl9iZVsxXSkgCisgICAgICBiZWdpbgorICAgICAgICAgcmVnXzlbMTU6OF0gPD0gKChzd19yZWdfd2RhdGFbMTU6OF0gfCBncGlvX2ludF9zdGF0dXNbMTU6OF0pIHwgZ3Bpb19pbnRfZXZlbnRbMTU6OF0pOworICAgICAgZW5kCisgICAgICBlbHNlCisgICAgICBiZWdpbgorICAgICAgICAgcmVnXzlbMTU6OF0gPD0gICAoZ3Bpb19pbnRfc3RhdHVzWzE1OjhdIHwgZ3Bpb19pbnRfZXZlbnRbMTU6OF0pOworICAgICAgZW5kCisKKyAgICAgIGlmKHN3X3dyX2VuXzkgJiYgd3JfYmVbMl0pCisgICAgICBiZWdpbgorICAgICAgICAgcmVnXzlbMjM6MTZdIDw9ICAoKH5zd19yZWdfd2RhdGFbMjM6MTZdICYgZ3Bpb19pbnRfc3RhdHVzWzIzOjE2XSkgfCBncGlvX2ludF9ldmVudFsyMzoxNl0pOworICAgICAgZW5kCisgICAgICBlbHNlIGlmKHN3X3dyX2VuXzEwICYmIHdyX2JlWzJdKSAKKyAgICAgIGJlZ2luCisgICAgICAgICByZWdfOVsyMzoxNl0gPD0gKChzd19yZWdfd2RhdGFbMjM6MTZdIHwgZ3Bpb19pbnRfc3RhdHVzWzIzOjE2XSkgfCBncGlvX2ludF9ldmVudFsyMzoxNl0pOworICAgICAgZW5kCisgICAgICBlbHNlCisgICAgICBiZWdpbgorICAgICAgICAgcmVnXzlbMjM6MTZdIDw9ICAgKGdwaW9faW50X3N0YXR1c1syMzoxNl0gfCBncGlvX2ludF9ldmVudFsyMzoxNl0pOworICAgICAgZW5kCisKKyAgICAgIGlmKHN3X3dyX2VuXzkgJiYgd3JfYmVbM10pCisgICAgICBiZWdpbgorICAgICAgICAgcmVnXzlbMzE6MjRdIDw9ICAoKH5zd19yZWdfd2RhdGFbMzE6MjRdICYgZ3Bpb19pbnRfc3RhdHVzWzMxOjI0XSkgfCBncGlvX2ludF9ldmVudFszMToyNF0pOworICAgICAgZW5kCisgICAgICBlbHNlIGlmKHN3X3dyX2VuXzEwICYmIHdyX2JlWzNdKSAKKyAgICAgIGJlZ2luCisgICAgICAgICByZWdfOVszMToyNF0gPD0gKChzd19yZWdfd2RhdGFbMzE6MjRdIHwgZ3Bpb19pbnRfc3RhdHVzWzMxOjI0XSkgfCBncGlvX2ludF9ldmVudFszMToyNF0pOworICAgICAgZW5kCisgICAgICBlbHNlCisgICAgICBiZWdpbgorICAgICAgICAgcmVnXzlbMzE6MjRdIDw9ICAgKGdwaW9faW50X3N0YXR1c1szMToyNF0gfCBncGlvX2ludF9ldmVudFszMToyNF0pOworICAgICAgZW5kCisgICBlbmQKK2VuZAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZXR1cm5zIHNhbWUgdmFsdWUgYXMgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXNzaWduIHJlZ18xMCA9IHJlZ185OworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9naWMgZm9yIGNmZ19ncGlvX2ludF9tYXNrIDogIEdQSU8gaW50ZXJydXB0IG1hc2sgIAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSBbMzE6MF0gIGNmZ19ncGlvX2ludF9tYXNrID0gcmVnXzExWzMxOjBdOyAvLyB0byBiZSB1c2VkIGZvciByZWFkCisKK2Fzc2lnbiBncGlvX2ludHIgID0gKCB8IChyZWdfOSAmIHJlZ18xMSkgKTsgLy8gaW50ZXJydXB0IHBpbiB0byB0aGUgUklTQworCisKKy8vICBSZWdpc3Rlci0xMQorZ2VuXzMyYl9yZWcgICMoMzInaDApIHVfcmVnXzExCSgKKwkgICAgICAvL0xpc3Qgb2YgSW5wdXRzCisJICAgICAgLnJlc2V0X24gICAgKGhfcmVzZXRfbiAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAobWNsayAgICAgICAgICApLAorCSAgICAgIC5jcyAgICAgICAgIChzd193cl9lbl8xMSAgICksCisJICAgICAgLndlICAgICAgICAgKHdyX2JlICAgICAgICAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAoc3dfcmVnX3dkYXRhICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgKHJlZ18xMSAgICAgICAgKQorCSAgICAgICk7CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2dpYyBmb3IgY2ZnX2dwaW9fcG9zZWRnZV9pbnRfc2VsIDogIEVuYWJsZSBwb3NlZGdlIEdQSU8gaW50ZXJydXB0IAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYXNzaWduICBjZmdfZ3Bpb19wb3NlZGdlX2ludF9zZWwgPSByZWdfMTJbMzE6MF07IC8vIHRvIGJlIHVzZWQgZm9yIHJlYWQKK2dlbl8zMmJfcmVnICAjKDMyJ2gwKSB1X3JlZ18xMgkoCisJICAgICAgLy9MaXN0IG9mIElucHV0cworCSAgICAgIC5yZXNldF9uICAgIChoX3Jlc2V0X24gICAgICksCisJICAgICAgLmNsayAgICAgICAgKG1jbGsgICAgICAgICAgKSwKKwkgICAgICAuY3MgICAgICAgICAoc3dfd3JfZW5fMTIgICApLAorCSAgICAgIC53ZSAgICAgICAgICh3cl9iZSAgICAgICAgICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgKHN3X3JlZ193ZGF0YSAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgIChyZWdfMTIgICAgICAgICkKKwkgICAgICApOworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9naWMgZm9yIGNmZ19ncGlvX25lZ2VkZ2VfaW50X3NlbCA6ICBFbmFibGUgbmVnZWRnZSBHUElPIGludGVycnVwdCAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiBjZmdfZ3Bpb19uZWdlZGdlX2ludF9zZWwgPSByZWdfMTNbMzE6MF07IC8vIHRvIGJlIHVzZWQgZm9yIHJlYWQKK2dlbl8zMmJfcmVnICAjKDMyJ2gwKSB1X3JlZ18xMwkoCisJICAgICAgLy9MaXN0IG9mIElucHV0cworCSAgICAgIC5yZXNldF9uICAgIChoX3Jlc2V0X24gICAgICksCisJICAgICAgLmNsayAgICAgICAgKG1jbGsgICAgICAgICAgKSwKKwkgICAgICAuY3MgICAgICAgICAoc3dfd3JfZW5fMTMgICApLAorCSAgICAgIC53ZSAgICAgICAgICh3cl9iZSAgICAgICAgICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgKHN3X3JlZ193ZGF0YSAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgIChyZWdfMTMgICAgICAgICkKKwkgICAgICApOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2dpYyBmb3IgY2ZnX211bHRpX2Z1bmNfc2VsIDpFbmFibGUgR1BJTyB0byBhY3QgYXMgbXVsdGkgZnVuY3Rpb24gcGlucyAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiAgY2ZnX211bHRpX2Z1bmNfc2VsID0gcmVnXzE0WzMxOjBdOyAvLyB0byBiZSB1c2VkIGZvciByZWFkCisKKworZ2VuXzMyYl9yZWcgICMoMzInaDApIHVfcmVnXzE0CSgKKwkgICAgICAvL0xpc3Qgb2YgSW5wdXRzCisJICAgICAgLnJlc2V0X24gICAgKGhfcmVzZXRfbiAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAobWNsayAgICAgICAgICApLAorCSAgICAgIC5jcyAgICAgICAgIChzd193cl9lbl8xNCAgICksCisJICAgICAgLndlICAgICAgICAgKHdyX2JlICAgICAgICAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAoc3dfcmVnX3dkYXRhICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgKHJlZ18xNCAgICAgICAgKQorCSAgICAgICk7CisKKy8vIFJlZy0xNQorZ2VuXzMyYl9yZWcgICMoMzInaDApIHVfcmVnXzE1CSgKKwkgICAgICAvL0xpc3Qgb2YgSW5wdXRzCisJICAgICAgLnJlc2V0X24gICAgKGhfcmVzZXRfbiAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAobWNsayAgICAgICAgICApLAorCSAgICAgIC5jcyAgICAgICAgIChzd193cl9lbl8xNSAgICksCisJICAgICAgLndlICAgICAgICAgKHdyX2JlICAgICAgICAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAoc3dfcmVnX3dkYXRhICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgKHJlZ18xNSAgICAgICAgKQorCSAgICAgICk7CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2dpYyBmb3IgUFdNLTAgQ29uZmlnCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithc3NpZ24gIGNmZ19wd20wX2xvdyAgPSByZWdfMTZbMTU6MF07ICAvLyBsb3cgcGVyaW9kIG9mIHcvZiAKK2Fzc2lnbiAgY2ZnX3B3bTBfaGlnaCA9IHJlZ18xNlszMToxNl07IC8vIGhpZ2ggcGVyaW9kIG9mIHcvZiAKKworZ2VuXzMyYl9yZWcgICMoMzInaDApIHVfcmVnXzE2CSgKKwkgICAgICAvL0xpc3Qgb2YgSW5wdXRzCisJICAgICAgLnJlc2V0X24gICAgKGhfcmVzZXRfbiAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAobWNsayAgICAgICAgICApLAorCSAgICAgIC5jcyAgICAgICAgIChzd193cl9lbl8xNiAgICksCisJICAgICAgLndlICAgICAgICAgKHdyX2JlICAgICAgICAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAoc3dfcmVnX3dkYXRhICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgKHJlZ18xNiAgICAgICAgKQorCSAgICAgICk7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9naWMgZm9yIFBXTS0xIENvbmZpZworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYXNzaWduICBjZmdfcHdtMV9sb3cgID0gcmVnXzE3WzE1OjBdOyAgLy8gbG93IHBlcmlvZCBvZiB3L2YgCithc3NpZ24gIGNmZ19wd20xX2hpZ2ggPSByZWdfMTdbMzE6MTZdOyAvLyBoaWdoIHBlcmlvZCBvZiB3L2YgCitnZW5fMzJiX3JlZyAgIygzMidoMCkgdV9yZWdfMTcJKAorCSAgICAgIC8vTGlzdCBvZiBJbnB1dHMKKwkgICAgICAucmVzZXRfbiAgICAoaF9yZXNldF9uICAgICApLAorCSAgICAgIC5jbGsgICAgICAgIChtY2xrICAgICAgICAgICksCisJICAgICAgLmNzICAgICAgICAgKHN3X3dyX2VuXzE3ICAgKSwKKwkgICAgICAud2UgICAgICAgICAod3JfYmUgICAgICAgICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgIChzd19yZWdfd2RhdGEgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAocmVnXzE3ICAgICAgICAgKQorCSAgICAgICk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvZ2ljIGZvciBQV00tMiBDb25maWcKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiAgY2ZnX3B3bTJfbG93ICA9IHJlZ18xOFsxNTowXTsgIC8vIGxvdyBwZXJpb2Qgb2Ygdy9mIAorYXNzaWduICBjZmdfcHdtMl9oaWdoID0gcmVnXzE4WzMxOjE2XTsgLy8gaGlnaCBwZXJpb2Qgb2Ygdy9mIAorZ2VuXzMyYl9yZWcgICMoMzInaDApIHVfcmVnXzE4CSgKKwkgICAgICAvL0xpc3Qgb2YgSW5wdXRzCisJICAgICAgLnJlc2V0X24gICAgKGhfcmVzZXRfbiAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAobWNsayAgICAgICAgICApLAorCSAgICAgIC5jcyAgICAgICAgIChzd193cl9lbl8xOCAgICksCisJICAgICAgLndlICAgICAgICAgKHdyX2JlICAgICAgICAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAoc3dfcmVnX3dkYXRhICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgKHJlZ18xOCAgICAgICAgKQorCSAgICAgICk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvZ2ljIGZvciBQV00tMyBDb25maWcKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiAgY2ZnX3B3bTNfbG93ICA9IHJlZ18xOVsxNTowXTsgIC8vIGxvdyBwZXJpb2Qgb2Ygdy9mIAorYXNzaWduICBjZmdfcHdtM19oaWdoID0gcmVnXzE5WzMxOjE2XTsgLy8gaGlnaCBwZXJpb2Qgb2Ygdy9mIAorZ2VuXzMyYl9yZWcgICMoMzInaDApIHVfcmVnXzE5CSgKKwkgICAgICAvL0xpc3Qgb2YgSW5wdXRzCisJICAgICAgLnJlc2V0X24gICAgKGhfcmVzZXRfbiAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAobWNsayAgICAgICAgICApLAorCSAgICAgIC5jcyAgICAgICAgIChzd193cl9lbl8xOSAgICksCisJICAgICAgLndlICAgICAgICAgKHdyX2JlICAgICAgICAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAoc3dfcmVnX3dkYXRhICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgKHJlZ18xOSAgICAgICAgKQorCSAgICAgICk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvZ2ljIGZvciBQV00tNCBDb25maWcKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiAgY2ZnX3B3bTRfbG93ICA9IHJlZ18yMFsxNTowXTsgIC8vIGxvdyBwZXJpb2Qgb2Ygdy9mIAorYXNzaWduICBjZmdfcHdtNF9oaWdoID0gcmVnXzIwWzMxOjE2XTsgLy8gaGlnaCBwZXJpb2Qgb2Ygdy9mIAorCitnZW5fMzJiX3JlZyAgIygzMidoMCkgdV9yZWdfMjAJKAorCSAgICAgIC8vTGlzdCBvZiBJbnB1dHMKKwkgICAgICAucmVzZXRfbiAgICAoaF9yZXNldF9uICAgICApLAorCSAgICAgIC5jbGsgICAgICAgIChtY2xrICAgICAgICAgICksCisJICAgICAgLmNzICAgICAgICAgKHN3X3dyX2VuXzIwICAgKSwKKwkgICAgICAud2UgICAgICAgICAod3JfYmUgICAgICAgICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgIChzd19yZWdfd2RhdGEgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAocmVnXzIwICAgICAgICApCisJICAgICAgKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9naWMgZm9yIFBXTS01IENvbmZpZworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYXNzaWduICBjZmdfcHdtNV9sb3cgID0gcmVnXzIxWzE1OjBdOyAgLy8gbG93IHBlcmlvZCBvZiB3L2YgCithc3NpZ24gIGNmZ19wd201X2hpZ2ggPSByZWdfMjFbMzE6MTZdOyAvLyBoaWdoIHBlcmlvZCBvZiB3L2YgCisKK2dlbl8zMmJfcmVnICAjKDMyJ2gwKSB1X3JlZ18yMQkoCisJICAgICAgLy9MaXN0IG9mIElucHV0cworCSAgICAgIC5yZXNldF9uICAgIChoX3Jlc2V0X24gICAgICksCisJICAgICAgLmNsayAgICAgICAgKG1jbGsgICAgICAgICAgKSwKKwkgICAgICAuY3MgICAgICAgICAoc3dfd3JfZW5fMjEgICApLAorCSAgICAgIC53ZSAgICAgICAgICh3cl9iZSAgICAgICAgICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgKHN3X3JlZ193ZGF0YSAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgIChyZWdfMjEgICAgICAgKQorCSAgICAgICk7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU29mdHdhcmUgUmVnLTEgOiBBU0NJIFJlcHJlc2VudGF0aW9uIG9mIFJJU0MgPSAzMidoODI3M184MzQzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnZW5fMzJiX3JlZyAgIygzMidoODI3M184MzQzKSB1X3JlZ18yMgkoCisJICAgICAgLy9MaXN0IG9mIElucHV0cworCSAgICAgIC5yZXNldF9uICAgIChoX3Jlc2V0X24gICAgICksCisJICAgICAgLmNsayAgICAgICAgKG1jbGsgICAgICAgICAgKSwKKwkgICAgICAuY3MgICAgICAgICAoc3dfd3JfZW5fMjIgICApLAorCSAgICAgIC53ZSAgICAgICAgICh3cl9iZSAgICAgICAgICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgKHN3X3JlZ193ZGF0YSAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgIChyZWdfMjIgICAgICAgKQorCSAgICAgICk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFNvZnR3YXJlIFJlZy0yLCBSZWxlYXNlIGRhdGU6IDxEQVk+PE1PTlRIPjxZRUFSPgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2VuXzMyYl9yZWcgICMoMzInaDE0MDJfMjAyMikgdV9yZWdfMjMJKAorCSAgICAgIC8vTGlzdCBvZiBJbnB1dHMKKwkgICAgICAucmVzZXRfbiAgICAoaF9yZXNldF9uICAgICApLAorCSAgICAgIC5jbGsgICAgICAgIChtY2xrICAgICAgICAgICksCisJICAgICAgLmNzICAgICAgICAgKHN3X3dyX2VuXzIzICAgKSwKKwkgICAgICAud2UgICAgICAgICAod3JfYmUgICAgICAgICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgIChzd19yZWdfd2RhdGEgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAocmVnXzIzICAgICAgICkKKwkgICAgICApOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTb2Z0d2FyZSBSZWctMzogUG9qZWN0IFJldmlzb24gMy4zID0gMDAwMzQwMAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2VuXzMyYl9yZWcgICMoMzInaDAwMDNfNDAwMCkgdV9yZWdfMjQJKAorCSAgICAgIC8vTGlzdCBvZiBJbnB1dHMKKwkgICAgICAucmVzZXRfbiAgICAoaF9yZXNldF9uICAgICApLAorCSAgICAgIC5jbGsgICAgICAgIChtY2xrICAgICAgICAgICksCisJICAgICAgLmNzICAgICAgICAgKHN3X3dyX2VuXzI0ICAgKSwKKwkgICAgICAud2UgICAgICAgICAod3JfYmUgICAgICAgICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgIChzd19yZWdfd2RhdGEgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAocmVnXzI0ICAgICAgICkKKwkgICAgICApOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTb2Z0d2FyZSBSZWctNAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2VuXzMyYl9yZWcgICMoMzInaDApIHVfcmVnXzI1CSgKKwkgICAgICAvL0xpc3Qgb2YgSW5wdXRzCisJICAgICAgLnJlc2V0X24gICAgKGhfcmVzZXRfbiAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAobWNsayAgICAgICAgICApLAorCSAgICAgIC5jcyAgICAgICAgIChzd193cl9lbl8yNSAgICksCisJICAgICAgLndlICAgICAgICAgKHdyX2JlICAgICAgICAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAoc3dfcmVnX3dkYXRhICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgKHJlZ18yNSAgICAgICApCisJICAgICAgKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU29mdHdhcmUgUmVnLTUKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dlbl8zMmJfcmVnICAjKDMyJ2gwKSB1X3JlZ18yNgkoCisJICAgICAgLy9MaXN0IG9mIElucHV0cworCSAgICAgIC5yZXNldF9uICAgIChoX3Jlc2V0X24gICAgICksCisJICAgICAgLmNsayAgICAgICAgKG1jbGsgICAgICAgICAgKSwKKwkgICAgICAuY3MgICAgICAgICAoc3dfd3JfZW5fMjYgICApLAorCSAgICAgIC53ZSAgICAgICAgICh3cl9iZSAgICAgICAgICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgKHN3X3JlZ193ZGF0YSAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgIChyZWdfMjYgICAgICAgKQorCSAgICAgICk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFNvZnR3YXJlIFJlZy02CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnZW5fMzJiX3JlZyAgIygzMidoMCkgdV9yZWdfMjcJKAorCSAgICAgIC8vTGlzdCBvZiBJbnB1dHMKKwkgICAgICAucmVzZXRfbiAgICAoaF9yZXNldF9uICAgICApLAorCSAgICAgIC5jbGsgICAgICAgIChtY2xrICAgICAgICAgICksCisJICAgICAgLmNzICAgICAgICAgKHN3X3dyX2VuXzI3ICAgKSwKKwkgICAgICAud2UgICAgICAgICAod3JfYmUgICAgICAgICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgIChzd19yZWdfd2RhdGEgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAocmVnXzI3ICAgICAgICkKKwkgICAgICApOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgcmVnLTI4CisvLyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsb2dpYyBbMzE6MF0gY2ZnX2Jpc3RfY3RybF8xOworCitnZW5fMzJiX3JlZyAgIygzMidoMCkgdV9yZWdfMjgJKAorCSAgICAgIC8vTGlzdCBvZiBJbnB1dHMKKwkgICAgICAucmVzZXRfbiAgICAoaF9yZXNldF9uICAgICApLAorCSAgICAgIC5jbGsgICAgICAgIChtY2xrICAgICAgICAgICksCisJICAgICAgLmNzICAgICAgICAgKHN3X3dyX2VuXzI4ICAgKSwKKwkgICAgICAud2UgICAgICAgICAod3JfYmUgICAgICAgICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgIChzd19yZWdfd2RhdGEgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAoY2ZnX2Jpc3RfY3RybF8xWzMxOjBdICApCisJICAgICAgKTsKKworCisKK2Fzc2lnbiBiaXN0X2VuICAgICAgICAgICAgID0gY2ZnX2Jpc3RfY3RybF8xWzBdOworYXNzaWduIGJpc3RfcnVuICAgICAgICAgICAgPSBjZmdfYmlzdF9jdHJsXzFbMV07Cithc3NpZ24gYmlzdF9sb2FkICAgICAgICAgICA9IGNmZ19iaXN0X2N0cmxfMVsyXTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgIHJlZy0yOQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbG9naWMgWzMxOjBdIGNmZ19iaXN0X3N0YXR1c18xOworCithc3NpZ24gY2ZnX2Jpc3Rfc3RhdHVzXzEgPSB7ICBiaXN0X2Vycm9yX2NudDMsIDEnYjAsIGJpc3RfY29ycmVjdFszXSwgYmlzdF9lcnJvclszXSwgYmlzdF9kb25lLAorCSAgICAgICAgICAgICAgICAgICAgICBiaXN0X2Vycm9yX2NudDIsIDEnYjAsIGJpc3RfY29ycmVjdFsyXSwgYmlzdF9lcnJvclsyXSwgYmlzdF9kb25lLAorCSAgICAgICAgICAgICAgICAgICAgICBiaXN0X2Vycm9yX2NudDEsIDEnYjAsIGJpc3RfY29ycmVjdFsxXSwgYmlzdF9lcnJvclsxXSwgYmlzdF9kb25lLAorCSAgICAgICAgICAgICAgICAgICAgICBiaXN0X2Vycm9yX2NudDAsIDEnYjAsIGJpc3RfY29ycmVjdFswXSwgYmlzdF9lcnJvclswXSwgYmlzdF9kb25lCisJCQkgICB9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgIHJlZy0zMCA9PiBXcml0ZSB0byBTZXJhaWwgSS9GCisvLyAgIHJlZy0zMSA9PiBSRUFEICBmcm9tIFNlcmFpbCBJL0YKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvZ2ljICAgICAgICBiaXN0X3NkaV9pbnQ7Citsb2dpYyAgICAgICAgYmlzdF9zaGlmdF9pbnQ7Citsb2dpYyAgICAgICAgYmlzdF9zZG9faW50OworbG9naWMgWzMxOjBdIHNlcmFpbF9kb3V0OworCithc3NpZ24gYmlzdF9zZG9faW50ID0gYmlzdF9zZG87Cithc3NpZ24gIGJpc3Rfc2hpZnQgPSBiaXN0X3NoaWZ0X2ludDsKK2Fzc2lnbiAgYmlzdF9zZGkgICA9IGJpc3Rfc2RpX2ludCA7CisKK3Nlcl9pbmZfMzJiIHVfc2VyX2ludGYKKyAgICAgICAoCisKKyAgICAvLyBNYXN0ZXIgUG9ydAorICAgICAgIC5yc3RfbiAgICAgICAoaF9yZXNldF9uKSwgIC8vIFJlZ3VsYXIgUmVzZXQgc2lnbmFsCisgICAgICAgLmNsayAgICAgICAgIChtY2xrKSwgIC8vIFN5c3RlbSBjbG9jaworICAgICAgIC5yZWdfd3IgICAgICAoc3dfd3JfZW5fMzAgJiB3Yl9yZXFfcGVkZ2UpLCAgLy8gV3JpdGUgUmVxdWVzdAorICAgICAgIC5yZWdfcmQgICAgICAoc3dfcmRfZW5fMzEgJiB3Yl9yZXFfcGVkZ2UpLCAgLy8gUmVhZCBSZXF1ZXN0CisgICAgICAgLnJlZ193ZGF0YSAgIChzd19yZWdfd2RhdGEpICwgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgLnJlZ19yZGF0YSAgIChzZXJhaWxfZG91dCksICAvLyBkYXRhIGlucHV0CisgICAgICAgLnJlZ19hY2sgICAgIChzZXJpYWxfYWNrKSwgIC8vIGFja25vd2xlZ2VtZW50CisKKyAgICAvLyBTbGF2ZSBQb3J0CisgICAgICAgLnNkaSAgICAgICAgIChiaXN0X3NkaV9pbnQpLCAgICAvLyBTZXJpYWwgU0RJCisgICAgICAgLnNoaWZ0ICAgICAgIChiaXN0X3NoaWZ0X2ludCksICAvLyBTaGlmdCBTaWduYWwKKyAgICAgICAuc2RvICAgICAgICAgKGJpc3Rfc2RvX2ludCkgLy8gU2VyaWFsIFNETworCisgICAgKTsKKworCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVnaXN0ZXIgUmVhZCBQYXRoIE11bHRpcGxleGVyIGluc3RhbnRpYXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWx3YXlzX2NvbWIKK2JlZ2luIAorICByZWdfb3V0IFszMTowXSA9IDMyJ2gwOworCisgIGNhc2UgKHN3X2FkZHIgWzQ6MF0pCisgICAgNSdiMDAwMDAgOiByZWdfb3V0IFszMTowXSA9IHJlZ18wIFszMTowXTsgICAgIAorICAgIDUnYjAwMDAxIDogcmVnX291dCBbMzE6MF0gPSByZWdfMSBbMzE6MF07ICAgIAorICAgIDUnYjAwMDEwIDogcmVnX291dCBbMzE6MF0gPSByZWdfMiBbMzE6MF07ICAgICAKKyAgICA1J2IwMDAxMSA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzMgWzMxOjBdOyAgICAKKyAgICA1J2IwMDEwMCA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzQgWzMxOjBdOyAgICAKKyAgICA1J2IwMDEwMSA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzUgWzMxOjBdOyAgICAKKyAgICA1J2IwMDExMCA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzYgWzMxOjBdOyAgICAKKyAgICA1J2IwMDExMSA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzcgWzMxOjBdOyAgICAKKyAgICA1J2IwMTAwMCA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzggWzMxOjBdOyAgICAKKyAgICA1J2IwMTAwMSA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzkgWzMxOjBdOyAgICAKKyAgICA1J2IwMTAxMCA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzEwIFszMTowXTsgICAKKyAgICA1J2IwMTAxMSA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzExIFszMTowXTsgICAKKyAgICA1J2IwMTEwMCA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzEyIFszMTowXTsgICAKKyAgICA1J2IwMTEwMSA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzEzIFszMTowXTsKKyAgICA1J2IwMTExMCA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzE0IFszMTowXTsKKyAgICA1J2IwMTExMSA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzE1IFszMTowXTsgCisgICAgNSdiMTAwMDAgOiByZWdfb3V0IFszMTowXSA9IHJlZ18xNiBbMzE6MF07CisgICAgNSdiMTAwMDEgOiByZWdfb3V0IFszMTowXSA9IHJlZ18xNyBbMzE6MF07CisgICAgNSdiMTAwMTAgOiByZWdfb3V0IFszMTowXSA9IHJlZ18xOCBbMzE6MF07CisgICAgNSdiMTAwMTEgOiByZWdfb3V0IFszMTowXSA9IHJlZ18xOSBbMzE6MF07CisgICAgNSdiMTAxMDAgOiByZWdfb3V0IFszMTowXSA9IHJlZ18yMCBbMzE6MF07CisgICAgNSdiMTAxMDEgOiByZWdfb3V0IFszMTowXSA9IHJlZ18yMSBbMzE6MF07CisgICAgNSdiMTAxMTAgOiByZWdfb3V0IFszMTowXSA9IHJlZ18yMiBbMzE6MF07CisgICAgNSdiMTAxMTEgOiByZWdfb3V0IFszMTowXSA9IHJlZ18yMyBbMzE6MF07CisgICAgNSdiMTEwMDAgOiByZWdfb3V0IFszMTowXSA9IHJlZ18yNCBbMzE6MF07CisgICAgNSdiMTEwMDEgOiByZWdfb3V0IFszMTowXSA9IHJlZ18yNSBbMzE6MF07CisgICAgNSdiMTEwMTAgOiByZWdfb3V0IFszMTowXSA9IHJlZ18yNiBbMzE6MF07CisgICAgNSdiMTEwMTEgOiByZWdfb3V0IFszMTowXSA9IHJlZ18yNyBbMzE6MF07CisgICAgNSdiMTExMDAgOiByZWdfb3V0IFszMTowXSA9IGNmZ19iaXN0X2N0cmxfMSBbMzE6MF07CisgICAgNSdiMTExMDEgOiByZWdfb3V0IFszMTowXSA9IGNmZ19iaXN0X3N0YXR1c18xIFszMTowXTsKKyAgICA1J2IxMTExMCA6IHJlZ19vdXQgWzMxOjBdID0gc2VyYWlsX2RvdXQgWzMxOjBdOyAvLyBQcmV2aW91cyBTaGlmdCBEYXRhCisgICAgNSdiMTExMTEgOiByZWdfb3V0IFszMTowXSA9IHNlcmFpbF9kb3V0IFszMTowXTsgLy8gTGF0ZXN0IFNoaWZ0IERhdGEKKyAgICBkZWZhdWx0ICA6IHJlZ19vdXQgWzMxOjBdID0gMzInaDA7CisgIGVuZGNhc2UKK2VuZAorCisKK2VuZG1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9waW5tdXgvc3JjL3B3bS5zdiBiL3Zlcmlsb2cvcnRsL3Bpbm11eC9zcmMvcHdtLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMzA3NzIKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9waW5tdXgvc3JjL3B3bS5zdgpAQCAtMCwwICsxLDQ0IEBACisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUFdNIHdhdmVmb3JtIHBlcmlvZDogIDEwMDAvKChjZmdfcHdtX2hpZ2grMSkgKyAoY2ZnX3B3bV9sb3crMSkpCisvLyBGb3IgMSBTZWNvbmQgd2l0aCBEdXR5IGN5Y2xlIDUwID0gICAxMDAwLygoNDk5KzEpICsgKDQ5OSsxKSkKKy8vIEZvciAxIFNlY29uZCB3aXRoIDFtcyBPbiBhbmQgOTk5bXMgT2ZmID0gIDEwMDAvKCgwKzEpICsgKDk5OCsxKSkKKy8vIFRpbWluZyBSdW4ncyB3aXRoIDEgTWlsaXNlY29uZCBwdWxzZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZSBwd20oCisJb3V0cHV0ICBsb2dpYyAgICAgICAgIHdhdmVmb3JtLAorCisJaW5wdXQgIGxvZ2ljICAgICAgICAgaF9yZXNldF9uLAorCWlucHV0ICBsb2dpYyAgICAgICAgIG1jbGssCisJaW5wdXQgIGxvZ2ljICAgICAgICAgcHVsc2UxbV9tY2xrLAorCWlucHV0ICBsb2dpYyAgICAgICAgIGNmZ19wd21fZW5iLAorCWlucHV0ICBsb2dpYyBbMTU6MF0gIGNmZ19wd21faGlnaCwKKwlpbnB1dCAgbG9naWMgWzE1OjBdICBjZmdfcHdtX2xvdworKTsKKworbG9naWMgWzE1OjBdICBwd21fY250ICA7IC8vIFBXTSBvbi9vZmYgY291bnRlcgorCisKK2Fsd2F5cyBAKHBvc2VkZ2UgbWNsayBvciBuZWdlZGdlIGhfcmVzZXRfbikKK2JlZ2luIAorICAgaWYgKCB+aF9yZXNldF9uICkKKyAgIGJlZ2luCisgICAgICBwd21fY250ICA8PSAxNidoMDsKKyAgICAgIHdhdmVmb3JtIDw9IDEnYjA7CisgICBlbmQKKyAgIGVsc2UgaWYgKCBwdWxzZTFtX21jbGsgICYmIGNmZ19wd21fZW5iKQorICAgYmVnaW4gCisgICAgICBpZiAoIHB3bV9jbnQgPT0gMTYnaDAgJiYgd2F2ZWZvcm0gID09IDEnYjApIGJlZ2luCisgICAgICAgICBwd21fY250ICAgICAgIDw9IGNmZ19wd21faGlnaDsKKyAgICAgICAgIHdhdmVmb3JtICAgICAgPD0gfndhdmVmb3JtOworICAgICAgZW5kIGVsc2UgaWYgKCBwd21fY250ID09IDE2J2gwICYmIHdhdmVmb3JtICA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgcHdtX2NudCAgICAgICA8PSBjZmdfcHdtX2xvdzsKKyAgICAgICAgIHdhdmVmb3JtICAgICAgPD0gfndhdmVmb3JtOworICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgCSAgIHB3bV9jbnQgPD0gcHdtX2NudCAtIDE7CisgICAgICBlbmQKKyAgIGVuZAorZW5kIAorCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3Nhcl9hZGMvQUNNUC5zdiBiL3Zlcmlsb2cvcnRsL3Nhcl9hZGMvQUNNUC5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjU4ZjQyCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvc2FyX2FkYy9BQ01QLnN2CkBAIC0wLDAgKzEsMTAzIEBACittb2R1bGUgQUNNUCgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIGlucHV0IHdpcmUgdmNjZDIsCisgICAgaW5wdXQgd2lyZSB2c3NkMiwgCitgZW5kaWYgCisgICAgaW5wdXQgICB3aXJlIGNsaywKKyAgICBpbnB1dCAgIHdpcmUgSU5QLAorICAgIGlucHV0ICAgd2lyZSBJTk4sCisgICAgaW5wdXQgICB3aXJlIFZERCwKKyAgICBpbnB1dCAgIHdpcmUgVlNTLAorICAgIG91dHB1dCAgd2lyZSBRICAgIAorKTsKKworYGlmZGVmIEFDTVBfRlVOQ1RJT05BTAorCisgICAgYXNzaWduIFEgPSBJTlAgPiBJTk4gOworYGVsc2UgCisKKyAgICB3aXJlICAgIGNsa2I7CisgICAgd2lyZSAgICBuZXQxLCAKKyAgICAgICAgICAgIG5ldDIsCisgICAgICAgICAgICBuZXQzLAorICAgICAgICAgICAgbmV0NCwKKyAgICAgICAgICAgIG5ldDUsCisgICAgICAgICAgICBuZXQ2LAorICAgICAgICAgICAgbmV0NzsKKyAgICAKKyAgICBza3kxMzBfZmRfc2NfaGRfX2ludl8xIHgxNSAoCisgICAgYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgIC5WUFdSKFZQV1IpLAorICAgICAgICAuVkdORChWR05EKSwgCisgICAgICAgIC5WUEIoVlBXUiksCisgICAgICAgIC5WTkIoVkdORCksCisgICAgYGVuZGlmIAorICAgICAgICAuQShjbGspLCAuWShjbGtiKSk7CisgICAgc2t5MTMwX2ZkX3NjX2hkX19hMjIxb2lfMSB4NyAoCisgICAgYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgIC5WUFdSKFZQV1IpLAorICAgICAgICAuVkdORChWR05EKSwgCisgICAgICAgIC5WUEIoVlBXUiksCisgICAgICAgIC5WTkIoVkdORCksCisgICAgYGVuZGlmIAorICAgICAgICAuQTEoSU5QKSwgLkEyKElOUCksIC5CMShjbGtiKSwgLkIyKFZERCksIC5DMShuZXQyKSwgLlkobmV0MSkpOyAgICAgCisgICAgc2t5MTMwX2ZkX3NjX2hkX19hMjIxb2lfMSB4OCAoCisgICAgYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgIC5WUFdSKFZQV1IpLAorICAgICAgICAuVkdORChWR05EKSwgCisgICAgICAgIC5WUEIoVlBXUiksCisgICAgICAgIC5WTkIoVkdORCksCisgICAgYGVuZGlmIAorICAgICAgICAuQTEoSU5OKSwgLkEyKElOTiksIC5CMShjbGtiKSwgLkIyKFZERCksIC5DMShuZXQxKSwgLlkobmV0MikpOyAgCisgICAgc2t5MTMwX2ZkX3NjX2hkX19pbnZfMSB4MiAoCisgICAgYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgIC5WUFdSKFZQV1IpLAorICAgICAgICAuVkdORChWR05EKSwgCisgICAgICAgIC5WUEIoVlBXUiksCisgICAgICAgIC5WTkIoVkdORCksCisgICAgYGVuZGlmIAorICAgICAgICAuQShuZXQzKSwgLlkobmV0NikpOworICAgIHNreTEzMF9mZF9zY19oZF9faW52XzEgeDMgKAorICAgIGBpZmRlZiBVU0VfUE9XRVJfUElOUworICAgICAgICAuVlBXUihWUFdSKSwKKyAgICAgICAgLlZHTkQoVkdORCksIAorICAgICAgICAuVlBCKFZQV1IpLAorICAgICAgICAuVk5CKFZHTkQpLAorICAgIGBlbmRpZiAKKyAgICAgICAgLkEobmV0NCksIC5ZKG5ldDUpKTsKKyAgICBza3kxMzBfZmRfc2NfaGRfX28yMjFhaV8xIHg2ICgKKyAgICBgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgLlZQV1IoVlBXUiksCisgICAgICAgIC5WR05EKFZHTkQpLCAKKyAgICAgICAgLlZQQihWUFdSKSwKKyAgICAgICAgLlZOQihWR05EKSwKKyAgICBgZW5kaWYgCisgICAgICAgIC5BMShJTlApLCAuQTIoSU5QKSwgLkIxKGNsayksIC5CMihWU1MpLCAuQzEobmV0NCksIC5ZKG5ldDMpKTsKKyAgICBza3kxMzBfZmRfc2NfaGRfX28yMjFhaV8xIHg5ICgKKyAgICBgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgLlZQV1IoVlBXUiksCisgICAgICAgIC5WR05EKFZHTkQpLCAKKyAgICAgICAgLlZQQihWUFdSKSwKKyAgICAgICAgLlZOQihWR05EKSwKKyAgICBgZW5kaWYgCisgICAgICAgIC5BMShJTk4pLCAuQTIoSU5OKSwgLkIxKGNsayksIC5CMihWU1MpLCAuQzEobmV0MyksIC5ZKG5ldDQpKTsKKyAgICBza3kxMzBfZmRfc2NfaGRfX25vcjNfMSB4MTAgKAorICAgIGBpZmRlZiBVU0VfUE9XRVJfUElOUworICAgICAgICAuVlBXUihWUFdSKSwKKyAgICAgICAgLlZHTkQoVkdORCksIAorICAgICAgICAuVlBCKFZQV1IpLAorICAgICAgICAuVk5CKFZHTkQpLAorICAgIGBlbmRpZiAKKyAgICAgICAgLkEobmV0NSksIC5CKG5ldDEpLCAuQyhuZXQ3KSwgLlkoUSkpOworICAgIHNreTEzMF9mZF9zY19oZF9fbm9yM18xIHgxMSAoCisgICAgYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgIC5WUFdSKFZQV1IpLAorICAgICAgICAuVkdORChWR05EKSwKKyAgICAgICAgLlZQQihWUFdSKSwKKyAgICAgICAgLlZOQihWR05EKSwgCisgICAgYGVuZGlmIAorICAgICAgICAuQShRKSwgLkIobmV0NiksIC5DKG5ldDIpLCAuWShuZXQ3KSk7CisgICAgCitgZW5kaWYKKworZW5kbW9kdWxlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc2FyX2FkYy9BQ01QX0hWTC52IGIvdmVyaWxvZy9ydGwvc2FyX2FkYy9BQ01QX0hWTC52Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0M2NkNmUKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zYXJfYWRjL0FDTVBfSFZMLnYKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgICAgQW4gYW5hbG9nIGNvbXBhcmF0b3IgdXNpbmcgSFZMIGNlbGxzCisqLworCittb2R1bGUgQUNNUF9IVkwoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICBpbnB1dCB3aXJlIHZjY2QyLAkKKyAgICBpbnB1dCB3aXJlIHZzc2QyLAkKK2BlbmRpZgorICAgIGlucHV0ICAgd2lyZSBjbGssCisgICAgaW5wdXQgICB3aXJlIElOUCwKKyAgICBpbnB1dCAgIHdpcmUgSU5OLAorICAgIG91dHB1dCAgd2lyZSBRICAgIAorKTsKKyAgICB3aXJlIGNsa2I7CisgICAgd2lyZSBRMWIsIFExOworICAgIHdpcmUgUTJiLCBRMjsKKyAgICB3aXJlIFFiOworCisgICAgc2t5MTMwX2ZkX3NjX2h2bF9faW52XzEgeDAgKAorICAgICAgICAuWShjbGtiKSwKKyAgICAgICAgLkEoY2xrKQorICAgICk7ICAgIAorCisgICAgc2t5MTMwX2ZkX3NjX2h2bF9fbm9yM18xIHg1KAorICAgICAgICAuWShRKSwKKyAgICAgICAgLkEoUTFiKSwKKyAgICAgICAgLkIoUTJiKSwKKyAgICAgICAgLkMoUWIpCisgICAgKTsKKworICAgIHNreTEzMF9mZF9zY19odmxfX25vcjNfMSB4NigKKyAgICAgICAgLlkoUWIpLAorICAgICAgICAuQShRMSksCisgICAgICAgIC5CKFEyKSwKKyAgICAgICAgLkMoUSkKKyAgICApOworCisgICAgbGF0Y2hfbmFuZDMgeDEgKAorICAgICAgICAuQ0xLKGNsayksIAorICAgICAgICAuVlAoSU5QKSwgCisgICAgICAgIC5WTihJTk4pLAorICAgICAgICAuUShRMSksCisgICAgICAgIC5RYihRMWIpIAorICAgICk7CisKKyAgICBsYXRjaF9ub3IzIHgyICgKKyAgICAgICAgLkNMSyhjbGtiKSwgCisgICAgICAgIC5WUChJTlApLCAKKyAgICAgICAgLlZOKElOTiksCisgICAgICAgIC5RKFEyKSwKKyAgICAgICAgLlFiKFEyYikgCisgICAgKTsKKworZW5kbW9kdWxlCisKK21vZHVsZSBsYXRjaF9ub3IzICgKKyAgICBpbnB1dCAgIHdpcmUgQ0xLLCAKKyAgICBpbnB1dCAgIHdpcmUgVlAsIAorICAgIGlucHV0ICAgd2lyZSBWTiwKKyAgICBvdXRwdXQgIHdpcmUgUSwKKyAgICBvdXRwdXQgIHdpcmUgUWIgCispOworCisgICAgc2t5MTMwX2ZkX3NjX2h2bF9fbm9yM18xIHgxKAorICAgICAgICAuWShRYiksCisgICAgICAgIC5BKENMSyksCisgICAgICAgIC5CKFZQKSwKKyAgICAgICAgLkMoUSkKKyAgICApOworICAgIHNreTEzMF9mZF9zY19odmxfX25vcjNfMSB4MigKKyAgICAgICAgLlkoUSksCisgICAgICAgIC5BKENMSyksCisgICAgICAgIC5CKFZOKSwKKyAgICAgICAgLkMoUWIpCisgICAgKTsKKyAgICAKK2VuZG1vZHVsZQorCittb2R1bGUgbGF0Y2hfbmFuZDMgKAorICAgIGlucHV0ICAgd2lyZSBDTEssIAorICAgIGlucHV0ICAgd2lyZSBWUCwgCisgICAgaW5wdXQgICB3aXJlIFZOLAorICAgIG91dHB1dCAgd2lyZSBRLAorICAgIG91dHB1dCAgd2lyZSBRYiAKKyk7CisgICAgd2lyZSBRMCwgUTBiOworCisgICAgc2t5MTMwX2ZkX3NjX2h2bF9fbmFuZDNfMSB4MSgKKyAgICAgICAgLlkoUTBiKSwKKyAgICAgICAgLkEoQ0xLKSwKKyAgICAgICAgLkIoVlApLAorICAgICAgICAuQyhRMCkKKyAgICApOworICAgIHNreTEzMF9mZF9zY19odmxfX25hbmQzXzEgeDIoCisgICAgICAgIC5ZKFEwKSwKKyAgICAgICAgLkEoQ0xLKSwKKyAgICAgICAgLkIoVk4pLAorICAgICAgICAuQyhRMGIpCisgICAgKTsKKworICAgIHNreTEzMF9mZF9zY19odmxfX2ludl80IHgzICgKKyAgICAgICAgLlkoUWIpLAorICAgICAgICAuQShRMCkKKyAgICApOyAKKworICAgIHNreTEzMF9mZF9zY19odmxfX2ludl80IHg0ICgKKyAgICAgICAgLlkoUSksCisgICAgICAgIC5BKFEwYikKKyAgICApOyAKKyAgICAKK2VuZG1vZHVsZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3Nhcl9hZGMvREFDXzhCSVQudiBiL3Zlcmlsb2cvcnRsL3Nhcl9hZGMvREFDXzhCSVQudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDMwZTE4Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvc2FyX2FkYy9EQUNfOEJJVC52CkBAIC0wLDAgKzEsMjQgQEAKK21vZHVsZSBEQUNfOEJJVCAoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICBpbnB1dCB3aXJlIHZkZCwJLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICBpbnB1dCB3aXJlIGduZCwJLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorICAgIGlucHV0IHdpcmUgZDAsCisgICAgaW5wdXQgd2lyZSBkMSwKKyAgICBpbnB1dCB3aXJlIGQyLAorICAgIGlucHV0IHdpcmUgZDMsCisgICAgaW5wdXQgd2lyZSBkNCwKKyAgICBpbnB1dCB3aXJlIGQ1LAorICAgIGlucHV0IHdpcmUgZDYsCisgICAgaW5wdXQgd2lyZSBkNywKKyAgICAKKyAgICBpbnB1dCB3aXJlIGlucDEsCisgICAgaW5wdXQgd2lyZSBpbnAyLCAKKworICAgIG91dHB1dCB3aXJlIG91dF92CispOworCisvLyBEdW1teSBiZWhhdmlyb2wgbW9kZWwgdG8gdmVyaWZ5IHRoZSBEQUMgY29ubmVjdGlvbiB3aXRoIHRoZSB1c2VyX3Byb2plY3Rfd3JhcHBlcgorYXNzaWduIG91dF92ID0gZDAgfCBkMSB8IGQyIHwgZDMgfCBkNCB8IGQ1IHwgZDYgfCBkNyA7CisKK2VuZG1vZHVsZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3Nhcl9hZGMvU0FSLnN2IGIvdmVyaWxvZy9ydGwvc2FyX2FkYy9TQVIuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkzMTQ4MwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3Nhcl9hZGMvU0FSLnN2CkBAIC0wLDAgKzEsNjUgQEAKKy8vIGZpbGU6IFNBUi52CisvLyBBIHBhcmFtZXRyaXplZCBTdWNjZXNzaXZlIEFwcHJveGltYXRpb24gUmVnaXN0ZXIgKFNBUikKKy8vIFRoZSBtb2R1bGUgaXMgc28gY29tcGFjdDsgaXQgaXMgb25seSAxMTAgY2VsbHMgZm9yIAorLy8gOC1iaXQgU0FSIHVzaW5nIFNLWTEzMCBIRCBsaWJyYXJ5CisvLworLy8gYXV0aG9yOiBNb2hhbWVkIFNoYWxhbiAobXNoYWxhbkBhdWNlZ3lwdC5lZHUpCisKK2B0aW1lc2NhbGUgMW5zLzFucworCittb2R1bGUgU0FSICAjKHBhcmFtZXRlciBTSVpFID0gOCkgKCAKKyAgICBpbnB1dCAgIHdpcmUgICAgICAgICAgICBjbGssICAgIC8vIFRoZSBjbG9jaworICAgIGlucHV0ICAgd2lyZSAgICAgICAgICAgIHJlc2V0X24sIC8vIEFjdGl2ZSBsb3cgcmVzZXQKKyAgICBpbnB1dCAgIHdpcmUgICAgICAgICAgICBzdGFydCwgIC8vIENvbnZlcnNpb24gc3RhcnQgCisgICAgaW5wdXQgICB3aXJlICAgICAgICAgICAgY21wLCAgICAvLyBBbmFsb2cgY29tcGFyYXRvciBvdXRwdXQKKyAgICBvdXRwdXQgIHdpcmUgW1NJWkUtMTowXSBvdXQsICAgIC8vIFRoZSBvdXRwdXQgc2FtcGxlCisgICAgb3V0cHV0ICB3aXJlIFtTSVpFLTE6MF0gb3V0biwgICAvLyBJbnZlcnRlZCBvdXRwdXQgZm9yIGFjdGl2ZSBsb3cgREFDCisgICAgb3V0cHV0ICB3aXJlICAgICAgICAgICAgZG9uZSwgICAvLyBDb252ZXJzaW9uIGlzIGRvbmUKKyAgICBvdXRwdXQgIHdpcmUgICAgICAgICAgICBjbGtuICAgIC8vIEludmVydGVkIGNsb2NrIHRvIGJlIHVzZWQgYnkgdGhlIGNsb2NrZWQgYW5hbG9nIGNvbXBhcmF0b3IKKyk7CisJCisJcmVnIFtTSVpFLTE6MF0gcmVzdWx0OworCXJlZyBbU0laRS0xOjBdIHNoaWZ0OworCQorICAgIC8vIEZTTSB0byBoYW5kbGUgdGhlIFNBUiBvcGVyYXRpb24KKyAgICByZWcgWzE6MF0gc3RhdGUsIG5zdGF0ZTsKKwlsb2NhbHBhcmFtIElETEU9MCwgQ09OVj0xLCBET05FPTI7CisKKwlhbHdheXMgQCoKKyAgICAgICAgY2FzZSAoc3RhdGUpCisgICAgICAgICAgICBJRExFOiAgICAgICBpZihzdGFydCkgbnN0YXRlID0gQ09OVjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIG5zdGF0ZSA9IElETEU7CisgICAgICAgICAgICBDT05WOiAgICAgICBpZihzaGlmdCA9PSAxJ2IxKSBuc3RhdGUgPSBET05FOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgbnN0YXRlID0gQ09OVjsKKyAgICAgICAgICAgIERPTkU6ICAgICAgIG5zdGF0ZSA9IElETEU7CisgICAgICAgICAgICBkZWZhdWx0OiAgICBuc3RhdGUgPSBJRExFOworICAgICAgICBlbmRjYXNlCisJICAKKwlhbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJlc2V0X24pCisgICAgICAgIGlmKCFyZXNldF9uKQorICAgICAgICAgICAgc3RhdGUgPD0gSURMRTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RhdGUgPD0gbnN0YXRlOworCisgICAgLy8gU2hpZnQgUmVnaXN0ZXIKKyAgICBhbHdheXMgQChwb3NlZGdlIGNsaykKKyAgICAgICAgaWYoc3RhdGUgPT0gSURMRSkgCisgICAgICAgICAgICBzaGlmdCA8PSAxJ2IxIDw8IChTSVpFLTEpOworICAgICAgICBlbHNlIGlmKHN0YXRlID09IENPTlYpCisgICAgICAgICAgICBzaGlmdDw9IHNoaWZ0ID4+IDE7IAorCisgICAgLy8gVGhlIFNBUgorICAgIHdpcmUgW1NJWkUtMTowXSBjdXJyZW50ID0gKGNtcCA9PSAxJ2IwKSA/IH5zaGlmdCA6IHtTSVpFezEnYjF9fSA7CisgICAgd2lyZSBbU0laRS0xOjBdIG5leHQgPSBzaGlmdCA+PiAxOworICAgIGFsd2F5cyBAKHBvc2VkZ2UgY2xrKQorICAgICAgICBpZihzdGF0ZSA9PSBJRExFKSAKKyAgICAgICAgICAgIHJlc3VsdCA8PSAxJ2IxIDw8IChTSVpFLTEpOworICAgICAgICBlbHNlIGlmKHN0YXRlID09IENPTlYpCisgICAgICAgICAgICByZXN1bHQgPD0gKHJlc3VsdCB8IG5leHQpICYgY3VycmVudDsgCisJICAgCisJICBhc3NpZ24gb3V0ID0gcmVzdWx0OworICAgICAgYXNzaWduIG91dG4gPSB+cmVzdWx0OworICAgICAgYXNzaWduIGNsa24gPSB+Y2xrOworCSAgYXNzaWduIGRvbmUgPSAoc3RhdGU9PURPTkUpOworCQorZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zYXJfYWRjL2FkY19yZWcuc3YgYi92ZXJpbG9nL3J0bC9zYXJfYWRjL2FkY19yZWcuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRkY2YwZgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3Nhcl9hZGMvYWRjX3JlZy5zdgpAQCAtMCwwICsxLDI2MiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBREMgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgWUlGaXZlIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS9yaXNjZHVpbm8uZ2l0ICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgVGhpcyBibG9jayBnZW5lcmF0ZSBhbGwgdGhlIEFEQyBjb25maWcgYW5kIHN0YXR1cyAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMSAtIDI2IFNlcHQgMjAyMSAgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEluaXRpYWwgdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK21vZHVsZSBhZGNfcmVnICgKKworICAgICAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICBtY2xrLAorICAgICAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICByZXNldF9uLAorCisgICAgICAgIC8vIFJlZyBCdXMgSW50ZXJmYWNlIFNpZ25hbAorICAgICAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICByZWdfY3MsCisgICAgICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgIHJlZ193ciwKKyAgICAgICAgaW5wdXQgbG9naWMgWzc6MF0gICAgICAgcmVnX2FkZHIsCisgICAgICAgIGlucHV0IGxvZ2ljIFszMTowXSAgICAgIHJlZ193ZGF0YSwKKyAgICAgICAgaW5wdXQgbG9naWMgWzM6MF0gICAgICAgcmVnX2JlLAorCisgICAgICAgLy8gT3V0cHV0cworICAgICAgICBvdXRwdXQgbG9naWMgWzMxOjBdICAgICByZWdfcmRhdGEsCisgICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgIHJlZ19hY2ssCisKKwlpbnB1dCAgbG9naWMgICAgICAgICAgICBwdWxzZTFtX21jbGssCisgICAgICAgLy8gQURDIEkvRgorICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgIHN0YXJ0X2NvbnYsCisgICAgICAgb3V0cHV0IGxvZ2ljIFsyOjBdICAgICAgYWRjX2NoX25vLCAgICAgICAgICAgCisgICAgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgY29udl9kb25lLAorICAgICAgIGlucHV0ICBsb2dpYyBbNzowXSAgICAgIGFkY19yZXN1bHQKKworCisgICAgICAgICk7CisKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbnRlcm5hbCBXaXJlIERlY2xhcmF0aW9ucworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitsb2dpYyAgICAgICAgICAgc3dfcmRfZW47Citsb2dpYyAgICAgICAgICAgc3dfd3JfZW47Citsb2dpYyAgWzM6MF0gICAgc3dfYWRkciA7IC8vIGFkZHJlc3NpbmcgMTYgcmVnaXN0ZXJzCitsb2dpYyAgWzM6MF0gICAgd3JfYmUgICA7Citsb2dpYyAgWzMxOjBdICAgc3dfcmVnX3dkYXRhOworCitsb2dpYyAgICAgICAgICAgcmVnX2NzX2wgICAgOworbG9naWMgICAgICAgICAgIHJlZ19jc18ybCAgICA7CisKKworbG9naWMgWzMxOjBdICAgIHJlZ18wOyAgLy8gQURDIENvbmZpZworbG9naWMgWzMxOjBdICAgIHJlZ18xOyAgLy8gQURDIENoLTEgUmVzdWx0Citsb2dpYyBbMzE6MF0gICAgcmVnXzI7ICAvLyBBREMgQ2gtMiBSZXN1bHQgCitsb2dpYyBbMzE6MF0gICAgcmVnXzM7ICAvLyBBREMgQ2gtMyBSZXN1bHQKK2xvZ2ljIFszMTowXSAgICByZWdfNDsgIC8vIEFEQyBDaC00IFJlc3VsdAorbG9naWMgWzMxOjBdICAgIHJlZ181OyAgLy8gQURDIENoLTUgUmVzdWx0Citsb2dpYyBbMzE6MF0gICAgcmVnXzY7ICAvLyBBREMgQ2gtNiBSZXN1bHQKK2xvZ2ljIFszMTowXSAgICByZWdfNzsgIC8vIFNvZnR3YXJlLVJlZ183Citsb2dpYyBbMzE6MF0gICAgcmVnX291dDsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTWFpbiBjb2RlIHN0YXJ0cyBoZXJlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRvIGF2b2lkIGludGVyZmFjZSB0aW1pbmcsIGFsbCB0aGUgY29udGVudCBhcmUgcmVnaXN0ZXJlZAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWx3YXlzIEAgKHBvc2VkZ2UgbWNsayBvciBuZWdlZGdlIHJlc2V0X24pCitiZWdpbiAKKyAgIGlmIChyZXNldF9uID09IDEnYjApCisgICBiZWdpbgorICAgIHN3X2FkZHIgICAgICAgPD0gJzA7CisgICAgc3dfcmRfZW4gICAgICA8PSAnMDsKKyAgICBzd193cl9lbiAgICAgIDw9ICcwOworICAgIHN3X3JlZ193ZGF0YSAgPD0gJzA7CisgICAgd3JfYmUgICAgICAgICA8PSAnMDsKKyAgICByZWdfY3NfbCAgICAgIDw9ICcwOworICAgIHJlZ19jc18ybCAgICAgPD0gJzA7CisgIGVuZCBlbHNlIGJlZ2luCisgICAgc3dfYWRkciAgICAgICA8PSByZWdfYWRkciBbNToyXTsKKyAgICBzd19yZF9lbiAgICAgIDw9IHJlZ19jcyAmICFyZWdfd3I7CisgICAgc3dfd3JfZW4gICAgICA8PSByZWdfY3MgJiByZWdfd3I7CisgICAgc3dfcmVnX3dkYXRhICA8PSByZWdfd2RhdGE7CisgICAgd3JfYmUgICAgICAgICA8PSByZWdfYmU7CisgICAgcmVnX2NzX2wgICAgICA8PSByZWdfY3M7CisgICAgcmVnX2NzXzJsICAgICA8PSByZWdfY3NfbDsKKyAgZW5kCitlbmQKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZWFkIHBhdGggbXV4CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fsd2F5cyBAIChwb3NlZGdlIG1jbGsgb3IgbmVnZWRnZSByZXNldF9uKQorYmVnaW4gOiBwcmVnX291dF9TZXEKKyAgIGlmIChyZXNldF9uID09IDEnYjApIGJlZ2luCisgICAgICByZWdfcmRhdGEgWzMxOjBdICA8PSAzMidoMDAwMF8wMDAwOworICAgICAgcmVnX2FjayAgICAgICAgICAgPD0gMSdiMDsKKyAgIGVuZCBlbHNlIGlmIChzd19yZF9lbiAmJiAhcmVnX2FjayAmJiAhcmVnX2NzXzJsKSBiZWdpbgorICAgICAgcmVnX3JkYXRhIFszMTowXSAgPD0gcmVnX291dCBbMzE6MF07CisgICAgICByZWdfYWNrICAgICAgICAgICA8PSAxJ2IxOworICAgZW5kIGVsc2UgaWYgKHN3X3dyX2VuICYmICFyZWdfYWNrICYmICFyZWdfY3NfMmwpIGJlZ2luIAorICAgICAgcmVnX2FjayAgICAgICAgICAgPD0gMSdiMTsKKyAgIGVuZCBlbHNlIGJlZ2luCisgICAgICByZWdfYWNrICAgICAgICA8PSAxJ2IwOworICAgZW5kCitlbmQKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyByZWdpc3RlciByZWFkIGVuYWJsZSBhbmQgd3JpdGUgZW5hYmxlIGRlY29kaW5nIGxvZ2ljCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlICAgc3dfd3JfZW5fMCA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoMCk7Cit3aXJlICAgc3dfcmRfZW5fMCA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoMCk7Cit3aXJlICAgc3dfd3JfZW5fMSA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoMSk7Cit3aXJlICAgc3dfcmRfZW5fMSA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoMSk7Cit3aXJlICAgc3dfd3JfZW5fMiA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoMik7Cit3aXJlICAgc3dfcmRfZW5fMiA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoMik7Cit3aXJlICAgc3dfd3JfZW5fMyA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoMyk7Cit3aXJlICAgc3dfcmRfZW5fMyA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoMyk7Cit3aXJlICAgc3dfd3JfZW5fNCA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoNCk7Cit3aXJlICAgc3dfcmRfZW5fNCA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoNCk7Cit3aXJlICAgc3dfd3JfZW5fNSA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoNSk7Cit3aXJlICAgc3dfcmRfZW5fNSA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoNSk7Cit3aXJlICAgc3dfd3JfZW5fNiA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoNik7Cit3aXJlICAgc3dfcmRfZW5fNiA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoNik7Cit3aXJlICAgc3dfd3JfZW5fNyA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoNyk7Cit3aXJlICAgc3dfcmRfZW5fNyA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoNyk7CisKK2Fsd2F5cyBAKCAqKQorYmVnaW4gOiBwcmVnX3NlbF9Db20KKworICByZWdfb3V0IFszMTowXSA9IDMyJ2QwOworCisgIGNhc2UgKHN3X2FkZHIgWzM6MF0pCisgICAgNCdiMDAwMCA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzAgWzMxOjBdOyAgICAgCisgICAgNCdiMDAwMSA6IHJlZ19vdXQgWzMxOjBdID0gezI0J2gwLHJlZ18xIFs3OjBdfTsgICAgCisgICAgNCdiMDAxMCA6IHJlZ19vdXQgWzMxOjBdID0gezI0J2gwLHJlZ18yIFs3OjBdfTsgICAgIAorICAgIDQnYjAwMTEgOiByZWdfb3V0IFszMTowXSA9IHsyNCdoMCxyZWdfMyBbNzowXX07ICAgIAorICAgIDQnYjAxMDAgOiByZWdfb3V0IFszMTowXSA9IHsyNCdoMCxyZWdfNCBbNzowXX07ICAgIAorICAgIDQnYjAxMDEgOiByZWdfb3V0IFszMTowXSA9IHsyNCdoMCxyZWdfNSBbNzowXX07ICAgIAorICAgIDQnYjAxMTAgOiByZWdfb3V0IFszMTowXSA9IHsyNCdoMCxyZWdfNiBbNzowXX07ICAgIAorICAgIGRlZmF1bHQgOiByZWdfb3V0IFszMTowXSA9ICdoMDsKKyAgZW5kY2FzZQorZW5kCisKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbmRpdmlkdWFsIHJlZ2lzdGVyIGFzc2lnbm1lbnRzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsb2dpYyBbNTowXSBjZmdfYWRjX2VuYiA9IHJlZ18wWzU6MF07CisKK2dlbl8zMmJfcmVnICAjKDMyJ2gwKSB1X3JlZ18wCSgKKwkgICAgICAvL0xpc3Qgb2YgSW5wdXRzCisJICAgICAgLnJlc2V0X24gICAgKHJlc2V0X24gICAgICksCisJICAgICAgLmNsayAgICAgICAgKG1jbGsgICAgICAgICAgKSwKKwkgICAgICAuY3MgICAgICAgICAoc3dfd3JfZW5fMCAgICApLAorCSAgICAgIC53ZSAgICAgICAgICh3cl9iZSAgICAgICAgICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgKHN3X3JlZ193ZGF0YSAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgIChyZWdfMCAgICAgICAgKQorCSAgICAgICk7CisKKworYWx3YXlzIEAocG9zZWRnZSBtY2xrIG9yIG5lZ2VkZ2UgcmVzZXRfbikKK2JlZ2luCisgICBpZih+cmVzZXRfbikgYmVnaW4KKyAgICAgIHJlZ18xWzc6MF0gICA8PSA4J2gwOworICAgICAgcmVnXzJbNzowXSAgIDw9IDgnaDA7CisgICAgICByZWdfM1s3OjBdICAgPD0gOCdoMDsKKyAgICAgIHJlZ180Wzc6MF0gICA8PSA4J2gwOworICAgICAgcmVnXzVbNzowXSAgIDw9IDgnaDA7CisgICAgICByZWdfNls3OjBdICAgPD0gOCdoMDsKKyAgICAgIHN0YXJ0X2NvbnYgICA8PSAnMDsKKyAgICAgIGFkY19jaF9ubyAgICA8PSAnMDsKKyAgIGVuZCBlbHNlIGJlZ2luCisgICAgICBpZihjZmdfYWRjX2VuYlswXSAmJiBwdWxzZTFtX21jbGspIGJlZ2luCisJIGlmKHN0YXJ0X2NvbnYgJiYgY29udl9kb25lKSBiZWdpbgorICAgICAgICAgICAgc3RhcnRfY29udiA8PSAwOworCSAgICBjYXNlKGFkY19jaF9ubykKKwkgICAgMydiMDAwOiByZWdfMVs3OjBdIDw9IGFkY19yZXN1bHQ7CisJICAgIDMnYjAwMTogcmVnXzJbNzowXSA8PSBhZGNfcmVzdWx0OworCSAgICAzJ2IwMTA6IHJlZ18zWzc6MF0gPD0gYWRjX3Jlc3VsdDsKKwkgICAgMydiMDExOiByZWdfNFs3OjBdIDw9IGFkY19yZXN1bHQ7CisJICAgIDMnYjEwMDogcmVnXzVbNzowXSA8PSBhZGNfcmVzdWx0OworCSAgICAzJ2IxMDE6IHJlZ182Wzc6MF0gPD0gYWRjX3Jlc3VsdDsKKwkgICAgZW5kY2FzZQorICAgICAgICAgZW5kCisgICAgICBlbmQgZWxzZSBiZWdpbgorCSBzdGFydF9jb252IDw9IDE7CisJIGlmKGFkY19jaF9ubyA9PSA1KSBiZWdpbgorCSAgICBhZGNfY2hfbm8gPD0gMDsKKyAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisJICAgIGFkY19jaF9ubyAgICA8PSBhZGNfY2hfbm8rMTsKKwkgZW5kCisgICAgICBlbmQKKyAgIGVuZAorZW5kCisKKworCisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc2FyX2FkYy9zYXJfYWRjLnN2IGIvdmVyaWxvZy9ydGwvc2FyX2FkYy9zYXJfYWRjLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YjdkYmQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zYXJfYWRjL3Nhcl9hZGMuc3YKQEAgLTAsMCArMSwxNzAgQEAKK21vZHVsZSBzYXJfYWRjKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgaW5wdXQgbG9naWMgICAgICAgICAgICAgdmNjZDEgICAgICAgICAsLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICB2c3NkMSAgICAgICAgICwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgIHZjY2QyICAgICAgICAgLC8vIFVzZXIgYXJlYSAyIDEuOFYgc3VwcGx5IChhbmFsb2cpCisgICAgaW5wdXQgbG9naWMgICAgICAgICAgICAgdnNzZDIgICAgICAgICAsLy8gVXNlciBhcmVhIDIgZ3JvdW5kICAgICAgKGFuYWxvZykKK2BlbmRpZgorCisgICAgCisgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgY2xrICAgICAgICAgICAsLy8gVGhlIGNsb2NrIChkaWdpdGFsKQorICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgIHJlc2V0X24gICAgICAgLC8vIEFjdGl2ZSBsb3cgcmVzZXQgKGRpZ2l0YWwpCisKKyAgICAvLyBSZWcgQnVzIEludGVyZmFjZSBTaWduYWwKKyAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICByZWdfY3MgICAgICAgICwKKyAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICByZWdfd3IgICAgICAgICwKKyAgICBpbnB1dCBsb2dpYyBbNzowXSAgICAgICByZWdfYWRkciAgICAgICwKKyAgICBpbnB1dCBsb2dpYyBbMzE6MF0gICAgICByZWdfd2RhdGEgICAgICwKKyAgICBpbnB1dCBsb2dpYyBbMzowXSAgICAgICByZWdfYmUgICAgICAgICwKKworICAgIC8vIE91dHB1dHMKKyAgICBvdXRwdXQgbG9naWMgWzMxOjBdICAgICByZWdfcmRhdGEgICAgICwKKyAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICByZWdfYWNrICAgICAgICwKKworICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgIHB1bHNlMW1fbWNsayAgLAorICAgIG91dHB1dCAgbG9naWMgWzc6MF0gICAgIHNhcjJkYWMgICAgICAgLC8vIFNBUiBPL1AgdG93YXJkcyBEQUMKKworICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIGFuYWxvZ19kYWNfb3V0LCAvLyBEQUMgYW5hbG9nIG8vcCBmb3IgY29tcGFyZQorCisgICAgLy8gQUNNUCAoSEQpIFBvcnRzIAorICAgIGlucHV0ICAgbG9naWMgICAgWzU6MF0gIGFuYWxvZ19kaW4gICAgICAgIC8vIChBbmFsb2cpCisKKyk7CisKKyAgICBsb2dpYyAgICAgICAgY2xrbjsKKyAgICBsb2dpYyBbNTowXSAgc2FyX2NtcDsgLy8gU0FSIGNvbXBhcmUgc2lnbmFsCisgICAgbG9naWMgICAgICAgIHNhcl9jbXBfaW50OworICAgIGxvZ2ljIFsyOjBdICBhZGNfY2hfbm87CisgICAgbG9naWMgICAgICAgIHN0YXJ0X2NvbnYgICAgOy8vIENvbnZlcnNpb24gc3RhcnQgKGRpZ2l0YWwpCisgICAgbG9naWMgICAgICAgIGNvbnZfZG9uZSAgICAgOy8vIENvbnZlcnNpb24gaXMgZG9uZSAoZGlnaXRhbCkKKyAgICBsb2dpYyBbNzowXSAgYWRjX3Jlc3VsdCAgICA7Ly8gU0FSIG8vcCAoZGlnaXRhbCkKKyAgCithbHdheXNfY29tYiAKK2JlZ2luCisgICBzYXJfY21wX2ludCA9IDA7CisgICBjYXNlKGFkY19jaF9ubykKKyAgIDMnYjAwMCA6ICBzYXJfY21wX2ludCA9IHNhcl9jbXBbMF07CisgICAzJ2IwMDEgOiAgc2FyX2NtcF9pbnQgPSBzYXJfY21wWzFdOworICAgMydiMDEwIDogIHNhcl9jbXBfaW50ID0gc2FyX2NtcFsyXTsKKyAgIDMnYjAxMSA6ICBzYXJfY21wX2ludCA9IHNhcl9jbXBbM107CisgICAzJ2IxMDAgOiAgc2FyX2NtcF9pbnQgPSBzYXJfY21wWzRdOworICAgMydiMTAxIDogIHNhcl9jbXBfaW50ID0gc2FyX2NtcFs1XTsKKyAgIGVuZGNhc2UKKworCitlbmQKKworYWRjX3JlZyB1X2FkY19yZWcgKAorICAgICAgICAubWNsayAgICAgICAgKG1jbGspLAorICAgICAgICAucmVzZXRfbiAgICAgKHJlc2V0X24pLAorCisgICAgICAgIC8vIFJlZyBCdXMgSW50ZXJmYWNlIFNpZ25hbAorICAgICAgICAucmVnX2NzICAgICAgKHJlZ19jcyksCisgICAgICAgIC5yZWdfd3IgICAgICAocmVnX3dyKSwKKyAgICAgICAgLnJlZ19hZGRyICAgIChyZWdfYWRkciksCisgICAgICAgIC5yZWdfd2RhdGEgICAocmVnX3dkYXRhKSwKKyAgICAgICAgLnJlZ19iZSAgICAgIChyZWdfYmUpLAorCisgICAgICAgLy8gT3V0cHV0cworICAgICAgICAucmVnX3JkYXRhICAgKHJlZ19yZGF0YSksCisgICAgICAgIC5yZWdfYWNrICAgICAocmVnX2FjayksCisKKwkucHVsc2UxbV9tY2xrICAocHVsc2UxbV9tY2xrKSwKKyAgICAgICAvLyBBREMgSS9GCisgICAgICAgLnN0YXJ0X2NvbnYgICAoc3RhcnRfY29udiksCisgICAgICAgLmFkY19jaF9ubyAgICAoYWRjX2NoX25vKSwgICAgICAgICAgIAorICAgICAgIC5jb252X2RvbmUgICAgKGNvbnZfZG9uZSksCisgICAgICAgLmFkY19yZXN1bHQgICAoYWRjX3Jlc3VsdCkKKworICAgICAgICk7CisKKworICAgIEFDTVAgQ09NUF8wICgKKyAgICBgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgLnZjY2QyICAgKHZjY2QyICAgICAgICAgICApLAorICAgICAgICAudnNzZDIgICAodnNzZDIgICAgICAgICAgICksCisgICAgICAgIC5WREQgICAgICh2Y2NkMiAgICAgICAgICAgKSwKKyAgICAgICAgLlZTUyAgICAgKHZzc2QyICAgICAgICAgICApLAorICAgIGBlbmRpZgorICAgICAgICAuY2xrICAgICAoY2xrICAgICAgICAgICAgICksCisgICAgICAgIC5JTlAgICAgIChhbmFsb2dfZGluWzBdICAgKSwKKyAgICAgICAgLklOTiAgICAgKGFuYWxvZ19kYWNfb3V0ICApLAorICAgICAgICAuUSAgICAgICAoc2FyX2NtcFswXSAgICAgICkgICAgCisgICAgKTsKKworICAgIEFDTVAgQ09NUF8xICgKKyAgICBgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgLnZjY2QyICAgKHZjY2QyICAgICAgICAgICApLAorICAgICAgICAudnNzZDIgICAodnNzZDIgICAgICAgICAgICksCisgICAgICAgIC5WREQgICAgICh2Y2NkMiAgICAgICAgICAgKSwKKyAgICAgICAgLlZTUyAgICAgKHZzc2QyICAgICAgICAgICApLAorICAgIGBlbmRpZgorICAgICAgICAuY2xrICAgICAoY2xrICAgICAgICAgICAgICksCisgICAgICAgIC5JTlAgICAgIChhbmFsb2dfZGluWzFdICAgKSwKKyAgICAgICAgLklOTiAgICAgKGFuYWxvZ19kYWNfb3V0ICApLAorICAgICAgICAuUSAgICAgICAoc2FyX2NtcFsxXSAgICAgICkgICAgCisgICAgKTsKKworICAgIEFDTVAgQ09NUF8yICgKKyAgICBgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgLnZjY2QyICAgKHZjY2QyICAgICAgICAgICApLAorICAgICAgICAudnNzZDIgICAodnNzZDIgICAgICAgICAgICksCisgICAgICAgIC5WREQgICAgICh2Y2NkMiAgICAgICAgICAgKSwKKyAgICAgICAgLlZTUyAgICAgKHZzc2QyICAgICAgICAgICApLAorICAgIGBlbmRpZgorICAgICAgICAuY2xrICAgICAoY2xrICAgICAgICAgICAgICksCisgICAgICAgIC5JTlAgICAgIChhbmFsb2dfZGluWzJdICAgKSwKKyAgICAgICAgLklOTiAgICAgKGFuYWxvZ19kYWNfb3V0ICApLAorICAgICAgICAuUSAgICAgICAoc2FyX2NtcFsyXSAgICAgICkgICAgCisgICAgKTsKKworICAgIEFDTVAgQ09NUF8zICgKKyAgICBgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgLnZjY2QyICAgKHZjY2QyICAgICAgICAgICApLAorICAgICAgICAudnNzZDIgICAodnNzZDIgICAgICAgICAgICksCisgICAgICAgIC5WREQgICAgICh2Y2NkMiAgICAgICAgICAgKSwKKyAgICAgICAgLlZTUyAgICAgKHZzc2QyICAgICAgICAgICApLAorICAgIGBlbmRpZgorICAgICAgICAuY2xrICAgICAoY2xrICAgICAgICAgICAgICksCisgICAgICAgIC5JTlAgICAgIChhbmFsb2dfZGluWzNdICAgKSwKKyAgICAgICAgLklOTiAgICAgKGFuYWxvZ19kYWNfb3V0ICApLAorICAgICAgICAuUSAgICAgICAoc2FyX2NtcFszXSAgICAgICkgICAgCisgICAgKTsKKyAgICBBQ01QIENPTVBfNCAoCisgICAgYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgIC52Y2NkMiAgICh2Y2NkMiAgICAgICAgICAgKSwKKyAgICAgICAgLnZzc2QyICAgKHZzc2QyICAgICAgICAgICApLAorICAgICAgICAuVkREICAgICAodmNjZDIgICAgICAgICAgICksCisgICAgICAgIC5WU1MgICAgICh2c3NkMiAgICAgICAgICAgKSwKKyAgICBgZW5kaWYKKyAgICAgICAgLmNsayAgICAgKGNsayAgICAgICAgICAgICApLAorICAgICAgICAuSU5QICAgICAoYW5hbG9nX2Rpbls0XSAgICksCisgICAgICAgIC5JTk4gICAgIChhbmFsb2dfZGFjX291dCAgKSwKKyAgICAgICAgLlEgICAgICAgKHNhcl9jbXBbNF0gICAgICApICAgIAorICAgICk7CisgICAgQUNNUCBDT01QXzUgKAorICAgIGBpZmRlZiBVU0VfUE9XRVJfUElOUworICAgICAgICAudmNjZDIgICAodmNjZDIgICAgICAgICAgICksCisgICAgICAgIC52c3NkMiAgICh2c3NkMiAgICAgICAgICAgKSwKKyAgICAgICAgLlZERCAgICAgKHZjY2QyICAgICAgICAgICApLAorICAgICAgICAuVlNTICAgICAodnNzZDIgICAgICAgICAgICksCisgICAgYGVuZGlmCisgICAgICAgIC5jbGsgICAgIChjbGsgICAgICAgICAgICAgKSwKKyAgICAgICAgLklOUCAgICAgKGFuYWxvZ19kaW5bNV0gICApLAorICAgICAgICAuSU5OICAgICAoYW5hbG9nX2RhY19vdXQgICksCisgICAgICAgIC5RICAgICAgIChzYXJfY21wWzVdICAgICAgKSAgICAKKyAgICApOworCisgICAgU0FSIENUUkwgKCAKKyAgICAgICAgLmNsayAgICAgKGNsayAgICAgICAgICAgICApLCAgIAorICAgICAgICAucmVzZXRfbiAocmVzZXRfbiAgICAgICAgICksICAKKyAgICAgICAgLnN0YXJ0ICAgKHN0YXJ0X2NvbnYgICAgICApLAorICAgICAgICAuY21wICAgICAoc2FyX2NtcF9pbnQgICAgICksCisgICAgICAgIC5vdXQgICAgIChhZGNfcmVzdWx0ICAgICAgKSwgICAgCisgICAgICAgIC5kb25lICAgIChjb252X2RvbmUgICAgICAgKSwKKyAgICAgICAgLm91dG4gICAgKHNhcjJkYWMgICAgICAgICApLAorICAgICAgICAuY2xrbiAgICAoY2xrbiAgICAgICAgICAgICkgCisgICAgKTsKKworCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3NyYW1fbWFjcm9zL3NreTEzMF9zcmFtXzJrYnl0ZV8xcncxcl8zMng1MTJfOC52IGIvdmVyaWxvZy9ydGwvc3JhbV9tYWNyb3Mvc2t5MTMwX3NyYW1fMmtieXRlXzFydzFyXzMyeDUxMl84LnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg5YTc3MAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3NyYW1fbWFjcm9zL3NreTEzMF9zcmFtXzJrYnl0ZV8xcncxcl8zMng1MTJfOC52CkBAIC0wLDAgKzEsMTE0IEBACisvLyBPcGVuUkFNIFNSQU0gbW9kZWwKKy8vIFdvcmRzOiA1MTIKKy8vIFdvcmQgc2l6ZTogMzIKKy8vIFdyaXRlIHNpemU6IDgKKworbW9kdWxlIHNreTEzMF9zcmFtXzJrYnl0ZV8xcncxcl8zMng1MTJfOCgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIHZjY2QxLAorICAgIHZzc2QxLAorYGVuZGlmCisvLyBQb3J0IDA6IFJXCisgICAgY2xrMCxjc2IwLHdlYjAsd21hc2swLGFkZHIwLGRpbjAsZG91dDAsCisvLyBQb3J0IDE6IFIKKyAgICBjbGsxLGNzYjEsYWRkcjEsZG91dDEKKyAgKTsKKworICBwYXJhbWV0ZXIgTlVNX1dNQVNLUyA9IDQgOworICBwYXJhbWV0ZXIgREFUQV9XSURUSCA9IDMyIDsKKyAgcGFyYW1ldGVyIEFERFJfV0lEVEggPSA5IDsKKyAgcGFyYW1ldGVyIFJBTV9ERVBUSCA9IDEgPDwgQUREUl9XSURUSDsKKyAgLy8gRklYTUU6IFRoaXMgZGVsYXkgaXMgYXJiaXRyYXJ5LgorICBwYXJhbWV0ZXIgREVMQVkgPSAzIDsKKyAgcGFyYW1ldGVyIFZFUkJPU0UgPSAwIDsgLy9TZXQgdG8gMCB0byBvbmx5IGRpc3BsYXkgd2FybmluZ3MKKyAgcGFyYW1ldGVyIFRfSE9MRCA9IDEgOyAvL0RlbGF5IHRvIGhvbGQgZG91dCB2YWx1ZSBhZnRlciBwb3NlZGdlLiBWYWx1ZSBpcyBhcmJpdHJhcnkKKworYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgaW5vdXQgdmNjZDE7CisgICAgaW5vdXQgdnNzZDE7CitgZW5kaWYKKyAgaW5wdXQgIGNsazA7IC8vIGNsb2NrCisgIGlucHV0ICAgY3NiMDsgLy8gYWN0aXZlIGxvdyBjaGlwIHNlbGVjdAorICBpbnB1dCAgd2ViMDsgLy8gYWN0aXZlIGxvdyB3cml0ZSBjb250cm9sCisgIGlucHV0IFtOVU1fV01BU0tTLTE6MF0gICB3bWFzazA7IC8vIHdyaXRlIG1hc2sKKyAgaW5wdXQgW0FERFJfV0lEVEgtMTowXSAgYWRkcjA7CisgIGlucHV0IFtEQVRBX1dJRFRILTE6MF0gIGRpbjA7CisgIG91dHB1dCBbREFUQV9XSURUSC0xOjBdIGRvdXQwOworICBpbnB1dCAgY2xrMTsgLy8gY2xvY2sKKyAgaW5wdXQgICBjc2IxOyAvLyBhY3RpdmUgbG93IGNoaXAgc2VsZWN0CisgIGlucHV0IFtBRERSX1dJRFRILTE6MF0gIGFkZHIxOworICBvdXRwdXQgW0RBVEFfV0lEVEgtMTowXSBkb3V0MTsKKworICByZWcgIGNzYjBfcmVnOworICByZWcgIHdlYjBfcmVnOworICByZWcgW05VTV9XTUFTS1MtMTowXSAgIHdtYXNrMF9yZWc7CisgIHJlZyBbQUREUl9XSURUSC0xOjBdICBhZGRyMF9yZWc7CisgIHJlZyBbREFUQV9XSURUSC0xOjBdICBkaW4wX3JlZzsKKyAgcmVnIFtEQVRBX1dJRFRILTE6MF0gIGRvdXQwOworCisgIC8vIEFsbCBpbnB1dHMgYXJlIHJlZ2lzdGVycworICBhbHdheXMgQChwb3NlZGdlIGNsazApCisgIGJlZ2luCisgICAgY3NiMF9yZWcgPSBjc2IwOworICAgIHdlYjBfcmVnID0gd2ViMDsKKyAgICB3bWFzazBfcmVnID0gd21hc2swOworICAgIGFkZHIwX3JlZyA9IGFkZHIwOworICAgIGRpbjBfcmVnID0gZGluMDsKKyAgICAjKFRfSE9MRCkgZG91dDAgPSAzMidieDsKKyAgICBpZiAoICFjc2IwX3JlZyAmJiB3ZWIwX3JlZyAmJiBWRVJCT1NFICkgCisgICAgICAkZGlzcGxheSgkdGltZSwiIFJlYWRpbmcgJW0gYWRkcjA9JWIgZG91dDA9JWIiLGFkZHIwX3JlZyxtZW1bYWRkcjBfcmVnXSk7CisgICAgaWYgKCAhY3NiMF9yZWcgJiYgIXdlYjBfcmVnICYmIFZFUkJPU0UgKQorICAgICAgJGRpc3BsYXkoJHRpbWUsIiBXcml0aW5nICVtIGFkZHIwPSViIGRpbjA9JWIgd21hc2swPSViIixhZGRyMF9yZWcsZGluMF9yZWcsd21hc2swX3JlZyk7CisgIGVuZAorCisgIHJlZyAgY3NiMV9yZWc7CisgIHJlZyBbQUREUl9XSURUSC0xOjBdICBhZGRyMV9yZWc7CisgIHJlZyBbREFUQV9XSURUSC0xOjBdICBkb3V0MTsKKworICAvLyBBbGwgaW5wdXRzIGFyZSByZWdpc3RlcnMKKyAgYWx3YXlzIEAocG9zZWRnZSBjbGsxKQorICBiZWdpbgorICAgIGNzYjFfcmVnID0gY3NiMTsKKyAgICBhZGRyMV9yZWcgPSBhZGRyMTsKKyAgICBpZiAoIWNzYjAgJiYgIXdlYjAgJiYgIWNzYjEgJiYgKGFkZHIwID09IGFkZHIxKSkKKyAgICAgICAgICRkaXNwbGF5KCR0aW1lLCIgV0FSTklORzogV3JpdGluZyBhbmQgcmVhZGluZyBhZGRyMD0lYiBhbmQgYWRkcjE9JWIgc2ltdWx0YW5lb3VzbHkhIixhZGRyMCxhZGRyMSk7CisgICAgIyhUX0hPTEQpIGRvdXQxID0gMzInYng7CisgICAgaWYgKCAhY3NiMV9yZWcgJiYgVkVSQk9TRSApIAorICAgICAgJGRpc3BsYXkoJHRpbWUsIiBSZWFkaW5nICVtIGFkZHIxPSViIGRvdXQxPSViIixhZGRyMV9yZWcsbWVtW2FkZHIxX3JlZ10pOworICBlbmQKKworcmVnIFtEQVRBX1dJRFRILTE6MF0gICAgbWVtIFswOlJBTV9ERVBUSC0xXTsKKworICAvLyBNZW1vcnkgV3JpdGUgQmxvY2sgUG9ydCAwCisgIC8vIFdyaXRlIE9wZXJhdGlvbiA6IFdoZW4gd2ViMCA9IDAsIGNzYjAgPSAwCisgIGFsd2F5cyBAIChuZWdlZGdlIGNsazApCisgIGJlZ2luIDogTUVNX1dSSVRFMAorICAgIGlmICggIWNzYjBfcmVnICYmICF3ZWIwX3JlZyApIGJlZ2luCisgICAgICAgIGlmICh3bWFzazBfcmVnWzBdKQorICAgICAgICAgICAgICAgIG1lbVthZGRyMF9yZWddWzc6MF0gPSBkaW4wX3JlZ1s3OjBdOworICAgICAgICBpZiAod21hc2swX3JlZ1sxXSkKKyAgICAgICAgICAgICAgICBtZW1bYWRkcjBfcmVnXVsxNTo4XSA9IGRpbjBfcmVnWzE1OjhdOworICAgICAgICBpZiAod21hc2swX3JlZ1syXSkKKyAgICAgICAgICAgICAgICBtZW1bYWRkcjBfcmVnXVsyMzoxNl0gPSBkaW4wX3JlZ1syMzoxNl07CisgICAgICAgIGlmICh3bWFzazBfcmVnWzNdKQorICAgICAgICAgICAgICAgIG1lbVthZGRyMF9yZWddWzMxOjI0XSA9IGRpbjBfcmVnWzMxOjI0XTsKKyAgICBlbmQKKyAgZW5kCisKKyAgLy8gTWVtb3J5IFJlYWQgQmxvY2sgUG9ydCAwCisgIC8vIFJlYWQgT3BlcmF0aW9uIDogV2hlbiB3ZWIwID0gMSwgY3NiMCA9IDAKKyAgYWx3YXlzIEAgKG5lZ2VkZ2UgY2xrMCkKKyAgYmVnaW4gOiBNRU1fUkVBRDAKKyAgICBpZiAoIWNzYjBfcmVnICYmIHdlYjBfcmVnKQorICAgICAgIGRvdXQwIDw9ICMoREVMQVkpIG1lbVthZGRyMF9yZWddOworICBlbmQKKworICAvLyBNZW1vcnkgUmVhZCBCbG9jayBQb3J0IDEKKyAgLy8gUmVhZCBPcGVyYXRpb24gOiBXaGVuIHdlYjEgPSAxLCBjc2IxID0gMAorICBhbHdheXMgQCAobmVnZWRnZSBjbGsxKQorICBiZWdpbiA6IE1FTV9SRUFEMQorICAgIGlmICghY3NiMV9yZWcpCisgICAgICAgZG91dDEgPD0gIyhERUxBWSkgbWVtW2FkZHIxX3JlZ107CisgIGVuZAorCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3NzcGltL3NyYy9maWxlbGlzdF9zcGkuZiBiL3Zlcmlsb2cvcnRsL3NzcGltL3NyYy9maWxlbGlzdF9zcGkuZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yM2EyYWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvc3NwaW0vc3JjL2ZpbGVsaXN0X3NwaS5mCkBAIC0wLDAgKzEsNSBAQAorc3NwaW1fdG9wLnN2ICAKK3NzcGltX2N0bC5zdiAgCitzc3BpbV9pZi5zdgorc3NwaW1fY2ZnLnN2CistdiAuLi8uLi9saWIvcmVnaXN0ZXJzLnYKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3NzcGltL3NyYy9zc3BpbV9jZmcuc3YgYi92ZXJpbG9nL3J0bC9zc3BpbS9zcmMvc3NwaW1fY2ZnLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNkMzllMWYKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zc3BpbS9zcmMvc3NwaW1fY2ZnLnN2CkBAIC0wLDAgKzEsMjk4IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBTaW5nbGUgU1BJIE1hc3RlciBJbnRlcmZhY2UgTW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmlzY2R1aW5vIGNvcmVzIHByb2plY3QgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS9yaXNjZHVpbm8uZ2l0ICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICBTdWJicG9ydCBTaW5nbGUgQml0IFNQSSBNYXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgVi4wICAtIDA2IE9jdCAyMDIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEluaXRpYWwgU3BJIE1vZHVsZSBwaWNrZWQgZnJvbSAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy90dXJibzgwNTEvICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKworCittb2R1bGUgc3NwaW1fY2ZnICgKKyAgICAgICAgICAgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgIG1jbGsgICAgICAgICAgICAgICAsCisgICAgICAgICAgICAgIGlucHV0ICBsb2dpYyAgICAgICAgICByZXNldF9uICAgICAgICAgICAgLAorICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljIFsxOjBdICAgIGNmZ190Z3Rfc2VsICAgICAgICAsCisgICAgICAgICAgICAgIAorICAgICAgICAgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgY2ZnX29wX3JlcSAgICAgICAgICwgLy8gU1BJIG9wZXJhdGlvbiByZXF1ZXN0CisgICAgICAgICAgICAgIG91dHB1dCBsb2dpYyBbMTowXSAgICBjZmdfb3BfdHlwZSAgICAgICAgLCAvLyBTUEkgb3BlcmF0aW9uIHR5cGUKKyAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljIFsxOjBdICAgIGNmZ190cmFuc2Zlcl9zaXplICAsIC8vIFNQSSB0cmFuc2ZlciBzaXplCisgICAgICAgICAgICAgIG91dHB1dCBsb2dpYyBbNTowXSAgICBjZmdfc2NrX3BlcmlvZCAgICAgLCAvLyBzY2sgY2xvY2sgcGVyaW9kCisgICAgICAgICAgICAgIG91dHB1dCBsb2dpYyBbNDowXSAgICBjZmdfc2NrX2NzX3BlcmlvZCAgLCAvLyBjcyBzZXR1cC9ob2xkIHBlcmlvZAorICAgICAgICAgICAgICBvdXRwdXQgbG9naWMgWzc6MF0gICAgY2ZnX2NzX2J5dGUgICAgICAgICwgLy8gY3MgYml0IGluZm9ybWF0aW9uCisgICAgICAgICAgICAgIG91dHB1dCBsb2dpYyBbMzE6MF0gICBjZmdfZGF0YWluICAgICAgICAgLCAvLyBkYXRhIGZvciB0cmFuc2ZlcgorICAgICAgICAgICAgICBpbnB1dCAgbG9naWMgWzMxOjBdICAgY2ZnX2RhdGFvdXQgICAgICAgICwgLy8gZGF0YSBmb3IgcmVjZWl2ZWQKKyAgICAgICAgICAgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgIGh3YXJlX29wX2RvbmUgICAgICAsIC8vIG9wZXJhdGlvbiBkb25lCisgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAvLyBSZWcgQnVzIEludGVyZmFjZSBTaWduYWwKKyAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgaW5wdXQgbG9naWMgICAgICAgICAgIHJlZ19jcyAgICAgICAgICAgICAsCisgICAgICAgICAgICAgIGlucHV0IGxvZ2ljICAgICAgICAgICByZWdfd3IgICAgICAgICAgICAgLAorICAgICAgICAgICAgICBpbnB1dCBsb2dpYyBbNzowXSAgICAgcmVnX2FkZHIgICAgICAgICAgICwKKyAgICAgICAgICAgICAgaW5wdXQgbG9naWMgWzMxOjBdICAgIHJlZ193ZGF0YSAgICAgICAgICAsCisgICAgICAgICAgICAgIGlucHV0IGxvZ2ljIFszOjBdICAgICByZWdfYmUgICAgICAgICAgICAgLAorICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgLy8gT3V0cHV0cworICAgICAgICAgICAgICBvdXRwdXQgbG9naWMgWzMxOjBdICAgcmVnX3JkYXRhICAgICAgICAgICwKKyAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgIHJlZ19hY2sgICAgICAgICAgICAKKworCisgICAgICAgICk7CisKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbnRlcm5hbCBXaXJlIERlY2xhcmF0aW9ucworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbG9naWMgICAgICAgICAgIHN3X3JkX2VuICAgICAgICAgICAgICAgOworbG9naWMgICAgICAgICAgIHN3X3dyX2VuOworbG9naWMgICBbMTowXSAgIHN3X2FkZHI7IC8vIGFkZHJlc3NpbmcgMTYgcmVnaXN0ZXJzCitsb2dpYyAgIFszMTowXSAgc3dfcmVnX3dkYXRhOworbG9naWMgICBbMzowXSAgIHdyX2JlICA7Citsb2dpYyAgICAgICAgICAgcmVnX2NzX2w7Citsb2dpYyAgICAgICAgICAgcmVnX2NzXzJsOworCitsb2dpYyAgWzMxOjBdICAgIHJlZ18wOyAgLy8gU29mdHdhcmVfUmVnXzAKK2xvZ2ljICBbMzE6MF0gICAgcmVnXzE7ICAvLyBTb2Z0d2FyZS1SZWdfMQorbG9naWMgIFszMTowXSAgICByZWdfMjsgIC8vIFNvZnR3YXJlLVJlZ18yCitsb2dpYyAgWzMxOjBdICAgIHJlZ19vdXQ7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1haW4gY29kZSBzdGFydHMgaGVyZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUbyBhdm9pZCBpbnRlcmZhY2UgdGltaW5nLCBhbGwgdGhlIGNvbnRlbnQgYXJlIHJlZ2lzdGVyZWQKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fsd2F5cyBAIChwb3NlZGdlIG1jbGsgb3IgbmVnZWRnZSByZXNldF9uKQorYmVnaW4gCisgICBpZiAocmVzZXRfbiA9PSAxJ2IwKQorICAgYmVnaW4KKyAgICBzd19hZGRyICAgICAgIDw9ICcwOworICAgIHN3X3JkX2VuICAgICAgPD0gJzA7CisgICAgc3dfd3JfZW4gICAgICA8PSAnMDsKKyAgICBzd19yZWdfd2RhdGEgIDw9ICcwOworICAgIHdyX2JlICAgICAgICAgPD0gJzA7CisgICAgcmVnX2NzX2wgICAgICA8PSAnMDsKKyAgICByZWdfY3NfMmwgICAgIDw9ICcwOworICBlbmQgZWxzZSBiZWdpbgorICAgIHN3X2FkZHIgICAgICAgPD0gcmVnX2FkZHIgWzM6Ml07CisgICAgc3dfcmRfZW4gICAgICA8PSByZWdfY3MgJiAhcmVnX3dyOworICAgIHN3X3dyX2VuICAgICAgPD0gcmVnX2NzICYgcmVnX3dyOworICAgIHN3X3JlZ193ZGF0YSAgPD0gcmVnX3dkYXRhOworICAgIHdyX2JlICAgICAgICAgPD0gcmVnX2JlOworICAgIHJlZ19jc19sICAgICAgPD0gcmVnX2NzOworICAgIHJlZ19jc18ybCAgICAgPD0gcmVnX2NzX2w7CisgIGVuZAorZW5kCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlYWQgcGF0aCBtdXgKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWx3YXlzIEAgKHBvc2VkZ2UgbWNsayBvciBuZWdlZGdlIHJlc2V0X24pCitiZWdpbiA6IHByZWdfb3V0X1NlcQorICAgaWYgKHJlc2V0X24gPT0gMSdiMCkgYmVnaW4KKyAgICAgIHJlZ19yZGF0YSBbMzE6MF0gIDw9IDMyJ2gwMDAwXzAwMDA7CisgICAgICByZWdfYWNrICAgICAgICAgICA8PSAxJ2IwOworICAgZW5kIGVsc2UgaWYgKHN3X3JkX2VuICYmICFyZWdfYWNrICYmICFyZWdfY3NfMmwpIGJlZ2luCisgICAgICByZWdfcmRhdGEgWzMxOjBdICA8PSByZWdfb3V0IFszMTowXTsKKyAgICAgIHJlZ19hY2sgICAgICAgICAgIDw9IDEnYjE7CisgICBlbmQgZWxzZSBpZiAoc3dfd3JfZW4gJiYgIXJlZ19hY2sgJiYgIXJlZ19jc18ybCkgYmVnaW4gCisgICAgICByZWdfYWNrICAgICAgICAgICA8PSAxJ2IxOworICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgIHJlZ19hY2sgICAgICAgIDw9IDEnYjA7CisgICBlbmQKK2VuZAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gcmVnaXN0ZXIgcmVhZCBlbmFibGUgYW5kIHdyaXRlIGVuYWJsZSBkZWNvZGluZyBsb2dpYworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSAgIHN3X3dyX2VuXzAgICA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gMidoMCk7Cit3aXJlICAgc3dfcmRfZW5fMCAgID0gc3dfcmRfZW4gJiAoc3dfYWRkciA9PSAyJ2gwKTsKK3dpcmUgICBzd193cl9lbl8xICAgPSBzd193cl9lbiAmIChzd19hZGRyID09IDInaDEpOword2lyZSAgIHN3X3JkX2VuXzEgICA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gMidoMSk7Cit3aXJlICAgc3dfd3JfZW5fMiAgID0gc3dfd3JfZW4gJiAoc3dfYWRkciA9PSAyJ2gyKTsKK3dpcmUgICBzd19yZF9lbl8yICAgPSBzd19yZF9lbiAmIChzd19hZGRyID09IDInaDIpOword2lyZSAgIHN3X3dyX2VuXzMgICA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gMidoMyk7Cit3aXJlICAgc3dfcmRfZW5fMyAgID0gc3dfcmRfZW4gJiAoc3dfYWRkciA9PSAyJ2gzKTsKKworCithbHdheXMgQCggKikKK2JlZ2luIDogcHJlZ19zZWxfQ29tCisKKyAgcmVnX291dCBbMzE6MF0gPSAzMidkMDsKKworICBjYXNlIChzd19hZGRyIFszOjBdKQorICAgIDQnYjAwMDAgOiByZWdfb3V0IFszMTowXSA9IHJlZ18wIFszMTowXTsgICAgIAorICAgIDQnYjAwMDEgOiByZWdfb3V0IFszMTowXSA9IHJlZ18xIFszMTowXTsgICAgCisgICAgNCdiMDAxMCA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzIgWzMxOjBdOyAgICAgCisgICAgZGVmYXVsdCA6IHJlZ19vdXQgWzMxOjBdID0gMzInaDA7CisgIGVuZGNhc2UKK2VuZAorCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSW5kaXZpZHVhbCByZWdpc3RlciBhc3NpZ25tZW50cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9naWMgZm9yIFJlZ2lzdGVyIDAgOiBTUEkgQ29udHJvbCBSZWdpc3RlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYXNzaWduICAgIGNmZ19vcF9yZXEgICAgICAgICA9IHJlZ18wWzMxXTsgICAgLy8gY3B1IHJlcXVlc3QKK2Fzc2lnbiAgICBjZmdfdGd0X3NlbCAgICAgICAgPSByZWdfMFsyNDoyM107IC8vIHRhcmdldCBjaGlwIHNlbGVjdAorYXNzaWduICAgIGNmZ19vcF90eXBlICAgICAgICA9IHJlZ18wWzIyOjIxXTsgLy8gU1BJIG9wZXJhdGlvbiB0eXBlCithc3NpZ24gICAgY2ZnX3RyYW5zZmVyX3NpemUgID0gcmVnXzBbMjA6MTldOyAvLyBTUEkgdHJhbnNmZXIgc2l6ZQorYXNzaWduICAgIGNmZ19zY2tfcGVyaW9kICAgICA9IHJlZ18wWzE4OjEzXTsgLy8gc2NrIGNsb2NrIHBlcmlvZAorYXNzaWduICAgIGNmZ19zY2tfY3NfcGVyaW9kICA9IHJlZ18wWzEyOjhdOyAgLy8gY3Mgc2V0dXAvaG9sZCBwZXJpb2QKK2Fzc2lnbiAgICBjZmdfY3NfYnl0ZSAgICAgICAgPSByZWdfMFs3OjBdOyAgIC8vIGNzIGJpdCBpbmZvcm1hdGlvbgorCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfc3BpX2N0cmxfYmUwICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMCAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMF0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzc6MF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMFs3OjBdICAgICAgICApCisgICAgICAgICAgKTsKKworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3NwaV9jdHJsX2JlMSAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzAgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMV0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzE1OjhdICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18wWzE1OjhdICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfc3BpX2N0cmxfYmUyICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMCAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsyXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMjM6MTZdICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzBbMjM6MTZdICAgICAgICkKKyAgICAgICAgICApOworCithc3NpZ24gcmVnXzBbMzA6MjRdID0gNydoMDsKKworcmVxX3JlZ2lzdGVyICMoMCAgKSB1X3NwaV9jdHJsX3JlcSAoCisJICAgICAgLmNwdV93ZSAgICAgICAoe3N3X3dyX2VuXzAgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbM10gICB9ICAgICAgICksCQkgCisJICAgICAgLmNwdV9yZXEgICAgICAoc3dfcmVnX3dkYXRhWzMxXSAgICAgICksCisJICAgICAgLmh3YXJlX2FjayAgICAoaHdhcmVfb3BfZG9uZSAgICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzBbMzFdICAgICAgICAgKQorICAgICAgICAgICk7CisKKworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvZ2ljIGZvciBSZWdpc3RlciAxIDogU1BJIERhdGEgSW4gUmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiAgIGNmZ19kYXRhaW4gICAgICAgID0gcmVnXzFbMzE6MF07IAorCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfc3BpX2Rpbl9iZTAgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl8xICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzBdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVs3OjBdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzFbNzowXSAgICAgICAgKQorICAgICAgICAgICk7CisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9zcGlfZGluX2JlMSAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzEgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMV0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzE1OjhdICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMVsxNTo4XSAgICAgICApCisgICAgICAgICAgKTsKKworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3NwaV9kaW5fYmUyICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMSAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsyXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMjM6MTZdICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18xWzIzOjE2XSAgICAgICkKKyAgICAgICAgICApOworCisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9zcGlfZGluX2JlMyAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzEgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbM10gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzMxOjI0XSAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMVszMToyNF0gICAgICApCisgICAgICAgICAgKTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2dpYyBmb3IgUmVnaXN0ZXIgMiA6IFNQSSBEYXRhIG91dHB1dCBSZWdpc3RlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYXNzaWduICByZWdfMiA9IGNmZ19kYXRhb3V0OyAKKworCisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3NwaW0vc3JjL3NzcGltX2N0bC5zdiBiL3Zlcmlsb2cvcnRsL3NzcGltL3NyYy9zc3BpbV9jdGwuc3YKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjY1YzBjMgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3NzcGltL3NyYy9zc3BpbV9jdGwuc3YKQEAgLTAsMCArMSwyODYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgU2luZ2xlIFNQSSBNYXN0ZXIgSW50ZXJmYWNlIE1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmlzY2R1aW5vIGNvcmVzIHByb2plY3QgICAgICAgICAgICAvLy8vDQorLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEvcmlzY2R1aW5vLmdpdCAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgIFNQSSBDb250cm9sIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgIFYuMCAgLSAwNiBPY3QgMjAyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgSW5pdGlhbCBTcEkgTW9kdWxlIHBpY2tlZCBmcm9tICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy90dXJibzgwNTEvICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vDQorLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLw0KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8NCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8NCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vDQorLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLw0KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8NCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8NCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vDQorLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLw0KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8NCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8NCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vDQorLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorDQorDQorDQorbW9kdWxlIHNzcGltX2N0bA0KKyAgICAgICAoIA0KKyAgaW5wdXQgIGxvZ2ljICAgICAgICAgIGNsaywNCisgIGlucHV0ICBsb2dpYyAgICAgICAgICByZXNldF9uLA0KKyAgaW5wdXQgIGxvZ2ljICAgICAgICAgIGNmZ19vcF9yZXEsDQorICBpbnB1dCAgbG9naWMgWzE6MF0gICAgY2ZnX29wX3R5cGUsDQorICBpbnB1dCAgbG9naWMgWzE6MF0gICAgY2ZnX3RyYW5zZmVyX3NpemUsDQorICAgIA0KKyAgaW5wdXQgIGxvZ2ljIFs1OjBdICAgIGNmZ19zY2tfcGVyaW9kLA0KKyAgaW5wdXQgIGxvZ2ljIFs0OjBdICAgIGNmZ19zY2tfY3NfcGVyaW9kLCAvLyBjcyBzZXR1cCAmIGhvbGQgcGVyaW9kDQorICBpbnB1dCAgbG9naWMgWzc6MF0gICAgY2ZnX2NzX2J5dGUsDQorICBpbnB1dCAgbG9naWMgWzMxOjBdICAgY2ZnX2RhdGFpbiwNCisgIG91dHB1dCBsb2dpYyBbMzE6MF0gICBjZmdfZGF0YW91dCwNCisNCisgIG91dHB1dCBsb2dpYyBbNzowXSAgICBieXRlX291dCwgLy8gQnl0ZSBvdXQgZm9yIFNlcmlhbCBTaGlmdGluZyBvdXQNCisgIGlucHV0ICBsb2dpYyBbNzowXSAgICBieXRlX2luLCAgLy8gU2VyaWFsIFJlY2VpdmVkIEJ5dGUNCisgIG91dHB1dCBsb2dpYyAgICAgICAgICBzY2tfaW50LA0KKyAgb3V0cHV0IGxvZ2ljICAgICAgICAgIGNzX2ludF9uLA0KKyAgb3V0cHV0IGxvZ2ljICAgICAgICAgIHNja19wZSwNCisgIG91dHB1dCBsb2dpYyAgICAgICAgICBzY2tfbmUsDQorICBvdXRwdXQgbG9naWMgICAgICAgICAgc2hpZnRfb3V0LA0KKyAgb3V0cHV0IGxvZ2ljICAgICAgICAgIHNoaWZ0X2luLA0KKyAgb3V0cHV0IGxvZ2ljICAgICAgICAgIGxvYWRfYnl0ZSwNCisgIG91dHB1dCBsb2dpYyAgICAgICAgICBvcF9kb25lDQorICAgICAgICAgDQorICAgICAgICAgKTsNCisNCisgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICBsb2dpYyBbNTowXSAgICAgICBjbGtfY250Ow0KKyAgbG9naWMgWzU6MF0gICAgICAgc2NrX2NudDsNCisNCisgIGxvZ2ljIFszOjBdICAgICAgIHNwaWlmX2NzOw0KKyAgbG9naWMgICAgICAgICAgICAgc2hpZnRfZW5iOw0KKyAgbG9naWMgICAgICAgICAgICAgY2xyX3Nja19jbnQgOw0KKyAgbG9naWMgICAgICAgICAgICAgc2NrX291dF9lbjsNCisNCisgIGxvZ2ljICBbNTowXSAgICAgIHNja19oYWxmX3BlcmlvZDsNCisgIGxvZ2ljIFsyOjBdICAgICAgIGJ5dGVfY250Ow0KKw0KKw0KKyAgYGRlZmluZSBTUElfSURMRSAgIDQnYjAwMDANCisgIGBkZWZpbmUgU1BJX0NTX1NVICA0J2IwMDAxDQorICBgZGVmaW5lIFNQSV9XUklURSAgNCdiMDAxMA0KKyAgYGRlZmluZSBTUElfUkVBRCAgIDQnYjAwMTENCisgIGBkZWZpbmUgU1BJX0NTX0hMRCA0J2IwMTAwDQorICBgZGVmaW5lIFNQSV9XQUlUICAgNCdiMDEwMQ0KKw0KKw0KKyAgYXNzaWduIHNja19oYWxmX3BlcmlvZCA9IHsxJ2IwLCBjZmdfc2NrX3BlcmlvZFs1OjFdfTsNCisgIC8vIFRoZSBmaXJzdCB0cmFuc2l0aW9uIG9uIHRoZSBzY2tfdG9nZ2xlIGhhcHBlbnMgb25lIFNDSyBwZXJpb2QNCisgIC8vIGFmdGVyIG9wX2VuIG9yIGJvb3RfZW4gaXMgYXNzZXJ0ZWQNCisgIGFsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcmVzZXRfbikgYmVnaW4NCisgICAgIGlmKCFyZXNldF9uKSBiZWdpbg0KKyAgICAgICAgc2NrX25lICAgPD0gMSdiMDsNCisgICAgICAgIGNsa19jbnQgIDw9IDYnaDE7DQorICAgICAgICBzY2tfcGUgICA8PSAxJ2IwOw0KKyAgICAgICAgc2NrX2ludCAgPD0gMSdiMDsNCisgICAgIGVuZCAvLyBpZiAoIXJlc2V0X24pDQorICAgICBlbHNlIA0KKyAgICAgYmVnaW4NCisgICAgICAgIGlmKGNmZ19vcF9yZXEpIA0KKyAgICAgICAgYmVnaW4NCisgICAgICAgICAgIGlmKGNsa19jbnQgPT0gc2NrX2hhbGZfcGVyaW9kKSANCisgICAgICAgICAgIGJlZ2luDQorICAgICAgICAgICAgICBzY2tfbmUgPD0gMSdiMTsNCisgICAgICAgICAgICAgIHNja19wZSA8PSAxJ2IwOw0KKyAgICAgICAgICAgICAgaWYoc2NrX291dF9lbikgc2NrX2ludCA8PSAwOw0KKyAgICAgICAgICAgICAgY2xrX2NudCA8PSBjbGtfY250ICsgMSdiMTsNCisgICAgICAgICAgIGVuZCAvLyBpZiAoY2xrX2NudCA9PSBzY2tfaGFsZl9wZXJpb2QpDQorICAgICAgICAgICBlbHNlIA0KKyAgICAgICAgICAgYmVnaW4NCisgICAgICAgICAgICAgIGlmKGNsa19jbnQgPT0gY2ZnX3Nja19wZXJpb2QpIA0KKyAgICAgICAgICAgICAgYmVnaW4NCisgICAgICAgICAgICAgICAgIHNja19uZSA8PSAxJ2IwOw0KKyAgICAgICAgICAgICAgICAgc2NrX3BlIDw9IDEnYjE7DQorICAgICAgICAgICAgICAgICBpZihzY2tfb3V0X2VuKSBzY2tfaW50IDw9IDE7DQorICAgICAgICAgICAgICAgICBjbGtfY250IDw9IDYnaDE7DQorICAgICAgICAgICAgICBlbmQgLy8gaWYgKGNsa19jbnQgPT0gY2ZnX3Nja19wZXJpb2QpDQorICAgICAgICAgICAgICBlbHNlIA0KKyAgICAgICAgICAgICAgYmVnaW4NCisgICAgICAgICAgICAgICAgIGNsa19jbnQgPD0gY2xrX2NudCArIDEnYjE7DQorICAgICAgICAgICAgICAgICBzY2tfcGUgPD0gMSdiMDsNCisgICAgICAgICAgICAgICAgIHNja19uZSA8PSAxJ2IwOw0KKyAgICAgICAgICAgICAgZW5kIC8vIGVsc2U6ICFpZihjbGtfY250ID09IGNmZ19zY2tfcGVyaW9kKQ0KKyAgICAgICAgICAgZW5kIC8vIGVsc2U6ICFpZihjbGtfY250ID09IHNja19oYWxmX3BlcmlvZCkNCisgICAgICAgIGVuZCAvLyBpZiAob3BfZW4pDQorICAgICAgICBlbHNlIA0KKyAgICAgICAgYmVnaW4NCisgICAgICAgICAgIGNsa19jbnQgICAgPD0gNidoMTsNCisgICAgICAgICAgIHNja19wZSAgICAgPD0gMSdiMDsNCisgICAgICAgICAgIHNja19uZSAgICAgPD0gMSdiMDsNCisgICAgICAgIGVuZCAvLyBlbHNlOiAhaWYob3BfZW4pDQorICAgICBlbmQgLy8gZWxzZTogIWlmKCFyZXNldF9uKQ0KKyAgZW5kIC8vIGFsd2F5cyBAIChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJlc2V0X24pDQorICANCisNCit3aXJlIFsxOjBdIGNzX2RhdGEgPSAgKGJ5dGVfY250ID09IDInYjAwKSA/IGNmZ19jc19ieXRlWzc6Nl0gIDoNCisgICAgICAgICAgICAgICAgICAgICAgKGJ5dGVfY250ID09IDInYjAxKSA/IGNmZ19jc19ieXRlWzU6NF0gIDoNCisgICAgICAgICAgICAgICAgICAgICAgKGJ5dGVfY250ID09IDInYjEwKSA/IGNmZ19jc19ieXRlWzM6Ml0gIDogY2ZnX2NzX2J5dGVbMTowXSA7DQorDQorYXNzaWduIGJ5dGVfb3V0ID0gKGJ5dGVfY250ID09IDInYjAwKSA/IGNmZ19kYXRhaW5bMzE6MjRdIDoNCisgICAgICAgICAgICAgICAgICAgICAgKGJ5dGVfY250ID09IDInYjAxKSA/IGNmZ19kYXRhaW5bMjM6MTZdIDoNCisgICAgICAgICAgICAgICAgICAgICAgKGJ5dGVfY250ID09IDInYjEwKSA/IGNmZ19kYXRhaW5bMTU6OF0gIDogY2ZnX2RhdGFpbls3OjBdIDsNCisgICAgICAgICANCithc3NpZ24gc2hpZnRfb3V0ID0gIHNoaWZ0X2VuYiAmJiBzY2tfbmU7DQorDQorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByZXNldF9uKSBiZWdpbg0KKyAgIGlmKCFyZXNldF9uKSBiZWdpbg0KKyAgICAgIHNwaWlmX2NzICAgIDw9IGBTUElfSURMRTsNCisgICAgICBzY2tfY250ICAgICA8PSA2J2gwOw0KKyAgICAgIHNoaWZ0X2luICAgIDw9IDEnYjA7DQorICAgICAgY2xyX3Nja19jbnQgPD0gMSdiMTsNCisgICAgICBieXRlX2NudCAgICA8PSAyJ2IwMDsNCisgICAgICBjc19pbnRfbiAgICA8PSAxJ2IxOw0KKyAgICAgIHNja19vdXRfZW4gIDw9IDEnYjA7DQorICAgICAgc2hpZnRfZW5iICAgPD0gMSdiMDsNCisgICAgICBjZmdfZGF0YW91dCA8PSAzMidoMDsNCisgICAgICBsb2FkX2J5dGUgICA8PSAxJ2IwOw0KKyAgIGVuZA0KKyAgIGVsc2UgYmVnaW4NCisgICAgICBpZihzY2tfbmUpDQorICAgICAgICAgc2NrX2NudCA8PSAgY2xyX3Nja19jbnQgID8gNidoMCA6IHNja19jbnQgKyAxIDsNCisNCisgICAgICBjYXNlKHNwaWlmX2NzKQ0KKyAgICAgIGBTUElfSURMRSAgIDogDQorICAgICAgYmVnaW4NCisgICAgICAgICAgb3BfZG9uZSAgICAgPD0gMDsNCisgICAgICAgICAgY2xyX3Nja19jbnQgPD0gMSdiMTsNCisgICAgICAgICAgc2NrX291dF9lbiAgPD0gMSdiMDsNCisgICAgICAgICAgc2hpZnRfZW5iICAgPD0gMSdiMDsNCisgICAgICAgICAgaWYoY2ZnX29wX3JlcSkgDQorICAgICAgICAgIGJlZ2luDQorICAgICAgICAgICAgICBjZmdfZGF0YW91dCA8PSAzMidoMDsNCisgICAgICAgICAgICAgIHNwaWlmX2NzICAgIDw9IGBTUElfQ1NfU1U7DQorICAgICAgICAgICBlbmQgDQorICAgICAgICAgICBlbHNlIGJlZ2luDQorICAgICAgICAgICAgICBzcGlpZl9jcyA8PSBgU1BJX0lETEU7DQorICAgICAgICAgICBlbmQgDQorICAgICAgZW5kIA0KKw0KKyAgICAgIGBTUElfQ1NfU1UgIDogDQorICAgICAgIGJlZ2luDQorICAgICAgICAgIGlmKHNja19uZSkgYmVnaW4NCisgICAgICAgICAgICBjc19pbnRfbiA8PSBjc19kYXRhWzFdOw0KKyAgICAgICAgICAgIGlmKHNja19jbnQgPT0gY2ZnX3Nja19jc19wZXJpb2QpIGJlZ2luDQorICAgICAgICAgICAgICAgY2xyX3Nja19jbnQgPD0gMSdiMTsNCisgICAgICAgICAgICAgICBpZihjZmdfb3BfdHlwZSA9PSAwKSBiZWdpbiAvLyBXcml0ZSBNb2RlDQorICAgICAgICAgICAgICAgICAgbG9hZF9ieXRlICAgPD0gMSdiMTsNCisgICAgICAgICAgICAgICAgICBzcGlpZl9jcyAgICA8PSBgU1BJX1dSSVRFOw0KKyAgICAgICAgICAgICAgICAgIHNoaWZ0X2VuYiAgIDw9IDEnYjA7DQorICAgICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4NCisgICAgICAgICAgICAgICAgICBzaGlmdF9pbiAgICA8PSAxOw0KKyAgICAgICAgICAgICAgICAgIHNwaWlmX2NzICAgIDw9IGBTUElfUkVBRDsNCisgICAgICAgICAgICAgICAgZW5kDQorICAgICAgICAgICAgIGVuZA0KKyAgICAgICAgICAgICBlbHNlIGJlZ2luIA0KKyAgICAgICAgICAgICAgICBjbHJfc2NrX2NudCA8PSAxJ2IwOw0KKyAgICAgICAgICAgICBlbmQNCisgICAgICAgICBlbmQNCisgICAgICBlbmQgDQorDQorICAgICAgYFNQSV9XUklURSA6IA0KKyAgICAgICBiZWdpbiANCisgICAgICAgICBsb2FkX2J5dGUgICA8PSAxJ2IwOw0KKyAgICAgICAgIGlmKHNja19uZSkgYmVnaW4NCisgICAgICAgICAgIGlmKHNja19jbnQgPT0gMydoNyApYmVnaW4NCisgICAgICAgICAgICAgIGNscl9zY2tfY250IDw9IDEnYjE7DQorICAgICAgICAgICAgICBzcGlpZl9jcyAgICA8PSBgU1BJX0NTX0hMRDsNCisgICAgICAgICAgICAgIHNoaWZ0X2VuYiAgIDw9IDEnYjA7DQorICAgICAgICAgICAgICBzY2tfb3V0X2VuICA8PSAxJ2IwOyAvLyBEaXNhYmxlIGNsb2NrIG91dHB1dA0KKyAgICAgICAgICAgZW5kDQorICAgICAgICAgICBlbHNlIGJlZ2luDQorICAgICAgICAgICAgICBzaGlmdF9lbmIgICA8PSAxJ2IxOw0KKyAgICAgICAgICAgICAgc2NrX291dF9lbiAgPD0gMSdiMTsNCisgICAgICAgICAgICAgIGNscl9zY2tfY250IDw9IDEnYjA7DQorICAgICAgICAgICBlbmQNCisgICAgICAgICBlbmQgZWxzZSBiZWdpbg0KKyAgICAgICAgICAgIHNoaWZ0X2VuYiAgIDw9IDEnYjE7DQorICAgICAgICAgZW5kDQorICAgICAgZW5kIA0KKw0KKyAgICAgIGBTUElfUkVBRCA6IA0KKyAgICAgICBiZWdpbiANCisgICAgICAgICBpZihzY2tfbmUpIGJlZ2luDQorICAgICAgICAgICAgIGlmKCBzY2tfY250ID09IDMnaDcgKSBiZWdpbg0KKyAgICAgICAgICAgICAgICBjbHJfc2NrX2NudCA8PSAxJ2IxOw0KKyAgICAgICAgICAgICAgICBzaGlmdF9pbiAgICA8PSAwOw0KKyAgICAgICAgICAgICAgICBzcGlpZl9jcyAgICA8PSBgU1BJX0NTX0hMRDsNCisgICAgICAgICAgICAgICAgc2NrX291dF9lbiAgPD0gMSdiMDsgLy8gRGlzYWJsZSBjbG9jayBvdXRwdXQNCisgICAgICAgICAgICAgZW5kDQorICAgICAgICAgICAgIGVsc2UgYmVnaW4NCisgICAgICAgICAgICAgICAgc2NrX291dF9lbiAgPD0gMSdiMTsgLy8gRGlzYWJsZSBjbG9jayBvdXRwdXQNCisgICAgICAgICAgICAgICAgY2xyX3Nja19jbnQgPD0gMSdiMDsNCisgICAgICAgICAgICAgZW5kDQorICAgICAgICAgZW5kDQorICAgICAgZW5kIA0KKw0KKyAgICAgIGBTUElfQ1NfSExEIDogYmVnaW4NCisgICAgICAgICBpZihzY2tfbmUpIGJlZ2luDQorICAgICAgICAgICAgIGNzX2ludF9uIDw9IGNzX2RhdGFbMF07DQorICAgICAgICAgICAgaWYoc2NrX2NudCA9PSBjZmdfc2NrX2NzX3BlcmlvZCkgYmVnaW4NCisgICAgICAgICAgICAgICBpZihjZmdfb3BfdHlwZSA9PSAxKSBiZWdpbiAvLyBSZWFkIE1vZGUNCisgICAgICAgICAgICAgICAgICBjZmdfZGF0YW91dCA8PSAoYnl0ZV9jbnRbMTowXSA9PSAyJ2IwMCkgPyB7IGJ5dGVfaW4sIGNmZ19kYXRhb3V0WzIzOjBdIH0gOg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRlX2NudFsxOjBdID09IDInYjAxKSA/IHsgY2ZnX2RhdGFvdXRbMzE6MjRdICwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVfaW4sIGNmZ19kYXRhb3V0WzE1OjBdIH0gOg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRlX2NudFsxOjBdID09IDInYjEwKSA/IHsgY2ZnX2RhdGFvdXRbMzE6MTZdICwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVfaW4sIGNmZ19kYXRhb3V0Wzc6MF0gIH0gOg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgY2ZnX2RhdGFvdXRbMzE6OF0gICwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVfaW4gIH0gOw0KKyAgICAgICAgICAgICAgIGVuZA0KKyAgICAgICAgICAgICAgIGNscl9zY2tfY250IDw9IDEnYjE7DQorICAgICAgICAgICAgICAgaWYoYnl0ZV9jbnQgPT0gY2ZnX3RyYW5zZmVyX3NpemUpIGJlZ2luDQorICAgICAgICAgICAgICAgICAgc3BpaWZfY3MgPD0gYFNQSV9XQUlUOw0KKyAgICAgICAgICAgICAgICAgIGJ5dGVfY250IDw9IDA7DQorICAgICAgICAgICAgICAgICAgb3BfZG9uZSAgPD0gMTsNCisgICAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbg0KKyAgICAgICAgICAgICAgICAgIGJ5dGVfY250IDw9IGJ5dGVfY250ICsxOw0KKyAgICAgICAgICAgICAgICAgIHNwaWlmX2NzIDw9IGBTUElfQ1NfU1U7DQorICAgICAgICAgICAgICAgZW5kDQorICAgICAgICAgICAgZW5kDQorICAgICAgICAgICAgZWxzZSBiZWdpbg0KKyAgICAgICAgICAgICAgICBjbHJfc2NrX2NudCA8PSAxJ2IwOw0KKyAgICAgICAgICAgIGVuZA0KKyAgICAgICAgIGVuZCANCisgICAgICBlbmQgLy8gY2FzZTogYFNQSV9DU19ITEQgICAgDQorICAgICAgYFNQSV9XQUlUIDogYmVnaW4NCisgICAgICAgICAgaWYoIWNmZ19vcF9yZXEpIC8vIFdhaXQgZm9yIFJlcXVlc3QgZGUtYXNzZXJ0aW9uDQorICAgICAgICAgICAgIHNwaWlmX2NzIDw9IGBTUElfSURMRTsNCisgICAgICAgZW5kDQorICAgIGVuZGNhc2UgLy8gY2FzZXgoc3BpaWZfY3MpDQorICAgZW5kDQorZW5kIC8vIGFsd2F5cyBAKHNja19uZQ0KKw0KK2VuZG1vZHVsZQ0KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3NzcGltL3NyYy9zc3BpbV9pZi5zdiBiL3Zlcmlsb2cvcnRsL3NzcGltL3NyYy9zc3BpbV9pZi5zdgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MmIxOGYyCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvc3NwaW0vc3JjL3NzcGltX2lmLnN2CkBAIC0wLDAgKzEsMTIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBTaW5nbGUgU1BJIE1hc3RlciBJbnRlcmZhY2UgTW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmlzY2R1aW5vIGNvcmVzIHByb2plY3QgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS9yaXNjZHVpbm8uZ2l0ICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgVi4wICAtIDA2IE9jdCAyMDIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEluaXRpYWwgU3BJIE1vZHVsZSBwaWNrZWQgZnJvbSAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy90dXJibzgwNTEvICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK21vZHVsZSBzc3BpbV9pZgorICAgICAgICAgICgKKyAgICAgICAgICBpbnB1dCAgbG9naWMgY2xrLAorICAgICAgICAgIGlucHV0ICBsb2dpYyByZXNldF9uLAorICAgICAgICAgIGlucHV0ICBsb2dpYyBzY2tfcGUsCisgICAgICAgICAgaW5wdXQgIGxvZ2ljIHNja19pbnQsCisgICAgICAgICAgaW5wdXQgIGxvZ2ljIGNzX2ludF9uLAorICAgICAgICAgIAorICAgICAgICAgIGlucHV0ICBsb2dpYyAgICAgICBsb2FkX2J5dGUsCisgICAgICAgICAgaW5wdXQgIGxvZ2ljIFsxOjBdIGNmZ190Z3Rfc2VsLAorCisgICAgICAgICAgaW5wdXQgIGxvZ2ljIFs3OjBdIGJ5dGVfb3V0LAorICAgICAgICAgIGlucHV0ICBsb2dpYyAgICAgICBzaGlmdF9vdXQsCisgICAgICAgICAgaW5wdXQgIGxvZ2ljICAgICAgIHNoaWZ0X2luLAorCisgICAgICAgICAgb3V0cHV0IGxvZ2ljICBbNzowXSBieXRlX2luLAorICAgICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgc2NrLAorICAgICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgc28sCisgICAgICAgICAgb3V0cHV0IGxvZ2ljICBbMzowXSBjc19uLAorICAgICAgICAgIGlucHV0ICBsb2dpYyAgICAgICAgc2kKKyAgICAgICAgICAgKTsKKworCisKKyAgbG9naWMgWzc6MF0gICAgc29fcmVnOworICBsb2dpYyBbNzowXSAgICBzaV9yZWc7CisKKworICAvL091dHB1dCBTaGlmdCBSZWdpc3RlcgorCisgIGFsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcmVzZXRfbikgYmVnaW4KKyAgICAgaWYoIXJlc2V0X24pIGJlZ2luCisgICAgICAgIHNvX3JlZyA8PSA4J2gwMDsKKyAgICAgICAgc28gPD0gMSdiMDsKKyAgICAgZW5kCisgICAgIGVsc2UgYmVnaW4KKyAgICAgICAgaWYobG9hZF9ieXRlKSBiZWdpbgorICAgICAgICAgICBzb19yZWcgPD0gYnl0ZV9vdXQ7CisgICAgICAgICAgIGlmKHNoaWZ0X291dCkgYmVnaW4gCisgICAgICAgICAgICAgIC8vIEhhbmRsaW5nIGJhY2t0byBiYWNrIGNhc2UgOiAKKyAgICAgICAgICAgICAgLy8gTGFzdCBUcmFuc2ZlciBiaXQgKyBOZXcgVHJhc2ZlciBMb2FkCisgICAgICAgICAgICAgIHNvIDw9IHNvX3JlZ1s3XTsKKyAgICAgICAgICAgZW5kCisgICAgICAgIGVuZCAvLyBpZiAobG9hZF9ieXRlKQorICAgICAgICBlbHNlIGJlZ2luCisgICAgICAgICAgIGlmKHNoaWZ0X291dCkgYmVnaW4KKyAgICAgICAgICAgICAgc28gPD0gc29fcmVnWzddOworICAgICAgICAgICAgICBzb19yZWcgPD0ge3NvX3JlZ1s2OjBdLDEnYjB9OworICAgICAgICAgICBlbmQgLy8gaWYgKHNoaWZ0X291dCkKKyAgICAgICAgZW5kIC8vIGVsc2U6ICFpZihsb2FkX2J5dGUpCisgICAgIGVuZCAvLyBlbHNlOiAhaWYoIXJlc2V0X24pCisgIGVuZCAvLyBhbHdheXMgQCAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByZXNldF9uKQorCisKKy8vIElucHV0IHNoaWZ0IHJlZ2lzdGVyCisgIGFsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcmVzZXRfbikgYmVnaW4KKyAgICAgaWYoIXJlc2V0X24pIGJlZ2luCisgICAgICAgIHNpX3JlZyA8PSA4J2gwOworICAgICBlbmQKKyAgICAgZWxzZSBiZWdpbgorICAgICAgICBpZihzY2tfcGUgJiBzaGlmdF9pbikgYmVnaW4KKyAgICAgICAgICAgc2lfcmVnWzc6MF0gPD0ge3NpX3JlZ1s2OjBdLHNpfTsKKyAgICAgICAgZW5kIC8vIGlmIChzY2tfcGUgJiBzaGlmdF9pbikKKyAgICAgZW5kIC8vIGVsc2U6ICFpZighcmVzZXRfbikKKyAgZW5kIC8vIGFsd2F5cyBAIChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJlc2V0X24pCisKKworICBhc3NpZ24gYnl0ZV9pbls3OjBdID0gc2lfcmVnWzc6MF07CisgIGFzc2lnbiBjc19uWzBdID0gKGNmZ190Z3Rfc2VsWzE6MF0gPT0gMidiMDApID8gY3NfaW50X24gOiAxJ2IxOworICBhc3NpZ24gY3NfblsxXSA9IChjZmdfdGd0X3NlbFsxOjBdID09IDInYjAxKSA/IGNzX2ludF9uIDogMSdiMTsKKyAgYXNzaWduIGNzX25bMl0gPSAoY2ZnX3RndF9zZWxbMTowXSA9PSAyJ2IxMCkgPyBjc19pbnRfbiA6IDEnYjE7CisgIGFzc2lnbiBjc19uWzNdID0gKGNmZ190Z3Rfc2VsWzE6MF0gPT0gMidiMTEpID8gY3NfaW50X24gOiAxJ2IxOworICBhc3NpZ24gc2NrID0gc2NrX2ludDsKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zc3BpbS9zcmMvc3NwaW1fdG9wLnN2IGIvdmVyaWxvZy9ydGwvc3NwaW0vc3JjL3NzcGltX3RvcC5zdgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYzc0MGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvc3NwaW0vc3JjL3NzcGltX3RvcC5zdgpAQCAtMCwwICsxLDIwOCBAQAorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFNQSSBNYXN0ZXIgVG9wIE1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSByaXNjZHVpbm8gY29yZXMgcHJvamVjdCAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3Jpc2NkdWluby5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgYmxvY2sgaW50ZWdyYXRlIHRoZSBTUEkgTWFzdGVyIHJlbGF0ZWQgbW9kdWxlICAgICAgICAgIC8vLy8KKy8vLy8gICAgIC0gc3NwaW1faWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgIC0gc3NwaW1fY3RsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgIC0gc3NwaW1fY2ZnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMDMgT2N0IDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgSW5pdGlhbCBTcEkgTW9kdWxlIHBpY2tlZCBmcm9tICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy90dXJibzgwNTEvICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworCittb2R1bGUgc3NwaW1fdG9wICgKKyAgICAgICAgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgY2xrICAgICAgICAgICwKKyAgICAgICAgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgcmVzZXRfbiAgICAgICwgICAgICAgICAgCisgICAgICAgICAgIAorICAgICAgICAgICAKKyAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgLy8gUmVnIEJ1cyBJbnRlcmZhY2UgU2lnbmFsCisgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgIGlucHV0IGxvZ2ljICAgICAgICAgIHJlZ19jcyAgICAgICAsCisgICAgICAgICAgIGlucHV0IGxvZ2ljICAgICAgICAgIHJlZ193ciAgICAgICAsCisgICAgICAgICAgIGlucHV0IGxvZ2ljIFs3OjBdICAgIHJlZ19hZGRyICAgICAsCisgICAgICAgICAgIGlucHV0IGxvZ2ljIFszMTowXSAgIHJlZ193ZGF0YSAgICAsCisgICAgICAgICAgIGlucHV0IGxvZ2ljIFszOjBdICAgIHJlZ19iZSAgICAgICAsCisgICAgICAgICAgIAorICAgICAgICAgICAvLyBPdXRwdXRzCisgICAgICAgICAgIG91dHB1dCBsb2dpYyBbMzE6MF0gIHJlZ19yZGF0YSAgICAsCisgICAgICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgIHJlZ19hY2sgICAgICAsCisgICAgICAgICAgIAorICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgLy8gTGluZSBJbnRlcmZhY2UKKyAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgIAorICAgICAgICAgICBvdXRwdXQgbG9naWMgICAgICAgIHNjayAgICAgICAgICAgLCAvLyBjbG9jayBvdXQKKyAgICAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICBzbyAgICAgICAgICAgICwgLy8gc2VyaWFsIGRhdGEgb3V0CisgICAgICAgICAgIGlucHV0ICBsb2dpYyAgICAgICAgc2kgICAgICAgICAgICAsIC8vIHNlcmlhbCBkYXRhIGluCisgICAgICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgc3NuICAgICAgICAgICAgIC8vIGNzX24KKworICAgICAgICAgICApOworIAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9jYWwgZGVjbHJhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbG9naWMgWzc6MF0gICAgICAgICAgYnl0ZV9pbiAgICAgICAgICAgICAgICAgICAgICAgOworbG9naWMgWzc6MF0gICAgICAgICAgYnl0ZV9vdXQgICAgICAgICAgICAgICAgICAgICAgOworCisKK2xvZ2ljICBbMTowXSAgICAgICAgIGNmZ190Z3Rfc2VsICAgICAgICAgICAgICAgICAgIDsKKworbG9naWMgICAgICAgICAgICAgICAgY2ZnX29wX3JlcSAgICAgICAgICAgICAgICAgICAgOyAvLyBTUEkgb3BlcmF0aW9uIHJlcXVlc3QKK2xvZ2ljICBbMTowXSAgICAgICAgIGNmZ19vcF90eXBlICAgICAgICAgICAgICAgICAgIDsgLy8gU1BJIG9wZXJhdGlvbiB0eXBlCitsb2dpYyAgWzE6MF0gICAgICAgICBjZmdfdHJhbnNmZXJfc2l6ZSAgICAgICAgICAgICA7IC8vIFNQSSB0cmFuc2ZlciBzaXplCitsb2dpYyAgWzU6MF0gICAgICAgICBjZmdfc2NrX3BlcmlvZCAgICAgICAgICAgICAgICA7IC8vIHNjayBjbG9jayBwZXJpb2QKK2xvZ2ljICBbNDowXSAgICAgICAgIGNmZ19zY2tfY3NfcGVyaW9kICAgICAgICAgICAgIDsgLy8gY3Mgc2V0dXAvaG9sZCBwZXJpb2QKK2xvZ2ljICBbNzowXSAgICAgICAgIGNmZ19jc19ieXRlICAgICAgICAgICAgICAgICAgIDsgLy8gY3MgYml0IGluZm9ybWF0aW9uCitsb2dpYyAgWzMxOjBdICAgICAgICBjZmdfZGF0YWluICAgICAgICAgICAgICAgICAgICA7IC8vIGRhdGEgZm9yIHRyYW5zZmVyCitsb2dpYyAgWzMxOjBdICAgICAgICBjZmdfZGF0YW91dCAgICAgICAgICAgICAgICAgICA7IC8vIGRhdGEgZm9yIHJlY2VpdmVkCitsb2dpYyAgICAgICAgICAgICAgICBod2FyZV9vcF9kb25lICAgICAgICAgICAgICAgICA7IC8vIG9wZXJhdGlvbiBkb25lCitsb2dpYyBbMzowXSAgICAgICAgICBjc19uICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIGNzX24KKworYXNzaWduIHNzbiA9ICBjc19uWzBdOyAvLyBPbmx5IDEgY2hpcCBzZWxlY3Qgc3VwcG9ydGVkIGluIHJpc2NkdW5pbworCitzc3BpbV9pZiAgdV9zcGlfaWYKKyAgICAgICAgICAoCisgICAgICAgICAgLiBjbGsgICAgICAgICAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICAgICAgICAgICAgKSwgCisgICAgICAgICAgLiByZXNldF9uICAgICAgICAgICAgICAgICAgICAgKHJlc2V0X24gICAgICAgICAgICAgICAgICAgICAgKSwKKworICAgICAgICAgICAvLyB0b3dhcmRzIGN0cmwgaS9mCisgICAgICAgICAgLiBzY2tfcGUgICAgICAgICAgICAgICAgICAgICAgKHNja19wZSAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuIHNja19pbnQgICAgICAgICAgICAgICAgICAgICAoc2NrX2ludCAgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC4gY3NfaW50X24gICAgICAgICAgICAgICAgICAgIChjc19pbnRfbiAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLiBieXRlX2luICAgICAgICAgICAgICAgICAgICAgKGJ5dGVfaW4gICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuIGxvYWRfYnl0ZSAgICAgICAgICAgICAgICAgICAobG9hZF9ieXRlICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC4gYnl0ZV9vdXQgICAgICAgICAgICAgICAgICAgIChieXRlX291dCAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLiBzaGlmdF9vdXQgICAgICAgICAgICAgICAgICAgKHNoaWZ0X291dCAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuIHNoaWZ0X2luICAgICAgICAgICAgICAgICAgICAoc2hpZnRfaW4gICAgICAgICAgICAgICAgICAgICApLAorCisgICAgICAgICAgLiBjZmdfdGd0X3NlbCAgICAgICAgICAgICAgICAgKGNmZ190Z3Rfc2VsICAgICAgICAgICAgICAgICAgKSwKKworICAgICAgICAgIC4gc2NrICAgICAgICAgICAgICAgICAgICAgICAgIChzY2sgICAgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLiBzbyAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuIHNpICAgICAgICAgICAgICAgICAgICAgICAgICAoc2kgICAgICAgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC4gY3NfbiAgICAgICAgICAgICAgICAgICAgICAgIChjc19uICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgKTsKKworCitzc3BpbV9jdGwgIHVfc3BpX2N0cmwKKyAgICAgICAoIAorICAgICAgICAgIC4gY2xrICAgICAgICAgICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLiByZXNldF9uICAgICAgICAgICAgICAgICAgICAgKHJlc2V0X24gICAgICAgICAgICAgICAgICAgICAgKSwKKworICAgICAgICAgIC4gY2ZnX29wX3JlcSAgICAgICAgICAgICAgICAgIChjZmdfb3BfcmVxICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLiBjZmdfb3BfdHlwZSAgICAgICAgICAgICAgICAgKGNmZ19vcF90eXBlICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuIGNmZ190cmFuc2Zlcl9zaXplICAgICAgICAgICAoY2ZnX3RyYW5zZmVyX3NpemUgICAgICAgICAgICApLAorICAgICAgICAgIC4gY2ZnX3Nja19wZXJpb2QgICAgICAgICAgICAgIChjZmdfc2NrX3BlcmlvZCAgICAgICAgICAgICAgICksCisgICAgICAgICAgLiBjZmdfc2NrX2NzX3BlcmlvZCAgICAgICAgICAgKGNmZ19zY2tfY3NfcGVyaW9kICAgICAgICAgICAgKSwKKyAgICAgICAgICAuIGNmZ19jc19ieXRlICAgICAgICAgICAgICAgICAoY2ZnX2NzX2J5dGUgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC4gY2ZnX2RhdGFpbiAgICAgICAgICAgICAgICAgIChjZmdfZGF0YWluICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLiBjZmdfZGF0YW91dCAgICAgICAgICAgICAgICAgKGNmZ19kYXRhb3V0ICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuIG9wX2RvbmUgICAgICAgICAgICAgICAgICAgICAoaHdhcmVfb3BfZG9uZSAgICAgICAgICAgICAgICApLAorCisgICAgICAgICAgLiBzY2tfaW50ICAgICAgICAgICAgICAgICAgICAgKHNja19pbnQgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuIGNzX2ludF9uICAgICAgICAgICAgICAgICAgICAoY3NfaW50X24gICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC4gc2NrX3BlICAgICAgICAgICAgICAgICAgICAgIChzY2tfcGUgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLiBzY2tfbmUgICAgICAgICAgICAgICAgICAgICAgKHNja19uZSAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuIHNoaWZ0X291dCAgICAgICAgICAgICAgICAgICAoc2hpZnRfb3V0ICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC4gc2hpZnRfaW4gICAgICAgICAgICAgICAgICAgIChzaGlmdF9pbiAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLiBsb2FkX2J5dGUgICAgICAgICAgICAgICAgICAgKGxvYWRfYnl0ZSAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuIGJ5dGVfb3V0ICAgICAgICAgICAgICAgICAgICAoYnl0ZV9vdXQgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC4gYnl0ZV9pbiAgICAgICAgICAgICAgICAgICAgIChieXRlX2luICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgIAorICAgICAgICAgKTsKKworCisKKworc3NwaW1fY2ZnIHVfY2ZnICgKKworICAgICAgICAgIC4gbWNsayAgICAgICAgICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLiByZXNldF9uICAgICAgICAgICAgICAgICAgICAgKHJlc2V0X24gICAgICAgICAgICAgICAgICAgICAgKSwKKworICAgICAgICAvLyBSZWcgQnVzIEludGVyZmFjZSBTaWduYWwKKyAgICAgICAgICAuIHJlZ19jcyAgICAgICAgICAgICAgICAgICAgICAocmVnX2NzICAgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC4gcmVnX3dyICAgICAgICAgICAgICAgICAgICAgIChyZWdfd3IgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLiByZWdfYWRkciAgICAgICAgICAgICAgICAgICAgKHJlZ19hZGRyICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuIHJlZ193ZGF0YSAgICAgICAgICAgICAgICAgICAocmVnX3dkYXRhICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC4gcmVnX2JlICAgICAgICAgICAgICAgICAgICAgIChyZWdfYmUgICAgICAgICAgICAgICAgICAgICAgICksCisKKyAgICAgICAgICAgIC8vIE91dHB1dHMKKyAgICAgICAgICAuIHJlZ19yZGF0YSAgICAgICAgICAgICAgICAgICAocmVnX3JkYXRhICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC4gcmVnX2FjayAgICAgICAgICAgICAgICAgICAgIChyZWdfYWNrICAgICAgICAgICAgICAgICAgICAgICksCisKKworICAgICAgICAgICAvLyBjb25maWd1cmF0aW9uIHNpZ25hbAorICAgICAgICAgIC4gY2ZnX3RndF9zZWwgICAgICAgICAgICAgICAgIChjZmdfdGd0X3NlbCAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLiBjZmdfb3BfcmVxICAgICAgICAgICAgICAgICAgKGNmZ19vcF9yZXEgICAgICAgICAgICAgICAgICAgKSwgLy8gU1BJIG9wZXJhdGlvbiByZXF1ZXN0CisgICAgICAgICAgLiBjZmdfb3BfdHlwZSAgICAgICAgICAgICAgICAgKGNmZ19vcF90eXBlICAgICAgICAgICAgICAgICAgKSwgLy8gU1BJIG9wZXJhdGlvbiB0eXBlCisgICAgICAgICAgLiBjZmdfdHJhbnNmZXJfc2l6ZSAgICAgICAgICAgKGNmZ190cmFuc2Zlcl9zaXplICAgICAgICAgICAgKSwgLy8gU1BJIHRyYW5zZmVyIHNpemUKKyAgICAgICAgICAuIGNmZ19zY2tfcGVyaW9kICAgICAgICAgICAgICAoY2ZnX3Nja19wZXJpb2QgICAgICAgICAgICAgICApLCAvLyBzY2sgY2xvY2sgcGVyaW9kCisgICAgICAgICAgLiBjZmdfc2NrX2NzX3BlcmlvZCAgICAgICAgICAgKGNmZ19zY2tfY3NfcGVyaW9kICAgICAgICAgICAgKSwgLy8gY3Mgc2V0dXAvaG9sZCBwZXJpb2QKKyAgICAgICAgICAuIGNmZ19jc19ieXRlICAgICAgICAgICAgICAgICAoY2ZnX2NzX2J5dGUgICAgICAgICAgICAgICAgICApLCAvLyBjcyBiaXQgaW5mb3JtYXRpb24KKyAgICAgICAgICAuIGNmZ19kYXRhaW4gICAgICAgICAgICAgICAgICAoY2ZnX2RhdGFpbiAgICAgICAgICAgICAgICAgICApLCAvLyBkYXRhIGZvciB0cmFuc2ZlcgorICAgICAgICAgIC4gY2ZnX2RhdGFvdXQgICAgICAgICAgICAgICAgIChjZmdfZGF0YW91dCAgICAgICAgICAgICAgICAgICksIC8vIGRhdGEgZm9yIHJlY2VpdmVkCisgICAgICAgICAgLiBod2FyZV9vcF9kb25lICAgICAgICAgICAgICAgKGh3YXJlX29wX2RvbmUgICAgICAgICAgICAgICAgKSAgLy8gb3BlcmF0aW9uIGRvbmUKKworICAgICAgICApOworCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3VhcnQvc3JjL3VhcnRfY2ZnLnN2IGIvdmVyaWxvZy9ydGwvdWFydC9zcmMvdWFydF9jZmcuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E0ZGVhNgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3VhcnQvc3JjL3VhcnRfY2ZnLnN2CkBAIC0wLDAgKzEsNDA1IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFVBUlQgQ29uZmlndXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8gCisvLy8vICAgIDAuMSAtIDIwdGggSnVuZSAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAxLiBpbml0aWFsIHZlcnNpb24gcGlja2VkIGZyb20gICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy9vbXM4MDUxbWluaSAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMiAtIDIwdGggSnVuZSAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHR4IGFuZCByeCBidWZmZXIgc3RhdHVzIGFkZGVkIGludG8gcmVnNyBhbmQgcmVnOCAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK21vZHVsZSB1YXJ0X2NmZyAoCisKKyAgICAgICAgICAgICBtY2xrLAorICAgICAgICAgICAgIHJlc2V0X24sCisKKyAgICAgICAgLy8gUmVnIEJ1cyBJbnRlcmZhY2UgU2lnbmFsCisgICAgICAgICAgICAgcmVnX2NzLAorICAgICAgICAgICAgIHJlZ193ciwKKyAgICAgICAgICAgICByZWdfYWRkciwKKyAgICAgICAgICAgICByZWdfd2RhdGEsCisgICAgICAgICAgICAgcmVnX2JlLAorCisgICAgICAgICAgICAvLyBPdXRwdXRzCisgICAgICAgICAgICAgcmVnX3JkYXRhLAorICAgICAgICAgICAgIHJlZ19hY2ssCisKKyAgICAgICAgIC8vIFVhcnQgVHggZmlmbyBpbnRlcmZhY2UKKyAgICAgICAgICAgICB0eF9maWZvX2Z1bGwsCisgICAgICAgICAgICAgdHhfZmlmb19mc3BhY2UsCisgICAgICAgICAgICAgdHhfZmlmb193cl9lbiwKKyAgICAgICAgICAgICB0eF9maWZvX2RhdGEsCisKKyAgICAgICAgIC8vIFVhcnQgUnggZmlmbyBpbnRlcmZhY2UKKyAgICAgICAgICAgICByeF9maWZvX2VtcHR5LAorICAgICAgICAgICAgIHJ4X2ZpZm9fZHZhbCAsCisgICAgICAgICAgICAgcnhfZmlmb19yZF9lbiwKKyAgICAgICAgICAgICByeF9maWZvX2RhdGEgLAorCisgICAgICAgLy8gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgIGNmZ190eF9lbmFibGUsCisgICAgICAgICAgICAgY2ZnX3J4X2VuYWJsZSwKKyAgICAgICAgICAgICBjZmdfc3RvcF9iaXQgLAorICAgICAgICAgICAgIGNmZ19wcmlfbW9kICAsCisgICAgICAgICAgICAgY2ZnX2JhdWRfMTZ4ICwKKworICAgICAgICAgICAgIGZybV9lcnJvcl9vLAorICAgICAgICAgICAgIHBhcl9lcnJvcl9vLAorICAgICAgICAgICAgIHJ4X2ZpZm9fZnVsbF9lcnJfbworCisgICAgICAgICk7CisKKworCitpbnB1dCAgICAgICAgICAgIG1jbGs7CitpbnB1dCAgICAgICAgICAgIHJlc2V0X247CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFVhcnQgVHggZmlmbyBpbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2lucHV0ICAgICAgICAgICAgdHhfZmlmb19mdWxsOworaW5wdXQgWzQ6MF0gICAgICB0eF9maWZvX2ZzcGFjZSAgICAgICAgOyAvLyBUb3RhbCBUeCBmaWZvIEZyZWUgU3BhY2UKK291dHB1dCAgICAgICAgICAgdHhfZmlmb193cl9lbjsKK291dHB1dCBbNzowXSAgICAgdHhfZmlmb19kYXRhOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBVYXJ0IFJ4IGZpZm8gaW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbnB1dCAgICAgICAgICAgIHJ4X2ZpZm9fZW1wdHk7CitpbnB1dCBbNDowXSAgICAgIHJ4X2ZpZm9fZHZhbCAgICAgICAgICA7IC8vIFRvdGFsIFJ4IGZpZm8gRGF0YSBBdmFpbGFibGUKK291dHB1dCAgICAgICAgICAgcnhfZmlmb19yZF9lbjsKK2lucHV0IFs3OjBdICAgICAgcnhfZmlmb19kYXRhOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIGNvbmZpZ3VyYXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorb3V0cHV0ICAgICAgICAgICBjZmdfdHhfZW5hYmxlICAgICAgIDsgLy8gVHggRW5hYmxlCitvdXRwdXQgICAgICAgICAgIGNmZ19yeF9lbmFibGUgICAgICAgOyAvLyBSeCBFbmFibGUKK291dHB1dCAgICAgICAgICAgY2ZnX3N0b3BfYml0ICAgICAgICA7IC8vIDAgLT4gMSBTdG9wLCAxIC0+IDIgU3RvcAorb3V0cHV0IFsxOjBdICAgICBjZmdfcHJpX21vZCAgICAgICAgIDsgLy8gcHJpb3JpdHkgbW9kZSwgMCAtPiBub3AsIDEgLT4gRXZlbiwgMiAtPiBPZGQKK291dHB1dCBbMTE6MF0gICAgY2ZnX2JhdWRfMTZ4ICAgICAgICA7IC8vIDE2eCBCYXVkIGNsb2NrIGNvbmZpZworCitpbnB1dCAgICAgICAgICAgIGZybV9lcnJvcl9vICAgICAgICAgOyAvLyBmcmFtaW5nIGVycm9yCitpbnB1dCAgICAgICAgICAgIHBhcl9lcnJvcl9vICAgICAgICAgOyAvLyBwYXIgZXJyb3IKK2lucHV0ICAgICAgICAgICAgcnhfZmlmb19mdWxsX2Vycl9vICA7IC8vIHJ4IGZpZm8gZnVsbCBlcnJvcgorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVnIEJ1cyBJbnRlcmZhY2UgU2lnbmFsCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW5wdXQgICAgICAgICAgICAgcmVnX2NzICAgICAgICAgOworaW5wdXQgICAgICAgICAgICAgcmVnX3dyICAgICAgICAgOworaW5wdXQgWzM6MF0gICAgICAgcmVnX2FkZHIgICAgICAgOworaW5wdXQgWzc6MF0gICAgICAgcmVnX3dkYXRhICAgICAgOworaW5wdXQgICAgICAgICAgICAgcmVnX2JlICAgICAgICAgOworCisvLyBPdXRwdXRzCitvdXRwdXQgWzc6MF0gICAgICByZWdfcmRhdGEgICAgICA7CitvdXRwdXQgICAgICAgICAgICByZWdfYWNrICAgICAgICA7CisKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbnRlcm5hbCBXaXJlIERlY2xhcmF0aW9ucworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aXJlICAgICAgICAgICBzd19yZF9lbjsKK3dpcmUgICAgICAgICAgIHN3X3dyX2VuOword2lyZSAgWzM6MF0gICAgc3dfYWRkciA7IC8vIGFkZHJlc3NpbmcgMTYgcmVnaXN0ZXJzCit3aXJlICAgICAgICAgICB3cl9iZSAgIDsKKworcmVnICAgWzc6MF0gIHJlZ19yZGF0YSAgICAgIDsKK3JlZyAgICAgICAgICAgcmVnX2FjayAgICAgOworCit3aXJlIFs3OjBdICAgIHJlZ18wOyAgLy8gU29mdHdhcmVfUmVnXzAKK3dpcmUgWzc6MF0gICAgcmVnXzE7ICAvLyBTb2Z0d2FyZS1SZWdfMQord2lyZSBbNzowXSAgICByZWdfMjsgIC8vIFNvZnR3YXJlLVJlZ18yCit3aXJlIFs3OjBdICAgIHJlZ18zOyAgLy8gU29mdHdhcmUtUmVnXzMKK3dpcmUgWzc6MF0gICAgcmVnXzQ7ICAvLyBTb2Z0d2FyZS1SZWdfNAord2lyZSBbNzowXSAgICByZWdfNTsgIC8vIFNvZnR3YXJlLVJlZ181Cit3aXJlIFs3OjBdICAgIHJlZ182OyAgLy8gU29mdHdhcmUtUmVnXzYKK3dpcmUgWzc6MF0gICAgcmVnXzc7ICAvLyBTb2Z0d2FyZS1SZWdfNword2lyZSBbNzowXSAgICByZWdfODsgIC8vIFNvZnR3YXJlLVJlZ184Cit3aXJlIFs3OjBdICAgIHJlZ185OyAgLy8gU29mdHdhcmUtUmVnXzkKK3dpcmUgWzc6MF0gICAgcmVnXzEwOyAvLyBTb2Z0d2FyZS1SZWdfMTAKK3dpcmUgWzc6MF0gICAgcmVnXzExOyAvLyBTb2Z0d2FyZS1SZWdfMTEKK3dpcmUgWzc6MF0gICAgcmVnXzEyOyAvLyBTb2Z0d2FyZS1SZWdfMTIKK3dpcmUgWzc6MF0gICAgcmVnXzEzOyAvLyBTb2Z0d2FyZS1SZWdfMTMKK3dpcmUgWzc6MF0gICAgcmVnXzE0OyAvLyBTb2Z0d2FyZS1SZWdfMTQKK3dpcmUgWzc6MF0gICAgcmVnXzE1OyAvLyBTb2Z0d2FyZS1SZWdfMTUKK3JlZyAgWzc6MF0gICAgcmVnX291dDsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTWFpbiBjb2RlIHN0YXJ0cyBoZXJlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEludGVybmFsIExvZ2ljIFN0YXJ0cyBoZXJlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgYXNzaWduIHN3X2FkZHIgICAgICAgPSByZWdfYWRkciBbMzowXTsKKyAgICBhc3NpZ24gc3dfcmRfZW4gICAgICA9IHJlZ19jcyAmICFyZWdfd3I7CisgICAgYXNzaWduIHN3X3dyX2VuICAgICAgPSByZWdfY3MgJiByZWdfd3I7CisgICAgYXNzaWduIHdyX2JlICAgICAgICAgPSByZWdfYmU7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVhZCBwYXRoIG11eAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbHdheXMgQCAocG9zZWRnZSBtY2xrIG9yIG5lZ2VkZ2UgcmVzZXRfbikKK2JlZ2luIDogcHJlZ19vdXRfU2VxCisgICBpZiAocmVzZXRfbiA9PSAxJ2IwKQorICAgYmVnaW4KKyAgICAgIHJlZ19yZGF0YSBbNzowXSAgPD0gOCdoMDA7CisgICAgICByZWdfYWNrICAgICAgICAgIDw9IDEnYjA7CisgICBlbmQKKyAgIGVsc2UgaWYgKHN3X3JkX2VuICYmICFyZWdfYWNrKSAKKyAgIGJlZ2luCisgICAgICByZWdfcmRhdGEgWzc6MF0gIDw9IHJlZ19vdXQgWzc6MF07CisgICAgICByZWdfYWNrICAgICAgICAgIDw9IDEnYjE7CisgICBlbmQKKyAgIGVsc2UgaWYgKHN3X3dyX2VuICYmICFyZWdfYWNrKSAKKyAgICAgIHJlZ19hY2sgICAgICAgICAgPD0gMSdiMTsKKyAgIGVsc2UKKyAgIGJlZ2luCisgICAgICByZWdfYWNrICAgICAgICA8PSAxJ2IwOworICAgZW5kCitlbmQKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyByZWdpc3RlciByZWFkIGVuYWJsZSBhbmQgd3JpdGUgZW5hYmxlIGRlY29kaW5nIGxvZ2ljCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlICAgc3dfd3JfZW5fMCA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoMCk7Cit3aXJlICAgc3dfcmRfZW5fMCA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoMCk7Cit3aXJlICAgc3dfd3JfZW5fMSA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoMSk7Cit3aXJlICAgc3dfcmRfZW5fMSA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoMSk7Cit3aXJlICAgc3dfd3JfZW5fMiA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoMik7Cit3aXJlICAgc3dfcmRfZW5fMiA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoMik7Cit3aXJlICAgc3dfd3JfZW5fMyA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoMyk7Cit3aXJlICAgc3dfcmRfZW5fMyA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoMyk7Cit3aXJlICAgc3dfd3JfZW5fNCA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoNCk7Cit3aXJlICAgc3dfcmRfZW5fNCA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoNCk7Cit3aXJlICAgc3dfd3JfZW5fNSA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoNSk7Cit3aXJlICAgc3dfcmRfZW5fNSA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoNSk7Cit3aXJlICAgc3dfd3JfZW5fNiA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoNik7Cit3aXJlICAgc3dfcmRfZW5fNiA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoNik7Cit3aXJlICAgc3dfd3JfZW5fNyA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoNyk7Cit3aXJlICAgc3dfcmRfZW5fNyA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoNyk7Cit3aXJlICAgc3dfd3JfZW5fOCA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoOCk7Cit3aXJlICAgc3dfcmRfZW5fOCA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoOCk7Cit3aXJlICAgc3dfd3JfZW5fOSA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoOSk7Cit3aXJlICAgc3dfcmRfZW5fOSA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoOSk7Cit3aXJlICAgc3dfd3JfZW5fMTAgPSBzd193cl9lbiAmIChzd19hZGRyID09IDQnaEEpOword2lyZSAgIHN3X3JkX2VuXzEwID0gc3dfcmRfZW4gJiAoc3dfYWRkciA9PSA0J2hBKTsKK3dpcmUgICBzd193cl9lbl8xMSA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoQik7Cit3aXJlICAgc3dfcmRfZW5fMTEgPSBzd19yZF9lbiAmIChzd19hZGRyID09IDQnaEIpOword2lyZSAgIHN3X3dyX2VuXzEyID0gc3dfd3JfZW4gJiAoc3dfYWRkciA9PSA0J2hDKTsKK3dpcmUgICBzd19yZF9lbl8xMiA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoQyk7Cit3aXJlICAgc3dfd3JfZW5fMTMgPSBzd193cl9lbiAmIChzd19hZGRyID09IDQnaEQpOword2lyZSAgIHN3X3JkX2VuXzEzID0gc3dfcmRfZW4gJiAoc3dfYWRkciA9PSA0J2hEKTsKK3dpcmUgICBzd193cl9lbl8xNCA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoRSk7Cit3aXJlICAgc3dfcmRfZW5fMTQgPSBzd19yZF9lbiAmIChzd19hZGRyID09IDQnaEUpOword2lyZSAgIHN3X3dyX2VuXzE1ID0gc3dfd3JfZW4gJiAoc3dfYWRkciA9PSA0J2hGKTsKK3dpcmUgICBzd19yZF9lbl8xNSA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoRik7CisKKworYWx3YXlzIEAoICopCitiZWdpbiA6IHByZWdfc2VsX0NvbQorCisgIHJlZ19vdXQgWzc6MF0gPSA4J2QwOworCisgIGNhc2UgKHN3X2FkZHIgWzM6MF0pCisgICAgNCdiMDAwMCA6IHJlZ19vdXQgWzc6MF0gPSByZWdfMCBbNzowXTsgICAgIAorICAgIDQnYjAwMDEgOiByZWdfb3V0IFs3OjBdID0gcmVnXzEgWzc6MF07ICAgIAorICAgIDQnYjAwMTAgOiByZWdfb3V0IFs3OjBdID0gcmVnXzIgWzc6MF07ICAgICAKKyAgICA0J2IwMDExIDogcmVnX291dCBbNzowXSA9IHJlZ18zIFs3OjBdOyAgICAKKyAgICA0J2IwMTAwIDogcmVnX291dCBbNzowXSA9IHJlZ180IFs3OjBdOyAgICAKKyAgICA0J2IwMTAxIDogcmVnX291dCBbNzowXSA9IHJlZ181IFs3OjBdOyAgICAKKyAgICA0J2IwMTEwIDogcmVnX291dCBbNzowXSA9IHJlZ182IFs3OjBdOyAgICAKKyAgICA0J2IwMTExIDogcmVnX291dCBbNzowXSA9IHJlZ183IFs3OjBdOyAgICAKKyAgICA0J2IxMDAwIDogcmVnX291dCBbNzowXSA9IHJlZ184IFs3OjBdOyAgICAKKyAgICA0J2IxMDAxIDogcmVnX291dCBbNzowXSA9IHJlZ185IFs3OjBdOyAgICAKKyAgICA0J2IxMDEwIDogcmVnX291dCBbNzowXSA9IHJlZ18xMCBbNzowXTsgICAKKyAgICA0J2IxMDExIDogcmVnX291dCBbNzowXSA9IHJlZ18xMSBbNzowXTsgICAKKyAgICA0J2IxMTAwIDogcmVnX291dCBbNzowXSA9IHJlZ18xMiBbNzowXTsgICAKKyAgICA0J2IxMTAxIDogcmVnX291dCBbNzowXSA9IHJlZ18xMyBbNzowXTsKKyAgICA0J2IxMTEwIDogcmVnX291dCBbNzowXSA9IHJlZ18xNCBbNzowXTsKKyAgICA0J2IxMTExIDogcmVnX291dCBbNzowXSA9IHJlZ18xNSBbNzowXTsgCisgIGVuZGNhc2UKK2VuZAorCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSW5kaXZpZHVhbCByZWdpc3RlciBhc3NpZ25tZW50cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9naWMgZm9yIFJlZ2lzdGVyIDAgOiB1YXJ0IENvbnRyb2wgUmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpcmUgWzE6MF0gICBjZmdfcHJpX21vZCAgICAgPSByZWdfMFs0OjNdOyAvLyBwcmlvcml0eSBtb2RlLCAwIC0+IG5vcCwgMSAtPiBFdmVuLCAyIC0+IE9kZAord2lyZSAgICAgICAgIGNmZ19zdG9wX2JpdCAgICA9IHJlZ18wWzJdOyAgIC8vIDAgLT4gMSBTdG9wLCAxIC0+IDIgU3RvcAord2lyZSAgICAgICAgIGNmZ19yeF9lbmFibGUgICA9IHJlZ18wWzFdOyAgIC8vIFJ4IEVuYWJsZQord2lyZSAgICAgICAgIGNmZ190eF9lbmFibGUgICA9IHJlZ18wWzBdOyAgIC8vIFR4IEVuYWJsZQorCitnZW5lcmljX3JlZ2lzdGVyICMoNSwwICApIHVfdWFydF9jdHJsX2JlMCAoCisJICAgICAgLndlICAgICAgICAgICAgKHs1e3N3X3dyX2VuXzAgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHJlZ193ZGF0YVs0OjBdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzBbNDowXSAgICAgICAgKQorICAgICAgICAgICk7CisKKworYXNzaWduIHJlZ18wWzc6NV0gPSAzJ2gwOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2dpYyBmb3IgUmVnaXN0ZXIgMSA6IHVhcnQgaW50ZXJydXB0IHN0YXR1cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3RhdF9yZWdpc3RlciB1X2ludHJfYml0MCAoCisJCSAvL2lucHV0cworCQkgLiBjbGsgICAgICAgIChtY2xrICAgICAgICAgICAgKSwKKwkJIC4gcmVzZXRfbiAgICAocmVzZXRfbiAgICAgICAgICksCisJCSAuIGNwdV93ZSAgICAgKHN3X3dyX2VuXzEgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlICAgICAgICApLAkJIAorCQkgLiBjcHVfYWNrICAgIChyZWdfd2RhdGFbMF0gICAgKSwKKwkJIC4gaHdhcmVfcmVxICAoZnJtX2Vycm9yX28gICAgICksCisJCSAKKwkJIC8vb3V0cHV0cworCQkgLiBkYXRhX291dCAgIChyZWdfMVswXSAgICAgICAgKQorCQkgKTsKKworc3RhdF9yZWdpc3RlciB1X2ludHJfYml0MSAoCisJCSAvL2lucHV0cworCQkgLiBjbGsgICAgICAgIChtY2xrICAgICAgICAgICAgKSwKKwkJIC4gcmVzZXRfbiAgICAocmVzZXRfbiAgICAgICAgICksCisJCSAuIGNwdV93ZSAgICAgKHN3X3dyX2VuXzEgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlICAgICAgICApLAkJIAorCQkgLiBjcHVfYWNrICAgIChyZWdfd2RhdGFbMV0gICAgKSwKKwkJIC4gaHdhcmVfcmVxICAocGFyX2Vycm9yX28gICAgICksCisJCSAKKwkJIC8vb3V0cHV0cworCQkgLiBkYXRhX291dCAgIChyZWdfMVsxXSAgICAgICAgKQorCQkgKTsKKworc3RhdF9yZWdpc3RlciB1X2ludHJfYml0MiAoCisJCSAvL2lucHV0cworCQkgLiBjbGsgICAgICAgIChtY2xrICAgICAgICAgICAgICAgICksCisJCSAuIHJlc2V0X24gICAgKHJlc2V0X24gICAgICAgICAgICAgKSwKKwkJIC4gY3B1X3dlICAgICAoc3dfd3JfZW5fMSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmUgICAgICAgICAgICApLAkJIAorCQkgLiBjcHVfYWNrICAgIChyZWdfd2RhdGFbMl0gICAgICAgICksCisJCSAuIGh3YXJlX3JlcSAgKHJ4X2ZpZm9fZnVsbF9lcnJfbyAgKSwKKwkJIAorCQkgLy9vdXRwdXRzCisJCSAuIGRhdGFfb3V0ICAgKHJlZ18xWzJdICAgICAgICAgICAgKQorCQkgKTsKKworYXNzaWduIHJlZ18xWzc6M10gPSA1J2gwOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvZ2ljIGZvciBSZWdpc3RlciAyIDogIEJhdWQgUmF0ZSBDb250cm9sCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlIFsxMTowXSAgIGNmZ19iYXVkXzE2eCAgICA9IHtyZWdfM1szOjBdLHJlZ18yWzc6MF19OyAKKworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3VhcnRfY3RybF9yZWcyICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMiAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmUgICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAocmVnX3dkYXRhWzc6MF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMls3OjBdICAgICAgICApCisgICAgICAgICAgKTsKKworZ2VuZXJpY19yZWdpc3RlciAjKDQsMCAgKSB1X3VhcnRfY3RybF9yZWczICgKKwkgICAgICAud2UgICAgICAgICAgICAoezR7c3dfd3JfZW5fMyAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmUgICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAocmVnX3dkYXRhWzM6MF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfM1szOjBdICAgICAgICApCisgICAgICAgICAgKTsKKworYXNzaWduIHJlZ18zWzc6NF0gPSA0J2gwOworCisKKy8vIHJlZy00ICBzdGF0dXMKKy8vCithc3NpZ24gcmVnXzRbNzowXSA9IHs2J2gwLHJ4X2ZpZm9fZW1wdHksdHhfZmlmb19mdWxsfTsKKworLy8gcmVnXzUgaXMgdHhfZmlmbyB3cgorYXNzaWduIHR4X2ZpZm9fd3JfZW4gID0gc3dfd3JfZW5fNSAmIHJlZ19hY2sgJiAhdHhfZmlmb19mdWxsOworYXNzaWduIHR4X2ZpZm9fZGF0YSAgID0gcmVnX3dkYXRhWzc6MF07CisKKy8vIHJlZ182IGlzIHJ4X2ZpZm8gcmVhZAorLy8gcnhfZmlmbyByZWFkIGRhdGEKK2Fzc2lnbiByZWdfNls3OjBdID0ge3J4X2ZpZm9fZGF0YX07Cithc3NpZ24gIHJ4X2ZpZm9fcmRfZW4gPSBzd19yZF9lbl82ICYgcmVnX2FjayAmICFyeF9maWZvX2VtcHR5OworCithc3NpZ24gcmVnXzdbNzowXSA9IHszJ2gwLHR4X2ZpZm9fZnNwYWNlfTsgLy8gdHggZmlmbyBmcmVlIHNwYWNlCithc3NpZ24gcmVnXzhbNzowXSA9IHszJ2gwLHJ4X2ZpZm9fZHZhbH07ICAgLy8gcnggZmlmbyBkYXRhIGF2YWlsYWJsZQorCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3VhcnQvc3JjL3VhcnRfY29yZS5zdiBiL3Zlcmlsb2cvcnRsL3VhcnQvc3JjL3VhcnRfY29yZS5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDhjZDM1Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvdWFydC9zcmMvdWFydF9jb3JlLnN2CkBAIC0wLDAgKzEsMzM0IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFVBUlQgQ09SRSB3aXRoIFRYL1JYIDE2IEJ5dGUgQnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMjB0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgIDEuIGluaXRpYWwgdmVyc2lvbiBwaWNrZWQgZnJvbSAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL29tczgwNTFtaW5pICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4yIC0gMjV0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgIFBhZCBsb2dpYyBtb3ZlZCBpbnNpZGUgY29yZSB0byBhdm9pZCBjb21ibyBsb2dpYyBhdCAgIC8vLy8KKy8vLy8gICAgICAgIHNvYyBkaWdpdGFsIGNvcmUgbGV2ZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbW9kdWxlIHVhcnRfY29yZSAKKworICAgICAoICAKKworICAgaW5wdXQgbG9naWMgICAgICAgICBhcnN0X24gICwgLy8gYXN5bmMgcmVzZXQKKyAgIGlucHV0IGxvZ2ljICAgICAgICAgYXBwX2NsayAsCisKKyAgICAgICAgLy8gUmVnIEJ1cyBJbnRlcmZhY2UgU2lnbmFsCisgICBpbnB1dCBsb2dpYyAgICAgICAgIHJlZ19jcywKKyAgIGlucHV0IGxvZ2ljICAgICAgICAgcmVnX3dyLAorICAgaW5wdXQgbG9naWMgWzM6MF0gICByZWdfYWRkciwKKyAgIGlucHV0IGxvZ2ljIFs3OjBdICAgcmVnX3dkYXRhLAorICAgaW5wdXQgbG9naWMgICAgICAgICByZWdfYmUsCisKKyAgICAgICAgLy8gT3V0cHV0cworICAgb3V0cHV0IGxvZ2ljIFs3OjBdICByZWdfcmRhdGEsCisgICBvdXRwdXQgbG9naWMgICAgICAgIHJlZ19hY2ssCisKKyAgICAgICAvLyBQYWQgQ29udHJvbAorICAgaW5wdXQgIGxvZ2ljICAgICAgICByeGQsCisgICBvdXRwdXQgbG9naWMgICAgICAgIHR4ZAorCisgICAgICk7CisKKworCisKK3BhcmFtZXRlciBXICA9IDgnZDg7CitwYXJhbWV0ZXIgRFAgPSA4J2QxNjsKK3BhcmFtZXRlciBBVyA9IChEUCA9PSAyKSAgID8gMSA6IAorCSAgICAgICAoRFAgPT0gNCkgICA/IDIgOgorICAgICAgICAgICAgICAgKERQID09IDgpICAgPyAzIDoKKyAgICAgICAgICAgICAgIChEUCA9PSAxNikgID8gNCA6CisgICAgICAgICAgICAgICAoRFAgPT0gMzIpICA/IDUgOgorICAgICAgICAgICAgICAgKERQID09IDY0KSAgPyA2IDoKKyAgICAgICAgICAgICAgIChEUCA9PSAxMjgpID8gNyA6CisgICAgICAgICAgICAgICAoRFAgPT0gMjU2KSA/IDggOiAwOworCisKKworLy8gV2lyZSBEZWNsYXJhdGlvbgord2lyZSAgICAgICAgICAgIGFwcF9yZXNldF9uICAgICAgIDsKK3dpcmUgICAgICAgICAgICBsaW5lX3Jlc2V0X24gICAgICA7CisKK3dpcmUgW1ctMTogMF0gICB0eF9maWZvX3JkX2RhdGE7Cit3aXJlIFtXLTE6IDBdICAgcnhfZmlmb193cl9kYXRhOword2lyZSBbVy0xOiAwXSAgIGFwcF9yeGZpZm9fZGF0YTsKK3dpcmUgW1ctMTogMF0gICBhcHBfdHhmaWZvX2RhdGE7Cit3aXJlIFsxICA6IDBdICAgZXJyb3JfaW5kOworCisvLyBXaXJlIAord2lyZSAgICAgICAgICAgIGNmZ190eF9lbmFibGUgICAgICAgIDsgLy8gVHggRW5hYmxlCit3aXJlICAgICAgICAgICAgY2ZnX3J4X2VuYWJsZSAgICAgICAgOyAvLyBSeCBFbmFibGUKK3dpcmUgICAgICAgICAgICBjZmdfc3RvcF9iaXQgICAgICAgICA7IC8vIDAgLT4gMSBTdG9wLCAxIC0+IDIgU3RvcAord2lyZSAgIFsxOjBdICAgIGNmZ19wcmlfbW9kICAgICAgICAgIDsgLy8gcHJpb3JpdHkgbW9kZSwgMCAtPiBub3AsIDEgLT4gRXZlbiwgMiAtPiBPZGQKKword2lyZSAgICAgICAgICAgIGZybV9lcnJvcl9vICAgICAgICAgIDsgLy8gZnJhbWluZyBlcnJvcgord2lyZSAgICAgICAgICAgIHBhcl9lcnJvcl9vICAgICAgICAgIDsgLy8gcGFyIGVycm9yCit3aXJlICAgICAgICAgICAgcnhfZmlmb19mdWxsX2Vycl9vICAgOyAvLyByeCBmaWZvIGZ1bGwgZXJyb3IKKword2lyZSAgIFsxMTowXSAgIGNmZ19iYXVkXzE2eCAgICAgICAgIDsgLy8gMTZ4IEJhdWQgY2xvY2sgZ2VuZXJhdGlvbgord2lyZSAgICAgICAgICAgIHJ4X2ZpZm9fd3JfZnVsbCAgICAgIDsKK3dpcmUgICAgICAgICAgICB0eF9maWZvX3JkX2VtcHR5ICAgICA7Cit3aXJlICAgICAgICAgICAgdHhfZmlmb19yZCAgICAgICAgICAgOword2lyZSAgICAgICAgICAgYXBwX3J4Zmlmb19lbXB0eSAgICAgIDsKK3dpcmUgICAgICAgICAgIGFwcF9yeGZpZm9fcmRfZW4gICAgICA7Cit3aXJlICAgICAgICAgICBhcHBfdHhfZmlmb19mdWxsICAgICAgOword2lyZSAgICAgICAgICAgcnhfZmlmb193ciAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgIHR4X2ZpZm9fd3JfZW4gICAgICAgICA7Cit3aXJlIFtBVzowXSAgICB0eF9maWZvX2ZzcGFjZSAgICAgICAgOyAvLyBUb3RhbCBUeCBmaWZvIEZyZWUgU3BhY2UKK3dpcmUgW0FXOjBdICAgIHJ4X2ZpZm9fZHZhbCAgICAgICAgICA7IC8vIFRvdGFsIFJ4IGZpZm8gRGF0YSBBdmFpbGFibGUKK3dpcmUgICAgICAgICAgIHNpX3NzICAgICAgICAgICAgICAgICA7CisKKworCit1YXJ0X2NmZyB1X2NmZyAoCisKKyAgICAgICAgICAgICAuIG1jbGsgICAgICAgICAgICAgICAgKGFwcF9jbGspLAorICAgICAgICAgICAgIC4gcmVzZXRfbiAgICAgICAgICAgICAoYXBwX3Jlc2V0X24pLAorCisgICAgICAgIC8vIFJlZyBCdXMgSW50ZXJmYWNlIFNpZ25hbAorICAgICAgICAgICAgIC4gcmVnX2NzICAgICAgICAgICAgICAocmVnX2NzKSwKKyAgICAgICAgICAgICAuIHJlZ193ciAgICAgICAgICAgICAgKHJlZ193ciksCisgICAgICAgICAgICAgLiByZWdfYWRkciAgICAgICAgICAgIChyZWdfYWRkciksCisgICAgICAgICAgICAgLiByZWdfd2RhdGEgICAgICAgICAgIChyZWdfd2RhdGEpLAorICAgICAgICAgICAgIC4gcmVnX2JlICAgICAgICAgICAgICAocmVnX2JlKSwKKworICAgICAgICAgICAgLy8gT3V0cHV0cworICAgICAgICAgICAgLiByZWdfcmRhdGEgICAgICAgICAgIChyZWdfcmRhdGEpLAorICAgICAgICAgICAgLiByZWdfYWNrICAgICAgICAgICAgIChyZWdfYWNrKSwKKworCisgICAgICAgLy8gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgLiBjZmdfdHhfZW5hYmxlICAgICAgIChjZmdfdHhfZW5hYmxlKSwKKyAgICAgICAgICAgIC4gY2ZnX3J4X2VuYWJsZSAgICAgICAoY2ZnX3J4X2VuYWJsZSksCisgICAgICAgICAgICAuIGNmZ19zdG9wX2JpdCAgICAgICAgKGNmZ19zdG9wX2JpdCksCisgICAgICAgICAgICAuIGNmZ19wcmlfbW9kICAgICAgICAgKGNmZ19wcmlfbW9kKSwKKworICAgICAgICAgICAgLiBjZmdfYmF1ZF8xNnggICAgICAgIChjZmdfYmF1ZF8xNngpLCAgCisKKyAgICAgICAgICAgIC4gdHhfZmlmb19mdWxsICAgICAgICAoYXBwX3R4X2ZpZm9fZnVsbCksCisgICAgICAgICAgICAgLnR4X2ZpZm9fZnNwYWNlICAgICAgKHR4X2ZpZm9fZnNwYWNlICksCisgICAgICAgICAgICAuIHR4X2ZpZm9fd3JfZW4gICAgICAgKHR4X2ZpZm9fd3JfZW4pLAorICAgICAgICAgICAgLiB0eF9maWZvX2RhdGEgICAgICAgIChhcHBfdHhmaWZvX2RhdGEpLAorCisgICAgICAgICAgICAuIHJ4X2ZpZm9fZW1wdHkgICAgICAgKGFwcF9yeGZpZm9fZW1wdHkpLAorICAgICAgICAgICAgIC5yeF9maWZvX2R2YWwgICAgICAgIChyeF9maWZvX2R2YWwgICApLAorICAgICAgICAgICAgLiByeF9maWZvX3JkX2VuICAgICAgIChhcHBfcnhmaWZvX3JkX2VuKSwKKyAgICAgICAgICAgIC4gcnhfZmlmb19kYXRhICAgICAgICAoYXBwX3J4Zmlmb19kYXRhKSAsCisKKyAgICAgICAgICAgIC4gZnJtX2Vycm9yX28gICAgICAgICAoZnJtX2Vycm9yX28pLAorICAgICAgICAgICAgLiBwYXJfZXJyb3JfbyAgICAgICAgIChwYXJfZXJyb3JfbyksCisgICAgICAgICAgICAuIHJ4X2ZpZm9fZnVsbF9lcnJfbyAgKHJ4X2ZpZm9fZnVsbF9lcnJfbykKKworICAgICAgICApOworCisKKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKy8vIDE2eCBCYXVkIGNsb2NrIGdlbmVyYXRpb24KKy8vIEV4YW1wbGU6IHRvIGdlbmVyYXRlIDE5MjAwIEJhdWQgY2xvY2sgZnJvbSA1ME1oeiBMaW5rIGNsb2NrCisvLyAgICA1MCAqIDEwMDAgKiAxMDAwIC8gKDIgKyBjZmdfYmF1ZF8xNngpID0gMTkyMDAgKiAxNgorLy8gICAgY2ZnX2JhdWRfMTZ4ID0gMHhBMCAoMTYwKQorLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKword2lyZSBsaW5lX2Nsa18xNnhfaW47CisKKy8vIE9wZW5Tb3VyY2UgQ1RTIHRvb2wgZG9lcyBub3Qgd29yayB3aXRoIGJ1ZmZlciBhcyBzb3VyY2UgcG9pbnQKKy8vIGNoYW5nZWQgYnVmIHRvIG1heCB3aXRoIHNlbGVjdCB0aWVkPTAKKy8vY3RlY2hfY2xrX2J1ZiB1X2xpbmVjbGtfYnVmICAoLkEobGluZV9jbGtfMTZ4X2luKSwgIC5YKGxpbmVfY2xrXzE2eCkpOworY3RlY2hfbXV4MngxIHVfbGluZWNsa19idWYgICguQTAobGluZV9jbGtfMTZ4X2luKSwgLkExKDEnYjApLCAuUygxJ2IwKSwgLlgobGluZV9jbGtfMTZ4KSk7CisKK2Nsa19jdGwgIygxMSkgdV9jbGtfY3RsICgKKyAgIC8vIE91dHB1dHMKKyAgICAgICAuY2xrX28gICAgICAgICAgKGxpbmVfY2xrXzE2eF9pbiksCisKKyAgIC8vIElucHV0cworICAgICAgIC5tY2xrICAgICAgICAgICAoYXBwX2NsayksCisgICAgICAgLnJlc2V0X24gICAgICAgIChhcHBfcmVzZXRfbiksIAorICAgICAgIC5jbGtfZGl2X3JhdGlvICAoY2ZnX2JhdWRfMTZ4KQorICAgKTsKKworLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLy8gQXBwbGljYXRpb24gUmVzZXQgU3luY2hyb25pemF0aW9uCisvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCityZXNldF9zeW5jICB1X2FwcF9yc3QgKAorCSAgICAgIC5zY2FuX21vZGUgICgxJ2IwICAgICAgICAgICApLAorICAgICAgICAgICAgICAuZGNsayAgICAgICAoYXBwX2NsayAgICAgICAgKSwgLy8gRGVzdGluYXRpb24gY2xvY2sgZG9tYWluCisJICAgICAgLmFyc3RfbiAgICAgKGFyc3RfbiAgICAgICAgICksIC8vIGFjdGl2ZSBsb3cgYXN5bmMgcmVzZXQKKyAgICAgICAgICAgICAgLnNyc3RfbiAgICAgKGFwcF9yZXNldF9uICAgICkKKyAgICAgICAgICApOworCisvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisvLyBMaW5lIFJlc2V0IFN5bmNocm9uaXphdGlvbgorLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworcmVzZXRfc3luYyAgdV9saW5lX3JzdCAoCisJICAgICAgLnNjYW5fbW9kZSAgKDEnYjAgICAgICAgICAgICksCisgICAgICAgICAgICAgIC5kY2xrICAgICAgIChsaW5lX2Nsa18xNnggICApLCAvLyBEZXN0aW5hdGlvbiBjbG9jayBkb21haW4KKwkgICAgICAuYXJzdF9uICAgICAoYXJzdF9uICAgICAgICAgKSwgLy8gYWN0aXZlIGxvdyBhc3luYyByZXNldAorICAgICAgICAgICAgICAuc3JzdF9uICAgICAobGluZV9yZXNldF9uICAgKQorICAgICAgICAgICk7CisKKwordWFydF90eGZzbSB1X3R4ZnNtICgKKyAgICAgICAgICAgICAgIC5yZXNldF9uICAgICAgICAgICAoIGxpbmVfcmVzZXRfbiAgICAgICksCisgICAgICAgICAgICAgICAuYmF1ZF9jbGtfMTZ4ICAgICAgKCBsaW5lX2Nsa18xNnggICAgICApLAorCisgICAgICAgICAgICAgICAuY2ZnX3R4X2VuYWJsZSAgICAgKCBjZmdfdHhfZW5hYmxlICAgICApLAorICAgICAgICAgICAgICAgLmNmZ19zdG9wX2JpdCAgICAgICggY2ZnX3N0b3BfYml0ICAgICAgKSwKKyAgICAgICAgICAgICAgIC5jZmdfcHJpX21vZCAgICAgICAoIGNmZ19wcmlfbW9kICAgICAgICksCisKKyAgICAgICAvLyBGSUZPIGNvbnRyb2wgc2lnbmFsCisgICAgICAgICAgICAgICAuZmlmb19lbXB0eSAgICAgICAgKCB0eF9maWZvX3JkX2VtcHR5ICApLAorICAgICAgICAgICAgICAgLmZpZm9fcmQgICAgICAgICAgICggdHhfZmlmb19yZCAgICAgICAgKSwKKyAgICAgICAgICAgICAgIC5maWZvX2RhdGEgICAgICAgICAoIHR4X2ZpZm9fcmRfZGF0YSAgICksCisKKyAgICAgICAgICAvLyBMaW5lIEludGVyZmFjZQorICAgICAgICAgICAgICAgLnNvICAgICAgICAgICAgICAgICggdHhkICAgICAgICAgICAgICAgKQorICAgICAgICAgICk7CisKKwordWFydF9yeGZzbSB1X3J4ZnNtICgKKyAgICAgICAgICAgICAgIC5yZXNldF9uICAgICAgICAgICAoICBsaW5lX3Jlc2V0X24gICAgICksCisgICAgICAgICAgICAgICAuYmF1ZF9jbGtfMTZ4ICAgICAgKCAgbGluZV9jbGtfMTZ4ICAgICApICwKKworICAgICAgICAgICAgICAgLmNmZ19yeF9lbmFibGUgICAgICggIGNmZ19yeF9lbmFibGUgICAgKSwKKyAgICAgICAgICAgICAgIC5jZmdfc3RvcF9iaXQgICAgICAoICBjZmdfc3RvcF9iaXQgICAgICksCisgICAgICAgICAgICAgICAuY2ZnX3ByaV9tb2QgICAgICAgKCAgY2ZnX3ByaV9tb2QgICAgICApLAorCisgICAgICAgICAgICAgICAuZXJyb3JfaW5kICAgICAgICAgKCAgZXJyb3JfaW5kICAgICAgICApLAorCisgICAgICAgLy8gRklGTyBjb250cm9sIHNpZ25hbAorICAgICAgICAgICAgICAgLmZpZm9fYXZhbCAgICAgICAgKCAhcnhfZmlmb193cl9mdWxsICApLAorICAgICAgICAgICAgICAgLmZpZm9fd3IgICAgICAgICAgKCByeF9maWZvX3dyICAgICAgICApLAorICAgICAgICAgICAgICAgLmZpZm9fZGF0YSAgICAgICAgKCByeF9maWZvX3dyX2RhdGEgICApLAorCisgICAgICAgICAgLy8gTGluZSBJbnRlcmZhY2UKKyAgICAgICAgICAgICAgIC5zaSAgICAgICAgICAgICAgIChzaV9zcyAgICAgICAgICAgICAgKQorICAgICAgICAgICk7CisKK2FzeW5jX2ZpZm9fdGggIyhXLERQLDAsMCkgdV9yeGZpZm8gKCAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgLndyX2NsayAgICAgICAgICAgICAobGluZV9jbGtfMTZ4ICAgICAgICksCisgICAgICAgICAgICAgICAud3JfcmVzZXRfbiAgICAgICAgIChsaW5lX3Jlc2V0X24gICAgICAgKSwKKyAgICAgICAgICAgICAgIC53cl9lbiAgICAgICAgICAgICAgKHJ4X2ZpZm9fd3IgICAgICAgICApLAorICAgICAgICAgICAgICAgLndyX2RhdGEgICAgICAgICAgICAocnhfZmlmb193cl9kYXRhICAgICksCisgICAgICAgICAgICAgICAuZnVsbCAgICAgICAgICAgICAgIChyeF9maWZvX3dyX2Z1bGwgICAgKSwgLy8gc3luYydlZCB0byB3cl9jbGsKKyAgICAgICAgICAgICAgIC53cl90b3RhbF9mcmVlX3NwYWNlKCAgICAgICAgICAgICAgICAgICApLAorCisgICAgICAgICAgICAgICAucmRfY2xrICAgICAgICAgICAgIChhcHBfY2xrICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgIC5yZF9yZXNldF9uICAgICAgICAgKGFwcF9yZXNldF9uICAgICAgICApLAorICAgICAgICAgICAgICAgLnJkX2VuICAgICAgICAgICAgICAoYXBwX3J4Zmlmb19yZF9lbiAgICksCisgICAgICAgICAgICAgICAuZW1wdHkgICAgICAgICAgICAgIChhcHBfcnhmaWZvX2VtcHR5ICAgKSwgIC8vIHN5bmMnZWQgdG8gcmRfY2xrCisgICAgICAgICAgICAgICAucmRfdG90YWxfYXZhbCAgICAgIChyeF9maWZvX2R2YWwgICAgICAgICksCisgICAgICAgICAgICAgICAucmRfZGF0YSAgICAgICAgICAgIChhcHBfcnhmaWZvX2RhdGEgICAgKQorICAgICAgICAgICAgICAgICk7CisKK2FzeW5jX2ZpZm9fdGggIyhXLERQLDAsMCkgdV90eGZpZm8gICgKKyAgICAgICAgICAgICAgIC53cl9jbGsgICAgICAgICAgICAgKGFwcF9jbGsgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgLndyX3Jlc2V0X24gICAgICAgICAoYXBwX3Jlc2V0X24gICAgICAgICksCisgICAgICAgICAgICAgICAud3JfZW4gICAgICAgICAgICAgICh0eF9maWZvX3dyX2VuICAgICAgKSwKKyAgICAgICAgICAgICAgIC53cl9kYXRhICAgICAgICAgICAgKGFwcF90eGZpZm9fZGF0YSAgICApLAorICAgICAgICAgICAgICAgLmZ1bGwgICAgICAgICAgICAgICAoYXBwX3R4X2ZpZm9fZnVsbCAgICksIC8vIHN5bmMnZWQgdG8gd3JfY2xrCisgICAgICAgICAgICAgICAud3JfdG90YWxfZnJlZV9zcGFjZSh0eF9maWZvX2ZzcGFjZSAgICAgKSwKKworICAgICAgICAgICAgICAgLnJkX2NsayAgICAgICAgICAgICAobGluZV9jbGtfMTZ4ICAgICAgICksCisgICAgICAgICAgICAgICAucmRfcmVzZXRfbiAgICAgICAgIChsaW5lX3Jlc2V0X24gICAgICAgKSwKKyAgICAgICAgICAgICAgIC5yZF9lbiAgICAgICAgICAgICAgKHR4X2ZpZm9fcmQgICAgICAgICApLAorICAgICAgICAgICAgICAgLmVtcHR5ICAgICAgICAgICAgICAodHhfZmlmb19yZF9lbXB0eSAgICksICAvLyBzeW5jJ2VkIHRvIHJkX2NsaworICAgICAgICAgICAgICAgLnJkX3RvdGFsX2F2YWwgICAgICAoICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAucmRfZGF0YSAgICAgICAgICAgICh0eF9maWZvX3JkX2RhdGEgICAgKQorICAgICAgICAgICAgICAgICAgICk7CisKKworZG91YmxlX3N5bmNfbG93ICAgdV9zaV9zeW5jICgKKyAgICAgICAgICAgICAgIC5pbl9kYXRhICAgICAgICAgICAocnhkICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAub3V0X2NsayAgICAgICAgICAgKGxpbmVfY2xrXzE2eCAgICAgICApLAorICAgICAgICAgICAgICAgLm91dF9yc3RfbiAgICAgICAgIChsaW5lX3Jlc2V0X24gICAgICAgKSwKKyAgICAgICAgICAgICAgIC5vdXRfZGF0YSAgICAgICAgICAoc2lfc3MgICAgICAgICAgICAgICkgCisgICAgICAgICAgKTsKKword2lyZSAgIGZybV9lcnJvciAgICAgICAgICA9IChlcnJvcl9pbmQgPT0gMidiMDEpOword2lyZSAgIHBhcl9lcnJvciAgICAgICAgICA9IChlcnJvcl9pbmQgPT0gMidiMTApOword2lyZSAgIHJ4X2ZpZm9fZnVsbF9lcnIgICA9IChlcnJvcl9pbmQgPT0gMidiMTEpOworCitkb3VibGVfc3luY19sb3cgICB1X2ZybV9lcnIgKAorICAgICAgICAgICAgICAgLmluX2RhdGEgICAgICAgICAgICggZnJtX2Vycm9yICAgICAgICApLAorICAgICAgICAgICAgICAgLm91dF9jbGsgICAgICAgICAgICggYXBwX2NsayAgICAgICAgICApLAorICAgICAgICAgICAgICAgLm91dF9yc3RfbiAgICAgICAgICggYXBwX3Jlc2V0X24gICAgICApLAorICAgICAgICAgICAgICAgLm91dF9kYXRhICAgICAgICAgICggZnJtX2Vycm9yX28gICAgICApIAorICAgICAgICAgICk7CisKK2RvdWJsZV9zeW5jX2xvdyAgIHVfcGFyX2VyciAoCisgICAgICAgICAgICAgICAuaW5fZGF0YSAgICAgICAgICAgKCBwYXJfZXJyb3IgICAgICAgICksCisgICAgICAgICAgICAgICAub3V0X2NsayAgICAgICAgICAgKCBhcHBfY2xrICAgICAgICAgICksCisgICAgICAgICAgICAgICAub3V0X3JzdF9uICAgICAgICAgKCBhcHBfcmVzZXRfbiAgICAgICksCisgICAgICAgICAgICAgICAub3V0X2RhdGEgICAgICAgICAgKCBwYXJfZXJyb3JfbyAgICAgICkgCisgICAgICAgICAgKTsKKworZG91YmxlX3N5bmNfbG93ICAgdV9yeGZpZm9fZXJyICgKKyAgICAgICAgICAgICAgIC5pbl9kYXRhICAgICAgICAgICAoIHJ4X2ZpZm9fZnVsbF9lcnIgKSwKKyAgICAgICAgICAgICAgIC5vdXRfY2xrICAgICAgICAgICAoIGFwcF9jbGsgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgIC5vdXRfcnN0X24gICAgICAgICAoIGFwcF9yZXNldF9uICAgICAgKSwKKyAgICAgICAgICAgICAgIC5vdXRfZGF0YSAgICAgICAgICAoIHJ4X2ZpZm9fZnVsbF9lcnJfbyAgKSAKKyAgICAgICAgICApOworCisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvdWFydC9zcmMvdWFydF9yeGZzbS5zdiBiL3Zlcmlsb2cvcnRsL3VhcnQvc3JjL3VhcnRfcnhmc20uc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg5MTZlNgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3VhcnQvc3JjL3VhcnRfcnhmc20uc3YKQEAgLTAsMCArMSwyMjEgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVUFSVCBSWCBGU00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFlJRml2ZSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWlmaXZlX3IwLmdpdCAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3lpZml2ZS8gICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLyAKKy8vLy8gICAgMC4xIC0gMjB0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgIDEuIGluaXRpYWwgdmVyc2lvbiBwaWNrZWQgZnJvbSAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL29tczgwNTFtaW5pICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbW9kdWxlIHVhcnRfcnhmc20gKAorICAgICAgICAgICAgIHJlc2V0X24gICAgICAgICwKKyAgICAgICAgICAgICBiYXVkX2Nsa18xNnggICAsCisKKyAgICAgICAgICAgICBjZmdfcnhfZW5hYmxlICAsCisgICAgICAgICAgICAgY2ZnX3N0b3BfYml0ICAgLAorICAgICAgICAgICAgIGNmZ19wcmlfbW9kICAgICwKKworICAgICAgICAgICAgIGVycm9yX2luZCAgICAgICwKKworICAgICAgIC8vIEZJRk8gY29udHJvbCBzaWduYWwKKyAgICAgICAgICAgICBmaWZvX2F2YWwgICAgICAsCisgICAgICAgICAgICAgZmlmb193ciAgICAgICAgLAorICAgICAgICAgICAgIGZpZm9fZGF0YSAgICAgICwKKworICAgICAgICAgIC8vIExpbmUgSW50ZXJmYWNlCisgICAgICAgICAgICAgc2kgIAorICAgICAgICAgICk7CisKKworaW5wdXQgICAgICAgICAgICAgcmVzZXRfbiAgICAgICAgOyAvLyBhY3RpdmUgbG93IHJlc2V0IHNpZ25hbAoraW5wdXQgICAgICAgICAgICAgYmF1ZF9jbGtfMTZ4ICAgOyAvLyBiYXVkIGNsb2NrLTE2eAorCitpbnB1dCAgICAgICAgICAgICBjZmdfcnhfZW5hYmxlICA7IC8vIHRyYW5zbWl0IGludGVyZmFjZSBlbmFibGUKK2lucHV0ICAgICAgICAgICAgIGNmZ19zdG9wX2JpdCAgIDsgLy8gc3RvcCBiaXQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgLS0+IDEgc3RvcCwgMSAtLT4gMiBTdG9wCitpbnB1dCAgIFsxOjBdICAgICBjZmdfcHJpX21vZCAgICA7Ly8gUHJpb3JpdHkgTW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAyJ2IwMCAtLT4gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAyJ2IxMCAtLT4gRXZlbiBwcmlvcml0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAyJ2IxMSAtLT4gT2RkIHByaW9yaXR5CisKK291dHB1dCBbMTowXSAgICAgIGVycm9yX2luZCAgICAgOyAvLyAyJ2IwMCAtLT4gTm9ybWFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMidiMDEgLS0+IGZyYW1pbmcgZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAyJ2IxMCAtLT4gcGFyaXR5IGVycm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMidiMTEgLS0+IGZpZm8gZnVsbAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICBGSUZPIGNvbnRyb2wgc2lnbmFsCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbnB1dCAgICAgICAgICAgICBmaWZvX2F2YWwgICAgICA7IC8vIGZpZm8gZW1wdHkKK291dHB1dCAgICAgICAgICAgIGZpZm9fd3IgICAgICAgIDsgLy8gZmlmbyB3cml0ZSwgYXNzdW1lZCBubyBiYWNrIHRvIGJhY2sgd3JpdGUKK291dHB1dCAgWzc6MF0gICAgIGZpZm9fZGF0YSAgICAgIDsgLy8gZmlmbyB3cml0ZSBkYXRhCisKKy8vIExpbmUgSW50ZXJmYWNlCitpbnB1dCAgICAgICAgICAgICBzaSAgICAgICAgICAgICA7ICAvLyByeGQgcGluCisKKworCityZWcgICAgIFs3OjBdICAgIGZpZm9fZGF0YSAgICAgICA7IC8vIGZpZm8gd3JpdGUgZGF0YQorcmVnICAgICAgICAgICAgICBmaWZvX3dyICAgICAgICAgOyAvLyBmaWZvIHdyaXRlIAorcmVnICAgIFsxOjBdICAgICBlcnJvcl9pbmQgICAgICAgOyAKK3JlZyAgICBbMjowXSAgICAgY250ICAgICAgICAgICAgIDsKK3JlZyAgICBbMzowXSAgICAgb2Zmc2V0ICAgICAgICAgIDsgLy8gZnJlZS1ydW5uaW5nIGNvdW50ZXIgZnJvbSAwIC0gMTUKK3JlZyAgICBbMzowXSAgICAgcnhwb3MgICAgICAgICAgIDsgLy8gc3RhYmxlIHJ4IHBvc2l0aW9uCityZWcgICAgWzI6MF0gICAgIHJ4c3RhdGUgICAgICAgICA7CisKK3BhcmFtZXRlciBpZGxlX3N0ICAgICAgPSAzJ2IwMDA7CitwYXJhbWV0ZXIgeGZyX3N0YXJ0ICAgID0gMydiMDAxOworcGFyYW1ldGVyIHhmcl9kYXRhX3N0ICA9IDMnYjAxMDsKK3BhcmFtZXRlciB4ZnJfcHJpX3N0ICAgPSAzJ2IwMTE7CitwYXJhbWV0ZXIgeGZyX3N0b3Bfc3QxID0gMydiMTAwOworcGFyYW1ldGVyIHhmcl9zdG9wX3N0MiA9IDMnYjEwMTsKKworCithbHdheXMgQChuZWdlZGdlIHJlc2V0X24gb3IgcG9zZWRnZSBiYXVkX2Nsa18xNngpIGJlZ2luCisgICBpZihyZXNldF9uID09IDApIGJlZ2luCisgICAgICByeHN0YXRlICAgPD0gMydiMDsKKyAgICAgIG9mZnNldCAgICA8PSA0J2IwOworICAgICAgcnhwb3MgICAgIDw9IDQnYjA7CisgICAgICBjbnQgICAgICAgPD0gMydiMDsKKyAgICAgIGVycm9yX2luZCA8PSAyJ2IwOworICAgICAgZmlmb193ciAgIDw9IDEnYjA7CisgICAgICBmaWZvX2RhdGEgPD0gOCdoMDsKKyAgIGVuZAorICAgZWxzZSBiZWdpbgorICAgICAgb2Zmc2V0ICAgICA8PSBvZmZzZXQgKyAxOworICAgICAgY2FzZShyeHN0YXRlKQorICAgICAgIGlkbGVfc3QgICA6IGJlZ2luCisgICAgICAgICAgICBpZighc2kpIGJlZ2luIC8vIFN0YXJ0IGluZGljYXRpb24KKyAgICAgICAgICAgICAgIGlmKGZpZm9fYXZhbCAmJiBjZmdfcnhfZW5hYmxlKSBiZWdpbgorICAgICAgICAgICAgICAgICByeHN0YXRlICAgPD0gICB4ZnJfc3RhcnQ7CisgICAgICAgICAgICAgICAgIGNudCAgICAgICA8PSAgIDA7CisgICAgICAgICAgICAgICAgIHJ4cG9zICAgICA8PSAgIG9mZnNldCArIDg7IC8vIEFzc2lnbiBjZW50ZXIgcnhvZmZzZXQKKyAgICAgICAgICAgICAgICAgZXJyb3JfaW5kIDw9IDInYjAwOworICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICAgICBlcnJvcl9pbmQgPD0gMidiMTE7IC8vIGZpZm8gZnVsbCBlcnJvciBpbmRpY2F0aW9uCisgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICBlcnJvcl9pbmQgPD0gMidiMDA7IC8vIFJlc2V0IEVycm9yCisgICAgICAgICAgICBlbmQKKyAgICAgICAgIGVuZAorICAgICAgeGZyX3N0YXJ0IDogYmVnaW4KKyAgICAgICAgICAgIC8vIE1ha2UgU3VyZSB0aGF0IG1pbmltdW0gOCBjeWNsZSBsb3cgaXMgZGV0ZWN0ZWQKKyAgICAgICAgICAgIGlmKGNudCA8IDcgJiYgc2kpIGJlZ2luIC8vIFN0YXJ0IGluZGljYXRpb24KKyAgICAgICAgICAgICAgIHJ4c3RhdGUgPD0gICBpZGxlX3N0OworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbHNlIGlmKGNudCA9PSA3ICYmICFzaSkgYmVnaW4gLy8gU3RhcnQgaW5kaWNhdGlvbgorICAgICAgICAgICAgICAgIHJ4c3RhdGUgPD0gICB4ZnJfZGF0YV9zdDsKKyAgICAgICAgICAgICAgICBjbnQgICAgIDw9ICAgMDsKKyAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICAgIGNudCAgPD0gY250ICsxOworICAgICAgICAgICAgZW5kCisgICAgICAgICBlbmQKKyAgICAgIHhmcl9kYXRhX3N0IDogYmVnaW4KKyAgICAgICAgICAgICBpZihyeHBvcyA9PSBvZmZzZXQpIGJlZ2luCisgICAgICAgICAgICAgICAgZmlmb19kYXRhW2NudF0gPD0gc2k7CisgICAgICAgICAgICAgICAgY250ICAgICAgICAgICAgPD0gY250KzE7CisgICAgICAgICAgICAgICAgaWYoY250ID09IDcpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgZmlmb193ciA8PSAxOworICAgICAgICAgICAgICAgICAgIGlmKGNmZ19wcmlfbW9kID09IDInYjAwKSAgLy8gTm8gUHJpb3JpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgcnhzdGF0ZSA8PSAgIHhmcl9zdG9wX3N0MTsKKyAgICAgICAgICAgICAgICAgICBlbHNlIHJ4c3RhdGUgPD0geGZyX3ByaV9zdDsgIAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgIGVuZAorICAgICAgICAgIGVuZAorICAgICAgIHhmcl9wcmlfc3QgICA6IGJlZ2luCisgICAgICAgICAgICBmaWZvX3dyIDw9IDA7CisgICAgICAgICAgICBpZihyeHBvcyA9PSBvZmZzZXQpIGJlZ2luCisgICAgICAgICAgICAgICBpZihjZmdfcHJpX21vZCA9PSAyJ2IxMCkgIC8vIGV2ZW4gcHJpb3JpdHkKKyAgICAgICAgICAgICAgICAgIGlmKCBzaSAhPSBeZmlmb19kYXRhKSBlcnJvcl9pbmQgPD0gMidiMTA7CisgICAgICAgICAgICAgICBlbHNlICAvLyBPZGQgUHJpb3JpdHkKKyAgICAgICAgICAgICAgICAgIGlmKCBzaSAhPSB+KF5maWZvX2RhdGEpKSBlcnJvcl9pbmQgPD0gMidiMTA7CisgICAgICAgICAgICAgICByeHN0YXRlIDw9ICAgeGZyX3N0b3Bfc3QxOworICAgICAgICAgICAgZW5kCisgICAgICAgICBlbmQKKyAgICAgICB4ZnJfc3RvcF9zdDEgIDogYmVnaW4KKyAgICAgICAgICBmaWZvX3dyIDw9IDA7CisgICAgICAgICAgaWYocnhwb3MgPT0gb2Zmc2V0KSBiZWdpbgorICAgICAgICAgICAgIGlmKHNpKSBiZWdpbgorICAgICAgICAgICAgICAgaWYoY2ZnX3N0b3BfYml0KSAvLyBUd28gU3RvcCBiaXQKKyAgICAgICAgICAgICAgICAgIHJ4c3RhdGUgPD0gICB4ZnJfc3RvcF9zdDI7CisgICAgICAgICAgICAgICBlbHNlICAgCisgICAgICAgICAgICAgICAgICByeHN0YXRlIDw9ICAgaWRsZV9zdDsKKyAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbiAvLyBGcmFtaW5nIGVycm9yCisgICAgICAgICAgICAgICAgZXJyb3JfaW5kIDw9IDInYjAxOworICAgICAgICAgICAgICAgIHJ4c3RhdGUgICA8PSAgIGlkbGVfc3Q7CisgICAgICAgICAgICAgZW5kCisgICAgICAgICAgZW5kCisgICAgICAgZW5kCisgICAgICAgeGZyX3N0b3Bfc3QyICA6IGJlZ2luCisgICAgICAgICAgaWYocnhwb3MgPT0gb2Zmc2V0KSBiZWdpbgorICAgICAgICAgICAgIGlmKHNpKSBiZWdpbgorICAgICAgICAgICAgICAgIHJ4c3RhdGUgPD0gICBpZGxlX3N0OworICAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luIC8vIEZyYW1pbmcgZXJyb3IKKyAgICAgICAgICAgICAgICBlcnJvcl9pbmQgPD0gMidiMDE7CisgICAgICAgICAgICAgICAgcnhzdGF0ZSAgIDw9ICAgaWRsZV9zdDsKKyAgICAgICAgICAgICBlbmQKKyAgICAgICAgICBlbmQKKyAgICAgICBlbmQKKyAgICAgICBkZWZhdWx0OiByeHN0YXRlICAgPD0gICBpZGxlX3N0OworICAgIGVuZGNhc2UKKyAgIGVuZAorZW5kCisKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC91YXJ0L3NyYy91YXJ0X3R4ZnNtLnN2IGIvdmVyaWxvZy9ydGwvdWFydC9zcmMvdWFydF90eGZzbS5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDY1MDdlCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvdWFydC9zcmMvdWFydF90eGZzbS5zdgpAQCAtMCwwICsxLDE5MCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBVQVJUIFRYIEZTTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgWUlGaXZlIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS95aWZpdmVfcjAuZ2l0ICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMveWlmaXZlLyAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vIAorLy8vLyAgICAwLjEgLSAyMHRoIEp1bmUgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgMS4gaW5pdGlhbCB2ZXJzaW9uIHBpY2tlZCBmcm9tICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvb21zODA1MW1pbmkgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLworLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLworLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLworLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLworLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLworLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLworLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLworLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLworLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisKK21vZHVsZSB1YXJ0X3R4ZnNtICgKKyAgICAgICAgICAgICByZXNldF9uICAgICAgICAsCisgICAgICAgICAgICAgYmF1ZF9jbGtfMTZ4ICAgLAorCisgICAgICAgICAgICAgY2ZnX3R4X2VuYWJsZSAgLAorICAgICAgICAgICAgIGNmZ19zdG9wX2JpdCAgICwKKyAgICAgICAgICAgICBjZmdfcHJpX21vZCAgICAsCisKKyAgICAgICAvLyBGSUZPIGNvbnRyb2wgc2lnbmFsCisgICAgICAgICAgICAgZmlmb19lbXB0eSAgICAgLAorICAgICAgICAgICAgIGZpZm9fcmQgICAgICAgICwKKyAgICAgICAgICAgICBmaWZvX2RhdGEgICAgICAsCisKKyAgICAgICAgICAvLyBMaW5lIEludGVyZmFjZQorICAgICAgICAgICAgIHNvICAKKyAgICAgICAgICApOworCisKK2lucHV0ICAgICAgICAgICAgIHJlc2V0X24gICAgICAgIDsgLy8gYWN0aXZlIGxvdyByZXNldCBzaWduYWwKK2lucHV0ICAgICAgICAgICAgIGJhdWRfY2xrXzE2eCAgIDsgLy8gYmF1ZCBjbG9jay0xNngKKworaW5wdXQgICAgICAgICAgICAgY2ZnX3R4X2VuYWJsZSAgOyAvLyB0cmFuc21pdCBpbnRlcmZhY2UgZW5hYmxlCitpbnB1dCAgICAgICAgICAgICBjZmdfc3RvcF9iaXQgICA7IC8vIHN0b3AgYml0IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIC0tPiAxIHN0b3AsIDEgLS0+IDIgU3RvcAoraW5wdXQgICBbMTowXSAgICAgY2ZnX3ByaV9tb2QgICAgOy8vIFByaW9yaXR5IE1vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMidiMDAgLS0+IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMidiMTAgLS0+IEV2ZW4gcHJpb3JpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMidiMTEgLS0+IE9kZCBwcmlvcml0eQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgIEZJRk8gY29udHJvbCBzaWduYWwKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2lucHV0ICAgICAgICAgICAgIGZpZm9fZW1wdHkgICAgIDsgLy8gZmlmbyBlbXB0eQorb3V0cHV0ICAgICAgICAgICAgZmlmb19yZCAgICAgICAgOyAvLyBmaWZvIHJlYWQsIGFzc3VtZWQgbm8gYmFjayB0byBiYWNrIHJlYWQKK2lucHV0ICBbNzowXSAgICAgIGZpZm9fZGF0YSAgICAgIDsgLy8gZmlmbyByZWFkIGRhdGEKKworLy8gTGluZSBJbnRlcmZhY2UKK291dHB1dCAgICAgICAgICAgIHNvICAgICAgICAgICAgIDsgIC8vIHR4ZCBwaW4KKworCityZWcgIFsyOjBdICAgICAgICAgdHhzdGF0ZSAgICAgICA7IC8vIHR4IHN0YXRlCityZWcgICAgICAgICAgICAgICAgc28gICAgICAgICAgICA7IC8vIHR4ZCBwaW4KK3JlZyAgWzc6MF0gICAgICAgICB0eGRhdGEgICAgICAgIDsgLy8gbG9jYWwgdHhkYXRhCityZWcgICAgICAgICAgICAgICAgZmlmb19yZCAgICAgICA7IC8vIEZpZm8gcmVhZCBlbmFibGUKK3JlZyAgWzI6MF0gICAgICAgICBjbnQgICAgICAgICAgIDsgLy8gbG9jYWwgZGF0YSBjb250CityZWcgIFszOjBdICAgICAgICAgZGl2Y250ICAgICAgICA7IC8vIGNsb2NrIGRpdiBjb3VudAorCitwYXJhbWV0ZXIgaWRsZV9zdCAgICAgID0gMydiMDAwOworcGFyYW1ldGVyIHhmcl9kYXRhX3N0ICA9IDMnYjAwMTsKK3BhcmFtZXRlciB4ZnJfcHJpX3N0ICAgPSAzJ2IwMTA7CitwYXJhbWV0ZXIgeGZyX3N0b3Bfc3QxID0gMydiMDExOworcGFyYW1ldGVyIHhmcl9zdG9wX3N0MiA9IDMnYjEwMDsKKworCithbHdheXMgQChuZWdlZGdlIHJlc2V0X24gb3IgcG9zZWRnZSBiYXVkX2Nsa18xNngpCitiZWdpbgorICAgaWYocmVzZXRfbiA9PSAxJ2IwKSBiZWdpbgorICAgICAgdHhzdGF0ZSAgPD0gaWRsZV9zdDsKKyAgICAgIHNvICAgICAgIDw9IDEnYjE7CisgICAgICBjbnQgICAgICA8PSAzJ2IwOworICAgICAgdHhkYXRhICAgPD0gOCdoMDsKKyAgICAgIGZpZm9fcmQgIDw9IDEnYjA7CisgICAgICBkaXZjbnQgICA8PSA0J2IwOworICAgZW5kCisgICBlbHNlIGJlZ2luCisgICAgICBkaXZjbnQgPD0gZGl2Y250KzE7CisgICAgICBpZihkaXZjbnQgPT0gNCdiMDAwMCkgYmVnaW4gLy8gRG8gYXQgb25jZSBpbiAxNiBjbG9jaworICAgICAgICAgY2FzZSh0eHN0YXRlKQorICAgICAgICAgIGlkbGVfc3QgICAgICA6IGJlZ2luCisgICAgICAgICAgICAgICBpZighZmlmb19lbXB0eSAmJiBjZmdfdHhfZW5hYmxlKSBiZWdpbgorICAgICAgICAgICAgICAgICAgc28gICAgICAgPD0gMSdiMCA7IC8vIFN0YXJ0IGJpdAorICAgICAgICAgICAgICAgICAgY250ICAgICAgPD0gMydiMDsKKyAgICAgICAgICAgICAgICAgIGZpZm9fcmQgIDw9IDEnYjE7CisgICAgICAgICAgICAgICAgICB0eGRhdGEgICA8PSBmaWZvX2RhdGE7CisgICAgICAgICAgICAgICAgICB0eHN0YXRlICA8PSB4ZnJfZGF0YV9zdDsgIAorICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgIHhmcl9kYXRhX3N0ICA6IGJlZ2luCisgICAgICAgICAgICAgIGZpZm9fcmQgIDw9IDEnYjA7CisgICAgICAgICAgICAgIHNvICAgPD0gdHhkYXRhW2NudF07CisgICAgICAgICAgICAgIGNudCAgPD0gY250KzE7CisgICAgICAgICAgICAgIGlmKGNudCA9PSA3KSBiZWdpbgorICAgICAgICAgICAgICAgICBpZihjZmdfcHJpX21vZCA9PSAyJ2IwMCkgYmVnaW4gLy8gTm8gUHJpb3JpdHkKKyAgICAgICAgICAgICAgICAgICAgdHhzdGF0ZSAgPD0geGZyX3N0b3Bfc3QxOyAgCisgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHR4c3RhdGUgPD0geGZyX3ByaV9zdDsgIAorICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgIGVuZAorCisgICAgICAgICAgeGZyX3ByaV9zdCAgIDogYmVnaW4KKyAgICAgICAgICAgICAgIGlmKGNmZ19wcmlfbW9kID09IDInYjEwKSAgLy8gZXZlbiBwcmlvcml0eQorICAgICAgICAgICAgICAgICAgIHNvIDw9IF50eGRhdGE7CisgICAgICAgICAgICAgICBlbHNlIGJlZ2luIC8vIE9kZCBQcmlvcml0eQorICAgICAgICAgICAgICAgICAgIHNvIDw9IH4oXnR4ZGF0YSk7CisgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgIHR4c3RhdGUgIDw9IHhmcl9zdG9wX3N0MTsgIAorICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICB4ZnJfc3RvcF9zdDEgIDogYmVnaW4gLy8gRmlyc3QgU3RvcCBCaXQKKyAgICAgICAgICAgICAgIHNvIDw9IDE7CisgICAgICAgICAgICAgICBpZihjZmdfc3RvcF9iaXQgPT0gMCkgIC8vIDEgU3RvcCBCaXQKKyAgICAgICAgICAgICAgICAgICAgdHhzdGF0ZSA8PSBpZGxlX3N0OworICAgICAgICAgICAgICAgZWxzZSAvLyAyIFN0b3AgQml0IAorICAgICAgICAgICAgICAgICAgdHhzdGF0ZSAgPD0geGZyX3N0b3Bfc3QyOworICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICB4ZnJfc3RvcF9zdDIgIDogYmVnaW4gLy8gU2Vjb25kIFN0b3AgQml0CisgICAgICAgICAgICAgICBzbyA8PSAxOworICAgICAgICAgICAgICAgdHhzdGF0ZSA8PSBpZGxlX3N0OworICAgICAgICAgICAgZW5kCisgICAgICAgICBkZWZhdWx0OiB0eHN0YXRlICA8PSBpZGxlX3N0OworICAgICAgICAgZW5kY2FzZQorICAgICAgZW5kCisgICAgIGVsc2UgYmVnaW4KKyAgICAgICAgZmlmb19yZCAgPD0gMSdiMDsKKyAgICAgZW5kCisgICBlbmQKK2VuZAorCisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvdWFydDJ3Yi9zcmMvcnVuX3Zlcmlsb2cgYi92ZXJpbG9nL3J0bC91YXJ0MndiL3NyYy9ydW5fdmVyaWxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjg5ODI3Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvdWFydDJ3Yi9zcmMvcnVuX3Zlcmlsb2cKQEAgLTAsMCArMSBAQAoraXZlcmlsb2cgdWFydDJ3Yi5zdiB1YXJ0Ml9jb3JlLnN2IHVhcnRfbXNnX2hhbmRsZXIudiAgLi4vLi4vdWFydC9zcmMvdWFydF9yeGZzbS5zdiAuLi8uLi91YXJ0L3NyYy91YXJ0X3R4ZnNtLnN2IC4uLy4uL2xpYi9kb3VibGVfc3luY19sb3cudiAuLi8uLi9saWIvY2xrX2N0bC52IC4uLy4uL2xpYi9yZXNldF9zeW5jLnN2CmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC91YXJ0MndiL3NyYy91YXJ0Ml9jb3JlLnN2IGIvdmVyaWxvZy9ydGwvdWFydDJ3Yi9zcmMvdWFydDJfY29yZS5zdgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43OGRhYTFhCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvdWFydDJ3Yi9zcmMvdWFydDJfY29yZS5zdgpAQCAtMCwwICsxLDE5MiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUdWJvIDgwNTEgY29yZXMgVUFSVCBJbnRlcmZhY2UgTW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgVHVyYm8gODA1MSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAvLy8vCisvLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvdHVyYm84MDUxLyAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUdXJibyA4MDUxIGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCittb2R1bGUgdWFydDJfY29yZSAoICAKKyAgICAgICAgaW5wdXQgd2lyZSAgICAgICBhcnN0X24gLCAgICAgLy8gQXN5bmMgcmVzZXQKKyAgICAgICAgaW5wdXQgd2lyZSAgICAgICBhcHBfY2xrICwgICAgLy8gQXBwbGljYXRpb24gY2xvY2sKKyAgICAKKworCS8vIGNvbmZpZ3VyYXRpb24gY29udHJvbAorICAgICAgICBpbnB1dCB3aXJlICAgICAgIGNmZ190eF9lbmFibGUgICwgLy8gRW5hYmxlIFRyYW5zbWl0IFBhdGgKKyAgICAgICAgaW5wdXQgd2lyZSAgICAgICBjZmdfcnhfZW5hYmxlICAsIC8vIEVuYWJsZSBSZWNlaXZlZCBQYXRoCisgICAgICAgIGlucHV0IHdpcmUgICAgICAgY2ZnX3N0b3BfYml0ICAgLCAvLyAwIC0+IDEgU3RhcnQgLCAxIC0+IDIgU3RvcCBCaXRzCisgICAgICAgIGlucHV0IHdpcmUgWzE6MF0gY2ZnX3ByaV9tb2QgICAgLCAvLyBwcmlvcml0eSBtb2RlLCAwIC0+IG5vcCwgMSAtPiBFdmVuLCAyIC0+IE9kZAorCWlucHV0IHdpcmUgWzExOjBdY2ZnX2JhdWRfMTZ4ICAgLCAvLyAxNnggYmF1ZCByYXRlIGNvbnRyb2wKKworICAgIC8vIFRYIFBBVEggSW5mb3JtYXRpb24KKyAgICAgICAgaW5wdXQgIHdpcmUgICAgICB0eF9kYXRhX2F2YWlsICAsICAgLy8gSW5kaWNhdGUgdmFsaWQgVFhEIERhdGEKKyAgICAgICAgb3V0cHV0IHdpcmUgICAgIHR4X3JkICAgICAgICAgICwgICAvLyBJbmRpY2F0ZSBUWEQgRGF0YSBCZWVuIFJlYWQKKyAgICAgICAgaW5wdXQgIHdpcmUgWzc6MF10eF9kYXRhICAgICAgICAsICAgLy8gSW5kaWNhdGUgVFhEIERhdGEgQmVlbiAKKyAgICAgICAgIAorCisgICAgLy8gUlhEIEluZm9ybWF0aW9uCisgICAgICAgIGlucHV0ICB3aXJlICAgICAgIHJ4X3JlYWR5ICAgICAgICwgIC8vIEluZGljYXRlIFJlYWR5IHRvIGFjY2VwdCB0aGUgUmVhZCBEYXRhCisgICAgICAgIG91dHB1dCB3aXJlICAgICAgcnhfd3IgICAgICAgICAgLCAgLy8gVmFsaWQgUlhEIERhdGEKKyAgICAgICAgb3V0cHV0IHdpcmUgWzc6MF1yeF9kYXRhICAgICAgICAsICAvLyBSWEQgRGF0YQorCisgICAgICAgLy8gU3RhdHVzIGluZm9ybWF0aW9uCisgICAgICAgIG91dHB1dCB3aXJlICAgICAgZnJtX2Vycm9yICAgICAgLCAgLy8gZnJhbWluZyBlcnJvcgorCW91dHB1dCB3aXJlICAgICAgcGFyX2Vycm9yICAgICAgLCAgLy8gcGFyIGVycm9yCisKKwlvdXRwdXQgd2lyZSAgICAgIGJhdWRfY2xrXzE2eCAgICwgIC8vIDE2eCBCYXVkIGNsb2NrCisJb3V0cHV0IHdpcmUgICAgICBsaW5lX3Jlc2V0X24gICAsICAvLyBSZXNldCBzeW5jIHRvIDE2eCBCYXVkIGNsb2NrCisKKyAgICAgICAvLyBMaW5lIEludGVyZmFjZQorICAgICAgICBpbnB1dCAgd2lyZSAgICAgICByeGQgICAgICAgICAgICAsICAvLyB1YXJ0IHJ4ZAorICAgICAgICBvdXRwdXQgd2lyZSAgICAgIHR4ZCAgICAgICAgICAgICAgIC8vIHVhcnQgdHhkCisKKyAgICAgKTsKKworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBHbG9iYWwgRGVjCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gV2lyZSBEZWNsYXJhdGlvbgorCit3aXJlIFsxICA6IDBdICAgZXJyb3JfaW5kICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICBzaV9zcyAgICAgICAgICAgICAgOworCisvLyBPcGVuU291cmNlIENUUyB0b29sIGRvZXMgbm90IHdvcmsgd2l0aCBidWZmZXIgYXMgc291cmNlIHBvaW50CisvLyBjaGFuZ2VkIGJ1ZiB0byBtYXggd2l0aCBzZWxlY3QgdGllZD0wCisvL2N0ZWNoX2Nsa19idWYgdV9saW5lY2xrX2J1ZiAgKC5BKGxpbmVfY2xrXzE2eF9pbiksICAuWChsaW5lX2Nsa18xNngpKTsKK3dpcmUgbGluZV9jbGtfMTZ4OworY3RlY2hfbXV4MngxIHVfdWFydF9jbGsgICguQTAobGluZV9jbGtfMTZ4KSwgLkExKDEnYjApLCAuUygxJ2IwKSwgLlgoYmF1ZF9jbGtfMTZ4KSk7CisKKy8vIDE2eCBCYXVkIGNsb2NrIGdlbmVyYXRpb24KKy8vIEV4YW1wbGU6IHRvIGdlbmVyYXRlIDE5MjAwIEJhdWQgY2xvY2sgZnJvbSA1ME1oeiBMaW5rIGNsb2NrCisvLyAgICA1MCAqIDEwMDAgKiAxMDAwIC8gKDIgKyBjZmdfYmF1ZF8xNngpID0gMTkyMDAgKiAxNgorLy8gICAgY2ZnX2JhdWRfMTZ4ID0gMHhBMCAoMTYwKQorCitjbGtfY3RsICMoMTEpIHVfY2xrX2N0bCAoCisgICAvLyBPdXRwdXRzCisgICAgICAgLmNsa19vICAgICAgICAgIChsaW5lX2Nsa18xNngpLAorCisgICAvLyBJbnB1dHMKKyAgICAgICAubWNsayAgICAgICAgICAgKGFwcF9jbGspLAorICAgICAgIC5yZXNldF9uICAgICAgICAoYXJzdF9uKSwgCisgICAgICAgLmNsa19kaXZfcmF0aW8gIChjZmdfYmF1ZF8xNngpCisgICApOworCisgICAKKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKy8vIExpbmUgUmVzZXQgU3luY2hyb25pemF0aW9uCisvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCityZXNldF9zeW5jICB1X2xpbmVfcnN0ICgKKwkgICAgICAuc2Nhbl9tb2RlICAoMSdiMCAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgLmRjbGsgICAgICAgKGJhdWRfY2xrXzE2eCAgICksIC8vIERlc3RpbmF0aW9uIGNsb2NrIGRvbWFpbgorCSAgICAgIC5hcnN0X24gICAgIChhcnN0X24gICAgICAgICApLCAvLyBhY3RpdmUgbG93IGFzeW5jIHJlc2V0CisgICAgICAgICAgICAgIC5zcnN0X24gICAgIChsaW5lX3Jlc2V0X24gICApCisgICAgICAgICAgKTsKKworCisKK3VhcnRfdHhmc20gdV90eGZzbSAoCisgICAgICAgICAgICAgICAuIHJlc2V0X24gICAgICAgICAgICggbGluZV9yZXNldF9uICAgICAgKSwKKyAgICAgICAgICAgICAgIC4gYmF1ZF9jbGtfMTZ4ICAgICAgKCBiYXVkX2Nsa18xNnggICAgICApLAorCisgICAgICAgICAgICAgICAuIGNmZ190eF9lbmFibGUgICAgICggY2ZnX3R4X2VuYWJsZSAgICAgKSwKKyAgICAgICAgICAgICAgIC4gY2ZnX3N0b3BfYml0ICAgICAgKCBjZmdfc3RvcF9iaXQgICAgICApLAorICAgICAgICAgICAgICAgLiBjZmdfcHJpX21vZCAgICAgICAoIGNmZ19wcmlfbW9kICAgICAgICksCisKKyAgICAgICAvLyBGSUZPIGNvbnRyb2wgc2lnbmFsCisgICAgICAgICAgICAgICAuIGZpZm9fZW1wdHkgICAgICAgICggIXR4X2RhdGFfYXZhaWwgICAgKSwKKyAgICAgICAgICAgICAgIC4gZmlmb19yZCAgICAgICAgICAgKCB0eF9yZCAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgLiBmaWZvX2RhdGEgICAgICAgICAoIHR4X2RhdGEgICAgICAgICAgICksCisKKyAgICAgICAgICAvLyBMaW5lIEludGVyZmFjZQorICAgICAgICAgICAgICAgLiBzbyAgICAgICAgICAgICAgICAoIHR4ZCAgICAgICAgICAgICAgICkKKyAgICAgICAgICApOworCisKK3VhcnRfcnhmc20gdV9yeGZzbSAoCisgICAgICAgICAgICAgICAuIHJlc2V0X24gICAgICAgICAgICggIGxpbmVfcmVzZXRfbiAgICAgKSwKKyAgICAgICAgICAgICAgIC4gYmF1ZF9jbGtfMTZ4ICAgICAgKCAgYmF1ZF9jbGtfMTZ4ICAgICApICwKKworICAgICAgICAgICAgICAgLiBjZmdfcnhfZW5hYmxlICAgICAoICBjZmdfcnhfZW5hYmxlICAgICksCisgICAgICAgICAgICAgICAuIGNmZ19zdG9wX2JpdCAgICAgICggIGNmZ19zdG9wX2JpdCAgICAgKSwKKyAgICAgICAgICAgICAgIC4gY2ZnX3ByaV9tb2QgICAgICAgKCAgY2ZnX3ByaV9tb2QgICAgICApLAorCisgICAgICAgICAgICAgICAuIGVycm9yX2luZCAgICAgICAgICggIGVycm9yX2luZCAgICAgICAgKSwKKworICAgICAgIC8vIEZJRk8gY29udHJvbCBzaWduYWwKKyAgICAgICAgICAgICAgIC4gIGZpZm9fYXZhbCAgICAgICAgKCByeF9yZWFkeSAgICAgICAgICApLAorICAgICAgICAgICAgICAgLiAgZmlmb193ciAgICAgICAgICAoIHJ4X3dyICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAuICBmaWZvX2RhdGEgICAgICAgICggcnhfZGF0YSAgICAgICAgICAgKSwKKworICAgICAgICAgIC8vIExpbmUgSW50ZXJmYWNlCisgICAgICAgICAgICAgICAuICBzaSAgICAgICAgICAgICAgIChzaV9zcyAgICAgICAgICAgICAgKQorICAgICAgICAgICk7CisKKy8vIERvdWJsZSBTeW5jIFJYRAorZG91YmxlX3N5bmNfbG93ICAgdV9yeGRfc3luYyAoCisgICAgICAgICAgICAgICAuaW5fZGF0YSAgICAgICAgICAgKHJ4ZCAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgLm91dF9jbGsgICAgICAgICAgIChiYXVkX2Nsa18xNnggICAgICAgKSwKKyAgICAgICAgICAgICAgIC5vdXRfcnN0X24gICAgICAgICAobGluZV9yZXNldF9uICAgICAgICksCisgICAgICAgICAgICAgICAub3V0X2RhdGEgICAgICAgICAgKHNpX3NzICAgICAgICAgICAgICApIAorICAgICAgICAgICk7CisKKworYXNzaWduICAgZnJtX2Vycm9yICAgICAgICAgID0gKGVycm9yX2luZCA9PSAyJ2IwMSk7Cithc3NpZ24gICBwYXJfZXJyb3IgICAgICAgICAgPSAoZXJyb3JfaW5kID09IDInYjEwKTsKKworCisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvdWFydDJ3Yi9zcmMvdWFydDJ3Yi5zdiBiL3Zlcmlsb2cvcnRsL3VhcnQyd2Ivc3JjL3VhcnQyd2Iuc3YKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGJmNTBiMwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3VhcnQyd2Ivc3JjL3VhcnQyd2Iuc3YKQEAgLTAsMCArMSwyMjkgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgDQorLy8gDQorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQorLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKy8vDQorLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisvLw0KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMA0KKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+DQorLy8NCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIFVBUlQyV0IgIFRvcCBNb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgMS4gdWFydF9jb3JlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgIDIuIHVhcnRfbXNnX2hhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vDQorLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLw0KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8NCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8NCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vDQorLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLw0KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8NCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8NCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vDQorLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLw0KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8NCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8NCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vDQorLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorDQorbW9kdWxlIHVhcnQyd2IgKCAgDQorICAgICAgICBpbnB1dCB3aXJlICAgICAgICAgICAgICAgICAgYXJzdF9uICAgICAgICAgICwgLy8gIHN5bmMgcmVzZXQNCisgICAgICAgIGlucHV0IHdpcmUgICAgICAgICAgICAgICAgICBhcHBfY2xrICAgICAgICAgLCAvLyAgc3lzIGNsb2NrICAgIA0KKw0KKwkvLyBjb25maWd1cmF0aW9uIGNvbnRyb2wNCisgICAgICAgaW5wdXQgd2lyZSAgICAgICAgICAgICAgICAgIGNmZ190eF9lbmFibGUgICAgLCAvLyBFbmFibGUgVHJhbnNtaXQgUGF0aA0KKyAgICAgICBpbnB1dCB3aXJlICAgICAgICAgICAgICAgICAgY2ZnX3J4X2VuYWJsZSAgICAsIC8vIEVuYWJsZSBSZWNlaXZlZCBQYXRoDQorICAgICAgIGlucHV0IHdpcmUgICAgICAgICAgICAgICAgICBjZmdfc3RvcF9iaXQgICAgICwgLy8gMCAtPiAxIFN0YXJ0ICwgMSAtPiAyIFN0b3AgQml0cw0KKyAgICAgICBpbnB1dCB3aXJlIFsxOjBdICAgICAgICAgICAgY2ZnX3ByaV9tb2QgICAgICAsIC8vIHByaW9yaXR5IG1vZGUsIDAgLT4gbm9wLCAxIC0+IEV2ZW4sIDIgLT4gT2RkDQorICAgICAgIGlucHV0IHdpcmUgWzExOjBdCSAgICBjZmdfYmF1ZF8xNnggICAgICwgLy8gMTZ4IEJhdWQgY2xvY2sgZ2VuZXJhdGlvbg0KKw0KKyAgICAvLyBNYXN0ZXIgUG9ydA0KKyAgICAgICBvdXRwdXQgICB3aXJlICAgICAgICAgICAgICAgIHdibV9jeWNfbyAgICAgICAgLCAgLy8gc3Ryb2JlL3JlcXVlc3QNCisgICAgICAgb3V0cHV0ICAgd2lyZSAgICAgICAgICAgICAgICB3Ym1fc3RiX28gICAgICAgICwgIC8vIHN0cm9iZS9yZXF1ZXN0DQorICAgICAgIG91dHB1dCAgIHdpcmUgWzMxOjBdICAgICAgICAgd2JtX2Fkcl9vICAgICAgICAsICAvLyBhZGRyZXNzDQorICAgICAgIG91dHB1dCAgIHdpcmUgICAgICAgICAgICAgICAgd2JtX3dlX28gICAgICAgICAsICAvLyB3cml0ZQ0KKyAgICAgICBvdXRwdXQgICB3aXJlIFszMTowXSAgICAgICAgIHdibV9kYXRfbyAgICAgICAgLCAgLy8gZGF0YSBvdXRwdXQNCisgICAgICAgb3V0cHV0ICAgd2lyZSBbMzowXSAgICAgICAgICB3Ym1fc2VsX28gICAgICAgICwgIC8vIGJ5dGUgZW5hYmxlDQorICAgICAgIGlucHV0ICAgIHdpcmUgWzMxOjBdICAgICAgICAgd2JtX2RhdF9pICAgICAgICAsICAvLyBkYXRhIGlucHV0DQorICAgICAgIGlucHV0ICAgIHdpcmUgICAgICAgICAgICAgICAgd2JtX2Fja19pICAgICAgICAsICAvLyBhY2tub3dsZWdlbWVudA0KKyAgICAgICBpbnB1dCAgICB3aXJlICAgICAgICAgICAgICAgIHdibV9lcnJfaSAgICAgICAgLCAgLy8gZXJyb3INCisNCisgICAgICAgLy8gU3RhdHVzIGluZm9ybWF0aW9uDQorICAgICAgIG91dHB1dCAgIHdpcmUgICAgICAgICAgICAgICBmcm1fZXJyb3IgICAgICAgICwgLy8gZnJhbWluZyBlcnJvcg0KKyAgICAgICBvdXRwdXQgICB3aXJlICAgICAgIAkgICAgcGFyX2Vycm9yICAgICAgICAsIC8vIHBhciBlcnJvcg0KKw0KKyAgICAgICBvdXRwdXQgICB3aXJlICAgICAgICAgICAgICAgYmF1ZF9jbGtfMTZ4ICAgICAsIC8vIDE2eCBCYXVkIGNsb2NrDQorDQorICAgICAgIC8vIExpbmUgSW50ZXJmYWNlDQorICAgICAgIGlucHV0ICAgIHdpcmUgICAgICAgICAgICAgIHJ4ZCAgICAgICAgICAgICAgICwgLy8gdWFydCByeGQNCisgICAgICAgb3V0cHV0ICAgd2lyZSAgICAgICAgICAgICAgdHhkICAgICAgICAgICAgICAgICAvLyB1YXJ0IHR4ZA0KKw0KKyAgICAgKTsNCisNCisNCisNCisNCisNCisNCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vIENvbnRyb2wgVW5pdCBpbnRlcmZhY2UNCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KK3dpcmUgIFszMTowXSAgICAgICByZWdfYWRkciAgICAgICAgOyAvLyBSZWdpc3RlciBBZGRyZXNzDQord2lyZSAgWzMxOjBdICAgICAgIHJlZ193ZGF0YSAgICAgICA7IC8vIFJlZ2lzdGVyIFdkYXRhDQord2lyZSAgICAgICAgICAgICAgIHJlZ19yZXEgICAgICAgICA7IC8vIFJlZ2lzdGVyIFJlcXVlc3QNCit3aXJlICAgICAgICAgICAgICAgcmVnX3dyICAgICAgICAgIDsgLy8gMSAtPiB3cml0ZTsgMCAtPiByZWFkDQord2lyZSAgICAgICAgICAgICAgIHJlZ19hY2sgICAgICAgICA7IC8vIFJlZ2lzdGVyIEFjaw0KK3dpcmUgICBbMzE6MF0gICAgICByZWdfcmRhdGEgICAgICAgOw0KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyBUWEQgUGF0aA0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit3aXJlICAgICAgICAgICAgICB0eF9kYXRhX2F2YWlsICAgIDsgLy8gSW5kaWNhdGUgdmFsaWQgVFhEIERhdGEgDQord2lyZSBbNzowXSAgICAgICAgdHhfZGF0YSAgICAgICAgICA7IC8vIFRYRCBEYXRhIHRvIGJlIHRyYW5zbWl0ZWQNCit3aXJlICAgICAgICAgICAgICB0eF9yZCAgICAgICAgICAgIDsgLy8gSW5kaWNhdGUgVFhEIERhdGEgQmVlbiBSZWFkDQorDQorDQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vIFJYRCBQYXRoDQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3dpcmUgICAgICAgICByeF9yZWFkeSAgICAgICAgICAgICAgOyAvLyBJbmRpY2F0ZSBSZWFkeSB0byBhY2NlcHQgdGhlIFJlYWQgRGF0YQ0KK3dpcmUgWzc6MF0gIHJ4X2RhdGEgICAgICAgICAgICAgICAgOyAvLyBSWEQgRGF0YSANCit3aXJlICAgICAgICByeF93ciAgICAgICAgICAgICAgICAgIDsgLy8gVmFsaWQgUlhEIERhdGENCisNCit3aXJlICAgICAgICBsaW5lX3Jlc2V0X24gICAgICAgICAgIDsNCisNCithc3NpZ24gd2JtX2N5Y19vICA9IHdibV9zdGJfbzsNCisNCisNCisvLyBBc3luYyBBcHAgY2xvY2sgdG8gVWFydCBjbG9jayBoYW5kbGluZw0KKw0KK2FzeW5jX3JlZ19idXMgIyguQVcoMzIpLCAuRFcoMzIpLC5CRVcoNCkpDQorICAgICAgICAgIHVfYXN5bmNfcmVnX2J1cyAoDQorICAgIC8vIEluaXRpYXRvciBkZWNsYXJ0aW9uDQorICAgICAgICAgIC5pbl9jbGsgICAgICAgICAgICAgICAgICAgIChiYXVkX2Nsa18xNngpLA0KKyAgICAgICAgICAuaW5fcmVzZXRfbiAgICAgICAgICAgICAgICAobGluZV9yZXNldF9uKSwNCisgICAgICAgLy8gUmVnIEJ1cyBNYXN0ZXINCisgICAgICAgICAgLy8gb3V0cHV0cw0KKyAgICAgICAgICAuaW5fcmVnX3JkYXRhICAgICAgICAgICAgICAgKHJlZ19yZGF0YSksDQorICAgICAgICAgIC5pbl9yZWdfYWNrICAgICAgICAgICAgICAgICAocmVnX2FjayksDQorICAgICAgICAgIC5pbl9yZWdfdGltZW91dCAgICAgICAgICAgICAoKSwNCisNCisgICAgICAgICAgLy8gSW5wdXRzDQorICAgICAgICAgIC5pbl9yZWdfY3MgICAgICAgICAgICAgICAgICAocmVnX3JlcSksDQorICAgICAgICAgIC5pbl9yZWdfYWRkciAgICAgICAgICAgICAgICAocmVnX2FkZHIpLA0KKyAgICAgICAgICAuaW5fcmVnX3dkYXRhICAgICAgICAgICAgICAgKHJlZ193ZGF0YSksDQorICAgICAgICAgIC5pbl9yZWdfd3IgICAgICAgICAgICAgICAgICAocmVnX3dyKSwNCisgICAgICAgICAgLmluX3JlZ19iZSAgICAgICAgICAgICAgICAgICg0J2hGKSwgLy8gTm8gYnl0ZSBlbmFibGUgYmFzZWQgc3VwcG9ydA0KKw0KKyAgICAvLyBUYXJnZXQgRGVjbGFyYXRpb24NCisgICAgICAgICAgLm91dF9jbGsgICAgICAgICAgICAgICAgICAgIChhcHBfY2xrKSwNCisgICAgICAgICAgLm91dF9yZXNldF9uICAgICAgICAgICAgICAgIChhcnN0X24pLA0KKyAgICAgIC8vIFJlZyBCdXMgU2xhdmUNCisgICAgICAgICAgLy8gb3V0cHV0DQorICAgICAgICAgIC5vdXRfcmVnX2NzICAgICAgICAgICAgICAgICAod2JtX3N0Yl9vKSwNCisgICAgICAgICAgLm91dF9yZWdfYWRkciAgICAgICAgICAgICAgICh3Ym1fYWRyX28pLA0KKyAgICAgICAgICAub3V0X3JlZ193ZGF0YSAgICAgICAgICAgICAgKHdibV9kYXRfbyksDQorICAgICAgICAgIC5vdXRfcmVnX3dyICAgICAgICAgICAgICAgICAod2JtX3dlX28pLA0KKyAgICAgICAgICAub3V0X3JlZ19iZSAgICAgICAgICAgICAgICAgKHdibV9zZWxfbyksDQorDQorICAgICAgICAgIC8vIElucHV0cw0KKyAgICAgICAgICAub3V0X3JlZ19yZGF0YSAgICAgICAgICAgICAgKHdibV9kYXRfaSksDQorICAgICAgICAgIC5vdXRfcmVnX2FjayAgICAgICAgICAgICAgICAod2JtX2Fja19pKQ0KKyAgICk7DQorDQorDQordWFydDJfY29yZSB1X2NvcmUgKCAgDQorICAgICAgICAgIC5hcnN0X24gICAgICAgICAgICAoYXJzdF9uKSAsDQorICAgICAgICAgIC5hcHBfY2xrICAgICAgICAgICAoYXBwX2NsaykgLA0KKw0KKwkvLyBjb25maWd1cmF0aW9uIGNvbnRyb2wNCisgICAgICAgICAgLmNmZ190eF9lbmFibGUgICAgICAoY2ZnX3R4X2VuYWJsZSkgLCANCisgICAgICAgICAgLmNmZ19yeF9lbmFibGUgICAgICAoY2ZnX3J4X2VuYWJsZSkgLCANCisgICAgICAgICAgLmNmZ19zdG9wX2JpdCAgICAgICAoY2ZnX3N0b3BfYml0KSAgLCANCisgICAgICAgICAgLmNmZ19wcmlfbW9kICAgICAgICAoY2ZnX3ByaV9tb2QpICAgLCANCisJICAuY2ZnX2JhdWRfMTZ4ICAgICAgIChjZmdfYmF1ZF8xNngpICAsDQorDQorICAgIC8vIFRYRCBJbmZvcm1hdGlvbg0KKyAgICAgICAgICAudHhfZGF0YV9hdmFpbCAgICAgICh0eF9kYXRhX2F2YWlsKSAsDQorICAgICAgICAgIC50eF9yZCAgICAgICAgICAgICAgKHR4X3JkKSAgICAgICAgICwNCisgICAgICAgICAgLnR4X2RhdGEgICAgICAgICAgICAodHhfZGF0YSkgICAgICAgLA0KKyAgICAgICAgIA0KKw0KKyAgICAvLyBSWEQgSW5mb3JtYXRpb24NCisgICAgICAgICAgLnJ4X3JlYWR5ICAgICAgICAgICAocnhfcmVhZHkpICAgICAgLA0KKyAgICAgICAgICAucnhfd3IgICAgICAgICAgICAgIChyeF93cikgICAgICAgICAsDQorICAgICAgICAgIC5yeF9kYXRhICAgICAgICAgICAgKHJ4X2RhdGEpICAgICAgICwNCisNCisgICAgICAgLy8gU3RhdHVzIGluZm9ybWF0aW9uDQorICAgICAgICAgIC5mcm1fZXJyb3IgICAgICAgICAgKGZybV9lcnJvcikgLA0KKwkgIC5wYXJfZXJyb3IgICAgICAgICAgKHBhcl9lcnJvcikgLA0KKw0KKwkgIC5iYXVkX2Nsa18xNnggICAgICAgKGJhdWRfY2xrXzE2eCkgLA0KKwkgIC5saW5lX3Jlc2V0X24gICAgICAgKGxpbmVfcmVzZXRfbiksDQorDQorICAgICAgIC8vIExpbmUgSW50ZXJmYWNlDQorICAgICAgICAgIC5yeGQgICAgICAgICAgICAgICAgKHJ4ZCkgLA0KKyAgICAgICAgICAudHhkICAgICAgICAgICAgICAgICh0eGQpIA0KKw0KKyAgICAgKTsNCisNCisNCisNCit1YXJ0X21zZ19oYW5kbGVyIHVfbXNnICggIA0KKyAgICAgICAgICAucmVzZXRfbiAgICAgICAgICAgIChhcnN0X24gKSAsDQorICAgICAgICAgIC5zeXNfY2xrICAgICAgICAgICAgKGJhdWRfY2xrXzE2eCApICwNCisNCisNCisgICAgLy8gVUFSVC1UWCBJbmZvcm1hdGlvbg0KKyAgICAgICAgICAudHhfZGF0YV9hdmFpbCAgICAgICh0eF9kYXRhX2F2YWlsKSAsDQorICAgICAgICAgIC50eF9yZCAgICAgICAgICAgICAgKHR4X3JkKSAsDQorICAgICAgICAgIC50eF9kYXRhICAgICAgICAgICAgKHR4X2RhdGEpICwNCisgICAgICAgICANCisNCisgICAgLy8gVUFSVC1SWCBJbmZvcm1hdGlvbg0KKyAgICAgICAgICAucnhfcmVhZHkgICAgICAgICAgIChyeF9yZWFkeSkgLA0KKyAgICAgICAgICAucnhfd3IgICAgICAgICAgICAgIChyeF93cikgLA0KKyAgICAgICAgICAucnhfZGF0YSAgICAgICAgICAgIChyeF9kYXRhKSAsDQorDQorICAgICAgLy8gVG93YXJkcyBDb250cm9sIFVuaXQNCisgICAgICAgICAgLnJlZ19hZGRyICAgICAgICAgIChyZWdfYWRkciksDQorICAgICAgICAgIC5yZWdfd3IgICAgICAgICAgICAocmVnX3dyKSwNCisgICAgICAgICAgLnJlZ193ZGF0YSAgICAgICAgIChyZWdfd2RhdGEpLA0KKyAgICAgICAgICAucmVnX3JlcSAgICAgICAgICAgKHJlZ19yZXEpLA0KKyAgICAgICAgICAucmVnX2FjayAgICAgICAgICAgKHJlZ19hY2spLA0KKwkgIC5yZWdfcmRhdGEgICAgICAgICAocmVnX3JkYXRhKSANCisNCisgICAgICk7DQorDQorZW5kbW9kdWxlDQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvdWFydDJ3Yi9zcmMvdWFydF9tc2dfaGFuZGxlci52IGIvdmVyaWxvZy9ydGwvdWFydDJ3Yi9zcmMvdWFydF9tc2dfaGFuZGxlci52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ3MWZmODgKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC91YXJ0MndiL3NyYy91YXJ0X21zZ19oYW5kbGVyLnYKQEAgLTAsMCArMSwzNzYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFVBUlQgTWVzc2FnZSBIYW5kbGVyIE1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB1YXJ0MnNwaSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy91YXJ0MnNwaS8gICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFVhcnQgTWVzc2FnZSBIYW5kbGVyIGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbW9kdWxlIHVhcnRfbXNnX2hhbmRsZXIgKCAgCisgICAgICAgIHJlc2V0X24gLAorICAgICAgICBzeXNfY2xrICwKKworCisgICAgLy8gVUFSVC1UWCBJbmZvcm1hdGlvbgorICAgICAgICB0eF9kYXRhX2F2YWlsLAorICAgICAgICB0eF9yZCwKKyAgICAgICAgdHhfZGF0YSwKKyAgICAgICAgIAorCisgICAgLy8gVUFSVC1SWCBJbmZvcm1hdGlvbgorICAgICAgICByeF9yZWFkeSwKKyAgICAgICAgcnhfd3IsCisgICAgICAgIHJ4X2RhdGEsCisKKyAgICAgIC8vIFRvd2FyZHMgUmVnaXN0ZXIgSW50ZXJmYWNlCisgICAgICAgIHJlZ19hZGRyLAorICAgICAgICByZWdfd3IsICAKKyAgICAgICAgcmVnX3dkYXRhLAorICAgICAgICByZWdfcmVxLAorCXJlZ19hY2ssCisJcmVnX3JkYXRhCisKKyAgICAgKTsKKworCisvLyBEZWZpbmUgdGhlIE1lc3NhZ2UgSGFubGRlIFN0YXRlcworYGRlZmluZSBJRExFCSAgICAgICAgIDQnaDAKK2BkZWZpbmUgSURMRV9UWF9NU0cxCSA0J2gxCitgZGVmaW5lIElETEVfVFhfTVNHMgkgNCdoMgorYGRlZmluZSBSWF9DTURfUEhBU0UJIDQnaDMKK2BkZWZpbmUgQURSX1BIQVNFCSA0J2g0CitgZGVmaW5lIFdSX0RBVEFfUEhBU0UJIDQnaDUKK2BkZWZpbmUgU0VORF9XUl9SRVEJIDQnaDYKK2BkZWZpbmUgU0VORF9SRF9SRVEJIDQnaDcKK2BkZWZpbmUgU0VORF9SRF9EQVRBCSA0J2g4CitgZGVmaW5lIFRYX01TRyAgICAgICAgICAgNCdoOQorICAgICAKK2BkZWZpbmUgQlJFQUtfQ0hBUiAgICAgICA4J2gwQQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gR2xvYmFsIERlYworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2lucHV0ICAgICAgICByZXNldF9uICAgICAgICAgICAgICAgOyAvLyBsaW5lIHJlc2V0CitpbnB1dCAgICAgICAgc3lzX2NsayAgICAgICAgICAgICAgIDsgLy8gbGluZSBjbG9jaworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFVBUlQgVFhEIFBhdGgKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK291dHB1dCAgICAgICAgIHR4X2RhdGFfYXZhaWwgICAgICAgIDsgLy8gSW5kaWNhdGUgdmFsaWQgVFhEIERhdGEgYXZhaWxhYmxlCitvdXRwdXQgWzc6MF0gICB0eF9kYXRhICAgICAgICAgICAgICA7IC8vIFRYRCBEYXRhIHRvIGJlIHRyYW5zbWl0ZWQKK2lucHV0ICAgICAgICAgIHR4X3JkICAgICAgICAgICAgICAgIDsgLy8gSW5kaWNhdGUgVFhEIERhdGEgQmVlbiBSZWFkCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVUFSVCBSWEQgUGF0aAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorb3V0cHV0ICAgICAgICAgcnhfcmVhZHkgICAgICAgICAgICA7IC8vIEluZGljYXRlIFJlYWR5IHRvIGFjY2VwdCB0aGUgUmVhZCBEYXRhCitpbnB1dCBbNzowXSAgICByeF9kYXRhICAgICAgICAgICAgIDsgLy8gUlhEIERhdGEgCitpbnB1dCAgICAgICAgICByeF93ciAgICAgICAgICAgICAgIDsgLy8gVmFsaWQgUlhEIERhdGEKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENvbnRyb2wgVW5pdCBpbnRlcmZhY2UKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK291dHB1dCAgWzMxOjBdIHJlZ19hZGRyICAgICAgICAgICA7IC8vIE9wZXJlbmQtMQorb3V0cHV0ICBbMzE6MF0gcmVnX3dkYXRhICAgICAgICAgIDsgLy8gT3BlcmVuZC0yCitvdXRwdXQgICAgICAgICByZWdfcmVxICAgICAgICAgICAgOyAvLyBSZWdpc3RlciBSZXF1ZXN0CitvdXRwdXQgICAgICAgICByZWdfd3IgICAgICAgICAgICAgOyAvLyAxIC0+IHdyaXRlOyAwIC0+IHJlYWQKK2lucHV0ICAgICAgICAgIHJlZ19hY2sgICAgICAgICAgICA7IC8vIFJlZ2lzdGVyIEFjaworaW5wdXQgICBbMzE6MF0gcmVnX3JkYXRhICAgICAgICAgIDsKKworLy8gTG9jYWwgV2lyZS9SZWdpc3RlciBEZWNsZXJhdGlvbgorLy8KKy8vCityZWcgICAgICAgICAgICAgdHhfZGF0YV9hdmFpbCAgICAgIDsKK3JlZyBbNzowXSAgICAgICB0eF9kYXRhICAgICAgICAgICAgOworcmVnIFsxNio4LTE6MF0gIFR4TXNnQnVmICAgICAgICAgICA7IC8vIDE2IEJ5dGUgVHggTWVzc2FnZSBCdWZmZXIKK3JlZyAgWzQ6MF0gICAgICBUeE1zZ1NpemUgICAgICAgICAgOworcmVnICBbNDowXSAgICAgIFJ4TXNnQ250ICAgICAgICAgICA7IC8vIENvdW50IHRoZSBSZWNlaXZlIE1lc3NhZ2UgQ291bnQKK3JlZyAgWzM6MF0gICAgICBTdGF0ZSAgICAgICAgICAgICAgOworcmVnICBbMzowXSAgICAgIE5leHRTdGF0ZSAgICAgICAgICA7CityZWcgIFsxNTowXSAgICAgY21kICAgICAgICAgICAgICAgIDsgLy8gY29tbWFuZAorcmVnICBbMzE6MF0gICAgIHJlZ19hZGRyICAgICAgICAgICA7IC8vIHJlZ19hZGRyCityZWcgIFszMTowXSAgICAgcmVnX3dkYXRhICAgICAgICAgIDsgLy8gcmVnX2FkZHIKK3JlZyAgICAgICAgICAgICByZWdfd3IgICAgICAgICAgICAgOyAvLyAxIC0+IFJlZyBXcml0ZSByZXF1ZXN0LCAwIC0+IFJlYWQgUmVxdWVzdGlvbgorcmVnICAgICAgICAgICAgIHJlZ19yZXEgICAgICAgICAgICA7IC8vIDEgLT4gUmVnaXN0ZXIgcmVxdWVzdAorCisKK3dpcmUgcnhfcmVhZHkgPSAxOyAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBVQVJUIE1lc3NhZ2UgSGFubGRpbmcgU3RlcHMKKyoKKyogIDEuIE9uIFJlc2V0IE9yIFVua25vd24gY29tbWFuZCwgU2VuZCB0aGUgRGVmYXVsdCBNZXNzYWdlCisqICAgICBTZWxlY3QgT3B0aW9uOgorKiAgICAgd3IgPGFkZHI+IDxkYXRhPgorKiAgICAgcmQgPGFkZHI+CisqICAyLiBXYWl0IGZvciBVc2VyIGNvbW1hbmQgPHdyL3JkPiAKKyogIDMuIE9uIDx3cj4gY29tbWFuZCBtb3ZlIHRvIHdyaXRlIGFkZHJlc3MgcGhhc2U7CisqICBwaGFzZQorKiAgICAgICBBLiBBZnRlciB3cml0ZSBhZGRyZXNzIHBoYXNlIG1vdmUgdG8gd3JpdGUgZGF0YSBwaGFzZQorKiAgICAgICBCLiBBZnRlciB3cml0ZSBkYXRhIHBoYXNlLCBvbmNlIHVzZXIgcHJlc3MgXHIgY29tbWFuZCA7IHNlbmQgcmVnaXN0ZXIgcmVxCisqICAgICAgICAgIGFuZCB3cml0ZSByZXF1ZXN0IGFuZCBhZGRyZXNzICsgZGF0YSAKKyogICAgICAgQy4gT24gcmVjZWl2aW5nIHJlZ2lzdGVyIGFjayByZXNwb25zZTsgc2VuZCA8c3VjY2Vzcz4gbWVzc2FnZSBiYWNrIGFuZCBtb3ZlCisqICAgICAgICAgIHRvIHN0YXRlLTIKKyogIDMuICBPbiA8cmQ+IGNvbW1hbmQgbW92ZSB0byByZWFkIGFkZHJlc3MgcGhhc2U7CisqICAgICAgIEEuIEFmdGVyIHJlYWQgYWRkcmVzcyBwaGFzZSAsIG9uY2UgdXNlciBwcmVzcyAnXHInIGNvbW1hbmQ7IHNlbmQKKyogICAgICAgICAgcmVnaXN0ZXIgcmVxICwgcmVhZCByZXF1ZXN0IAorKiAgICAgICBDLiBPbiByZWNlaXZpbmcgcmVnaXN0ZXIgYWNrIHJlc3BvbnNlOyBzZW5kIDxyZXNwb25zZSArIHJlYWRfZGF0YT4gbWVzc2FnZSBhbmQgbW92ZQorKiAgICAgICAgICB0byBzdGF0ZS0yCisqICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworYWx3YXlzIEAobmVnZWRnZSByZXNldF9uIG9yIHBvc2VkZ2Ugc3lzX2NsaykKK2JlZ2luCisgICBpZihyZXNldF9uID09IDEnYjApIGJlZ2luCisgICAgICB0eF9kYXRhX2F2YWlsIDw9IDA7CisgICAgICByZWdfcmVxICAgICAgIDw9IDA7CisgICAgICByZWdfYWRkciAgICAgICA8PSAwOworICAgICAgcmVnX3dyICAgICAgICA8PSAxJ2IwOyAvLyBSZWFkIHJlcXVlc3QKKyAgICAgIHJlZ193ZGF0YSAgICAgPD0gMDsKKyAgICAgIFN0YXRlICAgICAgICAgPD0gYElETEU7CisgICAgICBOZXh0U3RhdGUgICAgIDw9IGBJRExFOworICAgZW5kIGVsc2UgYmVnaW4KKyAgIGNhc2UoU3RhdGUpCisgICAgICAvLyBTZW5kIERlZmF1bHQgTWVzc2FnZQorICAgICAgYElETEU6IGJlZ2luCisgICAJICBUeE1zZ0J1ZiAgICAgIDw9ICJDb21tYW5kIEZvcm1hdDpcbiI7ICAvLyBBbGlnbiB0byAxNiBjaGFyYWN0ZXIgZm9ybWF0IGJ5IGFwcGVuZGluZyBzcGFjZSBjaGFyYWN0ZXIKKyAgICAgICAgICBUeE1zZ1NpemUgICAgIDw9IDE2OworCSAgdHhfZGF0YV9hdmFpbCA8PSAwOworCSAgU3RhdGUgICAgICAgICA8PSBgVFhfTVNHOworCSAgTmV4dFN0YXRlICAgICA8PSBgSURMRV9UWF9NU0cxOworICAgICAgIGVuZAorCisgICAgICAvLyBTZW5kIERlZmF1bHQgTWVzc2FnZSAoQ29udGQuLikKKyAgICAgIGBJRExFX1RYX01TRzE6IGJlZ2luCisJICAgVHhNc2dCdWYgICAgICA8PSAid20gPGFkPiA8ZGF0YT5cbiAiOyAvLyBBbGlnbiB0byAxNiBjaGFyYWN0ZXIgZm9ybWF0IGJ5IGFwcGVuZGluZyBzcGFjZSBjaGFyYWN0ZXIgCisgICAgICAgICAgIFR4TXNnU2l6ZSAgICAgPD0gMTU7CisJICAgdHhfZGF0YV9hdmFpbCA8PSAwOworCSAgIFN0YXRlICAgICAgICAgPD0gYFRYX01TRzsKKwkgICBOZXh0U3RhdGUgICAgIDw9IGBJRExFX1RYX01TRzI7CisgICAgICAgIGVuZAorCisgICAgICAvLyBTZW5kIERlZmF1bHQgTWVzc2FnZSAoQ29udGQuLikKKyAgICAgIGBJRExFX1RYX01TRzI6IGJlZ2luCisJICAgVHhNc2dCdWYgICAgICA8PSAicm0gPGFkPlxuPj4gICAgICAiOyAgLy8gQWxpZ24gdG8gMTYgY2hhcmFjdGVyIGZvcm1hdCBieSBhcHBlbmRpbmcgc3BhY2UgY2hhcmFjdGVyCisgICAgICAgICAgIFR4TXNnU2l6ZSAgICAgPD0gMTA7CisJICAgdHhfZGF0YV9hdmFpbCA8PSAwOworCSAgIFJ4TXNnQ250ICAgICAgPD0gMDsKKwkgICBTdGF0ZSAgICAgICAgIDw9IGBUWF9NU0c7CisJICAgTmV4dFN0YXRlICAgICA8PSBgUlhfQ01EX1BIQVNFOworICAgICAgZW5kCisKKyAgICAgICAvLyBXYWl0IGZvciBSZXNwb25zZQorICAgIGBSWF9DTURfUEhBU0U6IGJlZ2luCisJaWYocnhfd3IgPT0gMSkgYmVnaW4KKwkgICAvL2lmKFJ4TXNnQ250ID09IDAgJiYgcnhfZGF0YSA9PSAiICIpIGJlZ2luIC8vIElnbm9yZSB0aGUgc2FtZQorCSAgIGlmKFJ4TXNnQ250ID09IDAgJiYgcnhfZGF0YSA9PSA4J2gyMCkgYmVnaW4gLy8gSWdub3JlIHRoZSBzYW1lCisJICAgLy9lbmQgZWxzZSBpZihSeE1zZ0NudCA+IDAgJiYgcnhfZGF0YSA9PSAiICIpIGJlZ2luIC8vIENoZWNrIHRoZSBjb21tYW5kCisJICAgZW5kIGVsc2UgaWYoUnhNc2dDbnQgPiAwICYmIHJ4X2RhdGEgPT0gOCdoMjApIGJlZ2luIC8vIENoZWNrIHRoZSBjb21tYW5kCisJICAgICAgcmVnX2FkZHIgPD0gMDsKKwkgICAgICBSeE1zZ0NudCA8PSAwOworCSAgICAgLy9pZihjbWQgPT0gIndtIikgYmVnaW4KKwkgICAgIGlmKGNtZCA9PSAxNidoNzc2RCkgYmVnaW4KKwkJIFN0YXRlIDw9IGBBRFJfUEhBU0U7CisJICAgICAgLy9lbmQgZWxzZSBpZihjbWQgPT0gInJtIikgYmVnaW4KKwkgICAgIGVuZCBlbHNlIGlmKGNtZCA9PSAxNidoNzI2RCkgYmVnaW4KKworCQkgU3RhdGUgPD0gYEFEUl9QSEFTRTsKKyAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbiAvLyBVbmtub3cgY29tbWFuZAorCSAgICAgICAgU3RhdGUgICAgICAgICA8PSBgSURMRTsKKyAgICAgICAgICAgICBlbmQKKwkgICAvL2VuZCBlbHNlIGlmKHJ4X2RhdGEgPT0gIlxuIikgYmVnaW4gLy8gRXJyb3IgU3RhdGUKKwkgICBlbmQgZWxzZSBpZihyeF9kYXRhID09IGBCUkVBS19DSEFSKSBiZWdpbiAvLyBFcnJvciBTdGF0ZQorCSAgICAgIFN0YXRlICAgICAgICAgPD0gYElETEU7CisJICAgZW5kIAorCSAgIGVsc2UgYmVnaW4KKyAgICAgICAgICAgICAgY21kIDw9ICAoY21kIDw8IDgpIHwgcnhfZGF0YSA7CisJICAgICAgUnhNc2dDbnQgPD0gUnhNc2dDbnQrMTsKKyAgICAgICAgICAgZW5kCisgICAgICAgIGVuZCAKKyAgICAgZW5kCisgICAgICAgLy8gV3JpdGUgQWRkcmVzcyBQaGFzZSAKKyAgICBgQURSX1BIQVNFOiBiZWdpbgorCWlmKHJ4X3dyID09IDEpIGJlZ2luCisJICAgLy9pZihSeE1zZ0NudCA9PSAwICYmIHJ4X2RhdGEgPT0gIiAiKSBiZWdpbiAvLyBJZ25vcmUgdGhlIFNwYWNlIGNoYXJhY3RlcgorCSAgIGlmKFJ4TXNnQ250ID09IDAgJiYgcnhfZGF0YSA9PSA4J2gyMCkgYmVnaW4gLy8gSWdub3JlIHRoZSBTcGFjZSBjaGFyYWN0ZXIKKwkgICBlbmQgZWxzZSBpZihSeE1zZ0NudCA+IDAgJiYgKHJ4X2RhdGEgPT0gOCdoMjAgfHwgcnhfZGF0YSA9PSBgQlJFQUtfQ0hBUikpIGJlZ2luIC8vIE1vdmUgdG8gd3JpdGUgZGF0YSBwaGFzZQorCSAgICAgLy9pZihSeE1zZ0NudCA+IDAgJiYgIndtIiAmJiByeF9kYXRhID09ICIgIikgYmVnaW4gLy8gTW92ZSB0byB3cml0ZSBkYXRhIHBoYXNlCisJICAgICAgIGlmKGNtZCA9PSAxNidoNzc2RCAmJiByeF9kYXRhID09IDgnaDIwKSBiZWdpbiAvLyBNb3ZlIHRvIHdyaXRlIGRhdGEgcGhhc2UKKwkgICAgICAgICAgIHJlZ193ZGF0YSAgICAgPD0gMDsKKwkgICAgICAgICAgIFN0YXRlICAgICAgICAgPD0gYFdSX0RBVEFfUEhBU0U7CisJICAgLy8gIGVuZCBlbHNlIGlmKFJ4TXNnQ250ID4gMCAmJiAicm0iICYmIHJ4X2RhdGEgPT0gIlxuIikgYmVnaW4gLy8gTW92ZSB0byByZWFkIGRhdGEgcGhhc2UKKwkgICAgICAgZW5kIGVsc2UgaWYoY21kID09IDE2J2g3MjZEICYmIHJ4X2RhdGEgPT0gYEJSRUFLX0NIQVIpIGJlZ2luIC8vIE1vdmUgdG8gcmVhZCBkYXRhIHBoYXNlCisJICAgICAgICAgICByZWdfd3IgICAgICAgIDw9IDEnYjA7IC8vIFJlYWQgcmVxdWVzdAorCSAgICAgICAgICAgcmVnX3JlcSAgICAgICA8PSAxJ2IxOyAvLyBSZWcgUmVxdWVzdAorCSAgICAgICAgICAgU3RhdGUgICAgICAgICA8PSBgU0VORF9SRF9SRVE7CisgICAgICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4gLy8gVW5rbm93IGNvbW1hbmQKKwkgICAgICAgICAgU3RhdGUgICAgICAgICA8PSBgSURMRTsKKyAgICAgICAgICAgICAgIGVuZAorCSAgIC8vZW5kIGVsc2UgaWYocnhfZGF0YSA9PSAiXG4iKSBiZWdpbiAvLyBFcnJvciBTdGF0ZQorCSAgIGVuZCBlbHNlIGlmKHJ4X2RhdGEgPT0gYEJSRUFLX0NIQVIpIGJlZ2luIC8vIEVycm9yIFN0YXRlCisJICAgICAgU3RhdGUgICAgICAgICA8PSBgSURMRTsKKwkgICBlbmQgZWxzZSBiZWdpbiAKKyAgICAgICAgICAgICAgcmVnX2FkZHIgPD0gKHJlZ19hZGRyIDw8IDQpIHwgY2hhcjJoZXgocnhfZGF0YSk7IAorCSAgICAgIFJ4TXNnQ250IDw9IFJ4TXNnQ250KzE7CisgICAgICAgICAgIGVuZAorCWVuZAorICAgICBlbmQKKyAgICAvLyBXcml0ZSBEYXRhIFBoYXNlIAorICAgIGBXUl9EQVRBX1BIQVNFOiBiZWdpbgorCWlmKHJ4X3dyID09IDEpIGJlZ2luCisJICAgLy9pZihyeF9kYXRhID09ICIgIikgYmVnaW4gLy8gSWdub3JlIHRoZSBTcGFjZSBjaGFyYWN0ZXIKKwkgICBpZihyeF9kYXRhID09IDgnaDIwKSBiZWdpbiAvLyBJZ25vcmUgdGhlIFNwYWNlIGNoYXJhY3RlcgorCSAgIC8vZW5kIGVsc2UgaWYocnhfZGF0YSA9PSAiXG4iKSBiZWdpbiAvLyBFcnJvciBTdGF0ZQorCSAgIGVuZCBlbHNlIGlmKHJ4X2RhdGEgPT0gYEJSRUFLX0NIQVIpIGJlZ2luIC8vIEVycm9yIFN0YXRlCisJICAgICAgU3RhdGUgICAgICAgICAgIDw9IGBTRU5EX1dSX1JFUTsKKwkgICAgICByZWdfd3IgICAgICAgICAgPD0gMSdiMTsgLy8gV3JpdGUgcmVxdWVzdAorCSAgICAgIHJlZ19yZXEgICAgICAgICA8PSAxJ2IxOworCSAgIGVuZCBlbHNlIGJlZ2luIC8vIEEgdG8gRgorICAgICAgICAgICAgICAgICByZWdfd2RhdGEgPD0gKHJlZ193ZGF0YSA8PCA0KSB8IGNoYXIyaGV4KHJ4X2RhdGEpOyAKKyAgICAgICAgICAgZW5kCisJZW5kCisgICAgIGVuZAorICAgIGBTRU5EX1dSX1JFUTogYmVnaW4KKwlpZihyZWdfYWNrKSAgYmVnaW4KKwkgICByZWdfcmVxICAgICAgIDw9IDEnYjA7CisJICAgVHhNc2dCdWYgICAgICA8PSAiY21kIHN1Y2Nlc3Ncbj4+ICAiOyAvLyBBbGlnbiB0byAxNiBjaGFyYWN0ZXIgZm9ybWF0IGJ5IGFwcGVuZGluZyBzcGFjZSBjaGFyYWN0ZXIgCisgICAgICAgICAgIFR4TXNnU2l6ZSAgICAgPD0gMTQ7CisJICAgdHhfZGF0YV9hdmFpbCA8PSAwOworCSAgIFN0YXRlICAgICAgICAgPD0gYFRYX01TRzsKKwkgICBOZXh0U3RhdGUgICAgIDw9IGBSWF9DTURfUEhBU0U7CisgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBgU0VORF9SRF9SRVE6IGJlZ2luCisJaWYocmVnX2FjaykgIGJlZ2luCisJICAgcmVnX3JlcSAgICAgICA8PSAxJ2IwOworCSAgIFR4TXNnQnVmICAgICAgPD0gIlJlc3BvbnNlOiAgICAgICAiOyAvLyBBbGlnbiB0byAxNiBjaGFyYWN0ZXIgZm9ybWF0IGJ5IGFwcGVuZGluZyBzcGFjZSBjaGFyYWN0ZXIgCisgICAgICAgICAgIFR4TXNnU2l6ZSAgICAgPD0gMTA7CisJICAgdHhfZGF0YV9hdmFpbCA8PSAwOworCSAgIFN0YXRlICAgICAgICAgPD0gYFRYX01TRzsKKwkgICBOZXh0U3RhdGUgICAgIDw9IGBTRU5EX1JEX0RBVEE7CisgICAgICAgZW5kCisgICAgZW5kCisgICAgYFNFTkRfUkRfREFUQTogYmVnaW4gLy8gV2FpdCBmb3IgT3BlcmF0aW9uIENvbXBsZXRpb24KKwkgICBUeE1zZ0J1ZlsxNio4LTE6MTUqOF0gPD0gaGV4MmNoYXIocmVnX3JkYXRhWzMxOjI4XSk7CisJICAgVHhNc2dCdWZbMTUqOC0xOjE0KjhdIDw9IGhleDJjaGFyKHJlZ19yZGF0YVsyNzoyNF0pOworCSAgIFR4TXNnQnVmWzE0KjgtMToxMyo4XSA8PSBoZXgyY2hhcihyZWdfcmRhdGFbMjM6MjBdKTsKKwkgICBUeE1zZ0J1ZlsxMyo4LTE6MTIqOF0gPD0gaGV4MmNoYXIocmVnX3JkYXRhWzE5OjE2XSk7CisJICAgVHhNc2dCdWZbMTIqOC0xOjExKjhdIDw9IGhleDJjaGFyKHJlZ19yZGF0YVsxNToxMl0pOworCSAgIFR4TXNnQnVmWzExKjgtMToxMCo4XSA8PSBoZXgyY2hhcihyZWdfcmRhdGFbMTE6OF0pOworCSAgIFR4TXNnQnVmWzEwKjgtMTo5KjhdICA8PSBoZXgyY2hhcihyZWdfcmRhdGFbNzo0XSk7CisJICAgVHhNc2dCdWZbOSo4LTE6OCo4XSAgIDw9IGhleDJjaGFyKHJlZ19yZGF0YVszOjBdKTsKKwkgICBUeE1zZ0J1Zls4KjgtMTo3KjhdICAgPD0gIlxuIjsKKyAgICAgICAgICAgVHhNc2dTaXplICAgICA8PSA5OworCSAgIHR4X2RhdGFfYXZhaWwgPD0gMDsKKwkgICBTdGF0ZSAgICAgICAgIDw9IGBUWF9NU0c7CisJICAgTmV4dFN0YXRlICAgICA8PSBgUlhfQ01EX1BIQVNFOworICAgICBlbmQKKworICAgICAgIC8vIFNlbmQgRGVmYXVsdCBNZXNzYWdlIChDb250ZC4uKQorICAgIGBUWF9NU0c6IGJlZ2luCisJICAgdHhfZGF0YV9hdmFpbCAgICA8PSAxOworCSAgIHR4X2RhdGEgICAgICAgICAgPD0gVHhNc2dCdWZbMTYqOC0xOjE1KjhdOworCSAgIGlmKFR4TXNnU2l6ZSA9PSAwKSBiZWdpbgorCSAgICAgIHR4X2RhdGFfYXZhaWwgPD0gMDsKKwkgICAgICBTdGF0ZSAgICAgICAgIDw9IE5leHRTdGF0ZTsKKyAgICAgICAgICAgZW5kIGVsc2UgaWYodHhfcmQpIGJlZ2luCisgICAJICAgICAgVHhNc2dCdWYgICAgICA8PSBUeE1zZ0J1ZiA8PCA4OworICAgICAgICAgICAgICBUeE1zZ1NpemUgICAgIDw9IFR4TXNnU2l6ZSAtMTsKKyAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgZW5kY2FzZQorICAgZW5kCitlbmQKKworCisvLyBDaGFyYWN0ZXIgdG8gaGV4IG51bWJlcgorZnVuY3Rpb24gWzM6MF0gY2hhcjJoZXg7CitpbnB1dCBbNzowXSBkYXRhX2luOworY2FzZSAoZGF0YV9pbikKKyAgICAgOCdoMzA6CWNoYXIyaGV4ID0gNCdoMDsgLy8gY2hhcmFjdGVyICcwJyAKKyAgICAgOCdoMzE6CWNoYXIyaGV4ID0gNCdoMTsgLy8gY2hhcmFjdGVyICcxJworICAgICA4J2gzMjoJY2hhcjJoZXggPSA0J2gyOyAvLyBjaGFyYWN0ZXIgJzInCisgICAgIDgnaDMzOgljaGFyMmhleCA9IDQnaDM7IC8vIGNoYXJhY3RlciAnMycKKyAgICAgOCdoMzQ6CWNoYXIyaGV4ID0gNCdoNDsgLy8gY2hhcmFjdGVyICc0JyAKKyAgICAgOCdoMzU6CWNoYXIyaGV4ID0gNCdoNTsgLy8gY2hhcmFjdGVyICc1JworICAgICA4J2gzNjoJY2hhcjJoZXggPSA0J2g2OyAvLyBjaGFyYWN0ZXIgJzYnCisgICAgIDgnaDM3OgljaGFyMmhleCA9IDQnaDc7IC8vIGNoYXJhY3RlciAnNycKKyAgICAgOCdoMzg6CWNoYXIyaGV4ID0gNCdoODsgLy8gY2hhcmFjdGVyICc4JworICAgICA4J2gzOToJY2hhcjJoZXggPSA0J2g5OyAvLyBjaGFyYWN0ZXIgJzknCisgICAgIDgnaDQxOgljaGFyMmhleCA9IDQnaEE7IC8vIGNoYXJhY3RlciAnQScKKyAgICAgOCdoNDI6CWNoYXIyaGV4ID0gNCdoQjsgLy8gY2hhcmFjdGVyICdCJworICAgICA4J2g0MzoJY2hhcjJoZXggPSA0J2hDOyAvLyBjaGFyYWN0ZXIgJ0MnCisgICAgIDgnaDQ0OgljaGFyMmhleCA9IDQnaEQ7IC8vIGNoYXJhY3RlciAnRCcKKyAgICAgOCdoNDU6CWNoYXIyaGV4ID0gNCdoRTsgLy8gY2hhcmFjdGVyICdFJworICAgICA4J2g0NjoJY2hhcjJoZXggPSA0J2hGOyAvLyBjaGFyYWN0ZXIgJ0YnCisgICAgIDgnaDYxOgljaGFyMmhleCA9IDQnaEE7IC8vIGNoYXJhY3RlciAnYScKKyAgICAgOCdoNjI6CWNoYXIyaGV4ID0gNCdoQjsgLy8gY2hhcmFjdGVyICdiJworICAgICA4J2g2MzoJY2hhcjJoZXggPSA0J2hDOyAvLyBjaGFyYWN0ZXIgJ2MnCisgICAgIDgnaDY0OgljaGFyMmhleCA9IDQnaEQ7IC8vIGNoYXJhY3RlciAnZCcKKyAgICAgOCdoNjU6CWNoYXIyaGV4ID0gNCdoRTsgLy8gY2hhcmFjdGVyICdlJworICAgICA4J2g2NjoJY2hhcjJoZXggPSA0J2hGOyAvLyBjaGFyYWN0ZXIgJ2YnCisgICAgICBkZWZhdWx0IDogIGNoYXIyaGV4ID0gNCdoRjsKKyAgIGVuZGNhc2UgCitlbmRmdW5jdGlvbgorCisvLyBIZXggdG8gQXNjaSBDaGFyYWN0ZXIgCitmdW5jdGlvbiBbNzowXSBoZXgyY2hhcjsKK2lucHV0IFszOjBdIGRhdGFfaW47CitjYXNlIChkYXRhX2luKQorICAgICA0J2gwOgloZXgyY2hhciA9IDgnaDMwOyAvLyBjaGFyYWN0ZXIgJzAnIAorICAgICA0J2gxOgloZXgyY2hhciA9IDgnaDMxOyAvLyBjaGFyYWN0ZXIgJzEnCisgICAgIDQnaDI6CWhleDJjaGFyID0gOCdoMzI7IC8vIGNoYXJhY3RlciAnMicKKyAgICAgNCdoMzoJaGV4MmNoYXIgPSA4J2gzMzsgLy8gY2hhcmFjdGVyICczJworICAgICA0J2g0OgloZXgyY2hhciA9IDgnaDM0OyAvLyBjaGFyYWN0ZXIgJzQnIAorICAgICA0J2g1OgloZXgyY2hhciA9IDgnaDM1OyAvLyBjaGFyYWN0ZXIgJzUnCisgICAgIDQnaDY6CWhleDJjaGFyID0gOCdoMzY7IC8vIGNoYXJhY3RlciAnNicKKyAgICAgNCdoNzoJaGV4MmNoYXIgPSA4J2gzNzsgLy8gY2hhcmFjdGVyICc3JworICAgICA0J2g4OgloZXgyY2hhciA9IDgnaDM4OyAvLyBjaGFyYWN0ZXIgJzgnCisgICAgIDQnaDk6CWhleDJjaGFyID0gOCdoMzk7IC8vIGNoYXJhY3RlciAnOScKKyAgICAgNCdoQToJaGV4MmNoYXIgPSA4J2g0MTsgLy8gY2hhcmFjdGVyICdBJworICAgICA0J2hCOgloZXgyY2hhciA9IDgnaDQyOyAvLyBjaGFyYWN0ZXIgJ0InCisgICAgIDQnaEM6CWhleDJjaGFyID0gOCdoNDM7IC8vIGNoYXJhY3RlciAnQycKKyAgICAgNCdoRDoJaGV4MmNoYXIgPSA4J2g0NDsgLy8gY2hhcmFjdGVyICdEJworICAgICA0J2hFOgloZXgyY2hhciA9IDgnaDQ1OyAvLyBjaGFyYWN0ZXIgJ0UnCisgICAgIDQnaEY6CWhleDJjaGFyID0gOCdoNDY7IC8vIGNoYXJhY3RlciAnRicKKyAgIGVuZGNhc2UgCitlbmRmdW5jdGlvbgorZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC91YXJ0X2kyYy9zcmMvdWFydF9pMmNfdG9wLnN2IGIvdmVyaWxvZy9ydGwvdWFydF9pMmMvc3JjL3VhcnRfaTJjX3RvcC5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGI2OGM1Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvdWFydF9pMmMvc3JjL3VhcnRfaTJjX3RvcC5zdgpAQCAtMCwwICsxLDE3OSBAQAorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFVBUlQgQ09SRSB3aXRoIFRYL1JYIDE2IEJ5dGUgQnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEkyQyBNYXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uOiBUaGlzIG1vZHVsZSBpbnRlZ2FydGUgVWFydCBhbmQgSTJDIE1hc3RlciAgICAgIC8vLy8KKy8vLy8gICAgQm90aCB0aGVzZSBibG9jayBzaGFyZSBjb21tb24gdHdvIHBpbnMsIGVmZmVjdGx5IG9ubHkgICAgIC8vLy8KKy8vLy8gICAgb25lIGJsb2NrIGFjdGl2ZSBhdCB0aW1lLiBUaGlzIGlzIGR1ZSB0byB0b3AtbGV2ZWwgcGluICAgIC8vLy8KKy8vLy8gICAgcmVzdHJpY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbW9kdWxlIHVhcnRfaTJjX3RvcCAKKworICAgICAoICAKKworICAgaW5wdXQgbG9naWMgICAgICAgICB1YXJ0X3JzdG4gICwgLy8gYXN5bmMgcmVzZXQKKyAgIGlucHV0IGxvZ2ljICAgICAgICAgaTJjX3JzdG4gICwgLy8gYXN5bmMgcmVzZXQKKyAgIGlucHV0IGxvZ2ljICAgICAgICAgYXBwX2NsayAsCisgICBpbnB1dCBsb2dpYyAgICAgICAgIHVhcnRfaTJjX3NlbCwgLy8gVWFydCBPciBJMkMgSW50ZXJmYWNlIFNlbGVjdAorCisgICAgICAgIC8vIFJlZyBCdXMgSW50ZXJmYWNlIFNpZ25hbAorICAgaW5wdXQgbG9naWMgICAgICAgICByZWdfY3MsCisgICBpbnB1dCBsb2dpYyAgICAgICAgIHJlZ193ciwKKyAgIGlucHV0IGxvZ2ljIFszOjBdICAgcmVnX2FkZHIsCisgICBpbnB1dCBsb2dpYyBbNzowXSAgIHJlZ193ZGF0YSwKKyAgIGlucHV0IGxvZ2ljICAgICAgICAgcmVnX2JlLAorCisgICAgICAgIC8vIE91dHB1dHMKKyAgIG91dHB1dCBsb2dpYyBbNzowXSAgcmVnX3JkYXRhLAorICAgb3V0cHV0IGxvZ2ljICAgICAgICByZWdfYWNrLAorCisgICAgICAgLy8gUGFkIENvbnRyb2wKKyAgIGlucHV0ICBsb2dpYyBbMTowXSAgaW9faW4sCisgICBvdXRwdXQgbG9naWMgWzE6MF0gIGlvX291dCwKKyAgIG91dHB1dCBsb2dpYyBbMTowXSAgaW9fb2ViCisKKyAgICAgKTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyB1YXJ0IGludGVyZmFjZQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitsb2dpYyAgICAgICAgICAgICB1YXJ0X3J4ZCAgICAgICAgICAgICAgICAgIDsgCitsb2dpYyAgICAgICAgICAgICB1YXJ0X3R4ZCAgICAgICAgICAgICAgICAgIDsKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gaTJjIGludGVyZmFjZQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworbG9naWMgICAgICAgICAgICAgc2NsX3BhZF9pICAgICAgICAgICAgICAgICA7IC8vIFNDTC1saW5lIGlucHV0Citsb2dpYyAgICAgICAgICAgICBzY2xfcGFkX28gICAgICAgICAgICAgICAgIDsgLy8gU0NMLWxpbmUgb3V0cHV0IChhbHdheXMgMSdiMCkKK2xvZ2ljICAgICAgICAgICAgIHNjbF9wYWRfb2VuX28gICAgICAgICAgICAgOyAvLyBTQ0wtbGluZSBvdXRwdXQgZW5hYmxlIChhY3RpdmUgbG93KQorCitsb2dpYyAgICAgICAgICAgICBzZGFfcGFkX2kgICAgICAgICAgICAgICAgIDsgLy8gU0RBLWxpbmUgaW5wdXQKK2xvZ2ljICAgICAgICAgICAgIHNkYV9wYWRfbyAgICAgICAgICAgICAgICAgOyAvLyBTREEtbGluZSBvdXRwdXQgKGFsd2F5cyAxJ2IwKQorbG9naWMgICAgICAgICAgICAgc2RhX3BhZG9lbl9vICAgICAgICAgICAgICA7IC8vIFNEQS1saW5lIG91dHB1dCBlbmFibGUgKGFjdGl2ZSBsb3cpCisKKworCithc3NpZ24gIGlvX29lYlswXSAgPSAgKHVhcnRfaTJjX3NlbCA9PSAwKSA/IDEnYjEgOiBzY2xfcGFkX29lbl9vIDsgLy8gVWFydCBSWAorYXNzaWduICB1YXJ0X3J4ZCAgID0gICh1YXJ0X2kyY19zZWwgPT0gMCkgPyBpb19pblswXTogMSdiMDsKK2Fzc2lnbiAgc2NsX3BhZF9pICA9ICAodWFydF9pMmNfc2VsID09IDEpID8gaW9faW5bMF06IDEnYjA7Cithc3NpZ24gIGlvX291dFswXSAgPSAgKHVhcnRfaTJjX3NlbCA9PSAwKSA/IDEnYjAgOiBzY2xfcGFkX28gOworCithc3NpZ24gIGlvX29lYlsxXSA9ICAodWFydF9pMmNfc2VsID09IDApID8gMSdiMCA6IHNkYV9wYWRvZW5fbyA7IC8vIFVhcnQgVFggJiBJMkMgQ2xvY2sKK2Fzc2lnbiAgaW9fb3V0WzFdICA9ICh1YXJ0X2kyY19zZWwgPT0gMCkgPyB1YXJ0X3R4ZDogc2RhX3BhZF9vIDsKK2Fzc2lnbiAgc2RhX3BhZF9pID0gICh1YXJ0X2kyY19zZWwgPT0gMSkgPyBpb19pblsxXSA6IDEnYjA7CisKK2xvZ2ljIFs3OjBdICAgcmVnX3VhcnRfcmRhdGE7Citsb2dpYyBbNzowXSAgIHJlZ19pMmNfcmRhdGE7Citsb2dpYyAgICAgICAgIHJlZ191YXJ0X2FjazsKK2xvZ2ljICAgICAgICAgcmVnX2kyY19hY2s7CisKKworYXNzaWduIHJlZ19yZGF0YSA9ICh1YXJ0X2kyY19zZWwgPT0gMCkgPyByZWdfdWFydF9yZGF0YSA6IHJlZ19pMmNfcmRhdGE7Cithc3NpZ24gcmVnX2FjayAgID0gKHVhcnRfaTJjX3NlbCA9PSAwKSA/IHJlZ191YXJ0X2FjayAgIDogcmVnX2kyY19hY2s7CisKK3VhcnRfY29yZSAgdV91YXJ0X2NvcmUgKCAgCisKKyAgICAgICAgLmFyc3RfbiAgICAgICh1YXJ0X3JzdG4gICAgICAgICksIC8vIGFzeW5jIHJlc2V0CisgICAgICAgIC5hcHBfY2xrICAgICAoYXBwX2NsayAgICAgICAgICApLAorCisgICAgICAgIC8vIFJlZyBCdXMgSW50ZXJmYWNlIFNpZ25hbAorICAgICAgICAucmVnX2NzICAgICAgKHJlZ19jcyAgICAgICAgICAgKSwKKyAgICAgICAgLnJlZ193ciAgICAgIChyZWdfd3IgICAgICAgICAgICksCisgICAgICAgIC5yZWdfYWRkciAgICAocmVnX2FkZHJbMzowXSAgICApLAorICAgICAgICAucmVnX3dkYXRhICAgKHJlZ193ZGF0YVs3OjBdICAgKSwKKyAgICAgICAgLnJlZ19iZSAgICAgIChyZWdfYmUgICAgICAgICAgICksCisKKyAgICAgICAgLy8gT3V0cHV0cworICAgICAgICAucmVnX3JkYXRhICAgKHJlZ191YXJ0X3JkYXRhWzc6MF0pLAorICAgICAgICAucmVnX2FjayAgICAgKHJlZ191YXJ0X2FjayAgICAgKSwKKworICAgICAgICAgICAgLy8gUGFkIENvbnRyb2wKKyAgICAgICAgLnJ4ZCAgICAgICAgICAodWFydF9yeGQgICAgICAgICksCisgICAgICAgIC50eGQgICAgICAgICAgKHVhcnRfdHhkICAgICAgICApCisgICAgICk7CisKK2kyY21fdG9wICB1X2kyY20gKAorCS8vIHdpc2hib25lIHNpZ25hbHMKKwkud2JfY2xrX2kgICAgICAoYXBwX2NsayAgICAgICAgKSwgLy8gbWFzdGVyIGNsb2NrIGlucHV0CisJLnNyZXNldG4gICAgICAgKDEnYjEgICAgICAgICAgICksIC8vIHN5bmNocm9ub3VzIHJlc2V0CisJLmFyZXNldG4gICAgICAgKGkyY19yc3RuICAgICAgICksIC8vIGFzeW5jaHJvbm91cyByZXNldAorCS53Yl9hZHJfaSAgICAgIChyZWdfYWRkclsyOjBdICApLCAvLyBsb3dlciBhZGRyZXNzIGJpdHMKKwkud2JfZGF0X2kgICAgICAocmVnX3dkYXRhICAgICAgKSwgLy8gZGF0YWJ1cyBpbnB1dAorCS53Yl9kYXRfbyAgICAgIChyZWdfaTJjX3JkYXRhICApLCAvLyBkYXRhYnVzIG91dHB1dAorCS53Yl93ZV9pICAgICAgIChyZWdfd3IgICAgICAgICApLCAvLyB3cml0ZSBlbmFibGUgaW5wdXQKKwkud2Jfc3RiX2kgICAgICAocmVnX2NzICAgICAgICAgKSwgLy8gc3RvYmUvY29yZSBzZWxlY3Qgc2lnbmFsCisJLndiX2N5Y19pICAgICAgKHJlZ19jcyAgICAgICAgICksIC8vIHZhbGlkIGJ1cyBjeWNsZSBpbnB1dAorCS53Yl9hY2tfbyAgICAgIChyZWdfaTJjX2FjayAgICApLCAvLyBidXMgY3ljbGUgYWNrbm93bGVkZ2Ugb3V0cHV0CisJLndiX2ludGFfbyAgICAgKCAgICAgICAgICAgICAgICksIC8vIGludGVycnVwdCByZXF1ZXN0IHNpZ25hbCBvdXRwdXQKKworCS8vIEkyQyBzaWduYWxzCisJLy8gaTJjIGNsb2NrIGxpbmUKKwkuc2NsX3BhZF9pICAgICAoc2NsX3BhZF9pICAgICAgKSwgLy8gU0NMLWxpbmUgaW5wdXQKKwkuc2NsX3BhZF9vICAgICAoc2NsX3BhZF9vICAgICAgKSwgLy8gU0NMLWxpbmUgb3V0cHV0IChhbHdheXMgMSdiMCkKKwkuc2NsX3BhZG9lbl9vICAoc2NsX3BhZF9vZW5fbyAgKSwgLy8gU0NMLWxpbmUgb3V0cHV0IGVuYWJsZSAoYWN0aXZlIGxvdykKKworCS8vIGkyYyBkYXRhIGxpbmUKKwkuc2RhX3BhZF9pICAgICAoc2RhX3BhZF9pICAgICAgKSwgLy8gU0RBLWxpbmUgaW5wdXQKKwkuc2RhX3BhZF9vICAgICAoc2RhX3BhZF9vICAgICAgKSwgLy8gU0RBLWxpbmUgb3V0cHV0IChhbHdheXMgMSdiMCkKKwkuc2RhX3BhZG9lbl9vICAoc2RhX3BhZG9lbl9vICAgKSAgLy8gU0RBLWxpbmUgb3V0cHV0IGVuYWJsZSAoYWN0aXZlIGxvdykKKworICAgICAgICAgKTsKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC91YXJ0X2kyY191c2Ivc3JjL3VhcnRfaTJjX3VzYi5zdiBiL3Zlcmlsb2cvcnRsL3VhcnRfaTJjX3VzYi9zcmMvdWFydF9pMmNfdXNiLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZTdhZjYKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC91YXJ0X2kyY191c2Ivc3JjL3VhcnRfaTJjX3VzYi5zdgpAQCAtMCwwICsxLDIxOCBAQAorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGludGVncmF0ZWQgVUFSVC9JMkMgTWFzdGVyICYgVVNCMS4xIEhvc3QgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uOiBUaGlzIG1vZHVsZSBpbnRlZ2FydGUgVWFydCBhbmQgSTJDIE1hc3RlciAgICAgIC8vLy8KKy8vLy8gICBhbmQgVVNCIDEuMSBIb3N0LiBCb3RoIHRoZXNlIGJsb2NrIHNoYXJlIGNvbW1vbiB0d28gcGlucywgIC8vLy8KKy8vLy8gICBlZmZlY3RseSBvbmx5IG9uZSBibG9jayBhY3RpdmUgYXQgdGltZS4gVGhpcyBpcyBkdWUgdG8gICAgIC8vLy8KKy8vLy8gICB0b3AtbGV2ZWwgcGluIHJlc3RyaWN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgUGluICBNYXBpbmcgICAgVUFSVCAgICAgICBJMkMgICAgICAgVVNCICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgSU9bMV0gLSAgICAgICAgVFhEICAgICAgICBTREEgICAgICAgRFAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgSU9bMF0gLSAgICAgICAgUlhEICAgICAgICBTQ0wgICAgICAgRE4gICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbW9kdWxlIHVhcnRfaTJjX3VzYl90b3AgCisKKyAgICAgKCAgCisKKyAgIGlucHV0IGxvZ2ljICAgICAgICAgdWFydF9yc3RuICAsIC8vIGFzeW5jIHJlc2V0CisgICBpbnB1dCBsb2dpYyAgICAgICAgIGkyY19yc3RuICAsIC8vIGFzeW5jIHJlc2V0CisgICBpbnB1dCBsb2dpYyAgICAgICAgIHVzYl9yc3RuICAsIC8vIGFzeW5jIHJlc2V0CisgICBpbnB1dCBsb2dpYyAgICAgICAgIGFwcF9jbGsgLAorICAgaW5wdXQgbG9naWMgICAgICAgICB1c2JfY2xrICwgICAvLyA0OE1oeiB1c2IgY2xvY2sKKworICAgICAgICAvLyBSZWcgQnVzIEludGVyZmFjZSBTaWduYWwKKyAgIGlucHV0IGxvZ2ljICAgICAgICAgcmVnX2NzLAorICAgaW5wdXQgbG9naWMgICAgICAgICByZWdfd3IsCisgICBpbnB1dCBsb2dpYyBbNzowXSAgIHJlZ19hZGRyLAorICAgaW5wdXQgbG9naWMgWzMxOjBdICByZWdfd2RhdGEsCisgICBpbnB1dCBsb2dpYyAgICAgICAgIHJlZ19iZSwKKworICAgICAgICAvLyBPdXRwdXRzCisgICBvdXRwdXQgbG9naWMgWzMxOjBdIHJlZ19yZGF0YSwKKyAgIG91dHB1dCBsb2dpYyAgICAgICAgcmVnX2FjaywKKyAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgLy8gaTJjIGludGVyZmFjZQorICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgaW5wdXQgbG9naWMgICAgICAgICBzY2xfcGFkX2kgICAgICAgICAgICAgICwgLy8gU0NMLWxpbmUgaW5wdXQKKyAgIG91dHB1dCBsb2dpYyAgICAgICAgc2NsX3BhZF9vICAgICAgICAgICAgICAsIC8vIFNDTC1saW5lIG91dHB1dCAoYWx3YXlzIDEnYjApCisgICBvdXRwdXQgbG9naWMgICAgICAgIHNjbF9wYWRfb2VuX28gICAgICAgICAgLCAvLyBTQ0wtbGluZSBvdXRwdXQgZW5hYmxlIChhY3RpdmUgbG93KQorICAgCisgICBpbnB1dCBsb2dpYyAgICAgICAgIHNkYV9wYWRfaSAgICAgICAgICAgICAgLCAvLyBTREEtbGluZSBpbnB1dAorICAgb3V0cHV0IGxvZ2ljICAgICAgICBzZGFfcGFkX28gICAgICAgICAgICAgICwgLy8gU0RBLWxpbmUgb3V0cHV0IChhbHdheXMgMSdiMCkKKyAgIG91dHB1dCBsb2dpYyAgICAgICAgc2RhX3BhZG9lbl9vICAgICAgICAgICAsIC8vIFNEQS1saW5lIG91dHB1dCBlbmFibGUgKGFjdGl2ZSBsb3cpCisKKyAgIC8vIFVBUlQgSS9GCisgICBpbnB1dCAgbG9naWMgICAgICAgIHVhcnRfcnhkICAgICAgICAgICAgICAgLCAKKyAgIG91dHB1dCBsb2dpYyAgICAgICAgdWFydF90eGQgICAgICAgICAgICAgICAsCisKKyAgIGlucHV0ICBsb2dpYyAgICAgICAgdXNiX2luX2RwICAgICAgICAgICAgICAsCisgICBpbnB1dCAgbG9naWMgICAgICAgIHVzYl9pbl9kbiAgICAgICAgICAgICAgLAorCisgICBvdXRwdXQgbG9naWMgICAgICAgIHVzYl9vdXRfZHAgICAgICAgICAgICAgLAorICAgb3V0cHV0IGxvZ2ljICAgICAgICB1c2Jfb3V0X2RuICAgICAgICAgICAgICwKKyAgIG91dHB1dCBsb2dpYyAgICAgICAgdXNiX291dF90eF9vZW4gICAgICAgCisKKyAgICAgKTsKKworCitgZGVmaW5lIFNFTF9VQVJUIDInYjAwCitgZGVmaW5lIFNFTF9JMkMgIDInYjAxCitgZGVmaW5lIFNFTF9VU0IgIDInYjEwCisKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBSZWdpc3RlciBSZXNwb25zZSBQYXRoIE11eAorLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsb2dpYyBbNzowXSAgIHJlZ191YXJ0X3JkYXRhOworbG9naWMgWzc6MF0gICByZWdfaTJjX3JkYXRhOworbG9naWMgWzMxOjBdICByZWdfdXNiX3JkYXRhOworbG9naWMgICAgICAgICByZWdfdWFydF9hY2s7Citsb2dpYyAgICAgICAgIHJlZ19pMmNfYWNrOworbG9naWMgICAgICAgICByZWdfdXNiX2FjazsKKworCithc3NpZ24gcmVnX3JkYXRhID0gKHJlZ19hZGRyWzc6Nl0gPT0gYFNFTF9VQVJUKSA/IHsyNCdoMCxyZWdfdWFydF9yZGF0YX0gOiAKKwkgICAgICAgICAgIChyZWdfYWRkcls3OjZdID09IGBTRUxfSTJDKSA/IHsyNCdoMCxyZWdfaTJjX3JkYXRhfSA6IHJlZ191c2JfcmRhdGE7Cithc3NpZ24gcmVnX2FjayAgID0gKHJlZ19hZGRyWzc6Nl0gPT0gYFNFTF9VQVJUKSA/IHJlZ191YXJ0X2FjayAgIDogCisJICAgICAgICAgICAocmVnX2FkZHJbNzo2XSA9PSBgU0VMX0kyQykgPyByZWdfaTJjX2FjayAgIDogcmVnX3VzYl9hY2s7CisKK3VhcnRfY29yZSAgdV91YXJ0X2NvcmUgKCAgCisKKyAgICAgICAgLmFyc3RfbiAgICAgICh1YXJ0X3JzdG4gICAgICAgICksIC8vIGFzeW5jIHJlc2V0CisgICAgICAgIC5hcHBfY2xrICAgICAoYXBwX2NsayAgICAgICAgICApLAorCisgICAgICAgIC8vIFJlZyBCdXMgSW50ZXJmYWNlIFNpZ25hbAorICAgICAgICAucmVnX2NzICAgICAgKHJlZ19jcyAgICAgICAgICAgKSwKKyAgICAgICAgLnJlZ193ciAgICAgIChyZWdfd3IgICAgICAgICAgICksCisgICAgICAgIC5yZWdfYWRkciAgICAocmVnX2FkZHJbNToyXSAgICApLAorICAgICAgICAucmVnX3dkYXRhICAgKHJlZ193ZGF0YVs3OjBdICAgKSwKKyAgICAgICAgLnJlZ19iZSAgICAgIChyZWdfYmUgICAgICAgICAgICksCisKKyAgICAgICAgLy8gT3V0cHV0cworICAgICAgICAucmVnX3JkYXRhICAgKHJlZ191YXJ0X3JkYXRhWzc6MF0pLAorICAgICAgICAucmVnX2FjayAgICAgKHJlZ191YXJ0X2FjayAgICAgKSwKKworICAgICAgICAgICAgLy8gUGFkIENvbnRyb2wKKyAgICAgICAgLnJ4ZCAgICAgICAgICAodWFydF9yeGQgICAgICAgICksCisgICAgICAgIC50eGQgICAgICAgICAgKHVhcnRfdHhkICAgICAgICApCisgICAgICk7CisKK2kyY21fdG9wICB1X2kyY20gKAorCS8vIHdpc2hib25lIHNpZ25hbHMKKwkud2JfY2xrX2kgICAgICAoYXBwX2NsayAgICAgICAgKSwgLy8gbWFzdGVyIGNsb2NrIGlucHV0CisJLnNyZXNldG4gICAgICAgKGkyY19yc3RuICAgICAgICksIC8vIHN5bmNocm9ub3VzIHJlc2V0CisJLmFyZXNldG4gICAgICAgKDEnYjEgICAgICAgICAgICksIC8vIGFzeW5jaHJvbm91cyByZXNldAorCS53Yl9hZHJfaSAgICAgIChyZWdfYWRkcls0OjJdICApLCAvLyBsb3dlciBhZGRyZXNzIGJpdHMKKwkud2JfZGF0X2kgICAgICAocmVnX3dkYXRhWzc6MF0gKSwgLy8gZGF0YWJ1cyBpbnB1dAorCS53Yl9kYXRfbyAgICAgIChyZWdfaTJjX3JkYXRhICApLCAvLyBkYXRhYnVzIG91dHB1dAorCS53Yl93ZV9pICAgICAgIChyZWdfd3IgICAgICAgICApLCAvLyB3cml0ZSBlbmFibGUgaW5wdXQKKwkud2Jfc3RiX2kgICAgICAocmVnX2NzICAgICAgICAgKSwgLy8gc3RvYmUvY29yZSBzZWxlY3Qgc2lnbmFsCisJLndiX2N5Y19pICAgICAgKHJlZ19jcyAgICAgICAgICksIC8vIHZhbGlkIGJ1cyBjeWNsZSBpbnB1dAorCS53Yl9hY2tfbyAgICAgIChyZWdfaTJjX2FjayAgICApLCAvLyBidXMgY3ljbGUgYWNrbm93bGVkZ2Ugb3V0cHV0CisJLndiX2ludGFfbyAgICAgKCAgICAgICAgICAgICAgICksIC8vIGludGVycnVwdCByZXF1ZXN0IHNpZ25hbCBvdXRwdXQKKworCS8vIEkyQyBzaWduYWxzCisJLy8gaTJjIGNsb2NrIGxpbmUKKwkuc2NsX3BhZF9pICAgICAoc2NsX3BhZF9pICAgICAgKSwgLy8gU0NMLWxpbmUgaW5wdXQKKwkuc2NsX3BhZF9vICAgICAoc2NsX3BhZF9vICAgICAgKSwgLy8gU0NMLWxpbmUgb3V0cHV0IChhbHdheXMgMSdiMCkKKwkuc2NsX3BhZG9lbl9vICAoc2NsX3BhZF9vZW5fbyAgKSwgLy8gU0NMLWxpbmUgb3V0cHV0IGVuYWJsZSAoYWN0aXZlIGxvdykKKworCS8vIGkyYyBkYXRhIGxpbmUKKwkuc2RhX3BhZF9pICAgICAoc2RhX3BhZF9pICAgICAgKSwgLy8gU0RBLWxpbmUgaW5wdXQKKwkuc2RhX3BhZF9vICAgICAoc2RhX3BhZF9vICAgICAgKSwgLy8gU0RBLWxpbmUgb3V0cHV0IChhbHdheXMgMSdiMCkKKwkuc2RhX3BhZG9lbl9vICAoc2RhX3BhZG9lbl9vICAgKSAgLy8gU0RBLWxpbmUgb3V0cHV0IGVuYWJsZSAoYWN0aXZlIGxvdykKKworICAgICAgICAgKTsKKworCit1c2IxX2hvc3QgdV91c2JfaG9zdCAoCisgICAgLnVzYl9jbGtfaSAgICAgICh1c2JfY2xrICAgICAgICksCisgICAgLnVzYl9yc3RuX2kgICAgICh1c2JfcnN0biAgICAgICksCisKKyAgICAvLyBVU0IgRCsvRC0KKyAgICAuaW5fZHAgICAgICAgICAgKHVzYl9pbl9kcCAgICAgKSwKKyAgICAuaW5fZG4gICAgICAgICAgKHVzYl9pbl9kbiAgICAgKSwKKworICAgIC5vdXRfZHAgICAgICAgICAodXNiX291dF9kcCAgICApLAorICAgIC5vdXRfZG4gICAgICAgICAodXNiX291dF9kbiAgICApLAorICAgIC5vdXRfdHhfb2VuICAgICAodXNiX291dF90eF9vZW4pLAorCisgICAgLy8gTWFzdGVyIFBvcnQKKyAgICAud2JtX3JzdF9uICAgICAgKHVzYl9yc3RuICAgICAgKSwgIC8vIFJlZ3VsYXIgUmVzZXQgc2lnbmFsCisgICAgLndibV9jbGtfaSAgICAgIChhcHBfY2xrICAgICAgICksICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAud2JtX3N0Yl9pICAgICAgKHJlZ19jcyAgICAgICAgKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgLndibV9hZHJfaSAgICAgIChyZWdfYWRkcls1OjBdKSwgIC8vIGFkZHJlc3MKKyAgICAud2JtX3dlX2kgICAgICAgKHJlZ193ciAgICAgICAgKSwgIC8vIHdyaXRlCisgICAgLndibV9kYXRfaSAgICAgIChyZWdfd2RhdGEgICAgICksICAvLyBkYXRhIG91dHB1dAorICAgIC53Ym1fc2VsX2kgICAgICAocmVnX2JlICAgICAgICApLCAgLy8gYnl0ZSBlbmFibGUKKyAgICAud2JtX2RhdF9vICAgICAgKHJlZ191c2JfcmRhdGEgKSwgIC8vIGRhdGEgaW5wdXQKKyAgICAud2JtX2Fja19vICAgICAgKHJlZ191c2JfYWNrICAgKSwgIC8vIGFja25vd2xlZ2VtZW50CisgICAgLndibV9lcnJfbyAgICAgICggICAgICAgICAgICAgICksICAvLyBlcnJvcgorCisgICAgLy8gT3V0cHV0cworICAgIC51c2JfaW50cl9vICAgICggICAgICAgICAgICAgICApCisKKworICAgICk7CisKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC91YXJ0X2kyY191c2Jfc3BpL3NyYy91YXJ0X2kyY191c2Jfc3BpLnN2IGIvdmVyaWxvZy9ydGwvdWFydF9pMmNfdXNiX3NwaS9zcmMvdWFydF9pMmNfdXNiX3NwaS5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzM3OGUwCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvdWFydF9pMmNfdXNiX3NwaS9zcmMvdWFydF9pMmNfdXNiX3NwaS5zdgpAQCAtMCwwICsxLDI4MSBAQAorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGludGVncmF0ZWQgVUFSVCxJMkMgTWFzdGVyLCBTUFUgTWFzdGVyICYgVVNCMS4xIEhvc3QgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSByaXNjZHVpbm8gY29yZXMgcHJvamVjdCAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3Jpc2NkdWluby5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uOiBUaGlzIG1vZHVsZSBpbnRlZ2FydGUgVWFydCAsIEkyQyBNYXN0ZXIgICAgICAgIC8vLy8KKy8vLy8gICBTUEkgTWFzdGVyIGFuZCBVU0IgMS4xIEhvc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbW9kdWxlIHVhcnRfaTJjX3VzYl9zcGlfdG9wIAorCisgICAgICggIAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICBpbnB1dCBsb2dpYyAgICAgICAgIHZjY2QxLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICBpbnB1dCBsb2dpYyAgICAgICAgIHZzc2QxLC8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgICAvLyBjbG9jayBza2V3IGFkanVzdAorICAgaW5wdXQgbG9naWMgWzM6MF0gICBjZmdfY3NrYV91YXJ0LAorICAgaW5wdXQgbG9naWMJICAgICAgIHdiZF9jbGtfaW50LAorICAgb3V0cHV0IGxvZ2ljCSAgICAgICB3YmRfY2xrX3VhcnQsCisKKyAgIGlucHV0IGxvZ2ljICAgICAgICAgdWFydF9yc3RuICAsIC8vIGFzeW5jIHJlc2V0CisgICBpbnB1dCBsb2dpYyAgICAgICAgIGkyY19yc3RuICAsICAvLyBhc3luYyByZXNldAorICAgaW5wdXQgbG9naWMgICAgICAgICB1c2JfcnN0biAgLCAgLy8gYXN5bmMgcmVzZXQKKyAgIGlucHV0IGxvZ2ljICAgICAgICAgc3BpX3JzdG4gICwgIC8vIGFzeW5jIHJlc2V0CisgICBpbnB1dCBsb2dpYyAgICAgICAgIGFwcF9jbGsgLAorICAgaW5wdXQgbG9naWMgICAgICAgICB1c2JfY2xrICwgICAvLyA0OE1oeiB1c2IgY2xvY2sKKworICAgICAgICAvLyBSZWcgQnVzIEludGVyZmFjZSBTaWduYWwKKyAgIGlucHV0IGxvZ2ljICAgICAgICAgcmVnX2NzLAorICAgaW5wdXQgbG9naWMgICAgICAgICByZWdfd3IsCisgICBpbnB1dCBsb2dpYyBbNzowXSAgIHJlZ19hZGRyLAorICAgaW5wdXQgbG9naWMgWzMxOjBdICByZWdfd2RhdGEsCisgICBpbnB1dCBsb2dpYyBbMzowXSAgIHJlZ19iZSwKKworICAgICAgICAvLyBPdXRwdXRzCisgICBvdXRwdXQgbG9naWMgWzMxOjBdIHJlZ19yZGF0YSwKKyAgIG91dHB1dCBsb2dpYyAgICAgICAgcmVnX2FjaywKKyAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgLy8gaTJjIGludGVyZmFjZQorICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgaW5wdXQgbG9naWMgICAgICAgICBzY2xfcGFkX2kgICAgICAgICAgICAgICwgLy8gU0NMLWxpbmUgaW5wdXQKKyAgIG91dHB1dCBsb2dpYyAgICAgICAgc2NsX3BhZF9vICAgICAgICAgICAgICAsIC8vIFNDTC1saW5lIG91dHB1dCAoYWx3YXlzIDEnYjApCisgICBvdXRwdXQgbG9naWMgICAgICAgIHNjbF9wYWRfb2VuX28gICAgICAgICAgLCAvLyBTQ0wtbGluZSBvdXRwdXQgZW5hYmxlIChhY3RpdmUgbG93KQorICAgCisgICBpbnB1dCBsb2dpYyAgICAgICAgIHNkYV9wYWRfaSAgICAgICAgICAgICAgLCAvLyBTREEtbGluZSBpbnB1dAorICAgb3V0cHV0IGxvZ2ljICAgICAgICBzZGFfcGFkX28gICAgICAgICAgICAgICwgLy8gU0RBLWxpbmUgb3V0cHV0IChhbHdheXMgMSdiMCkKKyAgIG91dHB1dCBsb2dpYyAgICAgICAgc2RhX3BhZG9lbl9vICAgICAgICAgICAsIC8vIFNEQS1saW5lIG91dHB1dCBlbmFibGUgKGFjdGl2ZSBsb3cpCisKKyAgIG91dHB1dCBsb2dpYyAgICAgICAgaTJjbV9pbnRyX28gICAgICAgICAgICAsCisKKyAgIC8vIFVBUlQgSS9GCisgICBpbnB1dCAgbG9naWMgICAgICAgIHVhcnRfcnhkICAgICAgICAgICAgICAgLCAKKyAgIG91dHB1dCBsb2dpYyAgICAgICAgdWFydF90eGQgICAgICAgICAgICAgICAsCisKKyAgIC8vIFVTQiAxLjEgSE9TVCBJL0YKKyAgIGlucHV0ICBsb2dpYyAgICAgICAgdXNiX2luX2RwICAgICAgICAgICAgICAsCisgICBpbnB1dCAgbG9naWMgICAgICAgIHVzYl9pbl9kbiAgICAgICAgICAgICAgLAorCisgICBvdXRwdXQgbG9naWMgICAgICAgIHVzYl9vdXRfZHAgICAgICAgICAgICAgLAorICAgb3V0cHV0IGxvZ2ljICAgICAgICB1c2Jfb3V0X2RuICAgICAgICAgICAgICwKKyAgIG91dHB1dCBsb2dpYyAgICAgICAgdXNiX291dF90eF9vZW4gICAgICAgICAsCisgICAKKyAgIG91dHB1dCBsb2dpYyAgICAgICAgdXNiX2ludHJfbyAgICAgICAgICAgICwKKworICAgLy8gU1BJTSBJL0YKKyAgIG91dHB1dCBsb2dpYyAgICAgICAgc3NwaW1fc2NrLCAvLyBjbG9jayBvdXQKKyAgIG91dHB1dCBsb2dpYyAgICAgICAgc3NwaW1fc28sICAvLyBzZXJpYWwgZGF0YSBvdXQKKyAgIGlucHV0ICBsb2dpYyAgICAgICAgc3NwaW1fc2ksICAvLyBzZXJpYWwgZGF0YSBpbgorICAgb3V0cHV0IGxvZ2ljICAgICAgICBzc3BpbV9zc24gIC8vIGNzX24KKworICAgICApOworCisvLyB1YXJ0IGNsb2NrIHNrZXcgY29udHJvbAorY2xrX3NrZXdfYWRqdXN0IHVfc2tld191YXJ0CisgICAgICAgKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgICAgICAgICAudmNjZDEgICAgICAodmNjZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgICAgICAgICAgICAgLnZzc2QxICAgICAgKHZzc2QxICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorCSAgICAgICAuY2xrX2luICAgICAod2JkX2Nsa19pbnQgICAgICAgICAgICAgICAgICksIAorCSAgICAgICAuc2VsICAgICAgICAoY2ZnX2Nza2FfdWFydCAgICAgICAgICAgICAgICksIAorCSAgICAgICAuY2xrX291dCAgICAod2JkX2Nsa191YXJ0ICAgICAgICAgICAgICAgICkgCisgICAgICAgKTsKKworYGRlZmluZSBTRUxfVUFSVCAyJ2IwMAorYGRlZmluZSBTRUxfSTJDICAyJ2IwMQorYGRlZmluZSBTRUxfVVNCICAyJ2IxMAorYGRlZmluZSBTRUxfU1BJICAyJ2IxMQorCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgUmVnaXN0ZXIgUmVzcG9uc2UgUGF0aCBNdXgKKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbG9naWMgWzc6MF0gICByZWdfdWFydF9yZGF0YTsKK2xvZ2ljIFs3OjBdICAgcmVnX2kyY19yZGF0YTsKK2xvZ2ljIFszMTowXSAgcmVnX3VzYl9yZGF0YTsKK2xvZ2ljIFszMTowXSAgcmVnX3NwaW1fcmRhdGE7Citsb2dpYyAgICAgICAgIHJlZ191YXJ0X2FjazsKK2xvZ2ljICAgICAgICAgcmVnX2kyY19hY2s7Citsb2dpYyAgICAgICAgIHJlZ191c2JfYWNrOworbG9naWMgICAgICAgICByZWdfc3BpbV9hY2s7CisKKworYXNzaWduIHJlZ19yZGF0YSA9IChyZWdfYWRkcls3OjZdID09IGBTRUxfVUFSVCkgPyB7MjQnaDAscmVnX3VhcnRfcmRhdGF9IDogCisJICAgICAgICAgICAocmVnX2FkZHJbNzo2XSA9PSBgU0VMX0kyQykgPyB7MjQnaDAscmVnX2kyY19yZGF0YX0gOgorCSAgICAgICAgICAgKHJlZ19hZGRyWzc6Nl0gPT0gYFNFTF9VU0IpID8gcmVnX3VzYl9yZGF0YSA6IHJlZ19zcGltX3JkYXRhOworYXNzaWduIHJlZ19hY2sgICA9IChyZWdfYWRkcls3OjZdID09IGBTRUxfVUFSVCkgPyByZWdfdWFydF9hY2sgICA6IAorCSAgICAgICAgICAgKHJlZ19hZGRyWzc6Nl0gPT0gYFNFTF9JMkMpID8gcmVnX2kyY19hY2sgICA6IAorCSAgICAgICAgICAgKHJlZ19hZGRyWzc6Nl0gPT0gYFNFTF9VU0IpID8gcmVnX3VzYl9hY2sgOiByZWdfc3BpbV9hY2s7CisKK3dpcmUgcmVnX3VhcnRfY3MgID0gKHJlZ19hZGRyWzc6Nl0gPT0gYFNFTF9VQVJUKSA/IHJlZ19jcyA6IDEnYjA7Cit3aXJlIHJlZ19pMmNtX2NzICA9IChyZWdfYWRkcls3OjZdID09IGBTRUxfSTJDKSAgPyByZWdfY3MgOiAxJ2IwOword2lyZSByZWdfdXNiX2NzICAgPSAocmVnX2FkZHJbNzo2XSA9PSBgU0VMX1VBUlQpID8gcmVnX2NzIDogMSdiMDsKK3dpcmUgcmVnX3NwaW1fY3MgID0gKHJlZ19hZGRyWzc6Nl0gPT0gYFNFTF9TUEkpID8gIHJlZ19jcyA6IDEnYjA7CisKK3VhcnRfY29yZSAgdV91YXJ0X2NvcmUgKCAgCisKKyAgICAgICAgLmFyc3RfbiAgICAgICh1YXJ0X3JzdG4gICAgICAgICksIC8vIGFzeW5jIHJlc2V0CisgICAgICAgIC5hcHBfY2xrICAgICAoYXBwX2NsayAgICAgICAgICApLAorCisgICAgICAgIC8vIFJlZyBCdXMgSW50ZXJmYWNlIFNpZ25hbAorICAgICAgICAucmVnX2NzICAgICAgKHJlZ191YXJ0X2NzICAgICAgKSwKKyAgICAgICAgLnJlZ193ciAgICAgIChyZWdfd3IgICAgICAgICAgICksCisgICAgICAgIC5yZWdfYWRkciAgICAocmVnX2FkZHJbNToyXSAgICApLAorICAgICAgICAucmVnX3dkYXRhICAgKHJlZ193ZGF0YVs3OjBdICAgKSwKKyAgICAgICAgLnJlZ19iZSAgICAgIChyZWdfYmVbMF0gICAgICAgICksCisKKyAgICAgICAgLy8gT3V0cHV0cworICAgICAgICAucmVnX3JkYXRhICAgKHJlZ191YXJ0X3JkYXRhWzc6MF0pLAorICAgICAgICAucmVnX2FjayAgICAgKHJlZ191YXJ0X2FjayAgICAgKSwKKworICAgICAgICAgICAgLy8gUGFkIENvbnRyb2wKKyAgICAgICAgLnJ4ZCAgICAgICAgICAodWFydF9yeGQgICAgICAgICksCisgICAgICAgIC50eGQgICAgICAgICAgKHVhcnRfdHhkICAgICAgICApCisgICAgICk7CisKK2kyY21fdG9wICB1X2kyY20gKAorCS8vIHdpc2hib25lIHNpZ25hbHMKKwkud2JfY2xrX2kgICAgICAoYXBwX2NsayAgICAgICAgKSwgLy8gbWFzdGVyIGNsb2NrIGlucHV0CisJLnNyZXNldG4gICAgICAgKDEnYjEgICAgICAgICAgICksIC8vIHN5bmNocm9ub3VzIHJlc2V0CisJLmFyZXNldG4gICAgICAgKGkyY19yc3RuICAgICAgICksIC8vIGFzeW5jaHJvbm91cyByZXNldAorCS53Yl9hZHJfaSAgICAgIChyZWdfYWRkcls0OjJdICApLCAvLyBsb3dlciBhZGRyZXNzIGJpdHMKKwkud2JfZGF0X2kgICAgICAocmVnX3dkYXRhWzc6MF0gKSwgLy8gZGF0YWJ1cyBpbnB1dAorCS53Yl9kYXRfbyAgICAgIChyZWdfaTJjX3JkYXRhICApLCAvLyBkYXRhYnVzIG91dHB1dAorCS53Yl93ZV9pICAgICAgIChyZWdfd3IgICAgICAgICApLCAvLyB3cml0ZSBlbmFibGUgaW5wdXQKKwkud2Jfc3RiX2kgICAgICAocmVnX2kyY21fY3MgICAgKSwgLy8gc3RvYmUvY29yZSBzZWxlY3Qgc2lnbmFsCisJLndiX2N5Y19pICAgICAgKHJlZ19pMmNtX2NzICAgICksIC8vIHZhbGlkIGJ1cyBjeWNsZSBpbnB1dAorCS53Yl9hY2tfbyAgICAgIChyZWdfaTJjX2FjayAgICApLCAvLyBidXMgY3ljbGUgYWNrbm93bGVkZ2Ugb3V0cHV0CisJLndiX2ludGFfbyAgICAgKGkyY21faW50cl9vICAgICksIC8vIGludGVycnVwdCByZXF1ZXN0IHNpZ25hbCBvdXRwdXQKKworCS8vIEkyQyBzaWduYWxzCisJLy8gaTJjIGNsb2NrIGxpbmUKKwkuc2NsX3BhZF9pICAgICAoc2NsX3BhZF9pICAgICAgKSwgLy8gU0NMLWxpbmUgaW5wdXQKKwkuc2NsX3BhZF9vICAgICAoc2NsX3BhZF9vICAgICAgKSwgLy8gU0NMLWxpbmUgb3V0cHV0IChhbHdheXMgMSdiMCkKKwkuc2NsX3BhZG9lbl9vICAoc2NsX3BhZF9vZW5fbyAgKSwgLy8gU0NMLWxpbmUgb3V0cHV0IGVuYWJsZSAoYWN0aXZlIGxvdykKKworCS8vIGkyYyBkYXRhIGxpbmUKKwkuc2RhX3BhZF9pICAgICAoc2RhX3BhZF9pICAgICAgKSwgLy8gU0RBLWxpbmUgaW5wdXQKKwkuc2RhX3BhZF9vICAgICAoc2RhX3BhZF9vICAgICAgKSwgLy8gU0RBLWxpbmUgb3V0cHV0IChhbHdheXMgMSdiMCkKKwkuc2RhX3BhZG9lbl9vICAoc2RhX3BhZG9lbl9vICAgKSAgLy8gU0RBLWxpbmUgb3V0cHV0IGVuYWJsZSAoYWN0aXZlIGxvdykKKworICAgICAgICAgKTsKKworCit1c2IxX2hvc3QgdV91c2JfaG9zdCAoCisgICAgLnVzYl9jbGtfaSAgICAgICh1c2JfY2xrICAgICAgICksCisgICAgLnVzYl9yc3RuX2kgICAgICh1c2JfcnN0biAgICAgICksCisKKyAgICAvLyBVU0IgRCsvRC0KKyAgICAuaW5fZHAgICAgICAgICAgKHVzYl9pbl9kcCAgICAgKSwKKyAgICAuaW5fZG4gICAgICAgICAgKHVzYl9pbl9kbiAgICAgKSwKKworICAgIC5vdXRfZHAgICAgICAgICAodXNiX291dF9kcCAgICApLAorICAgIC5vdXRfZG4gICAgICAgICAodXNiX291dF9kbiAgICApLAorICAgIC5vdXRfdHhfb2VuICAgICAodXNiX291dF90eF9vZW4pLAorCisgICAgLy8gTWFzdGVyIFBvcnQKKyAgICAud2JtX3JzdF9uICAgICAgKHVzYl9yc3RuICAgICAgKSwgIC8vIFJlZ3VsYXIgUmVzZXQgc2lnbmFsCisgICAgLndibV9jbGtfaSAgICAgIChhcHBfY2xrICAgICAgICksICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAud2JtX3N0Yl9pICAgICAgKHJlZ191c2JfY3MgICAgKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgLndibV9hZHJfaSAgICAgIChyZWdfYWRkcls1OjBdKSwgIC8vIGFkZHJlc3MKKyAgICAud2JtX3dlX2kgICAgICAgKHJlZ193ciAgICAgICAgKSwgIC8vIHdyaXRlCisgICAgLndibV9kYXRfaSAgICAgIChyZWdfd2RhdGEgICAgICksICAvLyBkYXRhIG91dHB1dAorICAgIC53Ym1fc2VsX2kgICAgICAocmVnX2JlICAgICAgICApLCAgLy8gYnl0ZSBlbmFibGUKKyAgICAud2JtX2RhdF9vICAgICAgKHJlZ191c2JfcmRhdGEgKSwgIC8vIGRhdGEgaW5wdXQKKyAgICAud2JtX2Fja19vICAgICAgKHJlZ191c2JfYWNrICAgKSwgIC8vIGFja25vd2xlZ2VtZW50CisgICAgLndibV9lcnJfbyAgICAgICggICAgICAgICAgICAgICksICAvLyBlcnJvcgorCisgICAgLy8gT3V0cHV0cworICAgIC51c2JfaW50cl9vICAgICggdXNiX2ludHJfbyAgICApCisKKyAgICApOworCitzc3BpbV90b3AgdV9zc3BpbSAoCisgICAgIC5jbGsgICAgICAgICAgKGFwcF9jbGsgICAgICAgICApLAorICAgICAucmVzZXRfbiAgICAgIChzcGlfcnN0biAgICAgICAgKSwgICAgICAgICAgCisgICAgICAgICAgIAorICAgICAgICAgICAKKyAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgLy8gUmVnIEJ1cyBJbnRlcmZhY2UgU2lnbmFsCisgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIC5yZWdfY3MgICAgICAocmVnX3NwaW1fY3MgICAgICApLAorICAgICAucmVnX3dyICAgICAgKHJlZ193ciAgICAgICAgICAgKSwKKyAgICAgLnJlZ19hZGRyICAgIChyZWdfYWRkciAgICAgICAgICksCisgICAgIC5yZWdfd2RhdGEgICAocmVnX3dkYXRhICAgICAgICApLAorICAgICAucmVnX2JlICAgICAgKHJlZ19iZSAgICAgICAgICAgKSwKKworICAgICAvLyBPdXRwdXRzCisgICAgIC5yZWdfcmRhdGEgICAocmVnX3NwaW1fcmRhdGEgICApLAorICAgICAucmVnX2FjayAgICAgKHJlZ19zcGltX2FjayAgICAgKSwKKyAgICAgICAgICAgCisgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIC8vIExpbmUgSW50ZXJmYWNlCisgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgCisgICAgICAuc2NrICAgICAgICAgICAoc3NwaW1fc2NrKSwgLy8gY2xvY2sgb3V0CisgICAgICAuc28gICAgICAgICAgICAoc3NwaW1fc28pLCAgLy8gc2VyaWFsIGRhdGEgb3V0CisgICAgICAuc2kgICAgICAgICAgICAoc3NwaW1fc2kpLCAgLy8gc2VyaWFsIGRhdGEgaW4KKyAgICAgIC5zc24gICAgICAgICAgIChzc3BpbV9zc24pICAvLyBjc19uCisKKyAgICAgICAgICAgKTsKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC91cHJqX25ldGxpc3RzLnYgYi92ZXJpbG9nL3J0bC91cHJqX25ldGxpc3RzLnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgxYWQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3VwcmpfbmV0bGlzdHMudgpAQCAtMCwwICsxLDE4MyBAQAorLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKKy8vIEluY2x1ZGUgY2FyYXZlbCBnbG9iYWwgZGVmaW5lcyBmb3IgdGhlIG51bWJlciBvZiB0aGUgdXNlciBwcm9qZWN0IElPIHBhZHMgCitgaW5jbHVkZSAiZGVmaW5lcy52IgorYGRlZmluZSBVU0VfUE9XRVJfUElOUworYGRlZmluZSBVTklUX0RFTEFZICMwLjEKKworYGlmZGVmIEdMCisgICAgICAgYGluY2x1ZGUgImxpYnMucmVmL3NreTEzMF9mZF9zY19oZC92ZXJpbG9nL3ByaW1pdGl2ZXMudiIKKyAgICAgICBgaW5jbHVkZSAibGlicy5yZWYvc2t5MTMwX2ZkX3NjX2hkL3Zlcmlsb2cvc2t5MTMwX2ZkX3NjX2hkLnYiCisgICAgICAgYGluY2x1ZGUgImxpYnMucmVmL3NreTEzMF9mZF9zY19odmwvdmVyaWxvZy9wcmltaXRpdmVzLnYiCisgICAgICAgYGluY2x1ZGUgImxpYnMucmVmL3NreTEzMF9mZF9zY19odmwvdmVyaWxvZy9za3kxMzBfZmRfc2NfaHZsLnYiCisgICAgICAgYGluY2x1ZGUgImxpYnMucmVmLy9za3kxMzBfZmRfc2NfaGQvdmVyaWxvZy9za3kxMzBfZWZfc2NfaGRfX2Zha2VkaW9kZV8yLnYiCisKKyAgICAgICAgYGluY2x1ZGUgImdsYmxfY2ZnLnYiCisgICAgICAgIGBpbmNsdWRlICJzcGlfbWFzdGVyLnYiCisgICAgICAgIGBpbmNsdWRlICJ1YXJ0X2kyY20udiIKKyAgICAgICAgYGluY2x1ZGUgIndiX2ludGVyY29ubmVjdC52IgorICAgICAgICBgaW5jbHVkZSAidXNlcl9wcm9qZWN0X3dyYXBwZXIudiIKKyAgICAgICAgYGluY2x1ZGUgInlpZml2ZS52IgorICAgICAgICBgaW5jbHVkZSAid2JfaG9zdC52IgorCWBpbmNsdWRlICJjbGtfc2tld19hZGp1c3QudiIKKwlgaW5jbHVkZSAiY2xrX2J1Zi52IgorCitgZWxzZQorICAgICBgaW5jbHVkZSAibGlicy5yZWYvc2t5MTMwX2ZkX3NjX2hkL3Zlcmlsb2cvcHJpbWl0aXZlcy52IgorICAgICBgaW5jbHVkZSAibGlicy5yZWYvc2t5MTMwX2ZkX3NjX2hkL3Zlcmlsb2cvc2t5MTMwX2ZkX3NjX2hkLnYiCisgICAgIGBpbmNsdWRlICJsaWJzLnJlZi9za3kxMzBfZmRfc2NfaHZsL3Zlcmlsb2cvcHJpbWl0aXZlcy52IgorICAgICBgaW5jbHVkZSAibGlicy5yZWYvc2t5MTMwX2ZkX3NjX2h2bC92ZXJpbG9nL3NreTEzMF9mZF9zY19odmwudiIKKworICAgICBgaW5jbHVkZSJzYXJfYWRjL1NBUi5zdiIKKyAgICAgYGluY2x1ZGUic2FyX2FkYy9BQ01QLnN2IgorICAgICBgaW5jbHVkZSJzYXJfYWRjL3Nhcl9hZGMuc3YiCisgICAgIGBpbmNsdWRlInNhcl9hZGMvYWRjX3JlZy5zdiIKKyAgICAgYGluY2x1ZGUic2FyX2FkYy9EQUNfOEJJVC52IgorCisKKyAgICAgYGluY2x1ZGUgInNyYW1fbWFjcm9zL3NreTEzMF9zcmFtXzJrYnl0ZV8xcncxcl8zMng1MTJfOC52IgorICAgICBgaW5jbHVkZSAicGlubXV4L3NyYy9waW5tdXguc3YiCisgICAgIGBpbmNsdWRlICJwaW5tdXgvc3JjL3Bpbm11eF9yZWcuc3YiCisgICAgIGBpbmNsdWRlICJwaW5tdXgvc3JjL2dwaW9faW50ci5zdiIKKyAgICAgYGluY2x1ZGUgInBpbm11eC9zcmMvcHdtLnN2IgorICAgICBgaW5jbHVkZSAibGliL3B1bHNlX2dlbl90eXBlMS5zdiIKKyAgICAgYGluY2x1ZGUgImxpYi9wdWxzZV9nZW5fdHlwZTIuc3YiCisKKyAgICAgYGluY2x1ZGUgInFzcGltL3NyYy9xc3BpbV90b3Auc3YiCisgICAgIGBpbmNsdWRlICJxc3BpbS9zcmMvcXNwaW1faWYuc3YiCisgICAgIGBpbmNsdWRlICJxc3BpbS9zcmMvcXNwaW1fZmlmby5zdiIKKyAgICAgYGluY2x1ZGUgInFzcGltL3NyYy9xc3BpbV9yZWdzLnN2IgorICAgICBgaW5jbHVkZSAicXNwaW0vc3JjL3FzcGltX2Nsa2dlbi5zdiIKKyAgICAgYGluY2x1ZGUgInFzcGltL3NyYy9xc3BpbV9jdHJsLnN2IgorICAgICBgaW5jbHVkZSAicXNwaW0vc3JjL3FzcGltX3J4LnN2IgorICAgICBgaW5jbHVkZSAicXNwaW0vc3JjL3FzcGltX3R4LnN2IgorCisgICAgIGBpbmNsdWRlICJ1YXJ0L3NyYy91YXJ0X2NvcmUuc3YiCisgICAgIGBpbmNsdWRlICJ1YXJ0L3NyYy91YXJ0X2NmZy5zdiIKKyAgICAgYGluY2x1ZGUgInVhcnQvc3JjL3VhcnRfcnhmc20uc3YiCisgICAgIGBpbmNsdWRlICJ1YXJ0L3NyYy91YXJ0X3R4ZnNtLnN2IgorICAgICBgaW5jbHVkZSAibGliL2FzeW5jX2ZpZm9fdGguc3YiICAKKyAgICAgYGluY2x1ZGUgImxpYi9yZXNldF9zeW5jLnN2IiAgCisgICAgIGBpbmNsdWRlICJsaWIvZG91YmxlX3N5bmNfbG93LnYiICAKKyAgICAgYGluY2x1ZGUgImxpYi9jbGtfYnVmLnYiICAKKworICAgICBgaW5jbHVkZSAiaTJjbS9zcmMvY29yZS9pMmNtX2JpdF9jdHJsLnYiCisgICAgIGBpbmNsdWRlICJpMmNtL3NyYy9jb3JlL2kyY21fYnl0ZV9jdHJsLnYiCisgICAgIGBpbmNsdWRlICJpMmNtL3NyYy9jb3JlL2kyY21fdG9wLnYiCisKKyAgICAgYGluY2x1ZGUgInVzYjFfaG9zdC9zcmMvY29yZS91c2JoX2NvcmUuc3YiCisgICAgIGBpbmNsdWRlICJ1c2IxX2hvc3Qvc3JjL2NvcmUvdXNiaF9jcmMxNi5zdiIKKyAgICAgYGluY2x1ZGUgInVzYjFfaG9zdC9zcmMvY29yZS91c2JoX2NyYzUuc3YiCisgICAgIGBpbmNsdWRlICJ1c2IxX2hvc3Qvc3JjL2NvcmUvdXNiaF9maWZvLnN2IgorICAgICBgaW5jbHVkZSAidXNiMV9ob3N0L3NyYy9jb3JlL3VzYmhfc2llLnN2IgorICAgICBgaW5jbHVkZSAidXNiMV9ob3N0L3NyYy9waHkvdXNiX2ZzX3BoeS52IgorICAgICBgaW5jbHVkZSAidXNiMV9ob3N0L3NyYy9waHkvdXNiX3RyYW5zY2VpdmVyLnYiCisgICAgIGBpbmNsdWRlICJ1c2IxX2hvc3Qvc3JjL3RvcC91c2IxX2hvc3Quc3YiCisKKyAgICAgYGluY2x1ZGUgInNzcGltL3NyYy9zc3BpbV90b3Auc3YiICAKKyAgICAgYGluY2x1ZGUgInNzcGltL3NyYy9zc3BpbV9jdGwuc3YiICAKKyAgICAgYGluY2x1ZGUgInNzcGltL3NyYy9zc3BpbV9pZi5zdiIKKyAgICAgYGluY2x1ZGUgInNzcGltL3NyYy9zc3BpbV9jZmcuc3YiCisKKworICAgICBgaW5jbHVkZSAidWFydF9pMmNfdXNiX3NwaS9zcmMvdWFydF9pMmNfdXNiX3NwaS5zdiIKKworICAgICBgaW5jbHVkZSAibGliL2FzeW5jX2ZpZm8uc3YiICAKKyAgICAgYGluY2x1ZGUgImxpYi9yZWdpc3RlcnMudiIKKyAgICAgYGluY2x1ZGUgImxpYi9jbGtfY3RsLnYiCisgICAgIGBpbmNsdWRlICJsaWIvc2VyX2luZl8zMmIuc3YiCisgICAgIGBpbmNsdWRlICJsaWIvc2VyX3NoaWZ0LnN2IgorICAgICBgaW5jbHVkZSAiZGlnaXRhbF9jb3JlL3NyYy9nbGJsX2NmZy5zdiIKKworICAgICBgaW5jbHVkZSAid2JfaG9zdC9zcmMvd2JfaG9zdC5zdiIKKyAgICAgYGluY2x1ZGUgImxpYi9hc3luY193Yi5zdiIKKworICAgICBgaW5jbHVkZSAibGliL3N5bmNfd2JiLnN2IgorICAgICBgaW5jbHVkZSAibGliL3N5bmNfZmlmbzIuc3YiCisgICAgIGBpbmNsdWRlICJ3Yl9pbnRlcmNvbm5lY3Qvc3JjL3diX2FyYi5zdiIKKyAgICAgYGluY2x1ZGUgIndiX2ludGVyY29ubmVjdC9zcmMvd2JfaW50ZXJjb25uZWN0LnN2IgorCisKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxYy9zcmMvY29yZS9waXBlbGluZS95Y3IxX3BpcGVfaGR1LnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjFjL3NyYy9jb3JlL3BpcGVsaW5lL3ljcjFfcGlwZV90ZHUuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL2NvcmUvcGlwZWxpbmUveWNyMV9pcGljLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjFjL3NyYy9jb3JlL3BpcGVsaW5lL3ljcjFfcGlwZV9jc3Iuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL2NvcmUvcGlwZWxpbmUveWNyMV9waXBlX2V4dS5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxYy9zcmMvY29yZS9waXBlbGluZS95Y3IxX3BpcGVfaWFsdS5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxYy9zcmMvY29yZS9waXBlbGluZS95Y3IxX3BpcGVfaWR1LnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjFjL3NyYy9jb3JlL3BpcGVsaW5lL3ljcjFfcGlwZV9pZnUuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL2NvcmUvcGlwZWxpbmUveWNyMV9waXBlX2xzdS5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxYy9zcmMvY29yZS9waXBlbGluZS95Y3IxX3BpcGVfbXByZi5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxYy9zcmMvY29yZS9waXBlbGluZS95Y3IxX3BpcGVfbXVsLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjFjL3NyYy9jb3JlL3BpcGVsaW5lL3ljcjFfcGlwZV9kaXYuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL2NvcmUvcGlwZWxpbmUveWNyMV9waXBlX3RvcC5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxYy9zcmMvY29yZS9wcmltaXRpdmVzL3ljcjFfcmVzZXRfY2VsbHMuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL2NvcmUvcHJpbWl0aXZlcy95Y3IxX2NnLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjFjL3NyYy9jb3JlL3ljcjFfY2xrX2N0cmwuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL2NvcmUveWNyMV90YXBjX3NoaWZ0X3JlZy5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxYy9zcmMvY29yZS95Y3IxX3RhcGMuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL2NvcmUveWNyMV90YXBjX3N5bmNocm9uaXplci5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxYy9zcmMvY29yZS95Y3IxX2NvcmVfdG9wLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjFjL3NyYy9jb3JlL3ljcjFfZG0uc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL2NvcmUveWNyMV9kbWkuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL2NvcmUveWNyMV9zY3Uuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL3RvcC95Y3IxX2ltZW1fcm91dGVyLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjFjL3NyYy90b3AveWNyMV9kbWVtX3JvdXRlci5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxYy9zcmMvdG9wL3ljcjFfZHBfbWVtb3J5LnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjFjL3NyYy90b3AveWNyMV90Y20uc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL3RvcC95Y3IxX3RpbWVyLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjFjL3NyYy90b3AveWNyMV9kbWVtX3diLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjFjL3NyYy90b3AveWNyMV9pbWVtX3diLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjFjL3NyYy90b3AveWNyMV9pbnRmLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjFjL3NyYy90b3AveWNyMV90b3Bfd2Iuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL3RvcC95Y3IxX2ljYWNoZV9yb3V0ZXIuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL3RvcC95Y3IxX2RjYWNoZV9yb3V0ZXIuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL2NhY2hlL3NyYy9jb3JlL2ljYWNoZV90b3Auc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL2NhY2hlL3NyYy9jb3JlL2ljYWNoZV9hcHBfZnNtLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjFjL3NyYy9jYWNoZS9zcmMvY29yZS9pY2FjaGVfdGFnX2ZpZm8uc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL2NhY2hlL3NyYy9jb3JlL2RjYWNoZV90YWdfZmlmby5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxYy9zcmMvY2FjaGUvc3JjL2NvcmUvZGNhY2hlX3RvcC5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxYy9zcmMvbGliL3ljcjFfYXN5bmNfd2JiLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjFjL3NyYy9saWIveWNyMV9hcmIuc3YiCisKKyAgICAgYGluY2x1ZGUgImxpYi9zeW5jX2ZpZm8uc3YiCisKKyAgICAgYGluY2x1ZGUgIm1iaXN0L3NyYy9jb3JlL21iaXN0X2FkZHJfZ2VuLnN2IgorICAgICBgaW5jbHVkZSAibWJpc3Qvc3JjL2NvcmUvbWJpc3RfZnNtLnN2IiAKKyAgICAgYGluY2x1ZGUgIm1iaXN0L3NyYy9jb3JlL21iaXN0X29wX3NlbC5zdiIgCisgICAgIGBpbmNsdWRlICJtYmlzdC9zcmMvY29yZS9tYmlzdF9yZXBhaXJfYWRkci5zdiIgCisgICAgIGBpbmNsdWRlICJtYmlzdC9zcmMvY29yZS9tYmlzdF9zdGlfc2VsLnN2IiAKKyAgICAgYGluY2x1ZGUgIm1iaXN0L3NyYy9jb3JlL21iaXN0X3BhdF9zZWwuc3YiCisgICAgIGBpbmNsdWRlICJtYmlzdC9zcmMvY29yZS9tYmlzdF9tdXguc3YiCisgICAgIGBpbmNsdWRlICJtYmlzdC9zcmMvY29yZS9tYmlzdF9kYXRhX2NtcC5zdiIKKyAgICAgYGluY2x1ZGUgIm1iaXN0L3NyYy9jb3JlL21iaXN0X21lbV93cmFwcGVyLnN2IgorCisgICAgYGluY2x1ZGUgIm1iaXN0L3NyYy90b3AvbWJpc3RfdG9wLnN2IiAKKyAgICBgaW5jbHVkZSAibWJpc3Rfd3JhcHBlci9zcmMvbWJpc3Rfd2Iuc3YiIAorICAgIGBpbmNsdWRlICJtYmlzdF93cmFwcGVyL3NyYy9tYmlzdF93cmFwcGVyLnN2IiAKKworCisgICAgYGluY2x1ZGUgInVhcnQyd2Ivc3JjL3VhcnQyd2Iuc3YiIAorICAgIGBpbmNsdWRlICJ1YXJ0MndiL3NyYy91YXJ0Ml9jb3JlLnN2IiAKKyAgICBgaW5jbHVkZSAidWFydDJ3Yi9zcmMvdWFydF9tc2dfaGFuZGxlci52IiAKKyAgICAgYGluY2x1ZGUgImxpYi9hc3luY19yZWdfYnVzLnN2IgorCisgICAgIGBpbmNsdWRlICJ1c2VyX3Byb2plY3Rfd3JhcHBlci52IgorICAgICAvLyB3ZSBhcmUgdXNpbmcgbmV0bGlzdCBmaWxlIGZvciBjbGtfc2tld19hZGp1c3QgYXMgaXQgaGFzIAorICAgICAvLyBzdGFuZGFyZCBjZWxsICsgcG93ZXIgcGluCisgICAgIGBpbmNsdWRlICJjbGtfc2tld19hZGp1c3Qvc3JjL2Nsa19za2V3X2FkanVzdC52IgorICAgICBgaW5jbHVkZSAibGliL2N0ZWNoX2NlbGxzLnN2IgorYGVuZGlmCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL2NvcmUvdXNiaF9jb3JlLnN2IGIvdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9jb3JlL3VzYmhfY29yZS5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGZmZWNiCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9jb3JlL3VzYmhfY29yZS5zdgpAQCAtMCwwICsxLDEwMTkgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICAgICAgICAgICAgICAgICAgICBVU0IgRnVsbCBTcGVlZCBIb3N0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIFYwLjYKKy8vICAgICAgICAgICAgICAgICAgICAgVWx0cmEtRW1iZWRkZWQuY29tCisvLyAgICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDE1LTIwMjAKKy8vCisvLyAgICAgICAgICAgICAgICAgRW1haWw6IGFkbWluQHVsdHJhLWVtYmVkZGVkLmNvbQorLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgIExpY2Vuc2U6IEdQTAorLy8gSWYgeW91IHdvdWxkIGxpa2UgYSB2ZXJzaW9uIHdpdGggYSBtb3JlIHBlcm1pc3NpdmUgbGljZW5zZSBmb3IKKy8vIHVzZSBpbiBjbG9zZWQgc291cmNlIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zIHBsZWFzZSBjb250YWN0IG1lCisvLyBmb3IgZGV0YWlscy4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisvLyBUaGlzIGZpbGUgaXMgb3BlbiBzb3VyY2UgSERMOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisvLyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKy8vIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorLy8gdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy8vCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgCisvLyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisvLyBVU0EKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlZCBGaWxlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BpbmNsdWRlICJ1c2JoX2hvc3RfZGVmcy52IgorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNb2R1bGU6ICBVU0IgSG9zdCBJUAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbW9kdWxlIHVzYmhfY29yZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUGFyYW1zCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjKAorICAgICBwYXJhbWV0ZXIgVVNCX0NMS19GUkVRICAgICA9IDQ4MDAwMDAwCispCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQb3J0cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKAorICAgIC8vIElucHV0cworICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgIGNsa19pLAorICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgIHJzdG5faSwKKworICAgIC8vIFJlZyBCdXMgSW50ZXJmYWNlIFNpZ25hbAorICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgIHJlZ19jcywKKyAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICByZWdfd3IsCisgICAgaW5wdXQgbG9naWMgWzU6MF0gICAgICAgcmVnX2FkZHIsCisgICAgaW5wdXQgbG9naWMgWzMxOjBdICAgICAgcmVnX3dkYXRhLAorICAgIGlucHV0IGxvZ2ljIFszOjBdICAgICAgIHJlZ19iZSwKKworICAgLy8gT3V0cHV0cworICAgIG91dHB1dCBsb2dpYyBbMzE6MF0gICAgIHJlZ19yZGF0YSwKKyAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICByZWdfYWNrLAorCisgICAgLy8gVVRNSSBJbnB1dAorICAgIGlucHV0ICBsb2dpYyBbNzowXSAgIHV0bWlfZGF0YV9pbl9pLAorICAgIGlucHV0ICBsb2dpYyAgICAgICAgIHV0bWlfdHhyZWFkeV9pLAorICAgIGlucHV0ICBsb2dpYyAgICAgICAgIHV0bWlfcnh2YWxpZF9pLAorICAgIGlucHV0ICBsb2dpYyAgICAgICAgIHV0bWlfcnhhY3RpdmVfaSwKKyAgICBpbnB1dCAgbG9naWMgICAgICAgICB1dG1pX3J4ZXJyb3JfaSwKKyAgICBpbnB1dCAgbG9naWMgWzE6MF0gICB1dG1pX2xpbmVzdGF0ZV9pLAorCisgICAgLy8gVVRNSSBPdXRwdXRzCisgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgaW50cl9vLAorICAgIG91dHB1dCBsb2dpYyBbNzowXSAgIHV0bWlfZGF0YV9vdXRfbywKKyAgICBvdXRwdXQgbG9naWMgICAgICAgICB1dG1pX3R4dmFsaWRfbywKKyAgICBvdXRwdXQgbG9naWMgWzE6MF0gICB1dG1pX29wX21vZGVfbywKKyAgICBvdXRwdXQgbG9naWMgWzE6MF0gICB1dG1pX3hjdnJzZWxlY3RfbywKKyAgICBvdXRwdXQgbG9naWMgICAgICAgICB1dG1pX3Rlcm1zZWxlY3RfbywKKyAgICBvdXRwdXQgbG9naWMgICAgICAgICB1dG1pX2RwcHVsbGRvd25fbywKKyAgICBvdXRwdXQgbG9naWMgICAgICAgICB1dG1pX2RtcHVsbGRvd25fbworKTsKKworCityZWcgWzMxOjBdIHJlZ19yZGF0YV9yOword2lyZSBbMTU6MF0gIHVzYl9zdGF0dXNfc29mX3RpbWVfaW5fdzsKK3dpcmUgICAgICAgIHVzYl9zdGF0dXNfcnhfZXJyb3JfaW5fdzsKK3dpcmUgWzE6MF0gIHVzYl9zdGF0dXNfbGluZXN0YXRlX2JpdHNfaW5fdzsKK3dpcmUgICAgICAgIHVzYl9pcnFfc3RzX2RldmljZV9kZXRlY3RfaW5fdzsKK3dpcmUgICAgICAgIHVzYl9pcnFfc3RzX2Vycl9pbl93Oword2lyZSAgICAgICAgdXNiX2lycV9zdHNfZG9uZV9pbl93Oword2lyZSAgICAgICAgdXNiX2lycV9zdHNfc29mX2luX3c7Cit3aXJlICAgICAgICB1c2Jfcnhfc3RhdF9zdGFydF9wZW5kX2luX3c7Cit3aXJlICAgICAgICB1c2Jfcnhfc3RhdF9jcmNfZXJyX2luX3c7Cit3aXJlICAgICAgICB1c2Jfcnhfc3RhdF9yZXNwX3RpbWVvdXRfaW5fdzsKK3dpcmUgICAgICAgIHVzYl9yeF9zdGF0X2lkbGVfaW5fdzsKK3dpcmUgWzc6MF0gIHVzYl9yeF9zdGF0X3Jlc3BfYml0c19pbl93Oword2lyZSBbMTU6MF0gIHVzYl9yeF9zdGF0X2NvdW50X2JpdHNfaW5fdzsKK3dpcmUgWzc6MF0gIHVzYl9yZF9kYXRhX2RhdGFfaW5fdzsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVhZCBwYXRoIG11eAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitsb2dpYyBjZmdfd3I7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQorYmVnaW4gOiBwcmVnX291dF9TZXEKKyAgIGlmIChyc3RuX2kgPT0gMSdiMCkgYmVnaW4KKyAgICAgIHJlZ19yZGF0YSBbMzE6MF0gIDw9IDMyJ2gwMDAwXzAwMDA7CisgICAgICByZWdfYWNrICAgICAgICAgICA8PSAxJ2IwOworICAgICAgY2ZnX3dyICAgICAgICAgICAgPD0gMSdiMDsKKyAgIGVuZCBlbHNlIGlmIChyZWdfY3MgJiYgKHJlZ193ciA9PSAwKSAgJiYgIXJlZ19hY2spIGJlZ2luCisgICAgICByZWdfcmRhdGEgWzMxOjBdICA8PSByZWdfcmRhdGFfciBbMzE6MF07CisgICAgICByZWdfYWNrICAgICAgICAgICA8PSAxJ2IxOworICAgZW5kIGVsc2UgaWYgKHJlZ19jcyAmJiAocmVnX3dyID09IDEpICYmICFyZWdfYWNrKSBiZWdpbiAKKyAgICAgIHJlZ19hY2sgICAgICAgICAgIDw9IDEnYjE7CisgICAgICBjZmdfd3IgICAgICAgICAgICA8PSAxJ2IxOworICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgIHJlZ19hY2sgICAgICAgIDw9IDEnYjA7CisgICAgICBjZmdfd3IgICAgICAgICA8PSAxJ2IwOworICAgZW5kCitlbmQKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZWdpc3RlciB1c2JfY3RybAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVnIHVzYl9jdHJsX3dyX3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgdXNiX2N0cmxfd3JfcSA8PSAxJ2IwOworZWxzZSBpZiAoY2ZnX3dyICYmIChyZWdfYWRkcls1OjBdID09IGBVU0JfQ1RSTCkpCisgICAgdXNiX2N0cmxfd3JfcSA8PSAxJ2IxOworZWxzZQorICAgIHVzYl9jdHJsX3dyX3EgPD0gMSdiMDsKKworLy8gdXNiX2N0cmxfdHhfZmx1c2ggW2F1dG9fY2xyXQorcmVnICAgICAgICB1c2JfY3RybF90eF9mbHVzaF9xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHVzYl9jdHJsX3R4X2ZsdXNoX3EgPD0gMSdkYFVTQl9DVFJMX1RYX0ZMVVNIX0RFRkFVTFQ7CitlbHNlIGlmIChjZmdfd3IgJiYgKHJlZ19hZGRyWzU6MF0gPT0gYFVTQl9DVFJMKSkKKyAgICB1c2JfY3RybF90eF9mbHVzaF9xIDw9IHJlZ193ZGF0YVtgVVNCX0NUUkxfVFhfRkxVU0hfUl07CitlbHNlCisgICAgdXNiX2N0cmxfdHhfZmx1c2hfcSA8PSAxJ2RgVVNCX0NUUkxfVFhfRkxVU0hfREVGQVVMVDsKKword2lyZSAgICAgICAgdXNiX2N0cmxfdHhfZmx1c2hfb3V0X3cgPSB1c2JfY3RybF90eF9mbHVzaF9xOworCisKKy8vIHVzYl9jdHJsX3BoeV9kbXB1bGxkb3duIFtpbnRlcm5hbF0KK3JlZyAgICAgICAgdXNiX2N0cmxfcGh5X2RtcHVsbGRvd25fcTsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICB1c2JfY3RybF9waHlfZG1wdWxsZG93bl9xIDw9IDEnZGBVU0JfQ1RSTF9QSFlfRE1QVUxMRE9XTl9ERUZBVUxUOworZWxzZSBpZiAoY2ZnX3dyICYmIChyZWdfYWRkcls1OjBdID09IGBVU0JfQ1RSTCkpCisgICAgdXNiX2N0cmxfcGh5X2RtcHVsbGRvd25fcSA8PSByZWdfd2RhdGFbYFVTQl9DVFJMX1BIWV9ETVBVTExET1dOX1JdOworCit3aXJlICAgICAgICB1c2JfY3RybF9waHlfZG1wdWxsZG93bl9vdXRfdyA9IHVzYl9jdHJsX3BoeV9kbXB1bGxkb3duX3E7CisKKworLy8gdXNiX2N0cmxfcGh5X2RwcHVsbGRvd24gW2ludGVybmFsXQorcmVnICAgICAgICB1c2JfY3RybF9waHlfZHBwdWxsZG93bl9xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHVzYl9jdHJsX3BoeV9kcHB1bGxkb3duX3EgPD0gMSdkYFVTQl9DVFJMX1BIWV9EUFBVTExET1dOX0RFRkFVTFQ7CitlbHNlIGlmIChjZmdfd3IgJiYgKHJlZ19hZGRyWzU6MF0gPT0gYFVTQl9DVFJMKSkKKyAgICB1c2JfY3RybF9waHlfZHBwdWxsZG93bl9xIDw9IHJlZ193ZGF0YVtgVVNCX0NUUkxfUEhZX0RQUFVMTERPV05fUl07CisKK3dpcmUgICAgICAgIHVzYl9jdHJsX3BoeV9kcHB1bGxkb3duX291dF93ID0gdXNiX2N0cmxfcGh5X2RwcHVsbGRvd25fcTsKKworCisvLyB1c2JfY3RybF9waHlfdGVybXNlbGVjdCBbaW50ZXJuYWxdCityZWcgICAgICAgIHVzYl9jdHJsX3BoeV90ZXJtc2VsZWN0X3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgdXNiX2N0cmxfcGh5X3Rlcm1zZWxlY3RfcSA8PSAxJ2RgVVNCX0NUUkxfUEhZX1RFUk1TRUxFQ1RfREVGQVVMVDsKK2Vsc2UgaWYgKGNmZ193ciAmJiAocmVnX2FkZHJbNTowXSA9PSBgVVNCX0NUUkwpKQorICAgIHVzYl9jdHJsX3BoeV90ZXJtc2VsZWN0X3EgPD0gcmVnX3dkYXRhW2BVU0JfQ1RSTF9QSFlfVEVSTVNFTEVDVF9SXTsKKword2lyZSAgICAgICAgdXNiX2N0cmxfcGh5X3Rlcm1zZWxlY3Rfb3V0X3cgPSB1c2JfY3RybF9waHlfdGVybXNlbGVjdF9xOworCisKKy8vIHVzYl9jdHJsX3BoeV94Y3Zyc2VsZWN0IFtpbnRlcm5hbF0KK3JlZyBbMTowXSAgdXNiX2N0cmxfcGh5X3hjdnJzZWxlY3RfcTsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICB1c2JfY3RybF9waHlfeGN2cnNlbGVjdF9xIDw9IDInZGBVU0JfQ1RSTF9QSFlfWENWUlNFTEVDVF9ERUZBVUxUOworZWxzZSBpZiAoY2ZnX3dyICYmIChyZWdfYWRkcls1OjBdID09IGBVU0JfQ1RSTCkpCisgICAgdXNiX2N0cmxfcGh5X3hjdnJzZWxlY3RfcSA8PSByZWdfd2RhdGFbYFVTQl9DVFJMX1BIWV9YQ1ZSU0VMRUNUX1JdOworCit3aXJlIFsxOjBdICB1c2JfY3RybF9waHlfeGN2cnNlbGVjdF9vdXRfdyA9IHVzYl9jdHJsX3BoeV94Y3Zyc2VsZWN0X3E7CisKKworLy8gdXNiX2N0cmxfcGh5X29wbW9kZSBbaW50ZXJuYWxdCityZWcgWzE6MF0gIHVzYl9jdHJsX3BoeV9vcG1vZGVfcTsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICB1c2JfY3RybF9waHlfb3Btb2RlX3EgPD0gMidkYFVTQl9DVFJMX1BIWV9PUE1PREVfREVGQVVMVDsKK2Vsc2UgaWYgKGNmZ193ciAmJiAocmVnX2FkZHJbNTowXSA9PSBgVVNCX0NUUkwpKQorICAgIHVzYl9jdHJsX3BoeV9vcG1vZGVfcSA8PSByZWdfd2RhdGFbYFVTQl9DVFJMX1BIWV9PUE1PREVfUl07CisKK3dpcmUgWzE6MF0gIHVzYl9jdHJsX3BoeV9vcG1vZGVfb3V0X3cgPSB1c2JfY3RybF9waHlfb3Btb2RlX3E7CisKKworLy8gdXNiX2N0cmxfZW5hYmxlX3NvZiBbaW50ZXJuYWxdCityZWcgICAgICAgIHVzYl9jdHJsX2VuYWJsZV9zb2ZfcTsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICB1c2JfY3RybF9lbmFibGVfc29mX3EgPD0gMSdkYFVTQl9DVFJMX0VOQUJMRV9TT0ZfREVGQVVMVDsKK2Vsc2UgaWYgKGNmZ193ciAmJiAocmVnX2FkZHJbNTowXSA9PSBgVVNCX0NUUkwpKQorICAgIHVzYl9jdHJsX2VuYWJsZV9zb2ZfcSA8PSByZWdfd2RhdGFbYFVTQl9DVFJMX0VOQUJMRV9TT0ZfUl07CisKK3dpcmUgICAgICAgIHVzYl9jdHJsX2VuYWJsZV9zb2Zfb3V0X3cgPSB1c2JfY3RybF9lbmFibGVfc29mX3E7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVnaXN0ZXIgdXNiX3N0YXR1cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVnIHVzYl9zdGF0dXNfd3JfcTsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICB1c2Jfc3RhdHVzX3dyX3EgPD0gMSdiMDsKK2Vsc2UgaWYgKGNmZ193ciAmJiAocmVnX2FkZHJbNTowXSA9PSBgVVNCX1NUQVRVUykpCisgICAgdXNiX3N0YXR1c193cl9xIDw9IDEnYjE7CitlbHNlCisgICAgdXNiX3N0YXR1c193cl9xIDw9IDEnYjA7CisKKworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlZ2lzdGVyIHVzYl9pcnFfYWNrCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityZWcgdXNiX2lycV9hY2tfd3JfcTsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICB1c2JfaXJxX2Fja193cl9xIDw9IDEnYjA7CitlbHNlIGlmIChjZmdfd3IgJiYgKHJlZ19hZGRyWzU6MF0gPT0gYFVTQl9JUlFfQUNLKSkKKyAgICB1c2JfaXJxX2Fja193cl9xIDw9IDEnYjE7CitlbHNlCisgICAgdXNiX2lycV9hY2tfd3JfcSA8PSAxJ2IwOworCisvLyB1c2JfaXJxX2Fja19kZXZpY2VfZGV0ZWN0IFthdXRvX2Nscl0KK3JlZyAgICAgICAgdXNiX2lycV9hY2tfZGV2aWNlX2RldGVjdF9xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHVzYl9pcnFfYWNrX2RldmljZV9kZXRlY3RfcSA8PSAxJ2RgVVNCX0lSUV9BQ0tfREVWSUNFX0RFVEVDVF9ERUZBVUxUOworZWxzZSBpZiAoY2ZnX3dyICYmIChyZWdfYWRkcls1OjBdID09IGBVU0JfSVJRX0FDSykpCisgICAgdXNiX2lycV9hY2tfZGV2aWNlX2RldGVjdF9xIDw9IHJlZ193ZGF0YVtgVVNCX0lSUV9BQ0tfREVWSUNFX0RFVEVDVF9SXTsKK2Vsc2UKKyAgICB1c2JfaXJxX2Fja19kZXZpY2VfZGV0ZWN0X3EgPD0gMSdkYFVTQl9JUlFfQUNLX0RFVklDRV9ERVRFQ1RfREVGQVVMVDsKKword2lyZSAgICAgICAgdXNiX2lycV9hY2tfZGV2aWNlX2RldGVjdF9vdXRfdyA9IHVzYl9pcnFfYWNrX2RldmljZV9kZXRlY3RfcTsKKworCisvLyB1c2JfaXJxX2Fja19lcnIgW2F1dG9fY2xyXQorcmVnICAgICAgICB1c2JfaXJxX2Fja19lcnJfcTsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICB1c2JfaXJxX2Fja19lcnJfcSA8PSAxJ2RgVVNCX0lSUV9BQ0tfRVJSX0RFRkFVTFQ7CitlbHNlIGlmIChjZmdfd3IgJiYgKHJlZ19hZGRyWzU6MF0gPT0gYFVTQl9JUlFfQUNLKSkKKyAgICB1c2JfaXJxX2Fja19lcnJfcSA8PSByZWdfd2RhdGFbYFVTQl9JUlFfQUNLX0VSUl9SXTsKK2Vsc2UKKyAgICB1c2JfaXJxX2Fja19lcnJfcSA8PSAxJ2RgVVNCX0lSUV9BQ0tfRVJSX0RFRkFVTFQ7CisKK3dpcmUgICAgICAgIHVzYl9pcnFfYWNrX2Vycl9vdXRfdyA9IHVzYl9pcnFfYWNrX2Vycl9xOworCisKKy8vIHVzYl9pcnFfYWNrX2RvbmUgW2F1dG9fY2xyXQorcmVnICAgICAgICB1c2JfaXJxX2Fja19kb25lX3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgdXNiX2lycV9hY2tfZG9uZV9xIDw9IDEnZGBVU0JfSVJRX0FDS19ET05FX0RFRkFVTFQ7CitlbHNlIGlmIChjZmdfd3IgJiYgKHJlZ19hZGRyWzU6MF0gPT0gYFVTQl9JUlFfQUNLKSkKKyAgICB1c2JfaXJxX2Fja19kb25lX3EgPD0gcmVnX3dkYXRhW2BVU0JfSVJRX0FDS19ET05FX1JdOworZWxzZQorICAgIHVzYl9pcnFfYWNrX2RvbmVfcSA8PSAxJ2RgVVNCX0lSUV9BQ0tfRE9ORV9ERUZBVUxUOworCit3aXJlICAgICAgICB1c2JfaXJxX2Fja19kb25lX291dF93ID0gdXNiX2lycV9hY2tfZG9uZV9xOworCisKKy8vIHVzYl9pcnFfYWNrX3NvZiBbYXV0b19jbHJdCityZWcgICAgICAgIHVzYl9pcnFfYWNrX3NvZl9xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHVzYl9pcnFfYWNrX3NvZl9xIDw9IDEnZGBVU0JfSVJRX0FDS19TT0ZfREVGQVVMVDsKK2Vsc2UgaWYgKGNmZ193ciAmJiAocmVnX2FkZHJbNTowXSA9PSBgVVNCX0lSUV9BQ0spKQorICAgIHVzYl9pcnFfYWNrX3NvZl9xIDw9IHJlZ193ZGF0YVtgVVNCX0lSUV9BQ0tfU09GX1JdOworZWxzZQorICAgIHVzYl9pcnFfYWNrX3NvZl9xIDw9IDEnZGBVU0JfSVJRX0FDS19TT0ZfREVGQVVMVDsKKword2lyZSAgICAgICAgdXNiX2lycV9hY2tfc29mX291dF93ID0gdXNiX2lycV9hY2tfc29mX3E7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVnaXN0ZXIgdXNiX2lycV9zdHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3JlZyB1c2JfaXJxX3N0c193cl9xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHVzYl9pcnFfc3RzX3dyX3EgPD0gMSdiMDsKK2Vsc2UgaWYgKGNmZ193ciAmJiAocmVnX2FkZHJbNTowXSA9PSBgVVNCX0lSUV9TVFMpKQorICAgIHVzYl9pcnFfc3RzX3dyX3EgPD0gMSdiMTsKK2Vsc2UKKyAgICB1c2JfaXJxX3N0c193cl9xIDw9IDEnYjA7CisKKworCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVnaXN0ZXIgdXNiX2lycV9tYXNrCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityZWcgdXNiX2lycV9tYXNrX3dyX3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgdXNiX2lycV9tYXNrX3dyX3EgPD0gMSdiMDsKK2Vsc2UgaWYgKGNmZ193ciAmJiAocmVnX2FkZHJbNTowXSA9PSBgVVNCX0lSUV9NQVNLKSkKKyAgICB1c2JfaXJxX21hc2tfd3JfcSA8PSAxJ2IxOworZWxzZQorICAgIHVzYl9pcnFfbWFza193cl9xIDw9IDEnYjA7CisKKy8vIHVzYl9pcnFfbWFza19kZXZpY2VfZGV0ZWN0IFtpbnRlcm5hbF0KK3JlZyAgICAgICAgdXNiX2lycV9tYXNrX2RldmljZV9kZXRlY3RfcTsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICB1c2JfaXJxX21hc2tfZGV2aWNlX2RldGVjdF9xIDw9IDEnZGBVU0JfSVJRX01BU0tfREVWSUNFX0RFVEVDVF9ERUZBVUxUOworZWxzZSBpZiAoY2ZnX3dyICYmIChyZWdfYWRkcls1OjBdID09IGBVU0JfSVJRX01BU0spKQorICAgIHVzYl9pcnFfbWFza19kZXZpY2VfZGV0ZWN0X3EgPD0gcmVnX3dkYXRhW2BVU0JfSVJRX01BU0tfREVWSUNFX0RFVEVDVF9SXTsKKword2lyZSAgICAgICAgdXNiX2lycV9tYXNrX2RldmljZV9kZXRlY3Rfb3V0X3cgPSB1c2JfaXJxX21hc2tfZGV2aWNlX2RldGVjdF9xOworCisKKy8vIHVzYl9pcnFfbWFza19lcnIgW2ludGVybmFsXQorcmVnICAgICAgICB1c2JfaXJxX21hc2tfZXJyX3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgdXNiX2lycV9tYXNrX2Vycl9xIDw9IDEnZGBVU0JfSVJRX01BU0tfRVJSX0RFRkFVTFQ7CitlbHNlIGlmIChjZmdfd3IgJiYgKHJlZ19hZGRyWzU6MF0gPT0gYFVTQl9JUlFfTUFTSykpCisgICAgdXNiX2lycV9tYXNrX2Vycl9xIDw9IHJlZ193ZGF0YVtgVVNCX0lSUV9NQVNLX0VSUl9SXTsKKword2lyZSAgICAgICAgdXNiX2lycV9tYXNrX2Vycl9vdXRfdyA9IHVzYl9pcnFfbWFza19lcnJfcTsKKworCisvLyB1c2JfaXJxX21hc2tfZG9uZSBbaW50ZXJuYWxdCityZWcgICAgICAgIHVzYl9pcnFfbWFza19kb25lX3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgdXNiX2lycV9tYXNrX2RvbmVfcSA8PSAxJ2RgVVNCX0lSUV9NQVNLX0RPTkVfREVGQVVMVDsKK2Vsc2UgaWYgKGNmZ193ciAmJiAocmVnX2FkZHJbNTowXSA9PSBgVVNCX0lSUV9NQVNLKSkKKyAgICB1c2JfaXJxX21hc2tfZG9uZV9xIDw9IHJlZ193ZGF0YVtgVVNCX0lSUV9NQVNLX0RPTkVfUl07CisKK3dpcmUgICAgICAgIHVzYl9pcnFfbWFza19kb25lX291dF93ID0gdXNiX2lycV9tYXNrX2RvbmVfcTsKKworCisvLyB1c2JfaXJxX21hc2tfc29mIFtpbnRlcm5hbF0KK3JlZyAgICAgICAgdXNiX2lycV9tYXNrX3NvZl9xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHVzYl9pcnFfbWFza19zb2ZfcSA8PSAxJ2RgVVNCX0lSUV9NQVNLX1NPRl9ERUZBVUxUOworZWxzZSBpZiAoY2ZnX3dyICYmIChyZWdfYWRkcls1OjBdID09IGBVU0JfSVJRX01BU0spKQorICAgIHVzYl9pcnFfbWFza19zb2ZfcSA8PSByZWdfd2RhdGFbYFVTQl9JUlFfTUFTS19TT0ZfUl07CisKK3dpcmUgICAgICAgIHVzYl9pcnFfbWFza19zb2Zfb3V0X3cgPSB1c2JfaXJxX21hc2tfc29mX3E7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVnaXN0ZXIgdXNiX3hmZXJfZGF0YQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVnIHVzYl94ZmVyX2RhdGFfd3JfcTsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICB1c2JfeGZlcl9kYXRhX3dyX3EgPD0gMSdiMDsKK2Vsc2UgaWYgKGNmZ193ciAmJiAocmVnX2FkZHJbNTowXSA9PSBgVVNCX1hGRVJfREFUQSkpCisgICAgdXNiX3hmZXJfZGF0YV93cl9xIDw9IDEnYjE7CitlbHNlCisgICAgdXNiX3hmZXJfZGF0YV93cl9xIDw9IDEnYjA7CisKKy8vIHVzYl94ZmVyX2RhdGFfdHhfbGVuIFtpbnRlcm5hbF0KK3JlZyBbMTU6MF0gIHVzYl94ZmVyX2RhdGFfdHhfbGVuX3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgdXNiX3hmZXJfZGF0YV90eF9sZW5fcSA8PSAxNidkYFVTQl9YRkVSX0RBVEFfVFhfTEVOX0RFRkFVTFQ7CitlbHNlIGlmIChjZmdfd3IgJiYgKHJlZ19hZGRyWzU6MF0gPT0gYFVTQl9YRkVSX0RBVEEpKQorICAgIHVzYl94ZmVyX2RhdGFfdHhfbGVuX3EgPD0gcmVnX3dkYXRhW2BVU0JfWEZFUl9EQVRBX1RYX0xFTl9SXTsKKword2lyZSBbMTU6MF0gIHVzYl94ZmVyX2RhdGFfdHhfbGVuX291dF93ID0gdXNiX3hmZXJfZGF0YV90eF9sZW5fcTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZWdpc3RlciB1c2JfeGZlcl90b2tlbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVnIHVzYl94ZmVyX3Rva2VuX3dyX3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgdXNiX3hmZXJfdG9rZW5fd3JfcSA8PSAxJ2IwOworZWxzZSBpZiAoY2ZnX3dyICYmIChyZWdfYWRkcls1OjBdID09IGBVU0JfWEZFUl9UT0tFTikpCisgICAgdXNiX3hmZXJfdG9rZW5fd3JfcSA8PSAxJ2IxOworZWxzZQorICAgIHVzYl94ZmVyX3Rva2VuX3dyX3EgPD0gMSdiMDsKKworLy8gdXNiX3hmZXJfdG9rZW5fc3RhcnQgW2NsZWFyYWJsZV0KK3JlZyAgICAgICAgdXNiX3hmZXJfdG9rZW5fc3RhcnRfcTsKKword2lyZSB1c2JfeGZlcl90b2tlbl9zdGFydF9hY2tfaW5fdzsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICB1c2JfeGZlcl90b2tlbl9zdGFydF9xIDw9IDEnYjA7CitlbHNlIGlmIChjZmdfd3IgJiYgKHJlZ19hZGRyWzU6MF0gPT0gYFVTQl9YRkVSX1RPS0VOKSkKKyAgICB1c2JfeGZlcl90b2tlbl9zdGFydF9xIDw9IHJlZ193ZGF0YVtgVVNCX1hGRVJfVE9LRU5fU1RBUlRfUl07CitlbHNlIGlmICh1c2JfeGZlcl90b2tlbl9zdGFydF9hY2tfaW5fdykKKyAgICB1c2JfeGZlcl90b2tlbl9zdGFydF9xIDw9IDEnYjA7CisKK3dpcmUgICAgICAgIHVzYl94ZmVyX3Rva2VuX3N0YXJ0X291dF93ID0gdXNiX3hmZXJfdG9rZW5fc3RhcnRfcTsKKworCisvLyB1c2JfeGZlcl90b2tlbl9pbiBbaW50ZXJuYWxdCityZWcgICAgICAgIHVzYl94ZmVyX3Rva2VuX2luX3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgdXNiX3hmZXJfdG9rZW5faW5fcSA8PSAxJ2RgVVNCX1hGRVJfVE9LRU5fSU5fREVGQVVMVDsKK2Vsc2UgaWYgKGNmZ193ciAmJiAocmVnX2FkZHJbNTowXSA9PSBgVVNCX1hGRVJfVE9LRU4pKQorICAgIHVzYl94ZmVyX3Rva2VuX2luX3EgPD0gcmVnX3dkYXRhW2BVU0JfWEZFUl9UT0tFTl9JTl9SXTsKKword2lyZSAgICAgICAgdXNiX3hmZXJfdG9rZW5faW5fb3V0X3cgPSB1c2JfeGZlcl90b2tlbl9pbl9xOworCisKKy8vIHVzYl94ZmVyX3Rva2VuX2FjayBbaW50ZXJuYWxdCityZWcgICAgICAgIHVzYl94ZmVyX3Rva2VuX2Fja19xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHVzYl94ZmVyX3Rva2VuX2Fja19xIDw9IDEnZGBVU0JfWEZFUl9UT0tFTl9BQ0tfREVGQVVMVDsKK2Vsc2UgaWYgKGNmZ193ciAmJiAocmVnX2FkZHJbNTowXSA9PSBgVVNCX1hGRVJfVE9LRU4pKQorICAgIHVzYl94ZmVyX3Rva2VuX2Fja19xIDw9IHJlZ193ZGF0YVtgVVNCX1hGRVJfVE9LRU5fQUNLX1JdOworCit3aXJlICAgICAgICB1c2JfeGZlcl90b2tlbl9hY2tfb3V0X3cgPSB1c2JfeGZlcl90b2tlbl9hY2tfcTsKKworCisvLyB1c2JfeGZlcl90b2tlbl9waWRfZGF0YXggW2ludGVybmFsXQorcmVnICAgICAgICB1c2JfeGZlcl90b2tlbl9waWRfZGF0YXhfcTsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICB1c2JfeGZlcl90b2tlbl9waWRfZGF0YXhfcSA8PSAxJ2RgVVNCX1hGRVJfVE9LRU5fUElEX0RBVEFYX0RFRkFVTFQ7CitlbHNlIGlmIChjZmdfd3IgJiYgKHJlZ19hZGRyWzU6MF0gPT0gYFVTQl9YRkVSX1RPS0VOKSkKKyAgICB1c2JfeGZlcl90b2tlbl9waWRfZGF0YXhfcSA8PSByZWdfd2RhdGFbYFVTQl9YRkVSX1RPS0VOX1BJRF9EQVRBWF9SXTsKKword2lyZSAgICAgICAgdXNiX3hmZXJfdG9rZW5fcGlkX2RhdGF4X291dF93ID0gdXNiX3hmZXJfdG9rZW5fcGlkX2RhdGF4X3E7CisKKworLy8gdXNiX3hmZXJfdG9rZW5fcGlkX2JpdHMgW2ludGVybmFsXQorcmVnIFs3OjBdICB1c2JfeGZlcl90b2tlbl9waWRfYml0c19xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHVzYl94ZmVyX3Rva2VuX3BpZF9iaXRzX3EgPD0gOCdkYFVTQl9YRkVSX1RPS0VOX1BJRF9CSVRTX0RFRkFVTFQ7CitlbHNlIGlmIChjZmdfd3IgJiYgKHJlZ19hZGRyWzU6MF0gPT0gYFVTQl9YRkVSX1RPS0VOKSkKKyAgICB1c2JfeGZlcl90b2tlbl9waWRfYml0c19xIDw9IHJlZ193ZGF0YVtgVVNCX1hGRVJfVE9LRU5fUElEX0JJVFNfUl07CisKK3dpcmUgWzc6MF0gIHVzYl94ZmVyX3Rva2VuX3BpZF9iaXRzX291dF93ID0gdXNiX3hmZXJfdG9rZW5fcGlkX2JpdHNfcTsKKworCisvLyB1c2JfeGZlcl90b2tlbl9kZXZfYWRkciBbaW50ZXJuYWxdCityZWcgWzY6MF0gIHVzYl94ZmVyX3Rva2VuX2Rldl9hZGRyX3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgdXNiX3hmZXJfdG9rZW5fZGV2X2FkZHJfcSA8PSA3J2RgVVNCX1hGRVJfVE9LRU5fREVWX0FERFJfREVGQVVMVDsKK2Vsc2UgaWYgKGNmZ193ciAmJiAocmVnX2FkZHJbNTowXSA9PSBgVVNCX1hGRVJfVE9LRU4pKQorICAgIHVzYl94ZmVyX3Rva2VuX2Rldl9hZGRyX3EgPD0gcmVnX3dkYXRhW2BVU0JfWEZFUl9UT0tFTl9ERVZfQUREUl9SXTsKKword2lyZSBbNjowXSAgdXNiX3hmZXJfdG9rZW5fZGV2X2FkZHJfb3V0X3cgPSB1c2JfeGZlcl90b2tlbl9kZXZfYWRkcl9xOworCisKKy8vIHVzYl94ZmVyX3Rva2VuX2VwX2FkZHIgW2ludGVybmFsXQorcmVnIFszOjBdICB1c2JfeGZlcl90b2tlbl9lcF9hZGRyX3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgdXNiX3hmZXJfdG9rZW5fZXBfYWRkcl9xIDw9IDQnZGBVU0JfWEZFUl9UT0tFTl9FUF9BRERSX0RFRkFVTFQ7CitlbHNlIGlmIChjZmdfd3IgJiYgKHJlZ19hZGRyWzU6MF0gPT0gYFVTQl9YRkVSX1RPS0VOKSkKKyAgICB1c2JfeGZlcl90b2tlbl9lcF9hZGRyX3EgPD0gcmVnX3dkYXRhW2BVU0JfWEZFUl9UT0tFTl9FUF9BRERSX1JdOworCit3aXJlIFszOjBdICB1c2JfeGZlcl90b2tlbl9lcF9hZGRyX291dF93ID0gdXNiX3hmZXJfdG9rZW5fZXBfYWRkcl9xOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlZ2lzdGVyIHVzYl9yeF9zdGF0CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityZWcgdXNiX3J4X3N0YXRfd3JfcTsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICB1c2Jfcnhfc3RhdF93cl9xIDw9IDEnYjA7CitlbHNlIGlmIChjZmdfd3IgJiYgKHJlZ19hZGRyWzU6MF0gPT0gYFVTQl9SWF9TVEFUKSkKKyAgICB1c2Jfcnhfc3RhdF93cl9xIDw9IDEnYjE7CitlbHNlCisgICAgdXNiX3J4X3N0YXRfd3JfcSA8PSAxJ2IwOworCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmV0aW1lIHdyaXRlIGRhdGEKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3JlZyBbMzE6MF0gd3JfZGF0YV9xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHdyX2RhdGFfcSA8PSAzMidiMDsKK2Vsc2UgaWYgKGNmZ193cikKKyAgICB3cl9kYXRhX3EgPD0gcmVnX3dkYXRhOworCisKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZWdpc3RlciB1c2Jfd3JfZGF0YQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVnIHVzYl93cl9kYXRhX3dyX3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgdXNiX3dyX2RhdGFfd3JfcSA8PSAxJ2IwOworZWxzZSBpZiAoY2ZnX3dyICYmIChyZWdfYWRkcls1OjBdID09IGBVU0JfV1JfREFUQSkpCisgICAgdXNiX3dyX2RhdGFfd3JfcSA8PSAxJ2IxOworZWxzZQorICAgIHVzYl93cl9kYXRhX3dyX3EgPD0gMSdiMDsKKworLy8gdXNiX3dyX2RhdGFfZGF0YSBbZXh0ZXJuYWxdCit3aXJlIFs3OjBdICB1c2Jfd3JfZGF0YV9kYXRhX291dF93ID0gd3JfZGF0YV9xW2BVU0JfV1JfREFUQV9EQVRBX1JdOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZWFkIG11eAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbHdheXMgQCAqCitiZWdpbgorICAgIHJlZ19yZGF0YV9yID0gMzInYjA7CisKKyAgICBjYXNlIChyZWdfYWRkcls1OjBdKQorCisgICAgYFVTQl9DVFJMOgorICAgIGJlZ2luCisgICAgICAgIHJlZ19yZGF0YV9yW2BVU0JfQ1RSTF9QSFlfRE1QVUxMRE9XTl9SXSA9IHVzYl9jdHJsX3BoeV9kbXB1bGxkb3duX3E7CisgICAgICAgIHJlZ19yZGF0YV9yW2BVU0JfQ1RSTF9QSFlfRFBQVUxMRE9XTl9SXSA9IHVzYl9jdHJsX3BoeV9kcHB1bGxkb3duX3E7CisgICAgICAgIHJlZ19yZGF0YV9yW2BVU0JfQ1RSTF9QSFlfVEVSTVNFTEVDVF9SXSA9IHVzYl9jdHJsX3BoeV90ZXJtc2VsZWN0X3E7CisgICAgICAgIHJlZ19yZGF0YV9yW2BVU0JfQ1RSTF9QSFlfWENWUlNFTEVDVF9SXSA9IHVzYl9jdHJsX3BoeV94Y3Zyc2VsZWN0X3E7CisgICAgICAgIHJlZ19yZGF0YV9yW2BVU0JfQ1RSTF9QSFlfT1BNT0RFX1JdID0gdXNiX2N0cmxfcGh5X29wbW9kZV9xOworICAgICAgICByZWdfcmRhdGFfcltgVVNCX0NUUkxfRU5BQkxFX1NPRl9SXSA9IHVzYl9jdHJsX2VuYWJsZV9zb2ZfcTsKKyAgICBlbmQKKyAgICBgVVNCX1NUQVRVUzoKKyAgICBiZWdpbgorICAgICAgICByZWdfcmRhdGFfcltgVVNCX1NUQVRVU19TT0ZfVElNRV9SXSA9IHVzYl9zdGF0dXNfc29mX3RpbWVfaW5fdzsKKyAgICAgICAgcmVnX3JkYXRhX3JbYFVTQl9TVEFUVVNfUlhfRVJST1JfUl0gPSB1c2Jfc3RhdHVzX3J4X2Vycm9yX2luX3c7CisgICAgICAgIHJlZ19yZGF0YV9yW2BVU0JfU1RBVFVTX0xJTkVTVEFURV9CSVRTX1JdID0gdXNiX3N0YXR1c19saW5lc3RhdGVfYml0c19pbl93OworICAgIGVuZAorICAgIGBVU0JfSVJRX1NUUzoKKyAgICBiZWdpbgorICAgICAgICByZWdfcmRhdGFfcltgVVNCX0lSUV9TVFNfREVWSUNFX0RFVEVDVF9SXSA9IHVzYl9pcnFfc3RzX2RldmljZV9kZXRlY3RfaW5fdzsKKyAgICAgICAgcmVnX3JkYXRhX3JbYFVTQl9JUlFfU1RTX0VSUl9SXSA9IHVzYl9pcnFfc3RzX2Vycl9pbl93OworICAgICAgICByZWdfcmRhdGFfcltgVVNCX0lSUV9TVFNfRE9ORV9SXSA9IHVzYl9pcnFfc3RzX2RvbmVfaW5fdzsKKyAgICAgICAgcmVnX3JkYXRhX3JbYFVTQl9JUlFfU1RTX1NPRl9SXSA9IHVzYl9pcnFfc3RzX3NvZl9pbl93OworICAgIGVuZAorICAgIGBVU0JfSVJRX01BU0s6CisgICAgYmVnaW4KKyAgICAgICAgcmVnX3JkYXRhX3JbYFVTQl9JUlFfTUFTS19ERVZJQ0VfREVURUNUX1JdID0gdXNiX2lycV9tYXNrX2RldmljZV9kZXRlY3RfcTsKKyAgICAgICAgcmVnX3JkYXRhX3JbYFVTQl9JUlFfTUFTS19FUlJfUl0gPSB1c2JfaXJxX21hc2tfZXJyX3E7CisgICAgICAgIHJlZ19yZGF0YV9yW2BVU0JfSVJRX01BU0tfRE9ORV9SXSA9IHVzYl9pcnFfbWFza19kb25lX3E7CisgICAgICAgIHJlZ19yZGF0YV9yW2BVU0JfSVJRX01BU0tfU09GX1JdID0gdXNiX2lycV9tYXNrX3NvZl9xOworICAgIGVuZAorICAgIGBVU0JfWEZFUl9EQVRBOgorICAgIGJlZ2luCisgICAgICAgIHJlZ19yZGF0YV9yW2BVU0JfWEZFUl9EQVRBX1RYX0xFTl9SXSA9IHVzYl94ZmVyX2RhdGFfdHhfbGVuX3E7CisgICAgZW5kCisgICAgYFVTQl9YRkVSX1RPS0VOOgorICAgIGJlZ2luCisgICAgICAgIHJlZ19yZGF0YV9yW2BVU0JfWEZFUl9UT0tFTl9JTl9SXSA9IHVzYl94ZmVyX3Rva2VuX2luX3E7CisgICAgICAgIHJlZ19yZGF0YV9yW2BVU0JfWEZFUl9UT0tFTl9BQ0tfUl0gPSB1c2JfeGZlcl90b2tlbl9hY2tfcTsKKyAgICAgICAgcmVnX3JkYXRhX3JbYFVTQl9YRkVSX1RPS0VOX1BJRF9EQVRBWF9SXSA9IHVzYl94ZmVyX3Rva2VuX3BpZF9kYXRheF9xOworICAgICAgICByZWdfcmRhdGFfcltgVVNCX1hGRVJfVE9LRU5fUElEX0JJVFNfUl0gPSB1c2JfeGZlcl90b2tlbl9waWRfYml0c19xOworICAgICAgICByZWdfcmRhdGFfcltgVVNCX1hGRVJfVE9LRU5fREVWX0FERFJfUl0gPSB1c2JfeGZlcl90b2tlbl9kZXZfYWRkcl9xOworICAgICAgICByZWdfcmRhdGFfcltgVVNCX1hGRVJfVE9LRU5fRVBfQUREUl9SXSA9IHVzYl94ZmVyX3Rva2VuX2VwX2FkZHJfcTsKKyAgICBlbmQKKyAgICBgVVNCX1JYX1NUQVQ6CisgICAgYmVnaW4KKyAgICAgICAgcmVnX3JkYXRhX3JbYFVTQl9SWF9TVEFUX1NUQVJUX1BFTkRfUl0gPSB1c2Jfcnhfc3RhdF9zdGFydF9wZW5kX2luX3c7CisgICAgICAgIHJlZ19yZGF0YV9yW2BVU0JfUlhfU1RBVF9DUkNfRVJSX1JdID0gdXNiX3J4X3N0YXRfY3JjX2Vycl9pbl93OworICAgICAgICByZWdfcmRhdGFfcltgVVNCX1JYX1NUQVRfUkVTUF9USU1FT1VUX1JdID0gdXNiX3J4X3N0YXRfcmVzcF90aW1lb3V0X2luX3c7CisgICAgICAgIHJlZ19yZGF0YV9yW2BVU0JfUlhfU1RBVF9JRExFX1JdID0gdXNiX3J4X3N0YXRfaWRsZV9pbl93OworICAgICAgICByZWdfcmRhdGFfcltgVVNCX1JYX1NUQVRfUkVTUF9CSVRTX1JdID0gdXNiX3J4X3N0YXRfcmVzcF9iaXRzX2luX3c7CisgICAgICAgIHJlZ19yZGF0YV9yW2BVU0JfUlhfU1RBVF9DT1VOVF9CSVRTX1JdID0gdXNiX3J4X3N0YXRfY291bnRfYml0c19pbl93OworICAgIGVuZAorICAgIGBVU0JfUkRfREFUQToKKyAgICBiZWdpbgorICAgICAgICByZWdfcmRhdGFfcltgVVNCX1JEX0RBVEFfREFUQV9SXSA9IHVzYl9yZF9kYXRhX2RhdGFfaW5fdzsKKyAgICBlbmQKKyAgICBkZWZhdWx0IDoKKyAgICAgICAgcmVnX3JkYXRhX3IgPSAzMidiMDsKKyAgICBlbmRjYXNlCitlbmQKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVnaXN0ZXIgdXNiX3JkX2RhdGEKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3JlZyB1c2JfcmRfZGF0YV93cl9xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHVzYl9yZF9kYXRhX3dyX3EgPD0gMSdiMDsKK2Vsc2UgaWYgKGNmZ193ciAmJiAocmVnX2FkZHJbNTowXSA9PSBgVVNCX1JEX0RBVEEpKQorICAgIHVzYl9yZF9kYXRhX3dyX3EgPD0gMSdiMTsKK2Vsc2UKKyAgICB1c2JfcmRfZGF0YV93cl9xIDw9IDEnYjA7CisKKworCit3aXJlIHVzYl9yZF9kYXRhX3JkX3JlcV93ID0gcmVnX2NzICYgKHJlZ193cj09MCkgJiAoIXJlZ19hY2spICYgKHJlZ19hZGRyWzU6MF0gPT0gYFVTQl9SRF9EQVRBKTsKKword2lyZSB1c2Jfd3JfZGF0YV93cl9yZXFfdyA9IHVzYl93cl9kYXRhX3dyX3E7Cit3aXJlIHVzYl9yZF9kYXRhX3dyX3JlcV93ID0gdXNiX3JkX2RhdGFfd3JfcTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVnaXN0ZXJzIC8gV2lyZXMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFNPRgorcmVnIFsxMDowXSAgc29mX3ZhbHVlX3E7CityZWcgWzE1OjBdICBzb2ZfdGltZV9xOworcmVnICAgICAgICAgc29mX2lycV9xOworCityZWcgICAgICAgICB0cmFuc2Zlcl9yZXFfYWNrX3E7CisKK3dpcmUgWzc6MF0gIGZpZm9fdHhfZGF0YV93Oword2lyZSAgICAgICAgZmlmb190eF9wb3BfdzsKKword2lyZSBbNzowXSAgZmlmb19yeF9kYXRhX3c7Cit3aXJlICAgICAgICBmaWZvX3J4X3B1c2hfdzsKKworcmVnICAgICAgICAgZmlmb19mbHVzaF9xOworCit3aXJlIFs3OjBdICB0b2tlbl9waWRfdzsKK3dpcmUgWzY6MF0gIHRva2VuX2Rldl93Oword2lyZSBbMzowXSAgdG9rZW5fZXBfdzsKKworcmVnICAgICAgICAgdHJhbnNmZXJfc3RhcnRfcTsKK3JlZyAgICAgICAgIGluX3RyYW5zZmVyX3E7CityZWcgICAgICAgICBzb2ZfdHJhbnNmZXJfcTsKK3JlZyAgICAgICAgIHJlc3BfZXhwZWN0ZWRfcTsKK3dpcmUgICAgICAgIHRyYW5zZmVyX2Fja193OworCit3aXJlICAgICAgICBzdGF0dXNfY3JjX2Vycl93Oword2lyZSAgICAgICAgc3RhdHVzX3RpbWVvdXRfdzsKK3dpcmUgWzc6MF0gIHN0YXR1c19yZXNwb25zZV93Oword2lyZSBbMTU6MF0gc3RhdHVzX3J4X2NvdW50X3c7Cit3aXJlICAgICAgICBzdGF0dXNfc2llX2lkbGVfdzsKK3dpcmUgICAgICAgIHN0YXR1c190eF9kb25lX3c7Cit3aXJlICAgICAgICBzdGF0dXNfcnhfZG9uZV93OworCit3aXJlICAgICAgICBzZW5kX3NvZl93Oword2lyZSAgICAgICAgc29mX2dhdXJkX2JhbmRfdzsKK3dpcmUgICAgICAgIGNsZWFyX3RvX3NlbmRfdzsKKworcmVnICAgICAgICAgdXNiX2Vycl9xOworCityZWcgICAgICAgICBpbnRyX2RvbmVfcTsKK3JlZyAgICAgICAgIGludHJfc29mX3E7CityZWcgICAgICAgICBpbnRyX2Vycl9xOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBEZWZpbml0aW9ucworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbG9jYWxwYXJhbSBTT0ZfWkVSTyAgICAgICAgPSAwOworbG9jYWxwYXJhbSBTT0ZfSU5DICAgICAgICAgPSAxOworbG9jYWxwYXJhbSBTT0ZfVEhSRVNIT0xEICAgPSAoVVNCX0NMS19GUkVRLzEwMDApLTE7CisKK2xvY2FscGFyYW0gQ0xLU19QRVJfQklUICAgID0gKFVTQl9DTEtfRlJFUSAvIDEyMDAwMDAwKTsgLy8gaW5wdXQgY2xrcyBwZXIgRlMgYml0IHRpbWUKKworbG9jYWxwYXJhbSBFT0YxX1RIUkVTSE9MRCAgPSAoNTAgKiBDTEtTX1BFUl9CSVQpOyAvLyBFT0YxICsgc29tZSBtYXJnaW4KK2xvY2FscGFyYW0gTUFYX1hGRVJfU0laRSAgID0gNjQ7Citsb2NhbHBhcmFtIE1BWF9YRkVSX1BFUklPRCA9ICgoTUFYX1hGRVJfU0laRSArIDYpICogMTAgICogQ0xLU19QRVJfQklUKTsgLy8gTWF4IHBhY2tldCB0cmFuc2ZlciB0aW1lICgrIG1hcmdpbikKK2xvY2FscGFyYW0gU09GX0dBVVJEX0xPVyAgID0gKDIwICogQ0xLU19QRVJfQklUKTsKK2xvY2FscGFyYW0gU09GX0dBVVJEX0hJR0ggID0gU09GX1RIUkVTSE9MRCAtIEVPRjFfVEhSRVNIT0xEIC0gTUFYX1hGRVJfUEVSSU9EOworCitsb2NhbHBhcmFtIFBJRF9TT0YgICAgICA9IDgnaEE1OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTSUUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3VzYmhfc2llCisjKCAuVVNCX0NMS19GUkVRKFVTQl9DTEtfRlJFUSkgKQordV9zaWUKKygKKyAgICAvLyBDbG9jayAmIHJlc2V0CisgICAgLmNsa19pKGNsa19pKSwKKyAgICAucnN0bl9pKHJzdG5faSksCisKKyAgICAvLyBDb250cm9sCisgICAgLnN0YXJ0X2kodHJhbnNmZXJfc3RhcnRfcSksCisgICAgLmluX3RyYW5zZmVyX2koaW5fdHJhbnNmZXJfcSksCisgICAgLnNvZl90cmFuc2Zlcl9pKHNvZl90cmFuc2Zlcl9xKSwKKyAgICAucmVzcF9leHBlY3RlZF9pKHJlc3BfZXhwZWN0ZWRfcSksICAgIAorICAgIC5hY2tfbyh0cmFuc2Zlcl9hY2tfdyksCisKKyAgICAvLyBUb2tlbiBwYWNrZXQgICAgCisgICAgLnRva2VuX3BpZF9pKHRva2VuX3BpZF93KSwKKyAgICAudG9rZW5fZGV2X2kodG9rZW5fZGV2X3cpLAorICAgIC50b2tlbl9lcF9pKHRva2VuX2VwX3cpLAorCisgICAgLy8gRGF0YSBwYWNrZXQKKyAgICAuZGF0YV9sZW5faSh1c2JfeGZlcl9kYXRhX3R4X2xlbl9vdXRfdyksCisgICAgLmRhdGFfaWR4X2kodXNiX3hmZXJfdG9rZW5fcGlkX2RhdGF4X291dF93KSwKKworICAgIC8vIFR4IERhdGEgRklGTworICAgIC50eF9kYXRhX2koZmlmb190eF9kYXRhX3cpLAorICAgIC50eF9wb3BfbyhmaWZvX3R4X3BvcF93KSwKKworICAgIC8vIFJ4IERhdGEgRklGTworICAgIC5yeF9kYXRhX28oZmlmb19yeF9kYXRhX3cpLAorICAgIC5yeF9wdXNoX28oZmlmb19yeF9wdXNoX3cpLAorCisgICAgLy8gU3RhdHVzCisgICAgLnJ4X2RvbmVfbyhzdGF0dXNfcnhfZG9uZV93KSwKKyAgICAudHhfZG9uZV9vKHN0YXR1c190eF9kb25lX3cpLAorICAgIC5jcmNfZXJyX28oc3RhdHVzX2NyY19lcnJfdyksCisgICAgLnRpbWVvdXRfbyhzdGF0dXNfdGltZW91dF93KSwKKyAgICAucmVzcG9uc2VfbyhzdGF0dXNfcmVzcG9uc2VfdyksCisgICAgLnJ4X2NvdW50X28oc3RhdHVzX3J4X2NvdW50X3cpLAorICAgIC5pZGxlX28oc3RhdHVzX3NpZV9pZGxlX3cpLAorCisgICAgLy8gVVRNSSBJbnRlcmZhY2UKKyAgICAudXRtaV9kYXRhX28odXRtaV9kYXRhX291dF9vKSwKKyAgICAudXRtaV90eHZhbGlkX28odXRtaV90eHZhbGlkX28pLAorICAgIC51dG1pX3R4cmVhZHlfaSh1dG1pX3R4cmVhZHlfaSksCisgICAgLnV0bWlfZGF0YV9pKHV0bWlfZGF0YV9pbl9pKSwKKyAgICAudXRtaV9yeHZhbGlkX2kodXRtaV9yeHZhbGlkX2kpLAorICAgIC51dG1pX3J4YWN0aXZlX2kodXRtaV9yeGFjdGl2ZV9pKSwKKyAgICAudXRtaV9saW5lc3RhdGVfaSh1dG1pX2xpbmVzdGF0ZV9pKQorKTsgICAgCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFBlcmlwaGVyYWwgSW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithc3NpZ24gdXNiX3N0YXR1c19zb2ZfdGltZV9pbl93ICAgICAgID0gc29mX3RpbWVfcTsKK2Fzc2lnbiB1c2Jfc3RhdHVzX3J4X2Vycm9yX2luX3cgICAgICAgPSB1c2JfZXJyX3E7Cithc3NpZ24gdXNiX3N0YXR1c19saW5lc3RhdGVfYml0c19pbl93ID0gdXRtaV9saW5lc3RhdGVfaTsKKworYXNzaWduIHVzYl9pcnFfc3RzX2Vycl9pbl93ICAgICAgICAgICA9IGludHJfZXJyX3E7Cithc3NpZ24gdXNiX2lycV9zdHNfZG9uZV9pbl93ICAgICAgICAgID0gaW50cl9kb25lX3E7Cithc3NpZ24gdXNiX2lycV9zdHNfc29mX2luX3cgICAgICAgICAgID0gaW50cl9zb2ZfcTsKKworYXNzaWduIHVzYl9yeF9zdGF0X3N0YXJ0X3BlbmRfaW5fdyAgICA9IHVzYl94ZmVyX3Rva2VuX3N0YXJ0X291dF93OworYXNzaWduIHVzYl9yeF9zdGF0X2NyY19lcnJfaW5fdyAgICAgICA9IHN0YXR1c19jcmNfZXJyX3c7Cithc3NpZ24gdXNiX3J4X3N0YXRfcmVzcF90aW1lb3V0X2luX3cgID0gc3RhdHVzX3RpbWVvdXRfdzsKK2Fzc2lnbiB1c2Jfcnhfc3RhdF9pZGxlX2luX3cgICAgICAgICAgPSBzdGF0dXNfc2llX2lkbGVfdzsKK2Fzc2lnbiB1c2Jfcnhfc3RhdF9yZXNwX2JpdHNfaW5fdyAgICAgPSBzdGF0dXNfcmVzcG9uc2VfdzsKK2Fzc2lnbiB1c2Jfcnhfc3RhdF9jb3VudF9iaXRzX2luX3cgICAgPSBzdGF0dXNfcnhfY291bnRfdzsKKworYXNzaWduIHVzYl94ZmVyX3Rva2VuX3N0YXJ0X2Fja19pbl93ICA9IHRyYW5zZmVyX3JlcV9hY2tfcTsKKworYXNzaWduIHV0bWlfb3BfbW9kZV9vICAgICAgICAgICAgICAgICA9IHVzYl9jdHJsX3BoeV9vcG1vZGVfb3V0X3c7Cithc3NpZ24gdXRtaV94Y3Zyc2VsZWN0X28gICAgICAgICAgICAgID0gdXNiX2N0cmxfcGh5X3hjdnJzZWxlY3Rfb3V0X3c7Cithc3NpZ24gdXRtaV90ZXJtc2VsZWN0X28gICAgICAgICAgICAgID0gdXNiX2N0cmxfcGh5X3Rlcm1zZWxlY3Rfb3V0X3c7Cithc3NpZ24gdXRtaV9kcHB1bGxkb3duX28gICAgICAgICAgICAgID0gdXNiX2N0cmxfcGh5X2RwcHVsbGRvd25fb3V0X3c7Cithc3NpZ24gdXRtaV9kbXB1bGxkb3duX28gICAgICAgICAgICAgID0gdXNiX2N0cmxfcGh5X2RtcHVsbGRvd25fb3V0X3c7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFR4IEZJRk8gKEhvc3QgLT4gRGV2aWNlKQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordXNiaF9maWZvCit1X2ZpZm9fdHgKKygKKyAgICAuY2xrX2koY2xrX2kpLAorICAgIC5yc3RuX2kocnN0bl9pKSwKKworICAgIC5kYXRhX2kodXNiX3dyX2RhdGFfZGF0YV9vdXRfdyksCisgICAgLnB1c2hfaSh1c2Jfd3JfZGF0YV93cl9yZXFfdyksCisKKyAgICAuZmx1c2hfaSh1c2JfY3RybF90eF9mbHVzaF9vdXRfdyksCisKKyAgICAuZnVsbF9vKCksCisgICAgLmVtcHR5X28oKSwKKworICAgIC5kYXRhX28oZmlmb190eF9kYXRhX3cpLAorICAgIC5wb3BfaShmaWZvX3R4X3BvcF93KQorKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnggRklGTyAoRGV2aWNlIC0+IEhvc3QpCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit1c2JoX2ZpZm8KK3VfZmlmb19yeAorKAorICAgIC5jbGtfaShjbGtfaSksCisgICAgLnJzdG5faShyc3RuX2kpLAorCisgICAgLy8gUmVjZWl2ZSBmcm9tIFVUTUkgaW50ZXJmYWNlCisgICAgLmRhdGFfaShmaWZvX3J4X2RhdGFfdyksCisgICAgLnB1c2hfaShmaWZvX3J4X3B1c2hfdyksCisKKyAgICAuZmx1c2hfaShmaWZvX2ZsdXNoX3EpLAorCisgICAgLmZ1bGxfbygpLAorICAgIC5lbXB0eV9vKCksCisKKyAgICAuZGF0YV9vKHVzYl9yZF9kYXRhX2RhdGFfaW5fdyksCisgICAgLnBvcF9pKHVzYl9yZF9kYXRhX3JkX3JlcV93KQorKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQXNzaWdubWVudHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiBzZW5kX3NvZl93ICAgICAgID0gKHsxNidiMCwgc29mX3RpbWVfcX0gPT0gU09GX1RIUkVTSE9MRCAmJiB1c2JfY3RybF9lbmFibGVfc29mX291dF93KSAmIHN0YXR1c19zaWVfaWRsZV93OworYXNzaWduIHNvZl9nYXVyZF9iYW5kX3cgPSAoezE2J2IwLCBzb2ZfdGltZV9xfSA8PSBTT0ZfR0FVUkRfTE9XIHx8IHsxNidiMCwgc29mX3RpbWVfcX0gPj0gU09GX0dBVVJEX0hJR0gpOworYXNzaWduIGNsZWFyX3RvX3NlbmRfdyAgPSAofnNvZl9nYXVyZF9iYW5kX3cgfCB+dXNiX2N0cmxfZW5hYmxlX3NvZl9vdXRfdykgJiBzdGF0dXNfc2llX2lkbGVfdzsKKworYXNzaWduIHRva2VuX3BpZF93ICAgICAgPSBzb2ZfdHJhbnNmZXJfcSA/IFBJRF9TT0YgOiB1c2JfeGZlcl90b2tlbl9waWRfYml0c19vdXRfdzsKKworYXNzaWduIHRva2VuX2Rldl93ICAgICAgPSBzb2ZfdHJhbnNmZXJfcSA/IAorICAgICAgICAgICAgICAgICAgICAgICAgICB7c29mX3ZhbHVlX3FbMF0sIHNvZl92YWx1ZV9xWzFdLCBzb2ZfdmFsdWVfcVsyXSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNvZl92YWx1ZV9xWzNdLCBzb2ZfdmFsdWVfcVs0XSwgc29mX3ZhbHVlX3FbNV0sIHNvZl92YWx1ZV9xWzZdfSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgIHt1c2JfeGZlcl90b2tlbl9kZXZfYWRkcl9vdXRfd1swXSwgdXNiX3hmZXJfdG9rZW5fZGV2X2FkZHJfb3V0X3dbMV0sIHVzYl94ZmVyX3Rva2VuX2Rldl9hZGRyX291dF93WzJdLCB1c2JfeGZlcl90b2tlbl9kZXZfYWRkcl9vdXRfd1szXSwgdXNiX3hmZXJfdG9rZW5fZGV2X2FkZHJfb3V0X3dbNF0sIHVzYl94ZmVyX3Rva2VuX2Rldl9hZGRyX291dF93WzVdLCB1c2JfeGZlcl90b2tlbl9kZXZfYWRkcl9vdXRfd1s2XX07CisKK2Fzc2lnbiB0b2tlbl9lcF93ICAgICAgID0gc29mX3RyYW5zZmVyX3EgPyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAge3NvZl92YWx1ZV9xWzddLCBzb2ZfdmFsdWVfcVs4XSwgc29mX3ZhbHVlX3FbOV0sIHNvZl92YWx1ZV9xWzEwXX0gOiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAge3VzYl94ZmVyX3Rva2VuX2VwX2FkZHJfb3V0X3dbMF0sIHVzYl94ZmVyX3Rva2VuX2VwX2FkZHJfb3V0X3dbMV0sIHVzYl94ZmVyX3Rva2VuX2VwX2FkZHJfb3V0X3dbMl0sIHVzYl94ZmVyX3Rva2VuX2VwX2FkZHJfb3V0X3dbM119OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDb250cm9sIGxvZ2ljCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorYmVnaW4KKyAgICBmaWZvX2ZsdXNoX3EgICAgICAgPD0gMSdiMDsKKyAgICB0cmFuc2Zlcl9zdGFydF9xICAgPD0gMSdiMDsKKyAgICBzb2ZfdHJhbnNmZXJfcSAgICAgPD0gMSdiMDsKKyAgICB0cmFuc2Zlcl9yZXFfYWNrX3EgPD0gMSdiMDsKKyAgICBpbl90cmFuc2Zlcl9xICAgICAgPD0gMSdiMDsKKyAgICByZXNwX2V4cGVjdGVkX3EgICAgPD0gMSdiMDsKK2VuZAorZWxzZQorYmVnaW4KKyAgICAvLyBUcmFuc2ZlciBpbiBwcm9ncmVzcz8KKyAgICBpZiAodHJhbnNmZXJfc3RhcnRfcSkKKyAgICBiZWdpbgorICAgICAgICAvLyBUcmFuc2ZlciBhY2NlcHRlZAorICAgICAgICBpZiAodHJhbnNmZXJfYWNrX3cpCisgICAgICAgICAgICB0cmFuc2Zlcl9zdGFydF9xICAgPD0gMSdiMDsKKworICAgICAgICBmaWZvX2ZsdXNoX3EgICAgICAgPD0gMSdiMDsKKyAgICAgICAgdHJhbnNmZXJfcmVxX2Fja19xIDw9IDEnYjA7CisgICAgZW5kCisgICAgLy8gVGltZSB0byBzZW5kIGFub3RoZXIgU09GIHRva2VuPworICAgIGVsc2UgaWYgKHNlbmRfc29mX3cpCisgICAgYmVnaW4KKyAgICAgICAgLy8gU3RhcnQgdHJhbnNmZXIKKyAgICAgICAgaW5fdHJhbnNmZXJfcSAgICAgPD0gMSdiMDsKKyAgICAgICAgcmVzcF9leHBlY3RlZF9xICAgPD0gMSdiMDsKKyAgICAgICAgdHJhbnNmZXJfc3RhcnRfcSAgPD0gMSdiMTsKKyAgICAgICAgc29mX3RyYW5zZmVyX3EgICAgPD0gMSdiMTsKKyAgICBlbmQgICAgICAgICAgICAgICAKKyAgICAvLyBOb3QgaW4gU09GIGdhdXJkIGJhbmQgcmVnaW9uIG9yIFNPRiBkaXNhYmxlZD8KKyAgICBlbHNlIGlmIChjbGVhcl90b19zZW5kX3cpCisgICAgYmVnaW4KKyAgICAgICAgLy8gVHJhbnNmZXIgcmVxdWVzdAorICAgICAgICBpZiAodXNiX3hmZXJfdG9rZW5fc3RhcnRfb3V0X3cpCisgICAgICAgIGJlZ2luICAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZsdXNoIHVuLXVzZWQgcHJldmlvdXMgUnggZGF0YQorICAgICAgICAgICAgZmlmb19mbHVzaF9xICAgICAgIDw9IDEnYjE7CisKKyAgICAgICAgICAgIC8vIFN0YXJ0IHRyYW5zZmVyCisgICAgICAgICAgICBpbl90cmFuc2Zlcl9xICAgICAgPD0gdXNiX3hmZXJfdG9rZW5faW5fb3V0X3c7CisgICAgICAgICAgICByZXNwX2V4cGVjdGVkX3EgICAgPD0gdXNiX3hmZXJfdG9rZW5fYWNrX291dF93OworICAgICAgICAgICAgdHJhbnNmZXJfc3RhcnRfcSAgIDw9IDEnYjE7CisgICAgICAgICAgICBzb2ZfdHJhbnNmZXJfcSAgICAgPD0gMSdiMDsKKyAgICAgICAgICAgIHRyYW5zZmVyX3JlcV9hY2tfcSA8PSAxJ2IxOworICAgICAgICBlbmQKKyAgICBlbmQKK2VuZAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTT0YgRnJhbWUgTnVtYmVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorYmVnaW4KKyAgICBzb2ZfdmFsdWVfcSAgICA8PSAxMSdkMDsKKyAgICBzb2ZfdGltZV9xICAgICA8PSBTT0ZfWkVSTzsKKyAgICBzb2ZfaXJxX3EgICAgICA8PSAxJ2IwOworZW5kCisvLyBUaW1lIHRvIHNlbmQgYW5vdGhlciBTT0YgdG9rZW4/CitlbHNlIGlmIChzZW5kX3NvZl93KQorYmVnaW4KKyAgICBzb2ZfdGltZV9xICAgIDw9IFNPRl9aRVJPOworICAgIHNvZl92YWx1ZV9xICAgPD0gc29mX3ZhbHVlX3EgKyAxMSdkMTsKKworICAgIC8vIFN0YXJ0IG9mIGZyYW1lIGludGVycnVwdAorICAgIHNvZl9pcnFfcSAgICAgPD0gMSdiMTsKK2VuZAorZWxzZQorYmVnaW4KKyAgICAvLyBJbmNyZW1lbnQgdGhlIFNPRiB0aW1lcgorICAgIGlmICh7MTYnYjAsIHNvZl90aW1lX3F9ICE9IFNPRl9USFJFU0hPTEQpCisgICAgICAgIHNvZl90aW1lX3EgPD0gc29mX3RpbWVfcSArIFNPRl9JTkM7CisKKyAgICBzb2ZfaXJxX3EgICAgIDw9IDEnYjA7CitlbmQKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVjb3JkIEVycm9ycworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICB1c2JfZXJyX3EgPD0gMSdiMDsKKy8vIENsZWFyIGVycm9yCitlbHNlIGlmICh1c2JfY3RybF93cl9xKQorICAgIHVzYl9lcnJfcSA8PSAxJ2IwOworLy8gUmVjb3JkIGJ1cyBlcnJvcnMKK2Vsc2UgaWYgKHV0bWlfcnhlcnJvcl9pKQorICAgIHVzYl9lcnJfcSA8PSAxJ2IxOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbnRlcnJ1cHRzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityZWcgZXJyX2NvbmRfcTsKK3JlZyBpbnRyX3E7CityZWcgZGV2aWNlX2RldF9xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorYmVnaW4KKyAgICBpbnRyX2RvbmVfcSAgIDw9IDEnYjA7CisgICAgaW50cl9zb2ZfcSAgICA8PSAxJ2IwOworICAgIGludHJfZXJyX3EgICAgPD0gMSdiMDsKKyAgICBlcnJfY29uZF9xICAgIDw9IDEnYjA7CisgICAgZGV2aWNlX2RldF9xICA8PSAxJ2IwOworICAgIGludHJfcSAgICAgICAgPD0gMSdiMDsKK2VuZAorZWxzZQorYmVnaW4KKyAgICBpZiAoc3RhdHVzX3J4X2RvbmVfdyB8fCBzdGF0dXNfdHhfZG9uZV93KQorICAgICAgICBpbnRyX2RvbmVfcSA8PSAxJ2IxOworICAgIGVsc2UgaWYgKHVzYl9pcnFfYWNrX2RvbmVfb3V0X3cpCisgICAgICAgIGludHJfZG9uZV9xIDw9IDEnYjA7CisKKyAgICBpZiAoc29mX2lycV9xKQorICAgICAgICBpbnRyX3NvZl9xICA8PSAxJ2IxOworICAgIGVsc2UgaWYgKHVzYl9pcnFfYWNrX3NvZl9vdXRfdykKKyAgICAgICAgaW50cl9zb2ZfcSA8PSAxJ2IwOworCisgICAgaWYgKChzdGF0dXNfY3JjX2Vycl93IHx8IHN0YXR1c190aW1lb3V0X3cpICYmICghZXJyX2NvbmRfcSkpCisgICAgICAgIGludHJfZXJyX3EgPD0gMSdiMTsKKyAgICBlbHNlIGlmICh1c2JfaXJxX2Fja19lcnJfb3V0X3cpCisgICAgICAgIGludHJfZXJyX3EgPD0gMSdiMDsKKworICAgIC8vIExpbmUgc3RhdGUgIT0gU0UwCisgICAgaWYgKHV0bWlfbGluZXN0YXRlX2kgIT0gMidiMCkKKyAgICAgICAgZGV2aWNlX2RldF9xICA8PSAxJ2IxOworICAgIGVsc2UgaWYgKHVzYl9pcnFfYWNrX2RldmljZV9kZXRlY3Rfb3V0X3cpCisgICAgICAgIGRldmljZV9kZXRfcSA8PSAxJ2IwOworCisgICAgZXJyX2NvbmRfcSAgPD0gKHN0YXR1c19jcmNfZXJyX3cgfCBzdGF0dXNfdGltZW91dF93KTsKKworICAgIGludHJfcSA8PSAoaW50cl9kb25lX3EgICYgdXNiX2lycV9tYXNrX2RvbmVfb3V0X3cpIHwKKyAgICAgICAgICAgICAgKGludHJfZXJyX3EgICAmIHVzYl9pcnFfbWFza19lcnJfb3V0X3cpICB8CisgICAgICAgICAgICAgIChpbnRyX3NvZl9xICAgJiB1c2JfaXJxX21hc2tfc29mX291dF93KSAgfAorICAgICAgICAgICAgICAoZGV2aWNlX2RldF9xICYgdXNiX2lycV9tYXNrX2RldmljZV9kZXRlY3Rfb3V0X3cpOworZW5kCisKK2Fzc2lnbiB1c2JfaXJxX3N0c19kZXZpY2VfZGV0ZWN0X2luX3cgPSAxJ2IwOworCithc3NpZ24gaW50cl9vID0gaW50cl9xOworCisKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL2NvcmUvdXNiaF9jcmMxNi5zdiBiL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvY29yZS91c2JoX2NyYzE2LnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZjc2N2MKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL2NvcmUvdXNiaF9jcmMxNi5zdgpAQCAtMCwwICsxLDg5IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgICAgICAgICAgICAgICAgICAgVVNCIEZ1bGwgU3BlZWQgSG9zdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBWMC42CisvLyAgICAgICAgICAgICAgICAgICAgIFVsdHJhLUVtYmVkZGVkLmNvbQorLy8gICAgICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAxNS0yMDIwCisvLworLy8gICAgICAgICAgICAgICAgIEVtYWlsOiBhZG1pbkB1bHRyYS1lbWJlZGRlZC5jb20KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICBMaWNlbnNlOiBHUEwKKy8vIElmIHlvdSB3b3VsZCBsaWtlIGEgdmVyc2lvbiB3aXRoIGEgbW9yZSBwZXJtaXNzaXZlIGxpY2Vuc2UgZm9yCisvLyB1c2UgaW4gY2xvc2VkIHNvdXJjZSBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucyBwbGVhc2UgY29udGFjdCBtZQorLy8gZm9yIGRldGFpbHMuCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8gVGhpcyBmaWxlIGlzIG9wZW4gc291cmNlIEhETDsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorLy8gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisvLyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKy8vIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisvLworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIAorLy8gTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworLy8gVVNBCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZWQgRmlsZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTW9kdWxlOiAxNi1iaXQgQ1JDIHVzZWQgYnkgVVNCIGRhdGEgcGFja2V0cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbW9kdWxlIHVzYmhfY3JjMTYKKygKKyAgICBpbnB1dCBbMTU6MF0gICAgY3JjX2ksCisgICAgaW5wdXQgWzc6MF0gICAgIGRhdGFfaSwKKyAgICBvdXRwdXQgWzE1OjBdICAgY3JjX28KKyk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEltcGxlbWVudGF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithc3NpZ24gY3JjX29bMTVdID0gICAgZGF0YV9pWzBdIF4gZGF0YV9pWzFdIF4gZGF0YV9pWzJdIF4gZGF0YV9pWzNdIF4gZGF0YV9pWzRdIF4KKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfaVs1XSBeIGRhdGFfaVs2XSBeIGRhdGFfaVs3XSBeIGNyY19pWzddIF4gY3JjX2lbNl0gXgorICAgICAgICAgICAgICAgICAgICAgICAgY3JjX2lbNV0gXiBjcmNfaVs0XSBeIGNyY19pWzNdIF4gY3JjX2lbMl0gXgorICAgICAgICAgICAgICAgICAgICAgICAgY3JjX2lbMV0gXiBjcmNfaVswXTsKK2Fzc2lnbiBjcmNfb1sxNF0gPSAgICBkYXRhX2lbMF0gXiBkYXRhX2lbMV0gXiBkYXRhX2lbMl0gXiBkYXRhX2lbM10gXiBkYXRhX2lbNF0gXiBkYXRhX2lbNV0gXgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9pWzZdIF4gY3JjX2lbNl0gXiBjcmNfaVs1XSBeIGNyY19pWzRdIF4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNyY19pWzNdIF4gY3JjX2lbMl0gXiBjcmNfaVsxXSBeIGNyY19pWzBdOworYXNzaWduIGNyY19vWzEzXSA9ICAgIGRhdGFfaVs2XSBeIGRhdGFfaVs3XSBeIGNyY19pWzddIF4gY3JjX2lbNl07Cithc3NpZ24gY3JjX29bMTJdID0gICAgZGF0YV9pWzVdIF4gZGF0YV9pWzZdIF4gY3JjX2lbNl0gXiBjcmNfaVs1XTsKK2Fzc2lnbiBjcmNfb1sxMV0gPSAgICBkYXRhX2lbNF0gXiBkYXRhX2lbNV0gXiBjcmNfaVs1XSBeIGNyY19pWzRdOworYXNzaWduIGNyY19vWzEwXSA9ICAgIGRhdGFfaVszXSBeIGRhdGFfaVs0XSBeIGNyY19pWzRdIF4gY3JjX2lbM107Cithc3NpZ24gY3JjX29bOV0gPSAgICAgZGF0YV9pWzJdIF4gZGF0YV9pWzNdIF4gY3JjX2lbM10gXiBjcmNfaVsyXTsKK2Fzc2lnbiBjcmNfb1s4XSA9ICAgICBkYXRhX2lbMV0gXiBkYXRhX2lbMl0gXiBjcmNfaVsyXSBeIGNyY19pWzFdOworYXNzaWduIGNyY19vWzddID0gICAgIGRhdGFfaVswXSBeIGRhdGFfaVsxXSBeIGNyY19pWzE1XSBeIGNyY19pWzFdIF4gY3JjX2lbMF07Cithc3NpZ24gY3JjX29bNl0gPSAgICAgZGF0YV9pWzBdIF4gY3JjX2lbMTRdIF4gY3JjX2lbMF07Cithc3NpZ24gY3JjX29bNV0gPSAgICAgY3JjX2lbMTNdOworYXNzaWduIGNyY19vWzRdID0gICAgIGNyY19pWzEyXTsKK2Fzc2lnbiBjcmNfb1szXSA9ICAgICBjcmNfaVsxMV07Cithc3NpZ24gY3JjX29bMl0gPSAgICAgY3JjX2lbMTBdOworYXNzaWduIGNyY19vWzFdID0gICAgIGNyY19pWzldOworYXNzaWduIGNyY19vWzBdID0gICAgIGRhdGFfaVswXSBeIGRhdGFfaVsxXSBeIGRhdGFfaVsyXSBeIGRhdGFfaVszXSBeIGRhdGFfaVs0XSBeIGRhdGFfaVs1XSBeCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2lbNl0gXiBkYXRhX2lbN10gXiBjcmNfaVs4XSBeIGNyY19pWzddIF4gY3JjX2lbNl0gXgorICAgICAgICAgICAgICAgICAgICAgICAgY3JjX2lbNV0gXiBjcmNfaVs0XSBeIGNyY19pWzNdIF4gY3JjX2lbMl0gXgorICAgICAgICAgICAgICAgICAgICAgICAgY3JjX2lbMV0gXiBjcmNfaVswXTsKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL2NvcmUvdXNiaF9jcmM1LnN2IGIvdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9jb3JlL3VzYmhfY3JjNS5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTI1OTA1Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9jb3JlL3VzYmhfY3JjNS5zdgpAQCAtMCwwICsxLDc5IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgICAgICAgICAgICAgICAgICAgVVNCIEZ1bGwgU3BlZWQgSG9zdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBWMC42CisvLyAgICAgICAgICAgICAgICAgICAgIFVsdHJhLUVtYmVkZGVkLmNvbQorLy8gICAgICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAxNS0yMDIwCisvLworLy8gICAgICAgICAgICAgICAgIEVtYWlsOiBhZG1pbkB1bHRyYS1lbWJlZGRlZC5jb20KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICBMaWNlbnNlOiBHUEwKKy8vIElmIHlvdSB3b3VsZCBsaWtlIGEgdmVyc2lvbiB3aXRoIGEgbW9yZSBwZXJtaXNzaXZlIGxpY2Vuc2UgZm9yCisvLyB1c2UgaW4gY2xvc2VkIHNvdXJjZSBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucyBwbGVhc2UgY29udGFjdCBtZQorLy8gZm9yIGRldGFpbHMuCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8gVGhpcyBmaWxlIGlzIG9wZW4gc291cmNlIEhETDsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorLy8gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisvLyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKy8vIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisvLworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIAorLy8gTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworLy8gVVNBCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZWQgRmlsZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTW9kdWxlOiA1LWJpdCBDUkMgdXNlZCBieSBVU0IgdG9rZW5zCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittb2R1bGUgdXNiaF9jcmM1CisoCisgICAgaW5wdXQgWzQ6MF0gICAgIGNyY19pLAorICAgIGlucHV0IFsxMDowXSAgICBkYXRhX2ksCisgICAgb3V0cHV0IFs0OjBdICAgIGNyY19vCispOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbXBsZW1lbnRhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYXNzaWduIGNyY19vWzBdID0gICAgZGF0YV9pWzEwXSBeIGRhdGFfaVs5XSBeIGRhdGFfaVs2XSBeIGRhdGFfaVs1XSBeIGRhdGFfaVszXSBeIGRhdGFfaVswXSBeCisgICAgICAgICAgICAgICAgICAgICAgIGNyY19pWzBdIF4gY3JjX2lbM10gXiBjcmNfaVs0XTsKKworYXNzaWduIGNyY19vWzFdID0gICAgZGF0YV9pWzEwXSBeIGRhdGFfaVs3XSBeIGRhdGFfaVs2XSBeIGRhdGFfaVs0XSBeIGRhdGFfaVsxXSBeCisgICAgICAgICAgICAgICAgICAgICAgIGNyY19pWzBdIF4gY3JjX2lbMV0gXiBjcmNfaVs0XTsKKworYXNzaWduIGNyY19vWzJdID0gICAgZGF0YV9pWzEwXSBeIGRhdGFfaVs5XSBeIGRhdGFfaVs4XSBeIGRhdGFfaVs3XSBeIGRhdGFfaVs2XSBeIGRhdGFfaVszXSBeIGRhdGFfaVsyXSBeIGRhdGFfaVswXSBeCisgICAgICAgICAgICAgICAgICAgICAgIGNyY19pWzBdIF4gY3JjX2lbMV0gXiBjcmNfaVsyXSBeIGNyY19pWzNdIF4gY3JjX2lbNF07CisKK2Fzc2lnbiBjcmNfb1szXSA9ICAgIGRhdGFfaVsxMF0gXiBkYXRhX2lbOV0gXiBkYXRhX2lbOF0gXiBkYXRhX2lbN10gXiBkYXRhX2lbNF0gXiBkYXRhX2lbM10gXiBkYXRhX2lbMV0gXiAKKyAgICAgICAgICAgICAgICAgICAgICAgY3JjX2lbMV0gXiBjcmNfaVsyXSBeIGNyY19pWzNdIF4gY3JjX2lbNF07CisKK2Fzc2lnbiBjcmNfb1s0XSA9ICAgIGRhdGFfaVsxMF0gXiBkYXRhX2lbOV0gXiBkYXRhX2lbOF0gXiBkYXRhX2lbNV0gXiBkYXRhX2lbNF0gXiBkYXRhX2lbMl0gXgorICAgICAgICAgICAgICAgICAgICAgICBjcmNfaVsyXSBeIGNyY19pWzNdIF4gY3JjX2lbNF07CisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9jb3JlL3VzYmhfZmlmby5zdiBiL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvY29yZS91c2JoX2ZpZm8uc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcxMTNjMwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvY29yZS91c2JoX2ZpZm8uc3YKQEAgLTAsMCArMSwxNDMgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICAgICAgICAgICAgICAgICAgICBVU0IgRnVsbCBTcGVlZCBIb3N0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIFYwLjYKKy8vICAgICAgICAgICAgICAgICAgICAgVWx0cmEtRW1iZWRkZWQuY29tCisvLyAgICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDE1LTIwMjAKKy8vCisvLyAgICAgICAgICAgICAgICAgRW1haWw6IGFkbWluQHVsdHJhLWVtYmVkZGVkLmNvbQorLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgIExpY2Vuc2U6IEdQTAorLy8gSWYgeW91IHdvdWxkIGxpa2UgYSB2ZXJzaW9uIHdpdGggYSBtb3JlIHBlcm1pc3NpdmUgbGljZW5zZSBmb3IKKy8vIHVzZSBpbiBjbG9zZWQgc291cmNlIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zIHBsZWFzZSBjb250YWN0IG1lCisvLyBmb3IgZGV0YWlscy4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisvLyBUaGlzIGZpbGUgaXMgb3BlbiBzb3VyY2UgSERMOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisvLyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKy8vIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorLy8gdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy8vCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgCisvLyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisvLyBVU0EKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlZCBGaWxlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZSB1c2JoX2ZpZm8KKygKKyAgICAvLyBJbnB1dHMKKyAgICAgaW5wdXQgICAgICAgICAgIGNsa19pCisgICAgLGlucHV0ICAgICAgICAgICByc3RuX2kKKyAgICAsaW5wdXQgIFsgIDc6MF0gIGRhdGFfaQorICAgICxpbnB1dCAgICAgICAgICAgcHVzaF9pCisgICAgLGlucHV0ICAgICAgICAgICBwb3BfaQorICAgICxpbnB1dCAgICAgICAgICAgZmx1c2hfaQorCisgICAgLy8gT3V0cHV0cworICAgICxvdXRwdXQgICAgICAgICAgZnVsbF9vCisgICAgLG91dHB1dCAgICAgICAgICBlbXB0eV9vCisgICAgLG91dHB1dCBbICA3OjBdICBkYXRhX28KKyk7CisKKworCitwYXJhbWV0ZXIgV0lEVEggICA9IDg7CitwYXJhbWV0ZXIgREVQVEggICA9IDY0OworcGFyYW1ldGVyIEFERFJfVyAgPSA2OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2NhbCBQYXJhbXMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvY2FscGFyYW0gQ09VTlRfVyA9IEFERFJfVyArIDE7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlZ2lzdGVycworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVnIFtXSURUSC0xOjBdICAgICAgICAgcmFtIFtERVBUSC0xOjBdOworcmVnIFtBRERSX1ctMTowXSAgICAgICAgcmRfcHRyOworcmVnIFtBRERSX1ctMTowXSAgICAgICAgd3JfcHRyOworcmVnIFtDT1VOVF9XLTE6MF0gICAgICAgY291bnQ7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFNlcXVlbnRpYWwKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCitiZWdpbgorICAgIGNvdW50ICAgPD0geyhDT1VOVF9XKSB7MSdiMH19OworICAgIHJkX3B0ciAgPD0geyhBRERSX1cpIHsxJ2IwfX07CisgICAgd3JfcHRyICA8PSB7KEFERFJfVykgezEnYjB9fTsKK2VuZAorZWxzZQorYmVnaW4KKworICAgIGlmIChmbHVzaF9pKQorICAgIGJlZ2luCisgICAgICAgIGNvdW50ICAgPD0geyhDT1VOVF9XKSB7MSdiMH19OworICAgICAgICByZF9wdHIgIDw9IHsoQUREUl9XKSB7MSdiMH19OworICAgICAgICB3cl9wdHIgIDw9IHsoQUREUl9XKSB7MSdiMH19OworICAgIGVuZAorCisgICAgLy8gUHVzaAorICAgIGlmIChwdXNoX2kgJiB+ZnVsbF9vKQorICAgIGJlZ2luCisgICAgICAgIHJhbVt3cl9wdHJdIDw9IGRhdGFfaTsKKyAgICAgICAgd3JfcHRyICAgICAgPD0gd3JfcHRyICsgMTsKKyAgICBlbmQKKworICAgIC8vIFBvcAorICAgIGlmIChwb3BfaSAmIH5lbXB0eV9vKQorICAgIGJlZ2luCisgICAgICAgIHJkX3B0ciAgICAgIDw9IHJkX3B0ciArIDE7CisgICAgZW5kCisKKyAgICAvLyBDb3VudCB1cAorICAgIGlmICgocHVzaF9pICYgfmZ1bGxfbykgJiB+KHBvcF9pICYgfmVtcHR5X28pKQorICAgIGJlZ2luCisgICAgICAgIGNvdW50IDw9IGNvdW50ICsgMTsKKyAgICBlbmQKKyAgICAvLyBDb3VudCBkb3duCisgICAgZWxzZSBpZiAofihwdXNoX2kgJiB+ZnVsbF9vKSAmIChwb3BfaSAmIH5lbXB0eV9vKSkKKyAgICBiZWdpbgorICAgICAgICBjb3VudCA8PSBjb3VudCAtIDE7CisgICAgZW5kCitlbmQKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDb21iaW5hdG9yaWFsCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qIHZlcmlsYXRvciBsaW50X29mZiBXSURUSCAqLworYXNzaWduIGZ1bGxfbyAgICA9IChjb3VudCA9PSBERVBUSCk7Cithc3NpZ24gZW1wdHlfbyAgID0gKGNvdW50ID09IDApOworLyogdmVyaWxhdG9yIGxpbnRfb24gV0lEVEggKi8KKworYXNzaWduIGRhdGFfbyAgICA9IHJhbVtyZF9wdHJdOworCisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9jb3JlL3VzYmhfc2llLnN2IGIvdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9jb3JlL3VzYmhfc2llLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMDQ2YzAKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL2NvcmUvdXNiaF9zaWUuc3YKQEAgLTAsMCArMSw4NDYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICAgICAgICAgICAgICAgICAgICBVU0IgRnVsbCBTcGVlZCBIb3N0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIFYwLjYKKy8vICAgICAgICAgICAgICAgICAgICAgVWx0cmEtRW1iZWRkZWQuY29tCisvLyAgICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDE1LTIwMjAKKy8vCisvLyAgICAgICAgICAgICAgICAgRW1haWw6IGFkbWluQHVsdHJhLWVtYmVkZGVkLmNvbQorLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgIExpY2Vuc2U6IEdQTAorLy8gSWYgeW91IHdvdWxkIGxpa2UgYSB2ZXJzaW9uIHdpdGggYSBtb3JlIHBlcm1pc3NpdmUgbGljZW5zZSBmb3IKKy8vIHVzZSBpbiBjbG9zZWQgc291cmNlIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zIHBsZWFzZSBjb250YWN0IG1lCisvLyBmb3IgZGV0YWlscy4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisvLyBUaGlzIGZpbGUgaXMgb3BlbiBzb3VyY2UgSERMOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisvLyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKy8vIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorLy8gdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy8vCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgCisvLyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisvLyBVU0EKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlZCBGaWxlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZSB1c2JoX3NpZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUGFyYW1zCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjKAorICAgICBwYXJhbWV0ZXIgVVNCX0NMS19GUkVRICAgICA9IDQ4MDAwMDAwCispCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQb3J0cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKAorICAgIC8vIElucHV0cworICAgIGlucHV0ICAgICAgICAgICBjbGtfaSwKKyAgICBpbnB1dCAgICAgICAgICAgcnN0bl9pLAorICAgIGlucHV0ICAgICAgICAgICBzdGFydF9pLAorICAgIGlucHV0ICAgICAgICAgICBpbl90cmFuc2Zlcl9pLAorICAgIGlucHV0ICAgICAgICAgICBzb2ZfdHJhbnNmZXJfaSwKKyAgICBpbnB1dCAgICAgICAgICAgcmVzcF9leHBlY3RlZF9pLAorICAgIGlucHV0ICBbICA3OjBdICB0b2tlbl9waWRfaSwKKyAgICBpbnB1dCAgWyAgNjowXSAgdG9rZW5fZGV2X2ksCisgICAgaW5wdXQgIFsgIDM6MF0gIHRva2VuX2VwX2ksCisgICAgaW5wdXQgIFsgMTU6MF0gIGRhdGFfbGVuX2ksCisgICAgaW5wdXQgICAgICAgICAgIGRhdGFfaWR4X2ksCisgICAgaW5wdXQgIFsgIDc6MF0gIHR4X2RhdGFfaSwKKyAgICBpbnB1dCAgICAgICAgICAgdXRtaV90eHJlYWR5X2ksCisgICAgaW5wdXQgIFsgIDc6MF0gIHV0bWlfZGF0YV9pLAorICAgIGlucHV0ICAgICAgICAgICB1dG1pX3J4dmFsaWRfaSwKKyAgICBpbnB1dCAgICAgICAgICAgdXRtaV9yeGFjdGl2ZV9pLAorICAgIGlucHV0ICBbICAxOjBdICB1dG1pX2xpbmVzdGF0ZV9pLAorCisgICAgLy8gT3V0cHV0cworICAgIG91dHB1dCAgICAgICAgICBhY2tfbywKKyAgICBvdXRwdXQgICAgICAgICAgdHhfcG9wX28sCisgICAgb3V0cHV0IFsgIDc6MF0gIHJ4X2RhdGFfbywKKyAgICBvdXRwdXQgICAgICAgICAgcnhfcHVzaF9vLAorICAgIG91dHB1dCAgICAgICAgICB0eF9kb25lX28sCisgICAgb3V0cHV0ICAgICAgICAgIHJ4X2RvbmVfbywKKyAgICBvdXRwdXQgICAgICAgICAgY3JjX2Vycl9vLAorICAgIG91dHB1dCAgICAgICAgICB0aW1lb3V0X28sCisgICAgb3V0cHV0IFsgIDc6MF0gIHJlc3BvbnNlX28sCisgICAgb3V0cHV0IFsgMTU6MF0gIHJ4X2NvdW50X28sCisgICAgb3V0cHV0ICAgICAgICAgIGlkbGVfbywKKyAgICBvdXRwdXQgWyAgNzowXSAgdXRtaV9kYXRhX28sCisgICAgb3V0cHV0ICAgICAgICAgIHV0bWlfdHh2YWxpZF9vCispOworCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVnaXN0ZXJzIC8gV2lyZXMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvZ2ljICAgICAgICAgICAgICAgICBzdGFydF9hY2tfcTsKKworLy8gU3RhdHVzCitsb2dpYyAgICAgICAgICAgICAgICAgc3RhdHVzX3R4X2RvbmVfcTsKK2xvZ2ljICAgICAgICAgICAgICAgICBzdGF0dXNfcnhfZG9uZV9xOworbG9naWMgICAgICAgICAgICAgICAgIHN0YXR1c19jcmNfZXJyX3E7Citsb2dpYyAgICAgICAgICAgICAgICAgc3RhdHVzX3RpbWVvdXRfcTsKK2xvZ2ljIFs3OjBdICAgICAgICAgICBzdGF0dXNfcmVzcG9uc2VfcTsKKworbG9naWMgWzE1OjBdICAgICAgICAgIGJ5dGVfY291bnRfcTsKK2xvZ2ljICAgICAgICAgICAgICAgICBpbl90cmFuc2Zlcl9xOworCitsb2dpYyBbODowXSAgICAgICAgICAgbGFzdF90eF90aW1lX3E7CisKK2xvZ2ljICAgICAgICAgICAgICAgICBzZW5kX2RhdGExX3E7Citsb2dpYyAgICAgICAgICAgICAgICAgc2VuZF9zb2ZfcTsKK2xvZ2ljICAgICAgICAgICAgICAgICBzZW5kX2Fja19xOworCisvLyBDUkMxNgorbG9naWMgWzE1OjBdICAgICAgICAgIGNyY19zdW1fcTsKK2xvZ2ljICBbMTU6MF0gICAgICAgICBjcmNfb3V0X3c7Citsb2dpYyAgWzc6MF0gICAgICAgICAgY3JjX2RhdGFfaW5fdzsKKworLy8gQ1JDNQorbG9naWMgWzQ6MF0gICAgICAgICAgY3JjNV9vdXRfdzsKK3dpcmUgIFs0OjBdICAgICAgICAgIGNyYzVfbmV4dF93ID0gY3JjNV9vdXRfdyBeIDUnaDFGOworCitsb2dpYyBbMTU6MF0gICAgICAgICAgdG9rZW5fcTsKKworbG9naWMgICAgICAgICAgICAgICAgIHdhaXRfcmVzcF9xOworCitsb2dpYyBbMzowXSAgICAgICAgICAgc3RhdGVfcTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRGVmaW5pdGlvbnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvY2FscGFyYW0gUlhfVElNRU9VVCAgICAgICA9IChVU0JfQ0xLX0ZSRVEgPT0gNjAwMDAwMDApID8gOSdkNTExIDogOSdkMjU1OworIC8vIDIgRlMgYml0IHRpbWVzICh4NSBDTEtzIEAgNjBNSHosIHg0IENMS3MgQCA0OE1IeikKK2xvY2FscGFyYW0gVFhfSUZTICAgICAgICAgICA9IChVU0JfQ0xLX0ZSRVEgPT0gNjAwMDAwMDApID8gNCdkMTAgIDogNCdkNzsgCisKK2xvY2FscGFyYW0gUElEX09VVCAgICAgICAgICA9IDgnaEUxOworbG9jYWxwYXJhbSBQSURfSU4gICAgICAgICAgID0gOCdoNjk7Citsb2NhbHBhcmFtIFBJRF9TT0YgICAgICAgICAgPSA4J2hBNTsKK2xvY2FscGFyYW0gUElEX1NFVFVQICAgICAgICA9IDgnaDJEOworCitsb2NhbHBhcmFtIFBJRF9EQVRBMCAgICAgICAgPSA4J2hDMzsKK2xvY2FscGFyYW0gUElEX0RBVEExICAgICAgICA9IDgnaDRCOworCitsb2NhbHBhcmFtIFBJRF9BQ0sgICAgICAgICAgPSA4J2hEMjsKK2xvY2FscGFyYW0gUElEX05BSyAgICAgICAgICA9IDgnaDVBOworbG9jYWxwYXJhbSBQSURfU1RBTEwgICAgICAgID0gOCdoMUU7CisKKy8vIFN0YXRlcworbG9jYWxwYXJhbSBTVEFURV9JRExFICAgICAgID0gNCdkMDsKK2xvY2FscGFyYW0gU1RBVEVfUlhfREFUQSAgICA9IDQnZDE7Citsb2NhbHBhcmFtIFNUQVRFX1RYX1BJRCAgICAgPSA0J2QyOworbG9jYWxwYXJhbSBTVEFURV9UWF9EQVRBICAgID0gNCdkMzsKK2xvY2FscGFyYW0gU1RBVEVfVFhfQ1JDMSAgICA9IDQnZDQ7Citsb2NhbHBhcmFtIFNUQVRFX1RYX0NSQzIgICAgPSA0J2Q1OworbG9jYWxwYXJhbSBTVEFURV9UWF9UT0tFTjEgID0gNCdkNjsKK2xvY2FscGFyYW0gU1RBVEVfVFhfVE9LRU4yICA9IDQnZDc7Citsb2NhbHBhcmFtIFNUQVRFX1RYX1RPS0VOMyAgPSA0J2Q4OworbG9jYWxwYXJhbSBTVEFURV9UWF9BQ0tOQUsgID0gNCdkOTsKK2xvY2FscGFyYW0gU1RBVEVfVFhfV0FJVCAgICA9IDQnZDEwOworbG9jYWxwYXJhbSBTVEFURV9SWF9XQUlUICAgID0gNCdkMTE7Citsb2NhbHBhcmFtIFNUQVRFX1RYX0lGUyAgICAgPSA0J2QxMjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gV2lyZXMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ4IGRhdGEKK2xvZ2ljIFs3OjBdIHJ4X2RhdGFfdzsKK2xvZ2ljICAgICAgIGRhdGFfcmVhZHlfdzsKK2xvZ2ljICAgICAgIGNyY19ieXRlX3c7Citsb2dpYyAgICAgICByeF9hY3RpdmVfdzsKK2xvZ2ljICAgICAgIHJ4X2FjdGl2ZV9yaXNlX3c7CisKKy8vIFR4L1J4IC0+IFR4IElGUyB0aW1lb3V0Citsb2dpYyBpZnNfYnVzeV93OworCisvLyBSZXNwb25zZSB0aW1lb3V0IChubyByZXNwb25zZSBhZnRlciA1MDB1UyBmcm9tIHRyYW5zbWl0KQord2lyZSByeF9yZXNwX3RpbWVvdXRfdyA9IChsYXN0X3R4X3RpbWVfcSA+PSBSWF9USU1FT1VUKSAmIHdhaXRfcmVzcF9xOworCisvLyBDUkMxNiBlcnJvciBvbiByZWNlaXZlZCBkYXRhCit3aXJlIGNyY19lcnJvcl93ID0gKHN0YXRlX3EgPT0gU1RBVEVfUlhfREFUQSkgJiYgIXJ4X2FjdGl2ZV93ICYmIGluX3RyYW5zZmVyX3EgICAgICAgICYmCisgICAgICAgICAgICAgICAgICAgKHN0YXR1c19yZXNwb25zZV9xID09IFBJRF9EQVRBMCB8fCBzdGF0dXNfcmVzcG9uc2VfcSA9PSBQSURfREFUQTEpICYmCisgICAgICAgICAgICAgICAgICAgKGNyY19zdW1fcSAhPSAxNidoQjAwMSk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFN0YXRlIE1hY2hpbmUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvZ2ljIFszOjBdIG5leHRfc3RhdGVfcjsKKworYWx3YXlzIEAgKgorYmVnaW4KKyAgICBuZXh0X3N0YXRlX3IgPSBzdGF0ZV9xOworICAgICAgICAKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gVHggU3RhdGUgTWFjaGluZQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBjYXNlIChzdGF0ZV9xKQorCisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLy8gVFhfVE9LRU4xIChieXRlIDEgb2YgdG9rZW4pCisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgU1RBVEVfVFhfVE9LRU4xIDoKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIC8vIERhdGEgc2VudD8KKyAgICAgICAgICAgIGlmICh1dG1pX3R4cmVhZHlfaSkKKyAgICAgICAgICAgICAgICBuZXh0X3N0YXRlX3IgPSBTVEFURV9UWF9UT0tFTjI7CisgICAgICAgIGVuZAorICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC8vIFRYX1RPS0VOMiAoYnl0ZSAyIG9mIHRva2VuKQorICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIFNUQVRFX1RYX1RPS0VOMiA6CisgICAgICAgIGJlZ2luCisgICAgICAgICAgICAvLyBEYXRhIHNlbnQ/CisgICAgICAgICAgICBpZiAodXRtaV90eHJlYWR5X2kpCisgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZV9yID0gU1RBVEVfVFhfVE9LRU4zOyAgICAgICAgCisgICAgICAgIGVuZAorICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC8vIFRYX1RPS0VOMyAoYnl0ZSAzIG9mIHRva2VuKQorICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIFNUQVRFX1RYX1RPS0VOMyA6CisgICAgICAgIGJlZ2luCisgICAgICAgICAgICAvLyBEYXRhIHNlbnQ/CisgICAgICAgICAgICBpZiAodXRtaV90eHJlYWR5X2kpCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIC8vIFNPRiAtIG5vIGRhdGEgcGFja2V0CisgICAgICAgICAgICAgICAgaWYgKHNlbmRfc29mX3EpCisgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGVfciA9IFNUQVRFX1RYX0lGUzsKKyAgICAgICAgICAgICAgICAvLyBJTiAtIHdhaXQgZm9yIGRhdGEKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpbl90cmFuc2Zlcl9xKQorICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlX3IgPSBTVEFURV9SWF9XQUlUOworICAgICAgICAgICAgICAgIC8vIE9VVC9TRVRVUCAtIFNlbmQgZGF0YSBvciBaTFAKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGVfciA9IFNUQVRFX1RYX0lGUzsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLyBUWF9JRlMKKyAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBTVEFURV9UWF9JRlMgOgorICAgICAgICBiZWdpbgorICAgICAgICAgICAgLy8gSUZTIGV4cGlyZWQKKyAgICAgICAgICAgIGlmICh+aWZzX2J1c3lfdykKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgLy8gU09GIC0gbm8gZGF0YSBwYWNrZXQKKyAgICAgICAgICAgICAgICBpZiAoc2VuZF9zb2ZfcSkKKyAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZV9yID0gU1RBVEVfSURMRTsKKyAgICAgICAgICAgICAgICAvLyBPVVQvU0VUVVAgLSBTZW5kIGRhdGEgb3IgWkxQCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlX3IgPSBTVEFURV9UWF9QSUQ7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLy8gVFhfUElECisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgU1RBVEVfVFhfUElEIDoKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIC8vIExhc3QgZGF0YSBieXRlIHNlbnQ/CisgICAgICAgICAgICBpZiAodXRtaV90eHJlYWR5X2kgJiYgKGJ5dGVfY291bnRfcSA9PSAxNidiMCkpCisgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZV9yID0gU1RBVEVfVFhfQ1JDMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHV0bWlfdHhyZWFkeV9pKQorICAgICAgICAgICAgICAgIG5leHRfc3RhdGVfciA9IFNUQVRFX1RYX0RBVEE7CisgICAgICAgIGVuZAorICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC8vIFRYX0RBVEEKKyAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBTVEFURV9UWF9EQVRBIDoKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIC8vIExhc3QgZGF0YSBieXRlIHNlbnQ/CisgICAgICAgICAgICBpZiAodXRtaV90eHJlYWR5X2kgJiYgKGJ5dGVfY291bnRfcSA9PSAxNidiMCkpCisgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZV9yID0gU1RBVEVfVFhfQ1JDMTsKKyAgICAgICAgZW5kCisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLy8gVFhfQ1JDMSAoZmlyc3QgYnl0ZSkKKyAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBTVEFURV9UWF9DUkMxIDoKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIC8vIERhdGEgc2VudD8KKyAgICAgICAgICAgIGlmICh1dG1pX3R4cmVhZHlfaSkKKyAgICAgICAgICAgICAgICBuZXh0X3N0YXRlX3IgPSBTVEFURV9UWF9DUkMyOworICAgICAgICBlbmQKKyAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLyBUWF9DUkMgKHNlY29uZCBieXRlKQorICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIFNUQVRFX1RYX0NSQzIgOgorICAgICAgICBiZWdpbgorICAgICAgICAgICAgLy8gRGF0YSBzZW50PworICAgICAgICAgICAgaWYgKHV0bWlfdHhyZWFkeV9pKQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgIC8vIElmIGEgcmVzcG9uc2UgaXMgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgIGlmICh3YWl0X3Jlc3BfcSkKKyAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGVfciA9IFNUQVRFX1JYX1dBSVQ7CisgICAgICAgICAgICAgICAgLy8gTm8gcmVzcG9uc2UgZXhwZWN0ZWQgKGUuZyBJU08gdHJhbnNmZXIpCisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlX3IgPSBTVEFURV9JRExFOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLyBTVEFURV9UWF9XQUlUCisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgU1RBVEVfVFhfV0FJVCA6CisgICAgICAgIGJlZ2luCisgICAgICAgICAgICAvLyBXYWl0ZWQgbG9uZyBlbm91Z2g/CisgICAgICAgICAgICBpZiAofmlmc19idXN5X3cpCisgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZV9yID0gU1RBVEVfVFhfQUNLTkFLOworICAgICAgICBlbmQgICAgICAgIAorICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC8vIFNUQVRFX1RYX0FDS05BSworICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIFNUQVRFX1RYX0FDS05BSyA6CisgICAgICAgIGJlZ2luCisgICAgICAgICAgICAvLyBEYXRhIHNlbnQ/CisgICAgICAgICAgICBpZiAodXRtaV90eHJlYWR5X2kpCisgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZV9yID0gU1RBVEVfSURMRTsKKyAgICAgICAgZW5kCisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLy8gU1RBVEVfUlhfV0FJVAorICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIFNUQVRFX1JYX1dBSVQgOgorICAgICAgICBiZWdpbgorICAgICAgICAgICAvLyBEYXRhIHJlY2VpdmVkPworICAgICAgICAgICBpZiAoZGF0YV9yZWFkeV93KQorICAgICAgICAgICAgICBuZXh0X3N0YXRlX3IgPSBTVEFURV9SWF9EQVRBOworICAgICAgICAgICAgLy8gV2FpdGVkIGxvbmcgZW5vdWdoPworICAgICAgICAgICBlbHNlIGlmIChyeF9yZXNwX3RpbWVvdXRfdykKKyAgICAgICAgICAgICAgbmV4dF9zdGF0ZV9yID0gU1RBVEVfSURMRTsKKyAgICAgICAgZW5kCisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLy8gUlhfREFUQQorICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIFNUQVRFX1JYX0RBVEEgOgorICAgICAgICBiZWdpbgorICAgICAgICAgICAgLy8gUmVjZWl2ZSBjb21wbGV0ZQorICAgICAgICAgICAgaWYgKH5yeF9hY3RpdmVfdykKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgLy8gU2VuZCBBQ0sgYnV0IGluY29taW5nIGRhdGEgaGFkIENSQyBlcnJvciwgZG8gbm90IEFDSworICAgICAgICAgICAgICAgIGlmIChzZW5kX2Fja19xICYmIGNyY19lcnJvcl93KQorICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlX3IgPSBTVEFURV9JRExFOworICAgICAgICAgICAgICAgIC8vIFNlbmQgYW4gQUNLIHJlc3BvbnNlIHdpdGhvdXQgQ1BVIGludGVyYWN0aW9uPworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlbmRfYWNrX3EgJiYgKHN0YXR1c19yZXNwb25zZV9xID09IFBJRF9EQVRBMCB8fCBzdGF0dXNfcmVzcG9uc2VfcSA9PSBQSURfREFUQTEpKQorICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlX3IgPSBTVEFURV9UWF9XQUlUOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZV9yID0gU1RBVEVfSURMRTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLyBJRExFIC8gUkVDRUlWRSBCRUdJTgorICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIFNUQVRFX0lETEUgOgorICAgICAgICBiZWdpbgorICAgICAgICAgICAvLyBUb2tlbiB0cmFuc2ZlciByZXF1ZXN0CisgICAgICAgICAgIGlmIChzdGFydF9pKQorICAgICAgICAgICAgICBuZXh0X3N0YXRlX3IgID0gU1RBVEVfVFhfVE9LRU4xOworICAgICAgICBlbmQKKyAgICAgICAgZGVmYXVsdCA6CisgICAgICAgICAgIDsKKyAgICBlbmRjYXNlCitlbmQKKworLy8gVXBkYXRlIHN0YXRlCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHN0YXRlX3EgICA8PSBTVEFURV9JRExFOworZWxzZQorICAgIHN0YXRlX3EgICA8PSBuZXh0X3N0YXRlX3I7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFR4IFRva2VuCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHRva2VuX3EgICAgICAgICA8PSAxNidoMDAwMDsKK2Vsc2UgaWYgKHN0YXRlX3EgPT0gU1RBVEVfSURMRSkKKyAgICB0b2tlbl9xICAgICAgICAgPD0ge3Rva2VuX2Rldl9pLCB0b2tlbl9lcF9pLCA1J2IwfTsKKy8vIFBJRCBvZiB0b2tlbiBzZW50LCBjYXB0dXJlIGNhbGN1bGF0ZWQgQ1JDIGZvciB0b2tlbiBwYWNrZXQKK2Vsc2UgaWYgKHN0YXRlX3EgPT0gU1RBVEVfVFhfVE9LRU4xICYmIHV0bWlfdHhyZWFkeV9pKQorICAgIHRva2VuX3FbNDowXSAgICA8PSBjcmM1X25leHRfdzsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVHggRU9QIC0gZGV0ZWN0IGVuZCBvZiB0cmFuc21pdCAodG9rZW4sIGRhdGEgb3IgQUNLL05BSykKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3JlZyBbMTowXSB1dG1pX2xpbmVzdGF0ZV9xOworcmVnICAgICAgIHNlMF9kZXRlY3RfcTsKK3JlZyAgICAgICB3YWl0X2VvcF9xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHV0bWlfbGluZXN0YXRlX3EgPD0gMidiMDsKK2Vsc2UKKyAgICB1dG1pX2xpbmVzdGF0ZV9xIDw9IHV0bWlfbGluZXN0YXRlX2k7CisKKy8vIFNFMCBmaWx0ZXJpbmcgKDIgY3ljbGVzIEZTKQord2lyZSBzZTBfZGV0ZWN0X3cgPSAodXRtaV9saW5lc3RhdGVfcSA9PSAyJ2IwMCAmJiB1dG1pX2xpbmVzdGF0ZV9pID09IDInYjAwKTsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICBzZTBfZGV0ZWN0X3EgPD0gMSdiMDsKK2Vsc2UKKyAgICBzZTBfZGV0ZWN0X3EgPD0gc2UwX2RldGVjdF93OworCisvLyBUT0RPOiBUaGlzIG5lZWRzIHVwZGF0aW5nIGZvciBIUyBVU0IuLi4KK3dpcmUgZW9wX2RldGVjdGVkX3cgPSBzZTBfZGV0ZWN0X3EgJiAodXRtaV9saW5lc3RhdGVfaSAhPSAyJ2IwMCk7CisKKy8vIEVuZCBvZiB0cmFuc21pdCBkZXRlY3Rpb24KK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgd2FpdF9lb3BfcSA8PSAxJ2IwOworZWxzZSBpZiAoZW9wX2RldGVjdGVkX3cpCisgICAgd2FpdF9lb3BfcSA8PSAxJ2IwOworZWxzZSBpZiAoKHN0YXRlX3EgPT0gU1RBVEVfVFhfQ1JDMiAgICYmIG5leHRfc3RhdGVfciAhPSBTVEFURV9UWF9DUkMyKSAgIHx8CisgICAgICAgICAoc3RhdGVfcSA9PSBTVEFURV9UWF9UT0tFTjMgJiYgbmV4dF9zdGF0ZV9yICE9IFNUQVRFX1RYX1RPS0VOMykgfHwKKyAgICAgICAgIChzdGF0ZV9xID09IFNUQVRFX1RYX0FDS05BSyAmJiBuZXh0X3N0YXRlX3IgIT0gU1RBVEVfVFhfQUNLTkFLKSkKKyAgICB3YWl0X2VvcF9xIDw9IDEnYjE7CitlbHNlIGlmIChyeF9hY3RpdmVfcmlzZV93KQorICAgIHdhaXRfZW9wX3EgPD0gMSdiMTsKKworbG9jYWxwYXJhbSBUWF9JRlNfVyA9IDQ7CityZWcgW1RYX0lGU19XLTE6MF0gdHhfaWZzX3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgdHhfaWZzX3EgPD0geyhUWF9JRlNfVyl7MSdiMH19OworLy8gU3RhcnQgY291bnRpbmcgZG93biBmcm9tIGxhc3QgVHggb3IgRU9QIGJlaW5nIGRldGVjdGVkIGF0IGVuZCBvZiBSeAorZWxzZSBpZiAod2FpdF9lb3BfcSB8fCBlb3BfZGV0ZWN0ZWRfdykKKyAgICB0eF9pZnNfcSA8PSBUWF9JRlM7CisvLyBEZWNyZW1lbnQgSUZTIGNvdW50ZXIKK2Vsc2UgaWYgKHR4X2lmc19xICE9ICB7KFRYX0lGU19XKXsxJ2IwfX0pCisgICAgdHhfaWZzX3EgPD0gdHhfaWZzX3EgLSAxOworCithc3NpZ24gaWZzX2J1c3lfdyA9IHdhaXRfZW9wX3EgfHwgKHR4X2lmc19xICE9IHsoVFhfSUZTX1cpezEnYjB9fSk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFR4IFRpbWVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIGxhc3RfdHhfdGltZV9xIDw9IDknZDA7CisvLyBTdGFydCBjb3VudGluZyBmcm9tIGxhc3QgVHgKK2Vsc2UgaWYgKHN0YXRlX3EgPT0gU1RBVEVfSURMRSB8fCAodXRtaV90eHZhbGlkX28gJiYgdXRtaV90eHJlYWR5X2kpKQorICAgIGxhc3RfdHhfdGltZV9xIDw9IDknZDA7CisvLyBJbmNyZW1lbnQgdGhlIFR4IHRpbWVvdXQKK2Vsc2UgaWYgKGxhc3RfdHhfdGltZV9xICE9IFJYX1RJTUVPVVQpCisgICAgbGFzdF90eF90aW1lX3EgPD0gbGFzdF90eF90aW1lX3EgKyA5J2QxOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUcmFuc21pdCAvIFJlY2VpdmUgY291bnRlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICBieXRlX2NvdW50X3EgPD0gMTYnaDAwMDA7CisvLyBOZXcgdHJhbnNmZXIgcmVxdWVzdCAobm90IGF1dG9tYXRpYyBTT0YgcmVxdWVzdCkKK2Vsc2UgaWYgKHN0YXRlX3EgPT0gU1RBVEVfSURMRSAmJiBzdGFydF9pICYmICFzb2ZfdHJhbnNmZXJfaSkKKyAgICBieXRlX2NvdW50X3EgPD0gZGF0YV9sZW5faTsKK2Vsc2UgaWYgKHN0YXRlX3EgPT0gU1RBVEVfUlhfV0FJVCkKKyAgICBieXRlX2NvdW50X3EgPD0gMTYnaDAwMDA7CisvLyBUcmFuc21pdCBieXRlCitlbHNlIGlmICgoc3RhdGVfcSA9PSBTVEFURV9UWF9QSUQgfHwgc3RhdGVfcSA9PSBTVEFURV9UWF9EQVRBKSAmJiB1dG1pX3R4cmVhZHlfaSkKK2JlZ2luCisgICAgLy8gQ291bnQgZG93biBkYXRhIGxlZnQgdG8gc2VuZAorICAgIGlmIChieXRlX2NvdW50X3EgIT0gMTYnZDApCisgICAgICAgIGJ5dGVfY291bnRfcSA8PSBieXRlX2NvdW50X3EgLSAxNidkMTsKK2VuZAorLy8gUmVjZWl2ZWQgYnl0ZQorZWxzZSBpZiAoc3RhdGVfcSA9PSBTVEFURV9SWF9EQVRBICYmIGRhdGFfcmVhZHlfdyAmJiAhY3JjX2J5dGVfdykKKyAgICBieXRlX2NvdW50X3EgPD0gYnl0ZV9jb3VudF9xICsgMTYnZDE7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRyYW5zZmVyIHN0YXJ0IGFjaworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICBzdGFydF9hY2tfcSAgPD0gMSdiMDsKKy8vIEZpcnN0IGJ5dGUgb2YgUElEIHNlbnQsIGFjayB0cmFuc2ZlciByZXF1ZXN0CitlbHNlIGlmIChzdGF0ZV9xID09IFNUQVRFX1RYX1RPS0VOMSAmJiB1dG1pX3R4cmVhZHlfaSkKKyAgICBzdGFydF9hY2tfcSAgPD0gMSdiMTsKK2Vsc2UKKyAgICBzdGFydF9hY2tfcSAgPD0gMSdiMDsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVjb3JkIHJlcXVlc3QgZGV0YWlscworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKK2JlZ2luCisgICAgaW5fdHJhbnNmZXJfcSAgIDw9IDEnYjA7CisgICAgc2VuZF9hY2tfcSAgICAgIDw9IDEnYjA7CisgICAgc2VuZF9kYXRhMV9xICAgIDw9IDEnYjA7CisgICAgc2VuZF9zb2ZfcSAgICAgIDw9IDEnYjA7CitlbmQKKy8vIFN0YXJ0IG9mIG5ldyByZXF1ZXN0CitlbHNlIGlmIChzdGF0ZV9xID09IFNUQVRFX0lETEUgJiYgc3RhcnRfaSkKK2JlZ2luCisgICAgLy8gVHJhbnNmZXIgcmVxdWVzdAorICAgIC8vIGUuZy4gKEgpU09GICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc29mX3RyYW5zZmVyX2ldCisgICAgLy8gICAgICAoSClPVVQgKyAoSClEQVRBICsgKEYpQUNLL05BQ0svU1RBTEwgICAgIFtkYXRhX2xlbl9pID49IDAgJiYgIWluX3RyYW5zZmVyX2ldCisgICAgLy8gICAgICAoSClJTiAgKyAoRilEQVRBICsgKEgpQUNLICAgICAgICAgICAgICAgIFtpbl90cmFuc2Zlcl9pXQorICAgIC8vICAgICAgKEgpSU4gICsgKEYpTkFLL1NUQUxMICAgICAgICAgICAgICAgICAgICBbaW5fdHJhbnNmZXJfaV0KKyAgICBpbl90cmFuc2Zlcl9xICAgPD0gaW5fdHJhbnNmZXJfaTsKKworICAgIC8vIFNlbmQgQUNLIGluIHJlc3BvbnNlIHRvIElOIERBVEEKKyAgICBzZW5kX2Fja19xICAgICAgPD0gaW5fdHJhbnNmZXJfaSAmJiByZXNwX2V4cGVjdGVkX2k7CisKKyAgICAvLyBEQVRBMC8xCisgICAgc2VuZF9kYXRhMV9xICAgIDw9IGRhdGFfaWR4X2k7CisKKyAgICBzZW5kX3NvZl9xICAgICAgPD0gc29mX3RyYW5zZmVyX2k7CitlbmQKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVzcG9uc2UgZXhwZWN0ZWQKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgd2FpdF9yZXNwX3EgPD0gMSdiMDsKKy8vIEluY29taW5nIGRhdGEKK2Vsc2UgaWYgKHN0YXRlX3EgPT0gU1RBVEVfUlhfV0FJVCAmJiBkYXRhX3JlYWR5X3cpCisgICAgd2FpdF9yZXNwX3EgPD0gMSdiMDsKK2Vsc2UgaWYgKHN0YXRlX3EgPT0gU1RBVEVfSURMRSAmJiBzdGFydF9pKQorICAgIHdhaXRfcmVzcF9xIDw9IHJlc3BfZXhwZWN0ZWRfaTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU3RhdHVzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2JlZ2luCisgICBpZiAoIXJzdG5faSkKKyAgIGJlZ2luCisgICAgICAgc3RhdHVzX3Jlc3BvbnNlX3EgICAgPD0gOCdoMDA7CisgICAgICAgc3RhdHVzX3RpbWVvdXRfcSAgICAgPD0gMSdiMDsKKyAgICAgICBzdGF0dXNfcnhfZG9uZV9xICAgICA8PSAxJ2IwOworICAgICAgIHN0YXR1c190eF9kb25lX3EgICAgIDw9IDEnYjA7CisgICBlbmQKKyAgIGVsc2UKKyAgIGJlZ2luCisgICAgICAgIGNhc2UgKHN0YXRlX3EpCisKKyAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLyBSWF9XQUlUCisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgU1RBVEVfUlhfV0FJVCA6CisgICAgICAgIGJlZ2luCisgICAgICAgICAgIC8vIFN0b3JlIHJlc3BvbnNlIFBJRAorICAgICAgICAgICBpZiAoZGF0YV9yZWFkeV93KQorICAgICAgICAgICAgICAgc3RhdHVzX3Jlc3BvbnNlX3EgICA8PSByeF9kYXRhX3c7CisKKyAgICAgICAgICAgLy8gV2FpdGVkIGxvbmcgZW5vdWdoPworICAgICAgICAgICBpZiAocnhfcmVzcF90aW1lb3V0X3cpCisgICAgICAgICAgICAgICBzdGF0dXNfdGltZW91dF9xICAgIDw9IDEnYjE7CisKKyAgICAgICAgICAgIHN0YXR1c190eF9kb25lX3EgICAgIDw9IDEnYjA7CisgICAgICAgIGVuZAorICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC8vIFJYX0RBVEEKKyAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBTVEFURV9SWF9EQVRBIDoKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgLy8gUmVjZWl2ZSBjb21wbGV0ZQorICAgICAgICAgICBpZiAoIXV0bWlfcnhhY3RpdmVfaSkKKyAgICAgICAgICAgICAgICBzdGF0dXNfcnhfZG9uZV9xICAgPD0gMSdiMTsKKyAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN0YXR1c19yeF9kb25lX3EgICA8PSAxJ2IwOworICAgICAgICBlbmQKKyAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLyBUWF9DUkMgKHNlY29uZCBieXRlKQorICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIFNUQVRFX1RYX0NSQzIgOgorICAgICAgICBiZWdpbgorICAgICAgICAgICAgLy8gRGF0YSBzZW50PworICAgICAgICAgICAgaWYgKHV0bWlfdHhyZWFkeV9pICYmICF3YWl0X3Jlc3BfcSkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgLy8gVHJhbnNmZXIgbm93IGNvbXBsZXRlCisgICAgICAgICAgICAgICAgc3RhdHVzX3R4X2RvbmVfcSAgICA8PSAxJ2IxOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC8vIElETEUgLyBSRUNFSVZFIEJFR0lOCisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgU1RBVEVfSURMRSA6CisgICAgICAgIGJlZ2luCisgICAgICAgICAgICAvLyBUcmFuc2ZlciByZXF1ZXN0CisgICAgICAgICAgICAvLyBlLmcuIChIKVNPRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NvZl90cmFuc2Zlcl9pXQorICAgICAgICAgICAgLy8gICAgICAoSClPVVQgKyAoSClEQVRBICsgKEYpQUNLL05BQ0svU1RBTEwgICAgIFtkYXRhX2xlbl9pID49IDAgJiYgIWluX3RyYW5zZmVyX2ldCisgICAgICAgICAgICAvLyAgICAgIChIKUlOICArIChGKURBVEEgKyAoSClBQ0sgICAgICAgICAgICAgICAgW2luX3RyYW5zZmVyX2ldCisgICAgICAgICAgICAvLyAgICAgIChIKUlOICArIChGKU5BSy9TVEFMTCAgICAgICAgICAgICAgICAgICAgW2luX3RyYW5zZmVyX2ldCisgICAgICAgICAgICBpZiAoc3RhcnRfaSAmJiAhc29mX3RyYW5zZmVyX2kpIC8vIChub3QgYXV0b21hdGljIFNPRiByZXF1ZXN0KQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAvLyBDbGVhciBzdGF0dXMKKyAgICAgICAgICAgICAgICBzdGF0dXNfcmVzcG9uc2VfcSAgICAgICA8PSA4J2gwMDsKKyAgICAgICAgICAgICAgICBzdGF0dXNfdGltZW91dF9xICAgICAgICA8PSAxJ2IwOworICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIHN0YXR1c19yeF9kb25lX3EgICAgIDw9IDEnYjA7CisgICAgICAgICAgICBzdGF0dXNfdHhfZG9uZV9xICAgICA8PSAxJ2IwOworICAgICAgICBlbmQKKyAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLyBERUZBVUxUCisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgIAorICAgICAgICBkZWZhdWx0IDoKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIHN0YXR1c19yeF9kb25lX3EgICAgIDw9IDEnYjA7CisgICAgICAgICAgICBzdGF0dXNfdHhfZG9uZV9xICAgICA8PSAxJ2IwOworICAgICAgICBlbmQKKyAgICAgICBlbmRjYXNlCisgICBlbmQKK2VuZAorCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIERhdGEgZGVsYXkgKHRvIHN0cmlwIHRoZSBDUkMxNiB0cmFpbGluZyBieXRlcykKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3JlZyBbMzE6MF0gZGF0YV9idWZmZXJfcTsKK3JlZyBbMzowXSAgZGF0YV92YWxpZF9xOworcmVnIFszOjBdICByeF9hY3RpdmVfcTsKKword2lyZSBzaGlmdF9lbl93ID0gKHV0bWlfcnh2YWxpZF9pICYgdXRtaV9yeGFjdGl2ZV9pKSB8fCAhdXRtaV9yeGFjdGl2ZV9pOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIGRhdGFfYnVmZmVyX3EgPD0gMzInYjA7CitlbHNlIGlmIChzaGlmdF9lbl93KQorICAgIGRhdGFfYnVmZmVyX3EgPD0ge3V0bWlfZGF0YV9pLCBkYXRhX2J1ZmZlcl9xWzMxOjhdfTsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICBkYXRhX3ZhbGlkX3EgPD0gNCdiMDsKK2Vsc2UgaWYgKHNoaWZ0X2VuX3cpCisgICAgZGF0YV92YWxpZF9xIDw9IHsodXRtaV9yeHZhbGlkX2kgJiB1dG1pX3J4YWN0aXZlX2kpLCBkYXRhX3ZhbGlkX3FbMzoxXX07CitlbHNlCisgICAgZGF0YV92YWxpZF9xIDw9IHtkYXRhX3ZhbGlkX3FbMzoxXSwgMSdiMH07CisKK3JlZyBbMTowXSBkYXRhX2NyY19xOworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICBkYXRhX2NyY19xIDw9IDInYjA7CitlbHNlIGlmIChzaGlmdF9lbl93KQorICAgIGRhdGFfY3JjX3EgPD0geyF1dG1pX3J4YWN0aXZlX2ksIGRhdGFfY3JjX3FbMV19OworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHJ4X2FjdGl2ZV9xIDw9IDQnYjA7CitlbHNlCisgICAgcnhfYWN0aXZlX3EgPD0ge3V0bWlfcnhhY3RpdmVfaSwgcnhfYWN0aXZlX3FbMzoxXX07CisKK2Fzc2lnbiByeF9kYXRhX3cgICAgPSBkYXRhX2J1ZmZlcl9xWzc6MF07Cithc3NpZ24gZGF0YV9yZWFkeV93ID0gZGF0YV92YWxpZF9xWzBdOworYXNzaWduIGNyY19ieXRlX3cgICA9IGRhdGFfY3JjX3FbMF07Cithc3NpZ24gcnhfYWN0aXZlX3cgID0gcnhfYWN0aXZlX3FbMF07CisKK2Fzc2lnbiByeF9hY3RpdmVfcmlzZV93ID0gIXJ4X2FjdGl2ZV9xWzNdICYmIHV0bWlfcnhhY3RpdmVfaTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ1JDCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIENSQzE2IChEYXRhKQordXNiaF9jcmMxNgordV9jcmMxNgorKAorICAgIC5jcmNfaShjcmNfc3VtX3EpLAorICAgIC5kYXRhX2koY3JjX2RhdGFfaW5fdyksCisgICAgLmNyY19vKGNyY19vdXRfdykKKyk7CisKKy8vIENSQzUgKFRva2VuKQordXNiaF9jcmM1Cit1X2NyYzUKKygKKyAgICAuY3JjX2koNSdoMUYpLAorICAgIC5kYXRhX2kodG9rZW5fcVsxNTo1XSksCisgICAgLmNyY19vKGNyYzVfb3V0X3cpCispOworCisvLyBDUkMgY29udHJvbCAvIGNoZWNrCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2JlZ2luCisgICBpZiAoIXJzdG5faSkKKyAgIGJlZ2luCisgICAgICAgY3JjX3N1bV9xICAgICAgICAgIDw9IDE2J2hGRkZGOworICAgICAgIHN0YXR1c19jcmNfZXJyX3EgICA8PSAxJ2IwOworICAgZW5kCisgICBlbHNlCisgICBiZWdpbgorICAgICAgICBjYXNlIChzdGF0ZV9xKQorICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgLy8gVFhfUElECisgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICBTVEFURV9UWF9QSUQgOgorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAvLyBGaXJzdCBieXRlIGlzIFBJRCAobm90IENSQydkKSwgcmVzZXQgQ1JDMTYKKyAgICAgICAgICAgICAgICBjcmNfc3VtX3EgICAgICA8PSAxNidoRkZGRjsKKyAgICAgICAgICAgIGVuZCAgICAgICAgCisgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAvLyBUWF9EQVRBCisgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICBTVEFURV9UWF9EQVRBIDoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgLy8gRGF0YSBzZW50PworICAgICAgICAgICAgICAgIGlmICh1dG1pX3R4cmVhZHlfaSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvLyBOZXh0IENSQyBzdGFydCB2YWx1ZQorICAgICAgICAgICAgICAgICAgICBjcmNfc3VtX3EgICAgICA8PSBjcmNfb3V0X3c7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgIC8vIFJYX1dBSVQKKyAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgIFNUQVRFX1JYX1dBSVQgOgorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAvLyBSZXNldCBDUkMxNgorICAgICAgICAgICAgICAgIGNyY19zdW1fcSAgIDw9IDE2J2hGRkZGOworICAgICAgICAgICAgZW5kICAgICAgICAgICAgCisgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAvLyBSWF9EQVRBCisgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICBTVEFURV9SWF9EQVRBIDoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAvLyBEYXRhIHJlY2VpdmVkPworICAgICAgICAgICAgICAgaWYgKGRhdGFfcmVhZHlfdykKKyAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgLy8gTmV4dCBDUkMgc3RhcnQgdmFsdWUKKyAgICAgICAgICAgICAgICAgICBjcmNfc3VtX3EgICAgICAgICAgPD0gY3JjX291dF93OworICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAvLyBSZWNlaXZlIGNvbXBsZXRlCisgICAgICAgICAgICAgICBlbHNlIGlmICghcnhfYWN0aXZlX3cpCisgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvLyBJZiBzb21lIGRhdGEgcmVjZWl2ZWQsIGNoZWNrIENSQworICAgICAgICAgICAgICAgICAgICBpZiAoY3JjX2Vycm9yX3cpCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfY3JjX2Vycl9xICAgPD0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzX2NyY19lcnJfcSAgIDw9IDEnYjA7CisgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAvLyBJRExFIC8gUkVDRUlWRSBCRUdJTgorICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgU1RBVEVfSURMRSA6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgLy8gU3RhcnQgdHJhbnNmZXIgcmVxdWVzdAorICAgICAgICAgICAgICAgaWYgKHN0YXJ0X2kgJiYgIXNvZl90cmFuc2Zlcl9pKQorICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgIC8vIENsZWFyIGVycm9yIGZsYWchCisgICAgICAgICAgICAgICAgICBzdGF0dXNfY3JjX2Vycl9xICA8PSAxJ2IwOworICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgZGVmYXVsdCA6CisgICAgICAgICAgICAgICA7CisgICAgICAgIGVuZGNhc2UKKyAgIGVuZAorZW5kCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEFzc2lnbm1lbnRzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlIFsxNTowXSB0b2tlbl9yZXZfdzsKKworZ2VudmFyIGk7CitnZW5lcmF0ZQorZm9yIChpPTA7IGkgPCAxNjsgaT1pKzEpIAorYmVnaW4gOiBMT09QCisgICAgYXNzaWduIHRva2VuX3Jldl93W2ldID0gdG9rZW5fcVsxNS1pXTsKK2VuZAorZW5kZ2VuZXJhdGUKKworcmVnICAgICAgIHV0bWlfdHh2YWxpZF9yOworcmVnIFs3OjBdIHV0bWlfZGF0YV9yOworCithbHdheXMgQCAqCitiZWdpbgorICAgIGlmIChzdGF0ZV9xID09IFNUQVRFX1RYX0NSQzEpCisgICAgYmVnaW4KKyAgICAgICAgdXRtaV90eHZhbGlkX3IgPSAxJ2IxOworICAgICAgICB1dG1pX2RhdGFfciAgICA9IGNyY19zdW1fcVs3OjBdIF4gOCdoRkY7CisgICAgZW5kCisgICAgZWxzZSBpZiAoc3RhdGVfcSA9PSBTVEFURV9UWF9DUkMyKQorICAgIGJlZ2luCisgICAgICAgIHV0bWlfdHh2YWxpZF9yID0gMSdiMTsKKyAgICAgICAgdXRtaV9kYXRhX3IgICAgPSBjcmNfc3VtX3FbMTU6OF0gXiA4J2hGRjsKKyAgICBlbmQKKyAgICBlbHNlIGlmIChzdGF0ZV9xID09IFNUQVRFX1RYX1RPS0VOMSkKKyAgICBiZWdpbgorICAgICAgICB1dG1pX3R4dmFsaWRfciA9IDEnYjE7CisgICAgICAgIHV0bWlfZGF0YV9yICAgID0gdG9rZW5fcGlkX2k7CisgICAgZW5kCisgICAgZWxzZSBpZiAoc3RhdGVfcSA9PSBTVEFURV9UWF9UT0tFTjIpCisgICAgYmVnaW4KKyAgICAgICAgdXRtaV90eHZhbGlkX3IgPSAxJ2IxOworICAgICAgICB1dG1pX2RhdGFfciAgICA9IHRva2VuX3Jldl93Wzc6MF07CisgICAgZW5kCisgICAgZWxzZSBpZiAoc3RhdGVfcSA9PSBTVEFURV9UWF9UT0tFTjMpCisgICAgYmVnaW4KKyAgICAgICAgdXRtaV90eHZhbGlkX3IgPSAxJ2IxOworICAgICAgICB1dG1pX2RhdGFfciAgICA9IHRva2VuX3Jldl93WzE1OjhdOworICAgIGVuZAorICAgIGVsc2UgaWYgKHN0YXRlX3EgPT0gU1RBVEVfVFhfUElEKQorICAgIGJlZ2luCisgICAgICAgIHV0bWlfdHh2YWxpZF9yID0gMSdiMTsKKyAgICAgICAgdXRtaV9kYXRhX3IgICAgPSBzZW5kX2RhdGExX3EgPyBQSURfREFUQTEgOiBQSURfREFUQTA7CisgICAgZW5kCisgICAgZWxzZSBpZiAoc3RhdGVfcSA9PSBTVEFURV9UWF9BQ0tOQUspCisgICAgYmVnaW4KKyAgICAgICAgdXRtaV90eHZhbGlkX3IgPSAxJ2IxOworICAgICAgICB1dG1pX2RhdGFfciAgICA9IFBJRF9BQ0s7CisgICAgZW5kCisgICAgZWxzZSBpZiAoc3RhdGVfcSA9PSBTVEFURV9UWF9EQVRBKQorICAgIGJlZ2luCisgICAgICAgIHV0bWlfdHh2YWxpZF9yID0gMSdiMTsKKyAgICAgICAgdXRtaV9kYXRhX3IgICAgPSB0eF9kYXRhX2k7CisgICAgZW5kCisgICAgZWxzZQorICAgIGJlZ2luCisgICAgICAgIHV0bWlfdHh2YWxpZF9yID0gMSdiMDsKKyAgICAgICAgdXRtaV9kYXRhX3IgICAgPSA4J2IwOworICAgIGVuZAorZW5kCisKK2Fzc2lnbiB1dG1pX3R4dmFsaWRfbyA9IHV0bWlfdHh2YWxpZF9yOworYXNzaWduIHV0bWlfZGF0YV9vICAgID0gdXRtaV9kYXRhX3I7CisKKy8vIFB1c2ggaW5jb21pbmcgZGF0YSBpbnRvIEZJRk8gKG5vdCBQSUQgb3IgQ1JDKQorYXNzaWduIHJ4X2RhdGFfbyAgICA9IHJ4X2RhdGFfdzsKK2Fzc2lnbiByeF9wdXNoX28gICAgPSAoc3RhdGVfcSAhPSBTVEFURV9JRExFICYmIHN0YXRlX3EgIT0gU1RBVEVfUlhfV0FJVCkgJiBkYXRhX3JlYWR5X3cgJiAhY3JjX2J5dGVfdzsKKworYXNzaWduIGNyY19kYXRhX2luX3cgPSAoc3RhdGVfcSA9PSBTVEFURV9SWF9EQVRBKSA/IHJ4X2RhdGFfdyA6IHR4X2RhdGFfaTsKKworYXNzaWduIHJ4X2NvdW50X28gICA9IGJ5dGVfY291bnRfcTsKK2Fzc2lnbiBpZGxlX28gICAgICAgPSAoc3RhdGVfcSA9PSBTVEFURV9JRExFKTsKKworYXNzaWduIGFja19vICAgICAgICA9IHN0YXJ0X2Fja19xOworCithc3NpZ24gdHhfcG9wX28gICAgID0gc3RhdGVfcSA9PSBTVEFURV9UWF9EQVRBICYmIHV0bWlfdHhyZWFkeV9pOworCithc3NpZ24gdHhfZG9uZV9vICAgID0gc3RhdHVzX3R4X2RvbmVfcTsKK2Fzc2lnbiByeF9kb25lX28gICAgPSBzdGF0dXNfcnhfZG9uZV9xOworYXNzaWduIGNyY19lcnJfbyAgICA9IHN0YXR1c19jcmNfZXJyX3E7Cithc3NpZ24gdGltZW91dF9vICAgID0gc3RhdHVzX3RpbWVvdXRfcTsKK2Fzc2lnbiByZXNwb25zZV9vICAgPSBzdGF0dXNfcmVzcG9uc2VfcTsKKworCisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9maWxlbGlzdC5mIGIvdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9maWxlbGlzdC5mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyODg0NDMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL2ZpbGVsaXN0LmYKQEAgLTAsMCArMSwxMCBAQAorY29yZS91c2JoX2NvcmUuc3YKK2NvcmUvdXNiaF9jcmMxNi5zdgorY29yZS91c2JoX2NyYzUuc3YKK2NvcmUvdXNiaF9maWZvLnN2Citjb3JlL3VzYmhfc2llLnN2CitwaHkvdXNiX2ZzX3BoeS52CitwaHkvdXNiX3RyYW5zY2VpdmVyLnYKK2xpYi9hc3luY193Yi5zdgorbGliL2FzeW5jX2ZpZm8uc3YKK3RvcC91c2IxX2hvc3Quc3YgCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL2luY2x1ZGVzL3VzYmhfaG9zdF9kZWZzLnYgYi92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL2luY2x1ZGVzL3VzYmhfaG9zdF9kZWZzLnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMwNDQxZAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMvdXNiaF9ob3N0X2RlZnMudgpAQCAtMCwwICsxLDMyNSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgICAgICAgICAgICAgICAgICAgIFVTQiBGdWxsIFNwZWVkIEhvc3QKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgVjAuNgorLy8gICAgICAgICAgICAgICAgICAgICBVbHRyYS1FbWJlZGRlZC5jb20KKy8vICAgICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMTUtMjAyMAorLy8KKy8vICAgICAgICAgICAgICAgICBFbWFpbDogYWRtaW5AdWx0cmEtZW1iZWRkZWQuY29tCisvLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgTGljZW5zZTogR1BMCisvLyBJZiB5b3Ugd291bGQgbGlrZSBhIHZlcnNpb24gd2l0aCBhIG1vcmUgcGVybWlzc2l2ZSBsaWNlbnNlIGZvcgorLy8gdXNlIGluIGNsb3NlZCBzb3VyY2UgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMgcGxlYXNlIGNvbnRhY3QgbWUKKy8vIGZvciBkZXRhaWxzLgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKy8vIFRoaXMgZmlsZSBpcyBvcGVuIHNvdXJjZSBIREw7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKy8vIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorLy8gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisvLyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLy8KKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyAKKy8vIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKy8vIFVTQQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGVkIEZpbGUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYGRlZmluZSBVU0JfQ1RSTCAgICA2J2gwCisKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1RYX0ZMVVNIICAgICAgOAorICAgIGBkZWZpbmUgVVNCX0NUUkxfVFhfRkxVU0hfREVGQVVMVCAgICAwCisgICAgYGRlZmluZSBVU0JfQ1RSTF9UWF9GTFVTSF9CICAgICAgICAgIDgKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1RYX0ZMVVNIX1QgICAgICAgICAgOAorICAgIGBkZWZpbmUgVVNCX0NUUkxfVFhfRkxVU0hfVyAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfQ1RSTF9UWF9GTFVTSF9SICAgICAgICAgIDg6OAorCisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfRE1QVUxMRE9XTiAgICAgIDcKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9ETVBVTExET1dOX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX0RNUFVMTERPV05fQiAgICAgICAgICA3CisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfRE1QVUxMRE9XTl9UICAgICAgICAgIDcKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9ETVBVTExET1dOX1cgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX0RNUFVMTERPV05fUiAgICAgICAgICA3OjcKKworICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX0RQUFVMTERPV04gICAgICA2CisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfRFBQVUxMRE9XTl9ERUZBVUxUICAgIDAKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9EUFBVTExET1dOX0IgICAgICAgICAgNgorICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX0RQUFVMTERPV05fVCAgICAgICAgICA2CisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfRFBQVUxMRE9XTl9XICAgICAgICAgIDEKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9EUFBVTExET1dOX1IgICAgICAgICAgNjo2CisKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9URVJNU0VMRUNUICAgICAgNQorICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX1RFUk1TRUxFQ1RfREVGQVVMVCAgICAwCisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfVEVSTVNFTEVDVF9CICAgICAgICAgIDUKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9URVJNU0VMRUNUX1QgICAgICAgICAgNQorICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX1RFUk1TRUxFQ1RfVyAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfVEVSTVNFTEVDVF9SICAgICAgICAgIDU6NQorCisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfWENWUlNFTEVDVF9ERUZBVUxUICAgIDAKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9YQ1ZSU0VMRUNUX0IgICAgICAgICAgMworICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX1hDVlJTRUxFQ1RfVCAgICAgICAgICA0CisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfWENWUlNFTEVDVF9XICAgICAgICAgIDIKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9YQ1ZSU0VMRUNUX1IgICAgICAgICAgNDozCisKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9PUE1PREVfREVGQVVMVCAgICAwCisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfT1BNT0RFX0IgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX09QTU9ERV9UICAgICAgICAgIDIKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9PUE1PREVfVyAgICAgICAgICAyCisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfT1BNT0RFX1IgICAgICAgICAgMjoxCisKKyAgICBgZGVmaW5lIFVTQl9DVFJMX0VOQUJMRV9TT0YgICAgICAwCisgICAgYGRlZmluZSBVU0JfQ1RSTF9FTkFCTEVfU09GX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX0NUUkxfRU5BQkxFX1NPRl9CICAgICAgICAgIDAKKyAgICBgZGVmaW5lIFVTQl9DVFJMX0VOQUJMRV9TT0ZfVCAgICAgICAgICAwCisgICAgYGRlZmluZSBVU0JfQ1RSTF9FTkFCTEVfU09GX1cgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX0NUUkxfRU5BQkxFX1NPRl9SICAgICAgICAgIDA6MAorCitgZGVmaW5lIFVTQl9TVEFUVVMgICAgNidoNAorCisgICAgYGRlZmluZSBVU0JfU1RBVFVTX1NPRl9USU1FX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX1NUQVRVU19TT0ZfVElNRV9CICAgICAgICAgIDE2CisgICAgYGRlZmluZSBVU0JfU1RBVFVTX1NPRl9USU1FX1QgICAgICAgICAgMzEKKyAgICBgZGVmaW5lIFVTQl9TVEFUVVNfU09GX1RJTUVfVyAgICAgICAgICAxNgorICAgIGBkZWZpbmUgVVNCX1NUQVRVU19TT0ZfVElNRV9SICAgICAgICAgIDMxOjE2CisKKyAgICBgZGVmaW5lIFVTQl9TVEFUVVNfUlhfRVJST1IgICAgICAyCisgICAgYGRlZmluZSBVU0JfU1RBVFVTX1JYX0VSUk9SX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX1NUQVRVU19SWF9FUlJPUl9CICAgICAgICAgIDIKKyAgICBgZGVmaW5lIFVTQl9TVEFUVVNfUlhfRVJST1JfVCAgICAgICAgICAyCisgICAgYGRlZmluZSBVU0JfU1RBVFVTX1JYX0VSUk9SX1cgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX1NUQVRVU19SWF9FUlJPUl9SICAgICAgICAgIDI6MgorCisgICAgYGRlZmluZSBVU0JfU1RBVFVTX0xJTkVTVEFURV9CSVRTX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX1NUQVRVU19MSU5FU1RBVEVfQklUU19CICAgICAgICAgIDAKKyAgICBgZGVmaW5lIFVTQl9TVEFUVVNfTElORVNUQVRFX0JJVFNfVCAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfU1RBVFVTX0xJTkVTVEFURV9CSVRTX1cgICAgICAgICAgMgorICAgIGBkZWZpbmUgVVNCX1NUQVRVU19MSU5FU1RBVEVfQklUU19SICAgICAgICAgIDE6MAorCitgZGVmaW5lIFVTQl9JUlFfQUNLICAgIDYnaDgKKworICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfREVWSUNFX0RFVEVDVCAgICAgIDMKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0RFVklDRV9ERVRFQ1RfREVGQVVMVCAgICAwCisgICAgYGRlZmluZSBVU0JfSVJRX0FDS19ERVZJQ0VfREVURUNUX0IgICAgICAgICAgMworICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfREVWSUNFX0RFVEVDVF9UICAgICAgICAgIDMKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0RFVklDRV9ERVRFQ1RfVyAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfSVJRX0FDS19ERVZJQ0VfREVURUNUX1IgICAgICAgICAgMzozCisKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0VSUiAgICAgIDIKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0VSUl9ERUZBVUxUICAgIDAKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0VSUl9CICAgICAgICAgIDIKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0VSUl9UICAgICAgICAgIDIKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0VSUl9XICAgICAgICAgIDEKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0VSUl9SICAgICAgICAgIDI6MgorCisgICAgYGRlZmluZSBVU0JfSVJRX0FDS19ET05FICAgICAgMQorICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfRE9ORV9ERUZBVUxUICAgIDAKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0RPTkVfQiAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfSVJRX0FDS19ET05FX1QgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfRE9ORV9XICAgICAgICAgIDEKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0RPTkVfUiAgICAgICAgICAxOjEKKworICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfU09GICAgICAgMAorICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfU09GX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfU09GX0IgICAgICAgICAgMAorICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfU09GX1QgICAgICAgICAgMAorICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfU09GX1cgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfU09GX1IgICAgICAgICAgMDowCisKK2BkZWZpbmUgVVNCX0lSUV9TVFMgICAgNidoYworCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19ERVZJQ0VfREVURUNUICAgICAgMworICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfREVWSUNFX0RFVEVDVF9ERUZBVUxUICAgIDAKKyAgICBgZGVmaW5lIFVTQl9JUlFfU1RTX0RFVklDRV9ERVRFQ1RfQiAgICAgICAgICAzCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19ERVZJQ0VfREVURUNUX1QgICAgICAgICAgMworICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfREVWSUNFX0RFVEVDVF9XICAgICAgICAgIDEKKyAgICBgZGVmaW5lIFVTQl9JUlFfU1RTX0RFVklDRV9ERVRFQ1RfUiAgICAgICAgICAzOjMKKworICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfRVJSICAgICAgMgorICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfRVJSX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfRVJSX0IgICAgICAgICAgMgorICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfRVJSX1QgICAgICAgICAgMgorICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfRVJSX1cgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfRVJSX1IgICAgICAgICAgMjoyCisKKyAgICBgZGVmaW5lIFVTQl9JUlFfU1RTX0RPTkUgICAgICAxCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19ET05FX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfRE9ORV9CICAgICAgICAgIDEKKyAgICBgZGVmaW5lIFVTQl9JUlFfU1RTX0RPTkVfVCAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19ET05FX1cgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfRE9ORV9SICAgICAgICAgIDE6MQorCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19TT0YgICAgICAwCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19TT0ZfREVGQVVMVCAgICAwCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19TT0ZfQiAgICAgICAgICAwCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19TT0ZfVCAgICAgICAgICAwCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19TT0ZfVyAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19TT0ZfUiAgICAgICAgICAwOjAKKworYGRlZmluZSBVU0JfSVJRX01BU0sgICAgNidoMTAKKworICAgIGBkZWZpbmUgVVNCX0lSUV9NQVNLX0RFVklDRV9ERVRFQ1QgICAgICAzCisgICAgYGRlZmluZSBVU0JfSVJRX01BU0tfREVWSUNFX0RFVEVDVF9ERUZBVUxUICAgIDAKKyAgICBgZGVmaW5lIFVTQl9JUlFfTUFTS19ERVZJQ0VfREVURUNUX0IgICAgICAgICAgMworICAgIGBkZWZpbmUgVVNCX0lSUV9NQVNLX0RFVklDRV9ERVRFQ1RfVCAgICAgICAgICAzCisgICAgYGRlZmluZSBVU0JfSVJRX01BU0tfREVWSUNFX0RFVEVDVF9XICAgICAgICAgIDEKKyAgICBgZGVmaW5lIFVTQl9JUlFfTUFTS19ERVZJQ0VfREVURUNUX1IgICAgICAgICAgMzozCisKKyAgICBgZGVmaW5lIFVTQl9JUlFfTUFTS19FUlIgICAgICAyCisgICAgYGRlZmluZSBVU0JfSVJRX01BU0tfRVJSX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX0lSUV9NQVNLX0VSUl9CICAgICAgICAgIDIKKyAgICBgZGVmaW5lIFVTQl9JUlFfTUFTS19FUlJfVCAgICAgICAgICAyCisgICAgYGRlZmluZSBVU0JfSVJRX01BU0tfRVJSX1cgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX0lSUV9NQVNLX0VSUl9SICAgICAgICAgIDI6MgorCisgICAgYGRlZmluZSBVU0JfSVJRX01BU0tfRE9ORSAgICAgIDEKKyAgICBgZGVmaW5lIFVTQl9JUlFfTUFTS19ET05FX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX0lSUV9NQVNLX0RPTkVfQiAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfSVJRX01BU0tfRE9ORV9UICAgICAgICAgIDEKKyAgICBgZGVmaW5lIFVTQl9JUlFfTUFTS19ET05FX1cgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX0lSUV9NQVNLX0RPTkVfUiAgICAgICAgICAxOjEKKworICAgIGBkZWZpbmUgVVNCX0lSUV9NQVNLX1NPRiAgICAgIDAKKyAgICBgZGVmaW5lIFVTQl9JUlFfTUFTS19TT0ZfREVGQVVMVCAgICAwCisgICAgYGRlZmluZSBVU0JfSVJRX01BU0tfU09GX0IgICAgICAgICAgMAorICAgIGBkZWZpbmUgVVNCX0lSUV9NQVNLX1NPRl9UICAgICAgICAgIDAKKyAgICBgZGVmaW5lIFVTQl9JUlFfTUFTS19TT0ZfVyAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfSVJRX01BU0tfU09GX1IgICAgICAgICAgMDowCisKK2BkZWZpbmUgVVNCX1hGRVJfREFUQSAgICA2J2gxNAorCisgICAgYGRlZmluZSBVU0JfWEZFUl9EQVRBX1RYX0xFTl9ERUZBVUxUICAgIDAKKyAgICBgZGVmaW5lIFVTQl9YRkVSX0RBVEFfVFhfTEVOX0IgICAgICAgICAgMAorICAgIGBkZWZpbmUgVVNCX1hGRVJfREFUQV9UWF9MRU5fVCAgICAgICAgICAxNQorICAgIGBkZWZpbmUgVVNCX1hGRVJfREFUQV9UWF9MRU5fVyAgICAgICAgICAxNgorICAgIGBkZWZpbmUgVVNCX1hGRVJfREFUQV9UWF9MRU5fUiAgICAgICAgICAxNTowCisKK2BkZWZpbmUgVVNCX1hGRVJfVE9LRU4gICAgNidoMTgKKworICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fU1RBUlQgICAgICAzMQorICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fU1RBUlRfREVGQVVMVCAgICAwCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9TVEFSVF9CICAgICAgICAgIDMxCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9TVEFSVF9UICAgICAgICAgIDMxCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9TVEFSVF9XICAgICAgICAgIDEKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX1NUQVJUX1IgICAgICAgICAgMzE6MzEKKworICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fSU4gICAgICAzMAorICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fSU5fREVGQVVMVCAgICAwCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9JTl9CICAgICAgICAgIDMwCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9JTl9UICAgICAgICAgIDMwCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9JTl9XICAgICAgICAgIDEKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX0lOX1IgICAgICAgICAgMzA6MzAKKworICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fQUNLICAgICAgMjkKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX0FDS19ERUZBVUxUICAgIDAKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX0FDS19CICAgICAgICAgIDI5CisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9BQ0tfVCAgICAgICAgICAyOQorICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fQUNLX1cgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fQUNLX1IgICAgICAgICAgMjk6MjkKKworICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fUElEX0RBVEFYICAgICAgMjgKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX1BJRF9EQVRBWF9ERUZBVUxUICAgIDAKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX1BJRF9EQVRBWF9CICAgICAgICAgIDI4CisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9QSURfREFUQVhfVCAgICAgICAgICAyOAorICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fUElEX0RBVEFYX1cgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fUElEX0RBVEFYX1IgICAgICAgICAgMjg6MjgKKworICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fUElEX0JJVFNfREVGQVVMVCAgICAwCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9QSURfQklUU19CICAgICAgICAgIDE2CisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9QSURfQklUU19UICAgICAgICAgIDIzCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9QSURfQklUU19XICAgICAgICAgIDgKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX1BJRF9CSVRTX1IgICAgICAgICAgMjM6MTYKKworICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fREVWX0FERFJfREVGQVVMVCAgICAwCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9ERVZfQUREUl9CICAgICAgICAgIDkKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX0RFVl9BRERSX1QgICAgICAgICAgMTUKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX0RFVl9BRERSX1cgICAgICAgICAgNworICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fREVWX0FERFJfUiAgICAgICAgICAxNTo5CisKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX0VQX0FERFJfREVGQVVMVCAgICAwCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9FUF9BRERSX0IgICAgICAgICAgNQorICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fRVBfQUREUl9UICAgICAgICAgIDgKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX0VQX0FERFJfVyAgICAgICAgICA0CisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9FUF9BRERSX1IgICAgICAgICAgODo1CisKK2BkZWZpbmUgVVNCX1JYX1NUQVQgICAgNidoMWMKKworICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfU1RBUlRfUEVORCAgICAgIDMxCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9TVEFSVF9QRU5EX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfU1RBUlRfUEVORF9CICAgICAgICAgIDMxCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9TVEFSVF9QRU5EX1QgICAgICAgICAgMzEKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX1NUQVJUX1BFTkRfVyAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9TVEFSVF9QRU5EX1IgICAgICAgICAgMzE6MzEKKworICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfQ1JDX0VSUiAgICAgIDMwCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9DUkNfRVJSX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfQ1JDX0VSUl9CICAgICAgICAgIDMwCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9DUkNfRVJSX1QgICAgICAgICAgMzAKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX0NSQ19FUlJfVyAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9DUkNfRVJSX1IgICAgICAgICAgMzA6MzAKKworICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfUkVTUF9USU1FT1VUICAgICAgMjkKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX1JFU1BfVElNRU9VVF9ERUZBVUxUICAgIDAKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX1JFU1BfVElNRU9VVF9CICAgICAgICAgIDI5CisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9SRVNQX1RJTUVPVVRfVCAgICAgICAgICAyOQorICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfUkVTUF9USU1FT1VUX1cgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfUkVTUF9USU1FT1VUX1IgICAgICAgICAgMjk6MjkKKworICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfSURMRSAgICAgIDI4CisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9JRExFX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfSURMRV9CICAgICAgICAgIDI4CisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9JRExFX1QgICAgICAgICAgMjgKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX0lETEVfVyAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9JRExFX1IgICAgICAgICAgMjg6MjgKKworICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfUkVTUF9CSVRTX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfUkVTUF9CSVRTX0IgICAgICAgICAgMTYKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX1JFU1BfQklUU19UICAgICAgICAgIDIzCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9SRVNQX0JJVFNfVyAgICAgICAgICA4CisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9SRVNQX0JJVFNfUiAgICAgICAgICAyMzoxNgorCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9DT1VOVF9CSVRTX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfQ09VTlRfQklUU19CICAgICAgICAgIDAKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX0NPVU5UX0JJVFNfVCAgICAgICAgICAxNQorICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfQ09VTlRfQklUU19XICAgICAgICAgIDE2CisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9DT1VOVF9CSVRTX1IgICAgICAgICAgMTU6MAorCitgZGVmaW5lIFVTQl9XUl9EQVRBICAgIDYnaDIwCisKKyAgICBgZGVmaW5lIFVTQl9XUl9EQVRBX0RBVEFfREVGQVVMVCAgICAwCisgICAgYGRlZmluZSBVU0JfV1JfREFUQV9EQVRBX0IgICAgICAgICAgMAorICAgIGBkZWZpbmUgVVNCX1dSX0RBVEFfREFUQV9UICAgICAgICAgIDcKKyAgICBgZGVmaW5lIFVTQl9XUl9EQVRBX0RBVEFfVyAgICAgICAgICA4CisgICAgYGRlZmluZSBVU0JfV1JfREFUQV9EQVRBX1IgICAgICAgICAgNzowCisKK2BkZWZpbmUgVVNCX1JEX0RBVEEgICAgNidoMjAKKworICAgIGBkZWZpbmUgVVNCX1JEX0RBVEFfREFUQV9ERUZBVUxUICAgIDAKKyAgICBgZGVmaW5lIFVTQl9SRF9EQVRBX0RBVEFfQiAgICAgICAgICAwCisgICAgYGRlZmluZSBVU0JfUkRfREFUQV9EQVRBX1QgICAgICAgICAgNworICAgIGBkZWZpbmUgVVNCX1JEX0RBVEFfREFUQV9XICAgICAgICAgIDgKKyAgICBgZGVmaW5lIFVTQl9SRF9EQVRBX0RBVEFfUiAgICAgICAgICA3OjAKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9waHkvdXNiX2ZzX3BoeS52IGIvdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9waHkvdXNiX2ZzX3BoeS52Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YWMxNzQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL3BoeS91c2JfZnNfcGh5LnYKQEAgLTAsMCArMSw3MTMgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICAgICAgICAgICAgICAgICAgICBVU0IgRnVsbCBTcGVlZCAoMTJtYnBzKSBQaHkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjAuMgorLy8gICAgICAgICAgICAgICAgICAgICAgICBVbHRyYS1FbWJlZGRlZC5jb20KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAxNQorLy8KKy8vICAgICAgICAgICAgICAgICBFbWFpbDogYWRtaW5AdWx0cmEtZW1iZWRkZWQuY29tCisvLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgTGljZW5zZTogTEdQTAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAKKy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAKKy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAKKy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAKKy8vCisvLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgCisvLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgCisvLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgCisvLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgCisvLyBsYXRlciB2ZXJzaW9uLgorLy8KKy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAKKy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAKKy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAKKy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAKKy8vIGRldGFpbHMuCisvLworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIAorLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCAKKy8vIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGVkIEZpbGUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlIHVzYl9mc19waHkKKygKKyAgICAvLyBJbnB1dHMKKyAgICAgaW5wdXQgICAgICAgICAgIGNsa19pCisgICAgLGlucHV0ICAgICAgICAgICByc3RuX2kKKyAgICAsaW5wdXQgIFsgIDc6MF0gIHV0bWlfZGF0YV9vdXRfaQorICAgICxpbnB1dCAgICAgICAgICAgdXRtaV90eHZhbGlkX2kKKyAgICAsaW5wdXQgIFsgIDE6MF0gIHV0bWlfb3BfbW9kZV9pCisgICAgLGlucHV0ICBbICAxOjBdICB1dG1pX3hjdnJzZWxlY3RfaQorICAgICxpbnB1dCAgICAgICAgICAgdXRtaV90ZXJtc2VsZWN0X2kKKyAgICAsaW5wdXQgICAgICAgICAgIHV0bWlfZHBwdWxsZG93bl9pCisgICAgLGlucHV0ICAgICAgICAgICB1dG1pX2RtcHVsbGRvd25faQorICAgICxpbnB1dCAgICAgICAgICAgdXNiX3J4X3Jjdl9pCisgICAgLGlucHV0ICAgICAgICAgICB1c2JfcnhfZHBfaQorICAgICxpbnB1dCAgICAgICAgICAgdXNiX3J4X2RuX2kKKyAgICAsaW5wdXQgICAgICAgICAgIHVzYl9yZXNldF9hc3NlcnRfaQorCisgICAgLy8gT3V0cHV0cworICAgICxvdXRwdXQgWyAgNzowXSAgdXRtaV9kYXRhX2luX28KKyAgICAsb3V0cHV0ICAgICAgICAgIHV0bWlfdHhyZWFkeV9vCisgICAgLG91dHB1dCAgICAgICAgICB1dG1pX3J4dmFsaWRfbworICAgICxvdXRwdXQgICAgICAgICAgdXRtaV9yeGFjdGl2ZV9vCisgICAgLG91dHB1dCAgICAgICAgICB1dG1pX3J4ZXJyb3JfbworICAgICxvdXRwdXQgWyAgMTowXSAgdXRtaV9saW5lc3RhdGVfbworICAgICxvdXRwdXQgICAgICAgICAgdXNiX3R4X2RwX28KKyAgICAsb3V0cHV0ICAgICAgICAgIHVzYl90eF9kbl9vCisgICAgLG91dHB1dCAgICAgICAgICB1c2JfdHhfb2VuX28KKyAgICAsb3V0cHV0ICAgICAgICAgIHVzYl9yZXNldF9kZXRlY3RfbworICAgICxvdXRwdXQgICAgICAgICAgdXNiX2VuX28KKyk7CisKKworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFdpcmVzIC8gUmVnaXN0ZXJzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityZWcgICAgICAgICByeF9lbl9xOworCisvLyBYaWxpbnggcGxhY2VtZW50IHByYWdtYXM6CisvL3N5bnRoZXNpcyBhdHRyaWJ1dGUgSU9CIG9mIG91dF9kcF9xIGlzICJUUlVFIgorLy9zeW50aGVzaXMgYXR0cmlidXRlIElPQiBvZiBvdXRfZG5fcSBpcyAiVFJVRSIKK3JlZyAgICAgICAgIG91dF9kcF9xOworcmVnICAgICAgICAgb3V0X2RuX3E7CisKK3dpcmUgICAgICAgIGluX2RwX3c7Cit3aXJlICAgICAgICBpbl9kbl93Oword2lyZSAgICAgICAgaW5fcnhfdzsKKword2lyZSAgICAgICAgaW5fal93Oword2lyZSAgICAgICAgaW5fa193Oword2lyZSAgICAgICAgaW5fc2UwX3c7Cit3aXJlICAgICAgICBpbl9pbnZhbGlkX3c7CisKK3dpcmUgICAgICAgIHNhbXBsZV93OworCit3aXJlICAgICAgICBiaXRfZWRnZV93Oword2lyZSAgICAgICAgYml0X3RyYW5zaXRpb25fdzsKKworcmVnIFsyOjBdICAgYml0X2NvdW50X3E7CityZWcgWzI6MF0gICBvbmVzX2NvdW50X3E7CityZWcgWzc6MF0gICBkYXRhX3E7CityZWcgICAgICAgICBzZW5kX2VvcF9xOworCityZWcgICAgICAgICBzeW5jX2pfZGV0ZWN0ZWRfcTsKKword2lyZSAgICAgICAgYml0X3N0dWZmX2JpdF93Oword2lyZSAgICAgICAgbmV4dF9pc19iaXRfc3R1ZmZfdzsKKword2lyZSAgICAgICAgdXNiX3Jlc2V0X2Fzc2VydF93ID0gdXNiX3Jlc2V0X2Fzc2VydF9pIHwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1dG1pX3hjdnJzZWxlY3RfaSA9PSAyJ2IwMCAmJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0bWlfdGVybXNlbGVjdF9pID09IDEnYjAgICYmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRtaV9vcF9tb2RlX2kgICAgPT0gMidiMTAgJiYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dG1pX2RwcHVsbGRvd25faSAmJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0bWlfZG1wdWxsZG93bl9pKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVzYW1wbGUgYXN5bmMgc2lnbmFscworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVnICAgICAgICAgcnhfZHBfbXM7CityZWcgICAgICAgICByeF9kbl9tczsKK3JlZyAgICAgICAgIHJ4ZF9tczsKKworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorYmVnaW4KKyAgICByeF9kcF9tcyA8PSAxJ2IwOworICAgIHJ4X2RuX21zIDw9IDEnYjA7CisgICAgcnhkX21zICAgPD0gMSdiMDsKK2VuZAorZWxzZQorYmVnaW4KKyAgICByeF9kcF9tcyA8PSBpbl9kcF93OworICAgIHJ4X2RuX21zIDw9IGluX2RuX3c7CisgICAgcnhkX21zICAgPD0gaW5fcnhfdzsKK2VuZAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBFZGdlIERldGVjdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVnICAgICAgICAgcnhfZHAwX3E7CityZWcgICAgICAgICByeF9kbjBfcTsKK3JlZyAgICAgICAgIHJ4X2RwMV9xOworcmVnICAgICAgICAgcnhfZG4xX3E7CityZWcgICAgICAgICByeF9kcF9xOworcmVnICAgICAgICAgcnhfZG5fcTsKK3JlZyAgICAgICAgIHJ4ZDBfcTsKK3JlZyAgICAgICAgIHJ4ZDFfcTsKK3JlZyAgICAgICAgIHJ4ZF9xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorYmVnaW4KKyAgICByeF9kcDBfcSAgICA8PSAxJ2IwOworICAgIHJ4X2RuMF9xICAgIDw9IDEnYjA7CisgICAgcnhfZHAxX3EgICAgPD0gMSdiMDsKKyAgICByeF9kbjFfcSAgICA8PSAxJ2IwOworICAgIHJ4X2RwX3EgICAgIDw9IDEnYjA7CisgICAgcnhfZG5fcSAgICAgPD0gMSdiMDsKKyAgICByeGQwX3EgICAgICA8PSAxJ2IwOworICAgIHJ4ZDFfcSAgICAgIDw9IDEnYjA7CisgICAgcnhkX3EgICAgICAgPD0gMSdiMDsKK2VuZAorZWxzZQorYmVnaW4KKyAgICAvLyBHbGl0Y2ggZnJlZSB2ZXJzaW9ucworICAgIGlmIChyeF9kcDBfcSAmIHJ4X2RwMV9xKQorICAgICAgICByeF9kcF9xICAgICA8PSAxJ2IxOworICAgIGVsc2UgaWYgKCFyeF9kcDBfcSAmICFyeF9kcDFfcSkKKyAgICAgICAgcnhfZHBfcSAgICAgPD0gMSdiMDsKKworICAgIGlmIChyeF9kbjBfcSAmIHJ4X2RuMV9xKQorICAgICAgICByeF9kbl9xICAgICA8PSAxJ2IxOworICAgIGVsc2UgaWYgKCFyeF9kbjBfcSAmICFyeF9kbjFfcSkKKyAgICAgICAgcnhfZG5fcSAgICAgPD0gMSdiMDsKKworICAgIGlmIChyeGQwX3EgJiByeGQxX3EpCisgICAgICAgIHJ4ZF9xICAgICA8PSAxJ2IxOworICAgIGVsc2UgaWYgKCFyeGQwX3EgJiAhcnhkMV9xKQorICAgICAgICByeGRfcSAgICAgPD0gMSdiMDsKKworICAgIC8vIFJlc3luY3MKKyAgICByeF9kcDFfcSAgICA8PSByeF9kcDBfcTsKKyAgICByeF9kcDBfcSAgICA8PSByeF9kcF9tczsKKworICAgIHJ4X2RuMV9xICAgIDw9IHJ4X2RuMF9xOworICAgIHJ4X2RuMF9xICAgIDw9IHJ4X2RuX21zOworCisgICAgcnhkMV9xICAgICAgPD0gcnhkMF9xOworICAgIHJ4ZDBfcSAgICAgIDw9IHJ4ZF9tczsKK2VuZAorCisvLyBGb3IgRnVsbCBTcGVlZCBVU0I6CisvLyBTRTAgPSBEKyA9IDAgJiYgRC0gPSAwCisvLyBKICAgPSBEKyA9IDEgJiYgRC0gPSAwCisvLyBLICAgPSBEKyA9IDAgJiYgRC0gPSAxCisKK2Fzc2lnbiBpbl9qX3cgICAgICAgPSBpbl9zZTBfdyA/IDEnYjAgOiAgcnhkX3E7Cithc3NpZ24gaW5fa193ICAgICAgID0gaW5fc2UwX3cgPyAxJ2IwIDogfnJ4ZF9xOworYXNzaWduIGluX3NlMF93ICAgICA9ICghcnhfZHBfcSAmICFyeF9kbl9xKTsKK2Fzc2lnbiBpbl9pbnZhbGlkX3cgPSAocnhfZHBfcSAmIHJ4X2RuX3EpOworCisvLyBMaW5lIHN0YXRlIG1hdGNoZXMgdHggb3V0cHV0cyBpZiBkcml2ZXJzIGVuYWJsZWQKK2Fzc2lnbiB1dG1pX2xpbmVzdGF0ZV9vID0gdXNiX3R4X29lbl9vID8ge3J4X2RuX3EsIHJ4X2RwX3F9IDoge3VzYl90eF9kbl9vLCB1c2JfdHhfZHBfb307CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFN0YXRlIE1hY2hpbmUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvY2FscGFyYW0gU1RBVEVfVyAgICAgICAgICAgICAgPSA0OworbG9jYWxwYXJhbSBTVEFURV9JRExFICAgICAgICAgICA9IDQnZDA7Citsb2NhbHBhcmFtIFNUQVRFX1JYX0RFVEVDVCAgICAgID0gNCdkMTsKK2xvY2FscGFyYW0gU1RBVEVfUlhfU1lOQ19KICAgICAgPSA0J2QyOworbG9jYWxwYXJhbSBTVEFURV9SWF9TWU5DX0sgICAgICA9IDQnZDM7Citsb2NhbHBhcmFtIFNUQVRFX1JYX0FDVElWRSAgICAgID0gNCdkNDsKK2xvY2FscGFyYW0gU1RBVEVfUlhfRU9QMCAgICAgICAgPSA0J2Q1OworbG9jYWxwYXJhbSBTVEFURV9SWF9FT1AxICAgICAgICA9IDQnZDY7Citsb2NhbHBhcmFtIFNUQVRFX1RYX1NZTkMgICAgICAgID0gNCdkNzsKK2xvY2FscGFyYW0gU1RBVEVfVFhfQUNUSVZFICAgICAgPSA0J2Q4OworbG9jYWxwYXJhbSBTVEFURV9UWF9FT1BfU1RVRkYgICA9IDQnZDk7Citsb2NhbHBhcmFtIFNUQVRFX1RYX0VPUDAgICAgICAgID0gNCdkMTA7Citsb2NhbHBhcmFtIFNUQVRFX1RYX0VPUDEgICAgICAgID0gNCdkMTE7Citsb2NhbHBhcmFtIFNUQVRFX1RYX0VPUDIgICAgICAgID0gNCdkMTI7Citsb2NhbHBhcmFtIFNUQVRFX1RYX1JTVCAgICAgICAgID0gNCdkMTM7CisKKy8vIEN1cnJlbnQgc3RhdGUKK3JlZyBbU1RBVEVfVy0xOjBdIHN0YXRlX3E7CisKK3JlZyBbU1RBVEVfVy0xOjBdIG5leHRfc3RhdGVfcjsKK2Fsd2F5cyBAICoKK2JlZ2luCisgICAgbmV4dF9zdGF0ZV9yID0gc3RhdGVfcTsKKworICAgIGNhc2UgKHN0YXRlX3EpCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFNUQVRFX0lETEUKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU1RBVEVfSURMRSA6CisgICAgYmVnaW4KKyAgICAgICAgaWYgKGluX2tfdykKKyAgICAgICAgICAgIG5leHRfc3RhdGVfciAgICA9IFNUQVRFX1JYX0RFVEVDVDsKKyAgICAgICAgZWxzZSBpZiAodXRtaV90eHZhbGlkX2kpCisgICAgICAgICAgICBuZXh0X3N0YXRlX3IgICAgPSBTVEFURV9UWF9TWU5DOworICAgICAgICBlbHNlIGlmICh1c2JfcmVzZXRfYXNzZXJ0X3cpCisgICAgICAgICAgICBuZXh0X3N0YXRlX3IgICAgPSBTVEFURV9UWF9SU1Q7CisgICAgZW5kCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFNUQVRFX1JYX0RFVEVDVAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTVEFURV9SWF9ERVRFQ1QgOgorICAgIGJlZ2luCisgICAgICAgIGlmIChpbl9rX3cgJiYgc2FtcGxlX3cpCisgICAgICAgICAgICBuZXh0X3N0YXRlX3IgICAgPSBTVEFURV9SWF9TWU5DX0s7CisgICAgICAgIGVsc2UgaWYgKHNhbXBsZV93KQorICAgICAgICAgICAgbmV4dF9zdGF0ZV9yICAgID0gU1RBVEVfSURMRTsKKyAgICBlbmQKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gU1RBVEVfUlhfU1lOQ19KCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNUQVRFX1JYX1NZTkNfSiA6CisgICAgYmVnaW4KKyAgICAgICAgaWYgKGluX2tfdyAmJiBzYW1wbGVfdykKKyAgICAgICAgICAgIG5leHRfc3RhdGVfciAgICA9IFNUQVRFX1JYX1NZTkNfSzsKKyAgICAgICAgLy8gSyBnbGl0Y2ggZm9sbG93ZWQgYnkgbXVsdGlwbGUgSidzIC0gcmV0dXJuIHRvIGlkbGUKKyAgICAgICAgZWxzZSBpZiAoKGJpdF9jb3VudF9xID09IDMnZDEpICYmIHNhbXBsZV93KQorICAgICAgICAgICAgbmV4dF9zdGF0ZV9yICAgID0gU1RBVEVfSURMRTsKKyAgICBlbmQKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gU1RBVEVfUlhfU1lOQ19LCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNUQVRFX1JYX1NZTkNfSyA6CisgICAgYmVnaW4KKyAgICAgICAgLy8gRW5kIG9mIFNZTkMgZmllbGQgZW5kcyB3aXRoIDIgSydzCisgICAgICAgIC8vIE11c3QgaGF2ZSBzZWVuIGF0IGxlYXN0IDEgSiBzdGF0ZSBmaXJzdCEKKyAgICAgICAgaWYgKHN5bmNfal9kZXRlY3RlZF9xICYmIGluX2tfdyAmJiBzYW1wbGVfdykKKyAgICAgICAgICAgIG5leHRfc3RhdGVfciAgICA9IFNUQVRFX1JYX0FDVElWRTsKKyAgICAgICAgLy8gTm8gSiBkZXRlY3RlZCBzaW5jZSBJRExFLCBtdXN0IGJlIGFuIGVycm9yIQorICAgICAgICBlbHNlIGlmICghc3luY19qX2RldGVjdGVkX3EgJiYgaW5fa193ICYmIHNhbXBsZV93KQorICAgICAgICAgICAgbmV4dF9zdGF0ZV9yICAgID0gU1RBVEVfSURMRTsKKyAgICAgICAgZWxzZSBpZiAoaW5fal93ICYmIHNhbXBsZV93KQorICAgICAgICAgICAgbmV4dF9zdGF0ZV9yICAgID0gU1RBVEVfUlhfU1lOQ19KOworICAgIGVuZAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBTVEFURV9SWF9BQ1RJVkUKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU1RBVEVfUlhfQUNUSVZFIDoKKyAgICBiZWdpbgorICAgICAgICBpZiAoaW5fc2UwX3cgJiYgc2FtcGxlX3cpCisgICAgICAgICAgICBuZXh0X3N0YXRlX3IgICAgPSBTVEFURV9SWF9FT1AwOworICAgICAgICAvLyBFcnJvciEKKyAgICAgICAgZWxzZSBpZiAoaW5faW52YWxpZF93ICYmIHNhbXBsZV93KQorICAgICAgICAgICAgbmV4dF9zdGF0ZV9yICAgID0gU1RBVEVfSURMRTsKKyAgICBlbmQKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gU1RBVEVfUlhfRU9QMAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTVEFURV9SWF9FT1AwIDoKKyAgICBiZWdpbgorICAgICAgICBpZiAoaW5fc2UwX3cgJiYgc2FtcGxlX3cpCisgICAgICAgICAgICBuZXh0X3N0YXRlX3IgICAgPSBTVEFURV9SWF9FT1AxOworICAgICAgICAvLyBFcnJvciEKKyAgICAgICAgZWxzZSBpZiAoc2FtcGxlX3cpCisgICAgICAgICAgICBuZXh0X3N0YXRlX3IgICAgPSBTVEFURV9JRExFOworICAgIGVuZAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBTVEFURV9SWF9FT1AxCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNUQVRFX1JYX0VPUDEgOgorICAgIGJlZ2luCisgICAgICAgIC8vIFJldHVybiB0byBpZGxlCisgICAgICAgIGlmIChpbl9qX3cgJiYgc2FtcGxlX3cpCisgICAgICAgICAgICBuZXh0X3N0YXRlX3IgICAgPSBTVEFURV9JRExFOworICAgICAgICAvLyBFcnJvciEKKyAgICAgICAgZWxzZSBpZiAoc2FtcGxlX3cpCisgICAgICAgICAgICBuZXh0X3N0YXRlX3IgICAgPSBTVEFURV9JRExFOworICAgIGVuZAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBTVEFURV9UWF9TWU5DCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNUQVRFX1RYX1NZTkMgOgorICAgIGJlZ2luCisgICAgICAgIGlmIChiaXRfY291bnRfcSA9PSAzJ2Q3ICYmIHNhbXBsZV93KQorICAgICAgICAgICAgbmV4dF9zdGF0ZV9yICAgID0gU1RBVEVfVFhfQUNUSVZFOworICAgIGVuZAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBTVEFURV9UWF9BQ1RJVkUKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU1RBVEVfVFhfQUNUSVZFIDoKKyAgICBiZWdpbgorICAgICAgICBpZiAoYml0X2NvdW50X3EgPT0gMydkNyAmJiBzYW1wbGVfdyAmJiAoIXV0bWlfdHh2YWxpZF9pIHx8IHNlbmRfZW9wX3EpICYmICFiaXRfc3R1ZmZfYml0X3cpCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICAvLyBCaXQgc3R1ZmYgcmVxdWlyZWQgYXQgZW5kIG9mIHBhY2tldD8KKyAgICAgICAgICAgIGlmIChuZXh0X2lzX2JpdF9zdHVmZl93KQorICAgICAgICAgICAgICAgIG5leHRfc3RhdGVfciAgICA9IFNUQVRFX1RYX0VPUF9TVFVGRjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBuZXh0X3N0YXRlX3IgICAgPSBTVEFURV9UWF9FT1AwOworICAgICAgICBlbmQKKyAgICBlbmQKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gU1RBVEVfVFhfRU9QX1NUVUZGCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNUQVRFX1RYX0VPUF9TVFVGRiA6CisgICAgYmVnaW4KKyAgICAgICAgaWYgKHNhbXBsZV93KQorICAgICAgICAgICAgbmV4dF9zdGF0ZV9yICAgID0gU1RBVEVfVFhfRU9QMDsKKyAgICBlbmQKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gU1RBVEVfVFhfRU9QMAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTVEFURV9UWF9FT1AwIDoKKyAgICBiZWdpbgorICAgICAgICBpZiAoc2FtcGxlX3cpCisgICAgICAgICAgICBuZXh0X3N0YXRlX3IgICAgPSBTVEFURV9UWF9FT1AxOworICAgIGVuZAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBTVEFURV9UWF9FT1AxCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNUQVRFX1RYX0VPUDEgOgorICAgIGJlZ2luCisgICAgICAgIGlmIChzYW1wbGVfdykKKyAgICAgICAgICAgIG5leHRfc3RhdGVfciAgICA9IFNUQVRFX1RYX0VPUDI7CisgICAgZW5kCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFNUQVRFX1RYX0VPUDIKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU1RBVEVfVFhfRU9QMiA6CisgICAgYmVnaW4KKyAgICAgICAgaWYgKHNhbXBsZV93KQorICAgICAgICAgICAgbmV4dF9zdGF0ZV9yICAgID0gU1RBVEVfSURMRTsKKyAgICBlbmQKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gU1RBVEVfVFhfUlNUCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNUQVRFX1RYX1JTVCA6CisgICAgYmVnaW4KKyAgICAgICAgaWYgKCF1c2JfcmVzZXRfYXNzZXJ0X3cpCisgICAgICAgICAgICBuZXh0X3N0YXRlX3IgICAgPSBTVEFURV9JRExFOworICAgIGVuZAorICAgIGRlZmF1bHQ6CisgICAgICAgIDsKKyAgIGVuZGNhc2UKK2VuZAorCisvLyBVcGRhdGUgc3RhdGUKK2Fsd2F5cyBAIChuZWdlZGdlIHJzdG5faSBvciBwb3NlZGdlIGNsa19pKQoraWYgKCFyc3RuX2kpCisgICAgc3RhdGVfcSAgIDw9IFNUQVRFX0lETEU7CitlbHNlCisgICAgc3RhdGVfcSAgIDw9IG5leHRfc3RhdGVfcjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU1lOQyBkZXRlY3QKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgc3luY19qX2RldGVjdGVkX3EgIDw9IDEnYjA7CisvLyBSZXNldCBzeW5jIGRldGVjdCBzdGF0ZSBpbiBJRExFCitlbHNlIGlmIChzdGF0ZV9xID09IFNUQVRFX0lETEUpCisgICAgc3luY19qX2RldGVjdGVkX3EgIDw9IDEnYjA7CisvLyBBdCBsZWFzdCBvbmUgSiBkZXRlY3RlZAorZWxzZSBpZiAoc3RhdGVfcSA9PSBTVEFURV9SWF9TWU5DX0opCisgICAgc3luY19qX2RldGVjdGVkX3EgIDw9IDEnYjE7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ4IEVycm9yIERldGVjdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVnIHJ4X2Vycm9yX3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgcnhfZXJyb3JfcSAgPD0gMSdiMDsKKy8vIFJ4IGJpdCBzdHVmZmluZyBlcnJvcgorZWxzZSBpZiAob25lc19jb3VudF9xID09IDMnZDcpCisgICAgcnhfZXJyb3JfcSAgPD0gMSdiMTsKKy8vIEludmFsaWQgbGluZSBzdGF0ZSBkZXRlY3Rpb24KK2Vsc2UgaWYgKGluX2ludmFsaWRfdyAmJiBzYW1wbGVfdykKKyAgICByeF9lcnJvcl9xICA8PSAxJ2IxOworLy8gRGV0ZWN0IGludmFsaWQgU1lOQyBzZXF1ZW5jZQorZWxzZSBpZiAoKHN0YXRlX3EgPT0gU1RBVEVfUlhfU1lOQ19LKSAmJiAhc3luY19qX2RldGVjdGVkX3EgJiYgaW5fa193ICYmIHNhbXBsZV93KQorICAgIHJ4X2Vycm9yX3EgIDw9IDEnYjE7CitlbHNlCisgICAgcnhfZXJyb3JfcSAgPD0gMSdiMDsKKworYXNzaWduIHV0bWlfcnhlcnJvcl9vID0gcnhfZXJyb3JfcTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRWRnZSBEZXRlY3RvcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVnIHJ4ZF9sYXN0X3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgcnhkX2xhc3RfcSAgPD0gMSdiMDsKK2Vsc2UKKyAgICByeGRfbGFzdF9xICA8PSBpbl9qX3c7CisKK2Fzc2lnbiBiaXRfZWRnZV93ID0gcnhkX2xhc3RfcSBeIGluX2pfdzsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU2FtcGxlIFRpbWVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityZWcgWzE6MF0gc2FtcGxlX2NudF9xOworcmVnICAgICAgIGFkanVzdF9kZWxheWVkX3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCitiZWdpbgorICAgIHNhbXBsZV9jbnRfcSAgICAgICAgPD0gMidkMDsKKyAgICBhZGp1c3RfZGVsYXllZF9xICAgIDw9IDEnYjA7CitlbmQKKy8vIERlbGF5ZWQgYWRqdXN0bWVudAorZWxzZSBpZiAoYWRqdXN0X2RlbGF5ZWRfcSkKKyAgICBhZGp1c3RfZGVsYXllZF9xICAgIDw9IDEnYjA7CitlbHNlIGlmIChiaXRfZWRnZV93ICYmIChzYW1wbGVfY250X3EgIT0gMidkMCkgJiYgKHN0YXRlX3EgPCBTVEFURV9UWF9TWU5DKSkKKyAgICBzYW1wbGVfY250X3EgICAgICAgIDw9IDInZDA7CisvLyBDYW4ndCBhZGp1c3Qgc2FtcGxpbmcgcG9pbnQgbm93PworZWxzZSBpZiAoYml0X2VkZ2VfdyAmJiAoc2FtcGxlX2NudF9xID09IDInZDApICYmIChzdGF0ZV9xIDwgU1RBVEVfVFhfU1lOQykpCitiZWdpbgorICAgIC8vIFdhbnQgdG8gcmVzZXQgc2FtcGxpbmcgcG9pbnQgYnV0IG5lZWQgdG8gZGVsYXkgYWRqdXN0bWVudCBieSAxIGN5Y2xlIQorICAgIGFkanVzdF9kZWxheWVkX3EgICAgPD0gMSdiMTsKKyAgICBzYW1wbGVfY250X3EgICAgICAgIDw9IHNhbXBsZV9jbnRfcSArIDInZDE7CitlbmQKK2Vsc2UKKyAgICBzYW1wbGVfY250X3EgICAgICAgIDw9IHNhbXBsZV9jbnRfcSArIDInZDE7CisKK2Fzc2lnbiBzYW1wbGVfdyA9IChzYW1wbGVfY250X3EgPT0gMidkMCk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE5SWkkgUmVjZWl2ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3JlZyByeGRfbGFzdF9qX3E7CisKKy8vIE5SWkk6CisvLyAwID0gdHJhbnNpdGlvbiBiZXR3ZWVuIEogJiBLCisvLyAxID0gc2FtZSBzdGF0ZQorLy8gQWZ0ZXIgNiBjb25zZXF1aXRpdmUgMSdzLCBhIDAgaXMgaW5zZXJ0ZWQgdG8gbWFpbnRhaW4gdGhlIHRyYW5zaXRpb25zCisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgcnhkX2xhc3Rfal9xICA8PSAxJ2IwOworZWxzZSBpZiAoKHN0YXRlX3EgPT0gU1RBVEVfSURMRSkgfHwgc2FtcGxlX3cpCisgICAgcnhkX2xhc3Rfal9xICA8PSBpbl9qX3c7CisKK2Fzc2lnbiBiaXRfdHJhbnNpdGlvbl93ID0gc2FtcGxlX3cgPyByeGRfbGFzdF9qX3EgXiBpbl9qX3cgOiAxJ2IwOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBCaXQgQ291bnRlcnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgb25lc19jb3VudF9xIDw9IDMnZDE7CisvLyBUaGUgcGFja2V0IHN0YXJ0cyB3aXRoIGEgZG91YmxlIEsgKG5vIHRyYW5zaXRpb24pCitlbHNlIGlmIChzdGF0ZV9xID09IFNUQVRFX0lETEUpCisgICAgb25lc19jb3VudF9xIDw9IDMnZDE7CisvLyBSeAorZWxzZSBpZiAoKHN0YXRlX3EgPT0gU1RBVEVfUlhfQUNUSVZFKSAmJiBzYW1wbGVfdykKK2JlZ2luCisgICAgaWYgKGJpdF90cmFuc2l0aW9uX3cpCisgICAgICAgIG9uZXNfY291bnRfcSA8PSAzJ2IwOworICAgIGVsc2UKKyAgICAgICAgb25lc19jb3VudF9xIDw9IG9uZXNfY291bnRfcSArIDMnZDE7CitlbmQKKy8vIFR4CitlbHNlIGlmICgoc3RhdGVfcSA9PSBTVEFURV9UWF9BQ1RJVkUpICYmIHNhbXBsZV93KQorYmVnaW4KKyAgICAvLyBUb2dnbGUgb3V0cHV0IGRhdGEKKyAgICBpZiAoIWRhdGFfcVswXSB8fCBiaXRfc3R1ZmZfYml0X3cpCisgICAgICAgIG9uZXNfY291bnRfcSA8PSAzJ2IwOworICAgIGVsc2UKKyAgICAgICAgb25lc19jb3VudF9xIDw9IG9uZXNfY291bnRfcSArIDMnZDE7CitlbmQKKworYXNzaWduIGJpdF9zdHVmZl9iaXRfdyAgICAgPSAob25lc19jb3VudF9xID09IDMnZDYpOworYXNzaWduIG5leHRfaXNfYml0X3N0dWZmX3cgPSAob25lc19jb3VudF9xID09IDMnZDUpICYmICFiaXRfdHJhbnNpdGlvbl93OworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIGJpdF9jb3VudF9xIDw9IDMnYjA7CitlbHNlIGlmICgoc3RhdGVfcSA9PSBTVEFURV9JRExFKSB8fCAoc3RhdGVfcSA9PSBTVEFURV9SWF9TWU5DX0spKQorICAgIGJpdF9jb3VudF9xIDw9IDMnYjA7CitlbHNlIGlmICgoc3RhdGVfcSA9PSBTVEFURV9SWF9BQ1RJVkUgfHwgc3RhdGVfcSA9PSBTVEFURV9UWF9BQ1RJVkUpICYmIHNhbXBsZV93ICYmICFiaXRfc3R1ZmZfYml0X3cpCisgICAgYml0X2NvdW50X3EgPD0gYml0X2NvdW50X3EgKyAzJ2QxOworZWxzZSBpZiAoKChzdGF0ZV9xID09IFNUQVRFX1RYX1NZTkMpIHx8IChzdGF0ZV9xID09IFNUQVRFX1JYX1NZTkNfSikpICYmIHNhbXBsZV93KQorICAgIGJpdF9jb3VudF9xIDw9IGJpdF9jb3VudF9xICsgMydkMTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU2hpZnQgcmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgZGF0YV9xICA8PSA4J2IwOworLy8gUHJlLWxvYWQgc2hpZnQgcmVnaXN0ZXIgd2l0aCBTWU5DIHdvcmQKK2Vsc2UgaWYgKHN0YXRlX3EgPT0gU1RBVEVfSURMRSkKKyAgICBkYXRhX3EgIDw9IDgnYjAwMTAxMDEwOworZWxzZSBpZiAoKHN0YXRlX3EgPT0gU1RBVEVfUlhfQUNUSVZFKSAmJiBzYW1wbGVfdyAmJiAhYml0X3N0dWZmX2JpdF93KQorICAgIGRhdGFfcSAgPD0ge35iaXRfdHJhbnNpdGlvbl93LCBkYXRhX3FbNzoxXX07CitlbHNlIGlmICgoc3RhdGVfcSA9PSBTVEFURV9UWF9TWU5DKSAmJiBzYW1wbGVfdykKK2JlZ2luCisgICAgaWYgKGJpdF9jb3VudF9xID09IDMnZDcpCisgICAgICAgIGRhdGFfcSAgPD0gdXRtaV9kYXRhX291dF9pOworICAgIGVsc2UKKyAgICAgICAgZGF0YV9xICA8PSB7fmJpdF90cmFuc2l0aW9uX3csIGRhdGFfcVs3OjFdfTsKK2VuZCAgICAKK2Vsc2UgaWYgKChzdGF0ZV9xID09IFNUQVRFX1RYX0FDVElWRSkgJiYgc2FtcGxlX3cgJiYgIWJpdF9zdHVmZl9iaXRfdykKK2JlZ2luCisgICAgaWYgKGJpdF9jb3VudF9xID09IDMnZDcpCisgICAgICAgIGRhdGFfcSAgPD0gdXRtaV9kYXRhX291dF9pOworICAgIGVsc2UKKyAgICAgICAgZGF0YV9xICA8PSB7fmJpdF90cmFuc2l0aW9uX3csIGRhdGFfcVs3OjFdfTsKK2VuZAorCisvLyBSZWNlaXZlIGFjdGl2ZSAoU1lOQyByZWNpZXZlZCkKK2Fzc2lnbiB1dG1pX3J4YWN0aXZlX28gPSAoc3RhdGVfcSA9PSBTVEFURV9SWF9BQ1RJVkUpOworCithc3NpZ24gdXRtaV9kYXRhX2luX28gID0gZGF0YV9xOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSeCBSZWFkeQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVnIHJ4X3JlYWR5X3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgcnhfcmVhZHlfcSA8PSAxJ2IwOworZWxzZSBpZiAoKHN0YXRlX3EgPT0gU1RBVEVfUlhfQUNUSVZFKSAmJiBzYW1wbGVfdyAmJiAoYml0X2NvdW50X3EgPT0gMydkNykgJiYgIWJpdF9zdHVmZl9iaXRfdykKKyAgICByeF9yZWFkeV9xIDw9IDEnYjE7CitlbHNlCisgICAgcnhfcmVhZHlfcSA8PSAxJ2IwOworCithc3NpZ24gdXRtaV9yeHZhbGlkX28gID0gcnhfcmVhZHlfcTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVHggUmVhZHkKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3JlZyB0eF9yZWFkeV9xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHR4X3JlYWR5X3EgPD0gMSdiMDsKK2Vsc2UgaWYgKChzdGF0ZV9xID09IFNUQVRFX1RYX1NZTkMpICYmIHNhbXBsZV93ICYmIChiaXRfY291bnRfcSA9PSAzJ2Q3KSkKKyAgICB0eF9yZWFkeV9xIDw9IDEnYjE7CitlbHNlIGlmICgoc3RhdGVfcSA9PSBTVEFURV9UWF9BQ1RJVkUpICYmIHNhbXBsZV93ICYmICFiaXRfc3R1ZmZfYml0X3cgJiYgKGJpdF9jb3VudF9xID09IDMnZDcpICYmICFzZW5kX2VvcF9xKQorICAgIHR4X3JlYWR5X3EgPD0gMSdiMTsKK2Vsc2UKKyAgICB0eF9yZWFkeV9xIDw9IDEnYjA7CisKK2Fzc2lnbiB1dG1pX3R4cmVhZHlfbyAgPSB0eF9yZWFkeV9xOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBFT1AgcGVuZGluZworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWx3YXlzIEAgKG5lZ2VkZ2UgcnN0bl9pIG9yIG5lZ2VkZ2UgY2xrX2kpCitpZiAoIXJzdG5faSkKKyAgICBzZW5kX2VvcF9xICA8PSAxJ2IwOworZWxzZSBpZiAoKHN0YXRlX3EgPT0gU1RBVEVfVFhfQUNUSVZFKSAmJiAhdXRtaV90eHZhbGlkX2kpCisgICAgc2VuZF9lb3BfcSAgPD0gMSdiMTsKK2Vsc2UgaWYgKHN0YXRlX3EgPT0gU1RBVEVfVFhfRU9QMCkKKyAgICBzZW5kX2VvcF9xICA8PSAxJ2IwOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUeAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSBvdXRfYml0X3cgPSBzYW1wbGVfdyA/IGRhdGFfcVswXSA6IDEnYno7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCitiZWdpbgorICAgIG91dF9kcF9xIDw9IDEnYjA7CisgICAgb3V0X2RuX3EgPD0gMSdiMDsKKyAgICByeF9lbl9xICA8PSAxJ2IxOworZW5kCitlbHNlIGlmIChzdGF0ZV9xID09IFNUQVRFX0lETEUpCitiZWdpbgorICAgIC8vIElETEUKKyAgICBvdXRfZHBfcSA8PSAxJ2IxOworICAgIG91dF9kbl9xIDw9IDEnYjA7CisKKyAgICBpZiAodXRtaV90eHZhbGlkX2kgfHwgdXNiX3Jlc2V0X2Fzc2VydF93KQorICAgICAgICByeF9lbl9xIDw9IDEnYjA7CisgICAgZWxzZQorICAgICAgICByeF9lbl9xIDw9IDEnYjE7CitlbmQKK2Vsc2UgaWYgKChzdGF0ZV9xID09IFNUQVRFX1RYX1NZTkMpICYmIHNhbXBsZV93KQorYmVnaW4KKyAgICBvdXRfZHBfcSA8PSBkYXRhX3FbMF07CisgICAgb3V0X2RuX3EgPD0gfmRhdGFfcVswXTsKK2VuZAorZWxzZSBpZiAoKHN0YXRlX3EgPT0gU1RBVEVfVFhfQUNUSVZFIHx8IHN0YXRlX3EgPT0gU1RBVEVfVFhfRU9QX1NUVUZGKSAmJiBzYW1wbGVfdykKK2JlZ2luCisgICAgLy8gMCA9IHRvZ2dsZSwgMSA9IGhvbGQKKyAgICBpZiAoIWRhdGFfcVswXSB8fCBiaXRfc3R1ZmZfYml0X3cpCisgICAgYmVnaW4KKyAgICAgICAgb3V0X2RwX3EgPD0gfm91dF9kcF9xOworICAgICAgICBvdXRfZG5fcSA8PSB+b3V0X2RuX3E7CisgICAgZW5kCitlbmQKK2Vsc2UgaWYgKChzdGF0ZV9xID09IFNUQVRFX1RYX0VPUDAgfHwgc3RhdGVfcSA9PSBTVEFURV9UWF9FT1AxKSAmJiBzYW1wbGVfdykKK2JlZ2luCisgICAgLy8gU0UwCisgICAgb3V0X2RwX3EgPD0gMSdiMDsKKyAgICBvdXRfZG5fcSA8PSAxJ2IwOworZW5kCitlbHNlIGlmICgoc3RhdGVfcSA9PSBTVEFURV9UWF9FT1AyKSAmJiBzYW1wbGVfdykKK2JlZ2luCisgICAgLy8gSURMRQorICAgIG91dF9kcF9xIDw9IDEnYjE7CisgICAgb3V0X2RuX3EgPD0gMSdiMDsKKworICAgIC8vIFNldCBidXMgdG8gaW5wdXQKKyAgICByeF9lbl9xIDw9IDEnYjE7CitlbmQKK2Vsc2UgaWYgKHN0YXRlX3EgPT0gU1RBVEVfVFhfUlNUKQorYmVnaW4KKyAgICAvLyBTRTAKKyAgICBvdXRfZHBfcSA8PSAxJ2IwOworICAgIG91dF9kbl9xIDw9IDEnYjA7CitlbmQKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVzZXQgZGV0ZWN0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityZWcgWzY6MF0gc2UwX2NudF9xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHNlMF9jbnRfcSA8PSA3J2IwOworZWxzZSBpZiAoaW5fc2UwX3cpCitiZWdpbgorICAgIGlmIChzZTBfY250X3EgIT0gNydkMTI3KQorICAgICAgICBzZTBfY250X3EgPD0gc2UwX2NudF9xICsgNydkMTsKK2VuZCAgICAKK2Vsc2UKKyAgICBzZTBfY250X3EgPD0gNydiMDsKKworYXNzaWduIHVzYl9yZXNldF9kZXRlY3RfbyA9IChzZTBfY250X3EgPT0gNydkMTI3KTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVHJhbnNjZWl2ZXIgSW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUeCBvdXRwdXQgZW5hYmxlIChhY3RpdmUgbG93KQorYXNzaWduIHVzYl90eF9vZW5fbyA9IHJ4X2VuX3E7CisKKy8vIFR4ICsvLQorYXNzaWduIHVzYl90eF9kcF9vICA9IG91dF9kcF9xOworYXNzaWduIHVzYl90eF9kbl9vICA9IG91dF9kbl9xOworCisvLyBSZWNlaXZlIEQrL0QtCithc3NpZ24gaW5fZHBfdyA9IHVzYl9yeF9kcF9pOworYXNzaWduIGluX2RuX3cgPSB1c2JfcnhfZG5faTsKKworLy8gUmVjZWl2ZSBkYXRhCithc3NpZ24gaW5fcnhfdyA9IHVzYl9yeF9yY3ZfaTsKKworLy8gVVNCIGRldmljZSBwdWxsLXVwIGVuYWJsZQorYXNzaWduIHVzYl9lbl9vID0gdXRtaV90ZXJtc2VsZWN0X2k7CisKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL3BoeS91c2JfdHJhbnNjZWl2ZXIudiBiL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvcGh5L3VzYl90cmFuc2NlaXZlci52Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMzU3NWIKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL3BoeS91c2JfdHJhbnNjZWl2ZXIudgpAQCAtMCwwICsxLDE4NyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgICAgICAgICAgICAgICAgICAgIFVTQiBGdWxsIFNwZWVkICgxMm1icHMpIFBoeQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWMC4yCisvLyAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhLUVtYmVkZGVkLmNvbQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDE1CisvLworLy8gICAgICAgICAgICAgICAgIEVtYWlsOiBhZG1pbkB1bHRyYS1lbWJlZGRlZC5jb20KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICBMaWNlbnNlOiBMR1BMCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIAorLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIAorLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIAorLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIAorLy8KKy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAKKy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAKKy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAKKy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAKKy8vIGxhdGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIAorLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIAorLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIAorLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIAorLy8gZGV0YWlscy4KKy8vCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgCisvLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIAorLy8gQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZWQgRmlsZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUgdXNiX3RyYW5zY2VpdmVyCisoCisgICAgLy8gSW5wdXRzCisgICAgIGlucHV0ICAgICAgICAgICB1c2JfcGh5X3R4X2RwX2ksCisgICAgIGlucHV0ICAgICAgICAgICB1c2JfcGh5X3R4X2RuX2ksCisgICAgIGlucHV0ICAgICAgICAgICB1c2JfcGh5X3R4X29lbl9pLAorICAgICBpbnB1dCAgICAgICAgICAgbW9kZV9pLAorCisgICAgIG91dHB1dCByZWcgICAgICAgb3V0X2RwLAorICAgICBvdXRwdXQgcmVnICAgICAgIG91dF9kbiwKKyAgICAgb3V0cHV0ICAgICAgICAgICBvdXRfdHhfb2VuLAorCisgICAgLy8gT3V0cHV0cworICAgICBpbnB1dCAgICAgICAgICAgIGluX2RwLAorICAgICBpbnB1dCAgICAgICAgICAgIGluX2RuLAorCisgICAgIG91dHB1dCAgICAgICAgICB1c2JfcGh5X3J4X3Jjdl9vLAorICAgICBvdXRwdXQgICAgICAgICAgdXNiX3BoeV9yeF9kcF9vLAorICAgICBvdXRwdXQgICAgICAgICAgdXNiX3BoeV9yeF9kbl9vCispOworCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTW9kdWxlOiB1c2JfdHJhbnNjZWl2ZXIKKy8vIEVtdWxhdGUgc3RhbmRhcmQgVVNCIFBIWSBpbnRlcmZhY2UgYW5kIHByb2R1Y2UgYSBEKy9ELSBvdXRwdXRzLgorLy8gQWxsb3dzIGRpcmVjdCBjb25uZWN0aW9uIG9mIFVTQiBwb3J0IHRvIEZQR0EuCisvLyBMaW1pdGF0aW9uczoKKy8vIEFzIG5vIGRpZmZlcmVudGlhbCBhbXBsaWZpZXIgcHJlc2VudCwgbm8gY29tbW9uIG1vZGUgbm9pc2UKKy8vIHJlamVjdGlvbiBvY2N1cnMuCisvLyBVbmxpa2VseSB0byB3b3JrIHdlbGwgd2l0aCBsb25nZXIgY29ubmVjdGlvbnMhCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFdpcmVzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEFzc2lnbm1lbnRzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIEQrL0QtIFRyaXN0YXRlIGJ1ZmZlcnMKKy8vYXNzaWduIHVzYl9kcF9pbyA9ICh1c2JfcGh5X3R4X29lbl9pID09IDEnYjApID8gb3V0X2RwIDogMSdiejsKKy8vYXNzaWduIHVzYl9kbl9pbyA9ICh1c2JfcGh5X3R4X29lbl9pID09IDEnYjApID8gb3V0X2RuIDogMSdiejsKKy8vCithc3NpZ24gICBvdXRfdHhfb2VuID0gdXNiX3BoeV90eF9vZW5faTsKKworLy8gUmVjZWl2ZSBEKy9ELQorYXNzaWduIHVzYl9waHlfcnhfZHBfbyA9IGluX2RwOworYXNzaWduIHVzYl9waHlfcnhfZG5fbyA9IGluX2RuOworCisvLyBSZWNlaXZlIG91dHB1dAorYXNzaWduIHVzYl9waHlfcnhfcmN2X28gPSAoaW5fZHAgPT0gMSdiMSAmJiBpbl9kbiA9PSAxJ2IwKSA/IDEnYjEgOiAxJ2IwOworCisvLyBQSFkgVHJhbnNtaXQgTW9kZToKKy8vIFdoZW4gcGh5X3R4X21vZGVfaSBpcyAnMCcgdGhlIG91dHB1dHMgYXJlIGVuY29kZWQgYXM6CisvLyAgICAgdm1vX2ksIHZwb19pCisvLyAgICAgIDAgICAgMCAgICBEaWZmZXJlbnRpYWwgTG9naWMgJzAnCisvLyAgICAgIDAgICAgMSAgICBEaWZmZXJlbnRpYWwgTG9naWMgJzEnCisvLyAgICAgIDEgICAgMCAgICBTaW5nbGUgRW5kZWQgJzAnCisvLyAgICAgIDEgICAgMSAgICBTaW5nbGUgRW5kZWQgJzAnCisvLyBXaGVuIHBoeV90eF9tb2RlX2kgaXMgJzEnIHRoZSBvdXRwdXRzIGFyZSBlbmNvZGVkIGFzOgorLy8gICAgIHZtb19pLCB2cG9faQorLy8gICAgICAwICAgIDAgICAgU2luZ2xlIEVuZGVkICcwJworLy8gICAgICAwICAgIDEgICAgRGlmZmVyZW50aWFsIExvZ2ljICcxJworLy8gICAgICAxICAgIDAgICAgRGlmZmVyZW50aWFsIExvZ2ljICcwJworLy8gICAgICAxICAgIDEgICAgSWxsZWdhbCBTdGF0ZQorYWx3YXlzX2NvbWIgCitiZWdpbiA6IE1VWAorLy8gTG9naWMgIjAiCitvdXRfZHAgPSAxJ2IwOworb3V0X2RuID0gMSdiMTsKKyBjYXNlKG1vZGVfaSkKKyAgICAxJ2IwOgorICAgIGJlZ2luCisgICAgICAgIGlmICh1c2JfcGh5X3R4X2RwX2kgPT0gMSdiMCAmJiB1c2JfcGh5X3R4X2RuX2kgPT0gMSdiMCkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIC8vIExvZ2ljICIwIgorICAgICAgICAgICAgb3V0X2RwID0gMSdiMDsKKyAgICAgICAgICAgIG91dF9kbiA9IDEnYjE7CisgICAgICAgIGVuZAorICAgICAgICBlbHNlIGlmICh1c2JfcGh5X3R4X2RwX2kgPT0gMSdiMCAmJiB1c2JfcGh5X3R4X2RuX2kgPT0gMSdiMSkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIC8vIFNFMCAoYm90aCBsb3cpCisgICAgICAgICAgICBvdXRfZHAgPSAxJ2IwOworICAgICAgICAgICAgb3V0X2RuID0gMSdiMDsKKyAgICAgICAgZW5kCisgICAgICAgIGVsc2UgaWYgKHVzYl9waHlfdHhfZHBfaSA9PSAxJ2IxICYmIHVzYl9waHlfdHhfZG5faSA9PSAxJ2IwKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgLy8gTG9naWMgIjEiCisgICAgICAgICAgICBvdXRfZHAgPSAxJ2IxOworICAgICAgICAgICAgb3V0X2RuID0gMSdiMDsKKyAgICAgICAgZW5kCisgICAgICAgIGVsc2UgaWYgKHVzYl9waHlfdHhfZHBfaSA9PSAxJ2IxICYmIHVzYl9waHlfdHhfZG5faSA9PSAxJ2IxKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgLy8gU0UwIChib3RoIGxvdykKKyAgICAgICAgICAgIG91dF9kcCA9IDEnYjA7CisgICAgICAgICAgICBvdXRfZG4gPSAxJ2IwOworICAgICAgICBlbmQKKyAgICBlbmQKKyAgICAxJ2IxIDoKKyAgICBiZWdpbgorICAgICAgICBpZiAodXNiX3BoeV90eF9kcF9pID09IDEnYjAgJiYgdXNiX3BoeV90eF9kbl9pID09IDEnYjApCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICAvLyBTRTAgKGJvdGggbG93KQorICAgICAgICAgICAgb3V0X2RwID0gMSdiMDsKKyAgICAgICAgICAgIG91dF9kbiA9IDEnYjA7CisgICAgICAgIGVuZAorICAgICAgICBlbHNlIGlmICh1c2JfcGh5X3R4X2RwX2kgPT0gMSdiMCAmJiB1c2JfcGh5X3R4X2RuX2kgPT0gMSdiMSkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIC8vIExvZ2ljICIwIgorICAgICAgICAgICAgb3V0X2RwID0gMSdiMDsKKyAgICAgICAgICAgIG91dF9kbiA9IDEnYjE7CisgICAgICAgIGVuZAorICAgICAgICBlbHNlIGlmICh1c2JfcGh5X3R4X2RwX2kgPT0gMSdiMSAmJiB1c2JfcGh5X3R4X2RuX2kgPT0gMSdiMCkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIC8vIExvZ2ljICIxIgorICAgICAgICAgICAgb3V0X2RwID0gMSdiMTsKKyAgICAgICAgICAgIG91dF9kbiA9IDEnYjA7CisgICAgICAgIGVuZAorICAgICAgICBlbHNlIGlmICh1c2JfcGh5X3R4X2RwX2kgPT0gMSdiMSAmJiB1c2JfcGh5X3R4X2RuX2kgPT0gMSdiMSkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIC8vIElsbGVnYWwKKyAgICAgICAgICAgIG91dF9kcCA9IDEnYjE7CisgICAgICAgICAgICBvdXRfZG4gPSAxJ2IxOworICAgICAgICBlbmQKKyAgICBlbmQKKyBlbmRjYXNlCitlbmQKKworCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvdG9wL3VzYjFfaG9zdC5zdiBiL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvdG9wL3VzYjFfaG9zdC5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGU3MGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy90b3AvdXNiMV9ob3N0LnN2CkBAIC0wLDAgKzEsMjM4IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFVTQjEuMSBIT1NUIENvbnRyb2xsZXIgKyBQSFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFVTQjEgQ29yZSBmcm9tIGdpdGh1Yi5jb20vdWx0cmFlbWJlZGRlZC9jb3JlX3VzYl9ob3N0ICAgICAgIC8vLy8KKy8vLy8gIFVTQkIgUGh5IGZyb20gZ2l0aHViLmNvbS91bHRyYWVtYmVkZGVkL2NvcmVfdXNiX2ZzX3BoeS5naXQgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gRm9sbG93aW5nIE1vZGlmaWNhdGlvbiBhcmUgRG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAxLiBJbnRlZ3JhdGVkIHRoZSBXaXNoYm9uZSBJbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAyLiBXaXNoQm9uZSBpbnRlcmZhY2UgbWFkZSBhc3luYyB3LnIudCB1c2IgY2xvY2sgICAgICAgICAgIC8vLy8KKy8vLy8gICAzLiB1c2IxIGNvcmUgQXhpIGxvZ2ljIGlzIG1vZGlmaWVkIHRvIG5vcm1hbCBSZWdpc3RlciAgICAgIC8vLy8KKy8vLy8gICAgICByZWFkL3dyaXRlIEkvRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICBUaGlzIG1vZHVsZSBpbnRlZ3JhdGUgZm9sbG93aW5nIHN1YiBtb2R1bGUgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAxLiBhc3luY193YiA6IEFzeW5jIHdpc2hib25lIGludGVyZmFjZSBkb2VzIHRoZSB3aXNoYm9uZSAgIC8vLy8KKy8vLy8gICAgICB0byB1c2JjbGsgY2xvY2sgc3luY2hyb25pemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAyLiB1c2IxX2NvcmU6ICB1c2IxIGNvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAzLiB1c2IxX2hvc3QgOiB1c2IgcGh5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICBBc3N1bXB0aW9tOiB1c2JfY2xrIGlzIDQ4TWh6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbW9kdWxlIHVzYjFfaG9zdCAoCisgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICB1c2JfY2xrX2kgICAsCisgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICB1c2JfcnN0bl9pICAsCisKKyAgICAgICAgLy8gVVNCIEQrL0QtCisgICAgaW5wdXQgICAgICAgICAgICAgICAgICBpbl9kcCAgICwKKyAgICBpbnB1dCAgICAgICAgICAgICAgICAgIGluX2RuICAgLAorCisgICAgaW5wdXQgICAgICAgICAgICAgICAgICBvdXRfZHAgICAsCisgICAgaW5wdXQgICAgICAgICAgICAgICAgICBvdXRfZG4gICAsCisgICAgb3V0cHV0ICAgICAgICAgICAgICAgICBvdXRfdHhfb2VuLAorCisgICAgLy8gTWFzdGVyIFBvcnQKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgIHdibV9yc3RfbiAgICwgIC8vIFJlZ3VsYXIgUmVzZXQgc2lnbmFsCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICB3Ym1fY2xrX2kgICAsICAvLyBTeXN0ZW0gY2xvY2sKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgIHdibV9zdGJfaSAgICwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgaW5wdXQgICBsb2dpYyBbNTowXSAgICB3Ym1fYWRyX2kgICAsICAvLyBhZGRyZXNzCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICB3Ym1fd2VfaSAgICAsICAvLyB3cml0ZQorICAgIGlucHV0ICAgbG9naWMgWzMxOjBdICAgd2JtX2RhdF9pICAgLCAgLy8gZGF0YSBvdXRwdXQKKyAgICBpbnB1dCAgIGxvZ2ljIFszOjBdICAgIHdibV9zZWxfaSAgICwgIC8vIGJ5dGUgZW5hYmxlCisgICAgb3V0cHV0ICBsb2dpYyBbMzE6MF0gICB3Ym1fZGF0X28gICAsICAvLyBkYXRhIGlucHV0CisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICB3Ym1fYWNrX28gICAsICAvLyBhY2tub3dsZWdlbWVudAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgd2JtX2Vycl9vICAgLCAgLy8gZXJyb3IKKworICAgIC8vIE91dHB1dHMKKyAgICBvdXRwdXQgICAgICAgICAgICAgICAgIHVzYl9pbnRyX28KKworCisgICAgKTsKKworICAgIGxvZ2ljICBbNzowXSAgICAgICAgICAgdXRtaV9kYXRhX2luX2k7CisgICAgbG9naWMgICAgICAgICAgICAgICAgICB1dG1pX3R4cmVhZHlfaTsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgIHV0bWlfcnh2YWxpZF9pOworICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgdXRtaV9yeGFjdGl2ZV9pOworICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgdXRtaV9yeGVycm9yX2k7CisgICAgbG9naWMgIFsxOjBdICAgICAgICAgICB1dG1pX2xpbmVzdGF0ZV9pOworCisgICAgbG9naWMgWzc6MF0gICAgICAgICAgICB1dG1pX2RhdGFfb3V0X287CisgICAgbG9naWMgICAgICAgICAgICAgICAgICB1dG1pX3R4dmFsaWRfbzsKKyAgICBsb2dpYyBbMTowXSAgICAgICAgICAgIHV0bWlfb3BfbW9kZV9vOworICAgIGxvZ2ljIFsxOjBdICAgICAgICAgICAgdXRtaV94Y3Zyc2VsZWN0X287CisgICAgbG9naWMgICAgICAgICAgICAgICAgICB1dG1pX3Rlcm1zZWxlY3RfbzsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgIHV0bWlfZHBwdWxsZG93bl9vOworICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgdXRtaV9kbXB1bGxkb3duX287CisgICAgbG9naWMgICAgICAgICAgICAgICAgICB1c2JfcGFkc190eF9kcF93OworICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgdXNiX3BhZHNfdHhfb2VuX3c7CisgICAgbG9naWMgICAgICAgICAgICAgICAgICB1c2JfcGFkc19yeF9kbl93OworICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgdXNiX3BhZHNfdHhfZG5fdzsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgIHVzYl9wYWRzX3J4X3Jjdl93OworICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgdXNiX3BhZHNfcnhfZHBfdzsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgIHVzYl94Y3ZyX21vZGVfdyA9IDEnaDE7CisKKyAgICAvLyBSZWcgQnVzIEludGVyZmFjZSBTaWduYWwKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgIHJlZ19jczsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgIHJlZ193cjsKKyAgICBsb2dpYyBbNTowXSAgICAgICAgICAgIHJlZ19hZGRyOworICAgIGxvZ2ljIFszMTowXSAgICAgICAgICAgcmVnX3dkYXRhOworICAgIGxvZ2ljIFszOjBdICAgICAgICAgICAgcmVnX2JlOworCisgICAvLyBPdXRwdXRzCisgICAgbG9naWMgWzMxOjBdICAgICAgICAgICByZWdfcmRhdGE7CisgICAgbG9naWMgICAgICAgICAgICAgICAgICByZWdfYWNrOworCisKKworYXN5bmNfd2IgICMoLkFXICg2KSkKKyAgICAgdV9hc3luY193YigKKworICAgIC8vIE1hc3RlciBQb3J0CisgICAgICAgLndibV9yc3RfbiAgICAgICAgKHdibV9yc3RfbiAgICAgICAgICAgICksICAvLyBSZWd1bGFyIFJlc2V0IHNpZ25hbAorICAgICAgIC53Ym1fY2xrX2kgICAgICAgICh3Ym1fY2xrX2kgICAgICAgICAgICApLCAgLy8gU3lzdGVtIGNsb2NrCisgICAgICAgLndibV9jeWNfaSAgICAgICAgKHdibV9zdGJfaSAgICAgICAgICAgICksICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgIC53Ym1fc3RiX2kgICAgICAgICh3Ym1fc3RiX2kgICAgICAgICAgICApLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAud2JtX2Fkcl9pICAgICAgICAod2JtX2Fkcl9pICAgICAgICAgICAgKSwgIC8vIGFkZHJlc3MKKyAgICAgICAud2JtX3dlX2kgICAgICAgICAod2JtX3dlX2kgICAgICAgICAgICAgKSwgIC8vIHdyaXRlCisgICAgICAgLndibV9kYXRfaSAgICAgICAgKHdibV9kYXRfaSAgICAgICAgICAgICksICAvLyBkYXRhIG91dHB1dAorICAgICAgIC53Ym1fc2VsX2kgICAgICAgICh3Ym1fc2VsX2kgICAgICAgICAgICApLCAgLy8gYnl0ZSBlbmFibGUKKyAgICAgICAud2JtX2RhdF9vICAgICAgICAod2JtX2RhdF9vICAgICAgICAgICAgKSwgIC8vIGRhdGEgaW5wdXQKKyAgICAgICAud2JtX2Fja19vICAgICAgICAod2JtX2Fja19vICAgICAgICAgICAgKSwgIC8vIGFja25vd2xlZ2VtZW50CisgICAgICAgLndibV9lcnJfbyAgICAgICAgKHdibV9lcnJfbyAgICAgICAgICAgICksICAvLyBlcnJvcgorCisgICAgLy8gU2xhdmUgUG9ydAorICAgICAgIC53YnNfcnN0X24gICAgICAgICh1c2JfcnN0bl9pICAgICAgICAgICApLCAgLy8gUmVndWxhciBSZXNldCBzaWduYWwKKyAgICAgICAud2JzX2Nsa19pICAgICAgICAodXNiX2Nsa19pICAgICAgICAgICAgKSwgIC8vIFN5c3RlbSBjbG9jaworICAgICAgIC53YnNfY3ljX28gICAgICAgICggICAgICAgICAgICAgICAgICAgICApLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAud2JzX3N0Yl9vICAgICAgICAocmVnX2NzICAgICAgICAgICAgICAgKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgLndic19hZHJfbyAgICAgICAgKHJlZ19hZGRyICAgICAgICAgICAgICksICAvLyBhZGRyZXNzCisgICAgICAgLndic193ZV9vICAgICAgICAgKHJlZ193ciAgICAgICAgICAgICAgICksICAvLyB3cml0ZQorICAgICAgIC53YnNfZGF0X28gICAgICAgIChyZWdfd2RhdGEgICAgICAgICAgICApLCAgLy8gZGF0YSBvdXRwdXQKKyAgICAgICAud2JzX3NlbF9vICAgICAgICAocmVnX2JlICAgICAgICAgICAgICAgKSwgIC8vIGJ5dGUgZW5hYmxlCisgICAgICAgLndic19kYXRfaSAgICAgICAgKHJlZ19yZGF0YSAgICAgICAgICAgICksICAvLyBkYXRhIGlucHV0CisgICAgICAgLndic19hY2tfaSAgICAgICAgKHJlZ19hY2sgICAgICAgICAgICAgICksICAvLyBhY2tub3dsZWdlbWVudAorICAgICAgIC53YnNfZXJyX2kgICAgICAgICgxJ2IwICAgICAgICAgICAgICAgICApICAgICAgLy8gZXJyb3IKKworICAgICk7CisKK3VzYmhfY29yZSAgdV9jb3JlICgKKyAgICAvLyBJbnB1dHMKKyAgICAuY2xrX2kgICAgICAgICAgICAgICAodXNiX2Nsa19pICAgICAgICAgICApLAorICAgIC5yc3RuX2kgICAgICAgICAgICAgICh1c2JfcnN0bl9pICAgICAgICAgICksCisKKyAgICAucmVnX2NzICAgICAgICAgICAgICAocmVnX2NzICAgICAgICAgICAgICApLAorICAgIC5yZWdfd3IgICAgICAgICAgICAgIChyZWdfd3IgICAgICAgICAgICAgICksCisgICAgLnJlZ19hZGRyICAgICAgICAgICAgKHJlZ19hZGRyICAgICAgICAgICAgKSwKKyAgICAucmVnX3dkYXRhICAgICAgICAgICAocmVnX3dkYXRhICAgICAgICAgICApLAorICAgIC5yZWdfYmUgICAgICAgICAgICAgIChyZWdfYmUgICAgICAgICAgICAgICksCisKKyAgIC8vIE91dHB1dHMKKyAgICAucmVnX3JkYXRhICAgICAgICAgICAocmVnX3JkYXRhICAgICAgICAgICApLAorICAgIC5yZWdfYWNrICAgICAgICAgICAgIChyZWdfYWNrICAgICAgICAgICAgICksCisKKyAgICAvLyBPdXRwdXRzCisgICAgLmludHJfbyAgICAgICAgICAgICAgKHVzYl9pbnRyX28gICAgICAgICAgKSwKKworICAgIC51dG1pX2RhdGFfaW5faSAgICAgICh1dG1pX2RhdGFfaW5faSAgICAgICksCisgICAgLnV0bWlfcnh2YWxpZF9pICAgICAgKHV0bWlfcnh2YWxpZF9pICAgICAgKSwKKyAgICAudXRtaV9yeGFjdGl2ZV9pICAgICAodXRtaV9yeGFjdGl2ZV9pICAgICApLAorICAgIC51dG1pX3J4ZXJyb3JfaSAgICAgICh1dG1pX3J4ZXJyb3JfaSAgICAgICksCisgICAgLnV0bWlfbGluZXN0YXRlX2kgICAgKHV0bWlfbGluZXN0YXRlX2kgICAgKSwKKworICAgIC51dG1pX3R4cmVhZHlfaSAgICAgICh1dG1pX3R4cmVhZHlfaSAgICAgICksCisgICAgLnV0bWlfZGF0YV9vdXRfbyAgICAgKHV0bWlfZGF0YV9vdXRfbyAgICAgKSwKKyAgICAudXRtaV90eHZhbGlkX28gICAgICAodXRtaV90eHZhbGlkX28gICAgICApLAorCisgICAgLnV0bWlfb3BfbW9kZV9vICAgICAgKHV0bWlfb3BfbW9kZV9vICAgICAgKSwKKyAgICAudXRtaV94Y3Zyc2VsZWN0X28gICAodXRtaV94Y3Zyc2VsZWN0X28gICApLAorICAgIC51dG1pX3Rlcm1zZWxlY3RfbyAgICh1dG1pX3Rlcm1zZWxlY3RfbyAgICksCisgICAgLnV0bWlfZHBwdWxsZG93bl9vICAgKHV0bWlfZHBwdWxsZG93bl9vICAgKSwKKyAgICAudXRtaV9kbXB1bGxkb3duX28gICAodXRtaV9kbXB1bGxkb3duX28gICApCispOworCisKKwordXNiX2ZzX3BoeSAgdV9waHkoCisgICAgLy8gSW5wdXRzCisgICAgICAgICAuY2xrX2kgICAgICAgICAgICAgICAodXNiX2Nsa19pICAgICAgICAgICApLAorICAgICAgICAgLnJzdG5faSAgICAgICAgICAgICAgKHVzYl9yc3RuX2kgICAgICAgICAgKSwKKyAgICAgICAgIC51dG1pX2RhdGFfb3V0X2kgICAgICh1dG1pX2RhdGFfb3V0X28gICAgICksCisgICAgICAgICAudXRtaV90eHZhbGlkX2kgICAgICAodXRtaV90eHZhbGlkX28gICAgICApLAorICAgICAgICAgLnV0bWlfb3BfbW9kZV9pICAgICAgKHV0bWlfb3BfbW9kZV9vICAgICAgKSwKKyAgICAgICAgIC51dG1pX3hjdnJzZWxlY3RfaSAgICh1dG1pX3hjdnJzZWxlY3RfbyAgICksCisgICAgICAgICAudXRtaV90ZXJtc2VsZWN0X2kgICAodXRtaV90ZXJtc2VsZWN0X28gICApLAorICAgICAgICAgLnV0bWlfZHBwdWxsZG93bl9pICAgKHV0bWlfZHBwdWxsZG93bl9vICAgKSwKKyAgICAgICAgIC51dG1pX2RtcHVsbGRvd25faSAgICh1dG1pX2RtcHVsbGRvd25fbyAgICksCisgICAgICAgICAudXNiX3J4X3Jjdl9pICAgICAgICAodXNiX3BhZHNfcnhfcmN2X3cgICApLAorICAgICAgICAgLnVzYl9yeF9kcF9pICAgICAgICAgKHVzYl9wYWRzX3J4X2RwX3cgICAgKSwKKyAgICAgICAgIC51c2JfcnhfZG5faSAgICAgICAgICh1c2JfcGFkc19yeF9kbl93ICAgICksCisgICAgICAgICAudXNiX3Jlc2V0X2Fzc2VydF9pICAoIDEnYjAgICAgICAgICAgICAgICApLAorCisgICAgLy8gT3V0cHV0cworICAgICAgICAgLnV0bWlfZGF0YV9pbl9vICAgICAodXRtaV9kYXRhX2luX2kgICAgICApLAorICAgICAgICAgLnV0bWlfdHhyZWFkeV9vICAgICAodXRtaV90eHJlYWR5X2kgICAgICApLAorICAgICAgICAgLnV0bWlfcnh2YWxpZF9vICAgICAodXRtaV9yeHZhbGlkX2kgICAgICApLAorICAgICAgICAgLnV0bWlfcnhhY3RpdmVfbyAgICAodXRtaV9yeGFjdGl2ZV9pICAgICApLAorICAgICAgICAgLnV0bWlfcnhlcnJvcl9vICAgICAodXRtaV9yeGVycm9yX2kgICAgICApLAorICAgICAgICAgLnV0bWlfbGluZXN0YXRlX28gICAodXRtaV9saW5lc3RhdGVfaSAgICApLAorICAgICAgICAgLnVzYl90eF9kcF9vICAgICAgICAodXNiX3BhZHNfdHhfZHBfdyAgICApLAorICAgICAgICAgLnVzYl90eF9kbl9vICAgICAgICAodXNiX3BhZHNfdHhfZG5fdyAgICApLAorICAgICAgICAgLnVzYl90eF9vZW5fbyAgICAgICAodXNiX3BhZHNfdHhfb2VuX3cgICApLAorICAgICAgICAgLnVzYl9yZXNldF9kZXRlY3RfbyAoICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgLnVzYl9lbl9vICAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICApCisgICAgKTsKKworCisgdXNiX3RyYW5zY2VpdmVyIHVfdXNiX3hjdnIgKAorICAgIC8vIElucHV0cworICAgICAgICAgLnVzYl9waHlfdHhfZHBfaSAgICAodXNiX3BhZHNfdHhfZHBfdyAgICksCisgICAgICAgICAudXNiX3BoeV90eF9kbl9pICAgICh1c2JfcGFkc190eF9kbl93ICAgKSwKKyAgICAgICAgIC51c2JfcGh5X3R4X29lbl9pICAgKHVzYl9wYWRzX3R4X29lbl93ICApLAorICAgICAgICAgLm1vZGVfaSAgICAgICAgICAgICAodXNiX3hjdnJfbW9kZV93ICAgICksCisKKwkgLm91dF9kcCAgICAgICAgICAgICAob3V0X2RwICAgICAgICAgICAgICksCisgICAgICAgICAub3V0X2RuICAgICAgICAgICAgIChvdXRfZG4gICAgICAgICAgICAgKSwKKwkgLm91dF90eF9vZW4gICAgICAgICAob3V0X3R4X29lbiAgICAgICAgICksCisKKyAgICAgICAgIC5pbl9kcCAgICAgICAgICAgICAgKGluX2RwICAgICAgICAgICAgICApLAorICAgICAgICAgLmluX2RuICAgICAgICAgICAgICAoaW5fZG4gICAgICAgICAgICAgICksCisKKworICAgIC8vIE91dHB1dHMKKyAgICAgICAgIC51c2JfcGh5X3J4X3Jjdl9vICAodXNiX3BhZHNfcnhfcmN2X3cgICApLAorICAgICAgICAgLnVzYl9waHlfcnhfZHBfbyAgICh1c2JfcGFkc19yeF9kcF93ICAgICksCisgICAgICAgICAudXNiX3BoeV9yeF9kbl9vICAgKHVzYl9wYWRzX3J4X2RuX3cgICAgKQorKTsKKworCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3VzZXJfcHJvamVjdF93cmFwcGVyLnYgYi92ZXJpbG9nL3J0bC91c2VyX3Byb2plY3Rfd3JhcHBlci52Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzOWJmM2IKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC91c2VyX3Byb2plY3Rfd3JhcHBlci52CkBAIC0wLDAgKzEsMTYzMiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEaWdpdGFsIGNvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmlzY2R1aW5vIGNvcmVzIHByb2plY3QgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS9yaXNjZHVpbm8uZ2l0ICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgVGhpcyBpcyBkaWdpdGFsIGNvcmUgYW5kIGludGVncmF0ZSBhbGwgdGhlIG1haW4gYmxvY2sgICAvLy8vCisvLy8vICAgICAgaGVyZS4gIEZvbGxvd2luZyBibG9jayBhcmUgaW50ZWdyYXRlZCBoZXJlICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgMS4gUmlzYyBWIENvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgMi4gUXVhZCBTUEkgTWFzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgMy4gV2lzaGJvbmUgQ3Jvc3MgQmFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgNC4gVUFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgNSwgVVNCIDEuMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgNi4gU1BJIE1hc3RlciAoU2luZ2xlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgNy4gVENNIFNSQU0gMktCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgOC4gMktCIGljYWNoZSBhbmQgMktCIGRjYWNoZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgOC4gNiBDaGFubmVsIEFEQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgOS4gUGlubXV4IHdpdGggR1BJTyBhbmQgNiBQV00gICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMSAtIDE2dGggRmViIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEluaXRpYWwgaW50ZWdyYXRpb24gd2l0aCBSaXNjLVYgY29yZSArICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIFdpc2hib25lIENyb3NzIEJhciArIFNQSSAgTWFzdGVyICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMiAtIDE3dGggSnVuZSAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAxLiBJbiByaXNjIGNvcmUsIHdpc2hib25lIGFuZCBjb3JlIGRvbWFpbiBpcyAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICBjcmVhdGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAyLiBjcHUgYW5kIHJ0YyBjbG9jayBhcmUgZ2VuZXJhdGVkIGluIGdsYmwgcmVnIGJsb2NrICAvLy8vCisvLy8vICAgICAgICAzLiBpbiB3aXNoYm9uZSBpbnRlcmNvbm5lY3Q6LSBTdGFnZ2luZyBmbG9wIGFyZSBhZGRlZCAvLy8vCisvLy8vICAgICAgICAgICBhdCBpbnRlcmZhY2UgdG8gYnJlYWsgd2lzaGJvbmUgdGltaW5nIHBhdGggICAgICAgICAvLy8vCisvLy8vICAgICAgICA0LiBidXN3aWR0aCB3YXJuaW5nIGFyZSBmaXhlZCBpbnNpZGUgc3BpX21hc3RlciAgICAgICAvLy8vCisvLy8vICAgICAgICBtb2RpZmllZCBydGwgZmlsZXMgYXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICB2ZXJpbG9nL3J0bC9kaWdpdGFsX2NvcmUvc3JjL2RpZ2l0YWxfY29yZS5zdiAgICAgICAvLy8vCisvLy8vICAgICAgICAgICB2ZXJpbG9nL3J0bC9kaWdpdGFsX2NvcmUvc3JjL2dsYmxfY2ZnLnN2ICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICB2ZXJpbG9nL3J0bC9saWIvd2Jfc3RhZ2dpbmcuc3YgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICB2ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvdG9wL3NjcjFfZG1lbV93Yi5zdiAvLy8vCisvLy8vICAgICAgICAgICB2ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvdG9wL3NjcjFfaW1lbV93Yi5zdiAvLy8vCisvLy8vICAgICAgICAgICB2ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvdG9wL3NjcjFfdG9wX3diLnN2ICAvLy8vCisvLy8vICAgICAgICAgICB2ZXJpbG9nL3J0bC91c2VyX3Byb2plY3Rfd3JhcHBlci52ICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICB2ZXJpbG9nL3J0bC93Yl9pbnRlcmNvbm5lY3Qvc3JjL3diX2ludGVyY29ubmVjdC5zdiAvLy8vCisvLy8vICAgICAgICAgICB2ZXJpbG9nL3J0bC9zcGlfbWFzdGVyL3NyYy9zcGltX2Nsa2dlbi5zdiAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICB2ZXJpbG9nL3J0bC9zcGlfbWFzdGVyL3NyYy9zcGltX2N0cmwuc3YgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMyAtIDIwdGggSnVuZSAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAxLiB1YXJ0IGNvcmUgaXMgaW50ZWdyYXRlZCAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAyLiAzcmQgU2xhdmUgcG9ydGVkIGFkZGVkIHRvIHdpc2hib25lIGludGVyY29ubmVjdCAvLy8vCisvLy8vICAgIDAuNCAtIDI1dGggSnVuZSAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIE1vdmVkIHRoZSBwYWQgbG9naWMgaW5zaWRlIHNkcmFtLHNwaSx1YXJ0IGJsb2NrIHRvICAvLy8vCisvLy8vICAgICAgICAgIGF2b2lkIGxvZ2ljIGF0IGRpZ2l0YWwgY29yZSBsZXZlbCAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuNSAtIDI1dGggSnVuZSAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIFNpbmNlIGNhcnZlbCBnaXZlcyBvbmx5IDE2TUIgYWRkcmVzcyBzcGFjZSBmb3IgdXNlciAvLy8vCisvLy8vICAgICAgICAgIHNwYWNlLCB3ZSBoYXZlIGltcGxlbWVudGVkIGluZGlyZWN0IGFkZHJlc3Mgc2VsZWN0ICAvLy8vCisvLy8vICAgICAgICAgIHdpdGggOCBiaXQgYmFuayBzZWxlY3QgZ2l2ZW4gaW5zaWRlIHdiX2hvc3QgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIGNvcmUgQWRkcmVzcyA9IHtCYW5rX1NlbFs3OjBdLCBXYl9BZGRyZXNzWzIzOjBdICAgICAvLy8vCisvLy8vICAgICAgICAgIGNhcmF2ZWwgdXNlciBhZGRyZXNzIHNwYWNlIGlzICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIDB4MzAwMF8wMDAwIHRvIDB4MzBGRl9GRkZGICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuNiAtIDI3dGggSnVuZSAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIERpZ2l0YWwgY29yZSBsZXZlbCB0aWUgYXJlIG1vdmVkIGluc2lkZSBJUCB0byBhdm9pZCAvLy8vCisvLy8vICAgICAgICAgIHBvd2VyIGhvb2sgdXAgYXQgY29yZSBsZXZlbCAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHVfcmlzY190b3AgLSB0ZXN0X21vZGUgJiB0ZXN0X3JzdF9uICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHVfaW50ZXJjb24gLSBzKl93YmRfZXJyX2kgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHVudXNlZCB3Yl9jdGlfaSBpcyByZW1vdmVkIGZyb20gdV9zZHJhbV9jdHJsICAgICAgICAvLy8vCisvLy8vICAgIDAuNyAtIDI4dGggSnVuZSAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHdiX2ludGVyY29ubmVjdCBtYXN0ZXIgcG9ydCBhcmUgaW50ZXJjaGFuZ2VkIGZvciAgICAvLy8vCisvLy8vICAgICAgICAgIGJldHRlciBwaHlzaWNhbCBwbGFjZW1lbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIG0wIC0gRXh0ZXJuYWwgSE9TVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIG0xIC0gUklTQyBJTUVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIG0yIC0gUklTQyBETUVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuOCAtIDZ0aCBKdWx5IDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEZvciBCZXR0ZXIgU0RSQU0gSW50ZXJmYWNlIHRpbWluZyB3ZSBoYXZlIHRhcGluZyAgICAvLy8vCisvLy8vICAgICAgICAgIHNkcmFtX2Nsb2NrIGdvaW50IHRvIGlvX291dFsyOV0gZGlyZWN0bHkgZnJvbSAgICAgICAvLy8vCisvLy8vICAgICAgICAgIGdsb2JhbCByZWdpc3RlciBibG9jaywgdGhpcyBoZWxwIGluIGJldHRlciBTRFJBTSAgICAvLy8vCisvLy8vICAgICAgICAgIGludGVyZmFjZSB0aW1pbmcgY29udHJvbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuOSAtIDd0aCBKdWx5IDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIFJlbW92ZWQgMiBVbnVzZWQgcG9ydCBjb25uZWN0aW9uIGlvX2luWzMxOjMwXSB0byAgICAvLy8vCisvLy8vICAgICAgICAgIHNwaV9tYXN0ZXIgdG8gYXZvaWQgbHZzIGlzc3VlICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDEuMCAtIDI4dGggSnVseSAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIGkyY20gaW50ZWdyYXRlZCBwYXJ0IG9mIHVhcnRfaTJjbSBtb2R1bGUsICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIGR1ZSB0byBudW1iZXIgb2YgSU8gcGluIGxpbWl0YXRpb24sICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIE9ubHkgVUFSVCBPUiBJMkMgc2VsZWN0ZWQgYmFzZWQgb24gY29uZmlnIG1vZGUgICAgICAvLy8vCisvLy8vICAgIDEuMSAtIDFzdCBBdWcgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHVzYjEuMSBob3N0IGludGVncmF0ZWQgcGFydCBvZiB1YXJ0X2kyY21fdXNiIG1vZHVsZSwvLy8vCisvLy8vICAgICAgICAgIGR1ZSB0byBudW1iZXIgb2YgSU8gcGluIGxpbWl0YXRpb24sICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIE9ubHkgVUFSVC9JMkMvVVNCIHNlbGVjdGVkIGJhc2VkIG9uIGNvbmZpZyBtb2RlICAgICAvLy8vCisvLy8vICAgIDEuMiAtIDI5dGggU2VwdCAyMDIxLCBEaW5lc2guQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIDEuIGNvcGllZCB0aGUgcmVwbyBmcm9tIHlpZml2ZSBhbmQgcmVuYW1lcyBhcyAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgIHJpc2NkdW5pbm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIDIuIFJlbW92ZWQgdGhlIFNEUkFNIGNvbnRyb2xsZWQgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIDMuIEFkZGVkIFBpbk11eCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIDQuIEFkZGVkIFNBUiBBREMgZm9yIDYgY2hhbm5lbCAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDEuMyAtIDMwdGggU2VwdCAyMDIxLCBEaW5lc2guQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIDJLQiBTUkFNIEludGVyZmFjZSBhZGRlZCB0byBSSVNDIENvcmUgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDEuNCAtIDEzdGggT2N0IDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEJhc2ljIHZlcmlmaWNhdGlvbiBhbmQgU3ludGhlc2lzIGNsZWFudXAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDEuNSAtIDZ0aCBOb3YgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIENsb2NrIFNrZXcgYmxvY2sgbW92ZWQgaW5zaWRlIHJlc3BlY3RpdmUgYmxvY2sgZHVlICAvLy8vCisvLy8vICAgICAgICAgIHRvIHRvcC1sZXZlbCBwb3dlciBob29rLXVwIGNoYWxsZW5nZXMgZm9yIHNtYWxsIElQICAvLy8vCisvLy8vICAgIDEuNiAgIE5vdiAxNCwgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIE1ham9yIGJ1ZywgY2xvY2sgZGl2aWRlciBpbnNpZGUgdGhlIHdiX2hvc3QgcmVzZXQgICAvLy8vCisvLy8vICAgICAgICAgIGNvbm5lY3Rpdml0eSBvcGVuIGlzIGZpeGVkICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDEuNyAgIE5vdiAxNSwgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICBCdWcgZml4IGluIGNsa19jdHJsIEhpZ2gvTG93IGNvdW50ZXIgd2lkdGggICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICBSZW1vdmVkIHNyYW1fY2xvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDEuOCAgTm92IDIzLCAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIFRocmVlIENoaXAgU3BlY2lmaWMgU2lnbmF0dXJlIGFkZGVkIGF0IFBpbk11eCBSZWcgICAvLy8vCisvLy8vICAgICAgICAgIHJlZ18yMixyZWdfMjMscmVnXzI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDEuOSAgRGVjIDExLCAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgMiB4IDJLIFNSQU0gYWRkZWQgaW50byBXaXNoYm9uZSBJbnRlcmZhY2UgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgVGVtcG9yYXJ5IEFEQyBibG9jayByZW1vdmVkICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDIuMCAgRGVjIDE0LCAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgQWRkZWQgdHdvIG1vcmUgMksgU1JBTSBhZGRlZCBpbnRvIFdpc2hib25lIEludGVyZmFjZSAvLy8vCisvLy8vICAgIDIuMSAgRGVjIDE2LCAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgMS40IE1CSVNUIGNvbnRyb2xsZXIgY2hhbmdlZCB0byBzaW5nbGUgb25lICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgMi5BZGRlZCBvbmUgbW9yZSBTUkFNIHRvIFRDTSBtZW1vcnkgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgMy5XaXNoQm9uZSBJbnRlcmNvbm5lY3QgY2hhbmcgdG8gdGFrZSBjYXJlIG1iaXN0IGNoYW5nZXMvLy8vCisvLy8vICAgICAgNC5QaW5tdXggY2hhbmdlIHRvIHRha2UgY2FyZSBvZiBtYmlzdCBjaGFuZ2VzICAgICAgICAgICAvLy8vCisvLy8vICAgIDIuMiAgRGVjIDIwLCAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgMS4gTUJJU1QgZGVzaWduIGlzc3VlIGZpeCBmb3IgeW9zeXMgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgMi4gRnVsbCBjaGlwIFRpbWluZyBhbmQgVHJhbnNpdGlvbiBjbGVhbi11cCAgICAgICAgICAgICAvLy8vICAgICAgICAgICAgICAgICAgIAorLy8vLyAgICAyLjMgIERlYyAyNCwgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIFVBUlQgTWFzdGVyIGFkZGVkIHdpdGggbWVzc2FnZSBoYW5kbGVyIGF0IHdiX2hvc3QgICAgICAgLy8vLworLy8vLyAgICAyLjQgIEphbiAwMSwgMjAyMiwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICBMQVswXSBpcyBhZGRlZCBhcyBzb2Z0IHJlc2V0IG9wdGlvbiBhdCB3Yl9wb3J0ICAgICAgICAgLy8vLworLy8vLyAgICAyLjUgIEphbiAwNiwgMjAyMiwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICBUQ00gUkFNIEJ1ZyBmaXggaW5zaWRlIHN5bnRhY29yZSAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAyLjYgIEphbiAwOCwgMjAyMiwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgUGlubXV4IEludGVycnVwdCBMb2dpYyBjaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAzLjAgIEphbiAxNCwgMjAyMiwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgTW92aW5nIGZyb20gcmlzY3YgY29yZSBmcm9tIHN5bnRhY29yZS9zY3IxIHRvICAgICAgICAgLy8vLworLy8vLyAgICAgICAgeWZpdmUveWNyMSBvbiBzYW5rcmFudGkgMjAyMiAoQSBIaW5kdSBOZXcgWWVhcikgICAgICAgLy8vLworLy8vLyAgICAzLjEgIEphbiAxNSwgMjAyMiwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgIE1ham9yIGNoYW5nZXMgaW4gcXNwaW0gbG9naWMgdG8gaGFuZGxlIHNwZWNpYWwgbW9kZSAgLy8vLworLy8vLyAgICAzLjIgIEZlYiAwMiwgMjAyMiwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgIEJ1ZyBmaXggYXJvdW5kIGljYWNoZS9kY2FjaGUgYW5kIHdpc2hib25lIGJ1cnN0ICAgICAgLy8vLworLy8vLyAgICAgICAgIGFjY2VzcyBjbGVhbi11cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAzLjMgIEZlYiAwOCwgMjAyMiwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgIHN1cHBvcnQgYWRkZWQgc3Bpc3JhbSBzdXBwb3J0IGluIHFzcGltIGlwICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgIFRoZXJlIGFyZSA0IGNoaXAgc2VsZWN0IGF2YWlsYWJsZSBpbiBxc3BpbSAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgIENTIzAvQ1MjMSB0YXJnZXRlZCBmb3IgU1BJIEZMQVNIICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgIENTIzIvQ1MjMyB0YXJnZXRlZCBmb3IgU1BJIFNSQU0gICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAzLjQgIEZlYiAxNCwgMjAyMiwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgIGJ1cnN0IG1vZGUgc3VwcG9ydGVkIGFkZGVkIGluIGltZW0gYnVmZmVyIGluc2lkZSAgICAgLy8vLworLy8vLyAgICAgICAgIHJpc2N2IGNvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBXZSBoYXZlIGNyZWF0ZWQgc2VwZXJhdGUgcmVwbyBmcm9tIHRoaXMgb253YXJkcyAgICAgICAgICAgLy8vLworLy8vLyAgICAgIFNSQU0gYmFzZWQgU09DIGlzIHNwaW4tb3V0IHRvICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIGRpbmVzaGFubmF5eWEvcmlzY2R1aW5vX3NyYW0uZ2l0ICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBUaGlzIHJlcG8gd2lsbCByZW1vdmUgbWJpc3QgKyBTUkFNIGFuZCBSSVNDIFNSQU0gd2lsbCBiZSAgLy8vLworLy8vLyAgICByZXBsYWNlZCB3aXRoIERGUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLworLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLworLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLworLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLworLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLworLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLworLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLworLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLworLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisKK21vZHVsZSB1c2VyX3Byb2plY3Rfd3JhcHBlciAoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICBpbm91dCB2ZGRhMSwJLy8gVXNlciBhcmVhIDEgMy4zViBzdXBwbHkKKyAgICBpbm91dCB2ZGRhMiwJLy8gVXNlciBhcmVhIDIgMy4zViBzdXBwbHkKKyAgICBpbm91dCB2c3NhMSwJLy8gVXNlciBhcmVhIDEgYW5hbG9nIGdyb3VuZAorICAgIGlub3V0IHZzc2EyLAkvLyBVc2VyIGFyZWEgMiBhbmFsb2cgZ3JvdW5kCisgICAgaW5vdXQgdmNjZDEsCS8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgaW5vdXQgdmNjZDIsCS8vIFVzZXIgYXJlYSAyIDEuOHYgc3VwcGx5CisgICAgaW5vdXQgdnNzZDEsCS8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCisgICAgaW5vdXQgdnNzZDIsCS8vIFVzZXIgYXJlYSAyIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgICBpbnB1dCAgIHdpcmUgICAgICAgICAgICAgICAgICAgICAgIHdiX2Nsa19pICAgICAgICAsICAvLyBTeXN0ZW0gY2xvY2sKKyAgICBpbnB1dCAgIHdpcmUgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfY2xvY2syICAgICAsICAvLyB1c2VyIENsb2NrCisgICAgaW5wdXQgICB3aXJlICAgICAgICAgICAgICAgICAgICAgICB3Yl9yc3RfaSAgICAgICAgLCAgLy8gUmVndWxhciBSZXNldCBzaWduYWwKKworICAgIGlucHV0ICAgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgd2JzX2N5Y19pICAgICAgICwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgaW5wdXQgICB3aXJlICAgICAgICAgICAgICAgICAgICAgICB3YnNfc3RiX2kgICAgICAgLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICBpbnB1dCAgIHdpcmUgW1dCX1dJRFRILTE6MF0gICAgICAgIHdic19hZHJfaSAgICAgICAsICAvLyBhZGRyZXNzCisgICAgaW5wdXQgICB3aXJlICAgICAgICAgICAgICAgICAgICAgICB3YnNfd2VfaSAgICAgICAgLCAgLy8gd3JpdGUKKyAgICBpbnB1dCAgIHdpcmUgW1dCX1dJRFRILTE6MF0gICAgICAgIHdic19kYXRfaSAgICAgICAsICAvLyBkYXRhIG91dHB1dAorICAgIGlucHV0ICAgd2lyZSBbMzowXSAgICAgICAgICAgICAgICAgd2JzX3NlbF9pICAgICAgICwgIC8vIGJ5dGUgZW5hYmxlCisgICAgb3V0cHV0ICB3aXJlIFtXQl9XSURUSC0xOjBdICAgICAgICB3YnNfZGF0X28gICAgICAgLCAgLy8gZGF0YSBpbnB1dAorICAgIG91dHB1dCAgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgd2JzX2Fja19vICAgICAgICwgIC8vIGFja25vd2xlZ2VtZW50CisKKyAgICAvLyBBbmFsb2cgKGRpcmVjdCBjb25uZWN0aW9uIHRvIEdQSU8gcGFkLS0tdXNlIHdpdGggY2F1dGlvbikKKyAgICAvLyBOb3RlIHRoYXQgYW5hbG9nIEkvTyBpcyBub3QgYXZhaWxhYmxlIG9uIHRoZSA3IGxvd2VzdC1udW1iZXJlZAorICAgIC8vIEdQSU8gcGFkcywgYW5kIHNvIHRoZSBhbmFsb2dfaW8gaW5kZXhpbmcgaXMgb2Zmc2V0IGZyb20gdGhlCisgICAgLy8gR1BJTyBpbmRleGluZyBieSA3IChhbHNvIHVwcGVyIDIgR1BJT3MgZG8gbm90IGhhdmUgYW5hbG9nX2lvKS4KKyAgICBpbm91dCBbMjg6MF0gYW5hbG9nX2lvLAorIAorICAgIC8vIExvZ2ljIEFuYWx5emVyIFNpZ25hbHMKKyAgICBpbnB1dCAgd2lyZSBbMTI3OjBdICAgICAgICAgICAgICAgIGxhX2RhdGFfaW4gICAgICAsCisgICAgb3V0cHV0IHdpcmUgWzEyNzowXSAgICAgICAgICAgICAgICBsYV9kYXRhX291dCAgICAgLAorICAgIGlucHV0ICB3aXJlIFsxMjc6MF0gICAgICAgICAgICAgICAgbGFfb2VuYiAgICAgICAgICwKKyAKKworICAgIC8vIElPcworICAgIGlucHV0ICB3aXJlICBbMzc6MF0gICAgICAgICAgICAgICAgaW9faW4gICAgICAgICAgICwKKyAgICBvdXRwdXQgd2lyZSAgWzM3OjBdICAgICAgICAgICAgICAgIGlvX291dCAgICAgICAgICAsCisgICAgb3V0cHV0IHdpcmUgIFszNzowXSAgICAgICAgICAgICAgICBpb19vZWIgICAgICAgICAgLAorCisgICAgb3V0cHV0IHdpcmUgIFsyOjBdICAgICAgICAgICAgICAgICB1c2VyX2lycSAgICAgICAgICAgICAKKworKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIFBhcmFtZXRlciBEZWNsYXJhdGlvbgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworcGFyYW1ldGVyICAgICBCSVNUX05PX1NSQU0gID0gNDsgLy8gTk8gb2YgTUJJU1QgTUVNT1JZCitwYXJhbWV0ZXIgICAgIFNEUl9EVyAgICAgICAgPSA4OyAgLy8gU0RSIERhdGEgV2lkdGggCitwYXJhbWV0ZXIgICAgIFNEUl9CVyAgICAgICAgPSAxOyAgLy8gU0RSIEJ5dGUgV2lkdGgKK3BhcmFtZXRlciAgICAgV0JfV0lEVEggICAgICA9IDMyOyAvLyBXQiBBRERSRVNTL0RBUkEgV0lEVEgKK3BhcmFtZXRlciAgICAgQklTVDFfQUREUl9XRCA9IDExOyAvLyA1MTJ4MzIgU1JBTQorcGFyYW1ldGVyICAgICBCSVNUX0RBVEFfV0QgID0gMzI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBXaXNoYm9uZSBSaXNjIFYgRGNhY2hlIE1lbW9yeSBJbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3Jpc2N2X2RjYWNoZV9zdGJfaSAgICAgICAgICAgICAgICAgOyAvLyBzdHJvYmUvcmVxdWVzdAord2lyZSAgIFtXQl9XSURUSC0xOjBdICAgICAgICAgIHdiZF9yaXNjdl9kY2FjaGVfYWRyX2kgICAgICAgICAgICAgICAgIDsgLy8gYWRkcmVzcword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9yaXNjdl9kY2FjaGVfd2VfaSAgICAgICAgICAgICAgICAgIDsgLy8gd3JpdGUKK3dpcmUgICBbV0JfV0lEVEgtMTowXSAgICAgICAgICB3YmRfcmlzY3ZfZGNhY2hlX2RhdF9pICAgICAgICAgICAgICAgICA7IC8vIGRhdGEgb3V0cHV0Cit3aXJlICAgWzM6MF0gICAgICAgICAgICAgICAgICAgd2JkX3Jpc2N2X2RjYWNoZV9zZWxfaSAgICAgICAgICAgICAgICAgOyAvLyBieXRlIGVuYWJsZQord2lyZSAgIFs5OjBdICAgICAgICAgICAgICAgICAgIHdiZF9yaXNjdl9kY2FjaGVfYmxfaSAgICAgICAgICAgICAgICAgIDsgLy8gYnVyc3QgbGVuZ3RoCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3Jpc2N2X2RjYWNoZV9icnlfaSAgICAgICAgICAgICAgICAgOyAvLyBidXJzdCByZWFkeQord2lyZSAgIFtXQl9XSURUSC0xOjBdICAgICAgICAgIHdiZF9yaXNjdl9kY2FjaGVfZGF0X28gICAgICAgICAgICAgICAgIDsgLy8gZGF0YSBpbnB1dAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9yaXNjdl9kY2FjaGVfYWNrX28gICAgICAgICAgICAgICAgIDsgLy8gYWNrbm93bGVnZW1lbnQKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfcmlzY3ZfZGNhY2hlX2xhY2tfbyAgICAgICAgICAgICAgICA7IC8vIGxhc3QgYnVyc3QgYWNrbm93bGVnZW1lbnQKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfcmlzY3ZfZGNhY2hlX2Vycl9vICAgICAgICAgICAgICAgICA7IC8vIGVycm9yCisKKy8vIENBQ0hFIFNSQU0gTWVtb3J5IEkvRgord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRjYWNoZV9tZW1fY2xrMCAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gQ0xLCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgZGNhY2hlX21lbV9jc2IwICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBDUyMKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBkY2FjaGVfbWVtX3dlYjAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIFdFIword2lyZSAgIFs4OjBdICAgICAgICAgICAgICAgICAgIGRjYWNoZV9tZW1fYWRkcjAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gQWRkcmVzcword2lyZSAgIFszOjBdICAgICAgICAgICAgICAgICAgIGRjYWNoZV9tZW1fd21hc2swICAgICAgICAgICAgICAgICAgICAgIDsgLy8gV01BU0sjCit3aXJlICAgWzMxOjBdICAgICAgICAgICAgICAgICAgZGNhY2hlX21lbV9kaW4wICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBXcml0ZSBEYXRhCit3aXJlICAgWzMxOjBdICAgICAgICAgICAgICAgICAgZGNhY2hlX21lbV9kb3V0MCAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBSZWFkIERhdGEKKyAgIAorLy8gU1JBTS0wIFBPUlQtMSwgSU1FTSBJL0YKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBkY2FjaGVfbWVtX2NsazEgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIENMSword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRjYWNoZV9tZW1fY3NiMSAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gQ1MjCit3aXJlICBbODowXSAgICAgICAgICAgICAgICAgICAgZGNhY2hlX21lbV9hZGRyMSAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBBZGRyZXNzCit3aXJlICBbMzE6MF0gICAgICAgICAgICAgICAgICAgZGNhY2hlX21lbV9kb3V0MSAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBSZWFkIERhdGEKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBXaXNoYm9uZSBSaXNjIFYgSWNhY2hlIE1lbW9yeSBJbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3Jpc2N2X2ljYWNoZV9zdGJfaSAgICAgICAgICAgICAgICAgOyAvLyBzdHJvYmUvcmVxdWVzdAord2lyZSAgIFtXQl9XSURUSC0xOjBdICAgICAgICAgIHdiZF9yaXNjdl9pY2FjaGVfYWRyX2kgICAgICAgICAgICAgICAgIDsgLy8gYWRkcmVzcword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9yaXNjdl9pY2FjaGVfd2VfaSAgICAgICAgICAgICAgICAgIDsgLy8gd3JpdGUKK3dpcmUgICBbMzowXSAgICAgICAgICAgICAgICAgICB3YmRfcmlzY3ZfaWNhY2hlX3NlbF9pICAgICAgICAgICAgICAgICA7IC8vIGJ5dGUgZW5hYmxlCit3aXJlICAgWzk6MF0gICAgICAgICAgICAgICAgICAgd2JkX3Jpc2N2X2ljYWNoZV9ibF9pICAgICAgICAgICAgICAgICAgOyAvLyBidXJzdCBsZW5ndGgKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfcmlzY3ZfaWNhY2hlX2JyeV9pICAgICAgICAgICAgICAgICA7IC8vIGJ1cnN0IHJlYWR5Cit3aXJlICAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgd2JkX3Jpc2N2X2ljYWNoZV9kYXRfbyAgICAgICAgICAgICAgICAgOyAvLyBkYXRhIGlucHV0Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3Jpc2N2X2ljYWNoZV9hY2tfbyAgICAgICAgICAgICAgICAgOyAvLyBhY2tub3dsZWdlbWVudAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9yaXNjdl9pY2FjaGVfbGFja19vICAgICAgICAgICAgICAgIDsgLy8gbGFzdCBidXJzdCBhY2tub3dsZWdlbWVudAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9yaXNjdl9pY2FjaGVfZXJyX28gICAgICAgICAgICAgICAgIDsgLy8gZXJyb3IKKworLy8gQ0FDSEUgU1JBTSBNZW1vcnkgSS9GCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNhY2hlX21lbV9jbGswICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBDTEsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBpY2FjaGVfbWVtX2NzYjAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIENTIword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGljYWNoZV9tZW1fd2ViMCAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gV0UjCit3aXJlICAgWzg6MF0gICAgICAgICAgICAgICAgICAgaWNhY2hlX21lbV9hZGRyMCAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBBZGRyZXNzCit3aXJlICAgWzM6MF0gICAgICAgICAgICAgICAgICAgaWNhY2hlX21lbV93bWFzazAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBXTUFTSyMKK3dpcmUgICBbMzE6MF0gICAgICAgICAgICAgICAgICBpY2FjaGVfbWVtX2RpbjAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIFdyaXRlIERhdGEKKy8vIHdpcmUgICBbMzE6MF0gICAgICAgICAgICAgICBpY2FjaGVfbWVtX2RvdXQwICAgICAgICAgICAgICAgICAgICAgICA7IC8vIFJlYWQgRGF0YQorICAgCisvLyBTUkFNLTAgUE9SVC0xLCBJTUVNIEkvRgord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGljYWNoZV9tZW1fY2xrMSAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gQ0xLCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNhY2hlX21lbV9jc2IxICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBDUyMKK3dpcmUgIFs4OjBdICAgICAgICAgICAgICAgICAgICBpY2FjaGVfbWVtX2FkZHIxICAgICAgICAgICAgICAgICAgICAgICA7IC8vIEFkZHJlc3MKK3dpcmUgIFszMTowXSAgICAgICAgICAgICAgICAgICBpY2FjaGVfbWVtX2RvdXQxICAgICAgICAgICAgICAgICAgICAgICA7IC8vIFJlYWQgRGF0YQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUklTQyBWIFdpc2hib25lIERhdGEgTWVtb3J5IEludGVyZmFjZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfcmlzY3ZfZG1lbV9zdGJfaSAgICAgICAgICAgICAgICAgICA7IC8vIHN0cm9iZS9yZXF1ZXN0Cit3aXJlICAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgd2JkX3Jpc2N2X2RtZW1fYWRyX2kgICAgICAgICAgICAgICAgICAgOyAvLyBhZGRyZXNzCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3Jpc2N2X2RtZW1fd2VfaSAgICAgICAgICAgICAgICAgICAgOyAvLyB3cml0ZQord2lyZSAgIFtXQl9XSURUSC0xOjBdICAgICAgICAgIHdiZF9yaXNjdl9kbWVtX2RhdF9pICAgICAgICAgICAgICAgICAgIDsgLy8gZGF0YSBvdXRwdXQKK3dpcmUgICBbMzowXSAgICAgICAgICAgICAgICAgICB3YmRfcmlzY3ZfZG1lbV9zZWxfaSAgICAgICAgICAgICAgICAgICA7IC8vIGJ5dGUgZW5hYmxlCit3aXJlICAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgd2JkX3Jpc2N2X2RtZW1fZGF0X28gICAgICAgICAgICAgICAgICAgOyAvLyBkYXRhIGlucHV0Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3Jpc2N2X2RtZW1fYWNrX28gICAgICAgICAgICAgICAgICAgOyAvLyBhY2tub3dsZWdlbWVudAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9yaXNjdl9kbWVtX2Vycl9vICAgICAgICAgICAgICAgICAgIDsgLy8gZXJyb3IKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFdCIEhPU1QgSW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9pbnRfY3ljX2kgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gc3Ryb2JlL3JlcXVlc3QKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfaW50X3N0Yl9pICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIHN0cm9iZS9yZXF1ZXN0Cit3aXJlICAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgd2JkX2ludF9hZHJfaSAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBhZGRyZXNzCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2ludF93ZV9pICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyB3cml0ZQord2lyZSAgIFtXQl9XSURUSC0xOjBdICAgICAgICAgIHdiZF9pbnRfZGF0X2kgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gZGF0YSBvdXRwdXQKK3dpcmUgICBbMzowXSAgICAgICAgICAgICAgICAgICB3YmRfaW50X3NlbF9pICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIGJ5dGUgZW5hYmxlCit3aXJlICAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgd2JkX2ludF9kYXRfbyAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBkYXRhIGlucHV0Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2ludF9hY2tfbyAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBhY2tub3dsZWdlbWVudAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9pbnRfZXJyX28gICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gZXJyb3IKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgICBTUEkgTWFzdGVyIFdpc2hib25lIEludGVyZmFjZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfc3BpbV9zdGJfbyAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIHN0cm9iZS9yZXF1ZXN0Cit3aXJlICAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgd2JkX3NwaW1fYWRyX28gICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBhZGRyZXNzCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3NwaW1fd2VfbyAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyB3cml0ZQord2lyZSAgIFtXQl9XSURUSC0xOjBdICAgICAgICAgIHdiZF9zcGltX2RhdF9vICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gZGF0YSBvdXRwdXQKK3dpcmUgICBbMzowXSAgICAgICAgICAgICAgICAgICB3YmRfc3BpbV9zZWxfbyAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIGJ5dGUgZW5hYmxlCit3aXJlICAgWzk6MF0gICAgICAgICAgICAgICAgICAgd2JkX3NwaW1fYmxfbyAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBCdXJzdCBjb3VudAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9zcGltX2JyeV9vICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gQnVzcnQgUmVhZHkKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfc3BpbV9jeWNfbyAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgd2JkX3NwaW1fZGF0X2kgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBkYXRhIGlucHV0Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3NwaW1fYWNrX2kgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBhY2tub3dsZWdlbWVudAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9zcGltX2xhY2tfaSAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gTGFzdCBhY2tub3dsZWdlbWVudAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9zcGltX2Vycl9pICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gZXJyb3IKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgIFNQSSBNYXN0ZXIgV2lzaGJvbmUgSW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9hZGNfc3RiX28gICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgWzc6MF0gICAgICAgICAgICAgICAgICAgICB3YmRfYWRjX2Fkcl9vICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2FkY193ZV9vICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyAxIC0gV3JpdGUsIDAgLSBSZWFkCit3aXJlIFtXQl9XSURUSC0xOjBdICAgICAgICAgICAgd2JkX2FkY19kYXRfbyAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSBbV0JfV0lEVEgvOC0xOjBdICAgICAgICAgIHdiZF9hZGNfc2VsX28gICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gQnl0ZSBlbmFibGUKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfYWRjX2N5Y19vICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICBbMjowXSAgICAgICAgICAgICAgICAgICAgd2JkX2FkY19jdGlfbyAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgIHdiZF9hZGNfZGF0X2kgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfYWRjX2Fja19pICAgICAgICAgICAgICAgICAgICAgICAgICA7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgICBHbG9iYWwgUmVnaXN0ZXIgV2lzaGJvbmUgSW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9nbGJsX3N0Yl9vICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gc3Ryb2JlL3JlcXVlc3QKK3dpcmUgICBbNzowXSAgICAgICAgICAgICAgICAgICB3YmRfZ2xibF9hZHJfbyAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIGFkZHJlc3MKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfZ2xibF93ZV9vICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIHdyaXRlCit3aXJlICAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgd2JkX2dsYmxfZGF0X28gICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBkYXRhIG91dHB1dAord2lyZSAgIFszOjBdICAgICAgICAgICAgICAgICAgIHdiZF9nbGJsX3NlbF9vICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gYnl0ZSBlbmFibGUKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfZ2xibF9jeWNfbyAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgd2JkX2dsYmxfZGF0X2kgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBkYXRhIGlucHV0Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2dsYmxfYWNrX2kgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBhY2tub3dsZWdlbWVudAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9nbGJsX2Vycl9pICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gZXJyb3IKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgIEdsb2JhbCBSZWdpc3RlciBXaXNoYm9uZSBJbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3VhcnRfc3RiX28gICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBzdHJvYmUvcmVxdWVzdAord2lyZSAgIFs3OjBdICAgICAgICAgICAgICAgICAgIHdiZF91YXJ0X2Fkcl9vICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gYWRkcmVzcword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF91YXJ0X3dlX28gICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gd3JpdGUKK3dpcmUgICBbMzE6MF0gICAgICAgICAgICAgICAgICB3YmRfdWFydF9kYXRfbyAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIGRhdGEgb3V0cHV0Cit3aXJlICAgWzM6MF0gICAgICAgICAgICAgICAgICAgd2JkX3VhcnRfc2VsX28gICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBieXRlIGVuYWJsZQord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF91YXJ0X2N5Y19vICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICBbMzE6MF0gICAgICAgICAgICAgICAgICB3YmRfdWFydF9kYXRfaSAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIGRhdGEgaW5wdXQKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfdWFydF9hY2tfaSAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIGFja25vd2xlZ2VtZW50Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3VhcnRfZXJyX2kgICAgICAgICAgICAgICAgICAgICAgICAgOyAgLy8gZXJyb3IKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBNQklTVDEgIAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfbWJpc3Rfc3RiX28gICAgICAgICAgICAgICAgICAgICAgICA7IC8vIHN0cm9iZS9yZXF1ZXN0Cit3aXJlICAgWzEyOjBdICAgICAgICAgICAgICAgICAgd2JkX21iaXN0X2Fkcl9vICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBhZGRyZXNzCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX21iaXN0X3dlX28gICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyB3cml0ZQord2lyZSAgIFtXQl9XSURUSC0xOjBdICAgICAgICAgIHdiZF9tYmlzdF9kYXRfbyAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gZGF0YSBvdXRwdXQKK3dpcmUgICBbMzowXSAgICAgICAgICAgICAgICAgICB3YmRfbWJpc3Rfc2VsX28gICAgICAgICAgICAgICAgICAgICAgICA7IC8vIGJ5dGUgZW5hYmxlCit3aXJlICAgWzk6MF0gICAgICAgICAgICAgICAgICAgd2JkX21iaXN0X2JsX28gICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBieXRlIGVuYWJsZQord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9tYmlzdF9icnlfbyAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gYnl0ZSBlbmFibGUKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfbWJpc3RfY3ljX28gICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgd2JkX21iaXN0X2RhdF9pICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBkYXRhIGlucHV0Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX21iaXN0X2Fja19pICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBhY2tub3dsZWdlbWVudAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9tYmlzdF9sYWNrX2kgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gYWNrbm93bGVnZW1lbnQKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfbWJpc3RfZXJyX2kgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIGVycm9yCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIENQVSBDb25maWd1cmF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHVfcnN0X24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgcXNwaW1fcnN0X24gICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzcGltX3JzdF9uICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB1YXJ0X3JzdF9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIHVhcnQgcmVzZXQKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBpMmNfcnN0X24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIGkyYyByZXNldAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9yc3RfbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gaTJjIHJlc2V0Cit3aXJlICAgWzM6MF0gICAgICAgICAgICAgICAgICAgYm9vdF9yZW1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBCb290IFJlbWFwCit3aXJlICAgWzM6MF0gICAgICAgICAgICAgICAgICAgZGNhY2hlX3JlbWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBSZW1hcCB0aGUgZGNhY2hlIGFkZHJlc3MKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHVfY2xrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRjX2NsayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9jbGsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CisKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX3Bpbm11eCAgICAgICAgICAgICAgICAgICAgICAgICA7CisvL3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX2ludDEgICAgICAgICAgICAgICAgICAgICAgICAgOworLy93aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19pbnQyICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfaW50X3JzdF9uICAgICAgICAgICAgICAgICAgICAgICAgICA7CisvL3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfaW50MV9yc3RfbiAgICAgICAgICAgICAgICAgICAgICAgOworLy93aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2ludDJfcnN0X24gICAgICAgICAgICAgICAgICAgICAgIDsKKword2lyZSBbMzE6MF0gICAgICAgICAgICAgICAgICAgIGZ1c2VfbWhhcnRpZCAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgWzE1OjBdICAgICAgICAgICAgICAgICAgICBpcnFfbGluZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgc29mdF9pcnEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOworCisKK3dpcmUgWzc6MF0gICAgICAgICAgICAgICAgICAgICBjZmdfZ2xiX2N0cmwgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlIFszMTowXSAgICAgICAgICAgICAgICAgICAgY2ZnX2Nsa19jdHJsMSAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSBbMzE6MF0gICAgICAgICAgICAgICAgICAgIGNmZ19jbGtfY3RybDIgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICBjZmdfY3NrYV93aSAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIGNsb2NrIHNrZXcgYWRqdXN0IGZvciB3aXNoYm9uZSBpbnRlcmNvbm5lY3QKK3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICBjZmdfY3NrYV93aCAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIGNsb2NrIHNrZXcgYWRqdXN0IGZvciB3ZWIgaG9zdAorCit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgY2ZnX2Nza2FfcmlzY3YgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBjbG9jayBza2V3IGFkanVzdCBmb3IgcmlzY3YKK3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICBjZmdfY3NrYV91YXJ0ICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIGNsb2NrIHNrZXcgYWRqdXN0IGZvciB1YXJ0Cit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgY2ZnX2Nza2FfcXNwaSAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBjbG9jayBza2V3IGFkanVzdCBmb3Igc3BpCit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgY2ZnX2Nza2FfcGlubXV4ICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBjbG9jayBza2V3IGFkanVzdCBmb3IgcGlubXV4Cit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgY2ZnX2Nza2FfcXNwaV9jbyAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBjbG9jayBza2V3IGFkanVzdCBmb3IgZ2xvYmFsIHJlZword2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGNmZ19jc2thX21iaXN0MSAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICBjZmdfY3NrYV9tYmlzdDIgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgY2ZnX2Nza2FfbWJpc3QzICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGNmZ19jc2thX21iaXN0NCAgICAgICAgICAgICAgICAgICAgICAgIDsKKworLy8gQnVzIFJlcGVhdGVyIFNpZ25hbHMgIG91dHB1dCBmcm9tIFdpc2hib25lIEludGVyZmFjZQord2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGNmZ19jc2thX3Jpc2N2X3JwICAgICAgICAgICAgICAgICAgICAgIDsgLy8gY2xvY2sgc2tldyBhZGp1c3QgZm9yIHJpc2N2Cit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgY2ZnX2Nza2FfdWFydF9ycCAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBjbG9jayBza2V3IGFkanVzdCBmb3IgdWFydAord2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGNmZ19jc2thX3FzcGlfcnAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gY2xvY2sgc2tldyBhZGp1c3QgZm9yIHNwaQord2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGNmZ19jc2thX3Bpbm11eF9ycCAgICAgICAgICAgICAgICAgICAgIDsgLy8gY2xvY2sgc2tldyBhZGp1c3QgZm9yIHBpbm11eAord2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGNmZ19jc2thX3FzcGlfY29fcnAgICAgICAgICAgICAgICAgICAgIDsgLy8gY2xvY2sgc2tldyBhZGp1c3QgZm9yIGdsb2JhbCByZWcKK3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICBjZmdfY3NrYV9tYmlzdDFfcnAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgY2ZnX2Nza2FfbWJpc3QyX3JwICAgICAgICAgICAgICAgICAgICAgOword2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGNmZ19jc2thX21iaXN0M19ycCAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICBjZmdfY3NrYV9tYmlzdDRfcnAgICAgICAgICAgICAgICAgICAgICA7CisKK3dpcmUgWzMxOjBdICAgICAgICAgICAgICAgICAgICBmdXNlX21oYXJ0aWRfcnAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIFJlcGVhdGVyCit3aXJlIFsxNTowXSAgICAgICAgICAgICAgICAgICAgaXJxX2xpbmVzX3JwICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBSZXBlYXRlcgord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvZnRfaXJxX3JwICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gUmVwZWF0ZXIKKword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfcmlzY19ycCAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX3FzcGlfcnAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa191YXJ0X3JwICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfcGlubXV4X3JwICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX21iaXN0MV9ycCAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19tYmlzdDJfcnAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfbWJpc3QzX3JwICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX21iaXN0NF9ycCAgICAgICAgICAgICAgICAgICAgICA7CisKKy8vIFByb2dhbW1hYmxlIENsb2NrIFNrZXcgaW5zZXJ0ZWQgc2lnbmFscword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfd2lfc2tldyAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gY2xvY2sgZm9yIHdpc2hib25lIGludGVyY29ubmVjdCB3aXRoIGNsb2NrIHNrZXcKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX3Jpc2N2X3NrZXcgICAgICAgICAgICAgICAgICAgICA7IC8vIGNsb2NrIGZvciByaXNjdiB3aXRoIGNsb2NrIHNrZXcKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX3VhcnRfc2tldyAgICAgICAgICAgICAgICAgICAgICA7IC8vIGNsb2NrIGZvciB1YXJ0IHdpdGggY2xvY2sgc2tldword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfc3BpX3NrZXcgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gY2xvY2sgZm9yIHNwaSB3aXRoIGNsb2NrIHNrZXcKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX2dsYmxfc2tldyAgICAgICAgICAgICAgICAgICAgICA7IC8vIGNsb2NrIGZvciBnbG9iYWwgcmVnIHdpdGggY2xvY2sgc2tldword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfd2hfc2tldyAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gY2xvY2sgZm9yIGdsb2JhbCByZWcKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX21iaXN0X3NrZXcgICAgICAgICAgICAgICAgICAgICA7IC8vIGNsb2NrIGZvciBnbG9iYWwgcmVnCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19tYmlzdDJfc2tldyAgICAgICAgICAgICAgICAgICAgOyAvLyBjbG9jayBmb3IgZ2xvYmFsIHJlZword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfbWJpc3QzX3NrZXcgICAgICAgICAgICAgICAgICAgIDsgLy8gY2xvY2sgZm9yIGdsb2JhbCByZWcKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX21iaXN0NF9za2V3ICAgICAgICAgICAgICAgICAgICA7IC8vIGNsb2NrIGZvciBnbG9iYWwgcmVnCisKKworCit3aXJlIFszMTowXSAgICAgICAgICAgICAgICAgICAgc3BpX2RlYnVnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSBbMzE6MF0gICAgICAgICAgICAgICAgICAgIHBpbm11eF9kZWJ1ZyAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgWzYzOjBdICAgICAgICAgICAgICAgICAgICByaXNjdl9kZWJ1ZyAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CisKKy8vIFNGTEFTSCBJL0YKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBzZmxhc2hfc2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgc2ZsYXNoX3NzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIHNmbGFzaF9vZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICBzZmxhc2hfZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgc2ZsYXNoX2RpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOworCisvLyBTU1JBTSBJL0YKKy8vd2lyZSAgICAgICAgICAgICAgICAgICAgICAgICBzc3JhbV9zY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CisvL3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgc3NyYW1fc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOworLy93aXJlICAgICAgICAgICAgICAgICAgICAgICAgIHNzcmFtX29lbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKKy8vd2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICBzc3JhbV9kbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CisvL3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgc3NyYW1fZGkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOworCisvLyBVU0IgSS9GCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiX2RwX28gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9kbl9vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2Jfb2VuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiX2RwX2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9kbl9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKKworLy8gVUFSVCBJL0YKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB1YXJ0X3R4ZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFydF9yeGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOworCisvLyBJMkNNIEkvRgord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGkyY21fY2xrX28gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBpMmNtX2Nsa19pICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJjbV9jbGtfb2VuICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGkyY21fZGF0YV9vZW4gICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBpMmNtX2RhdGFfbyAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJjbV9kYXRhX2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgOworCisvLyBTUEkgTUFTVEVSCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BpbV9zY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwaW1fc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGltX21pc28gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BpbV9tb3NpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOworCit3aXJlIFs3OjBdICAgICAgICAgICAgICAgICAgICAgc2FyMmRhYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuYWxvZ19kYWNfb3V0ICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWxzZTFtX21jbGsgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgaF9yZXNldF9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOworCitgaWZuZGVmIFNDUjFfVENNX01FTQorLy8gU1JBTS0wIFBPUlQtMCAtIERNRU0gSS9GCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JhbTBfY2xrMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBDTEsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmFtMF9jc2IwICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIENTIword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYW0wX3dlYjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gV0UjCit3aXJlICAgWzg6MF0gICAgICAgICAgICAgICAgICAgc3JhbTBfYWRkcjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBBZGRyZXNzCit3aXJlICAgWzM6MF0gICAgICAgICAgICAgICAgICAgc3JhbTBfd21hc2swICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBXTUFTSyMKK3dpcmUgICBbMzE6MF0gICAgICAgICAgICAgICAgICBzcmFtMF9kaW4wICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIFdyaXRlIERhdGEKK3dpcmUgICBbMzE6MF0gICAgICAgICAgICAgICAgICBzcmFtMF9kb3V0MCAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIFJlYWQgRGF0YQorCisvLyBTUkFNLTAgUE9SVC0xLCBJTUVNIEkvRgord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYW0wX2NsazEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gQ0xLCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JhbTBfY3NiMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBDUyMKK3dpcmUgIFs4OjBdICAgICAgICAgICAgICAgICAgICBzcmFtMF9hZGRyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIEFkZHJlc3MKK3dpcmUgIFszMTowXSAgICAgICAgICAgICAgICAgICBzcmFtMF9kb3V0MSAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIFJlYWQgRGF0YQorCisvLyBTUkFNLTEgUE9SVC0wIC0gRE1FTSBJL0YKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmFtMV9jbGswICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIENMSword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYW0xX2NzYjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gQ1MjCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JhbTFfd2ViMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBXRSMKK3dpcmUgICBbODowXSAgICAgICAgICAgICAgICAgICBzcmFtMV9hZGRyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIEFkZHJlc3MKK3dpcmUgICBbMzowXSAgICAgICAgICAgICAgICAgICBzcmFtMV93bWFzazAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIFdNQVNLIword2lyZSAgIFszMTowXSAgICAgICAgICAgICAgICAgIHNyYW0xX2RpbjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gV3JpdGUgRGF0YQord2lyZSAgIFszMTowXSAgICAgICAgICAgICAgICAgIHNyYW0xX2RvdXQwICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gUmVhZCBEYXRhCisKKy8vIFNSQU0tMSBQT1JULTEsIElNRU0gSS9GCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JhbTFfY2xrMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBDTEsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmFtMV9jc2IxICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIENTIword2lyZSAgWzg6MF0gICAgICAgICAgICAgICAgICAgIHNyYW0xX2FkZHIxICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gQWRkcmVzcword2lyZSAgWzMxOjBdICAgICAgICAgICAgICAgICAgIHNyYW0xX2RvdXQxICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gUmVhZCBEYXRhCisKK2BlbmRpZgorCisvLyBTUElNIEkvRgord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzcGltX3NjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gY2xvY2sgb3V0Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NwaW1fc28gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBzZXJpYWwgZGF0YSBvdXQKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBzc3BpbV9zaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIHNlcmlhbCBkYXRhIGluCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NwaW1fc3NuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBjc19uCisKKword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9pbnRyX28gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBpMmNtX2ludHJfbyAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIFVBUlQgTWFzdGVyIEkvRgorLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB1YXJ0bV9yeGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFydG1fdHhkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEJJU1QgSS9GCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X2VuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9ydW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpc3RfbG9hZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKKword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpc3Rfc2RpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X3NoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9zZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOworCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9kb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGJpc3RfZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICBiaXN0X2NvcnJlY3QgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgYmlzdF9lcnJvcl9jbnQwICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGJpc3RfZXJyb3JfY250MSAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICBiaXN0X2Vycm9yX2NudDIgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgYmlzdF9lcnJvcl9jbnQzICAgICAgICAgICAgICAgICAgICAgICAgOworCisvLyBXaXRoIFJlcGVhdGVyIEJ1ZmZlcgord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpc3RfZW5fcnAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X3J1bl9ycCAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9sb2FkX3JwICAgICAgICAgICAgICAgICAgICAgICAgICAgOworCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9zZGlfcnAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpc3Rfc2hpZnRfcnAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X3Nkb19ycCAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CisKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X2RvbmVfcnAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgYmlzdF9lcnJvcl9ycCAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGJpc3RfY29ycmVjdF9ycCAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICBiaXN0X2Vycm9yX2NudDBfcnAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgYmlzdF9lcnJvcl9jbnQxX3JwICAgICAgICAgICAgICAgICAgICAgOword2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGJpc3RfZXJyb3JfY250Ml9ycCAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICBiaXN0X2Vycm9yX2NudDNfcnAgICAgICAgICAgICAgICAgICAgICA7CisKKy8vIHRvd2FyZHMgbWVtb3J5IE1CSVNUMQorLy8gUE9SVC1BCit3aXJlICAgW0JJU1RfTk9fU1JBTS0xOjBdICAgICAgbWVtX2Nsa19hICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgIFtCSVNUMV9BRERSX1dELTE6Ml0gICAgIG1lbTBfYWRkcl9hICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICBbQklTVDFfQUREUl9XRC0xOjJdICAgICBtZW0xX2FkZHJfYSAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgW0JJU1QxX0FERFJfV0QtMToyXSAgICAgbWVtMl9hZGRyX2EgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgIFtCSVNUMV9BRERSX1dELTE6Ml0gICAgIG1lbTNfYWRkcl9hICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICBbQklTVF9OT19TUkFNLTE6MF0gICAgICBtZW1fY2VuX2EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgW0JJU1RfTk9fU1JBTS0xOjBdICAgICAgbWVtX3dlYl9hICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSBbQklTVF9EQVRBX1dELzgtMTowXSAgICAgIG1lbTBfbWFza19hICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgW0JJU1RfREFUQV9XRC84LTE6MF0gICAgICBtZW0xX21hc2tfYSAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlIFtCSVNUX0RBVEFfV0QvOC0xOjBdICAgICAgbWVtMl9tYXNrX2EgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSBbQklTVF9EQVRBX1dELzgtMTowXSAgICAgIG1lbTNfbWFza19hICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICBbQklTVF9EQVRBX1dELTE6MF0gICAgICBtZW0wX2Rpbl9hICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgW0JJU1RfREFUQV9XRC0xOjBdICAgICAgbWVtMV9kaW5fYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgIG1lbTJfZGluX2EgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICBbQklTVF9EQVRBX1dELTE6MF0gICAgICBtZW0zX2Rpbl9hICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgW0JJU1RfREFUQV9XRC0xOjBdICAgICAgbWVtMF9kb3V0X2EgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgIG1lbTFfZG91dF9hICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICBbQklTVF9EQVRBX1dELTE6MF0gICAgICBtZW0yX2RvdXRfYSAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgW0JJU1RfREFUQV9XRC0xOjBdICAgICAgbWVtM19kb3V0X2EgICAgICAgICAgICAgICAgICAgICAgICAgICAgOworCisvLyBQT1JULUIKK3dpcmUgW0JJU1RfTk9fU1JBTS0xOjBdICAgICAgICBtZW1fY2xrX2IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlIFtCSVNUX05PX1NSQU0tMTowXSAgICAgICAgbWVtX2Nlbl9iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSBbQklTVDFfQUREUl9XRC0xOjJdICAgICAgIG1lbTBfYWRkcl9iICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgW0JJU1QxX0FERFJfV0QtMToyXSAgICAgICBtZW0xX2FkZHJfYiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlIFtCSVNUMV9BRERSX1dELTE6Ml0gICAgICAgbWVtMl9hZGRyX2IgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSBbQklTVDFfQUREUl9XRC0xOjJdICAgICAgIG1lbTNfYWRkcl9iICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKKword2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIHNwaV9jc24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBDbG9jayBTa2V3IEN0cmwKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2Fzc2lnbiBjZmdfY3NrYV93aSAgICAgPSBjZmdfY2xrX2N0cmwxWzM6MF07Cithc3NpZ24gY2ZnX2Nza2Ffd2ggICAgID0gY2ZnX2Nsa19jdHJsMVs3OjRdOworYXNzaWduIGNmZ19jc2thX3Jpc2N2ICA9IGNmZ19jbGtfY3RybDFbMTE6OF07Cithc3NpZ24gY2ZnX2Nza2FfcXNwaSAgICA9IGNmZ19jbGtfY3RybDFbMTU6MTJdOworYXNzaWduIGNmZ19jc2thX3VhcnQgICA9IGNmZ19jbGtfY3RybDFbMTk6MTZdOworYXNzaWduIGNmZ19jc2thX3Bpbm11eCA9IGNmZ19jbGtfY3RybDFbMjM6MjBdOworYXNzaWduIGNmZ19jc2thX3FzcGlfY28gID0gY2ZnX2Nsa19jdHJsMVsyNzoyNF07CisKK2Fzc2lnbiAgY2ZnX2Nza2FfbWJpc3QxICAgPSBjZmdfY2xrX2N0cmwyWzM6MF07Cithc3NpZ24gIGNmZ19jc2thX21iaXN0MiAgID0gY2ZnX2Nsa19jdHJsMls3OjRdOworYXNzaWduICBjZmdfY3NrYV9tYmlzdDMgICA9IGNmZ19jbGtfY3RybDJbMTE6OF07Cithc3NpZ24gIGNmZ19jc2thX21iaXN0NCAgID0gY2ZnX2Nsa19jdHJsMlsxNToxMl07Cithc3NpZ24gIGRjYWNoZV9yZW1hcCAgICAgID0gY2ZnX2Nsa19jdHJsMlsyNzoyNF07Cithc3NpZ24gIGJvb3RfcmVtYXAgICAgICAgID0gY2ZnX2Nsa19jdHJsMlszMToyOF07CisKKy8vYXNzaWduIGxhX2RhdGFfb3V0ICAgID0ge3Jpc2N2X2RlYnVnLHNwaV9kZWJ1ZyxzZHJhbV9kZWJ1Z307Cithc3NpZ24gbGFfZGF0YV9vdXRbMTI3OjBdICAgID0ge3Bpbm11eF9kZWJ1ZyxzcGlfZGVidWcscmlzY3ZfZGVidWd9OworCisvL2Nsa19idWYgdV9idWYxX3diX3JzdG4gICguY2xrX2kod2JkX2ludF9yc3RfbiksLmNsa19vKHdiZF9pbnQxX3JzdF9uKSk7CisvL2Nsa19idWYgdV9idWYyX3diX3JzdG4gICguY2xrX2kod2JkX2ludDFfcnN0X24pLC5jbGtfbyh3YmRfaW50Ml9yc3RfbikpOworLy8KKy8vY2xrX2J1ZiB1X2J1ZjFfd2JjbGsgICAgKC5jbGtfaSh3YmRfY2xrX2ludCksLmNsa19vKHdiZF9jbGtfaW50MSkpOworLy9jbGtfYnVmIHVfYnVmMl93YmNsayAgICAoLmNsa19pKHdiZF9jbGtfaW50MSksLmNsa19vKHdiZF9jbGtfaW50MikpOworCit3Yl9ob3N0IHVfd2JfaG9zdCgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgICAgICAgIC52Y2NkMSAgICAgICAgICAgICAgKHZjY2QxICAgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgICAgICAgIC52c3NkMSAgICAgICAgICAgICAgKHZzc2QxICAgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisgICAgICAgICAgLnVzZXJfY2xvY2sxICAgICAgICAod2JfY2xrX2kgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC51c2VyX2Nsb2NrMiAgICAgICAgKHVzZXJfY2xvY2syICAgICAgICAgICAgICAgICAgKSwKKworICAgICAgICAgIC5jcHVfY2xrICAgICAgICAgICAgKGNwdV9jbGsgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAucnRjX2NsayAgICAgICAgICAgIChydGNfY2xrICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnVzYl9jbGsgICAgICAgICAgICAodXNiX2NsayAgICAgICAgICAgICAgICAgICAgICApLAorCisgICAgICAgICAgLndiZF9pbnRfcnN0X24gICAgICAod2JkX2ludF9yc3RfbiAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5jcHVfcnN0X24gICAgICAgICAgKGNwdV9yc3RfbiAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAucXNwaW1fcnN0X24gICAgICAgIChxc3BpbV9yc3RfbiAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnNzcGltX3JzdF9uICAgICAgICAoc3NwaW1fcnN0X24gICAgICAgICAgICAgICAgICApLCAvLyBzcGkgcmVzZXQKKyAgICAgICAgICAudWFydF9yc3RfbiAgICAgICAgICh1YXJ0X3JzdF9uICAgICAgICAgICAgICAgICAgICksIC8vIHVhcnQgcmVzZXQKKyAgICAgICAgICAuaTJjbV9yc3RfbiAgICAgICAgIChpMmNfcnN0X24gICAgICAgICAgICAgICAgICAgICksIC8vIGkyYyByZXNldAorICAgICAgICAgIC51c2JfcnN0X24gICAgICAgICAgKHVzYl9yc3RfbiAgICAgICAgICAgICAgICAgICAgKSwgLy8gdXNiIHJlc2V0CisgICAgICAgICAgLmJpc3RfcnN0X24gICAgICAgICAoYmlzdF9yc3RfbiAgICAgICAgICAgICAgICAgICApLCAvLyBCSVNUIFJlc2V0ICAKKworICAgIC8vIE1hc3RlciBQb3J0CisgICAgICAgICAgLndibV9yc3RfaSAgICAgICAgICAod2JfcnN0X2kgICAgICAgICAgICAgICAgICAgICApLCAgCisgICAgICAgICAgLndibV9jbGtfaSAgICAgICAgICAod2JfY2xrX2kgICAgICAgICAgICAgICAgICAgICApLCAgCisgICAgICAgICAgLndibV9jeWNfaSAgICAgICAgICAod2JzX2N5Y19pICAgICAgICAgICAgICAgICAgICApLCAgCisgICAgICAgICAgLndibV9zdGJfaSAgICAgICAgICAod2JzX3N0Yl9pICAgICAgICAgICAgICAgICAgICApLCAgCisgICAgICAgICAgLndibV9hZHJfaSAgICAgICAgICAod2JzX2Fkcl9pICAgICAgICAgICAgICAgICAgICApLCAgCisgICAgICAgICAgLndibV93ZV9pICAgICAgICAgICAod2JzX3dlX2kgICAgICAgICAgICAgICAgICAgICApLCAgCisgICAgICAgICAgLndibV9kYXRfaSAgICAgICAgICAod2JzX2RhdF9pICAgICAgICAgICAgICAgICAgICApLCAgCisgICAgICAgICAgLndibV9zZWxfaSAgICAgICAgICAod2JzX3NlbF9pICAgICAgICAgICAgICAgICAgICApLCAgCisgICAgICAgICAgLndibV9kYXRfbyAgICAgICAgICAod2JzX2RhdF9vICAgICAgICAgICAgICAgICAgICApLCAgCisgICAgICAgICAgLndibV9hY2tfbyAgICAgICAgICAod2JzX2Fja19vICAgICAgICAgICAgICAgICAgICApLCAgCisgICAgICAgICAgLndibV9lcnJfbyAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLCAgCisKKyAgICAvLyBDbG9jayBTa2VxIEFkanVzdAorICAgICAgICAgIC53YmRfY2xrX2ludCAgICAgICAgKHdiZF9jbGtfaW50ICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAud2JkX2Nsa193aCAgICAgICAgICh3YmRfY2xrX3doICAgICAgICAgICAgICAgICAgICksICAKKyAgICAgICAgICAuY2ZnX2Nza2Ffd2ggICAgICAgIChjZmdfY3NrYV93aCAgICAgICAgICAgICAgICAgICksCisKKyAgICAvLyBTbGF2ZSBQb3J0CisgICAgICAgICAgLndic19jbGtfb3V0ICAgICAgICAod2JkX2Nsa19pbnQgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC53YnNfY2xrX2kgICAgICAgICAgKHdiZF9jbGtfd2ggICAgICAgICAgICAgICAgICAgKSwgIAorICAgICAgICAgIC53YnNfY3ljX28gICAgICAgICAgKHdiZF9pbnRfY3ljX2kgICAgICAgICAgICAgICAgKSwgIAorICAgICAgICAgIC53YnNfc3RiX28gICAgICAgICAgKHdiZF9pbnRfc3RiX2kgICAgICAgICAgICAgICAgKSwgIAorICAgICAgICAgIC53YnNfYWRyX28gICAgICAgICAgKHdiZF9pbnRfYWRyX2kgICAgICAgICAgICAgICAgKSwgIAorICAgICAgICAgIC53YnNfd2VfbyAgICAgICAgICAgKHdiZF9pbnRfd2VfaSAgICAgICAgICAgICAgICAgKSwgIAorICAgICAgICAgIC53YnNfZGF0X28gICAgICAgICAgKHdiZF9pbnRfZGF0X2kgICAgICAgICAgICAgICAgKSwgIAorICAgICAgICAgIC53YnNfc2VsX28gICAgICAgICAgKHdiZF9pbnRfc2VsX2kgICAgICAgICAgICAgICAgKSwgIAorICAgICAgICAgIC53YnNfZGF0X2kgICAgICAgICAgKHdiZF9pbnRfZGF0X28gICAgICAgICAgICAgICAgKSwgIAorICAgICAgICAgIC53YnNfYWNrX2kgICAgICAgICAgKHdiZF9pbnRfYWNrX28gICAgICAgICAgICAgICAgKSwgIAorICAgICAgICAgIC53YnNfZXJyX2kgICAgICAgICAgKHdiZF9pbnRfZXJyX28gICAgICAgICAgICAgICAgKSwgIAorCisgICAgICAgICAgLmNmZ19jbGtfY3RybDEgICAgICAoY2ZnX2Nsa19jdHJsMSAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5jZmdfY2xrX2N0cmwyICAgICAgKGNmZ19jbGtfY3RybDIgICAgICAgICAgICAgICAgKSwKKworICAgICAgICAgIC5sYV9kYXRhX2luICAgICAgICAgKGxhX2RhdGFfaW5bMTc6MF0gICAgICAgICAgICAgKSwKKworICAgICAgICAgIC51YXJ0bV9yeGQgICAgICAgICAgKHVhcnRtX3J4ZCAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAudWFydG1fdHhkICAgICAgICAgICh1YXJ0bV90eGQgICAgICAgICAgICAgICAgICAgICkKKworCisgICAgKTsKKworCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJJU0MgViBDb3JlIGluc3RhbmNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoreWNyMV90b3Bfd2IgdV9yaXNjdl90b3AgKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgICAgLnZjY2QxICAgICAgICAgICAgICAodmNjZDEgICAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgLnZzc2QxICAgICAgICAgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgICAgICAgICAud2JkX2Nsa19pbnQgICAgICAgICh3YmRfY2xrX3Jpc2NfcnAgICAgICAgICAgICAgICksIAorICAgICAgICAgIC5jZmdfY3NrYV9yaXNjdiAgICAgKGNmZ19jc2thX3Jpc2N2X3JwICAgICAgICAgICAgKSwgCisgICAgICAgICAgLndiZF9jbGtfcmlzY3YgICAgICAod2JkX2Nsa19yaXNjdl9za2V3ICAgICAgICAgICApLAorCisgICAgLy8gUmVzZXQKKyAgICAgICAgICAucHdydXBfcnN0X24gICAgICAgICh3YmRfaW50X3JzdF9uICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnJzdF9uICAgICAgICAgICAgICAod2JkX2ludF9yc3RfbiAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5jcHVfcnN0X24gICAgICAgICAgKGNwdV9yc3RfbiAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAucmlzY3ZfZGVidWcgICAgICAgIChyaXNjdl9kZWJ1ZyAgICAgICAgICAgICAgICAgICksCisKKyAgICAvLyBDbG9jaworICAgICAgICAgIC5jb3JlX2NsayAgICAgICAgICAgKGNwdV9jbGsgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAucnRjX2NsayAgICAgICAgICAgIChydGNfY2xrICAgICAgICAgICAgICAgICAgICAgICksCisKKyAgICAvLyBGdXNlcworICAgICAgICAgIC5mdXNlX21oYXJ0aWQgICAgICAgKGZ1c2VfbWhhcnRpZF9ycCAgICAgICAgICAgICAgKSwKKworICAgIC8vIElSUQorICAgICAgICAgIC5pcnFfbGluZXMgICAgICAgICAgKGlycV9saW5lc19ycCAgICAgICAgICAgICAgICAgKSwgCisgICAgICAgICAgLnNvZnRfaXJxICAgICAgICAgICAoc29mdF9pcnFfcnAgICAgICAgICAgICAgICAgICApLCAvLyBUT0RPIC0gSW50ZXJydXB0cworCisgICAgLy8gREZUCisgICAgLy8gICAgLnRlc3RfbW9kZSAgICAgICAgICAoMSdiMCAgICAgICAgICAgICAgICAgICAgICAgICApLCAvLyBNb3ZlZCBpbnNpZGUgSVAKKyAgICAvLyAgICAudGVzdF9yc3RfbiAgICAgICAgICgxJ2IxICAgICAgICAgICAgICAgICAgICAgICAgICksIC8vIE1vdmVkIGluc2lkZSBJUAorCitgaWZuZGVmIFNDUjFfVENNX01FTQorICAgIC8vIFNSQU0tMCBQT1JULTAKKyAgICAgICAgICAuc3JhbTBfY2xrMCAgICAgICAgIChzcmFtMF9jbGswICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnNyYW0wX2NzYjAgICAgICAgICAoc3JhbTBfY3NiMCAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5zcmFtMF93ZWIwICAgICAgICAgKHNyYW0wX3dlYjAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuc3JhbTBfYWRkcjAgICAgICAgIChzcmFtMF9hZGRyMCAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnNyYW0wX3dtYXNrMCAgICAgICAoc3JhbTBfd21hc2swICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5zcmFtMF9kaW4wICAgICAgICAgKHNyYW0wX2RpbjAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuc3JhbTBfZG91dDAgICAgICAgIChzcmFtMF9kb3V0MCAgICAgICAgICAgICAgICAgICksCisgICAgCisgICAgLy8gU1JBTS0wIFBPUlQtMAorICAgICAgICAgIC5zcmFtMF9jbGsxICAgICAgICAgKHNyYW0wX2NsazEgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuc3JhbTBfY3NiMSAgICAgICAgIChzcmFtMF9jc2IxICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnNyYW0wX2FkZHIxICAgICAgICAoc3JhbTBfYWRkcjEgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5zcmFtMF9kb3V0MSAgICAgICAgKHNyYW0wX2RvdXQxICAgICAgICAgICAgICAgICAgKSwKKworICAvLyAgLy8gU1JBTS0xIFBPUlQtMAorICAvLyAgICAgIC5zcmFtMV9jbGswICAgICAgICAgKHNyYW0xX2NsazAgICAgICAgICAgICAgICAgICAgKSwKKyAgLy8gICAgICAuc3JhbTFfY3NiMCAgICAgICAgIChzcmFtMV9jc2IwICAgICAgICAgICAgICAgICAgICksCisgIC8vICAgICAgLnNyYW0xX3dlYjAgICAgICAgICAoc3JhbTFfd2ViMCAgICAgICAgICAgICAgICAgICApLAorICAvLyAgICAgIC5zcmFtMV9hZGRyMCAgICAgICAgKHNyYW0xX2FkZHIwICAgICAgICAgICAgICAgICAgKSwKKyAgLy8gICAgICAuc3JhbTFfd21hc2swICAgICAgIChzcmFtMV93bWFzazAgICAgICAgICAgICAgICAgICksCisgIC8vICAgICAgLnNyYW0xX2RpbjAgICAgICAgICAoc3JhbTFfZGluMCAgICAgICAgICAgICAgICAgICApLAorICAvLyAgICAgIC5zcmFtMV9kb3V0MCAgICAgICAgKHNyYW0xX2RvdXQwICAgICAgICAgICAgICAgICAgKSwKKyAgLy8gIAorICAvLyAgLy8gU1JBTSBQT1JULTAKKyAgLy8gICAgICAuc3JhbTFfY2xrMSAgICAgICAgIChzcmFtMV9jbGsxICAgICAgICAgICAgICAgICAgICksCisgIC8vICAgICAgLnNyYW0xX2NzYjEgICAgICAgICAoc3JhbTFfY3NiMSAgICAgICAgICAgICAgICAgICApLAorICAvLyAgICAgIC5zcmFtMV9hZGRyMSAgICAgICAgKHNyYW0xX2FkZHIxICAgICAgICAgICAgICAgICAgKSwKKyAgLy8gICAgICAuc3JhbTFfZG91dDEgICAgICAgIChzcmFtMV9kb3V0MSAgICAgICAgICAgICAgICAgICksCitgZW5kaWYKKyAgICAKKyAgICAgICAgICAud2JfcnN0X24gICAgICAgICAgICh3YmRfaW50X3JzdF9uICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLndiX2NsayAgICAgICAgICAgICAod2JkX2Nsa19yaXNjdl9za2V3ICAgICAgICAgICApLAorCisgICAgLy8gSW5zdHJ1Y3Rpb24gY2FjaGUgbWVtb3J5IGludGVyZmFjZQorICAgICAgICAgIC53Yl9pY2FjaGVfc3RiX28gICAgKHdiZF9yaXNjdl9pY2FjaGVfc3RiX2kgICAgICAgKSwKKyAgICAgICAgICAud2JfaWNhY2hlX2Fkcl9vICAgICh3YmRfcmlzY3ZfaWNhY2hlX2Fkcl9pICAgICAgICksCisgICAgICAgICAgLndiX2ljYWNoZV93ZV9vICAgICAod2JkX3Jpc2N2X2ljYWNoZV93ZV9pICAgICAgICApLCAKKyAgICAgICAgICAud2JfaWNhY2hlX3NlbF9vICAgICh3YmRfcmlzY3ZfaWNhY2hlX3NlbF9pICAgICAgICksCisgICAgICAgICAgLndiX2ljYWNoZV9ibF9vICAgICAod2JkX3Jpc2N2X2ljYWNoZV9ibF9pICAgICAgICApLAorICAgICAgICAgIC53Yl9pY2FjaGVfYnJ5X28gICAgKHdiZF9yaXNjdl9pY2FjaGVfYnJ5X2kgICAgICAgKSwKKyAgICAgICAgICAud2JfaWNhY2hlX2RhdF9pICAgICh3YmRfcmlzY3ZfaWNhY2hlX2RhdF9vICAgICAgICksCisgICAgICAgICAgLndiX2ljYWNoZV9hY2tfaSAgICAod2JkX3Jpc2N2X2ljYWNoZV9hY2tfbyAgICAgICApLAorICAgICAgICAgIC53Yl9pY2FjaGVfbGFja19pICAgKHdiZF9yaXNjdl9pY2FjaGVfbGFja19vICAgICAgKSwKKyAgICAgICAgICAud2JfaWNhY2hlX2Vycl9pICAgICh3YmRfcmlzY3ZfaWNhY2hlX2Vycl9vICAgICAgICksCisKKyAgICAgICAgICAuaWNhY2hlX21lbV9jbGswICAgIChpY2FjaGVfbWVtX2NsazAgICAgICAgICAgICAgICksIC8vIENMSworICAgICAgICAgIC5pY2FjaGVfbWVtX2NzYjAgICAgKGljYWNoZV9tZW1fY3NiMCAgICAgICAgICAgICAgKSwgLy8gQ1MjCisgICAgICAgICAgLmljYWNoZV9tZW1fd2ViMCAgICAoaWNhY2hlX21lbV93ZWIwICAgICAgICAgICAgICApLCAvLyBXRSMKKyAgICAgICAgICAuaWNhY2hlX21lbV9hZGRyMCAgIChpY2FjaGVfbWVtX2FkZHIwICAgICAgICAgICAgICksIC8vIEFkZHJlc3MKKyAgICAgICAgICAuaWNhY2hlX21lbV93bWFzazAgIChpY2FjaGVfbWVtX3dtYXNrMCAgICAgICAgICAgICksIC8vIFdNQVNLIworICAgICAgICAgIC5pY2FjaGVfbWVtX2RpbjAgICAgKGljYWNoZV9tZW1fZGluMCAgICAgICAgICAgICAgKSwgLy8gV3JpdGUgRGF0YQorLy8gICAgICAgIC5pY2FjaGVfbWVtX2RvdXQwICAgKGljYWNoZV9tZW1fZG91dDAgICAgICAgICAgICAgKSwgLy8gUmVhZCBEYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAuaWNhY2hlX21lbV9jbGsxICAgIChpY2FjaGVfbWVtX2NsazEgICAgICAgICAgICAgICksIC8vIENMSworICAgICAgICAgIC5pY2FjaGVfbWVtX2NzYjEgICAgKGljYWNoZV9tZW1fY3NiMSAgICAgICAgICAgICAgKSwgLy8gQ1MjCisgICAgICAgICAgLmljYWNoZV9tZW1fYWRkcjEgICAoaWNhY2hlX21lbV9hZGRyMSAgICAgICAgICAgICApLCAvLyBBZGRyZXNzCisgICAgICAgICAgLmljYWNoZV9tZW1fZG91dDEgICAoaWNhY2hlX21lbV9kb3V0MSAgICAgICAgICAgICApLCAvLyBSZWFkIERhdGEKKworICAgIC8vIERhdGEgY2FjaGUgbWVtb3J5IGludGVyZmFjZQorICAgICAgICAgIC53Yl9kY2FjaGVfc3RiX28gICAgKHdiZF9yaXNjdl9kY2FjaGVfc3RiX2kgICAgICAgKSwKKyAgICAgICAgICAud2JfZGNhY2hlX2Fkcl9vICAgICh3YmRfcmlzY3ZfZGNhY2hlX2Fkcl9pICAgICAgICksCisgICAgICAgICAgLndiX2RjYWNoZV93ZV9vICAgICAod2JkX3Jpc2N2X2RjYWNoZV93ZV9pICAgICAgICApLCAKKyAgICAgICAgICAud2JfZGNhY2hlX2RhdF9vICAgICh3YmRfcmlzY3ZfZGNhY2hlX2RhdF9pICAgICAgICksCisgICAgICAgICAgLndiX2RjYWNoZV9zZWxfbyAgICAod2JkX3Jpc2N2X2RjYWNoZV9zZWxfaSAgICAgICApLAorICAgICAgICAgIC53Yl9kY2FjaGVfYmxfbyAgICAgKHdiZF9yaXNjdl9kY2FjaGVfYmxfaSAgICAgICAgKSwKKyAgICAgICAgICAud2JfZGNhY2hlX2JyeV9vICAgICh3YmRfcmlzY3ZfZGNhY2hlX2JyeV9pICAgICAgICksCisgICAgICAgICAgLndiX2RjYWNoZV9kYXRfaSAgICAod2JkX3Jpc2N2X2RjYWNoZV9kYXRfbyAgICAgICApLAorICAgICAgICAgIC53Yl9kY2FjaGVfYWNrX2kgICAgKHdiZF9yaXNjdl9kY2FjaGVfYWNrX28gICAgICAgKSwKKyAgICAgICAgICAud2JfZGNhY2hlX2xhY2tfaSAgICh3YmRfcmlzY3ZfZGNhY2hlX2xhY2tfbyAgICAgICksCisgICAgICAgICAgLndiX2RjYWNoZV9lcnJfaSAgICAod2JkX3Jpc2N2X2RjYWNoZV9lcnJfbyAgICAgICApLAorCisgICAgICAgICAgLmRjYWNoZV9tZW1fY2xrMCAgICAoZGNhY2hlX21lbV9jbGswICAgICAgICAgICAgICApLCAvLyBDTEsKKyAgICAgICAgICAuZGNhY2hlX21lbV9jc2IwICAgIChkY2FjaGVfbWVtX2NzYjAgICAgICAgICAgICAgICksIC8vIENTIworICAgICAgICAgIC5kY2FjaGVfbWVtX3dlYjAgICAgKGRjYWNoZV9tZW1fd2ViMCAgICAgICAgICAgICAgKSwgLy8gV0UjCisgICAgICAgICAgLmRjYWNoZV9tZW1fYWRkcjAgICAoZGNhY2hlX21lbV9hZGRyMCAgICAgICAgICAgICApLCAvLyBBZGRyZXNzCisgICAgICAgICAgLmRjYWNoZV9tZW1fd21hc2swICAoZGNhY2hlX21lbV93bWFzazAgICAgICAgICAgICApLCAvLyBXTUFTSyMKKyAgICAgICAgICAuZGNhY2hlX21lbV9kaW4wICAgIChkY2FjaGVfbWVtX2RpbjAgICAgICAgICAgICAgICksIC8vIFdyaXRlIERhdGEKKyAgICAgICAgICAuZGNhY2hlX21lbV9kb3V0MCAgIChkY2FjaGVfbWVtX2RvdXQwICAgICAgICAgICAgICksIC8vIFJlYWQgRGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgLmRjYWNoZV9tZW1fY2xrMSAgICAoZGNhY2hlX21lbV9jbGsxICAgICAgICAgICAgICApLCAvLyBDTEsKKyAgICAgICAgICAuZGNhY2hlX21lbV9jc2IxICAgIChkY2FjaGVfbWVtX2NzYjEgICAgICAgICAgICAgICksIC8vIENTIworICAgICAgICAgIC5kY2FjaGVfbWVtX2FkZHIxICAgKGRjYWNoZV9tZW1fYWRkcjEgICAgICAgICAgICAgKSwgLy8gQWRkcmVzcworICAgICAgICAgIC5kY2FjaGVfbWVtX2RvdXQxICAgKGRjYWNoZV9tZW1fZG91dDEgICAgICAgICAgICAgKSwgLy8gUmVhZCBEYXRhCisKKworICAgIC8vIERhdGEgbWVtb3J5IGludGVyZmFjZQorICAgICAgICAgIC53YmRfZG1lbV9zdGJfbyAgICAgKHdiZF9yaXNjdl9kbWVtX3N0Yl9pICAgICAgICAgKSwKKyAgICAgICAgICAud2JkX2RtZW1fYWRyX28gICAgICh3YmRfcmlzY3ZfZG1lbV9hZHJfaSAgICAgICAgICksCisgICAgICAgICAgLndiZF9kbWVtX3dlX28gICAgICAod2JkX3Jpc2N2X2RtZW1fd2VfaSAgICAgICAgICApLCAKKyAgICAgICAgICAud2JkX2RtZW1fZGF0X28gICAgICh3YmRfcmlzY3ZfZG1lbV9kYXRfaSAgICAgICAgICksCisgICAgICAgICAgLndiZF9kbWVtX3NlbF9vICAgICAod2JkX3Jpc2N2X2RtZW1fc2VsX2kgICAgICAgICApLAorICAgICAgICAgIC53YmRfZG1lbV9kYXRfaSAgICAgKHdiZF9yaXNjdl9kbWVtX2RhdF9vICAgICAgICAgKSwKKyAgICAgICAgICAud2JkX2RtZW1fYWNrX2kgICAgICh3YmRfcmlzY3ZfZG1lbV9hY2tfbyAgICAgICAgICksCisgICAgICAgICAgLndiZF9kbWVtX2Vycl9pICAgICAod2JkX3Jpc2N2X2RtZW1fZXJyX28gICAgICAgICApIAorKTsKKworYGlmbmRlZiBTQ1IxX1RDTV9NRU0KK3NreTEzMF9zcmFtXzJrYnl0ZV8xcncxcl8zMng1MTJfOCB1X3RzcmFtMF8ya2IoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgICAudmNjZDEgICAgICAgICAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgICAgICAgICksLy8gYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgLnZzc2QxICAgICAgICAgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICAgICApLC8vIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisvLyBQb3J0IDA6IFJXCisgICAgICAgICAgLmNsazAgICAgICAgICAgICAgICAoc3JhbTBfY2xrMCAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5jc2IwICAgICAgICAgICAgICAgKHNyYW0wX2NzYjAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAud2ViMCAgICAgICAgICAgICAgIChzcmFtMF93ZWIwICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLndtYXNrMCAgICAgICAgICAgICAoc3JhbTBfd21hc2swICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5hZGRyMCAgICAgICAgICAgICAgKHNyYW0wX2FkZHIwICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuZGluMCAgICAgICAgICAgICAgIChzcmFtMF9kaW4wICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmRvdXQwICAgICAgICAgICAgICAoc3JhbTBfZG91dDAgICAgICAgICAgICAgICAgICApLAorLy8gUG9ydCAxOiBSCisgICAgICAgICAgLmNsazEgICAgICAgICAgICAgICAoc3JhbTBfY2xrMSAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5jc2IxICAgICAgICAgICAgICAgKHNyYW0wX2NzYjEgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuYWRkcjEgICAgICAgICAgICAgIChzcmFtMF9hZGRyMSAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmRvdXQxICAgICAgICAgICAgICAoc3JhbTBfZG91dDEgICAgICAgICAgICAgICAgICApCisgICk7CisKKy8qKioKK3NreTEzMF9zcmFtXzJrYnl0ZV8xcncxcl8zMng1MTJfOCB1X3RzcmFtMV8ya2IoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgICAudmNjZDEgICAgICAgICAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICAgICAgICAudnNzZDEgICAgICAgICAgICAgICh2c3NkMSAgICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorLy8gUG9ydCAwOiBSVworICAgICAgICAgIC5jbGswICAgICAgICAgICAgICAgKHNyYW0xX2NsazAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuY3NiMCAgICAgICAgICAgICAgIChzcmFtMV9jc2IwICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLndlYjAgICAgICAgICAgICAgICAoc3JhbTFfd2ViMCAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC53bWFzazAgICAgICAgICAgICAgKHNyYW0xX3dtYXNrMCAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuYWRkcjAgICAgICAgICAgICAgIChzcmFtMV9hZGRyMCAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmRpbjAgICAgICAgICAgICAgICAoc3JhbTFfZGluMCAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5kb3V0MCAgICAgICAgICAgICAgKHNyYW0xX2RvdXQwICAgICAgICAgICAgICAgICAgKSwKKy8vIFBvcnQgMTogUgorICAgICAgICAgIC5jbGsxICAgICAgICAgICAgICAgKHNyYW0xX2NsazEgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuY3NiMSAgICAgICAgICAgICAgIChzcmFtMV9jc2IxICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmFkZHIxICAgICAgICAgICAgICAoc3JhbTFfYWRkcjEgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5kb3V0MSAgICAgICAgICAgICAgKHNyYW0xX2RvdXQxICAgICAgICAgICAgICAgICAgKQorICApOworKioqLworYGVuZGlmCisKKworc2t5MTMwX3NyYW1fMmtieXRlXzFydzFyXzMyeDUxMl84IHVfaWNhY2hlXzJrYigKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgICAgICAgIC52Y2NkMSAgICAgICAgICAgICAgKHZjY2QxICAgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgICAgICAgIC52c3NkMSAgICAgICAgICAgICAgKHZzc2QxICAgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisvLyBQb3J0IDA6IFJXCisgICAgICAgICAgLmNsazAgICAgICAgICAgICAgICAoaWNhY2hlX21lbV9jbGswICAgICAgICAgICAgICApLAorICAgICAgICAgIC5jc2IwICAgICAgICAgICAgICAgKGljYWNoZV9tZW1fY3NiMCAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAud2ViMCAgICAgICAgICAgICAgIChpY2FjaGVfbWVtX3dlYjAgICAgICAgICAgICAgICksCisgICAgICAgICAgLndtYXNrMCAgICAgICAgICAgICAoaWNhY2hlX21lbV93bWFzazAgICAgICAgICAgICApLAorICAgICAgICAgIC5hZGRyMCAgICAgICAgICAgICAgKGljYWNoZV9tZW1fYWRkcjAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuZGluMCAgICAgICAgICAgICAgIChpY2FjaGVfbWVtX2RpbjAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmRvdXQwICAgICAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAorLy8gUG9ydCAxOiBSCisgICAgICAgICAgLmNsazEgICAgICAgICAgICAgICAoaWNhY2hlX21lbV9jbGsxICAgICAgICAgICAgICApLAorICAgICAgICAgIC5jc2IxICAgICAgICAgICAgICAgKGljYWNoZV9tZW1fY3NiMSAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuYWRkcjEgICAgICAgICAgICAgIChpY2FjaGVfbWVtX2FkZHIxICAgICAgICAgICAgICksCisgICAgICAgICAgLmRvdXQxICAgICAgICAgICAgICAoaWNhY2hlX21lbV9kb3V0MSAgICAgICAgICAgICApCisgICk7CisKK3NreTEzMF9zcmFtXzJrYnl0ZV8xcncxcl8zMng1MTJfOCB1X2RjYWNoZV8ya2IoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgICAudmNjZDEgICAgICAgICAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICAgICAgICAudnNzZDEgICAgICAgICAgICAgICh2c3NkMSAgICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorLy8gUG9ydCAwOiBSVworICAgICAgICAgIC5jbGswICAgICAgICAgICAgICAgKGRjYWNoZV9tZW1fY2xrMCAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuY3NiMCAgICAgICAgICAgICAgIChkY2FjaGVfbWVtX2NzYjAgICAgICAgICAgICAgICksCisgICAgICAgICAgLndlYjAgICAgICAgICAgICAgICAoZGNhY2hlX21lbV93ZWIwICAgICAgICAgICAgICApLAorICAgICAgICAgIC53bWFzazAgICAgICAgICAgICAgKGRjYWNoZV9tZW1fd21hc2swICAgICAgICAgICAgKSwKKyAgICAgICAgICAuYWRkcjAgICAgICAgICAgICAgIChkY2FjaGVfbWVtX2FkZHIwICAgICAgICAgICAgICksCisgICAgICAgICAgLmRpbjAgICAgICAgICAgICAgICAoZGNhY2hlX21lbV9kaW4wICAgICAgICAgICAgICApLAorICAgICAgICAgIC5kb3V0MCAgICAgICAgICAgICAgKGRjYWNoZV9tZW1fZG91dDAgICAgICAgICAgICAgKSwKKy8vIFBvcnQgMTogUgorICAgICAgICAgIC5jbGsxICAgICAgICAgICAgICAgKGRjYWNoZV9tZW1fY2xrMSAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuY3NiMSAgICAgICAgICAgICAgIChkY2FjaGVfbWVtX2NzYjEgICAgICAgICAgICAgICksCisgICAgICAgICAgLmFkZHIxICAgICAgICAgICAgICAoZGNhY2hlX21lbV9hZGRyMSAgICAgICAgICAgICApLAorICAgICAgICAgIC5kb3V0MSAgICAgICAgICAgICAgKGRjYWNoZV9tZW1fZG91dDEgICAgICAgICAgICAgKQorICApOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1BJIE1hc3RlcgorKiBUaGlzIGlzIGltcGxlbWVudGF0aW9uIG9mIGFuIFNQSSBtYXN0ZXIgdGhhdCBpcyBjb250cm9sbGVkIHZpYSBhbiBBWEkgYnVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuIAorKiBJdCBoYXMgRklGT3MgZm9yIHRyYW5zbWl0dGluZyBhbmQgcmVjZWl2aW5nIGRhdGEuIAorKiBJdCBzdXBwb3J0cyBib3RoIHRoZSBub3JtYWwgU1BJIG1vZGUgYW5kIFFQSSBtb2RlIHdpdGggNCBkYXRhIGxpbmVzLgorKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitxc3BpbV90b3AKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgKK2BpZm5kZWYgU1lOVEhFU0lTCisgICAgLldCX1dJRFRIICAoV0JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCitgZW5kaWYKKykgdV9xc3BpX21hc3RlcgorKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgICAgLnZjY2QxICAgICAgICAgICAgICAodmNjZDEgICAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgLnZzc2QxICAgICAgICAgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgICAgICAgICAubWNsayAgICAgICAgICAgICAgICh3YmRfY2xrX3NwaSAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnJzdF9uICAgICAgICAgICAgICAocXNwaW1fcnN0X24gICAgICAgICAgICAgICAgICApLAorCisgICAgLy8gQ2xvY2sgU2tldyBBZGp1c3QKKyAgICAgICAgICAuY2ZnX2Nza2Ffc3BfY28gICAgIChjZmdfY3NrYV9xc3BpX2NvX3JwICAgICAgICAgICksCisgICAgICAgICAgLmNmZ19jc2thX3NwaSAgICAgICAoY2ZnX2Nza2FfcXNwaV9ycCAgICAgICAgICAgICApLAorICAgICAgICAgIC53YmRfY2xrX2ludCAgICAgICAgKHdiZF9jbGtfcXNwaV9ycCAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAud2JkX2Nsa19zcGkgICAgICAgICh3YmRfY2xrX3NwaSAgICAgICAgICAgICAgICAgICksCisKKyAgICAgICAgICAud2JkX3N0Yl9pICAgICAgICAgICh3YmRfc3BpbV9zdGJfbyAgICAgICAgICAgICAgICksCisgICAgICAgICAgLndiZF9hZHJfaSAgICAgICAgICAod2JkX3NwaW1fYWRyX28gICAgICAgICAgICAgICApLAorICAgICAgICAgIC53YmRfd2VfaSAgICAgICAgICAgKHdiZF9zcGltX3dlX28gICAgICAgICAgICAgICAgKSwgCisgICAgICAgICAgLndiZF9kYXRfaSAgICAgICAgICAod2JkX3NwaW1fZGF0X28gICAgICAgICAgICAgICApLAorICAgICAgICAgIC53YmRfc2VsX2kgICAgICAgICAgKHdiZF9zcGltX3NlbF9vICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAud2JkX2JsX2kgICAgICAgICAgICh3YmRfc3BpbV9ibF9vICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLndiZF9icnlfaSAgICAgICAgICAod2JkX3NwaW1fYnJ5X28gICAgICAgICAgICAgICApLAorICAgICAgICAgIC53YmRfZGF0X28gICAgICAgICAgKHdiZF9zcGltX2RhdF9pICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAud2JkX2Fja19vICAgICAgICAgICh3YmRfc3BpbV9hY2tfaSAgICAgICAgICAgICAgICksCisgICAgICAgICAgLndiZF9sYWNrX28gICAgICAgICAod2JkX3NwaW1fbGFja19pICAgICAgICAgICAgICApLAorICAgICAgICAgIC53YmRfZXJyX28gICAgICAgICAgKHdiZF9zcGltX2Vycl9pICAgICAgICAgICAgICAgKSwKKworICAgICAgICAgIC5zcGlfZGVidWcgICAgICAgICAgKHNwaV9kZWJ1ZyAgICAgICAgICAgICAgICAgICAgKSwKKworICAgIC8vIFBhZCBJbnRlcmZhY2UKKyAgICAgICAgICAuc3BpX3NkaSAgICAgICAgICAgIChzZmxhc2hfZGkgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnNwaV9jbGsgICAgICAgICAgICAoc2ZsYXNoX3NjayAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5zcGlfY3NuICAgICAgICAgICAgKHNwaV9jc24gICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuc3BpX3NkbyAgICAgICAgICAgIChzZmxhc2hfZG8gICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnNwaV9vZW4gICAgICAgICAgICAoc2ZsYXNoX29lbiAgICAgICAgICAgICAgICAgICApCisKKyk7CisKKworCit3Yl9pbnRlcmNvbm5lY3QgICMoCisJYGlmbmRlZiBTWU5USEVTSVMKKwkgICAgICAgICAuQ0hfQ0xLX1dEICAgICAgICAgICg4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCisJICAgICAgICAgLkNIX0RBVEFfV0QgICAgICAgICAoMTE2ICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIGBlbmRpZgorCSkgdV9pbnRlcmNvbiAoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgICAudmNjZDEgICAgICAgICAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICAgICAgICAudnNzZDEgICAgICAgICAgICAgICh2c3NkMSAgICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorCSAgIC5jaF9jbGtfaW4gICAgICAgICAgKHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19pbnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX2ludCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfaW50LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19pbnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX2ludCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfaW50LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19pbnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX2ludH0gICAgICAgICAgICAgICAgICAgICAgKSwKKwkgICAuY2hfY2xrX291dCAgICAgICAgICh7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfbWJpc3Q0X3JwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19tYmlzdDNfcnAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX21iaXN0Ml9ycCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfbWJpc3QxX3JwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19waW5tdXhfcnAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX3VhcnRfcnAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX3FzcGlfcnAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX3Jpc2NfcnB9ICAgICAgICAgICAgICAgICAgKSwKKwkgICAuY2hfZGF0YV9pbiAgICAoeworCSAgICAgICAgICAgICAgICAgYmlzdF9lcnJvcl9jbnQzWzM6MF0sCisJCQkgYmlzdF9jb3JyZWN0WzNdLAorCQkJIGJpc3RfZXJyb3JbM10sCisKKwkgICAgICAgICAgICAgICAgIGJpc3RfZXJyb3JfY250MlszOjBdLAorCQkJIGJpc3RfY29ycmVjdFsyXSwKKwkJCSBiaXN0X2Vycm9yWzJdLAorCisJICAgICAgICAgICAgICAgICBiaXN0X2Vycm9yX2NudDFbMzowXSwKKwkJCSBiaXN0X2NvcnJlY3RbMV0sCisJCQkgYmlzdF9lcnJvclsxXSwKKworCSAgICAgICAgICAgICAgICAgYmlzdF9lcnJvcl9jbnQwWzM6MF0sCisJCQkgYmlzdF9jb3JyZWN0WzBdLAorCQkJIGJpc3RfZXJyb3JbMF0sCisJCQkgYmlzdF9kb25lLAorCQkJIGJpc3Rfc2RvLAorCQkJIGJpc3Rfc2hpZnQsCisJCQkgYmlzdF9zZGksCisJCQkgYmlzdF9sb2FkLAorCQkJIGJpc3RfcnVuLAorCQkJIGJpc3RfZW4sCisJCQkgCisKKwkgICAgICAgICAgICAgICAgIHNvZnRfaXJxLAorCQkJIGlycV9saW5lc1sxNTowXSwKKwkJCSBmdXNlX21oYXJ0aWRbMzE6MF0sCisKKwkJICAgICAgICAgY2ZnX2Nza2FfbWJpc3Q0WzM6MF0sCisJCSAgICAgICAgIGNmZ19jc2thX21iaXN0M1szOjBdLAorCQkgICAgICAgICBjZmdfY3NrYV9tYmlzdDJbMzowXSwKKwkJICAgICAgICAgY2ZnX2Nza2FfbWJpc3QxWzM6MF0sCisJCQkgY2ZnX2Nza2FfcXNwaV9jb1szOjBdLAorCQkgICAgICAgICBjZmdfY3NrYV9waW5tdXhbMzowXSwKKwkJCSBjZmdfY3NrYV91YXJ0WzM6MF0sCisJCSAgICAgICAgIGNmZ19jc2thX3FzcGlbMzowXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjZmdfY3NrYV9yaXNjdlszOjBdCisJCQkgfSApLAorCSAgICAuY2hfZGF0YV9vdXQgICAoeworCSAgICAgICAgICAgICAgICAgYmlzdF9lcnJvcl9jbnQzX3JwWzM6MF0sCisJCQkgYmlzdF9jb3JyZWN0X3JwWzNdLAorCQkJIGJpc3RfZXJyb3JfcnBbM10sCisKKwkgICAgICAgICAgICAgICAgIGJpc3RfZXJyb3JfY250Ml9ycFszOjBdLAorCQkJIGJpc3RfY29ycmVjdF9ycFsyXSwKKwkJCSBiaXN0X2Vycm9yX3JwWzJdLAorCisJICAgICAgICAgICAgICAgICBiaXN0X2Vycm9yX2NudDFfcnBbMzowXSwKKwkJCSBiaXN0X2NvcnJlY3RfcnBbMV0sCisJCQkgYmlzdF9lcnJvcl9ycFsxXSwKKworCSAgICAgICAgICAgICAgICAgYmlzdF9lcnJvcl9jbnQwX3JwWzM6MF0sCisJCQkgYmlzdF9jb3JyZWN0X3JwWzBdLAorCQkJIGJpc3RfZXJyb3JfcnBbMF0sCisJCQkgYmlzdF9kb25lX3JwLAorCQkJIGJpc3Rfc2RvX3JwLAorCQkJIGJpc3Rfc2hpZnRfcnAsCisJCQkgYmlzdF9zZGlfcnAsCisJCQkgYmlzdF9sb2FkX3JwLAorCQkJIGJpc3RfcnVuX3JwLAorCQkJIGJpc3RfZW5fcnAsCisKKwkgICAgICAgICAgICAgICAgIHNvZnRfaXJxX3JwLAorCQkJIGlycV9saW5lc19ycFsxNTowXSwKKwkJCSBmdXNlX21oYXJ0aWRfcnBbMzE6MF0sCisKKwkJICAgICAgICAgY2ZnX2Nza2FfbWJpc3Q0X3JwWzM6MF0sCisJCSAgICAgICAgIGNmZ19jc2thX21iaXN0M19ycFszOjBdLAorCQkgICAgICAgICBjZmdfY3NrYV9tYmlzdDJfcnBbMzowXSwKKwkJICAgICAgICAgY2ZnX2Nza2FfbWJpc3QxX3JwWzM6MF0sCisJCQkgY2ZnX2Nza2FfcXNwaV9jb19ycFszOjBdLAorCQkgICAgICAgICBjZmdfY3NrYV9waW5tdXhfcnBbMzowXSwKKwkJCSBjZmdfY3NrYV91YXJ0X3JwWzM6MF0sCisJCSAgICAgICAgIGNmZ19jc2thX3FzcGlfcnBbMzowXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjZmdfY3NrYV9yaXNjdl9ycFszOjBdCisgICAgICAgICAgICAgICAgICAgICAgICAgfSksCisgICAgIC8vIENsb2NrIFNrZXcgYWRqdXN0CisJICAgICAgICAgLndiZF9jbGtfaW50ICAgICAgICAod2JkX2Nsa19pbnQgICAgICAgICAgICAgICAgICApLCAKKwkgICAgICAgICAuY2ZnX2Nza2Ffd2kgICAgICAgIChjZmdfY3NrYV93aSAgICAgICAgICAgICAgICAgICksIAorCSAgICAgICAgIC53YmRfY2xrX3dpICAgICAgICAgKHdiZF9jbGtfd2lfc2tldyAgICAgICAgICAgICAgKSwKKworICAgICAgICAgICAgICAgICAuY2xrX2kgICAgICAgICAgICAgICh3YmRfY2xrX3dpX3NrZXcgICAgICAgICAgICAgICksIAorICAgICAgICAgICAgICAgICAucnN0X24gICAgICAgICAgICAgICh3YmRfaW50X3JzdF9uICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgIC5kY2FjaGVfcmVtYXAgICAgICAgKGRjYWNoZV9yZW1hcCAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgLmJvb3RfcmVtYXAgICAgICAgICAoYm9vdF9yZW1hcCAgICAgICAgICAgICAgICAgICApLAorCisgICAgICAgICAvLyBNYXN0ZXIgMCBJbnRlcmZhY2UKKyAgICAgICAgICAubTBfd2JkX2RhdF9pICAgICAgICh3YmRfaW50X2RhdF9pICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLm0wX3diZF9hZHJfaSAgICAgICAod2JkX2ludF9hZHJfaSAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5tMF93YmRfc2VsX2kgICAgICAgKHdiZF9pbnRfc2VsX2kgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAubTBfd2JkX3dlX2kgICAgICAgICh3YmRfaW50X3dlX2kgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLm0wX3diZF9jeWNfaSAgICAgICAod2JkX2ludF9jeWNfaSAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5tMF93YmRfc3RiX2kgICAgICAgKHdiZF9pbnRfc3RiX2kgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAubTBfd2JkX2RhdF9vICAgICAgICh3YmRfaW50X2RhdF9vICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLm0wX3diZF9hY2tfbyAgICAgICAod2JkX2ludF9hY2tfbyAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5tMF93YmRfZXJyX28gICAgICAgKHdiZF9pbnRfZXJyX28gICAgICAgICAgICAgICAgKSwKKyAgICAgICAgIAorICAgICAgICAgLy8gTWFzdGVyIDEgSW50ZXJmYWNlCisgICAgICAgICAgLm0xX3diZF9kYXRfaSAgICAgICAod2JkX3Jpc2N2X2RtZW1fZGF0X2kgICAgICAgICApLAorICAgICAgICAgIC5tMV93YmRfYWRyX2kgICAgICAgKHdiZF9yaXNjdl9kbWVtX2Fkcl9pICAgICAgICAgKSwKKyAgICAgICAgICAubTFfd2JkX3NlbF9pICAgICAgICh3YmRfcmlzY3ZfZG1lbV9zZWxfaSAgICAgICAgICksCisgICAgICAgICAgLm0xX3diZF93ZV9pICAgICAgICAod2JkX3Jpc2N2X2RtZW1fd2VfaSAgICAgICAgICApLAorICAgICAgICAgIC5tMV93YmRfY3ljX2kgICAgICAgKHdiZF9yaXNjdl9kbWVtX3N0Yl9pICAgICAgICAgKSwKKyAgICAgICAgICAubTFfd2JkX3N0Yl9pICAgICAgICh3YmRfcmlzY3ZfZG1lbV9zdGJfaSAgICAgICAgICksCisgICAgICAgICAgLm0xX3diZF9kYXRfbyAgICAgICAod2JkX3Jpc2N2X2RtZW1fZGF0X28gICAgICAgICApLAorICAgICAgICAgIC5tMV93YmRfYWNrX28gICAgICAgKHdiZF9yaXNjdl9kbWVtX2Fja19vICAgICAgICAgKSwKKyAgICAgICAgICAubTFfd2JkX2Vycl9vICAgICAgICh3YmRfcmlzY3ZfZG1lbV9lcnJfbyAgICAgICAgICksCisgICAgICAgICAKKyAgICAgICAgIC8vIE1hc3RlciAyIEludGVyZmFjZQorICAgICAgICAgIC5tMl93YmRfZGF0X2kgICAgICAgKHdiZF9yaXNjdl9kY2FjaGVfZGF0X2kgICAgICAgKSwKKyAgICAgICAgICAubTJfd2JkX2Fkcl9pICAgICAgICh3YmRfcmlzY3ZfZGNhY2hlX2Fkcl9pICAgICAgICksCisgICAgICAgICAgLm0yX3diZF9zZWxfaSAgICAgICAod2JkX3Jpc2N2X2RjYWNoZV9zZWxfaSAgICAgICApLAorICAgICAgICAgIC5tMl93YmRfYmxfaSAgICAgICAgKHdiZF9yaXNjdl9kY2FjaGVfYmxfaSAgICAgICAgKSwKKyAgICAgICAgICAubTJfd2JkX2JyeV9pICAgICAgICh3YmRfcmlzY3ZfZGNhY2hlX2JyeV9pICAgICAgICksCisgICAgICAgICAgLm0yX3diZF93ZV9pICAgICAgICAod2JkX3Jpc2N2X2RjYWNoZV93ZV9pICAgICAgICApLAorICAgICAgICAgIC5tMl93YmRfY3ljX2kgICAgICAgKHdiZF9yaXNjdl9kY2FjaGVfc3RiX2kgICAgICAgKSwKKyAgICAgICAgICAubTJfd2JkX3N0Yl9pICAgICAgICh3YmRfcmlzY3ZfZGNhY2hlX3N0Yl9pICAgICAgICksCisgICAgICAgICAgLm0yX3diZF9kYXRfbyAgICAgICAod2JkX3Jpc2N2X2RjYWNoZV9kYXRfbyAgICAgICApLAorICAgICAgICAgIC5tMl93YmRfYWNrX28gICAgICAgKHdiZF9yaXNjdl9kY2FjaGVfYWNrX28gICAgICAgKSwKKyAgICAgICAgICAubTJfd2JkX2xhY2tfbyAgICAgICh3YmRfcmlzY3ZfZGNhY2hlX2xhY2tfbyAgICAgICksCisgICAgICAgICAgLm0yX3diZF9lcnJfbyAgICAgICAod2JkX3Jpc2N2X2RjYWNoZV9lcnJfbyAgICAgICApLAorCisgICAgICAgICAvLyBNYXN0ZXIgMyBJbnRlcmZhY2UKKyAgICAgICAgICAubTNfd2JkX2Fkcl9pICAgICAgICh3YmRfcmlzY3ZfaWNhY2hlX2Fkcl9pICAgICAgICksCisgICAgICAgICAgLm0zX3diZF9zZWxfaSAgICAgICAod2JkX3Jpc2N2X2ljYWNoZV9zZWxfaSAgICAgICApLAorICAgICAgICAgIC5tM193YmRfYmxfaSAgICAgICAgKHdiZF9yaXNjdl9pY2FjaGVfYmxfaSAgICAgICAgKSwKKyAgICAgICAgICAubTNfd2JkX2JyeV9pICAgICAgICh3YmRfcmlzY3ZfaWNhY2hlX2JyeV9pICAgICAgICksCisgICAgICAgICAgLm0zX3diZF93ZV9pICAgICAgICAod2JkX3Jpc2N2X2ljYWNoZV93ZV9pICAgICAgICApLAorICAgICAgICAgIC5tM193YmRfY3ljX2kgICAgICAgKHdiZF9yaXNjdl9pY2FjaGVfc3RiX2kgICAgICAgKSwKKyAgICAgICAgICAubTNfd2JkX3N0Yl9pICAgICAgICh3YmRfcmlzY3ZfaWNhY2hlX3N0Yl9pICAgICAgICksCisgICAgICAgICAgLm0zX3diZF9kYXRfbyAgICAgICAod2JkX3Jpc2N2X2ljYWNoZV9kYXRfbyAgICAgICApLAorICAgICAgICAgIC5tM193YmRfYWNrX28gICAgICAgKHdiZF9yaXNjdl9pY2FjaGVfYWNrX28gICAgICAgKSwKKyAgICAgICAgICAubTNfd2JkX2xhY2tfbyAgICAgICh3YmRfcmlzY3ZfaWNhY2hlX2xhY2tfbyAgICAgICksCisgICAgICAgICAgLm0zX3diZF9lcnJfbyAgICAgICAod2JkX3Jpc2N2X2ljYWNoZV9lcnJfbyAgICAgICApLAorICAgICAgICAgCisgICAgICAgICAKKyAgICAgICAgIC8vIFNsYXZlIDAgSW50ZXJmYWNlCisgICAgICAgICAvLyAuczBfd2JkX2Vycl9pICAoMSdiMCAgICAgICAgICAgKSwgLSBNb3ZlZCBpbnNpZGUgSVAKKyAgICAgICAgICAuczBfd2JkX2RhdF9pICAgICAgICh3YmRfc3BpbV9kYXRfaSAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnMwX3diZF9hY2tfaSAgICAgICAod2JkX3NwaW1fYWNrX2kgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5zMF93YmRfbGFja19pICAgICAgKHdiZF9zcGltX2xhY2tfaSAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuczBfd2JkX2RhdF9vICAgICAgICh3YmRfc3BpbV9kYXRfbyAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnMwX3diZF9hZHJfbyAgICAgICAod2JkX3NwaW1fYWRyX28gICAgICAgICAgICAgICApLAorICAgICAgICAgIC5zMF93YmRfYnJ5X28gICAgICAgKHdiZF9zcGltX2JyeV9vICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuczBfd2JkX2JsX28gICAgICAgICh3YmRfc3BpbV9ibF9vICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnMwX3diZF9zZWxfbyAgICAgICAod2JkX3NwaW1fc2VsX28gICAgICAgICAgICAgICApLAorICAgICAgICAgIC5zMF93YmRfd2VfbyAgICAgICAgKHdiZF9zcGltX3dlX28gICAgICAgICAgICAgICAgKSwgIAorICAgICAgICAgIC5zMF93YmRfY3ljX28gICAgICAgKHdiZF9zcGltX2N5Y19vICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuczBfd2JkX3N0Yl9vICAgICAgICh3YmRfc3BpbV9zdGJfbyAgICAgICAgICAgICAgICksCisgICAgICAgICAKKyAgICAgICAgIC8vIFNsYXZlIDEgSW50ZXJmYWNlCisgICAgICAgICAvLyAuczFfd2JkX2Vycl9pICAoMSdiMCAgICAgICAgICAgKSwgLSBNb3ZlZCBpbnNpZGUgSVAKKyAgICAgICAgICAuczFfd2JkX2RhdF9pICAgICAgICh3YmRfdWFydF9kYXRfaSAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnMxX3diZF9hY2tfaSAgICAgICAod2JkX3VhcnRfYWNrX2kgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5zMV93YmRfZGF0X28gICAgICAgKHdiZF91YXJ0X2RhdF9vICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuczFfd2JkX2Fkcl9vICAgICAgICh3YmRfdWFydF9hZHJfbyAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnMxX3diZF9zZWxfbyAgICAgICAod2JkX3VhcnRfc2VsX28gICAgICAgICAgICAgICApLAorICAgICAgICAgIC5zMV93YmRfd2VfbyAgICAgICAgKHdiZF91YXJ0X3dlX28gICAgICAgICAgICAgICAgKSwgIAorICAgICAgICAgIC5zMV93YmRfY3ljX28gICAgICAgKHdiZF91YXJ0X2N5Y19vICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuczFfd2JkX3N0Yl9vICAgICAgICh3YmRfdWFydF9zdGJfbyAgICAgICAgICAgICAgICksCisgICAgICAgICAKKyAgICAgICAgIC8vIFNsYXZlIDIgSW50ZXJmYWNlCisgICAgICAgICAvLyAuczJfd2JkX2Vycl9pICAoMSdiMCAgICAgICAgICAgKSwgLSBNb3ZlZCBpbnNpZGUgSVAKKyAgICAgICAgICAuczJfd2JkX2RhdF9pICAgICAgICh3YmRfZ2xibF9kYXRfaSAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnMyX3diZF9hY2tfaSAgICAgICAod2JkX2dsYmxfYWNrX2kgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5zMl93YmRfZGF0X28gICAgICAgKHdiZF9nbGJsX2RhdF9vICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuczJfd2JkX2Fkcl9vICAgICAgICh3YmRfZ2xibF9hZHJfbyAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnMyX3diZF9zZWxfbyAgICAgICAod2JkX2dsYmxfc2VsX28gICAgICAgICAgICAgICApLAorICAgICAgICAgIC5zMl93YmRfd2VfbyAgICAgICAgKHdiZF9nbGJsX3dlX28gICAgICAgICAgICAgICAgKSwgIAorICAgICAgICAgIC5zMl93YmRfY3ljX28gICAgICAgKHdiZF9nbGJsX2N5Y19vICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuczJfd2JkX3N0Yl9vICAgICAgICh3YmRfZ2xibF9zdGJfbyAgICAgICAgICAgICAgICksCisKKyAgICAgICAgIC8vIFNsYXZlIDMgSW50ZXJmYWNlCisgICAgICAgICAvLyAuczNfd2JkX2Vycl9pICAoMSdiMCAgICAgICAgICApLCAtIE1vdmVkIGluc2lkZSBJUAorICAgICAgICAgIC5zM193YmRfZGF0X2kgICAgICAgKHdiZF9tYmlzdF9kYXRfaSAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuczNfd2JkX2Fja19pICAgICAgICh3YmRfbWJpc3RfYWNrX2kgICAgICAgICAgICAgICksCisgICAgICAgICAgLnMzX3diZF9sYWNrX2kgICAgICAod2JkX21iaXN0X2xhY2tfaSAgICAgICAgICAgICApLAorICAgICAgICAgIC5zM193YmRfZGF0X28gICAgICAgKHdiZF9tYmlzdF9kYXRfbyAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuczNfd2JkX2Fkcl9vICAgICAgICh3YmRfbWJpc3RfYWRyX28gICAgICAgICAgICAgICksCisgICAgICAgICAgLnMzX3diZF9zZWxfbyAgICAgICAod2JkX21iaXN0X3NlbF9vICAgICAgICAgICAgICApLAorICAgICAgICAgIC5zM193YmRfYnJ5X28gICAgICAgKHdiZF9tYmlzdF9icnlfbyAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuczNfd2JkX2JsX28gICAgICAgICh3YmRfbWJpc3RfYmxfbyAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnMzX3diZF93ZV9vICAgICAgICAod2JkX21iaXN0X3dlX28gICAgICAgICAgICAgICApLCAgCisgICAgICAgICAgLnMzX3diZF9jeWNfbyAgICAgICAod2JkX21iaXN0X2N5Y19vICAgICAgICAgICAgICApLAorICAgICAgICAgIC5zM193YmRfc3RiX28gICAgICAgKHdiZF9tYmlzdF9zdGJfbyAgICAgICAgICAgICAgKQorCisJKTsKKworCit1YXJ0X2kyY191c2Jfc3BpX3RvcCAgIHVfdWFydF9pMmNfdXNiX3NwaSAoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgIC52Y2NkMSAgICAgICAgICAgICAgICAgKHZjY2QxICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAudnNzZDEgICAgICAgICAgICAgICAgICh2c3NkMSAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisJLndiZF9jbGtfaW50ICAgICAgICAgICAgKHdiZF9jbGtfdWFydF9ycCAgICAgICAgICApLCAKKwkuY2ZnX2Nza2FfdWFydCAgICAgICAgICAoY2ZnX2Nza2FfdWFydF9ycCAgICAgICAgICksIAorCS53YmRfY2xrX3VhcnQgICAgICAgICAgICh3YmRfY2xrX3VhcnRfc2tldyAgICAgICAgKSwKKworICAgICAgICAudWFydF9yc3RuICAgICAgICAgICAgICAodWFydF9yc3RfbiAgICAgICAgICAgICAgICksIC8vIHVhcnQgcmVzZXQKKyAgICAgICAgLmkyY19yc3RuICAgICAgICAgICAgICAgKGkyY19yc3RfbiAgICAgICAgICAgICAgICApLCAvLyBpMmMgcmVzZXQKKyAgICAgICAgLnVzYl9yc3RuICAgICAgICAgICAgICAgKHVzYl9yc3RfbiAgICAgICAgICAgICAgICApLCAvLyBVU0IgcmVzZXQKKyAgICAgICAgLnNwaV9yc3RuICAgICAgICAgICAgICAgKHNzcGltX3JzdF9uICAgICAgICAgICAgICApLCAvLyBTUEkgcmVzZXQKKyAgICAgICAgLmFwcF9jbGsgICAgICAgICAgICAgICAgKHdiZF9jbGtfdWFydF9za2V3ICAgICAgICApLAorCS51c2JfY2xrICAgICAgICAgICAgICAgICh1c2JfY2xrICAgICAgICAgICAgICAgICAgKSwKKworICAgICAgICAvLyBSZWcgQnVzIEludGVyZmFjZSBTaWduYWwKKyAgICAgICAucmVnX2NzICAgICAgICAgICAgICAgICAgKHdiZF91YXJ0X3N0Yl9vICAgICAgICAgICApLAorICAgICAgIC5yZWdfd3IgICAgICAgICAgICAgICAgICAod2JkX3VhcnRfd2VfbyAgICAgICAgICAgICksCisgICAgICAgLnJlZ19hZGRyICAgICAgICAgICAgICAgICh3YmRfdWFydF9hZHJfb1s3OjBdICAgICAgKSwKKyAgICAgICAucmVnX3dkYXRhICAgICAgICAgICAgICAgKHdiZF91YXJ0X2RhdF9vICAgICAgICAgICApLAorICAgICAgIC5yZWdfYmUgICAgICAgICAgICAgICAgICAod2JkX3VhcnRfc2VsX28gICAgICAgICAgICksCisKKyAgICAgICAvLyBPdXRwdXRzCisgICAgICAgLnJlZ19yZGF0YSAgICAgICAgICAgICAgICh3YmRfdWFydF9kYXRfaSAgICAgICAgICAgKSwKKyAgICAgICAucmVnX2FjayAgICAgICAgICAgICAgICAgKHdiZF91YXJ0X2Fja19pICAgICAgICAgICApLAorCisgICAgICAgLy8gUGFkIGludGVyZmFjZQorICAgICAgIC5zY2xfcGFkX2kgICAgICAgICAgICAgICAoaTJjbV9jbGtfaSAgICAgICAgICAgICAgICksCisgICAgICAgLnNjbF9wYWRfbyAgICAgICAgICAgICAgIChpMmNtX2Nsa19vICAgICAgICAgICAgICAgKSwKKyAgICAgICAuc2NsX3BhZF9vZW5fbyAgICAgICAgICAgKGkyY21fY2xrX29lbiAgICAgICAgICAgICApLAorCisgICAgICAgLnNkYV9wYWRfaSAgICAgICAgICAgICAgIChpMmNtX2RhdGFfaSAgICAgICAgICAgICAgKSwKKyAgICAgICAuc2RhX3BhZF9vICAgICAgICAgICAgICAgKGkyY21fZGF0YV9vICAgICAgICAgICAgICApLAorICAgICAgIC5zZGFfcGFkb2VuX28gICAgICAgICAgICAoaTJjbV9kYXRhX29lbiAgICAgICAgICAgICksCisgICAgIAorICAgICAgIC5pMmNtX2ludHJfbyAgICAgICAgICAgICAoaTJjbV9pbnRyX28gICAgICAgICAgICAgICksCisKKyAgICAgICAudWFydF9yeGQgICAgICAgICAgICAgICAgKHVhcnRfcnhkICAgICAgICAgICAgICAgICApLAorICAgICAgIC51YXJ0X3R4ZCAgICAgICAgICAgICAgICAodWFydF90eGQgICAgICAgICAgICAgICAgICksCisKKyAgICAgICAudXNiX2luX2RwICAgICAgICAgICAgICAgKHVzYl9kcF9pICAgICAgICAgICAgICAgICApLAorICAgICAgIC51c2JfaW5fZG4gICAgICAgICAgICAgICAodXNiX2RuX2kgICAgICAgICAgICAgICAgICksCisKKyAgICAgICAudXNiX291dF9kcCAgICAgICAgICAgICAgKHVzYl9kcF9vICAgICAgICAgICAgICAgICApLAorICAgICAgIC51c2Jfb3V0X2RuICAgICAgICAgICAgICAodXNiX2RuX28gICAgICAgICAgICAgICAgICksCisgICAgICAgLnVzYl9vdXRfdHhfb2VuICAgICAgICAgICh1c2Jfb2VuICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAKKyAgICAgICAudXNiX2ludHJfbyAgICAgICAgICAgICAgKHVzYl9pbnRyX28gICAgICAgICAgICAgICApLAorCisgICAgICAvLyBTUElNIE1hc3RlcgorICAgICAgIC5zc3BpbV9zY2sgICAgICAgICAgICAgICAoc3NwaW1fc2NrICAgICAgICAgICAgICAgICksIAorICAgICAgIC5zc3BpbV9zbyAgICAgICAgICAgICAgICAoc3NwaW1fc28gICAgICAgICAgICAgICAgICksICAKKyAgICAgICAuc3NwaW1fc2kgICAgICAgICAgICAgICAgKHNzcGltX3NpICAgICAgICAgICAgICAgICApLCAgCisgICAgICAgLnNzcGltX3NzbiAgICAgICAgICAgICAgIChzc3BpbV9zc24gICAgICAgICAgICAgICAgKSAgCisKKyAgICAgKTsKKworCitwaW5tdXggdV9waW5tdXgoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgIC52Y2NkMSAgICAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgICAgICAgLnZzc2QxICAgICAgICAgKHZzc2QxICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgICAgICAgLy9jbGsgc2tldyBhZGp1c3QKKyAgICAgICAgLmNmZ19jc2thX3Bpbm11eCAgICAgICAgKGNmZ19jc2thX3Bpbm11eF9ycCAgICAgICAgKSwKKyAgICAgICAgLndiZF9jbGtfaW50ICAgICAgICAgICAgKHdiZF9jbGtfcGlubXV4X3JwICAgICAgICAgKSwKKyAgICAgICAgLndiZF9jbGtfcGlubXV4ICAgICAgICAgKHdiZF9jbGtfcGlubXV4X3NrZXcgICAgICAgKSwKKworICAgICAgICAvLyBTeXN0ZW0gU2lnbmFscworICAgICAgICAvLyBJbnB1dHMKKwkubWNsayAgICAgICAgICAgICAgICAgICAod2JkX2Nsa19waW5tdXhfc2tldyAgICAgICApLAorICAgICAgICAuaF9yZXNldF9uICAgICAgICAgICAgICAod2JkX2ludF9yc3RfbiAgICAgICAgICAgICApLAorCisgICAgICAgIC8vIFJlZyBCdXMgSW50ZXJmYWNlIFNpZ25hbAorICAgICAgICAucmVnX2NzICAgICAgICAgICAgICAgICAod2JkX2dsYmxfc3RiX28gICAgICAgICAgICApLAorICAgICAgICAucmVnX3dyICAgICAgICAgICAgICAgICAod2JkX2dsYmxfd2VfbyAgICAgICAgICAgICApLAorICAgICAgICAucmVnX2FkZHIgICAgICAgICAgICAgICAod2JkX2dsYmxfYWRyX28gICAgICAgICAgICApLAorICAgICAgICAucmVnX3dkYXRhICAgICAgICAgICAgICAod2JkX2dsYmxfZGF0X28gICAgICAgICAgICApLAorICAgICAgICAucmVnX2JlICAgICAgICAgICAgICAgICAod2JkX2dsYmxfc2VsX28gICAgICAgICAgICApLAorCisgICAgICAgLy8gT3V0cHV0cworICAgICAgICAucmVnX3JkYXRhICAgICAgICAgICAgICAod2JkX2dsYmxfZGF0X2kgICAgICAgICAgICApLAorICAgICAgICAucmVnX2FjayAgICAgICAgICAgICAgICAod2JkX2dsYmxfYWNrX2kgICAgICAgICAgICApLAorCisKKyAgICAgICAvLyBSaXNjIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgLmZ1c2VfbWhhcnRpZCAgICAgICAgICAgKGZ1c2VfbWhhcnRpZCAgICAgICAgICAgICAgKSwKKyAgICAgICAgLmlycV9saW5lcyAgICAgICAgICAgICAgKGlycV9saW5lcyAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgLnNvZnRfaXJxICAgICAgICAgICAgICAgKHNvZnRfaXJxICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgLnVzZXJfaXJxICAgICAgICAgICAgICAgKHVzZXJfaXJxICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgLnVzYl9pbnRyICAgICAgICAgICAgICAgKHVzYl9pbnRyX28gICAgICAgICAgICAgICAgKSwKKyAgICAgICAgLmkyY21faW50ciAgICAgICAgICAgICAgKGkyY21faW50cl9vICAgICAgICAgICAgICAgKSwKKworICAgICAgIC8vIERpZ2l0YWwgSU8KKyAgICAgICAgLmRpZ2l0YWxfaW9fb3V0ICAgICAgICAgKGlvX291dCAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgLmRpZ2l0YWxfaW9fb2VuICAgICAgICAgKGlvX29lYiAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgLmRpZ2l0YWxfaW9faW4gICAgICAgICAgKGlvX2luICAgICAgICAgICAgICAgICAgICAgKSwKKworICAgICAgIC8vIFNGTEFTSCBJL0YKKyAgICAgICAgLnNmbGFzaF9zY2sgICAgICAgICAgICAgKHNmbGFzaF9zY2sgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgLnNmbGFzaF9zcyAgICAgICAgICAgICAgKHNwaV9jc24gICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgLnNmbGFzaF9vZW4gICAgICAgICAgICAgKHNmbGFzaF9vZW4gICAgICAgICAgICAgICAgKSwKKyAgICAgICAgLnNmbGFzaF9kbyAgICAgICAgICAgICAgKHNmbGFzaF9kbyAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgLnNmbGFzaF9kaSAgICAgICAgICAgICAgKHNmbGFzaF9kaSAgICAgICAgICAgICAgICAgKSwKKworCisgICAgICAgLy8gVVNCIEkvRgorICAgICAgICAudXNiX2RwX28gICAgICAgICAgICAgICAodXNiX2RwX28gICAgICAgICAgICAgICAgICApLAorICAgICAgICAudXNiX2RuX28gICAgICAgICAgICAgICAodXNiX2RuX28gICAgICAgICAgICAgICAgICApLAorICAgICAgICAudXNiX29lbiAgICAgICAgICAgICAgICAodXNiX29lbiAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAudXNiX2RwX2kgICAgICAgICAgICAgICAodXNiX2RwX2kgICAgICAgICAgICAgICAgICApLAorICAgICAgICAudXNiX2RuX2kgICAgICAgICAgICAgICAodXNiX2RuX2kgICAgICAgICAgICAgICAgICApLAorCisgICAgICAgLy8gVUFSVCBJL0YKKyAgICAgICAgLnVhcnRfdHhkICAgICAgICAgICAgICAgKHVhcnRfdHhkICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgLnVhcnRfcnhkICAgICAgICAgICAgICAgKHVhcnRfcnhkICAgICAgICAgICAgICAgICAgKSwKKworICAgICAgIC8vIEkyQ00gSS9GCisgICAgICAgIC5pMmNtX2Nsa19vICAgICAgICAgICAgIChpMmNtX2Nsa19vICAgICAgICAgICAgICAgICksCisgICAgICAgIC5pMmNtX2Nsa19pICAgICAgICAgICAgIChpMmNtX2Nsa19pICAgICAgICAgICAgICAgICksCisgICAgICAgIC5pMmNtX2Nsa19vZW4gICAgICAgICAgIChpMmNtX2Nsa19vZW4gICAgICAgICAgICAgICksCisgICAgICAgIC5pMmNtX2RhdGFfb2VuICAgICAgICAgIChpMmNtX2RhdGFfb2VuICAgICAgICAgICAgICksCisgICAgICAgIC5pMmNtX2RhdGFfbyAgICAgICAgICAgIChpMmNtX2RhdGFfbyAgICAgICAgICAgICAgICksCisgICAgICAgIC5pMmNtX2RhdGFfaSAgICAgICAgICAgIChpMmNtX2RhdGFfaSAgICAgICAgICAgICAgICksCisKKyAgICAgICAvLyBTUEkgTUFTVEVSCisgICAgICAgIC5zcGltX3NjayAgICAgICAgICAgICAgIChzc3BpbV9zY2sgICAgICAgICAgICAgICAgICksCisgICAgICAgIC5zcGltX3NzICAgICAgICAgICAgICAgIChzc3BpbV9zc24gICAgICAgICAgICAgICAgICksCisgICAgICAgIC5zcGltX21pc28gICAgICAgICAgICAgIChzc3BpbV9zbyAgICAgICAgICAgICAgICAgICksCisgICAgICAgIC5zcGltX21vc2kgICAgICAgICAgICAgIChzc3BpbV9zaSAgICAgICAgICAgICAgICAgICksCisKKyAgICAgIC8vIFVBUlQgTUFTVEVSIEkvRgorICAgICAgICAudWFydG1fcnhkICAgICAgICAgICAgICAodWFydG1fcnhkICAgICAgICAgICAgICAgICApLAorICAgICAgICAudWFydG1fdHhkICAgICAgICAgICAgICAodWFydG1fdHhkICAgICAgICAgICAgICAgICApLAorCisKKwkucHVsc2UxbV9tY2xrICAgICAgICAgICAocHVsc2UxbV9tY2xrICAgICAgICAgICAgICApLAorCisJLnBpbm11eF9kZWJ1ZyAgICAgICAgICAgKHBpbm11eF9kZWJ1ZyAgICAgICAgICAgICAgKSwKKworICAgICAgIC8vIEJJU1QgSS9GCisgICAgICAgIC5iaXN0X2VuICAgICAgICAgICAgICAgIChiaXN0X2VuICAgICAgICAgICAgICAgICAgICksCisgICAgICAgIC5iaXN0X3J1biAgICAgICAgICAgICAgIChiaXN0X3J1biAgICAgICAgICAgICAgICAgICksCisgICAgICAgIC5iaXN0X2xvYWQgICAgICAgICAgICAgIChiaXN0X2xvYWQgICAgICAgICAgICAgICAgICksCisgICAgICAgIAorICAgICAgICAuYmlzdF9zZGkgICAgICAgICAgICAgICAoYmlzdF9zZGkgICAgICAgICAgICAgICAgICApLAorICAgICAgICAuYmlzdF9zaGlmdCAgICAgICAgICAgICAoYmlzdF9zaGlmdCAgICAgICAgICAgICAgICApLAorICAgICAgICAuYmlzdF9zZG8gICAgICAgICAgICAgICAoYmlzdF9zZG9fcnAgICAgICAgICAgICAgICApLAorICAgICAgICAKKyAgICAgICAgLmJpc3RfZG9uZSAgICAgICAgICAgICAgKGJpc3RfZG9uZV9ycCAgICAgICAgICAgICAgKSwKKyAgICAgICAgLmJpc3RfZXJyb3IgICAgICAgICAgICAgKGJpc3RfZXJyb3JfcnAgICAgICAgICAgICAgKSwKKyAgICAgICAgLmJpc3RfY29ycmVjdCAgICAgICAgICAgKGJpc3RfY29ycmVjdF9ycCAgICAgICAgICAgKSwKKyAgICAgICAgLmJpc3RfZXJyb3JfY250MCAgICAgICAgKGJpc3RfZXJyb3JfY250MF9ycCAgICAgICAgKSwKKyAgICAgICAgLmJpc3RfZXJyb3JfY250MSAgICAgICAgKGJpc3RfZXJyb3JfY250MV9ycCAgICAgICAgKSwKKyAgICAgICAgLmJpc3RfZXJyb3JfY250MiAgICAgICAgKGJpc3RfZXJyb3JfY250Ml9ycCAgICAgICAgKSwKKyAgICAgICAgLmJpc3RfZXJyb3JfY250MyAgICAgICAgKGJpc3RfZXJyb3JfY250M19ycCAgICAgICAgKQorCisKKyAgICk7IAorLy8tLS0tLS0tLS0tLS0tIE1CSVNUIC0gNTEyeDMyICAgICAgICAgICAgIC0tLS0KKworbWJpc3Rfd3JhcHBlciAgIygKKwlgaWZuZGVmIFNZTlRIRVNJUworCS5CSVNUX05PX1NSQU0gICAgICAgICAgICg0ICAgICAgICAgICAgICAgICAgICAgICksCisJLkJJU1RfQUREUl9XRCAgICAgICAgICAgKEJJU1QxX0FERFJfV0QtMiAgICAgICAgKSwKKwkuQklTVF9EQVRBX1dEICAgICAgICAgICAoQklTVF9EQVRBX1dEICAgICAgICAgICApLAorCS5CSVNUX0FERFJfU1RBUlQgICAgICAgICg5J2gwMDAgICAgICAgICAgICAgICAgICksCisJLkJJU1RfQUREUl9FTkQgICAgICAgICAgKDknaDFGQiAgICAgICAgICAgICAgICAgKSwKKwkuQklTVF9SRVBBSVJfQUREUl9TVEFSVCAoOSdoMUZDICAgICAgICAgICAgICAgICApLAorCS5CSVNUX1JBRF9XRF9JICAgICAgICAgIChCSVNUMV9BRERSX1dELTIgICAgICAgICksCisJLkJJU1RfUkFEX1dEX08gICAgICAgICAgKEJJU1QxX0FERFJfV0QtMiAgICAgICAgKQorICAgICAgICBgZW5kaWYKKyAgICAgKSAKKwkgICAgIHVfbWJpc3QgKAorCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgICAudmNjZDEgICAgICAgICAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICAgICAgICAudnNzZDEgICAgICAgICAgICAgICh2c3NkMSAgICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorCisgICAgIC8vIENsb2NrIFNrZXcgYWRqdXN0CisJICAgICAgICAgLndiZF9jbGtfaW50ICAgICAgICAod2JkX2Nsa19tYmlzdDFfcnAgICAgICAgICAgICApLCAKKwkgICAgICAgICAuY2ZnX2Nza2FfbWJpc3QgICAgIChjZmdfY3NrYV9tYmlzdDFfcnAgICAgICAgICAgICksIAorCSAgICAgICAgIC53YmRfY2xrX21iaXN0ICAgICAgKHdiZF9jbGtfbWJpc3Rfc2tldyAgICAgICAgICAgKSwKKworCS8vIFdCIEkvRgorICAgICAgICAgICAgICAgICAgLndiX2NsazJfaSAgICAgICAgICh3YmRfY2xrX21iaXN0X3NrZXcgICksICAKKyAgICAgICAgICAgICAgICAgIC53Yl9jbGtfaSAgICAgICAgICAod2JkX2Nsa19tYmlzdF9za2V3ICApLCAgCisgICAgICAgICAgICAgICAgICAud2Jfc3RiX2kgICAgICAgICAgKHdiZF9tYmlzdF9zdGJfbyksICAKKwkgICAgICAgICAgLndiX2NzX2kgICAgICAgICAgICh3YmRfbWJpc3RfYWRyX29bMTI6MTFdKSwKKyAgICAgICAgICAgICAgICAgIC53Yl9hZHJfaSAgICAgICAgICAod2JkX21iaXN0X2Fkcl9vW0JJU1QxX0FERFJfV0QtMToyXSksICAKKyAgICAgICAgICAgICAgICAgIC53Yl93ZV9pICAgICAgICAgICAod2JkX21iaXN0X3dlX28gKSwgIAorICAgICAgICAgICAgICAgICAgLndiX2RhdF9pICAgICAgICAgICh3YmRfbWJpc3RfZGF0X28pLCAgCisgICAgICAgICAgICAgICAgICAud2Jfc2VsX2kgICAgICAgICAgKHdiZF9tYmlzdF9zZWxfbyksICAKKyAgICAgICAgICAgICAgICAgIC53Yl9ibF9pICAgICAgICAgICAod2JkX21iaXN0X2JsX28pLCAgCisgICAgICAgICAgICAgICAgICAud2JfYnJ5X2kgICAgICAgICAgKHdiZF9tYmlzdF9icnlfbyksICAKKyAgICAgICAgICAgICAgICAgIC53Yl9kYXRfbyAgICAgICAgICAod2JkX21iaXN0X2RhdF9pKSwgIAorICAgICAgICAgICAgICAgICAgLndiX2Fja19vICAgICAgICAgICh3YmRfbWJpc3RfYWNrX2kpLCAgCisgICAgICAgICAgICAgICAgICAud2JfbGFja19vICAgICAgICAgKHdiZF9tYmlzdF9sYWNrX2kpLCAgCisgICAgICAgICAgICAgICAgICAud2JfZXJyX28gICAgICAgICAgKCAgICAgICAgICAgICAgICAgKSwgCisKKwkgICAgICAgICAucnN0X24gICAgICAgICAgICAgIChiaXN0X3JzdF9uICAgICAgICAgICAgICAgICAgICksCisKKwkKKwkgICAgICAgICAuYmlzdF9lbiAgICAgICAgICAgIChiaXN0X2VuX3JwICAgICAgICAgICAgICAgICAgICksCisJICAgICAgICAgLmJpc3RfcnVuICAgICAgICAgICAoYmlzdF9ydW5fcnAgICAgICAgICAgICAgICAgICApLAorCSAgICAgICAgIC5iaXN0X3NoaWZ0ICAgICAgICAgKGJpc3Rfc2hpZnRfcnAgICAgICAgICAgICAgICAgKSwKKwkgICAgICAgICAuYmlzdF9sb2FkICAgICAgICAgIChiaXN0X2xvYWRfcnAgICAgICAgICAgICAgICAgICksCisJICAgICAgICAgLmJpc3Rfc2RpICAgICAgICAgICAoYmlzdF9zZGlfcnAgICAgICAgICAgICAgICAgICApLAorCisJICAgICAgICAgLmJpc3RfZXJyb3JfY250MyAgICAoYmlzdF9lcnJvcl9jbnQzICAgICAgICAgICAgICApLAorCSAgICAgICAgIC5iaXN0X2Vycm9yX2NudDIgICAgKGJpc3RfZXJyb3JfY250MiAgICAgICAgICAgICAgKSwKKwkgICAgICAgICAuYmlzdF9lcnJvcl9jbnQxICAgIChiaXN0X2Vycm9yX2NudDEgICAgICAgICAgICAgICksCisJICAgICAgICAgLmJpc3RfZXJyb3JfY250MCAgICAoYmlzdF9lcnJvcl9jbnQwICAgICAgICAgICAgICApLAorCSAgICAgICAgIC5iaXN0X2NvcnJlY3QgICAgICAgKGJpc3RfY29ycmVjdCAgICAgICAgICAgICAgICAgKSwKKwkgICAgICAgICAuYmlzdF9lcnJvciAgICAgICAgIChiaXN0X2Vycm9yICAgICAgICAgICAgICAgICAgICksCisJICAgICAgICAgLmJpc3RfZG9uZSAgICAgICAgICAoYmlzdF9kb25lICAgICAgICAgICAgICAgICAgICApLAorCSAgICAgICAgIC5iaXN0X3NkbyAgICAgICAgICAgKGJpc3Rfc2RvICAgICAgICAgICAgICAgICAgICAgKSwKKworICAgIC8vIHRvd2FyZHMgbWVtb3J5CisgICAgLy8gUE9SVC1BCisgICAgICAgICAgLm1lbV9jbGtfYSAgICAgICAgICAobWVtX2Nsa19hICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5tZW1fYWRkcl9hMCAgICAgICAgKG1lbTBfYWRkcl9hICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAubWVtX2FkZHJfYTEgICAgICAgIChtZW0xX2FkZHJfYSAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLm1lbV9hZGRyX2EyICAgICAgICAobWVtMl9hZGRyX2EgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5tZW1fYWRkcl9hMyAgICAgICAgKG1lbTNfYWRkcl9hICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAubWVtX2Nlbl9hICAgICAgICAgIChtZW1fY2VuX2EgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLm1lbV93ZWJfYSAgICAgICAgICAobWVtX3dlYl9hICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5tZW1fbWFza19hMCAgICAgICAgKG1lbTBfbWFza19hICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAubWVtX21hc2tfYTEgICAgICAgIChtZW0xX21hc2tfYSAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLm1lbV9tYXNrX2EyICAgICAgICAobWVtMl9tYXNrX2EgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5tZW1fbWFza19hMyAgICAgICAgKG1lbTNfbWFza19hICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAubWVtX2Rpbl9hMCAgICAgICAgIChtZW0wX2Rpbl9hICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLm1lbV9kaW5fYTEgICAgICAgICAobWVtMV9kaW5fYSAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5tZW1fZGluX2EyICAgICAgICAgKG1lbTJfZGluX2EgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAubWVtX2Rpbl9hMyAgICAgICAgIChtZW0zX2Rpbl9hICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLm1lbV9kb3V0X2EwICAgICAgICAobWVtMF9kb3V0X2EgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5tZW1fZG91dF9hMSAgICAgICAgKG1lbTFfZG91dF9hICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAubWVtX2RvdXRfYTIgICAgICAgIChtZW0yX2RvdXRfYSAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLm1lbV9kb3V0X2EzICAgICAgICAobWVtM19kb3V0X2EgICAgICAgICAgICAgICAgICApLAorICAgIC8vIFBPUlQtQgorICAgICAgICAgIC5tZW1fY2xrX2IgICAgICAgICAgKG1lbV9jbGtfYiAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAubWVtX2Nlbl9iICAgICAgICAgIChtZW1fY2VuX2IgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLm1lbV9hZGRyX2IwICAgICAgICAobWVtMF9hZGRyX2IgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5tZW1fYWRkcl9iMSAgICAgICAgKG1lbTFfYWRkcl9iICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAubWVtX2FkZHJfYjIgICAgICAgIChtZW0yX2FkZHJfYiAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLm1lbV9hZGRyX2IzICAgICAgICAobWVtM19hZGRyX2IgICAgICAgICAgICAgICAgICApCisKKworKTsKKworc2t5MTMwX3NyYW1fMmtieXRlXzFydzFyXzMyeDUxMl84IHVfc3JhbTBfMmtiKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgICAgLnZjY2QxICAgICAgICAgICAgICAodmNjZDEgICAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgLnZzc2QxICAgICAgICAgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKy8vIFBvcnQgMDogUlcKKyAgICAgICAgICAuY2xrMCAgICAgICAgICAgICAgIChtZW1fY2xrX2FbMF0gICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmNzYjAgICAgICAgICAgICAgICAobWVtX2Nlbl9hWzBdICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC53ZWIwICAgICAgICAgICAgICAgKG1lbV93ZWJfYVswXSAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAud21hc2swICAgICAgICAgICAgIChtZW0wX21hc2tfYSAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmFkZHIwICAgICAgICAgICAgICAobWVtMF9hZGRyX2EgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5kaW4wICAgICAgICAgICAgICAgKG1lbTBfZGluX2EgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuZG91dDAgICAgICAgICAgICAgIChtZW0wX2RvdXRfYSAgICAgICAgICAgICAgICAgICksCisvLyBQb3J0IDE6IFIKKyAgICAgICAgICAuY2xrMSAgICAgICAgICAgICAgIChtZW1fY2xrX2JbMF0gICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmNzYjEgICAgICAgICAgICAgICAobWVtX2Nlbl9iWzBdICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5hZGRyMSAgICAgICAgICAgICAgKG1lbTBfYWRkcl9iICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuZG91dDEgICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgKTsKKworc2t5MTMwX3NyYW1fMmtieXRlXzFydzFyXzMyeDUxMl84IHVfc3JhbTFfMmtiKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgICAgLnZjY2QxICAgICAgICAgICAgICAodmNjZDEgICAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgLnZzc2QxICAgICAgICAgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKy8vIFBvcnQgMDogUlcKKyAgICAgICAgICAuY2xrMCAgICAgICAgICAgICAgIChtZW1fY2xrX2FbMV0gICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmNzYjAgICAgICAgICAgICAgICAobWVtX2Nlbl9hWzFdICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC53ZWIwICAgICAgICAgICAgICAgKG1lbV93ZWJfYVsxXSAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAud21hc2swICAgICAgICAgICAgIChtZW0xX21hc2tfYSAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmFkZHIwICAgICAgICAgICAgICAobWVtMV9hZGRyX2EgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5kaW4wICAgICAgICAgICAgICAgKG1lbTFfZGluX2EgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuZG91dDAgICAgICAgICAgICAgIChtZW0xX2RvdXRfYSAgICAgICAgICAgICAgICAgICksCisvLyBQb3J0IDE6IFIKKyAgICAgICAgICAuY2xrMSAgICAgICAgICAgICAgIChtZW1fY2xrX2JbMV0gICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmNzYjEgICAgICAgICAgICAgICAobWVtX2Nlbl9iWzFdICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5hZGRyMSAgICAgICAgICAgICAgKG1lbTFfYWRkcl9iICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuZG91dDEgICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgKTsKKworc2t5MTMwX3NyYW1fMmtieXRlXzFydzFyXzMyeDUxMl84IHVfc3JhbTJfMmtiKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgICAgLnZjY2QxICAgICAgICAgICAgICAodmNjZDEgICAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgLnZzc2QxICAgICAgICAgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKy8vIFBvcnQgMDogUlcKKyAgICAgICAgICAuY2xrMCAgICAgICAgICAgICAgIChtZW1fY2xrX2FbMl0gICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmNzYjAgICAgICAgICAgICAgICAobWVtX2Nlbl9hWzJdICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC53ZWIwICAgICAgICAgICAgICAgKG1lbV93ZWJfYVsyXSAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAud21hc2swICAgICAgICAgICAgIChtZW0yX21hc2tfYSAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmFkZHIwICAgICAgICAgICAgICAobWVtMl9hZGRyX2EgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5kaW4wICAgICAgICAgICAgICAgKG1lbTJfZGluX2EgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuZG91dDAgICAgICAgICAgICAgIChtZW0yX2RvdXRfYSAgICAgICAgICAgICAgICAgICksCisvLyBQb3J0IDE6IFIKKyAgICAgICAgICAuY2xrMSAgICAgICAgICAgICAgIChtZW1fY2xrX2JbMl0gICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmNzYjEgICAgICAgICAgICAgICAobWVtX2Nlbl9iWzJdICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5hZGRyMSAgICAgICAgICAgICAgKG1lbTJfYWRkcl9iICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuZG91dDEgICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgKTsKKworCitza3kxMzBfc3JhbV8ya2J5dGVfMXJ3MXJfMzJ4NTEyXzggdV9zcmFtM18ya2IoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgICAudmNjZDEgICAgICAgICAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICAgICAgICAudnNzZDEgICAgICAgICAgICAgICh2c3NkMSAgICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorLy8gUG9ydCAwOiBSVworICAgICAgICAgIC5jbGswICAgICAgICAgICAgICAgKG1lbV9jbGtfYVszXSAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuY3NiMCAgICAgICAgICAgICAgIChtZW1fY2VuX2FbM10gICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLndlYjAgICAgICAgICAgICAgICAobWVtX3dlYl9hWzNdICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC53bWFzazAgICAgICAgICAgICAgKG1lbTNfbWFza19hICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuYWRkcjAgICAgICAgICAgICAgIChtZW0zX2FkZHJfYSAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmRpbjAgICAgICAgICAgICAgICAobWVtM19kaW5fYSAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5kb3V0MCAgICAgICAgICAgICAgKG1lbTNfZG91dF9hICAgICAgICAgICAgICAgICAgKSwKKy8vIFBvcnQgMTogUgorICAgICAgICAgIC5jbGsxICAgICAgICAgICAgICAgKG1lbV9jbGtfYlszXSAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuY3NiMSAgICAgICAgICAgICAgIChtZW1fY2VuX2JbM10gICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmFkZHIxICAgICAgICAgICAgICAobWVtM19hZGRyX2IgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5kb3V0MSAgICAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICApOworCisKKy8qKioKK3Nhcl9hZGMgIHVfYWRjICgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgICAgICAudmNjZDEgKHZjY2QxKSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgICAgICAudnNzZDEgKHZzc2QxKSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorICAgICAgICAudmNjZDIgKHZjY2QxKSwgLy8gKHZjY2QyKSwvLyBVc2VyIGFyZWEgMiAxLjhWIHN1cHBseSAoYW5hbG9nKSAtIERPVE86IE5lZWQgRml4CisgICAgICAgIC52c3NkMiAodnNzZDEpLCAvLyAodnNzZDIpLC8vIFVzZXIgYXJlYSAyIGdyb3VuZCAgICAgIChhbmFsb2cpIC0gRE9UTzogTmVlZCBGaXgKK2BlbmRpZgorCisgICAgCisgICAgICAgIC5jbGsgICAgICAgICAgICh3YmRfY2xrX2FkY19ycCApLC8vIFRoZSBjbG9jayAoZGlnaXRhbCkKKyAgICAgICAgLnJlc2V0X24gICAgICAgKHdiZF9pbnRfcnN0X24gICApLC8vIEFjdGl2ZSBsb3cgcmVzZXQgKGRpZ2l0YWwpCisKKyAgICAvLyBSZWcgQnVzIEludGVyZmFjZSBTaWduYWwKKyAgICAgICAgLnJlZ19jcyAgICAgICAgKHdiZF9hZGNfc3RiX28gICApLAorICAgICAgICAucmVnX3dyICAgICAgICAod2JkX2FkY193ZV9vICAgICksCisgICAgICAgIC5yZWdfYWRkciAgICAgICh3YmRfYWRjX2Fkcl9vWzc6MF0gKSwKKyAgICAgICAgLnJlZ193ZGF0YSAgICAgKHdiZF9hZGNfZGF0X28gICApLAorICAgICAgICAucmVnX2JlICAgICAgICAod2JkX2FkY19zZWxfbyAgICksCisKKyAgICAvLyBPdXRwdXRzCisgICAgICAgIC5yZWdfcmRhdGEgICAgICh3YmRfYWRjX2RhdF9pICAgKSwKKyAgICAgICAgLnJlZ19hY2sgICAgICAgKHdiZF9hZGNfYWNrX2kgICApLAorCisgICAgICAgIC5wdWxzZTFtX21jbGsgIChwdWxzZTFtX21jbGspLAorCisKKwkvLyBEQUMgSS9GCisgICAgICAgIC5zYXIyZGFjICAgICAgICAgKHNhcjJkYWMgICAgICAgKSwgCisgICAgICAgIC8vLmFuYWxvZ19kYWNfb3V0ICAoYW5hbG9nX2RhY19vdXQpICwgIC8vIFRPRE86IE5lZWQgdG8gY29ubmVjdCB0byBEQUMgTy9QCisgICAgICAgIC5hbmFsb2dfZGFjX291dCAgKGFuYWxvZ19pb1s2XSkgLCAKKworICAgICAgICAvLyBBREMgSW5wdXQgCisgICAgICAgIC5hbmFsb2dfZGluKGFuYWxvZ19pb1s1OjBdKSAgICAvLyAoQW5hbG9nKQorCispOworKioqLworCisvKioqKgorKiBUT0RPOiBOZWVkIHRvIHVuY29tbWVudCB0aGUgREFDCitEQUNfOEJJVCB1X2RhYyAoCisgICAgIGBpZmRlZiBVU0VfUE9XRVJfUElOUworICAgICAgICAudmRkKHZjY2QyKSwKKyAgICAgICAgLmduZCh2c3NkMiksCisgICAgYGVuZGlmIAorICAgICAgICAuZDAoc2FyMmRhY1swXSksCisgICAgICAgIC5kMShzYXIyZGFjWzFdKSwKKyAgICAgICAgLmQyKHNhcjJkYWNbMl0pLAorICAgICAgICAuZDMoc2FyMmRhY1szXSksCisgICAgICAgIC5kNChzYXIyZGFjWzRdKSwKKyAgICAgICAgLmQ1KHNhcjJkYWNbNV0pLAorICAgICAgICAuZDYoc2FyMmRhY1s2XSksCisgICAgICAgIC5kNyhzYXIyZGFjWzddKSwKKyAgICAgICAgLmlucDEoYW5hbG9nX2lvWzZdKSwKKyAgICAgICAgLm91dF92KGFuYWxvZ19kYWNfb3V0KQorICAgICk7CisKKyoqLworCitlbmRtb2R1bGUgOiB1c2VyX3Byb2plY3Rfd3JhcHBlcgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvd2JfaG9zdC9zcmMvd2JfaG9zdC5zdiBiL3Zlcmlsb2cvcnRsL3diX2hvc3Qvc3JjL3diX2hvc3Quc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNmMDAwNQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3diX2hvc3Qvc3JjL3diX2hvc3Quc3YKQEAgLTAsMCArMSw1NzQgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgV2lzaGJvbmUgaG9zdCBJbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFlJRml2ZSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWlmaXZlX3IwLmdpdCAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3lpZml2ZS8gICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIFRoaXMgYmxvY2sgZG9lcyBhc3luYyBXaXNoYm9uZSBmcm9tIG9uZSBjbG9jayB0byBvdGhlciAgLy8vLworLy8vLyAgICAgIGNsb2NrIGRvbWFpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjEgLSAyNXRoIEZlYiAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBpbml0aWFsIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjIgLSBOb3YgMTQgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBSZXNldCBjb25uZWN0aXZpdHkgYnVnIGZpeCBjbGtfY3RsIGluIHVfc2RyYW1jbGsgICAgLy8vLworLy8vLyAgICAgICAgICB1X2NwdWNsayx1X3J0Y2Nsayx1X3VzYmNsayAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjMgLSBOb3YgMTYgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBXaXNoYm9uZSBvdXQgYXJlIHJlZ2lzdGVyIGZvciBiZXR0ZXIgdGltaW5nICAgICAgICAgLy8vLyAgIAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLworLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLworLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLworLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLworLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLworLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLworLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLworLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLworLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCittb2R1bGUgd2JfaG9zdCAoCisKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIGlub3V0IHZjY2QxLAkvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgIGlub3V0IHZzc2QxLAkvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisgICAgICAgaW5wdXQgbG9naWMgICAgICAgICAgICAgICAgIHVzZXJfY2xvY2sxICAgICAgLAorICAgICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgICAgICB1c2VyX2Nsb2NrMiAgICAgICwKKworICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICBjcHVfY2xrICAgICAgICAgICwKKyAgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgcnRjX2NsayAgICAgICAgICAsCisgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgIHVzYl9jbGsgICAgICAgICAgLAorICAgICAgIC8vIEdsb2JhbCBSZXNldCBjb250cm9sCisgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgIHdiZF9pbnRfcnN0X24gICAgLAorICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICBjcHVfcnN0X24gICAgICAgICwKKyAgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgcXNwaW1fcnN0X24gICAgICAgICwKKyAgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgc3NwaW1fcnN0X24gICAgICAsCisgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgIHVhcnRfcnN0X24gICAgICAgLAorICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICBpMmNtX3JzdF9uICAgICAgICwKKyAgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgdXNiX3JzdF9uICAgICAgICAsCisgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgIGJpc3RfcnN0X24gICAgICAgICwKKworICAgIC8vIE1hc3RlciBQb3J0CisgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgIHdibV9yc3RfaSAgICAgICAgLCAgLy8gUmVndWxhciBSZXNldCBzaWduYWwKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgd2JtX2Nsa19pICAgICAgICAsICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgd2JtX2N5Y19pICAgICAgICAsICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICB3Ym1fc3RiX2kgICAgICAgICwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgaW5wdXQgICBsb2dpYyBbMzE6MF0gICAgICAgIHdibV9hZHJfaSAgICAgICAgLCAgLy8gYWRkcmVzcworICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICB3Ym1fd2VfaSAgICAgICAgICwgIC8vIHdyaXRlCisgICAgICAgaW5wdXQgICBsb2dpYyBbMzE6MF0gICAgICAgIHdibV9kYXRfaSAgICAgICAgLCAgLy8gZGF0YSBvdXRwdXQKKyAgICAgICBpbnB1dCAgIGxvZ2ljIFszOjBdICAgICAgICAgd2JtX3NlbF9pICAgICAgICAsICAvLyBieXRlIGVuYWJsZQorICAgICAgIG91dHB1dCAgbG9naWMgWzMxOjBdICAgICAgICB3Ym1fZGF0X28gICAgICAgICwgIC8vIGRhdGEgaW5wdXQKKyAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgd2JtX2Fja19vICAgICAgICAsICAvLyBhY2tub3dsZWdlbWVudAorICAgICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICB3Ym1fZXJyX28gICAgICAgICwgIC8vIGVycm9yCisKKyAgICAvLyBDbG9jayBTa2V3IEFkanVzdAorICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICB3YmRfY2xrX2ludCAgICAgICwgCisgICAgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgIHdiZF9jbGtfd2ggICAgICAgLAorICAgICAgIGlucHV0ICAgbG9naWMgWzM6MF0gICAgICAgICBjZmdfY3NrYV93aCAgICAgICwgLy8gY2xvY2sgc2tldyBhZGp1c3QgZm9yIHdlYiBob3N0CisKKyAgICAvLyBTbGF2ZSBQb3J0CisgICAgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgIHdic19jbGtfb3V0ICAgICAgLCAgLy8gU3lzdGVtIGNsb2NrCisgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgIHdic19jbGtfaSAgICAgICAgLCAgLy8gU3lzdGVtIGNsb2NrCisgICAgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgIHdic19jeWNfbyAgICAgICAgLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgd2JzX3N0Yl9vICAgICAgICAsICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgIG91dHB1dCAgbG9naWMgWzMxOjBdICAgICAgICB3YnNfYWRyX28gICAgICAgICwgIC8vIGFkZHJlc3MKKyAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgd2JzX3dlX28gICAgICAgICAsICAvLyB3cml0ZQorICAgICAgIG91dHB1dCAgbG9naWMgWzMxOjBdICAgICAgICB3YnNfZGF0X28gICAgICAgICwgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgIHdic19zZWxfbyAgICAgICAgLCAgLy8gYnl0ZSBlbmFibGUKKyAgICAgICBpbnB1dCAgIGxvZ2ljIFszMTowXSAgICAgICAgd2JzX2RhdF9pICAgICAgICAsICAvLyBkYXRhIGlucHV0CisgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgIHdic19hY2tfaSAgICAgICAgLCAgLy8gYWNrbm93bGVnZW1lbnQKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgd2JzX2Vycl9pICAgICAgICAsICAvLyBlcnJvcgorCisgICAgICAgb3V0cHV0IGxvZ2ljIFszMTowXSAgICAgICAgIGNmZ19jbGtfY3RybDEgICAgLAorICAgICAgIG91dHB1dCBsb2dpYyBbMzE6MF0gICAgICAgICBjZmdfY2xrX2N0cmwyICAgICwKKworICAgICAgIGlucHV0ICBsb2dpYyBbMTc6MF0gICAgICAgICBsYV9kYXRhX2luICAgICAgICwKKworICAgICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICB1YXJ0bV9yeGQgICAgICAgICwKKyAgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgdWFydG1fdHhkICAgICAgICAKKworICAgICk7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gbG9jYWwgIGRlYworLy8KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvZ2ljICAgICAgICAgICAgICAgd2JtX3JzdF9uOworbG9naWMgICAgICAgICAgICAgICB3YnNfcnN0X247CisKK2xvZ2ljICAgICAgICAgICAgICAgcmVnX3NlbCAgICA7Citsb2dpYyBbMTowXSAgICAgICAgIHN3X2FkZHIgICAgOworbG9naWMgICAgICAgICAgICAgICBzd19yZF9lbiAgIDsKK2xvZ2ljICAgICAgICAgICAgICAgc3dfd3JfZW4gICA7Citsb2dpYyBbMzE6MF0gICAgICAgIHJlZ19yZGF0YSAgOworbG9naWMgWzMxOjBdICAgICAgICByZWdfb3V0ICAgIDsKK2xvZ2ljICAgICAgICAgICAgICAgcmVnX2FjayAgICA7Citsb2dpYyBbNzowXSAgICAgICAgIGNvbmZpZ19yZWcgOyAgICAKK2xvZ2ljIFszMTowXSAgICAgICAgY2xrX2N0cmwxIDsgICAgCitsb2dpYyBbMzE6MF0gICAgICAgIGNsa19jdHJsMiA7ICAgIAorbG9naWMgICAgICAgICAgICAgICBzd193cl9lbl8wOworbG9naWMgICAgICAgICAgICAgICBzd193cl9lbl8xOworbG9naWMgICAgICAgICAgICAgICBzd193cl9lbl8yOworbG9naWMgICAgICAgICAgICAgICBzd193cl9lbl8zOworbG9naWMgWzc6MF0gICAgICAgICBjZmdfYmFua19zZWw7Citsb2dpYyBbMzE6MF0gICAgICAgIHJlZ18wOyAgLy8gU29mdHdhcmVfUmVnXzAKKworbG9naWMgIFsyOjBdICAgICAgICBjZmdfd2JfY2xrX2N0cmw7Citsb2dpYyAgWzM6MF0gICAgICAgIGNmZ19jcHVfY2xrX2N0cmw7Citsb2dpYyAgWzc6MF0gICAgICAgIGNmZ19ydGNfY2xrX2N0cmw7Citsb2dpYyAgWzM6MF0gICAgICAgIGNmZ191c2JfY2xrX2N0cmw7Citsb2dpYyAgWzg6MF0gICAgICAgIGNmZ19nbGJfY3RybDsKKworLy8gdWFydCBNYXN0ZXIgUG9ydAorbG9naWMgICAgICAgICAgICAgICB3Ym1fdWFydF9jeWNfaSAgICAgICAgOyAgLy8gc3Ryb2JlL3JlcXVlc3QKK2xvZ2ljICAgICAgICAgICAgICAgd2JtX3VhcnRfc3RiX2kgICAgICAgIDsgIC8vIHN0cm9iZS9yZXF1ZXN0Citsb2dpYyBbMzE6MF0gICAgICAgIHdibV91YXJ0X2Fkcl9pICAgICAgICA7ICAvLyBhZGRyZXNzCitsb2dpYyAgICAgICAgICAgICAgIHdibV91YXJ0X3dlX2kgICAgICAgICA7ICAvLyB3cml0ZQorbG9naWMgWzMxOjBdICAgICAgICB3Ym1fdWFydF9kYXRfaSAgICAgICAgOyAgLy8gZGF0YSBvdXRwdXQKK2xvZ2ljIFszOjBdICAgICAgICAgd2JtX3VhcnRfc2VsX2kgICAgICAgIDsgIC8vIGJ5dGUgZW5hYmxlCitsb2dpYyBbMzE6MF0gICAgICAgIHdibV91YXJ0X2RhdF9vICAgICAgICA7ICAvLyBkYXRhIGlucHV0Citsb2dpYyAgICAgICAgICAgICAgIHdibV91YXJ0X2Fja19vICAgICAgICA7ICAvLyBhY2tub3dsZWdlbWVudAorbG9naWMgICAgICAgICAgICAgICB3Ym1fdWFydF9lcnJfbyAgICAgICAgOyAgLy8gZXJyb3IKKworLy8gU2VsZWN0ZWQgTWFzdGVyIFBvcnQKK2xvZ2ljICAgICAgICAgICAgICAgd2JfY3ljX2kgICAgICAgICAgICAgIDsgIC8vIHN0cm9iZS9yZXF1ZXN0Citsb2dpYyAgICAgICAgICAgICAgIHdiX3N0Yl9pICAgICAgICAgICAgICA7ICAvLyBzdHJvYmUvcmVxdWVzdAorbG9naWMgWzMxOjBdICAgICAgICB3Yl9hZHJfaSAgICAgICAgICAgICAgOyAgLy8gYWRkcmVzcworbG9naWMgICAgICAgICAgICAgICB3Yl93ZV9pICAgICAgICAgICAgICAgOyAgLy8gd3JpdGUKK2xvZ2ljIFszMTowXSAgICAgICAgd2JfZGF0X2kgICAgICAgICAgICAgIDsgIC8vIGRhdGEgb3V0cHV0Citsb2dpYyBbMzowXSAgICAgICAgIHdiX3NlbF9pICAgICAgICAgICAgICA7ICAvLyBieXRlIGVuYWJsZQorbG9naWMgWzMxOjBdICAgICAgICB3Yl9kYXRfbyAgICAgICAgICAgICAgOyAgLy8gZGF0YSBpbnB1dAorbG9naWMgICAgICAgICAgICAgICB3Yl9hY2tfbyAgICAgICAgICAgICAgOyAgLy8gYWNrbm93bGVnZW1lbnQKK2xvZ2ljICAgICAgICAgICAgICAgd2JfZXJyX28gICAgICAgICAgICAgIDsgIC8vIGVycm9yCitsb2dpYyBbMzE6MF0gICAgICAgIHdiX2Fkcl9pbnQgICAgICAgICAgICA7Citsb2dpYyAgICAgICAgICAgICAgIHdiX3N0Yl9pbnQgICAgICAgICAgICA7Citsb2dpYyBbMzE6MF0gICAgICAgIHdiX2RhdF9pbnQgICAgICAgICAgICA7IC8vIGRhdGEgaW5wdXQKK2xvZ2ljICAgICAgICAgICAgICAgd2JfYWNrX2ludCAgICAgICAgICAgIDsgLy8gYWNrbm93bGVnZW1lbnQKK2xvZ2ljICAgICAgICAgICAgICAgd2JfZXJyX2ludCAgICAgICAgICAgIDsgLy8gZXJyb3IKKworCitjdGVjaF9idWYgdV9idWZfd2JfcnN0ICAgICAgICAoLkEoY2ZnX2dsYl9jdHJsWzBdKSwuWCh3YmRfaW50X3JzdF9uKSk7CitjdGVjaF9idWYgdV9idWZfY3B1X3JzdCAgICAgICAoLkEoY2ZnX2dsYl9jdHJsWzFdKSwuWChjcHVfcnN0X24pKTsKK2N0ZWNoX2J1ZiB1X2J1Zl9xc3BpbV9yc3QgICAgICguQShjZmdfZ2xiX2N0cmxbMl0pLC5YKHFzcGltX3JzdF9uKSk7CitjdGVjaF9idWYgdV9idWZfc3NwaW1fcnN0ICAgICAoLkEoY2ZnX2dsYl9jdHJsWzNdKSwuWChzc3BpbV9yc3RfbikpOworY3RlY2hfYnVmIHVfYnVmX3VhcnRfcnN0ICAgICAgKC5BKGNmZ19nbGJfY3RybFs0XSksLlgodWFydF9yc3RfbikpOworY3RlY2hfYnVmIHVfYnVmX2kyY21fcnN0ICAgICAgKC5BKGNmZ19nbGJfY3RybFs1XSksLlgoaTJjbV9yc3RfbikpOworY3RlY2hfYnVmIHVfYnVmX3VzYl9yc3QgICAgICAgKC5BKGNmZ19nbGJfY3RybFs2XSksLlgodXNiX3JzdF9uKSk7CitjdGVjaF9idWYgdV9idWZfYmlzdF9yc3QgICAgICAoLkEoY2ZnX2dsYl9jdHJsWzddKSwuWChiaXN0X3JzdF9uKSk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvb2sgbGlrZSB3aXNoYm9uZSByZXNldCByZW1vdmVkIGVhcmx5IHRoYW4gdXNlciBQb3dlciB1cCBzZXF1ZW5jZQorLy8gVG8gY29udHJvbCB0aGUgcmVzZXQgcGhhc2UsIHdlIGhhdmUgYWRkZWQgYWRkaXRpb25hbCBjb250cm9sIHRocm91Z2ggbGFbMF0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSAgICBhcnN0X24gPSAhd2JtX3JzdF9pICYgbGFfZGF0YV9pblswXTsKK3Jlc2V0X3N5bmMgIHVfd2JtX3JzdCAoCisJICAgICAgLnNjYW5fbW9kZSAgKDEnYjAgICAgICAgICAgICksCisgICAgICAgICAgICAgIC5kY2xrICAgICAgICh3Ym1fY2xrX2kgICAgICApLCAvLyBEZXN0aW5hdGlvbiBjbG9jayBkb21haW4KKwkgICAgICAuYXJzdF9uICAgICAoYXJzdF9uICAgICAgICAgKSwgLy8gYWN0aXZlIGxvdyBhc3luYyByZXNldAorICAgICAgICAgICAgICAuc3JzdF9uICAgICAod2JtX3JzdF9uICAgICAgKQorICAgICAgICAgICk7CisKK3Jlc2V0X3N5bmMgIHVfd2JzX3JzdCAoCisJICAgICAgLnNjYW5fbW9kZSAgKDEnYjAgICAgICAgICAgICksCisgICAgICAgICAgICAgIC5kY2xrICAgICAgICh3YnNfY2xrX2kgICAgICApLCAvLyBEZXN0aW5hdGlvbiBjbG9jayBkb21haW4KKwkgICAgICAuYXJzdF9uICAgICAoYXJzdF9uICAgICAgICAgKSwgLy8gYWN0aXZlIGxvdyBhc3luYyByZXNldAorICAgICAgICAgICAgICAuc3JzdF9uICAgICAod2JzX3JzdF9uICAgICAgKQorICAgICAgICAgICk7CisKKy8vIFVBUlQgTWFzdGVyCit1YXJ0MndiIHVfdWFydDJ3YiAoICAKKyAgICAgICAgLmFyc3RfbiAgICAgICAgICAod2JtX3JzdF9uICAgICAgICAgKSwgLy8gIHN5bmMgcmVzZXQKKyAgICAgICAgLmFwcF9jbGsgICAgICAgICAod2JtX2Nsa19pICAgICAgICAgKSwgLy8gIHN5cyBjbG9jayAgICAKKworCS8vIGNvbmZpZ3VyYXRpb24gY29udHJvbAorICAgICAgIC5jZmdfdHhfZW5hYmxlICAgIChsYV9kYXRhX2luWzFdICAgICApLCAvLyBFbmFibGUgVHJhbnNtaXQgUGF0aAorICAgICAgIC5jZmdfcnhfZW5hYmxlICAgIChsYV9kYXRhX2luWzJdICAgICApLCAvLyBFbmFibGUgUmVjZWl2ZWQgUGF0aAorICAgICAgIC5jZmdfc3RvcF9iaXQgICAgIChsYV9kYXRhX2luWzNdICAgICApLCAvLyAwIC0+IDEgU3RhcnQgLCAxIC0+IDIgU3RvcCBCaXRzCisgICAgICAgLmNmZ19iYXVkXzE2eCAgICAgKGxhX2RhdGFfaW5bMTU6NF0gICksIC8vIDE2eCBCYXVkIGNsb2NrIGdlbmVyYXRpb24KKyAgICAgICAuY2ZnX3ByaV9tb2QgICAgICAobGFfZGF0YV9pblsxNzoxNl0gKSwgLy8gcHJpb3JpdHkgbW9kZSwgMCAtPiBub3AsIDEgLT4gRXZlbiwgMiAtPiBPZGQKKworICAgIC8vIE1hc3RlciBQb3J0CisgICAgICAgLndibV9jeWNfbyAgICAgICAgKHdibV91YXJ0X2N5Y19pICksICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgIC53Ym1fc3RiX28gICAgICAgICh3Ym1fdWFydF9zdGJfaSApLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAud2JtX2Fkcl9vICAgICAgICAod2JtX3VhcnRfYWRyX2kgKSwgIC8vIGFkZHJlc3MKKyAgICAgICAud2JtX3dlX28gICAgICAgICAod2JtX3VhcnRfd2VfaSAgKSwgIC8vIHdyaXRlCisgICAgICAgLndibV9kYXRfbyAgICAgICAgKHdibV91YXJ0X2RhdF9pICksICAvLyBkYXRhIG91dHB1dAorICAgICAgIC53Ym1fc2VsX28gICAgICAgICh3Ym1fdWFydF9zZWxfaSApLCAgLy8gYnl0ZSBlbmFibGUKKyAgICAgICAud2JtX2RhdF9pICAgICAgICAod2JtX3VhcnRfZGF0X28gKSwgIC8vIGRhdGEgaW5wdXQKKyAgICAgICAud2JtX2Fja19pICAgICAgICAod2JtX3VhcnRfYWNrX28gKSwgIC8vIGFja25vd2xlZ2VtZW50CisgICAgICAgLndibV9lcnJfaSAgICAgICAgKHdibV91YXJ0X2Vycl9vICksICAvLyBlcnJvcgorCisgICAgICAgLy8gU3RhdHVzIGluZm9ybWF0aW9uCisgICAgICAgLmZybV9lcnJvciAgICAgICAgKCksIC8vIGZyYW1pbmcgZXJyb3IKKyAgICAgICAucGFyX2Vycm9yICAgICAgICAoKSwgLy8gcGFyIGVycm9yCisKKyAgICAgICAuYmF1ZF9jbGtfMTZ4ICAgICAoKSwgLy8gMTZ4IEJhdWQgY2xvY2sKKworICAgICAgIC8vIExpbmUgSW50ZXJmYWNlCisgICAgICAgLnJ4ZCAgICAgICAgICAgICAgKHVhcnRtX3J4ZCkgLCAvLyB1YXJ0IHJ4ZAorICAgICAgIC50eGQgICAgICAgICAgICAgICh1YXJ0bV90eGQpICAgLy8gdWFydCB0eGQKKworICAgICApOworCisKKy8vIEFyYml0b3IgdG8gc2VsZWN0IGJldHdlZW4gZXh0ZXJuYWwgd2IgdnMgdWFydCB3Ygord2lyZSBbMTowXSBncm50Oword2JfYXJiIHVfYXJiKAorCS5jbGsgICAgICAod2JtX2Nsa19pKSwgCisJLnJzdG4gICAgICh3Ym1fcnN0X24pLCAKKwkucmVxICAgICAgKHsxJ2IwLHdibV91YXJ0X3N0Yl9pLHdibV9zdGJfaX0pLCAKKwkuZ250ICAgICAgKGdybnQpCisgICAgICAgICk7CisKKy8vIFNlbGVjdCAgdGhlIG1hc3RlciBiYXNlZCBvbiB0aGUgZ3JhbnQKK2Fzc2lnbiB3Yl9jeWNfaSA9IChncm50ID09IDInYjAwKSA/IHdibV9jeWNfaSA6IHdibV91YXJ0X2N5Y19pOyAKK2Fzc2lnbiB3Yl9zdGJfaSA9IChncm50ID09IDInYjAwKSA/IHdibV9zdGJfaSA6IHdibV91YXJ0X3N0Yl9pOyAKK2Fzc2lnbiB3Yl9hZHJfaSA9IChncm50ID09IDInYjAwKSA/IHdibV9hZHJfaSA6IHdibV91YXJ0X2Fkcl9pOyAKK2Fzc2lnbiB3Yl93ZV9pICA9IChncm50ID09IDInYjAwKSA/IHdibV93ZV9pICA6IHdibV91YXJ0X3dlX2k7IAorYXNzaWduIHdiX2RhdF9pID0gKGdybnQgPT0gMidiMDApID8gd2JtX2RhdF9pIDogd2JtX3VhcnRfZGF0X2k7IAorYXNzaWduIHdiX3NlbF9pID0gKGdybnQgPT0gMidiMDApID8gd2JtX3NlbF9pIDogd2JtX3VhcnRfc2VsX2k7IAorCithc3NpZ24gd2JtX2RhdF9vID0gKGdybnQgPT0gMidiMDApID8gd2JfZGF0X28gOiAnaDA7Cithc3NpZ24gd2JtX2Fja19vID0gKGdybnQgPT0gMidiMDApID8gd2JfYWNrX28gOiAnaDA7Cithc3NpZ24gd2JtX2Vycl9vID0gKGdybnQgPT0gMidiMDApID8gd2JfZXJyX28gOiAnaDA7CisKKworYXNzaWduIHdibV91YXJ0X2RhdF9vID0gKGdybnQgPT0gMidiMDEpID8gd2JfZGF0X28gOiAnaDA7Cithc3NpZ24gd2JtX3VhcnRfYWNrX28gPSAoZ3JudCA9PSAyJ2IwMSkgPyB3Yl9hY2tfbyA6ICdoMDsKK2Fzc2lnbiB3Ym1fdWFydF9lcnJfbyA9IChncm50ID09IDInYjAxKSA/IHdiX2Vycl9vIDogJ2gwOworCisKKworCisKKy8vIHdiX2hvc3QgY2xvY2sgc2tldyBjb250cm9sCitjbGtfc2tld19hZGp1c3QgdV9za2V3X3doCisgICAgICAgKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgICAgICAgICAudmNjZDEgICAgICAodmNjZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgICAgICAgICAgICAgLnZzc2QxICAgICAgKHZzc2QxICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorCSAgICAgICAuY2xrX2luICAgICAod2JkX2Nsa19pbnQgICAgICAgICAgICAgICApLCAKKwkgICAgICAgLnNlbCAgICAgICAgKGNmZ19jc2thX3doICAgICAgICAgICAgICAgKSwgCisJICAgICAgIC5jbGtfb3V0ICAgICh3YmRfY2xrX3doICAgICAgICAgICAgICAgICkgCisgICAgICAgKTsKKworCisvLyBUbyByZWR1Y2UgdGhlIGxvYWQvVGltaW5nIFdpc2hib25lIEkvRiwgU3Ryb2JlIGlzIHJlZ2lzdGVyIHRvIGNyZWF0ZQorLy8gbXVsdGktY3ljbGUKK3dpcmUgWzMxOjBdICB3Yl9kYXRfbzEgICA9IChyZWdfc2VsKSA/IHJlZ19yZGF0YSA6IHdiX2RhdF9pbnQ7ICAvLyBkYXRhIGlucHV0Cit3aXJlICAgICAgICAgd2JfYWNrX28xICAgPSAocmVnX3NlbCkgPyByZWdfYWNrICAgOiB3Yl9hY2tfaW50OyAvLyBhY2tub3dsZWdlbWVudAord2lyZSAgICAgICAgIHdiX2Vycl9vMSAgID0gKHJlZ19zZWwpID8gMSdiMCAgICAgIDogd2JfZXJyX2ludDsgIC8vIGVycm9yCisKK2xvZ2ljIHdiX3JlcTsKKy8vIEhvbGQgZml4IGZvciBTVFJPQkUKK3dpcmUgIHdiX3N0Yl9kMSx3Yl9zdGJfZDIsd2Jfc3RiX2QzOworY3RlY2hfZGVsYXlfYnVmIHVfZGVsYXkxX3N0YjAgKC5YKHdiX3N0Yl9kMSksLkEod2Jfc3RiX2kpKTsKK2N0ZWNoX2RlbGF5X2J1ZiB1X2RlbGF5Ml9zdGIxICguWCh3Yl9zdGJfZDIpLC5BKHdiX3N0Yl9kMSkpOworY3RlY2hfZGVsYXlfYnVmIHVfZGVsYXkyX3N0YjIgKC5YKHdiX3N0Yl9kMyksLkEod2Jfc3RiX2QyKSk7CithbHdheXNfZmYgQChuZWdlZGdlIHdibV9yc3RfbiBvciBwb3NlZGdlIHdibV9jbGtfaSkgYmVnaW4KKyAgICBpZiAoIHdibV9yc3RfbiA9PSAxJ2IwICkgYmVnaW4KKyAgICAgICAgd2JfcmVxICAgIDw9ICcwOworCXdiX2RhdF9vIDw9ICcwOworCXdiX2Fja19vIDw9ICcwOworCXdiX2Vycl9vIDw9ICcwOworICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICB3Yl9yZXEgICA8PSB3Yl9zdGJfZDMgJiYgKCh3Yl9hY2tfbyA9PSAwKSAmJiAod2JfYWNrX28xID09IDApKSA7CisgICAgICAgd2JfYWNrX28gPD0gd2JfYWNrX28xOworICAgICAgIHdiX2Vycl9vIDw9IHdiX2Vycl9vMTsKKyAgICAgICBpZih3Yl9hY2tfbzEpIC8vIEtlZXAgbGFzdCBkYXRhIGluIHRoZSBidXMKKyAgICAgICAgICB3Yl9kYXRfbyA8PSB3Yl9kYXRfbzE7CisgICBlbmQKK2VuZAorCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIHJlZ2lzdGVyIGRlY2lkZSBiYXNlZCBvbiBhZGRyZXNzWzMxXSA9PSAxCisvLworLy8gTG9jYWxseSB0aGVyZSByZWdpc3RlciBhcmUgZGVmaW5lIHRvIGNvbnRyb2wgdGhlIHJlc2V0IGFuZCBjbG9jayBmb3IgdXNlcgorLy8gYXJlYQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gY2FyYXZlbCB1c2VyIHNwYWNlIGlzIDB4MzAwMF8wMDAwIHRvIDB4MzBGRl9GRkZGCisvLyBTbyB3ZSBoYXZlIGFsbG9jYXRlZCAKKy8vIDB4MzA4MF8wMDAwIC0gMHgzMDgwXzAwRkYgLSBBc3NpZ25lZCB0byBXQiBIb3N0IEFkZHJlc3MgU3BhY2UKKy8vIFNpbmNlIFdlIG5lZWQgbW9yZSB0aGFuIDE2TUIgQWRkcmVzcyBzcGFjZSB0byBhY2Nlc3MgU0RSQU0vU1BJIHdlIGhhdmUKKy8vIGFkZGVkIGluZGlyZWN0IE1TQiA4IGJpdCBhZGRyZXNzIHNlbGVjdCBvcHRpb24KKy8vIFNvIEFkZHJlc3Mgd2lsbCBiZSB7QmFua19TZWxbNzowXSwgd2JtX2Fkcl9pWzIzOjB9CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiByZWdfc2VsICAgICAgID0gd2JfcmVxICYgKHdiX2Fkcl9pWzIzXSA9PSAxJ2IxKTsKKworYXNzaWduIHN3X2FkZHIgICAgICAgPSB3Yl9hZHJfaSBbMzoyXTsKK2Fzc2lnbiBzd19yZF9lbiAgICAgID0gcmVnX3NlbCAmICF3Yl93ZV9pOworYXNzaWduIHN3X3dyX2VuICAgICAgPSByZWdfc2VsICYgd2Jfd2VfaTsKKworYXNzaWduICBzd193cl9lbl8wID0gc3dfd3JfZW4gJiYgKHN3X2FkZHI9PTApOworYXNzaWduICBzd193cl9lbl8xID0gc3dfd3JfZW4gJiYgKHN3X2FkZHI9PTEpOworYXNzaWduICBzd193cl9lbl8yID0gc3dfd3JfZW4gJiYgKHN3X2FkZHI9PTIpOworYXNzaWduICBzd193cl9lbl8zID0gc3dfd3JfZW4gJiYgKHN3X2FkZHI9PTMpOworCithbHdheXMgQCAocG9zZWRnZSB3Ym1fY2xrX2kgb3IgbmVnZWRnZSB3Ym1fcnN0X24pCitiZWdpbiA6IHByZWdfb3V0X1NlcQorICAgaWYgKHdibV9yc3RfbiA9PSAxJ2IwKQorICAgYmVnaW4KKyAgICAgIHJlZ19yZGF0YSAgPD0gJ2gwOworICAgICAgcmVnX2FjayAgICA8PSAxJ2IwOworICAgZW5kCisgICBlbHNlIGlmIChzd19yZF9lbiAmJiAhcmVnX2FjaykgCisgICBiZWdpbgorICAgICAgcmVnX3JkYXRhIDw9IHJlZ19vdXQgOworICAgICAgcmVnX2FjayAgIDw9IDEnYjE7CisgICBlbmQKKyAgIGVsc2UgaWYgKHN3X3dyX2VuICYmICFyZWdfYWNrKSAKKyAgICAgIHJlZ19hY2sgICAgICAgICAgPD0gMSdiMTsKKyAgIGVsc2UKKyAgIGJlZ2luCisgICAgICByZWdfYWNrICAgICAgICA8PSAxJ2IwOworICAgZW5kCitlbmQKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEdsb2JhbCArIENsb2NrIENvbnRyb2wKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiBjZmdfZ2xiX2N0cmwgICAgICAgICA9IHJlZ18wWzg6MF07Cithc3NpZ24gY2ZnX3diX2Nsa19jdHJsICAgICAgPSByZWdfMFsxMTo5XTsKK2Fzc2lnbiBjZmdfcnRjX2Nsa19jdHJsICAgICA9IHJlZ18wWzE5OjEyXTsKK2Fzc2lnbiBjZmdfY3B1X2Nsa19jdHJsICAgICA9IHJlZ18wWzIzOjIwXTsKK2Fzc2lnbiBjZmdfdXNiX2Nsa19jdHJsICAgICA9IHJlZ18wWzMxOjI4XTsKKworCithbHdheXMgQCggKikKK2JlZ2luIAorICByZWdfb3V0IFszMTowXSA9IDgnZDA7CisKKyAgY2FzZSAoc3dfYWRkciBbMTowXSkKKyAgICAyJ2IwMCA6ICAgcmVnX291dCBbMzE6MF0gPSByZWdfMDsKKyAgICAyJ2IwMSA6ICAgcmVnX291dCBbMzE6MF0gPSB7MjQnaDAsY2ZnX2Jhbmtfc2VsIFs3OjBdfTsgICAgIAorICAgIDInYjEwIDogICByZWdfb3V0IFszMTowXSA9IGNmZ19jbGtfY3RybDEgWzMxOjBdOyAgICAKKyAgICAyJ2IxMSA6ICAgcmVnX291dCBbMzE6MF0gPSBjZmdfY2xrX2N0cmwyIFszMTowXTsgICAgIAorICAgIGRlZmF1bHQgOiByZWdfb3V0IFszMTowXSA9ICdoMDsKKyAgZW5kY2FzZQorZW5kCisKKworCitnZW5lcmljX3JlZ2lzdGVyICMoMzIsMCAgKSB1X2dsYl9jdHJsICgKKwkgICAgICAud2UgICAgICAgICAgICAoezMye3N3X3dyX2VuXzB9fSAgICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHdiX2RhdF9pWzMxOjBdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHdibV9yc3RfbiAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKHdibV9jbGtfaSAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzBbMzE6MF0pCisgICAgICAgICAgKTsKKworZ2VuZXJpY19yZWdpc3RlciAjKDgsOCdoMTAgKSB1X2Jhbmtfc2VsICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMX19ICAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAod2JfZGF0X2lbNzowXSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgICh3Ym1fcnN0X24gICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgICh3Ym1fY2xrX2kgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKGNmZ19iYW5rX3NlbFs3OjBdICkKKyAgICAgICAgICApOworCisKK2dlbmVyaWNfcmVnaXN0ZXIgIygzMiwwICApIHVfY2xrX2N0cmwxICgKKwkgICAgICAud2UgICAgICAgICAgICAoezMye3N3X3dyX2VuXzJ9fSAgICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHdiX2RhdF9pWzMxOjBdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHdibV9yc3RfbiAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgICh3Ym1fY2xrX2kgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChjZmdfY2xrX2N0cmwxWzMxOjBdKQorICAgICAgICAgICk7CisKK2dlbmVyaWNfcmVnaXN0ZXIgIygzMiwwICApIHVfY2xrX2N0cmwyICgKKwkgICAgICAud2UgICAgICAgICAgICAoezMye3N3X3dyX2VuXzN9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAod2JfZGF0X2lbMzE6MF0gICApLAorCSAgICAgIC5yZXNldF9uICAgICAgICh3Ym1fcnN0X24gICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgICh3Ym1fY2xrX2kgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKGNmZ19jbGtfY3RybDJbMzE6MF0pCisgICAgICAgICAgKTsKKworCithc3NpZ24gd2Jfc3RiX2ludCA9IHdiX3JlcSAmICFyZWdfc2VsOworCisvLyBTaW5jZSBkZXNpZ24gbmVlZCBtb3JlIHRoYW4gMTZNQiBhZGRyZXNzIHNwYWNlLCB3ZSBoYXZlIGltcGxlbWVudGVkCisvLyBpbmRpcmVjdCBhY2Nlc3MKK2Fzc2lnbiB3Yl9hZHJfaW50ID0ge2NmZ19iYW5rX3NlbFs3OjBdLHdiX2Fkcl9pWzIzOjBdfTsgIAorCithc3luY193YiB1X2FzeW5jX3diKAorLy8gTWFzdGVyIFBvcnQKKyAgICAgICAud2JtX3JzdF9uICAgKHdibV9yc3RfbiAgICAgKSwgIAorICAgICAgIC53Ym1fY2xrX2kgICAod2JtX2Nsa19pICAgICApLCAgCisgICAgICAgLndibV9jeWNfaSAgICh3Yl9jeWNfaSAgICAgICksICAKKyAgICAgICAud2JtX3N0Yl9pICAgKHdiX3N0Yl9pbnQgICAgKSwgIAorICAgICAgIC53Ym1fYWRyX2kgICAod2JfYWRyX2ludCAgICApLCAgCisgICAgICAgLndibV93ZV9pICAgICh3Yl93ZV9pICAgICAgICksICAKKyAgICAgICAud2JtX2RhdF9pICAgKHdiX2RhdF9pICAgICAgKSwgIAorICAgICAgIC53Ym1fc2VsX2kgICAod2Jfc2VsX2kgICAgICApLCAgCisgICAgICAgLndibV9kYXRfbyAgICh3Yl9kYXRfaW50ICAgICksICAKKyAgICAgICAud2JtX2Fja19vICAgKHdiX2Fja19pbnQgICAgKSwgIAorICAgICAgIC53Ym1fZXJyX28gICAod2JfZXJyX2ludCAgICApLCAgCisKKy8vIFNsYXZlIFBvcnQKKyAgICAgICAud2JzX3JzdF9uICAgKHdic19yc3RfbiAgICAgKSwgIAorICAgICAgIC53YnNfY2xrX2kgICAod2JzX2Nsa19pICAgICApLCAgCisgICAgICAgLndic19jeWNfbyAgICh3YnNfY3ljX28gICAgICksICAKKyAgICAgICAud2JzX3N0Yl9vICAgKHdic19zdGJfbyAgICAgKSwgIAorICAgICAgIC53YnNfYWRyX28gICAod2JzX2Fkcl9vICAgICApLCAgCisgICAgICAgLndic193ZV9vICAgICh3YnNfd2VfbyAgICAgICksICAKKyAgICAgICAud2JzX2RhdF9vICAgKHdic19kYXRfbyAgICAgKSwgIAorICAgICAgIC53YnNfc2VsX28gICAod2JzX3NlbF9vICAgICApLCAgCisgICAgICAgLndic19kYXRfaSAgICh3YnNfZGF0X2kgICAgICksICAKKyAgICAgICAud2JzX2Fja19pICAgKHdic19hY2tfaSAgICAgKSwgIAorICAgICAgIC53YnNfZXJyX2kgICAod2JzX2Vycl9pICAgICApCisKKyAgICApOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gR2VuZXJhdGUgSW50ZXJuYWwgV2lzaEJvbmUgQ2xvY2sKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbG9naWMgICAgICAgd2JfY2xrX2RpdjsKK2xvZ2ljICAgICAgIGNmZ193Yl9jbGtfZGl2OworbG9naWMgWzE6MF0gY2ZnX3diX2Nsa19yYXRpbzsKKworYXNzaWduICAgIGNmZ193Yl9jbGtfcmF0aW8gPSAgY2ZnX3diX2Nsa19jdHJsWzE6MF07Cithc3NpZ24gICAgY2ZnX3diX2Nsa19kaXYgICA9ICBjZmdfd2JfY2xrX2N0cmxbMl07CisKKworLy9hc3NpZ24gd2JzX2Nsa19vdXQgID0gKGNmZ193Yl9jbGtfZGl2KSAgPyB3Yl9jbGtfZGl2IDogd2JtX2Nsa19pOworY3RlY2hfbXV4MngxIHVfd2JzX2Nsa19zZWwgKC5BMCAod2JtX2Nsa19pKSwgLkExICh3Yl9jbGtfZGl2KSwgLlMgIChjZmdfd2JfY2xrX2RpdiksIC5YICAod2JzX2Nsa19vdXQpKTsKKworCitjbGtfY3RsICMoMSkgdV93YmNsayAoCisgICAvLyBPdXRwdXRzCisgICAgICAgLmNsa19vICAgICAgICAgKHdiX2Nsa19kaXYgICAgICApLAorICAgLy8gSW5wdXRzCisgICAgICAgLm1jbGsgICAgICAgICAgKHdibV9jbGtfaSAgICAgICApLAorICAgICAgIC5yZXNldF9uICAgICAgICh3Ym1fcnN0X24gICAgICAgICksIAorICAgICAgIC5jbGtfZGl2X3JhdGlvIChjZmdfd2JfY2xrX3JhdGlvICkKKyAgICk7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBHZW5lcmF0ZSBDT1JFIENsb2NrIEdlbmVyYXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSAgIGNwdV9jbGtfZGl2Oword2lyZSAgIGNwdV9yZWZfY2xrOword2lyZSAgIGNwdV9jbGtfaW50OworCit3aXJlICAgICAgIGNmZ19jcHVfY2xrX3NyY19zZWwgICA9IGNmZ19jcHVfY2xrX2N0cmxbM107Cit3aXJlICAgICAgIGNmZ19jcHVfY2xrX2RpdiAgICAgICA9IGNmZ19jcHVfY2xrX2N0cmxbMl07Cit3aXJlIFsxOjBdIGNmZ19jcHVfY2xrX3JhdGlvICAgICA9IGNmZ19jcHVfY2xrX2N0cmxbMTowXTsKKworLy9hc3NpZ24gY3B1X3JlZl9jbGsgPSAoY2ZnX2NwdV9jbGtfc3JjX3NlbCkgPyB1c2VyX2Nsb2NrMiA6IHVzZXJfY2xvY2sxOworLy9hc3NpZ24gY3B1X2Nsa19pbnQgPSAoY2ZnX2NwdV9jbGtfZGl2KSAgICAgPyBjcHVfY2xrX2RpdiA6IGNwdV9yZWZfY2xrOworCitjdGVjaF9tdXgyeDEgdV9jcHVfcmVmX3NlbCAoLkEwICh1c2VyX2Nsb2NrMSksIC5BMSAodXNlcl9jbG9jazIpLCAuUyAgKGNmZ19jcHVfY2xrX3NyY19zZWwpLCAuWCAgKGNwdV9yZWZfY2xrKSk7CitjdGVjaF9tdXgyeDEgdV9jcHVfY2xrX3NlbCAoLkEwIChjcHVfcmVmX2NsayksIC5BMSAoY3B1X2Nsa19kaXYpLCAuUyAgKGNmZ19jcHVfY2xrX2RpdiksICAgICAuWCAgKGNwdV9jbGtfaW50KSk7CisKK2N0ZWNoX2Nsa19idWYgdV9jbGtidWZfY3B1ICguQSAoY3B1X2Nsa19pbnQpLCAuIFgoY3B1X2NsaykpOworCitjbGtfY3RsICMoMSkgdV9jcHVjbGsgKAorICAgLy8gT3V0cHV0cworICAgICAgIC5jbGtfbyAgICAgICAgIChjcHVfY2xrX2RpdiAgICAgICksCisgICAvLyBJbnB1dHMKKyAgICAgICAubWNsayAgICAgICAgICAoY3B1X3JlZl9jbGsgICAgICApLAorICAgICAgIC5yZXNldF9uICAgICAgICh3Ym1fcnN0X24gICAgICAgICksIAorICAgICAgIC5jbGtfZGl2X3JhdGlvIChjZmdfY3B1X2Nsa19yYXRpbykKKyAgICk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gR2VuZXJhdGUgUlRDIENsb2NrIEdlbmVyYXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSAgIHJ0Y19jbGtfZGl2Oword2lyZSBbNzowXSBjZmdfcnRjX2Nsa19yYXRpbyAgICAgPSBjZmdfcnRjX2Nsa19jdHJsWzc6MF07CisKKworY3RlY2hfY2xrX2J1ZiB1X2Nsa2J1Zl9ydGMgKC5BIChydGNfY2xrX2RpdiksIC4gWChydGNfY2xrKSk7CisKK2Nsa19jdGwgIyg3KSB1X3J0Y2NsayAoCisgICAvLyBPdXRwdXRzCisgICAgICAgLmNsa19vICAgICAgICAgKHJ0Y19jbGtfZGl2ICAgICAgKSwKKyAgIC8vIElucHV0cworICAgICAgIC5tY2xrICAgICAgICAgICh1c2VyX2Nsb2NrMiAgICAgICksCisgICAgICAgLnJlc2V0X24gICAgICAgKHdibV9yc3RfbiAgICAgICAgKSwgCisgICAgICAgLmNsa19kaXZfcmF0aW8gKGNmZ19ydGNfY2xrX3JhdGlvKQorICAgKTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEdlbmVyYXRlIFVTQiBDbG9jayBHZW5lcmF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpcmUgICB1c2JfY2xrX2RpdjsKK3dpcmUgICB1c2JfcmVmX2NsazsKK3dpcmUgICB1c2JfY2xrX2ludDsKKword2lyZSAgICAgICBjZmdfdXNiX2Nsa19kaXYgICAgICAgPSBjZmdfdXNiX2Nsa19jdHJsWzNdOword2lyZSBbMjowXSBjZmdfdXNiX2Nsa19yYXRpbyAgICAgPSBjZmdfdXNiX2Nsa19jdHJsWzI6MF07CisKK2Fzc2lnbiB1c2JfcmVmX2NsayA9IHVzZXJfY2xvY2syIDsKKy8vYXNzaWduIHVzYl9jbGtfaW50ID0gKGNmZ191c2JfY2xrX2RpdikgICAgID8gdXNiX2Nsa19kaXYgOiB1c2JfcmVmX2NsazsKK2N0ZWNoX211eDJ4MSB1X3VzYl9jbGtfc2VsICguQTAgKHVzYl9yZWZfY2xrKSwgLkExICh1c2JfY2xrX2RpdiksIC5TICAoY2ZnX3VzYl9jbGtfZGl2KSwgLlggICh1c2JfY2xrX2ludCkpOworCisKK2N0ZWNoX2Nsa19idWYgdV9jbGtidWZfdXNiICguQSAodXNiX2Nsa19pbnQpLCAuIFgodXNiX2NsaykpOworCitjbGtfY3RsICMoMikgdV91c2JjbGsgKAorICAgLy8gT3V0cHV0cworICAgICAgIC5jbGtfbyAgICAgICAgICh1c2JfY2xrX2RpdiAgICAgICksCisgICAvLyBJbnB1dHMKKyAgICAgICAubWNsayAgICAgICAgICAodXNiX3JlZl9jbGsgICAgICApLAorICAgICAgIC5yZXNldF9uICAgICAgICh3Ym1fcnN0X24gICAgICAgICksIAorICAgICAgIC5jbGtfZGl2X3JhdGlvIChjZmdfdXNiX2Nsa19yYXRpbykKKyAgICk7CisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvd2JfaW50ZXJjb25uZWN0L3NyYy93Yl9hcmIuc3YgYi92ZXJpbG9nL3J0bC93Yl9pbnRlcmNvbm5lY3Qvc3JjL3diX2FyYi5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWZhYzRhCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvd2JfaW50ZXJjb25uZWN0L3NyYy93Yl9hcmIuc3YKQEAgLTAsMCArMSwxNDYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgV2lzaGJvbmUgQXJiaXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFlJRml2ZSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWlmaXZlX3IwLmdpdCAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3lpZml2ZS8gICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIFRoaXMgYmxvY2sgaW1wbGVtZW50IHNpbXBsZSByb3VuZCByb2JpbmUgcmVxdWVzdCAgICAgICAgLy8vLworLy8gICAgICAgIGFyYml0b3IgZm9yIHdpc2hib25lIGludGVyZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjEgLSAxMnRoIEp1bmUgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLworLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLworLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLworLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLworLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLworLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLworLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLworLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLworLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisKK21vZHVsZSB3Yl9hcmIoY2xrLCByc3RuLCByZXEsIGdudCk7CisKK2lucHV0CQljbGs7CitpbnB1dAkJcnN0bjsKK2lucHV0CVszOjBdCXJlcTsJLy8gUmVxIGlucHV0CitvdXRwdXQJWzE6MF0JZ250OyAJLy8gR3JhbnQgb3V0cHV0CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gUGFyYW1ldGVycworLy8KKworCitwYXJhbWV0ZXIJWzE6MF0KKyAgICAgICAgICAgICAgICBncmFudDAgPSAzJ2gwLAorICAgICAgICAgICAgICAgIGdyYW50MSA9IDMnaDEsCisgICAgICAgICAgICAgICAgZ3JhbnQyID0gMydoMiwKKyAgICAgICAgICAgICAgICBncmFudDMgPSAzJ2gzOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gTG9jYWwgUmVnaXN0ZXJzIGFuZCBXaXJlcworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCityZWcgWzE6MF0Jc3RhdGUsIG5leHRfc3RhdGU7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgTWlzYyBMb2dpYyAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYXNzaWduCWdudCA9IHN0YXRlOworCithbHdheXNAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKKwlpZighcnN0bikgICAgICAgc3RhdGUgPD0gZ3JhbnQwOworCWVsc2UJCXN0YXRlIDw9IG5leHRfc3RhdGU7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTmV4dCBTdGF0ZSBMb2dpYyAKKy8vICAgLSBpbXBsZW1lbnRzIHJvdW5kIHJvYmluIGFyYml0cmF0aW9uIGFsZ29yaXRobQorLy8gICAtIHN3aXRjaGVzIGdyYW50IGlmIGN1cnJlbnQgcmVxIGlzIGRyb3BwZWQgb3IgbmV4dCBpcyBhc3NlcnRlZAorLy8gICAtIHBhcmtzIGF0IGxhc3QgZ3JhbnQKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYWx3YXlzQChzdGF0ZSBvciByZXEgKQorICAgYmVnaW4KKyAgICAgIG5leHRfc3RhdGUgPSBzdGF0ZTsJLy8gRGVmYXVsdCBLZWVwIFN0YXRlCisgICAgICBjYXNlKHN0YXRlKQkJCisgICAgICAgICBncmFudDA6CisgICAgICAJLy8gaWYgdGhpcyByZXEgaXMgZHJvcHBlZCBvciBuZXh0IGlzIGFzc2VydGVkLCBjaGVjayBmb3Igb3RoZXIgcmVxJ3MKKyAgICAgIAlpZighcmVxWzBdICkgYmVnaW4KKyAgICAgIAkJaWYocmVxWzFdKQluZXh0X3N0YXRlID0gZ3JhbnQxOworICAgICAgCQllbHNlIGlmKHJlcVsyXSkJbmV4dF9zdGF0ZSA9IGdyYW50MjsKKyAgICAgIAkJZWxzZSBpZihyZXFbM10pCW5leHRfc3RhdGUgPSBncmFudDM7CisgICAgICAJZW5kCisgICAgICAgICBncmFudDE6CisgICAgICAJLy8gaWYgdGhpcyByZXEgaXMgZHJvcHBlZCBvciBuZXh0IGlzIGFzc2VydGVkLCBjaGVjayBmb3Igb3RoZXIgcmVxJ3MKKyAgICAgIAlpZighcmVxWzFdICkgYmVnaW4KKyAgICAgIAkJaWYocmVxWzJdKQluZXh0X3N0YXRlID0gZ3JhbnQyOworICAgICAgCQlpZihyZXFbM10pCW5leHRfc3RhdGUgPSBncmFudDM7CisgICAgICAJCWVsc2UgaWYocmVxWzBdKQluZXh0X3N0YXRlID0gZ3JhbnQwOworICAgICAgCWVuZAorICAgICAgICAgZ3JhbnQyOgorICAgICAgCS8vIGlmIHRoaXMgcmVxIGlzIGRyb3BwZWQgb3IgbmV4dCBpcyBhc3NlcnRlZCwgY2hlY2sgZm9yIG90aGVyIHJlcSdzCisgICAgICAJaWYoIXJlcVsyXSApIGJlZ2luCisgICAgICAJICAgaWYocmVxWzBdKQkgICAgICAgIG5leHRfc3RhdGUgPSBncmFudDA7CisgICAgICAJICAgZWxzZSBpZihyZXFbMV0pCW5leHRfc3RhdGUgPSBncmFudDE7CisgICAgICAJICAgZWxzZSBpZihyZXFbM10pCW5leHRfc3RhdGUgPSBncmFudDM7CisgICAgICAJZW5kCisgICAgICAgICBncmFudDM6CisgICAgICAJLy8gaWYgdGhpcyByZXEgaXMgZHJvcHBlZCBvciBuZXh0IGlzIGFzc2VydGVkLCBjaGVjayBmb3Igb3RoZXIgcmVxJ3MKKyAgICAgIAlpZighcmVxWzNdICkgYmVnaW4KKyAgICAgIAkgICBpZihyZXFbMF0pCSAgICAgICAgbmV4dF9zdGF0ZSA9IGdyYW50MDsKKyAgICAgIAkgICBlbHNlIGlmKHJlcVsxXSkJbmV4dF9zdGF0ZSA9IGdyYW50MTsKKyAgICAgIAkgICBlbHNlIGlmKHJlcVsyXSkJbmV4dF9zdGF0ZSA9IGdyYW50MjsKKyAgICAgIAllbmQKKyAgICAgIGVuZGNhc2UKKyAgIGVuZAorCitlbmRtb2R1bGUgCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3diX2ludGVyY29ubmVjdC9zcmMvd2JfaW50ZXJjb25uZWN0LnN2IGIvdmVyaWxvZy9ydGwvd2JfaW50ZXJjb25uZWN0L3NyYy93Yl9pbnRlcmNvbm5lY3Quc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYyMmQ3MgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3diX2ludGVyY29ubmVjdC9zcmMvd2JfaW50ZXJjb25uZWN0LnN2CkBAIC0wLDAgKzEsNjA5IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFdpc2hib25lIEludGVyY29ubmVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8JMS4gMyBtYXN0ZXJzIGFuZCAzIHNsYXZlcyBzaGFyZSBidXMgV2lzaGJvbmUgY29ubmVjdGlvbiAgIC8vLy8KKy8vLy8JMi4gVGhpcyBibG9jayBpbXBsZW1lbnQgc2ltcGxlIHJvdW5kIHJvYmluZSByZXF1ZXN0ICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMTJ0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4yIC0gMTd0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgU3RhZ2dpbmcgRkYgYWRkZWQgYXQgU2xhdmUgSW50ZXJmYWNlIHRvIGJyZWFrICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgcGF0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4zIC0gMjF0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgc2xhdmUgcG9ydCAzIGFkZGVkIGZvciB1YXJ0ICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC40IC0gMjV0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgRXh0ZXJuYWwgTWVtb3J5IE1hcCBjaGFuZ2VkIGFuZCBtYWRlIHNhbWUgYXMgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgaW50ZXJuYWwgbWVtb3J5IG1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC40IC0gMjd0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgdW51c2VkIHRpZSBvZmYgYXQgZGlnaXRhbCBjb3JlIGxldmVsIGJyb3VnaHQgaW5zaWRlIC8vLy8KKy8vLy8gICAgICAgICAgdG8gYXZvaWQgY29yZSBsZXZlbCBwb3dlciBob29rIHVwICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC41IC0gMjh0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgaW50ZXJjaGFuZ2UgdGhlIE1hc3RlciBwb3J0IGZvciBiZXR0ZXIgcGh5c2ljYWwgICAgIC8vLy8KKy8vLy8gICAgICAgICAgcGxhY2VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgbTA6IGV4dGVybmFsIGhvc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgbTE6IHJpc2MgaW1lbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgbTI6IHJpc2MgZG1lbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAwLjYgLSAwNiBOb3YgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgUHVzaCB0aGUgY2xvY2sgc2tldyBsb2dpYyBpbnNpZGUgdGhlIGJsb2NrIGR1ZSB0byAgIC8vLy8KKy8vLy8gICAgICAgICAgZ2xvYmFsIHBvd2VyIGhvb2tpbmcgY2hhbGxhbmdlcyBmb3Igc21hbGwgYmxvY2sgYXQgIC8vLy8KKy8vLy8gICAgICAgICAgdG9wIGxldmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAwLjcgLSAwNyBEZWMgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICBCdWZmZXIgY2hhbm5lbCBhcmUgYWRkZWQgaW5zaWRlciB3Yl9pbnRlciB0byBzaW1wbHkgIC8vLy8KKy8vLy8gICAgICAgICBnbG9iYWwgcm91dGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAwLjggIC0xMCBEZWMgMjAyMSAsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICB0d28gbW9yZSBzbGF2ZSBwb3J0IGFkZGVkIGZvciBNQklTVCBhbmQgQURDIHBvcnQgICAgIC8vLy8KKy8vLy8gICAgICAgICByZW1vdmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICBNZW1vcnkgcmVtYXAgYWRkZWQgdG8gbW92ZSB0aGUgUklTQyBQcm9ncmFtIG1lbW9yeSAgIC8vLy8KKy8vLy8gICAgICAgICB0byBTUkFNIE1lbW9yeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAwLjkgIC0gMTUgRGVjIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICBDb25zb2xpZGF0ZWQgNCBNQklTVCBwb3J0IGludG8gb25lIDhLQiBQb3J0ICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworCisKK21vZHVsZSB3Yl9pbnRlcmNvbm5lY3QgIygKKwlwYXJhbWV0ZXIgQ0hfQ0xLX1dEID0gNywKKwlwYXJhbWV0ZXIgQ0hfREFUQV9XRCA9IDEwMworICAgICAgICApICgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgICAgICAgaW5wdXQgbG9naWMgICAgICAgICAgICB2Y2NkMSwgICAgLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICAgICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgdnNzZDEsICAgIC8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKwkgLy8gQnVzIHJlcGVhdGVycworCSBpbnB1dCBbQ0hfQ0xLX1dELTE6MF0gIGNoX2Nsa19pbiwKKwkgb3V0cHV0IFtDSF9DTEtfV0QtMTowXSBjaF9jbGtfb3V0LAorCSBpbnB1dCBbQ0hfREFUQV9XRC0xOjBdIGNoX2RhdGFfaW4sCisJIG91dHB1dCBbQ0hfREFUQV9XRC0xOjBdY2hfZGF0YV9vdXQsCisKKyAgICAgICAgIC8vIENsb2NrIFNrZXcgQWRqdXN0CisgICAgICAgICBpbnB1dCBsb2dpYyBbMzowXSAgICAgIGNmZ19jc2thX3dpLAorICAgICAgICAgaW5wdXQgbG9naWMgICAgICAgICAgICB3YmRfY2xrX2ludCwKKwkgb3V0cHV0IGxvZ2ljICAgICAgICAgICB3YmRfY2xrX3dpLAorCisKKyAgICAgICAgIGlucHV0IGxvZ2ljCQljbGtfaSwgCisgICAgICAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgIHJzdF9uLAorCisJIGlucHV0IGxvZ2ljICBbMzowXSAgICAgYm9vdF9yZW1hcCwgLy8gV2hlbiByZW1hcCBpcyBlbmFibGVkCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFswXSAtIDB4MDAwMF8wMDAwIC0gMHgwMDAwXzA3RkYgTWFwIHRvIE1CSVNUMQorCQkJCQkgICAgIC8vIFsxXSAtIDB4MDAwMF8wODAwIC0gMHgwMDAwXzBGRkYgTWFwIHRvIE1CSVNUMgorCQkJCQkgICAgIC8vIFsyXSAtIDB4MDAwMF8xMDAwIC0gMHgwMDAwXzE3RkYgTWFwIHRvIE1CSVNUMworCQkJCQkgICAgIC8vIFszXSAtIDB4MDAwMF8xODAwIC0gMHgwMDAwXzFGRkYgTWFwIHRvIE1CSVNUNAorCSBpbnB1dCBsb2dpYyAgWzM6MF0gICAgIGRjYWNoZV9yZW1hcCwgLy8gV2hlbiBkY2FjaGUgcmVtYXAgaXMgZW5hYmxlZCwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFswXSAtIDB4MDgwMF8wMDAwIC0gMHgwODAwXzA3RkYgTWFwIHRvIE1CSVNUMQorCQkJCQkgICAgIC8vIFsxXSAtIDB4MDgwMF8wODAwIC0gMHgwODAwXzBGRkYgTWFwIHRvIE1CSVNUMgorCQkJCQkgICAgIC8vIFsyXSAtIDB4MDgwMF8xMDAwIC0gMHgwODAwXzE3RkYgTWFwIHRvIE1CSVNUMworCQkJCQkgICAgIC8vIFszXSAtIDB4MDgwMF8xODAwIC0gMHgwODAwXzFGRkYgTWFwIHRvIE1CSVNUNAorICAgICAgICAgCisgICAgICAgICAvLyBNYXN0ZXIgMCBJbnRlcmZhY2UKKyAgICAgICAgIGlucHV0ICAgbG9naWMJWzMxOjBdCW0wX3diZF9kYXRfaSwKKyAgICAgICAgIGlucHV0ICAgbG9naWMgIFszMTowXQltMF93YmRfYWRyX2ksCisgICAgICAgICBpbnB1dCAgIGxvZ2ljICBbMzowXQltMF93YmRfc2VsX2ksCisgICAgICAgICBpbnB1dCAgIGxvZ2ljICAJbTBfd2JkX3dlX2ksCisgICAgICAgICBpbnB1dCAgIGxvZ2ljICAJbTBfd2JkX2N5Y19pLAorICAgICAgICAgaW5wdXQgICBsb2dpYyAgCW0wX3diZF9zdGJfaSwKKyAgICAgICAgIG91dHB1dCAgbG9naWMJWzMxOjBdCW0wX3diZF9kYXRfbywKKyAgICAgICAgIG91dHB1dCAgbG9naWMJCW0wX3diZF9hY2tfbywKKyAgICAgICAgIG91dHB1dCAgbG9naWMJCW0wX3diZF9sYWNrX28sCisgICAgICAgICBvdXRwdXQgIGxvZ2ljCQltMF93YmRfZXJyX28sCisgICAgICAgICAKKyAgICAgICAgIC8vIE1hc3RlciAxIEludGVyZmFjZQorICAgICAgICAgaW5wdXQJbG9naWMgWzMxOjBdCW0xX3diZF9kYXRfaSwKKyAgICAgICAgIGlucHV0CWxvZ2ljIFszMTowXQltMV93YmRfYWRyX2ksCisgICAgICAgICBpbnB1dAlsb2dpYyBbMzowXQltMV93YmRfc2VsX2ksCisgICAgICAgICBpbnB1dAlsb2dpYyAJICAgICAgICBtMV93YmRfd2VfaSwKKyAgICAgICAgIGlucHV0CWxvZ2ljIAkgICAgICAgIG0xX3diZF9jeWNfaSwKKyAgICAgICAgIGlucHV0CWxvZ2ljIAkgICAgICAgIG0xX3diZF9zdGJfaSwKKyAgICAgICAgIG91dHB1dAlsb2dpYyBbMzE6MF0JbTFfd2JkX2RhdF9vLAorICAgICAgICAgb3V0cHV0CWxvZ2ljIAkgICAgICAgIG0xX3diZF9hY2tfbywKKyAgICAgICAgIG91dHB1dAlsb2dpYyAJICAgICAgICBtMV93YmRfbGFja19vLAorICAgICAgICAgb3V0cHV0CWxvZ2ljIAkgICAgICAgIG0xX3diZF9lcnJfbywKKyAgICAgICAgIAorICAgICAgICAgLy8gTWFzdGVyIDIgSW50ZXJmYWNlCisgICAgICAgICBpbnB1dAlsb2dpYyBbMzE6MF0JbTJfd2JkX2RhdF9pLAorICAgICAgICAgaW5wdXQJbG9naWMgWzMxOjBdCW0yX3diZF9hZHJfaSwKKyAgICAgICAgIGlucHV0CWxvZ2ljIFszOjBdCW0yX3diZF9zZWxfaSwKKyAgICAgICAgIGlucHV0CWxvZ2ljIFs5OjBdCW0yX3diZF9ibF9pLAorICAgICAgICAgaW5wdXQJbG9naWMgICAgCW0yX3diZF9icnlfaSwKKyAgICAgICAgIGlucHV0CWxvZ2ljIAkgICAgICAgIG0yX3diZF93ZV9pLAorICAgICAgICAgaW5wdXQJbG9naWMgCSAgICAgICAgbTJfd2JkX2N5Y19pLAorICAgICAgICAgaW5wdXQJbG9naWMgCSAgICAgICAgbTJfd2JkX3N0Yl9pLAorICAgICAgICAgb3V0cHV0CWxvZ2ljIFszMTowXQltMl93YmRfZGF0X28sCisgICAgICAgICBvdXRwdXQJbG9naWMgCSAgICAgICAgbTJfd2JkX2Fja19vLAorICAgICAgICAgb3V0cHV0CWxvZ2ljIAkgICAgICAgIG0yX3diZF9sYWNrX28sCisgICAgICAgICBvdXRwdXQJbG9naWMgCSAgICAgICAgbTJfd2JkX2Vycl9vLAorICAgICAgICAgCisgICAgICAgICAvLyBNYXN0ZXIgMyBJbnRlcmZhY2UKKyAgICAgICAgIGlucHV0CWxvZ2ljIFszMTowXQltM193YmRfYWRyX2ksCisgICAgICAgICBpbnB1dAlsb2dpYyBbMzowXQltM193YmRfc2VsX2ksCisgICAgICAgICBpbnB1dAlsb2dpYyBbOTowXQltM193YmRfYmxfaSwKKyAgICAgICAgIGlucHV0CWxvZ2ljICAgIAltM193YmRfYnJ5X2ksCisgICAgICAgICBpbnB1dAlsb2dpYyAJICAgICAgICBtM193YmRfd2VfaSwKKyAgICAgICAgIGlucHV0CWxvZ2ljIAkgICAgICAgIG0zX3diZF9jeWNfaSwKKyAgICAgICAgIGlucHV0CWxvZ2ljIAkgICAgICAgIG0zX3diZF9zdGJfaSwKKyAgICAgICAgIG91dHB1dAlsb2dpYyBbMzE6MF0JbTNfd2JkX2RhdF9vLAorICAgICAgICAgb3V0cHV0CWxvZ2ljIAkgICAgICAgIG0zX3diZF9hY2tfbywKKyAgICAgICAgIG91dHB1dAlsb2dpYyAJICAgICAgICBtM193YmRfbGFja19vLAorICAgICAgICAgb3V0cHV0CWxvZ2ljIAkgICAgICAgIG0zX3diZF9lcnJfbywKKyAgICAgICAgIAorICAgICAgICAgLy8gU2xhdmUgMCBJbnRlcmZhY2UKKyAgICAgICAgIGlucHV0CWxvZ2ljIFszMTowXQlzMF93YmRfZGF0X2ksCisgICAgICAgICBpbnB1dAlsb2dpYyAJICAgICAgICBzMF93YmRfYWNrX2ksCisgICAgICAgICBpbnB1dAlsb2dpYyAJICAgICAgICBzMF93YmRfbGFja19pLAorICAgICAgICAgLy9pbnB1dAlsb2dpYyAJczBfd2JkX2Vycl9pLCAtIHVudXNlZAorICAgICAgICAgb3V0cHV0CWxvZ2ljIFszMTowXQlzMF93YmRfZGF0X28sCisgICAgICAgICBvdXRwdXQJbG9naWMgWzMxOjBdCXMwX3diZF9hZHJfbywKKyAgICAgICAgIG91dHB1dAlsb2dpYyBbMzowXQlzMF93YmRfc2VsX28sCisgICAgICAgICBvdXRwdXQJbG9naWMgWzk6MF0JczBfd2JkX2JsX28sCisgICAgICAgICBvdXRwdXQJbG9naWMgCSAgICAgICAgczBfd2JkX2JyeV9vLAorICAgICAgICAgb3V0cHV0CWxvZ2ljIAkgICAgICAgIHMwX3diZF93ZV9vLAorICAgICAgICAgb3V0cHV0CWxvZ2ljIAkgICAgICAgIHMwX3diZF9jeWNfbywKKyAgICAgICAgIG91dHB1dAlsb2dpYyAJICAgICAgICBzMF93YmRfc3RiX28sCisgICAgICAgICAKKyAgICAgICAgIC8vIFNsYXZlIDEgSW50ZXJmYWNlCisgICAgICAgICBpbnB1dAlsb2dpYyBbMzE6MF0JczFfd2JkX2RhdF9pLAorICAgICAgICAgaW5wdXQJbG9naWMgCSAgICAgICAgczFfd2JkX2Fja19pLAorICAgICAgICAgLy8gaW5wdXQJbG9naWMgCXMxX3diZF9lcnJfaSwgLSB1bnVzZWQKKyAgICAgICAgIG91dHB1dAlsb2dpYyBbMzE6MF0JczFfd2JkX2RhdF9vLAorICAgICAgICAgb3V0cHV0CWxvZ2ljIFs3OjBdCXMxX3diZF9hZHJfbywKKyAgICAgICAgIG91dHB1dAlsb2dpYyBbMzowXQlzMV93YmRfc2VsX28sCisgICAgICAgICBvdXRwdXQJbG9naWMgCSAgICAgICAgczFfd2JkX3dlX28sCisgICAgICAgICBvdXRwdXQJbG9naWMgCSAgICAgICAgczFfd2JkX2N5Y19vLAorICAgICAgICAgb3V0cHV0CWxvZ2ljIAkgICAgICAgIHMxX3diZF9zdGJfbywKKyAgICAgICAgIAorICAgICAgICAgLy8gU2xhdmUgMiBJbnRlcmZhY2UKKyAgICAgICAgIGlucHV0CWxvZ2ljIFszMTowXQlzMl93YmRfZGF0X2ksCisgICAgICAgICBpbnB1dAlsb2dpYyAJICAgICAgICBzMl93YmRfYWNrX2ksCisgICAgICAgICAvLyBpbnB1dAlsb2dpYyAJczJfd2JkX2Vycl9pLCAtIHVudXNlZAorICAgICAgICAgb3V0cHV0CWxvZ2ljIFszMTowXQlzMl93YmRfZGF0X28sCisgICAgICAgICBvdXRwdXQJbG9naWMgWzc6MF0JczJfd2JkX2Fkcl9vLCAvLyBnbGJsIHJlZyBuZWVkIG9ubHkgOCBiaXRzCisgICAgICAgICBvdXRwdXQJbG9naWMgWzM6MF0JczJfd2JkX3NlbF9vLAorICAgICAgICAgb3V0cHV0CWxvZ2ljIAkgICAgICAgIHMyX3diZF93ZV9vLAorICAgICAgICAgb3V0cHV0CWxvZ2ljIAkgICAgICAgIHMyX3diZF9jeWNfbywKKyAgICAgICAgIG91dHB1dAlsb2dpYyAJICAgICAgICBzMl93YmRfc3RiX28sCisKKyAgICAgICAgIC8vIFNsYXZlIDMgSW50ZXJmYWNlCisJIC8vIE1CSVNUCisgICAgICAgICBpbnB1dAlsb2dpYyBbMzE6MF0JczNfd2JkX2RhdF9pLAorICAgICAgICAgaW5wdXQJbG9naWMgCSAgICAgICAgczNfd2JkX2Fja19pLAorICAgICAgICAgaW5wdXQJbG9naWMgCSAgICAgICAgczNfd2JkX2xhY2tfaSwKKyAgICAgICAgIC8vIGlucHV0CWxvZ2ljIAlzM193YmRfZXJyX2ksCisgICAgICAgICBvdXRwdXQJbG9naWMgWzMxOjBdCXMzX3diZF9kYXRfbywKKyAgICAgICAgIG91dHB1dAlsb2dpYyBbMTI6MF0JczNfd2JkX2Fkcl9vLCAKKyAgICAgICAgIG91dHB1dAlsb2dpYyBbMzowXSAgIAlzM193YmRfc2VsX28sCisgICAgICAgICBvdXRwdXQJbG9naWMgWzk6MF0gICAJczNfd2JkX2JsX28sCisgICAgICAgICBvdXRwdXQJbG9naWMgICAgCXMzX3diZF9icnlfbywKKyAgICAgICAgIG91dHB1dAlsb2dpYyAJICAgICAgICBzM193YmRfd2VfbywKKyAgICAgICAgIG91dHB1dAlsb2dpYyAJICAgICAgICBzM193YmRfY3ljX28sCisgICAgICAgICBvdXRwdXQJbG9naWMgCSAgICAgICAgczNfd2JkX3N0Yl9vCisJKTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBUeXBlIGRlZmluZQorLy8KKworcGFyYW1ldGVyIFRBUkdFVF9TUElfTUVNICA9IDQnYjAwMDA7CitwYXJhbWV0ZXIgVEFSR0VUX1NQSV9SRUcgID0gNCdiMDAwMDsKK3BhcmFtZXRlciBUQVJHRVRfVUFSVCAgICAgPSA0J2IwMDAxOworcGFyYW1ldGVyIFRBUkdFVF9QSU5NVVggICA9IDQnYjAwMTA7CitwYXJhbWV0ZXIgVEFSR0VUX01CSVNUICAgID0gNCdiMDAxMTsKKworLy8gV2lzaEJvbmUgV3IgSW50ZXJmYWNlCit0eXBlZGVmIHN0cnVjdCBwYWNrZWQgeyAKKyAgbG9naWMJWzMxOjBdCXdiZF9kYXQ7CisgIGxvZ2ljICBbMzE6MF0Jd2JkX2FkcjsKKyAgbG9naWMgIFszOjBdCXdiZF9zZWw7CisgIGxvZ2ljICBbOTowXQl3YmRfYmw7CisgIGxvZ2ljICAJd2JkX2JyeTsKKyAgbG9naWMgIAl3YmRfd2U7CisgIGxvZ2ljICAJd2JkX2N5YzsKKyAgbG9naWMgIAl3YmRfc3RiOworICBsb2dpYyBbMzowXSAJd2JkX3RpZDsgLy8gdGFyZ2V0IGlkCit9IHR5cGVfd2Jfd3JfaW50ZjsKKworLy8gV2lzaEJvbmUgUmQgSW50ZXJmYWNlCit0eXBlZGVmIHN0cnVjdCBwYWNrZWQgeyAKKyAgbG9naWMJWzMxOjBdCXdiZF9kYXQ7CisgIGxvZ2ljICAJd2JkX2FjazsKKyAgbG9naWMgIAl3YmRfbGFjazsKKyAgbG9naWMgIAl3YmRfZXJyOworfSB0eXBlX3diX3JkX2ludGY7CisKKworLy8gTWFzdGVyIFdyaXRlIEludGVyZmFjZQordHlwZV93Yl93cl9pbnRmICBtMF93Yl93cjsKK3R5cGVfd2Jfd3JfaW50ZiAgbTFfd2Jfd3I7Cit0eXBlX3diX3dyX2ludGYgIG0yX3diX3dyOwordHlwZV93Yl93cl9pbnRmICBtM193Yl93cjsKKworLy8gTWFzdGVyIFJlYWQgSW50ZXJmYWNlCit0eXBlX3diX3JkX2ludGYgIG0wX3diX3JkOwordHlwZV93Yl9yZF9pbnRmICBtMV93Yl9yZDsKK3R5cGVfd2JfcmRfaW50ZiAgbTJfd2JfcmQ7Cit0eXBlX3diX3JkX2ludGYgIG0zX3diX3JkOworCisvLyBTbGF2ZSBXcml0ZSBJbnRlcmZhY2UKK3R5cGVfd2Jfd3JfaW50ZiAgczBfd2Jfd3I7Cit0eXBlX3diX3dyX2ludGYgIHMxX3diX3dyOwordHlwZV93Yl93cl9pbnRmICBzMl93Yl93cjsKK3R5cGVfd2Jfd3JfaW50ZiAgczNfd2Jfd3I7CisKKy8vIFNsYXZlIFJlYWQgSW50ZXJmYWNlCit0eXBlX3diX3JkX2ludGYgIHMwX3diX3JkOwordHlwZV93Yl9yZF9pbnRmICBzMV93Yl9yZDsKK3R5cGVfd2JfcmRfaW50ZiAgczJfd2JfcmQ7Cit0eXBlX3diX3JkX2ludGYgIHMzX3diX3JkOworCisKK3R5cGVfd2Jfd3JfaW50ZiAgbV9idXNfd3I7ICAvLyBNdWx0aXBsZXhlZCBNYXN0ZXIgSS9GCit0eXBlX3diX3JkX2ludGYgIG1fYnVzX3JkOyAgLy8gTXVsdGlwbGV4ZWQgU2xhdmUgSS9GCisKK3R5cGVfd2Jfd3JfaW50ZiAgc19idXNfd3I7ICAvLyBNdWx0aXBsZXhlZCBNYXN0ZXIgSS9GCit0eXBlX3diX3JkX2ludGYgIHNfYnVzX3JkOyAgLy8gTXVsdGlwbGV4ZWQgU2xhdmUgSS9GCisKKy8vIGNoYW5uZWwgcmVwZWF0ZXIKK2Fzc2lnbiBjaF9jbGtfb3V0ICA9IGNoX2Nsa19pbjsKK2Fzc2lnbiBjaF9kYXRhX291dCA9IGNoX2RhdGFfaW47CisKKy8vIFdpc2hib25lIGludGVyY29ubmVjdCBjbG9jayBza2V3IGNvbnRyb2wKK2Nsa19za2V3X2FkanVzdCB1X3NrZXdfd2kKKyAgICAgICAoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgICAgICAgIC52Y2NkMSAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgICAgICAudnNzZDEgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisJICAgICAgIC5jbGtfaW4gICAgICh3YmRfY2xrX2ludCAgICAgICAgICAgICAgICAgKSwgCisJICAgICAgIC5zZWwgICAgICAgIChjZmdfY3NrYV93aSAgICAgICAgICAgICAgICAgKSwgCisJICAgICAgIC5jbGtfb3V0ICAgICh3YmRfY2xrX3dpICAgICAgICAgICAgICAgICAgKSAKKyAgICAgICApOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEVYVEVSTkFMIE1FTU9SWSBNQVAKKy8vIDB4MDAwMF8wMDAwIHRvIDB4MEZGRl9GRkZGICAtIFFTUEkgTUVNT1JZCisvLyAweDEwMDBfMDAwMCB0byAweDEwMDBfMDBGRiAgLSBRU1BJTSBSRUcKKy8vIDB4MTAwMV8wMDAwIHRvIDB4MTAwMV8wMDNGICAtIFVBUlQKKy8vIDB4MTAwMV8wMDQwIHRvIDB4MTAwMV8wMDdGICAtIEkyQworLy8gMHgxMDAxXzAwODAgdG8gMHgxMDAxXzAwQkYgIC0gVVNCCisvLyAweDEwMDFfMDBDMCB0byAweDEwMDFfMDBGRiAgLSBTU1BJTQorLy8gMHgxMDAyXzAwMDAgdG8gMHgxMDAyXzAwRkYgIC0gUElOTVVYCisvLyAweDEwMDNfMDAwMCB0byAweDEwMDNfMDdGRiAgLSBTUkFNLTAgKDJLQikKKy8vIDB4MTAwM18wODAwIHRvIDB4MTAwM18wRkZGICAtIFNSQU0tMSAoMktCKQorLy8gMHgxMDAzXzEwMDAgdG8gMHgxMDAzXzE3RkYgIC0gU1JBTS0yICgyS0IpCisvLyAweDEwMDNfMTgwMCB0byAweDEwMDNfMUZGRiAgLSBTUkFNLTMgKDJLQikKKy8vIDB4MzA4MF8wMDAwIHRvIDB4MzA4MF8wMEZGICAtIFdCIEhPU1QgKFRoaXMgZGVjb2RpbmcgaGFwcGVucyBhdCB3Yl9ob3N0IGJsb2NrKQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLword2lyZSBbMzowXSBtMF93YmRfdGlkX2kgICAgICAgPSAobTBfd2JkX2Fkcl9pWzMxOjI4XSA9PSA0J2IwMDAwICAgKSA/IFRBUkdFVF9TUElfTUVNIDogICAvLyBTUEkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG0wX3diZF9hZHJfaVszMToxNl0gPT0gMTYnaDEwMDAgICkgPyBUQVJHRVRfU1BJX1JFRyA6ICAgLy8gU1BJIFJFRworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobTBfd2JkX2Fkcl9pWzMxOjE2XSA9PSAxNidoMTAwMSAgKSA/IFRBUkdFVF9VQVJUICAgIDogICAvLyBVQVJUL0kyQy9VU0IvU1BJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtMF93YmRfYWRyX2lbMzE6MTZdID09IDE2J2gxMDAyICApID8gVEFSR0VUX1BJTk1VWCAgOiAgIC8vIFBJTk1VWAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobTBfd2JkX2Fkcl9pWzMxOjE2XSA9PSAxNidoMTAwMyAgKSA/IFRBUkdFVF9NQklTVCAgIDogICAvLyBNQklTVAorCQkJCTQnYjAwMDA7IAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUklTQyBEYXRhIE1lbW9yeSBNYXAKKy8vIDB4MDAwMF8wMDAwIHRvIDB4MEZGRl9GRkZGICAtIFFTUElNIE1FTU9SWQorLy8gMHgxMDAwXzAwMDAgdG8gMHgxMDAwXzAwRkYgIC0gUVNQSU0gUkVHCisvLyAweDEwMDFfMDAwMCB0byAweDEwMDFfMDAzRiAgLSBVQVJUCisvLyAweDEwMDFfMDA0MCB0byAweDEwMDFfMDA3RiAgLSBJMgorLy8gMHgxMDAxXzAwODAgdG8gMHgxMDAxXzAwQkYgIC0gVVNCCisvLyAweDEwMDFfMDBDMCB0byAweDEwMDFfMDBGRiAgLSBTU1BJTQorLy8gMHgxMDAyXzAwMDAgdG8gMHgxMDAyXzAwRkYgIC0gUElOTVVYCisvLyAweDEwMDNfMDAwMCB0byAweDEwMDNfMDdGRiAgLSBTUkFNLTAgKDJLQikKKy8vIDB4MTAwM18wODAwIHRvIDB4MTAwM18wRkZGICAtIFNSQU0tMSAoMktCKQorLy8gMHgxMDAzXzEwMDAgdG8gMHgxMDAzXzE3RkYgIC0gU1JBTS0yICgyS0IpCisvLyAweDEwMDNfMTgwMCB0byAweDEwMDNfMUZGRiAgLSBTUkFNLTMgKDJLQikKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIAord2lyZSBbMzowXSBtMV93YmRfdGlkX2kgICAgID0gKGJvb3RfcmVtYXBbMF0gJiYgbTFfd2JkX2Fkcl9pWzMxOjExXSA9PSAyMSdoMCkgPyBUQVJHRVRfTUJJU1Q6CisJICAgICAgICAgICAgICAgICAgICAgIChib290X3JlbWFwWzFdICYmIG0xX3diZF9hZHJfaVszMToxMV0gPT0gMjEnaDEpID8gVEFSR0VUX01CSVNUOgorCSAgICAgICAgICAgICAgICAgICAgICAoYm9vdF9yZW1hcFsyXSAmJiBtMV93YmRfYWRyX2lbMzE6MTFdID09IDIxJ2gyKSA/IFRBUkdFVF9NQklTVDoKKwkgICAgICAgICAgICAgICAgICAgICAgKGJvb3RfcmVtYXBbM10gJiYgbTFfd2JkX2Fkcl9pWzMxOjExXSA9PSAyMSdoMykgPyBUQVJHRVRfTUJJU1Q6CisJCQkgICAgICAoZGNhY2hlX3JlbWFwWzBdICYmIG0xX3diZF9hZHJfaVszMToxMV0gPT0gMjEnYjAwMDBfMTAwMF8wMDAwXzAwMDBfMDAwMF8wKSA/IFRBUkdFVF9NQklTVDoKKwkgICAgICAgICAgICAgICAgICAgICAgKGRjYWNoZV9yZW1hcFsxXSAmJiBtMV93YmRfYWRyX2lbMzE6MTFdID09IDIxJ2IwMDAwXzEwMDBfMDAwMF8wMDAwXzAwMDBfMSkgPyBUQVJHRVRfTUJJU1Q6CisJICAgICAgICAgICAgICAgICAgICAgIChkY2FjaGVfcmVtYXBbMl0gJiYgbTFfd2JkX2Fkcl9pWzMxOjExXSA9PSAyMSdiMDAwMF8xMDAwXzAwMDBfMDAwMF8wMDAxXzApID8gVEFSR0VUX01CSVNUOgorCSAgICAgICAgICAgICAgICAgICAgICAoZGNhY2hlX3JlbWFwWzNdICYmIG0xX3diZF9hZHJfaVszMToxMV0gPT0gMjEnYjAwMDBfMTAwMF8wMDAwXzAwMDBfMDAwMV8xKSA/IFRBUkdFVF9NQklTVDoKKwkgICAgICAgICAgICAgICAgICAgICAgKG0xX3diZF9hZHJfaVszMToyOF0gPT0gIDQnYjAwMDAgKSA/IFRBUkdFVF9TUElfTUVNIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtMV93YmRfYWRyX2lbMzE6MTZdID09IDE2J2gxMDAwICkgPyBUQVJHRVRfU1BJX1JFRyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobTFfd2JkX2Fkcl9pWzMxOjE2XSA9PSAxNidoMTAwMSApID8gVEFSR0VUX1VBUlQgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG0xX3diZF9hZHJfaVszMToxNl0gPT0gMTYnaDEwMDIgKSA/IFRBUkdFVF9QSU5NVVggOiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtMV93YmRfYWRyX2lbMzE6MTZdID09IDE2J2gxMDAzICkgPyBUQVJHRVRfTUJJU1QgOiAKKwkJCSAgICAgIDQnYjAwMDA7IAorCit3aXJlIFszOjBdIG0yX3diZF90aWRfaSAgICAgPSAoYm9vdF9yZW1hcFswXSAmJiBtMl93YmRfYWRyX2lbMzE6MTFdID09IDIxJ2gwKSA/IFRBUkdFVF9NQklTVDoKKwkgICAgICAgICAgICAgICAgICAgICAgKGJvb3RfcmVtYXBbMV0gJiYgbTJfd2JkX2Fkcl9pWzMxOjExXSA9PSAyMSdoMSkgPyBUQVJHRVRfTUJJU1Q6CisJICAgICAgICAgICAgICAgICAgICAgIChib290X3JlbWFwWzJdICYmIG0yX3diZF9hZHJfaVszMToxMV0gPT0gMjEnaDIpID8gVEFSR0VUX01CSVNUOgorCSAgICAgICAgICAgICAgICAgICAgICAoYm9vdF9yZW1hcFszXSAmJiBtMl93YmRfYWRyX2lbMzE6MTFdID09IDIxJ2gzKSA/IFRBUkdFVF9NQklTVDoKKwkJCSAgICAgIChkY2FjaGVfcmVtYXBbMF0gJiYgbTJfd2JkX2Fkcl9pWzMxOjExXSA9PSAyMSdiMDAwMF8xMDAwXzAwMDBfMDAwMF8wMDAwXzApID8gVEFSR0VUX01CSVNUOgorCSAgICAgICAgICAgICAgICAgICAgICAoZGNhY2hlX3JlbWFwWzFdICYmIG0yX3diZF9hZHJfaVszMToxMV0gPT0gMjEnYjAwMDBfMTAwMF8wMDAwXzAwMDBfMDAwMF8xKSA/IFRBUkdFVF9NQklTVDoKKwkgICAgICAgICAgICAgICAgICAgICAgKGRjYWNoZV9yZW1hcFsyXSAmJiBtMl93YmRfYWRyX2lbMzE6MTFdID09IDIxJ2IwMDAwXzEwMDBfMDAwMF8wMDAwXzAwMDFfMCkgPyBUQVJHRVRfTUJJU1Q6CisJICAgICAgICAgICAgICAgICAgICAgIChkY2FjaGVfcmVtYXBbM10gJiYgbTJfd2JkX2Fkcl9pWzMxOjExXSA9PSAyMSdiMDAwMF8xMDAwXzAwMDBfMDAwMF8wMDAxXzEpID8gVEFSR0VUX01CSVNUOgorCSAgICAgICAgICAgICAgICAgICAgICAobTJfd2JkX2Fkcl9pWzMxOjI4XSA9PSAgNCdiMDAwMCApID8gVEFSR0VUX1NQSV9NRU0gOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG0yX3diZF9hZHJfaVszMToxNl0gPT0gMTYnaDEwMDAgKSA/IFRBUkdFVF9TUElfUkVHIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtMl93YmRfYWRyX2lbMzE6MTZdID09IDE2J2gxMDAxICkgPyBUQVJHRVRfVUFSVCA6IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG0yX3diZF9hZHJfaVszMToxNl0gPT0gMTYnaDEwMDIgKSA/IFRBUkdFVF9QSU5NVVggOiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtMl93YmRfYWRyX2lbMzE6MTZdID09IDE2J2gxMDAzICkgPyBUQVJHRVRfTUJJU1QgOiAKKwkJCSAgICAgIDQnYjAwMDA7IAord2lyZSBbMzowXSBtM193YmRfdGlkX2kgICAgID0gKGJvb3RfcmVtYXBbMF0gJiYgbTNfd2JkX2Fkcl9pWzMxOjExXSA9PSAyMSdoMCkgPyBUQVJHRVRfTUJJU1Q6CisJICAgICAgICAgICAgICAgICAgICAgIChib290X3JlbWFwWzFdICYmIG0zX3diZF9hZHJfaVszMToxMV0gPT0gMjEnaDEpID8gVEFSR0VUX01CSVNUOgorCSAgICAgICAgICAgICAgICAgICAgICAoYm9vdF9yZW1hcFsyXSAmJiBtM193YmRfYWRyX2lbMzE6MTFdID09IDIxJ2gyKSA/IFRBUkdFVF9NQklTVDoKKwkgICAgICAgICAgICAgICAgICAgICAgKGJvb3RfcmVtYXBbM10gJiYgbTNfd2JkX2Fkcl9pWzMxOjExXSA9PSAyMSdoMykgPyBUQVJHRVRfTUJJU1Q6CisJCQkgICAgICAoZGNhY2hlX3JlbWFwWzBdICYmIG0zX3diZF9hZHJfaVszMToxMV0gPT0gMjEnYjAwMDBfMTAwMF8wMDAwXzAwMDBfMDAwMF8wKSA/IFRBUkdFVF9NQklTVDoKKwkgICAgICAgICAgICAgICAgICAgICAgKGRjYWNoZV9yZW1hcFsxXSAmJiBtM193YmRfYWRyX2lbMzE6MTFdID09IDIxJ2IwMDAwXzEwMDBfMDAwMF8wMDAwXzAwMDBfMSkgPyBUQVJHRVRfTUJJU1Q6CisJICAgICAgICAgICAgICAgICAgICAgIChkY2FjaGVfcmVtYXBbMl0gJiYgbTNfd2JkX2Fkcl9pWzMxOjExXSA9PSAyMSdiMDAwMF8xMDAwXzAwMDBfMDAwMF8wMDAxXzApID8gVEFSR0VUX01CSVNUOgorCSAgICAgICAgICAgICAgICAgICAgICAoZGNhY2hlX3JlbWFwWzNdICYmIG0zX3diZF9hZHJfaVszMToxMV0gPT0gMjEnYjAwMDBfMTAwMF8wMDAwXzAwMDBfMDAwMV8xKSA/IFRBUkdFVF9NQklTVDoKKwkgICAgICAgICAgICAgICAgICAgICAgKG0zX3diZF9hZHJfaVszMToyOF0gPT0gIDQnYjAwMDAgKSA/IFRBUkdFVF9TUElfTUVNIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtM193YmRfYWRyX2lbMzE6MTZdID09IDE2J2gxMDAwICkgPyBUQVJHRVRfU1BJX1JFRyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobTNfd2JkX2Fkcl9pWzMxOjE2XSA9PSAxNidoMTAwMSApID8gVEFSR0VUX1VBUlQgOiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtM193YmRfYWRyX2lbMzE6MTZdID09IDE2J2gxMDAyICkgPyBUQVJHRVRfUElOTVVYIDogCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobTNfd2JkX2Fkcl9pWzMxOjE2XSA9PSAxNidoMTAwMyApID8gVEFSR0VUX01CSVNUIDogCisJCQkgICAgICA0J2IwMDAwOyAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTWFzdGVyIE1hcHBpbmcKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiBtMF93Yl93ci53YmRfZGF0ID0gbTBfd2JkX2RhdF9pOworYXNzaWduIG0wX3diX3dyLndiZF9hZHIgPSB7bTBfd2JkX2Fkcl9pWzMxOjJdLDInYjAwfTsKK2Fzc2lnbiBtMF93Yl93ci53YmRfc2VsID0gbTBfd2JkX3NlbF9pOworYXNzaWduIG0wX3diX3dyLndiZF9ibCAgPSAnaDE7Cithc3NpZ24gbTBfd2Jfd3Iud2JkX2JyeSA9ICdiMTsKK2Fzc2lnbiBtMF93Yl93ci53YmRfd2UgID0gbTBfd2JkX3dlX2k7Cithc3NpZ24gbTBfd2Jfd3Iud2JkX2N5YyA9IG0wX3diZF9jeWNfaTsKK2Fzc2lnbiBtMF93Yl93ci53YmRfc3RiID0gbTBfd2JkX3N0Yl9pOworYXNzaWduIG0wX3diX3dyLndiZF90aWQgPSBtMF93YmRfdGlkX2k7CisKK2Fzc2lnbiBtMV93Yl93ci53YmRfZGF0ID0gbTFfd2JkX2RhdF9pOworYXNzaWduIG0xX3diX3dyLndiZF9hZHIgPSB7bTFfd2JkX2Fkcl9pWzMxOjJdLDInYjAwfTsKK2Fzc2lnbiBtMV93Yl93ci53YmRfc2VsID0gbTFfd2JkX3NlbF9pOworYXNzaWduIG0xX3diX3dyLndiZF9ibCAgPSAnaDE7Cithc3NpZ24gbTFfd2Jfd3Iud2JkX2JyeSA9ICdiMTsKK2Fzc2lnbiBtMV93Yl93ci53YmRfd2UgID0gbTFfd2JkX3dlX2k7Cithc3NpZ24gbTFfd2Jfd3Iud2JkX2N5YyA9IG0xX3diZF9jeWNfaTsKK2Fzc2lnbiBtMV93Yl93ci53YmRfc3RiID0gbTFfd2JkX3N0Yl9pOworYXNzaWduIG0xX3diX3dyLndiZF90aWQgPSBtMV93YmRfdGlkX2k7CisKK2Fzc2lnbiBtMl93Yl93ci53YmRfZGF0ID0gbTJfd2JkX2RhdF9pOworYXNzaWduIG0yX3diX3dyLndiZF9hZHIgPSB7bTJfd2JkX2Fkcl9pWzMxOjJdLDInYjAwfTsKK2Fzc2lnbiBtMl93Yl93ci53YmRfc2VsID0gbTJfd2JkX3NlbF9pOworYXNzaWduIG0yX3diX3dyLndiZF9ibCAgPSBtMl93YmRfYmxfaTsKK2Fzc2lnbiBtMl93Yl93ci53YmRfYnJ5ID0gbTJfd2JkX2JyeV9pOworYXNzaWduIG0yX3diX3dyLndiZF93ZSAgPSBtMl93YmRfd2VfaTsKK2Fzc2lnbiBtMl93Yl93ci53YmRfY3ljID0gbTJfd2JkX2N5Y19pOworYXNzaWduIG0yX3diX3dyLndiZF9zdGIgPSBtMl93YmRfc3RiX2k7Cithc3NpZ24gbTJfd2Jfd3Iud2JkX3RpZCA9IG0yX3diZF90aWRfaTsKKworYXNzaWduIG0zX3diX3dyLndiZF9kYXQgPSAnaDA7Cithc3NpZ24gbTNfd2Jfd3Iud2JkX2FkciA9IHttM193YmRfYWRyX2lbMzE6Ml0sMidiMDB9OworYXNzaWduIG0zX3diX3dyLndiZF9zZWwgPSBtM193YmRfc2VsX2k7Cithc3NpZ24gbTNfd2Jfd3Iud2JkX2JsICA9IG0zX3diZF9ibF9pOworYXNzaWduIG0zX3diX3dyLndiZF9icnkgPSBtM193YmRfYnJ5X2k7Cithc3NpZ24gbTNfd2Jfd3Iud2JkX3dlICA9IG0zX3diZF93ZV9pOworYXNzaWduIG0zX3diX3dyLndiZF9jeWMgPSBtM193YmRfY3ljX2k7Cithc3NpZ24gbTNfd2Jfd3Iud2JkX3N0YiA9IG0zX3diZF9zdGJfaTsKK2Fzc2lnbiBtM193Yl93ci53YmRfdGlkID0gbTNfd2JkX3RpZF9pOworCithc3NpZ24gbTBfd2JkX2RhdF9vICA9ICBtMF93Yl9yZC53YmRfZGF0OworYXNzaWduIG0wX3diZF9hY2tfbyAgPSAgbTBfd2JfcmQud2JkX2FjazsKK2Fzc2lnbiBtMF93YmRfbGFja19vID0gIG0wX3diX3JkLndiZF9sYWNrOworYXNzaWduIG0wX3diZF9lcnJfbyAgPSAgbTBfd2JfcmQud2JkX2VycjsKKworYXNzaWduIG0xX3diZF9kYXRfbyAgPSAgbTFfd2JfcmQud2JkX2RhdDsKK2Fzc2lnbiBtMV93YmRfYWNrX28gID0gIG0xX3diX3JkLndiZF9hY2s7Cithc3NpZ24gbTFfd2JkX2xhY2tfbyA9ICBtMV93Yl9yZC53YmRfbGFjazsKK2Fzc2lnbiBtMV93YmRfZXJyX28gID0gIG0xX3diX3JkLndiZF9lcnI7CisKK2Fzc2lnbiBtMl93YmRfZGF0X28gID0gIG0yX3diX3JkLndiZF9kYXQ7Cithc3NpZ24gbTJfd2JkX2Fja19vICA9ICBtMl93Yl9yZC53YmRfYWNrOworYXNzaWduIG0yX3diZF9sYWNrX28gPSAgbTJfd2JfcmQud2JkX2xhY2s7Cithc3NpZ24gbTJfd2JkX2Vycl9vICA9ICBtMl93Yl9yZC53YmRfZXJyOworCithc3NpZ24gbTNfd2JkX2RhdF9vICA9ICBtM193Yl9yZC53YmRfZGF0OworYXNzaWduIG0zX3diZF9hY2tfbyAgPSAgbTNfd2JfcmQud2JkX2FjazsKK2Fzc2lnbiBtM193YmRfbGFja19vID0gIG0zX3diX3JkLndiZF9sYWNrOworYXNzaWduIG0zX3diZF9lcnJfbyAgPSAgbTNfd2JfcmQud2JkX2VycjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTbGF2ZSBNYXBwaW5nCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNYXNrZWQgTm93IGFuZCBhZGRlZCBzdGFnZ2luZyBGRiBub3cKKyBhc3NpZ24gIHMwX3diZF9kYXRfbyA9ICBzMF93Yl93ci53YmRfZGF0IDsKKyBhc3NpZ24gIHMwX3diZF9hZHJfbyA9ICBzMF93Yl93ci53YmRfYWRyIDsKKyBhc3NpZ24gIHMwX3diZF9zZWxfbyA9ICBzMF93Yl93ci53YmRfc2VsIDsKKyBhc3NpZ24gIHMwX3diZF9ibF9vICA9ICBzMF93Yl93ci53YmRfYmwgOworIGFzc2lnbiAgczBfd2JkX2JyeV9vID0gIHMwX3diX3dyLndiZF9icnkgOworIGFzc2lnbiAgczBfd2JkX3dlX28gID0gIHMwX3diX3dyLndiZF93ZSAgOworIGFzc2lnbiAgczBfd2JkX2N5Y19vID0gIHMwX3diX3dyLndiZF9jeWMgOworIGFzc2lnbiAgczBfd2JkX3N0Yl9vID0gIHMwX3diX3dyLndiZF9zdGIgOworICAgICAgICAgICAgICAgICAgICAgIAorIGFzc2lnbiAgczFfd2JkX2RhdF9vID0gIHMxX3diX3dyLndiZF9kYXQgOworIGFzc2lnbiAgczFfd2JkX2Fkcl9vID0gIHMxX3diX3dyLndiZF9hZHJbNzowXSA7CisgYXNzaWduICBzMV93YmRfc2VsX28gPSAgczFfd2Jfd3Iud2JkX3NlbCA7CisgYXNzaWduICBzMV93YmRfd2VfbyAgPSAgczFfd2Jfd3Iud2JkX3dlICA7CisgYXNzaWduICBzMV93YmRfY3ljX28gPSAgczFfd2Jfd3Iud2JkX2N5YyA7CisgYXNzaWduICBzMV93YmRfc3RiX28gPSAgczFfd2Jfd3Iud2JkX3N0YiA7CisgICAgICAgICAgICAgICAgICAgICAgCisgYXNzaWduICBzMl93YmRfZGF0X28gPSAgczJfd2Jfd3Iud2JkX2RhdCA7CisgYXNzaWduICBzMl93YmRfYWRyX28gPSAgczJfd2Jfd3Iud2JkX2Fkcls3OjBdIDsgLy8gR2xvYmFsIFJlZyBOZWVkIDggYml0CisgYXNzaWduICBzMl93YmRfc2VsX28gPSAgczJfd2Jfd3Iud2JkX3NlbCA7CisgYXNzaWduICBzMl93YmRfd2VfbyAgPSAgczJfd2Jfd3Iud2JkX3dlICA7CisgYXNzaWduICBzMl93YmRfY3ljX28gPSAgczJfd2Jfd3Iud2JkX2N5YyA7CisgYXNzaWduICBzMl93YmRfc3RiX28gPSAgczJfd2Jfd3Iud2JkX3N0YiA7CisKKyBhc3NpZ24gIHMzX3diZF9kYXRfbyA9ICBzM193Yl93ci53YmRfZGF0WzMxOjBdIDsKKyBhc3NpZ24gIHMzX3diZF9hZHJfbyA9ICBzM193Yl93ci53YmRfYWRyWzEyOjBdIDsgLy8gTUJJU1QgTmVlZCAxMyBiaXQKKyBhc3NpZ24gIHMzX3diZF9zZWxfbyA9ICBzM193Yl93ci53YmRfc2VsWzM6MF0gOworIGFzc2lnbiAgczNfd2JkX2JsX28gID0gIHMzX3diX3dyLndiZF9ibCA7CisgYXNzaWduICBzM193YmRfYnJ5X28gPSAgczNfd2Jfd3Iud2JkX2JyeSA7CisgYXNzaWduICBzM193YmRfd2VfbyAgPSAgczNfd2Jfd3Iud2JkX3dlICA7CisgYXNzaWduICBzM193YmRfY3ljX28gPSAgczNfd2Jfd3Iud2JkX2N5YyA7CisgYXNzaWduICBzM193YmRfc3RiX28gPSAgczNfd2Jfd3Iud2JkX3N0YiA7CisgCisgCisgYXNzaWduIHMwX3diX3JkLndiZF9kYXQgICA9IHMwX3diZF9kYXRfaSA7CisgYXNzaWduIHMwX3diX3JkLndiZF9hY2sgICA9IHMwX3diZF9hY2tfaSA7CisgYXNzaWduIHMwX3diX3JkLndiZF9sYWNrICA9IHMwX3diZF9sYWNrX2kgOworIGFzc2lnbiBzMF93Yl9yZC53YmRfZXJyICA9IDEnYjA7IC8vIHMwX3diZF9lcnJfaSA7IC0gdW51c2VkCisgCisgYXNzaWduIHMxX3diX3JkLndiZF9kYXQgID0gczFfd2JkX2RhdF9pIDsKKyBhc3NpZ24gczFfd2JfcmQud2JkX2FjayAgPSBzMV93YmRfYWNrX2kgOworIGFzc2lnbiBzMV93Yl9yZC53YmRfbGFjayAgPSBzMV93YmRfYWNrX2kgOworIGFzc2lnbiBzMV93Yl9yZC53YmRfZXJyICA9IDEnYjA7IC8vIHMxX3diZF9lcnJfaSA7IC0gdW51c2VkCisgCisgYXNzaWduIHMyX3diX3JkLndiZF9kYXQgID0gczJfd2JkX2RhdF9pIDsKKyBhc3NpZ24gczJfd2JfcmQud2JkX2FjayAgPSBzMl93YmRfYWNrX2kgOworIGFzc2lnbiBzMl93Yl9yZC53YmRfbGFjayA9IHMyX3diZF9hY2tfaSA7CisgYXNzaWduIHMyX3diX3JkLndiZF9lcnIgID0gMSdiMDsgLy8gczJfd2JkX2Vycl9pIDsgLSB1bnVzZWQKKworIGFzc2lnbiBzM193Yl9yZC53YmRfZGF0ICA9IHMzX3diZF9kYXRfaSA7CisgYXNzaWduIHMzX3diX3JkLndiZF9hY2sgID0gczNfd2JkX2Fja19pIDsKKyBhc3NpZ24gczNfd2JfcmQud2JkX2xhY2sgPSBzM193YmRfbGFja19pIDsKKyBhc3NpZ24gczNfd2JfcmQud2JkX2VyciAgPSAxJ2IwOyAvLyBzM193YmRfZXJyX2kgOyAtIHVudXNlZAorCisvLworLy8gYXJiaXRvciAKKy8vCitsb2dpYyBbMTowXSAgZ250OworCit3Yl9hcmIJdV93Yl9hcmIoCisJLmNsayhjbGtfaSksIAorCS5yc3RuKHJzdF9uKSwKKwkucmVxKHsJbTNfd2JkX3N0Yl9pICYgIW0zX3diZF9sYWNrX28sCisJICAgICAgICBtMl93YmRfc3RiX2kgJiAhbTJfd2JkX2xhY2tfbywKKwkJbTFfd2JkX3N0Yl9pICYgIW0xX3diZF9sYWNrX28sCisJCW0wX3diZF9zdGJfaSAmICFtMF93YmRfbGFja19vfSksCisJLmdudChnbnQpCispOworCisKKy8vIEdlbmVyYXRlIE11bHRpcGxleGVkIE1hc3RlciBJbnRlcmZhY2UgYmFzZWQgb24gZ3JhbnQKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgIGNhc2UoZ250KQorICAgICAgICAzJ2gwOgkgICBtX2J1c193ciA9IG0wX3diX3dyOworICAgICAgICAzJ2gxOgkgICBtX2J1c193ciA9IG0xX3diX3dyOworICAgICAgICAzJ2gyOgkgICBtX2J1c193ciA9IG0yX3diX3dyOworICAgICAgICAzJ2gzOgkgICBtX2J1c193ciA9IG0zX3diX3dyOworICAgICAgICBkZWZhdWx0OiAgIG1fYnVzX3dyID0gbTBfd2Jfd3I7CisgICAgIGVuZGNhc2UJCQkKK2VuZAorCisKKy8vIEdlbmVyYXRlIE11bHRpcGxleGVkIFNsYXZlIEludGVyZmFjZSBiYXNlZCBvbiB0YXJnZXQgSWQKK3dpcmUgWzM6MF0gc193YmRfdGlkID0gIHNfYnVzX3dyLndiZF90aWQ7IC8vIHRvIGZpeCBpdmVyaWxvZyB3YXJuaW5nCithbHdheXNfY29tYiBiZWdpbgorICAgICBjYXNlKHNfd2JkX3RpZCkKKyAgICAgICAgNCdoMDoJICAgc19idXNfcmQgPSBzMF93Yl9yZDsKKyAgICAgICAgNCdoMToJICAgc19idXNfcmQgPSBzMV93Yl9yZDsKKyAgICAgICAgNCdoMjoJICAgc19idXNfcmQgPSBzMl93Yl9yZDsKKyAgICAgICAgNCdoMzoJICAgc19idXNfcmQgPSBzM193Yl9yZDsKKyAgICAgICAgZGVmYXVsdDogICBzX2J1c19yZCA9IHMwX3diX3JkOworICAgICBlbmRjYXNlCQkJCitlbmQKKworCisvLyBDb25uZWN0IE1hc3RlciA9PiBTbGF2ZQorYXNzaWduICBzMF93Yl93ciA9IChzX3diZF90aWQgPT0gMydiMDAwKSA/IHNfYnVzX3dyIDogJ2gwOworYXNzaWduICBzMV93Yl93ciA9IChzX3diZF90aWQgPT0gMydiMDAxKSA/IHNfYnVzX3dyIDogJ2gwOworYXNzaWduICBzMl93Yl93ciA9IChzX3diZF90aWQgPT0gMydiMDEwKSA/IHNfYnVzX3dyIDogJ2gwOworYXNzaWduICBzM193Yl93ciA9IChzX3diZF90aWQgPT0gMydiMDExKSA/IHNfYnVzX3dyIDogJ2gwOworCisvLyBDb25uZWN0IFNsYXZlIHRvIE1hc3RlcgorYXNzaWduICBtMF93Yl9yZCA9IChnbnQgPT0gMidiMDApID8gbV9idXNfcmQgOiAnaDA7Cithc3NpZ24gIG0xX3diX3JkID0gKGdudCA9PSAyJ2IwMSkgPyBtX2J1c19yZCA6ICdoMDsKK2Fzc2lnbiAgbTJfd2JfcmQgPSAoZ250ID09IDInYjEwKSA/IG1fYnVzX3JkIDogJ2gwOworYXNzaWduICBtM193Yl9yZCA9IChnbnQgPT0gMidiMTEpID8gbV9idXNfcmQgOiAnaDA7CisKKworLy8gU3RhZ2dpbmcgRkYgdG8gYnJlYWsgd3JpdGUgYW5kIHJlYWQgdGltaW5nIHBhdGgKK3N5bmNfd2JiIHVfc3luY193YmIoCisgICAgICAgICAuY2xrX2kgICAgICAgICAgICAoY2xrX2kgICAgICAgICAgICAgICApLCAKKyAgICAgICAgIC5yc3RfbiAgICAgICAgICAgIChyc3RfbiAgICAgICAgICAgICAgICksCisgICAgICAgICAvLyBXaXNoQm9uZSBJbnB1dCBtYXN0ZXIgSS9QCisgICAgICAgICAud2JtX2RhdF9pICAgICAgKG1fYnVzX3dyLndiZF9kYXQgICAgKSwKKyAgICAgICAgIC53Ym1fYWRyX2kgICAgICAobV9idXNfd3Iud2JkX2FkciAgICApLAorICAgICAgICAgLndibV9zZWxfaSAgICAgIChtX2J1c193ci53YmRfc2VsICAgICksCisgICAgICAgICAud2JtX2JsX2kgICAgICAgKG1fYnVzX3dyLndiZF9ibCAgICAgKSwKKyAgICAgICAgIC53Ym1fYnJ5X2kgICAgICAobV9idXNfd3Iud2JkX2JyeSAgICApLAorICAgICAgICAgLndibV93ZV9pICAgICAgIChtX2J1c193ci53YmRfd2UgICAgICksCisgICAgICAgICAud2JtX2N5Y19pICAgICAgKG1fYnVzX3dyLndiZF9jeWMgICAgKSwKKyAgICAgICAgIC53Ym1fc3RiX2kgICAgICAobV9idXNfd3Iud2JkX3N0YiAgICApLAorICAgICAgICAgLndibV90aWRfaSAgICAgIChtX2J1c193ci53YmRfdGlkICAgICksCisgICAgICAgICAud2JtX2RhdF9vICAgICAgKG1fYnVzX3JkLndiZF9kYXQgICAgKSwKKyAgICAgICAgIC53Ym1fYWNrX28gICAgICAobV9idXNfcmQud2JkX2FjayAgICApLAorICAgICAgICAgLndibV9sYWNrX28gICAgIChtX2J1c19yZC53YmRfbGFjayAgICksCisgICAgICAgICAud2JtX2Vycl9vICAgICAgKG1fYnVzX3JkLndiZF9lcnIgICAgKSwKKworICAgICAgICAgLy8gU2xhdmUgSW50ZXJmYWNlCisgICAgICAgICAud2JzX2RhdF9pICAgICAgKHNfYnVzX3JkLndiZF9kYXQgICAgKSwKKyAgICAgICAgIC53YnNfYWNrX2kgICAgICAoc19idXNfcmQud2JkX2FjayAgICApLAorICAgICAgICAgLndic19sYWNrX2kgICAgIChzX2J1c19yZC53YmRfbGFjayAgICksCisgICAgICAgICAud2JzX2Vycl9pICAgICAgKHNfYnVzX3JkLndiZF9lcnIgICAgKSwKKyAgICAgICAgIC53YnNfZGF0X28gICAgICAoc19idXNfd3Iud2JkX2RhdCAgICApLAorICAgICAgICAgLndic19hZHJfbyAgICAgIChzX2J1c193ci53YmRfYWRyICAgICksCisgICAgICAgICAud2JzX3NlbF9vICAgICAgKHNfYnVzX3dyLndiZF9zZWwgICAgKSwKKyAgICAgICAgIC53YnNfYmxfbyAgICAgICAoc19idXNfd3Iud2JkX2JsICAgICApLAorICAgICAgICAgLndic19icnlfbyAgICAgIChzX2J1c193ci53YmRfYnJ5ICAgICksCisgICAgICAgICAud2JzX3dlX28gICAgICAgKHNfYnVzX3dyLndiZF93ZSAgICAgKSwKKyAgICAgICAgIC53YnNfY3ljX28gICAgICAoc19idXNfd3Iud2JkX2N5YyAgICApLAorICAgICAgICAgLndic19zdGJfbyAgICAgIChzX2J1c193ci53YmRfc3RiICAgICksCisgICAgICAgICAud2JzX3RpZF9vICAgICAgKHNfYnVzX3dyLndiZF90aWQgICAgKQorCispOworCisKK2VuZG1vZHVsZQorCg==