LyoKICogIFRFU1QgU1VJVEUgRk9SIE1CL1dDIEZVTkNUSU9OUyBJTiBDIExJQlJBUlkKICoKICoJIEZJTEU6IGRhdF9zdHJjb2xsLmMKICoKICoJIFNUUkNPTEw6ICBpbnQgc3RyY29sbCAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKTsKICovCgovKgogICBOT1RFOgoKICAgSWYgYSByZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgMCwgc2V0IHJldF9mbGc9MSBhbmQgdGhlCiAgIGV4cGVjdGVkIHZhbHVlID0gMC4JSWYgYSByZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgYQogICBwb3NpdGl2ZS9uZWdhdGl2ZSB2YWx1ZSwgc2V0IHJldF9mbGc9MCwgYW5kIHNldCB0aGUgZXhwZWN0ZWQgdmFsdWUKICAgPSArMS8tMS4KICAgVGhlcmUgaXMgaW5jb25zaXN0ZW5zeSBiZXR3ZWVuIHRzdF9zdHJjb2xsKCkgYW5kIHRzdF93Y3Njb2xsKCkoaXQKICAgaGFzIGNtcF9mbGcpIGZvciBpbnB1dCBkYXRhLiBJJ2xsIGZpeCBpdC4KCiAgIEFzc3VtaW5nIGVuX1VTIHRvIGJlIGVuX1VTLmFzY2lpLiAobWF5YmUsIHNob3VsZCBiZSBpc284ODU5LTEpLgoKCgogICBBU0NJSSBDT0RFICA6IEEsQixDLCAuLi4gICwgYSwgYiwgYywgLi4uCSBCLGE6LTEJICBhLEI6KzEKICAgRElDVElPTkFSWSA6IEEsYSxCLGIsQyxjLC4uLi4gIGEsQjotMSBCLGE6KzEgKi8KClRTVF9TVFJDT0xMIHRzdF9zdHJjb2xsX2xvYyBbXSA9IHsKICB7CiAgICB7IFRzdHJjb2xsLCBUU1RfTE9DX2RlIH0sCiAgICB7CiAgICAgIHsgLyppbnB1dC4qLyB7ICLEQkNERUZHIiwgIsRCQ0RFRkciCSAgICAgIH0sICAvKiAjMSAqLwoJLypleHBlY3QqLyB7IDAsMSwwLAkJCSAgICAgIH0sCiAgICAgIH0sCiAgICAgIHsgLyppbnB1dC4qLyB7ICJYWCDEIFhYIiwgIlhYIEIgWFgiCSAgICAgIH0sICAvKiAjMiAqLwoJLypleHBlY3QqLyB7IDAsMCwtMSwJCQkgICAgICB9LAogICAgICB9LAogICAgICB7IC8qaW5wdXQuKi8geyAiWFggQiBYWCIsICJYWCDEIFhYIgkgICAgICB9LCAgLyogIzMgKi8KCS8qZXhwZWN0Ki8geyAwLDAsKzEsCQkJICAgICAgfSwKICAgICAgfSwKICAgICAgeyAvKmlucHV0LiovIHsgIkIiLAkiYSIJCSAgICAgIH0sICAvKiAjNCAqLwoJLypleHBlY3QqLyB7IDAsMCwrMSwJCQkgICAgICB9LAogICAgICB9LAogICAgICB7IC8qaW5wdXQuKi8geyAiYSIsCSJCIgkJICAgICAgfSwgIC8qICM1ICovCgkvKmV4cGVjdCovIHsgMCwwLC0xLAkJCSAgICAgIH0sCiAgICAgIH0sCiAgICAgIHsgLyppbnB1dC4qLyB7ICJiIiwJIkEiCQkgICAgICB9LCAgLyogIzYgKi8KCS8qZXhwZWN0Ki8geyAwLDAsKzEsCQkJICAgICAgfSwKICAgICAgfSwKICAgICAgeyAvKmlucHV0LiovIHsgIkEiLAkiYiIJCSAgICAgIH0sICAvKiAjNyAqLwoJLypleHBlY3QqLyB7IDAsMCwtMSwJCQkgICAgICB9LAogICAgICB9LAogICAgICB7IC8qaW5wdXQuKi8geyAi5CIsCSJCIgkJICAgICAgfSwgIC8qICM4ICovCgkvKmV4cGVjdCovIHsgMCwwLC0xLAkJCSAgICAgIH0sCiAgICAgIH0sCiAgICAgIHsgLyppbnB1dC4qLyB7ICJCIiwJIuQiCQkgICAgICB9LCAgLyogIzkgKi8KCS8qZXhwZWN0Ki8geyAwLDAsKzEsCQkJICAgICAgfSwKICAgICAgfSwKICAgICAgeyAuaXNfbGFzdCA9IDEgfSAvKiBMYXN0IGVsZW1lbnQuICAqLwogICAgfQogIH0sCiAgewogICAgeyBUc3RyY29sbCwgVFNUX0xPQ19lblVTIH0sCiAgICB7CiAgICAgIHsgLyppbnB1dC4qLyB7ICJBQkNERUZHIiwgIkFCQ0RFRkciCSAgICAgIH0sICAvKiAjMSAqLwoJLypleHBlY3QqLyB7IDAsMSwwLAkJCSAgICAgIH0sCiAgICAgIH0sCiAgICAgIHsgLyppbnB1dC4qLyB7ICJYWCBhIFhYIiwgIlhYIEIgWFgiCSAgICAgIH0sICAvKiAjMiAqLwoJLypleHBlY3QqLyB7IDAsMCwtMSwJCQkgICAgICB9LAogICAgICB9LAogICAgICB7IC8qaW5wdXQuKi8geyAiWFggQiBYWCIsICJYWCBhIFhYIgkgICAgICB9LCAgLyogIzMgKi8KCS8qZXhwZWN0Ki8geyAwLDAsKzEsCQkJICAgICAgfSwKICAgICAgfSwKICAgICAgewoJLyogPFdBSVZFUj4gKi8KCS8qaW5wdXQuKi8geyAiQiIsCSJhIgkJICAgICAgfSwgIC8qICM0ICovCgkJICAgLyogWFhYIFdlIGFyZSBub3QgdGVzdGluZyB0aGUgQyBsb2NhbGUuICAqLwoJLypleHBlY3QqLyB7IDAsMCwrMSwJCQkgICAgICB9LAogICAgICB9LAogICAgICB7CgkvKiA8V0FJVkVSPiAqLwoJLyppbnB1dC4qLyB7ICJhIiwJIkIiCQkgICAgICB9LCAgLyogIzUgKi8KCQkgICAvKiBYWFggV2UgYXJlIG5vdCB0ZXN0aW5nIHRoZSBDIGxvY2FsZS4gICovCgkvKmV4cGVjdCovIHsgMCwwLC0xLAkJCSAgICAgIH0sCiAgICAgIH0sCiAgICAgIHsgLyppbnB1dC4qLyB7ICJiIiwJIkEiCQkgICAgICB9LCAgLyogIzYgKi8KCS8qZXhwZWN0Ki8geyAwLDAsKzEsCQkJICAgICAgfSwKICAgICAgfSwKICAgICAgeyAvKmlucHV0LiovIHsgIkEiLAkiYiIJCSAgICAgIH0sICAvKiAjNyAqLwoJLypleHBlY3QqLyB7IDAsMCwtMSwJCQkgICAgICB9LAogICAgICB9LAojaWZkZWYgTk9fV0FJVkVSCiAgICAgIC8qIFhYWCBJIGRvIG5vdCB5ZXQga25vdyB3aGV0aGVyIHN0cmNvbGwgcmVhbGx5IHNob3VsZCByZWplY3QKCSBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIG11bHRpYnl0ZSBjaGFyYWN0ZXIgcmFuZ2UuICAqLwogICAgICB7CgkvKiAjOCAqLyAgLyogPFdBSVZFUj4gKi8KCS8qaW5wdXQuKi8geyAiXDI0NFwyNDJcMjQ0XDI0NFwyNDRcMjQ2XDI0NFwyNTBcMjQ0XDI1MiIsICJBQkNERUZHIiB9LAoJLypleHBlY3QqLyB7IEVJTlZBTCwwLDAsCQkgICAgICB9LAogICAgICB9LAogICAgICB7CgkvKiAjOSAqLyAgLyogPFdBSVZFUj4gKi8KCS8qaW5wdXQuKi8geyAiQUJDWkVGRyIsICJcMjQ0XDI0MlwyNDRcMjQ0XDI0NFwyNDZcMjQ0XDI1MFwyNDRcMjUyIiB9LAoJLypleHBlY3QqLyB7IEVJTlZBTCwwLDAsCQkgICAgICB9LAogICAgICB9LAojZW5kaWYKICAgICAgeyAuaXNfbGFzdCA9IDEgfSAvKiBMYXN0IGVsZW1lbnQuICAqLwogICAgfQogIH0sCiAgewogICAgeyBUc3RyY29sbCwgVFNUX0xPQ19ldWNKUCB9LAogICAgewogICAgICB7IC8qaW5wdXQuKi8geyAiXDI0NFwyNDJcMjQ0XDI0NFwyNDRcMjQ2XDI0NFwyNTBcMjQ0XDI1MiIsCgkJICAgICAiXDI0NFwyNDJcMjQ0XDI0NFwyNDRcMjQ2XDI0NFwyNTBcMjQ0XDI1MiIgfSwgIC8qICMxICovCgkvKmV4cGVjdCovIHsgMCwxLDAsCQkJICAgICAgfSwKICAgICAgfSwKICAgICAgeyAvKmlucHV0LiovIHsgIlwyNDRcMjQyXDI0NFwyNDRcMjQ0XDI0NlwyNDRcMjUwXDI0NFwyNTIiLAoJCSAgICAgIlwyNDRcMjQyXDI0NFwyNDRcMjQ0XDM2M1wyNDRcMjUwXDI0NFwyNTIiIH0sICAvKiAjMiAqLwoJLypleHBlY3QqLyB7IDAsMCwtMSwJCQkgICAgICB9LAogICAgICB9LAogICAgICB7IC8qaW5wdXQuKi8geyAiXDI0NFwyNDJcMjQ0XDI0NFwyNDRcMzYzXDI0NFwyNTBcMjQ0XDI1MiIsCgkJICAgICAiXDI0NFwyNDJcMjQ0XDI0NFwyNDRcMjQ2XDI0NFwyNTBcMjQ0XDI1MiIgfSwgIC8qICMzICovCgkvKmV4cGVjdCovIHsgMCwwLCsxLAkJCSAgICAgIH0sCiAgICAgIH0sCiAgICAgIHsgLyppbnB1dC4qLyB7ICJCIiwJImEiCQkgICAgICB9LCAgLyogIzQgKi8KCS8qZXhwZWN0Ki8geyAwLDAsLTEsCQkJICAgICAgfSwKICAgICAgfSwKICAgICAgeyAvKmlucHV0LiovIHsgImEiLAkiQiIJCSAgICAgIH0sICAvKiAjNSAqLwoJLypleHBlY3QqLyB7IDAsMCwrMSwJCQkgICAgICB9LAogICAgICB9LAogICAgICB7IC8qaW5wdXQuKi8geyAiYiIsCSJBIgkJICAgICAgfSwgIC8qICM2ICovCgkvKmV4cGVjdCovIHsgMCwwLCsxLAkJCSAgICAgIH0sCiAgICAgIH0sCiAgICAgIHsgLyppbnB1dC4qLyB7ICJBIiwJImIiCQkgICAgICB9LCAgLyogIzcgKi8KCS8qZXhwZWN0Ki8geyAwLDAsLTEsCQkJICAgICAgfSwKICAgICAgfSwKI2lmZGVmIE5PX1dBSVZFUgogICAgICAvKiBYWFggSSBkbyBub3QgeWV0IGtub3cgd2hldGhlciBzdHJjb2xsIHJlYWxseSBzaG91bGQgcmVqZWN0CgkgY2hhcmFjdGVycyBvdXRzaWRlIHRoZSBtdWx0aWJ5dGUgY2hhcmFjdGVyIHJhbmdlLiAgKi8KICAgICAgewoJLyogPFdBSVZFUj4gKi8KCS8qaW5wdXQuKi8geyAiXDIwMFwyMTZcMjE3IiwgIkFCQ0RFRkciCSAgICAgIH0sICAvKiAjOCAqLwoJLypleHBlY3QqLyB7IEVJTlZBTCwwLDAsCQkgICAgICB9LAogICAgICB9LAogICAgICB7CgkvKiA8V0FJVkVSPiAqLwoJLyppbnB1dC4qLyB7ICJBQkNaRUZHIiwgIlwyMDBcMjE2XDIxNyIJICAgICAgfSwgIC8qICM5ICovCgkvKmV4cGVjdCovIHsgRUlOVkFMLDAsMCwJCSAgICAgIH0sCiAgICAgIH0sCiNlbmRpZgogICAgICB7IC5pc19sYXN0ID0gMSB9IC8qIExhc3QgZWxlbWVudC4gICovCiAgICB9CiAgfSwKICB7CiAgICB7IFRzdHJjb2xsLCBUU1RfTE9DX2VuZCB9CiAgfQp9Owo=