f0VMRgEBAQAAAAAAAAAAAAEACAABAAAAAAAAAAAAAAAYKwAABxAAUDQAAAAAACgABQACAHYxOwpwYWNrYWdlIHRlc3Rpbmc7CnBrZ3BhdGggdGVzdGluZzsKcHJpb3JpdHkgODsKaW1wb3J0IGJ5dGVzIGJ5dGVzICJieXRlcyI7CmltcG9ydCBmbGFnIGZsYWcgImZsYWciOwppbXBvcnQgZm10IGZtdCAiZm10IjsKaW1wb3J0IGlvIGlvICJpbyI7CmltcG9ydCBvcyBvcyAib3MiOwppbXBvcnQgcnVudGltZSBydW50aW1lICJydW50aW1lIjsKaW1wb3J0IHBwcm9mIHJ1bnRpbWUvcHByb2YgInJ1bnRpbWUvcHByb2YiOwppbXBvcnQgc3RyY29udiBzdHJjb252ICJzdHJjb252IjsKaW1wb3J0IHN0cmluZ3Mgc3RyaW5ncyAic3RyaW5ncyI7CmltcG9ydCBzeW5jIHN5bmMgInN5bmMiOwppbXBvcnQgYXRvbWljIHN5bmMvYXRvbWljICJzeW5jL2F0b21pYyI7CmltcG9ydCB0aW1lIHRpbWUgInRpbWUiOwppbml0IHRlc3RpbmcgdGVzdGluZy4uaW1wb3J0IDggbWF0aCBtYXRoLi5pbXBvcnQgMSBydW50aW1lIHJ1bnRpbWUuLmltcG9ydCAxIHVuaWNvZGUgdW5pY29kZS4uaW1wb3J0IDEgc3RyY29udiBzdHJjb252Li5pbXBvcnQgMiBzeW5jIHN5bmMuLmltcG9ydCAyIGlvIGlvLi5pbXBvcnQgMyByZWZsZWN0IHJlZmxlY3QuLmltcG9ydCAzIHN5c2NhbGwgc3lzY2FsbC4uaW1wb3J0IDMgYnl0ZXMgYnl0ZXMuLmltcG9ydCA0IHRpbWUgdGltZS4uaW1wb3J0IDQgYnVmaW8gYnVmaW8uLmltcG9ydCA1IG9zIG9zLi5pbXBvcnQgNSB0YWJ3cml0ZXIgdGV4dF90YWJ3cml0ZXIuLmltcG9ydCA1IGZtdCBmbXQuLmltcG9ydCA2IGZsYWcgZmxhZy4uaW1wb3J0IDcgcHByb2YgcnVudGltZV9wcHJvZi4uaW1wb3J0IDc7CmZ1bmMgQWxsb2NzUGVyUnVuIChydW5zIDx0eXBlIC0xMT4sIGYgPHR5cGUgMSAoKT4pIChhdmcgPHR5cGUgLTEwPik7CnR5cGUgPHR5cGUgMiAiQiIgPHR5cGUgMyBzdHJ1Y3QgeyA/IDx0eXBlIDQgIi50ZXN0aW5nLmNvbW1vbiIgPHR5cGUgNSBzdHJ1Y3QgeyAudGVzdGluZy5tdSA8dHlwZSA2ICJzeW5jLlJXTXV0ZXgiIDx0eXBlIDcgc3RydWN0IHsgLnN5bmMudyA8dHlwZSA4ICJzeW5jLk11dGV4IiA8dHlwZSA5IHN0cnVjdCB7IC5zeW5jLnN0YXRlIDx0eXBlIC0zPjsgLnN5bmMuc2VtYSA8dHlwZSAtNz47IH0+CiBmdW5jIChtIDx0eXBlIDEwICo8dHlwZSA4Pj4pIFVubG9jayAoKTsKIGZ1bmMgKG0gPHR5cGUgMTA+KSBMb2NrICgpOwo+OyAuc3luYy53cml0ZXJTZW0gPHR5cGUgLTc+OyAuc3luYy5yZWFkZXJTZW0gPHR5cGUgLTc+OyAuc3luYy5yZWFkZXJDb3VudCA8dHlwZSAtMz47IC5zeW5jLnJlYWRlcldhaXQgPHR5cGUgLTM+OyB9PgogZnVuYyAocncgPHR5cGUgMTEgKjx0eXBlIDY+PikgUlVubG9jayAoKTsKIGZ1bmMgKHJ3IDx0eXBlIDExPikgVW5sb2NrICgpOwogZnVuYyAocncgPHR5cGUgMTE+KSBSTG9ja2VyICgpIDx0eXBlIDEyICJzeW5jLkxvY2tlciIgPHR5cGUgMTMgaW50ZXJmYWNlIHsgTG9jayAoKTsgVW5sb2NrICgpOyB9Pj47CiBmdW5jIChydyA8dHlwZSAxMT4pIFJMb2NrICgpOwogZnVuYyAocncgPHR5cGUgMTE+KSBMb2NrICgpOwo+OyAudGVzdGluZy5vdXRwdXQgPHR5cGUgMTQgW10gPHR5cGUgLTIwPj47IC50ZXN0aW5nLmZhaWxlZCA8dHlwZSAtMTU+OyAudGVzdGluZy5za2lwcGVkIDx0eXBlIC0xNT47IC50ZXN0aW5nLmZpbmlzaGVkIDx0eXBlIC0xNT47IC50ZXN0aW5nLnN0YXJ0IDx0eXBlIDE1ICJ0aW1lLlRpbWUiIDx0eXBlIDE2IHN0cnVjdCB7IC50aW1lLnNlYyA8dHlwZSAtND47IC50aW1lLm5zZWMgPHR5cGUgLTM+OyAudGltZS5sb2MgPHR5cGUgMTcgKjx0eXBlIDE4ICJ0aW1lLkxvY2F0aW9uIiA8dHlwZSAxOSBzdHJ1Y3QgeyAudGltZS5uYW1lIDx0eXBlIC0xNj47IC50aW1lLnpvbmUgPHR5cGUgMjAgW10gPHR5cGUgMjEgIi50aW1lLnpvbmUiIDx0eXBlIDIyIHN0cnVjdCB7IC50aW1lLm5hbWUgPHR5cGUgLTE2PjsgLnRpbWUub2Zmc2V0IDx0eXBlIC0xMT47IC50aW1lLmlzRFNUIDx0eXBlIC0xNT47IH0+Pj47IC50aW1lLnR4IDx0eXBlIDIzIFtdIDx0eXBlIDI0ICIudGltZS56b25lVHJhbnMiIDx0eXBlIDI1IHN0cnVjdCB7IC50aW1lLndoZW4gPHR5cGUgLTQ+OyAudGltZS5pbmRleCA8dHlwZSAtNT47IC50aW1lLmlzc3RkIDx0eXBlIC0xNT47IC50aW1lLmlzdXRjIDx0eXBlIC0xNT47IH0+Pj47IC50aW1lLmNhY2hlU3RhcnQgPHR5cGUgLTQ+OyAudGltZS5jYWNoZUVuZCA8dHlwZSAtND47IC50aW1lLmNhY2hlWm9uZSA8dHlwZSAyNiAqPHR5cGUgMjE+PjsgfT4KIGZ1bmMgKGwgPHR5cGUgMjcgKjx0eXBlIDE4Pj4pIC50aW1lLmZpcnN0Wm9uZVVzZWQgKCkgPHR5cGUgLTE1PjsKIGZ1bmMgKGwgPHR5cGUgMjc+KSAudGltZS5sb29rdXAgKHNlYyA8dHlwZSAtND4pIChuYW1lIDx0eXBlIC0xNj4sIG9mZnNldCA8dHlwZSAtMTE+LCBpc0RTVCA8dHlwZSAtMTU+LCBzdGFydCA8dHlwZSAtND4sIGVuZCA8dHlwZSAtND4pOwogZnVuYyAobCA8dHlwZSAyNz4pIC50aW1lLmxvb2t1cE5hbWUgKG5hbWUgPHR5cGUgLTE2PiwgdW5peCA8dHlwZSAtND4pIChvZmZzZXQgPHR5cGUgLTExPiwgaXNEU1QgPHR5cGUgLTE1Piwgb2sgPHR5cGUgLTE1Pik7CiBmdW5jIChsIDx0eXBlIDI3PikgU3RyaW5nICgpIDx0eXBlIC0xNj47CiBmdW5jIChsIDx0eXBlIDI3PikgLnRpbWUuZ2V0ICgpIDx0eXBlIDI3PjsKIGZ1bmMgKGwgPHR5cGUgMjc+KSAudGltZS5sb29rdXBGaXJzdFpvbmUgKCkgPHR5cGUgLTExPjsKPj47IH0+CiBmdW5jICh0IDx0eXBlIDE1PikgQWZ0ZXIgKHUgPHR5cGUgMTU+KSA8dHlwZSAtMTU+OwogZnVuYyAodCA8dHlwZSAxNT4pIE1hcnNoYWxUZXh0ICgpICg/IDx0eXBlIDI4IFtdIDx0eXBlIC0yMD4+LCA/IDx0eXBlIC0xOT4pOwogZnVuYyAodCA8dHlwZSAxNT4pIERhdGUgKCkgKHllYXIgPHR5cGUgLTExPiwgbW9udGggPHR5cGUgMjkgInRpbWUuTW9udGgiIDx0eXBlIC0xMT4KIGZ1bmMgKG0gPHR5cGUgMjk+KSBTdHJpbmcgKCkgPHR5cGUgLTE2PjsKPiwgZGF5IDx0eXBlIC0xMT4pOwogZnVuYyAodCA8dHlwZSAxNT4pIC50aW1lLmFicyAoKSA8dHlwZSAtOD47CiBmdW5jICh0IDx0eXBlIDE1PikgV2Vla2RheSAoKSA8dHlwZSAzMCAidGltZS5XZWVrZGF5IiA8dHlwZSAtMTE+CiBmdW5jIChkIDx0eXBlIDMwPikgU3RyaW5nICgpIDx0eXBlIC0xNj47Cj47CiBmdW5jICh0IDx0eXBlIDE1PikgTmFub3NlY29uZCAoKSA8dHlwZSAtMTE+OwogZnVuYyAodCA8dHlwZSAzMSAqPHR5cGUgMTU+PikgR29iRGVjb2RlIChkYXRhIDx0eXBlIDMyIFtdIDx0eXBlIC0yMD4+KSA8dHlwZSAtMTk+OwogZnVuYyAodCA8dHlwZSAxNT4pIEluIChsb2MgPHR5cGUgMTc+KSA8dHlwZSAxNT47CiBmdW5jICh0IDx0eXBlIDE1PikgTG9jYWwgKCkgPHR5cGUgMTU+OwogZnVuYyAodCA8dHlwZSAxNT4pIE1vbnRoICgpIDx0eXBlIDI5PjsKIGZ1bmMgKHQgPHR5cGUgMTU+KSBIb3VyICgpIDx0eXBlIC0xMT47CiBmdW5jICh0IDx0eXBlIDE1PikgTWFyc2hhbEJpbmFyeSAoKSAoPyA8dHlwZSAzMyBbXSA8dHlwZSAtMjA+PiwgPyA8dHlwZSAtMTk+KTsKIGZ1bmMgKHQgPHR5cGUgMTU+KSBVbml4TmFubyAoKSA8dHlwZSAtND47CiBmdW5jICh0IDx0eXBlIDE1PikgRXF1YWwgKHUgPHR5cGUgMTU+KSA8dHlwZSAtMTU+OwogZnVuYyAodCA8dHlwZSAxNT4pIEZvcm1hdCAobGF5b3V0IDx0eXBlIC0xNj4pIDx0eXBlIC0xNj47CiBmdW5jICh0IDx0eXBlIDE1PikgQWRkRGF0ZSAoeWVhcnMgPHR5cGUgLTExPiwgbW9udGhzIDx0eXBlIC0xMT4sIGRheXMgPHR5cGUgLTExPikgPHR5cGUgMTU+OwogZnVuYyAodCA8dHlwZSAxNT4pIFpvbmUgKCkgKG5hbWUgPHR5cGUgLTE2Piwgb2Zmc2V0IDx0eXBlIC0xMT4pOwogZnVuYyAodCA8dHlwZSAxNT4pIERheSAoKSA8dHlwZSAtMTE+OwogZnVuYyAodCA8dHlwZSAxNT4pIENsb2NrICgpIChob3VyIDx0eXBlIC0xMT4sIG1pbiA8dHlwZSAtMTE+LCBzZWMgPHR5cGUgLTExPik7CiBmdW5jICh0IDx0eXBlIDE1PikgTWFyc2hhbEpTT04gKCkgKD8gPHR5cGUgMzQgW10gPHR5cGUgLTIwPj4sID8gPHR5cGUgLTE5Pik7CiBmdW5jICh0IDx0eXBlIDE1PikgVVRDICgpIDx0eXBlIDE1PjsKIGZ1bmMgKHQgPHR5cGUgMTU+KSAudGltZS5kYXRlIChmdWxsIDx0eXBlIC0xNT4pICh5ZWFyIDx0eXBlIC0xMT4sIG1vbnRoIDx0eXBlIDI5PiwgZGF5IDx0eXBlIC0xMT4sIHlkYXkgPHR5cGUgLTExPik7CiBmdW5jICh0IDx0eXBlIDE1PikgSXNaZXJvICgpIDx0eXBlIC0xNT47CiBmdW5jICh0IDx0eXBlIDE1PikgQmVmb3JlICh1IDx0eXBlIDE1PikgPHR5cGUgLTE1PjsKIGZ1bmMgKHQgPHR5cGUgMTU+KSBTdHJpbmcgKCkgPHR5cGUgLTE2PjsKIGZ1bmMgKHQgPHR5cGUgMTU+KSBTZWNvbmQgKCkgPHR5cGUgLTExPjsKIGZ1bmMgKHQgPHR5cGUgMTU+KSBNaW51dGUgKCkgPHR5cGUgLTExPjsKIGZ1bmMgKHQgPHR5cGUgMTU+KSBTdWIgKHUgPHR5cGUgMTU+KSA8dHlwZSAzNSAidGltZS5EdXJhdGlvbiIgPHR5cGUgLTQ+CiBmdW5jIChkIDx0eXBlIDM1PikgU2Vjb25kcyAoKSA8dHlwZSAtMTA+OwogZnVuYyAoZCA8dHlwZSAzNT4pIE1pbnV0ZXMgKCkgPHR5cGUgLTEwPjsKIGZ1bmMgKGQgPHR5cGUgMzU+KSBTdHJpbmcgKCkgPHR5cGUgLTE2PjsKIGZ1bmMgKGQgPHR5cGUgMzU+KSBIb3VycyAoKSA8dHlwZSAtMTA+OwogZnVuYyAoZCA8dHlwZSAzNT4pIE5hbm9zZWNvbmRzICgpIDx0eXBlIC00PjsKPjsKIGZ1bmMgKHQgPHR5cGUgMTU+KSBSb3VuZCAoZCA8dHlwZSAzNT4pIDx0eXBlIDE1PjsKIGZ1bmMgKHQgPHR5cGUgMTU+KSBVbml4ICgpIDx0eXBlIC00PjsKIGZ1bmMgKHQgPHR5cGUgMzE+KSBVbm1hcnNoYWxUZXh0IChkYXRhIDx0eXBlIDM2IFtdIDx0eXBlIC0yMD4+KSAoZXJyIDx0eXBlIC0xOT4pOwogZnVuYyAodCA8dHlwZSAxNT4pIEFkZCAoZCA8dHlwZSAzNT4pIDx0eXBlIDE1PjsKIGZ1bmMgKHQgPHR5cGUgMTU+KSBUcnVuY2F0ZSAoZCA8dHlwZSAzNT4pIDx0eXBlIDE1PjsKIGZ1bmMgKHQgPHR5cGUgMTU+KSBMb2NhdGlvbiAoKSA8dHlwZSAxNz47CiBmdW5jICh0IDx0eXBlIDE1PikgR29iRW5jb2RlICgpICg/IDx0eXBlIDM3IFtdIDx0eXBlIC0yMD4+LCA/IDx0eXBlIC0xOT4pOwogZnVuYyAodCA8dHlwZSAzMT4pIFVubWFyc2hhbEJpbmFyeSAoZGF0YSA8dHlwZSAzOCBbXSA8dHlwZSAtMjA+PikgPHR5cGUgLTE5PjsKIGZ1bmMgKHQgPHR5cGUgMTU+KSBJU09XZWVrICgpICh5ZWFyIDx0eXBlIC0xMT4sIHdlZWsgPHR5cGUgLTExPik7CiBmdW5jICh0IDx0eXBlIDE1PikgLnRpbWUubG9jYWJzICgpIChuYW1lIDx0eXBlIC0xNj4sIG9mZnNldCA8dHlwZSAtMTE+LCBhYnMgPHR5cGUgLTg+KTsKIGZ1bmMgKHQgPHR5cGUgMTU+KSBZZWFyRGF5ICgpIDx0eXBlIC0xMT47CiBmdW5jICh0IDx0eXBlIDE1PikgWWVhciAoKSA8dHlwZSAtMTE+OwogZnVuYyAodCA8dHlwZSAzMT4pIFVubWFyc2hhbEpTT04gKGRhdGEgPHR5cGUgMzkgW10gPHR5cGUgLTIwPj4pIChlcnIgPHR5cGUgLTE5Pik7Cj47IC50ZXN0aW5nLmR1cmF0aW9uIDx0eXBlIDM1PjsgLnRlc3Rpbmcuc2VsZiA8dHlwZSA0MCBpbnRlcmZhY2UgeyB9PjsgLnRlc3Rpbmcuc2lnbmFsIDx0eXBlIDQxIGNoYW4gPHR5cGUgNDIgaW50ZXJmYWNlIHsgfT4+OyB9PgogZnVuYyAoYyA8dHlwZSA0MyAqPHR5cGUgND4+KSAudGVzdGluZy5wcml2YXRlICgpOwogZnVuYyAoYyA8dHlwZSA0Mz4pIEZhaWwgKCk7CiBmdW5jIChjIDx0eXBlIDQzPikgRmFpbGVkICgpIDx0eXBlIC0xNT47CiBmdW5jIChjIDx0eXBlIDQzPikgRmFpbE5vdyAoKTsKIGZ1bmMgKGMgPHR5cGUgNDM+KSAudGVzdGluZy5sb2cgKHMgPHR5cGUgLTE2Pik7CiBmdW5jIChjIDx0eXBlIDQzPikgTG9nIChhcmdzIC4uLjx0eXBlIDQ0IGludGVyZmFjZSB7IH0+KTsKIGZ1bmMgKGMgPHR5cGUgNDM+KSBMb2dmIChmb3JtYXQgPHR5cGUgLTE2PiwgYXJncyAuLi48dHlwZSA0NSBpbnRlcmZhY2UgeyB9Pik7CiBmdW5jIChjIDx0eXBlIDQzPikgRXJyb3IgKGFyZ3MgLi4uPHR5cGUgNDYgaW50ZXJmYWNlIHsgfT4pOwogZnVuYyAoYyA8dHlwZSA0Mz4pIEVycm9yZiAoZm9ybWF0IDx0eXBlIC0xNj4sIGFyZ3MgLi4uPHR5cGUgNDcgaW50ZXJmYWNlIHsgfT4pOwogZnVuYyAoYyA8dHlwZSA0Mz4pIEZhdGFsIChhcmdzIC4uLjx0eXBlIDQ4IGludGVyZmFjZSB7IH0+KTsKIGZ1bmMgKGMgPHR5cGUgNDM+KSBGYXRhbGYgKGZvcm1hdCA8dHlwZSAtMTY+LCBhcmdzIC4uLjx0eXBlIDQ5IGludGVyZmFjZSB7IH0+KTsKIGZ1bmMgKGMgPHR5cGUgNDM+KSBTa2lwIChhcmdzIC4uLjx0eXBlIDUwIGludGVyZmFjZSB7IH0+KTsKIGZ1bmMgKGMgPHR5cGUgNDM+KSBTa2lwZiAoZm9ybWF0IDx0eXBlIC0xNj4sIGFyZ3MgLi4uPHR5cGUgNTEgaW50ZXJmYWNlIHsgfT4pOwogZnVuYyAoYyA8dHlwZSA0Mz4pIFNraXBOb3cgKCk7CiBmdW5jIChjIDx0eXBlIDQzPikgLnRlc3Rpbmcuc2tpcCAoKTsKIGZ1bmMgKGMgPHR5cGUgNDM+KSBTa2lwcGVkICgpIDx0eXBlIC0xNT47Cj47IE4gPHR5cGUgLTExPjsgLnRlc3RpbmcucHJldmlvdXNOIDx0eXBlIC0xMT47IC50ZXN0aW5nLnByZXZpb3VzRHVyYXRpb24gPHR5cGUgMzU+OyAudGVzdGluZy5iZW5jaG1hcmsgPHR5cGUgNTIgIkludGVybmFsQmVuY2htYXJrIiA8dHlwZSA1MyBzdHJ1Y3QgeyBOYW1lIDx0eXBlIC0xNj47IEYgPHR5cGUgNTQgKGIgPHR5cGUgNTUgKjx0eXBlIDI+Pik+OyB9Pj47IC50ZXN0aW5nLmJ5dGVzIDx0eXBlIC00PjsgLnRlc3RpbmcudGltZXJPbiA8dHlwZSAtMTU+OyAudGVzdGluZy5zaG93QWxsb2NSZXN1bHQgPHR5cGUgLTE1PjsgLnRlc3RpbmcucmVzdWx0IDx0eXBlIDU2ICJCZW5jaG1hcmtSZXN1bHQiIDx0eXBlIDU3IHN0cnVjdCB7IE4gPHR5cGUgLTExPjsgVCA8dHlwZSAzNT47IEJ5dGVzIDx0eXBlIC00PjsgTWVtQWxsb2NzIDx0eXBlIC04PjsgTWVtQnl0ZXMgPHR5cGUgLTg+OyB9PgogZnVuYyAociA8dHlwZSA1Nj4pIE5zUGVyT3AgKCkgPHR5cGUgLTQ+OwogZnVuYyAociA8dHlwZSA1Nj4pIC50ZXN0aW5nLm1iUGVyU2VjICgpIDx0eXBlIC0xMD47CiBmdW5jIChyIDx0eXBlIDU2PikgQWxsb2NzUGVyT3AgKCkgPHR5cGUgLTQ+OwogZnVuYyAociA8dHlwZSA1Nj4pIEFsbG9jZWRCeXRlc1Blck9wICgpIDx0eXBlIC00PjsKIGZ1bmMgKHIgPHR5cGUgNTY+KSBTdHJpbmcgKCkgPHR5cGUgLTE2PjsKIGZ1bmMgKHIgPHR5cGUgNTY+KSBNZW1TdHJpbmcgKCkgPHR5cGUgLTE2PjsKPjsgLnRlc3RpbmcucGFyYWxsZWxpc20gPHR5cGUgLTExPjsgLnRlc3Rpbmcuc3RhcnRBbGxvY3MgPHR5cGUgLTg+OyAudGVzdGluZy5zdGFydEJ5dGVzIDx0eXBlIC04PjsgLnRlc3RpbmcubmV0QWxsb2NzIDx0eXBlIC04PjsgLnRlc3RpbmcubmV0Qnl0ZXMgPHR5cGUgLTg+OyB9PgogZnVuYyAoYiA8dHlwZSA1OCAqPHR5cGUgMj4+KSBTdGFydFRpbWVyICgpOwogZnVuYyAoYiA8dHlwZSA1OD4pIFN0b3BUaW1lciAoKTsKIGZ1bmMgKGIgPHR5cGUgNTg+KSBSZXNldFRpbWVyICgpOwogZnVuYyAoYiA8dHlwZSA1OD4pIFNldEJ5dGVzIChuIDx0eXBlIC00Pik7CiBmdW5jIChiIDx0eXBlIDU4PikgUmVwb3J0QWxsb2NzICgpOwogZnVuYyAoYiA8dHlwZSA1OD4pIC50ZXN0aW5nLm5zUGVyT3AgKCkgPHR5cGUgLTQ+OwogZnVuYyAoYiA8dHlwZSA1OD4pIC50ZXN0aW5nLnJ1bk4gKG4gPHR5cGUgLTExPik7CiBmdW5jIChiIDx0eXBlIDU4PikgLnRlc3RpbmcucnVuICgpIDx0eXBlIDU2PjsKIGZ1bmMgKGIgPHR5cGUgNTg+KSAudGVzdGluZy5sYXVuY2ggKCk7CiBmdW5jIChiIDx0eXBlIDU4PikgLnRlc3RpbmcudHJpbU91dHB1dCAoKTsKIGZ1bmMgKGIgPHR5cGUgNTg+KSBSdW5QYXJhbGxlbCAoYm9keSA8dHlwZSA1OSAoPyA8dHlwZSA2MCAqPHR5cGUgNjEgIlBCIiA8dHlwZSA2MiBzdHJ1Y3QgeyAudGVzdGluZy5nbG9iYWxOIDx0eXBlIDYzICo8dHlwZSAtOD4+OyAudGVzdGluZy5ncmFpbiA8dHlwZSAtOD47IC50ZXN0aW5nLmNhY2hlIDx0eXBlIC04PjsgLnRlc3RpbmcuYk4gPHR5cGUgLTg+OyB9PgogZnVuYyAocGIgPHR5cGUgNjQgKjx0eXBlIDYxPj4pIE5leHQgKCkgPHR5cGUgLTE1PjsKPj4pPik7CiBmdW5jIChiIDx0eXBlIDU4PikgU2V0UGFyYWxsZWxpc20gKHAgPHR5cGUgLTExPik7Cj47CmZ1bmMgQmVuY2htYXJrIChmIDx0eXBlIDY1IChiIDx0eXBlIDU4Pik+KSA8dHlwZSA1Nj47CnR5cGUgPHR5cGUgNTY+Owp0eXBlIDx0eXBlIDY2ICJDb3ZlciIgPHR5cGUgNjcgc3RydWN0IHsgTW9kZSA8dHlwZSAtMTY+OyBDb3VudGVycyA8dHlwZSA2OCBtYXAgWzx0eXBlIC0xNj5dIDx0eXBlIDY5IFtdIDx0eXBlIC03Pj4+OyBCbG9ja3MgPHR5cGUgNzAgbWFwIFs8dHlwZSAtMTY+XSA8dHlwZSA3MSBbXSA8dHlwZSA3MiAiQ292ZXJCbG9jayIgPHR5cGUgNzMgc3RydWN0IHsgTGluZTAgPHR5cGUgLTc+OyBDb2wwIDx0eXBlIC02PjsgTGluZTEgPHR5cGUgLTc+OyBDb2wxIDx0eXBlIC02PjsgU3RtdHMgPHR5cGUgLTY+OyB9Pj4+PjsgQ292ZXJlZFBhY2thZ2VzIDx0eXBlIC0xNj47IH0+PjsKdHlwZSA8dHlwZSA3Mj47CmZ1bmMgQ292ZXJhZ2UgKCkgPHR5cGUgLTEwPjsKdHlwZSA8dHlwZSA1Mj47CnR5cGUgPHR5cGUgNzQgIkludGVybmFsRXhhbXBsZSIgPHR5cGUgNzUgc3RydWN0IHsgTmFtZSA8dHlwZSAtMTY+OyBGIDx0eXBlIDc2ICgpPjsgT3V0cHV0IDx0eXBlIC0xNj47IH0+PjsKdHlwZSA8dHlwZSA3NyAiSW50ZXJuYWxUZXN0IiA8dHlwZSA3OCBzdHJ1Y3QgeyBOYW1lIDx0eXBlIC0xNj47IEYgPHR5cGUgNzkgKD8gPHR5cGUgODAgKjx0eXBlIDgxICJUIiA8dHlwZSA4MiBzdHJ1Y3QgeyA/IDx0eXBlIDQ+OyAudGVzdGluZy5uYW1lIDx0eXBlIC0xNj47IC50ZXN0aW5nLnN0YXJ0UGFyYWxsZWwgPHR5cGUgODMgY2hhbiA8dHlwZSAtMTU+PjsgfT4KIGZ1bmMgKHQgPHR5cGUgODQgKjx0eXBlIDgxPj4pIFBhcmFsbGVsICgpOwogZnVuYyAodCA8dHlwZSA4ND4pIC50ZXN0aW5nLnJlcG9ydCAoKTsKPj4pPjsgfT4+Owp0eXBlIDx0eXBlIDg1ICJNIiA8dHlwZSA4NiBzdHJ1Y3QgeyAudGVzdGluZy5tYXRjaFN0cmluZyA8dHlwZSA4NyAocGF0IDx0eXBlIC0xNj4sIHN0ciA8dHlwZSAtMTY+KSAoPyA8dHlwZSAtMTU+LCA/IDx0eXBlIC0xOT4pPjsgLnRlc3RpbmcudGVzdHMgPHR5cGUgODggW10gPHR5cGUgNzc+PjsgLnRlc3RpbmcuYmVuY2htYXJrcyA8dHlwZSA4OSBbXSA8dHlwZSA1Mj4+OyAudGVzdGluZy5leGFtcGxlcyA8dHlwZSA5MCBbXSA8dHlwZSA3ND4+OyB9PgogZnVuYyAobSA8dHlwZSA5MSAqPHR5cGUgODU+PikgUnVuICgpIDx0eXBlIC0xMT47Cj47CmZ1bmMgTWFpbiAobWF0Y2hTdHJpbmcgPHR5cGUgOTIgKHBhdCA8dHlwZSAtMTY+LCBzdHIgPHR5cGUgLTE2PikgKD8gPHR5cGUgLTE1PiwgPyA8dHlwZSAtMTk+KT4sIHRlc3RzIDx0eXBlIDkzIFtdIDx0eXBlIDc3Pj4sIGJlbmNobWFya3MgPHR5cGUgOTQgW10gPHR5cGUgNTI+PiwgZXhhbXBsZXMgPHR5cGUgOTUgW10gPHR5cGUgNzQ+Pik7CmZ1bmMgTWFpblN0YXJ0IChtYXRjaFN0cmluZyA8dHlwZSA5NiAocGF0IDx0eXBlIC0xNj4sIHN0ciA8dHlwZSAtMTY+KSAoPyA8dHlwZSAtMTU+LCA/IDx0eXBlIC0xOT4pPiwgdGVzdHMgPHR5cGUgOTcgW10gPHR5cGUgNzc+PiwgYmVuY2htYXJrcyA8dHlwZSA5OCBbXSA8dHlwZSA1Mj4+LCBleGFtcGxlcyA8dHlwZSA5OSBbXSA8dHlwZSA3ND4+KSA8dHlwZSA5MT47CnR5cGUgPHR5cGUgNjE+OwpmdW5jIFJlZ2lzdGVyQ292ZXIgKGMgPHR5cGUgNjY+KTsKZnVuYyBSdW5CZW5jaG1hcmtzIChtYXRjaFN0cmluZyA8dHlwZSAxMDAgKHBhdCA8dHlwZSAtMTY+LCBzdHIgPHR5cGUgLTE2PikgKD8gPHR5cGUgLTE1PiwgPyA8dHlwZSAtMTk+KT4sIGJlbmNobWFya3MgPHR5cGUgMTAxIFtdIDx0eXBlIDUyPj4pOwpmdW5jIFJ1bkV4YW1wbGVzIChtYXRjaFN0cmluZyA8dHlwZSAxMDIgKHBhdCA8dHlwZSAtMTY+LCBzdHIgPHR5cGUgLTE2PikgKD8gPHR5cGUgLTE1PiwgPyA8dHlwZSAtMTk+KT4sIGV4YW1wbGVzIDx0eXBlIDEwMyBbXSA8dHlwZSA3ND4+KSAob2sgPHR5cGUgLTE1Pik7CmZ1bmMgUnVuVGVzdHMgKG1hdGNoU3RyaW5nIDx0eXBlIDEwNCAocGF0IDx0eXBlIC0xNj4sIHN0ciA8dHlwZSAtMTY+KSAoPyA8dHlwZSAtMTU+LCA/IDx0eXBlIC0xOT4pPiwgdGVzdHMgPHR5cGUgMTA1IFtdIDx0eXBlIDc3Pj4pIChvayA8dHlwZSAtMTU+KTsKZnVuYyBTaG9ydCAoKSA8dHlwZSAtMTU+Owp0eXBlIDx0eXBlIDgxPjsKdHlwZSA8dHlwZSAxMDYgIlRCIiA8dHlwZSAxMDcgaW50ZXJmYWNlIHsgRXJyb3IgKGFyZ3MgLi4uPHR5cGUgMTA4IGludGVyZmFjZSB7IH0+KTsgRXJyb3JmIChmb3JtYXQgPHR5cGUgLTE2PiwgYXJncyAuLi48dHlwZSAxMDkgaW50ZXJmYWNlIHsgfT4pOyBGYWlsICgpOyBGYWlsTm93ICgpOyBGYWlsZWQgKCkgPHR5cGUgLTE1PjsgRmF0YWwgKGFyZ3MgLi4uPHR5cGUgMTEwIGludGVyZmFjZSB7IH0+KTsgRmF0YWxmIChmb3JtYXQgPHR5cGUgLTE2PiwgYXJncyAuLi48dHlwZSAxMTEgaW50ZXJmYWNlIHsgfT4pOyBMb2cgKGFyZ3MgLi4uPHR5cGUgMTEyIGludGVyZmFjZSB7IH0+KTsgTG9nZiAoZm9ybWF0IDx0eXBlIC0xNj4sIGFyZ3MgLi4uPHR5cGUgMTEzIGludGVyZmFjZSB7IH0+KTsgU2tpcCAoYXJncyAuLi48dHlwZSAxMTQgaW50ZXJmYWNlIHsgfT4pOyBTa2lwTm93ICgpOyBTa2lwZiAoZm9ybWF0IDx0eXBlIC0xNj4sIGFyZ3MgLi4uPHR5cGUgMTE1IGludGVyZmFjZSB7IH0+KTsgU2tpcHBlZCAoKSA8dHlwZSAtMTU+OyAudGVzdGluZy5wcml2YXRlICgpOyB9Pj47CmZ1bmMgVmVyYm9zZSAoKSA8dHlwZSAtMTU+OwpjaGVja3N1bSBCMkMzNDE4RTJCODBFNTdERTUwRDk2QTBBRDA1QjUwN0QzNENFREUwOwoALnN5bXRhYgAuc3RydGFiAC5zaHN0cnRhYgAuZ29fZXhwb3J0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAAAQAAAAAAAAAAAAAANAAAAJoqAAAAAAAAAAAAAAEAAAAAAAAAEQAAAAMAAAAAAAAAAAAAAM4qAAAmAAAAAAAAAAAAAAABAAAAAAAAAAEAAAACAAAAAAAAAAAAAAD0KgAAIAAAAAQAAAACAAAABAAAABAAAAAJAAAAAwAAAAAAAAAAAAAAFCsAAAEAAAAAAAAAAAAAAAEAAAAAAAAA