ICAvKgogICAqIFRoaXMgQyBmdW5jdGlvbiByZXR1cm5zIGEgY2Fub25pY2FsIG5hbWUgZm9yIHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcKICAgKiB1c2VkIGluIHRoZSBjdXJyZW50IGxvY2FsZS4gSXQgcmV0dXJucyBOVUxMIGlmIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkLgogICAqCiAgICogVGhpcyBpcyBhbiBhbHRlcm5hdGl2ZSB0byBubF9sYW5naW5mbyhDT0RFU0VUKS4KICAgKi8KCiAgI2luY2x1ZGUgPHN0ZGRlZi5oPgogICNpbmNsdWRlIDxzdGRsaWIuaD4KICAjaW5jbHVkZSA8c3RyaW5nLmg+CgogICNkZWZpbmUgc3RyZXEoczEsczIpICghc3RyY21wKHMxLHMyKSkKCiAgY29uc3QgY2hhciogbG9jYWxlX2NoYXJzZXQgPSBOVUxMOwoKICBjb25zdCBjaGFyKiBnZXRfbG9jYWxlX2NoYXJzZXQgKCkKICAgIHsKICAgICAgLy8gV2hlbiB5b3UgY2FsbCBzZXRsb2NhbGUoTENfQ1RZUEUsIiIpLCBpcyBleGFtaW5lcyB0aGUgZW52aXJvbm1lbnQKICAgICAgLy8gdmFyaWFibGVzOgogICAgICAvLyAxLiBlbnZpcm9ubWVudCB2YXJpYWJsZSBMQ19BTEwgLSBhbiBvdmVycmlkZSBmb3IgYWxsIExDXyogdmFyaWFibGVzLAogICAgICAvLyAyLiBlbnZpcm9ubWVudCB2YXJpYWJsZSBMQ19DVFlQRSwKICAgICAgLy8gMy4gZW52aXJvbm1lbnQgdmFyaWFibGUgTEFORyAtIGEgZGVmYXVsdCBmb3IgYWxsIExDXyogdmFyaWFibGVzLgogICAgICBjb25zdCBjaGFyICogbG9jYWxlOwogICAgICBsb2NhbGUgPSBnZXRlbnYoIkxDX0FMTCIpOwogICAgICBpZiAoIWxvY2FsZSB8fCAhKmxvY2FsZSkgewogICAgICAgIGxvY2FsZSA9IGdldGVudigiTENfQ1RZUEUiKTsKICAgICAgICBpZiAoIWxvY2FsZSB8fCAhKmxvY2FsZSkKICAgICAgICAgIGxvY2FsZSA9IGdldGVudigiTEFORyIpOwogICAgICB9CiAgICAgIC8vIERldGVybWluZSBsb2NhbGVfY2hhcnNldCBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCiAgICAgIC8vIFVuZm9ydHVuYXRlbHkgdGhlcmUgaXMgbm8gZG9jdW1lbnRlZCB3YXkgb2YgZ2V0dGluZyB0aGUgY2hhcmFjdGVyIHNldAogICAgICAvLyB0aGF0IHdhcyBzcGVjaWZpZWQgYXMgcGFydCBvZiB0aGUgTENfQ1RZUEUgY2F0ZWdvcnkuIFdlIGhhdmUgdG8gcGFyc2UKICAgICAgLy8gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBvdXJzZWx2ZXMuCiAgICAgIC8vIFJlY2FsbCB0aGF0IGEgbG9jYWxlIHNwZWNpZmljYXRpb24gaGFzIHRoZSBmb3JtCiAgICAgIC8vICAgbGFuZ3VhZ2VfQ09VTlRSWS5jaGFyc2V0CiAgICAgIC8vIGJ1dCB0aGVyZSBhcmUgYWxzbyBhbGlhc2VzLiBIZXJlIGlzIHRoZSB1bmlvbiBvZiB3aGF0IEkgZm91bmQgaW4KICAgICAgLy8gL3Vzci9YMTFSNi9saWIvWDExL2xvY2FsZS9sb2NhbGUuYWxpYXMgKFgxMVI2KSBhbmQKICAgICAgLy8gL3Vzci9zaGFyZS9sb2NhbGUvbG9jYWxlLmFsaWFzIChHTlUgbGliYzIpLgogICAgICAvLwogICAgICAvLyBYMTFSNiBsb2NhbGUuYWxpYXM6CiAgICAgIC8vICAgUE9TSVggICAgICAgICAgICAgICAgICAgQwogICAgICAvLyAgIFBPU0lYLVVURjIgICAgICAgICAgICAgIEMKICAgICAgLy8gICBDX0MuQyAgICAgICAgICAgICAgICAgICBDCiAgICAgIC8vICAgQy5lbiAgICAgICAgICAgICAgICAgICAgQwogICAgICAvLyAgIEMuaXNvODg1OTEgICAgICAgICAgICAgIGVuX1VTLklTTzg4NTktMQogICAgICAvLyAgIENleHRlbmQgICAgICAgICAgICAgICAgIGVuX1VTLklTTzg4NTktMQogICAgICAvLyAgIENleHRlbmQuZW4gICAgICAgICAgICAgIGVuX1VTLklTTzg4NTktMQogICAgICAvLyAgIEVuZ2xpc2hfVW5pdGVkLVN0YXRlcy40MzcgICAgICAgQwogICAgICAvLyAgICMKICAgICAgLy8gICBhciAgICAgICAgICAgICAgICAgICAgICBhcl9BQS5JU084ODU5LTYKICAgICAgLy8gICBhcl9BQSAgICAgICAgICAgICAgICAgICBhcl9BQS5JU084ODU5LTYKICAgICAgLy8gICBhcl9BQS5JU09fODg1OS02ICAgICAgICBhcl9BQS5JU084ODU5LTYKICAgICAgLy8gICBhcl9TQS5pc284ODU5NiAgICAgICAgICBhcl9BQS5JU084ODU5LTYKICAgICAgLy8gICBiZyAgICAgICAgICAgICAgICAgICAgICBiZ19CRy5JU084ODU5LTUKICAgICAgLy8gICBiZ19CRyAgICAgICAgICAgICAgICAgICBiZ19CRy5JU084ODU5LTUKICAgICAgLy8gICBiZ19CRy5JU09fODg1OS01ICAgICAgICBiZ19CRy5JU084ODU5LTUKICAgICAgLy8gICBiZ19CRy5pc284ODU5NSAgICAgICAgICBiZ19CRy5JU084ODU5LTUKICAgICAgLy8gICBjcyAgICAgICAgICAgICAgICAgICAgICBjc19DWi5JU084ODU5LTIKICAgICAgLy8gICBjc19DUyAgICAgICAgICAgICAgICAgICBjc19DWi5JU084ODU5LTIKICAgICAgLy8gICBjc19DUy5JU084ODU5LTIgICAgICAgICBjc19DWi5JU084ODU5LTIKICAgICAgLy8gICBjc19DUy5JU09fODg1OS0yICAgICAgICBjc19DWi5JU084ODU5LTIKICAgICAgLy8gICBjc19DWi5pc284ODU5MiAgICAgICAgICBjc19DWi5JU084ODU5LTIKICAgICAgLy8gICBjeiAgICAgICAgICAgICAgICAgICAgICBjel9DWi5JU084ODU5LTIKICAgICAgLy8gICBjel9DWiAgICAgICAgICAgICAgICAgICBjel9DWi5JU084ODU5LTIKICAgICAgLy8gICBjc19DWi5JU09fODg1OS0yICAgICAgICBjc19DWi5JU084ODU5LTIKICAgICAgLy8gICBkYSAgICAgICAgICAgICAgICAgICAgICBkYV9ESy5JU084ODU5LTEKICAgICAgLy8gICBkYV9ESyAgICAgICAgICAgICAgICAgICBkYV9ESy5JU084ODU5LTEKICAgICAgLy8gICBkYV9ESy44ODU5MSAgICAgICAgICAgICBkYV9ESy5JU084ODU5LTEKICAgICAgLy8gICBkYV9ESy44ODU5MS5lbiAgICAgICAgICBkYV9ESy5JU084ODU5LTEKICAgICAgLy8gICBkYV9ESy5pc284ODU5MSAgICAgICAgICBkYV9ESy5JU084ODU5LTEKICAgICAgLy8gICBkYV9ESy5JU09fODg1OS0xICAgICAgICBkYV9ESy5JU084ODU5LTEKICAgICAgLy8gICBkZSAgICAgICAgICAgICAgICAgICAgICBkZV9ERS5JU084ODU5LTEKICAgICAgLy8gICBkZV9BVCAgICAgICAgICAgICAgICAgICBkZV9BVC5JU084ODU5LTEKICAgICAgLy8gICBkZV9BVC5JU09fODg1OS0xICAgICAgICBkZV9BVC5JU084ODU5LTEKICAgICAgLy8gICBkZV9DSCAgICAgICAgICAgICAgICAgICBkZV9DSC5JU084ODU5LTEKICAgICAgLy8gICBkZV9DSC5JU09fODg1OS0xICAgICAgICBkZV9DSC5JU084ODU5LTEKICAgICAgLy8gICBkZV9ERSAgICAgICAgICAgICAgICAgICBkZV9ERS5JU084ODU5LTEKICAgICAgLy8gICBkZV9ERS44ODU5MSAgICAgICAgICAgICBkZV9ERS5JU084ODU5LTEKICAgICAgLy8gICBkZV9ERS44ODU5MS5lbiAgICAgICAgICBkZV9ERS5JU084ODU5LTEKICAgICAgLy8gICBkZV9ERS5pc284ODU5MSAgICAgICAgICBkZV9ERS5JU084ODU5LTEKICAgICAgLy8gICBkZV9ERS5JU09fODg1OS0xICAgICAgICBkZV9ERS5JU084ODU5LTEKICAgICAgLy8gICBHRVJfREUuODg1OSAgICAgICAgICAgICBkZV9ERS5JU084ODU5LTEKICAgICAgLy8gICBHRVJfREUuODg1OS5pbiAgICAgICAgICBkZV9ERS5JU084ODU5LTEKICAgICAgLy8gICBlbCAgICAgICAgICAgICAgICAgICAgICBlbF9HUi5JU084ODU5LTcKICAgICAgLy8gICBlbF9HUiAgICAgICAgICAgICAgICAgICBlbF9HUi5JU084ODU5LTcKICAgICAgLy8gICBlbF9HUi5pc284ODU5NyAgICAgICAgICBlbF9HUi5JU084ODU5LTcKICAgICAgLy8gICBlbF9HUi5JU09fODg1OS03ICAgICAgICBlbF9HUi5JU084ODU5LTcKICAgICAgLy8gICBlbiAgICAgICAgICAgICAgICAgICAgICBlbl9VUy5JU084ODU5LTEKICAgICAgLy8gICBlbl9BVSAgICAgICAgICAgICAgICAgICBlbl9BVS5JU084ODU5LTEKICAgICAgLy8gICBlbl9BVS5JU09fODg1OS0xICAgICAgICBlbl9BVS5JU084ODU5LTEKICAgICAgLy8gICBlbl9DQSAgICAgICAgICAgICAgICAgICBlbl9DQS5JU084ODU5LTEKICAgICAgLy8gICBlbl9DQS5JU09fODg1OS0xICAgICAgICBlbl9DQS5JU084ODU5LTEKICAgICAgLy8gICBlbl9HQiAgICAgICAgICAgICAgICAgICBlbl9HQi5JU084ODU5LTEKICAgICAgLy8gICBlbl9HQi44ODU5MSAgICAgICAgICAgICBlbl9HQi5JU084ODU5LTEKICAgICAgLy8gICBlbl9HQi44ODU5MS5lbiAgICAgICAgICBlbl9HQi5JU084ODU5LTEKICAgICAgLy8gICBlbl9HQi5pc284ODU5MSAgICAgICAgICBlbl9HQi5JU084ODU5LTEKICAgICAgLy8gICBlbl9HQi5JU09fODg1OS0xICAgICAgICBlbl9HQi5JU084ODU5LTEKICAgICAgLy8gICBlbl9VSyAgICAgICAgICAgICAgICAgICBlbl9HQi5JU084ODU5LTEKICAgICAgLy8gICBFTkdfR0IuODg1OSAgICAgICAgICAgICBlbl9HQi5JU084ODU5LTEKICAgICAgLy8gICBFTkdfR0IuODg1OS5pbiAgICAgICAgICBlbl9HQi5JU084ODU5LTEKICAgICAgLy8gICBlbl9JRSAgICAgICAgICAgICAgICAgICBlbl9JRS5JU084ODU5LTEKICAgICAgLy8gICBlbl9OWiAgICAgICAgICAgICAgICAgICBlbl9OWi5JU084ODU5LTEKICAgICAgLy8gICBlbl9VUyAgICAgICAgICAgICAgICAgICBlbl9VUy5JU084ODU5LTEKICAgICAgLy8gICBlbl9VUy44ODU5MSAgICAgICAgICAgICBlbl9VUy5JU084ODU5LTEKICAgICAgLy8gICBlbl9VUy44ODU5MS5lbiAgICAgICAgICBlbl9VUy5JU084ODU5LTEKICAgICAgLy8gICBlbl9VUy5pc284ODU5MSAgICAgICAgICBlbl9VUy5JU084ODU5LTEKICAgICAgLy8gICBlbl9VUy5JU09fODg1OS0xICAgICAgICBlbl9VUy5JU084ODU5LTEKICAgICAgLy8gICBlcyAgICAgICAgICAgICAgICAgICAgICBlc19FUy5JU084ODU5LTEKICAgICAgLy8gICBlc19BUiAgICAgICAgICAgICAgICAgICBlc19BUi5JU084ODU5LTEKICAgICAgLy8gICBlc19CTyAgICAgICAgICAgICAgICAgICBlc19CTy5JU084ODU5LTEKICAgICAgLy8gICBlc19DTCAgICAgICAgICAgICAgICAgICBlc19DTC5JU084ODU5LTEKICAgICAgLy8gICBlc19DTyAgICAgICAgICAgICAgICAgICBlc19DTy5JU084ODU5LTEKICAgICAgLy8gICBlc19DUiAgICAgICAgICAgICAgICAgICBlc19DUi5JU084ODU5LTEKICAgICAgLy8gICBlc19FQyAgICAgICAgICAgICAgICAgICBlc19FQy5JU084ODU5LTEKICAgICAgLy8gICBlc19FUyAgICAgICAgICAgICAgICAgICBlc19FUy5JU084ODU5LTEKICAgICAgLy8gICBlc19FUy44ODU5MSAgICAgICAgICAgICBlc19FUy5JU084ODU5LTEKICAgICAgLy8gICBlc19FUy44ODU5MS5lbiAgICAgICAgICBlc19FUy5JU084ODU5LTEKICAgICAgLy8gICBlc19FUy5pc284ODU5MSAgICAgICAgICBlc19FUy5JU084ODU5LTEKICAgICAgLy8gICBlc19FUy5JU09fODg1OS0xICAgICAgICBlc19FUy5JU084ODU5LTEKICAgICAgLy8gICBlc19HVCAgICAgICAgICAgICAgICAgICBlc19HVC5JU084ODU5LTEKICAgICAgLy8gICBlc19NWCAgICAgICAgICAgICAgICAgICBlc19NWC5JU084ODU5LTEKICAgICAgLy8gICBlc19OSSAgICAgICAgICAgICAgICAgICBlc19OSS5JU084ODU5LTEKICAgICAgLy8gICBlc19QQSAgICAgICAgICAgICAgICAgICBlc19QQS5JU084ODU5LTEKICAgICAgLy8gICBlc19QRSAgICAgICAgICAgICAgICAgICBlc19QRS5JU084ODU5LTEKICAgICAgLy8gICBlc19QWSAgICAgICAgICAgICAgICAgICBlc19QWS5JU084ODU5LTEKICAgICAgLy8gICBlc19TViAgICAgICAgICAgICAgICAgICBlc19TVi5JU084ODU5LTEKICAgICAgLy8gICBlc19VWSAgICAgICAgICAgICAgICAgICBlc19VWS5JU084ODU5LTEKICAgICAgLy8gICBlc19WRSAgICAgICAgICAgICAgICAgICBlc19WRS5JU084ODU5LTEKICAgICAgLy8gICBmaSAgICAgICAgICAgICAgICAgICAgICBmaV9GSS5JU084ODU5LTEKICAgICAgLy8gICBmaV9GSSAgICAgICAgICAgICAgICAgICBmaV9GSS5JU084ODU5LTEKICAgICAgLy8gICBmaV9GSS44ODU5MSAgICAgICAgICAgICBmaV9GSS5JU084ODU5LTEKICAgICAgLy8gICBmaV9GSS44ODU5MS5lbiAgICAgICAgICBmaV9GSS5JU084ODU5LTEKICAgICAgLy8gICBmaV9GSS5pc284ODU5MSAgICAgICAgICBmaV9GSS5JU084ODU5LTEKICAgICAgLy8gICBmaV9GSS5JU09fODg1OS0xICAgICAgICBmaV9GSS5JU084ODU5LTEKICAgICAgLy8gICBmciAgICAgICAgICAgICAgICAgICAgICBmcl9GUi5JU084ODU5LTEKICAgICAgLy8gICBmcl9CRSAgICAgICAgICAgICAgICAgICBmcl9CRS5JU084ODU5LTEKICAgICAgLy8gICBmcl9CRS44ODU5MSAgICAgICAgICAgICBmcl9CRS5JU084ODU5LTEKICAgICAgLy8gICBmcl9CRS44ODU5MS5lbiAgICAgICAgICBmcl9CRS5JU084ODU5LTEKICAgICAgLy8gICBmcl9CRS5JU09fODg1OS0xICAgICAgICBmcl9CRS5JU084ODU5LTEKICAgICAgLy8gICBmcl9DQSAgICAgICAgICAgICAgICAgICBmcl9DQS5JU084ODU5LTEKICAgICAgLy8gICBmcl9DQS44ODU5MSAgICAgICAgICAgICBmcl9DQS5JU084ODU5LTEKICAgICAgLy8gICBmcl9DQS44ODU5MS5lbiAgICAgICAgICBmcl9DQS5JU084ODU5LTEKICAgICAgLy8gICBmcl9DQS5pc284ODU5MSAgICAgICAgICBmcl9DQS5JU084ODU5LTEKICAgICAgLy8gICBmcl9DQS5JU09fODg1OS0xICAgICAgICBmcl9DQS5JU084ODU5LTEKICAgICAgLy8gICBmcl9DSCAgICAgICAgICAgICAgICAgICBmcl9DSC5JU084ODU5LTEKICAgICAgLy8gICBmcl9DSC44ODU5MSAgICAgICAgICAgICBmcl9DSC5JU084ODU5LTEKICAgICAgLy8gICBmcl9DSC44ODU5MS5lbiAgICAgICAgICBmcl9DSC5JU084ODU5LTEKICAgICAgLy8gICBmcl9DSC5JU09fODg1OS0xICAgICAgICBmcl9DSC5JU084ODU5LTEKICAgICAgLy8gICBmcl9GUiAgICAgICAgICAgICAgICAgICBmcl9GUi5JU084ODU5LTEKICAgICAgLy8gICBmcl9GUi44ODU5MSAgICAgICAgICAgICBmcl9GUi5JU084ODU5LTEKICAgICAgLy8gICBmcl9GUi44ODU5MS5lbiAgICAgICAgICBmcl9GUi5JU084ODU5LTEKICAgICAgLy8gICBmcl9GUi5pc284ODU5MSAgICAgICAgICBmcl9GUi5JU084ODU5LTEKICAgICAgLy8gICBmcl9GUi5JU09fODg1OS0xICAgICAgICBmcl9GUi5JU084ODU5LTEKICAgICAgLy8gICBGUkVfRlIuODg1OSAgICAgICAgICAgICBmcl9GUi5JU084ODU5LTEKICAgICAgLy8gICBGUkVfRlIuODg1OS5pbiAgICAgICAgICBmcl9GUi5JU084ODU5LTEKICAgICAgLy8gICBoZSAgICAgICAgICAgICAgICAgICAgICBoZV9JTC5JU084ODU5LTgKICAgICAgLy8gICBoZV9JTCAgICAgICAgICAgICAgICAgICBoZV9JTC5JU084ODU5LTgKICAgICAgLy8gICBoZV9JTC5pc284ODU5OCAgICAgICAgICBoZV9JTC5JU084ODU5LTgKICAgICAgLy8gICBociAgICAgICAgICAgICAgICAgICAgICBocl9IUi5JU084ODU5LTIKICAgICAgLy8gICBocl9IUiAgICAgICAgICAgICAgICAgICBocl9IUi5JU084ODU5LTIKICAgICAgLy8gICBocl9IUi5pc284ODU5MiAgICAgICAgICBocl9IUi5JU084ODU5LTIKICAgICAgLy8gICBocl9IUi5JU09fODg1OS0yICAgICAgICBocl9IUi5JU084ODU5LTIKICAgICAgLy8gICBodSAgICAgICAgICAgICAgICAgICAgICBodV9IVS5JU084ODU5LTIKICAgICAgLy8gICBodV9IVSAgICAgICAgICAgICAgICAgICBodV9IVS5JU084ODU5LTIKICAgICAgLy8gICBodV9IVS5pc284ODU5MiAgICAgICAgICBodV9IVS5JU084ODU5LTIKICAgICAgLy8gICBodV9IVS5JU09fODg1OS0yICAgICAgICBodV9IVS5JU084ODU5LTIKICAgICAgLy8gICBpcyAgICAgICAgICAgICAgICAgICAgICBpc19JUy5JU084ODU5LTEKICAgICAgLy8gICBpc19JUyAgICAgICAgICAgICAgICAgICBpc19JUy5JU084ODU5LTEKICAgICAgLy8gICBpc19JUy5pc284ODU5MSAgICAgICAgICBpc19JUy5JU084ODU5LTEKICAgICAgLy8gICBpc19JUy5JU09fODg1OS0xICAgICAgICBpc19JUy5JU084ODU5LTEKICAgICAgLy8gICBpdCAgICAgICAgICAgICAgICAgICAgICBpdF9JVC5JU084ODU5LTEKICAgICAgLy8gICBpdF9DSCAgICAgICAgICAgICAgICAgICBpdF9DSC5JU084ODU5LTEKICAgICAgLy8gICBpdF9DSC5JU09fODg1OS0xICAgICAgICBpdF9DSC5JU084ODU5LTEKICAgICAgLy8gICBpdF9JVCAgICAgICAgICAgICAgICAgICBpdF9JVC5JU084ODU5LTEKICAgICAgLy8gICBpdF9JVC44ODU5MSAgICAgICAgICAgICBpdF9JVC5JU084ODU5LTEKICAgICAgLy8gICBpdF9JVC44ODU5MS5lbiAgICAgICAgICBpdF9JVC5JU084ODU5LTEKICAgICAgLy8gICBpdF9JVC5pc284ODU5MSAgICAgICAgICBpdF9JVC5JU084ODU5LTEKICAgICAgLy8gICBpdF9JVC5JU09fODg1OS0xICAgICAgICBpdF9JVC5JU084ODU5LTEKICAgICAgLy8gICBpdyAgICAgICAgICAgICAgICAgICAgICBpd19JTC5JU084ODU5LTgKICAgICAgLy8gICBpd19JTCAgICAgICAgICAgICAgICAgICBpd19JTC5JU084ODU5LTgKICAgICAgLy8gICBpd19JTC5pc284ODU5OCAgICAgICAgICBpd19JTC5JU084ODU5LTgKICAgICAgLy8gICBpd19JTC5JU09fODg1OS04ICAgICAgICBpd19JTC5JU084ODU5LTgKICAgICAgLy8gICBqYSAgICAgICAgICAgICAgICAgICAgICBqYV9KUC5ldWNKUAogICAgICAvLyAgIGphX0pQICAgICAgICAgICAgICAgICAgIGphX0pQLmV1Y0pQCiAgICAgIC8vICAgamFfSlAudWppcyAgICAgICAgICAgICAgamFfSlAuZXVjSlAKICAgICAgLy8gICBqYV9KUC5ldWNKUCAgICAgICAgICAgICBqYV9KUC5ldWNKUAogICAgICAvLyAgIEpwX0pQICAgICAgICAgICAgICAgICAgIGphX0pQLmV1Y0pQCiAgICAgIC8vICAgamFfSlAuQUpFQyAgICAgICAgICAgICAgamFfSlAuZXVjSlAKICAgICAgLy8gICBqYV9KUC5FVUMgICAgICAgICAgICAgICBqYV9KUC5ldWNKUAogICAgICAvLyAgIGphX0pQLklTTy0yMDIyLUpQICAgICAgIGphX0pQLkpJUzcKICAgICAgLy8gICBqYV9KUC5KSVMgICAgICAgICAgICAgICBqYV9KUC5KSVM3CiAgICAgIC8vICAgamFfSlAuamlzNyAgICAgICAgICAgICAgamFfSlAuSklTNwogICAgICAvLyAgIGphX0pQLm1zY29kZSAgICAgICAgICAgIGphX0pQLlNKSVMKICAgICAgLy8gICBqYV9KUC5TSklTICAgICAgICAgICAgICBqYV9KUC5TSklTCiAgICAgIC8vICAga28gICAgICAgICAgICAgICAgICAgICAga29fS1IuZXVjS1IKICAgICAgLy8gICBrb19LUiAgICAgICAgICAgICAgICAgICBrb19LUi5ldWNLUgogICAgICAvLyAgIGtvX0tSLkVVQyAgICAgICAgICAgICAgIGtvX0tSLmV1Y0tSCiAgICAgIC8vICAga29fS1IuZXVjICAgICAgICAgICAgICAga29fS1IuZXVjS1IKICAgICAgLy8gICAjIG1vc3QgbG9jYWxlcyBpbiBGcmVlQlNEIDIuMS5bNTZdIGRvIG5vdCB3b3JrLCBhbGxvdyB1c2Ugb2YgZ2VuZXJpYyBsYXRpbi0xCiAgICAgIC8vICAgbHRfTE4uSVNPXzg4NTktMSAgICAgICAgbHRfTE4uSVNPODg1OS0xCiAgICAgIC8vICAgbWsgICAgICAgICAgICAgICAgICAgICAgbWtfTUsuSVNPODg1OS01CiAgICAgIC8vICAgbWtfTUsgICAgICAgICAgICAgICAgICAgbWtfTUsuSVNPODg1OS01CiAgICAgIC8vICAgbWtfTUsuSVNPXzg4NTktNSAgICAgICAgbWtfTUsuSVNPODg1OS01CiAgICAgIC8vICAgbmwgICAgICAgICAgICAgICAgICAgICAgbmxfTkwuSVNPODg1OS0xCiAgICAgIC8vICAgbmxfQkUgICAgICAgICAgICAgICAgICAgbmxfQkUuSVNPODg1OS0xCiAgICAgIC8vICAgbmxfQkUuODg1OTEgICAgICAgICAgICAgbmxfQkUuSVNPODg1OS0xCiAgICAgIC8vICAgbmxfQkUuODg1OTEuZW4gICAgICAgICAgbmxfQkUuSVNPODg1OS0xCiAgICAgIC8vICAgbmxfQkUuSVNPXzg4NTktMSAgICAgICAgbmxfQkUuSVNPODg1OS0xCiAgICAgIC8vICAgbmxfTkwgICAgICAgICAgICAgICAgICAgbmxfTkwuSVNPODg1OS0xCiAgICAgIC8vICAgbmxfTkwuODg1OTEgICAgICAgICAgICAgbmxfTkwuSVNPODg1OS0xCiAgICAgIC8vICAgbmxfTkwuODg1OTEuZW4gICAgICAgICAgbmxfTkwuSVNPODg1OS0xCiAgICAgIC8vICAgbmxfTkwuaXNvODg1OTEgICAgICAgICAgbmxfTkwuSVNPODg1OS0xCiAgICAgIC8vICAgbmxfTkwuSVNPXzg4NTktMSAgICAgICAgbmxfTkwuSVNPODg1OS0xCiAgICAgIC8vICAgbm8gICAgICAgICAgICAgICAgICAgICAgbm9fTk8uSVNPODg1OS0xCiAgICAgIC8vICAgbm9fTk8gICAgICAgICAgICAgICAgICAgbm9fTk8uSVNPODg1OS0xCiAgICAgIC8vICAgbm9fTk8uODg1OTEgICAgICAgICAgICAgbm9fTk8uSVNPODg1OS0xCiAgICAgIC8vICAgbm9fTk8uODg1OTEuZW4gICAgICAgICAgbm9fTk8uSVNPODg1OS0xCiAgICAgIC8vICAgbm9fTk8uaXNvODg1OTEgICAgICAgICAgbm9fTk8uSVNPODg1OS0xCiAgICAgIC8vICAgbm9fTk8uSVNPXzg4NTktMSAgICAgICAgbm9fTk8uSVNPODg1OS0xCiAgICAgIC8vICAgcGwgICAgICAgICAgICAgICAgICAgICAgcGxfUEwuSVNPODg1OS0yCiAgICAgIC8vICAgcGxfUEwgICAgICAgICAgICAgICAgICAgcGxfUEwuSVNPODg1OS0yCiAgICAgIC8vICAgcGxfUEwuaXNvODg1OTIgICAgICAgICAgcGxfUEwuSVNPODg1OS0yCiAgICAgIC8vICAgcGxfUEwuSVNPXzg4NTktMiAgICAgICAgcGxfUEwuSVNPODg1OS0yCiAgICAgIC8vICAgcHQgICAgICAgICAgICAgICAgICAgICAgcHRfUFQuSVNPODg1OS0xCiAgICAgIC8vICAgcHRfQlIgICAgICAgICAgICAgICAgICAgcHRfQlIuSVNPODg1OS0xCiAgICAgIC8vICAgcHRfUFQgICAgICAgICAgICAgICAgICAgcHRfUFQuSVNPODg1OS0xCiAgICAgIC8vICAgcHRfUFQuODg1OTEgICAgICAgICAgICAgcHRfUFQuSVNPODg1OS0xCiAgICAgIC8vICAgcHRfUFQuODg1OTEuZW4gICAgICAgICAgcHRfUFQuSVNPODg1OS0xCiAgICAgIC8vICAgcHRfUFQuaXNvODg1OTEgICAgICAgICAgcHRfUFQuSVNPODg1OS0xCiAgICAgIC8vICAgcHRfUFQuSVNPXzg4NTktMSAgICAgICAgcHRfUFQuSVNPODg1OS0xCiAgICAgIC8vICAgcm8gICAgICAgICAgICAgICAgICAgICAgcm9fUk8uSVNPODg1OS0yCiAgICAgIC8vICAgcm9fUk8gICAgICAgICAgICAgICAgICAgcm9fUk8uSVNPODg1OS0yCiAgICAgIC8vICAgcm9fUk8uaXNvODg1OTIgICAgICAgICAgcm9fUk8uSVNPODg1OS0yCiAgICAgIC8vICAgcm9fUk8uSVNPXzg4NTktMiAgICAgICAgcm9fUk8uSVNPODg1OS0yCiAgICAgIC8vICAgcnUgICAgICAgICAgICAgICAgICAgICAgcnVfUlUuSVNPODg1OS01CiAgICAgIC8vICAgcnVfUlUgICAgICAgICAgICAgICAgICAgcnVfUlUuSVNPODg1OS01CiAgICAgIC8vICAgcnVfUlUuaXNvODg1OTUgICAgICAgICAgcnVfUlUuSVNPODg1OS01CiAgICAgIC8vICAgcnVfUlUuSVNPXzg4NTktNSAgICAgICAgcnVfUlUuSVNPODg1OS01CiAgICAgIC8vICAgcnVfU1UgICAgICAgICAgICAgICAgICAgcnVfUlUuSVNPODg1OS01CiAgICAgIC8vICAgcnVfU1UuSVNPODg1OS01ICAgICAgICAgcnVfUlUuSVNPODg1OS01CiAgICAgIC8vICAgcnVfU1UuSVNPXzg4NTktNSAgICAgICAgcnVfUlUuSVNPODg1OS01CiAgICAgIC8vICAgcnVfU1UuS09JOC1SICAgICAgICAgICAgcnVfUlUuS09JOC1SCiAgICAgIC8vICAgc2ggICAgICAgICAgICAgICAgICAgICAgc2hfWVUuSVNPODg1OS0yCiAgICAgIC8vICAgc2hfWVUgICAgICAgICAgICAgICAgICAgc2hfWVUuSVNPODg1OS0yCiAgICAgIC8vICAgc2hfWVUuSVNPXzg4NTktMiAgICAgICAgc2hfWVUuSVNPODg1OS0yCiAgICAgIC8vICAgc2hfU1AgICAgICAgICAgICAgICAgICAgc2hfWVUuSVNPODg1OS0yCiAgICAgIC8vICAgc2sgICAgICAgICAgICAgICAgICAgICAgc2tfU0suSVNPODg1OS0yCiAgICAgIC8vICAgc2tfU0sgICAgICAgICAgICAgICAgICAgc2tfU0suSVNPODg1OS0yCiAgICAgIC8vICAgc2tfU0suSVNPXzg4NTktMiAgICAgICAgc2tfU0suSVNPODg1OS0yCiAgICAgIC8vICAgc2wgICAgICAgICAgICAgICAgICAgICAgc2xfQ1MuSVNPODg1OS0yCiAgICAgIC8vICAgc2xfQ1MgICAgICAgICAgICAgICAgICAgc2xfQ1MuSVNPODg1OS0yCiAgICAgIC8vICAgc2xfQ1MuSVNPXzg4NTktMiAgICAgICAgc2xfQ1MuSVNPODg1OS0yCiAgICAgIC8vICAgc2xfU0kgICAgICAgICAgICAgICAgICAgc2xfU0kuSVNPODg1OS0yCiAgICAgIC8vICAgc2xfU0kuaXNvODg1OTIgICAgICAgICAgc2xfU0kuSVNPODg1OS0yCiAgICAgIC8vICAgc2xfU0kuSVNPXzg4NTktMiAgICAgICAgc2xfU0kuSVNPODg1OS0yCiAgICAgIC8vICAgc3AgICAgICAgICAgICAgICAgICAgICAgc3BfWVUuSVNPODg1OS01CiAgICAgIC8vICAgc3BfWVUgICAgICAgICAgICAgICAgICAgc3BfWVUuSVNPODg1OS01CiAgICAgIC8vICAgc3BfWVUuSVNPXzg4NTktNSAgICAgICAgc3BfWVUuSVNPODg1OS01CiAgICAgIC8vICAgc3JfU1AgICAgICAgICAgICAgICAgICAgc3JfU1AuSVNPODg1OS0yCiAgICAgIC8vICAgc3JfU1AuSVNPXzg4NTktMiAgICAgICAgc3JfU1AuSVNPODg1OS0yCiAgICAgIC8vICAgc3YgICAgICAgICAgICAgICAgICAgICAgc3ZfU0UuSVNPODg1OS0xCiAgICAgIC8vICAgc3ZfU0UgICAgICAgICAgICAgICAgICAgc3ZfU0UuSVNPODg1OS0xCiAgICAgIC8vICAgc3ZfU0UuODg1OTEgICAgICAgICAgICAgc3ZfU0UuSVNPODg1OS0xCiAgICAgIC8vICAgc3ZfU0UuODg1OTEuZW4gICAgICAgICAgc3ZfU0UuSVNPODg1OS0xCiAgICAgIC8vICAgc3ZfU0UuaXNvODg1OTEgICAgICAgICAgc3ZfU0UuSVNPODg1OS0xCiAgICAgIC8vICAgc3ZfU0UuSVNPXzg4NTktMSAgICAgICAgc3ZfU0UuSVNPODg1OS0xCiAgICAgIC8vICAgdGhfVEggICAgICAgICAgICAgICAgICAgdGhfVEguVEFDVElTCiAgICAgIC8vICAgdHIgICAgICAgICAgICAgICAgICAgICAgdHJfVFIuSVNPODg1OS05CiAgICAgIC8vICAgdHJfVFIgICAgICAgICAgICAgICAgICAgdHJfVFIuSVNPODg1OS05CiAgICAgIC8vICAgdHJfVFIuaXNvODg1OTkgICAgICAgICAgdHJfVFIuSVNPODg1OS05CiAgICAgIC8vICAgdHJfVFIuSVNPXzg4NTktOSAgICAgICAgdHJfVFIuSVNPODg1OS05CiAgICAgIC8vICAgemggICAgICAgICAgICAgICAgICAgICAgemhfQ04uZXVjQ04KICAgICAgLy8gICB6aF9DTiAgICAgICAgICAgICAgICAgICB6aF9DTi5ldWNDTgogICAgICAvLyAgIHpoX0NOLkVVQyAgICAgICAgICAgICAgIHpoX0NOLmV1Y0NOCiAgICAgIC8vICAgemhfVFcgICAgICAgICAgICAgICAgICAgemhfVFcuZXVjVFcKICAgICAgLy8gICB6aF9UVy5FVUMgICAgICAgICAgICAgICB6aF9UVy5ldWNUVwogICAgICAvLyAgICMgVGhlIGZvbGxvd2luZyBsb2NhbGUgbmFtZXMgYXJlIHVzZWQgaW4gU0NPIDMuMAogICAgICAvLyAgIGVuZ2xpc2hfdWsuODg1OSAgICAgICAgIGVuX0dCLklTTzg4NTktMQogICAgICAvLyAgIGVuZ2xpc2hfdXMuODg1OSAgICAgICAgIGVuX1VTLklTTzg4NTktMQogICAgICAvLyAgIGVuZ2xpc2hfdXMuYXNjaWkgICAgICAgIGVuX1VTLklTTzg4NTktMQogICAgICAvLyAgIGZyZW5jaF9mcmFuY2UuODg1OSAgICAgIGZyX0ZSLklTTzg4NTktMQogICAgICAvLyAgIGdlcm1hbl9nZXJtYW55Ljg4NTkgICAgIGRlX0RFLklTTzg4NTktMQogICAgICAvLyAgIHBvcnR1Z3Vlc2VfYnJhemlsLjg4NTkgIHB0X0JSLklTTzg4NTktMQogICAgICAvLyAgIHNwYW5pc2hfc3BhaW4uODg1OSAgICAgIGVzX0VTLklTTzg4NTktMQogICAgICAvLyAgICMgVGhlIGZvbGxvd2luZyBsb2NhbGUgbmFtZXMgYXJlIHVzZWQgaW4gSFBVWCA5LngKICAgICAgLy8gICBhbWVyaWNhbi5pc284ODU5MSAgICAgICBlbl9VUy5JU084ODU5LTEKICAgICAgLy8gICBhcmFiaWMuaXNvODg1OTYgICAgICAgICBhcl9BQS5JU084ODU5LTYKICAgICAgLy8gICBidWxnYXJpYW4gICAgICAgICAgICAgICBiZ19CRy5JU084ODU5LTUKICAgICAgLy8gICBjLWZyZW5jaC5pc284ODU5MSAgICAgICBmcl9DQS5JU084ODU5LTEKICAgICAgLy8gICBjaGluZXNlLXMgICAgICAgICAgICAgICB6aF9DTi5ldWNDTgogICAgICAvLyAgIGNoaW5lc2UtdCAgICAgICAgICAgICAgIHpoX1RXLmV1Y1RXCiAgICAgIC8vICAgY3JvYXRpYW4gICAgICAgICAgICAgICAgaHJfSFIuSVNPODg1OS0yCiAgICAgIC8vICAgY3plY2ggICAgICAgICAgICAgICAgICAgY3NfQ1MuSVNPODg1OS0yCiAgICAgIC8vICAgZGFuaXNoLmlzbzg4NTkxICAgICAgICAgZGFfREsuSVNPODg1OS0xCiAgICAgIC8vICAgZHV0Y2guaXNvODg1OTEgICAgICAgICAgbmxfQkUuSVNPODg1OS0xCiAgICAgIC8vICAgZW5nbGlzaC5pc284ODU5MSAgICAgICAgZW5fRU4uSVNPODg1OS0xCiAgICAgIC8vICAgZmlubmlzaC5pc284ODU5MSAgICAgICAgZmlfRkkuSVNPODg1OS0xCiAgICAgIC8vICAgZnJlbmNoLmlzbzg4NTkxICAgICAgICAgZnJfQ0guSVNPODg1OS0xCiAgICAgIC8vICAgZ2VybWFuLmlzbzg4NTkxICAgICAgICAgZGVfQ0guSVNPODg1OS0xCiAgICAgIC8vICAgZ3JlZWsuaXNvODg1OTcgICAgICAgICAgZWxfR1IuSVNPODg1OS03CiAgICAgIC8vICAgaGVicmV3Lmlzbzg4NTk4ICAgICAgICAgaXdfSUwuSVNPODg1OS04CiAgICAgIC8vICAgaHVuZ2FyaWFuICAgICAgICAgICAgICAgaHVfSFUuSVNPODg1OS0yCiAgICAgIC8vICAgaWNlbGFuZGljLmlzbzg4NTkxICAgICAgaXNfSVMuSVNPODg1OS0xCiAgICAgIC8vICAgaXRhbGlhbi5pc284ODU5MSAgICAgICAgaXRfSVQuSVNPODg1OS0xCiAgICAgIC8vICAgamFwYW5lc2UgICAgICAgICAgICAgICAgamFfSlAuU0pJUwogICAgICAvLyAgIGphcGFuZXNlLmV1YyAgICAgICAgICAgIGphX0pQLmV1Y0pQCiAgICAgIC8vICAga29yZWFuICAgICAgICAgICAgICAgICAga29fS1IuZXVjS1IKICAgICAgLy8gICBub3J3ZWdpYW4uaXNvODg1OTEgICAgICBub19OTy5JU084ODU5LTEKICAgICAgLy8gICBwb2xpc2ggICAgICAgICAgICAgICAgICBwbF9QTC5JU084ODU5LTIKICAgICAgLy8gICBwb3J0dWd1ZXNlLmlzbzg4NTkxICAgICBwdF9QVC5JU084ODU5LTEKICAgICAgLy8gICBydW1hbmlhbiAgICAgICAgICAgICAgICByb19STy5JU084ODU5LTIKICAgICAgLy8gICBydXNzaWFuICAgICAgICAgICAgICAgICBydV9TVS5JU084ODU5LTUKICAgICAgLy8gICBzZXJib2Nyb2F0aWFuICAgICAgICAgICBzaF9ZVS5JU084ODU5LTIKICAgICAgLy8gICBzbG92YWsgICAgICAgICAgICAgICAgICBza19TSy5JU084ODU5LTIKICAgICAgLy8gICBzbG92ZW5lICAgICAgICAgICAgICAgICBzbF9DUy5JU084ODU5LTIKICAgICAgLy8gICBzcGFuaXNoLmlzbzg4NTkxICAgICAgICBlc19FUy5JU084ODU5LTEKICAgICAgLy8gICBzd2VkaXNoLmlzbzg4NTkxICAgICAgICBzdl9TRS5JU084ODU5LTEKICAgICAgLy8gICB0dXJraXNoLmlzbzg4NTk5ICAgICAgICB0cl9UUi5JU084ODU5LTkKICAgICAgLy8gICAjIFNvbGFyaXMgYW5kIFN1bk9TIGhhdmUgaXNvXzg4NTlfMSBMQ19DVFlQRVMgdG8gYXVnbWVudCBMQU5HPUMKICAgICAgLy8gICBpc29fODg1OV8xICAgICAgICAgICAgICBlbl9VUy5JU084ODU5LTEKICAgICAgLy8gICAjIE1pY3Jvc29mdCBXaW5kb3dzL05UIDMuNTEgSmFwYW5lc2UgRWRpdGlvbgogICAgICAvLyAgIEtvcmVhbl9Lb3JlYS45NDkgICAgICAgIGtvX0tSLmV1Y0tSCiAgICAgIC8vICAgSmFwYW5lc2VfSmFwYW4uOTMyICAgICAgamFfSlAuU0pJUwogICAgICAvLyAgICMgT3RoZXIgbWlzY2VsbGFuZW91cyBsb2NhbGUgbmFtZXMKICAgICAgLy8gICBJU084ODU5LTEgICAgICAgICAgICAgICBlbl9VUy5JU084ODU5LTEKICAgICAgLy8gICBJU08tODg1OS0xICAgICAgICAgICAgICBlbl9VUy5JU084ODU5LTEKICAgICAgLy8gICBqYXBhbiAgICAgICAgICAgICAgICAgICBqYV9KUC5ldWNKUAogICAgICAvLyAgIEphcGFuZXNlLUVVQyAgICAgICAgICAgIGphX0pQLmV1Y0pQCiAgICAgIC8vCiAgICAgIC8vIEdOVSBsb2NhbGUuYWxpYXM6CiAgICAgIC8vICAgY3plY2ggICAgICAgICAgICAgICAgICAgY3NfQ1ouSVNPLTg4NTktMgogICAgICAvLyAgIGRhbmlzaCAgICAgICAgICAgICAgICAgIGRhX0RLLklTTy04ODU5LTEKICAgICAgLy8gICBkYW5zayAgICAgICAgICAgICAgICAgICBkYV9ESy5JU08tODg1OS0xCiAgICAgIC8vICAgZGV1dHNjaCAgICAgICAgICAgICAgICAgZGVfREUuSVNPLTg4NTktMQogICAgICAvLyAgIGR1dGNoICAgICAgICAgICAgICAgICAgIG5sX05MLklTTy04ODU5LTEKICAgICAgLy8gICBmaW5uaXNoICAgICAgICAgICAgICAgICBmaV9GSS5JU08tODg1OS0xCiAgICAgIC8vICAgZnJhbiNhaXMgICAgICAgICAgICAgICAgZnJfRlIuSVNPLTg4NTktMQogICAgICAvLyAgIGZyZW5jaCAgICAgICAgICAgICAgICAgIGZyX0ZSLklTTy04ODU5LTEKICAgICAgLy8gICBnZXJtYW4gICAgICAgICAgICAgICAgICBkZV9ERS5JU08tODg1OS0xCiAgICAgIC8vICAgZ3JlZWsgICAgICAgICAgICAgICAgICAgZWxfR1IuSVNPLTg4NTktNwogICAgICAvLyAgIGhlYnJldyAgICAgICAgICAgICAgICAgIGl3X0lMLklTTy04ODU5LTgKICAgICAgLy8gICBodW5nYXJpYW4gICAgICAgICAgICAgICBodV9IVS5JU08tODg1OS0yCiAgICAgIC8vICAgaWNlbGFuZGljICAgICAgICAgICAgICAgaXNfSVMuSVNPLTg4NTktMQogICAgICAvLyAgIGl0YWxpYW4gICAgICAgICAgICAgICAgIGl0X0lULklTTy04ODU5LTEKICAgICAgLy8gICBqYXBhbmVzZSAgICAgICAgICAgICAgICBqYV9KUC5TSklTCiAgICAgIC8vICAgamFwYW5lc2UuZXVjICAgICAgICAgICAgamFfSlAuZXVjSlAKICAgICAgLy8gICBub3J3ZWdpYW4gICAgICAgICAgICAgICBub19OTy5JU08tODg1OS0xCiAgICAgIC8vICAgcG9saXNoICAgICAgICAgICAgICAgICAgcGxfUEwuSVNPLTg4NTktMgogICAgICAvLyAgIHBvcnR1Z3Vlc2UgICAgICAgICAgICAgIHB0X1BULklTTy04ODU5LTEKICAgICAgLy8gICByb21hbmlhbiAgICAgICAgICAgICAgICByb19STy5JU08tODg1OS0yCiAgICAgIC8vICAgcnVzc2lhbiAgICAgICAgICAgICAgICAgcnVfUlUuSVNPLTg4NTktNQogICAgICAvLyAgIHNsb3ZhayAgICAgICAgICAgICAgICAgIHNrX1NLLklTTy04ODU5LTIKICAgICAgLy8gICBzbG92ZW5lICAgICAgICAgICAgICAgICBzbF9DUy5JU08tODg1OS0yCiAgICAgIC8vICAgc3BhbmlzaCAgICAgICAgICAgICAgICAgZXNfRVMuSVNPLTg4NTktMQogICAgICAvLyAgIHN3ZWRpc2ggICAgICAgICAgICAgICAgIHN2X1NFLklTTy04ODU5LTEKICAgICAgLy8gICB0dXJraXNoICAgICAgICAgICAgICAgICB0cl9UUi5JU08tODg1OS05CiAgICAgIC8vCiAgICAgIGlmIChsb2NhbGUgJiYgKmxvY2FsZSkgewogICAgICAgIC8vIFRoZSBtb3N0IGdlbmVyYWwgc3ludGF4IG9mIGEgbG9jYWxlIChub3QgYWxsIG9wdGlvbmFsIHBhcnRzCiAgICAgICAgLy8gcmVjb2duaXplZCBieSBhbGwgc3lzdGVtcykgaXMKICAgICAgICAvLyBsYW5ndWFnZVtfdGVycml0b3J5XVsuY29kZXNldF1bQG1vZGlmaWVyXVsrc3BlY2lhbF1bLFtzcG9uc29yXVtfcmV2aXNpb25dXQogICAgICAgIC8vIFRvIHJldHJpZXZlIHRoZSBjb2Rlc2V0LCBzZWFyY2ggdGhlIGZpcnN0IGRvdC4gU3RvcCBzZWFyY2hpbmcgd2hlbgogICAgICAgIC8vIGEgJ0AnIG9yICcrJyBvciAnLCcgaXMgZW5jb3VudGVyZWQuCiAgICAgICAgY2hhciogYnVmID0gKGNoYXIqKSBtYWxsb2Moc3RybGVuKGxvY2FsZSkrMSk7CiAgICAgICAgY29uc3QgY2hhciogY29kZXNldCA9IE5VTEw7CiAgICAgICAgewogICAgICAgICAgY29uc3QgY2hhciogY3AgPSBsb2NhbGU7CiAgICAgICAgICBmb3IgKDsgKmNwICE9ICdcMCcgJiYgKmNwICE9ICdAJyAmJiAqY3AgIT0gJysnICYmICpjcCAhPSAnLCc7IGNwKyspIHsKICAgICAgICAgICAgaWYgKCpjcCA9PSAnLicpIHsKICAgICAgICAgICAgICBjb2Rlc2V0ID0gKytjcDsKICAgICAgICAgICAgICBmb3IgKDsgKmNwICE9ICdcMCcgJiYgKmNwICE9ICdAJyAmJiAqY3AgIT0gJysnICYmICpjcCAhPSAnLCc7IGNwKyspOwogICAgICAgICAgICAgIGlmICgqY3AgIT0gJ1wwJykgewogICAgICAgICAgICAgICAgc2l6ZV90IG4gPSBjcCAtIGNvZGVzZXQ7CiAgICAgICAgICAgICAgICBtZW1jcHkoYnVmLGNvZGVzZXQsbik7CiAgICAgICAgICAgICAgICBidWZbbl0gPSAnXDAnOwogICAgICAgICAgICAgICAgY29kZXNldCA9IGJ1ZjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGNvZGVzZXQpIHsKICAgICAgICAgIC8vIENhbm9uaWNhbGl6ZSB0aGUgY2hhcnNldCBnaXZlbiBhZnRlciB0aGUgZG90LgogICAgICAgICAgaWYgKCAgIHN0cmVxKGNvZGVzZXQsIklTTzg4NTktMSIpCiAgICAgICAgICAgICAgfHwgc3RyZXEoY29kZXNldCwiSVNPXzg4NTktMSIpCiAgICAgICAgICAgICAgfHwgc3RyZXEoY29kZXNldCwiaXNvODg1OTEiKQogICAgICAgICAgICAgIHx8IHN0cmVxKGNvZGVzZXQsIjg4NTkxIikKICAgICAgICAgICAgICB8fCBzdHJlcShjb2Rlc2V0LCI4ODU5MS5lbiIpCiAgICAgICAgICAgICAgfHwgc3RyZXEoY29kZXNldCwiODg1OSIpCiAgICAgICAgICAgICAgfHwgc3RyZXEoY29kZXNldCwiODg1OS5pbiIpCiAgICAgICAgICAgICAgfHwgc3RyZXEoY29kZXNldCwiYXNjaWkiKQogICAgICAgICAgICAgKQogICAgICAgICAgICBsb2NhbGVfY2hhcnNldCA9ICJJU08tODg1OS0xIjsKICAgICAgICAgIGVsc2UKICAgICAgICAgIGlmICggICBzdHJlcShjb2Rlc2V0LCJJU084ODU5LTIiKQogICAgICAgICAgICAgIHx8IHN0cmVxKGNvZGVzZXQsIklTT184ODU5LTIiKQogICAgICAgICAgICAgIHx8IHN0cmVxKGNvZGVzZXQsImlzbzg4NTkyIikKICAgICAgICAgICAgICkKICAgICAgICAgICAgbG9jYWxlX2NoYXJzZXQgPSAiSVNPLTg4NTktMiI7CiAgICAgICAgICBlbHNlCiAgICAgICAgICBpZiAoICAgc3RyZXEoY29kZXNldCwiSVNPODg1OS01IikKICAgICAgICAgICAgICB8fCBzdHJlcShjb2Rlc2V0LCJJU09fODg1OS01IikKICAgICAgICAgICAgICB8fCBzdHJlcShjb2Rlc2V0LCJpc284ODU5NSIpCiAgICAgICAgICAgICApCiAgICAgICAgICAgIGxvY2FsZV9jaGFyc2V0ID0gIklTTy04ODU5LTUiOwogICAgICAgICAgZWxzZQogICAgICAgICAgaWYgKCAgIHN0cmVxKGNvZGVzZXQsIklTTzg4NTktNiIpCiAgICAgICAgICAgICAgfHwgc3RyZXEoY29kZXNldCwiSVNPXzg4NTktNiIpCiAgICAgICAgICAgICAgfHwgc3RyZXEoY29kZXNldCwiaXNvODg1OTYiKQogICAgICAgICAgICAgKQogICAgICAgICAgICBsb2NhbGVfY2hhcnNldCA9ICJJU08tODg1OS02IjsKICAgICAgICAgIGVsc2UKICAgICAgICAgIGlmICggICBzdHJlcShjb2Rlc2V0LCJJU084ODU5LTciKQogICAgICAgICAgICAgIHx8IHN0cmVxKGNvZGVzZXQsIklTT184ODU5LTciKQogICAgICAgICAgICAgIHx8IHN0cmVxKGNvZGVzZXQsImlzbzg4NTk3IikKICAgICAgICAgICAgICkKICAgICAgICAgICAgbG9jYWxlX2NoYXJzZXQgPSAiSVNPLTg4NTktNyI7CiAgICAgICAgICBlbHNlCiAgICAgICAgICBpZiAoICAgc3RyZXEoY29kZXNldCwiSVNPODg1OS04IikKICAgICAgICAgICAgICB8fCBzdHJlcShjb2Rlc2V0LCJpc284ODU5OCIpCiAgICAgICAgICAgICApCiAgICAgICAgICAgIGxvY2FsZV9jaGFyc2V0ID0gIklTTy04ODU5LTgiOwogICAgICAgICAgZWxzZQogICAgICAgICAgaWYgKCAgIHN0cmVxKGNvZGVzZXQsIklTTzg4NTktOSIpCiAgICAgICAgICAgICAgfHwgc3RyZXEoY29kZXNldCwiSVNPXzg4NTktOSIpCiAgICAgICAgICAgICAgfHwgc3RyZXEoY29kZXNldCwiaXNvODg1OTkiKQogICAgICAgICAgICAgKQogICAgICAgICAgICBsb2NhbGVfY2hhcnNldCA9ICJJU08tODg1OS05IjsKICAgICAgICAgIGVsc2UKICAgICAgICAgIGlmIChzdHJlcShjb2Rlc2V0LCJLT0k4LVIiKSkKICAgICAgICAgICAgbG9jYWxlX2NoYXJzZXQgPSAiS09JOC1SIjsKICAgICAgICAgIGVsc2UKICAgICAgICAgIGlmIChzdHJlcShjb2Rlc2V0LCJLT0k4LVUiKSkKICAgICAgICAgICAgbG9jYWxlX2NoYXJzZXQgPSAiS09JOC1VIjsKICAgICAgICAgIGVsc2UKICAgICAgICAgIGlmICggICBzdHJlcShjb2Rlc2V0LCJldWNKUCIpCiAgICAgICAgICAgICAgfHwgc3RyZXEoY29kZXNldCwidWppcyIpCiAgICAgICAgICAgICAgfHwgc3RyZXEoY29kZXNldCwiQUpFQyIpCiAgICAgICAgICAgICApCiAgICAgICAgICAgIGxvY2FsZV9jaGFyc2V0ID0gImV1Y0pQIjsKICAgICAgICAgIGVsc2UKICAgICAgICAgIGlmICggICBzdHJlcShjb2Rlc2V0LCJKSVM3IikKICAgICAgICAgICAgICB8fCBzdHJlcShjb2Rlc2V0LCJqaXM3IikKICAgICAgICAgICAgICB8fCBzdHJlcShjb2Rlc2V0LCJKSVMiKQogICAgICAgICAgICAgIHx8IHN0cmVxKGNvZGVzZXQsIklTTy0yMDIyLUpQIikKICAgICAgICAgICAgICkKICAgICAgICAgICAgbG9jYWxlX2NoYXJzZXQgPSAiSVNPLTIwMjItSlAiOyAvKiB3YXM6ICJKSVM3IjsgKi8KICAgICAgICAgIGVsc2UKICAgICAgICAgIGlmICggICBzdHJlcShjb2Rlc2V0LCJTSklTIikKICAgICAgICAgICAgICB8fCBzdHJlcShjb2Rlc2V0LCJtc2NvZGUiKQogICAgICAgICAgICAgIHx8IHN0cmVxKGNvZGVzZXQsIjkzMiIpCiAgICAgICAgICAgICApCiAgICAgICAgICAgIGxvY2FsZV9jaGFyc2V0ID0gIlNKSVMiOwogICAgICAgICAgZWxzZQogICAgICAgICAgaWYgKCAgIHN0cmVxKGNvZGVzZXQsImV1Y0tSIikKICAgICAgICAgICAgICB8fCBzdHJlcShjb2Rlc2V0LCI5NDkiKQogICAgICAgICAgICAgKQogICAgICAgICAgICBsb2NhbGVfY2hhcnNldCA9ICJldWNLUiI7CiAgICAgICAgICBlbHNlCiAgICAgICAgICBpZiAoc3RyZXEoY29kZXNldCwiZXVjQ04iKSkKICAgICAgICAgICAgbG9jYWxlX2NoYXJzZXQgPSAiZXVjQ04iOwogICAgICAgICAgZWxzZQogICAgICAgICAgaWYgKHN0cmVxKGNvZGVzZXQsImV1Y1RXIikpCiAgICAgICAgICAgIGxvY2FsZV9jaGFyc2V0ID0gImV1Y1RXIjsKICAgICAgICAgIGVsc2UKICAgICAgICAgIGlmIChzdHJlcShjb2Rlc2V0LCJUQUNUSVMiKSkKICAgICAgICAgICAgbG9jYWxlX2NoYXJzZXQgPSAiVElTLTYyMCI7IC8qIHdhczogIlRBQ1RJUyI7ICovCiAgICAgICAgICBlbHNlCiAgICAgICAgICBpZiAoc3RyZXEoY29kZXNldCwiRVVDIikgfHwgc3RyZXEoY29kZXNldCwiZXVjIikpIHsKICAgICAgICAgICAgaWYgKGxvY2FsZVswXT09J2onICYmIGxvY2FsZVsxXT09J2EnKQogICAgICAgICAgICAgIGxvY2FsZV9jaGFyc2V0ID0gImV1Y0pQIjsKICAgICAgICAgICAgZWxzZSBpZiAobG9jYWxlWzBdPT0naycgJiYgbG9jYWxlWzFdPT0nbycpCiAgICAgICAgICAgICAgbG9jYWxlX2NoYXJzZXQgPSAiZXVjS1IiOwogICAgICAgICAgICBlbHNlIGlmIChsb2NhbGVbMF09PSd6JyAmJiBsb2NhbGVbMV09PSdoJyAmJiBsb2NhbGVbMl09PSdfJykgewogICAgICAgICAgICAgIGlmIChsb2NhbGVbM109PSdDJyAmJiBsb2NhbGVbNF09PSdOJykKICAgICAgICAgICAgICAgIGxvY2FsZV9jaGFyc2V0ID0gImV1Y0NOIjsKICAgICAgICAgICAgICBlbHNlIGlmIChsb2NhbGVbM109PSdUJyAmJiBsb2NhbGVbNF09PSdXJykKICAgICAgICAgICAgICAgIGxvY2FsZV9jaGFyc2V0ID0gImV1Y1RXIjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBhcmUgQ0xJU1AgZXh0ZW5zaW9ucy4KICAgICAgICAgIGlmICggICBzdHJlcShjb2Rlc2V0LCJVVEYtOCIpCiAgICAgICAgICAgICAgfHwgc3RyZXEoY29kZXNldCwidXRmOCIpCiAgICAgICAgICAgICApCiAgICAgICAgICAgIGxvY2FsZV9jaGFyc2V0ID0gIlVURi04IjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gTm8gZG90IGZvdW5kLiBDaG9vc2UgYSBkZWZhdWx0LCBiYXNlZCBvbiBsb2NhbGUuCiAgICAgICAgICBpZiAoICAgc3RyZXEobG9jYWxlLCJpc29fODg1OV8xIikKICAgICAgICAgICAgICB8fCBzdHJlcShsb2NhbGUsIklTTzg4NTktMSIpCiAgICAgICAgICAgICAgfHwgc3RyZXEobG9jYWxlLCJJU08tODg1OS0xIikKICAgICAgICAgICAgICkKICAgICAgICAgICAgbG9jYWxlX2NoYXJzZXQgPSAiSVNPLTg4NTktMSI7CiAgICAgICAgICBlbHNlCiAgICAgICAgICBpZiAoMCkKICAgICAgICAgICAgbG9jYWxlX2NoYXJzZXQgPSAiSVNPLTg4NTktMiI7CiAgICAgICAgICBlbHNlCiAgICAgICAgICBpZiAoMCkKICAgICAgICAgICAgbG9jYWxlX2NoYXJzZXQgPSAiSVNPLTg4NTktNSI7CiAgICAgICAgICBlbHNlCiAgICAgICAgICBpZiAoMCkKICAgICAgICAgICAgbG9jYWxlX2NoYXJzZXQgPSAiSVNPLTg4NTktNiI7CiAgICAgICAgICBlbHNlCiAgICAgICAgICBpZiAoMCkKICAgICAgICAgICAgbG9jYWxlX2NoYXJzZXQgPSAiSVNPLTg4NTktNyI7CiAgICAgICAgICBlbHNlCiAgICAgICAgICBpZiAoMCkKICAgICAgICAgICAgbG9jYWxlX2NoYXJzZXQgPSAiSVNPLTg4NTktOCI7CiAgICAgICAgICBlbHNlCiAgICAgICAgICBpZiAoMCkKICAgICAgICAgICAgbG9jYWxlX2NoYXJzZXQgPSAiSVNPLTg4NTktOSI7CiAgICAgICAgICBlbHNlCiAgICAgICAgICBpZiAoMCkKICAgICAgICAgICAgbG9jYWxlX2NoYXJzZXQgPSAiS09JOC1SIjsKICAgICAgICAgIGVsc2UKICAgICAgICAgIGlmICgwKQogICAgICAgICAgICBsb2NhbGVfY2hhcnNldCA9ICJLT0k4LVUiOwogICAgICAgICAgZWxzZQogICAgICAgICAgaWYgKDApCiAgICAgICAgICAgIGxvY2FsZV9jaGFyc2V0ID0gImV1Y0pQIjsKICAgICAgICAgIGVsc2UKICAgICAgICAgIGlmICgwKQogICAgICAgICAgICBsb2NhbGVfY2hhcnNldCA9ICJJU08tMjAyMi1KUCI7IC8qIHdhczogIkpJUzciOyAqLwogICAgICAgICAgZWxzZQogICAgICAgICAgaWYgKDApCiAgICAgICAgICAgIGxvY2FsZV9jaGFyc2V0ID0gIlNKSVMiOwogICAgICAgICAgZWxzZQogICAgICAgICAgaWYgKDApCiAgICAgICAgICAgIGxvY2FsZV9jaGFyc2V0ID0gImV1Y0tSIjsKICAgICAgICAgIGVsc2UKICAgICAgICAgIGlmIChzdHJlcShsb2NhbGUsInpoX0NOIikgfHwgc3RyZXEobG9jYWxlLCJ6aCIpCiAgICAgICAgICAgICApCiAgICAgICAgICAgIGxvY2FsZV9jaGFyc2V0ID0gImV1Y0NOIjsKICAgICAgICAgIGVsc2UKICAgICAgICAgIGlmIChzdHJlcShsb2NhbGUsInpoX1RXIikKICAgICAgICAgICAgICkKICAgICAgICAgICAgbG9jYWxlX2NoYXJzZXQgPSAiZXVjVFciOwogICAgICAgICAgZWxzZQogICAgICAgICAgaWYgKDApCiAgICAgICAgICAgIGxvY2FsZV9jaGFyc2V0ID0gIlRJUy02MjAiOyAvKiB3YXM6ICJUQUNUSVMiOyAqLwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIC8vIENob29zZSBhIGRlZmF1bHQsIGJhc2VkIG9uIHRoZSBsYW5ndWFnZSBvbmx5LgogICAgICAgICAgICBjb25zdCBjaGFyKiB1bmRlcnNjb3JlID0gc3RyY2hyKGxvY2FsZSwnXycpOwogICAgICAgICAgICBjb25zdCBjaGFyKiBsYW5nOwogICAgICAgICAgICBpZiAodW5kZXJzY29yZSkgewogICAgICAgICAgICAgIHNpemVfdCBuID0gdW5kZXJzY29yZSAtIGxvY2FsZTsKICAgICAgICAgICAgICBtZW1jcHkoYnVmLGxvY2FsZSxuKTsKICAgICAgICAgICAgICBidWZbbl0gPSAnXDAnOwogICAgICAgICAgICAgIGxhbmcgPSBidWY7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgbGFuZyA9IGxvY2FsZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICAgc3RyZXEobGFuZywiYWYiKSB8fCBzdHJlcShsYW5nLCJhZnJpa2FhbnMiKQogICAgICAgICAgICAgICAgfHwgc3RyZXEobGFuZywiY2EiKSB8fCBzdHJlcShsYW5nLCJjYXRhbGFuIikKICAgICAgICAgICAgICAgIHx8IHN0cmVxKGxhbmcsImRhIikgfHwgc3RyZXEobGFuZywiZGFuaXNoIikgfHwgc3RyZXEobGFuZywiZGFuc2siKQogICAgICAgICAgICAgICAgfHwgc3RyZXEobGFuZywiZGUiKSB8fCBzdHJlcShsYW5nLCJnZXJtYW4iKSB8fCBzdHJlcShsYW5nLCJkZXV0c2NoIikKICAgICAgICAgICAgICAgIHx8IHN0cmVxKGxhbmcsImVuIikgfHwgc3RyZXEobGFuZywiZW5nbGlzaCIpCiAgICAgICAgICAgICAgICB8fCBzdHJlcShsYW5nLCJlcyIpIHx8IHN0cmVxKGxhbmcsInNwYW5pc2giKQogICAgICAgICAgICAgICAgfHwgc3RyZXEobGFuZywiZXUiKSB8fCBzdHJlcShsYW5nLCJiYXNxdWUiKQogICAgICAgICAgICAgICAgfHwgc3RyZXEobGFuZywiZmkiKSB8fCBzdHJlcShsYW5nLCJmaW5uaXNoIikKICAgICAgICAgICAgICAgIHx8IHN0cmVxKGxhbmcsImZvIikgfHwgc3RyZXEobGFuZywiZmFyb2VzZSIpIHx8IHN0cmVxKGxhbmcsImZhZXJvZXNlIikKICAgICAgICAgICAgICAgIHx8IHN0cmVxKGxhbmcsImZyIikgfHwgc3RyZXEobGFuZywiZnJlbmNoIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2lmbmRlZiBBU0NJSV9DSFMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgc3RyZXEobGFuZywiZnJhbudhaXMiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKICAgICAgICAgICAgICAgIHx8IHN0cmVxKGxhbmcsImdhIikgfHwgc3RyZXEobGFuZywiaXJpc2giKQogICAgICAgICAgICAgICAgfHwgc3RyZXEobGFuZywiZ2QiKSB8fCBzdHJlcShsYW5nLCJzY290dGlzaCIpCiAgICAgICAgICAgICAgICB8fCBzdHJlcShsYW5nLCJnbCIpIHx8IHN0cmVxKGxhbmcsImdhbGljaWFuIikKICAgICAgICAgICAgICAgIHx8IHN0cmVxKGxhbmcsImlzIikgfHwgc3RyZXEobGFuZywiaWNlbGFuZGljIikKICAgICAgICAgICAgICAgIHx8IHN0cmVxKGxhbmcsIml0IikgfHwgc3RyZXEobGFuZywiaXRhbGlhbiIpCiAgICAgICAgICAgICAgICB8fCBzdHJlcShsYW5nLCJubCIpIHx8IHN0cmVxKGxhbmcsImR1dGNoIikKICAgICAgICAgICAgICAgIHx8IHN0cmVxKGxhbmcsIm5vIikgfHwgc3RyZXEobGFuZywibm9yd2VnaWFuIikKICAgICAgICAgICAgICAgIHx8IHN0cmVxKGxhbmcsInB0IikgfHwgc3RyZXEobGFuZywicG9ydHVndWVzZSIpCiAgICAgICAgICAgICAgICB8fCBzdHJlcShsYW5nLCJzdiIpIHx8IHN0cmVxKGxhbmcsInN3ZWRpc2giKQogICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgbG9jYWxlX2NoYXJzZXQgPSAiSVNPLTg4NTktMSI7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgaWYgKCAgIHN0cmVxKGxhbmcsImNzIikgfHwgc3RyZXEobGFuZywiY3plY2giKQogICAgICAgICAgICAgICAgfHwgc3RyZXEobGFuZywiY3oiKQogICAgICAgICAgICAgICAgfHwgc3RyZXEobGFuZywiaHIiKSB8fCBzdHJlcShsYW5nLCJjcm9hdGlhbiIpCiAgICAgICAgICAgICAgICB8fCBzdHJlcShsYW5nLCJodSIpIHx8IHN0cmVxKGxhbmcsImh1bmdhcmlhbiIpCiAgICAgICAgICAgICAgICB8fCBzdHJlcShsYW5nLCJwbCIpIHx8IHN0cmVxKGxhbmcsInBvbGlzaCIpCiAgICAgICAgICAgICAgICB8fCBzdHJlcShsYW5nLCJybyIpIHx8IHN0cmVxKGxhbmcsInJvbWFuaWFuIikgfHwgc3RyZXEobGFuZywicnVtYW5pYW4iKQogICAgICAgICAgICAgICAgfHwgc3RyZXEobGFuZywic2giKSAvKiB8fCBzdHJlcShsYW5nLCJzZXJib2Nyb2F0aWFuIikgPz8gKi8KICAgICAgICAgICAgICAgIHx8IHN0cmVxKGxhbmcsInNrIikgfHwgc3RyZXEobGFuZywic2xvdmFrIikKICAgICAgICAgICAgICAgIHx8IHN0cmVxKGxhbmcsInNsIikgfHwgc3RyZXEobGFuZywic2xvdmVuZSIpIHx8IHN0cmVxKGxhbmcsInNsb3ZlbmlhbiIpCiAgICAgICAgICAgICAgICB8fCBzdHJlcShsYW5nLCJzcSIpIHx8IHN0cmVxKGxhbmcsImFsYmFuaWFuIikKICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgIGxvY2FsZV9jaGFyc2V0ID0gIklTTy04ODU5LTIiOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGlmICggICBzdHJlcShsYW5nLCJlbyIpIHx8IHN0cmVxKGxhbmcsImVzcGVyYW50byIpCiAgICAgICAgICAgICAgICB8fCBzdHJlcShsYW5nLCJtdCIpIHx8IHN0cmVxKGxhbmcsIm1hbHRlc2UiKQogICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgbG9jYWxlX2NoYXJzZXQgPSAiSVNPLTg4NTktMyI7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgaWYgKCAgIHN0cmVxKGxhbmcsImJlIikgfHwgc3RyZXEobGFuZywiYnllbG9ydXNzaWFuIikKICAgICAgICAgICAgICAgIHx8IHN0cmVxKGxhbmcsImJnIikgfHwgc3RyZXEobGFuZywiYnVsZ2FyaWFuIikKICAgICAgICAgICAgICAgIHx8IHN0cmVxKGxhbmcsIm1rIikgfHwgc3RyZXEobGFuZywibWFjZWRvbmlhbiIpCiAgICAgICAgICAgICAgICB8fCBzdHJlcShsYW5nLCJzcCIpCiAgICAgICAgICAgICAgICB8fCBzdHJlcShsYW5nLCJzciIpIHx8IHN0cmVxKGxhbmcsInNlcmJpYW4iKQogICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgbG9jYWxlX2NoYXJzZXQgPSAiSVNPLTg4NTktNSI7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgaWYgKHN0cmVxKGxhbmcsImFyIikgfHwgc3RyZXEobGFuZywiYXJhYmljIikKICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgIGxvY2FsZV9jaGFyc2V0ID0gIklTTy04ODU5LTYiOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGlmIChzdHJlcShsYW5nLCJlbCIpIHx8IHN0cmVxKGxhbmcsImdyZWVrIikKICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgIGxvY2FsZV9jaGFyc2V0ID0gIklTTy04ODU5LTciOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGlmIChzdHJlcShsYW5nLCJpdyIpIHx8IHN0cmVxKGxhbmcsImhlIikgfHwgc3RyZXEobGFuZywiaGVicmV3IikKICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgIGxvY2FsZV9jaGFyc2V0ID0gIklTTy04ODU5LTgiOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGlmIChzdHJlcShsYW5nLCJ0ciIpIHx8IHN0cmVxKGxhbmcsInR1cmtpc2giKQogICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgbG9jYWxlX2NoYXJzZXQgPSAiSVNPLTg4NTktOSI7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgaWYgKCAgIHN0cmVxKGxhbmcsImV0IikgfHwgc3RyZXEobGFuZywiZXN0b25pYW4iKQogICAgICAgICAgICAgICAgfHwgc3RyZXEobGFuZywibHQiKSB8fCBzdHJlcShsYW5nLCJsaXRodWFuaWFuIikKICAgICAgICAgICAgICAgIHx8IHN0cmVxKGxhbmcsImx2IikgfHwgc3RyZXEobGFuZywibGF0dmlhbiIpCiAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICBsb2NhbGVfY2hhcnNldCA9ICJJU08tODg1OS0xMCI7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgaWYgKHN0cmVxKGxhbmcsInJ1IikgfHwgc3RyZXEobGFuZywicnVzc2lhbiIpCiAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICBsb2NhbGVfY2hhcnNldCA9ICJLT0k4LVIiOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGlmIChzdHJlcShsYW5nLCJ1ayIpIHx8IHN0cmVxKGxhbmcsInVrcmFpbmlhbiIpCiAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICBsb2NhbGVfY2hhcnNldCA9ICJLT0k4LVUiOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGlmICggICBzdHJlcShsYW5nLCJqYSIpCiAgICAgICAgICAgICAgICB8fCBzdHJlcShsYW5nLCJKcCIpCiAgICAgICAgICAgICAgICB8fCBzdHJlcShsYW5nLCJqYXBhbiIpCiAgICAgICAgICAgICAgICB8fCBzdHJlcShsYW5nLCJKYXBhbmVzZS1FVUMiKQogICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgbG9jYWxlX2NoYXJzZXQgPSAiZXVjSlAiOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGlmICgwKQogICAgICAgICAgICAgIGxvY2FsZV9jaGFyc2V0ID0gIklTTy0yMDIyLUpQIjsgLyogd2FzOiAiSklTNyI7ICovCiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgaWYgKHN0cmVxKGxhbmcsImphcGFuZXNlIikKICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgIGxvY2FsZV9jaGFyc2V0ID0gIlNKSVMiOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGlmIChzdHJlcShsYW5nLCJrbyIpIHx8IHN0cmVxKGxhbmcsImtvcmVhbiIpCiAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICBsb2NhbGVfY2hhcnNldCA9ICJldWNLUiI7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgaWYgKHN0cmVxKGxhbmcsImNoaW5lc2UtcyIpCiAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICBsb2NhbGVfY2hhcnNldCA9ICJldWNDTiI7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgaWYgKHN0cmVxKGxhbmcsImNoaW5lc2UtdCIpCiAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICBsb2NhbGVfY2hhcnNldCA9ICJldWNUVyI7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgaWYgKHN0cmVxKGxhbmcsInRoIikKICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgIGxvY2FsZV9jaGFyc2V0ID0gIlRJUy02MjAiOyAvKiB3YXM6ICJUQUNUSVMiOyAqLwogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmcmVlKGJ1Zik7CiAgICAgIH0KICAgICAgcmV0dXJuIGxvY2FsZV9jaGFyc2V0OwogICAgfQoK