f0VMRgEBAQAAAAAAAAAAAAEACAABAAAAAAAAAAAAAACMGgAABxAAUDQAAAAAACgABQACAHYxOwpwYWNrYWdlIHNjYW5uZXI7CnBrZ3BhdGggZ28vc2Nhbm5lcjsKcHJpb3JpdHkgODsKaW1wb3J0IGJ5dGVzIGJ5dGVzICJieXRlcyI7CmltcG9ydCBmbXQgZm10ICJmbXQiOwppbXBvcnQgdG9rZW4gZ28vdG9rZW4gImdvL3Rva2VuIjsKaW1wb3J0IGlvIGlvICJpbyI7CmltcG9ydCBmaWxlcGF0aCBwYXRoL2ZpbGVwYXRoICJwYXRoL2ZpbGVwYXRoIjsKaW1wb3J0IHNvcnQgc29ydCAic29ydCI7CmltcG9ydCBzdHJjb252IHN0cmNvbnYgInN0cmNvbnYiOwppbXBvcnQgdW5pY29kZSB1bmljb2RlICJ1bmljb2RlIjsKaW1wb3J0IHV0ZjggdW5pY29kZS91dGY4ICJ1bmljb2RlL3V0ZjgiOwppbml0IHNjYW5uZXIgZ29fc2Nhbm5lci4uaW1wb3J0IDggbWF0aCBtYXRoLi5pbXBvcnQgMSBydW50aW1lIHJ1bnRpbWUuLmltcG9ydCAxIHVuaWNvZGUgdW5pY29kZS4uaW1wb3J0IDEgc3RyY29udiBzdHJjb252Li5pbXBvcnQgMiBzeW5jIHN5bmMuLmltcG9ydCAyIGlvIGlvLi5pbXBvcnQgMyByZWZsZWN0IHJlZmxlY3QuLmltcG9ydCAzIHN5c2NhbGwgc3lzY2FsbC4uaW1wb3J0IDMgYnl0ZXMgYnl0ZXMuLmltcG9ydCA0IHRpbWUgdGltZS4uaW1wb3J0IDQgb3Mgb3MuLmltcG9ydCA1IGZpbGVwYXRoIHBhdGhfZmlsZXBhdGguLmltcG9ydCA2IGZtdCBmbXQuLmltcG9ydCA2IHRva2VuIGdvX3Rva2VuLi5pbXBvcnQgNzsKdHlwZSA8dHlwZSAxICJFcnJvciIgPHR5cGUgMiBzdHJ1Y3QgeyBQb3MgPHR5cGUgMyAiZ28vdG9rZW4uUG9zaXRpb24iIDx0eXBlIDQgc3RydWN0IHsgRmlsZW5hbWUgPHR5cGUgLTE2PjsgT2Zmc2V0IDx0eXBlIC0xMT47IExpbmUgPHR5cGUgLTExPjsgQ29sdW1uIDx0eXBlIC0xMT47IH0+CiBmdW5jIChwb3MgPHR5cGUgNSAqPHR5cGUgMz4+KSBJc1ZhbGlkICgpIDx0eXBlIC0xNT47CiBmdW5jIChwb3MgPHR5cGUgMz4pIFN0cmluZyAoKSA8dHlwZSAtMTY+Owo+OyBNc2cgPHR5cGUgLTE2PjsgfT4KIGZ1bmMgKGUgPHR5cGUgMT4pIEVycm9yICgpIDx0eXBlIC0xNj47Cj47CnR5cGUgPHR5cGUgNiAiRXJyb3JIYW5kbGVyIiA8dHlwZSA3IChwb3MgPHR5cGUgMz4sIG1zZyA8dHlwZSAtMTY+KT4+Owp0eXBlIDx0eXBlIDggIkVycm9yTGlzdCIgPHR5cGUgOSBbXSA8dHlwZSAxMCAqPHR5cGUgMT4+PgogZnVuYyAocCA8dHlwZSAxMSAqPHR5cGUgOD4+KSBBZGQgKHBvcyA8dHlwZSAzPiwgbXNnIDx0eXBlIC0xNj4pOwogZnVuYyAocCA8dHlwZSAxMT4pIFJlc2V0ICgpOwogZnVuYyAocCA8dHlwZSA4PikgTGVuICgpIDx0eXBlIC0xMT47CiBmdW5jIChwIDx0eXBlIDg+KSBTd2FwIChpIDx0eXBlIC0xMT4sIGogPHR5cGUgLTExPik7CiBmdW5jIChwIDx0eXBlIDg+KSBMZXNzIChpIDx0eXBlIC0xMT4sIGogPHR5cGUgLTExPikgPHR5cGUgLTE1PjsKIGZ1bmMgKHAgPHR5cGUgOD4pIFNvcnQgKCk7CiBmdW5jIChwIDx0eXBlIDExPikgUmVtb3ZlTXVsdGlwbGVzICgpOwogZnVuYyAocCA8dHlwZSA4PikgRXJyb3IgKCkgPHR5cGUgLTE2PjsKIGZ1bmMgKHAgPHR5cGUgOD4pIEVyciAoKSA8dHlwZSAtMTk+Owo+Owp0eXBlIDx0eXBlIDEyICJNb2RlIiA8dHlwZSAtMTI+PjsKZnVuYyBQcmludEVycm9yICh3IDx0eXBlIDEzICJpby5Xcml0ZXIiIDx0eXBlIDE0IGludGVyZmFjZSB7IFdyaXRlIChwIDx0eXBlIDE1IFtdIDx0eXBlIC0yMD4+KSAobiA8dHlwZSAtMTE+LCBlcnIgPHR5cGUgLTE5Pik7IH0+PiwgZXJyIDx0eXBlIC0xOT4pOwpjb25zdCBTY2FuQ29tbWVudHMgPHR5cGUgMTI+ID0gMSA7CnR5cGUgPHR5cGUgMTYgIlNjYW5uZXIiIDx0eXBlIDE3IHN0cnVjdCB7IC5nby9zY2FubmVyLmZpbGUgPHR5cGUgMTggKjx0eXBlIDE5ICJnby90b2tlbi5GaWxlIiA8dHlwZSAyMCBzdHJ1Y3QgeyAuZ28vdG9rZW4uc2V0IDx0eXBlIDIxICo8dHlwZSAyMiAiZ28vdG9rZW4uRmlsZVNldCIgPHR5cGUgMjMgc3RydWN0IHsgLmdvL3Rva2VuLm11dGV4IDx0eXBlIDI0ICJzeW5jLlJXTXV0ZXgiICJzeW5jIiA8dHlwZSAyNSBzdHJ1Y3QgeyAuc3luYy53IDx0eXBlIDI2ICJzeW5jLk11dGV4IiA8dHlwZSAyNyBzdHJ1Y3QgeyAuc3luYy5zdGF0ZSA8dHlwZSAtMz47IC5zeW5jLnNlbWEgPHR5cGUgLTc+OyB9PgogZnVuYyAobSA8dHlwZSAyOCAqPHR5cGUgMjY+PikgVW5sb2NrICgpOwogZnVuYyAobSA8dHlwZSAyOD4pIExvY2sgKCk7Cj47IC5zeW5jLndyaXRlclNlbSA8dHlwZSAtNz47IC5zeW5jLnJlYWRlclNlbSA8dHlwZSAtNz47IC5zeW5jLnJlYWRlckNvdW50IDx0eXBlIC0zPjsgLnN5bmMucmVhZGVyV2FpdCA8dHlwZSAtMz47IH0+CiBmdW5jIChydyA8dHlwZSAyOSAqPHR5cGUgMjQ+PikgUlVubG9jayAoKTsKIGZ1bmMgKHJ3IDx0eXBlIDI5PikgVW5sb2NrICgpOwogZnVuYyAocncgPHR5cGUgMjk+KSBSTG9ja2VyICgpIDx0eXBlIDMwICJzeW5jLkxvY2tlciIgPHR5cGUgMzEgaW50ZXJmYWNlIHsgTG9jayAoKTsgVW5sb2NrICgpOyB9Pj47CiBmdW5jIChydyA8dHlwZSAyOT4pIFJMb2NrICgpOwogZnVuYyAocncgPHR5cGUgMjk+KSBMb2NrICgpOwo+OyAuZ28vdG9rZW4uYmFzZSA8dHlwZSAtMTE+OyAuZ28vdG9rZW4uZmlsZXMgPHR5cGUgMzIgW10gPHR5cGUgMzMgKjx0eXBlIDE5Pj4+OyAuZ28vdG9rZW4ubGFzdCA8dHlwZSAzMz47IH0+CiBmdW5jIChzIDx0eXBlIDM0ICo8dHlwZSAyMj4+KSAuZ28vdG9rZW4uZmlsZSAocCA8dHlwZSAzNSAiZ28vdG9rZW4uUG9zIiA8dHlwZSAtMTE+CiBmdW5jIChwIDx0eXBlIDM1PikgSXNWYWxpZCAoKSA8dHlwZSAtMTU+Owo+KSA8dHlwZSAzMz47CiBmdW5jIChzIDx0eXBlIDM0PikgV3JpdGUgKGVuY29kZSA8dHlwZSAzNiAoPyA8dHlwZSAzNyBpbnRlcmZhY2UgeyB9PikgPHR5cGUgLTE5Pj4pIDx0eXBlIC0xOT47CiBmdW5jIChzIDx0eXBlIDM0PikgQWRkRmlsZSAoZmlsZW5hbWUgPHR5cGUgLTE2PiwgYmFzZSA8dHlwZSAtMTE+LCBzaXplIDx0eXBlIC0xMT4pIDx0eXBlIDMzPjsKIGZ1bmMgKHMgPHR5cGUgMzQ+KSBQb3NpdGlvbiAocCA8dHlwZSAzNT4pIChwb3MgPHR5cGUgMz4pOwogZnVuYyAocyA8dHlwZSAzND4pIFBvc2l0aW9uRm9yIChwIDx0eXBlIDM1PiwgYWRqdXN0ZWQgPHR5cGUgLTE1PikgKHBvcyA8dHlwZSAzPik7CiBmdW5jIChzIDx0eXBlIDM0PikgUmVhZCAoZGVjb2RlIDx0eXBlIDM4ICg/IDx0eXBlIDM5IGludGVyZmFjZSB7IH0+KSA8dHlwZSAtMTk+PikgPHR5cGUgLTE5PjsKIGZ1bmMgKHMgPHR5cGUgMzQ+KSBJdGVyYXRlIChmIDx0eXBlIDQwICg/IDx0eXBlIDMzPikgPHR5cGUgLTE1Pj4pOwogZnVuYyAocyA8dHlwZSAzND4pIEJhc2UgKCkgPHR5cGUgLTExPjsKIGZ1bmMgKHMgPHR5cGUgMzQ+KSBGaWxlIChwIDx0eXBlIDM1PikgKGYgPHR5cGUgMzM+KTsKPj47IC5nby90b2tlbi5uYW1lIDx0eXBlIC0xNj47IC5nby90b2tlbi5iYXNlIDx0eXBlIC0xMT47IC5nby90b2tlbi5zaXplIDx0eXBlIC0xMT47IC5nby90b2tlbi5saW5lcyA8dHlwZSA0MSBbXSA8dHlwZSAtMTE+PjsgLmdvL3Rva2VuLmluZm9zIDx0eXBlIDQyIFtdIDx0eXBlIDQzICIuZ28vdG9rZW4ubGluZUluZm8iIDx0eXBlIDQ0IHN0cnVjdCB7IE9mZnNldCA8dHlwZSAtMTE+OyBGaWxlbmFtZSA8dHlwZSAtMTY+OyBMaW5lIDx0eXBlIC0xMT47IH0+Pj47IH0+CiBmdW5jIChmIDx0eXBlIDMzPikgUG9zaXRpb25Gb3IgKHAgPHR5cGUgMzU+LCBhZGp1c3RlZCA8dHlwZSAtMTU+KSAocG9zIDx0eXBlIDM+KTsKIGZ1bmMgKGYgPHR5cGUgMzM+KSBOYW1lICgpIDx0eXBlIC0xNj47CiBmdW5jIChmIDx0eXBlIDMzPikgUG9zIChvZmZzZXQgPHR5cGUgLTExPikgPHR5cGUgMzU+OwogZnVuYyAoZiA8dHlwZSAzMz4pIC5nby90b2tlbi5wb3NpdGlvbiAocCA8dHlwZSAzNT4sIGFkanVzdGVkIDx0eXBlIC0xNT4pIChwb3MgPHR5cGUgMz4pOwogZnVuYyAoZiA8dHlwZSAzMz4pIE1lcmdlTGluZSAobGluZSA8dHlwZSAtMTE+KTsKIGZ1bmMgKGYgPHR5cGUgMzM+KSBTZXRMaW5lc0ZvckNvbnRlbnQgKGNvbnRlbnQgPHR5cGUgNDUgW10gPHR5cGUgLTIwPj4pOwogZnVuYyAoZiA8dHlwZSAzMz4pIFNldExpbmVzIChsaW5lcyA8dHlwZSA0NiBbXSA8dHlwZSAtMTE+PikgPHR5cGUgLTE1PjsKIGZ1bmMgKGYgPHR5cGUgMzM+KSBQb3NpdGlvbiAocCA8dHlwZSAzNT4pIChwb3MgPHR5cGUgMz4pOwogZnVuYyAoZiA8dHlwZSAzMz4pIExpbmUgKHAgPHR5cGUgMzU+KSA8dHlwZSAtMTE+OwogZnVuYyAoZiA8dHlwZSAzMz4pIEFkZExpbmUgKG9mZnNldCA8dHlwZSAtMTE+KTsKIGZ1bmMgKGYgPHR5cGUgMzM+KSBTaXplICgpIDx0eXBlIC0xMT47CiBmdW5jIChmIDx0eXBlIDMzPikgLmdvL3Rva2VuLnVucGFjayAob2Zmc2V0IDx0eXBlIC0xMT4sIGFkanVzdGVkIDx0eXBlIC0xNT4pIChmaWxlbmFtZSA8dHlwZSAtMTY+LCBsaW5lIDx0eXBlIC0xMT4sIGNvbHVtbiA8dHlwZSAtMTE+KTsKIGZ1bmMgKGYgPHR5cGUgMzM+KSBPZmZzZXQgKHAgPHR5cGUgMzU+KSA8dHlwZSAtMTE+OwogZnVuYyAoZiA8dHlwZSAzMz4pIExpbmVDb3VudCAoKSA8dHlwZSAtMTE+OwogZnVuYyAoZiA8dHlwZSAzMz4pIEFkZExpbmVJbmZvIChvZmZzZXQgPHR5cGUgLTExPiwgZmlsZW5hbWUgPHR5cGUgLTE2PiwgbGluZSA8dHlwZSAtMTE+KTsKIGZ1bmMgKGYgPHR5cGUgMzM+KSBCYXNlICgpIDx0eXBlIC0xMT47Cj4+OyAuZ28vc2Nhbm5lci5kaXIgPHR5cGUgLTE2PjsgLmdvL3NjYW5uZXIuc3JjIDx0eXBlIDQ3IFtdIDx0eXBlIC0yMD4+OyAuZ28vc2Nhbm5lci5lcnIgPHR5cGUgNj47IC5nby9zY2FubmVyLm1vZGUgPHR5cGUgMTI+OyAuZ28vc2Nhbm5lci5jaCA8dHlwZSAtMjE+OyAuZ28vc2Nhbm5lci5vZmZzZXQgPHR5cGUgLTExPjsgLmdvL3NjYW5uZXIucmRPZmZzZXQgPHR5cGUgLTExPjsgLmdvL3NjYW5uZXIubGluZU9mZnNldCA8dHlwZSAtMTE+OyAuZ28vc2Nhbm5lci5pbnNlcnRTZW1pIDx0eXBlIC0xNT47IEVycm9yQ291bnQgPHR5cGUgLTExPjsgfT4KIGZ1bmMgKHMgPHR5cGUgNDggKjx0eXBlIDE2Pj4pIC5nby9zY2FubmVyLm5leHQgKCk7CiBmdW5jIChzIDx0eXBlIDQ4PikgSW5pdCAoZmlsZSA8dHlwZSAxOD4sIHNyYyA8dHlwZSA0OSBbXSA8dHlwZSAtMjA+PiwgZXJyIDx0eXBlIDY+LCBtb2RlIDx0eXBlIDEyPik7CiBmdW5jIChzIDx0eXBlIDQ4PikgLmdvL3NjYW5uZXIuZXJyb3IgKG9mZnMgPHR5cGUgLTExPiwgbXNnIDx0eXBlIC0xNj4pOwogZnVuYyAocyA8dHlwZSA0OD4pIC5nby9zY2FubmVyLmludGVycHJldExpbmVDb21tZW50ICh0ZXh0IDx0eXBlIDUwIFtdIDx0eXBlIC0yMD4+KTsKIGZ1bmMgKHMgPHR5cGUgNDg+KSAuZ28vc2Nhbm5lci5zY2FuQ29tbWVudCAoKSA8dHlwZSAtMTY+OwogZnVuYyAocyA8dHlwZSA0OD4pIC5nby9zY2FubmVyLmZpbmRMaW5lRW5kICgpIDx0eXBlIC0xNT47CiBmdW5jIChzIDx0eXBlIDQ4PikgLmdvL3NjYW5uZXIuc2NhbklkZW50aWZpZXIgKCkgPHR5cGUgLTE2PjsKIGZ1bmMgKHMgPHR5cGUgNDg+KSAuZ28vc2Nhbm5lci5zY2FuTWFudGlzc2EgKGJhc2UgPHR5cGUgLTExPik7CiBmdW5jIChzIDx0eXBlIDQ4PikgLmdvL3NjYW5uZXIuc2Nhbk51bWJlciAoc2VlbkRlY2ltYWxQb2ludCA8dHlwZSAtMTU+KSAoPyA8dHlwZSA1MSAiZ28vdG9rZW4uVG9rZW4iIDx0eXBlIC0xMT4KIGZ1bmMgKG9wIDx0eXBlIDUxPikgUHJlY2VkZW5jZSAoKSA8dHlwZSAtMTE+OwogZnVuYyAodG9rIDx0eXBlIDUxPikgSXNPcGVyYXRvciAoKSA8dHlwZSAtMTU+OwogZnVuYyAodG9rIDx0eXBlIDUxPikgSXNMaXRlcmFsICgpIDx0eXBlIC0xNT47CiBmdW5jICh0b2sgPHR5cGUgNTE+KSBJc0tleXdvcmQgKCkgPHR5cGUgLTE1PjsKIGZ1bmMgKHRvayA8dHlwZSA1MT4pIFN0cmluZyAoKSA8dHlwZSAtMTY+Owo+LCA/IDx0eXBlIC0xNj4pOwogZnVuYyAocyA8dHlwZSA0OD4pIC5nby9zY2FubmVyLnNjYW5Fc2NhcGUgKHF1b3RlIDx0eXBlIC0yMT4pIDx0eXBlIC0xNT47CiBmdW5jIChzIDx0eXBlIDQ4PikgLmdvL3NjYW5uZXIuc2NhblJ1bmUgKCkgPHR5cGUgLTE2PjsKIGZ1bmMgKHMgPHR5cGUgNDg+KSAuZ28vc2Nhbm5lci5zY2FuU3RyaW5nICgpIDx0eXBlIC0xNj47CiBmdW5jIChzIDx0eXBlIDQ4PikgLmdvL3NjYW5uZXIuc2NhblJhd1N0cmluZyAoKSA8dHlwZSAtMTY+OwogZnVuYyAocyA8dHlwZSA0OD4pIC5nby9zY2FubmVyLnNraXBXaGl0ZXNwYWNlICgpOwogZnVuYyAocyA8dHlwZSA0OD4pIC5nby9zY2FubmVyLnN3aXRjaDIgKHRvazAgPHR5cGUgNTE+LCB0b2sxIDx0eXBlIDUxPikgPHR5cGUgNTE+OwogZnVuYyAocyA8dHlwZSA0OD4pIC5nby9zY2FubmVyLnN3aXRjaDMgKHRvazAgPHR5cGUgNTE+LCB0b2sxIDx0eXBlIDUxPiwgY2gyIDx0eXBlIC0yMT4sIHRvazIgPHR5cGUgNTE+KSA8dHlwZSA1MT47CiBmdW5jIChzIDx0eXBlIDQ4PikgLmdvL3NjYW5uZXIuc3dpdGNoNCAodG9rMCA8dHlwZSA1MT4sIHRvazEgPHR5cGUgNTE+LCBjaDIgPHR5cGUgLTIxPiwgdG9rMiA8dHlwZSA1MT4sIHRvazMgPHR5cGUgNTE+KSA8dHlwZSA1MT47CiBmdW5jIChzIDx0eXBlIDQ4PikgU2NhbiAoKSAocG9zIDx0eXBlIDM1PiwgdG9rIDx0eXBlIDUxPiwgbGl0IDx0eXBlIC0xNj4pOwo+OwpjaGVja3N1bSAxNzA4OEVBQkQxQkMzNkQ2RjVGQ0FCNEI5MkMwREIzNzkzOTIzOEQ4OwoALnN5bXRhYgAuc3RydGFiAC5zaHN0cnRhYgAuZ29fZXhwb3J0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAAAQAAAAAAAAAAAAAANAAAAA4aAAAAAAAAAAAAAAEAAAAAAAAAEQAAAAMAAAAAAAAAAAAAAEIaAAAmAAAAAAAAAAAAAAABAAAAAAAAAAEAAAACAAAAAAAAAAAAAABoGgAAIAAAAAQAAAACAAAABAAAABAAAAAJAAAAAwAAAAAAAAAAAAAAiBoAAAEAAAAAAAAAAAAAAAEAAAAAAAAA