LyogaXg4NyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBwb3cgZnVuY3Rpb24uCiAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDE4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KICAgQ29udHJpYnV0ZWQgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTYuCgogICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCgogICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgc2VlCiAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCgojaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KI2luY2x1ZGUgPHg4Nl82NC1tYXRoLWFzbS5oPgoKCS5zZWN0aW9uIC5yb2RhdGEuY3N0OCwiYU0iLEBwcm9nYml0cyw4CgoJLnAyYWxpZ24gMwoJLnR5cGUgb25lLEBvYmplY3QKb25lOgkuZG91YmxlIDEuMAoJQVNNX1NJWkVfRElSRUNUSVZFKG9uZSkKCS50eXBlIHAyLEBvYmplY3QKcDI6CS5ieXRlIDAsIDAsIDAsIDAsIDAsIDAsIDB4MTAsIDB4NDAKCUFTTV9TSVpFX0RJUkVDVElWRShwMikKCS50eXBlIHA2MyxAb2JqZWN0CnA2MzoJLmJ5dGUgMCwgMCwgMCwgMCwgMCwgMCwgMHhlMCwgMHg0MwoJQVNNX1NJWkVfRElSRUNUSVZFKHA2MykKCS50eXBlIHA2NCxAb2JqZWN0CnA2NDoJLmJ5dGUgMCwgMCwgMCwgMCwgMCwgMCwgMHhmMCwgMHg0MwoJQVNNX1NJWkVfRElSRUNUSVZFKHA2NCkKCS50eXBlIHA3OCxAb2JqZWN0CnA3ODoJLmJ5dGUgMCwgMCwgMCwgMCwgMCwgMCwgMHhkMCwgMHg0NAoJQVNNX1NJWkVfRElSRUNUSVZFKHA3OCkKCS50eXBlIHBtNzksQG9iamVjdApwbTc5OgkuYnl0ZSAwLCAwLCAwLCAwLCAwLCAwLCAwLCAweDNiCglBU01fU0laRV9ESVJFQ1RJVkUocG03OSkKCgkuc2VjdGlvbiAucm9kYXRhLmNzdDE2LCJhTSIsQHByb2diaXRzLDE2CgoJLnAyYWxpZ24gMwoJLnR5cGUgaW5maW5pdHksQG9iamVjdAppbmZfemVybzoKaW5maW5pdHk6CgkuYnl0ZSAwLCAwLCAwLCAwLCAwLCAwLCAweGYwLCAweDdmCglBU01fU0laRV9ESVJFQ1RJVkUoaW5maW5pdHkpCgkudHlwZSB6ZXJvLEBvYmplY3QKemVybzoJLmRvdWJsZSAwLjAKCUFTTV9TSVpFX0RJUkVDVElWRSh6ZXJvKQoJLnR5cGUgbWluZl9temVybyxAb2JqZWN0Cm1pbmZfbXplcm86Cm1pbmZpbml0eToKCS5ieXRlIDAsIDAsIDAsIDAsIDAsIDAsIDB4ZjAsIDB4ZmYKbXplcm86CgkuYnl0ZSAwLCAwLCAwLCAwLCAwLCAwLCAwLCAweDgwCglBU01fU0laRV9ESVJFQ1RJVkUobWluZl9temVybykKREVGSU5FX0xEQkxfTUlOCgojaWZkZWYgUElDCiMgZGVmaW5lIE1PKG9wKSBvcCMjKCVyaXApCiNlbHNlCiMgZGVmaW5lIE1PKG9wKSBvcAojZW5kaWYKCgkudGV4dApFTlRSWShfX2llZWU3NTRfcG93bCkKCWZsZHQJMjQoJXJzcCkJLy8geQoJZnhhbQoKCglmbnN0c3cKCW1vdmIJJWFoLCAlZGwKCWFuZGIJJDB4NDUsICVhaAoJY21wYgkkMHg0MCwgJWFoCS8vIGlzIHkgPT0gMCA/CglqZQkxMWYKCgljbXBiCSQweDA1LCAlYWgJLy8gaXMgeSA9PSCxaW5mID8KCWplCTEyZgoKCWNtcGIJJDB4MDEsICVhaAkvLyBpcyB5ID09IE5hTiA/CglqZQkzMGYKCglmbGR0CTgoJXJzcCkJCS8vIHggOiB5CgoJZnhhbQoJZm5zdHN3Cgltb3ZiCSVhaCwgJWRoCglhbmRiCSQweDQ1LCAlYWgKCWNtcGIJJDB4NDAsICVhaAoJamUJMjBmCQkvLyB4IGlzILEwCgoJY21wYgkkMHgwNSwgJWFoCglqZQkxNWYJCS8vIHggaXMgsWluZgoKCWNtcGIJJDB4MDEsICVhaAoJamUJMzFmCQkvLyB4IGlzIE5hTgoKCWZ4Y2gJCQkvLyB5IDogeAoKCS8qIGZpc3RwbGwgcmFpc2VzIGludmFsaWQgZXhjZXB0aW9uIGZvciB8eXwgPj0gMUw8PDYzLiAgKi8KCWZsZGwJTU8ocDYzKQkJLy8gMUw8PDYzIDogeSA6IHgKCWZsZAklc3QoMSkJCS8vIHkgOiAxTDw8NjMgOiB5IDogeAoJZmFicwkJCS8vIHx5fCA6IDFMPDw2MyA6IHkgOiB4CglmY29taXAJJXN0KDEpLCAlc3QJLy8gMUw8PDYzIDogeSA6IHgKCWZzdHAJJXN0KDApCQkvLyB5IDogeAoJam5jCTJmCgoJLyogRmlyc3Qgc2VlIHdoZXRoZXIgYHknIGlzIGEgbmF0dXJhbCBudW1iZXIuICBJbiB0aGlzIGNhc2Ugd2UKCSAgIGNhbiB1c2UgYSBtb3JlIHByZWNpc2UgYWxnb3JpdGhtLiAgKi8KCWZsZAklc3QJCS8vIHkgOiB5IDogeAoJZmlzdHBsbAktOCglcnNwKQkvLyB5IDogeAoJZmlsZGxsCS04KCVyc3ApCS8vIGludCh5KSA6IHkgOiB4CglmdWNvbWlwCSVzdCgxKSwlc3QJLy8geSA6IHgKCWplCTlmCgoJLy8gSWYgeSBoYXMgYWJzb2x1dGUgdmFsdWUgYXQgbW9zdCAweDFwLTc5LCB0aGVuIGFueSBmaW5pdGUKCS8vIG5vbnplcm8geCB3aWxsIHJlc3VsdCBpbiAxLiAgU2F0dXJhdGUgeSB0byB0aG9zZSBib3VuZHMgdG8KCS8vIGF2b2lkIHVuZGVyZmxvdyBpbiB0aGUgY2FsY3VsYXRpb24gb2YgeSpsb2cyKHgpLgoJZmxkbAlNTyhwbTc5KQkvLyAweDFwLTc5IDogeSA6IHgKCWZsZAklc3QoMSkJCS8vIHkgOiAweDFwLTc5IDogeSA6IHgKCWZhYnMJCQkvLyB8eXwgOiAweDFwLTc5IDogeSA6IHgKCWZjb21pcAklc3QoMSksICVzdAkvLyAweDFwLTc5IDogeSA6IHgKCWZzdHAJJXN0KDApCQkvLyB5IDogeAoJam5jCTNmCglmc3RwCSVzdCgwKQkJLy8gcG9wIHkKCWZsZGwJTU8ocG03OSkJLy8gMHgxcC03OSA6IHgKCXRlc3RiCSQyLCAlZGwKCWpuegkzZgkJLy8geSA+IDAKCWZjaHMJCQkvLyAtMHgxcC03OSA6IHgKCWptcAkzZgoKOToJLyogT0ssIHdlIGhhdmUgYW4gaW50ZWdlciB2YWx1ZSBmb3IgeS4gIFVubGVzcyB2ZXJ5IHNtYWxsCgkgICAod2UgdXNlIDwgNCksIHVzZSB0aGUgYWxnb3JpdGhtIGZvciByZWFsIGV4cG9uZW50IHRvIGF2b2lkCgkgICBhY2N1bXVsYXRpb24gb2YgZXJyb3JzLiAgKi8KCWZsZGwJTU8ocDIpCQkvLyA0IDogeSA6IHgKCWZsZAklc3QoMSkJCS8vIHkgOiA0IDogeSA6IHgKCWZhYnMJCQkvLyB8eXwgOiA0IDogeSA6IHgKCWZjb21pcAklc3QoMSksICVzdAkvLyA0IDogeSA6IHgKCWZzdHAJJXN0KDApCQkvLyB5IDogeAoJam5jCTNmCgltb3YJLTgoJXJzcCksJWVheAoJbW92CS00KCVyc3ApLCVlZHgKCW9ybAkkMCwgJWVkeAoJZnN0cAklc3QoMCkJCS8vIHgKCWpucwk0ZgkJLy8geSA+PSAwLCBqdW1wCglmZGl2cmwJTU8ob25lKQkJLy8gMS94CQkobm93IHJlZmVycmVkIHRvIGFzIHgpCgluZWdsCSVlYXgKCWFkY2wJJDAsICVlZHgKCW5lZ2wJJWVkeAo0OglmbGRsCU1PKG9uZSkJCS8vIDEgOiB4CglmeGNoCgoJLyogSWYgeSBpcyBldmVuLCB0YWtlIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB4LiAgT3RoZXJ3aXNlLAoJICAgZW5zdXJlIGFsbCBpbnRlcm1lZGlhdGUgdmFsdWVzIHRoYXQgbWlnaHQgb3ZlcmZsb3cgaGF2ZSB0aGUKCSAgIHNpZ24gb2YgeC4gICovCgl0ZXN0YgkkMSwgJWFsCglqbnoJNmYKCWZhYnMKCjY6CXNocmRsCSQxLCAlZWR4LCAlZWF4CglqbmMJNWYKCWZ4Y2gKCWZhYnMKCWZtdWwJJXN0KDEpCQkvLyB4IDogU1QqeAoJZnhjaAo1OglmbGQJJXN0CQkvLyB4IDogeCA6IFNUKngKCWZhYnMJCQkvLyB8eHwgOiB4IDogU1QqeAoJZm11bHAJCQkvLyB8eHwqeCA6IFNUKngKCXNocmwJJDEsICVlZHgKCW1vdmwJJWVheCwgJWVjeAoJb3JsCSVlZHgsICVlY3gKCWpuegk2YgoJZnN0cAklc3QoMCkJCS8vIFNUKngKCUxEQkxfQ0hFQ0tfRk9SQ0VfVUZMT1dfTk9OTkFOCglyZXQKCgkvKiB5IGlzILFOQU4gKi8KMzA6CWZsZHQJOCglcnNwKQkJLy8geCA6IHkKCWZsZGwJTU8ob25lKQkJLy8gMS4wIDogeCA6IHkKCWZ1Y29taXAJJXN0KDEpLCVzdAkvLyB4IDogeQoJamUJMzJmCjMxOgkvKiBBdCBsZWFzdCBvbmUgYXJndW1lbnQgTmFOLCBhbmQgcmVzdWx0IHNob3VsZCBiZSBOYU4uICAqLwoJZmFkZHAKCXJldAozMjoJamMJMzFiCgkvKiBwb3cgKDEsIE5hTik7IGNoZWNrIGlmIHRoZSBOYU4gc2lnbmFsaW5nLiAgKi8KCXRlc3RiCSQweDQwLCAzMSglcnNwKQoJanoJMzFiCglmc3RwCSVzdCgxKQoJcmV0CgoJLmFsaWduIEFMSUdOQVJHKDQpCjI6CS8vIHkgaXMgYSBsYXJnZSBpbnRlZ2VyIChhYnNvbHV0ZSB2YWx1ZSBhdCBsZWFzdCAxTDw8NjMpLgoJLy8gSWYgeSBoYXMgYWJzb2x1dGUgdmFsdWUgYXQgbGVhc3QgMUw8PDc4LCB0aGVuIGFueSBmaW5pdGUKCS8vIG5vbnplcm8geCB3aWxsIHJlc3VsdCBpbiAwICh1bmRlcmZsb3cpLCAxIG9yIGluZmluaXR5IChvdmVyZmxvdykuCgkvLyBTYXR1cmF0ZSB5IHRvIHRob3NlIGJvdW5kcyB0byBhdm9pZCBvdmVyZmxvdyBpbiB0aGUgY2FsY3VsYXRpb24KCS8vIG9mIHkqbG9nMih4KS4KCWZsZGwJTU8ocDc4KQkJLy8gMUw8PDc4IDogeSA6IHgKCWZsZAklc3QoMSkJCS8vIHkgOiAxTDw8NzggOiB5IDogeAoJZmFicwkJCS8vIHx5fCA6IDFMPDw3OCA6IHkgOiB4CglmY29taXAJJXN0KDEpLCAlc3QJLy8gMUw8PDc4IDogeSA6IHgKCWZzdHAJJXN0KDApCQkvLyB5IDogeAoJamMJM2YKCWZzdHAJJXN0KDApCQkvLyBwb3AgeQoJZmxkbAlNTyhwNzgpCQkvLyAxTDw8NzggOiB4Cgl0ZXN0YgkkMiwgJWRsCglqegkzZgkJLy8geSA+IDAKCWZjaHMJCQkvLyAtKDFMPDw3OCkgOiB4CgkuYWxpZ24gQUxJR05BUkcoNCkKMzoJLyogeSBpcyBhIHJlYWwgbnVtYmVyLiAgKi8KCXN1YnEJJDQwLCAlcnNwCgljZmlfYWRqdXN0X2NmYV9vZmZzZXQgKDQwKQoJZnN0cHQJMTYoJXJzcCkJLy8geAoJZnN0cHQJKCVyc3ApCQkvLyA8ZW1wdHk+CgljYWxsCUhJRERFTl9KVU1QVEFSR0VUIChfX3Bvd2xfaGVscGVyKQkvLyA8cmVzdWx0PgoJYWRkcQkkNDAsICVyc3AKCWNmaV9hZGp1c3RfY2ZhX29mZnNldCAoLTQwKQoJcmV0CgoJLy8gcG93KHgssTApID0gMSwgdW5sZXNzIHggaXMgc05hTgoJLmFsaWduIEFMSUdOQVJHKDQpCjExOglmc3RwCSVzdCgwKQkJLy8gcG9wIHkKCWZsZHQJOCglcnNwKQkJLy8geAoJZnhhbQoJZm5zdHN3CglhbmRiCSQweDQ1LCAlYWgKCWNtcGIJJDB4MDEsICVhaAoJamUJMTEyZgkJLy8geCBpcyBOYU4KMTExOglmc3RwCSVzdCgwKQoJZmxkbAlNTyhvbmUpCglyZXQKCjExMjoJdGVzdGIJJDB4NDAsIDE1KCVyc3ApCglqbnoJMTExYgoJZmFkZAklc3QoMCkKCXJldAoKCS8vIHkgPT0gsWluZgoJLmFsaWduIEFMSUdOQVJHKDQpCjEyOglmc3RwCSVzdCgwKQkJLy8gcG9wIHkKCWZsZGwJTU8ob25lKQkJLy8gMQoJZmxkdAk4KCVyc3ApCQkvLyB4IDogMQoJZmFicwkJCS8vIGFicyh4KSA6IDEKCWZ1Y29tcHAJCQkvLyA8IDEsID09IDEsIG9yID4gMQoJZm5zdHN3CglhbmRiCSQweDQ1LCAlYWgKCWNtcGIJJDB4NDUsICVhaAoJamUJMTNmCQkvLyBqdW1wIGlmIHggaXMgTmFOCgoJY21wYgkkMHg0MCwgJWFoCglqZQkxNGYJCS8vIGp1bXAgaWYgfHh8ID09IDEKCglzaGxiCSQxLCAlYWgKCXhvcmIJJWFoLCAlZGwKCWFuZGwJJDIsICVlZHgKI2lmZGVmIFBJQwoJbGVhCWluZl96ZXJvKCVyaXApLCVyY3gKCWZsZGwJKCVyY3gsICVyZHgsIDQpCiNlbHNlCglmbGRsCWluZl96ZXJvKCwlcmR4LCA0KQojZW5kaWYKCXJldAoKCS5hbGlnbiBBTElHTkFSRyg0KQoxNDoJZmxkbAlNTyhvbmUpCglyZXQKCgkuYWxpZ24gQUxJR05BUkcoNCkKMTM6CWZsZHQJOCglcnNwKQkJLy8gbG9hZCB4ID09IE5hTgoJZmFkZAklc3QoMCkKCXJldAoKCS5hbGlnbiBBTElHTkFSRyg0KQoJLy8geCBpcyCxaW5mCjE1Oglmc3RwCSVzdCgwKQkJLy8geQoJdGVzdGIJJDIsICVkaAoJanoJMTZmCQkvLyBqdW1wIGlmIHggPT0gK2luZgoKCS8vIGZpc3RwbGwgcmFpc2VzIGludmFsaWQgZXhjZXB0aW9uIGZvciB8eXwgPj0gMUw8PDYzLCBidXQgeQoJLy8gbWF5IGJlIG9kZCB1bmxlc3Mgd2Uga25vdyB8eXwgPj0gMUw8PDY0LgoJZmxkbAlNTyhwNjQpCQkvLyAxTDw8NjQgOiB5CglmbGQJJXN0KDEpCQkvLyB5IDogMUw8PDY0IDogeQoJZmFicwkJCS8vIHx5fCA6IDFMPDw2NCA6IHkKCWZjb21pcAklc3QoMSksICVzdAkvLyAxTDw8NjQgOiB5Cglmc3RwCSVzdCgwKQkJLy8geQoJam5jCTE2ZgoJZmxkbAlNTyhwNjMpCQkvLyBwNjMgOiB5CglmeGNoCQkJLy8geSA6IHA2MwoJZnByZW0JCQkvLyB5JXA2MyA6IHA2MwoJZnN0cAklc3QoMSkJCS8vIHklcDYzCgoJLy8gV2UgbXVzdCBmaW5kIG91dCB3aGV0aGVyIHkgaXMgYW4gb2RkIGludGVnZXIuCglmbGQJJXN0CQkvLyB5IDogeQoJZmlzdHBsbAktOCglcnNwKQkvLyB5CglmaWxkbGwJLTgoJXJzcCkJLy8gaW50KHkpIDogeQoJZnVjb21pcCAlc3QoMSksJXN0CglmZnJlZXAJJXN0CQkvLyA8ZW1wdHk+CglqbmUJMTdmCgoJLy8gT0ssIHRoZSB2YWx1ZSBpcyBhbiBpbnRlZ2VyLCBidXQgaXMgaXQgb2RkPwoJbW92CS04KCVyc3ApLCAlZWF4Cgltb3YJLTQoJXJzcCksICVlZHgKCWFuZGIJJDEsICVhbAoJanoJMThmCQkvLyBqdW1wIGlmIG5vdCBvZGQKCS8vIEl0J3MgYW4gb2RkIGludGVnZXIuCglzaHJsCSQzMSwgJWVkeAojaWZkZWYgUElDCglsZWEJbWluZl9temVybyglcmlwKSwlcmN4CglmbGRsCSglcmN4LCAlcmR4LCA4KQojZWxzZQoJZmxkbAltaW5mX216ZXJvKCwlcmR4LCA4KQojZW5kaWYKCXJldAoKCS5hbGlnbiBBTElHTkFSRyg0KQoxNjoJZmNvbXBsCU1PKHplcm8pCglmbnN0c3cKCXNocmwJJDUsICVlYXgKCWFuZGwJJDgsICVlYXgKI2lmZGVmIFBJQwoJbGVhCWluZl96ZXJvKCVyaXApLCVyY3gKCWZsZGwJKCVyY3gsICVyYXgsIDEpCiNlbHNlCglmbGRsCWluZl96ZXJvKCwlcmF4LCAxKQojZW5kaWYKCXJldAoKCS5hbGlnbiBBTElHTkFSRyg0KQoxNzoJc2hsbAkkMzAsICVlZHgJLy8gc2lnbiBiaXQgZm9yIHkgaW4gcmlnaHQgcG9zaXRpb24KMTg6CXNocmwJJDMxLCAlZWR4CiNpZmRlZiBQSUMKCWxlYQlpbmZfemVybyglcmlwKSwlcmN4CglmbGRsCSglcmN4LCAlcmR4LCA4KQojZWxzZQoJZmxkbAlpbmZfemVybygsJXJkeCwgOCkKI2VuZGlmCglyZXQKCgkuYWxpZ24gQUxJR05BUkcoNCkKCS8vIHggaXMgsTAKMjA6CWZzdHAJJXN0KDApCQkvLyB5Cgl0ZXN0YgkkMiwgJWRsCglqegkyMWYJCS8vIHkgPiAwCgoJLy8geCBpcyCxMCBhbmQgeSBpcyA8IDAuICBXZSBtdXN0IGZpbmQgb3V0IHdoZXRoZXIgeSBpcyBhbiBvZGQgaW50ZWdlci4KCXRlc3RiCSQyLCAlZGgKCWp6CTI1ZgoKCS8vIGZpc3RwbGwgcmFpc2VzIGludmFsaWQgZXhjZXB0aW9uIGZvciB8eXwgPj0gMUw8PDYzLCBidXQgeQoJLy8gbWF5IGJlIG9kZCB1bmxlc3Mgd2Uga25vdyB8eXwgPj0gMUw8PDY0LgoJZmxkbAlNTyhwNjQpCQkvLyAxTDw8NjQgOiB5CglmbGQJJXN0KDEpCQkvLyB5IDogMUw8PDY0IDogeQoJZmFicwkJCS8vIHx5fCA6IDFMPDw2NCA6IHkKCWZjb21pcAklc3QoMSksICVzdAkvLyAxTDw8NjQgOiB5Cglmc3RwCSVzdCgwKQkJLy8geQoJam5jCTI1ZgoJZmxkbAlNTyhwNjMpCQkvLyBwNjMgOiB5CglmeGNoCQkJLy8geSA6IHA2MwoJZnByZW0JCQkvLyB5JXA2MyA6IHA2MwoJZnN0cAklc3QoMSkJCS8vIHklcDYzCgoJZmxkCSVzdAkJLy8geSA6IHkKCWZpc3RwbGwJLTgoJXJzcCkJLy8geQoJZmlsZGxsCS04KCVyc3ApCS8vIGludCh5KSA6IHkKCWZ1Y29taXAJJXN0KDEpLCVzdAoJZmZyZWVwCSVzdAkJLy8gPGVtcHR5PgoJam5lCTI2ZgoKCS8vIE9LLCB0aGUgdmFsdWUgaXMgYW4gaW50ZWdlciwgYnV0IGlzIGl0IG9kZD8KCW1vdgktOCglcnNwKSwlZWF4Cgltb3YJLTQoJXJzcCksJWVkeAoJYW5kYgkkMSwgJWFsCglqegkyN2YJCS8vIGp1bXAgaWYgbm90IG9kZAoJLy8gSXQncyBhbiBvZGQgaW50ZWdlci4KCS8vIFJhaXNlIGRpdmlkZS1ieS16ZXJvIGV4Y2VwdGlvbiBhbmQgZ2V0IG1pbnVzIGluZmluaXR5IHZhbHVlLgoJZmxkbAlNTyhvbmUpCglmZGl2bAlNTyh6ZXJvKQoJZmNocwoJcmV0CgoyNToJZnN0cAklc3QoMCkKMjY6CjI3OgkvLyBSYWlzZSBkaXZpZGUtYnktemVybyBleGNlcHRpb24gYW5kIGdldCBpbmZpbml0eSB2YWx1ZS4KCWZsZGwJTU8ob25lKQoJZmRpdmwJTU8oemVybykKCXJldAoKCS5hbGlnbiBBTElHTkFSRyg0KQoJLy8geCBpcyCxMCBhbmQgeSBpcyA+IDAuICBXZSBtdXN0IGZpbmQgb3V0IHdoZXRoZXIgeSBpcyBhbiBvZGQgaW50ZWdlci4KMjE6CXRlc3RiCSQyLCAlZGgKCWp6CTIyZgoKCS8vIGZpc3RwbGwgcmFpc2VzIGludmFsaWQgZXhjZXB0aW9uIGZvciB8eXwgPj0gMUw8PDYzLCBidXQgeQoJLy8gbWF5IGJlIG9kZCB1bmxlc3Mgd2Uga25vdyB8eXwgPj0gMUw8PDY0LgoJZmxkbAlNTyhwNjQpCQkvLyAxTDw8NjQgOiB5CglmeGNoCQkJLy8geSA6IDFMPDw2NAoJZmNvbWkJJXN0KDEpLCAlc3QJLy8geSA6IDFMPDw2NAoJZnN0cAklc3QoMSkJCS8vIHkKCWpuYwkyMmYKCWZsZGwJTU8ocDYzKQkJLy8gcDYzIDogeQoJZnhjaAkJCS8vIHkgOiBwNjMKCWZwcmVtCQkJLy8geSVwNjMgOiBwNjMKCWZzdHAJJXN0KDEpCQkvLyB5JXA2MwoKCWZsZAklc3QJCS8vIHkgOiB5CglmaXN0cGxsCS04KCVyc3ApCS8vIHkKCWZpbGRsbAktOCglcnNwKQkvLyBpbnQoeSkgOiB5CglmdWNvbWlwICVzdCgxKSwlc3QKCWZmcmVlcAklc3QJCS8vIDxlbXB0eT4KCWpuZQkyM2YKCgkvLyBPSywgdGhlIHZhbHVlIGlzIGFuIGludGVnZXIsIGJ1dCBpcyBpdCBvZGQ/Cgltb3YJLTgoJXJzcCksJWVheAoJbW92CS00KCVyc3ApLCVlZHgKCWFuZGIJJDEsICVhbAoJanoJMjRmCQkvLyBqdW1wIGlmIG5vdCBvZGQKCS8vIEl0J3MgYW4gb2RkIGludGVnZXIuCglmbGRsCU1PKG16ZXJvKQoJcmV0CgoyMjoJZnN0cAklc3QoMCkKMjM6CjI0OglmbGRsCU1PKHplcm8pCglyZXQKCkVORChfX2llZWU3NTRfcG93bCkKc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfcG93bCwgX19wb3dsX2Zpbml0ZSkK